Hatena::ブログ(Diary)

hnwの日記 このページをアンテナに追加 RSSフィード

[プロフィール]
 

2015年7月18日(土) 初回のコミットをgit rebaseで修正する方法 このエントリーを含むブックマーク このエントリーのブックマークコメント

gitを使っていると、直前の数commitを1コミットにまとめたくなることがあります。そんなときは「git rebase -i」が便利です。


$ git log --pretty=oneline
dc561dbe3e149310246384a64ea816c46514ce1b Modified 3
bd271250523c06c1e5fe325c8347aa8fb7509692 Modified 2
313003363efef2e9e8179ee322f0403d1cc9944f Modified
5946ef0345ce4c81f93957126bf079db18df604a Initial commit

たとえば上の状況で直前の3個を1コミットにまとめたい場合は、git rebase -iで整理することができます。


$ git rebase -i HEAD~3 # 2コミット目3コミット目をsquashにする
[detached HEAD 105ea02] Support ARM/Linux
 1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/master.
$ git log --pretty=oneline
105ea02cc6a75c624cf24570aacc8597d7432f34 Support ARM/Linux
5946ef0345ce4c81f93957126bf079db18df604a Initial commit

やった!最悪なcommitだったのが多少マシになりました。


ところで、最初のcommitを含むような修正をしたいときに上記コマンドは使えません。実際試してみると次のように怒られます。


$ git rebase -i HEAD~2
fatal: Needed a single revision
invalid upstream HEAD~2

HEAD~2(HEADの2個前のコミット)なんて無いよね、と怒られています。そもそもgit rebaseは修正したいコミットの親コミットを指定するスタイルなのですが、最初のコミットには親コミットが無いので指定できないというわけです。なんてこった。


こんなときは「git rebase -i --root」で対応できます。


$ git rebase -i --root # 普段のgit rebase -iと同じように使えます
[detached HEAD ae1e3a9] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 foo
Successfully rebased and updated refs/heads/master.
$ git log --pretty=oneline
ae1e3a9adea0278fd153d44ce52854f81b87254d Initial commit

最初4コミットあったのが1コミットにまとめられました。歴史の書き換えって素晴らしい!*1


もっとも、1コミット目からしくじったような場合はリポジトリごと作り直す方が素直かもしれませんね。


参考:rebase - Squash all Git commits into a single commit - Stack Overflow

*1用法・用量を守って正しくお使いください

トラックバック - http://d.hatena.ne.jp/hnw/20150718

2015年6月24日(水) PHP勉強会10年の歴史をふりかえる このエントリーを含むブックマーク このエントリーのブックマークコメント

PHP勉強会@東京が今月で10周年の節目ということで、大変めでたいですね。僕にとっては初めて参加・発表した社外勉強会だったこともあり、不思議な感慨があったりします。


そこで、ふと思いついてPHP勉強会の10年を表形式でまとめてみました。古参の人が懐古する以外の用途はほぼ無いと思いますが、現在の参加者の方や他の勉強会の運営をしている方の参考になる部分が1%くらいはあるかもしれません。


(企業名などは全て当時の名前です)


2005年

開催日募集ページ募集人数会場提供幹事
2005-06-18 (土)第1回PHP勉強会 in Tokyo24株式会社HDEELF
2005-07-23 (土)第2回PHP勉強会 in Tokyo?株式会社HDEELF
2005-08-28 (日)第3回PHP勉強会 in Tokyo?株式会社ぷらっとホームELF
2005-09-18 (日)第4回PHP勉強会 in Tokyo?株式会社HDEELF
2005-10-22 (土)第5回PHP勉強会 in Tokyo?日本SGI株式会社ELF
2005-11-26 (土)第6回PHP勉強会 in Tokyo25?株式会社HDEELF
2005-12-18 (日)第7回PHP勉強会 in Tokyo20?株式会社びぎねっとhalt

そもそもPHP勉強会はELFさんが立ち上げた勉強会で、初期の参加者はIRCの#PHPチャンネルつながりのメンバーが中心でした。


僕の中で今でも印象に残っているのは、第1回PHP勉強会でセコンさんが空気を読まずにRailsプレゼンをしたことですね。これは後世に語り継いでいきたい歴史だと思います。第7回からはhaltさんが幹事を引き継ぎました。この頃のPHP勉強会は全て土日に開催していました。


2006年

続きを読む

トラックバック - http://d.hatena.ne.jp/hnw/20150624

2015年6月7日(日) Raspberry PiのGPIOは起動直後から内部プルダウンされている このエントリーを含むブックマーク このエントリーのブックマークコメント

Raspberry Pi電子工作をするときの話題です。


Raspberry PiにはGPIOと呼ばれる電子工作に使う端子が出ています。これらのGPIO端子は「プルアップ抵抗」「プルダウン抵抗」の2つを内蔵しており、ソフトウェアから有効・無効を切り替えることができます。


ちなみに、プルアップ・プルダウンというのは端子に何も接続されていない状態で電気的に安定させるためのテクニックで、端子と電源の間に抵抗を入れて接続したり(プルアップ)、端子とグランドの間に抵抗を入れて接続したり(プルダウン)することを言います。


ところで、起動直後にこれらの設定がどうなっているかの資料が見つからなかったので、手元のRaspberry Pi 2で実験してみました。結論としては全端子が初期状態でプルアップまたはプルダウンされており、電気的に不安定なハイインピーダンス状態の端子は一つもないようでした。


一方で、一部書籍・雑誌記事では起動直後のGPIO端子がハイインピーダンス状態になっているかのような記述がありました。初心者が混乱する原因になりかねず、よろしくないですね。


初期状態の一覧

起動直後のRaspberry Pi 2について、全端子を調査した結果は以下の通りです。Raspbianの設定は特に変更しておらず、UART以外の機能は無効になっています。

続きを読む

nanbuwksnanbuwks 2015/08/26 21:42 某書の著者です。UnDocumentedなのは手元の個体以外もそうなっているかどうかの判断が難しいですね。実際に初期のRaspberry Piでは電源投入後短時間でプルアップ/ダウンの状態が変わるものがありました。
他にも2,3の要素を考えて、拙書では冗長的にプルアップ抵抗を取り付けたものを工作例とした経緯があります。

2015年6月2日(火) PHPカンファレンス関西2015でPHP7について発表してきました このエントリーを含むブックマーク このエントリーのブックマークコメント

去る5/30にPHPカンファレンス関西2015で基調講演をさせていただきました。今回は長い枠だったのもあって資料準備にかなりの時間をかけました。その甲斐あってか、好評だったようで何よりです。発表資料は以下になります。



質疑応答やその他の反応について補足

お伝えし忘れたことや誤解を招いた点があったかもしれませんので、4点ほど補足します。


「内部構造を変更したのだから、エクステンションごとにPHP7対応が必要なのではないか?」

その通りです。プレゼンでも紹介したzvalのポインタ参照が一段浅くなっていることや、内部APIが変更された影響があるため、PHP5用のエクステンションをPHP7でビルドしようとしても、そもそもコンパイルすら通らない可能性が高いです。xdebugなど内部構造と密接に関わるエクステンションほど対応に時間がかかるでしょう。


一方で、PHP本体に同梱のエクステンションは既にほぼ動作しています。まだ不穏なエクステンションも残っている気がしますが、beta1が出る頃には落ち着いてくれると期待しています。


また、外部でメンテされているものについても、mamcachedなど有名どころのエクステンションには随分前からPull Requestが出ていたりもします。PHP7リリースまでにはおおむね何とかなっているのではないでしょうか。


ちなみに、各エクステンションの対応状況をまとめているプロジェクトも存在します。



まだまだ空欄が目立つ状況ですが、少なくともPHP同梱のエクステンションについては対応が進んでいることが見て取れるかと思います。


「構文解釈が1フェーズ増えたということだが、構文解釈自体が遅くなったのか?」

続きを読む

トラックバック - http://d.hatena.ne.jp/hnw/20150602

2015年5月25日(月) PHP7で変わること このエントリーを含むブックマーク このエントリーのブックマークコメント

次の土曜日5/30のPHPカンファレンス関西2015で基調講演(10:30-11:15)をさせて頂くことになりました。タイトルは「PHP7で変わること——言語仕様とエンジンの改善ポイント」です。チケットは既に売り切れているそうですが、参加者の方は早起きして来て頂けると幸いです。


このところQiitaに「PHP7調査」というシリーズを連投していたのも発表を意識してのことです。PHP7の新機能を一つずつ実際に試してみて、その結果を簡単にまとめていました。


今回は発表前の区切りとして、私の書いたPHP7関連の記事・プレゼン資料を一覧形式でまとめなおしてみます。PHPカンファレンス関西2015ではこれらの内容を踏まえつつ、気になる点を重点的にお伝えしたいと考えています。


内部実装のリファクタリング

PHP7の目玉と言える、速度改善に関わる内容がほとんどです。


後方互換性を崩すような変更・廃止

今回のPHP7はメジャーバージョンアップということで、PHP5までの挙動を変更するような内容がたくさん採用されています。個人的な見解としては正しく整理されたような箇所が多く、実コードへの影響は軽微だと考えています。とはいえ、実際のところは移行してみないとわかりませんね…。


新しい構文・演算子の実装

マイナーバージョンアップでも新たな構文が入ることはありますが、今回はやけに量が多い印象です。メジャーバージョンアップということで皆が張り切ったのかもしれません。他の言語の影響が見え隠れするのも面白いですね。


新しい関数の実装・オプショナル引数の追加

これらはマイナーバージョンアップでも入るレベルの変更だと言えます。個人的にはCSRPNG関数PHPコアで提供してくれるのが大きいですね。


まとめ

上のリストは多いように思われるかもしれませんが、これでもPHP7の全てを網羅しているわけではありません。PHPカンファレンス関西では記事にしていない内容もお話しする予定ですので、上の記事を全部読んだ方もそうでない方もご期待くださいませ。

トラックバック - http://d.hatena.ne.jp/hnw/20150525
 
ページビュー
1575694