Webとなにかとそのきんじょ RSSふぃーど

2008-12-28

[][][][]SET NAMES のいらないせいかつ

PHPRubyMySQLくらいあんとらいぶらりをきよしくただしくつかうほうほう*1をまとめてみた。Shift_JISがきてもU+00A5がきてもだいじょうぶなはず。

よごれたぶぶんをみつけたかたはぜひごしてきを!

Version

PHP

mysql
$link = mysql_connect('localhost', 'user', 'password');
mysql_select_db('test', $link);
mysql_set_charset('utf8', $link);

$result = mysql_query(
    sprintf("SELECT id FROM tb WHERE name = '%s'",
            mysql_real_escape_string('あいうえお'))
);

if ($result) {
    while ($row = mysql_fetch_assoc($result)) {
        printf("%d\n", $row['id']);
    }

    mysql_free_result($result);
}

mysql_close($link);
mysqli

OOP:

$mysqli = new mysqli('localhost', 'user', 'password', 'test');
$mysqli->set_charset('utf8');

$stmt = $mysqli->prepare("SELECT id FROM tb WHERE name = ?");
$name = 'あいうえお';
$stmt->bind_param('s', $name);
$stmt->bind_result($id);

$stmt->execute();

while ($stmt->fetch()) {
    printf("%d\n", $id);
}
$stmt->close();

$mysqli->close();

てつづきがた:

$link = mysqli_connect('localhost', 'user', 'password', 'test');
mysqli_set_charset($link, 'utf8');

$stmt = mysqli_prepare($link, "SELECT id FROM tb WHERE name = ?");
$name = 'あいうえお';
mysqli_stmt_bind_param($stmt, 's', $name);
mysqli_stmt_bind_result($stmt, $id);

mysqli_stmt_execute($stmt);

while (mysqli_stmt_fetch($stmt)) {
    printf("%d\n", $id);
}
mysqli_stmt_close($stmt);

mysqli_close($link);

ひprepared statements:

$mysqli = new mysqli('localhost', 'user', 'password', 'test');
$mysqli->set_charset('utf8');

$result = $mysqli->query(
    sprintf("SELECT id FROM tb WHERE name = '%s'",
            $mysqli->real_escape_string('あいうえお'))
);

if ($result) {
    while ($row = $result->fetch_assoc()) {
        printf("%d\n", $row['id']);
    }
    
    $result->close();
}

$mysqli->close();
PDO_MYSQL
$dbh = new PDO('mysql:host=localhost;dbname=test', 'user', 'password',
               array(
                     PDO::MYSQL_ATTR_READ_DEFAULT_FILE => '/etc/my.cnf',
                     PDO::MYSQL_ATTR_READ_DEFAULT_GROUP => 'pdo',
                     PDO::MYSQL_ATTR_DIRECT_QUERY => false  /* server-side prepared statements */
               ));
 
$stmt = $dbh->prepare("SELECT id FROM tb WHERE name = ?");
$stmt->bindValue(1, 'あいうえお', PDO::PARAM_STR);

$stmt->execute();

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    printf("%d\n", $row['id']);
}

ひprepared statements:

$dbh = new PDO('mysql:host=localhost;dbname=test', 'user', 'password',
               array(
                     PDO::MYSQL_ATTR_READ_DEFAULT_FILE => '/etc/my.cnf',
                     PDO::MYSQL_ATTR_READ_DEFAULT_GROUP => 'pdo',
                     PDO::MYSQL_ATTR_DIRECT_QUERY => true
               ));
 
$result = $dbh->query(sprintf("SELECT id FROM tb WHERE name = %s",
                              $dbh->quote('あいうえお', PDO::PARAM_STR)
));

while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
    printf("%d\n", $row['id']);
}

/etc/my.cnf

[pdo]
default-character-set = utf8

Ruby

MySQL/Ruby
my = Mysql.init
my.options(Mysql::SET_CHARSET_NAME, "utf8")
my.connect("localhost", "user", "password", "test")

st = my.prepare("SELECT id FROM tb WHERE name = ?")
st.execute("あいうえお")
st.each do |x|
  p x[0]
end
st.close

my.close

ひprepared statements:

my = Mysql.init
my.options(Mysql::SET_CHARSET_NAME, "utf8")
my.connect("localhost", "user", "password", "test")

my.query(sprintf("SELECT id FROM tb WHERE name = '%s'",
         my.quote("あいうえお"))).each do |x|
  p x[0]
end

my.close

*1:ついSQLいんじぇくしょんないみで

2008-11-17

[]Webさいとぱすわーどをかぎゃくじょうたいでほぞんしているかをみわける10のぽいんと

  1. ひみつのしつもんにこたえるとぱすわーどがひょうじされる
  2. ぱすわーどをわすれたときのふぉーむにめーるあどれすをにゅうりょくするとぱすわーどがかかれためーるがおくられてくる
  3. ゆーざーさぽーとにでんわするとぱすわーどをよみあげてくれる
  4. ゆーざーさぽーとにめーるするとぱすわーどがかかれためーるがかえってくる
  5. ぱすわーどが4けたのすうじしばり
  6. ぱすわーどのおおもじこもじがなぜかくべつされていない*1
  7. ぱすわーどのさいだいちょうがみょうにみじかく8もじとかになっている
  8. さいだいちょうをこえたぱすわーどもうけいれてしまうがろぐいんでつかえるのはさいだいちょうにきりづめたぱすわーど*2
  9. ぱすわーどあんごうかしてほかんしますとかいてあるぷらいばしーぽりしーこぴぺ

*1MySQLではBINARYぞくせいをしていしないとひかくときにおおもじこもじをくべつしない

*2MySQLではからむのさいだいちょうをこえたもじれつのINSERTがしっぱいしない

2008-10-13

Subversion 1.5へのいこう

Subversionの1.5よりまえのばーじょんでは、ないぶではりびじょんごとにどういつでぃれくとりにふぁいるがさくせいされるため、りびじょんかずがおおきくなるとかなりふあんなじょうたいになってしまう。*1

しかし、ばーじょん1.5からはshardingというしくみがどうにゅうされ、1000りびじょんごとにいちかいそうふかいでぃれくとりにふぁいるがつくられるようになったのでおおいにちもあんしん。

Improved support for large deployments on FSFS, via sharding


1.5ではほかにもあたらしいきのうがいくつかついかされており、とくにまーじかんれんのきのうついか(Merge tracking)がうれしいのでばーじょんあっぷしたいのだが、ふるいばーじょんのくらいあんとがこんざいしたばあいにどうなるかがふあんなのでしらべてみた。


けんしょうにしようしたのはいかのばーじょん。

$ svn --version
svn, ばーじょん 1.5.3 (r33570)
   こんぱいるにちじ: Oct 11 2008, 19:03:46
$ svn --version
svn, ばーじょん 1.4.2 (r22196)
   こんぱいるにちじ: Mar 14 2007, 20:55:55

それぞれMacPortsとCentOS 5.2でのさいしんぱっけーじ。

Merge trackingをためしてみよう

きゅうばーじょんでのけんしょうのまえに、とりあえずしんきのうのMerge trackingをためしてみよう。

さんぷるとして svn://svn-server/trunk に rails のぷろじぇくとをつくってみた。

ぶらんちさくせい

[~] $ svn copy svn://svn-server/trunk svn://svn-server/branches/first-test

trunkのさぎょうこぴーでてきとうなこんとろーらをさくせい

[~/trunk] $ ./script/generate controller -c login
[~/trunk] $ svn ci

first-testのさぎょうこぴーでてきとうなこんとろーらをさくせい

[~/first-test] $ ./script/generate controller -c profile
[~/first-test] $ svn ci

first-testのさぎょうこぴーにtrunkをまーじ

[~/first-test] $ svn merge svn://svn-server/trunk
--- r2 から r4 までを '.' にまーじしています:
A    test/functional/login_controller_test.rb
A    app/helpers/login_helper.rb
A    app/controllers/login_controller.rb
A    app/views/login

おぉ!

さらにtrunkのさぎょうこぴーでてきとうなこんとろーらをさくせい

[~/trunk] $ ./script/generate controller -c message
[~/trunk] $ svn ci

もういちどfirst-testのさぎょうこぴーにtrunkをまーじ

[~/first-test] $ svn merge svn://svn-server/trunk
--- r5 から r6 までを '.' にまーじしています:
A    test/functional/message_controller_test.rb
A    app/helpers/message_helper.rb
A    app/controllers/message_controller.rb
A    app/views/message

おおぉ!

しゅどうでりびじょんをしていしたりきろくしたりするひつようがないぞ!


まーじしたりびじょんはsvn:mergeinfoぷろぱてぃにきろくされていた

[~/first-test] $ svn propget svn:mergeinfo
/trunk:2-6

さいごにfirst-testぶらんちからtrunkへのまーじ

$ svn merge --reintegrate svn://svn-server/branches/first-test
--- りぽじとり URL まのさぶんを '.' にまーじしています:
A    test/functional/profile_controller_test.rb
A    app/helpers/profile_helper.rb
A    app/controllers/profile_controller.rb
A    app/views/profile
 U   .

やったー

ただし、ぶらんちをさくせいしてからtrunkにまーじするまでのまにどちらかででぃれくとりのいどう(なまえへんこう)またはこぴーがおこなわれていると、さいごのまーじでしっぱいしてしまう。

[~/trunk] $ svn merge --reintegrate svn://svn-server/branches/first-test
svn: Cannot reintegrate from 'svn://svn-server/branches/first-test' yet:
Some revisions have been merged under it that have not been merged
into the reintegration target; merge them first, then retry.

そのばあいはいぜんとおなじほうほうでまーじをおこなえばもんだいない

[~/trunk] $ svn merge svn://svn-server/trunk@11 svn://svn-server/branches/first-test@11 .

ふるいばーじょんでのまーじ

ぶらんちさくせい

[1.5:~] $ svn copy svn://svn-server/trunk svn://svn-server/branches/second-test

trunkのさぎょうこぴーでてきとうなこんとろーらをさくせい

[1.5:~/trunk] $ ./script/generate controller -c star
[1.5:~/trunk] $ svn ci

second-testのさぎょうこぴーでてきとうなこんとろーらをさくせい

[1.5:~/second-test] $ ./script/generate controller -c bookmark
[1.5:~/second-test] $ svn ci

1.4くらいあんとでsecond-testのさぎょうこぴーにtrunkをまーじ

[1.4:~/second-test] $ svn merge -r 17:19 svn://svn-server/trunk
A    test/functional/star_controller_test.rb
A    app/helpers/star_helper.rb
A    app/controllers/star_controller.rb
A    app/views/star

trunkのさぎょうこぴーへさらにてきとうなこんとろーらをついか

[1.5:~/trunk] $ ./script/generate controller -c anond
[1.5:~/trunk] $ svn ci

1.5くらいあんとでsecond-testのさぎょうこぴーにtrunkをまーじ

[1.5:~/second-test] $ svn merge svn://localhost/trunk
--- r17 から r21 までを '.' にまーじしています:
A    test/functional/anond_controller_test.rb
A    test/functional/star_controller_test.rb
A    app/helpers/star_helper.rb
A    app/helpers/anond_helper.rb
A    app/controllers/anond_controller.rb
A    app/controllers/star_controller.rb
A    app/views/star
A    app/views/anond

ちょうふくしてまーじがおこなわれてしまった。ふぁいるにいっさいへんこうがなければよきにはからってくれるみたいだけど、なんらかのへんこうがあると

--- r17 から r22 までを '.' にまーじしています:
A    test/functional/anond_controller_test.rb
A    test/functional/star_controller_test.rb
A    app/helpers/star_helper.rb
A    app/helpers/anond_helper.rb
A    app/controllers/anond_controller.rb
'app/controllers/star_controller.rb' できょうごうがみつかりました。
せんたく: えんき (p), ぜんさぶん (df), へんしゅう (e),
        へるぷでそのほかのおぷしょんをひょうじ (h) : p
C    app/controllers/star_controller.rb
'app/views/star' をとばしました
A    app/views/anond

しょうとつする。

まーじさぎょうをふるいくらいあんととまじりながらおこなうことはこうりょされていないようだ。

まとめ

  • Merge trackingはべんり
  • ぶらんちつくるならくらいあんとも1.5にしたほうがよい
  • 1.4いぜんでまーじをするとふこうになる

*1:FSFSのばあい

2008-08-24

[]AutoRun


てもとでかくにんしたものでは、

  1. いんたーねっとうえからうぃるすのほんたいをだうんろーど(AutoRunでじっこうされるのはだうんろーだ)
  2. ほんたいをじっこう
  3. (たぶん)ほんたいが
    1. かくどらいぶにAutoRunのせっていをする
    2. さくせいするふぁいるはよみとりせんようかくしふぁいるのしすてむぞくせい
    3. かくしふぁいるをひょうじしないようにれじすとりのせっていをへんこう
  4. うぃるすとしてのほんらいのどうさをおこなう(きーろがー?)

こういったことをいっているらしい。


つくられる autorun.inf ふぁいるのなかみはこんなかんじ。

じっさいはところどころにあんちうぃるすさけとおもわれるらんだむなもじれつがふくまれてた。

[Autorun]
open=virus.com
;shell\open=Open(&0)
shell\open\Command=virus.com
shell\open\Default=1
;shell\explore=Manager(&X)
shell\explore\Command=virus.com

Windows XPのばあい、このじょうたいではどらいぶあいこんをだぶるくりっくしても、こんてきすとめにゅーからひらこうとしてもうぃるすがじっこうされてしまうので、あんぜんにどらいぶをひらくには、どらいぶにんしきときのだいあろぐでふぉるだをひらいてふぁいるをひょうじするをえらぶか、えくすぷろーらのふぉるだつりーからどらいぶをせんたくするかしないといけない*1


そんなかわったそうさをかんぺきにおこなうのはたいへんなので、れじすとりでAutoRunをむこうにしてしまったほうがよいとおもう。

あしゅだらけであんちうぃるすそふともあまりやくにたたないようなので。

http://www.mnet.ne.jp/~angie/kbase/xp-autorun.html

*1:こまんどらいんとかほかのほうほうもある

2008-04-29

[][]Time MachineでVMwareのかそうましんがばっくあっぷされるようになった

Time Capsuleをかったで、VMwareのかそうましんはTime Machineでばっくあっぷされないようだとかいたのだけど、なんかさいきんばっくあっぷのてんそうさいずがおおきいなとおもったらばっくあっぷされてた。


VWware Fusionのあっぷでーと(1.1.1→1.1.2)をしたから?

おきばしょがなかったあっぷでーたのでぃすくいめーじをかそうましんふぉるだにおいたから?


ともあれかそうましんをきどうするどにばっくあっぷがかずGBたんいでおこなわれるので、うれしいようなかなしいような。


あと、かんけいないけどせんじつそうさみすしてHDL-F300のでーたをとばした。

www.learn-japan.org(romaji/hira/kata/hirakata)