"ブランチ名:ファイルパス名" という表記を使えば簡単です。 例:br1ブランチのfoo/bar.tx と br2ブランチのhoge/fuga.txtを比較したい git diff br1:foo/bar.txt br2:hoge/fuga.txt ちなみに異なるブランチ間の同じファイルを比較する場合は、 git diff br1 br2 foo/bar.txt のように書けます。
free()まわりでエンバグしたのかと思ってコードをいじってるとさらにこんなエラーが。 *** glibc detected *** minigit: munmap_chunk(): invalid pointer: 0x0000000001b01050 *** ======= Backtrace: ========= /lib64/libc.so.6(+0x760e6)[0x7f134cff20e6] /lib64/libc.so.6(fclose+0x14d)[0x7f134cfe274d] minigit[0x4026bc] minigit[0x402a0e] minigit[0x402c20] /lib64/libc.so.6(__libc_start_main+0xfd)[0x7f134cf9acdd] minigit[0x400fa9] ======= Memory map:
PHPで"echo"とか"list"という名前のメソッドを作って文法エラーになった経験はないでしょうか? ほとんど知られていないのですが、実はPHP7からは"echo",“list"などの予約語がメソッド名として使えるんです。 <?php class Foo { public function list() { echo "list\n"; } public function echo() { echo "echo\n"; } public static function die() { echo "die\n"; } } $foo = new Foo(); $foo->list(); $foo->echo(); Foo::die(); PHP 5だと文法エラーになっていた $ php a.php PHP Parse error: syntax error, unexpected 'lis
MySQL v5.7ではrootの初期設定まわりがいろいろ変わっており、 v5.6をベースにした記事を見てもそのままでは使えなかったりします。 Ansibleを使ってMySQL 5.7をインストール・初期設定するところまでできたのでやり方を紹介します。 注意 これはあくまで簡易版で、Vagrantのような開発環境構築を想定しています。 本番サーバに適用する場合はもっとセキュリティを重視する必要があるでしょう。 自分はMySQLに関しては初級者なので、ツッコミ歓迎です。もっといいやり方があれば教えてください。 手順 RPMを使ってMySQL5.7をインストールする ログファイルを解析してrootのパスワードを得る rootのパスワードを /root/.tmp.my.cnf に記述する /root/.tmp.my.cnf を使ってrootログインし、rootのパスワードを変更する と同時に新パ
Node.jsでスクレイピングをするならcheerioというライブラリを使うと簡単にできます。 https://www.npmjs.com/package/cheerio 例: Wikipediaのイーロン・マスクのページからプロフィール概要を抜き出す var request = require("request"); var cheerio = require("cheerio"); var url = "https://en.wikipedia.org/wiki/Elon_Musk"; request(url, function (error, response, body) { var $ = cheerio.load(body); var x = $("#mw-content-text p").eq(0).text(); console.log(x); }); 実行結果 $ nod
公式サイト・ドキュメント AWS SDK for PHPの公式ドキュメント http://docs.amazonwebservices.com/AWSSDKforPHP/latest/ AWS SDK for PHPの公式Twitterアカウント https://twitter.com/awssdkforphp AWS SDK for PHPのリリースノート http://aws.amazon.com/releasenotes/PHP AmazonS3 APIドキュメント http://docs.amazonwebservices.com/AmazonS3/latest/API/Welcome.html ※1:例えばPerlだと非公式のCPANモジュールを使うしかないのですが、Amazon::S3はもう3年間もメンテされていなくて若干悲しい思いをしました。 AWS SDK for PHPを
なお、本記事はx86_64(64bit)環境を前提にしています。 レポジトリファイルをダウンロード まずはレポジトリファイルをダウンロードしましょう。 実はここが鬼門で、レポジトリのURLやファイル名はころころ変わります。(404 not foundなどのエラーが出たりします) ダウンロードできない場合はあわてずにレポジトリファイルを自力で探せばすぐ見つかりますので、じっくり見てみてください。 epel wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm ※上記ファイルが存在しない場合は、下記URLからepel-releaseで始まるファイルを探してダウンロードしてください。 http://dl.fedoraproject.org/pub/epel/6/x86_64/ remi wge
DockerHubでは公式のMySQLイメージが無料で公開されています。 これを使えば簡単にDockerでMySQLサーバを起動することができます。データの永続化もできます。 https://hub.docker.com/_/mysql/ 2015年10月現在では下記3種類のバージョンが用意されています。 タグを指定することで任意のバージョンのイメージを取得できます。 5.5 5.6 5.7 (latest) イメージの取得方法 docker pull mysql これで最新の安定版を取得できます。 バージョンを明示的に取得したい場合はタグを使います。 docker pull mysql:5.7 (2015/10/25現在だと、mysql, mysql:latest, mysql:5.7, mysql:5.7.9はどれも同じイメージを指します。) これのDockerfileを見たい場合はこ
仕事で使っているPHPアプリケーションをPHP7 beta1で動かしてみたらそのままでは動きませんでした。 私が実際にはまった点を紹介します。 なお、PHP7の変更点についてはhnwさんの記事に詳しく網羅されているのでご一読ください。 PHP7で変わること - hnwの日記 Apacheのモジュール名が変わっていた ApacheにPHPを組み込むためのモジュール(俗にいうmod_php)のモジュール名・ファイル名が変更になっていました。 LoadModule php5_module modules/libphp5.so ↓ LoadModule php7_module modules/libphp7.so memcache extensionがインストールできない PHPからMemcachedを使うためのExtensionには2つあります。 memcache memcached memca
なお、時間設定方法や書式についてはここでは解説しません。 拙作「くろんメーカ」をお使いください。 くろんメーカ - crontab用のコマンドを自動で生成します。 そのままコピペしてお使いください。 crontab -e で直接編集しない 有名な話ですが、crontab -r とやってしまうと全てが一瞬で消え去ります。 まさにバルス! 間違えて crontab -r してしまい、crontab をふっとばしてしまった。つか、隣同士にある -e と -r で編集と削除とか、酷いよ><。。。 crontab -r を安全にする - antipop 必ずローカルファイルに設定を書いたうえで、それを反映させるようにしましょう。 $ crontab -l > ~/crontab # 現在の設定をバックアップ $ vi ~/crontab # ローカルファイルを編集 $ crontab < ~/cro
Home Subscribe 最近 ChefDKという全部入りパッケージがリリースされたので、これで一発です。 http://www.getchef.com/downloads/chef-dk/ CentOS6だとこんな感じで一発です。 sudo rpm -ivh https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.3.0-1.x86_64.rpm rubyとかrbenvとかgemとかの環境について頭を悩ませる必要がないのでとても楽です。 ちなみにChefDKを使わずに自力でこれらをインストールしようとするとどうなるかというと、すごい時間がかかります。 とくにBerkshelfが依存しているライブラリで"dep-selector-libgecode" というのがものすごい怪物のようなしろもので、コンパ
はじめに これから書く内容は、シェルスクリプトをばりばり書いている現場(サーバエンジニア・インフラエンジニア)向けのものではありません。 年に数回crontabをいじるような現場(サーバに詳しくないアプリケーションプログラマが多数を占めるような現場とか、Webデザイナや非プログラマがcrontabをおそるおそるいじったりするような現場)を想定しています。 >/dev/null 2>&1 の問題点 この記法の問題点は、「覚えにくい、間違えやすい、間違ってても気づかない」ということです。 初心者を迷わせる要素がこんなにあります。 >/dev/nullは先か後か 1と2はどちらが先か &はどこに書くのか よって下記のように多種多様なミスが起こり得ます。 2>&1 >/dev/null >/dev/null 1>&2 >/dev/null 2>1& >/dev/null &2>1 これをぱっと見て
例えばberkshelfひとつ入れるのに、膨大な知識がいる。 もしあなたが単にPHPサーバを作りたいだけだったとしても、berkshelfをちゃんとしたモダンなやり方でいれるには膨大な知識がいる。 例えばruby, rbenv, ruby-build, gem, bundlerなどだ。 まあ、rbenvとruby-buildで最新のrubyを入れること自体はそんなに難しくない。Ruby言語の知識も必要ない。 運よくgem install berkshelfが一発で成功したら、別に問題はない。おめでとう。 そういう人はここから下は読む必要はないです。 ところがである。 ひとたびgem installが失敗したら、そこからは茨の道である。 インフラの問題 gem installしたら "ERROR: Could not find a valid gem 'chef-solo' (>= 0) i
所要期間 着手しはじめたのが2010年12月ごろ、完了したのが2013年9月だったので何と3年近くかかったことになります。 長引いた原因は、日々の機能追加や運用をしながら孤独に片手間で細々とやってたからです。(単純に人手不足とも言う) また、PHPバージョンアップと同時にCentOSサーバを5から6にあげることにしたのでサーバ再構築のための工数も含まれています。 後半は仕事仲間が増えてその人が専業でバージョンアップ作業をやってくれたのでだいぶ楽できました。 それと専任のテスターさんたちにも参加していただいたので本番で大きなトラブルなく完了することができました。 感謝感謝です。 サーバ入れ替え作業が終わってPHP5.1の入った古いサーバを削除したときの、まさに「技術的負債」を返済し終わった瞬間の、あのスッキリ感、もう言葉にはできません。 終わってみてこの件に関するRedmineのチケットを数
Git 1.8.5から、HEADと書くかわりに@が使えるようになったようです。 Instead of typing four capital letters "HEAD", you can say "@" now, e.g. "git log @". https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.5.txt 試してみた git log $ git log -1 @ commit db9bdfbeb044f73a01f6325f4ad61413666a2ce0 Author: Junio C Hamano <gitster@*****.***> Date: Fri Oct 18 13:53:05 2013 -0700 Update draft release notes to 1.8.5 Signed-of
外部サイトのJSファイルを読み込むときに、こういう書き方するのはやめましょう。 <script src="http://example.com/js/jquery.js"></script> 理由 あなたのサイトが、いつの日かSSLに対応することになったとき、そのscriptタグがバグの原因になります。 ご覧のとおり、HTTPSページの中でHTTP要素を読み込もうとすると、ブラウザによっては安全装置が働いて読み込んでくれないのです。 上の例ではjQueryの読み込みに失敗していますが、エラーメッセージ「Uncaught ReferenceError: jQuery is not defined 」を見てもHTTPS/HTTPのプロトコルが原因だとはすぐ気づかないので、わかりにくいバグになってしまいます。 結論 JSファイル(とかCSSとか画像とか)を読み込むときは、"http:"の部分を省
Home Subscribe var obj = { name : 'pikachu', say : function(){ alert('I am ' + this.name); } } setTimeout(obj.say, 1000); // => 'I am'とだけ表示される。 これは期待通りに動いてくれません。 コールバックとしてメソッドを渡した場合、それはオブジェクトと切り離された単なる関数(メソッドではない)となってしまうのです。 つまり下記と等価なのです。 setTimeout( function(){alert('I am ' + this.name);} , 1000); 関数がオブジェクトと切り離されているため、このthisはグローバルオブジェクト(windowオブジェクト)を指してしまっており、'I am'とだけ表示されます。 ではどうすればよいでしょうか? bin
動機 Subversionで困ってない ぶっちゃけSubversionで全然困っていませんでした。 コードレビューはちゃんとやっていたし、マージ・ブランチングも自作シェルスクリプトのおかげてスムーズにやれていました。 よく「Gitはマージが賢い、ブランチ作成が一瞬でできる」とかいわれますが、Subversionだってちゃんと使えばコンフリクトなんかめったに起きないし、ブランチ管理・マージだって全然めんどくさくない。 特にver1.7からはサーバもクライアントも大幅に高速化されたし、.svnディレクトリが.gitみたいに1個になったし、rebaseみたいなことだってできる。(sync merge & reintegrate) ただ、世の中が一斉にGitにシフトしている中でいつまでもSubversionを使っててよいのかという不安がありました。 また、月から金までSubversionにどっぷり
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く