DT日記

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

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とかいろいろあるのですが、言語間の相互運用性などないので、やはり三者三様です。

現職に入社して二年になりました

そして二年が経ったとさ p(ixi)v

今年は何をやってたんだっけ

PHPたのしい ヾ(〃><)ノ゙

具体的に言ふとアレなことも多いのですが、

  • Webアプリケーションのセキュリティの調査と対応
  • 主要サービスおよび周辺サービス連携機能のリファクタリング
  • pixivスポットライトの設計
  • 主要サービスの多言語化対応についてツールの開発および若干の改善(道半ば…)
  • アプリ用REST APIリファクタリング及び新規開発
  • その他、ほとんどの人が気がつかないような細かい細かいところの改善

まとめると「PHP」なのですが、一年前の記事に「セキュリティ」とか書いてたのは、まあ、さういふことです。地道にこつこつとやってきたことが生きてる感じはします。シェルスクリプトも思ったより書いたしね!

zonuexe/php-http-accept-languageなんかは仕事中に調査したことを、きちんと実装してみた感じです。まあ主要サービスのコードには入れてないんですけど。

社内で発表したスライドとか

来年どうしよう

いままでずっと新入りのつもりだったのですが新しく入ってきたひとたちも多くて、しっかりしなきゃなあみたいな感じあります。あと英語わからんちんって言ってるのはやっぱりつらいので、もうちょっとコミュニケーションとれるようにしたい。

仕事でやりたいことはたくさんたくさんある。さしあたっては来年もpixivとアプリとAPIにご期待ください ヾ(〃><)ノ゙☆

最初の年はRuby、今年はPHP、みたいな感じでやってきたから、次はどうしよう。JavaScript?

宣伝

なんか年末にエンジニア向け pixiv開発のbugリストからの脱出!エンジニア職インターンとかやるみたいなので、来るといいです。僕がどの程度まで関与するのかはよくわかんないけど、握手はできるよ!

東亜飯店


東亜飯店で飯を食べた - Line 1: Error: Invalid Blog('by Esehara' )






私自身の褪色退職は当面なさげです。トラストミー。

プリキュアハッカソン2に参加した

しもめぐろのともだちと会ってきた。ハッカソンが終ったあとは目黒駅近くで飲んできた。

僕は Precure Textbook なるものを作るべく、ちくちくと rails g を繰り返してたらいつの間にか9時間が経過してたでござる、って感じで進捗だめです。

本当は「phprecure!」なるものを作りたかったのだけれど、その前段階として言語に依存せずに利用できるデータが欲しいよねと思ってJSON形式のプリキュア教科書のデータ構造設計に着手し、データ間の関連を見てるうちにActiveRecordで作ってJSON吐いた方が楽じゃね? となってi18nを考慮したいと欲が出てきて… みたいな現状。

そんなこんなで自分の進捗がいまいちだったので、帰ってきてからRubicureに機能を実装してPull Requestを送ってみた 。前々から「チェインジ」とか「メタモルフォーゼ」したいよね、と思ってたのを形にした感じ。 実装方法はすごい適当。

毎度のことながらsueさんお疲れさまです。

また、夏が来る

四年前の冬の話

自分のコード書けなさに絶望し、卒業研究を投げ出して大学をやめることしか考へてなかった。

三年前の春の話

大学を辞めたい気持ちもおさまったところでイシキが高まってTDD Boot Camp 札幌 2.0に参加した縁で id:nakayoshix と仲良くなり、通学しながらアルバイトをはじめた。

二年前の春の話

もろもろの事情により仕事もなくなり、自宅警備をしてた。Twitterで高くなったイシキを持てあまして計算機プログラムの構造と解釈 第二版を読んだりしてた。

二年前の夏の話

そろそろ求職しないといけないと思って東京を放浪してた。10日ほど放浪してたけど、野宿はしてない。ぷらぷらしながら電源のとれるカフェに居坐ってた気がするけど、何をしてたのかよくわからない。

8月18日に、就職ではないが、糊口をしのぐための仕事は決まった。

決まったあとでRuby開発経験を盛るための成果物が必要だといふのでzonuexe/tenarai-sdjreaderを書いた。いまみるとひどいし、なんのアピールになるのかよくわからない。初めてRubyで動くgemっぽいものを書いた気がする。

そのあと

東京に転居し最初の仕事の契約を終了され現職に就職し代々木に転居し現在に至る。

そして

2011年はPythonを、2012年はRubyを、2013年はPHPを書いてゐた気がする。ことしの夏は何を書くことになるやら。

DTと契約の闇と労働者派遣事業の適正な運営の確保及び派遣労働者の保護等に関する法律

なんか時空がすごく歪んで申しわけないんですけど闇 Advent Calendar 2013です。

闇っぽいこと二週間以上いろいろ考へてたら全然まとまらなくって長文を何度も書いたり消したりしてたら生活に支障をきたしてる感じがしたので、気分転換に架空の契約書と注文でも書いてみたら結構楽しかったのです ヾ(〃><)ノ゙☆

f:id:zonu_exe:20131230064752p:plain
f:id:zonu_exe:20131230064801p:plain
f:id:zonu_exe:20131230064807p:plain
f:id:zonu_exe:20131230064814p:plain
f:id:zonu_exe:20131230064820p:plain
f:id:zonu_exe:20131230064826p:plain
f:id:zonu_exe:20131230064832p:plain
f:id:zonu_exe:20131230064844p:plain

契約書は著作物?|著作権 侵害・違反を考えるで紹介された判例によれば、土地売買契約書の記載内容は、思想又は感情を創作的に表現したものであるとはいえないから、著作物ということはできないらしいですよ。へー。

僕は善良な市民だから、いたいけな若者を相手にこんな阿漕な契約を結ぶ会社が実際に居るのかよく知らないんですけど、みなさんは真似しちゃだめですよ ヾ(#><)ノ゙

最後に労働者派遣事業の適正な運営の確保及び派遣労働者の保護等に関する法律を貼っておきますね。

第二章 労働者派遣事業の適正な運営の確保に関する措置

第二節 事業の許可等

第二款 特定労働者派遣事業

(特定労働者派遣事業の届出)

  • 第十六条 特定労働者派遣事業を行おうとする者は、第五条第二項各号に掲げる事項を記載した届出書を厚生労働大臣に提出しなければならない。この場合において、同項第三号中「一般労働者派遣事業」とあるのは、「特定労働者派遣事業」とする。
    • 2 前項の届出書には、特定労働者派遣事業を行う事業所ごとの当該事業に係る事業計画書その他厚生労働省令で定める書類を添付しなければならない。
    • 3 前項の事業計画書には、厚生労働省令で定めるところにより、特定労働者派遣事業を行う事業所ごとの当該事業に係る派遣労働者の数、労働者派遣に関する料金の額その他労働者派遣に関する事項を記載しなければならない。
http://law.e-gov.go.jp/htmldata/S60/S60HO088.html#1000000000002000000002000000002000000000000000000000000000000000000000000000000

第五章 罰則

  • 第六十条 次の各号のいずれかに該当する者は、六月以下の懲役又は三十万円以下の罰金に処する。
    • 一 第十六条第一項に規定する届出書を提出しないで特定労働者派遣事業を行つた者
    • 二 第二十二条又は第四十九条の三第二項の規定に違反した者
    • 三 第四十九条の規定による処分に違反した者
http://law.e-gov.go.jp/htmldata/S60/S60HO088.html#1000000000005000000000000000000000000000000000000000000000000000000000000000000

補足

会社と労働者の関係が正規雇用でも請負契約でも準委任契約でも、特定または一般労働者派遣事業の許可なしに労働者を他社に派遣して他社の指揮系統のもとで働かせることはできませんよ。当然じゃないっすか^^

ぼくとFuniSayaとクリエイティビティ

そんなものはないし、ない袖は振れない*1 ヾ(#><)ノ゙☆

しかたがないからってわけじゃないけど、ももんが描きました。


「うきうきももんが」/「tadsan」のイラスト [pixiv]


FuniSaya Advent Calendar 2013 - Adventarの12日めでした ヾ(〃><)ノ゙

11日めはid:anoworlカッティングプロッタで羽の様な名刺を創ろう - anoworl's blog、次の13日めは@さんのようです。

じひはない

追伸

なんでそこらでUSAMI Kentaさんとか呼ばれてるのかと思ったら、AdventarにGitHubアカウントでログインしてもGitHubのUsernameとかリンクとか出ないの…

*1:が、仕様がないのでぐだぐだとクリエイティビティの話でもしたうございます。何を以て創作とするかは難しいところではございますが、人は人のつくった創作を糧として有形無形の創作を食んで生きてまゐります。本は心の営養などといふことばもございます。現代社会に於ては既に印刷され製本された書籍といふ形式をとらない創作物がワールドワイドウェブに溢れ、だからこそ私奴は営養を無限に得るべくワールドワイドウェブに心惹かれるのです。私奴が人の創作を食むことを好んで生きてゐるのだと自覚をおぼえたのはいつごろだったでせうか。本が自覚的に手にとって能動的に読むものであるのに対して音楽は人の心に自然に染みわたる創作物です。中高生にもなれば深夜ラジオに耽るものも少なからず居りませうが、私奴もその様な少年だったのでございます。音楽は人の心を無意識に侵す創作物です。その無意識の支配下から逃れるべく、能動的に創作物へと向きあふ様になったのではないでせうか。ワールドワイドウェブに触れたのもその頃でしたが、そこで私奴は二次創作のゲームに触れ、そしてそのゲームは自らにもつくることができるのだと学びます。幸いにして当時(2002年頃…?)には僕の好んでゐた様な様式のゲームを作る環境はあったのです。ところが私奴には集中力がございませんので、プロットを練り上げ、ある程度つくった段階で人に見せることもなく、それ以上にほかのひとがつくりあげた創作を食むことに夢中になってしまふのです。ゲーム、小説、SS、音楽、やる夫スレ。さまざまなコンテンツを食み、自ら生み出すことを望みながらも、胸のうちに生まれたがってゐる発想の種の芽生えを感じながらも手を動かすことができない。ひとに見せられる様なものを作り上げることができない。その様なひとがどの程度居るのかは存じ上げませんが、このようなCGM文化の時代に生まれてきてしまって、食欲を上回る情動を持つことができなかった者の業だと申せませう。私奴はいつの日か創作物を排泄することができるように、10代の時間を日本語に、そしていま20代になった今の時間をプログラミングと、それまで以上に多量の創作を食んでいくことに費やして居ります。世界は創作者に溢れてをります。私奴は次の一年に、またはこれから足を踏み入れることになる20代後半に、もしくは今を基点とした後半生のうちに、自らを創作者として自認できるようになれるのでせうか。とはいへ今の時点で、ぐうの音も出ないほど素晴らしい創作物を目にしたときに、たいへんにつらさを感じつつあります。このような誰の毒にも薬にもならない文章も創作の切れ端であることを信じて、神ではない他人と自分の可能性を信仰しつつ、これからも折れずに自らを貫き、賽の河原のような創作を続けることができるでせうか。恥ぢない人生を送りたいものです。まづは料理といふ創作に情熱を燃やしたいと願ひつつ