シングルタスク脳
基本がシングルタスクな脳ミソのため,並行する案件の対処が苦手。
なんとかTSSでこなそうとはしてますが,キューにタスクが溜まってくるととどうしても取りこぼしが起き始めます。
しかも大抵の場合,作業効率はそれまでに連続してそのタスクを処理してる時間に比例して向上するので,タスクのスイッチングが入るとアクセルの踏みなおしになって効率がよろしくない。
そうでなくてもノッてきた頃に割り込み(電話とか)が入るし。
割り込みを無視して1件ずつ潰していった方がトータルとしての効率は上がりそうな気もしますが,まさか自分むけの案件トラッカーでチケット発行,ってわけにも行きませんわな。
仕事に対するスタンスを根本的に見直す時期なのかも……とか言いながら,どっちの方向に行けばいいのかまったく見えてなかったりするんですけど。
英語で敬語
大抵はトラブル対応(フォームサービスを利用したフィッシングに Abuse Report を出したり)だったりしますが,ここのところ仕事関係でちょこちょこと英文メールを書く機会があります。
なんとか意味は通じているとは思うものの,いかんせんネイティブでない悲しさで,知らず知らず失礼な表現になっていたりしないか心配になることが間々あります。
オープンソース関連で Issue を投げたりする際なども同じようなことは感じていましたが,特に職場の肩書でビジネスメールを出すとなれば尚更。
というわけで,以前メディアコスモス(岐阜市図書館)で借りた本を自分でも買って読んでます。
「感謝」「謝罪」「依頼」などの8つカテゴリそれぞれにビジネスシーンで使えそうな表現が10パターン前後ずつ,対話形式の用例やニュアンスを含めた解説などでわかりやすく解説されています。
これはこれでシチュエーションを選ぶものもあるようですが,「お手数をおかけしますが」的な英語表現とか,読んでて面白かったです。
- 作者: 数佐尚美
- 出版社/メーカー: KADOKAWA/中経出版
- 発売日: 2013/02/27
- メディア: 単行本
- この商品を含むブログを見る
「Guilty Gear」20周年
PSで発売された格闘ゲームの「Guilty Gear」(初代)が発売されて今日で丸20年になるようです。
この「Guilty Gear」,アークシステムワークスにとって初の本格的な2D格闘ゲームということで色々と大味な部分はあったものの,キビキビとした操作感とキャラの魅力で大いに楽しませてもらいました。初代はアーケード展開のない家庭用機専用だったこともあり,その大味さも仲間内でやる分には返ってネタとして笑い飛ばせるプラス要素になっていたように思います。
発売前は完全にノーマークだったのですが,雑誌の付録に付いていた2キャラしか使えない体験版の出来が予想外に良いもので,製品版が発売されてからは仲間内での対戦に飽き足らず京都で開かれた大会にも参加。さらにそこで知り合った面々と関西方面でオフ会(この響きがすでに懐かしい)を開くようになり,その頃の中心メンバーとは今でも付き合いがあります。
個人サイトで自作のBBSやコンボ集,用語集といったCGIを公開したり,その個人サイトを通じて知り合った米国在住のプレイヤーさん宅まで対戦しに行ったりと,20代前半から中盤にかけて,まだ色々な方面に向けた熱量を抱え込んでいた時期の思い出深いゲームであります。
というか,そのオフ会メンバーの1人が今のカミさんだったりしますんで,ある意味「人生を変えた」と言っても過言ではない作品でしょう。
片や当時岐阜在住の社会人2年生,片や和歌山在住の高校生という取り合わせは,こんなことでもない限り絶対に結ばれることのなかった縁だと思うと,石渡氏をはじめとした製作陣には感謝の言葉もありません。*1
【#ギルティギア20周年】本日5/14(月)、でGUILTY GEARシリーズは20周年を迎えました。総監督 石渡太輔の「20周年を迎えて」の所感を公開させて頂きます。https://t.co/EB90ciJMw4 #ANNIVERSARY pic.twitter.com/RZ7oF0Npxe
— アークシステムワークス公式ツイッター (@ARCSY_Event) 2018年5月13日
*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 という名前のプログラミング言語 があります。
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日でした。
ベット周りでも布団や敷き毛布,マットレスに加えて,久しぶりにベッドの床板になっているスノコも天日干し。ついでに結婚前から10年来使っているテンピュールの枕も一緒に干しておいたのですが,それを見たカミさんから「いかにも汚れがヒドいので買い替えてはどうか」といった提案が。
確かに最近ではテンピュールの特徴ともいえる低反発の独特な感触もすっかり薄くなり,横向きに寝ると頭が沈み込んでしまうような状態でしたので,これを機に枕を新調することにいたしました。
早速カラフルタウンの『じぶんまくら』へ出向いて購入した新しい枕がこちら。
『じぶんまくら』では,完全オーダーメイドの「じぶんまくら」(製品名)もあるらしいのですが,お値段35,000円と聞いてちょっと尻込みしましたので,今回はレディーメイドの「みんなのまくら」をチョイス。
中央は柔らかいウレタンですが,左右は硬めのチップ入りで盛り上がっており,横向きで寝た際に頭を支えてくれる構造です。
お店で試した際には良い感じでしたが,果たして実際の寝心地はどんなもんでしょうね。
緊急対応とノウハウ共有
昨晩遅くに発覚した職場のトラブル。
本来であればリモートメンテ用の裏口(VPN)から入って自宅で対応できるはずなんですが,昨晩は自宅の環境からだとVPNサーバなぜか応答を返してくれなかったんですよねぇ。
iPhoneで一度繋がったので,テザリング経由で行けるかと思ったら,その後2度と応答しなくなるし。
放置しておくと朝までに酷いことになってそうだったので,急ぎ職場に駆けつけて応急対処だけしてきました。
で,帰ってきたら日が変わっていたというオチ。
そもそもが自分だけしか対応できない状況になってしまっている辺りにも問題があるとは常々思っているのですが,障害部分を遮断する/しないの判断基準が自分の中でもうまいこと定量化できておらず,周りとノウハウを共有できていません。
昨年くらいから職場内の自分のポジションも変化してきていて,このままではイカンという思いが日に日に強くなっていますので,同業の皆さんはどうしてるのか,秋の集まりの時にでもリサーチしてみようかな。