読者です 読者をやめる 読者になる 読者になる

高速にリストからハッシュにする

いまいちピンとくる言い方が分からないけれど,つまりはこういうこと. [ { id => 1, value => 'foo', }, { id => 2, value => 'bar', }, ] このようなデータ構造があったときに,以下のようにidをkeyとしてハッシュにしたい. { 1 => { id => 1, value => '…

Perl5におけるコンテキストの扱いによる脆弱性について

The Perl Jam - Exploiting a 20 Year-old Vulnerability よりPerlを普段から書いている人にとっては常識ではあるが、そうではない人のために書いておく。 リストと配列 Perlにおける「リスト」とは何かというのを確認しておく。まず、Perlにはコンテキスト…

対話型SkypeボットフレームワークUnazuChanのご紹介

対話型IRCボットフレームワークUnazuSanのご紹介 | おそらくはそれさえも平凡な日々 より プロジェクト立ち上げると色々やってくれる対話型のIRC botが欲しくなるのでAnySanとか使って適当にコピペで作るわけですが、それもタルくなってきたので、対話系のbo…

Amon2でconfigまわりをいいかんじにする

use Amon2::Config::Simple; sub load_config { my $class = shift; my $config = Amon2::Config::Simple->load($class); if ($class->debug_mode) { Internals::SvREADONLY %$config, 1; } return $config; } こうしておくことでkeyをtypoしたり、設定し忘…

SQL Injectionを学ぶためにSQLiPuzzleというサービスを作ってみた

SQLiPuzzleSQL Injectionについての知識が足りなかったので、ちょろっと作ってみた。まだすべての問題を用意できていないので未完成。 難易度としては初級レベルで、知っている人ならすぐに解ける。TODO: SQLインジェクションゴルフ - なんと3文字で認証回避…

Skype に issue 番号に反応する bot がいると捗る

"IRC に issue 番号に反応する bot がいると捗る" らしいので - @soh335 memo より use strict; use warnings; use Skype::Any; use AnyEvent::HTTP; use JSON::XS; use Try::Tiny; use HTTP::Request::Common; my $owner; my $repos; my $github_user; my $…

perl-5.18のhash randomizationについて

perl-5.18.0がリリースされました。 perl v5.18.0 released! - Islands in the byte stream Perl 5.18.0 がリリースされています - tokuhirom's blog. 大きな変更点としてhash randomization(ハッシュのランダム化)が挙げられます。each(), keys(), values()…

特定のWi-Fiに接続したときにあることをしよう

335さんの記事(minilla を使って cocoa な xs module を書く - soh335 memo)を見て、手軽にCocoaなXS moduleが書けるようになったらしいことを知ったのでさらっと書いてみた。 akiym/Cocoa-NetworkChange · GitHub 自宅のWi-Fiに接続したらsyncしたいとか、…

LWP::UserAgent@6.05でX-Meta-Twitter:cardがヘッダに含まれているページがうまく取得できない

詳しくはlwp-download fails with HTTP::Message 6.06 · Issue #3 · libwww-perl/http-message · GitHubに書かれていますが、要約すると X-Meta-Twitter:cardのような:がヘッダに含まれているとIllegalであると判断されるようになってしまった use strict; u…

Perlを半殺しにするGolf

メモリを食わせまくってPerlを半殺しにしたいと思ったので少し考えてみました。 条件 whileを使わない gotoを使わない あからさまな無限ループをさせないというのが条件です。 で、ひとつ考えたのがこんな感じです(29 bytes)。数秒で数GB級のメモリ空間を圧…

AnyEvent::SKKServを書いた

ついカッとなって。(AquaSKKの新しいバージョンが出たので)akiym/AnyEvent-SKKServ · GitHubもともとgoogle-ime-skkというものがあって、これはGoogle CGI APIを利用してSKKにGoogle日本語入力のエッセンスを加えるskkserv(辞書サーバ)。地味に便利で手放せ…

Perlの食えない事情 - 演算子編

Perlの食えない事情 より おっと、そうです、Perlには演算子が多すぎるのでした。せっかくの機会なので、Perlの演算子を紹介します。 ビーナス演算子: 0+, +0 数値として評価してくれます。意外とよく見かけますね。 なぜこの演算子を使う必要があるのかとい…

Minecraftのサーバを監視してjoinしているか調べるハック

いちいちMinecraftを立ち上げて調べるのは面倒なので、Skypeで通知してくれるスクリプトをてきとーに書きました。結構ゴリ押ししてる感があります :) Skypeの通知にはtacochanを使う 1分毎に監視 サーバが落ちてたら通知 joinしているプレイヤーの数を通知 u…

Hokkaido.pm#8に来ています

ゲストとしてtypesterさんが来てくれているので、XSの話をリクエストしたところ実際にライブコーディングまで見せていただけたので非常に興奮しております。 ## XSにまつわる話 - 2010年から書き始めた - XS食わず嫌い期 - 2004-2010年くらいまで - 手を出す…

正規表現のキャプチャ

正規表現のキャプチャの結果を取得したいときには、次のようなコードを書く: if (my @capture = '10/17' =~ m!([0-9]{2})/([0-9]{2})!) { # @capture = (10, 17) } $1や$2を使っても取得はできるが、キャプチャが増えたときに$1, $2, $3, $4, ...と増やして…

tacochanをCPANに上げた

App::Tacochan - Skype message delivery by HTTP - metacpan.org tacochanがCPANからインストールできるといいのに、という話を聞いたのでCPANに上げることにした。cpanm App::Tacochanでインストールできるようになっているはず。 そのままCPANに上げるの…

YAPC::Asia 2012で「Skype効率化」というトークをした話

Skype効率化 // Speaker Deck Skype::Anyというモジュールを書いたので、そのモジュールを使ってbotを書く例を紹介しました。実際にSkype::AnyはCPANにアップされているので、使うことができます。まだまだやりたいことがあるので、開発を続けたいと思ってま…

Cocoa::GuiTestというものを少しだけ書いた

akiym/Cocoa-GuiTest · GitHub use 5.016; use warnings FATAL => 'all'; use utf8; use Cocoa::GuiTest; use Time::HiRes qw/sleep/; my ($width, $height) = Cocoa::GuiTest::GetScreenRes(); my $hz = 10; my $omega = 2.0 * 3.14 * $hz; for my $x (0 ..…

これぞ次世代の暗号?!絵文字だけですべてが表現できる「Emoji64」とは?

誰でも親しみやすく、そしてかわいらしい暗号…そんな暗号が今まであったでしょうか。それがEmoji64です。 Emoji64はUnicode 6.0で追加されたemojiを利用して秘密の暗号を作ることができます。必要なのは暗号のタネだけ。それさえ覚えていれば二人だけの秘密…

YAPC::Asia 2012で「Skype効率化」というタイトルでトークしてきます

Skype効率化 無事に採択されました。ありがとうございます。しかし、kazuhoさんとTAKESAKOさんの裏番組でした ;( 気合入れて頑張ります! 基本的にはSkype botを作る上でのtips集の紹介です。このトークを聞けばSkype botが書けるようになるはずです。 Skype…

ワンライナーでExcel列名変換問題(逆変換)

Excel列名変換問題で第2回社内プログラミングコンテストを開催してみた(前編) - give IT a try より 27 → AA perl -le'$c=A;$c++for 2..pop;print$c' 追記(11月5日 0:50) AA → 27 perl -le'$n++for A..pop;print$n'

高校生がYAPC::Asia 2011に行って来ました

高校生ですが、YAPC::Asia 2011に行って来ました。初参加です。 自分みたいな学生がYAPCに行くのは金銭的な問題から難しいのですが(しかも北海道からなので)、Hokkaido.pmのみなさんが支援してくれたおかげでYAPCに行くことができました。本当にありがとうご…

北海道の高校生がYAPC::Asia 2011に参加してきます

明日、飛行機に乗って東京へ行きます。 Hokkaido.pmからの支援を受けて、YAPCに参加してきます。高校生がYAPCに参加する事例はあまり聞いたことがないので、ちょっと緊張してます。 「なぜ、高校生がPerlを使うのか?」というタイトルでトークします。 15日…

Perl SEGV Golfに挑戦してみた

にひりずむ::しんぷる - perl segv golf より % perl -eversion::new zsh: segmentation fault perl -eversion::new % echo perl -eversion::new | wc -c 20 さすがにAcme::SEGVには負けますね。ちなみにperl-5.8.9ではSEGVしません。 というよりこれ、どう…

Hokkaido.pm#5で話してきました

Hokkaido.pmに参加するのは3回目ですが、初LTしてきました。初めてだったのでとても緊張しましたが、得られたものはとても大きいと思いました。 まず、「面白い!」と言われたこと。そして、複数の人から「YAPC来ればいいじゃん!」と言われたこと。 どちら…

PerlでSkypeボットを作る

結構前にNet::DBus::Skype::Liteというモジュールを書き始めました。一応、自分のやりたいことはできるようになったので、今では未完成のまま開発停止中です。 akiym/Net-DBus-Skype-Lite · GitHub ドキュメントがなく、コードも微妙、そしてテストもないの…

7/16のHokkaido.pmで初LTします

7/16(土)にHokkaido.pm#5が開催されます。 ゲスト: @nekokak さん Hokkaido.pm#5 : ATND 本題ですが、初LTします。タイトルは「Base64を再実装する」です。 初めてのLTでドキドキしますが、頑張ります。 あと、@nekokak さんが来るらしいので、ちょー楽しみ…

Web::Query 0.06でfirst、lastが使えるようになった話

先日書いた記事では、Web::Queryで最初の要素だけを取りたいんだけど、うまく書けないよねーと書いたあと、firstとかlastみたいなのがあると便利だなーと思ってpull-req送ったら、いいよってことで、取り込んでくれました。 Web::Query 0.06ではfirst, last…

Web::Queryで最初の要素を取りたい!

例えば、このようなリストがあるとします。 <ul class="video"> <li>A</li> <li>B</li> <li>C</li> <li>C</li> </ul> このリストから、最初の要素<li>A</li>だけを取りたい時にはどうすればいいでしょうか。 Web::Scraperではこんな感じです。 use Web::Scraper; my $scraper = scraper { process 'ul.video li', 'title' => 'TEXT…

Web::Queryで最初の要素を取りたい! その2

Web::Queryにfirst()、last()みたいなのがあると便利だなーと思いました。 例えば、こんな感じ。 sub first { my $self = shift; $self->{trees} = +[$self->{trees}[0]]; return $self; } sub last { my $self = shift; $self->{trees} = +[$self->{trees}[…

Google CGI API for Japanese Input

WebService::Simpleを使ってGoogle CGI API for Japanese Input - アリ より こう書けよ。 use strict; use warnings; use Encode; use JSON; use LWP::UserAgent; use URI; use Data::Dumper; use Data::Recursive::Encode; my $text = shift or die; my $u…

Amon2でTengを使いたいときには

Amon2のflavorを書いてみた。 こうすることで、 % amon2-setup.pl --flavor Teng MyApp みたいにできるので便利。 あと、TengにはTeng::Schema::Dumperがあるのでschemaの生成が楽。

リアルタイムプレビューしたい

gfxさんから「スクリプトを別にするのではなく、フォームからフォーマットを選べると嬉しいです!!」と言われたのでやってみました。 最近、コード書くのが楽しいです。 いい感じ!マジで便利です。 気になったこと $self->param()がからっぽのときは? こ…

昨日のリアルタイムプレビューは...

GETを使うよりもPOSTを使うべきだよね、って言われそうなのでPOSTを使ってみた。 preview in real-time. — Gist ほかにも、Text::XatenaやPod::Simple::XHTMLを使った例もあるので必見。

Mojolicious::Liteを使ってMarkdownをリアルタイムプレビューしてみた

こんな感じ。 もちろん、Text::MarkdownだけではなくText::Xatenaでもできるので満足ですね。

PerlからSkype APIを叩きたいときには

CPANで検索した結果こんなかんじ。 Windows SkypeAPI Mac - Linux Net::DBus::Skype Macは対応していません。 しかも、このモジュールはAPIを叩くことしかできません。Skype4Pyみたいな使いやすいラッパーが欲しいので自分でSkype APIラッパーを書くことに決…

今どきのListPod(listpod-app-lite)の使い方

yusukebeさんが開発されているlistpod-app-liteがYouTubeの仕様変更により使えなくなってしまったので、今どきのListPodのインストール方法を紹介します。 % cpanm http://github.com/akiym/ListPod-App-Lite/tarball/master もしくは % cpanm-github akiym/…

Term::ReadLine::Gnuが入らないときには(homebrew編)

homebrewでreadlineをインストールしたのにTerm::ReadLine::Gnuが入らないときには % brew link readline すると解決できます。

githubのソースコードをcpanmしてインストールしたい

e.g. ド素人がYouTubeの"402 Payment Required"と戦うために「listpod-app-lite」 - アリ tokuhirom/toktools · GitHubにcpanm-githubがあるのでダウンロードして使う。 githubのソースコードはApp::ghを使うと簡単にダウンロードできる。 % gh clone tokuhi…

GyazoサーバをMojolicious::Liteで書いた

404 Not Found - ゆーすけべー日記 より Gyazoクライアント側の仕様が変わった*1ので、Mojolicious::Liteで書いてみた。手軽に書けるのがMojolicious::Liteのいいところ。 Mojo::Utilのmd5_sum()とDigest::MD5のどちらを使うべきが迷うところ。だけど、Mojo:…

WebService::Simpleを使ってGoogle CGI API for Japanese Input

Google 日本語入力 - CGI API デベロッパーガイド WebService::Simpleを使って書いてみました。 しかし、返ってくるJSONがクセモノで、"\uXXXX"形式でUnicodeエスケープされていて、末尾にカンマを付けてくるので注意。 Encode::JavaScript::UCSとJSON->new-…

Email::Sender - GmailのSMTPサーバー経由でメール送信

追記 Gmailから送信したい場合は、Email::Sender::Transport::SMTP::TLSを使えばいいみたいですね。 Perl5 によるメール送信 - 実践的な Email::Sender の利用方法←追記されています Perl5 によるメール送信 - 実践的な Email::Sender の利用方法より Gmail…

ド素人がYouTubeの"402 Payment Required"と戦うために「listpod-app-lite」

ListPodというサービスをご存知でしょうか。僕はついさっき知りました :) 今からでも、遅くないはず、ということで早速使ってみようとしたのですが… YouTubeの"402 Payment Required"と戦うために「listpod-app-lite」 一つのサービスに集中していたダウンロ…