phpのクソゲー感

以前に遭遇したクソゲー try..catchのException指定が存在してないクラスでも通るし、_autoload対象外

try {
...
} catch(UndefinedException $e) {
}

UndefinedExceptionがほんとに何でも通る、rubyでいうところの :hogehoge と突然切ってる感じ。
そこまではまだギリギリ許容範囲(納得はしないけど)だけど、_autoload の対象外・・・

直近で遭遇したクソゲー、issetの挙動

[withgod@gis]php -r '$a = "1"; var_dump(isset($a["fizz"]));'
bool(true)
[withgod@gis]php -r '$a = "1"; var_dump($a["fizz"]);'
string(1) "1"
[withgod@gis]php -r '$a = 1; var_dump(isset($a["fizz"]));'
bool(false)
[withgod@gis]php -r '$a = 1; var_dump($a["fizz"]);'
NULL

何を言ってるんだか(略)
ようは文字列の場合はposition持ってるので、issetで渡されたpositionが内部的にatoi掛かって fizz=>0 になって、postion 0には値がセットされてるって事に。

つまり

[withgod@gis]php -r '$a = ""; var_dump($a["fizz"]);'
Notice: Uninitialized string offset: 0 in Command line code on line 1
string(0) ""

こうなる、これははまる・・・
phpは渡ってきた値を検証しないでatoiに渡してるので、文字列渡すと0になるってので何度かはまったことが ‘A`
何度か経験して静的型付けのオプションが欲しくなる訳ですよ・・・

2012年 6月 7日 | Filed under PHP, Program
タグ:

Sinatra with Bundler

俺の少ないrubyの知識だとこうなったけど、これであってる?

Gemfile

source "http://rubygems.org"
gem "sinatra"

app.rb

require "bundler/setup"
require "sinatra"

get "/" do
	"Hello world!"
end

実行

bundle install
bundle exec ruby app.rb
2012年 3月 12日 | Filed under dev, Program, Ruby
タグ:

MacBook Pro (15-inch Early 2011) geekbench

職場で2011 MBP15(メモリ8G、SSD256)買ったので、何時ものごとく?geekbenchやってみた。

geekbench結果

Summary


Section Description ScoreGeekbench Score
Integer Processor integer performance 7229 8801
Floating Point Processor floating point performance 13087
Memory Memory performance 5476
Stream Memory bandwidth performance 5954
Geekbench 2.2.3 for Mac OS X x86 (32-bit)

System Information

Operating System Mac OS X 10.7.2 (Build 11C74)
Model MCJ Co.,Ltd. P55-SD Motherboard MacBook Pro (15-inch Early 2011)
Processor Intel Core i7-2635QM
Processor GenuineIntel Family 6 Model 42 Stepping 7
Processors 4 Threads 8
Cores 4 Memory 8.00 GB 1333 MHz DDR3
Processor Frequency 2.00 GHz Bus Frequency 100 MHz
L1 Instruction 32.0 KB x 4 L1 Data Cache 32.0 KB x 4
L2 Cache 256 KB x 4 L3 Cache 6.00 MB
BIOS Apple Inc. MBP81.88Z.0047.B24.1110141131
2011年 11月 21日 | Filed under dev, diary, etc, Mac
タグ:

less/lvでソースコードに色をつける on OSX

lessでソースコードに色をつける

筆者は試していないが、GNU Source-highlightはMacでも利用できるんじゃないかと思うので、Mac方面の人もぜひ試して頂きたいと思う。

これは便利そうだってことで、osxで試す。

brewでinstall

$ brew install source-highlight

自分はlessじゃなくてlvを常用しているけど、とりあえずlessでお試し

$ LESSOPEN='| /usr/local/bin/src-hilite-lesspipe.sh %s' less -R ./server.js

問題なく色づけされてる

俺はlv常用なのでこんな感じに起動して確認。

/usr/local/bin/src-hilite-lesspipe.sh ./server.js | lv -c

んー、LESSOPEN相当が見当たらない、、

幸いにして俺もvimでwombat使ってるのでcolor schemeも使わせて貰おう。(人-)

2011年 11月 10日 | Filed under dev, Linux, Mac, Program, UNIX
タグ:

Services_Twitter_Uploader

10ヶ月ぐらい掛けてついにリリースw
kiddyに絡まれてうざかったのと、途中いろいろ忙しかったので馬鹿みたいに期間が空いてしまった。
まぁプライベートで適当にやってるとこんなもんさ(俺は)

http://pear.php.net/package/Services_Twitter_Uploader/

2011年 10月 20日 | Filed under dev, PHP
タグ:

git submoduleを一括更新

忘れそうなのでメモ。

git submodule update

は間違い。

git submodule foreach 'git pull origin master'
git commit -a

foreachで全部更新してから、update
updateは嘘でした、updateしたら戻ってまう。

2011年 9月 23日 | Filed under dev
タグ:

debian unstableでgccの切り替え

意外なことに、 gcc が alternativesに登録されてなかったので、手動で登録して切り替え。

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 43 --slave /usr/bin/g++ g++ /usr/bin/g++-4.3 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.3
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 44 --slave /usr/bin/g++ g++ /usr/bin/g++-4.4 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.4
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 45 --slave /usr/bin/g++ g++ /usr/bin/g++-4.5 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 46 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.6

–slaveで連動して g++, gcovとかも切り替える。

これで後は

update-alternatives --config gcc
alternative gcc (/usr/bin/gcc を提供) には 4 個の選択肢があります。

  選択肢    パス            優先度  状態
------------------------------------------------------------
  0            /usr/bin/gcc-4.6   46        自動モード
  1            /usr/bin/gcc-4.3   43        手動モード
  2            /usr/bin/gcc-4.4   44        手動モード
* 3            /usr/bin/gcc-4.5   45        手動モード
  4            /usr/bin/gcc-4.6   46        手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 3

でおk

2011年 9月 1日 | Filed under dev, Linux, UNIX
タグ:

snow leopard 64bit で gpyp

cocoaypが更新止まってて残念だなーって所でgpypがよさげ、って事で動かそうとするも断念

mac portsは使うのやめたので、homebrewにてトライ。

試した環境:

% uname -ar
Darwin crowbar.withgood.net 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:16:10 PST 2011; root:xnu-1504.9.37~1/RELEASE_X86_64 x86_64
~% gcc -v
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5666.3~123/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)
~%brew info boost gtk+ gtkmm libiconv
boost 1.46.1

http://www.boost.org

/usr/local/Cellar/boost/1.46.1 (7731 files, 192M)

http://github.com/mxcl/homebrew/commits/master/Library/Formula/boost.rb

gtk+ 2.24.3

http://www.gtk.org/

Depends on: pkg-config, glib, jpeg, libtiff, gdk-pixbuf, pango, jasper, atk
/usr/local/Cellar/gtk+/2.24.3 (975 files, 33M)

http://github.com/mxcl/homebrew/commits/master/Library/Formula/gtk+.rb

gtkmm 2.18.2

http://www.gtkmm.org/

Depends on: pkg-config, glibmm, gtk+, libsigc++, pangomm
/usr/local/Cellar/gtkmm/2.18.2 (1705 files, 60M)

http://github.com/mxcl/homebrew/commits/master/Library/Formula/gtkmm.rb

libiconv 1.13.1

http://www.gnu.org/software/libiconv/

/usr/local/Cellar/libiconv/1.13.1 (58 files, 2.7M)

http://github.com/mxcl/homebrew/commits/master/Library/Formula/libiconv.rb

とりあえずxpとかypmとかのすでにサービス終了している奴らを抜く patch。

*** ./gpyp-3.8.1.org/src/icons/favicon/Makefile.am	2010-02-27 10:25:34.000000000 +0900
--- ./gpyp-3.8.1/src/icons/favicon/Makefile.am	2011-03-29 13:41:44.000000000 +0900
***************
*** 12,19 ****
  	wget "http://www.google.com/favicon.ico" -O $@ || rm $@
  #kp.ico:
  #	wget "http://kp.podzone.net/favicon.ico" -O $@ || rm $@
! xp.ico:
! 	wget "http://extremeyp.ath.cx/favicon.ico" -O $@ || rm $@
  cp.ico:
  	wget "http://cp.webhop.net/favicon.ico" -O $@ || rm $@
  rp.ico:
--- 12,19 ----
  	wget "http://www.google.com/favicon.ico" -O $@ || rm $@
  #kp.ico:
  #	wget "http://kp.podzone.net/favicon.ico" -O $@ || rm $@
! #xp.ico:
! #	wget "http://extremeyp.ath.cx/favicon.ico" -O $@ || rm $@
  cp.ico:
  	wget "http://cp.webhop.net/favicon.ico" -O $@ || rm $@
  rp.ico:
***************
*** 23,30 ****
  	convert $< $@ || rm $<
  #kp.png: kp.ico
  #	convert $< -delete 0 $@ || rm $<
! xp.png: xp.ico
! 	convert $< -delete 1 $@ || rm $<
  cp.png: cp.ico
  	convert $< -delete 0 $@ || rm $<
  rp.png: rp.ico
--- 23,30 ----
  	convert $< $@ || rm $<
  #kp.png: kp.ico
  #	convert $< -delete 0 $@ || rm $<
! #xp.png: xp.ico
! #	convert $< -delete 1 $@ || rm $<
  cp.png: cp.ico
  	convert $< -delete 0 $@ || rm $<
  rp.png: rp.ico
diff -cr ./gpyp-3.8.1.org/src/icons/favicon/Makefile.in ./gpyp-3.8.1/src/icons/favicon/Makefile.in
*** ./gpyp-3.8.1.org/src/icons/favicon/Makefile.in	2010-03-09 21:59:17.000000000 +0900
--- ./gpyp-3.8.1/src/icons/favicon/Makefile.in	2011-03-29 13:41:53.000000000 +0900
***************
*** 421,428 ****
  	wget "http://www.google.com/favicon.ico" -O $@ || rm $@
  #kp.ico:
  #	wget "http://kp.podzone.net/favicon.ico" -O $@ || rm $@
! xp.ico:
! 	wget "http://extremeyp.ath.cx/favicon.ico" -O $@ || rm $@
  cp.ico:
  	wget "http://cp.webhop.net/favicon.ico" -O $@ || rm $@
  rp.ico:
--- 421,428 ----
  	wget "http://www.google.com/favicon.ico" -O $@ || rm $@
  #kp.ico:
  #	wget "http://kp.podzone.net/favicon.ico" -O $@ || rm $@
! #xp.ico:
! #	wget "http://extremeyp.ath.cx/favicon.ico" -O $@ || rm $@
  cp.ico:
  	wget "http://cp.webhop.net/favicon.ico" -O $@ || rm $@
  rp.ico:
***************
*** 432,439 ****
  	convert $< $@ || rm $<
  #kp.png: kp.ico
  #	convert $< -delete 0 $@ || rm $<
! xp.png: xp.ico
! 	convert $< -delete 1 $@ || rm $<
  cp.png: cp.ico
  	convert $< -delete 0 $@ || rm $<
  rp.png: rp.ico
--- 432,439 ----
  	convert $< $@ || rm $<
  #kp.png: kp.ico
  #	convert $< -delete 0 $@ || rm $<
! #xp.png: xp.ico
! #	convert $< -delete 1 $@ || rm $<
  cp.png: cp.ico
  	convert $< -delete 0 $@ || rm $<
  rp.png: rp.ico
diff -cr ./gpyp-3.8.1.org/src/yellowpage.cpp ./gpyp-3.8.1/src/yellowpage.cpp
*** ./gpyp-3.8.1.org/src/yellowpage.cpp	2010-03-02 13:36:29.000000000 +0900
--- ./gpyp-3.8.1/src/yellowpage.cpp	2011-03-29 14:04:12.000000000 +0900
***************
*** 656,666 ****
  void YPCollection::on_load_default() {
    conf::Collection<YellowPage, YPCollection>::on_load_default();
    add_item(IconManager::CP,       "CP",  "http://cp.webhop.net/");
!   add_item(IconManager::XP,       "XP",  "http://extremeyp.ath.cx/");
    add_item(IconManager::YP4G,     "TP",  "http://temp.orz.hm/yp/");
    add_item(IconManager::RP,       "RP",  "http://retro.servegame.org/");
!   add_item(IconManager::YP4G,     "SP",  "http://bayonet.aa0.netvolante.jp/sp/");
!   add_item(IconManager::CP,       "YPM", "http://cp.webhop.net/ypm/");
    add_item(IconManager::PEERCAST, "YP",  "http://yp.peercast.org/", YPTYPE_XML, false);
  }
  
--- 656,666 ----
  void YPCollection::on_load_default() {
    conf::Collection<YellowPage, YPCollection>::on_load_default();
    add_item(IconManager::CP,       "CP",  "http://cp.webhop.net/");
!   //add_item(IconManager::XP,       "XP",  "http://extremeyp.ath.cx/");
    add_item(IconManager::YP4G,     "TP",  "http://temp.orz.hm/yp/");
    add_item(IconManager::RP,       "RP",  "http://retro.servegame.org/");
!   //add_item(IconManager::YP4G,     "SP",  "http://bayonet.aa0.netvolante.jp/sp/");
!   //add_item(IconManager::CP,       "YPM", "http://cp.webhop.net/ypm/");
    add_item(IconManager::PEERCAST, "YP",  "http://yp.peercast.org/", YPTYPE_XML, false);
  }

上記patchを当てて、次で一応buildは出来た。

LIBS="-L/usr/local/Cellar/libiconv/1.13.1/lib -liconv " ./configure --disable-ss-xss --disable-dbus
LIBS="-L/usr/local/Cellar/libiconv/1.13.1/lib -liconv " make

が、実行するとエラーはいて segfault.
簡単なgtk使ったアプリを試したら一応動いてる。

とここまで記事を書いて、エラーログを書こうと再度実行したら動いた謎。
NSZombieEnabledとかするのって gcc(非xcode環境で)でするのってどうするんじゃーとか色々謎だったのでもう諦めようと思ってたんだが・・・・

で、かなり必死こいて入れてみたけど使ってません。
X11を起動する分には良いんだけど、gtkは(何が悪いんだろうね、まぁフォント綺麗にするとかは後回しでしょう・・・)いくら何でも文字汚すぎ・・・linuxとかでなら良いんじゃないかな、ちょっと見た感じだと機能豊富そう。

一応SS追加

スクリーンショット(2011-03-31 14.40.26)2

2011年 3月 29日 | Filed under dev, Mac
タグ:

snow leopard 64bit + homebrew で gettext, readline のメモ

何も考えずに brew install readline gettext だけだと不味かったのでメモ。

brew install readline
brew link readline

まず readline は入れただけだと libedit と競合するから brew link readline する。

そのまま brew install gettext だと問題が出るので次のようにして universal binary にしておく(readlineはデフォでuniversal binary)

brew edit gettext

して、systemの前に

ENV.universal_binary

を追加する、こんな感じ

    ENV.universal_binary
    system "./configure", "--disable-dependency-tracking", "--disable-debug",
                          "--prefix=#{prefix}",

後はgettext同様に

brew install gettext
brew link gettext

これって readline だけの問題じゃなくて、homebrewで作ると大抵のものが universal binaryで出来ないっぽくて、その辺に転がってるソースをbuildすると刺さる、刺さる。
1個か2個ぐらいだろって思ってたけど、結構な数をし直さないと駄目かも・・・

2011年 3月 29日 | Filed under Mac, memo
タグ:

Services_OAuthUploader改めServices_Twitter_Uploader

以前書いたServices_OAuthUploaderっていうパッケージ。
Pearにproposalして色々やりとりした結果、名前も改めてやっと出せそうな感じ。
途中でいわゆるkiddyに絡まれてやる気無くしたりもしたけど、tillってメンテナがsupportしてくれたおかげでやっとリリースにこぎつけられそう。

2011年 3月 3日 | Filed under dev, PHP, Program
タグ:

rider.withgod.jp – blog is Stephen Fry proof thanks to caching by WP Super Cache