シバン(shebang)をやっと理解した

こんにちは。
composerで提供されているコマンドの中身を見ていたら

#!/usr/bin/env php

と書かれており、そのあとの行にはPHPのコードが。

$ ./shebang-php

のように、phpコマンドを使わずに直接PHPのコードが実行出来るようになっていました
この仕組みは シバン(shebang) というらしいです

シバン自体はBashのスクリプトで似たようなものを何度も見たことがあったのですが、おまじない的に捉えており意味を深く考えていませんでした
拡張子や実行コマンドに縛られず、何の言語で書いても良い実行可能なコードを作るのに適しているのでは? ?
と疑問が湧いたので、調べて理解したものを残しておきます

5分で作るPHPフレームワーク(技術調査、設計編)

こんにちは。
突然ですが、PHPのフレームワークを作ろうと思います。

大層なタイトルを掲げてしまいましたが、制作自体は全く5分ではありません。けっこう時間かかりました
じっくり時間を書けて調査した結果、記事に倣って書けば5分くらいで完成する、という意味での5分です

記事は2本立ての構成で、今回は技術選定・設計編です。

昨今のPHPのテンプレートエンジンについて調べて共通インタフェースを作った

こんにちは。
突然ですが、FuelPHPのビューを書く場合、デフォルトでは生PHP + Viewクラスの構成だと思います。
Viewクラス自体がエスケープ機構を備えているのでXSSは塞げるんですが、生のPHPで書くとisset地獄だったりifが増えたりと不便なところが多く、テンプレートエンジン使いたいと思うことが多々あります。

そんなFuelPHPにはparserというパッケージがあるので、設定を変更すればテンプレートエンジンが簡単に利用できます。

fuelphpでhaml導入したった – ド忘れ防止雑記帳

が、しかし 対応しているテンプレートエンジンの一覧を見てみると、どれも古い。とにかく古い。
良く言えば枯れてるんですが、調べてみると メンテナンスされてないだろこれ… という感じのものが結構ありました。

ということで自分の知見をアップデートするため昨今のテンプレートエンジンについて調べつつ、
parserパッケージのように複数テンプレートエンジンを同一のインタフェースで扱える仕組みを作ってみました。

Fluidで任意のWebページをアプリ化する

こんにちは。
Google AnalyticsのiOS版がなぜか「Temporary unavailable」で何も情報を出してくれなくなってはや1ヶ月。
もうiPhoneでの閲覧はあきらめてPCでどうにかしようと思い立ったものの、 ただでさえ増えがちなChromeのタブを増やしたくない

たくさんタブ開いちゃうとファビコンすら見えなくなって何のタブかわからなくなるんですよね。動作も重くなるので常に必要最小限のタブだけ開いておきたいんです。
かといってApp storeを探してみてもいいAnalyticsのアプリが見つからない。

ということでWebページをアプリ化するFluidというアプリを使用していくつかのWebサービスをアプリ化してみようと思います。

aタグのdownload属性でサーバを介さずにファイルダウンロードする

この記事はHTML5 Advent calendarの16日目の記事です。

HTML5からaタグにdownloadという属性が指定可能になったようです。
この属性が指定されたaタグは、href属性の値をブラウザで開くのではなく、リンク先をファイルとしてダウンロードします。

今までcanvasで画像を生成した画像など、jsで生成したファイルをユーザに保存させるにはwindow.openにdata urlを渡して新窓で表示させ、ユーザに右クリ等で保存してもらう方法しか知らなかったのですが、
aタグのdownload属性がまさにやりたいことドンピシャだったので備忘録を残します。

Goの環境を作るAnsibleの設定をリファクタした

の投稿です。

まだGoもAnsibleも良くわかってない頃に作った、Goの環境を整えるAnsibleの設定をリファクタリングしました。

やってる事はごく当たり前なんですが、冪等性を担保し、changedが出ないことによって何回でもいつでも実行できる環境にしたので、その過程をメモします。

HTML5のConstraint validationでライブラリ要らずならくらくバリデーション

こんにちは。
Hamee Advent Calendar 2015 8日目の記事です。

Chromeの開発者ツールでHTMLの要素を眺めていたらvalidityという属性を見つけました
validityプロパティの中にはpatternMismatch, tooLongなどそれっぽいプロパティとbool値。

調べてみたら フォームのバリデーションはこれだけで十分なのでは
と思うほどに便利だったので詳しい機能の紹介と、より便利に扱う小ネタの紹介です。