電柱日報

日々の由無し事

iPadでCrystalコーディング環境

出張の移動中にちょっとしたコーディングがしたくて試行錯誤した内容を備忘録として。

やりたかったこと

導入アプリ1)Textastic

Textastic Code Editor 6

Textastic Code Editor 6

  • Alexander Blach
  • 仕事効率化
  • ¥1,200

iPadで使えるコーディングエディタ。

シンタックスハイライトができて,iCloudドライブやDropboxとも連携できて便利。

当然(?)Crystal言語のハイライトには対応していない……が,Textmateシンタックス定義がそのまま使えるので,GitHubからCrystal.tmbundleを拾ってきて突っ込む。

github.com

突っ込み方は公式で公開されてるiPad版マニュアルのpp. 14-19辺りを参照。

#Textastic フォルダにどうやって.tmbundle 一式を送り込んだら良いのか悩んだものの,GitHubからcloneしたリポジトリ一式を一旦Dropboxにあげて,Textasticのファイル転送機能でフォルダごと持ってきたらできた。

マクロなんかも結構ちゃんと色分けしてくれてニッコリ。

f:id:denchuinc:20180625181942p:plain

シンボルリストからクラス定義やメソッド定義にジャンプしたりもできる。 (注:マクロメソッドの表示が微妙だったり,structがシンボルとして拾われないとかの不具合はある)

f:id:denchuinc:20180625182110p:plain

ただし,Textastic単体ではGitHubからcloneしたりpushしたりはできない。

導入アプリ2) Working Copy

Working Copy

Working Copy

  • Anders Borum
  • 仕事効率化
  • 無料

iPadで使えるGitクライアント。GitHubからローカルへのcloneは無料版でもできる。リモートへのpushは有料機能。

GitHubで認証すると,このアプリ用の公開鍵をGitHubアカウントへ埋め込む。(この挙動自体はどうかと思わないでもないけれど,面白い仕組みではある)

こいつ自身にも簡易のエディタは搭載されているものの,シンタックス定義の追加とかはできない。むしろ,他のテキストエディタから開けるから,エディタは好きなの使って,みたいなスタンスっぽい。

公式サイトの一番上にある動画で17秒あたりから,まさにTextasticでリポジトリを開く方法が紹介されてる。

ローカルにcloneするので,電波が途切れても編集や保存ができる。

その他

コーディング以外でも,iPad標準のVPN機能(L2TP/IPsec/)と

Prompt 2

Prompt 2

  • Panic, Inc.
  • ユーティリティ
  • ¥1,800

辺りのリモートアクセス系アプリを使えば,出先からiPadで最低限の緊急対応はできそうな気配。

今度の出張はMacBook Proを置いて,iPadだけで行ってみようかな。

不快指数……

ここ数日は暖かいを通り越して暑いと感じる日が続いていますね。先週などは20℃前後で肌寒かったことを思うと,温度差にやられそうです。

職場のクーラー解禁は6月以降,30℃を超えるような日はつけても良いようですが,流石にまだそこまで気温は上がらず。

とはいえ今日は湿度も高く,不快指数が怒髪天な感じで辛うございました。

正直がっつり暑くて汗をダラダラ流すような状況よりも,ジットリと汗ばむ感じのほうがキツく感じます。

いまからこの様子だと梅雨本番が思いやられますね。

シングルタスク脳

基本がシングルタスクな脳ミソのため,並行する案件の対処が苦手。

なんとかTSSでこなそうとはしてますが,キューにタスクが溜まってくるととどうしても取りこぼしが起き始めます。

しかも大抵の場合,作業効率はそれまでに連続してそのタスクを処理してる時間に比例して向上するので,タスクのスイッチングが入るとアクセルの踏みなおしになって効率がよろしくない。

そうでなくてもノッてきた頃に割り込み(電話とか)が入るし。

割り込みを無視して1件ずつ潰していった方がトータルとしての効率は上がりそうな気もしますが,まさか自分むけの案件トラッカーでチケット発行,ってわけにも行きませんわな。

仕事に対するスタンスを根本的に見直す時期なのかも……とか言いながら,どっちの方向に行けばいいのかまったく見えてなかったりするんですけど。

英語で敬語

大抵はトラブル対応(フォームサービスを利用したフィッシングに 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円と聞いてちょっと尻込みしましたので,今回はレディーメイドの「みんなのまくら」をチョイス。

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

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