こもろぐ @tenkoma

What We Find Changes Who We Become -- Peter Morville著『アンビエント・ファインダビリティ 』

広告:本ブログで紹介している書籍等商品の紹介でAmazonアソシエイトを利用していることがあります。

Macのアプリをクラッシュさせるやつ

ブラクラ作れるかも?と思ったのでやってみた。(下のボタンをクリックするとMacのSafariChromeでクラッシュします。Mac OS X 10.8.2で確認)

※注意※ 以下のコードは不具合の影響を調べることを目的としたものであり、コンピュータやその利用者に被害を与えることを意図したものではありません。

window.prompt() を使うことで簡単にクラッシュできますね。またFirefoxはクラッシュしません。

ブラクラ作成がはかどる…

homebrew で PHP をインストール

http://d.hatena.ne.jp/okonomi/20110501/1304256929

参考に。


# http://d.hatena.ne.jp/okonomi/20110501/1304256929 のものだと、リダイレクトを促すページのHTMLを取得するので
curl -O https://raw.github.com/ampt/homebrew/php/Library/Formula/php.rb
mv php.rb `brew --prefix`/Library/Formula
brew install php --with-mysql --with-apache --with-intl

intl はSymfony2で遊ぶのに必要

…エラーでた make[1]: *** [install-pear-installer] Segmentation fault: 11の部分
pear のインストールでこけてるらしい

==> Installing php
==> Downloading http://www.php.net/get/php-5.3.10.tar.bz2/from/this/mirror
Already downloaded: /Users/tenkoma/Library/Caches/Homebrew/php-5.3.10
==> Patching
patching file ext/tidy/tidy.c
==> ./configure --prefix=/usr/local/Cellar/php/5.3.10 --disable-debug --with-config-file-path=/usr/local/Cellar/php/5.3.1
==> make
==> make install
Installing PHP SAPI module:       apache2handler
Installing PHP CLI binary:        /usr/local/Cellar/php/5.3.10/bin/
Installing PHP CLI man page:      /usr/local/Cellar/php/5.3.10/share/man/man1/
/usr/share/httpd/build/instdso.sh SH_LIBTOOL='/usr/share/apr-1/build-1/libtool' libs/libphp5.so /usr/local/Cellar/php/5.3.10/libexec/apache2
Installing build environment:     /usr/local/Cellar/php/5.3.10/lib/php/build/
/usr/share/apr-1/build-1/libtool --mode=install cp libs/libphp5.so /usr/local/Cellar/php/5.3.10/libexec/apache2/
libtool: install: cp libs/libphp5.so /usr/local/Cellar/php/5.3.10/libexec/apache2/libphp5.so
Warning!  dlname not found in /usr/local/Cellar/php/5.3.10/libexec/apache2/libphp5.so.
Assuming installing a .so rather than a libtool archive.
chmod 755 /usr/local/Cellar/php/5.3.10/libexec/apache2/libphp5.so
[activating module `php5' in /private/etc/apache2/httpd.conf]
unable to open configuration file
Installing helper programs:       /usr/local/Cellar/php/5.3.10/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/Cellar/php/5.3.10/share/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/Cellar/php/5.3.10/lib/php/
make[1]: *** [install-pear-installer] Segmentation fault: 11
make: *** [install-pear] Error 2
make: *** Waiting for unfinished jobs....
Installing header files:          /usr/local/Cellar/php/5.3.10/include/php/
config.log was copied to /Users/tenkoma/Library/Logs/Homebrew
==> Exit Status: 2
http://github.com/mxcl/homebrew/blob/master/Library/Formula/php.rb#L168
==> Environment
HOMEBREW_VERSION: 0.8.1
HEAD: 2f5248f36f6ff292e3e68c09c96693b226ac3ccd
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
Hardware: dual-core 64-bit penryn
OS X: 10.7.3
Kernel Architecture: i386
Xcode: 4.3.1
GCC-4.0: N/A
GCC-4.2: build 5666
LLVM: build 2336
Clang: 3.0 build 211
MacPorts or Fink? false
X11: /usr/X11
System Ruby: 1.8.7-249
/usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
Which Perl:   /usr/bin/perl
Which Python: /usr/bin/python
Which Ruby:   /Users/tenkoma/.rbenv/shims/ruby
==> Build Flags
CC: /usr/bin/clang
CXX: /usr/bin/clang++ => /usr/bin/clang
LD: /usr/bin/clang
CFLAGS:  -w -pipe -march=native -Qunused-arguments -O3
CXXFLAGS:  -w -pipe -march=native -Qunused-arguments -O3
CPPFLAGS: -I/usr/local/Cellar/icu4c/4.8.1.1/include -I/usr/local/Cellar/readline/6.2.2/include -I/usr/local/Cellar/gettext/0.18.1.1/include -I/usr/local/Cellar/libxml2/2.7.8/include -I/usr/X11/include
LDFLAGS: -L/usr/local/Cellar/icu4c/4.8.1.1/lib -L/usr/local/Cellar/readline/6.2.2/lib -L/usr/local/Cellar/gettext/0.18.1.1/lib -L/usr/local/Cellar/libxml2/2.7.8/lib -lstdc++ -L/usr/X11/lib
MAKEFLAGS: -j2
PKG_CONFIG_PATH: /usr/local/Cellar/icu4c/4.8.1.1/lib/pkgconfig:/usr/local/Cellar/libxml2/2.7.8/lib/pkgconfig

Error: Failed executing: make install
If `brew doctor' does not help diagnose the issue, please report the bug:
    https://github.com/mxcl/homebrew/wiki/checklist-before-filing-a-new-issue

先にMac OS X 10.7.3 にアップグレードしたことが影響したのかを疑ったが、原因は Xcode 4.3 をインストールしたことらしい

http://mogutan.wordpress.com/2012/02/18/trouble-installing-xcode4-3/

以下のコマンドは、10.7.3 の影響を疑ったときに実行したコマンド
おそらく上の方はXcode 4.2以前用だと思うので、下の方だけでOKだと思う。

sudo xcode-select -switch /Developer
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

一応以下のコマンドも実行した

sudo chown -R $USER /usr/local
sudo chown -R $USER /usr/local/.git

その後で --use-llvm オプション付きでインストールしたらうまくいった

brew install --use-llvm php --with-mysql --with-apache --with-intl
% brew install --use-llvm php --with-mysql --with-pgsql --with-apache --with-intl     tenkoma@Tanaka-Koji-no-MacBook-Air
==> Downloading http://www.php.net/get/php-5.3.10.tar.bz2/from/this/mirror
Already downloaded: /Users/tenkoma/Library/Caches/Homebrew/php-5.3.10==> Patching
patching file ext/tidy/tidy.c==> ./configure --prefix=/usr/local/Cellar/php/5.3.10 --disable-debug --with-config-file-path=/usr/local/Cellar/php/5.3.1
==> make
==> make install
==> cp ./php.ini-production /usr/local/Cellar/php/5.3.10/etc/php.ini
==> chmod 644 /usr/local/Cellar/php/5.3.10/lib/php/.lock
==> Caveats
   To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php5_module    /usr/local/Cellar/php/5.3.10/libexec/apache2/libphp5.so

    The php.ini file can be found in:
      /usr/local/Cellar/php/5.3.10/etc/php.ini
==> Summary
/usr/local/Cellar/php/5.3.10: 479 files, 28M, built in 11.8 minutes

あとは

LoadModule php5_module    /usr/local/Cellar/php/5.3.10/libexec/apache2/libphp5.so

を /etc/apache2/httpd.conf に追記して、
Include /etc/apache2/extra/httpd-vhosts.conf のコメントアウトをはずす。
/etc/apache2/extra/httpd-vhosts.conf にVirtualHost設定を書く。
システム環境設定からWeb共有をONにしてやる。
で見られるようになった。

uninstall macports, hello homebrew

参考 http://d.hatena.ne.jp/hidde/20090914/1252944208

chpass -s /bin/bash

# exit / reopen shell

sudo port unload apache2 mysql5 mysql5-server
sudo port deactivate active
sudo port -f uninstall installed
sudo port clean all
sudo rm -rf /opt/local
sudo rm -rf /Library/Tcl/macports1.0
ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"
brew install git
brew upgrade

テスト駆動 JavaScript :Internet Explorerにおける、名前付き関数式の実装

「5.3.6 再び関数式について」において、Internet Explorerにおける、名前付き関数式のひどい実装のことが言及されている。

Internet Explorerは、名前付き関数式を前にすると、2つの別々の関数オブジェクトを作り、識別子を外側のスコープにリークし、そのうち1つをホイストしてしまう。

イメージとしては、名前付き関数式と同内容の関数宣言を外側のスコープで行ったようなものなのかな。
ひどさの詳細は、p.102〜p.103 のコードを読めばわかるとして。
これを回避する方法として

私は、必要に応じて分岐が異なれば名前も変わるようにして、クロージャー内の関数宣言を使い、名前付き関数式を避けるようにしている。

とかかれているが、その例となるコードまでは書かれていない。
おそらく次の様なコードだと思う。

名前付き関数式を使った実装

IE で予想しない振る舞いになる、と、この節に書かれているコード

if (!String.prototype.trim) {
  String.prototype.trim = function trim() {
      return this.replace(/^\s+|\s+$/g, "");
  };
}

クロージャと関数宣言を使った実装 (Internet Explorerにおける名前付き関数式の予期しない振る舞いを避けるため)

if (!String.prototype.trim) {
  String.prototype.trim = (function () {
    function trim() {
      return this.replace(/^\s+|\s+$/g, "");
    }
    return trim;
  }());
}

ちなみにこの実装は、p.119 リスト6-16 namespace 関数を読んでようやく思い当たったものだ。