<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>chuyeow.wtf</title>
  <subtitle>Go, Ruby, Rails, Firefox, Anime, Mac</subtitle>
  <link rel="self" type="application/atom+xml" href="https://chuyeow.wtf/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://chuyeow.wtf"/>
  <generator uri="https://www.getzola.org/">Zola</generator>
  <updated>2021-03-28T08:00:00+08:00</updated>
  <id>https://chuyeow.wtf/feed.xml</id>
  <entry>
    <title>Everything is My Fault</title>
    <published>2021-03-28T08:00:00+08:00</published>
    <updated>2021-03-28T08:00:00+08:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2021/03/28/everything-is-my-fault-extreme-ownership/"/>
    <id>https://chuyeow.wtf/2021/03/28/everything-is-my-fault-extreme-ownership/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2021/03/28/everything-is-my-fault-extreme-ownership/">&lt;p&gt;I’ve been panic-reading management and leadership books in preparation for my new job as SVP of Engineering at &lt;a href=&quot;https:&#x2F;&#x2F;www.wego.com&#x2F;&quot;&gt;Wego&lt;&#x2F;a&gt; (something that I&#x27;ll probably write about). One of the books I really enjoyed was &lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;gp&#x2F;product&#x2F;B00AFPVP0Y&#x2F;ref=as_li_tl?ie=UTF8&amp;tag=codefront-20&amp;camp=1789&amp;creative=9325&amp;linkCode=as2&amp;creativeASIN=B00AFPVP0Y&amp;linkId=4055c3caef345a3e0ad578265b8ab39e&quot;&gt;Turn the Ship Around&lt;&#x2F;a&gt;. This led to me devour other sources of knowledge from the author, David Marquet: his &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;channel&#x2F;UCM6PvFiH_weNCMCnFynTNdg&quot;&gt;bite-sized YouTube videos&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;gp&#x2F;product&#x2F;B07L2KL5XV&#x2F;ref=as_li_tl?ie=UTF8&amp;tag=codefront-20&amp;camp=1789&amp;creative=9325&amp;linkCode=as2&amp;creativeASIN=B07L2KL5XV&amp;linkId=31012d457590f85ac568a3be08264a30&quot;&gt;Leadership is Language&lt;&#x2F;a&gt; are awesome.&lt;&#x2F;p&gt;
&lt;p&gt;Before reading these books, I’d a pretty strong bias against military-flavoured leadership books — the military that I had the opportunity to be a part of did not impress my young mind as being particularly strong at leadership. And I&#x27;d judge as naive the people who try to apply what they learnt in or from the military to the business arena.&lt;&#x2F;p&gt;
&lt;p&gt;As my past self has repeatedly learnt, there&#x27;re gems to be found in unexpected, unsolicited perspectives.&lt;&#x2F;p&gt;
&lt;p&gt;But this is blog post is &lt;em&gt;not&lt;&#x2F;em&gt; about these books – I might write about them in future because they taught me a lot about leadership and using better words to communicate what I &lt;em&gt;really&lt;&#x2F;em&gt; mean.&lt;&#x2F;p&gt;
&lt;p&gt;Rather, I want to write about one of the most valuable takeaways from another book written by military leaders: &lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;gp&#x2F;product&#x2F;B0739PYQSS&#x2F;ref=as_li_tl?ie=UTF8&amp;tag=codefront-20&amp;camp=1789&amp;creative=9325&amp;linkCode=as2&amp;creativeASIN=B0739PYQSS&amp;linkId=6c34d0cc2e5b112f4ad90b1428f0fabb&quot;&gt;Extreme Ownership&lt;&#x2F;a&gt;. And it&#x27;s this, paraphrased heavily by me:&lt;&#x2F;p&gt;
&lt;blockquote&gt;Everything is my fault. And when I see it that way, I can fix it. If someone isn’t doing what I want them to do, look in the mirror first and figure out what I can do to better enable this.&lt;&#x2F;blockquote&gt;
&lt;p&gt;In truth, I lied – there are 2 takeaways in that:&lt;&#x2F;p&gt;
&lt;ol&gt;
  &lt;li&gt;Taking ownership of &lt;em&gt;everything&lt;&#x2F;em&gt; keeps me in a positive, problem-solving mindset.&lt;&#x2F;li&gt;
  &lt;li&gt;If my manager&#x2F;reports&#x2F;peers&#x2F;executives are not doing what I need them to do, stop complaining about it. Instead, since it&#x27;s my fault, ask what do &lt;em&gt;I&lt;&#x2F;em&gt; need to do.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;These are brilliant &lt;em&gt;reminders&lt;&#x2F;em&gt; for two very common occasions when working in teams: facing setbacks, and situations of unclear ownership (which often means &lt;em&gt;no ownership&lt;&#x2F;em&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;It also equips me with some handy organizational smells (akin to &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Code_smell&quot;&gt;code smells&lt;&#x2F;a&gt;):&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;Are people &lt;em&gt;really&lt;&#x2F;em&gt; supported when they&#x27;re asked to work on an initiative? Or are they consumed by their &lt;a href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;13260184-the-4-disciplines-of-execution&quot;&gt;&lt;&#x2F;a&gt;day-to-day whirlwind&lt;&#x2F;a&gt; while their managers are wondering why nothing is getting done?&lt;&#x2F;li&gt;
  &lt;li&gt;Are people speaking about problems but seldom speaking about their part in the solution?&lt;&#x2F;li&gt;
  &lt;li&gt;Any hint of placing blame really &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Q685Ko2DHDs&quot;&gt;grinds my gears&lt;&#x2F;a&gt;. &quot;They should get their shit together.&quot; &quot;It can&#x27;t be that hard to do X.&quot; I&#x27;d smile and remember the days I&#x27;d hop on their cathartic ride of placing blame. I struggle with helping people be aware of the impact of what they are doing. Send advice.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For a quick idea of whether &lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;gp&#x2F;product&#x2F;B0739PYQSS&#x2F;ref=as_li_tl?ie=UTF8&amp;tag=codefront-20&amp;camp=1789&amp;creative=9325&amp;linkCode=as2&amp;creativeASIN=B0739PYQSS&amp;linkId=6c34d0cc2e5b112f4ad90b1428f0fabb&quot;&gt;Extreme Ownership&lt;&#x2F;a&gt; is worth your time (and we have &lt;em&gt;very little&lt;&#x2F;em&gt; time), I recommend &lt;a href=&quot;https:&#x2F;&#x2F;critter.blog&#x2F;2020&#x2F;08&#x2F;26&#x2F;extreme-ownership-book-notes&#x2F;&quot;&gt;Mike Crittenden&#x27;s book notes of Extreme Summary&lt;&#x2F;a&gt;. If you&#x27;ve got the time, the entire book is a recommended 5-star read.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Remapping keys on macOS</title>
    <published>2020-06-24T08:00:00+08:00</published>
    <updated>2020-06-24T08:00:00+08:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2020/06/24/remapping-keys-on-macos/"/>
    <id>https://chuyeow.wtf/2020/06/24/remapping-keys-on-macos/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2020/06/24/remapping-keys-on-macos/">&lt;p&gt;&lt;a href=&quot;#remap-keys-on-macos&quot;&gt;I ramble a bit here - you may want to &lt;b&gt;skip to how to remap keys on macOS&lt;&#x2F;b&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I attended &lt;a href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;wwdc20&#x2F;&quot;&gt;WWDC&lt;&#x2F;a&gt; for the first time ever (making lemonade in the
COVID-19 situation), and after watching the &lt;a href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;wwdc20&#x2F;101&quot;&gt;keynote&lt;&#x2F;a&gt;, got pretty
excited about macOS Big Sur.&lt;&#x2F;p&gt;
&lt;p&gt;I wanted to install the macOS Big Sur developer beta but &lt;em&gt;not&lt;&#x2F;em&gt; at the expense of making my main development
MacBook Pro virtually unusable. One of the things I thought I really needed working was
&lt;a href=&quot;https:&#x2F;&#x2F;karabiner-elements.pqrs.org&#x2F;&quot;&gt;Karabiner-Elements&lt;&#x2F;a&gt;, which I use to remap keys, specifically:&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;Caps Lock&lt;&#x2F;code&gt; to &lt;code&gt;Esc&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;code&gt;Esc&lt;&#x2F;code&gt; to &lt;code&gt;`&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This particular remapping is really because I use &lt;code&gt;`&lt;&#x2F;code&gt; (backtick) as my
&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tmux&#x2F;tmux&quot;&gt;tmux&lt;&#x2F;a&gt; prefix key. I picked this up from an
&lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;keyist&quot;&gt;ex-colleague&lt;&#x2F;a&gt; after watching him &lt;em&gt;fly&lt;&#x2F;em&gt; while switching tmux panes. And I
use either a compact 60% or 65% keyboard which meant I didn&#x27;t have a dedicated &lt;code&gt;`&lt;&#x2F;code&gt; key - I&#x27;d have to hit
&lt;code&gt;Fn-Esc&lt;&#x2F;code&gt; which is even more terrible than the default of &lt;code&gt;Ctrl-B&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;esc-tilde-backticks.jpg&quot; alt=&quot;Photo of Escape key&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p id=&quot;remap-keys-on-macos&quot;&gt;Unsurprisingly, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pqrs-org&#x2F;Karabiner-Elements&#x2F;issues&#x2F;2331&quot;&gt;Karabiner-Elements was not working
in Big Sur&lt;&#x2F;a&gt;. Not satisfied with that, I quickly found that macOS has supported
&lt;a href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;library&#x2F;archive&#x2F;technotes&#x2F;tn2450&#x2F;_index.html&quot;&gt;native key remapping&lt;&#x2F;a&gt; since macOS
Sierra via the &lt;code&gt;hidutil&lt;&#x2F;code&gt; command-line tool. If you&#x27;re not beyond scrappily writing some JSON and XML, this
&lt;em&gt;just works&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;ol&gt;
  &lt;li&gt;Decide what keys you want to remap. In my case, I wanted to remap &lt;code&gt;Caps Lock&lt;&#x2F;code&gt; to &lt;code&gt;Esc&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
  &lt;li&gt;
    &lt;a href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;library&#x2F;archive&#x2F;technotes&#x2F;tn2450&#x2F;_index.html#&#x2F;&#x2F;apple_ref&#x2F;doc&#x2F;uid&#x2F;DTS40017618-CH1-TNTAG8&quot;&gt;Apple&#x27;s docs&lt;&#x2F;a&gt;
    say:
    &lt;blockquote&gt;The keys take a hexadecimal value that consists of 0x700000000 or’d with the desired keyboard usage value&lt;&#x2F;blockquote&gt;
    Pretty cryptic, but what it really means is you just have to add &lt;code&gt;0x700000000&lt;&#x2F;code&gt; to your key&#x27;s &quot;usage ID&quot; in
    &lt;a href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;library&#x2F;archive&#x2F;technotes&#x2F;tn2450&#x2F;_index.html#&#x2F;&#x2F;apple_ref&#x2F;doc&#x2F;uid&#x2F;DTS40017618-CH1-KEY_TABLE_USAGES&quot;&gt;this table&lt;&#x2F;a&gt;
    (techically, this is a bitwise &lt;code&gt;OR&lt;&#x2F;code&gt;, which is &lt;em&gt;not&lt;&#x2F;em&gt; addition, but the usage IDs are small enough
    for it to not matter).
  &lt;&#x2F;li&gt;
  &lt;li&gt;
    &lt;code&gt;Caps Lock&lt;&#x2F;code&gt;&#x27;s usage ID is &lt;code&gt;0x39&lt;&#x2F;code&gt;. Adding &lt;code&gt;0x700000000&lt;&#x2F;code&gt; to that gives
    &lt;code&gt;0x700000039&lt;&#x2F;code&gt;.
  &lt;&#x2F;li&gt;
  &lt;li&gt;&lt;code&gt;Esc&lt;&#x2F;code&gt;&#x27;s usage ID is &lt;code&gt;0x29&lt;&#x2F;code&gt; - we&#x27;ll use &lt;code&gt;0x700000029&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;code&gt;Caps Lock&lt;&#x2F;code&gt; (&lt;code&gt;0x700000039&lt;&#x2F;code&gt;) is the &lt;em&gt;source&lt;&#x2F;em&gt;, so we will specify &lt;code&gt;&quot;HIDKeyboardModifierMappingSrc&quot;: 0x700000039&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;code&gt;Esc&lt;&#x2F;code&gt; (&lt;code&gt;0x700000029&lt;&#x2F;code&gt;) is the &lt;em&gt;destination&lt;&#x2F;em&gt;, so we will specify &lt;code&gt;&quot;HIDKeyboardModifierMappingDst&quot;: 0x700000029&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
  &lt;li&gt;Repeat for each pair of keys you want to remap.&lt;&#x2F;li&gt;
  &lt;li&gt;
    Try it out in the command-line:
    &lt;pre&gt;hidutil property --set &#x27;{&quot;UserKeyMapping&quot;:[
  {
    &quot;HIDKeyboardModifierMappingSrc&quot;: 0x700000039,
    &quot;HIDKeyboardModifierMappingDst&quot;: 0x700000029
  },
  {
    &quot;HIDKeyboardModifierMappingSrc&quot;: 0x700000029,
    &quot;HIDKeyboardModifierMappingDst&quot;: 0x700000035
  }
]}&#x27;&lt;&#x2F;pre&gt;
  &lt;&#x2F;li&gt;
  &lt;li&gt;This remapping will be undone whenever you reboot your Mac, so one way to persist the remapping is to run the
  &lt;code&gt;hidutil&lt;&#x2F;code&gt; command every time your Mac boots. For that, we can rely on
  &lt;a href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;library&#x2F;archive&#x2F;documentation&#x2F;MacOSX&#x2F;Conceptual&#x2F;BPSystemStartup&#x2F;Chapters&#x2F;CreatingLaunchdJobs.html&quot;&gt;Launch Agents&lt;&#x2F;a&gt;.
  &lt;li&gt;
    Create a file named &lt;code&gt;~&#x2F;Library&#x2F;LaunchAgents&#x2F;com.example.KeyRemapping.plist&lt;&#x2F;code&gt;:
    &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;chuyeow&#x2F;2ab2d3e6a649389cea58f4d31f7f6d53.js&quot;&gt;&lt;&#x2F;script&gt;
    This file basically tells macOS to run the &lt;code&gt;hidutil&lt;&#x2F;code&gt; tool when it starts up.
  &lt;&#x2F;li&gt;
  &lt;li&gt;You&#x27;re all set!&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;A vast improvement would be to generate the key remappings from an HTML form &lt;code&gt;#ideas-are-free&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I really love Karabiner-Elements, but my use of it has become less complex of late. There&#x27;s also something to be said
about running less software. And that brings me a tiny step closer to trying out Big Sur - yes, I can&#x27;t take the plunge
yet! You can evaluate whether you are ready after taking a look at this
&lt;a href=&quot;https:&#x2F;&#x2F;forums.macrumors.com&#x2F;threads&#x2F;big-sur-working-not-working-apps.2242312&#x2F;&quot;&gt;list of apps that are not working on macOS&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Installing Powerline on OS X + homebrew</title>
    <published>2013-10-27T16:29:12+00:00</published>
    <updated>2013-10-27T16:29:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2013/10/27/installing-powerline-on-os-x-homebrew/"/>
    <id>https://chuyeow.wtf/2013/10/27/installing-powerline-on-os-x-homebrew/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2013/10/27/installing-powerline-on-os-x-homebrew/">&lt;p&gt;I&#x27;ve always wanted to get that fancy &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Lokaltog&#x2F;powerline&quot;&gt;Powerline&lt;&#x2F;a&gt; status bar and prompt. Chevrons and git branch icons in the terminal just sounds so... defying:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;assets&#x2F;Powerline-example.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;Powerline-example.png&quot; alt=&quot;Powerline screenshot&quot; width=&quot;520&quot; height=&quot;306&quot; class=&quot;alignnone size-full wp-image-1392&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d failed to get it working properly before because of a combination of outdated Powerline docs and confusion between OS X&#x27;s system &lt;code&gt;python&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;vim&lt;&#x2F;code&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;brew.sh&#x2F;&quot;&gt;homebrew&#x27;s&lt;&#x2F;a&gt; &lt;code&gt;python&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;vim&lt;&#x2F;code&gt;. Some of my former colleagues detailed the pains and hours lost getting Powerline setup, so I gave up.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I got a new Mac for work recently and decided to try again, and it was easier than I thought. You (including you, future Chu Yeow) can use this guide if you&#x27;re using homebrew to install &lt;code&gt;vim&lt;&#x2F;code&gt; and &lt;code&gt;python&lt;&#x2F;code&gt; (and everything else like &lt;code&gt;zsh&lt;&#x2F;code&gt; and &lt;code&gt;tmux&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;h4&gt;Installing Powerline on OS X&lt;&#x2F;h4&gt;
&lt;ol&gt;
&lt;li&gt;Install python with homebrew: &lt;code&gt;brew install python&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Install vim with homebrew: &lt;code&gt;brew install vim --env-std --override-system-vim&lt;&#x2F;code&gt;. You must &lt;strong&gt;install vim after python&lt;&#x2F;strong&gt; so that it&#x27;ll compile with homebrew&#x27;s python.&lt;&#x2F;li&gt;
&lt;li&gt;Install powerline with pip: &lt;code&gt;pip install https:&#x2F;&#x2F;github.com&#x2F;Lokaltog&#x2F;powerline&#x2F;tarball&#x2F;develop&lt;&#x2F;code&gt;. Powerline should get installed to &lt;code&gt;&#x2F;usr&#x2F;local&#x2F;lib&#x2F;python2.7&#x2F;site-packages&#x2F;powerline&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;open &#x2F;usr&#x2F;local&#x2F;lib&#x2F;python2.7&#x2F;site-packages&#x2F;powerline&lt;&#x2F;code&gt; - you should see the files required for integration with zsh, vim, tmux, etc. in the &lt;code&gt;bindings&lt;&#x2F;code&gt; directory. All you need to do now is to include these bindings in your zsh, vim and tmux config files - it&#x27;s that simple!&lt;&#x2F;li&gt;
&lt;li&gt;Add Powerline to vim by adding these lines to &lt;code&gt;~&#x2F;.vimrc&lt;&#x2F;code&gt;:
&lt;pre&gt;&lt;code&gt;source &#x2F;usr&#x2F;local&#x2F;lib&#x2F;python2.7&#x2F;site-packages&#x2F;powerline&#x2F;bindings&#x2F;vim&#x2F;plugin&#x2F;powerline.vim
set laststatus=2&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Add Powerline to tmux by adding this to &lt;code&gt;~&#x2F;.tmux.conf&lt;&#x2F;code&gt;:
&lt;pre&gt;&lt;code&gt;source &#x2F;usr&#x2F;local&#x2F;lib&#x2F;python2.7&#x2F;site-packages&#x2F;powerline&#x2F;bindings&#x2F;tmux&#x2F;powerline.conf&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Add Powerline to zsh by adding this to &lt;code&gt;~&#x2F;.zshrc&lt;&#x2F;code&gt;:
&lt;pre&gt;&lt;code&gt;source &#x2F;usr&#x2F;local&#x2F;lib&#x2F;python2.7&#x2F;site-packages&#x2F;powerline&#x2F;bindings&#x2F;zsh&#x2F;powerline.zsh&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt; If you use &lt;code&gt;oh-my-zsh&lt;&#x2F;code&gt;, be sure to &lt;code&gt;source&lt;&#x2F;code&gt; the Powerline bindings after oh-my-zsh&#x27;s.&lt;&#x2F;li&gt;
&lt;li&gt;Grab a patched font from &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Lokaltog&#x2F;powerline-fonts&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;Lokaltog&#x2F;powerline-fonts&lt;&#x2F;a&gt; (I use Inconsolata), and install it (just download, double-click the font file, and Install). If you don&#x27;t use any of these fonts, you&#x27;ll have to &lt;a href=&quot;https:&#x2F;&#x2F;powerline.readthedocs.org&#x2F;en&#x2F;latest&#x2F;fontpatching.html#font-patching&quot;&gt;patch your favorite font&lt;&#x2F;a&gt; yourself (&lt;em&gt;have fun with that!&lt;&#x2F;em&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;That&#x27;s all you need! Go crazy and start tweaking your Powerline colorscheme.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Summer 2011 anime (and some from Spring 2011)</title>
    <published>2011-07-12T18:43:30+00:00</published>
    <updated>2011-07-12T18:43:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2011/07/12/summer-2011-anime-and-some-from-spring-2011/"/>
    <id>https://chuyeow.wtf/2011/07/12/summer-2011-anime-and-some-from-spring-2011/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2011/07/12/summer-2011-anime-and-some-from-spring-2011/">&lt;p&gt;Some of you &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;about&#x2F;&quot;&gt;might know&lt;&#x2F;a&gt; that I&#x27;m a rabid anime fan. I don&#x27;t talk much about it on this blog (actually, I don&#x27;t talk much on this blog &lt;em&gt;anymore&lt;&#x2F;em&gt;, seeing as I haven&#x27;t blogged &lt;em&gt;this year&lt;&#x2F;em&gt;). Anyway, yeah, one of my biggest passions and failings is my love for anime and I can&#x27;t stop myself from collecting those &lt;a href=&quot;http:&#x2F;&#x2F;www.goodsmile.info&#x2F;product&#x2F;en&#x2F;2499&#x2F;Nendoroid+Saber+Lily.html&quot;&gt;cute&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.goodsmile.info&#x2F;product&#x2F;en&#x2F;2040&#x2F;Nendoroid+Yoko.html&quot;&gt;Nendoroids&lt;&#x2F;a&gt; too.&lt;&#x2F;p&gt;
&lt;p&gt;This summer 2011 season, I&#x27;m watching 4 new series and 2 older series that started in spring 2011, Hanasaku Iroha and Nichijou:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;assets&#x2F;currently-watching-anime-summer-2011.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;currently-watching-anime-summer-2011.png&quot; alt=&quot;Currently watching anime, Summer 2011&quot; title=&quot;Currently watching anime, Summer 2011&quot; width=&quot;510&quot; height=&quot;510&quot; class=&quot;alignnone size-full wp-image-1355&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Top row: &lt;a href=&quot;http:&#x2F;&#x2F;myanimelist.net&#x2F;anime&#x2F;10162&#x2F;Usagi_Drop&quot;&gt;Usagi Drop&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;myanimelist.net&#x2F;anime&#x2F;10721&#x2F;Mawaru_Penguindrum&quot;&gt;Mawaru Penguindrum&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;myanimelist.net&#x2F;anime&#x2F;9938&quot;&gt;Ikoku Meiro no Croisée&lt;&#x2F;a&gt;.&lt;br &#x2F;&gt;
Bottom row: &lt;a href=&quot;http:&#x2F;&#x2F;myanimelist.net&#x2F;anime&#x2F;10161&#x2F;No.6&quot;&gt;No.6&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;myanimelist.net&#x2F;anime&#x2F;9289&quot;&gt;Hanasaku Iroha&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;myanimelist.net&#x2F;anime&#x2F;10165&quot;&gt;Nichijou&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m a sucker for the &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Slice_of_life&quot;&gt;slice of life&lt;&#x2F;a&gt; genre (5 out of 6 series above are &quot;slice of life&quot;). Usagi Drop in particular is very promising - looking forward to how Daikichi and Rin&#x27;s story unfolds. Mawaru Penguindrum is probably the winner in terms of &quot;interestingness&quot; though - after all, it has penguins. After the brilliant &lt;a href=&quot;http:&#x2F;&#x2F;myanimelist.net&#x2F;anime&#x2F;9989&#x2F;Ano_Hi_Mita_Hana_no_Namae_wo_Bokutachi_wa_Mada_Shiranai&quot;&gt;Ano Hana&lt;&#x2F;a&gt; from spring 2011, Usagi Drop is looking to be my mainstay for this season.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re an anime fan, please leave a comment on what you&#x27;re watching or &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;chuyeow&quot;&gt;ping me on twitter&lt;&#x2F;a&gt; (I&#x27;m &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;chuyeow&quot;&gt;@chuyeow&lt;&#x2F;a&gt;) - I&#x27;d love to know what you guys like to watch when you&#x27;re not coding.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox nightly builds add a combined Stop&#x2F;Go&#x2F;Refresh button to the Location Bar</title>
    <published>2010-09-20T14:22:13+00:00</published>
    <updated>2010-09-20T14:22:13+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2010/09/20/firefox-nightly-builds-add-a-combined-stopgorefresh-button-to-the-location-bar/"/>
    <id>https://chuyeow.wtf/2010/09/20/firefox-nightly-builds-add-a-combined-stopgorefresh-button-to-the-location-bar/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2010/09/20/firefox-nightly-builds-add-a-combined-stopgorefresh-button-to-the-location-bar/">&lt;p&gt;In an effort to streamline Firefox&#x27;s UI, the latest Firefox nightly builds have moved the Stop&#x2F;Refresh button into the right corner of the Location Bar. I like this move even if the Firefox developers are simply copying design ideas from other browsers (in this case, I believe Safari was first).&lt;&#x2F;p&gt;
&lt;p&gt;When you&#x27;re typing in the Location Bar, a green Go button is shown:&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;Screen-shot-2010-09-20-at-PM-01.46.57.png&quot; alt=&quot;&quot; title=&quot;Firefox Location Bar Go button&quot; width=&quot;359&quot; height=&quot;69&quot; class=&quot;aligncenter size-full wp-image-1324&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;That switches to a red Stop button when the page is loading:&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;Screen-shot-2010-09-20-at-PM-01.47.20.png&quot; alt=&quot;&quot; title=&quot;Firefox Location Bar Stop button&quot; width=&quot;360&quot; height=&quot;37&quot; class=&quot;aligncenter size-full wp-image-1325&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The thin line you see in the location bar is a progress indicator that indicates how much of the current web page has loaded - I don&#x27;t like the way it looks and I think it&#x27;ll probably change in future.&lt;&#x2F;p&gt;
&lt;p&gt;When the page has fully loaded, it changes to a Refresh button:&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;Screen-shot-2010-09-20-at-PM-02.12.02.png&quot; alt=&quot;&quot; title=&quot;Firefox Location Bar Refresh button active&quot; width=&quot;364&quot; height=&quot;33&quot; class=&quot;aligncenter size-full wp-image-1329&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This leaves a minimalist and compact toolbar:&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;Screen-shot-2010-09-20-at-PM-02.19.48.png&quot; alt=&quot;&quot; title=&quot;Firefox 4 beta 7 toolbar&quot; width=&quot;487&quot; height=&quot;38&quot; class=&quot;aligncenter size-full wp-image-1334&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I should actually remove the Home button - I don&#x27;t ever use it.&lt;&#x2F;p&gt;
&lt;p&gt;To try out the new stuff coming in Firefox, download a &lt;a href=&quot;http:&#x2F;&#x2F;nightly.mozilla.org&#x2F;&quot;&gt;Firefox nightly build&lt;&#x2F;a&gt; now.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Rendering plists from your Rails app</title>
    <published>2010-06-14T11:22:50+00:00</published>
    <updated>2010-06-14T11:22:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2010/06/14/rendering-plists-from-your-rails-app/"/>
    <id>https://chuyeow.wtf/2010/06/14/rendering-plists-from-your-rails-app/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2010/06/14/rendering-plists-from-your-rails-app/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;jeena&#x2F;&quot;&gt;Jeena&lt;&#x2F;a&gt; emailed me recently about his Rails plugin, &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;jeena&#x2F;plistifier&quot;&gt;plistifier&lt;&#x2F;a&gt;, that allows you to render &lt;a href=&quot;http:&#x2F;&#x2F;developer.apple.com&#x2F;mac&#x2F;library&#x2F;documentation&#x2F;Cocoa&#x2F;Conceptual&#x2F;PropertyLists&#x2F;Introduction&#x2F;Introduction.html&quot;&gt;plists&lt;&#x2F;a&gt; (property lists).&lt;&#x2F;p&gt;
&lt;p&gt;It allows you to render your ActiveRecord objects as plists (among other things):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def show
  @post = Post.find(params[:id])
&lt;p&gt;respond_to do |format|
format.xml   { render :xml =&amp;gt; @post }
format.plist { render :plist =&amp;gt; @post }
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Jeena was kind enough to let me know he &quot;stole&quot; my old &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;07&#x2F;11&#x2F;better-json-output-from-rails-with-the-jsonifier-plugin&#x2F;&quot;&gt;Jsonifier plugin&lt;&#x2F;a&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;chuyeow&#x2F;jsonifier&quot;&gt;github&lt;&#x2F;a&gt;) code in &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;jeena&#x2F;plistifier&quot;&gt;plistifier&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Railscasts Xcode theme</title>
    <published>2010-02-04T22:12:27+00:00</published>
    <updated>2010-02-04T22:12:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2010/02/04/railscasts-xcode-theme/"/>
    <id>https://chuyeow.wtf/2010/02/04/railscasts-xcode-theme/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2010/02/04/railscasts-xcode-theme/">&lt;p&gt;For those of you who use the excellent &lt;a href=&quot;http:&#x2F;&#x2F;railscasts.com&#x2F;about&quot;&gt;Railscasts TextMate theme&lt;&#x2F;a&gt; and want to replicate the theme in Xcode, you can grab my version &lt;a href=&quot;http:&#x2F;&#x2F;gist.github.com&#x2F;raw&#x2F;294642&#x2F;4956c43399c3cfa7d248fb581b23054e5bfa92ab&#x2F;Railscasts.xccolortheme&quot;&gt;from Github&lt;&#x2F;a&gt;. This is what it looks like:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;assets&#x2F;Railscasts-Xcode-e1265292666981.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;Railscasts-Xcode-e1265292666981.png&quot; alt=&quot;Railscasts Xcode theme&quot; title=&quot;Railscasts Xcode&quot; width=&quot;510&quot; height=&quot;440&quot; class=&quot;aligncenter size-full wp-image-1292&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Save it into &lt;code&gt;~&#x2F;Library&#x2F;Application Support&#x2F;Xcode&#x2F;Color Themes&#x2F;&lt;&#x2F;code&gt;, restart Xcode, and open its Preferences. You will be able to pick the Railscasts Color Theme in the Fonts &amp; Colors tab.&lt;&#x2F;p&gt;
&lt;p&gt;I dug this theme up after realizing that I haven&#x27;t actually saved the Railscasts theme I&#x27;d replicated from several months ago and was too lazy to set up another one in my other Mac.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;blog.10to1.be&#x2F;&quot;&gt;Koen Van Der Auwera&lt;&#x2F;a&gt; did a similar theme too so if you find that mine doesn&#x27;t work so well (I&#x27;ve only used it for Cocoa Touch development, not at all for developing Mac apps), scoot over to his &lt;a href=&quot;http:&#x2F;&#x2F;blog.10to1.be&#x2F;cocoa&#x2F;2009&#x2F;09&#x2F;25&#x2F;railscasts-xcode-theme&#x2F;&quot;&gt;blog post&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Setting up virtualization on Ubuntu with KVM</title>
    <published>2010-02-01T22:18:13+00:00</published>
    <updated>2010-02-01T22:18:13+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2010/02/01/setting-up-virtualization-on-ubuntu-with-kvm/"/>
    <id>https://chuyeow.wtf/2010/02/01/setting-up-virtualization-on-ubuntu-with-kvm/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2010/02/01/setting-up-virtualization-on-ubuntu-with-kvm/">&lt;p&gt;These instructions have been tested on &lt;strong&gt;Ubuntu 9.10 (Karmic) 64-bit&lt;&#x2F;strong&gt;. &lt;a href=&quot;#kvm_guide_start&quot;&gt;Skip right to the instructions&lt;&#x2F;a&gt; if you&#x27;re short on time.&lt;&#x2F;p&gt;
&lt;p&gt;After being a &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;06&#x2F;26&#x2F;installing-xen-on-ubuntu-feisty-fawn-the-complete-newbies-guide&#x2F;&quot;&gt;happy Xen user&lt;&#x2F;a&gt; for several years now, I&#x27;ve recently had to switch to an alternative virtualization solution. My colleague Arun (&lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;iamclovin&quot;&gt;@iamclovin&lt;&#x2F;a&gt;) actually struggled for a week with Xen VMs that locked up on Hardy; we&#x27;ve had much success with Hardy and Xen before, so we attributed it to a hardware problem since these were our first blade servers.&lt;&#x2F;p&gt;
&lt;p&gt;Out of ideas, we tried Karmic (Ubuntu 9.10) only to discover that Xen support via the apt package system is gone. I went down the path of compiling a &lt;a href=&quot;http:&#x2F;&#x2F;wiki.xensource.com&#x2F;xenwiki&#x2F;XenParavirtOps&quot;&gt;paravirt_ops&lt;&#x2F;a&gt; Dom0 kernel (&lt;a href=&quot;http:&#x2F;&#x2F;www.itkovian.net&#x2F;base&#x2F;the-xen-hypervisor-with-ubuntu-karmic-koala&#x2F;&quot;&gt;this article&lt;&#x2F;a&gt; was &lt;em&gt;very&lt;&#x2F;em&gt; useful) but ended up deciding the process took far too long despite being successful.&lt;&#x2F;p&gt;
&lt;p&gt;With &lt;a href=&quot;http:&#x2F;&#x2F;news.cnet.com&#x2F;8301-13580_3-9867657-39.html&quot;&gt;KVM gaining official support from Ubuntu&lt;&#x2F;a&gt; as &lt;strong&gt;the&lt;&#x2F;strong&gt; virtualization solution, I ended up ditching Xen and switching to &lt;a href=&quot;http:&#x2F;&#x2F;www.linux-kvm.org&#x2F;&quot;&gt;KVM&lt;&#x2F;a&gt; for these new servers on Karmic. The rest of the entry is a step-by-step guide on setting up KVM VMs on a Ubuntu server; I&#x27;m putting this down because like all wikis, the &lt;a href=&quot;https:&#x2F;&#x2F;help.ubuntu.com&#x2F;community&#x2F;KVM&quot;&gt;Ubuntu KVM wiki&lt;&#x2F;a&gt; has grown a little too organically to be useful.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kvm_guide_start&quot;&gt;Preparing a host server for KVM&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
    Update and upgrade apt packages (use your own discretion on whether this is necessary):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;aptitude update &amp;&amp; aptitude dist-upgrade&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
    Check whether CPU supports hardware virtualization:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;egrep &#x27;(vmx|svm)&#x27; --color=always &#x2F;proc&#x2F;cpuinfo&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;    You should see lines with either &quot;vmx&quot; or &quot;svm&quot; highlighted.
  &lt;&#x2F;li&gt;
&lt;li&gt;
    Install these packages:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;aptitude install kvm libvirt-bin ubuntu-vm-builder bridge-utils&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;    If you see a &lt;code&gt;FATAL: Error inserting kvm_intel&lt;&#x2F;code&gt; message during installation, it means that virtualization is not enabled in your machine&#x27;s BIOS. You&#x27;ll need to reboot your machine, enter the BIOS setup and enable virtualization (you&#x27;ll have to hunt for the option).&lt;br &#x2F;&gt;
    &lt;a href=&quot;&#x2F;assets&#x2F;BIOS-virtualization-option.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;BIOS-virtualization-option.png&quot; alt=&quot;&quot; title=&quot;BIOS virtualization option&quot; width=&quot;399&quot; height=&quot;243&quot; class=&quot;aligncenter size-full wp-image-1283&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
    After enabling virtualization in the BIOS and rebooting, run:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;modprobe kvm-intel&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;    There should be no error shown (in fact, no console response).
  &lt;&#x2F;li&gt;
&lt;li&gt;
    Optionally, install virt-top, a top-like tool for your VMs:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;aptitude install virt-top&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
    Verify that you can connect to the hypervisor:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;virsh -c qemu:&#x2F;&#x2F;&#x2F;system list&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;    You should see something like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;Connecting to uri: qemu:&#x2F;&#x2F;&#x2F;system
 Id Name                 State
 ----------------------------------&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
    Setup a network bridge on the server for VMs. Edit &lt;code&gt;&#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt; so it looks like this (use your own IPs):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;auto lo
iface lo inet loopback
&lt;p&gt;auto eth0
iface eth0 inet manual&lt;&#x2F;p&gt;
&lt;p&gt;auto br0
iface br0 inet static
address 192.168.1.222
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.167
bridge_ports eth0
bridge_stp off
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_maxwait 0&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
    Make sure that you have a direct console to the server because you&#x27;re going to restart networking:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;&#x2F;etc&#x2F;init.d&#x2F;networking restart&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
    Verify that your changes took place with &lt;code&gt;ifconfig&lt;&#x2F;code&gt;. You should see 2 entries like these:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;br0       Link encap:Ethernet  HWaddr 00:11:22:33:44:55
          inet addr:192.168.1.215  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::223:aeff:fefe:1f14&#x2F;64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1099 errors:0 dropped:0 overruns:0 frame:0
          TX packets:50 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:74665 (74.6 KB)  TX bytes:6223 (6.2 KB)
&lt;p&gt;eth0      Link encap:Ethernet  HWaddr 00:66:77:88:99:00
inet6 addr: fe80::223:aeff:fefe:1f14&#x2F;64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:4939 errors:0 dropped:0 overruns:0 frame:0
TX packets:39 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:532798 (532.7 KB)  TX bytes:5585 (5.5 KB)
Interrupt:36 Memory:da000000-da012800&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3&gt;Setting up a VM&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
    Setup a VM with &lt;code&gt;vmbuilder&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;vmbuilder kvm ubuntu \
    -v \
    --suite=karmic \
    --libvirt=qemu:&#x2F;&#x2F;&#x2F;system \
    --arch=amd64 \
    --cpus=2 \
    --mem=2048 \
    --swapsize=4096 \
    --rootsize=20480 \
    --flavour=server \
    --hostname=billiejean \
    --ip=192.168.1.240 \
    --mask=255.255.255.0 \
    --net=192.168.1.0 \
    --bcast=192.168.1.255 \
    --gw=192.168.1.167 \
    --dns=&#x27;202.157.163.157 202.157.131.118&#x27; \
    --bridge=br0 \
    --mirror=http:&#x2F;&#x2F;archive.ubuntu.com&#x2F;ubuntu \
    --components=&#x27;main,universe&#x27; \
    --addpkg=openssh-server \
    --user=administrator \
    --pass=icanhaspasswd \
    --dest=&#x2F;root&#x2F;vm-billiejean \
    --tmpfs=-&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;    The options you need to care about are:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;suite&lt;&#x2F;code&gt;: Version of Ubuntu to install (e.g. karmic, hardy).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;cpus&lt;&#x2F;code&gt;: Number of CPUs to assign to VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;mem&lt;&#x2F;code&gt;: Amount of RAM in MB to assign to VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;swapsize&lt;&#x2F;code&gt;: Size of swap in MB of VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;rootsize&lt;&#x2F;code&gt;: Size of root filesystem in MB of VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;flavour&lt;&#x2F;code&gt;: The &quot;flavour&quot; of kernel to use in the VM. Either &quot;virtual&quot; or &quot;server&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;hostname&lt;&#x2F;code&gt;: Hostname of VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ip&lt;&#x2F;code&gt;: IP address of VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;mask&lt;&#x2F;code&gt;: Netmask of VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;net&lt;&#x2F;code&gt;: Network of VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;bcast&lt;&#x2F;code&gt;: Broadcast address of VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;gw&lt;&#x2F;code&gt;: Gateway of VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;dns&lt;&#x2F;code&gt;: DNS server(s) for VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;addpkg&lt;&#x2F;code&gt;: APT packages to install in the VM. openssh-server is needed so that we can login to the VM to setup the virsh console.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;user&lt;&#x2F;code&gt; and &lt;code&gt;pass&lt;&#x2F;code&gt;: User account that&#x27;s setup for you to access the VM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;dest&lt;&#x2F;code&gt;: Destination directory on server where VM disk image will reside.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
    If your VM is created successfully, there&#x27;ll be a config file for the VM in &lt;code&gt;&#x2F;etc&#x2F;libvirt&#x2F;qemu&#x2F;&lt;&#x2F;code&gt; (e.g. &lt;code&gt;&#x2F;etc&#x2F;libvirt&#x2F;qemu&#x2F;billiejean.xml&lt;&#x2F;code&gt;), and a disk image in the directory specified in the &lt;code&gt;--dest&lt;&#x2F;code&gt; option (e.g. &lt;code&gt;&#x2F;root&#x2F;vm-billiejean&#x2F;disk0.qcow2&lt;&#x2F;code&gt;).
  &lt;&#x2F;li&gt;
&lt;li&gt;
    You can verify that it works by starting the VM and SSHing into it (virsh console will not work yet).&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;virsh start billiejean&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3&gt;Converting Disk Images to LVM Logical Volumes&lt;&#x2F;h3&gt;
&lt;p&gt;Now, we have the VM setup but it&#x27;s running off a disk image. For better performance, running the VM off a LVM logical volume will optimize disk IO.&lt;&#x2F;p&gt;
&lt;p&gt;vmbuilder is supposed to support the &lt;code&gt;--raw&lt;&#x2F;code&gt; option to write the VM to a block device (such as a LVM logical volume), but I&#x27;ve had no success with it (as does Mark Imbriaco, sysadmin of 37signals: &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;markimbriaco&#x2F;status&#x2F;7437688341&quot;&gt;http:&#x2F;&#x2F;twitter.com&#x2F;markimbriaco&#x2F;status&#x2F;7437688341&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;markimbriaco&#x2F;status&#x2F;7437699338&quot;&gt;http:&#x2F;&#x2F;twitter.com&#x2F;markimbriaco&#x2F;status&#x2F;7437699338&lt;&#x2F;a&gt;). We&#x27;re going to convert the disk images using qemu-img and write the bits into a LVM logical volume instead.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Stop the VM if it&#x27;s running:
&lt;pre&gt;&lt;code&gt;virsh shutdown billiejean&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Convert the VM&#x27;s qcow2 (QEMU image format) disk image to a raw disk image:
&lt;pre&gt;&lt;code&gt;qemu-img convert disk0.qcow2 -O raw disk0.raw&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Create a logical volume to house the VM, making sure it&#x27;s big enough for the VM&#x27;s rootsize and swapsize options:
&lt;pre&gt;&lt;code&gt;lvcreate -L24GB -n &amp;lt;logical_volume_name&amp;gt; &amp;lt;volume_group_name&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Copy raw image into the logical volume:
&lt;pre&gt;&lt;code&gt;dd if=disk0.raw of=&#x2F;dev&#x2F;&amp;lt;volume_group_name&amp;gt;&#x2F;&amp;lt;logical_volume_name&amp;gt; bs=1M&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;      This will take awhile (the bigger your image, the longer it takes).&lt;&#x2F;li&gt;
&lt;li&gt;Edit the VM&#x27;s config so that it uses your new logical volume:
&lt;pre&gt;&lt;code&gt;virsh edit billiejean&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;    Change &lt;code&gt;&amp;lt;disk&amp;gt;&lt;&#x2F;code&gt; to point to the logical volume:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;disk type=&#x27;block&#x27; device=&#x27;disk&#x27;&amp;gt;
  &amp;lt;source dev=&#x27;&#x2F;dev&#x2F;&amp;lt;volume_group_name&amp;gt;&#x2F;&amp;lt;logical_volume_name&amp;gt;&#x27;&#x2F;&amp;gt;
  &amp;lt;target dev=&#x27;hda&#x27; bus=&#x27;ide&#x27;&#x2F;&amp;gt;
&amp;lt;&#x2F;disk&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Startup the VM. You might wanna rename the original &lt;code&gt;disk0.qcow2&lt;&#x2F;code&gt; image first just to make sure your VM isn&#x27;t still using it.&lt;&#x2F;li&gt;
&lt;li&gt;Once you&#x27;re sure your VM is running off your LVM logical volume, you can delete or backup the original qcow2 disk image.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3&gt;Getting a console to your VM from the Host Server&lt;&#x2F;h3&gt;
&lt;p&gt;Now, we have to setup the VM so that virsh console works. This is a console to the VM from the host server that works even when the networking in the VM is not.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Edit the VM&#x27;s settings:
&lt;pre&gt;&lt;code&gt;virsh edit billiejean&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;    In the &lt;code&gt;&amp;lt;devices&amp;gt;&lt;&#x2F;code&gt; block, add:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;serial type=&#x27;pty&#x27;&amp;gt;
  &amp;lt;target port=&#x27;0&#x27;&#x2F;&amp;gt;
&amp;lt;&#x2F;serial&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Startup your VM:
&lt;pre&gt;&lt;code&gt;virsh start billiejean&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;SSH into VM and create a file &lt;code&gt;&#x2F;etc&#x2F;init&#x2F;ttyS0.conf&lt;&#x2F;code&gt;:
&lt;pre&gt;&lt;code&gt;start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]
&lt;p&gt;respawn
exec &#x2F;sbin&#x2F;getty -8 38400 ttyS0 vt102&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;      Start the tty with:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;start ttyS0&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Still in the VM, install acpid so that the VM will respond to shutdown commands from the server:
&lt;pre&gt;&lt;code&gt;aptitude install acpid&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Reboot the VM.&lt;&#x2F;li&gt;
&lt;li&gt;Verify the console works by opening a console to the VM from the server:
&lt;pre&gt;&lt;code&gt;virsh console billiejean&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;      You may have to hit &quot;Enter&quot; before you see any console output.
  &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3&gt;Miscellaneous VM Setup&lt;&#x2F;h3&gt;
&lt;p&gt;That&#x27;s it, your VM is ready! You&#x27;ll probably want to do these:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Set a root password and possibly delete the user you setup using &lt;code&gt;vmbuilder&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Set the timezone with &lt;code&gt;dpkg-reconfigure tzdata&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Stop and Reload buttons merged in Firefox</title>
    <published>2010-01-14T18:41:53+00:00</published>
    <updated>2010-01-14T18:41:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2010/01/14/stop-and-reload-buttons-merged-in-firefox/"/>
    <id>https://chuyeow.wtf/2010/01/14/stop-and-reload-buttons-merged-in-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2010/01/14/stop-and-reload-buttons-merged-in-firefox/">&lt;p&gt;A minor UI improvement to Firefox has been made to Firefox and it&#x27;s currently only available on nightly builds of Firefox: the Stop and Reload buttons have been merged into a single button. This change should make it into Firefox 3.6.&lt;&#x2F;p&gt;
&lt;p&gt;While a page is loading, the button acts as a Stop button:&lt;br &#x2F;&gt;
&lt;a href=&quot;&#x2F;assets&#x2F;Firefox-merged-stop-reload-stop.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;Firefox-merged-stop-reload-stop.png&quot; alt=&quot;&quot; title=&quot;Firefox merged stop-reload stop&quot; width=&quot;294&quot; height=&quot;262&quot; class=&quot;aligncenter size-full wp-image-1266&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When it&#x27;s done loading, it becomes a Reload button.&lt;br &#x2F;&gt;
&lt;a href=&quot;&#x2F;assets&#x2F;Firefox-merged-stop-reload-reload.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;Firefox-merged-stop-reload-reload.png&quot; alt=&quot;&quot; title=&quot;Firefox merged stop-reload reload&quot; width=&quot;295&quot; height=&quot;231&quot; class=&quot;aligncenter size-full wp-image-1267&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m always up for 1 less unnecessary button. I think this feature is copied from Safari (I might be wrong).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox quick tip: view images in a new tab quickly</title>
    <published>2009-11-25T19:13:21+00:00</published>
    <updated>2009-11-25T19:13:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2009/11/25/firefox-quick-tip-view-images-in-a-new-tab-quickly/"/>
    <id>https://chuyeow.wtf/2009/11/25/firefox-quick-tip-view-images-in-a-new-tab-quickly/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2009/11/25/firefox-quick-tip-view-images-in-a-new-tab-quickly/">&lt;p&gt;A mini-tip on viewing images quickly in a new tab in Firefox. Useful for web devs who want to look at the URL of an image quickly.&lt;&#x2F;p&gt;
&lt;p&gt;As an example, here&#x27;s the &lt;a href=&quot;http:&#x2F;&#x2F;www.youtube.com&#x2F;user&#x2F;mugumogu&quot;&gt;Youtube webpage&lt;&#x2F;a&gt; of the owner of &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Maru_the_Cat&quot;&gt;Maru the Cat&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff3-middle-click-step-1.png&quot; alt=&quot;ff3-middle-click-step-1&quot; title=&quot;ff3-middle-click-step-1&quot; width=&quot;320&quot; height=&quot;148&quot; class=&quot;alignnone size-full wp-image-1186&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;To open the thumbnail image of Maru in a new tab, right-click the image, and then &lt;strong&gt;middle-click&lt;&#x2F;strong&gt; the &lt;strong&gt;View Image&lt;&#x2F;strong&gt; item from the context menu:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff3-middle-click-step-2.png&quot; alt=&quot;ff3-middle-click-step-2&quot; title=&quot;ff3-middle-click-step-2&quot; width=&quot;416&quot; height=&quot;222&quot; class=&quot;alignnone size-full wp-image-1185&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It should open up in a new tab:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff3-middle-click-step-3.png&quot; alt=&quot;ff3-middle-click-step-3&quot; title=&quot;ff3-middle-click-step-3&quot; width=&quot;507&quot; height=&quot;226&quot; class=&quot;alignnone size-full wp-image-1184&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You can also do the same for background images (middle-click &lt;strong&gt;View Background Image&lt;&#x2F;strong&gt; from the right-click context menu).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>How my simple iPhone app made it to the top of the App Store</title>
    <published>2009-09-22T22:26:33+00:00</published>
    <updated>2009-09-22T22:26:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2009/09/22/singtel-data-usage-iphone-app/"/>
    <id>https://chuyeow.wtf/2009/09/22/singtel-data-usage-iphone-app/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2009/09/22/singtel-data-usage-iphone-app/">&lt;p&gt;Slightly more than a month back I wrote &lt;a href=&quot;http:&#x2F;&#x2F;sliceoflifeapps.com&#x2F;iphone&#x2F;datausage&#x2F;&quot;&gt;this little iPhone app&lt;&#x2F;a&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;itunes.apple.com&#x2F;WebObjects&#x2F;MZStore.woa&#x2F;wa&#x2F;viewSoftware?id=327567068&amp;mt=8&amp;uo=6&quot;&gt;App Store link&lt;&#x2F;a&gt;), almost a toy app really, to check the usage of my data plan with my local telco (Singtel). I wanted to scratch an itch and I also &lt;em&gt;really&lt;&#x2F;em&gt; didn&#x27;t want to exceed my data plan - the fees are &lt;em&gt;excessive&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I submitted it to the iPhone App Store for approval as a free app and named it &lt;strong&gt;Singtel Data Usage&lt;&#x2F;strong&gt;. No points for creativity with the name but I thought it&#x27;d be nice to know exactly what the app did from just reading its name. After one keyword rejection (which was unfounded but I wasn&#x27;t going to argue with the app reviewers), it finally got approved a few days ago.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;iphone-data-usage.gif&quot; alt=&quot;Singtel Data Usage iPhone app screenshot&quot; title=&quot;Singtel Data Usage iPhone app screenshot&quot; width=&quot;300&quot; height=&quot;559&quot; class=&quot;aligncenter size-full wp-image-1225&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Yeah that&#x27;s what it looks like. I stole part of the design from another iPhone app - can anyone guess which one? I think I spent 80% of development time changing the design over and over again, tweaking font sizes, and agonizing over which icons to use.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to folks on Twitter (I&#x27;m &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;chuyeow&quot;&gt;@chuyeow&lt;&#x2F;a&gt; - do follow me if you&#x27;re reading my blog), word got around and by the 3rd day of it being approved, my app was the Top Free app on the Singapore App Store. Going to take a time out for the vanity shot:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;Screen-shot-2009-09-22-at-PM-10.39.06.png&quot; alt=&quot;&quot; title=&quot;&quot; width=&quot;510&quot; height=&quot;376&quot; class=&quot;aligncenter size-full wp-image-1242&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A similar app, &lt;a href=&quot;http:&#x2F;&#x2F;ibbomapp.appspot.com&#x2F;&quot;&gt;iBBOM&lt;&#x2F;a&gt;, was approved around the same time but I believe I got a head start because of all the awesome people on Twitter who retweeted &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;chuyeow&#x2F;status&#x2F;4093690396&quot;&gt;my tweet&lt;&#x2F;a&gt; and the kind folks who gave glowing reviews on the App Store (thanks especially to &lt;a href=&quot;http:&#x2F;&#x2F;deepcalm.com&#x2F;&quot;&gt;Andy Croll&lt;&#x2F;a&gt; for the 1st review). iBBOM actually looks much better than my app (I can&#x27;t help tweeting &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;chuyeow&#x2F;status&#x2F;4162960802&quot;&gt;about&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;sliceoflifer&#x2F;status&#x2F;4119270971&quot;&gt;it&lt;&#x2F;a&gt;) and works perfectly (only thing I don&#x27;t like are the ads). I believe I couldn&#x27;t have gotten to the top of the App Store without the guys and gals who spread the word on Twitter.&lt;&#x2F;p&gt;
&lt;p&gt;On to the not so fun part of this post. Yet another similar app, &lt;a href=&quot;http:&#x2F;&#x2F;mugunthkumar.com&#x2F;pages&#x2F;iPhone_Apps&#x2F;Entries&#x2F;2009&#x2F;7&#x2F;13_SingTel_BBoM.html&quot;&gt;SG BBOM&lt;&#x2F;a&gt;, was &lt;a href=&quot;http:&#x2F;&#x2F;www.imerlion.com&#x2F;2009&#x2F;09&#x2F;sg-bbom-app-pulled-from-app-store.html&quot;&gt;pulled from the App Store by Singtel&lt;&#x2F;a&gt; (the telco) recently so I&#x27;m expecting to hear from Singtel really soon. We shall see.&lt;&#x2F;p&gt;
&lt;p&gt;In the meantime, if you own an iPhone and have a Singtel data plan, do check out &lt;a href=&quot;http:&#x2F;&#x2F;itunes.apple.com&#x2F;WebObjects&#x2F;MZStore.woa&#x2F;wa&#x2F;viewSoftware?id=327567068&amp;mt=8&amp;uo=6&quot;&gt;my app&lt;&#x2F;a&gt; (App Store link) and give an honest review on the App Store. If you&#x27;ve already downloaded it, I&#x27;d like to know what you think in a review as well. Thanks!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Blog redesigned</title>
    <published>2009-07-05T14:50:00+00:00</published>
    <updated>2009-07-05T14:50:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2009/07/05/blog-redesigned/"/>
    <id>https://chuyeow.wtf/2009/07/05/blog-redesigned/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2009/07/05/blog-redesigned/">&lt;p&gt;After 5 long years of using the same old blog theme, which I&#x27;d handcrafted from scratch way back in 2004, I&#x27;ve finally got down to refreshing it to a more contemporary look. I&#x27;ve also updated the woefully outdated &lt;a href=&quot;&#x2F;about&#x2F;&quot;&gt;About page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a before and after shot:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;blog-theme-before-and-after.png&quot; alt=&quot;Blog theme - before and after&quot; title=&quot;Blog theme - before and after&quot; width=&quot;515&quot; height=&quot;659&quot; class=&quot;alignnone size-full wp-image-1214&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I think it&#x27;s much better, definitely more modern and minimalist.&lt;&#x2F;p&gt;
&lt;p&gt;The new blog theme is basically a heavily modified version of the&lt;br &#x2F;&gt;
wonderful and free &lt;a href=&quot;http:&#x2F;&#x2F;designdisease.com&#x2F;blog&#x2F;compositio-wordpress-theme&#x2F;&quot;&gt;Compositio WordPress theme&lt;&#x2F;a&gt; -&lt;br &#x2F;&gt;
you can check out a &lt;a href=&quot;http:&#x2F;&#x2F;designdisease.com&#x2F;preview&#x2F;compositio&quot;&gt;demo of Compositio here&lt;&#x2F;a&gt; to see how different it is.&lt;&#x2F;p&gt;
&lt;p&gt;The only thing I kept from my old theme, which I affectionately called &quot;Clover&quot;, was the same clover logo. I did that with the shape tool in Photoshop - it&#x27;s a simple logo and no skill was required to create it, obviously!&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this in a feed reader or one of those aggreggator-type sites, you can help me out by checking out the blog itself and giving me some good old constructive criticism.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Upgraded to iPhone OS 3.0 and running out of battery fast?</title>
    <published>2009-06-22T22:31:47+00:00</published>
    <updated>2009-06-22T22:31:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2009/06/22/upgraded-to-iphone-os-3-0-and-running-out-of-battery-fast/"/>
    <id>https://chuyeow.wtf/2009/06/22/upgraded-to-iphone-os-3-0-and-running-out-of-battery-fast/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2009/06/22/upgraded-to-iphone-os-3-0-and-running-out-of-battery-fast/">&lt;p&gt;After upgrading my girlfriend&#x27;s iPhone 3G to OS 3.0 recently, I noticed that the iPhone&#x27;s battery was getting depleted really quickly. I&#x27;d left it overnight with Wifi, 3G, Bluetooth, Push Notifications all off, and the battery went from 80% to a jaw-dropping &lt;em&gt;OMGWTFBBQ&lt;&#x2F;em&gt; 10%.&lt;&#x2F;p&gt;
&lt;p&gt;I attributed it to the recent jailbreak (I&#x27;ve already removed the jailbreak trying to figure out this problem) at first. I only realized something was really wrong when the iPhone&#x27;s battery &lt;strong&gt;started draining while it was charging via USB&lt;&#x2F;strong&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Looking around on &lt;a href=&quot;http:&#x2F;&#x2F;www.urbandictionary.com&#x2F;define.php?term=interwebs&quot;&gt;teh interwebs&lt;&#x2F;a&gt;, I managed to solve it (easily!) by following the suggestions from &lt;a href=&quot; http:&#x2F;&#x2F;discussions.apple.com&#x2F;message.jspa?messageID=9664702&quot;&gt;this thread at the Apple support forums&lt;&#x2F;a&gt;. Here&#x27;s what worked for me:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;&#x2F;strong&gt; on your iPhone.&lt;&#x2F;li&gt;
&lt;li&gt;Turn &lt;strong&gt;Notifications&lt;&#x2F;strong&gt; off. I&#x27;m not sure if this is necessary but did so just in case.&lt;&#x2F;li&gt;
&lt;li&gt;Go to &lt;strong&gt;Mail, Contacts, Calendars&lt;&#x2F;strong&gt; and &lt;strong&gt;delete all your accounts&lt;&#x2F;strong&gt; (I deleted even Calendar accounts just in case). You may want to write down or backup your account settings first.&lt;&#x2F;li&gt;
&lt;li&gt;Go to &lt;strong&gt;Fetch New Data&lt;&#x2F;strong&gt; (also in the same Mail, Contacts, Calendars settings) and make sure &lt;strong&gt;Push&lt;&#x2F;strong&gt; is &lt;strong&gt;Off&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;It&#x27;s probably not necessary but you may want to restart your iPhone (power it on and off) here.&lt;&#x2F;li&gt;
&lt;li&gt;Add back all your accounts. You can turn &lt;strong&gt;Push&lt;&#x2F;strong&gt; back on &lt;strong&gt;Fetch New Data&lt;&#x2F;strong&gt; now.&lt;&#x2F;li&gt;
&lt;li&gt;You can also turn &lt;strong&gt;Notifications&lt;&#x2F;strong&gt; back on if you wish.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;It seems like the iPhone 3.0 OS update has a bug where email accounts with active push notifications were set to keep fetching new email even if push is turned off explicitly. Hopefully this post will help solve your battery problems, if not, you&#x27;ve gotta keep looking - the &lt;a href=&quot;http:&#x2F;&#x2F;discussions.apple.com&#x2F;forum.jspa?forumID=1139&quot;&gt;Apple iPhone Support forums&lt;&#x2F;a&gt; is a good place to start.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>A curl-ier Curb - better cookie support in Curb</title>
    <published>2009-06-18T09:42:10+00:00</published>
    <updated>2009-06-18T09:42:10+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2009/06/18/better-cookie-support-in-curb/"/>
    <id>https://chuyeow.wtf/2009/06/18/better-cookie-support-in-curb/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2009/06/18/better-cookie-support-in-curb/">&lt;p&gt;As of &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;taf2&#x2F;curb&#x2F;tree&#x2F;master&quot;&gt;Curb&lt;&#x2F;a&gt; 0.3.7, Curb comes with slightly better cookie support that makes it more &quot;&lt;a href=&quot;http:&#x2F;&#x2F;curl.haxx.se&#x2F;&quot;&gt;curl&lt;&#x2F;a&gt;-like&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;It probably sounds like shameless self-promotion that I&#x27;m blogging about these changes since I&#x27;d contributed them. Well, yeah that&#x27;s true, but I&#x27;m also doing so because I doubt these changes will ever be made known since Curb doesn&#x27;t publicize any updates or changelogs. &lt;&#x2F;p&gt;
&lt;p&gt;Curb is my current number 1 HTTP client for Ruby so the more love it gets, the better.&lt;&#x2F;p&gt;
&lt;h3&gt;Passing cookies as a string in Curb requests&lt;&#x2F;h3&gt;
&lt;p&gt;Curl veterans will probably know how to do this with the curl binary:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;curl -b &quot;auth=abcdef; ASP.NET_SessionId=lotsatext;&quot; example.com&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This sends a request to example.com with 2 cookies named &quot;auth&quot; and &quot;ASP.NET_SessionId&quot; (I hate those big-ass ASP.NET cookies btw). There wasn&#x27;t a way to set this in Curb, so I looked up the &lt;a href=&quot;http:&#x2F;&#x2F;curl.haxx.se&#x2F;libcurl&#x2F;c&#x2F;&quot;&gt;libcurl C API docs&lt;&#x2F;a&gt; and replicated the same option in Curb (&lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;taf2&#x2F;curb&#x2F;commit&#x2F;3c3e53c64a2417f78aa19f593a5f66e3ddffc969&quot;&gt;commit on Github&lt;&#x2F;a&gt;). An example:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;curl = Curl::Easy.new(&#x27;http:&#x2F;&#x2F;example.com&#x2F;&#x27;)
curl.cookies = &#x27;auth=abcdef; ASP.NET_SessionId=big-wall-of-text;&#x27;
curl.perform&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Of course, the cookies will more often be retrieved&#x2F;constructed rather than a literal like in the example above. In my case, I was proxying cookies while trying to wrap an API around a site that doesn&#x27;t have one.&lt;&#x2F;p&gt;
&lt;h3&gt;Passing cookies as a file via the &quot;cookiefile&quot; option&lt;&#x2F;h3&gt;
&lt;p&gt;The second change is the new &lt;code&gt;cookiefile&lt;&#x2F;code&gt; option. This replicates curl commands like these:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;curl -b cookies-to-send.txt www.example.com&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;with something like this in ruby:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;curl = Curl::Easy.new(&#x27;http:&#x2F;&#x2F;example.com&#x2F;&#x27;)
curl.cookiefile = &#x27;&#x2F;path&#x2F;to&#x2F;cookies-to-send.txt&#x27;
curl.perform&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The cookies file looks like this (you can get a sample with the &lt;code&gt;--cookie-jar&lt;&#x2F;code&gt; option to curl, e.g. &lt;code&gt;curl --cookie-jar cookies.txt www.wego.com&lt;&#x2F;code&gt;):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;www.wego.com	FALSE	&#x2F;	FALSE	0	lang	
www.wego.com	FALSE	&#x2F;	FALSE	0	user_country_code	SG&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Check out the &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;taf2&#x2F;curb&#x2F;commit&#x2F;a4910c25198441796f8e6d1958e144998833c7ec&quot;&gt;commit on Github&lt;&#x2F;a&gt; if you&#x27;re interested.&lt;&#x2F;p&gt;
&lt;h3&gt;Why would I use these?&lt;&#x2F;h3&gt;
&lt;p&gt;Now you might be wondering how these 2 changes are useful - well, they &lt;em&gt;are&lt;&#x2F;em&gt; totally irrelevant to you if you&#x27;re not expecting any cookie support in Curb. However, if you&#x27;re accessing or scraping a site that uses &lt;strong&gt;cookie-based authentication&lt;&#x2F;strong&gt;, these changes allow you to keep your Curb client authenticated across sessions, even when doing HTTP POSTs (Curb doesn&#x27;t send cookies properly in POST requests even if &lt;code&gt;curl.enable_cookies&lt;&#x2F;code&gt; is set).&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve found these changes to Curb particularly useful since I vastly prefer Curb to most HTTP clients for its speed and lightweight implementation, and heavier scraper-type HTTP clients like &lt;a href=&quot;http:&#x2F;&#x2F;mechanize.rubyforge.org&#x2F;mechanize&#x2F;&quot;&gt;Mechanize&lt;&#x2F;a&gt; are a last resort.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Don&#x27;t kill your app when using ActiveRecord in Rails Metal, release your database connections</title>
    <published>2009-06-15T14:49:51+00:00</published>
    <updated>2009-06-15T14:49:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2009/06/15/activerecord-rails-metal-too-many-connections/"/>
    <id>https://chuyeow.wtf/2009/06/15/activerecord-rails-metal-too-many-connections/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2009/06/15/activerecord-rails-metal-too-many-connections/">&lt;p&gt;Rails Metal has been available on Rails since version 2.3 - it&#x27;s old news. But if you haven&#x27;t used it or heard about it, you can find out more about Rails Metal on the &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.org&#x2F;2008&#x2F;12&#x2F;17&#x2F;introducing-rails-metal&quot;&gt;RoR weblog&lt;&#x2F;a&gt; and on &lt;a href=&quot;http:&#x2F;&#x2F;soylentfoo.jnewland.com&#x2F;articles&#x2F;2008&#x2F;12&#x2F;16&#x2F;rails-metal-a-micro-framework-with-the-power-of-rails-m&quot;&gt;Jesse Newland&#x27;s blog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;So anyway, I am one of those laggards and only wrote a Rails Metal piece not too long ago for a Rails app on &lt;a href=&quot;http:&#x2F;&#x2F;www.wego.com&#x2F;&quot;&gt;Wego.com&lt;&#x2F;a&gt; in an effort to optimize some high volume requests. It looked something like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class Adamantine
  def self.call(env)
    if env[&#x27;PATH_INFO&#x27;] =~ ROUTE_REGEX
      location = Location.find(1) # Use ActiveRecord.
&lt;pre&gt;&lt;code&gt;  [200, { &amp;#39;Content-Type&amp;#39; =&amp;gt; &amp;#39;text&#x2F;html&amp;#39; }, [location.to_json]]
else
  # Leave it to Rails to deal with the request.
  [404, { &amp;#39;Content-Type&amp;#39; =&amp;gt; &amp;#39;text&#x2F;html&amp;#39; }, [&amp;#39;Not Found&amp;#39;]]
end
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Notice the use of an ActiveRecord model. It ran for quite awhile, almost 30 minutes, in &lt;em&gt;production&lt;&#x2F;em&gt; until I started getting notification emails about &quot;&lt;strong&gt;Too many open database connections&lt;&#x2F;strong&gt;&quot; to the MySQL server! The change was promptly rolled back and there was no cheezburger for me.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;icanhascheezburger.com&#x2F;2008&#x2F;04&#x2F;25&#x2F;funny-pictures-dam-it-dam-it-dam-it&#x2F;&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;funny-pictures-beaver-dam-it.jpg&quot; alt=&quot;dam it!&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As it turns out, Rails doesn&#x27;t take care of certain things in Rails Metal pieces, including the releasing of connections back to the database connection pool. A bit of googling turned up this &lt;a href=&quot;https:&#x2F;&#x2F;rails.lighthouseapp.com&#x2F;projects&#x2F;8994&#x2F;tickets&#x2F;1882-rails-metal-with-activerecord-too-slow&quot;&gt;bug in Rails&#x27; bug tracker&lt;&#x2F;a&gt; (see Josh Peek&#x27;s comment about &lt;code&gt;ActiveRecord::Base.clear_active_connections!&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;I rewrote the Rails Metal piece to always ensure it clears any active database connections with &lt;code&gt;ActiveRecord::Base.clear_active_connections!&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class Adamantine
  def self.call(env)
    if env[&#x27;PATH_INFO&#x27;] =~ ROUTE_REGEX
      location = Location.find(1)
&lt;pre&gt;&lt;code&gt;  [200, { &amp;#39;Content-Type&amp;#39; =&amp;gt; &amp;#39;text&#x2F;html&amp;#39; }, [location.to_json]]
else
  # Leave it to Rails to deal with the request.
  [404, { &amp;#39;Content-Type&amp;#39; =&amp;gt; &amp;#39;text&#x2F;html&amp;#39; }, [&amp;#39;Not Found&amp;#39;]]
end
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ensure
# Release the connections back to the pool.
ActiveRecord::Base.clear_active_connections!
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Moral of the story: Don&#x27;t forget to release your database connections if you&#x27;re using ActiveRecord in your Rails Metal. Or even better, don&#x27;t use ActiveRecord in Rails Metal - you&#x27;re aiming for raw speed anyway right?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>I&#x27;m still alive, and on FriendFeed and Twitter</title>
    <published>2009-03-24T22:48:58+00:00</published>
    <updated>2009-03-24T22:48:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2009/03/24/im-still-alive-and-on-friendfeed-and-twitter/"/>
    <id>https://chuyeow.wtf/2009/03/24/im-still-alive-and-on-friendfeed-and-twitter/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2009/03/24/im-still-alive-and-on-friendfeed-and-twitter/">&lt;p&gt;Wow, it seems like I haven&#x27;t posted anything this year. Don&#x27;t worry, you aren&#x27;t rid of me yet. I&#x27;m still alive and posting updates to &lt;a href=&quot;http:&#x2F;&#x2F;friendfeed.com&#x2F;chuyeow&quot;&gt;FriendFeed&lt;&#x2F;a&gt; and (less often) to &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;chuyeow&quot;&gt;Twitter&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If you belong to what I imagine must be now the microscopic population of loyal readers of my blog, please do hook up with me on &lt;a href=&quot;http:&#x2F;&#x2F;friendfeed.com&#x2F;chuyeow&quot;&gt;FriendFeed&lt;&#x2F;a&gt; or &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;chuyeow&quot;&gt;Twitter&lt;&#x2F;a&gt;. I&#x27;ll follow you back if you&#x27;re a reader!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Dragging tab to a new window coming to Firefox</title>
    <published>2008-11-16T22:15:05+00:00</published>
    <updated>2008-11-16T22:15:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/11/16/dragging-tab-to-a-new-window-coming-to-firefox/"/>
    <id>https://chuyeow.wtf/2008/11/16/dragging-tab-to-a-new-window-coming-to-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/11/16/dragging-tab-to-a-new-window-coming-to-firefox/">&lt;p&gt;Completely by accident, I discovered that you can now drag a tab out from its current window to a new window in a recent Firefox nightly. A short video 24-second better explains what I&#x27;m talking about:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http:&#x2F;&#x2F;www.youtube.com&#x2F;v&#x2F;yecyFamSh6c&amp;hl=en&amp;fs=1&quot; &#x2F;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; &#x2F;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; &#x2F;&gt;&lt;embed src=&quot;http:&#x2F;&#x2F;www.youtube.com&#x2F;v&#x2F;yecyFamSh6c&amp;hl=en&amp;fs=1&quot; type=&quot;application&#x2F;x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;&#x2F;embed&gt;&lt;&#x2F;object&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This tab tearing capability is a pretty neat feature - I know you can already do this in Safari, Opera and Galeon. It&#x27;s really well done in Safari, which I think is what Firefox is emulating. Nice to see Firefox follow suit!&lt;&#x2F;p&gt;
&lt;p&gt;If you can&#x27;t wait for Firefox 3.1, try it out in a recent &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-trunk&#x2F;&quot;&gt;Firefox nighty build&lt;&#x2F;a&gt; (remember to &lt;a href=&quot;http:&#x2F;&#x2F;support.mozilla.com&#x2F;en-US&#x2F;kb&#x2F;Managing+profiles&quot;&gt;use a new profile&lt;&#x2F;a&gt; unless you are willing to risk corrupting your daily profile).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Optimize Firefox&#x27;s memory usage by tweaking session preferences</title>
    <published>2008-09-10T20:57:24+00:00</published>
    <updated>2008-09-10T20:57:24+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/09/10/optimize-firefoxs-memory-usage-by-tweaking-session-preferences/"/>
    <id>https://chuyeow.wtf/2008/09/10/optimize-firefoxs-memory-usage-by-tweaking-session-preferences/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/09/10/optimize-firefoxs-memory-usage-by-tweaking-session-preferences/">&lt;p&gt;I&#x27;m a heavy tabbed browsing user - I have around 30 tabs open in my day-to-day Firefox profile all the time. Since the day Firefox 3 was released, I&#x27;ve noticed Firefox progressively getting slower with this particular Firefox profile (I use a different profile for web development). When it got to the point where changing tabs took a noticeable pause of 1-2 seconds, I tweaked some of Firefox&#x27;s session store and history preferences and now things are blazing fast again.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s what you can do:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;a href=&quot;about:config&quot;&gt;about:config&lt;&#x2F;a&gt; in Firefox.&lt;&#x2F;li&gt;
&lt;li&gt;Type in &quot;session&quot; in the &quot;Filter&quot; box.&lt;&#x2F;li&gt;
&lt;li&gt;Edit &lt;strong&gt;browser.sessionhistory.max_entries&lt;&#x2F;strong&gt; - this is the number of pages stored in the history of your browsing session. Basically these are pages that can be reached using your Back and Forward buttons. The default is 50 - I reduced it to 20.&lt;&#x2F;li&gt;
&lt;li&gt;Edit &lt;strong&gt;browser.sessionhistory.max_total_viewers&lt;&#x2F;strong&gt; - this is the number of pages that are stored in RAM so that they aren&#x27;t re-processed by Firefox&#x27;s rendering engine. This is what allows you to go Back to a page in Firefox and have it load almost instantaneously. The number of pages stored actually depends on the amount of RAM on your machine (&lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;Browser.sessionhistory.max_total_viewers&quot;&gt;see this&lt;&#x2F;a&gt;). I reduced this to 4 (I have 2GB RAM).&lt;&#x2F;li&gt;
&lt;li&gt;Edit &lt;strong&gt;&lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;Browser.sessionstore.max_tabs_undo&quot;&gt;browser.sessionstore.max_tabs_undo&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; - the number of tabs you can restore after closing them (you can do this with Ctrl&#x2F;Cmd-Shift-T). The default of 10 is more than I really need, so I reduced it to 3 tabs.&lt;&#x2F;li&gt;
&lt;li&gt;Edit &lt;strong&gt;&lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;Browser.sessionstore.interval&quot;&gt;browser.sessionstore.interval&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; - Firefox saves your session after every 10 seconds by default. I changed this to a more conservative 30000 milliseconds.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;You can &lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;About:config_entries&quot;&gt;read more about these preferences and more at the MozillaZine Knowledge Base&lt;&#x2F;a&gt;. If you&#x27;ve any tips on how to improve Firefox&#x27;s performance, be sure to share!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Sass with Rails - avoiding disappearing stylesheets in production</title>
    <published>2008-08-07T21:57:33+00:00</published>
    <updated>2008-08-07T21:57:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/08/07/sass-with-rails-avoiding-disappearing-stylesheets-in-production/"/>
    <id>https://chuyeow.wtf/2008/08/07/sass-with-rails-avoiding-disappearing-stylesheets-in-production/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/08/07/sass-with-rails-avoiding-disappearing-stylesheets-in-production/">&lt;p&gt;A few days ago I noticed that some of the pages on the &lt;a href=&quot;http:&#x2F;&#x2F;wego.com&#x2F;hotels&#x2F;&quot;&gt;Hotels app on wego.com&lt;&#x2F;a&gt; were completely unstyled. They turned out looking rather &lt;a href=&quot;http:&#x2F;&#x2F;www.useit.com&#x2F;&quot;&gt;Jakob Nielsen-istic&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;wegocom-hotels-no-css.png&quot; alt=&quot;Wego.com Hotels - no CSS&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;But we were attached to our ugly shade of green to leave those pages in their naked glory. Preliminary CSI work told me that &lt;em&gt;some&lt;&#x2F;em&gt; cached stylesheets generated by Rails were empty files. Why is this is happening?&lt;&#x2F;p&gt;
&lt;h3&gt;stylesheet_link_tag and the :cache option&lt;&#x2F;h3&gt;
&lt;p&gt;Was I overriding the stylesheets generated by Rails in different pages? Because we have a lot of cobranded sites and country sites on wego.com, I use the &lt;code&gt;:cache&lt;&#x2F;code&gt; option when using &lt;code&gt;stylesheet_link_tag&lt;&#x2F;code&gt; very often.&lt;&#x2F;p&gt;
&lt;p&gt;For example, the main wego.com site&#x27;s layout template has a &lt;code&gt;stylesheet_link_tag&lt;&#x2F;code&gt; like this (in reality there are a whole lot more stylesheets):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;%= stylesheet_link_tag &#x27;yui&#x2F;reset-fonts&#x27;, &#x27;search&#x27;,  :cache =&amp;gt; &#x27;cache&#x2F;search&#x2F;listings&#x27; %&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;When I need to make a new page for a cobranded site, I&#x27;ll create a new layout template with this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;%= stylesheet_link_tag &#x27;yui&#x2F;reset-fonts&#x27;, &#x27;search&#x27;, &quot;sites&#x2F;#{current_site}&#x2F;cobrand&quot;, :cache =&gt; &quot;cache&#x2F;#{current_site}&#x2F;search&#x2F;listings&quot; %&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Oftentimes I&#x27;d copy and paste (boo and hiss all you want!) the &lt;code&gt;stylesheet_link_tag&lt;&#x2F;code&gt; from one layout template to another and forget to update the cache path (the &lt;code&gt;:cache =&gt; &#x27;&#x2F;path&#x2F;to&#x2F;stylesheet&#x27;&lt;&#x2F;code&gt; part). Two different stylesheet sets being cached to the same path is naturally a very stupid thing to do. So this wasn&#x27;t it, but it&#x27;s good to point this out because I have made this mistake at least 2 times!&lt;&#x2F;p&gt;
&lt;h3&gt;Don&#x27;t check in generated CSS files by accident&lt;&#x2F;h3&gt;
&lt;p&gt;Next, since I was using &lt;a href=&quot;http:&#x2F;&#x2F;haml.hamptoncatlin.com&#x2F;docs&#x2F;rdoc&#x2F;classes&#x2F;Sass.html&quot;&gt;Sass&lt;&#x2F;a&gt;, I was by now pretty sure that was it. First things first: did I check in a generated CSS file into source control (we use Git)? It&#x27;s another amateur mistake, but unsurprisingly, I&#x27;ve done this a couple of times. I think I&#x27;d wasted about an hour hunting down the reason for a style change that just wouldn&#x27;t show up. Yeah, I could have just added &lt;code&gt;*.css&lt;&#x2F;code&gt; to &lt;code&gt;.gitignore&lt;&#x2F;code&gt;, but I&#x27;m still using a mix of pure CSS and Sass templates.&lt;&#x2F;p&gt;
&lt;h3&gt;The problem&lt;&#x2F;h3&gt;
&lt;p&gt;In the end, I found this &lt;a href=&quot;http:&#x2F;&#x2F;blog.citrusbyte.com&#x2F;2008&#x2F;3&#x2F;20&#x2F;sass-production-woes-rails&#x2F;&quot;&gt;blog post&lt;&#x2F;a&gt; by Ari Lerner on the &lt;a href=&quot;http:&#x2F;&#x2F;blog.citrusbyte.com&#x2F;&quot;&gt;CitrusByte blog&lt;&#x2F;a&gt; about similar woes with Sass in production that set me on the path to a solution. It seems that when Rails encounters &lt;code&gt;stylesheet_link_tag&lt;&#x2F;code&gt; calls, it starts to pull together all the stylesheets and sometimes Sass is unable to generate the CSS files fast enough. Rails then throws an exception about not being able to find the CSS files and outputs an &lt;strong&gt;empty&lt;&#x2F;strong&gt; CSS file to the cache path.&lt;&#x2F;p&gt;
&lt;h3&gt;The solution&lt;&#x2F;h3&gt;
&lt;p&gt;The solution? Generate all the CSS files from Sass templates prior to restarting Rails when deploying. I added a rake task for updating all the Sass stylesheets:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;namespace :sass do
  desc &#x27;Updates stylesheets if necessary from their Sass templates.&#x27;
  task :update =&amp;gt; :environment do
    Sass::Plugin.update_stylesheets
  end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then, I created a mirror of this as a Capistrano task:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;namespace :sass do
  desc &#x27;Updates the stylesheets generated by Sass&#x27;
  task :update, :roles =&amp;gt; :app do
    invoke_command &quot;cd #{latest_release}; RAILS_ENV=#{rails_env} rake sass:update&quot;
  end
&lt;h1 id=&quot;generate-all-the-stylesheets-manually-from-their-sass-templates-before-each-restart&quot;&gt;Generate all the stylesheets manually (from their Sass templates) before each restart.&lt;&#x2F;h1&gt;
&lt;p&gt;before &#x27;deploy:restart&#x27;, &#x27;sass:update&#x27;
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now, whenever I do a &lt;code&gt;cap deploy&lt;&#x2F;code&gt;, the stylesheets are generated before the Rails processes are restarted, ensuring that Rails&#x27; &lt;code&gt;stylesheet_link_tag&lt;&#x2F;code&gt; helper is always able to find the pure CSS files when trying to merge them together and caching them to a single file.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Reveal currently open files in Mac OS X</title>
    <published>2008-06-28T14:10:05+00:00</published>
    <updated>2008-06-28T14:10:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/06/28/reveal-currently-open-files-in-mac-os-x/"/>
    <id>https://chuyeow.wtf/2008/06/28/reveal-currently-open-files-in-mac-os-x/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/06/28/reveal-currently-open-files-in-mac-os-x/">&lt;p&gt;Something I noticed completely by accident today when I clicked on the titlebar of QuickTime Player today with the Cmd key held down. The &quot;titlebar&quot; is this thing here - I&#x27;m not sure that&#x27;s the right name for it:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;a href=&quot;&#x2F;assets&#x2F;qt-titlebar.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;qt-titlebar.png&quot; alt=&quot;&quot; title=&quot;QuickTime titlebar&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, if you hold down the Cmd key (aka the Apple key), a menu pops up that shows the folder hierarchy of where the currently opened QuickTime movie is in your filesystem:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;a href=&quot;&#x2F;assets&#x2F;qt-title-bar-expanded.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;qt-title-bar-expanded.png&quot; alt=&quot;&quot; title=&quot;QuickTime Player with \&amp;quot;Reveal file\&amp;quot; menu&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This works in all Mac apps that display the filename of the currently open&#x2F;focused file in the titlebar.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s useful for me since my &lt;acronym title=&quot;Nerd ADD&quot;&gt;NADD&lt;&#x2F;acronym&gt; means I try to close as many unused windows as possible to adhere to my Cmd-Tab diet - now I can close Finder windows after opening files and be sure that I can get back to them quickly. What about &lt;a href=&quot;http:&#x2F;&#x2F;www.blacktree.com&#x2F;&quot;&gt;QuickSilver&lt;&#x2F;a&gt;? Yup, I do use (and love) QuickSilver but I don&#x27;t let it catalog every single file!&lt;&#x2F;p&gt;
&lt;p&gt;Another nice thing about this is that I can easily reveal files in Finder in my favorite text editor (TextMate) without needing to use the project drawer:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;a href=&quot;&#x2F;assets&#x2F;textmate-expanded.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;textmate-expanded.png&quot; alt=&quot;&quot; title=&quot;TextMate with \&amp;quot;Reveal file\&amp;quot; menu&quot; width=&quot;300&quot; height=&quot;214&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the Edge (of Rails) has a new home at the Official Ruby on Rails weblog</title>
    <published>2008-06-22T17:55:39+00:00</published>
    <updated>2008-06-22T17:55:39+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/06/22/living-on-the-edge-of-rails-has-a-new-home-at-the-official-ruby-on-rails-weblog/"/>
    <id>https://chuyeow.wtf/2008/06/22/living-on-the-edge-of-rails-has-a-new-home-at-the-official-ruby-on-rails-weblog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/06/22/living-on-the-edge-of-rails-has-a-new-home-at-the-official-ruby-on-rails-weblog/">&lt;p&gt;You may have &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.org&#x2F;2008&#x2F;6&#x2F;10&#x2F;two-new-weekly-columns&quot;&gt;heard of it&lt;&#x2F;a&gt;, but just in case, &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;category&#x2F;edge-rails&#x2F;&quot;&gt;Living on the Edge&lt;&#x2F;a&gt; is now going to be published on the &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.org&#x2F;&quot;&gt;official Ruby on Rails weblog&lt;&#x2F;a&gt;. Big thanks to &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;&quot;&gt;Gregg Pollack&lt;&#x2F;a&gt; for getting me the new &quot;gig&quot;, and more importantly, for reviving and freshening up the content on the official Rails blog.&lt;&#x2F;p&gt;
&lt;p&gt;Catch the new first edition - this one&#x27;s about the &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.org&#x2F;2008&#x2F;6&#x2F;20&#x2F;living-on-the-edge-or-what-s-new-in-edge-rails-1-api-changes-and-performancetests&quot;&gt;API changes since Rails 2.1&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>RailsConf 2008 Day 1 - pics and a summary</title>
    <published>2008-05-30T13:32:11+00:00</published>
    <updated>2008-05-30T13:32:11+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/05/30/railsconf-2008-day-1-pics-and-a-summary/"/>
    <id>https://chuyeow.wtf/2008/05/30/railsconf-2008-day-1-pics-and-a-summary/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/05/30/railsconf-2008-day-1-pics-and-a-summary/">&lt;p&gt;Day 1 of &lt;a href=&quot;http:&#x2F;&#x2F;en.oreilly.com&#x2F;rails2008&#x2F;public&#x2F;content&#x2F;home&quot;&gt;RailsConf 2008&lt;&#x2F;a&gt; was basically tutorial day (&lt;a href=&quot;http:&#x2F;&#x2F;en.oreilly.com&#x2F;rails2008&#x2F;public&#x2F;schedule&#x2F;grid?date=2008-05-29&quot;&gt;schedule&lt;&#x2F;a&gt;) and started with my colleague here with me, &lt;a href=&quot;http:&#x2F;&#x2F;arunthampi.wordpress.com&#x2F;&quot;&gt;Arun&lt;&#x2F;a&gt;, missing out on &lt;a href=&quot;http:&#x2F;&#x2F;en.oreilly.com&#x2F;rails2008&#x2F;public&#x2F;schedule&#x2F;detail&#x2F;4417&quot;&gt;Yoga on Rails&lt;&#x2F;a&gt; and me sleeping until the first tutorial session. Anyway, I snapped some photos while trying to remain the unobtrusive tourist.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a shot of Portland Convention Center where it&#x27;s all happening:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;portland-convention-center-twin-peaks.jpg&quot; alt=&quot;Portland Convention Center - twin peaks outside&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;re queues for collection of badges after registering your attendance:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;railsconf-day-1-registration-3.jpg&quot; alt=&quot;RailsConf Day 1 - registration queue&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Patience in the queue rewarded me with a RailsConf badge&#x2F;name tag:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;railsconf-badge.jpg&quot; alt=&quot;RailsConf badge&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I was at the &lt;a href=&quot;http:&#x2F;&#x2F;en.oreilly.com&#x2F;rails2008&#x2F;public&#x2F;schedule&#x2F;detail&#x2F;1862&quot;&gt;Meta-programming Ruby for Fun &amp;amp; Profit&lt;&#x2F;a&gt; tutorial in the morning. I think when I selected the tutorial it was before I&#x27;d seen Neal Ford and Patrick Farley&#x27;s (the speakers) presentation videos from elsewhere - I know &lt;a href=&quot;http:&#x2F;&#x2F;mtnwestrubyconf2008.confreaks.com&#x2F;11farley.html&quot;&gt;Patrick presented at MWRC&lt;&#x2F;a&gt; and enjoyed that video.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;railsconf-day-1-metaprogramming-tutorial-1.jpg&quot; alt=&quot;RailsConf day 1 - metaprogramming tutorial&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So anyway, after the break I went over to the &lt;a href=&quot;http:&#x2F;&#x2F;en.oreilly.com&#x2F;rails2008&#x2F;public&#x2F;schedule&#x2F;detail&#x2F;1962&quot;&gt;Refactoring Your Rails Application&lt;&#x2F;a&gt; tutorial. Was pretty good, but I didn&#x27;t learn much I didn&#x27;t already know.&lt;&#x2F;p&gt;
&lt;p&gt;Lunch came in the form of a pretty box:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;railsconf-day-1-lunch.jpg&quot; alt=&quot;RailsConf day 1 - lunch&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;After lunch was the 2nd tutorial session and I went to both &lt;a href=&quot;http:&#x2F;&#x2F;en.oreilly.com&#x2F;rails2008&#x2F;public&#x2F;schedule&#x2F;detail&#x2F;2072&quot;&gt;CI for the Rails Guy (or Gal)&lt;&#x2F;a&gt; (by Chad Woolley) and &lt;a href=&quot;http:&#x2F;&#x2F;en.oreilly.com&#x2F;rails2008&#x2F;public&#x2F;schedule&#x2F;detail&#x2F;1993&quot;&gt;Developer Testing Tricks&lt;&#x2F;a&gt; (by Brian Takita). There were some scathing comments about how the tutorials were rather underwhelming so far in &lt;a href=&quot;irc:&#x2F;&#x2F;irc.freenode.net&#x2F;railsconf&quot;&gt;#railsconf&lt;&#x2F;a&gt; on IRC. While I agree that the tutorials were rather underwhelming, I think I should have expected it. Oh well, I&#x27;ll know to skip them next time.&lt;&#x2F;p&gt;
&lt;p&gt;Later that night, at the Birds of a Feather session, after stealing a &lt;a href=&quot;http:&#x2F;&#x2F;www.pivotalabs.com&#x2F;&quot;&gt;Pivotal Labs t-shirt&lt;&#x2F;a&gt; (they&#x27;re launching a bug tracker, project management type app called &lt;a href=&quot;http:&#x2F;&#x2F;www.pivotaltracker.com&#x2F;&quot;&gt;Pivotal Tracker&lt;&#x2F;a&gt; at RailsConf), Yehuda Katz (Merb and jQuery ninja) gave a presentation on Merb (geared towards Rails folks). It was a pretty interesting talk though there wasn&#x27;t much above what Ezra had &lt;a href=&quot;http:&#x2F;&#x2F;goruco2008.confreaks.com&#x2F;06_zygmuntowicz.html&quot;&gt;presented previously at GoRuCo 2008&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;mwrc2008.confreaks.com&#x2F;02zygmuntowicz.html&quot;&gt;at MWRC 2008&lt;&#x2F;a&gt; (I think Yehuda did one too but I can&#x27;t remember where now). Yehuda pointed out a &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.com&#x2F;group&#x2F;merb&#x2F;browse_thread&#x2F;thread&#x2F;2536bff7d9195b83&quot;&gt;(heated) discussion that happened recently&lt;&#x2F;a&gt; on keeping Merb syntax as Rails-friendly as possible. I have no objection against a different syntax really, especially since Merb looks pretty well-documented in the source itself - would be nice if someone could point out an up-to-date Merb tutorial though.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, that&#x27;s it from me - as always, if anyone who reads my blog &lt;a href=&quot;http:&#x2F;&#x2F;www.facebook.com&#x2F;profile.php?id=500115784&quot;&gt;recognizes me&lt;&#x2F;a&gt; at RailsConf, do say hi (&lt;a href=&quot;irc:&#x2F;&#x2F;irc.freenode.net&#x2F;railsconf&quot;&gt;#railsconf&lt;&#x2F;a&gt; works too).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #22 - pre-Railsconf 2008 edition</title>
    <published>2008-05-25T19:06:36+00:00</published>
    <updated>2008-05-25T19:06:36+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/05/25/living-on-the-edge-of-rails-22-pre-railsconf-2008-edition/"/>
    <id>https://chuyeow.wtf/2008/05/25/living-on-the-edge-of-rails-22-pre-railsconf-2008-edition/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/05/25/living-on-the-edge-of-rails-22-pre-railsconf-2008-edition/">&lt;p&gt;No mind-blowing changes in Rails this week prior to RailsConf - as Gregg mentioned last week in the &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;2008&#x2F;5&#x2F;21&#x2F;rails-envy-podcast-episode-032&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt;, it&#x27;s pre-2.1 days (Rails 2.1 will &lt;em&gt;probably&lt;&#x2F;em&gt; be released at RailsConf) so it&#x27;s pretty easy to see why. Oh and all Rails tests now pass in Ruby 1.9 after a long-standing &lt;code&gt;#module_eval&lt;&#x2F;code&gt; bug got fixed in Ruby 1.9&#x27;s trunk (see &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.com&#x2F;group&#x2F;ruby-core-google&#x2F;browse_thread&#x2F;thread&#x2F;6d08e11363bf49b4&quot;&gt;thread&lt;&#x2F;a&gt; for more details).&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll be at (my first) Railsconf 2008 in Portland, Oregon this Thursday onwards - if anyone sees me and recognizes me from my &lt;a href=&quot;http:&#x2F;&#x2F;www.facebook.com&#x2F;people&#x2F;Chu_Yeow&#x2F;500115784&quot;&gt;Facebook picture&lt;&#x2F;a&gt; please come and say hi (no head butting though).&lt;&#x2F;p&gt;
&lt;p&gt;This week’s report covers changes from 19th May 2008 to 25th May 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;first and last methods now work with associations and named_scope&lt;&#x2F;h3&gt;
&lt;p&gt;Remember how the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2008&#x2F;04&#x2F;05&#x2F;living-on-the-edge-of-rails-14-the-extreme-edition-extremely-late&#x2F;&quot;&gt;merging of the has_finder gem into Rails&lt;&#x2F;a&gt; allowed you to do things like &lt;code&gt;Post.first&lt;&#x2F;code&gt; and &lt;code&gt;Post.last&lt;&#x2F;code&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;Now you can go one step further and use the same methods on your ActiveRecord associations. For example:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;post = Post.find(1)
first_comment = post.comments.first&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you have a &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;articles&#x2F;2008&#x2F;3&#x2F;24&#x2F;what-s-new-in-edge-rails-has-finder-functionality&quot;&gt;named_scope&lt;&#x2F;a&gt; named &lt;code&gt;recent&lt;&#x2F;code&gt; defined, you can even do this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;post.comments.recent.last&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This neat little enhancement is courtesy of &lt;a href=&quot;http:&#x2F;&#x2F;railscasts.com&#x2F;&quot;&gt;Ryan Bates&lt;&#x2F;a&gt; (yes, that &lt;em&gt;Ryan Bates&lt;&#x2F;em&gt; of &lt;a href=&quot;http:&#x2F;&#x2F;railscasts.com&#x2F;&quot;&gt;Railscasts&lt;&#x2F;a&gt; fame).&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;73c59638549686fccc749ffd3ac53cb533c5fd61&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;73c59638549686fccc749ffd3ac53cb533c5fd61&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Cache stores now have an exist? method and controllers get fragment_exist?&lt;&#x2F;h3&gt;
&lt;p&gt;The cache stores in Rails (Memcache, file stores, etc.) now have an &lt;code&gt;exist?&lt;&#x2F;code&gt; method that checks whether a cached value exists given a cache key. This allows Rails controllers to expose a &lt;code&gt;fragment_exist?&lt;br &#x2F;&gt;
&lt;&#x2F;code&gt; method that allows you to check for existence of a cache fragment:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;fragment_exist?(&#x27;example.com&#x2F;foo&#x2F;bar&#x27;)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This little enhancement is courtesy of &lt;a href=&quot;http:&#x2F;&#x2F;josevalim.blogspot.com&#x2F;&quot;&gt;José Valim&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;99860b72aebe0348f41e82d4710343498d89a84b#diff-2&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;99860b72aebe0348f41e82d4710343498d89a84b#diff-2&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Create association records with block argument&lt;&#x2F;h3&gt;
&lt;p&gt;You can now create records for associations like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;post.coments.create!(:title =&gt; &#x27;Techcrunch&#x27;) do |c|
  c.body = &quot;Rails can&#x27;t scale&quot;
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is in keeping with the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2008&#x2F;05&#x2F;04&#x2F;living-on-the-edge-of-rails-19-change_table-for-migrations-and-more&#x2F;&quot;&gt;ActiveRecord::Base.create change previously mentioned&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Credit for this patch goes (once again) to &lt;a href=&quot;http:&#x2F;&#x2F;railscasts.com&#x2F;&quot;&gt;Ryan Bates&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;6cba97d2a449faf21aec9fe9d4434067e414226f&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;6cba97d2a449faf21aec9fe9d4434067e414226f&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As always, let me know of any suggestions or how I can improve the Living on the Edge (of Rails) series.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the Edge (of Rails) in Spanish</title>
    <published>2008-05-18T20:16:18+00:00</published>
    <updated>2008-05-18T20:16:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/05/18/living-on-the-edge-of-rails-in-spanish/"/>
    <id>https://chuyeow.wtf/2008/05/18/living-on-the-edge-of-rails-in-spanish/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/05/18/living-on-the-edge-of-rails-in-spanish/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;sobrerailes.com&#x2F;&quot;&gt;Juan Lupión&lt;&#x2F;a&gt; wrote in to inform me that he&#x27;s also translating my Living on the Edge (of Rails) series of blog posts to Español. Thanks Juan!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #21</title>
    <published>2008-05-18T19:54:42+00:00</published>
    <updated>2008-05-18T19:54:42+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/05/18/living-on-the-edge-of-rails-21/"/>
    <id>https://chuyeow.wtf/2008/05/18/living-on-the-edge-of-rails-21/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/05/18/living-on-the-edge-of-rails-21/">&lt;p&gt;It&#x27;s another slow week (just 2 changes of note &lt;acronym title=&quot;in my humble opinion&quot;&gt;imho&lt;&#x2F;acronym&gt;) after the &lt;a href=&quot;http:&#x2F;&#x2F;www.rubyinside.com&#x2F;rails-21-released-891.html&quot;&gt;release of the 1st Release Candidate (RC1) of Rails 2.1&lt;&#x2F;a&gt;. Follow that link for installation instructions - though if you&#x27;re reading this blog post you probably don&#x27;t care! (because you&#x27;re, you know, &quot;living on the edge&quot;). Cheesiness aside, be sure to report any bugs you may encounter when upgrading to 2.1 RC1 or edge at the &lt;a href=&quot;http:&#x2F;&#x2F;rails.lighthouseapp.com&#x2F;projects&#x2F;8994-ruby-on-rails&#x2F;overview&quot;&gt;Rails bug tracker&lt;&#x2F;a&gt; - it is an RC so any bug reports would be very welcome and useful!&lt;&#x2F;p&gt;
&lt;p&gt;This week’s report covers changes from 12th May 2008 to 18th May 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;caches_action can has conditionals&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;caches_action&lt;&#x2F;code&gt; now takes an &lt;code&gt;:if&lt;&#x2F;code&gt; option (just like &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2008&#x2F;04&#x2F;20&#x2F;living-on-the-edge-of-rails-17&#x2F;&quot;&gt;caches_page does&lt;&#x2F;a&gt;). For example:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;caches_action :index, :if =&amp;gt; Proc.new { |c| !c.request.format.json? }&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This little enhancement is courtesy of José Valim.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;7708650f73ddb4db300ea2059c60c1d907a4384e&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;7708650f73ddb4db300ea2059c60c1d907a4384e&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Bugfix: :select option is now scanned in ActiveRecord finders to ensure needed tables are included in generated SQL&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Post.find(:all, :include =&amp;gt; :author, :select =&amp;gt; &#x27;posts.*, authors.id as &quot;author_id&quot;&#x27;, :limit =&amp;gt; 2)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Would generate an SQL statement like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;sql&quot;&gt;SELECT posts.*, authors.id as &quot;author_id&quot; FROM &quot;posts&quot; LIMIT 2&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Notice how the &lt;code&gt;authors&lt;&#x2F;code&gt; table is not joined. This oversight is now fixed.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks go to John Devine for this bugfix.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;b28b54cab090bed8f099ef375b419a8f92390dd4&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;b28b54cab090bed8f099ef375b419a8f92390dd4&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As always, let me know of any suggestions or how I can improve the Living on the Edge (of Rails) series. Also, if anyone has any recommendations of (non-ruby-related) things to do in Portland, do let me know!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Deploying with Capistrano via a gateway - some notes</title>
    <published>2008-05-15T17:03:48+00:00</published>
    <updated>2008-05-15T17:03:48+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/05/15/deploying-with-capistrano-via-a-gateway/"/>
    <id>https://chuyeow.wtf/2008/05/15/deploying-with-capistrano-via-a-gateway/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/05/15/deploying-with-capistrano-via-a-gateway/">&lt;p&gt;Some notes on setting up a &lt;a href=&quot;http:&#x2F;&#x2F;weblog.jamisbuck.org&#x2F;2006&#x2F;9&#x2F;26&#x2F;inside-capistrano-the-gateway-implementation&quot;&gt;gateway server for deploying via Capistrano&lt;&#x2F;a&gt; that I couldn&#x27;t find at &lt;a href=&quot;http:&#x2F;&#x2F;capify.org&#x2F;getting-started&#x2F;basics&quot;&gt;the source&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;You can specify the user you want to use to login to your gateway server like so: &lt;code&gt;set :gateway, &#x27;deploy@deploy.example.com&#x27;&lt;&#x2F;code&gt;. This logs in to your gateway server as the &quot;deploy&quot; user.&lt;&#x2F;li&gt;
&lt;li&gt;You can specify an alternate SSH port for both your gateway &lt;em&gt;and&lt;&#x2F;em&gt; your deployment servers. E.g. setting &lt;code&gt;ssh_options[:port] = 11111&lt;&#x2F;code&gt; will make Capistrano SSH to your gateway server with on port 11111. For your actual application (and web and database) servers, you can specify the SSH port like so:
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;set :gateway, &#x27;deploy@deploy.example.com&#x27;
role :app, &#x27;192.168.1.113:22222&#x27;
role :web, &#x27;192.168.1.113:22222&#x27;
role :db,  &#x27;192.168.1.113:22222&#x27;, :primary =&gt; true&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;If you&#x27;re using public key authentication, you should put the public keys of your users (those who be deploying your app) on the gateway server &lt;em&gt;and&lt;&#x2F;em&gt; on the actual servers. I thought Capistrano would use the key of the &quot;deploy&quot; user but nope.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #20 - script&#x2F;dbconsole and flash.now now test-able</title>
    <published>2008-05-11T14:54:32+00:00</published>
    <updated>2008-05-11T14:54:32+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/05/11/living-on-the-edge-of-rails-20-scriptdbconsole-and-flashnow-now-test-able/"/>
    <id>https://chuyeow.wtf/2008/05/11/living-on-the-edge-of-rails-20-scriptdbconsole-and-flashnow-now-test-able/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/05/11/living-on-the-edge-of-rails-20-scriptdbconsole-and-flashnow-now-test-able/">&lt;p&gt;This week’s report covers changes from 5th May 2008 to 11th May 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;script&#x2F;dbconsole&lt;&#x2F;h3&gt;
&lt;p&gt;A &lt;code&gt;script&#x2F;dbconsole&lt;&#x2F;code&gt; script has been added that allows you to connect to your database using its console client.&lt;&#x2F;p&gt;
&lt;p&gt;If you needed to connect to your production MySQL database (you better know what you are doing!), for example, you can run &lt;code&gt;RAILS_ENV=production script&#x2F;dbconsole&lt;&#x2F;code&gt; or simply &lt;code&gt;script&#x2F;dbconsole production&lt;&#x2F;code&gt; (thanks to &lt;a href=&quot;http:&#x2F;&#x2F;railscasts.com&#x2F;&quot;&gt;Ryan Bates&lt;&#x2F;a&gt; for pointing this out!) and it will login to your database server using the command line MySQL client. This also works with the PostgreSQL and SQLite databases.&lt;&#x2F;p&gt;
&lt;p&gt;To use this script in your Rails app, remember to run &lt;code&gt;rake rails:update:scripts&lt;&#x2F;code&gt; after updating to edge Rails.&lt;&#x2F;p&gt;
&lt;p&gt;This nice little enhancement courtesy of &lt;a href=&quot;http:&#x2F;&#x2F;www.sanityinc.com&#x2F;&quot;&gt;Steve Purcell&lt;&#x2F;a&gt;, who originally had a similar &lt;a href=&quot;http:&#x2F;&#x2F;www.sanityinc.com&#x2F;articles&#x2F;rails-db-console&quot;&gt;database console plugin&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;4a07103687084496b773e18a03b1f2f5e686f7ad&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;4a07103687084496b773e18a03b1f2f5e686f7ad&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;flash.now is now accessible in tests&lt;&#x2F;h3&gt;
&lt;p&gt;This is something that &lt;a href=&quot;http:&#x2F;&#x2F;www.pluitsolutions.com&#x2F;2008&#x2F;01&#x2F;22&#x2F;testing-flashnow-in-rails&#x2F;&quot;&gt;many&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;rhnh.net&#x2F;2008&#x2F;04&#x2F;19&#x2F;testing-flash-now-with-rspec&quot;&gt;of us&lt;&#x2F;a&gt; Rails developers have probably come across when writing tests for flash messages being set with &lt;code&gt;flash.now&lt;&#x2F;code&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2006&#x2F;09&#x2F;03&#x2F;some-functional-testing-gotchas-in-ruby-on-rails&#x2F;&quot;&gt;myself included&lt;&#x2F;a&gt;. Basically, you couldn&#x27;t test the contents of your &lt;code&gt;flash.now&lt;&#x2F;code&gt; because they were always being emptied before your test could get to them.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# In your controller:
flash.now[:notice] = &#x27;You gotta be kidding me!&#x27;
&lt;h1 id=&quot;in-your-test&quot;&gt;In your test:&lt;&#x2F;h1&gt;
&lt;p&gt;assert_equal &#x27;You gotta be kidding me!&#x27;, flash.now[:notice]&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fails-because-flash-now-notice-is-nil&quot;&gt;FAILS because flash.now[:notice] is nil&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;zargony.com&#x2F;&quot;&gt;Andreas Neuhaus&lt;&#x2F;a&gt; took a good look at how it works and figured out how to make testing &lt;code&gt;flash.now&lt;&#x2F;code&gt; work without resorting to &lt;code&gt;assert_select&lt;&#x2F;code&gt;s.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;code&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;74eed6290e63111d1aad2b181692a84f4f040aea&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There isn&#x27;t much else of note so far but if you&#x27;d like to know every gritty detail, you&#x27;d probably want to peruse the &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commits&#x2F;master&quot;&gt;Rails commit logs&lt;&#x2F;a&gt;. As always, let me know of any suggestions or how I can improve the Living on the Edge (of Rails) series.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #19 - change_table for migrations and more</title>
    <published>2008-05-04T20:18:54+00:00</published>
    <updated>2008-05-04T20:18:54+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/05/04/living-on-the-edge-of-rails-19-change_table-for-migrations-and-more/"/>
    <id>https://chuyeow.wtf/2008/05/04/living-on-the-edge-of-rails-19-change_table-for-migrations-and-more/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/05/04/living-on-the-edge-of-rails-19-change_table-for-migrations-and-more/">&lt;p&gt;This week’s report covers changes from 29 April 2008 to 4th May 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;change_table for ActiveRecord migrations&lt;&#x2F;h3&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;zilkey.com&#x2F;&quot;&gt;Jeff Dean&lt;&#x2F;a&gt;, who also &lt;a href=&quot;http:&#x2F;&#x2F;zilkey.com&#x2F;2008&#x2F;4&#x2F;29&#x2F;new-rails-core-feature-proposal-super-sexy-migrations&quot;&gt;blogged about the new change_table feature in ActiveRecord migrations&lt;&#x2F;a&gt;, you can now change a table with a block like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;change_table :videos do |t|
  t.add_timestamps
  t.add_belongs_to :goat
  t.add_string :name, :email, :limit =&amp;gt; 20
  t.remove_column :name, :email # takes multiple arguments
  t.rename :new_name
  t.string :new_string_column # executes against the renamed table name
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Some key things to note:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;add_XXX&lt;&#x2F;code&gt; would add a new column for you, e.g. &lt;code&gt;add_string&lt;&#x2F;code&gt; would add a new string field.&lt;&#x2F;li&gt;
&lt;li&gt;Of course, add_timestamps would add the magic &lt;code&gt;created_at&lt;&#x2F;code&gt; and &lt;code&gt;updated_at&lt;&#x2F;code&gt; datetime fields.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;remove_column&lt;&#x2F;code&gt; now takes multiple arguments.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;rename&lt;&#x2F;code&gt; would rename the table.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Very nice, DRY enhancement, props to &lt;a href=&quot;http:&#x2F;&#x2F;zilkey.com&#x2F;&quot;&gt;Jeff Dean&lt;&#x2F;a&gt; once again.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;96980bd561d79824b6cb6efbcbecdcbf8785d452&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;96980bd561d79824b6cb6efbcbecdcbf8785d452&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveRecord::Base.create takes a block like ActiveRecord::Base.new&lt;&#x2F;h3&gt;
&lt;p&gt;Yup now you can also &lt;code&gt;create&lt;&#x2F;code&gt; ActiveRecord objects with a block argument just like you could for &lt;code&gt;ActiveRecord::Base.new&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;@person = Person.create(params[:person]) do |p|
  p.name = &#x27;Konata Izumi&#x27;
  p.age = 17
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Credit goes to &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;11022-adam-meehan&quot;&gt;Adam Meehan&lt;&#x2F;a&gt; for this patch.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;dd120ede53eaf71dee76894998a81626b7a689fc&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;dd120ede53eaf71dee76894998a81626b7a689fc&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Bugfix: change_column should be able to use :null =&gt; true on a field that&lt;br &#x2F;&gt;
formerly had false&lt;&#x2F;h3&gt;
&lt;p&gt;You can now use &lt;code&gt;change_column&lt;&#x2F;code&gt; in your migrations to alter a column as nullable if it was previously &lt;code&gt;NOT NULL&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This bugfix is courtesy of Nate Wiger.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;10ef65a3b054270ed3d458ec8eb7c2b9a3e638f7&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;10ef65a3b054270ed3d458ec8eb7c2b9a3e638f7&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As always, let me know of any suggestions or how I can improve the Living on the Edge (of Rails) series.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Announcing Wego.com - our travel meta-search engine in beta (Ruby included)</title>
    <published>2008-05-01T13:33:26+00:00</published>
    <updated>2008-05-01T13:33:26+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/05/01/announcing-wegocom-our-travel-meta-search-engine-in-beta-ruby-included/"/>
    <id>https://chuyeow.wtf/2008/05/01/announcing-wegocom-our-travel-meta-search-engine-in-beta-ruby-included/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/05/01/announcing-wegocom-our-travel-meta-search-engine-in-beta-ruby-included/">&lt;p&gt;So we&#x27;ve been terribly busy at &lt;a href=&quot;http:&#x2F;&#x2F;bezurk.com&#x2F;&quot;&gt;Bezurk&lt;&#x2F;a&gt; these last 2 months or so working on our new re-branded site with a bunch of new features. We were lucky enough to secure a 4-letter domain name - &lt;a href=&quot;http:&#x2F;&#x2F;www.wego.com&#x2F;&quot;&gt;wego.com&lt;&#x2F;a&gt; (and it came at a price too!) so it was all worth it. Trust me, with a name like Bezurk you&#x27;re going to be terribly hard to remember and to brand. We&#x27;ve had partners and friends who spell Bezurk in a variety of ways: berserk, bezerk, buzerk. Don&#x27;t even ask us about our encounters with non-native English speakers. Don&#x27;t.&lt;&#x2F;p&gt;
&lt;p&gt;So yes, the new site: &lt;a href=&quot;http:&#x2F;&#x2F;www.wego.com&#x2F;&quot;&gt;http:&#x2F;&#x2F;www.wego.com&#x2F;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;wg_logo_beta.gif&quot; alt=&quot;Wego.com logo&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve decided to push it &quot;live&quot; as a beta product (and we know it is very much in beta, we&#x27;re not kidding or trying to be Web 2.0-ish) prior to our launch party next week. Give it a few hits or so and let me know of any feedback (leaving a comment here is good), &lt;em&gt;especially&lt;&#x2F;em&gt; what &lt;em&gt;annoys&lt;&#x2F;em&gt; you. You might even want to use it to search for &lt;a href=&quot;http:&#x2F;&#x2F;www.wego.com&#x2F;flights&#x2F;&quot;&gt;airline tickets&lt;&#x2F;a&gt; or to &lt;a href=&quot;http:&#x2F;&#x2F;www.wego.com&#x2F;hotels&#x2F;&quot;&gt;book hotel rooms&lt;&#x2F;a&gt; for your next trip and &lt;a href=&quot;http:&#x2F;&#x2F;www.wego.com&#x2F;feedback&#x2F;&quot;&gt;let us know&lt;&#x2F;a&gt; if we managed to somehow &lt;em&gt;epic fail&lt;&#x2F;em&gt; at the task. If you liked it or booked a trip somewhere, we&#x27;re glad to have helped you on your way.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d write more about wego.com but what I really wanted to focus on, being a Rubyist and all, is what is really cool to &lt;em&gt;me&lt;&#x2F;em&gt; about wego.com - we&#x27;ve rebuilt our &lt;a href=&quot;http:&#x2F;&#x2F;www.wego.com&#x2F;hotels&#x2F;&quot;&gt;Hotels product&lt;&#x2F;a&gt; from the ground up (it was a mostly Java before, and it is still live on &lt;a href=&quot;http:&#x2F;&#x2F;bezurk.com&#x2F;hotels&#x2F;&quot;&gt;http:&#x2F;&#x2F;bezurk.com&#x2F;hotels&#x2F;&lt;&#x2F;a&gt;) in 85% Ruby, 8% JavaScript, 5% Erlang, and 2% Java. Well, those are rough figures anyway. We also made a strong effort to keep our mostly AJAX application as usable as possible &lt;em&gt;without&lt;&#x2F;em&gt; JavaScript but I&#x27;ll admit, we had to cut some corners due to deadlines.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d love to be more specific about the design and architecture of our Hotels application and on the cool stuff (CouchDB, Rack, Solr, jQuery, libmemcached, and of course, Ruby) we&#x27;ve used that have made our lives as developers &lt;em&gt;much easier&lt;&#x2F;em&gt; than when we were in Javaland - but I&#x27;d leave that for a later post. I&#x27;m sure my friend &lt;a href=&quot;http:&#x2F;&#x2F;arunthampi.wordpress.com&#x2F;&quot;&gt;Arun Thampi&lt;&#x2F;a&gt; also has a war story to tell so we&#x27;ll come up with something entertaining. Stay tuned!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the Edge (of Rails) in French</title>
    <published>2008-05-01T00:07:34+00:00</published>
    <updated>2008-05-01T00:07:34+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/05/01/living-on-the-edge-of-rails-in-french/"/>
    <id>https://chuyeow.wtf/2008/05/01/living-on-the-edge-of-rails-in-french/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/05/01/living-on-the-edge-of-rails-in-french/">&lt;p&gt;It looks like &lt;a href=&quot;http:&#x2F;&#x2F;blog.shingara.fr&#x2F;&quot;&gt;Cyril Mougel&lt;&#x2F;a&gt; has translated my 2 latest posts to French: &lt;a href=&quot;http:&#x2F;&#x2F;blog.shingara.fr&#x2F;articles&#x2F;2008&#x2F;04&#x2F;24&#x2F;vivre-avec-rails-edge-17&quot;&gt;LotE #17&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;blog.shingara.fr&#x2F;articles&#x2F;2008&#x2F;04&#x2F;29&#x2F;vivre-avec-rails-edge-18&quot;&gt;#18&lt;&#x2F;a&gt;. Thanks Cyril!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #18</title>
    <published>2008-04-27T19:18:36+00:00</published>
    <updated>2008-04-27T19:18:36+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/04/27/living-on-the-edge-of-rails-18/"/>
    <id>https://chuyeow.wtf/2008/04/27/living-on-the-edge-of-rails-18/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/04/27/living-on-the-edge-of-rails-18/">&lt;p&gt;This week’s report covers changes from 21 Apr 2008 to 27 Apr 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;p&gt;Not much interesting to report this week - there were mostly a bunch of bugfixes and Ruby 1.8.7-compatibility &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commits&#x2F;master&quot;&gt;commits&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;Introduce ActiveResource::Base.timeout and rescuing from Timeout::Error in ActiveResource::Connection&lt;&#x2F;h3&gt;
&lt;p&gt;These are &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;105910429d5873dce677ef32eef5f705e0625d86&quot;&gt;2&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;cf32baf915442ffe153ec0e4d8148f147776c30a&quot;&gt;changes&lt;&#x2F;a&gt; that I&#x27;d &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2008&#x2F;04&#x2F;22&#x2F;new-in-rails-activeresource-timeouts-and-why-it-matters&#x2F;&quot;&gt;talked about&lt;&#x2F;a&gt; earlier this week so I won&#x27;t repeat myself - take a read through &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2008&#x2F;04&#x2F;22&#x2F;new-in-rails-activeresource-timeouts-and-why-it-matters&#x2F;&quot;&gt;ActiveResource timeouts and why it matters&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;Smart integer datatype for the MySQL adapter in migrations&lt;&#x2F;h3&gt;
&lt;p&gt;The MySQL adapter in Rails now maps the &lt;code&gt;integer&lt;&#x2F;code&gt; column type in your migrations to either smallint, int, or bigint depending on the :limit option.&lt;&#x2F;p&gt;
&lt;p&gt;This means that a migration like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def self.up
  create_table :searches do |t|
    t.integer :foo, :limit =&gt; 2
  end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;will create your &lt;code&gt;foo&lt;&#x2F;code&gt; column as a &lt;code&gt;smallint(2)&lt;&#x2F;code&gt; MySQL datatype (instead of &lt;code&gt;int(2)&lt;&#x2F;code&gt; before). (More information &lt;a href=&quot;http:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;5.0&#x2F;en&#x2F;numeric-types.html&quot;&gt;MySQL numeric datatypes&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
&lt;p&gt;Credit goes to DHH for this patch.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;a37546517dad9f6d9a7de6e1dba4d960909d71e8&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;a37546517dad9f6d9a7de6e1dba4d960909d71e8&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As always, let me know of any suggestions or how I can improve the Living on the Edge (of Rails) series.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New in Rails: ActiveResource timeouts and why it matters</title>
    <published>2008-04-22T22:25:57+00:00</published>
    <updated>2008-04-22T22:25:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/04/22/new-in-rails-activeresource-timeouts-and-why-it-matters/"/>
    <id>https://chuyeow.wtf/2008/04/22/new-in-rails-activeresource-timeouts-and-why-it-matters/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/04/22/new-in-rails-activeresource-timeouts-and-why-it-matters/">&lt;p&gt;If you&#x27;ve ever used ActiveResource or for that matter, coded anything that involves interacting with a remote API, you&#x27;ve probably had the misfortune of having that API go down or become unresponsive. The experienced old geezers would already have forseen the problem and set a timeout on those API calls. For the rest of us, it&#x27;s a good time to get acquainted with the idea of &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Fail-fast&quot;&gt;fail-fast&lt;&#x2F;a&gt; and how &lt;em&gt;no response is better than a slow response&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;So what happens when the API you&#x27;re accessing via ActiveResource or &lt;code&gt;Net::HTTP&lt;&#x2F;code&gt; (or whatever, really, so long as there&#x27;s a network socket involved!) becomes unresponsive?&lt;&#x2F;p&gt;
&lt;h3&gt;Unfettered outbound remote connections can kill your server&lt;&#x2F;h3&gt;
&lt;p&gt;ActiveResource (or &lt;code&gt;Net::HTTP&lt;&#x2F;code&gt; or whatever you&#x27;re using) would block while waiting for the API to return. What did we learn about blocking IO in Operating Systems 101? That your process or thread gets stuck waiting for a response that&#x27;s what. So now your Mongrel&#x2F;Thin&#x2F;Ebb&#x2F;X web server process basically stuck waiting for a response from an API that might return a response in 30 seconds, or maybe it&#x27;ll never return at all. It won&#x27;t be long before all your web server processes get blocked and its time to &quot;kill dash nine&quot; (&lt;code&gt;kill -9&lt;&#x2F;code&gt;) some processes and bring out the 500 error page. Yes, your server has been incapacitated and your website is now basically offline.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;im-in-ur-serverz.gif&quot; alt=&quot;im in ur serverz making thingz better&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Timeouts and you&lt;&#x2F;h3&gt;
&lt;p&gt;If you&#x27;re using Net::HTTP you can easily safeguard yourself against errors like this by setting a timeout on the socket connection. Like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def fetch_something_from_some_api(uri)
  http = Net::HTTP.new(uri.host, uri.port)
  http.read_timeout = timeout
&lt;p&gt;response = http.start { http.request(Net::HTTP::Get.new(&quot;#{uri.path}?#{uri.query}&quot;)) }
response.is_a?(Net::HTTPSuccess) ? do_something_with(response.body) : nil
rescue Timeout::Error
logger.warn(&quot;Timeout accessing #{uri}: #{$!}&quot;)
nil
rescue
logger.warn(&quot;Error accessing #{uri}: #{$!}&quot;)
nil
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Take note that you really do need to explicitly rescue from the &lt;code&gt;Timeout::Error&lt;&#x2F;code&gt; (or &lt;code&gt;Interrupt&lt;&#x2F;code&gt;) since it&#x27;s a child of the &lt;code&gt;Interrupt&lt;&#x2F;code&gt; class and not a &lt;code&gt;StandardError&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Any good client library should also allow you to specify a timeout on the socket connection so read the API documentation.&lt;&#x2F;p&gt;
&lt;h3&gt;So what&#x27;s this about ActiveResource?&lt;&#x2F;h3&gt;
&lt;p&gt;So back to ActiveResource: Michael Koziarski was kind enough to commit my 2 patches (&lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;105910429d5873dce677ef32eef5f705e0625d86&quot;&gt;this&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;cf32baf915442ffe153ec0e4d8148f147776c30a&quot;&gt;this&lt;&#x2F;a&gt;) to ActiveResource so now on &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;tree&#x2F;master&quot;&gt;edge Rails&lt;&#x2F;a&gt;, you can do this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class Person &amp;lt; ActiveResource::Base
  self.site = &#x27;http:&#x2F;&#x2F;api.people.com:3000&#x2F;&#x27;
  self.timeout = 5
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This sets the timeout to 5 seconds on the underlying &lt;code&gt;Net::HTTP&lt;&#x2F;code&gt; instance that ActiveResource uses. The default timeout (to be exact, the &lt;code&gt;read_timeout&lt;&#x2F;code&gt;) for &lt;code&gt;Net::HTTP&lt;&#x2F;code&gt; is &lt;strong&gt;60 seconds&lt;&#x2F;strong&gt; on most Ruby implementations (that includes MRI). That&#x27;s far too long if your ActiveResource call is in a public-facing controller!&lt;&#x2F;p&gt;
&lt;p&gt;If you are using ActiveResource anywhere and haven&#x27;t safeguarded your application with a timeout, I think it&#x27;s a good idea to fix it by using edge Rails or at least applying the &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;105910429d5873dce677ef32eef5f705e0625d86&quot;&gt;patch&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;cf32baf915442ffe153ec0e4d8148f147776c30a&quot;&gt;2nd ActiveResource patch&lt;&#x2F;a&gt; introduces the &lt;code&gt;ActiveResource::TimeoutError&lt;&#x2F;code&gt; exception that you should rescue from whenever you make an ActiveResource call. When this happens, it&#x27;s up to your application to decide what to do (like show a placating we&#x27;re sorry message). At least your application is still able to do something!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #17</title>
    <published>2008-04-20T19:21:22+00:00</published>
    <updated>2008-04-20T19:21:22+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/04/20/living-on-the-edge-of-rails-17/"/>
    <id>https://chuyeow.wtf/2008/04/20/living-on-the-edge-of-rails-17/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/04/20/living-on-the-edge-of-rails-17/">&lt;p&gt;Not much going on this week on edge Rails. It does seem however that we do have a new Rails core member, &lt;a href=&quot;http:&#x2F;&#x2F;joshpeek.com&#x2F;&quot;&gt;Joshua Peek&lt;&#x2F;a&gt;. Also, the new &lt;a href=&quot;http:&#x2F;&#x2F;rails.lighthouseapp.com&#x2F;&quot;&gt;Rails&#x27; bug tracker&lt;&#x2F;a&gt; hosted on Lighthouse is ready for use, so be sure to submit your patches and bug reports there.&lt;&#x2F;p&gt;
&lt;p&gt;This week’s report covers changes from 14 Apr 2008 to 20 Apr 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;Conditional caches_page&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;code&gt;caches_page&lt;&#x2F;code&gt; now takes an &lt;code&gt;:if&lt;&#x2F;code&gt; option for specifying when a page can actually be cached via a Proc. You can now do this, for example:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;caches_page :index, :if =&amp;gt; Proc.new { |c| !c.request.format.json? }&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That will only cache your index page if the requested format is not JSON.&lt;&#x2F;p&gt;
&lt;p&gt;Credit goes to &lt;a href=&quot;http:&#x2F;&#x2F;deaddeadgood.com&#x2F;&quot;&gt;Paul Horsfall&lt;&#x2F;a&gt; for this enhancement.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;14a40804a29a57ad05ca6bffbe1e5334089593a9&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;14a40804a29a57ad05ca6bffbe1e5334089593a9&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;New ActionView::TestCase for testing view helpers&lt;&#x2F;h3&gt;
&lt;p&gt;Remember how you can now use &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;27&#x2F;dry-in-your-functional-and-actionmailer-tests-rails-20-a-feature-a-day-7&#x2F;&quot;&gt;specialized TestCase classes for testing controllers and ActionMailer classes&lt;&#x2F;a&gt;? Now you can do the same with your Rails view helpers with the new ActionView::TestCase class.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a quick example:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;module PeopleHelper
  def title(text)
    content_tag(:h1, text)
  end
&lt;p&gt;def homepage_path
people_path
end
end&lt;&#x2F;p&gt;
&lt;p&gt;class PeopleHelperTest &amp;lt; ActionView::TestCase
def setup
ActionController::Routing::Routes.draw do |map|
map.people &#x27;people&#x27;, :controller =&amp;gt; &#x27;people&#x27;, :action =&amp;gt; &#x27;index&#x27;
map.connect &#x27;:controller&#x2F;:action&#x2F;:id&#x27;
end
end&lt;&#x2F;p&gt;
&lt;p&gt;def test_title
assert_equal &quot;&amp;lt;h1&amp;gt;Ruby on Rails&amp;lt;&#x2F;h1&amp;gt;&quot;, title(&quot;Ruby on Rails&quot;)
end&lt;&#x2F;p&gt;
&lt;p&gt;def test_homepage_path
assert_equal &quot;&#x2F;people&quot;, homepage_path
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Credit goes to Josh Peek for this sweet little enhancement.&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveSupport::Cache&#x27;s mem_cache_store accepts options&lt;&#x2F;h3&gt;
&lt;p&gt;Even though Memcache-client was added to ActiveSupport recently, it didn&#x27;t allow you to specify any configuration options beyond just the IP of the memcached server. Now you can pass along more configuration options like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;config.action_controller.fragment_cache_store = :mem_cache_store, &#x27;localhost&#x27;, { :compression =&amp;gt; true, :debug =&amp;gt; true, :namespace =&amp;gt; &#x27;foo&#x27; }&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This patch is courtesy of &lt;a href=&quot;http:&#x2F;&#x2F;blog.innerewut.de&#x2F;&quot;&gt;Jonathan Weiss&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;9e1d506a8cfedef2fdd605e4cbf4bf53651ad214&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;9e1d506a8cfedef2fdd605e4cbf4bf53651ad214&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As always, let me know of any suggestions or how I can improve the Living on the Edge (of Rails) series.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Command history meme</title>
    <published>2008-04-18T18:09:49+00:00</published>
    <updated>2008-04-18T18:09:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/04/18/command-history-meme/"/>
    <id>https://chuyeow.wtf/2008/04/18/command-history-meme/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/04/18/command-history-meme/">&lt;p&gt;See &lt;a href=&quot;http:&#x2F;&#x2F;diveintomark.org&#x2F;archives&#x2F;2008&#x2F;04&#x2F;15&#x2F;history-meme&quot;&gt;this&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;history | awk &#x27;{a[$2]++}END{for(i in a){print a[i] &quot; &quot; i}}&#x27; | sort -rn | head&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;4605 cd
3576 svn
2141 ls
1701 ruby
1308 cap2
1066 ss
978 rake
867 sshb
688 rm
635 mate&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;cap2&lt;&#x2F;code&gt; is just my alias for Capistrano 2 (I use both 1.x and 2.x, since I&#x27;m lazy to upgrade some old Rails applications, &lt;code&gt;ss&lt;&#x2F;code&gt; is my alias for &lt;code&gt;script&#x2F;server&lt;&#x2F;code&gt;. &lt;code&gt;sshb&lt;&#x2F;code&gt; is a shortcut for ssh with a certain port number for SSH daemons (i.e. &lt;code&gt;-p 22&lt;&#x2F;code&gt;) that we use in &lt;a href=&quot;http:&#x2F;&#x2F;www.bezurk.com&#x2F;&quot;&gt;Bezurk&lt;&#x2F;a&gt; (you know, security through obscurity).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #16 - Github edition</title>
    <published>2008-04-13T16:09:43+00:00</published>
    <updated>2008-04-13T16:09:43+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/04/13/living-on-the-edge-of-rails-16-github-edition/"/>
    <id>https://chuyeow.wtf/2008/04/13/living-on-the-edge-of-rails-16-github-edition/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/04/13/living-on-the-edge-of-rails-16-github-edition/">&lt;p&gt;A slight change this week since &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.org&#x2F;2008&#x2F;4&#x2F;11&#x2F;rails-premieres-on-github&quot;&gt;Rails has moved to Git&lt;&#x2F;a&gt; - all changesets are now referenced to &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;tree&#x2F;master&quot;&gt;Github&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This week’s report covers changes from 7 Apr 2008 to 13 Apr 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;A helpers proxy method for accessing helper methods from outside of views&lt;&#x2F;h3&gt;
&lt;p&gt;A &lt;code&gt;helpers&lt;&#x2F;code&gt; method has been introduced to ActionController - you can now access your helpers like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;ApplicationController.helpers.simple_format(text)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Credit goes to 19 year old &lt;a href=&quot;http:&#x2F;&#x2F;joshpeek.com&#x2F;&quot;&gt;Josh Peek&lt;&#x2F;a&gt;, one of the more prolific Rails contributors (and most likely to join Pratik in Rails Core imo).&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;917423d664038d6791738a73ad1446437dbb71df&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;917423d664038d6791738a73ad1446437dbb71df&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;json_escape for escaping HTML entities in JSON strings&lt;&#x2F;h3&gt;
&lt;p&gt;A &lt;code&gt;json_escape&lt;&#x2F;code&gt; (aliased as &lt;code&gt;j&lt;&#x2F;code&gt;, similar to how &lt;code&gt;html_escape&lt;&#x2F;code&gt; is aliased as &lt;code&gt;h&lt;&#x2F;code&gt;) has been introduced by Rick Olson for escaping HTML entities in JSON strings. This is useful if you find yourself emitting JSON strings in HTML pages (e.g. for documenting a JSON API):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;json_escape(&quot;is a &amp;gt; 0 &amp;amp; a &amp;lt; 10?&quot;)
# =&gt; is a \u003E 0 \u0026 a \u003C 10?&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Of course, since &lt;code&gt;json_escape&lt;&#x2F;code&gt; is aliased as &lt;code&gt;j&lt;&#x2F;code&gt;, you can do this in your ERB templates:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&lt;%=j @person.to_json %&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;0ff7a2d89fc95dcb0a32ed92aab7156b0778a7ea&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;0ff7a2d89fc95dcb0a32ed92aab7156b0778a7ea&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Automatically parse posted JSON content for Mime::JSON requests&lt;&#x2F;h3&gt;
&lt;p&gt;Rails will now accept POSTed JSON content! For example, you can now send a POST to &quot;&#x2F;posts&quot; of your Post resource like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;POST &#x2F;posts
{&quot;post&quot;: {&quot;title&quot;: &quot;Breaking News&quot;}}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And your &lt;code&gt;create&lt;&#x2F;code&gt; action will automatically parse the POSTed JSON into the request &lt;code&gt;params&lt;&#x2F;code&gt; so that this code below just works:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def create
  @post = Post.create params[:post]
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Credit goes to Rick Olson.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;4d594cffcfc93b37fad4e423ec8593299e50133c&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;4d594cffcfc93b37fad4e423ec8593299e50133c&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;schema_migrations table replaces the schema_info table, allowing for interleaved migrations&lt;&#x2F;h3&gt;
&lt;p&gt;A new schema_migrations table for storing which migrations have been run has been introduced, and this replaces the existing schema_info table (which simply keeps track of the last applied schema version). This change makes it possible to add migrations (for example, after you&#x27;ve merged from someone&#x27;s branch) - when you migrate your database via rake db:migrate, those never-applied &quot;interleaved&quot; migrations will be run. Similarly, when migrating down schema versions, never-applied &quot;interleaved&quot; will be skipped.&lt;&#x2F;p&gt;
&lt;p&gt;See &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;11493&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;11493&lt;&#x2F;a&gt; for more information.&lt;&#x2F;p&gt;
&lt;p&gt;This useful patch is the brainchild of &lt;a href=&quot;http:&#x2F;&#x2F;bunster.org&#x2F;&quot;&gt;Jordi Bunster&lt;&#x2F;a&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;12130-jordi-bunster&quot;&gt;WWR profile&lt;&#x2F;a&gt;). I&#x27;m sure many Rails developers who branch extensively will thank Jordi for this excellent patch!&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;8a5a9dcbf64843f064b6e8a0b9c6eea8f0b8536e&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;8a5a9dcbf64843f064b6e8a0b9c6eea8f0b8536e&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;gems:unpack:dependencies Rake task&lt;&#x2F;h3&gt;
&lt;p&gt;Remember how you can now run the &lt;code&gt;gems:unpack&lt;&#x2F;code&gt; Rake task to unpack a gem into your &lt;code&gt;vendor&#x2F;gems&#x2F;&lt;&#x2F;code&gt; directory (this was &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2008&#x2F;04&#x2F;05&#x2F;living-on-the-edge-of-rails-14-the-extreme-edition-extremely-late&#x2F;&quot;&gt;mentioned in an earlier Living on the Edge&lt;&#x2F;a&gt;)?&lt;&#x2F;p&gt;
&lt;p&gt;David Dollar (&lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;ddollar&quot;&gt;Github profile&lt;&#x2F;a&gt;) has firmed up that patch quite a bit by adding the &lt;code&gt;gems:unpack:dependencies&lt;&#x2F;code&gt; Rake task that unpacks the dependencies of the gems as well. So running:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;gems:unpack:dependencies GEM=activecouch&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;would unpack the full Rubygem dependency tree of gems that the &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;activecouch&#x2F;&quot;&gt;activecouch&lt;&#x2F;a&gt; gem depends upon.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;4364c361b599f99bc2345ce4eb2d145b07ed8a0f&quot;&gt;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;commit&#x2F;4364c361b599f99bc2345ce4eb2d145b07ed8a0f&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As always, let me know of any suggestions or how I can improve the Living on the Edge (of Rails) series! Now go out there and start &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;tree&#x2F;master&quot;&gt;forking Rails&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #15 - the early edition</title>
    <published>2008-04-06T15:57:01+00:00</published>
    <updated>2008-04-06T15:57:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/04/06/living-on-the-edge-of-rails-15-the-early-edition/"/>
    <id>https://chuyeow.wtf/2008/04/06/living-on-the-edge-of-rails-15-the-early-edition/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/04/06/living-on-the-edge-of-rails-15-the-early-edition/">&lt;p&gt;I&#x27;m gonna post up the Living on the Edge a little earlier this week because I&#x27;ve found I just can&#x27;t keep up (when things get busy) with 2 separate sets of notes for the &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; and another for my own blog posts.&lt;&#x2F;p&gt;
&lt;p&gt;From this week onwards, I&#x27;ll be following &lt;a href=&quot;http:&#x2F;&#x2F;m.onkey.org&quot;&gt;Pratik&lt;&#x2F;a&gt;&#x27;s suggestion to post about changes as they happen instead of after an entire week so expect a slight change in the format of Living on the edge for next week!&lt;&#x2F;p&gt;
&lt;p&gt;This week’s report covers changes from 31 Mar 2008 to 6 Apr 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;Rails.env, Rails.logger, Rails.cache, Rails.root&lt;&#x2F;h3&gt;
&lt;p&gt;This has been a long time coming: You can now use &lt;code&gt;Rails.env&lt;&#x2F;code&gt; instead of &lt;code&gt;RAILS_ENV&lt;&#x2F;code&gt;, &lt;code&gt;Rails.root&lt;&#x2F;code&gt; instead of &lt;code&gt;RAILS_ROOT&lt;&#x2F;code&gt;, &lt;code&gt;Rails.logger&lt;&#x2F;code&gt; instead of &lt;code&gt;RAILS_DEFAULT_LOGGER&lt;&#x2F;code&gt;, and &lt;code&gt;Rails.cache&lt;&#x2F;code&gt; instead of &lt;code&gt;RAILS_CACHE&lt;&#x2F;code&gt;. Not having to use constants is nice because it always felt a bit dirty to have so many hard-coded constants in the Rails namespace.&lt;&#x2F;p&gt;
&lt;p&gt;Credit goes to &lt;a href=&quot;http:&#x2F;&#x2F;m.onkey.org&#x2F;&quot;&gt;Pratik Naik&lt;&#x2F;a&gt;, the newest Rails core team member for this cleanup.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9180&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9180&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Render :partial now works with a collection of heterogeneous elements&lt;&#x2F;h3&gt;
&lt;p&gt;You can now use &lt;code&gt;render :partial&lt;&#x2F;code&gt; to render a collection of different elements and Rails will figure out which partial template to use. For example:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;render :partial =&gt; [ monkey, donkey, dramatic_chipmunk ]&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;will render the monkey with the &#x27;monkeys&#x2F;_monkey.html.erb&#x27; partial, donkey with the &#x27;donkeys&#x2F;_donkey.html.erb&#x27; partial, and last but definitely not lest, dramatic_gopher with the &#x27;dramatic_chipmunks&#x2F;_dramatic_chipmunk.html.erb&#x27; partial&lt;&#x2F;p&gt;
&lt;p&gt;This is especially useful if when using &lt;acronym title=&quot;Single Table Inheritance&quot;&gt;STI&lt;&#x2F;acronym&gt;, where your ActiveRecord model would return objects of different types. The collection &lt;code&gt;[ monkey, donkey, dramatic_chipmunk ]&lt;&#x2F;code&gt; could very well be something returned from your &lt;code&gt;Animal&lt;&#x2F;code&gt; model that has subclasses of &lt;code&gt;Monkey&lt;&#x2F;code&gt;, &lt;code&gt;Donkey&lt;&#x2F;code&gt; and &lt;code&gt;DramaticChipmunk&lt;&#x2F;code&gt; via STI.&lt;&#x2F;p&gt;
&lt;p&gt;Credit: &lt;a href=&quot;http:&#x2F;&#x2F;www.continuousthinking.com&#x2F;&quot;&gt;Zach Dennis&lt;&#x2F;a&gt; of &lt;a href=&quot;http:&#x2F;&#x2F;www.continuousthinking.com&#x2F;tags&#x2F;arext&quot;&gt;ar-extensions&lt;&#x2F;a&gt; fame.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9177&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9177&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveModel work revived&lt;&#x2F;h3&gt;
&lt;p&gt;It seems like work on ActiveModel (think unified ActiveRecord and ActiveResource behaviors) has been revived, if the latest commits (&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9171&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9171&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9173&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9173&lt;&#x2F;a&gt;) by David (DHH) is anything to go by.&lt;&#x2F;p&gt;
&lt;h3&gt;Bugfix: Assigning an invalid has_one association now causes #save to fail on parent&lt;&#x2F;h3&gt;
&lt;p&gt;You could do this before:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;firm = Firm.find(:first)
firm.account = Account.new # Associate INVALID account
firm.save # This doesn&#x27;t fail&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now that&#x27;s fixed thanks to &lt;a href=&quot;http:&#x2F;&#x2F;m.onkey.org&#x2F;&quot;&gt;Pratik Naik&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9232&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9232&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As usual, any feedback is respectfully appreciated!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #14 - the extreme edition. Extremely late.</title>
    <published>2008-04-05T00:04:06+00:00</published>
    <updated>2008-04-05T00:04:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/04/05/living-on-the-edge-of-rails-14-the-extreme-edition-extremely-late/"/>
    <id>https://chuyeow.wtf/2008/04/05/living-on-the-edge-of-rails-14-the-extreme-edition-extremely-late/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/04/05/living-on-the-edge-of-rails-14-the-extreme-edition-extremely-late/">&lt;p&gt;This week’s report covers changes from 24 Mar 2008 to 30 Mar 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;re lots of big exciting changes this week on edge. Smells like 2.1 soon!&lt;&#x2F;p&gt;
&lt;h3&gt;has_finder gem merged into Rails&lt;&#x2F;h3&gt;
&lt;p&gt;Ryan Daigle has &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;articles&#x2F;2008&#x2F;3&#x2F;24&#x2F;what-s-new-in-edge-rails-has-finder-functionality&quot;&gt;the scoop on the new has_finder-like functionality in Rails&lt;&#x2F;a&gt; so head on over (I won&#x27;t repeat it here in the interests of &lt;acronym title=&quot;Don&#x27;t Repeat Yourself&quot;&gt;DRY&lt;&#x2F;acronym&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Credit goes to &lt;a href=&quot;http:&#x2F;&#x2F;pivots.pivotallabs.com&#x2F;users&#x2F;nick&#x2F;blog&#x2F;articles&#x2F;284-hasfinder-it-s-now-easier-than-ever-to-create-complex-re-usable-sql-queries&quot;&gt;Nick Kallen&lt;&#x2F;a&gt; for coming up with the has_finder gem.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9084&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9084&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveRecord: Unsaved attribute changes are now tracked&lt;&#x2F;h3&gt;
&lt;p&gt;You can now ask an ActiveRecord model whether its attributes have been changed (and is unsaved) using the &lt;code&gt;{attr_name}_changed?&lt;&#x2F;code&gt; (magic) method. The &lt;code&gt;{attr_name}_was&lt;&#x2F;code&gt; method will return the original value of the attribute, and the &lt;code&gt;{attr_name}_change&lt;&#x2F;code&gt; method will return an array with 2 members, the 1st being the original value, the 2nd being the changed (and unsaved) value.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# Change person&#x27;s name.
person.name = &#x27;Jason Seifer&#x27;
person.changed?       # =&gt; true
person.name_changed?  # =&gt; true
person.name_was       # =&gt; &#x27;jseifer&#x27;
person.name_change    # =&gt; [&#x27;jseifer&#x27;, &#x27;Jason Seifer&#x27;]
person.name = &#x27;Ceiling Cat&#x27;
person.name_change    # =&gt; [&#x27;jseifer&#x27;, &#x27;Ceiling Cat&#x27;]&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Credit goes to Rails core team member Jeremy Kemper (bitsweat) for this patch (which originated from Jeremy&#x27;s very own &lt;a href=&quot;http:&#x2F;&#x2F;code.bitsweat.net&#x2F;svn&#x2F;dirty&quot;&gt;Dirty plugin&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9127&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9127&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveRecord#Base.all&#x2F;first&#x2F;last&lt;&#x2F;h3&gt;
&lt;p&gt;Now you can do:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Post.all.each { |post| # something }
Post.first
Post.last&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Kinda like how some other ORMs do (like DataMapper).&lt;&#x2F;p&gt;
&lt;p&gt;Credit: &lt;a href=&quot;http:&#x2F;&#x2F;www.thechrisoshow.com&#x2F;&quot;&gt;thechrisoshow&lt;&#x2F;a&gt; and again, Nick Kallen for has_finder.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9085&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9085&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Timestamped Migrations&lt;&#x2F;h3&gt;
&lt;p&gt;This is more useful than it sounds: migrations are now timestamped instead of using incremental numbers in your db&#x2F;migrate folder. This eliminates the problem of migrations having the same version number when working on a multi-developer Rails app.&lt;&#x2F;p&gt;
&lt;p&gt;Two new Rake tasks, rake &lt;code&gt;db:migrate:up&#x2F;down&lt;&#x2F;code&gt;, have been added to allow running of the &lt;code&gt;up&lt;&#x2F;code&gt; and &lt;code&gt;down&lt;&#x2F;code&gt; methods of individual migrations.&lt;&#x2F;p&gt;
&lt;p&gt;Credit goes to John Barnette, the guy who gave you &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;articles&#x2F;2007&#x2F;10&#x2F;26&#x2F;what-s-new-in-edge-rails-fixtures-just-got-a-whole-lot-easier&quot;&gt;foxy fixtures&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset:&lt;a href=&quot; http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9122&quot;&gt; http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9122&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;New config.gem option for specifying which gems are required by the application + rake tasks for installing and freezing gems&lt;&#x2F;h3&gt;
&lt;p&gt;Specify which gems are required by your Rails app in your Rails &lt;code&gt;environment.rb&lt;&#x2F;code&gt;! &quot;Vendor everything&quot; supported right in Rails :). An example:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Rails::Initializer.run do |config| 
  config.gems &#x27;chronic&#x27;
  config.gems &quot;hpricot&quot;, :version =&gt; &#x27;0.6&#x27;, :source =&gt; &quot;http:&#x2F;&#x2F;code.whytheluckystiff.net&quot;
  config.gems &quot;aws-s3&quot;, :lib =&gt; &quot;aws&#x2F;s3&quot;
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There are also new Rake tasks:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# List required gems. 
rake gems 
&lt;h1 id=&quot;install-all-required-gems&quot;&gt;Install all required gems:&lt;&#x2F;h1&gt;
&lt;p&gt;rake gems:install&lt;&#x2F;p&gt;
&lt;h1 id=&quot;unpack-specified-gem-to-vendor-gems-gem-name-x-x-x&quot;&gt;Unpack specified gem to vendor&#x2F;gems&#x2F;gem_name-x.x.x&lt;&#x2F;h1&gt;
&lt;p&gt;rake gems:unpack GEM=chronic&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Credit goes to the prolific &lt;a href=&quot;http:&#x2F;&#x2F;techno-weenie.net&#x2F;&quot;&gt;Rick Olson&lt;&#x2F;a&gt; for this gem of a patch.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9140&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9140&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveResource #clone&lt;&#x2F;h3&gt;
&lt;p&gt;You can now clone an existing resource:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;gregg = Person.find(1)
borg = gregg.clone&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This doesn&#x27;t clone child ActiveResource members though, just the straight up attributes of resource.&lt;&#x2F;p&gt;
&lt;p&gt;Contribors: &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;&quot;&gt;Ryan Daigle&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.thechrisoshow.com&#x2F;&quot;&gt;thechrisoshow&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9121&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9121&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Big documentation patch&lt;&#x2F;h3&gt;
&lt;p&gt;A big doc patch consisting of all the efforts going on in the &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;lifo&#x2F;doc-rails&#x2F;&quot;&gt;doc-rails repository on Github&lt;&#x2F;a&gt; has been committed. Check out &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.com&#x2F;group&#x2F;rubyonrails-core&#x2F;browse_thread&#x2F;thread&#x2F;92f822141df3c217&#x2F;71e7460d41bdfd89&quot;&gt;Pratik&#x27;s post&lt;&#x2F;a&gt; for more info on what doc-rails is. Though with Rails moving to Git soon, doc-rails may no longer be necessary!&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9093&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9093&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Installing libmemcached and memcached gem on Ubuntu</title>
    <published>2008-03-31T12:20:54+00:00</published>
    <updated>2008-03-31T12:20:54+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/03/31/installing-libmemcached-and-memcached-gem-on-ubuntu/"/>
    <id>https://chuyeow.wtf/2008/03/31/installing-libmemcached-and-memcached-gem-on-ubuntu/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/03/31/installing-libmemcached-and-memcached-gem-on-ubuntu/">&lt;p&gt;Quick notes for installing &lt;a href=&quot;http:&#x2F;&#x2F;tangent.org&#x2F;552&#x2F;libmemcached.html&quot;&gt;libmemcached&lt;&#x2F;a&gt; and Evan Weaver&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;blog.evanweaver.com&#x2F;files&#x2F;doc&#x2F;fauna&#x2F;memcached&#x2F;files&#x2F;README.html&quot;&gt;memcached gem&lt;&#x2F;a&gt;, in case I forget (again):&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Get libmemcached source from &lt;a href=&quot;http:&#x2F;&#x2F;tangent.org&#x2F;552&#x2F;libmemcached.html&quot;&gt;http:&#x2F;&#x2F;tangent.org&#x2F;552&#x2F;libmemcached.html&lt;&#x2F;a&gt;. Configure, make, make install. Make sure you get a version compatible with the Ruby memcached gem by opening the COMPATIBILITY file in the memcached gem files.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;gem install memcached&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Create a symlink &lt;code&gt;ln -s &#x2F;usr&#x2F;local&#x2F;lib&#x2F;libmemcached.so.2 &#x2F;usr&#x2F;lib&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Try it out with &lt;code&gt;irb -rubygems&lt;&#x2F;code&gt;, &lt;code&gt;require &#x27;memcached&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #13 - Git script&#x2F;plugin install, has_one :through</title>
    <published>2008-03-27T23:46:34+00:00</published>
    <updated>2008-03-27T23:46:34+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/03/27/living-on-the-edge-of-rails-13-git-scriptplugin-install-has_one-through/"/>
    <id>https://chuyeow.wtf/2008/03/27/living-on-the-edge-of-rails-13-git-scriptplugin-install-has_one-through/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/03/27/living-on-the-edge-of-rails-13-git-scriptplugin-install-has_one-through/">&lt;p&gt;It&#x27;s time again for some edge Rails love. If you haven&#x27;t listened to it yet, be sure to check out &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;2008&#x2F;3&#x2F;26&#x2F;rails-envy-podcast-episode-024-03-26-2008&quot;&gt;this week&#x27;s Rails Envy podcast&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This week’s report covers changes from 17 Mar 2008 to 23 Mar 2008 (the day the &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;2008&#x2F;3&#x2F;26&#x2F;rails-envy-podcast-episode-024-03-26-2008&quot;&gt;corresponding Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;script&#x2F;plugin install works for Git repositories&lt;&#x2F;h3&gt;
&lt;p&gt;Yup you can now install plugins from &lt;a href=&quot;http:&#x2F;&#x2F;git.or.cz&#x2F;&quot;&gt;Git&lt;&#x2F;a&gt; repositories simply by running:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;script&#x2F;plugin install git:&#x2F;&#x2F;github.com&#x2F;foo&#x2F;kung_fu&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;What this really does is to clone a git repository (sans the entire git history by passing the &lt;code&gt;—depth 1&lt;&#x2F;code&gt; option) into your plugins directory. If you&#x27;re looking for a Piston-like way to manage external Git repositories though, you&#x27;d still be better off with the development version of &lt;a href=&quot;http:&#x2F;&#x2F;piston.rubyforge.org&#x2F;&quot;&gt;Piston&lt;&#x2F;a&gt; (François Beausoleil, is &lt;a href=&quot;http:&#x2F;&#x2F;blog.teksol.info&#x2F;tags&#x2F;piston&quot;&gt;posting frequently on his progress with adding Git support&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Credit goes to &lt;a href=&quot;http:&#x2F;&#x2F;6brand.com&#x2F;git-svn-externals-rails-plugins&quot;&gt;Jack Danger&lt;&#x2F;a&gt;, a long-time Rails contributor for this patch.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9049&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9049&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;has_one :through&lt;&#x2F;h3&gt;
&lt;p&gt;It&#x27;s been a long time coming - now you can do &lt;code&gt;has_one :through&lt;&#x2F;code&gt; (like &lt;code&gt;has_many :through&lt;&#x2F;code&gt;) for your join models. &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;&quot;&gt;Ryan Daigle&lt;&#x2F;a&gt; has &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;articles&#x2F;2008&#x2F;3&#x2F;24&#x2F;what-s-new-in-edge-rails-has-one-through&quot;&gt;example code&lt;&#x2F;a&gt; on how to use it if you&#x27;re curious (though really, it&#x27;s just like has_many).&lt;&#x2F;p&gt;
&lt;p&gt;Credit goes to the &lt;a href=&quot;http:&#x2F;&#x2F;artofmission.com&#x2F;&quot;&gt;Art of Mission&lt;&#x2F;a&gt; guys and &lt;a href=&quot;http:&#x2F;&#x2F;www.thechrisoshow.com&#x2F; http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;9008-chris-o-sullivan&quot;&gt;Chris O&#x27;Sullivan&lt;&#x2F;a&gt; for pulling it all together.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9067&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9067&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;rake tasks time:zones:all, time:zones:us and time:zones:local&lt;&#x2F;h3&gt;
&lt;p&gt;Some timezone-related rake tasks have been added to list the names of time zones recognized by the &lt;code&gt;TimeZone&lt;&#x2F;code&gt; class for the &lt;code&gt;config.time_zone&lt;&#x2F;code&gt; option you can put in your &lt;code&gt;environment.rb&lt;&#x2F;code&gt;. For example&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;rake time:zones:local&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;* UTC +08:00 *
Beijing
Chongqing
Hong Kong
Irkutsk
Kuala Lumpur
Perth
Singapore
Taipei
Ulaan Bataar
Urumqi&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Credit: Geoff Buesing (core team member)&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9074&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9074&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;#number_to_currency helper now supports a :format option&lt;&#x2F;h3&gt;
&lt;p&gt;Now you can do something like:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;number_to_currency(123.50, :unit =&gt; &quot;&amp;pound;&quot;, :format =&gt; &quot;%n %u&quot;) 
# =&gt; 123.50 &amp;pound;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Instead of being stuck with the &lt;code&gt;{currency_code} {amount}&lt;&#x2F;code&gt; format which doesn&#x27;t work in some locales (such as &quot;42 pounds&quot;).&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9052&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9052&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>One reason Firefox 3 is going to be awesome - Auto-completion in the Location Bar</title>
    <published>2008-03-22T22:55:59+00:00</published>
    <updated>2008-03-22T22:55:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/03/22/one-reason-firefox-3-is-going-to-be-awesome-auto-completion-in-the-location-bar/"/>
    <id>https://chuyeow.wtf/2008/03/22/one-reason-firefox-3-is-going-to-be-awesome-auto-completion-in-the-location-bar/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/03/22/one-reason-firefox-3-is-going-to-be-awesome-auto-completion-in-the-location-bar/">&lt;p&gt;After seriously giving &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.com&#x2F;en-US&#x2F;firefox&#x2F;3.0b4&#x2F;releasenotes&#x2F;&quot;&gt;Firefox 3 Beta 4&lt;&#x2F;a&gt; a try due to &lt;a href=&quot;http:&#x2F;&#x2F;discussions.apple.com&#x2F;thread.jspa?threadID=1447355&amp;tstart=0&quot;&gt;Safari 3.1 breaking the Shift key in Gmail&lt;&#x2F;a&gt; (&lt;strong&gt;update&lt;&#x2F;strong&gt;: as kindly pointed out by some of my readers in the &lt;a href=&quot;#comments&quot;&gt;comments&lt;&#x2F;a&gt;, it was Gmail that was broken, not Safari 3.1, doh), I&#x27;ve converted to using Firefox 3 Beta 4 as my primary browser. Before, I was using Firefox 2 as my main web browser, with a Safari window open for Gmail (because I tend to have around 50 tabs open in Firefox 2, and having Gmail among those tabs just &lt;em&gt;kills&lt;&#x2F;em&gt; Firefox 2&#x27;s performance). So yes, I was using Safari 3 as a &quot;Gmail browser&quot;, so to speak (in case you&#x27;d thought I&#x27;d defected from Firefox despite &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;books&#x2F;firefox1&#x2F;&quot;&gt;my history&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, enough with all that self-indulgent background - I&#x27;m writing this today to rave about how cool this one particular feature, auto-completion in the Location Bar (or the Address Bar, you know, where you type in URLs), in Firefox 3 is. Yes, you probably have already &lt;a href=&quot;http:&#x2F;&#x2F;mozillalinks.org&#x2F;wp&#x2F;2008&#x2F;03&#x2F;firefox-3-beta-4-review&#x2F;&quot;&gt;read&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;mozillalinks.org&#x2F;wp&#x2F;2007&#x2F;11&#x2F;firefox-3-location-bar-just-became-almighty&#x2F;&quot;&gt;about it&lt;&#x2F;a&gt; and all the other neat new features and changes in Firefox 3, but I&#x27;d love to single out this one because it was the one thing I noticed that made browsing &lt;em&gt;so much better&lt;&#x2F;em&gt; when switching from Firefox 2.&lt;&#x2F;p&gt;
&lt;p&gt;So what is it? First, a screenshot of it in action:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-3-location-autocomplete-opt.png&quot; alt=&quot;Firefox 3 autocompletion in the Location Bar&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Yup, typing into the Location Bar brings up a list of matched webpages from your browsing history. You can see from the screenshot that I entered &quot;javascript&quot; and it brought up not just URLs that started with &quot;javascript&quot; (which is the current Firefox 2 behavior), it also &lt;strong&gt;brought up URLs that contained &quot;javascript&quot; &lt;em&gt;anywhere&lt;&#x2F;em&gt; and even pages with titles containing &quot;javascript&quot;&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s the big deal? Well, one of the worst (&quot;worst&quot; being a relative adjective, relative to my opinion) things that can happen while looking for a page you once visited is forgetting its URL. If I&#x27;m lucky I can find it by bringing up the History sidebar in Firefox 2 and searching for it by some keyword or dredging through my browsing history.&lt;&#x2F;p&gt;
&lt;p&gt;In Firefox 3, I just need to type in some keywords related to the page and most likely it&#x27;d come up! Here&#x27;s how I start posting a new blog entry to this very blog:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-3-new-post.png&quot; alt=&quot;Firefox 3 search history by title in Location Bar&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;No need to type &quot;blog.c&quot; and then selecting the correct page from the dropdown while remembering that the new post page is &quot;post-new.php&quot;. &lt;strong&gt;Less typing, no need to remember URLs. Just page titles and website names.&lt;&#x2F;strong&gt; If that isn&#x27;t useful for you, &quot;you&#x27;re doing it wrong&quot;. What&#x27;s more, Firefox 3 uses &lt;em&gt;adaptive learning&lt;&#x2F;em&gt; to keep an eye of what you&#x27;ve typed and what you select. After some time Firefox will learn from your choices and provide better suggestions in the autocomplete list. Sweet.&lt;&#x2F;p&gt;
&lt;p&gt;If you haven&#x27;t tried out Firefox 3 yet, &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.com&#x2F;en-US&#x2F;firefox&#x2F;all-beta.html&quot;&gt;go grab the latest beta&lt;&#x2F;a&gt;. And then &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;08&#x2F;20&#x2F;how-to-have-firefox-3-and-firefox-2-running-at-the-same-time&#x2F;&quot;&gt;come back to this blog to get Firefox 2 and 3 running at the same time&lt;&#x2F;a&gt;. I&#x27;m quite sure you&#x27;ll thank me for it (because this is not the only great feature in Firefox).&lt;&#x2F;p&gt;
&lt;p&gt;Update: &lt;a href=&quot;http:&#x2F;&#x2F;philwilson.org&#x2F;blog&#x2F;&quot;&gt;Phil Wilson&lt;&#x2F;a&gt; pointed to this &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;2300&quot;&gt;extension for Firefox 2&lt;&#x2F;a&gt; that has the same auto-completion functionality.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #12</title>
    <published>2008-03-20T20:19:18+00:00</published>
    <updated>2008-03-20T20:19:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/03/20/living-on-the-edge-of-rails-12/"/>
    <id>https://chuyeow.wtf/2008/03/20/living-on-the-edge-of-rails-12/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/03/20/living-on-the-edge-of-rails-12/">&lt;p&gt;This week’s report covers changes from 10 Mar 2008 to 16 Mar 2008 (the day the &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;2008&#x2F;3&#x2F;19&#x2F;rails-envy-podcast-episode-023-03-19-2008&quot;&gt;corresponding Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;Custom JavaScript and stylesheet symbols&lt;&#x2F;h3&gt;
&lt;p&gt;Remember how you can do something like:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;javascript_include_tag :defaults&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;and Rails would load all the Prototype JavaScript files and your application.js?&lt;&#x2F;p&gt;
&lt;p&gt;You can now register your own custom expansion symbol too:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# In a Rails initializer.
ActionView::Helpers::AssetTagHelper.register_javascript_expansion :yui =&gt; [&#x27;yahoo&#x27;, &#x27;autocomplete&#x27;, &#x27;calendar&#x27;]
&lt;h1 id=&quot;in-your-view&quot;&gt;In your view.&lt;&#x2F;h1&gt;
&lt;p&gt;javascript_include_tag :yui&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;would result in:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;html&quot;&gt;&amp;lt;script type=&quot;text&#x2F;javascript&quot; src=&quot;&#x2F;javascripts&#x2F;yahoo.js&quot;&amp;gt;&amp;lt;&#x2F;script&amp;gt;
&amp;lt;script type=&quot;text&#x2F;javascript&quot; src=&quot;&#x2F;javascripts&#x2F;autocomplete.js&quot;&amp;gt;&amp;lt;&#x2F;script&amp;gt;
&amp;lt;script type=&quot;text&#x2F;javascript&quot; src=&quot;&#x2F;javascripts&#x2F;calendar.js&quot;&amp;gt;&amp;lt;&#x2F;script&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can do the same with the &lt;cpde&gt;stylesheet_link_tag&lt;&#x2F;cpde&gt; by registering a custom expansion symbol via &lt;code&gt;register_stylesheet_expansion&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This is useful for anyone but in particular plugin developers who have a multiple asset files would appreciate being able to tell users to include JavaScript or stylesheets using a single symbol.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Warning&lt;&#x2F;strong&gt;: This patch currently breaks the default symbols like &lt;code&gt;:all&lt;&#x2F;code&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;10350&quot;&gt;check out the ticket&lt;&#x2F;a&gt; for more info).&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9016&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9016&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Sexy default timestamps in migrations&lt;&#x2F;h3&gt;
&lt;p&gt;Remember how you can say &lt;code&gt;timestamps&lt;&#x2F;code&gt; in a migration and Rails will create the &#x27;created_at&#x27; and &#x27;updated_at&#x27; columns for you? You can now also do &lt;code&gt;add_timestamps :table_name&lt;&#x2F;code&gt; and &lt;code&gt;remove_timestamps :table_name&lt;&#x2F;code&gt; in your migrations if you decide to add these columns later to a table:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def self.up
  add_timestamps :posts
end
&lt;p&gt;def self.down
remove_timestamps :posts
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9014&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9014&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveRecord::Base#find(:last)&lt;&#x2F;h3&gt;
&lt;p&gt;Just like &lt;code&gt;Comment.find(:first)&lt;&#x2F;code&gt;, you can now do something like &lt;code&gt;Comment.find(:last)&lt;&#x2F;code&gt;. There&#x27;s some controversy over whether this is bloat, but &lt;acronym title=&quot;David Heinemeier Hansson&quot;&gt;DHH&lt;&#x2F;acronym&gt; makes a good case for it with this example:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class Person
  has_many :comments, :order =&amp;gt; &#x27;created_at&#x27;
end
&lt;p&gt;@some_person.comments.find(:last) # =&amp;gt; Returns the most recent comment.&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9012&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9012&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Database rake tasks fixes&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;rake db:create&lt;&#x2F;code&gt; used to ignore the &#x27;charset&#x27; and &#x27;collation&#x27; options in your database.yml configuration file. This has been fixed so that your created databases now respect those options.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;rake db:drop&lt;&#x2F;code&gt; and &lt;code&gt;rake db:migrate:reset&lt;&#x2F;code&gt; also no longer crash with an unhelpful exception if the database has already been dropped, and instead shows a proper error message.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9004&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9004&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Rails&#x27; logger now creates the log directory if it doesn&#x27;t exist&lt;&#x2F;h3&gt;
&lt;p&gt;This is a blessing to those of us who use version control systems that don&#x27;t support empty directories (like Git). Rails&#x27; default logger (the BufferedLogger), now creates a log&#x2F; directory if it doesn&#x27;t already exist. This should save you the step of creating&#x2F;symlinking a log&#x2F; directory (or symlinking) on deploy.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9013&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9013&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;String#squish is faster&lt;&#x2F;h3&gt;
&lt;p&gt;A faster implementation of the &lt;code&gt;String#squish&lt;&#x2F;code&gt; (and &lt;code&gt;String#squish!&lt;&#x2F;code&gt;) core extension has been committed.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9015&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9015&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;The #excerpt TextHelper no longer includes 1 character too many&lt;&#x2F;h3&gt;
&lt;p&gt;Turns out that the &lt;code&gt;#excerpt&lt;&#x2F;code&gt; helper method was consistently including an extra character. This has been fixed.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9030&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;9030&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As usual, let me know of any inaccuracies or any suggestions you may have in the comments!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>UTF8 encoding with Ruby Sequel (and MySQL)</title>
    <published>2008-03-15T23:12:17+00:00</published>
    <updated>2008-03-15T23:12:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/03/15/utf8-encoding-with-ruby-sequel-and-mysql/"/>
    <id>https://chuyeow.wtf/2008/03/15/utf8-encoding-with-ruby-sequel-and-mysql/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/03/15/utf8-encoding-with-ruby-sequel-and-mysql/">&lt;p&gt;Just a quick note to self. If you need to store Unicode and are using &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;ruby-sequel&#x2F;&quot;&gt;Sequel&lt;&#x2F;a&gt;, make sure you:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Create the database with a default charset of UTF8: &lt;code&gt;CREATE DATABASE my_db DEFAULT CHARSET utf8;&lt;&#x2F;code&gt;. I think then any tables you create uses the default charset of utf8 unless &lt;a href=&quot;http:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;5.0&#x2F;en&#x2F;create-table.html&quot;&gt;otherwise specified&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Pass an &lt;code&gt;:encoding&lt;&#x2F;code&gt; option to Sequel&#x27;s MySQL adapter:
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;DB = Sequel.mysql &#x27;my_db&#x27;, :user =&amp;gt; &#x27;root&#x27;, :password =&amp;gt; &#x27;&#x27;, :host =&amp;gt; &#x27;localhost&#x27;, :encoding =&amp;gt; &#x27;utf8&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;sequel.rubyforge.org&#x2F;files&#x2F;sequel&#x2F;README.html&quot;&gt;Sequel documentation&lt;&#x2F;a&gt; and wiki were quite unhelpful but &lt;a href=&quot;http:&#x2F;&#x2F;ruby-sequel.googlecode.com&#x2F;svn&#x2F;trunk&#x2F;sequel_core&#x2F;lib&#x2F;sequel_core&#x2F;adapters&#x2F;mysql.rb&quot;&gt;reading code&lt;&#x2F;a&gt; (see the &lt;code&gt;connect&lt;&#x2F;code&gt; method definition) always helps!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #11</title>
    <published>2008-03-12T19:39:17+00:00</published>
    <updated>2008-03-12T19:39:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/03/12/living-on-the-edge-of-rails-11/"/>
    <id>https://chuyeow.wtf/2008/03/12/living-on-the-edge-of-rails-11/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/03/12/living-on-the-edge-of-rails-11/">&lt;p&gt;This week’s report covers changes from 3 Mar 2008 to 9 Mar 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;Improve performance on :include&#x2F;:conditions&#x2F;:limit queries by selectively joining in the pre-query&lt;&#x2F;h3&gt;
&lt;p&gt;This is another ActiveRecord performance boost related to the pre-loading any eager-loaded &lt;code&gt;:includes&lt;&#x2F;code&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2008&#x2F;01&#x2F;30&#x2F;living-on-the-edge-of-rails-5-better-eager-loading-and-more&#x2F;&quot;&gt;mentioned previously&lt;&#x2F;a&gt;. Basically what this patch does is to only join referenced tables when needed. It does this by checking the &lt;code&gt;:conditions&lt;&#x2F;code&gt; and &lt;code&gt;:limit&lt;&#x2F;code&gt; options to determine whether a table should be joined or can be left out and pre-loaded instead. You can find out more in tickets &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9560&quot;&gt;#9560&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9497&quot;&gt;#9497&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Credit goes to &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;8164-gabe-da-silveira&quot;&gt; Gabe da Silveira&lt;&#x2F;a&gt; (dasil003 on Trac) for this awesome performance patch.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8977&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8977&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Better error message for type errors when parsing request parameters&lt;&#x2F;h3&gt;
&lt;p&gt;Now when you pass an incorrectly formed request (e.g. GET, POST) parameter to your controller, it will raise an exception that includes a friendlier error message that indicates exactly what you passed to it. This is helpful when trying to debug whether you constructed your form correctly.&lt;&#x2F;p&gt;
&lt;p&gt;Contributors: &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;5519-chad-humphries&quot;&gt;Chad Humphries&lt;&#x2F;a&gt; and matt.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8986&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8986&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Make MimeResponds::Responder#any work without explicit types.&lt;&#x2F;h3&gt;
&lt;p&gt;Here&#x27;s something I didn&#x27;t know: you can actually use &lt;code&gt;any&lt;&#x2F;code&gt; in your &lt;code&gt;respond_to&lt;&#x2F;code&gt; blocks as a catch-all response. E.g.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;respond_to do |format|
  format.html do
    redirect_to :action =&amp;gt; &#x27;login&#x27;
  end
  format.any(:js, :xml) do
    request_http_basic_authentication &#x27;Web Password&#x27;
  end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Contrary to its name, using &#x27;any&#x27; actually requires you to pass a list of types to respond to. This has been enhanced now so that if you don&#x27;t pass any arguments, it&#x27;ll function as a real catch-all.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;respond_to do |format|
  format.any do
    request_http_basic_authentication &#x27;Web Password&#x27;
  end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Credit goes to &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;3231-joshua-wehner&quot;&gt;Joshua Wehner&lt;&#x2F;a&gt; for this patch.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8987&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8987&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Add readonly option to has_many :through associations&lt;&#x2F;h3&gt;
&lt;p&gt;Turns out the &lt;code&gt;:readonly&lt;&#x2F;code&gt; option for associations &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2008&#x2F;02&#x2F;19&#x2F;living-on-the-edge-of-rails-8-the-code-optimization-edition&#x2F;&quot;&gt;mentioned earlier&lt;&#x2F;a&gt; was left out for &lt;code&gt;has_many :through&lt;&#x2F;code&gt; associations. This oversight has been fixed.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;9147-emilio-tagua&quot;&gt;Emilio Tagua&lt;&#x2F;a&gt; for this bugfix.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8989&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8989&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As usual, let me know of any inaccuracies or any suggestions you may have in the comments!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #10</title>
    <published>2008-03-05T20:01:32+00:00</published>
    <updated>2008-03-05T20:01:32+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/03/05/living-on-the-edge-of-rails-10/"/>
    <id>https://chuyeow.wtf/2008/03/05/living-on-the-edge-of-rails-10/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/03/05/living-on-the-edge-of-rails-10/">&lt;p&gt;Another awfully sleepy week on Rails edge. Though by the time I had sent over the notes to Gregg Pollack and Jason Seifer of the awesome &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt;, there has been some nice changes (that I&#x27;ll be mentioning next week, but there&#x27;s absolutely nothing stopping you from &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;timeline?changeset=on&quot;&gt;checking those out yourself&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;In other interesting news, &lt;a href=&quot;http:&#x2F;&#x2F;m.onkey.org&#x2F;&quot;&gt;Pratik Naik&lt;&#x2F;a&gt; (lifofifo), a long-time Rails contributor has been given commit rights to Rails. Congrats Pratik, well-deserved and it has been long overdue in my opinion! Pratik keeps an interesting blog at &lt;a href=&quot;http:&#x2F;&#x2F;m.onkey.org&#x2F;&quot;&gt;http:&#x2F;&#x2F;m.onkey.org&#x2F;&lt;&#x2F;a&gt; (where he&#x27;s not afraid to say &quot;fuck&quot; in his posts &lt;em&gt;and&lt;&#x2F;em&gt; his code) and hangs out an awful lot on &lt;a href=&quot;irc:&#x2F;&#x2F;irc.freenode.net&#x2F;rubyonrails&quot;&gt;#rubyonrails&lt;&#x2F;a&gt; and &lt;a href=&quot;irc:&#x2F;&#x2F;irc.freenode.net&#x2F;rails-contrib&quot;&gt;#rails-contrib&lt;&#x2F;a&gt; on IRC.&lt;&#x2F;p&gt;
&lt;p&gt;As a sidenote, &lt;a href=&quot;http:&#x2F;&#x2F;weblog.jamisbuck.org&#x2F;2008&#x2F;2&#x2F;28&#x2F;capistrano-2-2-0&quot;&gt;Capistrano 2.2.0 was released&lt;&#x2F;a&gt; by &lt;a href=&quot;http:&#x2F;&#x2F;weblog.jamisbuck.org&#x2F;&quot;&gt;Jamis&lt;&#x2F;a&gt; last week.&lt;&#x2F;p&gt;
&lt;p&gt;This week’s report covers changes from 25 Feb 2008 to 2 Mar 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;Time#end_of_XXX methods&lt;&#x2F;h3&gt;
&lt;p&gt;A bunch of Time core extension methods have been added. These are: &lt;code&gt;Time#end_of_day&lt;&#x2F;code&gt;, &lt;code&gt;Time#end_of_week&lt;&#x2F;code&gt;, &lt;code&gt;Time#end_of_year&lt;&#x2F;code&gt;, and &lt;code&gt;Time#end_of_quarter&lt;&#x2F;code&gt;, which all return exactly what you expect them to return:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Time.now.end_of_week # =&amp;gt; Sun Mar 09 00:00:00 0800 2008&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Credit goes to &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;5065-juanjo-baz-n&quot;&gt;Juanjo Bazán&lt;&#x2F;a&gt; (a former &lt;a href=&quot;http:&#x2F;&#x2F;weblog.workingwithrails.com&#x2F;2007&#x2F;10&#x2F;22&#x2F;hackfest-winner-interview-juanjo-bazn&quot;&gt;Rails Hackfest winner&lt;&#x2F;a&gt;) and &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;7168-tarmo-t-nav&quot;&gt;Tarmo Tänav&lt;&#x2F;a&gt; for contributing this patch.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8934&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8934&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Date helpers now accept HTML options&lt;&#x2F;h3&gt;
&lt;p&gt;ActionView&#x27;s date helpers (such as &lt;code&gt;date_select&lt;&#x2F;code&gt;, &lt;code&gt;time_select&lt;&#x2F;code&gt;, &lt;code&gt;select_datetime&lt;&#x2F;code&gt;) did not support any HTML options, unlike the other helpers (like &lt;code&gt;f.text_field(:name, :class =&gt; &#x27;my_css_class&#x27;, :size =&gt; 20)&lt;&#x2F;code&gt;). This inconsistency has been fixed and you can now finally do:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;%= date_select &#x27;user&#x27;, &#x27;birthday&#x27;, :order =&amp;gt; [:day], :class =&amp;gt; &#x27;my_css_class&#x27; %&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;5430-murray-steele&quot;&gt;Murray Steele&lt;&#x2F;a&gt; (h-lame on the Rails Trac) and &lt;a hre=&quot;http:&#x2F;&#x2F;mentalized.net&#x2F;&quot;&gt;Jakob Skjerning&lt;&#x2F;a&gt; contributed this patch.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8968&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8968&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;No need for explicit respond_to for RJS templates&lt;&#x2F;h3&gt;
&lt;p&gt;ActionController has been changed so that JS requests will automatically render action.js.rjs files without the need to specify an explicit &lt;code&gt;respond_to&lt;&#x2F;code&gt; block. This means that your .rjs files work the same way as your .html.erb files - just put them in the right place and Rails will use it.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8956&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8956&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Bugfixes&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8937 - Prevent Rails from crashing when trying to deserialize an XML representation of a model named &quot;Type&quot; (using Hash#from_xml). Contributed by &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;5065-juanjo-baz-n&quot;&gt;Juanjo Bazán&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;7102-isaac-feliu&quot;&gt;Isaac Feliu&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8942 - Fix eager loading so that it doesn&#x27;t pull in duplicate records in some cases. Contributed by Catfish.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As usual, let me know of any inaccuracies or any suggestions you may have in the comments!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #9 - the sleeper edition</title>
    <published>2008-02-27T09:56:49+00:00</published>
    <updated>2008-02-27T09:56:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/02/27/living-on-the-edge-of-rails-9-the-sleeper-edition/"/>
    <id>https://chuyeow.wtf/2008/02/27/living-on-the-edge-of-rails-9-the-sleeper-edition/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/02/27/living-on-the-edge-of-rails-9-the-sleeper-edition/">&lt;p&gt;It&#x27;s been a slow week on the Rails trunk this week in terms of exciting changes.&lt;&#x2F;p&gt;
&lt;p&gt;This week’s report covers changes from 18 Feb 2008 to 24 Feb 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveResource::Base now accepts user and password configuration&lt;&#x2F;h3&gt;
&lt;p&gt;You can now set the user and password for HTTP authentication in your ActiveResource models:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class Person &lt; ActiveResource::Base
  self.site = &#x27;http:&#x2F;&#x2F;example.com&#x2F;&#x27;
  self.user = &#x27;konata&#x27;
  self.password = &#x27;password&#x27;
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is a better way to specify authentication credentials than the current way of doing it by putting it all in the site (e.g. &lt;code&gt;self.site = &#x27;http:&#x2F;&#x2F;konata:password@example.com&#x2F;&#x27;&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8891&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8891&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;script&#x2F;plugin install now supports SVN export&lt;&#x2F;h3&gt;
&lt;p&gt;You can now pass the &lt;code&gt;-e&#x2F;--export&lt;&#x2F;code&gt; option to &lt;code&gt;script&#x2F;plugin install&lt;&#x2F;code&gt; to do an Subversion export of the plugin. This allows you to then check in the plugin&#x27;s files into your own repository. Though seriously, if anyone really wants to do this, I&#x27;d suggest they use &lt;a href=&quot;http:&#x2F;&#x2F;piston.rubyforge.org&#x2F;&quot;&gt;Piston&lt;&#x2F;a&gt;. That is, for those of us still using Subversion rather than Git.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8921&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8921&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Bug fixes for associations preloading&lt;&#x2F;h3&gt;
&lt;p&gt;There&#x27;ve been some bug fixes the associations preloading change mentioned in &lt;a href=&quot;&#x2F;2008&#x2F;01&#x2F;30&#x2F;living-on-the-edge-of-rails-5-better-eager-loading-and-more&#x2F;&quot;&gt;Living on the edge #5&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8894&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8894&lt;&#x2F;a&gt; - Fixed a bug where associations that were preloaded (using nested &lt;code&gt;:includes&lt;&#x2F;code&gt;) errors out when the associations return &lt;code&gt;nil&lt;&#x2F;code&gt; (i.e. when there are no associated records).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;11154&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;11154&lt;&#x2F;a&gt; - Fixed a bug where nested includes were assuming that all records are from the same class. This is not true for polymorphic associations, causing problems when they were being used.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Yup, that&#x27;s it for this week. As usual, let me know of anything I might have missed or any suggestions you may have in the comments!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Shokudo Japanese Food Bazaar (in Singapore) - don&#x27;t bother</title>
    <published>2008-02-26T00:08:04+00:00</published>
    <updated>2008-02-26T00:08:04+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/02/26/shokudo-japanese-food-bazaar-in-singapore-dont-bother/"/>
    <id>https://chuyeow.wtf/2008/02/26/shokudo-japanese-food-bazaar-in-singapore-dont-bother/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/02/26/shokudo-japanese-food-bazaar-in-singapore-dont-bother/">&lt;p&gt;&lt;em&gt;Subscribers who read my blog for Ruby- or Mozilla-related posts should ignore this post, it&#x27;s another of those blogging as catharsis posts. To my defence, I haven&#x27;t done one of those for a really long time!&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re staying in Singapore and looking to try out the food at Shokudo Japanese Food Bazaar after it was &lt;a href=&quot;http:&#x2F;&#x2F;www.stomp.com.sg&#x2F;stfoodiesclub&#x2F;taste&#x2F;119&#x2F;index.html&quot;&gt;featured in the local newspaper&lt;&#x2F;a&gt;, my advice to you is, &quot;don&#x27;t bother!&quot; Why? In 2 words, &lt;em&gt;horrible service&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Despite some &lt;a href=&quot;http:&#x2F;&#x2F;sparklette.net&#x2F;archives&#x2F;shokudo-japanese-food-bazaar&#x2F;&quot;&gt;positive reviews&lt;&#x2F;a&gt; (yes, the decor is not too bad), my dining experience at Shokudo consisted mostly of getting the service crew&#x27;s attention (and failing spectacularly despite standing right at the counter) and being scowled at or avoided by most of the staff (which is not good, since being a bazaar-style restaurant, you needed to place your order at each stall manned by different members of the service crew).&lt;&#x2F;p&gt;
&lt;p&gt;My friends and I were speculating that either the staff got scolded that day (and reacted negatively to that), or they were just too stuck up because business was good. Either way, it was just terrible. When leaving, I even got rudely reminded that I&#x27;d left that one of those things they gave you to reserve a table. Did I mention the service was horrible? (Granted, there were 2 counters where the staff were attentive and actually quite friendly - this was at the macha drink stall and the katsu curry counter.)&lt;&#x2F;p&gt;
&lt;p&gt;What about the food? With such bad service I would say no one shouldn&#x27;t really care about the quality of the food - thankfully enough, the food is of a consistently mediocre level to even bother!&lt;&#x2F;p&gt;
&lt;p&gt;Has anyone had a similar experience at Shokudo, or was it just our unlucky day?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #8 - the code optimization edition</title>
    <published>2008-02-19T23:30:54+00:00</published>
    <updated>2008-02-19T23:30:54+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/02/19/living-on-the-edge-of-rails-8-the-code-optimization-edition/"/>
    <id>https://chuyeow.wtf/2008/02/19/living-on-the-edge-of-rails-8-the-code-optimization-edition/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/02/19/living-on-the-edge-of-rails-8-the-code-optimization-edition/">&lt;p&gt;Here&#x27;s this week&#x27;s update of the important changes that have been happening on edge Rails. There were lots of performance patches this week, credit mostly due to the guys from &lt;a href=&quot;http:&#x2F;&#x2F;www.acunote.com&#x2F;&quot;&gt;Acunote&lt;&#x2F;a&gt; and their latest &lt;a href=&quot;http:&#x2F;&#x2F;blog.pluron.com&#x2F;2008&#x2F;02&#x2F;rails-faster-as.html&quot;&gt;blog post on optimizing Rails&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This week’s report covers changes from 11 Feb 2008 to 17 Feb 2008 (the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveRecord::Base#attributes-related optimizations&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;code&gt;ActiveRecord::Base#attributes_before_typecast&lt;&#x2F;code&gt; no longer clones attribute unnecessarily.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8858&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8858&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;ActiveRecord::Base#attributes&lt;&#x2F;code&gt; now no longer supports options. The &lt;code&gt;ActiveRecord::Base#attributes&lt;&#x2F;code&gt; method used to support &lt;code&gt;:only&lt;&#x2F;code&gt; and &lt;code&gt;:except&lt;&#x2F;code&gt; options, which are actually unnecessary since it returns a Hash. You can use &lt;code&gt;Hash#slice&lt;&#x2F;code&gt; or &lt;code&gt;Hash#except&lt;&#x2F;code&gt; (both ActiveSupport core extensions) directly on the hash.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8863&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8863&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveRecord associations optimized by avoiding named block arguments&lt;&#x2F;h3&gt;
&lt;p&gt;Alexander Dymo is at it again optimizing ActiveRecord performance, this time by avoiding passing named block arguments. Turns out that it is faster and more memory efficient in Ruby to pass blocks like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def foo
  bar { |*block_args| yield(*block_args) if block_given?
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;instead of passing the block around like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def foo(&amp;&amp;amp;block)
  bar(&amp;amp;block)
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Occurrences of the more expensive way of passing blocks have been replaced in the ActiveRecord associations code so associations are lighter to use.&lt;&#x2F;p&gt;
&lt;p&gt;For a more detailed write-up, check out &lt;a href=&quot;http:&#x2F;&#x2F;blog.pluron.com&#x2F;2008&#x2F;02&#x2F;rails-faster-as.html&quot;&gt;Alexander&#x27;s blog entry&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8865&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8865&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveRecord associations optimized by using symbol callbacks instead of string callbacks&lt;&#x2F;h3&gt;
&lt;p&gt;Again from Alexander Dymo, this patch also improving ActiveRecord association performance. Internally, ActiveRecord associations code uses a lot of string callbacks (e.g. &lt;code&gt;before_save &quot;some_ruby_code_to_eval&quot;&lt;&#x2F;code&gt;). It turns out that that is significantly more expensive compared to simply using &lt;code&gt;Module#define_method&lt;&#x2F;code&gt; because when the callback string is evaluated, the binding needs to be passed along. Passing the binding takes up memory (which is bad, of course).&lt;&#x2F;p&gt;
&lt;p&gt;The internal associations code has been changed to use that &lt;code&gt;define_method&lt;&#x2F;code&gt; now, and if you&#x27;re using a lot of associations, you would save megabytes of memory! (&lt;a href=&quot;http:&#x2F;&#x2F;blog.pluron.com&#x2F;2008&#x2F;02&#x2F;rails-faster-as.html&quot;&gt;Alexander&#x27;s blog post&lt;&#x2F;a&gt; has more detailed benchmarks.)&lt;&#x2F;p&gt;
&lt;p&gt;Remember, when writing your own before and after filters, not to use a string that needs to be &lt;code&gt;eval&lt;&#x2F;code&gt;ed!&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8867&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8867&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Improve ActiveRecord::Base#save performance by avoiding repeated calls to ActiveRecord::Base#connection&lt;&#x2F;h3&gt;
&lt;p&gt;Another Alexander Dymo performance patch. This particular patch improves performance by getting the connection object just once and calling it directly, instead of needlessly calling several times. This should improve &lt;code&gt;ActiveRecord::Base#save&lt;&#x2F;code&gt; performance.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8871&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8871&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveRecord associations now support the :readonly option&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;ActiveRecord::Base#find&lt;&#x2F;code&gt; supports the &lt;code&gt;:readonly&lt;&#x2F;code&gt; option to retrieve records that were read-only (i.e. you couldn&#x27;t save them). Now you can do the same for associations, like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;has_many :comments, :readonly =&gt; true&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This allows you to protect associated records from being saved.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8864&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8864&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;String#squish and String#squish! to remove consecutive chunks of whitespace&lt;&#x2F;h3&gt;
&lt;p&gt;A &lt;code&gt;String#squish&lt;&#x2F;code&gt; extension has been added that trims whitespace from both ends of a string, and compressing consecutive whitespace groups within the string into 1 space each.&lt;&#x2F;p&gt;
&lt;p&gt;For example,&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;@description = %{ String#squish() allows me to write long strings
  inside my Ruby code, without having to worry about indentation,
  the page margin, spaces, tabs or newlines. &quot;double&quot; or &#x27;single&#x27;
  quotes are both fine, and #{interpolation} works. }.squish
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8878&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8878&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As always, let me know of any inaccuracies or any suggestions you may have in the comments, see you guys next week!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #7 - improved ActiveRecord::Base#attributes, time zone support</title>
    <published>2008-02-13T23:49:44+00:00</published>
    <updated>2008-02-13T23:49:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/02/13/living-on-the-edge-of-rails-7-improved-activerecordbaseattributes-time-zone-support/"/>
    <id>https://chuyeow.wtf/2008/02/13/living-on-the-edge-of-rails-7-improved-activerecordbaseattributes-time-zone-support/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/02/13/living-on-the-edge-of-rails-7-improved-activerecordbaseattributes-time-zone-support/">&lt;p&gt;It&#x27;s that time of the week again (every Wednesday for the overly observant, coinciding with the release of the &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;2008&#x2F;2&#x2F;13&#x2F;rails-envy-podcast-episode-018-2-13-2008&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt;) for some choice updates of what changes have been happening on edge Rails. This week&#x27;s report covers changes from 4 Feb 2008 to 10 Feb 2008 (the day the &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;2008&#x2F;2&#x2F;13&#x2F;rails-envy-podcast-episode-018-2-13-2008&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;More efficent ActiveRecord::Base#attributes&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;ActiveRecord::Base#attributes&lt;&#x2F;code&gt; returns a hash of all attributes with clones of their objects as values. This unnecessary cloning is expensive, and has now been removed. &lt;code&gt;ActiveRecord::Base#attributes&lt;&#x2F;code&gt; now returns a hash of &lt;em&gt;values&lt;&#x2F;em&gt; of the attributes.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to Juanjo Bazan, there have been 2 further patches (after the podcast was recorded) related &lt;code&gt;ActiveRecord::Base#attributes&lt;&#x2F;code&gt; that further improves ActiveRecord&#x27;s performance: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8858&quot;&gt;removal of cloning from &lt;code&gt;ActiveRecord::Base#attributes_before_typecast&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, and &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8863&quot;&gt;removing options (&lt;code&gt;:only&lt;&#x2F;code&gt; and &lt;code&gt;:except&lt;&#x2F;code&gt; options, specifically) from &lt;code&gt;ActiveRecord::Base#attributes&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8824&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8824&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveResouce::Base#exists? now uses HTTP HEAD instead of a GET&lt;&#x2F;h3&gt;
&lt;p&gt;A &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;HTTP#Request_Methods&quot;&gt;HTTP HEAD&lt;&#x2F;a&gt; request is really all that is needed to check for existence (200 == exists, 404 == doesn&#x27;t exist). This has been changed to HEAD from a GET request, which is more efficient since all we retrieve are the HTTP headers and there&#x27;s no unnecessary instantiation of the ActiveResource object.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8827&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8827&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Time zone support for ActiveRecord, and config.time_zone property for specifying a default Time Zone&lt;&#x2F;h3&gt;
&lt;p&gt;ActiveRecord models now have time zone-aware attribute readers and writers. Times returned from ActiveRecord attribute readers now have a &lt;code&gt;time_zone&lt;&#x2F;code&gt; attribute themselves, allowing time zone-aware calculations.&lt;&#x2F;p&gt;
&lt;p&gt;You can now configure the default &lt;code&gt;Time.zone&lt;&#x2F;code&gt; value with &lt;code&gt;config.time_zone&lt;&#x2F;code&gt; in your &lt;code&gt;environment.rb&lt;&#x2F;code&gt;. Setting this will enable time zone-awareness for ActiveRecord models.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8806&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8806&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;A Template class has been introduced to ActionView&lt;&#x2F;h3&gt;
&lt;p&gt;As part of the ActionPack refactoring that&#x27;s still ongoing, a &lt;code&gt;ActionView::Template&lt;&#x2F;code&gt; class has been introduced to encapsulate all the data relevant to the currently rendered template. This is largely an internal refactoring so Rails users shouldn&#x27;t be affected.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8805&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8805&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Concrete sweeper classes&lt;&#x2F;h3&gt;
&lt;p&gt;You can now use an explicit class when declaring a cache_sweeper. E.g.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class ListsController &amp;lt; ApplicationController 
  caches_action :index, :show, :public, :feed 
  cache_sweeper Sweepers::List, :only =&amp;gt; [ :edit, :destroy, :share ] 
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8819&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8819&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As always, let me know of any inaccuracies or any suggestions you may have in the comments - this week&#x27;s report is a little rushed because I&#x27;m a little late in posting it up!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #6 - better performance, Git support, and more</title>
    <published>2008-02-06T21:54:37+00:00</published>
    <updated>2008-02-06T21:54:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/02/06/living-on-the-edge-of-rails-6-better-performance-git-support-and-more/"/>
    <id>https://chuyeow.wtf/2008/02/06/living-on-the-edge-of-rails-6-better-performance-git-support-and-more/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/02/06/living-on-the-edge-of-rails-6-better-performance-git-support-and-more/">&lt;p&gt;Here&#x27;s another week of noteworthy updates on the Rails trunk. Thanks once again to the &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; for featuring my updates, and even bigger thanks to the Rails contributors and committers who make things happen. This week&#x27;s Living on the Edge was covered in &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;2008&#x2F;2&#x2F;6&#x2F;ruby-on-rails-podcast&quot;&gt;Rails Envy podcast #17&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The company I work for, &lt;a href=&quot;http:&#x2F;&#x2F;bezurk.com&#x2F;&quot;&gt;Bezurk&lt;&#x2F;a&gt; (yeah we know some of you hate the name &quot;Bezurk&quot; - that&#x27;s going to change), is currently looking for a Ruby developer to join our ranks. This person will be working mainly on Ruby-based web development projects. As we all know, &quot;Rails doesn&#x27;t scale&quot; (delivered in Jason Seifer-style - meaning it&#x27;s just a joke!) so we&#x27;d love anyone who&#x27;s up for a challenge and who&#x27;s also willing to work outside the Rails comfort zone (our current favorite: &lt;a href=&quot;http:&#x2F;&#x2F;ramaze.net&#x2F;&quot;&gt;Ramaze&lt;&#x2F;a&gt;). Our Ruby team currently comprises 3 experienced developers and 1 up and coming Rubyist.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;re active Open Source contributors (Arun released &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;activecouch&#x2F;&quot;&gt;ActiveCouch&lt;&#x2F;a&gt; recently), while I am a Rails contributor (I&#x27;m &#x27;chuyeow&#x27; on the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;&quot;&gt;Rails Trac&lt;&#x2F;a&gt;) myself.&lt;&#x2F;p&gt;
&lt;p&gt;If all this sounds interesting enough to you, do check out the &lt;a href=&quot;http:&#x2F;&#x2F;jobs.monster.com.sg&#x2F;details&#x2F;4917397.html&quot;&gt;full job description&lt;&#x2F;a&gt; and drop us an email. Yes, we&#x27;re serious when we said &quot;+1 for DotA&#x2F;Counterstrike skills)&quot;. There&#x27;s a catch though - you have to work on location at our office in Singapore.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, let&#x27;s get back on topic - this weeks’ report covers changes from 28 Jan 2008 to 3 Feb 2008 (the day the Rails Envy podcast was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;Saving, creating and updating ActiveRecord objects is more efficient&lt;&#x2F;h3&gt;
&lt;p&gt;Thanks to Gleb Arshinov and Alexander Dymo with their &lt;a href=&quot;http:&#x2F;&#x2F;blog.pluron.com&#x2F;2008&#x2F;01&#x2F;ruby-on-rails-i.html&quot;&gt;blog post and patches about improving Rails performance&lt;&#x2F;a&gt; by approaching it via minimizing garbage collection, saving, creating, and updating ActiveRecord objects is now significantly more efficient.&lt;&#x2F;p&gt;
&lt;p&gt;The expensive &lt;code&gt;ActiveRecord::Base#attributes&lt;&#x2F;code&gt; method is no longer called internally, so there&#x27;s no unnecessary cloning of attribute values. Less memory usage means less garbage collection, which means better performance!&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8770&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8770&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;SQL calls and rendering are faster&lt;&#x2F;h3&gt;
&lt;p&gt;This patch is courtesy of &lt;a href=&quot;http:&#x2F;&#x2F;blog.pluron.com&#x2F;2008&#x2F;01&#x2F;ruby-on-rails-i.html&quot;&gt;Gleb Arshinov and Alexander Dymo&lt;&#x2F;a&gt; too.&lt;&#x2F;p&gt;
&lt;p&gt;Rails surrounds every SQL call and &lt;code&gt;ActionView::Base#render&lt;&#x2F;code&gt; with the ruby method &lt;code&gt;Benchmark#realtime&lt;&#x2F;code&gt; so that it can print out some benchmarking numbers. &lt;code&gt;Benchmark#realtime&lt;&#x2F;code&gt; allocates an unnecessary 45k of memory per call (who knew!). This has been monkey patched in Rails to a leaner implementation, reducing memory usage and increasing performance.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8771&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8771&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;MySQL adapter slight optimization&lt;&#x2F;h3&gt;
&lt;p&gt;Table and column names in the MySQL adapter are now cached in instance variables, reducing memory allocations (and thus the need for &lt;acronym title=&quot;garbage collection&quot;&gt;GC&lt;&#x2F;acronym&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8794&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8794&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;script&#x2F;generate does Git!&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;script&#x2F;generate&lt;&#x2F;code&gt; now allows you to pass the &#x27;--git&#x27; (or &#x27;-g&#x27;) option to add the generated files to git (much like how you could do the same with Subversion with &#x27;-c&#x27; or &#x27;--svn&#x27;). This patch is the work of &lt;a href=&quot;http:&#x2F;&#x2F;blog.stevensoroka.ca&#x2F;&quot;&gt;Steven Soroka&lt;&#x2F;a&gt; so nice work Steven!&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8772&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8772&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;map.resources :products, :as =&gt; &#x27;something_else&#x27;&lt;&#x2F;h3&gt;
&lt;p&gt;Here&#x27;s something that will make non-english Rails developers happy: you can now do, for example,&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;map.resources :comments, :as =&gt; &#x27;comentarios&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;so that you can keep having your model names independent of what URLs you&#x27;d actually like to appear on the site.&lt;&#x2F;p&gt;
&lt;p&gt;The above &lt;code&gt;map.resources&lt;&#x2F;code&gt; means that you can keep your resource and model names in English (Comment), while having URLs like this: &#x2F;comentarios&#x2F;123.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8785&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8785&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;:index option for form_for and fields_for to simplify multi-model forms&lt;&#x2F;h3&gt;
&lt;p&gt;Inspired by a &lt;a href=&quot;http:&#x2F;&#x2F;railscasts.com&#x2F;episodes&#x2F;75&quot;&gt;Railscasts episode&lt;&#x2F;a&gt; where Ryan Bates mentions how ugly it is to have to pass &lt;code&gt;:index =&gt; nil&lt;&#x2F;code&gt; to prevent &lt;code&gt;#text_field&lt;&#x2F;code&gt; (and other form helpers) from inserting the model&#x27;s ID in the input name (e.g. project[task_attributes][123][name] when what you really want is project[task_attributes][][name]).&lt;&#x2F;p&gt;
&lt;p&gt;Meaning instead of&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;% fields_for &quot;project[task_attributes][]&quot;, task do |f| %&amp;gt;
  &amp;lt;%= f.text_field :name, :index =&amp;gt; nil %&amp;gt;
  &amp;lt;%= f.hidden_field :id, :index =&amp;gt; nil %&amp;gt;
&amp;lt;% end %&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;you can now do:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;% fields_for &quot;project[task_attributes][]&quot;, task, :index =&amp;gt; nil do |f| %&amp;gt;
  &amp;lt;%= f.text_field :name %&amp;gt;
  &amp;lt;%= f.hidden_field :id %&amp;gt;
&amp;lt;% end %&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8786&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8786&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;No more emails in your production logs&lt;&#x2F;h3&gt;
&lt;p&gt;You&#x27;d probably have noticed that ActionMailer logs &lt;em&gt;entire&lt;&#x2F;em&gt; email messages in the log, even in production. Well, it&#x27;s been changed to be less verbose now. At the &lt;code&gt;:info&lt;&#x2F;code&gt; log level, only the recipients are logged. You can still see the entire email at the &lt;code&gt;:debug&lt;&#x2F;code&gt; log level (which is the default for development environment).&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8781&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8781&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As always, let me know of any inaccuracies or any suggestions you may have in the comments. Oh, and if you liked this, do me a favor by &lt;a href=&quot;http:&#x2F;&#x2F;reddit.com&#x2F;r&#x2F;ruby&#x2F;submit&quot;&gt;submitting it to Ruby Reddit&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>ActiveCouch - a CouchDB library in the spirit of ActiveResource and ActiveRecord</title>
    <published>2008-02-02T14:25:48+00:00</published>
    <updated>2008-02-02T14:25:48+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/02/02/activecouch-a-couchdb-library-in-the-spirit-of-activeresource-and-activerecord/"/>
    <id>https://chuyeow.wtf/2008/02/02/activecouch-a-couchdb-library-in-the-spirit-of-activeresource-and-activerecord/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/02/02/activecouch-a-couchdb-library-in-the-spirit-of-activeresource-and-activerecord/">&lt;p&gt;My fellow Rubyist at work, &lt;a href=&quot;http:&#x2F;&#x2F;arunthampi.wordpress.com&#x2F;&quot;&gt;Arun Thampi&lt;&#x2F;a&gt;, has released &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;activecouch&#x2F;&quot;&gt;ActiveCouch&lt;&#x2F;a&gt;, a Ruby library for &lt;a href=&quot;http:&#x2F;&#x2F;couchdb.org&#x2F;&quot;&gt;CouchDB&lt;&#x2F;a&gt; (if you don&#x27;t know what CouchDB is, &lt;a href=&quot;http:&#x2F;&#x2F;www.couchdbwiki.com&#x2F;index.php?title=CouchDb:About&quot;&gt;read this&lt;&#x2F;a&gt;). Check out the &lt;a href=&quot;http:&#x2F;&#x2F;blog.bezurk.com&#x2F;2008&#x2F;01&#x2F;23&#x2F;activecouch-a-ruby-wrapper-for-couchdb&#x2F;&quot;&gt;official blog announcement of ActiveCouch&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;ActiveCouch tries to be an ActiveResource and ActiveRecord (yes, there is even an &lt;code&gt;ActiveCouch::Migration&lt;&#x2F;code&gt; class for creating CouchDB views) equivalent for representing CouchDB documents in Ruby. I wish I could write some coherent code examples here but I am not that up to date with the latest changes in ActiveCouch (despite my name being tagged as a committer to ActiveCouch, it is largely &lt;a href=&quot;http:&#x2F;&#x2F;arunthampi.wordpress.com&#x2F;&quot;&gt;Arun&#x27;s&lt;&#x2F;a&gt; awesome little baby).&lt;&#x2F;p&gt;
&lt;p&gt;Never fear though, since Arun and I are chowing down our own dog food - we&#x27;re currently porting several gigabytes worth of hotel data from our hacked together XML and Ferret-based library to use the &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;activecouch&#x2F;&quot;&gt;ActiveCouch&lt;&#x2F;a&gt; library. I&#x27;m sure we&#x27;ll get a more coherent API after this exercise, since we are no longer relying on specs and mocks, but working on a Real Application.&lt;&#x2F;p&gt;
&lt;p&gt;If you decide to try out ActiveCouch, do let us know of any feedback or bug reports at the &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;activecouch&#x2F;&quot;&gt;ActiveCouch Google Code site&lt;&#x2F;a&gt;. ActiveCouch is Open Source, so if you&#x27;ve patches that&#x27;s even better!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Frequent disconnects with your Linksys router? Try custom firmware</title>
    <published>2008-02-02T13:41:17+00:00</published>
    <updated>2008-02-02T13:41:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/02/02/frequent-disconnects-with-your-linksys-router-try-custom-firmware/"/>
    <id>https://chuyeow.wtf/2008/02/02/frequent-disconnects-with-your-linksys-router-try-custom-firmware/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/02/02/frequent-disconnects-with-your-linksys-router-try-custom-firmware/">&lt;p&gt;I have a rather old &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;WRT54G&quot;&gt;Linksys WRT54G&lt;&#x2F;a&gt; (v2.2) wireless router that used to disconnect rather frequently for no apparent reason. It is almost guaranteed to get disconnected when I go crazy with &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;04&#x2F;29&#x2F;axel-lightweight-command-line-download-accelerator&#x2F;&quot;&gt;using Axel to download files&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The worse part of the entire &quot;router disconnected&quot; thing is how it takes down my DSL connection (provided by my ISP, &lt;a href=&quot;http:&#x2F;&#x2F;www.singnet.com.sg&#x2F;&quot;&gt;Singnet Broadband&lt;&#x2F;a&gt;) with it - trying to reconnect the DSL modem takes upwards of 3 minutes (I imagine it takes awhile for the ISP&#x27;s network to realize that my DSL connection is really down).&lt;&#x2F;p&gt;
&lt;p&gt;A few months ago, I finally couldn&#x27;t stand it any longer and decided to install custom firmware on the router to see if it fixes the problem (which is &lt;a href=&quot;http:&#x2F;&#x2F;www.tomshardware.com&#x2F;forum&#x2F;20801-43-linksys-wrt54g-disconnects-clients-regularly&quot;&gt;quite prevalent&lt;&#x2F;a&gt;). I was unwilling to go down this route considering my bad luck tinkering with firmware and drivers (having broken a cable modem and a near-functional Linux install before).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;wrt54g.jpg&quot; alt=&quot;Linksys WRT54G&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, long story short: I installed &lt;a href=&quot;http:&#x2F;&#x2F;www.polarcloud.com&#x2F;tomato&quot;&gt;Tomato Firmware&lt;&#x2F;a&gt; and am enjoying rock solid stability! I can run Axel (10 simultaneous connections) with 2 torrents running and still surf comfortably and even download more stuff through the plain old web browser interface.&lt;&#x2F;p&gt;
&lt;p&gt;Long story, er, long: I tried out &lt;a href=&quot;http:&#x2F;&#x2F;www.dd-wrt.com&#x2F;&quot;&gt;DD-WRT&lt;&#x2F;a&gt; first (since we use the same &lt;a href=&quot;http:&#x2F;&#x2F;bezurk.com&#x2F;&quot;&gt;at work&lt;&#x2F;a&gt;), didn&#x27;t like its bloated interface, and especially didn&#x27;t appreciate reading (old) allegations about &lt;a href=&quot;http:&#x2F;&#x2F;www.bitsum.com&#x2F;about-ddwrt.htm&quot;&gt;how DD-WRT&#x27;s author tried to screw the Open Source community over&lt;&#x2F;a&gt;. So I flashed the firmware to &lt;a href=&quot;http:&#x2F;&#x2F;www.polarcloud.com&#x2F;tomato&quot;&gt;Tomato Firmware&lt;&#x2F;a&gt; and ended up loving its minimalist interface and faster restart cycles (most of the time, since Tomato tries to restart as few services as it needs to when you make configuration changes, rather than reboot the entire router like DD-WRT does).&lt;&#x2F;p&gt;
&lt;p&gt;So, if you&#x27;re experiencing the same troubles with your Linksys router and haven&#x27;t had taken the leap of faith with custom firmware, I really recommend you do so. &lt;strong&gt;Big warning&lt;&#x2F;strong&gt;: Read the installation instructions! Not all WRT54G routers are compatible with Tomato Firmware.&lt;&#x2F;p&gt;
&lt;p&gt;More reading: Lifehacker has a &lt;a href=&quot;http:&#x2F;&#x2F;lifehacker.com&#x2F;344765&#x2F;turn-your-60-router-into-a-user+friendly-super+router-with-tomato&quot;&gt;walkthrough of Tomato Firmware&#x27;s features&lt;&#x2F;a&gt; (and also &lt;a href=&quot;http:&#x2F;&#x2F;lifehacker.com&#x2F;software&#x2F;router&#x2F;hack-attack-turn-your-60-router-into-a-600-router-178132.php&quot;&gt;one for DD-WRT&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #5 - better eager loading and more</title>
    <published>2008-01-30T18:26:39+00:00</published>
    <updated>2008-01-30T18:26:39+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/30/living-on-the-edge-of-rails-5-better-eager-loading-and-more/"/>
    <id>https://chuyeow.wtf/2008/01/30/living-on-the-edge-of-rails-5-better-eager-loading-and-more/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/30/living-on-the-edge-of-rails-5-better-eager-loading-and-more/">&lt;p&gt;Another week of edge Rails changes, featured on the &lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;podcast&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt;. This weeks’ report covers changes from 21 Jan 2008 to 27 Jan 2008 (the day the &lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;podcast&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;Eager loading :includes does pre-loading&lt;&#x2F;h3&gt;
&lt;p&gt;The current gem Rails behavior when loading associations with something like&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Author.find(:all, :include =&gt; [:posts, :comments])&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;is to make a big query with multiple joins that fetches all the associations in the same query (for you RDBMS geeks, the &quot;cartesian product&quot;).&lt;&#x2F;p&gt;
&lt;p&gt;Frederick Cheung (fcheung on the Rails Trac) has contributed an impressive optimization to this by pre-loading the associations rather than trying to eager loading with one big query. So a find like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Author.find(:all, :include =&gt; [:posts, :comments])&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;would first load all the authors, then all the posts, and then all the comments in 3 smaller, faster queries.&lt;&#x2F;p&gt;
&lt;p&gt;The main benefit of this (depending on your data): Running X simple queries (to fetch authors, then posts and comments) rather than one mega-query that joins all the associated tables is faster most of the time. The result set is often smaller as well.&lt;&#x2F;p&gt;
&lt;p&gt;More details can be found at &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9640&quot;&gt;ticket #9640 on the Rails Trac&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8672&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8672&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;&lt;code&gt;composed_of&lt;&#x2F;code&gt; aggregations can now be used in finder conditions&lt;&#x2F;h3&gt;
&lt;p&gt;You can now use value objects that you&#x27;ve previously specified that your model is &lt;code&gt;composed_of&lt;&#x2F;code&gt; in the finder conditions hash. E.g. if you have a Customer that has a balance aggregation:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class Customer &amp;lt; ActiveRecord::Base
  composed_of :balance, :class_name =&amp;gt; &quot;Money&quot;, :mapping =&amp;gt; %w(balance amount)
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can now pass a Money value object to &lt;code&gt;Customer#find&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Customer.find(:all, :conditions =&amp;gt; { :balance =&amp;gt; Money.new(20, &quot;USD&quot;) })&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Convenient.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8671&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8671&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;New helper: label_tag&lt;&#x2F;h3&gt;
&lt;p&gt;A &lt;code&gt;label_tag&lt;&#x2F;code&gt; helper has been missing for quite awhile since the label helper was added. No longer:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;label_tag &#x27;name&#x27;
# =&amp;gt; &amp;lt;label for=&quot;name&quot;&amp;gt;Name&amp;lt;&#x2F;label&amp;gt;
&lt;p&gt;label_tag &#x27;name&#x27;, &#x27;Your name&#x27;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;label-for-name-your-name-label&quot;&gt;=&amp;gt; &amp;lt;label for=&quot;name&quot;&amp;gt;Your name&amp;lt;&#x2F;label&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8685&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8685&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;New ActiveSupport class: ActiveSupport::TimeWithZone&lt;&#x2F;h3&gt;
&lt;p&gt;A new &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;activesupport&#x2F;lib&#x2F;active_support&#x2F;time_with_zone.rb&quot;&gt;&lt;code&gt;ActiveSupport::TimeWithZone&lt;&#x2F;code&gt; class&lt;&#x2F;a&gt; has been introduced to make timezone support in Rails easier. Ryan Daigle has a &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;articles&#x2F;2008&#x2F;1&#x2F;25&#x2F;what-s-new-in-edge-rails-easier-timezones&quot;&gt;good writeup&lt;&#x2F;a&gt; on this.&lt;&#x2F;p&gt;
&lt;p&gt;A word of warning though: this is still work in progress, as Geoff Buesing, the core team member responsible for these timezone changes, has more to add on how his &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;articles&#x2F;2008&#x2F;1&#x2F;25&#x2F;what-s-new-in-edge-rails-easier-timezones#comment-6450&quot;&gt;plans for the timezone puzzle in the comments&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8696&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8696&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;map.root can be easily aliased&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;map.root&lt;&#x2F;code&gt; now accept a single symbol as an argument to declare an alias. Just a little something to keep your routes a little more DRY, e.g.:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;map.new_session :controller =&amp;gt; &#x27;sessions&#x27;, :action =&amp;gt; &#x27;new&#x27; 
map.root :new_session&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8738&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8738&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As usual, let me know of any inaccuracies or any suggestions you may have in the comments!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Trying code blocks in Ruby (aka Prototype&#x27;s Try.these)</title>
    <published>2008-01-28T23:30:50+00:00</published>
    <updated>2008-01-28T23:30:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/28/trying-code-blocks-in-ruby-aka-prototypes-trythese/"/>
    <id>https://chuyeow.wtf/2008/01/28/trying-code-blocks-in-ruby-aka-prototypes-trythese/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/28/trying-code-blocks-in-ruby-aka-prototypes-trythese/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;prototypejs.org&#x2F;api&#x2F;utility&#x2F;try-these&quot;&gt;Prototype&#x27;s &lt;code&gt;Try.these&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; is a really useful bit of code (though I doubt it sees much application outside of JavaScript libraries). I have this evil bit of code somewhere, for example:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;var results = Try.these(
  function() { return response.responseText.evalJSON(true); },
  function() { return eval(&#x27;(&#x27; + response.responseText + &#x27;)&#x27;); }
);&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Evilness personified in its &lt;code&gt;eval&lt;&#x2F;code&gt;ed glory, but that&#x27;s besides the point here.&lt;&#x2F;p&gt;
&lt;p&gt;Just for fun, I tried to do this in Ruby, just to see how easy it was, and came up with this &lt;code&gt;try&lt;&#x2F;code&gt; method:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;module Kernel
  def try(*these)
    raise ArgumentError, &#x27;try requires at least 2 arguments&#x27; if these.size &lt;= 1
    fallback = these.pop unless these.last.respond_to?(:call)
    these.each { |candidate| begin return candidate.call rescue next end }
    fallback || raise(RuntimeError, &#x27;None of the given procs succeeded&#x27;)
  end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Which you can (ab)use like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;try(
  Proc.new { open(&#x27;http:&#x2F;&#x2F;finance.yahoo.com&#x2F;foo&#x2F;&#x27;) },
  lambda { open(&#x27;http:&#x2F;&#x2F;finance.google.com&#x2F;bar&#x2F;&#x27;) },
  proc { open(&#x27;http:&#x2F;&#x2F;finantiq.com&#x2F;flomp&#x2F;&#x27;) },
  :fallback
)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Real world applications would be, like the example above, retrieving content from several unreliable websites to retrieve currency rates.&lt;&#x2F;p&gt;
&lt;p&gt;You can find the specs for &lt;code&gt;Kernel#try&lt;&#x2F;code&gt; here: &lt;a href=&quot;http:&#x2F;&#x2F;pastie.org&#x2F;144339&quot;&gt;http:&#x2F;&#x2F;pastie.org&#x2F;144339&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;So the question now is, is there a better way to implement this, or a more idiomatic Ruby way?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Songza - finally an easy way to listen to boy band music</title>
    <published>2008-01-25T18:19:53+00:00</published>
    <updated>2008-01-25T18:19:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/25/songza-finally-an-easy-way-to-listen-to-boy-band-music/"/>
    <id>https://chuyeow.wtf/2008/01/25/songza-finally-an-easy-way-to-listen-to-boy-band-music/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/25/songza-finally-an-easy-way-to-listen-to-boy-band-music/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;songza.com&#x2F;&quot;&gt;Songza&lt;&#x2F;a&gt;&#x27;s quite nice, especially after us non-US users lost access to &lt;a href=&quot;http:&#x2F;&#x2F;www.pandora.com&#x2F;&quot;&gt;Pandora&lt;&#x2F;a&gt;. Now I can finally listen to some boy band music when I feel like it (because I don&#x27;t have any in my library).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Rails and penis enhancements</title>
    <published>2008-01-25T13:34:26+00:00</published>
    <updated>2008-01-25T13:34:26+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/25/rails-and-penis-enhancements/"/>
    <id>https://chuyeow.wtf/2008/01/25/rails-and-penis-enhancements/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/25/rails-and-penis-enhancements/">&lt;p&gt;Funniest bug report I&#x27;ve seen on the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;&quot;&gt;Rails issue tracker&lt;&#x2F;a&gt;: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;10919&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;10919&lt;&#x2F;a&gt;. Be sure to read the comments, and the resolution:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I appreciate that penis enhancements are the norm for most of the commenters here, but their use is definitely not widespread enough to justify fixing this.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>Living on the edge (of Rails) #4 - faster routes, easier form partials</title>
    <published>2008-01-23T19:54:46+00:00</published>
    <updated>2008-01-23T19:54:46+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/23/living-on-the-edge-of-rails-4-faster-routes-easier-form-partials/"/>
    <id>https://chuyeow.wtf/2008/01/23/living-on-the-edge-of-rails-4-faster-routes-easier-form-partials/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/23/living-on-the-edge-of-rails-4-faster-routes-easier-form-partials/">&lt;p&gt;It&#x27;s time again for your weekly dose of what&#x27;s new in edge Rails. This weeks&#x27; report covers changes from 14 Jan 2008 to 20 Jan 2008 (the day the &lt;a href=&quot;http:&#x2F;&#x2F;railsenvy.com&#x2F;podcast&#x2F;&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded).&lt;&#x2F;p&gt;
&lt;h3&gt;Route recognition is faster&lt;&#x2F;h3&gt;
&lt;p&gt;Rails&#x27; route recognition has been optimized and is significantly faster especially for applications using many resources (i.e. via &lt;code&gt;map.resources&lt;&#x2F;code&gt; in your &lt;code&gt;config&#x2F;routes.rb&lt;&#x2F;code&gt;). Big thumbs up to Oleg Andreev (aka oleganza) who also &lt;a href=&quot;http:&#x2F;&#x2F;www.novemberain.com&#x2F;2008&#x2F;1&#x2F;17&#x2F;routes-recognition&quot;&gt;wrote a detailed post about it&lt;&#x2F;a&gt;. You can also find out more about how this works in the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;actionpack&#x2F;lib&#x2F;action_controller&#x2F;routing&#x2F;recognition_optimisation.rb&quot;&gt;code comments&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changesets: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8674&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8674&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8652&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8652&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;render :partial and forms&lt;&#x2F;h3&gt;
&lt;p&gt;Instead of doing:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;% form_for(:person) do |f| %&amp;gt;
  &amp;lt;%= render :partial =&amp;gt; &#x27;form&#x27;, :locals =&amp;gt; { :form =&amp;gt; f } %&amp;gt;
&amp;lt;% end %&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;you can now do:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;% form_for(:person) do |f| %&amp;gt;
  &amp;lt;%= render :partial =&amp;gt; f %&amp;gt;
&amp;lt;% end %&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Convenient. This also works with your &lt;a href=&quot;http:&#x2F;&#x2F;api.rubyonrails.org&#x2F;classes&#x2F;ActionView&#x2F;Helpers&#x2F;FormHelper.html#M000920&quot;&gt;custom form builders&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;% form_for(:person, :builder =&amp;gt; LabellingFormBuilder) do |f| %&amp;gt;
  &amp;lt;%= render :partial =&amp;gt; f %&amp;gt;
&amp;lt;% end %&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The partial template rendered is then &lt;code&gt;people&#x2F;_labelling_form&lt;&#x2F;code&gt; and the local variable in the partial is &lt;code&gt;labelling_form&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8646&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8646&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;Callbacks refactored into ActiveSupport::Callbacks&lt;&#x2F;h3&gt;
&lt;p&gt;All that duplicated callback code in ActiveRecord, ActionController::Dispatcher, and in test case setup and teardown methods have been extracted into the ActiveSupport::Callbacks module.&lt;&#x2F;p&gt;
&lt;p&gt;Less duplication means more robust code so yay!&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8664&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8664&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveRecord test suite gets a makeover&lt;&#x2F;h3&gt;
&lt;p&gt;The ActiveRecord test suite has become something of a maze jungle in recent times, with no clear hierarchy of how things are organize. It&#x27;s not that easy to find what you are looking for especially for newcomers trying to contribute to ActiveRecord. Thankfully, someone (John Barnette - the foxy fixtures guy) has stepped up and cleaned things up quite a bit. Fixtures, test cases, fixture models, etc. are now in their own directories and from looking at the directory hierarchy one should be able to know where to put what at a glance.&lt;&#x2F;p&gt;
&lt;p&gt;Related ticket: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;10742&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;10742&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;Bugfixes&lt;&#x2F;h3&gt;
&lt;p&gt;* &lt;code&gt;redirect_to nil&lt;&#x2F;code&gt; no longer explodes (but raises a friendlier &#x27;cannot redirect to nil&#x27; exception) (related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8633&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8633&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Seen in the Rails source - Orcl nds shrt indx nms</title>
    <published>2008-01-18T18:35:41+00:00</published>
    <updated>2008-01-18T18:35:41+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/18/seen-in-the-rails-source-orcl-nds-shrt-indx-nms/"/>
    <id>https://chuyeow.wtf/2008/01/18/seen-in-the-rails-source-orcl-nds-shrt-indx-nms/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/18/seen-in-the-rails-source-orcl-nds-shrt-indx-nms/">&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;oracle_short_indexes.png&quot; alt=&quot;Oracle needs short indexes&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Hah.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the Edge (of Rails) #3 - X-Sendfile and many other sexy enhancements</title>
    <published>2008-01-16T23:25:48+00:00</published>
    <updated>2008-01-16T23:25:48+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/16/living-on-the-edge-of-rails-3-x-sendfile-and-many-other-sexy-enhancements/"/>
    <id>https://chuyeow.wtf/2008/01/16/living-on-the-edge-of-rails-3-x-sendfile-and-many-other-sexy-enhancements/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/16/living-on-the-edge-of-rails-3-x-sendfile-and-many-other-sexy-enhancements/">&lt;p&gt;Edge Rails saw a barrage of refinements and enhancements this week and there&#x27;s even talk about Rails 2.1 being just a little around the corner. There&#x27;s also been a flurry of contributions to making Rails more thread-safe and performance optimizations (all still work in progress at the moment) - it&#x27;s really nice to see how the Rails community is looking seriously at performance post-Rails 2.0 (not that they weren&#x27;t serious about performance before Rails 2.0!).&lt;&#x2F;p&gt;
&lt;p&gt;This week’s report covers changes from 7 Jan 2008 to the day the corresponding &lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;2008&#x2F;1&#x2F;16&#x2F;rails-envy-podcast-episode-014-1-16-2008&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt; was recorded (13 Jan 2008).&lt;&#x2F;p&gt;
&lt;h3&gt;X-Sendfile gets easier with send_file :x_sendfile =&gt; true&lt;&#x2F;h3&gt;
&lt;p&gt;If you only have a vague idea of what it is (like, X-Sendfile is that thing that lets you send files, right?), you&#x27;d do well to read this &lt;a href=&quot;http:&#x2F;&#x2F;john.guen.in&#x2F;past&#x2F;2007&#x2F;4&#x2F;17&#x2F;send_files_faster_with_xsendfile&#x2F;&quot;&gt;helpful explanation&lt;&#x2F;a&gt;. (In short, X-Sendfile allows you to send static files directly and more performantly to HTTP clients and bypassing your app server process.) You don&#x27;t have to set those headers yourself or install the plugin mentioned in that article though, since edge Rails has an augmented &lt;a href=&quot;http:&#x2F;&#x2F;api.rubyonrails.org&#x2F;classes&#x2F;ActionController&#x2F;Streaming.html#M000228&quot;&gt;&lt;code&gt;send_file&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; helper that does all the legwork for you.&lt;&#x2F;p&gt;
&lt;p&gt;All you have to do now is to this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;send_file &#x27;&#x2F;path&#x2F;to.png&#x27;, :x_sendfile =&amp;gt; true, :type =&amp;gt; &#x27;image&#x2F;png&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Rails will set the X-Sendfile header for you (i.e. &lt;code&gt;response.headers[&#x27;X-Sendfile&#x27;] = &#x27;&#x2F;path&#x2F;to.png&#x27;&lt;&#x2F;code&gt;) and sends a HEAD response (empty response body) with the file path, allowing your web server (Apache, Lighttpd) to serve the static file and not involve your Rails processes (such as your precious, perpertually resource-starved &lt;a href=&quot;http:&#x2F;&#x2F;mongrel.rubyforge.org&#x2F;&quot;&gt;mongrels&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;This is &lt;em&gt;really&lt;&#x2F;em&gt; nice if you are serving lots of static files (downloadable images and documents come to mind) and are not already using X-Sendfile or doing it the &quot;long&quot; way (by setting the response header and then &lt;code&gt;render :nothing =&gt; true&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8628&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8628&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActionController::Base.asset_host proc now takes the request object as an optional 2nd argument&lt;&#x2F;h3&gt;
&lt;p&gt;Rails 2.0.2 allowed you to set &lt;code&gt;ActionController::Base.asset_host&lt;&#x2F;code&gt; to a proc that took a single &lt;code&gt;source&lt;&#x2F;code&gt; argument (as &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;17&#x2F;rails-202-released-so-whats-new&#x2F;&quot;&gt;detailed in my earlier post&lt;&#x2F;a&gt;). People were still &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;10549&quot;&gt;running into problems&lt;&#x2F;a&gt; with asset hosting though, particularly while trying to serve assets from an SSL-protected page (i.e. HTTPS requests). When serving SSL-protected pages, you&#x27;d need to either have an SSL certificate for each asset host(!) or live with a mixed media warning (which browsers report when you have SSL and non-SSL content on the same page).&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;asset_host&lt;&#x2F;code&gt; proc now takes the entire controller request instance as an optional second argument. This allows you to either use a single asset host or to disable asset hosting for SSL requests. For example, this proc below practically disables asset hosting:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;ActionController::Base.asset_host = Proc.new { |source, request| 
  if request.ssl? 
    &quot;#{request.protocol}#{request.host_with_port}&quot; # Disable asset hosting.
  else 
    &quot;#{request.protocol}assets.example.com&quot; # Use asset host.
  end 
}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8578&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8578&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Nicer way to access request headers&lt;&#x2F;h3&gt;
&lt;p&gt;There&#x27;s now a nicer way to access headers - instead of &lt;code&gt;request.env[&quot;HTTP_CONTENT_TYPE&quot;]&lt;&#x2F;code&gt; you can now do &lt;code&gt;request.headers[&quot;Content-Type&quot;]&lt;&#x2F;code&gt; (or &lt;code&gt;request.headers[&quot;content-type&quot;]&lt;&#x2F;code&gt; (note all lowercase) or even good old &lt;code&gt;request.headers[&quot;HTTP_CONTENT_TYPE&quot;]&lt;&#x2F;code&gt;. How convenient - I often worry about getting the casing right (was it &#x27;Content-Type&#x27; or &#x27;Content-type&#x27;?) and now I can be sure it doesn&#x27;t matter!&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8625&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8625&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;ActiveSupport::TestCase and friends now support declarative setup and teardown callbacks&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;ActiveSupport::TestCase&lt;&#x2F;code&gt; (and the &lt;code&gt;ActionController::TestCase&lt;&#x2F;code&gt; and &lt;code&gt;ActionMailer::TestCase&lt;&#x2F;code&gt; subclasses) now support declarative setup and teardown callbacks that are called before setup&#x2F;after teardown. For example,&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class FooTestCase &amp;lt; ActiveSupport::TestCase
  setup :run_this_first, :then_run_this do
    # Run this last.
  end
  teardown :remove_tmp_files, :undef_constants
&lt;p&gt;def run_this_first
end&lt;&#x2F;p&gt;
&lt;p&gt;def then_run_this
end&lt;&#x2F;p&gt;
&lt;p&gt;def remove_tmp_files
end&lt;&#x2F;p&gt;
&lt;p&gt;def undef_constants
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;will run &lt;code&gt;run_this_first&lt;&#x2F;code&gt;, &lt;code&gt;then_run_this&lt;&#x2F;code&gt;, and finally the stuff that&#x27;s in the given block to &#x27;setup&#x27; before running the actual &lt;code&gt;setup&lt;&#x2F;code&gt; method. The teardown callbacks are done in reverse order, meaning &lt;code&gt;undef_constants&lt;&#x2F;code&gt; is called, and then &lt;code&gt;remove_tmp_files&lt;&#x2F;code&gt; (and then the actual &lt;code&gt;teardown&lt;&#x2F;code&gt; method).&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8570&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8570&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;TMail updated to 1.2.1&lt;&#x2F;h3&gt;
&lt;p&gt;The bundled &lt;a href=&quot;http:&#x2F;&#x2F;tmail.rubyforge.org&#x2F;&quot;&gt;TMail&lt;&#x2F;a&gt; library (that ActionMailer uses) has been updated from 1.1.0 to 1.2.1. This new version currently maintained by &lt;a href=&quot;http:&#x2F;&#x2F;lindsaar.net&#x2F;&quot;&gt;Mikel Lindsaar&lt;&#x2F;a&gt; promises bugfixes and greater test coverage. For more details, see &lt;a href=&quot;https:&#x2F;&#x2F;rubyforge.org&#x2F;frs&#x2F;shownotes.php?group_id=4512&amp;release_id=18049&quot;&gt;https:&#x2F;&#x2F;rubyforge.org&#x2F;frs&#x2F;shownotes.php?group_id=4512&amp;release_id=18049&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Mikel has been working with Rails core to get Tmail Ruby 1.9-compatible. Good work Mikel!&lt;&#x2F;p&gt;
&lt;p&gt;Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8620&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8620&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Bug fixes&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;code&gt;ActionController::UrlWriter&lt;&#x2F;code&gt; respects the &lt;code&gt;relative_url_root&lt;&#x2F;code&gt;. For those of you who don&#x27;t know, the &lt;code&gt;ActionController::UrlWriter&lt;&#x2F;code&gt; module is a convenient mixin that allows you to use &lt;code&gt;url_for&lt;&#x2F;code&gt; &lt;em&gt;and&lt;&#x2F;em&gt; your named routes in arbitrary classes (such as in your mailers or in a BackgrounDRb worker).&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class SitemapWorker &amp;lt; BackgrounDRb::MetaWorker
  &lt;strong&gt;include ActionController::UrlWriter&lt;&#x2F;strong&gt;
&lt;h1 id=&quot;access-your-named-routes-and-the-url-for-helper&quot;&gt;Access your named routes and the url_for helper.&lt;&#x2F;h1&gt;
&lt;p&gt;url = page_url(:permalink =&amp;gt; &#x27;foo&#x27;)
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;  And now it respects your &lt;code&gt;relative_url_root&lt;&#x2F;code&gt; instead of blissfully ignoring it.&lt;&#x2F;p&gt;
&lt;p&gt;  Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8616&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8616&lt;&#x2F;a&gt;
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;code&gt;render :text =&gt; nil&lt;&#x2F;code&gt; and &lt;code&gt;render :text =&gt; false&lt;&#x2F;code&gt; work properly now instead of inexplicably trying to render a file. This was a big gotcha when using &lt;code&gt;render :text =&gt; some_variable&lt;&#x2F;code&gt; where &lt;code&gt;some_variable&lt;&#x2F;code&gt; could potentially be false or nil in some cases - Obie Fernandez has a &lt;a href=&quot;http:&#x2F;&#x2F;www.jroller.com&#x2F;obie&#x2F;entry&#x2F;render_text_gotcha&quot;&gt;writeup on this long-standing bug&lt;&#x2F;a&gt;. Related changeset: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8577&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8577&lt;&#x2F;a&gt;
  &lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3&gt;Optimizations&lt;&#x2F;h3&gt;
&lt;p&gt;There&#x27;re significant performance improvements for classic fixtures with HABTM data, due to some slightly clever caching model classes, and instantiating fixtures from the model class, instead of expensive constant lookups from the name of the class.&lt;&#x2F;p&gt;
&lt;p&gt;Related changesets: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8560&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8560&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8561&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8561&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Retrying code blocks in Ruby (on exceptions, whatever)</title>
    <published>2008-01-14T18:13:47+00:00</published>
    <updated>2008-01-14T18:13:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/14/retrying-code-blocks-in-ruby-on-exceptions-whatever/"/>
    <id>https://chuyeow.wtf/2008/01/14/retrying-code-blocks-in-ruby-on-exceptions-whatever/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/14/retrying-code-blocks-in-ruby-on-exceptions-whatever/">&lt;p&gt;I am not certain whether the ability to retry a code block when encountering exceptions was a feature available in Ruby, but I certainly couldn&#x27;t find anything on that topic (what I did find were mostly about the &lt;code&gt;retry&lt;&#x2F;code&gt; keyword for iterator loops).&lt;&#x2F;p&gt;
&lt;p&gt;Before you ask why I need this, the motivation for this was because I was getting intermittent HTTP errors (503s mostly) trying to connect to a web service. Turns out it&#x27;s really easy in Ruby to implement a &lt;code&gt;retryable&lt;&#x2F;code&gt; method that does something like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;retryable(:tries =&gt; 5, :on =&gt; OpenURI::HTTPError) do
  open(&#x27;http:&#x2F;&#x2F;example.com&#x2F;flaky_api&#x27;)
  # Code that mashes up stuff for your &quot;social networking&quot; site.
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here are the &lt;a href=&quot;http:&#x2F;&#x2F;pastie.caboo.se&#x2F;138570&quot;&gt;Kernel#retryable specs (pastie)&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And the code:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# Options:
# * :tries - Number of retries to perform. Defaults to 1.
# * :on - The Exception on which a retry will be performed. Defaults to Exception, which retries on any Exception.
#
# Example
# =======
#   retryable(:tries =&amp;gt; 1, :on =&amp;gt; OpenURI::HTTPError) do
#     # your code here
#   end
#
def retryable(options = {}, &amp;block)
  opts = { :tries =&gt; 1, :on =&gt; Exception }.merge(options)
&lt;p&gt;retry_exception, retries = opts[:on], opts[:tries]&lt;&#x2F;p&gt;
&lt;p&gt;begin
return yield
rescue retry_exception
retry if (retries -= 1) &amp;gt; 0
end&lt;&#x2F;p&gt;
&lt;p&gt;yield
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s not hard to implement the same for checking return values as well, i.e.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;retryable_deluxe(:tries =&amp;gt; 5, :on =&amp;gt; { :return =&amp;gt; nil }) { puts &quot;working...&quot; }
&lt;p&gt;retryable_deluxe(:on =&amp;gt; { :exception =&amp;gt; StandardError, :return =&amp;gt; nil }) do&lt;&#x2F;p&gt;
&lt;h1 id=&quot;your-code-here&quot;&gt;your code here&lt;&#x2F;h1&gt;
&lt;p&gt;end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ruby is nice.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>My very own X of the Year 2007</title>
    <published>2008-01-09T23:18:56+00:00</published>
    <updated>2008-01-09T23:18:56+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/09/my-very-own-x-of-the-year-2007/"/>
    <id>https://chuyeow.wtf/2008/01/09/my-very-own-x-of-the-year-2007/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/09/my-very-own-x-of-the-year-2007/">&lt;p&gt;It&#x27;s about 9 days too late, but I figure it&#x27;d be fun to just throw these out and see if anyone else enjoyed the same things I did in 2007.&lt;&#x2F;p&gt;
&lt;h3&gt;PC Game of the Year&lt;&#x2F;h3&gt;
&lt;p&gt;This has definitely got to go to &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Call_of_duty_4&quot;&gt;&lt;strong&gt;Call of Duty 4: Modern Warfare&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;. The single-player campaign was short but visually impressive and amazingly realistic. It was like watching a movie in most parts. And really, sneaking by Spetsnaz just a few metres away in sniper ghillie suits and was totally pimp. Multiplayer is real good fun too, I&#x27;m still playing it now (usually on &lt;a href=&quot;http:&#x2F;&#x2F;gamingsa.com&#x2F;?p=servers&quot;&gt;GamingSA.com&lt;&#x2F;a&gt; servers as &#x27;konata&#x27;).&lt;&#x2F;p&gt;
&lt;p&gt;Special mention: &lt;strong&gt;World of Warcraft&lt;&#x2F;strong&gt; (yes, I quit it ages ago, but it&#x27;s still good for the early part of 2007 when I was still playing casually).&lt;&#x2F;p&gt;
&lt;h3&gt;PSP Game of the Year&lt;&#x2F;h3&gt;
&lt;p&gt;Yes, I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;11&#x2F;29&#x2F;timenowobsession-psp-slim&#x2F;&quot;&gt;got a PSP&lt;&#x2F;a&gt; just this year. And yes, &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Jeanne_d&#x27;Arc_(video_game)&quot;&gt;&lt;strong&gt;Jeanne d&#x27;Arc&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; is the best game I&#x27;ve played and completed in a while. For those who don&#x27;t know, Jeanne d&#x27;Arc is a very accessible Strategy RPG (SRPG) that is very loosely based on Joan of Arc. It&#x27;s much easier to play than Final Fantasy: Tactics or &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Disgaea:_Hour_of_Darkness&quot;&gt;Disgaea: Hour of Darkness&lt;&#x2F;a&gt; and doesn&#x27;t leave you constantly wondering about missing out on secrets. Highly recommended if you&#x27;re looking for an RPG-like game on the PSP.&lt;&#x2F;p&gt;
&lt;p&gt;I haven&#x27;t had the chance to play many other PSP games, but look forward to getting deeper into Disgaea: Hour of Darkness (and highly anticipating Final Fantasy VII: Crisis Core in March 2008).&lt;&#x2F;p&gt;
&lt;h3&gt;Anime of the Year&lt;&#x2F;h3&gt;
&lt;p&gt;2007 is the year I switched my anime tastes from mostly &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Sh%C5%8Dnen&quot;&gt;shonen&lt;&#x2F;a&gt; anime (like Naruto and Bleach) to the &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Seinen&quot;&gt;seinen&lt;&#x2F;a&gt; genre.&lt;&#x2F;p&gt;
&lt;p&gt;My favorite anime for 2007 (this is a tough one) has to go to &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lucky_Star_(manga)&quot;&gt;&lt;strong&gt;Lucky Star&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;. I even went through a prolonged &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;05&#x2F;11&#x2F;lucky-star-konata-ism&#x2F;&quot;&gt;Konata-ism phase&lt;&#x2F;a&gt; and even had a printout of Konata saying &quot;Relax&quot; pasted right above where I sit in the office.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;konata-relax_thumb.jpg&quot; alt=&quot;Konata says &#x27;Relax&#x27;&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s therapeutic :)&lt;&#x2F;p&gt;
&lt;p&gt;2007 was a good anime year. &lt;a href=&quot;http:&#x2F;&#x2F;myanimelist.net&#x2F;anime.php?id=2154&quot;&gt;Tekkon Kinkreet&lt;&#x2F;a&gt; had an edgy, surreal drawing style but had a fantastic plot. I highly recommend it if you&#x27;ve missed it - it&#x27;s about 10 times better than your run-of-the-mill Princess Mononoke or Spirited Away type anime movies, in my humble opinion.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;myanimelist.net&#x2F;anime.php?id=2744&quot;&gt;Potemayo&lt;&#x2F;a&gt;&#x27;s moeblobs were just too funny to watch. Gochuko (below) had me LOL when she went around using tape to fix everything she sliced with her big scythe. At first appearances Potemayo may look like a kid&#x27;s anime but it&#x27;s really a work of comic genius for adults.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;guchoko.jpg&quot; alt=&quot;Gochuko from Potemayo&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;myanimelist.net&#x2F;anime.php?id=2508&quot;&gt;Genshiken 2&lt;&#x2F;a&gt; picks up where the 1st season left off and while the ending left quite a bit to be desired, on the whole it was enjoyable watching otakus cope with life (who knew it was so tough to get a job in Japan).&lt;&#x2F;p&gt;
&lt;h3&gt;What about you?&lt;&#x2F;h3&gt;
&lt;p&gt;What did you enjoy in the last year and more importantly, do you have any recommendations for an ani-otaku like me?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the Edge (of Rails) - 1st week of the year edition</title>
    <published>2008-01-09T22:18:20+00:00</published>
    <updated>2008-01-09T22:18:20+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/09/living-on-the-edge-of-rails-1st-week-of-the-year-edition/"/>
    <id>https://chuyeow.wtf/2008/01/09/living-on-the-edge-of-rails-1st-week-of-the-year-edition/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/09/living-on-the-edge-of-rails-1st-week-of-the-year-edition/">&lt;p&gt;Yup, it&#x27;s time for your weekly dose of the changes on edge Rails, more or less covered in the latest &lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;2008&#x2F;1&#x2F;9&#x2F;rails-envy-podcast-episode-013-1-9-2008&quot;&gt;Rails Envy podcast&lt;&#x2F;a&gt;. Using edge Rails is neither arcane nor terrifying, and hopefully weekly reports like these will allow you to &lt;a href=&quot;http:&#x2F;&#x2F;www.loudthinking.com&#x2F;posts&#x2F;20-dont-overestimate-the-power-of-versions&quot;&gt;take control of your own release schedule&lt;&#x2F;a&gt; with your Rails apps.&lt;&#x2F;p&gt;
&lt;p&gt;This week&#x27;s report covers changes from 31 Dec 2007 to the day the podcast was recorded (6 Jan 2007).&lt;&#x2F;p&gt;
&lt;h3&gt;Caching changes&lt;&#x2F;h3&gt;
&lt;p&gt;Looks like most of the changes from the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;branches&#x2F;2-1-caching&quot;&gt;2.1 caching branch&lt;&#x2F;a&gt; have been&lt;br &#x2F;&gt;
&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8546&quot;&gt;merged into the trunk&lt;&#x2F;a&gt;. Some key points:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;memcache-client has been &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;activesupport&#x2F;lib&#x2F;active_support&#x2F;vendor&#x2F;memcache-client-1.5.0&quot;&gt;vendored&lt;&#x2F;a&gt; (included in Rails directly). MemCacheStore works out of the box in Rails now, no need to install the &lt;a href=&quot;http:&#x2F;&#x2F;dev.robotcoop.com&#x2F;Libraries&#x2F;memcache-client&#x2F;&quot;&gt;memcache-client gem&lt;&#x2F;a&gt;!&lt;&#x2F;li&gt;
&lt;li&gt;The caching code has been refactored and moved into ActiveSupport (&lt;code&gt;ActiveSupport::Cache::*&lt;&#x2F;code&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;Added &lt;code&gt;ActiveRecord::Base.cache_key&lt;&#x2F;code&gt; to make it easier to cache Active Records in combination with the ActiveSupport cache libraries introduced in this changeset.&lt;&#x2F;li&gt;
&lt;li&gt;Fragment cache keys are now by default prefixed with &#x27;views&#x2F;&#x27;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Deprecation&lt;&#x2F;em&gt;: &lt;code&gt;ActionController::Base.fragment_cache_store&lt;&#x2F;code&gt; is now &lt;code&gt;ActionController::Base.cache_store&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3&gt;Fragment caching now works in RJS and Builder templates&lt;&#x2F;h3&gt;
&lt;p&gt;Yup, you couldn&#x27;t do fragment caching in non-erb views before - &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8542&quot;&gt;now you can&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;Freezing Rails now automatically updates your Rails app&lt;&#x2F;h3&gt;
&lt;p&gt;If you&#x27;re using edge Rails and use the &lt;code&gt;rails:freeze:edge&lt;&#x2F;code&gt; rake task, you probably usually forget to run (or maybe you&#x27;re not even aware of) &lt;code&gt;rake rails:update&lt;&#x2F;code&gt; to update your Rails app with the latest config&#x2F;, scripts&#x2F; and javascript files from the version of Rails you just froze to. On edge Rails, the &lt;code&gt;rake rails:freeze:edge&lt;&#x2F;code&gt; task runs the &lt;code&gt;rails:update&lt;&#x2F;code&gt; task for you. +1 for convenience!&lt;&#x2F;p&gt;
&lt;p&gt;I prefer to use &lt;a href=&quot;http:&#x2F;&#x2F;piston.rubyforge.org&#x2F;&quot;&gt;Piston&lt;&#x2F;a&gt; so I&#x27;m gonna have to keep remembering to run my &lt;code&gt;rake rails:update&lt;&#x2F;code&gt; now and then!&lt;&#x2F;p&gt;
&lt;p&gt;Check out the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8532&quot;&gt;related changeset&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;Optimizations&lt;&#x2F;h3&gt;
&lt;p&gt;Only 1 optimization in the past week worth talking about: the &lt;code&gt;ActiveRecord::Base#exists?&lt;&#x2F;code&gt; method is faster. It now uses &lt;code&gt;ActiveRecord::Base#select_all&lt;&#x2F;code&gt; instead of a more expensive &lt;code&gt;ActiveRecord::Base#find&lt;&#x2F;code&gt; that unnecessarily instantiates AR objects. (Check out the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8531&quot;&gt;related changeset&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
&lt;h3&gt;Bug fixes&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8541&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8541&lt;&#x2F;a&gt; - Fixed a nasty bug when trying to render partials with layout when done from within the site layout. Yes, you can have &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;articles&#x2F;2007&#x2F;8&#x2F;3&#x2F;what-s-new-in-edge-rails-partials-get-layouts&quot;&gt;layouts for your partials in Rails 2&lt;&#x2F;a&gt;, and yes, you can run into a bug when trying to use partial layouts in your main page layout.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8529&quot;&gt;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8529&lt;&#x2F;a&gt; - Fix &lt;code&gt;atom_feed_helper&lt;&#x2F;code&gt; to comply with the &lt;a href=&quot;http:&#x2F;&#x2F;atomenabled.org&#x2F;developers&#x2F;syndication&#x2F;atom-format-spec.php&quot;&gt;Atom specifications&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>self.plug :with =&gt; &#x27;Rails Hackfest&#x27;</title>
    <published>2008-01-03T23:24:27+00:00</published>
    <updated>2008-01-03T23:24:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/03/selfplug-with-rails-hackfest/"/>
    <id>https://chuyeow.wtf/2008/01/03/selfplug-with-rails-hackfest/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/03/selfplug-with-rails-hackfest/">&lt;p&gt;Yes, it&#x27;s a &lt;a href=&quot;http:&#x2F;&#x2F;weblog.workingwithrails.com&#x2F;2008&#x2F;1&#x2F;3&#x2F;december-hackfest-winners-announced&quot;&gt;plug for myself&lt;&#x2F;a&gt; and it&#x27;s shameless:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;rails-hackfest-dec-2007_thumb.jpg&quot; alt=&quot;Dec 2007 Rails Hackfest&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Whatever &lt;a href=&quot;http:&#x2F;&#x2F;www.zedshaw.com&#x2F;rants&#x2F;rails_is_a_ghetto.html&quot;&gt;Zed Shaw may say about Rails its community&lt;&#x2F;a&gt;, Rails has done a huge part in making web development fun again for jaded web developers (first-time web developers probably won&#x27;t be able to tell the difference), and more importantly, raising the profile of Ruby more than any other Ruby project&#x2F;library&#x2F;framework&#x2F;tool ever did (and I&#x27;m sure we&#x27;re all constantly rolling our eyeballs at the new web frameworks that&#x27;re so terribly familiarly Rails-like). Hell, I bet at least 90% of Rubyists now wouldn&#x27;t even be Rubyists if they hadn&#x27;t come across the &lt;a href=&quot;http:&#x2F;&#x2F;rubyonrails.org&#x2F;&quot;&gt;web framework that could&lt;&#x2F;a&gt; 2 or 3 years ago. So yes I&#x27;d still be contributing to Rails so that it can make my life as a web developer easier, thank you.&lt;&#x2F;p&gt;
&lt;p&gt;I think I had about 18 accepted patches in &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;hackfest&#x2F;18-monthly-december-2-7&quot;&gt;December 2007 Rails Hackfest&lt;&#x2F;a&gt; (a few of the patches were not attributed properly in the Hackfest due to technical issues with the Rails Hackfest site).&lt;&#x2F;p&gt;
&lt;p&gt;Probably the only significant patches were:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Allowing a proc to be set for &lt;code&gt;ActionController::Base.asset_host&lt;&#x2F;code&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8421&quot;&gt;changeset 8421&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;to_xml&lt;&#x2F;code&gt; should not automatically pass &lt;code&gt;:procs&lt;&#x2F;code&gt; to associations included with &lt;code&gt;:include&lt;&#x2F;code&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8258&quot;&gt;changeset 8258&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Of course Ruby 1.9 compatibility was a big deal in December 2007 since that Ruby 1.9 was targetted to be released on Christmas (changesets &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8369&quot;&gt;8369&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8399&quot;&gt;8309&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8398&quot;&gt;8398&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8397&quot;&gt;8397&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8412&quot;&gt;8412&lt;&#x2F;a&gt;). Yes, I know, Ruby 1.9 is a development release.&lt;&#x2F;p&gt;
&lt;p&gt;There were also broken tests to be fixed (changeset &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8271&quot;&gt;8271&lt;&#x2F;a&gt;), bugs to be fixed (&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8340&quot;&gt;fixing &lt;code&gt;Array#to_sentence&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;), and some refactoring (changesets &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8343&quot;&gt;8343&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8522&quot;&gt;8522&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;And what would patching Rails be without random documentation fixes (changesets &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8457&quot;&gt;8457&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8471&quot;&gt;8471&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8472&quot;&gt;8472&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8280&quot;&gt;8280&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8279&quot;&gt;8279&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8278&quot;&gt;8278&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8521&quot;&gt;8521&lt;&#x2F;a&gt;). The API documentation always needs a hand, so if you see any outdated or incorrect documentation, or think you can improve them with better examples or whatever, just &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;&quot;&gt;submit a patch&lt;&#x2F;a&gt; (it&#x27;s easy and should take you all of 3 minutes).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;workingwithrails.com&#x2F;hackfest&#x2F;21-monthly-january-2-8&quot;&gt;This month&#x27;s hackfest&lt;&#x2F;a&gt; has a terribly attractive &lt;a href=&quot;http:&#x2F;&#x2F;workingwithrails.com&#x2F;hackfest&#x2F;21-monthly-january-2-8&#x2F;prizes&quot;&gt;top prize of a RailsConf ticket&lt;&#x2F;a&gt;. Too bad I won&#x27;t be able to take part in this month&#x27;s hackfest since winners of past month&#x27;s hackfest are automatically excluded from the next&#x27;s. But maybe you can ;).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Living on the Edge (of Rails) - the pilot</title>
    <published>2008-01-02T19:30:57+00:00</published>
    <updated>2008-01-02T19:30:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2008/01/02/whats-new-on-edge-rails-the-pilot/"/>
    <id>https://chuyeow.wtf/2008/01/02/whats-new-on-edge-rails-the-pilot/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2008/01/02/whats-new-on-edge-rails-the-pilot/">&lt;p&gt;Gregg Pollack of &lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;&quot;&gt;Rails Envy&lt;&#x2F;a&gt; (the guys behind your favorite &lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;tags&#x2F;Commercials&quot;&gt;Ruby on Rails vs everything commercials&lt;&#x2F;a&gt;) asked me recently whether I could provide them with weekly updates of changes on edge Rails for the &lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;podcast&quot;&gt;Rails Envy Podcast&lt;&#x2F;a&gt; (which is often hilarious besides being informative), seeing as I am already keeping up with developments on the Rails trunk while doing my small part contributing to Rails. Of course, I responded with a +1.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;2008&#x2F;1&#x2F;2&#x2F;rails-envy-podcast-episode-012-1-2-2008&quot;&gt;The podcast is now available&lt;&#x2F;a&gt; and contains only abbreviated notes about the changes that I&#x27;d sent over to Gregg, so here&#x27;s the detailed version of changes on edge Rails from the release of Rails 2.0.2 (17 Dec 2007) to the day the podcast was recorded (30 Dec 2007).&lt;&#x2F;p&gt;
&lt;h3&gt;Noteworthy changes on edge Rails: 2007-12-17 to 2007-12-30&lt;&#x2F;h3&gt;
&lt;h4&gt;Native mongrel handler&lt;&#x2F;h4&gt;
&lt;p&gt;A native Mongrel handler has been &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8488&quot;&gt;introduced&lt;&#x2F;a&gt;. This is so that it can be worked on independent of &lt;a href=&quot;http:&#x2F;&#x2F;mongrel.rubyforge.org&#x2F;&quot;&gt;Mongrel&lt;&#x2F;a&gt;&#x27;s release cycle (the Rails handler is currently in the Mongrel codebase). &lt;a href=&quot;bitsweat.net&#x2F;&quot;&gt;Jeremy Kemper&lt;&#x2F;a&gt; (bitsweat) has already made a minor performance improvement by moving the mutex from the handler itself into the dispatcher. This means that as Rails gets more threadsafe, the Rails team can push the mutex further down so that it&#x27;s not a (scary) giant lock (the existing Mongrel Rails handler has a synchronized block around Rails&#x27; dispatcher).&lt;&#x2F;p&gt;
&lt;p&gt;Note: The native mongrel handler is not used by default at this time on edge Rails.&lt;&#x2F;p&gt;
&lt;h4&gt;Caching branch for Rails 2.1&lt;&#x2F;h4&gt;
&lt;p&gt;A &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;log&#x2F;branches&#x2F;2-1-caching&quot;&gt;caching branch&lt;&#x2F;a&gt; has been introduced, targeted for Rails 2.1. Other than being a big refactoring, there&#x27;s also native cache key management (e.g. &lt;code&gt;Product.find(5).cache_key # =&gt; &quot;products&#x2F;5&quot;&lt;&#x2F;code&gt;) and memcache integration is also being looked at.&lt;&#x2F;p&gt;
&lt;h4&gt;Ruby 1.9 compatibility continues...&lt;&#x2F;h4&gt;
&lt;p&gt;Yup, work on Ruby 1.9 compatibility for Rails continues. Rails is fortunate to have committers and contributors who are so keen on being 1.9-compatible - free performance gains are hard to turn down after all. There&#x27;s been lots of patching going on to deal with the changes in Ruby 1.9 (Unicode changes, new syntax, deprecations, etc.).&lt;&#x2F;p&gt;
&lt;p&gt;Yes, the Rails committers and contributors working on 1.9-compatibility are fully aware that Ruby 1.9 is a &lt;strong&gt;development&lt;&#x2F;strong&gt; release, but nothing&#x27;s lost in making sure Rails is compatible with a version of Ruby that will eventually be a production version of Ruby. Besides, I think most of the 1.9-compatibility contributors have a dream that sometime soon, when Ruby 1.9 becomes &quot;stable&quot; enough, we&#x27;d be running our Rails applications on Ruby 1.9 for a free performance boost.&lt;&#x2F;p&gt;
&lt;p&gt;Too bad running Rails on Ruby 1.9 is not really possible at the moment since other projects like Mongrel need to be updated for Ruby 1.9 as well, first.&lt;&#x2F;p&gt;
&lt;h4&gt;Bugfixes&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;27&#x2F;dry-in-your-functional-and-actionmailer-tests-rails-20-a-feature-a-day-7&#x2F;&quot;&gt;new TestCase subclasses&lt;&#x2F;a&gt; (&lt;code&gt;ActionController::TestCase&lt;&#x2F;code&gt;,&lt;br &#x2F;&gt;
  &lt;code&gt;ActionMailer::TestCase&lt;&#x2F;code&gt;) introduced in Rails 2 have a &lt;a href=&quot;http:&#x2F;&#x2F;quotedprintable.com&#x2F;2007&#x2F;12&#x2F;5&#x2F;potential-gotcha-with-test-setup-in-rails-2-0&quot;&gt;gotcha&lt;&#x2F;a&gt;. This has been &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8497&quot;&gt;fixed&lt;&#x2F;a&gt; quickly by &lt;a href=&quot;http:&#x2F;&#x2F;joshpeek.com&#x2F;&quot;&gt;Josh Peek&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Fixed a bug where trying to :include for a belongs_to association inferred the foreign key incorrectly from the class name, rather than from the association name (&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8456&quot;&gt;changeset&lt;&#x2F;a&gt; contributed by &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;4985-jonathan-viney&quot;&gt;Jonathan Viney&lt;&#x2F;a&gt;). Code is probably easier to understand:
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class Post &amp;lt; ActiveRecord::Base
  belongs_to :main_category, :class_name =&amp;gt; &#x27;Category&#x27;
end
&lt;p&gt;Post.find(:first, :include =&amp;gt; :main_category)&lt;&#x2F;p&gt;
&lt;h1 id=&quot;activerecord-statementinvalid-mysql-error-unknown-column&quot;&gt;=&amp;gt; ActiveRecord::StatementInvalid: Mysql::Error: Unknown column&lt;&#x2F;h1&gt;
&lt;p&gt;&#x27;posts.category&#x27; in &#x27;on clause&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4&gt;Optimizations&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8505&quot;&gt;JSON decoding is faster&lt;&#x2F;a&gt;. This helps if you&#x27;re doing a lot of JSON decoding or deserialization (such as via &lt;a href=&quot;http:&#x2F;&#x2F;api.rubyonrails.org&#x2F;classes&#x2F;ActiveRecord&#x2F;Serialization.html#M001136&quot;&gt;&lt;code&gt;ActiveRecord::Base#from_json&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;), or you are using the &lt;a href=&quot;http:&#x2F;&#x2F;api.rubyonrails.org&#x2F;classes&#x2F;ActiveResource&#x2F;Base.html#M000827&quot;&gt;JSON format for ActiveResource&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;has_many&lt;&#x2F;code&gt; associations are &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8504&quot;&gt;no longer loaded unnecessarily&lt;&#x2F;a&gt; in &lt;code&gt;after_update&lt;&#x2F;code&gt; callbacks.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3&gt;I can has feedback nao plz?&lt;&#x2F;h3&gt;
&lt;p&gt;Please leave any suggestions for improvements you may have - about anything really: format, level of detail, what you&#x27;d like to see, whatever. Until next week...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Why I love RSpec nested example groups</title>
    <published>2007-12-30T13:16:49+00:00</published>
    <updated>2007-12-30T13:16:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/30/why-i-love-rspec-nested-example-groups/"/>
    <id>https://chuyeow.wtf/2007/12/30/why-i-love-rspec-nested-example-groups/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/30/why-i-love-rspec-nested-example-groups/">&lt;p&gt;Prior to the introduction of &lt;a href=&quot;http:&#x2F;&#x2F;blog.davidchelimsky.net&#x2F;articles&#x2F;2007&#x2F;11&#x2F;29&#x2F;nested-example-groups&quot;&gt;nested example groups&lt;&#x2F;a&gt; in &lt;a href=&quot;http:&#x2F;&#x2F;rspec.info&#x2F;&quot;&gt;RSpec&lt;&#x2F;a&gt;, I&#x27;d always felt that descriptions got a little unwieldy when trying to describe the different cases and disliked specifying the &lt;code&gt;controller_name&lt;&#x2F;code&gt; repeatedly. For example (and these are real examples from real projects at work, with actual code removed for conciseness):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;describe &#x27;POST HotelDealsController#create with a valid hotel deal&#x27; do
  controller_name :hotel_deals
&lt;p&gt;before(:each) do
# ...
end&lt;&#x2F;p&gt;
&lt;p&gt;it &quot;should create and save a new hotel deal&quot; do
# ...
end
end&lt;&#x2F;p&gt;
&lt;p&gt;describe &#x27;POST HotelDealsController#create with an invalid hotel deal&#x27; do
controller_name :hotel_deals&lt;&#x2F;p&gt;
&lt;p&gt;before(:each) do
# ...
end&lt;&#x2F;p&gt;
&lt;p&gt;it &quot;should not perform any redirection&quot; do
# ...
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Nested example groups allow me to do this instead:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;describe SearchController do
  before(:each) do
    @search = mock_model(Search)
  end
&lt;p&gt;describe &quot;POST &#x27;create&#x27;&quot; do&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;it &amp;quot;should render &amp;#39;new&amp;#39; when creating an invalid search&amp;quot; do
  # ...
end

describe &amp;quot;with a valid search that has a location_id&amp;quot; do
  before(:each) do
    @search.stub!(:valid?).and_return(true)
    @search.stub!(:location_id).and_return(1)
  end

  it &amp;quot;should save a new search that has a location_id, location_code and location_name, and redirect to &amp;#39;show&amp;#39;&amp;quot; do
    # ...
  end
end

describe &amp;quot;with a valid search that doesn&amp;#39;t have a location_id&amp;quot; do
  before(:each) do
    @search.stub!(:valid?).and_return(true)
    @search.stub!(:location_id).and_return(nil)
  end

  it &amp;quot;should ask the Location model for possible locations if the search doesn&amp;#39;t have a location_id&amp;quot; do
    # ...
  end
end
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s the difference you say? Well, while it may sound trivial, I can do &lt;code&gt;describe SearchController&lt;&#x2F;code&gt; only once and nest all examples for the different actions and scenarios inside without breaking it up into separate top-level example groups where I&#x27;d need to say &lt;code&gt;controller_name :search&lt;&#x2F;code&gt; multiple times.&lt;&#x2F;p&gt;
&lt;p&gt;Another (more important) benefit is I can &lt;em&gt;progessively specify different scenarios&lt;&#x2F;em&gt; I want to test by nesting them and providing a &lt;code&gt;before&lt;&#x2F;code&gt; block to setup mocks and stubs &lt;em&gt;for that specific scenario&lt;&#x2F;em&gt;. Let&#x27;s look at what I mean with some code. Over here, I&#x27;m specifying the &lt;code&gt;create&lt;&#x2F;code&gt; action of my &lt;code&gt;SearchController&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
describe &quot;POST &#x27;create&#x27;&quot; do
  it &quot;should render &#x27;new&#x27; when creating an invalid search&quot; do
    # ...
  end
&lt;p&gt;describe &quot;with a valid search that has a location_id&quot; do
# ...
end&lt;&#x2F;p&gt;
&lt;p&gt;describe &quot;with a valid search that doesn&#x27;t have a location_id&quot; do
# ...
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;re 3 possible scenarios here: an invalid search, a valid search with a location_id, and a valid search without an location_id. I can write examples for invalid searches within the top-level example group itself (&lt;code&gt;it &quot;should render &#x27;new&#x27; when creating an invalid search&quot;&lt;&#x2F;code&gt;). Now, to test valid searches, I break out 2 nested example groups with their own &lt;code&gt;before&lt;&#x2F;code&gt; block to setup mock searches, one which has a location_id, the other doesn&#x27;t. What&#x27;s the big deal? It just feels much more organized than the first, non-nested example where a top-level example group is created for each scenario.&lt;&#x2F;p&gt;
&lt;p&gt;And I know it may not seem like much, and I don&#x27;t think there&#x27;s anything particularly wrong with non-nested examples - it&#x27;s a matter of personal preference. Nesting allows me to write examples for controllers in a saner fashion where I can say confidently to myself that &quot;all examples for XXX action go here&quot;. I&#x27;m a big believer in readable tests (if you&#x27;re on the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;&quot;&gt;Rails Trac&lt;&#x2F;a&gt; much and have seen my reviews and patches you should know), so being able to write specs where I feel they belong makes me happier, and the examples read really nicely too.&lt;&#x2F;p&gt;
&lt;p&gt;I guess what I&#x27;m really trying to say is this: when trying to add a new example to legacy specs (legacy being anything that was written more than 5 mins ago) I &lt;strong&gt;instantly know where to place it&lt;&#x2F;strong&gt; - gone are the days of going through different example groups looking for the right place to put my new specification (and often settling on just simply creating a new top-level example group). I like to think we&#x27;ve all been there.&lt;&#x2F;p&gt;
&lt;p&gt;That said, I&#x27;m not saying that deeply nested examples are a good thing. When testing Rails controllers I find that you don&#x27;t often have to go more than 3 deep to allow for all the possible scenarios. Any more would suggest that your controller is doing too much work.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>DRY in your functional and ActionMailer tests - Rails 2.0 a feature a day #7</title>
    <published>2007-12-27T18:47:06+00:00</published>
    <updated>2007-12-27T18:47:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/27/dry-in-your-functional-and-actionmailer-tests-rails-20-a-feature-a-day-7/"/>
    <id>https://chuyeow.wtf/2007/12/27/dry-in-your-functional-and-actionmailer-tests-rails-20-a-feature-a-day-7/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/27/dry-in-your-functional-and-actionmailer-tests-rails-20-a-feature-a-day-7/">&lt;p&gt;That&#x27;s right, &lt;strong&gt;D&lt;&#x2F;strong&gt;on&#x27;t &lt;strong&gt;R&lt;&#x2F;strong&gt;epeat &lt;strong&gt;Y&lt;&#x2F;strong&gt;ourself in your functional and ActionMailer tests. If you&#x27;re a Test::Unit user, this will probably look familiar to you when writing Rails functional tests (for your controllers):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class PostsControllerTest &amp;lt; Test::Unit::TestCase
  def setup
    @controller = PostsController.new
    @request    = ActionController::TestRequest.new
    @response   = ActionController::TestResponse.new
  end
&lt;p&gt;def test_should_not_explode
# Invariably sexy test code.
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You&#x27;d probably have noticed how &lt;code&gt;setup&lt;&#x2F;code&gt; &lt;em&gt;always&lt;&#x2F;em&gt; sets the &lt;code&gt;@controller&lt;&#x2F;code&gt;, &lt;code&gt;@request&lt;&#x2F;code&gt; and &lt;code&gt;@response&lt;&#x2F;code&gt; instance variables in all your controller tests. In Rails 2.0, you can instead subclass &lt;code&gt;ActionController::TestCase&lt;&#x2F;code&gt; (in turn a subclass of &lt;code&gt;Test::Unit::TestCase&lt;&#x2F;code&gt;) in your test cases and avoid repeating the instance variable assignments.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class PostsControllerTest &amp;lt; ActionController::TestCase
  # No need to define setup.
&lt;p&gt;def test_should_not_explode
# Invariably sexy test code.
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Isn&#x27;t that much better?&lt;&#x2F;p&gt;
&lt;p&gt;Watch out for a gotcha though, when you actually do need to define a &lt;code&gt;setup&lt;&#x2F;code&gt; method (like when you need to setup several other things before your tests run), as &lt;a href=&quot;http:&#x2F;&#x2F;quotedprintable.com&#x2F;2007&#x2F;12&#x2F;5&#x2F;potential-gotcha-with-test-setup-in-rails-2-0&quot;&gt;Jeffrey Allan Hardy reports&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8497&quot;&gt;The issue has been resolved&lt;&#x2F;a&gt; on edge Rails. If you&#x27;re not using edge Rails, you should remember to always call &lt;code&gt;super&lt;&#x2F;code&gt; in your &lt;code&gt;setup&lt;&#x2F;code&gt; method should you define one:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class PostsControllerTest &amp;lt; ActionController::TestCase
  def setup
    super
    @user = users(:konata)
  end
&lt;p&gt;def test_should_not_explode
# Invariably sexy test code.
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A similar subclass of &lt;code&gt;Test::Unit&lt;&#x2F;code&gt;, &lt;code&gt;ActionMailer::TestCase&lt;&#x2F;code&gt; is available for your ActionMailer unit tests as well. That means you can replace this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class UserMailerTest &amp;lt; Test::Unit::TestCase
  include ActionMailer::Quoting
&lt;p&gt;def setup
ActionMailer::Base.delivery_method = :test
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.deliveries = []&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;@expected = TMail::Mail.new
@expected.set_content_type &amp;quot;text&amp;quot;, &amp;quot;plain&amp;quot;, { &amp;quot;charset&amp;quot; =&amp;gt; &amp;quot;utf-8&amp;quot; }
@expected.mime_version = &amp;#39;1.0&amp;#39;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;end&lt;&#x2F;p&gt;
&lt;p&gt;def test_signup
# Test code.
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;with this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class UserMailerTest &amp;lt; ActionMailer::TestCase
  def test_signup
    # Test code.
  end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For the geeks among you, check out the related &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8022&quot;&gt;changeset&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;About the contributor, Michael Koziarski&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.koziarski.net&#x2F;&quot;&gt;Michael Koziarski&lt;&#x2F;a&gt;, better know as nzkoz, is a long-time &lt;a href=&quot;http:&#x2F;&#x2F;rubyonrails.com&#x2F;core&quot;&gt;Rails core&lt;&#x2F;a&gt; committer. Michael has done a signficant amount of work improving the performance of ActiveRecord for Rails 2.0 so we have him to thank for a good portion of the optimization work done on ActiveRecord. He also keeps a fairly new &lt;a href=&quot;http:&#x2F;&#x2F;www.koziarski.net&#x2F;&quot;&gt;personal blog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Ruby 1.9.0 has been released</title>
    <published>2007-12-26T00:15:49+00:00</published>
    <updated>2007-12-26T00:15:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/26/ruby-190-has-been-released/"/>
    <id>https://chuyeow.wtf/2007/12/26/ruby-190-has-been-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/26/ruby-190-has-been-released/">&lt;p&gt;Just in the nick of time for the Christmas target, the Ruby core team has released Ruby 1.9.0 - &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Yukihiro_Matsumoto&quot;&gt;Matz&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.ruby-forum.com&#x2F;topic&#x2F;136553&quot;&gt;announced the release on the ruby-talk mailing list&lt;&#x2F;a&gt; not too long ago.&lt;&#x2F;p&gt;
&lt;p&gt;Rubygem and Ruby library developers, now&#x27;s the time to get down to making your Ruby code compatible with 1.9.0.&lt;&#x2F;p&gt;
&lt;p&gt;Rails is not too far from being compatible with 1.9, thanks to the efforts of &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;5323-jeremy-kemper&quot;&gt;Jeremy Kemper&lt;&#x2F;a&gt; and a few other contributors. Mongrel is not quite there yet though (I use mongrel for my Rails applications, and I think at least 50% of you do too). So while running your Rails apps on Ruby 1.9 is not an easy task right now (unless you enjoy lots of monkey patching), let&#x27;s hope the full 1.9.0 release will inspire more Ruby developers to get their libraries compatible so we can all enjoy the &lt;a href=&quot;http:&#x2F;&#x2F;antoniocangiano.com&#x2F;2007&#x2F;12&#x2F;03&#x2F;the-great-ruby-shootout&#x2F;&quot;&gt;big speed boost in Ruby 1.9&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Very nice (if somewhat geeky) Christmas present from the Ruby core and contributors!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Generating migrations gets easier - Rails 2.0 a feature a day #6</title>
    <published>2007-12-24T16:58:07+00:00</published>
    <updated>2007-12-24T16:58:07+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/24/generating-migrations-gets-easier-rails-20-a-feature-a-day-6/"/>
    <id>https://chuyeow.wtf/2007/12/24/generating-migrations-gets-easier-rails-20-a-feature-a-day-6/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/24/generating-migrations-gets-easier-rails-20-a-feature-a-day-6/">&lt;p&gt;You may not have noticed this yet, but Rails 2.0 has a new convenient syntax for generating ActiveRecord migrations. Go ahead, run the migration generator with &lt;code&gt;script&#x2F;generate migration&lt;&#x2F;code&gt;. I&#x27;ll wait.&lt;&#x2F;p&gt;
&lt;p&gt;Yup, you can now specify the columns you want to add in your migration by passing attribute&#x2F;type pairs to the migration generator. Ergo,&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;script&#x2F;generate migration AddMoreToAnime episodes:integer licensed:boolean&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;will generate a migration like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class AddMoreToAnime &amp;lt; ActiveRecord::Migration
  def self.up
    add_column :animes, :episodes, :integer
    add_column :animes, :licensed, :boolean
  end
&lt;p&gt;def self.down
remove_column :animes, :licensed
remove_column :animes, :episodes
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This ties in pretty nicely with the syntax for the model generator (&lt;code&gt;script&#x2F;generate model&lt;&#x2F;code&gt;), which also accepts attribute pairs. Tiny change but &quot;it&#x27;s all about consistency&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;For the geeks among you, check out the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7422&quot;&gt;related changeset&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9166&quot;&gt;ticket&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;About the contributor, Pratik Naik&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;m.onkey.org&#x2F;&quot;&gt;Pratik Naik&lt;&#x2F;a&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;workingwithrails.com&#x2F;recommendation&#x2F;new&#x2F;person&#x2F;5424-pratik-naik&quot;&gt;WorkingWithRails profile&lt;&#x2F;a&gt;), probably better known as lifofifo or just lifo, is an active Rails contributor and can be found on &lt;a href=&quot;irc:&#x2F;&#x2F;irc.freenode.net&#x2F;rails-contrib&quot;&gt;#rails-contrib&lt;&#x2F;a&gt; and &lt;a href=&quot;irc:&#x2F;&#x2F;irc.freenode.net&#x2F;rubyonrails&quot;&gt;#rubyonrails&lt;&#x2F;a&gt; nearly 24&#x2F;7. Almost everyone who&#x27;s used Rails has used code that lifo has written. Oh, and lifo also &lt;a href=&quot;http:&#x2F;&#x2F;weblog.workingwithrails.com&#x2F;2007&#x2F;11&#x2F;1&#x2F;hackfest-winner-interview-pratik-naik&quot;&gt;won one of the monthly Rails Hackfests&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;He also keeps a &lt;a href=&quot;http:&#x2F;&#x2F;m.onkey.org&#x2F;&quot;&gt;pretty good blog&lt;&#x2F;a&gt; where he posts mostly on Rails hacking and tips.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Rails 2 a feature a day - update</title>
    <published>2007-12-23T12:14:51+00:00</published>
    <updated>2007-12-23T12:14:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/23/rails-2-a-feature-a-day-update/"/>
    <id>https://chuyeow.wtf/2007/12/23/rails-2-a-feature-a-day-update/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/23/rails-2-a-feature-a-day-update/">&lt;p&gt;In case anyone is wondering about the pause in &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;09&#x2F;rails-20-a-feature-a-day&#x2F;&quot;&gt;Rails 2.0 - a feature a day&lt;&#x2F;a&gt; posts, yes, I know, I&#x27;ve not been writing any posts for a week or so. I&#x27;ll be posting more actively again from tomorrow - just taking a short break due to general lethargy these few days. And &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;search?q=chuyeow&amp;changeset=on&amp;ticket=on&quot;&gt;submitting patches&lt;&#x2F;a&gt; &amp;gt; blogging.&lt;&#x2F;p&gt;
&lt;p&gt;On a somewhat related note, I&#x27;ll be posting weekly updates of edge Rails changes in a tie-up with a particular Rails podcast from the beginning of next year - not gonna say which one!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Rails 2.0.2 released, so what&#x27;s new?</title>
    <published>2007-12-17T11:09:13+00:00</published>
    <updated>2007-12-17T11:09:13+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/17/rails-202-released-so-whats-new/"/>
    <id>https://chuyeow.wtf/2007/12/17/rails-202-released-so-whats-new/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/17/rails-202-released-so-whats-new/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8430&quot;&gt;Rails 2.0.2 was tagged not too long ago&lt;&#x2F;a&gt; and will hit the gem servers soon I expect. Being a minor point release there aren&#x27;t many changes, but here&#x27;re the ones I feel are worth mentioning:&lt;&#x2F;p&gt;
&lt;h3&gt;ActionPack changes&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Configurable asset hosts&lt;&#x2F;strong&gt;: You can now pass a proc to &lt;code&gt;ActionController::Base.asset_host&lt;&#x2F;code&gt;. This allows you to get by the hard-coded assumption that you have 4 asset hosts numbered 0-3 when using the &#x27;%d&#x27; wildcard (introduced in Rails 2.0.1).&lt;&#x2F;p&gt;
&lt;p&gt;I &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;10521&quot;&gt;contributed this patch&lt;&#x2F;a&gt; so I&#x27;m gonna be lazy and copy and paste most of the documentation I wrote for patch.&lt;&#x2F;p&gt;
&lt;p&gt;The example proc below generates http:&#x2F;&#x2F;assets1.example.com and http:&#x2F;&#x2F;assets2.example.com randomly.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;ActionController::Base.asset_host = Proc.new { |source| &quot;http:&#x2F;&#x2F;assets#{rand(2) + 1}.example.com&quot; }
image_tag(&quot;rails.png&quot;)
  =&amp;gt; &amp;lt;img src=&quot;http:&#x2F;&#x2F;assets2.example.com&#x2F;images&#x2F;rails.png&quot; alt=&quot;Rails&quot; &#x2F;&amp;gt;
stylesheet_include_tag(&quot;application&quot;)
  =&amp;gt; &amp;lt;link href=&quot;http:&#x2F;&#x2F;assets1.example.com&#x2F;stylesheets&#x2F;application.css&quot; media=&quot;screen&quot; rel=&quot;stylesheet&quot; type=&quot;text&#x2F;css&quot; &#x2F;&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The proc also takes a single &lt;code&gt;source&lt;&#x2F;code&gt; parameter which is the path of the source asset. This can be used to generate a particular asset host depending on the asset path. This is useful if you have, say, images hosted elsewhere, or you want an SEO-friendly URL for your images:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;ActionController::Base.asset_host = Proc.new { |source|
  if source.starts_with?(&#x27;&#x2F;images&#x27;)
    &quot;http:&#x2F;&#x2F;images.example.com&quot;
  else
    &quot;http:&#x2F;&#x2F;assets.example.com&quot;
  end
}
image_tag(&quot;rails.png&quot;)
  =&amp;gt; &amp;lt;img src=&quot;http:&#x2F;&#x2F;images.example.com&#x2F;images&#x2F;rails.png&quot; alt=&quot;Rails&quot; &#x2F;&amp;gt;
stylesheet_include_tag(&quot;application&quot;)
  =&amp;gt; &amp;lt;link href=&quot;http:&#x2F;&#x2F;assets.example.com&#x2F;stylesheets&#x2F;application.css&quot; media=&quot;screen&quot; rel=&quot;stylesheet&quot; type=&quot;text&#x2F;css&quot; &#x2F;&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Asset cache directories are automatically created&lt;&#x2F;strong&gt;: In Rails 2.0.1, if you tried to cache your assets (javascripts and stylesheets) in a subdirectory (example below), you either need to check it into your source control or have your deployment tool (Capistrano, etc.) create it for you. &lt;a href=&quot;http:&#x2F;&#x2F;joshpeek.com&#x2F;&quot;&gt;Josh Peek&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;10337&quot;&gt;contributed a patch&lt;&#x2F;a&gt; that created the subdirectory instead so you can do something like:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;javascript_include_tag(:all, :cache =&gt; &quot;cache&#x2F;money&quot;)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;and not have to bother about creating the &#x27;cache&#x27; subdirectory.&lt;&#x2F;p&gt;
&lt;h3&gt;Railties changes&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Default database is now SQLite3&lt;&#x2F;strong&gt;: The default database is now SQLite3 instead of MySQL. Running &#x27;rails takeover_the_world_app&#x27; will now come with a database.yml that&#x27;s setup for SQLite3. To get the old behavior (where it&#x27;s preconfigured for MySQL), run &lt;code&gt;rails -d mysql takeover_the_world_app&lt;&#x2F;code&gt; instead. This is mostly to make this &quot;just work&quot; on Mac OS X Leopard, where SQLite3 is already installed with the OS.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Template loading is faster&lt;&#x2F;strong&gt;: DHH has turned on &lt;code&gt;ActionView::Base.cache_template_loading&lt;&#x2F;code&gt; by default in the &lt;code&gt;production.rb&lt;&#x2F;code&gt; environment config file that basically means that Rails no longer does file system stat calls when loading templates. The downside is that you have to restart your Rails application to see templates changes in production mode, but it&#x27;s not really that big an issue since no one should be editing templates anyway &#x27;live&#x27; in a production application.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;New rake tasks for migrations&lt;&#x2F;strong&gt;: &lt;code&gt;rake db:migrate:redo&lt;&#x2F;code&gt; to undo your last migration and re-run it - very useful when developing migrations (when you screw up, that is). &lt;code&gt;rake db:migrate:reset&lt;&#x2F;code&gt; drops the database, re-creates it, and then runs all migrations.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;rake task for generating secret keys&lt;&#x2F;strong&gt;: &lt;code&gt;rake secret&lt;&#x2F;code&gt; to generate a secure key that you can use for cookie sessions. This is useful for updating Rails applications from 1.x to 2.x, which uses cookie-based sessions by default and requires a secret key.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;config.action_controller.session = {
  :session_key =&amp;gt; &#x27;_your_app_session&#x27;,
  :secret      =&amp;gt; &#x27;some super long string that you can generate with the rake secret task&#x27;
}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Personally I just use super long quotes from Family Guy.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s it! For the curious, expect Ruby 1.9 compatibility, improved caching, and big ActionPack and rendering refactoring changes in Rails 2.1.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Sensible GROUP BYs in ActiveRecord::Calculations - Rails 2.0 a feature a day #5</title>
    <published>2007-12-16T15:16:12+00:00</published>
    <updated>2007-12-16T15:16:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/16/sensible-group-bys-in-activerecordcalculations/"/>
    <id>https://chuyeow.wtf/2007/12/16/sensible-group-bys-in-activerecordcalculations/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/16/sensible-group-bys-in-activerecordcalculations/">&lt;p&gt;Doing GROUP BYs in ActiveRecord has always been tricky. There&#x27;s a lot of &quot;magic&quot; in ActiveRecord and room for untested edge cases. Thankfully, Rails also has a squadron of eagle-eyed contributors who are on hand to fix unforeseen errors.&lt;&#x2F;p&gt;
&lt;p&gt;For example, if you wanted to do this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class Click &amp;lt; ActiveRecord::Base
  belongs_to :site  # site_id foreign key is a String, e.g. &#x27;www.rubyonrails.org&#x27;
end
&lt;h1 id=&quot;now-try-counting-the-number-of-clicks-grouped-by-site&quot;&gt;Now, try counting the number of clicks, grouped by site.&lt;&#x2F;h1&gt;
&lt;p&gt;Click.count(:all, :group =&amp;gt; :site)&lt;&#x2F;p&gt;
&lt;h1 id=&quot;nil-1-nil-3&quot;&gt;=&amp;gt; [[nil, 1], [nil, 3]]&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This is a surprisingly common thing to do especially when you are producing reports or statistics of any kind and unfortunately decided to go with a non-(auto)numeric foreign key. As you may have noticed, the sites were returned as &lt;code&gt;nil&lt;&#x2F;code&gt; which is totally unhelpful. Thankfully, this has been &lt;a href=&quot;&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;6919&gt;fixed in Rails 2.0:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Click.count(:all, :group =&gt; :site)
# =&gt; [[nil, 1], [&#x27;www.site, 3]]&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3&gt;GROUP BY and :foreign_key don&#x27;t mix&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;This change is NOT in Rails 2.0.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you wanted to do GROUP BYs in your ActiveRecord models (via the &lt;code&gt;:group&lt;&#x2F;code&gt; option), you had to take note of one particular gotcha. For example, with an ActiveRecord model like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class Anime &amp;lt; ActiveRecord::Base
  belongs_to :japanese_studio, :class_name =&amp;gt; &#x27;Studio&#x27;, :foreign_key =&amp;gt; &#x27;studio_id&#x27;
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Note that we specified the &lt;code&gt;:foreign_key&lt;&#x2F;code&gt; option since it can&#x27;t be inferred from the association name of &#x27;japanese_studio&#x27;. If we wanted to &lt;code&gt;count&lt;&#x2F;code&gt;ing the number of anime grouped by studio though, we&#x27;re in big trouble:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Anime.count(:all, :group =&gt; :japanese_studio)
# ActiveRecord fails and mumbles about an unknown &quot;japanese_studio_id&quot; key.
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Basically what happened is Rails did not use the specified foreign key column of &#x27;studio_id&#x27;, inferring it instead from the association name of &#x27;japanese_studio&#x27;. This is not yet fixed but there&#x27;s already a &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;8117&quot;&gt;patch&lt;&#x2F;a&gt; ready for it at the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;&quot;&gt;Rails issue tracker&lt;&#x2F;a&gt;. In fact, I&#x27;m gonna &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.org&#x2F;2007&#x2F;9&#x2F;15&#x2F;how-to-get-a-patch-into-rails&quot;&gt;verify it&lt;&#x2F;a&gt; right after posting this.&lt;&#x2F;p&gt;
&lt;h3&gt;About the contributor, Kamal Fariz&lt;&#x2F;h3&gt;
&lt;p&gt;I thought it was time to cover Rails 2.0 contributions by someone closer to home (&quot;home&quot; being my home, &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Singapore&quot;&gt;Singapore&lt;&#x2F;a&gt;) so I singled out &lt;a href=&quot;http:&#x2F;&#x2F;blog.bitfluent.com&#x2F;&quot;&gt;Kamal Fariz&lt;&#x2F;a&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;4207-kamal-fariz&quot;&gt;WorkingWithRails profile&lt;&#x2F;a&gt;), a Rails developer working in Malaysia for a &lt;a href=&quot;http:&#x2F;&#x2F;blog.ror.com.my&#x2F;&quot;&gt;Rails shop&lt;&#x2F;a&gt;. Kamal&#x27;s also a former &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;hackfest&quot;&gt;Rails Hackfest&lt;&#x2F;a&gt; winner (read the &lt;a href=&quot;http:&#x2F;&#x2F;weblog.workingwithrails.com&#x2F;2007&#x2F;7&#x2F;25&#x2F;hackfest-winner-interview-kamal-fariz&quot;&gt;post-Rails Hackfest interview&lt;&#x2F;a&gt;). Kamal is also an active member of the &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.com&#x2F;group&#x2F;malaysia-rb?hl=en&quot;&gt;Malaysia Ruby Brigade&lt;&#x2F;a&gt; (I guess it&#x27;s not called a &quot;Ruby User Group&quot; since &quot;RUG&quot; sounds rather unglamorous).&lt;&#x2F;p&gt;
&lt;p&gt;Wow look at the number of parentheses I used in the last paragraph. For no reason whatsoever here&#x27;s a lolcats picture:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;PARENTHESECATS128416793414177500.jpg&quot; alt=&quot;Parenthese cats are parenthetic&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>ActiveRecord::Base.with_scope { :only =&gt; &#x27;in your model&#x27; } - Rails 2.0 a feature a day #4</title>
    <published>2007-12-16T13:44:34+00:00</published>
    <updated>2007-12-16T13:44:34+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/16/activerecordbasewith_scope-only-in-your-model-rails-20-a-feature-a-day-4/"/>
    <id>https://chuyeow.wtf/2007/12/16/activerecordbasewith_scope-only-in-your-model-rails-20-a-feature-a-day-4/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/16/activerecordbasewith_scope-only-in-your-model-rails-20-a-feature-a-day-4/">&lt;p&gt;Today&#x27;s (un)feature covers the oft-abused and misunderstood &lt;code&gt;with_scope&lt;&#x2F;code&gt; method. The excellent err.the_blog had a post on &lt;a href=&quot;http:&#x2F;&#x2F;errtheblog.com&#x2F;posts&#x2F;39-withscope-with-scope&quot;&gt;how you should be using &lt;code&gt;with_scope&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; (yes, only use it in your ActiveRecord models, &lt;em&gt;not&lt;&#x2F;em&gt; in your controllers or filters). Yes that blog post may have been written a long time back but it&#x27;s still applicable to Rails 2.0.&lt;&#x2F;p&gt;
&lt;p&gt;With Rails 2.0, the &lt;code&gt;with_scope&lt;&#x2F;code&gt; method is now &lt;code&gt;protected&lt;&#x2F;code&gt;, meaning that you can no longer use it in your controllers (unless you use the &lt;code&gt;#send(:with_scope)&lt;&#x2F;code&gt;, or &lt;code&gt;#send!(:with_scope)&lt;&#x2F;code&gt; in Ruby 1.9). I&#x27;m not even going to show you how you could use it in your controllers since you really shouldn&#x27;t (unless you know what you are doing).&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s what &lt;code&gt;with_scope&lt;&#x2F;code&gt; allows you to do:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class SiteOwner &amp;lt; ActiveRecord::Base
&lt;h1 id=&quot;returns-list-of-distinct-active-sites&quot;&gt;Returns list of distinct active sites.&lt;&#x2F;h1&gt;
&lt;p&gt;def active_sites(*args)
with_scope :find =&amp;gt; { :select =&amp;gt; &#x27;DISTINCT(site)&#x27;, :conditions =&amp;gt; { :active =&amp;gt; true } } do
find(*args).collect(&amp;amp;:site)
end
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And even better example, stolen from the &lt;a href=&quot;http:&#x2F;&#x2F;errtheblog.com&#x2F;posts&#x2F;39-withscope-with-scope&quot;&gt;err.the_blog post&lt;&#x2F;a&gt; mentioned above, is re-using scopes:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class Movie &amp;lt; ActiveRecord::Base
  def self.find_playing(*args)
    with_playing do
      find(*args)
    end
  end
&lt;p&gt;def self.find_playing_by_id
with_playing do
find_by_id(*args)
end
end&lt;&#x2F;p&gt;
&lt;p&gt;def self.with_playing
with_scope :find =&amp;gt; { :conditions =&amp;gt; [ state = ? AND visible = ?, NOW_PLAYING, true ] } do
yield
end
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I tend to use that a lot combined with &lt;code&gt;method_missing&lt;&#x2F;code&gt; magic (also from the &lt;a href=&quot;http:&#x2F;&#x2F;errtheblog.com&#x2F;posts&#x2F;39-withscope-with-scope&quot;&gt;err.the_blog post&lt;&#x2F;a&gt;) to allow me to do things like &lt;code&gt;Movie.find_playing_by_name&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def self.method_missing(method, *args, &amp;amp;block)
  if method.to_s =~ &#x2F;^find_(all_)?playing_by&#x2F;
    with_playing do
      super(method.to_s.sub(&#x27;playing_&#x27;, &#x27;&#x27;), *args, &amp;amp;block)
    end
  else
    super(method, *args, &amp;amp;block)
  end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you prefer to get these for free, check out the the &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;scope-out-rails&#x2F;&quot;&gt;Rails scope-out plugin&lt;&#x2F;a&gt; implements many of the ideas in the err.the_blog post.&lt;&#x2F;p&gt;
&lt;h3&gt;About the contributor, Josh Peek&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;joshpeek.com&#x2F;&quot;&gt;Josh Peek&lt;&#x2F;a&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;6183-josh-peek&quot;&gt;WorkingWithRails profile&lt;&#x2F;a&gt;) was the man behind the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;8524&quot;&gt;&quot;protection&quot; of with_scope&lt;&#x2F;a&gt;. This is not Josh&#x27;s greatest contribution to Rails, of course - Josh has been a very productive and &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;report&#x2F;37?DATE=2007-01-01&quot;&gt;active&lt;&#x2F;a&gt; Rails contributor since the very beginning. A winner of one of the monthly &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;hackfest&quot;&gt;Rails Hackfest&lt;&#x2F;a&gt;, you can read up on the ever-elusive (I say &quot;elusive&quot; because he doesn&#x27;t have a blog - it&#x27;s just patch after patch after patch) Josh Peek in this &lt;a href=&quot;http:&#x2F;&#x2F;weblog.workingwithrails.com&#x2F;2007&#x2F;8&#x2F;6&#x2F;hackfest-winner-interview-josh-peek&quot;&gt;post-Rails Hackfest interview&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Josh is also the man behind the deprecation and &quot;plugin-izing&quot; of dynamic scaffolding and pagination (yes, those are gone from Rails 2.0) among a great number of other patches and test coverage improvements. Right now, Josh appears to be &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.ca&#x2F;group&#x2F;rubyonrails-core&#x2F;browse_thread&#x2F;thread&#x2F;13bba76b624c276e&quot;&gt;working on refactoring ActionView&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;Outro&lt;&#x2F;h3&gt;
&lt;p&gt;Apologies for the late-on-arrival &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;09&#x2F;rails-20-a-feature-a-day&#x2F;&quot;&gt;Rails 2.0 a feature a day&lt;&#x2F;a&gt; posts, but such is life. &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;16&#x2F;sensible-group-bys-in-activerecordcalculations&#x2F;&quot;&gt;Feature #5&lt;&#x2F;a&gt; follows immediately after :)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Concatenate your stylesheets and JavaScripts in 3 seconds - Rails 2.0 a feature a day #3</title>
    <published>2007-12-12T23:25:39+00:00</published>
    <updated>2007-12-12T23:25:39+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/12/concatenate-your-stylesheets-and-javascripts-in-3-seconds-rails-20-a-feature-a-day-3/"/>
    <id>https://chuyeow.wtf/2007/12/12/concatenate-your-stylesheets-and-javascripts-in-3-seconds-rails-20-a-feature-a-day-3/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/12/concatenate-your-stylesheets-and-javascripts-in-3-seconds-rails-20-a-feature-a-day-3/">&lt;p&gt;I don&#x27;t think I need to explain how &lt;a href=&quot;http:&#x2F;&#x2F;developer.yahoo.com&#x2F;performance&#x2F;rules.html#num_http&quot;&gt;concatenating your 5 stylesheets and 12 JavaScript files into single files&lt;&#x2F;a&gt; each makes your webpages load faster. Unless you&#x27;re using multiple asset hosts (Rails 2 allows for &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;6161&quot;&gt;multiple asset hosts&lt;&#x2F;a&gt;), then it becomes tricky to say for sure which method is better, but I digress.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;re a bunch of really useful plugins that help you bundle your JS and CSS files, most of them offering minifying&#x2F;packing of JS and stripping of comments and whitespace in CSS as well. I was a big fan (still love it) of &lt;a href=&quot;http:&#x2F;&#x2F;synthesis.sbecker.net&#x2F;pages&#x2F;asset_packager&quot;&gt;Asset Packager&lt;&#x2F;a&gt;, but newer plugins like &lt;a href=&quot;http:&#x2F;&#x2F;blog.jcoglan.com&#x2F;packr&#x2F;&quot;&gt;PackR&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;bundle-fu&#x2F;&quot;&gt;Bundle-fu&lt;&#x2F;a&gt; work great too.&lt;&#x2F;p&gt;
&lt;p&gt;With Rails 2.0 though, unless you want the minifying&#x2F;packing&#x2F;comment-stripping features, you can do away with installing a packager plugin. Remember your trusty &lt;code&gt;javascript_include_tag&lt;&#x2F;code&gt; and &lt;code&gt;stylesheet_link_tag&lt;&#x2F;code&gt;? They now accept a &lt;code&gt;:cache&lt;&#x2F;code&gt; option:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# :cache =&amp;gt; true creates a cached javascript named all.js.
&amp;lt;%= javascript_include_tag :all, :cache =&amp;gt; true %&amp;gt;
# This becomes:
# &amp;lt;script type=&quot;text&#x2F;javascript&quot; src=&quot;&#x2F;javascripts&#x2F;all.js&quot;&amp;gt;&amp;lt;&#x2F;script&amp;gt;
&lt;h1 id=&quot;you-can-name-your-javascript-too-by-passing-a-name-instead-of-true&quot;&gt;You can name your javascript too, by passing a name instead of true.&lt;&#x2F;h1&gt;
&lt;p&gt;&amp;lt;%= javascript_include_tag &#x27;jquery&#x27;, &#x27;swfobject&#x27;, &#x27;application&#x27;, :cache =&amp;gt; &#x27;base&#x27; %&amp;gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;this-becomes&quot;&gt;This becomes:&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;script-type-text-javascript-src-javascripts-base-js-script&quot;&gt;&amp;lt;script type=&quot;text&#x2F;javascript&quot; src=&quot;&#x2F;javascripts&#x2F;base.js&quot;&amp;gt;&amp;lt;&#x2F;script&amp;gt;&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;same-deal-for-stylesheets&quot;&gt;Same deal for stylesheets...&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;cache-true-creates-a-stylesheet-named-all-css&quot;&gt;:cache =&amp;gt; true creates a stylesheet named all.css.&lt;&#x2F;h1&gt;
&lt;p&gt;&amp;lt;%= stylesheet_link_tag :all, :cache =&amp;gt; true %&amp;gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;this-becomes-1&quot;&gt;This becomes:&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;link-href-stylesheets-all-css-media-screen-rel-stylesheet-type-text-css&quot;&gt;&amp;lt;link href=&quot;&#x2F;stylesheets&#x2F;all.css&quot;  media=&quot;screen&quot; rel=&quot;Stylesheet&quot; type=&quot;text&#x2F;css&quot; &#x2F;&amp;gt;&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;you-can-name-your-stylesheet-like-for-javascript-include-tag&quot;&gt;You can name your stylesheet like for javascript_include_tag.&lt;&#x2F;h1&gt;
&lt;p&gt;&amp;lt;%= stylesheet_link_tag &#x27;yui&#x2F;reset-fonts-grids&#x27;, &#x27;application&#x27;, :cache =&amp;gt; &#x27;styles&#x27; %&amp;gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;this-becomes-2&quot;&gt;This becomes:&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;link-href-stylesheets-styles-css-media-screen-rel-stylesheet-type-text-css&quot;&gt;&amp;lt;link href=&quot;&#x2F;stylesheets&#x2F;styles.css&quot;  media=&quot;screen&quot; rel=&quot;Stylesheet&quot; type=&quot;text&#x2F;css&quot; &#x2F;&amp;gt;&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Of course, this only takes place if caching is turned on (&lt;code&gt;ActionController::Base.perform_caching&lt;&#x2F;code&gt;), which is on by default in the production environment and off in the development environment.&lt;&#x2F;p&gt;
&lt;p&gt;For those who want to look at some code, check out &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;6164&quot;&gt;the changeset&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;About the contributor, DHH&lt;&#x2F;h3&gt;
&lt;p&gt;Well, &lt;a href=&quot;http:&#x2F;&#x2F;loudthinking.com&#x2F;&quot;&gt;DHH&lt;&#x2F;a&gt; hardly needs any mention. David has_one &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;David_Heinemeier_Hansson&quot;&gt;Wikipedia entry&lt;&#x2F;a&gt;. Nice little touch on this new feature though, I love the convenience.&lt;&#x2F;p&gt;
&lt;p&gt;I promise, like &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;09&#x2F;rails-20-a-feature-a-day&#x2F;&quot;&gt;I&#x27;d said before&lt;&#x2F;a&gt;, to cover contributions by someone less &quot;mainstream&quot; in the next &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;09&#x2F;rails-20-a-feature-a-day&#x2F;&quot;&gt;Rails 2 &quot;feature a day&quot;&lt;&#x2F;a&gt; blog post.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>gchartrb = Ruby + Google Chart API</title>
    <published>2007-12-12T00:22:27+00:00</published>
    <updated>2007-12-12T00:22:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/12/gchartrb-ruby-google-chart-api/"/>
    <id>https://chuyeow.wtf/2007/12/12/gchartrb-ruby-google-chart-api/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/12/gchartrb-ruby-google-chart-api/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;apis&#x2F;chart&#x2F;&quot;&gt;Google Chart API&lt;&#x2F;a&gt; looks quite useful. I&#x27;ve used &lt;a href=&quot;http:&#x2F;&#x2F;nubyonrails.com&#x2F;pages&#x2F;gruff&quot;&gt;Gruff&lt;&#x2F;a&gt; to generate graphs before but this looks way easier (and much lighter on the server without all that ImageMagick magic!) I&#x27;ll have to play with it someday - if only I didn&#x27;t have to mess with those &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;apis&#x2F;chart&#x2F;#url_format&quot;&gt;URL params&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Well, &lt;a href=&quot;http:&#x2F;&#x2F;blog.deepak.jois.name&#x2F;&quot;&gt;Deepak Jois&lt;&#x2F;a&gt; from &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.com&#x2F;group&#x2F;singapore-rb&#x2F;&quot;&gt;singapore.rb&lt;&#x2F;a&gt; (the local Ruby user group) recently &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.com&#x2F;group&#x2F;singapore-rb&#x2F;browse_thread&#x2F;thread&#x2F;47e81778350c37bb&quot;&gt;announced&lt;&#x2F;a&gt; a Ruby wrapper around the Google Chart API: &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;gchartrb&#x2F;&quot;&gt;gchartrb&lt;&#x2F;a&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;gchartrb.rubyforge.org&#x2F;&quot;&gt;rdocs&lt;&#x2F;a&gt;). You can get it as a rubygem, just run:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;sudo gem install gchartrb&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Looking good so far and I dig the familiarity - Deepak says the API is Gruff-inspired and it tells. If you need a charting solution (for reporting or whatever), this is a gem to consider.&lt;&#x2F;p&gt;
&lt;p&gt;Ah yup, there&#x27;ll be no &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;09&#x2F;rails-20-a-feature-a-day&#x2F;&quot;&gt;Rails 2 feature&lt;&#x2F;a&gt; today - just submitted a couple of Ruby 1.9 compatibility patches for Rails and feeling a little bummed out now (&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;activesupport&#x2F;lib&#x2F;active_support&#x2F;dependencies.rb&quot;&gt;dependency handling&lt;&#x2F;a&gt; is not that pleasant in Rails). &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;1689&quot;&gt;Rails&#x27; Ruby 1.9 compatibility&lt;&#x2F;a&gt; needs you!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Declarative exception-handling in your controllers  - Rails 2.0 a feature a day #2</title>
    <published>2007-12-10T23:58:01+00:00</published>
    <updated>2007-12-10T23:58:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/10/declarative-exception-handling-in-your-controllers-rails-20-a-feature-a-day-2/"/>
    <id>https://chuyeow.wtf/2007/12/10/declarative-exception-handling-in-your-controllers-rails-20-a-feature-a-day-2/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/10/declarative-exception-handling-in-your-controllers-rails-20-a-feature-a-day-2/">&lt;p&gt;I know I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;09&#x2F;rails-20-a-feature-a-day&#x2F;&quot;&gt;said&lt;&#x2F;a&gt; I was going to try and keep the features in &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;09&#x2F;rails-20-a-feature-a-day&#x2F;&quot;&gt;&quot;a feature a day&quot;&lt;&#x2F;a&gt; to those not mentioned in &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.org&#x2F;2007&#x2F;12&#x2F;7&#x2F;rails-2-0-it-s-done&quot;&gt;popular&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;&quot;&gt;places&lt;&#x2F;a&gt;, but this feature is one of the few nicest features in Rails made by a contributor outside of the Rails core so I couldn&#x27;t resist mentioning it.&lt;&#x2F;p&gt;
&lt;h3&gt;First, an example&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class CommentsController &amp;lt; ActionController::Base
  rescue_from Comment::Spammy, :with =&amp;gt; :moderate_comment
  rescue_from ActiveRecord::RecordNotFound, :with =&amp;gt; :redirect_if_not_found
&lt;p&gt;protected
def moderate_comment
# Handle the exception, like placing the comment in a moderation queue
# and then rendering a different action.
end&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;def redirect_if_not_found
  # Redirect somewhere...
end
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Compare this to what you had to do with Rails 1.2.6 and earlier:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class CommentsController &amp;lt; ActionController::Base
&lt;p&gt;def rescue_action_in_public(exception)
case exception
when Comment::Spammy
# Handle the exception as above.
when ActiveRecord::RecordNotFound
# Redirect somewhere...
else
super
end
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Much clearer and reads almost like English. I don&#x27;t think I even need to explain what the code in the 1st example is trying to do.&lt;&#x2F;p&gt;
&lt;h3&gt;Let&#x27;s try another example&lt;&#x2F;h3&gt;
&lt;p&gt;Here&#x27;s another common use-case: dealing bad create&#x2F;update actions. With &lt;code&gt;rescue_from&lt;&#x2F;code&gt;, you can simply do this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;class ApplicationController &amp;lt; ActionController::Base
  rescue_from ActiveRecord::RecordInvalid do |exception|
    render :action =&gt; (exception.record.new_record? ? :new : :edit)
  end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;No need for actions to be coded like this anymore!&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def create
  @comment = comment.create!(params[:comment])
rescue ActiveRecord::RecordInvalid
  render :action =&gt; :new
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This patch was committed in &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7597&quot;&gt;revision 7597&lt;&#x2F;a&gt; after a short discussion on the syntax and implementation over at the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9449&quot;&gt;ticket&lt;&#x2F;a&gt;. (More improvements on the implementation over at &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9645&quot;&gt;ticket #9645&lt;&#x2F;a&gt; for the interested.)&lt;&#x2F;p&gt;
&lt;h3&gt;About the contributor, Norbert Crombach&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;primetheory.org&#x2F;&quot;&gt;Norbert Crombach&lt;&#x2F;a&gt; (Rails Trac username: &lt;em&gt;norbert&lt;&#x2F;em&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.workingwithrails.com&#x2F;person&#x2F;7507-norbert-crombach&quot;&gt;WorkingWithRails profile&lt;&#x2F;a&gt;) is another &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;query?reporter=norbert&quot;&gt;regular Rails contributor&lt;&#x2F;a&gt; hailing from the Netherlands. The &lt;code&gt;rescue_from&lt;&#x2F;code&gt; is, in my opinion, one of his more significant contributions (and what a great one it is too).&lt;&#x2F;p&gt;
&lt;h3&gt;Some final words&lt;&#x2F;h3&gt;
&lt;p&gt;While the new declarative &lt;code&gt;rescue_from&lt;&#x2F;code&gt; macro is useful, I&#x27;ve found myself liking the &lt;a href=&quot;http:&#x2F;&#x2F;merbivore.com&#x2F;&quot;&gt;merb&lt;&#x2F;a&gt; way of dealing with exceptions, where &lt;a href=&quot;http:&#x2F;&#x2F;merbivore.com&#x2F;features.html#exceptions&quot;&gt;exception handling is delegated to an Exception controller&lt;&#x2F;a&gt;. You can use layouts, templates, helpers and filters just like in &lt;em&gt;ye plain olde&lt;&#x2F;em&gt; controller. I&#x27;m still not so sure if it&#x27;s worth making a patch for Rails to emulate this behavior yet though!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: Rails 2.0 a feature a day #3 is now available &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;12&#x2F;concatenate-your-stylesheets-and-javascripts-in-3-seconds-rails-20-a-feature-a-day-3&#x2F;&quot;&gt;Concatenate your stylesheets and JavaScripts in 3 seconds&lt;&#x2F;a&gt;&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Time#advance now uses :weeks, :hours, :minutes, :seconds options - Rails 2.0 a feature a day #1</title>
    <published>2007-12-09T23:51:02+00:00</published>
    <updated>2007-12-09T23:51:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/09/timeadvance-now-uses-weeks-hours-minutes-seconds-options-rails-20-a-feature-a-day-1/"/>
    <id>https://chuyeow.wtf/2007/12/09/timeadvance-now-uses-weeks-hours-minutes-seconds-options-rails-20-a-feature-a-day-1/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/09/timeadvance-now-uses-weeks-hours-minutes-seconds-options-rails-20-a-feature-a-day-1/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;api.rubyonrails.org&#x2F;classes&#x2F;ActiveSupport&#x2F;CoreExtensions&#x2F;Time&#x2F;Calculations.html#M000567&quot;&gt;&lt;code&gt;Time#advance&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;api.rubyonrails.org&#x2F;classes&#x2F;ActiveSupport&#x2F;CoreExtensions&#x2F;DateTime&#x2F;Calculations.html#M000714&quot;&gt;&lt;code&gt;DateTime#advance&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; just got, erm, more betterer in Rails 2.0.&lt;&#x2F;p&gt;
&lt;p&gt;In Rails 1.2.6 and earlier, &lt;code&gt;Time#advance&lt;&#x2F;code&gt; and &lt;code&gt;DateTime#advance&lt;&#x2F;code&gt; only accepted &lt;code&gt;:year&lt;&#x2F;code&gt;, &lt;code&gt;:month&lt;&#x2F;code&gt; and &lt;code&gt;:day&lt;&#x2F;code&gt; options. You&#x27;d think &lt;code&gt;:hours&lt;&#x2F;code&gt;, &lt;code&gt;:minutes&lt;&#x2F;code&gt; and &lt;code&gt;:seconds&lt;&#x2F;code&gt; would work too but due to a bug in the code (see &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9818&quot;&gt;ticket #9818&lt;&#x2F;a&gt;), you get something like this instead:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;time = Time.utc(2000,10,1,10,30,45)
# =&gt; Sun Oct 01 10:30:45 UTC 2000
&lt;p&gt;time.advance(:days =&amp;gt;3, :hour =&amp;gt; 2)&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wed-oct-04-02-00-00-utc-2000&quot;&gt;=&amp;gt; Wed Oct 04 02:00:00 UTC 2000&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Notice how the hour is changed instead of being advanced.&lt;&#x2F;p&gt;
&lt;p&gt;Now, thanks to &lt;a href=&quot;http:&#x2F;&#x2F;mad.ly&#x2F;&quot;&gt;Geoff Buesing&lt;&#x2F;a&gt;&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9825&quot;&gt;efforts&lt;&#x2F;a&gt;, passing &lt;code&gt;:hours&lt;&#x2F;code&gt;, &lt;code&gt;:minutes&lt;&#x2F;code&gt; and &lt;code&gt;:seconds&lt;&#x2F;code&gt; options work as you&#x27;d expect:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;time = Time.local(2005,2,28,15,15,10)
# =&gt; Mon Feb 28 15:15:10 0800 2005
&lt;p&gt;time.advance(:hours =&amp;gt; 5, :minutes =&amp;gt; 20, :seconds =&amp;gt; 25)&lt;&#x2F;p&gt;
&lt;h1 id=&quot;mon-feb-28-20-35-35-0800-2005&quot;&gt;=&amp;gt; Mon Feb 28 20:35:35 0800 2005&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Hell, you can even &lt;code&gt;#advance&lt;&#x2F;code&gt; by &lt;code&gt;:weeks&lt;&#x2F;code&gt; (see &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9866&quot;&gt;ticket #9866&lt;&#x2F;a&gt;):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;time = Time.local(2005,2,28,15,15,10)
# =&gt; Mon Feb 28 15:15:10 0800 2005
&lt;p&gt;time.advance(:weeks =&amp;gt; 2)&lt;&#x2F;p&gt;
&lt;h1 id=&quot;mon-mar-14-15-15-10-0800-2005&quot;&gt;=&amp;gt; Mon Mar 14 15:15:10 0800 2005&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;+1 for consistency and properly behaving code. Thanks to this #advance patch, Geoff was also able to re-use #advance to &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9863&quot;&gt;refactor&lt;&#x2F;a&gt; some other parts of ActiveSupport&#x27;s time-related extensions.&lt;&#x2F;p&gt;
&lt;h3&gt;About the contributor, Geoff Buesing&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;mad.ly&#x2F;&quot;&gt;Geoff Buesing&lt;&#x2F;a&gt; is a regular Rails contributor and I&#x27;ve known him to be the date&#x2F;datetime&#x2F;time guru - just look at his &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;query?reporter=%7Egbuesing&amp;order=priority&quot;&gt;submitted patches&lt;&#x2F;a&gt; if you&#x27;re not convinced. Not too long ago Geoff was given well-deserved commit rights (congrats Geoff)! You won&#x27;t find him on the &lt;a href=&quot;http:&#x2F;&#x2F;rubyonrails.org&#x2F;core&quot;&gt;Ruby on Rails Core team page&lt;&#x2F;a&gt; yet though - it&#x27;s probably out of date.&lt;&#x2F;p&gt;
&lt;p&gt;Check out his blog at &lt;a href=&quot;http:&#x2F;&#x2F;mad.ly&#x2F;&quot;&gt;mad.ly&lt;&#x2F;a&gt; where he writes mostly his adventures with on unobtrusive JavaScript in Rails.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Rails 2.0 - a feature a day</title>
    <published>2007-12-09T23:50:41+00:00</published>
    <updated>2007-12-09T23:50:41+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/09/rails-20-a-feature-a-day/"/>
    <id>https://chuyeow.wtf/2007/12/09/rails-20-a-feature-a-day/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/09/rails-20-a-feature-a-day/">&lt;p&gt;Now that Rails 2.0 has been baked to near-perfection, I&#x27;m sure all you Rubyists with Rails applications are considering updating or have already updated your applications to be Rails 2.0-compatible. And you&#x27;ve probably already pored through the &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.org&#x2F;2007&#x2F;12&#x2F;7&#x2F;rails-2-0-it-s-done&quot;&gt;massive list of new features and changes in Rails 2.0&lt;&#x2F;a&gt; or seen it on &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;articles&#x2F;2007&#x2F;12&#x2F;7&#x2F;rails-2-0-final-released-summary-of-features&#x2F;&quot;&gt;Ryan Daigle&#x27;s Scraps&lt;&#x2F;a&gt;. Ryan also wrote a &lt;a href=&quot;http:&#x2F;&#x2F;peepcode.com&#x2F;products&#x2F;rails2-pdf&quot;&gt;Rails2 mini eBook&lt;&#x2F;a&gt; that&#x27;s been getting &lt;a href=&quot;http:&#x2F;&#x2F;beneathzooppa.blogspot.com&#x2F;2007&#x2F;10&#x2F;peepcode-rails-20-mini-book.html&quot;&gt;good&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;articles&#x2F;2007&#x2F;12&#x2F;7&#x2F;rails-2-0-final-released-summary-of-features&#x2F;#comments&quot;&gt;reviews&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been keeping track of the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;timeline&quot;&gt;Rails Trac timeline&lt;&#x2F;a&gt; myself since &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9677&quot;&gt;my 1st committed Rails patch&lt;&#x2F;a&gt; mostly to keep track of Rails development (&lt;a href=&quot;http:&#x2F;&#x2F;bezurk.com&#x2F;&quot;&gt;we&lt;&#x2F;a&gt; run several apps on edge) and to monitor any comments on my submitted patches. Turns out keeping an eye on the timeline and the &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.com&#x2F;group&#x2F;rubyonrails-core&quot;&gt;rubyonrails-core mailing list&lt;&#x2F;a&gt; gives you a pretty decent &quot;on the ground&quot; view of new features and changes to the Rails trunk.&lt;&#x2F;p&gt;
&lt;p&gt;So I&#x27;m gonna try something and see if helps anyone: I&#x27;ll be running a near-daily series of blog posts about new Rails features or changes. I&#x27;ll try not to repeat anything that&#x27;s already &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;&quot;&gt;been&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.org&#x2F;2007&#x2F;12&#x2F;7&#x2F;rails-2-0-it-s-done&quot;&gt;mentioned&lt;&#x2F;a&gt;, and instead focus more on lesser-known changes. I think it&#x27;s also a great opportunity to raise the profile of the core committers and contributors to the Rails community so look out for an &quot;About the contributor&quot; section in each post.&lt;&#x2F;p&gt;
&lt;p&gt;Hop on over to the 1st post - &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;12&#x2F;09&#x2F;timeadvance-now-uses-weeks-hours-minutes-seconds-options-rails-20-a-feature-a-day-1&#x2F;&quot;&gt;Time#advance now uses :weeks, :hours, :minutes, :seconds options&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Rails 2.0 released</title>
    <published>2007-12-08T00:02:09+00:00</published>
    <updated>2007-12-08T00:02:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/08/rails-20-released/"/>
    <id>https://chuyeow.wtf/2007/12/08/rails-20-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/08/rails-20-released/">&lt;p&gt;Just go to the &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.org&#x2F;2007&#x2F;12&#x2F;7&#x2F;rails-2-0-it-s-done&quot;&gt;release announcement and major features blog post by DHH&lt;&#x2F;a&gt; already!&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re having trouble installing the Rails 2.0.1 gem, do a &lt;code&gt;gem install rails -y --source http:&#x2F;&#x2F;gems.rubyonrails.org&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now that the obligatory link to the Rails 2.0 release announcement is done, I&#x27;d like to urge anyone with any interest in improving Rails or seeing new features or fixes in Rails to try and contribute to Rails. I&#x27;m sure everyone of us Rails users have had &quot;what if Rails could do this&quot; or &quot;why is Rails doing this, that&#x27;s just wrong&quot; moments. Well, roll up your sleeves and help by contributing instead of complaining about how &lt;a href=&quot;http:&#x2F;&#x2F;www.koziarski.net&#x2F;archives&#x2F;2007&#x2F;12&#x2F;1&#x2F;they&quot;&gt;&quot;they&quot;&lt;&#x2F;a&gt; won&#x27;t&#x2F;haven&#x27;t&#x2F;are too stupid to fix it..&lt;&#x2F;p&gt;
&lt;p&gt;A good starting point is to read the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;wiki&#x2F;&quot;&gt;Rails Trac wiki&lt;&#x2F;a&gt;, and after that be sure to check out John Susser&#x27;s excellent &lt;a href=&quot;http:&#x2F;&#x2F;hasmanythrough.com&#x2F;layingtracks&#x2F;&quot;&gt;guide to contributing to Rails&lt;&#x2F;a&gt; (read the &lt;a href=&quot;http:&#x2F;&#x2F;hasmanythrough.com&#x2F;layingtracks&#x2F;LayingTracks.pdf&quot;&gt;presentation slides&lt;&#x2F;a&gt;, it won&#x27;t take long). You should have enough information to start. I recommend just opening the &lt;code&gt;base.rb&lt;&#x2F;code&gt; classes for ActiveRecord, ActionController and peeking around the ActiveSupport classes just to get a feel of things. After that crack open the relevant test for your issue and write your test-driven patch!&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s really easy, since Rails is written purely in Ruby - if I can do it I&#x27;m sure you can too :) Your contribution doesn&#x27;t even have to be a bona fide patch file with tests, documentation and bits of Ruby code - if you notice a bug and &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;newticket&quot;&gt;report it&lt;&#x2F;a&gt; not knowing how to fix it, that&#x27;s good enough! Or even something as trivial as a new style (CSS and layout) for the Rails error pages (there isn&#x27;t such a patch yet but I&#x27;d love to see prettier default exception pages instead of the current rather plain-looking ones).&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, that&#x27;s enough of the sermon from me - enjoy your Rails 2.0! Congrats to the &lt;a href=&quot;http:&#x2F;&#x2F;rubyonrails.org&#x2F;core&quot;&gt;Rails Core team&lt;&#x2F;a&gt; and contributors on another solid release!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Rails 2.0 - it&#x27;s landed</title>
    <published>2007-12-07T14:14:59+00:00</published>
    <updated>2007-12-07T14:14:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/12/07/rails-20-its-landed/"/>
    <id>https://chuyeow.wtf/2007/12/07/rails-20-its-landed/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/12/07/rails-20-its-landed/">&lt;p&gt;&lt;ins&gt;Update: Looks like it&#x27;s going to be released as Rails 2.0.1 instead due to a &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8329&quot;&gt;bugfix&lt;&#x2F;a&gt; post-2.0 tagging.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Just a quick one - seems like Rails 2.0 has been &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8328&quot;&gt;tagged for release&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;milestone&#x2F;2.0&quot;&gt;Rails 2.0 milestone&lt;&#x2F;a&gt; has just been completed.&lt;&#x2F;p&gt;
&lt;p&gt;Expect a post on &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.com&#x2F;&quot;&gt;weblog.rubyonrails.com&lt;&#x2F;a&gt; soon.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Time.now.obsession = PSP Slim</title>
    <published>2007-11-29T14:27:21+00:00</published>
    <updated>2007-11-29T14:27:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/11/29/timenowobsession-psp-slim/"/>
    <id>https://chuyeow.wtf/2007/11/29/timenowobsession-psp-slim/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/11/29/timenowobsession-psp-slim/">&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;psp-slim.jpg&quot; alt=&quot;My PSP Slim&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Jeanne_d&#x27;Arc_(video_game)&quot;&gt;Jeanne d&#x27;Arc&lt;&#x2F;a&gt; is a great little &lt;acronym title=&quot;Strategy Role-Playing Game&quot;&gt;SRPG&lt;&#x2F;acronym&gt; I&#x27;m enjoying right now - I don&#x27;t even want to start &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Final_Fantasy_Tactics&quot;&gt;Final Fantasy Tactics&lt;&#x2F;a&gt; until after I&#x27;ve completed Jeanne d&#x27;Arc.&lt;&#x2F;p&gt;
&lt;p&gt;I have a Nintendo DS Lite as well and I have to say that I&#x27;m more of a PSP gamer where portable consoles are concerned. There just weren&#x27;t that many involved games in the DS (except Puzzle Quest) and coming from a big fantasy CRPG background kinda made the DS a poor companion on train and bus rides. Being able to play videos on a large screen (relative to the iPod video I carry around all the time) is &lt;em&gt;awesome&lt;&#x2F;em&gt;. It&#x27;s not an iPhone but it&#x27;s good enough for watching videos!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Try the new Mac OS X UI for Firefox 3</title>
    <published>2007-11-20T18:13:36+00:00</published>
    <updated>2007-11-20T18:13:36+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/11/20/try-the-new-mac-os-x-ui-for-firefox-3/"/>
    <id>https://chuyeow.wtf/2007/11/20/try-the-new-mac-os-x-ui-for-firefox-3/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/11/20/try-the-new-mac-os-x-ui-for-firefox-3/">&lt;p&gt;The Firefox 3 developers have been working on a &lt;a href=&quot;http:&#x2F;&#x2F;blog.mozilla.com&#x2F;faaborg&#x2F;2007&#x2F;10&#x2F;10&#x2F;the-firefox-3-visual-refresh-system-integration&#x2F;&quot;&gt;visual refresh&lt;&#x2F;a&gt; that integrates more tightly into the OS, and the Mac OS X version is looking pretty sweet. Well, public opinion varies greatly - from people who feel that it&#x27;s a &lt;a href=&quot;http:&#x2F;&#x2F;digg.com&#x2F;apple&#x2F;Proposed_Firefox_3_Theme_For_Mac_OS_X_Looks_Exactly_Like_Safari&quot;&gt;rip off of Safari&lt;&#x2F;a&gt; to those who really like the Brushed Metal look (myself included).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-3-with-proto-theme_thumb.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Well, if you wanna check out the proposed Mac OS X Firefox 3 UI for yourself, grab yourself a copy of &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.com&#x2F;en-US&#x2F;firefox&#x2F;3.0b1&#x2F;releasenotes&#x2F;&quot;&gt;Firefox 3 Beta 1&lt;&#x2F;a&gt; and go get the &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;6050&quot;&gt;Proto theme&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox 3, Beta</title>
    <published>2007-11-20T17:23:57+00:00</published>
    <updated>2007-11-20T17:23:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/11/20/firefox-3-beta/"/>
    <id>https://chuyeow.wtf/2007/11/20/firefox-3-beta/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/11/20/firefox-3-beta/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.com&#x2F;en-US&#x2F;firefox&#x2F;3.0b1&#x2F;releasenotes&#x2F;&quot;&gt;Firefox 3 Beta 1&lt;&#x2F;a&gt; is out! Check out the pretty sweet &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.com&#x2F;en-US&#x2F;firefox&#x2F;3.0b1&#x2F;releasenotes&#x2F;#whatsnew&quot;&gt;list of changes&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-3.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you want to try it, you&#x27;ll probably want to &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;08&#x2F;20&#x2F;how-to-have-firefox-3-and-firefox-2-running-at-the-same-time&#x2F;&quot;&gt;run Firefox 3 and Firefox 2 at the same time&lt;&#x2F;a&gt;. Only this time you should remember to rename Firefox 3 so that it doesn&#x27;t override your install of Firefox 2.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d blogged about some of the changes previously if you care for some screenshots of &lt;em&gt;some&lt;&#x2F;em&gt; of the new features (Mozilla Links &lt;a href=&quot;http:&#x2F;&#x2F;mozillalinks.org&#x2F;wp&#x2F;category&#x2F;subject&#x2F;firefox3&#x2F;&quot;&gt;covers a good number of new Firefox 3 changes&lt;&#x2F;a&gt; too):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;09&#x2F;18&#x2F;whats-new-in-firefox-3-download-resume&#x2F;&quot;&gt;Resumable downloading: users can now resume downloads after restarting the browser or resetting your network connection.&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;05&#x2F;05&#x2F;growl-integration-in-firefox-3&#x2F;&quot;&gt;supports Growl for notifications of completed downloads and available updates.&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;09&#x2F;07&#x2F;smarter-and-less-annoying-password-manager-in-firefox-3&#x2F;&quot;&gt;Easier password management: an information bar replaces the old password dialog so you can now save passwords after a successful login.&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;09&#x2F;13&#x2F;open-in-tabs-fixed-in-firefox-3-at-last&#x2F;&quot;&gt;Optimized Open in Tabs behavior: opening a folder of bookmarks in tabs now appends the new tabs rather than overwriting.&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Best JavaScript library project roadmap I&#x27;ve seen</title>
    <published>2007-11-15T14:24:27+00:00</published>
    <updated>2007-11-15T14:24:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/11/15/best-javascript-library-project-roadmap-ive-seen/"/>
    <id>https://chuyeow.wtf/2007/11/15/best-javascript-library-project-roadmap-ive-seen/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/11/15/best-javascript-library-project-roadmap-ive-seen/">&lt;p&gt;The mootools developers look like they are having fun defining their &lt;a href=&quot;http:&#x2F;&#x2F;dev.mootools.net&#x2F;roadmap&quot;&gt;project roadmap&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;mootools-13-ie-milestone_thumb.png&quot; alt=&quot;mootools 1.3 roadmap&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;MooTools Plugin to uninstall Internet Explorer from any machine within network range&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>New in Rails: a request profiler for profiling your app</title>
    <published>2007-10-26T10:01:30+00:00</published>
    <updated>2007-10-26T10:01:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/10/26/new-in-rails-a-request-profiler-for-profiling-your-app/"/>
    <id>https://chuyeow.wtf/2007/10/26/new-in-rails-a-request-profiler-for-profiling-your-app/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/10/26/new-in-rails-a-request-profiler-for-profiling-your-app/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;bitsweat.net&#x2F;&quot;&gt;Jeremy Kemper&lt;&#x2F;a&gt; (aka bitsweat) &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8016&quot;&gt;committed&lt;&#x2F;a&gt; a very useful tool into the Rails trunk not too long ago: a &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;actionpack&#x2F;lib&#x2F;action_controller&#x2F;request_profiler.rb&quot;&gt;request profiler&lt;&#x2F;a&gt;! It&#x27;s a human-friendly wrapper script around the &lt;a href=&quot;http:&#x2F;&#x2F;ruby-prof.rubyforge.org&#x2F;&quot;&gt;ruby-prof library&lt;&#x2F;a&gt;, a nice ruby code profiler, that lets you run multiple requests against a URI in your application and get a detailed code profile report in text and HTML.&lt;&#x2F;p&gt;
&lt;p&gt;Wanna try it out? Update your vendor&#x2F;rails to at least revision 8016, run &lt;code&gt;rake rails:update&lt;&#x2F;code&gt; to copy the new &lt;code&gt;script&#x2F;performance&#x2F;request&lt;&#x2F;code&gt; script into your app&#x27;s &lt;code&gt;script&lt;&#x2F;code&gt; directory, install the ruby-prof gem (&lt;code&gt;sudo gem install ruby-prof&lt;&#x2F;code&gt;), then let it loose on your app.&lt;&#x2F;p&gt;
&lt;p&gt;The options are pretty simple, just pass the script the URI you wanna profile. There&#x27;re options for specifying how many requests you want to process, and for profiling POST requests, there&#x27;s one for&lt;br &#x2F;&gt;
specifying a POST fixture file.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;USAGE: script&#x2F;performance&#x2F;request uri [options]
    -u, --uri [URI]                  Request URI. Defaults to http:&#x2F;&#x2F;localhost:3000&#x2F;
    -n, --times [0000]               How many requests to process. Defaults to 1000.
    -b, --benchmark                  Benchmark instead of profiling
        --method [GET]               HTTP request method. Defaults to GET.
        --fixture [FILE]             Path to POST fixture file
        --open [CMD]                 Command to open profile results. Defaults to &quot;open %s &amp;&quot;
    -h, --help                       Show this help&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;At the end of the run, you get a text and HTML report with the methods called and the time spent in them. If you haven&#x27;t seen a code profile before, it looks something like this:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;rails-request-prof-text-output_thumb.png&quot; alt=&quot;Rails request profiler text output report&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Very nice stuff! It&#x27;s &lt;em&gt;extremely&lt;&#x2F;em&gt; convenient to have profiling like this built into Rails itself - personally I&#x27;ve not even run any profiling on my Rails code because it seemed like a hassle (though I do run httperf benchmarks and take note the number of requests per second). With code profiling, you can easily see which parts of your code are the bottlenecks and optimize away - it&#x27;s a godsend that it&#x27;s so easy to do it in Rails!&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, this is all still new stuff I imagine and subject to change (and improvements), but still very exciting for those of us who are hitting performance bottlenecks in our Rails apps (and are not already doing code profiling).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Konata Izumi in Edge Rails</title>
    <published>2007-10-15T16:25:50+00:00</published>
    <updated>2007-10-15T16:25:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/10/15/konata-izumi-in-edge-rails/"/>
    <id>https://chuyeow.wtf/2007/10/15/konata-izumi-in-edge-rails/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/10/15/konata-izumi-in-edge-rails/">&lt;p&gt;You wouldn&#x27;t think that &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;05&#x2F;11&#x2F;lucky-star-konata-ism&#x2F;&quot;&gt;Konata Izumi&lt;&#x2F;a&gt; (a character from the anime, &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lucky_Star_(manga)&quot;&gt;Lucky Star&lt;&#x2F;a&gt;) and Ruby on Rails (a web MVC framework) would somehow be associated, but they are!&lt;&#x2F;p&gt;
&lt;p&gt;I took the opportunity to fill in the missing &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;activerecord&#x2F;lib&#x2F;active_record&#x2F;serializers&#x2F;json_serializer.rb?rev=7905&quot;&gt;&lt;code&gt;ActiveRecord::Base#to_json&lt;&#x2F;code&gt; documentation&lt;&#x2F;a&gt; with examples using Konata Izumi and it got committed unchanged in &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7905&quot;&gt;revision 7905&lt;&#x2F;a&gt;. Cute. I hope no one changes them.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: Managed to get &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;8010&quot;&gt;more Konata Izumi documentation&lt;&#x2F;a&gt; into Rails ;)&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Harajuku Crepe arrives in Singapore</title>
    <published>2007-10-15T09:26:51+00:00</published>
    <updated>2007-10-15T09:26:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/10/15/harajuku-crepe-arrives-in-singapore/"/>
    <id>https://chuyeow.wtf/2007/10/15/harajuku-crepe-arrives-in-singapore/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/10/15/harajuku-crepe-arrives-in-singapore/">&lt;p&gt;One of my favorite foodie moments from my trip to Tokyo was at &lt;a href=&quot;http:&#x2F;&#x2F;wikitravel.org&#x2F;en&#x2F;Tokyo&#x2F;Harajuku&quot;&gt;Harajuku&lt;&#x2F;a&gt; where I had a crepe with cheese cake and ice cream from Angel&#x27;s Heart (need to dig that photo out). It was THE best crepe I&#x27;ve ever had. I&#x27;d even thrown around the idea of bringing it back to Singapore as a commercial venture.&lt;&#x2F;p&gt;
&lt;p&gt;Well anyway, I found that one of the crepe shops in Harajuku, Marion Cafe, that was just opposite Angel&#x27;s Heart, has opened a branch right here in Singapore at the &lt;a href=&quot;http:&#x2F;&#x2F;www.streetdirectory.com&#x2F;travel_guide&#x2F;singapore&#x2F;singapore_shopping&#x2F;492&#x2F;imm_building___mega_shopping_mall_in_jurong.php&quot;&gt;IMM Building&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;marion_cafe_crepe.jpg&quot; alt=&quot;Crepe from Marion Cafe in IMM Building&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I tried their mango crepe (it had mango and ice cream in it) which set us back about SGD 5.80.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;marion_cafe_crepe_mango.jpg&quot; alt=&quot;Mango crepe from Marion Cafe in IMM Building&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It was alright, not as good as the one I had in Harajuku of course, but still a nice treat. They have 105 different types of crepe - anything ranging for your run-of-the-mill strawberry and ice cream crepe, to tuna crepe, and even crepe with Japanese curry.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New on edge Rails: JSON serialization of ActiveRecord objects reaches maturity</title>
    <published>2007-10-10T00:13:02+00:00</published>
    <updated>2007-10-10T00:13:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/10/10/new-on-edge-rails-json-serialization-of-activerecord-objects-reaches-maturity/"/>
    <id>https://chuyeow.wtf/2007/10/10/new-on-edge-rails-json-serialization-of-activerecord-objects-reaches-maturity/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/10/10/new-on-edge-rails-json-serialization-of-activerecord-objects-reaches-maturity/">&lt;p&gt;The last time I &lt;a href=&quot;&#x2F;2007&#x2F;09&#x2F;24&#x2F;new-in-edge-rails-serialize-activerecord-objects-to-json-with-activerecordto_json&#x2F;&quot;&gt;wrote about &lt;code&gt;ActiveRecord#to_json&lt;&#x2F;code&gt; on edge Rails&lt;&#x2F;a&gt;, it was missing some key functionality. For one, you couldn&#x27;t include any associations. Another thing was you couldn&#x27;t do something like this in your controller:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;@authors = Author.find(:all)
&lt;p&gt;render :json =&amp;gt; @authors.to_json(:only =&amp;gt; :name)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Oh and did I mention &lt;a href=&quot;&#x2F;2007&#x2F;06&#x2F;20&#x2F;how-to-get-strictly-valid-json-from-rails&#x2F;&quot;&gt;it wasn&#x27;t emitting valid JSON by default&lt;&#x2F;a&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;In the last few weeks, several patches to the Rails trunk have fixed all these issues (most of these patches are already on the &lt;a href=&quot;http:&#x2F;&#x2F;weblog.rubyonrails.com&#x2F;2007&#x2F;9&#x2F;30&#x2F;rails-2-0-0-preview-release&quot;&gt;Rails 2.0 Preview Release&lt;&#x2F;a&gt;). JSON serialization of ActiveRecord objects is &lt;em&gt;finally&lt;&#x2F;em&gt; on par with XML serialization, and that old &lt;a href=&quot;http:&#x2F;&#x2F;trac.codefront.net&#x2F;jsonifier&#x2F;&quot;&gt;Jsonifier plugin&lt;&#x2F;a&gt; I wrote can finally be sent off to the plugin retirement home (though, I am thinking of porting all the JSON patches into Jsonifier to add Rails 2.0-like JSON serialization to Rails 1.2.4, but who knows, I &lt;em&gt;am&lt;&#x2F;em&gt; lazy).&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, back to the new JSON stuff on edge Rails.&lt;&#x2F;p&gt;
&lt;h3&gt;No more invalid JSON from Rails&lt;&#x2F;h3&gt;
&lt;p&gt;Yes it&#x27;s true. No more &lt;a href=&quot;&#x2F;2007&#x2F;06&#x2F;20&#x2F;how-to-get-strictly-valid-json-from-rails&#x2F;&quot;&gt;changing of module attribute to get Rails to produce valid JSON&lt;&#x2F;a&gt;. Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;blog.choonkeat.com&#x2F;&quot;&gt;Choon Keat&lt;&#x2F;a&gt; with his &lt;a href=&quot; http:&#x2F;&#x2F;www.ruby-forum.com&#x2F;topic&#x2F;124797&quot;&gt;detailed SVN history snooping&lt;&#x2F;a&gt;, we finally managed to get a &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;8762&quot;&gt;patch to fix JSON encoding to quote all hash keys&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7697&quot;&gt;into Rails&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3&gt;:include option can be used to include associations with ActiveRecord::Base#to_json&lt;&#x2F;h3&gt;
&lt;p&gt;At &lt;a href=&quot;&#x2F;2007&#x2F;09&#x2F;24&#x2F;new-in-edge-rails-serialize-activerecord-objects-to-json-with-activerecordto_json&#x2F;#comment-286519&quot;&gt;DHH&#x27;s urging&lt;&#x2F;a&gt;, I submitted a &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9677&quot;&gt;patch that added the &lt;code&gt;:include&lt;&#x2F;code&gt; option to &lt;code&gt;ActiveRecord#to_json&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. Of course, it was a sloppy first submission and &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9677#comment:2&quot;&gt;DHH pointed that out&lt;&#x2F;a&gt; - a little bit of DRY love and it was really great to see it &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7663&quot;&gt;get committed&lt;&#x2F;a&gt; (I have a soft spot for JSON serialization from Rails, since I&#x27;d been trying to achieve the same thing with &lt;a href=&quot;http:&#x2F;&#x2F;trac.codefront.net&#x2F;jsonifier&#x2F;&quot;&gt;Jsonifier&lt;&#x2F;a&gt;). &lt;&#x2F;p&gt;
&lt;p&gt;So yes, now you can do:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;json = @david.to_json(:include =&gt; :posts)
# or even...
json = @david.to_json(
  :include =&gt; {
    :posts =&gt; {
      :include =&gt; {
        :taggings =&gt; {
          :include =&gt; {
            :tag =&gt; { :only =&gt; :name }
          }
        }
      }
    }
})&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3&gt;Enumerable#to_json and Hash#to_json now accept options&lt;&#x2F;h3&gt;
&lt;p&gt;One problem with Jsonifier that I often get emails about is how the &lt;code&gt;to_json&lt;&#x2F;code&gt; options don&#x27;t work for lists (Enumerables). And why is this important? Well, we often retrieve collections of ActiveRecord objects at a time with &lt;code&gt;AR::B#find&lt;&#x2F;code&gt; so it&#x27;s not too much to ask to be able to do this in your controller actions:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;@authors = Author.find(:all)
&lt;p&gt;render :json =&amp;gt; @authors.to_json(:only =&amp;gt; :name)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;But of course you couldn&#x27;t, so I &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9751&quot;&gt;patched away&lt;&#x2F;a&gt; by changing the &lt;code&gt;to_json&lt;&#x2F;code&gt; methods of Enumerable and Hash (and other types as well) to accept an optional &lt;code&gt;options&lt;&#x2F;code&gt; argument. Enumerables will pass on any &lt;code&gt;options&lt;&#x2F;code&gt; it receives to its elements. Hashes will respect :only and :except (as well as passing on the &lt;code&gt;options&lt;&#x2F;code&gt; to its elements).&lt;&#x2F;p&gt;
&lt;h3&gt;Unambiguous (non-US-centric) dates and times&lt;&#x2F;h3&gt;
&lt;p&gt;While Rails 1.2.3 (and 1.2.4) never supported encoding of Dates, Times and DateTimes, edge Rails has been happily supporting Date, Time and DateTime conversions to JSON since &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;6773&quot;&gt;revision 6673&lt;&#x2F;a&gt;. Unfortunately, the date string format is in MM&#x2F;DD&#x2F;YYYY format:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Time.now.to_json
=&gt; &quot;\&quot;09&#x2F;21&#x2F;2007 12:15:02 UTC\&quot;&quot;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Geoff Buesing suggested that Rails should &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9750&quot;&gt;change this&lt;&#x2F;a&gt; to the more unambiguous YYYY&#x2F;MM&#x2F;DD format. Finding the right date format is important not only for readability reasons, it&#x27;s also important that the date string is directly parsable by the many browser JavaScript implementations using the JavaScript &lt;code&gt;new Date(dateString)&lt;&#x2F;code&gt; function. There is no formal spec of how dates should be represented in JSON, but it&#x27;s most convenient that strings representing dates can be directly converted into JavaScript Date objects.&lt;&#x2F;p&gt;
&lt;p&gt;Testing in several browsers and on different platforms, albeit not extensively, we settled on the &lt;code&gt;%Y&#x2F;%m&#x2F;%d %H:%M:%S %z&lt;&#x2F;code&gt; (strftime) format (more details in the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9750&quot;&gt;comments of the Trac ticket&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Now it is:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Time.now.to_json
=&gt; &quot;\&quot;2007&#x2F;09&#x2F;21 12:15:02 +0800\&quot;&quot;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Much better.&lt;&#x2F;p&gt;
&lt;h3&gt;What&#x27;s left?&lt;&#x2F;h3&gt;
&lt;p&gt;Documentation, for one thing. ActiveRecord::Base#to_json is still undocumented (&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9814&quot;&gt;docfix patch&lt;&#x2F;a&gt;). The &lt;code&gt;to_json&lt;&#x2F;code&gt; methods for Enumerable and Hash need documentation as well (will patch that soon).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;ActiveRecord::Base#to_json&lt;&#x2F;code&gt; also doesn&#x27;t deal with binary attributes, which can be easily resolved by Base64-encoding them (patch coming soon, it gets slightly complicated when trying to do a &lt;code&gt;from_json&lt;&#x2F;code&gt;). And of course, optimization improvements are always nice (decoding from JSON especially).&lt;&#x2F;p&gt;
&lt;p&gt;So, if you use JSON at all, please come in and help patch the remaining bits before Rails 2.0 rolls out. If you can&#x27;t (or more realistically, don&#x27;t have the time to) patch Rails yourself, do help out by verifying patches :).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>So apparently I&#x27;m a Rails Hackfest winner...</title>
    <published>2007-10-03T02:19:29+00:00</published>
    <updated>2007-10-03T02:19:29+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/10/03/so-apparently-im-a-rails-hackfest-winner/"/>
    <id>https://chuyeow.wtf/2007/10/03/so-apparently-im-a-rails-hackfest-winner/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/10/03/so-apparently-im-a-rails-hackfest-winner/">&lt;p&gt;Got an email not too long ago from &lt;a href=&quot;http:&#x2F;&#x2F;workingwithrails.com&#x2F;&quot;&gt;Working With Rails&lt;&#x2F;a&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;workingwithrails.com&#x2F;person&#x2F;5957-cheah-chu-yeow&quot;&gt;my profile&lt;&#x2F;a&gt;) entitled &quot;WWR September Hackfest Winner - Congrats!&quot;, and almost deleted it thinking it was spam. I read it in the end (after all, how often do you see spam with &quot;Rails&quot; in the subject title), and turns out that &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7663&quot;&gt;my&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7699&quot;&gt;recent&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7697&quot;&gt;patches&lt;&#x2F;a&gt; to Rails pushed me up to 6th position in the &lt;a href=&quot;http:&#x2F;&#x2F;workingwithrails.com&#x2F;hackfest&#x2F;15-monthly-september-2-7&quot;&gt;September Rails contributors rankings&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;hackfest_sept_2007_thumb.png&quot; alt=&quot;Rails Hackfest September 2007 winners&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I vaguely remember seeing &lt;a href=&quot;http:&#x2F;&#x2F;workingwithrails.com&#x2F;hackfest&quot;&gt;Rails Hackfest&lt;&#x2F;a&gt; mentioned somewhere but only just realized it&#x27;s a &quot;contest&quot; run monthly. The winners are the top 10 contributors to Rails (contribution being determined by the number of accepted patches, docfixes, and even comments). That&#x27;s really nice of the sponsors and &lt;a href=&quot;http:&#x2F;&#x2F;workingwithrails.com&#x2F;&quot;&gt;Working With Rails&lt;&#x2F;a&gt;, since that wasn&#x27;t really what I&#x27;d expected in return for contributing to an Open Source project (that would be &lt;em&gt;a sense of satisfaction&lt;&#x2F;em&gt;, personally-speaking).&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m just really glad that the JSON patches went into Rails before Rails 2.0 and it is satisfying to see my code get into Rails (I&#x27;ll blog about the patches in a separate post). There&#x27;s still &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9751&quot;&gt;some more work&lt;&#x2F;a&gt; needed though - please help to verify and give suggestions or +1s ;).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>What&#x27;s new in Firefox 3: Pasting text into search bar to be 100% less annoying</title>
    <published>2007-09-27T00:12:19+00:00</published>
    <updated>2007-09-27T00:12:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/27/whats-new-in-firefox-3-pasting-text-into-search-bar-to-be-100-less-annoying/"/>
    <id>https://chuyeow.wtf/2007/09/27/whats-new-in-firefox-3-pasting-text-into-search-bar-to-be-100-less-annoying/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/27/whats-new-in-firefox-3-pasting-text-into-search-bar-to-be-100-less-annoying/">&lt;p&gt;Now if you&#x27;re a regular user of Firefox, you&#x27;ve probably already had the opportunity to be dismayed by how you cannot copy and paste text with newlines into the search bar. All you end up with is the first line of text. I just end up typing in the search terms myself or copy and paste line by line.&lt;&#x2F;p&gt;
&lt;p&gt;Try it for yourself with the text here:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;First line.&lt;br &#x2F;&gt;
Second line.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Well, all that is gonna go away in Firefox 3, which &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=321000&quot;&gt;replaces newlines with spaces&lt;&#x2F;a&gt;. Small change perhaps, but definitely needed in this fanboy&#x27;s opinion.&lt;&#x2F;p&gt;
&lt;p&gt;Oh and it works for the Address bar too, only the newlines get removed instead of getting replaced with spaces. Could be useful for multi-line URLs which appear quite often in emails!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New in Edge Rails: helper for creating form labels</title>
    <published>2007-09-25T10:40:55+00:00</published>
    <updated>2007-09-25T10:40:55+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/25/new-in-edge-rails-helper-for-creating-form-labels/"/>
    <id>https://chuyeow.wtf/2007/09/25/new-in-edge-rails-helper-for-creating-form-labels/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/25/new-in-edge-rails-helper-for-creating-form-labels/">&lt;p&gt;Edge Rails now comes with a &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7541&quot;&gt;helper for creating form labels&lt;&#x2F;a&gt;, so in your views, instead of doing this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;% form_for(:user, @user, :url =&gt; user_path(@user)) do |f| -%&amp;gt;
&lt;strong&gt;&amp;lt;label for=&quot;user_login&quot;&amp;gt;Login&amp;lt;&#x2F;label&amp;gt;&lt;&#x2F;strong&gt;
&amp;lt;%= f.text_field :login %&amp;gt;
&amp;lt;end&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;where the &lt;code&gt;&amp;lt;label&amp;gt;&lt;&#x2F;code&gt; is given a &lt;code&gt;for&lt;&#x2F;code&gt; attribute of &lt;code&gt;user_login&lt;&#x2F;code&gt; (since the convention for form input ids is &lt;code&gt;{MODEL_NAME}_{ATTRIBUTE_NAME}&lt;&#x2F;code&gt;), you can instead now do:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;%= label(:user, :login) %&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Quite a bit neater. Makes it easier to explain to beginners how they should use &lt;code&gt;&amp;lt;label&amp;gt;&lt;&#x2F;code&gt;s appropriately since the syntax is similar to the other form helpers. Now give your &lt;code&gt;&amp;lt;label&amp;gt;&lt;&#x2F;code&gt;s proper &lt;code&gt;for&lt;&#x2F;code&gt; attributes if you&#x27;re not doing so already.&lt;&#x2F;p&gt;
&lt;p&gt;This makes plugins like this &lt;a href=&quot;http:&#x2F;&#x2F;simple-rails-plugins.googlecode.com&#x2F;svn&#x2F;form-label-helper&#x2F;&quot;&gt;form label helper plugin&lt;&#x2F;a&gt; obsolete.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New in Edge Rails: Serialize ActiveRecord objects to JSON with ActiveRecord#to_json</title>
    <published>2007-09-24T10:14:12+00:00</published>
    <updated>2007-09-24T10:14:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/24/new-in-edge-rails-serialize-activerecord-objects-to-json-with-activerecordto_json/"/>
    <id>https://chuyeow.wtf/2007/09/24/new-in-edge-rails-serialize-activerecord-objects-to-json-with-activerecordto_json/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/24/new-in-edge-rails-serialize-activerecord-objects-to-json-with-activerecordto_json/">&lt;p&gt;Converting ActiveRecord instances to their JSON representation has always been a topic that has been dear to me. I&#x27;d tried to get &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;8920&quot;&gt;a patch that adds &lt;code&gt;to_json&lt;&#x2F;code&gt; to ActiveRecord&lt;&#x2F;a&gt; into Rails (but the quality of my patch was lacking in a few respects). The &lt;a href=&quot;http:&#x2F;&#x2F;trac.codefront.net&#x2F;jsonifier&quot;&gt;Jsonifier plugin&lt;&#x2F;a&gt; that I wrote tried to address the lack of built-in JSON serialization by adding a &lt;code&gt;ActiveRecord#to_json&lt;&#x2F;code&gt; method that acts much like &lt;code&gt;ActiveRecord#to_xml&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;So it is with mixed feelings when I discovered a couple of days ago when &lt;a href=&quot;http:&#x2F;&#x2F;loudthinking.com&#x2F;&quot;&gt;&lt;acronym title=&quot;David Heinemeier Hansson&quot;&gt;DHH&lt;&#x2F;acronym&gt;&lt;&#x2F;a&gt; committed a &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7519&quot;&gt;changeset that added a native &lt;code&gt;ActiveRecord#to_json&lt;&#x2F;code&gt; method&lt;&#x2F;a&gt;. Of course, I&#x27;m elated that JSON serialization is given first class attention now, since the raison d&#x27;être of Jsonifier and my Rails patch was to do just that. A little bit of me is selfishly disappointed since it means that Jsonifier has become quite obsolete!&lt;&#x2F;p&gt;
&lt;p&gt;But it is an excellent change, I look forward to patching it up (if DHH doesn&#x27;t beat me to it - there&#x27;ve been so much activity on the Rails trunk recently) so that the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;activerecord&#x2F;lib&#x2F;active_record&#x2F;serializers&#x2F;json_serializer.rb?rev=7519&quot;&gt;JSON serializer&lt;&#x2F;a&gt; supports an &lt;code&gt;:include&lt;&#x2F;code&gt; options for including associations much like for &lt;code&gt;ActiveRecord#to_xml&lt;&#x2F;code&gt; and Jsonifier&#x27;s mixed in &lt;code&gt;to_json&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: I&#x27;ve submitted a &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;9677&quot;&gt;patch for adding &lt;code&gt;:include&lt;&#x2F;code&gt; to &lt;code&gt;ActiveRecord#to_json&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. Please test it and give feedback or +1 ;).&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>ActiveRecord database :default &quot;gotcha&quot;</title>
    <published>2007-09-19T21:37:21+00:00</published>
    <updated>2007-09-19T21:37:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/19/activerecord-database-default-gotcha/"/>
    <id>https://chuyeow.wtf/2007/09/19/activerecord-database-default-gotcha/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/19/activerecord-database-default-gotcha/">&lt;p&gt;Note to self:&lt;&#x2F;p&gt;
&lt;p&gt;When a table column has a default value, such as for the &lt;code&gt;type_category&lt;&#x2F;code&gt; column&#x2F;attribute like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;t.string :type_category, :limit =&gt; 20, :nil =&gt; false, :default =&gt; &#x27;tv&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;a new instance of your ActiveRecord model will try and set the defaults from the database. Meaning:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;Anime.new =&gt; #&amp;lt;Anime id: nil, type_category: &quot;tv&quot;...&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Courtesy of this in ActiveRecord::Base:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def attributes_from_column_definition
  self.class.columns.inject({}) do |attributes, column|
    attributes[column.name] = column.&lt;strong&gt;default&lt;&#x2F;strong&gt; unless column.name == self.class.primary_key
    attributes
  end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;So, don&#x27;t get confused when your model validations (&lt;code&gt;validates_presence_of :type_category&lt;&#x2F;code&gt;) don&#x27;t seem to work when testing:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;it &quot;should require a type_category&quot; do
  @foo.attributes = valid_foo_attributes.except(:type_category)
  @foo.should have(1).error_on(:type_category)  # doesn&#x27;t work since @foo.type_category = &#x27;tv&#x27;
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Explicitly set it to nil or a blank value.&lt;&#x2F;p&gt;
&lt;p&gt;Sounds silly, but it&#x27;s a true story.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>What&#x27;s new in Firefox 3: Download Resume</title>
    <published>2007-09-18T18:08:21+00:00</published>
    <updated>2007-09-18T18:08:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/18/whats-new-in-firefox-3-download-resume/"/>
    <id>https://chuyeow.wtf/2007/09/18/whats-new-in-firefox-3-download-resume/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/18/whats-new-in-firefox-3-download-resume/">&lt;p&gt;This is not exactly a new change to Firefox 3&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-trunk&#x2F;&quot;&gt;nightly builds&lt;&#x2F;a&gt; since the bugs have been setting in my browser tab bar for about a week but I figured I&#x27;d write about them anyway since it&#x27;s quite a nice improvement.&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s new? &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=377243&quot;&gt;Download Resume&lt;&#x2F;a&gt; - now you can pause and resume your downloads in the Firefox Download Manager. Implemented by a &lt;a href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;soc&#x2F;2007&#x2F;&quot;&gt;Summer of Code&lt;&#x2F;a&gt; student, this brings Firefox&#x27;s Download Manager up to speed with Safari (which has a really nice download resume feature that leaves &lt;code&gt;.download&lt;&#x2F;code&gt; files that you can just double-click to resume the download).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-3-download-manager-resume.png&quot; alt=&quot;Firefox 3 download resume&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You&#x27;ll notice the insane speeds (986GB&#x2F;s) I&#x27;m getting too in that last screenshot. Nope it&#x27;s not a feature, it&#x27;s a &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=395134&quot;&gt;bug&lt;&#x2F;a&gt;. And a &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=395134&quot;&gt;known one&lt;&#x2F;a&gt; that&#x27;s probably fixed if you have a recent nightly.&lt;&#x2F;p&gt;
&lt;p&gt;For Firefox 1.5 or 2 users, don&#x27;t despair, extensions like &lt;a href=&quot;http:&#x2F;&#x2F;www.downthemall.net&#x2F;&quot;&gt;DownThemAll!&lt;&#x2F;a&gt; allow you to resume downloads. If you use an external download manager, you&#x27;d probably be more interested in &lt;a href=&quot;http:&#x2F;&#x2F;flashgot.net&#x2F;&quot;&gt;FlashGot&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Moar wiurd SSIDs</title>
    <published>2007-09-14T17:11:15+00:00</published>
    <updated>2007-09-14T17:11:15+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/14/moar-wiurd-ssids/"/>
    <id>https://chuyeow.wtf/2007/09/14/moar-wiurd-ssids/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/14/moar-wiurd-ssids/">&lt;p&gt;Following &lt;a href=&quot;&#x2F;2007&#x2F;09&#x2F;07&#x2F;whats-your-ssid&#x2F;&quot;&gt;my previous post on SSIDs&lt;&#x2F;a&gt;, I saw this today when I fired up my MacBook on the bus:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;jesus-redeemer-ssid.png&quot; alt=&quot;SSID = Jesus Redeemer&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Some of the ones I liked from the &lt;a href=&quot;&#x2F;2007&#x2F;09&#x2F;07&#x2F;whats-your-ssid&#x2F;#comments&quot;&gt;comments&lt;&#x2F;a&gt; are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;broken&lt;&#x2F;li&gt;
&lt;li&gt;youneedbettersecurity&lt;&#x2F;li&gt;
&lt;li&gt;INTERNETS THROUGH THE AIR&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Have you seen any amusing SSIDs today?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>&quot;Open in Tabs&quot; fixed in Firefox 3, at last</title>
    <published>2007-09-13T19:33:42+00:00</published>
    <updated>2007-09-13T19:33:42+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/13/open-in-tabs-fixed-in-firefox-3-at-last/"/>
    <id>https://chuyeow.wtf/2007/09/13/open-in-tabs-fixed-in-firefox-3-at-last/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/13/open-in-tabs-fixed-in-firefox-3-at-last/">&lt;p&gt;The last time I blogged about Firefox&#x27;s &lt;a href=&quot;&#x2F;2004&#x2F;09&#x2F;30&#x2F;another-call-to-fix-open-in-tabs-in-firefox&#x2F;&quot;&gt;&quot;Open in Tabs&quot; behavior&lt;&#x2F;a&gt; was 3 years ago in September 2004. Open in Tabs is quite a cool bookmark feature where you can open a folder of bookmarks.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=258224&quot;&gt;some of us &lt;&#x2F;a&gt;felt that there it had a flawed implementation. Here&#x27;s how you can see it for yourself:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Here, try this in a new Firefox window. Open up 4 tabs. Make sure that there’s nothing in these tabs that you want to remember to come back to later, especially the last 2. Now try using &quot;Open in Tabs&quot; on a bookmark folder with just 2 bookmarks. What just happened? Firefox has closed the last 2 tabs and loaded the first 2 tabs with the first 2 bookmarks. Well, actually this is not so bad for the first 2 tabs, because you can use the &quot;Back&quot; button to go back to your page should you want to, but the tabs that were closed are lost.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;It was then rather unfortunate that &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=258224&quot;&gt;this bug&lt;&#x2F;a&gt; was closed as WONTFIX. I was thus surprised to see a patch for a &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=175124&quot;&gt;similar bug&lt;&#x2F;a&gt; land in the Firefox 3 trunk about a week ago (I haven&#x27;t had time to blog about it until now!)&lt;&#x2F;p&gt;
&lt;p&gt;This change in Firefox 3 means that &quot;Open in Tabs&quot; is no longer a &lt;em&gt;destructive&lt;&#x2F;em&gt; proposition - a &quot;use existing tabs and append&quot; strategy is employed.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s how it looks like graphically (which I expect would be easier to understand compared to aforementioned &quot;use existing tabs and append&quot; strategy). Let&#x27;s start with 4 tabs, with the Google, Ruby on Rails, Facebook and jQuery websites loaded:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;open-in-tabs-initial.png&quot; alt=&quot;Open in tabs, initial&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I have a bookmark folder with 2 bookmarks (to the Firebug and Prototype websites) in them:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;open-in-tabs-bookmark-folder.png&quot; alt=&quot;Open in tabs, bookmark folder&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If I click on &quot;Open in Tabs&quot; in Firefox 3, I end up with this:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;open-in-tabs-after.png&quot; alt=&quot;Open in tabs, initial&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Notice how the Back button is enabled on the Firebug tab (allowing us to go back to the Google webpage), and the Prototype bookmark is loaded in a &lt;em&gt;new&lt;&#x2F;em&gt; tab after the Firebug one.&lt;&#x2F;p&gt;
&lt;p&gt;Small little tweak you may say, but it&#x27;s all these small usability tweaks (like the recent &lt;a href=&quot;&#x2F;2007&#x2F;09&#x2F;07&#x2F;smarter-and-less-annoying-password-manager-in-firefox-3&#x2F;&quot;&gt;Password Manager improvement&lt;&#x2F;a&gt;) that promise to make Firefox 3 a much better browser.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Dugg? No problem with WordPress</title>
    <published>2007-09-13T18:53:25+00:00</published>
    <updated>2007-09-13T18:53:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/13/dugg-no-problem-with-wordpress/"/>
    <id>https://chuyeow.wtf/2007/09/13/dugg-no-problem-with-wordpress/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/13/dugg-no-problem-with-wordpress/">&lt;p&gt;An &lt;a href=&quot;&#x2F;2007&#x2F;08&#x2F;13&#x2F;mmorpg-called-outside&#x2F;&quot;&gt;old post I wrote on a spoof &lt;acronym title=&quot;Massively Multiplayer Online Role-Playing Game&quot;&gt;MMORPG&lt;&#x2F;acronym&gt; named &quot;Outside&quot;&lt;&#x2F;a&gt; was &lt;a href=&quot;http:&#x2F;&#x2F;digg.com&#x2F;offbeat_news&#x2F;Incredible_MMORPG_called_Outside_PIC&quot;&gt;Dugg&lt;&#x2F;a&gt; not too long ago and I was quite pleased to find that my server and the blogging software (&lt;a href=&quot;http:&#x2F;&#x2F;wordpress.org&#x2F;&quot;&gt;WordPress&lt;&#x2F;a&gt;) that I use was handling the load extremely well. Quite obviously I was getting more hits in a day than entire months:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;blog-stats-after-getting-dugg.png&quot; alt=&quot;Blog stats after getting Dugg&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;My setup is a Virtual Private Server (VPS) with 256MB RAM hosted at &lt;a href=&quot;http:&#x2F;&#x2F;www.slicehost.com&#x2F;&quot;&gt;SliceHost&lt;&#x2F;a&gt; and this blog is served off &lt;a href=&quot;http:&#x2F;&#x2F;nginx.net&#x2F;&quot;&gt;Nginx&lt;&#x2F;a&gt; and PHP FastCGI processes to handle PHP scripts. The wonderful (because it just works and is really easy to setup) &lt;a href=&quot;http:&#x2F;&#x2F;mnm.uib.es&#x2F;gallir&#x2F;wp-cache-2&#x2F;&quot;&gt;WP-Cache WordPress plugin&lt;&#x2F;a&gt; keeps a cache of pages that&#x27;s swept at logical times (i.e. whenever there are any updates or comments).&lt;&#x2F;p&gt;
&lt;p&gt;I may be a Rails&#x2F;merb fanboy, but this awesome piece of blog software that can stand up to the &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Digg_effect&quot;&gt;Digg Effect&lt;&#x2F;a&gt; with ease is &lt;strong&gt;great&lt;&#x2F;strong&gt;. WordPress &lt;code&gt;FTW&lt;&#x2F;code&gt;!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>jQuery 1.2 goodness</title>
    <published>2007-09-13T15:04:54+00:00</published>
    <updated>2007-09-13T15:04:54+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/13/jquery-12-goodness/"/>
    <id>https://chuyeow.wtf/2007/09/13/jquery-12-goodness/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/13/jquery-12-goodness/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;jquery.com&#x2F;blog&#x2F;2007&#x2F;09&#x2F;10&#x2F;jquery-12-jqueryextendawesome&#x2F;&quot;&gt;jQuery 1.2 was released yesterday&lt;&#x2F;a&gt; and while it&#x27;s unfortunate that it doesn&#x27;t work with some of the &lt;a href=&quot;http:&#x2F;&#x2F;stilbuero.de&#x2F;jquery&#x2F;tabs&#x2F;&quot;&gt;fantastic&lt;&#x2F;a&gt; jQuery &lt;a href=&quot;http:&#x2F;&#x2F;tablesorter.com&#x2F;&quot;&gt;plugins&lt;&#x2F;a&gt; I am already using, there&#x27;re some really cool new features. In particular (this is my favorite), built-in &lt;a href=&quot;http:&#x2F;&#x2F;docs.jquery.com&#x2F;Release:jQuery_1.2&#x2F;Ajax#Cross-Domain_getScript&quot;&gt;cross-domain script loading&lt;&#x2F;a&gt; via the &lt;code&gt;getScript&lt;&#x2F;code&gt; is just too convenient.&lt;&#x2F;p&gt;
&lt;p&gt;This would be awesome for loading heavy scripts later and only when they are &quot;activated&quot;, like Google Maps (which was exactly what I was trying to do earlier before realizing I&#x27;d need to setup a reverse proxy to workaround the cross-domain problem).&lt;&#x2F;p&gt;
&lt;p&gt;Oh, and the &lt;a href=&quot;http:&#x2F;&#x2F;docs.jquery.com&#x2F;Release:jQuery_1.2&#x2F;Ajax#Disable_Caching&quot;&gt;easy way to turn off browser caching in AJAX calls&lt;&#x2F;a&gt; is a nice convenience as well (no need to append random numbers or timestamps manually).&lt;&#x2F;p&gt;
&lt;p&gt;Yup, I&#x27;m in love with jQuery right now. Protoype and YUI have fallen by the wayside like Chinese first and second wives of yore.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>What&#x27;s your SSID?</title>
    <published>2007-09-07T20:10:44+00:00</published>
    <updated>2007-09-07T20:10:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/07/whats-your-ssid/"/>
    <id>https://chuyeow.wtf/2007/09/07/whats-your-ssid/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/07/whats-your-ssid/">&lt;p&gt;After seeing this amusingly-named &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;SSID&quot;&gt;SSID&lt;&#x2F;a&gt;, I thought it&#x27;d be fun to post the SSID of my wireless network at home:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;assassid_ssid.jpg&quot; alt=&quot;AssAssID &#x2F; SSID?&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The name is completely not my idea so I claim no credit - I stole it from my girlfriend&#x27;s brother, who conceived the SSID of &quot;AssAssID&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s your SSID and have you seen any amusing ones? Or is yours one of the bajillion &#x27;linksys&#x27; or &#x27;DLINK&#x27; SSIDs in existence?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Smarter (and less-annoying) Password Manager in Firefox 3</title>
    <published>2007-09-07T20:02:05+00:00</published>
    <updated>2007-09-07T20:02:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/09/07/smarter-and-less-annoying-password-manager-in-firefox-3/"/>
    <id>https://chuyeow.wtf/2007/09/07/smarter-and-less-annoying-password-manager-in-firefox-3/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/09/07/smarter-and-less-annoying-password-manager-in-firefox-3/">&lt;p&gt;This is really nice: trunk builds of Firefox 3 since 1 Sept 2007 have a smarter Password Manager that asks you whether you want to save your passwords in a &lt;em&gt;non-modal&lt;&#x2F;em&gt; way. (The relevant enhancement ticket is &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=226735&quot;&gt;replace modal pre-submit save password dialog with post-submit bar&lt;&#x2F;a&gt; for those of you who want to read the bug report.)&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, in simpler words (and some screenshots to follow), what this means is that whenever you login to a site that requires your password, Firefox will no longer wait for you to tell it whether it should remember your password. I bet this looks familiar:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-2-remember-my-password-dialog.png&quot; alt=&quot;Firefox 2 modal &#x27;remember my password&#x27; dialog&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Its usability is lacking because of 2 things:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;if I entered the wrong password told Firefox to remember my password, I&#x27;d have to go to the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;07&#x2F;18&#x2F;show-saved-passwords-option-in-firefox&#x2F;&quot;&gt;Password Manager&lt;&#x2F;a&gt; to delete it, and&lt;&#x2F;li&gt;
&lt;li&gt;Firefox doesn&#x27;t submit your login until you tell it what to do with your password, annoying for 2 reasons:
&lt;ol&gt;
&lt;li&gt;Sometimes I&#x27;m not sure if I entered the right password - but I&#x27;d be pretty sure of that if I get to the next page (i.e. if my login request was submitted).&lt;&#x2F;li&gt;
&lt;li&gt;It&#x27;s just plain faster if Firefox submitted the login &lt;em&gt;and&lt;&#x2F;em&gt; asked about my password together&#x2F;later - blocking the submit is just a waste of time (i.e. a non-modal dialog would make more sense).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So, especially since I&#x27;ve used &lt;a href=&quot;http:&#x2F;&#x2F;wakoopa.com&#x2F;chuyeow&#x2F;usage&quot;&gt;used Firefox for 156 hours at work since a month and a half ago&lt;&#x2F;a&gt; (my most used application apparently), it&#x27;s pretty cool to find out that Firefox 3 will come with a non-modal &quot;Remember my password&quot; dialog. Here&#x27;s what it looks like:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;minefield-non-modal-remember-password-dialog.png&quot; alt=&quot;The new non-modal &#x27;Remember my password&#x27; dialog in Firefox 3&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The dialog appears on top right after Firefox submits the login form. One more thing to look forward to in Firefox 3!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>How to have Firefox 3 and Firefox 2 running at the same time</title>
    <published>2007-08-20T20:06:50+00:00</published>
    <updated>2007-08-20T20:06:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/08/20/how-to-have-firefox-3-and-firefox-2-running-at-the-same-time/"/>
    <id>https://chuyeow.wtf/2007/08/20/how-to-have-firefox-3-and-firefox-2-running-at-the-same-time/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/08/20/how-to-have-firefox-3-and-firefox-2-running-at-the-same-time/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;wiki.mozilla.org&#x2F;Firefox3&quot;&gt;Firefox 3&lt;&#x2F;a&gt;, or Gran Paradiso, is really shaping up with some pretty &lt;a href=&quot;http:&#x2F;&#x2F;mozillalinks.org&#x2F;wp&#x2F;2007&#x2F;08&#x2F;advanced-bookmarking-tagging-enters-firefox-3&#x2F;&quot;&gt;cool&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;archives&#x2F;2007&#x2F;08&#x2F;nifty_tab_anima.html&quot;&gt;new&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;mozillalinks.org&#x2F;wp&#x2F;2007&#x2F;08&#x2F;easy-plugin-management-for-firefox-3&#x2F;&quot;&gt;features&lt;&#x2F;a&gt; being implemented in the recent months. That&#x27;s not including the cool &lt;a href=&quot;http:&#x2F;&#x2F;wiki.mozilla.org&#x2F;FUEL&quot;&gt;FUEL&lt;&#x2F;a&gt; (Firefox User Extension Library) JavaScript library that promises to make extension development a bajillion times more productive, &lt;a href=&quot;http:&#x2F;&#x2F;wiki.mozilla.org&#x2F;Places&quot;&gt;Places&lt;&#x2F;a&gt; for data storage, and the use of &lt;a href=&quot;http:&#x2F;&#x2F;cairographics.org&#x2F;&quot;&gt;Cairo&lt;&#x2F;a&gt; for graphics.&lt;&#x2F;p&gt;
&lt;p&gt;The problem with playing around with Firefox 3 is (by default) you can&#x27;t run both Firefox 2 and 3 at the same time since they both insist on using the same profile and insist on running only 1 copy of Firefox at any one time.&lt;&#x2F;p&gt;
&lt;p&gt;Want to get in on checking out the new features but still want good old Firefox 2? Here&#x27;s how:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;First, you should &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;support&#x2F;firefox&#x2F;profile&quot;&gt;create a new profile&lt;&#x2F;a&gt; just for testing Firefox 3. You should do this to keep your precious Firefox profile safe from any problems in Firefox 3. Otherwise, Firefox 3 will use your current Firefox 2 profile by default. You can create a new profile easily with the Profile Manager, which you can access by running:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;&#x2F;path&#x2F;to&#x2F;firefox -profilemanager -no-remote&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;    (Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;rubbedcode.com&#x2F;blog&#x2F;&quot;&gt;Jeff&lt;&#x2F;a&gt; for &lt;a href=&quot;#comment-258587&quot;&gt;pointing out&lt;&#x2F;a&gt; that there is no need to close Firefox first before creating a new profile.)&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-profile-manager.png&quot; alt=&quot;Firefox profile manager&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Create a new profile (I gave it an obvious name, &#x27;minefield&#x27;, which is the codename of the current Firefox trunk). If you get confused, the official Firefox website has &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;support&#x2F;firefox&#x2F;profile&quot;&gt;more detailed instructions on how to create a new profile&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Now, you should already have one of the Firefox nightly builds. If not, you can download the latest nightly build from the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-trunk&#x2F;&quot;&gt;Firefox nightly build directory&lt;&#x2F;a&gt;. You can start up Firefox &lt;strong&gt;2&lt;&#x2F;strong&gt; normally (just so you can see Firefox 2 and 3 running side by side). For Firefox 3, we&#x27;re going to start it differently.&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;We&#x27;re gonna run Firefox 3 using our newly created profile. I&#x27;d written earlier on how you can &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;03&#x2F;01&#x2F;running-two-firefox-profiles-simultaneously&#x2F;&quot;&gt;run two Firefox profiles at the same time&lt;&#x2F;a&gt;, and you can still do the same with Firefox 3:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;&#x2F;path&#x2F;to&#x2F;firefox3 -P minefield -no-remote &amp;amp;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &#x27;minefield&#x27; in the command is the name of the profile we created earlier. Windows users should leave out the &#x27;&amp;amp;&#x27; (on UNIX-based systems, this just runs Minefield in the background so that you can exit your terminal).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Firefox 3 should start up with your new clean profile!&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-minefield-in-dock.png&quot; alt=&quot;Firefox and Minefield icons in my Mac OS X dock&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s the Firefox 3 (Minefield) icon living right next to my Firefox 2 icon in my dock (yeah, I use a Mac).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.deepcalm.com&#x2F;&quot;&gt;Andy Croll&lt;&#x2F;a&gt; (who works at &lt;a href=&quot;http:&#x2F;&#x2F;bezurk.com&#x2F;&quot;&gt;Bezurk&lt;&#x2F;a&gt; too) has &lt;a href=&quot;http:&#x2F;&#x2F;www.deepcalm.com&#x2F;writing&#x2F;running-firefox-3-at-the-same-time-as-firefox-2-applescript-edition&quot;&gt;written a convenient little AppleScript&lt;&#x2F;a&gt; so you don&#x27;t have to repeat these steps.&lt;&#x2F;p&gt;
&lt;p&gt;Just so I can put up another screenshot (as if I needed to prove that this really works), here&#x27;s Firefox 2 and one of the recent Firefox 3 nightly builds running side by side:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-and-minefield-side-by-side.jpg&quot; alt=&quot;Firefox and Minefield running side by side&quot; &#x2F;&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Have fun! I think I&#x27;ll get back to watching the development of the trunk (now that it&#x27;s getting more exciting) like I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2006&#x2F;01&#x2F;24&#x2F;tabbed-browsing-enhancements-for-firefox-in-latest-build&#x2F;&quot;&gt;used&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;07&#x2F;13&#x2F;rss-feed-integration-in-firefox&#x2F;&quot;&gt;to&lt;&#x2F;a&gt; in the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;07&#x2F;18&#x2F;show-saved-passwords-option-in-firefox&#x2F;&quot;&gt;build&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;07&#x2F;09&#x2F;new-find-toolbar-for-mozilla-firefox&#x2F;&quot;&gt;up&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;10&#x2F;02&#x2F;tabbed-browsing-gets-even-better-in-firefox&#x2F;&quot;&gt;to&lt;&#x2F;a&gt; Firefox 1 and 2. I may even make some posts!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Most sensible post on the Odex controversy in Singapore</title>
    <published>2007-08-20T10:45:46+00:00</published>
    <updated>2007-08-20T10:45:46+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/08/20/most-sensible-post-on-the-odex-controversy-in-singapore/"/>
    <id>https://chuyeow.wtf/2007/08/20/most-sensible-post-on-the-odex-controversy-in-singapore/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/08/20/most-sensible-post-on-the-odex-controversy-in-singapore/">&lt;p&gt;RE: the recent &lt;a href=&quot;http:&#x2F;&#x2F;torrentfreak.com&#x2F;bittorrent-anime-downloaders-identified-3000-bill-in-the-mail&#x2F;&quot;&gt;anime and &lt;acronym title=&quot;Intellectual Property&quot;&gt;IP&lt;&#x2F;acronym&gt; controversy in Singapore&lt;&#x2F;a&gt;, everyone affected in Singapore should read &lt;a href=&quot;http:&#x2F;&#x2F;www.darkmirage.com&#x2F;2007&#x2F;08&#x2F;19&#x2F;odex-having-your-cake-and-eating-it-too&#x2F;&quot;&gt;this sensible post by Dark Mirage&lt;&#x2F;a&gt;. He offers really good advice on what you should and shouldn&#x27;t do should you find yourself the recipient of one of Odex&#x27;s letters. Be sure to read the comments too.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;More reading:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Odex&quot;&gt;Odex on Wikipedia&lt;&#x2F;a&gt; - check out an &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Image:Lol_odex.jpg&quot;&gt;example of their bad subtitling&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Odex&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;odex.com.sg&#x2F;&quot;&gt;response on their website&lt;&#x2F;a&gt; (this was also printed in the 22 August 2007 edition of the Straits Times).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Don&#x27;t trust web apps (or how Google Reader and my ISP conspired to lose all my feeds)</title>
    <published>2007-08-17T18:33:11+00:00</published>
    <updated>2007-08-17T18:33:11+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/08/17/dont-trust-web-apps-or-how-google-reader-and-my-isp-conspired-to-lose-all-my-feeds/"/>
    <id>https://chuyeow.wtf/2007/08/17/dont-trust-web-apps-or-how-google-reader-and-my-isp-conspired-to-lose-all-my-feeds/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/08/17/dont-trust-web-apps-or-how-google-reader-and-my-isp-conspired-to-lose-all-my-feeds/">&lt;p&gt;About a month ago, I logged in to Google Reader to see a shocking thing - all my subscriptions were gone and I was subscribed to some feeds that I&#x27;ve never heard of.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;greader-subs-all-gone.png&quot; alt=&quot;All my feed subscriptions gone from Google Reader&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I would say I&#x27;m a pretty heavy Google Reader user, checking my several hundred subscriptions several times a day, so it was pretty distressing. I posted a &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.com&#x2F;group&#x2F;Google-Labs-Reader&#x2F;t&#x2F;2e9436dd16c5f6e2&quot;&gt;thread at the Google Reader Google Group&lt;&#x2F;a&gt; (the link doesn&#x27;t work now because they&#x27;ve moved the Google Group somewhere else for some reason) and several other people responded that they were seeing the same weirdness.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I had the same problem, and here&#x27;s the really weird part: I got YOUR feeds! If you look at the top of the page you can see the account you&#x27;re supposedly logged in with. Well, I saw your account there. And this was before I read this message. I also saw some other names every so often. Right now it says &lt;em&gt;email censored&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Maybe it&#x27;s some weird mix up with the ISP. Do you use SingNet?&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Some time later I started seeing other people&#x27;s accounts:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;greader-other-accounts.png&quot; alt=&quot;Seeing other people’s accounts in Google Reader&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The problem affected only &lt;a href=&quot;http:&#x2F;&#x2F;www.singnet.com.sg&#x2F;&quot;&gt;Singnet&lt;&#x2F;a&gt; (a major local ISP) users in Singapore (about 7 other users in Singapore using Singnet responded with the same problems). No one really knew what the problem was and neither the Google Reader team nor Singnet (someone sent them an email) responded.&lt;&#x2F;p&gt;
&lt;p&gt;My guess was Singnet started caching Google Reader at a proxy and somehow managed to bypass all the credentials that was needed to modify any feed subscriptions. Sounds like a pretty nasty security bug to me.&lt;&#x2F;p&gt;
&lt;p&gt;The aftermath:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Google Reader no longer has my feed subscriptions (I didn&#x27;t manage to recover them so it&#x27;s still in the sad state of having only 1 feed subscription to some UK property shite).&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;ve manually rebuilt my OPML file (containing my feed subscriptions).&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;m now using &lt;a href=&quot;http:&#x2F;&#x2F;www.newsfirerss.com&#x2F;&quot;&gt;NewsFire&lt;&#x2F;a&gt;. It&#x27;s not decentralized so I can&#x27;t sync it between machines, which really sucks since I have 2 primary machines, but I&#x27;m wary of using online feed readers right now.&lt;&#x2F;li&gt;
&lt;li&gt;I regularly export my OPML file and check it into Subversion.&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;m looking for a reliable decentralized feed reader once again (having used &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;&quot;&gt;Bloglines&lt;&#x2F;a&gt; and of course, &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2006&#x2F;10&#x2F;24&#x2F;google-reader-a-bloglines-users-perspective&#x2F;&quot;&gt;Google Reader&lt;&#x2F;a&gt; prior to the catastrophe).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>ActiveRecord attribute-related improvements on Edge Rails</title>
    <published>2007-08-14T17:54:16+00:00</published>
    <updated>2007-08-14T17:54:16+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/08/14/activerecord-attribute-related-improvements-on-edge-rails/"/>
    <id>https://chuyeow.wtf/2007/08/14/activerecord-attribute-related-improvements-on-edge-rails/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/08/14/activerecord-attribute-related-improvements-on-edge-rails/">&lt;p&gt;I just noticed a very fresh changeset committed into the Rails trunk that&#x27;s pretty damn cool: &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;7315&quot;&gt;changeset 7315&lt;&#x2F;a&gt;. Michael Koziarski (aka nzkoz&quot;) has refactored ActiveRecord&#x27;s attribute-related methods that, among other things:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;caches typecasted attribute values&lt;&#x2F;strong&gt; in hashes. This avoids expensive typecasting (such as for Time-related attributes) which means access to these fields is significantly faster!&lt;&#x2F;li&gt;
&lt;li&gt;moves generation of attribute methods to the &lt;strong&gt;class&lt;&#x2F;strong&gt;, instead of the instance.&lt;&#x2F;li&gt;
&lt;li&gt;generates attribute reader &lt;em&gt;and&lt;&#x2F;em&gt; writer methods (before, only reader methods were generated and writer methods relied on &lt;code&gt;method_missing&lt;&#x2F;code&gt; magic).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.com&#x2F;group&#x2F;rubyonrails-core&#x2F;browse_frm&#x2F;thread&#x2F;76b62bfb4448e4c3&quot;&gt;Ruby on Rails: Core Google Group thread on this patch&lt;&#x2F;a&gt; has more info on the changes and some of the rationale behind them.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a simple (read: totally unscientific) benchmark I ran to access a DateTime attribute 10000 times (I ran it that many times to reduce the effect of the &lt;code&gt;City.find&lt;&#x2F;code&gt; call) with pre-revision 7315 edge Rails (I was using revision 7314):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; Benchmark.bmbm do |x| 
?&amp;gt;   x.report(&#x27;test&#x27;) { c = City.find(:first); 10000.times { c.created_at } }
&amp;gt;&amp;gt; end
Rehearsal ----------------------------------------
test   1.500000   0.010000   1.510000 (  1.568782)
------------------------------- total: 1.510000sec
&lt;pre&gt;&lt;code&gt;       user     system      total        real
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;test   1.500000   0.010000   1.510000 (  &lt;strong&gt;1.592264&lt;&#x2F;strong&gt;)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Post changeset 7315:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; Benchmark.bmbm do |x| 
?&amp;gt;   x.report(&#x27;test&#x27;) { c = City.find(:first); 10000.times { c.created_at } }
&amp;gt;&amp;gt; end
Rehearsal ----------------------------------------
test   0.100000   0.010000   0.110000 (  0.129514)
------------------------------- total: 0.110000sec
&lt;pre&gt;&lt;code&gt;       user     system      total        real
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;test   0.000000   0.000000   0.000000 (  &lt;strong&gt;0.009831&lt;&#x2F;strong&gt;)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Quite a bit faster!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MMORPG called &quot;Outside&quot;</title>
    <published>2007-08-13T18:59:56+00:00</published>
    <updated>2007-08-13T18:59:56+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/08/13/mmorpg-called-outside/"/>
    <id>https://chuyeow.wtf/2007/08/13/mmorpg-called-outside/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/08/13/mmorpg-called-outside/">&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;outside_mmorpg.jpg&quot; alt=&quot;MMORPG called ‘Outside’&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Seen at &lt;a href=&quot;http:&#x2F;&#x2F;chickencrap.com&#x2F;c.php?c=980 &quot;&gt;http:&#x2F;&#x2F;chickencrap.com&#x2F;c.php?c=980&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I thought it was funny (I was a hardcore World of Warcraft player). All the features are so true too. Fully &lt;acronym title=&quot;Player vs. Player&quot;&gt;PvP&lt;&#x2F;acronym&gt; &lt;em&gt;rawr&lt;&#x2F;em&gt;! The penalty of death sucks though - if you thought the experience point penalty in EverQuest was bad, think again.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;This post got &lt;a href=&quot;http:&#x2F;&#x2F;digg.com&#x2F;offbeat_news&#x2F;Incredible_MMORPG_called_Outside_PIC&quot;&gt;Dugg&lt;&#x2F;a&gt;! I had quite a few giggles reading the comments &lt;a href=&quot;http:&#x2F;&#x2F;digg.com&#x2F;offbeat_news&#x2F;Incredible_MMORPG_called_Outside_PIC&quot;&gt;there&lt;&#x2F;a&gt; and those &lt;a href=&quot;#comments&quot;&gt;posted here&lt;&#x2F;a&gt;. And yes, I think that is KL (Kuala Lumpur) Tower in the picture.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>How to install Rails, the wrong way</title>
    <published>2007-07-30T17:34:25+00:00</published>
    <updated>2007-07-30T17:34:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/07/30/how-to-install-rails-the-wrong-way/"/>
    <id>https://chuyeow.wtf/2007/07/30/how-to-install-rails-the-wrong-way/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/07/30/how-to-install-rails-the-wrong-way/">&lt;p&gt;I&#x27;ve always thought the &lt;a href=&quot;http:&#x2F;&#x2F;rubyonrails.org&#x2F;down&quot;&gt;Rails installation instructions&lt;&#x2F;a&gt; on the official Rails website were pretty straightforward, so I couldn&#x27;t help laughing when I saw this chat transcript a friend copied and pasted for me:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;[5:23:05 PM] X says: try so many times finally can le&lt;br &#x2F;&gt;
[5:23:23 PM] X says: it is not about the version or wat&lt;br &#x2F;&gt;
[5:23:46 PM] Y says: then what is the error?&lt;br &#x2F;&gt;
[5:24:22 PM] X says: the gem install rails--include-dependencies&lt;br &#x2F;&gt;
[5:24:37 PM] X says: &lt;strong&gt;between rails and --include got spacing&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;I know it&#x27;s mean to laugh but I&#x27;m not a carebear! I think it took him a day to install it despite having installed and uninstalled it for 2 whole months (don&#x27;t ask me why, but his environment kept getting borked).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Adium themes use plain old XHTML, CSS and JS</title>
    <published>2007-07-28T14:07:18+00:00</published>
    <updated>2007-07-28T14:07:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/07/28/adium-themes-use-plain-old-xhtml-css-and-js/"/>
    <id>https://chuyeow.wtf/2007/07/28/adium-themes-use-plain-old-xhtml-css-and-js/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/07/28/adium-themes-use-plain-old-xhtml-css-and-js/">&lt;p&gt;Just a quick note of something I found out while reading &lt;a href=&quot;http:&#x2F;&#x2F;www.transcendingcss.com&#x2F;&quot;&gt;Transcending CSS&lt;&#x2F;a&gt;: all the &lt;a href=&quot;http:&#x2F;&#x2F;adiumxtras.com&#x2F;&quot;&gt;themes&lt;&#x2F;a&gt; (message styles, contact list styles, etc.) in &lt;a href=&quot;http:&#x2F;&#x2F;adiumx.com&#x2F;&quot;&gt;Adium&lt;&#x2F;a&gt; are crafted with our old friends XHTML, CSS and JS. I opened up a few &lt;a href=&quot;http:&#x2F;&#x2F;adiumxtras.com&#x2F;&quot;&gt;AdiumXtras&lt;&#x2F;a&gt; to see for myself and true enough, &lt;code&gt;&amp;lt;div&amp;gt;&lt;&#x2F;code&gt;s and CSS rules make up the style. Very smart decision by the Adium developers.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Some of the world&#x27;s hottest startups - Bezurk on Business 2.0</title>
    <published>2007-07-27T18:15:18+00:00</published>
    <updated>2007-07-27T18:15:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/07/27/some-of-the-worlds-hottest-startups-bezurk-on-business-20/"/>
    <id>https://chuyeow.wtf/2007/07/27/some-of-the-worlds-hottest-startups-bezurk-on-business-20/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/07/27/some-of-the-worlds-hottest-startups-bezurk-on-business-20/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;money.cnn.com&#x2F;magazines&#x2F;business2&#x2F;index.html&quot;&gt;Business 2.0&lt;&#x2F;a&gt; recently published an &lt;a href=&quot;http:&#x2F;&#x2F;money.cnn.com&#x2F;galleries&#x2F;2007&#x2F;biz2&#x2F;0707&#x2F;gallery.web_world.biz2&#x2F;index.html&quot;&gt;article on the world&#x27;s hottest startups outside the US&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;money.cnn.com&#x2F;galleries&#x2F;2007&#x2F;biz2&#x2F;0707&#x2F;gallery.web_world.biz2&#x2F;8.html&quot;&gt;Bezurk was picked&lt;&#x2F;a&gt;. Nice to know that ;)&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;money.cnn.com&#x2F;galleries&#x2F;2007&#x2F;biz2&#x2F;0707&#x2F;gallery.web_world.biz2&#x2F;8.html&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;bezurk-on-business-20.png&quot; alt=&quot;Bezurk on Business 2.0&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>YSlow - Firefox extension that helps to optimize your web pages</title>
    <published>2007-07-26T13:24:51+00:00</published>
    <updated>2007-07-26T13:24:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/07/26/yslow-firefox-extension-that-helps-to-optimize-your-web-pages/"/>
    <id>https://chuyeow.wtf/2007/07/26/yslow-firefox-extension-that-helps-to-optimize-your-web-pages/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/07/26/yslow-firefox-extension-that-helps-to-optimize-your-web-pages/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;developer.yahoo.com&#x2F;yslow&#x2F;&quot;&gt;YSlow&lt;&#x2F;a&gt; is a Firefox extension that works with &lt;a href=&quot;http:&#x2F;&#x2F;getfirebug.com&#x2F;&quot;&gt;Firebug&lt;&#x2F;a&gt; to grade your web pages&#x27; performance and gives you advice on how to fix any problems. Awesome. It has &lt;a href=&quot;http:&#x2F;&#x2F;www.jslint.com&#x2F;&quot;&gt;JSLint&lt;&#x2F;a&gt; built into it too. And yes I got a big freaking &lt;strong&gt;F&lt;&#x2F;strong&gt;. Via &lt;a href=&quot;http:&#x2F;&#x2F;arunthampi.wordpress.com&#x2F;&quot;&gt;Arun&lt;&#x2F;a&gt; (&lt;acronym title=&quot;In Real Life&quot;&gt;IRL&lt;&#x2F;acronym&gt;).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MySQL command line &quot;secret&quot;</title>
    <published>2007-07-19T18:02:25+00:00</published>
    <updated>2007-07-19T18:02:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/07/19/mysql-command-line-secret/"/>
    <id>https://chuyeow.wtf/2007/07/19/mysql-command-line-secret/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/07/19/mysql-command-line-secret/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;rubyisawesome.com&#x2F;&quot;&gt;Tom Preston-Werner&lt;&#x2F;a&gt; (of Gravatar and Chronic fame) &lt;a href=&quot;http:&#x2F;&#x2F;rubyisawesome.com&#x2F;2007&#x2F;7&#x2F;10&#x2F;mysql-secrets-g-instead-of&quot;&gt;wrote about this neat MySQL command line &quot;trick&quot;&lt;&#x2F;a&gt; where instead of ending your SELECT statements with the usual semi-colon, using a &quot;\G&quot; gives you a very readable output.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;mysql&gt; select * from locations where location_code = &#x27;SIN&#x27;  limit 1\G
*************************** 1. row ***************************
          location_code: SIN
          location_name: Singapore Changi Apt 
multi_airport_city_code: SIN
          location_type: A
      location_sub_type: A
           country_code: SG
             state_code: 
                 active: 1
               latitude: 01.22.00N
              longitude: 103.59.00E
1 row in set (0.10 sec)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Very useful, especially when SELECTing multiple fields where the output becomes unfit for visual consumption (you know what I mean, just go SELECT some stuff in your MySQL command line and you&#x27;ll see if you don&#x27;t).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>God and your web server</title>
    <published>2007-07-18T23:43:38+00:00</published>
    <updated>2007-07-18T23:43:38+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/07/18/god-and-your-web-server/"/>
    <id>https://chuyeow.wtf/2007/07/18/god-and-your-web-server/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/07/18/god-and-your-web-server/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;god.rubyforge.org&#x2F;&quot;&gt;God&lt;&#x2F;a&gt; is a new process monitoring Ruby framework with a rather apt name (no, it&#x27;s not &lt;em&gt;that&lt;&#x2F;em&gt; &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;God&quot;&gt;God&lt;&#x2F;a&gt;). The config files looks something like that:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;God.meddle do |god|
  god.watch do |w|
    ...
  end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Interesting code to write. And feels safe too to have God watching over your mongrels. Oh and you can use it to clean up stale mongrel PID files without &lt;a href=&quot;http:&#x2F;&#x2F;textsnippets.com&#x2F;posts&#x2F;show&#x2F;931&quot;&gt;patching mongrel_rails&lt;&#x2F;a&gt;. Right now I use &lt;a href=&quot;http:&#x2F;&#x2F;www.tildeslash.com&#x2F;monit&#x2F;&quot;&gt;monit&lt;&#x2F;a&gt; a lot and it&#x27;s really rather unDRY to have repeated configs for each mongrel on the server (is there a better way of doing this in monit?). God would be able to DRY it up.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>logrotate and mongrel (mongrel_cluster)</title>
    <published>2007-07-16T13:45:21+00:00</published>
    <updated>2007-07-16T13:45:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/07/16/logrotate-and-mongrel-mongrel_cluster/"/>
    <id>https://chuyeow.wtf/2007/07/16/logrotate-and-mongrel-mongrel_cluster/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/07/16/logrotate-and-mongrel-mongrel_cluster/">&lt;p&gt;I&#x27;ve never actually explored log rotation tools in Linux and merely knew of the existence of &lt;a href=&quot;http:&#x2F;&#x2F;www.linuxcommand.org&#x2F;man_pages&#x2F;logrotate8.html&quot;&gt;logrotate&lt;&#x2F;a&gt; and left it at that until log sizes really became a problem. Turns out logrotate is amazingly easy to configure, and thanks to &lt;a href=&quot;http:&#x2F;&#x2F;www.atmos.org&#x2F;2007&#x2F;3&#x2F;22&#x2F;logrotate-and-mongrel&quot;&gt;this Logrotate and Mongrel blog post by Corey Donohoe&lt;&#x2F;a&gt; I have it setup for my Rails applications that are running on &lt;a href=&quot;http:&#x2F;&#x2F;mongrel.rubyforge.org&#x2F;&quot;&gt;Mongrel&lt;&#x2F;a&gt;. Here&#x27;s what my &lt;code&gt;&#x2F;etc&#x2F;logrotate.d&#x2F;mongrel_cluster&lt;&#x2F;code&gt; looks like:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;&#x2F;var&#x2F;railsapps&#x2F;APP_NAME&#x2F;shared&#x2F;log&#x2F;production.log {
  daily
  rotate 28
  missingok
  compress
  sharedscripts
  postrotate
    for i in `ls &#x2F;var&#x2F;railsapps&#x2F;APP_NAME&#x2F;shared&#x2F;log&#x2F;*.pid`; do
      kill -USR2 `cat $i`
    done
  endscript
}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
  </entry>
  <entry>
    <title>Better JSON output from Rails with the Jsonifier plugin</title>
    <published>2007-07-11T12:46:38+00:00</published>
    <updated>2007-07-11T12:46:38+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/07/11/better-json-output-from-rails-with-the-jsonifier-plugin/"/>
    <id>https://chuyeow.wtf/2007/07/11/better-json-output-from-rails-with-the-jsonifier-plugin/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/07/11/better-json-output-from-rails-with-the-jsonifier-plugin/">&lt;p&gt;&lt;ins&gt;Update: Edge Rails now does whatever Jsonifier does (and more). Check out my blog &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;10&#x2F;10&#x2F;new-on-edge-rails-json-serialization-of-activerecord-objects-reaches-maturity&#x2F;&quot;&gt;post on JSON serialization maturity in edge Rails&lt;&#x2F;a&gt;. This means that this plugin is virtually obsolete if you&#x27;re using edge Rails.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;ve tried to output JSON from your Rails applications before, you&#x27;d probably have noticed how inadequate it all seems. Let&#x27;s look at the kind of output (pretty-printed for easier reading) you get from calling &lt;code&gt;to_json&lt;&#x2F;code&gt; on your typical User model:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;{
  attributes: {
    id: 1,
    name: &quot;Konata&quot;,
    awesome: true,
    created_at: &quot;07&#x2F;01&#x2F;2007&quot;
  }
}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Some of the common problems developers who write applications that speak JSON have with this are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;attributes&lt;&#x2F;code&gt; part is often unnecessary cruft when consuming ActiveRecord objects as JSON.&lt;&#x2F;li&gt;
&lt;li&gt;There&#x27;s no obvious way to control which attributes are shown in the JSON (e.g. you may want to hide private or lengthy attributes). The way to workaround this is either to write your own &lt;code&gt;to_json&lt;&#x2F;code&gt; instance method for your ActiveRecord model, or to use a Rails plugin (like &lt;a href=&quot;http:&#x2F;&#x2F;geekblog.vodpod.com&#x2F;?p=9&quot;&gt;acts_as_json&lt;&#x2F;a&gt;) or a &lt;a href=&quot;http:&#x2F;&#x2F;json.rubyforge.org&#x2F;&quot;&gt;gem&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Including 2nd (or higher order) associations is tricky (as above, you can achieve this by defining your own &lt;code&gt;to_json&lt;&#x2F;code&gt; instance methods).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3&gt;Under the hood of the current ActiveRecord#to_json&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;code&gt;to_json&lt;&#x2F;code&gt; method for ActiveRecord objects falls back on using that defined in &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;activesupport&#x2F;lib&#x2F;active_support&#x2F;json&quot;&gt;ActiveSupport&#x27;s JSON classes&lt;&#x2F;a&gt;. The way it&#x27;s currently done, there are a bunch of JSON encoder classes defined for various types - when you call &lt;code&gt;to_json&lt;&#x2F;code&gt; on an ActiveRecord object it simply uses &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;activesupport&#x2F;lib&#x2F;active_support&#x2F;json&#x2F;encoders&#x2F;object.rb&quot;&gt;&lt;code&gt;Object#to_json&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;By the way, see that &lt;code&gt;created_at: &quot;07&#x2F;01&#x2F;2007&quot;&lt;&#x2F;code&gt; bit in the example above which is the JSON output for a Date attribute? That&#x27;s in MM&#x2F;DD&#x2F;YYYY format. Yup, 1st July 2007 not 7th January 2007 you &quot;rest of the world you&quot;. Ouch, but at least you can use JavaScript&#x27;s &lt;code&gt;Date.parse()&lt;&#x2F;code&gt; on it directly as detailed in &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;8399&quot;&gt;this patch&lt;&#x2F;a&gt;. And before you ask, yes, &lt;code&gt;Date.parse()&lt;&#x2F;code&gt; doesn&#x27;t understand the YYYY-MM-DD format.&lt;&#x2F;p&gt;
&lt;h3&gt;Can has Rails patch?&lt;&#x2F;h3&gt;
&lt;p&gt;So about 2 days ago, I wrote a &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;8920&quot;&gt;Rails patch to boost ActiveRecord#to_json with an options hash&lt;&#x2F;a&gt;. Yep much like what you can do with &lt;a href=&quot;http:&#x2F;&#x2F;api.rubyonrails.org&#x2F;classes&#x2F;ActiveRecord&#x2F;XmlSerialization.html#M000910&quot;&gt;&lt;code&gt;ActiveRecord#to_xml&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I hope it gets committed into the core some day. I mean, gosh, isn&#x27;t Rails all about Web 2.0 mashups. It even has that fancy &lt;code&gt;render :json&lt;&#x2F;code&gt; thing. I do believe JSON output needs to be treated more seriously in Rails rather than the half-hearted attempt at JSON encoding. No? Well, if the patch doesn&#x27;t get accepted I&#x27;ll still have &lt;a href=&quot;http:&#x2F;&#x2F;trac.codefront.net&#x2F;jsonifier&#x2F;&quot;&gt;my plugin&lt;&#x2F;a&gt; (&lt;a href=&quot;#jsonifier-plugin&quot;&gt;see below&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, let&#x27;s see some examples:&lt;&#x2F;p&gt;
&lt;h3&gt;Some examples, see?&lt;&#x2F;h3&gt;
&lt;p&gt;Assuming User and Post models where User has_many Posts:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;david = User.find(1)
david.to_json  # {id: 1, name: &quot;David&quot;, awesome: true, created_at: &quot;07&#x2F;01&#x2F;2007&quot;}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;No more &lt;code&gt;attributes&lt;&#x2F;code&gt; cruft!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;:only&lt;&#x2F;code&gt; and &lt;code&gt;:except&lt;&#x2F;code&gt; work the same way that as for &lt;code&gt;ActiveRecord#to_xml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;david.to_json(:only =&gt; :name)                 # {name: &quot;David&quot;}
david.to_json(:only =&gt; [:id, :name])          # {id: 1, name: &quot;David&quot;}
david.to_json(:except =&gt; :created_at)         # {id: 1, name: &quot;David&quot;, awesome: true}
david.to_json(:except =&gt; [:id, :created_at])  # {name: &quot;David&quot;, awesome: true}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can use the &lt;code&gt;:methods&lt;&#x2F;code&gt; options as well to include any methods on the object.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;david.to_json(:methods =&gt; :permalink)
  # {id: 1, name: &quot;David&quot;, awesome: true, created_at: &quot;07&#x2F;01&#x2F;2007&quot;, permalink =&gt; &quot;1-David&quot;}
david.to_json(:methods =&gt; [:permalink, :interestingness])
  # {id: 1, name: &quot;David&quot;, awesome: true, created_at: &quot;07&#x2F;01&#x2F;2007&quot;, \
  #   permalink =&gt; &quot;1-David&quot;, :interestingness =&gt; 666}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;:include&lt;&#x2F;code&gt; option lets you include associations.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;david.to_json(:include =&gt; :posts)
  # {id: 1, name: &quot;David&quot;, awesome: true, created_at: &quot;07&#x2F;01&#x2F;2007&quot;, \
  #    posts: [{id: 1, author_id: 1, title: &quot;Welcome to the weblog&quot;}, \
  #            {id: 2, author_id: 1, title: &quot;So I was thinking&quot;}]}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;:only&lt;&#x2F;code&gt;, &lt;code&gt;:except&lt;&#x2F;code&gt;, and &lt;code&gt;:methods&lt;&#x2F;code&gt; works on the included associations as well:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;david.to_json(:include =&gt; { :posts =&gt; { :only =&gt; :title } })
  # {id: 1, name: &quot;David&quot;, awesome: true, created_at: &quot;07&#x2F;01&#x2F;2007&quot;, \
  #    posts: [{title: &quot;Welcome to the weblog&quot;}, \
  #            {title: &quot;So I was thinking&quot;}]}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Of course, 2nd level (and higher order) associations work too:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;david.to_json(:include =&gt; { :posts =&gt; { \
                              :include =&gt; { :comments =&gt; { \
                                              :only =&gt; :body } }, \
                              :only =&gt; :title } })
  # {id: 1, name: &quot;David&quot;, awesome: true, created_at: &quot;07&#x2F;01&#x2F;2007&quot;, \
  #    posts: [{comments: [{body: &quot;1st post!&quot;}, {body: &quot;OMGWTFBBQ!&quot;}], \
  #             title: &quot;Welcome to the weblog&quot;}, \
  #            {comments: [{body: &quot;Don&#x27;t think too hard&quot;}], \
  #             title: &quot;So I was thinking&quot;}]}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Please do give any feedback at the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;8920&quot;&gt;Rails patch for ActiveRecord#to_json&lt;&#x2F;a&gt; or here. I wanna know what you feel about adding this functionality into the Rails core!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;jsonifier-plugin&quot;&gt;Jsonifier plugin&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve rolled the patch into a plugin: Jsonifier. The &lt;a href=&quot;http:&#x2F;&#x2F;trac.codefront.net&#x2F;jsonifier&#x2F;&quot;&gt;Jsonifier Trac&lt;&#x2F;a&gt; is at &lt;a href=&quot;http:&#x2F;&#x2F;trac.codefront.net&#x2F;jsonifier&#x2F;&quot;&gt;http:&#x2F;&#x2F;trac.codefront.net&#x2F;jsonifier&#x2F;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Git repository:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;git:&#x2F;&#x2F;github.com&#x2F;chuyeow&#x2F;jsonifier.git&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Github project page:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;http:&#x2F;&#x2F;github.com&#x2F;chuyeow&#x2F;jsonifier&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;To install the plugin:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;ruby script&#x2F;plugin install git:&#x2F;&#x2F;github.com&#x2F;chuyeow&#x2F;jsonifier.git&lt;&#x2F;code&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt; or &lt;code&gt;git clone&lt;&#x2F;code&gt; the repository manually into the &lt;code&gt;vendor&#x2F;plugins&lt;&#x2F;code&gt; directory.&lt;&#x2F;p&gt;
&lt;h3&gt;A note on valid JSON&lt;&#x2F;h3&gt;
&lt;p&gt;The JSON Rails spits out by default is not strictly valid JSON since the &lt;a href=&quot;http:&#x2F;&#x2F;www.ietf.org&#x2F;rfc&#x2F;rfc4627.txt?number=4627&quot;&gt;JSON specifications&lt;&#x2F;a&gt; require keys to be double quoted. To get strictly valid JSON, add&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;ActiveSupport::JSON.unquote_hash_key_identifiers = false&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;in your environment.rb (or in the Rails initializers directory if you&#x27;re on edge). See &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;06&#x2F;20&#x2F;how-to-get-strictly-valid-json-from-rails&#x2F;&quot;&gt;my blog post on how to get strictly valid JSON from Rails&lt;&#x2F;a&gt; for more info.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Haruhi Season 2 announced!</title>
    <published>2007-07-06T20:06:02+00:00</published>
    <updated>2007-07-06T20:06:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/07/06/haruhi-season-2-announced/"/>
    <id>https://chuyeow.wtf/2007/07/06/haruhi-season-2-announced/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/07/06/haruhi-season-2-announced/">&lt;p&gt;Season 2 of The Melancholy of Haruhi Suzimiya was announced in the August 2007 edition of NewType Japan - check out &lt;a href=&quot;http:&#x2F;&#x2F;www.moetron.com&#x2F;2007&#x2F;07&#x2F;05&#x2F;haruhi-season-2-large-scans-to-prove-it&#x2F;&quot;&gt;the scans&lt;&#x2F;a&gt;. The announcement isn&#x27;t official, but there&#x27;ll be one on the 7th - that&#x27;s 7&#x2F;7&#x2F;2007!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>WTF is this? (Or how NIS and portmapper on Ubuntu Dapper Drake drove me nuts)</title>
    <published>2007-07-02T19:42:00+00:00</published>
    <updated>2007-07-02T19:42:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/07/02/wtf-is-this-or-how-nis-and-portmapper-on-ubuntu-dapper-drake-drove-me-nuts/"/>
    <id>https://chuyeow.wtf/2007/07/02/wtf-is-this-or-how-nis-and-portmapper-on-ubuntu-dapper-drake-drove-me-nuts/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/07/02/wtf-is-this-or-how-nis-and-portmapper-on-ubuntu-dapper-drake-drove-me-nuts/">&lt;p&gt;Not too long ago a couple of the Ubuntu Dapper Drake (6.06 LTS) &lt;acronym title=&quot;Virtual Private Servers&quot;&gt;VPS&lt;&#x2F;acronym&gt;s &lt;a href=&quot;http:&#x2F;&#x2F;www.bezurk.com&#x2F;&quot;&gt;we&lt;&#x2F;a&gt; use abruptly became inaccessible. These VPSs were &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Network_Information_Service&quot;&gt;NIS&lt;&#x2F;a&gt; clients that suddenly could no longer connect to the NIS master. Great. And as far as I could tell I didn&#x27;t do anything to those servers. I even managed to replicate the problem on another similar VPS (that was still accessble) simply by restarting the NIS daemon.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;rimuhosting.com&#x2F;&quot;&gt;Rimuhosting&lt;&#x2F;a&gt;&#x27;s fantabulous support, I managed to regain access to the VPSs. Oh yeah, &lt;strong&gt;big lesson learnt&lt;&#x2F;strong&gt; here: when configuring NIS clients, be sure to leave at least one user account with sudo privileges or set the root account&#x27;s password (Ubuntu doesn&#x27;t come with a root account enabled by default - run &lt;code&gt;sudo passwd&lt;&#x2F;code&gt; to set it and enable the root account as a side effect). Big big lesson learnt. Don&#x27;t let this bite you in the ass if you&#x27;re a sysadmin-ish person.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, &lt;code&gt;&#x2F;var&#x2F;log&#x2F;syslog&lt;&#x2F;code&gt; was complaining this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;ypbind[1026]: Unable to register (YPBINDPROG, YPBINDVERS, udp)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Which turned out to be a portmap problem. So yeah portmap wasn&#x27;t running! For a moment there I thought we had an easy solution. Sadly, &lt;code&gt;&#x2F;etc&#x2F;init.d&#x2F;portmap start&lt;&#x2F;code&gt; was throwing this inexplicable error (i.e. Google wasn&#x27;t of much help):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;root@zoidberg:&#x2F;sbin# &#x2F;etc&#x2F;init.d&#x2F;portmap  restart
 * Stopping portmap daemon...
   ...done.
 * Starting portmap daemon...
dhclient.4.x 2.*.5, December 30th, 2000
Compiled on Dec 12 2003 09:55:54
Features: DBG, SEE, ALS, SEF
init: Couldn&#x27;t open the file .&#x2F;libuuid.so -&amp;gt;
   ...fail!&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It sure isn&#x27;t &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lolcat&quot;&gt;caturday&lt;&#x2F;a&gt;. After hours spent scrambling to find out why portmap can&#x27;t find libuuid.so, reinstalling the NIS .deb, comparing configuration files between working NIS clients and these busted ones, it finally dawned on me that I have yet to re-install portmap (not that it was logically sound that I&#x27;d have to reinstall it, but at this point I was willing to try anything). Annoyingly enough, it worked!&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;apt-get remove portmap nis
apt-get install nis&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I still don&#x27;t know &lt;acronym title=&quot;What The Fuck&quot;&gt;WTF&lt;&#x2F;acronym&gt; happened there. If anyone has any clue please please point me to it.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Installing Xen on Ubuntu Feisty Fawn - the complete newbie&#x27;s guide</title>
    <published>2007-06-26T21:46:44+00:00</published>
    <updated>2007-06-26T21:46:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/26/installing-xen-on-ubuntu-feisty-fawn-the-complete-newbies-guide/"/>
    <id>https://chuyeow.wtf/2007/06/26/installing-xen-on-ubuntu-feisty-fawn-the-complete-newbies-guide/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/26/installing-xen-on-ubuntu-feisty-fawn-the-complete-newbies-guide/">&lt;p&gt;I had to spend some time setting up &lt;a href=&quot;http:&#x2F;&#x2F;www.xensource.com&#x2F;xen&quot;&gt;Xen&lt;&#x2F;a&gt; on one of the new Dell servers we bought and while there &lt;a href=&quot;https:&#x2F;&#x2F;help.ubuntu.com&#x2F;community&#x2F;XenVirtualMachine&#x2F;XenOnUbuntuFeisty&quot;&gt;was&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.howtoforge.com&#x2F;xen_3.0_ubuntu_dapper_drake&quot;&gt;some&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.howtoforge.com&#x2F;perfect_xen_setup_debian_ubuntu&quot;&gt;documentation&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;tx.downloads.xensource.com&#x2F;downloads&#x2F;docs&#x2F;user&#x2F;&quot;&gt;around&lt;&#x2F;a&gt;, I had to constantly refer to the different sources since there wasn&#x27;t a complete page which had everything I needed for my particular situation - I have a host machine with Ubuntu Feisty Fawn installed and wanted to install a couple of Xen guest domains on it. One other thing I found lacking in the documentation is the explanation of commands or answers to the question &lt;em&gt;&quot;so why the hell am I doing this?&quot;&lt;&#x2F;em&gt;. I&#x27;m not considering &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Logical_Volume_Manager_(Linux)&quot;&gt;LVM&lt;&#x2F;a&gt; at the moment and am happy with loopback disk file images too.&lt;&#x2F;p&gt;
&lt;p&gt;So I think it&#x27;s a good idea to &lt;em&gt;write this down somewhere&lt;&#x2F;em&gt; for the next time I have to do the same bloody thing over again on any new servers.&lt;&#x2F;p&gt;
&lt;p&gt;Some caveats before we start:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Like I said, I&#x27;m not gonna talk about LVM for disk images since I know next to nothing about configuring it at the moment. The host machine I have isn&#x27;t setup with LVM and I haven&#x27;t got the time to look into LVM either.&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;m quite the networking newbie, so my setup uses the default Xen bridge installed via apt-get. Check out &lt;a href=&quot;http:&#x2F;&#x2F;wiki.xensource.com&#x2F;xenwiki&#x2F;XenNetworking&quot;&gt;Xen networking on the Xen wiki&lt;&#x2F;a&gt; for more complex network setups.&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;m not gonna talk about putting a Linux distro other than that of the host machine into the Xen virtual machines. In other words, I have Feisty Fawn for both dom0 and all my domUs.&lt;&#x2F;li&gt;
&lt;li&gt;I probably did some completely stupid things. Stuff like &lt;a href=&quot;http:&#x2F;&#x2F;www.xen-tools.org&#x2F;software&#x2F;xen-tools&#x2F;&quot;&gt;xen-tools&lt;&#x2F;a&gt; exist to simplify Xen administration, but I haven&#x27;t had a chance to use them. Let me know if you spot an error or have a better way of doing something please!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Some terms that deserve explaining (most guides out there just use &quot;DomU&quot; and &quot;Dom0&quot; without any ceremony, and assume you know what they mean):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Domain-0&lt;&#x2F;strong&gt; or &lt;strong&gt;Dom0&lt;&#x2F;strong&gt;: This refers to the host machine OS. You know, the OS of the actual physical server that you have.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DomU&lt;&#x2F;strong&gt;: This refers to a Xen guest domain. A DomU is a single Xen virtual machine. The &quot;U&quot; stands for &quot;unprivileged&quot; I believe.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;OK let&#x27;s go!&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h3&gt;Installing the Xen Server&lt;&#x2F;h3&gt;
&lt;p&gt;First off, we need to install the Xen server on the host machine (or Dom0). Thankfully, there is a Xen server package in Feisty Fawn&#x27;s apt-get repository.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Make sure &#x27;universe&#x27; is enabled in &lt;code&gt;&#x2F;etc&#x2F;apt&#x2F;sources.list&lt;&#x2F;code&gt; and run: &lt;code&gt;apt-get install ubuntu-xen-server&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Reboot the machine. After boot, running &lt;code&gt;sudo xm list&lt;&#x2F;code&gt; should show you Domain-0 (which is the host machine that&#x27;s running Xen).&lt;&#x2F;li&gt;
&lt;li&gt;Edit &#x2F;etc&#x2F;xen&#x2F;xend-config.sxp and uncomment this line:
&lt;pre&gt;&lt;code&gt;(network-script network-bridge)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Comment out this line:
&lt;pre&gt;&lt;code&gt;(network-script network-dummy)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Restart xend:
&lt;pre&gt;&lt;code&gt;sudo xend restart&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;When you run &#x27;ifconfig&#x27;, you should see the &#x27;xenbr0&#x27; interface. This is the Xen network bridge.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3&gt;Creating a base image&lt;&#x2F;h3&gt;
&lt;p&gt;Now let&#x27;s create a base Xen image. We&#x27;ll use this as a template for any future images (domUs).&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Use &#x27;dd&#x27; to create the images (I place them in &#x2F;xen-images&#x2F;):
&lt;pre&gt;&lt;code&gt;dd if=&#x2F;dev&#x2F;zero of=&#x2F;xen-images&#x2F;feisty_base.img bs=1024k count=4000
dd if=&#x2F;dev&#x2F;zero of=&#x2F;xen-images&#x2F;feisty_base_swap.img bs=1024k count=1000&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;  These commands create image files of 4GB and 1GB for your virtual OS and its swap respectively. &#x27;count&#x27; is the number of blocks (block size = 1024k).&lt;&#x2F;li&gt;
&lt;li&gt;Create the filesystem (we&#x27;re using ext3 in this case) within the virtual OS image file.
&lt;pre&gt;&lt;code&gt;mkfs.ext3 &#x2F;xen-images&#x2F;feisty_base.img&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;   Answer &#x27;yes&#x27; to proceed anyway when it complains about the file not being a block device.&lt;&#x2F;li&gt;
&lt;li&gt;Do the same for the swap file:
&lt;pre&gt;&lt;code&gt;mkswap &#x2F;xen-images&#x2F;feisty_base_swap.img&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Now, restrict the permissions on the images so no one else but root can screw around with them.
&lt;pre&gt;&lt;code&gt;chmod 640 &#x2F;xen-images&#x2F;feisty_base*&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Create a mount point for the image. We need this to mount the image to install and configure Ubuntu Feisty Fawn the way we like it. We can then replicate this base image for any future virtual machines.
&lt;pre&gt;&lt;code&gt;mkdir &#x2F;xen-images&#x2F;mnt&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Mount the base image via the loop device:
&lt;pre&gt;&lt;code&gt;mount -o loop &#x2F;xen-images&#x2F;feisty_base.img &#x2F;xen-images&#x2F;mnt&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;  Now we have full access to the base image&#x27;s filesystem. What we need to do now is to put a base install of Feisty Fawn on it.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3&gt;Installing and configuring the base image&lt;&#x2F;h3&gt;
&lt;p&gt;Next, we have to put Ubuntu onto the image and configure it to our liking.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Install debootstrap, a handy tool that bootstraps a basic Debian (Ubuntu in this case) system.
&lt;pre&gt;&lt;code&gt;apt-get install debootstrap&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Bootstrap the base image with &#x27;feisty&#x27;:
&lt;pre&gt;&lt;code&gt;debootstrap feisty &#x2F;xen-images&#x2F;mnt&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;  After this is done you should see the basic Ubuntu file hierarchy:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;ls &#x2F;xen-images&#x2F;mnt&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Copy your sources.list into the base image:
&lt;pre&gt;&lt;code&gt;cp &#x2F;etc&#x2F;apt&#x2F;sources.list &#x2F;xen-images&#x2F;mnt&#x2F;etc&#x2F;apt&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Copy your kernel modules as well (replace 2.6.19-4-server with whatever kernel version you have):
&lt;pre&gt;&lt;code&gt;cp -a &#x2F;lib&#x2F;modules&#x2F;2.6.19-4-server&#x2F; &#x2F;xen-images&#x2F;mnt&#x2F;lib&#x2F;modules&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Install the &lt;code&gt;libc6-xen&lt;&#x2F;code&gt; package, which is a Xen-compatible glibc that allows applications to use Thread-Local Storage (TLS).
&lt;pre&gt;&lt;code&gt;apt-get install libc6-xen&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;  Taken from the &lt;a href=&quot;http:&#x2F;&#x2F;wiki.xensource.com&#x2F;xenwiki&#x2F;XenFaq&quot;&gt;Xen FAQ&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Some modern distributions ship with a &#x27;TLS&#x27; version of glibc that is not fully compatible with Xen. To use Xen reliably and with maximum performance you must disable the incompatible glibc.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Configure networking by editing &lt;code&gt;&#x2F;xen-images&#x2F;mnt&#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt;:
&lt;pre&gt;&lt;code&gt;auto lo
iface lo inet loopback
&lt;h1 id=&quot;uncomment-this-and-fill-up-with-your-networks-settings&quot;&gt;Uncomment this and fill up with your networks settings.&lt;&#x2F;h1&gt;
&lt;p&gt;#auto eth0
#iface eth0 inet static&lt;&#x2F;p&gt;
&lt;h1 id=&quot;address-192-168-0-201&quot;&gt;address 192.168.0.201&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;netmask-255-255-255-0&quot;&gt;netmask 255.255.255.0&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;broadcast-192-168-255-255&quot;&gt;broadcast 192.168.255.255&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;gateway-192-168-0-1&quot;&gt;gateway 192.168.0.1&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;dns-nameservers-192-168-0-1&quot;&gt;dns-nameservers 192.168.0.1&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;  Notice how the network settings are commented out - this is because we are leaving the base image as a template from which other images would be made from.&lt;&#x2F;li&gt;
&lt;li&gt;Edit the hosts file (&lt;code&gt;&#x2F;xen-images&#x2F;mnt&#x2F;etc&#x2F;hosts&lt;&#x2F;code&gt;):
&lt;pre&gt;&lt;code&gt;127.0.0.1       localhost localhost.localdomain
127.0.0.1       guest
&lt;h1 id=&quot;the-following-lines-are-desirable-for-ipv6-capable-hosts&quot;&gt;The following lines are desirable for IPv6 capable hosts&lt;&#x2F;h1&gt;
&lt;p&gt;::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Give the base image a generic hostname by editing &lt;code&gt;&#x2F;xen-images&#x2F;mnt&#x2F;etc&#x2F;hostname&lt;&#x2F;code&gt;. In this case I&#x27;m just naming it &#x27;guest&#x27; - actual virtual machines would have sensible hostnames.&lt;&#x2F;li&gt;
&lt;li&gt;Edit the filesystem table (&lt;code&gt;&#x2F;xen-images&#x2F;mnt&#x2F;etc&#x2F;fstab&lt;&#x2F;code&gt;).
&lt;pre&gt;&lt;code&gt;proc            &#x2F;proc           proc    defaults        0       0
&#x2F;dev&#x2F;hda1       &#x2F;               ext3    defaults,errors=remount-ro 0       1
&#x2F;dev&#x2F;hda2       none            swap    sw              0       0&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;  Don&#x27;t worry, the &#x2F;dev&#x2F;hda* would be configured to point to the images you created, not to your actual physical harddisks.&lt;&#x2F;li&gt;
&lt;li&gt;You&#x27;re done with the initial configuration and have enough to bootup the image. Let&#x27;s unmount the image:
&lt;pre&gt;&lt;code&gt;umount &#x2F;xen-images&#x2F;mnt&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Now, we need to create a Xen config for the base image so we can boot into it. Create a file named &lt;code&gt;&#x2F;etc&#x2F;xen&#x2F;vm_feisty_base.config.example.sxp&lt;&#x2F;code&gt; (you can name it whatever you like of course):
&lt;pre&gt;&lt;code&gt;name = &quot;feisty_base&quot;
kernel = &quot;&#x2F;boot&#x2F;vmlinuz-2.6.19-4-server&quot;
ramdisk = &quot;&#x2F;boot&#x2F;initrd.img-2.6.19-4-server&quot;
root = &quot;&#x2F;dev&#x2F;hda1 ro&quot;
memory = 512
disk = [&#x27;file:&#x2F;xen-images&#x2F;feisty_base.img,hda1,w&#x27;,&#x27;file:&#x2F;xen-images&#x2F;feisty_base_swap.img,hda2,w&#x27;]
&lt;h1 id=&quot;network&quot;&gt;Network.&lt;&#x2F;h1&gt;
&lt;p&gt;hostname = &quot;feisty_base&quot;
vif = [&#x27;bridge=xenbr0&#x27;]
dhcp = &quot;off&quot;
ip = &quot;192.168.0.201&quot;
netmask = &quot;255.255.255.0&quot;
gateway = &quot;192.168.0.1&quot;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;An explanation of the configuration options:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;name&lt;&#x2F;strong&gt; - a descriptive name of your image.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;kernel&lt;&#x2F;strong&gt; - path to the kernel.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;ramdisk&lt;&#x2F;strong&gt; - path to the &lt;a href=&quot;http:&#x2F;&#x2F;www.cyberciti.biz&#x2F;tips&#x2F;understanding-linux-initrd-initial-ram-disk.html&quot;&gt;initrd&lt;&#x2F;a&gt; (initial RAM disk) image.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;root&lt;&#x2F;strong&gt; - point this to your host machine&#x27;s harddisk where your image files are.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;memory&lt;&#x2F;strong&gt; - the amount of memory assigned to the virtual machine in megabytes&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;disk&lt;&#x2F;strong&gt; - specify a list of block devices that will be export to the virtual machine. In this example, we&#x27;re mapping the &#x2F;xen-images&#x2F;feisty_base.img image file to &#x2F;dev&#x2F;hda1 in the virtual image (same for the swap image). This should match whatever config you did in &#x2F;xen-images&#x2F;mnt&#x2F;etc&#x2F;fstab.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;hostname&lt;&#x2F;strong&gt; - hostname of your virtual machine.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;vif&lt;&#x2F;strong&gt; - virtual network interface that your virtual machine will use. In this case, we&#x27;re using the default &#x27;xenbr0&#x27; bridge that Xen installs. For alternative configurations, check out the &lt;a href=&quot;http:&#x2F;&#x2F;wiki.xensource.com&#x2F;xenwiki&#x2F;XenNetworking&quot;&gt;networking page on the Xen wiki&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;ip&lt;&#x2F;strong&gt; - specify your virtual machine&#x27;s IP here.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;netmask&lt;&#x2F;strong&gt; and &lt;strong&gt;gateway&lt;&#x2F;strong&gt; - netmask and gateway that your virtual machine should use.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;ul&gt;
&lt;li&gt;Now, start the base virtual machine:
&lt;pre&gt;&lt;code&gt;xm create &#x2F;etc&#x2F;xen&#x2F;vm_feisty_base.config.example.sxp -c&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;  You should see a console (the &#x27;-c&#x27; option connects you to the console immediately after booting up the virtual machine. Login as root (empty password) - you&#x27;ll want to change the password (with &#x27;passwd&#x27;).&lt;&#x2F;li&gt;
&lt;li&gt;Enable shadowed passwords.
&lt;pre&gt;&lt;code&gt;shadowconfig on&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Create a backup of &lt;code&gt;&#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt; and edit &lt;code&gt;&#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt; to put in correct values so you can access the Internet from the virtual machine:
&lt;pre&gt;&lt;code&gt;cp &#x2F;etc&#x2F;network&#x2F;interfaces &#x2F;etc&#x2F;network&#x2F;interfaces.bak
vim &#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Start networking:
&lt;pre&gt;&lt;code&gt;ifup -a&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Install the Ubuntu standard system after running an update:
&lt;pre&gt;&lt;code&gt;apt-get update
apt-get install ubuntu-standard&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;I also like to upgrade any packages that have been updated, if any:
&lt;pre&gt;&lt;code&gt;apt-get upgrade&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Install the OpenSSH server so that you can access the virtual machine via ssh:
&lt;pre&gt;&lt;code&gt;apt-get install ssh&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;At this point, do any configuration or installation of packages that you want this base image to have. Remember that we&#x27;re going to replicate this base image for future Xen virtual machines so &lt;strong&gt;don&#x27;t go overboard&lt;&#x2F;strong&gt; and install stuff you&#x27;re not gonna use.&lt;&#x2F;li&gt;
&lt;li&gt;Stop networking and put back the original &#x2F;etc&#x2F;network&#x2F;interfaces:
&lt;pre&gt;&lt;code&gt;ifdown -a
mv &#x2F;etc&#x2F;network&#x2F;interfaces.bak &#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Exit the guest console with &lt;code&gt;Ctrl-]&lt;&#x2F;code&gt;. This will bring you back to dom0&#x27;s shell.&lt;&#x2F;li&gt;
&lt;li&gt;Shutdown the base Xen domU (&lt;code&gt;-w&lt;&#x2F;code&gt; means &quot;wait for the domU to shutdown completely&quot;):
&lt;pre&gt;&lt;code&gt;xm shutdown feisty_base -w&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You&#x27;re done setting up the base image! Now you have a nicely configured base image.&lt;&#x2F;p&gt;
&lt;h3&gt;Creating your first virtual server&lt;&#x2F;h3&gt;
&lt;p&gt;The fruits of thy labor are almost at hand - with the base image, we can now make a copy of it for our first Xen virtual machine.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Make copies of the base image and the swap image (let&#x27;s call our virtual server &quot;yuki&quot;):
&lt;pre&gt;&lt;code&gt;cp &#x2F;xen-images&#x2F;feisty_base.img &#x2F;xen-images&#x2F;yuki.img
cp &#x2F;xen-images&#x2F;feisty_base_swap.img &#x2F;xen-images&#x2F;yuki_swap.img&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;  You may want to &lt;a href=&quot;#resizing&quot;&gt;resize the base image&lt;&#x2F;a&gt; depending on your disk space needs. (And, of course, you can create your own swap image like we did earlier instead of copying the base image&#x27;s swap file.)&lt;&#x2F;li&gt;
&lt;li&gt;Make a copy of the base Xen configuration file that we created for our base image earlier (you can use whatever name you like):
&lt;pre&gt;&lt;code&gt;cp &#x2F;etc&#x2F;xen&#x2F;vm_feisty_base.config.example.sxp &#x2F;etc&#x2F;xen&#x2F;vm_yuki.config.sxp&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Edit the &lt;code&gt;&#x2F;etc&#x2F;xen&#x2F;vm_yuki.config.sxp file&lt;&#x2F;code&gt;, changing the values to suit your virtual server (you probably want to change at least the &#x27;name&#x27;, &#x27;disk&#x27;, &#x27;ip, and &#x27;hostname&#x27; values).
&lt;pre&gt;&lt;code&gt;name = &quot;yuki&quot;
disk = [&#x27;file:&#x2F;xen-images&#x2F;yuki.img,hda1,w&#x27;,&#x27;file:&#x2F;xen-images&#x2F;yuki_swap.img,hda2,w&#x27;]
hostname = &quot;yuki&quot;
ip = &quot;192.168.0.202&quot;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Now start up your cloned virtual server and log into it like we did earlier with the base image (if you haven&#x27;t changed the password, you can login as root with an empty password).
&lt;pre&gt;&lt;code&gt;xm create -c &#x2F;etc&#x2F;xen&#x2F;vm_yuki.config.sxp&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;The first thing you should do is to secure your root password (if you haven&#x27;t done so in the base image earlier).
&lt;pre&gt;&lt;code&gt;passwd&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Now, you&#x27;ll want to change these files:
&lt;ul&gt;
&lt;li&gt;&#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;li&gt;
&lt;li&gt;&#x2F;etc&#x2F;hostname&lt;&#x2F;li&gt;
&lt;li&gt;&#x2F;etc&#x2F;hosts&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;With the proper network settings, you should be able to bring up networking to connect to the internet (assuming that your dom0 is connected to the internet).
&lt;pre&gt;&lt;code&gt;ifup -a
ping google.com&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;At this point, you are free to customize your virtual machine as you see fit - install nginx for use as a static file server, Rails, MySQL server, whatever.&lt;&#x2F;li&gt;
&lt;li&gt;But first, let&#x27;s make sure this Xen virtual server starts up automatically on boot. Exit the virtual machine console with &lt;code&gt;Ctrl-]&lt;&#x2F;code&gt;
&lt;pre&gt;&lt;code&gt;ln -s &#x2F;etc&#x2F;xen&#x2F;vm_yuki.config.sxp &#x2F;etc&#x2F;xen&#x2F;auto&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;  Any Xen domain configuration placed in &lt;code&gt;&#x2F;etc&#x2F;xen&#x2F;auto&#x2F;&lt;&#x2F;code&gt; will be started up automatically on boot (and shutdown when the host machine is shutdown too).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;That&#x27;s it!&lt;&#x2F;strong&gt; You have a functional Xen guest domain that starts up on boot and that can connect to the Internet. Oh before I forget, some useful commands when dealing with the Xen images:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;xm create &#x2F;path&#x2F;to&#x2F;config_file&lt;&#x2F;code&gt; - Starts up the guest domain with the given Xen domU configuration file. (&lt;code&gt;xm create -c&lt;&#x2F;code&gt; to login to the console immediately after booting the image.)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;xm console yuki&lt;&#x2F;code&gt; - Open the console for the &#x27;yuki&#x27; Xen domain.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;xm shutdown yuki&lt;&#x2F;code&gt; - Shutdown the &#x27;yuki&#x27; domU.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;xm list&lt;&#x2F;code&gt; - Lists all the Xen domains you have running.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;resizing&quot;&gt;Resizing your virtual machine disk&lt;&#x2F;h3&gt;
&lt;p&gt;Let&#x27;s say you wanna add 1GB of disk space to your virtual machine (named &#x27;yuki&#x27;).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Note that LVM is usually recommended for Xen setups, so you may wanna take a look at that instead.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Create a temporary 1GB file:
&lt;pre&gt;&lt;code&gt;dd if=&#x2F;dev&#x2F;zero of=&#x2F;tmp&#x2F;temp_expand bs=1024k count=1000&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Bring down the virtual machine (I&#x27;ve found that a shutdown is needed so that the virtual machine recognizes the increased disk space):
&lt;pre&gt;&lt;code&gt;xm shutdown yuki&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Append&lt;&#x2F;strong&gt; the file to the disk image of the virtual machine (&#x2F;xen-images&#x2F;yuki.img in this example). &lt;strong&gt;Be sure to use &#x27;&amp;gt;&amp;gt;&#x27;&lt;&#x2F;strong&gt; (which means append) - using a single &#x27;&amp;gt;&#x27; would overwrite the disk image with your temporary file, which you most definitely don&#x27;t want!
&lt;pre&gt;&lt;code&gt;cat &#x2F;tmp&#x2F;temp_expand &gt;&gt; &#x2F;xen-images&#x2F;yuki.img&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Resize the file system:
&lt;pre&gt;&lt;code&gt;resize2fs -f &#x2F;xen-images&#x2F;yuki.img&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Startup the virtual machine again:
&lt;pre&gt;&lt;code&gt;xm create -c &#x2F;etc&#x2F;xen&#x2F;vm_yuki.config.sxp&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Remember to login to your virtual machine to verify that the disk space has increased (&lt;code&gt;df -h&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Prototype 1.5.1 is baaaaad for Safari 1 and 2 users</title>
    <published>2007-06-21T19:15:00+00:00</published>
    <updated>2007-06-21T19:15:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/21/prototype-151-is-baaaaad-for-safari-1-and-2-users/"/>
    <id>https://chuyeow.wtf/2007/06/21/prototype-151-is-baaaaad-for-safari-1-and-2-users/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/21/prototype-151-is-baaaaad-for-safari-1-and-2-users/">&lt;p&gt;Read the &lt;a href=&quot;http:&#x2F;&#x2F;prototypejs.org&#x2F;2007&#x2F;6&#x2F;20&#x2F;prototype-1-5-1-1-bugfix-release&quot;&gt;bug fix announcement&lt;&#x2F;a&gt;. Upgrade! This was causing extremely puzzling crashes in Safari on Macs (pre-Safari 3 beta) on &lt;a href=&quot;http:&#x2F;&#x2F;www.bezurk.com&#x2F;hotels&#x2F;singapore&#x2F;singapore&quot;&gt;one of our applications&lt;&#x2F;a&gt; and I&#x27;m glad (in some ways) that the problem lay with the Prototype library.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Bezurk featured on Channel NewsAsia</title>
    <published>2007-06-20T18:31:30+00:00</published>
    <updated>2007-06-20T18:31:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/20/bezurk-featured-on-channel-newsasia/"/>
    <id>https://chuyeow.wtf/2007/06/20/bezurk-featured-on-channel-newsasia/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/20/bezurk-featured-on-channel-newsasia/">&lt;p&gt;The company I work for was featured on a short &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.channelnewsasia.com&#x2F;ptm&#x2F;surftime&#x2F;&quot;&gt;Surf Time&lt;&#x2F;a&gt;&quot; segment on &lt;a href=&quot;http:&#x2F;&#x2F;www.channelnewsasia.com&#x2F;&quot;&gt;Channel NewsAsia&lt;&#x2F;a&gt;&#x27;s TV channel. Catch the &lt;a href=&quot;http:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=mmVznPcPjdI&quot;&gt;Bezurk Surf Time video on YouTube&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>How to get strictly valid JSON from Rails</title>
    <published>2007-06-20T11:47:59+00:00</published>
    <updated>2007-06-20T11:47:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/20/how-to-get-strictly-valid-json-from-rails/"/>
    <id>https://chuyeow.wtf/2007/06/20/how-to-get-strictly-valid-json-from-rails/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/20/how-to-get-strictly-valid-json-from-rails/">&lt;p&gt;&lt;ins&gt;Update: Edge Rails (and the forthcoming Rails 2.0) will emit only valid JSON. Read &lt;a href=&quot;&#x2F;2007&#x2F;10&#x2F;10&#x2F;new-on-edge-rails-json-serialization-of-activerecord-objects-reaches-maturity&#x2F;&quot;&gt;JSON serialization of ActiveRecord objects reaches maturity for more details&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;ve worked with &lt;a href=&quot;http:&#x2F;&#x2F;www.json.org&#x2F;&quot;&gt;JSON&lt;&#x2F;a&gt; long enough in Rails, you&#x27;d probably have noticed that the JSON the convenient &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;activesupport&#x2F;lib&#x2F;active_support&#x2F;json&#x2F;encoders&#x2F;object.rb&quot;&gt;Object#to_json&lt;&#x2F;a&gt; method spits out is not strictly JSON-compliant (according to the &lt;a href=&quot;http:&#x2F;&#x2F;tools.ietf.org&#x2F;html&#x2F;rfc4627&quot;&gt;RFC 4627&lt;&#x2F;a&gt;, which states that object keys should be &quot;strings&quot;, and &quot;strings&quot; should be double-quoted). Here&#x27;s an example of what &lt;code&gt;to_json&lt;&#x2F;code&gt; produces when called on an ActiveRecord instance:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;{
  id: 6589,
  code: &quot;SIN&quot;,
  name: &quot;Singapore&quot;,
  type: &quot;City&quot;
}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Notice how the keys (id, code, name, type) are not surrounded with double quotes. While this is generally not a problem if working purely in Rails, since Prototype and Rails itself can decode JSON like this, you&#x27;d run into problems with more finicky JSON parsers and decoders. PHP&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;php.net&#x2F;json_decode&quot;&gt;json_decode&lt;&#x2F;a&gt; is a perfect example - it demands that the object keys be double-quoted (or it fails to decode your JSON, silently returning NULL).&lt;&#x2F;p&gt;
&lt;p&gt;For a while I couldn&#x27;t figure out why Rails was doing it and &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com.sg&#x2F;search?q=rails+invalid+json&quot;&gt;Google was of no help&lt;&#x2F;a&gt;. I decided to look at the Rails code since this can&#x27;t be a huge oversight on the Rails community, can it? Sure enough, I found the &quot;solution&quot; in the encoding portion of the &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;activesupport&#x2F;lib&#x2F;active_support&#x2F;json&#x2F;encoding.rb&quot;&gt;ActiveSupport::JSON&lt;&#x2F;a&gt; module:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
  # When +true+, Hash#to_json will omit quoting string or symbol keys
  # if the keys are valid JavaScript identifiers.  Note that this is
  # technically improper JSON (all object keys must be quoted), so if
  # you need strict JSON compliance, set this option to +false+.
  mattr_accessor :unquote_hash_key_identifiers
  @@unquote_hash_key_identifiers = true&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Doh! All that&#x27;s left to do is to put &lt;code&gt;ActiveSupport::JSON.unquote_hash_key_identifiers = false&lt;&#x2F;code&gt; in your &lt;code&gt;environment.rb&lt;&#x2F;code&gt; (or in the Rails initializers directory if you&#x27;re on edge) and your Rails app will start producing strictly valid JSON (and is friendlier to other non-Rails applications):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;{
  &quot;id&quot;: 6589,
  &quot;code&quot;: &quot;SIN&quot;,
  &quot;name&quot;: &quot;Singapore&quot;,
  &quot;type&quot;: &quot;City&quot;
}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;unquote_hash_key_identifiers&lt;&#x2F;code&gt; was added in &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;5486&quot;&gt;changeset 5486&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Spam, the Dungeons and Dragons flavor</title>
    <published>2007-06-18T15:53:00+00:00</published>
    <updated>2007-06-18T15:53:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/18/spam-the-dungeons-and-dragons-flavor/"/>
    <id>https://chuyeow.wtf/2007/06/18/spam-the-dungeons-and-dragons-flavor/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/18/spam-the-dungeons-and-dragons-flavor/">&lt;p&gt;Now that&#x27;s how you get a Dungeons and Dragons fan to read your spam:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Laurana&#x27;s in Qualinesti now, attending the funeral of her father and also trying to arrange an agreement with that stiff-necked brother of hers, Porthios, and the Knights of Solamnia.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;dragonlance-spam.jpg&quot; alt=&quot;Dragonlance spam email&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>So I just got back from PLAY! A Video Game Symphony...</title>
    <published>2007-06-17T00:51:50+00:00</published>
    <updated>2007-06-17T00:51:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/17/so-i-just-got-back-from-play-a-video-game-symphony/"/>
    <id>https://chuyeow.wtf/2007/06/17/so-i-just-got-back-from-play-a-video-game-symphony/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/17/so-i-just-got-back-from-play-a-video-game-symphony/">&lt;p&gt;I just got back from &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;PLAY%21_A_Video_Game_Symphony&quot;&gt;PLAY! A Video Game Symphony&lt;&#x2F;a&gt; over at The Esplanade Concert Hall (in Singapore) and man, it was good! I had doubts at first about buying the tickets since I didn&#x27;t play most of the games on their programme, but listening and watching to the gameplay of those games that I &lt;em&gt;did&lt;&#x2F;em&gt; play was pleasantly nostalgic. Here&#x27;s what was played, with the games that I did play highlighted:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;PLAY! A Video Game Symphony - this is just a fanfare piece composed by the great &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Nobuo_Uematsu&quot;&gt;Nobuo Uematsu&lt;&#x2F;a&gt; (composer of, most notably, many Final Fantasy game soundtracks).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Super Mario Bros&lt;&#x2F;strong&gt; - what a game to open with! Being a fan-favorite, it came as no surprise to hear the collective gasps of recognition in the audience when game footage of the original Super Mario was played on the video screens. A suite of various in-game music was played, each time with much audible amusement from the audience.&lt;&#x2F;li&gt;
&lt;li&gt;Shenmue and Shenmue II&lt;&#x2F;li&gt;
&lt;li&gt;Lost Odyssey&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Sonic the Hedgehog&lt;&#x2F;strong&gt; - oh man, I didn&#x27;t realize how much I used to enjoy this game until I recognized every single tune they played in this suite. I played &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Sonic_the_Hedgehog_(16-bit)&quot;&gt;the very first Sonic the Hedgehog on a Sega Mega Drive&lt;&#x2F;a&gt; (as well as a few others after this one - I remember Tails and Knuckles) way back in the day.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Metal Gear Solid&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Blue Dragon - the much-hyped game had a few pieces of its soundtrack performed. I think I&#x27;d have been much more excited if they&#x27;d shown some actual game footage instead of scripted cutscenes.&lt;&#x2F;li&gt;
&lt;li&gt;Kingdom Hearts - a bunch of obvious console gamers near us made loud excited noises when the conductor mentioned this.&lt;&#x2F;li&gt;
&lt;li&gt;Final Fantasy VI&lt;&#x2F;li&gt;
&lt;li&gt;Daytona USA - the composer Takenobu Mitsuyoshi performed this piece himself!&lt;&#x2F;li&gt;
&lt;li&gt;The Elder Scrolls IV: Oblivion&lt;&#x2F;li&gt;
&lt;li&gt;Chrono Trigger and Chrono Cross&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;World of Warcraft&lt;&#x2F;strong&gt; - &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;12&#x2F;05&#x2F;on-the-prow-for-world-of-warcraft-collectors-edition&#x2F;&quot;&gt;I have&lt;&#x2F;a&gt; the Collector&#x27;s edition of the original World of Warcraft which contains the game soundtrack (mostly consisting of music composed by &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Jason_Hayes&quot;&gt;Jason Hayes&lt;&#x2F;a&gt;), so these were familiar tunes. My only gripe was that they didn&#x27;t play the Undercity background music - it&#x27;s my favorite.&lt;&#x2F;li&gt;
&lt;li&gt;Halo&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Castlevania&lt;&#x2F;strong&gt; - I played the &lt;acronym title=&quot;Nintendo DS&quot;&gt;NDS&lt;&#x2F;acronym&gt; version if that counts for anything. Can&#x27;t say I recognized the music though.&lt;&#x2F;li&gt;
&lt;li&gt;The Legend of Zelda - yes, I really didn&#x27;t play Zelda. I never owned a Nintendo before I got my NDS but I am eagerly anticipating the release of &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_Legend_of_Zelda:_Phantom_Hourglass&quot;&gt;Phantom Hourglass&lt;&#x2F;a&gt;! The conductor was expecting a great cheer from the crowd but it never came heh.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Final Fantasy VII&lt;&#x2F;strong&gt; - for the ending, they played &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;One-Winged_Angel#One-Winged_Angel&quot;&gt;One-Winged Angel&lt;&#x2F;a&gt; from the game soundtrack which was pretty memorable since it was played during the boss fight against Safer Sephiroth and more recently in Final Fantasy VII: Advent Children. A very nice grand ending piece I must say. Still, I do wish they played game footage and more FFVII music than just a single piece. There&#x27;re so many memorable songs in the game, and the chocobo tunes would have been amusing.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;play-singapore-tickets-and-programme.png&quot; alt=&quot;Play! tickets and programme booklet&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There was also an encore which was &lt;em&gt;very very&lt;&#x2F;em&gt; cool, because the music was from &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_Revenge_of_Shinobi&quot;&gt;Super Shinobi&lt;&#x2F;a&gt; (also known as The Revenge of the Shinobi). This old Sega Mega Drive game was one of the coolest games of the time (you get to play a ninja!). The composer of the soundtrack, Yuzo Koshiro, was there himself. Super Shinobi&#x27;s theme music was &lt;a href=&quot;http:&#x2F;&#x2F;www.gameaxis.com&#x2F;home&#x2F;?blog=1343&quot;&gt;chosen as the song to play for an encore on Game Axis&lt;&#x2F;a&gt; - I must say, good choice folks! Game footage was played and I recognized every single part of it - I didn&#x27;t even realize I had memories like that. I&#x27;m sorely tempted to see whether my old Sega Mega Drive still works so I can play Super Shinobi again.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;shinobi_batman.png&quot; alt=&quot;Shinobi vs. Batman boss in Super Shinobi&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;After this, the audience demanded another encore and we were rewarded with another rendition of One-Winged Angel (I&#x27;d have liked to hear Super Mario Bros again).&lt;&#x2F;p&gt;
&lt;p&gt;All in all, an enjoyable performance - if you&#x27;re a gamer and missed it, I feel bad for you! If Play! is coming to your location, be sure to get tickets.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>LOLCATS + email</title>
    <published>2007-06-14T16:32:36+00:00</published>
    <updated>2007-06-14T16:32:36+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/14/lolcats-email/"/>
    <id>https://chuyeow.wtf/2007/06/14/lolcats-email/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/14/lolcats-email/">&lt;p&gt;I IZ BORED: MY &lt;a href=&quot;http:&#x2F;&#x2F;blog.bezurk.com&#x2F;2007&#x2F;06&#x2F;14&#x2F;lolemail&#x2F;&quot;&gt;LOLEMAIL&lt;&#x2F;a&gt; POST, LET ME SHOW YOU IT.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>So what exactly are you looking forward to in Leopard?</title>
    <published>2007-06-13T01:02:35+00:00</published>
    <updated>2007-06-13T01:02:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/13/so-what-exactly-are-you-looking-forward-to-in-leopard/"/>
    <id>https://chuyeow.wtf/2007/06/13/so-what-exactly-are-you-looking-forward-to-in-leopard/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/13/so-what-exactly-are-you-looking-forward-to-in-leopard/">&lt;p&gt;So there&#x27;s this big &lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;macosx&#x2F;leopard&#x2F;&quot;&gt;Leopard&lt;&#x2F;a&gt; thing that&#x27;s the talk of Mac town (well, that and Safari) with all the new features being revealed (officially, at least, to the general public) at &lt;a href=&quot;http:&#x2F;&#x2F;developer.apple.com&#x2F;wwdc&#x2F;&quot;&gt;WWDC 2007&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;apple-leopard-homepage.jpg&quot; alt=&quot;Screenshot of Apple Leopard homepage&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Some of the features are pretty cool, most of them are mundane. For me, I am really looking forward to:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;macosx&#x2F;leopard&#x2F;features&#x2F;finder.html&quot;&gt;new Finder&lt;&#x2F;a&gt; - Finder sucks so bad as a file system interface. I use &lt;a href=&quot;http:&#x2F;&#x2F;www.cocoatech.com&#x2F;pf4&#x2F;&quot;&gt;Path Finder&lt;&#x2F;a&gt;, which incidentally had an &lt;a href=&quot;http:&#x2F;&#x2F;www.cocoatech.com&#x2F;changelog.php&quot;&gt;upgrade&lt;&#x2F;a&gt; recently to 4.7. The new Finder looks pretty (Cover Flow for files, sexy!) but what I&#x27;m really hoping for is a Finder with which you can actually be productive.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;macosx&#x2F;leopard&#x2F;technology&#x2F;unix.html&quot;&gt;Ruby and Rails baked right into Mac OS X&lt;&#x2F;a&gt; - while installing Rails and upgrading Ruby is a breeze on Mac OS X as it is right now, having these installed by default is pretty sweet. Even &lt;a href=&quot;http:&#x2F;&#x2F;capify.org&#x2F;&quot;&gt;Capistrano&lt;&#x2F;a&gt; will be included. Now, how one upgrades Ruby is another thing though...&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;macosx&#x2F;leopard&#x2F;features&#x2F;timemachine.html&quot;&gt;Time Machine&lt;&#x2F;a&gt; - Even though I already own a licensed copy of &lt;a href=&quot;http:&#x2F;&#x2F;www.shirt-pocket.com&#x2F;SuperDuper&#x2F;&quot;&gt;SuperDuper!&lt;&#x2F;a&gt;, I&#x27;m still eager to use Time Machine. I mean, who isn&#x27;t hooked on the time travel metaphor yet? It&#x27;s like &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;System_Restore&quot;&gt;System Restore&lt;&#x2F;a&gt; done right (with the advantage of hindsight, of course).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;What are &lt;strong&gt;you&lt;&#x2F;strong&gt; looking forward in Leopard?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>That &quot;Safari&quot; thing...</title>
    <published>2007-06-13T00:34:34+00:00</published>
    <updated>2007-06-13T00:34:34+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/13/that-safari-thing/"/>
    <id>https://chuyeow.wtf/2007/06/13/that-safari-thing/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/13/that-safari-thing/">&lt;p&gt;So what exactly is new in &lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;safari&#x2F;&quot;&gt;Safari 3&lt;&#x2F;a&gt; (other than the big OMGWTFBBQ over Safari for Windows)? TUAW has the &lt;a href=&quot;http:&#x2F;&#x2F;www.tuaw.com&#x2F;2007&#x2F;06&#x2F;12&#x2F;beta-beat-new-to-safari-3&#x2F;&quot;&gt;best writeup (with screenshots of course) of the new features in Safari 3&lt;&#x2F;a&gt; I&#x27;ve seen so far. Check it out if you&#x27;re lazy to try it out - I did install the beta and took it for a test drive, but was never much of a Safari user to recognize what exactly did change in Safari 3 beta, so this helped. I must say the new Find interface is really slick and the draggable tabs has been a long time coming (one of my biggest annoyances with Safari and Camino).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Nginx, PHP and a PHP FastCGI daemon init script</title>
    <published>2007-06-11T21:18:32+00:00</published>
    <updated>2007-06-11T21:18:32+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/11/nginx-php-and-a-php-fastcgi-daemon-init-script/"/>
    <id>https://chuyeow.wtf/2007/06/11/nginx-php-and-a-php-fastcgi-daemon-init-script/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/11/nginx-php-and-a-php-fastcgi-daemon-init-script/">&lt;p&gt;One of the things us ex-Apache httpd or ex-Lighttpd users have to get used to when installing &lt;a href=&quot;http:&#x2F;&#x2F;nginx.net&#x2F;&quot;&gt;nginx&lt;&#x2F;a&gt; is how there isn&#x27;t built-in FastCGI support for process spawning. While these means nginx is more lightweight and faster, it does mean that you have to manage your FastCGI processes yourself.&lt;&#x2F;p&gt;
&lt;p&gt;Having just upgraded to Ubuntu Feisty Fawn, I set to installing nginx and tried to get WordPress (which needs PHP, of course) running on it. Thanks to the new nginx package in the Feisty universe repository, getting nginx up and PHP (CGI version) and running is really straightforward. There&#x27;re &lt;a href=&quot;http:&#x2F;&#x2F;blog.dominiek.com&#x2F;articles&#x2F;2007&#x2F;5&#x2F;18&#x2F;bye-redskin-zdravstvujte-redstar-nginx-tips&#x2F;&quot;&gt;lots&lt;&#x2F;a&gt; of &lt;a href=&quot;http:&#x2F;&#x2F;www.urbanpuddle.com&#x2F;articles&#x2F;2007&#x2F;05&#x2F;09&#x2F;install-ruby-on-rails-on-ubuntu-feisty-fawn&quot;&gt;tutorials&lt;&#x2F;a&gt; to help you out as well.&lt;&#x2F;p&gt;
&lt;p&gt;So that&#x27;s that. The part that bugged me though, was how the tutorials always provided a script to start your PHP FastCGI processes, but never provided a way to ensure your FastCGI processes started up on a reboot (i.e. an init script). Once again, Google doesn&#x27;t disappoint, turning up this &lt;a href=&quot;http:&#x2F;&#x2F;www.mail-archive.com&#x2F;debian-bugs-dist@lists.debian.org&#x2F;msg352883.html&quot;&gt;php-cgi init script&lt;&#x2F;a&gt;. Tweak the init script a little, put it in &#x2F;etc&#x2F;init.d&#x2F;php-fastcgi, &lt;code&gt;sudo chmod +x &#x2F;etc&#x2F;init.d&#x2F;php-fastcgi&lt;&#x2F;code&gt;, run &lt;code&gt;sudo update-rc.d php-fastcgi defaults&lt;&#x2F;code&gt; and place the configuration for the script in &#x2F;etc&#x2F;default&#x2F;php-fastcgi, and you&#x27;re done. You now have a PHP FastCGI init script that spawns and kills your PHP FastCGI processes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;&#x2F;strong&gt; Lighttpd does come with a &lt;code&gt;spawn-fcgi&lt;&#x2F;code&gt; binary that does the same, but I&#x27;m having trouble finding a suitable init script for spawn-fcgi (only the Gentoo emerge seems to have the init script). Still, this script works and I didn&#x27;t really want to install lightty on my starving &lt;acronym title=&quot;Virtual Private Server&quot;&gt;VPS&lt;&#x2F;acronym&gt;.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;p&gt;&lt;strong&gt;The init script: &#x2F;etc&#x2F;init.d&#x2F;php-fastcgi&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;#! &#x2F;bin&#x2F;sh
### BEGIN INIT INFO
# Provides:          php-fastcgi
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop php-cgi in external FASTCGI mode
# Description:       Start and stop php-cgi in external FASTCGI mode
### END INIT INFO
&lt;h1 id=&quot;author-kurt-zankl-email-protected&quot;&gt;Author: Kurt Zankl &amp;lt;[EMAIL PROTECTED]&amp;gt;&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;do-not-set-e&quot;&gt;Do NOT &quot;set -e&quot;&lt;&#x2F;h1&gt;
&lt;p&gt;PATH=&#x2F;sbin:&#x2F;usr&#x2F;sbin:&#x2F;bin:&#x2F;usr&#x2F;bin
DESC=&quot;php-cgi in external FASTCGI mode&quot;
NAME=php-fastcgi
DAEMON=&#x2F;usr&#x2F;bin&#x2F;php-cgi
PIDFILE=&#x2F;var&#x2F;run&#x2F;$NAME.pid
SCRIPTNAME=&#x2F;etc&#x2F;init.d&#x2F;$NAME
PHP_CONFIG_FILE=&#x2F;etc&#x2F;php5&#x2F;cgi&#x2F;php.ini&lt;&#x2F;p&gt;
&lt;h1 id=&quot;exit-if-the-package-is-not-installed&quot;&gt;Exit if the package is not installed&lt;&#x2F;h1&gt;
&lt;p&gt;[ -x &quot;$DAEMON&quot; ] || exit 0&lt;&#x2F;p&gt;
&lt;h1 id=&quot;read-configuration-variable-file-if-it-is-present&quot;&gt;Read configuration variable file if it is present&lt;&#x2F;h1&gt;
&lt;p&gt;[ -r &#x2F;etc&#x2F;default&#x2F;$NAME ] &amp;amp;&amp;amp; . &#x2F;etc&#x2F;default&#x2F;$NAME&lt;&#x2F;p&gt;
&lt;h1 id=&quot;load-the-verbose-setting-and-other-rcs-variables&quot;&gt;Load the VERBOSE setting and other rcS variables&lt;&#x2F;h1&gt;
&lt;p&gt;. &#x2F;lib&#x2F;init&#x2F;vars.sh&lt;&#x2F;p&gt;
&lt;h1 id=&quot;define-lsb-log-functions&quot;&gt;Define LSB log_* functions.&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;depend-on-lsb-base-3-0-6-to-ensure-that-this-file-is-present&quot;&gt;Depend on lsb-base (&amp;gt;= 3.0-6) to ensure that this file is present.&lt;&#x2F;h1&gt;
&lt;p&gt;. &#x2F;lib&#x2F;lsb&#x2F;init-functions&lt;&#x2F;p&gt;
&lt;h1 id=&quot;if-the-daemon-is-not-enabled-give-the-user-a-warning-and-then-exit&quot;&gt;If the daemon is not enabled, give the user a warning and then exit,&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;unless-we-are-stopping-the-daemon&quot;&gt;unless we are stopping the daemon&lt;&#x2F;h1&gt;
&lt;p&gt;if [ &quot;$START&quot; != &quot;yes&quot; -a &quot;$1&quot; != &quot;stop&quot; ]; then
log_warning_msg &quot;To enable $NAME, edit &#x2F;etc&#x2F;default&#x2F;$NAME and set START=yes&quot;
exit 0
fi&lt;&#x2F;p&gt;
&lt;h1 id=&quot;process-configuration&quot;&gt;Process configuration&lt;&#x2F;h1&gt;
&lt;p&gt;export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS
DAEMON_ARGS=&quot;-q -b $FCGI_HOST:$FCGI_PORT -c $PHP_CONFIG_FILE&quot;&lt;&#x2F;p&gt;
&lt;p&gt;do_start()
{
# Return
#   0 if daemon has been started
#   1 if daemon was already running
#   2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test &amp;gt; &#x2F;dev&#x2F;null &lt;br &#x2F;&gt;
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON &lt;br &#x2F;&gt;
--background --make-pidfile --chuid $EXEC_AS_USER --startas $DAEMON -- &lt;br &#x2F;&gt;
$DAEMON_ARGS &lt;br &#x2F;&gt;
|| return 2
}&lt;&#x2F;p&gt;
&lt;p&gt;do_stop()
{
# Return
#   0 if daemon has been stopped
#   1 if daemon was already stopped
#   2 if daemon could not be stopped
#   other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM&#x2F;30&#x2F;KILL&#x2F;5 --pidfile $PIDFILE &amp;gt; &#x2F;dev&#x2F;null # --name $DAEMON
RETVAL=&quot;$?&quot;
[ &quot;$RETVAL&quot; = 2 ] &amp;amp;&amp;amp; return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently.  A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0&#x2F;30&#x2F;KILL&#x2F;5 --exec $DAEMON
[ &quot;$?&quot; = 2 ] &amp;amp;&amp;amp; return 2
# Many daemons don&#x27;t delete their pidfiles when they exit.
rm -f $PIDFILE
return &quot;$RETVAL&quot;
}
case &quot;$1&quot; in
start)
[ &quot;$VERBOSE&quot; != no ] &amp;amp;&amp;amp; log_daemon_msg &quot;Starting $DESC&quot; &quot;$NAME&quot;
do_start
case &quot;$?&quot; in
0|1) [ &quot;$VERBOSE&quot; != no ] &amp;amp;&amp;amp; log_end_msg 0 ;;
2) [ &quot;$VERBOSE&quot; != no ] &amp;amp;&amp;amp; log_end_msg 1 ;;
esac
;;
stop)
[ &quot;$VERBOSE&quot; != no ] &amp;amp;&amp;amp; log_daemon_msg &quot;Stopping $DESC&quot; &quot;$NAME&quot;
do_stop
case &quot;$?&quot; in
0|1) [ &quot;$VERBOSE&quot; != no ] &amp;amp;&amp;amp; log_end_msg 0 ;;
2) [ &quot;$VERBOSE&quot; != no ] &amp;amp;&amp;amp; log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg &quot;Restarting $DESC&quot; &quot;$NAME&quot;
do_stop
case &quot;$?&quot; in
0|1)
do_start
case &quot;$?&quot; in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo &quot;Usage: $SCRIPTNAME {start|stop|restart|force-reload}&quot; &amp;gt;&amp;amp;2
exit 3
;;
esac&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Config file for init script (the init script looks for this): &#x2F;etc&#x2F;default&#x2F;php-fastcgi&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;START=yes
&lt;h1 id=&quot;which-user-runs-php-default-www-data&quot;&gt;Which user runs PHP? (default: www-data)&lt;&#x2F;h1&gt;
&lt;p&gt;EXEC_AS_USER=www-data&lt;&#x2F;p&gt;
&lt;h1 id=&quot;host-and-tcp-port-for-fastcgi-listener-default-localhost-9000&quot;&gt;Host and TCP port for FASTCGI-Listener (default: localhost:9000)&lt;&#x2F;h1&gt;
&lt;p&gt;FCGI_HOST=localhost
FCGI_PORT=9000&lt;&#x2F;p&gt;
&lt;h1 id=&quot;environment-variables-which-are-processed-by-php&quot;&gt;Environment variables, which are processed by PHP&lt;&#x2F;h1&gt;
&lt;p&gt;PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=1000&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;nginx config file: &#x2F;etc&#x2F;nginx&#x2F;nginx.conf&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;location ~ \.php$ {
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME  &#x2F;var&#x2F;www&#x2F;chuyeow.wtf$fastcgi_script_name;
  include        &#x2F;etc&#x2F;nginx&#x2F;fastcgi.conf;
}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;My fastcgi.conf file (I&#x27;m not sure I need everything here...)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
&lt;p&gt;fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;&lt;&#x2F;p&gt;
&lt;p&gt;fastcgi_param  GATEWAY_INTERFACE  CGI&#x2F;1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;&lt;&#x2F;p&gt;
&lt;p&gt;fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;php-only-required-if-php-was-built-with-enable-force-cgi-redirect&quot;&gt;PHP only, required if PHP was built with --enable-force-cgi-redirect&lt;&#x2F;h1&gt;
&lt;p&gt;fastcgi_param  REDIRECT_STATUS    200;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Toilets and Linux evangelism</title>
    <published>2007-06-05T14:44:54+00:00</published>
    <updated>2007-06-05T14:44:54+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/06/05/toilets-and-linux-evangelism/"/>
    <id>https://chuyeow.wtf/2007/06/05/toilets-and-linux-evangelism/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/06/05/toilets-and-linux-evangelism/">&lt;p&gt;Pardon the self-promoting cross-linking: &lt;a href=&quot;http:&#x2F;&#x2F;blog.bezurk.com&#x2F;2007&#x2F;06&#x2F;05&#x2F;toilets-and-linux-evangelism-or-what-we-use-to-build-bezurk&#x2F;&quot;&gt;Toilets and Linux evangelism (or what we use to build Bezurk)&lt;&#x2F;a&gt; is an entry I just posted on the brand new &lt;a href=&quot;http:&#x2F;&#x2F;blog.bezurk.com&#x2F;&quot;&gt;Bezurk Blog&lt;&#x2F;a&gt; about how the toilet is a good place to spread the word. &lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;ve found other neat ways to use the free Ubuntu stickers (or even the Apple stickers that comes with iPods), do post it!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>ImageMagick port &quot;broken&quot; temporarily</title>
    <published>2007-05-29T19:15:50+00:00</published>
    <updated>2007-05-29T19:15:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/05/29/imagemagick-port-broken-temporarily/"/>
    <id>https://chuyeow.wtf/2007/05/29/imagemagick-port-broken-temporarily/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/05/29/imagemagick-port-broken-temporarily/">&lt;p&gt;Just in case anyone runs into this problem (which, I might add, would probably go away when either the portfile is updated or the source mirror fixes the problem) while installing &lt;a href=&quot;http:&#x2F;&#x2F;www.imagemagick.org&#x2F;&quot;&gt;ImageMagick&lt;&#x2F;a&gt; via &lt;a href=&quot;http:&#x2F;&#x2F;www.macports.org&#x2F;&quot;&gt;MacPorts&lt;&#x2F;a&gt;...&lt;&#x2F;p&gt;
&lt;p&gt;While trying to install &lt;a href=&quot;http:&#x2F;&#x2F;rmagick.rubyforge.org&#x2F;&quot;&gt;Rmagick&lt;&#x2F;a&gt; on my spanking, new, glossy, kakkoii &lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;macbook&#x2F;macbook.html&quot;&gt;MacBook&lt;&#x2F;a&gt;, MacPorts reported a checksum error with the ImageMagick source tarball:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Target com.apple.checksum returned: Unable to verify file checksums&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;At first, I thought it was an outdated portfile but even after a &lt;code&gt;sudo port selfupdate&lt;&#x2F;code&gt; and &lt;code&gt;sudo port -d sync&lt;&#x2F;code&gt;, the checksum error was still occurring (checksum of the file: 4bcb4264c2170fe562b10a732f43e7af, expected checksum in the portfile: 9469ce1b1b645f8c728158cc434b0ff8).&lt;&#x2F;p&gt;
&lt;p&gt;Turns out, the first listed master site (where MacPorts gets its source files from), http:&#x2F;&#x2F;imagemagick.linux-mirror.org&#x2F;download&#x2F; is hosting a source tarball with a bad checksum. Digging around the man page for &lt;code&gt;port&lt;&#x2F;code&gt; a bit, and switching the order of the master source sites solved it, so it was just a case of a bad file on one of the mirror sites.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;sudo port edit imagemagick&lt;&#x2F;code&gt; to edit the portfile and change the source mirror to a legit one. You should see something like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;master_sites \
  http:&#x2F;&#x2F;imagemagick.linux-mirror.org&#x2F;download&#x2F; \
  http:&#x2F;&#x2F;ftp.surfnet.nl&#x2F;pub&#x2F;ImageMagick&#x2F; \
  sourceforge:imagemagick \
  ftp:&#x2F;&#x2F;ftp.imagemagick.net&#x2F;pub&#x2F;${name}&#x2F; \
  ftp:&#x2F;&#x2F;ftp.fifi.org&#x2F;pub&#x2F;ImageMagick&#x2F; \
  ftp:&#x2F;&#x2F;ftp.nluug.nl&#x2F;pub&#x2F;${name}&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Just move an alternative master_site to the top of the list (I used the SourceForge one). There probably is a way to specify the master_site on the command line with &lt;code&gt;port install&lt;&#x2F;code&gt; but I&#x27;ve had just about enough of reading man pages and the now nearly unfindable MacPorts documentation (whatever happened to the &lt;a href=&quot;http:&#x2F;&#x2F;darwinports.com&#x2F;&quot;&gt;old Darwin Ports site&lt;&#x2F;a&gt; that had great documentation?)&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I&#x27;ve written to the webmaster of the mirror site linux-mirror.org, so this would probably be fixed for all two of you who are gonna be installing ImageMagick via MacPorts within these few days or so. Still, it was a good exercise in debugging bad port installations.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>&#x27;Mac vs PC commercials&#x27;.gsub(&#x2F;Mac&#x2F;, &#x27;Rails&#x27;).gsub!(&#x2F;PC&#x2F;, &#x27;Java&#x27;)</title>
    <published>2007-05-15T00:22:19+00:00</published>
    <updated>2007-05-15T00:22:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/05/15/mac-vs-pc-commercialsgsubmac-railsgsubpc-java/"/>
    <id>https://chuyeow.wtf/2007/05/15/mac-vs-pc-commercialsgsubmac-railsgsubpc-java/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/05/15/mac-vs-pc-commercialsgsubmac-railsgsubpc-java/">&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;&quot;&gt;Rails Envy&lt;&#x2F;a&gt; guys have come up with &lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;2007&#x2F;5&#x2F;14&#x2F;ruby-on-rails-commercial&quot;&gt;a spoof of the Mac versus PC commercials&lt;&#x2F;a&gt;. Yes, it&#x27;s Rails vs Java. &lt;a href=&quot;http:&#x2F;&#x2F;www.railsenvy.com&#x2F;2007&#x2F;5&#x2F;14&#x2F;ruby-on-rails-commercial&quot;&gt;Go watch it&lt;&#x2F;a&gt; or &lt;a href=&quot;http:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=PQbuyKUaKFo&quot;&gt;catch it straight on YouTube&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Lucky Star: Konata-ism</title>
    <published>2007-05-11T19:20:04+00:00</published>
    <updated>2007-05-11T19:20:04+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/05/11/lucky-star-konata-ism/"/>
    <id>https://chuyeow.wtf/2007/05/11/lucky-star-konata-ism/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/05/11/lucky-star-konata-ism/">&lt;p&gt;I&#x27;ve never much blogged about anime before so it&#x27;s probably a little known fact around here that I&#x27;m a &lt;em&gt;huge&lt;&#x2F;em&gt; anime fan. One of the anime series I&#x27;m watching now is &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lucky_Star_%28manga%29&quot;&gt;Lucky Star&lt;&#x2F;a&gt;, an anime adaptation of a 4-panel comic strip by from &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Kyoto_Animation&quot;&gt;Kyoto Animation&lt;&#x2F;a&gt;. This being the same studio that produced the excellent &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_Melancholy_of_Haruhi_Suzumiya&quot;&gt;The Melancholy of Haruhi Suzumiya&lt;&#x2F;a&gt;, I knew I had to watch it.&lt;&#x2F;p&gt;
&lt;p&gt;Despite first reading about the numerous &lt;a href=&quot;http:&#x2F;&#x2F;that.animeblogger.net&#x2F;2007&#x2F;04&#x2F;28&#x2F;on-luck-star-reprised-episode-3&#x2F;&quot;&gt;negative&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;kurogane.animeblogger.net&#x2F;2007&#x2F;04&#x2F;09&#x2F;lucky-star-start&#x2F;&quot;&gt;comments&lt;&#x2F;a&gt; on blogs about the first few episodes of Lucky Star, when I watched it I actually found it pretty funny (there &lt;em&gt;are&lt;&#x2F;em&gt; some good reviews, though rare, such as &lt;a href=&quot;http:&#x2F;&#x2F;xebek.animeblogger.net&#x2F;?p=739&quot;&gt;this one&lt;&#x2F;a&gt;). Four &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Moe_(slang)&quot;&gt;&lt;em&gt;moe&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; school girls, one of them an otaku? &lt;acronym title=&quot;Kyoto Animation&quot;&gt;KyoAni&lt;&#x2F;acronym&gt;&#x27;s really pandering to the &quot;niche&quot; crowd here (&quot;niche&quot; meaning just about every single anime gamer).&lt;&#x2F;p&gt;
&lt;p&gt;It was not until later (about 3 episodes in) that I realized the main character, Konata Izumi, was voiced by &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Aya_Hirano&quot;&gt;Hirano Aya&lt;&#x2F;a&gt; (who played Haruhi in The Melancholy of Haruhi Suzumiya). Once afflicted by &lt;a href=&quot;http:&#x2F;&#x2F;animedesho.animeblogger.net&#x2F;?cat=26&quot;&gt;Ayaism&lt;&#x2F;a&gt;, this fact enhanced the appeal of Konata.&lt;&#x2F;p&gt;
&lt;p&gt;Although, by the time I watched episode 5, I was hooked on Konata-ism. I&#x27;ll let the screen captures speak for themselves:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;lucky_star_i_am_a_tank_thumb.jpg&quot; alt=&quot;I am a tank&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So she plays an MMORPG &lt;em&gt;and&lt;&#x2F;em&gt; plays a tank? Back when I was a World of Warcraft junkie, I had a level 60 warrior (yeah, pre-Burning Crusade n00b, I am) and had too much fun with it (to use a cliche, it&#x27;s like crack).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;lucky_star_teacher_aoe_thumb.jpg&quot; alt=&quot;Teacher only AOEs&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Hahaha... Fair enough. I had a mage in World of Warcraft before switching to a warrior and sometimes I do think that way about my ex-fellow mages ;) Though I&#x27;ve had the honor of playing with some of the best mages in my old guild.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;lucky_star_ill_pull_one_thumb.jpg&quot; alt=&quot;I&#x27;ll pull one&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&quot;I&#x27;ll pull one.&quot; &quot;lolololo.&quot; Classic.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;lucky_star_teacher_logged_on_thumb.jpg&quot; alt=&quot;Teacher logged on&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Konata&#x27;s teacher (who plays with her often) logs on.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;lucky_star_its_ultra_rare_thumb.jpg&quot; alt=&quot;Rare drop!&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Konata gets a rare drop. Woo... Good times.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;lucky_star_lol_gratz_lol_thumb.jpg&quot; alt=&quot;LOL gratz&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;lucky_star_roflcopterskates_thumb.jpg&quot; alt=&quot;Roflcopterskates&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&quot;LOL gratz&quot;, &quot;roflcopterskates&quot; and &quot;bbq&quot; - I&#x27;m not sure if the fansubbers took some liberty here with the translation of the MMORPG-speak.&lt;&#x2F;p&gt;
&lt;p&gt;Ahh, and did I mention Konata watches a lot of anime as well? Konata is the new Haruhi.&lt;&#x2F;p&gt;
&lt;p&gt;Now go watch some anime!&lt;&#x2F;p&gt;
&lt;p&gt;Screencaps taken from &lt;a href=&quot;http:&#x2F;&#x2F;a.scarywater.net&#x2F;afk&#x2F;&quot;&gt;a.f.k.&#x27;s&lt;&#x2F;a&gt; excellent fansubs.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Sexy migrations on Edge Rails</title>
    <published>2007-05-07T00:02:57+00:00</published>
    <updated>2007-05-07T00:02:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/05/07/sexy-migrations-on-edge-rails/"/>
    <id>https://chuyeow.wtf/2007/05/07/sexy-migrations-on-edge-rails/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/05/07/sexy-migrations-on-edge-rails/">&lt;p&gt;So it seems &lt;a href=&quot;http:&#x2F;&#x2F;www.loudthinking.com&#x2F;&quot;&gt;DHH&lt;&#x2F;a&gt; was inspired by the &lt;a href=&quot;http:&#x2F;&#x2F;errtheblog.com&#x2F;post&#x2F;2381&quot;&gt;Sexy Migrations plugin&lt;&#x2F;a&gt; (which in turn was inspired by &lt;a href=&quot;http:&#x2F;&#x2F;hobocentral.net&#x2F;&quot;&gt;Hobo&lt;&#x2F;a&gt;) and committed &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;6667?new_path=trunk&quot;&gt;changeset 6667&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Now, you can do this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
create_table :products do |t| 
  t.integer :shop_id, :creator_id 
  t.string  :name, :value, :default =&gt; &quot;Untitled&quot;
  t.timestamps
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Succinct!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Growl integration in Firefox 3</title>
    <published>2007-05-05T18:39:28+00:00</published>
    <updated>2007-05-05T18:39:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/05/05/growl-integration-in-firefox-3/"/>
    <id>https://chuyeow.wtf/2007/05/05/growl-integration-in-firefox-3/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/05/05/growl-integration-in-firefox-3/">&lt;p&gt;Some of the latest &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;minefield&#x2F;&quot;&gt;Firefox 3 aka Minefield&lt;&#x2F;a&gt; trunk builds include &lt;a href=&quot;http:&#x2F;&#x2F;growl.info&#x2F;&quot;&gt;Growl&lt;&#x2F;a&gt; integration! This is probably a non-event for anyone other than Mac users, but hey Growl notifications without needing to install an &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;4077&quot;&gt;extension&lt;&#x2F;a&gt;? Pretty nice.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img id=&quot;image950&quot; src=&quot;&#x2F;assets&#x2F;firefox-3-download-growl.png&quot; alt=&quot;Firefox 3 Growl notification for downloads&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Get a nightly here: &lt;a href=&quot;https:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-trunk&#x2F;&quot;&gt;https:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-trunk&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;To test Firefox 3 nightlies without possibly messing up your existing profile (preferences, extensions, what have you), use the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;03&#x2F;03&#x2F;firefox-tips-sharing-session-at-websg-meetup&#x2F;#profile-manager&quot;&gt;Profile Manager&lt;&#x2F;a&gt; to create a new profile just for testing. Way less stupid then trying to load up 48 tabs from your current profile in Firefox 3 and then seeing most of the extensions fail to work (which was what I tried to do, once).&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=362685&quot;&gt;Bug 362685 â€“ Growl Integration for Mac OS X (nsIAlertsService)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox Recommendation #1: Clearing download history automatically</title>
    <published>2007-05-05T18:02:09+00:00</published>
    <updated>2007-05-05T18:02:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/05/05/firefox-recommendation-1-clearing-download-history-automatically/"/>
    <id>https://chuyeow.wtf/2007/05/05/firefox-recommendation-1-clearing-download-history-automatically/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/05/05/firefox-recommendation-1-clearing-download-history-automatically/">&lt;p&gt;It&#x27;s been ages (well, almost 2 years, but that&#x27;s a lifetime in Internet time) since &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;books&#x2F;firefox1&#x2F;&quot;&gt;Firefox Secrets&lt;&#x2F;a&gt; was published and I figured I should probably live up to being the &quot;Firefox book&quot; guy (in Singapore). I&#x27;m gonna start posting Firefox tips and pointers at least twice a week (hopefully I don&#x27;t run out of material!) And instead of using the word &quot;tip&quot;, I&#x27;ll call em &quot;recommendations&quot; instead, seeing as &lt;a href=&quot;http:&#x2F;&#x2F;robert.accettura.com&#x2F;&quot;&gt;Robert Accettura&lt;&#x2F;a&gt; already has an excellent &lt;a href=&quot;http:&#x2F;&#x2F;robert.accettura.com&#x2F;archives&#x2F;category&#x2F;firefox-tips&#x2F;&quot;&gt;Firefox Tips&lt;&#x2F;a&gt; thing going on his &lt;a href=&quot;http:&#x2F;&#x2F;robert.accettura.com&#x2F;&quot;&gt;blog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Today&#x27;s recommendation: get Firefox to clear the list of downloaded items in the download manager to keep your Firefox speedy. You&#x27;ve probably read about how &lt;a href=&quot;http:&#x2F;&#x2F;lifehacker.com&#x2F;software&#x2F;firefox&#x2F;firefox-tip--clear-your-file-download-history-244652.php&quot;&gt;cleaning up your download history&lt;&#x2F;a&gt; can help speed up Firefox (on &lt;a href=&quot;http:&#x2F;&#x2F;www.ofzenandcomputing.com&#x2F;zanswers&#x2F;434&quot;&gt;Of Zen and Computing&lt;&#x2F;a&gt; or on &lt;a href=&quot;http:&#x2F;&#x2F;www.macosxhints.com&#x2F;article.php?story=20070312004808305&quot;&gt;Mac OS X Hints&lt;&#x2F;a&gt;), but do you really want to remember to clear up your download history manually?&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-download-manager.png&quot; alt=&quot;Firefox download manager&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Unsatisfied with a manual solution, I went looking for an about:config preference (not familiar with about:config? Enter &#x27;about:config&#x27; into your Firefox address bar and hit Enter - &lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;About:config&quot;&gt;read more&lt;&#x2F;a&gt;). Sure enough, there is a &lt;strong&gt;browser.download.manager.retention&lt;&#x2F;strong&gt; preference when I used &#x27;download.manager&#x27; as a filter:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-download-manager-retention.png&quot; alt=&quot;Firefox download manager retention preference&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;But what value should I set it to? The default value is 2 but there&#x27;s no clue what another value would do. There&#x27;s only one place to find out: &lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;About:config_entries&quot;&gt;the about:config entries page in the MozillaZine Knowledge Base&lt;&#x2F;a&gt;. Search for retention and there you go:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;When to remove downloaded files&#x27; entries from the Download Manager&lt;br &#x2F;&gt;
0: Upon successful download&lt;br &#x2F;&gt;
1: When the browser exits&lt;br &#x2F;&gt;
2 (default): Manually&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Set it to 0 or 1, whichever behavior you prefer. I like 0 since I use the &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;firefox&#x2F;26&#x2F;&quot;&gt;Download Statusbar extension&lt;&#x2F;a&gt; and never get to see the Download Manager.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s it for today&#x27;s tip (and a pretty low-key tip at that)!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google Reader, so pretty...</title>
    <published>2007-04-29T20:34:25+00:00</published>
    <updated>2007-04-29T20:34:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/04/29/google-reader-so-pretty/"/>
    <id>https://chuyeow.wtf/2007/04/29/google-reader-so-pretty/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/04/29/google-reader-so-pretty/">&lt;p&gt;Today being RSS feed backlog-clearing day, I came across &lt;a href=&quot;http:&#x2F;&#x2F;www.hicksdesign.co.uk&#x2F;journal&#x2F;google-reader-theme&quot;&gt;Jon Hicks&#x27; Google Reader Theme&lt;&#x2F;a&gt;, installed the &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;2108&quot;&gt;Stylish extension for Firefox&lt;&#x2F;a&gt;, added his user style for &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;reader&#x2F;&quot;&gt;Google Reader&lt;&#x2F;a&gt; to Stylish, and have been wow-ed ever since. Here&#x27;s a rough idea how it looks (click the thumbnail for a bigger picture):&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;wp-content&#x2F;uploads&#x2F;2007&#x2F;04&#x2F;google_reader_stylish_hicks.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;google_reader_stylish_hicks_thumb.jpg&quot; alt=&quot;Google Reader with Jon Hicks&#x27; theme&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re a Google Reader user &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2006&#x2F;10&#x2F;24&#x2F;google-reader-a-bloglines-users-perspective&#x2F;&quot;&gt;like me&lt;&#x2F;a&gt;, you&#x27;d probably like Jon&#x27;s theme. I don&#x27;t have to say that it does look very much better than the original Google Reader theme (oops, I said it). Amazing what a talented designer can do with user style sheets.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Axel - lightweight command line download accelerator</title>
    <published>2007-04-29T16:50:09+00:00</published>
    <updated>2007-04-29T16:50:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/04/29/axel-lightweight-command-line-download-accelerator/"/>
    <id>https://chuyeow.wtf/2007/04/29/axel-lightweight-command-line-download-accelerator/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/04/29/axel-lightweight-command-line-download-accelerator/">&lt;p&gt;I never really fancied download accelerators but &lt;a href=&quot;http:&#x2F;&#x2F;wilmer.gaast.net&#x2F;main.php&#x2F;axel.html&quot;&gt;Axel&lt;&#x2F;a&gt; is different - it&#x27;s a command line application and is naturally significantly more lightweight then those graphical download managers I&#x27;ve stopped using since 1996 (&lt;em&gt;teh intraweb&lt;&#x2F;em&gt; was slower then, and I was sucking bits of it through a state of the art 33.6kbps dial-up modem).&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been using &lt;code&gt;wget&lt;&#x2F;code&gt; for its auto-resume support, but have switched to using Axel since one of my colleagues at &lt;a href=&quot;http:&#x2F;&#x2F;bezurk.com&#x2F;&quot;&gt;Bezurk&lt;&#x2F;a&gt; introduced me to it. If you&#x27;re a &lt;code&gt;wget&lt;&#x2F;code&gt; or &lt;code&gt;curl&lt;&#x2F;code&gt; fan, Axel is almost a drop-in replacement (although it doesn&#x27;t handle multiple redirects or broken connections too well).&lt;&#x2F;p&gt;
&lt;p&gt;Install it:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
# On a Mac, with Darwin Ports.
sudo port install axel
&lt;h1 id=&quot;on-ubuntu&quot;&gt;On Ubuntu.&lt;&#x2F;h1&gt;
&lt;p&gt;sudo apt-get install axel
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Windows users would require &lt;a href=&quot;http:&#x2F;&#x2F;sources.redhat.com&#x2F;cygwin&#x2F;&quot;&gt;cygwin&lt;&#x2F;a&gt; to get Axel to work for them (what, a Windows user and you don&#x27;t have cygwin installed already?).&lt;&#x2F;p&gt;
&lt;p&gt;Now go download some files. If you need a good place just to test the speeds, go to &lt;a href=&quot;http:&#x2F;&#x2F;developer.yahoo.com&#x2F;yui&#x2F;theater&#x2F;&quot;&gt;YUI Theater&lt;&#x2F;a&gt; and download some videos (watch them too, most of them are pretty good, like Douglas Crockford&#x27;s and the Firebug videos). Run it on the command line by typing:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;axel -n 10 http:&#x2F;&#x2F;example.com&#x2F;some_file.mov&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;-n 10&lt;&#x2F;code&gt; option tells Axel to use a maximum of 10 simultaneous connections when downloading the file. Another useful option is &lt;code&gt;-a&lt;&#x2F;code&gt;, which outputs a &lt;code&gt;wget&lt;&#x2F;code&gt;-like report of download progress in a few lines rather than filling up your screen with download progress messages.&lt;&#x2F;p&gt;
&lt;p&gt;Check out the speeds I managed to get:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;axel-super-download-speed.jpg&quot; alt=&quot;Check out the 1MB+&#x2F;s download speed with Axel&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;250MB in 3 minutes, with an average download speed of 1339KB&#x2F;s. That&#x27;s pretty damn fast. Comparatively, I could only get speeds of around 40KB&#x2F;s using Firefox. It&#x27;s hard not to love this raw speed and I think you might too.&lt;&#x2F;p&gt;
&lt;p&gt;Oh, and to go off-topic here, it&#x27;s nice to know we are steadily chipping away at the Windows user base in &lt;a href=&quot;http:&#x2F;&#x2F;bezurk.com&#x2F;&quot;&gt;Bezurk&lt;&#x2F;a&gt;. The colleague who introduced me to Axel recently switched to Ubuntu (he&#x27;s been waiting for Ubuntu 7.04). It was painful to set it up correctly (the KDE part of Kubuntu, not Ubuntu itself), but I think he&#x27;s much happier working on Linux for some inexplicable reason.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Thunderbird 2.0 and Gmail integration</title>
    <published>2007-04-29T15:56:08+00:00</published>
    <updated>2007-04-29T15:56:08+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/04/29/thunderbird-20-and-gmail-integration/"/>
    <id>https://chuyeow.wtf/2007/04/29/thunderbird-20-and-gmail-integration/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/04/29/thunderbird-20-and-gmail-integration/">&lt;p&gt;I haven&#x27;t been following Thunderbird development like I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;07&#x2F;24&#x2F;new-features-in-mozilla-thunderbird-08&quot;&gt;used&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;03&#x2F;14&#x2F;junk-filter-improvements-in-thunderbird-weekly-build-new-win32-installer&#x2F;&quot;&gt;to&lt;&#x2F;a&gt; so I was presently surprised to see how far Thunderbird has come when I tried a beta of Thunderbird 2 a while back (of course, &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.com&#x2F;en-US&#x2F;thunderbird&#x2F;&quot;&gt;Thunderbird 2 has been released&lt;&#x2F;a&gt; for over a week, but I&#x27;m still clearing a backlog of blog drafts).&lt;&#x2F;p&gt;
&lt;p&gt;One of the things I noticed was how Gmail POP integration is baked right in when creating a new accounts:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;thunderbird-gmail-mailbox-creation-step-1.png&quot; alt=&quot;Thunderbird - Gmail mailbox creation step 1&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Step 2: tell Thunderbird your Gmail ID.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;thunderbird-gmail-mailbox-creation-step-2.png&quot; alt=&quot;Thunderbird - Gmail mailbox creation step 2&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Step 3: there isn&#x27;t really a step 3, just confirm your Gmail settings.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;thunderbird-gmail-mailbox-creation-step-3.png&quot; alt=&quot;Thunderbird - Gmail mailbox creation step 3&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;How&#x27;s that for time-saving? Gone are the days of looking for &lt;a href=&quot;http:&#x2F;&#x2F;mail.google.com&#x2F;support&#x2F;bin&#x2F;answer.py?ctx=%67mail&amp;hl=en&amp;answer=12103&quot;&gt;POP client configuration documentation on Gmail&lt;&#x2F;a&gt;. My only gripe is that there isn&#x27;t a similar wizard interface for &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;a&#x2F;&quot;&gt;Gmail for your domain&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Oh and there&#x27;re tons of other nice &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.com&#x2F;en-US&#x2F;thunderbird&#x2F;features.html&quot;&gt;features in Thunderbird&lt;br &#x2F;&gt;
2&lt;&#x2F;a&gt;: Advanced Folder Views lets you configure &quot;Favorite Folders&quot; and has a view for unread folders as well, tags (&lt;em&gt;a la&lt;&#x2F;em&gt; Gmail labels or GTD organization) and of course, a well-tuned Saved Searches feature (which has been there since version 0.9).&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m back to using Thunderbird again after a &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;02&#x2F;25&#x2F;imap-idle-plugin-for-apple-mail&#x2F;&quot;&gt;brief fling with Apple Mail&lt;&#x2F;a&gt;, for no particular reason actually. Well, actually, I did reinstall Mac OS X Tiger (it got &lt;em&gt;really&lt;&#x2F;em&gt; crappy in terms of performance - must be the tons of software I was installing) and found it much less work to get a satisfactorily working email client with Thunderbird than with Apple Mail.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>If you&#x27;re having problems with script&#x2F;console on edge Rails...</title>
    <published>2007-04-11T10:27:56+00:00</published>
    <updated>2007-04-11T10:27:56+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/04/11/if-youre-having-problems-with-scriptconsole-on-edge-rails/"/>
    <id>https://chuyeow.wtf/2007/04/11/if-youre-having-problems-with-scriptconsole-on-edge-rails/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/04/11/if-youre-having-problems-with-scriptconsole-on-edge-rails/">&lt;p&gt;If you&#x27;re on edge Rails and are having problems starting script&#x2F;console, it may be caused by spaces in your Rails working directory (see &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;7955&quot;&gt;ticket 7955: Console environment load broken when RAILS_ROOT contains spaces&lt;&#x2F;a&gt;). Basically the lack of quoting on RAILS_ROOT causes console.rb to pass incorrect paths to IRB (it gets split on the spaces in your directory path).&lt;&#x2F;p&gt;
&lt;p&gt;Just in case anyone runs into this problem and doesn&#x27;t want to start debugging the problem like I did. &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;6512&quot;&gt;Changeset 6512&lt;&#x2F;a&gt; fixes things. If you do update Rails to revision 6512 (or higher) though, be aware of &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;changeset&#x2F;6507&quot;&gt;changest 6507&lt;&#x2F;a&gt;. Ahh the joys of living on the edge.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
&#x2F;opt&#x2F;local&#x2F;lib&#x2F;ruby&#x2F;site_ruby&#x2F;1.8&#x2F;rubygems&#x2F;custom_require.rb:27:in `gem_original_require&#x27;: no such file to load -- &#x2F;Data&#x2F;Working (LoadError)
        from &#x2F;opt&#x2F;local&#x2F;lib&#x2F;ruby&#x2F;site_ruby&#x2F;1.8&#x2F;rubygems&#x2F;custom_require.rb:27:in `require&#x27;
        from &#x2F;opt&#x2F;local&#x2F;lib&#x2F;ruby&#x2F;1.8&#x2F;irb&#x2F;init.rb:252:in `load_modules&#x27;
        from &#x2F;opt&#x2F;local&#x2F;lib&#x2F;ruby&#x2F;1.8&#x2F;irb&#x2F;init.rb:250:in `each&#x27;
        from &#x2F;opt&#x2F;local&#x2F;lib&#x2F;ruby&#x2F;1.8&#x2F;irb&#x2F;init.rb:250:in `load_modules&#x27;
        from &#x2F;opt&#x2F;local&#x2F;lib&#x2F;ruby&#x2F;1.8&#x2F;irb&#x2F;init.rb:21:in `setup&#x27;
        from &#x2F;opt&#x2F;local&#x2F;lib&#x2F;ruby&#x2F;1.8&#x2F;irb.rb:54:in `start&#x27;
        from &#x2F;opt&#x2F;local&#x2F;bin&#x2F;irb:13&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
  </entry>
  <entry>
    <title>Get your Rails tests results via Growl notifications</title>
    <published>2007-04-01T14:25:05+00:00</published>
    <updated>2007-04-01T14:25:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/04/01/get-your-testing-results-via-growl-notifications/"/>
    <id>https://chuyeow.wtf/2007/04/01/get-your-testing-results-via-growl-notifications/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/04/01/get-your-testing-results-via-growl-notifications/">&lt;p&gt;I&#x27;ve been using Autotest (part of the &lt;a href=&quot;http:&#x2F;&#x2F;www.zenspider.com&#x2F;ZSS&#x2F;Products&#x2F;ZenTest&#x2F;&quot;&gt;ZenTest&lt;&#x2F;a&gt; package) while testing my Rails applications and never thought of asking for more. After all, getting my tests (well, &lt;a href=&quot;http:&#x2F;&#x2F;rspec.rubyforge.org&#x2F;&quot;&gt;specs&lt;&#x2F;a&gt; actually) run automatically whenever I make a relevant change &lt;em&gt;and&lt;&#x2F;em&gt; having &lt;code&gt;diff&lt;&#x2F;code&gt;-level granularity on which tests Autotest re-runs is pretty damn useful enough. That is, until I came across this &lt;a href=&quot;http:&#x2F;&#x2F;marcus.ahnve.net&#x2F;2007&#x2F;03&#x2F;30&#x2F;rspec-and-autotest&#x2F;&quot;&gt;RSpec and Autotest with Growl notifications blog entry&lt;&#x2F;a&gt; (on &lt;a href=&quot;http:&#x2F;&#x2F;javablogs.com&#x2F;&quot;&gt;JavaBlogs&lt;&#x2F;a&gt;, no less!)&lt;&#x2F;p&gt;
&lt;p&gt;How&#x27;re these for &lt;span style=&quot;color: #900;&quot;&gt;red&lt;&#x2F;span&gt;&#x2F;&lt;span style=&quot;color: #090;&quot;&gt;green&lt;&#x2F;span&gt; test results?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Tests (specs) passing!&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;growl-green-autotest.png&quot; alt=&quot;Growl notification of tests passing&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Tests (specs) failing :(&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;growl-red-autotest.png&quot; alt=&quot;Growl notification of tests failing :(&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Much better! Now I don&#x27;t have to glance at my terminal window (I recently realized how painful it is while coding with a single monitor) and get unobtrusive notifications.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, this is Mac-only (or wherever &lt;a href=&quot;http:&#x2F;&#x2F;growl.info&#x2F;&quot;&gt;Growl&lt;&#x2F;a&gt; is supported). I had to follow links to several blog entries to get it setup nicely (see &lt;a href=&quot;http:&#x2F;&#x2F;blog.labratz.net&#x2F;articles&#x2F;2006&#x2F;09&#x2F;13&#x2F;growl-autotest-rails-with-zentest-3-4-0&quot;&gt;Growl + Autotest Rails with Zentest 3.4.0&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;blog.internautdesign.com&#x2F;2006&#x2F;11&#x2F;12&#x2F;autotest-growl-goodness&quot;&gt;Green goodness with autotest + growl&lt;&#x2F;a&gt; - those are my references).&lt;&#x2F;p&gt;
&lt;p&gt;Basically you need &lt;a href=&quot;http:&#x2F;&#x2F;growl.info&#x2F;&quot;&gt;Growl&lt;&#x2F;a&gt; installed, and the &lt;a href=&quot;http:&#x2F;&#x2F;growl.info&#x2F;documentation&#x2F;growlnotify.php&quot;&gt;&lt;code&gt;growlnotify&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; tool in your path. &lt;code&gt;growlnotify&lt;&#x2F;code&gt; can be found in the &lt;code&gt;Extras&#x2F;growlnotify&lt;&#x2F;code&gt; directory in the Growl dmg (for example, after you&#x27;ve mounted the Growl-0.x.x.dmg, you can find it here: &lt;code&gt;&#x2F;Volumes&#x2F;Growl&#x2F;Extras&#x2F;growlnotify&lt;&#x2F;code&gt;). Just copy the &lt;code&gt;growlnotify&lt;&#x2F;code&gt; executable into your path (I copied it into &lt;code&gt;&#x2F;opt&#x2F;local&#x2F;bin&lt;&#x2F;code&gt; since I&#x27;m using Darwin Ports and don&#x27;t have a &lt;code&gt;&#x2F;usr&#x2F;local&#x2F;bin&lt;&#x2F;code&gt; directory). Verify it&#x27;s running by entering:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;growlnotify -m &quot;Testing growlnotify&quot; Boo Ya!&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;into a terminal window. You should see a Growl notification.&lt;&#x2F;p&gt;
&lt;p&gt;Now, you need to create an Autotest hook by creating an autotest init file in your home directory named &lt;code&gt;.autotest&lt;&#x2F;code&gt;, and copy this chunk of text in:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
module Autotest::Growl
  def self.growl title, msg, img, pri=0, sticky=&quot;&quot; 
    system &quot;growlnotify -n autotest --image #{img} -p #{pri} -m #{msg.inspect} #{title} #{sticky}&quot; 
  end
&lt;p&gt;Autotest.add_hook :ran_command do |at|
output = at.results.last.slice(&#x2F;(\d+)\s.*specifications?,\s(\d+)\s.*failures?&#x2F;)
if output =~ &#x2F;[1-9]\sfailures?&#x2F;
growl &quot;Test Results&quot;, &quot;#{output}&quot;, &quot;&#x2F;Data&#x2F;Pictures&#x2F;Icons&#x2F;rails_fail.png&quot;, 2, &quot;-s&quot;
else
growl &quot;Test Results&quot;, &quot;#{output}&quot;, &quot;&#x2F;Data&#x2F;Pictures&#x2F;Icons&#x2F;rails_ok.png&quot;
end
end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Replace the paths to the pass&#x2F;fail icons (as you can see, mine are in &lt;code&gt;&#x2F;Data&#x2F;Pictures&#x2F;Icons&#x2F;&lt;&#x2F;code&gt;) with the correct paths to any images you want to display (grab them from &lt;a href=&quot;http:&#x2F;&#x2F;blog.internautdesign.com&#x2F;2006&#x2F;11&#x2F;12&#x2F;autotest-growl-goodness&quot;&gt;Green goodness with autotest + growl&lt;&#x2F;a&gt; or roll your own). You can change the parameters passed to &lt;code&gt;growlnotify&lt;&#x2F;code&gt; however you want (use &lt;code&gt;growlnotify -h&lt;&#x2F;code&gt; to see what parameters it acccepts). The &lt;code&gt;pri&lt;&#x2F;code&gt; parameter sets the priority level of the message (test failures come up with a priority of 2, hence the red background of the Growl notification). Passing &lt;code&gt;-s&lt;&#x2F;code&gt; to &lt;code&gt;sticky&lt;&#x2F;code&gt; tells Growl to keep the notification sticky. If you&#x27;re running your (auto)tests on a remote server (e.g. in a Continuous Integration system), you can even use &lt;code&gt;growlnotify&lt;&#x2F;code&gt; to send remote notifications (see the &lt;code&gt;-H&lt;&#x2F;code&gt; switch) to your development workstations!&lt;&#x2F;p&gt;
&lt;p&gt;Lovely! I love you, MacBook Pro serial no. W86280NAVWW (despite your broken DVD drive and you randomly freezing up on me when you get too hot).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Setting up svnsync-ed (mirrored) SVN repositories on Ubuntu (part 2 of 2)</title>
    <published>2007-03-31T23:12:31+00:00</published>
    <updated>2007-03-31T23:12:31+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/31/setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-2-of-2/"/>
    <id>https://chuyeow.wtf/2007/03/31/setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-2-of-2/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/31/setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-2-of-2/">&lt;p&gt;&lt;ins&gt;Note: if you haven&#x27;t already, you may want to read &lt;a href=&quot;&#x2F;2007&#x2F;03&#x2F;29&#x2F;setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-1-of-2&#x2F;&quot;&gt;part 1 of this article&lt;&#x2F;a&gt; first.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Phew, and that was all the work you needed to do to migrate your Subversion repository to another server. We&#x27;ve barely touched that other server that we wanted to use for mirroring the repository!&lt;&#x2F;p&gt;
&lt;h3&gt;&quot;Bootstrapping&quot; your mirror SVN server for svnsync&lt;&#x2F;h3&gt;
&lt;p&gt;This mirror SVN server also needs Subversion 1.4.x installed, so go ahead and do the (almost) same things we&#x27;ve done in &lt;a href=&quot;&#x2F;2007&#x2F;03&#x2F;29&#x2F;setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-1-of-2&#x2F;&quot;&gt;part 1&lt;&#x2F;a&gt; to get Subversion installed. You should be able to use the &lt;code&gt;.deb&lt;&#x2F;code&gt; package generated by &lt;code&gt;checkinstall&lt;&#x2F;code&gt; on your main Subversion server to install Subversion 1.4.x on the mirror SVN server. Just scp it to the mirror SVN server and install it (&lt;code&gt;dpkg -i subversion-1.4.3.deb&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;With Subversion installed, create a new Subversion repository (using &lt;code&gt;svnadmin create&lt;&#x2F;code&gt;, remember?), but &lt;em&gt;don&#x27;t&lt;&#x2F;em&gt; load the repository dump like we did on the main SVN server in &lt;a href=&quot;&#x2F;2007&#x2F;03&#x2F;29&#x2F;setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-1-of-2&#x2F;&quot;&gt;part 1&lt;&#x2F;a&gt; (of course, since we are going to be mirroring the repository!).&lt;&#x2F;p&gt;
&lt;h3&gt;Setting up svnsync to mirror your repository&lt;&#x2F;h3&gt;
&lt;p&gt;First, create a SVN user for svnsync to use - let&#x27;s call this the &#x27;svnsync user&#x27;. The easiest (and best) way to do this is edit the svnserve.conf and passwd files:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;conf&#x2F;svnserve.conf&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
# Uncomment this line.
password-db = passwd
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;conf&#x2F;passwd&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
svnsync = secret
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This gives read and write access to the &#x27;svnsync user&#x27;. The &lt;code&gt;svnsync&lt;&#x2F;code&gt; program will authenticate with our repositories as this user via the &lt;code&gt;svn:&#x2F;&#x2F;&lt;&#x2F;code&gt; protocol (i.e. via svnserve).&lt;&#x2F;p&gt;
&lt;p&gt;Next, we need to create a &lt;code&gt;pre-revprop-change&lt;&#x2F;code&gt; hook for the destination repository. The &lt;a href=&quot;http:&#x2F;&#x2F;svn.collab.net&#x2F;repos&#x2F;svn&#x2F;trunk&#x2F;notes&#x2F;svnsync.txt&quot;&gt;svnsync documentation&lt;&#x2F;a&gt; has a detailed explanation. Create a &lt;code&gt;hooks&#x2F;pre-revprop-change&lt;&#x2F;code&gt; file under your destination repository&#x27;s directory.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
#!&#x2F;bin&#x2F;sh
USER=&quot;$3&quot;
&lt;p&gt;if [ &quot;$USER&quot; = &quot;svnsync&quot; ]; then exit 0; fi&lt;&#x2F;p&gt;
&lt;p&gt;echo &quot;Only the svnsync user can change revprops&quot; &amp;gt;&amp;amp;2
exit 1&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Make it executable, and then initialize the sync:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
chmod +x hooks&#x2F;pre-revprop-change
svnsync init file:&#x2F;&#x2F;&#x2F;var&#x2F;svn&#x2F;repositories&#x2F;destination_repos svn:&#x2F;&#x2F;source.host&#x2F;source_repos&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Don&#x27;t worry, this only sets up the sync - there&#x27;s no actual data copying yet. Syncing your repository data may take a long time if you have a big source repository, so I suggest using &lt;code&gt;nohup&lt;&#x2F;code&gt; to run the code overnight (or something), or at least saving the output in a log. Either way, the command to start the sync is:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;svnsync sync --username svnsync file:&#x2F;&#x2F;&#x2F;var&#x2F;svn&#x2F;repositories&#x2F;testsync&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You should start seeing svnsync committing in changes from your source repository. Instant gratification (well, almost)! Should your svnsync process get aborted or killed, you can remove the hanging lock by running:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;svn propdel svn:sync-lock --revprop -r 0&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3&gt;Setting up &#x27;on-the-fly&#x27; syncing&lt;&#x2F;h3&gt;
&lt;p&gt;So now you have your source and destination repositories synced, but what happens when you start committing changes to your source repository? Nothing! That&#x27;s because svnsync is merely a passive syncing tool (meaning you have to run it to sync, instead of it knowing when to sync automatically).&lt;&#x2F;p&gt;
&lt;p&gt;There are two ways you can setup &#x27;real-time&#x27; syncing:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
    Use &lt;code&gt;cron&lt;&#x2F;code&gt; (or a similar scheduler) on the destination repository server. Add something like this to your &lt;code&gt;crontab&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;* * * * * &#x2F;usr&#x2F;local&#x2F;bin&#x2F;svnsync --non-interactive sync svn:&#x2F;&#x2F;source.host&#x2F;source_repos&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;    This basically runs svnsync on your destination repository server every minute to pull down any changes to your source repository.
  &lt;&#x2F;li&gt;
&lt;li&gt;Add a post-commit hook to the source repository. I found this &lt;a href=&quot;http:&#x2F;&#x2F;journal.paul.querna.org&#x2F;articles&#x2F;2006&#x2F;09&#x2F;14&#x2F;using-svnsync&quot;&gt;svnsync entry by Paul Querna&lt;&#x2F;a&gt; that has a sample post-commit hook. If I recall correctly I tried it but it didn&#x27;t work for me, so I settled on using cron to sync up my repositories.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3&gt;Things that I skipped&lt;&#x2F;h3&gt;
&lt;p&gt;There&#x27;re some things that I skipped over while writing this, mainly to do with SVN authentication.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
    If you&#x27;re accessing your repository via the &lt;code&gt;svn+ssh:&#x2F;&#x2F;&lt;&#x2F;code&gt; protocol, you&#x27;ve to manage the (group) permissions of the repository files in the filesystem appropriately (basically the repository should be group writable by your users). &lt;code&gt;chmod&lt;&#x2F;code&gt; and &lt;code&gt;chown&lt;&#x2F;code&gt; are your friends, as is &lt;acronym title=&quot;Network Information Service&quot;&gt;NIS&lt;&#x2F;acronym&gt; (or something similar) to manage your users. I use these steps to create a new SVN repository that gets access via the &lt;code&gt;svn+ssh:&#x2F;&#x2F;&lt;&#x2F;code&gt; protocol:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
sudo mkdir &#x2F;var&#x2F;svn&#x2F;repositories&#x2F;funky_project
mkdir &#x2F;tmp&#x2F;funky_project
mkdir &#x2F;tmp&#x2F;funky_project&#x2F;trunk
mkdir &#x2F;tmp&#x2F;funky_project&#x2F;branches
mkdir &#x2F;tmp&#x2F;funky_project&#x2F;tags
sudo svnadmin create &#x2F;var&#x2F;svn&#x2F;repositories&#x2F;funky_project
sudo svn import &#x2F;tmp&#x2F;YourProjectNameHere file:&#x2F;&#x2F;&#x2F;&#x2F;var&#x2F;svn&#x2F;repositories&#x2F;funky_project -m &quot;Initial import.&quot;
rm -rf &#x2F;tmp&#x2F;funky_project
sudo chown -R www-data:www-data &#x2F;var&#x2F;svn&#x2F;repositories&#x2F;funky_project
sudo chmod -R g+w &#x2F;var&#x2F;svn&#x2F;repositories&#x2F;funky_project
    &lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;    As you can see, my SVN users are part of the www-data group, and the repository directory is made group-writable.
  &lt;&#x2F;li&gt;
&lt;li&gt;The &lt;code&gt;svn:&#x2F;&#x2F;&lt;&#x2F;code&gt; protocol has authentication configuration files in the &lt;code&gt;conf&#x2F;&lt;&#x2F;code&gt; directory of your repository. The SVN book has a &lt;a href=&quot;http:&#x2F;&#x2F;svnbook.red-bean.com&#x2F;nightly&#x2F;en&#x2F;svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.auth&quot;&gt;section explaining how to configure authentication&lt;&#x2F;a&gt; for &lt;code&gt;svnserve&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Apache httpd can be used to expose your SVN repositories via the WebDAV protocol. This allows for the very commonly seen &lt;code&gt;http:&#x2F;&#x2F;&lt;&#x2F;code&gt; repository URLs (especially for Open Source projects). Configuration is a little more involved and you would probably have to install Apache from source as well. The SVN book has &lt;a href=&quot;http:&#x2F;&#x2F;svnbook.red-bean.com&#x2F;nightly&#x2F;en&#x2F;svn.serverconfig.httpd.html&quot;&gt;the details&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3&gt;Wrapping up&lt;&#x2F;h3&gt;
&lt;p&gt;I hope someone found this entry useful - I know I could have used one when I was setting up Subversion and svnsync.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Testing rescue_action_in_public with RSpec</title>
    <published>2007-03-31T01:34:05+00:00</published>
    <updated>2007-03-31T01:34:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/31/testing-rescue_action_in_public-with-rspec/"/>
    <id>https://chuyeow.wtf/2007/03/31/testing-rescue_action_in_public-with-rspec/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/31/testing-rescue_action_in_public-with-rspec/">&lt;p&gt;After overriding &lt;code&gt;rescue_action_in_public&lt;&#x2F;code&gt; in the &lt;code&gt;ApplicationController&lt;&#x2F;code&gt; to deal with &lt;code&gt;ActiveRecord::RecordNotFound&lt;&#x2F;code&gt; exceptions (a very common exception to &lt;code&gt;rescue&lt;&#x2F;code&gt; in the canonical &#x27;show&#x27; actions of your controllers), I decided to test it. I&#x27;ve been getting used to &lt;acronym title=&quot;Behavior-Driven Developmen t&quot;&gt;BDD&lt;&#x2F;acronym&gt; with &lt;a href=&quot;http:&#x2F;&#x2F;rspec.rubyforge.org&#x2F;&quot;&gt;RSpec&lt;&#x2F;a&gt; (and the &lt;a href=&quot;http:&#x2F;&#x2F;rspec.rubyforge.org&#x2F;documentation&#x2F;rails&#x2F;index.html&quot;&gt;Spec::Rails plugin&lt;&#x2F;a&gt;), so I stumbled a bit when writing the spec.&lt;&#x2F;p&gt;
&lt;p&gt;I finally settled on this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
class DummyController &lt; ApplicationController
  def index
  end
end
&lt;p&gt;context &#x27;A child class of ApplicationController&#x27; do
controller_name :dummy&lt;&#x2F;p&gt;
&lt;p&gt;specify &#x27;should render a 404 error for ActiveRecord::RecordNotFound,
ActionController::UnknownController,
ActionController::UnknownAction,
ActionController::RoutingError exceptions (in public)&#x27; do&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;exceptions_404 = [
  ActionController::RoutingError.new(&amp;#39;test&amp;#39;),
  ActiveRecord::RecordNotFound.new,
  ActionController::UnknownController.new,
  ActionController::UnknownAction.new]

exceptions_404.each do |exception|
  controller.eigenclass.send(:define_method, :index) do
    raise exception.class, &amp;#39;some message&amp;#39;
  end

  lambda {
    get &amp;#39;index&amp;#39;
  }.should_raise(exception.class)
  controller.send :rescue_action_in_public, exception

  response.should be_missing
end
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;end
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Notice the use of a dummy controller so that we can actually make a request to it (and get all the Rails magic and environment set up ready for testing). Also, I had to use instances of the exceptions rather than their classes because I&#x27;m &lt;code&gt;send&lt;&#x2F;code&gt;ing a &lt;code&gt;rescue_action_in_public&lt;&#x2F;code&gt; message to the controller without knowing how to instantiate the exceptions (for example, &lt;code&gt;ActionController::RoutingError&lt;&#x2F;code&gt; actually has a constructor which requires at least 1 argument). So I create the exceptions first.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;eigenclass&lt;&#x2F;code&gt; method simply returns Ruby&#x27;s canonical singleton class or metaclass, depending on who you talk to (i.e. &lt;code&gt;class &amp;lt;&amp;lt; self; self; end;&lt;&#x2F;code&gt;) and I modify the dummy &#x27;index&#x27; action to raise the exception. And here&#x27;s the stinky part:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
lambda {
  get &#x27;index&#x27;
}.should_raise(exception.class)
controller.send :rescue_action_in_public, exception&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Make a GET to the &#x27;index&#x27; action, make sure it raises the exception and catch it (with &lt;code&gt;should_raise&lt;&#x2F;code&gt; - the assertion is unnecessary since I did override &#x27;index&#x27; to raise the exception), and then force &lt;code&gt;rescue_action_in_public&lt;&#x2F;code&gt; to be called. Something&#x27;s fishy here - why isn&#x27;t the exception caught by default by &lt;code&gt;rescue_action_in_public&lt;&#x2F;code&gt;? I&#x27;ve set these to make sure that rescue_action_in_public is called but it seems like it never is called:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
ActionController::Base.consider_all_requests_local = false
controller.eigenclass.send(:define_method, :local_request?) do
  false
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I traced the code into ActionController::Rescue and everything seems to be in order. I&#x27;m stumped and weary, I think I&#x27;ll look at this again tomorrow. Anyone see any obvious mistakes?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Setting up svnsync-ed (mirrored) SVN repositories on Ubuntu (part 1 of 2)</title>
    <published>2007-03-29T01:34:36+00:00</published>
    <updated>2007-03-29T01:34:36+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/29/setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-1-of-2/"/>
    <id>https://chuyeow.wtf/2007/03/29/setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-1-of-2/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/29/setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-1-of-2/">&lt;p&gt;This is a 2-part journal on setting up migrating and upgrading a Subversion repository, and then using svnsync to mirror the newly created repository. (&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;03&#x2F;31&#x2F;setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-2-of-2&#x2F;&quot;&gt;Part 2&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;h3&gt;Initial setup&lt;&#x2F;h3&gt;
&lt;p&gt;Ever since &lt;a href=&quot;http:&#x2F;&#x2F;subversion.tigris.org&#x2F;&quot;&gt;Subversion&lt;&#x2F;a&gt; 1.4 was &lt;a href=&quot;http:&#x2F;&#x2F;subversion.tigris.org&#x2F;svn_1.4_releasenotes.html&quot;&gt;released&lt;&#x2F;a&gt;, I&#x27;d been eying the new &lt;a href=&quot;http:&#x2F;&#x2F;svn.collab.net&#x2F;repos&#x2F;svn&#x2F;trunk&#x2F;notes&#x2F;svnsync.txt&quot;&gt;svnsync&lt;&#x2F;a&gt; tool because we had a single repository that was not, erm, &lt;em&gt;really&lt;&#x2F;em&gt; backed up (we had daily server backups and occasional manual repository dumps but that was it). svnsync promised to make repository mirroring simple, and after doing some repository migration and upgrading, I can assure you it really does make things easier than any other (more manual) repository backup solutions I had seen before. This is a walkthrough of how you can upgrade your pre-1.4 &lt;acronym title=&quot;Subversion&quot;&gt;SVN&lt;&#x2F;acronym&gt; repositories to 1.4.x, and setup svnsync to mirror your repositories. It&#x27;s going to be very biased to Ubuntu but I&#x27;m sure you can translate any Ubuntu specific steps to your favorite distros.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s our initial setup:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A pre-1.4 (it was version 1.2.3) SVN repository that needed to be upgraded &lt;em&gt;and&lt;&#x2F;em&gt; migrated to another server.&lt;&#x2F;li&gt;
&lt;li&gt;2 cleanly installed Ubuntu 6.06 &lt;acronym title=&quot;Long Term Support&quot;&gt;LTS&lt;&#x2F;acronym&gt; &lt;acronym title=&quot;Virtual Private Servers&quot;&gt;VPSs&lt;&#x2F;acronym&gt;, one of which is the intended target for the repository migration. The other would mirror the new 1.4.x repository (using svnsync).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3&gt;An un-installable Subversion 1.4.x?&lt;&#x2F;h3&gt;
&lt;p&gt;I wish I could have simply ran &lt;code&gt;sudo apt-get install subversion&lt;&#x2F;code&gt; and have Ubuntu pull down the latest 1.4.x .debs. Unfortunately, the version of Subversion in the Ubuntu apt-get repository is still 1.3.1 (which doesn&#x27;t have svnsync). If anyone knows a reliable way to install Subversion 1.4.x via apt-get, let me know! I looked around for a good edge sources.list but came back empty-handed.&lt;&#x2F;p&gt;
&lt;p&gt;I balk at installing stuff from source because I never did figure out how to easily clean out the stuff that gets installed. All thanks to this reluctance, I went digging around and found &lt;a href=&quot;http:&#x2F;&#x2F;asic-linux.com.mx&#x2F;~izto&#x2F;checkinstall&#x2F;&quot;&gt;checkinstall&lt;&#x2F;a&gt;. This thing is &lt;strong&gt;awesome&lt;&#x2F;strong&gt; - I wonder why I didn&#x27;t manage to find it earlier.&lt;&#x2F;p&gt;
&lt;p&gt;What &lt;code&gt;checkinstall&lt;&#x2F;code&gt; basically allows you to do is, instead of running the usual &lt;code&gt;make install&lt;&#x2F;code&gt; after the usual &lt;code&gt;configure&lt;&#x2F;code&gt; and &lt;code&gt;make&lt;&#x2F;code&gt; steps, it creates a Debian package (it also does RPMs and Slackware packages) for you that is easily un-installable with &lt;code&gt;dpkg&lt;&#x2F;code&gt;, and then proceeds to install the files just as it would have for any other deb.&lt;&#x2F;p&gt;
&lt;p&gt;On Ubuntu it&#x27;s really easy to install &lt;a href=&quot;http:&#x2F;&#x2F;asic-linux.com.mx&#x2F;~izto&#x2F;checkinstall&#x2F;&quot;&gt;checkinstall&lt;&#x2F;a&gt;, just:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install checkinstall&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now, you no longer should type &#x27;make install&#x27; - always use the &#x27;checkinstall&#x27; command instead:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
.&#x2F;configure
make
sudo checkinstall # instead of &quot;make install&quot;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;checkinstall&lt;&#x2F;code&gt; will ask you a bunch of stuff but you can just go with the defaults for most of them - I did name my packages &#x27;XXX &lt;strong&gt;from source&lt;&#x2F;strong&gt;&#x27;, like &#x27;Subversion 1.4.3 from source&#x27; so it&#x27;s easier to check which packages are &lt;code&gt;checkinstall&lt;&#x2F;code&gt;-generated with a simple grep to &lt;code&gt;dpkg -l&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;checkinstall&lt;&#x2F;code&gt; generates a .deb (Debian) package before it actually installs your software (Subversion, in this case). It should tell you right at the end of its installation process about where to find this .deb and how to uninstall your newly installed (from source!) package (something like &lt;code&gt;dpkg -r subversion-1.4.3&lt;&#x2F;code&gt;). Don&#x27;t delete this .deb yet as we will be using it to install Subversion 1.4.x on our mirror SVN server.&lt;&#x2F;p&gt;
&lt;h3&gt;Installing an un-installable Subversion 1.4.x on Ubuntu&lt;&#x2F;h3&gt;
&lt;p&gt;Now, blessed with our new checkinstall-granted powers, we can install Subversion from source without any qualms. Before we start, be sure to purge any existing Subversion packages you may have installed (do note that if you&#x27;re using any packages that depend on the official Ubuntu Subversion packages, you may run into library version problems).&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
dpkg -l | grep svn
dpkg -l | grep subversion
&lt;p&gt;sudo dpkg --purge subversion
sudo dpkg --purge libsvn0&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now, it&#x27;s time to get the source. Get it from the &lt;a href=&quot;http:&#x2F;&#x2F;subversion.tigris.org&#x2F;&quot;&gt;official Subversion website&lt;&#x2F;a&gt;. Look for the source code download - the file should be something like this: &lt;a href=&quot;http:&#x2F;&#x2F;subversion.tigris.org&#x2F;downloads&#x2F;subversion-1.4.3.tar.gz&quot;&gt;http:&#x2F;&#x2F;subversion.tigris.org&#x2F;downloads&#x2F;subversion-1.4.3.tar.gz&lt;&#x2F;a&gt;. Remember to get SVN dependencies (something like this: &lt;a href=&quot;http:&#x2F;&#x2F;subversion.tigris.org&#x2F;downloads&#x2F;subversion-deps-1.4.3.tar.gz&quot;&gt;http:&#x2F;&#x2F;subversion.tigris.org&#x2F;downloads&#x2F;subversion-deps-1.4.3.tar.gz&lt;&#x2F;a&gt;) as well as these are needed for access to &#x27;http:&#x2F;&#x2F;&#x27; scheme SVN repositories. If you want to use Subversion to connect to a server via a http:&#x2F;&#x2F; or https:&#x2F;&#x2F; URL, you will require these dependencies (more specifically, the Neon library).&lt;&#x2F;p&gt;
&lt;p&gt;Use something efficient like wget, curl or &lt;a href=&quot;http:&#x2F;&#x2F;wilmer.gaast.net&#x2F;main.php&#x2F;axel.html&quot;&gt;Axel&lt;&#x2F;a&gt; (&lt;em&gt;love&lt;&#x2F;em&gt; Axel) to get the sources on the server where you want to install Subversion. Unpack them to the same directory. configure. make. &lt;strong&gt;checkinstall&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
tar zxf subversion-1.4.3.tar.gz
tar zxf subversion-deps-1.4.3.tar.gz 
cd subversion-1.4.3
.&#x2F;configure  # Be sure to read the INSTALL file for any options you may want to set (such as SSL)
make
sudo checkinstall&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you get a warning &quot;configure: WARNING: we have configured without BDB filesystem support&quot; during your &lt;code&gt;configure&lt;&#x2F;code&gt; step, you&#x27;ll get by just fine. Unless you specifically want your Subversion repositories in Berkeley DB format, we can ignore the warning (Subversion will use FSFS filesystem for your repositories) - see &lt;a href=&quot;http:&#x2F;&#x2F;svn.collab.net&#x2F;repos&#x2F;svn&#x2F;trunk&#x2F;notes&#x2F;fsfs&quot;&gt;FSFS notes&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;svnbook.red-bean.com&#x2F;nightly&#x2F;en&#x2F;svn.reposadmin.planning.html#svn.reposadmin.basics.backends&quot;&gt;Choosing a Data Store&lt;&#x2F;a&gt; if you want to make an educated decision.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, now with a brand new Subversion 1.4.x installed, we are finally ready for the real work - migrating your Subversion repository!&lt;&#x2F;p&gt;
&lt;h3&gt;Dumping and importing a repository&lt;&#x2F;h3&gt;
&lt;p&gt;Dumping a Subversion repository is dead easy:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
svnadmin dump &#x2F;path&#x2F;to&#x2F;repository &gt; repository_name.dump&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Depending on how big your repository is, you could end up with a pretty large dump file. gzip it, then scp it over to your new server, then gunzip it. Use svnadmin to load the repository dump.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
cd &#x2F;var&#x2F;svn  # I like to keep my svn repositories under &#x2F;var&#x2F;svn
mkdir repository_name
svnadmin create repository_name
svnadmin load repository_name &amp;lt; &#x2F;path&#x2F;to&#x2F;repository_name.dump&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you have a good pipe between the source and destination servers, you can do this in a one-liner:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;svnadmin dump &#x2F;path&#x2F;to&#x2F;repository | ssh -C [IP&#x2F;domain of destination server] svnadmin load &#x2F;path&#x2F;to&#x2F;new_repository&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Of course, all this dumping would require a temporary suspension of any repository write actions otherwise you&#x27;re just going to have an inconsistent dump - just send out an email to your fellow developers and disable svn access.&lt;&#x2F;p&gt;
&lt;h3&gt;Setting up access to your new repository&lt;&#x2F;h3&gt;
&lt;p&gt;Now, you have a Subversion repository that is only accessible via the local filesystem (file:&#x2F;&#x2F; &#x27;protocol&#x27;), which isn&#x27;t very useful. We&#x27;ll need to setup remote access. Your Subversion repository can be accessed in a variety of ways, including:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;svnbook.red-bean.com&#x2F;nightly&#x2F;en&#x2F;svn.serverconfig.svnserve.html&quot;&gt;svnserve&lt;&#x2F;a&gt; standalone daemon (svn:&#x2F;&#x2F;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;svnbook.red-bean.com&#x2F;nightly&#x2F;en&#x2F;svn.serverconfig.svnserve.html&quot;&gt;svnserve&lt;&#x2F;a&gt; with &lt;code&gt;inetd&lt;&#x2F;code&gt; (svn:&#x2F;&#x2F;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;svnbook.red-bean.com&#x2F;nightly&#x2F;en&#x2F;svn.serverconfig.svnserve.html&quot;&gt;svnserve&lt;&#x2F;a&gt; over a SSH tunnel (svn+ssh:&#x2F;&#x2F;)&lt;&#x2F;li&gt;
&lt;li&gt;over the HTTP protocol (http:&#x2F;&#x2F; and https:&#x2F;&#x2F;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;svnbook.red-bean.com&#x2F;nightly&#x2F;en&#x2F;svn.serverconfig.svnserve.html&quot;&gt;svnserve documentation&lt;&#x2F;a&gt; details how to deal with the first 3, and setting up http:&#x2F;&#x2F; and https:&#x2F;&#x2F; access to your protocol is really a subject that deserves its own tutorial. Try the &lt;a href=&quot;http:&#x2F;&#x2F;svnbook.red-bean.com&#x2F;nightly&#x2F;en&#x2F;svn.serverconfig.httpd.html&quot;&gt;SVN book&lt;&#x2F;a&gt; or Google.&lt;&#x2F;p&gt;
&lt;p&gt;Personally I prefer svn+ssh:&#x2F;&#x2F; access for internal projects since it allows me to unify authentication for my Subversion repositories with UNIX user accounts. Be wary of an angry cadre Windows developers though, since they need to take quite a good number of steps to setup public key authentication and integrate it with their svn clients on Windows machines. Integration with TortoiseSVN is quite a pain, though my Windows-using colleague at work found these useful: &lt;a href=&quot;http:&#x2F;&#x2F;www.mono-project.com&#x2F;Putty_and_TortoiseSvn&quot;&gt;Putty and TortoiseSVN&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;brondsema.net&#x2F;blog&#x2F;index.php&#x2F;2005&#x2F;05&#x2F;03&#x2F;using_cygwin_keychain_svn_ssh_and_tortoi&quot;&gt;Using Cygwin, Keychain, SVN+SSH and TortoiseSVN in Windows&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h4&gt;svn:&#x2F;&#x2F; access&lt;&#x2F;h4&gt;
&lt;p&gt;I also expose my repositories via svn:&#x2F;&#x2F; (as we&#x27;ll see later, this is useful for allowing access to a svnsync user without messing around with any UNIX user accounts) and use the &lt;code&gt;xinetd&lt;&#x2F;code&gt; daemon (&lt;code&gt;apt-get install xinetd&lt;&#x2F;code&gt; on Ubuntu to install) to launch svnserve process. If you&#x27;re taking this path, create a file (I name it &#x27;svn&#x27;) in &lt;code&gt;&#x2F;etc&#x2F;xinet.d&lt;&#x2F;code&gt; to tell xinetd about svnserve.&lt;&#x2F;p&gt;
&lt;p&gt;In &#x2F;etc&#x2F;xinet.d&#x2F;svn:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
service svn
{
        port                    = 3690
        socket_type             = stream
        protocol                = tcp
        wait                    = no
        user                    = www-data
        server                  = &#x2F;usr&#x2F;local&#x2F;bin&#x2F;svnserve
        server_args             = -i -r &#x2F;var&#x2F;svn
}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Notice that I needed to use the full path to svnserve (do a &lt;code&gt;which svnserve&lt;&#x2F;code&gt; to get the full path, making sure this is the 1.4.x version that you just installed). The &lt;code&gt;server_args&lt;&#x2F;code&gt; parameter also bears some explanation. The &lt;code&gt;-i&lt;&#x2F;code&gt; option tells svnserve to use inetd (xinetd is a variant of inetd, sorta). The &lt;code&gt;-r &#x2F;var&#x2F;svn&lt;&#x2F;code&gt; option tells svnserve to only expose repositories below that path. This basically translates your repository at &lt;code&gt;&#x2F;var&#x2F;svn&#x2F;my_cool_project&lt;&#x2F;code&gt; to be accessible via &lt;code&gt;svn:&#x2F;&#x2F;your.hostname&#x2F;my_cool_project&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h4&gt;svn+ssh:&#x2F;&#x2F; access&lt;&#x2F;h4&gt;
&lt;p&gt;Accessing your repository this way basically logs in to the host server of your repository over SSH, invokes the svnserve process, and accesses your repository in a very file:&#x2F;&#x2F;-like manner. What this means is that your repository path is taken from the root of your filesystem. An example: a repository located in &lt;code&gt;&#x2F;var&#x2F;svn&#x2F;my_cool_project&lt;&#x2F;code&gt; would be available at &lt;code&gt;svn+ssh:&#x2F;&#x2F;your.hostname&#x2F;var&#x2F;svn&#x2F;my_cool_project&lt;&#x2F;code&gt;. For this reason I often symlink &lt;code&gt;&#x2F;svn&lt;&#x2F;code&gt; to &lt;code&gt;&#x2F;var&#x2F;svn&lt;&#x2F;code&gt; (to get repository URLs like &lt;code&gt;svn+ssh:&#x2F;&#x2F;your.hostname&#x2F;svn&#x2F;my_cool_project&lt;&#x2F;code&gt; instead).&lt;&#x2F;p&gt;
&lt;h3&gt;Relocating working copies&lt;&#x2F;h3&gt;
&lt;p&gt;Now, all your working copies are still pointing to the old Subversion server - no need to fret, a simple &lt;code&gt;svn switch&lt;&#x2F;code&gt; fixes things:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;svn switch --relocate [from] [to]&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Replace &#x27;[from]&#x27; and &#x27;[to]&#x27; with the source and destination Subversion repository URLs.&lt;&#x2F;p&gt;
&lt;p&gt;Remember to stop access to your old server so no one is making commits to the wrong place.&lt;&#x2F;p&gt;
&lt;h3&gt;Setting up svnsync&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;d intended to write this entire piece in one blog post, but I&#x27;m running out of steam at this point. In &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;03&#x2F;31&#x2F;setting-up-svnsync-ed-mirrored-svn-repositories-on-ubuntu-part-2-of-2&#x2F;&quot;&gt;Part 2&lt;&#x2F;a&gt;, we&#x27;ll actually setup svnsync for some repository mirroring goodness!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Checking for duplicate ActiveRecord objects</title>
    <published>2007-03-27T01:05:35+00:00</published>
    <updated>2007-03-27T01:05:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/27/checking-for-duplicate-activerecord-objects/"/>
    <id>https://chuyeow.wtf/2007/03/27/checking-for-duplicate-activerecord-objects/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/27/checking-for-duplicate-activerecord-objects/">&lt;p&gt;I&#x27;ve been writing a database importer plugin for a Rails application that needs to data on some &quot;legacy&quot; production databases (well, not really legacy, but the schema differs from ActiveRecord conventions) with the intention of scheduling a cron job to run the imports. Why not connect the Rails app to the legacy databases? Hmm, let&#x27;s see:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;the records don&#x27;t have to be up to date (so I can afford to, say, import yesterday&#x27;s records today),&lt;&#x2F;li&gt;
&lt;li&gt;less jumping through hoops molding ActiveRecord models to the legacy databases,&lt;&#x2F;li&gt;
&lt;li&gt;the production database schema is liable to change - but this should not affect my Rails application,&lt;&#x2F;li&gt;
&lt;li&gt;there will be lower loads on the legacy databases which are in full-blown production use, and&lt;&#x2F;li&gt;
&lt;li&gt;most importantly, it gives me an excuse to figure out writing a data importer for a Rails application.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;And I am surprised that it actually was rather fun writing the importer plugin (data importing stuff is normally one of the most unexciting things a programmer can do, right next to writing lengthy requirements documentation and any kind of contact sport). It&#x27;s basically a plugin that defines ActiveRecord models on the source (legacy) databases and then creates our Rails app&#x27;s models from these. Importer classes allow me to then run the imports using &lt;code&gt;script&#x2F;runner&lt;&#x2F;code&gt; like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
script&#x2F;runner &quot;HotelsImporter.import :start =&gt; 2.days.ago.to_date, :end =&gt; 1.day.ago.to_date&quot; -e production&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Put that in a cron job and there you go, scheduled daily (or hourly, whatever) imports.&lt;&#x2F;p&gt;
&lt;p&gt;But I digress. What was I actually going to talk about? Oh yes, checking for duplicate ActiveRecord objects. Now, the importers I wrote were run daily but there was the risk of re-importing the same data again (due to failed cron jobs, running the same job twice, acts of god, etc.). To be defensive, I needed to check that there were no existing records before importing them from the legacy databases.&lt;&#x2F;p&gt;
&lt;p&gt;At this point I could decide to run uniqueness checks on any natural keys of each table (and Rails makes this really easy with &lt;acronym title=&quot;ActiveRecord&quot;&gt;AR&lt;&#x2F;acronym&gt; validations, as we all know), or rely on a more convenient &quot;the whole hog&quot; field-by-field comparison. I settled on doing a field-by-field comparison after realizing that:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;it&#x27;s easier and I don&#x27;t have to specify which natural fields constitute the natural keys, and&lt;&#x2F;li&gt;
&lt;li&gt;there are some tables which don&#x27;t really have a natural keys (these generally belong to has_many side of an association).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;ins&gt;Update: As choonkeat pointed out in a comment below, I can simply use &lt;code&gt;Post.find(:all, :conditions =&gt; new_post.attributes)&lt;&#x2F;code&gt; since that stood out very clearly as the way to do it. This was actually the first way I tried to do this but it didn&#x27;t work in the importer - I must have been doing something stupid! Doh! Thanks choonkeat for pointing out my blooper. Anyway you can mostly ignore what follows below but I&#x27;ll keep it here to remind myself of my error.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So I went looking for an easy way or a Railism to check whether an existing new ActiveRecord object already exists in the database. Hmm, I couldn&#x27;t find anything helpful - I guess everyone is relying on AR validations. Still, I went ahead and mixed in a &lt;code&gt;to_conditions&lt;&#x2F;code&gt; instance method to ActiveRecord::Base - looks like my answer to everything nowadays is to re-open existing classes.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
module Bezurk #:nodoc:
  module ActiveRecord #:nodoc:
    module Extensions
      def to_conditions
        attributes.inject({}) do |hash, (name, value)|
          hash.merge(name.intern =&gt; value)
        end
      end
      alias :to_conditions_hash :to_conditions
    end
  end
end
&lt;h1 id=&quot;&quot;&gt;...&lt;&#x2F;h1&gt;
&lt;p&gt;ActiveRecord::Base.send(:include, Bezurk::ActiveRecord::Extensions)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So now in my importers I can easily check for potential duplicate entries:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
new_post.save! if Post.find(:all, :conditions =&gt; new_post.to_conditions).empty?&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now, I just have this nagging suspicion that there is a better way to do this...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>irb and script&#x2F;console tab-completion</title>
    <published>2007-03-26T20:33:00+00:00</published>
    <updated>2007-03-26T20:33:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/26/irb-and-scriptconsole-tab-completion/"/>
    <id>https://chuyeow.wtf/2007/03/26/irb-and-scriptconsole-tab-completion/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/26/irb-and-scriptconsole-tab-completion/">&lt;p&gt;Ugh, I wish I found this earlier: &lt;a href=&quot;http:&#x2F;&#x2F;whytheluckystiff.net&#x2F;clog&#x2F;ruby&#x2F;tabCompletionInIRb.html&quot;&gt;Tab Completion in IRb&lt;&#x2F;a&gt;. I only went googling for this after I realized I have been tabbing to get auto-completion on &lt;code&gt;script&#x2F;console&lt;&#x2F;code&gt; for a bit but it never sunk in that tab-completion wasn&#x27;t ever working. Useful stuff, go set it up if you haven&#x27;t already.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>DRYing up link_to_remote for degradable URLs</title>
    <published>2007-03-24T23:20:08+00:00</published>
    <updated>2007-03-24T23:20:08+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/24/drying-up-link_to_remote-for-degradable-urls/"/>
    <id>https://chuyeow.wtf/2007/03/24/drying-up-link_to_remote-for-degradable-urls/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/24/drying-up-link_to_remote-for-degradable-urls/">&lt;p&gt;I like to keep my links in my Rails applications that make AJAX requests degradable in non-JavaScript browsers so I often find myself doing this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
link_to_remote &#x27;Show details&#x27;,
  { :url =&gt; { :action =&gt; &#x27;show&#x27;, :id =&gt; post.id } },
  { :href =&gt; url_for({ :action =&gt; &#x27;show&#x27;, :id =&gt; post.id }) }&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This allows me to get HTML links like so:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
&amp;lt;a href=&quot;http:&#x2F;&#x2F;www.example.com&#x2F;posts&#x2F;show&#x2F;123&quot; onclick=&quot;...&quot;&amp;gt;Show details&amp;lt;&#x2F;a&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;instead of the usual (if the :href parameter is not specified):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
&amp;lt;a href=&quot;#&quot; onclick=&quot;...&quot;&amp;gt;Show details&amp;lt;&#x2F;a&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You&#x27;ve probably already noticed the duplication right there in the &lt;code&gt;:url&lt;&#x2F;code&gt; key of the 2nd parameter (options) and the &lt;code&gt;:href&lt;&#x2F;code&gt; key of the 3rd parameter (HTML options) that litters my &lt;acronym title=&quot;embedded Ruby&quot;&gt;Erb&lt;&#x2F;acronym&gt; templates where link_to_remote calls are prevalent. I got tired of editing and copying and pasting the &lt;code&gt;url_for&lt;&#x2F;code&gt; parameters so I monkey patched Rails&#x27; PrototypeHelper class in ActionPack (&lt;code&gt;actionpack&#x2F;lib&#x2F;action_view&#x2F;helpers&#x2F;prototype_helper.rb&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;To do this, I had to replace Rails&#x27; &lt;code&gt;link_to_remote&lt;&#x2F;code&gt; method definition. Thanks to living and breathing code examples in Rails that do this, I was able to promptly come up with this module that I placed into the &lt;code&gt;lib&#x2F;&lt;&#x2F;code&gt; directory of my Rails application and &lt;code&gt;require&lt;&#x2F;code&gt; it in my &lt;code&gt;environment.rb&lt;&#x2F;code&gt; file.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
module Bezurk #:nodoc:
  module ActionView #:nodoc:
    module PrototypeHelperExtensions
      def self.included(base)
        base.alias_method_chain :link_to_remote, :degradation
      end
&lt;pre&gt;&lt;code&gt;  def link_to_remote_with_degradation(name, options = {}, html_options = {})
    html_options[:href] = url_for(options[:url]) if !html_options.has_key?(:href)
    link_to_remote_without_degradation(name, options, html_options)
  end
end
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;end
end&lt;&#x2F;p&gt;
&lt;p&gt;ActionView::Helpers::PrototypeHelper.send(:include,
Bezurk::ActionView::PrototypeHelperExtensions)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The modification to &lt;code&gt;link_to_remote&lt;&#x2F;code&gt; itself is dead simple: it checks for the non-existence of a &lt;code&gt;:href&lt;&#x2F;code&gt; key in the &lt;code&gt;html_options&lt;&#x2F;code&gt; parameter and sets the &lt;code&gt;:href&lt;&#x2F;code&gt; option in the &lt;code&gt;html_options&lt;&#x2F;code&gt; parameter hash to the &lt;code&gt;url_for&lt;&#x2F;code&gt; the &lt;code&gt;:url&lt;&#x2F;code&gt; value in the &lt;code&gt;options&lt;&#x2F;code&gt; parameter hash. It then calls the original &lt;code&gt;link_to_remote&lt;&#x2F;code&gt; to do what it does best.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve submitted a (trivially simple) patch to Rails in my opened &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;ticket&#x2F;7904&quot;&gt;ticket #7904 - DRY up link_to_remote for degradable URLs&lt;&#x2F;a&gt;. Let&#x27;s hope this makes it in so I can kill my monkey patch!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>A Singapore MRT WTF</title>
    <published>2007-03-16T10:28:02+00:00</published>
    <updated>2007-03-16T10:28:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/16/a-singapore-mrt-wtf/"/>
    <id>https://chuyeow.wtf/2007/03/16/a-singapore-mrt-wtf/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/16/a-singapore-mrt-wtf/">&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mass_Rapid_Transit_(Singapore)&quot;&gt;Singapore MRT&lt;&#x2F;a&gt; has to be one of the best public rail transport systems in the world (I fancy the Tokyo train&#x2F;subway system as well - the fare adjustment machine is one of those &quot;since sliced bread&quot; ideas), but they still have room to screw up in a &lt;a href=&quot;http:&#x2F;&#x2F;thedailywtf.com&#x2F;&quot;&gt;Daily WTF&lt;&#x2F;a&gt;-worthy way.&lt;&#x2F;p&gt;
&lt;p&gt;This sign at Raffles Place MRT used to show train arrival times:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;mrt-rebooting.png&quot; alt=&quot;MRT signboard rebooting&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s been there for about 3 days, was still there when I checked this morning.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Validate that favicon</title>
    <published>2007-03-10T13:50:55+00:00</published>
    <updated>2007-03-10T13:50:55+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/10/validate-that-favicon/"/>
    <id>https://chuyeow.wtf/2007/03/10/validate-that-favicon/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/10/validate-that-favicon/">&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;www.html-kit.com&#x2F;favicon&#x2F;validator&#x2F;&quot;&gt;Favicon validator&lt;&#x2F;a&gt; ensures that you have a correctly created &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Favicon&quot;&gt;favicon&lt;&#x2F;a&gt;. If you&#x27;re wondering why your favicon works in some browsers but not in others (like IE), it probably has an incorrect format.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;favicon-validator.png&quot; alt=&quot;Favicon validator results&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I also learnt from validating my favicons that you can actually place more than 1 version of the favicon image into the .ico file (it seems to be a container for these images rather than being an image itself).&lt;&#x2F;p&gt;
&lt;p&gt;Oh, and the same site also has a very handy &lt;a href=&quot;http:&#x2F;&#x2F;www.html-kit.com&#x2F;favicon&#x2F;&quot;&gt;Favicon generator&lt;&#x2F;a&gt; - I used this to fix some of my favicons, which used to be GIFs renamed with the .ico file extension. Very handy. &lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox tips sharing session at WebSG meetup</title>
    <published>2007-03-03T03:07:20+00:00</published>
    <updated>2007-03-03T03:07:20+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/03/firefox-tips-sharing-session-at-websg-meetup/"/>
    <id>https://chuyeow.wtf/2007/03/03/firefox-tips-sharing-session-at-websg-meetup/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/03/firefox-tips-sharing-session-at-websg-meetup/">&lt;p&gt;&lt;ins&gt;&lt;a href=&quot;http:&#x2F;&#x2F;theory.isthereason.com&#x2F;&quot;&gt;Kevin&lt;&#x2F;a&gt; has uploaded a &lt;a href=&quot;http:&#x2F;&#x2F;video.google.com&#x2F;videoplay?docid=-1204328739390477176&quot;&gt;video of my session&lt;&#x2F;a&gt; on Google Video - it&#x27;s kinda grainy and really soft.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I was at the 2nd &lt;a href=&quot;http:&#x2F;&#x2F;websg.org&#x2F;&quot;&gt;WebSG&lt;&#x2F;a&gt; (Web Standards Group Singapore) meetup (&lt;a href=&quot;http:&#x2F;&#x2F;websg.org&#x2F;archives&#x2F;2007&#x2F;03&#x2F;recap_of_meetup_2.php&quot;&gt;read about the recap of the meetup&lt;&#x2F;a&gt;) on Wednesday (28 Feb 2007) where I hosted a short session on some Firefox tips. It&#x27;s all thanks the urgings and encouragement of &lt;a href=&quot;http:&#x2F;&#x2F;tribolum.com&#x2F;&quot;&gt;Lucian&lt;&#x2F;a&gt; (the organizer) that I finally got down to publicly sharing my Firefox knowledge ever since I wrote &lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&#x2F;books&#x2F;firefox1&#x2F;&quot;&gt;Firefox Secrets&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;me-websg-meetup-2_thumb.png&quot; alt=&quot;Me at WebSG meetup 2&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I was asked to blog about this (since I didn&#x27;t have any presentation slides), so here it is, for those of you who missed anything in my mumbling or frantic keystrokes.&lt;&#x2F;p&gt;
&lt;h3&gt;Keyboard shortcuts you should know&lt;&#x2F;h3&gt;
&lt;p&gt;Note: Mac users should replace Ctrl with the Cmd key for any of the keystrokes listed below.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ctrl-L&lt;&#x2F;strong&gt; puts your cursor in the address bar, &lt;strong&gt;Ctrl-K&lt;&#x2F;strong&gt; puts your cursor in the search bar.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ctrl-T&lt;&#x2F;strong&gt; opens a new tab and puts your cursor in the address bar, but&lt;&#x2F;li&gt;
&lt;li&gt;I forgot to mention this during the session, but I personally prefer using Ctrl-L or Ctrl-K, typing in the new URL or search query, and hitting &lt;strong&gt;Alt-Enter&lt;&#x2F;strong&gt; open the new page or search result in a new tab - it just feels more accessible than Ctrl-T. Most people I observe still use Ctrl-T though.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ctrl-Shift-T&lt;&#x2F;strong&gt; re-opens closed tabs. Keep hitting it to reopen more closed tabs in your history. This is a &lt;em&gt;big&lt;&#x2F;em&gt; time saver. Newly built into Firefox 2.0.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ctrl-Tab&lt;&#x2F;strong&gt; and &lt;strong&gt;Ctrl-Shift-Tab&lt;&#x2F;strong&gt; brings you to the next and previous tab. If you&#x27;re having trouble remembering both, just remember that the usual convention is a Shift does the reverse. So all you need is to remember Ctrl-Tab, and adding a Shift modifier does the reverse (i.e. goes to the previous tab instead of the next).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ctrl-F&lt;&#x2F;strong&gt; brings up the Find bar, and you can start typing in whatever you want to find on the page &lt;em&gt;and&lt;&#x2F;em&gt; in any input fields. Use &lt;strong&gt;Ctrl-G&lt;&#x2F;strong&gt; and &lt;strong&gt;Ctrl-Shift-G&lt;&#x2F;strong&gt; to go to the next and previous occurences respectively. The Find bar is good, but...&lt;&#x2F;li&gt;
&lt;li&gt;I forgot to mention (as &lt;a href=&quot;http:&#x2F;&#x2F;www.daemonite.net&#x2F;&quot;&gt;Zul&lt;&#x2F;a&gt; mentioned to me after) during the session that &lt;strong&gt;Quick Find&lt;&#x2F;strong&gt; is much better. Just hit &lt;strong&gt;&#x2F;&lt;&#x2F;strong&gt; and start typing as you would for the normal Find bar, and the Quick Find bar will go away after several seconds. Much better in most cases than the Find bar which likes to stick around until you close it. And why is this important? Because the Find bar takes up screen real estate, especially for those of us using wide screens.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3&gt;Getting rid of the close button on all tabs&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ve been told how annoying Firefox 2.0 is when it insists on putting a close button on each tab.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-close-buttons-on-each-tab.png&quot; alt=&quot;Firefox 2.0 - close buttons on each tab&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Accidental closing of tabs when you try to select them is one big complaint. Well, you can turn it off and go back to the good olde Firefox 1.5 days of a single close button on the extreme right of the tab bar. Enter &lt;strong&gt;about:config&lt;&#x2F;strong&gt; in your address bar, filter for &lt;strong&gt;browser.tabs.closeButtons&lt;&#x2F;strong&gt;, double click on the preference entry that shows up, and change the value from the default of 1, to 3. If you don&#x27;t want the close button on the right of the tab bar, enter a value of 2 (this assumes you&#x27;re going to close tabs with either Ctrl-W or middle-clicking on the tab - this is my prefered setup).&lt;&#x2F;p&gt;
&lt;h3&gt;Backing up your profile&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;mozbackup.jasnapaka.com&#x2F;&quot;&gt;MozBackup&lt;&#x2F;a&gt; is all you ever need if you use Windows exclusively. This neat little (Windows-only) application backs up your profile into a single file - all you need is to use a very simple wizard. And of course, you can restore your profile just as easily. I loved this when I was still using Windows.&lt;&#x2F;p&gt;
&lt;p&gt;Like I said, people using other operating systems can easily DIY - just read &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;support&#x2F;firefox&#x2F;profile&quot;&gt;Mozilla&#x27;s official documentation on Firefox profiles&lt;&#x2F;a&gt;. You&#x27;re probably using either Mac OS X or some Linux distro - you can do this without any hand-holding ;)&lt;&#x2F;p&gt;
&lt;h4&gt;What about backing up extensions?&lt;&#x2F;h4&gt;
&lt;p&gt;Some people asked me during and after my session about backing up extensions. &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;firefox&#x2F;2109&#x2F;&quot;&gt;FEBE&lt;&#x2F;a&gt; is one extension you can look at unless you use a Mac (I tried the beta version that supports Mac OS X, but gave up when I couldn&#x27;t get it to use the correct binaries for zipping and unzipping.)&lt;&#x2F;p&gt;
&lt;p&gt;My personal take on backing up extensions: &lt;em&gt;don&#x27;t&lt;&#x2F;em&gt; back them up. I prefer to dump a list of extensions (I use &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;firefox&#x2F;3746&#x2F;&quot;&gt;the Extension List Dumper extension&lt;&#x2F;a&gt;) that I have installed and just re-install them again. This is no big chore for me now since I have significantly fewer extensions installed than back in the day. I just like starting clean, after having had bad experiences with restoring extensions from backup before.&lt;&#x2F;p&gt;
&lt;p&gt;Still, if you really want to back up your extensions, I say just go ahead and see if it works (MozBackup and FEBE should work).&lt;&#x2F;p&gt;
&lt;h3&gt;Profiles and &quot;why is my Firefox so damn slow?&quot;&lt;&#x2F;h3&gt;
&lt;p&gt;This is one thing I had planned to mention but I got kinda threw off kilter when the slowness of the wireless internet connection made me worried about quitting Firefox (didn&#x27;t want to quit Firefox, load up another profile, only to find that it&#x27;d take another 5 mins to get my demo tabs loaded again).&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, some questions I often get is, &quot;why is my Firefox so slow?&quot; and &quot;why does Firefox use up so much RAM&#x2F;CPU?&quot; The first thing I suspect is a busted profile. Whenever I experience intolerable slowness in my Firefox setup, I dump and restore my profile into a newly created profile, minus all the tab history information (and of course, never restoring backed up extensions). Sometimes I even start clean new profiles, importing only bookmarks. You&#x27;ll very likely notice immediately that Firefox is back to its old speediness. And if anything happens, you still have your old profile with you.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not that certain of what exactly causes Firefox to get too slow over time, but my suspicions lie with:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Firefox saving browsing history in all the bazillion tabs you have open - that&#x27;s a lot of data to be carrying around&lt;&#x2F;li&gt;
&lt;li&gt;broken&#x2F;bad extensions&lt;&#x2F;li&gt;
&lt;li&gt;a busted profile
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;profile-manager&quot;&gt;Profile management for productivity&lt;&#x2F;h3&gt;
&lt;p&gt;Firefox hides its Profile Manager from you. You can access it by passing the &lt;strong&gt;-profilemanager&lt;&#x2F;strong&gt; switch to your Firefox executable. For Windows users, it&#x27;s actually &lt;strong&gt;--profilemanager&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-profile-manager.png&quot; alt=&quot;Firefox profile manager&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The Profile Manager is really handy for people who need to remove distractions. For me, I setup different profiles for work and for play so I don&#x27;t become distracted the &quot;play&quot; tabs I have open while I&#x27;m working (I&#x27;m beginning to like the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;03&#x2F;02&#x2F;tab-groups-for-firefox-best-extension-since-sliced-bread-er-tabbed-browsing&#x2F;&quot;&gt;Tab Groups extension for segregating tabs&lt;&#x2F;a&gt; more though). Also really handy for setting up clean profiles for running user demos (I setup a WebSG profile for my presentation and installed specific extensions I wanted to talk about) - don&#x27;t really want to have your naughty browser history showing up in some autocomplete heh.&lt;&#x2F;p&gt;
&lt;h3&gt;Some extensions I dig&lt;&#x2F;h3&gt;
&lt;p&gt;I also demoed some extensions that I find essential.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;firefox&#x2F;26&#x2F;&quot;&gt;Download Statusbar&lt;&#x2F;a&gt; for unobtrusive downloads.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;firefox&#x2F;12&#x2F;&quot;&gt;All-in-One Gestures&lt;&#x2F;a&gt; for easily accessible Back and Forward gestures when you happen to have your hand on the mouse. Like I said, I don&#x27;t use any of the other gestures because they all require memorization (I use too much of my memory storing keyboard shortcuts).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;mozilla.code65536.com&#x2F;&quot;&gt;Super DragAndGo&lt;&#x2F;a&gt; for drag and drop searching. Great time saver when you are doing online research.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;chrispederick.com&#x2F;work&#x2F;webdeveloper&#x2F;&quot;&gt;Web Developer toolbar&lt;&#x2F;a&gt; for its convenient Disable Cache, browser resizing, and HTML validation shortcut (Ctrl-Shift-A).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;addons.mozilla.org&#x2F;firefox&#x2F;1290&#x2F;&quot;&gt;UrlParams&lt;&#x2F;a&gt; for easy viewing and editing of GET or POST parameters.&lt;&#x2F;li&gt;
&lt;li&gt;And of course, &lt;a href=&quot;http:&#x2F;&#x2F;getfirebug.com&#x2F;&quot;&gt;Firebug&lt;&#x2F;a&gt; - godsend for web developers, web designers, and especially AJAX developers like &lt;a href=&quot;http:&#x2F;&#x2F;www.bezurk.com&#x2F;&quot;&gt;us&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Oh, and &lt;a href=&quot;http:&#x2F;&#x2F;boinx.com&#x2F;mousepose&#x2F;&quot;&gt;Mousepose&lt;&#x2F;a&gt; was the application I used to get my keystrokes to show up on the screen. It&#x27;s simple yet extremely helpful for presentations, though I probably should have used the mouse spotlight feature more. Oh well, I did just buy the license for it a few hours before the meetup - goes to show how unprepared I was heh.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s late and I&#x27;ll blog more on the event and the people I met another day.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Tab Groups for Firefox: best extension since sliced bread... er, tabbed browsing</title>
    <published>2007-03-02T02:00:09+00:00</published>
    <updated>2007-03-02T02:00:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/02/tab-groups-for-firefox-best-extension-since-sliced-bread-er-tabbed-browsing/"/>
    <id>https://chuyeow.wtf/2007/03/02/tab-groups-for-firefox-best-extension-since-sliced-bread-er-tabbed-browsing/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/02/tab-groups-for-firefox-best-extension-since-sliced-bread-er-tabbed-browsing/">&lt;p&gt;I saw a &lt;a href=&quot;http:&#x2F;&#x2F;lifehacker.com&#x2F;software&#x2F;organization&#x2F;download-of-the-day-tab-groups-firefox-240094.php&quot;&gt;Lifehacker blog post&lt;&#x2F;a&gt; today in my RSS reader on &lt;a href=&quot;http:&#x2F;&#x2F;paranoid-androids.com&#x2F;tabgroups&#x2F;&quot;&gt;this Firefox extension&lt;&#x2F;a&gt;, took one look at the screenshot, and went &quot;&lt;em&gt;Woooooow, give me some of that&lt;&#x2F;em&gt;&quot;. Aforementioned Firefox extension: &lt;a href=&quot;http:&#x2F;&#x2F;paranoid-androids.com&#x2F;tabgroups&#x2F;&quot;&gt;Tab Groups extension for Firefox&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;As its name suggests, it allows you to group your tabs in, er, groups. Forget the verbiage, just look at the screenshot:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;tab-groups-in-action.png&quot; alt=&quot;Tab Groups extension in action&quot; width=&quot;350&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This extension is a godsend for those of us who usually have a bazillion tabs open in Firefox (personally I keep it under a bazillion tabs so all those tabs don&#x27;t slow Firefox down - I usually start killing tabs once I hit 30). By allowing you to group your tabs into logical groups, such as one group for work, one for play, and one for your many Gmail accounts, it brings some order to the &quot;tab hell&quot;, which usually happens when you have to scroll or Ctrl&#x2F;Cmd-Tab through more than 20 tabs to find the tab you want. Some people may use an Expose-style extension to show thumbnails of all their tabs at once, &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;firefox&#x2F;1810&#x2F;&quot;&gt;Showcase&lt;&#x2F;a&gt; is one example - those are quite nifty as well though I&#x27;ve always found them to be unmanageably slow when there are too many tabs, which kinda defeats the purpose.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, coming back to Tab Groups extension... This is an extension that&#x27;s going to be absolutely necessary for those of us who like having many tabs open at once. For those of you who are less tab-crazy, or even, god forbid, surf in single tab mode, I&#x27;d expect you&#x27;d be much less excited about Tab Groups.&lt;&#x2F;p&gt;
&lt;p&gt;Tab Groups is pretty much early release software (the author considers it pre-alpha), but it&#x27;s very much already usable at this stage. You can create groups, rename them, and start dragging tabs into whichever tab group they belong. There are several features that are missing but almost definitely planned for future releases. For one thing, you can&#x27;t move tab groups around, but I&#x27;m sure that&#x27;ll be baked in soon enough. Also, the tab selector (the dropdown list of tabs thingie on the extreme right of your tab bar) stops working if tab is in another group. Another thing is the Ctrl&#x2F;Cmd-Shift-T to reopen closed tabs currently reopens tabs in a new tab group. All small inconveniences (that would be soon be removed once Tab Group history gets baked in) for a &lt;em&gt;very&lt;&#x2F;em&gt; nice extension.&lt;&#x2F;p&gt;
&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;lifehacker.com&#x2F;software&#x2F;organization&#x2F;download-of-the-day-tab-groups-firefox-240094.php&quot;&gt;Lifehacker&lt;&#x2F;a&gt; via &lt;a href=&quot;http:&#x2F;&#x2F;tech.cybernetnews.com&#x2F;2007&#x2F;02&#x2F;26&#x2F;firefox-tab-groups-like-folders-for-your-tabs&#x2F;&quot;&gt;CyberNet News&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Running two Firefox profiles simultaneously</title>
    <published>2007-03-01T19:41:28+00:00</published>
    <updated>2007-03-01T19:41:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/03/01/running-two-firefox-profiles-simultaneously/"/>
    <id>https://chuyeow.wtf/2007/03/01/running-two-firefox-profiles-simultaneously/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/03/01/running-two-firefox-profiles-simultaneously/">&lt;p&gt;At &lt;a href=&quot;http:&#x2F;&#x2F;websg.org&#x2F;archives&#x2F;2007&#x2F;03&#x2F;recap_of_meetup_2.php&quot;&gt;yesterday&#x27;s WebSG meetup&lt;&#x2F;a&gt;, someone asked me how you can have 2 different user sessions in Firefox, and I was unable to answer as I never had the need for 2 different user sessions (though I imagine it&#x27;d be nice for testing certain types of interactive web applications).&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I found the answer today after some Googling - &lt;a href=&quot;http:&#x2F;&#x2F;lifehacker.com&#x2F;software&#x2F;firefox&#x2F;geek-to-live--manage-multiple-firefox-profiles-231646.php&quot;&gt;Lifehacker&#x27;s &quot;Manage multiple Firefox profiles&quot; article&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Basically, once you have started Firefox in a profile that you want, you can start another profile by passing the &#x27;-no-remote&#x27; switch together with the name of the profile you want to start with the &#x27;-P&#x27; switch:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;&#x2F;path&#x2F;to&#x2F;firefox -P profile_name -no-remote&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It does mean you need 2 different profiles though, for the 2 different user sessions. Oh well.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Debugging SSH public key authentication problems</title>
    <published>2007-02-28T02:51:25+00:00</published>
    <updated>2007-02-28T02:51:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/02/28/debugging-ssh-public-key-authentication-problems/"/>
    <id>https://chuyeow.wtf/2007/02/28/debugging-ssh-public-key-authentication-problems/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/02/28/debugging-ssh-public-key-authentication-problems/">&lt;p&gt;After a longer than desired struggle with getting sshd to accept my public key, I think a blog post is in order to remind myself not to repeat the same mistakes. Here&#x27;s how you should go about debugging your SSH public key authentication woes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Getting more debug info when connecting with your ssh client&lt;&#x2F;strong&gt;: Add a &#x27;-v&#x27; option to your ssh command (e.g. ssh chuyeow@remotehost -v -v -v). Add more &#x27;-v&#x27; for more detailed debug (you can do up to &#x27;-v -v -v&#x27; I think).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Debugging on the remote host by running sshd in debug mode&lt;&#x2F;strong&gt;: Run &#x27;&#x2F;usr&#x2F;sbin&#x2F;sshd -d -p 2222&#x27; on the remote host and connect to it. &#x27;2222&#x27; here is the port number of the sshd process you started on the remote host.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;tail the authentication log&lt;&#x2F;strong&gt;: Run &#x27;tail -f &#x2F;var&#x2F;log&#x2F;auth.log&#x27; on the remotehost. You can watch the log as you try to connect via SSH with your key.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Make sure your ssh key agent is running&lt;&#x2F;strong&gt;: Do a &#x27;ps aux|grep ssh-agent&#x27;. Make sure your key agent is running. If you&#x27;re not using ssh-agent (I like keychain from Gentoo, or SSHKeyChain for Mac OS X), do whatever you have to do to ensure that your keychain is running.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Make sure your private key is added to the ssh key agent&lt;&#x2F;strong&gt;: Do a &#x27;ssh-add -l&#x27; to check that ssh-agent has your key. Likewise, if you are using something else, check your keychain application has your private key.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Check the permissions on your home directory, .ssh directory, and the authorized_keys file&lt;&#x2F;strong&gt;: If your ssh server is running with &#x27;StrictModes on&#x27;, it will refuse to use your public keys in the ~&#x2F;.ssh&#x2F;authorized_keys file. Your home directory should be writable only by you, ~&#x2F;.ssh should be 700, and authorized_keys should be 600.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Tailing the authentication log was the clincher for me this time - my problem was the group permissions on the home folder were incorrectly set (the error message I got from auth.log was: &#x27;Authentication refused: bad ownership or modes for directory &#x2F;home&#x2F;chuyeow&#x27;). Just had to fix it so it was no longer group-writable. Of course, this can also be fixed by turning setting &#x27;StrictModes off&#x27; in your sshd config (&#x2F;etc&#x2F;ssh&#x2F;sshd_config), but it&#x27;s not really recommended. Plus, you may not always have the rights to edit that file anyway.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>IMAP-IDLE plugin for Apple Mail</title>
    <published>2007-02-25T02:08:40+00:00</published>
    <updated>2007-02-25T02:08:40+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/02/25/imap-idle-plugin-for-apple-mail/"/>
    <id>https://chuyeow.wtf/2007/02/25/imap-idle-plugin-for-apple-mail/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/02/25/imap-idle-plugin-for-apple-mail/">&lt;p&gt;Yup I switched to Apple Mail from Thunderbird a few months back, primary reason being back then I was barely able to run my developer applications on 512MB of RAM (Apple Mail runs lighter than Thunderbird, unfortunately). It&#x27;s comforting to find that there is an &lt;a href=&quot;http:&#x2F;&#x2F;www.rothwell.us&#x2F;imapidle&#x2F;index.html&quot;&gt;IMAP-IDLE plugin for Apple Mail&lt;&#x2F;a&gt; (&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;03&#x2F;14&#x2F;junk-filter-improvements-in-thunderbird-weekly-build-new-win32-installer&#x2F;&quot;&gt;Thunderbird got its IDLE support way back in 2004&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s IDLE? Well, quoting myself:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Simply put, IDLE is a command that allows IMAP email servers to transmit updates to the client in real time. This saves the client from having to continuously poll the server to achieve the effect of new mail appearing immediately. All in all, an exceptionally useful command that saves Thunderbird the work of polling IMAP servers continuously.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;So anyway, it&#x27;s really simple to install and use (just simple checkboxes for enabling IDLE for your IMAP accounts).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;imap-idle-plugin-pref-pane.png&quot; alt=&quot;Preference pane for Apple Mail IMAP-IDLE plugin&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Remember to configure Mail to stop polling these mail accounts every X minutes or so now. Enjoy the geeky feeling of knowing you&#x27;ve just saved several CPU cycles and a few kilobytes of bandwidth.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Finally, Bezurk and news.com.au co-brand is up and running</title>
    <published>2007-02-25T01:01:18+00:00</published>
    <updated>2007-02-25T01:01:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/02/25/finally-bezurk-and-newscomau-co-brand-is-up-and-running/"/>
    <id>https://chuyeow.wtf/2007/02/25/finally-bezurk-and-newscomau-co-brand-is-up-and-running/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/02/25/finally-bezurk-and-newscomau-co-brand-is-up-and-running/">&lt;p&gt;It was a few weeks later than planned, but finally (actually, about 3 days ago), &lt;a href=&quot;http:&#x2F;&#x2F;www.bezurk.com&#x2F;&quot;&gt;we&lt;&#x2F;a&gt;&#x27;re up on the &lt;a href=&quot;http:&#x2F;&#x2F;www.news.com.au&#x2F;travel&quot;&gt;News.com.au Travel section&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;No thanks to a &lt;a href=&quot;http:&#x2F;&#x2F;meyerweb.com&#x2F;eric&#x2F;thoughts&#x2F;2004&#x2F;09&#x2F;16&#x2F;when-browsers-attack&#x2F;&quot;&gt;CSS bug in IE6&lt;&#x2F;a&gt;, we were delayed by a week. The last thing we expected was a CSS bug hanging IE6 with all the JavaScript we were pushing out, but yeah, well, it was. At least now my conscience is clear - everything works nicely in IE6, IE7, Firefox, Safari and Opera.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Sharing a USB printer from Mac OS X to Windows</title>
    <published>2007-02-05T20:47:08+00:00</published>
    <updated>2007-02-05T20:47:08+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/02/05/sharing-a-usb-printer-from-mac-os-x-to-windows/"/>
    <id>https://chuyeow.wtf/2007/02/05/sharing-a-usb-printer-from-mac-os-x-to-windows/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/02/05/sharing-a-usb-printer-from-mac-os-x-to-windows/">&lt;p&gt;Not too long ago I was asked to use hook up the Mac Mini that was collecting dust in our office to our HP Deskjet printer (HP Deskjet 1280 to be exact) and have it function as a &quot;print server&quot; of sorts (we have since replaced it with a &lt;acronym title=&quot;Network Attached Storage&quot;&gt;NAS&lt;&#x2F;acronym&gt; with print server functionality, which subsequently broke - that&#x27;s how long this post has been sitting in my drafts folder). While setting it up to be shared with Mac machines was a cinch (we have a grand total of 3 Mac machines in the office, including the Mac Mini and my treasured MacBook Pro), sharing the printer from the Mac (Mini) to Windows machines was significantly more difficult. After some trial and error, first with what made the most sense, and then with stuff I could glean off the Internet, I finally arrived at something that works. Maybe this would be useful for the next unfortunate bloke that needs to do this sharing of printers from Mac to Windows machines without a print server.&lt;&#x2F;p&gt;
&lt;p&gt;First point of reference: &lt;a href=&quot;http:&#x2F;&#x2F;www.macosxhints.com&#x2F;article.php?story=20040208122655345&quot;&gt;Print from Windows XP to a shared Mac printer tip on Mac OS X Hints&lt;&#x2F;a&gt;. The tip suggests you select a PostScript driver in Windows after finding it on the network (which requires you to do several things first, but we will come to that later). This worked, but it was &lt;strong&gt;sub-optimal&lt;&#x2F;strong&gt; because you couldn&#x27;t use the printer driver software to do stuff like 2-up printing (i.e. print 2 pages per side per sheet). This post will show you how to share a USB printer from Mac OS X to Windows PCs with &lt;strong&gt;full driver capability&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;On the Mac (the one that the USB printer that you want to share is connected to), go to the Sharing preferences pane and ensure &lt;strong&gt;Printer Sharing&lt;&#x2F;strong&gt; and &lt;strong&gt;Windows Sharing&lt;&#x2F;strong&gt; are both turned on.&lt;&#x2F;li&gt;
&lt;li&gt;Fire up your browser and go to &lt;a href=&quot;http:&#x2F;&#x2F;127.0.0.1:631&quot;&gt;http:&#x2F;&#x2F;127.0.0.1:631&lt;&#x2F;a&gt; - this is the web interface to &lt;a href=&quot;http:&#x2F;&#x2F;www.cups.org&#x2F;&quot;&gt;&lt;acronym title=&quot;Common UNIX Printing System&quot;&gt;CUPS&lt;&#x2F;acronym&gt;&lt;&#x2F;a&gt;. When asked to enter a password, login with your Mac OS X user account (it has to be an administrator account).&lt;&#x2F;li&gt;
&lt;li&gt;Go to the Printers tab and &lt;strong&gt;add a new printer&lt;&#x2F;strong&gt; (yes, &lt;em&gt;in addition&lt;&#x2F;em&gt; to any existing printer configuration that already exist for the same printer). Choose a name that&#x27;s short and descriptive (no spaces). For the purposes of this guide, let&#x27;s call it &#x27;uberprinter&#x27;. Best to keep it under 12 characters since Windows is finicky.&lt;&#x2F;li&gt;
&lt;li&gt;When asked to select a device, select &lt;strong&gt;USB printer&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;You&#x27;ll be asked for a Device URI. To find out, open up a terminal and type &lt;code&gt;lpinfo -v&lt;&#x2F;code&gt;. You should see your USB printer coming up. Mine came up as &#x27;direct usb:&#x2F;&#x2F;HP&#x2F;Deskjet%201280?serial=CN516851RPUN&#x27;. Copy and paste this (&lt;strong&gt;without the &#x27;direct&#x27; part&lt;&#x2F;strong&gt; - i.e., I&#x27;d have copied &#x27;usb:&#x2F;&#x2F;HP&#x2F;Deskjet%201280?serial=CN516851RPUN&#x27;) into the &#x27;Device URI&#x27; field.&lt;&#x2F;li&gt;
&lt;li&gt;Select a &#x27;Make&#x27; of &#x27;&lt;strong&gt;Raw&lt;&#x2F;strong&gt;&#x27;. Keep going until the printer is added.&lt;&#x2F;li&gt;
&lt;li&gt;You&#x27;re &lt;strong&gt;done configuring from the Mac&lt;&#x2F;strong&gt;. But before you go, determine your Mac&#x27;s IP address (do a &#x27;ifconfig&#x27; in a shell or fire up System Profiler and check out the &#x27;Network&#x27; item) - note it down somewhere. Now it&#x27;s time to hook up your Windows machine to use the shared printer.&lt;&#x2F;li&gt;
&lt;li&gt;OK now go to your Windows machine and add a new printer (Control Panel -&gt; Printers and Faxes). Select &#x27;A network printer... blah blah&#x27;. Don&#x27;t browse for the printer, you will enter its IP address directly in the &#x27;URL&#x27; field. Enter &#x27;http:&#x2F;&#x2F;your.macs.ip.address:631&#x2F;printers&#x2F;uberprinter&#x27; (replacing &#x27;your.macs.ip.address&#x27; with your Mac&#x27;s IP address and &#x27;uberprinter&#x27; with the short name you gave your printer). If you can&#x27;t remember your printer&#x27;s name, just scurry back to the Mac and browse to &lt;a href=&quot;http:&#x2F;&#x2F;127.0.0.1:631&#x2F;printers&#x2F;&quot;&gt;http:&#x2F;&#x2F;127.0.0.1:631&#x2F;printers&#x2F;&lt;&#x2F;a&gt;. You should be able to see the printer you added listed there - its name is linked there.&lt;&#x2F;li&gt;
&lt;li&gt;Now, all that&#x27;s left is to install the correct Windows printer driver on the Windows machine. If you&#x27;re lucky Windows already has your driver, if not do whatever you need to get the proper driver - after all, the purpose of jumping through all these hoops is to get full printer driver functionality off the shared Mac printer.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;That&#x27;s it. That&#x27;ll teach you for not getting a print server or one of those new printers with network functionality.&lt;&#x2F;p&gt;
&lt;h3&gt;Problems?&lt;&#x2F;h3&gt;
&lt;p&gt;Some readers wrote in with their own difficulties and have kindly allowed me to share their solutions. First off, Patrick McKrell who had a solution for cases where you still are just not able to print from the Windows machine (it involves killing a daemon so it&#x27;s pretty sweet).&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Thank you for making available your instructions for sharing a USB printer connected to a Mac using OS X with a Windows PC.  All of your points worked flawlessly on the Mac.  My Mac is a B&amp;W G3 running OS X 10.2.8.  The printer is an HP PSC 1510.&lt;&#x2F;p&gt;
&lt;p&gt;...&lt;&#x2F;p&gt;
&lt;p&gt;Back to Windows Add Printer.  Is my driver there? No.  I browsed the Windows file system to Program Files&#x2F;HP&#x2F;.  No luck.  Couldn&#x27;t find or add my driver.  Next I unplugged the printer&#x27;s USB cable from the Mac and into the PC.  Windows detected the new hardware, created whatever files it needed, and automatically created the USB-connected PSC 1500 series printer in Printers and Faxes.  Well, that&#x27;s pretty darn close. I opened the printer&#x27;s properties, changed the port from USB to Internet Port (as per your configuration guidance), sent a print job....and nothing.  Hmmm.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, I recalled seeing someone&#x27;s web post --thanks to your point of reference.  I followed the poster&#x27;s instructions, and, yeah, it prints, and in color.  Thanks again, Chu, for your post.  It was easy to follow, and importantly, it worked with my setup (despite the color issue).&lt;&#x2F;p&gt;
&lt;p&gt;Patrick McKrell&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;The solution? Change your CUPS configuration to allow raw printing:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Basically, I saw that every job on the windows side had &quot;error&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;After looking at the error logs for cups on the mac box (&#x2F;var&#x2F;log&#x2F;cups&#x2F;), I noticed this line repeatedly:&lt;&#x2F;p&gt;
&lt;p&gt;print_job: Unsupported format &#x27;application&#x2F;octet-stream&#x27;!&lt;&#x2F;p&gt;
&lt;p&gt;Did some googling, and found a post with the answer:&lt;&#x2F;p&gt;
&lt;p&gt; &gt;&lt;br &#x2F;&gt;
 &gt; You probably need to uncomment the following lines in&lt;br &#x2F;&gt;
 &gt; &#x2F;etc&#x2F;cups&#x2F;mime.types and &#x2F;etc&#x2F;cups&#x2F;mime.convs:&lt;br &#x2F;&gt;
 &gt;&lt;br &#x2F;&gt;
 &gt;&lt;br &#x2F;&gt;
 &gt; &lt;strong&gt;&#x2F;etc&#x2F;cups&#x2F;mime.types&lt;&#x2F;strong&gt;:&lt;br &#x2F;&gt;
 &gt; #application&#x2F;octet-stream&lt;br &#x2F;&gt;
 &gt;&lt;br &#x2F;&gt;
 &gt;&lt;br &#x2F;&gt;
 &gt; &lt;strong&gt;&#x2F;etc&#x2F;cups&#x2F;mime.convs&lt;&#x2F;strong&gt;:&lt;br &#x2F;&gt;
 &gt; #application&#x2F;octet-stream application&#x2F;vnd.cups-raw 0&lt;br &#x2F;&gt;
 &gt; -&lt;br &#x2F;&gt;
 &gt;&lt;br &#x2F;&gt;
 &gt;&lt;br &#x2F;&gt;
 &gt; That will allow raw printing.&lt;&#x2F;p&gt;
&lt;p&gt;Then, kill -HUP the cups daemon, and you&#x27;re good to go.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>One stupid thing you can do with a UNIX shell and root access</title>
    <published>2007-02-05T20:06:39+00:00</published>
    <updated>2007-02-05T20:06:39+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/02/05/one-stupid-thing-you-can-do-with-a-unix-shell-and-root-access/"/>
    <id>https://chuyeow.wtf/2007/02/05/one-stupid-thing-you-can-do-with-a-unix-shell-and-root-access/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/02/05/one-stupid-thing-you-can-do-with-a-unix-shell-and-root-access/">&lt;pre&gt;&lt;code&gt;sudo chown -R dick &#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;instead of&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;sudo chown -R dick .&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You won&#x27;t be able to su - or sudo to chown the ownerships back properly because the sudo executable needs to be owned by root. Some people should never have unfettered sudo rights... like me.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Determining web page size - the wrong way</title>
    <published>2007-02-05T20:03:27+00:00</published>
    <updated>2007-02-05T20:03:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/02/05/determining-web-page-size-the-wrong-way/"/>
    <id>https://chuyeow.wtf/2007/02/05/determining-web-page-size-the-wrong-way/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/02/05/determining-web-page-size-the-wrong-way/">&lt;p&gt;Got an email today that disputed web page sizes I reported (diplomatically telling me to get my facts right):&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Regarding the size, if you save the homepage as webpage complete you can get the size of the iframes files individually.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;&amp;lt;teenage-angst&amp;gt;Ick... Learn to use &lt;a href=&quot;http:&#x2F;&#x2F;getfirebug.com&#x2F;&quot;&gt;Firebug&lt;&#x2F;a&gt; or a &lt;a href=&quot;http:&#x2F;&#x2F;www.websiteoptimization.com&#x2F;services&#x2F;analyze&#x2F;&quot;&gt;Web Page Analyzer&lt;&#x2F;a&gt;. Or anything else that does better than saving the page from a web browser.&amp;lt;&#x2F;teenage-angst&amp;gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Essential Firebug video for web developers</title>
    <published>2007-01-28T14:41:45+00:00</published>
    <updated>2007-01-28T14:41:45+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/01/28/essential-firebug-video-for-web-developers/"/>
    <id>https://chuyeow.wtf/2007/01/28/essential-firebug-video-for-web-developers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/01/28/essential-firebug-video-for-web-developers/">&lt;p&gt;If you&#x27;re doing web development or design of any sort, you have to check out &lt;a href=&quot;http:&#x2F;&#x2F;www.yuiblog.com&#x2F;blog&#x2F;2007&#x2F;01&#x2F;26&#x2F;video-hewitt-firebug&#x2F;&quot;&gt;Joe Hewitt&#x27;s talk on Firebug at Yahoo!&lt;&#x2F;a&gt; - download the movie or watch it online, just make sure you watch it.&lt;&#x2F;p&gt;
&lt;p&gt;If you aren&#x27;t already using &lt;a href=&quot;http:&#x2F;&#x2F;getfirebug.com&#x2F;&quot;&gt;Firebug&lt;&#x2F;a&gt;, this will convince you. If you are, you&#x27;ll probably find some gems in there that you didn&#x27;t know before. I didn&#x27;t know that you could log events to elements on the fly, or press the up and down arrow keys to adjust numerical values (such as margins and paddings), or edit the values in the box model layout diagram, or hover over variable names to see a tooltip of their values in the JavaScript debugger, or conditional breakpoints.&lt;&#x2F;p&gt;
&lt;p&gt;Now if only it were able to detect JavaScript syntax errors that cause an entire JS file to be ignored by the browser. &lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>BarCamp Singapore Jan 2007</title>
    <published>2007-01-21T00:21:21+00:00</published>
    <updated>2007-01-21T00:21:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/01/21/barcamp-singapore-jan-2007/"/>
    <id>https://chuyeow.wtf/2007/01/21/barcamp-singapore-jan-2007/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/01/21/barcamp-singapore-jan-2007/">&lt;p&gt;I just got back from &lt;a href=&quot;http:&#x2F;&#x2F;barcamp.org&#x2F;BarCampSingapore&quot;&gt;BarCamp Singapore&lt;&#x2F;a&gt; a few hours ago. I was only vaguely familiar with the &lt;a href=&quot;http:&#x2F;&#x2F;barcamp.org&#x2F;TheRulesOfBarCamp&quot;&gt;Rules of BarCamp&lt;&#x2F;a&gt; prior to this, and actually only found out about the event from &lt;a href=&quot;http:&#x2F;&#x2F;blog.yanime.org&#x2F;&quot;&gt;Choon Keat&lt;&#x2F;a&gt; (of &lt;a href=&quot;http:&#x2F;&#x2F;rssfwd.com&#x2F;&quot;&gt;RssFwd&lt;&#x2F;a&gt; fame - check it out if you haven&#x27;t already) 2 days ago.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, props to the organizers for putting this together (especially the free BarCamp t-shirts from Yahoo!). Personally, I felt the icebreaker game took up too much time that could have been used for the sharing sessions - the tech track of sessions were crammed up towards the end of BarCamp.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;barcampsingapore.png&quot; alt=&quot;BarCamp Singapore logo&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Notably, &lt;a href=&quot;http:&#x2F;&#x2F;poundbang.in&#x2F;&quot;&gt;Harish Mallipeddi&lt;&#x2F;a&gt;, who interned at &lt;a href=&quot;http:&#x2F;&#x2F;www.bezurk.com&#x2F;&quot;&gt;Bezurk&lt;&#x2F;a&gt; for a couple of months, shared with us an introduction to &lt;a href=&quot;http:&#x2F;&#x2F;www.djangoproject.com&#x2F;&quot;&gt;Django&lt;&#x2F;a&gt; together with some working code on a site he is working on. I didn&#x27;t know a whole lot about Django before and was impressed that there is a &quot;free&quot; admin application for Django applications. We (Choon Keat, Harish, and I) had a small debate over Django&#x27;s templating system (briefly, Django has it&#x27;s own templating system for its views, whereas Rails ERB is basically Ruby code mixed in HTML). To this day I am still convinced that PHP is already a templating language despite my old &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;article&#x2F;smarty-php-template-engine&quot;&gt;Smarty card-carrying days&lt;&#x2F;a&gt;. Relating back to the Django templating system, Choon Keat and I didn&#x27;t like the idea of having to learn to use a templating language when the base language itself (Ruby or Python) would suffice. Obviously Python syntax wasn&#x27;t suitable for web designer consumption so Django had to come up with its own templating language.&lt;&#x2F;p&gt;
&lt;p&gt;Michael from &lt;a href=&quot;http:&#x2F;&#x2F;www.petrolwatch.com.sg&#x2F;&quot;&gt;PetrolWatch&lt;&#x2F;a&gt; showed us some flashy scriptaculous effects on his site and demoed the Ruby on Rails-inspired &lt;a href=&quot;http:&#x2F;&#x2F;www.cakephp.org&#x2F;&quot;&gt;CakePHP&lt;&#x2F;a&gt;. It&#x27;s a nice framework if you had to use PHP and performance is a concern (it&#x27;s true, Rails apps run more heavily than PHP scripts, and the difference in performance is very clear in servers with minimal resources). But the lack of a good testing framework was discouraging. Still, I must say I&#x27;d have used it (or a similiar framework) if Rails didn&#x27;t exist or if I was tied to using PHP for web development.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;blog.yanime.org&#x2F;&quot;&gt;Choon Keat&lt;&#x2F;a&gt; showed the non-believers the power of Rails&#x27; &lt;code&gt;script&#x2F;console&lt;&#x2F;code&gt; as well as the flexibility of Ruby in allowing developers to make their own extensions to existing classes (aka &quot;who needs hooks from God?&quot;). I probably should have stepped in and showed some basic Rails migrations stuff that would have impressed (hopefully) the Django and CakePHP fanbase (all 2 of them) - but my laptop was running out of battery (and I was shy).&lt;&#x2F;p&gt;
&lt;p&gt;Oh and I saw a good number of Macs there, and at least 3 laptops running a Linux distro of some sort. Cool.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>RubyGems 0.9.1 - required update</title>
    <published>2007-01-20T23:02:35+00:00</published>
    <updated>2007-01-20T23:02:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/01/20/rubygems-091-required-update/"/>
    <id>https://chuyeow.wtf/2007/01/20/rubygems-091-required-update/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/01/20/rubygems-091-required-update/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;blog.segment7.net&#x2F;articles&#x2F;2007&#x2F;01&#x2F;18&#x2F;rubygems-0-9-1&quot;&gt;RubyGems has been updated to 0.9.1&lt;&#x2F;a&gt; and is a required update due to a security issue. The blog announcement reveals more:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;The most important change in RubyGems 0.9.1 is that RubyGems no longer allows files to be installed outside of the installation directory.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;It&#x27;s a required update as the RubyForge gem repository will soon disallow installation of gems if you have an older version of RubyGems.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, a new feature I found very useful is &lt;code&gt;gem outdated&lt;&#x2F;code&gt;, which lists the gems you have installed that are currently not the latest versions (I just realized that mongrel is actually already up to 1.0 RC!). And don&#x27;t forget multiple gem uninstallation with &lt;code&gt;gem uninstall&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Update your RubyGems by running:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;gem update --system&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
  </entry>
  <entry>
    <title>What you can get for $6.25 in Singapore</title>
    <published>2007-01-20T22:33:08+00:00</published>
    <updated>2007-01-20T22:33:08+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/01/20/what-you-can-get-for-625-in-singapore/"/>
    <id>https://chuyeow.wtf/2007/01/20/what-you-can-get-for-625-in-singapore/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/01/20/what-you-can-get-for-625-in-singapore/">&lt;p&gt;Found a forwarded email with this image of a receipt from a local restaurant in Raffles Hotel sitting around in my inbox while clearing my inbox (trying to achieve the state of &lt;a href=&quot;http:&#x2F;&#x2F;www.43folders.com&#x2F;izero&#x2F;&quot;&gt;&quot;Inbox Zero&quot;&lt;&#x2F;a&gt;):&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;slut-receipt.jpg&quot; alt=&quot;Slut receipt from Seah Street Deli&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Yeah I&#x27;d like some nachos with my slut.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>I brought back an abscess from Tokyo</title>
    <published>2007-01-19T22:20:23+00:00</published>
    <updated>2007-01-19T22:20:23+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/01/19/i-brought-back-an-abscess-from-tokyo/"/>
    <id>https://chuyeow.wtf/2007/01/19/i-brought-back-an-abscess-from-tokyo/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/01/19/i-brought-back-an-abscess-from-tokyo/">&lt;p&gt;One of the reasons I&#x27;ve been rather quiet on this blog ever since my return from the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2007&#x2F;01&#x2F;03&#x2F;tokyo-4th-jan-13th-jan&#x2F;&quot;&gt;trip to Tokyo&lt;&#x2F;a&gt; is this nice medium-sized &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Abscess&quot;&gt;abscess&lt;&#x2F;a&gt; I brought back with me. It appeared about 3 days into the trip, and I must have really bad luck because it was located on my posterior - moving around on foot and sitting down were particularly trying events. Considering that we got around most of Tokyo either on foot or by train, it made most experiences less pleasing than they would probably have been.&lt;&#x2F;p&gt;
&lt;p&gt;Nevertheless, it was a great trip - had some great food, saw some breath-taking sights, bought some (or rather, &lt;em&gt;not enough&lt;&#x2F;em&gt;) anime swag. Someday soon (if not soon then probably never) I will blog about it (with pictures, of course).&lt;&#x2F;p&gt;
&lt;p&gt;And I saw a bus advertising a &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_Melancholy_of_Haruhi_Suzumiya&quot;&gt;The Melancholy of Haruhi Suzimiya&lt;&#x2F;a&gt; DVD release:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img id=&quot;image896&quot; src=&quot;&#x2F;assets&#x2F;haruhi-bus-in-tokyo.png&quot; alt=&quot;Haruhi bus in Tokyo&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I&#x27;m glad I can say that the abscess burst yesterday, relieving me of the pain that had to be suppressed with painkillers. While the copious amounts of blood and pus that came out of the burst abscess wasn&#x27;t pleasant to deal with (it&#x27;s still bleeding and excreting pus right now), the relief from the pain is immeasurable. Plus, I didn&#x27;t really like the idea of the surgery that would be necessary if it hadn&#x27;t burst - a friend who had an abscess on his face described the procedure and while it seemed painless enough, sticking a needle up that mass of pain just didn&#x27;t seem like an ideal way to deal with it.&lt;&#x2F;p&gt;
&lt;p&gt;Abscesses suck.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Tokyo 4th Jan - 13th Jan</title>
    <published>2007-01-03T11:49:58+00:00</published>
    <updated>2007-01-03T11:49:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2007/01/03/tokyo-4th-jan-13th-jan/"/>
    <id>https://chuyeow.wtf/2007/01/03/tokyo-4th-jan-13th-jan/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2007/01/03/tokyo-4th-jan-13th-jan/">&lt;p&gt;I&#x27;ll be out of town (i.e. Singapore) for the next week and a half. Going to Japan, more specifically Tokyo and nearby cities. Tentacle sex and soiled panty vending machines here I come!&lt;&#x2F;p&gt;
&lt;p&gt;Oh and if anyone has any pointers or places&#x2F;food&#x2F;experiences that are not to be missed, please let me know.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>VLC 0.8.6 - full screen controller panel</title>
    <published>2006-12-26T16:46:10+00:00</published>
    <updated>2006-12-26T16:46:10+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/12/26/vlc-086-full-screen-controller-panel/"/>
    <id>https://chuyeow.wtf/2006/12/26/vlc-086-full-screen-controller-panel/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/12/26/vlc-086-full-screen-controller-panel/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;developers.videolan.org&#x2F;vlc&#x2F;NEWS&quot;&gt;VLC media player&lt;&#x2F;a&gt; 0.8.6 (&lt;a href=&quot;http:&#x2F;&#x2F;developers.videolan.org&#x2F;vlc&#x2F;NEWS&quot;&gt;changelog&lt;&#x2F;a&gt;) was released a few weeks ago so this may be old news, but I am clearing my backlog of drafts.&lt;&#x2F;p&gt;
&lt;p&gt;Mac OS X users, if you watch videos in full screen mode (like I do most of the time), you&#x27;d be delighted to know that they added a full screen controller &lt;em&gt;Ã  la&lt;&#x2F;em&gt; the video player in iTunes:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;vlc-controller-panel-black-lagoon-levy.png&quot; alt=&quot;VLC full screen controller panel&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;That was one of my pet peeves with VLC when I was still using Windows as my main desktop OS, and I&#x27;d stayed true to &lt;a href=&quot;http:&#x2F;&#x2F;sourceforge.net&#x2F;projects&#x2F;guliverkli&#x2F;&quot;&gt;Media Player Classic&lt;&#x2F;a&gt; right to the point where I switched to OS X. Media Player Classic is Windows-only, so I had to switch to VLC as well (QuickTime player never impressed me and I wasn&#x27;t willing to pay for the Pro version). The lack of a full controller in full screen mode and the inability to move to specific spots in the video timeline with sufficient granularity seems to have been fixed with this new full screen controller panel.&lt;&#x2F;p&gt;
&lt;p&gt;And while they still haven&#x27;t made it possible to pause a video by clicking on the video output (which was the case in Media Player Classic), I&#x27;ve mostly compensated for it by hitting the space bar. Now that they&#x27;ve added a right-click context menu to the video output screen, the same can be done but in 2 clicks with just the mouse - not optimal but it does feel better to see a context menu pop up when right-clicking. I guess that&#x27;s the Windows user in me talking - I still feel that almost everything I see should have a context menu or it just feels wrong.&lt;&#x2F;p&gt;
&lt;p&gt;Oh and they added support for the Apple Remote Control. Works great, I just have to remember to take out my remote control and use it next time I&#x27;m sitting back watching a movie or anime.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mr. Hankey the Christmas Poo cake for sale</title>
    <published>2006-12-26T15:25:01+00:00</published>
    <updated>2006-12-26T15:25:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/12/26/mr-hankey-the-christmas-poo-cake-for-sale/"/>
    <id>https://chuyeow.wtf/2006/12/26/mr-hankey-the-christmas-poo-cake-for-sale/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/12/26/mr-hankey-the-christmas-poo-cake-for-sale/">&lt;p&gt;Saw this on a Christmas brochure while buying some pastry from the local &lt;a href=&quot;http:&#x2F;&#x2F;www.delifrance.com.sg&#x2F;&quot;&gt;Delifrance&lt;&#x2F;a&gt; cafe:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;swensens-mr-hankey-log-cake.png&quot; alt=&quot;Mr. Hankey the Christmas Poo lookalike log cake&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I immediately thought of &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mr._Hankey&quot;&gt;Mr. Hankey the Christmas Poo&lt;&#x2F;a&gt; (of South Park fame).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;mr-hankey-howdy-ho.jpg&quot; alt=&quot;Mr. Hankey original picture&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;While the resemblance is not uncanny, I&#x27;m pretty sure that&#x27;s one log cake I don&#x27;t want to eat.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Seen elsewhere: Glue sniffers on Singapore train</title>
    <published>2006-12-24T10:56:31+00:00</published>
    <updated>2006-12-24T10:56:31+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/12/24/seen-elsewhere-glue-sniffers-on-singapore-train/"/>
    <id>https://chuyeow.wtf/2006/12/24/seen-elsewhere-glue-sniffers-on-singapore-train/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/12/24/seen-elsewhere-glue-sniffers-on-singapore-train/">&lt;p&gt;Tomorrow.sg has an entry with a photo of &lt;a href=&quot;http:&#x2F;&#x2F;tomorrow.sg&#x2F;archives&#x2F;2006&#x2F;12&#x2F;19&#x2F;glue_sniffing_still_in.html&quot;&gt;glue sniffing girls on a &lt;acronym title=&quot;Mass Rapid Transit&quot;&gt;MRT&lt;&#x2F;acronym&gt; train&lt;&#x2F;a&gt;. This picture is tits (as Eric Cartman would say).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mind your MySQL update syntax</title>
    <published>2006-12-22T17:51:52+00:00</published>
    <updated>2006-12-22T17:51:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/12/22/mind-your-mysql-update-syntax/"/>
    <id>https://chuyeow.wtf/2006/12/22/mind-your-mysql-update-syntax/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/12/22/mind-your-mysql-update-syntax/">&lt;p&gt;Just noticed an insidious &quot;bug&quot; in MySQL when you use &quot;AND&quot;s instead of commas to separate the fields you are updating in your SET clause. Being a little rusty in SQL, I entered something like the query below while trying to make a quick fix to some records:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;UPDATE characters
SET alignment = &#x27;Neutral Evil&#x27;
AND last_name = &#x27;Majere&#x27;
WHERE first_name = &#x27;Raistlin&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Much to my consternation, the record appeared to have disappeared when I tried to query for it. After much bewildered cursing, I came across &lt;a href=&quot;http:&#x2F;&#x2F;bugs.mysql.com&#x2F;bug.php?id=15928&quot;&gt;MySQL bug #15928: update syntax error not detected&lt;&#x2F;a&gt; (&lt;strong&gt;this is not an actual bug though&lt;&#x2F;strong&gt;). As it turns out, MySQL does a logical AND and the result is that the &#x27;alignment&#x27; field is set to &#x27;0&#x27; since &lt;code&gt;&#x27;Neutral Evil&#x27; AND last_name = &#x27;Majere&#x27;&lt;&#x2F;code&gt; results in &lt;code&gt;false&lt;&#x2F;code&gt;. And MySQL casts it to &#x27;0&#x27;. Grrr. Luckily I was able to revert the changes by finding the record again with the new &#x27;0&#x27; alignment value (was using an auto-committing MySQL GUI client, no ROLLBACK available).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox Secrets on Google Book Search</title>
    <published>2006-12-19T10:16:35+00:00</published>
    <updated>2006-12-19T10:16:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/12/19/firefox-secrets-on-google-book-search/"/>
    <id>https://chuyeow.wtf/2006/12/19/firefox-secrets-on-google-book-search/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/12/19/firefox-secrets-on-google-book-search/">&lt;p&gt;A &lt;a href=&quot;http:&#x2F;&#x2F;www.googlealert.com&#x2F;&quot;&gt;GoogleAlert&lt;&#x2F;a&gt; (not &lt;em&gt;the&lt;&#x2F;em&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;alerts&quot;&gt;Google Alert&lt;&#x2F;a&gt;) email arrived in my inbox today alerting me to &lt;a href=&quot;http:&#x2F;&#x2F;books.google.com&#x2F;books?vid=ISBN0975240242&amp;id=sfciobmzOOcC&amp;pg=PP1&amp;lpg=PP1&amp;ots=_R_1JbkkUL&amp;sig=jnGhglZvTA9_VTzavodKuIbubwg&quot;&gt;the Firefox Secrets entry on Google Book Search&lt;&#x2F;a&gt; (that&#x27;s a book I wrote, for the uninitiated). It&#x27;s listed as a limited preview so only the first few pages of each chapter are available. If you&#x27;re interested in previewing a Firefox book circa 2005 (virtually the Mesozoic ages in the tech world), just maybe, &lt;a href=&quot;http:&#x2F;&#x2F;books.google.com&#x2F;books?vid=ISBN0975240242&amp;id=sfciobmzOOcC&amp;pg=PP1&amp;lpg=PP1&amp;ots=_R_1JbkkUL&amp;sig=jnGhglZvTA9_VTzavodKuIbubwg&quot;&gt;check it out&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>HP laptop with an Apple sticker</title>
    <published>2006-12-14T11:25:30+00:00</published>
    <updated>2006-12-14T11:25:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/12/14/hp-laptop-with-an-apple-sticker/"/>
    <id>https://chuyeow.wtf/2006/12/14/hp-laptop-with-an-apple-sticker/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/12/14/hp-laptop-with-an-apple-sticker/">&lt;p&gt;Saw this in a MacDonald&#x27;s at a local shopping mall:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;hp-laptop-with-apple-sticker.png&quot; alt=&quot;Man using a HP laptop with an Apple sticker&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you can look past the fuzziness of the photo, it&#x27;s actually someone using a HP laptop with an Apple sticker. Now, if only I can get a HP sticker for my MacBook Pro...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Adding full text search to your Rails app in 1 hour and 10 lines of code</title>
    <published>2006-12-04T19:19:17+00:00</published>
    <updated>2006-12-04T19:19:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/12/04/adding-full-text-search-to-your-rails-app-in-1-hour-and-10-lines-of-code/"/>
    <id>https://chuyeow.wtf/2006/12/04/adding-full-text-search-to-your-rails-app-in-1-hour-and-10-lines-of-code/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/12/04/adding-full-text-search-to-your-rails-app-in-1-hour-and-10-lines-of-code/">&lt;p&gt;Yup, it&#x27;s that fast and simple, using &lt;a href=&quot;http:&#x2F;&#x2F;ferret.davebalmain.com&#x2F;trac&#x2F;wiki&quot;&gt;Ferret&lt;&#x2F;a&gt;, a Ruby port of &lt;a href=&quot;http:&#x2F;&#x2F;lucene.apache.org&#x2F;&quot;&gt;Lucene&lt;&#x2F;a&gt; (the de facto full text search engine written in Java) and the &lt;a href=&quot;http:&#x2F;&#x2F;projects.jkraemer.net&#x2F;acts_as_ferret&#x2F;wiki&quot;&gt;acts_as_ferret&lt;&#x2F;a&gt; plugin, I added &quot;Did you mean this?&quot; functionality to a &lt;a href=&quot;http:&#x2F;&#x2F;rails.bezurk.net:3000&#x2F;affiliates&#x2F;hotels&#x2F;search&quot;&gt;small Rails application&lt;&#x2F;a&gt; (non-perma link) today rather quickly and painlessly.&lt;&#x2F;p&gt;
&lt;h3&gt;Adding full text search funtionality to your Rails applications&lt;&#x2F;h3&gt;
&lt;p&gt;Install &lt;a href=&quot;http:&#x2F;&#x2F;ferret.davebalmain.com&#x2F;trac&#x2F;wiki&quot;&gt;Ferret&lt;&#x2F;a&gt; via RubyGems.&lt;br &#x2F;&gt;
&lt;code&gt;sudo gem install ferret&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Install the &lt;a href=&quot;http:&#x2F;&#x2F;projects.jkraemer.net&#x2F;acts_as_ferret&#x2F;wiki&quot;&gt;acts_as_ferret&lt;&#x2F;a&gt; plugin for your Rails application.&lt;br &#x2F;&gt;
&lt;code&gt;ruby script&#x2F;plugin install &amp;lt;ACTS_AS_FERRET_SVN_REPOSITORY&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Add the acts_as_ferret mixin method to your ActiveRecord model, specifying the fields you want indexed.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;class Location &lt; ActiveRecord::Base
  belongs_to :country, :foreign_key =&gt; &#x27;country_code&#x27;
  belongs_to :state
&lt;p&gt;acts_as_ferret :fields =&amp;gt; [:location_name, :country_name, :state_name]&lt;&#x2F;p&gt;
&lt;p&gt;def country_name
country.country_name
end&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you have any associations that you want searched as well, one way (there is more than one way to do this) would be like what I did above with the country_name attribute of Country. For a more detailed discussion on Ferret and ActiveRecord associations, I found &lt;a href=&quot;http:&#x2F;&#x2F;www.ruby-forum.com&#x2F;topic&#x2F;86741&quot;&gt;this thread in the Ruby forum&lt;&#x2F;a&gt; enlightening.&lt;&#x2F;p&gt;
&lt;p&gt;In your controller, use Model.find_by_contents() to perform the full text search with your query. If you need fuzzy matching, append a tilde (&quot;~&quot;) to the end of your query - if you&#x27;re here, you probably needed fuzzy matching anyway as you&#x27;re most likely creating &quot;Did you mean this?&quot;-type functionality.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;# In the controller...
@locations = Location.find_by_contents(&quot;#{@search_request.location_entered}~&quot;) # The &quot;~&quot; is for fuzzy matching.
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;All that&#x27;s left is to flash the appropriate message in your view and display your model objects as you normally would.&lt;&#x2F;p&gt;
&lt;p&gt;Some &lt;strong&gt;gotchas&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;If you change the way your model is indexed, remember to clear out the existing one. acts_as_ferret stores the index by default in a &#x27;index&#x2F;&#x27; directory in the root of your Rails application. Stop your mongrel&#x2F;Webrick process to remove the lock on the index files and delete the whole directory - Ferret will rebuild it the next time you perform a full text search.&lt;&#x2F;li&gt;
&lt;li&gt;The first time you do a full text search, Ferret builds your index for you and this takes quite a while - don&#x27;t be alarmed if your Rails application appears for freeze or returns a 500 internal server error. You can observe the contents of the &#x27;index&#x2F;&#x27; directory in the root of your Rails application to tell when Ferret has finished indexing (files stop appearing and disappearing). I found it easier to run a &#x27;find_by_contents&#x27; call on my models via &#x27;script&#x2F;console&#x27; and waiting for some results to appear.&lt;&#x2F;li&gt;
&lt;li&gt;Append a &quot;~&quot; to your query string for fuzzy matching! This allows you to retrieve results matching phonetically or are mispelled. There are more complex matching rules - check out the Lucene documentation.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>How to setup your Thrash&#x2F;Sent&#x2F;Drafts folders for IMAP on Mail.app</title>
    <published>2006-12-04T13:07:46+00:00</published>
    <updated>2006-12-04T13:07:46+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/12/04/how-to-setup-your-thrashsentdrafts-folders-for-imap-on-mailapp/"/>
    <id>https://chuyeow.wtf/2006/12/04/how-to-setup-your-thrashsentdrafts-folders-for-imap-on-mailapp/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/12/04/how-to-setup-your-thrashsentdrafts-folders-for-imap-on-mailapp/">&lt;p&gt;How to setup your &lt;a href=&quot;http:&#x2F;&#x2F;www.whatdoiknow.org&#x2F;archives&#x2F;002420.shtml&quot;&gt;Trash&#x2F;Sent&#x2F;Drafts folders for IMAP on Mail.app&lt;&#x2F;a&gt;. &quot;Select mailbox, Mailbox -&gt; Use this mailbox for..., Sent&quot;. (OK I misspelled &#x27;trash&#x27; in the post title - see trackback below.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>My Linux snob shirt</title>
    <published>2006-12-04T12:52:25+00:00</published>
    <updated>2006-12-04T12:52:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/12/04/my-linux-snob-shirt/"/>
    <id>https://chuyeow.wtf/2006/12/04/my-linux-snob-shirt/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/12/04/my-linux-snob-shirt/">&lt;p&gt;All I got for my birthday was this t-shirt:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;pink-linux-t-shirt-04-12-06_300px.png&quot; alt=&quot;My Pink Linux Mastercard ad snob shirt&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In case the image doesn&#x27;t load at some point or is too small, here&#x27;s what it says:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Two hours of broadband to ftp the Linux Package, 15 cents.&lt;&#x2F;p&gt;
&lt;p&gt;CDs to burn the files, $1.00.&lt;&#x2F;p&gt;
&lt;p&gt;The knowledge that nothing on your computer is from Microsoft, PRICELESS.&lt;&#x2F;p&gt;
&lt;p&gt;There are some operating systems that you don&#x27;t need money to buy.&lt;&#x2F;p&gt;
&lt;p&gt;For everyone else, there&#x27;s Windows.
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Ironically, I&#x27;m now a Mac OS X snob, but the t-shirt still kicks arse. And no, I&#x27;m not one of those Microsoft haters without a cause - it&#x27;s just a t-shirt.&lt;&#x2F;p&gt;
&lt;p&gt;(Actually I got more than the t-shirt, but I wanted to start the entry with &quot;All I got was this t-shirt&quot;.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Seen elsewhere: The Single Most Important Rule for Retaining Software Developers</title>
    <published>2006-11-20T00:01:25+00:00</published>
    <updated>2006-11-20T00:01:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/11/20/seen-elsewhere-the-single-most-important-rule-for-retaining-software-developers/"/>
    <id>https://chuyeow.wtf/2006/11/20/seen-elsewhere-the-single-most-important-rule-for-retaining-software-developers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/11/20/seen-elsewhere-the-single-most-important-rule-for-retaining-software-developers/">&lt;p&gt;Something true: &lt;a href=&quot;http:&#x2F;&#x2F;www.softwarebyrob.com&#x2F;archive&#x2F;2006&#x2F;11&#x2F;17&#x2F;Single_Important_Rule_Retaining_Software_Developers.aspx&quot;&gt;The Single Most Important Rule for Retaining Software Developers&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox &quot;ad&quot; in the Singapore MRT</title>
    <published>2006-11-16T20:18:57+00:00</published>
    <updated>2006-11-16T20:18:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/11/16/firefox-ad-in-the-singapore-mrt/"/>
    <id>https://chuyeow.wtf/2006/11/16/firefox-ad-in-the-singapore-mrt/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/11/16/firefox-ad-in-the-singapore-mrt/">&lt;p&gt;I saw a familiar furry animal on one of the ads near the entrance of City Hall &lt;acronym title=&quot;Mass Rapid Transit&quot;&gt;MRT&lt;&#x2F;acronym&gt; and did a double take when I realized it was actually a firefox! I had no real choice but to snap a grainy photo and post it here.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-in-mrt-ad.png&quot; alt=&quot;Firefox in an MRT ad!&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Well, the ad actually labelled it as a &quot;&lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Red_Panda&quot;&gt;Red Panda&lt;&#x2F;a&gt;&quot;, but we all know that red pandas are also called firefoxes.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Hilarious Thai commercial, Bleach&#x27;s new OP</title>
    <published>2006-11-16T19:55:43+00:00</published>
    <updated>2006-11-16T19:55:43+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/11/16/hilarious-thai-commercial-bleachs-new-op/"/>
    <id>https://chuyeow.wtf/2006/11/16/hilarious-thai-commercial-bleachs-new-op/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/11/16/hilarious-thai-commercial-bleachs-new-op/">&lt;p&gt;I don&#x27;t normally post short entries on non-technical topics nor link to LiveJournals (just kidding!), but I&#x27;ll have to make an exception for this one. Check out these &lt;a href=&quot;http:&#x2F;&#x2F;orrh.livejournal.com&#x2F;49050.html&quot;&gt;Smooth-E Babyface ads&lt;&#x2F;a&gt;, probably one of the most creative commercials you&#x27;d have seen in awhile.&lt;&#x2F;p&gt;
&lt;p&gt;Oh and while I&#x27;m &quot;off-topic&quot;, Bleach fans who want to find out more about the opening song (Rolling Star) in the latest episodes should check out &lt;a href=&quot;http:&#x2F;&#x2F;www.jpopmusic.com&#x2F;forums&#x2F;viewtopic.php?t=62556&quot;&gt;this thread on YUI&lt;&#x2F;a&gt; (the singer). I&#x27;m now totally hooked on &lt;a href=&quot;http:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=k43GiUH7qXk&quot;&gt;Tomorrow&#x27;s Way&lt;&#x2F;a&gt; (YouTube video) and &lt;a href=&quot;http:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=cKj3YMc07qk&quot;&gt;I Remember You&lt;&#x2F;a&gt; (another YouTube video), and of course, the Bleach OP.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MacHeist Mission One 101</title>
    <published>2006-11-14T21:11:01+00:00</published>
    <updated>2006-11-14T21:11:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/11/14/macheist-mission-one-101/"/>
    <id>https://chuyeow.wtf/2006/11/14/macheist-mission-one-101/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/11/14/macheist-mission-one-101/">&lt;p&gt;&lt;ins&gt;Update: seems like several people are coming into this thread after searching for &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=macheist+combination&quot;&gt;MacHeist combination&lt;&#x2F;a&gt;&quot; - this post is for last year&#x27;s MacHeist. For spoilers and solutions, I suggest you go to the &lt;a href=&quot;http:&#x2F;&#x2F;www.macheist.com&#x2F;forums&#x2F;viewforum.php?id=13&quot;&gt;MacHeist Backroom forum&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you are a Mac user you&#x27;d probably have heard of the much-hyped &lt;a href=&quot;http:&#x2F;&#x2F;macheist.com&#x2F;&quot;&gt;MacHeist&lt;&#x2F;a&gt;. (I bet non-Mac users were probably annoyed with the coverage of MacHeist at some point on sites like &lt;a href=&quot;http:&#x2F;&#x2F;digg.com&#x2F;&quot;&gt;Digg&lt;&#x2F;a&gt;.) Even I was late to join up with MacHeist because of its &quot;I&#x27;m not gonna tell you what it&#x27;s about but it&#x27;s gonna rock your world&quot; press and the oh-so-exclusive invite system (which is surprisingly rather effective despite being probably the most used viral &quot;marketing technique&quot;) - I got into the whole MacHeist thing courtesy of the &lt;a href=&quot;http:&#x2F;&#x2F;www.tuaw.com&#x2F;2006&#x2F;11&#x2F;13&#x2F;macheist-registration-open-to-tuaw-readers-for-24-hours&#x2F;&quot;&gt;registration link posted over at TUAW (The Unofficial Apple Weblog)&lt;&#x2F;a&gt;. (Oh and yes, I do know that by blogging about it I&#x27;ve fallen prey to the MacHeist hype, but &lt;em&gt;I can&#x27;t help myself&lt;&#x2F;em&gt;. Or maybe I just need to blog something that&#x27;s easy to write about.)&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;macheist-registration.png&quot; alt=&quot;MacHeist registration page courtesy of TUAW&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And so I signed up, and after being completely muddled about what this MacHeist thing is all about, came upon a mission briefing with a very well-done voiceover (love that voice, sounds just right). Turns out MacHeist is a detective (or insert snooping, heist-related adjective here) game where you (try to) accomplish missions and get &quot;loot&quot; in return.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;macheist-mission-one.png&quot; alt=&quot;MacHeist mission one briefing&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Not what I&#x27;d expected, and I almost didn&#x27;t play along until I checked out the &lt;a href=&quot;http:&#x2F;&#x2F;macheist.com&#x2F;forums&#x2F;&quot;&gt;MacHeist forums&lt;&#x2F;a&gt; (requires a MacHeist account) and saw that the sheer volume of activity. A few thousand posts in a couple of hundred topics may not look like a lot, but it&#x27;s pretty amazing for what I assume is a small user base (invite-only system) and you always have to remember MacHeist is really only a week old or so.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;macheist-forum-posts.png&quot; alt=&quot;MacHeist forum - look at the number of posts!&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now that got my attention again. Lurking around the forums a bit, I found general praise of the &quot;loot&quot; from completing Mission One. And turns out the &quot;loot&quot; is a bunch of free Mac software, which I &lt;em&gt;really&lt;&#x2F;em&gt; should have guessed. &quot;Free&quot;, &quot;legitimate&quot;, &quot;Mac software&quot; - ze Mac lover in me cannot resist! I went back, re-read Mission One, and sent out an email to what I hoped was an automated email bot (it would be disturbing if someone was actually replying to all the MacHeist emails) in an attempt to dig out what I was told were much-coveted iPhone specs. It was fun for a while trying to convince the email bot to send me what I needed, but it got old when I had to, you know, get the damn answer without running in circles (with circular email).&lt;&#x2F;p&gt;
&lt;p&gt;Lurking around the forums more when I got stuck, I came across this stickied &lt;a href=&quot;http:&#x2F;&#x2F;macheist.com&#x2F;forums&#x2F;viewtopic.php?id=324&quot;&gt;Official Mission #1 Thread&lt;&#x2F;a&gt; and it was all easy mode from there. So yes, the answers are all &lt;a href=&quot;http:&#x2F;&#x2F;macheist.com&#x2F;forums&#x2F;viewtopic.php?id=324&quot;&gt;there&lt;&#x2F;a&gt; if you&#x27;re lazy or impatient (I am both).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;macheist-safe.png&quot; alt=&quot;MacHeist safe&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;After completing the mission, you get the combination code to your safe, where you can find the fruits of your labor, loot! Well, about the reward, I have to say I was disappointed - perhaps I was expecting something like free licenses of TextMate or Parallels, or even Disco (though I have actually purchased licenses for all 3 - this Mac thing is turning me into someone who actually buys software - the horror!). Anyway, the rewards were full copies of &lt;a href=&quot;http:&#x2F;&#x2F;www.unsanity.com&#x2F;ctm&#x2F;&quot;&gt;Chat Transcript Manager&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;assignmentplanner.burgundylogan.com&#x2F;&quot;&gt;Assignment Planner&lt;&#x2F;a&gt;, and &lt;a href=&quot;http:&#x2F;&#x2F;www.acqualia.com&#x2F;soulver&#x2F;&quot;&gt;Soulver&lt;&#x2F;a&gt;. Two out of three applications for students... I got Soulver to play with its gimmicky maths functionality, didn&#x27;t bother with the rest (not to put them down, but personally don&#x27;t have any use for Chat Transcript Manager being a full-time Adium user nor for Assignment Planner).&lt;&#x2F;p&gt;
&lt;p&gt;Despite the anti-climax, I really think the MacHeist guys have done an awesome job (they got me for sure - I&#x27;m already anticipating the next heist and more loot!). It&#x27;s an excellent way to promote Mac software (some of the lesser known products as well), and to get people talking. I can imagine they aren&#x27;t doing too shabby with ad placements and sponsorship. And really, that&#x27;s a damn polished setup they have there with the missions. Oh and before I end this post, if you need an invite, let me know (just leave a comment), still have 4 to give out. Well, if the &lt;a href=&quot;http:&#x2F;&#x2F;www.tuaw.com&#x2F;2006&#x2F;11&#x2F;13&#x2F;macheist-registration-open-to-tuaw-readers-for-24-hours&#x2F;&quot;&gt;registration link posted over at TUAW (The Unofficial Apple Weblog)&lt;&#x2F;a&gt; no longer works that is.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>OMG, 66 gig error log...</title>
    <published>2006-11-09T10:57:42+00:00</published>
    <updated>2006-11-09T10:57:42+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/11/09/omg-66-gig-error-log/"/>
    <id>https://chuyeow.wtf/2006/11/09/omg-66-gig-error-log/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/11/09/omg-66-gig-error-log/">&lt;p&gt;So yeah today we realized one of our development servers had 0% free space left... after checking it out with&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;du -h --max-depth=1&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;in a few places in the filesystem, it turned out that we had a 66 gigabye Apache httpd error log.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;66-gb-error-log.png&quot; alt=&quot;66 GB error log&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s what you get for setting the log level to debug and not rolling over your error logs...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Muting the Mac startup sound</title>
    <published>2006-11-01T19:40:19+00:00</published>
    <updated>2006-11-01T19:40:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/11/01/muting-the-mac-startup-sound/"/>
    <id>https://chuyeow.wtf/2006/11/01/muting-the-mac-startup-sound/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/11/01/muting-the-mac-startup-sound/">&lt;p&gt;One of the mildly annoying things of owning a Mac laptop is how it can draw unwanted attention with its startup chime when it boots up. There was once it went off rather loudly while I was on the train and I&#x27;d imagine I must have looked rather sheepishly embarrassed. From then on I kept trying to remember to lower or mute my Mac before shutting down, but it still slips my mind most of the time. To be honest, I think that even the Windows startup chime sounds better than the one on my MacBook Pro.&lt;&#x2F;p&gt;
&lt;p&gt;So I was rather pleased when I saw someone had created a simple application (preference pane, rather) called &lt;a href=&quot;http:&#x2F;&#x2F;www5e.biglobe.ne.jp&#x2F;~arcana&#x2F;StartupSound&#x2F;index.en.html&quot;&gt;StartupSound.prefPane&lt;&#x2F;a&gt; that allows you to control the startup volume or mute it completely.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;startup-sound-pref-pane.png&quot; alt=&quot;StartupSound.prefPane screenshot&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Intel Mac owners take note&lt;&#x2F;strong&gt;: I grabbed version 1.1b1 of StartupSound.prefPane off the &lt;a href=&quot;http:&#x2F;&#x2F;macupdate.com&#x2F;info.php&#x2F;id&#x2F;16425&quot;&gt;MacUpdate page for StartupSound.prefPane&lt;&#x2F;a&gt; though, as I noticed it said &quot;StartupSound.prefPane now works on an Intel-based Mac&quot; for that version. Wouldn&#x27;t want to try the stable release version (1.0.4) since it&#x27;s for PowerPC-based Macs.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox 2 - it&#x27;s out</title>
    <published>2006-10-25T01:42:05+00:00</published>
    <updated>2006-10-25T01:42:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/10/25/firefox-2-its-out/"/>
    <id>https://chuyeow.wtf/2006/10/25/firefox-2-its-out/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/10/25/firefox-2-its-out/">&lt;p&gt;Even though Firefox 2 is slated to be released later today, the release builds have already made it into the &lt;a href=&quot;http:&#x2F;&#x2F;releases.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;releases&#x2F;2.0&#x2F;&quot;&gt;Mozilla Firefox release directory&lt;&#x2F;a&gt;. The impatient (like me) can &lt;a href=&quot;http:&#x2F;&#x2F;releases.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;releases&#x2F;2.0&#x2F;&quot;&gt;go get it&lt;&#x2F;a&gt; right now.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-20-small-screenshot.png&quot; alt=&quot;A screenshot of Firefox 2.0 on Mac OS X&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Oh, and a &lt;em&gt;must have&lt;&#x2F;em&gt; extension for those who want to enjoy the 2.0 release: &lt;a href=&quot;http:&#x2F;&#x2F;users.blueprintit.co.uk&#x2F;~dave&#x2F;web&#x2F;firefox&#x2F;nightly&quot;&gt;Nightly Test Tools&lt;&#x2F;a&gt;. Despite it&#x27;s geeky sounding, &quot;why the hell would I need that?&quot; name, it is essential for preventing your transition from Firefox 1.5 (or lower, god forbid) to Firefox 2.0 from becoming an exercise in frustration caused by extensions being disabled if the authors have not updated them for Firefox 2.0. With Nightly Tester Tools, you can &quot;Make compatible&quot; any &quot;outdated&quot; extensions to force them to be usable in Firefox 2.0. Granted, this doesn&#x27;t always work (if, say, an extension uses functionality that no longer exists in Firefox 2.0), but for most of the extensions I&#x27;ve had to &quot;make compatible&quot; so far function just fine.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;nightly-tester-tools-extension.png&quot; alt=&quot;Nightly tester tools in action&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Oh and while you&#x27;re there playing with your extensions (&lt;em&gt;Firefox&lt;&#x2F;em&gt; extensions you sicko), you&#x27;ll probably find that you no longer need extensions that save and restore your browsing session (such as SessionSaver or the functionality that comes with Tab Mix Plus) and certain feed subscription extensions (such as Feed Your Reader) - these already come built into Firefox 2.0.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Pfft, it&#x27;s back to WordPress for me</title>
    <published>2006-10-25T01:12:24+00:00</published>
    <updated>2006-10-25T01:12:24+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/10/25/pfft-its-back-to-wordpress-for-me/"/>
    <id>https://chuyeow.wtf/2006/10/25/pfft-its-back-to-wordpress-for-me/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/10/25/pfft-its-back-to-wordpress-for-me/">&lt;p&gt;After 2 failed experiments with &lt;a href=&quot;http:&#x2F;&#x2F;typosphere.org&#x2F;&quot;&gt;Typo&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;mephistoblog.com&#x2F;&quot;&gt;Mephisto&lt;&#x2F;a&gt;, I caved and went back to &lt;a href=&quot;http:&#x2F;&#x2F;wordpress.org&#x2F;&quot;&gt;WordPress&lt;&#x2F;a&gt;. As you can see (if you&#x27;re on the site itself instead of reading from a feed reader), it&#x27;s all green and so 2005-looking (the year 2005, that is) - gonna have to convert the templates from the old Mephisto setup to WordPress.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;plink-screenshot.png&quot; alt=&quot;Screenshot of the Plink theme in action on my old Mephisto blog&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;What exactly went wrong with Typo and Mephisto? Well, Typo was &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2006&#x2F;9&#x2F;1&#x2F;from-typo-to-mephisto&quot;&gt;beating the crap out of my VPS&lt;&#x2F;a&gt;, among other reasons. Mephisto was fine until the Mongrel processes running it started dying after a few hours - the 192MB or RAM that I have on the VPS was 100% used and the Rimuhosting guys have wrote me more than once suggesting a memory upgrade as I was causing way too much disk swappage on the host machine. I put the high memory usage down to comment spammers, but hell I wonder how everyone else manages to keep their Mephisto or Typo blogs up assuming not everyone has the luxury of an excess of 192MB of RAM to play with. If you&#x27;re running a Typo, Mephisto, or any other Rails-based blogging application under low memory conditions successfully, I want to know!&lt;&#x2F;p&gt;
&lt;p&gt;Another reason I had for abandoning Mephisto was the difficulties I had with its templating system. I could generally live with the lack of an easy way to display stuff like monthly archives unless I was following the trunk, but it was the lack of pagination (such as paged monthly archives) that really annoyed me. Rick Olson has &lt;a href=&quot;http:&#x2F;&#x2F;groups.google.com&#x2F;group&#x2F;MephistoBlog&#x2F;browse_thread&#x2F;thread&#x2F;dea07dd16c1d2ef5&quot;&gt;stated that pagination probably won&#x27;t go into the Mephisto core&lt;&#x2F;a&gt; and I disagree on its lack of usefulness (but this is another matter). I lacked the perserverance to finish up a pagination plugin when I realized that I had to work off the trunk which was already very much changed from the point release I was using.&lt;&#x2F;p&gt;
&lt;p&gt;Rails is such a wonderful framework, but throwing (another) templating layer into the mix (Mephisto uses &lt;a href=&quot;http:&#x2F;&#x2F;home.leetsoft.com&#x2F;liquid&quot;&gt;Liquid&lt;&#x2F;a&gt;) is a mixed blessing. The whole exercise felt very much like jumping through hoops when there&#x27;s already a clear path to goal - nevertheless, I&#x27;ll have to give the benefit of the doubt to the lack of documentation and the fast-moving development on Mephisto trunk. I&#x27;m probably geting too old for living on the edge where blogging software is concerned.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I&#x27;m glad to come back to WordPress and &lt;strong&gt;less downtime&lt;&#x2F;strong&gt;, I hope.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google Reader - a Bloglines user&#x27;s perspective</title>
    <published>2006-10-24T20:46:53+00:00</published>
    <updated>2006-10-24T20:46:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/10/24/google-reader-a-bloglines-users-perspective/"/>
    <id>https://chuyeow.wtf/2006/10/24/google-reader-a-bloglines-users-perspective/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/10/24/google-reader-a-bloglines-users-perspective/">&lt;p&gt;With the &lt;a href=&quot;http:&#x2F;&#x2F;googlereader.blogspot.com&#x2F;2006&#x2F;09&#x2F;something-looks-different.html&quot;&gt;recent update&lt;&#x2F;a&gt; of &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;reader&#x2F;&quot;&gt;Google Reader&lt;&#x2F;a&gt;, Google&#x27;s shot at an online feed reader, I just had to try it out even though I was rather contented with &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&quot;&gt;Bloglines&lt;&#x2F;a&gt;. I&#x27;ve been a long-time Bloglines user (since end 2003 I think), and even though there was little in terms of innovation and useful new features happening, Bloglines was, in my opinion, &lt;em&gt;ahead of its time&lt;&#x2F;em&gt; way back in end 2003, and it provided an unchanging interface that worked (well, my opinion on that changed after using Google Reader, as we will soon find out).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;google-reader-using-screenshot.png&quot; alt=&quot;Google Reader interface&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So, I took some time to clear the backlog of unread articles in my &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;public&#x2F;redemption&quot;&gt;289 feed subscriptions at Bloglines&lt;&#x2F;a&gt; recently so I can &quot;start over&quot; at Google Reader and not have to read the same unread articles twice. &lt;a href=&quot;http:&#x2F;&#x2F;www.bloglines.com&#x2F;export&quot;&gt;Export Bloglines to OPML&lt;&#x2F;a&gt;, import into Google Reader... It went painlessly and I noticed that Bloglines &quot;folders&quot; got converted into &quot;Tags&quot; in Google Reader - mmm, &lt;em&gt;taaaags&lt;&#x2F;em&gt;. But oh wait, what&#x27;s this when I try to &quot;manage my subscriptions&quot; - tags, folders and labels. I&#x27;m getting confused.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;google-reader-tags-folders-label.png&quot; alt=&quot;Google Reader - tags, folders and labels&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Just to make sure that they really are the same thing, I created some test tags&#x2F;labels&#x2F;folders, and yes they are actually the same thing (meaning if you add a new folder, it becomes available as a label and tag). I&#x27;m sure the terms used will be made consistent as Google Reader moves out of beta (or rather, gets further along as a beta).&lt;&#x2F;p&gt;
&lt;p&gt;If you noticed how unorganized my &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;public&#x2F;redemption&quot;&gt;Bloglines subscriptions&lt;&#x2F;a&gt; are, that&#x27;s because organizing feeds was a pain on Bloglines back in the day (it was clumsy to organize feeds into folders, you had to select a feed, scroll to the dropdown, and select the action to move it into a folder), but that&#x27;s not really a problem now with the new drag and drop interface for managing subscriptions that Bloglines pushed out recently (I think). Thankfully, Google Reader makes managing subscriptions easy as well with the familiar Gmail-like labeling.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhoo, I started using Google Reader for a bit to read new articles in my feeds, and it wasn&#x27;t long before I just found my &lt;strong&gt;killer&lt;&#x2F;strong&gt; feature: &#x27;mark items as read when you scroll past them&#x27;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;google-reader-mark-read-scroll.png&quot; alt=&quot;Google Reader&#x27;s &#x27;mark items as read when you scroll past them&#x27; preference&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This preference will tell Google Reader to only mark those items you have scrolled across as read. I hated it in Bloglines where clicking on a feed would mark &lt;em&gt;all&lt;&#x2F;em&gt; its articles as read, especially for those prolific blogs or those for which I have a backlog (200 entries is usually a little too much for one sitting for good blogs). I have to say it again, this is the killer functionality for me. I&#x27;ve been bitten by interruptions and crashed browsers once too many times. I always click on feeds (in Bloglines) with more than 50 unread articles with no small amount of trepidation, fearing that I won&#x27;t be able to read them all or that I&#x27;d do something to crash Firefox (which is surprisingly common when you&#x27;re working with large datasets in JavaScript). This often results in my reluctance to click on feeds with more than 50 unread posts, and with the vicious cycle 50 becomes 200 (the Bloglines limit for unread posts) and the feed rarely gets read (happens with blogs like Scoble or news websites like The Register). &lt;&#x2F;p&gt;
&lt;p&gt;With this feature in Google Reader, I can click on &quot;All items&quot; even if it says there are 1 gazillion unread posts and still feel safe about not losing my place. Those of you using non-web feed reader applications may scoff at this (I&#x27;m really not sure, I haven&#x27;t used one in a long time so I only assume something like this is common in applications like NetNewsWire or FeedDemon), but I&#x27;ve yet to see this done in a web application. Offline feed readers are not really an option for me unless they integrate to an online (i.e central) source (let me know if one exists!). For this feature alone, I decided to make a switch to Google Reader from Bloglines.&lt;&#x2F;p&gt;
&lt;p&gt;Google Reader can get a little slow though, but then I only have 512MB of RAM right now so it probably isn&#x27;t indicative of anything (the new Bloglines is slow on the Macbook Pro as well I noticed). Hopefully all this will be moot when I get the 2GB RAM upgrade that&#x27;s waiting at the store. Other than that, Google Reader seems faster to respond network-wise (which I&#x27;m not surprised at, considering that it&#x27;s Google (and their distribution channels)), and it&#x27;s also prettier. Yeah, looking good matters to some people, like me (not that Google Reader is fantastic aesthetically, but it&#x27;s far less staid than Bloglines).&lt;&#x2F;p&gt;
&lt;p&gt;Now all that&#x27;s left is to keep those fingers crossed for some sexy Gmail integration - I&#x27;m thinking something like &lt;a href=&quot;http:&#x2F;&#x2F;rssfwd.com&#x2F;&quot;&gt;RssFwd&lt;&#x2F;a&gt;, a wonderfully useful creation by &lt;a href=&quot;http:&#x2F;&#x2F;blog.yanime.org&quot;&gt;Choon Keat&lt;&#x2F;a&gt;. I use &lt;a href=&quot;http:&#x2F;&#x2F;rssfwd.com&#x2F;&quot;&gt;RssFwd&lt;&#x2F;a&gt; to track some important blogs and to track the latest releases of TV show torrents (Choon Keat is not gonna be happy about that though heh).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Native magnification in Mac OS X</title>
    <published>2006-09-30T20:44:06+00:00</published>
    <updated>2006-09-30T20:44:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/09/30/native-magnification-in-mac-os-x/"/>
    <id>https://chuyeow.wtf/2006/09/30/native-magnification-in-mac-os-x/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/09/30/native-magnification-in-mac-os-x/">&lt;p&gt;Mac OS X Tiger (10.4) had an minor update (version 10.4.8) not long ago and while the &lt;a href=&quot;http:&#x2F;&#x2F;docs.info.apple.com&#x2F;article.html?artnum=304200&quot;&gt;changelog&lt;&#x2F;a&gt; seemed pretty uninteresting on the most part, there was one unannounced feature that&#x27;s pretty cool - &lt;a href=&quot;http:&#x2F;&#x2F;daringfireball.net&#x2F;2006&#x2F;09&#x2F;zoom_using_scroll_wheel&quot;&gt;Zoom Using Scroll Wheel&lt;&#x2F;a&gt;. If you&#x27;ve already updated to 10.4.8, you can try it out for yourself now by holding the Ctrl key and scrolling up the mousewheel. Cool, yeah? You can still do whatever you want in the magnified view (I took a screenshot) so it&#x27;s not simply a cheap static magnification (just as Expose windows aren&#x27;t static screen captures of your open windows).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;mac-os-x-zoom.png&quot; alt=&quot;Screenshot of Digg taken with Mac OS X new zooming feature&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Duplicating CDs&#x2F;DVDs in Mac OS X</title>
    <published>2006-09-30T20:42:52+00:00</published>
    <updated>2006-09-30T20:42:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/09/30/duplicating-cdsdvds-in-mac-os-x/"/>
    <id>https://chuyeow.wtf/2006/09/30/duplicating-cdsdvds-in-mac-os-x/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/09/30/duplicating-cdsdvds-in-mac-os-x/">&lt;p&gt;When my dad asked me to duplicate a video CD, I decided I&#x27;d try to get it done on my new Mac (to, you know, get wow-ed by how easy it is on a Mac compared to the old way I used to do things on Windows). As it turns out, I was rather disappointed by the default Mac OS X burning functionality provided via Finder and Disk Utility, though I&#x27;d say it&#x27;s still way ahead of the default disc burning in Windows XP. Burn folders? Dig them. Creating and customizing .dmg files (disk images) and then burning them? Love the UNIX toolbox-y goodness of how all this is done in Disk Utility.app. Duplicating CDs or DVDs? Not that great.&lt;&#x2F;p&gt;
&lt;p&gt;Correct me if I&#x27;m wrong, but I couldn&#x27;t get the &quot;create image from CD, then burn the image&quot; method to work with Disk Utility - it created a .dmg file without my files in it and I didn&#x27;t burn it because I didn&#x27;t want to risk getting a coaster.&lt;&#x2F;p&gt;
&lt;p&gt;I asked a couple of Mac users and they didn&#x27;t know how to duplicate CDs easily as well (one of them copied the files to disc and then burn them onto the blank disc). Some Googling turned up &lt;a href=&quot;http:&#x2F;&#x2F;forums.macrumors.com&#x2F;showthread.php?t=128662&quot;&gt;this thread&lt;&#x2F;a&gt; which, while rather old, seems to show that there&#x27;s no easy way to duplicate a disc with Mac OS X.&lt;&#x2F;p&gt;
&lt;p&gt;Hmm, this just feels wrong to me, or more likely, Apple decided to intentionally leave disc duplication out (probably for digital rights issues or the like). I&#x27;m really missing the functionaliy that Nero provides with an easy &quot;Duplicate disc&quot; function. Does anyone know how to easily duplicate a disc in Mac OS X or can recommend a good application that does so?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Vibrant Ink TextMate theme for Eclipse</title>
    <published>2006-09-28T20:40:02+00:00</published>
    <updated>2006-09-28T20:40:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/09/28/vibrant-ink-textmate-theme-for-eclipse/"/>
    <id>https://chuyeow.wtf/2006/09/28/vibrant-ink-textmate-theme-for-eclipse/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/09/28/vibrant-ink-textmate-theme-for-eclipse/">&lt;p&gt;Spent some time tinkering with Eclipse&#x27;s preferences today as I was really missing the &lt;a href=&quot;encytemedia.com&#x2F;blog&#x2F;articles&#x2F;2006&#x2F;01&#x2F;03&#x2F;textmate-vibrant-ink-theme-and-prototype-bundle&quot;&gt;Vibrant Ink theme for TextMate&lt;&#x2F;a&gt; and Eclipse is looking pretty now...&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;eclipse-textmate-snippet.png&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The only thing that I still couldn&#x27;t figure out was how to change the color of the folding&#x2F;breakpoint bar next to the gutter. And I&#x27;m really starting to like the Monaco font that seems to be the default programmer&#x27;s font on Macs (I found a &lt;a href=&quot;http:&#x2F;&#x2F;www.system7designs.com&#x2F;blog&#x2F;textmate-envy-aka-monaco-font-for-windows&#x2F;&quot;&gt;Windows version of Monaco&lt;&#x2F;a&gt; but haven&#x27;t tried it).&lt;&#x2F;p&gt;
&lt;p&gt;I guess TextMate envy still exists even when you are on a Mac with a registered version of TextMate heh.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Here&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;wp-content&#x2F;uploads&#x2F;2006&#x2F;09&#x2F;Eclipse%20preferences.epf&quot;&gt;my Eclipse preferences&lt;&#x2F;a&gt; (I just did a File -&gt; Export -&gt; Preferences). It seems Eclipse only allows a full export&#x2F;import so you may want to be careful to &lt;strong&gt;backup your existing preferences&lt;&#x2F;strong&gt; before importing mine.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>So what&#x27;s been happening?</title>
    <published>2006-09-22T20:38:59+00:00</published>
    <updated>2006-09-22T20:38:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/09/22/so-whats-been-happening/"/>
    <id>https://chuyeow.wtf/2006/09/22/so-whats-been-happening/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/09/22/so-whats-been-happening/">&lt;p&gt;No I didn&#x27;t &quot;die&quot; again... Here&#x27;s what&#x27;s been happening lately:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I got a MacBook Pro. I&#x27;ve been rather blown away by the whole Mac OS X experience. Yes, I do have some gripes, but it&#x27;s one hell of a nice OS. I hope to write up on my whole &quot;Switch&quot; experience sometime soon.&lt;&#x2F;li&gt;
&lt;li&gt;I threw up a quick redesign of the blog... As you can tell (unless you&#x27;re reading the RSS feed) it&#x27;s been &quot;in progress&quot; for over a week - this coincides with the purchase of my MacBook Pro (&lt;em&gt;*wink*&lt;&#x2F;em&gt;). In any case, I wanted to get Windows running on the MacBook so I could test the site in Internet Explorer - to that end, I&#x27;ve setup Parallels (see &lt;a href=&quot;http:&#x2F;&#x2F;www.lifehacker.com&#x2F;software&#x2F;parallels&#x2F;hack-attack-sidebyside-windows-and-mac-os-with-parallels-201451.php&quot;&gt;Lifehacker article on Parallels&lt;&#x2F;a&gt;) but it&#x27;s way too slow on 512MB of RAM. Hopefully the 2GB RAM upgrade that&#x27;s been out of stock happens soon.&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;ve also been working on a &lt;a href=&quot;http:&#x2F;&#x2F;guildcenter.net&#x2F;&quot;&gt;Rails project&lt;&#x2F;a&gt; with &lt;a href=&quot;http:&#x2F;&#x2F;jutopia.tirsen.com&#x2F;&quot;&gt;Jon Tirsen&lt;&#x2F;a&gt; and Michael Lee (who happen to work at ThoughtWorks). Jon has been busy lately (doing some really exciting stuff!), so I&#x27;ve only had the pleasure of working closely with Mike.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Job Ad: Java Web Developer for Bezurk</title>
    <published>2006-09-22T20:37:35+00:00</published>
    <updated>2006-09-22T20:37:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/09/22/job-ad-java-web-developer-for-bezurk/"/>
    <id>https://chuyeow.wtf/2006/09/22/job-ad-java-web-developer-for-bezurk/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/09/22/job-ad-java-web-developer-for-bezurk/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;bezurk.com&#x2F;&quot;&gt;We&lt;&#x2F;a&gt;&#x27;re on the lookout for a &lt;a href=&quot;http:&#x2F;&#x2F;singapore.craigslist.org&#x2F;sof&#x2F;209737528.html&quot;&gt;Java Web Developer (ad on Craigslist)&lt;&#x2F;a&gt;. I managed to get &quot;Ruby on Rails&quot; into the ad copy somewhere heh - it gets kinda lonely working in a development team of Java heads. Anyway, we&#x27;re looking for a great Java developer to work with us in Singapore - if you&#x27;re up for it, &lt;a href=&quot;mailto:devel@bezurk.com&quot;&gt;send us your resume&lt;&#x2F;a&gt;. I would really like to get someone with some interest in Rails development to work together with on some upcoming (Rails) projects (you know, like after all the real work is done).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Excluding specific tests with rake</title>
    <published>2006-09-05T20:36:46+00:00</published>
    <updated>2006-09-05T20:36:46+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/09/05/excluding-specific-tests-with-rake/"/>
    <id>https://chuyeow.wtf/2006/09/05/excluding-specific-tests-with-rake/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/09/05/excluding-specific-tests-with-rake/">&lt;p&gt;Sometimes, I just want to skip just that one test when I run my tests with &lt;code&gt;rake test&lt;&#x2F;code&gt; because it takes much longer than other tests, and it gets in the way of rapid iterative cycles when coding. I looked around and haven&#x27;t found a way to do that with &lt;a href=&quot;http:&#x2F;&#x2F;rake.rubyforge.org&#x2F;&quot;&gt;rake&lt;&#x2F;a&gt;, so I set down to writing a custom rake task.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;namespace :test do
  namespace :units do
    Rake::TestTask.new(:excluding =&gt; &#x27;db:test:prepare&#x27;) do |t|
      if ENV[&#x27;THESE&#x27;]
        def t.file_list
          exclusion_patterns = ENV[&#x27;THESE&#x27;].split(&#x27;,&#x27;)
          unit_tests = FileList[&#x27;test&#x2F;unit&#x2F;**&#x2F;*_test.rb&#x27;].select do |path|
            excluded = exclusion_patterns.select { |excl| &#x2F;#{excl}&#x2F;.match(path) }
            p &quot;Excluding #{path}&quot; if not excluded.empty?
            excluded.empty?
          end
        end
      else
        p &#x27;Running all unit tests (specify THESE=&quot;pattern1, pattern2&quot; to exclude files)&#x27;
        t.pattern = &#x27;test&#x2F;unit&#x2F;**&#x2F;*_test.rb&#x27;
      end
      t.libs &lt;&lt; &#x27;test&#x27;
      t.verbose = true
    end
    Rake::Task[&#x27;test:units:excluding&#x27;].comment = &#x27;Run unit tests with exclusions (specify exclusions with THESE=&quot;pattern1,pattern2&quot;)&#x27;
  end
end
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Of course, &lt;code&gt;rake test:recent&lt;&#x2F;code&gt; and &lt;code&gt;rake test:uncommitted&lt;&#x2F;code&gt; would suffice for most purposes, but there are times when I just want to not run that a particular test or tests because they just take too long (and by definition, get in the way) and I&#x27;m pretty sure they won&#x27;t be broken. (Always run all the tests before a commit though, don&#x27;t be naughty.)&lt;&#x2F;p&gt;
&lt;p&gt;You can run the task like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;rake test:units:excluding THESE=&quot;item_test,atte\w*&quot;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;ins&gt;Update: As it turns out, the task descriptions weren&#x27;t being set correctly. &lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;railties&#x2F;lib&#x2F;tasks&#x2F;testing.rake?rev=5016&quot;&gt;Revision 5016&lt;&#x2F;a&gt; fixes this so &lt;code&gt;rake -T&lt;&#x2F;code&gt; shows the task descriptions properly.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Some functional testing gotchas in Ruby on Rails</title>
    <published>2006-09-03T20:35:52+00:00</published>
    <updated>2006-09-03T20:35:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/09/03/some-functional-testing-gotchas-in-ruby-on-rails/"/>
    <id>https://chuyeow.wtf/2006/09/03/some-functional-testing-gotchas-in-ruby-on-rails/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/09/03/some-functional-testing-gotchas-in-ruby-on-rails/">&lt;p&gt;I&#x27;ve been writing lots of functional tests lately and came across several unexpected gotchas. Seeing as how forgetful I am recently, I&#x27;ll jot them down here (and hopefully benefit anyone else who comes across the same problems).&lt;&#x2F;p&gt;
&lt;h3&gt;Testing flash.now&lt;&#x2F;h3&gt;
&lt;p&gt;Testing the contents of the flash.now, somewhat surprisingly, can&#x27;t be done with code like this:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;assert_equal &#x27;Unable to activate your account.&#x27;,
  flash.now[:error]
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;flash.now[:error]&lt;&#x2F;code&gt; would be &lt;code&gt;nil&lt;&#x2F;code&gt;, in your functional test, and a quick lookup on Google brought me to &lt;a href=&quot;http:&#x2F;&#x2F;wiki.rubyonrails.org&#x2F;rails&#x2F;pages&#x2F;HowToTestFlash.Now&#x2F;&quot;&gt;HowToTestFlash.Now on the Rails wiki&lt;&#x2F;a&gt;. Apparently, Rails renders the flash in the view and then proceeds to clear the contents of flash.now (so it isn&#x27;t accessible in your functional test). So, you&#x27;d have to test the contents of the rendered page, instead of testing the flash itself:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;assert_tag :tag =&gt; &#x27;div&#x27;,
               :attributes =&gt; { :class =&gt; &#x27;flash error&#x27; },
               :content =&gt; &#x27;Unable to activate your account.&#x27;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3&gt;Asserting cookies&lt;&#x2F;h3&gt;
&lt;p&gt;This one&#x27;s particularly annoying - trying to assert that cookies are set by your controllers. Unlike what was written in the &lt;a href=&quot;http:&#x2F;&#x2F;manuals.rubyonrails.com&#x2F;read&#x2F;chapter&#x2F;28&quot;&gt;Rails manual on testing&lt;&#x2F;a&gt; (granted, it&#x27;s rather well-known that the manuals are somewhat outdated), you cannot retrieve cookies using a Symbol as an index into the &lt;code&gt;cookies&lt;&#x2F;code&gt; hash in your functional tests.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;cookies[:auth_token] = {
  :value =&gt; session[:user].remember_token,
  :expires =&gt; session[:user].remember_token_expires_at
}
&lt;p&gt;assert cookies[:auth_token]  # nil
assert cookies[&#x27;auth_token&#x27;]  # This works.
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;www.pluitsolutions.com&#x2F;&quot;&gt;Herry&lt;&#x2F;a&gt; for &lt;a href=&quot;http:&#x2F;&#x2F;www.pluitsolutions.com&#x2F;2006&#x2F;08&#x2F;02&#x2F;rails-functional-test-with-cookie&#x2F;&quot;&gt; pointing this out &lt;&#x2F;a&gt; - it saved me an exercise in frustration.&lt;&#x2F;p&gt;
&lt;p&gt;Yet another cookie testing gotcha is testing for the deletion of cookies (example use case: deleting a users cookie after he logs out). So you may do this in your controller:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;cookies.delete :auth_token&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And expect this to pass in your test:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;assert_nil cookies[&#x27;auth_token&#x27;]&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;But nope, instead of setting the cookie to &lt;code&gt;nil&lt;&#x2F;code&gt;, the cookie is actually emptied.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;assert cookies[&#x27;auth_token&#x27;].empty?  # This works.&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I just used wrote my own custom assertion (there is an assert_cookie plugin around but I didn&#x27;t think this justified adding another plugin to the application, not just yet):&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def assert_no_cookie(cookie_name)
  cookies[cookie_name].nil?
    || cookies[cookie_name].empty?
end
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;ins&gt;Update: as it turns out, &lt;code&gt;assert_no_cookie&lt;&#x2F;code&gt; and &lt;code&gt;assert_cookie_equals&lt;&#x2F;code&gt; exist as custom assertions in ActionPack (&lt;a href=&quot;http:&#x2F;&#x2F;dev.rubyonrails.org&#x2F;browser&#x2F;trunk&#x2F;actionpack&#x2F;lib&#x2F;action_controller&#x2F;assertions&#x2F;deprecated_assertions.rb&quot;&gt;source&lt;&#x2F;a&gt;), but have been deprecated in favor of the &lt;code&gt;cookies&lt;&#x2F;code&gt; collection. Still, looking up the &lt;code&gt;cookies&lt;&#x2F;code&gt; collection with a Symbol but having it return &lt;code&gt;nil&lt;&#x2F;code&gt; is unexpected behavior considering the inline documentation says it should work.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>From Typo to Mephisto</title>
    <published>2006-09-01T20:34:25+00:00</published>
    <updated>2006-09-01T20:34:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/09/01/from-typo-to-mephisto/"/>
    <id>https://chuyeow.wtf/2006/09/01/from-typo-to-mephisto/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/09/01/from-typo-to-mephisto/">&lt;p&gt;So with the usual fickle-mindedness, I&#x27;ve changed my blog software from &lt;a href=&quot;http:&#x2F;&#x2F;typosphere.org&#x2F;&quot;&gt;Typo&lt;&#x2F;a&gt; to &lt;a href=&quot;http:&#x2F;&#x2F;mephistoblog.com&#x2F;&quot;&gt;Mephisto&lt;&#x2F;a&gt;. Well, it wasn&#x27;t so much based on a whim - there were some reasons I wanted to stop using Typo:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;For some reason, Typo is very unstable for me on my VPS with 160MB RAM. I deploy Typo on a mongrel_cluster of 2 mongrels, fronting it with Apache 2.2 + mod_proxy_balancer, and all 160MB RAM &lt;strong&gt;and&lt;&#x2F;strong&gt; 192MB of swap is used up whenever I post an article or sweep the cache. Comments also take noticeably longer to post on my blog than on other Typo blogs. I&#x27;m not sure what exactly I&#x27;ve done wrong.&lt;&#x2F;li&gt;
&lt;li&gt;I often get an obscure NilClass error that screws up the front page whenever pages are regenerated (often caused by someone posting a comment or an article).&lt;&#x2F;li&gt;
&lt;li&gt;Changing the blog&#x27;s design requires one to create or edit an existing Typo theme - I kinda missed WordPress&#x27;s Web-based template editing. This was a significant roadblock to me ever changing the look and feel of my Typo blog.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Coincidentally, my urge to swap to Mephisto coincided with the &lt;a href=&quot;http:&#x2F;&#x2F;mephistoblog.com&#x2F;2006&#x2F;8&#x2F;31&#x2F;mephisto-immortus-released&quot;&gt;release of mephisto 0.6 (Immortus)&lt;&#x2F;a&gt; just today, and after some minor hiccups, I managed to get Mephisto up and running with my articles imported from Typo. (Still couldn&#x27;t get Capistrano to play well though, which I&#x27;m guessing is due to Rails version conflicts - I guess I&#x27;ll just have to do with the release version.)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;mephisto.stikipad.com&#x2F;&quot;&gt;Documentation&lt;&#x2F;a&gt; is rather sparse at the moment, especially on how to &lt;a href=&quot;http:&#x2F;&#x2F;mephisto.stikipad.com&#x2F;help&#x2F;show&#x2F;Converting+Typo+to+Mephisto&quot;&gt;convert from Typo to Mephisto&lt;&#x2F;a&gt; (I updated that wiki page while I was there). I dug around in Mephisto 0.6â€™s source and found the converters in vendor&#x2F;plugins&#x2F;mephisto_converter. Not sure if there is a web interface to this - either way, things worked almost perfectly just running this command:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;script&#x2F;runner &quot;Mephisto.convert_from :typo&quot; -e production&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You need to create a typo entry in database.yml that points to your existing Typo database. Also, the conversion will fail if any of your Typo users and email addresses are the same as the default Mephisto user admin. To avoid this just change the Mephisto user(s) login and email to something else.&lt;&#x2F;p&gt;
&lt;p&gt;So there&#x27;s that, hopefully some time this year I&#x27;ll update the look and feel.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Essential plugins for Trac</title>
    <published>2006-08-24T20:32:09+00:00</published>
    <updated>2006-08-24T20:32:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/24/essential-plugins-for-trac/"/>
    <id>https://chuyeow.wtf/2006/08/24/essential-plugins-for-trac/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/24/essential-plugins-for-trac/">&lt;p&gt;I&#x27;ve been setting up several &lt;a href=&quot;http:&#x2F;&#x2F;trac.edgewall.org&#x2F;&quot;&gt;Trac&lt;&#x2F;a&gt; installations recently, and while Trac by itself is already pretty awesome (I love it&#x27;s simplicity and functionality that doesn&#x27;t get in the way), I was pretty dismayed to discover that administration isn&#x27;t that great.  Configuring Trac is a matter of (more) hacking at the command line with the &lt;a href=&quot;http:&#x2F;&#x2F;trac.edgewall.org&#x2F;wiki&#x2F;TracAdmin&quot;&gt;trac-admin&lt;&#x2F;a&gt; script, and user administration is managed with htpasswd or whatever authentication scheme that you choose (point being, you can&#x27;t manage users via Trac itself).&lt;&#x2F;p&gt;
&lt;p&gt;Thankfully, there are some plugins that you can install to alleviate the situation. Trac itself publishes the &lt;a href=&quot;http:&#x2F;&#x2F;trac.edgewall.org&#x2F;wiki&#x2F;WebAdmin&quot;&gt;WebAdmin plugin&lt;&#x2F;a&gt;, which is slated for inclusion in Trac in &lt;a href=&quot;http:&#x2F;&#x2F;trac.edgewall.org&#x2F;milestone&#x2F;0.11&quot;&gt;Trac 0.11&lt;&#x2F;a&gt;. This adds a web interface to trac-admin and it&#x27;s pretty darned useful when used with two other plugins: &lt;a href=&quot;http:&#x2F;&#x2F;trac-hacks.org&#x2F;wiki&#x2F;AccountManagerPlugin&quot;&gt;Account Manager plugin&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;trac-hacks.org&#x2F;wiki&#x2F;WebAdminUsersPlugin&quot;&gt;WebAdmin Users plugin&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;trac-hacks.org&#x2F;wiki&#x2F;AccountManagerPlugin&quot;&gt;Account Manager plugin&lt;&#x2F;a&gt; adds HTML form-based login instead of the default HTTP authentication with plain olde Trac (plus user registration and changing of passwords). I&#x27;ll let you in on a secret - I never managed to configure my Trac installs properly to use HTTP auth, but with this plugin it just worked.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;trac-hacks.org&#x2F;wiki&#x2F;WebAdminUsersPlugin&quot;&gt;WebAdmin Users plugin&lt;&#x2F;a&gt; let&#x27;s you add&#x2F;remove users via WebAdmin plugin.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;trac-web-admin-users-plugin-manage-user.png&quot; alt=&quot;Managing user account with Trac WebAdmin Users&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;By the way, if anyone has got a Linux binary for mod_dav_svn.so for Apache 2.2, let me know - I&#x27;m too lazy to go through the whole trouble of compiling it.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>This blog is related to &quot;Cartoon Porn&quot;</title>
    <published>2006-08-18T20:12:15+00:00</published>
    <updated>2006-08-18T20:12:15+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/18/this-blog-is-related-to-cartoon-porn/"/>
    <id>https://chuyeow.wtf/2006/08/18/this-blog-is-related-to-cartoon-porn/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/18/this-blog-is-related-to-cartoon-porn/">&lt;p&gt;Got this in my email recently:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Respected Webmaster,&lt;&#x2F;p&gt;
&lt;p&gt;I found your &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;29&#x2F;nice-comment-postbit-from-vantanorg&#x2F;&quot;&gt;page&lt;&#x2F;a&gt; on Yahoo! when I was searching for Free Cartoon Porn (this topic is related to my site). You are running a great website and I would be happy to place your link on my site. If you would like to exchange text links with me, please submit your website on &lt;del&gt;deleted link&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m sure you know that links exchange will help both of us to get better positions on search engines and have more visitors to our websites.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;I went to Yahoo! and &lt;a href=&quot;http:&#x2F;&#x2F;search.yahoo.com&#x2F;search?p=free+cartoon+porn+redemption&quot;&gt;searched for &quot;free cartoon porn redemption&quot;&lt;&#x2F;a&gt; and sure enough, that link was up there. A bunch of comment spam qualified my site for a link exchange, yippee! I was pretty amused.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Beware of form parameters named &#x27;submit&#x27;</title>
    <published>2006-08-16T20:10:35+00:00</published>
    <updated>2006-08-16T20:10:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/16/beware-of-form-parameters-named-submit/"/>
    <id>https://chuyeow.wtf/2006/08/16/beware-of-form-parameters-named-submit/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/16/beware-of-form-parameters-named-submit/">&lt;p&gt;Well, that is if you are ever going to be submitting the form via Javascript. &lt;a href=&quot;http:&#x2F;&#x2F;www.bezurk.com&#x2F;&quot;&gt;We&lt;&#x2F;a&gt; had to generate forms on the fly and POST them behind the scenes (i.e. in hidden &amp;lt;iframe&amp;gt;s), and got a decent script going, until a particular case failed for no apparent reason. I finally found that the problem was due to a form parameter named &quot;submit&quot; that overwrote the submit() function of the &amp;lt;form&amp;gt;. That&#x27;s, of course, after looking at all the wrong places.&lt;&#x2F;p&gt;
&lt;p&gt;So this doesn&#x27;t work:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;html&quot;&gt;&amp;lt;form id=&quot;ninjaForm&quot; action=&quot;&#x2F;come&#x2F;get&#x2F;some&quot; method=&quot;post&quot;&amp;gt;
  &amp;lt;input id=&quot;someParam&quot; name=&quot;someParam&quot;
    type=&quot;hidden&quot; value=&quot;Some value&quot; &#x2F;&amp;gt;
  &amp;lt;input id=&quot;submit&quot; name=&quot;submit&quot;
    type=&quot;hidden&quot; value=&quot;Start search&quot; &#x2F;&amp;gt;
&amp;lt;&#x2F;form&gt;
&amp;lt;script type=&quot;text&#x2F;javascript&quot;&amp;gt;
  setTimeout(&quot;document.ninjaForm.submit()&quot;, 200);
&amp;lt;&#x2F;script&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;When the browser tries to execute &quot;document.ninjaForm.submit()&quot;, it sees the &quot;submit&quot; form field (which overwrote the submit() function) instead and complains that &quot;submit is not a function&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Do this instead:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;html&quot;&gt;&amp;lt;form id=&quot;ninjaForm&quot; action=&quot;&#x2F;come&#x2F;get&#x2F;some&quot; method=&quot;post&quot;&amp;gt;
  &amp;lt;script type=&quot;text&#x2F;javascript&quot;&amp;gt;
    &#x2F;&#x2F; Alias the submit function in case there is a &#x27;submit&#x27; param.
    ninjaForm = document.getElementById(&#x27;ninjaForm&#x27;);
    ninjaForm.__submit = ninjaForm.submit;
  &amp;lt;&#x2F;script&amp;gt;
  &amp;lt;input id=&quot;someParam&quot; name=&quot;someParam&quot;
    type=&quot;hidden&quot; value=&quot;Some value&quot; &#x2F;&amp;gt;
  &amp;lt;input id=&quot;submit&quot; name=&quot;submit&quot;
    type=&quot;hidden&quot; value=&quot;Start search&quot; &#x2F;&amp;gt;
&amp;lt;&#x2F;form&amp;gt;
&amp;lt;script type=&quot;text&#x2F;javascript&quot;&amp;gt;
  setTimeout(&quot;ninjaForm.__submit();&quot;, 200);
&amp;lt;&#x2F;script&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That&#x27;s one way to workaround, of course, and we can get away with the &quot;ninjaForm&quot; global in this case.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Application error (Rails) on Google search results</title>
    <published>2006-08-15T20:09:22+00:00</published>
    <updated>2006-08-15T20:09:22+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/15/application-error-rails-on-google-search-results/"/>
    <id>https://chuyeow.wtf/2006/08/15/application-error-rails-on-google-search-results/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/15/application-error-rails-on-google-search-results/">&lt;p&gt;I did a &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com.sg&#x2F;search?q=rimuhosting&quot;&gt;search on Google for &quot;Rimuhosting&quot;&lt;&#x2F;a&gt; today, some time after I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;articles&#x2F;2006&#x2F;08&#x2F;10&#x2F;moving-to-rimuhosting-vps&quot;&gt;signed up with them&lt;&#x2F;a&gt;, and hey, there&#x27;s my blog in &lt;em&gt;3rd spot&lt;&#x2F;em&gt; - is that some mad &lt;acronym title=&quot;Search Engine Optimization&quot;&gt;SEO&lt;&#x2F;acronym&gt; skillz or what. And then &quot;oooh, there&#x27;s an &#x27;Application error (Rails)&#x27; result coming out, that&#x27;s not good&quot;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;rimuhosting-google-search-rails-error.png&quot; alt=&quot;&#x27;Application error (Rails)&#x27; on Google&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I thought it was amusing - Google must have crawled my site just as I had deployment troubles (yeah it was a &lt;em&gt;smart&lt;&#x2F;em&gt; move leaving MySQL to it&#x27;s default settings &lt;em&gt;and&lt;&#x2F;em&gt; using the InnoDB storage engine on a memory-starved VPS). All seems fine now though I&#x27;m still somewhat amazed at the hungry &lt;a href=&quot;http:&#x2F;&#x2F;mongrel.rubyforge.org&#x2F;&quot;&gt;Mongrels&lt;&#x2F;a&gt; (at 25-40MB per Mongrel process, these things run more like St. Bernards). (A shout out to &lt;a href=&quot;http:&#x2F;&#x2F;ryandaigle.com&#x2F;&quot;&gt;Ryan Daigle&lt;&#x2F;a&gt; who has been giving me some Rails deployment advice.)&lt;&#x2F;p&gt;
&lt;p&gt;By the way, the &quot;mad &lt;acronym title=&quot;Search Engine Optimization&quot;&gt;SEO&lt;&#x2F;acronym&gt; skillz&quot; comment was a joke, I wasn&#x27;t at all surprised to be honest, Google just loves blogs (and they still do, after all this time of I&#x27;ve been not blogging).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Ruby on Rails satire blog</title>
    <published>2006-08-14T20:06:59+00:00</published>
    <updated>2006-08-14T20:06:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/14/ruby-on-rails-satire-blog/"/>
    <id>https://chuyeow.wtf/2006/08/14/ruby-on-rails-satire-blog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/14/ruby-on-rails-satire-blog/">&lt;h4&gt;Javac programmers are Very Slow and he is Agile&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;railsblob.blogspot.com&#x2F;&quot;&gt;My Rails Blob&lt;&#x2F;a&gt; pokes fun at the cult of Ruby on Rails via satire. Recommended blog posts: &lt;a href=&quot;http:&#x2F;&#x2F;railsblob.blogspot.com&#x2F;2006&#x2F;08&#x2F;rubby-links-on-ww-w.html&quot;&gt;Rubby Links on the W.W. w.&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;railsblob.blogspot.com&#x2F;2006&#x2F;08&#x2F;upgradeing-rails-securiety-through.html&quot;&gt; Upgradeing Rails: Securiety through Obscenity&lt;&#x2F;a&gt; [&lt;em&gt;sic&lt;&#x2F;em&gt;]. I&#x27;ve subscribed to the RSS feed.&lt;&#x2F;p&gt;
&lt;h4&gt;NO! - Bad User!!!&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;thedailywtf.com&#x2F;&quot;&gt;The Daily WTF&lt;&#x2F;a&gt; has this monthly collection of hilarious pop-up error blunders, and as usual this month&#x27;s a gem: &lt;a href=&quot;http:&#x2F;&#x2F;thedailywtf.com&#x2F;forums&#x2F;thread&#x2F;85750.aspx&quot;&gt;Pop-up Potpourri: Announced By God&lt;&#x2F;a&gt;. Must read.&lt;&#x2F;p&gt;
&lt;p&gt;Developers would find this particularly funny (I did):&lt;&#x2F;p&gt;
&lt;div class=&quot;image&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;wtf2.jpg&quot; alt=&quot;Bad user!&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And this one&#x27;s for my boss, Gary (remember the &#x27;Abort&#x2F;Retry&#x2F;Ignore&#x27; you saw at the MRT station?)&lt;&#x2F;p&gt;
&lt;div class=&quot;image&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;lite.jpg&quot; alt=&quot;Next stop: null&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
</content>
  </entry>
  <entry>
    <title>Extract Any Archive with Ruby, Slimtimer, Feedalizer</title>
    <published>2006-08-12T19:58:06+00:00</published>
    <updated>2006-08-12T19:58:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/12/extract-any-archive-with-ruby-slimtimer-feedalizer/"/>
    <id>https://chuyeow.wtf/2006/08/12/extract-any-archive-with-ruby-slimtimer-feedalizer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/12/extract-any-archive-with-ruby-slimtimer-feedalizer/">&lt;p&gt;A bunch of cool stuff I found over the weekend that didn&#x27;t individually deserve a blog post, but I thought would be worth sharing.&lt;&#x2F;p&gt;
&lt;h4&gt;Extract Any Archive with Ruby&lt;&#x2F;h4&gt;
&lt;p&gt;This is really neat if you could never remember what commands or command-line arguments you need to extracting archives (.zip, .tar.gz, .tar.bz2 - those kinds of archives).&lt;&#x2F;p&gt;
&lt;p&gt;With this &lt;a href=&quot;http:&#x2F;&#x2F;martin.ankerl.org&#x2F;2006&#x2F;08&#x2F;11&#x2F;program-e-extract-any-archive&#x2F;&quot;&gt;Extract Any Archive&lt;&#x2F;a&gt; script written in Ruby, instead of&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;tar jxvf DonkeyPr0n.tar.bz2&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;you can simply do&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;e DonkeyPr0n.tar.bz2&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Instant gratification!&lt;&#x2F;p&gt;
&lt;h4&gt;Slim Timer&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.slimtimer.com&#x2F;&quot;&gt;SlimTimer&lt;&#x2F;a&gt; is one another of those productivity-keep-track-of-your-todo-list type applications - I like it because seeing the time ticking away gets you motivated on sticking to the task at hand. You can stick it into your Firefox sidebar and all that AJAX-y stuff makes it behave like a normal application.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;slim-timer-firefox-sidebar.png&quot; alt=&quot;SlimTimer running in a Firefox Web panel&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4&gt;Feedalizer - transform web pages into RSS feeds&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;blog.yanime.org&#x2F;&quot;&gt;Choon Keat&lt;&#x2F;a&gt; pointed this out to me recently: &lt;a href=&quot;http:&#x2F;&#x2F;termos.vemod.net&#x2F;feedalizer&quot;&gt;Feedalizer&lt;&#x2F;a&gt; (backed by &lt;a href=&quot;http:&#x2F;&#x2F;code.whytheluckystiff.net&#x2F;hpricot&#x2F;&quot;&gt;Hpricot&lt;&#x2F;a&gt;). I played around with it and it was so easy (and fun) to use. Whipped up a &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;mongrel.xml&quot;&gt;Mongrel news feed&lt;&#x2F;a&gt; (&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;mongrel-news-feed.rb-txt&quot;&gt;code&lt;&#x2F;a&gt;) for &lt;a href=&quot;http:&#x2F;&#x2F;mongrel.rubyforge.org&#x2F;news.html&quot;&gt;Mongrel news&lt;&#x2F;a&gt; (which didn&#x27;t have an RSS feed). The hardest part was figuring out which Hpricot methods to use to parse the bits I needed.&lt;&#x2F;p&gt;
&lt;h4&gt;Served by Apache 2.2, mod_proxy_balancer, and Mongrel&lt;&#x2F;h4&gt;
&lt;p&gt;I got off my butt and set up Apache 2.2 with mod_proxy_balancer to load-balance a cluster of Mongrel processes, if you&#x27;re still seeing this, that means it hasn&#x27;t crashed, yet :p. Just kidding heh - I&#x27;m finding this setup pretty stable, though there was once the mongrel processes seem to have been over-loaded with requests (with 96MB RAM I can only run 2 processes, and even then I run out of memory real fast due to automated comment spam - does anyone have any solutions to blocking automated comment spammers before they even hit your website?).&lt;&#x2F;p&gt;
&lt;p&gt;In any case, I learnt quite a bit as I was setting up my deployment environment for Rails, and hopefully someone will be able to benefit from that when I finish my post on the topic.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Moved to Rimuhosting</title>
    <published>2006-08-11T19:58:04+00:00</published>
    <updated>2006-08-11T19:58:04+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/11/moved-to-rimuhosting/"/>
    <id>https://chuyeow.wtf/2006/08/11/moved-to-rimuhosting/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/11/moved-to-rimuhosting/">&lt;p&gt;If you&#x27;re seeing this, that means the new DNS settings have finally resolved and you&#x27;re being served by a plain old &lt;a href=&quot;http:&#x2F;&#x2F;mongrel.rubyforge.org&#x2F;&quot;&gt;Mongrel&lt;&#x2F;a&gt; server instance on my Rimuhosting VPS. It&#x27;s &lt;em&gt;so&lt;&#x2F;em&gt; much faster than before.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;mongrel-server-spy.png&quot; alt=&quot;Server spy extension showing my site running on Mongrel&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Before you start lecturing me on running just Mongrel, let me just say that now isn&#x27;t right time to get a proper setup - I&#x27;ll get it done over the weekend. There&#x27;re so many choices (combinations of Apache, lighttpd, pound, pen, mongrel, mongrel_cluster), I think I&#x27;m due for some reading before making a choice.&lt;&#x2F;p&gt;
&lt;p&gt;If you see any bugs, let me know! Of course, any deployment-related advice will be appreciated.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Moving to Rimuhosting VPS</title>
    <published>2006-08-10T19:54:28+00:00</published>
    <updated>2006-08-10T19:54:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/10/moving-to-rimuhosting-vps/"/>
    <id>https://chuyeow.wtf/2006/08/10/moving-to-rimuhosting-vps/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/10/moving-to-rimuhosting-vps/">&lt;p&gt;After being plagued with performance issues running &lt;a href=&quot;http:&#x2F;&#x2F;www.typosphere.org&#x2F;&quot;&gt;Typo&lt;&#x2F;a&gt; (the blog software on which this blog currently runs) on &lt;a href=&quot;http:&#x2F;&#x2F;dreamhost.com&#x2F;&quot;&gt;Dreamhost&lt;&#x2F;a&gt;, I decided it was time to give in and get a &lt;acronym title=&quot;Virtual Private Server&quot;&gt;VPS&lt;&#x2F;acronym&gt; once again. I was previously with &lt;a href=&quot;http:&#x2F;&#x2F;linode.com&#x2F;&quot;&gt;Linode.com&lt;&#x2F;a&gt; (they have a great control panel where you can drop in the distro you want - still have screenshots somewhere for an unpublished post), and then &lt;a href=&quot;http:&#x2F;&#x2F;jvds.com&#x2F;&quot;&gt;JVDS&lt;&#x2F;a&gt; (good hosting, usually quick replies to my support tickets, but slow to push out a VPS control panel they&#x27;ve been promising), running Gentoo on both VPSs. Right now, I&#x27;m on a shared hosting plan with &lt;a href=&quot;http:&#x2F;&#x2F;dreamhost.com&#x2F;&quot;&gt;Dreamhost&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Well, &lt;a href=&quot;http:&#x2F;&#x2F;dreamhost.com&#x2F;&quot;&gt;Dreamhost&lt;&#x2F;a&gt; has been good to me - I got so many referral credits from them that they paid for my subscription many times over after I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;10&#x2F;11&#x2F;dreamhost-hosting-at-077month&#x2F;&quot;&gt;posted about their $0.77&#x2F;month offer&lt;&#x2F;a&gt;. Unfortunately, Typo seems to be quite a monster (compared to Wordpress), and database access is &lt;a href=&quot;http:&#x2F;&#x2F;blog.zacharypinter.com&#x2F;articles&#x2F;2006&#x2F;03&#x2F;03&#x2F;switching-from-dreamhost-to-textdrive&quot;&gt;purportedly (and observably) slow on Dreamhost&lt;&#x2F;a&gt;. Still, Dreamhost is a great host for shared hosting, I&#x27;m sticking with them for delivering more static content. A VPS just makes sense now that I&#x27;ve been tinkering more with Ruby on Rails, plus which geek wouldn&#x27;t admit it just feels more &lt;em&gt;right&lt;&#x2F;em&gt; to be in full control of your server (well, it&#x27;s root on a virtual machine, but still root).&lt;&#x2F;p&gt;
&lt;p&gt;This time around, I chose &lt;a href=&quot;http:&#x2F;&#x2F;rimuhosting.com&#x2F;&quot;&gt;Rimuhosting&lt;&#x2F;a&gt;, a New Zealand-based hosting company (servers are US-based, of course), and here&#x27;s why (I did some research once again on &lt;a href=&quot;&quot;&gt;WebHostingTalk&lt;&#x2F;a&gt; and asked some people their experiences with their webhosts):&lt;&#x2F;p&gt;
&lt;p&gt;Pros:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Fairly affordable prices - I got their cheapest MiroVPS1 plan, which goes for $19.95&#x2F;month and get 30GB of transfer and 96MB of RAM (which &lt;em&gt;could&lt;&#x2F;em&gt; be a problem, but upgrading seems easy enough anyway from what they say on their site). Comparing to several other VPS hosts like &lt;a href=&quot;http:&#x2F;&#x2F;unixshell.com&#x2F;&quot;&gt;unixshell&lt;&#x2F;a&gt;, Tektonic.net, &lt;a href=&quot;http:&#x2F;&#x2F;www.serveraxis.com&#x2F;&quot;&gt;ServerAxis&lt;&#x2F;a&gt;, their plans are somewhat mid-range.&lt;&#x2F;li&gt;
&lt;li&gt;Their reputation is great. Yup, I&#x27;ve heard and read only good things about them, something that&#x27;s quite hard to find in the world of web hosting. We use them at work to setup servers sometimes too.&lt;&#x2F;li&gt;
&lt;li&gt;Seems to be run by competent people - they have a &lt;a href=&quot;http:&#x2F;&#x2F;bliki.rimuhosting.com&#x2F;&quot;&gt;bliki&lt;&#x2F;a&gt; (blog + wiki) with some nice posts. The one that really caught my eye is the one on their &lt;a href=&quot;http:&#x2F;&#x2F;bliki.rimuhosting.com&#x2F;space&#x2F;knowledgebase&#x2F;linux&#x2F;miscapplications&#x2F;ruby+on+rails&quot;&gt;Ruby on Rails hosting stack&lt;&#x2F;a&gt;. Not that I&#x27;d use it since I&#x27;m on Ubuntu, but it shows that the folks at Rimuhosting are up-to-date.&lt;&#x2F;li&gt;
&lt;li&gt;They run &lt;a href=&quot;http:&#x2F;&#x2F;www.cl.cam.ac.uk&#x2F;Research&#x2F;SRG&#x2F;netos&#x2F;xen&#x2F;&quot;&gt;Xen&lt;&#x2F;a&gt;, which &lt;a href=&quot;http:&#x2F;&#x2F;deepak.jois.name&#x2F;&quot;&gt;Deepak&lt;&#x2F;a&gt;, among others, tells me is the most efficient server virtualization software. Yeah, whatever, score one for statistics (and lies).&lt;&#x2F;li&gt;
&lt;li&gt;Support is reasonably fast - got replies to my pre-sales queries reasonably fast (more than a few hours, but it wasn&#x27;t during working hours anyway). Of course, I&#x27;ll have to see how it goes now that I&#x27;m a real customer.&lt;&#x2F;li&gt;
&lt;li&gt;A simple web-based control panel where I can reboot the VPS. It&#x27;s no &lt;a href=&quot;http:&#x2F;&#x2F;www.swsoft.com&#x2F;en&#x2F;products&#x2F;virtuozzo&#x2F;tools&#x2F;vzpp&#x2F;&quot;&gt;Virtuozzo Power Panels&lt;&#x2F;a&gt;, but it&#x27;s enough. JVDS didn&#x27;t have one and it started to get old sending support tickets to do a reboot.
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;rimuhosting-vps-cp.png&quot; alt=&quot;Screenshot of Rimuhosting VPS control panel&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Cons:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;They don&#x27;t support &lt;a href=&quot;http:&#x2F;&#x2F;gentoo.org&#x2F;&quot;&gt;Gentoo&lt;&#x2F;a&gt;, my Linux distro of choice. Only RHEL, Ubuntu, Debian and Fedora Core are supported. I went with Ubuntu, not having much experience with it (excluding a brief affair with Debian). I was wary of this at first, but my fears of bungling around with an unfamiliar distro have vanished after I saw how easy it is to install stuff with apt-get, and things are &lt;em&gt;not&lt;&#x2F;em&gt; placed in weird places in the filesystem hierarchy. I think I could get used to it, this &quot;not compiling everything that moves&quot; idea ;).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;serveraxis.com&#x2F;vds.php?ps=1&quot;&gt;ServerAxis&lt;&#x2F;a&gt; supports Gentoo, and offers much better &quot;value for money&quot;, except that their lowest priced plan is much higher ($30). But you get &lt;strong&gt;512MB RAM&lt;&#x2F;strong&gt;, 200GB RAM, and &lt;strong&gt;5 IP addresses&lt;&#x2F;strong&gt;... Too bad I&#x27;d rather pay out of my PayPal funds.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Well, less blogging, more server migration. Actually the application installs are mostly done. I&#x27;ve never had apt-get play so nice back when I was experimenting with Debian - just&lt;br &#x2F;&gt;
&lt;typo :code&gt;apt-get install [package]&lt;&#x2F;typo&gt; and things are installed quite cleanly (keyword: &quot;cleanly&quot;). I think this may grow on me (yeah yeah laugh and point at the Ubuntu noob) - perhaps you don&#x27;t need to compile everything (&lt;em&gt;gasp&lt;&#x2F;em&gt;, I said it!).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Rails 1.1.5 (security patch)</title>
    <published>2006-08-10T19:46:24+00:00</published>
    <updated>2006-08-10T19:46:24+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/10/rails-115-security-patch/"/>
    <id>https://chuyeow.wtf/2006/08/10/rails-115-security-patch/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/10/rails-115-security-patch/">&lt;p&gt;For anyone who cares or who runs a production site on Rails, &lt;acronym title=&quot;David Heinemeier Hansson&quot;&gt;DHH&lt;&#x2F;acronym&gt; just announced &lt;a href=&quot;http:&#x2F;&#x2F;wrath.rubyonrails.org&#x2F;pipermail&#x2F;rails&#x2F;2006-August&#x2F;059776.html&quot;&gt;the release of Rails 1.1.5 with an undisclosed security patch&lt;&#x2F;a&gt;. Time to&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;gem install rails&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;and update your config&#x2F;environment.rb to use the Rails 1.1.5&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# Specifies gem version of Rails to use when
# vendor&#x2F;rails is not present
RAILS_GEM_VERSION = &#x27;1.1.5&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
  </entry>
  <entry>
    <title>Easy introspection in Ruby</title>
    <published>2006-08-09T19:43:40+00:00</published>
    <updated>2006-08-09T19:43:40+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/09/easy-introspection-in-ruby/"/>
    <id>https://chuyeow.wtf/2006/08/09/easy-introspection-in-ruby/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/09/easy-introspection-in-ruby/">&lt;p&gt;Just some notes on reflection and introspection in Ruby&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
someString = &#x27;http:&#x2F;&#x2F;google.com&#x27;
&lt;h1 id=&quot;print-the-object-s-class-methods-superclass-and&quot;&gt;Print the object&#x27;s class, methods, superclass and&lt;&#x2F;h1&gt;
&lt;h1 id=&quot;ancestors-mixins-and-superclasses&quot;&gt;ancestors (mixins and superclasses),&lt;&#x2F;h1&gt;
&lt;p&gt;p someString.class
p someString.methods
p someString.class.superclass
p someString.class.ancestors&lt;&#x2F;p&gt;
&lt;h1 id=&quot;print-the-methods-of-the-string-class&quot;&gt;Print the methods of the String class.&lt;&#x2F;h1&gt;
&lt;p&gt;p String.private_instance_methods(false)
p String.public_instance_methods(false)&lt;&#x2F;p&gt;
&lt;h1 id=&quot;pass-true-to-recurse-into-parent-classes&quot;&gt;Pass true to recurse into parent classes.&lt;&#x2F;h1&gt;
&lt;p&gt;p String.public_instance_methods(true)&lt;&#x2F;p&gt;
&lt;h1 id=&quot;calling-instance-methods-with-send&quot;&gt;Calling instance methods with send().&lt;&#x2F;h1&gt;
&lt;p&gt;&quot;Random text&quot;.send(:length) # 11
-23.send(:succ) # 22&lt;&#x2F;p&gt;
&lt;h1 id=&quot;using-method-objects-and-call&quot;&gt;Using Method objects and call().&lt;&#x2F;h1&gt;
&lt;p&gt;length_method = &quot;Random text&quot;.method(:length)
length_method.call # 11&lt;&#x2F;p&gt;
&lt;h1 id=&quot;another-way-using-eval&quot;&gt;Another way, using eval().&lt;&#x2F;h1&gt;
&lt;p&gt;length_method = %q{&quot;Random text&quot;.length}
eval length_method
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Check out &lt;a href=&quot;http:&#x2F;&#x2F;www.chadfowler.com&#x2F;ruby&#x2F;drb.html&quot;&gt;Distributed Ruby (DRb)&lt;&#x2F;a&gt;: it&#x27;s a very neat, non-fancy way of exposing object methods as remote services.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>From Wordpress 2 to Typo 4</title>
    <published>2006-08-06T19:33:05+00:00</published>
    <updated>2006-08-06T19:33:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/06/from-wordpress-2-to-typo-4/"/>
    <id>https://chuyeow.wtf/2006/08/06/from-wordpress-2-to-typo-4/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/06/from-wordpress-2-to-typo-4/">&lt;p&gt;It was a slow day so I decided to cross one thing off my to-do list, and that&#x27;s getting &lt;a href=&quot;http:&#x2F;&#x2F;www.typosphere.org&#x2F;&quot;&gt;Typo&lt;&#x2F;a&gt; installed and migrating from WordPress. I&#x27;ve been looking at getting Typo installed for awhile ever since I saw (and liked) its AJAX-y comments form, plus &lt;a href=&quot;http:&#x2F;&#x2F;www.typosphere.org&#x2F;trac&#x2F;wiki&#x2F;DownloadStable&quot;&gt;Typo 4&lt;&#x2F;a&gt; being just released did help.&lt;&#x2F;p&gt;
&lt;p&gt;The install went straightforward enough, though I didn&#x27;t get to try out the new installer gem. I didn&#x27;t bother because I&#x27;m on a Dreamhost shared hosting account, though &lt;a href=&quot;http:&#x2F;&#x2F;scottstuff.net&#x2F;blog&#x2F;articles&#x2F;2006&#x2F;07&#x2F;28&#x2F;how-to-install-gems-when-youre-not-root&quot;&gt;installing the gem without root privileges&lt;&#x2F;a&gt; seems like it should work. I simply followed this &lt;a href=&quot;http:&#x2F;&#x2F;blog.aidenbordner.com&#x2F;articles&#x2F;2006&#x2F;07&#x2F;24&#x2F;getting-typo-4-0-0-running-on-dreamhost&quot;&gt;guide to getting Typo 4 running on Dreamhost&lt;&#x2F;a&gt;. Ran into some trouble running the Wordpress import script (found in &#x2F;db&#x2F;converters&#x2F;wordpress2.rb), but Google turned up &lt;a href=&quot;http:&#x2F;&#x2F;www.typosphere.org&#x2F;trac&#x2F;ticket&#x2F;1053&quot;&gt;the solution&lt;&#x2F;a&gt; (basically a patch to the Articles model that tries to send pings when importing posts). This should already be fixed in Typo SVN, but it&#x27;s not in release 4.0.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, Typo seems spiffy, though I am still getting the occasional &quot;Application Error&quot;, but that&#x27;s most likely a Dreamhost thing. Liking the near-minimalist theme as well - I&#x27;m already missing the green clover though heh.&lt;&#x2F;p&gt;
&lt;p&gt;Things I&#x27;m already liking:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Sidebar modules that you can add to your blog - for example, getting the del.icio.us links I have at the side to show is just a matter of dragging the del.icio.us sidebar item to the &quot;Active&quot; list and pointing it to my del.icio.us feed. There&#x27;re sidebar items for Flickr, tags, 43things, Amazon, and even the categories and archives are sidebar items.
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;typo-sidebar.png&quot; alt=&quot;Screenshot of Typo 4&#x27;s sidebar items administration&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both;&quot; &#x2F;&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;A Blacklist section where you can enter blacklisted words and &lt;strong&gt;regexes&lt;&#x2F;strong&gt;! Take that texas holdem poker!&lt;&#x2F;li&gt;
&lt;li&gt;Live preview of your posts as you type - can get a little sluggish though.&lt;&#x2F;li&gt;
&lt;li&gt;The ability to search and delete all comments - Wordpress was missing that and running SQL statements in phpmyadmin stopped being fun.&lt;&#x2F;li&gt;
&lt;li&gt;The nice &lt;a href=&quot;http:&#x2F;&#x2F;quotedprintable.com&#x2F;pages&#x2F;scribbish&quot;&gt;Scribbish theme&lt;&#x2F;a&gt; that comes with the Typo package.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Things that I don&#x27;t like:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Linking to uploaded files was confusing. I like the whole &quot;Attachments&quot; idea, but I didn&#x27;t know how to link to them until I browsed to the Resources section and copied the link to the image I just uploaded (by saving the post I was making - there wasn&#x27;t a way to upload an attachment while writing the post).
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;typo-attachments.png&quot; alt=&quot;Screenshot of Typo Attachments feature&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m probably doing things the wrong way though, seeing as this is way too obtuse. Would be nice to see improvements (such as, upload file as you write your post, click on uploaded file to include into post, all on the same page with AJAX).&lt;&#x2F;li&gt;
&lt;li&gt;Um, nothing further!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Need to use it more to decide whether I&#x27;ll like this or not.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>RSpec and BDD</title>
    <published>2006-08-05T16:08:33+00:00</published>
    <updated>2006-08-05T16:08:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/05/rspec-and-bdd/"/>
    <id>https://chuyeow.wtf/2006/08/05/rspec-and-bdd/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/05/rspec-and-bdd/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;rspec.rubyforge.org&#x2F;&quot;&gt;RSpec&lt;&#x2F;a&gt;: Behavior Driven Development framework for Ruby. It&#x27;s like writing your specifications in English that&#x27;s executable. &lt;a href=&quot;http:&#x2F;&#x2F;rspec.rubyforge.org&#x2F;tools&#x2F;index.html&quot;&gt;Eight tools in one&lt;&#x2F;a&gt;, and a really nice &lt;a href=&quot;http:&#x2F;&#x2F;rspec.rubyforge.org&#x2F;documentation&#x2F;mocks.html&quot;&gt;Mock Objects framework&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Unobtrusive IFrame shim - a half solution</title>
    <published>2006-08-01T19:33:50+00:00</published>
    <updated>2006-08-01T19:33:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/08/01/unobtrusive-iframe-shim-a-half-solution/"/>
    <id>https://chuyeow.wtf/2006/08/01/unobtrusive-iframe-shim-a-half-solution/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/08/01/unobtrusive-iframe-shim-a-half-solution/">&lt;p&gt;Something that really bugged me when using &lt;a href=&quot;http:&#x2F;&#x2F;developer.yahoo.com&#x2F;yui&#x2F;calendar&#x2F;&quot;&gt;YUI Calendars&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;developer.yahoo.com&#x2F;yui&#x2F;autocomplete&quot;&gt;YUI AutoComplete&lt;&#x2F;a&gt; widgets was how IFrame shims are currently being managed in libraries and home-brewed code (we use IFrame shims in many places as well). YUI Calendars doesn&#x27;t have a built-in IFrame shim, YUI AutoComplete has its own, and we use our own IFrame shim library.&lt;&#x2F;p&gt;
&lt;p&gt;For the uninitiated, IFrame shims are basically IFrames dynamically inserted (hence &quot;shim&quot;) under overlaying DOM elements so that any &amp;lt;select&amp;gt; elements do not show through in IE 5.5 and above. A common example would be dynamically generated divs that float on top of drop downs in forms, such as the Yahoo! Calendar widget example below.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;see-thru-select-box.png&quot; alt=&quot;An example of the select box see through problem in IE 5.5+&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So anyway, the thing that&#x27;s bugging me is the awkwardness in inserting IFrame shims where they are needed and the duplication of unnecessary code to create, show, and hide the IFrame shims. Ideally, I&#x27;d like to do something like this to attach IFrame shims and forget about them:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;var iframeShim = new net.codefront.IFrameShim(&#x27;elementId&#x27;);&lt;&#x2F;div&gt;
&lt;p&gt;Or the conceptually nicer way of attaching IFrame shim &quot;behavior&quot;:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;net.codefront.IFrameShim.attachShim($(&#x27;elementId&#x27;));&lt;&#x2F;div&gt;
&lt;p&gt;No need for manually displaying and hiding the IFrame shim, polluting display logic and event handlers. I don&#x27;t care how all that shimming is done nor should I have to. I don&#x27;t want to have to call displayShim() whenever I display a floating div and hideShim() when I hide it. It should be smart enough to display the shim when the overlay is showing and to hide when the overlay is no longer visible.&lt;&#x2F;p&gt;
&lt;p&gt;As it is, I am seeing code duplicated in many places to manage these IFrame shims, and that&#x27;s a &lt;a href=&quot;http:&#x2F;&#x2F;c2.com&#x2F;xp&#x2F;CodeSmell.html&quot;&gt;bad smell&lt;&#x2F;a&gt;. Ahh ahh, before I go further, I am completely aware that I could be completely off-base and such a miraculous time-saver of a library already exists. If so, I want to know!&lt;&#x2F;p&gt;
&lt;p&gt;Trying to fix this problem, I came up with this &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;examples&#x2F;iframeshim.js&quot;&gt;bit of JavaScript&lt;&#x2F;a&gt;, which you shouldn&#x27;t bother reading. The idea is to allow me to do this:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;var shim = new com.bezurk.widget.IFrameShim(&#x27;myFloatingCalendar&#x27;);&lt;br &#x2F;&gt;
shim.manualShim = false;&lt;br &#x2F;&gt;
shim.manualDeshim = false;&lt;&#x2F;div&gt;
&lt;p&gt;And I have a &#x27;myFloatingCalendar&#x27; element that&#x27;s automagically shimmed whenever it&#x27;s displayed. (The shim.manualShim and shim.manualDeshim are defaulted to false, and are shown purely for explanatory purposes.)&lt;&#x2F;p&gt;
&lt;p&gt;There is one problem though - I can&#x27;t figure out an elegant way to &quot;listen&quot; to the display and hide events of the element that&#x27;s shimmed. The way I&#x27;ve done it is to rely on &lt;a href=&quot;http:&#x2F;&#x2F;www.sergiopereira.com&#x2F;articles&#x2F;prototype.js.html#Reference.PeriodicalExecuter&quot;&gt;Prototype&#x27;s PeriodicalExecuter&lt;&#x2F;a&gt; (extended to support a stop() method) to poll for the visibility of the element. Naturally this is an ugly hack and causes noticeable flicker.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve looked at custom events (YUI and Dojo have &lt;em&gt;very nice&lt;&#x2F;em&gt; event handling libraries) but can&#x27;t see how to hook this up unobtrusively. If you have a suggestion or a solution, I want to hear it!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The first rule of Maintenance is - you do not talk about Maintenance</title>
    <published>2006-07-05T17:57:02+00:00</published>
    <updated>2006-07-05T17:57:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/07/05/the-first-rule-of-maintenance-is-you-do-not-talk-about-maintenance/"/>
    <id>https://chuyeow.wtf/2006/07/05/the-first-rule-of-maintenance-is-you-do-not-talk-about-maintenance/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/07/05/the-first-rule-of-maintenance-is-you-do-not-talk-about-maintenance/">&lt;p&gt;What would Tyler Durden do if he had to bring down his Web 2.0 service for maintenance?&lt;&#x2F;p&gt;
&lt;p&gt;Someone in the office thought &lt;a href=&quot;http:&#x2F;&#x2F;www.bezurk.com&#x2F;maintenance.html&quot;&gt;this message&lt;&#x2F;a&gt; would be appropriate.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>When Firefox extensions annoy</title>
    <published>2006-07-02T13:40:09+00:00</published>
    <updated>2006-07-02T13:40:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/07/02/when-firefox-extensions-annoy/"/>
    <id>https://chuyeow.wtf/2006/07/02/when-firefox-extensions-annoy/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/07/02/when-firefox-extensions-annoy/">&lt;p&gt;Firefox extensions are a good thing (since sliced bread and embedded ActiveX controls...), in fact some of them are my most compelling reasons for using and loving Firefox.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, so with that World Cup thing that&#x27;s going on I installed an extension called &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;firefox&#x2F;725&#x2F;&quot;&gt;FootieFox&lt;&#x2F;a&gt; that tracks any goals being scored in real-time and pops up a small little notification message. All fine and dandy, great unobtrusive little widget. Well, right until &quot;FootieFox Education Day&quot;, when the extension started showing a banner that overlaid everything else on the screen, blinding up in obnoxious slowness, sitting there for a few seconds, and blinding down painfully with no way to dismiss it except to wait.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;footie-fox-overlay.jpg&quot; alt=&quot;FootieFox extension overlay annoyance&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I promptly uninstalled the extension. (Great extension, but that &quot;I&#x27;m gonna block out everything else so you have to read me&quot; banner thing annoyed me.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The first Firefox ads are out</title>
    <published>2006-04-13T01:34:33+00:00</published>
    <updated>2006-04-13T01:34:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/04/13/the-first-firefox-ads-are-out/"/>
    <id>https://chuyeow.wtf/2006/04/13/the-first-firefox-ads-are-out/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/04/13/the-first-firefox-ads-are-out/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;firefoxflicks.com&#x2F;&quot;&gt;Firefox Flicks&lt;&#x2F;a&gt; has just put up 3 of the first ads that have been submitted to the Firefox ads competition. &lt;a href=&quot;http:&#x2F;&#x2F;firefoxflicks.com&#x2F;flicks&#x2F;?&amp;sort=new&quot;&gt;Check them out.&lt;&#x2F;a&gt; Drama queen was my favorite of the three, though they are all surprisingly very good quality ads.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Wufoo - Cool AJAX form builder</title>
    <published>2006-03-26T17:45:41+00:00</published>
    <updated>2006-03-26T17:45:41+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/03/26/wufoo-cool-ajax-form-builder/"/>
    <id>https://chuyeow.wtf/2006/03/26/wufoo-cool-ajax-form-builder/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/03/26/wufoo-cool-ajax-form-builder/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;wufoo.com&#x2F;&quot;&gt;Wufoo&lt;&#x2F;a&gt; - try the &lt;a href=&quot;http:&#x2F;&#x2F;wufoo.com&#x2F;demo&#x2F;&quot;&gt;demo&lt;&#x2F;a&gt;. Very impressive (strange how I find this more impressive than Ajax Write).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>How to fix IE always opening Firefox instead</title>
    <published>2006-03-19T23:03:03+00:00</published>
    <updated>2006-03-19T23:03:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/03/19/how-to-fix-ie-always-opening-firefox-instead/"/>
    <id>https://chuyeow.wtf/2006/03/19/how-to-fix-ie-always-opening-firefox-instead/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/03/19/how-to-fix-ie-always-opening-firefox-instead/">&lt;p&gt;It was not until recently (when I had to actually open Internet Explorer to test some cross-browser stuff) that I realized my workstation and my home PC had a particular problem in Internet Explorer: anything I typed into Internet Explorer opened in Firefox (my default browser). After some Googling, a &lt;a href=&quot;http:&#x2F;&#x2F;board.iexbeta.com&#x2F;lofiversion&#x2F;index.php&#x2F;t61125.html&quot;&gt;forum thread over at Neowin.net&lt;&#x2F;a&gt; provided a solution - just delete the HKEY_CLASSES_ROOT\CLSID\ {c90250f3-4d7d-4991-9b69-a5c5bc1c2ae6} registry entry. &lt;&#x2F;p&gt;
&lt;p&gt;Long version for Windows Registry newbies (alternatively, you can create a .reg file and run it like someone said in the &lt;a href=&quot;http:&#x2F;&#x2F;board.iexbeta.com&#x2F;lofiversion&#x2F;index.php&#x2F;t61125.html&quot;&gt;thread&lt;&#x2F;a&gt;):&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Click our Start button, then &quot;Run...&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;Type &quot;regedit&quot; into the box that appears and hit Enter. This will bring up the Registry Editor.&lt;&#x2F;li&gt;
&lt;li&gt;Drill down the tree on the left pane under HKEY_CLASSES_ROOT until you find the HKEY_CLASSES_ROOT\CLSID\ {c90250f3-4d7d-4991-9b69-a5c5bc1c2ae6} entry.&lt;&#x2F;li&gt;
&lt;li&gt;Delete the entry.&lt;&#x2F;li&gt;
&lt;li&gt;Close the Registry Editor - you&#x27;re done.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Anyway, turns out this is a bug caused by having &quot;IE7 Beta1 in an unsupported side-by-side configuration with a version of IE6&quot;, as officially &lt;a href=&quot;http:&#x2F;&#x2F;blogs.msdn.com&#x2F;ie&#x2F;archive&#x2F;2005&#x2F;12&#x2F;16&#x2F;504864.aspx&quot;&gt;stated in IEBlog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Painfully, I had to look all over again for the solution back home because I didn&#x27;t bookmark the page and it didn&#x27;t make sense to run over to the office just for this. Now it&#x27;s bookmarked in del.icio.us &lt;em&gt;and&lt;&#x2F;em&gt; blogged so I won&#x27;t forget.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Copy &#x27;n&#x27; Paste and the incorrigible programmer</title>
    <published>2006-03-10T20:05:58+00:00</published>
    <updated>2006-03-10T20:05:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/03/10/copy-n-paste-and-the-incorrigible-programmer/"/>
    <id>https://chuyeow.wtf/2006/03/10/copy-n-paste-and-the-incorrigible-programmer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/03/10/copy-n-paste-and-the-incorrigible-programmer/">&lt;p&gt;We just never learn, do we?&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;String fromLocationCode;&lt;br &#x2F;&gt;
Location fromLocation = request.getFromLocation();&lt;&#x2F;p&gt;
&lt;p&gt;String toLocationCode;&lt;br &#x2F;&gt;
Location toLocation = request.getFromLocation();&lt;&#x2F;p&gt;
&lt;p&gt;&#x2F;&#x2F; Do stuff to toLocation&lt;&#x2F;p&gt;&lt;&#x2F;div&gt;
&lt;p&gt;First, my (extremely talented) colleague makes a similar copy and paste blooper, and one day later I repeat the same mistake. But, but... Select boring code, Ctrl-C, Ctrl-V, it&#x27;s &lt;em&gt;sooo&lt;&#x2F;em&gt; easy...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Diggnation drinks Tiger Beer</title>
    <published>2006-02-20T23:25:34+00:00</published>
    <updated>2006-02-20T23:25:34+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/02/20/diggnation-drinks-tiger-beer/"/>
    <id>https://chuyeow.wtf/2006/02/20/diggnation-drinks-tiger-beer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/02/20/diggnation-drinks-tiger-beer/">&lt;p&gt;The hosts of &lt;a href=&quot;http:&#x2F;&#x2F;revision3.com&#x2F;diggnation&quot;&gt;Diggnation&lt;&#x2F;a&gt; (Kevin and Alex), one of the few podcasts I listen too, usually have some beers as they are hosting the show, and in the most recent &lt;a href=&quot;http:&#x2F;&#x2F;revision3.com&#x2F;diggnation&#x2F;2006-02-16&#x2F;&quot;&gt;episode 34&lt;&#x2F;a&gt;, they actually had Singapore&#x27;s trademark &lt;a href=&quot;http:&#x2F;&#x2F;www.tigerbeer.com.sg&#x2F;&quot;&gt;Tiger Beer&lt;&#x2F;a&gt; (a hint as to why this is remotely interesting to me: I&#x27;m Singaporean). It&#x27;s rather interesting because most of us (Singaporeans) know how a Tiger tastes like (having had watered-down Tiger beer from when I was in the army didn&#x27;t help), and Kevin and Alex were &lt;em&gt;pretty much&lt;&#x2F;em&gt; making polite comments about it. Of course, I could be &lt;em&gt;entirely&lt;&#x2F;em&gt; off-base, but I have watched the last episode (or was it the one before?) where they were raving over &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Hoegaarden_Brewery&quot;&gt;Hoegaarden&lt;&#x2F;a&gt; (which is a great beer, this coming from one who doesn&#x27;t drink more than once every few months).&lt;&#x2F;p&gt;
&lt;p&gt;By the way, does anyone know anything about the Geek Drome (or &quot;Drone&quot; or &quot;dom&quot;) podcast they were talking about on the show? Been poking around Revision3 for it but no luck.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Tabbed-browsing enhancements for Firefox in latest build</title>
    <published>2006-01-24T21:21:33+00:00</published>
    <updated>2006-01-24T21:21:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/01/24/tabbed-browsing-enhancements-for-firefox-in-latest-build/"/>
    <id>https://chuyeow.wtf/2006/01/24/tabbed-browsing-enhancements-for-firefox-in-latest-build/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/01/24/tabbed-browsing-enhancements-for-firefox-in-latest-build/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=308396&quot;&gt;Bug 308396 - UE fixes for tabbed browsing&lt;&#x2F;a&gt; landed in the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;2006-01-21-06-trunk&#x2F;&quot;&gt;2005-01-21 (Trunk) build of Firefox&lt;&#x2F;a&gt;, bringing with it &quot;tabbed browsing usability enhancements&quot; (and I quote Ben Goodger from the bug page).&lt;&#x2F;p&gt;
&lt;p&gt;One fix that I really like is the one related to moving focus after a tab is closed. Right now, if a link opens in a new tab and gains focus, and you close that new tab, you are taken to the right-most tab you have opened. The fix makes it &lt;em&gt;much&lt;&#x2F;em&gt; friendlier by taking you back to the &quot;parent&quot; tab that opened that link. Hurray!&lt;&#x2F;p&gt;
&lt;p&gt;Another change is the addition of big &quot;X&quot;s (crosses) on the right of each tab which you can click to close tabs. Something like this:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-tab-browsing-ue-fixes.png&quot; alt=&quot;Close buttons on tabs in Firefox&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Well, rather nice for people with only 2-button mice or using specific OS ports of Firefox (I&#x27;m thinking some flavors Linux desktop environments, but I&#x27;m not sure), since they can now close tabs in a single-click (instead of right-click -&gt; Close Tab). Personally, I prefer to middle-click tabs to close them or hit Ctrl-W, and the additional close widgets are just unnecessary clutter (so it&#x27;s a good thing this can be turned off via about:config at the moment). Anyway, if you&#x27;re using a 3-button mouse and are closing tabs with right-click tab -&gt; Close Tab, stop doing that! Middle-click the tab. Middle-clicking is (or should be) the new &quot;close me&quot; in any environment that involves tabs - think IntelliJ IDEA and editors like &lt;a href=&quot;http:&#x2F;&#x2F;www.pspad.com&#x2F;&quot;&gt;PSPad&lt;&#x2F;a&gt;. If we could just get other applications to follow this &quot;new convention&quot; (think Eclipse IDE, EditPlus).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Naming your computer</title>
    <published>2006-01-24T13:03:04+00:00</published>
    <updated>2006-01-24T13:03:04+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/01/24/naming-your-computer/"/>
    <id>https://chuyeow.wtf/2006/01/24/naming-your-computer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/01/24/naming-your-computer/">&lt;p&gt;Great conversation pieces when you &lt;a href=&quot;http:&#x2F;&#x2F;geeksmakemehot.com&#x2F;archives&#x2F;2006&#x2F;a-computer-named-vagina&#x2F;&quot;&gt;name your computer &quot;vagina&quot;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>How does one get in touch with the Firefox Add-ons people?</title>
    <published>2006-01-23T10:24:41+00:00</published>
    <updated>2006-01-23T10:24:41+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/01/23/how-does-one-get-in-touch-with-the-firefox-add-ons-people/"/>
    <id>https://chuyeow.wtf/2006/01/23/how-does-one-get-in-touch-with-the-firefox-add-ons-people/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/01/23/how-does-one-get-in-touch-with-the-firefox-add-ons-people/">&lt;p&gt;&lt;ins&gt;An update: I&#x27;ve actually deleted the existing extension on the Firefox Add-ons site and added a new one per Patrick&#x27;s suggestion below, and it is &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;extensions&#x2F;moreinfo.php?id=1916&amp;application=firefox&quot;&gt;now available there&lt;&#x2F;a&gt;. And yeah, I didn&#x27;t put any of the changes you guys requested in there besides getting it to work for Firefox 1.5...&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve seen your emails and comments about updating the &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;extensions&#x2F;moreinfo.php?application=firefox&amp;id=631&quot;&gt;Unread Tabs&lt;&#x2F;a&gt; extension for Firefox 1.5, and I apologize if I haven&#x27;t responded to your email personally.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, yes, the fix is &lt;em&gt;extremely&lt;&#x2F;em&gt; simple, and in fact I did try to fix it once and upload it onto the &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;&quot;&gt;Firefox Add-ons site&lt;&#x2F;a&gt; a long time ago last year when the extra character in the GUID was brought to my attention (to explain this a bit - each extension has its own GUID which is universally unique 32-character string, and somehow I screwed it up by inserting a GUID with &lt;strong&gt;33&lt;&#x2F;strong&gt; characters). Well, the problem is, in the developer section of the &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;&quot;&gt;Firefox Add-ons site&lt;&#x2F;a&gt;, the &quot;Add New Version&quot; function enforces the rule that a new version of an extension should have the same GUID, which is perfectly fine and expected.&lt;&#x2F;p&gt;
&lt;p&gt;So I&#x27;ve been trying to find a way to get in touch with the guys over at Firefox Add-ons to workaround this and to see what implications this may have, but can&#x27;t find any form of contact information at the site (and no, I&#x27;m not gonna email the mozilla.org webmaster to bug him unless no one really knows how to reach the Firefox Add-ons guys). Anyone has any clue? Or maybe I should just email the mozilla.org webmaster...&lt;&#x2F;p&gt;
&lt;p&gt;Whatever the result of that, here&#x27;s an updated Unread Tabs for Firefox 1.5 with a new GUID:&lt;br &#x2F;&gt;
&lt;a href=&quot;javascript:void(InstallTrigger.install({&#x27;Unread Tabs&#x27;:&#x27;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;mozilla&#x2F;unreadtabs&#x2F;unreadtabs-0.2.xpi &#x27;}))&quot;&gt;Install Unread Tabs&lt;&#x2F;a&gt; | &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;mozilla&#x2F;unreadtabs&#x2F;unreadtabs-0.2.xpi&quot;&gt;Download Unread Tabs&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gmail adds a Delete button, at last</title>
    <published>2006-01-20T13:05:45+00:00</published>
    <updated>2006-01-20T13:05:45+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/01/20/gmail-adds-a-delete-button-at-last/"/>
    <id>https://chuyeow.wtf/2006/01/20/gmail-adds-a-delete-button-at-last/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/01/20/gmail-adds-a-delete-button-at-last/">&lt;p&gt;Remember back when you had to use a hack like a &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2005&#x2F;04&#x2F;25&#x2F;one-click-delete-in-gmail-thanks-to-greasemonkey&#x2F;&quot;&gt;Greasemonkey script&lt;&#x2F;a&gt; for one-click deletion of emails in Gmail? Well, Google has added a &lt;a href=&quot;http:&#x2F;&#x2F;mail.google.com&#x2F;support&#x2F;bin&#x2F;answer.py?answer=32608&amp;hl=en&quot;&gt;Delete button&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Gmail&#x27;s delete button&quot; src=&quot;&#x2F;assets&#x2F;gmail-delete-btn1.png&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;(You&#x27;ll have to log out and log back in if you don&#x27;t see the button - well, at least I had to.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Pop-up blunders</title>
    <published>2006-01-14T20:46:27+00:00</published>
    <updated>2006-01-14T20:46:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/01/14/pop-up-blunders/"/>
    <id>https://chuyeow.wtf/2006/01/14/pop-up-blunders/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/01/14/pop-up-blunders/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;thedailywtf.com&#x2F;&quot;&gt;The Daily WTF&lt;&#x2F;a&gt; has screenshots of some hilarious pop-up error messages over at it&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;thedailywtf.com&#x2F;forums&#x2F;52996&#x2F;ShowPost.aspx&quot;&gt;Pop-up Potpourri: Sixth Time is the Charm&lt;&#x2F;a&gt; post. And cute that CVS servers send the string &quot;I HATE YOU&quot; whenever your login is incorrect.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Pandora is one hell of a radio station service</title>
    <published>2006-01-14T14:28:17+00:00</published>
    <updated>2006-01-14T14:28:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2006/01/14/pandora-is-one-hell-of-a-radio-station-service/"/>
    <id>https://chuyeow.wtf/2006/01/14/pandora-is-one-hell-of-a-radio-station-service/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2006/01/14/pandora-is-one-hell-of-a-radio-station-service/">&lt;p&gt;This is probably old news to most of you, but I just chanced across &lt;a href=&quot;http:&#x2F;&#x2F;pandora.com&#x2F;&quot;&gt;Pandora&lt;&#x2F;a&gt; today and I was quite blown away by it. Well, it did happen to be a time when I was rather bored of the current songs on my playlist (I still &lt;em&gt;love&lt;&#x2F;em&gt; &#x27;The Artist in the Ambulance&#x27; by Thrice and &#x27;Slow Motion&#x27; by Third Eye Blind, probably played them a 2^20 times on my iPod), but it is still pretty awesome even then.&lt;&#x2F;p&gt;
&lt;p&gt;So what is Pandora? (You&#x27;ll want to skip this post if this is old news to you.) With Pandora, you enter a few songs or artists that you like, and it plays similar songs that it thinks you&#x27;d also like to listen to. Nothing really special, except that the results returned are based on some &lt;a href=&quot;http:&#x2F;&#x2F;pandora.com&#x2F;mgp.shtml&quot;&gt;Music Genome Project&lt;&#x2F;a&gt; and it seems to do pretty well in playing great songs I like from bands that I&#x27;d never heard of before. It has a Flash interface through which you basically do everything, and it will stream and playback songs, and you can have different &quot;stations&quot; for different types of music&#x2F;artists you&#x27;d like Pandora to match against (so I can have, say, one station that plays songs like &quot;Stare at the Sun&quot; by Thrice, Weezer-like songs, and heck, even throw in a little Bowling For Soup for a little pop punk flavor).&lt;&#x2F;p&gt;
&lt;p&gt;As it plays each song, you can give it a thumbs up by indicating you like it, or if you indicate your distaste, it&#x27;ll skip to the next song. It uses this to fine tune the type of songs it plays for you so it learns more about your tastes the more you use it. In practice, I haven&#x27;t used it long enough to observe any noticeable improvement in the selection of songs it plays for me, but then I&#x27;m a mere 1-day old user. That said, I&#x27;ve liked roughly 4 out of every 5 songs Pandora has played for me - that&#x27;s pretty awesome.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, the service is free and sponsored by ads, but you can also sign up for the paid service to remove the ads (that&#x27;s the only difference between the free and paid versions, for now). There are convenient links for you to buy any songs that caught your fancy from Amazon.com or Apple. Apple &lt;em&gt;really&lt;&#x2F;em&gt; needs to set up an iTunes music store here soon, rather than late next year as was mentioned in the papers today - I&#x27;d have bought some tunes already if not for that.&lt;&#x2F;p&gt;
&lt;p&gt;So check Pandora out if you haven&#x27;t already or just read about it in passing - if you love your music and are finding a shortage of new tunes to hum or sing along to, this could be your answer to unravelling new favorite artists and songs.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>SitePoint&#x27;s New Book - Run Your Own Web Server Using Linux &amp; Apache</title>
    <published>2005-12-21T15:12:40+00:00</published>
    <updated>2005-12-21T15:12:40+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/12/21/sitepoints-new-book-run-your-own-web-server-using-linux-apache/"/>
    <id>https://chuyeow.wtf/2005/12/21/sitepoints-new-book-run-your-own-web-server-using-linux-apache/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/12/21/sitepoints-new-book-run-your-own-web-server-using-linux-apache/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&#x2F;&quot;&gt;SitePoint&lt;&#x2F;a&gt; has just released another book, &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;books&#x2F;linux1&#x2F;&quot;&gt;Run Your Own Web Server Using Linux &amp; Apache&lt;&#x2F;a&gt;, which is looking to be quite a winner for those of you who want a complete guide to setting up your development environment for &lt;acronym title=&quot;Linux, Apache, MySQL, PHP&quot;&gt;LAMP&lt;&#x2F;acronym&gt; development. As an Advisor over at &lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&#x2F;forums&#x2F;&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt;, I am getting this book for free (yay SitePoint!), though to be honest I have been neglecting my duties over there.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, just a little publicity for SitePoint&#x27;s new book (disclaimer: I have no obligation to SitePoint to promote the book) - I really think it looks promising for those of you looking to run your own &lt;acronym title=&quot;Linux, Apache, MySQL, PHP&quot;&gt;LAMP&lt;&#x2F;acronym&gt; setup or even budding system administrators, as it seems to cover a whole lot and SitePoint&#x27;s books have been known for being immediately of practical use. It costs USD39.95 and comes with a Fedora Core 4 DVD, &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;books&#x2F;linux1&#x2F;poster.php&quot;&gt;Linux Quick Reference Poster&lt;&#x2F;a&gt; and a collectible SitePoint-branded bookmark(!).&lt;&#x2F;p&gt;
&lt;p&gt;Enough said though, because the book hasn&#x27;t arrived yet. If I do have time to read it (though it isn&#x27;t very relevant to me now), I may give it a once-over review (no promises).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Moving to DreamHost</title>
    <published>2005-12-21T12:05:14+00:00</published>
    <updated>2005-12-21T12:05:14+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/12/21/moving-to-dreamhost/"/>
    <id>https://chuyeow.wtf/2005/12/21/moving-to-dreamhost/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/12/21/moving-to-dreamhost/">&lt;p&gt;I&#x27;m gonna be moving the codefront.net domain and the hosted services (Web, email, database) to a &lt;a href=&quot;http:&#x2F;&#x2F;www.dreamhost.com&#x2F;&quot;&gt;DreamHost&lt;&#x2F;a&gt; account soonish. The current &lt;acronym title=&quot;Virtual Private Server&quot;&gt;VPS&lt;&#x2F;acronym&gt; is just too under-utilized at the moment, considering I am no longer using my SVN repository. Plus, DreamHost supports Ruby On Rails now. Expecting soothing server migration woes, which would be a relief from development stuff at work.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: Migration complete!&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>An extension for a bigger Back button in Firefox</title>
    <published>2005-07-30T22:08:57+00:00</published>
    <updated>2005-07-30T22:08:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/07/30/an-extension-for-a-bigger-back-button-in-firefox/"/>
    <id>https://chuyeow.wtf/2005/07/30/an-extension-for-a-bigger-back-button-in-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/07/30/an-extension-for-a-bigger-back-button-in-firefox/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;philwilson.org&#x2F;blog&#x2F;&quot;&gt;Phil Wilson&lt;&#x2F;a&gt; has quietly created &lt;a href=&quot;http:&#x2F;&#x2F;philwilson.org&#x2F;blog&#x2F;2005&#x2F;04&#x2F;bigger-back-button-extension-for.html&quot;&gt;an extension&lt;&#x2F;a&gt; that gives you &lt;a href=&quot;http:&#x2F;&#x2F;www.philwilson.org&#x2F;blog&#x2F;2004&#x2F;11&#x2F;enhancing-firefox-gui-usability_29.html&quot;&gt;a bigger Back button in Firefox&lt;&#x2F;a&gt;. It&#x27;s charmingly named &quot;Fitts&#x27; Back Button&quot; too.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;biggerbackbtn.png&quot; alt=&quot;Bigger back button in Firefox&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;12&#x2F;05&#x2F;applying-fitts-law-to-the-firefox-back-button&#x2F;&quot;&gt;blogged about this previously&lt;&#x2F;a&gt; and this is in fact in &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;books&#x2F;firefox1&#x2F;&quot;&gt;Firefox Secrets&lt;&#x2F;a&gt; (on page 191, with due credit given, of course).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Plugging Firefox Secrets</title>
    <published>2005-07-30T21:01:39+00:00</published>
    <updated>2005-07-30T21:01:39+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/07/30/plugging-firefox-secrets/"/>
    <id>https://chuyeow.wtf/2005/07/30/plugging-firefox-secrets/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/07/30/plugging-firefox-secrets/">&lt;p&gt;So here it is, the inevitable &quot;author plugs his new book&quot; blog post. In the last months of 2004 and early months of 2005, I was spending a good number of my evenings after work writing what was to become (and now is) &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;books&#x2F;firefox1&#x2F;&quot;&gt;Firefox Secrets&lt;&#x2F;a&gt;. &quot;Writing&quot; being a broad term used when tasked to churn out a software book - I&#x27;d say that almost 50% of the time was spent fiddling with Firefox, tracking elusive things down, verifying that things I intend to say actually work, and &lt;em&gt;taking screenshots&lt;&#x2F;em&gt;. For those of you who were regular readers, you know how I love to put up screenshots in blog posts, but I tell ya, it kinda gets old after awhile. (Thankfully, &lt;a href=&quot;http:&#x2F;&#x2F;www.mirekw.com&#x2F;winfreeware&#x2F;mwsnap.html&quot;&gt;MWSnap&lt;&#x2F;a&gt; is an amazing screen capture tool that&#x27;s freeware to boot.)&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefoxsecrets1.jpg&quot; alt=&quot;Firefox Secrets photo&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d like to thank &lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&#x2F;&quot;&gt;SitePoint&lt;&#x2F;a&gt; for approaching me with this offer to write a book on Firefox, considering my (non-)experience in book-writing. The content of the book was initially intended to be geared towards the non-technical Firefox user (as proposed by SitePoint), but we (SitePoint actually) decided to rebrand it as a &quot;Secrets&quot; book when they discovered that my submitted drafts weren&#x27;t that much of a plain old technical manual but more of a &quot;stuff you don&#x27;t know&quot; kinda book. Honestly, I never really warmed to the idea of writing another &quot;blah how do I use Firefox&quot; grimoire so the rebranding is for the best.&lt;&#x2F;p&gt;
&lt;p&gt;So, what&#x27;s in the book? Well, this &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;books&#x2F;firefox1&#x2F;toc.php&quot;&gt;table of contents&lt;&#x2F;a&gt; should give you an idea. SitePoint also included a nice little CD-ROM with Firefox, Thunderbird, and extensions and themes that I&#x27;ve mentioned in the book material. I tried my best to include everything for both new and experienced Firefox users, so there should probably be something in there that interests you. For those of you who want a preview of the book, check out the &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;article&#x2F;firefox-secrets&quot;&gt;You Don&#x27;t Know Jack About Firefox! article&lt;&#x2F;a&gt; over at SitePoint.com, or &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;popup&#x2F;popup.php?zone=2&amp;popupid=59&quot;&gt;download the sample chapters&lt;&#x2F;a&gt; (PDF format, requires email address).&lt;&#x2F;p&gt;
&lt;h4&gt;Acknowledgements&lt;&#x2F;h4&gt;
&lt;p&gt;I&#x27;ve acknowledged these same people in the book, but it bears repeating here.&lt;&#x2F;p&gt;
&lt;p&gt;I owe it all to &lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&#x2F;&quot;&gt;SitePoint&lt;&#x2F;a&gt; for making the book come through, even though things weren&#x27;t all that smooth-sailing. Thanks for giving me the opportunity to write about Firefox.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;&quot;&gt;Asa Dotzler&lt;&#x2F;a&gt;, for being an awesome technical reviewer for the book, thank you. Asa&#x27;s reviews relieved me of several misconceptions, and I even picked up a few secrets from him (and yes - these secrets appear in the book).&lt;&#x2F;p&gt;
&lt;p&gt;Dear blog readers, I admire you for tolerating with my absence and sticking around even when at times I seem to have died and left my blog in an owner-less limbo. Thanks for reading as always.&lt;&#x2F;p&gt;
&lt;p&gt;Last but not least, the Firefox community: developers, evangelists, users, all of you. Firefox is the success it is today (and a wonderful browser to boot) because of you guys.&lt;&#x2F;p&gt;
&lt;h4&gt;Elsewhere, on Firefox Secrets&lt;&#x2F;h4&gt;
&lt;p&gt;I&#x27;ll be keeping (and updating) a list of blogs, articles, and other miscellanous web stuff that talks about Firefox Secrets here.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;SitePoint Forums announcement: &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php?t=281671&quot;&gt;SitePoint&#x27;s New Book, &quot;Firefox Secrets&quot;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Blog post: &lt;a href=&quot;http:&#x2F;&#x2F;cheeaun.phoenity.com&#x2F;weblog&#x2F;2005&#x2F;07&#x2F;firefox-secrets.html&quot;&gt;Firefox Secrets&lt;&#x2F;a&gt; - &lt;a href=&quot;http:&#x2F;&#x2F;cheeaun.phoenity.com&#x2F;weblog&#x2F;&quot;&gt;cheeaunblog&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Blog post: &lt;a href=&quot;http:&#x2F;&#x2F;channels.lockergnome.com&#x2F;windows&#x2F;archives&#x2F;20050629_sitepoint_lifts_the_lid_on_firefox_secrets.phtml&quot;&gt;SitePoint Lifts The Lid On Firefox Secrets&lt;&#x2F;a&gt; - &lt;a href=&quot;http:&#x2F;&#x2F;channels.lockergnome.com&#x2F;&quot;&gt;Lockergnome&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Blog post: &lt;a href=&quot;http:&#x2F;&#x2F;www.bernzilla.com&#x2F;item.php?id=507&quot;&gt;Firefox Secrets&lt;&#x2F;a&gt; - &lt;a href=&quot;http:&#x2F;&#x2F;www.bernzilla.com&#x2F;i&quot;&gt;Bernie Zimmermann&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Blog post: &lt;a href=&quot;http:&#x2F;&#x2F;tomorrow.sg&#x2F;archives&#x2F;2005&#x2F;07&#x2F;26&#x2F;firefox_book_written_by_singapor.html&quot;&gt;Firefox book written by Singaporean&lt;&#x2F;a&gt; - &lt;a href=&quot;http:&#x2F;&#x2F;tomorrow.sg&#x2F;&quot;&gt;Tomorrow.sg&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Blog post: &lt;a href=&quot;http:&#x2F;&#x2F;www.zhangyining.net&#x2F;weblog&#x2F;blog_detail.html?item_id=255&quot;&gt;Firefox Secretes&lt;&#x2F;a&gt; (&lt;em&gt;sic&lt;&#x2F;em&gt;) - &lt;a href=&quot;http:&#x2F;&#x2F;www.zhangyining.net&#x2F;weblog&#x2F;&quot;&gt;Zhang Yining&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Getting back on track</title>
    <published>2005-07-28T12:26:47+00:00</published>
    <updated>2005-07-28T12:26:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/07/28/getting-back-on-track/"/>
    <id>https://chuyeow.wtf/2005/07/28/getting-back-on-track/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/07/28/getting-back-on-track/">&lt;p&gt;It&#x27;s been a while since I last blogged huh? Well, I actually &lt;em&gt;was&lt;&#x2F;em&gt; back, until a particularly unfortunate incident with my &lt;acronym title=&quot;Virtual Private Server&quot;&gt;VPS&lt;&#x2F;acronym&gt; where the database tables for WordPress got corrupted (likely due to overflowing backups and running out of space) threw me off track and got me real grief-stricken that I lost my blog template&#x2F;theme and a couple of posts (I&#x27;ve managed to restore the template&#x2F;theme since).&lt;&#x2F;p&gt;
&lt;p&gt;Excuses, all. I&#x27;m horrified that I&#x27;ve actually allowed my blog to fall into a state of disuse and disrepair. I&#x27;m back and I hope to stay back. But first I&#x27;ve to clean up all this crud that&#x27;s on my blog (comment spam, Trackback spam, etc.).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Public Service Announcement&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
I lost a post entitled &quot;Ooh look at this old website I dug up&quot;. I believe I offered something to the person who guessed correctly, but I only have Jed Brown&#x27;s comment in my email. Whoever guessed first before Jed did, please do send me an email (chuyeow at gmail dot com).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>One-click delete in Gmail, thanks to GreaseMonkey</title>
    <published>2005-04-25T19:45:49+00:00</published>
    <updated>2005-04-25T19:45:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/04/25/one-click-delete-in-gmail-thanks-to-greasemonkey/"/>
    <id>https://chuyeow.wtf/2005/04/25/one-click-delete-in-gmail-thanks-to-greasemonkey/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/04/25/one-click-delete-in-gmail-thanks-to-greasemonkey/">&lt;p&gt;Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;greasemonkey.mozdev.org&#x2F;&quot;&gt;GreaseMonkey&lt;&#x2F;a&gt; and this nifty &lt;a href=&quot;http:&#x2F;&#x2F;www.arantius.com&#x2F;article&#x2F;arantius&#x2F;gmail+delete+button&#x2F;&quot;&gt;user script&lt;&#x2F;a&gt; from &lt;a href=&quot;http:&#x2F;&#x2F;www.arantius.com&#x2F;anthony-lieuallen.php&quot;&gt;Anthony Lieuallen&lt;&#x2F;a&gt;, deleting emails in Gmail got much easier and less iffy (there were times when I selected &quot;Add Star&quot; when I really wanted to &quot;Move to Trash&quot;).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;gmail-delete-btn-greasemonkey.png&quot; alt=&quot;Screenshot of the added Delete button in Gmail&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Oh yes, that&#x27;s Trackback spam.&lt;&#x2F;p&gt;
&lt;p&gt;What other neat GreaseMonkey stuff did I miss?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mr Ruderman has switched</title>
    <published>2005-03-14T22:40:51+00:00</published>
    <updated>2005-03-14T22:40:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/03/14/mr-ruderman-has-switched/"/>
    <id>https://chuyeow.wtf/2005/03/14/mr-ruderman-has-switched/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/03/14/mr-ruderman-has-switched/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;2005&#x2F;03&#x2F;13&#x2F;switching-from-movable-type-to-wordpress&#x2F;&quot;&gt;Jesse Ruderman: Switching from Movable Type to WordPress&lt;&#x2F;a&gt;. Gotta upgrade to &lt;a href=&quot;http:&#x2F;&#x2F;wordpress.org&#x2F;&quot;&gt;WordPress&lt;&#x2F;a&gt; 1.5 soonish.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>What&#x27;s up with Stop-Sign and Firefox?</title>
    <published>2005-03-14T21:10:50+00:00</published>
    <updated>2005-03-14T21:10:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/03/14/whats-up-with-stop-sign-and-firefox/"/>
    <id>https://chuyeow.wtf/2005/03/14/whats-up-with-stop-sign-and-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/03/14/whats-up-with-stop-sign-and-firefox/">&lt;p&gt;I was browsing the &lt;a href=&quot;http:&#x2F;&#x2F;www.chrispederick.com&#x2F;work&#x2F;firefox&#x2F;webdeveloper&#x2F;documentation&#x2F;&quot;&gt;documentation&lt;&#x2F;a&gt; for the awesome &lt;a href=&quot;http:&#x2F;&#x2F;www.chrispederick.com&#x2F;work&#x2F;firefox&#x2F;webdeveloper&#x2F;&quot;&gt;Web Developer Toolbar extension&lt;&#x2F;a&gt; today and for some reason noticed a Google ad that was headlined &quot;Get Mozilla Firefox&quot;. It probably caught my eye because Firefox ads on Google were new to me and I wondered if it wasn&#x27;t some sort of &lt;a href=&quot;http:&#x2F;&#x2F;spreadfirefox.com&#x2F;&quot;&gt;sfx&lt;&#x2F;a&gt; initiative of some sort.&lt;&#x2F;p&gt;
&lt;p&gt;I spotted the ad on &lt;a href=&quot;http:&#x2F;&#x2F;www.chrispederick.com&#x2F;work&#x2F;firefox&#x2F;webdeveloper&#x2F;documentation&#x2F;&quot;&gt;this page&lt;&#x2F;a&gt; (will not necessarily appear for you, of course, since Google rotates ads - try surfing around the documentation pages if you&#x27;re interested in seeing the ad for yourself).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;web-developer-toolbar-doc.png&quot; alt=&quot;Screenshot of the Web Developer Toolbar documentation page&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here is the ad itself (it&#x27;s the bottom one). Er, www.stop-sign.com?&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-and-stop-sign.png&quot; alt=&quot;Screenshot of Stop-Sign&#x27;s Firefox ad&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The ad brings you to &lt;a href=&quot;http:&#x2F;&#x2F;www.stop-sign.com&#x2F;se&#x2F;se058.php?n=s_ge_ffx306&amp;kw=ge_mozilla%20firefox&amp;pg=%26se_spin&amp;ver=online&quot;&gt;this landing page&lt;&#x2F;a&gt; (incredibly small screenshot below) which apparently is part of an ad campaign of eAcceleration to promote its Stop-Sign product (which from what I understand is some sort of virus scanner cum spyware remover).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;firefox-stop-sign-landing-page.png&quot; alt=&quot;Screenshot of Stop-Sign&#x27;s Firefox ad landing page&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Well, they seem to be blatantly riding on the coat tails of the Firefox name. And they even offer Firefox (a firefox.exe file) for download which I just don&#x27;t have the guts to try. And their message is ambiguously misleading enough, seeming to convey the idea that Firefox is a product of eAcceleration.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;If you are new to Firefox and eAcceleration, you will be offered a Stop-Sign computer protection package with the Firefox download. Please use it to make sure your computer is virus, spyware, and adware-free.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Very scammy. I don&#x27;t know if anything should (and could) be done about this, but this is surely an unpleasant and rather underhanded way of online advertising. Whether the authorities (er, Mozilla Foundation) should be alerted is something I&#x27;m not really sure of...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>50 Gmail invites - open to public soon?</title>
    <published>2005-02-03T20:36:10+00:00</published>
    <updated>2005-02-03T20:36:10+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/02/03/50-gmail-invites-open-to-public-soon/"/>
    <id>https://chuyeow.wtf/2005/02/03/50-gmail-invites-open-to-public-soon/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/02/03/50-gmail-invites-open-to-public-soon/">&lt;p&gt;Would you look at that? Google has given me &lt;strong&gt;50&lt;&#x2F;strong&gt; Gmail invites to give out. I&#x27;ll bet everyone else with a Gmail account would have a whole bunch of them too. This reeks of either a stress test (though I can&#x27;t really think of anyone who hasn&#x27;t got a Gmail account by this time) or a public release of Gmail soonish.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;gmail-50-invites.png&quot; alt=&quot;Screenshot of my 50 Gmail invites&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And for those of you who wrote to ask if I was OK, thank you for your concern. I&#x27;m rather fine, not doing too well balancing work, writing, and a World of Warcraft addiction. I&#x27;ll be blogging more once I submit my final draft, but before that, &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;12&#x2F;10&#x2F;an-author-i-am-trying-to-be&#x2F;&quot;&gt;blogging will remain sketchy&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Oh, has any Community Champion got their autographed Firefox T-shirt yet? I haven&#x27;t heard anything from sfx, but then again, I haven&#x27;t really been keeping up.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>WoW Rogue video - killing the Ironforge bankers</title>
    <published>2005-01-13T23:26:27+00:00</published>
    <updated>2005-01-13T23:26:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/01/13/wow-rogue-video-killing-the-ironforge-bankers/"/>
    <id>https://chuyeow.wtf/2005/01/13/wow-rogue-video-killing-the-ironforge-bankers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/01/13/wow-rogue-video-killing-the-ironforge-bankers/">&lt;p&gt;World of Warcraft servers are down for maintenance today, so I get time to blog a little and read forum posts. Check out this &lt;a href=&quot;http:&#x2F;&#x2F;forums.worldofwarcraft.com&#x2F;thread.aspx?fn=wow-rogue&amp;t=61825&quot;&gt;Rogue video - Killing the Ironforge bankers thread&lt;&#x2F;a&gt; (and the video of course). It&#x27;s cool being a rogue.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The ones I read first in my long blogroll</title>
    <published>2005-01-13T21:57:08+00:00</published>
    <updated>2005-01-13T21:57:08+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/01/13/the-ones-i-read-first-in-my-long-blogroll/"/>
    <id>https://chuyeow.wtf/2005/01/13/the-ones-i-read-first-in-my-long-blogroll/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/01/13/the-ones-i-read-first-in-my-long-blogroll/">&lt;p&gt;I have a long &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;public&#x2F;redemption&quot;&gt;list of blogs&#x2F;websites&lt;&#x2F;a&gt; (233 feeds at this moment) to read in my &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;&quot;&gt;Bloglines&lt;&#x2F;a&gt; account. I don&#x27;t have the time to read all of them nowadays (I used to), so I&#x27;m finding myself skimming through a select few blogs. Weirdly, even though bloggers like &lt;a href=&quot;http:&#x2F;&#x2F;radio.weblogs.com&#x2F;0001011&#x2F;&quot;&gt;Scoble&lt;&#x2F;a&gt; make very interesting posts, I tend to not read them because he&#x27;s just too damn prolific and I don&#x27;t have the time to read all the posts. Hmm... Interesting... I was just about to check whether there was a way to keep a post unread in Bloglines and there is (there&#x27;s a &quot;Keep New&quot; checkbox at the bottom of every feed item). Well, maybe this will get me reading Scoble again.&lt;&#x2F;p&gt;
&lt;p&gt;As I was saying, I don&#x27;t read every feed I subscribe to nowadays. (By the way, Bloglines only keeps 200 entries per feed before it stops keeping track of new ones.) What I do now is go through the list from top to bottom and check out the ones that I seem to be more interested in. It&#x27;s interesting to see a pattern. I tend to give feeds with too many unread items a miss, resulting in a vicious cycle of them never getting read. Feeds with 30 new items a day, these I also tend to not read. I also read too many Mozilla-related blogs. Here&#x27;s my list of &quot;To Read&quot; blogs (arranged in no particular order) whenever I&#x27;m short on time or just too plain lazy to read everything:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;www.hicksdesign.co.uk&#x2F;journal&#x2F; &quot;&gt;Jon Hicks&#x27; hicksdesign&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  One of my favorite designers who also happens to be a mean programmer (at least from what I can tell from Jon&#x27;s hacking of Textpattern, which powers his blog and portfolio).
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;www.bernzilla.com&#x2F;&quot;&gt;Bernie Zimmermann&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Mozilla blogger and Firefox GrayModern Theme author
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;www.chrispederick.com&#x2F;blog&#x2F;&quot;&gt;Chris Pederick&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Chris Pederick is the author of the Web Developer Tools Firefox extension, among other cool projects.
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;&quot;&gt;Forever Geek&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Which I contribute to, but I&#x27;m on hiatus now.
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;www.gadgetopia.com&#x2F;&quot;&gt;Gadgetopia&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Lots of neat posts and links on technology
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;www.gentoo.org&#x2F;&quot;&gt;Gentoo Linux News&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Not a blog, but I love Gentoo!
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;www.gravatar.com&#x2F;blog&#x2F;&quot;&gt;Gravatar blog&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  I think Gravatars are pretty sweet, this keeps me in the loop of what Tom Werner&#x27;s up to.
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;lifeatngeeann.blogspot.com&#x2F;&quot;&gt;Life At Ngee Ann&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  This is a fellow Singaporean&#x27;s blog, quite humorous. &quot;Ngee Ann&quot; refers to Ngee Ann polytechnic, a local academic institution.
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;popagandhi.com&#x2F;&quot;&gt;life in mono&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Fellow Singaporean &lt;a href=&quot;http:&#x2F;&#x2F;popagandhi.com&#x2F;about&#x2F;&quot;&gt;Adrianna&lt;&#x2F;a&gt;&#x27;s a cool techie Mac evangelist.
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;&quot;&gt;adot&#x27;s notblog*&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Asa Dotzler&#x27;s blog. Mozilla stuff is always interesting.
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;cheeaun.phoenity.com&#x2F;weblog&#x2F;&quot;&gt;cheeaunblog&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Author of the famous Phoenity theme, who happens to live in Penang where I some relatives stay. Maybe we can meet up when I go there, huh, Chee Aun?
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;&quot;&gt;Neil&#x27;s World&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Neil Turner blogs stuff that I would blog myself if I could. Well, mostly. Mozilla and tech blog.
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;photomatt.net&#x2F;&quot;&gt;Photo Matt&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Matthew Mullenweg&#x27;s the lead developer of WordPress, and &lt;a href=&quot;http:&#x2F;&#x2F;photomatt.net&#x2F;2005&#x2F;01&#x2F;11&#x2F;hot-barely-legal-matt&#x2F;&quot;&gt;turned 21&lt;&#x2F;a&gt; not long ago.
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;philwilson.org&#x2F;blog&#x2F;&quot;&gt;philwilson.org&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Phil Wilson blogs mostly on Firefox and the Semantic Web.
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;vantan.org&#x2F;&quot;&gt;vantan.org: The Daily Weblog&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Fellow Singaporean Vanessa Tan is a &quot;devoted Netizen&quot; who works in an environment unfriendly to Firefox.
&lt;&#x2F;li&gt;
&lt;li&gt;
  &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;&quot;&gt;The Burning Edge&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
  Used to follow this religiously, but a little less now because of more infrequent posts and also because much of the work now is bug fixing since the Aviary branch landing.
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Not too many A-list bloggers in that list, but that&#x27;s probably because people like &lt;a href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;&quot;&gt;Simon Willison&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.stopdesign.com&#x2F;&quot;&gt;Doug Bowman&lt;&#x2F;a&gt; have been posting less of late. Give these blogs&#x2F;sites a visit or two and let me know if you know of any related blog that I can add to my feed aggregator (yes, I&#x27;m still interested in more despite an unread list of hundreds).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>World of Warcraft servers are always up, apparently</title>
    <published>2005-01-04T23:22:24+00:00</published>
    <updated>2005-01-04T23:22:24+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/01/04/world-of-warcraft-servers-are-always-up-apparently/"/>
    <id>https://chuyeow.wtf/2005/01/04/world-of-warcraft-servers-are-always-up-apparently/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/01/04/world-of-warcraft-servers-are-always-up-apparently/">&lt;p&gt;When you have a &lt;a href=&quot;http:&#x2F;&#x2F;www.worldofwarcraft.com&#x2F;serverstatus&#x2F;&quot;&gt;server status page&lt;&#x2F;a&gt; that doesn&#x27;t work, and which tauntingly indicates that all servers are up even when they clearly aren&#x27;t, you have to wonder whether it&#x27;s a marketing tool for Blizzard, or just plain laziness in fixing a clearly broken script. Check out the &lt;a href=&quot;http:&#x2F;&#x2F;www.worldofwarcraft.com&#x2F;serverstatus&#x2F;&quot;&gt;World of Warcraft Realm status page&lt;&#x2F;a&gt; - I&#x27;ve never seen a realm (i.e. a server) indicated as being down when it actually &lt;em&gt;is&lt;&#x2F;em&gt; down.&lt;&#x2F;p&gt;
&lt;p&gt;Right now, &lt;em&gt;all&lt;&#x2F;em&gt; servers are down because of weekly maintenance that goes on for 4 hours. And guess what? The server status pages indicates that &lt;em&gt;ALL&lt;&#x2F;em&gt; servers are up, alive and bursting with players killing goretusk boars and pygmy venom web spiders. I&#x27;m not whining about the downtime, but I am whining about the perenially broken &lt;a href=&quot;http:&#x2F;&#x2F;www.worldofwarcraft.com&#x2F;serverstatus&#x2F;&quot;&gt;server status page&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.altf4gaming.com&#x2F;wow&#x2F;wow-status.html&quot;&gt;This page&lt;&#x2F;a&gt; seems to be far more accurate in providing realm status.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Another one switches to WordPress</title>
    <published>2005-01-04T21:04:55+00:00</published>
    <updated>2005-01-04T21:04:55+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/01/04/another-one-switches-to-wordpress/"/>
    <id>https://chuyeow.wtf/2005/01/04/another-one-switches-to-wordpress/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/01/04/another-one-switches-to-wordpress/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ben.milleare.com&#x2F;2005&#x2F;01&#x2F;01&#x2F;mt-to-wordpress&#x2F;&quot;&gt;Ben Milleare switches to WordPress&lt;&#x2F;a&gt;. Don&#x27;t you just love the way his Gravatars are set up? :P&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Full disclosure (of useless Web statistics), Dec 2004</title>
    <published>2005-01-02T14:58:44+00:00</published>
    <updated>2005-01-02T14:58:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2005/01/02/full-disclosure-of-useless-web-statistics-dec-2004/"/>
    <id>https://chuyeow.wtf/2005/01/02/full-disclosure-of-useless-web-statistics-dec-2004/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2005/01/02/full-disclosure-of-useless-web-statistics-dec-2004/">&lt;p&gt;How fun, starting a new year with a bland post on Web statistics.&lt;&#x2F;p&gt;
&lt;p&gt;December 2004 was a record month for this blog, with record highs in visits, pages and bandwidth. I exceeded my monthly transfer limit of 20GB by just a little bit as well.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;awstats-summary-dec-2004.png&quot; alt=&quot;Web statistics summary for Dec 2004&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Getting an average of 4.7K visits per day, or 10K pages per day.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;awstats-daily-dec-2004.png&quot; alt=&quot;Daily Web statistics for Dec 2004&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to the &quot;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;12&#x2F;14&#x2F;homer-simpson-uses-tabbed-browsing&#x2F;&quot;&gt;Homer Simpson uses tabbed browsing&lt;&#x2F;a&gt;&quot; post, transfer spiked to almost 3GB on Dec 15.&lt;&#x2F;p&gt;
&lt;p&gt;Top referrers included &lt;a href=&quot;http:&#x2F;&#x2F;spreadfirefox.com&#x2F;&quot;&gt;SpreadFirefox.com&lt;&#x2F;a&gt; and Bloglines. There was a referrer spammer (brushed out in the screenshot) which made it to the top 10 before I caught it and blocked it.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;awstats-referrers-dec-2004.png&quot; alt=&quot;Top referrers for Dec 2004&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s how referrers are blocked (with .htaccess), for those who are still looking for a solution. What these 2 rewrite rules do is to, respectively, rewrite the listed IP addresses, and rewrite the referrers with the following strings in them, back to the client&#x27;s IP. This works extremely well, and I know because I&#x27;ve had my server (a VPS) brought to its knees from constant referrer spamming. The hit rates from these spammers were so high that it practically became a &lt;acronym title=&quot;Denial of Service&quot;&gt;DOS&lt;&#x2F;acronym&gt; attack. Since I&#x27;ve implemented these rewrite rules, all has been peaceful and I can finally see uptimes of more than 3 days (believe it or not, the VPS &lt;em&gt;did&lt;&#x2F;em&gt; go down that often).&lt;&#x2F;p&gt;
&lt;p&gt;RewriteCond %{REMOTE_ADDR} ^195.175.37.26 [OR]&lt;br &#x2F;&gt;
RewriteCond %{REMOTE_ADDR} ^195.175.37.24&lt;br &#x2F;&gt;
RewriteRule ^.* http:&#x2F;&#x2F;%{REMOTE_ADDR}&#x2F; [L]&lt;&#x2F;p&gt;
&lt;p&gt;RewriteCond %{HTTP_REFERER} texasholdem [OR]&lt;br &#x2F;&gt;
RewriteCond %{HTTP_REFERER} example\.com [OR]&lt;br &#x2F;&gt;
RewriteCond %{HTTP_REFERER} example2\.com&lt;br &#x2F;&gt;
RewriteRule ^.* http:&#x2F;&#x2F;%{REMOTE_ADDR}&#x2F; [L]&lt;&#x2F;p&gt;
&lt;p&gt;The referrer spammers are still going at it (though they don’t appear in AWStats) - I can see them hitting me when I check my server-status page (see the &lt;a href=&quot;http:&#x2F;&#x2F;httpd.apache.org&#x2F;docs-2.0&#x2F;mod&#x2F;mod_status.html&quot;&gt;mod_status&lt;&#x2F;a&gt; module).&lt;&#x2F;p&gt;
&lt;p&gt;I don&#x27;t think I&#x27;ll need to upgrade my hosting plan yet, since the bandwidth spike was a one time thing caused by the crazy Homer Simpson entry.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;And here&#x27;s the top 10 browsers &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2005&#x2F;01&#x2F;02&#x2F;full-disclosure-of-useless-web-statistics-dec-2004&#x2F;#comment-6180&quot;&gt;as requested&lt;&#x2F;a&gt;. Unsurprising that Firefox tops the list.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;awstats-browsers-dec-2004.png&quot; alt=&quot;Browser stats for Dec 2004&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Well, here&#x27;s to a better year ahead for everyone. For myself, I look forward to having a good time at my new job, (finally) getting published, finding religion, and finally getting a move on in life. I&#x27;m not one for &quot;Happy New Year&quot;s and new year resolutions though. So blah, have fun.&lt;&#x2F;p&gt;
&lt;p&gt;Look me up in the Cenarius server if any of you are playing World of Warcraft - my main character&#x27;s Lucita (gnome rogue).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Seen elsewhere: Life without Firefox...</title>
    <published>2004-12-30T15:23:42+00:00</published>
    <updated>2004-12-30T15:23:42+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/30/seen-elsewhere-life-without-firefox/"/>
    <id>https://chuyeow.wtf/2004/12/30/seen-elsewhere-life-without-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/30/seen-elsewhere-life-without-firefox/">&lt;p&gt;A &lt;a href=&quot;http:&#x2F;&#x2F;vantan.org&#x2F;archives&#x2F;2004&#x2F;12&#x2F;29_life_without_firefox.php&quot;&gt;poem on Life without Firefox&lt;&#x2F;a&gt;, by Vanessa Tan, who has &lt;a href=&quot;http:&#x2F;&#x2F;vantan.org&#x2F;archives&#x2F;2004&#x2F;12&#x2F;23_farewell_to_my_firefox.php&quot;&gt;lost Firefox to her organization&#x27;s software policy&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>My favorite songs of 2004</title>
    <published>2004-12-26T23:07:27+00:00</published>
    <updated>2004-12-26T23:07:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/26/my-favorite-songs-of-2004/"/>
    <id>https://chuyeow.wtf/2004/12/26/my-favorite-songs-of-2004/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/26/my-favorite-songs-of-2004/">&lt;p&gt;I like music. Well, I like the music that I like, not all genres. OK, honestly, I&#x27;m fairly picky about the songs I listen to. I only listen to alternative, alternative rock, punk rock, punk pop, and rap (mostly Eminem) music (I&#x27;m not even sure if the genres are correct). Music keeps me sane on commutes of more than an hour long to and from work, and shuts out noise at work whenever necessary (not that it happens often). As a result, I probably have a rather unhealthy dependence on my iPod mini - I can&#x27;t go anywhere without it.&lt;&#x2F;p&gt;
&lt;p&gt;Argh, I realize that recently, my thoughts don&#x27;t flow in a coherent manner when blogging. I think it has to do with a combination of factors: &lt;a href=&quot;http:&#x2F;&#x2F;www.worldofwarcraft.com&#x2F;&quot;&gt;World of Warcraft&lt;&#x2F;a&gt; addiction (anyone interested in a Firefox guild?), book writing, and not getting enough sleep. Anyway, let&#x27;s get back on track shall we?&lt;&#x2F;p&gt;
&lt;p&gt;Now, since almost everyone is doing it (posting their top 10 albums of 2004 and the like), I thought I&#x27;d share a little on what I have been listening to over the past year. These are not songs that were released in 2004 though, just the songs I&#x27;ve listened to the most often in 2004.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
    &lt;strong&gt;Slow Motion (Dirty Version)&lt;&#x2F;strong&gt; by Third Eye Blind&lt;br &#x2F;&gt;
    I love Third Eye Blind. I probably played this song more than a thousand times over the year. This has such a catchy instrumental background - at first I wasn&#x27;t aware of the &quot;dirty version&quot; (drug themes) and only heard the clean instrumental version that had minimal lyrics. I liked that a lot and after I was made aware of the version with lyrics, I liked it even more for its quirky lyrics.
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;strong&gt;Hands Down&lt;&#x2F;strong&gt; by Dashboard Confessional&lt;br &#x2F;&gt;
    With lyrics like this: &quot;My hopes are so high that your kiss might kill me. So won&#x27;t you kill me, so I die happy&quot;, what&#x27;s not to like? I had this song set to repeat over and over again on my iPod quite a few times.
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;strong&gt;Rough Draft&lt;&#x2F;strong&gt; by Yellowcard&lt;br &#x2F;&gt;
    This is actually a sappy love song if you follow the lyrics, but I kinda like the way it flows off your tongue. Same for this, I had this set to single repeat as well for a period of time.
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;strong&gt;Friends O&#x27; Mine&lt;&#x2F;strong&gt; by Bowling For Soup&lt;br &#x2F;&gt;
    Damn catchy and nice to sing along to. Well, I sing along (very, very quietly and discreetly) to almost every song here in this list.
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;strong&gt;Vindicated&lt;&#x2F;strong&gt; by Dashboard Confessional&lt;br &#x2F;&gt;
    This was popular because it was in the Spiderman 2 OST. I didn&#x27;t catch it on radio (I don&#x27;t listen to radio anymore actually) and didn&#x27;t know that it was &lt;em&gt;that&lt;&#x2F;em&gt; popular until I heard it on the radio.
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;strong&gt;Inside Out&lt;&#x2F;strong&gt; by Yellowcard&lt;br &#x2F;&gt;
    &quot;Here. A little sympathy. For you to waste on me.&quot; Yellowcard seems to like writing songs that are self-pitying. And I seem to like those songs. Self-pitying bastard.
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;strong&gt;World at Large&lt;&#x2F;strong&gt; by Modest Mouse&lt;br &#x2F;&gt;
    I didn&#x27;t actually like Modest Mouse at first when introduced to them by a good friend. They&#x27;re one of my favorites now.
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;strong&gt;Map Of Your Head&lt;&#x2F;strong&gt; by Muse&lt;br &#x2F;&gt;
    This song is just good. I mean, listen to it. The guitars sound great, the Muse lead singer is at his best.
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;strong&gt;El Scorcho&lt;&#x2F;strong&gt; by Weezer&lt;br &#x2F;&gt;
    &quot;I&#x27;m a lot like you, so please, hello, I&#x27;m here, I&#x27;m waiting.&quot;
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;strong&gt;Undone - The Sweater Song&lt;&#x2F;strong&gt; by Weezer&lt;br &#x2F;&gt;
    This is a weird semi-song. &quot;If you want to destroy my sweater, hold this thread as I walk away.&quot;
  &lt;&#x2F;li&gt;
&lt;li&gt;
    &lt;strong&gt;Semi-Charmed Life&lt;&#x2F;strong&gt; by Third Eye Blind&lt;br &#x2F;&gt;
    This makes number 11. I can&#x27;t leave out this one - this introduced me to look away from mainstream pop songs that I was somewhat into at the time. Granted, Semi-Charmed Life is almost a pop song, but it did spur me to check out Third Eye Blind and that led to other similar artistes.
  &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;So, what have you guys been listening to this past year? Anyone have similar tastes? More importantly, do you have any songs or artistes to recommend?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Update website gets a facelift</title>
    <published>2004-12-25T02:59:53+00:00</published>
    <updated>2004-12-25T02:59:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/25/mozilla-update-website-gets-a-facelift/"/>
    <id>https://chuyeow.wtf/2004/12/25/mozilla-update-website-gets-a-facelift/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/25/mozilla-update-website-gets-a-facelift/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;addons.update.mozilla.org&#x2F;&quot;&gt;Mozilla Update&lt;&#x2F;a&gt; has gone through a facelift and now looks &lt;em&gt;much&lt;&#x2F;em&gt; better than before (and also, more importantly, it now looks and feels like the main &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&quot;&gt;mozilla.org site&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;mozilla-update-new-look-dec-2004.png&quot; alt=&quot;Mozilla Update website cropped screenshot&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I haven&#x27;t seen any announcement on this yet on mozilla.org nor on &lt;a href=&quot;http:&#x2F;&#x2F;mozillazine.org&#x2F;&quot;&gt;MozillaZine&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Opera 8 beta 1</title>
    <published>2004-12-24T01:36:30+00:00</published>
    <updated>2004-12-24T01:36:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/24/opera-8-beta-1/"/>
    <id>https://chuyeow.wtf/2004/12/24/opera-8-beta-1/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/24/opera-8-beta-1/">&lt;p&gt;Opera 8 Beta 1 is out. Get it from the &lt;a href=&quot;http:&#x2F;&#x2F;www.opera.com&#x2F;download&#x2F;?ver=8.00b1&quot;&gt;Opera website&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;www.opera.com&#x2F;windows&#x2F;changelogs&#x2F;operabeta&#x2F;&quot;&gt;Changelog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>How would you feel if your organization forbade you from using Firefox?</title>
    <published>2004-12-24T01:14:35+00:00</published>
    <updated>2004-12-24T01:14:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/24/no-firefox-at-work/"/>
    <id>https://chuyeow.wtf/2004/12/24/no-firefox-at-work/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/24/no-firefox-at-work/">&lt;p&gt;Remember I mentioned &lt;a href=&quot;http:&#x2F;&#x2F;vantan.org&#x2F;&quot;&gt;Vanessa Tan&lt;&#x2F;a&gt; who had an &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;11&#x2F;05&#x2F;ie-only-no-firefox&#x2F;&quot;&gt;IE-only policy at work&lt;&#x2F;a&gt;? Now, the policy is official and an unbendable rule (my understanding was that Vanessa was able to use it somehow, before). Read her &lt;a href=&quot;http:&#x2F;&#x2F;vantan.org&#x2F;archives&#x2F;2004&#x2F;12&#x2F;23_farewell_to_my_firefox.php&quot;&gt;farewell to Firefox&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Much has been sacrificed in the name of security.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Of course, that bit is debatable (because IE is intrinsically insecure, though Firefox is not without its problems, as its security has been &lt;a href=&quot;http:&#x2F;&#x2F;blogs.msdn.com&#x2F;ptorr&#x2F;archive&#x2F;2004&#x2F;12&#x2F;20&#x2F;327511.aspx&quot;&gt;called into question&lt;&#x2F;a&gt; recently). I shan&#x27;t go there. But please, don&#x27;t bring up the point of security via obscurity (because I believe there is no way you can prove it is true until Firefox &lt;strong&gt;is&lt;&#x2F;strong&gt; as widely-used as IE).&lt;&#x2F;p&gt;
&lt;p&gt;Back to the blog title: how would you feel if your organization refused you the freedom of using your preferred browser (assuming that it isn&#x27;t IE that you dig)? Would you take it lying down, or would you take reactive action? Remember this is different from an IT policy that, for example, forbids you from installing unlicensed software or software that is particularly vulnerable to security risks (I&#x27;m tempted to say IE here). Firefox is neither unlicensed software, nor is it as vulnerable to security risks as the software you are (hypothetically) being forced to use (IE). I know I wouldn&#x27;t be happy. You might as well take away my Internet connection (which just may happen at work, soon, but for other reasons).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gmail invites are back</title>
    <published>2004-12-23T21:37:49+00:00</published>
    <updated>2004-12-23T21:37:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/23/gmail-invites-are-back/"/>
    <id>https://chuyeow.wtf/2004/12/23/gmail-invites-are-back/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/23/gmail-invites-are-back/">&lt;p&gt;Looks like they&#x27;re giving them out again.
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;gmail-invites-back-dec-2004.png&quot; alt=&quot;Screenshots of my Gmail invites&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Unread tabs Firefox extension (otherwise known as the simplest extension ever)</title>
    <published>2004-12-20T21:10:03+00:00</published>
    <updated>2004-12-20T21:10:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/20/unread-tabs-firefox-extension/"/>
    <id>https://chuyeow.wtf/2004/12/20/unread-tabs-firefox-extension/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/20/unread-tabs-firefox-extension/">&lt;p&gt;&lt;strong&gt;A request&lt;&#x2F;strong&gt;: if you intend to link to this entry, please link to &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;mozilla&#x2F;unreadtabs&#x2F;&quot;&gt;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;mozilla&#x2F;unreadtabs&#x2F;&lt;&#x2F;a&gt; instead.&lt;&#x2F;p&gt;
&lt;p&gt;As requested (by 2 people) in my &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;12&#x2F;20&#x2F;making-unread-tabs-obvious-in-firefox&#x2F;&quot;&gt;previous entry&lt;&#x2F;a&gt;, here&#x27;s the Unread Tabs extension for Firefox:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;javascript:void(InstallTrigger.install({&#x27;Unread Tabs&#x27;:&#x27;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;mozilla&#x2F;unreadtabs&#x2F;unreadtabs-0.3.xpi &#x27;}))&quot;&gt;Install Unread Tabs&lt;&#x2F;a&gt; | &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;mozilla&#x2F;unreadtabs&#x2F;unreadtabs-0.3.xpi&quot;&gt;Download Unread Tabs&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Also available from the &lt;a href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;extensions&#x2F;moreinfo.php?id=1916&amp;application=firefox&quot;&gt;Firefox Add-ons site&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This extension italicizes the title of tabs that you have not yet read so that you can keep track of what youï¿½ve read and what you havenï¿½t.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-unread-tab-italicized.png&quot; alt=&quot;Screenshot of unread tab being italicized in Firefox&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear: both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I claim no credit for the extension: CSS comes from the &lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;index.phtml?title=Change_the_style_of_tab_markers&quot;&gt;Change the style of tab markers&lt;&#x2F;a&gt; entry in the &lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;&quot;&gt;MozillaZine Knowledge Base&lt;&#x2F;a&gt;. Thanks to an &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;12&#x2F;20&#x2F;making-unread-tabs-obvious-in-firefox&#x2F;#comment-6033&quot;&gt;anonymous commentor&lt;&#x2F;a&gt;, the CSS is just a single rule (rather than the 3 in the Knowledge Base entry linked to above):&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;#content tab:not([selected]) {&lt;br &#x2F;&gt;
  font-style: italic !important;&lt;br &#x2F;&gt;
}&lt;&#x2F;div&gt;
&lt;p&gt;This has to be the world&#x27;s simplest extension with some boilerplate XUL, an empty stub JS file, and a single CSS rule. I simply stripped almost everything out of another extension that I was working on (I&#x27;ve hit a snag on that one though) and did some run-of-the-mill search and replace.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Making unread tabs obvious in Firefox</title>
    <published>2004-12-20T00:05:32+00:00</published>
    <updated>2004-12-20T00:05:32+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/20/making-unread-tabs-obvious-in-firefox/"/>
    <id>https://chuyeow.wtf/2004/12/20/making-unread-tabs-obvious-in-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/20/making-unread-tabs-obvious-in-firefox/">&lt;p&gt;&lt;ins&gt;Update: as requested: &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;mozilla&#x2F;unreadtabs&#x2F;&quot;&gt;Unread Tabs extension&lt;&#x2F;a&gt;&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Saw this tip over at the &lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;&quot;&gt;MozillaZine Knowledge Base&lt;&#x2F;a&gt;:&lt;br &#x2F;&gt;
&lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;index.phtml?title=Change_the_style_of_tab_markers&quot;&gt;Change the style of tab markers&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Adding those CSS rules to your userChrome.css file will italicize the titles of tabs that you haven&#x27;t read.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-unread-tab-italicized.png&quot; alt=&quot;Screenshot of unread tab being italicized in Firefox&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Very useful for keeping track of what you&#x27;ve read and what you haven&#x27;t (also helps prevent you from accidentally closing an unread tab).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox NYT ad, some disappointment</title>
    <published>2004-12-17T15:58:05+00:00</published>
    <updated>2004-12-17T15:58:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/17/firefox-nyt-ad-some-disappointment/"/>
    <id>https://chuyeow.wtf/2004/12/17/firefox-nyt-ad-some-disappointment/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/17/firefox-nyt-ad-some-disappointment/">&lt;p&gt;&lt;ins&gt;Update: &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;12&#x2F;17&#x2F;firefox-nyt-ad-some-disappointment&#x2F;#comment-5986&quot;&gt;Daryl responds&lt;&#x2F;a&gt;, and so does &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;12&#x2F;17&#x2F;firefox-nyt-ad-some-disappointment&#x2F;#comment-5989&quot;&gt;Rob Davis&lt;&#x2F;a&gt;, both from the Spreadfirefox team. Please do send an email to &lt;a href=&quot;mailto:nytadcorrections@gmail.com&quot;&gt;nytadcorrections@gmail.com&lt;&#x2F;a&gt; should you believe your name listing to be in error or if it&#x27;s not there.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So the &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;8769&quot;&gt;Firefox NYT ad has gone out&lt;&#x2F;a&gt;. Great-looking ad, great work everyone at &lt;acronym title=&quot;Spreadfirefox&quot;&gt;sfx&lt;&#x2F;acronym&gt;. Ooh so here&#x27;s my name:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-nyt-ad-ccy.png&quot; alt=&quot;My name in the Firefox NYT ad&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I must, however, express my dismay at how the exercise was handled. No communication with the donors &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;4154&quot;&gt;as promised&lt;&#x2F;a&gt; (we were supposed to get an email prior to the release of the ad), and no one will answer &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;8772#comment-15290&quot;&gt;my comments on sfx&lt;&#x2F;a&gt; nor my emails. After significant &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;10&#x2F;22&#x2F;my-name-will-be-in-the-new-york-times&#x2F;&quot;&gt;pimping&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;10&#x2F;24&#x2F;6-more-days-to-show-your-support-for-firefox&#x2F;&quot;&gt;whoring&lt;&#x2F;a&gt;, I think I got 13 donations, but no one at sfx has yet to reply to my emails when I requested that they run a check for me on whether I was a &quot;Community Champion&quot; (who get their names underlined, among other things that they may or may not get &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;3749#CC&quot;&gt;as promised&lt;&#x2F;a&gt;). Surely it counts for something, insignificant as my efforts were in the greater picture.&lt;&#x2F;p&gt;
&lt;p&gt;Is there a lack of communication somewhere? I&#x27;d say so, and not just because I wasn&#x27;t replied to, but because there weren&#x27;t much in terms of updates on when the ad would have been released. There also wasn&#x27;t a draft of the ad put up for review, meaning some people had their names reversed or they simply weren&#x27;t there. Commendable, of course, that they &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;8772&quot;&gt;offer to do this&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;We will incorporate all requests for corrections we receive and, where we are responsible for the error, we will send out free, corrected posters of the ad autographed by some members of the Firefox development team. As appropriate we will also issue credits or refunds on a case by case basis.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Still, great ad, I can&#x27;t imagine how much of a nightmare it must have been to get the names in there, and go &lt;a href=&quot;http:&#x2F;&#x2F;getfirefox.com&#x2F;&quot;&gt;Firefox&lt;&#x2F;a&gt;! Awesome work, awesome fund-raising campaign for an awesome Web browser.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Leaving a good company - muvee Technologies</title>
    <published>2004-12-17T01:25:09+00:00</published>
    <updated>2004-12-17T01:25:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/17/leaving-a-good-company-muvee-technologies/"/>
    <id>https://chuyeow.wtf/2004/12/17/leaving-a-good-company-muvee-technologies/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/17/leaving-a-good-company-muvee-technologies/">&lt;p&gt;Yesterday was the official last day of my 6 months tenure as Web Developer and webmaster at &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;&quot;&gt;muvee Technologies&lt;&#x2F;a&gt;. It was a good 6 months, with the first 3 months being great (it is my first job after all), and slightly tapering off towards the end as I started to realize that perhaps being a Web Developer is not quite what I want to do. The bosses found out about my doubts somewhere in the middle and were totally awesome to involve me in projects that would interest me and kept me going for the remaining months. Still, it was not to be and I needed to make the hard decision to leave. It was coming all this while (my leaving), so I wasn&#x27;t surprised and I&#x27;d say neither were many people. I tendered my resignation a month ago.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;muvee_logo.jpg&quot; alt=&quot;muvee logo&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I remember being rather impressed with the company during the interview process because of the questions asked (these included some creative aptitude questions which I sort of floundered on), the keenness, friendliness, and plain techie-ness of the CEO (Pete Kellock), the COO (Phil Morgan), the Chief Opportunities Officer (Terence Swee) and the VP of QA&#x2F;Customization (&lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;website&#x2F;bios.php&quot;&gt;biographies&lt;&#x2F;a&gt;) at my 2nd interview. People were working, walking around, talking in a comfortable environment and dressed in jeans - this was something really different because I never expected such a relaxed atmosphere as there was at muvee. Crazily enough, I almost didn&#x27;t want to go for the 2nd interview after the 1st one because I didn&#x27;t think I&#x27;d accept their offer even if muvee made me one. But I did go and I did take up their offer, rejecting another offer as a J2EE software developer in a decision that I will never know whether was right or wrong. From the company&#x27;s perspective, they have lost the investment they&#x27;ve put into me. From my perspective, I have lost the opportunity to be a software developer for the past 6 months, which I am now discovering I want to be, much more than I want to be a web developer.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll miss working at &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;&quot;&gt;muvee&lt;&#x2F;a&gt;, the great bosses (who never really acted that much as superiors but rather as equal colleagues), the &quot;everyday is Friday&quot; rule (in terms of office wear), and, most of all, the people (not everyone, I&#x27;ll readily admit - in fact, just a few peeps).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Homer Simpson uses tabbed browsing</title>
    <published>2004-12-14T20:08:35+00:00</published>
    <updated>2004-12-14T20:08:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/14/homer-simpson-uses-tabbed-browsing/"/>
    <id>https://chuyeow.wtf/2004/12/14/homer-simpson-uses-tabbed-browsing/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/14/homer-simpson-uses-tabbed-browsing/">&lt;p&gt;I just watched the latest episode of The Simpsons and guess what? Homer uses a web browser with tabbed browsing!&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;screenshots&#x2F;homer-tabbed-browsing-zoomed.png&quot; title=&quot;Click to zoom in&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;homer-tabbed-browsing.png&quot; alt=&quot;A scene in The Simpsons Season 15 Episode 5 where Homer uses a browser with tabbed browsing&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It could be the Mozilla Suite, Firefox, Opera, or &amp;lt;insert browser that supports tabbed browsing here&amp;gt;, but it sure ain&#x27;t Internet Explorer.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Since someone &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;12&#x2F;14&#x2F;homer-simpson-uses-tabbed-browsing&#x2F;#comment-5960&quot;&gt;commented&lt;&#x2F;a&gt; about my media player, I&#x27;d like to point out that I use Media Player Classic, which happens to be an Open Source product. It&#x27;s Sourceforge project page is at http:&#x2F;&#x2F;sourceforge.net&#x2F;projects&#x2F;guliverkli&#x2F;, but you&#x27;d do better to check out &lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;2004&#x2F;Jan&#x2F;13&#x2F;media_player_classic.html&quot;&gt;Neil Turner’s writeup&lt;&#x2F;a&gt; instead. I hate Windows Media Player for its bloatedness, clunkiness and its tendency to be totally unhelpful or even go bust when required codecs aren&#x27;t there.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Final Fantasy VII: Advent Children trailer</title>
    <published>2004-12-13T01:27:15+00:00</published>
    <updated>2004-12-13T01:27:15+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/13/final-fantasy-vii-advent-children-trailer/"/>
    <id>https://chuyeow.wtf/2004/12/13/final-fantasy-vii-advent-children-trailer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/13/final-fantasy-vii-advent-children-trailer/">&lt;p&gt;Enjoyed Final Fantasy VII? You&#x27;ll probably want to take a look at this (2nd) promo trailer for &lt;a href=&quot;http:&#x2F;&#x2F;www.square-enix.co.jp&#x2F;dvd&#x2F;ff7ac&#x2F;&quot;&gt;Final Fantasy VII: Advent Children&lt;&#x2F;a&gt;, a CG movie that looks to be totally awesome. It should be out soonish (either this month or early January).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Cone of gayness</title>
    <published>2004-12-13T01:01:38+00:00</published>
    <updated>2004-12-13T01:01:38+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/13/cone-of-gayness/"/>
    <id>https://chuyeow.wtf/2004/12/13/cone-of-gayness/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/13/cone-of-gayness/">&lt;p&gt;&lt;ins&gt;Reason why linking to this post may not work: mod_rewrite rules rewrite all URLs that contain the word &quot;gay&quot; (and for that matter, &quot;sex&quot;, &quot;porn&quot;, &quot;beastiality&quot;, &quot;viagra&quot; and more) to the client&#x27;s IP - this is to block out referrer spam which I get a lot of and brings down the site in a fashion not unlike a &lt;acronym title=&quot;Distributed Denial of Service&quot;&gt;DDoS&lt;&#x2F;acronym&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;If you got a weird page (like a page requesting you login to a router) before, it&#x27;s your own router (or your ISP&#x27;s gateway). The link works now because I&#x27;ve removed the word &quot;gay&quot; from the mod_rewrite rule list. Remember, if you wish to comment on technical faults of this site, please base them on correct information (and if you are arguing from a technical standpoint, you&#x27;d do well to vaguely recognize several familar IP addresses). On the other hand, I admit my callousness in the &quot;gay joke&quot; and am duly chastized - for that I have no excuse.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Also, I should have listened to the warnings and not posted this entry in the first place - homosexuality is still a touchy subject. Nevertheless, the image is still there (for, um, posterity) - I&#x27;m only not displaying it in this entry.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Cheers, and chill out.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google Labs releases LiveSearch-based enhancement</title>
    <published>2004-12-11T11:47:47+00:00</published>
    <updated>2004-12-11T11:47:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/11/google-labs-releases-livesearch-based-enhancement/"/>
    <id>https://chuyeow.wtf/2004/12/11/google-labs-releases-livesearch-based-enhancement/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/11/google-labs-releases-livesearch-based-enhancement/">&lt;p&gt;Kevin Gibbs, software engineer at Google, has written a bit of an enhancement to Google Search that uses &lt;a href=&quot;http:&#x2F;&#x2F;blog4.bitflux.ch&#x2F;wiki&#x2F;LiveSearch&quot;&gt;LiveSearch&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;googleblog&#x2F;2004&#x2F;12&#x2F;ive-got-suggestion.html&quot;&gt;His post on the Google Blog&lt;&#x2F;a&gt; was probably written to make me feel jealous I wasn&#x27;t working at Google. Anyway, check out &lt;a href=&quot;http:&#x2F;&#x2F;labs.google.com&#x2F;suggest&quot;&gt;Google Suggest&lt;&#x2F;a&gt; over at &lt;a href=&quot;http:&#x2F;&#x2F;labs.google.com&#x2F;&quot;&gt;Google Labs&lt;&#x2F;a&gt; - it&#x27;s kinda useful but I guess no longer cool (since this &lt;a href=&quot;http:&#x2F;&#x2F;blog4.bitflux.ch&#x2F;wiki&#x2F;LiveSearch&quot;&gt;isn&#x27;t new&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;google-suggest-muvee.png&quot; alt=&quot;Screenshot of Google Suggest in action&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And would you look at that: &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.muvee.com&#x2F;&quot;&gt;muvee autoProducer&lt;&#x2F;a&gt; crack&quot; comes up when I enter &quot;muvee&quot;. And of course typing &quot;chu yeo&quot; in there doesn&#x27;t give &quot;chu yeow&quot;. More on how it works in the &lt;a href=&quot;http:&#x2F;&#x2F;labs.google.com&#x2F;suggest&#x2F;faq.html&quot;&gt;Google Suggest FAQ&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>An author, I am trying to be</title>
    <published>2004-12-10T00:01:12+00:00</published>
    <updated>2004-12-10T00:01:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/10/an-author-i-am-trying-to-be/"/>
    <id>https://chuyeow.wtf/2004/12/10/an-author-i-am-trying-to-be/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/10/an-author-i-am-trying-to-be/">&lt;p&gt;I&#x27;ve always kinda loved writing. Writing fictional stories was fun up to secondary school - thanks to my fascination with (medieval) fantasy fiction and gamebooks. Argumentative essays were not my forte though - I got a B3 in &#x27;A&#x27;-level General Paper.&lt;&#x2F;p&gt;
&lt;p&gt;So anyway, enough of trying to write a &quot;charming&quot; little backstory (which wasn&#x27;t really going anywhere, considering the state of mind I&#x27;m in).&lt;&#x2F;p&gt;
&lt;p&gt;These few months you&#x27;ll probably see a decreased frequency of posts on this blog, mostly due to my being on assignment writing a book - my very first one. Before you ask: yes, it&#x27;s a technical book, and no, I&#x27;m not sure if I want to say what it&#x27;s about just yet. It&#x27;s too early.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m going to miss blogging and nights where I don&#x27;t have to think about &amp;lt;Insert book subject matter here&amp;gt;. Not that thinking about it is bad (because it is one of my main interests and I &lt;em&gt;am&lt;&#x2F;em&gt; writing a book on it), but I&#x27;m wondering how I&#x27;m going to keep up with late nights and the inexorable temptation to play one more hour of World of Warcraft (which still hasn&#x27;t arrived, but will soon, with any luck).&lt;&#x2F;p&gt;
&lt;p&gt;Stay tuned, don&#x27;t go away. I&#x27;ll still be blogging.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>On the prow for World of Warcraft Collector&#x27;s Edition</title>
    <published>2004-12-05T15:08:13+00:00</published>
    <updated>2004-12-05T15:08:13+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/05/on-the-prow-for-world-of-warcraft-collectors-edition/"/>
    <id>https://chuyeow.wtf/2004/12/05/on-the-prow-for-world-of-warcraft-collectors-edition/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/05/on-the-prow-for-world-of-warcraft-collectors-edition/">&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: I got it! I went all out in an eBay auction and bidding ended at USD130. My very first eBay purchase. Here&#x27;s the &lt;a href=&quot;http:&#x2F;&#x2F;cgi.ebay.com&#x2F;ws&#x2F;eBayISAPI.dll?ViewItem&amp;rd=1&amp;item=5735797364&quot;&gt;item listing&lt;&#x2F;a&gt;. I should feel guilty splurging this much but: 1) this should be worth it, 2) life&#x27;s too short, 3) life&#x27;s too short to waste time refreshing eBay auction pages and losing eventually, and 4) money in PayPal doesn&#x27;t quite feel like real money.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m looking for a copy of the &lt;a href=&quot;http:&#x2F;&#x2F;worldofwarcraft.com&#x2F;news&#x2F;wow-oldnews.html#collectors&quot;&gt;World of Warcraft Collector&#x27;s Edition&lt;&#x2F;a&gt; which is incredibly sold out. If any of you chance by one of them in an obscure store, please &lt;a href=&quot;mailto:chuyeow@gmail.com&quot;&gt;let me know&lt;&#x2F;a&gt;. I&#x27;ll be more than happy to pay for everything (cost + shipping and handling) plus extra for your efforts. I&#x27;ve been bidding on eBay but keep losing the auctions and my local pre-order is uncertain to arrive.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a look at &lt;a href=&quot;http:&#x2F;&#x2F;en.wow-europe.com&#x2F;pre-order&#x2F;collectorsedition.shtml&quot;&gt;what&#x27;s in the Collector&#x27;s Edition&lt;&#x2F;a&gt;. The Art of World of Warcraft coffee table book and the behind-the scenes DVD look &lt;em&gt;so&lt;&#x2F;em&gt; neat I just have to get the Collector&#x27;s Edition.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Applying Fitt&#x27;s Law to the Firefox Back button</title>
    <published>2004-12-05T13:48:49+00:00</published>
    <updated>2004-12-05T13:48:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/05/applying-fitts-law-to-the-firefox-back-button/"/>
    <id>https://chuyeow.wtf/2004/12/05/applying-fitts-law-to-the-firefox-back-button/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/05/applying-fitts-law-to-the-firefox-back-button/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;philwilson.org&#x2F;&quot;&gt;Phil Wilson&lt;&#x2F;a&gt; has a nice &lt;a href=&quot;http:&#x2F;&#x2F;philwilson.org&#x2F;blog&#x2F;2004&#x2F;11&#x2F;enhancing-firefox-gui-usability_29.html&quot;&gt;writeup on  Enhancing Firefox GUI usability&lt;&#x2F;a&gt; where he points out one good thing about &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;&#x2F;acronym&gt;: a bigger Back button. Of course, Phil isn&#x27;t one to jibe at Firefox&#x27;s back button. Rather he goes on to teach us how remedy this usability flaw by making the Back button bigger in Firefox, and this is possible thanks to the customizability of Firefox.&lt;&#x2F;p&gt;
&lt;p&gt;All you need to do is to add a few lines to the userChrome.css file in your profile - &lt;a href=&quot;http:&#x2F;&#x2F;philwilson.org&#x2F;blog&#x2F;2004&#x2F;11&#x2F;enhancing-firefox-gui-usability_29.html&quot;&gt;Phil explains all&lt;&#x2F;a&gt;. (Trivia: you can combine the 2 CSS rules into a single &quot;padding: 0 10px;&quot;).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>#1 Word of the Year for 2004: &quot;Blog&quot;</title>
    <published>2004-12-04T21:01:18+00:00</published>
    <updated>2004-12-04T21:01:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/04/1-word-of-the-year-for-2004-blog/"/>
    <id>https://chuyeow.wtf/2004/12/04/1-word-of-the-year-for-2004-blog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/04/1-word-of-the-year-for-2004-blog/">&lt;p&gt;The word &quot;blog&quot; is the &lt;a href=&quot;http:&#x2F;&#x2F;www.m-w.com&#x2F;info&#x2F;04words.htm&quot;&gt;most looked up word of 2004&lt;&#x2F;a&gt; over at &lt;a href=&quot;http:&#x2F;&#x2F;www.m-w.com&#x2F;&quot;&gt;Merriam-Webster Online&lt;&#x2F;a&gt;. Via &lt;a href=&quot;http:&#x2F;&#x2F;blog.lidan.net&#x2F;archives&#x2F;000238.html&quot;&gt;Dan Li&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Thunderbird 1.0RC is out</title>
    <published>2004-12-02T23:31:58+00:00</published>
    <updated>2004-12-02T23:31:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/12/02/thunderbird-10rc-is-out/"/>
    <id>https://chuyeow.wtf/2004/12/02/thunderbird-10rc-is-out/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/12/02/thunderbird-10rc-is-out/">&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: &lt;a href=&quot;http:&#x2F;&#x2F;getthunderbird.com&#x2F;&quot;&gt;Thunderbird 1.0&lt;&#x2F;a&gt; is out. Get that instead.&lt;&#x2F;ins&gt; &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;archives&#x2F;007014.html&quot;&gt;Asa Dotzler has the scoop&lt;&#x2F;a&gt;. Get it from the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;thunderbird&#x2F;releases&#x2F;1.0rc&#x2F;&quot;&gt;Mozilla Thunderbird release directory&lt;&#x2F;a&gt;. Noteworthy: much nicer icons, work offline UI for Windows, HTTP authentication for RSS feeds.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Widgets for your blog</title>
    <published>2004-11-29T22:57:53+00:00</published>
    <updated>2004-11-29T22:57:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/29/widgets-for-your-blog/"/>
    <id>https://chuyeow.wtf/2004/11/29/widgets-for-your-blog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/29/widgets-for-your-blog/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.blogbox.com&#x2F;&quot;&gt;Blogbloxes&lt;&#x2F;a&gt; - widgets for your blog (or website). Smells like &lt;a href=&quot;http:&#x2F;&#x2F;www.konfabulator.com&#x2F;&quot;&gt;Konfabulator&lt;&#x2F;a&gt;, et al. What will they think of next?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Larry the cow</title>
    <published>2004-11-29T20:53:07+00:00</published>
    <updated>2004-11-29T20:53:07+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/29/larry-the-cow/"/>
    <id>https://chuyeow.wtf/2004/11/29/larry-the-cow/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/29/larry-the-cow/">&lt;p&gt;Larry the cow is one domesticated animal you probably haven&#x27;t heard of (though you may have heard of our beloved South Park cows). He is the mascot of &lt;a href=&quot;http:&#x2F;&#x2F;www.gentoo.org&#x2F;&quot;&gt;Gentoo Linux&lt;&#x2F;a&gt; and there&#x27;s a headshot of him over at &lt;a href=&quot;http:&#x2F;&#x2F;www.gentoo.org&#x2F;main&#x2F;en&#x2F;about.xml&quot;&gt;Gentoo&#x27;s About page&lt;&#x2F;a&gt; (see &quot;Gentoo Linux... in a poster&quot;).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;larry-the-cow-abducted.png&quot; alt=&quot;Larry the cow being abducted&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now, I came across this amusing bug today, &lt;a href=&quot;http:&#x2F;&#x2F;bugs.gentoo.org&#x2F;show_bug.cgi?id=27727&quot;&gt;bug 27727 - bug Lary &lt;em&gt;(sic)&lt;&#x2F;em&gt; can NOT be a Cow&lt;&#x2F;a&gt;, that insists that Larry cannot be a cow but should rather have been a bull, being male. &lt;a href=&quot;http:&#x2F;&#x2F;dictionary.reference.com&#x2F;search?q=cow&quot;&gt;Dictionary.com says&lt;&#x2F;a&gt; a cow is &quot;a domesticated bovine of either sex or any age&quot; so that was why the bug was left as WONTFIX. Still it is weird to see Larry with udders in &lt;a href=&quot;http:&#x2F;&#x2F;forums.gentoo.org&#x2F;viewtopic.php?t=257123&quot;&gt;this thread&lt;&#x2F;a&gt; in the Gentoo forums. Larry is probably one of the first transgender&#x2F;sexually ambiguous animal mascots in Linux history.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Job ads: Product Evangelist and Web Developer&#x2F;Webmaster</title>
    <published>2004-11-24T22:33:51+00:00</published>
    <updated>2004-11-24T22:33:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/24/job-ads-product-evangelist-and-web-developerwebmaster/"/>
    <id>https://chuyeow.wtf/2004/11/24/job-ads-product-evangelist-and-web-developerwebmaster/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/24/job-ads-product-evangelist-and-web-developerwebmaster/">&lt;p&gt;The company I&#x27;m working for, &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;website&#x2F;jobs.php#evangelist&quot;&gt;muvee Technologies&lt;&#x2F;a&gt;, is on the lookout for a &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;website&#x2F;jobs.php#evangelist&quot;&gt;Product Evangelist&lt;&#x2F;a&gt; in the US for our core product, &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;website&#x2F;ap3mx.php&quot;&gt;muvee autoProducer&lt;&#x2F;a&gt;. If you&#x27;re a fan of muvee autoProducer (&lt;a href=&quot;http:&#x2F;&#x2F;chris.pirillo.com&#x2F;blog&#x2F;_archives&#x2F;2002&#x2F;11&#x2F;6&quot;&gt;like Chris Pirillo&lt;&#x2F;a&gt; is), and fit &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;website&#x2F;jobs.php#evangelist&quot;&gt;the requirements&lt;&#x2F;a&gt; nicely, why not find out more about it - drop Tania (our Communications and PR manager) an email (find it over at &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;website&#x2F;jobs.php#evangelist&quot;&gt;the job spec&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;The other position is that of a &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;website&#x2F;jobs.php#webmaster&quot;&gt;Web Developer cum Webmaster&lt;&#x2F;a&gt;. This will be a replacement for yours truly. If you&#x27;re competent in PHP and SQL, comfortable with Linux and the command line, have lots of ideas on website promotion, apply for the job or &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;contact&#x2F;&quot;&gt;write me&lt;&#x2F;a&gt; to find out more (see also the &lt;a href=&quot;http:&#x2F;&#x2F;siva-sg.jobstreet.com&#x2F;_ads&#x2F;sg&#x2F;jobs&#x2F;2004&#x2F;11&#x2F;default&#x2F;20&#x2F;303888.htm&quot;&gt;JobStreet listing&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Open to ads on your blog?</title>
    <published>2004-11-23T23:52:59+00:00</published>
    <updated>2004-11-23T23:52:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/23/open-to-ads-on-your-blog/"/>
    <id>https://chuyeow.wtf/2004/11/23/open-to-ads-on-your-blog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/23/open-to-ads-on-your-blog/">&lt;p&gt;If you&#x27;re open to advertisements on your blog, the enterprising &lt;a href=&quot;http:&#x2F;&#x2F;ensight.org&#x2F;&quot;&gt;Jeremy Wright&lt;&#x2F;a&gt; is &lt;a href=&quot;http:&#x2F;&#x2F;www.ensight.org&#x2F;archives&#x2F;2004&#x2F;11&#x2F;15&#x2F;want-advertising-on-your-blog&#x2F;&quot;&gt;looking to gather&lt;&#x2F;a&gt; a, um, gathering of bloggers (&lt;acronym title=&quot;Gathering of Bloggers&quot;&gt;GOB&lt;&#x2F;acronym&gt;, usage mine) for an informal blog advertising network.&lt;&#x2F;p&gt;
&lt;p&gt;The story goes something like this:&lt;&#x2F;p&gt;
&lt;p&gt;Jeremy knows advertisers. Advertisers want to put ads on other blogs (other then Jeremy&#x27;s, that is). Jeremy gets bright idea. Jeremy &lt;a href=&quot;http:&#x2F;&#x2F;www.ensight.org&#x2F;archives&#x2F;2004&#x2F;11&#x2F;15&#x2F;blog-advertising-thing-update&#x2F;&quot;&gt;posts on blog&lt;&#x2F;a&gt;. Now he&#x27;s aiming for 50 bloggers for a combined 10 million pageviews a month. Advertisers pay bloggers for ad spots. Everybody&#x27;s happy because we took out the middleman ad networks (and replaced it with Jeremy, who should be a lesser evil ;-)).&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m pretty sure Jeremy will take a fair cut for his work and he should be able to get higher prices for ads. Frankly, I don&#x27;t think I want to do &lt;a href=&quot;http:&#x2F;&#x2F;blogads.com&#x2F;&quot;&gt;BlogAds&lt;&#x2F;a&gt; anymore, because of those annoying pictures that advertisers keep changing and because they pay late and take a 20% cut. If this goes well, we should get nicer looking, unobtrusive ads. These ads pay for my VPS hosting but recently I&#x27;ve been tempted to approve more ads than the number that actually covers hosting. Gah I feel like a sneaky sell-out, though I probably needn&#x27;t be, because if I&#x27;m not wrong, most of you would be reading via RSS aggregators. Show of hands, how many of you hate the ads here? How many don&#x27;t care?&lt;&#x2F;p&gt;
&lt;p&gt;Ah I digress... So, if you&#x27;re looking for a little something to pay for hosting or earn a little pocket money, why not hook up with &lt;a href=&quot;http:&#x2F;&#x2F;www.ensight.org&#x2F;archives&#x2F;2004&#x2F;11&#x2F;15&#x2F;want-advertising-on-your-blog&#x2F;&quot;&gt;Jeremy&lt;&#x2F;a&gt; by writing him an &lt;a href=&quot;mailto:jeremy@ensight.org&quot;&gt;email&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New iPod Updater - finally, something for iPod mini owners</title>
    <published>2004-11-22T01:52:21+00:00</published>
    <updated>2004-11-22T01:52:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/22/new-ipod-updater-finally-something-for-ipod-mini-owners/"/>
    <id>https://chuyeow.wtf/2004/11/22/new-ipod-updater-finally-something-for-ipod-mini-owners/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/22/new-ipod-updater-finally-something-for-ipod-mini-owners/">&lt;p&gt;Apple has released &lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;ipod&#x2F;download&#x2F;&quot;&gt;iPod Updater 2004-11-15&lt;&#x2F;a&gt;, the software that updates your iPod&#x27;s firmware. Notable in this release is a whole bunch of features for the iPod mini that were previously only available to iPod users. Nothing for G3 iPod owners though.&lt;&#x2F;p&gt;
&lt;p&gt;Stuff like &lt;strong&gt;Delete songs from On-The-Go playlists&lt;&#x2F;strong&gt; and &lt;strong&gt;Create multiple On-The-Go playlists&lt;&#x2F;strong&gt; should have been there out-of-the-box, while &lt;strong&gt;Hear Click Wheel clicker through headphones&lt;&#x2F;strong&gt; is nice to have. Can&#x27;t wait to try it out tommorrow when syncing in the office.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Ugh. You need to use the charger (the Firewire one) to flash the firmware. Now I&#x27;m stuck with a useless iPod mini for the rest of today and the long commute home.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox avatars and a centralized forum avatar system</title>
    <published>2004-11-20T10:22:58+00:00</published>
    <updated>2004-11-20T10:22:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/20/firefox-avatars-and-a-centralized-forum-avatar-system/"/>
    <id>https://chuyeow.wtf/2004/11/20/firefox-avatars-and-a-centralized-forum-avatar-system/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/20/firefox-avatars-and-a-centralized-forum-avatar-system/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;rakaz.nl&#x2F;&quot;&gt;rakaz&lt;&#x2F;a&gt;, maker of some very nice &lt;a href=&quot;http:&#x2F;&#x2F;www.rakaz.nl&#x2F;nucleus&#x2F;index.php?itemid=10&quot;&gt;Firefox wallpapers&lt;&#x2F;a&gt;, also has a set of &lt;a href=&quot;http:&#x2F;&#x2F;www.rakaz.nl&#x2F;nucleus&#x2F;index.php?itemid=12&amp;catid=4&quot;&gt;forum and IM avatars&lt;&#x2F;a&gt;. Very nice if you want to show your support for Firefox and perhaps get a few IE-using friends to ask you about your avatar. Anyway, that wasn&#x27;t the reason I was looking for avatars. The reason was me coming across &lt;a href=&quot;http:&#x2F;&#x2F;www.mojombo.com&#x2F;archives&#x2F;000054.html&quot;&gt;Tom Werner&#x27;s&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.gravatar.com&#x2F;&quot;&gt;Gravatars&lt;&#x2F;a&gt; (or Globally Recognized Avatars).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;gravatar-weblog-eg.png&quot; alt=&quot;Screenshot of Gravatar in action&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Looks like a cool thing to implement on this weblog. There&#x27;s a &lt;a href=&quot;http:&#x2F;&#x2F;www.gravatar.com&#x2F;implement.php#section_2_2&quot;&gt;WordPress plugin&lt;&#x2F;a&gt;, but plugins don&#x27;t work on the nightly I&#x27;m using so I&#x27;ll probably wait until WordPress 1.3, or if I ever get my butt off to try to get a CVS version to work.&lt;&#x2F;p&gt;
&lt;p&gt;(And yes, this is a concise, rushed entry because I&#x27;ve got my Half-Life 2. It&#x27;s Half-Life 2 weekend!)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>WordPress devs: &quot;No, we are not dead&quot;</title>
    <published>2004-11-18T21:30:03+00:00</published>
    <updated>2004-11-18T21:30:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/18/wordpress-devs-no-we-are-not-dead/"/>
    <id>https://chuyeow.wtf/2004/11/18/wordpress-devs-no-we-are-not-dead/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/18/wordpress-devs-no-we-are-not-dead/">&lt;p&gt;Ryan Boren, one of the developers of &lt;a href=&quot;http:&#x2F;&#x2F;wordpress.org&#x2F;&quot;&gt;WordPress&lt;&#x2F;a&gt; (which powers this blog), has an interim &lt;a href=&quot;http:&#x2F;&#x2F;wordpress.org&#x2F;development&#x2F;2004&#x2F;11&#x2F;whats-going-on&#x2F;&quot;&gt;update on what&#x27;s going on&lt;&#x2F;a&gt; behind the scenes in WordPress development and the new features in WordPress 1.3. Pages, themes, enclosures, and a richer plugin API are some things to look forward to.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Solving algrebra with MSN Search</title>
    <published>2004-11-17T19:47:42+00:00</published>
    <updated>2004-11-17T19:47:42+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/17/solving-algrebra-with-msn-search/"/>
    <id>https://chuyeow.wtf/2004/11/17/solving-algrebra-with-msn-search/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/17/solving-algrebra-with-msn-search/">&lt;p&gt;This is pretty cool. &lt;a href=&quot;http:&#x2F;&#x2F;beta.search.msn.com&#x2F;&quot;&gt;MSN Search beta&lt;&#x2F;a&gt; solves any polynomial equations you enter into its search box.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;msn-search-beta-algebra.png&quot; alt=&quot;MSN Search beta result for a quadratic equation&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I tried with higher degree polynomials but it seems it can only solve up to cubic equations (try &lt;a href=&quot;http:&#x2F;&#x2F;beta.search.msn.com&#x2F;results.aspx?q=x^3 -27 = 0&quot;&gt;x^3 -27 = 0&lt;&#x2F;a&gt;). Quartic equations, like  &lt;a href=&quot;http:&#x2F;&#x2F;beta.search.msn.com&#x2F;results.aspx?q=x^4 + 6x^3 - 5x^2 - 10x - 3 = 0&quot;&gt;x^4 + 6x^3 - 5x^2 - 10x - 3 = 0&lt;&#x2F;a&gt;, return a vanilla search result page.&lt;&#x2F;p&gt;
&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;2004&#x2F;Nov&#x2F;17&#x2F;msn_knows_its_algebra.html&quot;&gt;Neil Turner&lt;&#x2F;a&gt; via &lt;a href=&quot;http:&#x2F;&#x2F;chris.pirillo.com&#x2F;blog&#x2F;_archives&#x2F;2004&#x2F;11&#x2F;16&#x2F;184655.html&quot;&gt;Chris Pirillo&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Half-Life 2 is not here</title>
    <published>2004-11-16T20:30:22+00:00</published>
    <updated>2004-11-16T20:30:22+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/16/half-life-2-is-not-here/"/>
    <id>https://chuyeow.wtf/2004/11/16/half-life-2-is-not-here/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/16/half-life-2-is-not-here/">&lt;p&gt;The whole world is playing Half-Life 2 except for those of us in Singapore who pre-ordered or decided to get the retail box versions. Apparently, and this is news from the local community forum grapevine, the sole distributor of Half-Life 2 in Singapore, &lt;a href=&quot;http:&#x2F;&#x2F;www.igamesasia.com.sg&#x2F;&quot;&gt;iGames&lt;&#x2F;a&gt;, has delayed the release date to 19th November (GMT +8). Lots of disgruntled people in the &lt;a href=&quot;http:&#x2F;&#x2F;forums.hardwarezone.com&#x2F;forumdisplay.php?f=57&quot;&gt;HardwareZone PC Games forum&lt;&#x2F;a&gt;. (I&#x27;m one of them, but I prefer to be quietly disgruntled.)&lt;&#x2F;p&gt;
&lt;p&gt;After I posted &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;11&#x2F;14&#x2F;half-life-2-how-are-you-getting-it&#x2F;&quot;&gt; my previous entry&lt;&#x2F;a&gt;, I decided to go for the retail Standard Edition and went down to the local computer hub to reserve a copy. The guy there said it&#x27;d probably be out tommorrow (unlikely, as I found out later it&#x27;d arrive &lt;em&gt;probably&lt;&#x2F;em&gt; on the 19th like I said above). Argh... More waiting. Now I kinda wish I&#x27;d bought from Steam a week or so ago and I&#x27;d be playing it right now instead of blogging about not being able to play it.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Konfabulator for Windows, finally</title>
    <published>2004-11-15T02:04:02+00:00</published>
    <updated>2004-11-15T02:04:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/15/konfabulator-for-windows-finally/"/>
    <id>https://chuyeow.wtf/2004/11/15/konfabulator-for-windows-finally/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/15/konfabulator-for-windows-finally/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.konfabulator.com&#x2F;&quot;&gt;Konfabulator&lt;&#x2F;a&gt; has finally been ported to Windows! Now I can at least get to experience the neat little app that made &lt;a href=&quot;http:&#x2F;&#x2F;daringfireball.net&#x2F;2004&#x2F;06&#x2F;dashboard_vs_konfabulator&quot;&gt;such news&lt;&#x2F;a&gt; in blogs all over some months ago. (Note to reader: I&#x27;m refraining from word-butchery, so where &quot;blogosphere&quot; may be more appropriate in this case, I&#x27;m not going to be tempted into using it.)&lt;&#x2F;p&gt;
&lt;p&gt;Looks nice doesn&#x27;t it?&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;konfabulator-widgets.png&quot; alt=&quot;Konfabulator widgets on my desktop&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not even sure I need the weather widget, but the What To Do, iTunes remote, and RSS feed aggregator looks to be useful.&lt;&#x2F;p&gt;
&lt;p&gt;Mac users get all the cool-looking, drool-worthy stuff (though I&#x27;ve seen a mean KDE setup), and also some of the &lt;a href=&quot;http:&#x2F;&#x2F;www.gentoo.org&#x2F;doc&#x2F;en&#x2F;macos-guide.xml&quot;&gt;coolest&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;developer.apple.com&#x2F;darwin&#x2F;&quot;&gt;technology&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;coresite.org&#x2F;wordpress&#x2F;index.php?p=515&quot;&gt;coresite.org&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Vampire: The Masquerade - Bloodlines ships the same day as Half-Life 2</title>
    <published>2004-11-14T20:09:18+00:00</published>
    <updated>2004-11-14T20:09:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/14/vampire-the-masquerade-bloodlines-ships-the-same-day-as-half-life-2/"/>
    <id>https://chuyeow.wtf/2004/11/14/vampire-the-masquerade-bloodlines-ships-the-same-day-as-half-life-2/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/14/vampire-the-masquerade-bloodlines-ships-the-same-day-as-half-life-2/">&lt;p&gt;I must have missed this with all the excitement and coverage of Half-Life 2. It seems like &lt;a href=&quot;http:&#x2F;&#x2F;www.vampirebloodlines.com&#x2F;&quot;&gt;Vampire - The Masquerade: Bloodlines&lt;&#x2F;a&gt; will be &lt;a href=&quot;http:&#x2F;&#x2F;www.gamespot.com&#x2F;pc&#x2F;rpg&#x2F;vtmb&#x2F;news_6112907.html&quot;&gt;out on November 16&lt;&#x2F;a&gt;, the same day as Half-Life 2. That&#x27;s another 40+ hours of playing time on top of the 20-odd hours in Half-Life 2. Goodbye life! No wait... I don&#x27;t have a life.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Half-Life 2: How are you getting it?</title>
    <published>2004-11-14T19:53:02+00:00</published>
    <updated>2004-11-14T19:53:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/14/half-life-2-how-are-you-getting-it/"/>
    <id>https://chuyeow.wtf/2004/11/14/half-life-2-how-are-you-getting-it/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/14/half-life-2-how-are-you-getting-it/">&lt;p&gt;3 more days to Half-Life 2. The wait is killing me. I&#x27;m also mulling over how I should get Half-Life 2. Should I get the cheaper Standard Edition (SGD69.90) that comes in a whopping 6 CDs (5 + 1 for CS:Source), or the Collectors&#x27; Edition (SGD129.90) that comes in a convenient single DVD (plus a shirt and, I think, a strategy guide). Or perhaps getting it from &lt;a href=&quot;http:&#x2F;&#x2F;www.steampowered.com&#x2F;?area=product_HL2bronsilvergold&quot;&gt;Steam&lt;&#x2F;a&gt;? The Gold package looks pretty sweet (and naturally, so does the price tag). But you do get a whole lot more gimmicks (because that&#x27;s what they are) sans a physical copy of the game itself. I guess I&#x27;m just not so comfortable with that (and the USD89.95 price tag).&lt;&#x2F;p&gt;
&lt;p&gt;So, take a look at the &lt;a href=&quot;http:&#x2F;&#x2F;www.steampowered.com&#x2F;forums&#x2F;showthread.php?threadid=148079&quot;&gt;Half-Life  2 Package FAQ&lt;&#x2F;a&gt;. Let me know what you are getting. It&#x27;s something to keep you occupied while you (we) wait.&lt;&#x2F;p&gt;
&lt;p&gt;(Anybody have any idea whether the Collectors&#x27; Edition comes with the strategy guide? The Package FAQ I posted above has conflicting information - the first post says it comes with a &quot;Prima book sampler&quot;, the later press release says it comes with a &quot;Half-Life 2 Prima strategy guide book&quot;.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Opera 7.60 Preview 3 for Windows</title>
    <published>2004-11-13T15:22:37+00:00</published>
    <updated>2004-11-13T15:22:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/13/opera-760-preview-3-for-windows/"/>
    <id>https://chuyeow.wtf/2004/11/13/opera-760-preview-3-for-windows/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/13/opera-760-preview-3-for-windows/">&lt;p&gt;Just posted a &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;news&#x2F;opera_760_preview_3_for_windows.php&quot;&gt;Opera 7.60 Preview 3 entry&lt;&#x2F;a&gt; at &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;&quot;&gt;Forever Geek&lt;&#x2F;a&gt; (where I have posted too seldom these days). Firefox fans, don&#x27;t be offended or surprised - I still love Firefox! But really, Opera seems to have had some improvements ever since our very own &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;archives&#x2F;005479.html&quot;&gt;Asa Dotzler ranted about the horrible-ness of its UI.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gmail now accessible via POP3</title>
    <published>2004-11-11T14:45:34+00:00</published>
    <updated>2004-11-11T14:45:34+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/11/gmail-now-accessible-via-pop3/"/>
    <id>https://chuyeow.wtf/2004/11/11/gmail-now-accessible-via-pop3/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/11/gmail-now-accessible-via-pop3/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.eweek.com&#x2F;article2&#x2F;0,1759,1723553,00.asp&quot;&gt;Google Brings E-Mail Client Access to Gmail&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;gmail.google.com&#x2F;support&#x2F;bin&#x2F;answer.py?answer=13273&quot;&gt;How do I enable POP (for my Gmail account)?&lt;&#x2F;a&gt; (login required)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox 1.0. Yes, 1.0 is out!</title>
    <published>2004-11-09T16:58:38+00:00</published>
    <updated>2004-11-09T16:58:38+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/09/firefox-10-yes-10-is-out/"/>
    <id>https://chuyeow.wtf/2004/11/09/firefox-10-yes-10-is-out/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/09/firefox-10-yes-10-is-out/">&lt;p&gt;&lt;ins datetime=&quot;2004-10-9T17:7:25--8:00&quot;&gt;Update: OK it&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;official&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Go to &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;releases&#x2F;1.0&#x2F;win32&#x2F;en-US&#x2F;&quot;&gt;Firefox 1.0 EN-US FTP release directory&lt;&#x2F;a&gt;. &lt;ins datetime=&quot;2004-10-10T8:56:12--8:00&quot;&gt;You can also get it via BitTorrent at http:&#x2F;&#x2F;bittorrent.mozilla.org:6969&#x2F; (thanks &lt;a href=&quot;http:&#x2F;&#x2F;www.ephemeraleuphoria.com&#x2F;&quot;&gt;Michael&lt;&#x2F;a&gt;). &lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;&quot;&gt;mozilla.org&lt;&#x2F;a&gt; is down right now, so you can try getting from  &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;releases&#x2F;1.0&#x2F;win32&#x2F;en-US&#x2F;&quot;&gt;Firefox 1.0 EN-US FTP release directory&lt;&#x2F;a&gt; if the main Mozilla Firefox page doesn&#x27;t load up for you.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-1.0-delivered.png&quot; alt=&quot;Firefox 1.0 delivered in a neat package&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;News around the web and the, er, blogosphere:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;ben&#x2F;archives&#x2F;006866.html&quot;&gt;Firefox RTM - Take Back the Web&lt;&#x2F;a&gt; - a few words from Ben Goodger, Lead Engineer, Mozilla Firefox&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozillazine.org&#x2F;articles&#x2F;article5513.html&quot;&gt;MozillaZine.org&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;del&gt;When it&#x27;s officially released, you&#x27;ll be able to get it at the usual place -&gt; http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;del&gt;More later. Work now.&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>A new Linux distro - for a fee</title>
    <published>2004-11-09T00:43:17+00:00</published>
    <updated>2004-11-09T00:43:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/09/a-new-linux-distro-for-a-fee/"/>
    <id>https://chuyeow.wtf/2004/11/09/a-new-linux-distro-for-a-fee/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/09/a-new-linux-distro-for-a-fee/">&lt;p&gt;Seen at &lt;a href=&quot;http:&#x2F;&#x2F;www.rentacoder.com&#x2F;&quot;&gt;Rent A Coder&lt;&#x2F;a&gt;: &lt;a href=&quot;http:&#x2F;&#x2F;www.rentacoder.com&#x2F;RentACoder&#x2F;misc&#x2F;BidRequests&#x2F;ShowBidRequest.asp?lngBidRequestId=208761&quot;&gt;a bid request for a Linux distribution with branding&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I need a new linux distribution based on kernel 2.6.8 or later (2.7) with branded&#x2F;customized KDE 3.3...&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Makes you wonder what the guy wants to do with this. And this is definitely the most &quot;different&quot; bid request I&#x27;ve seen in awhile.&lt;&#x2F;p&gt;
&lt;p&gt;Oh, by the way, if you&#x27;re looking for a freelance PHP or Python developer, or a Linux administrator for your web server, I may just be your man. &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;contact&#x2F;&quot;&gt;Drop me a message&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Men turn into ugly things when they know they cannot get you</title>
    <published>2004-11-07T12:53:41+00:00</published>
    <updated>2004-11-07T12:53:41+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/07/men-turn-into-ugly-things-when-they-know-they-cannot-get-you/"/>
    <id>https://chuyeow.wtf/2004/11/07/men-turn-into-ugly-things-when-they-know-they-cannot-get-you/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/07/men-turn-into-ugly-things-when-they-know-they-cannot-get-you/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;xiaxue.blogspot.com&#x2F;2004_11_01_xiaxue_archive.html#109977066427884263&quot;&gt;Men turn into ugly things when they know they cannot get you&lt;&#x2F;a&gt;. That&#x27;s the blog of one of Singapore&#x27;s top bloggers. Always quirky, full of attitude. One of the few non-tech blogs I read.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Version Control System Comparison</title>
    <published>2004-11-06T12:17:32+00:00</published>
    <updated>2004-11-06T12:17:32+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/06/version-control-system-comparison/"/>
    <id>https://chuyeow.wtf/2004/11/06/version-control-system-comparison/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/06/version-control-system-comparison/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;better-scm.berlios.de&#x2F;comparison&#x2F;comparison.html&quot;&gt;Version Control System Comparison&lt;&#x2F;a&gt;. Why moving to CVS in your organization&#x2F;project may not be the best idea: Atomic commits - CVS doesn&#x27;t have this. Renaming support - CVS doesn&#x27;t have this (there are ways to hack around this, but you will lose revision history). There are better choices out there.&lt;&#x2F;p&gt;
&lt;p&gt;Sidenote: I&#x27;ve been posting quite a few &quot;Asides&quot; recently. On my todo list is to offer an RSS feed without these &quot;Asides&quot; posts.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Simple anti-comment spam measure</title>
    <published>2004-11-05T17:47:18+00:00</published>
    <updated>2004-11-05T17:47:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/05/simple-anti-comment-spam-measure/"/>
    <id>https://chuyeow.wtf/2004/11/05/simple-anti-comment-spam-measure/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/05/simple-anti-comment-spam-measure/">&lt;p&gt;Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;www.e.kth.se&#x2F;~strang&#x2F;blog&#x2F;archives&#x2F;2004&#x2F;10&#x2F;spam_measures_m.html&quot;&gt;Patrick Strang&lt;&#x2F;a&gt; who pointed me to &lt;a href=&quot;http:&#x2F;&#x2F;www.stefangeens.com&#x2F;000381.html&quot;&gt;Steven Geen&#x27;s simple anti-comment spam measure&lt;&#x2F;a&gt; for MovableType, I managed to stem the current flow of &quot;Please approve this comment&quot; emails flooding my inbox. This has been happening since last Saturday! Argh! Why are they doing this even when everything goes into the moderation queue?&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, it&#x27;s so simple to get this into WordPress - just edit wp-comments.php and wp-comments-post.php to add the field to the comment form (see below) and die() when the correct &quot;letter of the day&quot; isn&#x27;t entered. (Though die()ing isn&#x27;t the most elegant way, but WordPress does this for the other fields as well.)&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;anti-spam-todays-letter.png&quot; alt=&quot;Screenshot of anti-spam field&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;11&#x2F;05&#x2F;simple-anti-comment-spam-measure&#x2F;#commentReply&quot;&gt;comment form&lt;&#x2F;a&gt; if the picture above is too small. Sorry to have to put you commentors through this, but it&#x27;s really for my sanity. At least it isn&#x27;t one of those randomly-generated graphical thingies that really ensures you are human (or an equivalent intelligent lifeform).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>IE-only, no Firefox</title>
    <published>2004-11-05T12:12:04+00:00</published>
    <updated>2004-11-05T12:12:04+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/05/ie-only-no-firefox/"/>
    <id>https://chuyeow.wtf/2004/11/05/ie-only-no-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/05/ie-only-no-firefox/">&lt;p&gt;Vanessa Tan laments the &lt;a href=&quot;http:&#x2F;&#x2F;vantan.org&#x2F;archives&#x2F;2004&#x2F;11&#x2F;05_it_was_a_bad_day.php&quot;&gt;no Firefox, IE-only policy&lt;&#x2F;a&gt; in her organization. How many of you work in organizations like hers? (Mine happens to practice freedom of choice.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Thunderbird 0.9 released</title>
    <published>2004-11-04T18:26:59+00:00</published>
    <updated>2004-11-04T18:26:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/04/mozilla-thunderbird-09-released/"/>
    <id>https://chuyeow.wtf/2004/11/04/mozilla-thunderbird-09-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/04/mozilla-thunderbird-09-released/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Mozilla Thunderbird 0.9&lt;&#x2F;a&gt; is out. Get it at the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;thunderbird&#x2F;releases&#x2F;0.9&#x2F;&quot;&gt;Thunderbird 0.9 release FTP folder&lt;&#x2F;a&gt;. If I have time later today, I&#x27;ll probably write up on the new stuff.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox NYT ad campaign covered in local paper (and I&#x27;m in there too)</title>
    <published>2004-11-01T23:44:30+00:00</published>
    <updated>2004-11-01T23:44:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/11/01/firefox-nyt-ad-campaign-covered-in-local-paper/"/>
    <id>https://chuyeow.wtf/2004/11/01/firefox-nyt-ad-campaign-covered-in-local-paper/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/11/01/firefox-nyt-ad-campaign-covered-in-local-paper/">&lt;p&gt;Well, &lt;a href=&quot;http:&#x2F;&#x2F;www.streats.com.sg&#x2F;&quot;&gt;Streats&lt;&#x2F;a&gt; isn&#x27;t exactly a high-profile paper (its parent company, Singapore Press Holdings, publishes The Straits Times which is in much greater circulation), but it does get around (and its &lt;a href=&quot;http:&#x2F;&#x2F;www.streats.com.sg&#x2F;&quot;&gt;website&lt;&#x2F;a&gt; does validate as XHTML 1.0 Transitional, &lt;acronym title=&quot;for what it&#x27;s worth&quot;&gt;FWIW&lt;&#x2F;acronym&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, here&#x27;s the article: &lt;a href=&quot;http:&#x2F;&#x2F;www.streats.com.sg&#x2F;article&#x2F;fn041101b.shtml&quot;&gt;S&#x27;poreans back free browser&lt;&#x2F;a&gt;. I&#x27;m quoted in there saying (pessimistically):&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;A few Singaporeans, myself included, have actually thought of doing the same (advertise) with a local paper, but prices are high and it would be a challenge considering the penetration of Firefox in Singapore.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Of the (relatively) long reply I sent to Chris (the journalist) for the email interview, I can&#x27;t say I wasn&#x27;t a tad disappointed that that bit was published. But oh well, at least it got the word on Firefox out. Interestingly, someone from Singapore (I can tell from the IP) &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;10&#x2F;28&#x2F;mysql-41-production-ready&#x2F;#comment-4114&quot;&gt;wrote a comment&lt;&#x2F;a&gt; saying my blog &quot;sucks shit&quot;.  Thanks Kathy I bet it does. And good day to you too m&#x27;am. Another guy wrote me an email coming in from the Streats article asking me to point out the influential bloggers in Singapore and South East Asia. (Yes we &lt;a href=&quot;http:&#x2F;&#x2F;popagandhi.com&#x2F;&quot;&gt;do&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;vantan.org&#x2F;&quot;&gt;exist&lt;&#x2F;a&gt;!)&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;streats-logo.png&quot; alt=&quot;Streats on the web logo&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Christopher Lim (the journalist who interviewed me via email, and get this: via &lt;acronym title=&quot;Short Message Service&quot;&gt;SMS&lt;&#x2F;acronym&gt;) wrote us Singapore donors an email asking our thoughts on the &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;3749&quot;&gt;campaign&lt;&#x2F;a&gt; and why we made our donations.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I am writing from Streats, the newspaper. Blake Ross from www.spreadfirefox.com passed me your emails after I explained that I&#x27;d like to run a story this coming Monday on Firefox&#x27;s New York Times advertisement campaign, and am interested in interviewing donors from Singapore.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;The To: header of that email tells me there were 14 Singaporeans who donated to the cause. Not bad I&#x27;d think, considering our small population and tighter fists. Chris Henry, another Singaporean donor, wrote about the article too in &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;5016&quot;&gt;his sfx blog&lt;&#x2F;a&gt;. Well, if any of you donors want to discuss more on &quot;spreading Firefox&quot; in Singapore, do join up at &lt;a href=&quot;http:&#x2F;&#x2F;sg.firefoxsupport.com&#x2F;&quot;&gt;http:&#x2F;&#x2F;sg.firefoxsupport.com&#x2F;&lt;&#x2F;a&gt; (it&#x27;s not my site, in case you were wondering).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MySQL 4.1 production-ready</title>
    <published>2004-10-28T11:27:39+00:00</published>
    <updated>2004-10-28T11:27:39+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/28/mysql-41-production-ready/"/>
    <id>https://chuyeow.wtf/2004/10/28/mysql-41-production-ready/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/28/mysql-41-production-ready/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mysql.com&#x2F;news-and-events&#x2F;press-release&#x2F;release_2004_32.html&quot;&gt;MySQL Version 4.1 Certified as Production-Ready&lt;&#x2F;a&gt;. Still waiting for the &lt;a href=&quot;http:&#x2F;&#x2F;dev.mysql.com&#x2F;downloads&#x2F;mysql&#x2F;4.1.html&quot;&gt;MySQL 4.1.7&lt;&#x2F;a&gt; ebuild (relevant bugs - &lt;a href=&quot;http:&#x2F;&#x2F;bugs.gentoo.org&#x2F;show_bug.cgi?id=62582&quot;&gt;MySQL 4.1.6 ebuild&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;bugs.gentoo.org&#x2F;show_bug.cgi?id=67871&quot;&gt;request to include mysql 4.1.6 in portage and add ~amd64&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>How &quot;well designed, popular and accessible&quot; is your website?</title>
    <published>2004-10-27T23:58:28+00:00</published>
    <updated>2004-10-27T23:58:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/27/how-well-designed-popular-and-accessible-is-your-website/"/>
    <id>https://chuyeow.wtf/2004/10/27/how-well-designed-popular-and-accessible-is-your-website/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/27/how-well-designed-popular-and-accessible-is-your-website/">&lt;p&gt;You&#x27;d probably already have heard of or seen &lt;a href=&quot;http:&#x2F;&#x2F;sitescore.silktide.com&#x2F;&quot;&gt;Silktide Sitescore&lt;&#x2F;a&gt; that purports to &quot;rate how well designed, popular and accessible your website is&quot;. A while back it used to tell me I was a criminal for having an inaccessible website. I got sub-5 scores and a close-to-zero score for accessibility. I was surprised but attributed it the script doing something wrong somewhere (it is automated after all and &lt;a href=&quot;http:&#x2F;&#x2F;www.contentquality.com&#x2F;&quot;&gt;Cynthia&lt;&#x2F;a&gt; did tell me my site was OK in terms of accessibility).&lt;&#x2F;p&gt;
&lt;p&gt;Recently, after reading &lt;a href=&quot;http:&#x2F;&#x2F;www.ingoal.info&#x2F;archives&#x2F;2004&#x2F;10&#x2F;26&#x2F;silktide-sitescore-update&#x2F;&quot;&gt;Ingoal&#x27;s post on an update to his score&lt;&#x2F;a&gt;, I tried out Silktide again and to my surprise, got a respectable 8.6. (&lt;a href=&quot;http:&#x2F;&#x2F;www.ingoal.info&#x2F;archives&#x2F;2004&#x2F;10&#x2F;26&#x2F;silktide-sitescore-update&#x2F;&quot;&gt;Ingoal&#x27;s&lt;&#x2F;a&gt; a fellow Advisor at &lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&#x2F;&quot;&gt;SitePoint&lt;&#x2F;a&gt; - this guy &lt;em&gt;knows&lt;&#x2F;em&gt; computers.) After some fixing some XHTML-validation borkage, I eked out a 10 for accessibility and managed to get a 9.2 overall score (and a 9.3 once). That puts me in the top 10 (true to &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;10&#x2F;27&#x2F;made-it-into-spread-firefox-weekly-roll-call-top-5-climbers&#x2F;&quot;&gt;form&lt;&#x2F;a&gt;, I&#x27;m right at the bottom at number 10 below &lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&#x2F;&quot;&gt;SitePoint&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;silktide-sitescores.png&quot; alt=&quot;Screenshot of Silktide SiteScore rankings with chuyeow.wtf in 10th position&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not sure it means anything except that it goes to show what a poor boy I must be to keep posting about rankings and scores. Perhaps it&#x27;s my low self-esteem working here.&lt;&#x2F;p&gt;
&lt;p&gt;But I have to say again, &lt;strong&gt;thank you&lt;&#x2F;strong&gt; for your donations to Firefox and keep donating whether you do so via my donation link or not! (What am I talking about? &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;3749&quot;&gt;Read more&lt;&#x2F;a&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;10&#x2F;24&#x2F;6-more-days-to-show-your-support-for-firefox&#x2F;&quot;&gt;This too&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Made it into Spread Firefox Weekly Roll Call Top 5 Climbers</title>
    <published>2004-10-27T19:33:06+00:00</published>
    <updated>2004-10-27T19:33:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/27/made-it-into-spread-firefox-weekly-roll-call-top-5-climbers/"/>
    <id>https://chuyeow.wtf/2004/10/27/made-it-into-spread-firefox-weekly-roll-call-top-5-climbers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/27/made-it-into-spread-firefox-weekly-roll-call-top-5-climbers/">&lt;p&gt;Thanks to everyone&#x27;s kind donations to the &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;3749&quot;&gt;Firefox New York Times ad effort&lt;&#x2F;a&gt;, I made it into the top 5 climbers (of the past week) on &lt;a href=&quot;http:&#x2F;&#x2F;spreadfirefox.com&#x2F;&quot;&gt;Spread Firefox&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-sfx-roll-call-top-5-climbers.png&quot; alt=&quot;Screenshot of Weekly roll call at Spread Firefox with my name as the last of the top 5 climbers&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Once again, &lt;strong&gt;thank you&lt;&#x2F;strong&gt; for donating to the cause. (There&#x27;s 100 points to be had per donation, and there were 12 made via my donation link.) I&#x27;m bowled over by the support for Firefox and more so by the support for me (or at least I&#x27;m glad that people are bugged enough by my constantly going on about donating to actually donate!)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>BioWare store opening soon, Neverwinter Nights modules for sale</title>
    <published>2004-10-27T09:41:51+00:00</published>
    <updated>2004-10-27T09:41:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/27/bioware-store-opening-soon-neverwinter-nights-modules-for-sale/"/>
    <id>https://chuyeow.wtf/2004/10/27/bioware-store-opening-soon-neverwinter-nights-modules-for-sale/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/27/bioware-store-opening-soon-neverwinter-nights-modules-for-sale/">&lt;p&gt;BioWare is launching their &lt;a href=&quot;http:&#x2F;&#x2F;store.bioware.com&#x2F;&quot;&gt;BioWare store&lt;&#x2F;a&gt; on November 10 (hey that&#x27;s my birthday) and they&#x27;re selling premium Neverwinter Nights modules (developed in-house by BioWare and the Neverwinter Nights community). Rather smart sales strategy. I&#x27;m considering getting one of those modules myself.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Opera 7.60 Preview 2 for Windows</title>
    <published>2004-10-27T09:37:37+00:00</published>
    <updated>2004-10-27T09:37:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/27/opera-760-preview-2-for-windows/"/>
    <id>https://chuyeow.wtf/2004/10/27/opera-760-preview-2-for-windows/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/27/opera-760-preview-2-for-windows/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;my.opera.com&#x2F;forums&#x2F;showthread.php?threadid=70665&amp;amp;perpage=10&amp;amp;pagenumber=1&quot;&gt;Opera 7.60 Preview 2 for Windows&lt;&#x2F;a&gt; is now available. Changes since &lt;a href=&quot;http:&#x2F;&#x2F;snapshot.opera.com&#x2F;windows&#x2F;w760p2.html#important&quot;&gt;Preview 1&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>iTunes 4.7</title>
    <published>2004-10-27T09:35:44+00:00</published>
    <updated>2004-10-27T09:35:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/27/itunes-47/"/>
    <id>https://chuyeow.wtf/2004/10/27/itunes-47/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/27/itunes-47/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;itunes&#x2F;download&#x2F;&quot;&gt;iTunes 4.7&lt;&#x2F;a&gt; is out. &lt;strong&gt;What&#x27;s new&lt;&#x2F;strong&gt;: 1) &lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;ipodphoto&#x2F;&quot;&gt;iPod photo&lt;&#x2F;a&gt; support, 2) &lt;strong&gt;search for duplicate songs&lt;&#x2F;strong&gt;, 3) Receive an &quot;Artist Alert&quot; when music by your favorite artists arrives on the iTunes Music Store, 4) &lt;strong&gt;Minimize iTunes to the System Tray&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MileWideBack Firefox extension saves you from &quot;complex hand-to-eye coordination&quot;</title>
    <published>2004-10-24T17:42:36+00:00</published>
    <updated>2004-10-24T17:42:36+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/24/milewideback-firefox-extension-saves-you-from-complex-hand-to-eye-coordination/"/>
    <id>https://chuyeow.wtf/2004/10/24/milewideback-firefox-extension-saves-you-from-complex-hand-to-eye-coordination/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/24/milewideback-firefox-extension-saves-you-from-complex-hand-to-eye-coordination/">&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;dragtotab.mozdev.org&#x2F;milewideback&#x2F;&quot;&gt;MileWideBack extension&lt;&#x2F;a&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;update.mozilla.org&#x2F;extensions&#x2F;moreinfo.php?id=334&amp;amp;vid=1003&quot;&gt;update.mozilla.org listing&lt;&#x2F;a&gt;) for Firefox popped up recently on &lt;a href=&quot;http:&#x2F;&#x2F;update.mozilla.org&#x2F;&quot;&gt;update.mozilla.org&lt;&#x2F;a&gt; and with a name like that I had to check it out. And whaddya know, it turns out to be yet another essential extension (as far as I&#x27;m concerned). The premise of MileWideBack is simple: you use the left-edge of the Firefox window to navigate back and forth in your tab history.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;This extension allows you to navigate back and forth without requiring complex hand-to-eye coordination.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;&quot;Complex hand-to-eye coordination&quot; may sound amusing at first, and while I can certainly hit the back and forward buttons without a thought, but if you think of it these buttons are &lt;em&gt;really, really small&lt;&#x2F;em&gt; compared to the vast wasteland that is your maximized browser window. Particularly for my case, where I like to &quot;Use small icons&quot; for the buttons in the Firefox toolbar to save on vertical screen real estate.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-back-forward-btns.png&quot; alt=&quot;Screenshot of Firefox Back and Forward buttons&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;These little buttons take up really minimal space in the browser, as the screenshot below shows:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-milewideback-btn-real-estate.png&quot; alt=&quot;Screenshot of full Firefox window pointing out relative smallness of buttons&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.usabilityfirst.com&#x2F;glossary&#x2F;main.cgi?function=display_term&amp;amp;term_id=265&quot;&gt;Fitt&#x27;s Law&lt;&#x2F;a&gt; would suggest that it will take a long time (&quot;long&quot; in relative terms) for someone to find and hit those small buttons (but somehow I get by because I&#x27;m probably on the computer way too long for my own good). &lt;a href=&quot;http:&#x2F;&#x2F;dragtotab.mozdev.org&#x2F;milewideback&#x2F;&quot;&gt;MileWideBack&lt;&#x2F;a&gt; in a sense throws Fitt&#x27;s Law out the window by allowing you to navigate back and forth by simply &quot;throwing&quot; the mouse to the left and then right-, left- or middle-clicking. (I say Fitt&#x27;s Law doesn&#x27;t really apply because it takes constant time to move to the extreme left of the window when no aiming is needed.) You right-click to go back, left-click to go forward, and middle-click to reload the page.&lt;&#x2F;p&gt;
&lt;p&gt;Neat little extension, isn&#x27;t it?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>6 more days to show your support for Firefox!</title>
    <published>2004-10-24T16:52:00+00:00</published>
    <updated>2004-10-24T16:52:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/24/6-more-days-to-show-your-support-for-firefox/"/>
    <id>https://chuyeow.wtf/2004/10/24/6-more-days-to-show-your-support-for-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/24/6-more-days-to-show-your-support-for-firefox/">&lt;p&gt;&lt;ins&gt;Update 2: Mission accomplished! &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;&quot;&gt;Spread Firefox&lt;&#x2F;a&gt; tells me I&#x27;ve got 1140 points which means 10 other people have donated via my donation link. Thanks for the show of support and, more importantly, for supporting and loving &lt;a href=&quot;http:&#x2F;&#x2F;getfirefox.com&quot;&gt;Firefox&lt;&#x2F;a&gt;!&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: 1 more person has donated via my donation link! Thank you, &lt;a href=&quot;http:&#x2F;&#x2F;kenpratt.net&#x2F;&quot;&gt;Ken Pratt&lt;&#x2F;a&gt;! 3 more to go!&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;10&#x2F;22&#x2F;my-name-will-be-in-the-new-york-times&#x2F;&quot;&gt;I wrote about it before&lt;&#x2F;a&gt; but I&#x27;ll write it again now as the deadline nears (6 more days). Anyway, here goes...&lt;&#x2F;p&gt;
&lt;p&gt;Show your support to Firefox if you love it by contributing to the expense of &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;4154&quot;&gt;full-page Firefox ad that will be in The New York Times&lt;&#x2F;a&gt; (leftover donations will be safe-kept by the Mozilla foundation to fund the Firefox 1.0 launch campaign, a non-profit organization). Donations are tax-deductible in the US. $30 for a normal donation, $10 if you&#x27;re a student. If you&#x27;ve ever thought of donating to the Mozilla cause before, now is the best time as ever to do so.&lt;&#x2F;p&gt;
&lt;p&gt;And I&#x27;m throwing in 2 &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;10&#x2F;17&#x2F;wordpress-hosting-up-for-grabs&#x2F;&quot;&gt;free WordPress weblog hosting accounts&lt;&#x2F;a&gt; (sponsored by &lt;a href=&quot;http:&#x2F;&#x2F;www.revisemedia.com&#x2F;&quot;&gt;ReviseMedia&lt;&#x2F;a&gt;) should you make a donation (just &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;contact&#x2F;&quot;&gt;let me know&lt;&#x2F;a&gt; if you&#x27;re going to do so).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-nytimes-donation.png&quot; alt=&quot;Firefox in the New York Times&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m thankful to the &lt;del&gt;5&lt;&#x2F;del&gt; &lt;ins&gt;6&lt;&#x2F;ins&gt; of you who&#x27;ve already donated due to my exhortations. If you do donate, and you feel general goodwill towards me (heh), I ask that you donate via &lt;a href=&quot;https:&#x2F;&#x2F;www.mozillastore.com&#x2F;donations&#x2F;?campaign=newspaper&amp;amp;user=47&quot;&gt;my donation link&lt;&#x2F;a&gt;. If I manage to get 9 of you to do so, I&#x27;d get the faux title of &quot;Community Champion&quot; and get some extra perks (I &lt;em&gt;really&lt;&#x2F;em&gt; want the free Firefox t-shirt signed by the Firefox crew).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The Straits Times says Half-Life 2 will be delayed... Right</title>
    <published>2004-10-24T14:35:21+00:00</published>
    <updated>2004-10-24T14:35:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/24/the-straits-times-says-half-life-2-will-be-delayed-right/"/>
    <id>https://chuyeow.wtf/2004/10/24/the-straits-times-says-half-life-2-will-be-delayed-right/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/24/the-straits-times-says-half-life-2-will-be-delayed-right/">&lt;p&gt;Local (Singaporean) news publication &lt;a href=&quot;http:&#x2F;&#x2F;straitstimes.asia1.com.sg&#x2F;&quot;&gt;The Straits Times&lt;&#x2F;a&gt; has a mini-article today proclaiming &lt;a href=&quot;http:&#x2F;&#x2F;straitstimes.asia1.com.sg&#x2F;sub&#x2F;click&#x2F;story&#x2F;0,5562,280973,00.html&quot;&gt;&quot;Half Life 2 Delayed&quot;&lt;&#x2F;a&gt;. (You need to login to read the article. For that purpose, I&#x27;ve created a &lt;a href=&quot;http:&#x2F;&#x2F;bugmenot.com&#x2F;view.php?url=http%3A%2F%2Fstraitstimes.asia1.com%2F&quot;&gt;BugMeNot entry for The Straits Times&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Publisher Vivendi and developer Valve are suing and counter-suing each other over the rights to gaming cafe usage royalties. This battle could hold up the release date by up to six months&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Now, am I the one who&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;10&#x2F;19&#x2F;half-life-2-release-date-november-16&#x2F;&quot;&gt;out of the loop&lt;&#x2F;a&gt; or is The Straits Times publishing old news? (Insert snide comment on how The Straits Times has been trying to portray itself as a world-class newspaper here.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Portions of Spamx plugin for Geeklog minimally based on MT-Blacklist Updater</title>
    <published>2004-10-24T14:07:52+00:00</published>
    <updated>2004-10-24T14:07:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/24/portions-of-spamx-plugin-for-geeklog-minimally-based-on-mt-blacklist-updater/"/>
    <id>https://chuyeow.wtf/2004/10/24/portions-of-spamx-plugin-for-geeklog-minimally-based-on-mt-blacklist-updater/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/24/portions-of-spamx-plugin-for-geeklog-minimally-based-on-mt-blacklist-updater/">&lt;p&gt;Part of the &lt;a href=&quot;http:&#x2F;&#x2F;www.pigstye.net&#x2F;gplugs&#x2F;staticpages&#x2F;index.php&#x2F;spamx&quot;&gt;Spamx plugin&lt;&#x2F;a&gt; for &lt;a href=&quot;http:&#x2F;&#x2F;geeklog.net&quot;&gt;Geeklog&lt;&#x2F;a&gt; (a PHP blogging script) proclaims to be based on &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;scripts&#x2F;blacklistupdater&#x2F;&quot;&gt;MT-Blacklist Updater&lt;&#x2F;a&gt; (&lt;a href=&quot;http:&#x2F;&#x2F;cvs.geeklog.net&#x2F;co.php&#x2F;geeklog-1.3&#x2F;plugins&#x2F;spamx&#x2F;MassDelete.Admin.class.php&quot;&gt;MassDelete.Admin.class.php&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;cvs.geeklog.net&#x2F;co.php&#x2F;geeklog-1.3&#x2F;plugins&#x2F;spamx&#x2F;Import.Admin.class.php&quot;&gt;Import.Admin.class.php&lt;&#x2F;a&gt;). I hardly see the similarity though.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>LiveSearch hack for WordPress</title>
    <published>2004-10-24T00:06:57+00:00</published>
    <updated>2004-10-24T00:06:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/24/livesearch-hack-for-wordpress/"/>
    <id>https://chuyeow.wtf/2004/10/24/livesearch-hack-for-wordpress/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/24/livesearch-hack-for-wordpress/">&lt;p&gt;I found this old link on &lt;a href=&quot;http:&#x2F;&#x2F;blog.bitflux.ch&#x2F;wiki&#x2F;LiveSearch&quot;&gt;LiveSearch&lt;&#x2F;a&gt; that I&#x27;d wanted to implement here but never got around to doing so until now. It&#x27;s really quite a bit of a hack right now, with most of the code coming from the &lt;a href=&quot;http:&#x2F;&#x2F;blog.bitflux.ch&#x2F;wiki&#x2F;LiveSearch&quot;&gt;LiveSearch page on the Bitflux Blog wiki&lt;&#x2F;a&gt; and with direct calls to PHP&#x27;s MySQL functions to get it to work with WordPress.&lt;&#x2F;p&gt;
&lt;p&gt;Instead of replacing the default WordPress search box, I decided to add another one instead (that you can see right now on the left just below the &quot;standard&quot; search box) and label it a &quot;LiveSearch&quot; box. I do this because livesearch.js seems to crash Firefox randomly on occasion (as mentioned on &lt;a href=&quot;http:&#x2F;&#x2F;blog.bitflux.ch&#x2F;archive&#x2F;livesearch_roundup.html&quot;&gt;Bitflux blog&lt;&#x2F;a&gt;). Besides, it&#x27;s hardly fully done, as it currently only does simple SQL LIKE matching on post titles, and the CSS is somewhat inelegant.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, what I did was to add livesearch.js to the WordPress index template, and added the LiveSearch form.&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;&amp;lt;form id=&quot;livesearchform&quot; method=&quot;get&quot; action=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;livesearch.php&quot;&amp;gt;&lt;br &#x2F;&gt;
  &amp;lt;input autocomplete=&quot;off&quot; id=&quot;livesearch&quot; name=&quot;q&quot; onkeypress=&quot;liveSearchStart()&quot; type=&quot;text&quot; &#x2F;&amp;gt;&lt;br &#x2F;&gt;
  &amp;lt;input id=&quot;submitted&quot; name=&quot;submitted&quot; value=&quot;yes&quot; type=&quot;hidden&quot; &#x2F;&amp;gt;&lt;br &#x2F;&gt;
  &amp;lt;div id=&quot;LSResult&quot; style=&quot;display: none;&quot;&amp;gt;&amp;lt;div id=&quot;LSShadow&quot;&amp;gt;&amp;lt;&#x2F;div&amp;gt;&amp;lt;&#x2F;div&amp;gt;&lt;br &#x2F;&gt;
&amp;lt;&#x2F;form&amp;gt;&lt;&#x2F;div&gt;
&lt;p&gt;Next, I hacked out a livesearch.php script (&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;livesearch.phps&quot;&gt;source listing for livesearch.php&lt;&#x2F;a&gt;) that performs the relevant query on WordPress&#x27; wp_posts table (may be differently named on your installation) and returns an XML document containing the matching post titles and their URLs. The tricky part was to map the matching post titles to their URLs (since I&#x27;m using SEO-friendly permalinks). All it took was to include the wp-blog-header.php file and have the get_permalink(ID) function return the correct URL.&lt;&#x2F;p&gt;
&lt;p&gt;The other tricky part involved preventing searches in the LiveSearch box from going to the livesearch.php page, because that&#x27;d return an XML page that the user would hardly know how to proceed from. Adding a hidden form field was a quick hack, but it works just fine and redirects the user to the search results page that WordPress spews.&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;&#x2F;&#x2F; If the LiveSearch form was actually submitted (as opposed to being requested&lt;br &#x2F;&gt;
&#x2F;&#x2F; via a XMLHttpRequest, we redirect to the standard WP search page.&lt;br &#x2F;&gt;
if( isset($_GET[&#x27;submitted&#x27;]) &amp;&amp; $_GET[&#x27;submitted&#x27;] == &#x27;yes&#x27; ) {&lt;br &#x2F;&gt;
  header(&#x27;Location: &#x27; . get_settings(&#x27;siteurl&#x27;) . &#x27;&#x2F;?s=&#x27; . $_GET[&#x27;q&#x27;]);&lt;br &#x2F;&gt;
  exit;&lt;br &#x2F;&gt;
}&lt;&#x2F;div&gt;
&lt;p&gt;Well, that&#x27;s it for now. It feels really like a hackjob but it works just fine. Perhaps someone could roll this up into a WordPress plugin or we could get LiveSearch as a feature in WordPress in future (as &lt;a href=&quot;http:&#x2F;&#x2F;s9y.org&#x2F;&quot;&gt;Serendipity&lt;&#x2F;a&gt; already does).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Desktop namespace shortcut for Firefox</title>
    <published>2004-10-23T16:04:12+00:00</published>
    <updated>2004-10-23T16:04:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/23/desktop-namespace-shortcut-for-firefox/"/>
    <id>https://chuyeow.wtf/2004/10/23/desktop-namespace-shortcut-for-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/23/desktop-namespace-shortcut-for-firefox/">&lt;p&gt;There&#x27;s a &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=138033&amp;start=17&quot;&gt;thread in the MozillaZine forums&lt;&#x2F;a&gt; that teaches you how to create a desktop shortcut for Firefox, replete with context menu options for accessing the Profile Manager and the Options UI. Pretty neat and convenient.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox screensaver</title>
    <published>2004-10-23T15:59:47+00:00</published>
    <updated>2004-10-23T15:59:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/23/firefox-screensaver/"/>
    <id>https://chuyeow.wtf/2004/10/23/firefox-screensaver/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/23/firefox-screensaver/">&lt;p&gt;Digital Media Minute has a &lt;a href=&quot;http:&#x2F;&#x2F;www.digitalmediaminute.com&#x2F;article&#x2F;1084&#x2F;&quot;&gt;Firefox screensaver for Windows&lt;&#x2F;a&gt; created with Flash.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>My name will be in The New York Times</title>
    <published>2004-10-22T00:20:21+00:00</published>
    <updated>2004-10-22T00:20:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/22/my-name-will-be-in-the-new-york-times/"/>
    <id>https://chuyeow.wtf/2004/10/22/my-name-will-be-in-the-new-york-times/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/22/my-name-will-be-in-the-new-york-times/">&lt;p&gt;&lt;ins&gt;Update: &lt;del&gt;7&lt;&#x2F;del&gt; 6 days left to get your name in The New York Times! Thanks go to &lt;a href=&quot;http:&#x2F;&#x2F;ingoal.info&#x2F;&quot;&gt;Ingoal&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.pixelbox.ca&#x2F;&quot;&gt;Alexandre Juneau&lt;&#x2F;a&gt;, and one other anonymous reader for donating via &lt;a href=&quot;https:&#x2F;&#x2F;www.mozillastore.com&#x2F;donations&#x2F;?campaign=newspaper&amp;user=47&quot;&gt;my donation link&lt;&#x2F;a&gt; (and even more importantly, for donating at all).&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You&#x27;ve probably heard about the &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;4154&quot;&gt;full-page Firefox ad that will be in The New York Times&lt;&#x2F;a&gt; and wholly funded by donations from the community. If you haven&#x27;t, you probably don&#x27;t read &lt;a href=&quot;http:&#x2F;&#x2F;slashdot.org&#x2F;articles&#x2F;04&#x2F;10&#x2F;19&#x2F;1338254.shtml?tid=154&amp;tid=98&quot;&gt;Slashdot&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;news.com.com&#x2F;Firefox+fans+to+take+campaign+to+NY+Times&#x2F;2100-1032_3-5419504.html&quot;&gt;c|net&#x27;s news.com&lt;&#x2F;a&gt;, and I&#x27;d imagine a good number of news sites, in English or otherwise.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I was a little slow on the uptake myself, and have only just made my donation (of USD30) that goes towards a one of my favorite causes. If you&#x27;re a student, you can get your name listed for just USD10.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-nytimes-donation-thanks-small.png&quot; alt=&quot;Screenshot of the donation completion page in the Firefox NYTimes ad campaign&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;d like to make a donation, and if you go through &lt;a href=&quot;https:&#x2F;&#x2F;www.mozillastore.com&#x2F;donations&#x2F;?campaign=newspaper&amp;user=47&quot;&gt;my donation link&lt;&#x2F;a&gt;, I&#x27;d be branded a Community Champion and get some &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;3749#CC&quot;&gt;extra perks&lt;&#x2F;a&gt; (best of which is a free Firefox t-shirt signed by the Firefox crew).&lt;&#x2F;p&gt;
&lt;p&gt;C&#x27;mon, &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;4154&quot;&gt;be a part of Firefox users&#x27; ad in The New York Times!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;By the way, would a US resident kindly inform me when the ad is taken out? I&#x27;d like to buy a copy of it for keepsakes. Would have to go hunting for a copy.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Half-Life 2 release date: November 16</title>
    <published>2004-10-19T10:24:12+00:00</published>
    <updated>2004-10-19T10:24:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/19/half-life-2-release-date-november-16/"/>
    <id>https://chuyeow.wtf/2004/10/19/half-life-2-release-date-november-16/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/19/half-life-2-release-date-november-16/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.gamespot.com&#x2F;news&#x2F;2004&#x2F;10&#x2F;18&#x2F;news_6110764.html&quot;&gt;Half-Life 2 release date: November 16!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Why does VPS hosting take so long to setup?</title>
    <published>2004-10-18T23:12:19+00:00</published>
    <updated>2004-10-18T23:12:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/18/why-does-vps-hosting-take-so-long-to-setup/"/>
    <id>https://chuyeow.wtf/2004/10/18/why-does-vps-hosting-take-so-long-to-setup/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/18/why-does-vps-hosting-take-so-long-to-setup/">&lt;p&gt;&lt;ins&gt;Update: After 3 days, I finally got my activation letter. It took a post to WebHostingTalk to get JVDS&#x27; attention. It seems that the activation email was sent, but it never landed in my inbox.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This is the 2nd time I&#x27;ve signed up with a &lt;acronym title=&quot;Virtual Private Server&quot;&gt;VPS&lt;&#x2F;acronym&gt; provider and it&#x27;s taken too long for my account to be set up. &lt;a href=&quot;http:&#x2F;&#x2F;linode.com&#x2F;&quot;&gt;Linode&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.linode.com&#x2F;forums&#x2F;viewtopic.php?t=1108&quot;&gt;took 16 hours&lt;&#x2F;a&gt; to set it up when they promised:&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;http:&#x2F;&#x2F;www.linode.com&#x2F;members&#x2F;&quot;&gt;&lt;p&gt; Apply now and your account will be activated within hours! &lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;16 hours does technically qualify as &quot;within hours&quot;, but it&#x27;s a mighty long wait. But I do understand that there&#x27;s a lead time needed to setup a VPS so it&#x27;s acceptable.&lt;&#x2F;p&gt;
&lt;p&gt;But now that I&#x27;m intending to switch from Linode to &lt;a href=&quot;http:&#x2F;&#x2F;jvds.com&#x2F;&quot;&gt;JVDS&lt;&#x2F;a&gt; (for reasons which I&#x27;ll expound in an entry in the near future), and I&#x27;m again left waiting, this time for more than 34 hours (at the time of writing). And this after sending in 2 support emails asking about activation, and being told that the account details will be given to me &quot;shortly&quot;. Sigh. Even the expensive (comparatively) &lt;a href=&quot;http:&#x2F;&#x2F;theplanet.com&#x2F;&quot;&gt;The Planet&lt;&#x2F;a&gt; dedicated server that I ordered for my company was built within 12 hours. And I signed up with JVDS because of their excellent reviews in &lt;a href=&quot;http:&#x2F;&#x2F;webhostingtalk.com&#x2F;&quot;&gt;WebHostingTalk&lt;&#x2F;a&gt;. They may be mighty quite to reply to support tickets and emails, but what good if you can&#x27;t deliver. I wonder if I&#x27;m just unlucky. Maybe the dedicated host on which they were setting up my VPS blew a hard drive.&lt;&#x2F;p&gt;
&lt;p&gt;And so I wait... And I wait...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>WordPress hosting up for grabs</title>
    <published>2004-10-17T20:28:03+00:00</published>
    <updated>2004-10-17T20:28:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/17/wordpress-hosting-up-for-grabs/"/>
    <id>https://chuyeow.wtf/2004/10/17/wordpress-hosting-up-for-grabs/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/17/wordpress-hosting-up-for-grabs/">&lt;p&gt;&lt;ins&gt;Update: All gone! Thanks everyone!&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: seeing how pathetic the (non-)response has been, I&#x27;ve lowered the donation amount to USD2. C&#x27;mon people. Even as a gift for your non-tech-savvy uncle&#x2F;auntie&#x2F;grandma who wants to blog, it&#x27;s a good deal!&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: There &lt;del datetime=&quot;2004-10-5T14:3:37--8:00&quot;&gt;are 3 of the accounts&lt;&#x2F;del&gt; is 1 account left. Thanks Jannah and Phu for making the donations to WordPress!&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Jeff Holman of &lt;a href=&quot;http:&#x2F;&#x2F;www.revisemedia.com&#x2F;&quot;&gt;Revise Media&lt;&#x2F;a&gt; wrote me awhile back to put up ads for his new &lt;a href=&quot;http:&#x2F;&#x2F;www.revisemedia.com&#x2F;services&#x2F;wordpress&#x2F;&quot;&gt;WordPress weblog hosting&lt;&#x2F;a&gt; service, and I gladly agreed because I was kind of a WordPress fan (caution: heavy understatement in use). His ad is on the left where you&#x27;ve probably been seeing it for awhile (if you&#x27;re not reading via a feed reader). (On the subject of ads, well, they fund the webhosting for this blog and then a little more.)&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, Jeff offered to give me 5 &lt;a href=&quot;http:&#x2F;&#x2F;www.revisemedia.com&#x2F;services&#x2F;wordpress&#x2F;compare.html&quot;&gt;Plus plans&lt;&#x2F;a&gt; &lt;ins&gt;(1 year subscription)&lt;&#x2F;ins&gt; for free to give away to you, my dearest readers. There was supposed to be some contest, but I gave up trying to think of a good idea for one. So I spoke with Jeff on this other idea I had and he has agreed to let them go for a &lt;a href=&quot;http:&#x2F;&#x2F;wordpress.org&#x2F;donate&#x2F;&quot;&gt;donation to WordPress&lt;&#x2F;a&gt; (rather than for &quot;free&quot;).&lt;&#x2F;p&gt;
&lt;p&gt;Well, the Plus plans are going at $9.95&#x2F;year each, and I ask of you to &lt;a href=&quot;http:&#x2F;&#x2F;wordpress.org&#x2F;donate&#x2F;&quot;&gt;make a donation to WordPress&lt;&#x2F;a&gt; of at least &lt;del&gt;$5&lt;&#x2F;del&gt; &lt;ins&gt;$2&lt;&#x2F;ins&gt; (this amount was of my choosing). &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;contact&#x2F;&quot;&gt;Write me&lt;&#x2F;a&gt; first (or leave a comment) if you&#x27;re thinking of donating and claiming a free Plus plan - Jeff has 5 of them for me to give away.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Half-Life 2 goes gold, we think</title>
    <published>2004-10-17T17:39:18+00:00</published>
    <updated>2004-10-17T17:39:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/17/half-life-2-goes-gold-we-think/"/>
    <id>https://chuyeow.wtf/2004/10/17/half-life-2-goes-gold-we-think/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/17/half-life-2-goes-gold-we-think/">&lt;p&gt;Voodoo Extreme: &lt;a href=&quot;http:&#x2F;&#x2F;ve3d.ign.com&#x2F;articles&#x2F;557&#x2F;557589p1.html?fromint=1&quot;&gt;Half-Life 2 Submitted to Euro Agencies&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;www.gamespot.com&#x2F;news&#x2F;2004&#x2F;10&#x2F;15&#x2F;news_6110731.html&quot;&gt;Gamespot Rumor control&lt;&#x2F;a&gt;: &quot;Half-Life 2 is gold... Not bogus.&quot;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Search Keys Firefox extension for the accessibility and the keyboard-loving</title>
    <published>2004-10-16T02:57:28+00:00</published>
    <updated>2004-10-16T02:57:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/16/search-keys-extension/"/>
    <id>https://chuyeow.wtf/2004/10/16/search-keys-extension/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/16/search-keys-extension/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;squarefree.com&#x2F;&quot;&gt;Jesse Ruderman&lt;&#x2F;a&gt; has just rolled out the amazing &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;extensions&#x2F;search-keys&#x2F;&quot;&gt;Search Keys&lt;&#x2F;a&gt; Firefox extension that:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;lets you go to search results by pressing the number of the search result instead of clicking&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Its premise is simple, but it&#x27;s so darn useful to people like me. I&#x27;m a keyboard- and keyboard shortcut-loving person, so this is another extension I&#x27;ve added to my must-install list (of extensions). I can imagine this does heaps for accessibility as well.&lt;&#x2F;p&gt;
&lt;p&gt;It works in &quot;Google, Google News, Google Groups, Google Desktop Search, del.icio.us, and Bugzilla&quot; at this time (most important being the Google support of course). You can see the numbers next to the links in Google search results pages, and you can open the link you want in a new tab by pressing Ctrl-1, Ctrl-2 and so on.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-search-keys-google.png&quot; alt=&quot;Screenshot of Google search results with Search Keys in action&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It also works for &lt;a href=&quot;http:&#x2F;&#x2F;del.icio.us&#x2F;&quot;&gt;del.icio.us&lt;&#x2F;a&gt; bookmark links.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-search-keys-delicious.png&quot; alt=&quot;Screenshot of del.icio.us page with Search Keys in action&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A big pat on the back for &lt;a href=&quot;http:&#x2F;&#x2F;squarefree.com&#x2F;&quot;&gt;Jesse&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Half Life 2 review in PC Gamer (and Vampire: Bloodlines)</title>
    <published>2004-10-16T00:51:48+00:00</published>
    <updated>2004-10-16T00:51:48+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/16/half-life-2-review-pc-gamer/"/>
    <id>https://chuyeow.wtf/2004/10/16/half-life-2-review-pc-gamer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/16/half-life-2-review-pc-gamer/">&lt;p&gt;I went to get some DVD+Rs today (TDK 8X DVD+R RICOHJPNR02) and went to the magazine rack to look for the issue of &lt;a href=&quot;http:&#x2F;&#x2F;www.pcgamer.com&quot;&gt;PC Gamer&lt;&#x2F;a&gt; with the exclusive review of Half-Life 2 (it was all over the web and even Slashdotted). And there it was calling out to me to buy it for SGD7 (SGD1 &amp;#8776; USD0.60). Well, I used to have a subscription to PC Gamer when I was a hardcore gamer a few years back, even though it cost ridiculously high compared to the USD1.99 per issue you can get in the US. Anyway, enough with the life story... Check out the &lt;a href=&quot;http:&#x2F;&#x2F;ve3dmedia.ign.com&#x2F;ve3d&#x2F;image&#x2F;hl2pcgamer_1096328892.gif&quot;&gt;PC Gamer December issue cover&lt;&#x2F;a&gt; (at IGN.com).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;half-life-2-logo-pcgamer.png&quot; alt=&quot;Half-Life 2 logo&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Just finished reading the review (it got 98%, if you don&#x27;t know by now), and damn I&#x27;d so like to get my hands on a copy of Half-Life 2 (no, it&#x27;s not out yet) to play with the Zero-Point Energy Gun (&lt;acronym title=&quot;also known as&quot;&gt;aka&lt;&#x2F;acronym&gt; the Gravity Gun). And maybe shoot down some Striders.&lt;&#x2F;p&gt;
&lt;p&gt;The recommended system requirements are a little worrying though - the low end 3D card is an ATI RADEON 9600 PRO 128MB, which PC Gamer equated to be the same as a GeForce FX 5700 128MB. I only have a (now) crappy GeForce FX 5200 128MB. I do have a 3.0GHz HyperThreading processor, but that hardly helps when the graphics card is the bottleneck. Upgrade? Sigh.&lt;&#x2F;p&gt;
&lt;p&gt;And what&#x27;s more in this issue, there&#x27;s also a hands-on scoop on &lt;a href=&quot;http:&#x2F;&#x2F;www.vampirebloodlines.com&#x2F;&quot;&gt;Vampire: The Masquerade - Bloodlines&lt;&#x2F;a&gt;. What a game this could turn out to be. To tell the truth, I&#x27;m marginally more excited about this game than Half-Life 2 (I &lt;em&gt;am&lt;&#x2F;em&gt;, first and foremost, a &lt;acronym title=&quot;Computer Role-Playing Game&quot;&gt;CRPG&lt;&#x2F;acronym&gt; player). I thoroughly enjoyed the original &lt;a href=&quot;http:&#x2F;&#x2F;games.activision.com&#x2F;games&#x2F;vampire&#x2F;&quot;&gt;Vampire: The Masquerade - Redemption&lt;&#x2F;a&gt; and even read the Vampire: The Masquerade novels. I mean, you get to play a vampire from 1 of 7 of Camarilla clans and experience the Vampire: The Masquerade world in its Source engine glory. What&#x27;s not to like?&lt;&#x2F;p&gt;
&lt;p&gt;The waiting is the hardest part. Please let them be released on November.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google Desktop is here</title>
    <published>2004-10-15T00:53:56+00:00</published>
    <updated>2004-10-15T00:53:56+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/15/google-desktop-is-here/"/>
    <id>https://chuyeow.wtf/2004/10/15/google-desktop-is-here/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/15/google-desktop-is-here/">&lt;p&gt;The newest, coolest, next big thing from Google: &lt;a href=&quot;http:&#x2F;&#x2F;desktop.google.com&#x2F;&quot;&gt;Google Desktop&lt;&#x2F;a&gt; indexes your files, emails (Outlook and Outlook Express only though), MS Office documents, and AOL IM chat history. And it really does work and that so much better than the slow (accidentally hitting F3 is no fun) and lousy Search function that comes with Windows. Download it, install it, try it out and pull out the F3 key from your keyboard with your teaspoon.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;google-desktop-firefox.png&quot; alt=&quot;Screenshot of Google Desktop search in Firefox when searching for &amp;quot;Firefox&amp;quot;&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Oh, and if you&#x27;re trying to hide bootleg software&#x2F;music&#x2F;porn in obscure locations, remember to tell Google Desktop &quot;Don&#x27;t Search These Items&quot; so none of that comes up at the least opportune moments (like when your girlfriend is looking over your shoulder).&lt;&#x2F;p&gt;
&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;www.oreillynet.com&#x2F;pub&#x2F;a&#x2F;network&#x2F;2004&#x2F;10&#x2F;14&#x2F;google_desktop.html&quot;&gt;O&#x27;Reilly Network&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>mozpartying at the big 1.0</title>
    <published>2004-10-13T22:53:30+00:00</published>
    <updated>2004-10-13T22:53:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/13/mozpartying-at-the-big-10/"/>
    <id>https://chuyeow.wtf/2004/10/13/mozpartying-at-the-big-10/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/13/mozpartying-at-the-big-10/">&lt;p&gt;Worldwide parties for the big one-point-zero releases of Firefox and Thunderbird are in the works at &lt;a href=&quot;http:&#x2F;&#x2F;www.openforce.at&#x2F;mozparty2&#x2F;&quot;&gt;mozparty2&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Anyway want to &lt;a href=&quot;http:&#x2F;&#x2F;www.openforce.at&#x2F;mozparty2&#x2F;?reg&quot;&gt;organize a Singapore mozparty&lt;&#x2F;a&gt; ? (Before you ask why don&#x27;t I do it, let me say that I&#x27;m not the &quot;planner&quot; kind of person.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>muvee Technologies in Business Times</title>
    <published>2004-10-12T11:45:21+00:00</published>
    <updated>2004-10-12T11:45:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/12/mvuee-technologies-in-business-times/"/>
    <id>https://chuyeow.wtf/2004/10/12/mvuee-technologies-in-business-times/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/12/mvuee-technologies-in-business-times/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;it.asia1.com.sg&#x2F;newsdaily&#x2F;news004_20041012.html&quot;&gt;Looking at the global picture&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Dreamhost hosting at $0.77&#x2F;month</title>
    <published>2004-10-11T15:40:28+00:00</published>
    <updated>2004-10-11T15:40:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/11/dreamhost-hosting-at-077month/"/>
    <id>https://chuyeow.wtf/2004/10/11/dreamhost-hosting-at-077month/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/11/dreamhost-hosting-at-077month/">&lt;p&gt;&lt;ins&gt;Update: Well, I am getting 10% referral credit from this and DreamHost has confirmed that we can keep that. Thanks everyone for the referral credit! I have $44.62 right now from referrals and am wondering what to do with the extra money. Ideas anyone?&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s true. &lt;a href=&quot;http:&#x2F;&#x2F;www.dreamhost.com&#x2F;rewards.cgi?chuyeow&quot;&gt;Dreamhost&lt;&#x2F;a&gt; has real cheap hosting plans at USD0.77 per month. You have to pay for a year, but at USD9.24 &lt;em&gt;with&lt;&#x2F;em&gt; a free domain name, I&#x27;m surely not complaining.&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;http:&#x2F;&#x2F;www.dreamhost.com&#x2F;promo-777.html&quot;&gt;&lt;p&gt;The first 777 customers to sign up for service with DreamHost using the promotional code &quot;777&quot; will pay just $0.77 for each month of hosting - for an entire YEAR! That&#x27;s a $119.40 value - for just $9.24!&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;I signed up almost immediately when I saw it (I put Daniel Glazman as my referrer because he &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;08&#x2F;22&#x2F;looking-for-hosting&#x2F;#comment-2988&quot;&gt;recommended it first&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;On referrals though, it does say this:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Referral credit will not be provided to referers of customers who sign up for this promotional sale.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Anyway, if you do sign up, do put my ID, &lt;strong&gt;chuyeow&lt;&#x2F;strong&gt;, as the referrer - I suppose referral credit will accrue later when one signs up for other plans, if I read their &lt;a href=&quot;http:&#x2F;&#x2F;www.dreamhost.com&#x2F;rewards.html&quot;&gt;rewards page&lt;&#x2F;a&gt; correctly.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google does it again with Google SMS</title>
    <published>2004-10-08T16:01:02+00:00</published>
    <updated>2004-10-08T16:01:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/08/google-does-it-again-with-google-sms/"/>
    <id>https://chuyeow.wtf/2004/10/08/google-does-it-again-with-google-sms/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/08/google-does-it-again-with-google-sms/">&lt;p&gt;Google rolls out &lt;a href=&quot;http:&#x2F;&#x2F;sms.google.com&#x2F;&quot;&gt;Google SMS&lt;&#x2F;a&gt; in the US. Damn, this is too cool (especially if it stays free when it gets to Singapore).&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;sms&#x2F;faq.html#using4&quot;&gt;&lt;p&gt;Right now, Google SMS only works in the U.S.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;googleblog&#x2F;2004&#x2F;10&#x2F;get-411-with-46645.html&quot;&gt;Google Blog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Download.com asks, &quot;When will you switch to Firefox?&quot;</title>
    <published>2004-10-06T22:04:19+00:00</published>
    <updated>2004-10-06T22:04:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/06/downloadcom-asks-when-will-you-switch-to-firefox/"/>
    <id>https://chuyeow.wtf/2004/10/06/downloadcom-asks-when-will-you-switch-to-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/06/downloadcom-asks-when-will-you-switch-to-firefox/">&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-cnet-switch-poll.png&quot; alt=&quot;Screenshot of Download.com Firefox switch poll&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;download.com&#x2F;&quot;&gt;&amp;raquo; Download.com&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;www.spreadfirefox.com&#x2F;?q=node&#x2F;view&#x2F;2764&quot;&gt;SpreadFirefox.com&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gmail&#x27;s new features - Atom feed and &quot;inline&quot; Contact list</title>
    <published>2004-10-04T18:28:57+00:00</published>
    <updated>2004-10-04T18:28:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/04/gmails-new-features-atom-feed/"/>
    <id>https://chuyeow.wtf/2004/10/04/gmails-new-features-atom-feed/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/04/gmails-new-features-atom-feed/">&lt;p&gt;Just noticed this:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;gmail-atom.png&quot; alt=&quot;Screenshot of Gmail atom feed button&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;They&#x27;ve made the Contacts page &quot;inline&quot; instead of popping up a new window.&lt;&#x2F;p&gt;
&lt;p&gt;Obviously the Atom feed won&#x27;t work unless you are authenticated (so RSS&#x2F;Atom feed readers won&#x27;t be able to get anything). I wonder how this can be used. Hmm... I smell something cool.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ll know soon enough when Google updates the &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;gmail&#x2F;help&#x2F;whatsnew.html&quot;&gt;New Features&lt;&#x2F;a&gt; page.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gentoo Linux website redesign contest</title>
    <published>2004-10-04T08:53:27+00:00</published>
    <updated>2004-10-04T08:53:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/04/gentoo-linux-website-redesign-contest/"/>
    <id>https://chuyeow.wtf/2004/10/04/gentoo-linux-website-redesign-contest/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/04/gentoo-linux-website-redesign-contest/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.gentoo.org&#x2F;&quot;&gt;Gentoo Linux&lt;&#x2F;a&gt; is holding a &lt;a href=&quot;http:&#x2F;&#x2F;forums.gentoo.org&#x2F;viewtopic.php?t=227589&quot;&gt;poll&lt;&#x2F;a&gt; for their &lt;a href=&quot;http:&#x2F;&#x2F;www.gentoo.org&#x2F;proj&#x2F;en&#x2F;infrastructure&#x2F;redesign-guidelines.xml&quot;&gt;website redesign contest&lt;&#x2F;a&gt;. I fancy &lt;a href=&quot;http:&#x2F;&#x2F;www.gentoo.org&#x2F;images&#x2F;wwwcontest&#x2F;contest4_front.png&quot;&gt;Derek Gerstmann&#x27;s design&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Tabbed browsing gets even better in Firefox</title>
    <published>2004-10-02T15:01:40+00:00</published>
    <updated>2004-10-02T15:01:40+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/02/tabbed-browsing-gets-even-better-in-firefox/"/>
    <id>https://chuyeow.wtf/2004/10/02/tabbed-browsing-gets-even-better-in-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/02/tabbed-browsing-gets-even-better-in-firefox/">&lt;p&gt;This is perhaps my favorite bugfix&#x2F;enhancement since... since they added the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;03&#x2F;19&#x2F;deletion-of-autocomplete-results-in-firefox-mozilla-17b-released&quot;&gt;deletion of autocomplete results&lt;&#x2F;a&gt; way back in March 2004.&lt;&#x2F;p&gt;
&lt;p&gt;Remember how hard it was to get links clicked in external applications to open in new tab? We tried setting the advanced.system.supportDDEExec preference to false (it worked spottily). We tried the &lt;a href=&quot;http:&#x2F;&#x2F;update.mozilla.org&#x2F;extensions&#x2F;moreinfo.php?id=50&amp;vid=673&quot;&gt;Show Single Window&lt;&#x2F;a&gt; extension which worked for awhile until something broke in Firefox (this time, I didn&#x27;t bother to find out which bug this was exactly) and clicked links started opening in new windows. &lt;a href=&quot;http:&#x2F;&#x2F;white.sakura.ne.jp&#x2F;~piro&#x2F;xul&#x2F;_tabextensions.html.en&quot;&gt;Tabbrowser Extensions&lt;&#x2F;a&gt; worked, but there were times when it caused Firefox to break, and it isn&#x27;t officially on &lt;a href=&quot;http:&#x2F;&#x2F;update.mozilla.org&#x2F;&quot;&gt;u.m.o&lt;&#x2F;a&gt; (update.mozilla.org).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;as-if-by-magic.com&#x2F;&quot;&gt;Andy Mason&lt;&#x2F;a&gt; wrote a &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;09&#x2F;30&#x2F;another-call-to-fix-open-in-tabs-in-firefox&#x2F;#comment-3397&quot;&gt;comment&lt;&#x2F;a&gt; recently to ask me how to get links from external applications to open in a new tab. I recommended &lt;a href=&quot;http:&#x2F;&#x2F;www.pryan.org&#x2F;mozilla&#x2F;site&#x2F;TheOneKEA&#x2F;tabprefs&#x2F;&quot;&gt;Tabbrowser Preferences&lt;&#x2F;a&gt; (TBP) - worked for him. Interestingly, this all happened today, just when the tabbed browsing preferences UI in &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=172962&quot;&gt;bug 172962 - Options for where to open URLs from other applications (reuse tab, new tab, new window)&lt;&#x2F;a&gt; that was mentioned in the &lt;a href=&quot;http:&#x2F;&#x2F;www.pryan.org&#x2F;mozilla&#x2F;site&#x2F;TheOneKEA&#x2F;tabprefs&#x2F;&quot;&gt;TBP site&lt;&#x2F;a&gt; went into the daily build. That&#x27;s right, there&#x27;s now a Tabbed Browsing preferences section in Firefox options as of &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;2004-10-01-12-0.9&#x2F;&quot;&gt;today&#x27;s daily build (2004-10-01)&lt;&#x2F;a&gt; and this is how it looks like:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;screenshots&#x2F;ff-new-tabbed-browsing-opts.png&quot; title=&quot;Click for the full image&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-new-tabbed-browsing-opts-small.png&quot; alt=&quot;Screenshot of Firefox&#x27;s new Tabbed Browsing preferences UI&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The first thing I did was uninstall the Single Window Extension to test it by selecting the radio boxes I highlighted in red and then going crazy with external application link-clicking. The verdict: it works beautifully! (Of course, I&#x27;m not an anal-retentive &lt;acronym title=&quot;Quality Assurance&quot;&gt;QA&lt;&#x2F;acronym&gt; engineer, so there could be cases where it doesn&#x27;t work that I&#x27;ve missed - but it seems to hold out pretty well for all my needs so far.) It may not seem like much a deal, but those of us who have been struggling with this will fully appreciate and understand the magnitude of this bugfix. Especially when this is one of the most often asked questions in the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;&quot;&gt;MozillaZine forums&lt;&#x2F;a&gt;. I am &lt;em&gt;so&lt;&#x2F;em&gt; glad this is fixed.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>They say getting your site ripped off is the greatest honor</title>
    <published>2004-10-02T14:15:09+00:00</published>
    <updated>2004-10-02T14:15:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/02/redemption-in-a-blog-ripoff/"/>
    <id>https://chuyeow.wtf/2004/10/02/redemption-in-a-blog-ripoff/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/02/redemption-in-a-blog-ripoff/">&lt;p&gt;I was going through my referrer listings (it&#x27;s early in the month, so it&#x27;s much easier to catch any referrer spammers). Thankfully, there were very few, now that I&#x27;ve blocked referrers with the words &quot;sex&quot;, &quot;porn&quot;, &quot;viagra&quot;, &quot;cialis&quot;, and so on. Anyway, I came across this referrer that had no page views and plenty of hits - an almost sure sign of hotlinking (or it could also be RSS readers, forum threads, which are legitimate).&lt;&#x2F;p&gt;
&lt;p&gt;So I checked out &lt;a href=&quot;http:&#x2F;&#x2F;cristal.inria.fr&#x2F;~yakobows&#x2F;&quot;&gt;http:&#x2F;&#x2F;cristal.inria.fr&#x2F;~yakobows&#x2F;&lt;&#x2F;a&gt;, and almost thought I was viewing the wrong tab (it happens sometimes when you use tab-browsing) and was looking at my own blog. Of course, upon closer inspection, I realized it wasn&#x27;t my site but a rip-off of the current site&#x27;s design and layout. The CSS is identical, even the favicon. &lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;screenshots&#x2F;riab-ripoff.png&quot; title=&quot;Click for a larger image&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;riab-ripoff-thumb.png&quot; alt=&quot;Screenshot of ripoff of redemption in a blog&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I wasn&#x27;t pissed - rather, I was flattered (as this entry&#x27;s title indicates). But I&#x27;m sure I want this Boris to quit using exactly the same design as mine. I kinda like what I have now (because &lt;a href=&quot;http:&#x2F;&#x2F;percept.be&#x2F;&quot;&gt;Bart Noppen&lt;&#x2F;a&gt; said he liked my color scheme, and I&#x27;m a big fan of Bart&#x27;s design skills) and I want the blog to be (somewhat) unique.&lt;&#x2F;p&gt;
&lt;p&gt;Boris, appreciate the honor, but please try to make it less of a rip-off would you? Thanks.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>J2SE 5.0 is out</title>
    <published>2004-10-01T10:28:22+00:00</published>
    <updated>2004-10-01T10:28:22+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/01/j2se-50-is-out/"/>
    <id>https://chuyeow.wtf/2004/10/01/j2se-50-is-out/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/01/j2se-50-is-out/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;java.sun.com&#x2F;j2se&#x2F;1.5.0&#x2F;docs&#x2F;relnotes&#x2F;features.html&quot;&gt;New Features and Enhancements in J2SE 5.0&lt;&#x2F;a&gt;. I miss Java. I&#x27;m having a rough time getting used to wxPython (mostly because of its lack of documentation).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Forever Geek redesigns</title>
    <published>2004-10-01T10:16:38+00:00</published>
    <updated>2004-10-01T10:16:38+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/10/01/forever-geek-redesigns/"/>
    <id>https://chuyeow.wtf/2004/10/01/forever-geek-redesigns/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/10/01/forever-geek-redesigns/">&lt;p&gt;Paul Scrivens has redesigned &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;&quot;&gt;Forever Geek&lt;&#x2F;a&gt;. I like it better than the old design - much easier to read (I don&#x27;t really like white backgrounds). I&#x27;m proud that &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;09&#x2F;17&#x2F;forever-geek-have-you-read-it&#x2F;&quot;&gt;I blog there&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Another call to &quot;fix&quot; &quot;Open in Tabs&quot; in Firefox</title>
    <published>2004-09-30T09:52:20+00:00</published>
    <updated>2004-09-30T09:52:20+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/30/another-call-to-fix-open-in-tabs-in-firefox/"/>
    <id>https://chuyeow.wtf/2004/09/30/another-call-to-fix-open-in-tabs-in-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/30/another-call-to-fix-open-in-tabs-in-firefox/">&lt;p&gt;You may or may not have noticed this neat little &quot;Open in Tabs&quot; feature in Mozilla Firefox that lets you open bookmarks in a folder in tabs. Just to be clear, here&#x27;s how it looks like:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-open-in-tabs-1.png&quot; alt=&quot;Screenshot of Mozilla Firefox &amp;quot;Open in tabs&amp;quot; menu option&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And here it is again in the context menu when you right-click on a bookmark folder:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-open-in-tabs-2.png&quot; alt=&quot;Screenshot of Mozilla Firefox &amp;quot;Open in tabs&amp;quot; context menu option&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&quot;Open in Tabs&quot; is also featured in &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;why&#x2F;&quot;&gt;Why You Should Switch to Firefox&lt;&#x2F;a&gt;, the official &quot;Why switch&quot; (to Firefox) write-up. Well, this would be all fine and dandy and a plus point to the tab browsing paradigm of Firefox (and Opera, etc.), except for what appears to be a near fatal flaw in my eyes.&lt;&#x2F;p&gt;
&lt;p&gt;Here, try this in a new Firefox window. Open up 4 tabs. &lt;em&gt;Make sure that there&#x27;s nothing in these tabs that you want to remember to come back to later, especially the last 2&lt;&#x2F;em&gt;. Now try using &quot;Open in Tabs&quot; on a bookmark folder with just 2 bookmarks. What just happened? Firefox has closed the last 2 tabs and loaded the first 2 tabs with the first 2 bookmarks. Well, actually this is not so bad for the first 2 tabs, because you can use the &quot;Back&quot; button to go back to your page should you want to, but the tabs that were closed are lost.&lt;&#x2F;p&gt;
&lt;p&gt;Destructive action without forewarning? I&#x27;d think so. &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=258224 &quot;&gt;Bug 258244- &#x27;Open in tabs&#x27; command does not respect close multiple tabs warning&lt;&#x2F;a&gt;, reported by Thomas Rutter (who happens to be the forum admin for &lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&#x2F;forums&#x2F;&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt;), asks for this to be fixed by either displaying a warning first or opening the new tabs &lt;em&gt;in addition to&lt;&#x2F;em&gt; the current tabs. I&#x27;m not to sure about displaying a warning dialog myself, as Mike Connor feels too, but appending the new tabs to the existing ones seems like a damn fine solution. Sure, you can go to &lt;strong&gt;about:config&lt;&#x2F;strong&gt; and set the browser.tabs.loadFolderAndReplace preference to &lt;strong&gt;false&lt;&#x2F;strong&gt;. But even better would be that this was the default preference in the first place. Would have saved me a lot of cursing during those times I accidentally middle-clicked a bookmark folder. And it is easy to make those accidental middle-clicks when you&#x27;re not thinking straight or not aiming properly (seriously - aren&#x27;t guys notorious for not aiming properly in the toilet?).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=175124&quot;&gt;Bug 175124 - implement Chimera style opening tabs replace as necessary functionality&lt;&#x2F;a&gt; also suggests another (non-destructive) way of dealing with this problem. There are also several other (at least 10) bug reports on the same issue, mostly marked as WONTFIX, with Mike Connor or some other person saying that this is &quot;by design&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Personally, I still feel that appending the new tabs is still the best solution, because it is what&#x27;s &lt;em&gt;consistent&lt;&#x2F;em&gt; with what you&#x27;d expect from middle-clicking - something opens in a new tab when you middle-click. Does anyone feel the same way or have a better solution in mind? &lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>PHP 5.0.2 and 4.3.9</title>
    <published>2004-09-25T13:05:05+00:00</published>
    <updated>2004-09-25T13:05:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/25/php-502-and-439/"/>
    <id>https://chuyeow.wtf/2004/09/25/php-502-and-439/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/25/php-502-and-439/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.php.net&#x2F;&quot;&gt;PHP&lt;&#x2F;a&gt; 5.0.2 and 4.3.9 final are out - maintenance releases both. GIF support is back in the GD extension.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google - the XUL version</title>
    <published>2004-09-25T01:57:19+00:00</published>
    <updated>2004-09-25T01:57:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/25/google-the-xul-version/"/>
    <id>https://chuyeow.wtf/2004/09/25/google-the-xul-version/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/25/google-the-xul-version/">&lt;p&gt;Google has a XUL version of its search page at&lt;br &#x2F;&gt;
&lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;mozilla&#x2F;google.xul&quot;&gt;http:&#x2F;&#x2F;www.google.com&#x2F;mozilla&#x2F;google.xul&lt;&#x2F;a&gt;. Searching takes you to the &quot;normal&quot; HTML pages though.&lt;&#x2F;p&gt;
&lt;p&gt;For the benefit of those of you not using &lt;a href=&quot;http:&#x2F;&#x2F;getfirefox.com&#x2F;&quot;&gt;Mozilla Firefox&lt;&#x2F;a&gt;, here&#x27;s a screencap:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-google-xul.png&quot; alt=&quot;Screenshot of Google&#x27;s XUL search page&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Seen at &lt;a href=&quot;http:&#x2F;&#x2F;www.deftone.com&#x2F;blogzilla&#x2F;archives&#x2F;google_browser.html#3190&quot;&gt;a comment at Blogzilla&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>A furrier Firefox</title>
    <published>2004-09-25T00:51:48+00:00</published>
    <updated>2004-09-25T00:51:48+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/25/a-furrier-firefox/"/>
    <id>https://chuyeow.wtf/2004/09/25/a-furrier-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/25/a-furrier-firefox/">&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;archives&#x2F;000581.html#comments&quot;&gt;The Burning Edge&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;If you check out the attachments in &lt;a href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=260590&quot;&gt;bug 260590 - Updated Images for Windows Installer and About&#x2F;Credit windows&lt;&#x2F;a&gt;, you&#x27;d see that they&#x27;ve made the Firefox logo a little bit furrier.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s the normal and the super-furry version placed side-by-side:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-furrier.png&quot; alt=&quot;Comparison of old and new Firefox logo&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I like it!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Interesting SMS message from my clinic</title>
    <published>2004-09-18T14:48:47+00:00</published>
    <updated>2004-09-18T14:48:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/18/interesting-sms-message-from-my-clinic/"/>
    <id>https://chuyeow.wtf/2004/09/18/interesting-sms-message-from-my-clinic/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/18/interesting-sms-message-from-my-clinic/">&lt;p&gt;Interesting. I got this SMS message this afternoon, apparently from &lt;a href=&quot;http:&#x2F;&#x2F;www.rafflesmedical.com&#x2F;&quot;&gt;Raffles Medical Group&lt;&#x2F;a&gt;, a local medical establishment with a hospital and a chain of clinics.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Thank u for using our clinic recently. Pls share your feedback to help us serve u better. Would u recommend our services to others? Raffles Medical Management&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;I&#x27;m not sure whether this is legitimate (though it almost has to be), and I wonder who&#x27;d reply to a message like this. Should I say &quot;Yes, I would recommend it to my friends and family, but your prices are exhorbitant?&quot; (I visited their hospital&#x27;s outpatient clinic because it was nearest to my office.)&lt;&#x2F;p&gt;
&lt;p&gt;Back to trying not to scratch my rash-covered body...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Half-Life 2 RC, could be out in a few weeks</title>
    <published>2004-09-17T08:59:31+00:00</published>
    <updated>2004-09-17T08:59:31+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/17/half-life-2-release-candidate/"/>
    <id>https://chuyeow.wtf/2004/09/17/half-life-2-release-candidate/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/17/half-life-2-release-candidate/">&lt;p&gt;According to this &lt;a href=&quot;http:&#x2F;&#x2F;www.hl2fallout.com&#x2F;forums&#x2F;index.php?act=ST&amp;f=2&amp;t=6612&quot;&gt;thread over at Half-Life 2 Fallout forums&lt;&#x2F;a&gt;, Gabe Newell has &lt;a href=&quot;http:&#x2F;&#x2F;www.hl2fallout.com&#x2F;forums&#x2F;index.php?showtopic=6610&amp;st=0&quot;&gt;posted&lt;&#x2F;a&gt; saying that a release candidate of Half-Life 2 has been sent to Vivendi Universal, and is pending approval for release. This time around, it isn&#x27;t a hoax:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;For readers doubt the authenticity of this post in light of the gold hoax, the IP does match up this time and many people have received e-mail confirmation from Doug Lombardi and Gabe Newell.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;games&#x2F;half_life_2_release_candidate.php&quot;&gt;Forever Geek&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Forever Geek, have you read it?</title>
    <published>2004-09-17T02:05:50+00:00</published>
    <updated>2004-09-17T02:05:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/17/forever-geek-have-you-read-it/"/>
    <id>https://chuyeow.wtf/2004/09/17/forever-geek-have-you-read-it/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/17/forever-geek-have-you-read-it/">&lt;p&gt;It seems like I am not beyond a little self-promotion now and then. Well, the story goes like this. &lt;a href=&quot;http:&#x2F;&#x2F;9rules.com&#x2F;whitespace&#x2F;&quot;&gt;Paul Scrivens of Whitespace&lt;&#x2F;a&gt; fame also runs &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&quot;&gt;Forever Geek&lt;&#x2F;a&gt;, one of those blog&#x2F;website types that posts news for geeks. Excellent stuff - I&#x27;d been reading it in my feed reader for, like, almost since I knew about it, which is around February when the site first appeared. (Of course, when I said &quot;excellent&quot;, you will soon realize I have a vested interested in saying so.)&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&quot;&gt;Forever Geek&lt;&#x2F;a&gt; was &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;forever_geek&#x2F;looking_for_articles.php&quot;&gt;looking for articles&lt;&#x2F;a&gt; so I submitted &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;articles&#x2F;outfox_outsearch_with_firefox.php&quot;&gt;the search article&lt;&#x2F;a&gt; that was also posted here. That got into Slashdot. Recently, Paul posted that &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&quot;&gt;Forever Geek&lt;&#x2F;a&gt; were &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;forever_geek&#x2F;looking_for_24_crew_members.php&quot;&gt;looking for some new members&lt;&#x2F;a&gt; to join the crew, so I applied - I find these things hard to resist, weirdly. And I got accepted. So now I am a contributing writer on &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&quot;&gt;Forever Geek&lt;&#x2F;a&gt;, which I am unashamedly telling you to add to your reading list (&lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;atom.xml&quot;&gt;Atom feed&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;index.xml&quot;&gt;RSS 2.0 feed&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;This is not my first group blog (well, it is my second). The first was &lt;a href=&quot;http:&#x2F;&#x2F;ensight.org&quot;&gt;ensight.org&lt;&#x2F;a&gt; from the before time (when most of the bloggers were &lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&#x2F;forums&#x2F;&quot;&gt;SitePoint forum staff&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, read &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&quot;&gt;Forever Geek&lt;&#x2F;a&gt;. Yeah.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Thunderbird - changing default email sort order</title>
    <published>2004-09-16T09:05:02+00:00</published>
    <updated>2004-09-16T09:05:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/16/mozilla-thunderbird-changing-default-email-sort-order/"/>
    <id>https://chuyeow.wtf/2004/09/16/mozilla-thunderbird-changing-default-email-sort-order/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/16/mozilla-thunderbird-changing-default-email-sort-order/">&lt;p&gt;&lt;ins&gt;Update: Trä &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;09&#x2F;16&#x2F;mozilla-thunderbird-changing-default-email-sort-order&#x2F;#comment-3215&quot;&gt;pointed to&lt;&#x2F;a&gt; the relevant bug: &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=86845&quot;&gt;Bug 86845 - Sort order for mail&#x2F;news not configurable by default&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In reply to my &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;09&#x2F;14&#x2F;mozilla-thunderbird-08-released&#x2F;&quot;&gt;offer of free Thunderbird technical support&lt;&#x2F;a&gt;, I&#x27;ve gotten a few queries from people asking how to get rid of certain annoyances they have with Thunderbird (out of the box), or whether these peeves have been &quot;fixed&quot;. Some of these I did manage to resolve, the rest turned out to be also my own peeves with Thunderbird that I didn&#x27;t realize I had until I was asked.&lt;&#x2F;p&gt;
&lt;p&gt;One reader asked:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Is there any hidden pref, or any way to make EVERY imap folder sort by Date with newest at the top, instead of the default which is newest at the bottom?&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Exactly the same problem I had (I have 7 IMAP email accounts in Thunderbird at work), exactly the same problem I had tried to solve a long while back (to no avail). I&#x27;ve checked Google, Bugzilla, and Thunderbird&#x27;s pref.js but these didn&#x27;t turn up anything useful. It can&#x27;t be true that no one else finds this a problem. If you know that this can be changed somewhere or has already been logged into Bugzilla, let me know by leaving a nice little comment.&lt;&#x2F;p&gt;
&lt;p&gt;Coincidentally, on the same day, a colleague asked me how to sort messages in a folder by thread &lt;strong&gt;and then&lt;&#x2F;strong&gt; by date. Which of course can be done by clicking on the &quot;Thread&quot; icon (click it again if the chronological order is not in the direction you want). But this also only applies to a &lt;em&gt;single&lt;&#x2F;em&gt; folder which is a pain in the ass if you have to do the same for each other folder.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Things I have to do</title>
    <published>2004-09-15T23:29:09+00:00</published>
    <updated>2004-09-15T23:29:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/15/things-i-have-to-do/"/>
    <id>https://chuyeow.wtf/2004/09/15/things-i-have-to-do/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/15/things-i-have-to-do/">&lt;p&gt;Same old story - too much to do, too little time.&lt;&#x2F;p&gt;
&lt;p&gt;To-do list:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Find out why the virtual server hosting this site is crashing (this explains the intermittent downtime).&lt;&#x2F;li&gt;
&lt;li&gt;Blog an average of 2 entries in 3 days for &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;&quot;&gt;Forever Geek&lt;&#x2F;a&gt;, where I am now a contributing writer.&lt;&#x2F;li&gt;
&lt;li&gt;Study and pass &lt;acronym title=&quot;Sun Certified Java Programmer&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;training.sun.com&#x2F;US&#x2F;catalog&#x2F;courses&#x2F;CX-310-035.html&quot;&gt;SCJP&lt;&#x2F;a&gt;&lt;&#x2F;acronym&gt; exam.&lt;&#x2F;li&gt;
&lt;li&gt;Learn how to play the guitar.&lt;&#x2F;li&gt;
&lt;li&gt;Finish reading the &lt;a href=&quot;http:&#x2F;&#x2F;www.white-wolf.com&#x2F;darkages&#x2F;&quot;&gt;Vampire: Dark Ages&lt;&#x2F;a&gt; Clan Novel series (I&#x27;m currently at &lt;a href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;exec&#x2F;obidos&#x2F;tg&#x2F;detail&#x2F;-&#x2F;1588468321&#x2F;ref=pd_sim_b_1&#x2F;104-5165237-7795929?%5Fencoding=UTF8&amp;v=glance&quot;&gt;Brujah, book 8 of 13&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;Fix a client&#x27;s website. Make some backend changes.&lt;&#x2F;li&gt;
&lt;li&gt;Get more involved in WordPress development. (Anyone know where to get &lt;a href=&quot;http:&#x2F;&#x2F;photomatt.net&#x2F;2004&#x2F;08&#x2F;24&#x2F;wp-on-subversion&#x2F;&quot;&gt;WordPress from Subversion&lt;&#x2F;a&gt;? Or is getting from CVS still current?)&lt;&#x2F;li&gt;
&lt;li&gt;Blog more often here.&lt;&#x2F;li&gt;
&lt;li&gt;Update my About page, and bring back the Archives page.&lt;&#x2F;li&gt;
&lt;li&gt;Get to work on this Mozilla-related website I&#x27;ve been thinking of doing.&lt;&#x2F;li&gt;
&lt;li&gt;Finish watching all this unwatched anime: Berserk, Last EXILE, Kenshin, Kiddy Grade, Hunter X Hunter.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Link exchange between Firefox and Microsoft bloggers</title>
    <published>2004-09-15T09:12:57+00:00</published>
    <updated>2004-09-15T09:12:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/15/link-exchange-between-firefox-and-microsoft-bloggers/"/>
    <id>https://chuyeow.wtf/2004/09/15/link-exchange-between-firefox-and-microsoft-bloggers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/15/link-exchange-between-firefox-and-microsoft-bloggers/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;&quot;&gt;Asa Dotzler&lt;&#x2F;a&gt; of mozilla.org &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;archives&#x2F;006452.html&quot;&gt;tells us&lt;&#x2F;a&gt; how he got a link exchange from &lt;a href=&quot;http:&#x2F;&#x2F;radio.weblogs.com&#x2F;0001011&#x2F;&quot;&gt;Robert Scoble&lt;&#x2F;a&gt;, Microsoft&#x27;s most popular blogger.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;... Robert Scoble, agreed to add a Firefox button to his weblog if I would add a &quot;I recommend installing XPSP2&quot; link to my blog.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Asa has already added the &quot;I recommend installing &lt;a href=&quot;http:&#x2F;&#x2F;www.microsoft.com&#x2F;windowsxp&#x2F;sp2&#x2F;default.mspx&quot;&gt;XPSP2&lt;&#x2F;a&gt;&quot; link to his blog. I wonder what Robert&#x27;s CEO would have to say about this if he does add the Firefox button.&lt;&#x2F;p&gt;
&lt;p&gt;Well, whatever happens, &lt;em&gt;I&lt;&#x2F;em&gt; recommend installing &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;Firefox&lt;&#x2F;a&gt;, especially the freshly baked 1.0 Preview Release (grab the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;download.html?http%3A&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;releases&#x2F;0.10&#x2F;Firefox%20Setup%201.0PR.exe&quot;&gt;Windows installer&lt;&#x2F;a&gt; or a &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;releases&#x2F;0.10&#x2F;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;releases&#x2F;0.10&#x2F;Firefox%201.0PR.zip&quot;&gt;Windows zip package&lt;&#x2F;a&gt; - I assume other platform users will know what they are doing).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Thunderbird 0.8 released</title>
    <published>2004-09-14T22:09:32+00:00</published>
    <updated>2004-09-14T22:09:32+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/14/mozilla-thunderbird-08-released/"/>
    <id>https://chuyeow.wtf/2004/09/14/mozilla-thunderbird-08-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/14/mozilla-thunderbird-08-released/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Mozilla Thunderbird 0.8&lt;&#x2F;a&gt; is out. Time for you to upgrade my favorite email client or to convert if you haven&#x27;t yet. Give it a quick whirl and if you meet any problems, I&#x27;ll be your (free) technical support. Just &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;contact&#x2F;&quot;&gt;drop me a note&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;All the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;07&#x2F;24&#x2F;new-features-in-mozilla-thunderbird-08&quot;&gt;new features I&#x27;ve written about&lt;&#x2F;a&gt; one and a half months back are still there, except for Improved Quick Search.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Alternate stylesheet UI is back in Firefox!</title>
    <published>2004-09-11T13:07:30+00:00</published>
    <updated>2004-09-11T13:07:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/11/alternate-stylesheet-ui-is-back-in-firefox/"/>
    <id>https://chuyeow.wtf/2004/09/11/alternate-stylesheet-ui-is-back-in-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/11/alternate-stylesheet-ui-is-back-in-firefox/">&lt;p&gt;Remember the &lt;a href=&quot;http:&#x2F;&#x2F;webperso.easyconnect.fr&#x2F;danielglazman&#x2F;weblog&#x2F;dotclear&#x2F;?2004&#x2F;08&#x2F;24&#x2F;513-is-firefox-going-nuts-or-what&quot;&gt;big&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;webperso.easyconnect.fr&#x2F;danielglazman&#x2F;weblog&#x2F;dotclear&#x2F;?2004&#x2F;08&#x2F;24&#x2F;513-is-firefox-going-nuts-or-what&quot;&gt;debate &lt;&#x2F;a&gt;over the &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=253722&quot;&gt;removal&lt;&#x2F;a&gt; of the alternate stylesheet UI? Well, the mozilla.org guys have had an Aviary meeting and approved the re-inserting of the alternate stylesheet UI back into Firefox 1.0.&lt;&#x2F;p&gt;
&lt;p&gt;Check out &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=257859#c10&quot;&gt;Asa&#x27;s re-opening&lt;&#x2F;a&gt; of the &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=257859&quot;&gt;Re-insert Alternate Stylesheet UI bug report - bug 257859&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Setting nomination flag for &lt;acronym title=&quot;Preview Release&quot;&gt;PR&lt;&#x2F;acronym&gt; since we&#x27;ll want to get this in before&lt;br &#x2F;&gt;
&lt;acronym title=&quot;Preview Release&quot;&gt;PR&lt;&#x2F;acronym&gt; if we add it back.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Well, I&#x27;m glad it worked out this way. And even better, the new alternate stylesheet UI comes with improvements as well.&lt;&#x2F;p&gt;
&lt;p&gt;The status bar UI looks almost the same, only the wording has been changed from &quot;Basic&quot; to the more understandable &quot;Basic Page Style&quot;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-altss-ui-back.png&quot; alt=&quot;Firefox Alternate Stylesheet UI&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There is also now a &quot;Page View&quot; submenu under the &quot;View&quot; menu that includes a &quot;No Style&quot; option that removes CSS styling from the webpage. Amazingly, this now strips &lt;em&gt;all&lt;&#x2F;em&gt; styles, including styles applied in HTML style attributes and even font tags! Try that on a site that uses font tags like &lt;a href=&quot;http:&#x2F;&#x2F;www.hpb.gov.sg&#x2F;&quot;&gt;HPB&lt;&#x2F;a&gt;. (Before, the font tag styles will still be visible.)&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-altss-ui-menu.png&quot; alt=&quot;Firefox Alternate Stylesheet UI menu&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On a somewhat related note, the &quot;Work Offline&quot; UI has been &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=255654#c19&quot;&gt;re-added&lt;&#x2F;a&gt; for Firefox Preview Release 1. The devs will be working to get it fully (or mostly) functional before the big one-point-oh as well.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>iTunes plugin API - where is it?</title>
    <published>2004-09-09T04:06:40+00:00</published>
    <updated>2004-09-09T04:06:40+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/09/itunes-plugin-api-where-is-it/"/>
    <id>https://chuyeow.wtf/2004/09/09/itunes-plugin-api-where-is-it/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/09/itunes-plugin-api-where-is-it/">&lt;p&gt;Anybody knows where one can find the iTunes (for Windows) plugin API and documentation? There&#x27;re so many plugins available but I have no idea how the plugin authors even got started coding them - documentation on &lt;a href=&quot;http:&#x2F;&#x2F;apple.com&#x2F;&quot;&gt;apple.com&lt;&#x2F;a&gt; is nearly non-existent.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: &lt;a href=&quot;http:&#x2F;&#x2F;developer.apple.com&#x2F;sdk&#x2F;#iTunesCOM&quot;&gt;Found it&lt;&#x2F;a&gt;. Thanks &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;09&#x2F;09&#x2F;itunes-plugin-api-where-is-it&#x2F;#comment-3177&quot;&gt;sryo&lt;&#x2F;a&gt;!&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Thunderbird &quot;Purge&quot; button extension</title>
    <published>2004-09-08T19:49:45+00:00</published>
    <updated>2004-09-08T19:49:45+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/08/thunderbird-purge-button-extension/"/>
    <id>https://chuyeow.wtf/2004/09/08/thunderbird-purge-button-extension/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/08/thunderbird-purge-button-extension/">&lt;p&gt;I have &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;02&#x2F;thunderbird-why-it-needs-a-purge-buttonshortcut&#x2F;&quot;&gt;said before&lt;&#x2F;a&gt; that &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Mozilla Thunderbird&lt;&#x2F;a&gt; needs a &quot;Purge&quot; button equivalent to that in Outlook Express. In the time since, I have been using Thunderbird despite &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;02&#x2F;thunderbird-why-it-needs-a-purge-buttonshortcut&#x2F;&quot;&gt;saying that I&#x27;d stay away until a &quot;Purge&quot; button is implemented&lt;&#x2F;a&gt;. Why? I guess because it didn&#x27;t seem like a Purge button was going to be implemented anytime soon (and also because of increased security and protection from OE-targeted worms and viruses).&lt;&#x2F;p&gt;
&lt;p&gt;A commentor reminded me about the existence of an &lt;a href=&quot;http:&#x2F;&#x2F;extensionroom.mozdev.org&#x2F;more-info&#x2F;purge&quot;&gt;extension that gives you a &quot;Purge&quot; button&lt;&#x2F;a&gt;. I say &quot;reminded&quot; because I&#x27;d seen this extension before in the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;&quot;&gt;MozillaZine forums&lt;&#x2F;a&gt; way back in the early months of this year. Somehow I forgot all about it since then and have been frantically right-clicking on each folder and selecting &quot;Compact This folder&quot;. Which kinda sucked because that&#x27;s a whole lot of clicking going on especially with multiple accounts. Now I can do the same with just 1 click (per folder).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;tb-purge-delete-junk.png&quot; alt=&quot;Thunderbird Purge and Delete Junk! buttons&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And couple that with the &lt;a href=&quot;http:&#x2F;&#x2F;update.mozilla.org&#x2F;extensions&#x2F;moreinfo.php?id=106&amp;vid=243&quot;&gt;Buttons! extension&lt;&#x2F;a&gt;, it&#x27;s so much easier to get rid of junk mail. 2 clicks and junk mail is purged. These buttons really should be in Thunderbird itself.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>20 &quot;sponsored&quot; Gmail invites to give away</title>
    <published>2004-09-08T01:41:58+00:00</published>
    <updated>2004-09-08T01:41:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/08/20-sponsored-gmail-invites-to-give-away/"/>
    <id>https://chuyeow.wtf/2004/09/08/20-sponsored-gmail-invites-to-give-away/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/08/20-sponsored-gmail-invites-to-give-away/">&lt;p&gt;&lt;ins&gt;Update: Sandip has 12 more invites.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;del&gt;Update: Sandip has given away all his invites! To date he has given away all 79 of them (from multiple Gmail accounts). Nice. Thanks Sandip for you generosity!&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A kind reader by the name of Sandip Bhattachary emailed me this today:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;i have 20 gmail invites to give away. I actually have 7 gmail accounts myself. Receving so many invites per day. I have given this to everybody. Please post my thread in your website that I want to give away gmail invites to those who email me at the above mentioned email address. This is a serious email.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;You can get him at bhattacharyas AT gmail DOT com.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks Sandip.&lt;&#x2F;p&gt;
&lt;p&gt;This also signals that Gmail invites are now actually undesirable and a burden on the soul. (Just kidding, Sandip.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Why not to use MySQL</title>
    <published>2004-09-06T21:57:21+00:00</published>
    <updated>2004-09-06T21:57:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/06/why-not-to-use-mysql/"/>
    <id>https://chuyeow.wtf/2004/09/06/why-not-to-use-mysql/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/06/why-not-to-use-mysql/">&lt;p&gt;MySQL probably is the lowest common denominator for a &lt;acronym title=&quot;Relational Database Management System&quot;&gt;RDBMS&lt;&#x2F;acronym&gt; in the webhosting world - you can&#x27;t leave &#x2F;home without it. This blog wouldn&#x27;t exist without MySQL (someday WordPress will be database-independent). Sometimes I hear people say MySQL isn&#x27;t a real RDBMS, or that it lacks certain features that causes it to suck&amp;trade;. I work extensively with MySQL and there are times when I wish for stuff like referential integrity (available with InnoDB tables, but most hosts don&#x27;t provide it) so I don&#x27;t have to code constraint checks in the application. I wish for transactions (again supported by InnoDB). I wish for a PL&#x2F;SQL equivalent.&lt;&#x2F;p&gt;
&lt;p&gt;Now, these guys, they&#x27;ve got &lt;a href=&quot;http:&#x2F;&#x2F;sql-info.de&#x2F;mysql&#x2F;gotchas.html&quot;&gt;MySQL gotchas&lt;&#x2F;a&gt; and an &lt;a href=&quot;http:&#x2F;&#x2F;vulcanus.its.tudelft.nl&#x2F;~acm&#x2F;got&#x2F;antimysql.php&quot;&gt;anti-MySQL list&lt;&#x2F;a&gt; listing some niggly inconsistencies and general bad behavior in MySQL. And after reading that, I&#x27;ll never trust what MySQL does to my data again (silently change my data would you, mysqld?).&lt;&#x2F;p&gt;
&lt;p&gt;(Yes, the entry title is grammatically incorrect on purpose.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>A Girl&#x27;s Guide to Geek Guys</title>
    <published>2004-09-06T21:43:17+00:00</published>
    <updated>2004-09-06T21:43:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/06/a-girls-guide-to-geek-guys/"/>
    <id>https://chuyeow.wtf/2004/09/06/a-girls-guide-to-geek-guys/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/06/a-girls-guide-to-geek-guys/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.completeevil.com&#x2F;geek.html&quot;&gt;A Girl&#x27;s Guide to Geek Guys&lt;&#x2F;a&gt; - &quot;They are generally available. Other women will tend not to steal them. They can fix things. Your parents will love them. They&#x27;re smart.&quot; Hey I&#x27;m a geek ;-)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MT Friend or Foe hack</title>
    <published>2004-09-06T21:34:58+00:00</published>
    <updated>2004-09-06T21:34:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/06/mt-friend-or-foe-hack/"/>
    <id>https://chuyeow.wtf/2004/09/06/mt-friend-or-foe-hack/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/06/mt-friend-or-foe-hack/">&lt;p&gt;Ever since Movable Type started to have the comments redirection feature (since &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;docs&#x2F;mtchanges.html#2.66%20(2004.01.13)&quot;&gt;version 2.66&lt;&#x2F;a&gt;), comment authors&#x27; URLs have been redirected via a simple redirection script that prevents them from appearing directly on blog entries. This (partially) solved the problem of comment spammers because links from comments no longer benefit from backlinks that add to their &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;technology&#x2F;&quot;&gt;PageRank&lt;&#x2F;a&gt;. However, legitimate commentors also have their URLs redirected, which to me seems just quite a bit unfriendly.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;&quot;&gt;Neil Turner&lt;&#x2F;a&gt; has worked around this with his aptly named &lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;2004&#x2F;Sep&#x2F;05&#x2F;friend_or_foe.html&quot;&gt;Friend or foe hack&lt;&#x2F;a&gt; for &lt;acronym title=&quot;Movable Type&quot;&gt;MT&lt;&#x2F;acronym&gt;. A simple but still neat bit of PHP (and a good example of MT&#x27;s excellent template tags). If you use &lt;acronym title=&quot;Movable Type&quot;&gt;MT&lt;&#x2F;acronym&gt; and want to &quot;reward&quot; your legitimate commentors, you won&#x27;t want to miss this.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Upgraded to PHP5 on Gentoo</title>
    <published>2004-09-06T09:21:47+00:00</published>
    <updated>2004-09-06T09:21:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/06/upgraded-to-php5-on-gentoo/"/>
    <id>https://chuyeow.wtf/2004/09/06/upgraded-to-php5-on-gentoo/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/06/upgraded-to-php5-on-gentoo/">&lt;p&gt;Yup I just upgraded from PHP4.3.8 to PHP5.0.1 on the Gentoo &lt;acronym title=&quot;Virtual Private Server&quot;&gt;VPS&lt;&#x2F;acronym&gt; hosting this weblog. It went rather smoothly, except for an oversight where I actually forgot to compile PHP with session support (and had to re-compile it). Just unmerge the existing PHP and mod_php packages, and emerge them again from ebuilds.&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;emerge unmerge php mod_php&lt;br &#x2F;&gt;
emerge -pv &#x2F;usr&#x2F;portage&#x2F;dev-php&#x2F;php&#x2F;php-5.0.1.ebuild&lt;br &#x2F;&gt;
USE=&quot;curl session mysql postgres zlib ldap&quot; emerge -v &#x2F;usr&#x2F;portage&#x2F;dev-php&#x2F;php&#x2F;php-5.0.1.ebuild&lt;br &#x2F;&gt;
emerge -pv &#x2F;usr&#x2F;portage&#x2F;dev-php&#x2F;mod_php&#x2F;mod_php-5.0.1.ebuild&lt;br &#x2F;&gt;
USE=&quot;curl session mysql postgres zlib ldap&quot; emerge -v &#x2F;usr&#x2F;portage&#x2F;dev-php&#x2F;mod_php&#x2F;mod_php-5.0.1.ebuild&lt;&#x2F;div&gt;
&lt;p&gt;No configuration needed beyond commenting out the LoadModule directive (for PHP4) in the Apache configuration file and changing the Apache startup options (in &#x2F;etc&#x2F;conf.d&#x2F;apache2):&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;#APACHE2_OPTS=&quot;-D SSL -D PHP4&quot;&lt;br &#x2F;&gt;
APACHE2_OPTS=&quot;-D SSL -D PHP5&quot;&lt;&#x2F;div&gt;
&lt;p&gt;A restart of Apache2 is all that&#x27;s left.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not sure if I left any essential stuff out in the USE flags (which roughly translates into configure options) I used so if anyone would be so kind to skim through my &lt;a href=&quot;http:&#x2F;&#x2F;codefront.net&#x2F;phpinfo.php&quot;&gt;phpinfo()&lt;&#x2F;a&gt; and let me know, I&#x27;d be grateful and will be sure to return the favor. Some of the USE flags&#x2F;configure options are pretty self-explanatory but I have no idea what the rest really do. What does excluding the truetype flag mean? Does it mean I don&#x27;t get TrueType font support when dynamically generating images (with gd)? What about the pcre flag? If I don&#x27;t compile with pcre, does that mean no preg_* functions for me? Point me to an explanatory page please (I have been looking).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla in front in Google</title>
    <published>2004-09-03T01:56:38+00:00</published>
    <updated>2004-09-03T01:56:38+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/03/mozilla-in-front-in-google/"/>
    <id>https://chuyeow.wtf/2004/09/03/mozilla-in-front-in-google/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/03/mozilla-in-front-in-google/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;&quot;&gt;Mozilla.org&lt;&#x2F;a&gt; is on top when you Google for &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=browser&quot;&gt;browser&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=1&quot;&gt;1&lt;&#x2F;a&gt;. How neat is that? (Not that anybody&#x27;s going to search for &quot;1&quot;, but &quot;browser&quot; is pretty good.)  Via &lt;a href=&quot;http:&#x2F;&#x2F;annevankesteren.nl&#x2F;archives&#x2F;2004&#x2F;09&#x2F;mozilla-1&quot;&gt;Anne van Kesteren&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Line of the month</title>
    <published>2004-09-02T00:05:34+00:00</published>
    <updated>2004-09-02T00:05:34+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/02/line-of-the-month/"/>
    <id>https://chuyeow.wtf/2004/09/02/line-of-the-month/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/02/line-of-the-month/">&lt;blockquote&gt;If you want to destroy my sweater&lt;br &#x2F;&gt;
Hold this thread as I walk away&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;From &lt;a href=&quot;http:&#x2F;&#x2F;www.sing365.com&#x2F;music&#x2F;lyric.nsf&#x2F;Undone-the-Sweater-Song-lyrics-Weezer&#x2F;8F1107A14DEBBC8F482568B60016947C&quot;&gt;Undone - the sweater song&lt;&#x2F;a&gt;. That&#x27;s one of the most loaded&#x2F;quirky&#x2F;semi-humorous lines I&#x27;ve heard in a while.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, &lt;a href=&quot;http:&#x2F;&#x2F;www.audioscrobbler.com&#x2F;&quot;&gt;AudioScrobbler&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.audioscrobbler.com&#x2F;user&#x2F;chuyeow&#x2F;&quot;&gt;tells me&lt;&#x2F;a&gt; I&#x27;m listening to &lt;del&gt;too much Weezer&lt;&#x2F;del&gt; Weezer quite a bit (though AudioScrobbler erased my music entries once before so that&#x27;s hardly an accurate list). It also tells me:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Your plugin reported a submission error: Your plugin (itw version 0.0.4) is banned. Please contact the plugin author for an updated version&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Any idea what that is or anyone have the same error? I&#x27;m using the iTunes plugin - what else?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;This is because the iTunes plugin is making multiple submissions while iTunes is &lt;em&gt;paused&lt;&#x2F;em&gt;. See the relevant &lt;a href=&quot;http:&#x2F;&#x2F;www.audioscrobbler.com&#x2F;forum&#x2F;827&#x2F;_&#x2F;6688&quot;&gt;thread here&lt;&#x2F;a&gt;. You can grab the latest plugin from &lt;a href=&quot;http:&#x2F;&#x2F;www.xurble.org&#x2F;iScrobblerWin_0_0_5.exe&quot;&gt;http:&#x2F;&#x2F;www.xurble.org&#x2F;iScrobblerWin_0_0_5.exe&lt;&#x2F;a&gt; - it&#x27;s not yet official, but it works. (Thanks Suman!)&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;(Wondering what AudioScrobbler is? Go read the &lt;a href=&quot;http:&#x2F;&#x2F;www.audioscrobbler.com&#x2F;help&#x2F;&quot;&gt;AudioScrobbler Help page&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>What does it take to get on Planet Mozilla?</title>
    <published>2004-09-01T23:09:02+00:00</published>
    <updated>2004-09-01T23:09:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/01/what-does-it-take-to-get-on-planet-mozilla/"/>
    <id>https://chuyeow.wtf/2004/09/01/what-does-it-take-to-get-on-planet-mozilla/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/01/what-does-it-take-to-get-on-planet-mozilla/">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;planet.mozilla.org&#x2F;&quot;&gt;Planet Mozilla&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;feedhouse.mozillazine.org&#x2F;&quot;&gt;mozillaZine feedHouse&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;gemal.dk&#x2F;mozilla&#x2F;blogupdates.html&quot;&gt;Blogupdates&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Which one of those should one read&#x2F;subscribe to, what&#x27;s the difference, and what&#x27;s the criteria for getting onto Planet Mozilla?&lt;&#x2F;p&gt;
&lt;p&gt;(Before you start to wonder whether these are angsty&#x2F;whiny questions, let me say that they are not.)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>To Matt Gough</title>
    <published>2004-09-01T22:44:06+00:00</published>
    <updated>2004-09-01T22:44:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/01/to-matt-gough/"/>
    <id>https://chuyeow.wtf/2004/09/01/to-matt-gough/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/01/to-matt-gough/">&lt;p&gt;To Matt Gough, the guy I&#x27;ve been trying to contact and send a Gmail invite to:&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been trying to tell you that the Gmail invites that I&#x27;ve sent to you don&#x27;t seem to get through (nor do my emails from my Gmail account, apparently). I&#x27;d sent you one before and one just today. Let me know if you don&#x27;t see them (then I can just pass you the signup link).&lt;&#x2F;p&gt;
&lt;p&gt;Figured this was the best way to get your attention when I tried, in vain, to post a comment on your weblog (it says &quot;registration is required&quot; and I couldn&#x27;t find a registration link - what is that? TypeKey?).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Make your muvee contest</title>
    <published>2004-09-01T16:31:14+00:00</published>
    <updated>2004-09-01T16:31:14+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/01/make-your-muvee-contest/"/>
    <id>https://chuyeow.wtf/2004/09/01/make-your-muvee-contest/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/01/make-your-muvee-contest/">&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;www.muvee.com&#x2F;&quot;&gt;company&lt;&#x2F;a&gt; just launched the &lt;a href=&quot;http:&#x2F;&#x2F;www.muvee.com&#x2F;website&#x2F;mvcmp_main.php&quot;&gt;&quot;My Vacation muvee&quot; contest&lt;&#x2F;a&gt;. Interested in a real simple piece of video editing software? Check out the &lt;a href=&quot;http:&#x2F;&#x2F;www.muvee.com&#x2F;website&#x2F;firstvisit.php&quot;&gt;&quot;I&#x27;m new&quot;&lt;&#x2F;a&gt; page to find out more.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Movable Type 3.1 released</title>
    <published>2004-09-01T14:31:10+00:00</published>
    <updated>2004-09-01T14:31:10+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/01/movable-type-31-released/"/>
    <id>https://chuyeow.wtf/2004/09/01/movable-type-31-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/01/movable-type-31-released/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;news&#x2F;2004&#x2F;08&#x2F;movable_type_31_launched.shtml&quot;&gt;Movable Type 3.1 launched&lt;&#x2F;a&gt; - since &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;08&#x2F;23&#x2F;movabletype-to-wordpress&#x2F;&quot;&gt;the switch&lt;&#x2F;a&gt;, life is still good with WordPress. I do miss MT&#x27;s flexible templating (like &lt;a href=&quot;http:&#x2F;&#x2F;hicksdesign.co.uk&#x2F;journal&#x2F;563&#x2F;textpattern-2-months-on&quot;&gt;Jon Hicks&lt;&#x2F;a&gt;), but the rest of it works great. WordPress devs are working on the templating issue though. As for me, I submitted a bad patch to WordPress - not a good start. Via &lt;a href=&quot;http:&#x2F;&#x2F;photomatt.net&#x2F;2004&#x2F;08&#x2F;31&#x2F;movable-type-31&#x2F;&quot;&gt;Photomatt&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Don&#x27;t know what to do with Gmail invites</title>
    <published>2004-09-01T14:20:15+00:00</published>
    <updated>2004-09-01T14:20:15+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/09/01/dont-know-what-to-do-with-gmail-invites/"/>
    <id>https://chuyeow.wtf/2004/09/01/dont-know-what-to-do-with-gmail-invites/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/09/01/dont-know-what-to-do-with-gmail-invites/">&lt;p&gt;So everyone has started giving away Gmail invites again because Google has started giving them out again. I don&#x27;t really know what to do with them because most people would have one already by now.&lt;&#x2F;p&gt;
&lt;p&gt;Well, at the risk of being uncool and mainstream, I&#x27;m going to give 4 of them away to readers. Drop me an email or leave a comment.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;For a start, I&#x27;ll be giving them only to people whom I&#x27;ve heard from before.&lt;&#x2F;strong&gt; Just in case. If all 10 (OK so Bloglines tells me there are 296 subscribers to my RSS feed) of you already have a Gmail account, I&#x27;ll waive this and give to just about anyone.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Opera 7.60 Preview 1 for Windows</title>
    <published>2004-08-29T03:25:10+00:00</published>
    <updated>2004-08-29T03:25:10+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/29/opera-760-preview-1-for-windows/"/>
    <id>https://chuyeow.wtf/2004/08/29/opera-760-preview-1-for-windows/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/29/opera-760-preview-1-for-windows/">&lt;p&gt;You can now (actually, since August 24) get &lt;a href=&quot;http:&#x2F;&#x2F;snapshot.opera.com&#x2F;windows&#x2F;w760p1.html&quot;&gt;Opera 7.60 Preview 1 for Windows&lt;&#x2F;a&gt;. Cool new features: something called Medium-Screen Rendering that &quot;reformats pages so they fit better on smaller screens&quot;, and speech-enabled browsing via &lt;a href=&quot;http:&#x2F;&#x2F;www.voicexml.org&#x2F;specs&#x2F;multimodal&#x2F;x+v&#x2F;12&#x2F;spec.html&quot;&gt;XHTML+Voice 1.2&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>You are being served by Apache2 on Gentoo Linux</title>
    <published>2004-08-29T02:07:11+00:00</published>
    <updated>2004-08-29T02:07:11+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/29/apache2-server-on-gentoo-linux/"/>
    <id>https://chuyeow.wtf/2004/08/29/apache2-server-on-gentoo-linux/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/29/apache2-server-on-gentoo-linux/">&lt;p&gt;&lt;ins&gt;OK I got Postfix and courier-imap up and running now. Plus, switching to a 2.6 kernel was as simple as changing it in the web-based Linode Platform manager and rebooting. Just select a few things and click a few form buttons. Very nice.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The migration to the new server didn&#x27;t go quite as smoothly as I&#x27;d hoped it to be, but all is good now and you are currently being served this webpage&#x2F;rss feed by &lt;a href=&quot;http:&#x2F;&#x2F;httpd.apache.org&#x2F;&quot;&gt;Apache2&lt;&#x2F;a&gt; web server running on a &lt;a href=&quot;http:&#x2F;&#x2F;gentoo.org&#x2F;&quot;&gt;Gentoo Linux&lt;&#x2F;a&gt; box.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;apache-signature.png&quot; alt=&quot;Apache signature of new server at Linode.com&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m using this Virtual Private Server (VPS) setup offered by &lt;a href=&quot;http:&#x2F;&#x2F;www.linode.com&#x2F;&quot;&gt;Linode.com&lt;&#x2F;a&gt; which is an unmanaged &lt;a href=&quot;http:&#x2F;&#x2F;user-mode-linux.sourceforge.net&#x2F;&quot;&gt;User Mode Linux&lt;&#x2F;a&gt; hosting solution. Which means I&#x27;ve had to take a crash course in system administration in the attempt to transform a base Linux system with minimal services into a production web server. It&#x27;s hard because of the esoteric configuration that Linux is so notorious for, though it was still easier than I thought, and very satisfying when things progressed from a state of borkage to reasonable functionality. Gentoo&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.gentoo.org&#x2F;doc&#x2F;en&#x2F;portage-manual.xml&quot;&gt;Portage&lt;&#x2F;a&gt; probably played a good hand in making things easy. emerge, emerge, emerge.&lt;&#x2F;p&gt;
&lt;p&gt;I still need to set up a email services (the whole kahuna - &lt;acronym title=&quot;Mail Transport Agent&quot;&gt;MTA&lt;&#x2F;acronym&gt;, &lt;acronym title=&quot;Local Delivery Agent&quot;&gt;LDA&lt;&#x2F;acronym&gt;, &lt;acronym title=&quot;Access Agent&quot;&gt;AA&lt;&#x2F;acronym&gt;) - any advice on this area would be very nice.&lt;&#x2F;p&gt;
&lt;p&gt;More on Gentoo, system administration, User Mode Linux, and Linode later.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>How to fold a shirt in 3 seconds</title>
    <published>2004-08-29T01:30:26+00:00</published>
    <updated>2004-08-29T01:30:26+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/29/how-to-fold-a-shirt-in-3-seconds/"/>
    <id>https://chuyeow.wtf/2004/08/29/how-to-fold-a-shirt-in-3-seconds/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/29/how-to-fold-a-shirt-in-3-seconds/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.howtofoldashirt.net&#x2F;&quot;&gt;How to fold a shirt.&lt;&#x2F;a&gt; Watch the video. I need to learn how to do this.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Setting up AWStats on Gentoo</title>
    <published>2004-08-28T22:06:14+00:00</published>
    <updated>2004-08-28T22:06:14+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/28/setting-up-awstats-on-gentoo/"/>
    <id>https://chuyeow.wtf/2004/08/28/setting-up-awstats-on-gentoo/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/28/setting-up-awstats-on-gentoo/">&lt;p&gt;Some notes to myself on setting up &lt;a href=&quot;http:&#x2F;&#x2F;awstats.sourceforge.net&#x2F;&quot;&gt;AWStats&lt;&#x2F;a&gt; on a &lt;a href=&quot;http:&#x2F;&#x2F;www.gentoo.org&#x2F;&quot;&gt;Gentoo&lt;&#x2F;a&gt; box.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First, emerge the awstats package. I added the &quot;vhosts&quot; USE flag because it&#x27;s listed as a USE flag that awstats reads, and I need support for virtual hosts (although I don&#x27;t know for sure what it does - I reckon it has something to do with the &lt;span class=&quot;monospaced&quot;&gt;webapps-config&lt;&#x2F;span&gt; package that&#x27;s a dependency).&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;emerge -pv awstats&lt;br &#x2F;&gt;USE=&quot;vhosts&quot; emerge awstats&lt;&#x2F;div&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Don&#x27;t&lt;&#x2F;strong&gt; use the webapp-config program that the emerge process tells you to use at the end unless you know what you are doing. There have been reports that it isn&#x27;t exactly ideal in the &lt;a href=&quot;http:&#x2F;&#x2F;forums.gentoo.org&#x2F;&quot;&gt;Gentoo forums&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Make a symbolic link to the Apache configuration directives we need to add to Apache in a convenient location. You may also want to make the file owner-writable (&lt;span class=&quot;monospaced&quot;&gt;chmod u+w&lt;&#x2F;span&gt;) since it&#x27;s read-only.&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;ln -s &#x2F;usr&#x2F;share&#x2F;webapps&#x2F;awstats&#x2F;6.1&#x2F;postinst-en.txt &#x2F;etc&#x2F;apache2&#x2F;conf&#x2F;awstats.conf&lt;&#x2F;div&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;I had to add this bit to &lt;span class=&quot;monospaced&quot;&gt;&#x2F;etc&#x2F;apache2&#x2F;conf&#x2F;awstats.conf&lt;&#x2F;span&gt; prevent a 403 error when accessing the ScriptAliased &#x2F;awstats directory.&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;&amp;lt;directory &quot;&#x2F;usr&#x2F;share&#x2F;webapps&#x2F;awstats&#x2F;6.1&#x2F;hostroot&#x2F;cgi-bin&#x2F;&quot;&amp;gt;&lt;br &#x2F;&gt;Options +ExecCGI +FollowSymLinks&lt;br &#x2F;&gt;AllowOverride None&lt;br &#x2F;&gt;Order allow,deny&lt;br &#x2F;&gt;Allow from all&amp;lt;&#x2F;directory&amp;gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Include the AWStats-required configuration directives in the main Apache config file (mine&#x27;s &#x2F;etc&#x2F;apache2&#x2F;conf&#x2F;apache2.conf).&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;Include conf&#x2F;awstats.conf&lt;&#x2F;div&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;I&#x27;m using name-based virtual hosts, with logs for each of them (they are in the included vhosts&#x2F;vhosts.conf file). AWStats by default parses the &lt;a href=&quot;http:&#x2F;&#x2F;httpd.apache.org&#x2F;docs-2.0&#x2F;logs.html#combined&quot;&gt;Combined log format&lt;&#x2F;a&gt; and this is what I specify for my access logs as well. An example VirtualHost directive:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;br &#x2F;&gt;ServerName chuyeow.wtf&lt;br &#x2F;&gt;DocumentRoot &#x2F;www&#x2F;codefront.net&#x2F;htdocs&#x2F;blog&lt;br &#x2F;&gt;ServerPath &#x2F;blog&lt;br &#x2F;&gt;&lt;strong&gt;CustomLog &#x2F;var&#x2F;log&#x2F;apache2&#x2F;chuyeow.wtf&#x2F;access_log combined&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;ErrorLog &#x2F;var&#x2F;log&#x2F;apache2&#x2F;chuyeow.wtf&#x2F;error_log&lt;br &#x2F;&gt;&amp;lt;&#x2F;VirtualHost&amp;gt;&lt;&#x2F;div&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Now, create an AWStats configuration file for each virtual-host.&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;cp &#x2F;etc&#x2F;awstats&#x2F;awstats.model.conf &#x2F;etc&#x2F;awstats&#x2F;awstats.chuyeow.wtf.conf&lt;&#x2F;div&gt;
&lt;p&gt;Notice that the configuration file name is of the format &quot;awstats.&lt;em&gt;domain.tld&lt;&#x2F;em&gt;.conf&quot;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Edit the configuration file (&#x2F;etc&#x2F;awstats&#x2F;awstats.chuyeow.wtf.conf). The important things to change are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;LogFile (point this to your access log)&lt;&#x2F;li&gt;
&lt;li&gt;SiteDomain (your site&#x27;s domain name)&lt;&#x2F;li&gt;
&lt;li&gt;HostAliases (any aliases your site may have)&lt;&#x2F;li&gt;
&lt;li&gt;DirData (AWStats database where your results will be stored. This has to be writable by the Apache user if the AllowToUpdateStatsFromBrowser option is turned on.)&lt;&#x2F;li&gt;
&lt;li&gt;DirCgi (AWStats CGI directory)&lt;&#x2F;li&gt;
&lt;li&gt;DirIcons (AWStats icons directory)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Restart Apache.&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;&#x2F;etc&#x2F;init.d&#x2F;apache2 restart&lt;&#x2F;div&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;You can access AWStats from www.example.com&#x2F;awstats&#x2F;awstats.pl?config=www.example.com.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Set password-protection for the AWStats directory.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Run AWStats from the command line to update it. You&#x27;d likely want to set up a cron job for this.&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;&#x2F;usr&#x2F;bin&#x2F;awstats_updateall.pl now -awstatsprog=&#x2F;usr&#x2F;share&#x2F;webapps&#x2F;awstats&#x2F;6.1&#x2F;hostroot&#x2F;cgi-bin&#x2F;awstats.pl -configdir=&#x2F;etc&#x2F;awstats&#x2F;&lt;&#x2F;div&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Useful links:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;awstats.sourceforge.net&#x2F;docs&#x2F;awstats_setup.html&quot;&gt;AWStats documentation on installation&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Half-Life 2 going gold on Monday</title>
    <published>2004-08-28T18:04:04+00:00</published>
    <updated>2004-08-28T18:04:04+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/28/half-life-2-going-gold-on-monday/"/>
    <id>https://chuyeow.wtf/2004/08/28/half-life-2-going-gold-on-monday/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/28/half-life-2-going-gold-on-monday/">&lt;p&gt;Gabe Newell, head of Valve Software, posts that Half-Life 2 is going gold on Monday, as &lt;a href=&quot;http:&#x2F;&#x2F;www.gamespot.com&#x2F;news&#x2F;2004&#x2F;08&#x2F;27&#x2F;news_6106035.html&quot;&gt;GameSpot reports&lt;&#x2F;a&gt;. We could see &lt;acronym title=&quot;Half-Life 2&quot;&gt;HL2&lt;&#x2F;acronym&gt; on shelves in a week!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Wired Firefox, Tired Explorer</title>
    <published>2004-08-28T01:44:27+00:00</published>
    <updated>2004-08-28T01:44:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/28/wired-firefox-tired-explorer/"/>
    <id>https://chuyeow.wtf/2004/08/28/wired-firefox-tired-explorer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/28/wired-firefox-tired-explorer/">&lt;p&gt;Seen on Wired.com: &lt;a href=&quot;http:&#x2F;&#x2F;www.wired.com&#x2F;wired&#x2F;archive&#x2F;12.09&#x2F;start.html?pg=12&quot;&gt;Wired (Firefox) | Tired (Mozilla) | Expired (Explorer)&lt;&#x2F;a&gt; (via &lt;a href=&quot;http:&#x2F;&#x2F;www.actsofvolition.com&#x2F;archives&#x2F;2004&#x2F;august&#x2F;firefoxwired&quot;&gt;Steve Garrity&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Stupid mistake - fix in 9 hours time</title>
    <published>2004-08-27T00:21:47+00:00</published>
    <updated>2004-08-27T00:21:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/27/stupid-mistake-fix-in-9-hours-time/"/>
    <id>https://chuyeow.wtf/2004/08/27/stupid-mistake-fix-in-9-hours-time/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/27/stupid-mistake-fix-in-9-hours-time/">&lt;p&gt;I made a stupid mistake while backing up my files on the old server and uploading them to the new one. That&#x27;s the problem when you have 2 similar SFTP windows (1 for uploading, 1 for downloading) and taking part in multiple chat sessions. You tend to not notice that you&#x27;re uploading to the server you&#x27;re supposed to be &lt;em&gt;downloading&lt;&#x2F;em&gt; from.&lt;&#x2F;p&gt;
&lt;p&gt;So this is the default WordPress template you&#x27;re seeing right now. I remember making another backup copy at work so in 9 hours time, fingers crossed, things will be back to normal.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>No alternate stylesheet switcher in Firefox 1.0</title>
    <published>2004-08-25T20:02:03+00:00</published>
    <updated>2004-08-25T20:02:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/25/no-alternate-stylesheet-switcher-in-firefox-10/"/>
    <id>https://chuyeow.wtf/2004/08/25/no-alternate-stylesheet-switcher-in-firefox-10/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/25/no-alternate-stylesheet-switcher-in-firefox-10/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=253722&quot;&gt;Bug 253722: remove alternate stylesheet UI&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;webperso.easyconnect.fr&#x2F;danielglazman&#x2F;weblog&#x2F;&quot;&gt;Daniel Glazman&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;glazman.org&#x2F;weblog&#x2F;dotclear&#x2F;index.php?2004&#x2F;08&#x2F;24&#x2F;513-is-firefox-going-nuts-or-what&quot;&gt;couldn&#x27;t believe it&lt;&#x2F;a&gt; and suggests that such &lt;a href=&quot;http:&#x2F;&#x2F;glazman.org&#x2F;weblog&#x2F;dotclear&#x2F;index.php?2004&#x2F;08&#x2F;25&#x2F;517-firefox-10-advanced-andor-incomplete-features&quot;&gt;incomplete features be enabled&#x2F;disabled via a user option&lt;&#x2F;a&gt;. Yes, please.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=118119&quot;&gt;Join the discussion.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>JMF applet without JMF installed?</title>
    <published>2004-08-25T19:37:49+00:00</published>
    <updated>2004-08-25T19:37:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/25/jmf-applet-without-jmf-installed/"/>
    <id>https://chuyeow.wtf/2004/08/25/jmf-applet-without-jmf-installed/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/25/jmf-applet-without-jmf-installed/">&lt;p&gt;A long shot, but do any of you Java programmers think an applet that uses &lt;a href=&quot;http:&#x2F;&#x2F;java.sun.com&#x2F;products&#x2F;java-media&#x2F;jmf&#x2F;index.jsp&quot;&gt;&lt;acronym title=&quot;Java Media Framework&quot;&gt;JMF&lt;&#x2F;acronym&gt;&lt;&#x2F;a&gt; can be deployed and run on a client that &lt;em&gt;doesn&#x27;t&lt;&#x2F;em&gt; have &lt;acronym title=&quot;Java Media Framework&quot;&gt;JMF&lt;&#x2F;acronym&gt; installed?&lt;&#x2F;p&gt;
&lt;p&gt;I think the chances would be higher if instead of an applet, a Java Web Start application was used instead. Bundling the JMF libraries could work, but there hasn&#x27;t been any report of success as far as I can find. (It is &lt;a href=&quot;http:&#x2F;&#x2F;saloon.javaranch.com&#x2F;cgi-bin&#x2F;ubb&#x2F;ultimatebb.cgi?ubb=get_topic&amp;f=45&amp;t=001407&quot;&gt;possible with a full-blown Java application though&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
&lt;p&gt;Any leads at all would be good. In the meantime I will be trying this out myself.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Better VPS hosts according to WebHostingTalk</title>
    <published>2004-08-24T21:05:44+00:00</published>
    <updated>2004-08-24T21:05:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/24/better-vps-hosts-according-to-webhostingtalk/"/>
    <id>https://chuyeow.wtf/2004/08/24/better-vps-hosts-according-to-webhostingtalk/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/24/better-vps-hosts-according-to-webhostingtalk/">&lt;p&gt;I have been looking around for &lt;acronym title=&quot;Virtual Private Server&quot;&gt;VPS&lt;&#x2F;acronym&gt; hosting and reading customer reviews at &lt;a href=&quot;http:&#x2F;&#x2F;webhostingtalk.com&#x2F;&quot;&gt;WebHostingTalk.com&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;www.vpscolo.com&#x2F;packages.php&quot;&gt;VPSColo&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.dinix.com&#x2F;hosting&#x2F;virtual010.htm&quot;&gt;Dinix&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.linode.com&#x2F;products&#x2F;linodes.cfm&quot;&gt;Linode&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.tektonic.net&#x2F;vds.php&quot;&gt;TecTonic&lt;&#x2F;a&gt; seem to be the better ones in terms of reliability, support, etc.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The &quot;other&quot; switch: From MovableType to WordPress</title>
    <published>2004-08-23T00:55:19+00:00</published>
    <updated>2004-08-23T00:55:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/23/movabletype-to-wordpress/"/>
    <id>https://chuyeow.wtf/2004/08/23/movabletype-to-wordpress/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/23/movabletype-to-wordpress/">&lt;p&gt;Somewhat in relation to my last post on &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;08&#x2F;22&#x2F;looking-for-hosting&#x2F;&quot;&gt;my search for new a webhost&lt;&#x2F;a&gt;, I&#x27;ve switched from Perl-based &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;&quot;&gt;MovableType&lt;&#x2F;a&gt; to PHP-powered &lt;a href=&quot;http:&#x2F;&#x2F;wordpress.org&#x2F;&quot;&gt;WordPress&lt;&#x2F;a&gt;. The connection between hosting and the weblog script switch isn&#x27;t really obvious, but it will be once I tell you that the server &quot;admin&quot; on the dedicated server that I&#x27;m currently on (and sharing with several other guys) showed me that MovableType was causing MySQL load to spike. Not to mention the recent rash of comment spam, a particularly bad case totaling over 400 comment spam from a single source. I can imagine how the rebuilding frenzy brought the server to its metaphorical knees.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;wp-website-header.png&quot; alt=&quot;Screenshot of WordPress website banner&quot; width=&quot;317&quot; height=&quot;107&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And that, my friends, is the technical reason I&#x27;m being booted from that dedicated server. I was spitting curses when requests to the codefront.net domain were redirected to a &quot;suspended&quot; page yesterday. It turned out that the server admin suspended my account intending to bring it back up, but forgot to. Anyway, I have been refunded my pre-payment for the next 5 months hosting (plus 1 month from July to August), and given my walking orders. So I am now looking for alternative hosting. Of course I don&#x27;t think I was being fairly treated, but I&#x27;m not going to argue my case here. My advice to you: if you share a dedicated server with several peeps, make sure you appoint a server admin and &lt;strong&gt;pay&lt;&#x2F;strong&gt; him for it. Have agreements (preferably in contract form) on what would cause account suspension and termination.&lt;&#x2F;p&gt;
&lt;p&gt;Having put that aside, let&#x27;s go back to the much more interesting &quot;switch&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;WordPress. Ah written in a language I can understand. And having to tweak certain things to keep this blog as it was when running on MovableType made me delve into &lt;a href=&quot;http:&#x2F;&#x2F;www.cenamayo.com&#x2F;wpxref&#x2F;nav.html?index.html&quot;&gt;the source&lt;&#x2F;a&gt;. And I realize that being based on &lt;a href=&quot;http:&#x2F;&#x2F;cafelog.com&#x2F;&quot;&gt;b2&lt;&#x2F;a&gt; (another weblog script) has meant that WordPress has a lot of cruft to clean up. But working on a nightly build (2004-08-04), I could see that the developers are hard at work cleaning and firming up the code.&lt;&#x2F;p&gt;
&lt;p&gt;The main beef I have with WordPress is the way it has everything running of a single index.php page. Well, there isn&#x27;t anything really wrong with that, but having it this way makes the code a little more complicated when you have to differentiate between a single blog entry page and, say, a category page (which lists several entries and is sort of an index page). WordPress has this is_single() function to tell you which situation you are in. Which is good, except that it isn&#x27;t exposed to users. I had to look at the source code to discover that function. I&#x27;m not sure if it&#x27;s meant to be exposed, but here I am using it because there doesn&#x27;t seem to be another way to determine which of the 2 contexts the page being displayed is in. Let me know if I&#x27;m wrong here.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I&#x27;m so glad I persevered and made the switch. It was tedious because the dedicated server was sometimes borked (there were times when FTP didn&#x27;t work, shell access definitely didn&#x27;t and Apache seemed to have gone down too) today. But other than that, being able to read and understand the source code of WordPress is a very, very uplifting feeling. It makes me want to contribute as a developer.&lt;&#x2F;p&gt;
&lt;p&gt;In short, I&#x27;m happier because:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I can read PHP code.&lt;&#x2F;li&gt;
&lt;li&gt;No more nasty long rebuilds.&lt;&#x2F;li&gt;
&lt;li&gt;Visitors can comment with speeds 100X faster (non-scientific estimate). And no more double-postings too.&lt;&#x2F;li&gt;
&lt;li&gt;A very nice and fast admin control panel.&lt;&#x2F;li&gt;
&lt;li&gt;Comment spam doesn&#x27;t bring the server down as easily as for MovableType.&lt;&#x2F;li&gt;
&lt;li&gt;There&#x27;s a neat &quot;Post Slug&quot; field that you can use to define each entry&#x27;s URL. For example, this entry has a URL ending with &quot;movabletype-to-wordpress&quot; instead of &quot;the-other-switch-from-movabletype-to-wordpress&quot;. Frequent readers would have noticed by now that I like long titles.&lt;&#x2F;li&gt;
&lt;li&gt;I feel like I can contribute to WordPress (if they&#x27;d have me). That is a good feeling because I&#x27;ve always wanted to write some MovableType plugins but never got around to it because of my fear of Perl CGI (I can do Perl string manipulation pretty well, just not CGI).&lt;&#x2F;li&gt;
&lt;li&gt;Fast is good!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Time to submit some bugs to &lt;a href=&quot;http:&#x2F;&#x2F;mosquito.wordpress.org&quot;&gt;WordPress Mosquito&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Looking for hosting</title>
    <published>2004-08-22T05:08:55+00:00</published>
    <updated>2004-08-22T05:08:55+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/22/looking-for-hosting/"/>
    <id>https://chuyeow.wtf/2004/08/22/looking-for-hosting/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/22/looking-for-hosting/">&lt;p&gt;I&#x27;m on the hunt for a good webhosting package. I&#x27;m having some problems (technical and political) with the current one on the dedicated server I&#x27;m sharing. If any of you have any recommendations, do let me know by leaving a comment or &lt;a href=&quot;&#x2F;contact&#x2F;&quot;&gt;writing me&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;These are my requirements:&lt;br &#x2F;&gt;
500MB storage&lt;br &#x2F;&gt;
25GB transfer (at least)&lt;br &#x2F;&gt;
Unlimited databases&lt;br &#x2F;&gt;
Unlimited subdomains&lt;br &#x2F;&gt;
Unlimited email accounts&lt;br &#x2F;&gt;
Multiple domains (on a single hosting plan)&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m thinking of getting a Virtual Private Server (VPS) solution and have been taking a look at some User Mode Linux (UML) hosting plans. In particular, &lt;a href=&quot;https:&#x2F;&#x2F;www.dinix.com&#x2F;hosting&#x2F;virtual010.htm&quot;&gt;Dinix&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.vpscolo.com&#x2F;packages.php&quot;&gt;VPS Colo&lt;&#x2F;a&gt; (I&#x27;m looking at their lowest priced plans) stand out after much searching and reading over at &lt;a href=&quot;http:&#x2F;&#x2F;webhostingtalk.com&#x2F;&quot;&gt;WebHostingTalk forums&lt;&#x2F;a&gt;. $35&#x2F;month isn&#x27;t something I can afford though. If anyone wants to share the plan with me (we can split it 50-50 or whatever), do &lt;a href=&quot;&#x2F;contact&#x2F;&quot;&gt;let me know&lt;&#x2F;a&gt;. I&#x27;m a very nice trustworthy guy (honest!).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;acronym title=&quot;User Mode Linux &quot;&gt;UML&lt;&#x2F;acronym&gt; == root access. Mmmm... I can finally get the stuff (Subversion, PostgreSQL, mod_python) I want installed.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The Official Gmail Notifier</title>
    <published>2004-08-22T03:16:21+00:00</published>
    <updated>2004-08-22T03:16:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/22/the-official-gmail-notifier/"/>
    <id>https://chuyeow.wtf/2004/08/22/the-official-gmail-notifier/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/22/the-official-gmail-notifier/">&lt;p&gt;At first there was the &lt;a href=&quot;http:&#x2F;&#x2F;update.mozilla.org&#x2F;extensions&#x2F;moreinfo.php?id=173&amp;vid=331&amp;category=&quot;&gt;Gmail Notifier extension&lt;&#x2F;a&gt; for Firefox. And there was the &lt;a href=&quot;http:&#x2F;&#x2F;www.jedbrown.net&#x2F;mozilla&#x2F;extensions&#x2F;#GMailCompose&quot;&gt;GMailCompose extension&lt;&#x2F;a&gt; for Firefox (made defunct by the &lt;a href=&quot;http:&#x2F;&#x2F;www.jedbrown.net&#x2F;mozilla&#x2F;extensions&#x2F;#WebMailCompose&quot;&gt;WebMailCompose extension&lt;&#x2F;a&gt;). The first displayed an email notification message in Firefox. The second allowed you to have all mailto: links you click automatically send you to a page to compose the email in Gmail. There was also &lt;a href=&quot;http:&#x2F;&#x2F;torrez.us&#x2F;archives&#x2F;2004&#x2F;05&#x2F;23&#x2F;000272.html&quot;&gt;GTray&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And then there now is the official &lt;a href=&quot;http:&#x2F;&#x2F;toolbar.google.com&#x2F;gmail-helper&#x2F;&quot;&gt;Gmail Notifier&lt;&#x2F;a&gt; from Google. Purely for Windows, it appears unobtrusively in your system tray when installed.&lt;&#x2F;p&gt;
&lt;p&gt;New message notifications appear as a transclucent pane in the bottom right of your screen. (The icon does look a little cutesy doesn&#x27;t it?)&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;gmail-notifier-new-msgs-notification.png&quot; src=&quot;&#x2F;assets&#x2F;gmail-notifier-new-msgs-notification.png&quot; width=&quot;322&quot; height=&quot;88&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s not much more you can do with it.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;gmail-notifier-menu.png&quot; src=&quot;&#x2F;assets&#x2F;gmail-notifier-menu.png&quot; width=&quot;215&quot; height=&quot;123&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s nice to have an official tool from Google that does what all those other homegrown tools do. It&#x27;s also interesting that Google seems to have incorporated the best of all these amazing tools in their app - mail notification and mailto: link manipulation. Thumbs up to the authors of those neat little tools! Google seems to be copying your ideas!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>McSearchPreview - a better GooglePreview?</title>
    <published>2004-08-18T00:24:59+00:00</published>
    <updated>2004-08-18T00:24:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/18/mcsearchpreview-a-better-googlepreview/"/>
    <id>https://chuyeow.wtf/2004/08/18/mcsearchpreview-a-better-googlepreview/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/18/mcsearchpreview-a-better-googlepreview/">&lt;p&gt;&lt;ins&gt;In response to &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;08&#x2F;18&#x2F;mcsearchpreview_a_better_googlepreview.php#comment3&quot;&gt;Martey&#x27;s comment&lt;&#x2F;a&gt; and my entry (I think), Carlo has updated the &lt;a href=&quot;http:&#x2F;&#x2F;docs.g-blog.net&#x2F;code&#x2F;mozilla_extensions&#x2F;&quot;&gt;McSearchPreview webpage&lt;&#x2F;a&gt; to include an explanation of the Amazon affiliate codes mentioned below.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;When you use McSearchPreview and click on an Amazon result, you support me and the further development of the extension if you actually purchase a product.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Support extension authors!&lt;br &#x2F;&gt;
&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;g-spotting.net&#x2F;&quot;&gt;Carlo Zottmann&lt;&#x2F;a&gt; wrote me about 2 weeks back to let me know about his &lt;a href=&quot;http:&#x2F;&#x2F;docs.g-blog.net&#x2F;code&#x2F;mozilla_extensions&#x2F;&quot;&gt;McSearchPreview&lt;&#x2F;a&gt; extension for &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&#x2F;&quot;&gt;Firefox&lt;&#x2F;a&gt;. He wrote his first Firefox extension after using the &lt;a href=&quot;http:&#x2F;&#x2F;ackroyd.de&#x2F;googlepreview&#x2F;&quot;&gt;GooglePreview extension&lt;&#x2F;a&gt; (which I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;07&#x2F;25&#x2F;preview_google_search_results_with_this_extension.php&quot;&gt;wrote about&lt;&#x2F;a&gt;) and discovering that it lacked similar capabilities for other search engines that he uses. Attending a need is indeed excellent inspiration.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;docs.g-blog.net&#x2F;code&#x2F;mozilla_extensions&#x2F;&quot;&gt;McSearchPreview&lt;&#x2F;a&gt; adds preview thumbnails to search results for Google, MSN Search, Yahoo Search, A9 and AllTheWeb. Unlike GooglePreview, the thumbnails are retrieved from Alexa (by default - &lt;a href=&quot;http:&#x2F;&#x2F;www.thumbshots.org&#x2F;&quot;&gt;Thumbshots&lt;&#x2F;a&gt; can also be used as an alternative). This means a larger number of results will have preview images, since Thumbshots only has thumbnail images of pages that are in &lt;a href=&quot;http:&#x2F;&#x2F;www.dmoz.org&#x2F;&quot;&gt;DMOZ&lt;&#x2F;a&gt; (in which very few pages would be listed).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of McSearchPreview options dialog&quot; src=&quot;&#x2F;assets&#x2F;ff-mcsearchpreview-options.png&quot; width=&quot;254&quot; height=&quot;274&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;McSearchPreview also adds an &quot;Open in new window link&quot; at the end of each search result - the actual usefulness of this feature is a little arguable since we are using a browser with tab browsing, after all. It also adds a &quot;Site Info&quot; link that takes you to the Alexa page for the search result&#x27;s domain. It seems like an Amazon affiliate link but I&#x27;m not exactly sure if the author gets any benefit from it. Well, I&#x27;m fine with letting Carlo make a little profit from his neat extension, if any, but it would have been nice if he&#x27;d explained why there&#x27;s (what appears to be) Amazon affiliate code in the &quot;Site Info&quot; links. Incidentally, the author of GooglePreview has removed Amazon affiliate code from version 0.3 of the extension.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, this is a really nice extension and I&#x27;m using it in place of GooglePreview at the moment (more pretty thumbnails!). Thanks Carlo!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>pickle.dump(links, blog) &#x2F;&#x2F; Non-techie edition</title>
    <published>2004-08-17T10:34:05+00:00</published>
    <updated>2004-08-17T10:34:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/17/pickledumplinks-blog-non-techie-edition/"/>
    <id>https://chuyeow.wtf/2004/08/17/pickledumplinks-blog-non-techie-edition/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/17/pickledumplinks-blog-non-techie-edition/">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.giantitp.com&#x2F;cgi-bin&#x2F;GiantITP&#x2F;ootscript&quot;&gt;The Order of the Stick&lt;&#x2F;a&gt; is my favorite web comic - it&#x27;s &lt;acronym title=&quot;Dungeons and Dragons&quot;&gt;DnD&lt;&#x2F;acronym&gt;-related! Check out the &lt;a href=&quot;http:&#x2F;&#x2F;www.giantitp.com&#x2F;ootsChars.html&quot;&gt;cast of characters&lt;&#x2F;a&gt;. Not sure if this is for you? Check out &lt;a href=&quot;http:&#x2F;&#x2F;www.giantitp.com&#x2F;cgi-bin&#x2F;GiantITP&#x2F;ootscript?SK=3&quot;&gt;strip 3&lt;&#x2F;a&gt; - if this hasn&#x27;t got you chuckling in pure appreciation, The Order of the Stick probably isn&#x27;t for you. Otherwise, enjoy!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.tie-a-tie.net&#x2F;&quot;&gt;Learn how to tie a tie&lt;&#x2F;a&gt; - I don&#x27;t remember how to tie a tie. I don&#x27;t really have many chances to wear one anyway but you never know when this may come in handy when you&#x27;re single and wife&#x2F;girlfriend-less. Weird how the ladies know how to tie better ties than guys.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.datsi.fi.upm.es&#x2F;~frosal&#x2F;docs&#x2F;25mdq.html&quot;&gt;The 25 most difficult questions you&#x27;ll be asked on a job interview&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.1up.com&#x2F;do&#x2F;feature?cId=3116290&quot;&gt;The most important games ever made&lt;&#x2F;a&gt; - an ongoing piece of work. Halflife should be in there. Baldur&#x27;s Gate too. Maybe Fallout.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Loving my iPod mini</title>
    <published>2004-08-13T01:05:33+00:00</published>
    <updated>2004-08-13T01:05:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/13/loving-my-ipod-mini/"/>
    <id>https://chuyeow.wtf/2004/08/13/loving-my-ipod-mini/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/13/loving-my-ipod-mini/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;08&#x2F;09&#x2F;iwish_ihad_an_ipod_mini.php&quot;&gt;I wished I had an iPod mini&lt;&#x2F;a&gt;. I have now got an iPod mini - a silver one.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Image of silver iPod mini&quot; src=&quot;&#x2F;assets&#x2F;ipodmini-silver.png&quot; width=&quot;150&quot; height=&quot;251&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;To clear several plausible doubts judging from the comments in &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;08&#x2F;09&#x2F;iwish_ihad_an_ipod_mini.php&quot;&gt;that last post&lt;&#x2F;a&gt; (well, mostly directed at the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;08&#x2F;09&#x2F;iwish_ihad_an_ipod_mini.php#comment4&quot;&gt;rant by jbelkin&lt;&#x2F;a&gt;):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Roshambo, I&#x27;m not sure how &lt;a href=&quot;http:&#x2F;&#x2F;www.sumajin.com&#x2F;online.htm&quot;&gt;Sumajin SmartWrap&lt;&#x2F;a&gt; is going to be useful for me. The website isn&#x27;t very descriptive so if you could explain to me what it does... :)&lt;&#x2F;li&gt;
&lt;li&gt;Like &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;08&#x2F;09&#x2F;iwish_ihad_an_ipod_mini.php#comment7&quot;&gt;Luke said&lt;&#x2F;a&gt;, jbelkin, you said you &quot;never read (my) original post&quot; and yet go on to say &quot;and this is why (I&#x27;m) wrong&quot;. I liked the self-contradiction there heh. But, but, I agree with you most of your points (well, right now because I&#x27;m the owner of an iPod). Except that the iPod (mini) &lt;em&gt;is&lt;&#x2F;em&gt; overpriced. Perhaps you haven&#x27;t met poor people before (OK that isn&#x27;t fair, but you weren&#x27;t being fair). The iPod mini cost me a week&#x27;s salary. I am now willing to pay for it because I am drawing a salary.&lt;&#x2F;li&gt;
&lt;li&gt;I have no idea what &quot;Fry&#x27;s&quot; is. I live in Singapore.&lt;&#x2F;li&gt;
&lt;li&gt;I am loving my iPod mini.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For my fellow Singaporeans, do go get your iPod mini if you want one from SGL at Sim Lim Square (it&#x27;s on the 2nd floor, and if you go by the connecting bridge from OG, it&#x27;s the first shop on your right). It&#x27;s $440 ($18 less the the market price of $458 at places like the AppleCentres) and the lady there is very friendly. Another thing I must say is that the Best Denki people manning their phone lines give pretty crappy service. They don’t sound very friendly and don’t bother to check for you the availability in other stores. Neither did they take the initiative to tell me when the new stocks will arrive. Harvey Norman is a completely different story because the guy who serviced my call was totally friendly, checked out the stocks in the other branches, and even told me when the stocks will arrive. Boo Best Denki.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, more on this (the iPod mini) later.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Flattered</title>
    <published>2004-08-12T01:54:13+00:00</published>
    <updated>2004-08-12T01:54:13+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/12/flattered/"/>
    <id>https://chuyeow.wtf/2004/08/12/flattered/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/12/flattered/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;john.qwertydigital.com&#x2F;wordpress&#x2F;&quot;&gt;John Stone&lt;&#x2F;a&gt; sent me a very nice email today about his &lt;a href=&quot;http:&#x2F;&#x2F;john.qwertydigital.com&#x2F;wordpress&#x2F;index.php?p=22&quot;&gt;redesign&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I&#x27;ve got my own blog and I used your&#x27;s for inspiration, it doesn&#x27;t&lt;br &#x2F;&gt;
look nearly as good as yours and thats good because I wouldn&#x27;t want&lt;br &#x2F;&gt;
people to think I &quot;stole&quot; the design, but I just wanted to clear it&lt;br &#x2F;&gt;
with you first, if you think it looks to much like a clone, i have&lt;br &#x2F;&gt;
another design i can use.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Someone took my crummy design as an inspiration - I am at once amazed and utterly flattered. Thanks for asking nicely John, and yes it is more than alright.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>IE blog joke&#x2F;flamebait, and get XP SP2 via BitTorrent</title>
    <published>2004-08-11T10:27:10+00:00</published>
    <updated>2004-08-11T10:27:10+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/11/ie-blog-jokeflamebait-and-get-xp-sp2-via-bittorrent/"/>
    <id>https://chuyeow.wtf/2004/08/11/ie-blog-jokeflamebait-and-get-xp-sp2-via-bittorrent/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/11/ie-blog-jokeflamebait-and-get-xp-sp2-via-bittorrent/">&lt;p&gt;Tony Chor, the Group Program Manager for the IE team, &lt;a href=&quot;http:&#x2F;&#x2F;blogs.msdn.com&#x2F;ie&#x2F;archive&#x2F;2004&#x2F;08&#x2F;10&#x2F;212008.aspx&quot;&gt;writes&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;We also came up with a very original idea – popup blocking.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;The idea was so ridiculous I knew it had to be a joke. And it was, when Tony later &lt;a href=&quot;http:&#x2F;&#x2F;blogs.msdn.com&#x2F;ie&#x2F;archive&#x2F;2004&#x2F;08&#x2F;10&#x2F;212008.aspx#212128&quot;&gt;writes&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;For the record, I was joking about our &quot;innovation&quot; around popup blocking.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;But not after several not entirely unexpected flames (I found the popup blocking innovation comment from a site flamed the blog post too) from people who didn&#x27;t get it.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, if you haven&#x27;t seen this yet (it was on Slashdot - I don&#x27;t read it though, perhaps you do), you can get Windows XP Service Pack 2 via BitTorrent at &lt;a href=&quot;http:&#x2F;&#x2F;www.sp2torrent.com&#x2F;&quot;&gt;SP2Torrent.com&lt;&#x2F;a&gt;. Not from Microsoft (so it&#x27;s not &quot;official&quot;), but you got to wonder why Microsoft doesn&#x27;t embrace BitTorrent for distributing XP SP2 and do away with all that initial hoo-ha about staggered release schedules.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>iWish iHad an iPod mini</title>
    <published>2004-08-09T03:21:09+00:00</published>
    <updated>2004-08-09T03:21:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/09/iwish-ihad-an-ipod-mini/"/>
    <id>https://chuyeow.wtf/2004/08/09/iwish-ihad-an-ipod-mini/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/09/iwish-ihad-an-ipod-mini/">&lt;p&gt;I know I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;08&#x2F;ahem_5_reasons_not_to_buy_an_ipod.php&quot;&gt;pointed out&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;reviews.cnet.com&#x2F;4520-6450_7-5102324-1.html&quot;&gt;5 reasons not to buy an iPod&lt;&#x2F;a&gt; 6 months or so ago. I take that back. I caught the iPod bug. More specifically, the iPod mini bug - don&#x27;t really fancy the larger iPod, even if it&#x27;s much better with the &lt;acronym title=&quot;4th generation&quot;&gt;4G&lt;&#x2F;acronym&gt; version.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m really getting it as something to soothe me and make my sad life a little brighter (believe it or not, pathetic as that sounds). I haven&#x27;t got any gadgets yet and this will probably be the first time I&#x27;m (modestly) splurging my salary. Yes that&#x27;s right. I don&#x27;t have an MP3 player, no palmtop device, no 3G phone (I kinda like my trusty Nokia 8250). I don&#x27;t even have a Discman that works.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, the sadness of my gadget-deprived life is besides the point. The point is, I want an iPod mini. And I wish I can get my hands on one tommorrow against all odds. Well, someone at an Apple reseller told me that there was a national shortage of iPod mini with interminable queues. Pretty disheartening, especially when I got a couple of colleagues to go down with me to buy it. And we were arrogantly told by the sales person (I reckon he was a Mac evangelist) that &quot;Apple does not intend to include FM radio in the iPod or in the future&quot;. (It really was more arrogant-sounding then that, but I forget the exact words to quote him verbatim.)&lt;&#x2F;p&gt;
&lt;p&gt;Good news is, a friend told me that she saw iPod minis selling around a tech place today. Well, at least she saw the boxes. And someone at the &lt;a href=&quot;http:&#x2F;&#x2F;www.macuser.org.sg&#x2F;&quot;&gt;Mac Users Group (Singapore)&lt;&#x2F;a&gt; posted that he bought an iPod just today. It just might happen! Will be calling a few places to check on their iPod mini stocks 10 hours from now. Fingers crossed.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>pickle.dump(links, blog)  &#x2F;&#x2F; August 6, 2004 edition</title>
    <published>2004-08-07T00:03:53+00:00</published>
    <updated>2004-08-07T00:03:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/07/pickledumplinks-blog-august-6-2004-edition/"/>
    <id>https://chuyeow.wtf/2004/08/07/pickledumplinks-blog-august-6-2004-edition/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/07/pickledumplinks-blog-august-6-2004-edition/">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mirekw.com&#x2F;winfreeware&#x2F;mwsnap.html&quot;&gt;MWSnap&lt;&#x2F;a&gt; - This is one bad ass screen capture utility, available at competitive pricing - it&#x27;s free! It allows you to snap a selected portion of the screen (no need for resizing, cropping), and perhaps best of all, allows you to add a mouse pointer to your screen caps. Finally I can put mouse pointers in those screenshots I seem so fond of taking.&lt;&#x2F;li&gt;
&lt;li&gt;Ian Lloyd&#x27;s Accessify.com has a whole bunch of &lt;a href=&quot;http:&#x2F;&#x2F;www.accessify.com&#x2F;tools-and-wizards&#x2F;default.asp&quot;&gt;accessibility tools and wizards&lt;&#x2F;a&gt; to help the web developer generate code that&#x27;s accessible. The &lt;a href=&quot;http:&#x2F;&#x2F;www.accessify.com&#x2F;tools-and-wizards&#x2F;accessibility-toolbox.asp&quot;&gt;Accessibility Toolbox&lt;&#x2F;a&gt; is pretty instructive - it generates HTML code for form elements that&#x27;s accessible. Are your forms not accessible yet?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.downhillbattle.org&#x2F;labs&#x2F;battletorrent&#x2F;&quot;&gt;Battle Torrent&lt;&#x2F;a&gt; is a project that promises &#x27;A greatly simplified BitTorrent experience&#x27;. I&#x27;m not sure if there&#x27;s any active development (they&#x27;re looking for a lead developer at the moment). Either way, this is something we have wanted to work on and it&#x27;s great to see that we are not the only ones who think BitTorrent is amazing and it&#x27;d be even more amazing if mom and pop could use it.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.buzzsurf.com&#x2F;surfatwork&#x2F;&quot;&gt; How to Bypass Most Firewall Restrictions and Access the Internet Privately&lt;&#x2F;a&gt; - For those of you without a proper internet connection at work. Or those of you who want privacy.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;sebsauvage.net&#x2F;punching&#x2F;&quot;&gt;Punching holes into firewalls&lt;&#x2F;a&gt; explains how tunnelling can always get you by a firewall, so long as you let a single protocol out (HTTP is ever so commonly allowed).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Tombstone Generator</title>
    <published>2004-08-06T23:43:12+00:00</published>
    <updated>2004-08-06T23:43:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/06/tombstone-generator/"/>
    <id>https://chuyeow.wtf/2004/08/06/tombstone-generator/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/06/tombstone-generator/">&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;blog.lidan.net&#x2F;archives&#x2F;000192.html&quot;&gt;TIMELINE&lt;&#x2F;a&gt;: &lt;a href=&quot;http:&#x2F;&#x2F;tombstone.dogcrap.net&#x2F;create.php&quot;&gt;Tombstone Generator&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Epitaph - Help Let me out!&quot; src=&quot;&#x2F;assets&#x2F;tombstone-help.jpg&quot; width=&quot;325&quot; height=&quot;197&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I also found the &lt;a href=&quot;http:&#x2F;&#x2F;www.churchsigngenerator.com&#x2F;&quot;&gt;Church Sign Generator&lt;&#x2F;a&gt; which was the inspiration(!) for the Tombstone Generator.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Church sign - Fowler Is God&quot; src=&quot;&#x2F;assets&#x2F;churchsign-fowler.jpg&quot; width=&quot;313&quot; height=&quot;232&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>pickle.dump(links, blog)</title>
    <published>2004-08-03T23:44:07+00:00</published>
    <updated>2004-08-03T23:44:07+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/03/pickledumplinks-blog/"/>
    <id>https://chuyeow.wtf/2004/08/03/pickledumplinks-blog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/03/pickledumplinks-blog/">&lt;p&gt;Well, I don&#x27;t have a link blog and the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;externals&#x2F;&quot;&gt;Externals section&lt;&#x2F;a&gt; is totally borked (I still keep my &lt;a href=&quot;http:&#x2F;&#x2F;del.icio.us&#x2F;&quot;&gt;del.icio.us&lt;&#x2F;a&gt; account going though), so I&#x27;m finding it so hard to keep track of links I&#x27;m picking up and intending to write about. Well, this is a whole genus of links that you want to link to but don&#x27;t quite feel worthy of a complete blog entry (know what I mean?). Someday I will fix this broken weblog. For now, I procrastinate.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Lockergnome is &lt;a href=&quot;http:&#x2F;&#x2F;www.lockergnome.com&#x2F;contact&#x2F;join.phtml&quot;&gt;looking for contributors and writers&lt;&#x2F;a&gt;. Applied and accepted (for the Web Browser channel, naturally). Chris Pirillo&#x27;s a nice dude. Though I could be saying that because he likes &lt;a href=&quot;http:&#x2F;&#x2F;www.muvee.com&#x2F;website&#x2F;ap3mx.php&quot;&gt;muvee autoProducer&lt;&#x2F;a&gt; so much.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;radio.weblogs.com&#x2F;0001011&#x2F;blogparody.htm&quot;&gt;Simple Guide to the A-List Bloggers&lt;&#x2F;a&gt; is a hilarious parody of A-List bloggers (such as Dave Winer and Chris Pirillo) and their blogging styles. Of course, you&#x27;d have to actually have read these peoples&#x27; blogs regularly to get the humor.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.audioscrobbler.com&#x2F;&quot;&gt;Audioscrobbler&lt;&#x2F;a&gt; is interesting stuff (OK so I&#x27;m a little late to pick this one up). &lt;a href=&quot;http:&#x2F;&#x2F;www.audioscrobbler.com&#x2F;user&#x2F;chuyeow&#x2F;&quot;&gt;My user details&lt;&#x2F;a&gt;. Seems to go down quite often though, and still in teething stages. But promising. Via &lt;a href=&quot;http:&#x2F;&#x2F;www.dot-totally.co.uk&#x2F;archives&#x2F;2004&#x2F;07&#x2F;31&#x2F;essential-music-tools&#x2F;&quot;&gt;dot-totally.co.uk&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.e-lusion.com&#x2F;design&#x2F;menu&#x2F;&quot;&gt;Free CSS menus&lt;&#x2F;a&gt; (complete with rollovers). These look fantastic. Fully XHTML and CSS standards-compliant.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.aypwip.org&#x2F;webnote&#x2F;&quot;&gt;Webnote&lt;&#x2F;a&gt; is an online tool for taking notes. Some mean DHTML&#x2F;JS-fu going on there.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.tcfb.com&#x2F;freetechbooks&#x2F;index.html&quot;&gt;FreeTechBooks&lt;&#x2F;a&gt; links to a good collection of free books in electronic form. All legal of course.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.vandruff.com&#x2F;art_converse.html&quot;&gt;Conversational cheap shots&lt;&#x2F;a&gt;. Add a varied collection of verbal weaponry to your arsenal. Get ahead in flame wars.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.reciprocality.org&#x2F;Reciprocality&#x2F;r0&#x2F;&quot;&gt;The Programmers&#x27; Stone&lt;&#x2F;a&gt; celebrates the Art of Programming. A little wordy. I should print this out to read.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Testing Meme Propagation In Blogspace: Add Your Blog!</title>
    <published>2004-08-03T03:11:53+00:00</published>
    <updated>2004-08-03T03:11:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/03/testing-meme-propagation-in-blogspace-add-your-blog/"/>
    <id>https://chuyeow.wtf/2004/08/03/testing-meme-propagation-in-blogspace-add-your-blog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/03/testing-meme-propagation-in-blogspace-add-your-blog/">&lt;p&gt;This posting is a community experiment started by &lt;a href=&quot;http:&#x2F;&#x2F;novaspivack.typepad.com&#x2F;nova_spivacks_weblog&#x2F;2004&#x2F;08&#x2F;a_sonar_ping_of.html&quot;&gt;Minding the Planet&lt;&#x2F;a&gt; to see how a meme represented by a blog posting spreads across blogspace, physical space and time. It will help to show how ideas travel across blogs in space and time and how blogs are connected. It may also help to show which blogs are most influential in the propagation of memes. The original posting for this experiment is located at: Minding the Planet; results and commentary will appear there in the future.&lt;&#x2F;p&gt;
&lt;p&gt;Please join the test by adding your blog (see instructions, below) and inviting your friends to participate — the more the better. The data from this test will be public and open; others may use it to visualize and study the connectedness of blogspace and the propagation of memes across blogs.&lt;&#x2F;p&gt;
&lt;p&gt;The GUID for this experiment is: &lt;span style=&quot;font-size:65%&quot;&gt;as098398298250swg9e98929872525389t9987898tq98wteqtgaq62010920352598gawst&lt;&#x2F;span&gt; (this GUID enables anyone to easily search Google for all results of this experiment). Anyone is free to analyze the data of this experiment. Please publicize your analysis of the data, and&#x2F;or any comments by adding comments onto the &lt;a href=&quot;http:&#x2F;&#x2F;novaspivack.typepad.com&#x2F;nova_spivacks_weblog&#x2F;2004&#x2F;08&#x2F;a_sonar_ping_of.html&quot;&gt;original post at Minding the Planet&lt;&#x2F;a&gt;; Note: it would be interesting to see a geographic map or a temporal animation, as well as a social network map of the propagation of this meme.&lt;&#x2F;p&gt;
&lt;h4&gt;Instructions&lt;&#x2F;h4&gt;
&lt;p&gt;To add your blog to this experiment, copy this entire posting to&lt;br &#x2F;&gt;
your blog, and fill out the info below, substituting your own&lt;br &#x2F;&gt;
information in your posting, where appropriate.&lt;&#x2F;p&gt;
&lt;h4&gt;Required Fields &lt;&#x2F;h4&gt;
&lt;p&gt;(Note: Replace the answers below with your own answers)&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;I found this experiment at URL: &lt;a href=&quot;http:&#x2F;&#x2F;www.nocertainty.com&quot;&gt;http:&#x2F;&#x2F;www.nocertainty.com&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;I found it via &quot;Newsreader Software&quot; or &quot;Browsing or Searching the&lt;br &#x2F;&gt;
Web&quot; or &quot;An E-Mail Message&quot;: Newsreader (Bloglines&lt;&#x2F;li&gt;
&lt;li&gt;I posted this experiment at URL: &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot;&gt;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;I posted this on date (day, month, year): 03 August 2004&lt;&#x2F;li&gt;
&lt;li&gt;I posted this at time (24 hour time): 02:05:00&lt;&#x2F;li&gt;
&lt;li&gt;My posting location is (city, state, country): Singapore, Singapore, Singapore&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h4&gt;Optional Survey Fields&lt;&#x2F;h4&gt;
&lt;p&gt;(Replace the answers below with your own answers):&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;My blog is hosted by: Myself&lt;&#x2F;li&gt;
&lt;li&gt;My age is: 24&lt;&#x2F;li&gt;
&lt;li&gt;My gender is: Male&lt;&#x2F;li&gt;
&lt;li&gt;My occupation is: Webmaster&lt;&#x2F;li&gt;
&lt;li&gt;I use the following RSS&#x2F;Atom reader software: Bloglines, Mozilla Thunderbird&lt;&#x2F;li&gt;
&lt;li&gt;I use the following software to post to my blog: Movable Type&lt;&#x2F;li&gt;
&lt;li&gt;I have been blogging since (day, month, year): 24 May 2003&lt;&#x2F;li&gt;
&lt;li&gt;My web browser is: Firefox&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;There it is, my very first participation in a &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Meme&quot; title=&quot;View the Wikipedia entry for &amp;quot;meme&amp;quot;&quot;&gt;meme&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Chee Aun has a good eye for UI bugs</title>
    <published>2004-08-01T02:34:06+00:00</published>
    <updated>2004-08-01T02:34:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/01/chee-aun-has-a-good-eye-for-ui-bugs/"/>
    <id>https://chuyeow.wtf/2004/08/01/chee-aun-has-a-good-eye-for-ui-bugs/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/01/chee-aun-has-a-good-eye-for-ui-bugs/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;cheeaun.phoenity.com&#x2F;&quot;&gt;Chee Aun&lt;&#x2F;a&gt;, author of the &lt;a href=&quot;http:&#x2F;&#x2F;phoenity.com&#x2F;firefox.html&quot;&gt;Phoenity theme&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;cheeaun.phoenity.com&#x2F;weblog&#x2F;2004&#x2F;07&#x2F;firefox-dust.html&quot;&gt;spotted several minor bugs in Firefox&lt;&#x2F;a&gt; while working on a new version of Phoenity.&lt;&#x2F;p&gt;
&lt;p&gt;The things he finds are just amazing and come complete with bugfixes (where applicable). This guy should be in there fixing and improving the Firefox UI.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>From the creators of South Park!</title>
    <published>2004-08-01T02:25:06+00:00</published>
    <updated>2004-08-01T02:25:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/01/from-the-creators-of-south-park/"/>
    <id>https://chuyeow.wtf/2004/08/01/from-the-creators-of-south-park/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/01/from-the-creators-of-south-park/">&lt;p&gt;Matt and Trey have a new movie coming up! It&#x27;s called &lt;a href=&quot;http:&#x2F;&#x2F;www.teamamericamovie.com&#x2F;&quot;&gt;Team America&lt;&#x2F;a&gt; and will be in theatres in October. Kick ass!&lt;&#x2F;p&gt;
&lt;p&gt;Check out the &lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;trailers&#x2F;paramount&#x2F;team_america&#x2F;&quot;&gt;Team America trailer&lt;&#x2F;a&gt; (requires the Quicktime plugin).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>RSS integration enabled in yesterday&#x27;s Thunderbird nightly builds</title>
    <published>2004-08-01T02:16:03+00:00</published>
    <updated>2004-08-01T02:16:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/08/01/rss-integration-enabled-in-yesterdays-thunderbird-nightly-builds/"/>
    <id>https://chuyeow.wtf/2004/08/01/rss-integration-enabled-in-yesterdays-thunderbird-nightly-builds/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/08/01/rss-integration-enabled-in-yesterdays-thunderbird-nightly-builds/">&lt;p&gt;Yup it is here - &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=253490&quot;&gt;bug 253490 - Turn on the new RSS extensions and add it to the installer&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It isn&#x27;t completely working yet, but it is ready for testing. Works very much like the &lt;a href=&quot;http:&#x2F;&#x2F;forumzilla.mozdev.org&#x2F;&quot;&gt;Forumzilla extension&lt;&#x2F;a&gt;. It even displays the webpage in full as specified in the &amp;lt;link&amp;gt; tags in the RSS feed like Forumzilla does, which isn&#x27;t ideal. Atom feeds work fine though - only the &amp;lt;content&amp;gt; is shown in plain text format.&lt;&#x2F;p&gt;
&lt;p&gt;Well, on to the screenshots. I&#x27;m not in the mood for too much writing today.&lt;br &#x2F;&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;Creating a new RSS account:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Thunderbird&#x27;s UI for creating new account, including an RSS account&quot; src=&quot;&#x2F;assets&#x2F;tb-new-acct-rss.png&quot; width=&quot;290&quot; height=&quot;113&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Management pane for an RSS account:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of account management pane&quot; src=&quot;&#x2F;assets&#x2F;tb-rss-acct-mgmt.png&quot; width=&quot;328&quot; height=&quot;319&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;RSS account options:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of RSS account options&quot; src=&quot;&#x2F;assets&#x2F;tb-rss-acct-options.png&quot; width=&quot;331&quot; height=&quot;135&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;RSS feed management dialog:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of RSS feed management dialog&quot; src=&quot;&#x2F;assets&#x2F;tb-rss-feed-mgmt.png&quot; width=&quot;294&quot; height=&quot;236&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Adding a new RSS feed:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of dialog for adding a new feed&quot; src=&quot;&#x2F;assets&#x2F;tb-rss-acct-new-feed.png&quot; width=&quot;298&quot; height=&quot;130&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Message pane listing items in a RSS feed:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of message pane for RSS feeds&quot; src=&quot;&#x2F;assets&#x2F;tb-rss-msg-pane.png&quot; width=&quot;335&quot; height=&quot;123&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ftp26moz.newaol.com&#x2F;pub&#x2F;mozilla.org&#x2F;thunderbird&#x2F;nightly&#x2F;latest-0.8&#x2F;&quot;&gt;Grab the latest Thunderbird nightly build&lt;&#x2F;a&gt; for some first-hand action.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>A label for unread emails in Gmail</title>
    <published>2004-07-30T00:38:27+00:00</published>
    <updated>2004-07-30T00:38:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/30/a-label-for-unread-emails-in-gmail/"/>
    <id>https://chuyeow.wtf/2004/07/30/a-label-for-unread-emails-in-gmail/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/30/a-label-for-unread-emails-in-gmail/">&lt;p&gt;This is a pretty nifty Gmail trick (via &lt;a href=&quot;http:&#x2F;&#x2F;blog.lidan.net&#x2F;archives&#x2F;000188.html&quot;&gt;TIMELINE&lt;&#x2F;a&gt; via &lt;a href=&quot;http:&#x2F;&#x2F;www.gmailwiki.com&#x2F;index.php&#x2F;Tips_and_Tricks#Unread_mail&quot;&gt;gmailwiki&lt;&#x2F;a&gt;): create a label named &quot;Unread&quot; and Gmail automatically lists all unread email when you call up that label.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Gmail &quot; src=&quot;&#x2F;assets&#x2F;gmail-unread-label.png&quot; width=&quot;126&quot; height=&quot;290&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Seems very much like a half-hearted, half-implemented feature that Google hasn&#x27;t decided whether to give to users. I for one would very much like to have a standard section for unread mail (&quot;standard&quot; meaning it goes into the same place as Starred, All Mail and co.).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Did you think I&#x27;d lay down and die?</title>
    <published>2004-07-30T00:08:19+00:00</published>
    <updated>2004-07-30T00:08:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/30/did-you-think-id-lay-down-and-die/"/>
    <id>https://chuyeow.wtf/2004/07/30/did-you-think-id-lay-down-and-die/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/30/did-you-think-id-lay-down-and-die/">&lt;p&gt;&quot;Oh not I.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;Well, seems like I was caught off-guard when a reader (thanks Roshambo!) wrote in and alerted me that I&#x27;d exceeded the 10 GB bandwidth limit I&#x27;d set for the codefront.net domain. There were times when I thought that even 1 GB of bandwidth was a whole lot. Granted, 10 GB of transfer is a pittance, but I am a nobody with an unremarkable website (I think people come just for the Mozilla entries with them screenshots, heh), so humour me.&lt;&#x2F;p&gt;
&lt;p&gt;Luckily I have a 20 GB reseller account with left over (or rather, unused) bandwidth from my other domains, so problem solved with a little bit of quota adjustments in &lt;acronym title=&quot;WebHost Manager&quot;&gt;WHM&lt;&#x2F;acronym&gt;. Looks like I gotta get more of that bandwidth thing for next month.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The answer to the question &#x27;How many of you use Internet Explorer?&#x27;</title>
    <published>2004-07-27T23:10:14+00:00</published>
    <updated>2004-07-27T23:10:14+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/27/the-answer-to-the-question-how-many-of-you-use-internet-explorer/"/>
    <id>https://chuyeow.wtf/2004/07/27/the-answer-to-the-question-how-many-of-you-use-internet-explorer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/27/the-answer-to-the-question-how-many-of-you-use-internet-explorer/">&lt;p&gt;... is none, or at least as far as this &lt;a href=&quot;http:&#x2F;&#x2F;blogs.sun.com&#x2F;roller&#x2F;comments&#x2F;DaneseCooper?anchor=what_if_mozilla_were_to1&quot;&gt;gem of an incident goes&lt;&#x2F;a&gt; (it happened at  &lt;a href=&quot;http:&#x2F;&#x2F;www.blogonevent.com&#x2F;blogon2004&#x2F;&quot;&gt;BlogOn2004&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Well, at least bloggers are using non-IE browsers. I doubt this is so for the general population, but it&#x27;s getting there. I&#x27;m not &lt;em&gt;that&lt;&#x2F;em&gt; anti-Microsoft. I&#x27;m just against broken browsers that don&#x27;t get fixed. Especially when you have such a big market share (one could have said &#x27;monopoly&#x27; a few years back), it becomes almost an obligation to fix whatever&#x27;s broken.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Preview Google search results with this extension</title>
    <published>2004-07-25T22:21:41+00:00</published>
    <updated>2004-07-25T22:21:41+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/25/preview-google-search-results-with-this-extension/"/>
    <id>https://chuyeow.wtf/2004/07/25/preview-google-search-results-with-this-extension/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/25/preview-google-search-results-with-this-extension/">&lt;p&gt;A reader (who didn&#x27;t leave his name, though from the email address it should be a Marc or Marc-Andre) wrote me an email to tell me about this Firefox extension, &lt;a href=&quot;http:&#x2F;&#x2F;ackroyd.de&#x2F;googlepreview&#x2F;&quot;&gt;GooglePreview&lt;&#x2F;a&gt; that inserts previews of search results pages before each search result at &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;&quot;&gt;Google&lt;&#x2F;a&gt;. Quite neat.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of GooglePreview extension in action&quot; src=&quot;&#x2F;assets&#x2F;ff-googlepreview-eg.png&quot; width=&quot;330&quot; height=&quot;311&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It also inserts product screenshots from Amazon if a search result points to Amazon and even a stock&#x27;s trends (see the &lt;a href=&quot;http:&#x2F;&#x2F;ackroyd.de&#x2F;googlepreview&#x2F;&quot;&gt;GooglePreview website&lt;&#x2F;a&gt; for screenshots).&lt;&#x2F;p&gt;
&lt;p&gt;Thanks for the heads up Marc!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;07&#x2F;25&#x2F;preview_google_search_results_with_this_extension.php#comment3&quot;&gt;Rory asked&lt;&#x2F;a&gt; how it works, so I took a quick look at the source of the XPI and &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;07&#x2F;25&#x2F;preview_google_search_results_with_this_extension.php#comment4&quot; title=&quot;Read my comment (below) to find out how the image previews are rendered&quot;&gt;found out how&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New features in Mozilla Thunderbird 0.8</title>
    <published>2004-07-24T16:13:54+00:00</published>
    <updated>2004-07-24T16:13:54+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/24/new-features-in-mozilla-thunderbird-08/"/>
    <id>https://chuyeow.wtf/2004/07/24/new-features-in-mozilla-thunderbird-08/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/24/new-features-in-mozilla-thunderbird-08/">&lt;p&gt;Thunderbird 0.8 is shipping soon (July, according to the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;thunderbird&#x2F;roadmap.html&quot;&gt;roadmap&lt;&#x2F;a&gt;) and test builds have just been &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=104656&quot;&gt;announced&lt;&#x2F;a&gt;. Here&#x27;s the rundown of the new features you can expect to see.&lt;&#x2F;p&gt;
&lt;h4&gt;RSS Integration&lt;&#x2F;h4&gt;
&lt;p&gt;That&#x27;s right, RSS reading capability is going to be built into Thunderbird. This has not been turned on yet in the latest Thunderbird nightlies, though bugs are being reported (mostly by Scott, the Thunderbird lead) and fixed as can be seen from bugs &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=250963&quot;&gt;250963&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=251242&quot;&gt;251242&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=252496&quot;&gt;252496&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=252483&quot;&gt;252483&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=252391&quot;&gt;252391&lt;&#x2F;a&gt;. Apparently, it could look and function somewhat like Opera (see &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;attachment.cgi?id=140014&amp;action=view&quot;&gt;Opera RSS reader screenshot&lt;&#x2F;a&gt;) - just speculation though. The &quot;core&quot; bug is bug &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=225158&quot;&gt;225158 - Thunderbird should act as an RSS&#x2F;Atom newsreader, too&lt;&#x2F;a&gt;. The roadmap promises this bug (or rather &lt;acronym title=&quot;Request For Enhancement&quot;&gt;RFE&lt;&#x2F;acronym&gt;) will be fixed for Thunderbird 0.8.&lt;&#x2F;p&gt;
&lt;p&gt;This promises to be a more typical news reader implementation than that that got into Firefox nightlies not too long ago (see &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;07&#x2F;13&#x2F;rss_feed_integration_in_firefox.php&quot;&gt;RSS feed integration in Firefox&lt;&#x2F;a&gt;). Most of the code is based off the &lt;a href=&quot;http:&#x2F;&#x2F;forumzilla.mozdev.org&#x2F;&quot;&gt;Forumzilla&lt;&#x2F;a&gt; extension, so if you want a preview of how it &lt;em&gt;could&lt;&#x2F;em&gt; look, grab and install &lt;a href=&quot;http:&#x2F;&#x2F;forumzilla.mozdev.org&#x2F;&quot;&gt;Forumzilla&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h4&gt;Blocking remote images&lt;&#x2F;h4&gt;
&lt;p&gt;Remote images in emails will also be blocked by default (this can be changed by going Tools -&gt; Options -&gt; Advanced and unchecking &quot;Block loading of remote images in mail messages.&quot;). This has 2 main uses: protecting your privacy just in case someone is looking over your shoulder (though one can only imagine what images are so private!), and preventing the remote request from being sent (thereby preventing spammers from being able to detect that your account is active).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of blocked remote images in Thunderbird preview panel&quot; src=&quot;&#x2F;assets&#x2F;tb-block-remote-img.png&quot; width=&quot;314&quot; height=&quot;87&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4&gt;Global Inbox for POP3 accounts&lt;&#x2F;h4&gt;
&lt;p&gt;There will also be a single global inbox that you can use for storing messages from multiple POP3 accounts. This will come as an alternative to the current way POP3 accounts are handled - each POP3 account has it&#x27;s own inbox and folders.&lt;&#x2F;p&gt;
&lt;p&gt;The Global Inbox option will be given to you when you setup a new POP3 account:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Global Inbox option when setting up a new account&quot; src=&quot;&#x2F;assets&#x2F;tb-global-inbox-opt.png&quot; width=&quot;329&quot; height=&quot;163&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4&gt;Get All Mail functionality&lt;&#x2F;h4&gt;
&lt;p&gt;And yes! The much missed &quot;Get All Mail&quot; functionality will be in Thunderbird 0.8.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Get All Mail functionality&quot; src=&quot;&#x2F;assets&#x2F;tb-get-all-mail.png&quot; width=&quot;223&quot; height=&quot;213&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This is sorely missed especially by people migrating from Outlook Express and Outlook where there is a &quot;Send and Receive&quot; button.&lt;&#x2F;p&gt;
&lt;h4&gt;Better quick search&lt;&#x2F;h4&gt;
&lt;p&gt;The quick search box gets a small facelift. There is now a dropdown that allows you to specify the fields to perform the search on. Very handy when you want to search text in the message body especially - no need to open up a separate dialog box.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of quick search box drop down&quot; src=&quot;&#x2F;assets&#x2F;tb-quicksearch-dd.png&quot; width=&quot;198&quot; height=&quot;134&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4&gt;Wrapping up&lt;&#x2F;h4&gt;
&lt;p&gt;Thunderbird 0.8 will also come with the usual bugfixes as well as Mozilla Suite Profile Migration and improved spell checker support. This is gearing up to be an excellent email client as more bugs get ironed out. I&#x27;ve switched. Have you?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot; title=&quot;Get Thunderbird - Reclaim Your Inbox&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;reclaimyourinbox_large.png&quot; width=&quot;185&quot; height=&quot;105&quot; border=&quot;0&quot; alt=&quot;Get Thunderbird&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>IE development team has a blog!</title>
    <published>2004-07-23T00:02:36+00:00</published>
    <updated>2004-07-23T00:02:36+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/23/ie-development-team-has-a-blog/"/>
    <id>https://chuyeow.wtf/2004/07/23/ie-development-team-has-a-blog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/23/ie-development-team-has-a-blog/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;blogs.msdn.com&#x2F;ie&#x2F;&quot;&gt;IEBlog&lt;&#x2F;a&gt; is the official &#x27;Microsoft Internet Explorer Weblog&#x27;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Some of us have our individual blogs today, but we also wanted to have one that was focused on what we do every day at work – &lt;strong&gt;make Internet Explorer the best way for browsing the web&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Lookout Firefox!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>An interim weblog report</title>
    <published>2004-07-22T23:41:45+00:00</published>
    <updated>2004-07-22T23:41:45+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/22/an-interim-weblog-report/"/>
    <id>https://chuyeow.wtf/2004/07/22/an-interim-weblog-report/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/22/an-interim-weblog-report/">&lt;p&gt;I was just thinking how it&#x27;s been ages since I last did one of those monthly reports where I mention website statistics for this site - the last was &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;01&#x2F;02&#x2F;the_monthly_report_december_2003.php&quot;&gt;December 2003&lt;&#x2F;a&gt;. A look at the figures goes to show how little traffic and viewership I got (compared to, er, right now). 6 months ago I was getting 13,728 visits, or 442 visits daily. I&#x27;d got 65K visits last month and it&#x27;s at 60K for the first 20 days of this month - almost 3K visits daily. Nothing to shout at but it is a significant increase (for a nobody like me especially). I&#x27;ll give a shout when I get the holy PageRank 7 (which just about seems the &#x27;cap&#x27; for conventional blogs). Right.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, what has me most pleased is the &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;userdir?siteid=12846&quot;&gt;number of subscribers&lt;&#x2F;a&gt; to my RSS feed at &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;&quot;&gt;Bloglines&lt;&#x2F;a&gt;. 224 total subscribers is about a little more than I ever expected possible out of this. And Technorati says there are &lt;a href=&quot;http:&#x2F;&#x2F;www.technorati.com&#x2F;cosmos&#x2F;search.html?rank=links&amp;url=chuyeow.wtf&quot;&gt;256 Links from 196 Sources&lt;&#x2F;a&gt; pointing to this site. Chief among them is &lt;a href=&quot;http:&#x2F;&#x2F;www.kottke.org&#x2F;&quot;&gt;kottke.org&lt;&#x2F;a&gt; - even getting listed on his &lt;em&gt;linkblog&lt;&#x2F;em&gt; gave me 1000+ visits. Amazing! And I started noticing the spike in traffic in June, when I wrote &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;21&#x2F;gexodus_a_graphical_gmail_import_tool.php&quot;&gt;gExodus&lt;&#x2F;a&gt; and also quite a few posts on Firefox-related matters which were well-linked.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I&#x27;ve just begun to notice that the new ad at that I&#x27;d approved is screwing up the website layout and I think I&#x27;ve begun to forget the point of this post, so I&#x27;ll stop now with the chest-beating. My CSS has always been unsightly and there is a case of slight divitis in the sidebar too - I&#x27;ve been too lazy to do anything though and probably still am.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MT-Blacklist Updater version 0.3</title>
    <published>2004-07-21T10:34:12+00:00</published>
    <updated>2004-07-21T10:34:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/21/mt-blacklist-updater-version-03/"/>
    <id>https://chuyeow.wtf/2004/07/21/mt-blacklist-updater-version-03/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/21/mt-blacklist-updater-version-03/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.bloged.co.uk&#x2F;&quot;&gt;Ed Morris&lt;&#x2F;a&gt; wrote me earlier today regarding an insidious bug in &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;scripts&#x2F;blacklistupdater&#x2F;&quot;&gt;MT-Blacklist Updater&lt;&#x2F;a&gt; (well, not so much an insidious bug as a logical error on my part). It all started when Ed discovered an annoying (but non-critical) bug:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I noticed that if there is an addition for a site in the changes RSS and then a deletion for that same site in the same changes file then it adds the site to the blacklist and then removes it every time the updater script is run.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;When he tried to write a patch for this bug, Ed discovered a more major bug:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I realised that if a site were deleted and then re-added to the blacklist in the same changes file, the site would never get re-added locally (well it would briefly), as all deletions are carried out after additions in the script.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Notice how I like to quote him instead of paraphrasing - a sure sign of... something. I don&#x27;t know what. Anyway, he fixed the entire damn thing and sent the patch over to me in the same email. All I had to do was to copy over the fixes (don&#x27;t worry Ed, your PHP&#x27;s great).&lt;&#x2F;p&gt;
&lt;p&gt;So, if you have an existing installation of &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;scripts&#x2F;blacklistupdater&#x2F;&quot;&gt;MT-Blacklist Updater&lt;&#x2F;a&gt;, update it to &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;scripts&#x2F;blacklistupdater&#x2F;&quot;&gt;version 0.3&lt;&#x2F;a&gt; if you don&#x27;t want it to miss any re-added blacklist entries (only those that appear at the same time in the MT-Blacklist changes feed - see Ed&#x27;s explanation above).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gotta love those PHP error messages</title>
    <published>2004-07-20T22:41:19+00:00</published>
    <updated>2004-07-20T22:41:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/20/gotta-love-those-php-error-messages/"/>
    <id>https://chuyeow.wtf/2004/07/20/gotta-love-those-php-error-messages/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/20/gotta-love-those-php-error-messages/">&lt;p&gt;Coding Object Oriented PHP sure has its perks, one of which is the mildly amusing error message I chanced upon below (in an implementation session that turned out to be a major debugging frenzy).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;parse error, unexpected T_PAAMAYIM_NEKUDOTAYIM&quot; src=&quot;&#x2F;assets&#x2F;T_PAAMAYIM_NEKUDOTAYIM.png&quot; width=&quot;330&quot; height=&quot;81&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A quick search &lt;a href=&quot;http:&#x2F;&#x2F;computingnews.com&#x2F;article&#x2F;php.version4&#x2F;19&quot;&gt;reveals&lt;&#x2F;a&gt; the cryptic error error message to mean &#x27;a pair of colons&#x27; in Hebrew. You get that when you leave in an extra &#x27;$&#x27; when addressing a class method, such as:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;$SomeObject::someMethod();&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And no class-wide static variables in pre-version 5 PHP? Does not compute...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Can you say &quot;Best Programming of a Weblog&quot;?</title>
    <published>2004-07-19T00:19:00+00:00</published>
    <updated>2004-07-19T00:19:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/19/can-you-say-best-programming-of-a-weblog/"/>
    <id>https://chuyeow.wtf/2004/07/19/can-you-say-best-programming-of-a-weblog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/19/can-you-say-best-programming-of-a-weblog/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.1976design.com&#x2F;blog&#x2F;&quot;&gt;Dunstan Orchard&lt;&#x2F;a&gt; has released &lt;a href=&quot;http:&#x2F;&#x2F;www.1976design.com&#x2F;blog&#x2F;archive&#x2F;2004&#x2F;07&#x2F;17&#x2F;version-2&#x2F;&quot;&gt;Version 2&lt;&#x2F;a&gt; of his weblog and it is good. I mean really good (good enough for me to write a whole blog entry on it). &lt;a href=&quot;http:&#x2F;&#x2F;www.1976design.com&#x2F;blog&#x2F;archive&#x2F;2004&#x2F;07&#x2F;17&#x2F;version-2&#x2F;&quot;&gt;Read more&lt;&#x2F;a&gt; about the amazing plumbing job he did.&lt;&#x2F;p&gt;
&lt;p&gt;Dunstan didn&#x27;t win &lt;a href=&quot;http:&#x2F;&#x2F;2004.bloggies.com&#x2F;&quot;&gt;the 2004 Bloggies&lt;&#x2F;a&gt; (too bad there aren&#x27;t any id hooks for me to link directly to the &quot;best programming of a weblog site&quot; section), but he almost surely will win the 2005 Bloggies at this rate.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Show saved passwords option in Firefox</title>
    <published>2004-07-18T20:35:26+00:00</published>
    <updated>2004-07-18T20:35:26+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/18/show-saved-passwords-option-in-firefox/"/>
    <id>https://chuyeow.wtf/2004/07/18/show-saved-passwords-option-in-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/18/show-saved-passwords-option-in-firefox/">&lt;p&gt;Checked into yesterday&#x27;s (2004-07-17) aviary (Firefox 1.0) branch: an &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=239241&quot; title=&quot;Read the bug report at Mozilla&#x27;s Bugzilla&quot;&gt;option to show&#x2F;display saved passwords&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;To check it out, grab yesterday&#x27;s (2004-07-17) &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;2004-07-17-10-0.9&#x2F;Firefox-win32.zip&quot;&gt;nightly branch build&lt;&#x2F;a&gt;, go to Tools -&gt; Options -&gt; Privacy, and select the Saved Passwords option.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of saved passwords option&quot; src=&quot;&#x2F;assets&#x2F;firefox-saved-passwords.png&quot; width=&quot;318&quot; height=&quot;198&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Click on View Saved Passwords to see the Password Manager and you&#x27;ll see a Show Passwords button at the bottom right. That&#x27;s new.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Password Manager&quot; src=&quot;&#x2F;assets&#x2F;firefox-password-mgr.png&quot; width=&quot;315&quot; height=&quot;309&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You get a confirmation dialog (supposedly because showing your passwords is an important event). I think the intended use of the confirmation dialog is to save you from inadvertently showing your passwords to someone looking over your shoulder.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;
&lt;img alt=&quot;Screenshot of confirmation dialog when clicking Show Passwords&quot; src=&quot;&#x2F;assets&#x2F;firefox-password-mgr-confirm.png&quot; width=&quot;314&quot; height=&quot;224&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And your passwords are then shown in the plain text glory (mine are &quot;pinked out&quot; in the screenshot below, of course).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Password Manager with passwords showing&quot; src=&quot;&#x2F;assets&#x2F;firefox-password-mgr-pass.png&quot; width=&quot;312&quot; height=&quot;306&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Looking at my list of passwords, I am beginning to think I&#x27;m not a very secure person (identical passwords for different accounts, using the same passwords for long periods, and passwords shorter than 8 characters).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Favicons and bookmarks now work properly in Firefox</title>
    <published>2004-07-18T20:03:38+00:00</published>
    <updated>2004-07-18T20:03:38+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/18/favicons-and-bookmarks-now-work-properly-in-firefox/"/>
    <id>https://chuyeow.wtf/2004/07/18/favicons-and-bookmarks-now-work-properly-in-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/18/favicons-and-bookmarks-now-work-properly-in-firefox/">&lt;p&gt;Checked into the Firefox aviary (codename for Firefox 1.0) branch: fixes for bugs &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=174265&quot;&gt;174265&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=173762&quot;&gt;173762&lt;&#x2F;a&gt;, and &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=228862&quot;&gt;228862&lt;&#x2F;a&gt;. All bugs with favicons and bookmarks: &quot;&lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=174265&quot;&gt;Wrong favicons in bookmarks&lt;&#x2F;a&gt;&quot;, &quot;&lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=173762&quot;&gt;Favicons are forgotten after shutdown&lt;&#x2F;a&gt;&quot;, and &quot;&lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=228862&quot;&gt;Store icons in bookmarks.html&lt;&#x2F;a&gt;&quot; respectively. All fixed by &lt;a href=&quot;http:&#x2F;&#x2F;www.vlad1.com&#x2F;&quot;&gt;Vladimir Vukicevic&lt;&#x2F;a&gt; with some clever JavaScript that fetches the favicons from the URL of each bookmark.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;firefox-favicons-bookmarks.png&quot; src=&quot;&#x2F;assets&#x2F;firefox-favicons-bookmarks.png&quot; width=&quot;327&quot; height=&quot;294&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Pretty!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Split a webpage into 2 with this bookmarklet</title>
    <published>2004-07-18T00:40:14+00:00</published>
    <updated>2004-07-18T00:40:14+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/18/split-a-webpage-into-2-with-this-bookmarklet/"/>
    <id>https://chuyeow.wtf/2004/07/18/split-a-webpage-into-2-with-this-bookmarklet/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/18/split-a-webpage-into-2-with-this-bookmarklet/">&lt;p&gt;Cedric asked for &lt;a href=&quot;http:&#x2F;&#x2F;beust.com&#x2F;weblog&#x2F;archives&#x2F;000153.html&quot;&gt;Document-splitting in Web browsers&lt;&#x2F;a&gt; and promptly &lt;a href=&quot;http:&#x2F;&#x2F;www.jmesnil.net&#x2F;weblog&#x2F;2004&#x2F;07&#x2F;bookmarklet-to-split-html-document.html&quot;&gt;got it&lt;&#x2F;a&gt; (read the comment by &lt;a href=&quot;http:&#x2F;&#x2F;www.jmesnil.net&#x2F;weblog&#x2F;&quot;&gt;Jeff Mesnil&lt;&#x2F;a&gt; in Cedric&#x27;s blog entry).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.jmesnil.net&#x2F;weblog&#x2F;&quot;&gt;Jeff Mesnil&lt;&#x2F;a&gt; whipped up &lt;a href=&quot;http:&#x2F;&#x2F;www.jmesnil.net&#x2F;weblog&#x2F;2004&#x2F;07&#x2F;bookmarklet-to-split-html-document.html&quot;&gt;2 bookmarklets&lt;&#x2F;a&gt; in the space of less than one and a half hours that allows you to split a browser into 2 frames. How does it do that? It loads the current URL in a frameset consisting of 2 frames (both showing the same URL). A simple, yet genius, idea.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a screenshot of a blog entry split vertically:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;screenshots&#x2F;webbrowser-split-vertical.png&quot; title=&quot;Click to view a bigger image&quot;&gt;&lt;img alt=&quot;Screenshot of webbrowser split vertically&quot; src=&quot;&#x2F;assets&#x2F;webbrowser-split-vertical-s.gif&quot; width=&quot;320&quot; height=&quot;240&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Notice how it could be useful when cross-referencing something on the same webpage, particularly if it&#x27;s a long vertical-scrolling page. A perfect use case would be referring back to a long blog entry when making a comment.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s the same page split horizontally.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;screenshots&#x2F;webbrowser-split-horizontal.png&quot; title=&quot;Click to view a bigger image&quot;&gt;&lt;img alt=&quot;Screenshot of webbrowser split horizontally&quot; src=&quot;&#x2F;assets&#x2F;webbrowser-split-horizontal-s.gif&quot; width=&quot;320&quot; height=&quot;240&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There are probably lots of other use cases for a webpage splitter. Cedric&#x27;s in particular is this:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Just recently, I was reading an article that showed a figure at the top and which constantly referred to this figure in the rest of the article.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Thanks &lt;a href=&quot;http:&#x2F;&#x2F;www.jmesnil.net&#x2F;weblog&#x2F;&quot;&gt;Jeff&lt;&#x2F;a&gt; for writing the bookmarklets and &lt;a href=&quot;http:&#x2F;&#x2F;beust.com&#x2F;weblog&#x2F;&quot;&gt;Cedric&lt;&#x2F;a&gt; for thinking of it.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>admin=false</title>
    <published>2004-07-15T10:06:44+00:00</published>
    <updated>2004-07-15T10:06:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/15/adminfalse/"/>
    <id>https://chuyeow.wtf/2004/07/15/adminfalse/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/15/adminfalse/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;thedailywtf.com&#x2F;&quot;&gt;TheDailyWTF&lt;&#x2F;a&gt; is great. If you develop or have developed web applications before, you will appreciate this entry: &lt;a href=&quot;http:&#x2F;&#x2F;thedailywtf.com&#x2F;archive&#x2F;2004&#x2F;07&#x2F;14&#x2F;561.aspx&quot;&gt;Admin=False&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Can&#x27;t ditch IE because of Google PageRank? Now you can</title>
    <published>2004-07-15T00:00:52+00:00</published>
    <updated>2004-07-15T00:00:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/15/cant-ditch-ie-because-of-google-pagerank-now-you-can/"/>
    <id>https://chuyeow.wtf/2004/07/15/cant-ditch-ie-because-of-google-pagerank-now-you-can/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/15/cant-ditch-ie-because-of-google-pagerank-now-you-can/">&lt;p&gt;With the &lt;a href=&quot;http:&#x2F;&#x2F;pagerankstatus.mozdev.org&#x2F;&quot;&gt;Google Pagerank extension&lt;&#x2F;a&gt;! This is a Firefox 0.9.x compatible extension that adds a &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;technology&#x2F;&quot;&gt;Google PageRank&lt;&#x2F;a&gt; widget to the statusbar.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;it acts exactly as the real googlebar on IE: calculate a checksum, send a request to google.com (with the googlebar User-Agent string), and the reply contains the pagerank.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Google PageRank extension in action&quot; src=&quot;&#x2F;assets&#x2F;pagerank-ext-in-action.png&quot; width=&quot;309&quot; height=&quot;233&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Grab it from &lt;a href=&quot;http:&#x2F;&#x2F;pagerankstatus.mozdev.org&#x2F;installation.html&quot;&gt;installation section&lt;&#x2F;a&gt; or the &lt;a href=&quot;http:&#x2F;&#x2F;www.tapouillo.com&#x2F;firefox_extension&#x2F;&quot;&gt;author&#x27;s website&lt;&#x2F;a&gt;. (Note: Firefox should prompt and say something to the effect that the installation has been blocked. You can trust this extension, so click on the &quot;Edit Settings&quot; button that appears and allow the installation.)&lt;&#x2F;p&gt;
&lt;p&gt;It updates when you switch tabs (it could take a while depending on your Internet connection), in case you were going to ask.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Google PageRank extension in the extension manager&quot; src=&quot;&#x2F;assets&#x2F;pagerank-ext-listing.png&quot; width=&quot;318&quot; height=&quot;97&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>PHP 5 released!</title>
    <published>2004-07-14T10:18:31+00:00</published>
    <updated>2004-07-14T10:18:31+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/14/php-5-released/"/>
    <id>https://chuyeow.wtf/2004/07/14/php-5-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/14/php-5-released/">&lt;p&gt;Freshly-baked newsbit: &lt;a href=&quot;http:&#x2F;&#x2F;www.php.net&#x2F;&quot;&gt;PHP 5.0.0&lt;&#x2F;a&gt; has just been released not too long ago. How long will it take for PHP 5 to become mainstream in webservers around the world? It&#x27;s anybody&#x27;s guess.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google-like search engine for BitTorrent files</title>
    <published>2004-07-13T22:31:41+00:00</published>
    <updated>2004-07-13T22:31:41+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/13/google-like-search-engine-for-bittorrent-files/"/>
    <id>https://chuyeow.wtf/2004/07/13/google-like-search-engine-for-bittorrent-files/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/13/google-like-search-engine-for-bittorrent-files/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.bitoogle.com&#x2F;&quot;&gt;bitoogle&lt;&#x2F;a&gt; - the BitTorrent file search engine.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of bitoogle main page&quot; src=&quot;&#x2F;assets&#x2F;bitoogle-main.png&quot; width=&quot;318&quot; height=&quot;194&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It even allows you to see the torrent statistics like the number of seeds and leeches. And it works!&lt;&#x2F;p&gt;
&lt;p&gt;Hmm... I wonder how it works.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Seen elsewhere: New features since Firefox 0.9</title>
    <published>2004-07-13T22:09:43+00:00</published>
    <updated>2004-07-13T22:09:43+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/13/seen-elsewhere-new-features-since-firefox-09/"/>
    <id>https://chuyeow.wtf/2004/07/13/seen-elsewhere-new-features-since-firefox-09/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/13/seen-elsewhere-new-features-since-firefox-09/">&lt;p&gt;Once again, &lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;&quot;&gt;Neil Turner&lt;&#x2F;a&gt; has the low-down on the new features in the next incarnation of Mozilla Firefox.&lt;&#x2F;p&gt;
&lt;p&gt;Read &lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;2004&#x2F;Jul&#x2F;13&#x2F;more_on_new_firefox_features.html&quot;&gt;More on new Firefox features&lt;&#x2F;a&gt; at his &lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;&quot;&gt;weblog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Better UI for blocked popups in Firefox</title>
    <published>2004-07-13T01:44:37+00:00</published>
    <updated>2004-07-13T01:44:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/13/better-ui-for-blocked-popups-in-firefox/"/>
    <id>https://chuyeow.wtf/2004/07/13/better-ui-for-blocked-popups-in-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/13/better-ui-for-blocked-popups-in-firefox/">&lt;p&gt;Another new feature (available in &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-0.9&#x2F;&quot;&gt;nightly builds&lt;&#x2F;a&gt; from today): a XP SP2-like yellow bar appears at the top of your Firefox window&#x27;s viewport notifying you of blocked popups. Click on it and it gives you similar options on whether to allow the popup(s).&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s how it looks in Firefox:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Firefox blocked popup UI&quot; src=&quot;&#x2F;assets&#x2F;firefox-blocked-popup.png&quot; width=&quot;307&quot; height=&quot;84&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And this is how it looks like in IE with XP SP2 (Release Candidate 2) installed:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of XP SP2 blocked popup UI in IE&quot; src=&quot;&#x2F;assets&#x2F;xpsp2-blocked-popup.png&quot; width=&quot;292&quot; height=&quot;20&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of XP SP2 blocked popup UI in IE with context menu&quot; src=&quot;&#x2F;assets&#x2F;xpsp2-blocked-popup-full.png&quot; width=&quot;292&quot; height=&quot;86&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Half Life 2 system requirements revealed!</title>
    <published>2004-07-13T01:21:46+00:00</published>
    <updated>2004-07-13T01:21:46+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/13/half-life-2-system-requirements-revealed/"/>
    <id>https://chuyeow.wtf/2004/07/13/half-life-2-system-requirements-revealed/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/13/half-life-2-system-requirements-revealed/">&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;www.eurogamer.net&#x2F;article.php?article_id=56017&quot;&gt;Eurogamer&lt;&#x2F;a&gt; via &lt;a href=&quot;http:&#x2F;&#x2F;www.neowin.net&#x2F;comments.php?id=22151&amp;category=gamers&quot;&gt;Neowin.net&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;But for those who want to see the game running in all its glory, be prepared to spec up to around a 2.4 GHz machine, with 512MB RAM, Windows 2000&#x2F;XP and a DirectX 9 capable graphics card.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;2.4 GHz machine - &lt;strong&gt;check&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
512MB RAM - &lt;strong&gt;check&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
Windows 2000&#x2F;XP - &lt;strong&gt;Duh!&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
DirectX 9 capable graphics card - &lt;strong&gt;check&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Looks like I don&#x27;t have to upgrade (again) for Half Life 2.&lt;&#x2F;p&gt;
&lt;p&gt;Man, could you believe I actually posted a blog entry on the &lt;em&gt;specifications&lt;&#x2F;em&gt; of a computer game? But then again, we&#x27;re talking about &lt;strong&gt;Half Life 2&lt;&#x2F;strong&gt; here guys.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Online promotion of software products</title>
    <published>2004-07-13T01:09:38+00:00</published>
    <updated>2004-07-13T01:09:38+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/13/online-promotion-of-software-products/"/>
    <id>https://chuyeow.wtf/2004/07/13/online-promotion-of-software-products/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/13/online-promotion-of-software-products/">&lt;p&gt;Another call for help and advice. I can&#x27;t really resist it because I&#x27;ve been seeing so much success in my appeals for assistance before.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m looking for advice&#x2F;articles&#x2F;tutorials on online promotion, more specifically online promotion of software products.&lt;&#x2F;p&gt;
&lt;p&gt;At the moment, I have these on my list of things to do:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Google Adwords&lt;&#x2F;li&gt;
&lt;li&gt;Submission to software listing sites&lt;&#x2F;li&gt;
&lt;li&gt;SEO&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;What else is there and why?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>RSS feed integration in Firefox</title>
    <published>2004-07-13T00:44:21+00:00</published>
    <updated>2004-07-13T00:44:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/13/rss-feed-integration-in-firefox/"/>
    <id>https://chuyeow.wtf/2004/07/13/rss-feed-integration-in-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/13/rss-feed-integration-in-firefox/">&lt;p&gt;Recently added to the Firefox feature list: Live Bookmarks (or Livemarks). Livemarks weren&#x27;t initially intended to make it into Firefox 1.0, as Ben Goodger &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=244078#c1&quot;&gt;commented&lt;&#x2F;a&gt; when he filed &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=244078&quot;&gt;bug 244078&lt;&#x2F;a&gt;. It seems like they will make it anyway, and have already appeared in &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-0.9&#x2F;&quot;&gt;nightly branch builds&lt;&#x2F;a&gt; since 2004-07-08.&lt;&#x2F;p&gt;
&lt;p&gt;Livemarks allow you to bookmark an RSS feed and these appear as bookmark folders, with individual items in the feed appearing as bookmarks. Just click on the &quot;bookmark&quot; and you will be taken to the page the item in the RSS feed is pointing to.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Livemarks folder on Bookmarks toolbar&quot; src=&quot;&#x2F;assets&#x2F;livemarks-folder.png&quot; width=&quot;300&quot; height=&quot;116&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A lightning bolt icon appears on sites which have the &lt;span style=&quot;font:monospaced&quot;&gt;&amp;lt;link rel=&quot;alternate&quot; type=&quot;application&#x2F;rss+xml&quot; title=&quot;RSS&quot; href=&quot;http:&#x2F;&#x2F;www.example.com&#x2F;index.xml&quot; &#x2F;&amp;gt;&lt;&#x2F;span&gt; bit in the &lt;span style=&quot;font:monospaced&quot;&gt;&amp;lt;head&amp;gt;&lt;&#x2F;span&gt; tags. All you got to do is to click on the icon and choose from the syndication formats available.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Livemarks icon&quot; src=&quot;&#x2F;assets&#x2F;livemarks-icon.png&quot; width=&quot;111&quot; height=&quot;70&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s even a &quot;Refresh Livemark&quot; context menu option to keep your Livemarks up to date.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Livemarks Refresh context menu option&quot; src=&quot;&#x2F;assets&#x2F;livemarks-refresh.png&quot; width=&quot;217&quot; height=&quot;208&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Not anything that would take me away from the current &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;&quot;&gt;RSS aggregator I use&lt;&#x2F;a&gt;, but the integration with the bookmarking system is a very intuitive model that would fit into most people&#x27;s conceptual model of RSS feeds and bookmarks. I mean, an RSS feed is as good as a bookmark you keep somewhere (only it feeds you live content). RSS feed -&gt; bookmark folder, RSS feed item -&gt; bookmark. Gels nicely for me.&lt;&#x2F;p&gt;
&lt;p&gt;Get a &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-0.9&#x2F;&quot;&gt;nightly branch build&lt;&#x2F;a&gt; if you&#x27;re interested to see it in action for yourself.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>&quot;Switch to Firefox&quot;, better browser sites</title>
    <published>2004-07-12T22:33:43+00:00</published>
    <updated>2004-07-12T22:33:43+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/12/switch-to-firefox-better-browser-sites/"/>
    <id>https://chuyeow.wtf/2004/07/12/switch-to-firefox-better-browser-sites/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/12/switch-to-firefox-better-browser-sites/">&lt;p&gt;With the gaining popularity of &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;Firefox&lt;&#x2F;a&gt; and alternative browsers (&quot;alternative&quot; meaning non-IE), I&#x27;ve noticed a sudden increase in the number of sites advocating specific browsers. People are obsessed with the new browser wars (this time, it&#x27;s a &quot;good&quot; war) and rightly so if your browser is the one application you use 90% of the time on your computer.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.switch2firefox.com&#x2F;switch&#x2F;&quot;&gt;www.switch2firefox.com&#x2F;switch&#x2F;&lt;&#x2F;a&gt; seems to be a popular one recently. Hao2lian also &lt;a href=&quot;http:&#x2F;&#x2F;earth.prohosting.com&#x2F;hao2lian&#x2F;firefoxwhy&#x2F;&quot;&gt;has one&lt;&#x2F;a&gt; (and he&#x27;s right - &lt;a href=&quot;http:&#x2F;&#x2F;hao2lian.blogspot.com&#x2F;2004&#x2F;07&#x2F;its-quite-sad.html&quot;&gt;nobody knew about it&lt;&#x2F;a&gt;, or at least I didn&#x27;t!). &lt;a href=&quot;http:&#x2F;&#x2F;www.betterbrowser.org&#x2F;&quot;&gt;www.betterbrowser.org&lt;&#x2F;a&gt; recommends Firefox and &lt;a href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;safari&#x2F;&quot;&gt;Safari&lt;&#x2F;a&gt;. There was also the old &lt;a href=&quot;http:&#x2F;&#x2F;giantfightingrobots.com&#x2F;betterbrowser.html&quot;&gt;giantfightingrobots.com page&lt;&#x2F;a&gt; which now appears to be defunct. Check out this &lt;a href=&quot;http:&#x2F;&#x2F;toastytech.com&#x2F;good&#x2F;index.html&quot;&gt;Mozilla kicks ass!&lt;&#x2F;a&gt; page too.&lt;&#x2F;p&gt;
&lt;p&gt;Someone even bought the &lt;a href=&quot;http:&#x2F;&#x2F;getfirefox.com&#x2F;&quot;&gt;getfirefox.com&lt;&#x2F;a&gt; domain as a shortcut URL for &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Anybody seen anymore of these?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Dell stops shipping Windows on all its computers</title>
    <published>2004-07-12T22:11:49+00:00</published>
    <updated>2004-07-12T22:11:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/12/dell-stops-shipping-windows-on-all-its-computers/"/>
    <id>https://chuyeow.wtf/2004/07/12/dell-stops-shipping-windows-on-all-its-computers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/12/dell-stops-shipping-windows-on-all-its-computers/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.newsforge.com&#x2F;article.pl?sid=04&#x2F;07&#x2F;07&#x2F;1848210&quot;&gt;On Newsforge&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt; After being berated by Microsoft for attempting to sell Linux on some of the company&#x27;s desktop systems, Dell has decided to stop selling Windows altogether.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;&lt;p&gt;Gateway spokesman William Bradley said of Dell&#x27;s move, &quot;I&#x27;m glad to hear Dell will be selling less expensive computers without the Microsoft tax -- we&#x27;ll finally be able to upgrade the computers around the office.&quot;&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>New Find Toolbar for Mozilla Firefox</title>
    <published>2004-07-09T01:53:58+00:00</published>
    <updated>2004-07-09T01:53:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/09/new-find-toolbar-for-mozilla-firefox/"/>
    <id>https://chuyeow.wtf/2004/07/09/new-find-toolbar-for-mozilla-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/09/new-find-toolbar-for-mozilla-firefox/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;archives&#x2F;000494.html&quot;&gt;The Burning Edge reports&lt;&#x2F;a&gt; on the new Find Toolbar for Mozilla Firefox that brings the much unknown Find As You Type feature to the fore, at least in terms of GUI presence. This feature has just been checked in into the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-0.9&#x2F;&quot;&gt;branch builds of Firefox&lt;&#x2F;a&gt; (and as such is a little buggy). To bring up the Find Toolbar, you need to press Ctrl-F or &#x2F; (and then start typing).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Find As You Type toolbar in action&quot; src=&quot;&#x2F;assets&#x2F;fayt-toolbar.png&quot; width=&quot;324&quot; height=&quot;173&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The &quot;Find as you type&quot; function is not new to Firefox and has been in there for a long time. You may not have realized it before. If you have a version (or build) of Firefox that you got hold of before today, you could just start typing the word (or words) that you want to find and Firefox will incrementally find and highlight the first instance of the word that matches what you type.&lt;&#x2F;p&gt;
&lt;p&gt;Now you need to press Ctrl-F or &#x2F; to bring up the Find As You Type functionality (and the new toolbar). Some people have already been screaming at inconvenience of the extra keystroke (or keystroke&lt;em&gt;s&lt;&#x2F;em&gt; if you use Ctrl-F) - I certainly don&#x27;t like it because I&#x27;m what I&#x27;d like to call an &lt;em&gt;entrenched&lt;&#x2F;em&gt; user of Find As You Type. It&#x27;s hard for me to adjust and seems painfully inconvenient. But the truth of it probably is that it&#x27;s just 1 extra keystroke and should be something one can get used to. Especially if the benefit is increased visibility of the (amazing) Find As You Type feature (which, if I may add, was first seen on the &lt;a href=&quot;http:&#x2F;&#x2F;www.opera.com&#x2F;&quot;&gt;Opera web browser&lt;&#x2F;a&gt;) - if more people knew of this productivity feature, I&#x27;m pretty sure they&#x27;d stick around with Firefox. If it will get more people using Firefox, I&#x27;m ready to compromise (or if not, there&#x27;d probably be an extension in the future which disables the new Find Toolbar).&lt;&#x2F;p&gt;
&lt;p&gt;Also new in the Find Toolbar is a Highlight button that highlights all the matching text on the webpage. No complaints against this one. Great stuff.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Find As You Type toolbar Highlight function in action&quot; src=&quot;&#x2F;assets&#x2F;fayt-toolbar-highlight.png&quot; width=&quot;324&quot; height=&quot;160&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Bloglines gets much cooler</title>
    <published>2004-07-08T01:35:43+00:00</published>
    <updated>2004-07-08T01:35:43+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/08/bloglines-gets-much-cooler/"/>
    <id>https://chuyeow.wtf/2004/07/08/bloglines-gets-much-cooler/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/08/bloglines-gets-much-cooler/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;&quot;&gt;Bloglines&lt;&#x2F;a&gt; turned 1 not too long ago and crikey(!) did they add a some cool new features to the plain old feed aggregator. The new look is also a refreshing change (though the old utilitarian look suited me just fine too).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Sceen capture of new Bloglines look&quot; src=&quot;&#x2F;assets&#x2F;bloglines-new-look.png&quot; width=&quot;353&quot; height=&quot;117&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;about&#x2F;clipblog&quot;&gt;Clip Blog&lt;&#x2F;a&gt; feature is perhaps the very coolest. It&#x27;s a convenient way to save &quot;clippings&quot; from blogs or sites you read in Bloglines.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Bloglines Clip Board administration interface&quot; src=&quot;&#x2F;assets&#x2F;bloglines-clipblog-admin.png&quot; width=&quot;256&quot; height=&quot;95&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Bloglines &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;about&#x2F;clipblog&quot;&gt;explains&lt;&#x2F;a&gt; what Clip Blogs are for:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;When you see something you want to save or share in your feeds, just one click posts it to your Bloglines Clip Blog.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;I have mine setup &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;blog&#x2F;redemption&quot;&gt;right here&lt;&#x2F;a&gt; to play around with. The unfortunate thing is that there is no RSS feed to it (there is a &quot;Subscribe&quot; link, but it seems to be in a Bloglines-specific format). It works fine within Bloglines though, and that&#x27;s the whole idea I guess.&lt;&#x2F;p&gt;
&lt;p&gt;And finally, I can get Bloglines to sort my feeds. I have a &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;public&#x2F;redemption&quot;&gt;whole lot of them&lt;&#x2F;a&gt; (on the right sidebar) and they were sorted by the date I added them. Not the best arrangement but it&#x27;s grown so big I just couldn&#x27;t get down to organizing them into folders. Well, at least alphabetical sorting is slightly better. I&#x27;m not sure if this is new, but I noticed I can now check a box next to each feed and move them into folders.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Bloglines feed organization&quot; src=&quot;&#x2F;assets&#x2F;bloglines-organize.png&quot; width=&quot;236&quot; height=&quot;327&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And this &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;citations&quot;&gt;citations search feature&lt;&#x2F;a&gt; doesn&#x27;t beat &lt;a href=&quot;http:&#x2F;&#x2F;technorati.com&#x2F;&quot;&gt;Technorati&lt;&#x2F;a&gt;, but it keeps track of &lt;strong&gt;all&lt;&#x2F;strong&gt; citations to date (whereas in Technorati, old backlinks drop off the listings).&lt;&#x2F;p&gt;
&lt;p&gt;Bloglines made Time Magazine&#x27;s list of &lt;a href=&quot;http:&#x2F;&#x2F;www.time.com&#x2F;time&#x2F;techtime&#x2F;200406&#x2F;&quot;&gt;50 coolest websites&lt;&#x2F;a&gt; and it deserves to be there. If you use a RSS reader or feed aggregator of some sort, and are disatisfied with it in some way, give &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&quot;&gt;Bloglines&lt;&#x2F;a&gt; a go.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>My Firefox search article gets Slashdotted (by proxy)</title>
    <published>2004-07-08T00:53:18+00:00</published>
    <updated>2004-07-08T00:53:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/08/my-firefox-search-article-gets-slashdotted-by-proxy/"/>
    <id>https://chuyeow.wtf/2004/07/08/my-firefox-search-article-gets-slashdotted-by-proxy/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/08/my-firefox-search-article-gets-slashdotted-by-proxy/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;&quot;&gt;Forever Geek&lt;&#x2F;a&gt; was &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;forever_geek&#x2F;looking_for_articles.php&quot;&gt;looking for articles&lt;&#x2F;a&gt; not a while back, and I thought, &quot;what the heck&quot; why don&#x27;t I just ask &lt;a href=&quot;http:&#x2F;&#x2F;www.9rules.com&#x2F;whitespace&#x2F;&quot;&gt;Paul Scrivens&lt;&#x2F;a&gt; (Paul is the main Forever Geek guy) if he&#x27;d like to publish my old &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;04&#x2F;23&#x2F;outsearch_with_firefox.php&quot;&gt;original Outsearch with Firefox article&lt;&#x2F;a&gt;. Even though he did say in his post that he didn&#x27;t want articles that were published elsewhere before ;).&lt;&#x2F;p&gt;
&lt;p&gt;Well, he did publish it and the &lt;a href=&quot;http:&#x2F;&#x2F;forevergeek.com&#x2F;articles&#x2F;outfox_outsearch_with_firefox.php&quot;&gt;Outsearch with Firefox article at Forever Geek&lt;&#x2F;a&gt; was &lt;a href=&quot;http:&#x2F;&#x2F;developers.slashdot.org&#x2F;article.pl?sid=04&#x2F;07&#x2F;07&#x2F;0752248&quot;&gt;Slashdotted&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Novell gives away SUSE Linux 9.1 Pro and more</title>
    <published>2004-07-07T10:49:25+00:00</published>
    <updated>2004-07-07T10:49:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/07/novell-gives-away-suse-linux-91-pro-and-more/"/>
    <id>https://chuyeow.wtf/2004/07/07/novell-gives-away-suse-linux-91-pro-and-more/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/07/novell-gives-away-suse-linux-91-pro-and-more/">&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;photomatt.net&#x2F;2004&#x2F;07&#x2F;06&#x2F;free-suse&#x2F;&quot;&gt;Photo Matt&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Novell is &lt;a href=&quot;http:&#x2F;&#x2F;www.novell.com&#x2F;community&#x2F;linux&#x2F;order.php&quot;&gt;giving away the Linux Technical Resource Kit&lt;&#x2F;a&gt; for free. It contains:&lt;&#x2F;p&gt;
&lt;p&gt;- SUSE LINUX Standard Server 8.0 (ISO Installation Images)&lt;br &#x2F;&gt;
- SUSE LINUX 9.1 Professional (Bootable Installation DVD)&lt;br &#x2F;&gt;
- Ximian Desktop 2.0 Evaluation (ISO Image)&lt;br &#x2F;&gt;
- Ximian Red Carpet 2.0.2 Evaluation (ISO Image)&lt;br &#x2F;&gt;
- Novell Linux Services 1.0 (ISO Image &amp; NLS Companion CD)&lt;br &#x2F;&gt;
- Novell GroupWise for Linux 6.5.1 - Server, Client &amp; Messenger (ISO Images)&lt;br &#x2F;&gt;
- and more... &lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;We will contact you by e-mail as soon as your order ships. Delivery will be made via US Postal Service, first-class mail.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Nice.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Looking for video editing blogs</title>
    <published>2004-07-06T16:40:53+00:00</published>
    <updated>2004-07-06T16:40:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/06/looking-for-video-editing-blogs/"/>
    <id>https://chuyeow.wtf/2004/07/06/looking-for-video-editing-blogs/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/06/looking-for-video-editing-blogs/">&lt;p&gt;Help me out here. I&#x27;m looking for blogs focused on video editing, video editing software, or more generally, video-related blogs. Blogs on the topic of taking videos too.&lt;&#x2F;p&gt;
&lt;p&gt;If you know if any of these, post a comment or &lt;a href=&quot;&#x2F;contact&quot;&gt;drop me a line&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Blogupdates gets a facelift</title>
    <published>2004-07-03T01:56:55+00:00</published>
    <updated>2004-07-03T01:56:55+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/03/blogupdates-gets-a-facelift/"/>
    <id>https://chuyeow.wtf/2004/07/03/blogupdates-gets-a-facelift/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/03/blogupdates-gets-a-facelift/">&lt;p&gt;&lt;ins&gt;Update: Oh no it seems that I was wrong about the timezone bug being fixed. This entry is still appearing at the top with with the time incorrectly stated (posted &quot;5 hours 56 minutes ago&quot; at this time).&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;gemal.dk&#x2F;mozilla&#x2F;blogupdates.html&quot;&gt;Blogupdates&lt;&#x2F;a&gt; from &lt;a href=&quot;http:&#x2F;&#x2F;gemal.dk&#x2F;&quot;&gt;Henrik Gemal&lt;&#x2F;a&gt; is a Mozilla-related blog aggregator, and it has recently undergone a facelift and, more importantly for me, some reworking of the code. I say &quot;more importantly for me&quot; because for the past months (since my Mozilla category feed was added to Blogupdates), my entries were hogging top spot on Blogupdates because of a bug in the code that didn&#x27;t properly take timezones into account. Embarassing because it would&#x27;ve appeard that I was a sad no-lifer who kept updating his blog entries to keep the top spot (of course I wasn&#x27;t doing anything of this sort, though I am still a sad no-lifer). If anyone noticed this before, let it be known henceforth that my name is clear of guilt (or something like that, said in a self-righteous tone). Thanks for fixing this, Henrik!&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, if you&#x27;re a Mozilla fan, &lt;a href=&quot;http:&#x2F;&#x2F;gemal.dk&#x2F;mozilla&#x2F;blogupdates.html&quot;&gt;Blogupdates&lt;&#x2F;a&gt; is one of the &lt;strong&gt;must-see&lt;&#x2F;strong&gt; pages, perhaps even better than the &lt;a href=&quot;http:&#x2F;&#x2F;feedhouse.mozillazine.org&#x2F;&quot;&gt;MozillaZine Feedhouse&lt;&#x2F;a&gt; because it notifies you which entries are new since you last visited. But it&#x27;s really up to you to choose between them both (or you could read both), because there isn&#x27;t a real difference between them both. Though &lt;a href=&quot;http:&#x2F;&#x2F;gemal.dk&#x2F;mozilla&#x2F;blogupdates.html&quot;&gt;Blogupdates&lt;&#x2F;a&gt; did exist way before the &lt;a href=&quot;http:&#x2F;&#x2F;feedhouse.mozillazine.org&#x2F;&quot;&gt;Mozillazine Feedhouse&lt;&#x2F;a&gt; did.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>No time for gExodus - (Python) source released</title>
    <published>2004-07-01T01:26:01+00:00</published>
    <updated>2004-07-01T01:26:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/01/no-time-for-gexodus-python-source-released/"/>
    <id>https://chuyeow.wtf/2004/07/01/no-time-for-gexodus-python-source-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/01/no-time-for-gexodus-python-source-released/">&lt;p&gt;Ugh, I&#x27;ve been having less and less time to work on &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;23&#x2F;gexodus_02_some_new_features_for_gmail_mbox_import_tool.php&quot;&gt;gExodus&lt;&#x2F;a&gt; (&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;23&#x2F;gexodus_02_some_new_features_for_gmail_mbox_import_tool.php&quot;&gt;version 0.2&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;21&#x2F;gexodus_a_graphical_gmail_import_tool.php&quot;&gt;version 0.1&lt;&#x2F;a&gt; - I really should put these in a consolidated area), mainly due to work and my need to relax once I get home (well, most times I just surf around, watch anime, and blearily gaze at the TV as it screens Euro 2004 matches nowadays).&lt;&#x2F;p&gt;
&lt;p&gt;Adding support for Outlook Express (.DBX) and Outlook (.PST) email formats was something I thought would be in the offing for gExodus, but it seems that the format is just too proprietary to figure out. Arne Schloh has been working on &lt;a href=&quot;http:&#x2F;&#x2F;oedbx.aroh.de&#x2F;&quot;&gt;decoding the .DBX format&lt;&#x2F;a&gt; but only has achieved about 90% of the task. There are what seems to be very good C libraries, &lt;a href=&quot;http:&#x2F;&#x2F;sourceforge.net&#x2F;projects&#x2F;ol2mbox&#x2F;&quot;&gt;LibPST and LibDBX&lt;&#x2F;a&gt;, but I don&#x27;t really want to dive into using C libraries from Python - though if anyone is willing to shed some light, I&#x27;d be all ears. Python libraries for decoding the .DBX or .PST formats? Well, either I haven&#x27;t looked hard enough or there really aren&#x27;t any.&lt;&#x2F;p&gt;
&lt;p&gt;So that&#x27;s that, which basically means that I won&#x27;t be looking at adding Outlook Express and Outlook support to gExodus barring a breakthrough. Sorry.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I thought it would be good to release the source for gExodus as I&#x27;d promised - just for the unlikely event that someone wants to extend what little I&#x27;ve done. So here&#x27;s the Python source files for gExodus (0.2):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;gexodus&#x2F;gexodus-0.2-src.zip&quot;&gt;gexodus-0.2-src.zip&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;To run gExodus from source, you need to have installed &lt;a href=&quot;http:&#x2F;&#x2F;python.org&#x2F;&quot;&gt;Python&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.wxpython.org&#x2F;&quot;&gt;wxPython&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;pythoncard.sourceforge.net&#x2F;&quot;&gt;PythonCard&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;www.linux2000.com&#x2F;downloads&#x2F;installer_5b5_5.zip&quot;&gt;Gordon McMillan&#x27;s Installer&lt;&#x2F;a&gt; is needed to build the Windows executable. What is written &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;21&#x2F;gexodus_a_graphical_gmail_import_tool.php&quot;&gt;here&lt;&#x2F;a&gt; should help if you really want to try to work on this. Either way, do feel free to drop a line via my &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;contact&#x2F;&quot;&gt;contact form&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Post in forums a lot? BBCode is for you</title>
    <published>2004-07-01T01:02:34+00:00</published>
    <updated>2004-07-01T01:02:34+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/01/post-in-forums-a-lot-bbcode-is-for-you/"/>
    <id>https://chuyeow.wtf/2004/07/01/post-in-forums-a-lot-bbcode-is-for-you/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/01/post-in-forums-a-lot-bbcode-is-for-you/">&lt;p&gt;Came across another neat &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;Firefox&lt;&#x2F;a&gt; extension: &lt;a href=&quot;http:&#x2F;&#x2F;update.mozilla.org&#x2F;extensions&#x2F;moreinfo.php?application=firefox&amp;id=128&amp;vid=196&quot;&gt;BBCode&lt;&#x2F;a&gt;. BBCode adds a list of menu choices to the right-click context menu, allowing you to quickly add BBCode (explained in the &lt;a href=&quot;http:&#x2F;&#x2F;www.phpbb.com&#x2F;phpBB&#x2F;faq.php?mode=bbcode&quot;&gt;phpBB BBCode guide&lt;&#x2F;a&gt;) to your posts (actually, the BBCode context menu appears in all textual input fields).&lt;&#x2F;p&gt;
&lt;p&gt;One of the simplest of things it does is allow you to quickly bold, italicize, or format selected text. Just select &quot;Bold&quot; (or whatever formatting option you wish to use) from the context menu (right-click):&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of BBCode bold option&quot; src=&quot;&#x2F;assets&#x2F;bbcode-bold-b4.png&quot; width=&quot;266&quot; height=&quot;192&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Bam! Your selected text is formatted:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of BBCode after using bold option&quot; src=&quot;&#x2F;assets&#x2F;bbcode-bold-after.png&quot; width=&quot;227&quot; height=&quot;85&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Changing the color of the text also works as in most places, popping up a JavaScript dialog:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of BBCode after using color option&quot; src=&quot;&#x2F;assets&#x2F;bbcode-color-b4.png&quot; width=&quot;338&quot; height=&quot;199&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of BBCode during use of color option&quot; src=&quot;&#x2F;assets&#x2F;bbcode-color-during.png&quot; width=&quot;345&quot; height=&quot;174&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;But what&#x27;s a real keeper, is what&#x27;s found under the &quot;Clipboard&quot; sub-menu. With this, you can copy a piece of text you want to quote, or a URL to an image&#x2F;webpage, and then have it formatted as quoted text, or as an URL in BBCode. If you post in BBCode, you&#x27;ll know how much of a hassle this can sometimes grow to be.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of BBCode make selection URL option&quot; src=&quot;&#x2F;assets&#x2F;bbcode-selection-url-b4.png&quot; width=&quot;388&quot; height=&quot;182&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;With &quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot; in my clipboard, BBCode formats it nicely so that I don&#x27;t have to.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of BBCode make selection URL result&quot; src=&quot;&#x2F;assets&#x2F;bbcode-selection-url-after.png&quot; width=&quot;351&quot; height=&quot;87&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Excellent work by &lt;a href=&quot;http:&#x2F;&#x2F;jedbrown.net&#x2F;&quot;&gt;Jed Brown&lt;&#x2F;a&gt;, who also recently wrote &lt;a href=&quot;http:&#x2F;&#x2F;update.mozilla.org&#x2F;extensions&#x2F;moreinfo.php?id=127&amp;vid=198&quot;&gt;GMailCompose&lt;&#x2F;a&gt;, which is another context menu extension that allows you to compose a reply in GMail when clicking on mailto: links.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Foundation to lead open plugin initiative</title>
    <published>2004-07-01T00:32:31+00:00</published>
    <updated>2004-07-01T00:32:31+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/07/01/mozilla-foundation-to-lead-open-plugin-initiative/"/>
    <id>https://chuyeow.wtf/2004/07/01/mozilla-foundation-to-lead-open-plugin-initiative/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/07/01/mozilla-foundation-to-lead-open-plugin-initiative/">&lt;p&gt;The Mozilla Foundation just &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;press&#x2F;mozilla-2004-06-30.html&quot;&gt;announced a new open browser plugin API effort&lt;&#x2F;a&gt; that will also consist of players like Apple, Macromedia, Opera and Sun Microsystems. The plugin API will be based off Netscape Plugin Application Program Interface (NPAPI), which is what Mozilla browsers (including Firefox) use at the moment, and will be released under an open source license. Notice how Microsoft isn&#x27;t (yet?) involved - I wonder if they&#x27;d consider this a threat (which I hope not, because it&#x27;s a very smart initiative that saves everyone from doing double work trying to make their plugins cross-platform and cross-browser). &lt;&#x2F;p&gt;
&lt;p&gt;Don&#x27;t confuse these plugins with extensions though - these plugins are things like the Flash plugin that allows you to play Flash and Shockwave files in your browser, and the Java plugin that lets you load applets. Maybe we&#x27;ll finally have a Java plugin that isn&#x27;t so iffy.&lt;&#x2F;p&gt;
&lt;p&gt;Check out the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;plugins&#x2F;&quot;&gt;Mozilla Plugins project&lt;&#x2F;a&gt; if you&#x27;re interested in the technical details.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Critique my employer&#x27;s website, please</title>
    <published>2004-06-29T23:48:05+00:00</published>
    <updated>2004-06-29T23:48:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/29/critique-my-employers-website-please/"/>
    <id>https://chuyeow.wtf/2004/06/29/critique-my-employers-website-please/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/29/critique-my-employers-website-please/">&lt;p&gt;A little background: I work for &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;&quot;&gt;muvee Technologies&lt;&#x2F;a&gt; as a web developer. Much of what you see there isn&#x27;t my work though, since I&#x27;m only 3 weeks old in the company.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m coming up with a list of things to improve with regards to the &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;&quot;&gt;website&lt;&#x2F;a&gt;, in terms of making it persuasive and consequently generating more sales. Of course, things like layout, accessibility, design and look and feel are important as well, but secondary for this evaluation. Truth be told, this is something my boss asked me to look at, because I&#x27;ve a pair of fresh eyes undeadened by years of working on the same old (same old) pages.&lt;&#x2F;p&gt;
&lt;p&gt;Nope, I&#x27;m not going to be try and get away with hoping that everyone here will generate enough ideas for me to present to my boss. I have my own list and I&#x27;m coming up with more stuff (gradually), but I thought that &lt;em&gt;while I had your attention&lt;&#x2F;em&gt;, I might as well see what other minds can come up with and if they are so discordant from mine.&lt;&#x2F;p&gt;
&lt;p&gt;So there, if you could help me evaluate and recommend things that can be changed&#x2F;improved, I&#x27;d be grateful to you, dear mister or missus reader. Focus on how &lt;a href=&quot;http:&#x2F;&#x2F;muvee.com&#x2F;&quot;&gt;the site&lt;&#x2F;a&gt; could be more persuasive to prospective buyers, or conducive to buyers (transactors). Recommendations on design, layout, accessibility are also welcome, but secondary (I expect plenty of these, nevertheless).&lt;&#x2F;p&gt;
&lt;p&gt;I don&#x27;t have Gmail invites now, but I promise you I&#x27;ll send one over if you help me out. Those already with Gmail will instead receive my gratitude (really - a favor is worth something nowadays, right?)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Top 10 referrers</title>
    <published>2004-06-28T22:34:30+00:00</published>
    <updated>2004-06-28T22:34:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/28/top-10-referrers/"/>
    <id>https://chuyeow.wtf/2004/06/28/top-10-referrers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/28/top-10-referrers/">&lt;p&gt;In the spirit of &lt;a href=&quot;http:&#x2F;&#x2F;weblog.wlkr.net&#x2F;archives&#x2F;000182.html&quot;&gt;http:&#x2F;&#x2F;weblog.wlkr.net&#x2F;archives&#x2F;000182.html&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;table style=&quot;width:300px;font-size:0.8em&quot;&gt;
&lt;colgroup&gt;
&lt;col width=&quot;70%&quot; &#x2F;&gt;
&lt;col width=&quot;30%&quot; &#x2F;&gt;
&lt;&#x2F;colgroup&gt;
&lt;tr&gt;
&lt;th&gt;Referrer&lt;&#x2F;th&gt;
&lt;th&gt;Visits&lt;&#x2F;th&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;http:&#x2F;&#x2F;gemal.dk&#x2F;mozilla&#x2F;blogupdates.html&lt;&#x2F;td&gt;
&lt;td&gt;983&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;http:&#x2F;&#x2F;feedhouse.mozillazine.org&lt;&#x2F;td&gt;
&lt;td&gt;812&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;http:&#x2F;&#x2F;www.javablogs.com&#x2F;Welcome.action&lt;&#x2F;td&gt;
&lt;td&gt;569&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;http:&#x2F;&#x2F;forums.anandtech.com&#x2F;messageview.cfm&lt;&#x2F;td&gt;
&lt;td&gt;440&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;2004&#x2F;Jun&#x2F;09&#x2F;firefox_09_tour.html&lt;&#x2F;td&gt;
&lt;td&gt;414&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;http:&#x2F;&#x2F;www.bloglines.com&#x2F;myblogs_display&lt;&#x2F;td&gt;
&lt;td&gt;294&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;http:&#x2F;&#x2F;www.thauvin.net&#x2F;linkblog&#x2F;&lt;&#x2F;td&gt;
&lt;td&gt;257&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;http:&#x2F;&#x2F;gemal.dk&#x2F;mozilla&#x2F;blogupdates-beta.html&lt;&#x2F;td&gt;
&lt;td&gt;229&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;http:&#x2F;&#x2F;animetopia.com&#x2F;search.php&lt;&#x2F;td&gt;
&lt;td&gt;215&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php&lt;&#x2F;td&gt;
&lt;td&gt;180&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;And yes, a table is entirely appropriate.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>FoxAmp Firefox extension integrates Winamp into browser</title>
    <published>2004-06-28T06:06:24+00:00</published>
    <updated>2004-06-28T06:06:24+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/28/foxamp-firefox-extension-integrates-winamp-into-browser/"/>
    <id>https://chuyeow.wtf/2004/06/28/foxamp-firefox-extension-integrates-winamp-into-browser/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/28/foxamp-firefox-extension-integrates-winamp-into-browser/">&lt;p&gt;More and more cool &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;Mozilla Firefox&lt;&#x2F;a&gt; extensions seem to be popping up nowadays. &lt;a href=&quot;http:&#x2F;&#x2F;update.mozilla.org&#x2F;extensions&#x2F;moreinfo.php?id=116&amp;vid=191&quot;&gt;FoxAmp&lt;&#x2F;a&gt; is a Firefox extension that integrates (to an extent) &lt;a href=&quot;http:&#x2F;&#x2F;winamp.com&quot;&gt;Winamp&lt;&#x2F;a&gt; into the Firefox browser. It adds several buttons into your statusbar, allowing you to play, stop, pause, and change tracks.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of FoxAmp&quot; src=&quot;&#x2F;assets&#x2F;foxamp.png&quot; width=&quot;200&quot; height=&quot;95&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There isn&#x27;t any indication of which track is being played (umm, beyond listening and recognizing it with your sense of hearing, that is), which I got around with the &lt;a href=&quot;http:&#x2F;&#x2F;winamp.com&#x2F;skins&#x2F;details.php?id=140776&quot;&gt;Lounge skin&lt;&#x2F;a&gt; that I&#x27;m currently using (it displays a small window for a short while indicating the track name when a new track is played).&lt;&#x2F;p&gt;
&lt;p&gt;Still, a very cool tool added to my list of favorite extensions.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Danes Czeched-out</title>
    <published>2004-06-28T05:55:20+00:00</published>
    <updated>2004-06-28T05:55:20+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/28/danes-czeched-out/"/>
    <id>https://chuyeow.wtf/2004/06/28/danes-czeched-out/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/28/danes-czeched-out/">&lt;p&gt;Czech Republic 3 - 0 Denmark&lt;&#x2F;p&gt;
&lt;p&gt;I wish I&#x27;d bothered to look for a betting station earlier today - the odds were 1.78 in favor of a Czech win. The Czechs really booked their place in the semis in style, beating the Danes by the most solid margin of all the semifinalists.&lt;&#x2F;p&gt;
&lt;p&gt;And what a sweet chip from Milan Baros.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gmail Notifier extension for Firefox</title>
    <published>2004-06-27T06:50:03+00:00</published>
    <updated>2004-06-27T06:50:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/27/gmail-notifier-extension-for-firefox/"/>
    <id>https://chuyeow.wtf/2004/06/27/gmail-notifier-extension-for-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/27/gmail-notifier-extension-for-firefox/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;doron&#x2F;&quot;&gt;Doron&lt;&#x2F;a&gt; has written a &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;doron&#x2F;archives&#x2F;005836.html&quot;&gt;Gmail Notifier&lt;&#x2F;a&gt; extension for Firefox. It adds a button to your toolbar that displays the number of unread emails you have in your Gmail account. Like how I have 0 new emails (I&#x27;m a lonely, lonely guy) in the screenshot below.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Gmail Notifier in action&quot; src=&quot;&#x2F;assets&#x2F;gmail-notifier.png&quot; width=&quot;307&quot; height=&quot;104&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Neat work, and this is still early stages for Gmail Notifier. Doron has &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;doron&#x2F;archives&#x2F;005817.html&quot;&gt;promised Gmail&#x2F;Mozilla integration&lt;&#x2F;a&gt; and this (Gmail Notifier) seems to be part of that exciting project. Check back with Doron for more later - this should lead to something really neat.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Sending to yourname+label@gmail.com labels your email</title>
    <published>2004-06-26T00:09:09+00:00</published>
    <updated>2004-06-26T00:09:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/26/sending-to-yournamelabelgmailcom-labels-your-email/"/>
    <id>https://chuyeow.wtf/2004/06/26/sending-to-yournamelabelgmailcom-labels-your-email/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/26/sending-to-yournamelabelgmailcom-labels-your-email/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;drzaius.ics.uci.edu&#x2F;blogs&#x2F;danyelf&quot;&gt;Danyel Fisher&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;23&#x2F;gexodus_02_some_new_features_for_gmail_mbox_import_tool.php#comment17&quot;&gt;pointed out&lt;&#x2F;a&gt; this cool Gmail tip.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Note that you can get around the label issue by forwarding messages to “myname+label”, and then searching for “+label”.&lt;&#x2F;p&gt;
&lt;p&gt;(Gmail allows you unlimited “+” addresses. For example, all my mail that’s forwarded from an external account goes to mygmailname+forward@gmail.com)&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Aforementioned &quot;label issue&quot; being the issue with &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;23&#x2F;gexodus_02_some_new_features_for_gmail_mbox_import_tool.php&quot;&gt;gExodus 0.2&lt;&#x2F;a&gt;&#x27;s new label feature which prefixes a user-specified string to the subject of each forwarded email. If I&#x27;d known that earlier... Nah it was good practice. It actually forced me to figure out how to modify an existing email&#x27;s headers.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gmail invites - so hard to give away</title>
    <published>2004-06-26T00:00:58+00:00</published>
    <updated>2004-06-26T00:00:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/26/gmail-invites-so-hard-to-give-away/"/>
    <id>https://chuyeow.wtf/2004/06/26/gmail-invites-so-hard-to-give-away/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/26/gmail-invites-so-hard-to-give-away/">&lt;p&gt;When I last &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;22&#x2F;gmail_invite_for_loyal_reader.php&quot;&gt;gave  out a Gmail invite&lt;&#x2F;a&gt;, I had to squeeze out 1 for my dear blog readers (actually, when I got more invites, I gave another one to &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;22&#x2F;gmail_invite_for_loyal_reader.php#comment3&quot;&gt;Joshua&lt;&#x2F;a&gt; too). Now it seems that even 2 invites are so hard to give away.&lt;&#x2F;p&gt;
&lt;p&gt;It seems that the Gmail craze is finally dying down. Well, at least in the blog circles. Gmail&#x27;s on almost every blog and almost every blogger has one (either through an account at &lt;a href=&quot;http:&#x2F;&#x2F;blogger.com&#x2F;&quot;&gt;Blogger&lt;&#x2F;a&gt; or through viral means). Colleagues at work have Gmail. Friends don&#x27;t see the need for Gmail. I&#x27;m actually having a hard time thinking of people who could use an invite. So from now on I&#x27;m giving away invites on my blog to readers. I&#x27;m not giving them to just anyone who searched for &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=gmail+invite&quot;&gt;Gmail invite&lt;&#x2F;a&gt;&quot; on Google and popped over. I happen to be listed on the first page of search results on Google for &quot;Gmail invite&quot; at this moment, and that has surpassed my usual high-ranking search terms of &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=bittornado&quot;&gt;bittornado&lt;&#x2F;a&gt;&quot;, &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=hotmail+thunderbird&quot;&gt;uxtheme.dll&lt;&#x2F;a&gt;&quot;, and &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=hotmail thunderbird&quot;&gt;hotmail thunderbird&lt;&#x2F;a&gt;&quot; within 3 days - 1466 visitors via that search phrase.&lt;&#x2F;p&gt;
&lt;p&gt;I was looking down the list of people who posted in response to my &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;22&#x2F;gmail_invite_for_loyal_reader.php&quot;&gt;entry&lt;&#x2F;a&gt; asking my readers to show themselves, looking for people to give away the invites to, but I wasn&#x27;t sure who wanted them. If you posted before and want an invite, let me know.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox 0.9.1 coming</title>
    <published>2004-06-25T10:14:09+00:00</published>
    <updated>2004-06-25T10:14:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/25/firefox-091-coming/"/>
    <id>https://chuyeow.wtf/2004/06/25/firefox-091-coming/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/25/firefox-091-coming/">&lt;p&gt;Ben Goodger has announced that &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=90193&quot;&gt;Firefox 0.9.1 will be out soon&lt;&#x2F;a&gt;. This will be a bugfix point release, mostly fixing Extension Manager bugs. Winstripe (the default theme) will also be updated.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>gExodus 0.2 - some new features for Gmail mbox import tool</title>
    <published>2004-06-23T02:33:09+00:00</published>
    <updated>2004-06-23T02:33:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/23/gexodus-02-some-new-features-for-gmail-mbox-import-tool/"/>
    <id>https://chuyeow.wtf/2004/06/23/gexodus-02-some-new-features-for-gmail-mbox-import-tool/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/23/gexodus-02-some-new-features-for-gmail-mbox-import-tool/">&lt;p&gt;I&#x27;ve updated gExodus (previous &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;21&#x2F;gexodus_a_graphical_gmail_import_tool.php&quot;&gt;version 0.1&lt;&#x2F;a&gt;) with 2 new features (straight from the changelog):&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;- Added ability to set a label to prefix to the Subject of forwarded emails.&lt;br &#x2F;&gt;
- Added &quot;Pause&#x2F;Continue&quot; feature.
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;The &quot;label&quot; idea was &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;21&#x2F;gexodus_a_graphical_gmail_import_tool.php#comment1&quot;&gt;suggested&lt;&#x2F;a&gt; by &lt;a href=&quot;http:&#x2F;&#x2F;www.soylentred.net&#x2F;&quot;&gt;Rory Parle&lt;&#x2F;a&gt; (great thinking!), and it should be particularly useful for identifying which imported email messages came from which mbox. For example, if you set a label of &quot;[yahoo-personal]&quot; when importing your Yahoo personal email account into Gmail with gExodus, each of the emails will have &quot;[yahoo-personal]&quot; prefixed to their subject field. This means that an email that had the subject of &quot;Hey dude, I heard Futurama&#x27;s coming back!&quot; becomes &quot;[yahoo-personal] Hey dude, I heard Futurama&#x27;s coming back!&quot;. It annoyed me that the imported mails cluttered up my Gmail inbox and I don’t know which ones are imported, and which are “live” emails that I’ve just received. This also now allows me to setup a filter to filter all imported mail to be tagged with a particular label.&lt;&#x2F;p&gt;
&lt;p&gt;The &quot;Pause&#x2F;continue&quot; feature allows you to pause the importing of messages midway through an import. Useful in situations where you have a large mailbox with lots of messages. It should rightly work even after you&#x27;ve disconnected (and reconnected) your Internet connection.&lt;&#x2F;p&gt;
&lt;p&gt;Still having several issues with multithreading, so you&#x27;ll notice 1 last email being imported after you pause or abort gExodus. This is because if the email forwarding thread is paused (or killed) while it is sending out an email, it will follow through with it before actually pausing (or dying). It&#x27;s not a particularly catastrophic issue, though far from acceptable.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;gexodus&#x2F;gexodus-0.2.zip&quot;&gt;Download gExodus 0.2&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Feedback and suggestions welcome as always. This is what&#x27;s on my TODO list:&lt;br &#x2F;&gt;
- Pre-select where the mbox file is most likely to reside on a harddisk&lt;br &#x2F;&gt;
- Delay field (for specifying the delay between sending one message and the next)&lt;br &#x2F;&gt;
- Interactive importing (&quot;Yes&#x2F;No&#x2F;Yes to all&quot;)&lt;br &#x2F;&gt;
- Importing of maildir format&lt;br &#x2F;&gt;
- Recurse subdirectories and import all the mailboxes in each directory&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Weblog categorized using Dewey Decimal System</title>
    <published>2004-06-22T09:58:34+00:00</published>
    <updated>2004-06-22T09:58:34+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/22/weblog-categorized-using-dewey-decimal-system/"/>
    <id>https://chuyeow.wtf/2004/06/22/weblog-categorized-using-dewey-decimal-system/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/22/weblog-categorized-using-dewey-decimal-system/">&lt;p&gt;Lisa Williams of &lt;a href=&quot;http:&#x2F;&#x2F;www.cadence90.com&#x2F;wp&quot;&gt;Learning The Lessons of Nixon&lt;&#x2F;a&gt; has her &lt;a href=&quot;http:&#x2F;&#x2F;www.cadence90.com&#x2F;wp&quot;&gt;weblog&lt;&#x2F;a&gt; entries &lt;a href=&quot;http:&#x2F;&#x2F;www.cadence90.com&#x2F;wp&#x2F;index.php?p=2763&quot;&gt;categorized using the Dewey Decimal System&lt;&#x2F;a&gt;! Nice!&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d do the same too, only I think most of my categories would belong under the big umbrellas of Technology and Computers.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gmail invite for loyal reader</title>
    <published>2004-06-22T00:22:32+00:00</published>
    <updated>2004-06-22T00:22:32+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/22/gmail-invite-for-loyal-reader/"/>
    <id>https://chuyeow.wtf/2004/06/22/gmail-invite-for-loyal-reader/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/22/gmail-invite-for-loyal-reader/">&lt;p&gt;&lt;ins&gt;Update: I&#x27;ve invited &lt;a href=&quot;http:&#x2F;&#x2F;weblog.anthonyeden.com&#x2F;&quot;&gt;Anthony Eden&lt;&#x2F;a&gt; - Anthony used to offer &lt;a href=&quot;http:&#x2F;&#x2F;freeroller.net&quot;&gt;FreeRoller&lt;&#x2F;a&gt; (a site that offers free blog hosting) for free, but has since &lt;a href=&quot;http:&#x2F;&#x2F;weblog.anthonyeden.com&#x2F;archives&#x2F;000001.html&quot;&gt;moved on&lt;&#x2F;a&gt; and FreeRoller is now &lt;a href=&quot;http:&#x2F;&#x2F;jroller.com&#x2F;&quot;&gt;JRoller&lt;&#x2F;a&gt; (still free). I used to have a FreeRoller account myself.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Note: If you haven&#x27;t been a reader for awhile, I&#x27;ll know, so don&#x27;t try and fake it.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m giving out 1 Gmail invite to a reader who has been with me for awhile. If you could show yourselves, by commenting and telling me a bit about yourself, I&#x27;ll send you an invite. No, I&#x27;m not whoring out my invites (at least I don&#x27;t think so) - I just thought this would help me to get to know my readers a bit better. redemption in a blog has been steadily growing with about 2,000 visits a day, but I&#x27;m not seeing many of my readers commenting. I sometimes wonder if anybody actually reads what I write or there&#x27;s some bot out there periodically requesting my webpages at an approximately linearly increasing rate.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not giving it out based on who posts first, but rather genuine readers (I&#x27;d have make educated guesses, unless I know of you from the &quot;before time&quot;).&lt;&#x2F;p&gt;
&lt;p&gt;Initially I&#x27;d wanted to give out 2 invites, but that has quickly whittled away to just 1. Oh well, I&#x27;ll get more invites soon I guess.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The secret behind getting more Gmail invites</title>
    <published>2004-06-21T22:30:30+00:00</published>
    <updated>2004-06-21T22:30:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/21/the-secret-behind-getting-more-gmail-invites/"/>
    <id>https://chuyeow.wtf/2004/06/21/the-secret-behind-getting-more-gmail-invites/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/21/the-secret-behind-getting-more-gmail-invites/">&lt;p&gt;&lt;ins&gt;Update: Well, it seems I was wrong about this. Google seems to give out invites quite randomly. Read the comments for more info.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;OK so it&#x27;d no longer be a secret now that I&#x27;ve let it out into the wild. Anyway, the hypothesis goes somewhat like this: the number of Gmail invites you get (to send out) is positively correlated to your usage of Gmail. &quot;Usage of Gmail&quot; is hard to define, but I reckon it&#x27;d include the number of emails you send&#x2F;receive, and possibly the amount of storage you use (out of the 1GB).&lt;&#x2F;p&gt;
&lt;p&gt;Why do I say so? Um, if you&#x27;ve been following my inane writings on this weblog, you&#x27;d probably noticed &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;21&#x2F;gexodus_a_graphical_gmail_import_tool.php&quot;&gt;gExodus&lt;&#x2F;a&gt;, a Python hack job that I churned out yesterday that imports emails (in mbox format) into Gmail. It does this by forwarding your existing mbox - i.e. it parses the mbox file and sends each email via SMTP to your Gmail account. This registers as received mail in your Gmail account.&lt;&#x2F;p&gt;
&lt;p&gt;In my testing of &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;21&#x2F;gexodus_a_graphical_gmail_import_tool.php&quot;&gt;gExodus&lt;&#x2F;a&gt;, I probably forwarded around a thousand emails. I just logged into my Gmail account and saw the red &quot;Invite a friend to join Gmail!&quot; link...&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Gmail &amp;quot;Invite a friend&amp;quot; link&quot; src=&quot;&#x2F;assets&#x2F;gmail-invite-friend.png&quot; width=&quot;297&quot; height=&quot;78&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And I had 6 invitations (I&#x27;m left with 4 now). People don&#x27;t normally get 6 invites in 6 days&#x27; time. But 1000+ (received) emails in 1 day, 6 invites the next - all that&#x27;s left is to connect the dots.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>gExodus - a graphical Gmail import tool</title>
    <published>2004-06-21T03:11:23+00:00</published>
    <updated>2004-06-21T03:11:23+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/21/gexodus-a-graphical-gmail-import-tool/"/>
    <id>https://chuyeow.wtf/2004/06/21/gexodus-a-graphical-gmail-import-tool/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/21/gexodus-a-graphical-gmail-import-tool/">&lt;p&gt;&lt;ins&gt;Update: &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;06&#x2F;23&#x2F;gexodus-02-some-new-features-for-gmail-mbox-import-tool&#x2F;&quot;&gt;gExodus 0.2 is out&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When I saw (and used) Mark Lyon&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.marklyon.org&#x2F;gmail&#x2F;&quot;&gt;Mbox &amp; Maildir to Gmail Loader (GML)&lt;&#x2F;a&gt; (I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;06&#x2F;19&#x2F;very-nice-app-to-import-your-emails-to-gmail&#x2F;&quot;&gt;wrote about it&lt;&#x2F;a&gt;), I was inspired to write a GUI version of it (I didn&#x27;t copy Mark&#x27;s code, just in case, though it works on the same basis). gExodus is what came out at the end of half a day&#x27;s work.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;screenshots&#x2F;gexodus-main.png&quot; title=&quot;Click for a full screenshot of gExodus&#x27; main screen&quot;&gt;&lt;img alt=&quot;gExodus main screen screenshot&quot; src=&quot;&#x2F;assets&#x2F;gexodus-main-thumb.png&quot; width=&quot;304&quot; height=&quot;204&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;gExodus allows you to import your emails (in &lt;a href=&quot;http:&#x2F;&#x2F;www.qmail.org&#x2F;man&#x2F;man5&#x2F;mbox.html&quot;&gt;mbox&lt;&#x2F;a&gt; format) into your Gmail account. The mbox format is the classic Unix-style mailbox format, and is used by &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;&quot;&gt;Mozilla Mail&#x2F;News&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Mozilla Thunderbird&lt;&#x2F;a&gt;, qmail, and many other Unix email applications. There currently isn&#x27;t support for qmail&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.qmail.org&#x2F;man&#x2F;man5&#x2F;maildir.html&quot;&gt;maildir&lt;&#x2F;a&gt; format, which is a much better format in terms of reliability and efficiency (because there isn&#x27;t a need to lock a single file, as it is for the mbox format). There doesn&#x27;t seem to be any Windows email application that supports maildir, so I&#x27;ve left it out. Someone has also posted a &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=58308&quot;&gt;feature request&lt;&#x2F;a&gt; for maildir support in Mail&#x2F;News (and consequently Mozilla Thunderbird), so vote for the bug! I&#x27;ll add support for for maildir and possibly the MH mailbox formats if someone requests for it.&lt;&#x2F;p&gt;
&lt;p&gt;Users of email clients which don&#x27;t use the mbox format (such as Outlook Express and Outlook) can convert their emails into the mbox format by importing them into Mozilla Mail&#x2F;News or &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Mozilla Thunderbird&lt;&#x2F;a&gt;. I&#x27;ll add support for Outlook Express (.DBX) and Outlook (.PST) email formats in the near future (there are many converters already available, in fact).&lt;&#x2F;p&gt;
&lt;p&gt;gExodus is written in &lt;a href=&quot;http:&#x2F;&#x2F;www.python.org&#x2F;&quot;&gt;Python&lt;&#x2F;a&gt;, and uses &lt;a href=&quot;http:&#x2F;&#x2F;pythoncard.sourceforge.net&#x2F;&quot;&gt;PythonCard&lt;&#x2F;a&gt; (which is based on &lt;a href=&quot;http:&#x2F;&#x2F;www.wxpython.org&#x2F;&quot;&gt;wxPython toolkit&lt;&#x2F;a&gt;). PythonCard is a simpler wxPython, and is amazingly simple to use. With a WYSIWYG resource editor which allows you to place widgets and edit their properties, as well as very simple syntax rules and event handling concepts, PythonCard is Visual Studio with a better grounded language (Python). Granted, there are some inadequacies, one of the most glaring being the lack of a formal tab order (I got around that by moving widgets to the front - the nearer one is to the front, the higher it&#x27;s tab order). Still, I&#x27;m glad I picked PythonCard for my graphical toolkit - I haven&#x27;t used any before and was considering my options at this &lt;a href=&quot;http:&#x2F;&#x2F;www.awaretek.com&#x2F;toolkits.html&quot;&gt;Python GUI toolkit &quot;comparison&quot; page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;gExodus is a standalone program - Gordon McMillan&#x27;s Installer was used to convert the Python scripts into executable form. The article &lt;a href=&quot;http:&#x2F;&#x2F;pythoncard.sourceforge.net&#x2F;standalone.html&quot;&gt;Building &#x27;standalone&#x27; PythonCard Applications&lt;&#x2F;a&gt; came in very handy, especially when I didn&#x27;t manage to get &lt;a href=&quot;http:&#x2F;&#x2F;starship.python.net&#x2F;crew&#x2F;theller&#x2F;py2exe&#x2F;&quot;&gt;py2exe&lt;&#x2F;a&gt; to work (the executable didn&#x27;t work properly). The documentation for using McMillan&#x27;s Installer with PythonCard didn&#x27;t seem to work also. Due to dependencies on the wxPython and PythonCard libraries, the resulting executable package is pretty hefty (approx. 4MB) - 2.4MB of that is a wxPython DLL.&lt;&#x2F;p&gt;
&lt;p&gt;The source code is currently unreleased (I&#x27;ll put it out in the near future). Listed below are the binaries.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;2004&#x2F;06&#x2F;23&#x2F;gexodus-02-some-new-features-for-gmail-mbox-import-tool&#x2F;&quot;&gt;gExodus 0.2 is out&lt;&#x2F;a&gt;. You may want to get that instead of version 0.1 below.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Download gExodus:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;gexodus&#x2F;gexodus-0.1.zip&quot;&gt;gexodus 0.1 (zip format)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;gexodus&#x2F;gexodus-0.1.tar.bz2&quot;&gt;gexodus 0.1 (tarred bz2 format)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;gexodus&#x2F;gexodus-0.1.tar.gz&quot;&gt;gexodus 0.1 (tarred gz format)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Feedback is greatly appreciated. I haven&#x27;t really tested it on other machines (just my own Pentium 4 desktop running Windows XP), so bugs are expected (please let me know of them).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Czech-ed in</title>
    <published>2004-06-20T06:00:23+00:00</published>
    <updated>2004-06-20T06:00:23+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/20/czech-ed-in/"/>
    <id>https://chuyeow.wtf/2004/06/20/czech-ed-in/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/20/czech-ed-in/">&lt;p&gt;Exhilarating match, Holland vs. Czech Republic. I&#x27;m (openly) rooting for the Czechs to win Euro 2004, so it was nice to see the Czechs come back 2 times from behind and winning it with a sweet tap-in. They played very well at that, and Milan Baros scoring was just sweet.&lt;&#x2F;p&gt;
&lt;p&gt;Now, onto the quarter-finals!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Very nice app to import your emails to Gmail</title>
    <published>2004-06-19T22:45:59+00:00</published>
    <updated>2004-06-19T22:45:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/19/very-nice-app-to-import-your-emails-to-gmail/"/>
    <id>https://chuyeow.wtf/2004/06/19/very-nice-app-to-import-your-emails-to-gmail/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/19/very-nice-app-to-import-your-emails-to-gmail/">&lt;p&gt;Mark Lyon has written &lt;a href=&quot;http:&#x2F;&#x2F;www.marklyon.org&#x2F;gmail&#x2F;&quot;&gt;Mbox &amp;amp; Maildir to Gmail Loader&lt;&#x2F;a&gt;, or GML, which transfers emails in an mbox file into Gmail accounts. Mbox is the format &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;&quot;&gt;Mozilla Mail&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Mozilla Thunderbird&lt;&#x2F;a&gt; uses, so if you use something like Outlook or Outlook Express, you&#x27;d have to export your emails into Mozilla Mail or Thunderbird first.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;GML screenshot&quot; src=&quot;&#x2F;assets&#x2F;gml.png&quot; width=&quot;335&quot; height=&quot;133&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Works nice enough, though it had some problems with emails containing attachments - those didn&#x27;t import properly and Gmail couldn&#x27;t parse the email, so were as good as lost. It is still good stuff because I can now archive my existing email accounts in Gmail (I do have 1 gig of space).&lt;&#x2F;p&gt;
&lt;p&gt;Of course, GML works by forwarding the emails from your mbox file to your Gmail account, so it neccessarily becomes a possible tool for spammers to bomb your Gmail account. Not that there aren&#x27;t generic email spambots in existence already.&lt;&#x2F;p&gt;
&lt;p&gt;Other similar applications include &lt;a href=&quot;http:&#x2F;&#x2F;jaybe.org&#x2F;info.htm&quot;&gt;Pop Goes the Gmail&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.holovaty.com&#x2F;blog&#x2F;archive&#x2F;2004&#x2F;06&#x2F;18&#x2F;1751&quot;&gt;gmail.py&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;torrez.us&#x2F;archives&#x2F;2004&#x2F;05&#x2F;23&#x2F;000272.html&quot;&gt;GTray&lt;&#x2F;a&gt; also seems useful, but I can&#x27;t get the website to load at the moment.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MovableType@Gmail.Com for sale</title>
    <published>2004-06-19T22:09:33+00:00</published>
    <updated>2004-06-19T22:09:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/19/movabletypegmailcom-for-sale/"/>
    <id>https://chuyeow.wtf/2004/06/19/movabletypegmailcom-for-sale/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/19/movabletypegmailcom-for-sale/">&lt;p&gt;Message sent to the &lt;a href=&quot;http:&#x2F;&#x2F;orkut.com&#x2F;&quot;&gt;orkut&lt;&#x2F;a&gt; MovableType community:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;hi&lt;br &#x2F;&gt;
MovableType@Gmail.Com For Sell &lt;em&gt;(sic)&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If you want this ID in Gmail , Plz email to me .  xxx@gmail.com&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Ugh. This Gmail name-squatting is getting ugly.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Thanks for the Gmail invite</title>
    <published>2004-06-18T00:35:15+00:00</published>
    <updated>2004-06-18T00:35:15+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/18/thanks-for-the-gmail-invite/"/>
    <id>https://chuyeow.wtf/2004/06/18/thanks-for-the-gmail-invite/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/18/thanks-for-the-gmail-invite/">&lt;p&gt;Well, a reader was kind enough to &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;06&#x2F;13&#x2F;gmail_invites_for_sale_everywhere.php#comment5&quot;&gt;offer me a Gmail invite&lt;&#x2F;a&gt; gratuitously:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Want a gmail invite? I think I’ve got one left and I’d much rather give it to someone who cares about web standards (yay) than compromise what I think is my moral integrity by whoring out something I got for free in the first place.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;You can&#x27;t deny there is some truth in the bit about &quot;whoring out&quot; Gmail invites that seem to have been happening of late heh (heard of &lt;a href=&quot;http:&#x2F;&#x2F;www.gmailswap.com&#x2F;&quot;&gt;Gmail Swap&lt;&#x2F;a&gt;?). Well, not everyone is whoring out their invites - some of them go to a good cause (like donations to charity or non-profit organizations).&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I&#x27;d like to thank &lt;a href=&quot;http:&#x2F;&#x2F;blog.lukema.net&#x2F;archives&#x2F;000573.html&quot;&gt;Luke&lt;&#x2F;a&gt; for his kind gesture. Luke &lt;a href=&quot;http:&#x2F;&#x2F;blog.lukema.net&#x2F;archives&#x2F;000573.html&quot;&gt;wrote about his Gmail invites&lt;&#x2F;a&gt; as such:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I&#x27;ve got 2 invites left and although free stuff (or auctioning it off for cash through ebay) is tempting, it doesn&#x27;t sit right with me morally, ethically, or somethin&#x27;.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Nice.&lt;&#x2F;p&gt;
&lt;p&gt;Luke keeps a blog at &lt;a href=&quot;http:&#x2F;&#x2F;blog.lukema.net&#x2F;&quot;&gt;http:&#x2F;&#x2F;blog.lukema.net&#x2F;&lt;&#x2F;a&gt; and also an &lt;a href=&quot;http:&#x2F;&#x2F;anime.lukema.net&#x2F;&quot;&gt;anime blog&lt;&#x2F;a&gt; with mini-reviews of anime like Naruto and Full Metal Alchemist. Visit his &lt;a href=&quot;http:&#x2F;&#x2F;lukema.net&#x2F;&quot;&gt;website&lt;&#x2F;a&gt; sometime.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>A for-loop? For whom?</title>
    <published>2004-06-18T00:12:33+00:00</published>
    <updated>2004-06-18T00:12:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/18/a-for-loop-for-whom/"/>
    <id>https://chuyeow.wtf/2004/06/18/a-for-loop-for-whom/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/18/a-for-loop-for-whom/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;TheDailyWTF.com&#x2F;&quot;&gt;The Daily WTF&lt;&#x2F;a&gt; has a very funny reader-submitted &lt;a href=&quot;http:&#x2F;&#x2F;thedailywtf.com&#x2F;archive&#x2F;2004&#x2F;06&#x2F;16&#x2F;316.aspx&quot;&gt;entry on for-loops&lt;&#x2F;a&gt; (or rather, the lack of them).&lt;&#x2F;p&gt;
&lt;p&gt;Good stuff on &lt;a href=&quot;http:&#x2F;&#x2F;TheDailyWTF.com&#x2F;&quot;&gt;The Daily WTF&lt;&#x2F;a&gt;, which has near-daily posts on programming-related things that make you say &quot;WTF?!?&quot;. Recommended reading.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;weblogs.asp.net&#x2F;Alex_Papadimoulis&quot;&gt;Alex Papadimoulis&lt;&#x2F;a&gt;, the person behind The Daily WTF, is currently giving out Gmail invites for submissions to The Daily WTF.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Table names and case sensitivity - bad MySQL</title>
    <published>2004-06-17T23:18:02+00:00</published>
    <updated>2004-06-17T23:18:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/17/table-names-and-case-sensitivity-bad-mysql/"/>
    <id>https://chuyeow.wtf/2004/06/17/table-names-and-case-sensitivity-bad-mysql/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/17/table-names-and-case-sensitivity-bad-mysql/">&lt;p&gt;This issue has wasted a good part of a day trying to figure out why my database-driven pages failed to work correctly after dumping a database from my Windows dev machine into a Linux box - I just had to whine about this.&lt;&#x2F;p&gt;
&lt;p&gt;Following database naming conventions (actually, there are many, not all of which advocate using mixed case naming schemes), I decided to use mixed case table names when developing on my Windows box. So a table containing localization (or &lt;acronym title=&quot;localization&quot;&gt;L10n&lt;&#x2F;acronym&gt;) information for widgets would be named `Widget_L10n`, and the lookup table for widget to purchases would be named `Widget_Purchases`. No problem. Everything worked fine on the dev machine.&lt;&#x2F;p&gt;
&lt;p&gt;When the time came to move into live testing, I dumped the contents of the database into a file and proceeded to import into the production database server. Of course, nothing worked. I checked the database contents - everything was there. I checked the scripts - everything was good to go; if it works in the dev machine, it should rightly work in the production. I then checked the dump file, thinking it unlikely that something was wrong there but checking anyway - everything seemed fine. I went back to the MySQL client (I was using MySQL Front) and it hit me - the table names were in lowercase. And the PHP scripts were (correctly) using the mixed-case table names. Gah! The database dump file contained queries with the table names in lowercase, so they &lt;em&gt;were&lt;&#x2F;em&gt; lowercase in the Linux box while I was using queries with mixed-case names. At that point I hated myself for forgetting how MySQL stores table names - as a name of the file that stores the table. The manual &lt;a href=&quot;http:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;mysql&#x2F;en&#x2F;Name_case_sensitivity.html&quot;&gt;said so&lt;&#x2F;a&gt; and I even read that before.&lt;&#x2F;p&gt;
&lt;p&gt;Lesson learnt: use all lowercase identifier names in MySQL for portability across Windows and operating&#x2F;file systems where lettercase matters (such as Linux and Mac OX X UFS volumes). Throw the existing database naming conventions you have out the door.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Thunderbird 0.7 freshly roasted</title>
    <published>2004-06-17T16:14:13+00:00</published>
    <updated>2004-06-17T16:14:13+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/17/mozilla-thunderbird-07-freshly-roasted/"/>
    <id>https://chuyeow.wtf/2004/06/17/mozilla-thunderbird-07-freshly-roasted/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/17/mozilla-thunderbird-07-freshly-roasted/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Mozilla Thunderbird&lt;&#x2F;a&gt; 0.7 has just been released. &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Go get it&lt;&#x2F;a&gt; (or go to the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;thunderbird&#x2F;releases&#x2F;0.7&#x2F;&quot;&gt;Thunderbird 0.7 release FTP directory&lt;&#x2F;a&gt; for the zip build).&lt;&#x2F;p&gt;
&lt;p&gt;New and noteworthy is the inclusion of the extension and theme managers (derived from that in Firefox). This is also a static build so performance has significantly improved.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: just saw this &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;buttons.html&quot;&gt;Promoting Mozilla Thunderbird page&lt;&#x2F;a&gt; pointed to on one of the TrackBack pings I received. Nice buttons.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Firefox 0.9 (One Tree Hill) is out</title>
    <published>2004-06-16T02:02:06+00:00</published>
    <updated>2004-06-16T02:02:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/16/mozilla-firefox-09-one-tree-hill-is-out/"/>
    <id>https://chuyeow.wtf/2004/06/16/mozilla-firefox-09-one-tree-hill-is-out/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/16/mozilla-firefox-09-one-tree-hill-is-out/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;Mozilla Firefox&lt;&#x2F;a&gt; 0.9 (code-named &quot;One Tree Hill&quot;) has been released! Grab it from the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;main Firefox page&lt;&#x2F;a&gt;, or from &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;releases&#x2F;0.9&#x2F;&quot;&gt;the mozilla.org Firefox FTP directory&lt;&#x2F;a&gt; itself (where you can find the zip version, if you don&#x27;t like the installer). You can also get the &lt;a href=&quot;http:&#x2F;&#x2F;www.pryan.org&#x2F;mozilla&#x2F;bt-tracker&quot;&gt;torrent&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Noteworthy in this release are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;a new default theme, Winstripe (&lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;shots&#x2F;fx09&#x2F;mainwindow.png&quot;&gt;screenshot&lt;&#x2F;a&gt; courtesy of &lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;&quot;&gt;Neil Turner&lt;&#x2F;a&gt;), that replaces the old &lt;a href=&quot;http:&#x2F;&#x2F;www.quadrone.org&#x2F;graphics&#x2F;&quot;&gt;Qute&lt;&#x2F;a&gt; theme (a subject of much acrimony, as well as dislike and praise alike)&lt;&#x2F;li&gt;
&lt;li&gt;extension manager&lt;&#x2F;li&gt;
&lt;li&gt;theme manager&lt;&#x2F;li&gt;
&lt;li&gt;update notification for Firefox, extensions and themes&lt;&#x2F;li&gt;
&lt;li&gt;a far more complete browser migration tool that imports everything from bookmarks to cookies and autocomplete data from other browsers&lt;&#x2F;li&gt;
&lt;li&gt;a smaller file size (for the installer version only) of 4.7MB thanks to &lt;a href=&quot;http:&#x2F;&#x2F;www.7-zip.org&#x2F;&quot;&gt;7-zip&lt;&#x2F;a&gt; compression&lt;&#x2F;li&gt;
&lt;li&gt;ability to &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;03&#x2F;19&#x2F;deletion_of_autocomplete_results_in_firefox_mozilla_17b_released.php&quot;&gt;delete individual autocomplete results&lt;&#x2F;a&gt; (using Shift-Delete)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A &lt;a href=&quot;http:&#x2F;&#x2F;update.mozilla.org&#x2F;&quot;&gt;Mozilla Update&lt;&#x2F;a&gt; site has also been launched and lists extensions and themes that implement the new extension and theme API for 0.9. This will be the &quot;go to&quot; site for extensions and themes in the future, being the &quot;official&quot; extension and theme website.&lt;&#x2F;p&gt;
&lt;p&gt;Firefox 0.9 is a feature-complete release, meaning that the next release, 1.0, will not contain any new major features. Bug-fixing is the key activity between 0.9 and 1.0, as evident in the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;firefox&#x2F;roadmap.html&quot;&gt;Mozilla Firefox Roadmap&lt;&#x2F;a&gt;. Interestingly, release 1.0 is code-named &quot;Phoenix&quot; - and so it shall be reborn.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Who cares about Web standards?</title>
    <published>2004-06-13T20:08:33+00:00</published>
    <updated>2004-06-13T20:08:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/13/who-cares-about-web-standards/"/>
    <id>https://chuyeow.wtf/2004/06/13/who-cares-about-web-standards/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/13/who-cares-about-web-standards/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;webstandards.org&#x2F;&quot;&gt;The Web Standards Project&lt;&#x2F;a&gt; asks of anyone and everyone &quot;involved in web production in any capacity&quot; to take a &lt;a href=&quot;http:&#x2F;&#x2F;www.webstandards.org&#x2F;survey&#x2F;200406&quot;&gt;survey on Web Standards and it&#x27;s relevance to you&lt;&#x2F;a&gt; in a recent press release, &lt;a href=&quot;http:&#x2F;&#x2F;webstandards.org&#x2F;press&#x2F;releases&#x2F;archive&#x2F;2004&#x2F;06&#x2F;08&#x2F;&quot;&gt;Web Standards: Who Cares Anyway?&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Most salient question in the survey: &lt;strong&gt;What roadblocks or challenges have affected your use of Web standards?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&quot;All of the above&quot; applies to my position to a certain extent, but the biggest challenges I experience in my capacity of as a web developer for &lt;a href=&quot;http:&#x2F;&#x2F;www.muvee.com&#x2F;&quot;&gt;muvee Technologies&lt;&#x2F;a&gt; (yes, I just got employed, 2 weeks ago) relate to that of lack of team and management knowledge and support. The current webpages are coded in old school tables, using Dreamweaver. Everyone else on the web team uses Dreamweaver. There&#x27;s absolutely nothing wrong with that, because a WYSIWYG editor is the best for productivity. And I take nothing away from the frontend designer and media designer - they are a class act when it comes to design.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m probably the oddity in the team, the only guy using a text editor to crunch out PHP scripts using the HTML webpages that are done by the creative department. And I am the only one to see invalid HTML, unclosed tags, and spacer images that Dreamweaver generates. Does it matter to the designers? Not one bit because they don&#x27;t see it and the pages still turn out find in the important browsers. Does it matter to me? Yes, it is annoying because I&#x27;ve been coding to Web Standards wherever I can, but &lt;strong&gt;it is something I can and should live with&lt;&#x2F;strong&gt;. There are honestly far more important things to do, as I have been reminded, than cleaning the HTML towards Web Standards-production code. I can&#x27;t argue with that. The website &lt;strong&gt;works&lt;&#x2F;strong&gt; (well, it doesn&#x27;t work in Opera, but fixing it is going to be a touchy subject I&#x27;ll bring up after I&#x27;m more settled into my position), so what&#x27;s the point of wasting time making changes that don&#x27;t produce any tangible benefit (to them). I can&#x27;t argue with that too, yet.&lt;&#x2F;p&gt;
&lt;p&gt;But when the time comes when there aren&#x27;t more important things to do, I will be faced with an urge to propose a shift towards Web Standards. How will that turn out? One word - &lt;strong&gt;badly&lt;&#x2F;strong&gt;. Why? Because the designers are not going to like it. They (nor the company, I&#x27;d guess) would not be willing to toss away what they&#x27;ve used for years to produce their webpages. Unless Dreamweaver starts becoming a far better webpage editor in terms of the code it generates, I don&#x27;t think they&#x27;d like looking at raw HTML code (and I don&#x27;t blame them either). I&#x27;d probably become public enemy number one in the web team if I start proposing these changes, even if I suggest to undertake the conversion to Web Standards all by myself. I don&#x27;t have a case, yet.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, take the &lt;a href=&quot;http:&#x2F;&#x2F;www.webstandards.org&#x2F;survey&#x2F;200406&quot;&gt;survey&lt;&#x2F;a&gt;, let WaSP know what&#x27;s happening in the real world, and also let me know if and how you&#x27;ve managed to convince your department&#x2F;company to switch to Web Standards. Please do share your experiences, especially those that end in sucess, because that&#x27;s where I believe everyone has lots to learn from.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gmail invites for sale everywhere</title>
    <published>2004-06-13T02:40:52+00:00</published>
    <updated>2004-06-13T02:40:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/13/gmail-invites-for-sale-everywhere/"/>
    <id>https://chuyeow.wtf/2004/06/13/gmail-invites-for-sale-everywhere/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/13/gmail-invites-for-sale-everywhere/">&lt;p&gt;OK maybe not &lt;em&gt;everywhere&lt;&#x2F;em&gt;, but seeing threads offering Gmail invitations at a price over at the &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;forumdisplay.php?f=7&quot;&gt;Trading Post&lt;&#x2F;a&gt; at &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt; is new (besides the old news on Gmail invites put up for auction at eBay and also &lt;a href=&quot;http:&#x2F;&#x2F;gmailswap.com&#x2F;&quot;&gt;gmail swap&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Someone is even &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php?t=174636&quot;&gt;offering a Gmail invite for logo design&lt;&#x2F;a&gt;. Look at these threads all offering Gmail for cash or kind - &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php?t=174695&quot;&gt;1&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php?t=174657&quot;&gt;2&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php?t=174474&quot;&gt;3&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php?t=174534&quot;&gt;4&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And no, I don&#x27;t have a Gmail account so don&#x27;t ask me for one. If you want a 2GB email account, try &lt;a href=&quot;http:&#x2F;&#x2F;www.aventuremail.com&#x2F;&quot;&gt;AventureMail&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Seen elsewhere - Free eBook &quot;Budget Design&quot;</title>
    <published>2004-06-10T02:35:25+00:00</published>
    <updated>2004-06-10T02:35:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/10/seen-elsewhere-free-ebook-budget-design/"/>
    <id>https://chuyeow.wtf/2004/06/10/seen-elsewhere-free-ebook-budget-design/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/10/seen-elsewhere-free-ebook-budget-design/">&lt;p&gt;Didier Hilhorst and Dan Rubin of &lt;a href=&quot;http:&#x2F;&#x2F;superfluousbanter.org&#x2F;&quot;&gt;SuperfluousBanter&lt;&#x2F;a&gt; fame have written and released for free (for 7 days) &lt;a href=&quot;http:&#x2F;&#x2F;sinelogic.com&#x2F;&quot;&gt;Budget Design: Increase Profit by Improving Process&lt;&#x2F;a&gt;. After 7 days, it&#x27;ll set you back $9.&lt;&#x2F;p&gt;
&lt;p&gt;All web developers should take a look at it (even if your budget is larger than the US trade deficit), because it&#x27;s quality stuff from 2 quality web developers (and now, writers).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Seen elsewhere - Firefox 0.9 Tour</title>
    <published>2004-06-10T01:43:35+00:00</published>
    <updated>2004-06-10T01:43:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/10/seen-elsewhere-firefox-09-tour/"/>
    <id>https://chuyeow.wtf/2004/06/10/seen-elsewhere-firefox-09-tour/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/10/seen-elsewhere-firefox-09-tour/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;&quot;&gt;Neil Turner&lt;&#x2F;a&gt; has a &lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;2004&#x2F;Jun&#x2F;09&#x2F;firefox_09_tour.html&quot;&gt;comprehensive article&lt;&#x2F;a&gt; that takes you through what&#x27;s new in Firefox 0.9.&lt;&#x2F;p&gt;
&lt;p&gt;I was going to do the exact same thing when the full 0.9 release arrives, but Neil has done an excellent job with his article and I just may forego that and just point you to his article instead (which is what I&#x27;m doing now).&lt;&#x2F;p&gt;
&lt;p&gt;Neil also has posts frequently on Mozilla to his blog. Check out his &lt;a href=&quot;http:&#x2F;&#x2F;www.neilturner.me.uk&#x2F;entries&#x2F;cat_mozilla.html&quot;&gt;Mozilla category archives&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox profile directory to change again</title>
    <published>2004-06-08T00:09:16+00:00</published>
    <updated>2004-06-08T00:09:16+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/08/firefox-profile-directory-to-change-again/"/>
    <id>https://chuyeow.wtf/2004/06/08/firefox-profile-directory-to-change-again/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/08/firefox-profile-directory-to-change-again/">&lt;p&gt;The profile directory for Firefox will be changed (for the last time) to Mozilla&#x2F;Firefox&#x2F; (from Firefox&#x2F;), as Ben Goodger &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=81428&quot;&gt;announced at the MozillaZine forums&lt;&#x2F;a&gt;. This follows up on the last profile directory change &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;03&#x2F;05&#x2F;firefox_profiles_will_no_longer_be_in_phoenix_folder.php&quot;&gt;from Phoenix&#x2F; to Firefox&#x2F;&lt;&#x2F;a&gt;. This also seems to mean that the profile directory for the Mozilla suite will go into Mozilla&#x2F; while having a Firefox&#x2F; directory under that (i.e. Mozilla&#x2F;Firefox&#x2F;) for Firefox - a little weird.&lt;&#x2F;p&gt;
&lt;p&gt;As usual, &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;04&#x2F;17&#x2F;getting_firefox_nightlies_be_careful_when_using_mozilla_backup.php&quot;&gt;beware of inadvertently losing your profile&lt;&#x2F;a&gt; if you use &lt;a href=&quot;http:&#x2F;&#x2F;backup.jasnapaka.com&#x2F;&quot;&gt;Mozilla Backup&lt;&#x2F;a&gt; - be sure the check that it takes into account the directory change when migrating across nightly builds.&lt;&#x2F;p&gt;
&lt;p&gt;Users of the Firefox 0.8 release, don&#x27;t worry, because I&#x27;m sure Ben and his team will have a neat, transparent migration script for your profiles when Firefox 0.9 comes out. You probably wouldn&#x27;t have to do a thing.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox 0.9 could be out in a week</title>
    <published>2004-06-07T22:59:20+00:00</published>
    <updated>2004-06-07T22:59:20+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/07/firefox-09-could-be-out-in-a-week/"/>
    <id>https://chuyeow.wtf/2004/06/07/firefox-09-could-be-out-in-a-week/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/07/firefox-09-could-be-out-in-a-week/">&lt;p&gt;Ben Goodger (Firefox engineering lead) has &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=81943&quot; title=&quot;Read Ben&#x27;s thread at MozillaZine Forums&quot;&gt;announced&lt;&#x2F;a&gt; mozilla.org is targeting a 12th June or 14th June release date for Firefox 0.9. The Extension Manager will be fully enabled in this build, as will the new update mechanism for themes (and extensions, of course).&lt;&#x2F;p&gt;
&lt;p&gt;When it&#x27;s released, be prepared to see mozilla.org go down again (as was the case with the 0.8 release of Firefox) thanks to the Slashdot effect. Hoard your extensions and themes in advance (well, at least those extensions which are not yet 0.9-compatible). Remember that BitTorrent exists if the Mozilla.org servers go down. You have been forewarned.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Comment spam masquerading as a TrackBack ping</title>
    <published>2004-06-02T23:05:03+00:00</published>
    <updated>2004-06-02T23:05:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/06/02/comment-spam-masquerading-as-a-trackback-ping/"/>
    <id>https://chuyeow.wtf/2004/06/02/comment-spam-masquerading-as-a-trackback-ping/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/06/02/comment-spam-masquerading-as-a-trackback-ping/">&lt;p&gt;I&#x27;ve been getting hundreds of comment spam but this particular one was different because it was meant to appear like a TrackBack ping at a cursory glance.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;A new comment has been posted on your blog redemption in a blog, on entry&lt;br &#x2F;&gt;
#156 (How to really kill Windows Messenger).&lt;br &#x2F;&gt;
https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;21&#x2F; how_to_really_kill_windows_messenger.php&lt;&#x2F;p&gt;
&lt;p&gt;IP Address: 218.145.25.80&lt;br &#x2F;&gt;
Name: *****&lt;br &#x2F;&gt;
Email Address: edrufk@yahoo.com&lt;br &#x2F;&gt;
URL: http:&#x2F;&#x2F;www.*******.com&lt;&#x2F;p&gt;
&lt;p&gt;Comments:&lt;&#x2F;p&gt;
&lt;p&gt; Read on for the skinny... redemption in a blog: How to really kill Windows Messenger...&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;And some of the things in those spam comments are just plain sick. You guys are sick, you hear that?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Your own private CVS repository</title>
    <published>2004-05-31T13:46:08+00:00</published>
    <updated>2004-05-31T13:46:08+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/31/your-own-private-cvs-repository/"/>
    <id>https://chuyeow.wtf/2004/05/31/your-own-private-cvs-repository/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/31/your-own-private-cvs-repository/">&lt;p&gt;To think I&#x27;d tried to set upon the path of setting up a CVS server a few weeks back to allow me and several friends sharing a dedicated server to have our own private CVS repositories. The approach I took was to setup the server for password authentication (pserver). Naturally, I failed to get it running (had some issues with xinetd), and had given up since. Little thought did I give to alternative ways of setting up a CVS repository, and probably the most common sense way, using &lt;acronym title=&quot;Remots SHell&quot;&gt;RSH&lt;&#x2F;acronym&gt; - specifically, SSH, to connect. Well, that worked, and it was amazingly simple to do too.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m going to assume you have a shell account to your webserver accessible via SSH. Also, your server should have the cvs client installed - you can test it by logging into your shell account and typing &#x27;cvs -v&#x27;, whereupon it should print the CVS version and the usual blurb.&lt;&#x2F;p&gt;
&lt;p&gt;Now, my server is &lt;strong&gt;codefront.net&lt;&#x2F;strong&gt; and I have a user account &lt;strong&gt;chuyeow&lt;&#x2F;strong&gt;. First, I&#x27;d have to create a repository on my server. I do that by logging in to my shell account (using SSH) and creating a directory where I&#x27;d have read-write access. The simplest place is to create a directory in your home directory (mine&#x27;s &lt;strong&gt;&#x2F;home&#x2F;chuyeow&lt;&#x2F;strong&gt;).&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;$ mkdir &#x2F;home&#x2F;chuyeow&#x2F;cvsroot&lt;&#x2F;div&gt;
&lt;p&gt;Create the CVS repository:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;$ cvs -d &#x2F;home&#x2F;chuyeow&#x2F;cvsroot init&lt;&#x2F;div&gt;
&lt;p&gt;There I&#x27;m done! I now have a CVS repository that&#x27;s accessible from any location so long as I have a SSH client and a CVS client.&lt;&#x2F;p&gt;
&lt;p&gt;To access my repository, I&#x27;d first have to set my CVSROOT to &lt;strong&gt;:ext:chuyeow@codefront.net:&#x2F;home&#x2F;chuyeow&#x2F;cvsroot&lt;&#x2F;strong&gt;, and the CVS_RSH environment variable to &quot;ssh&quot;. I do that by entering these lines below into my ~&#x2F;.bashrc file.&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;export CVSROOT=:ext:chuyeow@codefront.net:&#x2F;home&#x2F;chuyeow&#x2F;cvsroot&lt;br &#x2F;&gt;
export CVS_RSH=ssh
&lt;&#x2F;div&gt;
&lt;p&gt;Now, all that&#x27;s left to do is to import my existing sources into the repository:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;$ cvs import -m &quot;Imported sources&quot; sources_dir vendor start&lt;&#x2F;div&gt;
&lt;p&gt;That&#x27;s it! You can checkout a copy and then do CVS checkins, merges, etc. as you normally would from now on.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Singaporeans like their spam</title>
    <published>2004-05-31T12:33:50+00:00</published>
    <updated>2004-05-31T12:33:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/31/singaporeans-like-their-spam/"/>
    <id>https://chuyeow.wtf/2004/05/31/singaporeans-like-their-spam/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/31/singaporeans-like-their-spam/">&lt;p&gt;A recently conducted &lt;a href=&quot;http:&#x2F;&#x2F;straitstimes.com.sg&#x2F;mpolls&#x2F;1,4387,IndexPolls-222-Poll-VR,00.html?&quot;&gt;poll &lt;&#x2F;a&gt;at &lt;a href=&quot;http:&#x2F;&#x2F;straitstimes.com.sg&#x2F;&quot;&gt;The Straits Times Interactive&lt;&#x2F;a&gt; (online version of local leading newspaper) shows 71% (at time of writing) of the poll takers preferring an opt-out scheme &quot;because [they] don&#x27;t mind knowing all that&#x27;s out there.&quot; And spam? &quot;It&#x27;s useful information to me&quot;, at least for 68% of the sample size. Granted, the sample size is only around 1000+ (I got that from the print version of the poll - apparently it&#x27;s not available in the online version), so it&#x27;s hardly accurate, but the results still leave some niggling doubts as to whether Singaporeans are really that &lt;em&gt;kiasu&lt;&#x2F;em&gt; (colloqualism for &quot;scared to lose&quot;) that they believe something worthwhile could be gotten from spam. Or perhaps the poll was rigged. I don&#x27;t know Singaporeans anymore.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla recommended at Singapore&#x27;s new antispam move</title>
    <published>2004-05-26T14:17:21+00:00</published>
    <updated>2004-05-26T14:17:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/26/mozilla-recommended-at-singapores-new-antispam-move/"/>
    <id>https://chuyeow.wtf/2004/05/26/mozilla-recommended-at-singapores-new-antispam-move/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/26/mozilla-recommended-at-singapores-new-antispam-move/">&lt;p&gt;So Singapore has taken a &lt;a href=&quot;http:&#x2F;&#x2F;straitstimes.asia1.com.sg&#x2F;topstories&#x2F;story&#x2F;0,4386,252879,00.html&quot;&gt;significant step against spam&lt;&#x2F;a&gt;. I&#x27;m not going to comment on the antispam move in this entry (if at all), but I thought it interesting to check out the &quot;free trial of anti-spam software&quot; as reported in the &lt;a href=&quot;http:&#x2F;&#x2F;straitstimes.asia1.com.sg&#x2F;topstories&#x2F;story&#x2F;0,4386,252879,00.html&quot;&gt;article&lt;&#x2F;a&gt; and found something interesting. The &lt;a href=&quot;http:&#x2F;&#x2F;www.antispam.org.sg&#x2F;&quot;&gt;Singapore AntiSpam Resource Centre&lt;&#x2F;a&gt; has a list of &lt;a href=&quot;http:&#x2F;&#x2F;www.antispam.org.sg&#x2F;consumer.html#software&quot;&gt;recommended antispam software&lt;&#x2F;a&gt;, and in that list is none other than &quot;Mozilla Browser&quot; and a write-up on Mozilla Mail&#x27;s Bayesian filtering system.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Mozilla being recommended on antispam website&quot; src=&quot;&#x2F;assets&#x2F;antispam-mozilla.png&quot; width=&quot;347&quot; height=&quot;218&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Nice. I just wrote in to tell them to include &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Mozilla Thunderbird&lt;&#x2F;a&gt; in that list, and also to possibly change &quot;Mozilla Browser&quot; to just &quot;Mozilla&quot; or &quot;Mozilla Mail&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: Well they&#x27;ve very promptly changed it to Mozilla Thunderbird. It has replaced the previous &quot;Mozilla Browser&quot; completely though.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Why BitTornado is a better BitTorrent client</title>
    <published>2004-05-26T13:59:48+00:00</published>
    <updated>2004-05-26T13:59:48+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/26/why-bittornado-is-a-better-bittorrent-client/"/>
    <id>https://chuyeow.wtf/2004/05/26/why-bittornado-is-a-better-bittorrent-client/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/26/why-bittornado-is-a-better-bittorrent-client/">&lt;p&gt;I get tons of anime via &lt;a href=&quot;http:&#x2F;&#x2F;bitconjurer.org&#x2F;BitTorrent&#x2F;&quot; title=&quot;Go to the BitTorrent official website&quot;&gt;BitTorrent&lt;&#x2F;a&gt; and one of my favorite BitTorrent clients has been &lt;a href=&quot;http:&#x2F;&#x2F;bittornado.com&#x2F;&quot;&gt;BitTornado&lt;&#x2F;a&gt; (previously known as Shadow&#x27;s Experimental client - nice rebranding too). I liked it because it was simple and light, and it uses the latest official BitTorrent code that allows for incremental allocation of files (since version 3.3). Before, BitTorrent would allocate the entire required disk space for the files you&#x27;re downloading prior to actually connecting to peers&#x2F;seeders.&lt;&#x2F;p&gt;
&lt;p&gt;Now, BitTornado 0.3 has just made an advocate of me. &lt;a href=&quot;http:&#x2F;&#x2F;forums.degreez.net&#x2F;viewtopic.php?t=747&quot;&gt;Changes&lt;&#x2F;a&gt; include a per-file download priority system and most significantly, a fast resume feature that allows recently-run torrents to be started immediately without the need for a hash-check! I got my 4.4GB download (68% done) started in a flash, sans disk-thrashing. You can&#x27;t imagine how useful that is with large torrents of several gigabytes, where hash-checking can take an interminably long time and not to mention the painful disk-thrashing involved. I get big torrents of several gigabytes quite often, and I dread the hash-checking process because it slows my system to a crawl for several minutes and also starts the processor fan spinning like mad to cool away the extra heat.&lt;&#x2F;p&gt;
&lt;p&gt;Also very cool (and something that brings it on par with other BitTorrent clients like &lt;a href=&quot;http:&#x2F;&#x2F;azureus.sourceforge.net&#x2F;&quot;&gt;Azureus&lt;&#x2F;a&gt; in this respect) is the per-file download priority system which allows you to choose the priorities of files in a multiple-file torrent. You can choose to download just a single file in the torrent if you wish, something which was sorely missing before.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of BitTornado file download priority system in action&quot; src=&quot;&#x2F;assets&#x2F;bittornado-priority.png&quot; width=&quot;370&quot; height=&quot;123&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;BitTornado&#x27;s an excellent BitTorrent client, but to be honest I&#x27;ve only tried the official client, Azureus, and &lt;a href=&quot;http:&#x2F;&#x2F;pingpong-abc.sourceforge.net&#x2F;&quot;&gt;ABC&lt;&#x2F;a&gt;, all of which I didn&#x27;t quite grow to like. Which BitTorrent client do you use, and why?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox Extension Manager is here! Almost...</title>
    <published>2004-05-26T03:24:01+00:00</published>
    <updated>2004-05-26T03:24:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/26/firefox-extension-manager-is-here-almost/"/>
    <id>https://chuyeow.wtf/2004/05/26/firefox-extension-manager-is-here-almost/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/26/firefox-extension-manager-is-here-almost/">&lt;p&gt;Ben Goodger says in &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=79208&quot;&gt;this thread&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Extension-Manager enabled builds should be available today on ftp.m.o [ftp.mozilla.org]. Please start using these and test the new EM, file bugs!&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;&quot;Today&quot; being 24 May of course. The Extension Manager is partially functional now in branch builds (which you can get from the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;&quot;&gt;Mozilla Firefox nightly FTP site&lt;&#x2F;a&gt; - just look for dates ending with &quot;-0.9&quot;). Get one of these builds, either &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;2004-05-24-09-0.9&#x2F;&quot;&gt;2004-05-24-0.9&lt;&#x2F;a&gt; build or the very fresh &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;2004-05-25-10-0.9&#x2F;&quot;&gt;2004-05-25-10-0.9&lt;&#x2F;a&gt; build (of course, if there are later builds by the time you read this, you should get those instead).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Extension Manager installing Download Statusbar extension&quot; src=&quot;&#x2F;assets&#x2F;ff-em-install.png&quot; width=&quot;320&quot; height=&quot;240&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Only &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=79512&quot;&gt;extensions that have been updated&lt;&#x2F;a&gt; to work with the new Extensions API will be reflected in the Extension Manager (other extensions should install fine, but they won&#x27;t be listed in the Extension Manager - they appear in Tools -&gt; Options -&gt; Themes as before). I tried out &lt;a href=&quot;http:&#x2F;&#x2F;white.sakura.ne.jp&#x2F;~piro&#x2F;xul&#x2F;_contentholder.html.en&quot;&gt;Content Holder&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;white.sakura.ne.jp&#x2F;~piro&#x2F;xul&#x2F;_ctxextensions.html.en&quot;&gt;ContextMenu Extensions&lt;&#x2F;a&gt; just to see how they work.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Extension Manager just after installing compatible extensions&quot; src=&quot;&#x2F;assets&#x2F;ff-em-install-working.png&quot; width=&quot;320&quot; height=&quot;240&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Turns out they install just fine in a download manager-like kind of way. And after a restart of Firefox, they show up just fine.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Extension Manager with compatible extensions installed&quot; src=&quot;&#x2F;assets&#x2F;ff-em-working.png&quot; width=&quot;320&quot; height=&quot;240&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The &quot;Checking for Updates&quot; for extensions doesn&#x27;t work correctly yet - it shows a &quot;New Updates Available&quot; notification whether or not there actually are any new updates.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of new extension updates notification&quot; src=&quot;&#x2F;assets&#x2F;ff-em-new-updates.png&quot; width=&quot;185&quot; height=&quot;50&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Lots of functionality is not there of course, but it helps to know that things are &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;ben&#x2F;archives&#x2F;005456.html&quot;&gt;moving&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;ben&#x2F;archives&#x2F;005524.html&quot;&gt;along&lt;&#x2F;a&gt; just fine. Go Team Firefox!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>One year of blogging</title>
    <published>2004-05-25T01:32:15+00:00</published>
    <updated>2004-05-25T01:32:15+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/25/one-year-of-blogging/"/>
    <id>https://chuyeow.wtf/2004/05/25/one-year-of-blogging/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/25/one-year-of-blogging/">&lt;p&gt;One year ago today (well, it&#x27;s actually yesterday, since it just crossed midnight), 24 May 2003, I wrote my very first blog entry. Of course, I started with good old &lt;a href=&quot;http:&#x2F;&#x2F;blogger.com&#x2F;&quot;&gt;Blogger&lt;&#x2F;a&gt;, moved on to &lt;a href=&quot;http:&#x2F;&#x2F;www.blog-city.com&#x2F;&quot;&gt;Blog-City&lt;&#x2F;a&gt;, and then &lt;a href=&quot;http:&#x2F;&#x2F;www.freeroller.net&#x2F;&quot;&gt;FreeRoller&lt;&#x2F;a&gt; (now renamed to &lt;a href=&quot;http:&#x2F;&#x2F;www.jroller.com&#x2F;&quot;&gt;JRoller&lt;&#x2F;a&gt;), before I finally settled on using Movable Type on my own hosting account. Probably going to stick around, at least until I manage to move to WordPress without losing my customizations to my Movable Type installation.&lt;&#x2F;p&gt;
&lt;p&gt;In the one year that&#x27;s passed, this weblog has undergone just 3 major redesigns (which I regrettably haven&#x27;t archived for future, er, contemplation). It started out as a Java blog, before getting more involved with web development topics, and then Mozilla (Firefox, Thunderbird) news. I think I&#x27;ve settled comfortably on the topics of &quot;web development, Mozilla, Firefox, Thunderbird, CSS, programming&quot; plus any tech bits that interest me.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I&#x27;m glad that people are still reading :), and I am honored to have actually made a good number of blogrolls. Thanks for having me.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Lone Wolf RPG has landed!</title>
    <published>2004-05-25T00:38:09+00:00</published>
    <updated>2004-05-25T00:38:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/25/lone-wolf-rpg-has-landed/"/>
    <id>https://chuyeow.wtf/2004/05/25/lone-wolf-rpg-has-landed/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/25/lone-wolf-rpg-has-landed/">&lt;p&gt;The good people at &lt;a href=&quot;http:&#x2F;&#x2F;www.projectaon.org&#x2F;&quot;&gt;Project Aon&lt;&#x2F;a&gt; sent out an email on their mailing list today to announce the release of the &lt;a href=&quot;http:&#x2F;&#x2F;www.mongoosepublishing.com&#x2F;detail.php?qsID=357&amp;qsSeries=Core&quot;&gt;Lone Wolf RPG&lt;&#x2F;a&gt; (RPG in the Pen and Paper sense, not the &lt;acronym title=&quot;Computer Role-Playing Game&quot;&gt;CRPG&lt;&#x2F;acronym&gt; sense). Yes, a &lt;acronym title=&quot;Pen and Paper&quot;&gt;PnP&lt;&#x2F;acronym&gt; RPG! Not that I&#x27;ve ever truly played one beyond a fleeting tryst with BattleTech PnP. Where are the people who play PnP games in Singapore hiding?&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, I digress. The rulebook seems to be very interesting reading - the usual stuff you&#x27;d expect in a Dungeons and Dragons rulebook. I suppose this sounds fantastically geeky, but reading rulebooks and sourcebooks for Dragonlance and Forgotten Realms at Borders is something I actually enjoy - and yes I don&#x27;t play PnP. Go figure.&lt;&#x2F;p&gt;
&lt;p&gt;Check out the character classes available:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;In this rulebook, we have included the following character classes to get you started - the Brother of the Crystal Star, Dwarven Gunner of Bor, Kai Lord (of course), Magician of Dessi, Shadaki Buccaneer, Sommerlund Knight of the Realm, and Telchos Warrior.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;And who doesn&#x27;t remember those Crypt Spawns, Doomwolves, Drakkarim, Giak, Gourgaz, Helghasts, Kraan and Vordaks.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Lone Wolf RPG rulebook cover art&quot; src=&quot;&#x2F;assets&#x2F;lonewolf-rpg-cover.jpg&quot; width=&quot;160&quot; height=&quot;210&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re interested in &lt;a href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;exec&#x2F;obidos&#x2F;ASIN&#x2F;1904577474&#x2F;projectaon-20&quot;&gt;The Lone Wolf RPG&lt;&#x2F;a&gt;, check it out at Amazon.com (there isn&#x27;t much there at the moment though), and if you purchase it, affiliate earnings would help fund Project Aon.&lt;&#x2F;p&gt;
&lt;p&gt;Note: I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;10&#x2F;13&#x2F;got_lone_wolf.php&quot;&gt;wrote about&lt;&#x2F;a&gt; Project Aon while back, in case you&#x27;re interested.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>One ping (service) to rule them all: Ping-O-Matic</title>
    <published>2004-05-24T00:13:23+00:00</published>
    <updated>2004-05-24T00:13:23+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/24/one-ping-service-to-rule-them-all-ping-o-matic/"/>
    <id>https://chuyeow.wtf/2004/05/24/one-ping-service-to-rule-them-all-ping-o-matic/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/24/one-ping-service-to-rule-them-all-ping-o-matic/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;pingomatic.com&#x2F;&quot;&gt;Ping-o-Matic&lt;&#x2F;a&gt; is now not only a HTML form-based service that you can use to notify multiple sites of your new weblog entry. This &lt;a href=&quot;http:&#x2F;&#x2F;pingomatic.com&#x2F;blog&#x2F;archives&#x2F;2004&#x2F;05&#x2F;20&#x2F;metapinging&#x2F;&quot;&gt;weblog entry&lt;&#x2F;a&gt; let us in on the new ping URL http:&#x2F;&#x2F;rpc.pingomatic.com&#x2F; that you can use to replace the long list of URLs you&#x27;re currently pinging everytime you make a new weblog entry.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of MT ping form section&quot; src=&quot;&#x2F;assets&#x2F;mt-ping-form.png&quot; width=&quot;305&quot; height=&quot;175&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This means no more waiting for your weblog software (be it Movable Type, WordPress, or something else) as it pings multiple services.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Sorry, no more hot-linking, please</title>
    <published>2004-05-23T17:11:44+00:00</published>
    <updated>2004-05-23T17:11:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/23/sorry-no-more-hot-linking-please/"/>
    <id>https://chuyeow.wtf/2004/05/23/sorry-no-more-hot-linking-please/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/23/sorry-no-more-hot-linking-please/">&lt;p&gt;Yup that&#x27;s it, no more hot-linking of images (and CSS files as well) on this site, please. Thanks to pippo&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showpost.php?postid=846842&amp;postcount=5&quot;&gt;&lt;br &#x2F;&gt;
How can I prevent hot-linking images?&lt;&#x2F;a&gt; post, any hot-link requests to this site will be redirected to this image below instead:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;hotlinking.gif&quot; alt=&quot;Image shown in place of hot-linked images&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I know there have been cases of legitimate hot-linking (at least in my view they are legitimate), such as from forum threads (legitimate because I don&#x27;t expect your run-of-the-mill forum member to have webspace). So this &quot;sorry&quot; goes to you guys. If I notice hot-linking from forum threads in the future, I&#x27;ll be sure to add you to the allowed list of referrers. In fact, I&#x27;ve already added &lt;a href=&quot;http:&#x2F;&#x2F;gathering.tweakers.net&#x2F;forum&#x2F;&quot;&gt;http:&#x2F;&#x2F;gathering.tweakers.net&#x2F;forum&#x2F;&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;mozillapl.org&#x2F;forum&#x2F;&quot;&gt;http:&#x2F;&#x2F;mozillapl.org&#x2F;forum&#x2F;&lt;&#x2F;a&gt; to   the &quot;allowed list&quot; in my &lt;a href=&quot;&#x2F;htaccess.txt&quot;&gt;.htaccess&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I did this because there have been people who have been leeching my image files, list bullets and even my CSS(!), and I think that is bad form. If you want an image from this site, download it, and upload it on your server. So far every image and screenshot I&#x27;ve ever posted is available for &quot;free&quot; despite the &lt;a href=&quot;http:&#x2F;&#x2F;creativecommons.org&#x2F;licenses&#x2F;by-nc-sa&#x2F;1.0&#x2F;&quot;&gt;Creative Commons Attribution-NonCommercial-ShareAlike 1.0 license&lt;&#x2F;a&gt;, and should be in the future unless I turn into the Picasso of graphic design soon.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MT-Blacklist Updater 0.2 - user-contributed improvement</title>
    <published>2004-05-21T17:52:58+00:00</published>
    <updated>2004-05-21T17:52:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/21/mt-blacklist-updater-02-user-contributed-improvement/"/>
    <id>https://chuyeow.wtf/2004/05/21/mt-blacklist-updater-02-user-contributed-improvement/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/21/mt-blacklist-updater-02-user-contributed-improvement/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;blog.edbateman.com&#x2F;&quot;&gt;Edward Bateman&lt;&#x2F;a&gt; wrote me last week to suggest an improvement to &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;scripts&#x2F;blacklistupdater&#x2F;&quot;&gt;MT-Blacklist Updater&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I then realised that if large numbers of users began to use your script, then Jay&#x27;s server would be under extremely high load just around the hour of each day, and especially during specific US times.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;He then went on to suggest a tiny bit of code for how to workaround this problem - it works by generating a random interval of time for the script to sleep before accessing the MT-Blacklist master blacklist changes RSS feed. Er, yes I didn&#x27;t think of this at all and all credit to Edward for pointing this out.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;scripts&#x2F;blacklistupdater&#x2F;&quot;&gt;Go get it&lt;&#x2F;a&gt; if you&#x27;re interested - to upgrade from 0.1, just simply replace the existing files with the current ones. Of course, you have to change the configuration settings in updateblacklist.php again, so make sure you copy them out from the old file.&lt;&#x2F;p&gt;
&lt;p&gt;Also, I haven&#x27;t upgraded MT-Blacklist since version 1.62 so it would be nice to know someone could tell me if MT-Blacklist Updater breaks in the newer versions.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Asa (Mozilla guy) meets Opera</title>
    <published>2004-05-15T19:44:25+00:00</published>
    <updated>2004-05-15T19:44:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/15/asa-mozilla-guy-meets-opera/"/>
    <id>https://chuyeow.wtf/2004/05/15/asa-mozilla-guy-meets-opera/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/15/asa-mozilla-guy-meets-opera/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;&quot;&gt;Asa&lt;&#x2F;a&gt; tried the recent &lt;a href=&quot;http:&#x2F;&#x2F;www.opera.com&#x2F;&quot;&gt;Opera&lt;&#x2F;a&gt; 7.5 release and &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;archives&#x2F;005479.html&quot;&gt;wrote about it&lt;&#x2F;a&gt; in his blog. I won&#x27;t jump in and make a debate or express my opinion on his entry nor on the Opera die-hards&#x27; comments (in that same entry) because I&#x27;m too worn out to think. But I do think it is interesting to point out the debate for those of you who haven&#x27;t seen one of these in the topic of browsers (as opposed to the PC&#x2F;Mac and Windows&#x2F;Linux debates).&lt;&#x2F;p&gt;
&lt;p&gt;Asa &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;archives&#x2F;005480.html&quot;&gt;posts an update&lt;&#x2F;a&gt; later in response to reader comments.&lt;&#x2F;p&gt;
&lt;p&gt;PS. to &lt;a href=&quot;http:&#x2F;&#x2F;gemal.dk&#x2F;mozilla&#x2F;blogupdates.html&quot;&gt;Blogupdates&lt;&#x2F;a&gt; readers, you&#x27;ve probably already followed the goings on at Asa&#x27;s weblog, but bear with me - this is for my non-Blogupdates readers. Oh and if I seem to be hogging the top spot in Blogupdates, it&#x27;s not me constantly re-posting my entry or doing some silly stuff - I think it&#x27;s a bug regarding non-GMT times in the Blogupdates script and have informed Henrik (Gemal) already.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Away</title>
    <published>2004-05-15T19:06:49+00:00</published>
    <updated>2004-05-15T19:06:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/15/away/"/>
    <id>https://chuyeow.wtf/2004/05/15/away/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/15/away/">&lt;p&gt;Before anyone jumps to the conclusion that I&#x27;ve fallen into torpor or crumbled to dust in Final Death, let me assure you that I will merely be away on a short trip for the purpose of getting away from Things That Suck™ (among other purposes). Will be back Wednesday evening (my time, &lt;acronym title=&quot;China Coast Time (GMT+0800)&quot;&gt;CCT&lt;&#x2F;acronym&gt;). If I&#x27;m not back by then, assume the worst.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Interesting job interview today</title>
    <published>2004-05-12T03:31:36+00:00</published>
    <updated>2004-05-12T03:31:36+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/12/interesting-job-interview-today/"/>
    <id>https://chuyeow.wtf/2004/05/12/interesting-job-interview-today/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/12/interesting-job-interview-today/">&lt;p&gt;Fresh graduate that I am, I have been submitting applications for quite a number of jobs, mostly revolving around the &quot;web developer&quot; and the &quot;software developer&quot; careers. Of course, I am always supplementing my income with web design and development work, and have always been on the lookout for freelance work. Sometimes I wonder about work, about whether to work for someone else, or to strike out on my own... ah, ah, ah... That&#x27;s a topic for another day.&lt;&#x2F;p&gt;
&lt;p&gt;So, back on track, I went for an interview today with a &lt;acronym title=&quot;Small and Medium-sized Enterprise&quot;&gt;SME&lt;&#x2F;acronym&gt;, and the interviewer was seemingly the owner (educated guesswork involved). He was young, he was entrepreneurial (he had at least 1 major startup that crashed, the current one is the one I was seeking a position in, and it&#x27;s successful enough). But what was most interesting was how the interview went.&lt;&#x2F;p&gt;
&lt;p&gt;You see, he was looking over my resumé, and he actually made suggestions on how I should rearrange it and present individual sections, in the most friendly, I&#x27;m-here-to-help-you-friend manner. I was surprised, pleasantly. This guy was actually spending time offering very very valuable advice to me. Great stuff.&lt;&#x2F;p&gt;
&lt;p&gt;And he was honest, he said he couldn&#x27;t meet my salary expectations, he said that the job I&#x27;m applying for (&quot;Java Developer&quot;) is a tedious, repetitive job. He also said something to the effect that starting at a small company like his is not something he&#x27;d recommend I do, &quot;as a friend&quot;. Everything made a lot of sense. Excellent career advice.&lt;&#x2F;p&gt;
&lt;p&gt;I didn&#x27;t get the job. He said &quot;it&#x27;d be a waste&quot; for me to go with this job, when I should be aiming higher. I believe that this is what he felt (not that &quot;it&#x27;d be a waste&quot; - that&#x27;s subjective), that he wasn&#x27;t going through this amazing amount of trouble just to make me feel better about myself for not getting the job. Sincerity shone through. Either that or he is a sterling actor (which I doubt).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Microsoft now says SP2 will not install on pirated copies of Windows XP</title>
    <published>2004-05-12T02:04:27+00:00</published>
    <updated>2004-05-12T02:04:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/12/microsoft-now-says-sp2-will-not-install-on-pirated-copies-of-windows-xp/"/>
    <id>https://chuyeow.wtf/2004/05/12/microsoft-now-says-sp2-will-not-install-on-pirated-copies-of-windows-xp/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/12/microsoft-now-says-sp2-will-not-install-on-pirated-copies-of-windows-xp/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.betanews.com&#x2F;&quot;&gt;BetaNews&lt;&#x2F;a&gt; reports that &lt;a href=&quot;http:&#x2F;&#x2F;www.betanews.com&#x2F;article.php3?sid=1084264398&quot;&gt;SP2 Will Not Install on Pirated Copies of XP&lt;&#x2F;a&gt;, contrary to what local (Singaporean) publication &lt;a href=&quot;http:&#x2F;&#x2F;computertimes.asia1.com.sg&#x2F;&quot;&gt;Computer Times&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;computertimes.asia1.com.sg&#x2F;news&#x2F;story&#x2F;0,5104,2292,00.html&quot;&gt;reported earlier&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Just when I was being amazed at how thoughtful Microsoft was for everyone of us Windows XP users, pirates and legitimate users alike.&lt;&#x2F;p&gt;
&lt;p&gt;This (in the Computer Times article) made &lt;em&gt;very, very&lt;&#x2F;em&gt; good sense:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;Having these unsecured users means bigger worm and virus outbreaks - which also impacts the Internet and consequently, our legitimate users as well.&quot;&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Legitimate users should damn well be pissed at this announcement more than users of pirated copies. Why? Simply because there is no doubt whatsoever that when SP2 comes, cracks and keygens will quickly be released that would allow you to install SP2 anyway, if you have a pirated copy. Informed users of pirated copies won&#x27;t be stopped from getting SP2. But a good majority of users of pirated copies may simply not care and live with a non-SP2 Windows XP. And what good will it do to protect only the legitimate users when vulnerable systems are legion? (Of course, this is based on the assumption that SP2 does greatly secure a system.)&lt;&#x2F;p&gt;
&lt;p&gt;Sure, illegal users don&#x27;t deserve updates, I very much agree. But when this encroaches into the security of legitimate users, I think it&#x27;s very very prudent and smart to give them the updates as well, for all the reasons that Barry Goffe put forward in the &lt;a href=&quot;http:&#x2F;&#x2F;computertimes.asia1.com.sg&#x2F;news&#x2F;story&#x2F;0,5104,2292,00.html&quot;&gt;Computer Times article&lt;&#x2F;a&gt;. Illegal users don&#x27;t deserve updates, but legitimate users do very well deserve to have these illegal users&#x27; Windows XP setups secured and protected as well, for their (legitimate users) sake.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Singaporeans found blogging</title>
    <published>2004-05-07T01:39:59+00:00</published>
    <updated>2004-05-07T01:39:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/05/07/singaporeans-found-blogging/"/>
    <id>https://chuyeow.wtf/2004/05/07/singaporeans-found-blogging/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/05/07/singaporeans-found-blogging/">&lt;p&gt;Pardon the newsy (and awkward) title for this entry - it&#x27;s hard trying to think up creative titles when that juice dries up. Anyway, this is more of a gratuitous, promotional linking entry than a real blog entry (although some of you will not be unaccustomed to blogs that are full-on linkblogs - and I&#x27;m not talking about side link-blogs).&lt;&#x2F;p&gt;
&lt;p&gt;So yeah, recently I&#x27;ve encountered a couple of local (Singaporean) webloggers whom I&#x27;ve had to pleasure of speaking to. They are one &lt;a href=&quot;http:&#x2F;&#x2F;motherblogger.blogspot.com&#x2F;&quot;&gt;Alex Choo&lt;&#x2F;a&gt; and one &lt;a href=&quot;http:&#x2F;&#x2F;www.sodesires.com&#x2F;weblog&#x2F;&quot;&gt;Jaime Wong&lt;&#x2F;a&gt;, both very different people and rather unrelated in fact, so I should speak of each in turn.&lt;&#x2F;p&gt;
&lt;p&gt;Well, Alex is someone I&#x27;ve had the pleasure of speaking with at length (via &lt;acronym title=&quot;Instant Messenger&quot;&gt;IM&lt;&#x2F;acronym&gt;) and will be someone I&#x27;ll be working with on a clandestine project that will save the world from the Antediluvians when Gehenna comes...  yes, something like that. Alex is also the owner of &lt;a href=&quot;http:&#x2F;&#x2F;google-apps.com&#x2F;&quot;&gt;Google Apps&lt;&#x2F;a&gt;, a collection of tools that use the Google API. This includes &quot;&lt;a href=&quot;http:&#x2F;&#x2F;google-apps.com&#x2F;adsense&#x2F;adsense.php&quot;&gt;Adsense serves...&lt;&#x2F;a&gt;&quot;, which tells you which ads a particular webpage would serve, and also &lt;a href=&quot;http:&#x2F;&#x2F;google-apps.com&#x2F;glocalnews&#x2F;glocalnews.php&quot;&gt;Glocal News&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;google-apps.com&#x2F;glocalnews&#x2F;glocalnews.php&quot;&gt;Glocal News&lt;&#x2F;a&gt; lets you search for news on &lt;a href=&quot;http:&#x2F;&#x2F;news.google.com&#x2F;&quot;&gt;Google News&lt;&#x2F;a&gt; related to a particular country:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Glocal News does not just check for country names, it also checks for commonly used terms associated with that country.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;You may ask: &quot;why don&#x27;t I just go to &lt;a href=&quot;http:&#x2F;&#x2F;news.google.com&#x2F;&quot;&gt;Google News&lt;&#x2F;a&gt; and key in &#x27;USA&#x27; to find USA-related news?&quot; The difference lies in there being other keywords related to each country, and these are entered in the search for you invisibly. That gives you a rather good set of results, if you do try it out. The bad thing, however, is there&#x27;s no way you can add more keywords and the application depends on the author appending more keywords as they become relevant.&lt;&#x2F;p&gt;
&lt;p&gt;Now, &lt;a href=&quot;http:&#x2F;&#x2F;www.sodesires.com&#x2F;weblog&#x2F;&quot;&gt;Jaime Wong&lt;&#x2F;a&gt; is a freelance web designer who wrote me simply because you don&#x27;t see many Singaporeans who know what &lt;a href=&quot;http:&#x2F;&#x2F;webstandards.org&#x2F;about&#x2F;&quot;&gt;Web Standards&lt;&#x2F;a&gt; mean - we need to stick together, all 4 of us. We did talk a bit about starting a local interest group, but as of this time there&#x27;re so very few of us. Probably needs to gather more momentum and weight first before a thrust of any sort is to do any good. If you&#x27;re Singaporean and are interested in a local interest group dealing with Web Standards, do &lt;a href=&quot;&#x2F;contact&#x2F;&quot;&gt;write me&lt;&#x2F;a&gt; or &lt;a href=&quot;http:&#x2F;&#x2F;www.sodesires.com&#x2F;contact&#x2F;&quot;&gt;Jaime&lt;&#x2F;a&gt;, just for a chat or anything at all.&lt;&#x2F;p&gt;
&lt;p&gt;By the way, Jaime&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.sodesires.com&#x2F;weblog&#x2F;index.html&quot;&gt;weblog&lt;&#x2F;a&gt; is absolutely stunning. You have to check it out. It was even &lt;a href=&quot;http:&#x2F;&#x2F;www.cssvault.com&#x2F;gallery&#x2F;so_desires.php&quot;&gt;listed on CSS Vault&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Hmm... Well, this didn&#x27;t turn out to be a linkblog-like entry after all.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Computer problems (er, need help)</title>
    <published>2004-04-30T02:12:05+00:00</published>
    <updated>2004-04-30T02:12:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/30/computer-problems-er-need-help/"/>
    <id>https://chuyeow.wtf/2004/04/30/computer-problems-er-need-help/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/30/computer-problems-er-need-help/">&lt;p&gt;&lt;ins&gt;Update: Well, the problem seems solved now, and thanks to everyone for your advice :). Rather than repeat what I said in &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;04&#x2F;30&#x2F;computer_problems_er_need_help.php#comment15&quot;&gt;my comment&lt;&#x2F;a&gt;, do check it out if you&#x27;ve replied to my call for help. Thanks again!&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This is a computer problem that has been bugging my desktop PC and me (me mostly - the machine seems pretty happy, and sometimes I think I hear sniggers). Well, the problem is, it boots up and then freezes irrevocably (resetting is the only recourse). Nothing out of the ordinary yet, considering I&#x27;m running Windows XP, but it freezes at any point from bootup to a fully logged in session in Windows XP. Sometimes it even fails to POST. Sometimes there is just a white line across the screen and the rest is black.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s what I think could be causes:&lt;br &#x2F;&gt;
1) The monitor (it&#x27;s a Phillips Brilliance 105 - circa 1996 I think) is too old. But does an old monitor cause the system not to boot or to freeze? Anyone had experience with old monitors? Will it blow up in my face?&lt;br &#x2F;&gt;
2) The power supply&#x27;s dying. Possible. But it&#x27;s a new one and it should be way above requirements.&lt;&#x2F;p&gt;
&lt;p&gt;I don&#x27;t know how to debug (or perhaps I&#x27;m just too lazy), so I&#x27;m casting about hoping someone would bite and tell me that they have had this exact same problem and how to solve it.&lt;&#x2F;p&gt;
&lt;p&gt;PS. I&#x27;m ready for any suggestions that my monitor is truly dead or highly dangerous in its current state - gives me an excuse to get a new, bigger (it&#x27;s 15 inch) one.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The official Firefox and Thunderbird build threads in RSS</title>
    <published>2004-04-30T01:20:23+00:00</published>
    <updated>2004-04-30T01:20:23+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/30/the-official-firefox-and-thunderbird-build-threads-in-rss/"/>
    <id>https://chuyeow.wtf/2004/04/30/the-official-firefox-and-thunderbird-build-threads-in-rss/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/30/the-official-firefox-and-thunderbird-build-threads-in-rss/">&lt;p&gt;If you&#x27;ve been a good boy or girl, you would have been going to &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;&quot;&gt;Mozillazine Forums&lt;&#x2F;a&gt; now and then to check out those &quot;The Official Win32 build ... is out&quot; threads posted daily by &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;profile.php?mode=viewprofile&amp;u=13445&quot; title=&quot;View Peter(6)&#x27;s profile&quot;&gt;Peter(6)&lt;&#x2F;a&gt; (for Firefox) and &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;profile.php?mode=viewprofile&amp;u=15030&quot; title=&quot;View Ale&#x27;s profile&quot;&gt;Ale&lt;&#x2F;a&gt; (for Thunderbird). What exactly are in these threads? Well, they highlight the latest fixes, patches, bugs, regressions and related news (if any), among other things. A daily snapshot and report of the changes since the last official Win32 build, so to speak. Check out today&#x27;s (2004-04-29) &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=72706&quot;&gt;Firefox thread&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=72772&quot;&gt;Thunderbird thread&lt;&#x2F;a&gt; and you&#x27;ll see what I mean. Very, very useful, and all credit goes to Peter(6) for his hard work and also to Ale who followed in Peter(6)&#x27;s footsteps by doing the same for Thunderbird.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of part of an official Win32 build ... is out thread&quot; src=&quot;&#x2F;assets&#x2F;official-win32-thread.png&quot; width=&quot;381&quot; height=&quot;290&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;When Jacob XP asked yesterday in this &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=72240&quot;&gt;thread&lt;&#x2F;a&gt; whether an RSS feed for these official builds threads could be created, I had a feeling that tommorrow (which is today), there &lt;strong&gt;will&lt;&#x2F;strong&gt; be such an RSS feed. Such was my belief in the spirit of the community. And true enough, there is such an &lt;a href=&quot;http:&#x2F;&#x2F;pryan.org&#x2F;firefox&#x2F;jayfromtaiwan&#x2F;RSS.xml&quot;&gt;RSS feed for the official builds thread&lt;&#x2F;a&gt; already in existence way before I logged into Mozillazine Forums today. This is possible thanks to Jay (aka Jayfromtaiwan), who&#x27;s going to &lt;em&gt;manually&lt;&#x2F;em&gt; update an RSS feed with summaries of these official build threads, you have another excellent source just to keep track of all these great forum posts that appear daily.&lt;&#x2F;p&gt;
&lt;p&gt;Now we have an alternative to the just as excellent &lt;a href=&quot;http:&#x2F;&#x2F;squarefree.com&#x2F;burningedge&#x2F;&quot;&gt;The Burning Edge&lt;&#x2F;a&gt;, and more importantly (to me), a quick way to find out the latest &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Thunderbird&lt;&#x2F;a&gt; checkins, changes and regressions.&lt;&#x2F;p&gt;
&lt;p&gt;Jay is also a custom builder as well, so do check out his &lt;a href=&quot;http:&#x2F;&#x2F;pryan.org&#x2F;mozilla&#x2F;firefox&#x2F;jayfromtaiwan&#x2F;&quot;&gt;Mozilla build site&lt;&#x2F;a&gt; for custom builds of Firefox, Thunderbird, and the occasional Mozilla suite. Custom builds are unofficial builds created by good people, and will include things like processor-specific optimizations (such as SSE2 support for Pentium 4), optional components (such as the DOM Inspector and SVG support), and patches that haven&#x27;t made (or may not make) it into the official builds.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Server move imminent</title>
    <published>2004-04-26T18:30:02+00:00</published>
    <updated>2004-04-26T18:30:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/26/server-move-imminent/"/>
    <id>https://chuyeow.wtf/2004/04/26/server-move-imminent/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/26/server-move-imminent/">&lt;p&gt;Just a note in case someone wonders why this site is down or looks kinda funky in the next 24 hours (or so), I&#x27;m changing servers yet again.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: after some problems with DNS (there wasn&#x27;t a &lt;acronym title=&quot;Start of Authority&quot;&gt;SOA&lt;&#x2F;acronym&gt; resource record), we&#x27;re finally at the new server. &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;contact&#x2F;&quot;&gt;Write me&lt;&#x2F;a&gt; if you notice something missing or just plain wrong.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Outsearch with Firefox</title>
    <published>2004-04-23T17:57:56+00:00</published>
    <updated>2004-04-23T17:57:56+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/23/outsearch-with-firefox/"/>
    <id>https://chuyeow.wtf/2004/04/23/outsearch-with-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/23/outsearch-with-firefox/">&lt;p&gt;This is a mini-article I wrote for the &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;newsletter&#x2F;archives?id=4&quot; title=&quot;View the archives for the Crier&quot;&gt;SitePoint Community Crier&lt;&#x2F;a&gt; after a fellow staff member requested that I write some helpful tips for &quot;next week&#x27;s Crier&quot;. It&#x27;s just been published in &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;newsletter&#x2F;viewissue.php?id=4&amp;issue=64&quot;&gt;Issue 64&lt;&#x2F;a&gt; and I&#x27;m simpy reproducing it here.&lt;&#x2F;p&gt;
&lt;p&gt;The SitePoint Community Crier is the newsletter of &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt;, and is put together by the Community Team lead by Saara Ord (&lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;member.php?u=9644&quot; title=&quot;View Saz249&#x27;s profile at SitePoint Forums&quot;&gt;Saz249&lt;&#x2F;a&gt;). They do amazing work and I must say probably the most work among all the Teams (Programming, Design, Hosting, and Grow) just by producing the Crier alone. If you are not already subscribed, show them a bit of support by giving the Crier a go (subscribe at &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;newsletter&#x2F;&quot;&gt;Newsletters page&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll probably be writing more mini-articles for Firefox for the Crier, so if you have any suggestions on what I should cover, do &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;contact&#x2F;&quot; title=&quot;Write me an email using my contact forum&quot;&gt;write me&lt;&#x2F;a&gt; or leave a comment. An even better idea would be to submit your own article to the Crier staff for publication - if you&#x27;re already a member of SitePoint Forums, just contact &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;member.php?u=9644&quot; title=&quot;View Saz249&#x27;s profile at SitePoint Forums&quot;&gt;Saz249&lt;&#x2F;a&gt;, or you can write me and I&#x27;ll set you up.&lt;&#x2F;p&gt;
&lt;p&gt;Now, on to the article...&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h3&gt;Outfox, Outsearch with Firefox&lt;&#x2F;h3&gt;
&lt;h4&gt;Searching from address bar&lt;&#x2F;h4&gt;
&lt;p&gt;Did you know that if you entered a search term into the address bar (where you&#x27;d normally enter a URL), Firefox does a &quot;I&#x27;m Feeling Lucky&quot; search on Google? If you don&#x27;t know what that means, try clicking the &quot;I&#x27;m Feeling Lucky&quot; search on &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;&quot;&gt;Google&lt;&#x2F;a&gt; the next time you&#x27;re there - basically, it takes you to the very first search result.&lt;&#x2F;p&gt;
&lt;p&gt;Granted, not many people would consider that very useful. I&#x27;d prefer to have it perform a normal Google search instead, as I&#x27;m sure quite a number of you would too. Not to fear, because with Firefox, you have &lt;em&gt;control&lt;&#x2F;em&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s see how you can make Firefox perform a &lt;em&gt;standard&lt;&#x2F;em&gt; Google search from the address bar:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Type in &lt;strong&gt;about:config&lt;&#x2F;strong&gt; in your Firefox address bar. It should open a page like this (click for a larger image):
&lt;div class=&quot;img&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;outfox&#x2F;images&#x2F;ff-abt-cfg.png&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-abt-cfg-thumb.png&quot; alt=&quot;Screenshot of Firefox about:config page&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;
  &lt;&#x2F;li&gt;
&lt;li&gt;In the &quot;&lt;strong&gt;Filter&lt;&#x2F;strong&gt;&quot; textbox, enter &quot;&lt;strong&gt;keyword.URL&lt;&#x2F;strong&gt;&quot;. You should then see the &lt;strong&gt;keyword.URL&lt;&#x2F;strong&gt; preference with the value &quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?btnI=I%27m+Feeling+Lucky&amp;q=&quot;. This is what makes it perform a &quot;I&#x27;m Feeling Lucky&quot; search.&lt;&#x2F;li&gt;
&lt;li&gt;All we got to do, is to double-click that preference, and enter &quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?btnG=Google+Search&amp;q=&quot; in the textbox of the dialog that comes up.
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-keyword-url-pref.png&quot; alt=&quot;Screenshot of keyword.URL preference dialog&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;
  &lt;&#x2F;li&gt;
&lt;li&gt;Hit &quot;OK&quot;, and you&#x27;re done! Try it out.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;If Google doesn&#x27;t quite float your boat, you can use other search engines as well. Use &quot;http:&#x2F;&#x2F;search.yahoo.com&#x2F;search?p=&quot; for a Yahoo! search, &quot;http:&#x2F;&#x2F;imdb.com&#x2F;find?q=&quot; for a &lt;a href=&quot;http:&#x2F;&#x2F;imdb.com&#x2F;&quot;&gt;IMDB&lt;&#x2F;a&gt; search, &quot;http:&#x2F;&#x2F;dictionary.reference.com&#x2F;search?q=&quot; for a &lt;a href=&quot;http:&#x2F;&#x2F;dictionary.com&#x2F;&quot;&gt;Dictionary.com&lt;&#x2F;a&gt; search, and so on. You just have to make sure that the search string of your search facility accepts a query string that takes in your keyword(s).&lt;&#x2F;p&gt;
&lt;h4&gt;Custom keywords&lt;&#x2F;h4&gt;
&lt;p&gt;This is an amazingly powerful feature in Firefox.  With custom keywords, you can load up a webpage using with your assigned keyword. For example, I can go to the SitePoint.com website by typing &quot;sp&quot; into the address bar. To achieve that, all I had to do was to create a bookmark for SitePoint.com (http:&#x2F;&#x2F;sitepoint.com&#x2F;) and add the keyword &quot;sp&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;&quot;That&#x27;s it?&quot;, you say. Well, we&#x27;re getting to it, the real power of custom keywords, that is. With custom keywords, I can Google search for the &quot;best browser&quot; by typing &quot;g best browser&quot; in the address bar, lookup the meaning of &quot;promissory&quot; on Dictionary.com by typing &quot;d promissory&quot;, and lookup the &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;&quot;&gt;Bugzilla&lt;&#x2F;a&gt; bug report for &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=75138&quot;&gt;bug 75138&lt;&#x2F;a&gt; by typing &quot;bug 75138&quot;. Let&#x27;s work through how to do that with a Dictionary.com custom keyword search.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Bookmark &quot;http:&#x2F;&#x2F;dictionary.reference.com&#x2F;search?q=%s&quot;. &quot;%s&quot; is the placeholder that will be replaced by the word (or words) whose meaning you&#x27;re looking up.&lt;&#x2F;li&gt;
&lt;li&gt;Give the bookmark a keyword as described above. I use &quot;d&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;Your bookmark properties should then look like this:
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-dict-keyword.png&quot; alt=&quot;Screenshot of bookmark properties and custom keyword field&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;
  &lt;&#x2F;li&gt;
&lt;li&gt;Click &quot;OK&quot; and now typing &quot;d estoppel&quot; in the address bar will load the Dictionary.com entry for &quot;estoppel&quot;.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;asa&#x2F;&quot;&gt;Asa Dotzler&lt;&#x2F;a&gt; has a good write-up on &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;docs&#x2F;end-user&#x2F;keywords.html&quot;&gt;how to use custom keywords&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Ben Goodger has also created a Firefox extension called &lt;a href=&quot;http:&#x2F;&#x2F;www.bengoodger.com&#x2F;software&#x2F;smartsearch&#x2F;&quot;&gt;SmartSearch&lt;&#x2F;a&gt; that adds a Smart Keyword menu in the context menu.&lt;&#x2F;p&gt;
&lt;h4&gt;Context menu search&lt;&#x2F;h4&gt;
&lt;p&gt;Another convenient feature that boosts your search productivity - searching from the right-click context menu. Select the words you want to search, right-click, then select &lt;strong&gt;Search Web for &quot;keyword&quot;&lt;&#x2F;strong&gt;. This will perform a search for your keyword on Google.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-context-search.png&quot; alt=&quot;Screenshot of Firefox context menu search&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Don&#x27;t like Google? Go to &lt;strong&gt;about:config&lt;&#x2F;strong&gt; in your Firefox address bar as described in the &quot;Searching from address bar&quot; section and look for the &lt;strong&gt;browser.search.defaulturl&lt;&#x2F;strong&gt; preference (its value should be &quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?lr=&amp;ie=UTF-8&amp;oe=UTF-8&amp;q=&quot;). You know what to do! (Hint: read the &quot;Searching from address bar&quot; section.)&lt;&#x2F;p&gt;
&lt;h4&gt;Find as you type&lt;&#x2F;h4&gt;
&lt;p&gt;Now that you&#x27;ve got some search results, you may want to search for occurences of your keyword in a long page. The &quot;Find as you type&quot; function is your savior. Just start typing the word (or words) that you want to find. Firefox will incrementally find and highlight the first instance of the word that matches what you type.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;ff-fayt.png&quot; alt=&quot;Screenshot of Find as you Type feature in action&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Use F3 or Ctrl-G to do a &quot;Find next&quot;. No need to use the mouse, no need for an extra &quot;Find&quot; dialog that gets in the way! This is one of my favorite Firefox features (this is also in Opera) and I often lapse into simply typing to search for stuff in the occasions when I have to use IE!&lt;&#x2F;p&gt;
&lt;h4&gt;Change the width of the search bar&lt;&#x2F;h4&gt;
&lt;p&gt;The default search bar width is rather small, probably big enough for 20 characters. You can fix this if it bothers you by changing the width by editing your userChrome.css. The userChrome.css file is located in the &quot;chrome&quot; directory in your profile directory. The Firefox Help site has a page explaining how to get to your &lt;a href=&quot;http:&#x2F;&#x2F;texturizer.net&#x2F;firefox&#x2F;edit.html&quot;&gt;userChrome.css&lt;&#x2F;a&gt;, if you&#x27;re not familiar with where your profile folder is. Once you have your userChrome.css, put this bit in there to set the width of the search bar to 350 pixels:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
#search-container {&lt;br &#x2F;&gt;
   -moz-box-flex: 350 !important;&lt;br &#x2F;&gt;
}&lt;&#x2F;div&gt;
&lt;h4&gt;Upcoming search improvements in Firefox 0.9&lt;&#x2F;h4&gt;
&lt;p&gt;Firefox 0.9 will come with more features that will improve your search productivity. You&#x27;ll be able to drag a bit of selected text into the search bar and perform a search on that text. Firefox 0.9 will also include an auto-complete delete feature where your autocomplete entries can be removed by doing a Shift-delete. Very useful for deleting something you don&#x27;t want someone else to come across, without having to clear out your entire history ;)&lt;&#x2F;p&gt;
&lt;p&gt;Another recently added feature is the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;04&#x2F;13&#x2F;new_firefox_feature_add_smart_keywords_from_form_fields.php&quot;&gt;ability to add smart keywords from form fields&lt;&#x2F;a&gt;. No more messing around with &quot;%s&quot; thingies and what not!&lt;&#x2F;p&gt;
&lt;p&gt;These features have been available in &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;&quot;&gt;nightly builds&lt;&#x2F;a&gt; for quite some time now, so grab yourself a copy if you want them now. &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;&quot;&gt;The Burning Edge&lt;&#x2F;a&gt; maintains a watchlist of major bugfixes and regressions, and also links to custom builds (which are professionally packaged and come with processor-specific optimizations).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox extension manager sneak pre-preview</title>
    <published>2004-04-22T03:15:42+00:00</published>
    <updated>2004-04-22T03:15:42+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/22/firefox-extension-manager-sneak-pre-preview/"/>
    <id>https://chuyeow.wtf/2004/04/22/firefox-extension-manager-sneak-pre-preview/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/22/firefox-extension-manager-sneak-pre-preview/">&lt;p&gt;Actually, just the extension manager menu item has been turned on, and a non-working dialog for updating extensions (hence the &quot;pre-preview&quot; - it is not a mistake). This can be seen in today&#x27;s (2004-04-21) nightly builds - I was alerted to this by this CVS comment Ben Goodger gave on a checkin of his:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;turn on extension manager menu item (testing only!)&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Just a note before the screenshots: none of this really works yet! So don&#x27;t go around asking why the extension manager doesn&#x27;t work if you do get the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;2004-04-21-09-trunk&#x2F;&quot;&gt;2004-04-21 nightly build&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;An &quot;Extensions&quot; menu item has been added to the &quot;Tools&quot; menu:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Extension Manager menu item&quot; src=&quot;&#x2F;assets&#x2F;ff-extmgr-test-menu.png&quot; width=&quot;184&quot; height=&quot;193&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Clicking on that menu item opens the extensions manager, which supposedly would list the installed extensions and allows you to uninstall or update your extensions. Clicking on &quot;Update&quot; brings up the update dialog, which of course doesn&#x27;t work at this point.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Extension Manager update dialog&quot; src=&quot;&#x2F;assets&#x2F;ff-extmgr-test-update.png&quot; width=&quot;402&quot; height=&quot;300&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Also available in the options (Tools -&gt; Options) is a new &quot;Software Update&quot; section in the &quot;Advanced&quot; section.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Extension Manager options&quot; src=&quot;&#x2F;assets&#x2F;ff-extmgr-test-options.png&quot; width=&quot;400&quot; height=&quot;212&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Firefox will check for updates to your installed extensions via a web service (Ben Goodger has a &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;ben&#x2F;archives&#x2F;005279.html&quot;&gt;weblog entry on this&lt;&#x2F;a&gt;). Good stuff that. Checking for updated extensions is a difficult task to keep up with when you&#x27;ve anything over 3 extensions installed (I have 9). And there&#x27;s going to be checking for new Firefox versions as well, judging from the options. Don&#x27;t suppose it will be too useful for those of us who are in tune with the developments (nightly build users included, of course), but I suppose something like this is so quite standard in most applications now, and probably trivial to implement. Good for &quot;normal&quot; users I guess. Nightly build followers and contributing developers will probably know by instinct that a milestone release has been released. If not news will probably spread like wildfire from sources like MozillaZine and, of course, weblogs. Not going to use that option, I guess.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: Ben has just posted several &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;ben&#x2F;archives&#x2F;005324.html&quot;&gt;screenshots of the Extension Manager&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Infringement of GPL - court grants preliminary injunction</title>
    <published>2004-04-22T00:36:24+00:00</published>
    <updated>2004-04-22T00:36:24+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/22/infringement-of-gpl-court-grants-preliminary-injunction/"/>
    <id>https://chuyeow.wtf/2004/04/22/infringement-of-gpl-court-grants-preliminary-injunction/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/22/infringement-of-gpl-court-grants-preliminary-injunction/">&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;www.netfilter.org&#x2F;&quot; title=&quot;Go to the netfilter&#x2F;iptables project homepage&quot;&gt;netfilter&#x2F;iptables project&lt;&#x2F;a&gt; has been granted a preliminary injunction against &lt;a href=&quot;http:&#x2F;&#x2F;www.sitecom.com&#x2F;&quot;&gt;Sitecom Germany GmbH&lt;&#x2F;a&gt; for not fulfilling the obligations imposed by the GNU &lt;a href=&quot;http:&#x2F;&#x2F;www.gnu.org&#x2F;copyleft&#x2F;gpl.html&quot;&gt;General Public License&lt;&#x2F;a&gt; (which covers the netfilter&#x2F;iptables code used) - Sitecom did not make the source code available nor did they include the GPL license with their products (GPL is viral). Read the &lt;a href=&quot;http:&#x2F;&#x2F;www.netfilter.org&#x2F;news&#x2F;2004-04-15-sitecom-gpl.html&quot;&gt;press release&lt;&#x2F;a&gt; from the netfilter project for more details.&lt;&#x2F;p&gt;
&lt;p&gt;Reading the comments &lt;a href=&quot;http:&#x2F;&#x2F;www.oreillynet.com&#x2F;pub&#x2F;wlg&#x2F;4708&quot;&gt;here&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.groklaw.net&#x2F;article.php?story=20040415115414858&quot;&gt;here&lt;&#x2F;a&gt; had me wondering why people were so surprised by the decision made by the (German) judge. I&#x27;d think that the judge would have looked over the GPL and applied the law in accordance with it and copyright law. An anonymous commentor at Groklaw probably &lt;a href=&quot;http:&#x2F;&#x2F;www.groklaw.net&#x2F;comment.php?mode=display&amp;sid=20040415115414858&amp;title=Why%20do%20people%20seem%20so%20suprised%3F&amp;type=article&amp;order=&amp;hideanonymous=0&amp;pid=0#c117597&quot;&gt;said this best&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New Thunderbird artwork checked in</title>
    <published>2004-04-21T02:39:29+00:00</published>
    <updated>2004-04-21T02:39:29+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/21/new-thunderbird-artwork-checked-in/"/>
    <id>https://chuyeow.wtf/2004/04/21/new-thunderbird-artwork-checked-in/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/21/new-thunderbird-artwork-checked-in/">&lt;p&gt;The Mozilla Visual Identity Team has completed the new artwork for Mozilla Thunderbird, as Steven Garrity (Mozilla Visual Identity Team leader) &lt;a href=&quot;http:&#x2F;&#x2F;www.actsofvolition.com&#x2F;archives&#x2F;2004&#x2F;april&#x2F;newartworkfor&quot;&gt;reports&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Jon Hicks describes &lt;a href=&quot;http:&#x2F;&#x2F;www.hicksdesign.co.uk&#x2F;journal&#x2F;2004&#x2F;04&#x2F;thunderbird&#x2F;&quot;&gt;the process behind the design&lt;&#x2F;a&gt; of the logo. Go check it out.&lt;&#x2F;p&gt;
&lt;p&gt;Naturally, I&#x27;m disappointed by there not being a new default theme for Thunderbird as I&#x27;d &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;04&#x2F;17&#x2F;thunderbird_to_get_new_branding.php&quot;&gt;previously thought&lt;&#x2F;a&gt; had been hinted at. But still, it is a great-looking logo, isn&#x27;t it? It doesn&#x27;t look like the mythical Thunderbird in Native American art that Jon Hicks pointed to in his post to me though. That would have looked cooler and made for a less demure bird - it is a &lt;strong&gt;thunder&lt;&#x2F;strong&gt;bird after all ;).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of 32 x 32 Thunderbird icon&quot; src=&quot;&#x2F;assets&#x2F;tb-new-icon.png&quot; width=&quot;78&quot; height=&quot;79&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;The new logo is included as the application icon in today&#x27;s (2004-04-20) nightly build.Looks pretty nice as a 32 x 32 icon.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of 16 x 16 Thunderbird icon&quot; src=&quot;&#x2F;assets&#x2F;tb-new-icon-small.png&quot; width=&quot;26&quot; height=&quot;25&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;The smaller 16 x 16 version, however, doesn&#x27;t seem to scale well and you can&#x27;t really tell that it&#x27;s a bird (with a resolution of 1024 x 768).&lt;&#x2F;p&gt;
&lt;p&gt;On a brighter note, the about dialog looks just awesome.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of the new Thunderbird About dialog&quot; src=&quot;&#x2F;assets&#x2F;tb-new-about.png&quot; width=&quot;306&quot; height=&quot;356&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>I stand corrected</title>
    <published>2004-04-20T02:33:11+00:00</published>
    <updated>2004-04-20T02:33:11+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/20/i-stand-corrected/"/>
    <id>https://chuyeow.wtf/2004/04/20/i-stand-corrected/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/20/i-stand-corrected/">&lt;p&gt;Email from an anonymous visitor:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Just to inform you, your tagline -- &quot;rambling&#x27;s of a misfit&quot; is misspelled. It should be spelled &quot;ramblings.&quot;&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Ouch. I always thought I knew my apostrophes. Like how there is no apostrophe in &quot;CDs&quot; (it&#x27;s not &quot;CD&#x27;s&quot;) - short for &quot;compact discs&quot;. And the possessive form of &quot;it&quot; is &quot;its&quot; (no apostrophe). &quot;It is&quot;, however, can be shortened to &quot;it&#x27;s&quot;. Blah.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks for pointing out my oversight.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox search now works in textboxes and textareas</title>
    <published>2004-04-18T00:38:56+00:00</published>
    <updated>2004-04-18T00:38:56+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/18/firefox-search-now-works-in-textboxes-and-textareas/"/>
    <id>https://chuyeow.wtf/2004/04/18/firefox-search-now-works-in-textboxes-and-textareas/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/18/firefox-search-now-works-in-textboxes-and-textareas/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;squarefree.com&#x2F;burningedge&#x2F;&quot;&gt;The Burning Edge&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;archives&#x2F;000420.html&quot;&gt;points out&lt;&#x2F;a&gt; that you can now search in textboxes and textareas in a webpage when you do a &quot;Find in this page&quot; search. The corresponding bug is &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=58305&quot;&gt;bug 58305&lt;&#x2F;a&gt; and this enhancement appears in builds on and since 2004-04-16. I sorely missed this, especially so because IE &lt;em&gt;does&lt;&#x2F;em&gt; have this feature - some sites use textareas to display code.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Find in this page in textarea&quot; src=&quot;&#x2F;assets&#x2F;ff-find-textfields.png&quot; width=&quot;374&quot; height=&quot;200&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;As pointed out in this &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=58305#c88&quot; title=&quot;Read the comment in Bugzilla&quot;&gt;comment&lt;&#x2F;a&gt;, this works for both the &quot;Find in this page&quot; function (accessible via Ctrl-F or Edit -&gt; Find in this page...) and the &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;ui&#x2F;accessibility&#x2F;typeaheadfind.html&quot;&gt;Find as you type feature&lt;&#x2F;a&gt;&quot;. But with &quot;Find as you type&quot;, the text found is not highlighted due to &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=134586&quot;&gt;bug 134586&lt;&#x2F;a&gt; - selection in text field is invisible when it doesn&#x27;t have focus. This will probably be fixed by the time Firefox 1.0 is released.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Thunderbird to get new branding!</title>
    <published>2004-04-17T19:26:55+00:00</published>
    <updated>2004-04-17T19:26:55+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/17/thunderbird-to-get-new-branding/"/>
    <id>https://chuyeow.wtf/2004/04/17/thunderbird-to-get-new-branding/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/17/thunderbird-to-get-new-branding/">&lt;p&gt;Looks like Thunderbird is up for a design update with new branding like what happened with the renaming of Firebird to Firefox. Check out the &lt;a href=&quot;http:&#x2F;&#x2F;www.hicksdesign.co.uk&#x2F;journal&#x2F;2004&#x2F;04&#x2F;coming_soon&#x2F;&quot;&gt;teaser at hicksdesign&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Also spotted on that page:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;You’re in luck. The same folks that made the pinstripe theme for OS X are working on a new theme [for Win32] right now….&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>Server went down</title>
    <published>2004-04-17T19:21:02+00:00</published>
    <updated>2004-04-17T19:21:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/17/server-went-down/"/>
    <id>https://chuyeow.wtf/2004/04/17/server-went-down/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/17/server-went-down/">&lt;p&gt;Ugh the server hosting this site went down for at least 7 hours today with no news or emails from the hosting company. Even their own site was down.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m looking at sharing a dedicated server with several online friends, so maybe I&#x27;ll be rid of these problems and have less downtime.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Patch UXTheme.dll with Multi-Patcher to use custom themes</title>
    <published>2004-04-17T03:23:43+00:00</published>
    <updated>2004-04-17T03:23:43+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/17/patch-uxthemedll-with-multi-patcher-to-use-custom-themes/"/>
    <id>https://chuyeow.wtf/2004/04/17/patch-uxthemedll-with-multi-patcher-to-use-custom-themes/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/17/patch-uxthemedll-with-multi-patcher-to-use-custom-themes/">&lt;p&gt;I wrote a few months ago about &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;18&#x2F;patch_uxthemedll_to_really_skin_winxp.php&quot;&gt;skinning WinXP with custom Visual Styles&lt;&#x2F;a&gt; by patching UXTheme.dll. Since then, &lt;a href=&quot;http:&#x2F;&#x2F;www.belchfire.net&#x2F;article555.html&quot;&gt;Belchfire.net reports&lt;&#x2F;a&gt; that a friendlier patching program called Multi-Patcher does what &lt;a href=&quot;http:&#x2F;&#x2F;www.belchfire.net&#x2F;article205.html&quot;&gt;PatchXP&lt;&#x2F;a&gt; does and more. It supports &lt;acronym title=&quot;Service Pack 1&quot;&gt;SP1&lt;&#x2F;acronym&gt; and non-&lt;acronym title=&quot;Service Pack 1&quot;&gt;SP1&lt;&#x2F;acronym&gt; systems, and even &lt;acronym title=&quot;Service Pack 2&quot;&gt;SP2&lt;&#x2F;acronym&gt; (beta version 2082) and Windows Server 2003. Perhaps more importantly, it allows you to easily reverse the patch by simply running Multi-Patcher again - nice safety net.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re looking to skin Windows XP with custom-made themes and Visual Styles available at sites like &lt;a href=&quot;http:&#x2F;&#x2F;www.xpthemes.com&#x2F;skins.asp?library=1&quot;&gt;XPThemes.com&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.xptheme.info&#x2F;&quot;&gt;xptheme.info&lt;&#x2F;a&gt;, this is something you should get.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;Update: thanks to miahz for pointing out that I forgot to link to the Multi-Patcher article.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Getting Firefox nightlies? Be careful when using Mozilla Backup</title>
    <published>2004-04-17T02:22:58+00:00</published>
    <updated>2004-04-17T02:22:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/17/getting-firefox-nightlies-be-careful-when-using-mozilla-backup/"/>
    <id>https://chuyeow.wtf/2004/04/17/getting-firefox-nightlies-be-careful-when-using-mozilla-backup/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/17/getting-firefox-nightlies-be-careful-when-using-mozilla-backup/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;backup.jasnapaka.com&#x2F;&quot;&gt;Mozilla Backup&lt;&#x2F;a&gt; is an excellent, excellent tool for making backups of your Mozilla, Firefox and Thunderbird profiles. Something that should be included in those applications in some similar form or incarnation.&lt;&#x2F;p&gt;
&lt;p&gt;That said, I just lost my latest Firefox profile from today&#x27;s Windows XP clean-up-the-junk-by-reformatting operation, &lt;em&gt;even&lt;&#x2F;em&gt; after I remembered to backup my profile immediately before the reformat. Why? Well, not through any fault of Mozilla Backup. Not because Firefox was acting up. Two hints for you to make some intelligent guesswork, if you&#x27;re so inclined. One, the Firefox profile folder has been &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;03&#x2F;05&#x2F;firefox_profiles_will_no_longer_be_in_phoenix_folder.php&quot;&gt;changed in recent nightlies to &quot;Firefox&quot; instead of &quot;Phoenix&quot;&lt;&#x2F;a&gt;. Two, I was using Mozilla Backup 1.3a. OK probably a bonus hint is in order: &lt;strong&gt;Mozilla Backup 1.3a predates the change in the location of the profile folder&lt;&#x2F;strong&gt;. Dead giveaway, and I didn&#x27;t see that one coming.&lt;&#x2F;p&gt;
&lt;p&gt;Mozilla Backup 1.3a backed up my profile in the &quot;Phoenix&quot; folder, which unfortunately has been untouched since my use of nightlies after 2003-03-12 - it was the dud profile that was left behind after being imported into the &lt;em&gt;current&lt;&#x2F;em&gt; &quot;Firefox&quot; profile folder. An entire month of bookmarks all lost in digital oblivion. Ouch.&lt;&#x2F;p&gt;
&lt;p&gt;At this point, I think it is prudent to state again that this is no fault of Mozilla Backup, more of a(n) (oxymoronic) reasonable folliness on my part. In fact, Pavel Cvrcek (the developer) has been keeping up with that profile folder change, as you&#x27;d be able to tell from recent Mozilla Backup nightlies. I love Mozilla Backup and I&#x27;ll keep using it. Until the time comes, if it does come, that profiles can be imported&#x2F;exported (or saved&#x2F;restored) via a native browser UI.&lt;&#x2F;p&gt;
&lt;p&gt;Bugs &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=22689&quot;&gt;22689&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=187564&quot;&gt;187564&lt;&#x2F;a&gt; had previously been filed in 1999 and 2003 respectively requesting for the same functionality. Interesting to see the initial comments that users would be able to backup profiles by saving their profile directories (and subsequently copying back into a new profile when restoring). Not something very nice for non-technical users of course, considering how getting to the profile folder itself could pose some problems. Not pointing any fingers though, because there is a different time and context when some of those comments were made. It is good to see that someone has been assigned to bug &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=187564&quot;&gt;187564&lt;&#x2F;a&gt;. Vote for those bugs if you think this is important to you too! Submit patches if you know how to help.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New Firefox feature: add smart keywords from form fields.</title>
    <published>2004-04-13T00:25:06+00:00</published>
    <updated>2004-04-13T00:25:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/13/new-firefox-feature-add-smart-keywords-from-form-fields/"/>
    <id>https://chuyeow.wtf/2004/04/13/new-firefox-feature-add-smart-keywords-from-form-fields/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/13/new-firefox-feature-add-smart-keywords-from-form-fields/">&lt;p&gt;I haven&#x27;t been getting nightly builds recently and I just did so when I noticed at &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;archives&#x2F;000414.html&quot;&gt;The Burning Edge&lt;&#x2F;a&gt; that 2004-04-11 builds include this new &quot;Add keyword for this search&quot; feature. Now that is so useful because the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;docs&#x2F;end-user&#x2F;keywords.html&quot;&gt;old way&lt;&#x2F;a&gt; of doing this is so non-intuitive and difficult to explain to non-technical users (who really wants to do the &quot;%s&quot; thing other than people like us?).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of the right-click interface to add smart keywords in Mozilla Firefox&quot; src=&quot;&#x2F;assets&#x2F;ff-add-smart-keyword.png&quot; width=&quot;358&quot; height=&quot;389&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I went in to Bonsai to check out the CVS checkins to the code and Ben Goodger had this CVS comment:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;provide a convenient way for adding smart keywords for web page searches by adding a context menu to form fields with HTTP-GET form actions.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;So it works only on GET form fields - I was wondering why it didn&#x27;t work for just any textbox. This was checked in on 2004-04-09, so I may be a little behind, but it is too good a feature not to talk about. UI improvements are so crucial and so much more important to naive users (naive in the nice sense of the word) because all they ever think of Firefox is the interface. More please, and thank you!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Speaking in binary</title>
    <published>2004-04-07T23:43:02+00:00</published>
    <updated>2004-04-07T23:43:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/07/speaking-in-binary/"/>
    <id>https://chuyeow.wtf/2004/04/07/speaking-in-binary/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/07/speaking-in-binary/">&lt;p&gt;Via weirdbeardmt in this &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php?t=162269&quot; title=&quot;View the thread at SitePoint Forums&quot;&gt;thread&lt;&#x2F;a&gt;: &lt;a href=&quot;http:&#x2F;&#x2F;www.adcott.net&#x2F;binary&#x2F;&quot;&gt;Binary translator&lt;&#x2F;a&gt; converts regular text to binary and vice-versa. Beware - the binary dialect of geek-speak is now easily translatable.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php?t=162269&quot;&gt;Conversation occuring here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Bookmarklet lays out topography of a webpage</title>
    <published>2004-04-07T01:42:31+00:00</published>
    <updated>2004-04-07T01:42:31+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/07/bookmarklet-lays-out-topography-of-a-webpage/"/>
    <id>https://chuyeow.wtf/2004/04/07/bookmarklet-lays-out-topography-of-a-webpage/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/07/bookmarklet-lays-out-topography-of-a-webpage/">&lt;p&gt;Joseph Pearson of &lt;a href=&quot;http:&#x2F;&#x2F;www.make-believe.org&#x2F;&quot;&gt;Make Believe&lt;&#x2F;a&gt; has coded a &lt;a href=&quot;http:&#x2F;&#x2F;www.make-believe.org&#x2F;posts&#x2F;04&#x2F;04&#x2F;01&#x2F;0&quot;&gt;topographic page layout bookmarklet&lt;&#x2F;a&gt; that shows the layout of a webpage. Basically, it recolors the elements of a webpage, giving more deeply nested elements a lighter color. The effect is that you can see the &quot;topography&quot; of a webpage, which makes it that much easier to detect unclosed divs or for those situations where something is wrongly positioned but you just don&#x27;t know why. Another of those must-have web development bookmarklets.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>1GB of email with Gmail? SpyMac already has it</title>
    <published>2004-04-07T01:06:02+00:00</published>
    <updated>2004-04-07T01:06:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/07/1gb-of-email-with-gmail-spymac-already-has-it/"/>
    <id>https://chuyeow.wtf/2004/04/07/1gb-of-email-with-gmail-spymac-already-has-it/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/07/1gb-of-email-with-gmail-spymac-already-has-it/">&lt;p&gt;Now this is nice stuff here. &lt;a href=&quot;http:&#x2F;&#x2F;www.spymac.com&#x2F;&quot;&gt;SpyMac&lt;&#x2F;a&gt;, a community for Mac users (as its name would suggest), is &lt;a href=&quot;http:&#x2F;&#x2F;www.spymac.com&#x2F;forums&#x2F;showthread.php?threadid=71082&quot;&gt;offering &quot;the Internet&#x27;s first free Gigabyte email service&quot;&lt;&#x2F;a&gt;. Of course, Google was theoretically first by running beta trials with &lt;a href=&quot;http:&#x2F;&#x2F;gmail.com&#x2F;&quot;&gt;Gmail&lt;&#x2F;a&gt;, but pretty much SpyMac is the first to roll out such an offer to the world at large.&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Spymac agrees with the staff at Google that a 1 GB e-mail account makes sense.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;It&#x27;s just POP3 and webmail at the moment, but IMAP access is in the works (which is crucial, btw, if 1GB of e-mail is going to make any sense, unless you use webmail or choose to leave your messages on the server).&lt;&#x2F;p&gt;
&lt;p&gt;Besides this, there are also some &lt;a href=&quot;http:&#x2F;&#x2F;www.spymac.com&#x2F;network.php?p=tour&quot;&gt;added free services&lt;&#x2F;a&gt;, like 100MB of web space,  250MB of picture storage, RSS feed aggregator, and even blog hosting.&lt;&#x2F;p&gt;
&lt;p&gt;I couldn&#x27;t resist and signed up. At this moment, I&#x27;ve been getting errors at the final registration page (seems like the sendmail program on the server&#x27;s getting a little too busy). Haven&#x27;t got a confirmation email yet. If you&#x27;re willing to tolerate the lack of credibility (&lt;em&gt;relative to Google&lt;&#x2F;em&gt;), I think SpyMac offers a very sweet deal that&#x27;s hard to resist. Pats on the back for the SpyMac staff for providing this for free. Smart move too, considering the amount of free publicity they&#x27;ll get over the next few days. Oh well, you can&#x27;t fault them for doing so - Google did it first.&lt;&#x2F;p&gt;
&lt;p&gt;I won&#x27;t trust SpyMac with my essential emails, but it&#x27;s interesting enough to take a look-see. Gmail? I&#x27;d trust it with my list of passwords that I store in a spreadsheet - aforementioned password spreadsheet existing hypothetically, of course. Google has gained that much clout and trust, at least in my eyes.&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;www.gadgetopia.com&#x2F;2004&#x2F;04&#x2F;06&#x2F;SpyMacTrumpsGoogle.html&quot;&gt;Gadgetopia&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Smarter referrer spam?</title>
    <published>2004-04-06T00:26:50+00:00</published>
    <updated>2004-04-06T00:26:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/06/smarter-referrer-spam/"/>
    <id>https://chuyeow.wtf/2004/04/06/smarter-referrer-spam/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/06/smarter-referrer-spam/">&lt;p&gt;Ugh more referrer spam innovation. Check out these sites &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;www.klaha.net&#x2F;pers&#x2F;index.php&quot;&gt;[1]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;www.yuki-no-kisho.net&#x2F;my&#x2F;index.php&quot;&gt;[2]&lt;&#x2F;a&gt;. &lt;&#x2F;p&gt;
&lt;p&gt;Notice this bit over at both sites, where there is a link back to this website:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;If your just looking to relax take a look here. It&#x27;s a good site and recommended.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Just a hyperlink pointing to the referrer, so it seems an innocuous enough (and legitimate) backlink. What&#x27;s more, the style is randomized, so if you refresh the page, you get a different-looking site.&lt;&#x2F;p&gt;
&lt;p&gt;Blocked with mod_rewrite in &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;htaccess.txt&quot;&gt;my .htaccess&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Jack I&#x27;m so jealous!</title>
    <published>2004-04-03T15:52:23+00:00</published>
    <updated>2004-04-03T15:52:23+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/03/jack-im-so-jealous/"/>
    <id>https://chuyeow.wtf/2004/04/03/jack-im-so-jealous/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/03/jack-im-so-jealous/">&lt;p&gt;Wrapping up my final year of study at &lt;acronym title=&quot;National University of Singapore&quot;&gt;NUS&lt;&#x2F;acronym&gt; pretty soon - final thesis defence&#x2F;presentation on Monday, last examination paper on April 16. Getting a job has always been there on my mind but I never really bothered about it and have been somewhat noncomittal in looking. Well, I did apply to several companies, went to 2 tests, but no interviews yet. The thesis issue is somewhat blocking everything out, because goddamnit I want to get First Class Honors. Not that I&#x27;m certificate-driven or anything, but just that since I&#x27;m in the position to get it, why the hell not? Will it even have an effect on my job prospects? I don&#x27;t really know. Probably not, you know.&lt;&#x2F;p&gt;
&lt;p&gt;Oh Jack why didn&#x27;t I do better for the aptitude test?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google&#x27;s GMail is for real</title>
    <published>2004-04-02T10:33:27+00:00</published>
    <updated>2004-04-02T10:33:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/04/02/googles-gmail-is-for-real/"/>
    <id>https://chuyeow.wtf/2004/04/02/googles-gmail-is-for-real/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/04/02/googles-gmail-is-for-real/">&lt;p&gt;If you haven&#x27;t yet heard of it, Google&#x27;s upcoming e-mail service, &lt;a href=&quot;http:&#x2F;&#x2F;gmail.com&#x2F;&quot;&gt;Gmail&lt;&#x2F;a&gt;, has been under contention for one of the biggest April Fool&#x27;s jokes ever. People all over have either first believed it (reservedly) and then laughed it off when they saw the press release on April 1st (like good old &lt;a href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;archive&#x2F;2004&#x2F;04&#x2F;01&#x2F;googleWebmail&quot;&gt;Simon Willison&lt;&#x2F;a&gt;, or were thoroughly suspicious and wary of being conned yet again (like me).&lt;&#x2F;p&gt;
&lt;p&gt;The verdict? Yes, Gmail is &lt;a href=&quot;http:&#x2F;&#x2F;www.reuters.com&#x2F;newsArticle.jhtml?type=internetNews&amp;storyID=4728462&amp;section=news&quot;&gt;for real&lt;&#x2F;a&gt;. The Straits Times (local print newspaper) even published an &lt;a href=&quot;http:&#x2F;&#x2F;www.reuters.com&#x2F;newsArticle.jhtml?type=internetNews&amp;storyID=4728462&amp;section=news&quot;&gt;&lt;acronym title=&quot;Associated Press&quot;&gt;AP&lt;&#x2F;acronym&gt; article on Gmail&lt;&#x2F;a&gt; today.&lt;&#x2F;p&gt;
&lt;p&gt;I won&#x27;t inundate you with the details on what &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;gmail&#x2F;help&#x2F;about.html#different&quot;&gt;Gmail offers&lt;&#x2F;a&gt;, but it is interesting to note that e-mails will come with targeted ads &lt;em&gt;a la&lt;&#x2F;em&gt; &lt;a href=&quot;http:&#x2F;&#x2F;google.com&#x2F;adsense&#x2F;overview&quot;&gt;Adsense&lt;&#x2F;a&gt;. Google says &quot;no humans read your email to target the ads&quot;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox Extension Manager</title>
    <published>2004-03-30T18:35:30+00:00</published>
    <updated>2004-03-30T18:35:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/30/firefox-extension-manager/"/>
    <id>https://chuyeow.wtf/2004/03/30/firefox-extension-manager/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/30/firefox-extension-manager/">&lt;p&gt;Looking at the &lt;a href=&quot;http:&#x2F;&#x2F;bonsai.mozilla.org&#x2F;cvsquery.cgi?treeid=default&amp;module=all&amp;branch=HEAD&amp;branchtype=match&amp;dir=mozilla%2Fbrowser+mozilla%2Ftoolkit+mozilla%2Fchrome&amp;file=&amp;filetype=match&amp;who=&amp;whotype=match&amp;sortby=Date&amp;hours=2&amp;date=explicit&amp;mindate=2004-03-29&amp;maxdate=2004-03-30&amp;cvsroot=%2Fcvsroot&quot; title=&quot;View CVS checkins from 2004-03-29 to 2004-03-30&quot;&gt;recent checkins&lt;&#x2F;a&gt; to the Firefox source tree, you can see that Ben Goodger has checked in the initial files for the upcoming Extension Manager (see &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=170006&quot;&gt;bug 170006&lt;&#x2F;a&gt;). The Extension Manager aims to provide for extension uninstallation (currently, you can only disable via the UI - you can, however, &lt;a href=&quot;http:&#x2F;&#x2F;kb.mozillazine.org&#x2F;index.phtml?title=Firefox_:_FAQs_:_Uninstall_Extensions&quot;&gt;remove extensions manually&lt;&#x2F;a&gt;), extension updating, and (hopefully) some level of standardization of extension installation UI screens.&lt;&#x2F;p&gt;
&lt;p&gt;Forcing extensions to have to provide a choice of whether to be installed to the profile folder or to the application folder is another thing I&#x27;d like to see (or at least warn the user that the extension will be installed to the profile folder). Probably wouldn&#x27;t matter too much when you can easily uninstall extensions with the Extension Manager.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;gemal.dk&#x2F;archives&#x2F;000509.html&quot; title=&quot;Read Henrik Gemal&#x27;s weblog entry on the Extension Manager&quot;&gt;Henrik Gemal reports&lt;&#x2F;a&gt; on the same thing, and points out &lt;a href=&quot;http:&#x2F;&#x2F;www.bengoodger.com&#x2F;software&#x2F;mb&#x2F;extensions&#x2F;extension%20manager.txt&quot;&gt;ASCII art mock screens&lt;&#x2F;a&gt; and Ben Goodger&#x27;s writeup on &lt;a href=&quot;http:&#x2F;&#x2F;www.bengoodger.com&#x2F;software&#x2F;mb&#x2F;extensions&#x2F;extensions.html&quot;&gt;the new take on extensions&lt;&#x2F;a&gt;. Mozilla.org also has a section on &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;firefox&#x2F;extensions&#x2F;&quot;&gt;Application extensions&lt;&#x2F;a&gt;, where the Extension Manager is described (some pages are empty at the moment). Interesting reading all.&lt;&#x2F;p&gt;
&lt;p&gt;There are also plans for a Web Front End (see &lt;a href=&quot;http:&#x2F;&#x2F;www.bengoodger.com&#x2F;software&#x2F;mb&#x2F;extensions&#x2F;extensions.html&quot;&gt;Ben&#x27;s new take on extensions&lt;&#x2F;a&gt;), if you were wondering how updating extensions was to be done. The Web Front End will also be the central link and information repository for compatible and verified extensions (much like what &lt;a href=&quot;http:&#x2F;&#x2F;extensionroom.mozdev.org&#x2F;&quot;&gt;Extension Room&lt;&#x2F;a&gt; is now) - a partial solution to the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;03&#x2F;27&#x2F;malicious_xpis_run_executable_binaries.php&quot;&gt;malicious XPIs problem&lt;&#x2F;a&gt; perhaps?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google&#x27;s facelift is official, Personalized Web Search</title>
    <published>2004-03-29T16:51:16+00:00</published>
    <updated>2004-03-29T16:51:16+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/29/googles-facelift-is-official-personalized-web-search/"/>
    <id>https://chuyeow.wtf/2004/03/29/googles-facelift-is-official-personalized-web-search/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/29/googles-facelift-is-official-personalized-web-search/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.dogtoe.com&#x2F;archives&#x2F;2004&#x2F;03&#x2F;28&#x2F;92&#x2F;&quot;&gt;Dogtoe reports&lt;&#x2F;a&gt; that Google&#x27;s new look is official. Previously you could get the new look &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;03&#x2F;07&#x2F;experience_googles_new_look_with_a_bookmarklet.php&quot;&gt;with a bookmarklet&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I also came across this &lt;a href=&quot;http:&#x2F;&#x2F;labs.google.com&#x2F;personalized&#x2F;&quot;&gt;Personalized Web Search&lt;&#x2F;a&gt; at &lt;a href=&quot;http:&#x2F;&#x2F;labs.google.com&#x2F;&quot;&gt;Google Labs&lt;&#x2F;a&gt; which I &lt;em&gt;think&lt;&#x2F;em&gt; is new (could someone confirm?). You can specify a profile (which is saved in a cookie), search for something, and move a slider to increase or decrease the degree of personalization of your search results.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Google Personalized Web Search slider screenshot&quot; src=&quot;&#x2F;assets&#x2F;google-personalized-slider.png&quot; width=&quot;360&quot; height=&quot;338&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;That&#x27;s pretty awesome.&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;http:&#x2F;&#x2F;labs.google.com&#x2F;personalized&#x2F;faq.html#q2&quot;&gt;&lt;p&gt;Google has developed new algorithms that dynamically reorder results by weighting the interests you enter in your profile. When you move the slider, it recalculates and rearranges the results to add more or less emphasis on your profile information.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>Default Thunderbird theme icons and usability</title>
    <published>2004-03-27T16:24:07+00:00</published>
    <updated>2004-03-27T16:24:07+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/27/default-thunderbird-theme-icons-and-usability/"/>
    <id>https://chuyeow.wtf/2004/03/27/default-thunderbird-theme-icons-and-usability/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/27/default-thunderbird-theme-icons-and-usability/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;profile.php?mode=viewprofile&amp;u=4089&quot; title=&quot;View allen&#x27;s profile on MozillaZine&quot;&gt;allen&lt;&#x2F;a&gt; has an excellent and constructive evaluation on the usability of the default &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Thunderbird&lt;&#x2F;a&gt; theme (Qute) icons in this &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=63358&quot;&gt;thread at MozillaZine forums&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Screenshot of Thunderbird Qute theme icons&quot; src=&quot;&#x2F;assets&#x2F;tb-qute-icons.png&quot; width=&quot;350&quot; height=&quot;29&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Interestingly enough, I&#x27;ve used Thunderbird since before the current default theme was instituted and never noticed the usability flaws of some of the icons before I read allen&#x27;s post. I tend to read the text labels, rather than decipher the meaning of an icon. Nevertheless, I can see fully how the icons are confusing and don&#x27;t convey the true intention of their actions - a new user could be slightly addled without the assistance of text labels.&lt;&#x2F;p&gt;
&lt;p&gt;Well, it all goes to show how little benefit I&#x27;ve derived from the &lt;acronym title=&quot;Human-Computer Interaction&quot;&gt;HCI&lt;&#x2F;acronym&gt; module I&#x27;m taking this semester.&lt;&#x2F;p&gt;
&lt;p&gt;Note: No Qute theme-bashing, please (and none ever intended) - Qute is actually a theme that I really like, in fact.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Malicious XPIs run executable binaries</title>
    <published>2004-03-27T15:50:38+00:00</published>
    <updated>2004-03-27T15:50:38+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/27/malicious-xpis-run-executable-binaries/"/>
    <id>https://chuyeow.wtf/2004/03/27/malicious-xpis-run-executable-binaries/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/27/malicious-xpis-run-executable-binaries/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;profile.php?mode=viewprofile&amp;u=15066&quot; title=&quot;View Flexer&#x27;s profile in the MozillaZine forums&quot;&gt;Flexer&lt;&#x2F;a&gt; recently &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=64341&quot; title=&quot;View the thread at MozillaZine forums&quot;&gt;posted his encounter&lt;&#x2F;a&gt; with a website that tried to get him to install a malicious &lt;acronym title=&quot;Cross Platform Installer&quot;&gt;XPI&lt;&#x2F;acronym&gt; (Firefox extension). Upon the user clicking &quot;Install&quot;, the install.js (the script that performs the actual installation) tries to execute the contained executable, which is xxxtoolbar, as &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;profile.php?mode=viewprofile&amp;u=6111&quot; title=&quot;View Paradox52525&#x27;s profile in the MozillaZine forums&quot;&gt;Paradox52525&lt;&#x2F;a&gt; reports.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a snippet of the code in the install.js:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt; var xpiSrc = &quot;istinstall_netscape.exe&quot;;&lt;br &#x2F;&gt;
 initInstall(&quot;Adding a File&quot;,&lt;br &#x2F;&gt;
   &quot;addFile&quot;,&lt;br &#x2F;&gt;
   &quot;1.0.1.7&quot;,&lt;br &#x2F;&gt;
   1);&lt;br &#x2F;&gt;
 f = getFolder(&quot;Temporary&quot;);&lt;br &#x2F;&gt;
setPackageFolder(f);&lt;br &#x2F;&gt;
addFile(xpiSrc);&lt;br &#x2F;&gt;
execute(xpiSrc,&quot;&quot;,false);&lt;&#x2F;div&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;profile.php?mode=viewprofile&amp;u=17554&quot; title=&quot;View Arthur_Dent&#x27;s profile in the MozillaZine forums&quot;&gt;Arthur_Dent&lt;&#x2F;a&gt; breaks down exactly what the XPI and the contained executable does in &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?p=449819#449819&quot;&gt;his post&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Best solution, to me? Verified and digitally signed XPIs are allowed to run without hindrance. For unverified XPIs, warn the user that of that fact, and that the XPI will directly run executable code. Require an extra step of confirmation. That&#x27;s what I think at the moment, but there are some pretty good ideas in that &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=64341&quot; title=&quot;View the thread at MozillaZine forums&quot;&gt;thread&lt;&#x2F;a&gt;. It&#x27;ll be interesting to see how this is dealt with in the near future.&lt;&#x2F;p&gt;
&lt;p&gt;Follow the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=64341&quot; title=&quot;View the thread at MozillaZine forums&quot;&gt;discussion on MozillaZine forums&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: See relevant bug &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=238684&quot;&gt;238684&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Deletion of autocomplete results in Firefox, Mozilla 1.7b released</title>
    <published>2004-03-19T17:36:34+00:00</published>
    <updated>2004-03-19T17:36:34+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/19/deletion-of-autocomplete-results-in-firefox-mozilla-17b-released/"/>
    <id>https://chuyeow.wtf/2004/03/19/deletion-of-autocomplete-results-in-firefox-mozilla-17b-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/19/deletion-of-autocomplete-results-in-firefox-mozilla-17b-released/">&lt;p&gt;Now here&#x27;s a nice feature just checked into the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;Mozilla Firefox&lt;&#x2F;a&gt; source tree that everyone wants - deletion of autocomplete results (bug &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=171605&quot;&gt;171605&lt;&#x2F;a&gt;). There&#x27;s always the odd occasion where you want to just remove a certain entry, but don&#x27;t want to have to clear your browser history (and consequently lose everything else that you &lt;em&gt;want&lt;&#x2F;em&gt; to keep). How does it work? Just do a Shift-Delete when the autocomplete result you want is selected.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;ff-autocomplete.png&quot; src=&quot;&#x2F;assets&#x2F;ff-autocomplete.png&quot; width=&quot;357&quot; height=&quot;115&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Another bugfix is the depiction of application-specific icons in the download manager - check out Ben Goodger&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.bengoodger.com&#x2F;software&#x2F;mb&#x2F;icons.png&quot;&gt;screenshot&lt;&#x2F;a&gt;. Spiffy.&lt;&#x2F;p&gt;
&lt;p&gt;Get the latest &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;&quot;&gt;nightly (2004-03-18)&lt;&#x2F;a&gt; to see these changes for yourself.&lt;&#x2F;p&gt;
&lt;p&gt;In related news, &lt;a href=&quot;http:&#x2F;&#x2F;www.mozillazine.org&#x2F;talkback.html?article=4491&quot;&gt;Mozilla 1.7b has been released&lt;&#x2F;a&gt;. Noteworthy changes include the Password Manager, IMAP IDLE command support for Mail&#x2F;News, and the return of the Talkback crash reporting utility (only in installer builds). This is also very encouraging:&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;releases&#x2F;mozilla1.7b&#x2F;README.html#new&quot;&gt;&lt;p&gt;When compared to Mozilla 1.6, Mozilla 1.7 Beta is 7% faster at startup, is 8% faster at window open time, has 9% faster pageloading times, and is 5% smaller in binary size.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Get &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;releases&#x2F;#1.7b&quot;&gt;Mozilla 1.7b&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;bonsai.mozilla.org&#x2F;cvsquery.cgi?dir=mozilla%2Fbrowser+mozilla%2Ftoolkit+mozilla%2Fchrome&amp;date=week&quot;&gt;Bonsai query for &lt;em&gt;mozilla&#x2F;browser mozilla&#x2F;toolkit mozilla&#x2F;chrome&lt;&#x2F;em&gt; in the past week&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Thesis submitted</title>
    <published>2004-03-19T16:54:01+00:00</published>
    <updated>2004-03-19T16:54:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/19/thesis-submitted/"/>
    <id>https://chuyeow.wtf/2004/03/19/thesis-submitted/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/19/thesis-submitted/">&lt;p&gt;Ever seen that movie where this guy has to do an Honours thesis and went through an extended period of staring at the computer trying to code and write technical reports and a 100-page thesis, and he finally went blind and led a pathetic life after that before dying alone? No? Well, I didn&#x27;t either. Sounds like a pretty boring movie.&lt;&#x2F;p&gt;
&lt;p&gt;Well, anyway, so I&#x27;ve finally submitted my thesis to the examiner for review. That&#x27;s a veritable mountain off my back, really. What have I gained from this test of willpower, this despairing journey of &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;30&#x2F;cpe_the_illegitimate_forgotten_bastard_child_of_ece_dept_nus.php&quot;&gt;initial disappointment&lt;&#x2F;a&gt;, this obstacle-ridden trek, this inward journey (yikes!) that made me realize that I&#x27;m just not cut out for a life in academia? Well, I can write on and on about this, recounting my experiences, or I can just stop here and link gratuitously to my thesis.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;fyp.codefront.net&#x2F;thesis&#x2F;Thesis.pdf&quot; class=&quot;pdf&quot;&gt;Thesis - The Incremental Genetic Algorithm with the Michigan-style Classifier System&lt;&#x2F;a&gt; (PDF format)&lt;&#x2F;p&gt;
&lt;p&gt;Adding a link to my (much shorter) technical paper: &lt;a href=&quot;http:&#x2F;&#x2F;fyp.codefront.net&#x2F;thesis&#x2F;IGAMichigan-techpaper.pdf&quot;&gt;Technical paper - The Incremental Genetic Algorithm with the Michigan-style Classifier System&lt;&#x2F;a&gt; (PDF format), because I see the thesis has become the number 1 result on Google for &quot;incremental genetic algorithm&quot;. Good to provide a shorter readup.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Junk filter improvements in Thunderbird weekly build + new Win32 installer</title>
    <published>2004-03-14T00:32:26+00:00</published>
    <updated>2004-03-14T00:32:26+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/14/junk-filter-improvements-in-thunderbird-weekly-build-new-win32-installer/"/>
    <id>https://chuyeow.wtf/2004/03/14/junk-filter-improvements-in-thunderbird-weekly-build-new-win32-installer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/14/junk-filter-improvements-in-thunderbird-weekly-build-new-win32-installer/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.scott-macgregor.org&#x2F;&quot; title=&quot;Visit Scott&#x27;s homepage&quot;&gt;Scott MacGregor&lt;&#x2F;a&gt; (lead engineer of &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Mozilla Thunderbird&lt;&#x2F;a&gt;) has recently &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=61223&quot;&gt;announced the availability of the 2004-03-12 weekly build&lt;&#x2F;a&gt; with lots of new cool improvements. These improvements include an improved Junk Mail Algorithm, improved &lt;a href=&quot;http:&#x2F;&#x2F;www.networksorcery.com&#x2F;enp&#x2F;rfc&#x2F;rfc2177.txt&quot; title=&quot;Peruse the RFC for the IMAP4 IDLE command&quot;&gt;IDLE&lt;&#x2F;a&gt; command for IMAP, new smilies (emoticons), and several UI improvements and sundry bugfixes. Another interesting development is the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=61337&quot;&gt;availability of a Win32 installer&lt;&#x2F;a&gt; for Thunderbird.&lt;&#x2F;p&gt;
&lt;p&gt;Improvements and patches to the Junk Mail algorithm allow it to produce the same message scores as &lt;a href=&quot;http:&#x2F;&#x2F;spambayes.sourceforge.net&#x2F;&quot;&gt;SpamBayes&lt;&#x2F;a&gt; (another Bayesian spam filter - so good it is often used as a benchmark). What does this mumbo-jumbo mean? It means Thunderbird is now better at classifying your email as spam (or not) correctly. Scott highly recommends anyone trying out the new junk mail filter to first clear out the training file and retrain it. For that purpose, a new button for clearing the training data has been added (bug &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=237151&quot;&gt;237151&lt;&#x2F;a&gt;) for convenience (previously, we had to delete the training.dat file manually).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Thunderbird&#x27;s new Reset Training Data UI&quot; src=&quot;&#x2F;assets&#x2F;tb-reset-training.png&quot; width=&quot;363&quot; height=&quot;146&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Thunderbird&#x27;s new IDLE support for IMAP (bug &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=141369&quot;&gt;141369&lt;&#x2F;a&gt;) also sees many improvements and bugfixes. Simply put, IDLE is a command that allows IMAP email servers to transmit updates to the client in real time. This saves the client from having to continuously poll the server to achieve the effect of new mail appearing immediately. All in all, an exceptionally useful command that saves Thunderbird the work of polling IMAP servers continuously.&lt;&#x2F;p&gt;
&lt;p&gt;New emoticons (bug &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=237045&quot;&gt;237045&lt;&#x2F;a&gt;) are also included in this build, and the artwork comes from Stephen Horlander of the &lt;a href=&quot;http:&#x2F;&#x2F;kmgerich.com&#x2F;pinstripe&#x2F;pinstripe.html&quot;&gt;Pinstripe theme&lt;&#x2F;a&gt; fame. Very nice, compared to the old ones which were terribly dated (I had emoticons turned off because I didn&#x27;t like them).&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Thunderbird&#x27;s new emoticons&quot; src=&quot;&#x2F;assets&#x2F;tb-smiley.png&quot; width=&quot;144&quot; height=&quot;390&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The new Win32 installer is an early attempt at rolling out the Mozilla Thunderbird installer targetted for the 0.6 milestone release (as stated in the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;thunderbird&#x2F;roadmap.html&quot;&gt;Mozilla Thunderbird roadmap&lt;&#x2F;a&gt;). I tried it out and it was fully functional, but there are several nitty gritty issues to be sorted out.&lt;&#x2F;p&gt;
&lt;p&gt;Running the installer presents you with this screen:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Thunderbird installer setup screen&quot; src=&quot;&#x2F;assets&#x2F;tb-setup-first.png&quot; width=&quot;402&quot; height=&quot;314&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A little messed up, but this is an early test build after all. Scott is mostly leveraging off the work put into Firefox&#x27;s Win32 installer. You next get to choose a standard or custom install.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Thunderbird installer screenshot - choose standard or custom install&quot; src=&quot;&#x2F;assets&#x2F;tb-setup-type.png&quot; width=&quot;402&quot; height=&quot;314&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Selecting custom allows you to add additional extensions - at this moment, Scott has only bundled in the &lt;a href=&quot;http:&#x2F;&#x2F;extensionroom.mozdev.org&#x2F;more-info&#x2F;offline&quot;&gt;Offline extension&lt;&#x2F;a&gt;. Plans are in store to bundle other extensions as well, including the DOM Inspector.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&lt;img alt=&quot;tb-setup-add.png&quot; src=&quot;&#x2F;assets&#x2F;tb-setup-add.png&quot; width=&quot;402&quot; height=&quot;314&quot; border=&quot;0&quot; &#x2F;&gt;
&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately (at least to me), the installer &lt;em&gt;silently&lt;&#x2F;em&gt; places shortcut icons on the desktop, in the start menu, and in the quick launch bar. The installer should have asked first. (I see someone else has already &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=61337#429420&quot;&gt;whined&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=61337#429567&quot;&gt;about&lt;&#x2F;a&gt; this) I think with sufficient well-founded feedback, the Thunderbird team will come around to getting that feature into the installer.&lt;&#x2F;p&gt;
&lt;p&gt;Get the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;thunderbird&#x2F;nightly&#x2F;2004-03-12-trunk&quot;&gt;Thunderbird 2004-03-12 build&lt;&#x2F;a&gt; or the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;thunderbird&#x2F;nightly&#x2F;2004-03-12-trunk&#x2F;ThunderbirdSetup.exe&quot;&gt;test Win32 installer build&lt;&#x2F;a&gt; to try out these new improvements and changes.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox profiles are now in &quot;Firefox&quot; folder</title>
    <published>2004-03-12T14:48:19+00:00</published>
    <updated>2004-03-12T14:48:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/12/firefox-profiles-are-now-in-firefox-folder/"/>
    <id>https://chuyeow.wtf/2004/03/12/firefox-profiles-are-now-in-firefox-folder/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/12/firefox-profiles-are-now-in-firefox-folder/">&lt;p&gt;A while back, I mentioned that &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;03&#x2F;05&#x2F;firefox_profiles_will_no_longer_be_in_phoenix_folder.php&quot;&gt;Firefox profiles will be migrated over from the old &quot;Phoenix&quot; directory to a &quot;Firefox&quot; directory&lt;&#x2F;a&gt;. Ben Goodger (Firefox lead engineer) &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=59132&amp;postdays=0&amp;postorder=asc&amp;postsperpage=15&amp;start=0&quot;&gt;postponed the migration&lt;&#x2F;a&gt; from last Friday to yesterday, and the latest &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-trunk&#x2F;&quot;&gt;nightly builds&lt;&#x2F;a&gt; now include this change (see bug &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=203077&quot;&gt;203077&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;If you are using an &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firefox&#x2F;nightly&#x2F;latest-trunk&#x2F;&quot;&gt;official nightly&lt;&#x2F;a&gt; (or an unofficial nightly - see the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewforum.php?f=23&quot;&gt;MozillaZine Firefox Builds forum&lt;&#x2F;a&gt;), you will be prompted with this screen when starting the new build if you have more than 1 profile:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Firefox profile import wizard&quot; src=&quot;&#x2F;assets&#x2F;ff-import-wizard.png&quot; width=&quot;352&quot; height=&quot;285&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Select the profile you want, and your settings and preferences will be imported:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot;&gt;&lt;img alt=&quot;Firefox profile import wizard success screen&quot; src=&quot;&#x2F;assets&#x2F;ff-import-wizard-end.png&quot; width=&quot;352&quot; height=&quot;285&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;At this time, it appears that the saved form information is not imported. Can anyone verify this?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Getting .NET Button ListBar control to work</title>
    <published>2004-03-09T15:57:41+00:00</published>
    <updated>2004-03-09T15:57:41+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/09/getting-net-button-listbar-control-to-work/"/>
    <id>https://chuyeow.wtf/2004/03/09/getting-net-button-listbar-control-to-work/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/09/getting-net-button-listbar-control-to-work/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.dovitz.com&#x2F;blog&quot;&gt;Dave (DarkAngel)&lt;&#x2F;a&gt; has responded to my &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;03&#x2F;08&#x2F;help_needed_with_net_and_java.php&quot;&gt;call for help&lt;&#x2F;a&gt; regarding the &lt;a href=&quot;http:&#x2F;&#x2F;www.vbaccelerator.com&#x2F;home&#x2F;NET&#x2F;Code&#x2F;Controls&#x2F;ListBar&#x2F;Button_List_Bar&#x2F;article.asp&quot;&gt;.NET Button ListBar Control&lt;&#x2F;a&gt; and has kindly allowed me to post the solution here. &lt;a href=&quot;http:&#x2F;&#x2F;www.dovitz.com&#x2F;blog&quot;&gt;Dave&lt;&#x2F;a&gt; is the man really - he went through the trouble of grabbing the control, loading up VS.NET and working through it step by step with me in his email. All that for a stranger. I love you Dave!&lt;&#x2F;p&gt;
&lt;p&gt;The problem I had was trying to import the &lt;a href=&quot;http:&#x2F;&#x2F;www.vbaccelerator.com&#x2F;home&#x2F;NET&#x2F;Code&#x2F;Controls&#x2F;ListBar&#x2F;Button_List_Bar&#x2F;article.asp&quot;&gt;.NET Button ListBar Control&lt;&#x2F;a&gt; into my VS.NET Toolbox. The instructions said to import the ButtonListBar.vb file into the project and it should work, but it doesn&#x27;t in Visual Studio.NET 2003. I think that is the reason it didn&#x27;t work (that it is VS.NET 2003 instead of just VS.NET).&lt;&#x2F;p&gt;
&lt;p&gt;Opening the ButtonListBar.vb file in the Designer threw out an error (see the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;03&#x2F;08&#x2F;help_needed_with_net_and_java.php&quot;&gt;call for help&lt;&#x2F;a&gt; entry). Dave fixed that with this solution (also via email):&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;... move the region event argument classes to the end of the ButtonListBar.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;He went on to help me compile the source files into a DLL, which I&#x27;m familiar with using for importing controls. Below are his instructions (slightly paraphrased). &lt;strong&gt;The credit goes solely to &lt;a href=&quot;http:&#x2F;&#x2F;www.dovitz.com&#x2F;blog&quot;&gt;Dave (DarkAngel)&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; - I&#x27;m merely reproducing it for the benefit of anyone who next comes across this problem.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Open up Visual Studio .NET (Visual Studio .NET 2003 to be exact)&lt;&#x2F;li&gt;
&lt;li&gt;Create a new project by clicking File -&gt; New Project (I&#x27;m using Visual Basic, so I chose Visual Basic Project).&lt;&#x2F;li&gt;
&lt;li&gt;Choose &quot;Windows Control Library&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;What we&#x27;ve done so far is just create a control library project which is ideal for putting new controls in. This will build to a DLL.&lt;&#x2F;li&gt;
&lt;li&gt;Remove UserControl1.vb (the default file VS.NET creates) from the Solution Explorer (it&#x27;s unnecessary).&lt;&#x2F;li&gt;
&lt;li&gt;Right click the project in the solution explorer and select Add -&gt; Add existing item&lt;&#x2F;li&gt;
&lt;li&gt;Add the ButtonListBar.vb file in the control source files downloaded.&lt;&#x2F;li&gt;
&lt;li&gt;Build the project (choose to build for &quot;Release&quot;).&lt;&#x2F;li&gt;
&lt;li&gt;The compiled DLL will then be in the bin&#x2F; directory of the project folder. You now have the ButtonListBar control in DLL form. All the remains is to add this control into the Toolbar of the project in which you want to use it.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Using the control:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;In the project you want to add the toolbar to, right-click your Toolbox and select &quot;Add&#x2F;Remove items&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;Click &quot;Browse&quot; under the .net framework components tab.&lt;&#x2F;li&gt;
&lt;li&gt;Browse to the location of the DLL we just created and double click it.&lt;&#x2F;li&gt;
&lt;li&gt;Click OK to dismiss the Add&#x2F;Remove items dialog.&lt;&#x2F;li&gt;
&lt;li&gt;The ButtonListBar control should now be the bottom entry on your list. (You can right-click and sort alphabetically if you like).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
  </entry>
  <entry>
    <title>Firefox mail integration UI just checked in</title>
    <published>2004-03-09T00:40:27+00:00</published>
    <updated>2004-03-09T00:40:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/09/firefox-mail-integration-ui-just-checked-in/"/>
    <id>https://chuyeow.wtf/2004/03/09/firefox-mail-integration-ui-just-checked-in/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/09/firefox-mail-integration-ui-just-checked-in/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;&quot;&gt;The Burning Edge reports&lt;&#x2F;a&gt; that the latest &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;Mozilla Firefox&lt;&#x2F;a&gt; nightly builds (2004-03-07) contain the Mail Integration UI newly checked-in by Ben Goodger (bug &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=214893&quot;&gt;214893&lt;&#x2F;a&gt;). It adds a mail toolbar button that allows you to read your mail and newsgroups or send the current link to someone. A Ctrl-M shortcut key has also been added to allow quick access to composing a new e-mail.&lt;&#x2F;p&gt;
&lt;p&gt;See the mail toolbar button in action with the screenshot below.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:175px&quot;&gt;&lt;img alt=&quot;Screenshot of the new mail button in action&quot; src=&quot;&#x2F;assets&#x2F;firefox-mail-btn.png&quot; width=&quot;165&quot; height=&quot;124&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;The number of unread emails is retrieved from the registry (for the Windows version), the same key that allows Windows to display &quot;You have X new messages&quot; at the WinXP logon screen.&lt;&#x2F;p&gt;
&lt;p&gt;If you grab a nightly build, you have to go through a few steps to get it to appear. Go to the View menu -&gt; Toolbars -&gt; Customize. Drag and drop the Mail icon to any place you like on a toolbar.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Help needed with .NET and Java</title>
    <published>2004-03-08T19:27:13+00:00</published>
    <updated>2004-03-08T19:27:13+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/08/help-needed-with-net-and-java/"/>
    <id>https://chuyeow.wtf/2004/03/08/help-needed-with-net-and-java/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/08/help-needed-with-net-and-java/">&lt;p&gt;&lt;ins&gt;Update: &lt;a href=&quot;http:&#x2F;&#x2F;www.dovitz.com&#x2F;blog&quot;&gt;Dave&lt;&#x2F;a&gt; has an excellent  &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;03&#x2F;09&#x2F;getting_net_button_listbar_control_to_work.php&quot;&gt;solution to the ButtonListBar .NET control problem&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Firstly, the .NET question: does anybody know how to get this &lt;a href=&quot;http:&#x2F;&#x2F;www.vbaccelerator.com&#x2F;home&#x2F;NET&#x2F;Code&#x2F;Controls&#x2F;ListBar&#x2F;Button_List_Bar&#x2F;article.asp&quot;&gt;Button ListBar Control&lt;&#x2F;a&gt; to work?&lt;&#x2F;p&gt;
&lt;p&gt;I was trying to get the.NET Button ListBar control into my VB project&#x27;s toolbox - I followed these instructions:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;To use the control, add either the ButtonListBar.vb or ButtonListBar.cs file to your project. You should find the control automatically appears in the Toolbox; if not you&#x27;ll need to force the toolbox to display the&lt;br &#x2F;&gt;
control: typically I find that double clicking on the control source file to open its designer causes this to occur.&quot;&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Unfortunately, it doesn&#x27;t appear automatically when I added ButtonListBar.vb (via &quot;Add existing item&quot;). So I double-clicked the source file... But it threw out this error&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;The class ButtonListBar can be designed, but is not the first class in the file. Visual Studio requires that designers use the first class in the file...&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Which I don&#x27;t understand of course. Neither did it cause the ListBar control to appear in the Toolbox. I have emailed the author about this, but if anyone knows what I&#x27;m doing wrong, please let me know ASAP.&lt;&#x2F;p&gt;
&lt;p&gt;This of course leads to the question: What is the correct way to add a user control which comes in source form?&lt;&#x2F;p&gt;
&lt;p&gt;Now, for the Java question: is there an existing library&#x2F;package that would allow me to calculate the median and, say, the 95th percentile of a population quickly? I searched to no avail, of course, before I ask this.&lt;&#x2F;p&gt;
&lt;p&gt;I can do this myself the hard way, but I&#x27;m really pressed for time. I&#x27;d like to reuse an existing solution if there is any.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks for any leads!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Experience Google&#x27;s new look with a bookmarklet</title>
    <published>2004-03-07T17:32:37+00:00</published>
    <updated>2004-03-07T17:32:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/07/experience-googles-new-look-with-a-bookmarklet/"/>
    <id>https://chuyeow.wtf/2004/03/07/experience-googles-new-look-with-a-bookmarklet/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/07/experience-googles-new-look-with-a-bookmarklet/">&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: Google&#x27;s new look is officially in effect - there is no need for this bookmarklet anymore.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;&quot;&gt;Jesse Ruderman&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;bookmarklets&#x2F;&quot;&gt;bookmarklet&lt;&#x2F;a&gt; creator extraordinaire, has &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;archives&#x2F;000369.html&quot;&gt;written a bookmarklet&lt;&#x2F;a&gt; that allows you to view Google search results in its new look. Google has been testing the new look randomly on a small number of users (I myself have only seen it once before).&lt;&#x2F;p&gt;
&lt;p&gt;Bookmark this link and click on it at &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;&quot;&gt;Google.com&lt;&#x2F;a&gt;: &lt;a href=&quot;javascript:if(!&#x2F;\.google\.com$&#x2F;.test(location.host)) alert(&#x27;Use this bookmarklet at google.com, not here.&#x27;); else { anon=&#x27;0000000000000000&#x27;; newlook=&#x27;102c51875a8839e9&#x27;; C=document.cookie.split(&#x27;; &#x27;); for(i=0; c=C[i]; ++i) if (&#x2F;^PREF=&#x2F;.test(c)) { r = c.indexOf(newlook)==-1 ? newlook : anon; document.cookie = c.replace(&#x2F;ID=\w+:&#x2F;, &#x27;ID=&#x27;+r+&#x27;:&#x27;) + &#x27;; domain=.google.com; path=&#x2F;; expires=Mon, 07 May 2007 20:03:11 GMT&#x27;; location.reload(); } }&quot;&gt;toggle google look&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;For those of you who are redirected by Google to your regional specific Google domain, try going to &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;intl&#x2F;en&#x2F;&quot;&gt;http:&#x2F;&#x2F;www.google.com&#x2F;intl&#x2F;en&#x2F;&lt;&#x2F;a&gt; instead.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;You can also use the bookmarklet for the regional specific Google domain you are redirected to by changing the 2 occurences of &quot;google.com&quot; in the bookmarklet to that domain you&#x27;re at.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Link Toolbar for Firefox</title>
    <published>2004-03-06T08:46:52+00:00</published>
    <updated>2004-03-06T08:46:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/06/link-toolbar-for-firefox/"/>
    <id>https://chuyeow.wtf/2004/03/06/link-toolbar-for-firefox/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/06/link-toolbar-for-firefox/">&lt;p&gt;I can&#x27;t believe I missed this &lt;a href=&quot;http:&#x2F;&#x2F;extensionroom.mozdev.org&#x2F;more-info.php&#x2F;linktoolbar&quot;&gt;Link Toolbar extension&lt;&#x2F;a&gt; all this time. It adds a small site navigation widget in your statusbar that allows you to make use of any &amp;lt;link&amp;gt;s that a webpage may have. Opera has it, so does Mozilla. But this extension probably places it in the best and most logical section of the browser screen - in the statusbar. It doesn&#x27;t reduce your viewport like the one for Opera does (it appears as a toolbar). I&#x27;ve been wanting something like this ever since I used it on Mozilla.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a screenshot:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:347px&quot;&gt;&lt;img alt=&quot;Screenshot of Link Toolbar&quot; src=&quot;&#x2F;assets&#x2F;link-toolbar.png&quot; width=&quot;337&quot; height=&quot;62&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And another with the More widget in action, displaying the alternate RSS format for a website:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:351px&quot;&gt;&lt;img alt=&quot;Screenshot of Link Toolbar with the More widget in action&quot; src=&quot;&#x2F;assets&#x2F;link-toolbar-rss.png&quot; width=&quot;341&quot; height=&quot;84&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Switching to Firefox to get easier</title>
    <published>2004-03-05T13:55:03+00:00</published>
    <updated>2004-03-05T13:55:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/05/switching-to-firefox-to-get-easier/"/>
    <id>https://chuyeow.wtf/2004/03/05/switching-to-firefox-to-get-easier/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/05/switching-to-firefox-to-get-easier/">&lt;p&gt;In a move that will aid users migrating to &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;Firefox&lt;&#x2F;a&gt; from other browsers, Firefox 0.9 will feature a long-awaited import feature that allows you to import your browser settings and bookmarks from your current browser. Windows users can now import bookmarks, history, saved passwords, cookies, form history, and preferences from IE, Netscape, Mozilla and Opera. Mac users will be able to import from Netscape, Mozilla, Safari, IE&#x2F;Mac and Camino. Linux users can migrate from Netscape, Mozilla, Opera, Konqueror, Galeon and Epiphany. This is definitely good news because it significantly lowers the entry barrier and also reduces the cost to users who intend to switch.&lt;&#x2F;p&gt;
&lt;p&gt;To get an early look in at what the import feature, try a nightly build (check out &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;&quot;&gt;The Burning Edge&lt;&#x2F;a&gt;). Current support on Mac extends only to Netscape and Mozilla, and on Linux, Netscape, Mozilla and Opera. The Windows version supports all browsers that I&#x27;ve listed above. The Firefox team is working on importers for the other browsers and they will be coming online soon.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox profiles will no longer be in &quot;Phoenix&quot; folder</title>
    <published>2004-03-05T13:39:04+00:00</published>
    <updated>2004-03-05T13:39:04+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/05/firefox-profiles-will-no-longer-be-in-phoenix-folder/"/>
    <id>https://chuyeow.wtf/2004/03/05/firefox-profiles-will-no-longer-be-in-phoenix-folder/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/05/firefox-profiles-will-no-longer-be-in-phoenix-folder/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;bengoodger.com&#x2F;&quot;&gt;Ben Goodger&lt;&#x2F;a&gt; (lead engineer of Mozilla Firefox) has &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=59132&quot; title=&quot;Read Ben&#x27;s announcement at the MozillaZine forums&quot;&gt;announced&lt;&#x2F;a&gt; that Firefox profiles will now be stored in a &quot;Firefox&quot; directory instead of the current &quot;Phoenix&quot; (Phoenix was the name of Firefox even before it was called Firebird) directory. This will be activated in nightly builds starting from &lt;del&gt;tommorrow&lt;&#x2F;del&gt; &lt;ins&gt;next week Thursday&lt;&#x2F;ins&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This change will be in the 0.9 release of Firefox and the migration engine will automatically migrate all Firefox-related data (bookmarks, userChrome.css, preferences, etc.) to the new folder.&lt;&#x2F;p&gt;
&lt;p&gt;There will be no auto-migration of extensions (as far as I know), so there is the hassle of reinstalling your extensions (if you installed them to the profile folder). Hopefully, the Firefox team is considering, or is already at work, implementing migration of extensions as well. Well, we&#x27;ll see what&#x27;s really in store when the other major extension related feature, the extension uninstaller, is implemented.&lt;&#x2F;p&gt;
&lt;p&gt;Migrating multiple profiles doesn&#x27;t sound like fun either:&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;Ben Goodger&quot;&gt;&lt;p&gt;Alternatively you can import one profile, run Firefox with the profile manager and delete the profile (but make sure NOT to delete the files) then run Firefox again and import the other profile. Run Firefox with the profile manager and create a new profile in the same location as the deleted one and all the settings in it will be picked up.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;I do not know if this are only temporary measures for nightly build users, or are going to be the same for Firefox 0.9. But I am pretty sure Ben and the team will be making migration as hassle-free as possible, within the limits of what&#x27;s possible and what&#x27;s not.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Gppgle.com</title>
    <published>2004-03-02T20:20:23+00:00</published>
    <updated>2004-03-02T20:20:23+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/02/gppglecom/"/>
    <id>https://chuyeow.wtf/2004/03/02/gppglecom/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/02/gppglecom/">&lt;p&gt;Google &lt;a href=&quot;http:&#x2F;&#x2F;whois.net&#x2F;whois.cgi2?d=gppgle.com&quot; title=&quot;View the WHOIS information for the gppgle.com domain&quot;&gt;owns&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;gppgle.com&#x2F;&quot;&gt;Gppgle.com&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Apparently, typos are common enough to make them mirror Google (the search engine) on &lt;a href=&quot;http:&#x2F;&#x2F;gppgle.com&#x2F;&quot;&gt;Gppgle.com&lt;&#x2F;a&gt;. Case in point: hits from &lt;a href=&quot;http:&#x2F;&#x2F;gppgle.com&#x2F;&quot;&gt;Gppgle.com&lt;&#x2F;a&gt; in this weblog.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Referrer spam revisited</title>
    <published>2004-03-01T22:05:43+00:00</published>
    <updated>2004-03-01T22:05:43+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/01/referrer-spam-revisited/"/>
    <id>https://chuyeow.wtf/2004/03/01/referrer-spam-revisited/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/01/referrer-spam-revisited/">&lt;p&gt;Less than 3 weeks ago I wrote about &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;02&#x2F;11&#x2F;the_new_referrer_spam_technique_blogger_beware.php&quot;&gt;referrer spam from fake blog sites&lt;&#x2F;a&gt;. Today, as I peruse my access logs as part of my end-of-the-month ritual, I find myself again a victim of referrer spam.&lt;&#x2F;p&gt;
&lt;p&gt;I am getting hits from &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;collegedictionary.net&quot;&gt;[1]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;studio-8.net&quot;&gt;[2]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;crunchsoccer.com&quot;&gt;[3]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;consulmex-la.com&quot;&gt;[4]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;sound-computing.com&quot;&gt;[5]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;savetheweb.org&quot;&gt;[6]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;gogreenpower.org&quot;&gt;[7]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;acl02.org&quot;&gt;[8]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;bushido-online.com&quot;&gt;[9]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;synapseiowa.com&quot;&gt;[10]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;drnapr.net&quot;&gt;[11]&lt;&#x2F;a&gt; (all redirected via JavaScript so that search engines ignore them). It doesn&#x27;t take a Photohunt expert to notice the similarities in each site. Amazing how this sites are appear to be purely legitimate - there is a dictionary site, a Bushido site and even an academic society&#x27;s anniversy meeting website . Most are just simply facades once you try to click around - links either lead back to the webroot or take you to some external site.&lt;&#x2F;p&gt;
&lt;p&gt;My conjecture: someone owns this collection of sites and is trying to get a high PageRank for the sites, either to later sell them off or for further abuse. Anyone else have a theory?&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, you can &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;htaccess.txt&quot;&gt;view my .htaccess&lt;&#x2F;a&gt; to see my blacklist of referrer spamming sites as well as a mod_rewrite method of blocking referrers.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The best list of CSS filters, so far</title>
    <published>2004-03-01T17:43:08+00:00</published>
    <updated>2004-03-01T17:43:08+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/03/01/the-best-list-of-css-filters-so-far/"/>
    <id>https://chuyeow.wtf/2004/03/01/the-best-list-of-css-filters-so-far/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/03/01/the-best-list-of-css-filters-so-far/">&lt;p&gt;Chris of &lt;a href=&quot;http:&#x2F;&#x2F;www.dithered.com&#x2F;&quot;&gt;dithered.com&lt;&#x2F;a&gt; has compiled a list of &lt;a href=&quot;http:&#x2F;&#x2F;www.dithered.com&#x2F;css_filters&#x2F;index.html&quot;&gt;CSS filters&lt;&#x2F;a&gt;. For those not in the know, CSS filters are techniques that hide CSS rules from browsers who misinterpret, abuse or just plain don&#x27;t understand them.&lt;&#x2F;p&gt;
&lt;p&gt;In more personal news, I&#x27;ve been slaving away at putting out a technical paper and a thesis for my honors project. Now you know why I&#x27;ve been so quiet. Well, you can read my scrapped together &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;about&#x2F;&quot;&gt;About&lt;&#x2F;a&gt; page (that finally has some content) to keep yourself entertained. Yeah, right.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Textpattern - a promising CMS sprouts its wings</title>
    <published>2004-02-25T01:05:01+00:00</published>
    <updated>2004-02-25T01:05:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/25/textpattern-a-promising-cms-sprouts-its-wings/"/>
    <id>https://chuyeow.wtf/2004/02/25/textpattern-a-promising-cms-sprouts-its-wings/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/25/textpattern-a-promising-cms-sprouts-its-wings/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;textpattern.com&#x2F;&quot;&gt;Textpattern&lt;&#x2F;a&gt;, a content management system written in PHP by &lt;a href=&quot;http:&#x2F;&#x2F;textism.com&#x2F;&quot;&gt;Dean Allen&lt;&#x2F;a&gt; (of &lt;a href=&quot;http:&#x2F;&#x2F;textism.com&#x2F;&quot;&gt;Textism&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;textism.com&#x2F;tools&#x2F;textile&#x2F;&quot;&gt;Textile&lt;&#x2F;a&gt; fame), has just been released to the public.&lt;&#x2F;p&gt;
&lt;p&gt;Curiousity piqued by what it promised to offer about a year ago (when it was in closed development), I made it a point to check out Textpattern once any release is made. I took a quick install and run through of Textpattern gamma 1.11 and am pleased to report that it delivers on its promises. This has the makings of the next big weblog publishing tool (bigger than MT?), or even the next big CMS. More on this after I play around with it a bit more.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MS Excel confounds me</title>
    <published>2004-02-23T14:19:08+00:00</published>
    <updated>2004-02-23T14:19:08+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/23/ms-excel-confounds-me/"/>
    <id>https://chuyeow.wtf/2004/02/23/ms-excel-confounds-me/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/23/ms-excel-confounds-me/">&lt;p&gt;This is the error message I get when I try to open 2 documents with the same name, but in different directories, in Microsoft Excel:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;A document with the name &#x27;CR.wine.GA.1.csv&#x27; is already open. You cannot open two documents with the same name, &lt;strong&gt;even if the documents are in different folders&lt;&#x2F;strong&gt;.&lt;br &#x2F;&gt;
To open the second document, either close the document that&#x27;s currently open, or rename one of the documents.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;screenshots&#x2F;excel-same-name.php&quot; title=&quot;Click the thumbnail to view a bigger image&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;excel-same-name-thumb.png&quot; width=&quot;400&quot; height=&quot;73&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Emphasis mine. Why can&#x27;t I? We&#x27;ll never know how Excel is implemented (unless there&#x27;s a MS Office source code leak), but this is pretty dumb if you ask me, considering how easy it is to get by this technical difficulty. Perhaps there is some perfectly rational explanation why there is absolutely no way that Excel would be able to work with 2 documents of the same name, or if there is, it is more work than it&#x27;s worth. I&#x27;d like to hear that explanation.&lt;&#x2F;p&gt;
&lt;p&gt;Oh wait, I believe I should Google it. Hmm... &lt;a href=&quot;http:&#x2F;&#x2F;www.toflidium.com&#x2F;weblog&#x2F;articles&#x2F;excel.html&quot;&gt; Toby Allen reports&lt;&#x2F;a&gt; the same thing, and &lt;a href=&quot;http:&#x2F;&#x2F;www.joelonsoftware.com&#x2F;&quot;&gt;Joel Spolsky&lt;&#x2F;a&gt; has this plausible explanation:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;I think it&#x27;s because when you have an external reference (of the form foo.xls!A1) they only had 8 bytes in the data structure to store the file name. It&#x27;s kind of shocking that 10 years later nobody has fixed this, ...&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Well, still not fixed in Office 2003.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Anime version of the Firefox logo</title>
    <published>2004-02-22T14:58:28+00:00</published>
    <updated>2004-02-22T14:58:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/22/anime-version-of-the-firefox-logo/"/>
    <id>https://chuyeow.wtf/2004/02/22/anime-version-of-the-firefox-logo/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/22/anime-version-of-the-firefox-logo/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;&quot;&gt;Jesse Ruderman&lt;&#x2F;a&gt; points out this cute(?) &lt;a href=&quot;http:&#x2F;&#x2F;www.limo.fumi2kick.com&#x2F;picture&#x2F;firefox01.jpg&quot;&gt;anime version&lt;&#x2F;a&gt; of the &lt;a href=&quot;http:&#x2F;&#x2F;www.actsofvolition.com&#x2F;images&#x2F;firefox_icon.png&quot;&gt;Firefox logo&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Via &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;archives&#x2F;000344.html&quot;&gt;Jesse Ruderman&lt;&#x2F;a&gt; via &lt;a href=&quot;http:&#x2F;&#x2F;members.jcom.home.ne.jp&#x2F;noririty&#x2F;&quot;&gt;noririty&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firefox Download Manager extension</title>
    <published>2004-02-21T01:41:45+00:00</published>
    <updated>2004-02-21T01:41:45+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/21/firefox-download-manager-extension/"/>
    <id>https://chuyeow.wtf/2004/02/21/firefox-download-manager-extension/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/21/firefox-download-manager-extension/">&lt;p&gt;Came across this &lt;a href=&quot;http:&#x2F;&#x2F;fire.prohosting.com&#x2F;andman42&#x2F;downloadmgr.html&quot;&gt;Download Manager extension&lt;&#x2F;a&gt; for &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;Firefox&lt;&#x2F;a&gt; in the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;&quot;&gt;MozillaZine forums&lt;&#x2F;a&gt;. It saves some screen real-estate by compacting out unused whitespace and looks better. Whether the interface is more intuitive is up for contention.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:441px&quot;&gt;&lt;img alt=&quot;Screenshot of the Download Manager extension in operation&quot; src=&quot;&#x2F;assets&#x2F;downloadmgr.png&quot; width=&quot;431&quot; height=&quot;195&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
</content>
  </entry>
  <entry>
    <title>To the people asking for an Orkut invite...</title>
    <published>2004-02-21T00:02:37+00:00</published>
    <updated>2004-02-21T00:02:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/21/to-the-people-asking-for-an-orkut-invite/"/>
    <id>https://chuyeow.wtf/2004/02/21/to-the-people-asking-for-an-orkut-invite/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/21/to-the-people-asking-for-an-orkut-invite/">&lt;p&gt;&lt;ins&gt;Note: I am not inviting anyone I don&#x27;t know even a bit of anymore! I&#x27;ve been getting a good number of requests and I have decided that it just isn&#x27;t right to invite just anybody. Please &lt;strong&gt;do not ask for an invite&lt;&#x2F;strong&gt;. Thanks for your understanding.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;... You forgot the most important thing - your email address!&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been getting a couple of people coming in from &lt;a href=&quot;http:&#x2F;&#x2F;ben.milleare.com&#x2F;&quot; title=&quot;Read Ben Milleare&#x27;s weblog&quot;&gt;Ben&#x27;s Thought Crimes&lt;&#x2F;a&gt; asking if I was willing to invite them into &lt;a href=&quot;http:&#x2F;&#x2F;www.orkut.com&#x2F;&quot;&gt;Orkut&lt;&#x2F;a&gt; when they noticed I gave Ben an invite when he asked. I don&#x27;t really like to do so, but I could invite people I don&#x27;t know (I know Ben, sort of, so that&#x27;s different) when they ask politely. &lt;em&gt;But&lt;&#x2F;em&gt; it&#x27;s hard to do so when there isn&#x27;t a way I can get back to them, much less get Orkut to send out an invitation (Orkut sends invites via email).&lt;&#x2F;p&gt;
&lt;p&gt;Not that Orkut really does anything for me at the moment. If you want to see what it&#x27;s all about, fine, I may send you an invite, but I&#x27;ll &quot;delete&quot; you as a &quot;friend&quot; after that.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Backing up your IMAP email in Mozilla Thunderbird</title>
    <published>2004-02-20T20:09:33+00:00</published>
    <updated>2004-02-20T20:09:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/20/backing-up-your-imap-email-in-mozilla-thunderbird/"/>
    <id>https://chuyeow.wtf/2004/02/20/backing-up-your-imap-email-in-mozilla-thunderbird/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/20/backing-up-your-imap-email-in-mozilla-thunderbird/">&lt;p&gt;Henrik Gemal has written up a clever tutorial on how to &lt;a href=&quot;http:&#x2F;&#x2F;gemal.dk&#x2F;archives&#x2F;000461.html&quot;&gt;backup IMAP mail using Mozilla Thunderbird&lt;&#x2F;a&gt;. Follow that up with the corresponding tutorial on &lt;a href=&quot;http:&#x2F;&#x2F;gemal.dk&#x2F;archives&#x2F;000463.html&quot;&gt;restoring IMAP emails&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Now those of you who&#x27;re still using POP3 to get your email no longer can say &quot;IMAP sucks because it doesn&#x27;t allow me save my emails and I have to delete them otherwise my inbox will be full&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;In related news, &lt;a href=&quot;http:&#x2F;&#x2F;blogs.msdn.com&#x2F;omars&#x2F;&quot;&gt;Omar Shahine&lt;&#x2F;a&gt;, who co-designed Microsoft Entourage, says in his &lt;a href=&quot;http:&#x2F;&#x2F;blogs.msdn.com&#x2F;omars&#x2F;archive&#x2F;2004&#x2F;02&#x2F;19&#x2F;76061.aspx&quot;&gt;blog entry on IMAP, Thunderbird, and mail clients&lt;&#x2F;a&gt; that:&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;http:&#x2F;&#x2F;blogs.msdn.com&#x2F;omars&#x2F;archive&#x2F;2004&#x2F;02&#x2F;19&#x2F;76061.aspx&quot;&gt;&lt;p&gt;Thunderbird is an almost perfect IMAP client for Windows. If you use IMAP, this is the product for you.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>list-style-image alignment quirk in IE&#x2F;Win and Opera?</title>
    <published>2004-02-20T19:47:43+00:00</published>
    <updated>2004-02-20T19:47:43+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/20/list-style-image-alignment-quirk-in-iewin-and-opera/"/>
    <id>https://chuyeow.wtf/2004/02/20/list-style-image-alignment-quirk-in-iewin-and-opera/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/20/list-style-image-alignment-quirk-in-iewin-and-opera/">&lt;p&gt;Take a look at this &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;examples&#x2F;liststyleimage.html&quot;&gt;example page&lt;&#x2F;a&gt; I set up in IE&#x2F;Win or Opera, and then in a Gecko-based browser.&lt;&#x2F;p&gt;
&lt;p&gt;Notice that the positions of the list images in IE&#x2F;Win and Opera are misaligned - they&#x27;re not in line with the text, but seem to be vertical-aligned to the top. After a bit of hair-pulling, I figured out that is because I applied &quot;line-height:180%;&quot;. Setting the line-height back to 100% for the &amp;lt;ul&amp;gt; works, but then I had to resort to adding margins to the &amp;lt;li&amp;gt; elements to simulate a line-height so that it&#x27;ll be consistent throughout the document.&lt;&#x2F;p&gt;
&lt;p&gt;Does anybody have an explanation why IE and Opera does it this way while Gecko browsers render it the other, seemingly correct, way?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Europe website launched</title>
    <published>2004-02-17T20:44:33+00:00</published>
    <updated>2004-02-17T20:44:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/17/mozilla-europe-website-launched/"/>
    <id>https://chuyeow.wtf/2004/02/17/mozilla-europe-website-launched/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/17/mozilla-europe-website-launched/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla-europe.org&#x2F;&quot; title=&quot;Go to the Mozilla Europe website&quot;&gt;Mozilla Europe&lt;&#x2F;a&gt;, a non-profit organization that was recently founded by several European Netscapees and Mozilla contributors, has just launched its &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla-europe.org&#x2F;&quot; title=&quot;Go to the Mozilla Europe website&quot;&gt;website&lt;&#x2F;a&gt;. Read the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla-europe.org&#x2F;en&#x2F;press&#x2F;2004&#x2F;001.html&quot; title=&quot;Read the Mozilla Europe press release on the launch of its website&quot;&gt;press release&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Some would say the website design has a certain Communist theme to it - I wonder if it&#x27;s not because of the judicious use of red and stars. Very nice, nonetheless. My only complaint would be the accessibility links which appear when you roll over them. Somewhere below the navigation bar, there are 3 links: &quot;skip to Navigation&quot;, &quot;skip to Search&quot; and &quot;switch language&quot;, which are hidden by applying a white color to the text, but become black when hovered. Confusing to a normal user to say the least. At least it confused me a bit when for a moment I thought the site just managed to produce a &lt;a href=&quot;http:&#x2F;&#x2F;www.positioniseverything.net&#x2F;explorer&#x2F;peekaboo.html&quot; title=&quot;Read about the Peek-a-boo IE6 bug&quot;&gt;Peek-a-boo IE6 bug&lt;&#x2F;a&gt;. But of course not, this is Gecko we&#x27;re talking about ;). Back on topic, I don&#x27;t see the point of providing accessibility links in this manner since it appears for users who &lt;strong&gt;don&#x27;t&lt;&#x2F;strong&gt; need them when they least expect it. Try &lt;a href=&quot;http:&#x2F;&#x2F;diveintoaccessibility.org&#x2F;day_11_skipping_over_navigation_links.html&quot; title=&quot;Mark Pilgrim teaches us how to skip over navigation links for accessibility&quot;&gt;Mark Pilgrim&#x27;s advice&lt;&#x2F;a&gt;. Not to take anything away from the designer(s) though - they have done an excellent job.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: The designer of the Mozilla Europe website, &lt;a href=&quot;http:&#x2F;&#x2F;www.latchman.org&#x2F;sam&#x2F;&quot; title=&quot;Read Sam Latchman&#x27;s blog (French)&quot;&gt;Sam Latchman&lt;&#x2F;a&gt;, has made clear several things in his &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;02&#x2F;17&#x2F;mozilla_europe_website_launched.php#comment3&quot; title=&quot;Read Sam Latchman&#x27;s comment&quot;&gt;comment&lt;&#x2F;a&gt;. Most importantly, &quot;display:none&quot; does not pass muster on many screen readers as &lt;a href=&quot;http:&#x2F;&#x2F;css-discuss.incutio.com&#x2F;?page=ScreenreaderVisibility&quot; title=&quot;Screenreader Visibility on css-discuss&quot;&gt;proven on css-discuss&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Interesting Google stuff</title>
    <published>2004-02-16T19:18:58+00:00</published>
    <updated>2004-02-16T19:18:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/16/interesting-google-stuff/"/>
    <id>https://chuyeow.wtf/2004/02/16/interesting-google-stuff/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/16/interesting-google-stuff/">&lt;p&gt;I seem to have picked up a handful of Google-related bookmarks. I think I have way too many at the moment so it is as opportune a time as any to start making link dumps.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.searchenginewatch.com&#x2F;searchday&#x2F;article.php&#x2F;3304771&quot;&gt;Hidden Google Tools&lt;&#x2F;a&gt; writes on several tools you probably never knew existed. Some of these are listed below.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.soople.com&#x2F;soople_int.php&quot;&gt;Soople&lt;&#x2F;a&gt; provides a form-based front end to many of Google&#x27;s more advanced operators. Nothing to it really - just a simple form submission to Google with the appropriate query string. But convenient nonetheless.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.faganfinder.com&#x2F;google.html&quot;&gt;Fagan Finder&lt;&#x2F;a&gt; is quite like Soople, though it has an IE-only version which I didn&#x27;t bother to check.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;labs.google.com&#x2F;cgi-bin&#x2F;webquotes&quot;&gt;Google WebQuotes&lt;&#x2F;a&gt; is a beta application from &lt;a href=&quot;http:&#x2F;&#x2F;labs.google.com&#x2F;&quot;&gt;Google Labs&lt;&#x2F;a&gt; which &quot;offers a convenient way to get a third party&#x27;s opinion about each of the returns for your search, providing you with more information about that site&#x27;s credibility and reputation&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.googleguide.com&#x2F;&quot;&gt;Google Guide&lt;&#x2F;a&gt; is an interactive tutorial on how to use Google more effectively.&lt;&#x2F;li&gt;
&lt;li&gt;Google has a &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;help&#x2F;operators.html&quot;&gt;help page on Advanced Search Operators&lt;&#x2F;a&gt;. Nice to keep it handy.&lt;&#x2F;li&gt;
&lt;li&gt;Google offers &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;options&#x2F;specialsearches.html&quot;&gt;special searches&lt;&#x2F;a&gt; within specific topics, including searches for Universities and other institutes of education with &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;options&#x2F;universities.html&quot;&gt;university searches&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Now that&#x27;s 7 less bookmarks which makes it, erm, 1196 - 7 = 1189 more bookmarks to go through.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Blogzilla exposes some Windows source code</title>
    <published>2004-02-14T08:39:50+00:00</published>
    <updated>2004-02-14T08:39:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/14/blogzilla-exposes-some-windows-source-code/"/>
    <id>https://chuyeow.wtf/2004/02/14/blogzilla-exposes-some-windows-source-code/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/14/blogzilla-exposes-some-windows-source-code/">&lt;p&gt;&lt;ins&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: I notice lots of people coming in to this page from Google searching for &quot;windows source code&quot;. Whoops, sorry, but this isn&#x27;t the place to get the actual source or any real news on it. Do stay and look around if you&#x27;re interested though :)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Blogzilla takes &lt;a href=&quot;http:&#x2F;&#x2F;www.deftone.com&#x2F;blogzilla&#x2F;archives&#x2F;a_look_at_some_windows_source_code.html&quot; title=&quot;Read the entry at Blogzilla&quot;&gt;a look at some Windows source code&lt;&#x2F;a&gt; derived from &quot;unnamed sources&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;We here at redemption in a blog were also provided with some choice bits of the source code via unnamed sources:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
if( application.language == JAVA ) {&lt;&#x2F;p&gt;
&lt;p&gt;  set_speed_step_factor( 0.50 );  &#x2F;&#x2F; decrement clock speed to 50%&lt;br &#x2F;&gt;
  set_crash_probabilty( 0.80 );&lt;&#x2F;p&gt;
&lt;p&gt;  if( application.toolkit == SWING ) {&lt;br &#x2F;&gt;
    render_speed( UNBEARINGLY_SLOW );&lt;br &#x2F;&gt;
    start_idle_task();  &#x2F;&#x2F; start an invisible process to consume CPU cycles&lt;br &#x2F;&gt;
    disable_hardware_acceleration();&lt;br &#x2F;&gt;
  }&lt;br &#x2F;&gt;
}
&lt;&#x2F;p&gt;&lt;&#x2F;div&gt;
&lt;p&gt;In other news, Dilbork, everyone&#x27;s favorite geek comic, has a &lt;a href=&quot;http:&#x2F;&#x2F;toastytech.com&#x2F;good&#x2F;mozdil.gif&quot;&gt;strip on Mozilla&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firebird? Firefox? How about Firegoat?</title>
    <published>2004-02-13T00:09:22+00:00</published>
    <updated>2004-02-13T00:09:22+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/13/firebird-firefox-how-about-firegoat/"/>
    <id>https://chuyeow.wtf/2004/02/13/firebird-firefox-how-about-firegoat/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/13/firebird-firefox-how-about-firegoat/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.cosmicat.com&#x2F;software&#x2F;firesomething&#x2F;&quot; title=&quot;Go to the Firesomething website&quot;&gt;Firesomething&lt;&#x2F;a&gt; is an extension that changes the &quot;fox&quot; (or &quot;bird&quot; if you&#x27;re using Firebird) into something else. Something else which can be whatever you want.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width: 320px&quot;&gt;&lt;img alt=&quot;Screenshot of Firesomething in action&quot; src=&quot;&#x2F;assets&#x2F;firesomething.png&quot; width=&quot;310&quot; height=&quot;62&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Check out the concise feature list:&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;http:&#x2F;&#x2F;www.cosmicat.com&#x2F;software&#x2F;firesomething&#x2F;&quot;&gt;&lt;p&gt;Features: Polymorphs fire animals.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>The new referrer spam technique - blogger beware!</title>
    <published>2004-02-11T12:04:17+00:00</published>
    <updated>2004-02-11T12:04:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/11/the-new-referrer-spam-technique-blogger-beware/"/>
    <id>https://chuyeow.wtf/2004/02/11/the-new-referrer-spam-technique-blogger-beware/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/11/the-new-referrer-spam-technique-blogger-beware/">&lt;p&gt;I was checking my referrer logs the other day and came across several peculiar entries. There were mostly weblogs (except for 1), and at first glance would seem to be legitimate. Until I noticed a few things:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;There is no sign of a link back to my site.&lt;&#x2F;li&gt;
&lt;li&gt;There are links to smut sites which appear to be the same throughout these sites.&lt;&#x2F;li&gt;
&lt;li&gt;The weblogs are new - in some cases there is only 1 entry, and no sign of an archive.&lt;&#x2F;li&gt;
&lt;li&gt;Certain elements are repeated across the sites.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Take a look at the sites (all redirected via JavaScript so that search engines ignore them): &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;www.veronicabee.com&#x2F;&quot;&gt;[1]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;www.evesmith.com&#x2F;&quot;&gt;[2]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;www.jennyknicks.com&#x2F;&quot;&gt;[3]&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;redirect&#x2F;?url=http:&#x2F;&#x2F;www.princessnina.com&#x2F;&quot;&gt;[4]&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Unmistakably, these are sites owned by a single person (or group of persons) who is out to seek referral links back to their sites, what is colloquially called &quot;referral spam&quot;. Whatever for, you say? Well, here&#x27;s a hypothesis (obvious as it is, it probably should be called &quot;the truth&quot; rather than a hypothesis).&lt;&#x2F;p&gt;
&lt;p&gt;First and foremost, this person (let&#x27;s just say, for ease of writing, that it is 1 person and it is a guy) is clearly someone intent on capitalizing on the weblog linking phenom that allows weblogs to have high PageRanks. A discerning eye will notice how the sites have domain names that can be turned around into sites of pornographic nature. Strong evidence that these either were porn sites before or are going to be once their Google PageRank gets high enough. By putting up some seemingly legitimate content to throw off webloggers, this person hopes to have his referral links unnoticed, unblocked (and implicitly acknowleged as legitimate). Referrer spammers are probably having a hard time with the increased awareness about referrer spam among webloggers, including tools and scripts to stop them. I can almost hear the imaginary light bulb switching on in their minds - why not use blogs as well? Place referrer links from a dummy weblog, link to several sites, get linked back (illegitimately), and get away with it. Just sit back and watch the PageRank and backlinks grow. Smart, but not smart enough.&lt;&#x2F;p&gt;
&lt;p&gt;Notice how the links to smut sites are almost consistent across all 4 sites - dead giveaway. That was what set the alarm bells ringing for me - why the hell would a weblog link to pornographic sites? In this case, this person is getting ahead of himself. The intention, as I see it, would be to make use of these fake blogs to boost search engine rankings for his existing sites by linking to them. Ah greedy, greedy. And what&#x27;s more, those links go to a porn site which I&#x27;ve blocked. Folly, folly.&lt;&#x2F;p&gt;
&lt;p&gt;Curiousity piqued, I Googled in hope of finding someone else reporting the same phenomenon. Here&#x27;s what I found:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Ministry of Propaganda notices something strange - &lt;a href=&quot;http:&#x2F;&#x2F;www.ministryofpropaganda.co.uk&#x2F;oldpropaganda&#x2F;20031117-referer.shtml&quot;&gt;Blog referrer spamming?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;A preponderance of evidence does an investigation in &lt;a href=&quot;http:&#x2F;&#x2F;blog.netwarriors.org&#x2F;d&#x2F;site&#x2F;related&#x2F;2003&#x2F;11&#x2F;17&#x2F;more_referrer_spamming&quot;&gt;More referrer spamming&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;That last link led me to this: &lt;a href=&quot;http:&#x2F;&#x2F;idly.org&#x2F;2003&#x2F;11&#x2F;14&#x2F;porn_sites_hiding_behind_blogs&quot;&gt;Porn Sites Hiding Behind Blogs&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So this is not new (4 months old news isn&#x27;t news). I wonder, how many webloggers have heard of this or seen this before though. I&#x27;m not clear on the how high the level of awareness is, but if you do have a weblog, do warn your readers (who are probably bloggers themselves). (&lt;em&gt;And no, you don&#x27;t have to link back to me - hypocrite I am not ;)&lt;&#x2F;em&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;As for a solution, I use mod_rewrite to block out unwanted referrers, thanks to &lt;a href=&quot;http:&#x2F;&#x2F;www.unix-girl.com&#x2F;blog&#x2F;archives&#x2F;001080.html&quot;&gt;kasia in a nutshell&lt;&#x2F;a&gt;. You can &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;htaccess.txt&quot;&gt;view my .htaccess&lt;&#x2F;a&gt; (which contains my list of blocked referrers as well). For an explanation of how this works, check out &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;member.php?u=11964&quot; title=&quot;View pippo&#x27;s profile&quot;&gt;pippo&lt;&#x2F;a&gt;&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php?t=151215&quot;&gt;reply to my thread at SitePoint Forums&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>More on Mozilla - Mozilla Backup, BT tracker, updated TBE</title>
    <published>2004-02-11T00:21:12+00:00</published>
    <updated>2004-02-11T00:21:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/11/more-on-mozilla-mozilla-backup-bt-tracker-updated-tbe/"/>
    <id>https://chuyeow.wtf/2004/02/11/more-on-mozilla-mozilla-backup-bt-tracker-updated-tbe/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/11/more-on-mozilla-mozilla-backup-bt-tracker-updated-tbe/">&lt;p&gt;Ah Mozilla is buzzing (&lt;em&gt;bzzz!&lt;&#x2F;em&gt;) all over the World Wide Web. More news from yours truly, this time on some tidbits that I found to be useful to the common Mozilla Suite&#x2F;Firefox&#x2F;Thunderbird user.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width: 195px&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot; title=&quot;Get&lt;br &#x2F;&gt;
Firefox - Web Browsing Redefined&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;takebacktheweb_large.png&quot; width=&quot;185&quot; height=&quot;72&quot; border=&quot;0&quot; alt=&quot;Get Firefox&quot; &#x2F;&gt;&lt;&#x2F;a&gt; &lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So, in no particular order:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Pavel Cvrcek has released &lt;a href=&quot;http:&#x2F;&#x2F;backup.jasnapaka.com&#x2F;&quot; title=&quot;Go to the Mozilla Backup website&quot;&gt;Mozilla Backup 1.2.2&lt;&#x2F;a&gt;. This release &quot;only adds support for Mozilla Firefox 0.8 and Mozilla Thunderbird 0.5&quot;. If you haven&#x27;t heard of Mozilla Backup before, you would be pleased to find it a spiffy tool for backing up and restoring Mozilla profiles (including Firefox and Thunderbird). It works very well from my own experience with it. Unfortunately, it&#x27;s only available on Windows. (Reported by &lt;a href=&quot;http:&#x2F;&#x2F;mozillazine.org&#x2F;talkback.html?article=4284&quot; title=&quot;Read the original article at MozillaZine&quot;&gt;MozillaZine&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Patrick Ryan posted in a &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;archives&#x2F;000325.html#comments&quot; title=&quot;Read the comment at The Burning Edge&quot;&gt;comment to The Burning Edge&lt;&#x2F;a&gt; to point out the &lt;a href=&quot;http:&#x2F;&#x2F;pryan.org&#x2F;mozilla&#x2F;bt-tracker&#x2F;&quot; title=&quot;Go to the pryan.org Mozilla BitTorrent tracker&quot;&gt;pryan.org Mozilla BitTorrent tracker&lt;&#x2F;a&gt;, which he kindly set up. Patrick Ryan is the guy who provides free hosting space for unofficial builds. The unofficial Firefox builds are at &lt;a href=&quot;http:&#x2F;&#x2F;pryan.org&#x2F;firefox&#x2F;&quot;&gt;http:&#x2F;&#x2F;pryan.org&#x2F;firefox&#x2F;&lt;&#x2F;a&gt;, and the unofficial Thunderbird builds are at &lt;a href=&quot;http:&#x2F;&#x2F;pryan.org&#x2F;thunderbird&#x2F;&quot;&gt;http:&#x2F;&#x2F;pryan.org&#x2F;thunderbird&#x2F;&lt;&#x2F;a&gt;. As always, the best place to keep up to date with the unofficial builds are &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;&quot;&gt;The Burning Edge&lt;&#x2F;a&gt;, the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewforum.php?f=23&quot;&gt;MozillaZine Firefox builds forum&lt;&#x2F;a&gt;, and the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewforum.php?f=29&quot;&gt;MozillaZine Thunderbird builds forum&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;And finally, users of &lt;a href=&quot;http:&#x2F;&#x2F;white.sakura.ne.jp&#x2F;~piro&#x2F;xul&#x2F;_tabextensions.html.en&quot; title=&quot;Go to the Tabbrowser Extensions homepage&quot;&gt;Tabbrowser Extensions&lt;&#x2F;a&gt; (TBE) for Firefox would be glad to know that Piro Date (the author of TBE) has updated it the extension so that it works with Firefox 0.8. See his &lt;a href=&quot;http:&#x2F;&#x2F;white.sakura.ne.jp&#x2F;~piro&#x2F;xul&#x2F;forum&#x2F;?689&quot; title=&quot;Read Piro&#x27;s post about the fixed TBE that works with Firefox 0.8&quot;&gt;post in his forum&lt;&#x2F;a&gt;. I&#x27;m happy to report that it seems noticeably faster as well - TBE used to slow down Firefox a lot.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Firebird is now Firefox, milestone 0.8 released</title>
    <published>2004-02-10T01:50:08+00:00</published>
    <updated>2004-02-10T01:50:08+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/10/firebird-is-now-firefox-milestone-08-released/"/>
    <id>https://chuyeow.wtf/2004/02/10/firebird-is-now-firefox-milestone-08-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/10/firebird-is-now-firefox-milestone-08-released/">&lt;p&gt;It&#x27;s been posted all over by now, even &lt;a href=&quot;http:&#x2F;&#x2F;slashdot.org&#x2F;articles&#x2F;04&#x2F;02&#x2F;09&#x2F;1123231.shtml?tid=126&amp;tid=154&amp;tid=162&amp;tid=95&amp;tid=99&quot; title=&quot;Read the article on Firefox at Slashdot.org&quot;&gt;Slashdotted&lt;&#x2F;a&gt; (mozilla.org was down for quite awhile earlier), &lt;a href=&quot;http:&#x2F;&#x2F;neowin.net&#x2F;comments.php?id=17359&amp;category=main&quot; title=&quot;Read the news article on Firefox at Neowin.net&quot;&gt;Neowin-ed&lt;&#x2F;a&gt;, blogged a thousand times over. Yes, &lt;strong&gt;Mozilla Firebird&lt;&#x2F;strong&gt; is now known as &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;&quot;&gt;&lt;bstrong&gt;Mozilla Firefox&lt;&#x2F;bstrong&gt;&lt;&#x2F;a&gt;. With the 0.8 Milestone release of the lightweight Gecko-based browser formerly known as Phoenix (now also formerly known as Mozilla Firebird), the Mozilla Foundation has come up with a name which shouldn&#x27;t run into any legal tussles like the old Phoenix and Firebird names seemed to attract (well, the Firebird name wasn&#x27;t exactly a legal tussle, more like an act of brotherhood among fellow Open Source developers).&lt;&#x2F;p&gt;
&lt;p&gt;Ben Goodger (Firefox Engineering Lead) &lt;a href=&quot;http:&#x2F;&#x2F;www.bengoodger.com&#x2F;weblog&#x2F;archives&#x2F;week_2004_02_08.shtml#000549&quot; title=&quot;Read Ben Goodger&#x27;s account of the renaming process&quot;&gt;wrote about the rebranding&lt;&#x2F;a&gt; of Firebird to Firefox. &lt;a href=&quot;http:&#x2F;&#x2F;www.actsofvolition.com&#x2F;&quot; title=&quot;Go to Steven Garrity&#x27;s weblog&quot;&gt;Steven Garrity&lt;&#x2F;a&gt; was drafted in as the new Visual Design Coordinator who developed the new Firefox icon you see below (together with the rest his team). Jon Hicks implemented it (meaning he did the computer graphic design work), as he describes in his &lt;a href=&quot;http:&#x2F;&#x2F;www.hicksdesign.co.uk&#x2F;journal&#x2F;archives&#x2F;000377.php&quot; title=&quot;Jon Hicks writes on how he drafted to implement the new Firefox icon&quot;&gt;journal entry&lt;&#x2F;a&gt;. Yes links galore and more to come.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:210px&quot;&gt;&lt;img alt=&quot;Firefox icon&quot; src=&quot;&#x2F;assets&#x2F;firefox.png&quot; width=&quot;200&quot; height=&quot;183&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;The rebranding also entailed some new spiffy icons, decals and ads which you can find in the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firefox&#x2F;buttons.html&quot; title=&quot;Go to the Mozilla Firefox ad webpage and grab one for your site!&quot;&gt;Mozilla Firefox ad webpage&lt;&#x2F;a&gt;. If you had a Firebird button or ad, it&#x27;s time to update them! For my case, I had an 80 x 15 pixel Firebird blog button, but the new Firefox one is 94 x 15 pixel large, which was totally out of whack with the rest of the buttons. Photoshop to the rescue...&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:90px&quot;&gt;&lt;img alt=&quot;Firefox button&quot; src=&quot;&#x2F;assets&#x2F;firefox.png&quot; width=&quot;80&quot; height=&quot;15&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;So what&#x27;s new in Firefox 0.8? I won&#x27;t repeat what&#x27;s already been written, so you can refer to the &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;products&#x2F;firefox&#x2F;releases&#x2F;#new&quot; title=&quot;Check out what&#x27;s new in Firefox&quot;&gt;Firefox What&#x27;s New section&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;archives&#x2F;000301.html&quot; title=&quot;Visit Jesse Ruderman&#x27;s blog entry on What&#x27;s new in Mozilla Firebird 0.8&quot;&gt;Jesse Ruderman&#x27;s listing of new features and bugfixes&lt;&#x2F;a&gt;. In particular, one nasty regression that wasn&#x27;t fixed was the &quot;Installing 2 extensions without restarting re-launches extension-installer for previous installed extensions&quot; regression. Hell, one of the biggest flaws of Firebird was it&#x27;s poor extension management. Extensions often break a Firebird installation&lt;del&gt;, like Tab Browser Extensions (Firefox 0.8 doesn&#x27;t seem to work with TBE, so I got this &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=36362&quot; title=&quot;Get a patched TBE extension that works with Firefox 0.8 - see post #6&quot;&gt;patched TBE extension&lt;&#x2F;a&gt; which you can get as well)&lt;&#x2F;del&gt;. &lt;ins&gt;Piro Date (author of TBE) has updated TBE and it works with Firefox 0.8. See &lt;a href=&quot;http:&#x2F;&#x2F;white.sakura.ne.jp&#x2F;~piro&#x2F;xul&#x2F;forum&#x2F;?689&quot; title=&quot;Piro Date fixes TBE!&quot;&gt;his post in his forum&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt; And &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=48912&quot; title=&quot;Read the forum thread on how to remove extensions - see post #3&quot;&gt;removing extensions&lt;&#x2F;a&gt; has to be done manually (and tediously). Thankfully this will be addressed in Firefox 0.9 where an extension uninstaller is planned.&lt;&#x2F;p&gt;
&lt;p&gt;As for zip builds (as opposed to installer builds) for Windows, there isn&#x27;t an official one yet, though Ben Goodger &lt;a href=&quot;http:&#x2F;&#x2F;mozillazine.org&#x2F;talkback.html?article=4278#23&quot; title=&quot;Read Ben&#x27;s talkback&quot;&gt;says he&#x27;ll have one by the week&lt;&#x2F;a&gt;. Unofficial builds are also being released, and the best place to get them is to check out the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewforum.php?f=23&quot; title=&quot;Go to the Firefox builds forum at MozillaZine&quot;&gt;Firefox builds forum at MozillaZine.org&lt;&#x2F;a&gt;. jesus_x has a zip build which was &lt;a href=&quot;http:&#x2F;&#x2F;mozillanews.org&#x2F;?article_date=2004-02-09+01-56-09&quot; title=&quot;Read the article on Firefox at MozillaNews&quot;&gt;highlighted at MozillaNews&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;More links:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;press&#x2F;mozilla-2004-02-09.html&quot;&gt;Press Release&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Mozilla Foundation&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;tarr.uspto.gov&#x2F;servlet&#x2F;tarr?regser=serial&amp;entry=78344043&quot;&gt;registration of Firefox as a trademark&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Steven Garrity speaks on the process of rebranding Firebird in &lt;a href=&quot;http:&#x2F;&#x2F;www.actsofvolition.com&#x2F;archives&#x2F;2004&#x2F;february&#x2F;brandingmozilla&quot;&gt;Branding Mozilla: Towards 1.0&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Mozilla Firefox - &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;firefox&#x2F;firefox-name-faq.html&quot;&gt;Brand Name FAQ&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Microsoft FrontPage ad dripping with irony</title>
    <published>2004-02-09T01:12:01+00:00</published>
    <updated>2004-02-09T01:12:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/09/microsoft-frontpage-ad-dripping-with-irony/"/>
    <id>https://chuyeow.wtf/2004/02/09/microsoft-frontpage-ad-dripping-with-irony/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/09/microsoft-frontpage-ad-dripping-with-irony/">&lt;p&gt;Look at this Microsoft skyscraper ad for FrontPage 2003:&lt;&#x2F;p&gt;
&lt;div class=&quot;img-ilus&quot; style=&quot;width:130px&quot;&gt;&lt;img alt=&quot;Microsoft FrontPage 2003 ad&quot; src=&quot;&#x2F;assets&#x2F;frontpage-ad.gif&quot; width=&quot;120&quot; height=&quot;600&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Notice anything? No? Hint: zoom in on line 28.&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.mozillazine.org&#x2F;djst&#x2F;archives&#x2F;004866.html&quot; title=&quot;See David Tenser&#x27;s entry&quot;&gt;David Tenser&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Kuro5shin article insults MovableType and MT bloggers</title>
    <published>2004-02-05T02:05:31+00:00</published>
    <updated>2004-02-05T02:05:31+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/05/kuro5delsdelhin-article-insults-movabletype-and-mt-bloggers/"/>
    <id>https://chuyeow.wtf/2004/02/05/kuro5delsdelhin-article-insults-movabletype-and-mt-bloggers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/05/kuro5delsdelhin-article-insults-movabletype-and-mt-bloggers/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.kuro5hin.org&#x2F;story&#x2F;2004&#x2F;2&#x2F;2&#x2F;171117&#x2F;8823&quot; title=&quot;Read the &amp;quot;Why your Movable Type blog must die&amp;quot;&quot; article at Kuro5hin&quot;&gt;Why your Movable Type blog must die goes out of the way to spectacularly insult weblogs. In particular, the author slams &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;&quot; title=&quot;Go to the Movable Type website&quot;&gt;Movable Type&lt;&#x2F;a&gt; for &quot;bad design&quot; and being vulnerable to comment-spamming scripts. Funny. Provoking (to MT users and bloggers at least). Read it, laugh, and move on.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;&lt;br &#x2F;&gt;
Doug provides some insight into the Kuro5shin article:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;The K5 article is not a simple rant by an individual. It is part of a script-kiddie assault on MT weblogs.&lt;&#x2F;p&gt;
&lt;p&gt;...&lt;&#x2F;p&gt;
&lt;p&gt;The K5 posting was written by one of the script-kiddies, and not surprisingly it provides a link to the crapflood script.
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Read Doug&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;02&#x2F;05&#x2F;kuro5shin_article_insults_movabletype_and_mt_bloggers.php#comment9&quot;&gt;entire comment&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;James Joyce, the article author, has also made a &lt;a href=&quot;http:&#x2F;&#x2F;www.kuro5hin.org&#x2F;story&#x2F;2004&#x2F;2&#x2F;5&#x2F;171058&#x2F;4778&quot; title=&quot;Read &amp;quot;Why Movable Type bloggers must die: a response&amp;quot;&quot;&gt;response&lt;&#x2F;a&gt; where he says of this weblog:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;There was also the person who made two identical TrackBacks and thought it was funny.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;The article was funny, yes, but &quot;making&quot; 2 identical TrackBacks wasn&#x27;t my intention nor was it meant to be funny. I&#x27;m not saying MT doesn&#x27;t have it&#x27;s flaws, erm, dude, I&#x27;m just saying your insulting tone is simply that, insulting, which makes it harder to take you seriously.&lt;br &#x2F;&gt;
&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Test your browser security</title>
    <published>2004-02-04T16:50:53+00:00</published>
    <updated>2004-02-04T16:50:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/04/test-your-browser-security/"/>
    <id>https://chuyeow.wtf/2004/02/04/test-your-browser-security/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/04/test-your-browser-security/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.scanit.be&#x2F;&quot; title=&quot;Go to the Scanit website&quot;&gt;Scanit&lt;&#x2F;a&gt;, a Brussels-based security company, has put online a &lt;a href=&quot;http:&#x2F;&#x2F;www.scanit.be&#x2F;bcheck&#x2F;&quot; title=&quot;Check your browser for vulnerabilities with this test&quot;&gt;Browser Security Test&lt;&#x2F;a&gt; which tests for vulnerabilities in your web browser. There is a &lt;a href=&quot;http:&#x2F;&#x2F;bcheck.scanit.be&#x2F;bcheck&#x2F;alltests.php&quot; title=&quot;Find out what the test tests!&quot;&gt;complete listing of the tests they run&lt;&#x2F;a&gt; should you be interested.&lt;&#x2F;p&gt;
&lt;p&gt;I ran the test on 3 of my the big browsers (for the Windows platform, that is) and collected the results.&lt;&#x2F;p&gt;
&lt;p&gt;Results for Firebird 0.8.0+ (20040202) WinXP:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;The Browser Security Test is finished. Please find the results below:&lt;br &#x2F;&gt;
High Risk Vulnerabilities 0&lt;br &#x2F;&gt;
Medium Risk Vulnerabilities 0&lt;br &#x2F;&gt;
Low Risk Vulnerabilities 0&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Results for Opera 7.23 WinXP:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;The Browser Security Test is finished. Please find the results below:&lt;br &#x2F;&gt;
High Risk Vulnerabilities 0&lt;br &#x2F;&gt;
Medium Risk Vulnerabilities 0&lt;br &#x2F;&gt;
Low Risk Vulnerabilities 0&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Results for IE 6.0 WinXP:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;The Browser Security Test is finished. Please find the results below:&lt;br &#x2F;&gt;
High Risk Vulnerabilities 0&lt;br &#x2F;&gt;
Medium Risk Vulnerabilities 0&lt;br &#x2F;&gt;
Low Risk Vulnerabilities 0&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Seems like all my browsers are safe. However, as this &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;forums&#x2F;showthread.php?t=151095&quot; title=&quot;Read the thread &amp;quot;How secure is your browserquot;&quot;&gt;thread at SitePoint Community Forums&lt;&#x2F;a&gt; shows, IE needs to be patched with the latest security patches (as mine has been) to protect it from severable major security flaws. If you haven&#x27;t, do so now by going to &lt;a href=&quot;http:&#x2F;&#x2F;windowsupdate.microsoft.com&#x2F;&quot; title=&quot;Go to Windows Update to keep your Windows OS fixed&quot;&gt;Windows Update&lt;&#x2F;a&gt; in an Internet Explorer browser!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Orkut invitations for sale at ebay</title>
    <published>2004-02-04T15:02:52+00:00</published>
    <updated>2004-02-04T15:02:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/04/orkut-invitations-for-sale-at-ebay/"/>
    <id>https://chuyeow.wtf/2004/02/04/orkut-invitations-for-sale-at-ebay/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/04/orkut-invitations-for-sale-at-ebay/">&lt;p&gt;Orkut membership is by invite only. Apparently that makes it something worth buying into, as this &lt;a href=&quot;http:&#x2F;&#x2F;search.ebay.com&#x2F;search&#x2F;search.dll?cgiurl=http:&#x2F;&#x2F;search.ebay.com&#x2F;search&#x2F;search.dll?cgiurl=http%3A%2F%2Fcgi.ebay.com%2Fws%2F&amp;MfcISAPICommand=GetResult&amp;query=orkut&quot; title=&quot;&quot;&gt;listing of Orkut invites for sale at eBay&lt;&#x2F;a&gt; shows.&lt;&#x2F;p&gt;
&lt;p&gt;In case the auctions get taken down, here&#x27;s a screenshot for posterity (click for a larger image):&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width: 360px;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;screenshots&#x2F;ebay-orkut.png&quot;&gt;&lt;img alt=&quot;Picture of eBay listing of Orkut invitations on auction&quot; src=&quot;&#x2F;assets&#x2F;ebay-orkut-thumb.png&quot; width=&quot;350&quot; height=&quot;221&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Hey I&#x27;ll sell you an invite for just a dollar! Heh just kidding...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Firebird out next Monday</title>
    <published>2004-02-03T18:35:05+00:00</published>
    <updated>2004-02-03T18:35:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/03/mozilla-firebird-out-next-monday/"/>
    <id>https://chuyeow.wtf/2004/02/03/mozilla-firebird-out-next-monday/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/03/mozilla-firebird-out-next-monday/">&lt;p&gt;Ben Goodger posted this in the &lt;a href=&quot;http:&#x2F;&#x2F;www.orkut.com&#x2F;Community.aspx?cmm=2710&quot;&gt;Orkut Mozilla Firebird community&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;It&#x27;s Monday February 9 now. This is the first time I&#x27;ve been confident enough to give a date. This release is going to be the best Firebird yet.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;See Ben Goodger&#x27;s reply in &lt;a href=&quot;http:&#x2F;&#x2F;www.orkut.com&#x2F;CommMsgs.aspx?cmm=2710&amp;tid=1&quot;&gt;forum thread at Orkut&lt;&#x2F;a&gt; if you&#x27;re an Orkut member.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;&lt;br &#x2F;&gt;
Sorry for posting to a closed forum. This piece of news was also made known in the MozillaZine forums in this thread entitled &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=48889&quot;&gt;FAQ: When is 0.8 coming out?&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Cheers!&lt;br &#x2F;&gt;
&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Thunderbird 0.5 test builds are available</title>
    <published>2004-02-02T16:21:48+00:00</published>
    <updated>2004-02-02T16:21:48+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/02/mozilla-thunderbird-05-test-builds-are-available/"/>
    <id>https://chuyeow.wtf/2004/02/02/mozilla-thunderbird-05-test-builds-are-available/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/02/mozilla-thunderbird-05-test-builds-are-available/">&lt;p&gt;Hot off the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;&quot; title=&quot;Go to the MozillaZine forums&quot;&gt;mozillazine forums&lt;&#x2F;a&gt;: Scott MacGregor has announced that the &lt;a title=&quot;Read the forum thread - &amp;quot;First set of 0.5 test builds now available for (Win32)&amp;quot;&quot; href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=49209&quot;&gt;first set of 0.5 test builds are now available for Win32&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Expect Milestone 0.5 to be released within the week or the next as per this announcement by Scott on the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=48645&quot; title=&quot;Read the forum thread - &amp;quot;Updated Roadmap Including 0.5 Plans&amp;quot;&quot;&gt;updated roadmap and 0.5 plans&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;thunderbird&#x2F;nightly&#x2F;2004-02-01-0.5&#x2F;&quot; title=&quot;Download the Thunderbird 0.5 test builds for 2004-02-01&quot;&gt;Grab the test builds&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>My Thunderbird build 20040201</title>
    <published>2004-02-02T03:15:40+00:00</published>
    <updated>2004-02-02T03:15:40+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/02/my-thunderbird-build-20040201/"/>
    <id>https://chuyeow.wtf/2004/02/02/my-thunderbird-build-20040201/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/02/my-thunderbird-build-20040201/">&lt;p&gt;Just for fun, I built &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot; title=&quot;Go to the Mozilla Thunderbird product page&quot;&gt;Mozilla Thunderbird&lt;&#x2F;a&gt; from the latest sources using Microsoft Visual C++ .NET 2003.&lt;&#x2F;p&gt;
&lt;p&gt;Optimized for Pentium 4, Pentium M, Celeron 1.7GHz+ and Athlon64 with SSE2. I stripped out most of the stuff I don&#x27;t need, and added compiler optimizations &#x2F;G7 (optimize for processors listed above) and &#x2F;Oxs (full optimization, optimize for size).&lt;&#x2F;p&gt;
&lt;p&gt;Download it: &lt;a href=&quot;http:&#x2F;&#x2F;codefront.net&#x2F;mozilla&#x2F;thunderbird&#x2F;thunderbird-win32-20040201-Oxs-G7-SSE2.zip&quot; title=&quot;Download my Mozilla Thunderbird 20040201 SSE2 optimized build&quot;&gt;thunderbird-win32-20040201-Oxs-G7-SSE2.zip&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s my .mozconfig:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
export MOZ_THUNDERBIRD=1&lt;br &#x2F;&gt;
mk_add_options MOZ_THUNDERBIRD=1&lt;&#x2F;p&gt;
&lt;p&gt;ac_add_options --disable-accessibility&lt;br &#x2F;&gt;
ac_add_options --disable-activex&lt;br &#x2F;&gt;
ac_add_options --disable-activex-scripting&lt;br &#x2F;&gt;
ac_add_options --disable-auto-deps&lt;br &#x2F;&gt;
ac_add_options --disable-crypto&lt;br &#x2F;&gt;
ac_add_options --disable-debug&lt;br &#x2F;&gt;
ac_add_options --disable-freetype2&lt;br &#x2F;&gt;
ac_add_options --disable-installer&lt;br &#x2F;&gt;
ac_add_options --disable-jsd&lt;br &#x2F;&gt;
ac_add_options --disable-ldap&lt;br &#x2F;&gt;
ac_add_options --disable-mathml&lt;br &#x2F;&gt;
ac_add_options --disable-necko-disk-cache&lt;br &#x2F;&gt;
ac_add_options --disable-oji&lt;br &#x2F;&gt;
ac_add_options --disable-profilesharing&lt;br &#x2F;&gt;
ac_add_options --disable-tests&lt;br &#x2F;&gt;
ac_add_options --disable-xprint&lt;&#x2F;p&gt;
&lt;p&gt;ac_add_options --enable-extensions=wallet,xmlextras&lt;br &#x2F;&gt;
ac_add_options -enable-image-decoders=bmp,jpeg,gif,icon,png&lt;br &#x2F;&gt;
ac_add_options --enable-necko-protocols=http,file,jar,viewsource,res,data&lt;br &#x2F;&gt;
ac_add_options --enable-optimize=&#x27;-Oxs -G7 -arch:SSE2&#x27;&lt;br &#x2F;&gt;
ac_add_options --enable-strip
&lt;&#x2F;p&gt;&lt;&#x2F;div&gt;
</content>
  </entry>
  <entry>
    <title>The force that is Slashdot</title>
    <published>2004-02-01T02:44:09+00:00</published>
    <updated>2004-02-01T02:44:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/01/the-force-that-is-slashdot/"/>
    <id>https://chuyeow.wtf/2004/02/01/the-force-that-is-slashdot/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/01/the-force-that-is-slashdot/">&lt;p&gt;You must have heard of the &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Slashdot_effect&quot; title=&quot;Definition of &amp;quot;Slashdot effect&amp;quot; at Wikipedia&quot;&gt;Slashdot effect&lt;&#x2F;a&gt;. It is real. It is of a magnitude beyond your imagination. Yesterday I felt a teeny weeny jolt in bandwidth simply because someone linked to my &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;10&#x2F;new_ie_vulnerability_fake_urls.php&quot; title=&quot;Read my &amp;quot;New IE vulnerability - fake URLs&amp;quot; entry&quot;&gt;&quot;New IE vulnerability - fake URLs&quot;&lt;&#x2F;a&gt; entry in this &lt;a href=&quot;http:&#x2F;&#x2F;slashdot.org&#x2F;article.pl?sid=04&#x2F;01&#x2F;30&#x2F;0428242&quot; title=&quot;Read the article at Slashdot&quot;&gt;Slashdot article entitled &quot;Microsoft Advises to Type in URLs Rather than Click&quot;&lt;&#x2F;a&gt; in a &lt;em&gt;comment&lt;&#x2F;em&gt;. A comment that is found about 80% down a page that scrolls at least fifty times when you press the page down button.&lt;&#x2F;p&gt;
&lt;p&gt;Lucky for me I&#x27;m &lt;em&gt;just&lt;&#x2F;em&gt; below my bandwidth allocation for this month.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Sorry if you came in from QueerFilter.com</title>
    <published>2004-02-01T02:13:37+00:00</published>
    <updated>2004-02-01T02:13:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/02/01/sorry-if-you-came-in-from-queerfiltercom/"/>
    <id>https://chuyeow.wtf/2004/02/01/sorry-if-you-came-in-from-queerfiltercom/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/02/01/sorry-if-you-came-in-from-queerfiltercom/">&lt;p&gt;If you came to my site, either now or previously, via &lt;a href=&quot;http:&#x2F;&#x2F;www.queerfilter.com&#x2F;&quot; title=&quot;Go to QueerFilter.com - GLBT weblogs &amp; journals feed aggregator&quot;&gt;QueerFilter&lt;&#x2F;a&gt;, you were obviously expecting some &lt;acronym title=&quot;Gay, Lesbian, Bisexual, and Transgendered&quot;&gt;GLBT&lt;&#x2F;acronym&gt; content. The problem is, I&#x27;m neither of those, nor does this weblog have related content. So why the heck am I on QueerFilter?&lt;&#x2F;p&gt;
&lt;p&gt;Well, erm, the reason, you see, is a little dumb (and I&#x27;m a little dumbass). There was a period when I was looking for feed aggregators and weblog directories to add my weblog to, and when I came across QueerFilter, I added redemption in a blog summarily without checking out what QueerFilter was really all about. &lt;em&gt;Duh!&lt;&#x2F;em&gt; Apologies if I wasted your time.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;www.edifyingspectacle.org&#x2F;pcstuff&#x2F;archives&#x2F;gay_weblogging&#x2F;hey_you_slack_gay_weblogg.php#comments-ask&quot; title=&quot;Read Richard&#x27;s entry on QueerFilter - &amp;quot;Hey, you slack gay webloggers!&amp;quot;&quot;&gt;Richard Evans Lee&#x27;s blog entry on QueerFilter&lt;&#x2F;a&gt;, I found out my mistake. I sent an email to the QueerFilter owner&#x2F;webmaster to remove my feed. Let&#x27;s see if this entry appears up there now shall we?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>There is no native RSS reader panel in Firebird 0.8 - phew!</title>
    <published>2004-01-31T02:39:01+00:00</published>
    <updated>2004-01-31T02:39:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/31/there-is-no-native-rss-reader-panel-in-firebird-08-phew/"/>
    <id>https://chuyeow.wtf/2004/01/31/there-is-no-native-rss-reader-panel-in-firebird-08-phew/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/31/there-is-no-native-rss-reader-panel-in-firebird-08-phew/">&lt;p&gt;I just read Matt Haughey&#x27;s blog entry on &lt;a href=&quot;http:&#x2F;&#x2F;a.wholelottanothing.org&#x2F;archives.blah&#x2F;007687&quot; title=&quot;Read Matt Haughey&#x27;s entry on RSS native parsing in the next Firebird&quot;&gt;RSS native parsing in the next Firebird&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;http:&#x2F;&#x2F;a.wholelottanothing.org&#x2F;archives.blah&#x2F;007687&quot;&gt;&lt;p&gt;I was checking out the nightly builds of Firebird 0.8 betas (windows and linux, mac) and they&#x27;ve got an rss button and panel that parses RSS, with titles linking to the main window.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;em&gt;Gasp!&lt;&#x2F;em&gt; The first thing I thought was how could I have missed something like this? When rationality took over, I began to feel pretty sure that Matt Haughey had made an honest mistake - there is &lt;em&gt;not&lt;&#x2F;em&gt; going to be a native RSS reader panel in Firebird 0.8 (or any future releases for that matter).&lt;&#x2F;p&gt;
&lt;p&gt;I did some Googling and satisfied myself with some answers. Firstly, there is no mention of a RSS reader in the &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;firebird&#x2F;roadmap.html&quot; title=&quot;Check out the Firebird Roadmap&quot;&gt;Firebird Roadmap&lt;&#x2F;a&gt; - even the phrase RSS didn&#x27;t turn up. Secondly, there exists a Firebird extension, RSS Reader Panel, which &lt;a href=&quot;http:&#x2F;&#x2F;fls.moo.jp&#x2F;moz&#x2F;rssreader&#x2F;ss.png&quot; title=&quot;View a screenshot of the RSS Reader Panel extension&quot;&gt;looks&lt;&#x2F;a&gt; very similar to Matt&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;a.wholelottanothing.org&#x2F;junkdrawer&#x2F;firebirdRSS.png&quot; title=&quot;View Matt&#x27;s screenshot of his Firebird setup with the RSS panel&quot;&gt;screenshot&lt;&#x2F;a&gt;. Thirdly, I trusted myself to know if there was something like this coming up in my beloved Mozilla Firebird.&lt;&#x2F;p&gt;
&lt;p&gt;Thankfully enough. An RSS reader sidepanel included by default would be widely protested by many (including yours truly) I would surmise. Bloat is one thing, having something like that in a web browser that promises to trim off the fat surely goes against it&#x27;s standing principles.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: I forgot to add the reason why Matt Haughey could be experiencing this. It is entirely possible that he had previously installed the RSS Reader panel extension into his Firebird profile and summarily forgotten about such a fact. And yeah I wanted to contact him about it, but comments aren&#x27;t allowed and I can&#x27;t find an email address anywhere. If anyone knows how I can contact him please let me know ASAP.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Update 2&lt;&#x2F;strong&gt;: Nevermind I found his email address.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Update 3&lt;&#x2F;strong&gt;: I got through to Matt and he has made amendments to his blog entry. Yay!&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>XHTML&#x2F;CSS&#x2F;JS Scrabble</title>
    <published>2004-01-30T21:01:33+00:00</published>
    <updated>2004-01-30T21:01:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/30/xhtmlcssjs-scrabble/"/>
    <id>https://chuyeow.wtf/2004/01/30/xhtmlcssjs-scrabble/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/30/xhtmlcssjs-scrabble/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.themaninblue.com&#x2F;experiment&#x2F;SSCrabble&#x2F;&quot; title=&quot;Check out SScrable&quot;&gt;SScrabble&lt;&#x2F;a&gt; (Solitaire Scrabble) was created using purely XHTML, CSS and some clever JavaScript. Really neat stuff (although &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;08&#x2F;21&#x2F;dhtml_lemmings.php&quot; title=&quot;Read my old entry on DHTML Lemmings&quot;&gt;DHTML Lemmings&lt;&#x2F;a&gt; had much more &lt;em&gt;oomph&lt;&#x2F;em&gt; in terms of pure &lt;em&gt;wow&lt;&#x2F;em&gt; factor - too bad it had to be taken down due to copyright issues).&lt;&#x2F;p&gt;
&lt;p&gt;The Man in Blue speaks on his experience coding this SScrable thing up in this &lt;a href=&quot;http:&#x2F;&#x2F;www.themaninblue.com&#x2F;writing&#x2F;perspective&#x2F;2004&#x2F;01&#x2F;27&#x2F;&quot; title=&quot;Read the creator&#x27;s weblog entry&quot;&gt;weblog entry&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>IE file download extension spoofing hole</title>
    <published>2004-01-30T00:45:47+00:00</published>
    <updated>2004-01-30T00:45:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/30/ie-file-download-extension-spoofing-hole/"/>
    <id>https://chuyeow.wtf/2004/01/30/ie-file-download-extension-spoofing-hole/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/30/ie-file-download-extension-spoofing-hole/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.infoworld.com&#x2F;article&#x2F;04&#x2F;01&#x2F;28&#x2F;HNiehole_1.html&quot; title=&quot;Read the &amp;quot;New Explorer hole could be devastating&amp;quot; article at InfoWorld&quot;&gt;InfoWorld reports&lt;&#x2F;a&gt; on the new Internet Explorer security hole that allows file download extensions to be spoofed. The hole allows the site author to make it appear that a downloaded file is safe by spoofing it&#x27;s extension, when in fact it could be anything, including malicious executables.&lt;&#x2F;p&gt;
&lt;p&gt;Security company Secunia has a demo of this security hole over at their &lt;a href=&quot;http:&#x2F;&#x2F;secunia.com&#x2F;Internet_Explorer_File_Download_Extension_Spoofing_Test&#x2F;&quot; title=&quot;Test your browser to see if it is vulnerable to this security hole&quot;&gt;Internet Explorer File Download Extension Spoofing Test&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The author of the InfoWorld article goes so far as to say:&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;http:&#x2F;&#x2F;www.infoworld.com&#x2F;article&#x2F;04&#x2F;01&#x2F;28&#x2F;HNiehole_1.html&quot;&gt;&lt;p&gt;The possibilities are endless, and since both spoof issues appear to be unfixable, it must surely place a big question mark over Explorer’s viability as a browser.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;The other aforementioned spoof issue is, of course, the &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;10&#x2F;new_ie_vulnerability_fake_urls.php&quot; title=&quot;Read my entry on the IE URL spoofing vulnerability&quot;&gt;URL spoofing vulnerability&lt;&#x2F;a&gt;. Some good news on this front though, with Neowin.net reporting that Microsoft will fix this with an &lt;a href=&quot;http:&#x2F;&#x2F;www.neowin.net&#x2F;comments.php?id=17025&amp;category=main&quot; title=&quot;Read the report on this IE update at Neowin.net&quot;&gt;IE update to remove support for usernames in http urls&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Can&#x27;t say the damage hasn&#x27;t been done. Has it got your average non-technical Joe&#x2F;Jane looking for &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;&quot; title=&quot;Go to the mozilla.org website&quot;&gt;alternative&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.opera.com&#x2F;&quot; title=&quot;Go to the Opera web browser website&quot;&gt;browsers&lt;&#x2F;a&gt;? Maybe grandma is starting to ask for &quot;a better Internet&quot;? No one knows for sure, but I&#x27;m sure if this is publicized further in the mass media, there&#x27;ll be some very pleased converts.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Firebird 0.8 on the horizon</title>
    <published>2004-01-30T00:22:30+00:00</published>
    <updated>2004-01-30T00:22:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/30/firebird-08-on-the-horizon/"/>
    <id>https://chuyeow.wtf/2004/01/30/firebird-08-on-the-horizon/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/30/firebird-08-on-the-horizon/">&lt;p&gt;Mozilla Firebird 0.8 is almost ready to be shipped, thanks to Jesse Ruderman for &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;archives&#x2F;000301.html&quot; title=&quot;Jesse summarizes what&#x27;s new in Firebird 0.8&quot;&gt;pointing out&lt;&#x2F;a&gt; that small detail in the &lt;a href=&quot;http:&#x2F;&#x2F;mozillazine.org&#x2F;articles&#x2F;article4230.html&quot; title=&quot;Minutes of the mozilla.org Staff Meeting of Monday 26th January 2004&quot;&gt;latest mozilla.org staff minutes&lt;&#x2F;a&gt;. Expect it Friday (today!) or Monday.&lt;&#x2F;p&gt;
&lt;p&gt;Jesse Ruderman has listed the new features and major bugfixes over at &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;archives&#x2F;000301.html&quot; title=&quot;Jesse summarizes what&#x27;s new in Firebird 0.8&quot;&gt;this entry&lt;&#x2F;a&gt; in his blog.&lt;&#x2F;p&gt;
&lt;p&gt;Nothing much there you won&#x27;t be unfamiliar with if you&#x27;ve been using nighty builds like me.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Nothing to redeem here</title>
    <published>2004-01-28T01:05:02+00:00</published>
    <updated>2004-01-28T01:05:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/28/nothing-to-redeem-here/"/>
    <id>https://chuyeow.wtf/2004/01/28/nothing-to-redeem-here/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/28/nothing-to-redeem-here/">&lt;p&gt;I got this weird email just a few hours ago:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
Message sent via contact form by: kimberly capps&lt;br &#x2F;&gt;
URL:&lt;&#x2F;p&gt;
&lt;p&gt;how do i get the redemption button for my email?
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;I was confused about this &quot;redemption button&quot;, so I asked this Kimberly:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
Hi Kimberly,&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not sure what you&#x27;re referring to. Could you explain a little more on&lt;br &#x2F;&gt;
what you&#x27;re looking for?&lt;&#x2F;p&gt;
&lt;p&gt;Regards,&lt;br &#x2F;&gt;
Chu Yeow
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;And so she replied:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;what we are trying to find is the redemption button for our email so we can retrieve our free plane tickets!&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;I think I just got my first email prank. Either that or something has gone awry with search engine results. This weblog didn&#x27;t turn up on Google for &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=redemption+plane+tickets&quot; title=&quot;Search Google for &amp;quot;redemption plane tickets&amp;quot;&quot;&gt;&quot;redemption plane tickets&quot;&lt;&#x2F;a&gt; though.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, now is as good a time as ever to point out that the &quot;redemption&quot; in &quot;redemption in a blog&quot; is actually my online pseudonym&#x2F;nickname&#x2F;handle. I &lt;em&gt;thought&lt;&#x2F;em&gt; it would be a nice play of words. This is not a redemption counter. There are no free gifts.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Pretty in pink, and yellow and green</title>
    <published>2004-01-28T00:50:00+00:00</published>
    <updated>2004-01-28T00:50:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/28/pretty-in-pink-and-yellow-and-green/"/>
    <id>https://chuyeow.wtf/2004/01/28/pretty-in-pink-and-yellow-and-green/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/28/pretty-in-pink-and-yellow-and-green/">&lt;p&gt;Perhaps you&#x27;d have noticed the new colors and a slightly changed layout.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:210px&quot;&gt;&lt;img alt=&quot;Color palette used for the redesign&quot; src=&quot;&#x2F;assets&#x2F;palette.gif&quot; width=&quot;200&quot; height=&quot;80&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Is pink too effeminate? Think the color palette is garishly eye-blinding? Do your eyes bleed from the white background?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>VB.NET boolean operators and short-circuit evaluation</title>
    <published>2004-01-25T01:51:29+00:00</published>
    <updated>2004-01-25T01:51:29+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/25/vbnet-boolean-operators-and-short-circuit-evaluation/"/>
    <id>https://chuyeow.wtf/2004/01/25/vbnet-boolean-operators-and-short-circuit-evaluation/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/25/vbnet-boolean-operators-and-short-circuit-evaluation/">&lt;div class=&quot;pullquote&quot;&gt;... short-circuit evaluation is how the logical human brain works when confronted with chained boolean conditionals in real life&lt;&#x2F;div&gt;
&lt;p&gt;Having to pick up VB.NET for a Human Computer Interaction course this semester, I&#x27;ve been spending some time getting acquainted with the language through a couple of books. Every now and then I get somewhat bemused by how &quot;different&quot; VB syntax is - not that it&#x27;s a bad thing, pray. Syntax, as almost everyone agrees, is secondary to semantics.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, here&#x27;s a particularly bemusing bit of trivia you can use to taunt&#x2F;jibe&#x2F;provoke your VB.NET&#x2F;VB programmer friends.&lt;&#x2F;p&gt;
&lt;p&gt;Did you know that VB.NET&#x27;s default boolean operators &lt;span class=&quot;monospaced&quot;&gt;And&lt;&#x2F;span&gt; and &lt;span class=&quot;monospaced&quot;&gt;Or&lt;&#x2F;span&gt; do not take advantage of short-circuit evaluation? Take for example this snippet of conditional code below:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
Dim x as Integer 1&lt;br &#x2F;&gt;
If (x &lt; 5) Or (x &gt; 10) Then
&lt;&#x2F;div&gt;
&lt;p&gt;Now, you&#x27;d expect your run-of-the-mill compiler&#x2F;interpreter to optimize by short-circuiting the 2nd boolean expression, since the 1st expression is already true (and so whether the 2nd boolean expression is true or false doesn&#x27;t really matter). For some reason, probably one steeped in history, VB.NET, or rather the JIT compiler, &lt;em&gt;doesn&#x27;t&lt;&#x2F;em&gt; short-circuit. It happily goes ahead and evaluates the 2nd boolean expression.&lt;&#x2F;p&gt;
&lt;p&gt;This is logically ludicrous - short-circuit evaluation is how the logical human brain works when confronted with chained boolean conditionals in real life. If the university says I can only get a First Class Honours degree if my &lt;acronym title=&quot;Cumulative Average Point&quot;&gt;CAP&lt;&#x2F;acronym&gt; is greater than 4.5 AND get a minimum of A- for my thesis, I won&#x27;t really fret about not getting an A- for my thesis (and subsequently missing out on a yummy First Class Honours) when my &lt;acronym title=&quot;Cumulative Average Point&quot;&gt;CAP&lt;&#x2F;acronym&gt; can never hit 4.5.&lt;&#x2F;p&gt;
&lt;p&gt;Now to be fair, there is an alternative &lt;span class=&quot;monospaced&quot;&gt;OrElse&lt;&#x2F;span&gt; operator which &lt;em&gt;does&lt;&#x2F;em&gt; perform short-circuit evaluation. It is not fair though to expect such an unorthodox operator to be something your common on-the-street (read: non-VB) programmer will expect to exist (unless he reads a VB.NET book &lt;em&gt;and&lt;&#x2F;em&gt; bothers to flip to the introductory chapters).&lt;&#x2F;p&gt;
&lt;p&gt;Come to think of it, it could be an intended design issue. Evaluating the 2nd boolean expression could be always warranted when it produces a side effect. That must be the reason why Microsoft introduced the &lt;span class=&quot;monospaced&quot;&gt;OrElse&lt;&#x2F;span&gt; and &lt;span class=&quot;monospaced&quot;&gt;AndAlso&lt;&#x2F;span&gt; operators and leaving the standard &lt;span class=&quot;monospaced&quot;&gt;And&lt;&#x2F;span&gt; and &lt;span class=&quot;monospaced&quot;&gt;Or&lt;&#x2F;span&gt; operators as non-short-circuiting to prevent confusing converting VB programmers.&lt;&#x2F;p&gt;
&lt;p&gt;So this then is actually an issue with VB. Hence, we can conclude that they deserve to be taunted&#x2F;jibed&#x2F;provoked. Spare the VB.NET programmers. For now.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Teach yourself Java in 21 days?</title>
    <published>2004-01-25T01:09:33+00:00</published>
    <updated>2004-01-25T01:09:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/25/teach-yourself-java-in-21-days/"/>
    <id>https://chuyeow.wtf/2004/01/25/teach-yourself-java-in-21-days/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/25/teach-yourself-java-in-21-days/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.norvig.com&#x2F;21-days.html&quot;&gt;Teach Yourself Programming in Ten Years&lt;&#x2F;a&gt; is more realistic. That just about sums up why I was never bought by the &lt;em&gt;enticing&lt;&#x2F;em&gt; promises of &quot;Teach Yourself X in Y days&quot; and &quot;Learn X in Y hours&quot; books.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Photoshop magic</title>
    <published>2004-01-22T16:35:37+00:00</published>
    <updated>2004-01-22T16:35:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/22/photoshop-magic/"/>
    <id>https://chuyeow.wtf/2004/01/22/photoshop-magic/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/22/photoshop-magic/">&lt;p&gt;Check out the 1st post in this discussion forum &lt;a href=&quot;http:&#x2F;&#x2F;bbs.popv.net&#x2F;dispbbs.asp?BoardID=26&amp;id=257280&quot; title=&quot;Check out the thread - you have to see it!&quot;&gt;thread&lt;&#x2F;a&gt;. It&#x27;s in Chinese but the pictures speak for themselves. 20 hours was how long it took, but check out the hair on the girl and the fur on the dog. Unbelievable.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Tooltips with CSS</title>
    <published>2004-01-22T16:18:27+00:00</published>
    <updated>2004-01-22T16:18:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/22/tooltips-with-css/"/>
    <id>https://chuyeow.wtf/2004/01/22/tooltips-with-css/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/22/tooltips-with-css/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.madaboutstyle.com&#x2F;tooltip2.html&quot; title=&quot;Read on how to create tooltips using purely CSS&quot;&gt;Pure CSS tooltips&lt;&#x2F;a&gt; by SantaKlauss shows you how to display tooltips using purely CSS. The idea is not unlike &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;28&#x2F;getting_funky_with_nice_titles.php&quot; title=&quot;Read my entry on Nice Titles&quot;&gt;Nice Titles&lt;&#x2F;a&gt;, though the execution is very different - Nice Titles uses the DOM to extract the nicetitles, the tooltips use only CSS.&lt;&#x2F;p&gt;
&lt;p&gt;The smart part is when printing: the tooltips are &quot;inlined&quot; and bracketed appropriately so that they show up in the normal flow of the document when printing.&lt;&#x2F;p&gt;
&lt;p&gt;Still, I consider the execution to be semantically incorrect since the tooltip requires the anchor tag &amp;lt;a&amp;gt; to work - the text that is &quot;tooltipped&quot; is &lt;em&gt;not&lt;&#x2F;em&gt; an anchor. A better way would have been to use a standard &amp;lt;span&amp;gt; tag. Of course, this then breaks in IE because IE only supports the &lt;span class=&quot;monospaced&quot;&gt;:hover&lt;&#x2F;span&gt; pseudo-class on the &amp;lt;a&amp;gt; tag. Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;www.xs4all.nl&#x2F;~peterned&#x2F;csshover.html&quot; title=&quot;Read as  Peter Nederlof explains how to use IE behaviors to simulate hover effects on any element in IE&quot;&gt;whatever:hover&lt;&#x2F;a&gt;, however, this can easily be fixed. Also, there seems to be no need for the z-index fix as mentioned (tested on IE&#x2F;Win 5, 5.5 and 6). The CSS is below:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
body {&lt;br &#x2F;&gt;
  behavior:url(&#x2F;htc&#x2F;csshover.htc);&lt;br &#x2F;&gt;
}&lt;br &#x2F;&gt;
span.info{&lt;br &#x2F;&gt;
  position:relative;&lt;br &#x2F;&gt;
  background-color:#ecc;&lt;br &#x2F;&gt;
  color:#000;&lt;br &#x2F;&gt;
  text-decoration:none&lt;br &#x2F;&gt;
}&lt;br &#x2F;&gt;
span.info:hover { background-color:#e96 }&lt;br &#x2F;&gt;
span.info span.tooltip { display: none }&lt;br &#x2F;&gt;
span.info:hover span.tooltip {&lt;br &#x2F;&gt;
  display:block;&lt;br &#x2F;&gt;
  position:absolute;&lt;br &#x2F;&gt;
  top:2em; left:2em; width:15em;&lt;br &#x2F;&gt;
  border:1px solid #0cf;&lt;br &#x2F;&gt;
  background-color:#cff;&lt;br &#x2F;&gt;
  color:#000;&lt;br &#x2F;&gt;
  text-align: center&lt;br &#x2F;&gt;
}
&lt;&#x2F;div&gt;
&lt;p&gt;Here&#x27;s an &lt;a href=&quot;&#x2F;examples&#x2F;csstooltips.html&quot; title=&quot;Check out my example on CSS tooltips&quot;&gt;example&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Funny how this site looks bad</title>
    <published>2004-01-19T12:08:00+00:00</published>
    <updated>2004-01-19T12:08:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/19/funny-how-this-site-looks-bad/"/>
    <id>https://chuyeow.wtf/2004/01/19/funny-how-this-site-looks-bad/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/19/funny-how-this-site-looks-bad/">&lt;p&gt;Take a look at &lt;a href=&quot;http:&#x2F;&#x2F;www.siprelle.com&#x2F;gsquad&#x2F;&quot; title=&quot;Go to the Graphic Designers for Dean website&quot;&gt;Graphic Designers for Dean&lt;&#x2F;a&gt;. Then read their tagline&#x2F;motto&#x2F;whatever:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Beautifying the Dean Campaign One Pixel at a Time!&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Right. One pixel at a time it is.&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;www.swagu.com&#x2F;&quot; title=&quot;David Clain&#x27;s Swagu pointed this out&quot;&gt;Swagu&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Get rid of low disk space popups in Windows</title>
    <published>2004-01-13T00:32:49+00:00</published>
    <updated>2004-01-13T00:32:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/13/get-rid-of-low-disk-space-popups-in-windows/"/>
    <id>https://chuyeow.wtf/2004/01/13/get-rid-of-low-disk-space-popups-in-windows/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/13/get-rid-of-low-disk-space-popups-in-windows/">&lt;p&gt;Being mired in hard disk space poverty sucks. Having your operating system keep reminding you of that every minute or so sucks even more. And to add to your woes, it&#x27;s promise of helping you cleanup your hard disk to make more space falls apart when there really isn&#x27;t anything it can suggest you remove.&lt;&#x2F;p&gt;
&lt;p&gt;So that&#x27;s how it is recently. Look at what&#x27;s in my &quot;anime&quot; partition: episodes of Naruto, Chrno Crusade, Full Metal Alchemist, PLANETES, Shingetsutan Tsukihime, Gunslinger Girl and newly-found Mezzo TV. And 3.33 GB invested in Neverwinter Nights together with the Shadows of Undrentide and Hordes of the Underdark expansion packs. Those and more on a 20 GB hard disk in my laptop. I live day by day, deleting anime as they are downloaded and watched, or transferred over to my desktop (which, thank heavens, has 80 GB).&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, all 3 of my partitions are often nearly full, and Windows XP keeps trying to be helpful. I don&#x27;t like being &quot;helped&quot;. So this is what I did:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Opened my registry with regedit&lt;&#x2F;li&gt;
&lt;li&gt;Found the &lt;span class=&quot;monospaced&quot;&gt;HKEY_CURRENT_USER -&gt; Software -&gt; Microsoft -&gt; Windows -&gt; CurrentVersion -&gt; Policies -&gt; Explorer&lt;&#x2F;span&gt; key.&lt;&#x2F;li&gt;
&lt;li&gt;Created a new DWORD value named &quot;NoLowDiskSpaceChecks&quot;&lt;&#x2F;li&gt;
&lt;li&gt;Set the value to &quot;1&quot; to disable the low disk space notifications&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;em&gt;Meh!&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;www.mydesktophelp.com&#x2F;tips&#x2F;win172.htm&quot; title=&quot;Go to the source&quot;&gt;MyDesktopHelp.Com&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>HTTP error pages for weblogs!</title>
    <published>2004-01-13T00:11:28+00:00</published>
    <updated>2004-01-13T00:11:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/13/http-error-pages-for-weblogs/"/>
    <id>https://chuyeow.wtf/2004/01/13/http-error-pages-for-weblogs/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/13/http-error-pages-for-weblogs/">&lt;p&gt;Check out the custom error pages over at &lt;a href=&quot;http:&#x2F;&#x2F;www.1976design.com&#x2F;blog&quot; title=&quot;Go to Dunstan&#x27;s blog&quot;&gt;Dunstan Orchard&#x27;s blog&lt;&#x2F;a&gt; as linked in his weblog entry entitled &lt;a href=&quot;http:&#x2F;&#x2F;www.1976design.com&#x2F;blog&#x2F;archive&#x2F;2004&#x2F;01&#x2F;10&#x2F;error-handling&#x2F;&quot; title=&quot;Read Dunstan Orchard&#x27;s blog entry on &amp;quot;Friendly error handling&amp;quot;&quot;&gt;Friendly error handling&lt;&#x2F;a&gt;. Now that is cool. One other thing is certain - Dunstan really has too much time on his hands. Heh. I think I&#x27;m just jealous.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The PHP Anthology just arrived</title>
    <published>2004-01-12T23:39:46+00:00</published>
    <updated>2004-01-12T23:39:46+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/12/the-php-anthology-just-arrived/"/>
    <id>https://chuyeow.wtf/2004/01/12/the-php-anthology-just-arrived/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/12/the-php-anthology-just-arrived/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;books&#x2F;phpant1&#x2F;&quot; title=&quot;Go to SitePoint&#x27;s book section for The PHP Anthology&quot;&gt;The PHP Anthology&lt;&#x2F;a&gt; arrived in the mail today. Shipped by &lt;acronym title=&quot;United States Postal Service&quot;&gt;USPS&lt;&#x2F;acronym&gt;, I wasn&#x27;t too impressed with their delivery when it came in a flimsy paper package and was subsequently stuffed into my tiny mailbox. The result - two noticeably squashed up books with dented splines and dog-eared corners.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:190px;&quot;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;phpant.jpg&quot; alt=&quot;Picture of The PHP Anthology&quot; width=&quot;180&quot; height=&quot;161&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Anyway, acrimony aside, the PHP Anthology is a set of 2 books written by &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;books&#x2F;phpant1&#x2F;about.php&quot; title=&quot;Read Harry&#x27;s author profile at SitePoint&quot;&gt;Harry Fuecks&lt;&#x2F;a&gt; of &lt;a href=&quot;http:&#x2F;&#x2F;www.phppatterns.com&#x2F;&quot; title=&quot;Go to Harry&#x27;s phpPatterns site&quot;&gt;phpPatterns&lt;&#x2F;a&gt; fame. Harry is rather reputable around the PHP circles, and also in the XUL community. He also was a co-author of one of those big red Wrox Press books dealing with XML. So I&#x27;m looking forward this latest publication of his - it should be good.&lt;&#x2F;p&gt;
&lt;p&gt;Well, I do have &lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&#x2F;&quot; title=&quot;Go to SitePoint.com&quot;&gt;SitePoint&lt;&#x2F;a&gt; to thank for sending me a complimentary copy as part of the benefits program at &lt;a href=&quot;http:&#x2F;&#x2F;sitepointforums.com&#x2F;&quot; title=&quot;Go to SitePoint Forums - the friendliest, busiest web development and PHP community&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt; - being an Advisor (otherwise known as a moderator in discussion forum parlance) has it&#x27;s perks. Now if I just have the time to read the books to return SitePoint the favor with a testimonial or a review...&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Blacklist weblog.cemper.com if you don&#x27;t want vaguely related TrackBacks</title>
    <published>2004-01-07T20:14:54+00:00</published>
    <updated>2004-01-07T20:14:54+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/07/blacklist-weblogcempercom-if-you-dont-want-vaguely-related-trackbacks/"/>
    <id>https://chuyeow.wtf/2004/01/07/blacklist-weblogcempercom-if-you-dont-want-vaguely-related-trackbacks/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/07/blacklist-weblogcempercom-if-you-dont-want-vaguely-related-trackbacks/">&lt;p&gt;I&#x27;m deliberately making a point to let everyone know of my recommendation that they should blacklist &lt;strong&gt;weblog.cemper.com&lt;&#x2F;strong&gt; if they do not wish to receive TrackBacks that are only marginally related from the aforementioned weblog. I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;29&#x2F;sending_trackback_pings_indiscriminately_makes_you_a_trackback_spammer.php&quot; title=&quot;Read me entry entitled &amp;quot;Sending TrackBack pings indiscriminately makes you a TrackBack spammer&amp;quot;&quot;&gt;wrote about this&lt;&#x2F;a&gt; before and I haven&#x27;t forgotten that I said &lt;a href=&quot;http:&#x2F;&#x2F;weblog.cemper.com&#x2F;&quot; title=&quot;Read Christoph Cemper&#x27;s weblog&quot;&gt;Christoph Cemper&lt;&#x2F;a&gt; &quot;isn&#x27;t a TrackBack spammer&quot;. That opinion still hasn&#x27;t changed because he isn&#x27;t a spammer in the conventional sense, as Jay Allen has &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;29&#x2F;sending_trackback_pings_indiscriminately_makes_you_a_trackback_spammer.php#comment6&quot; title=&quot;Read Jay&#x27;s comment&quot;&gt;mentioned&lt;&#x2F;a&gt;. I also don&#x27;t want to begin a debate on what qualifies as TrackBack spam and what doesn&#x27;t.&lt;&#x2F;p&gt;
&lt;p&gt;I do, however, want to point out to anyone who chances upon this entry that Christoph has had a series of complaints made against him for his TrackBack pings. All are dismayed to find his entries from which the TrackBack pings were sent are minimally related to their own entries. Therefore, I recommend those of you with blacklist software of some sort like &lt;a href=&quot;http:&#x2F;&#x2F;jayallen.org&#x2F;projects&#x2F;mt-blacklist&#x2F;&quot; title=&quot;Go to the MT-Blacklist project website&quot;&gt;MT-Blacklist&lt;&#x2F;a&gt; to put &quot;&lt;strong&gt;weblog.cemper.com&lt;&#x2F;strong&gt;&quot; into your blacklist to save yourselves future work in removing TrackBacks you most likely would rather not have.&lt;&#x2F;p&gt;
&lt;p&gt;At this point though, I&#x27;d like to make a disclaimer that this is solely &lt;em&gt;my&lt;&#x2F;em&gt; opinion and &lt;em&gt;my&lt;&#x2F;em&gt; own recommendation that you do so. You also shouldn&#x27;t just do what I say - if this issue concerns you at all, take it upon yourself to investigate the grounds for my recommendation. To that end, I have compiled a list of related weblog entries and links to start you off with at the bottom of this entry.&lt;&#x2F;p&gt;
&lt;p&gt;Christoph Cemper also addresses the complaints made in his &lt;a href=&quot;http:&#x2F;&#x2F;weblog.cemper.com&#x2F;a&#x2F;200312&#x2F;28-trackback-spam-complaints.php&quot; title=&quot;Christoph addesses TrackBack Spam complaints&quot;&gt;entry addressing TrackBack Spam complaints&lt;&#x2F;a&gt;. Another blogger, &lt;a href=&quot;http:&#x2F;&#x2F;www.confusedkid.com&#x2F;&quot; title=&quot;Go to Camilo&#x27;s weblog, Mecurial&quot;&gt;Camilo&lt;&#x2F;a&gt;, wrote a nicely composed argument on &lt;a href=&quot;http:&#x2F;&#x2F;www.confusedkid.com&#x2F;primer&#x2F;archives&#x2F;001590.html&quot; title=&quot;Camilo speaks on &amp;quot;Spam and censorship&amp;quot;&quot;&gt;Spam and censorship&lt;&#x2F;a&gt;. In his entry, he questions the use of a clearinghouse as a form of censorship. I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;29&#x2F;sending_trackback_pings_indiscriminately_makes_you_a_trackback_spammer.php#comment8&quot; title=&quot;Read my reply to his entry&quot;&gt;agree with him&lt;&#x2F;a&gt; and have made it clear that it wasn&#x27;t my intention to censor Cemper.&lt;&#x2F;p&gt;
&lt;p&gt;To Mr. Christoph Cemper: Don&#x27;t take this as a personal attack. I just don&#x27;t see your side of the argument and as far as I can tell you are still doing it and annoying other bloggers.&lt;&#x2F;p&gt;
&lt;p&gt;This is the list (so far) of bloggers I know who complained (and links to their corresponding entry, if any):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;weblog.cemper.com&#x2F;a&#x2F;200312&#x2F;28-trackback-spam-complaints.php&quot; title=&quot;Read the comments as Christoph addesses TrackBack Spam complaints&quot;&gt;Comments in Christoph Cemper&#x27;s entry addressing TrackBack Spam complaints&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ben.milleare.com&#x2F;archives&#x2F;000273.html&quot; title=&quot;Ben speaks on his encounter with TrackBack Spammers&quot;&gt;Ben&#x27;s Thought Crimes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.ensight.org&#x2F;archives&#x2F;2004&#x2F;01&#x2F;05&#x2F;what_the_hell_cempercom.html&quot; title=&quot;Jeremy asks of Cemper.com: &amp;quot;What The Hell&amp;quot;&quot;&gt;Jeremy Wright&#x27;s Ensight&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.edifyingspectacle.org&#x2F;pcstuff&#x2F;archives&#x2F;weblogging&#x2F;trackback_spam.php&quot; title=&quot;Read Richard&#x27;s entry entitled &amp;quot;Trackback spam&amp;quot;&quot;&gt; Richard Evans Lee&#x27;s Computer Toaster weblog&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.swagu.com&#x2F;archives&#x2F;000072.html&quot; title=&quot;David Clain askes whether TrackBack spamming could be next?&quot;&gt;David Clain&#x27;s Swagu&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.hebig.com&#x2F;archives&#x2F;001778.shtml&quot; title=&quot;Heiko muses over &amp;quot;TrackBack spam from cemper.com&amp;quot;&quot;&gt;Heiko Hebig&#x27;s weblog&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.scsy.de&#x2F;~mas&#x2F;archiv&#x2F;000155.html&quot; title=&quot;#!&#x2F;bin&#x2F;blog asks &amp;quot;WTF is Cemper?&amp;quot;&quot;&gt;#!&#x2F;bin&#x2F;blog&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>The monthly report - December 2003</title>
    <published>2004-01-02T02:13:17+00:00</published>
    <updated>2004-01-02T02:13:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/02/the-monthly-report-december-2003/"/>
    <id>https://chuyeow.wtf/2004/01/02/the-monthly-report-december-2003/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/02/the-monthly-report-december-2003/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot; title=&quot;redemption in a blog&quot;&gt;redemption in a blog&lt;&#x2F;a&gt; received 13,728 visits for the month of December 2003, meaning there were an average of 442 visits daily.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Most visited entries&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The recent &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;29&#x2F;sending_trackback_pings_indiscriminately_makes_you_a_trackback_spammer.php&quot; title=&quot;Read my entry entitled &amp;quot;Sending TrackBack pings indiscriminately makes you a TrackBack spammer&amp;quot;&quot;&gt;entry on TrackBack spam&lt;&#x2F;a&gt; that spurred a short burst of inter-blog discussion made it to &lt;a href=&quot;http:&#x2F;&#x2F;blogdex.net&#x2F;&quot; title=&quot;Blogdex aggregates the &amp;quot;most contagious information currently spreading in the weblog community&amp;quot;&quot;&gt;Blogdex&lt;&#x2F;a&gt;. The beginning of a wave of TrackBack abuse? &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;29&#x2F;sending_trackback_pings_indiscriminately_makes_you_a_trackback_spammer.php#comment7&quot; title=&quot;Read Joanne Jacobs comment&quot;&gt;Joanne Jacobs&lt;&#x2F;a&gt; and I seem to think so.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;04&#x2F;abyss_web_server_small_and_really_neat.php&quot; title=&quot;Read my entry on the Abyss web server&quot;&gt;Abyss Web Server - small and really neat&lt;&#x2F;a&gt; pointed out a small and amazingly easy to configure web server. It&#x27;s not Apache, but it works fine for local development alright!&lt;&#x2F;li&gt;
&lt;li&gt;My &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;thunderbird&#x2F;&quot; title=&quot;Go to the Mozilla Thunderbird product page&quot;&gt;Mozilla Thunderbird&lt;&#x2F;a&gt; 0.4 new feature summary - &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;07&#x2F;mozilla_thunderbird_04_new_features_upgrading_and_more.php&quot;&gt;Mozilla Thunderbird 0.4 - new features, upgrading, and more&lt;&#x2F;a&gt;. I love Mozilla Thunderbird! It&#x27;s not perfect, it&#x27;s not final (it&#x27;s still in what you would call beta stages), but it beats email clients I&#x27;ve used before (which include Outlook, Outlook Express and Incredimail).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Of note&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A new year, a new webhost - I&#x27;ve just changed my webhost to a dirt cheap webhosting plan at &lt;a href=&quot;http:&#x2F;&#x2F;pinchpenny.org&#x2F;&quot; title=&quot;Go to the PinchPenny webhosting company website&quot;&gt;PinchPenny&lt;&#x2F;a&gt;. Not that there was anything wrong with my last host, but PinchPenny had unlimited add-on domains that was just too good to miss, and there being end-year promotions (I get 10% off for as long as I&#x27;m a PinchPenny customer) as well. Besides, I was using almost my full bandwidth allocation (1,824,125KB - wait, Google can &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=1824125+KB+in+GB&quot; title=&quot;Let Google tell you how many GB 1,824,125KB is&quot;&gt;convert that to GB&lt;&#x2F;a&gt;... It&#x27;s 1.74GB) at my last host, who kindly sponsored my hosting. Just didn&#x27;t feel right.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;scripts&#x2F;blacklistupdater&#x2F;&quot; title=&quot;Go to the MT-Blacklist webpage&quot;&gt;MT-Blacklist Updater&lt;&#x2F;a&gt; is a simple PHP script I wrote to keep my MT-Blacklist setup updated automatically with any changes in the master blacklist at the &lt;a href=&quot;http:&#x2F;&#x2F;www.jayallen.org&#x2F;comment_spam&#x2F;&quot; title=&quot;Visit the Comment Spam Clearinghouse&quot;&gt;Comment Spam Clearinghouse&lt;&#x2F;a&gt;. What was interesting was I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;14&#x2F;mtblacklist_updater.php#comment3&quot; title=&quot;Jay Allen points out my act of extreme stupidity in his comment on my related entry on MT-Blacklist Updater&quot;&gt;screwed up&lt;&#x2F;a&gt; completely at my first try. Nevertheless, it works now, and feedback like &lt;a href=&quot;http:&#x2F;&#x2F;blog.iloaf.com&#x2F;archives&#x2F;000286.html&quot; title=&quot;Read Chris&#x27; blog entry on MT-Blacklist Updater&quot;&gt;this&lt;&#x2F;a&gt; makes me smile.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As always, thanks for reading, and a Happy New Year to one and all!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Past monthly reports&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;01&#x2F;the_monthly_report_november_2003.php&quot; title=&quot;Monthly report for November 2003&quot;&gt;November 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;03&#x2F;the_monthly_report_october_2003.php&quot; title=&quot;Monthly report for October 2003&quot;&gt;October 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;10&#x2F;01&#x2F;the_monthly_report_september_2003.php&quot; title=&quot;Monthly report for September 2003&quot;&gt;September 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;09&#x2F;01&#x2F;the_monthly_report_august_2003.php&quot; title=&quot;Monthly report for August 2003&quot;&gt;August 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;30&#x2F;the_monthly_report_july_2003.php&quot; title=&quot;Monthly report for July 2003&quot;&gt;July 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Changing webhosts - temporarily funky</title>
    <published>2004-01-01T12:59:51+00:00</published>
    <updated>2004-01-01T12:59:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2004/01/01/changing-webhosts-temporarily-funky/"/>
    <id>https://chuyeow.wtf/2004/01/01/changing-webhosts-temporarily-funky/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2004/01/01/changing-webhosts-temporarily-funky/">&lt;p&gt;I&#x27;m in the process of changing my webhost for this site so some things may seem funky at the moment.&lt;&#x2F;p&gt;
&lt;p&gt;In any case, a Happy New Year ahead to all!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Nice comment postbit from vantan.org</title>
    <published>2003-12-29T02:08:57+00:00</published>
    <updated>2003-12-29T02:08:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/29/nice-comment-postbit-from-vantanorg/"/>
    <id>https://chuyeow.wtf/2003/12/29/nice-comment-postbit-from-vantanorg/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/29/nice-comment-postbit-from-vantanorg/">&lt;p&gt;Fellow Singaporean Vanessa Tan has a nicely designed &lt;a href=&quot;http:&#x2F;&#x2F;vantan.org&#x2F;&quot; title=&quot;Read Vanessa Tan&#x27;s weblog, vantan.org&quot;&gt;weblog&lt;&#x2F;a&gt;, totally deserving of being nominated for &lt;a href=&quot;http:&#x2F;&#x2F;www.flyingchair.net&#x2F;vote.php?categoryID=13&quot; title=&quot;View the nominees for Best Designed Blog at the Asia Weblog Awards 2003&quot;&gt;Best Designed Blog&lt;&#x2F;a&gt; at the &lt;a href=&quot;http:&#x2F;&#x2F;www.flyingchair.net&#x2F;awards.php&quot; title=&quot;Go to the Asia Weblog Awards 2003 webpage&quot;&gt;Asia Weblog Awards 2003&lt;&#x2F;a&gt;. One of the nicest bits is the comment postbit (&quot;postbit&quot; as in &quot;forum postbit&quot; parlance) which I had oohed and aahed over for some time before deciding to copy it. Yup &lt;i&gt;copy&lt;&#x2F;i&gt; it I did, and left a comment for Vanessa to let her know I was using her idea. Of course I said that I would take it down if she didn&#x27;t like me stealing her idea.&lt;&#x2F;p&gt;
&lt;p&gt;Naturally, it was my bad for assuming that I could do something like this, because Vanessa actually had a &lt;a href=&quot;http:&#x2F;&#x2F;creativecommons.org&#x2F;licenses&#x2F;by-nd&#x2F;1.0&#x2F;&quot; title=&quot;Read the Creative Commons Attribution-NoDerivs 1.0 license&quot;&gt;no derivative works Creative Commons license&lt;&#x2F;a&gt; and I had not attributed her. I found out when she posted an &lt;a href=&quot;http:&#x2F;&#x2F;vantan.org&#x2F;archives&#x2F;2003&#x2F;12&#x2F;28_copyright_notice.php&quot; title=&quot;Vanessa speaks on her change in copyrights license&quot;&gt;entry on her copyright notice&lt;&#x2F;a&gt;, and have been trying to figure out how to attribute her in a way that is at once visible yet non-intrusive to readers. I think I have figured out a way by placing this bit of text in the comments section:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;The paper doll icon that precedes each comment is an idea conceived by &lt;a href=&quot;http:&#x2F;&#x2F;vantan.org&#x2F;&quot; title=&quot;Read Vanessa Tan&#x27;s weblog&quot;&gt;Vanessa Tan&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Want to see it? Post a (non-spam!) comment on this weblog.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Sending TrackBack pings indiscriminately makes you a TrackBack spammer</title>
    <published>2003-12-29T00:11:25+00:00</published>
    <updated>2003-12-29T00:11:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/29/sending-trackback-pings-indiscriminately-makes-you-a-trackback-spammer/"/>
    <id>https://chuyeow.wtf/2003/12/29/sending-trackback-pings-indiscriminately-makes-you-a-trackback-spammer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/29/sending-trackback-pings-indiscriminately-makes-you-a-trackback-spammer/">&lt;p&gt;Yesterday I received 2 TrackBack pings for my entries on &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;12&#x2F;mtblacklist_updater.php&quot; title=&quot;Read my entry on &amp;quot;MT-Blacklist Updater&amp;quot;&quot;&gt;MT-Blacklist Updater&lt;&#x2F;a&gt; and my &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;03&#x2F;the_monthly_report_october_2003.php&quot; title=&quot;Read the October 2003 monthly report for redemption in a blog&quot;&gt;October 2003 monthly report&lt;&#x2F;a&gt;. What is interesting about these TrackBack pings is that the entries they were sent from had almost nothing to do with what was discussed in &lt;em&gt;my&lt;&#x2F;em&gt; entries. I began to think that I have got my very first TrackBack spam. Am I really &lt;a href=&quot;http:&#x2F;&#x2F;www.geekblog.net&#x2F;kyrah&#x2F;005653.html&quot; title=&quot;Read Kyrah Jade&#x27;s blog entry that mentions my name in the same line Mark Pilgrim and Dave Shea - me famous? Maybe if aforementioned stick was extraordinarily long&quot;&gt;famous&lt;&#x2F;a&gt;? The answer to that question, of course, is an emphatic &lt;strong&gt;no&lt;&#x2F;strong&gt; (thanks for the compliments though, Kyrah).&lt;&#x2F;p&gt;
&lt;p&gt;Being curious and, as I&#x27;d like to think, benevolent, I decided to post a &lt;a href=&quot;http:&#x2F;&#x2F;weblog.cemper.com&#x2F;a&#x2F;200312&#x2F;27-technorati-plugin-rules-over-technoratis-watchlists.php#comments&quot; title=&quot;Read my comment (the 1st one)&quot;&gt;comment&lt;&#x2F;a&gt; on one of the suspect TrackBack-happy entries:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I&#x27;ve no idea why you sent a TrackBack ping to my weblog entry which has totally nothing to do with the things discussed here. I have deleted it.&lt;&#x2F;p&gt;
&lt;p&gt;I looked through your entries and noticed that you pinged other people too.&lt;&#x2F;p&gt;
&lt;p&gt;I hope you aren&#x27;t offended if I begin to think you are a Trackback spammer! Unless you have a good explanation, I will submit your Trackbacks as spam to Jay&#x27;s comment spam clearinghouse!&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;It was later that I found out that at least 2 other guys, &lt;a href=&quot;http:&#x2F;&#x2F;www.hebig.com&#x2F;archives&#x2F;001778.shtml&quot; title=&quot;Read Heiko Hebig&#x27;s entry that mostly just quotes my comment&quot;&gt;Heiko Hebig&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.scsy.de&#x2F;~mas&#x2F;archiv&#x2F;000155.html&quot; title=&quot;Read Martin&#x27;s entry on &amp;quot;WTF is Cemper?&amp;quot;&quot;&gt;Martin&lt;&#x2F;a&gt;, received the TrackBack pings of the same suspect nature as I did. Hmmm... it &lt;em&gt;seemed&lt;&#x2F;em&gt; that we may be onto a spammer here. But that would be jumping to conclusions a little too early. I have been going on without saying anything about the person or the weblog which sent the TrackBacks, but I have to make it clear here that it is my view that the mentioned person &lt;strong&gt;isn&#x27;t&lt;&#x2F;strong&gt; a TrackBack spammer, but rather a &lt;strong&gt;(very) misguided TrackBack-trigger-happy blogger&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;weblog.cemper.com&#x2F;&quot; title=&quot;Read Christoph Cemper&#x27;s weblog&quot;&gt;Christoph Cemper&lt;&#x2F;a&gt; has responded to our complaints with an entry entitled &lt;a href=&quot;http:&#x2F;&#x2F;weblog.cemper.com&#x2F;a&#x2F;200312&#x2F;28-trackback-spam-complaints.php&quot; title=&quot;Read Christoph Cemper&#x27;s response in his entry &amp;quot;TrackBack Spam complaints&amp;quot;&quot;&gt;TrackBack Spam complaints&lt;&#x2F;a&gt;. He says the purpose of sending TrackBack pings is to&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;notify others that you wrote about the same thing&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;and later goes on to say:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;to notify Person B was my intention.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Yes that is very much the reason for sending TrackBack pings, but I have to question how what Christoph wrote about can qualify as the &quot;same thing&quot; when they can hardly be qualified as vaguely related. Don&#x27;t think so? Check out my entries and the pings Christoph sent (see bottom of this entry). Ahem! Just because my entry mentions &quot;Google PageRank&quot; doesn&#x27;t mean that your entry on Google PageRank is a form of &quot;continuing the discussion&quot;, much less writing about the same thing. At least, that is how I interpret the way TrackBack should work.&lt;&#x2F;p&gt;
&lt;p&gt;As a last note, I leave it to readers to judge for themselves the relatedness of the entries from which TrackBack pings were sent to my entries. For my entry on &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;12&#x2F;mtblacklist_updater.php&quot; title=&quot;Read my entry on &amp;quot;MT-Blacklist Updater&amp;quot;&quot;&gt;MT-Blacklist Updater&lt;&#x2F;a&gt;, this is the &lt;a href=&quot;http:&#x2F;&#x2F;weblog.cemper.com&#x2F;a&#x2F;200312&#x2F;27-technorati-plugin-rules-over-technoratis-watchlists.php&quot;&gt;pinging entry&lt;&#x2F;a&gt;. For my &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;03&#x2F;the_monthly_report_october_2003.php&quot; title=&quot;Read the October 2003 monthly report for redemption in a blog&quot;&gt;October 2003 monthly report&lt;&#x2F;a&gt;, this is the &lt;a href=&quot;http:&#x2F;&#x2F;weblog.cemper.com&#x2F;a&#x2F;200312&#x2F;28-estimate-your-pagerank-without-the-google-toolbar.php&quot;&gt;pinging entry&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Use Bloglines subscribe to email mailing lists</title>
    <published>2003-12-23T17:57:42+00:00</published>
    <updated>2003-12-23T17:57:42+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/23/use-bloglines-subscribe-to-email-mailing-lists/"/>
    <id>https://chuyeow.wtf/2003/12/23/use-bloglines-subscribe-to-email-mailing-lists/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/23/use-bloglines-subscribe-to-email-mailing-lists/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;&quot; title=&quot;Visit Bloglines, a free online blog and newsfeed aggregator&quot;&gt;Bloglines&lt;&#x2F;a&gt; just pushed out a new feature they call email subscriptions. I&#x27;ve been using Bloglines as my weblog RSS feed and newsfeed aggregator for quite a while and always been pleased with the fast response times and easy-to-use interface. This new feature just about makes wanna be a Bloglines pimp.&lt;&#x2F;p&gt;
&lt;p&gt;So what the heck is this new feature email subscriptions? Let me quote Bloglines first:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Email subscriptions are great for announce-only or broadcast mailing lists that don&#x27;t provide RSS feeds. They are also useful as temporary email addresses.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;What Bloglines does is to setup an email account for you upon request (just click a link) and you can then use this email address to subscribe to your favorite mailing lists or newsletters (like the &lt;a href=&quot;http:&#x2F;&#x2F;newsletter.mozdev.org&#x2F;&quot; title=&quot;Visit and subscribe to the Mozilla Links newsletter&quot;&gt;Mozilla Links newsletter&lt;&#x2F;a&gt;). Any email you receive in that email account then appears in your &quot;My Blogs&quot; section just like any other newsfeed or blog RSS entries! How cool is that? Not cool enough for you Mr.&#x2F;Ms. Cynic? Think of this: you have a way of reading emails without an email client (whether web-based like Hotmail or application-based like Thunderbird or Outlook Express), &lt;strong&gt;AND&lt;&#x2F;strong&gt; a free &quot;junk&quot; email account just like those described &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;17&#x2F;email_addresses_for_dodgy_websitespeople.php&quot; title=&quot;Read my weblog entry on free online services that give you instant, disposable email addresses&quot;&gt;here&lt;&#x2F;a&gt; that you can use for any purposes. What&#x27;s more, there is a measure of permanence to these accounts since the email address is yours to keep until you choose to delete it. Even better, Bloglines will be adding the ability to reply to messages soon.&lt;&#x2F;p&gt;
&lt;p&gt;If you haven&#x27;t tried out &lt;a href=&quot;http:&#x2F;&#x2F;bloglines.com&#x2F;&quot; title=&quot;Visit Bloglines, a free online blog and newsfeed aggregator&quot;&gt;Bloglines&lt;&#x2F;a&gt; yet, give it a shot. You may just like it. Oh and Bloglines doesn&#x27;t pay me to do any pimping like this. I&#x27;m not even sure how they make money in the first place.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Movable Type 2.65 released, version 3.0 details dangled tantalizingly</title>
    <published>2003-12-22T21:39:35+00:00</published>
    <updated>2003-12-22T21:39:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/22/movable-type-265-released-version-30-details-dangled-tantalizingly/"/>
    <id>https://chuyeow.wtf/2003/12/22/movable-type-265-released-version-30-details-dangled-tantalizingly/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/22/movable-type-265-released-version-30-details-dangled-tantalizingly/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;movabletype.org&#x2F;&quot; title=&quot;Go to the Movable Type website&quot;&gt;Movable Type&lt;&#x2F;a&gt; 2.65 has just been released - mostly a bugfix release with a few added features. The &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;27&#x2F;movable_type_spam_vulnerability.php&quot; title=&quot;Read my entry on the relay vulnerability of mt-send-entry.cgi&quot;&gt;mt-send-entry.cgi fix&lt;&#x2F;a&gt; is included (it already was included in any MT 2.64 packages after the flaw was discovered and summarily fixed), of course. As is a security issue with the XML-RPC server, details of which are, I think, intentionally undisclosed to prevent exploitation in the interim. MT users are encouraged to either upgrade to 2.65 or grab the &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;downloads&#x2F;XMLRPCServer.zip&quot; title=&quot;Download the fixed version of XMLRPCServer.pm from Movable Type (zip format)&quot;&gt;fixed version of XMLRPCServer.pm&lt;&#x2F;a&gt; immediately.&lt;&#x2F;p&gt;
&lt;p&gt;Added features include an Atom syndication template and 2 template tags &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;docs&#x2F;mtmanual_tags.html#item_MTIfNonEmpty&quot; title=&quot;Read the &amp;lt;MTIfNonEmpty&amp;gt manual entry&quot;&gt;&amp;lt;MTIfNonEmpty&amp;gt; tag&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;docs&#x2F;mtmanual_tags.html#item_MTEntryModifiedDate&quot; title=&quot;Read the &amp;lt;$MTEntryModifiedDate$&amp;gt; manual entry&quot;&gt;&amp;lt;$MTEntryModifiedDate$&amp;gt; tag&lt;&#x2F;a&gt;. In particular the &amp;lt;MTIfNonEmpty&amp;gt tag frees you from having to install the &lt;a href=&quot;http:&#x2F;&#x2F;www.bradchoate.com&#x2F;past&#x2F;mtifempty.php&quot; title=&quot;Check out Brad Choate&#x27;s MTIfEmpty plugin&quot;&gt;MTIfEmpty plugin&lt;&#x2F;a&gt; to achieve a similar effect.&lt;&#x2F;p&gt;
&lt;p&gt;Details about Movable Type 3.0 were also &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;news&#x2F;2003_12.shtml#000878&quot; title=&quot;Read Movable Type&#x27;s news on MT 3.0&quot;&gt;released&lt;&#x2F;a&gt;, tantalizingly dangling nice new features in front of MT users&#x27; collective monitor-reflecting eyes&#x2F;glasses.&lt;&#x2F;p&gt;
&lt;p&gt;Support for the &lt;a href=&quot;http:&#x2F;&#x2F;www.intertwingly.net&#x2F;wiki&#x2F;pie&#x2F;FrontPage&quot; title=&quot;Visit the Atom wiki, where you can find the Atom API specification and more&quot;&gt;Atom API&lt;&#x2F;a&gt; is promised - yummy! Read &lt;a href=&quot;http:&#x2F;&#x2F;www.xml.com&#x2F;pub&#x2F;a&#x2F;2003&#x2F;10&#x2F;15&#x2F;dive.html&quot; title=&quot;Read Mark Pilgrim&#x27;s Atom API article on XML.com&quot;&gt;Mark Pilgrim&#x27;s article&lt;&#x2F;a&gt; on the Atom API if you&#x27;re clueless about it.&lt;&#x2F;p&gt;
&lt;p&gt;Comment registration will also be added in response to comment spammers. Nice, but I&#x27;m still thinking I&#x27;d rather not comment on someone else&#x27;s weblog if I had to register first - I&#x27;m doubtful it will be well-received, but I&#x27;d like to be surprised at what Six Apart can do. Surprise me, Six Apart, you hear? What I&#x27;d really like to see is something along the lines of Jay Allen&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;jayallen.org&#x2F;projects&#x2F;mt-blacklist&#x2F;&quot; title=&quot;Go to the MT-Blacklist project site&quot;&gt;MT-Blacklist&lt;&#x2F;a&gt; incorporated into MT. It is by far the most indispensable MT plugin I&#x27;ve ever used.&lt;&#x2F;p&gt;
&lt;p&gt;It also seems that moblogging will also make an appearance, judging from this bit in Movable Type&#x27;s news article:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Additionally, for those interested in posting from mobile devices, we expect this to be a welcome release.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;The rest of the announced features seem pretty mundane. I&#x27;m pretty sure the developers are hiding the good stuff from us.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Ungreeking, a color wheel, and GIFs</title>
    <published>2003-12-21T22:34:21+00:00</published>
    <updated>2003-12-21T22:34:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/21/ungreeking-a-color-wheel-and-gifs/"/>
    <id>https://chuyeow.wtf/2003/12/21/ungreeking-a-color-wheel-and-gifs/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/21/ungreeking-a-color-wheel-and-gifs/">&lt;p&gt;Some things that could prove useful to myself in future:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ungreek.toolbot.com&#x2F;&quot; title=&quot;Check out ungreek at its website&quot;&gt;ungreek&lt;&#x2F;a&gt; is what you could call a &lt;em&gt;lorem ipsum&lt;&#x2F;em&gt; generator - it generates placeholder text from a variety of sources including the Old Testament, the US constitution and even the &lt;a href=&quot;http:&#x2F;&#x2F;www.zvon.org&#x2F;tmRFC&#x2F;RFC1630&#x2F;Output&#x2F;index.html&quot; title=&quot;Read the Internet RFC 1630&quot;&gt;Internet RFC 1630&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.ficml.org&#x2F;jemimap&#x2F;style&#x2F;color&#x2F;wheel.html&quot; title=&quot;Try out the 4096 Color Wheel&quot;&gt;4096 Color Wheel&lt;&#x2F;a&gt; is a color wheel written in JavaScript. Nice to have an instant swatch at the side.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.uncommoncontent.org&#x2F;p2p&#x2F;index.php&quot; title=&quot;Go to the Pixel2Pixel website&quot;&gt;Pixel2Pixel&lt;&#x2F;a&gt; is a PHP script that allows you to change any color in your GIF images on the fly. Just upload your image and choose what colors you want changed.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Easy .htaccess</title>
    <published>2003-12-18T23:21:45+00:00</published>
    <updated>2003-12-18T23:21:45+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/18/easy-htaccess/"/>
    <id>https://chuyeow.wtf/2003/12/18/easy-htaccess/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/18/easy-htaccess/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.bitesizeinc.net&#x2F;index.php&#x2F;htaccesser.html&quot; title=&quot;Try out Dot HtAccesser&quot;&gt;Dot HtAccesser&lt;&#x2F;a&gt; is a web-based tool that generates .htaccess files for you via a simple form. Writing the right .htaccess file isn&#x27;t exactly rocket science, but we are fortunately spared reading up when in doubt, especially when the official Apache &lt;a href=&quot;http:&#x2F;&#x2F;httpd.apache.org&#x2F;docs&#x2F;howto&#x2F;htaccess.html&quot; title=&quot;Read the offical Apache .htacess tutorial&quot;&gt;.htaccess tutorial&lt;&#x2F;a&gt; is so sparse.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Email addresses for dodgy websites&#x2F;people</title>
    <published>2003-12-17T12:48:43+00:00</published>
    <updated>2003-12-17T12:48:43+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/17/email-addresses-for-dodgy-websitespeople/"/>
    <id>https://chuyeow.wtf/2003/12/17/email-addresses-for-dodgy-websitespeople/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/17/email-addresses-for-dodgy-websitespeople/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.killmail.net&#x2F;&quot; title=&quot;Visit killMAIL for disposable email addresses&quot;&gt;killMAIL&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.mailinator.com&#x2F;mailinator&#x2F;Welcome.do&quot; title=&quot;&quot;&gt;Mailinator&lt;&#x2F;a&gt; are 2 of, I think, many free online services that give you an instant, disposable email address. Great for use on websites which want your email address for apparently no reason other than to send you product updates, offers and other emails that you never want. Or you may be worried they will sell your email addresses to spammers. Or maybe there&#x27;s that insurance agent who has been bugging you for your email address so that he can send you &quot;more info&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Whatever your purposes and needs, I&#x27;m sure you&#x27;ll find services like this useful from time to time.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Shooting around corners</title>
    <published>2003-12-17T11:59:05+00:00</published>
    <updated>2003-12-17T11:59:05+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/17/shooting-around-corners/"/>
    <id>https://chuyeow.wtf/2003/12/17/shooting-around-corners/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/17/shooting-around-corners/">&lt;p&gt;A cool weapon from the Israelis - the Corner Shot:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:160px&quot;&gt;&lt;img alt=&quot;Corner Shot picture&quot; src=&quot;&#x2F;assets&#x2F;cornershot.jpg&quot; width=&quot;150&quot; height=&quot;118&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Good for anti-terror and &lt;acronym title=&quot;Special Weapons And Tactics&quot;&gt;SWAT&lt;&#x2F;acronym&gt; teams, but I dread the day it gets into the hands of an overzealous sniper (remember Maryland?).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.army-technology.com&#x2F;contractors&#x2F;machine_guns&#x2F;corner_shot&#x2F;&quot; title=&quot;Read more about the Corner Shot at the Army Technology website&quot;&gt;Read more about it.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MT-Blacklist Updater</title>
    <published>2003-12-14T08:00:00+00:00</published>
    <updated>2003-12-14T08:00:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/14/mt-blacklist-updater/"/>
    <id>https://chuyeow.wtf/2003/12/14/mt-blacklist-updater/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/14/mt-blacklist-updater/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;scripts&#x2F;blacklistupdater&#x2F;&quot;&gt;MT-Blacklist Updater&lt;&#x2F;a&gt; is back up and works, this time. I&#x27;m still in need of testers so do try it out and let me know of any bugs you may find. Thanks!&lt;&#x2F;p&gt;
&lt;p&gt;Comments, suggestions, bug reports are highly appreciated.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;del&gt;I used to use a very simple PHP &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;scripts&#x2F;blacklistupdater&#x2F;getblacklist-old.phps&quot; title=&quot;View the source of this script&quot;&gt;script&lt;&#x2F;a&gt; which simply grabs the latest master blacklist and overwrites the local copy on my server. I didn’t think too much of having any entries I’d made myself being overwritten then. Now I do, after I received quite some spam that wasn’t caught by &lt;a href=&quot;http:&#x2F;&#x2F;www.jayallen.org&#x2F;projects&#x2F;mt-blacklist&#x2F;&quot; title=&quot;Visit the MT-Blacklist website - MT-Blacklist is a Movable Type plugin to eradicate&lt;br &#x2F;&gt;
comment and trackback spam&quot;&gt;MT-Blacklist&lt;&#x2F;a&gt;, and decided to rewrite it so that it uses the &lt;a href=&quot;http:&#x2F;&#x2F;www.jayallen.org&#x2F;comment_spam&#x2F;feeds&#x2F;blacklist-changes.rdf&quot; title=&quot;MT-Blacklist blacklist changes RSS 1.0 feed&quot;&gt;blacklist changes RSS feed&lt;&#x2F;a&gt; to update my &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;blacklist.txt&quot; title=&quot;My local blacklist file&quot;&gt;local blacklist&lt;&#x2F;a&gt; non-destructively.&lt;&#x2F;p&gt;
&lt;p&gt;The results of a few hours work (mostly spent writing documentation!): &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;scripts&#x2F;blacklistupdater&#x2F;&quot; title=&quot;Check out MT-Blacklist Updater&quot;&gt;MT-Blacklist Updater&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Didn&#x27;t work! See &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;12&#x2F;mtblacklist_updater.php#comment3&quot;&gt;this&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;12&#x2F;12&#x2F;mtblacklist_updater.php#comment5&quot;&gt;this&lt;&#x2F;a&gt;.&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google can track your FedEx delivery</title>
    <published>2003-12-14T02:47:55+00:00</published>
    <updated>2003-12-14T02:47:55+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/14/google-can-track-your-fedex-delivery/"/>
    <id>https://chuyeow.wtf/2003/12/14/google-can-track-your-fedex-delivery/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/14/google-can-track-your-fedex-delivery/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;help&#x2F;features.html#number&quot; title=&quot;Google explains the &amp;quot;Search By Number&amp;quot; feature&quot;&gt;Search By Number&lt;&#x2F;a&gt; is a new Google feature that allows you quick access to your UPS or FedEx delivery information, and easy access to patent, &lt;acronym title=&quot;Federal Aviation Administration&quot;&gt;FAA&lt;&#x2F;acronym&gt; and &lt;acronym title=&quot;Federal Communications Commission&quot;&gt;FCC&lt;&#x2F;acronym&gt; numbers&#x2F;IDs.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New IE vulnerability - fake URLs</title>
    <published>2003-12-10T23:00:15+00:00</published>
    <updated>2003-12-10T23:00:15+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/10/new-ie-vulnerability-fake-urls/"/>
    <id>https://chuyeow.wtf/2003/12/10/new-ie-vulnerability-fake-urls/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/10/new-ie-vulnerability-fake-urls/">&lt;p&gt;IE has a new security flaw which will be a major boon to spammers and frauds. This flaw allows spoofing of URLs via the http:&#x2F;&#x2F;user@domain nomenclature. For example, a fraudulent spammer could well direct victims to &lt;a href=&quot;http:&#x2F;&#x2F;www.paypal.com&amp;sessionid%123456789%01@chuyeow.wtf&quot;&gt;http:&#x2F;&#x2F;wwww.paypal.com&amp;sessionid%123123123&amp;@chuyeow.wtf&lt;&#x2F;a&gt;, but have it show up as http:&#x2F;&#x2F;www.paypal.com&amp;sessionid%123456789 (of course, the fraudulent webpage has to be convincing enough to fool victims into believing they are actually at PayPal!). This works because by including a 0x01 character after the &quot;@&quot; character, IE hides the real location of the page!&lt;&#x2F;p&gt;
&lt;p&gt;To see it in action, fire up IE and check out this &lt;a href=&quot;http:&#x2F;&#x2F;www.zapthedingbat.com&#x2F;security&#x2F;ex01&#x2F;vun1.htm&quot; title=&quot;Visit this webpage to see this IE vulnerability in action&quot;&gt;demonstration&lt;&#x2F;a&gt;. &lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;archive&#x2F;2003&#x2F;12&#x2F;09&#x2F;nastyBug&quot; title=&quot;Read Simon Willison&#x27;s entry on this IE vulnerability&quot;&gt;Simon Willison&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Easy charity with Buck-a-Hit</title>
    <published>2003-12-10T01:25:16+00:00</published>
    <updated>2003-12-10T01:25:16+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/10/easy-charity-with-buck-a-hit/"/>
    <id>https://chuyeow.wtf/2003/12/10/easy-charity-with-buck-a-hit/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/10/easy-charity-with-buck-a-hit/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;bojack.org&#x2F;&quot; title=&quot;Visit Jack Bog&#x27;s blog&quot;&gt;Jack Bog&lt;&#x2F;a&gt; and his wife are giving USD1 for each hit they receive today (Wednesday, December 10, 2003) from 12:01 a.m. to 11:59 p.m. &lt;acronym title=&quot;Pacific Standard Time&quot;&gt;PST&lt;&#x2F;acronym&gt; (GMT-0800) to charity.&lt;&#x2F;p&gt;
&lt;p&gt;Want to feel charitable without any hard commitments? Visit his &lt;a href=&quot;http:&#x2F;&#x2F;bojack.org&#x2F;&quot; title=&quot;Visit Jack Bog&#x27;s blog&quot;&gt;blog&lt;&#x2F;a&gt; once or twice today Or 24 times. Quoting Jack:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;If you go away and come back more than an hour later, however, that will count as two hits.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Well, seems like a good way to promote your site too - of course I do not doubt the altruistic motives behind Jack&#x27;s move.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Using a web browser with a phone dial</title>
    <published>2003-12-09T02:22:21+00:00</published>
    <updated>2003-12-09T02:22:21+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/09/using-a-web-browser-with-a-phone-dial/"/>
    <id>https://chuyeow.wtf/2003/12/09/using-a-web-browser-with-a-phone-dial/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/09/using-a-web-browser-with-a-phone-dial/">&lt;p&gt;Seems &lt;a href=&quot;http:&#x2F;&#x2F;david-lu.net&#x2F;&quot; title=&quot;Visit David Lu&#x27;s personal website&quot;&gt;David Lu&lt;&#x2F;a&gt; does some interesting work, like this &lt;a href=&quot;http:&#x2F;&#x2F;david-lu.net&#x2F;v4&#x2F;work&#x2F;phonedial&#x2F;&quot; title=&quot;Check out David Lu&#x27;s Phone Dial Web Browser&quot;&gt;Phone Dial Web Browser&lt;&#x2F;a&gt; for instance. Ouch! Rotary dial? IP address only? &lt;em&gt;Meh!&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This electronic etch-a-sketch simply named &lt;a href=&quot;http:&#x2F;&#x2F;david-lu.net&#x2F;v4&#x2F;work&#x2F;etch&#x2F;&quot; title=&quot;Check out Etch&quot;&gt;Etch&lt;&#x2F;a&gt; is another (apparently) frivolous project.&lt;&#x2F;p&gt;
&lt;p&gt;On the other hand, &lt;a href=&quot;http:&#x2F;&#x2F;david-lu.net&#x2F;v4&#x2F;work&#x2F;3dxml&#x2F;&quot; title=&quot;Check out the 3D XML Viewer&quot;&gt;3D XML Viewer&lt;&#x2F;a&gt; (requires Flash Player) is an amazing 3D, graph-based visual representation of XML documents. Reminds me of &lt;a href=&quot;http:&#x2F;&#x2F;www.thebrain.com&#x2F;Default.htm&quot; title=&quot;Check out TheBrain&quot;&gt;TheBrain&lt;&#x2F;a&gt;. Now this is something useful.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Just Say No to Microsoft</title>
    <published>2003-12-09T01:55:19+00:00</published>
    <updated>2003-12-09T01:55:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/09/just-say-no-to-microsoft/"/>
    <id>https://chuyeow.wtf/2003/12/09/just-say-no-to-microsoft/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/09/just-say-no-to-microsoft/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;microsoft.toddverbeek.com&#x2F;&quot; title=&quot;Visit the &amp;quot;Just Say No to Microsoft&amp;quot; website&quot;&gt;Just Say No to Microsoft&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Not pretty, a little biased. But &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot; title=&quot;Visit the Mozilla Firebird website - the best web browser, bar none&quot;&gt;great&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot; title=&quot;Visit the Mozilla Thunderbird website - an alternative, Open Source email client that rocks your socks&quot;&gt;alternatives&lt;&#x2F;a&gt; are listed.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>A good Mozilla Firebird nightly build</title>
    <published>2003-12-09T00:07:24+00:00</published>
    <updated>2003-12-09T00:07:24+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/09/a-good-mozilla-firebird-nightly-build/"/>
    <id>https://chuyeow.wtf/2003/12/09/a-good-mozilla-firebird-nightly-build/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/09/a-good-mozilla-firebird-nightly-build/">&lt;p&gt;Finally a &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;mozilla.org&#x2F;firebird&#x2F;nightly&#x2F;2003-12-07-06-trunk&#x2F;&quot; title=&quot;Get the 2003-12-07 Mozilla Firebird nightly for your preferred Operating System&quot;&gt;Mozilla Firebird nightly (2003-12-07)&lt;&#x2F;a&gt; with most severe regressions fixed (severity as determined by &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;&quot; title=&quot;Visit Jesse Ruderman&#x27;s weblog&quot;&gt;Jesse Ruderman&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Builds since 2003-11-21 do not work with &lt;a href=&quot;http:&#x2F;&#x2F;white.sakura.ne.jp&#x2F;~piro&#x2F;xul&#x2F;_tabextensions.html.en&quot; title=&quot;Go to the Tabbrowser Extensions website&quot;&gt;Tabbrowser Extensions&lt;&#x2F;a&gt; (the fault is with &lt;acronym title=&quot;Tabbrowser Extensions&quot;&gt;TBE&lt;&#x2F;acronym&gt;, not Firebird), so I&#x27;d given up on nightlies since. But this major regression-free build had me coming back and searching for a fix to this incompatibility. And guess what? There is a fix, provided kindly by &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;profile.php?mode=viewprofile&amp;u=2498&quot; title=&quot;View me4get&#x27;s profile at Mozillazine forums&quot;&gt;me4get&lt;&#x2F;a&gt; at the &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;&quot; title=&quot;Visit Mozillazine forums&quot;&gt;Mozillazine forums&lt;&#x2F;a&gt;. The related thread is entitled &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=36362&quot; title=&quot;Read the forum thread with the fixed Tabbrowser Extensions&quot;&gt;Updated TBE for Mozilla&#x2F;5.0 (Gecko&#x2F;20031121)&lt;&#x2F;a&gt; and you can install the updated TBE by clicking &lt;a href=&quot;http:&#x2F;&#x2F;extensionroom.mozdev.org&#x2F;install.php&#x2F;http:&#x2F;&#x2F;www.evertek.net&#x2F;ynokew&#x2F;tabextensions_en.xpi&quot; title=&quot;Click to install the updated Tabbrowser Extensions that works with nightlies since 2003-11-21&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m using &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=39078&quot; title=&quot;Read the forum thread for scragz&#x27;s optimized Firebird builds&quot;&gt;scragz&#x27;s optimized builds&lt;&#x2F;a&gt; - fast and works great!&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;archives&#x2F;000194.html&quot; title=&quot;Read the entry on The Burning Edge, which keeps track of Firebird nightly builds&quot;&gt;The Burning Edge&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Spam Wait for Movable Type - Humans wait, bots don&#x27;t</title>
    <published>2003-12-08T23:47:59+00:00</published>
    <updated>2003-12-08T23:47:59+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/08/spam-wait-for-movable-type-humans-wait-bots-dont/"/>
    <id>https://chuyeow.wtf/2003/12/08/spam-wait-for-movable-type-humans-wait-bots-dont/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/08/spam-wait-for-movable-type-humans-wait-bots-dont/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.johnwehr.com&#x2F;spamwait&#x2F;&quot; title=&quot;Go to the Spam Wait webpage&quot;&gt;Spam Wait&lt;&#x2F;a&gt; is a &lt;a href=&quot;http:&#x2F;&#x2F;movabletype.org&#x2F;&quot; title=&quot;Visit the Movable Type website - Movable Type is the personal publishing system that powers this blog&quot;&gt;Movable Type&lt;&#x2F;a&gt; hack cum plugin that forces your visitors to wait for a set period of time before being allowed to post comments. A decidedly smart move to avoid comment spamming by spam bots. The idea behind it? Human users would spend some time to read your entries&#x2F;articles first. Spam bots wouldn&#x27;t.&lt;&#x2F;p&gt;
&lt;p&gt;I won&#x27;t install this, yet, but it is a smart idea. &lt;a href=&quot;http:&#x2F;&#x2F;www.jayallen.org&#x2F;projects&#x2F;mt-blacklist&quot; title=&quot;Go to the MT-Blacklist website&quot;&gt;MT-Blacklist&lt;&#x2F;a&gt; has been very good at blocking comment spammers and only 2 have filtered past it since I&#x27;ve installed it. Besides, judging from the behavior of past comment spammer activity, the majority of spammers at this site are human spammers, not bots. And now that my PageRank has dropped from 6 to 5, I&#x27;m pretty sure I&#x27;d see a sudden drop in comment spam activity here. Sort of a mixed blessing, that.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Thunderbird 0.4 - new features, upgrading, and more</title>
    <published>2003-12-07T17:24:49+00:00</published>
    <updated>2003-12-07T17:24:49+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/07/mozilla-thunderbird-04-new-features-upgrading-and-more/"/>
    <id>https://chuyeow.wtf/2003/12/07/mozilla-thunderbird-04-new-features-upgrading-and-more/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/07/mozilla-thunderbird-04-new-features-upgrading-and-more/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot; title=&quot;Visit the Mozilla Thunderbird product page&quot;&gt;Mozilla Thunderbird 0.4&lt;&#x2F;a&gt; was released yesterday in quick succession to the two 0.4 release candidates. It&#x27;s all good, and worthy of a point release. If the servers are too slow for you, you may want to try the &lt;a href=&quot;http:&#x2F;&#x2F;www.metashops.co.uk&#x2F;mozilla&#x2F;download.php&#x2F;71&#x2F;thunderbird-0.4-win32.zip.torrent&quot; title=&quot;Download the torrent file for Thunderbird 0.4 (Win32)&quot;&gt;Thunderbird 0.4 (Win32) torrent&lt;&#x2F;a&gt;, or the &lt;a href=&quot;http:&#x2F;&#x2F;www.metashops.co.uk&#x2F;mozilla&#x2F;download.php&#x2F;72&#x2F;thunderbird-0.4-i686-pc-linux-gtk2-gnu.tar.bz2.torrent&quot; title=&quot;Download the torrent file for Thunderbird 0.4 (Linux)&quot;&gt;Thunderbird 0.4 (Linux) torrent&lt;&#x2F;a&gt;.&lt;br &#x2F;&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;strong&gt;New look for the default theme&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The default theme has a new, improved look. Two thumbs up on the move to make Thunderbird look prettier, because aesthetics really &lt;em&gt;do&lt;&#x2F;em&gt; matter. The very idea of themes in the first place centres around the very need of end users to personalize their applications, or to by association, appear to be as cool as how their applications look.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:358px&quot;&gt;&lt;img alt=&quot;Screenshot of the new Thunderbird theme&quot; src=&quot;&#x2F;assets&#x2F;new-theme.png&quot; width=&quot;348&quot; height=&quot;316&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;The new icons are functional and easily understandable. In particular, unread, replied, and forwarded emails are indicated with different icons on the message envelope icon, something that was missing before.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Mark messages read after x seconds option&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s a new option to prevent messages from being marked as &#x27;read&#x27; immediately after it is previewed. This was sorely missing before, and annoyed the hell out of me. What I did then was to re-mark it as &#x27;unread&#x27;, but that was hardly satisfactory.&lt;&#x2F;p&gt;
&lt;p&gt;You can set this option by going to Tools -&gt; Options -&gt; Advanced -&gt; General Settings.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:425px&quot;&gt;&lt;img alt=&quot;Screenshot of the &amp;quot;Mark message read&amp;quot; option&quot; src=&quot;&#x2F;assets&#x2F;mark-msg-read-opt.png&quot; width=&quot;415&quot; height=&quot;427&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;strong&gt;Mark button&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Also related to the last feature is the debut of the new Mark button that you can add to the toolbar. Nothing amazing, but another feature that would be appreciated by converting users of other email clients like Outlook Express, where marking messages read or unread appears as a toolbar button. To add the new Mark button, right-click anywhere on the toolbar and click Customize. Simply drag and drop the Mark icon to where you want it to appear.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:399px&quot;&gt;&lt;img alt=&quot;Screenshot of the new Mark button&quot; src=&quot;&#x2F;assets&#x2F;mark-button.png&quot; width=&quot;389&quot; height=&quot;480&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;strong&gt;Improved new message alert&lt;&#x2F;strong&gt; (Windows only)&lt;&#x2F;p&gt;
&lt;p&gt;Windows users have a more sensible new message alert which displays the full account name instead of the username. Why sensible? Because most users are going to have multiple email accounts, and more likely than not more than 1 of them would have the same username. I for one have 2 accounts with the same username &#x27;redemption&#x27;. Telling me that &#x27;redemption has 4 new messages&#x27; doesn&#x27;t really help.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:220px&quot;&gt;&lt;img alt=&quot;Screenshot of the new message alert popup&quot; src=&quot;&#x2F;assets&#x2F;new-msg-notifier.png&quot; width=&quot;210&quot; height=&quot;96&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;The response of the alert notification has also been improved - in the 0.3 release, my experience was that the alert appears after a significant delay, despite the messages already in my inbox for a few minutes. I don&#x27;t like going to my inbox to see no new messages when I was promised some.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Copy-and-paste images functionality for Windows users&lt;&#x2F;strong&gt; (Windows only)&lt;&#x2F;p&gt;
&lt;p&gt;Windows users have it good here again: the Windows version allows images to be copied and pasted directly into the mail composer (HTML mode only). Very useful for sending screenshots or those funny&#x2F;cute&#x2F;gross image attachments to friends and colleagues.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:429px&quot;&gt;&lt;img alt=&quot;Screenshot of a email message with a pasted image&quot; src=&quot;&#x2F;assets&#x2F;paste-images.jpg&quot; width=&quot;419&quot; height=&quot;559&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Such OS-specific functionality is good, because it develops a comfortable feel for the application. Windows users are spoilt with copy-n-paste everywhere (think Microsoft Office, Outlook) - having this in Thunderbird puts these users in a comfort zone with an application. This is probably why many users don&#x27;t take to Java graphical applications which don&#x27;t allow copy-n-paste, and have an uncomfortable, distinct look from what they have come to expect. (Note: copy-n-paste &lt;em&gt;is&lt;&#x2F;em&gt; possible in Java applications, and JDK 1.4.2 introduced the Windows XP Look and Feel)&lt;&#x2F;p&gt;
&lt;p&gt;That covers most of the new features in Mozilla Thunderbird 0.4. I left out the new Palm Sync Address book conduit extension because I don&#x27;t have a Palm, and that POP Accounts now support aging on the server because I only have IMAP accounts at the moment.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Fixing problems in your upgrade&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you are having problems with your upgrade, it is probably due to a faulty extension or theme. One problem I encountered was with the &lt;a href=&quot;http:&#x2F;&#x2F;texturizer.net&#x2F;thunderbird&#x2F;themes.html#Smoke&quot; title=&quot;Smoke theme at Mozilla Thunderbird Help&quot;&gt;Smoke theme&lt;&#x2F;a&gt;. Read more about this &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=37965&quot; title=&quot;Read more about the bug with the Smoke theme in this forum thread&lt;br &#x2F;&gt;
&quot;&gt;bug&lt;&#x2F;a&gt; at the Mozillazine forums. What you can do is to use &lt;a href=&quot;http:&#x2F;&#x2F;backup.jasnapaka.com&#x2F;&quot; title=&quot;Visit the website for Mozilla Backup&quot;&gt;Mozilla Backup&lt;&#x2F;a&gt; to backup your profile, create a new one, and restore that backed up profile into the new one. The official word, though, is this:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Find your profile directory. There should be a sub directory called chrome. Remove everything in chrome. This will not affect your mail data or preferences. You will then need to re-install the 0.4 compatible version of any themes&#x2F;extensions you want.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Mozilla Thunderbird Features Summary&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;David Tenser (of &lt;a href=&quot;http:&#x2F;&#x2F;texturizer.net&#x2F;firebird&#x2F;&quot; title=&quot;Go to the Firebird Help website&quot;&gt;Firebird Help&lt;&#x2F;a&gt;. fame) has written a &lt;a href=&quot;http:&#x2F;&#x2F;texturizer.net&#x2F;thunderbird&#x2F;features.html&quot; title=&quot;Read David Tenser&#x27;s article on Mozilla Thunderbird features&quot;&gt;Mozilla Thunderbird Features Summary&lt;&#x2F;a&gt;, for which he is requesting feedback (leave a comment on the &lt;a href=&quot;http:&#x2F;&#x2F;mozillazine.org&#x2F;talkback.html?article=4057&quot; title=&quot;TalkBack page for Mozilla Thunderbird Features Summary article at Mozillazine&quot;&gt;TalkBack page&lt;&#x2F;a&gt; at Mozillazine).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Abyss Web Server -  small and really neat</title>
    <published>2003-12-04T23:22:27+00:00</published>
    <updated>2003-12-04T23:22:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/04/abyss-web-server-small-and-really-neat/"/>
    <id>https://chuyeow.wtf/2003/12/04/abyss-web-server-small-and-really-neat/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/04/abyss-web-server-small-and-really-neat/">&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;www.aprelium.com&#x2F;abyssws&#x2F;&quot; title=&quot;Visit the product homepage for the Abyss Web Server&quot;&gt;Abyss Web Server&lt;&#x2F;a&gt; from &lt;a href=&quot;http:&#x2F;&#x2F;www.aprelium.com&#x2F;&quot; title=&quot;Go to the Aprelium Technologies website&quot;&gt;Aprelium Technologies&lt;&#x2F;a&gt; is one of the neatest, tiniest web server I&#x27;ve come across. It&#x27;s only 144 &lt;acronym title=&quot;KiloByte&quot;&gt;KB&lt;&#x2F;acronym&gt; for the Windows version and the Mac, Linux and FreeBSD versions are around that size as well. It&#x27;s also free. What&#x27;s more, adding PHP support is quick and painless. Just follow the &lt;a href=&quot;http:&#x2F;&#x2F;www.aprelium.com&#x2F;abyssws&#x2F;php.html&quot; title=&quot;Read the instructions for adding PHP support for Abyss Web Server&quot;&gt;instructions for adding PHP support&lt;&#x2F;a&gt;. I did all of it under 5 minutes (like Phil - see the &lt;a href=&quot;http:&#x2F;&#x2F;pipthepixie.tripod.com&#x2F;blog&#x2F;archive&#x2F;2003_12_01_blog.html#107048713414410937&quot; title=&quot;Read Phil Wilson&#x27;s entry on Abyss Web Server&quot;&gt;source&lt;&#x2F;a&gt; for this entry).&lt;&#x2F;p&gt;
&lt;p&gt;Adding &lt;a href=&quot;http:&#x2F;&#x2F;www.aprelium.com&#x2F;abyssws&#x2F;asp.html&quot; title=&quot;Read the instructions for adding ASP support for Abyss Web Server&quot;&gt;ASP support&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.aprelium.com&#x2F;abyssws&#x2F;perl.html&quot; title=&quot;Read the instructions for adding Perl support for Abyss Web Server&quot;&gt;Perl support&lt;&#x2F;a&gt; appear to be a snap too from a cursory glance.&lt;&#x2F;p&gt;
&lt;p&gt;Why is this cool? Because it is very useful as an easy-to-setup test platform for server-side scripts like PHP, ASP and Perl scripts. Being flyweight helps too, since there are no long download times for those still using dialup modems. Everything is run via CGI - there are no modules, unlike for &lt;a href=&quot;http:&#x2F;&#x2F;httpd.apache.org&#x2F;&quot; title=&quot;Go to the website for the Apache httpd server&quot;&gt;Apache&lt;&#x2F;a&gt;. There is a single config file, &lt;span class=&quot;monospaced&quot;&gt;abyss.conf&lt;&#x2F;span&gt;, which contains Apache configuration-like directives. The good thing is, there&#x27;s no need to go into the file to make changes - the web-based configuration interface provided by Abyss allows a simple click-and-point interface which is a breeze to use.&lt;&#x2F;p&gt;
&lt;p&gt;What a boon to beginners (&lt;acronym title=&quot;also known as&quot;&gt;AKA&lt;&#x2F;acronym&gt; newbies) who often have trouble setting up Apache with PHP support. I&#x27;m going to recommend this as an alternative to Apache for anyone with difficulties setting that up in the future.&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;pipthepixie.tripod.com&#x2F;blog&#x2F;archive&#x2F;2003_12_01_blog.html#107048713414410937&quot; title=&quot;Read Phil Wilson&#x27;s entry on Abyss Web Server, which is the source for this entry&quot;&gt;Phil Wilson&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Your site in Konqueror, too!</title>
    <published>2003-12-04T21:44:09+00:00</published>
    <updated>2003-12-04T21:44:09+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/04/your-site-in-konqueror-too/"/>
    <id>https://chuyeow.wtf/2003/12/04/your-site-in-konqueror-too/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/04/your-site-in-konqueror-too/">&lt;p&gt;Remember &lt;a href=&quot;http:&#x2F;&#x2F;www.danvine.com&#x2F;capture&#x2F;&quot; title=&quot;Go see how your website looks in the Safari web browser&quot;&gt;iCapture&lt;&#x2F;a&gt;? In case you don&#x27;t, read &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;29&#x2F;you_dont_need_a_mac_to_see_your_webpage_in_safari.php&quot; title=&quot;Read my entry on iCapture&quot;&gt;this&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Now it seems there&#x27;s also another neat little free service called &lt;a href=&quot;http:&#x2F;&#x2F;kcapture.eadz.co.nz&#x2F;&quot; title=&quot;Go check out how your website looks in Konqueror&quot;&gt;Kcapture&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And I just noticed that IE isn&#x27;t the only browser that doesn&#x27;t listen to you when you tell it you want a dotted border (and NOT a dashed border you stupid piece of crap).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The monthly report - November 2003</title>
    <published>2003-12-01T21:05:18+00:00</published>
    <updated>2003-12-01T21:05:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/01/the-monthly-report-november-2003/"/>
    <id>https://chuyeow.wtf/2003/12/01/the-monthly-report-november-2003/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/01/the-monthly-report-november-2003/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot; title=&quot;redemption in a blog&quot;&gt;redemption in a blog&lt;&#x2F;a&gt; received 12,262 visits for the month of November 2003, working to a rounded average of 408 hits per day.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Most visited entries&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;08&#x2F;ahem_5_reasons_not_to_buy_an_ipod.php&quot; title=&quot;Read &amp;quot;Ahem! 5 reasons not to buy an iPod&amp;quot;&quot;&gt;Ahem! 5 reasons not to buy an iPod&lt;&#x2F;a&gt; - yawn! &lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;21&#x2F;how_to_really_kill_windows_messenger.php&quot; title=&quot;Read &amp;quot;How to really kill Windows Messenger&amp;quot;&quot;&gt;How to really kill Windows Messenger&lt;&#x2F;a&gt; has been getting many hits from Google. Nice! I&#x27;m now an official &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=kill+windows+messenger&quot; title=&quot;See the search results on Google for &amp;quot;kill windows messenger&amp;quot;&quot;&gt;Windows Messenger killer&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;One of my shortest but sweetest (&quot;sweet&quot; as in &lt;em&gt;sweet!&lt;&#x2F;em&gt;) entries: &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;14&#x2F;101_things_that_the_mozilla_browser_can_do_that_ie_cannot.php&quot; title=&quot;Read &amp;quot;101 things that the Mozilla browser can do that IE cannot&amp;quot;&quot;&gt;101 things that the Mozilla browser can do that IE cannot&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Other interesting stuff&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I&#x27;ve been blogging for 6 months since my very first tentative steps into the blogosphere. I can say I&#x27;m thoroughly addicted to the weblog world and picked up a whole buncha stuff along the way. So yay for blogging!&lt;&#x2F;li&gt;
&lt;li&gt;My Google PageRank is still 6! OK maybe that&#x27;s not so interesting. It will be when (or rather, &lt;em&gt;if&lt;&#x2F;em&gt;) I hit &lt;acronym title=&quot;PageRank&quot;&gt;PR&lt;&#x2F;acronym&gt; 7.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Once again, as always, thanks for reading!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Past monthly reports&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;03&#x2F;the_monthly_report_october_2003.php&quot; title=&quot;Monthly report for October 2003&quot;&gt;October 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;10&#x2F;01&#x2F;the_monthly_report_september_2003.php&quot; title=&quot;Monthly report for September 2003&quot;&gt;September 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;09&#x2F;01&#x2F;the_monthly_report_august_2003.php&quot; title=&quot;Monthly report for August 2003&quot;&gt;August 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;30&#x2F;the_monthly_report_july_2003.php&quot; title=&quot;Monthly report for July 2003&quot;&gt;July 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>AIDS awareness</title>
    <published>2003-12-01T20:47:50+00:00</published>
    <updated>2003-12-01T20:47:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/01/aids-awareness/"/>
    <id>https://chuyeow.wtf/2003/12/01/aids-awareness/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/01/aids-awareness/">&lt;p&gt;Today is &lt;a href=&quot;http:&#x2F;&#x2F;www.worldaidsday.org&#x2F;&quot; title=&quot;Visit the World AIDS Day web site&quot;&gt;World AIDS Day&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:70px&quot;&gt;&lt;img alt=&quot;AIDS awareness ribbon&quot; src=&quot;&#x2F;assets&#x2F;aids-awareness-ribbon.jpg&quot; width=&quot;60&quot; height=&quot;100&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
</content>
  </entry>
  <entry>
    <title>CSS selectors translator</title>
    <published>2003-12-01T03:21:45+00:00</published>
    <updated>2003-12-01T03:21:45+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/01/css-selectors-translator/"/>
    <id>https://chuyeow.wtf/2003/12/01/css-selectors-translator/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/01/css-selectors-translator/">&lt;p&gt;Confused by CSS selectors like &lt;span class=&quot;monospaced&quot;&gt;a:not([href*=&quot;codefront&quot;])&lt;&#x2F;span&gt; and &lt;span class=&quot;monospaced&quot;&gt;body &amp;gt; h2:not(:first-of-type):not(:last-of-type);&lt;&#x2F;span&gt;? &lt;a href=&quot;http:&#x2F;&#x2F;gallery.theopalgroup.com&#x2F;selectoracle&#x2F;&quot; title=&quot;Check out the SelectORacle&quot;&gt;SelectORacle&lt;&#x2F;a&gt; can translate that into plain English (or Spanish) for you.&lt;&#x2F;p&gt;
&lt;p&gt;Very neat idea that&#x27;s apparently the brainchild of &lt;a href=&quot;http:&#x2F;&#x2F;www.meyerweb.com&#x2F;&quot; title=&quot;Go to Eric Meyer&#x27;s personal website&quot;&gt;Eric Meyer&lt;&#x2F;a&gt; (the CSS guy), and implemented in &lt;a href=&quot;http:&#x2F;&#x2F;python.org&#x2F;&quot; title=&quot;Go to the website for the Python programming language&quot;&gt;Python&lt;&#x2F;a&gt; by Kevin Jacobs.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The beauty of 20&#x2F;20 vision</title>
    <published>2003-12-01T03:03:54+00:00</published>
    <updated>2003-12-01T03:03:54+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/12/01/the-beauty-of-2020-vision/"/>
    <id>https://chuyeow.wtf/2003/12/01/the-beauty-of-2020-vision/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/12/01/the-beauty-of-2020-vision/">&lt;p&gt;You never realize what you&#x27;re missing until you experience it for yourself. I&#x27;d just bought a new yearly supply of contact lenses with the refractive index amended to the latest -6.00 (right eye) and -5.75 (left eye). Last time I had contacts made, they were -4.50 (right eye) and -4.00 (left eye). Either the last optometrist had the measurements all wrong or staring at the monitor the whole day has worsened my myopia.&lt;&#x2F;p&gt;
&lt;p&gt;And now with the new contact lenses, everything is &lt;em&gt;so&lt;&#x2F;em&gt; clear. I thought it was a slightly blurry with my old contact lenses, but in retrospect, it was definitely more than &quot;slightly&quot;. I can see every blade of grass and every pore in your face (that is, if you ever stuck your pretty face close to mine in real life). I can see the bus number from a greater distance away. I can tell you what the first letter is in the 20&#x2F;20 row of the optometrist&#x27;s eyechart.&lt;&#x2F;p&gt;
&lt;p&gt;To those few of you who aren&#x27;t myopic yet: take care of your eyes peeps! Stop staring at your monitors for too long! Hmm... What&#x27;s the point? Nobody ever listens to nagging like this. I know I didn&#x27;t.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>You don&#x27;t need a Mac to see your webpage in Safari</title>
    <published>2003-11-29T02:37:44+00:00</published>
    <updated>2003-11-29T02:37:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/29/you-dont-need-a-mac-to-see-your-webpage-in-safari/"/>
    <id>https://chuyeow.wtf/2003/11/29/you-dont-need-a-mac-to-see-your-webpage-in-safari/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/29/you-dont-need-a-mac-to-see-your-webpage-in-safari/">&lt;p&gt;Ever wondered how your website looked in &lt;a href=&quot;www.apple.com&#x2F;safari&#x2F;&quot; title=&quot;Apple&#x27;s website for the Safari web browser&quot;&gt;Safari&lt;&#x2F;a&gt;, but don&#x27;t have a Mac? Well, now you can thanks to Dan Vine&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.danvine.com&#x2F;capture&#x2F;&quot; title=&quot;Go here to use Dan Vine&#x27;s cool Safari website screen capture tool&quot;&gt;automated online screen capture tool&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;For those not in the know, Safari is the default web browser in Mac OS X, which is one reason you should care how your site looks in it. Safari utilizes the KHTML rendering engine which is the same engine that powers &lt;a href=&quot;http:&#x2F;&#x2F;kmeleon.sourceforge.net&#x2F;&quot; title=&quot;Go to the K-Meleon website&quot;&gt;K-Meleon&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.konqueror.org&#x2F;&quot; title=&quot;Go tot eh Konqueror website&quot;&gt;Konqueror&lt;&#x2F;a&gt;. KHTML is to Safari what Gecko is to Mozilla (and &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot; title=&quot;Product page for Mozilla Firebird - my browser of choice&quot;&gt;Mozilla Firebird&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.gnome.org&#x2F;projects&#x2F;epiphany&#x2F;&quot; title=&quot;Go to the Epiphany website&quot;&gt;Epiphany&lt;&#x2F;a&gt;). One thing I can say about KHTML - it&#x27;s fast. I tried &lt;a href=&quot;http:&#x2F;&#x2F;kmeleon.sourceforge.net&#x2F;&quot; title=&quot;Go to the K-Meleon website&quot;&gt;K-Meleon&lt;&#x2F;a&gt; just to see for myself and it&#x27;s light and fast. Here&#x27;s what David Hyatt had to say about the &lt;a href=&quot;http:&#x2F;&#x2F;developers.slashdot.org&#x2F;comments.pl?sid=50694&amp;threshold=4&amp;commentsort=0&amp;tid=154&amp;mode=nested&amp;cid=5082502&quot; title=&quot;Read David Hyatt on KHTML vs Gecko at Slashdot&quot;&gt;merits of KHTML compared to Gecko&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, here&#x27;s this site in Safari: &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;RIAB-in-safari.png&quot; title=&quot;Screenshot of this site in Safari&quot;&gt;screenshot&lt;&#x2F;a&gt;. Nothing broken so far. Good.&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;web-graphics.com&#x2F;mtarchive&#x2F;001088.php&quot; title=&quot;Read the source entry at webgraphics&quot;&gt;webgraphics&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Create your own South Park Character</title>
    <published>2003-11-28T23:54:47+00:00</published>
    <updated>2003-11-28T23:54:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/28/create-your-own-south-park-character/"/>
    <id>https://chuyeow.wtf/2003/11/28/create-your-own-south-park-character/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/28/create-your-own-south-park-character/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;southparkstudios.com&#x2F;games&#x2F;create.html&quot; title=&quot;Create your own South Park Character here&quot;&gt;Create your own South Park Character&lt;&#x2F;a&gt; - here&#x27;s me:&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:199px&quot;&gt;&lt;img alt=&quot;My South Park avatar&quot; src=&quot;&#x2F;assets&#x2F;southpark-me.png&quot; width=&quot;189&quot; height=&quot;290&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;br style=&quot;clear:both&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Have fun!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Getting funky with Nice Titles</title>
    <published>2003-11-28T01:33:15+00:00</published>
    <updated>2003-11-28T01:33:15+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/28/getting-funky-with-nice-titles/"/>
    <id>https://chuyeow.wtf/2003/11/28/getting-funky-with-nice-titles/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/28/getting-funky-with-nice-titles/">&lt;p&gt;Dunstan wrote up on an &lt;a href=&quot;http:&#x2F;&#x2F;www.1976design.com&#x2F;blog&#x2F;archive&#x2F;2003&#x2F;11&#x2F;21&#x2F;nice-titles&#x2F;&quot; title=&quot;Read Dunstan&#x27;s entry on &amp;quot;Nice Titles revised&amp;quot;&quot;&gt;improved Nice Titles script&lt;&#x2F;a&gt; in his beautiful and very interesting &lt;a href=&quot;http:&#x2F;&#x2F;www.1976design.com&#x2F;blog&#x2F;&quot; title=&quot;Read Dunstan&#x27;s blog&quot;&gt;blog&lt;&#x2F;a&gt;. What are &lt;a href=&quot;http:&#x2F;&#x2F;www.kryogenix.org&#x2F;code&#x2F;browser&#x2F;nicetitle&#x2F;&quot; title=&quot;Read up on the original Nice Titles&quot;&gt;Nice Titles&lt;&#x2F;a&gt; you say? They are the brainchild of &lt;a href=&quot;http:&#x2F;&#x2F;www.kryogenix.org&#x2F;&quot; title=&quot;Go to Stuart Langridge&#x27;s personal website&quot;&gt;Stuart Langridge&lt;&#x2F;a&gt; and appear on this site when you hover over a hyperlink with the &lt;span class=&quot;monospaced&quot;&gt;title&lt;&#x2F;span&gt; attribute set. If you&#x27;re using Mozilla or Mozilla Firebird, the CSS takes advantage of the &lt;span class=&quot;monospaced&quot;&gt;-moz-opacity&lt;&#x2F;span&gt; to give the popup div some transparency, and &lt;span class=&quot;monospaced&quot;&gt;-moz-border-radius&lt;&#x2F;span&gt; for rounded corners (other browsers will render an opaque rectangle).&lt;&#x2F;p&gt;
&lt;p&gt;Why Nice Titles? Firstly, they are kinda cool. And I like the way the URL is displayed in the popup div. Control over the delay between mouseovers and the div popping up helps to have title dialogs show up faster (or slower) than the browser default - I personally find the delay a little too long for &quot;standard&quot; titles.&lt;&#x2F;p&gt;
&lt;p&gt;All this is done using purely DOM methods (DOM is a W3C standard) and will work in all &lt;em&gt;correctly-implemented&lt;&#x2F;em&gt; DOM-compliant browsers. Of course, this method degrades gracefully in the face of text browsers, limited browsers in mobile devices, screen readers, etc. Want it for your site? It&#x27;s as easy as uploading the CSS and JS files to your webserver and linking to them. Any existing &lt;span class=&quot;monospaced&quot;&gt;title&lt;&#x2F;span&gt;s will magically become a Nice Title.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Movable Type spam vulnerability</title>
    <published>2003-11-27T13:55:17+00:00</published>
    <updated>2003-11-27T13:55:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/27/movable-type-spam-vulnerability/"/>
    <id>https://chuyeow.wtf/2003/11/27/movable-type-spam-vulnerability/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/27/movable-type-spam-vulnerability/">&lt;p&gt;If you&#x27;re a &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;&quot; title=&quot;Movable Type publishing system&quot;&gt;Movable Type&lt;&#x2F;a&gt; user, you probably already heard of the &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;news&#x2F;2003_11.shtml#000873&quot; title=&quot;Read &amp;quot;Movable Type Spam Vulnerability&amp;quot; at the Movable Type website&quot;&gt;spam vulnerability of the &quot;Email this to a friend&quot; script&lt;&#x2F;a&gt; in Movable Type. Six Apart has posted a &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;downloads&#x2F;mt-send-entry.zip&quot; title=&quot;Download the fixed mt-send-entry.cgi and replace yours with it&quot;&gt;fix&lt;&#x2F;a&gt;, of course, with a disclaimer that the fix only &lt;em&gt;discourages&lt;&#x2F;em&gt; spammers, not prevent spamming outright. What is the vulnerability anyway, you ask? You may want to read this &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;support&#x2F;index.php?act=ST&amp;f=14&amp;t=31153&quot; title=&quot;Read the related thread at Movable Type support forums&quot;&gt;thread&lt;&#x2F;a&gt; for the skinny.&lt;&#x2F;p&gt;
&lt;p&gt;What can you do? Well, you should remove &lt;span class=&quot;monospaced&quot;&gt;mt-send-entry.cgi&lt;&#x2F;span&gt; completely if you don&#x27;t use it. I doubt too many end users actually use any of that &quot;Email this to a friend&quot; functionality anyway so you probably have nothing to lose. Why do I say so? One word: usability.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Your users have to be able to find the link first to use it.&lt;&#x2F;li&gt;
&lt;li&gt;Your users probably are accustomed to using email or &lt;acronym title=&quot;Instant Messaging&quot;&gt;IM&lt;&#x2F;acronym&gt; to send links (think &lt;acronym title=&quot;I Seek You&quot;&gt;ICQ&lt;&#x2F;acronym&gt;&#x27;s Send URL functionality).&lt;&#x2F;li&gt;
&lt;li&gt;The average surfer is unlikely to be so enthusiastic as to send links to his&#x2F;her friends. Of course, this assumes that your average surfer has friends.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The point? Scrap that functionality, delete that file.&lt;br &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>More accessing Hotmail in Thunderbird</title>
    <published>2003-11-25T01:13:29+00:00</published>
    <updated>2003-11-25T01:13:29+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/25/more-accessing-hotmail-in-thunderbird/"/>
    <id>https://chuyeow.wtf/2003/11/25/more-accessing-hotmail-in-thunderbird/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/25/more-accessing-hotmail-in-thunderbird/">&lt;p&gt;An interesting coincidence it is that Mozillazine has posted a link to a &lt;a href=&quot;http:&#x2F;&#x2F;2mod2.com&#x2F;mohot&quot; title=&quot;Read &amp;quotGetting your Hotmail in Mozilla&#x27;s Mail Client&amp;quot;&quot;&gt;write-up on how to access Hotmail in Mozilla Mail&lt;&#x2F;a&gt; in its article entitled &amp;quot;&lt;a href=&quot;http:&#x2F;&#x2F;mozillazine.org&#x2F;talkback.html?article=4011&quot; title=&quot;Read &amp;quot;Accessing Your Hotmail Account Using Mozilla Mail&amp;quot;&quot;&gt;Accessing Your Hotmail Account Using Mozilla Mail&lt;&#x2F;a&gt;&amp;quot; - see my &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;11&#x2F;22&#x2F;accessing_hotmail_with_thunderbird.php&quot; title=&quot;Read the entry on &amp;quot;Accessing Hotmail with Thunderbird&amp;quot;&quot;&gt;previous entry&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Read the comments (or rather, &quot;talkbacks&quot;). I wasn&#x27;t aware of &lt;a href=&quot;http:&#x2F;&#x2F;www.izymail.com&#x2F;&quot; title=&quot;IzyMail website&quot; nor the article&#x27;s recommended &lt;a href=&quot;http:&#x2F;&#x2F;mrpostman.sourceforge.net&#x2F;&quot; title=&quot;MrPostman website&quot;&gt;MrPostman&lt;&#x2F;a&gt;. Judging from the comments so far, though, &lt;a href=&quot;http:&#x2F;&#x2F;www.boolean.ca&#x2F;hotpop&#x2F;&quot; title=&quot;Hotmail Popper website&quot;&gt;Hotmail Popper&lt;&#x2F;a&gt; seems to be the best-received thus far. Keeping an eye on the talkbacks for an even better solution!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Accessing Hotmail with Thunderbird</title>
    <published>2003-11-22T13:50:44+00:00</published>
    <updated>2003-11-22T13:50:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/22/accessing-hotmail-with-thunderbird/"/>
    <id>https://chuyeow.wtf/2003/11/22/accessing-hotmail-with-thunderbird/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/22/accessing-hotmail-with-thunderbird/">&lt;p&gt;Not too long ago I got an email from a reader of this weblog that he needed help setting up &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;thunderbird&#x2F;&quot;&gt;Thunderbird&lt;&#x2F;a&gt; to read his emails. In the end, it turned out that he was given the wrong email account information by his ISP, so I didn&#x27;t provide any real assistance. As it is, he was pretty impressed (&quot;enamored&quot; was the word he used) with Thunderbird - always nice to see a convert. Except for one problem: it can&#x27;t access &lt;a href=&quot;http:&#x2F;&#x2F;www.hotmail.com&#x2F;&quot;&gt;Hotmail&lt;&#x2F;a&gt; accounts.&lt;&#x2F;p&gt;
&lt;p&gt;For that matter, Outlook Express and Outlook seem to be the only email clients that can access Microsoft&#x27;s Hotmail via its web service. And as it turns out, I have a Hotmail account too and used to access it in Outlook Express. We both needed a solution, excepting logging on to the &lt;a href=&quot;http:&#x2F;&#x2F;www.hotmail.com&#x2F;&quot;&gt;Hotmail website&lt;&#x2F;a&gt; to check for emails. What is so troublesome in logging on to the website? For one thing, the Hotmail website doesn&#x27;t really work in non-IE browsers. There is IE-only scripting involved in several portions, including the rich text editing and the adding of email recipients from a drop-down. And it bugs me terribly that the &lt;a href=&quot;http:&#x2F;&#x2F;messenger.msn.com&#x2F;&quot;&gt;MSN Messenger&lt;&#x2F;a&gt; application starts running whenever I log into the Hotmail website (it&#x27;s true - when you close the IE window for Hotmail, MSN Messenger exits).&lt;&#x2F;p&gt;
&lt;p&gt;I did the smartest (or should I say &quot;only&quot;) thing possible and Googled for a solution - it turned up this &lt;a href=&quot;http:&#x2F;&#x2F;texturizer.net&#x2F;thunderbird&#x2F;faq.html#q2.3&quot; title=&quot;Can I access my Netscape WebMail or Hotmail accounts through Thunderbird?&quot;&gt;FAQ entry&lt;&#x2F;a&gt;. Great news, then, since &lt;a href=&quot;http:&#x2F;&#x2F;www.boolean.ca&#x2F;hotpop&#x2F;&quot;&gt;Hotmail Popper&lt;&#x2F;a&gt; is a free application that really works just fine. One word of caution though: make absolutely sure you change your email account settings for the Hotmail account to &quot;Leave messages on server&quot; if you really want to do so &lt;em&gt;before&lt;&#x2F;em&gt; downloading any emails. If you&#x27;re using Thunderbird, go to &lt;strong&gt;Tools&lt;&#x2F;strong&gt; -&gt; &lt;strong&gt;Account Settings&lt;&#x2F;strong&gt; and select your Hotmail account. Under &lt;strong&gt;Server Settings&lt;&#x2F;strong&gt;, check the box that says &quot;Leave messages on server&quot; and the box that says &quot;Until I delete or move them from Inbox&quot;, as shown in the screenshot below.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width:440px&quot;&gt;&lt;img alt=&quot;Thunderbird settings screenshot&quot; src=&quot;&#x2F;assets&#x2F;thunderbird-settings-screenshot.png&quot; width=&quot;430px&quot; height=&quot;252px&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
</content>
  </entry>
  <entry>
    <title>How to really kill Windows Messenger</title>
    <published>2003-11-21T14:47:28+00:00</published>
    <updated>2003-11-21T14:47:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/21/how-to-really-kill-windows-messenger/"/>
    <id>https://chuyeow.wtf/2003/11/21/how-to-really-kill-windows-messenger/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/21/how-to-really-kill-windows-messenger/">&lt;p&gt;One of the biggest annoyances in Windows is Windows Messenger, which springs to life of its own accord whenever you boot up. Or when you open Outlook Express. Or for no apparent reason at all. And you can&#x27;t close it because &quot;some other application is using it&quot; or some rubbish like that. It&#x27;s there like a virus you can quarantine, a worm you can&#x27;t eradicate, a friend you really are not interested in entertaining because you&#x27;re so damn sick of him&#x2F;her. It allows spammers to alert you to ways to improve your sex life (penis enlargement, Viagra, yada yada), &lt;a href=&quot;http:&#x2F;&#x2F;www.jmu.edu&#x2F;computing&#x2F;security&#x2F;info&#x2F;mess.jpg&quot; target=&quot;_blank&quot;&gt;sell you University diplomas&lt;&#x2F;a&gt;, and even &quot;meta-spam&quot; that tries to sell you ways to prevent spam.&lt;&#x2F;p&gt;
&lt;div class=&quot;pullquote&quot;&gt;... can&#x27;t find no Windows Messenger?... sneaky Microsoft has hidden it!&lt;&#x2F;div&gt;
&lt;p&gt;I&#x27;ve tried switching off the Windows Messenger service and unchecking all the boxes I can find that says &quot;Start Windows Messenger when this program runs&quot;. Some people says it works. I know it doesn&#x27;t, because my firewall (Sygate Personal Pro) alerts me that Windows Messenger is trying to send an outbound packet. Sneaky bastard.&lt;&#x2F;p&gt;
&lt;p&gt;I lived with this parasite in my system for a few months. Now, I&#x27;ve finally found a fool-proof way to kill it - uninstall Windows Messenger.&lt;&#x2F;p&gt;
&lt;p&gt;Yes, you heard that right - &lt;em&gt;uninstall&lt;&#x2F;em&gt;. How? Use the &lt;strong&gt;Add&#x2F;Remove Windows Components&lt;&#x2F;strong&gt; dialog of the &lt;strong&gt;Add or Remove Programs&lt;&#x2F;strong&gt; item in the Control Panel. But what you say? You can&#x27;t find no Windows Messenger? That&#x27;s right, you can&#x27;t. Because sneaky Microsoft has &lt;strong&gt;hidden&lt;&#x2F;strong&gt; it! Here&#x27;s how to &quot;unhide&quot; it:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Open %WINDIR%\INF\sysoc.inf with a text editor.&lt;&#x2F;li&gt;
&lt;li&gt;Look for the line that goes like this:&lt;br &#x2F;&gt;&lt;strong&gt;msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,hide,7&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Delete the &lt;strong&gt;hide&lt;&#x2F;strong&gt; keyword so that it now looks like this:&lt;br &#x2F;&gt;&lt;strong&gt;msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,,7&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Save the file and exit.&lt;&#x2F;li&gt;
&lt;li&gt;Click on Start -&gt; Control Panel -&gt; Add or Remove Programs -&gt; Add&#x2F;Remove Windows Components&lt;&#x2F;li&gt;
&lt;li&gt;Scroll to the bottom of the list and you should now see 2 items for Windows Messenger. Uncheck both of them, giving a triumphant whoop of vindication as you do so.&lt;&#x2F;li&gt;
&lt;li&gt;Click on Next, and Windows Messenger will be &lt;em&gt;fully&lt;&#x2F;em&gt; uninstalled.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Enjoy an existence without Windows Messenger. We all deserve this much at least, if we have to live with Windows.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;ins&gt;&lt;a href=&quot;http:&#x2F;&#x2F;127001.blogspot.com&#x2F;&quot;&gt;localhost&lt;&#x2F;a&gt; has another way to disable Windows Messenger - check out his &lt;a href=&quot;#comment9&quot;&gt;comment&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Patch UXTheme.dll to really skin WinXP</title>
    <published>2003-11-18T21:54:57+00:00</published>
    <updated>2003-11-18T21:54:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/18/patch-uxthemedll-to-really-skin-winxp/"/>
    <id>https://chuyeow.wtf/2003/11/18/patch-uxthemedll-to-really-skin-winxp/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/18/patch-uxthemedll-to-really-skin-winxp/">&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: Multi-Patcher is a newer, better patching program than PatchXP mentioned in this old entry. &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2004&#x2F;04&#x2F;17&#x2F;patch_uxthemedll_with_multipatcher_to_use_custom_themes.php&quot;&gt;Read about it&lt;&#x2F;a&gt;.&lt;&#x2F;ins&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Some of you Windows XP users may use or have used &lt;a href=&quot;http:&#x2F;&#x2F;www.tgtsoft.com&#x2F;prod_sxp.php&quot;&gt;StyleXP&lt;&#x2F;a&gt; to skin your desktop with XP themes. StyleXP uses Microsoft&#x27;s native skinning (or theming) engine, so it doesn&#x27;t slow your system down like &lt;a href=&quot;http:&#x2F;&#x2F;www.windowblinds.net&#x2F;&quot;&gt; WindowBlinds&lt;&#x2F;a&gt; does. I took it for a trial run (it&#x27;s available as a30-day free trial) and it was cool to see how pretty it can get - Luna Blue is really, really tacky and I hate Luna&#x27;s guts. I&#x27;d rather use the &quot;Classic&quot; style and I do in it first thing in a new Windows XP system. StyleXP allows you to use custom themes (or rather, &lt;em&gt;Visual Styles&lt;&#x2F;em&gt;, as Microsoft calls them) like those from &lt;a href=&quot;http:&#x2F;&#x2F;www.customize.org&#x2F;list&#x2F;stylexp&quot; title=&quot;customize.org StyleXP Themes&quot;&gt;customize.org&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.themexp.org&quot;&gt;ThemeXP&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;img&quot; style=&quot;width: 293px;&quot;&gt;&lt;img alt=&quot;StyleXP Display Properties screenshot&quot; src=&quot;&#x2F;assets&#x2F;StyleXP-display-properties.jpg&quot; width=&quot;283&quot; height=&quot;319&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;But I didn&#x27;t like to have to pay for something that really should have been in Windows XP itself. It turns out, there exist ways to patch Windows XP such that you can use these custom-made themes. The easiest way is using &lt;a href=&quot;http:&#x2F;&#x2F;www.belchfire.net&#x2F;article205.html&quot;&gt;PatchXP&lt;&#x2F;a&gt; - I&#x27;ve tried it and it works on my Windows XP Professional Edition with &lt;acronym title=&quot;Service Pack 1&quot;&gt;SP1&lt;&#x2F;acronym&gt;. Another way, which is slightly more of a hassle, is via &lt;a href=&quot;http:&#x2F;&#x2F;www.lightstar1.com&#x2F;install.htm&quot;&gt;Multi-Patcher&lt;&#x2F;a&gt; - this is more likely to work, since it&#x27;s more updated than &lt;a href=&quot;http:&#x2F;&#x2F;www.belchfire.net&#x2F;article205.html&quot;&gt;PatchXP&lt;&#x2F;a&gt;. Have fun. This should tide you over until you make enough money to get a Mac, or have enough energy to customize KDE to the max.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Spotlight on Java and J2EE at SitePoint</title>
    <published>2003-11-14T02:00:12+00:00</published>
    <updated>2003-11-14T02:00:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/14/spotlight-on-java-and-j2ee-at-sitepoint/"/>
    <id>https://chuyeow.wtf/2003/11/14/spotlight-on-java-and-j2ee-at-sitepoint/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/14/spotlight-on-java-and-j2ee-at-sitepoint/">&lt;p&gt;Web development site &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;&quot;&gt;SitePoint&lt;&#x2F;a&gt; has recently started a series of articles on Java in it&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;subcat&#x2F;94&quot;&gt;Spotlight on Java and J2EE&lt;&#x2F;a&gt;. A new article is published everyday, and the quality is good.&lt;&#x2F;p&gt;
&lt;p&gt;SitePoint is popularly-known as one of THE places for PHP articles (its &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;forumdisplay.php?f=34&quot; title=&quot;PHP forum at SitePoint Forums&quot;&gt;PHP forum&lt;&#x2F;a&gt; is also one of the busiest) - this shift in focus to enterprise technologies is encouraging, since I&#x27;ve always thought newer web developers tend to view PHP as the end all and be all to getting a serious job in web development. This is my opinion of course, and in no way should this be construed as trolling! :-)&lt;&#x2F;p&gt;
&lt;p&gt;Are you a Java developer? Come help make the &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;forumdisplay.php?f=35&quot; title=&quot;Java forum at SitePoint Forums&quot;&gt;Java forum&lt;&#x2F;a&gt; (it&#x27;s currently called the &quot;Java, ColdFusion and Other Languages&quot; forum, but that will soon change in our proposed forum structure changes) more lively. We need more members to help grow the Java forum, be they leaders in discussions or fledging newbies.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>CVS syncs and backs up your life</title>
    <published>2003-11-14T01:32:48+00:00</published>
    <updated>2003-11-14T01:32:48+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/14/cvs-syncs-and-backs-up-your-life/"/>
    <id>https://chuyeow.wtf/2003/11/14/cvs-syncs-and-backs-up-your-life/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/14/cvs-syncs-and-backs-up-your-life/">&lt;p&gt;Joey Hess writes in &lt;a href=&quot;http:&#x2F;&#x2F;www.linuxjournal.com&#x2F;article.php?sid=5976&quot;&gt;&lt;acronym title=&quot;Concurrent Versions System&quot;&gt;CVS&lt;&#x2F;acronym&gt; homedir&lt;&#x2F;a&gt; in &lt;a href=&quot;http:&#x2F;&#x2F;www.linuxjournal.com&#x2F;&quot;&gt;Linux Journal&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I get three major benefits from keeping my whole home directory in &lt;acronym title=&quot;Concurrent Versions System&quot;&gt;CVS&lt;&#x2F;acronym&gt;: home directory replication, history and distributed backups.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Yup, it&#x27;s amazing, but definitely not crazy. He could be on to something.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll have to try that sometime when I get a server with lots of space to spare, as well as enough machines to play around with.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>101 things that the Mozilla browser can do that IE cannot</title>
    <published>2003-11-14T01:21:02+00:00</published>
    <updated>2003-11-14T01:21:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/14/101-things-that-the-mozilla-browser-can-do-that-ie-cannot/"/>
    <id>https://chuyeow.wtf/2003/11/14/101-things-that-the-mozilla-browser-can-do-that-ie-cannot/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/14/101-things-that-the-mozilla-browser-can-do-that-ie-cannot/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.xulplanet.com&#x2F;ndeakin&#x2F;arts&#x2F;reasons.html&quot;&gt;101 things that the Mozilla browser can do that IE cannot&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Enough said.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla and IE in 1 application</title>
    <published>2003-11-14T00:01:20+00:00</published>
    <updated>2003-11-14T00:01:20+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/14/mozilla-and-ie-in-1-application/"/>
    <id>https://chuyeow.wtf/2003/11/14/mozilla-and-ie-in-1-application/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/14/mozilla-and-ie-in-1-application/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.vasanthdharmaraj.com&#x2F;&quot;&gt;Vasanth Dharmaraj&lt;&#x2F;a&gt; has implemented an application that runs Mozilla and IE, for the convenience of having only to run 1 application to check how your websites render in these 2 web browsers. Read the &lt;a href=&quot;http:&#x2F;&#x2F;www.vasanthdharmaraj.com&#x2F;PermaLink.aspx?guid=daa9dda9-c26e-4b06-b806-c83434aea74f&quot; title=&quot;Vasanth Dharmaraj&#x27;s blog entry: Comparator&quot;&gt;initial entry&lt;&#x2F;a&gt; (with screenshot) and the &lt;a href=&quot;http:&#x2F;&#x2F;www.vasanthdharmaraj.com&#x2F;PermaLink.aspx?guid=f410c43c-328d-4339-9724-833a3a41d1fe&quot; title=&quot;Vasanth Dharmaraj&#x27;s blog entry: Comparator Preview&quot;&gt;entry on how to get it&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I haven&#x27;t tried it, simply because it requires the .NET Runtime to be installed - I&#x27;ve run out of harddisk space on my laptop. It really sucks when your 80&lt;acronym title=&quot;Gigabyte&quot;&gt;GB&lt;&#x2F;acronym&gt; harddisk goes offline - my desktop computer just died for no reason a while back and my anime store, not to mention my CD-writer, are now inaccessible to me.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Butters&#x27; real name</title>
    <published>2003-11-13T23:50:22+00:00</published>
    <updated>2003-11-13T23:50:22+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/13/butters-real-name/"/>
    <id>https://chuyeow.wtf/2003/11/13/butters-real-name/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/13/butters-real-name/">&lt;p&gt;Yup naïve Butters&#x27; real name is Leopold Starch!&lt;&#x2F;p&gt;
&lt;p&gt;First time heard on South Park, I think, on the most recent episode, &quot;&lt;a href=&quot;http:&#x2F;&#x2F;southparkstudios.com&#x2F;show&#x2F;guide.html?season=7&amp;min=2#711&quot; title=&quot;South Park Season 7, Episode 11: Casa Bonita&quot;&gt;Casa Bonita&lt;&#x2F;a&gt;&quot;. &lt;a href=&quot;http:&#x2F;&#x2F;www.southparkx.net&#x2F;multimedia.php?news=episodenews&amp;page=season7&quot; title=&quot;Download South Park&quot;&gt;Watch it&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Required reading: Floats and Positioning</title>
    <published>2003-11-11T22:02:18+00:00</published>
    <updated>2003-11-11T22:02:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/11/required-reading-floats-and-positioning/"/>
    <id>https://chuyeow.wtf/2003/11/11/required-reading-floats-and-positioning/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/11/required-reading-floats-and-positioning/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.positioniseverything.net&#x2F;&quot;&gt;Position Is Everything&lt;&#x2F;a&gt; has some very coherent, very required reading on positioning and floating with &lt;acronym title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;&#x2F;acronym&gt;: &lt;a href=&quot;http:&#x2F;&#x2F;www.positioniseverything.net&#x2F;articles&#x2F;flow-pos.html&quot;&gt;Flowing and Positioning: Two Page Models&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.positioniseverything.net&#x2F;articles&#x2F;float-theory.html&quot;&gt;Float: The Theory&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;By the way, &lt;a href=&quot;http:&#x2F;&#x2F;www.positioniseverything.net&#x2F;&quot;&gt;Position Is Everything&lt;&#x2F;a&gt; is a great place for CSS demos and articles. Bookmarked!&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;archive&#x2F;2003&#x2F;11&#x2F;11&#x2F;requiredReading&quot;&gt;Simon Willison&#x27;s Weblog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Popup blocking coming soon to IE</title>
    <published>2003-11-11T21:34:44+00:00</published>
    <updated>2003-11-11T21:34:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/11/popup-blocking-coming-soon-to-ie/"/>
    <id>https://chuyeow.wtf/2003/11/11/popup-blocking-coming-soon-to-ie/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/11/popup-blocking-coming-soon-to-ie/">&lt;p&gt;Yup you heard that right. Popup ad blocking will appear in IE 6.05 as part of Windows XP Service Pack 2 (&lt;acronym title=&quot;Service Pack 2&quot;&gt;SP2&lt;&#x2F;acronym&gt;). You&#x27;d have to wait until the first half of 2004 to get it. In the meantime, you can use these alternatives if you aren&#x27;t already:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot;&gt;Mozilla Firebird&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;&quot;&gt;Mozilla&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.opera.com&#x2F;&gt;Opera&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;kmeleon.sourceforge.net&#x2F;&quot;&gt;K-Meleon&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;www.msfn.org&#x2F;comments.php?catid=1&amp;id=5735&quot;&gt;&lt;acronym title=&quot;Microsoft Software Forum Network&quot;&gt;MSFN&lt;&#x2F;acronym&gt;&lt;&#x2F;a&gt; via &lt;a href=&quot;http:&#x2F;&#x2F;gemal.dk&#x2F;archives&#x2F;000361.html&quot;&gt;Gemal&#x27;s Psyched Blog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Bloggers against comment spam</title>
    <published>2003-11-10T01:14:47+00:00</published>
    <updated>2003-11-10T01:14:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/10/bloggers-against-comment-spam/"/>
    <id>https://chuyeow.wtf/2003/11/10/bloggers-against-comment-spam/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/10/bloggers-against-comment-spam/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;kalsey.com&#x2F;blog&#x2F;&quot; title=&quot;Adam Kalsey&#x27;s blog - Measure Twice&quot;&gt;Adam Kalsey&lt;&#x2F;a&gt; has issued a &lt;a href=&quot;http:&#x2F;&#x2F;kalsey.com&#x2F;2003&#x2F;11&#x2F;comment_spam_manifesto&#x2F;&quot;&gt;Comment Spam Manifesto&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
Bloggers will track you down and notify your hosting providers about your activities. We will tell your ISPs what you are using their connections for. We will let the makers of the products you are advertising know of your despicable sales methods. We will hit you where it hurts by attacking your source of income.
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;The efforts of Jay Allen in coming up with &lt;a href=&quot;http:&#x2F;&#x2F;www.jayallen.org&#x2F;misc&#x2F;projects&#x2F;mt-blacklist&#x2F;&quot;&gt;MT-Blacklist&lt;&#x2F;a&gt; are highly commendable. For once, bloggers have a &lt;em&gt;defensive&lt;&#x2F;em&gt; tool against blog spammers. The manifesto, however, propounds that bloggers get on the offensive. &lt;a href=&quot;http:&#x2F;&#x2F;kalsey.com&#x2F;2003&#x2F;11&#x2F;cutting_comment_spammers_off_at_the_knees&#x2F;&quot; title=&quot;Adam Kalsey writes on how to take the sword to comment spammers&quot;&gt; Cut comment spammers off at their knees&lt;&#x2F;a&gt;. Report them to their ISP after performing a &lt;a href=&quot;http:&#x2F;&#x2F;www.arin.net&#x2F;whois&#x2F;&quot;&gt;WHOIS&lt;&#x2F;a&gt; with their IP addresses.&lt;&#x2F;p&gt;
&lt;p&gt;A PageRank of 6 has meant this weblog has been target of a good number of comment spammers. Installing MT-Blacklist has stopped a good number in their tracks. From now, repeated offenders will be reported to your ISP or your affiliate program owner.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Ahem! 5 reasons not to buy an iPod</title>
    <published>2003-11-08T23:21:37+00:00</published>
    <updated>2003-11-08T23:21:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/08/ahem-5-reasons-not-to-buy-an-ipod/"/>
    <id>https://chuyeow.wtf/2003/11/08/ahem-5-reasons-not-to-buy-an-ipod/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/08/ahem-5-reasons-not-to-buy-an-ipod/">&lt;p&gt;Well, CNET has posted &quot;&lt;a href=&quot;http:&#x2F;&#x2F;reviews.cnet.com&#x2F;4520-6450_7-5102324-1.html&quot;&gt;Five reasons not to buy an iPod&lt;&#x2F;a&gt;&quot;. Of course, realistically for most people, there are only 2 reasons in there that really matter (reasons 1 and 3); for the active, reason 2 as well.&lt;&#x2F;p&gt;
&lt;p&gt;In case you were thinking, no I wasn&#x27;t thinking of getting an iPod. My main beef with the iPod is its price. And 6 hours of battery life just doesn&#x27;t cut it. I&#x27;d much rather get one of &lt;a href=&quot;http:&#x2F;&#x2F;www.iriver.com&#x2F;product&#x2F;info.asp?p_name=iMP-550&quot; title=&quot;iRiver iMP-150 SlimX&quot;&gt;these&lt;&#x2F;a&gt; or perhaps one of &lt;a href=&quot;http:&#x2F;&#x2F;www.iriver.com&#x2F;product&#x2F;info.asp?p_name=iFP-390T&quot; title=&quot;iRiver iFP-390T&quot;&gt;these&lt;&#x2F;a&gt;. Maybe in 7 months time.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Search &quot;without opening a browser&quot; with Google Deskbar</title>
    <published>2003-11-07T23:24:53+00:00</published>
    <updated>2003-11-07T23:24:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/07/search-without-opening-a-browser-with-google-deskbar/"/>
    <id>https://chuyeow.wtf/2003/11/07/search-without-opening-a-browser-with-google-deskbar/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/07/search-without-opening-a-browser-with-google-deskbar/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;toolbar.google.com&#x2F;deskbar&#x2F;&quot;&gt;Google Deskbar&lt;&#x2F;a&gt;&#x27;s pretty neat, but as usual from Google, the neat stuff is only available for Windows users, and is actually tied to IE (think &lt;a href=&quot;http:&#x2F;&#x2F;toolbar.google.com&#x2F;&quot;&gt;Google Toolbar&lt;&#x2F;a&gt; and PageRank.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, it&#x27;s convenient to search straight from the desktop, and if you&#x27;re like me, you do lots of searches with Google. It does, however, mean that you&#x27;re using IE to browse your searches - depending on your preferences, that may be a good, bad or &quot;I don&#x27;t really care&quot; thing.&lt;&#x2F;p&gt;
&lt;p&gt;You may also have noticed I quoted Google in using double quotes when I say &quot;without opening a browser&quot;. That&#x27;s because the mini-viewer uses IE, and it actually does &quot;open&quot; a browser - there is a noticeable delay as the Deskbar revs up IE the first time I do a search. Of course, that entirely depends on your definition of the word &quot;open&quot;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The monthly report - October 2003</title>
    <published>2003-11-03T23:48:48+00:00</published>
    <updated>2003-11-03T23:48:48+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/03/the-monthly-report-october-2003/"/>
    <id>https://chuyeow.wtf/2003/11/03/the-monthly-report-october-2003/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/03/the-monthly-report-october-2003/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot; title=&quot;redemption in a blog&quot;&gt;redemption in a blog&lt;&#x2F;a&gt; received 10,617 visits for the month of October 2003, working to an average of 342 hits per day.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Most visited entries&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;10&#x2F;10&#x2F;unbelievable_optical_illusion.php&quot;&gt;Unbelievable optical illusion&lt;&#x2F;a&gt; was most visited, probably because it got onto several LiveJournals.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;10&#x2F;15&#x2F;comparing_mozilla_firebird_with_other_browsers.php&quot;&gt;Comparing Mozilla Firebird with other browsers&lt;&#x2F;a&gt; - why you really should use &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot;&gt;Mozilla Firebird&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;10&#x2F;27&#x2F;new_ie_smells_like_mozilla.php&quot;&gt;New IE smells like Mozilla&lt;&#x2F;a&gt; had some screenshots on the IE that will come with Windows Longhorn.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Other interesting stuff&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;My Google PageRank went up by 1 from 5 to 6.&lt;&#x2F;li&gt;
&lt;li&gt;Over 1 Gigabyte of bandwidth was used last month, a record which I attribute to the picture in &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;10&#x2F;10&#x2F;unbelievable_optical_illusion.php&quot;&gt;Unbelievable optical illusion&lt;&#x2F;a&gt; being hot-linked on many forum sites, and (eek!) LiveJournals.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Thanks for reading!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Past monthly reports&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;10&#x2F;01&#x2F;the_monthly_report_september_2003.php&quot; title=&quot;Monthly report for September 2003&quot;&gt;September 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;09&#x2F;01&#x2F;the_monthly_report_august_2003.php&quot; title=&quot;Monthly report for August 2003&quot;&gt;August 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;30&#x2F;the_monthly_report_july_2003.php&quot; title=&quot;Monthly report for July 2003&quot;&gt;July 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Introduction to weblogs</title>
    <published>2003-11-03T23:35:44+00:00</published>
    <updated>2003-11-03T23:35:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/03/introduction-to-weblogs/"/>
    <id>https://chuyeow.wtf/2003/11/03/introduction-to-weblogs/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/03/introduction-to-weblogs/">&lt;p&gt;Diego Doval has written 2 very nice pieces on weblogging, entitled &lt;a href=&quot;http:&#x2F;&#x2F;www.dynamicobjects.com&#x2F;d2r&#x2F;archives&#x2F;002399.html&quot;&gt;An Introduction to Weblogs&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.dynamicobjects.com&#x2F;d2r&#x2F;archives&#x2F;002400.html&quot;&gt;An Introduction to Weblogs, part two: syndication&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Thunderbird - why it needs a &quot;purge&quot; button&#x2F;shortcut</title>
    <published>2003-11-02T21:15:04+00:00</published>
    <updated>2003-11-02T21:15:04+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/02/thunderbird-why-it-needs-a-purge-buttonshortcut/"/>
    <id>https://chuyeow.wtf/2003/11/02/thunderbird-why-it-needs-a-purge-buttonshortcut/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/02/thunderbird-why-it-needs-a-purge-buttonshortcut/">&lt;p&gt;I have a confession to make: I&#x27;ve stayed away from using &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;thunderbird&#x2F;&quot;&gt;Thunderbird&lt;&#x2F;a&gt; for my desktop email client despite my apparent Mozilla advocacy. The reason: I couldn&#x27;t for the life of me find a &quot;purge&quot; button to expunge emails marked as deleted for my IMAP accounts.&lt;&#x2F;p&gt;
&lt;p&gt;I still use Outlook Express and even recently tried out Outlook 2003 to see what the fuss was all about. Well, yeah Outlook 2003 &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;screenshots&#x2F;outlook2003-screenie.png&quot; target=&quot;_blank&quot;&gt;looks pretty&lt;&#x2F;a&gt; in a WinXP-ish sort of way, and the 3-pane layout really does give you bigger logical screen real estate to manage and read emails. Too bad I still can&#x27;t figure out why it doesn&#x27;t work with my university and primary &lt;acronym title=&quot;Internet Message Access Protocol&quot;&gt;IMAP&lt;&#x2F;acronym&gt; email accounts. It works for one other IMAP account, which leaves me really puzzled because the account settings were all imported from Outlook Express. I even tried following special instructions for accessing those accounts on Outlook, to no avail.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, back to Thunderbird. One thing I always missed in Thunderbird ever since those days when it was still called Minotaur is the &quot;Purge&quot; button in Outlook Express, which expunges emails marked as deleted. I wasn&#x27;t the only one, apparently, from this &lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=16392&amp;highlight=imap+purge&quot; title=&quot;How to really delete IMAP messages&quot;&gt;thread&lt;&#x2F;a&gt; at the MozillaZine forums. From a usability point of view, I find a 1-click access to a &quot;purge&quot; button highly convenient, and &quot;Compact this folder&quot; doesn&#x27;t exactly convey the impression that something is going to be deleted (or more correctly, &quot;expunged&quot; as in the &lt;acronym title=&quot;Internet Message Access Protocol&quot;&gt;IMAP&lt;&#x2F;acronym&gt; &lt;acronym title=&quot;Request For Comments&quot;&gt;RFC&lt;&#x2F;acronym&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img alt=&quot;Thunderbird Compact this folder screenshot&quot; src=&quot;&#x2F;assets&#x2F;tb-compact-screenie.png&quot; width=&quot;175&quot; height=&quot;153&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Well, the good news is, someone has already submitted a bug report to add an expunge button to Thunderbird &lt;a href=&quot;http:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=75927&quot; title=&quot;RFE: &quot;Compact&quot; or &quot;Purge&quot; button&quot;&gt;here. Until then, I&#x27;d probably be using Outlook Express on Windows, or until I get some insidious Outlook Express worm or virus, whichever happens first.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Happy Birthday!</title>
    <published>2003-11-01T01:25:00+00:00</published>
    <updated>2003-11-01T01:25:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/11/01/happy-birthday/"/>
    <id>https://chuyeow.wtf/2003/11/01/happy-birthday/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/11/01/happy-birthday/">&lt;p&gt;To my better half,&lt;br &#x2F;&gt;
&lt;img alt=&quot;chinese-happy-birthday.png&quot; src=&quot;&#x2F;assets&#x2F;chinese-happy-birthday.png&quot; width=&quot;242&quot; height=&quot;72&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;weiping&#x2F;2003&#x2F;birthday&#x2F;&quot; title=&quot;Special archive for this entry&quot;&gt;Archive&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>View your website in Lynx, without Lynx</title>
    <published>2003-10-30T16:25:26+00:00</published>
    <updated>2003-10-30T16:25:26+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/30/view-your-website-in-lynx-without-lynx/"/>
    <id>https://chuyeow.wtf/2003/10/30/view-your-website-in-lynx-without-lynx/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/30/view-your-website-in-lynx-without-lynx/">&lt;p&gt;Came across this while reading the &lt;a href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;exec&#x2F;obidos&#x2F;ASIN&#x2F;0735712018&#x2F;ref%3Dnosim&#x2F;jeffreyzeldmanprA&#x2F;104-3883014-6280709&quot; title=&quot;Designing With Web Standards by Jeffrey Zeldman&quot;&gt;little orange book by Jeffrey Zeldman&lt;&#x2F;a&gt; - &lt;a href=&quot;http:&#x2F;&#x2F;www.delorie.com&#x2F;web&#x2F;lynxview.html&quot;&gt;Lynx Viewer&lt;&#x2F;a&gt;. It&#x27;s a pretty neato &lt;a href=&quot;http:&#x2F;&#x2F;www.delorie.com&#x2F;web&#x2F;lynxview.cgi?see-script&quot; title=&quot;View the source of the Perl script&quot;&gt;Perl CGI script&lt;&#x2F;a&gt;. Very useful for checking how your site looks to that minority of people who still use a text browser. Also very interesting to see how &lt;a href=&quot;http:&#x2F;&#x2F;www.delorie.com&#x2F;web&#x2F;lynxview.cgi?url=http:&#x2F;&#x2F;www.cnet.com&#x2F;&quot; title=&quot;CNet in Lynx&quot;&gt;many&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.delorie.com&#x2F;web&#x2F;lynxview.cgi?url=http:&#x2F;&#x2F;www.nus.edu.sg&#x2F;&quot; title=&quot;NUS homepage in Lynx&quot;&gt;sites&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;www.delorie.com&#x2F;web&#x2F;lynxview.cgi?url=http:&#x2F;&#x2F;www.zdnet.com&#x2F;&quot; title=&quot;ZDNet in Lynx&quot;&gt;break&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;See how important it is to separate presentation from structure, and to follow accessibility guidelines? At least, as important as it is for these sites not to lose the proportion of viewers who either use text browsers or are visually-handicapped and use a screen reader.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, here&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.delorie.com&#x2F;web&#x2F;lynxview.cgi?url=https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot;&gt;redemption in a blog when viewed in Lynx&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New IE smells like Mozilla</title>
    <published>2003-10-27T08:55:58+00:00</published>
    <updated>2003-10-27T08:55:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/27/new-ie-smells-like-mozilla/"/>
    <id>https://chuyeow.wtf/2003/10/27/new-ie-smells-like-mozilla/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/27/new-ie-smells-like-mozilla/">&lt;p&gt;Something looks awfully familiar in these screenshots (&lt;a href=&quot;http:&#x2F;&#x2F;www.neowin.net&#x2F;staff&#x2F;creamhackered&#x2F;longhornbuild4051&#x2F;iepopups.jpg&quot; title=&quot;IE popup blocker&quot;&gt;1&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.neowin.net&#x2F;staff&#x2F;creamhackered&#x2F;longhornbuild4051&#x2F;ieaddons.jpg&quot; title=&quot;IE Addons&quot;&gt;2&lt;&#x2F;a&gt;) in the version of IE that will supposedly ship with the next Windows (codenamed &quot;Longhorn&quot;). This after a build of Longhorn was leaked to the public.&lt;&#x2F;p&gt;
&lt;p&gt;So it seems they finally decided to institute a &lt;a href=&quot;http:&#x2F;&#x2F;www.neowin.net&#x2F;staff&#x2F;creamhackered&#x2F;longhornbuild4051&#x2F;iepopups.jpg&quot;&gt;popup blocker&lt;&#x2F;a&gt;. And emulate Mozilla extensions with their &lt;a href=&quot;http:&#x2F;&#x2F;www.neowin.net&#x2F;staff&#x2F;creamhackered&#x2F;longhornbuild4051&#x2F;ieaddons.jpg&quot;&gt;IE Addons&lt;&#x2F;a&gt;. Hmm... This is good news in the sense that Mozilla had it right all along.&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;neowin.net&#x2F;comments.php?id=14694&amp;category=main&quot;&gt;Longhorn PDC Build 4051 Leaked&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Preventing RSI with WorkRave</title>
    <published>2003-10-27T06:36:07+00:00</published>
    <updated>2003-10-27T06:36:07+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/27/preventing-rsi-with-workrave/"/>
    <id>https://chuyeow.wtf/2003/10/27/preventing-rsi-with-workrave/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/27/preventing-rsi-with-workrave/">&lt;p&gt;When I&#x27;m coding or writing reports, I often find myself going into a trance-like state where I can&#x27;t keep myself from looking away from the monitor. That is majorly bad, and I know it, but sometimes I just don&#x27;t care because things have to be done. I figured I needed something external to enforce a little discipline in me, so I&#x27;d got &lt;a href=&quot;http:&#x2F;&#x2F;www.cheqsoft.com&#x2F;break.html&quot;&gt;Break Reminder&lt;&#x2F;a&gt;. I used it for some time. Unfortunately, I&#x27;d turned it off when I found it unbelievably annoying. Before you start rolling your eyes, let me say that I find my &quot;unrepentant&quot; behavior very disappointing as well.&lt;&#x2F;p&gt;
&lt;p&gt;So now having been alerted to &lt;a href=&quot;http:&#x2F;&#x2F;www.workrave.com&#x2F;welcome&#x2F;index.php&quot;&gt;WorkRave&lt;&#x2F;a&gt; by &lt;a href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;archive&#x2F;2003&#x2F;10&#x2F;27&#x2F;avoidingRSI&quot;&gt;Simon Willison&lt;&#x2F;a&gt;, I&#x27;ve decided to install it and enforce breaks no matter what. It isn&#x27;t a good sign when your wrists, fingers, neck and back start to ache. I needed &lt;acronym title=&quot;Repetitive Strain Injury&quot;&gt;RSI&lt;&#x2F;acronym&gt; prevention, fast.&lt;&#x2F;p&gt;
&lt;p&gt;Enter &lt;a href=&quot;http:&#x2F;&#x2F;www.workrave.com&#x2F;welcome&#x2F;index.php&quot;&gt;WorkRave&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.workrave.com&#x2F;welcome&#x2F;index.php&quot;&gt;WorkRave&lt;&#x2F;a&gt; is an Open Source application that sets reminders to tell you when it is time to take a break from your work. Oh, and it&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.gnu.org&#x2F;philosophy&#x2F;free-sw.html&quot; title=&quot;The Free Software Definition&quot;&gt;free software&lt;&#x2F;a&gt;. I&#x27;ve it set to micropause for 20 seconds every 8 mins, and enforce a rest break of 5 mins every 45 mins. The &lt;a href=&quot;http:&#x2F;&#x2F;www.workrave.com&#x2F;faq&#x2F;&quot; title=&quot;WorkRave FAQ&quot;&gt;&lt;acronym title=&quot;Frequently Asked Questions&quot;&gt;FAQ&lt;&#x2F;acronym&gt;&lt;&#x2F;a&gt; has some guidelines for good timer values. If you&#x27;ve ever felt any aches in your wrists or fingers, or find yourself unable to take a break from your computer even though you know you needed it, get it and try it out. There&#x27;re Windows and Linux versions - having a Linux version is great, because now I can enforce breaks when working in Linux too.&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;archive&#x2F;2003&#x2F;10&#x2F;27&#x2F;avoidingRSI&quot;&gt;Simon Willison: Avoiding RSI&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>I&#x27;ve got Mini-tab Shapes</title>
    <published>2003-10-27T06:19:00+00:00</published>
    <updated>2003-10-27T06:19:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/27/ive-got-mini-tab-shapes/"/>
    <id>https://chuyeow.wtf/2003/10/27/ive-got-mini-tab-shapes/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/27/ive-got-mini-tab-shapes/">&lt;p&gt;I&#x27;ve always been wanting to try out &lt;a href=&quot;http:&#x2F;&#x2F;www.simplebits.com&#x2F;tips&#x2F;minitab_shapes.html&quot;&gt;Mini-tab Shapes&lt;&#x2F;a&gt; and finally got down to doing so. Granted, the whole thing was a no-brainer since all that had to be done was to copy the source in that page and tweak the CSS to suit the rest of the site.&lt;&#x2F;p&gt;
&lt;p&gt;Initially though, I&#x27;d wanted to put up tabs like those in the &lt;a href=&quot;http:&#x2F;&#x2F;alistapart.com&#x2F;articles&#x2F;slidingdoors&#x2F;&quot;&gt;Sliding Doors of CSS&lt;&#x2F;a&gt; article at &lt;a href=&quot;http:&#x2F;&#x2F;alistapart.com&#x2F;&quot;&gt;A List Apart&lt;&#x2F;a&gt;, but my graphic design skills weren&#x27;t up to the task - I had problems coming up with tabs that weren&#x27;t child-like doodles. So I settled for mini-tabs.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, for those of you who&#x27;ve been visiting lately, you&#x27;d probably also have noticed the new look. Hate it? Like it? Let me know!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: &lt;a href=&quot;http:&#x2F;&#x2F;www.thesunreport.org&#x2F;&quot;&gt;The Sun Report&lt;&#x2F;a&gt; has &lt;a href=&quot;http:&#x2F;&#x2F;www.thesunreport.org&#x2F;exp&#x2F;minitabs&#x2F;vertical.html&quot;&gt;Vertical Mini-tabs, inspired by Mini-tab shapes!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Branding Mozilla, IE considered harmful</title>
    <published>2003-10-24T03:48:52+00:00</published>
    <updated>2003-10-24T03:48:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/24/branding-mozilla-ie-considered-harmful/"/>
    <id>https://chuyeow.wtf/2003/10/24/branding-mozilla-ie-considered-harmful/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/24/branding-mozilla-ie-considered-harmful/">&lt;p&gt;This article, &lt;a href=&quot;http:&#x2F;&#x2F;ashitaka-san.home.comcast.net&#x2F;yayrant&#x2F;ieharmful.html&quot; title=&quot;Internet Explorer Considered Harmful&quot;&gt;Internet Explorer Considered Harmful&lt;&#x2F;a&gt;, is a good read for those of you still using &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;&#x2F;acronym&gt;. Granted, the rhetoric is somewhat biased against &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;&#x2F;acronym&gt; from the start, but those are some cold hard facts. Of course, there are &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;10&#x2F;15&#x2F;comparing_mozilla_firebird_with_other_browsers.php&quot; title=&quot;Comparing Mozilla Firebird with other browsers&quot;&gt;more reasons&lt;&#x2F;a&gt; to use a browser other than &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;&#x2F;acronym&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Also, this article entitled &lt;a href=&quot;http:&#x2F;&#x2F;actsofvolition.com&#x2F;steven&#x2F;mozillabranding&#x2F;&quot;&gt;Branding Mozilla: Towards Mozilla 2.0&lt;&#x2F;a&gt; has been going round the blogosphere and I thought to link it for the benefit of those of you who haven&#x27;t seen it yet, and for myself for archival purposes. That&#x27;s the &lt;a href=&quot;http:&#x2F;&#x2F;www.kryogenix.org&#x2F;days&#x2F;553.html&quot; title=&quot;The tyranny of tabbed browsing&quot;&gt;tyranny of tabbed browsing&lt;&#x2F;a&gt; for you when using a browser which supports tabbed browsing. Anyway, the article is a very coherent piece on how &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;&quot;&gt;the Mozilla project&lt;&#x2F;a&gt; should brand (or rather, re-brand) its products and projects. I agree that the Mozilla lizard is a good identity, but I find that it lacks impact outside the developer world. Probably because of the play with the word &quot;Godzilla&quot; in &quot;Mozilla&quot; - having a lizard as an icon just doesn&#x27;t seem serious enough. Of course, geeks always have a sense of humor, but in this instance, I think it could be hurting the Mozilla project&#x27;s credibility to a certain extent among low-tech end users.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Comparing Mozilla Firebird with other browsers</title>
    <published>2003-10-15T15:56:02+00:00</published>
    <updated>2003-10-15T15:56:02+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/15/comparing-mozilla-firebird-with-other-browsers/"/>
    <id>https://chuyeow.wtf/2003/10/15/comparing-mozilla-firebird-with-other-browsers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/15/comparing-mozilla-firebird-with-other-browsers/">&lt;p&gt;I don&#x27;t think &lt;a href=&quot;http:&#x2F;&#x2F;website-beta.mozilla.org&#x2F;products&#x2F;firebird&#x2F;compare&#x2F;&quot; title=&quot;Comparision of Mozilla Firebird with other web browsers&quot;&gt;this page&lt;&#x2F;a&gt; existed before &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;10&#x2F;15&#x2F;mozilla_firebird_07_released.php&quot;&gt;today&#x27;s major releases&lt;&#x2F;a&gt;. Interesting to see Mozilla 1.5 in the comparison chart. I haven&#x27;t used the web browser in the Mozilla suite since Phoenix 0.4 and it surprises me that it doesn&#x27;t have configurable toolbars and the bookmark panel already.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, gimmicky as that chart may seem, there really is no reason to use &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;&#x2F;acronym&gt; in this day and age unless you&#x27;re forced to, either by circumstances at work or just because you were born a masochistic Microsoft crony, or because some of the following reasons:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;You&#x27;ve never heard of &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot;&gt;Mozilla Firebird&lt;&#x2F;a&gt; - &quot;The Best Browser, Bar None&quot;. Yes it may sound corny and somewhat unbelievable, but take my word for it - it&#x27;s true.&lt;&#x2F;li&gt;
&lt;li&gt;You think it&#x27;s cool and &quot;in&quot; to use &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;&#x2F;acronym&gt; because everyone you know is using it - hint: it&#x27;s not cool, it&#x27;s definitely not &quot;in&quot;, and you&#x27;re probably mixing with the wrong people. Unless, of course, you&#x27;re one of the following people: Microsoft employees, politicians, lawyers, masochists.&lt;&#x2F;li&gt;
&lt;li&gt;You like getting those popup or pop-under ads because you actually click them. Maybe you find them exciting. Like how you find any new advertisements with David Beckham in it exciting :p. &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;tour&#x2F;popups.html&quot;&gt;Popup blocking&lt;&#x2F;a&gt;? No thanks, I like my popups fast and pornographic.&lt;&#x2F;li&gt;
&lt;li&gt;You find that having many &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;&#x2F;acronym&gt; windows open makes you look busy. Your boss sometimes looks over your shoulder.&lt;&#x2F;li&gt;
&lt;li&gt;You prefer obscure error messages when the JavaScript for a website has errors. Who needs a JavaScript console that actually spews out helpful error messages? In fact, you must think fellow web developers wusses when they use &lt;a href=&quot;http:&#x2F;&#x2F;www.hacksrus.com&#x2F;%7Eginda&#x2F;venkman&#x2F;&quot; title=&quot;Venkman - JavaScript debugger for Mozilla-based browsers&quot;&gt;Venkman - the JavaScript debugger for Mozilla-based browsers&lt;&#x2F;a&gt; to &lt;a href=&quot;http:&#x2F;&#x2F;www.webreference.com&#x2F;programming&#x2F;javascript&#x2F;venkman&#x2F;&quot; title=&quot;Article on&lt;br &#x2F;&gt;
debugging JavaScript using Venkman, Part 1&quot;&gt;debug their JavaScript&lt;&#x2F;a&gt;. I&#x27;ll just use my extreme debugging skillz of being able to guess what is wrong by looking at every line of code, thank you.&lt;&#x2F;li&gt;
&lt;li&gt;You welcome websites which install a new toolbar for you, or set your homepage to their site without asking you. You believe that is the Ultimate user experience a website can provide. &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot; title=&quot;Mozilla Firebird&quot;&gt;Anything&lt;&#x2F;a&gt; which deprives you of that experience should never ever be installed on your system. Non-invasive surfing is an alien concept to you.&lt;&#x2F;li&gt;
&lt;li&gt;You think &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;tour&#x2F;index.html&quot; title=&quot;Tab browsing on Firebird explained&quot;&gt;tabbed-browsing &lt;&#x2F;a&gt;is just some kind of weird anti-Microsoft &quot;web-browsing paradigm&quot; that actually makes you lose productivity instead of gain any. Why would I want tabbed browsing for anyway? One webpage, one new window is your philosophy. After all, I have lots of &lt;acronym title=&quot;Random Access Memory&quot;&gt;RAM&lt;&#x2F;acronym&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;You haven&#x27;t heard of &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;tour&#x2F;fayt.html&quot;&gt;find as you type&lt;&#x2F;a&gt;&quot;. Ctrl-F, type in search term, click &quot;Find next&quot; is all you know, and you&#x27;re reluctant to try any of that new-fangled stuff that oh they say would speed up your searching.&lt;&#x2F;li&gt;
&lt;li&gt;You enjoy getting Windows updates (that is, if you use Windows). Getting the latest security patches for &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;&#x2F;acronym&gt; vulnerabilities makes you feel like a geek superior.&lt;&#x2F;li&gt;
&lt;li&gt;You are a new computer user and don&#x27;t know how to install programs - your son&#x2F;daughter showed you how to use &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;&#x2F;acronym&gt; the first time you got on the Internet.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Anyone reading this has any other reasons please to speak up so I can add to this list :).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Beta version of Mozilla website</title>
    <published>2003-10-15T15:24:23+00:00</published>
    <updated>2003-10-15T15:24:23+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/15/beta-version-of-mozilla-website/"/>
    <id>https://chuyeow.wtf/2003/10/15/beta-version-of-mozilla-website/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/15/beta-version-of-mozilla-website/">&lt;p&gt;Have you seen the &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;website-beta&#x2F;&quot; title=&quot;Beta version of the new Mozilla website&quot;&gt;beta version&lt;&#x2F;a&gt; of the new &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;&quot;&gt;Mozilla&lt;&#x2F;a&gt; website? It&#x27;s pretty! It&#x27;s tableless! If you hover over the form elements at the top right, you&#x27;ll notice that they take advantage of the :focus pseudo-class that works in Mozilla browsers (it doesn&#x27;t work in &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;&#x2F;acronym&gt;). And the mini-tabs for the navigation bar at the top are neat too. Ah finally a nice-looking face for the Mozilla Foundation - something I can show converts-to-be without having to hide the ugly-as-my-mug website. Although the current one is pretty decent, but it isn&#x27;t really that sleek.&lt;&#x2F;p&gt;
&lt;p&gt;Great job Mozilla.org webmaster, whoever you are!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: I found out soon after posting that the person behind the redesign was none other than &lt;a href=&quot;http:&#x2F;&#x2F;mezzoblue.com&#x2F;&quot; title=&quot;Dave Shea&#x27;s blog - mezzoblue&quot;&gt;Dave Shea&lt;&#x2F;a&gt;, that guy whose blog &lt;a href=&quot;http:&#x2F;&#x2F;mezzoblue.com&#x2F;&quot;&gt;mezzoblue&lt;&#x2F;a&gt; is one of my favorite reads (thanks to &lt;a href=&quot;http:&#x2F;&#x2F;codemuffin.geekblog.net&#x2F;&quot; title=&quot;Kyrah&#x27;s blog - Operation Codemuffin&quot;&gt;Kyrah&lt;&#x2F;a&gt; for pointing that out too). Dave has made some entries on his thoughts behind his mozilla.org redesign &lt;a href=&quot;http:&#x2F;&#x2F;mezzoblue.com&#x2F;archives&#x2F;2003&#x2F;10&#x2F;16&#x2F;mozillaorg_n&#x2F;&quot; title=&quot;mozilla.org notes&quot;&gt;here&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;mezzoblue.com&#x2F;archives&#x2F;2003&#x2F;10&#x2F;15&#x2F;mozillaorg_r&#x2F;&quot; title=&quot;mozilla.org redesign&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Firebird 0.7 released!</title>
    <published>2003-10-15T11:04:51+00:00</published>
    <updated>2003-10-15T11:04:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/15/mozilla-firebird-07-released/"/>
    <id>https://chuyeow.wtf/2003/10/15/mozilla-firebird-07-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/15/mozilla-firebird-07-released/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot;&gt;Mozilla Firebird 0.7&lt;&#x2F;a&gt; has been released! Just a quick entry because I&#x27;m at school right now.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;thunderbird&#x2F;&quot;&gt;Thunderbird 0.3&lt;&#x2F;a&gt; has also been released and so too &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;releases&#x2F;#1.5&quot;&gt;Mozilla 1.5&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I think as I&#x27;m writing this they&#x27;re updating the website.&lt;&#x2F;p&gt;
&lt;p&gt;Update: I just had to post this even when I was on campus - I was actually visiting the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;firebird&#x2F;releases&#x2F;&quot;&gt;releases directory&lt;&#x2F;a&gt; now and then while doing my work because I knew it was going to be released soon. I&#x27;m such a nerd ;)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Got Lone Wolf?</title>
    <published>2003-10-13T07:47:37+00:00</published>
    <updated>2003-10-13T07:47:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/13/got-lone-wolf/"/>
    <id>https://chuyeow.wtf/2003/10/13/got-lone-wolf/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/13/got-lone-wolf/">&lt;p&gt;Anyone remember or even actually heard of the &lt;a href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;exec&#x2F;obidos&#x2F;tg&#x2F;detail&#x2F;-&#x2F;0425084361&#x2F;qid=1066026290&#x2F;sr=1-2&#x2F;ref=sr_1_2&#x2F;104-6482802-2359109?v=glance&amp;s=books&quot; title=&quot;Flight from the Dark (Lone Wolf, Book 1) at Amazon.com&quot;&gt;Lone Wolf&lt;&#x2F;a&gt; series of gamebooks? That was my first ever contact with the world of medieval fantasy which made me the big fan of the fantasy genre that I am now. I remember that it was back when I was in primary school (or elementary school if you prefer) that my then best friend introduced me to this thing called gamebooks and hey, you know, Lone Wolf is the best. It wasn&#x27;t long before I bought my first Lone Wolf gamebooks. I even remember clearly I bought &lt;a href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;exec&#x2F;obidos&#x2F;tg&#x2F;detail&#x2F;-&#x2F;0425084191&#x2F;ref=pd_sim_books_2&#x2F;104-6482802-2359109?v=glance&amp;s=books&quot; title=&quot;Chasm of Doom at Amazon.com&quot;&gt;Book 4: Chasm of Doom&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;exec&#x2F;obidos&#x2F;tg&#x2F;detail&#x2F;-&#x2F;042508440X&#x2F;ref=pd_sim_books_4&#x2F;104-6482802-2359109?v=glance&amp;s=books&quot; title=&quot;Shadow on the Sand at Amazon.com&quot;&gt;Book 5: Shadow on the Sand&lt;&#x2F;a&gt; - that was about 13 years back.&lt;&#x2F;p&gt;
&lt;p&gt;I don&#x27;t think I really loooked back - I&#x27;ve most of the Lone Wolf gamebooks up to the Lone Wolf Grandmaster series, when I outgrew gamebooks and converted to reading fantasy novels. I never left Lone Wolf though as I continued to read the novelized version of Lone Wolf called the &lt;a href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;exec&#x2F;obidos&#x2F;tg&#x2F;detail&#x2F;-&#x2F;0425123146&#x2F;qid=1066026770&#x2F;sr=1-7&#x2F;ref=sr_1_7&#x2F;104-6482802-2359109?v=glance&amp;s=books&quot; title=&quot;Eclipse of the Kai (Legends of Lone Wolf, No 1) at Amazon.com&quot;&gt;Legends of Lone Wolf series&lt;&#x2F;a&gt;. Unfortunately, the series was prematurely terminated at book 12, which left me high and dry. I even wondered if something had happened to the author. To this day I don&#x27;t know what happened, but I surmise it&#x27;s due to publisher difficulties. It was an excellent series - I like to think that it was the reason behind my good English result at the &lt;acronym title=&quot;General Cambridge Examinations&quot;&gt;GCE&lt;&#x2F;acronym&gt; &#x27;O&#x27;-levels.&lt;&#x2F;p&gt;
&lt;p&gt;Well, so that was quite a bit of personal history that isn&#x27;t very interesting, so I&#x27;ll cut to the chase. For Lone Wolf fans, you&#x27;d be interested to know of &lt;a href=&quot;http:&#x2F;&#x2F;www.projectaon.org&#x2F;&quot;&gt;Project Aon&lt;&#x2F;a&gt; if you don&#x27;t already. I came across the site recently with my &lt;a href=&quot;http:&#x2F;&#x2F;www.stumbleupon.com&#x2F;&quot;&gt;StumbleUpon&lt;&#x2F;a&gt; toolbar. Project Aon offers free online versions of the Lone Wolf gamebooks (currently up to book 14) and there are plans to include the Freeway Warrior series (also a good gamebook series!) also by Joe Dever. There&#x27;s even a &lt;a href=&quot;http:&#x2F;&#x2F;www.projectaon.org&#x2F;statskeeper&#x2F;lw&#x2F;index.htm&quot;&gt;StatsKeeper&lt;&#x2F;a&gt; script that keeps track of your stats, inventory, experience points and stuff like that. Don&#x27;t worry about the legality - the books are donated free by Joe Dever himself. As for the books themselves, they&#x27;re full reproductions of the books only you have the convenience of clicking a link to go to, say, section 333, instead of having to flip the pages.&lt;&#x2F;p&gt;
&lt;p&gt;A big thank you to Joe Dever for his generosity and to the Project Aon staff for their dedication!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Unbelievable optical illusion</title>
    <published>2003-10-10T17:23:10+00:00</published>
    <updated>2003-10-10T17:23:10+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/10/unbelievable-optical-illusion/"/>
    <id>https://chuyeow.wtf/2003/10/10/unbelievable-optical-illusion/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/10/unbelievable-optical-illusion/">&lt;p&gt;This one&#x27;s pretty neat because it&#x27;s so damn unbelievable:&lt;br &#x2F;&gt;
&lt;img alt=&quot;optil.jpg&quot; src=&quot;&#x2F;assets&#x2F;optical.jpg&quot; width=&quot;350&quot; height=&quot;272&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you don&#x27;t believe it, use a color picker tool (like &lt;a href=&quot;http:&#x2F;&#x2F;www.iconico.com&#x2F;colorpic&#x2F;&quot;&gt;Color Picker&lt;&#x2F;a&gt;) or crop out the 2 squares with a graphics program.&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;www-bcs.mit.edu&#x2F;people&#x2F;adelson&#x2F;checkershadow_illusion.html&quot;&gt;Edward H. Adelson&#x27;s Checkershadow Illusion&lt;&#x2F;a&gt; with &lt;a href=&quot;http:&#x2F;&#x2F;www-bcs.mit.edu&#x2F;people&#x2F;adelson&#x2F;checkershadow_description.html&quot;&gt;explanation&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mimicking Magazines, with CSS</title>
    <published>2003-10-10T15:58:58+00:00</published>
    <updated>2003-10-10T15:58:58+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/10/mimicking-magazines-with-css/"/>
    <id>https://chuyeow.wtf/2003/10/10/mimicking-magazines-with-css/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/10/mimicking-magazines-with-css/">&lt;p&gt;Anton Andreasson of &lt;a href=&quot;http:&#x2F;&#x2F;standardice.com&#x2F;&quot;&gt;Standardice&lt;&#x2F;a&gt; has put together &quot;&lt;a href=&quot;http:&#x2F;&#x2F;standardice.com&#x2F;experimental&#x2F;magazines.html&quot;&gt;Mimicking Magazines&lt;&#x2F;a&gt;&quot; which is a collection of web styles that mimic those of magazines (the kind that are made up of trees), using CSS. Very nice. Should get better as more is collected. Maybe he should allow user-contributions or put together something like a &lt;a href=&quot;http:&#x2F;&#x2F;www.csszengarden.com&#x2F;&quot;&gt;CSS Zen Garden&lt;&#x2F;a&gt; thing.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google irony</title>
    <published>2003-10-10T15:38:25+00:00</published>
    <updated>2003-10-10T15:38:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/10/google-irony/"/>
    <id>https://chuyeow.wtf/2003/10/10/google-irony/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/10/google-irony/">&lt;p&gt;Check this out: Google&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;google.com&#x2F;search?q=cache:zhool8dxBV4J:www.google.com&#x2F;+&amp;hl=en&amp;ie=UTF-8&quot;&gt;cache&lt;&#x2F;a&gt; of Google.&lt;&#x2F;p&gt;
&lt;p&gt;And this bit quoted from that page:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
Google is not affiliated with the authors of this page nor responsible for its content.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;www.jroller.com&#x2F;comments&#x2F;deep&#x2F;Weblog&#x2F;google_is_not_responsible_for&quot; title=&quot;deep:code - Roman Porotnikov&#x27;s weblog entry &quot;&gt;Google is not responsible for itself&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Winner of SitePointForums.com CSS contest announced</title>
    <published>2003-10-08T15:49:56+00:00</published>
    <updated>2003-10-08T15:49:56+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/08/winner-of-sitepointforumscom-css-contest-announced/"/>
    <id>https://chuyeow.wtf/2003/10/08/winner-of-sitepointforumscom-css-contest-announced/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/08/winner-of-sitepointforumscom-css-contest-announced/">&lt;p&gt;A while back I &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;09&#x2F;02&#x2F;css_contest_at_sitepointforumscom.php&quot; title=&quot;Weblog entry on CSS contest at SitePointForums.com&quot;&gt;wrote on&lt;&#x2F;a&gt; the CSS contest at SitePointForums.com called &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;showthread.php?threadid=116294&quot;&gt;The Beauty of Style&lt;&#x2F;a&gt;. Well, after some hiccups over the judging, the winner has finally been &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;showthread.php?threadid=131835&quot; title=&quot;Contest winner announcement thread at SitePoint Forums&quot;&gt;announced&lt;&#x2F;a&gt;. All credit to &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;member.php?userid=22841&quot; title=&quot;zoo&#x27;s user profile&quot;&gt;zoo&lt;&#x2F;a&gt; (Rick) for handling the contest very nicely despite the many difficulties and speed bumps.&lt;&#x2F;p&gt;
&lt;p&gt;Personally, I liked &lt;a href=&quot;http:&#x2F;&#x2F;contest.prestontalk.com&#x2F;index&#x2F;zanzibar&#x2F;&quot;&gt;Zanzibar&lt;&#x2F;a&gt; as well, and would have liked it to win over &lt;a href=&quot;http:&#x2F;&#x2F;contest.prestontalk.com&#x2F;index&#x2F;deadend_prophecy&#x2F;&quot;&gt;Deadend Prophecy&lt;&#x2F;a&gt; which I&#x27;ve found breaks in IE 5.0 (on Windows). Nevertheless, it&#x27;s still a stunning design, and I don&#x27;t really give too much of a care for IE 5.0 myself.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Backup for Firebird and Thunderbird</title>
    <published>2003-10-06T03:43:54+00:00</published>
    <updated>2003-10-06T03:43:54+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/06/mozilla-backup-for-firebird-and-thunderbird/"/>
    <id>https://chuyeow.wtf/2003/10/06/mozilla-backup-for-firebird-and-thunderbird/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/06/mozilla-backup-for-firebird-and-thunderbird/">&lt;p&gt;Pavel Cvrcek&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;backup.jasnapaka.com&#x2F;&quot; title=&quot;Mozilla Backup&quot;&gt;Mozilla Backup&lt;&#x2F;a&gt; utility (the 1.1 Beta2 version) now supports backing up and restoring of Firebird and Thunderbird profiles. It was disappointing to find that it worked only for the Mozilla suite when I last tried it. Anyhow, it works absolutely fine and it&#x27;s a great tool. Now if only there were a Linux version so I can bring my finely-tuned Firebird profile into my Linux box.&lt;&#x2F;p&gt;
&lt;p&gt;Source: &lt;a href=&quot;http:&#x2F;&#x2F;mozillazine.org&#x2F;talkback.html?article=3778&quot; title=&quot;MozillaZine.org news article&quot;&gt;MozillaZine&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The monthly report - September 2003</title>
    <published>2003-10-01T02:51:12+00:00</published>
    <updated>2003-10-01T02:51:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/10/01/the-monthly-report-september-2003/"/>
    <id>https://chuyeow.wtf/2003/10/01/the-monthly-report-september-2003/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/10/01/the-monthly-report-september-2003/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot; title=&quot;redemption in a blog&quot;&gt;redemption in a blog&lt;&#x2F;a&gt; received 9039 visits for this month of September 2003, working to an average of 301 hits per day. This entry also marks my 100th entry - the 3rd of many useless statistics to come in this entry.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Most visited entries&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;My entry linking to a &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;09&#x2F;13&#x2F;naruto_cosplay_picture.php&quot;&gt;Naruto cosplay picture&lt;&#x2F;a&gt; was rather well-visited, mostly because of Google. (&lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=naruto+cosplay&quot;&gt;2nd on Google&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;09&#x2F;01&#x2F;flash_your_keyboard_lights_with_java.php&quot;&gt;Flash your keyboard lights with Java&lt;&#x2F;a&gt; is also something interesting that I picked up from someone else&#x27;s weblog. Pretty neat.&lt;&#x2F;li&gt;
&lt;li&gt;The most recent entry on &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;09&#x2F;25&#x2F;kids_these_days.php&quot;&gt;Kids these days...&lt;&#x2F;a&gt; was a more &quot;human interest&quot; entry which I&#x27;d hardly ever done since I started blogging.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Other interesting stuff&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;September 2003 is the best ever month for me in a long long time, for personal reasons which I will not divulge. Yay!&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;ve added a &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;banners&#x2F;&quot; title=&quot;Mozilla banners&quot;&gt;Mozilla banner&lt;&#x2F;a&gt; to the main page of my weblog.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Once again, as always, thanks for reading!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Past monthly reports&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;09&#x2F;01&#x2F;the_monthly_report_august_2003.php&quot; title=&quot;Monthly report for August 2003&quot;&gt;August 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;30&#x2F;the_monthly_report_july_2003.php&quot; title=&quot;Monthly report for July 2003&quot;&gt;July 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Kids these days...</title>
    <published>2003-09-25T14:07:23+00:00</published>
    <updated>2003-09-25T14:07:23+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/25/kids-these-days/"/>
    <id>https://chuyeow.wtf/2003/09/25/kids-these-days/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/25/kids-these-days/">&lt;p&gt;Just today, I was waiting in the queue for the bus when the secondary school girl (probably 14 years of age) who was behind me in the queue dropped a coin. I think it was a 20 cent (the currency is the Singapore Dollar) coin. And she didn&#x27;t pick it up. I&#x27;m pretty sure she&#x27;d noticed it, and it is easily within reach if she just bent down. She wasn&#x27;t carrying anything that would inconvenience her picking up the coin. She just stared at it for a moment and then promptly ignored it as she whipped out her Nokia 8310 handphone and started pressing the buttons.&lt;&#x2F;p&gt;
&lt;p&gt;I remember back when a 10 cent coin used to matter (10 cents could get you 3 sweets), not to mention a 20 cent coin. In fact I&#x27;d pick it up if I dropped it, now. Why not? Should anyone feel embarassed to pick up a 20 cent coin? No. Should a 20 cent coin have so little value that it isn&#x27;t worth the effort to pick it up when dropped? Not yet (at least until inflation gets real high). I realize I&#x27;m being critical of the young lady without giving her the benefit of the doubt, but I make no excuse for that.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Vinnie on tables and CSS</title>
    <published>2003-09-23T16:28:17+00:00</published>
    <updated>2003-09-23T16:28:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/23/vinnie-on-tables-and-css/"/>
    <id>https://chuyeow.wtf/2003/09/23/vinnie-on-tables-and-css/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/23/vinnie-on-tables-and-css/">&lt;p&gt;A fellow Advisor at &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;www.vinniegarcia.com&#x2F;&quot;&gt;Vinnie Garcia&lt;&#x2F;a&gt;, has a &lt;a href=&quot;http:&#x2F;&#x2F;blog.vinniegarcia.com&#x2F;&quot;&gt;blog&lt;&#x2F;a&gt;! And how&#x27;s this for a &lt;a href=&quot;http:&#x2F;&#x2F;blog.vinniegarcia.com&#x2F;oldstuff&#x2F;000003.html&quot; title=&quot;On tables, layouts, and CSS&quot;&gt;3rd blog entry&lt;&#x2F;a&gt;? In that entry titled &quot;&lt;a href=&quot;http:&#x2F;&#x2F;blog.vinniegarcia.com&#x2F;oldstuff&#x2F;000003.html&quot;&gt;On tables, layouts, and CSS&lt;&#x2F;a&gt;&quot;, Vinnie makes a very coherent argument on using tables for layouts - probably one of the most practical viewpoints to date.&lt;&#x2F;p&gt;
&lt;p&gt;We can love using CSS for our layouts fanatically, but we must also come to realise that sometimes tables will allow you to design truly cross-browser sites. At this time I&#x27;ve yet to find a 3-column CSS layout that doesn&#x27;t break with varying column heights, without resorting to hacks. If a hack is required, I think I&#x27;d stick to using a table, thank you. At least until browsers are capable.&lt;&#x2F;p&gt;
&lt;p&gt;Vinnie sums up pretty nicely with this &lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;I guess the moral of this rant is to remind everyone that while using Web standards is a smarter way to work, let&#x27;s not get bogged down in theory and worrying about validation.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>A List Apart redesign coming soon</title>
    <published>2003-09-23T16:07:39+00:00</published>
    <updated>2003-09-23T16:07:39+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/23/a-list-apart-redesign-coming-soon/"/>
    <id>https://chuyeow.wtf/2003/09/23/a-list-apart-redesign-coming-soon/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/23/a-list-apart-redesign-coming-soon/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.zeldman.com&#x2F;&quot; title=&quot;Jeffery Zeldman&#x27;s weblog&quot;&gt;Zeldman&lt;&#x2F;a&gt; has given us a sneak peek into the new &lt;a href=&quot;http:&#x2F;&#x2F;www.alistapart.com&#x2F;index.html&quot;&gt;A List Apart&lt;&#x2F;a&gt;. I&#x27;m not too sure I like the pinkish tones. Probably has to do with the online dating sites that now support ALA(A List Apart).&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Supported by XDate Speed Dating, 30Dates Speed Dating, and for free online dating, xdate.com.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;There&#x27;s no doubt it&#x27;ll look awesome as it was before.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Humour for academia - vaguely intellectual humour</title>
    <published>2003-09-22T19:04:13+00:00</published>
    <updated>2003-09-22T19:04:13+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/22/humour-for-academia-vaguely-intellectual-humour/"/>
    <id>https://chuyeow.wtf/2003/09/22/humour-for-academia-vaguely-intellectual-humour/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/22/humour-for-academia-vaguely-intellectual-humour/">&lt;p&gt;Thanks to &lt;a href=&quot;http:&#x2F;&#x2F;www.weirdbeard.co.uk&#x2F;blog&#x2F;&quot; title=&quot;Matt&#x27;s blog&quot;&gt;Matt Thornton&lt;&#x2F;a&gt; for pointing out this &lt;a href=&quot;http:&#x2F;&#x2F;www.weirdbeard.co.uk&#x2F;blog&#x2F;archives&#x2F;stuff&#x2F;haggis.pdf&quot;&gt;technical paper on Haggis growth and the use of Remote Sensing and GIS&lt;&#x2F;a&gt; (PDF). No it&#x27;s not your run-of-the-mill technical paper. If you&#x27;re in need of a good laugh as I was, read that!&lt;&#x2F;p&gt;
&lt;p&gt;After reading a whole bunch of (non-humourous) technical papers that one really strikes me as being particularly funny.&lt;&#x2F;p&gt;
&lt;p&gt;On an unrelated note, wish me luck for tommorrow. I really really need it.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>StumbleUpon toolbar</title>
    <published>2003-09-20T09:21:44+00:00</published>
    <updated>2003-09-20T09:21:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/20/stumbleupon-toolbar/"/>
    <id>https://chuyeow.wtf/2003/09/20/stumbleupon-toolbar/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/20/stumbleupon-toolbar/">&lt;p&gt;I&#x27;d recently installed the &lt;a href=&quot;http:&#x2F;&#x2F;stumbleupon.mozdev.org&#x2F;&quot;&gt;StumbleUpon extension for Mozilla&lt;&#x2F;a&gt; when I came across it being listed as mozdev&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.mozdev.org&#x2F;featured&#x2F;index.html&quot;&gt;Project of the Week&lt;&#x2F;a&gt; for the week of September 8, 2003. StumbleUpon is not just a Mozilla thing - its &lt;a href=&quot;http:&#x2F;&#x2F;www.stumbleupon.com&#x2F;&quot; title=&quot;StumbleUpon homepage&quot;&gt;homepage&lt;&#x2F;a&gt; has toolbars for IE and Netscape 7 too.&lt;&#x2F;p&gt;
&lt;p&gt;What it does is to allow you to &#x27;stumble upon&#x27; sites that are recommended by peers with interests similar to your own. You can recommend (as well as disapprove of) sites yourself too. Pretty neat idea if it doesn&#x27;t get abused by webmasters.&lt;&#x2F;p&gt;
&lt;p&gt;And before you ask, yes, I was bored - I was &quot;running out&quot; of sites to visit.&lt;&#x2F;p&gt;
&lt;p&gt;I did manage to uncover some interesting sites in my stumbles. Like &lt;a href=&quot;http:&#x2F;&#x2F;www.ucc.ie&#x2F;cgi-bin&#x2F;acronym&quot;&gt;Acronym Server&lt;&#x2F;a&gt; (decodes acronyms - great stuff!), &lt;a href=&quot;http:&#x2F;&#x2F;www.makeashorterlink.com&#x2F;&quot;&gt;Make A Shorter Link&lt;&#x2F;a&gt;, a feisty new &lt;a href=&quot;http:&#x2F;&#x2F;www.arklinux.org&#x2F;index2.php&quot; title=&quot;Ark Linux&quot;&gt;Linux distro&lt;&#x2F;a&gt;, and even this essay on &quot;&lt;a href=&quot;http:&#x2F;&#x2F;mindprod.com&#x2F;unmain.html&quot;&gt;How to Write Unmaintainable Code&lt;&#x2F;a&gt;&quot;!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Hacker ethics - hacking warning received</title>
    <published>2003-09-14T04:40:03+00:00</published>
    <updated>2003-09-14T04:40:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/14/hacker-ethics-hacking-warning-received/"/>
    <id>https://chuyeow.wtf/2003/09/14/hacker-ethics-hacking-warning-received/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/14/hacker-ethics-hacking-warning-received/">&lt;p&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: I can&#x27;t confirm if it was a hoax or not, because my client hasn&#x27;t reported any problems. They were talking with their webhost about it, in any case. I did try to access their site during the indicated takedown period, and it was inaccessible, but it could very well be due to the webhost taking preventive measures by taking down his server. Will update when I find out. It is also interesting to note that &lt;a href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;archive&#x2F;2003&#x2F;09&#x2F;14&#x2F;sillySeason&quot;&gt;Simon Willison&lt;&#x2F;a&gt; has received the same email (see his comments in that blog entry).&lt;&#x2F;p&gt;
&lt;p&gt;One of my clients told me today that they received this message via the contact form at their website:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
Dear Administrator&lt;&#x2F;p&gt;
&lt;p&gt;We are sorry to inform you that your site has been targeted for hacking&lt;br &#x2F;&gt;
practice. The monthly hacking practice is organized since 1991. The targets&lt;br &#x2F;&gt;
are randomly chosen.&lt;&#x2F;p&gt;
&lt;p&gt;We are sorry if your server is down, damged or formated. The first round&lt;br &#x2F;&gt;
of attack starts on 15th Sept 23:56, there will be at most 5 rounds, each&lt;br &#x2F;&gt;
last for 5-10 hours. Please backup your data.&lt;&#x2F;p&gt;
&lt;p&gt;The hackers assigned to your server are level 2 hackers. (ranking from&lt;br &#x2F;&gt;
level 1 to 7 by increasing ability)&lt;&#x2F;p&gt;
&lt;p&gt;note: this message is sent from an randomly picked unknown singapore host.&lt;br &#x2F;&gt;
please go ahead tracing. reply will not be receivable.&lt;&#x2F;p&gt;
&lt;p&gt;Regards,&lt;br &#x2F;&gt;
CHU - Chinese Hackers&#x27; Union 2003&lt;br &#x2F;&gt;
http:&#x2F;&#x2F;www.cnhacker.net&#x2F;homepage.htm
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;This is the first time I&#x27;ve encountered something like this and I&#x27;m pleasantly surprised by the forewarning given. I&#x27;ve backed everything up but I also wonder if there&#x27;s anything their web hosting provider can or should do. Does anyone have any experience with hacking attempts and can provide any advice?&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, this is just a theory, but I can pretty much guess that some of these hackers are members of some educational institutions (specifically universities) in Singapore, considering the nature of the client&#x27;s website. Interesting. It&#x27;s not like I&#x27;m going to do anything to them though, I think partly because they were ever so nice to give a warning and partly because there&#x27;s really nothing we can do if the hackers are skilled enough.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, if you check out their (CHU&#x27;s) website, the message there translates roughly to this:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;The onion reorganization is now completed, Everyone please pass the message that this China Hacker Union will soon be reopened.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>Naruto cosplay picture</title>
    <published>2003-09-13T14:13:33+00:00</published>
    <updated>2003-09-13T14:13:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/13/naruto-cosplay-picture/"/>
    <id>https://chuyeow.wtf/2003/09/13/naruto-cosplay-picture/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/13/naruto-cosplay-picture/">&lt;p&gt;Fans of the Naruto anime and&#x2F;or manga would love to see this &lt;a href=&quot;http:&#x2F;&#x2F;anna-neko.nu&#x2F;katsu2k2&#x2F;naruto-gumi2.jpg&quot; title=&quot;Naruto cosplay photo&quot; target=&quot;_blank&quot;&gt;cosplay photo&lt;&#x2F;a&gt;. Got this off this &lt;a href=&quot;http:&#x2F;&#x2F;forums.animesuki.com&#x2F;thread.php?threadid=10551&quot;&gt;thread&lt;&#x2F;a&gt; at &lt;a href=&quot;http:&#x2F;&#x2F;forums.animesuki.com&#x2F;&quot;&gt;AnimeSuki.com forums&lt;&#x2F;a&gt;. There are many many more photos in that thread!&lt;&#x2F;p&gt;
&lt;p&gt;Quoting Dopeskills:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;Since when did Sakura learn Fatass no Jutso (sic)?!?&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Cosplay means &quot;Costume Play&quot; for those of you who don&#x27;t know, like how I didn&#x27;t and had to Google for it - learning something new everyday.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>CSS rollovers without preloading</title>
    <published>2003-09-13T13:59:30+00:00</published>
    <updated>2003-09-13T13:59:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/13/css-rollovers-without-preloading/"/>
    <id>https://chuyeow.wtf/2003/09/13/css-rollovers-without-preloading/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/13/css-rollovers-without-preloading/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.pixy.cz&#x2F;&quot;&gt;Petr Stanicek&lt;&#x2F;a&gt; has devised a clever technique to do image rollovers without resorting to JavaScript and with no need for preloading. Check out the &lt;a href=&quot;http:&#x2F;&#x2F;www.pixy.cz&#x2F;blogg&#x2F;clanky&#x2F;cssnopreloadrollovers&#x2F;example.html&quot; title=&quot;Some examples&quot;&gt;examples&lt;&#x2F;a&gt; to see if you can figure it out for yourself before reading his explanation - that &quot;eureka!&quot; feeling would be that much more gratifying.&lt;&#x2F;p&gt;
&lt;p&gt;For the eternally constipated, zoom over to &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.pixy.cz&#x2F;blogg&#x2F;clanky&#x2F;cssnopreloadrollovers&#x2F;&quot;&gt;Fast rollovers, no preload needed&lt;&#x2F;a&gt;&quot; for the explanation. (via &lt;a href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;archive&#x2F;2003&#x2F;09&#x2F;10&#x2F;jsFreeRollovers&quot;&gt;Simon Willison&#x27;s Weblog&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Your Blogger code</title>
    <published>2003-09-11T17:11:45+00:00</published>
    <updated>2003-09-11T17:11:45+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/11/your-blogger-code/"/>
    <id>https://chuyeow.wtf/2003/09/11/your-blogger-code/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/11/your-blogger-code/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.leatheregg.com&#x2F;bloggercode&#x2F;&quot;&gt;The Blogger Code&lt;&#x2F;a&gt; lets you describe your blogging life as a code (much like &lt;a href=&quot;http:&#x2F;&#x2F;www.geekcode.com&#x2F;geek.html&quot;&gt;The Geek Code&lt;&#x2F;a&gt;) by answering a dozen questions. (via &lt;a href=&quot;http:&#x2F;&#x2F;www.adampolselli.com&#x2F;archives&#x2F;2003&#x2F;09&#x2F;08&#x2F;mamma_mia.php&quot;&gt;AdamPolselli.com&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;My blogger code:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;B2 d t+ k s u f i o x-- e- l- c+&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;That doesn&#x27;t make too much sense - at least without a &lt;a href=&quot;http:&#x2F;&#x2F;travis.kroh.net&#x2F;archives&#x2F;blogger_decoder.html&quot;&gt;decoder&lt;&#x2F;a&gt; it doesn&#x27;t. Here&#x27;s my blogger code, &lt;a href=&quot;http:&#x2F;&#x2F;travis.kroh.net&#x2F;blogger_decoder&#x2F;?code=B2%20d%20t%2B%20k%20s%20u%20f%20i%20o%20x--%20e-%20l-%20c%2B&quot;&gt;decoded&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>20 Questions - neat pseudo-classifier</title>
    <published>2003-09-07T13:25:37+00:00</published>
    <updated>2003-09-07T13:25:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/07/20-questions-neat-pseudo-classifier/"/>
    <id>https://chuyeow.wtf/2003/09/07/20-questions-neat-pseudo-classifier/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/07/20-questions-neat-pseudo-classifier/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.20q.net&#x2F;&quot;&gt;20 Questions&lt;&#x2F;a&gt; is a neat game that shows off what a little A.I. can some (hard-coded) learning can do.&lt;&#x2F;p&gt;
&lt;p&gt;The premise of the game is to:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
Think of an object and the A.I. will try to figure out what you are thinking by asking simple questions.
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;It doesn&#x27;t cease to amaze me, even though I&#x27;ve made it flounder on &quot;mooncake&quot;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>CSS contest at SitePointForums.com</title>
    <published>2003-09-02T14:39:56+00:00</published>
    <updated>2003-09-02T14:39:56+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/02/css-contest-at-sitepointforumscom/"/>
    <id>https://chuyeow.wtf/2003/09/02/css-contest-at-sitepointforumscom/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/02/css-contest-at-sitepointforumscom/">&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt; community has recently organized a CSS website design competition called &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;showthread.php?threadid=116294&quot;&gt;The Beauty of Style&lt;&#x2F;a&gt;, very much in the style of &lt;a href=&quot;http:&#x2F;&#x2F;csszengarden.com&#x2F;&quot;&gt;CSS Zen Garden&lt;&#x2F;a&gt;. If you&#x27;re thinking of taking part, sorry, the submission date is over, and judging is currently in progress.&lt;&#x2F;p&gt;
&lt;p&gt;You can take a look at the &lt;a href=&quot;http:&#x2F;&#x2F;contest.prestontalk.com&#x2F;list&quot;&gt;submitted entries&lt;&#x2F;a&gt; though. Some of them are very good, like &lt;a href=&quot;http:&#x2F;&#x2F;contest.prestontalk.com&#x2F;index&#x2F;Crispy&#x2F;&quot;&gt;Crispy&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;contest.prestontalk.com&#x2F;index&#x2F;zanzibar&#x2F;&quot;&gt;Zanzibar&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;contest.prestontalk.com&#x2F;index&#x2F;lichen&#x2F;&quot;&gt;Lichen&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;contest.prestontalk.com&#x2F;index&#x2F;SPstyle&#x2F;&quot;&gt;SP Style&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;contest.prestontalk.com&#x2F;index&#x2F;the_box&#x2F;&quot;&gt;The Box&lt;&#x2F;a&gt; (slightly broken in Mozilla).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Flash your keyboard lights with Java</title>
    <published>2003-09-01T16:54:29+00:00</published>
    <updated>2003-09-01T16:54:29+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/01/flash-your-keyboard-lights-with-java/"/>
    <id>https://chuyeow.wtf/2003/09/01/flash-your-keyboard-lights-with-java/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/01/flash-your-keyboard-lights-with-java/">&lt;p&gt;From &lt;a href=&quot;http:&#x2F;&#x2F;atog.typepad.com&#x2F;atog&#x2F;2003&#x2F;09&#x2F;keyboard_spinne.html&quot; title=&quot;keyboard spinner&quot;&gt;atog&lt;&#x2F;a&gt;: found this very interesting &lt;a href=&quot;http:&#x2F;&#x2F;weblogs.java.net&#x2F;pub&#x2F;wlg&#x2F;403&quot;&gt;keyboard spinner&lt;&#x2F;a&gt; with code (in Java) posted. I tried it out and it works! There&#x27;s a hypnotic effect watching the lights flashing.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The monthly report - August 2003</title>
    <published>2003-09-01T13:52:32+00:00</published>
    <updated>2003-09-01T13:52:32+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/09/01/the-monthly-report-august-2003/"/>
    <id>https://chuyeow.wtf/2003/09/01/the-monthly-report-august-2003/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/09/01/the-monthly-report-august-2003/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot; title=&quot;redemption in a blog&quot;&gt;redemption in a blog&lt;&#x2F;a&gt; received 6701 visits for this month of August 2003. This is also the first time my weblog has gotten a Google PageRank, the first being 3 and finally increased to 5 after the recent Google major update. What can I say? Google loves weblogs!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Most visited entries&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I&#x27;d recently implemented a PHP hack to &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;08&#x2F;16&#x2F;tracking_entry_referrers_with_php_in_mt.php&quot;&gt;keep track of the referrers for each entry&lt;&#x2F;a&gt; in this MovableType blog, and it happens to be the most visited entry in my blog (hmm... it even has a PageRank of 4 - must be those trackbacks and backward links).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;08&#x2F;27&#x2F;free_classics_ebooks.php&quot;&gt;Free Classics eBooks&lt;&#x2F;a&gt; was surprisingly well-visited. Must be the word &#x27;free&#x27; must have caught some attention.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;08&#x2F;21&#x2F;dhtml_lemmings.php&quot;&gt;DHTML Lemmings&lt;&#x2F;a&gt; - this I can understand. It&#x27;s Lemmings on your web browser! Lemmings!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;08&#x2F;28&#x2F;stumped_by_regular_expressions_try_the_regex_coach.php&quot;&gt;Stumped by regular expressions? Try the Regex Coach&lt;&#x2F;a&gt; points out the very nice &lt;a href=&quot;http:&#x2F;&#x2F;www.weitz.de&#x2F;regex-coach&#x2F;&quot;&gt;Regex Coach&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;08&#x2F;24&#x2F;natures_flawed_programming.php&quot;&gt;Nature&#x27;s flawed programming&lt;&#x2F;a&gt; - interesting dung beetle trivia.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Other interesting stuff&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;For some unknown reason, pages from https:&#x2F;&#x2F;chuyeow.wtf&#x2F; were unlisted on Google for a few weeks. They have started to re-appear in the recent major Google update. Why did they disappear? Some possible reasons I thought of:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;my DNS not working correctly for a time: there was a time when DNS stopped working from several locations, but my host promptly resolved this.&lt;&#x2F;li&gt;
&lt;li&gt;my updating of blog pages from HTML to .php pages: not likely, but the site did stop being listed almost immediately after I did the switch.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;m finding &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot; title=&quot;redemption in a blog&quot;&gt;redemption in a blog&lt;&#x2F;a&gt; has made a few people&#x27;s blogrolls and feed subscriptions (like &lt;a href=&quot;http:&#x2F;&#x2F;www.bloglines.com&#x2F;&quot;&gt;Bloglines&lt;&#x2F;a&gt;. Who are you people? C&#x27;mon introduce yourselves and let me have a peek into why you read my weblog :).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Until next month, and thanks for reading!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Past monthly reports&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;30&#x2F;the_monthly_report_july_2003.php&quot; title=&quot;Monthly report for July 2003&quot;&gt;July 2003&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>XUL periodic table</title>
    <published>2003-08-31T08:35:27+00:00</published>
    <updated>2003-08-31T08:35:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/31/xul-periodic-table/"/>
    <id>https://chuyeow.wtf/2003/08/31/xul-periodic-table/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/31/xul-periodic-table/">&lt;p&gt;Alice Corbin has compiled &lt;a href=&quot;http:&#x2F;&#x2F;www.hevanet.com&#x2F;acorbin&#x2F;xul&#x2F;top.xul&quot; title=&quot;XUL widgets (requires a Mozilla browser)&quot;&gt;XUL Periodic Table&lt;&#x2F;a&gt; (requires a Mozilla browser) with all the widgets available in Mozilla XUL. Excellent reference, especially because the source is available at the click of the &#x27;Source&#x27; tab. Keep this close at hand whenever you&#x27;re writing a Mozilla application - you&#x27;ll thank her for it.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Links newsletter</title>
    <published>2003-08-30T08:15:25+00:00</published>
    <updated>2003-08-30T08:15:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/30/mozilla-links-newsletter/"/>
    <id>https://chuyeow.wtf/2003/08/30/mozilla-links-newsletter/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/30/mozilla-links-newsletter/">&lt;p&gt;The &quot;Mozilla Links newsletter&quot;:http:&#x2F;&#x2F;newsletter.mozdev.org&#x2F; is coming soon - 1st issue to be released on September 2, 2003. The Mozilla Links newsletter is a&lt;br &#x2F;&gt;
&lt;blockquote&gt;biweekly publication covering topics about the Mozilla open source project, the Mozilla Foundation, other Mozilla independent projects,  marketing, and mostly anything related to the Mozilla project.&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Looking forward to a good read of the latest Mozilla-related news, tips, and &quot;mozdev.org&quot;:http:&#x2F;&#x2F;mozdev.org&#x2F; projects.&lt;&#x2F;p&gt;
&lt;p&gt;Subscribe by sending an email to &lt;a href=&quot;mailto:newsletter-request@mozilla.org?subject=subscribe&quot;&gt;newsletter-request@mozilla.org&lt;&#x2F;a&gt; with &#x27;subscribe&#x27; in the subject line.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Stumped by regular expressions? Try the Regex Coach</title>
    <published>2003-08-28T18:21:26+00:00</published>
    <updated>2003-08-28T18:21:26+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/28/stumped-by-regular-expressions-try-the-regex-coach/"/>
    <id>https://chuyeow.wtf/2003/08/28/stumped-by-regular-expressions-try-the-regex-coach/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/28/stumped-by-regular-expressions-try-the-regex-coach/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;peter.mapledesign.co.uk&#x2F;weblog&#x2F;&quot;&gt;Peter Bowyer&lt;&#x2F;a&gt;&#x27;s entry on &lt;a href=&quot;http:&#x2F;&#x2F;peter.mapledesign.co.uk&#x2F;weblog&#x2F;archives&#x2F;the_regex_coach_interactive_regular_expressions.html&quot; title=&quot;The Regex Coach - interactive regular expressions&quot;&gt;The Regex Coach - interactive regular expressions&lt;&#x2F;a&gt; alerted me to the very excellent &lt;a href=&quot;http:&#x2F;&#x2F;www.weitz.de&#x2F;regex-coach&#x2F;&quot;&gt;Regex Coach&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The Regex Coach allows you to experiment with your regular expression (regex) and quickly determine how it would match your target string. It would be a very useful tool for trying out all any examples in any tutorials or books you may be reading. Also serves as a good testing platform for verifying your regex interactively (as opposed to writing it in your script, running it, and then checking the results). I wish I had this when I was learning regex.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>2nd installment of A Second Voice</title>
    <published>2003-08-28T16:38:51+00:00</published>
    <updated>2003-08-28T16:38:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/28/2nd-installment-of-a-second-voice/"/>
    <id>https://chuyeow.wtf/2003/08/28/2nd-installment-of-a-second-voice/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/28/2nd-installment-of-a-second-voice/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mezzoblue.com&#x2F;&quot; title=&quot;Dave Shea&#x27;s blog&quot;&gt;Dave Shea&lt;&#x2F;a&gt; has published the 2nd installment of &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.mezzoblue.com&#x2F;secondvoice&#x2F;&quot;&gt;A Second Voice&lt;&#x2F;a&gt;&quot;. This 2nd article is entitled &lt;a href=&quot;http:&#x2F;&#x2F;www.mezzoblue.com&#x2F;cgi-bin&#x2F;mt&#x2F;mezzo&#x2F;archives&#x2F;000238.asp&quot; title=&quot;Standards: Designing For the Future&quot;&gt;Standards: Designing For the Future&lt;&#x2F;a&gt; by &lt;a href=&quot;http:&#x2F;&#x2F;www.accessify.com&#x2F;blog&#x2F;&quot; title=&quot;Ian Lloyd&#x27;s blog&quot;&gt;Ian Lloyd&lt;&#x2F;a&gt;. In it, Ian gives a personal account of his experiences promoting &lt;a href=&quot;http:&#x2F;&#x2F;www.webstandards.org&#x2F;&quot;&gt;Web Standards&lt;&#x2F;a&gt; in the workplace and his thoughts on what&#x27;s holding people back from accepting and practising them.&lt;&#x2F;p&gt;
&lt;p&gt;As &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;08&#x2F;10&#x2F;web_designer_article_series_a_second_voice.php&quot;&gt;before&lt;&#x2F;a&gt;, I&#x27;m posting this in hope it gets passed on as &quot;word of blog&quot;. Essential reading for web developers and designers alike.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Free Classics eBooks</title>
    <published>2003-08-27T16:30:30+00:00</published>
    <updated>2003-08-27T16:30:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/27/free-classics-ebooks/"/>
    <id>https://chuyeow.wtf/2003/08/27/free-classics-ebooks/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/27/free-classics-ebooks/">&lt;p&gt;From &lt;a href=&quot;http:&#x2F;&#x2F;bharani.europe.webmatrixhosting.net&#x2F;PermaLink.aspx?guid=c6110787-d4dc-47be-9681-185629547893&quot;&gt;Bharani&#x27;s Blog&lt;&#x2F;a&gt;: Planet PDF is offering &lt;a href=&quot;http:&#x2F;&#x2F;www.codecuts.com&#x2F;mainpage.asp?webpageid=2330&quot; target=&quot;_blank&quot; title=&quot;Free PDF eBooks at PlanetPDF&quot;&gt;free PDF eBooks&lt;&#x2F;a&gt; of classics including Alice&#x27;s Adventures in Wonderland, Moby Dick, The War of the Worlds, Pride and Prejudice, and quite a number more - none of which I&#x27;ve read, except for Alice in Wonderland.&lt;&#x2F;p&gt;
&lt;p&gt;Not much of a classics person - give me Dragonlance, David Eddings, Raymond E. Feist anytime.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Nature&#x27;s flawed programming</title>
    <published>2003-08-24T09:11:24+00:00</published>
    <updated>2003-08-24T09:11:24+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/24/natures-flawed-programming/"/>
    <id>https://chuyeow.wtf/2003/08/24/natures-flawed-programming/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/24/natures-flawed-programming/">&lt;p&gt;I came upon this interesting tidbit in my Artificial Intelligence readings.&lt;&#x2F;p&gt;
&lt;p&gt;A &lt;a href=&quot;http:&#x2F;&#x2F;www.wikipedia.org&#x2F;wiki&#x2F;Sphex&quot;&gt;sphex&lt;&#x2F;a&gt; (a kind of wasp) will, in the process of building a nest, dig a burrow, find an insect and sting it, drag it to the burrow, enter the burrow again to inspect the nest, drag the insect inside, and lay its eggs. That, as we shall soon see, is the sphex&#x27;s built-in program for constructing a nest.&lt;&#x2F;p&gt;
&lt;p&gt;If someone (an experimenter, or some nosy kid) picks up the paralyzed insect and moves it a few inches away, the sphex&#x27;s program gets reset. The sphex now drags the insect to the burrow, and is compelled to re-enter the burrow to inspect the nest _again_, even though it has just checked. It does this even if the insect is moved away repeatedly, without the sphex ever realizing what is going on. The sphex is unable to learn that it&#x27;s program is failing, and will not change it.&lt;&#x2F;p&gt;
&lt;div class=&quot;pullquote&quot;&gt;
&quot;... the beetle continues on and pantomimes plugging the nest with the nonexistent ball of dung!&quot;
&lt;&#x2F;div&gt;
&lt;p&gt;Even more amusing is the dung beetle, which goes off to fetch a ball of dung to plug its nest entrance. If the ball of dung is removed from its grasp _en route_, the beetle continues on and pantomimes plugging the nest with the nonexistent ball of dung! Nature (or evolution, depending on your opinion) has built in a pretty rigid program into the beetle&#x27;s behavior.&lt;&#x2F;p&gt;
&lt;p&gt;It is interesting to discover lifeforms as large as a sphex or dung beetle that don&#x27;t have the capability of learning, of going beyond its genetically programmed behavior. Makes the _Home Sapiens_ and the thinking species (dolphins, whales, primates) all the more intriguing.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Dealing with colors</title>
    <published>2003-08-21T18:44:40+00:00</published>
    <updated>2003-08-21T18:44:40+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/21/dealing-with-colors/"/>
    <id>https://chuyeow.wtf/2003/08/21/dealing-with-colors/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/21/dealing-with-colors/">&lt;p&gt;Several tools to help the web developer in color scheming and color management.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.iconico.com&#x2F;colorpic&#x2F;&quot;&gt;Iconico&#x27;s Color Picker&lt;&#x2F;a&gt; is a free Windows application that helps you pick colors and save them to your swatch. Very good for picking colors from sites and pictures. My only grouse is that it doesn&#x27;t allow you to save your swatch.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.colorschemer.com&#x2F;&quot;&gt;Color Schemer&lt;&#x2F;a&gt; helps to create a color scheme when given a particular color. The resulting schemes don&#x27;t always work though.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.meyerweb.com&#x2F;eric&#x2F;tools&#x2F;color-blend&#x2F;&quot;&gt;Color Blender&lt;&#x2F;a&gt; does as its name suggests - it blends 2 colors into 1. The results can surprise you - you may just find your new favorite color with some experimentation.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;andy.greyledge.net&#x2F;ColorChip&#x2F;&quot;&gt;ColorChip&lt;&#x2F;a&gt; is a PHP class that, given a single color, produces the complementary color, nearby hues, a light to dark version of the color, and more. You have to &lt;a href=&quot;http:&#x2F;&#x2F;andy.greyledge.net&#x2F;ColorChip&#x2F;example.php&quot; title=&quot;Try out the demo of ColorChip&quot;&gt;try it&lt;&#x2F;a&gt; to be impressed.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Genetic Algorithms links 2</title>
    <published>2003-08-21T12:00:18+00:00</published>
    <updated>2003-08-21T12:00:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/21/genetic-algorithms-links-2/"/>
    <id>https://chuyeow.wtf/2003/08/21/genetic-algorithms-links-2/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/21/genetic-algorithms-links-2/">&lt;p&gt;More &lt;acronym title=&quot;Genetic Algorithm&quot;&gt;GA&lt;&#x2F;acronym&gt; links. For archival purposes.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.ai-junkie.com&#x2F;&quot;&gt;ai-junkie&lt;&#x2F;a&gt; is a great website with a &lt;acronym title=&quot;Genetic Algorithm&quot;&gt;GA&lt;&#x2F;acronym&gt; tutorial written &quot;in plain English&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.cs.bham.ac.uk&#x2F;~txs&#x2F;teaching&#x2F;2002&#x2F;evo-computation&#x2F;&quot;&gt;Evolutionary Computation lecture notes&lt;&#x2F;a&gt; by Thorsten Schnier.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&quot;&gt;More Evolutionary Computation lecture notes&lt;&#x2F;a&gt; by Riccardo Poli, including a &lt;a href=&quot;http:&#x2F;&#x2F;www.cs.bham.ac.uk&#x2F;~rmp&#x2F;slide_book&#x2F;node8.html&quot;&gt;section on Classifier Systems&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.geatbx.com&#x2F;docu&#x2F;algindex.html&quot;&gt;Genetic and Evolutionary Algorithms: Principles, Methods and Algorithms&lt;&#x2F;a&gt; is an introduction to Evolutionary and Genetic Algorithms.&lt;&#x2F;li&gt;
&lt;li&gt;A &lt;a href=&quot;http:&#x2F;&#x2F;cs.felk.cvut.cz&#x2F;~xobitko&#x2F;ga&#x2F;&quot;&gt;GA tutorial&lt;&#x2F;a&gt; with example applets.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;atrey.karlin.mff.cuni.cz&#x2F;~doug&#x2F;magdon&#x2F;docs&#x2F;html&#x2F;docs.html&quot;&gt;The MAGDON Documentation&lt;&#x2F;a&gt; has a brief introduction to GA, including descriptions of the Pittsburg approach and the Michigan approach.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.optiwater.com&#x2F;GAsearch&#x2F;&quot;&gt;GA-Search&lt;&#x2F;a&gt; - the Genetic Algorithms search engine, is a search engine dedicated to only GA-related sites.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;aaai.org&#x2F;&quot;&gt;American Association for Artificial Intelligence&lt;&#x2F;a&gt; &quot;is a nonprofit scientific society devoted to advancing the scientific understanding of the mechanisms underlying thought and intelligent behavior and their embodiment in machines.&quot;&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;www.cs.washington.edu&#x2F;research&#x2F;jair&#x2F;home.html&quot;&gt;Journal of Artificial Intelligence Research&lt;&#x2F;a&gt; is an electronic journal on AI.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;evonet.dcs.napier.ac.uk&#x2F;&quot;&gt;EvoWeb&lt;&#x2F;a&gt;, the website of Evonet (European Network of Excellence in Evolutionary Computing), is a portal site for Evolutionary Computing.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;www.alife.org&#x2F;&quot;&gt;International Society of Artificial Life&lt;&#x2F;a&gt; publishes the &lt;a href=&quot;http:&#x2F;&#x2F;mitpress.mit.edu&#x2F;catalog&#x2F;item&#x2F;default.asp?ttype=4&amp;tid=41&quot;&gt;Artificial Life journal&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>DHTML Lemmings</title>
    <published>2003-08-21T10:23:52+00:00</published>
    <updated>2003-08-21T10:23:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/21/dhtml-lemmings/"/>
    <id>https://chuyeow.wtf/2003/08/21/dhtml-lemmings/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/21/dhtml-lemmings/">&lt;p&gt;This is nostalgic -  &lt;a href=&quot;http:&#x2F;&#x2F;crew.tweakers.net&#x2F;crisp&#x2F;lemmings&#x2F;index.html&quot;&gt;DHTML Lemmings&lt;&#x2F;a&gt;. I still haven&#x27;t figured out how he did it (he says it&#x27;s &quot;all written in JavaScript&quot; - pretty amazing!), but it plays just like the classic Lemmings.&lt;&#x2F;p&gt;
&lt;p&gt;Two thumbs up, for the spectacular use of JavaScript, and also just because it&#x27;s Lemmings.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Tracking entry referrers with PHP in MT</title>
    <published>2003-08-16T19:30:18+00:00</published>
    <updated>2003-08-16T19:30:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/16/tracking-entry-referrers-with-php-in-mt/"/>
    <id>https://chuyeow.wtf/2003/08/16/tracking-entry-referrers-with-php-in-mt/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/16/tracking-entry-referrers-with-php-in-mt/">&lt;p&gt;I&#x27;ve always wanted to track referrers for each entry and at the same time be able to tell which entries are the more popular ones by keeping track of each entry&#x27;s hit count.&lt;&#x2F;p&gt;
&lt;p&gt;So I did the &lt;em&gt;smart&lt;&#x2F;em&gt; thing first by Googling to see if anyone else had done it. I found the &lt;a href=&quot;http:&#x2F;&#x2F;mt-plugins.org&#x2F;archives&#x2F;entry&#x2F;awstatsreferers.php&quot;&gt;AWStatsReferers&lt;&#x2F;a&gt; MT plugin at the &lt;a href=&quot;http:&#x2F;&#x2F;mt-plugins.org&#x2F;&quot;&gt;MT Plugin Directory&lt;&#x2F;a&gt; but it requires your host to have &lt;a href=&quot;http:&#x2F;&#x2F;awstats.sourceforge.net&#x2F;&quot;&gt;AWStats&lt;&#x2F;a&gt; installed. My host doesn&#x27;t, and I wasn&#x27;t going to get them to install AWStats just so I can track referrers for my blog. &lt;a href=&quot;http:&#x2F;&#x2F;www.textism.com&#x2F;tools&#x2F;refer&#x2F;&quot;&gt;Refer&lt;&#x2F;a&gt; is a referrer tracking script that turned up - it actually seems like it could do what I wanted with a little tweaking, but a look at the code left me thinking there should be a simpler way to achieve my more specific goals (i.e. track referers and, consequently, hit count for each entry).&lt;&#x2F;p&gt;
&lt;p&gt;So, hey, I decided to whip up a simple hack of sorts using PHP and a database table to store the referrers.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;a name=&quot;tutorial&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3&gt;Tracking entry referrers with PHP in MT&lt;&#x2F;h3&gt;
&lt;p&gt;Requirements: MovableType, webhost that supports PHP, database (MySQL in this tutorial)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;del&gt;
&lt;p&gt;A plain text version of this tutorial is also available &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;08&#x2F;16&#x2F;tracking_entry_referrers_with_php_in_mt.txt&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
First off, any page where you wish to display the referrers or hit count, including your archives and main index page, need to have a .php extension (or any other extension that will cause the file to be pre-processed by PHP). You can do so by renaming your &lt;em&gt;Archive File Templates&lt;&#x2F;em&gt; to have a .php extension (go to &lt;em&gt;Weblog Config&lt;&#x2F;em&gt; -&gt; &lt;em&gt;Archiving&lt;&#x2F;em&gt;). The same goes for your main index page (go to &lt;em&gt;Templates&lt;&#x2F;em&gt;) .
&lt;&#x2F;li&gt;
&lt;li&gt;Create the database table. The SQL is:&lt;br &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;CREATE TABLE `mt_entryhits` (&lt;br &#x2F;&gt;
  `entry_id` INT(11) NOT NULL&lt;br &#x2F;&gt;
    REFERENCES mt_entry(entry_id)&lt;br &#x2F;&gt;
    ON DELETE CASCADE&lt;br &#x2F;&gt;
    ON UPDATE CASCADE,&lt;br &#x2F;&gt;
  `referer` VARCHAR(255) NOT NULL&lt;br &#x2F;&gt;
);&lt;&#x2F;div&gt;
&lt;p&gt;You can use either phpMyAdmin, the MySQL command-line client or whatever suits your boat.
&lt;&#x2F;li&gt;
&lt;li&gt;Create a file named &lt;span class=&quot;monospaced&quot;&gt;db-config.php&lt;&#x2F;span&gt; with the following code:&lt;br &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
&amp;lt;?php&lt;br &#x2F;&gt;
$host = &#x27;host&#x27;;  &#x2F;&#x2F; database server hostname&lt;br &#x2F;&gt;
$user = &#x27;user&#x27;;  &#x2F;&#x2F; database username&lt;br &#x2F;&gt;
$password = &#x27;password&#x27;;  &#x2F;&#x2F;  database password&lt;br &#x2F;&gt;
$database = &#x27;database&#x27;;  &#x2F;&#x2F; MT database&lt;br &#x2F;&gt;
?&amp;gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Replace the values of the variables as per your configuration. Upload it in your blog&#x27;s top level directory (i.e. the &lt;em&gt;Local Site Path&lt;&#x2F;em&gt; of your weblog, as specified in the &lt;em&gt;Weblog Configuration&lt;&#x2F;em&gt; screen).
&lt;&#x2F;li&gt;
&lt;li&gt;
Login to your MovableType installation and  &lt;em&gt;Manage your weblog&lt;&#x2F;em&gt;. Go to &lt;em&gt;Manage&lt;&#x2F;em&gt; -&gt; &lt;em&gt;Templates&lt;&#x2F;em&gt; -&gt; &lt;em&gt;Archive-Related Templates&lt;&#x2F;em&gt; -&gt; &lt;em&gt;Individual Entry Archive&lt;&#x2F;em&gt;.
&lt;&#x2F;li&gt;
&lt;li&gt;
At the top of the template, add the following lines:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
&amp;lt;?php&lt;br &#x2F;&gt;
error_reporting(0);&lt;&#x2F;p&gt;
&lt;p&gt;include( &#x27;&amp;lt;$MTBlogSitePath$&amp;gt;db-config.php&#x27; );&lt;&#x2F;p&gt;
&lt;p&gt;mysql_connect( $host, $user, $password );&lt;br &#x2F;&gt;
mysql_select_db( $database );&lt;&#x2F;p&gt;
&lt;p&gt;&#x2F;&#x2F; this is the list of referrers you don&#x27;t want to record&lt;br &#x2F;&gt;
&#x2F;&#x2F; use the following format within the parentheses:&lt;br &#x2F;&gt;
&#x2F;&#x2F;   &#x27;http:&#x2F;&#x2F;domain1.com&#x27;, &#x27;http:&#x2F;&#x2F;domain2.com&#x27;, ...&lt;br &#x2F;&gt;
&#x2F;&#x2F; leave it blank if you want to record all referrers&lt;br &#x2F;&gt;
$ignore_list = array( &#x27;http:&#x2F;&#x2F;referrer.you.want.to.ignore&#x27; );&lt;&#x2F;p&gt;
&lt;p&gt;&#x2F;&#x2F; check referrer string to determine if we want to record it&lt;br &#x2F;&gt;
$ignore_referrer = false;&lt;br &#x2F;&gt;
foreach( $ignore_list as $ignore ) {&lt;br &#x2F;&gt;
  if( stristr( $_SERVER[&#x27;HTTP_REFERER&#x27;], $ignore ) !== false ) {&lt;br &#x2F;&gt;
    $ignore_referrer = true;&lt;br &#x2F;&gt;
     break;&lt;br &#x2F;&gt;
  }&lt;br &#x2F;&gt;
}&lt;&#x2F;p&gt;
&lt;p&gt;&#x2F;&#x2F; record the referer&lt;br &#x2F;&gt;
if( !$ignore_referrer ) {&lt;br &#x2F;&gt;
  mysql_query( &quot;INSERT INTO mt_entryhits(entry_id, referer) VALUES (&amp;lt;$MTEntryID$&amp;gt;, &#x27;{$_SERVER[&#x27;HTTP_REFERER&#x27;]}&#x27;)&quot; );&lt;br &#x2F;&gt;
}&lt;&#x2F;p&gt;
&lt;p&gt;&#x2F;&#x2F; get the no. of times this entry has been read&lt;br &#x2F;&gt;
$rs = mysql_query( &#x27;SELECT COUNT(*) FROM mt_entryhits WHERE entry_id=&amp;lt;$MTEntryID$&amp;gt;&#x27; );&lt;br &#x2F;&gt;
$row = mysql_fetch_row( $rs );&lt;br &#x2F;&gt;
$hits = $row[0];&lt;&#x2F;p&gt;
&lt;p&gt;&#x2F;&#x2F; get the list of referers&lt;br &#x2F;&gt;
$sql =&lt;br &#x2F;&gt;
&#x27;SELECT referer, COUNT(*) AS count&lt;br &#x2F;&gt;
FROM mt_entryhits&lt;br &#x2F;&gt;
WHERE entry_id=&lt;$MTEntryID$&gt;&lt;br &#x2F;&gt;
GROUP BY referer&lt;br &#x2F;&gt;
ORDER BY count DESC&#x27;;&lt;&#x2F;p&gt;
&lt;p&gt;$rs = mysql_query( $sql );&lt;br &#x2F;&gt;
?&amp;gt;
&lt;&#x2F;p&gt;&lt;&#x2F;div&gt;
&lt;p&gt;This code snippet is specific to MySQL - you should be able to change it easily for PostgreSQL or SQLite (if not, &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;contact&#x2F;&quot;&gt;let me know&lt;&#x2F;a&gt; and I&#x27;ll post code snippets for those &lt;acronym title=&quot;Relational Database Management Systems&quot;&gt;RDBMS&lt;&#x2F;acronym&gt;s too). Of course, you can plug in a database abstraction library like the excellent &lt;a href=&quot;php.weblogs.com&#x2F;adodb&quot;&gt;ADODB&lt;&#x2F;a&gt;, but I leave out that portable solution in favor of database-specific built-in function calls because MovableType supports only MySQL, PostgreSQL, or SQLite.
&lt;&#x2F;li&gt;
&lt;li&gt;
In the same template (the &lt;em&gt;Individual Entry Archive&lt;&#x2F;em&gt; template), look for a good place to display the entry hit count and insert the following code:&lt;br &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
Read &amp;lt;?=$hits?&amp;gt; time&amp;lt;?php if($hits != 1) echo &#x27;s&#x27;;?&amp;gt;
&lt;&#x2F;div&gt;
&lt;p&gt;I place them in the &quot;Posted by&quot; bit at the end of each entry, which for the default MT template is&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
&amp;lt;span class=&quot;posted&quot;&amp;gt;Posted by &amp;lt;$MTEntryAuthor$&amp;gt; at &amp;lt;$MTEntryDate$&amp;gt;&lt;br &#x2F;&gt;
&amp;lt;MTEntryIfAllowPings&amp;gt;&lt;br &#x2F;&gt;
| &amp;lt;a href=&quot;&amp;lt;$MTCGIPath$&amp;gt;&amp;lt;$MTTrackbackScript$&amp;gt;?__mode=view&amp;entry_id=&amp;lt;$MTEntryID$&amp;gt;&quot; onclick=&quot;OpenTrackback(this.href); return false&quot;&amp;gt;TrackBack&amp;lt;&#x2F;a&amp;gt;&lt;br &#x2F;&gt;
&amp;lt;&#x2F;MTEntryIfAllowPings&amp;gt;&lt;br &#x2F;&gt;
&lt;span style=&quot;color:red;&quot;&gt;| Read &amp;lt;?=$hits?&amp;gt; time&amp;lt;?php if($hits != 1) echo &#x27;s&#x27;;?&amp;gt;&lt;&#x2F;span&gt;&lt;br &#x2F;&gt;
&amp;lt;br &#x2F;&amp;gt;&amp;lt;&#x2F;span&amp;gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
Now, it&#x27;s time to display the referrers. Again in the same template, add the following code where you wish to display the referrers.&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
&amp;lt;?php&lt;br &#x2F;&gt;
&#x2F;&#x2F; display the list of referers&lt;br &#x2F;&gt;
echo &#x27;&amp;lt;div class=&quot;sidetitle&quot;&amp;gt;Referrers&amp;lt;&#x2F;div&amp;gt;&#x27;, &quot;\n&quot;;&lt;br &#x2F;&gt;
echo &#x27;&amp;lt;div class=&quot;side&quot;&amp;gt;&#x27;, &quot;\n&quot;;&lt;br &#x2F;&gt;
echo &#x27;&amp;lt;ul&amp;gt;&#x27;, &quot;\n&quot;;&lt;br &#x2F;&gt;
while( $row = mysql_fetch_assoc( $rs ) ) {&lt;&#x2F;p&gt;
&lt;p&gt;  $referer = $row[&#x27;referer&#x27;];&lt;br &#x2F;&gt;
  $count = $row[&#x27;count&#x27;];&lt;&#x2F;p&gt;
&lt;p&gt;  echo &#x27;&amp;lt;li&amp;gt;&#x27;;&lt;&#x2F;p&gt;
&lt;p&gt;  if( strpos( $referer, &#x27;http:&#x2F;&#x2F;&#x27; ) !== false ) {&lt;br &#x2F;&gt;
    echo &#x27;&amp;lt;a href=&quot;&#x27;, $referer, &#x27;&quot; target=&quot;_blank&quot;&amp;gt;&#x27;;&lt;&#x2F;p&gt;
&lt;p&gt;    &#x2F;&#x2F; truncate URL if too long&lt;br &#x2F;&gt;
    if( strlen($referer) &amp;gt; 90 ) {&lt;br &#x2F;&gt;
      $referer = substr($referer, 0, 90) . &#x27;...&#x27;;&lt;br &#x2F;&gt;
    }&lt;br &#x2F;&gt;
    echo $referer, &#x27;(&#x27;, $count, &#x27;)&#x27;;&lt;br &#x2F;&gt;
    echo &#x27;&amp;lt;&#x2F;a&amp;gt;&#x27;;&lt;br &#x2F;&gt;
  }&lt;br &#x2F;&gt;
  else {&lt;br &#x2F;&gt;
    &#x2F;&#x2F; truncate URL if too long&lt;br &#x2F;&gt;
    if( strlen($referer) &amp;gt; 90 ) {&lt;br &#x2F;&gt;
      $referer = substr($referer, 0, 90) . &#x27;...&#x27;;&lt;br &#x2F;&gt;
    }&lt;&#x2F;p&gt;
&lt;p&gt;    &#x2F;&#x2F; handle cases where there is no referrer&lt;br &#x2F;&gt;
    if( $referer == &#x27;&#x27; ) {&lt;br &#x2F;&gt;
      $referer = &#x27;Direct hit or unknown referrer&#x27;;&lt;br &#x2F;&gt;
    }&lt;br &#x2F;&gt;
    echo $referer, &#x27;(&#x27;, $count, &#x27;)&#x27;;&lt;br &#x2F;&gt;
  }&lt;br &#x2F;&gt;
  echo &#x27;&amp;lt;&#x2F;li&amp;gt;&#x27;;&lt;br &#x2F;&gt;
  echo &quot;\n&quot;;&lt;br &#x2F;&gt;
}&lt;br &#x2F;&gt;
echo &quot;\n&quot;;&lt;br &#x2F;&gt;
echo &#x27;&amp;lt;&#x2F;ul&amp;gt;&#x27;, &quot;\n&quot;;&lt;br &#x2F;&gt;
echo &#x27;&amp;lt;&#x2F;div&amp;gt;&#x27;;&lt;br &#x2F;&gt;
?&amp;gt;
&lt;&#x2F;p&gt;&lt;&#x2F;div&gt;
&lt;p&gt;You can format the &lt;acronym title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;&#x2F;acronym&gt; to suit your current template.
&lt;&#x2F;li&gt;
&lt;li&gt;
Phew! The hardest part is now over. All that&#x27;s left is to display the number of times each entry has been read in the other archive pages and the main page (&lt;em&gt;Main Index&lt;&#x2F;em&gt;). I&#x27;ll only work through the changes to the &lt;em&gt;Main Index&lt;&#x2F;em&gt; template, since it will be similar for the other templates (&lt;em&gt;Category Archive&lt;&#x2F;em&gt;, &lt;em&gt;Date-Based Archive&lt;&#x2F;em&gt;, any other templates you have created that displays blog entries).&lt;&#x2F;p&gt;
&lt;p&gt;At the top of the template, add the following lines:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
&amp;lt;?php&lt;br &#x2F;&gt;
error_reporting(0);&lt;&#x2F;p&gt;
&lt;p&gt;include( &#x27;&amp;lt;$MTBlogSitePath$&amp;gt;db-config.php&#x27; );&lt;&#x2F;p&gt;
&lt;p&gt;mysql_connect( $host, $user, $password );&lt;br &#x2F;&gt;
mysql_select_db( $database );&lt;br &#x2F;&gt;
?&amp;gt;
&lt;&#x2F;p&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Look for the &lt;span class=&quot;monospaced&quot;&gt;&amp;lt;MTEntries&amp;gt;&lt;&#x2F;span&gt; tag in the template and add the following lines after it:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
&amp;lt;?php&lt;br &#x2F;&gt;
&#x2F;&#x2F; get the no. of times this entry has been read&lt;br &#x2F;&gt;
$rs = mysql_query( &#x27;SELECT COUNT(*) FROM mt_entryhits WHERE entry_id=&amp;lt;$MTEntryID$&amp;gt;&#x27; );&lt;br &#x2F;&gt;
$row = mysql_fetch_row( $rs );&lt;br &#x2F;&gt;
$hits = $row[0];&lt;br &#x2F;&gt;
?&amp;gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Now that we&#x27;ve the number of hits in the variable &lt;span class=&quot;monospaced&quot;&gt;$hits&lt;&#x2F;span&gt;, we can display the entry hit count as before by adding the following line of code within the &lt;span class=&quot;monospaced&quot;&gt;&amp;lt;MTEntries&amp;gt;&lt;&#x2F;span&gt; tag:&lt;&#x2F;p&gt;
&lt;div class=&quot;code&quot;&gt;
Read &amp;lt;?=$hits?&amp;gt; time&amp;lt;?php if($hits != 1) echo &#x27;s&#x27;;?&amp;gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
Do the same for the other archive templates (&lt;em&gt;Category Archive&lt;&#x2F;em&gt;, &lt;em&gt;Date-Based Archive&lt;&#x2F;em&gt;, any other templates you have created that displays blog entries).
&lt;&#x2F;li&gt;
&lt;li&gt;
Rebuild your site and you&#x27;re done!
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;
Thanks to everyone who gave comments and asked questions at the &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&#x2F;support&#x2F;&quot;&gt;MovableType support forums&lt;&#x2F;a&gt; and elsewhere, who pointed out things I overlooked.&lt;&#x2F;p&gt;
&lt;p&gt;
&lt;strong&gt;Update&lt;&#x2F;strong&gt;: &lt;a href=&quot;http:&#x2F;&#x2F;www.tbotcotw.com&#x2F;&quot; title=&quot;Matt Moore&#x27;s blog&quot;&gt;Matt Moore&lt;&#x2F;a&gt; has an alternative (based on this very post! ;-)) that includes collection of the page title of the referrer, and also the search terms used to get to your blog entry. Check out his entry entitled &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.tbotcotw.com&#x2F;archives&#x2F;001159.php&quot;&gt;How to collect referrer data&lt;&#x2F;a&gt;&quot;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Beginning Web Design series</title>
    <published>2003-08-15T04:50:06+00:00</published>
    <updated>2003-08-15T04:50:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/15/beginning-web-design-series/"/>
    <id>https://chuyeow.wtf/2003/08/15/beginning-web-design-series/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/15/beginning-web-design-series/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.itnextgen.net&#x2F;pseudo&#x2F;&quot;&gt;Paul Scrivens&lt;&#x2F;a&gt; has started a series of mini-articles for beginning web designers, starting with &lt;a href=&quot;http:&#x2F;&#x2F;www.itnextgen.net&#x2F;pseudo&#x2F;archives&#x2F;web_design&#x2F;beginning_web_design_ch_1.php&quot;&gt;Ch. 1&lt;&#x2F;a&gt; which points out some of the best sites to study as prime case studies for color, layout and liquid design.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mezzoblue.com&#x2F;&quot;&gt;Mezzoblue&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;exp.hicksdesign.co.uk&#x2F;index.php&quot;&gt;hicksdesign&lt;&#x2F;a&gt; are 2 of the best-looking blogs out there.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Python &amp; Java comparison article</title>
    <published>2003-08-14T10:23:33+00:00</published>
    <updated>2003-08-14T10:23:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/14/python-java-comparison-article/"/>
    <id>https://chuyeow.wtf/2003/08/14/python-java-comparison-article/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/14/python-java-comparison-article/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.ferg.org&#x2F;index.html&quot;&gt;Stephen Ferg&lt;&#x2F;a&gt; claims&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
A programmer can be significantly more productive in Python than in Java.
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;in his article &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.ferg.org&#x2F;projects&#x2F;python_java_side-by-side.html&quot;&gt;Python &amp; Java: a Side-by-Side Comparison&lt;&#x2F;a&gt;&quot;. The basis of his argument centres around dynamic typing in Python, among other things like code verbosity.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Fatal incident in campus (NUS)</title>
    <published>2003-08-13T09:16:25+00:00</published>
    <updated>2003-08-13T09:16:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/13/fatal-incident-in-campus-nus/"/>
    <id>https://chuyeow.wtf/2003/08/13/fatal-incident-in-campus-nus/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/13/fatal-incident-in-campus-nus/">&lt;p&gt;I just received notice via email from the &lt;acronym title=&quot;National University of Singapore&quot;&gt;NUS&lt;&#x2F;acronym&gt; President that there was a fatal incident at the Faculty of Engineering this morning. It appears to be an attack of a staff member by another - the case is currently under police investigation.&lt;&#x2F;p&gt;
&lt;p&gt;I wasn&#x27;t in campus today. Hopefully it isn&#x27;t someone I know - it is still tragic nonetheless. I wonder what instigated the attack.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;:&lt;br &#x2F;&gt;
Read about it &lt;a href=&quot;http:&#x2F;&#x2F;straitstimes.asia1.com.sg&#x2F;latest&#x2F;story&#x2F;0,4390,204578,00.html?&quot;&gt;in the news&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>foreach in Java 1.5</title>
    <published>2003-08-13T08:59:26+00:00</published>
    <updated>2003-08-13T08:59:26+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/13/foreach-in-java-15/"/>
    <id>https://chuyeow.wtf/2003/08/13/foreach-in-java-15/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/13/foreach-in-java-15/">&lt;p&gt;Joshua Bloch and Neal Gafter&#x27;s recent &lt;a href=&quot;http:&#x2F;&#x2F;developer.java.sun.com&#x2F;developer&#x2F;community&#x2F;chat&#x2F;JavaLive&#x2F;2003&#x2F;jl0729.html&quot;&gt;JavaLive chat&lt;&#x2F;a&gt; further talks on generics and typesafe enums, 2 of the more significant new language features in the Java 1.5. There is interesting discussion on generics especially.&lt;&#x2F;p&gt;
&lt;p&gt;My favorite though is the enhanced for loop which is similar to the &lt;tt&gt;foreach&lt;&#x2F;tt&gt; construct in languages like &lt;acronym title=&quot;PHP Hypertext Preprocessor&quot;&gt;PHP&lt;&#x2F;acronym&gt; and Python.&lt;&#x2F;p&gt;
&lt;p&gt;The following example reads &quot;for each Object in the Collection C...&quot;:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code language=&quot;Java&quot;&gt;&lt;br &#x2F;&gt;
void displayAll(Collection c) {&lt;br &#x2F;&gt;
  for (Object o : c)&lt;br &#x2F;&gt;
    ((String)o).display();&lt;br &#x2F;&gt;
}&lt;br &#x2F;&gt;
&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve always found the Java (and C&#x2F;C++) for-loop idiom to be overly wordy and reduces code legibility, so this is a welcome addition.&lt;&#x2F;p&gt;
&lt;p&gt;Related links:&lt;br &#x2F;&gt;
Previous &lt;a href=&quot;http:&#x2F;&#x2F;java.sun.com&#x2F;features&#x2F;2003&#x2F;05&#x2F;bloch_qa.html&quot;&gt;interview with Joshua Bloch&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>New blog on Mozilla Firebird nightlies</title>
    <published>2003-08-13T05:18:24+00:00</published>
    <updated>2003-08-13T05:18:24+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/13/new-blog-on-mozilla-firebird-nightlies/"/>
    <id>https://chuyeow.wtf/2003/08/13/new-blog-on-mozilla-firebird-nightlies/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/13/new-blog-on-mozilla-firebird-nightlies/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;&quot;&gt;Jesse Ruderman&lt;&#x2F;a&gt; has started &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;burningedge&#x2F;&quot;&gt;The Burning Edge&lt;&#x2F;a&gt;, a blog that helps Mozilla Firebird users &quot;decide which nightlies to use&quot;. Finally a convenient way to find out what&#x27;s in those nightly builds.&lt;&#x2F;p&gt;
&lt;p&gt;I was so glad to see this, that I got the most recent nightly immediately:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
New feature: Style Switcher in status bar on pages with alternate stylesheets
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;
Screenshot of the Style Switcher in action:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img alt=&quot;alternate-styles.jpg&quot; src=&quot;&#x2F;assets&#x2F;alternate-styles.jpg&quot; width=&quot;182&quot; height=&quot;170&quot; border=&quot;0&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;forums.mozillazine.org&#x2F;viewtopic.php?t=19336&quot;&gt;Discussion on the alternate stylesheet switcher in MozillaZine&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>&quot;Go to referrer&quot; bookmarklet</title>
    <published>2003-08-13T05:00:57+00:00</published>
    <updated>2003-08-13T05:00:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/13/go-to-referrer-bookmarklet/"/>
    <id>https://chuyeow.wtf/2003/08/13/go-to-referrer-bookmarklet/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/13/go-to-referrer-bookmarklet/">&lt;p&gt;Apparently, Simon Willison&#x27;s surfing habit is similar to mine, judging from his entry on &lt;a title=&quot;Simon Willison: On blogging technique and better tabbed browsing&quot; href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;archive&#x2F;2003&#x2F;08&#x2F;13&#x2F;bloggingTechnique&quot;&gt;On blogging technique and better tabbed browsing&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve always found the problem of losing the &quot;back&quot; button particularly annoying when opening multiple tabs in &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot;&gt;Mozilla Firebird&lt;&#x2F;a&gt; via middle-clicking (which opens pages in a new tab). &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;&quot;&gt;Jesse Ruderman&#x27;s&lt;&#x2F;a&gt; &quot;&lt;a href=&quot;javascript:if(!document.referrer) alert(&amp;quot;No referrer!&amp;quot;); document.location = document.referrer; void 0&quot;&gt;go to referrer&lt;&#x2F;a&gt;&quot;  bookmarklet solves this bit of annoyance for me, at least until this is implemented directly into Firebird or as an extension.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google&#x27;s new built-in calculator</title>
    <published>2003-08-13T04:48:30+00:00</published>
    <updated>2003-08-13T04:48:30+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/13/googles-new-built-in-calculator/"/>
    <id>https://chuyeow.wtf/2003/08/13/googles-new-built-in-calculator/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/13/googles-new-built-in-calculator/">&lt;p&gt;This is interesting - Google now has a built-in &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;help&#x2F;features.html#calculator&quot;&gt;calculator function&lt;&#x2F;a&gt; that works whenever you enter a mathematical expression in your standard Google search box.&lt;&#x2F;p&gt;
&lt;p&gt;Now you can ask Google what is &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=3+times+4&quot;&gt;3 times 4&lt;&#x2F;a&gt;(same as &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=3+*+4&quot;&gt;3 * 4&lt;&#x2F;a&gt;) , &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=11+squared&quot;&gt;11 squared&lt;&#x2F;a&gt;, the value of &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=pi&quot;&gt;&lt;em&gt;pi&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, the no. of &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=kilometres+in+1+mile&quot;&gt;kilometres in 1 mile&lt;&#x2F;a&gt; and even trigonometry questions like &lt;a href=&quot;http:&#x2F;&#x2F;www.google.com&#x2F;search?q=sine%2845+degrees%29&quot;&gt;sine(45 degrees)&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Quick-list of chrome URLs for Mozilla</title>
    <published>2003-08-12T12:40:11+00:00</published>
    <updated>2003-08-12T12:40:11+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/12/quick-list-of-chrome-urls-for-mozilla/"/>
    <id>https://chuyeow.wtf/2003/08/12/quick-list-of-chrome-urls-for-mozilla/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/12/quick-list-of-chrome-urls-for-mozilla/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;&quot;&gt;Jesse Ruderman&lt;&#x2F;a&gt; has made a summary of chrome:&#x2F;&#x2F; &lt;acronym title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;&#x2F;acronym&gt;s in his blog entry on &lt;a title=&quot;Jesse Ruderman: Chrome URLs in Mozilla and Mozilla Firebird&quot; href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;archives&#x2F;000007.html&quot;&gt;Chrome URLs in Mozilla and Mozilla Firebird&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately they aren&#x27;t hyperlinked, so I&#x27;ve reproduced them to open in a new window here.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;chrome:&#x2F;&#x2F;browser&#x2F;content&#x2F;bookmarks&#x2F;bookmarksManager.xul&quot; target=&quot;_blank&quot;&gt;Bookmark manager&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;chrome:&#x2F;&#x2F;browser&#x2F;content&#x2F;bookmarks&#x2F;bookmarksPanel.xul&quot; target=&quot;_blank&quot;&gt;Bookmark panel&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;chrome:&#x2F;&#x2F;browser&#x2F;content&#x2F;downloads&#x2F;downloadPanel.xul&quot; target=&quot;_blank&quot;&gt;Download panel&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;chrome:&#x2F;&#x2F;global&#x2F;content&#x2F;console.xul&quot; target=&quot;_blank&quot;&gt;JavaScript console&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;chrome:&#x2F;&#x2F;browser&#x2F;content&#x2F;pref&#x2F;pref.xul&quot; target=&quot;_blank&quot;&gt;Preferences&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;chrome:&#x2F;&#x2F;browser&#x2F;content&#x2F;pref&#x2F;pref-privacy.xul&quot; target=&quot;_blank&quot;&gt;Privacy preferences&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
  </entry>
  <entry>
    <title>Genetic Algorithms links</title>
    <published>2003-08-12T07:40:52+00:00</published>
    <updated>2003-08-12T07:40:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/12/genetic-algorithms-links/"/>
    <id>https://chuyeow.wtf/2003/08/12/genetic-algorithms-links/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/12/genetic-algorithms-links/">&lt;p&gt;This is a collection of links on Genetic Algorithms. For archival purposes.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;geneticalgorithms.ai-depot.com&#x2F;&quot;&gt;Genetic Algorithms Warehouse&lt;&#x2F;a&gt; is an excellent resource with collections of links to &lt;a href=&quot;http:&#x2F;&#x2F;geneticalgorithms.ai-depot.com&#x2F;Tutorials.html&quot;&gt;tutorials&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;geneticalgorithms.ai-depot.com&#x2F;Papers.html&quot;&gt;papers&lt;&#x2F;a&gt;, recommended &lt;a href=&quot;http:&#x2F;&#x2F;geneticalgorithms.ai-depot.com&#x2F;Books.html&quot;&gt;books&lt;&#x2F;a&gt;, software libraries, and essays. Part of &lt;a href=&quot;http:&#x2F;&#x2F;ai-depot.com&#x2F;&quot;&gt;AI Depot&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.geneticprogramming.com&#x2F;&quot;&gt;The Genetic Programming Notebook&lt;&#x2F;a&gt; is a huge collection of links related to GA(Genetic Algorithms) and GP(Genetic Programming). There is also a &lt;a href=&quot;http:&#x2F;&#x2F;www.geneticprogramming.com&#x2F;Tutorial&#x2F;index.html&quot;&gt;GP tutorial&lt;&#x2F;a&gt;. *&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;cgm.cs.mcgill.ca&#x2F;~soss&#x2F;cs644&#x2F;projects&#x2F;marko&#x2F;&quot;&gt;Genetic Algorithm Classifiers&lt;&#x2F;a&gt; is a final year project by Gabriel Kevorkian and Marko Milek&lt;&#x2F;li&gt;
&lt;p&gt; that is &quot;study of genetic algorithms and, in particular, of their application in event classification and feature selection&quot;. Their classification algorithm is implemented as a Java applet.&lt;&#x2F;p&gt;
&lt;li&gt;Darrell Whitley had written a &lt;a href=&quot;http:&#x2F;&#x2F;citeseer.nj.nec.com&#x2F;29471.html&quot;&gt;GA tutorial&lt;&#x2F;a&gt; circa 1993. *&lt;&#x2F;li&gt;
&lt;li&gt;Alexander Schatten also has a &lt;a href=&quot;http:&#x2F;&#x2F;www.schatten.info&#x2F;info&#x2F;ga&#x2F;genetic.html&quot;&gt;GA tutorial&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;PMSI has &lt;a href=&quot;http:&#x2F;&#x2F;www.pmsi.fr&#x2F;gainita.htm&quot;&gt;short GA tutorial&lt;&#x2F;a&gt;. *&lt;&#x2F;li&gt;
&lt;li&gt;Frederic Dreier has a &lt;a href=&quot;http:&#x2F;&#x2F;dreier.cc&#x2F;extdata&#x2F;documents&#x2F;gatutorial.pdf&quot;&gt;tutorial about Genetic Algorithms&lt;&#x2F;a&gt; on his &lt;a href=&quot;http:&#x2F;&#x2F;dreier.cc&#x2F;index.php?topic=readings&amp;sub=papers&quot;&gt;website&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Wendy Williams has some &lt;a href=&quot;http:&#x2F;&#x2F;www.magma.ca&#x2F;~wendy&#x2F;GATutorial.ppt&quot;&gt;GA tutorial slides&lt;&#x2F;a&gt;. *&lt;&#x2F;li&gt;
&lt;li&gt;Michael Skinner has a &lt;a href=&quot;http:&#x2F;&#x2F;geneticalgorithms.ai-depot.com&#x2F;Tutorial&#x2F;Overview.html&quot;&gt;Genetic Algorithms Overview&lt;&#x2F;a&gt;. *&lt;&#x2F;li&gt;
&lt;li&gt;Eric Martel has an article on &lt;a href=&quot;http:&#x2F;&#x2F;ai-depot.com&#x2F;Articles&#x2F;51&#x2F;TSP.html&quot;&gt;Solving Travelling Salesman Problems Using Genetic Algorithms&lt;&#x2F;a&gt;. *&lt;&#x2F;li&gt;
&lt;li&gt;Alex Champandard writes on &lt;a href=&quot;http:&#x2F;&#x2F;geneticalgorithms.ai-depot.com&#x2F;Tutorial&#x2F;GAclass-Motivation.html&quot;&gt;Genetic Algorithm Class Design&lt;&#x2F;a&gt;. *&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.aridolan.com&#x2F;ga&#x2F;gaa&#x2F;gaa.html&quot;&gt;The GA Playground&lt;&#x2F;a&gt; is a general GA toolkit implemented in Java.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.it.uom.gr&#x2F;pdp&#x2F;DigitalLib&#x2F;EC&#x2F;ec_lect.htm&quot;&gt;Collection of Evolutionary Computation links&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;lancet.mit.edu&#x2F;~mbwall&#x2F;presentations&#x2F;IntroToGAs&#x2F;&quot;&gt;Introduction to Genetic Algorithms&lt;&#x2F;a&gt; slides.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.genetic-programming.org&#x2F;&quot;&gt;genetic-programming.org&lt;&#x2F;a&gt; is a &quot;source of information about the field of genetic programming&quot;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Note to self: * indicates printed in hard copy&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Getting with the style switcher</title>
    <published>2003-08-11T13:53:25+00:00</published>
    <updated>2003-08-11T13:53:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/11/getting-with-the-style-switcher/"/>
    <id>https://chuyeow.wtf/2003/08/11/getting-with-the-style-switcher/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/11/getting-with-the-style-switcher/">&lt;p&gt;I&#x27;ve always been fascinated with JavaScript-based style switchers, like those at &lt;a href=&quot;http:&#x2F;&#x2F;alistapart.com&#x2F;&quot;&gt;A List Apart&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;devedge.netscape.com&#x2F;&quot;&gt;Netscape DevEdge&lt;&#x2F;a&gt;. It&#x27;s fun to have a (limited) amount of customizability, without having to reload the webpage like those done using server-side scripting. It&#x27;s like a shiny toy for your users to play.&lt;&#x2F;p&gt;
&lt;p&gt;I got myself one of those using &lt;a href=&quot;http:&#x2F;&#x2F;www.idontsmoke.co.uk&#x2F;&quot;&gt;Paul Sowden&#x27;s&lt;&#x2F;a&gt; Style Switcher and following the (simple) instructions at his A List Apart tutorial entitled &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.alistapart.com&#x2F;stories&#x2F;alternate&#x2F;&quot;&gt;Alternative Style: Working With Alternate Style Sheets&lt;&#x2F;a&gt;&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;And so, &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot;&gt;redemption in a blog&lt;&#x2F;a&gt; now sports a new &lt;a href=&quot;&#x2F;about&#x2F;switcher&#x2F;&quot; onclick=&quot;setActiveStyleSheet(&#x27;default&#x27;); return false;&quot; onkeypress=&quot;setActiveStyleSheet(&#x27;default&#x27;); return false;&quot; title=&quot;Switch to the default style&quot;&gt;Default&lt;&#x2F;a&gt; style and a &lt;a href=&quot;&#x2F;about&#x2F;switcher&#x2F;&quot; onclick=&quot;setActiveStyleSheet(&#x27;clean&#x27;); return false;&quot; onkeypress=&quot;setActiveStyleSheet(&#x27;clean&#x27;); return false;&quot; title=&quot;Switch to Clean style&quot;&gt;Clean&lt;&#x2F;a&gt; style, along with the &lt;a href=&quot;&#x2F;about&#x2F;switcher&#x2F;&quot; onclick=&quot;setActiveStyleSheet(&#x27;original&#x27;); return false;&quot; onkeypress=&quot;setActiveStyleSheet(&#x27;original&#x27;); return false;&quot; title=&quot;Switch to Original style&quot;&gt;Original&lt;&#x2F;a&gt; style.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Redesigning made easy with &quot;edit styles&quot; bookmarklet</title>
    <published>2003-08-11T13:09:14+00:00</published>
    <updated>2003-08-11T13:09:14+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/11/redesigning-made-easy-with-edit-styles-bookmarklet/"/>
    <id>https://chuyeow.wtf/2003/08/11/redesigning-made-easy-with-edit-styles-bookmarklet/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/11/redesigning-made-easy-with-edit-styles-bookmarklet/">&lt;p&gt;I&#x27;ve recently redesigned &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot;&gt;redemption in a blog&lt;&#x2F;a&gt;, optimizing the &lt;acronym title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;&#x2F;acronym&gt; and reducing line width for more optimal reading. I did this quickly and painlessly with a gem of a bookmarklet, the &lt;a href=&quot;javascript:(function(){function init(){var newline=unescape(%22%%22+%220A%22),importCount=0,L=[];dead=false;oldCSS=null;x=opener;ta=document.f.ta;ta.select();if(x.editStyles){ta.value=x.editStyles.innerHTML;update();return;}ta.value=%22&#x2F;* Type CSS rules here and they will be applied%22+newline+%22to pages from &#x27;%22+location.host+%22&#x27;%22+newline+%22immediately as long as you keep this window open. *&#x2F;%22+newline+newline;function add(s){if(!s.disabled){var y={sheet:s,readable:true,label:%22Imported%22,inline:false,shorturl:%22%22,fulltext:%22%22};try{for(var k=0,m;m=s.cssRules[k];++k)if(m.type==3)add(m.styleSheet);}catch(er){y.readable=false;}L.push(y);if(s.ownerNode){y.label=s.ownerNode.tagName.toUpperCase()+%22-tag%22;if(!s.ownerNode.getAttribute(%22src%22)&amp;&amp;!s.ownerNode.href)y.inline=true;}if(y.inline){y.label=%22Inline %22+y.label;y.fulltext=fix(s.ownerNode.innerHTML);}else if(s.href.substr(0,13)==%22data:text&#x2F;css%22){y.shorturl=%22 contained in a data: URL%22;y.fulltext=fix(unescape(s.href.slice(14)));}else{++importCount;y.importtext=%22@import \%22%22+s.href+%22\%22;%22;y.shorturl=%22 %22+s.href.split(&#x27;&#x2F;&#x27;).reverse()[0];if(!y.readable){y.fulltext=%22&#x2F;* Out-of-domain; imported above. *&#x2F;%22;}else if(s.href.substr(0,5)!=%22http:%22){y.fulltext=%22&#x2F;* Non-http; imported above. *&#x2F;%22;}else{var loadingText=%22&#x2F;* Loading (%22+(L.length-1)+%22) *&#x2F;%22;y.fulltext=loadingText;var p=new XMLHttpRequest();p.onload=function(e){ta.value=ta.value.replace(y.importtext+newline,%22%22);y.fulltext=p.responseText;ta.value=ta.value.replace(loadingText,fix(y.fulltext));ta.value=ta.value.replace(firstNote+newline,%22%22);};p.open(%22GET%22,s.href);p.send(null);}}}}function fix(s){while((s[0]==newline)&amp;&amp;s.length&gt;1)s=s.slice(1);while((s[s.length-1]==newline)&amp;&amp;s.length&gt;1)s=s.substr(0,s.length-1);s=s.replace(&#x2F;@import.*;&#x2F;ig,function(){return %22&#x2F;* %22+RegExp.lastMatch+%22 *&#x2F;%22;});return s;}for(var i=0,ss;ss=x.document.styleSheets[i];++i)add(ss);var imports=%22%22,main=%22%22;var firstNote=%22&#x2F;**** Style sheets whose contents could be loaded were ****&#x2F;%22+newline+%22&#x2F;**** imported instead.  Rule order may be incorrect   ****&#x2F;%22+newline+%22&#x2F;**** as a result. ****&#x2F;%22+newline;if(importCount){ta.value+=firstNote;}for(var i=0;ss=L[i];++i){if(ss.importtext){imports+=ss.importtext+newline;}main+=%22&#x2F;**** %22+ss.label+%22 style sheet%22+ss.shorturl+%22 ****&#x2F;%22+newline;main+=newline;main+=ss.fulltext;main+=newline;main+=newline;main+=newline;}ta.value+=imports+newline+main;update();}function update(){try{if(!x||x.closed){ta.style.backgroundColor=%22#ddd%22;return;}x.editStyles;}catch(er){ta.style.backgroundColor=%22#fdc%22;setTimeout(update,150);dead=true;return;}if(dead){dead=false;ta.style.backgroundColor=%22%22;oldCSS=null;}if(!x.editStyles){var newSS;newSS=x.document.createElement(%22style%22);newSS.type=%22text&#x2F;css%22;x.document.getElementsByTagName(%22head%22)[0].appendChild(newSS);x.editStyles=newSS;oldCSS=null;for(var i=0,ss;ss=x.document.styleSheets[i];++i)ss.disabled=true;}if(oldCSS!=ta.value){oldCSS=ta.value;x.editStyles.innerHTML=ta.value;}setTimeout(update,150);}y=open(&#x27;&#x27;,&#x27;&#x27;,&#x27;resizable,scrollbars=yes,width=550,height=520&#x27;);y.document.write(&#x27;&lt;title&gt;Edit Styles&lt;&#x2F;title&gt;&lt;br &#x2F;&gt;
&lt;style&gt;.ec { width: 100%; height: 100%; border: none; margin: 0px; padding: 0px; }&lt;&#x2F;style&gt;
&lt;p&gt;&lt;body class=%22ec%22&gt;&lt;br &#x2F;&gt;
&lt;form name=%22f%22 style=%22margin: 0px;%22 class=%22ec%22&gt;&lt;textarea name=%22ta%22 wrap=%22soft%22 style=%22margin: 0px; border: 0px; width:100%; height:100%;%22 class=%22ec%22&gt;&lt;&#x2F;textarea&gt;&lt;script&gt;&#x27;+update+init+&#x27;init();&lt;&#x27;+&#x27;&#x2F;script&gt;&#x27;);y.document.close();})()&quot;&gt;&quot;edit styles&quot; bookmarklet&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The &quot;edit styles&quot; bookmarklet allows on-the-fly editing of the active &lt;acronym title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;&#x2F;acronym&gt; file of any webpage. Try it out - &lt;a href=&quot;javascript:(function(){function init(){var newline=unescape(%22%%22+%220A%22),importCount=0,L=[];dead=false;oldCSS=null;x=opener;ta=document.f.ta;ta.select();if(x.editStyles){ta.value=x.editStyles.innerHTML;update();return;}ta.value=%22&#x2F;* Type CSS rules here and they will be applied%22+newline+%22to pages from &#x27;%22+location.host+%22&#x27;%22+newline+%22immediately as long as you keep this window open. *&#x2F;%22+newline+newline;function add(s){if(!s.disabled){var y={sheet:s,readable:true,label:%22Imported%22,inline:false,shorturl:%22%22,fulltext:%22%22};try{for(var k=0,m;m=s.cssRules[k];++k)if(m.type==3)add(m.styleSheet);}catch(er){y.readable=false;}L.push(y);if(s.ownerNode){y.label=s.ownerNode.tagName.toUpperCase()+%22-tag%22;if(!s.ownerNode.getAttribute(%22src%22)&amp;&amp;!s.ownerNode.href)y.inline=true;}if(y.inline){y.label=%22Inline %22+y.label;y.fulltext=fix(s.ownerNode.innerHTML);}else if(s.href.substr(0,13)==%22data:text&#x2F;css%22){y.shorturl=%22 contained in a data: URL%22;y.fulltext=fix(unescape(s.href.slice(14)));}else{++importCount;y.importtext=%22@import \%22%22+s.href+%22\%22;%22;y.shorturl=%22 %22+s.href.split(&#x27;&#x2F;&#x27;).reverse()[0];if(!y.readable){y.fulltext=%22&#x2F;* Out-of-domain; imported above. *&#x2F;%22;}else if(s.href.substr(0,5)!=%22http:%22){y.fulltext=%22&#x2F;* Non-http; imported above. *&#x2F;%22;}else{var loadingText=%22&#x2F;* Loading (%22+(L.length-1)+%22) *&#x2F;%22;y.fulltext=loadingText;var p=new XMLHttpRequest();p.onload=function(e){ta.value=ta.value.replace(y.importtext+newline,%22%22);y.fulltext=p.responseText;ta.value=ta.value.replace(loadingText,fix(y.fulltext));ta.value=ta.value.replace(firstNote+newline,%22%22);};p.open(%22GET%22,s.href);p.send(null);}}}}function fix(s){while((s[0]==newline)&amp;&amp;s.length&gt;1)s=s.slice(1);while((s[s.length-1]==newline)&amp;&amp;s.length&gt;1)s=s.substr(0,s.length-1);s=s.replace(&#x2F;@import.*;&#x2F;ig,function(){return %22&#x2F;* %22+RegExp.lastMatch+%22 *&#x2F;%22;});return s;}for(var i=0,ss;ss=x.document.styleSheets[i];++i)add(ss);var imports=%22%22,main=%22%22;var firstNote=%22&#x2F;**** Style sheets whose contents could be loaded were ****&#x2F;%22+newline+%22&#x2F;**** imported instead.  Rule order may be incorrect   ****&#x2F;%22+newline+%22&#x2F;**** as a result. ****&#x2F;%22+newline;if(importCount){ta.value+=firstNote;}for(var i=0;ss=L[i];++i){if(ss.importtext){imports+=ss.importtext+newline;}main+=%22&#x2F;**** %22+ss.label+%22 style sheet%22+ss.shorturl+%22 ****&#x2F;%22+newline;main+=newline;main+=ss.fulltext;main+=newline;main+=newline;main+=newline;}ta.value+=imports+newline+main;update();}function update(){try{if(!x||x.closed){ta.style.backgroundColor=%22#ddd%22;return;}x.editStyles;}catch(er){ta.style.backgroundColor=%22#fdc%22;setTimeout(update,150);dead=true;return;}if(dead){dead=false;ta.style.backgroundColor=%22%22;oldCSS=null;}if(!x.editStyles){var newSS;newSS=x.document.createElement(%22style%22);newSS.type=%22text&#x2F;css%22;x.document.getElementsByTagName(%22head%22)[0].appendChild(newSS);x.editStyles=newSS;oldCSS=null;for(var i=0,ss;ss=x.document.styleSheets[i];++i)ss.disabled=true;}if(oldCSS!=ta.value){oldCSS=ta.value;x.editStyles.innerHTML=ta.value;}setTimeout(update,150);}y=open(&#x27;&#x27;,&#x27;&#x27;,&#x27;resizable,scrollbars=yes,width=550,height=520&#x27;);y.document.write(&#x27;&lt;title&gt;Edit Styles&lt;&#x2F;title&gt;&lt;br &#x2F;&gt;
&lt;style&gt;.ec { width: 100%; height: 100%; border: none; margin: 0px; padding: 0px; }&lt;&#x2F;style&gt;
&lt;p&gt;&lt;body class=%22ec%22&gt;&lt;br &#x2F;&gt;
&lt;form name=%22f%22 style=%22margin: 0px;%22 class=%22ec%22&gt;&lt;textarea name=%22ta%22 wrap=%22soft%22 style=%22margin: 0px; border: 0px; width:100%; height:100%;%22 class=%22ec%22&gt;&lt;&#x2F;textarea&gt;&lt;script&gt;&#x27;+update+init+&#x27;init();&lt;&#x27;+&#x27;&#x2F;script&gt;&#x27;);y.document.close();})()&quot;&gt;click here&lt;&#x2F;a&gt; (only in &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;&quot;&gt;Mozilla&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot;&gt;Mozilla Firebird&lt;&#x2F;a&gt; - all the more reason to switch, if you haven&#x27;t). Changing the CSS changes the webpage immediately, allowing for a great way to try out new styling painlessly and saving you the constant edit-reload cycle. This is a must-have tool for the web designer&#x2F;developer. Drag it to your bookmark toolbar. Don&#x27;t style your site without it.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Web designer article series: A Second Voice</title>
    <published>2003-08-10T23:58:16+00:00</published>
    <updated>2003-08-10T23:58:16+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/10/web-designer-article-series-a-second-voice/"/>
    <id>https://chuyeow.wtf/2003/08/10/web-designer-article-series-a-second-voice/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/10/web-designer-article-series-a-second-voice/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mezzoblue.com&#x2F;&quot;&gt;Dave Shea&lt;&#x2F;a&gt; has started a new series of articles on &lt;a href=&quot;http:&#x2F;&#x2F;www.mezzoblue.com&#x2F;&quot;&gt;Mezzoblue&lt;&#x2F;a&gt; titled &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.mezzoblue.com&#x2F;secondvoice&#x2F;&quot;&gt;A Second Voice&lt;&#x2F;a&gt;&quot;. It is a group effort consisting of web designer specialists in their field, including Usability, Design and Programming. The &lt;a href=&quot;http:&#x2F;&#x2F;www.mezzoblue.com&#x2F;cgi-bin&#x2F;mt&#x2F;mezzo&#x2F;archives&#x2F;000215.asp#000215&quot; title=&quot;Accessibility: Build it, and They Will Come&quot;&gt;1st article on accessibility&lt;&#x2F;a&gt; by Nic Steenhout reads easily.&lt;&#x2F;p&gt;
&lt;p&gt;This is definitely one to watch and bookmark. I&#x27;m just passing it along as &quot;word of blog&quot;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Alphabet != Letter</title>
    <published>2003-08-08T14:05:52+00:00</published>
    <updated>2003-08-08T14:05:52+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/08/alphabet-letter/"/>
    <id>https://chuyeow.wtf/2003/08/08/alphabet-letter/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/08/alphabet-letter/">&lt;p&gt;One thing that turns me off is when people (wrongly) use &#x27;alphabet&#x27; in place of &#x27;letter&#x27;. An &lt;a href=&quot;http:&#x2F;&#x2F;dictionary.reference.com&#x2F;search?q=alphabet&quot; title=&quot;Dictionary.com definition for &#x27;alphabet&#x27;&quot;&gt;alphabet&lt;&#x2F;a&gt; is a collection of &lt;a href=&quot;http:&#x2F;&#x2F;dictionary.reference.com&#x2F;search?q=letter&quot; title=&quot;Dictionary.com definition for letter&#x27;&quot;&gt;letter&lt;&#x2F;a&gt;s. &#x27;A&#x27;, &#x27;b&#x27;, &#x27;c&#x27; are letters. They are not alphabets. Everytime I hear someone say it wrong, I&#x27;m tempted to correct them whether they like it or not, and I often do.&lt;&#x2F;p&gt;
&lt;p&gt;Don&#x27;t make that (painful, painful) gaffe. At least don&#x27;t make it in front of me.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Designing with web standards slides online</title>
    <published>2003-08-08T07:02:47+00:00</published>
    <updated>2003-08-08T07:02:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/08/designing-with-web-standards-slides-online/"/>
    <id>https://chuyeow.wtf/2003/08/08/designing-with-web-standards-slides-online/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/08/designing-with-web-standards-slides-online/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;zeldman.com&#x2F;&quot;&gt;Jeffrey Zeldman&lt;&#x2F;a&gt; has put up the &lt;a href=&quot;http:&#x2F;&#x2F;www.happycog.com&#x2F;lectures&#x2F;dwws&#x2F;&quot;&gt;slides for the Web Design World keynote&lt;&#x2F;a&gt;. For those of you still unfamiliar with &lt;a href=&quot;http:&#x2F;&#x2F;webstandards.org&#x2F;&quot;&gt;Web Standards&lt;&#x2F;a&gt;, the slides (in HTML) would be a pretty good run through of what web standards can do for you and your website. CSS layouts are used by commercial websites like &lt;a href=&quot;http:&#x2F;&#x2F;www.happycog.com&#x2F;lectures&#x2F;dwws&#x2F;25.html&quot;&gt;EPSN&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.happycog.com&#x2F;lectures&#x2F;dwws&#x2F;26.html&quot;&gt;Wired.com&lt;&#x2F;a&gt; to good effect. Some that don&#x27;t &lt;a href=&quot;http:&#x2F;&#x2F;www.happycog.com&#x2F;lectures&#x2F;dwws&#x2F;2.html&quot;&gt;break&lt;&#x2F;a&gt; or ask you to download X browser (with MS IE being the most common - check out &lt;a href=&quot;http:&#x2F;&#x2F;zone.msn.com&#x2F;blog.asp&quot;&gt;MSN Gaming Zone&lt;&#x2F;a&gt; in Firebird).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Marketing Mozilla Firebird</title>
    <published>2003-08-08T05:45:44+00:00</published>
    <updated>2003-08-08T05:45:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/08/marketing-mozilla-firebird/"/>
    <id>https://chuyeow.wtf/2003/08/08/marketing-mozilla-firebird/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/08/marketing-mozilla-firebird/">&lt;p&gt;I came across this page written by Blake Ross (Mozilla Firebird originator)  on &quot;marketing Mozilla Firebird (Marketing Firebird)&quot;:http:&#x2F;&#x2F;www.blakeross.com&#x2F;firebird&#x2F;marketing.html. It encourages Firebird users and advocates alike to promote Firebird via word of mouth (like the way Kazaa has grown), and through active promotion on your website.&lt;&#x2F;p&gt;
&lt;div class=&quot;pullquote&quot;&gt;
&quot;Make it your goal to convert five friends, coworkers, family members or other acquaintances to Firebird&quot;
&lt;&#x2F;div&gt;
&lt;p&gt;Linking to the official &quot;Why You Should Switch to the Mozilla Firebird browser&quot;:http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;why&#x2F; page is one way. Saying things like &quot;Stop popup ads with Firebird.&quot; is better. Web developers will appreciate it&#x27;s better CSS model (IE 6 for windows is a klutz with CSS). Power users will appreciate tabbed-browsing (no more Right-click -&gt; Open in a New window).&lt;&#x2F;p&gt;
&lt;p&gt;Go on, promote Firebird if you love it. I do, and I&#x27;ve made 2 converts that I know of, and hopefully more from my entries here and at &quot;Ensight&quot;:http:&#x2F;&#x2F;ensight.org&#x2F;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Life as it has never sucked before</title>
    <published>2003-08-08T05:13:07+00:00</published>
    <updated>2003-08-08T05:13:07+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/08/08/life-as-it-has-never-sucked-before/"/>
    <id>https://chuyeow.wtf/2003/08/08/life-as-it-has-never-sucked-before/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/08/08/life-as-it-has-never-sucked-before/">&lt;p&gt;I&#x27;m really on a downward spiral. There&#x27;s not one thing I can&#x27;t bitch about, but right now what really gets me down is being scammed by my FYP(Final Year Project) supervisor. I went through a whole lot of trouble just to get his project and now he gives me one that is totally unrelated to the project title or synposis.&lt;&#x2F;p&gt;
&lt;p&gt;_Design of intelligent evolutionary software agents for e-commerce_ is the title and I&#x27;m doing nothing related to agents nor e-commerce. Instead, I&#x27;m continuing someone else&#x27;s FYP(Final Year Project) which had disappointing results - something to do with Incremental Genetic Algorithms using the Michigan approach. Rest assured I don&#x27;t understand what it is, nor does it excite me (I&#x27;ve read that someone else&#x27;s technical paper) in the least. I did get assurance from the supervisor that there is a high chance of publishing a paper, so that is some consolation.&lt;&#x2F;p&gt;
&lt;p&gt;Whatever. I&#x27;m tossing around the idea of getting _yet another_ change in FYP(Final Year Project). Or should I just stick with it and tough it out? Damn. Why am I so goddamn unlucky? It&#x27;s like I&#x27;m furiously failing every saving throw as I come to each challenge. Or maybe I just have a Luck of 3 (only RPGers will appreciate that).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>The monthly report - July 2003</title>
    <published>2003-07-30T15:39:41+00:00</published>
    <updated>2003-07-30T15:39:41+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/30/the-monthly-report-july-2003/"/>
    <id>https://chuyeow.wtf/2003/07/30/the-monthly-report-july-2003/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/30/the-monthly-report-july-2003/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;&quot; title=&quot;redemption in a blog&quot;&gt;redemption in a blog&lt;&#x2F;a&gt; has seen a total of 18,000 &lt;s&gt;16,000&lt;&#x2F;s&gt; odd hits in this month of July 2003. Not much - a petty amount in fact, but I&#x27;m glad to see that I am getting &lt;em&gt;some&lt;&#x2F;em&gt; readership at all.&lt;&#x2F;p&gt;
&lt;p&gt;Now onto more interesting facts, first being the &lt;strong&gt;most visited entries&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;14&#x2F;rounded_tables_with_css.html&quot;&gt;Rounded tables with CSS&lt;&#x2F;a&gt; had the highest number of hits, despite it being a no-show in terms of delivering what is expected from the title&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;29&#x2F;mozilla_firebird_061_released.html&quot;&gt;Mozilla Firebird 0.6.1 released&lt;&#x2F;a&gt; - Mozilla-related entries seem to get good viewership for some reason&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;20&#x2F;i_got_my_google_tan.html&quot;&gt;I got my Google tan&lt;&#x2F;a&gt; wasn&#x27;t really anything serious, but the word &#x27;Google&#x27; seems to draw some attention&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Top search strings&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;thunderbird email&lt;&#x2F;em&gt; - currently ranked no. 5 on Google&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;firebird google toolbar&lt;&#x2F;em&gt; - 1st on Google&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;mambo 4.5&lt;&#x2F;em&gt; - 6th on Google&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Other interesting stuff&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ranked 3rd and 4th for &lt;em&gt;rounded tables&lt;&#x2F;em&gt; - who would have thought?&lt;&#x2F;li&gt;
&lt;li&gt;ranked 1st and 2nd for &lt;em&gt;jade weblogic&lt;&#x2F;em&gt; - now that would have my old colleagues at the company I was interning at visiting my blog and finding nothing of use&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ranchero.com&#x2F;netnewswire&#x2F;&quot;&gt;NetNewsWire&lt;&#x2F;a&gt;, a news reader for Mac OS X, is one of the top user agents - I wonder who you people are, or maybe someone got here from an aggregator.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Java1.3.1&lt;&#x2F;em&gt; is another top user agent - I wonder what exactly this is&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Until next month, and thanks for popping by!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>CPE - the illegitimate, forgotten bastard child of ECE dept, NUS</title>
    <published>2003-07-30T13:56:56+00:00</published>
    <updated>2003-07-30T13:56:56+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/30/cpe-the-illegitimate-forgotten-bastard-child-of-ece-dept-nus/"/>
    <id>https://chuyeow.wtf/2003/07/30/cpe-the-illegitimate-forgotten-bastard-child-of-ece-dept-nus/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/30/cpe-the-illegitimate-forgotten-bastard-child-of-ece-dept-nus/">&lt;p&gt;Those of us Computer Engineering (CPE) students in the Engineering faculty of NUS have really been hard done by this time. First of all, our selection of modules are a subset of those in Electrical Engineering (EE) - EE students have a much wider range of modules to choose from, while CPE have to compete with those from EE for places in modules in our concentrations. I&#x27;ve heard it said that an EE student can convert his degree into a CPE one, provided he or she takes sufficient modules related to CPE. I now understand why the split of Computer Engineering from the School of Computing (SoC) has been said to be for political reasons.&lt;&#x2F;p&gt;
&lt;p&gt;Now, in the recent allocation of Final Year Projects (FYP), some CPE students (yours truly included) were wrongly allocated projects deemed &#x27;Unsuitable for CPE&#x27; &quot;because of a glitch&quot; in the system. I can accept that - at least to the extent of accepting that a system that has been in place for several years can still fail. No matter. Provided something suitable was done as recompense for the lost opportunity to fairly ballot for the our FYP choices. I was lucky - after appealing for my 2nd choice project, which was unallocated, and with a 2nd mini-ballot, I got it. Others were not so lucky, as I&#x27;ve found. One of my friends was allocated neither his first 8 nor his appeal choices. OK, so he appealed to one of the heads to allow him to continue his Research Internship Project as an FYP - even his supervisor&#x27;s all ready to accept him. But no they say, &quot;even if there is a glitch, there are still many students didn&#x27;t get any of their 8 choices... and you are not exceptional&quot;. What? This student has forfeited his chance at balloting for his 8 choices because of YOUR glitch. And you expect him to accept the outcome of somebody else&#x27;s fumbling?&lt;&#x2F;p&gt;
&lt;p&gt;And what&#x27;s worse is most of the projects indicated as &#x27;Suitable for CPE&#x27; were taken by EE students. This despite the fact that we have only a limited number of FYPs to choose from. I was worried initially and emailed the person in charge, who reassured me that yes CPE students will be given a priority. I now realise that was a lie: they refused to tell our year representative when he asked the same question.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Firebird 0.6.1 released</title>
    <published>2003-07-29T11:07:25+00:00</published>
    <updated>2003-07-29T11:07:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/29/mozilla-firebird-061-released/"/>
    <id>https://chuyeow.wtf/2003/07/29/mozilla-firebird-061-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/29/mozilla-firebird-061-released/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot;&gt;Mozilla Firebird&lt;&#x2F;a&gt; 0.6.1 has been released. People who have been staying away because of the auto-complete crash bug, or have been annoyed like I was (but still stuck to Firebird for it&#x27;s redeeming qualities) will be pleased to know that bug has been eliminated.&lt;&#x2F;p&gt;
&lt;div class=&quot;pullquote&quot;&gt;&quot;The Best Browser, Bar None&quot;&lt;&#x2F;div&gt;
&lt;p&gt;Other than that, the other bug-fix of note is a fix for the DOM security restriction bug which broke certain bookmarklets. And there&#x27;s a snazzy new icon too. This is after all a maintenance, bug-fix release - the next major release, 0.7, will be out in the time of Mozilla 1.5 final&#x27;s release date, and will feature upgrades to the download and password manager systems.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;&#x2F;strong&gt;: If you&#x27;d bookmarked the Firebird website as &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;firebird&#x2F;&quot;&gt;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;firebird&#x2F;&lt;&#x2F;a&gt;, it seems to be time to update it. The &#x27;front&#x27; page is &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;&quot;&gt;http:&#x2F;&#x2F;www.mozilla.org&#x2F;products&#x2F;firebird&#x2F;&lt;&#x2F;a&gt;, and that old page is now intended as a developer resource.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Module bidding result</title>
    <published>2003-07-29T10:31:28+00:00</published>
    <updated>2003-07-29T10:31:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/29/module-bidding-result/"/>
    <id>https://chuyeow.wtf/2003/07/29/module-bidding-result/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/29/module-bidding-result/">&lt;p&gt;Following up on this &lt;a href=&quot;https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;29&#x2F;bidding_for_modules.html&quot; title=&quot;Bidding for modules blog entry&quot;&gt;entry&lt;&#x2F;a&gt; earlier today.&lt;&#x2F;p&gt;
&lt;p&gt;Seems I got all the modules I bid for:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
Dear CHEAH CHU YEOW,&lt;&#x2F;p&gt;
&lt;p&gt;Please find your bidding result for round 1A as follows:&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
</content>
  </entry>
  <entry>
    <title>Great PHP5 article at SitePoint</title>
    <published>2003-07-29T05:03:39+00:00</published>
    <updated>2003-07-29T05:03:39+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/29/great-php5-article-at-sitepoint/"/>
    <id>https://chuyeow.wtf/2003/07/29/great-php5-article-at-sitepoint/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/29/great-php5-article-at-sitepoint/">&lt;p&gt;Harry Fuecks has written a very good article on PHP5 at &lt;a href=&quot;http:&#x2F;&#x2F;sitepoint.com&quot;&gt;SitePoint&lt;&#x2F;a&gt; entitled &#x27;&lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;article&#x2F;1192&quot;&gt;PHP5: Coming Soon to a Webserver Near You&lt;&#x2F;a&gt;&#x27;. It is a long article, but peppered with code examples illustrating the features of PHP5.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Thunderbird 0.1</title>
    <published>2003-07-29T04:21:37+00:00</published>
    <updated>2003-07-29T04:21:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/29/mozilla-thunderbird-01/"/>
    <id>https://chuyeow.wtf/2003/07/29/mozilla-thunderbird-01/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/29/mozilla-thunderbird-01/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;thunderbird&#x2F;&quot; title=&quot;Mozilla Thunderbird&quot;&gt;Mozilla Thunderbird&lt;&#x2F;a&gt; is now available as it&#x27;s very first &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;thunderbird&#x2F;releases&#x2F;0.1&#x2F;&quot; title=&quot;Mozilla Thunderbird 0.1 release&quot;&gt;milestone release&lt;&#x2F;a&gt;. For those of you who have been dubious of getting builds, this milestone release should be something you would feel comfortable trying out.&lt;&#x2F;p&gt;
&lt;p&gt;Installation on any platform (currently only binaries for Windows, Linux and Mac OS X are available) involves only unarchiving the binary archive and running the executable - no messing with the registry for Windows users. Uninstallation is as simple as deleting the Thunderbird directory, and your &lt;a href=&quot;http:&#x2F;&#x2F;texturizer.net&#x2F;thunderbird&#x2F;edit.html#profile&quot;&gt;profile&lt;&#x2F;a&gt; directory too if you don&#x27;t wish to keep it.&lt;&#x2F;p&gt;
&lt;p&gt;If you haven&#x27;t yet, try it, if not for it&#x27;s coolness factor, then for it&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;mailnews&#x2F;spam.html&quot; title=&quot;Bayesian spam filter&quot;&gt;Bayesian spam filter&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Bidding for modules</title>
    <published>2003-07-29T02:53:14+00:00</published>
    <updated>2003-07-29T02:53:14+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/29/bidding-for-modules/"/>
    <id>https://chuyeow.wtf/2003/07/29/bidding-for-modules/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/29/bidding-for-modules/">&lt;p&gt;This is fun! First time the university&#x27;s having this &lt;a href=&quot;http:&#x2F;&#x2F;www.cors.nus.edu.sg&#x2F;&quot; title=&quot;CORS&quot;&gt;bidding system&lt;&#x2F;a&gt;, and I&#x27;m up monitoring the bidding situation to ensure a place in my modules. Or rather, in 1 particular module, Computer Graphics. It&#x27;s coming out to be a bidding war - lowest bid is already 503 points which is more than half of the points we are allocated in total (1000). And this for a module I may end up dropping.&lt;&#x2F;p&gt;
&lt;p&gt;Oh wait it just increased to 548 points. Should I just show my hand?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Timing</title>
    <published>2003-07-29T02:27:10+00:00</published>
    <updated>2003-07-29T02:27:10+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/29/timing/"/>
    <id>https://chuyeow.wtf/2003/07/29/timing/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/29/timing/">&lt;p&gt;3.5 km (left): 21.10 min&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>&amp;reg_id is not ®_id</title>
    <published>2003-07-27T12:37:39+00:00</published>
    <updated>2003-07-27T12:37:39+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/27/reg_id-is-not-_id/"/>
    <id>https://chuyeow.wtf/2003/07/27/reg_id-is-not-_id/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/27/reg_id-is-not-_id/">&lt;p&gt;Another reason to hope Microsoft gets it right in IE 7, seeing as they are reluctant to fix IE 6: I was making changes to a website for a client and mostly tested the site in Mozilla Firebird 0.6 - I forgot to test the site in IE, but that was a fault on my part on thinking it would be alright. It wasn&#x27;t. The JS popup loads an invalid page because of the query string, which had become file.php?event_id=3&amp;reg;_id=12345.&lt;&#x2F;p&gt;
&lt;p&gt;Apparently, IE was being _too_ smart in converting the &amp;reg into &amp;reg; even though the ending semi-colon &#x27;;&#x27; was missing. Changing to &amp;amp;amp;reg_id didn&#x27;t help either. It is a subtle bug though, since it only happens when loading via &lt;tt&gt;window.open(this.href)&lt;&#x2F;tt&gt;. I had to fix it by making reg_id the first query string parameter.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Meaningful URLs in MovableType</title>
    <published>2003-07-26T17:30:39+00:00</published>
    <updated>2003-07-26T17:30:39+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/26/meaningful-urls-in-movabletype/"/>
    <id>https://chuyeow.wtf/2003/07/26/meaningful-urls-in-movabletype/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/26/meaningful-urls-in-movabletype/">&lt;p&gt;Thanks to this &lt;a href=&quot;http:&#x2F;&#x2F;contactsheet.org&#x2F;articles&#x2F;2003&#x2F;07&#x2F;23&#x2F;friendly_urls_site_maintenance.html&quot;&gt;entry at Contact Sheet&lt;&#x2F;a&gt;, this blog now features friendly, meaningul URLs. Previously, individual entry archives (permalinks) were named like so: 00034.html. With simple changes to the archiving configuration, individual archives are now named like so: https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;26&#x2F;button_maker.html, monthly archives like so: https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;2003&#x2F;07&#x2F;index.html, and category archives like so: https:&#x2F;&#x2F;chuyeow.wtf&#x2F;archives&#x2F;Blogging&#x2F;index.html.&lt;&#x2F;p&gt;
&lt;div class=&quot;pullquote&quot;&gt;
... this blog now features friendly, meaningul URLs.
&lt;&#x2F;div&gt;
&lt;p&gt;There isn&#x27;t a trick to it. In fact it&#x27;s in the MovableType documentation itself. If you have a MT blog yourself, go to &#x27;Weblog Config&#x27;, then &#x27;Archiving&#x27;, and click on the question mark next to &#x27;Archive File Template&#x27;. It&#x27;s all there, even with examples.&lt;&#x2F;p&gt;
&lt;p&gt;How to do it:&lt;br &#x2F;&gt;
- go to &#x27;Weblog Config&#x27;&lt;br &#x2F;&gt;
- go to &#x27;Archiving&#x27;&lt;br &#x2F;&gt;
- for &#x27;Individual&#x27;, under &#x27;Archive File Template&#x27;, enter: &lt;$MTArchiveDate format=&quot;%Y&#x2F;%m&#x2F;%d&#x2F;&quot;$&gt;&lt;$MTEntryTitle dirify=&quot;1&quot;$&gt;.html&lt;br &#x2F;&gt;
- for &#x27;Daily&#x27;, enter: &lt;$MTArchiveDate format=&quot;%Y&#x2F;%m&#x2F;%d&#x2F;index.html&quot;$&gt;&lt;br &#x2F;&gt;
- for &#x27;Monthly&#x27;, enter: &lt;$MTArchiveDate format=&quot;%Y&#x2F;%m&#x2F;index.html&quot;$&gt;&lt;br &#x2F;&gt;
- for &#x27;Category&#x27;, enter: &lt;$MTArchiveCategory$&gt;&#x2F;index.html&lt;br &#x2F;&gt;
- rebuild!&lt;&#x2F;p&gt;
&lt;p&gt;Of course, you are free to tweak the names of the archive files. Some of you may want to keep your archives by category instead of by date, so something like &lt;$MTEntryCategory dirify=&quot;1&quot;$&gt;&#x2F;&lt;$MTEntryTitle dirify=&quot;1&quot;$&gt;.html would give &#x27;category_name&#x2F;entry_title.html&#x27; for individual entries.&lt;&#x2F;p&gt;
&lt;p&gt;Rest assured that your old permalinks that have been spidered by Googlebots and linked to by other sites will be safe - MT does not delete the old files, but leaves them intact. It is prudent though to make this change as soon as possible , if you ever intend to do so.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Button maker</title>
    <published>2003-07-26T10:04:24+00:00</published>
    <updated>2003-07-26T10:04:24+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/26/button-maker/"/>
    <id>https://chuyeow.wtf/2003/07/26/button-maker/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/26/button-maker/">&lt;p&gt;I recently came across this great &lt;a href=&quot;http:&#x2F;&#x2F;www.minimalverbosity.com&#x2F;2003&#x2F;May&#x2F;19&#x2F;buttons.htm&quot;&gt;button maker &lt;&#x2F;a&gt; at &lt;a href=&quot;http:&#x2F;&#x2F;www.minimalverbosity.com&quot;&gt;minimal verbosity&lt;&#x2F;a&gt; written in PHP by Bill Zeller. The source is &lt;a href=&quot;http:&#x2F;&#x2F;www.minimalverbosity.com&#x2F;button.php?leftFill=FFCC00A&amp;leftText=R&amp;leftTextPosition=8&amp;rightFill=CCCC94&amp;rightText=in%20a%20blog&amp;barPosition=18&amp;rightTextPosition=26&quot;&gt;here&lt;&#x2F;a&gt; - images are generated using the GD 2 library.&lt;&#x2F;p&gt;
&lt;p&gt;Adam Kalsey has also written a user interface to that script &lt;a href=&quot;http:&#x2F;&#x2F;kalsey.com&#x2F;tools&#x2F;buttonmaker&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;, so you don&#x27;t have to play around with the query string (which I did). I came up with this in a few seconds playing around with the query string: &lt;img alt=&quot;redemption in a blog button&quot; src=&quot;&#x2F;assets&#x2F;RIAB.png&quot; width=&quot;80&quot; height=&quot;15&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Cool stuff.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Back from the dead</title>
    <published>2003-07-26T09:50:13+00:00</published>
    <updated>2003-07-26T09:50:13+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/26/back-from-the-dead/"/>
    <id>https://chuyeow.wtf/2003/07/26/back-from-the-dead/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/26/back-from-the-dead/">&lt;p&gt;There&#x27;ve been some recent problems with hosting, primarily because of my sites (I&#x27;m on a shared hosting plan with 8 other domains being hosted). I do have no idea why this is so though, but it seems my robots.txt and favicon.ico files caused the server to go into very high loads (more than 90%). Funny thing is there weren&#x27;t any in the paths provided in the logs, but I went ahead and deleted all that I could find. Guess I&#x27;ll never know the exact cause of that, unless my webhosting service provider has a clue.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, my recent installation of &lt;a href=&quot;http:&#x2F;&#x2F;drupal.org&quot;&gt;Drupal&lt;&#x2F;a&gt; on &lt;a href=&quot;http:&#x2F;&#x2F;codefront.net&quot; title=&quot;CodeFront.net - coding in the front lines&quot;&gt;CodeFront.net&lt;&#x2F;a&gt; caused my MovableType blogs, including this one, to be uneditable - no new entries or comments. It was only until recently that I discovered the problem was due to the .htaccess file in the Drupal installation, which prevented .cgi files from being executed.&lt;&#x2F;p&gt;
&lt;p&gt;So I&#x27;m back, not from the dead, but nevertheless with a vengeance, of sorts.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>MovableType for your site (not blog)</title>
    <published>2003-07-20T13:51:46+00:00</published>
    <updated>2003-07-20T13:51:46+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/20/movabletype-for-your-site-not-blog/"/>
    <id>https://chuyeow.wtf/2003/07/20/movabletype-for-your-site-not-blog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/20/movabletype-for-your-site-not-blog/">&lt;p&gt;&lt;a title=&quot;A Whole Lotta Features&quot; href=&quot;http:&#x2F;&#x2F;a.wholelottanothing.org&#x2F;features.blah&#x2F;entry&#x2F;007162&quot;&gt;Beyond the Blog&lt;&#x2F;a&gt; walks through the modification of &lt;a href=&quot;http:&#x2F;&#x2F;movabletype.org&quot;&gt;MovableType&lt;&#x2F;a&gt; for use in managing entire sites. &lt;a href=&quot;http:&#x2F;&#x2F;boxesandarrows.com&#x2F;&quot;&gt;Boxes and Arrows&lt;&#x2F;a&gt; is a prime example of an entire website powered by MT.&lt;&#x2F;p&gt;
&lt;p&gt;This is very interesting to me, because I&#x27;ve been searching high and low for a free, lightweight, usable Content Management System (CMS) for CodeFront.net but all my experimentation and evaluation has turned up naught. Perhaps it would be good for me to do a little under-the-hood tweaking of MT myself.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Modules for the next semester</title>
    <published>2003-07-20T13:06:00+00:00</published>
    <updated>2003-07-20T13:06:00+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/20/modules-for-the-next-semester/"/>
    <id>https://chuyeow.wtf/2003/07/20/modules-for-the-next-semester/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/20/modules-for-the-next-semester/">&lt;p&gt;It&#x27;s that time of year again - module registration at university.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s the plan, if all goes well:&lt;&#x2F;p&gt;
&lt;p&gt;Breadth electives:&lt;br &#x2F;&gt;
&lt;strong&gt;Foundations of AI&lt;&#x2F;strong&gt;, or&lt;br &#x2F;&gt;
&lt;strong&gt;Computer Graphics&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Depth elective:&lt;br &#x2F;&gt;
&lt;strong&gt;Real-time Embedded Systems&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Compulsory modules:&lt;br &#x2F;&gt;
&lt;strong&gt;Human Resource Management&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Light load, but that&#x27;s because it&#x27;s my final year (Computer Engineering) where I&#x27;ll be doing a Final Year Project (FYP) or thesis - hopefully (please, please!) on &#x27;Design of evolutionary, intelligent agents for E-commerce&#x27;. If I don&#x27;t get that FYP, I&#x27;ll have some bitching and complaining to do at the department - it&#x27;s a long story, probably better for another day.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>I got my Google tan</title>
    <published>2003-07-20T12:59:18+00:00</published>
    <updated>2003-07-20T12:59:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/20/i-got-my-google-tan/"/>
    <id>https://chuyeow.wtf/2003/07/20/i-got-my-google-tan/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/20/i-got-my-google-tan/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;pseudodictionary.com&#x2F;&quot;&gt;pseudodictionary.com&lt;&#x2F;a&gt; is a collection of online slang, webspeak and colloquialisms that would enlarge your library of geek words you can use to confuse the unknowing.&lt;&#x2F;p&gt;
&lt;div class=&quot;pullquote&quot;&gt;I do actually have a well-tanned body.&lt;&#x2F;div&gt;
&lt;p&gt;Thanks to that, I discovered that I do actually have a &lt;a href=&quot;http:&#x2F;&#x2F;www.pseudodictionary.com&#x2F;Google Tan&quot;&gt;well-tanned body&lt;&#x2F;a&gt;. I also appreciated this &lt;a href=&quot;http:&#x2F;&#x2F;www.livejournal.com&#x2F;users&#x2F;jwz&#x2F;230575.html&quot;&gt;story about Harry Potter&#x27;s wang&lt;&#x2F;a&gt; (though the meaning was obvious), which had me rotflmao.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>RPG comic</title>
    <published>2003-07-20T12:47:40+00:00</published>
    <updated>2003-07-20T12:47:40+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/20/rpg-comic/"/>
    <id>https://chuyeow.wtf/2003/07/20/rpg-comic/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/20/rpg-comic/">&lt;p&gt;I chanced upon this comic strip series at &lt;a href=&quot;http:&#x2F;&#x2F;www.nuklearpower.com&#x2F;daily.php?date=010302&quot;&gt;Nuklear Power&lt;&#x2F;a&gt; titled &#x27;8-Bit Theater&#x27;. It&#x27;s really funny but you have to be an RPGer to appreciate some of the humor. Anytime you&#x27;re bored, you can work through the comic episode by episode (it&#x27;s a continuing series) like I do.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Bookmarklets for the web designer</title>
    <published>2003-07-16T17:17:28+00:00</published>
    <updated>2003-07-16T17:17:28+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/16/bookmarklets-for-the-web-designer/"/>
    <id>https://chuyeow.wtf/2003/07/16/bookmarklets-for-the-web-designer/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/16/bookmarklets-for-the-web-designer/">&lt;p&gt;I&#x27;ve made &lt;a href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;&quot;&gt;Simon Willison&#x27;s blog&lt;&#x2F;a&gt; one of my daily reads, and was reading some of the archives in the CSS category when I chanced upon a &lt;a href=&quot;http:&#x2F;&#x2F;simon.incutio.com&#x2F;archive&#x2F;2003&#x2F;06&#x2F;03&#x2F;bookmarkletsAndCSS&quot;&gt;1-month old entry&lt;&#x2F;a&gt; that was an absolute gem.&lt;&#x2F;p&gt;
&lt;p&gt;To be honest, I didn&#x27;t previously bother with bookmarklets because I thought they were cool, but lacking in practicality. Until I saw this...&lt;&#x2F;p&gt;
&lt;div class=&quot;pullquote&quot;&gt;
With this, you can experiment with the CSS styles of your website(s) for those &#x27;what if?&#x27; moments...
&lt;&#x2F;div&gt;
&lt;p&gt;I&#x27;ve replicated the &#x27;edit styles&#x27; bookmarklet here. Just click on it, or drag it to your bookmark toolbar if you think it&#x27;s useful (don&#x27;t think too much - it IS).&lt;br &#x2F;&gt;
 &amp;raquo; &lt;a href=&quot;javascript:(function(){function init(){var newline=unescape(&amp;quot;%&amp;quot;+&amp;quot;0A&amp;quot;),importCount=0,L=[];dead=false;oldCSS=null;x=opener;ta=document.f.ta;ta.select();if(x.editStyles){ta.value=x.editStyles.innerHTML;update();return;}ta.value=&amp;quot;&#x2F;* Type CSS rules here and they will be applied&amp;quot;+newline+&amp;quot;to pages from &#x27;&amp;quot;+location.host+&amp;quot;&#x27;&amp;quot;+newline+&amp;quot;immediately as long as you keep this window open. *&#x2F;&amp;quot;+newline+newline;function add(s){if(!s.disabled){var y={sheet:s,readable:true,label:&amp;quot;Imported&amp;quot;,inline:false,shorturl:&amp;quot;&amp;quot;,fulltext:&amp;quot;&amp;quot;};try{for(var k=0,m;m=s.cssRules[k];++k)if(m.type==3)add(m.styleSheet);}catch(er){y.readable=false;}L.push(y);if(s.ownerNode){y.label=s.ownerNode.tagName.toUpperCase()+&amp;quot;-tag&amp;quot;;if(!s.ownerNode.getAttribute(&amp;quot;src&amp;quot;)&amp;&amp;!s.ownerNode.href)y.inline=true;}if(y.inline){y.label=&amp;quot;Inline &amp;quot;+y.label;y.fulltext=fix(s.ownerNode.innerHTML);}else if(s.href.substr(0,13)==&amp;quot;data:text&#x2F;css&amp;quot;){y.shorturl=&amp;quot; contained in a data: URL&amp;quot;;y.fulltext=fix(unescape(s.href.slice(14)));}else{++importCount;y.importtext=&amp;quot;@import \&amp;quot;&amp;quot;+s.href+&amp;quot;\&amp;quot;;&amp;quot;;y.shorturl=&amp;quot; &amp;quot;+s.href.split(&#x27;&#x2F;&#x27;).reverse()[0];if(!y.readable){y.fulltext=&amp;quot;&#x2F;* Out-of-domain; imported above. *&#x2F;&amp;quot;;}else if(s.href.substr(0,5)!=&amp;quot;http:&amp;quot;){y.fulltext=&amp;quot;&#x2F;* Non-http; imported above. *&#x2F;&amp;quot;;}else{var loadingText=&amp;quot;&#x2F;* Loading (&amp;quot;+(L.length-1)+&amp;quot;) *&#x2F;&amp;quot;;y.fulltext=loadingText;var p=new XMLHttpRequest();p.onload=function(e){ta.value=ta.value.replace(y.importtext+newline,&amp;quot;&amp;quot;);y.fulltext=p.responseText;ta.value=ta.value.replace(loadingText,fix(y.fulltext));ta.value=ta.value.replace(firstNote+newline,&amp;quot;&amp;quot;);};p.open(&amp;quot;GET&amp;quot;,s.href);p.send(null);}}}}function fix(s){while((s[0]==newline)&amp;&amp;s.length&gt;1)s=s.slice(1);while((s[s.length-1]==newline)&amp;&amp;s.length&gt;1)s=s.substr(0,s.length-1);s=s.replace(&#x2F;@import.*;&#x2F;ig,function(){return &amp;quot;&#x2F;* &amp;quot;+RegExp.lastMatch+&amp;quot; *&#x2F;&amp;quot;;});return s;}for(var i=0,ss;ss=x.document.styleSheets[i];++i)add(ss);var imports=&amp;quot;&amp;quot;,main=&amp;quot;&amp;quot;;var firstNote=&amp;quot;&#x2F;**** Style sheets whose contents could be loaded were ****&#x2F;&amp;quot;+newline+&amp;quot;&#x2F;**** imported instead.  Rule order may be incorrect   ****&#x2F;&amp;quot;+newline+&amp;quot;&#x2F;**** as a result. ****&#x2F;&amp;quot;+newline;if(importCount){ta.value+=firstNote;}for(var i=0;ss=L[i];++i){if(ss.importtext){imports+=ss.importtext+newline;}main+=&amp;quot;&#x2F;**** &amp;quot;+ss.label+&amp;quot; style sheet&amp;quot;+ss.shorturl+&amp;quot; ****&#x2F;&amp;quot;+newline;main+=newline;main+=ss.fulltext;main+=newline;main+=newline;main+=newline;}ta.value+=imports+newline+main;update();}function update(){try{if(!x||x.closed){ta.style.backgroundColor=&amp;quot;#ddd&amp;quot;;return;}x.editStyles;}catch(er){ta.style.backgroundColor=&amp;quot;#fdc&amp;quot;;setTimeout(update,150);dead=true;return;}if(dead){dead=false;ta.style.backgroundColor=&amp;quot;&amp;quot;;oldCSS=null;}if(!x.editStyles){var newSS;newSS=x.document.createElement(&amp;quot;style&amp;quot;);newSS.type=&amp;quot;text&#x2F;css&amp;quot;;x.document.getElementsByTagName(&amp;quot;head&amp;quot;)[0].appendChild(newSS);x.editStyles=newSS;oldCSS=null;for(var i=0,ss;ss=x.document.styleSheets[i];++i)ss.disabled=true;}if(oldCSS!=ta.value){oldCSS=ta.value;x.editStyles.innerHTML=ta.value;}setTimeout(update,150);}y=open(&#x27;&#x27;,&#x27;&#x27;,&#x27;resizable,scrollbars=yes,width=550,height=520&#x27;);y.document.write(&#x27;&lt;title&gt;Edit Styles&lt;&#x2F;title&gt;&lt;br &#x2F;&gt;
&lt;style&gt;.ec { width: 100%; height: 100%; border: none; margin: 0px; padding: 0px; }&lt;&#x2F;style&gt;
&lt;p&gt;&lt;body class=&amp;quot;ec&amp;quot;&gt;&lt;br &#x2F;&gt;
&lt;form name=&amp;quot;f&amp;quot; style=&amp;quot;margin: 0px;&amp;quot; class=&amp;quot;ec&amp;quot;&gt;&lt;textarea name=&amp;quot;ta&amp;quot; wrap=&amp;quot;soft&amp;quot; style=&amp;quot;margin: 0px; border: 0px; width:100%; height:100%;&amp;quot; class=&amp;quot;ec&amp;quot;&gt;&lt;&#x2F;textarea&gt;&lt;script&gt;&#x27;+update+init+&#x27;init();&lt;&#x27;+&#x27;&#x2F;script&gt;&#x27;);y.document.close();})()&quot;&gt;edit styles bookmarklet&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;With this, you can experiment with the CSS styles of your website(s) for those &#x27;what if?&#x27; moments. You can also change how a site looks to your liking (too small font sizes, glaring background colors) at the click of a bookmarklet and some CSS editing.&lt;&#x2F;p&gt;
&lt;p&gt;For more useful bookmarklets, visit &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;bookmarklets&#x2F;&quot;&gt;Jesse&#x27;s Bookmarklets site&lt;&#x2F;a&gt;, in particular the &lt;a href=&quot;http:&#x2F;&#x2F;www.squarefree.com&#x2F;bookmarklets&#x2F;webdevel.html&quot;&gt;Web Development Bookmarklets section&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Pull quotes for your blog</title>
    <published>2003-07-16T16:26:19+00:00</published>
    <updated>2003-07-16T16:26:19+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/16/pull-quotes-for-your-blog/"/>
    <id>https://chuyeow.wtf/2003/07/16/pull-quotes-for-your-blog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/16/pull-quotes-for-your-blog/">&lt;div class=&quot;pullquote&quot;&gt;
... I decided to steal the idea and implementation for my blog.
&lt;&#x2F;div&gt;
&lt;p&gt;After reading an &lt;a href=&quot;http:&#x2F;&#x2F;www.adampolselli.com&#x2F;archives&#x2F;000034.php&quot;&gt;entry on pull quotes&lt;&#x2F;a&gt; in &lt;a href=&quot;http:&#x2F;&#x2F;www.adampolselli.com&#x2F;&quot;&gt;Adam Polselli&#x27;s blog&lt;&#x2F;a&gt;, I decided to steal the idea and implementation for my blog.&lt;&#x2F;p&gt;
&lt;p&gt;All you got to do is define a CSS class and apply it to the &amp;lt;div&amp;gt; that will contain your pull quote, like so (copied directly from &lt;a href=&quot;http:&#x2F;&#x2F;www.adampolselli.com&#x2F;archives&#x2F;000034.php&quot;&gt;Adam&#x27;s blog entry&lt;&#x2F;a&gt;):&lt;&#x2F;p&gt;
&lt;pre&gt;div.pullquote {
float: right;
width: 150px;
margin: 10px;
margin-left: 15px;
margin-right: 0;
padding: 0;
color: #333;
font-family: georgia, palatino, serif;
font-size: 20px;
text-align: center;
line-height: 24px;
}
&lt;&#x2F;pre&gt;
&lt;p&gt;All credit goes to Adam for that bit of CSS.&lt;br &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Dragonlance Persistent World for Neverwinter Nights</title>
    <published>2003-07-15T17:49:37+00:00</published>
    <updated>2003-07-15T17:49:37+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/15/dragonlance-persistent-world-for-neverwinter-nights/"/>
    <id>https://chuyeow.wtf/2003/07/15/dragonlance-persistent-world-for-neverwinter-nights/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/15/dragonlance-persistent-world-for-neverwinter-nights/">&lt;p&gt;&lt;a title=&quot;Krynn Haven&quot; href=&quot;http:&#x2F;&#x2F;www.krynnhaven.com&#x2F;&quot;&gt;Krynn Haven&lt;&#x2F;a&gt; appears to be a very good Neverwinter Nights Persistent World (PW). You can become a Knight of Solamnia all the way up to a Knight of the Rose and even get voted by your peers to become the the High Clerist. Wizards have to take the Test at the Tower of Wayreth! Perfect for a hardcore Dragonlance fan!&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll have to see this in action and finally re-install NWN - it&#x27;s been a standing there in it&#x27;s pretty box since the last time I played it for a while and quit.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>A handy color picker</title>
    <published>2003-07-15T14:33:35+00:00</published>
    <updated>2003-07-15T14:33:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/15/a-handy-color-picker/"/>
    <id>https://chuyeow.wtf/2003/07/15/a-handy-color-picker/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/15/a-handy-color-picker/">&lt;p&gt;I found this very handy color picker imaginatively named &lt;a title=&quot;Iconico - Color Picker&quot; href=&quot;http:&#x2F;&#x2F;www.iconico.com&#x2F;colorpic&#x2F;&quot;&gt;Color Picker&lt;&#x2F;a&gt; from &lt;a href=&quot;http:&#x2F;&#x2F;www.iconico.com&quot;&gt;Iconico&lt;&#x2F;a&gt;. The good thing about it is that it comes as a ready to run single-file executable (Windows only though). It is also freeware.&lt;&#x2F;p&gt;
&lt;p&gt;Only thing I find lacking is the absence of a palette-saving feature.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Ensight</title>
    <published>2003-07-14T14:37:22+00:00</published>
    <updated>2003-07-14T14:37:22+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/14/ensight/"/>
    <id>https://chuyeow.wtf/2003/07/14/ensight/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/14/ensight/">&lt;p&gt;&lt;a title=&quot;Ensight&quot; href=&quot;http:&#x2F;&#x2F;ensight.org&#x2F;&quot;&gt;Ensight&lt;&#x2F;a&gt; is a multi-author blog I&#x27;ve been a part of. It&#x27;s a tech and biz blog that seems to be doing quite well with a reasonable readership.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;div&gt;
ensight is a group of business and tech professionals sharing their various thoughts. We affectionately call it &quot;peeking into the minds of nearly geniuses&quot;, but you don&#x27;t have to, just don&#x27;t laugh at us.
&lt;&#x2F;div&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;We&#x27;ve reached passed the milestone 100 entries (of which I contributed a measly 2). I, too, am a sucker for useless statistics, as you&#x27;d have noticed.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Rounded tables with CSS</title>
    <published>2003-07-14T14:02:22+00:00</published>
    <updated>2003-07-14T14:02:22+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/14/rounded-tables-with-css/"/>
    <id>https://chuyeow.wtf/2003/07/14/rounded-tables-with-css/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/14/rounded-tables-with-css/">&lt;p&gt;I had cause to create rounded tables in my recent freelance work and rather than use the &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;article&#x2F;392&quot;&gt;&quot;old&quot; way&lt;&#x2F;a&gt; of doing it, I decided to set out to see if this can be more easily achived with &lt;acronym title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;&#x2F;acronym&gt;.&lt;br &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;pullquote&quot;&gt;
And no it isn&#x27;t possible to do so until CSS3 &lt;a href=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;css3-box&#x2F;#name-11&quot;&gt;border-radius&lt;&#x2F;a&gt; is supported in browsers.
&lt;&#x2F;div&gt;
&lt;p&gt;
And no it isn&#x27;t possible to do so until CSS3 &lt;a href=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;css3-box&#x2F;#name-11&quot;&gt;border-radius&lt;&#x2F;a&gt; is supported in browsers. It is, however, possible to do so using Mozilla&#x27;s &lt;tt&gt;-moz-border-radius&lt;&#x2F;tt&gt;, which works in Gecko browsers like Mozilla, Firebird and Netscape 6. It is proprietary though so it won&#x27;t work anywhere else.&lt;&#x2F;p&gt;
&lt;pre&gt;
.roundedCorners {
  -moz-border-radius: 20px;
}
&lt;&#x2F;pre&gt;
&lt;p&gt;Still, it wasn&#x27;t a fruitless search as it turned out easier, erm, hacks to achieve rounded goodness, as demonstrated &lt;a href=&quot;http:&#x2F;&#x2F;www.webweaver.org&#x2F;dan&#x2F;css&#x2F;corners&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;.&lt;br &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla - easy search</title>
    <published>2003-07-13T13:52:12+00:00</published>
    <updated>2003-07-13T13:52:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/13/mozilla-easy-search/"/>
    <id>https://chuyeow.wtf/2003/07/13/mozilla-easy-search/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/13/mozilla-easy-search/">&lt;p&gt;This tidbit of a tip came up at &lt;a title=&quot;mozKit&quot; href=&quot;http:&#x2F;&#x2F;www.mozkit.net&#x2F;blog&#x2F;Mozilla&#x2F;?permalink=Mozilla_Mozilla_Firebird_Quick_Tip_%231.txt&quot;&gt;mozKit&lt;&#x2F;a&gt; today. The Mozilla browser and Firebird have this nifty function where you can select a piece of text and you can do a &quot;Web Search for...&quot; it in the context menu (right-click). Great time-saver for people who search often like me. Funny enough, I do recall myself wanting to always make use of that function when I noticed it quite a while back, but always forget and instinctively type into the Search bar on top. Must make sure to use it from now on.&lt;&#x2F;p&gt;
&lt;p&gt;Also, in the context menu there is a &quot;View selection source&quot; option that allows you to view the HTML source of your selected text&#x2F;image&#x2F;etc. - pretty nifty, pretty useful for web developers who want to check out their HTML source and not have to search through the entire clutter of code.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>State of IT journalism in Singapore</title>
    <published>2003-07-09T06:25:14+00:00</published>
    <updated>2003-07-09T06:25:14+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/09/state-of-it-journalism-in-singapore/"/>
    <id>https://chuyeow.wtf/2003/07/09/state-of-it-journalism-in-singapore/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/09/state-of-it-journalism-in-singapore/">&lt;p&gt;There&#x27;s this publication called Computer Times which comes with The Straits Times every Wednesday - supposedly an IT read. Today&#x27;s issue has this article on Singaporean Nickson Fong, COO of Digimax, which does CGI (Computer Generated Imagery) for Hollywood movies, among them The Matrix Reloaded. There&#x27;s nothing wrong with Nickson Fong or Digimax (in fact, I&#x27;m glad a local &quot;made it&quot;) - it&#x27;s the reporting that I&#x27;ve reservations about.&lt;&#x2F;p&gt;
&lt;p&gt;I quote from the article:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;div&gt;
The self-acknowledged geek builds his own computers and knows &lt;strong&gt;programming languages such as Unix and Linux&lt;&#x2F;strong&gt;.
&lt;&#x2F;div&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Aforementioned &quot;self-acknowledged geek&quot; being Nickson Fong of course, who would definitely not have said that himself. The reporter (who&#x27;s name would remain undisclosed in this blog entry) doesn&#x27;t seem to have a clue. And this is an IT publication - if the reporter was a full-time employee of Computer Times, he should be transferred to a more suitable department!&lt;&#x2F;p&gt;
&lt;p&gt;It makes me shake my head really, and this isn&#x27;t the first instance I&#x27;ve seen discrepancies of this sort in Computer Times, nor many other local IT publications.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Anime goodness</title>
    <published>2003-07-04T16:32:33+00:00</published>
    <updated>2003-07-04T16:32:33+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/04/anime-goodness/"/>
    <id>https://chuyeow.wtf/2003/07/04/anime-goodness/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/04/anime-goodness/">&lt;p&gt;Thanks to a fellow intern (and friend) at work, I&#x27;ve gotten hooked onto anime. I&#x27;ve to be honest that I didn&#x27;t think much of anime before - thought it was cheesy with those exaggerated, caricatured faces and, erm, Pokemon. That episode of South Park with it&#x27;s parody of anime didn&#x27;t help. Well, I was wrong - I was guilty of generalization.&lt;&#x2F;p&gt;
&lt;p&gt;There are quite a few excellent anime series and movies out there, which have truly engaging stories and characters. Naruto is one of those. I&#x27;m sure everyone would have heard of Evangelion, Ghost in the Shell and Gundam - these are immensely popular and excellent.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m currently following Naruto (one of the best and most popular series at the moment), Scrapped Princess (ditto) and E&#x27;s Otherwise. I also borrowed the complete series of Dragon Drive (&quot;&lt;i&gt;My sweet honey&lt;&#x2F;i&gt;&quot;) from my friend. Well, I have the time, now that South Park is showing reruns and Futurama is on hiatus.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Google Toolbar 2.0 beta</title>
    <published>2003-07-04T16:14:53+00:00</published>
    <updated>2003-07-04T16:14:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/04/google-toolbar-20-beta/"/>
    <id>https://chuyeow.wtf/2003/07/04/google-toolbar-20-beta/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/04/google-toolbar-20-beta/">&lt;p&gt;Google has recently released a beta version of it&#x27;s 2.0 version of the Google Toolbar for Internet Explorer. The Popup Blocker&#x27;s good, especially since IE doesn&#x27;t come with a built-in popup blocker like &lt;a href=&quot;http:&#x2F;&#x2F;mozilla.org&#x2F;projects&#x2F;firebird&quot;&gt;Firebird&lt;&#x2F;a&gt; does. With Google&#x27;s buyover of Pyra&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;blogger.com&#x2F;&quot;&gt;Blogger&lt;&#x2F;a&gt;, it isn&#x27;t surprising to see a BlogThis button, which allows you to post a blog entry on the page you&#x27;re currently at. Pretty nice, but I&#x27;d stick with MT&#x27;s bookmarklet and Trackback - not that I have a choice, since only Blogger.com is supported.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re a Firebird or Mozilla user, you should really check out the &lt;a href=&quot;http:&#x2F;&#x2F;googlebar.mozdev.org&#x2F;&quot;&gt;Mozilla Google Toolbar&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It may seem like I&#x27;ve switched back to IE from this post, but that is not the case. I&#x27;m still a fervent Firebird user, except at work where for some reason Firebird doesn&#x27;t work because we&#x27;ve been having problems with the proxy server. That makes me a sad panda - erm, no phoenix.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>PHP5 beta released</title>
    <published>2003-07-02T15:45:42+00:00</published>
    <updated>2003-07-02T15:45:42+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/07/02/php5-beta-released/"/>
    <id>https://chuyeow.wtf/2003/07/02/php5-beta-released/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/07/02/php5-beta-released/">&lt;p&gt;Well so it seems PHP5 has finally become usable enough to be released as a public beta (&lt;a href=&quot;http:&#x2F;&#x2F;www.php.net&#x2F;&quot;&gt;PHP.net&lt;&#x2F;a&gt;). It is interesting in the way that it is interesting to see an initally non-OO language have OO features pegged on - remember Perl?&lt;br &#x2F;&gt;
&lt;br &#x2F;&gt;
The biggie here is the new object model which has been really all the rage in the PHP developer community for the past months when PHP5 was in development and available via CVS.&lt;br &#x2F;&gt;
&lt;br &#x2F;&gt;
Of the new features, I&#x27;m glad for:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;interfaces&lt;&#x2F;li&gt;
&lt;li&gt;exception-handling ala Java and C++&lt;&#x2F;li&gt;
&lt;li&gt;the new &lt;tt&gt;__construct()&lt;&#x2F;tt&gt; method that acts as a constructor - this partially solves the old nasty problem of constructors and inheritance&lt;&#x2F;li&gt;
&lt;li&gt;static class methods and fields&lt;&#x2F;li&gt;
&lt;li&gt;method and property accessibility - public, protected and private&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;
To be honest, I&#x27;ve never really had the time nor want to play with PHP5 when it was in pre-beta development. It does seem to be a nice move, but I&#x27;m still undecided on whether the apparent &quot;bulk&quot; of OOP would have an adverse effect on a large user base of, erm, scripters who are largely unknowledgeable of OOP. Or maybe it would finally make the &quot;real programmers&quot; look twice at PHP.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>JADE on BEA Weblogic Server</title>
    <published>2003-06-26T14:00:44+00:00</published>
    <updated>2003-06-26T14:00:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/26/jade-on-bea-weblogic-server/"/>
    <id>https://chuyeow.wtf/2003/06/26/jade-on-bea-weblogic-server/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/26/jade-on-bea-weblogic-server/">&lt;p&gt;I&#x27;m confused by BEA Weblogic Server&#x27;s implementation of JMX. I&#x27;ve been trying to figure out how WLS 8.1 allows configuration and addition of new services so that I can run &lt;a href=&quot;http:&#x2F;&#x2F;sharon.cselt.it&#x2F;projects&#x2F;jade&#x2F;&quot;&gt;JADE&lt;&#x2F;a&gt; (Java Agent DEvelopment Framework) as a managed service (via JMX).&lt;&#x2F;p&gt;
&lt;p&gt;Basically, it would be a &quot;port&quot; of &lt;a href=&quot;http:&#x2F;&#x2F;sourceforge.net&#x2F;projects&#x2F;bluejade&quot;&gt;BlueJADE&lt;&#x2F;a&gt; (which works for JBoss) for WLS. Now if only I could figure out from the BEA documentation how to add a managed service, but the JMX edocs were of no help - lots on how to manage MBeans, nothing on how to actually deploy one for a new service.&lt;&#x2F;p&gt;
&lt;p&gt;It appears that WLS&#x27;s and JBoss&#x27;s JMX implementations are quite disimilar enough that there isn&#x27;t any resemblance in their XML descriptors nor their directory structures - I&#x27;m lost on how to proceed. And looking at how JBoss manages all it&#x27;s services via JMX, with configuration descriptors (*-service.xml files) clearly visible in the server directory, I can really see how JBoss&#x27;s microkernel architecture really pays off in this respect. I didn&#x27;t even need documentation to figure out how it works in JBoss!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Artima.com - tech-oriented blog directory</title>
    <published>2003-06-26T13:48:42+00:00</published>
    <updated>2003-06-26T13:48:42+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/26/artimacom-tech-oriented-blog-directory/"/>
    <id>https://chuyeow.wtf/2003/06/26/artimacom-tech-oriented-blog-directory/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/26/artimacom-tech-oriented-blog-directory/">&lt;p&gt;Inspired by &lt;a href=&quot;http:&#x2F;&#x2F;www.javablogs.com&#x2F;&quot;&gt;java.blogs&lt;&#x2F;a&gt;, Bill Venners has set up &lt;a href=&quot;http:&#x2F;&#x2F;www.artima.com&#x2F;weblogs&#x2F;index.jsp&quot;&gt;Artima Weblogs&lt;&#x2F;a&gt; for tech-oriented blog owners to submit their blogs so that it appears on an aggregated list. It does need a little redesign to make it look less &quot;academic&quot; though.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve signed up on the &lt;a href=&quot;http:&#x2F;&#x2F;www.artima.com&#x2F;buzz&#x2F;community.jsp?forum=141&quot;&gt;Open Source&lt;&#x2F;a&gt; forums (only 3 of us at the time of writing).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Multi-author java tips blog</title>
    <published>2003-06-21T15:25:35+00:00</published>
    <updated>2003-06-21T15:25:35+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/21/multi-author-java-tips-blog/"/>
    <id>https://chuyeow.wtf/2003/06/21/multi-author-java-tips-blog/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/21/multi-author-java-tips-blog/">&lt;p&gt;I&#x27;m toying with the idea of a multi-author Java tips blog, and am looking for possible contributors. If there is sufficient interest, I&#x27;ll be able to setup a subdomain to host the blog.&lt;&#x2F;p&gt;
&lt;p&gt;Please do contact me at &lt;a href=&quot;mailto:redemption@codefront.net&quot;&gt;redemption at codefront.net&lt;&#x2F;a&gt; should you be interested. This is (what I foresee) a good opportunity to share your experience and expertise with the Java community via the informal weblog medium.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;&#x2F;strong&gt;: I&#x27;ve setup a subdomain at &lt;a href=&quot;http:&#x2F;&#x2F;javatips.codefront.net&#x2F;&quot;&gt;http:&#x2F;&#x2F;javatips.codefront.net&#x2F;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>java.blogs gets confused</title>
    <published>2003-06-21T15:03:53+00:00</published>
    <updated>2003-06-21T15:03:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/21/javablogs-gets-confused/"/>
    <id>https://chuyeow.wtf/2003/06/21/javablogs-gets-confused/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/21/javablogs-gets-confused/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.javablogs.com&#x2F;&quot;&gt;java.blogs&lt;&#x2F;a&gt; apparently gets confused when I updated the title of a blog entry - the updated blog becomes the newest entry and my subsequent blog entry does not appear on the &lt;a href=&quot;http:&#x2F;&#x2F;www.javablogs.com&#x2F;Welcome.jspa&quot;&gt;java.blogs front page&lt;&#x2F;a&gt;, nor on the blog details page.&lt;&#x2F;p&gt;
&lt;p&gt;I apologize to java.bloggers for being lead to my old entry yet again.&lt;&#x2F;p&gt;
&lt;p&gt;I may yet have to re-add by blog unless this fixes itself soon. (It&#x27;s an unresolved issue.)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT&lt;&#x2F;strong&gt;: It appears that an update of my blog details fixed the problem.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Java Tip #2: Static factory methods vs. constructors</title>
    <published>2003-06-21T14:13:32+00:00</published>
    <updated>2003-06-21T14:13:32+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/21/java-tip-2-static-factory-methods-vs-constructors/"/>
    <id>https://chuyeow.wtf/2003/06/21/java-tip-2-static-factory-methods-vs-constructors/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/21/java-tip-2-static-factory-methods-vs-constructors/">&lt;p&gt;Factory methods are simply methods that instantiate objects. Some factory methods in the Java 2 API that you would likely have used are the &lt;tt&gt;getInstance()&lt;&#x2F;tt&gt; and &lt;tt&gt;valueOf()&lt;&#x2F;tt&gt; methods. &lt;tt&gt;getInstance()&lt;&#x2F;tt&gt; is the conventional instantiation method in singletons, while &lt;tt&gt;valueOf()&lt;&#x2F;tt&gt; are often type-conversion methods, like in &lt;tt&gt;String.valueOf(int i)&lt;&#x2F;tt&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Providing a static factory method instead of a public constructor has both advantages and disadvantages, which will be discussed at length in the rest of this entry.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Static factory methods have names&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
A class can have only a single constructor with a given signature, which is a restriction in cases where a class needs to be able to be instantiated using identical parameter lists. In cases like this, you can replace constructors with static factory methods with more intuitive names that highlight their differences.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Static factory methods can improve performance&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
This is because static factory methods do not have to actually instantiate new objects each time they are invoked. This is what allows for the Singleton pattern, where a single instance is returned. It also allows instances to be cached within the object in cases where object instantiation is expensive (like for the case of instantiation of fields from a database) or frequently done.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Static factory methods can return a subtype of their return type&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
This allows for interfaces to be returned by static factory methods, which is best exemplified in the Collections Framework. Needless to say, forcing a client to refer to the returned object by its interface rather than its actual class is a good practice.&lt;&#x2F;p&gt;
&lt;p&gt;Also, the class of the object returned can be private (non-public), so there is a degree of encapsulation where the private class can be modified without impacting clients of the API (possibly for bug-fixing or improvements, or just plain maintainence). The private classes can also vary depending on the parameters to the static factory, so long as they are subtypes of the return type, allowing for greater flexibility.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Classes without public or protected constructors cannot be subclassed&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
This is an unavoidable fact, so classes designed for inheritance must have at least 1 public constructor to be able to be subclassed.&lt;&#x2F;p&gt;
&lt;p&gt;The verdict? Use static factory methods for a more intuitive API, to improve performance via object-caching, to implement singletons, in interface-based frameworks, and to return objects of private classes. Use constructors in classes designed for inheritance (there shouldn&#x27;t be many of these) and for greater visibility in API documentation (since they appear in a separate table in standard Javadocs).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>CMS - Mambo Open Source 4.5</title>
    <published>2003-06-20T12:58:17+00:00</published>
    <updated>2003-06-20T12:58:17+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/20/cms-mambo-open-source-45/"/>
    <id>https://chuyeow.wtf/2003/06/20/cms-mambo-open-source-45/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/20/cms-mambo-open-source-45/">&lt;p&gt;Looking forward to the release of &lt;a href=&quot;http:&#x2F;&#x2F;mamboserver.com&#x2F;&quot;&gt;Mambo Open Source 4.5&lt;&#x2F;a&gt;. From the screenshots &lt;a href=&quot;http:&#x2F;&#x2F;www.mamboserver.com&#x2F;images&#x2F;config.png&quot;&gt;here&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.mamboserver.com&#x2F;images&#x2F;content.png&quot;&gt;here&lt;&#x2F;a&gt;, it looks very promising, and most important of all, easy to configure, administer and use without requiring a messy or non-intuitive process.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Domain names - what were they thinking?</title>
    <published>2003-06-19T16:51:31+00:00</published>
    <updated>2003-06-19T16:51:31+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/19/domain-names-what-were-they-thinking/"/>
    <id>https://chuyeow.wtf/2003/06/19/domain-names-what-were-they-thinking/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/19/domain-names-what-were-they-thinking/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.powergenitalia.com&#x2F;&quot;&gt;Powergen Italia&lt;&#x2F;a&gt; owns the domain &lt;a href=&quot;http:&#x2F;&#x2F;www.powergenitalia.com&#x2F;&quot;&gt;http:&#x2F;&#x2F;www.powergenitalia.com&#x2F;&lt;&#x2F;a&gt;. &lt;a href=&quot;http:&#x2F;&#x2F;www.whorepresents.com&#x2F;&quot;&gt;Who Represents&lt;&#x2F;a&gt; owns &lt;a href=&quot;http:&#x2F;&#x2F;www.whorepresents.com&#x2F;&quot;&gt;http:&#x2F;&#x2F;www.whorepresents.com&#x2F;&lt;&#x2F;a&gt;. Goes to show you have to put some thought into your domain name :D.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Integrating JADE into JBoss with BlueJADE</title>
    <published>2003-06-17T15:04:57+00:00</published>
    <updated>2003-06-17T15:04:57+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/17/integrating-jade-into-jboss-with-bluejade/"/>
    <id>https://chuyeow.wtf/2003/06/17/integrating-jade-into-jboss-with-bluejade/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/17/integrating-jade-into-jboss-with-bluejade/">&lt;p&gt;The following are installation instructions for integrating &lt;a href=&quot;http:&#x2F;&#x2F;sharon.cselt.it&#x2F;projects&#x2F;jade&#x2F;&quot;&gt;JADE&lt;&#x2F;a&gt; (Java Agent DEvelopment Framework) as a managed container in JBoss using &lt;a href=&quot;http:&#x2F;&#x2F;sourceforge.net&#x2F;projects&#x2F;bluejade&quot;&gt;BlueJADE&lt;&#x2F;a&gt;. It addresses several issues with group installation, which doesn&#x27;t seem to work as indicated in the official installation instructions. I&#x27;ve posted them more for reference than as a weblog entry &lt;i&gt;per se&lt;&#x2F;i&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What is BlueJADE?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;BlueJADE makes the JADE agent system a manageable service under a J2EE application server. BlueJADE allows JADE to become a service that can be managed through JMX (Java Management Extension).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Installation in WinXP&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Setting up the environment&lt;br &#x2F;&gt;
- Install JADE, BlueJADE and JBoss. It is recommended that a version of JBoss with Tomcat already integrated be used. Refer to their respective documentation on the installation process. This often involves simply unarchiving the binaries, or compilation if you&#x27;re building from sources.&lt;br &#x2F;&gt;
- Set the JADE_HOME, BLUEJADE_HOME and JBOSS_HOME environment variables to point to the respective directories.&lt;&#x2F;p&gt;
&lt;p&gt;Group Installation&lt;br &#x2F;&gt;
- Pick a group under $BLUEJADE_HOME&#x2F;groups to install. It&#x27;s simplest to choose the &#x27;simpleagent&#x27; group.&lt;br &#x2F;&gt;
- To install the group, run the install script (install.bat) in $BLUEJADE_HOME&#x2F;groups&#x2F;simpleagent. 1 argument, the group to install, should be specified. A 2nd argument would copy over an existing JBoss environment if specified.&lt;br &#x2F;&gt;
  Eg.&lt;br &#x2F;&gt;
    $ install simpleagent default&lt;br &#x2F;&gt;
- At this point, you could run into problems. Apparently, the environment variables are not picked up properly by the installation script&#x2F;program so you have to edit $BLUEJADE_HOME&#x2F;bin&#x2F;win&#x2F;install.properties to add in the &quot;missing&quot; environment variables.&lt;br &#x2F;&gt;
  The variables include:&lt;br &#x2F;&gt;
    LOCALHOSTNAME, GROUP, TEMP, JBOSS_HOME, JADE_HOME, BLUEJADE_HOME&lt;br &#x2F;&gt;
  Set these to point to the exact path&#x2F;name.&lt;br &#x2F;&gt;
- If installation goes well (no error messages), open the file $JBOSS_HOME&#x2F;server&#x2F;simpleagent&#x2F;deploy&#x2F;jade-service.xml. The element &lt;attribute&gt; with name=&quot;ConfigDocName&quot; should be pointing to an incorrect path - change it to point to $JBOSS_HOME&#x2F;server&#x2F;simpleagent&#x2F;conf&#x2F;jade-service-config.xml. Depending on the group you&#x27;re installing, there could be more bogus paths - just keep an eye out for them and correct accordingly.&lt;br &#x2F;&gt;
- Open that jade-service-config.xml file and make similar corrections for the 2 (or more, depending on your group) paths there:&lt;br &#x2F;&gt;
    xsi:noNamespaceSchemaLocation=$JBOSS_HOME&#x2F;server&#x2F;simpleagent&#x2F;conf&#x2F;JADE-1_0.xsd&lt;br &#x2F;&gt;
    jadeArgs=$JBOSS_HOME&#x2F;server&#x2F;simpleagent&#x2F;conf&#x2F;jadeboot.properties&lt;&#x2F;p&gt;
&lt;p&gt;Running JBoss with JADE container&lt;br &#x2F;&gt;
- Run JBoss with the simpleagent environment by executing the following command at $JBOSS_HOME&#x2F;bin&lt;br &#x2F;&gt;
    run -c simpleagent&lt;br &#x2F;&gt;
- If all goes well, you should see no errors in the startup process and a JADE Remote Agent Management GUI appears (only for simpleagent and demoagent groups).&lt;br &#x2F;&gt;
- JADE is now manageable as a service under JMX - go to http:&#x2F;&#x2F;localhost:8080&#x2F;jmx-console&#x2F;&lt;&#x2F;attribute&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Java Tip #1: Defensive copies</title>
    <published>2003-06-17T02:03:06+00:00</published>
    <updated>2003-06-17T02:03:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/17/java-tip-1-defensive-copies/"/>
    <id>https://chuyeow.wtf/2003/06/17/java-tip-1-defensive-copies/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/17/java-tip-1-defensive-copies/">&lt;p&gt;Something that could easily be missed when programming in Java is inadvertently exposing the internals of a supposedly encapsulated field to clients of your class. Consider the following naive implementation of a rectangle class that disallows negative dimensions:&lt;br &#x2F;&gt;
&lt;code language=&quot;Java&quot;&gt;&lt;br &#x2F;&gt;
public final class MyRectangle {&lt;br &#x2F;&gt;
  private final Dimension dim;&lt;&#x2F;p&gt;
&lt;p&gt;  public MyRectangle(Dimension dim) {&lt;br &#x2F;&gt;
    if( dim.height &lt; 0 || dim.width &lt; 0 ) {&lt;br &#x2F;&gt;
      throw new IllegalArgumentException(&quot;Dimensions cannot be negative&quot;);&lt;br &#x2F;&gt;
    }&lt;&#x2F;p&gt;
&lt;p&gt;    this.dim = dim;&lt;br &#x2F;&gt;
  }&lt;&#x2F;p&gt;
&lt;p&gt;  public int getArea() {&lt;br &#x2F;&gt;
    return dim.height * dim.weight;&lt;br &#x2F;&gt;
  }&lt;br &#x2F;&gt;
}&lt;br &#x2F;&gt;
&lt;&#x2F;code&gt;&lt;br &#x2F;&gt;
A cursory glance may seem indicate that the class should be immutable and no negative dimensions, and thus no negative areas, are possible. Not true. Consider this bit of code that uses the MyRectangle class:&lt;br &#x2F;&gt;
&lt;code language=&quot;Java&quot;&gt;&lt;br &#x2F;&gt;
Dimension dim = new Dimension(2, 3);&lt;br &#x2F;&gt;
MyRectangle rect = new MyRectangle(dim);&lt;br &#x2F;&gt;
dim.setSize(-3, 4);  &#x2F;&#x2F; modifies rect&#x27;s internal Dimension field!&lt;br &#x2F;&gt;
&lt;&#x2F;code&gt;&lt;br &#x2F;&gt;
This is possible because Dimension is a mutable class! Therefore, it is important to make a defensive copy of each parameter to the constructor that is mutable. We can fix the MyRectangle class by changing it&#x27;s constructor like so:&lt;br &#x2F;&gt;
&lt;code language=&quot;Java&quot;&gt;&lt;br &#x2F;&gt;
  public MyRectangle(Dimension dim) {&lt;br &#x2F;&gt;
    this.dim = new Dimension(dim);  &#x2F;&#x2F; make defensive copy&lt;&#x2F;p&gt;
&lt;p&gt;    if( dim.height &lt; 0 || dim.width &lt; 0 ) {&lt;br &#x2F;&gt;
      throw new IllegalArgumentException(&quot;Dimensions cannot be negative&quot;);&lt;br &#x2F;&gt;
    }&lt;br &#x2F;&gt;
  }&lt;br &#x2F;&gt;
&lt;&#x2F;code&gt;Notice how a copy of the Dimension parameter is made, so that the client has no reference (and thus no access) to the internal dim field of the MyRectangle object. The same has to be done in the case where accessors return mutable fields - make sure to return defensive copies. The rule is never to directly return the internal field to a client class - always create a defensive copy and return that instead, so that there is no handle into the object internals.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Move and redesign</title>
    <published>2003-06-16T22:17:06+00:00</published>
    <updated>2003-06-16T22:17:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/16/move-and-redesign/"/>
    <id>https://chuyeow.wtf/2003/06/16/move-and-redesign/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/16/move-and-redesign/">&lt;p&gt;I&#x27;ve moved my blog from &lt;a href=&quot;http:&#x2F;&#x2F;freeroller.net&quot;&gt;FreeRoller.net&lt;&#x2F;a&gt;. That is an amazing thing for &lt;a href=&quot;http:&#x2F;&#x2F;freeroller.net&#x2F;page&#x2F;aeden&quot;&gt;Anthony Eden&lt;&#x2F;a&gt; to do, providing blog hosting for free to the Java community. Thanks Anthony (who&#x27;ll get an email from me requesting a removal of my account)!&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve redesigned the look of the site to achieve a fresher feel - at least I do hope so. Let me know if you hate it! ;)&lt;&#x2F;p&gt;
&lt;p&gt;Oh, and &lt;a href=&quot;http:&#x2F;&#x2F;www.movabletype.org&quot;&gt;MovableType&lt;&#x2F;a&gt; is a wonderful piece of blog software. No wonder it won the &lt;a href=&quot;http:&#x2F;&#x2F;www.webbyawards.com&#x2F;main&#x2F;webby_awards&#x2F;nominees.html#best_practices&quot;&gt;Webby Award for Best Practices&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Winners of JavaWorld 2002 Editors&#x27; Choice Awards</title>
    <published>2003-06-10T15:07:14+00:00</published>
    <updated>2003-06-10T15:07:14+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/10/winners-of-javaworld-2002-editors-choice-awards/"/>
    <id>https://chuyeow.wtf/2003/06/10/winners-of-javaworld-2002-editors-choice-awards/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/10/winners-of-javaworld-2002-editors-choice-awards/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.javaworld.com&quot;&gt;JavaWorld&lt;&#x2F;a&gt; has announced the &lt;a href=&quot;http:&#x2F;&#x2F;www.javaworld.com&#x2F;javaworld&#x2F;jw-06-2003&#x2F;jw-0609-eca.html&quot;&gt;winners of the JavaWorld 2002 Editors&#x27; Choice Awards&lt;&#x2F;a&gt;. These are the results (with my predictions ;))&lt;&#x2F;p&gt;
&lt;pre&gt;
Best Java Data Access Tool: 
  Winner: &lt;strong&gt;Oracle 9iAS TopLink&lt;&#x2F;strong&gt;
  Finalists: CocoBase Enterprise O&#x2F;R 4.5, Hibernate 1.2.4
  My prediction: N&#x2F;A
Best Java IDE:
  Winner: &lt;strong&gt;IntelliJ IDEA 3.0&lt;&#x2F;strong&gt;
  Finalists: Borland JBuilder 8.0, Eclipse 2.1
  My prediction: Borland JBuilder 8.0 (makes me want to evalute IntelliJ IDEA)
Best Java Performance Monitoring&#x2F;Testing Tool:
  Winner: &lt;strong&gt;JUnit 3.8.1&lt;&#x2F;strong&gt;
  Finalists: JProbe 5.0, Optimizeit Suite 5
  My prediction: JUnit 3.8.1 (no doubts about this one)
Best Java Application Server:
  Winner: &lt;strong&gt;BEA WebLogic Server 8.1&lt;&#x2F;strong&gt;
  Finalists: IBM WebSphere Application Server 5.0, JBoss 3.0
  My prediction: BEA WebLogic Server 8.1 (no doubts about this either)
Best Java Device Application Development Tool:
  Winner: &lt;strong&gt;Java 2 Platform, Micro Edition (J2ME) Wireless Toolkit 2.0&lt;&#x2F;strong&gt;
  Finalists: IBM WebSphere Studio Device Developer 5.0, Sun ONE Studio 4 Update 1 ME
  My prediction: J2METWK (I&#x27;ve used this and it&#x27;s perfect! Sun ONE Studio ME is a
    little too cumbersome to use.)
Best Java-XML Tool:
  Winner: &lt;strong&gt;Xerces2 Java Parser 2.4&lt;&#x2F;strong&gt;
  Finalists: JAXB (Java Architecture for XML Binding), Xalan-Java 2.5
  My prediction: N&#x2F;A
Best Java Installation Tool:
  Winner: &lt;strong&gt;Java Web Start 1.2&lt;&#x2F;strong&gt;
  Finalists: InstallAnywhere 5, InstallShield MultiPlatform 5
  My prediction: N&#x2F;A
Best Java Book:
  Winner: &lt;strong&gt;Patterns of Enterprise Application Architecture (Martin Fowler et al.)&lt;&#x2F;strong&gt;
  Finalists: Java Development with Ant, Java Performance Tuning, Second Edition 
  My prediction: Java Development with Ant (I&#x27;m reading it now. And it is GOOD.)
Most Useful Java Community-Developed Technology:
  Winner: &lt;strong&gt;Apache Ant 1.5&lt;&#x2F;strong&gt;
  Finalists: Eclipse 2.1, Tomcat 4.1
  My prediction: Apache Ant 1.5 (Of course)
Most Innovative Java Product or Technology:
  Winner: &lt;strong&gt;AspectJ 1.0.6&lt;&#x2F;strong&gt;
  Finalists: Eclipse 2.1, JavaServer Faces
  My prediction: N&#x2F;A (unfortunately I&#x27;ve not caught up with what AspectJ is)
&lt;&#x2F;pre&gt;
</content>
  </entry>
  <entry>
    <title>Young (and talented) web developers, designers</title>
    <published>2003-06-10T15:06:44+00:00</published>
    <updated>2003-06-10T15:06:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/10/young-and-talented-web-developers-designers/"/>
    <id>https://chuyeow.wtf/2003/06/10/young-and-talented-web-developers-designers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/10/young-and-talented-web-developers-designers/">&lt;p&gt;Judging from this thread titled &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;showthread.php?threadid=94721&quot;&gt;Your Age&lt;&#x2F;a&gt; at &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt;, the web development and web design world is full of young talent. Patrick O&#x27;Keefe (&lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;member.php?userid=7985&quot;&gt;iFroggy&lt;&#x2F;a&gt;) is only 18 but runs a webhosting business, a webdesign business, and is webmaster of many popular communities. Marc James (mjames) is 17 and runs a successful sports-related site at &lt;a href=&quot;http:&#x2F;&#x2F;www.sports-central.org&#x2F;&quot;&gt;Sports Central&lt;&#x2F;a&gt;, among other achievements. Those are just 2 exemplary individuals who are young and are making successful web-related careers.&lt;&#x2F;p&gt;
&lt;p&gt;I wonder - are there and prodigies that are committers or project leads of Open Source projects like those under the Jakarta project umbrella?&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Sites that block Mozilla browsers - user agent switcher</title>
    <published>2003-06-07T15:05:53+00:00</published>
    <updated>2003-06-07T15:05:53+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/07/sites-that-block-mozilla-browsers-user-agent-switcher/"/>
    <id>https://chuyeow.wtf/2003/06/07/sites-that-block-mozilla-browsers-user-agent-switcher/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/07/sites-that-block-mozilla-browsers-user-agent-switcher/">&lt;p&gt;A quick update on the last post. It seems I may seem to have made Mozilla browsers seem disadvantageous in an IE-centric world. Well, you can always get past those sites that reject non-IE browsers with the &lt;a href=&quot;http:&#x2F;&#x2F;chrispederick.myacen.com&#x2F;work&#x2F;firebird&#x2F;useragentswitcher&#x2F;&quot;&gt;User Agent Switcher extension&lt;&#x2F;a&gt; that allows you to spoof your user agent as IE (or Netscape, or IE Mac).&lt;&#x2F;p&gt;
&lt;p&gt;Gotta love those extensions.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Sites that block Mozilla browsers</title>
    <published>2003-06-07T15:04:44+00:00</published>
    <updated>2003-06-07T15:04:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/07/sites-that-block-mozilla-browsers/"/>
    <id>https://chuyeow.wtf/2003/06/07/sites-that-block-mozilla-browsers/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/07/sites-that-block-mozilla-browsers/">&lt;p&gt;mmj at &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt; has pointed out a link to a page that lists websites entitled &#x27;&lt;a href=&quot;http:&#x2F;&#x2F;toastytech.com&#x2F;good&#x2F;badsitelist.html&quot;&gt;Sites that make Mozilla sad&lt;&#x2F;a&gt;&#x27;. Those sites apparently aren&#x27;t too interested in the Mozilla&#x2F;Netscape user population, catering only to Internet Explorer users *gasp*.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.kingfisher.com&quot;&gt;www.kingfisher.com&lt;&#x2F;a&gt; has this to say:&lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
To view the full Kingfisher plc site, please install a new-generation browser,&lt;br &#x2F;&gt;
such as Internet Explorer 5, or Netscape 4.x. These can be downloaded free of&lt;br &#x2F;&gt;
charge from Microsoft or Netscape.&lt;br &#x2F;&gt;
A more basic text-based version of the site will also be made available&lt;br &#x2F;&gt;
shortly for those with older or incompatible browsers.
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Another site, pointed out by mmj, &lt;&#x2F;p&gt;
&lt;blockquote&gt;&lt;p&gt;
To protect you from certain usability and&#x2F;or security issues we currently&lt;br &#x2F;&gt;
do not support Opera, Mozilla, earlier versions of Netscape or IE. If your&lt;br &#x2F;&gt;
preferred browser is not supported, we recommend that you consider&lt;br &#x2F;&gt;
co-installing a supported version.
&lt;&#x2F;p&gt;&lt;&#x2F;blockquote&gt;
&lt;p&gt;Usability and security issus? :rolleyes:&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Thunderbird email client - quick update</title>
    <published>2003-06-06T15:04:12+00:00</published>
    <updated>2003-06-06T15:04:12+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/06/thunderbird-email-client-quick-update/"/>
    <id>https://chuyeow.wtf/2003/06/06/thunderbird-email-client-quick-update/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/06/thunderbird-email-client-quick-update/">&lt;p&gt;Just a quick update - I&#x27;ve since been using Thunderbird and was pretty surprised to notice that it seems to integrate with FireBird on its own. I got an email notification with a small notice box popping up at the bottom-right corner of the screen, like how it is with MSN messenger. Thunderbird was not running at the time - it does make you wonder if this can be stopped, since I didn&#x27;t ask for email-polling explicitly.&lt;&#x2F;p&gt;
&lt;p&gt;Nevertheless, I&#x27;d have to say that is pretty cool ;).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Thunderbird email client</title>
    <published>2003-06-06T15:03:47+00:00</published>
    <updated>2003-06-06T15:03:47+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/06/thunderbird-email-client/"/>
    <id>https://chuyeow.wtf/2003/06/06/thunderbird-email-client/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/06/thunderbird-email-client/">&lt;p&gt;Just got the &lt;a href=&quot;http:&#x2F;&#x2F;ftp.mozilla.org&#x2F;pub&#x2F;thunderbird&#x2F;nightly&#x2F;2003-06-03-trunk&#x2F;&quot;&gt;June 3rd build&lt;&#x2F;a&gt; of &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;thunderbird&#x2F;&quot;&gt;Thunderbird&lt;&#x2F;a&gt; for Windows. I must say it is really looking good. It&#x27;s fast (loads in a split second - much faster that Outlook Express), plus it does have a &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;firebird&#x2F;&quot;&gt;Firebird&lt;&#x2F;a&gt;-feel to it that is strangely appealing. It also allows importing of address books and mail accounts from Outlook Express, Outlook and Eudora (only tested importing from Outlook Express, and it works perfectly).&lt;&#x2F;p&gt;
&lt;p&gt;Now that &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;firebird&#x2F;&quot;&gt;Firebird&lt;&#x2F;a&gt; is my browser of choice, I&#x27;m really looking forward to an email client that has a similar appeal, and Thunderbird will be a big player in the email client scene in the near future as I foresee it.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>XUL article at SitePoint (Part 3) &amp; &#x27;Creating XPCOM Components&#x27; ebook</title>
    <published>2003-06-06T15:03:16+00:00</published>
    <updated>2003-06-06T15:03:16+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/06/xul-article-at-sitepoint-part-3-creating-xpcom-components-ebook/"/>
    <id>https://chuyeow.wtf/2003/06/06/xul-article-at-sitepoint-part-3-creating-xpcom-components-ebook/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/06/xul-article-at-sitepoint-part-3-creating-xpcom-components-ebook/">&lt;p&gt;The 3rd and final installation in Harry Fuecks&#x27; introductory article, &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;article&#x2F;1144&quot;&gt;Introducing XUL - The &#x27;Net&#x27;s Biggest Secret: Part 3&lt;&#x2F;a&gt; has been published on &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&quot;&gt;SitePoint&lt;&#x2F;a&gt;. Nice wrap-up with excellent links to interesting projects like &lt;a href=&quot;http:&#x2F;&#x2F;mozblog.mozdev.org&#x2F;&quot;&gt;MozBlog&lt;&#x2F;a&gt; (allows blog updating in Mozilla over XML-RPC) and the &lt;a href=&quot;http:&#x2F;&#x2F;sourceforge.net&#x2F;project&#x2F;showfiles.php?group_id=28946&quot;&gt;Luxor XUL SWT&lt;&#x2F;a&gt; for &lt;a href=&quot;http:&#x2F;&#x2F;www.eclipse.org&quot;&gt;Eclipse&lt;&#x2F;a&gt; that will bring XUL into that very IDE. Stay tuned (I will).&lt;&#x2F;p&gt;
&lt;p&gt;An ebook on creating XPCOM components, &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;xpcom&#x2F;book&#x2F;cxc&#x2F;&quot;&gt;&lt;i&gt;Creating XPCOM Components&lt;&#x2F;i&gt;&lt;&#x2F;a&gt; has been released. Only for C++ developers though.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Cool-looking blog buttons</title>
    <published>2003-06-06T15:02:51+00:00</published>
    <updated>2003-06-06T15:02:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/06/cool-looking-blog-buttons/"/>
    <id>https://chuyeow.wtf/2003/06/06/cool-looking-blog-buttons/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/06/cool-looking-blog-buttons/">&lt;p&gt;I came across an amazing collection (575 buttons at time of writing) of really nice blog buttons. Grab them from this &lt;a href=&quot;http:&#x2F;&#x2F;gtmcknight.com&#x2F;buttons&#x2F;index.php&quot;&gt;site&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla tips and tricks</title>
    <published>2003-06-06T15:02:22+00:00</published>
    <updated>2003-06-06T15:02:22+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/06/mozilla-tips-and-tricks/"/>
    <id>https://chuyeow.wtf/2003/06/06/mozilla-tips-and-tricks/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/06/mozilla-tips-and-tricks/">&lt;p&gt;I started a thread entitled &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;showthread.php?threadid=110353&quot;&gt;Mozilla tips and tricks&lt;&#x2F;a&gt; over at &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt; in hope of getting people to post their favorite extensions and tips, as well as possibly promote Mozilla (I&#x27;m a &lt;a href=&quot;http:&#x2F;&#x2F;www.mozilla.org&#x2F;projects&#x2F;firebird&#x2F;&quot;&gt;FireBird&lt;&#x2F;a&gt; addict).&lt;&#x2F;p&gt;
&lt;p&gt;Other than those I&#x27;d found, a member posted a link to &lt;a href=&quot;http:&#x2F;&#x2F;extensionroom.mozdev.org&#x2F;&quot;&gt;http:&#x2F;&#x2F;extensionroom.mozdev.org&#x2F;&lt;&#x2F;a&gt; which seems to have a very wide collection of links to extensions. Check it out.&lt;&#x2F;p&gt;
&lt;p&gt;Oh yes if you&#x27;re using Mozilla or FireBird now, you can see XUL in action just by right-clicking the toolbar (where the &#x27;forward&#x27;, &#x27;backward&#x27;, &#x27;refresh&#x27; buttons are) and choose &#x27;Customize...&#x27;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>SitePoint Community Crier - article</title>
    <published>2003-06-04T15:01:18+00:00</published>
    <updated>2003-06-04T15:01:18+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/06/04/sitepoint-community-crier-article/"/>
    <id>https://chuyeow.wtf/2003/06/04/sitepoint-community-crier-article/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/06/04/sitepoint-community-crier-article/">&lt;p&gt;The SitePoint Community Crier has made a comeback with &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;newsletter&#x2F;viewissue.php?id=4&amp;issue=42&quot;&gt;issue 42&lt;&#x2F;a&gt;. Great job by the Community Team at &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt;! They&#x27;ve done an excellent job of revamping a newsletter that had been text-only and previously terminated a few months back.&lt;&#x2F;p&gt;
&lt;p&gt;Now time for a little self-promotion ;). The Community Article, &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;newsletter&#x2F;viewissue.php?id=4&amp;issue=42#5&quot;&gt;&quot;Writing Well-formed, Standards-compliant SQL&quot;&lt;&#x2F;a&gt;, is my 2nd published article on the Crier. Take a look and give me any criticisms or comments - I live to learn from mistakes!&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Design Patterns ebook</title>
    <published>2003-05-31T14:59:06+00:00</published>
    <updated>2003-05-31T14:59:06+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/31/design-patterns-ebook/"/>
    <id>https://chuyeow.wtf/2003/05/31/design-patterns-ebook/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/31/design-patterns-ebook/">&lt;p&gt;I came across this great free ebook entitled the &lt;i&gt;The Design Patterns Java Companion&lt;&#x2F;i&gt; available &lt;a href=&quot;http:&#x2F;&#x2F;www.patterndepot.com&#x2F;put&#x2F;8&#x2F;JavaPatterns.htm&quot;&gt;here&lt;&#x2F;a&gt;. I&#x27;m not sure why it is free, but it seems a legitimately free copy seeing as &lt;a href=&quot;http:&#x2F;&#x2F;www.javacoding.net&quot;&gt;JavaCoding.net&lt;&#x2F;a&gt; links to it prominently. I&#x27;m barely past the first chapter and skimmed through it quite a bit, and it seems to be a very useful example type book.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Neverwinter Nights: Shadows of Undrentide has gone gold</title>
    <published>2003-05-31T14:58:50+00:00</published>
    <updated>2003-05-31T14:58:50+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/31/neverwinter-nights-shadows-of-undrentide-has-gone-gold/"/>
    <id>https://chuyeow.wtf/2003/05/31/neverwinter-nights-shadows-of-undrentide-has-gone-gold/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/31/neverwinter-nights-shadows-of-undrentide-has-gone-gold/">&lt;p&gt;Yep &lt;a href=&quot;http:&#x2F;&#x2F;nwn.bioware.com&#x2F;shadows&#x2F;&quot;&gt;Neverwinter Nights: Shadows of Undrentide&lt;&#x2F;a&gt;, the expansion pack for Neverwinter Nights, has gone off for CD production. Not that I foresee myself playing it much if I do buy it, since there is no time, but the availability of Prestige classes is terribly attractive - would love to play a &lt;a href=&quot;http:&#x2F;&#x2F;nwn.bioware.com&#x2F;shadows&#x2F;prestige_harper.html&quot;&gt;Harper&lt;&#x2F;a&gt;! Ah I miss those days where I could do whatever I wanted without a care in the world. *sigh*&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>DAML&#x2F;XSLT update</title>
    <published>2003-05-30T14:58:03+00:00</published>
    <updated>2003-05-30T14:58:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/30/damlxslt-update/"/>
    <id>https://chuyeow.wtf/2003/05/30/damlxslt-update/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/30/damlxslt-update/">&lt;p&gt;Following up on my previous post on the &lt;a href=&quot;http:&#x2F;&#x2F;www.davincinetbook.com:8080&#x2F;daml&#x2F;damlxslt&#x2F;DamlXSLTAnnouncement2.html&quot;&gt;DAML&#x2F;XSLT Adapter&lt;&#x2F;a&gt;. It seems to do quite a good job at translating a DAML document into XML format, but it does choke when a complex ontology is used. Among other things, it produces &amp;lt;null&amp;gt; tags when it encounters certain DAML tags, and trips up when translating tags with fully qualified names (QNAME). It also seems, sadly, that the project is dead, seeing as the last update was back in July 2001.&lt;&#x2F;p&gt;
&lt;p&gt;Nevertheless, it will do for now and is sufficient for my project. All I got to do now for the PDA side is to write a parsing engine using &lt;a href=&quot;http:&#x2F;&#x2F;www.kxml.org&quot;&gt;kXML2&lt;&#x2F;a&gt; to translate the XML format into DAML model Java objects. On the heavy-weight peer side (mainframe or workstation), we can use the &lt;a href=&quot;http:&#x2F;&#x2F;www.hpl.hp.com&#x2F;semweb&#x2F;jena.htm&quot;&gt;Jena toolkit&lt;&#x2F;a&gt; from HP to instantiate DAML model Java objects from the ones I wrote, and write them out to a DAML file. I can only hope I have enough time to finish it, because I&#x27;m still fairly new to DAML, and have never actually done XML parsing before. Would have liked to use &lt;a href=&quot;http:&#x2F;&#x2F;jakarta.apache.org&#x2F;commons&#x2F;digester.html&quot;&gt;Digester&lt;&#x2F;a&gt;, but it&#x27;d be difficult to port to the PDA. We did consider hand-rolling our own lightweight Digester clone for the PDA, for good abstraction and easy maintainability, but neither time nor expertise are on my side.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Exam results</title>
    <published>2003-05-29T14:57:27+00:00</published>
    <updated>2003-05-29T14:57:27+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/29/exam-results/"/>
    <id>https://chuyeow.wtf/2003/05/29/exam-results/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/29/exam-results/">&lt;p&gt;So my examination results were released today. It turned out pretty well. In fact, I couldn&#x27;t have asked for more. After the debacle the semester before where I failed a project module, my hopes of getting a 1st Class Honours were severely dented. Thankfully, this semester&#x27;s results were really ideal and I can set my eye on getting a good degree. Not that it counts for much, since it&#x27;s purely a qualification, but any sort of higher achievement is certainly welcome.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m wondering, is it egoistic to post your good results in a blog? Well I&#x27;m not too sure, but I&#x27;m too damn pleased to care too much :p. It is, after all, the very first semester where I&#x27;ve gotten a perfect CAP (Cumulative Average Point) ;).&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>XUL article at SitePoint (Part 2)</title>
    <published>2003-05-29T14:57:03+00:00</published>
    <updated>2003-05-29T14:57:03+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/29/xul-article-at-sitepoint-part-2/"/>
    <id>https://chuyeow.wtf/2003/05/29/xul-article-at-sitepoint-part-2/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/29/xul-article-at-sitepoint-part-2/">&lt;p&gt;Just in case anyone wants to follow up on the last XUL article by Harry Fuecks, SitePoint has published the 2nd of 3 parts in his introductory XUL tutorial, entitled &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;article&#x2F;1143&quot;&gt;Introducing XUL - The &#x27;Net&#x27;s Biggest Secret: Part 2&lt;&#x2F;a&gt;. Seems like SitePoint split up the entire article series a little too much, because this one seems a little too short. The final installment promises to discuss XBL and RDF data sources, so that&#x27;s looking good.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Jakarta Commons - Digester component</title>
    <published>2003-05-28T14:56:44+00:00</published>
    <updated>2003-05-28T14:56:44+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/28/jakarta-commons-digester-component/"/>
    <id>https://chuyeow.wtf/2003/05/28/jakarta-commons-digester-component/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/28/jakarta-commons-digester-component/">&lt;p&gt;The &lt;a href=&quot;http:&#x2F;&#x2F;jakarta.apache.org&#x2F;commons&#x2F;digester.html&quot;&gt;Digester component&lt;&#x2F;a&gt; of the &lt;a href=&quot;http:&#x2F;&#x2F;jakarta.apache.org&#x2F;commons&#x2F;index.html&quot;&gt;Jakarta Commons&lt;&#x2F;a&gt; project is an extremely useful and well-designed  package that allows you to parse XML files at a higher level of abstraction in Java. This allows developers to concentrate on processing XML rather than get unnecessarily involved in parsing functions. With Digester, you can use simple matching patterns and write corresponding callback functions which are called whenever a match is found. For example, consider the XML snippet below.&lt;&#x2F;p&gt;
&lt;pre&gt;
&amp;lt;book&amp;gt;
  &amp;lt;title&amp;gt;The Hobbit&amp;lt;&#x2F;title&amp;gt;
  &amp;lt;author&amp;gt;J. R. R. Tolkien&amp;lt;&#x2F;author&amp;gt;
&amp;lt;&#x2F;book&amp;gt;
&lt;&#x2F;pre&gt;
&lt;p&gt;In Digester, you can write this (in Java):&lt;br &#x2F;&gt;
&lt;code language=&quot;Java&quot;&gt;&lt;br &#x2F;&gt;
Digester digester = new Digester();&lt;&#x2F;p&gt;
&lt;p&gt;digester.addObjectCreate(&quot;book&quot;, &quot;Book&quot;);&lt;br &#x2F;&gt;
digester.addCallMethod(&quot;book&#x2F;title&quot;,&quot;setTitle&quot;,0);&lt;br &#x2F;&gt;
digester.addCallMethod(&quot;book&#x2F;authors&quot;,&quot;setAuthor&quot;, 0);&lt;&#x2F;p&gt;
&lt;p&gt;digester.parse(&quot;books.xml&quot;);&lt;br &#x2F;&gt;
&lt;&#x2F;code&gt;&lt;br &#x2F;&gt;
When Digester parses the XML file (assumed to be &quot;books.xml&quot;), it will create a Book object when it encounters the &lt;book&gt; tag, and it will call the setTitle() and setAuthor() methods with the arguments &quot;The Hobbit&quot; and &quot;J. R. R. Tolkien&quot; respectively upon encountering the &amp;lt;title&amp;gt; and &amp;lt;author&amp;gt; tags. Isn&#x27;t this very intuitive? I think it&#x27;s a very clean abstraction layer on top of XML parsing that allows developers to get on with &quot;real&quot; development work. Once again the Jakarta Project amazes me with what it can do.&lt;&#x2F;book&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>simkim - embeddable scripting language</title>
    <published>2003-05-26T14:56:25+00:00</published>
    <updated>2003-05-26T14:56:25+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/26/simkim-embeddable-scripting-language/"/>
    <id>https://chuyeow.wtf/2003/05/26/simkim-embeddable-scripting-language/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/26/simkim-embeddable-scripting-language/">&lt;p&gt;I came across a project called &lt;a href=&quot;http:&#x2F;&#x2F;www.simkin.co.uk&#x2F;index.shtml&quot;&gt;simkin&lt;&#x2F;a&gt; today that is really interesting. For a demonstration, go &lt;a href=&quot;http:&#x2F;&#x2F;www.simkin.co.uk&#x2F;Demo_Java.shtml&quot;&gt;here&lt;&#x2F;a&gt;. Reminds you of XUL, doesn&#x27;t it? Only it uses XML files to allow an easy way to customise your application. XML isn&#x27;t the only way that&#x27;s available, as the script can be stored in something called a TreeNode file or in a database. What&#x27;s more, it can be used in MIDP (see &lt;a href=&quot;http:&#x2F;&#x2F;www.simkin.co.uk&#x2F;Docs&#x2F;java&#x2F;MIDP.html&quot;&gt;here&lt;&#x2F;a&gt;), and it uses &lt;a href=&quot;http:&#x2F;&#x2F;www.kxml.org&quot;&gt;kXML&lt;&#x2F;a&gt;, a lightweight XML parser that I&#x27;m also using for my current project.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Code block and music</title>
    <published>2003-05-26T14:55:51+00:00</published>
    <updated>2003-05-26T14:55:51+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/26/code-block-and-music/"/>
    <id>https://chuyeow.wtf/2003/05/26/code-block-and-music/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/26/code-block-and-music/">&lt;p&gt;Well I had code block today, believe it or not. It&#x27;s that state of mind where you can&#x27;t make much (or any) progress in your development - a highly frustrating exercise.&lt;&#x2F;p&gt;
&lt;p&gt;To sooth my troubled mind, I got on a bus (I wasn&#x27;t sure if it&#x27;d take me to where I wanted to go, but I just hopped on) and went alone to buy myself the Third Eye Blind album (&lt;a href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;exec&#x2F;obidos&#x2F;ASIN&#x2F;B000069KHY&#x2F;qid=1053954562&#x2F;sr=2-1&#x2F;ref=sr_2_1&#x2F;103-5543507-2507058&quot;&gt;&lt;i&gt;Out of Vein&lt;&#x2F;i&gt;&lt;&#x2F;a&gt;) that I&#x27;ve been wanting to get for so long (well, at least since it&#x27;s release last week, it felt like a long time). I&#x27;m a big Third Eye Blind fan - still listen to their very first album ever so often, &lt;a href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;exec&#x2F;obidos&#x2F;tg&#x2F;detail&#x2F;-&#x2F;B000002HOK&#x2F;ref=pd_ap_rec_2&#x2F;103-5543507-2507058?v=glance&amp;s=music&quot;&gt;&lt;i&gt;Third Eye Blind&lt;&#x2F;i&gt;&lt;&#x2F;a&gt;. That&#x27;s a tough album to live up to, but from what I&#x27;ve heard so far of &lt;i&gt;Out of Vein&lt;&#x2F;i&gt;, they&#x27;re doing fine.&lt;&#x2F;p&gt;
&lt;p&gt;I also got &lt;a href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;exec&#x2F;obidos&#x2F;ASIN&#x2F;B000068C97&#x2F;qid=1053954894&#x2F;sr=2-1&#x2F;ref=sr_2_1&#x2F;103-5543507-2507058&quot;&gt;&lt;i&gt;No!&lt;&#x2F;i&gt;&lt;&#x2F;a&gt; from They Might Be Giants (they sang the theme song on Malcolm in the Middle, &lt;i&gt;Boss of Me&lt;&#x2F;i&gt;). They make the funniest and weirdest songs.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>CM4 uses XML-based skinning</title>
    <published>2003-05-25T14:55:01+00:00</published>
    <updated>2003-05-25T14:55:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/25/cm4-uses-xml-based-skinning/"/>
    <id>https://chuyeow.wtf/2003/05/25/cm4-uses-xml-based-skinning/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/25/cm4-uses-xml-based-skinning/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.sigames.com&quot;&gt;Championship Manager 4&lt;&#x2F;a&gt;, the newest installation in the Championship Manager series of football management simulation games, uses XML-based skinning. It may be old news, CM4 being released 2 or 3 months ago, but I didn&#x27;t realise that until I checked out the sources for some CM4 skins, and much to my surprise, the only files I saw were XML files and images. Now not only is that very cool, it is also reassuring that game developers are taking the XML-based UI design paradigm seriously.&lt;&#x2F;p&gt;
&lt;p&gt;You can get CM4 skins from &lt;a href=&quot;http:&#x2F;&#x2F;cmskins.thedugout.tv&#x2F;&quot;&gt;cmskins.com&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Interesting threads and XUL article at SitePoint</title>
    <published>2003-05-24T14:54:01+00:00</published>
    <updated>2003-05-24T14:54:01+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/24/interesting-threads-and-xul-article-at-sitepoint/"/>
    <id>https://chuyeow.wtf/2003/05/24/interesting-threads-and-xul-article-at-sitepoint/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/24/interesting-threads-and-xul-article-at-sitepoint/">&lt;p&gt;There&#x27;re some interesting threads over at &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&quot;&gt;SitePoint Forums&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;showthread.php?threadid=109531&quot;&gt;Java or .NET -- What to Learn??&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
&lt;a href=&quot;http:&#x2F;&#x2F;www.sitepointforums.com&#x2F;showthread.php?threadid=108727&quot;&gt;Head-to-Head: PHP vs. ASP.NET&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Also, Harry Fuecks from &lt;a href=&quot;http:&#x2F;&#x2F;www.phppatterns.com&#x2F;&quot;&gt;phpPatterns()&lt;&#x2F;a&gt; has recently written an article on XUL entitled &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&#x2F;article&#x2F;1140&quot;&gt;Introducing XUL - The ‘Net’s Biggest Secret: Part 1&lt;&#x2F;a&gt; for &lt;a href=&quot;http:&#x2F;&#x2F;www.sitepoint.com&quot;&gt;SitePoint&lt;&#x2F;a&gt;. Nice introductory article, but he does seem to make it (XUL programming) more difficult than it actually is by involving the PHP bit.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Thinlet</title>
    <published>2003-05-24T14:53:07+00:00</published>
    <updated>2003-05-24T14:53:07+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/24/thinlet/"/>
    <id>https://chuyeow.wtf/2003/05/24/thinlet/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/24/thinlet/">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.thinlet.com&quot;&gt;Thinlet&lt;&#x2F;a&gt; is a Java GUI toolkit that I&#x27;ve been using in my recent project. It allows you to design the view of your applications using a simple XML format (much like XUL), thereby enforcing clean separation of view and controller, a common fallacy in Swing-based or AWT-based programs (not saying it can&#x27;t be done, but it is often too easy to mush your view and controller together). Best of all, it works on a PersonalJava environment which is the target platform for my application, so there won&#x27;t be problems porting it into PDAs. There is limited functionality, though to be sure, the developers are actively implementing new widgets and functionality upon user requests. For example, automatic sorting of lists and popup (context) menus are already in the latest CVS sources. The developers are also spending time refactoring their design, since Thinlet is basically 1 gargantuan class with 6000+ lines of code. Nevertheless, it&#x27;s simplicity and portability across even limited platforms is a big factor in applications where it matters.&lt;&#x2F;p&gt;
&lt;p&gt;Check out a &lt;a href=&quot;http:&#x2F;&#x2F;thinlet.sourceforge.net&#x2F;demo.html&quot;&gt;demo of Thinlet widgets&lt;&#x2F;a&gt; as well as an &lt;a href=&quot;http:&#x2F;&#x2F;www.mycgiserver.com&#x2F;~thinlet&#x2F;demoamazon.html&quot;&gt;Amazon browser&lt;&#x2F;a&gt; (it works - try searching something on it).&lt;&#x2F;p&gt;
&lt;p&gt;Through my search for a suitable XUL or XUL-like toolkit, &lt;a href=&quot;http:&#x2F;&#x2F;luxor-xul.sourceforge.net&#x2F;&quot;&gt;Luxor XUL&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.jxul.org&quot;&gt;jXUL&lt;&#x2F;a&gt; turned up. jXUL, unfortunately, has seen no developer activity since late 2001, but Luxor XUL seems great, only it depends too much on Java 2 APIs to port easily. I&#x27;m not too sure about committing to jXUL in future projects without a good look at the functionality provided, but I&#x27;m pretty sure Luxor XUL would be worth more than a look.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>DAML XSLT</title>
    <published>2003-05-24T14:51:29+00:00</published>
    <updated>2003-05-24T14:51:29+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/24/daml-xslt/"/>
    <id>https://chuyeow.wtf/2003/05/24/daml-xslt/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/24/daml-xslt/">&lt;p&gt;Michael F. Aube and Susan Post from &lt;a href=&quot;http:&#x2F;&#x2F;www.davincinetbook.com:8080&#x2F;&quot;&gt;Booz Allen &amp; Hamilton&lt;&#x2F;a&gt; had written a DAML&#x2F;XSLT Adapter that allows conversion of an arbitrary &lt;a href=&quot;http:&#x2F;&#x2F;www.daml.org&quot;&gt;DAML&lt;&#x2F;a&gt; document into other formats utilizing an XSLT stylesheet. You can read more about it &lt;a href=&quot;http:&#x2F;&#x2F;www.davincinetbook.com:8080&#x2F;daml&#x2F;damlxslt&#x2F;DamlXSLTAnnouncement2.html&quot;&gt;here&lt;&#x2F;a&gt;. It&#x27;s rather &#x27;academic&#x27;-looking at the moment, but it is a promising project. For one thing, it&#x27;d allow conversion of DAML documents into a more simplified XML format which can then be parsed in restricted Java environments like PDAs.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been looking for a DAML parser that works on JDK 1.1.8 (which is the JVM version supported on most PDAs), but prolonged searches turned up naught. This seems to be a possible solution to my problems because the heavy-weight peer where the PDA gets the DAML document (wirelessly) from can instead convert it into a simplified XML format suitable for parsing on the PDA. Why parsing? It&#x27;s to allow editing of DAML ontologies via a GUI. When transferring back, the conversion can be done the other way around, with total transparency to users at both ends. I&#x27;ll be looking into this and will update on my experiences working with this.&lt;&#x2F;p&gt;
</content>
  </entry>
  <entry>
    <title>Humble origins</title>
    <published>2003-05-24T14:46:55+00:00</published>
    <updated>2003-05-24T14:46:55+00:00</updated>
    <author><name>Chu Yeow</name></author>
    <link rel="alternate" type="text/html" href="https://chuyeow.wtf/2003/05/24/humble-origins/"/>
    <id>https://chuyeow.wtf/2003/05/24/humble-origins/</id>
    <content type="html" xml:base="https://chuyeow.wtf/2003/05/24/humble-origins/">&lt;p&gt;Ah this is me finally getting into the blog scene! I&#x27;m an aspiring J2ME developer, and an even more aspiring J2EE developer. That aside, I&#x27;m your usual geek programmer type who spends more time in front of computers than I should, both in university, at home and at work. This will be a good place to put down my thoughts and discoveries in the world of Open Source, programming, web development, as well as more mundane stuff (like how life sucks, extreme lack of girls in my life, Liverpool FC, and music).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Name&lt;&#x2F;strong&gt;: Cheah Chu Yeow&lt;br &#x2F;&gt;
&lt;strong&gt;Pseudonym&lt;&#x2F;strong&gt;: redemption&lt;br &#x2F;&gt;
&lt;strong&gt;Occupation&lt;&#x2F;strong&gt;: Student at local university&lt;br &#x2F;&gt;
&lt;strong&gt;Location&lt;&#x2F;strong&gt;: in front of a computer, Singapore&lt;br &#x2F;&gt;
&lt;strong&gt;Skillset&lt;&#x2F;strong&gt;: Java, C, Python, PHP, Perl, SQL&lt;br &#x2F;&gt;
&lt;strong&gt;Interests&lt;&#x2F;strong&gt;: J2EE, J2ME, XUL, UNIX, operating systems, distributed systems, Dragonlance, Football&lt;&#x2F;p&gt;
&lt;p&gt;In true geek fashion, I think this situation fairly deserves a &#x27;Hello, World&#x27; code listing of some sort.&lt;br &#x2F;&gt;
&lt;code language=&quot;Java&quot;&gt;&lt;br &#x2F;&gt;
import javax.microedition.midlet.*;&lt;br &#x2F;&gt;
import javax.microedition.lcdui.*;&lt;&#x2F;p&gt;
&lt;p&gt;public class HelloWorld&lt;br &#x2F;&gt;
    extends MIDlet&lt;br &#x2F;&gt;
    implements CommandListener {&lt;br &#x2F;&gt;
    private Command exitCmd;&lt;br &#x2F;&gt;
    private TextBox tb;&lt;&#x2F;p&gt;
&lt;p&gt;    public HelloWorld() {&lt;br &#x2F;&gt;
        exitCmd = new Command(&quot;Exit&quot;, Command.EXIT, 1);&lt;br &#x2F;&gt;
        tb = new TextBox( &quot;Hello World&quot;, &quot;Hello, World!&quot;, 15, 0 );&lt;br &#x2F;&gt;
        tb.addCommand(exitCmd);&lt;br &#x2F;&gt;
        tb.setCommandListener(this);&lt;br &#x2F;&gt;
    }&lt;&#x2F;p&gt;
&lt;p&gt;    protected void startApp() {&lt;br &#x2F;&gt;
        Display.getDisplay(this).setCurrent(tb);&lt;br &#x2F;&gt;
    }&lt;&#x2F;p&gt;
&lt;p&gt;    protected void pauseApp() { }&lt;br &#x2F;&gt;
    protected void destroyApp(boolean u) { }&lt;&#x2F;p&gt;
&lt;p&gt;    public void commandAction(Command c, Displayable d) {&lt;br &#x2F;&gt;
        if ( c == exitCmd ) {&lt;br &#x2F;&gt;
            destroyApp(false);&lt;br &#x2F;&gt;
            notifyDestroyed();&lt;br &#x2F;&gt;
         }&lt;br &#x2F;&gt;
    }&lt;br &#x2F;&gt;
}&lt;br &#x2F;&gt;
&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
</feed>
