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

DT日記

家を離れた自宅警備員の日記

2016年8月22日の日記

1

2

github.com

3

composer.el 雑に機能増やしてる。PHPComposerを管理するやつ。

github.com

今回の目玉は何かって言ったら、(composer-get-config "bin-dir")ですかね。composer.jsonをパースするのとどっちが楽かな。

そんなことやってる場合じゃない感もあるけど、やれることからこつこつと。

4

その前にphpunit.elの方に付けようと思ったんだけど、やっぱりcomposer.elに乗っかった方が楽だった。これ、phpunit.el の方にめんどくさいPR送るよりもcomposer.el側でnadvice使って実装してみた方が楽かもねえ。

それはそれとして、phpunit.el側の探索順序は変なのでプルリクエスト送る。

5

そーいや、自分の環境にはEmacs 25.1rc2を入れてなかった。

brew reinstall emacs --with-cocoa --with-imagemagick --with-librsvg --devel
brew linkapps emacs

6

探索順序が変な話。composer global require phpunit/phpunitとかしてるときにはまる。あと、開発中のプロジェクトをglobal requireしてるとき。

現象としてはいままでも把握してたけど、CopipeIterのテストが通らなくてはまった。現在作業中のプロジェクトのファイルがロードされない。

github.com

送った。これWindowsで動くのかねえ… 動かない気がする。

2016年8月21日の日記

1

ミラクルマジカルワールド ヾ(〃><)ノ゙

www.sunshinecity.co.jp魔法使いプリキュア!ミラクルマジカルワールド | 池袋サンシャインシティ

2

神斬った。髭ともみあげが繋ってたのはおしゃれではない。

3

本放送で見てなかった。実家で自宅警備してたときに、弟が視てたのを見てた。

www.b-ch.com「あの夏で待ってる」 | バンダイチャンネル

沖縄まで見た。最優先事項だった。

そういや、今日遊んだメンバーに弟のツイーヨがRTされてて世間の狭さを感じますね。

4

プルリック

github.com

5

久々にterm+.elを使ってみようと思った。

tarao.hatenablog.com

現状(といふかしばらく前から)いくつか問題があって、ひとつはYASnippetとの相性問題。これはterm-mode-hookとかで(yas-minor-mode -1)してやれば、まあ問題はない。こっちはそこまで致命的じゃない。

もうひとつは、Emacs起動時にWarningが出るようになること… こっちの方がつらい。

Warning (bytecomp): reference to free variable ‘term-vertical-motion’
Warning (bytecomp): ‘flet’ is an obsolete macro (as of 24.3); use either ‘cl-flet’ or ‘cl-letf’.
Warning (bytecomp): reference to free variable ‘term-terminal-parameter’
Warning (bytecomp): reference to free variable ‘term-scroll-end’
Warning (bytecomp): reference to free variable ‘term-width’

fletの件については去年の10月にパッチを作ってなぜか放置してたのだけれど、さしあさってプルリクエストにした。

Use cl-letf instead of flet by zonuexe · Pull Request #11 · tarao/term-plus-el · GitHub

他のWarningの対応方法はちょっとわからなかったので、ゆとりのあるときにちゃんと調べる。

良MAX

お題「シンタックス・ハイライト機能で対応してほしい言語」

el(Emacs Lisp)。

(+ 1 2)
(quote (りんご ばなな みかん))

いや、lisp(Common Lisp?)があるのは知ってるけどさ…

(+ 1 2)
(quote (りんご ばなな みかん))

それよりもHatena::Letの惨状をはやくどうにかしてくれーっ

pixiv冬インターンシップに寄せて 2015

やるんですよ、インターンシップ

ssl.pixiv.net

ピクシブ株式会社では毎年インターンシップをやってて、冬には2日間の短期です。

課題について

実は提出課題はpublicなリポジトリに置いてあります。

github.com

このコードは私がWebアプリケーション技術者としての人生の集大成となる次世代インタラクティブコミュニケーションサービスなのですが、如何せんセキュリティホールが取れませんでした p(ixi)v

と冗談はさておき、このコードの脆弱性はあからさまで、かなり初心者向けです。特にPHPには依存しない問題もあれば、PHPにありがちな問題もあります。

脆弱性を発見して「直す」アプローチは基本的に楽しいものです。特定のWebフレームワークに依存したコードしか書いたことがない型には開発自身のPHP力の見直しにも、新入社員向けの教材に使っていただけても楽しいかもしれません。

もし解法について検討がつかない場合は、IPA(独立行政法人 情報処理推進機構)が公開する安全なウェブサイトの作り方を熟読してみてください。

www.ipa.go.jp

pixivとPHPについて

www.slideshare.net

pixivはPHPで実装され、PHPと共に生き、PHPに真摯に向き合って居ります。会社として技術評論社さまのWEB†DB PRESSにてPHPの連載記事を持たせていただいて居り、これからも実世界でのPHPの技術について貢献していきます。

個人的な感傷

2000年代前半頃にYY-CHATベースのテキストチャットで育ったので、「チャット」については特別な感情があります。その当時プログラミングについて学びたいと思って自分ひとりでは理解できず、動かす環境を用意することすらできませんでした。それから十年あまりが経ち、職業としてWebサービスの設計に携るようになった自分を見つめ直す機会になりました。

ライセンスについて

私はAGPLにしたかったのですが議論がめんどくさかったのでWTFPLにしました。まあどっちでもいいです。

pixivエンジニアが教えるプログラミング入門って本が出る

pixivエンジニアが教えるプログラミング入門 (星海社新書)

pixivエンジニアが教えるプログラミング入門 (星海社新書)

同僚の @ が本を書きました。3月26日発売とのことです。良いですね。

どんな本か

本書の美点は、その薄さです。

「画像掲示板の開発」が本書を通じての題材ですが、技術的な専門用語の導入をできるだけ避けつつ、最低限の説明では誤解を招かないように工夫が凝らされてます。想定環境をMacに限定するといふ割り切った判断で、環境構築の手間は驚異的な少なさです。 (ただし、sudo gem installさせるため管理者権限が必要)

本書の良くない点。日本語としては推敲されてをらず、読みものとして手にとると辛くなります。

ぱらぱらとめくってみて、ひどいと思った箇所を抜萃しておきます。

このようにGit は変更のかたまりであるコミットを作る準備としてgit add を使います。
そしてgit commit でコミットを作ります。
そしてそのコミットをサーバーに反映するためにgit push を使います。
そして他の人がgit push したコミットをダウンロードして手元に反映するためにgit pull を使います。

これは商業出版物としてはつらい文章ではありますが、自分で手を動かしながらプログラミングを理解するための資料としては不足ない水準ではあるかな、といふ感想です。とはいってもやっぱり日本語つらくて挫折することはありそう。

Rubicureをチョット助けた技術

こんにちはこんにちは、好きなプリキュアキュアパッションです。

この記事は プリキュア Advent Calendar 2014 - Adventar の14日めです。

このアドベントカレンダーの主宰でもある id:sue445 が作った プログラミング言語における代表的プリキュア実装 である Rubicure に何度か貢献してるので、本日はそれぞれのパッチについて紹介します。

プログラミングに興味のない型はごめんなさい ヾ(〃><)ノ゙

以前、Rubicureに学ぶメタプログラミングといふ内容を社内勉強会で発表したので、興味があればこちらも参照ください。

演算子

Feature/define operators by zonuexe · Pull Request #7 · sue445/rubicure

precure = Rubicure::Girl.find(:passion)

case precure
when Precure.dokidoki
  puts "#{precure.name}はドキドキプリキュアだよ!"
when Precure.fresh
  puts "#{precure.name}はフレッシュプリキュアだよ!"
else
  puts "#{precure.name}はドキドキでもフレッシュでもないよ"
end

こんな風に case-when を使った分岐を書きたかったがために演算子を定義しました。

変身メッセージの文字列

Remove last linebreaks of transform_messages by zonuexe · Pull Request #8 · sue445/rubicure

重箱の隅です。付けるのは簡単だけど取るのはめんどくさいよね。

ruby -rubycure

Add `ubicure' by zonuexe · Pull Request #22 · sue445/rubicure

コマンドラインruby -r json と書くと、ソースコード内に require "json" と書いたのと同じ意味を持ちます。

このパッチを送る前から ruby -r rubicure と書けば同じことができたのですが、これで ruby -rubicure と書けるようになり、 Rubyにrubicureコマンドを追加した …ように見えます。 (錯覚)

もともとRubyには library un といふライブラリがあって、 ruby -run のように利用することができたことに触発されました。

irb -rubicurepry -rubicureも、もちろん可能です。

どうでもいい逸話として、今年幸せゲットして kyon_mm * kaori_t_spica 結婚祝いLT大会 in Tokyo #kyon_kao_wedding といふ内輪向けイベントで幸せの嵐が吹き荒れてたんですけど、会場係の id:sue445 が忙しそうだったのでその間にプルリクエストを送ったらイベント終了前にマージしてくれたといふ経緯がありました。

プリキュアごとの変身メソッド

Feature/specific transform by zonuexe · Pull Request #36 · sue445/rubicure

% ruby -rubicure -e'Cure.passion.change!'
チェインジ!プリキュア・ビートアップ!
真っ赤なハートは幸せの証!
熟れたてフレッシュ、キュアパッション!
レッツプリキュア!

% ruby -rubicure -e'Cure.beat.send("レッツプレイ! プリキュア・モジュレーション!")'
レッツプレイ!プリキュアモジュレーション!!
爪弾くは魂の調べ! キュアビート!
届け4人の組曲!スイートプリキュア!

% ruby -rubicure -e'Cure.lemonade.metamorphose!'
プリキュア!メタモルフォーゼ!
はじけるレモンの香り、キュアレモネード!
希望の力と未来の光!
華麗に羽ばたく5つの心!
Yes!プリキュア5!

% ruby -rubicure -e'Milky.rose.metamorphose!'
/path/rubicure/girl.rb:136:in `method_missing': undefined method `metamorphose!' for #<Rubicure::Girl 美々野くるみ> (NoMethodError)
        from -e:1:in `<main>'

% ruby -rubicure -e'Milky.rose.translate!'
スカイローズ・トランスレイト!
青いバラは秘密のしるし! ミルキィローズ!

中立的なプリキュアの変身メソッドには Girl#transform がありますが、プリキュア固有の変身メソッド、つまりはフレッシュプリキュアは「チェインジ(change!)」したいし、プリキュア5は「メタモルフォーゼ(metamorphose!)」したいものです。そこで、設定ファイルにデータを追加することで、それぞれのプリキュアに固有の変身メソッドを定義することができるようになりました。

実際にはメソッドを動的に定義するわけではなく、Girl#method_missingで待ち受けて、そのプリキュアの変身メソッドかどうかをチェックします。正しくない変身メソッドだったら、変身はしません。

ちなみにメソッド名の ! のあるなしは故意に曖昧にしてたのですが、 Girl#humanizeGirl#humanize! が正式になって前者は WARNING が出るようになってしまいました…

ぴかりんじゃんけん

Add Cure.peace.pikarin_janken (singleton method) by zonuexe · Pull Request #39 · sue445/rubicure

説明は不要かと存じますが、キュアピースは変身するときにじゃんけんを挑んできます。それがピカリンジャンケンです。

プリキュア同士の勝ち負けを出すべきか、などいろいろ妄想はあるのですが、キュアピースが一方的にじゃんけんを挑んでくる原作を踏襲して、sleepで適度に待ちながらランダムに標準出力に書き込むだけです。キュアピースが出す手のパターンは、これも原作の頻度を踏襲して居ります。

sleepする時間は調節できるから良いのですが、「標準出力に書き込む」といふ挙動が、Rubicureを利用したWebアプリを実装したときに障害になりはしないかといふ杞憂はあります><

Girl#to_s

Add Girl#to_s (alias of #name) by zonuexe · Pull Request #59 · sue445/rubicure

さっきマージされたばっかりの新鮮なプルリクエストだよ!

上のサンプルコードにあった puts "#{precure.name}はフレッシュプリキュアだよ!" が冗長だと思ったので puts "#{precure}はフレッシュプリキュアだよ!" で済むようになりました。

最後に

プログラマは誰でもプリキュア実装つくれるのよ」とは id:sue445 の名言ですが[要出展]プリキュアといふ概念をプログラミング言語に転写するのはおもしろいので、やってみると楽しいですよ ヾ(〃><)ノ゙

プリキュアとは関係ないのですが、Rubicureに触発されて同僚たちと虹のコンキスタドールといふアイドルグループを実装したところ、三者三様になっておもしろかったといふ知見があります。データの互換性なんかありゃしない ヾ(〃><)ノ゙

プリキュアの世界もkan/p5-acme-prettycureとかdrillbits/pycureとかkaosf/clocureとかいろいろあるのですが、言語間の相互運用性などないので、やはり三者三様です。