ポケモンGO:GBL ゲージ管理暗記帖

2025/8/22 [08:47:09] (金) 天気

前回のエントリ「算数:九九からやり直し」の続編。


ポケモンGOの対人戦では

「通常技を何度撃ったらゲージがいくつ貯まって特別技を撃てる状態になるのか」

というのを把握する必要がある。

ところが、わたしは数字も苦手だし、算数数学は論外。話にならない。


せめて、対人戦でよく出てくるポケモンの技ぐらいは把握しておきたい。てことでスクリプトをでっちあげた。

image

GBL(対人戦)でよく出てくるポケモンの通常技と特別技を表示。通常技の増加ゲージ量と特別技の必要ゲージ量を伏せて表示してるだけ。


この程度のものでもスマホでアクセスして確認できるから便利。

受験生たちの単語帳、単語カードの還暦爺い版。


これでちょっとはボケ防止になればいいかな。


…というだけのエントリ

[更新]2025-08-24 22:26:36

HTTP Signatureをlolipopレンタルサーバーで作成

2023/8/22 [09:42:59] (火) 天気

ActivityPubでPOSTするには電子署名が必要。

というエントリを書いたけど、WEBでサーバー同士でやりとりしたり、WEBサービスのAPIを利用したり、電子署名が必要なのはActivityPubに限らず。


ちらほら書いてきたように、lolipopレンタルサーバーにはperlで電子署名をする時によく使われるモジュール「Crypt::OpenSSL::RSA」がインストールされていない。

ということは。lolipopではHTTP Signatureを作ることができない「Cryptが使えないんじゃ話にならない」ということになる。


しょうがないんで、ローカルにcpanから「Crypt::OpenSSL::RSA」をインストールして、ActivityPubにPOSTする時はローカルのスクリプトを使う、という急場しのぎ。

これはこれで、投稿するのにひと手間あった方が事故も起こさなくていいかな、と思ってやってたんだけど、やっぱりサーバー上だけでやれるならラクちんなことは確か。


なもんで、グーグル先生にお願いしてみたら

「Crypt-Perl-0.38」https://metacpan.org/pod/Crypt::Perl

↑pure perlのCryptモジュールがあった。


インストール時にコンパイルが必要なモジュールはOSやファイル構成、環境に依存するけど、PurePerlというのはperlだけで作られているので、perlさえあればサーバーにそのままアップロードして使える。


さっそくダウンロードして展開。テストスクリプトで試したところ、依存関係で必要なモジュールがあったのでそいつらもダウンロードして展開。


Class-Accessor-0.51

Bytes-Random-Secure-Tiny-1.011

Convert-ASN1-0.34

Crypt-Format-0.12

(あと、たぶん以前amazonのAPIがらみでインストール済みのpure perlのDigest::SHAも必要)

当然ながら(?)これらのモジュールもpure perlなので、コンパイル不要、展開するだけで使える。


サーバーの適当なところ、例えば「lib」というディレクトリを作って展開したファイル群をアップロードするだけ。

lib/Bytes/

lib/Class/

lib/Convert/

lib/Crypt/

スクリプトでuse lib ’lib’などとやればlolipopレンタルサーバーでもCrypt RSAが使えるようになる。


いや。ぶっちゃけ。これらモジュールの作者のみなさんには大感謝。大袈裟じゃなく狂喜乱舞小躍りだった。ほんとうにありがとうございます。

マジperl使いすげー。perl話者が減ってるだろう昨今、凄腕のperl使いはワシントン条約で保護すべき存在。


使い方は「RSAモジュールで公開鍵と秘密鍵」とほぼ同じ。


秘密鍵を使う

my $privatekey = Crypt::Perl::RSA::Parse::private($private-pem);

公開鍵を使う

my $publickey = Crypt::Perl::RSA::Parse::public($public-pem);


Signatureを作る。

my $sign = $privatekey->sign_RS256($sign-str);
encode_base64($sign, "");

Signatureを検証する。

my $decoded = decode_base64($sign);
$publickey->verify_RS256($sign-str, $decoded);


あとは。

こうすると、思いつきから投稿放流までが直結するので、事故を起こさない自制心が必要となるです、はい。

image

xyzzyのバッファを書き出す

2015/8/22 [15:44:21] (土) 天気

PDFのデータをWEBの管理ページにコピペという単調なワープアIT軽作業。

ぺたぺた貼りつけるだけならいいんだけど、PDFのデータは印刷のことを考えて(?)半角数字などの両側に半角のスペースが入ってたりするし、改行があるとWEBで表示すると半角程度空白になってしまう。


・PDFからエディタにコピペ

・無駄な半角スペースと改行を削除

・エディタから管理ページのフォームにコピペ


という作業。

毎度毎度エディタに貼りつけ置換して…いちいち同じ作業にむかついてきたので、調べてみた。


xyzzyというWINDOWSのエディタを10年以上使っていて、以前はマクロ(lisp)が面白くていろいろいじくってた。でも、もうすっかりびっくり忘却の彼方。lispは手強い。


とりあえず。xyzzyの編集中のバッファをperlに渡して処理させて、その結果を編集中のバッファに書き出して、クリップボードにコピーしてくれればいいや、と久しぶりにxyzzyのlispを調べた。


・カレントバッファをtmpファイルに書き出す

・外部コマンドでtmpファイルを開いて処理をして、その結果をカレントバッファに書き出す

・クリップボードにコピーする


(defun put-current-buffer-to-tmpfile ()
  (interactive)
  (setq temp-file "_xyzzy.tmp")
  (delete-file temp-file)
  (write-file temp-file)
  (execute-shell-command (concat "_xyzzy-tmp.bat" " " temp-file) t (selected-buffer))
  (copy-region-to-clipboard (progn(goto-bol)(point)) (progn(goto-eol)(point)))
)

perlを使えば何でもできるしなあ。


…て、「_xyzzy.tmp」とファイルを仲介してるんだけど。バッファを標準出力に出してそれを標準入力でperlが受けとるのが本来あるべきスマートな姿。Windowsだと無理、かなぁ…。



以下、外部コマンド実行でハマったのでメモ。

外部コマンドを実行するための関数「execute-shell-command」があって、xyzzyのリファランスを見ると


外部プログラムを実行します。結果だけをxyzzyに取り込みます。

  COMMAND    : 実行するコマンドをオプション付で指定します。
  INFILE     : 標準入力を使用する外部プログラムであれば入力ファイル名を指定します。
  OUTPUT     : 標準出力を出力するバッファを指定します。
  ENVIRON    : 設定する環境変数を連想リスト形式で渡します。
                (("HOME" . "C:/applications/xyzzy/")
                 ("TOPDIR" . "C:/spool/"))
  DIRECTORY  : 実行するディレクトリを指定します。


ところが、INFILEにtemp-fileを指定しても、ファイル名が引数になってない=指定のファイルを開けない。


具体的には

(execute-shell-command "_xyzzy-tmp.bat " t temp-file (selected-buffer))

INFILEにtemp-fileを指定すればバッチファイルの引数に渡されると思ったらダメだったので、perlのスクリプトの中で$f=’_xyzzy.tmp’とファイル名を固定で指定してた。

これは超ダサイ。


なもんで、

(execute-shell-command (concat "_xyzzy-tmp.bat" " " temp-file) t (selected-buffer))

↑COMMANDにtemp-fileを入れたコマンドライン文字列を作って入れたところ、バッチファイルでtemp-fileを受けとることができた。

system関数にsprintfでコマンドを作って実行させる、ようなものだ。


うーん、でもきっとINFILEを使った方がいいんだろうなあ。

とはいえ、目先、今月8月も残り10日を切ってるんで、不細工でもこいつで作業してやっつけてしまわんと。時間がかかればかかるほど単価がアレになってしまうんで、〆切一ヶ月前倒し進行!


[08/31 19:48:13]追記。

て、optionalのところ、nilだtだじゃなく、ここにINFILEを書けばいいだけの話だった。誤情報すみません。



ちなみに、xyzzyでは「filter-buffer」というのがあって、「Ctrl+x #」と叩くと、外部コマンドを実行するための1行バッファが現われる。

ここに外部コマンドを入力すると、編集中のバッファ(カレントバッファ)を外部コマンドに渡してくれる。

単純なものならperlのワンライナーでやりたい放題だし、スクリプトを実行させるためのバッチファイルでもOKだ。


超手強いlispを避けて、普段使い慣れてる処理系で書けるのは本当に助かる。


image

[更新]2015-08-31 19:48:13

DBD::Excelとか麻布十番納涼祭りとか

2009/8/22 [18:40:42] (土) 天気

朝から毎月定例の内科。今日は採血されて結果は来月。


帰ってから、ちょっとperl。

毎週ルーチンで、60個前後のエクセルファイルを開いてcsvに保存する、という実に馬鹿馬鹿しい低脳作業がある。こんなもの人間のやる仕事じゃない。腐れエクセルには1mmも触りたくない。

複数人が並行で入力しているんだけど、さいわい、シートの名前に規則性があるんで、以前ちらっとここで触れたDBD::Excelを、本稼動させてみた。


ディレクトリにあるxlsファイルを開いて、特定のシートをcsvに吐き出す


#!/usr/local/bin/perl

use strict;

use Encode;

use utf8;

binmode OUT=>’:cp932’;

use Spreadsheet::ParseExcel;

use Spreadsheet::ParseExcel::FmtJapan;

my $oFmtJ = Spreadsheet::ParseExcel::FmtJapan->new(Code =>’cp932’);


my $sheet = shift(@ARGV);

my $orig_dir = ’xls/’;

foreach my $d ( @{ $section_dir } ){

opendir(DIR, $orig_dir) || die;

my @files = grep(/.xls/, readdir(DIR));

closedir(DIR);

foreach (@files){

my $xls = $orig_dir . $_;

my $oBook =

Spreadsheet::ParseExcel::Workbook->Parse( $xls, $oFmtJ);

my $ws; my $wc;

for(my $i = 0; $i < $oBook->{SheetCount}; $i++){

$ws = $oBook->{Worksheet}[$i];

if( $ws->{Name} =~ m!$sheet! ){

printf qq{XLS:%s Sheet:%sn}, $xls, $ws->{Name};

for(my $r = $ws->{MinRow}; $r <= $ws->{MaxRow}; $r++ ){

my @buf;

for(my $c = $ws->{MinCol}; $c <= $ws->{MaxCol}; $c++ ){

$wc = $ws->{Cells}[$r][$c];

my $value = $wc ? $wc->Value : ’’; $value =~ s/,//g;

push(@buf, $value );

}

print join(’,’, @buf), "n" if @buf;

}

}

}

}

}


これだけ。

今日は、ヨメと昼前には麻布十番納涼祭りに出かける予定だったので、時間がないかな、と思ってたのに、20分もかからずスクリプト完成。あとは現物合わせな例外処理だの作りこめば実戦投入できる。

いやもう、ほんと便利で、DBD:Excelの作者には大感謝!糞エクセルからまた一歩離れることができたゼ。ざまみろ。って、休みに仕事なんぞしてちゃいかんだろ、おれ。


大盛況おお賑わい大混雑の麻布十番納涼祭り。今年こそは国際バザールでちゃんと食おうと、開店前に並ぶ気合。ヨメはドイツ、わたしはブラジルに並び、フランクとシュラスコをがっつり食う。比較的すいていたラオスでおじいさんとおばあさんが上げていたスパイシーチキンまで堪能できた。ちなみに、3時開店のときにはもう行列となっていた。どれも美味でありました。大満足。

その後麻布十番側にいって、うろつく。オリオンビールとか赤ワインとか純米酒とか、馬肉ソーセージとか。しかし、今日の暑さ、人ごみにバテバテ。面白かったんだけど、ちょっと余裕がなかった、かも。


あとは、部屋でのたのた転がるかしらん。


[更新]2012-06-19 16:19:12

入力formをAjaxにすると

2008/8/22 [09:11:58] (金) 天気

状態が変わった場合に、同じページのほかのコンテナの表示も変えないといけないケースがけっこうあるぞ。ページごと移るなら話は単純だけど。

ううむ。気づいてなかった。入力した、もしくは削除したのに、ページ内の表示が変わらないのはマズイ、ていうか、そんな腐ったページはありえない。

なにかアクションを起こしたら、必ずそれがわかる、てのが世の中の大原則、いわば等価交換だ(by フルメタルアルケミスト)


Ajaxを使った入力formでデータの状態を変えたら、データを表示しているコンテナに反映させるためのRequestも必要ってこと。んでなんでAjaxかというと非同期だから。…これで、たぶん、まぬけにハマる。


new Ajax.Requestあれこれ

この時点で、デフォルトだと、返事が帰ってくる前に別の処理を始められるのがAjaxというやつ。これがチョー便利なんだけど(初老のおっさんが「チョー」はない)、だけど、今回の入力formとその反映を考えると返事を待たなきゃいけないぢゃん。


Ajax.Requestを複数仕込む時に。

new Ajax.Request あれこれ

new Ajax.Request あれこれして変更されたデータを取得


最初のpostするRequestはデフォルトを同期に変更して、次のgetするRequestは非同期。てことでイケる…ような気がしてきたぞ。週末にでもちょっと試してみるか。だめならperlの側でsleepをいれてごまかす、というのもありだな。


にしても、案の定、というか無知なままのJavascriptなんかを使うんでハマりまくりだ。でも、Ajaxは流行だし、わたしは流行に弱いミーハーだし(あれ?もしかして、ミーハーも死語かな)


まだ先は長かった、か。とほほ。


夕方のスコールが続いたかと思ったら、いきなり涼しい都心だ。


[08/22 23:23:39]

なんか今日もこき使われてへとへとの図。牛馬だぜ、やれやれ。こんなじゃ青空所属も近いな。と、ぶちぶち言ってもしょうがない。


で、検索してみたらやっぱり、Ajax.Requestで「非同期」じゃなくて、同期通信の要望・ノウハウがちらほら。そりゃそうだよなあ。更新系がすんでから、それを閲覧、というのが普通だ。その一方で、

サーバー側がコケるとクライアントが固まるから、同期通信は「推奨」されない、てのももっともな話。

うううむ。非同期でやると、サーバー側perlにsleepさせるしかないけど、sleep時間が短かいと確実じゃないし、長すぎると連打されて簡単に負荷がかけられる。クライアントを固めるようなことになっても、更新系がからむところは同期でいくほうがいいよなぁ。どっちにしてもあちこち見直しが必要だわ。ふうう。


[更新]2026-02-04 09:43:07

<<2026/08>>
      1
2345678
9101112131415
16171819202122
23242526272829
3031

【最近の10件】

日常読書映画アニメゲーム健康料理グルメカメラ写真ネタ仕事パソコンインターネットperlEPUB3電子書籍ActivityPub
検索: