Err the Blog Atom Feed Icon
Err the Blog
Rubyisms and Railities
  • “Sexy Migrations”
    – Chris on March 29, 2007

    Advertisement

    Damn, that new release of Hobo reminds me: those guys have got some nice looking migrations. Let’s take it a step further. Let’s bring sexy back.

    Let’s turn this:

    class UpdateYourFamily < ActiveRecord::Migration
      create_table :updates do |t|
        t.column :user_id,  :integer
        t.column :group_id, :integer
        t.column :body,     :text
        t.column :type,     :string
    
        t.column :created_at, :datetime
        t.column :updated_at, :datetime 
      end
    
      def self.down
        drop_table :updates
      end
    end
    

    Into this:

    class UpdateYourFamily < ActiveRecord::Migration
      create_table :updates do
        foreign_key :user
        foreign_key :group
    
        text   :body
        string :type
    
        timestamps!
      end
    
      def self.down
        drop_table :updates
      end
    end
    

    Using this:

    SVN:
    $ ./script/plugin install \ svn://errtheblog.com/svn/plugins/sexy_migrations

    Piston:
    $ piston import svn://errtheblog.com/svn/plugins/sexy_migrations \ vendor/plugins/sexy_migrations

    That’s it. It works with them newfangled Independent Migrations and is 100% backwards compatible. Keep your old migrations, sex up your new migrations. But, be careful: it’s real hard to go back to the ‘old way’ of writing migrations once you start getting your sexy on. You’ve been warned.

    Bugs!

    You heard that Lighthouse launched, right? Right. From now on, any bugs found in any Err plugins should be reported at the Err plugins Lighthouse project. You can jump straight to creating a new ticket if you’d like. (Just make sure to include the name of the plugin you’re reporting a bug for.)

    Oh, and speaking of bugs: you may want to follow Err on Twitter. We’ll be using it to post updates about our projects and plugins and blogs, oh my. Oh yeah.

  • rubylicio.us, about 4 hours later:

    very sexy indeed.

  • Ted, about 7 hours later:

    Does the foreign_key create actual referential integrity like http://www.redhillonrails.org/#foreign_key_migrations ?

  • Gustav Paul, about 7 hours later:

    sweet :) Well done man.

  • Josh Schairbaum, about 7 hours later:

    I really like the syntax of this, but wanted to make you aware of a recent patch that has a similar syntax, but relies on a method_missing hack, of sorts. The patch isn’t nearly as complete as this, but thought I’d pass it along.

  • Chris, about 9 hours later:

    Ted: This doesn’t create actual foreign key constraints, but I don’t see why this plugin couldn’t work in harmony in the redhillonrails one.

  • Tom Locke, about 10 hours later:

    Damn you err-the-blog man! I was going to add that to Hobo. You’ve totally stolen my thunder ;o)

    One query – what’s special about ‘timestamps!’ that it should have a bang on the end?

  • Chris, about 10 hours later:

    Tom: Nothing too special. It’s aliased as timestamps, auto_dates, and auto_dates!—you can use whichever you’d like. I like the bang because it does two things at once, things you can do yourself, so it reminds me that it’s ssssspecial.

  • Ryan Bates, about 15 hours later:

    That is very cool. Will have to try it out.

    Oh yeah, where’s the “self.up” method definition? Was it left off by accident?

  • Joe Van Dyk, about 15 hours later:

    The svn repository is asking me for a password…

  • Sam Livingston-Gray, 1 day later:

    I’ll be in my bunk.

  • Dan Kubb, 1 day later:

    My greatest wish for migrations would be for me to specify what I normally add for the “self.up” method, and for the “self.down” method to be automatically generated.

    If it were coded to understand what the reversal method was for each add/create method, and actions were run in reverse order to how they were defined, I think alot of it could be automated.

    Of course there are some things that cannot be reversed, which is where an exception needs to be thrown, but I still think most of what we do in migrations could be DRYed up.

  • Sam Livingston-Gray, 1 day later:

    @Dan Kubb: the TextMate Rails bundle includes a macro that understands how to reverse many of the basic migration steps, and fills in the corresponding self.down line as you type the self.up line. If you’re on Windows, e-texteditor.com may support this.

    Point being, you might need to write this yourself. With TextMate so popular in the Rails world, I doubt the core team is particularly feeling your pain.

  • Chris, 1 day later:

    Dan: I hear ya—I usually do something like this in my initial migration.

  • Phil, 1 day later:

    While this looks really cool, I don’t know that I could give up all of the handy TextMate snippets that I use when creating migrations. Hmmm…maybe I will need to create some new TextMate snippets :-)

  • Prince, 1 day later:

    I’m not sure why you are talking about bringing sexy back.

    Sexy never left.

  • ylon, 1 day later:

    Well guys, if you check out some of the chatter going on over here:

    http://blogs.sun.com/tor/entry/ruby_screenshot_of_the_week6

    You’ll see that a real ERD model tied into migrations so that a graphical back and forth flow would be much sexier than any textual migration… ;)

  • Antonio, 1 day later:

    It bears mentioning that the down-generating functionality is also present in vim’s Rails package. But then I suppose at the end of the day it’s less about the fact that our editors can reduce the pain (the Java folks can say that, too), and more about not needing the editors to help us repeat ourselves to begin with. Admittedly, migrations are a one-time thing, but still…

    Purely thinking aloud, it’d be nice if, when Rails went to reverse a migration, it checked for a `down’ method. If present, it assumes that the entire reverse migration is in there. If not present, then it changes the meaning of the various potential `up’ methods (e.g., create_table and the add_column, etc, calls) to mean the opposite of what they mean (through some aliasing magic and other voodoo, for example). Now, problems obviously come up with remove_column calls, for example, since the type information isn’t provided when you remove a column. Still, assuming all of the database stuff is in a migration somewhere, you could try doing a scan of the migrations to find where that column is defined, for example.

    This is all a lot of extra work, of course, but it would certainly be nice.

  • Dan Kubb, 3 days later:

    Most of my migrations have down methods that look like mirror images of the up method.

    I think for something like this to work you’d specify whatever you normally do in the up method, and behind the scenes it would generate the up method automatically, and reverse (ordering AND method calls) everything for the down method.

    As Antonio mentioned the main sticking point would be if in your “up” method you wanted to remove a column, you’d need a way to specify enough information so the down method could create the column when reversing the migration.

    Actually what would be nice is if the remove methods took the same arguments as the add/create type methods, and the system made it so you couldn’t remove something unless the arguments provided would allow a exact restoration of whatever you were removing. I hope that made sense. In a way it would sort of be like saying: “remove this column, but only if the column has these precise attributes”.

  • Xin, 4 days later:

    This plugin looks great.

    But, does it sexify update migrations?

    i.e. add_column :groups, :lat, :float

  • Jim Morris, 16 days later:

    Nice! I added a small patch that allows an option of :ref => :reftablename to the foreign_key, this will create a foreign key constraint for that column to the named table, which works for both postgresql and mysql, If you would like the patch let me know where to send it.

    Thanks

  • Chris, 17 days later:

    Jim: Bugs to Lighthouse please.

  • Jim Morris, 17 days later:

    Ok I’ll try, unfortunately Lighthouse doesn’t work with a Firefox browser, so I’ll have to find ie somewhere I guess (hard as I use Linux!)

  • Jim Morris, 17 days later:

    I have filed a patch to lighthouse which also adds indexes.

    eg string :alias, :idx => {:unique => true} # creates a unique index on alias

    integer :user, :idx => true # creates a simple index on user
    foreign_key :user, :ref => :users, :idx => true # creates a foreign key constraint, and an index on user_id
  • topfunky, 20 days later:

    I’m using it right now and feel much sexier.

    Do you think there is any value in abstracting other elements?

    For example,

    inheritable!

    would produce

    t.column :type, :string
  • Chris, 20 days later:

    topfunky: Yep, funny enough I added a polymorphic method before you made your comment. inheritable is now in there. Check my tweet.

  • ylon, about 1 month later:

    Have your “Sexy Migrations” been integrated into Hobo or have you discussed it with Tom Locke? Seems like this might be a nice integration.

  • cies breijs, about 1 month later:

    here the patch for mail line rails: http://dev.rubyonrails.org/changeset/6667

  • Andrew Kuklewicz, about 1 month later:

    So the 6667 changes are nice – but no indices and no foreign keys get created. So I modifed the sexy migrations to have both:

    http://err.lighthouseapp.com/projects/466-plugins/tickets/5-add-indexes-to-sexy_migrations#ticket-5-5

    http://pastie.caboo.se/63388

    Cheers, Andrew

  • Martin, about 1 month later:

    So sexy migrations made it to the rails edge trunk, but why didnt foregin key make it?

  • Dan Kubb, 2 months later:

    @Martin: I would bet we’ll never see “foreign_key” make it into edge rails (due to a belief by some core members that foreign keys are unecessary). However I bet what would be accepted is a patch that adds “belongs_to”, which basically just created an integer field (without creating a foreign key) pointed at the foreign table, named #{table_name}_id.

    The reason I think this is that we’ve seen some recent changes by DHH to add belongs_to/has_many type relations in routing. Its not too much of a stretch to bring the same general syntax to table migrations.

    The beauty of this approach is that plugins can be created that override the standard belongs_to method, and creates a real foreign key when possible.

  • Pei Mei, 5 months later:

    I just wanted to let you guys know that I have created a TextMate bundle for the Sexy Migrations plugin, which is one of my favorites and gets included in ever new project I start.

    You can get the Sexy Migrations Bundle at http://www.railsjitsu.com/blog/project-releases/sexy-migrations-textmate-bundle/ and I have included instructions for installing it.

    Thanks Chris and err.the_blog! You guys are my favorite Ruby on Rails blog!

  • Mohsin, 8 months later:

    Why not add the support for the additions of foreign key constraints as well to the database as the redonrails plugins are doing?

  • saurabh purnaye, 10 months later:

    really sexy…

  • , 11 months later:

    sexy

  • Reserter, about 1 year later:

    The best article, thanks to the author. good jokes, funny jokes

  • wholesale jewelry, about 1 year later:

    wholesale jewelry handmade jewelry

  • handcrafted jewelry, about 1 year later:

    wholesale fashion jewelry handcrafted Jewelry wholesale handmade jewelry pearl jewelry wholesale pearl jewelry wholesale gemstone jewelry wholesale turquoise jewelry wholesale coral jewelry wholesale shell jewelry wholesale swarovski jewelry

  • jewelry wholesale, about 1 year later:

    wholesale jewelry jewelry store fashion jewelry crystal jewelry jewelry wholesale pearl jewelry wholesale crystal wholesale pearl wholesale coral wholesale turquoise wholesale shell

  • jewelry wholesale, about 1 year later:

    wholesale jewelry fashion jewelry jewelry wholesale pearl jewelry wholesale Gemstone jewelry wholesale turquoise Jewelry wholesale crystal jewelry wholesale coral jewelry wholesale shell jewelry

  • Heart Tattoos, about 1 year later:

    Tattoos Celtic Tattoos Lower Back Tattoos Dragon Tattoos Skull Tattoos Heart Tattoos Butterfly Tattoos Chinese Tattoos Layered Hair Styles Layered Hairstyles Emo Hairstyles Medium Hairstyles Bang Hairstyle Prom Hairstyle Hair Coloring Heart Lower Back Tattoos

  • boxer, about 1 year later:

    How to download YouTube videos for mac and convert the .FLV files on Mac OS? Here are the easy-to-use and top-user-rating YouTube Video Grabber Mac and Mac FLV converter tools. It is safe to install and no spyware or adware guarenteed.

  • bodom, about 1 year later:

    How to download and convert the FLV files on Mac OS? Here are the easy-to-use and top-user-rating Free YouTube Downloader for Mac and FLV converter tools. It is safe to install and there are no spyware or adware.

  • reach, about 1 year later:

    With the YouTube Converter for Mac application, you can easily download youtube for mac and convert YouTube videos on your Mac OS.

  • boxer, about 1 year later:

    I suggest 2 FLV Converter for Mac software. One is powerful in download YouTube Videos and convert downloaded FLV files; the other is professional in video converting, which can not only convert .flv video to all media formats, but also can convert all kinds of video formats to .flv, plus popular videos.

  • aaa, about 1 year later:

    ヤフー

  • karen, about 1 year later:

    家庭教師 富山  消費者金融 マネーパートナーズ キャッシング 美容 ダイエット 健康食品 FX ゴールドカード 家庭教師 岐阜市 脳神経外科 健康食品 スプレッド 神奈川県 墓石 ライオンズクラブ 家庭教師 新潟 通信講座 クレジットカード アルバイトニュース fx 富山県 墓石 FX スプレッド 比較

  • care for the elderly, about 1 year later:

    For anyone with old or elderly loved ones, it is important to take care of your central florida retirement communities brookdale senior living inc kelly home care services boston senior home care senior home care inc new jersey living will form new jersey living will senior day care centers florida golf retirement communities senior apartments in las vegas senior apartments las vegas in hopes making sure you or your old / elderly loved ones are taken care of with the best nursing care available.

  • seks, about 1 year later:

    sikiş porno sex video izle iyi porno uzun porno yeni pornolar porno seyret sex seyret porno filmler sex izleyin sex izle porno sex erotik porn video türk porno canlı porno porno izle porno porno film sex filmleri porn video porno film sex seyret porno video seyret orgazm porno seks izle erotik video sex videolar yetişkin video sex video izle porno video izle bedava porno 18 video seks porno sıcak izle yetişkin film sikiş seyret sex amatör videolar teen video erotik videolar yetişkin video yetişkin videolar pornolar porno video teen kızlık bozma sikiş sikiş video seks türban sex sex erotik seks izle sıcak ateşli

  • Great article! Thanks for the info. Vigrx, about 1 year later:

    Great article! Thanks for the info. Vigrx

  • , about 1 year later:
    thank u

    دليل مواقع - منتدى - يوتب

    fg,j,e ];j,v fg,j,e - برق fvr - نت لوق kj g,r - مدرسة المشاغبين l]vsm hglahyfdk - جريدة الرياض [vd]m hgvdhq - fvhl[ kj برامج نت - You tube يو تيوب - jvhtdhk ترافيان - العاب hguhf -  برامج جي سوفت fvhl[ [d s,tj – دردشة تعب قلبي ]v]am juf rgfd - شات الرياض ahj hgvdhq - بلوتوث غشمشم fg,j,e yalal –

  • asdasdads, about 1 year later:

    modern abstract art sofa manufacturer гранит 净水器 混合机 过滤机 DHL快递 保险箱 法兰 法兰标准 牛皮癣 皮肤病 北京快递公司 北京国际快递 传世私服 传奇世界私服 天龙八部私服 天龙私服 网络电话 免费网络电话 假发 补发 织发 植发 上海搬家公司 上海搬场公司 大众搬家 大众搬场 张家界旅游 香港旅游 深圳旅行社 打包机 收缩机 萎缩性胃炎 neoprene laptop bags SEO优化 SEO优化 计量泵 胃炎 胃病 冷水机 冰水机 工业冷水机 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 油罐车 北京办证 办证 北京特价机票 北京打折计票 北京国际机票 北京机票预定 北京飞机票 北京订机票 北京机票查询 血糖仪 血糖仪 银杏 水培花卉 企业宣传片 空分设备 机电设备安装 代孕 代孕网 代孕 代孕 代孕 试管婴儿 代孕 电话交换机 程控交换机 集团电话 集装袋 混合机混合机 混合机捏合机 捏合机 捏合机导热油炉 导热油炉 导热油炉 反应釜 反应釜 反应釜 回流焊 波峰焊 spherical roller bearing 搬运车 搬运车 电动搬运车 油桶搬运车 堆高车 电动堆高车 半电动堆高车 堆垛车 高空作业平台车 电动叉车 平衡重叉车 前移叉车 电瓶叉车 苗木价格 苗木信息 标牌制作 深圳标牌 儿童摄影 北京儿童摄影 防静电鞋 淘宝刷信誉 威海凤凰湖 威海海景房 大庆密封件 打标机 淘宝刷信誉 TESOL/TEFL国际英语教师证书 英语教师进修及培训 韩国饰品批发 代写论文 代写论文 代写论文 代写代发 论文代写 电源模块 模块电源 X架 超薄灯箱> 易拉宝 展柜制作 代理服务器 游戏加速器 网络加速器 网通加速器 电信加速器 电信网通转换器 电信网通加速器 网通电信互转 网通电信互通 网络游戏加速器 美国VPN代理 美国独享VPN 美国独享IP pvc ceiling panel Spherical roller bearings 天龙八部私服 SEO优化 安全鞋 劳保鞋 防砸鞋 电绝缘鞋 上海安全鞋 上海劳保鞋 江苏劳保鞋 服装软件 服装管理软件 进销存软件 进销存管理软件 服装管理系统 服装进销存软件 进销存系统 进销存管理系统 免费进销存软件 吉林中医 东北特产 打包机 dhl 阳痿 阴茎短小 阴茎增大 早泄 前列腺炎 阴茎增粗 阴茎延长 国际机票 上海国际机票 国际打折机票 国际特价机票 CRM 客户管理软件 客户关系管理 免费客户管理软件 客户管理软件下载 客户信息管理系统 销售管理系统 销售管理 CRM系统 CRM软件 客户关系管理系统 客户关系管理软件 客户管理 客户管理系统 营销管理系统 客户资源管理 销售管理软件 客户资料管理软件 客户资源管理软件 客户信息管理软件 客户资料管理 客户资源管理 客户信息管理 客户资料管理系统 客户资源管理系统 客户管理软件免费版 砂磨机 砂磨机 砂磨机 卧式砂磨机 卧式砂磨机 卧式砂磨机 三辊研磨机 三辊研磨机 三辊研磨机 混合机 混合机 混合机 锥形混合机 锥形混合机 锥形混合机 行星动力混合机 行星动力混合机 行星动力混合机 无重力混合机 无重力混合机 无重力混合机 干粉砂浆设备 干粉砂浆设备 干粉砂浆设备 捏合机 捏合机 捏合机 导热油炉 导热油炉 导热油炉 反应釜 反应釜 反应釜 搪玻璃反应釜 搪玻璃反应釜 搪玻璃反应釜 乳化机 涂料设备 干混砂浆设备 无重力混合机 胶体磨 涂料成套设备 双螺旋混合机 北京婚庆 北京婚庆公司 400电话 办证 呼吸机 制氧机 亚都 亚都加湿器 亚都净化器 亚都装修卫士 饰品批发 小饰品批发 韩国饰品 韩国饰品批发 premature ejaculation penis enlargement 破碎机 制砂机 球磨机 雷蒙磨 雷蒙磨粉机 鄂式破碎机 鄂式破碎机 免烧砖机 加气混凝土设备 反击式破碎机 选矿设备 安利产品 马来西亚留学 网站优化 网站推广 衬布 代写论文 代写论文 代写论文 论文代写 代写论文 代写硕士论文 代写毕业论文 磁力泵 离心泵 化工泵 隔膜泵 螺杆泵 潜水泵 油泵 耐腐蚀泵 泵 水泵 拖链 防护罩 排屑机 塑料拖链 钢铝拖链 水泵 磁力泵 隔膜泵 离心泵 液下泵 自吸泵 多级泵 排污泵 螺杆泵 油泵 化工泵 电动隔膜泵 气动隔膜泵 自吸式磁力泵 氟塑料磁力泵 管道离心泵 导热油泵 深井泵 潜水泵 污水泵 潜水排污泵 深圳装饰 深圳装饰公司 深圳装修公司 特价机票 打折机票 国际机票 机票 新风换气机 换气机 立式新风换气机 风机箱 新风系统 能量回收机 搅拌机 混合机 乳化机 分散机 毛刷 毛刷辊 工业毛刷 刷子 钢丝刷 涂层测厚仪 硬度计 兆欧表 激光测距仪 测振仪 转速表 温湿度计 风速仪 超声波测厚仪 粗糙度仪 噪音计 红外测温仪 万用表 硬度计 万用表 美容院 美容加盟 澳洲留学 澳大利亚留学 什么是法兰 电烤箱 酒店预定 北京酒店预定 北京酒店 离心机 nail equipment nail products nail product nail uv lamp nail uv lamp nail uv lamps uv nail lamp nail brush nail file nail tool nail tip nail gel curing uv lamps lights 万用表 风速仪 红外测温仪 噪音计

  • de, about 1 year later:

    アーネスト 賃貸 アクサ 三井ダイレクト 設計事務所 ゲーム 専門学校 ウェディング ショッピング枠 現金化

  • クレジットカード 現金化, about 1 year later:

    行政書士 現金化 結婚式 有料老人ホーム 副業 看護 ウェディング earnest デザイン 専門学校

  • 123, about 1 year later:

    情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣,情趣,情趣,情趣,情人歡愉用品,情惑用品性哥,情人用品性哥,情趣用品,AIO交友愛情館,情人歡愉用品,美女視訊,情色交友,情人用品性哥,視訊交友,辣妹視訊,美女交友,性愛,嘟嘟成人網,按摩棒,震動按摩棒,微調按摩棒,情趣按摩棒,逼真按摩棒,G點,跳蛋,跳蛋,跳蛋,性感內衣,飛機杯,充氣娃娃,情趣娃娃,角色扮演,性感睡衣,後庭區,SM,潤滑液,情趣禮物,威而柔,香水,精油,芳香精油,自慰,自慰套,性感吊帶襪,情趣用品加盟,情人節禮物,情人節,吊帶襪,辣妹視訊,美女交友,情色交友,成人交友,視訊聊天室,美女視訊,視訊美女,情色視訊,免費視訊聊天,視訊交友,視訊聊天,AIO交友愛情館,嘟嘟成人網,成人貼圖,成人網站,AIO交友愛情館,情色,情色貼圖,情色文學,情色交友,色情聊天室,色情小說,七夕情人節,色情,A片,A片下載,免費A片,免費A片下載,情色視訊,情色電影,色情網站,辣妹視訊,視訊聊天室,情色視訊,免費視訊聊天,視訊聊天,美女視訊,視訊美女,美女交友,美女,情色交友,成人交友,自拍,本土自拍,情人視訊網,視訊交友90739,生日禮物,情色論壇,正妹牆,正妹,成人網站,A片,免費A片,A片下載,免費A片下載,AV女優,成人影片,色情A片,成人論壇,情趣,免費成人影片,成人電影,成人影城,愛情公寓,色情影片,保險套

  • qw, about 1 year later:

    Thanks so much for this! This is exactly what I was looking for

    mirc mırc mırç mirç mirc indir mirc yükle mirc yukle türkçe mirc mirc indir mirc islami sohbet kelebek kelebek script kelebek sohbet kelebek mirc chat çet cet çet odaları sohbet kanalları sohbet odaları kameralı sohbet kameralı chat sohbet eğlence mirc sohbet odaları sevgili arkadaş arkadaş bul arkaraş ara oto araba şarkı sözleri astroloji ikinci el telefon gazete gazeteler günlük gazeteler marifetname bedava domain ücretsiz domain benimurl parça kontör parça kontör radyo dinle bedava blog ücretsiz blog

  • noname, about 1 year later:

    video ödev indir şarkı sözleri video izle şiir türkü indir güzel sözler fıkra porno izle pornolar 18

  • sexy, about 1 year later:

    Thank you so much

  • Buzz, about 1 year later:

    Great ! I love it

  • 132, about 1 year later:

    情人用品,情人用品性哥,情 人用品,情趣用品,視訊交友,視訊美女,視訊美女,視訊交友網,視訊聊天室,視訊聊天室,視訊 交友網,免費視訊聊天,辣妹視訊,辣妹視訊,情人視訊網

  • dd, about 1 year later:

    徵信社,案件討論,男女專區,法律諮詢,相關新聞,情趣用品,情趣用品,情趣精品,情趣用品,情趣用品,情趣用品,情趣用品,威而柔,自慰套,自慰套,SM,充氣娃娃,充氣娃娃,潤滑液,飛機杯,按摩棒,跳蛋,性感睡衣

    威而柔,自慰套,自慰套,SM,充氣娃娃,充氣娃娃,潤滑液,飛機杯,按摩棒,跳蛋,性感睡衣,視訊交友90739,情人視訊網,情色交友,視訊交友,辣妹視訊,美女視訊,aio交友愛情館,情色論壇,成人論壇,免費視訊聊天,辣妹視訊,視訊交友網,美女視訊,視訊交友,成人視訊,情趣用品,成人聊天室,情趣,情趣,視訊聊天室,視訊聊天,視訊聊天室,情色視訊,情人視訊網,免費視訊聊天室,aio交友愛情館,色情遊戲,寄情築園小遊戲,情色文學,一葉情貼圖片區

  • Hoodia, about 1 year later:

    http://www.hoodia-diet-pills.lakemountainsprint.com/ hoodia

  • Sixty-one people have commented.
    Chime in.



    Textile is permitted.

Projects

  • Cheat! Sheets
  • Subtlety: RSSin' Your SVN
  • cache_fu
  • acts_as_textiled
  • mofo [microformat parsing]
  • require 'errtheblog'

Information

  • Dynamite! — The Err Free Weblog
  • Err Free: Ruby Development & Consulting
  • Err on GitHub
  • Err on Twitter
  • Report Err Plugin Bugs (Lighthouse Tracker)
  • Contact
This is Err, the weblog of PJ Hyett and Chris Wanstrath.
All original content copyright ©2006-2008 the aforementioned.