n10o.com

Web developer in Shibuya

Ec2-signalリリース

AWSのEC2でインスタンス(サーバ)の稼働状態の確認/起動/停止を気軽に実施するためのWebアプリのソースを公開しました。

angular.js + express(node.js) + jade + stylusを使って作っていて、非同期でサクサク動きますし、 画面遷移無しの絞込やソート機能が入っているので、気軽度は高めだと思います。権限管理もAWSのIAMを使えばいいので、自由自在です。

経費削減のために検証環境のサーバを頻繁に起動したり停止したりするので、開発者が自分で気軽に事故なくそういう作業をできるようにしたいという思いから生まれた製品です。

他にも、cronで業務時間外に利用しないインスタンスを停止させるような設定を入れておいた場合に、残業で急遽インスタンスが必要になったという悲しみを背負った時にも使っていただけるのではないかと思います。

Fluent-plugin-elasticsearchのハマりポイント

FluentdでElasticsearchサーバにデータを送るときに使うfluent-plugin-elasticsearchを利用するためには、公式にも書いてあるようにlibcurl-develが必要です。

これを/etc/sysconfig/clockを適切に設定していないAmazon Linux AMIにインストールすると、内部的にglibcが更新され、その際に時刻情報がUTCに再設定されて、面倒なことになります。

もしJSTにするなら以下の事前設定が必要です。ファイルコピーをした時点で時刻はJSTになるので、それだけでも当座はしのげますが、clockを書き換えないとパッケージを色々更新した時にいつの間にか時刻情報が巻き戻ってハマる可能性があります。

1
2
3
4
$ cp /usr/share/zoneinfo/Japan /etc/localtime
$ cat /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=False

なお、実際に時刻情報が書き換わってしまうと、crondが動作しなくなるので、/etc/init.d/crond restartして下さい。

上記現象でcrondが動かなくなると、/var/log/cronに(root) FAILED to authorize user with PAM (Module is unknown) が出て動作しなくなります。

Minimum-ansible

社内でプレゼンしたminimum-ansibleの資料を公開しました。github pagesでホストしており、ここでソースを公開しています。

プレゼン資料自体はreveal.jsをmarkdown(content.mdファイルに外出し)で書いていて、index.html内にremotes.jsの記述を追加することで、スマホでのページ送りを可能にしています。

開発者向けにAnsibleに興味はあっても、普段はサーバをいじらないのでなかなか始められないという層を対象にした資料になります。

Slack-and-hubot

チャットツールのslackを試すついでにhubotを入れました。

hubot自体のインストールは各所で書かれている通り、nodejsとnpmを入れて、npmでhubotとcoffee-scriptを入れてhubot —createで簡単にできます。

slackとのつなぎ込みはhubot-slackに書かれている通りに実施して、herokuでホストさせれば無料で動かせるところまでいきます。

なお、hubotのプロジェクトを作った後に自動でscriptsフォルダが生成されますが、この中のスクリプトはデフォルトで実行されるので、不要なものは別の場所に置きましょう。初期スクリプトの中にはredisを利用するものもあるので、インストールしていなければ警告が出ます。

後は、herokuのconfigで部屋情報等を設定し、slackの設定のIntegrationからhubotを設定すれば動きます。

私はデフォルトのスクリプト系はほとんど外しておきましたが、以下のような状況に陥ったので、

please pug me

対応して、

implement pug me

ハッピーになったと思ったら、

happy

その後、チャットルームがpugだらけになってしまったので、良かったのか良くなかったのかはよくわかりません。

Page-build-warning

octopressでページをデプロイするたびに、githubから[n10o.github.io] Page Build Warningというメールがきていました。

現在、URLを見ても明らかなように、apex domain(サブドメイン無しのdomain名)を使っています。

その場合、204.232.175.78(deprecated)に向けていたDNSのAレコードを、192.30.252.153と192.30.252.154に切り替えてくれとのことです。参考:github help

なお、DNSでALIASレコードかANAMEレコードが使える場合はそっちを使えばCDNが効くからオススメらしいです。

Divmod

checkioで、数値を発音(e.x. 123->one hundred twenty three)に直す問題で役に立った、商と余りを同時に算出する渋い関数

1
2
3
4
> divmod(123, 10)
(12, 3)
> divmod(12, 10)
(1, 2)

Checkio

checkio(http://www.checkio.org/)に登録しました。

checkioはpythonを使って様々な課題を解いていく海外サービスです。

ユーザ登録時にpythonの問題が出題され、その問題を解かないとユーザ登録ができないということで、2014/2月ぐらいに話題になりました。

私が登録したときに出題された問題は、「受け取った配列の最初の3要素の合計値を出すように、以下のcheckio関数を完成させよ」というものでした。

checkio first tryout
1
2
3
4
5
6
#python3.3 is inside
def checkio(els):
    return els

if checkio([1, 2, 3, 4, 5, 6]) == 6:
    print('Done!')

私は意気揚々と以下のように解答しましたが、 Wrong, Try again!でした。下に書いてあるテストケースは罠ですね。

n10o’s sweet answer
1
2
def checkio(els):
    return 6

Intro

このブログはOctopressを使ってgithub pagesでホストしています。

deployが面倒(rake generate –> rake deploy)だったので、CIツールのwerckerを使って、githubに記事をpushしたら自動deployする設定にしています。

たまにbuildやdeployで反応がなくなって15分のタイムアウトでこけるところと、どうしてもウェルカー(正しくはワーカー)と読んでしまう事を除けば、werckerいい感じです。

wercker

ただ、記事を書く作業が一番面倒なので、そのうち記事を書く作業も自動化したいです。