iPod Touchを今更ながら購入
動機
仕事が遅くなるので、自宅に帰ってネットで確認とかしてると、自由時間が減ってしまう。帰宅途中の時間も勿体無い。
携帯で確認できるものはこれまでもそうしていたのではあるが、携帯でRSS読むとか結構キツかったのです。
ちなみに帰宅すると、Yahoo News、mixi、LDR、Twitter、ニコニコ、YouTube、その他仕事で気になったことなんかを調べたりするので、帰宅する前に調べられると、家に帰ってからの時間が多く取れるという。
本当はiPhoneとか(auユーザなので)、android携帯とか(auユーザなので)がよいのですが、それが残念ながらauにはないので、先日別目的で購入したEMのPocket Wifiとあわせて使っています。
どう使ってるかと。
Twitter覗いたり、LDR観たり、mixi覗いたりしてます。あとcheatSheetとかのPDF入れて暇なときに観てます。
意外に役に立ってるのが、お小遣い帳みたいなアプリですね。
これまで何にお金使ってたとかあまり興味を示してなかったんですが、1日いくら使ってどのくらいのペースでお金減って
るのかとかもよくわかる。
最も意外なのは、そのお小遣い帳をまだ続けて入力できているという私自身。
本当は思いついたものをバンバンとメモに記述している予定だったのですが、ソフトウェアキーボードが意外に小さく、
人差し指だと隣のキーを押してしまうという問題に直面してまして、そこまでに至っていないのです。
そんな感じでもうなくてはならないものになってしまいました。
携帯がiPod Touchの代わりになってしまったら、どうしよう…しかし、未来のことはまだ考えない。
レガシーコードとの格闘 その1
しばらく書いてないと忘れる。これいつも通りやわ。
熱出してるときに書くことではないのであるが、愚痴りたくなったので書く。
ちょっと大きいレガシーコードに対して品質向上をするにはどうするべきなのか?という問い。
設計書関連のドキュメントが整備されていない、ウォーターフォール型の開発現場で、しかも
テストコードはない環境で、です。
Javaで組まれてるけど、OOな記述がされていない。無秩序にコピペしたコードが散在してる。
記述自体が冗長で、やりたいことがコードを見ても理解し難いものが多い。
製造時、ソースレビューはしていない。仕様がわかっている人間が設計書を作成していない、
レビューもしていない。それはバグっても仕方ない。
まずは仕様の確定ってことで、設計書から何からドキュメントの整備から始まるんだろーな、
と思うけど、実際に品質を向上させるにはやはり、叩くしかないのかな…
最終的には「目で確認する」という作業は必要になるだろうけど、あまりバカ正直に「叩く」
という作業に没頭したくない。時間もコストもかかるし、再利用ができないし、人がやること
だから、ミスもでるんですよ。
そのミスを防ぐために、プログラマーでないSEが考えたのが、各作業に対してスクリーンショットを
必ず取る、取ったものをレビュアーが確認する、という作業。
この作業自体は品質向上や問題発生の防止に効果はあると思う。ただし…
時間も人もかかるんです。しかも、スクリーンショットを取ること自体が目的になってしまうんです。
※この作業をする、ということはそれだけ「レベルが低い」という証明でもあるのだが。
ここ数日、どうするのがよいかな、と考えたのだけれども、あまりに手をいれるべきものが
多すぎるため、何から始めてよいかがわからない状態。
今、やらなければならないと思ってるのは以下のようなこと。(あーレベルが低い…)
- 設計書、要件の整備。これがないと障害か元々ない機能なのか判別ができない。
- リファクタリング。この概念がうちにない。コードの重複をなくす。冗長なコードをシンプルに。
- テストの自動化。無理せずに徐々に導入する。リファクトするには必要だと。
- 仕様書に沿ってテスト仕様書作って叩く。
若造の単純な発想ですけど、狭い私の見識ではこれを地道に続けるしかないかな、と思う(泣)
ただ、一番の問題は、課長・部長レベルをどうやって説得してプロセス自体の改善を行うか、
ということなんですけどね。
screenを使おうと思ったが、macportsのscreenはイケてないとの記事をどこかで見たので、tmuxを入れてみた。
sudo port install tmux
ちゃんとscreen使ったことがないので、比較はできません…
manpageの日本語訳とかで少しずつ勉強してます。
とりあえず、操作キーを覚えるってことで、C-b ? と打って、キーバインドのお勉強。
英語はちょっと忘れたので…、そのまんまです。日本語にできない…
キー | 効果 |
---|---|
C-@ | next-window |
C-b | send-prefix |
C-c | new Window |
C-d | detach-client |
C-h | previous-window |
Tab | down-pane |
C-l | refresh-client |
C-n | next-window |
C-p | previous-window |
C-w | list-windows |
C-x | lock-server |
C-z | suspend-client |
ほかにもいっぱいコマンドがありますが、全然覚えられません。
コマンドを入力する場合は基本、C-bを打ってから何かキーを押します。
私がよく使うのは、以下のものです。
キー | 効果 | |
---|---|---|
C-b c | ウインドウ作成 | |
C-b ↑ | ペインを移動 | |
C-b ↓ | ペインを移動 | |
C-b % | ペインを垂直に分割 | |
C-Space | ウインドウを移動 | |
C-b ? | キー一覧 | |
C-b & | ウインドウをkill |
ウインドウの垂直分割がすこぶる使いやすいです。水平よりも垂直を好むので、これだけで入れた価値ありかな。
C-b ? でキーの一覧を表示した後、普通のキーが効かなくなるので、C-&でkillして閉じてます。
これ以外の回避方法がわかりません。
キーバインドとか、色とかは ~/.tmux.conf に記述して変更します。
私はC-bをC-aに変更しています。C-b はちょっと遠い。
MANPAGE見ながら設定してみました。一部効果がよくわかってないものがありますが、まあ、今はこれで。
set-window-option -g utf8 on set-window-option -g mode-keys vi #コピーモードのキーマップをvi set-window-option -g automatic-rename off #ウインドウ名が自動で変更されない set-window-option -g mode-mouse on set-window-option -g clock-mode-colour green set-window-option -g clock-mode-style 24 #デフォルトのキーをC-aに変更 set-option -g prefix C-a unbind-key C-b bind-key C-a send-prefix #ステータスバー set-option -g status on set-option -g status-bg white set-option -g status-fg black #時間表示 set-option -g set-option -g status-right '[%m/%d %H:%M]' #メッセージ表示 set-option -g message-bg colour244 set-option -g message-bg colour243 set-window-option -g window-status-bg colour244 set-window-option -g window-status-fg black set-window-option -g window-current-bg yellow set-window-option -g window-current-fg colour244 set-window-option -g window-status-current-attr bold set-option -g visual-activity on
今年の振り返り
今年前半は異動から始まって、全然うまくいかず。2月に他人に大規模に仕込まれたバグのおかげで半年を無駄に過ごした感じがした。
半年たって、人生初の"うつ"の公式認定を受けた。1ヶ月の休職。
休職中に意を決して、関西Ruby/Rails勉強会へ参加。
完全に初心者、かつ、初参加ながら、懇親会に参加し、Rubyとそのコミュニティのメンバーと触れ合った。
関西Ruby会議にも参加。ここで多くのRubyistsの話を聞くことができた。
ここでの影響が非常に大きい。
これまでにない視点や考え方を与えてくれた場だったと思う。
Rubyを使う人達にとっては、テストファーストとかDRYとかが"正統な"プロセスとして浸透しているみたいで、ちょっと衝撃を受けた。
自分の会社は、なんて無駄な苦行をしているんだ〜、と実感した。
このときくらいからかな。
自分の会社は無駄なことをいっぱいしてることに対して抵抗するべき、と気がついたのは。
今年の個人目標を変更し、プロセス変更とかツールを使って自動化とか、もっと楽になるように、生産的な作業に注力できるように提案をする、というように方向転換してみた。
2009ももう終わる。
何か大きな衝撃を受けた一年だった気がする。
年度という区切りではまだ終わっていないので、ちょっと継続して抵抗してみよう。
個人的に2010年は以下のことをしようかと考えている
今のところはそんなところだろうかな。
ほんとの単なる日記になってしまったけど、2009年お疲れ様でした。
twitterでfollowされてるけど、followしてないユーザをfollowするスクリプト
Rubyのお勉強中ということで、メモ的にエントリー。
ある事情で情報共有のためのtwitterアカウントを作成しました。
情報が欲しいと思ってfollowしたユーザに対してreplyでやりとりできるようにfollowし返す必要がでてきて、手動でfollowするのはしんどい(かも)ので、Rubyでスクリプトを作成してみました。
環境は以下のもの。
- Ruby 1.8.7
- twitter 0.7.10
#!/usr/bin/env ruby -Ku # -*- coding: utf-8 -*- require 'rubygems' require 'twitter' user_id = 'userid' password = 'password' following_count = 0 client = Twitter::Base.new(Twitter::HTTPAuth.new(user_id, password)) client.followers.each do |s| unless s.following client.friendship_create(s.id, true) puts s.screen_name + "をfollowしました。" following_count += 1 end end puts "follow対象はいませんでした。" if following_count == 0
これでちゃんと動いてるっぽい。
なにぶん、初心者ゆえ、Rubyらしくないところやもっと賢く記述する方法はあると思いますがご容赦ください。
Twitter::Base.newの引数がどのバージョンからか変更されているらしかったです。
認証用のクラスが分離されて、Twitter::HTTPAuthとTwitter::OAuthになっていました。
現状で最新と思われる0.7.10を使用。今回はTwitter::HTTPAuthを使用しています。
認証した後、followersでfollowしてもらっているユーザを取得して、ユーザをfriendship_createでfollowしています。
TwitterそのもののAPIのドキュメントと、twitter gemのAPIドキュメントを見ながら作成しました。
gemの方にはTwitterライブラリ自体の説明はないので、当たり前といえば当たり前ですが。
すんなりコードがでてこないや。Rubyもっと勉強しよう(汗)。
参考:Twitter API 仕様書 日本語訳 第四十一版 (2009年12月3日版)
http://watcher.moe-nifty.com/memo/docs/twitterAPI41.txt
Ruby Twitter Gem by John Nunemaker
http://rdoc.info/projects/jnunemaker/twitter
面談にて
休職も明けたということで、延期になっていた面談 with 課長やってきた。
休職中に参加した関西Ruby会議の@kakutaniさんの講演や、@agilekawabataさんの話、『アート・オブ・アジャイルデベロップメント』を読んだり、聴いたりして、こりゃいかんと、『技術的負債の解消』とか適当に題名つけて、powerpoint作って課長に投げておいた。
内容はさほど変わったことはない。ざっとこんな感じ。
- ソースをクリーンにするためにリファクタリングしましょう
→見通しよくなるから解析早くなるよ。バグの混入も減るよ。
- 自動化しましょう。
→個々人の負担を減らして、もっと大事なところに注力しましょう。
- 機能の充実<品質だよね
→機能拡張よりまず足元見ませんか?
一時間くらいで作ったので、具体的なことはなんも書いてないんだけど。
なんだろう。
品質の定義が2人の間でずれていたために、な〜んか私の持ってる危機感が伝わったか伝わってないか…な?微妙な感じ。
私のは「ソースコードの品質」、課長のは「製品特性としての品質(機能の充実っぷりとか)」
※ちなみに課長はプログラム組まない人です。
ちょっと話してるときの前半は「早晩滅びる…」が頭をよぎった…
課長自身は(いろんな意味の)品質に対してはこだわりを持っている人なので、話は聴いてくれた感はあったが、効果がすぐに見えないことと、計画がかっちり決まってないとアクションはダメ!な感じの反応で優先度は低そうだった。
収穫といえば、一応話は聴いてもらえたことと、一切やる気が無い訳ではないことがわかったこと。
アプローチの仕方によっては、部分的にでも実施させてもらえそう。→ただし、計画たいへんそう。
また、「そんな話、もちあがったことも持ってきたヤツもいない」ってことだったんで、ジャブ打った意味はあったかな、と思った。
というわけで、実現には具体的な方法を提案していかないといけないので、今調査中。
もうちょっと頑張っとこうかな。。
学習環境
う〜ん、書くことがない。ので、ざっと徒然に。。
前回の記事にて、関西Ruby会議02に行ってきたとか、『アート・オブ・アジャイルデベロップメント』を読んでたとか書いてました。
その後、プログラム熱が上がりまして、逆引きなRuby本を地味に読んでます。休職中だったこともあってまとまった時間があって、尚、熱上昇!!
githubからRubyツールcloneして解析したりしてます。RubyConfで話題の"g"も読みました!!
次回の関西の勉強会にも参加する予定です。
かつ、関西Ruby会議02参加者のMac率に圧倒され、13.3インチMacBookPro買って、環境整えてRuby勉強してしまってます。
LinuxとかMac(BSD系)とかのUNIX系譜OSにはこれまで馴染みがなかったため、コマンドからvimから勉強していってます。
vimについては、↓これらのページにお世話になって.vimrcいじって遊んでいます。
【vim-users.jp】 http://vim-users.jp/
【vim the editor】 http://www.vim.org/
vimかemacsか迷ったのですが、lispを覚える自信がなかったのと、コマンドの
Rubyでローカルツールなら2つほど作ってみました。
単に20ファイルくらいのPDFをリネームするツール(仕事自分用)と、vim用のdictファイル作成ツール(個人学習用)作っただけです。
※非常にたいしたことねぇ…
コードのgenerateとか、自動化とかできるところ見つけてRuby使っていこうか、とか勝手に考えてます。だって、RubyはJavaと比べて儀式的な記述が少なくで、ツール作ろうって気になるんですよ。
そういうのって、大事ですよね。。。
基本的な組み込みライブラリから、メジャーなライブラリとか一通り学習したいのですが、いかんせん基本が足りてないので、programmerとして一から勉強し直してます。
まだまだ学習は続く…