DT日記

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

2017年7月30日より前の日記

この数ヶ月、息が苦しいって叫びながら、いろんなところに行って氏んでた気がする。

2017年6月9日

1

5時台の山手線は本数が少なくて羽田に行くのはエクストリームだとわかった…

2

東京から福岡にエクストリーム定時出社が事実上可能だと証明してしまった… (おすすめはしません)

3

よかったです

2017年6月10日

1

http://phpcon.fukuoka.jp/2017/phpcon.fukuoka.jp

2

2017年7月15日

1

6年ぶりに夜行バスに乗った。寝坊して飛行機とかに乗り遅れず大阪に行けるソリューション。

2

2017.kphpug.jp

3

よかった

speakerdeck.com

4

当日、飛び入りでしゃべった。

2017年6月2日の日記

1

ぼくがひっそりと作って結構使ってたpsysh.elに機能リクエストと、それとは別のイイ感じのPRが届いてしまって。

github.com

github.com

よっしゃアンタが欲しいなら秒速で作ってやるで、って感じで実装して。

github.com

結果として眠い。

2

ぼくはこの日記のタイトルのような人間であるが、なぜか気の迷ってしまったことがあって

「【オフ会】エンジニア男子 VS おしゃ女子」なる謎? のオフ会? に参加してしまった。

特にコメントすべきことはないんですけど、特に有益な経験はなかったので、次があっても僕は行かない気がします。

3

お得情報をシャエさせていただきますが、暗黒美無王とお話したいときは(任意のエディタ)の勉強会を主催してみると良いかもしれません。

(任意)の例

kantou-emacs.doorkeeper.jp

(といふか、概ねEmacsのイベントでしか会って話したことがなかった気がするお)

4

Emacs Lispでのテキストファイルを末尾から処理する方法について。よくあるプログラミング言語ではちょっぴりめんどくさかったり、文字列を全行 split で輪切りにすることになったりしてめんどくさいんですけど、Emacsなんか、ただのテキストエディタだぞ。

(defun psysh--load-history (path n)
  "Load input history from PATH and return N elements."
  (with-temp-buffer ;; 作業用の一時的なバッファを作る
    (insert-file-contents-literally path) ;; ファイルの内容をそこにぶちまける
    (goto-char (point-max)) ;; バッファの最後までぶっとぶ
    (reverse ;; リストをひっくり返す
     (cl-loop repeat n ;; n回ループする
              do (beginning-of-line) ;; おもむろに行頭にカーソル移動してみる
              never (eq (point) (point-min)) ;; そこがファイルの先頭だったら、読み込むべき内容はないので糸冬了
              collect (buffer-substring-no-properties (point)
                                                      (save-excursion (end-of-line)
                                                                      (point))) ;; 行の内容をまとめる
              do (forward-line -1))))) ;; カーソルを一行上の行に移動

loopマクロは微酔半壊: Common Lisp: loopマクロ用法抄を読めば、書けます。collectmapみたいなもんで、そこにつっこんだ値が最終結果になります。で、それをreverseで反転させます。べんりですね。

2016年とは何だったのか

旧年中も曖昧に生きてきたのだけれど、やってきたことはいろいろあるのでまとめてみる。

何をやってたのか

大方の感想通り、2015年に引き続いてPHPEmacs Lispの年だったのではないか。いままでの人生でいちばんGitHub使ってた気がする。インターネットのつおいひとたちより全然やってない気がするけど。

技術イベントとか

発表したやつ

PHP BLTで3回、社内勉強会のローテーション発表で1回、学生向けインターンシップで1回、カンファレンスっぽいの3回で合計8回かな。しゃべりがぐだぐだで惨敗した一年。

niconare.nicovideo.jp

スライドのホスティングslideshareからニコナレになったのは、ちょうど一年ほど前にslideshareに日本語が入ったスライドのレンダリングが絶望的になったから。speakerdeckは好きじゃないので嫌だなあ、ってところでちょうどニコナレを知ったので新規のスライドはこちらに上げることにした。

ニコナレ氏はスライドの埋め込みをHTTPSで配信可能にしていただきたく、何卒何卒。

参加したやつ

歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」が抜群におもしろかった。これは直接参加してすごい良かった。ろーじー VS κeenの対決*1とか、ほかで見られない異種格闘でプレミアム感があった。

togetter.com

Nimやりたい… そろそろやるか…

思ってること

「勉強会」ってことばはそろそろ再定義されなきゃいけないのでは… もっとしっくりくる言葉があればいいんだけど。

GitHub

芝は概ね.emacsで稼いだやつです。

f:id:zonu_exe:20170103031808p:plain

Contributeしたやつ

ほかにもあったような気がする。

nlamirault/phpunit.elは初めて他人のリポジトリで共同メンテナに指名してもらった。いろいろ追加したい機能とかあるので、がんばりますね ヾ(〃><)ノ゙

作ったやつ

実運用まで持っていったやつ

辛うじて、毎月ひとつ以上のペースではある… PHPEmacs Lispだらけ。

やりかけのやつ

github.com github.com github.com

がんばります。

執筆

雑誌

お蔭さまで2015年に引き続いてPHPの記事を書く機会をいただけました。

  • WEB+DB PRESS Vol.91
    • 【第12回】名前空間とオートローディング ……必要なクラスを無駄なくわかりやすく読み込む
  • WEB+DB PRESS Vol.92
    • 【第13回】PHPからのHTTPリクエスト ……ファイル操作関数,curl関数,Guzzleライブラリ
  • WEB+DB PRESS Vol.94
    • 【第15回】PHP初心者がハマりがちな落とし穴 ……型のキャスト,変数とリファレンス,引数による挙動の違い
  • WEB+DB PRESS Vol.96
    • 【第17回】レガシーなプロダクトの改善 ……フレームワークを利用できない環境でのライブラリ活用

Qiita

f:id:zonu_exe:20170103053720p:plain f:id:zonu_exe:20170103053723p:plain f:id:zonu_exe:20170103053945p:plain

2017年とは一体

睡眠時間が懸念材料なので、いっぱい寝るお… あと、やる夫スレもいっぱい読む。

今年いっぱいはPHPに本気出す。PHPPHPで感じることはあるので、来年はもっと別のことやった方が良いって決断に至る可能性も高い。

2016年は二度も札幌に行ったことだし、2017年は九州方面に旅行してみたいですね。福岡方面とか ヾ(〃><)ノ゙

*1:トレイトを語るならNathanael SchärliらのTraits: Composable Units of Behaviourを読んどけよって話だったので正論

2016年8月27日と28日の日記

1

ねむたさしかない週末。

2

www.b-ch.com

アイランドウォーズが評判よかったので。本放送は途中から見てた。

dic.pixiv.net

dic.pixiv.net

3

Emacs 25.1 RC2でCaskにエラーが出るなと思ったら、term+が原因っぽかった。

github.com

term+ すごく好きななんだけど、手を入れないと動かし続けるの難しいかなあ。

4

はてなブログをむりやりはてなダイアリーっぽく利用するの無理ある。デフォルトで見出しにID付かないし。

5

ヾ(〃><)ノ゙ インスイパイヤー

qiita.com

なんかいろいろ忘れちゃってるよ…

2016年8月26日の日記

1

PHPのshebangとnamespaceの関係について書いてる間に、Flycheckにマージされてた。よかった。

2

最近そこそこがんばって作ってるcomposer.elについて、行きあたりばったりに作ったつもりがそこそこ実用になってるので、そのうち設計意図をメモしておきたい。

github.com

単に「Emacsにひきこもりたいだけだろ」って感じではあるのだけれど、シェルでcdとかしないでもcomposerコマンドを実行できるのは実際べんりが強い。

3

Qiitaで、記事ソース(Markdown)を抽出するブックマークレットを作成しました - Qiita

片手間JavaScriptによる老害コメント

4

電脳警察サイバーコップ

dic.pixiv.net

実家にVHSたぶんある。レンタルビデオ屋がつぶれたときに投げ売られてたやつ。

あいにく俺たちは試験管ベピーだぜベイビー

おう。

2016年8月23〜25日の日記

1

日記を習慣にしようと思ったけど数日置いてしまって後でまとめる現象。

むかしはてなダイアリーってサイトでやったわー。そのうち追従できなくなるやつ。

2

先週Flycheckに送ってたプルリックだけど、そろそろまとまるかな。

github.com

機械翻訳頼りの怪しい英語でしか情報を残しておかないのはどうかと思ふので、日本語でも書いておくね。

FlycheckってのはEmacs向けのシンタックスチェッカーのコレクションで、GNU Emacs標準添付とかじゃないんだけど、これだけ入れておけばいい感じに文法違反をチェックしてくれるやつね。

PHPやってると、趣味でも仕事でもPHPスクリプトを書きたくなることって、よくあるじゃないですか。ここではshebang)がついて、コマンドラインから起動されることを意図したPHPスクリプトのことです。

さて、モダンPHPnamespaceを持つものです。以下のようなhello.phpがあったとしますね。

#!/usr/bin/env php
<?php

namespace Flycheck\Sample;

echo "Hello", PHP_EOL;

このスクリプトは文法違反ではありません。特定の文脈では。

PHPコマンドには文法チェッカが含まれて居り、php -lでSyntax errorがないか確認することができます。php -l hello.phpで文法チェックをすると、文法違反のスクリプトではないことがわかります。

しかし不思議なことに、Flycheckを通すとこのスクリプトはSyntax errorだと警告を受けることになります。

f:id:zonu_exe:20160827013625p:plain

それはなぜか。

@tadsanは終始てきとーな言動しかしないのでPHPは制禦構造を持ったテンプレートエンジンだとかPHPはテンプレートエンジンじゃない。調子に乗るなとか雑に言ったりするんですけど、この問題はまさにPHPの両面性を示したものです。

本来のPHPは、みなさまがよく御存じの通りWebページを作成するためのテンプレートエンジンのような言語です。

<p>今日は<?= date('Y年m月d日') ?>です。</p>

これは文法的には以下のスクリプトとおよそ等価です。

<?php
echo '<p>今日は';
echo date('Y年m月d日');
echo 'です。</p>', PHP_EOL;

ここでふと疑問がよぎります。

#!/usr/bin/env php
<?php

これは echo '#!/usr/bin/env php', PHP_EOL; と等価ではないか、と。

% ./hello.php
Hello
% php ./hello.php
Hello
% php -e < ./hello.php
PHP Fatal error:  Namespace declaration statement has to be the very first statement or after any declare call in the script in - on line 4

Fatal error: Namespace declaration statement has to be the very first statement or after any declare call in the script in - on line 4

おやおや、これは不穏……! Fatal errorになっちゃった。

hello.phpからnamespaceの含まれた行だけを抜いたhello2.phpを作ってみますね。

% php -e < ./hello2.php
#!/usr/bin/env php
Hello

ビンゴ! #!/usr/bin/env phpも標準出力されてきました。つまり、 echo '#!/usr/bin/env php', PHP_EOL; と等価だ。「まじかよ」と思ったら疑念を放置せず、自分の環境で動かしてみてくださいよ。

ここから導きだされる結論は「PHPCLIでファイルを直接実行する場合だけshebangを無視する」です。php -e、つまり標準入力からスクリプトを読み込んだ場合は対象になりません。この現象自体はよく知られたもので、shebangのついたファイルをinclude/requireしたときにはshebangが標準出力される羽目になります。

さて、namespacePHPスクリプトファイル内の最初(ただしdeclareを除く)に書かなければいけないので、echo '#!/usr/bin/env php';に相当する文が存在するとこのルールに違反し、Fatal errorになるわけです。

3

話が長くなったので節を分けますが、これを回避するための結論は「文法チェック時には標準入力は利用せずファイルを利用する」です。

4

qiita.com

5

木曜はnomikai.elと称して、Emacsっぽいひとたちと飲んだ。

6

EmacsM-x はコマンドパレットだ!!

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で動くのかねえ… 動かない気がする。