HappyParityHPHP このページをアンテナに追加 RSSフィード

趣味のことしか書かないぞっ

発狂BMS三段
最近はIRCマクロ・スクリプトとか気になってる

2013-01-04 一段と寒い このエントリーを含むブックマーク

なんか今日めっちゃ寒くないすか(;´∀`)

昨晩は故郷の友達と飲んだりしてました。

下品なハナシが飛び交ったりしたけどこれが面白くて、やっぱり東京の友達と地元の友達は全然雰囲気が違って楽しいなぁと思ったり。自分が東京でキャラをある程度作っちゃってるのが原因かもわからんのだけど。


[さくらVPS]必要最低限の設定

自分はさくらのVPS(v3) 1Gを契約してます。

以前にもいろいろ使ってたけど、まぁ一旦全部消すことにしてOSの再インストールをし、zshの導入までは済ませました。

  • ユーザを作る
    • rootでログインする

adduser neet

passwd neet

一行目で新しいユーザ「neet」の完成。

二行目で、「そのneetに使うパスワード設定してよ」ってことなんで、これを二回入力する。

トラックバック - http://d.hatena.ne.jp/atcgouch/20130104

2013-01-02 笑点の楽しさ

昨日書くべきことだったような気もするけど忘れてたので。

昨日笑点の2時間(3時間?)スペシャルがやってましたが、やっぱり落語というか大喜利ってめっちゃ楽しいんですね。

特に東西対決がもう見てて感動すら覚えました。

ベテランの落語家は本当にウマい。勉強してみるのも面白そうだ。

[][]unite.vimつっこむ 22:30 unite.vimつっこむを含むブックマーク

sudo apt-get install git

githubにあるShougoさんのブランチ?をcloneする必要があるため。

mkdir git

git initしないとcloneも何もできないので。これは別にどこに作っても良いと思う

git clone git://github.com/Shougo/unite.vim.git

Shougoさんのをcloneした

mv unite.vim ~/.vim/bundle

homeディレクトリの.vim以下にbundleとしてリネーム・移動する

[][][]LAMP環境 00:12 LAMP環境を含むブックマーク

UbuntuなのでLAMPのLは解消。あとはApache、MySQL、PHPを入れましょう。

参考

sudo apt-get install apache2 mysql-server php5 php5-mysql

これでズゴズゴ入れて終わり。

MySQLを入れるときにパスワードを設定するように言われるので、同じ物を二回入力して終わり。

次は動作確認

mysql -u root -p

Enter password:

Welcome to the MySQL monitor. とか出てきたらok。

quit

で終了。次はApache

ブラウザを起動して、アドレスバーに"localhost"とだけ入力する。httpとかなくていい。

"It works!"って画面が出てきたらok

次はphpのチェック

cat /etc/apache2/sites-available/default | grep DocumentRoot

DocumentRoot /var/www

ここのディレクトリにいろいろ突っ込めばlocalhost/hogeって感じで見えるようになる。

sudo vi /var/www/phpinfo.php

phpinfo();と書いて、localhost/phpinfo.phpに接続。phpinfoが出てくればok。

[Apache]ローカルにHPのローカル環境を作る

さくらサーバーを契約してますが持て余してます。

ですがさくらサーバーにいちいち本番のソースをupしたりするのはナンセンス、ローカル環境でテストした上で運用していきたいものです。

〜〜中断

トラックバック - http://d.hatena.ne.jp/atcgouch/20130102

2013-01-01 あけましておめでとうございます。

あけましておめでとうございます。

今年も宜しくお願いします。

元旦になって「やれていなかったことをしっかりやる」という目標を立てました。

全然LimeChat2のマクロとかやってませんでしたね。すいません。

なんとなく、Ubuntuの環境設定まで書きたくなったので自分の備忘録のためにも。

[][]VMWareダウンロードインストール 20:40 VMWareのダウンロード、インストールを含むブックマーク

  • 以下のサイトにアクセス

http://www.vmware.com/jp/products/desktop_virtualization/player/overview.html

インストールが終わるまで放置。

[][]Ubuntuダウンロードインストール 07:33 Ubuntuのダウンロード・インストールを含むブックマーク

とあるので、自分のニーズに応じて。自分は12.04で。

  • VMwareに新しい仮想マシンを作成
    • VMware Playerを起動し、「新規仮想マシンの作成」を選択
    • インストーラディスクイメージファイルを選択、先程DLしたUbuntuのisoを選択し「次へ」
    • フルネームはマシンの名前
    • ユーザー名はそのまんま
    • パスワード、確認には同じものを入力。
    • 仮想マシン名はまあ適当で
    • 場所も差し支えなければそのまま
    • ディスクサイズは差し支えなさそうなので20GB
    • ディスクの分割もまぁ差し支えなければ分割
    • 完了
  • VMware Tools
    • なんか聞かれたけどインストール。これがあればホストマシンとファイルの共有ができる

[]インストール後のいろいろ 21:40 インストール後のいろいろを含むブックマーク

  • 日本語化したい
    • System SettingsからLanguage Support->Install/Remove Languages... ->Japaneseを見つけてチェックをつけ、Apply Setting
    • 多分なんかインストール始まるけど放置
    • リストに日本語が追加されるのを確認したら、ドラッグ&ドロップでリストの一番上に移動する。
    • 一回ログアウトし、もう一度サインイン
    • DesktopやMusicを「デスクトップ」みたいに日本語にするか聞かれる。自分は英語のほうがいいのでそのままにした。
  • 日本語で入力したい
    • 入力方式の選択
      • 設定からキーボードレイアウトを選択
      • 左下の「+」を押して「日本語」を選択(Macintoshとかかな入力は無視)
      • 左下の「^」を選択して優先度を上げる
    • IME
      • 端末を開いて、

sudo apt-get install ibus-mozc

インストールが終わったら一旦ログアウト、サインイン。

      • WindowsでVMwareを使っているので、VMwareにフォーカスが載ってる状態でWin+Fして「gnome」で探すと「端末」が出てくる。
      • 「ibus-」でTabを押すとibus-daemon, ibus-setupとか出てくるので、ibus-setupを選択
      • キーボードショートカットの項目は一旦全部消去し、「...」をクリックしたあと「半角/全角キー」を押下。追加して「Release+Zenkaku_Hankaku」になっていればok
      • インプットメソッドで「使用するインプットメソッドをカスタマイズ」にチェックを入れ、「インプットメソッドの選択」から日本語->Mozcを選択。最初から入ってるやつ(Anthy?)は削除するなり好きにして、とりあえずMozcが一番上になるようにする。
      • これでGoogleIMEが使えるようです

[]いろいろ突っ込んでみる 07:33 いろいろ突っ込んでみるを含むブックマーク

sudo apt-get update

まぁお約束。

sudo apt-get install vim-gnome

なんか気に入ってるので。

sudo apt-get install zsh

chsh ~s /bin/zsh

(このあとログアウト・サインイン)

神シェル。

sudo apt-get install ubuntu-restricted-extras

ここを参考に。

途中でLicence Termに同意するかどうかの画面が出るが、「了解」を選択するには十字キーであることに注意。なんかvimのクセでhjklでも何も反応ないなーって悩んでた。アホか。

sudo apt-get install chromium-browser

Chromeですね。

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java7-installer

java。

[][]zshの設定 07:33 zshの設定を含むブックマーク

初回zsh起動時に.zshrcのセットアップが出るはずなのだがなぜか出なかった。

vi ~/.zshrc

で自分で.zshrc作って、だいたいここを真似た。

トラックバック - http://d.hatena.ne.jp/atcgouch/20130101

2012-06-27 はてなダイアリーのリニューアル

[]2年ぶりにはてなダイアリーを再開してみます。 01:13 2年ぶりにはてなダイアリーを再開してみます。を含むブックマーク

就職が決まってはや3ヶ月、色々やりたいこととか趣味が増えてきたので、そのメモっぽくやります。

最初っから書くことはないや。

とか言いながらやっぱり書こう。

[][][]LimeChat2のスクリプト その1 01:30 LimeChat2のスクリプト その1を含むブックマーク

ずっと前からIRCは使ってきてましたが、マクロというものはしばらく使って来なかった。

使ったことがあるとしてもせいぜい「おみくじ」とか「自動オペレータ権限付与」とか「棒読みちゃんに読ませる」程度。

だがもっとできることがあるはず、マクロの他にもスクリプトというものもある


ということで色々調べてみようと思った次第。

だがマクロは正直飽きた(?)っつーかスクリプトやってみたいッスよ!ってこと。


ではまずLimeChat2にあるスクリプトのヘルプを読んでみます



マクロの基本中の基本はこんなところ。

この次はイベントかな。

[][][]LimeChat2のスクリプト その2 02:09 LimeChat2のスクリプト その2を含むブックマーク

イベントハンドラ編。

イベントハンドラって他の言語でもいっぱいあるけど、再確認のためにググって意味を調べた。

イベントハンドラとは (event handler): - IT用語辞典バイナリ

イベントハンドラとは、JavaScriptで記述された、マウスの動きといった動作・操作に対して特定の処理を与えるための命令のことである。

簡単に言うなら「何かが起きた時に発動する関数」ってとこすかね。

LimeChat2では「スクリプトがロードされたとき」「サーバに接続した時」とか色々あるようだ。

そういうわけで列挙していきましょう。

今回はただヘルプに載ってることを自分用に丸写ししてる感じ。

これをどう使うかの活用編は後日です。

(以降の引用およびソースコードはLimeChat2のヘルプから)

と、その前に

イベントハンドラは、event:: のプリフィクスをつけて定義します。

function event::onChannelText(prefix, channel, text) { }

とのこと。これを忘れてはいけない(迫真)


onLoad()

スクリプトがロードされた時に実行

  • そのまんまですね。読み込まれた瞬間に発動したい処理があるならこれってことかな。

onUnload()

スクリプトエンジンが終了する時に実行されます。 スクリプトファイルが更新されてリロードされる場合には、まず既存の環境で onUnload が呼ばれ、環境が作り直されてから onLoad が呼ばれます。

  • 言いたいことはわかるのだけど、使い道がまだ思いつかない。

onConnect()

サーバに接続し、ログインしたときに実行されます。

  • onLoad()との違いは「スクリプトが読まれた時」と「サーバに接続ができたとき」は別ってことだね。

onDisconnect()

サーバとのコネクションが切断された時に実行されます。

  • これは説明不要だね。何か使い道があるとしたら音声でお知らせとかかな?

onChannelText(Prefix prefix, String channel, String text)

onChannelNotice(Prefix prefix, String channel, String text)

onChannelAction(Prefix prefix, String channel, String text)

チャンネル内でのテキストメッセージを送受信した時に実行されます。

自分が送信した場合にも呼ばれるので、必要な場合は以下のように分岐してハンドリングしてください。

function event::onChannelText(prefix, channel, text)
{
  if (prefix.nick == myNick) {
    // 自分が送信した時の処理
  } else {
    // 受信した時の処理
  }
}
  • チャンネル内で「Text」「Notice」「Action」のやりとりをした時に行われる関数。ただし自爆する可能性もあるから、if文を使ってうまいこと処理してねってことですね。

onTalkText(Prefix prefix, String targetNick, String text)

onTalkNotice(Prefix prefix, String targetNick, String text)

onTalkAction(Prefix prefix, String targetNick, String text)

一対一のトーク内でのテキストメッセージを送受信した時に実行されます。

チャンネル内での場合と同じように、自分が送信した場合にも呼ばれます。

  • IRCにはチャンネルに入ること無く1:1で会話ができる「トーク」というものがある。それで何かしらのやりとりがあったときに起動する関数。これも上記のonChannelxxxxと同様に自爆の可能性があるみたい。

onDccChatText(String frame, String nick, String text)

DCC チャット内でメッセージを送受信した時に実行されます。

自分が送信した場合にも呼ばれます。

  • DCCでファイル送信とかならやったことあるけど、DCCでチャットってなんだろ。あとで調べます。

onJoin(Prefix prefix, String channel)

onPart(Prefix prefix, String channel, String comment)

onQuit(Prefix prefix, String comment)

onKick(Prefix prefix, String channel, String target, String comment)

onNick(Prefix prefix, String newNick)

onMode(Prefix prefix, String channel, String mode)

onTopic(Prefix prefix, String channel, String topic)

onInvite(Prefix prefix, String channel)

onError(String message)

それぞれの IRC コマンドを受信した場合に実行されます。

  • なんてそっけない説明だ…いや、これ以外の説明ができそうにないのだが。

onNumericReply(int number, String msg)

Numeric reply を受信した場合に実行されます。

  • クライアントサーバではない、ただのユーザと考える)がサーバにメッセージを送る仕組みになっているが、サーバはメッセージを受け取った時に何かしらの反応をする。その反応というのが数字の羅列であるとのこと。つまりはこっちが何かしらのメッセージを送って、サーバがそのメッセージに対して何かしらのリアクション(「受け取ったぞ」とか「何言ってんのお前?」みたいな)をしたときに発動するらしい


onCtcp(Prefix prefix, String target, String command, String param)

CTCP を受信したときに実行されます。

  • CTCPは相手がどんなソフトを使っているか、とかPingがどれほどか、とか相手のPCの時間は何時何分、とかそういう情報みたい。

onCtcpReply(Prefix prefix, String target, String command, String param)

CTCP に対する応答を受信したときに実行されます。

  • CTCPを送って、それに対する返答(実際の情報)が帰ってきた時に発動する関数ってことかな。

onDccSend(Prefix prefix, String target, String filename, int size, String address, int port)

DCC でのファイル送信要求を受信したときに実行されます。

今のところ、スクリプトからファイルの受信を制御することはできません。

  • 相手がファイルを送ろうとしたときに発動かな?

onDccChat(Prefix prefix, String target, String address, int port)

DCC でのチャット要求を受信したときに実行されます。

  • どうやらDCCでもチャットができるみたい。相手にポートを「開けてもらって」、そのポートを通じてチャットをするらしい。そんでこの関数は、「誰かさんが『ポート変えてさ、DCCチャットしない?』」ってメッセージが来た時に発動するみたい。


onModeChange(Prefix prefix, String channel, String mode, String param)

チャンネルモードの変更があった場合に実行されます。

onMode ではモードの変更を表す文字列がそのまま渡されますが、onModeChange では一つ一つバラバラに渡されるので、自分でモード変更の文字列をパーズする必要がありません。

下のようなスクリプトは onMode では動かない場合がある (たとえば +ooo foo bar baz のようなとき) ので、onModeChange を使ってください。

function event::onModeChange(prefix, channel, mode, param)
{
  if (mode == '+o' && param == myNick) {
    send(channel, 'Thanks!');
  }
}
  • IRCのチャンネルには「モード」というものがあって、それが例えば「招待状を送った人しか入れない」とか、「人数制限をかける」とか色々ある。それらの条件(モード)に変更があった瞬間に実行される関数らしい。

onHighlight(Prefix prefix, String command, String channel, String text)

キーワード反応したときに実行されます。

  • マクロでもキーワード反応はよく使われるけど、当然スクリプトにもあります。引数を見たところcommand、channel、textがある。なるほど確かに柔軟にアクションを作れそうだ!

onNewTalk(Prefix prefix, String command, String text)

新規トークが開かれたときに実行されます。

  • これもっと上に書くべきだったんじゃね?

onSendingCommand(String command, String param, EventContext context)

入力フィールドから、/command のようなコマンドを送信するときに実行されます。

IRC コマンドの場合は、スクリプトで処理されずにサーバに送信されるので、このイベントハンドラは呼ばれません。

command は、必ず大文字で渡されます。

context.handled = true を呼ぶと、このスクリプトでコマンドを処理することを宣言したと見なされ、以降別のスクリプトで処理されず、サーバにも送信されません。

たとえば、以下のようにすると、/j チャンネル名 で Join コマンドを送信できます。

function event::onSendingCommand(command, param, context)
{
  if (command == 'J') {
    join(param);
    context.handled = true;
  }
}
  • コマンド送信の役に立つようだ。まだちょっと良くわからないので要調査。

今回はイベントハンドラのみを調べてみた。

[][][]LimeChat2のスクリプト その2.1 02:51 LimeChat2のスクリプト その2.1を含むブックマーク

さっそく雑なスクリプトを書いてみた

使うものはonConnect()とdisconnect()である。

カンのいい人はお分かりであろう、つながった瞬間に即刻切断するという謎スクリプトである。

でも最初はこういうコードから始めたほうがいいと思うんだよね。

御託はたくさんなのでコードを書きましょう。

エンコーディングUTF-8、ファイル名は適当にtest01.jsにしました。

function event::onConnect(){
 disconnect();
}

                                      ┼ヽ  -|r‐、. レ |
                                       d⌒) ./| _ノ  __ノ
                                      ---------------
                                      制作・著作 NHK

これだけではあんまりか。

ではLimeChat2を開き、まずはスクリプトを突っ込もう。

その1に書いた「メニュー→設定→スクリプトの設定→スクリプトフォルダを開く」の通り。

エクスプローラが開くのでそこに突っ込む。

するとtest01.jsが読み込まれて、「ファイル名|サーバ名1|サーバ名2|…」と書かれた表が出来上がっているはず。

ここに何も表示されてない人はLimeChat2でチャットをしたことないんじゃないか?まだ早すぎるからお引き取り願いたい。

んでスクリプトを適応させたいサーバの列に合わせて右クリックで「○」をつける。

あとはスクリプトが有効化されたサーバに接続してみよう。

ちなみに僕がやったらこうなりました

02:40 ログインしました

02:40 切断しました

02:40 Welcome to the Internet Relay Network Sirius_!~Sirius@xxxxxxxx

あたりめーだ!

…あれ?Welcomeメッセージが切断したあとに着てる。なんだろこれ。

さてもう一個くらい関数作ってみますか。

あと、さすがにグローバルプロパティとかグローバル関数については正直燃え尽きました。

イベント(コピペの繰り返しだったけど)も結構たいへんでした。

じゃあ次は話しかけられたらnicknameを変更することにしましょう。

使う関数はonChannelText(),nick()です。

さっきのtest01.jsに続けて書きましょうただしさっきのdisconnect()の行頭に//をつけて無効化しておきましょう。

function event::onConnect(){
// disconnect();
}

function event::onChannelText(prefix, channel, text){
	nick("kogekoge");
}

コゲコゲ言うてますがジョジョは好きです。

この状態で再び読み込ませるには何をすれば良いのかわからなかったけど、何回か試行したら動いたんでおk。

ログを貼っておくとこうだ

03:06 (Sirius) 3

03:06 *nick Sirius → kogekoge

もちろん僕が手動でnickを変えたりはしていない。


なるほど、だんだんおもしろくなってきたぞ。

でも眠くなってきたので今日(27時)のところはこれでおしまいにします。

トラックバック - http://d.hatena.ne.jp/atcgouch/20120627