最近のアクティビティ

最近のアクティビティを報告します

xspfを連結するやつ作った

Chinachuを使っているとxspfをVLCから開いたりする。ザッピング的なことを行いたかったのでURLをまとめたxspfファイルを作るスクリプトを書いた。

gist.github.com

使い方はこんな感じです

# Usage: ruby xspfjoiner.rb [xspf_file ...]
% ruby xspfjoiner.rb *.xspf > channels.xspf

例です

% cat channel_a.xspf
<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
<trackList>
<track>
<location>https://example.com/path/to/channel_a.m2ts</location>
<title>Channel A</title>
</track>
</trackList>
</playlist>
% cat channel_b.xspf
<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
<trackList>
<track>
<location>https://example.com/path/to/channel_b.m2ts</location>
<title>Channel B</title>
</track>
</trackList>
</playlist>
% ruby xspfjoiner.rb *.xspf > channels.xspf
% cat channels.xspf
<?xml version='1.0' encoding='UTF-8'?>
<playlist version='1' xmlns='http://xspf.org/ns/0/'>
<trackList>
<track>
<location>https://example.com/path/to/channel_a.m2ts</location>
<title>Channel A</title>
</track>
<track>
<location>https://example.com/path/to/channel_b.m2ts</location>
<title>Channel B</title>
</track>
</trackList>
</playlist>

REXML::Formatters::Pretty を使うとそのままできれいなXMLができる。だがしかし、それだとタグの中にスペースが入ったりするとVLCがスペース入りのURLを開こうとしてしまっていたので、widthオプションに適当に大きめの数字を指定すると改行されなくなるのでそうした。

ちなみに、 REXML::Formatters::Default だと何もせずにVLCが扱えるXMLを吐くけど、終了タグと開始タグが1行になるなど、それはそれでちょっといやだったのでがんばったのがこだわりポイント。

参考: RubyでXML操作 | Netsphere Laboratories

最近Webサービスを気軽に作ることができなくなった気がする

昔話

昔(2009〜11年くらい)はみんなTwitter APIを使うだけのWebサービスを大量に作ってた。ブラウザで動くTwitterクライアントだったり、診断系だったり、あとはTwitterとなんかのAPIマッシュアップ(死語)させるやつを作ってた。最近の若者は、あんまりWebサービスを作ってインターネットに公開していないような気がする。今はアプリ開発の人もいるからそっちに流れてるのかもしれないけど。

気軽に作れない理由

これは結論から言ってしまうとWebサービスを作って公開するのに考えることが増えたという話だ。

Webサービスを公開するのに、最低限ローカルの開発環境とWebサービスホスティングする環境(自宅サーバVPS、IaaS、PaaS、なんでも良い)の2つがあればよかった。今もそうだ。でも、今はそれだとダサいと言われるようになってしまった。

Ansible, Chef, Itamaeのようなプロビジョニングツール、それはそんな難しくないけど、Dockerでコンテナ仮想化、それにともなって実行環境もECSだったりGKEだったり使うとかっこいいみたいな感じになっている。何が言いたいのかというと、Webサービスを作って公開して10人でも100人でも使ってくれることに喜びを感じるまでのプロセスが長い。これは完全に個人の意見なのですが、一部のエンジニアは心が狭い人がいて、オシャレな構成になってない状態で公開してもDocker使ってないと笑われたりするかもしれないですよね。そんな気持ちでWebサービスを公開したいわけじゃない。

あとは技術以外にも最近プライバシーのことでいろいろ言われるようになって、ちょっとむずかしいことをしたくなったら利用規約やプライバシーポリシーをちゃんと書かないと危なかったりする。雑なサービスが作りづらい。つらい世の中だ…。

どんどんやってみて欲しい

このエントリは自分に対する戒めの気持ちも込めて書いている。作りたくなったらその気持ちは大切にして、どんなしょぼいアーキテクチャだろうがスケールしないシステムだろうがとりあえず作ってみたらいいと思う。

僕自身もまだDocker完全に使いこなせないし、頭ではわかっているつもりでもどういうコマンドを打ったら期待通りに運用できるのか全然わからない。構成管理ツール、仮想化、難しいと思うならとりあえずやらなくて大丈夫。最初からAWSGCPでイケイケな環境で動かそうとかしなくていいと思う。VPS借りるとか、まあVPSはちゃんとセキュリティ対策しないと全方位に迷惑かけるのでそれも難しいようであればレンタルサーバを借りてめちゃくちゃ負荷かけて怒られたらいいと思う(個人の意見です)。

プログラミング言語だってなんでもいい。PHPが簡単だと思うならPHP使えばいいし、Rails使ってバカにされようが、Webサービスのアイディアを思いついたもん勝ちで、公開しないのが一番よくないことっぽい。

がんばりましょう!!

最後に

ところでなんでこんな話書いたのかというと、最初にも言ったけどあんまりWebサービス作ってる若者いないなぁと思うからです。このエントリでいうところの若者とは、中学生〜高校生くらいでプログラミングを趣味でやってる人たちのこと。最近みんなアプリばっか作ってるよね。アプリのほうが覚えることは多くてもみんなそれ覚えてるので、学習するのが簡単になっている気がする、シュッと作って雑に公開できるのは一昔前はWebだったけどいまはアプリになっている。アプリもいいけど最近Webサービス作りたくなったのでどんどんやっていくぞ。

日付で管理する最悪なバージョン管理システムを作った

授業の課題をCで書いて提出しないといけなかったので、最悪なバージョン管理システムを作りました。

日付ベースのバージョン管理であれば、誰でもファイルを覗くことができるでしょう。上司がバージョン管理システムなんて使いたくないと言っているような職場でも安心して使えますね。

Date version control で dvn です。QWERTY配列では s と d は隣同士にあり svn と打とうとするとタイプミスを誘発しやすいため、それを狙ったコマンド名にしています。

流れ

% dvn
dvn - Date version control

Usage:
        dvn init
        dvn commit [message] [file]
        dvn log
  • dvn init でカレントディレクトリに .dvn ディレクトリを作る
  • dvn commit でコミットしたいファイルとメッセージを指定してコミット
  • dvn log でコミットログを参照

コミット間の差分は、diff を使って頑張るという感じです。ディレクトリ同士で diff を取ればそれっぽくなります。

まとめ

作ってみてわかったのが、日付によるバージョン管理は人類を破滅させるのことにつながりかねないのでやめたほうがいいですねということです。

% dvn init   
Initialized dvn repository.
Recommend: Initial commit `dvn commit 'Initial' *`
% ls -a
./    ../   .dvn/
% echo "foo" > a
% dvn commit 'Add a' a  
Commit 2016-01-16T16:16:58+0900: Add a
% tree -a .dvn        
.dvn
└── 2016-01-16T16:16:58+0900
    ├── .dvn.metadata
    └── a

1 directory, 2 files
% echo "bar" >> a
% dvn commit 'Update a' a
Commit 2016-01-16T16:17:20+0900: Update a
% dvn log
2016-01-16T16:16:58+0900: Add a
2016-01-16T16:17:20+0900: Update a
% tree -a .dvn           
.dvn
├── 2016-01-16T16:16:58+0900
│   ├── .dvn.metadata
│   └── a
└── 2016-01-16T16:17:20+0900
    ├── .dvn.metadata
    └── a

2 directories, 4 files
% colordiff -r -u .dvn/2016-01-16T16:16:58+0900 .dvn/2016-01-16T16:17:20+0900 
diff -r -u .dvn/2016-01-16T16:16:58+0900/.dvn.metadata .dvn/2016-01-16T16:17:20+0900/.dvn.metadata
--- .dvn/2016-01-16T16:16:58+0900/.dvn.metadata 2016-01-16 16:16:58.000000000 +0900
+++ .dvn/2016-01-16T16:17:20+0900/.dvn.metadata 2016-01-16 16:17:20.000000000 +0900
@@ -1 +1 @@
-Add a
\ No newline at end of file
+Update a
\ No newline at end of file
diff -r -u .dvn/2016-01-16T16:16:58+0900/a .dvn/2016-01-16T16:17:20+0900/a
--- .dvn/2016-01-16T16:16:58+0900/a     2016-01-16 16:16:58.000000000 +0900
+++ .dvn/2016-01-16T16:17:20+0900/a     2016-01-16 16:17:20.000000000 +0900
@@ -1 +1,2 @@
 foo
+bar

Let's Encryptとnginxでお金をかけずにHTTP/2サーバを立てる話を書いた

最近話題のLet's Encryptを使って無料でSSL証明書を取得し、最近のnginxでHTTP/2サーバを立てる話を書きました。ピクシブ株式会社 Advent Calendar 10日目の記事です。

inside.pixiv.net

この記事を書いた経緯

皆さんはWebサービスで一発当てたいと考えたことはないでしょうか。私はあります。Webサービスで一発当てるためには、もちろんアイディアも重要ですがサービスの信頼性も大切です。今時、HTTPSで暗号化されていなかったり、オレオレ証明書HTTPS通信を実現しているページに誰が個人情報を入力しますか?HTTPSに対応するには、証明書を買う必要があり、どんなに安くても年間3000円くらいはします。

いいドメインを取ろうとして、イケてる横文字のgTLDで取ろうとするとだいたい年間の維持費が高いです。公開したWebサービスが軌道に乗り始め、それで1年で3000円とドメイン代以上儲けることができればいいでしょう。しかし、大失敗したときはどうでしょう。大損です。

革新的なシステムを持ったLet's Encryptはなんと無料でドメイン認証(DV)証明書を得ることができます。最高の証明書を無料で得て、どんどん小金を稼ぎましょう。

技術ブログ作った

http://itochan.hatenablog.com/ は技術の話を書きます。 http://itochan.hateblo.jp/ は技術以外の話を書きます。