• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
 
 

MongoDB Advent Calendar 2013 の 5日目です。

 先日、MongoDB University M101P コースのTAをさせていただく機会に恵まれました。MongoDB University というのはMongoDB社が提供している、MongoDBを使用したプログラミングについてオンラインで学習できるコースです。

スクリーンショット 2013-12-01 18.00.25.png

 TA(Teaching Assistant) というのはコース内のフォーラムで、受講している生徒からの質問等に回答するのが主な役割です。以前は英語版のコースのみだったのですが、Pythonを使用したプログラミングの学習コース(M101P)のビデオが日本語でも提供されることになり、日本語を話す受講者のために日本人のTAが必要ということになりました。MongoDB University の各コースでは修了時にアンケートをとっていて、以前私が英語版で受講したときのアンケートで、TAや翻訳等の機会があれば協力しても良いか、という質問にYesと回答していたためにオファーをいただいたようです。TAを努めたそのコースも先日終了したので、感じたことや気づいたこと等書いてみたいと思います。MongoDBの技術的な話とはちょっと違ってしまいますが、ご容赦ください。

  1. 日本語での生徒からの投稿ゼロ

     まず結果として日本語でのフォーラムへの投稿数はというと、残念ながら0でした。日々フォーラムをチェックしていると、英語でのポストはどんどん増え、活発にやりとりされていくのですが、日本語でのポストはないまま終わってしまいました。そもそもJapanese Speakerの受講者がEnglish Speakerに比べてかなり少ないということはあると思いますが、こういったところでの積極性はやはり日本人よりも欧米の方々の方が強いのかなぁと思いました。

  2. 使用しているバージョンや環境などによる違いが大きい

     M101PはPythonを使用したプログラミングについてのコースで、前提としているPythonのバージョンは2.7であることも記載されているのですが、3系を使用しているために提供されているコードが正しく動作しないというポストがかなり多く見られました。また、シンプルにローカルのPC上で動かす意外にも、OpenShift などのクラウド環境で動かそうとしているがうまくいかない、というような内容もありました。私自身はローカルのPC上で動かす意外には業務でAWS上のMongoDBのクラスタ環境に触れる機会はあるのですが、それ以外に多くの環境で動作させた経験はなく、さらにOSもLinux, MacOS, Windowsなどによって細かい点はだいぶかわってくるので、様々な環境の理解や、MongoDBがどのように動作するかの詳細の理解が全く足りていないなぁと感じました。コースの範囲としてどこまでカバーするかというのはありますが、TAとして関わる以上はできるだけ助けになるような回答をしたいと思っています。

  3. MongoDBの詳細な仕様について理解することが重要

     質問では、コースのビデオの中では解説していない細かい点についても質問がくることがあります。例えばexplainの出力のこの項目はこっちの項目とどう違うんだ、とか、こういう用途でMongoDBを使う場合は、モデリングはどっちが向いているのか、など。自分がユーザとして使う分には知らなくても特に困らないような問題でも、やはりTAとして回答するには色々理解している必要があります。また、前項の内容に関連して、詳細を理解していないと他の環境で使ったときの動作がわからないということも出てきます。

  4. 英語力重要

     TAとしては一応日本語担当なのですが、日本語でのポストもありませんでしたし、TAである以上は英語のポストにも回答していきたいと思うのですが、まだまだ自分の英語力は不足していて、質問の意図を理解しきれなかったり、理解するまでに時間がかかってしまうことが多く、他のTAの方にお任せするということになって悔しい思いをしました。もちろん英語力だけでなく前述の技術的なところの不足に起因する部分も多いのですが、やはり英語ができないことでのデメリットを痛感しました。TAのオファーをいただいたときにも、最初にMongoDBの方とSkypeでミーティングをしたのですが、もちろん英語でのミーティングで、私の受け答えもかなり怪しかったので、MongoDBの方を不安にさせたのではないかと思っています。。

     受講する側で考えたときも、今回のコースについてはビデオは日本語でのボイスオーバーが提供されているものの、各週のホームワークや最終試験はすべて英語ですので、技術的には理解していても設問が理解できないと回答できません。フォーラムでのやりとりも参考になるものも多いので、やはり英語ができることでのメリットは大きいです。

  5. アウトプット重要

     TAのオファーをいただいたとき、受けるかどうかかなり迷いました。MongoDBの知識に自信があったわけでもありませんでしたし、ユーザグループで積極的に活動していたわけでもなかったので、務まるだろうかとかなり不安でした。でも逆にこれによってMongoDBのことをさらに知る機会にもなるかもしれないし、英語力をアップさせるためにも英語を使う機会を増やしたいと思っていたので、思い切って受けることにしました。結果としてはやって良かったと思っています。コース期間中は日々フォーラムをチェックする必要がありましたし、受講者の方は回答を待っているので気が休まりませんでしたが、おかげでアウトプットの機会も増え、また、このAdvent Calendarにも参加するためのネタにもなりました。もちろん自分で黙々とスキルアップに励む時間も大切なのですが、アウトプットすることによって得られることも多いので、今後も機会があれば積極的にアウトプットする場を作っていきたいと思っています。

 M101Pコースは11/25からまたスタートしています。MongoDBについて一通り学習するにはとても良いコンテンツだと思いますので、興味のある方は是非受講してみてください。前回のコースで日本語での質問がなかったので今回のコースでは日本語対応のTAはアサインされていませんが、ビデオは日本語対応されていますので、英語が不安な方も大丈夫だと思います。

 以上、MongoDB Advent Calendar 2013 5日目でした。

posted by Png akanuma on Thu 5 Dec 2013 at 08:34

show processlist だとすべてのDBのコネクションが表示されるので、 show processlist コマンドで出力される情報のもとになっている、 information_schema.processlist テーブルにクエリを発行して確認する。

   1  mysql> desc information_schema.processlist;
   2  +---------------+---------------------+------+-----+---------+-------+
   3  | Field         | Type                | Null | Key | Default | Extra |
   4  +---------------+---------------------+------+-----+---------+-------+
   5  | ID            | bigint(4)           | NO   |     | 0       |       |
   6  | USER          | varchar(16)         | NO   |     |         |       |
   7  | HOST          | varchar(64)         | NO   |     |         |       |
   8  | DB            | varchar(64)         | YES  |     | NULL    |       |
   9  | COMMAND       | varchar(16)         | NO   |     |         |       |
  10  | TIME          | int(7)              | NO   |     | 0       |       |
  11  | STATE         | varchar(64)         | YES  |     | NULL    |       |
  12  | INFO          | longtext            | YES  |     | NULL    |       |
  13  | TIME_MS       | bigint(21)          | NO   |     | 0       |       |
  14  | ROWS_SENT     | bigint(21) unsigned | NO   |     | 0       |       |
  15  | ROWS_EXAMINED | bigint(21) unsigned | NO   |     | 0       |       |
  16  | ROWS_READ     | bigint(21) unsigned | NO   |     | 0       |       |
  17  +---------------+---------------------+------+-----+---------+-------+
  18  12 rows in set (0.00 sec)
  19  
  20  mysql>select * from information_schema.processlist where db = <db_name>;

posted by Png akanuma on Fri 20 Sep 2013 at 11:35

Ubuntuにmongodbをインストールしたので内容をメモしておきます。

まずapt-keyを追加します。

   1  $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

10genのリポジトリを追加します。

   1  $ sudo vi /etc/apt/sources.list.d/10gen.list
   2  $ cat /etc/apt/sources.list.d/10gen.list 
   3  deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen

aput-getをupdateしてからmongodbをインストールします。

   1  $ sudo apt-get update
   2  $ sudo apt-get install mongodb-10gen

設定ファイルは下記に置かれます。

   1  $ ls -l /etc/mongodb.conf 
   2  -rw-r--r-- 1 root root 1891  8月 10 00:59 /etc/mongodb.conf

制御スクリプトは下記にあります。

   1  $ ls -l /etc/init.d/mongodb 
   2  lrwxrwxrwx 1 root root 21  8月 10 00:59 /etc/init.d/mongodb -> /lib/init/upstart-job

データファイルとログファイルは下記に置かれます。

   1  $ ls -ld /var/lib/mongodb/
   2  drwxr-xr-x 2 mongodb mongodb 4096  8月 15 22:54 /var/lib/mongodb/
   3  $ ls -ld /var/log/mongodb/
   4  drwxr-xr-x 2 mongodb mongodb 4096  8月 15 22:54 /var/log/mongodb/

mongodbの停止、起動、再起動は下記コマンドで行えます。

   1  $ sudo service mongodb stop
   2  mongodb stop/waiting
   3  $ sudo service mongodb start
   4  mongodb start/running, process 18470
   5  $ sudo service mongodb restart
   6  mongodb stop/waiting
   7  mongodb start/running, process 18531

mongoシェルを起動して動作確認します。

   1  $ mongo
   2  MongoDB shell version: 2.0.7
   3  connecting to: test
   4  > db.test.save( { a: 1 } )
   5  > db.test.find()
   6  { "_id" : ObjectId("502badfff87e50337751f7b0"), "a" : 1 }

posted by Png akanuma on Wed 15 Aug 2012 at 23:12

Nginx、php-fpm、FuelPHPの環境で開発することになったので、 開発環境を構築してみました。

<参考書籍>
ハイパフォーマンスHTTPサーバ Nginx入門
はじめてのフレームワークとしてのFuelPHP
<参考サイト>
FuelPHPをNginxで動かしてみる

PHPインストール

ソースのダウンロードと展開

   1  $ wget -O php-5.3.15.tar.gz http://jp2.php.net/get/php-5.3.15.tar.gz/from/jp.php.net/mirror
   2  --2012-08-13 18:13:07--  http://jp2.php.net/get/php-5.3.15.tar.gz/from/jp.php.net/mirror
   3  jp2.php.net (jp2.php.net) をDNSに問いあわせています... 49.212.134.217
   4  jp2.php.net (jp2.php.net)|49.212.134.217|:80 に接続しています... 接続しました。
   5  HTTP による接続要求を送信しました、応答を待っています... 302 Found
   6  場所: http://jp.php.net/distributions/php-5.3.15.tar.gz [続く]
   7  --2012-08-13 18:13:08--  http://jp.php.net/distributions/php-5.3.15.tar.gz
   8  jp.php.net (jp.php.net) をDNSに問いあわせています... 61.195.146.164
   9  jp.php.net (jp.php.net)|61.195.146.164|:80 に接続しています... 接続しました。
  10  HTTP による接続要求を送信しました、応答を待っています... 200 OK
  11  長さ: 14806681 (14M) [application/x-gzip]
  12  `php-5.3.15.tar.gz' に保存中
  13  
  14  100%[======================================>] 14,806,681  67.7K/s   時間 3m 49s
  15  
  16  2012-08-13 18:16:57 (63.0 KB/s) - `php-5.3.15.tar.gz' へ保存完了 [14806681/14806681]
  17  $
  18  $ tar zxf php-5.3.15.tar.gz

phpのビルドに必要なライブラリのインストール

   1  $ sudo apt-get install libxml2-dev libevent-dev

PHP-FPMを有効化してconfigure

   1  $ ./configure --enable-fpm

PHPインストール

   1  $ sudo make all install

PHP-FPM用ユーザ作成

   1  $ sudo useradd --shell /sbin/nologin php-fpm

PHP-FPM設定ファイル作成

   1  $ sudo cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
   2  $ sudo vi /usr/local/etc/php-fpm.conf
   3  $ diff /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
   4  140,141c140,141
   5  < user = nobody
   6  < group = nobody
   7  ---
   8  > user = php-fpm
   9  > group = php-fpm

PHP-FPM起動

   1  $ sudo /usr/local/sbin/php-fpm
   2  $ ps aux | grep php-fpm | grep -v grep
   3  root     20053  0.0  0.1  15688  2032 ?        Ss   20:28   0:00 php-fpm: master process (/usr/local/etc/php-fpm.conf)
   4  php-fpm  20054  0.0  0.1  15688  1576 ?        S    20:28   0:00 php-fpm: pool www      
   5  php-fpm  20055  0.0  0.1  15688  1576 ?        S    20:28   0:00 php-fpm: pool www      

nginxインストール(php-fpm有効化)

gccがインストールされていることを確認

   1  $ which gcc
   2  /usr/bin/gcc

PCRE(Perl Compatible Regular Expression: Perl互換正規表)ライブラリをインストール

   1  $ sudo apt-get install libpcre3 libpcre3-dev

zlibライブラリインストール

   1  $ sudo apt-get install zlib1g zlib1g-dev

OpenSSLインストール

   1  $ sudo apt-get install openssl libssl-dev

Nginxのソースのダウンロードと展開

   1  $ wget http://nginx.org/download/nginx-1.2.3.tar.gz
   2  --2012-08-13 11:03:03--  http://nginx.org/download/nginx-1.2.3.tar.gz
   3  nginx.org (nginx.org) をDNSに問いあわせています... 206.251.255.63
   4  nginx.org (nginx.org)|206.251.255.63|:80 に接続しています... 接続しました。
   5  HTTP による接続要求を送信しました、応答を待っています... 200 OK
   6  長さ: 723294 (706K) [application/octet-stream]
   7  `nginx-1.2.3.tar.gz' に保存中
   8  
   9  100%[======================================>] 723,294     68.0K/s   時間 11s   
  10  
  11  2012-08-13 11:03:14 (65.1 KB/s) - `nginx-1.2.3.tar.gz' へ保存完了 [723294/723294]
  12  
  13  $ 
  14  $ tar zxf nginx-1.2.3.tar.gz 
  15  $ 

Nginx用ユーザ作成

   1  $ sudo useradd --shell /sbin/nologin nginx

Nginxビルド、インストール

   1  $ cd nginx-1.2.3/
   2  $ ./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module
   3  $ make
   4  $ sudo make install

Nginx起動確認

   1  $ sudo /usr/local/nginx/sbin/nginx
   2  $ ps aux | grep nginx | grep -v grep
   3  root     14718  0.0  0.0   5792   684 ?        Ss   17:58   0:00 nginx: master process /usr/local/nginx/sbin/nginx
   4  nginx    14719  0.0  0.1   5948  1316 ?        S    17:58   0:00 nginx: worker process      

PHP-FPM,Nginx,FuelPHPの連携設定

   1  $ sudo vi /usr/local/nginx/conf/nginx.conf
   2  $ diff /usr/local/nginx/conf/nginx.conf.default /usr/local/nginx/conf/nginx.conf
   3  37a38,39
   4  > 	root /var/www/fuelphp-sample/public;
   5  > 	index index.php;
   6  39c41
   7  <         #charset koi8-r;
   8  ---
   9  >         charset utf-8;
  10  41c43,44
  11  <         #access_log  logs/host.access.log  main;
  12  ---
  13  >         access_log  logs/fuelphp-sample.access.log;
  14  >         error_log   logs/fuelphp-sample.error.log;
  15  42a46
  16  >         # すべてのアクセスをindex.phpに振る。
  17  44,45c48
  18  <             root   html;
  19  <             index  index.html index.htm;
  20  ---
  21  >             try_files $uri /index.php?$uri$args;
  22  48,54c51,57
  23  <         #error_page  404              /404.html;
  24  < 
  25  <         # redirect server error pages to the static page /50x.html
  26  <         #
  27  <         error_page   500 502 503 504  /50x.html;
  28  <         location = /50x.html {
  29  <             root   html;
  30  ---
  31  >         # phpを実行できるようにする。
  32  >         location ~ .*\.php$ {
  33  >             fastcgi_pass   127.0.0.1:9000;
  34  >             fastcgi_index  index.php;
  35  >             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  36  >             #fastcgi_param  FUEL_ENV production; #リリース時にはコメントを外して有効にする。
  37  >             include        fastcgi_params;
  38  57,78c60,65
  39  <         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  40  <         #
  41  <         #location ~ \.php$ {
  42  <         #    proxy_pass   http://127.0.0.1;
  43  <         #}
  44  < 
  45  <         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  46  <         #
  47  <         #location ~ \.php$ {
  48  <         #    root           html;
  49  <         #    fastcgi_pass   127.0.0.1:9000;
  50  <         #    fastcgi_index  index.php;
  51  <         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  52  <         #    include        fastcgi_params;
  53  <         #}
  54  < 
  55  <         # deny access to .htaccess files, if Apache's document root
  56  <         # concurs with nginx's one
  57  <         #
  58  <         #location ~ /\.ht {
  59  <         #    deny  all;
  60  <         #}
  61  ---
  62  >         # すべての不可視ファイルをアクセス不可にする。
  63  >         location ~ /\. {
  64  >             access_log off;
  65  >             log_not_found off;
  66  >             deny all;
  67  >         }
  68  $ cat /usr/local/nginx/conf/nginx.conf
  69  
  70  #user  nobody;
  71  worker_processes  1;
  72  
  73  #error_log  logs/error.log;
  74  #error_log  logs/error.log  notice;
  75  #error_log  logs/error.log  info;
  76  
  77  #pid        logs/nginx.pid;
  78  
  79  
  80  events {
  81      worker_connections  1024;
  82  }
  83  
  84  
  85  http {
  86      include       mime.types;
  87      default_type  application/octet-stream;
  88  
  89      #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  90      #                  '$status $body_bytes_sent "$http_referer" '
  91      #                  '"$http_user_agent" "$http_x_forwarded_for"';
  92  
  93      #access_log  logs/access.log  main;
  94  
  95      sendfile        on;
  96      #tcp_nopush     on;
  97  
  98      #keepalive_timeout  0;
  99      keepalive_timeout  65;
 100  
 101      #gzip  on;
 102  
 103      server {
 104          listen       80;
 105          server_name  localhost;
 106  	root /var/www/fuelphp-sample/public;
 107  	index index.php;
 108  
 109          charset utf-8;
 110  
 111          access_log  logs/fuelphp-sample.access.log;
 112          error_log   logs/fuelphp-sample.error.log;
 113  
 114          # すべてのアクセスをindex.phpに振る。
 115          location / {
 116              try_files $uri /index.php?$uri$args;
 117          }
 118  
 119          # phpを実行できるようにする。
 120          location ~ .*\.php$ {
 121              fastcgi_pass   127.0.0.1:9000;
 122              fastcgi_index  index.php;
 123              fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 124              #fastcgi_param  FUEL_ENV production; #リリース時にはコメントを外して有効にする。
 125              include        fastcgi_params;
 126          }
 127  
 128          # すべての不可視ファイルをアクセス不可にする。
 129          location ~ /\. {
 130              access_log off;
 131              log_not_found off;
 132              deny all;
 133          }
 134      }
 135  
 136  
 137      # another virtual host using mix of IP-, name-, and port-based configuration
 138      #
 139      #server {
 140      #    listen       8000;
 141      #    listen       somename:8080;
 142      #    server_name  somename  alias  another.alias;
 143  
 144      #    location / {
 145      #        root   html;
 146      #        index  index.html index.htm;
 147      #    }
 148      #}
 149  
 150  
 151      # HTTPS server
 152      #
 153      #server {
 154      #    listen       443;
 155      #    server_name  localhost;
 156  
 157      #    ssl                  on;
 158      #    ssl_certificate      cert.pem;
 159      #    ssl_certificate_key  cert.key;
 160  
 161      #    ssl_session_timeout  5m;
 162  
 163      #    ssl_protocols  SSLv2 SSLv3 TLSv1;
 164      #    ssl_ciphers  HIGH:!aNULL:!MD5;
 165      #    ssl_prefer_server_ciphers   on;
 166  
 167      #    location / {
 168      #        root   html;
 169      #        index  index.html index.htm;
 170      #    }
 171      #}
 172  
 173  }
 174  $ sudo /usr/local/nginx/sbin/nginx -s reload

Xdebugインストール

Xdebugのコンパイルに必要なコマンドをインストール

   1  $ sudo apt-get install autoconf gcc g++

Xdebugのソースをダウンロード、展開

   1  $ wget http://xdebug.org/files/xdebug-2.2.1.tgz--2012-08-13 21:14:58--  http://xdebug.org/files/xdebug-2.2.1.tgz
   2  xdebug.org (xdebug.org) をDNSに問いあわせています... 82.113.146.227
   3  xdebug.org (xdebug.org)|82.113.146.227|:80 に接続しています... 接続しました。
   4  HTTP による接続要求を送信しました、応答を待っています... 200 OK
   5  長さ: 248057 (242K) [application/x-gtar-compressed]
   6  `xdebug-2.2.1.tgz' に保存中
   7  
   8  100%[======================================>] 248,057     53.8K/s   時間 5.6s  
   9  
  10  2012-08-13 21:15:04 (42.9 KB/s) - `xdebug-2.2.1.tgz' へ保存完了 [248057/248057]
  11  $ tar zxf xdebug-2.2.1.tgz 
  12  $ cd xdebug-2.2.1/

コンパイル用設定

   1  $ phpize
   2  Configuring for:
   3  PHP Api Version:         20090626
   4  Zend Module Api No:      20090626
   5  Zend Extension Api No:   220090626
   6  configure.in:3: warning: prefer named diversions
   7  configure.in:3: warning: prefer named diversions
   8  $ which php-config
   9  /usr/local/bin/php-config
  10  $ ./configure --enable-xdebug --with-php-config=/usr/local/bin/php-config

コンパイル、インストール

   1  $ make
   2  $ sudo make install
   3  $ ls -l /usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so 
   4  -rwxr-xr-x 1 root root 669138  8月 13 21:53 /usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so

PHP設定(Phar設定、Xdebug設定)

php.iniを用意

   1  $ sudo cp /home/akanuma/src/php-5.3.15/php.ini-development /usr/local/lib/php.ini

Pharを正しく扱うためのdetect_unicode設定と、xdebugの設定を追加

   1  $ sudo vi /usr/local/lib/php.ini
   2  $ diff /home/akanuma/src/php-5.3.15/php.ini-development /usr/local/lib/php.ini 
   3  928a929,930
   4  > detect_unicode = Off
   5  > 
   6  1914a1917,1929
   7  > 
   8  > [xdebug]
   9  > zend_extension = "/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
  10  > xdebug.collect_params = 4
  11  > xdebug.dump.GET = "*"
  12  > xdebug.dump.POST = "*"
  13  > ;xdebug.profiler_enable = 0
  14  > xdebug.remote_enable = 1
  15  > ;xdebug.remote_handler = "dbgp"
  16  > ;xdebug.remote_host = "localhost"
  17  > ;xdebug.remote_log = "/var/log/xdebug/xdebug.log"
  18  > ;xdebug.remote_mode = "req"
  19  > ;xdebug.remote_port = 9000

リモートデバッグ用のログを準備しておく

   1  $ sudo touch /var/log/xdebug/xdebug.log
   2  $ sudo chmod 666 /var/log/xdebug/xdebug.log 
   3  $ ls -l /var/log/xdebug/xdebug.log 
   4  -rw-rw-rw- 1 root root 0  8月 13 23:11 /var/log/xdebug/xdebug.log

php-fpmを再起動し、http://localhost/ にアクセスして、 with Xdebug v2.2.1 の記述があることを確認する。

Eclipseインストール

Eclipseの公式サイトからダウンロードするか、パッケージマネージャを使ってEclipseをインストールします。詳細は割愛します。

PDTインストール

Eclipseの[Help] メニューの [Install New Software] からPDTをインストールします。詳細は割愛します。

MakeGoodインストール

Eclipseの[Help] メニューの [Install New Software] からMakeGoodをインストールします。詳細は割愛します。

PHPUnitインストール

PEARのチャネルを更新します。

   1  $ sudo pear update-channels
   2  [sudo] password for akanuma: 
   3  Updating channel "doc.php.net"
   4  Channel "doc.php.net" is up to date
   5  Updating channel "pear.php.net"
   6  Channel "pear.php.net" is up to date
   7  Updating channel "pecl.php.net"
   8  Channel "pecl.php.net" is up to date

PEARパッケージをアップグレードします。

   1  $ sudo pear upgrade -a PEAR

インストール済みのすべてのパッケージをアップグレードします。

   1  $ sudo pear upgrade-all
   2  Will upgrade channel://pear.php.net/console_getopt
   3  Will upgrade channel://pear.php.net/archive_tar
   4  downloading Console_Getopt-1.3.1.tar ...
   5  Starting to download Console_Getopt-1.3.1.tar (Unknown size)
   6  ........done: 21,504 bytes
   7  downloading Archive_Tar-1.3.10.tar ...
   8  Starting to download Archive_Tar-1.3.10.tar (Unknown size)
   9  ...done: 98,304 bytes
  10  upgrade-all ok: channel://pear.php.net/Console_Getopt-1.3.1
  11  upgrade-all ok: channel://pear.php.net/Archive_Tar-1.3.10

新規チャネルを自動的に探すようにPEARの設定を変更します。

   1  $ sudo pear config-set auto_discover 1
   2  config-set succeeded

キャッシュをクリアします。

   1  $ sudo pear clear-cache
   2  reading directory /tmp/pear/cache
   3  28 cache entries cleared

PHPUnitをインストール

   1  $ sudo pear install -a pear.phpunit.de/PHPUnit

インストールされたPHPUnitのバージョン確認

   1  $ phpunit --version
   2  PHPUnit 3.6.12 by Sebastian Bergmann.

Gitインストール

Gitをインストールします。

   1  $ sudo apt-get install git

インストールされたGitのバージョンを確認します。

   1  $ git --version
   2  git version 1.7.9.5

FuelPHPインストール

curlをインストールします。

   1  $ sudo apt-get install curl

FuelPHPのoilコマンドをインストールします。

   1  $ curl get.fuelphp.com/oil | sh
   2    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
   3                                   Dload  Upload   Total   Spent    Left  Speed
   4  100   244  100   244    0     0    204      0  0:00:01  0:00:01 --:--:--   628
   5  $ which oil
   6  /usr/bin/oil

HTTPサーバのWebディレクトリにFuelPHPをインストールします。

   1  $ cd /var/www
   2  $ sudo oil create fuelphp-sample

http://localhost/ にアクセスして、FuelPHPのページが表示されることを確認します。

FuelPHP設定

FuelPHPの言語設定、タイムゾーン設定、ロギング設定、default_charsetの設定を変更します。

   1  $ cp fuel/app/config/config.php fuel/app/config/config.php.bak
   2  $ vi fuel/app/config/config.php 
   3  $ diff fuel/app/config/config.php.bak fuel/app/config/config.php
   4  12a13,15
   5  > // set default charset
   6  > ini_set('default_charset', 'UTF-8');
   7  > 
   8  76c79
   9  < 	'language'           => 'en', // Default language
  10  ---
  11  > 	'language'           => 'ja', // Default language
  12  78c81
  13  < 	'locale'             => 'en_US', // PHP set_locale() setting, null to not set
  14  ---
  15  > 	'locale'             => null, // PHP set_locale() setting, null to not set
  16  89c92
  17  < 	'default_timezone'   => 'UTC',
  18  ---
  19  > 	'default_timezone'   => 'Asia/Tokyo',
  20  101c104
  21  < 	'log_threshold'    => Fuel::L_WARNING,
  22  ---
  23  > 	'log_threshold'    => Fuel::L_ALL,

Eclipse/PDT設定

PHP実行可能ファイルの設定

[Window] メニューから [Preferences] を選択して、左カラムから、「PHP」の「PHP Executables」を選択し、[Add] ボタンを押します。

「Name」は「PHP」とし、「Executable path」に「/usr/local/bin/php」を設定します。 「PHP debugger」は「XDebug」を選択して[Finish]ボタンを押します。

次に左カラムから、 「PHP」の「Debug」を選択し、「PHP Debugger」に「XDebug」を、「PHP Executable」に「PHP」を選択し、[Apply] ボタンを押し、[OK]ボタンを押して終了します。

posted by Png akanuma on Thu 9 Aug 2012 at 07:52

Eclipse上でPDTを使ってFuelPHPのプロジェクトをGit管理したかったので、EGit で github を使えるようにしてみました。

参考にさせていただいたサイトはこちら。
FuelPHPってなんじゃ?(Git管理編)

Eclipse、PDT、FuelPHP は既に使える状態になっているものとします。

まずはEclipseからGitを使えるように、EGit をインストールします。

Eclipse の Helpメニュー -> Install New Software でダイアログを開きます。EGitのダウンロード用URLはデフォルトで登録されているので、--All Available Sites-- の中から Collaboration -> Eclipse EGit を選択してインストールします。

インストールできたら Eclipse の Windowメニュー -> Preference でダイアログを開き、Team -> Git -> Configuration の User Settings タブで、New Entry ボタンをクリックして、user.name, user.email を設定します。

次にFuelPHPを使うプロジェクトを作成します。

   1  $ oil create contact
   2  $ cd contact

ここで気をつけなければいけないことがあります。oil create で作られたプロジェクトは、FuelPHPの github のリポジトリを clone して作られいるためGit管理になっています。その中でいくつかのディレクトリは git の submodule として登録されているのですが、通常はその中の .git はディレクトリになっているはずが、私の環境(Ubuntu12.04)ではファイルになっていて、中身は下記の用にプロジェクトルートの .git ディレクトリ配下のパスがかかれていました。

   1  $ cat fuel/core/.git
   2  gitdir: /home/akanuma/Learning/php/work/contact/.git/modules/fuel/core

CentOS環境で試した時にはディレクトリとして作成されていたので環境によるのだと思いますが、このままだとあとでコミット候補としてインデックスに登録しようとした時に、下記のようなエラーが表示されます。

   1  $ git add .
   2  fatal: Not a git repository: /home/akanuma/Learning/php/work/sample/.git/modules/fuel/packages/parser

また、submodule として登録した時にも下記のようにエラーになります。

   1  $ git submodule add git://github.com/fuel/core.git fuel/core/
   2  The following path is ignored by one of your .gitignore files:
   3  fuel/core
   4  Use -f if you really want to add it.

そこで、下記の用にして .git ファイルの中身がさしているディレクトリを .git ディレクトリとして移動します。

   1  $ rm fuel/core/.git
   2  $ mv .git/modules/fuel/core fuel/core/.git
   3  $ rm fuel/packages/auth/.git
   4  $ mv .git/modules/fuel/packages/auth fuel/packages/auth/.git
   5  $ rm fuel/packages/email/.git
   6  $ mv .git/modules/fuel/packages/email fuel/packages/email/.git
   7  $ rm fuel/packages/oil/.git
   8  $ mv .git/modules/fuel/packages/oil fuel/packages/oil/.git
   9  $ rm fuel/packages/orm/.git
  10  $ mv .git/modules/fuel/packages/orm fuel/packages/orm/.git
  11  $ rm fuel/packages/parser/.git
  12  $ mv .git/modules/fuel/packages/parser fuel/packages/parser/.git
  13  $ rm -rf .git/modules/fuel

次に、FuelPHP の Git 管理下から外すために下記のように Git 関連ディレクトリを削除します。

   1  $ rm -rf .git .gitmodule

ローカルリポジトリを初期化します。

   1  $ git init
   2  Initialized empty Git repository in /home/akanuma/Learning/php/work/contact/.git/

サブモジュールを追加します。

   1  $ git submodule add git://github.com/fuel/core.git fuel/core/
   2  Adding existing repo at 'fuel/core' to the index
   3  $ git submodule add git://github.com/fuel/oil.git fuel/packages/oil
   4  Adding existing repo at 'fuel/packages/oil' to the index
   5  $ git submodule add git://github.com/fuel/parser.git fuel/packages/parser
   6  Adding existing repo at 'fuel/packages/parser' to the index
   7  $ git submodule add git://github.com/fuel/email.git fuel/packages/email
   8  Adding existing repo at 'fuel/packages/email' to the index
   9  $ git submodule add git://github.com/fuel/auth.git fuel/packages/auth
  10  Adding existing repo at 'fuel/packages/auth' to the index
  11  $ git submodule add git://github.com/fuel/orm.git fuel/packages/orm
  12  Adding existing repo at 'fuel/packages/orm' to the index

ドキュメント類を削除します。

   1  $ rm *.md
   2  $ rm -rf docs

アプリケーション全体をコミット候補に加えるためにインデックスに追加します。

   1  $ git add .

ローカルリポジトリにコミットします。

   1  $ git commit -m 'First Commit.'

Eclipse の Fileメニュー -> New -> PHP Project で新規プロジェクト作成ダイアログを開きます。Project名を入力し、Content では Create project at existing location (from existing source) を選択し、oil create で作成したプロジェクトのルートディレクトリを選択し、Finish をクリックしてプロジェクトを作成します。

プロジェクトを右クリックし、Team -> Share Project を選択します。リポジトリタイプは Git を選択し次へ。Use or create repository in parent folder of project にチェックを入れ、先ほど作成したローかリポジトリを選択して Finish をクリックして共有設定をします。

再度プロジェクトを右クリックし、Team -> Commit でコミットダイアログを表示し、コメントを入力してから Commit をクリックしてコミットします。

さらにプロジェクトを右クリックし、Team -> Remote -> Push を選択してダイアログを表示し、Location に github のリポジトリの情報を入力して次へ。Source ref: で master を選択して Add Spec ボタンをクリックし、Finish ボタンをクリックして github への Push を実行します。

以上で FuelPHP のプロジェクトを github 管理下に置くことができます。

posted by Png akanuma on Sat 21 Jul 2012 at 11:54

PHPを勉強中なわけですが、下記のようなスクリプトを書いたところ、mb_strlen という関数が使えませんでした。

   1  <?php
   2  
   3  echo "テキストを入力:";
   4  $a = trim(fgets(STDIN));
   5  echo mb_strlen($a, 'utf-8') . "文字あります。";
   6  
   7  ?>

   1  $ php hello.php
   2  テキストを入力:hello
   3  PHP Fatal error:  Call to undefined function mb_strlen() in /home/akanuma/scripts/php/hello.php on line 5

ググってみるとどうやらマルチバイトの処理ができるようにするには、コンパイル時にパラメータ追加したりとか、php.ini に設定の追加が必要とか色々ありましたが、yum で php-mbstring をインストールすればよさそうということで実行。

   1  # yum install php-mbstring
   2  Loaded plugins: fastestmirror
   3  Loading mirror speeds from cached hostfile
   4   * base: ftp.iij.ad.jp
   5   * epel: ftp.kddilabs.jp
   6   * extras: ftp.iij.ad.jp
   7   * remi: rpms.famillecollet.com
   8   * updates: ftp.iij.ad.jp
   9  Setting up Install Process
  10  Resolving Dependencies
  11  --> Running transaction check
  12  ---> Package php-mbstring.x86_64 0:5.3.14-1.el5.remi set to be updated
  13  --> Finished Dependency Resolution
  14  
  15  Dependencies Resolved
  16  
  17  ========================================================================================================================
  18   Package                       Arch                    Version                              Repository             Size
  19  ========================================================================================================================
  20  Installing:
  21   php-mbstring                  x86_64                  5.3.14-1.el5.remi                    remi                  2.3 M
  22  
  23  Transaction Summary
  24  ========================================================================================================================
  25  Install       1 Package(s)
  26  Upgrade       0 Package(s)
  27  
  28  Total download size: 2.3 M
  29  Is this ok [y/N]: y
  30  Downloading Packages:
  31  php-mbstring-5.3.14-1.el5.remi.x86_64.rpm                                                        | 2.3 MB     00:04
  32  Running rpm_check_debug
  33  Running Transaction Test
  34  Finished Transaction Test
  35  Transaction Test Succeeded
  36  Running Transaction
  37    Installing     : php-mbstring                                                                                     1/1
  38  
  39  Installed:
  40    php-mbstring.x86_64 0:5.3.14-1.el5.remi
  41  
  42  Complete!

これで無事に mb_strlen が使えるようになりました。

   1  $ php hello.php
   2  テキストを入力:はろー
   3  3文字あります。

posted by Png akanuma on Sat 14 Jul 2012 at 18:48

PHPを使うことになったので、CentOS5.8にPHP5.3をインストールしました。yumコマンド一発です。

   1  # cat /etc/redhat-release
   2  CentOS release 5.8 (Final)
   3  #
   4  # rpm -qa | grep php
   5  #
   6  # yum install php
   7  Loaded plugins: fastestmirror
   8  Loading mirror speeds from cached hostfile
   9   * base: ftp.iij.ad.jp
  10   * epel: ftp.tsukuba.wide.ad.jp
  11   * extras: ftp.iij.ad.jp
  12   * remi: rpms.famillecollet.com
  13   * updates: ftp.iij.ad.jp
  14  Setting up Install Process
  15  Resolving Dependencies
  16  --> Running transaction check
  17  ---> Package php.x86_64 0:5.3.14-1.el5.remi set to be updated
  18  --> Processing Dependency: php-common = 5.3.14-1.el5.remi for package: php
  19  --> Processing Dependency: php-cli = 5.3.14-1.el5.remi for package: php
  20  --> Running transaction check
  21  ---> Package php-cli.x86_64 0:5.3.14-1.el5.remi set to be updated
  22  --> Processing Dependency: libedit.so.0()(64bit) for package: php-cli
  23  ---> Package php-common.x86_64 0:5.3.14-1.el5.remi set to be updated
  24  --> Running transaction check
  25  ---> Package libedit.x86_64 0:2.11-2.20080712cvs.el5 set to be updated
  26  --> Finished Dependency Resolution
  27  
  28  Dependencies Resolved
  29  
  30  ========================================================================================================================
  31   Package                    Arch                   Version                                   Repository            Size
  32  ========================================================================================================================
  33  Installing:
  34   php                        x86_64                 5.3.14-1.el5.remi                         remi                 2.8 M
  35  Installing for dependencies:
  36   libedit                    x86_64                 2.11-2.20080712cvs.el5                    epel                  80 k
  37   php-cli                    x86_64                 5.3.14-1.el5.remi                         remi                 2.6 M
  38   php-common                 x86_64                 5.3.14-1.el5.remi                         remi                 1.0 M
  39  
  40  Transaction Summary
  41  ========================================================================================================================
  42  Install       4 Package(s)
  43  Upgrade       0 Package(s)
  44  
  45  Total download size: 6.5 M
  46  Is this ok [y/N]: y
  47  Downloading Packages:
  48  http://ftp.tsukuba.wide.ad.jp/Linux/fedora/epel/5/x86_64/libedit-2.11-2.20080712cvs.el5.x86_64.rpm: [Errno 14] HTTP Error 404: Not Found
  49  Trying other mirror.
  50  (1/4): libedit-2.11-2.20080712cvs.el5.x86_64.rpm                                                 |  80 kB     00:00
  51  (2/4): php-common-5.3.14-1.el5.remi.x86_64.rpm                                                   | 1.0 MB     00:03
  52  (3/4): php-cli-5.3.14-1.el5.remi.x86_64.rpm                                                      | 2.6 MB     00:04
  53  (4/4): php-5.3.14-1.el5.remi.x86_64.rpm                                                          | 2.8 MB     00:04
  54  ------------------------------------------------------------------------------------------------------------------------
  55  Total                                                                                   481 kB/s | 6.5 MB     00:13
  56  Running rpm_check_debug
  57  Running Transaction Test
  58  Finished Transaction Test
  59  Transaction Test Succeeded
  60  Running Transaction
  61  
  62  WARNING : These php-* RPM are not official Fedora/Redhat build and
  63  overrides the official ones. Don't file bugs on Fedora Project nor Redhat.
  64  
  65  Use dedicated forums http://forums.famillecollet.com/
  66  
  67    Installing     : php-common                                                                                       1/4
  68    Installing     : libedit                                                                                          2/4
  69    Installing     : php-cli                                                                                          3/4
  70    Installing     : php                                                                                              4/4
  71  
  72  Installed:
  73    php.x86_64 0:5.3.14-1.el5.remi
  74  
  75  Dependency Installed:
  76    libedit.x86_64 0:2.11-2.20080712cvs.el5   php-cli.x86_64 0:5.3.14-1.el5.remi   php-common.x86_64 0:5.3.14-1.el5.remi
  77  
  78  Complete!
  79  #
  80  # rpm -qa | grep php
  81  php-common-5.3.14-1.el5.remi
  82  php-cli-5.3.14-1.el5.remi
  83  php-5.3.14-1.el5.remi
  84  # php -v
  85  PHP 5.3.14 (cli) (built: Jun 14 2012 21:26:11)
  86  Copyright (c) 1997-2012 The PHP Group
  87  Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

posted by Png akanuma on Wed 11 Jul 2012 at 07:56

 参考にしている書籍にあわせてGHCiのプロンプトを変更するために、ホームディレクトリに下記のように .ghci ファイルを作成しました。

   1  $ cat -n .ghci
   2       1  :set prompt "ghci> "

これでGHCiを起動してみます。

   1  $ ghci
   2  GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
   3  Loading package ghc-prim ... linking ... done.
   4  Loading package integer ... linking ... done.
   5  Loading package base ... linking ... done.
   6  *** WARNING: /home/akanuma/.ghci is writable by someone else, IGNORING!
   7  Prelude>

すると設定ファイル .ghci がオーナー以外のユーザからも書き込み可能になっているということで無視されてしまいました。ファイルのパーミッションを変更して再度起動してみます。

   1  $ ls -l .ghci
   2  -rw-rw-r-- 1 akanuma akanuma 21  6月 18 13:27 .ghci
   3  $ chmod 644 .ghci
   4  $ ls -l .ghci
   5  -rw-r--r-- 1 akanuma akanuma 21  6月 18 13:27 .ghci
   6  $ ghci
   7  GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
   8  Loading package ghc-prim ... linking ... done.
   9  Loading package integer ... linking ... done.
  10  Loading package base ... linking ... done.
  11  ghci>

今度は設定ファイルが読み込まれ、プロンプトがデフォルトの "Prelude>" から "ghci>" に変わりました。

posted by Png akanuma on Mon 18 Jun 2012 at 13:32

Scalaを勉強しなおすために、まずHaskellを勉強してからの方がScalaを理解しやすいという話を聞いたので、Haskellの勉強を始めることにしました。ということでまずはHaskellのコンパイラ、GHC(The Glasgow Haskell Compiler)をインストールしました。yumであっさりインストールできてしまいました。

   1  # yum install ghc
   2  Loaded plugins: fastestmirror
   3  Loading mirror speeds from cached hostfile
   4   * base: ftp.iij.ad.jp
   5   * epel: ftp.tsukuba.wide.ad.jp
   6   * extras: ftp.iij.ad.jp
   7   * remi: rpms.famillecollet.com
   8   * updates: ftp.iij.ad.jp
   9  Setting up Install Process
  10  Resolving Dependencies
  11  --> Running transaction check
  12  ---> Package ghc.x86_64 0:6.10.4-3.el5 set to be updated
  13  --> Processing Dependency: gmp-devel for package: ghc
  14  --> Processing Dependency: libgmp.so.3()(64bit) for package: ghc
  15  --> Running transaction check
  16  ---> Package gmp.x86_64 0:4.1.4-10.el5 set to be updated
  17  ---> Package gmp-devel.x86_64 0:4.1.4-10.el5 set to be updated
  18  --> Finished Dependency Resolution
  19  
  20  Dependencies Resolved
  21  
  22  ========================================================================================================================
  23   Package                      Arch                      Version                           Repository               Size
  24  ========================================================================================================================
  25  Installing:
  26   ghc                          x86_64                    6.10.4-3.el5                      epel                     43 M
  27  Installing for dependencies:
  28   gmp                          x86_64                    4.1.4-10.el5                      base                    201 k
  29   gmp-devel                    x86_64                    4.1.4-10.el5                      base                    569 k
  30  
  31  Transaction Summary
  32  ========================================================================================================================
  33  Install       3 Package(s)
  34  Upgrade       0 Package(s)
  35  
  36  Total download size: 44 M
  37  Is this ok [y/N]: y
  38  Downloading Packages:
  39  (1/3): gmp-4.1.4-10.el5.x86_64.rpm                                                               | 201 kB     00:00
  40  (2/3): gmp-devel-4.1.4-10.el5.x86_64.rpm                                                         | 569 kB     00:00
  41  (3/3): ghc-6.10.4-3.el5.x86_64.rpm                                                               |  43 MB     00:07
  42  ------------------------------------------------------------------------------------------------------------------------
  43  Total                                                                                   5.5 MB/s |  44 MB     00:08
  44  Running rpm_check_debug
  45  Running Transaction Test
  46  Finished Transaction Test
  47  Transaction Test Succeeded
  48  Running Transaction
  49    Installing     : gmp                                                                                              1/3
  50    Installing     : gmp-devel                                                                                        2/3
  51    Installing     : ghc                                                                                              3/3
  52  
  53  Installed:
  54    ghc.x86_64 0:6.10.4-3.el5
  55  
  56  Dependency Installed:
  57    gmp.x86_64 0:4.1.4-10.el5                               gmp-devel.x86_64 0:4.1.4-10.el5
  58  
  59  Complete!

コマンドが存在することを確認します。

   1  # which ghci
   2  /usr/bin/ghci
   3  # which ghc
   4  /usr/bin/ghc

バージョンの確認。

   1  # ghc --version
   2  The Glorious Glasgow Haskell Compilation System, version 6.10.4

対話モードで起動してみます。

   1  # ghci
   2  GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
   3  Loading package ghc-prim ... linking ... done.
   4  Loading package integer ... linking ... done.
   5  Loading package base ... linking ... done.
   6  Prelude>
   7  Prelude> :q
   8  Leaving GHCi.
   9  #

ひとまずコンパイラのインストールは問題なくできたようです。

posted by Png akanuma on Mon 18 Jun 2012 at 13:24

 Perl と cpanm がインストールされて入れば、Catalystをインストールするには cpanm Ctalyst::Devl を実行するだけでOK。

   1  $ cpanm Catalyst::Devel
   2  !
   3  ! Can't write to /usr/lib/perl5/site_perl/5.8.8 and /usr/bin: Installing modules to /home/akanuma/perl5
   4  ! To turn off this warning, you have to do one of the following:
   5  !   - run me as a root or with --sudo option (to install to /usr/lib/perl5/site_perl/5.8.8 and /usr/bin)
   6  !   - Configure local::lib your existing local::lib in this shell to set PERL_MM_OPT etc.
   7  !   - Install local::lib by running the following commands
   8  !
   9  !         cpanm --local-lib=~/perl5 local::lib && eval 500 500perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
  10  !
  11  --> Working on Catalyst::Devel
  12  Fetching http://www.cpan.org/authors/id/B/BO/BOBTFISH/Catalyst-Devel-1.37.tar.gz ... OK
  13  Configuring Catalyst-Devel-1.37 ... OK
  14  ==> Found dependencies: Test::Fatal, Catalyst::Plugin::ConfigLoader, MooseX::Emulate::Class::Accessor::Fast, Starman, File::ChangeNotify, File::ShareDir, Config::General, Catalyst, MooseX::Daemonize, Moose, namespace::autoclean, Catalyst::Plugin::Static::Simple, Template, Module::Install, Catalyst::Action::RenderView, namespace::clean
  15  --> Working on Test::Fatal
  16  Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Test-Fatal-0.010.tar.gz ... OK
  17  Configuring Test-Fatal-0.010 ... OK
  18  ==> Found dependencies: Try::Tiny
  19  ~~~ 以下略 ~~~

posted by Png akanuma on Sun 17 Jun 2012 at 22:48