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

職業プログラマの休日出勤

職業プログラマによる日曜自宅プログラミングの成果たち。と言いつつも最近は公開できる成果が少なくてお悩み中。リアル休日出勤が発生すると更新が滞りがちになる。記事の内容は個人の意見であり、所属している(いた)組織の意見ではない。

v6喋る串

パソコン・インターネット

「これからはIPv6の時代だ!」そんなふうに考えていた時期が筆者にもありました。確か2005年頃の話だったかと思います。

それから10数年の時が流れ、世の中は未だにIPv4だらけです。人生の進捗もダメなままです。
そんな折、某所でIPv6の需要が急激に高まってきたので、久し振りにIPv6と戯れてみました。

今回のお題は「v6喋る串」、平たく言えば「IPv4だけ喋るクライアントからの HTTP Request を、IPv6な HTTP Server へ送るプロクシ」です。こんなものの需要はほとんど無いでしょうけれども、手元の環境はIPv4の回線しか無いけどIPv6での接続確認も取りたい!という検証用には非常に有用でしょう。

IPv6 アドレスを容易に獲得できるインフラ

AWSでのIPv6サポートは(本記事執筆時点では)限定的なものであり、EC2のサーバに直接IPv6アドレスを割り付けることはできないようです。今回の検証にはAWSを使うことはできません。
AWSに匹敵するほど我々に身近なサーバ屋さんの中でIPv6対応を謳っているのは、さくらインターネットさんの「さくらのVPS」と「さくらのクラウド」です。今回はこれらのお世話になりつつ実験を進めたいと思います。

この記事では さくらのVPSさくらのクラウド の両方を使っていますが、おそらく片方だけを2環境用意するという方法でも上手く行くでしょう。
「どちらを使ったら良いの?」という方には、ただ単に実験するだけなら さくらのクラウド の方がオススメです。長期的に使い続けて、かつ、負荷の程度が見えている状況なら さくらのVPS の方が良いでしょう。クラウドの方はクレカ必須であるように見えるので、持っていないという方はご注意を。さくらのクラウド の場合は後述の「ルーター+スイッチ」が最低でも3500円程度/月・1ネットワーク、VPSの場合は初期費用が1600円程度/月・1台 かかるので、いずれにせよ実験するために5000円くらい使うことになります。

筆者が用意した環境

IPv4 / IPv6 両方喋る HTTP Server : Debian

Apacheのセットアップ

たぶん sudo apt-get install apache2 とかやれば、Apacheは入るでしょう。
とりあえず、インストールした後にアクセスして、テスト用ページが表示されることと、アクセスログが吐かれることを確認しましょう。アクセスログは、後でIPv6のアクセスを受け付けるようになったときに、接続確認にも使います。今はIPv4でのアクセスログが吐かれていることでしょう。

eth0 で IPv6 を有効に

さくらのVPS のコンパネにアクセスすると、

を教えてくれるので、その情報を /etc/network/interfaces に書き込み、サーバ再起動します(恐らく、ネットワーク関係のサービスだけ再起動しても有効なはずだけど、調べるのが面倒臭くてサーバ再起動してましたw)。
詳しい書き方や動作検証の方法などは、こんな解説もあるので参考にしましょう。

さくらVPS で IPv6 アドレスを Debian 7 wheezy に設定する – ymyzk’s blog

ip6tables

基本的な考え方は通常のIPv4での iptables と同じです。ですが、IPv4 で効いていた設定が効かなかったり、指定したらエラーを吐いて設定を食ってくれないということが非常に多くありました。今回の検証の中で、筆者が最も時間を費やしてしまったのはこの部分です。
最終的にはこんな設定を /etc/iptables/rules.v6 に書き込みましたが、まだザルだらけなので改善の余地は大いにあります。

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:LOG_PINGDEATH - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -m limit --limit 1/sec -j LOG --log-prefix "[IPTABLES6 FORWARD] : "
-A FORWARD -j DROP
-A OUTPUT -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
-A OUTPUT -p udp -m multiport --sports 135,137,138,139,445 -j DROP
COMMIT

どうも -m のオプションが機能していないような感覚がありますが、裏づけまでは取れていません。

こうやって書いた設定を有効にするにはroot権限で netfilter-persistent reload を実行していました(Debianです)。実行後、反映されるまでには数秒〜10秒程度の遅延がありました。

DNS設定

構築したHTTPサーバはIPv4アドレスとIPv6アドレスの両方がありますので、両方ともドメインのAレコード、AAAAレコードとしてDNSサーバに設定しましょう。


これで、IPv4 / IPv6 の両方で接続を受け付ける HTTP Server が完成したはずです。
以下の串の動作確認を効率的に行うべく、アクセスログを監視しておきましょう。tail -fなどで。

さて、さくらのクラウドのお世話になりながら、串をセットアップしていきましょう。冒頭に記載しました通り、Ubuntu 16.04 を使っています。

さくらのクラウドIPv6を使うためのテクニック

実は、さくらのクラウドで立てるサーバを単体で使っても、IPv6アドレスを獲得することはできません。
ルーター+スイッチ」を設置し、そこでIPv6を有効にし、その状態でサーバを新設してルーター+スイッチに接続させる必要があります。

このとき、サーバを共有セグメントで立ち上げた後でルーター+スイッチに接続しようとすると、IP(v4, v6)アドレスがDHCP的な仕組みではなくて静的にOS内に設定されていることから、後でそれを書き換えるための手間が増えます。サーバ起動よりも先にルーター+スイッチを用意しておくことで、少なくともIPv4アドレスについては何もしなくて良くなります。

IPv6を有効にするには、/etc/network/interfaces に以下の内容を追記し、サーバ再起動します(これも恐らく、ネットワーク関連のサービスの再起動だけでも行けるはず)。

iface eth0 inet6 static
address 2401:2500:***(ヒミツ)***
netmask 64
gateway fe80::1

ここで address の値は、ルーター+スイッチの詳細情報「IPv6割当可能範囲」を参考にして、他のサーバと衝突しないように自分で勝手に付けます。

Squid の設定

root権限で apt-get install squid みたいなコマンドを打てば、squid をインストールすることができます。
設定ファイルは /etc/squid/squid.conf に置いてあるので、バックアップを取った上で編集し、

acl theowner src ${自分のIPv4アドレス}/32
http_access allow theowner

という設定を先頭の方に差し込みましょう。設定ファイルの下の方に http_access deny all という一節がありますが、恐らくここよりも上に書いていれば良いのでしょう(下に書くことを検証してはいません)。best-practiceとしては、別のファイルに設定を書いておき、それをincludeして使う形が望ましいですが、ちょっと検証するだけのサーバならどうでもいいでしょう。

ip6tables

前述の、Debianで設定した時と考え方は同じです。
(ですが、筆者はここで 座流・咳百合亭 という大技を繰り出しましたとさ…orz)
長期的に設置したり、大事な情報を置いたりすることになるサーバなら、きちんと設定しましょう。v4に関しては さくらのクラウド のパケットフィルタ機能で制御できるようです。

Outgoing の IPv4 を殺す

恐らく、ここまでの手順を踏むだけで HTTP Proxy サーバとしては十分に機能するはずです。
お手元のブラウザまたはOSのプロクシ設定を、ここで建てた串に向けます。
(※squidのデフォルトポートは 3128 です)
この状態で、冒頭で建てたHTTPサーバへアクセスすると、きちんと IPv6 でのアクセスが記録されます。良かったですね!

実は、squid がプロクシとして動作するとき、IPv6IPv4の両方で HTTP Server にアクセスできるのならば、IPv6 を優先して使うという挙動を取ります。
[squid-users] Outgoing IPv6 address with no IPv4 address accessSquidメーリングリストに、2015年に投稿されている情報)
IPv6で HTTP Server に接続することが目的なら、この挙動を信じて、これ以上作業をする必要はありません。
もしも「IPv6でなければエラーにしたい」のであれば、iptablesをいじって、串からの outgoing の HTTP(S) のパケットを破棄すれば良いでしょう。iptablesの設定で「DROP」だとやたら待たされるでしょうから「REJECT」が良いでしょう。

参考図書

マスタリングTCP/IP IPv6編 第2版

マスタリングTCP/IP IPv6編 第2版

IPv6 エッセンシャルズ 第2版

IPv6 エッセンシャルズ 第2版

IPv6教科書 (インプレス標準教科書シリーズ)

IPv6教科書 (インプレス標準教科書シリーズ)

IPv6の本って、ちょっと古いのが多い気がしますが、理論を学ぶ上ではそれほど問題は無いでしょう。

さいごに

この記事の内容を応用すれば「IPv4しか喋れない HTTP Server に、IPv6しか喋れないクライアントからのリクエストを連携してあげるリバースプロクシ」も作ることができるでしょう。お試しあれ。
これから来るかもしれない IPv6 の時代、一足お先に慣れておき、数年後に楽をしようではありませんか。

麻疹風疹(MR)混合ワクチンの接種

その他

8月に麻疹(はしか)日本国内発生のニュースが流れてきて、その後も発症例が増加しているという話を受けて、麻疹・風疹混合ワクチン(MRワクチン)の接種を受けてきた。



ワクチン接種を受ける意義

何故受けた方が良いか?について筆者が適当に語るコーナー。


基本的にはこういう思考である。

世代的な話

1977年4月2日~1990年4月1日に生まれた世代は1回接種法であり、キャッチアップキャンペーン非対象だった。免疫がついていない可能性が高く、最も感染の危険が高い年代。

https://ja.wikipedia.org/wiki/%E9%BA%BB%E7%96%B9#.E4.BA.88.E9.98.B2

ヤバそうである。

事業継続計画(BCP

筆者の勤め先においても 1977年度〜1989年度生まれ の人は非常に多く、麻疹の大規模な流行があれば従業員の健康のみでなく、事業継続そのものが脅かされることも考えられる。


リモートワークが整備されていたとしても、潜伏期間が長い、かつ、潜伏期間でも感染力のある伝染病 という存在には弱い、という話はおそらく正しい。だけど整備されていないよりは整備されている方が良いに決まっている。伝染病への合理的な対策というのは打っておくに越したことはない。

筆者の業務の一つであるサーバ管理、こういう仕事は、誰か一人以上の人間が活動できる状態であることが強く求められる。そんな中でサーバ管理者全員が麻疹で倒れたりしたら、鯖缶本人やその家族たちだけでなく事業も傾く。怖い話だ。



ワクチン接種を受けるための活動

冒頭に掲げたtweetをした9月1日より、接種についての情報を集め始めた。しかし、接種の情報の多くは子供達(の保護者)に向けたものであり、成人が接種を受けることを主目的にした情報はほとんど手に入らなかった。接種実施の病院の一覧も、簡単には手に入らないようである(筆者は結局入手することができなかった)。

やっぱり接種を受けるのは無理なのだろうか?と思いながら、数年前に一度お世話になった内科の先生のWebサイトを見てみると、そこにはMRワクチン接種をやっていることが明記されていたため、電話で問合せた。予約も予想外にすんなりと取ることができた(9月5日時点)。
電話で喋った感じだと、医院では通常は在庫を持たず、予約を受けてから業者さんから仕入れるような感じだった。電話問い合わせから接種までの間には数営業日を空ける必要があった。

そして予約していた日に病院に行くと…、なんと接種を見送りされてしまった。理由は筆者自身の風邪。自分では大丈夫なつもりだったが、先生の判断だから仕方がない。
通常の手当てを受けてから数日が経過した今日、無事に接種を受けることができた。費用は1万円とちょっとくらいだった。

これから受ける皆さんへ

筆者が接種を受けた病院の先生曰く

  • 卸売りの業者さんのところにも、そんなに在庫は残ってないし、入ってこないようである
  • ワクチンは病原体を培養して製造されるという性質から、いきなり増産できるようなものではない
  • 病院への問い合わせは増えてきている

という話だったので、今年中の接種は難しいかもしれない。健闘を祈る。

CloudWatch Logs のログを華麗に読む CWLReader を公開

AWS パソコン・インターネット

CWLReader という小さなソフトウェアを公開しました。

github.com

解決しようとした課題

AWS でいろいろ運用している皆さんの多くは、各種ログを CloudWatch Logs へ溜め込んでいることでしょう。
ログの内容に不審な点があれば通知を投げるといった仕組みも一緒に設けられていることが多いと思いますが、特に立ち上げ間もないシステムの場合は、人力で全てのエラーログに目を通すことは重要です。何故なら、どういったログがどのように出ていれば通知を投げれば良いのかという知見が蓄積されていないからです。

そこでログを見る訳ですが、公式の CloudWatch Logs のツールだと、「どこまで読んだ」という情報が管理されないため、全てのログを漏れなく見るためには、自分でその情報を管理する必要があります。

CWLReader の特徴

  • ログを見る権限だけの IAM ユーザを用意し、そのキーを使ってログを取得できる
  • IAM ユーザのキーは、ブラウザの LocalStorage で管理される
  • 「どこまで読んだ」の情報は、LogGroup ごとに、これも LocalStorage で管理される
  • ログの続きを読もうとするとき、前回の「どこまで読んだ」の情報に基づいて続きからロードできる
  • ファイル1個で稼働する
    • file:// で読ませることも可能だけど、これは LocalStorage の内容を他のスクリプトに読まれる危険性があるのでオススメはできない

さいごに

何かお気付きの点などございましたら、issue を上げて頂きますと嬉しいです。
英語書くのしんどいよ〜という方は、Twitterで連絡下さい(ブロックしてたらゴメンなさい)。

第24回 #シェル芸 勉強会に参加してきました

パソコン・インターネット シェル

タイトルの通りです。今回も大阪サテライトに参加しました。

本家
usptomo.doorkeeper.jp

大阪サテライト
atnd.org

Togetterまとめ
togetter.com

問題 【問題のみ】第24回◯◯o◯裏番組シェル芸勉強会 – 上田ブログ
問題+解答例 【問題と解答】第24回◯◯o◯裏番組シェル芸勉強会 – 上田ブログ

この日の自分の tweet T.Motooka(@t_motooka)/2016年08月27日 - Twilog
シェル芸とは無関係の発言も含んでいるとは言え、149tweetsもしており、不健全な感じがします。

午前中の学び




休日平日休日の並びを出すやつ。これは綺麗。


これ怖い

Q1

環境構築、しっかりやりましょう。

Q2

結局、解けなかった…orz

環境構築、しっかりやりましょう。

Q3

まわりのみんなのコードの方が簡潔でした。

Q4

Excelファイルを解凍(死語らしい)してXMLを読むの、ワクワクしますよね。

Q5

簡単な方だけ解けました。

これは美しい。


これ、途中の

echo 2 | paste <(echo x =) - | cat - Q5

までを実行すると、先頭に「x = 2」という代入文の行が挿入された形になります。bc が代入文を解釈してくれるというのは初めて知りました。

Q6

日本語環境の関係でとけず。

Q7

何もtweetしてなかったようです。運営業務関係かな?

Q8

grepを重ねる発想、競プロの問題を解いているときのような感覚でした。

改良版。0から始める必要は無いですね。

後半は、解説を聞いてから、見よう見まねで書きました。自力じゃないです。 <(command) がすらっと書けるようにならないといけないですね。


LT

しゃべりました。ヒ☆ミ☆ツ な内容が多いので、アップできてるスライドはショボいです。すみません。。
speakerdeck.com

さいごに

運営および参加の皆様、ありがとうございました!

多言語・翻訳ナイトに参加してきました

えいご その他

多言語・翻訳ナイト Vol.3 に参加してきました。

polyglots.doorkeeper.jp

どうやって勉強会の存在を知ったのか

近畿地区の勉強会情報を収集して配信してくれているbot @atnd_kinki の配信で知りました。

自分と多言語

過去には日英韓の3ヶ国語対応のWebアプリを開発・運営していました。韓国語は翻訳者のご協力を頂きながらの対応でしたが。
現在でも日英2言語対応しているアプリは自分で翻訳して実装、運営までやっています。
本格的に多言語対応をやっておられる方からみればヒヨっ子みたいなもんですが、多言語対応には関係がありますし、興味もあります。

多言語関連で自分が最近興味を持っていたのは、こんな話題です。

  • 自分が知らない言語への翻訳の運用ノウハウ(翻訳者さんへ翻訳を依頼するためのノウハウ)
  • コンテンツ(ブログ記事など)の翻訳を実施した際の、コンテンツ管理ノウハウ

こういう話も聞けたらいいなー、と考えながら参加しました。もちろん聞くことができてますし、それ以上の知見が得られました。

お聞きした話(抜粋)

  • 行政が出す文書の翻訳の難しさ
    • 更新が滞る問題
    • 偉い人たちが自動翻訳で満足してしまう問題
    • 災害などの緊急情報の伝達の難しさ
    • 2020年のオリンピックに向けた課題
  • ビジネス向けのオンライン翻訳サービス YarakuZen の話
    • 訳語の統一に気を使いながら翻訳をするときに、とても便利そう
  • 翻訳業務のクラウドソーシング Conyac の話
    • チームを組んでもらって大人数で翻訳みたいなことも可能らしい。すごい。
  • WordPress の多言語化用プラグイン Bogo の話
    • RDBのデータ管理に関する話も飛び出してきて、かなり興味深い話だった。
  • ロケール/言語と国旗の問題
  • 日本語の難しさ:統計的アプローチが取りづらい

さいごに

主催の多言語団の皆様、参加された皆様、会場の JUSO Coworking さん、ありがとうございました!

おまけ:ぼやき

「 n ヶ国語」(n>=2)という日本語の表現からは、1言語1カ国みたいな過去の認識が垣間見えますね。
実際には1つの言語が複数の国で使われていたり(例:英語)、1つの国で複数の言語が公用語になっていたり(例:スイス)するので、あまり現実に沿った表現ではないという気がします。
言葉狩り(他の方が書かれている文章に文句をつけること)をするつもりはありませんが、自分が書く文章からは無くしていこうかな、ともうっすら考えたりしてます。この記事では使っていますが。

おまけ:ネタ

日中韓をはじめ、世界中で見つかる間違い英語を投稿して共有するためのサイトがあります。
www.engrish.com
かなり笑える内容なのですが、自分が作ったものが載ると思うと、なかなかつらいものがあります。
世界へ笑いを提供できるのなら、まあそれも一興ですが。

ひとまずは、載らないように 頑張ろう! #一句

名古屋のSVGイベントに参加してきました

SVG デザイン

名古屋の Web 界隈の集まりである WCAN(ダブキャン と読むそうです)主催のイベント、WCAN mini 2016 Vol.2 SVG Maniax in NAGOYA に参加してきました。

wcan.jp

これまで、SVGのオンラインのイベントには何度か参加していました。

ですが、オフラインでのイベントは非常に珍しいものです。新幹線に乗ってでも名古屋へ行く価値はありました。

得られた知見の数々

Togetterにまとまっているので、こちらを見られるのが良いでしょう。
togetter.com

自分で喋った内容

こんな内容で喋りました。

speakerdeck.com

このとき、デモで使った花火のSVGのソースは、こちらです。

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 400 400">
	<rect fill="#000000" x="0" y="0" width="400" height="400"/>
	<defs>
		<g id="particle1">
			<rect x="196" y="90" width="8" height="20" fill="#c06090"/>
			<rect x="196" y="60" width="8" height="20" fill="#ff9030"/>
		</g>
		<g id="group1">
			<use xlink:href="#particle1" transform="rotate(0 200 200)"/>
			<use xlink:href="#particle1" transform="rotate(10 200 200)"/>
			<use xlink:href="#particle1" transform="rotate(20 200 200)"/>
			<use xlink:href="#particle1" transform="rotate(30 200 200)"/>
			<use xlink:href="#particle1" transform="rotate(40 200 200)"/>
			<use xlink:href="#particle1" transform="rotate(50 200 200)"/>
			<use xlink:href="#particle1" transform="rotate(60 200 200)"/>
			<use xlink:href="#particle1" transform="rotate(70 200 200)"/>
			<use xlink:href="#particle1" transform="rotate(80 200 200)"/>
		</g>
	</defs>
	<g>
		<use xlink:href="#group1" transform="rotate(0 200 200)"/>
		<use xlink:href="#group1" transform="rotate(90 200 200)"/>
		<use xlink:href="#group1" transform="rotate(180 200 200)"/>
		<use xlink:href="#group1" transform="rotate(270 200 200)"/>
	</g>
</svg>

このソースを拡張子 .svg で保存し、Webブラウザに読み込ませると、スライド中に登場する花火のイラストが表示されるはずです。
(スライド中に登場する画像は blur などのフィルタをかけていますが、下のソースでは省略しています。)
この画像は、時計の12時の部分にいる破片を時計回りに90度分だけコピーし、その90度の扇型のものを4つ並べて円形にしています。

ここで、保存したSVGのソースの <g id="particle1"> の子要素をいじくると、花火全体の見栄えが変わると思います。たった1箇所を変えるだけで全体が変わるのです!
みなさんもぜひ <use> 要素を活用していって下さい。

もちろん、SVG そのものも楽しく使っていきましょう!

さいごに

運営してくださっているWCANの皆様、セッションやLTで講演された皆様、そして当日参加された皆様、ありがとうございました!

参考図書

SVG Essentials

SVG Essentials

※英語です

Let's letsencrypt

Apacheとその周辺 パソコン・インターネット

もしかしたら今更…なのかもしれませんが、無償でSSL証明書を発行してくれるサービス Let's Encrypt を試してみました。

letsencrypt.org

特徴

  • 無償
  • 証明書の有効期限は3ヶ月程度。証明書を更新するタスクを定期自動実行することが推奨されている。revoke が突然走るかもしれないから、という背景もあるらしい。
  • 証明書の作り直しなどには回数制限がある。 https://letsencrypt.org/docs/rate-limits/
  • 多くのブラウザでは信頼されている(root証明書がインストールされている)、らしい。

試したかったこと

  • 簡単に導入できるのか?
  • 長期的な運用で困りそうなものは無いか?
  • 手元のブラウザで、本当に信頼されているのか?
  • ワイルドカード証明書、または SANs のある証明書を作ることができるのか?

Let's Encrypt の仕組み

このページを読むのが一番。英語ですけど。
letsencrypt.org

要は、Let's Encrypt のサーバと通信するクライアントが何かしら必要、ということです。
そのクライアントにも様々なものが存在するようですが、公式に推奨されているものとしてcertbotがあります。以下の 試してみた は全て、certbotを使ったものになります。

試した環境

Amazon Linux で試してみた

certbotのインストール手順の中には Amazon Linux は登場しません。
CentOS/RHEL6 に沿って作業をすると、「Amazon Linux は未だサポートしてないから --debug オプションつけて作業してや」みたいなメッセージが表示されます。
--debug オプションをつけて作業をしようとしましたが、面倒臭くなって途中で匙を投げてしまいました。

Ubuntu で試してみた

すんなり。
事前の Virtual Host の設定がキレイにできていれば、SANs も楽勝でした。

Debian で試してみた

手順の中にある $ sudo apt-get install python-certbot-apache -t jessie-backports が、一部の環境で上手くいきませんでした。
「jessie-backportsなんか知らんわ」といったメッセージでした。
ググったところ、こんなページが出ました。https://community.letsencrypt.org/t/unable-to-install-certbot/17916/11
ここのリンク先、https://backports.debian.org/Instructions/ の指示に従って jessie-backports を有効にしたら、あとは上手くいきました。

まとめと、今後の課題

  • 現時点では、Amazon Linux で使うのは大変そう
  • UbuntuDebian なら簡単そう
  • 長期運用について差し迫った問題は特に見当たらなかった
  • 自動更新の仕組みがコケたことを検知する仕組みは、用意しておくと安心かも
  • ブラウザ対応は、パッと見、問題なさそう
  • SANs 一手間かかるけどイケる
  • ワイルドカードは、今はサポートしてないっぽい:https://letsencrypt.org/docs/faq/

参考図書

本件を試すにあたって買ったりした訳ではないですが、オススメです。

暗号技術入門 第3版 秘密の国のアリス

暗号技術入門 第3版 秘密の国のアリス

マスタリングTCP/IP SSL/TLS編

マスタリングTCP/IP SSL/TLS編

さぁ、PDF手書きの世界へ。

PHP Apacheとその周辺 パソコン・インターネット デザイン

PDFに関して様々な処理を行うためのプログラム pdftk をWebブラウザから呼び出すことができるように、pdftk wrapper という単純なツールを作って公開しました。

github.com

何のために作ったのか?

PDFはテキストではなくてバイナリのファイル。そう認識されている方は多いと思います。私もそうでした。
ところが、PDFのファイルをテキストエディタで開いてみると、どうでしょう? なにやら人間に読める文字がたくさん出てきませんか?
人間に読める文字が多いのなら、テキストエディタでPDFを作ることだって頑張ればできるはずです。
便宜上、テキストエディタでPDFを書くことを「PDF手書き」と呼んでいます。

様々なものを表現することができる、このPDFというファイルを、自分の手で心を込めてイチから組み上げていくという行為、とてもワクワクしてきませんか?
そう思われた貴方は、もう立派なPDF手書き職人です。早速学習を進めていきましょう。

学習を進めていくと、PDFの主要な部分は人間に読める文字だけれども最後あと一歩のところでバイナリを入力したり、相互参照テーブルという、データベースで言うところのインデックスみたいな情報を持たせるところで膨大な機械的作業が必要になることに気がつきます。
そんなときにお世話になるのが pdftk というツールです。

www.pdflabs.com

このツールに、「あと一歩のところだけどもまだ完成じゃない」PDFを与えると、必要な情報を付加したり整理整頓したりして、良い感じにPDFを再構成してくれます。
もちろん他にも数多くの機能があるのですが、pdftk の紹介はこのへんにしておきましょう。
言いたいことは、pdftk はPDF手書きを趣味にしている人たちにとって、面倒臭い単純作業をきちっとこなしてくれる、大変心強い味方であるということです。

ところがこの pdftk は、Macにインストールするのがなかなか難しかったりします。私は途中で心が折れてしまいました。
そこで、Ubuntu のマシンにインストールしておいた pdftk をMacから操作できるようにしよう、そしてそれはブラウザから操作できるようにしよう、と思って、Webアプリ化しようと思い立ちました。

環境構築

冒頭に掲げた GitHub のページを見て下さい。日本語版が欲しいという人は何らかの手段で筆者に連絡を下さい。要望が多ければ日本語版も書きます。

使い方

インストールしたサイトの index.html にアクセスすると、ファイルのアップロードフォームが表示されますので、ここでアップロードします。すると、pdftkで処理した結果のファイルをダウンロードするためのURLが示されるので、そこにアクセスします。

このwrapperはブラウザから操作できますが、もちろん curl のようなコマンドからでも操作できます。どんなオプションを与えれば良いのかは、index.html を見れば、普段からcurlをお使いのみなさんにはわかるでしょう。

PDF手書きを趣味にしよう

こういう素晴らしい環境も整ってきたので、みなさんにとってもPDF手書きを趣味にする絶好のチャンスです!
やりたい!と思った人は、PDFのファイルフォーマットを学ぶために、次のような本を持っておくと良いでしょう。

PDF構造解説

PDF構造解説

私は、テキストエディタでPDFを読み書きするという行為は2009年頃から始めましたが、PDFの仕様書はとても膨大なものであり読む時間を作ることができず、「見よう見まね」で様々なことをやっていました。
そういう あやふや な知識のまま長い年月が流れましたが、この本に出会ってからは人生が変わりました。PDFの仕様を親切に解説してくれているのです。

原著(英語版)は、こちら。

PDF Explained

PDF Explained

PDF Explained

PDF Explained

原著にはKindle版もあります。
なお、普段から英語版を読まれている方についても、この本に関しては日本語版をお勧めします。その理由は、日本語版には日本語のフォントについての言及が書き加えられているからです。これは貴重な情報です。


それではみなさん、最高のPDF手書き生活をお過ごし下さい!!

イギリス遠征2016

音楽

イギリスへ行ってきた。
f:id:t_motooka:20160708112847j:plain

職業柄、海外へ旅行するのは至難の業である。

3月にはこのような発言をしている程だ。
休みを取ることができない訳ではない。筆者は実際にほぼ毎月2日間以上は休暇を取得している。決して、業界や勤務先がブラックであるという話ではない。(もちろん、参画しているプロジェクトの状態によっては、ブラックな環境に置かれることもあるだろうが)
飛行機に乗るという、インターネットに接続できない時間が長くなってしまうことこそが、海外旅行から我々サーバ管理者の足を遠ざけるのである。
最近では飛行中でもインターネット接続環境を得ることができる機体も徐々に普及してきているようであるが、それが十分に普及したとき、海外旅行への障壁は一段と下がるだろう。
今後の流れに期待したい。

行くことになった経緯

Manchesterマンチェスター)から車で30分ほど行ったところにあるMiddletonという街で活動している金管バンド Middleton Band が今年で創立140周年を迎えた。このバンドには在英の日本人が過去・現在に渡って何名か所属しており、「140周年の記念の演奏会に、日本からバンドを連れて来ないか?」という話が彼ら(過去に Middleton Band に所属していた日本人)のところへ持ちかけられた。それを受けて、Neo Brass Band としてイギリスへ遠征することとなった。
雑な言い方をすると、「対バン」しに行ったということになる。

移動

今回は、Finnairのお世話になり、フィンランドヘルシンキ経由でManchesterへ向かった。

結果的には、無事に布団から出ることができ、飛行機に乗ることができた。

フィンランド語は何一つわからないが、英語があっさりと通じるのは非常に心強い。

時差ボケ

サーバ管理者という職業柄、普段見る時計はJST日本標準時)よりもUTC協定世界時)の方が圧倒的に多い。
イギリスではサマータイムがあるため、実際の時計は UTC+1(もしかしたらGMT+1かも)であるが、普段見慣れた時間帯に近いものであるから、JSTとの時差もほぼ全て即答だ。
感覚という意味でのボケはほとんど無い。
一般的な意味での、睡眠サイクルという意味での時差ボケも、問題にはならなかった。夜更かしするのと同じである。

観光

見知らぬ土地に行ったときに観光する場所というと名所旧跡になるだろうが、筆者の場合は人混みがつらいため一般的な名所旧跡には行かない。普段は書店と Apple Store に行くことにしている。今回も例外ではない。
f:id:t_motooka:20160708124553j:plain
「biggest bookstore in Manchester」というキーワードでググると、 Waterstones という書店がトップに表示されたので行ってみた。
Bookshop in Manchester - Deansgate | Waterstones
実際に行ってみると、(日本語で言うところの)1階から3階までが売り場になっており、それなりの規模で営業されていた。興味深い本をいくつか見つけたため、実際に購入した。これらの書籍は当然のことながらアマゾンでも買うことができるのだが、その書籍を見つけることができた場所で、その場の勢いで買ってしまうことは重要だと思う。もちろん、あまりに厚かったり重かったりする本はKindleでの購入を考える。

Apple Store には、旅の終盤で立ち寄った。ポンド安の影響でポンドを沢山持ってしまったので、使い切りたいという意図もあって、現地で iPad mini 4 を買った。

食事

f:id:t_motooka:20160707190244j:plain
Manchesterに到着したその日の夕食。きちんとマヨ抜きで作ってもらえた。うまい。


f:id:t_motooka:20160708064453j:plain
到着翌日の、ホテルでの朝食。いわゆるバイキング方式。これとパンを食べた。うまい。


f:id:t_motooka:20160708140401j:plain
観光しているときの昼食。Arndaleというショッピングモールのフードコートに入っているイタリア料理店のもの。ピザとラザニアとガーリックトーストとポテトのセット。大きさ比較のためのものを撮影していないが、かなりの量がある。うまい。


どれもうまい。誰だ、イギリスのメシはマズいとか言ってるのは。

演奏

ただひたすら、Middleton Band の人たちすげーという想いが募っていった。
もちろん、日本から参加した人たちも凄い人たちばかりで、こちらも良い演奏ができた。

先方のコルネット奏者の中にはハイノート大好きな人が居たので、打ち上げで喋っている間に Cat Anderson の話題を出したら、かなり盛り上がった。こういう動画を見まくったら高い音もバッチリ鳴らせるはずだよね〜という感じで意気投合していた。
youtu.be
良い打ち上げだった。もっと喋りたかった。

いろんな商品

A02 地球の歩き方 イギリス 2016~2017 (地球の歩き方A02)

A02 地球の歩き方 イギリス 2016~2017 (地球の歩き方A02)

今回の旅行に先立って、一応買ってみた。Manchesterという意味ではあまり役に立たなかったけど、国全体の文化を知る意味では、事前に読んでおいて良かったかなと思う。イギリス国内をいろいろ巡ったり、ロンドンに立ち寄ったりするんだったら、かなり役に立つはず。


筆者がこれを買ったのは2012年にAustraliaへ行ったときのものであるが、こういう装備は何かと役に立つ。もちろん使い方を誤ればスリに遭う危険性が高まるので気を付けたいところ。

さいごに

日本暑すぎ。

エリントンと寿司

音楽 その他

先週末の話であるが、東京へ行ってきた。
目的は3つ。

本記事のタイトルはとても凄いことを言っている形になっているが、そこは気にしないで頂きたい。

演奏を聴く


この言葉は曲名なんだけど、演奏者から聴衆にかける言葉として最高にカッコ良い。

Ad lib on Nippon を生演奏で聴ける機会というのは、かなり貴重なものである。

何故かわからないけど、この記事を書いている今は Lost in Meditation が脳内でリピートされ続けている。

友人との飲み

友人が転職するということで、ちょっと飲みに行った。
「こういう事業に手を出していれば今頃は良い感じだったはずだよね」だとか「これからはこんな事業が当たるんだろうね」みたいな話も交わすことができて、非常に有意義であった。

寿司

日曜日の昼、俗に IT健保寿司 と呼ばれるお寿司屋さんへ行ってきた。予約したのは約2週間前であるが、まさか予約成功するとは思ってなかった。

健保寿司はいいぞ。

関西モバイルアプリ研究会 #関モバ 第12回 に参加

iOS(iPhone/iPad) 携帯・デジカメ

関西モバイルアプリ研究会(通称 関モバ)の第12回に参加してきました。

kanmoba.connpass.com

会場

今回のスポンサーは フリュー株式会社 様!
京都の七条あたりでございます。

発表した内容

speakerdeck.com
5分では話し足りないという感触でした。
需要がありそうであれば、また色んなところで続きの話をしたいなーと思います。

聞いてて気になった発表

他にもいろいろあるけど、書いてたら遅刻する…(汗

さいごに

フリューの皆さん、運営の皆さん、参加者の皆さんに感謝!

寝耳に水(物理)

その他

先週の話だが、シャワーの水が左耳に入ってほとんど聞こえなくなるという事件が発生した。
朝シャワーを浴びるときに耳に入り、よくある取り方(飛び跳ねる、etc)を試したものの取れず、諦めて出勤。
夜寝るときは水が入っている方の耳を下にして寝たものの取れず。
翌日夕方になっても取れなかったため耳鼻科の先生のお世話になった。

通常の取り方

「たぶんそうだろう」とは思っていたものの、通常の取り方

  • 水が入っている方の耳を下にして、飛び跳ねる
  • 水が入っている方の耳を下にして、頭を叩く
  • ティッシュを丸めて耳に入れる

などの手法は逆に有害であったり危険であったりするらしい。あまり長時間試す前に「これってヤバいのでは?」と気づくことができて良かった。

じゃあ、どういう取り方が家庭の医学として正しいのだろうか?と思って調べてみると、多くのサイトが次のサイトへリンクを貼っていた。きっとそれなりに効くのだろう。
www.surfersite.com
だが、自分には効かなかった。

「数時間待てば自然に蒸発する」という話もあるが、自分の場合は36時間程度経過しても蒸発しなかった。

耳に水が入っている間の聴こえ方

水が入っていると、次のような聴こえ方をした。

  • 音そのものは聞こえる
  • 言語である場合、言葉を言葉として認識できないくらい、ぼやけて聞こえる
  • 他方の耳は聞こえるため、そちらからの言語は認識できる
  • 何か音が鳴ったとき、その音がどの方向から鳴っているものなのかを認識できない
  • 水が入っている方の耳は、高音域がカットされたような音が聞こえる

まあ、それなりにつらかった。

触覚への影響

耳に水が入っている時間が長くなってくると、良くも悪くも慣れてきてしまう。
そうなると、「あれ? いま耳に水が入ってるんだっけ?」と不安になる。
そこで取る行動は、両手で両耳の耳たぶを触り、左右で聴こえ方を比較するというものだった。
水が入っている方の耳は、高い音が聴こえにくいという状況だったため、細かな毛が擦れて鳴る音は聴こえなかった。その結果、水の入った方の耳はツルツルの表面、他方の耳はフサフサの表面であるかのように触覚が反応したような気がした。もしかすると、聴覚は触覚を助けるような役割があるのかもしれない。

病院に行った結果

祝日明け、かつ、花粉症の季節という事情が重なって、耳鼻科は大混雑だった。


診察の順番が自分に回ってきて、耳鼻科の先生に診て頂いたところ、「あー、簡単に確認できるほど水が入ってるねー」、と。そりゃ蒸発もしない訳だ。
耳の中専用(?)の吸引機で吸引してもらったら、すぐに良くなった。

さいごに

耳に水が入ったままの状態だと、バイキンが繁殖していく危険性が考えられる。病院に行くべきだとネット上で多く言われていたし、自分も同意している。
みんなも、耳に水が入って取れなくなったら無理して頑張ったりせず、病院に行ったら良いと思う。

コルネットを買った

音楽

という訳で、コルネットを買った。文体は Splatoonの日本語公式Twitterアカウント 風のものだ。
こんなの。


これまで使用していた楽器

XO の CR-GBS というのを使っていた。2005年春に購入した。
その当時は Trumpet, Soprano Cornet, 細菅Tenor Trombone を演奏しており、いずれも軽く吹けるものばかりであった。その状況で B♭Cornet を買う必要に迫られたため、軽く吹けるものという選択しかすることができなかった。当時、京都・三条の某楽器店さんの店頭にあった Besson Soverign, Yamaha(モデル名忘れた), XO の3本のCornetの中では、XO のものが最も軽く吹くことができたのだ。

それから10年と少しが経過した現在、自分の体質のせいなのか、銀メッキがボロボロになって、そもそも演奏がつらいという状況に陥っていた。そんな折、YAMAHAさんの管楽器の値上げのニュースが流れてきた。買うならば値上げ前の価格で楽器店さんが仕入れた在庫が店頭に並んでいる今のうちのはずだ!ということで購入に踏み切った。

購入した楽器

YCR-8335 - Neo - ヤマハ株式会社
大阪の某楽器店さんにて購入した。

楽器店の試奏室で吹いてみた感触

  • 中低音域、特に中音域(Low-B♭〜Tuning-B♭の上のE♭くらいまで)は吹き易さ、音色の滑らかさ、音程、いずれも想像以上の良さだった
  • High-B♭の下のGを超えたあたりから、
    • 音の当たるポイントが狭すぎる(ちょっとでも違うピッチで吹こうとすると、音を外す)
    • 息が入らない

バンドの練習に持ち込んでみた感触

  • バンドのメンバーと楽器のメーカー揃えるの、やっぱり大事。
  • これまでの楽器は、自分の雑な吹き方が染み付いていたせいなのか、音が毛羽立つ(?)ことも多かったが、Neoではそんなことはほとんど無かった。(もちろん、自分が雑な吹き方を続けていれば、またダメな状態へ堕ちていくんだろうけど)
  • 強奏から弱奏へ一瞬で変化させたとき(subito p)、弱奏の音色が美しい。(上の項目と同じものかも)
  • Tuning-B♭の上の F# の音、めっちゃ高いかも。でもこれはトリガーで調整可能。
  • High-B♭前後の音域を吹いた時に試奏室で感じた問題は、特に感じなかった。ただ単にウォーミングアップが足らなかっただけだったのかもしれない。
  • 3番菅のスライドにトリガーが付いていることによって、「普段は」演奏し易い。ところが金管バンドのソロコルネットの楽譜では160BPMの四分休符だけでミュートの付け外しをする、みたいなことを求められることもある。そんな場面では、ミュートを外した直後の Low-C の演奏というものの難易度が極めて高い。今までの XO の楽器だと、3番菅のスライドを事前に伸ばした状態でミュートを外す動作をすれば良かったのだ。

最後に

総じて、買って良かったと思える楽器だ。
さあ、キミも管楽器沼へ!

関西モバイルアプリ研究会 #関モバ 第10回 に参加

携帯・デジカメ iOS(iPhone/iPad)

もう3日も前の話ですが、関西モバイルアプリ研究会(通称 関モバ)の第10回に参加してきました。

kanmoba.connpass.com

今回はネタを用意することができず、発表者ではなく聴衆としての参加です。
研究会の開催からブログ記事投稿まで日が空いているのは、諸事情によるものです。

会場までの道のり

前回のときのように新幹線で移動しなくちゃいけない、といった状況に陥ることもなく、平穏無事に会場である はてなさん のオフィスに到着することができました。

印象に残ったもの、いくつか。

  • KeynoteでのiOSアプリのプロトタイピング
    • グラフィックのコアがiOSと同じだから(イラレと比較して)再現度が高い、という話もある。
    • MagicMoveのアニメーションにより、画面遷移なんかも良い感じにできる。
    • 参考動画 WWDC 2014 Session 223 Prototyping: Fake It Till You Make It
  • UIデザイナとの協業(iOS
    • @IBDesignable
    • @IBInspectable
    • これら二つを活用してviewを作ると、デザイナさんに Interface Builder 触ってもらうときに便利。
    • 何でもかんでも作りゃいいという話、ではない。
  • 文書管理/文書作成系
    • モバイルアプリ開発に限った話じゃないけど、ここらへんで変な時間を消費しないためのノウハウというのも大事だなー、と聞いてて思った。

さいごに

毎度のことながら、会場を提供してくださっている、はてなさんに感謝!

IngressのSojournerが途絶えた

その他

凡ミスにより、タイトルの通りの状況になったので、報告致します。

Ingress やってない人向けにも一応解説

  • Ingressとは?:位置情報を使った陣取りゲームです。AndroidiOSで遊べます。https://www.ingress.com/
  • Sojournerとは?:Ingress上で取れる行動のうちのひとつ「ハック」(採掘)を、連続して何日間続けることができたか?で表彰されるものです。15日で銅メダル、30日で銀メダル、60日で金メダル、180日でプラチナ、360日でブラック。

現状

f:id:t_motooka:20160124083254p:plain
自分のプロフィール画面です。(累積の実績ではなく)現状を示す「NOW」のタブ、画面最下部の「Current Hacking Streak」が 0days になっていて、Sojournerが途絶えていることがわかります。
322days までは行ったのに。

なぜ途絶えさせてしまったのか?

土曜日。
朝起きて、ちょっとプログラム書いてから午後の勉強会に出席、夜からの懇親会にも出席。そして帰宅。
そんな一日を過ごしていたのですが、勉強会に行くまでの間は遅刻しかかっていたため活動できず。帰宅中は軽度の腹痛があったため活動できず。
GPS状態によっては自宅から届くポータルがあるものの、届くまで待っている間に寝落ち。

Sojournerを今まで続けてくる中での思い出話

2015年3月上旬にSojournerの制度が開始されました。筆者は当然のようにIngress活動を続けていたので360日くらい楽勝だ!と思っていました。ところが、322日に達するまでの間には危機も何回か訪れました。

45日目くらい

大病を患いました。大病とは言っても、仕事を5日間くらい休む程度のものです。当時はまだ自宅から届くポータルも無く、家から出るのも一苦労!!という状態でしたが、食料調達活動のついでに外出することはできたので、そのタイミングで活動してました。自宅から100mくらいのところにポータルがあったので、それに助けられた形です。

100日目くらい

2015年5月末に任天堂Wii U のゲーム「Splatoon」が発売されました。同業者や同僚の多くがイカになっていく中、筆者も少し遅れてSplatoonを購入しました。
何かを継続するにあたって、その対象物から別の物へと興味が移ってしまうということは非常に強力な敵です。大病に匹敵するほどのものなのです。
こういうゲームを購入すると外出しなくなるのですが、良くも悪くも、平日は仕事で、週末も仕事や音楽活動などで強制的に外出させられるのでSojournerは続きました。
そういえば、Splatoonが発売された頃から、Ingressのプレイヤー(エージェント)が減ったような気がします。みんなイカになってたんですかね?

110日目くらい

GPS状態によっては自宅から届くかもしれないポータル、が生えました。実際の自宅からポータルまでの距離はちょうど40mくらいです。
これで、再度大病を患っても大丈夫!という状態になりました。(もちろん病気になったら困るのですがw)

180日目

ついにプラチナメダルを入手することになりました。
そのときに、ここまでの出来事をブログ記事にしようかと思いましたが、忙殺されており断念。

それ以降

難なく続いていたはずなのですが、322日目にしてご覧の通りの状態です。


これからの動き

「毎日ハック」にとらわれずにIngressの世界を楽しみ続けていきたいと思います。

他に「継続」が表彰されるものの例

参考までに。

  • StackOverflow : 連続ログインで表彰されます。筆者は Enthusiast というタイトルを獲得しています。30日連続ログイン。
  • GitHub : 連続して貢献(コミット、issue報告など)した日数が掲載されます。

さいごに

何かを毎日継続するというのは、本当に大変なことなのです。