% sudo port install mercurial
% hg clone https://komagata@bitbucket.org/komagata/haml.ursm.jp
% hg commit -m 'fixed foo'
% hg push
gitと同じ感じでいけるんですね。とても親近感が湧きました。ハードゲイ(hg)かと思ってたら案外悪いヤツじゃない。
# ~/.hgrc
[ui]
username = Masaki Komagata <komagata@gmail.com>
verbose = True
ただ、bitbucketはそびえ立つ糞のように重かった。
パッチ作成とパッチ当て
% hg diff > foo.patch
% patch -p1 < foo.patch
「ムシャクシャしてやった。今は反省している。」
こういうのが来たらテンプレとして、
という運動をして行きたい。「柔軟な対応」しました(キリッ。
世界最年少のプロギタリスト宮澤佑門くん9歳。あまりにもうますぐるでしょう?
OzzyとCrazy Train弾いてる・・・。
ちょうどOzzyのファンのおっさん達は佑門くんの父親ぐらいの年齢でしょう。
「ぜひうちの子にもギターを!」
と思っちゃうかも。
いやいやこんなん無理ですから!!
このたび、ニコニコ動画が
2010年度・第2四半期の黒字化を達成いたしました!
本日午後のドワンゴ決算発表会で明らかにされました。
ニコニコ動画が黒字化したそうです。おめでとうございます!
赤字の状態ですら「ちょwww」というようなアグレッシヴな機能追加を行ってきたのでこれからどうなるのか楽しみです。
5月13日で0x20歳になりましたkomagataです。
プログラマー35歳定年説ってありますが、「0x20歳でプログラマー成人式とかやったらどうか?」などと考えるしょうもない大人になるとは思いませんでした!
vimgrep(via ハタさんのブログ(復刻版) : vimのgrep(vimgrep)が素晴らしすぎて泣いた。)
:vimgrep /date_format/ **/*.php | cwin
RailsというかCapistrano Tipsですが・・・。
リリースの時にタグを打つ & リリースの時にTweetする(ホントはXAuth使いたい・・・)
# config/deploy.rb
set :version, Time.new.strftime('%Y%m%d%H%M%S')
namespace :deploy do
desc "Create release tag"
task :tagging, :roles => :app, :except => {:no_release => true} do
run_locally "git tag v#{version}"
end
namespace :notify do
desc "Tweet release"
task :tweet do
require 'rubygems'
require 'twitter'
require 'pit'
config = Pit.get('twitter', :require => {
'consumer_token_key' => '',
'consumer_secret' => '',
'access_token_key' => '',
'access_secret' => ''
})
oauth = Twitter::OAuth.new(config['consumer_token_key'], config['consumer_secret'])
oauth.authorize_from_access(config['access_token_key'], config['access_secret'])
client = Twitter::Base.new(oauth)
msg = "Version #{version}をリリースしました。 http://help-me-hackers.com #hmh"
client.update(msg)
end
end
end
# config/deploy/production.rb
after 'deploy', 'deploy:tagging'
after 'deploy:tagging', 'deploy:notify:tweet'
あとはpushするときpush --tagするようにする。
プログラミングタスクを共有する「Help me, hackers!」というサービスを作りました。(ちなみにこの書きだしはラペコをパクリました。)
一言で言うと「報酬支払いインフラを持った共有公開BTS」です。(報酬はPayPalで払える。もちろん報酬無しの単なるタスクもアリ)
我々プログラマーは趣味や仕事でプログラムを書きまくるわけですが、「何を作ってるのか」とか「何を作りたいのか」などは個人のTODOリストとか、会社のBTSに隠れて見ることが出来ません。それを公開・共有すれば有益なコミュニケーションができるのではないかと考えて作りました。
以前、このエントリーで書いたBTSを使ったリモートでのお仕事。こっちのエントリーで書いたお仕事がスゴく助かったのでこういうのがもっと簡単に行えるインフラとコミュニティーが欲しかったのです。当然極秘のタスクもあると思います。しかし、以前の例からも仕事・趣味に関わらず、公開していた方が結果的にお得なんじゃないかと。両方共良い成果が出たのはお二人ともリモートからオープンソース形式での開発に馴染んでいてスキルがとても高かったのが一番の原因だと思います。なので、そういった人が集まるコミュニティーを作るために、逆に興味無い人をフィルタリングしてしまうようにサイトを作りました。(IE6をわざと非対応にしたり・・・)
利用はTwitter認証を使っていてTwitterアカウント必須です。面倒な登録は無く、編集・削除も後から自由ですので、「今日の自分のタスク」や「おうちで作りたいもの」などを試しに登録していただけると嬉しいです。当初はもちろん僕が全てのタスクに対して全力で解決にあたりますw
RailsでProblemクラスをTaskクラスに変えるという感じのリファクタリングをvimでやる時の手順。(なるべく受け入れテストがある状態でやるのがいいと思った。今回は取り敢えずエラーが出ないことを確認するぐらいのテストしか無かったので怖かった・・・。)
% git checkout -b rename_problems_to_tasks
とりあえず怖いので・・・。
% script/generate migration rename_problems_to_tasks
# db/migrate/20100512071617_rename_problems_to_tasks.rb
class RenameProblemsToTasks < ActiveRecord::Migration
def self.up
rename_table :problems, :tasks
rename_column :comments, :problem_id, :task_id
execute "UPDATE taggings SET taggable_type = 'Task' WHERE taggable_type = 'Problem'"
execute "UPDATE votes SET voteable_type = 'Task' WHERE voteable_type = 'Problem'"
end
def self.down
rename_table :tasks, :problems
rename_column :comments, :task_id, :problem_id
execute "UPDATE taggings SET taggable_type = 'Problem' WHERE taggable_type = 'Task'"
execute "UPDATE votes SET voteable_type = 'Problem' WHERE voteable_type = 'Task'"
end
end
MySQLとPostgreSQLには少なくともrename_tableがあるらしい。他は分からないです。belongs_toなテーブルのidも変更が必要。ポリモーフィック関連や単一テーブル継承を使ってる場合はクラス名が値として入ってるのでそれも変更。怖い!
% vim -c "argdo %s/Problem/Task/gce | update" {app,db,test,config}/**/*
こうするとY/Nで確認しながら置換出来る。(ということを生放送で教えてもらいました。あざーす!) vendorが含まれるとうざいので除外。
% vim -c "argdo %s/problem/task/gce | update" {app,db,test,config}/**/*
小文字で置換(こっちのが大体多い)
% find . -name '*problem*'
% git mv app/helpers/{problems,tasks}_helper.rb
ファイル名もチェックして変更。おお怖い怖い・・・。