if文の中でlastを使う

if (1) { print "hoge\n"; last; print "foo\n"; print "bar\n"; } # Can't "last" outside a loop block at 〜 括弧を二重にしてやると動く。知らなかった。 if (1) {{ print "hoge\n"; last; print "foo\n"; print "bar\n"; }} perlsynを参照

難読化されたJavaScriptコードを展開するスクリプトを書いた

難読化されたJavaScriptコードをコマンドラインで展開してくれるツールを 探したけどパッと見つからなかったのでOnline JavaScript beautifierで使われている js_beautify.jsというのをPerlに翻訳してみた。https://github.com/hironorism/p5-js-beautify 使…

1台サーバでFastCGIアプリをダウンタイム無く更新する方法について

なんか難しく考えていたけど実に単純な方法で出来るような気がしたのでメモ。 アプリ(fcgi_app.psgi) #!/usr/bin/env plackup -s FCGI use Plack::Handler::FCGI; my $app = sub { return [ 200, [ 'Content-Type' => 'text/html' ], [ 'BEFORE' ] ]; }; my …

何度目かのmergesortのお勉強

今度は同マージソートPerl my @b; sub merge_sort { my ($a, $low, $high) = @_; $low //= 0; $high //= @$a -1; my ($i, $j, $k); return if $low >= $high; my $mid = int( ($low + $high) / 2 ); merge_sort($a, $low, $mid); merge_sort($a, $mid+1, $hi…

SRM 148 DIV2 250

与えられた数字の各桁の数字の中で与えられたその数字自体を割り切れるものをカウントして返す #include <string> #include <vector> #include <sstream> using namespace std; class DivisorDigits { public: int howMany(int number) { int count = 0; string s; stringstream ss; s</sstream></vector></string>…

何度目かのquicksortのお勉強

定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)作者: 近藤嘉雪出版社/メーカー: ソフトバンククリエイティブ発売日: 1998/03メディア: 単行本購入: 11人 クリック: 169回この商品を含むブログ (77件) を見るtopcoderの問題を解く時に「…

SRM 147 DIV2 250

A-Zで構成され、アルファベット順でN文字横にずらした文字列(ex.N=2:A=>C,B=>D)が与えられるので元の文字列を求めよという問題 #include <string> #include <vector> #include <sstream> using namespace std; class CCipher { public: string decode(string cipherText, int shift) {</sstream></vector></string>…

SRM 144 DIV2 500

Pは0または1で構成される文字列でQ[i] = P[i-1] + P[i] + P[i+1] となるような文字列Qが与えられるのでPを求めろという問題多分相当いけてないけれどこれを書くのに7〜8時間かかった。 自分への戒めも含めてここに記録しておく。 #include <string> #include <vector> #inclu</vector></string>…

SRM146 DIV2 250

1〜6の数字が5つ入った配列から同じ数字の場合は合算し、最大の数字を取り出す #include <string> #include <vector> #include <map> using namespace std; class YahtzeeScore { public: int maxPoints(vector <int> toss) { map<int, int> score; int i, max; max = 0; for (i=0; i<5; i++) { s</int,></int></map></vector></string>…

SRM145 DIV2 250

文字列ditheredに含まれる文字が文字列の配列screenにいくつあるかを数える問題 (英文ではよく意味が分からずぐぐった)普通にぐるぐる回しただけ #include <string> #include <vector> using namespace std; class ImageDithering { public: int count(string dithered, vect</vector></string>…

YAPCに行って来た

10/13〜10/15にYAPCという主にPerl好きな方のための楽しい寄り合い的なものがありまして参加してきました。そこで気になったMarc LehmannさんのApp::Staticperlというのをとりあえず少し触ってみました。 (僕は10/15しか参加してないのでMarc Lehmannさんの…

Web::ScraperでFurlを使う

#!perl use strict; use warnings; use URI; use Web::Scraper; use Furl; { no warnings 'redefine'; *Furl::get = sub { my ($self, $uri) = @_; my $res = $self->request( method => 'GET', url => "$uri" ); return $res->as_http_response; }; } $Web:…

シェルスクリプトの中でプロセス置換

リモートファイルのdiffを取ろうと思ったのだけど $ diff <(ssh hoge@host1 cat file1) <(ssh hoge@host2 cat file1) というのがコマンドラインだと動くのにスクリプトの中で書いたら全然動かない。 そこでいろいろ検索してたら http://twitter.com/#!/masha…

文字列からタイムスタンプを取得

Date::Parseというのがあった。 #!/usr/bin/env perl use strict; use warnings; use Data::Parse; my $str = '2011-01-01T00:00:00.000Z'; my $time = str2time($str);

1枚psgiファイルでchatのようなもの

前々から同時接続中のクライアントにサーバから通知というのがものすごーくやりたかったのだけどこのたびTwiggyとTatumakiのegとぶつかり稽古を重ねてようやくできた。 多分最近だとこういうのやるのにWebSocketとかでやるのかもしれないけどそれだとブラウ…

定時まで後何時間?

仕事が無くて暇すぎです。。。 <html> <head> <title>teijimade</title> <script type="text/javascript"> function duration(millisecond) { // milli => sec var second = parseInt( millisecond / 1000 ); var r_milli = millisecond % 1000; // sec => min var minute = parseInt( second / 60 ); var r_sec = secon</head></html>…

SKEの今日のスケジュール

ちょっとぶりのWeb::Scraper #!/usr/bin/env perl use strict; use warnings; use utf8; use URI; use Encode; use Web::Scraper; my $today = (localtime())[3]; my $url = 'http://www.ske48.co.jp/schedule/calendar.php'; my %type = ( stage => '公演',…

AKBの今日のスケジュール

久しぶりのWeb::Scraper #!/usr/bin/env perl use strict; use warnings; use URI; use Encode; use POSIX qw/strftime/; use Web::Scraper; my $today = strftime("%Y%m%d", localtime); my $file = substr($today, 0, 6).".html"; my $url = 'http://www.a…

Acme::AKB48のインストール

Acme::AKB48をAPIにしたいなーと思ってインストールしようとしたら微妙にてこずったので。まず、https://github.com/hidek/Acme-AKB48から落としてきて $ cpanm -l ./extlib/ hidek-Acme-AKB48-9a599ea.tar.gz と普通にやったらテストでこけた。 Module::Lis…

node.js,npmのインストール

以前インストールしたけどホームに入れ直した。 $ cd node-v0.2.5 $ make uninstall $ ./configure --prefix=/Users/hironorism/node $ make $ make install ~/.bashrcに追記 export NODE_PATH=$HOME/node/.node_libraries:$PATH export PATH=$HOME/node/bin…

Mojoliciousが1.0になったので試してみた

Hello Worldレベルで特に中身はない雛形作成 $ mojo generate app MyApp my_appというディレクトリの下に色々作られる。 そしたらとりあえずplackupで確認。 $ cd my_app $ plackup script/my_app 下記にアクセスしてみるとwelcome的なページがでる。 http:/…

初めてのキーマップ

vim

gvimのコマンドモードででカレントディレクトリの挿入を再現したかったわけでvimrcに以下を追記 cnoremap <expr> <C-x> getcwd() これだけでも初めてのことなので1時間ぐらいかかったわけで・・・</c-x></expr>

標準エラー出力を標準出力にリダイレクトするを忘れすぎるので

メモしておく $ コマンド > 出力先 2>&1

DBIx::TransactionManagerのメカニズム

#!/usr/bin/env perl use strict; use warnings; use DBI; use DBIx::TransactionManager; use Try::Tiny; use Test::More; my $dbh = DBI->connect("dbi:SQLite:"); my $tm = DBIx::TransactionManager->new($dbh); $dbh->do(q{ CREATE TABLE user (id INTE…

AnyEvent::Twitter::Streamで取得結果をブラウザに垂れ流す

#!/usr/bin/env perl use strict; use warnings; use Config::Pit; use AnyEvent::Twitter::Stream; use AnyEvent::Socket; use Data::Section::Simple; use Text::Xslate; use JSON; use HTTP::Parser::XS qw/parse_http_request/; my $config = pit_get('t…

windowsでperlスクリプトをコマンドのように使う

今までperl my_print.plみたいにいちいちやってたのだけど 以下のようにpl2batというコマンドを使えばmy_printだけで実行できるようになる。 C>pl2bat my_print ちなみにpl2batを実行するとmy_print.batという以下のようなファイルが作成されてた。 @rem = '…

MySQL Casual Talks Vol.1 に行ってみた。

オラクルきれい・・・ そして正直ほとんどわからなかった・・・ MySQL Casualは恐ろしい所だった・・・ まあ内容的に"多分"運用のお話が多かったし、 運用全然やったことないんだからわからなくて当たり前っしょ? と終ったあと自分を慰めたよ。。。 でも自…

Config::Pitの使い方を忘れるので

メモしておこう $ export EDITOR=vim まず$EDITORを設定する。 $ ppit set twitter このコマンドを打つと$EDITORで設定したエディタが開く。 --- { username : user, password : pass } とか打って保存して終了。 これで~/.pit/default.yamlとかに保存される…

Text::Xslate::Syntax::Kolonについてメモ

今日覚えたこととか。 実はKolonとはあんまり関係ないかもしれない。 #!perl use strict; use warnings; use Encode; use Text::Xslate; use Data::Section::Simple; my $vpath = Data::Section::Simple->new()->get_data_section(); my $tx = Text::Xslate-…

リストに対してバックスラッシュを適用する

#!perl use strict; use warnings; my $scalar = 'one'; my @array = qw/two three/; my %hash = (four => 'five'); my @ref = \($scalar, @array, %hash); for (@ref) { print ref $_, "\n"; } # 出力結果 # SCALAR # ARRAY # HASH 各要素に対して適用され…