漫ろで行こう

自由気まま過ぎる、ギークになりたい男の子の話

Archive for the ‘言語’ category

Copyright © 1990-2009, Python Software Foundation


現在利用している CORESERVER にインストールしてある Python のバージョンが 2.4.3 のため、Python 2.5.1 をインストールしたので覚書。

現在リリースされている Python のバージョンは 2.6 系の 2.6.4 が最新になります。バージョン3系は別として。
また、2.5 系では 2.5.2 が最新になるのですが、自分が自宅や仕事場で利用している Linux に合わせるカタチで、2.5.1 をインストールすることにしました。

1.Python 2.4の退避
現在 CORESERVER で利用している Python 2.4.1 は、python という名称で存在しているので、2.4 を退避します。

user@host:~> cd ~/local/bin/
user@host:~/local/bin> mv python python2.4

2.Python2.5 のダウンロードとインストール
自分は「Python標準リリース」からダウンロードしましたが、こちらの「Download Python」から必要なバージョンをダウンロードしてもらうことも可能です。

user@host:~/src> wget http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2
user@host:~/src> tar xvjf Python-2.5.1.tar.bz2
user@host:~/src> cd Python-2.5.1/
user@host:~/src/Python-2.5.1> ./configure –prefix=$HOME/local
user@host:~/src/Python-2.5.1> make
user@host:~/src/Python-2.5.1> make install

3.setuptools の前に hashlib をインストール
何をするにしてもやっぱり easy_install は便利。ということで、setuptools をインストールしようとするのですが、ここで _md5 モジュールが足りないよ!と「ImportError: No module named _md5」こんなエラーが出るので、あらかじめ hashlib をインストールしておきます。
hashlib は「[ code.krypto.org : python/hashlib ]」からダウンロード。

user@host:~> cd ~/src/
user@host:~/src> wget http://code.krypto.org/python/hashlib/hashlib-20081119.tar.gz
user@host:~/src> tar zxvf hashlib-20081119.tar.gz
user@host:~/src> cd hashlib-20081119/

とここまできたら、インストールの前にちょっとしたひと手間。
setup.py を編集します。119 行目に else があると思うのですが、以下のようにコメントアウトします。

#    else:
        exts.append( Extension(‘_sha’, ['shamodule.c']) )
        exts.append( Extension(‘_md5′,
                        sources = ['md5module.c', 'md5.c'],
                        depends = ['md5.h']) )

これを行わないと _md5 モジュールがインストールされません。問答無用でインストールするようにしてください。
編集を完了したらインストール。

user@host:~/src/hashlib-20081119> python setup.py build
user@host:~/src/hashlib-20081119> python setup.py install

4.setuptools のインストール
Python Package Index : setuptools 0.6c11」から setuptools をダウンロードします。ソースでもいいのですが、自分は egg パッケージにしました。

user@host:~> cd ~/src/
user@host:~/src> wget http://pypi.python.org/packages/2.5/s/setuptools/setuptools-0.6c11-py2.5.egg#md5=64c94f3bf7a72a13ec83e0b24f2749b2
user@host:~/src> sh setuptools-0.6c11-py2.5.egg –prefix=$HOME/local

5.動作チェック
動作チェックをします。バージョンの確認と readline のエラーが出るので、setuptools の動作チェックも兼ねて readline をインストールをします。

user@host:~> python -V
Python 2.5.1
user@host:~> easy_install readline

user@host:~> python
Python 2.5.1 (r251:54863, Jan 11 2010, 00:40:24)
[GCC 4.0.2 20050901 (prerelease) (SUSE Linux)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>>

以上、Python 2.5 のインストールでした。
official.Python Programming Language — Official Website

20090927mixiVoicd01
[言語][Ruby][Webサービス]mixi エコー改め mixi ボイスへ twitter ポスト」や「[言語][Ruby][Webサービス]mixi ボイスに twitter ポストが出来ない」などで、ちょいちょい記載している Ruby を使った Twitter ポストを mixi ボイスへポストするスクリプトですが、4日ほど前から急に mixi にポストされなくなったので、原因を調査してみたところ Iconv::IllegalSequence が発生していることが判明しました。といっても、2日前くらいに直したのですが、内容はハチャメチャな暫定処理。うん、これは恥ずかしい。が、一応、何かの役に立てば的な感じでメモ。

実際にその時のスクリプト実行時エラーは以下のような感じ。

user@host:~/script/mixiEchoBot> ruby mixiEchoBot.rb 
Link: プログラミング言語 Go ドキュメント — golang_docjp v0.1 documentation http://tumblr.com/xkz43zuky
/…/mechanize/util.rb:40:in `iconv’: ”\342\200\224 golang_docjp”… (Iconv::IllegalSequence)
  from /usr/local/lib/…/mechanize/util.rb:40:in `from_native_charset’
  from /usr/local/lib/…/mechanize/form.rb:152:in `from_native_charset’
  from /usr/local/lib/…/mechanize/form.rb:144:in `proc_query’
  from /usr/local/lib/…/mechanize/form.rb:143:in `map’
  from /usr/local/lib/…/mechanize/form.rb:143:in `proc_query’
  from /usr/local/lib/…/mechanize/form.rb:166:in `build_query’
  from /usr/local/lib/…/mechanize/form.rb:165:in `each’
  from /usr/local/lib/…/mechanize/form.rb:165:in `build_query’
  from /usr/local/lib/…/mechanize/form.rb:214:in `request_data’
  from /usr/local/lib/…/mechanize.rb:401:in `post_form’
  from /usr/local/lib/…/mechanize.rb:344:in `submit’
  from /usr/local/lib/…/mechanize/form.rb:130:in `submit’
  from /usr/local/lib/…/mechanize/form.rb:136:in `click_button’
  from mixiEchoBot.rb:83
  from mixiEchoBot.rb:54:in `each’
  from mixiEchoBot.rb:54

原因はというと、Tumblr 経由で Twitter にポストした「プログラミング言語 Go ドキュメント — golang_docjp v0.1 documentation」こちらの「—」の部分。他と文字コードが違うため、Mechanize 内部の iconv で IllegalSequence エラーが発生してしまいました。
スクリプト中のボタンクリックアクション時にエラーが発生しているようなので、暫定的ではありますが無理矢理動くように、IllegalSequence エラーが発生した際にキャッチして置換をかまして再ポストするように修正。

  f = form['body'] =tweets[i]+comment
  puts tweets[i]
  form.click_button

これを以下のように無理矢理な感じで修正。

  begin
    f = form['body'] =tweets[i]+comment
    puts tweets[i]
    form.click_button
  rescue
    tweets[i] =tweets[i].gsub!(“—”,”-”)
    f = form['body'] =tweets[i]+comment
    puts tweets[i]
    form.click_button
  end

「—」だけに限らず、他にも色々と IllegalSequence エラーが発生する文字はありますがとりあえず的な。

©2009 Google

©2009 Google

© 1995-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.

© 1995-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.


自分で Wrapper を書いたわけじゃないのですが、やっぱり MySQL に接続してみたいよね!ということで、GitHub に上がってるソーシャルコード mysqlgo を利用させていただき、接続および select クエリの発行をしてみました。
だから何だって話になったら元も子もないですが、完璧自己満足の世界ですので、あしからず。

テスト環境

  • CentOS 5.4
  • MySQL 5.1.38

まず、mysqlgo のソースコードを入手してインストールする必要があるのですが、Zip や Tar などのアーカイブをダウンロードする方法(mysqlgo のページに download ボタンがあります)と、git から clone を取得する方法の2パターンあります。
自分はまだ試したことがなかったので、後者の git を用いる方法で取得しインストールしてみました。

git のインストール
root ユーザーになって yum から git をインストールします

[root@host ~]# yum install git

git の初期設定
git のグローバル設定にユーザー名とメールアドレスを設定します

[user@host ~]$ git config –global –list
[user@host ~]$ git config –global user.name “Suzuro”
[user@host ~]$ git config –global user.email hoge@hoge.com
[user@host ~]$ git config –global –list
user.name=Suzuro
user.email=suzuro2045@gmail.com

mysqlgo のチェックアウト
チェックアウトとチェックアウトしたファイルの確認。

[user@host ~]$ git clone git://github.com/eden/mysqlgo.git
[user@host ~]$ ls mysqlgo/
LICENSE README.markdown gcc.patch mw.h mysql_test.go
Makefile example.go mw.c mysql.go

mysqlgo のインストール

[user@host mysqlgo]$ make install
cp _obj/mysql.a /home/suzuro/go/pkg/linux_386/mysql.a
gcc -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -fasynchronous-unwind-tables -DUNIV_LINUX -DUNIV_LINUX -o mw.o -c mw.c
gcc -m32 -shared -lpthread -lm -o mysql_mysql.so mysql.cgo4.o mw.o -rdynamic -L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -lmygcc
cp mysql_mysql.so /home/suzuro/go/pkg/linux_386/./mysql_mysql.so

以上で mysqlgo のインストールは完了です。なんてお手軽!
次に、テスト用 DB およびテーブル、サンプルデータを MySQL に作成し、mysqlgo を利用したテストコードを書いて実行してみます。

テスト用 MySQL データの作成

DROP TABLE IF EXISTS `hoge`;
CREATE TABLE `hoge` (
`id` bigint(20) NOT NULL auto_increment,
`str` varchar(255) collate utf8_bin NOT NULL,
`cdate` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `cdate` (`cdate`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

insert into `hoge`(str) values
(‘aiueo’),
(‘あいうえお’),
(‘αβγ’),
(‘абв’);

mysql> select * from hoge;
+—-+—————–+———————+
| id | str | cdate |
+—-+—————–+———————+
| 1 | aiueo | 2009-11-17 12:40:53 |
| 2 | あいうえお | 2009-11-17 12:40:53 |
| 3 | αβγ | 2009-11-17 12:40:53 |
| 4 | абв | 2009-11-17 12:40:53 |
+—-+—————–+———————+
4 rows in set (0.00 sec)

mysqlgo テストコードの作成
まず、作業用のディレクトリを作成し、そこにコードを置きたいと思います。

[user@host mysqlgo]$ mkdir -p ~/test/mysqlgo
[user@host mysqlgo]$ cd ~/test/mysqlgo/
[user@host mysqlgo]$ vi mysqlgo.go

コードは以下のような感じで。手抜きも良いとこです。

package main

import (
  ”mysql”;
  ”fmt”;
)

func main ()
{
  conn := mysql.NewConn();
  err := conn.Connect(&mysql.ConnInfo{“localhost”, 3306, ”root”, ”", ”test”});

  if err != nil {
    panic(“Connect Error”);
  }

  cur := conn.Cursor();
  cur.Execute(“select * from hoge;”);
  tuple, err := cur.FetchOne();
  for ; err == nil && tuple != nil; tuple, err = cur.FetchOne()
  {
    fmt.Println(tuple);
  }

  conn.Close();
}

コンパイルして実行。

[user@host mysqlgo]$ 8g mysqlgo.go
[user@host mysqlgo]$ 8l -o mysqlgo mysqlgo.8
[user@host mysqlgo]$ ./mysqlgo
[1 aiueo 2009-11-17 12:40:53]
[2 あいうえお 2009-11-17 12:40:53]
[3 αβγ 2009-11-17 12:40:53]
[4 абв 2009-11-17 12:40:53]

以上で終わり。
ドキュメントがないので、サイトの Synopsis を参考にというかそのまま書かせてもらったのですが、今後 mysqlgo が一般的になってくるのか、はたまた MySQL AB からオフィシャルで Connector が出てくるのか。
かなり気にはなりますが、それ以前に今後の Go 言語の普及率がどうなるかが見物かもしれません。

©2009 Google

©2009 Google


とりあえず、適当にサンプルプログラムを試して〜と思って@amachangさんとこの「早速 Go 言語を試してみる! – IT戦記」から、Twitter のサンプルプログラムを拝借させていただき、ローカル環境で試してみたところ日本語の表示がされませんでした。
原因不明&未解決なわけですが、一応記事に起こしておこうかなと。
もしかしたら自分だけかもしれないので、問題ないよ!と言う方はコメントいただけると助かります><
ちなみに、チュートリアルにある「Hello, world!」サンプルなどのハードコーディングされたマルチバイトは正常に表示されるようです。取ってきたマルチバイトが表示されないので、多分エンコード周りだとは思うのですが……。

Mac および CentOS で試してみたのですが、不具合(?)が発生したのは Mac 側。
尚、参考にさせていただいたサンプルの twit 取得 URL は常時日本語発言しまくりである自分の user_timeline を取得する用に変更しました。
で、以下が実行した出力結果。テキストに吐き出してもダメでした。

Mac OS X 10.5.8

suzuro2045: Link: GoogleHTTPSPDY – ITmedia http://tumblr.com/xkz40at3k
suzuro2045: Go The Go! Team
suzuro2045: Googlebot
suzuro2045: GooglewwwGo w
suzuro2045: Link: | http://tumblr.com/xkz40aesp
suzuro2045: [][Go][]CORESERVER Go http://bit.ly/29qDAj
suzuro2045: Link: JavaScript – – subtech http://tumblr.com/xkz405m1q
suzuro2045: Link: | nanapi[] http://tumblr.com/xkz3zo991
suzuro2045: CLASH49ageHa
suzuro2045: facebook mixi
suzuro2045: OpeniBoot Android on iPhone Linux OpeniBoot
suzuro2045: RT: @nippondanji: RT @kazeburo: !! RT @etolabo #ficia
suzuro2045: Link: JavaScript – Radium Software http://tumblr.com/xkz3zmo5e
suzuro2045: [iPhone 3Gs Jailbreak]iPhone iDashboard http://bit.ly/1IxrZj
suzuro2045: Link: inforno :: Go& http://tumblr.com/xkz3ziolm

CentOS 5.4

suzuro2045: Link: Google、HTTPを補う高速化プロトコル「SPDY」発表 – ITmedia エン##ープライズ http://tumblr.com/xkz40at3k (Tumblr)
suzuro2045: ココ最近 Go の文字ばっかみてたせいか、ふと The Go! Team を思い出した (Echofon)
suzuro2045: 最近 Googlebot がやたら活動的だなぁ (Echofon)
suzuro2045: Googleキモイwwwさっき書いた記事が「Go 開発環境」とかで検索すると、もう1ページ目に表示されるっっっうぇw (Echofon)
suzuro2045: Link: ネットストア限定先行予約 紙とあそぶレゴ®ブロック | 無印良品ネットストア http://tumblr.com/xkz40aesp (Tumblr)
suzuro2045: [言語][Go][メモ]CORESERVER に Go 言語開発環境を構築してみた http://bit.ly/29qDAj (Twitme for WordPress)
suzuro2045: Link: JavaScript 体感速度を上げるいくつかの手のメモ – 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 – subtech http://tumblr.com/xkz405m1q (Tumblr)
suzuro2045: Link: 最強のブランド!あなたでも贈れる王室ご用達ギフト | nanapi[ナナピ] http://tumblr.com/xkz3zo991 (Tumblr)
suzuro2045: 土曜日のCLASH49参加予定。ageHaでボクと握手! (Echofon)
suzuro2045: facebook 日本法人作ってどうなるんかなぁ。mixi には勝てなそうだけど。 (Echofon)
suzuro2045: OpeniBoot 使って Android on iPhone Linux 的なこと出来ないかと思った##ど、OpeniBoot 開発止まったんか? (Echofon)
suzuro2045: Link: JavaScript によるオーディオ&ビジュアルプログラミング – Radium Software http://tumblr.com/xkz3zmo5e (Tumblr)
suzuro2045: [iPhone 3Gs Jailbreak]iPhone 版ダッシュボード脱獄アプリ iDashboard http://bit.ly/1IxrZj (Twitme for WordPress)
suzuro2045: Link: inforno :: 個人的Go雑感&メモ http://tumblr.com/xkz3ziolm (Tumblr)

なんですかねぇ……。

©2009 Google

©2009 Google


Google 様から新しいプログラミング言語「Go」が発表されて、数日経過しました。
ローカル環境(Mac, CentOS)には環境構築してみたものの、やっぱコンパイルは動作環境毎にするべきだよなぁと、とりあえず CORESERVER へ Go 言語開発環境を構築してみました。
今のところ CORESERVER で何かを動作させようとか、そういう類いのことは一切考えてないんですけどね!

インストールは Installing Go を参考に進めました。

リポジトリからデータを取得して構築するため Python ベースの Mercurial をインストールします。
CORESERVER で Mercurial をインストールする場合、setuptools を用いるため以下のページも参考にしてみてください。
[言語][Python][メモ]レンタルサーバーで Python 追加モジュールのインストール

user@host:~> easy_install mercurial

チェックアウトするディレクトリを作成

user@host:~> mkdir ~/go

インストールに必要な環境変数の設定
export 〜は実際に実行するのと、ターミナルで再ログインしても有効になるように、.bashrc に記述しておきます。

user@host:~> vi ~/.bashrc

以下を実行し、更に .bashrc に記述してください。
CORESERVRER の「サーバーの仕様について」を参考に設定を記述しました。多分問題ないハズ。
また、例によっていつものようにインストール先は local/bin にしてあります。インストール先は適宜、好きなように変更してください。

export GOROOT=$HOME/go
export GOOS=linux
export GOARCH=386
export GOBIN=$HOME/local/bin
export PATH=$GOBIN:$PATH

環境変数がちゃんと設定されているか確認

user@host:~> env | grep ‘^GO’
GOBIN=/virtual/suzuro/local/bin
GOARCH=386
GOROOT=/virtual/suzuro/go
GOOS=linux

Mercurial のリポジトリからソースをチェックアウト。
と、チェックアウトしたソースがあるかの確認。

user@host:~> hg clone -r release https://go.googlecode.com/hg/ $GOROOT
user@host:~> ls ~/go/
AUTHORS doc include LICENSE pkg src
CONTRIBUTORS favicon.ico lib misc README test

インストール。本来であれば all.bash は1回で良いのですが、make.bash の箇所で何故か1度止まってしまいました。なので2回 all.bash を実行しています。決して記載ミスじゃないです><

user@host:~> cd ~/go/src/
user@host:~/go/src> ./all.bash
user@host:~/go/src> ./all.bash

インストールした go コンパイラなどのバイナリがある確認。

user@host:~/go/src> ls ~/local/bin
6cov cgo git godoc python
6nm cython git-cvsserver gofmt quietgcc
6prof easy_install gitk gopack rdoc
8a easy_install-2.4 git-receive-pack gotest ri
8c ebnflint git-shell goyacc ruby
8g erb git-upload-archive hg testall.sh
8l ez_setup.py git-upload-pack hgpatch testrb
bzr gem godefs irb to3.sh

動作確認
テストディレクトリを作成して「こんにちは、世界!」のテストをしてみました。

user@host:~/go/src> mkdir ~/test
user@host:~/go/src> cd ~/test/
user@host:~/test> vi test.go

記述したソース

package main

import “fmt”

func main () {
fmt.Printf(“hello, world!\n”);
}

コンパイルと実行

user@host:~/test> 8g test.go
user@host:~/test> 8l -o test test.8
user@host:~/test> ./test
hello, world!

以上、CORESERVER における Go 言語開発環境構築手順でした。
インストールして何するわけでもないです。とりあえずインストールしてみただけ。

それでは、良い Go on CORESERVER ライフを!

official.The Go Programming Language

20090927mixiVoicd01
先日「[言語][Ruby][Webサービス]mixi エコー改め mixi ボイスへ twitter ポスト」という記事を書いて実際に試してみたものの、いざ CORESERVER にて cron の設定をしてみても動作しない。
試しにローカルの Cent OS で同様のことを試してみましたが、やはり動作せず。

色々試行錯誤してみた結果、小手先の小細工が必要なことが発覚。今のところ Ruby でしか発生していないけども、今後発生しないとも限らないので覚えていて損はないかなと。

rb を実行する sh を書く

#!/bin/sh

cd /絶対パス/
/usr/local/bin/ruby /絶対パス/mixiEchoBot.rb > /dev/null 2>&1

sh を実行する crontab を書く

*/5 * * * * /絶対パス/mixiEchoBot.sh

ローカルでは上記だけで十分だったのですが、CORESERVER では更に crontab へ小手先の小細工が。
各環境変数を crontab に書く

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/usr/local/mysql/bin:/usr/local/mysql/libexec:/usr/local/pgsql/bin
RAILS_ENV=production
RUBYLIB=/usr/local/lib
GEM_HOME=/usr/local/lib/ruby/gem

各パスなど(/usr/local/bin/ など)は、適宜自身の環境に合わせて修正してください。
やっと動いた……。

official.[mixi]

20090927mixiVoicd01

と言うことで「5.1さらうどん」さんがポスト用 Ruby スクリプトを公開されていたのと CORESERVER への Ruby 設定が終わったので、早速試してみました。
twitterからmixiボイスにマルチポストするRubyスクリプト書いた – 5.1さらうどん
twitterからmixiボイスにポストするスクリプト関連まとめ+修正版 – 5.1さらうどん

CORESERVER における Ruby の設定に関しては以下を参考にしてみてください。
[言語][Ruby][メモ]CORESERVER に Ruby 1.8.7 をインストール
[言語][Ruby][メモ]CORESERVER に rubygems をインストール

がしかし、CORESERVER には WWW::Mechanize と rubytter がインストールされていないので、そちらを先にインストール。

user@host:~> gem install mechanize
user@host:~> gem install rubytter

スクリプトは「twitterからmixiボイスにポストするスクリプト関連まとめ+修正版 – 5.1さらうどん」から最新版をコピペして使ってください。
尚、2行目の「require ‘Mechanize’」のままでは動作しませんので、以下のように修正してください。

require ‘Mechanize’

require ‘mechanize’

後は必要な項目を設定して動作させるだけの簡単なお仕事。

それでは良い、mixi エコー改め mixi ボイスライフを!

official.[mixi]

ruby - Copyright (C) 1993-2009 Yukihiro Matsumoto

ruby - Copyright (C) 1993-2009 Yukihiro Matsumoto

CORESERVER では Ruby が1.8.5のため、1.8.7にアップデートしたいと思います。
オフィシャルの「オブジェクト指向スクリプト言語 Ruby」から安定版の ruby 1.8.7-p174 をダウンロードしてインストール。
例によって prefix でインストール先を変更。

user@host:~/src> wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.bz2
user@host:~/src> tar xvjf ruby-1.8.7-p174.tar.bz2
user@host:~/src> cd ruby-1.8.7-p174/
user@host:~/src/ruby-1.8.7-p174> ./configure –prefix=$HOME/local –disable-install-doc
user@host:~/src/ruby-1.8.7-p174> make
user@host:~/src/ruby-1.8.7-p174> make install

環境変数の設定および永続設定を行います。
自分は過去に「[言語][Python][メモ]レンタルサーバーで Python 追加モジュールのインストール」で設定しているので、今回は行いませんでしたが初めての人はやっておく必要があります。

user@host:~/src> export PATH=$HOME/local/bin/:$PATH
user@host:~/src> cd
user@host:~> echo “export PATH=$HOME/local/bin/:$PATH” >> .bashrc

バージョンを確認して問題なければ完了。

user@host:~> ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-linux]

official.オブジェクト指向スクリプト言語 Ruby

Copyright © 2007, Ruby Central Inc. Ruby Central, Inc. is a 501(c)(3) tax-exempt non-profit organization. Donations are tax-deductible to the extent allowed by law.

Copyright © 2007, Ruby Central Inc. Ruby Central, Inc. is a 501(c)(3) tax-exempt non-profit organization. Donations are tax-deductible to the extent allowed by law.


CORESERVER で rubygems を使うための備忘録。

RubyForge: RubyGems: Project Info から rubygems 最新版のダウンロードとインストール。
例によってレンタルサーバーのため、prefix でインストール先は変更。

user@host:~/src> wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
user@host:~/src> tar zxvf rubygems-1.3.5.tgz
user@host:~/src> cd rubygems-1.3.5/
user@host:~/src/rubygems-1.3.5> ruby setup.rb –prefix=$HOME/local

環境変数への設定追加と反映。

user@host:~/src/rubygems-1.3.5> export RUBYLIB=$HOME/local/lib
user@host:~/src/rubygems-1.3.5> export GEM_HOME=$HOME/local/lib/ruby/gem
user@host:~/src/rubygems-1.3.5> source ~/.bashrc

このままでは環境変数がリセットされてしまうので、dot-bashrc に記述しておきます。

user@host:~/src> cd
user@host:~> echo “export RUBYLIB=$HOME/local/lib” >> .bashrc
user@host:~> echo “export GEM_HOME=$HOME/local/lib/ruby/gem” >> .bashrc

動作確認。

user@host:~> gem -v
1.3.5

なんて簡単!

official.RubyForge: Welcome, Ruby Central

© 1995-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.

© 1995-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.

所用で C# から MySQL :: Connector/Net 6.0 を利用して MySQL からデータを抜く必要があったため、コーディングしていたのですが
Fatal error encountered during command execution
といったエラーが。

原因は直ぐに特定できたのですが、どうにも腑に落ちない。
というのも、原因は条件式の検索文字列の先頭に「@」が付いているため、変数として誤認されるのが原因で回避策は後回しとして、通常の SELECT 文とプロシージャコールで挙動が異なること。
プロシージャは以下のような感じ。これで同様のエラーが発生することはなく、問題なく動作してしまう。

string hoge = "@abc";
string fuga = "asdf1234";
string query = string.Format("call proc_Test('{0}', '{1}');", hoge, fuga);

一方、通常の SELECT 文だと先述したプロシージャのようなコーディングを行うと Fatal error encountered during command execution と怒られてしまう。
対処方法としては以下のような感じにする必要がある。

string cns = "MySQL接続文字列";
string hoge = "@abc";
string fuga = "asdf1234";
string query = string.Format(
  "select * from atTest where testName=@TEST and testPass='{0}';", fuga);
using (MySqlConnection conn = new MySqlConnection(cns))
{
  MySqlCommand cmd = new MySqlCommand(query, conn);
  cmd.Parameters.Add(new MySqlParameter(
    "@TEST", MySqlDbType.VarChar, 40));
  cmd.Parameters["@TEST"].Value = hoge;
  cmd.CommandTimeout = 300;
  conn.Open();
  // 処理
  conn.Close();
}

後者も完璧ではないけども(fuga 変数の内容も本来であれば、Parameters に Add するべきなんだけど)プロシージャの場合は問題無いのはどういうことだろう?
Conncector/Net のバグなのか仕様なのか……。

official.MySQL Query Analyzer – Improving SQL Query Performance

Get Adobe Flash playerPlugin by wpburn.com wordpress themes
Proudly powered by WordPress. Theme developed with WordPress Theme Generator.
Copyright © 漫ろで行こう. All rights reserved.