seri::diary

日常

不要品処分で役に立ったサービスまとめ

f:id:serihiro:20141002075144j:plain

ここ3ヶ月ぐらい盛岡への引越し準備を進めていたのですが、引越しに伴う不要品処分で利用したサービスなどを紹介します

買取・不要品無料回収サービス

バイクランド

f:id:serihiro:20141002080842p:plain

  • バイク買取サイト
  • 一括見積りサイトでまとめて見積もりを出してもらった所、一番査定額が高かった
  • 担当者の方が査定額が高くなるポイント・下がるポイントを明確に説明してくれたので金額に納得できた
  • 走行距離1万キロで中古で買ったHONDA VTR250 2009年式を買った額の7割ぐらいで買い取ってもらえた

ドクターヘルメット

f:id:serihiro:20141002080845p:plain

  • バイクのヘルメット買取サイト
  • 送料着払い
  • 配送用のダンボールをタダで送ってれる
  • 2年前に5万ぐらいで買って常用利用してたAraiのヘルメットが1万ぐらいで売れた

ブックリバー

f:id:serihiro:20141002080846p:plain

  • 古本・DVD・ゲーム等の買取サイト
  • 送料着払い
  • ダンボールは自分で用意する
  • 事前に買い取って欲しいISBNをwebサイトのフォームから送ると1営業日ぐらいで査定額をエクセルシートでメールで送ってもらえる
  • 2~3年前に発売されたアニメのBlue-rayとかアメリカのホームドラマのDVDボックスとかをやたら高く買い取ってもらえた

ブックスドリーム 専門書アカデミー

f:id:serihiro:20141002080849p:plain

  • 専門書・技術書などの買取サイト
  • 送料着払い
  • 配送用のダンボールをタダで送ってれる
  • 依頼すれば書籍毎の査定額を教えてもらえる(今回は使わなかった)
  • 高価買取りの書籍リストをwebサイトに掲載しており、実際そのリス トにある商品を買い取ってもらえた所掲載通りの額だった
  • 主に技術書やビジネス本を売ったが、普通の古本屋に出すよりは遥かに高く買い取ってもらえた

パソコン回収.com

f:id:serihiro:20141002081123p:plain

  • ITメディアの記事で取り上げられていたので使ってみた
  • 一部の商品は出張買取無料なので梱包不要
  • 電話したらやたら回収がかなり混んでいて電話した日から2週間後じゃないと予約できなかった
  • 回収日当日の時間指定はできなかった(私は在宅人間なので関係ナシw)
  • 15inch液晶とプリンタとXBOX360を無料で回収してもらった

住所移動に伴うサービス

引越れんらく帳

f:id:serihiro:20141002081918p:plain

  • 電気・ガス・水道・ネットなどの住所移動手続きをネットから一括で出来る東京電力が提供するサービス
  • 現住所での利用停止・新住所での利用開始手続きができる(但し提携業者のみ)
  • 自分が引っ越す盛岡の業者には対応してなかったので、今使っている電気・水道・ガスの利用停止手続きに利用した

タスク管理

Githubのissue

f:id:serihiro:20141002082331p:plain

  • 自分の適当なprivate repositoryのissueで管理していた
  • メモは全部コメントに残しておいた
  • 仕事中に業者から電話がかかってきてちょろっとメモりたい時とか確認したい時に便利だった

その他

24インチのディスプレイとミドルタワーのPC本体を運ぶためにデカい箱を買ったら素材もしっかりしてて良い感じだった

引越しの準備で得た知見

  • 一括見積もりサイトを使うと大量の業者から平日の朝からジャンジャン電話がかかってきて最高にめんどくさかったので余程の理由がない限りオススメしない
  • ネットの回線を移動させようとしたら前入所者の回線が契約されたままですぐに移動手続きができなくて手続き開始が10日ほど遅れたので、出来るだけ早めに回線移動の手続きを始めた方がよい
  • 郵便の転送サービスは転送が始まるまでに1週間ほどのバッファが発生するので早めに申し込んだ方がよい
  • 同じ部屋に3年も住むと意外と要らないものが大量に貯まっていることがあるので定期的に不要品は処分した方がよい
  • 単身引越であっても500キロ以上の長距離移動になると引越し代が凄まじい事になる
  • 地方都市限定の話かも知れないが、8月中旬に独り暮らし向けの物件探しをしても殆んど物件がないのでつらい

次回は盛岡から更新します

【お前のチケット】チーム開発でのチケット改善術【解読不能】

f:id:serihiro:20140809224222j:plain

Issue管理システムを使っている開発現場では同僚の書いたチケットに悩まされる以下の様な光景が良く見られます。

事例1「何の目的で作られたのか分からないチケット」

ソースレビューを振られたのでチケットを見てみたら、何を変更したいかは分かるけどこの変更がどういう意味があるのか分からないケース

担当者の対応

作業したメンバーの席まで歩いて行って
「ねーねーこれさー、何のために作ったの?
「あーそれはですね、まず○○という話がありまして、それで…」
(背景から説明されて15分経過)

事例2「ソースを全部読まないと何を変更したか分からないチケット」

ソースレビューを振られたのでチケットを見てみたら10コミットぐらい入れてあるけどチケットの説明が簡素過ぎて何の仕様をどう変更したか(もしくは新規に作ったか)がソースの差分を全部読み込まないと分からないケース

担当者の対応

作業したメンバーの席まで歩いて行って
「ねーねーこれさー、要するに何変えたの?
「あー、ちょっと待ってもらって良いですか?(いっぱい変えたからすぐ出てこない…)」
(思い出して変更点を列挙するまでに10分経過)

事例3「意味がわからないチケット」

誰かが切ったチケットを振られたのはいいけど何が書いてあるか分からないケース

担当者の対応

チケットを切ったメンバーの席まで歩いて行って
「ねーねーこれさー、何?
「あー、これ別のチケットから派生して作られたんで良くわからないっすねー」
「Aさんが詳しいはずだからAさんに聞いてみましょう」
Aさん「良く分かんないからBさんにも聞きましょう」
Bさん「いや俺知らんし」

運が悪いとドラクエの如くいろんな人の所にタライ回しにされ1時間近く彷徨うハメになります。

事例4「後になって振り返ると全然分からないチケット」

チケットは正常に処理され、作業者とレビュアーは合意が取れておりすでに本番にリリースされているのに、第三者がそのチケットを読んだだけでは内容がサッパリ分からない。 しかしその修正で障害が発生したので担当者を問い詰めなければいけないケース。

当事者の対応

作業したメンバーとレビューしたメンバーの席まで走って行って問い詰めるが当人達も覚えていなくて全社を巻き込んで泥沼化する
→最悪殴り合いに発展

何が原因か?

RedmineBacklogJIRAGithubといったIssue管理システムを使う最近の開発では、個々のチケットを通じて相手に作業依頼をするケースが多くなります。

口頭やメールで依頼する内容をつらつら書いたりすることなく、Issue管理システム上でチケットの担当者を変更し、Issue管理システムから飛んでくるメールで作業を依頼されたことを周知させている現場も多いのではないかと思います(少なくとも自分が関わった現場ではそうでした)。

そのため、他人に意思を正しく伝えるには、チケットに必要な情報が十分に掲載されている必要があります。
そうしないと上記のように、作業を振られる度にいちいち担当者の所まで行って質問しに行かなければならず、質問しに行ったついでにあれやこれや雑談していると簡単に10分、15分を無駄にしてしまいます。チーム内で同じことがどこかで毎日起きていたら間違いなくチーム全体の生産性の低下につながります。(そして何故か問題として取り扱われにくいですコレ)

どうするか

そんな重大な問題を引き起こしかねない一方で、上記の事例は全て「チケットの書き方」をちょっと改善することで大方解決できそうな問題です。

以下に説明する「ちょっとした気遣い」程度のことで、チームの生産性を大きく向上させることが出来ると信じています。

伝わりやすいチケットを書く上で自分が気をつけていること

現職ではGithubをIssue管理に使っていますが、IssueやPullRequestの説明やコメントを書くときに以下のことに気をつけています。

背景、目的、作業内容を必ず書く

簡単でも良いのでこの3点を押さえていれば、プロジェクト内の第三者が読んだ時に困ることは無いと思います。 この3点さえ抑えれば他の事は自ずと導かれてくるはずです。

しかし残念ながらこの3点すら書かれていないチケットを数多く目にし、その度にチケットを切ったメンバーの所に「そもそもコレってどういう話ですか?」という所から問答をスタートしなければならないケースが多々ありました…

<背景>

ユーザー新規登録画面においてページ離脱率を向上させる施策を実施したい。
そのために入力フォームがどのくらい入力された段階で離脱したかを知る必要がある。

<目的>

ユーザーが離脱した時点でどの入力フォームが入力済みであるかを知る。

<作業内容>

Google Analyticsのイベントトラッキングで以下のイベントを
トラッキングできるようにjsを仕込む。

TODO:
・入力フォームに入力してfocusが外れた時。未入力時は飛ばさない
(個々のinputタグのnameと入力された文字数をGoogle Analyticsに飛ばす)
・確認ボタンのonsubtmit
・ページ離脱(beforeunloadにbindする)

Redmineを使ってる場合はIssue Templateプラグインを入れてテンプレートとして上記のような項目のタイトルを入れておくと良いと思います。

また、Githubの場合はタスクリストをチェックボックスで作ることができるので、PullRequestの場合は必ず説明文に入れています。

画像で表現できるものは必ず画像を貼る

web画面やスマフォアプリ等でGUIがあるアプリの場合、必ずキャプチャを貼ります。 口で「UserControllerのlistで表示される画面の上から3番目のtableでさ~」なんて言われても分かりませんが、
キャプチャ取って丸つけとけば一発です。百聞は一見に如かずと昔の人は言いましたが今でも通用します。

文章では伝わらないことが画像や絵なら一発で伝わることも少なくありません。面倒臭がらずに画像に頼りましょう。 私はwebのキャプチャを取るためにChromeExtentionのAwesome Screenshotを使っています。
全体キャプチャ・部分キャプチャ・トリミングだけでなく、文字の表示や、四角・丸などで該当箇所を囲んだりといった加工がブラウザ上でできます。最近なんか挙動が怪しいですが、とりあえず使えてます。

f:id:serihiro:20140809220832p:plain

あとはMacだったら画面の動作をQuickTimeでキャプチャしてGifアニメにして貼るのもオススメです。

チケットの説明文に書く情報は出来るだけ沢山

バグチケットの場合だと情報が多すぎて困るケースは殆んどありません、というか多分ないです。
バグ調査の情報として載せられるものは何でも載っけましょう。 私の場合は以下をよく載せています。

  • サーバサイドのエラーログ
  • 問題を引き起こしてるSQL
  • 問題が起きている画面のキャプチャ
  • 問題が起きた際のmysqlshow full processlistのログ
  • 関連する資料ファイル(Excel,pptなどの外部ファイルがあれば)
  • 関連するチケットへのリンク

自分の作業メモをチケット上に残す

実践している人が意外とあまりいないtipsですが、自分がチケットを作ったり実際に作業している際に考え方こと、仕様決定で迷ったことなどをチケット上に残しておくと、レビュアーやテスター対してコミットの意図が伝わりやすくなります。

後で作業者や起票者の「思考をトレース出来る」というのは文章によるコミュニケーションの大きな利点ですので活用しない手はありません。
ただしあまり沢山書くと邪魔になってしまうので、ある程度バーっと書いてからあとで整理しておくのがオススメです。

自分の場合は以下の様なものをチケットに書いています。

  • 自分が手を入れている部分の仕様メモ
  • 疑問点とそれに対する回答(自分で聞いて回って解決したら回答を付け足しておく)
  • 実装中に「これでいいのかな?」と思ったこと(あとでレビュアーにレビュー依頼時に重点的に見てもらうために)
  • 設計の意図
  • 作業中に作った画面のキャプチャ(作業中は自分が見る用に、レビュー/テスト時はレビュアー/テスターが分かるように)

最後に

こういう話をすると高確率で「めんどくさい」「うちのチームは誰もチケットの内容なんて誰も読まない」 「Face to Faceで十分会話してるから問題ない」とか何とか言われます。

しかし、ちょっとやってみれば分かりますが、チケットを切る際に背景・目的・作業内容の3点を箇条書きにするようにするだけなら、時間は5分もかかりません。

その5分の労力によって、マネージャーや他のメンバーが質問しに来る時間を無くしてチーム全体の生産性を高めてみんな早く帰れるようになると考えれば、業務中にtwitterfacebookを眺める5分間を差し出すことは十分割に合うことだと思うのですが、どうでしょうか?w

先ず隗より始めよということで、自分からチケットの書き方を変えてみると良いと思います。 別に文句を言う人はいないはずです(多分)

自分も1人で上記のようなことを勝手に始めましたが、段々他の人が真似するようになりました。

10年後もプログラマとして働き続けるために考えていること

f:id:serihiro:20140125204711j:plain

クロノトリガーは、確か自分が中1だか中2だかの頃に、偶然ハードオフで見つけて中古で買い、何周も何周もプレイした思い入れのある作品だ。

当時、既に発売から何年も経っていたから、周りの同級生とクロノトリガーを話題にしたことはなかったが、テキストとドット絵の、今考えたら制約の多い手法で表現される、時には熱い戦いに胸が踊り、時には辛い別れに涙する素晴らしい世界観に自分はめちゃくちゃハマり、主要な台詞を殆んど覚えるほどやりこんだ。気がつけば全員のレベルを★★(カンスト値)にするまで何周もやり込んだ。

そんなクロノトリガーで、今でも時々思い返す台詞(というかスクリプト)がある。物語序盤、中世で攫われたリーネ王妃を救うために向かったマノリア修道院のドア横に突然現れる「はりがみ」にこんなことが書いてある

行こうと心に決めた者のみが行ける道がある。

 物語の本筋と関係があるんだか無いんだか、良く分からない形で突然現れるこのはりがみ。

誰が、一体何のために書いたのかは劇中で触れられていないが、この言葉だけは初プレイから何年経っても時々思い返す。思い返すどころか、年を取れば取るほど重く感じるようになってきている。

 

突然話が変わるが、プログラマというのは特殊な職業なのだろうか、ということをよく考える。プログラマをどう定義するのかによるが、ここでは「業務としてコードを書く機会がある」人のことをプログラマとして定義したい。つまり、ITエンジニアという肩書だが、業務で全くコードを書かない人はそれに該当しないとしたい。

自分は今は仕事としてコードを書いている。最近、サービス開発の現場からは一歩退いて、プロジェクト横断で後方支援的なことをメインにやるようになったため、以前より書く量は減ったが、技術検証やテストコードの整備などで毎日何がしかコードを書いてコミットしている。また開発現場に戻るかも知れないが、少なくともプログラマとしてコードを書いて仕事をし続けたり、新しい技術を学び続けることに何の疑いもないし、10年、20年経っても続けていくつもりでいる。

 

しかし、10年、20年とプログラマをやっている人って、自分が知るかぎりではかなり少ない。自分の身近な存在で挙げると、17年プログラマとして働いている先輩が1人いるくらいだ。業界自体が若い、なんて話もあるが、仕事としてプログラムを書いていた人は1960年代から存在していたようなので(「闘うプログラマー」参照)、10年間仕事でコードを書き続けている人がいてもおかしくはない。

一方で、「元プログラマ」とか「元SE」みたいな人は大勢いる。別にそれが悪いということは無い。一度でもコードを書いて飯を食うことで見えてくることは沢山あるだろうし、それを元に別の分野で活躍できるのは素晴らしいことだと思う。

また、30代、40代になった時に、プログラマという立場でどういうアウトプットができればいいのかが今時点では分からない。前述の通り、ロールモデルが殆んど無いし、かといって今(プログラマ歴は丸2年と少し)と同じアウトプットで良い訳がない。もしそうなってしまったら他の人に取って代わられるだけだ。

そういう意味で、プログラマは続けるのが難しい「特殊な仕事」なのではないか、なんてこと考えるようになった。サラリーマンというよりはスポーツ選手のような印象を持っている。常に自分を磨き続けなければ脱落していく。1年後に仕事で今以上の高いアウトプットを出そうと思ったらこの1年間相当量のインプットとアウトプットを残さなければならない。そうしないと少なくともプログラミングのスキルは伸びないからだ。

例えば、今業務でやっているサービスの保守は出来ている。

しかし、新しい事業が立ち上がって、そのチームの唯一のプログラマとしてアサインされた時、1人でサービスの根幹を作ることが出来るか?使うフレームワークを自分で選べるか?AWSVPC設定してEC2とELBとRDSを設定して最小限のインフラを構築できるか?出来ないとしたら、素早く習得できるだけの土台があるか?考えだすとキリがない。

今の仕事が出来ているから1年後も安泰、なんての昨今IT業界全般で言われる通り幻想である(これはITに限らないだろうけど)。ITエンジニアにとってどんどん必要なスキルは増えていく。必死で着いていかなければならない。辛いと思う人もいるだろうし、昨年入社したうちの会社の新卒諸氏は覚えることが多すぎて早くもしんどそうだ。

 

それでも自分は、プログラマとして働き続けようと思う。

なんでそう思えるのかと長いこと色々考えたけど、結局「好きだから」、に尽きるように思う。

自分は上流SEからプログラマに「転職」してからまだ2年と少ししか経ってないが、コードを書くこと、使ったことがないミドルウェアを使えるようになること、チームのタスクをマネジメントすること、誰かの問題を解決をするために頭を悩ませること、他のメンバーを育てること、全部含めてプログラマとしての仕事が心底好きだし、何よりwebで多くの人に「こいつぁすげぇや!」と驚き、喜んでもらえると凄く嬉しい。

だから「この道を行こう」と決めた。

「好きだから」でどこまで行けるか分からないが、今は新人教育やインフラ側・アプリ側双方での技術検証とかの仕事も始めて、前よりは仕事の幅が広がりつつある。その中で、自分が今どういうアウトプットが出来る人間かを考えて、そこからどうなりたいかということを模索していきたいと思う。

 

 

技術調査はググる前が肝心

概要

■「プログラミングは自分で調査しながら覚えた方が上達が早い」という意見は非常に同意

■でも出来ている人少ないよね。調査中に挫折しちゃう。

■それは「わからないこと」をブレークダウンして整理しないで調査し始めて欲しい情報をピンポイントで調べられてないから

■調査をする前に「何をしたいか」「何がわからないか」を徹底的に時間をかけて整理してから調査した方が結果的に早く答えに辿り着くからオススメ

 

プログラミングが上達しない or 勉強が続かない人へ:とあるIT系社長のブロマガ - ブロマガ

凄く共感できる内容だった。

特に以下の部分

実はプログラミングを"勉強する"ってこと自体ちょっとオススメできない。

どういうことかというと、僕が思うに
・何か作りたいものがある(アイデア
・それはどうやったら作れるのか(調査)
・実際に作り出す(実行)
っていうプロセスが一番上達が早いと思うんだよね。

全くその通りだと思う。

しかしこれらをきちんと実践出来ている人は現実ではかなり少ないように思う。

何か分からない事があった時に、なんでも自分で調べてホイホイ作れてしまう人もいるが、多くの人は調査の段階で立ち止まってしまうことが多い。「調べたけど分からなかったから挫折した」みたいな。

自分は元々独学でプログラミングを覚えて、過去の仕事でもエンジニアが自分1人しかいないような状況で開発をしていたこともあってか、自分で調べて解決するのには割と慣れている。

例えば何か作業しててハマった場合、自分は下記のような感じで調査している。

f:id:serihiro:20140111214543p:plain

 後半のググって見つかるまでキーワード変えてググるってのはみんなやっているのだが、前半のオレンジで書いた部分のフローを端折って

・何がしたいのか

・自分がどこまで分かっていて何が分からないのか

・どういう情報が欲しいか

を明確にしないまま、何となくエラーメッセージでググったりする人が多い。

 

これをやると、気が付くと的外れなことを調べていたり、漠然とググり続けて延々と時間をかけてしまったり、途中でそもそも何がしたいのか分からなくなってしまう。んなことを現場でやってると先輩から怒られること必須である。

ググっても分からず、最終的に誰かに質問する場合も、何が分かっていて何が分かっていないかを明確にしておかないと、聞かれた相手もどう答えていいか分からず、お互いの時間を無駄にすることになってしまう。
んなことやってると段々「あいつは自分で調べずにすぐ聞いてくるめんどくさい奴だ」とチームのメンバーに思われて、段々相手してもらえなくなる。現実は厳しい。

 

また、開発コストという観点からもなるべく短時間で調査できるようになることを常に心がけるべきだと思う。

調査を行う時間が初めから開発スケジュールに含まれているなら良いが、そうではない突発的な調査が必要になった場合の調査は長引けばスケジュールに影響を与える。

ハマりそうなポイントがハナから見えているのであれば、調査かプロトタイプを作って検証するスケジュールを最初から入れておくことを検討しといた方がいい。

 

あと調査とは関係ないけど、手元で得られる情報をきちんと集めるのは調査以前の大前提になるので、javaの長ったらしいスタックトレースもめんどくさがらずちゃんと読もうね、ってのもいつも思う。

参考:デバッグ手順(スタックトレース重要) - jfluteの日記