[php]needle in a haystack

Written by uechoco 11月 30
[php]needle in a haystack はコメントを受け付けていません。
この記事を読む時間:227くらい

プログラミングをやっていると、慣習的に用いる変数名、引数名と言った物があります。例えばfor文の変数はi、j、kとか。たまに知らない慣習もあります。今回調べたのは「haystack」と「needle」。文字列検索系の関数の引数名としてよく使われています。例えば下記のstrposやらstrstrやら。

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )

この習慣はphpだけのものではなくて、C言語から来ています。

char *strstr(const char *haystack, const char *needle);

で、実際のところ、なんでhaystackとneedleなのかというところですが、恥ずかしながら、私はhaystackという英単語を知りませんでした。haystackは「干し草」という意味のようです。needleはもちろん「針」ですね。

英語がわかる人には常識なのかもしれませんが、英語には、haystackとneedleという単語を用いた慣用句があるんです。

  • needle in a haystack: 見つけることが不可能なもの、捜しても見つかりそうにないもの、無駄骨
  • find a needle in a haystack: 干し草の山の中の針を見つける、見つかる望みのないものを見つける
  • look for a needle in a haystack: 干し草の山の中にある1本の針を探す、無駄骨を折る

だいたい同じような意味で用いられます。
C言語が定義された頃は、文字列検索関数が対象文字列(haystack)から目的の文字列(needle)を見つけ出す様は、干し草の山の中から針を見つけるくらいに大変なことだった、ということでしょうか?(適当に考えていますが、そういう意味としかとれないですよね)

プログラミングの世界にもうんちく話ってありますよね。
他にもこういった慣習をご存知の方はコメントに書いてください!

[Linux]CentOSにyumでgitを導入

Written by uechoco 11月 27
この記事を読む時間:1951くらい

CentOSのyumでgitを入れようとしても、標準のレポジトリにはありません。

私の場合はrpmforgeからとってきます。rpmforgeの設定はすぐですので、CentOS/rpmforgeリポジトリ – ひつじ帳などを参考に入れておくと便利です。もちろん、通常時はこのレポジトリを使用ないように(自分で)設定するので、勝手に予期せぬバージョンアップとかはしません。rpmforgeはyumの–enablerepoオプションで指定して使います。

あとは、gitをinstallするだけですね。ログはこんな感じです。

  1. [uechoco@localhost src]$ sudo yum install git --enablerepo=rpmforge
  2. Loaded plugins: fastestmirror
  3. Determining fastest mirrors
  4.  * rpmforge: apt.sw.be
  5.  * updates: www.ftp.ne.jp
  6. rpmforge                                                 | 1.1 kB     00:00    
  7. primary.xml.gz                                           | 3.5 MB     02:06    
  8. rpmforge                                                       9732/9732
  9. base                                                     | 2.1 kB     00:00    
  10. primary.sqlite.bz2                                       | 1.6 MB     00:02    
  11. updates                                                  | 1.9 kB     00:00    
  12. primary.sqlite.bz2                                       | 235 kB     00:00    
  13. addons                                                   |  951 B     00:00    
  14. primary.xml.gz                                           |  201 B     00:00    
  15. extras                                                   | 1.1 kB     00:00    
  16. primary.xml.gz                                           | 107 kB     00:00    
  17. extras                                                         325/325
  18. Setting up Install Process
  19. Parsing package install arguments
  20. Resolving Dependencies
  21. --> Running transaction check
  22. ---> Package git.i386 0:1.5.2.1-1.el5.rf set to be updated
  23. --> Processing Dependency: rcs for package: git
  24. --> Processing Dependency: perl(SVN::Core) for package: git
  25. --> Processing Dependency: perl(Git) for package: git
  26. --> Processing Dependency: perl(SVN::Delta) for package: git
  27. --> Processing Dependency: perl(LWP::UserAgent) for package: git
  28. --> Processing Dependency: perl(SVN::Ra) for package: git
  29. --> Running transaction check
  30. ---> Package rcs.i386 0:5.7-30.1 set to be updated
  31. ---> Package subversion-perl.i386 0:1.6.6-0.1.el5.rf set to be updated
  32. --> Processing Dependency: subversion = 1.6.6-0.1.el5.rf for package: subversion-perl
  33. ---> Package perl-libwww-perl.noarch 0:5.805-1.1.1 set to be updated
  34. --> Processing Dependency: perl-HTML-Parser >= 3.33 for package: perl-libwww-perl
  35. --> Processing Dependency: perl(HTML::Entities) for package: perl-libwww-perl
  36. --> Processing Dependency: perl(Compress::Zlib) for package: perl-libwww-perl
  37. ---> Package perl-Git.i386 0:1.5.2.1-1.el5.rf set to be updated
  38. --> Processing Dependency: perl(Error) for package: perl-Git
  39. --> Running transaction check
  40. ---> Package perl-Error.noarch 0:0.17015-1.el5.rf set to be updated
  41. ---> Package perl-HTML-Parser.i386 0:3.62-1.el5.rf set to be updated
  42. --> Processing Dependency: perl(HTML::Tagset) for package: perl-HTML-Parser
  43. ---> Package subversion.i386 0:1.6.6-0.1.el5.rf set to be updated
  44. ---> Package perl-IO-Compress.noarch 0:2.021-1.el5.rf set to be updated
  45. --> Processing Dependency: perl(Compress::Raw::Bzip2) >= 2.021 for package: perl-IO-Compress
  46. --> Processing Dependency: perl(Compress::Raw::Zlib) >= 2.021 for package: perl-IO-Compress
  47. --> Running transaction check
  48. ---> Package perl-Compress-Raw-Zlib.i386 0:2.021-1.el5.rf set to be updated
  49. ---> Package perl-Compress-Raw-Bzip2.i386 0:2.021-1.el5.rf set to be updated
  50. ---> Package perl-HTML-Tagset.noarch 0:3.20-1.el5.rf set to be updated
  51. --> Finished Dependency Resolution
  52.  
  53. Dependencies Resolved
  54.  
  55. ================================================================================
  56.  Package                     Arch       Version              Repository    Size
  57. ================================================================================
  58. Installing:
  59.  git                         i386       1.5.2.1-1.el5.rf     rpmforge      27 M
  60. Updating:
  61.  subversion                  i386       1.6.6-0.1.el5.rf     rpmforge     6.5 M
  62. Installing for dependencies:
  63.  perl-Compress-Raw-Bzip2     i386       2.021-1.el5.rf       rpmforge     108 k
  64.  perl-Compress-Raw-Zlib      i386       2.021-1.el5.rf       rpmforge     169 k
  65.  perl-Error                  noarch     0.17015-1.el5.rf     rpmforge      27 k
  66.  perl-Git                    i386       1.5.2.1-1.el5.rf     rpmforge      18 k
  67.  perl-HTML-Parser            i386       3.62-1.el5.rf        rpmforge     148 k
  68.  perl-HTML-Tagset            noarch     3.20-1.el5.rf        rpmforge      14 k
  69.  perl-IO-Compress            noarch     2.021-1.el5.rf       rpmforge     238 k
  70.  perl-libwww-perl            noarch     5.805-1.1.1          base         376 k
  71.  rcs                         i386       5.7-30.1             base         332 k
  72.  subversion-perl             i386       1.6.6-0.1.el5.rf     rpmforge     2.3 M
  73.  
  74. Transaction Summary
  75. ================================================================================
  76. Install     11 Package(s)        
  77. Update       1 Package(s)        
  78. Remove       0 Package(s)        
  79.  
  80. Total download size: 37 M
  81. Is this ok [y/N]: y
  82. Downloading Packages:
  83. (1/12): perl-HTML-Tagset-3.20-1.el5.rf.noarch.rpm        |  14 kB     00:00    
  84. (2/12): perl-Git-1.5.2.1-1.el5.rf.i386.rpm               |  18 kB     00:00    
  85. (3/12): perl-Error-0.17015-1.el5.rf.noarch.rpm           |  27 kB     00:00    
  86. (4/12): perl-Compress-Raw-Bzip2-2.021-1.el5.rf.i386.rpm  | 108 kB     00:01    
  87. (5/12): perl-HTML-Parser-3.62-1.el5.rf.i386.rpm          | 148 kB     00:02    
  88. (6/12): perl-Compress-Raw-Zlib-2.021-1.el5.rf.i386.rpm   | 169 kB     00:06    
  89. (7/12): perl-IO-Compress-2.021-1.el5.rf.noarch.rpm       | 238 kB     00:06    
  90. (8/12): rcs-5.7-30.1.i386.rpm                            | 332 kB     00:01    
  91. (9/12): perl-libwww-perl-5.805-1.1.1.noarch.rpm          | 376 kB     00:00    
  92. (10/12): subversion-perl-1.6.6-0.1.el5.rf.i386.rpm       | 2.3 MB     01:34    
  93. (11/12): subversion-1.6.6-0.1.el5.rf.i386.rpm            | 6.5 MB     03:26    
  94. (12/12): git-1.5.2.1-1.el5.rf.i386.rpm                   |  27 MB     16:09    
  95. --------------------------------------------------------------------------------
  96. Total                                            29 kB/s |  37 MB     21:36    
  97. Running rpm_check_debug
  98. Running Transaction Test
  99. Finished Transaction Test
  100. Transaction Test Succeeded
  101. Running Transaction
  102.   Updating       : subversion                                      [ 1/13]
  103.   Installing     : subversion-perl                                 [ 2/13]
  104.   Installing     : perl-Compress-Raw-Bzip2                         [ 3/13]
  105.   Installing     : rcs                                             [ 4/13]
  106.   Installing     : perl-Compress-Raw-Zlib                          [ 5/13]
  107.   Installing     : perl-IO-Compress                                [ 6/13]
  108.   Installing     : perl-HTML-Tagset                                [ 7/13]
  109.   Installing     : perl-Error                                      [ 8/13]
  110.   Installing     : perl-HTML-Parser                                [ 9/13]
  111.   Installing     : perl-libwww-perl                                [10/13]
  112.   Installing     : git                                             [11/13]
  113.   Installing     : perl-Git                                        [12/13]
  114.   Cleanup        : subversion                                      [13/13]
  115.  
  116. Installed: git.i386 0:1.5.2.1-1.el5.rf
  117. Dependency Installed: perl-Compress-Raw-Bzip2.i386 0:2.021-1.el5.rf perl-Compress-Raw-Zlib.i386 0:2.021-1.el5.rf perl-Error.noarch 0:0.17015-1.el5.rf perl-Git.i386 0:1.5.2.1-1.el5.rf perl-HTML-Parser.i386 0:3.62-1.el5.rf perl-HTML-Tagset.noarch 0:3.20-1.el5.rf perl-IO-Compress.noarch 0:2.021-1.el5.rf perl-libwww-perl.noarch 0:5.805-1.1.1 rcs.i386 0:5.7-30.1 subversion-perl.i386 0:1.6.6-0.1.el5.rf
  118. Updated: subversion.i386 0:1.6.6-0.1.el5.rf
  119. Complete!

subversionもrpmforgeで入れてるけれど、subversionのアップデートはgitのインストールに関係あるのかな??関係ないよね?

[php]php.iniをミスるとphp.iniが適用されない

Written by uechoco 11月 12
[php]php.iniをミスるとphp.iniが適用されない はコメントを受け付けていません。
この記事を読む時間:137くらい

先日、Mac OS XにMacPortsを使って、apache2、php 5.3.0、MySQL 5.1を導入して、しばらく開発をエンジョイしていたのですが、いろいろと作業をしているうちに、MySQLが使えなくなっていることに気がつきました。

具体的にはsymfony 1.2で、DB設定も前に済んでいて、しばらく開発をしていたのに、突然PDO connectionエラー([2002] No such file or directory、MySQLのソケットファイルが無いときに出るエラーです)がでてきたのです。何がおかしいのだろうといくつか見てみると、php.iniやシェル上のphp -i | lessで閲覧してソケットの設定がしてあるのにも関わらず、当該アプリケーションのディレクトリでphpinfo()を見てみると、php.iniの設定が全く適用されていなかったんです

確かに個々最近、php.iniをちょこちょこ弄った気がしますが、間違ったことはしていないよなと、php -i | lessを見ていたところ、かすかにphp.iniの文法エラーらしき文言を見つけました。そう、php.iniをちょっとでも書き間違えると、mod_php上のphpにはphp.iniが適用されないようなのです

私の場合は、error_reportingのE_ALLからE_DEPRECATEDから取り除こうと変な論理式(確かXORビット演算子を使っちゃったかな?)を書いてしまったようです。

[Mac][Eclipse]Pleiades入り本体のアップデートすると起動に失敗する時の対処法

Written by uechoco 11月 08
この記事を読む時間:216くらい

[mac]eclipseインストールとpleiadesで日本語化というMacのEclipseにPleiadesを導入する記事を書いてるくらいなので、現在使用中のEclipse 3.5にもPleiadesが適用されていますが、たまにトラブルが起きたりします。今回のトラブルは、何らかの、特にElipseコア系のソフトウェアアップデートをした後に、Eclipseが起動しなくなってしまうという現象です。案の定、Pleiadesがトラブルを起こしているのですが、私の場合の現象と解決策を残しておきます。

まず、Eclipseソフトウェアアップデートした後、再起動を促されますので再起動をします。そうすると、スプラッシュ画像の直後にダイアログが出て、「起動失敗したから、logファイルにエラー状況書き込んどいたよ」的な英語が書かれています。Pleiadesの説明書にも書いてありますが、Eclipseソフトウェアアップデートの直後は、必ず1回だけEclipseを-cleanオプションで起動させなければいけません。ターミナルなどで/Application/Eclipseに移動し、eclipse -cleanとコマンドを打つことでPleiadesがクリーン起動します。

通常なら、次回以降の起動はEclipse.appのダブルクリックで済むのですが、たまに前述の起動エラーが続くときがあります。その場合、クリーン起動なら正常起動できるのに、-cleanを付けない通常起動だとどうしても起動エラーになってしまいました。困っていたときに、Pleiadesのreadmeをくまなく読んでいると、強制終了が続く場合、-clean起動の後、configuration/jp.sourceforge.mergedoc.pleiades/ ディレクトリを削除すると直るかもしれないと書いてありました。試しにやってみたら、本当に直りました。

というわけで、Pleiadesでトラブルが起きたら、readmeをくまなく見て、解決策を探してみるのがいいでしょう。起動エラーが続く場合は今回の記事のような対応が書かれています。