φ(.. ) 備忘録
amazonアソシエイト

2014年6月29日日曜日

Linuxマシン上のeclipseをWindows7で操作する

前回VirtualBox上のUbuntu13.10にeclipse lunaをインストールした。VirtualBoxの仮想画面上でも操作できなくないが、ウィンドウサイズなどの制限をうけちゃうので、ホストのWindows7のデスクトップに直接ひらくことにした。無料でw。。
WindowsではXアプリケーションのウィンドウは開くことはできないので、フリーのXサーバーをウィンドウズ側にインストールする必要がある。私はXmingを愛用している。ほぼインストールしたまま設定せずにつかえるし、ある程度安定している。ちなみにCygwinのXサーバも試したことがあるが当時が安定してなかった記憶がある。今はどうかわからんが・・・。
Xmingは以下をダウンロードしてインストール。
インストール後、「C:\Program Files (x86)\Xming\X0.hosts」に接続するホストのIPアドレスを追記する。こんなかんじに。
localhost
192.168.0.10
192.168.0.14
次に、Linux側の日本語入力環境を整えるため、scim-anthyをインストール。
% sudo apt-get install scim-anthy
eclipseで日本語を入力できるようにするため、~/.bashrcとかに以下を追加。
export XMODIFIERS=@im=SCIM
export GTK_IM_MODULE="scim"
以上で設定は完了。
Windows7上からの起動方法は以下。
1.Xlaunch起動
 スタートメニュー→Xming→Xlaunch
2.マルチプルウィンドウモードでXming起動。
 Multiple windows→次へ→start no client→次へ→次へ→完了
3.Cygwinやteraterm等でLinuxマシンにログイン
4.DISPLAY変数を設定
 % export DISPLAY=192.168.0.3:0.0
    ※192.168.0.3はWindows7のIPアドレス
5.eclipse起動
 % cd /home/user/tools/eclipse
 % ./eclipse
うちの環境では半角/全角キーで日本語入力切替ができた。皆様の環境ではctrl+spaceかもしれません。以上、参考になれば幸いです。。。

ピカピカふぁんたじん (初回限定盤A) (DVD付)
きゃりーぱみゅぱみゅ
ワーナーミュージック・ジャパン (2014-07-09)
売り上げランキング: 50

2014年6月28日土曜日

homeディレクトリに最新版eclipseをインストールする

会社で古いLinux32bitマシンにユーザ権限でeclipse環境を構築するミッションがあり思考錯誤中。手始めに家のVirtualBox上のUbuntu13.10で試したのでログを残す。結構簡単にできた。

1.以下をダウンロードし、/home/user/tools配下に配置。
eclipse本体<eclipse-standard-luna-R-linux-gtk.tar.gz>
eclipseCDT<eclipse-cpp-luna-R-linux-gtk.tar.gz>
JRE<jre-7u60-linux-i586.tar.gz>
日本語化キット<pleiades.zip>
2.以下を順番に実施
% cd /home/user/tools
% tar zxvf eclipse-standard-luna-R-linux-gtk.tar.gz
% unzip jre-7u60-linux-i586.tar.gz
% tar zxvf eclipse-cpp-luna-R-linux-gtk.tar.gz
% cd /home/user/tools/eclipse
% unzip ../pleiades.zip
% ln -s ../jre1.7.0_60 jre
3./home/user/tools/eclipse/eclipse.iniに以下2行を追加
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-Xverify:none
4.eclipse起動
% cd /home/user/tools/eclipse
% ./eclipse -clean
これで日本語化eclipse+CDTの環境が構築できた。
最新版のeclipseにはgit用のプラグインとかデフォルトで入っているね。
とくにいじらなくても普通につかえそう。
次回は、RHEL4に上記手順が通用するか試してみる。結果はまたブログで。。。。
(追記)RHEL4へのeclipse lunaインストールはglibc2.4の壁に阻まれ断念した。

Eclipse 4.3 完全攻略
Eclipse 4.3 完全攻略
posted with amazlet at 14.06.28
宮本 信二
SBクリエイティブ
売り上げランキング: 22,397

2014年6月21日土曜日

Cygwinアップデート

Cygwinのsetup-x86.exeでソフトを追加インストールする際、setup-x86.exeが古いといわれるようになったので、この際最新版にアップデートすることにした。
最新版のsetup-x86.exeをここからダウンロードしてCygwinインストールフォルダに上書き配置。
新しいsetup-x86.exeでインストール時と同じ手順をするだけで、古いバイナリのアンインストールからインストールまで自動でやってくれる。
その後、自分でビルドしてインストールしているものがあれば再ビルドする。
以上で、最新のCygwinにアップデートすることが可能。
昔はアップデートをすると環境が破壊されることがしばしばあったが、今はそんなことはない。かなり安定してきていい感じだね。

Cygwinを使おう―Windows上で実現されるUNIX環境
中村 繁利 御影 伸哉 熊谷 直樹
ディーアート
売り上げランキング: 367,204

2014年6月20日金曜日

アマゾンアソシエイト初入金

アマゾンアソシエイトのレポートをみていたら報酬がかってにギフト券に交換されてビックリ。アカウント乗っ取られたのかと思ったが実はちがった。
報酬が一定額をこえると自動的にギフト券に交換される仕組みらしい。よくよく過去メールをみてみると
「Amazon Associates Program様からAmazonギフト券をお贈りします。」
の件名でギフト券が届いていた。
何はともあれ初の入金。816円だがとてもうれしいo(^o^)o

Amazonアソシエイト(アフィリエイト)完全攻略講座
(2013-01-20)
売り上げランキング: 54,798

2014年6月11日水曜日

phpにおける波線のワナ

知っている人もいると思うが、波線には実は2種類ある。
」と「
我が家のREGZA君は、「」が認識できない。
この波線があるとファイル一覧すら表示できなくなる。(T_T)
で、認識できない波線を使わないようphpのツールで以下のように回避していた。
$filename = mb_ereg_replace("〜","~", trim($filename) );
が、しかし最近上記でも回避できない事象が・・・
そのファイル名は
戦〜」と「略〜
これがあるとなぜか「」が「」に変換されない。
原因は不明だが以下で暫定対処する。青を追加実施。
$filename = mb_ereg_replace("〜","~", trim($filename) );
$filename = mb_ereg_replace("戦〜","戦~", trim($filename) );
$filename = mb_ereg_replace("略〜","略~", trim($filename) );
とりあえず、本事象は上記で回避できた。
ほかにも組み合わせがありそうな気が。。。だれか本格対処お願いします。m(_ _)m

↑本格対処がわかりました。mb_ereg_replaceの前におまじないがいるらしい。。。。
正解は以下。ついでに「♪」もREGZA君がわからないので置換する。
mb_regex_encoding('utf-8');
$filename = mb_ereg_replace("〜","~", trim($filename) );
$filename = mb_ereg_replace("♪","_", trim($filename) );
PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)
鈴木 憲治 山田 直明 山本 義之 浅野 仁 櫻井 雄大 安藤 建一
翔泳社
売り上げランキング: 26,308

2014年6月7日土曜日

hubot-loggerを設定する

hubot-loggerを設定する。文字化け対策もやる。対策に使うnkf.plは本ブログの過去記事を参照すること。ログの保存はutf-8になる。noticeでもログはとる。設定は以下。
(1)~/tools/hubot/package.jsonを修正。青字追加。
   :
  "dependencies": {
    "hubot": "~2.5.1",
    "hubot-scripts": ">= 2.1.0",
    "optparse": "1.0.3",
    "hubot-irc": "0.1.x",
    "hubot-logger": "~0.0.11"  },
   :
(2)~/tools/hubot/external-scripts.jsonを以下の内容で作成。
["hubot-logger"]
(3)% npm install
(4)~/tools/hubot/node_modules/hubot-logger/scripts/hubot-logger.coffeeを修正。
        :
log_message = (root, date, type, channel, meta) ->
  mkdirp(path.resolve root, channel)
  log_file = path.resolve root, channel, date.toString("%Y-%m-%d") + '.txt'
  meta.date = date
  meta.channel = channel
  meta.type = type
  if meta.message
    cmd = "~/tools/hubot/perl/nkf.pl -in " + escape(meta.message)
    exec = require('child_process').exec
    exec cmd, (err,stdout,stderr) ->
      meta.message=stdout
      fs.appendFile log_file, JSON.stringify(meta) + '\n', (err) ->
        if err
          throw err
  else

    fs.appendFile log_file, JSON.stringify(meta) + '\n', (err) ->
      if err
        throw err
        :
    robot.adapter.bot.on 'message', (nick, to, text, message) ->
      result = (text + '').match(/^\x01ACTION (.*)\x01$/)
      if !result
        log_message(logs_root, new Tempus(), "message", to, {nick: nick, message: text, raw: message })
      else
        log_message(logs_root, new Tempus(), "action", to, {nick: nick, action: result[1], raw: message })
    robot.adapter.bot.on 'notice', (nick, to, text, message) ->
      result = (text + '').match(/^\x01ACTION (.*)\x01$/)
      if !result
        log_message(logs_root, new Tempus(), "message", to, {nick: nick, message: text, raw: message })
      else
        log_message(logs_root, new Tempus(), "action", to, {nick: nick, action: result[1], raw: message }) 

        :
(5) ~/tools/hubot/runbot.shに以下の設定追加。
export IRCLOGS_PORT=3001 #expressがlistenするポート番号
export IRCLOGS_FOLDER="chatlogs" #ログの保存先
以上を設定すると、http://localhost:3001/irclogsでログを参照することができる。

2014年6月5日木曜日

hubotのbotスクリプトをperlで書く

hubotのbotスクリプトはcoffeescriptで書かれていて、ところどころ非同期動作となり初心者には難しく感じた。ある程度勉強してそれなりにかけるようになったが、複雑な処理をやらせようとするといつも私は壁に当たってしまう。めんどくさくなったので使い慣れたperlで書くことにした。
perlで書くといってもircとの接続部分はhubotを使うのでperlを起動し結果をircに渡す最低限の箇所だけcoffeescriptで書き、あとはperlで実装する方式を採用する。
実際、やってみたがあっさりできた。DB連携でき文字化けもせず今のところ問題ない。
やり方を公開しとく。
1.まず最初にやるのは本ブログで紹介したirc.coffeeの文字化け対策。詳細はこちら
2.次にbotをircに接続するため、以下の内容で
  ~/tools/hubot/node_modules/hubot-scripts/src/scripts/tellme.coffeeを作成。
# tellme.coffee
module.exports = (robot) ->
  robot.hear /^(tellme_del|tellme_add|tellme)(\ | ).+/i, (msg) ->
    cmd = "~/tools/hubot/perl/dbbot.pl "+escape('tellme')+" "+ escape(msg.match[0])
    exec = require('child_process').exec
    exec cmd, (err,stdout,stderr) ->
      msg.send stdout
3.runbot.shで上記スクリプトが読み込まれるよう
  ~/tools/hubot/hubot-scripts.jsonに以下青字を追加
["redis-brain.coffee", "shipit.coffee", "tellme.coffee"]
4.perlスクリプトを以下内容で~/tools/hubot/perl/dbbot.plに作成。mysqlのアカウントとパスワードは環境により修正要!
#!/usr/bin/perl
use utf8;
use DBI;
use Encode;
use URI::Escape;
exit if($#ARGV < 1);
$maxcnt=5; # 最大表示レコード数
$tbl=uri_unescape(decode("utf-8",$ARGV[0]));
$tbl=~s/%u([0-9a-fA-F]{4})/pack("U",hex($1))/ego;
$str=uri_unescape(decode("utf-8",$ARGV[1]));
$str=~s/%u([0-9a-fA-F]{4})/pack("U",hex($1))/ego;
$str=~s/\ /\ /g;$pos=index($str,' ');
exit if($pos == -1);
$exeid=substr($str,0,$pos);$key=substr($str,$pos+1);$exeid=~tr/A-Z/a-z/;
if($exeid =~ /.+_add$/){
    $pos=index($key,' ');
    if($pos == -1){print "内容がないよぅ\n";exit;}
    $val=substr($key,$pos+1);$key=substr($key,0,$pos);
}
if($key eq "help"||$key eq "?"||$key eq "?"){
    $exeid =~ tr/A-Za-z//;
    print "■".$exeid."マクロの使い方\n";
    print "\t登録・・・『 ".$exeid."_add <key> <val> 』\n";
    print "\t削除・・・『 ".$exeid."_del <key> 』\n";
    print "\t参照<完全一致>・・・『 ".$exeid." <key> 』\n";
    print "\t参照<部分一致>・・・『 ".$exeid." %<key>% 』\n";
    print "\t参照<前方一致>・・・『 ".$exeid." <key>% 』\n";
    print "\t参照<後方一致>・・・『 ".$exeid." %<key> 』\n";
    print " ※情報が複数ある場合は最大".$maxcnt."つまで表示する\n";
    exit;
}
if($exeid =~/.+_add/ || $exeid =~ /.+_del/){
    $dbh=DBI->connect('DBI:mysql:hubot', 'root', 'root');
    $dbh->do("set names utf8");
    $sql='SELECT * FROM `'.$tbl.'` WHERE `key` = '.$dbh->quote($key);%rows=();
    $sth=$dbh->prepare($sql);$sth->execute;
    while ($row = $sth->fetchrow_hashref()){$rows{$row->{key}}=$row->{val};}
    $sth->finish;
    if(scalar(keys(%rows)) == 0){
        if($exeid =~ /.+_del/){
            $dbh->disconnect;print "そんなキーワードないよ!!\n";exit;
        }
        $sql='INSERT INTO `hubot`.`'.$tbl.'` (`key`, `val`) VALUES ('.
            $dbh->quote($key).', '.$dbh->quote($val).');';
        $val="追加しました!!";
    }
    else{
        if($exeid =~ /.+_del/){
            $sql='DELETE FROM `hubot`.`'.$tbl.'` WHERE `'.$tbl.'`.`key` = '.
                $dbh->quote($key).';';
            $val="削除しました!!";
        }
        else{
            $sql='UPDATE `hubot`.`'.$tbl.'` SET `val` = '.$dbh->quote($val).
                ' WHERE `'.$tbl.'`.`key` = '.$dbh->quote($key).';';
            $val="更新しました!! 旧->".decode("utf-8",$rows{encode("utf-8",$key)});
        }
    }
    $sth=$dbh->prepare($sql);$sth->execute;
    if($sth->err){print "ERROR! ".$sth->errstr."\n";}else{print $val."\n";}
    $sth->finish;$dbh->disconnect;
}
else{
    $dbh=DBI->connect('DBI:mysql:hubot', 'root', 'root');
    $dbh->do("set names utf8");
    if($key =~ /.*%.*/){$ope="LIKE";}else{$ope="=";}
    $sql='SELECT * FROM `'.$tbl.'` WHERE `key` '.$ope.' '.$dbh->quote($key);
    $sth=$dbh->prepare($sql);$sth->execute;%rows=();
    while ($row = $sth->fetchrow_hashref()){$rows{$row->{key}}=$row->{val};}
    $sth->finish;$dbh->disconnect;
    if(scalar(keys(%rows)) == 0){print "そんなキーワードないですよ!!\n";exit;}
    foreach $key(keys(%rows)){
        print "%u0016".$key."%u000f ".$rows{$key}."\n" if($ope eq "LIKE");
        print $rows{$key}."\n" if($ope eq "=");
        $maxcnt--;last if($maxcnt < 1);
    }
    print "・・・以下省略。ほかにもあるよ!!\n" if(scalar(keys(%rows)) > 5)
}
5.DB準備。
 (1)MySqlインストール
 (2)DB作成。名前は「hubot」
 (3)テーブル作成。名前は「tellme」。カラム数は2
 (4)テーブルの構造設定。
   1カラム目:名前「key」データ型「char」長さ「255」照合順序「utf8-bin」
   2カラム目:名前「val」データ型「char」長さ「255」照合順序「utf8-bin」

これで準備完了。cd ~/tools/hubot ; ./runbot.shで起動するとmybot君がチャットに登場する。
使い方は、
 tellme_add キーワード 内容
でDBに情報登録
 tellme キーワード
でDBの情報をチャットに出力
 tellme_del キーワード
でDBのレコードを削除
ちなみに、tellme.coffeeの robot.hearの行を
 robot.hear /^(なんとか_del|なんとか_add|なんとか)(\ | ).+/i, (msg) ->
にかえると、「なんとか」でbotが反応するようになる。
また
    cmd = "~/tools/hubot/perl/dbbot.pl "+escape('tellme')+" "+ escape(msg.match[0])
のtellmeを「なんとか」にかえるとテーブル名「なんとか」でDB登録参照するようになる。

ゼロからわかる Perl言語超入門
高橋 順子
技術評論社
売り上げランキング: 81,545