読者です 読者をやめる 読者になる 読者になる

新潟の空は今日も灰色

技術ネタ中心にいきたいけど、そんなにネタは持ってません。

携帯電話の料金を見直してみてる

Facebook あたりに書きまくってるんですが、今お金がないです。辛いです*1

節約するために、いろんな月額料金のものを解約していってます。見直してみると結構無駄遣いしてるもので(-_-;)

ところで、僕の docomo の携帯電話契約、まだ「学割2012」が効いています。学割は3年間有効なのですが、契約したのが修士2年の3月。つまり学生最後の月に契約してるので、まだ有効期間内なのです*2

こいつの学割が切れるとちょっと出費が大きくなるので、それまでに対応策を考えたいところ、というわけで検討してる内容の備忘録。

現状

今がどういったプランになっているかというところから。

1. docomoFOMA回線)

普段は電話用に F-09C に挿してるやつ。iモードと moperaU 契約してた(spモードは未契約)。

2. docomo(Xi回線、学割効いてる)

普段はデータ通信用に SO-02F に挿してるやつ。moperaU とspモード契約中。キャリアメールのメインを契約中。今の時点で6500円くらいかかっててて、半分は端末代金。残り10ヶ月。

3. docomo(Xi回線)

BF-01D 挿してたデータ通信専用のやつ。解約済。10260円払う必要が…。

4. docomoFOMA回線)

祖母の携帯(mova)から僕が受け継いだ番号。死蔵中。700円くらいかかってる。

4は一番古い番号。1もそこそこ古くて高校時代から。

使う頻度も落ちてきたとは言え、キャリアメールはとりあえず確保しておきたい。

考えた結果(現時点での決定事項)

  • 1の moperaU を解約。spモード契約。iモード続行(ここまでは実行済)。spモードに、2に紐付いているキャリアメールを移管する。
  • 2はしばらくはこのまま。プランがタイプXiにねんなので、通話し放題の恩恵がないから変更無し。タイミングを見て IIJmio かワイヤレスゲートに飛ばす。
  • 3は解約済だから関係ない。
  • 4はどうしようか…?続行させる? Fx0 にでも MNP させようかな。

結果を受けて

  • 1の料金は変わらない。ISP割の適用先が moperaU からspモードに変わるだけ。
  • 2の料金は安くなると思った。思ったけど、そういえば端末代金あるんだった。今は一括で払う余裕ないし結局10260円もなんとかしないと。とりあえず隙をみて、払いきりたい。
  • 4はしばらくは変わらないな。

んー、端末代金どうしようかな。工面できればなぁ…。

どっちにしても、しばらくは変わらないっぽいな。

*1:欲しかった車を買ったのです。その点はすごくうれしい。そのうち日記にも書きたいな

*2:つまり社会人3年目が終わると言うことですね。

CentOS 6.xとAmazon Linux(2014.09.1)でyumの戻り値が違う件

状況説明

たとえば、こういうコマンドを打った場合。

  • ちゃんと yum コマンドが発行出来る(権限が足りてる)
  • インストールするパッケージは、パッケージ名では無くURLでの指定である
    • rpm -Uvh http://hoge/fuga.rpm と同義のコマンド
    • レポジトリ登録のときに***-release.2.3.x86_64.rpm みたいなのを最初にインストールすることは結構ありますよね。

とりあえずこの状況では、最初は対象のパッケージはインストールされていない前提で、1回目のコマンド発行でインストールされ、もう一度同じコマンドを実行したときのお話です。

$ sudo yum -y install http://hoge/fuga.rpm
$ sudo yum -y install http://hoge/fuga.rpm # 上と同じコマンド
$ echo $?

CentOS6とAmazon Linuxで値が違います。

結果

CentOS6の場合

0

Amazon Linuxの場合

1

なにが困るか

たとえば、Ansibleとかを使っていると、Amazon Linuxの場合は、- ignore_errors: yes が必須になります。気をつけましょう。

ちょっとつらい…。

Mac のファイル名に使える文字列にびっくりした話

仕事中のこと

仕事では Mac を使っています。

ある日、エクセル*1でファイルを保存しようと思ったときに、なにを思ったか、こんな感じで保存したんです。まあ、Windows とかと同じ感覚で、どうせはじかれるだろうと思っていたんですが*2

f:id:hagane:20140605193242p:plain

ちょっとまって、保存出来てしまったけど、Mac って /(スラッシュ)を含むファイル名保存出来るの?!

ターミナルではどうなるのか

こうなると、よくわからないのは、ターミナルでの扱い。iTerm2 を立ち上げ保存したディレクトリに移動して、ls したらこうでした。

f:id:hagane:20140605193810p:plain

/ だったところが : になってる!二度びっくりです。

これは、本当にコロンなのか?

ファイル名の文字コードとか、ファイルシステムを直接いじれるならその方がいいんでしょうけど、そんな技量今の僕にはないので、とりあえずプログラムから触ったときに、この文字列がなんであるのかを確かめてみました。

Python 2.7.5 (default, Mar  9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.listdir('.')[0]
2014:06:05.xlsx
>>> for i in os.listdir('.')[0]:
...     print i, ord(i)
...
2 50
0 48
1 49
4 52
: 58
0 48
6 54
: 58
0 48
5 53
. 46
x 120
l 108
s 115
x 120
>>>

ASCIIの58は確かに : ですね*3

ふーむ。

これが許されているのは歴史的経緯?

ちょっと調べてみると、BSD ベースになる前の Mac のディレクトリ区切り記号は : だったようですね*4。その当時は、スラッシュはファイル名を構成する文字列として許されていたのでしょう。つまりこれは後方互換性のための措置なんですね。

どうやら、システム内部では : として扱い、Finder で表示するときに / に置き換えている模様。保存した瞬間結構びっくりしたんですけど、すごい仕様ですね。

ですので、bash から / を含む文字列を作ることはできません。bash:をファイル名に含むファイルを作った場合は、Finder 上では、/ に置き換えられて表示されます。

このスラッシュ入り(コロン入り?)ファイル名、Mac 上では閲覧・確認・保存等出来ますが、他のファイルシステムではたぶんだめです。Windows でやったらたぶん怒られます。今のところ、Windows あんまり触れないので確かめられてないんですが、共有しようとしたらなんかしらのトラブルになると思います。というか、Windows で直接 : の入ったファイル名をつけようとしたら怒られました。

Linux: 入りは大丈夫でした(/ は当たり前だけどだめぽ)。GUI 環境のある Linux 環境が今手元にないので、そっちでの表示のされ方は不明ですが、普通に考えれば : のままで出てきて欲しいところです。

というわけで、出来る限りこういう文字列をファイル名を入れるのはやめましょうね、というお話でした。

... もしかして常識でしたか?!

*1:別にエクセルじゃなくてもいいです。

*2:ATOK で「今日」って打鍵して入力した次第。「今日」って打ったときに、「2014-06-05」とかに変換出来ればいいのに…と思って確かめてみたら出来るじゃん!便利!

*3:ASCII文字コード : IT用語辞典

*4:ファイル名のスラッシュとコロン - onumeraneの日記 - mdsg。内容的にも今回の内容とほぼ同じものを書かれている方がいたんですね。

シェルを再起動

bash とかで、シェルだけで再起動したいとき、ウェブで検索すると、大概

$ source ~/.bashrc

とか出てきます。てーか、これは再起動していないだろ。

しかしながら、僕が忘れていて、思い出したかったのはこいつじゃなくて、

$ exec $SHELL -l

です。

忘れないようにメモ。

Zabbix からチャットワークに投稿するためのスクリプト書いた

Zabbix からのアラートをチャットワークに投げつけるためのスクリプトを書きました。

npoi/zabbix2chatwork

ソースコードあんまり綺麗じゃないけど。README 書いてないけど。コミットメッセージ日本語だけど。

背景

今の会社はインフラが強固ではありません。インフラ担当の僕にスキルがあるというわけではないので、うまく立てないとセキュリティホールとなりがちなメールサーバは可能なら構築したくないという希望がありました。

でも、アグリノートのサービスになにかあったときのために Zabbix からアラート情報は飛ばしたい。外部にメールサーバ借りるというのも手なのですが、それよりも手っ取り早くスマホにプッシュ通知する方法がありました。そう、チャットワークです。

選んだ理由、社内のコミュニケーションツールがチャットワークだったというのが一番大きいんですけどね。ただ、これならば、複数人に同時にアラート飛ばすときにも使いやすいですしもってこいです。限定的ながらAPIも公開されて、プログラム側から使いやすくなりましたよね。

ついでに、どうせエンジニアなのだから、死ぬまでに1回くらいはなんか自分でもプログラム、もといスクリプトの一つでも書いて公開してみたいという欲求が湧いたので、久しぶりに Python を使ってスクリプトを書いてみた次第です。Python 選んだのは単に好きだからっていうのと、標準的な UNIX なら処理系乗っているはずだからです。

使い方

単体で使うとき(テストとか?)

Zabbix 使わなくても、コマンドラインから以下のコマンドで実行可能です。

./zabbix2chatwork.py [chatwork_api_token]:[チャットルームID or チャットルーム名] [表題] [メッセージ本文]

たとえば、あらかじめ "Zabbix" という部屋を用意して以下のコマンドで実行すると、

./zabbix2chatwork.py 7bb[中略]742:Zabbix hoge fuga

以下のようなこんな感じになります。

f:id:hagane:20140213001945p:plain

これだけではとくに使い道はないですね。

Zabbix から投稿するとき

まず、Zabbix の、AlertScripts ディレクトリにスクリプトをダウンロードして、実行権限を与えます。ディレクトリの場所は公式の CentOS 用のパッケージだと、/usr/lib/zabbix/alertscripts になってますね。/etc/zabbix/zabbix_server.conf 内に設定が書いて有るはずなので確認してください。

ファイルを設置したら、Zabbix にログインします。メニューの[管理]→[メディアタイプ]へ遷移して、[メディアタイプの作成]ボタンを押します。

f:id:hagane:20140213003143p:plain

f:id:hagane:20140213003739p:plain

[タイプ]を スクリプト に変更し、[スクリプト名]には zabbix2chatwork.py を指定します。[名前]は適当で良いと思います。[有効]のチェックボックスも忘れずにチェックします。

次に、ユーザー設定に移ります。

f:id:hagane:20140213004350p:plain

ユーザーリスト という表示のドロップダウンボックスを ユーザー に切り替え。

f:id:hagane:20140213004447p:plain

任意のユーザー名をクリックし、[メディア]タブを選択。[追加]リンクを押すと以下のダイアログが出るので、先ほど設定したメディアタイプを指定します。[送信先]には [chatwork_api_token]:[チャットルームID or チャットルーム名] を入力してください(例:7bb[中略]742:Zabbix)。[時間帯]等はお好みで。

f:id:hagane:20140213011157p:plain

あとは、トリガーとアクションの設定次第でメールの代わりにチャットワークにメッセージが飛んでいくはずです。実際に飛ばしてみた時の画像がこちら。

f:id:hagane:20140213010220p:plain

エ、エモーティコン…。(2/13 9:18変更…)

課題

プッシュ通知届くのを目的としているくせに、マイチャットあたりになげないと、スマホさんは通知してくれません。ちゃんと To つけて送れるようにしないと。

あと、複数の部屋名が重複しているとうまく使えないはずです。そういうときは、room_id で指定してあげてください。

最後に

久々だったせいもあって、プログラム書くの楽しかったです。これだけ短くて、クラスもなにもあったものではないですけど素直に楽しめました。なんか次はなに作ってやろうかっていうやる気出ますね。久々に物作りの感動を思い出した気がしました。うん、もっと、こいつも改善していきたいですけどね。改善ってなんだかわからないけど。

とはいえ、仕事でそろそろコード書かないといけない雰囲気が漂っていますけどね…。

これだけ短いスクリプトだけど、コーディング上まずい部分が有りそうな気がします。見つけられたら、直接指摘したり、Pull request いただけると幸いです。よろしくお願いします。

余談

なお、話は変わりますが、ウォーターセル株式会社では Ruby(on Rails)、PHPAndroid アプリ開発に関しての人材を募集中です。

職場は新潟というグンマーのさらに奥地ですが、農業ITというフィールドはそれなりに攻略しがいのあるエリアだと思います。今年あたりは一気に市場規模の拡大がありそうです(それだけ競争激化して辛い戦いも増えそうですが…)。

もし、ご興味があれば、人材募集に関わる内容じゃなくても、企業間のコラボなどでもご連絡いただけるとうれしいです。よろしくお願いします!

追記(2015/01/19)

ChatWork で code タグというものが出来たらしいです。

ついに「codeタグ機能」をリリース!ソースコード表示もより見やすくなりました! | ChatWorkブログ

今までのスクリプトだと、強制的にエモーティコン表示させられてたんですが、この対応によってエモーティコン排除できるようになりました。 早速コードに反映してあります。

とある蕎麦屋での話

前職の営業研修の折、外回りのさなか、とある駅の近くの蕎麦屋でお昼を食べたことがあった。蕎麦自体はあまり美味くなかった記憶があるが、昼間の住宅地の中で傍目にも着なれていないリクルートスーツ姿の自分が入ってきたのが珍しかったのか、気さくな店主が声をかけてくれた。

聞けば、七十過ぎのその店主は、大学は東京六大学の一角を出たものの、家族の事情で蕎麦屋を継がざるを得なかったのだという。 本当ならば、銀行などで働きたかったが、気付けばこうして蕎麦屋をやっている。それでも、なかなか周りが大学にいけなかった時代に大学まで通わせてくれた親に報いたく必死に学は積んだつもりで、それは忘れたくはなく、故に今に至るまで日々読書を欠かしたことはないという。 仕事の合間、時間があるときにはさまざまな本を読み、気になる語句や漢字があれば、メモをとってあとでまた調べるという生活をしてきた。そして、たまに来る友人や蕎麦屋の客と、たとえば自分のような客といろんな話で盛り上がりたいのだそうだ。

私が新潟は長岡の大学の出身だということを言うと、ああ、あそこには西と東に山があってその上の大学だね、長岡には行ったことはないがよく話してくれるやつがいたり、地図を見たりして知っているよ、と嬉しそうに話してくれた。

ひとしきり蕎麦を食べ終え、店を出るときに、店主が今日話してくれたお前さんにぴったりの言葉を送るよと、胸ポケットから取り出した紙に「魭断」の二文字を書いて渡してくれた。 意味も出典も明かさないから、時間があれば自分で調べてみなさいという。今ならインターネットとかもあるだろうし、すぐ見つかるだろうとのことだった。

店を出た後、さっそくネットで調べたものの全く日本のページはヒットしない。中国語のサイトはかろうじて引っかかるものの、機械翻訳をかけてみても意味がよく分からない。しかし、よく読むと "庄子・天下" というものがちらほら見える。 さらに調べると、これは日本の漢字で言うところの「荘子・天下」ということであった。

家に帰った僕は"荘子 天下篇"の納められた、岩波文庫の「荘子 第四冊 雑篇」を購入し読んでみた。以下の一節に目的の言葉は記されていた。

常に人に反し、観を聚めず、而して魭断を免れず。

文章として意味としてはそんなによくはない。「魭断」という言葉単体の意味とすれば、「丸くする。摩擦を減らす」といった意味になるようだ。果たして、僕は丸いのだろうか。自分では判断がつかないが、店主はそう思ったのだろうか。そのときはそれで終わりだった。荘子も買っただけ。結局は持っているのは第四冊だけだし(他に第一冊から第三冊まである)。

その後しばらくして、僕は新潟にもどってきた。その転職・引っ越しのころ、さまざまなことが重なって、悲しく辛い気持ちになったことがあった。自分がどうすればいいのかもよくわからない状態で正直苦しかった時期であった。「なにすべきなのか、あのとき自分はどうすべきであったのか」そんなことばかりが頭に浮かび、悔いても悔やみきれない日々が続いた。そして、僕がそうなった原因の一つとしては、冒頭に出てきたとある駅とも絡む、ある事情によるところが大きいのであった*1

そんな折に、老荘思想というものを知った。いや、以前から名前は知ってはいたが、概要を知って少しだけ今までよりも調べてみることにしたのであった*2。そこには、もっと力抜いて生きろよ的なことが書いてあった(と思う。すごく乱暴な解釈だ。厳密には老子の方はよくわからない。深いのか、ただあまのじゃくなのか、僕には判断がつかない)。 それは、僕が悩んでいることの小ささというか、そういったことを気付かせてくれる一因になったと思っている。結果として(他の要因も絡むものの)だいぶ心は楽にすることができたのである。

とある駅の蕎麦屋がきっかけで知った荘子が、同じ駅を舞台にどうしようもない気持ちになった僕を救う一因となったのは、ただの偶然なのだろうと思う。しかしながら、たった、1年5ヶ月という短い東京生活のなかで、こういったことを経験できたのは、僕自身は非常に不思議だなと感じた次第である。

おそらくその駅へは、しばらく、いや、ともすればもう二度と行くことはないのだろうが、もし、この先、降り立つことがあったとき、僕はもっと”丸くなれている”のだろうか、とふと思ったりした。

急に思い出してどこかに書きたくなった、そんな東京での思い出。

*1:なお、蕎麦屋とは全く関係ない

*2:もともと兵法書とか、諸子百家の書物なんかには興味があった。

ファンクションポイント法でシステムの見積もりをしてみた

必要に迫られて、会社のシステムの一部の規模をファンクションポイントで見積もりしてみた。

もちろん、内容は明かせないのだけど備忘録的にちょっとだけ書いてみる。

参考にしたのは下の本。

失敗のないファンクションポイント法

失敗のないファンクションポイント法

  • 機能を分解するための視点はユーザ視点
    • 一時データなど、ユーザから見て意識できないファイルのやりとりは機能としてカウントしない
    • これ一時データ?っていう時がよくある。Cookieは一時データ。
  • ファンクションポイントにおける「ファイル」とは、データのやりとりをするためにつかわれるもの全部

    • システム上DBもファイルに含まれる
  • 実際の計測時には、エクセルあたりでテンプレート作った方が良さそう

  • 単なるログイン機能でも、入力内容とユーザ情報が一致するかの照合時に暗号化/複合化とか含んでたら EQ ではなく EO になるのだろうかね。

  • アジャイル開発するときの事前見積もりでは絶対適用できない

    • 詳細設計書レベルの詳しい資料か、実際に動いてるものが無い限り無理だと思う
  • いくら UI とか UX などにこだわりがあっても―それがたとえ開発の9割の時間を占めていたとしても―、機能としてカウントされない以上、規模として見積もれないのはなんか不条理な気がする

自分が作ろうとしてるもの、詳細にやりたいことが決まっているのなら、力試し程度で見積もってから開発してみてもいいかなと思いました。

適宜時間があるときに追記していきます。