電柱日報

日々の由無し事

英語で敬語

大抵はトラブル対応(フォームサービスを利用したフィッシングに Abuse Report を出したり)だったりしますが,ここのところ仕事関係でちょこちょこと英文メールを書く機会があります。

なんとか意味は通じているとは思うものの,いかんせんネイティブでない悲しさで,知らず知らず失礼な表現になっていたりしないか心配になることが間々あります。

オープンソース関連で Issue を投げたりする際なども同じようなことは感じていましたが,特に職場の肩書でビジネスメールを出すとなれば尚更。

というわけで,以前メディアコスモス(岐阜市図書館)で借りた本を自分でも買って読んでます。

「感謝」「謝罪」「依頼」などの8つカテゴリそれぞれにビジネスシーンで使えそうな表現が10パターン前後ずつ,対話形式の用例やニュアンスを含めた解説などでわかりやすく解説されています。

これはこれでシチュエーションを選ぶものもあるようですが,「お手数をおかけしますが」的な英語表現とか,読んでて面白かったです。

カラー版 英語の敬語[改訂版]

カラー版 英語の敬語[改訂版]

「Guilty Gear」20周年

Twitterのタイムラインに流れてきた1件のTweet

PSで発売された格闘ゲームの「Guilty Gear」(初代)が発売されて今日で丸20年になるようです。

この「Guilty Gear」,アークシステムワークスにとって初の本格的な2D格闘ゲームということで色々と大味な部分はあったものの,キビキビとした操作感とキャラの魅力で大いに楽しませてもらいました。初代はアーケード展開のない家庭用機専用だったこともあり,その大味さも仲間内でやる分には返ってネタとして笑い飛ばせるプラス要素になっていたように思います。

発売前は完全にノーマークだったのですが,雑誌の付録に付いていた2キャラしか使えない体験版の出来が予想外に良いもので,製品版が発売されてからは仲間内での対戦に飽き足らず京都で開かれた大会にも参加。さらにそこで知り合った面々と関西方面でオフ会(この響きがすでに懐かしい)を開くようになり,その頃の中心メンバーとは今でも付き合いがあります。

個人サイトで自作のBBSやコンボ集,用語集といったCGIを公開したり,その個人サイトを通じて知り合った米国在住のプレイヤーさん宅まで対戦しに行ったりと,20代前半から中盤にかけて,まだ色々な方面に向けた熱量を抱え込んでいた時期の思い出深いゲームであります。

というか,そのオフ会メンバーの1人が今のカミさんだったりしますんで,ある意味「人生を変えた」と言っても過言ではない作品でしょう。

片や当時岐阜在住の社会人2年生,片や和歌山在住の高校生という取り合わせは,こんなことでもない限り絶対に結ばれることのなかった縁だと思うと,石渡氏をはじめとした製作陣には感謝の言葉もありません。*1

*1:ちなみに,自分たちの他にもう1組,同じオフ会メンバー内で結婚にこぎつけたカップルがおります。

プログラミング遍歴と Crystal

BASICを齧った小・中学期

以前も書いたような気もしますが,自分のプログラミング経験は小学生の頃MSX-BASICから始まりました。

当時,両親はゲームしかできないファミコンは買ってくれませんでしたが,曲がりなりにも「パソコン」という看板を背負っていたMSX2であれば買ってくれるというので,当時発売されたばかりの「FS-A1」を買ってもらいました。

当時はプログラミングがしたかったわけではなく,ファミコンほどではないもののMSX向けに発売されていたゲームがやりたかっただけでして,「ドラゴンクエスト1」などはファミコン版ではなくMSX版をクリアしたクチです。その後,外付けのフロッピードライブを買ってもらい「Wizardry」や「Ys」などのゲームを楽しんでいたのですが,いかんせん小・中学生のお小遣いでは新しいゲームは年に1本買えるかどうかというところです。

いろんなゲームで遊びたい,しかし何本も買うようなお金はない,という中でゲーム情報を仕入れる為に買っていたMSX FAN誌に投稿プログラムのコーナーがあることに気がつきます。プログラムのことはよくわかりませんでしたが,写経のように20行ちょいのプログラムを誌面の通りに打ち込めば*1ちょっとしたゲームで遊べるというのは,お金のない当時の自分には福音だったのだと思います。やがて,よくわからないなりに「この数字を変えると残機が増える」「こっちをいじると攻撃力が上がる」といった感じにソースコードを弄る(いわゆるチート)ようになります。

C言語を覚えた高専

中学を卒業して高専に入ると当時のコンピュータセンタにあったのが Sharp の MZ-5500 シリーズで,最初に実習で習ったのはFortranでしたが,これはその後まったく触れておらず,今ではすっかり記憶の彼方に去ってしまっています。

高専では電子工学系の学科であったため*2,学科独自のPC教室もありこちらは EPSON の PC-286が配置されていました。そこでは C言語のプログラミング演習があり,高専の卒業研究と専攻科の特別研究はC言語非線形関数をルンゲクッタ法で解いたりしています。

公私にわたりプログラミングを使い始めた就職初期

専攻科を卒業して就職すると,UNIX系(職場ではSoralisがメインでした)サーバのお守りをすることになります。

UNIXの世界ではテキスト処理を行う機会が増え,テキスト処理に強い,という理由でPerlに手を出すことになります。

また,1990年代後半は比較的簡単に個人でWebサイトを持てるようになった時期でもあり,プライベートではCGIを動かせるレンタルサーバを借りてPerlでゲーム系のBBSやユーザが登録可能なコンボ集なんかを作って公開していたりもします。

また,Javaに手をだしたのもこの頃で,目的はWebでアプレットを使いたいがためでしたが,C言語の構造体に関数までついたようなオブジェクト指向の考え方には痛く感動したことを覚えています。

オブジェクト指向を模索してRubyにたどり着いた就職中期

Javaオブジェクト指向の考え方に触れ,お手軽なインタプリタでもオブジェクト指向的な機能を使えないかと模索を始めます。

最初に試したのはPerlオブジェクト指向拡張でしたが,当時の自分には如何にもアドホックで不自然なものに思えて断念しました。

Javaをサーバへ導入しようとしたり,C++に手を出して文字列操作に泣きそうになったりしながらたどり着いたのが Ruby でした。

プリミティブな値が基本的に存在せず「すべてがオブジェクト」という Ruby の考え方は,非常にしっくりくるもので,その後10年以上,仕事でもプライベートの工作でもRubyをメインに使用していくことになります。

Ruby の柔軟さを持て余してしまった大学院期

Ruby を使い始めて数年たち,齢30を数えたあたりで思うところあって社会人大学院生として学生との2足の草鞋を履くことになります。

仕事柄,研究テーマはネットワーク関連でしたが,その中で,お手製のネットワークシミュレータを作ることになり,Rubyを使って最低限の機能を実装したのですが,その中で Ruby の(より正確には Ruby を使う自分の)限界が見えてきました。

例えば,Ruby は徹底して動的な型システムを持つ言語です。メソッドはどんな型の値であろうとも引数として受け入れてしまうため,想定した型とは異なる引数が与えられたとしても実行時にエラーにもならず,不可解な結果だけが出力される場合があります。もし特定の型のみを受け入れるメソッドを実装するには,メソッド側で引数の型をチェックする必要があります。

おそらく,ダックタイピング環境下では型ではなくメソッド実装の有無で引数を制約できるようなクラス設計を行うべきなのでしょうが,もう少し簡単に「引数の型を制約できるRuby」を求めるようになります。

そして Crystal と出会った現在

Crystal という名前のプログラミング言語 があります。

crystal-lang.org

Ruby と見間違えるほどよくにた構文を持ちながら,静的な型システムを持ち,LLVMを使用して高速なバイナリ形式の実行ファイルにコンパイル可能な言語です。また,静的型システムを採用していますが,コンパイラがある程度変数の型を推定してくれるので,必ずしも変数の型やメソッド引数の型を指定する必要はありません。

Ruby との構文類似性でいえば,型の定義,メソッドチェーン,イテレータブロックなど,Crystal は Ruby の特徴的な構文をそのまま受け継いでいます。例えば,以下は完全に動作するCrystalのソースコードです。

module OneToN
  def self.get(n)
    1..n
  end
end

OneToN.get(3).each do |i|
  puts i * 2
end
#=> 2
#   4
#   6

Ruby をご存知の方であればお分かりの通り,このソースコードRubyインタプリタで実行しても同様の結果が得られます。

とはいえ,必ずしもRubyのコードがそのままCrystalで実行できるとは限りません。そもそも,CrystalはCrystalで独立したプログラミング言語でありそれ自体の哲学をもっており,Crystal自身もRubyとの互換性を最終目標には掲げてはいません。

実際,ほとんどの場合 Rubyソースコードは型について曖昧さを抱えており(必ずしもそれは悪いことではなく,柔軟さとのトレードオフなのでしょう)Crystalのコンパイラでは実行できないでしょう。また,メタプログラミングを可能にするような Ruby の柔軟さは Crystal では利用できないことが多いです。

一方で,コンパイラがメソッド引数の型を予め認識できるので,Ruby では不可能だった メソッドのオーバーロードなど,Crystal では可能な機能も存在します。

これは,ある意味で自分が求めていたプログラミング言語のほぼ理想形でした。

使い始めた当初こそ Ruby との小さな違いに(非常に似ているため余計に)つまずいたりもしましたが,いまではすっかり Crystal にどっぷり浸かった日々を送っています。職場の本番環境でも一部 Crystal で書いたツールが動いていたりしますし,そのために実装したいくつかの小品を Shard(Ruby でいう Gem)としてGitHubへ公開したりもしています。

Crystal はまだ開発途上にあるプログラミング言語で,しばしば破壊的なAPIの変更が加わる状況ではありますが,バージョン1.0が登場したあかつきには,もう少し多方面に Crystal を浸かってみようと思っています。

*1:当時,「1画面プログラム」というMSXの標準的な画面表示に収まるサイズの部門がありました

*2:当時は情報系の学科がなく,電子工学系がプログラミングなんかをやってました

夏の小掃除と「みんなのまくら」

今日は朝から箪笥や書架の埃を落とし,床のモップがけ→水拭き→掃除機など自分の寝室をオーバーホールした1日でした。

ベット周りでも布団や敷き毛布,マットレスに加えて,久しぶりにベッドの床板になっているスノコも天日干し。ついでに結婚前から10年来使っているテンピュールの枕も一緒に干しておいたのですが,それを見たカミさんから「いかにも汚れがヒドいので買い替えてはどうか」といった提案が。

確かに最近ではテンピュールの特徴ともいえる低反発の独特な感触もすっかり薄くなり,横向きに寝ると頭が沈み込んでしまうような状態でしたので,これを機に枕を新調することにいたしました。

早速カラフルタウンの『じぶんまくら』へ出向いて購入した新しい枕がこちら。

「みんなのまくら」

『じぶんまくら』では,完全オーダーメイドの「じぶんまくら」(製品名)もあるらしいのですが,お値段35,000円と聞いてちょっと尻込みしましたので,今回はレディーメイドの「みんなのまくら」をチョイス。

中央は柔らかいウレタンですが,左右は硬めのチップ入りで盛り上がっており,横向きで寝た際に頭を支えてくれる構造です。

お店で試した際には良い感じでしたが,果たして実際の寝心地はどんなもんでしょうね。

緊急対応とノウハウ共有

昨晩遅くに発覚した職場のトラブル。

本来であればリモートメンテ用の裏口(VPN)から入って自宅で対応できるはずなんですが,昨晩は自宅の環境からだとVPNサーバなぜか応答を返してくれなかったんですよねぇ。

iPhoneで一度繋がったので,テザリング経由で行けるかと思ったら,その後2度と応答しなくなるし。

放置しておくと朝までに酷いことになってそうだったので,急ぎ職場に駆けつけて応急対処だけしてきました。

で,帰ってきたら日が変わっていたというオチ。

そもそもが自分だけしか対応できない状況になってしまっている辺りにも問題があるとは常々思っているのですが,障害部分を遮断する/しないの判断基準が自分の中でもうまいこと定量化できておらず,周りとノウハウを共有できていません。

昨年くらいから職場内の自分のポジションも変化してきていて,このままではイカンという思いが日に日に強くなっていますので,同業の皆さんはどうしてるのか,秋の集まりの時にでもリサーチしてみようかな。

日報再開(?)

2004年から2010年あたりにかけて,ほぼ毎日更新していたこの日報も,Twitterの手軽さにかまけて5年ほど放置してしまっています。

過去の記事を読み返してみると,結構懐かしく思い出されることも多く,ふと思い立って日報を再開させてみようとか思い始めています。

さすがに毎日とはいかないかもしれませんが,Twitterに書きづらいボリュームの内容がアウトプットできればなと。

本日のつぶやき

  • 08:39 昨夜のWWDC情報をチェック。iOS7のコントロールセンターは便利そうだ。
  • 08:49 AndroidやJBからの機能取り込みが多い印象かなぁ。ま,便利になるのは良い事だ。 #iOS7
  • 13:39 #walkmeter でウォーキングを完了, 時間 1:12:24, 5.30 km.
  • 13:41 本日も名古屋へ出張につき、名古屋駅から用務先最寄りの鶴舞駅まで徒歩で移動。
  • 20:49 トイレへ行っていて電車を一本逃すなど。