個人で出来るWebサービスの作り方(YAPC::ASIA 2013) @koba04
とあるシステムでデータベースから引いてきたデータの表示が文字化けするという不具合がありました。 データベース内のデータとしては文字化けしていない状態で格納されていることはわかっていたので、どこかしらの文字変換で化けていることはわかっています。まずはどの誤変換により文字化けするのか原因切り分けのために、decode/encode の組み合わせによる文字化けパターン一覧を作りました。おかげさまでどのパターンに類するものか判別することができ、無事に改修することができました。 その話はまた別にするとして、今も昔も変わらず文字化けに悩む人は意外と多いと思います。誤変換結果一覧は原因解析の参考になると思い、記事としてまとめることにしました。 文字コード変換ミスによる文字化けパターンを可視化するプログラムと一覧表 まずは誤変換を生成する perl スクリプトです。プログラムはとっても簡単で、「文字化けで
Perl を Crash させたい。そんな欲求を抑えきれないあなたのために、いくつかの方法を教えよう。 いろいろな crash unpack で不正アクセス perl -e 'unpack "p",0xdeadbeef' pack において 'p' は A pointer to a null-terminated string. を意味する。不正なメモリ領域にアクセスすれば死ぬのはあたりまえである。 overload の中で再帰する perl -e 'use overload q{""}=>sub{"$_[0]"};$a=bless{},main;"$a"' overload の stringify させる部分などで無限ループにおちいると、segv する。 このバグは昔から知られており、ticket が切られているが、なおっていない。 @INC の中の coderef で再帰する perl
こんにちは, 先日Kansai.pmで発表させて頂いたgoccyこと五嶋@たんぽぽグループです. 今回は, 前回紹介した技術的負債の把握と改善を促すためにの続編として, 僕が作ったPerl5コードのコピペ検出器について紹介させて頂きます. はじめに 今やPerl, Ruby等さまざまな言語で, 便利なライブラリ群やフレームワークを利用できる時代になりました. これらを使うことでソフトウェアの開発コストは格段に下がり, より素早く開発することができるようになっています. しかし, 当初予定されていた機能を実装して, 「よしできたから終わり!」というわけにもいきません. 何か物を生み出せば, 必ずそれを保守・運用するコストが発生します. 開発することが便利になった今, 開発物を保守・運用することを支援するツールも求められています. ですが, 保守や運用, とりわけ保守に関して支援するツールはそ
2005年 Railsの襲来2005年に突如現れたRailsによって国内でRuby利用者が急増したのがPerl滅亡への第一歩となった。書きやすさに作者がとことんこだわって作られたRubyの魅力を一度知ってしまうとPerlの古くさく読み辛く書き辛い文法に誰もがうんざりし始める。 2007年 JavaScriptブームAjaxで再発見されたJavaScriptのブームもPerl終焉に若干ながら貢献している。ブラウザというPerlが全く手を出せないジャンルの王者JavaScriptの持つ華やかさに誰もが憧れ、そして手元のPerlの古くささに反吐が出始める。不器用で不細工なところも含めて愛していた女房とつつましく送っていた人生に、突然ぴちぴちのボイン女子大生が転がり込んで来たようなものである。 スマホ/ソーシャルゲームバブルiPhone市場が本格的に立ち上がり、Perlとは全くの無関係であるスマホ
Perlでコマンドラインオプションをparseしようと思うと組込みモジュールとしては Getopt::Std と Getopt::Long がある。が、long style option *1 つまり --option-name のようなオプションを解釈してくれるのは Getopt::Long だけだ。なので普通はこちらを使おう。 ただし 絶対にデフォルト、つまり以下のようにして使ってはいけない。 use Getopt::Long; my (@primary, @secondary, $silent); GetOptions( "server-primary|p=s" => \@primary, "server-secondary|s=s" => \@secondary, "silent|S" => \$silent ); これダメ! 絶対ダメ! 死ぬ! 最初に結論を書く 必ず以下のように
2012年09月01日07:45 カテゴリTipsiTech tips - モバイルには高画質すぎるH.264動画を劣化ゼロで再生可能に 右の「このデバイスではこの動画は再生できません」状態を、たった一バイト変更するだけで直します。 以下のPerl Scriptで、こうするだけです # デフォルトではlevel 4.1 に変更 % ch264level leveltoohigh.mp4 # level 3.1 に変更 % ch264level -l31 leveltoohigh.mp4 ch264level.pl #!/usr/bin/env perl # # $Id: ch264level.pl,v 0.1 2012/08/31 18:13:16 dankogai Exp dankogai $ # use strict; use warnings; use Getopt::Std; ge
https://github.com/tokuhirom/node-perl/ ここ最近、プログラミング言語同士の壁が徐々に破壊されている気がします。あるプログラミング言語上で別なプログラミング言語を動くようにしたり、置き換えてしまったりするような類です。今回はその一つ、CPAN moduleをnode.js上で動かすという、かなり無茶な気がしなくもない、そんなソフトウェアnode-perlを紹介します。 var Perl = require('../index.js').Perl; var perl = new Perl(); perl.use('LWP::UserAgent'); var ua = perl.getClass('LWP::UserAgent').new(); var res = ua.get('http://mixi.jp/'); console.log(res.as_
いろいろ方法があるとおもうのですが、以下のようなシェルスクリプトですませるのはどうでしょうか? #!/bin/bash function kill_children { # jobs -l | perl -ne 'print "kill $1\n" if /^\S+?\s+(\d+)/' | sh; pkill -P $$; wait; } trap "kill_children" EXIT HOSTS="192.168.1.1 192.168.1.2" for host in $HOSTS do ssh $host tail -F /service/foo/log/main/current & done wait ちょっと箇条書きで解説すると以下のようなことをおこなっています。 & でバックグラウンドジョブをはしらせるwait でそれらの終了を待つtrap 〜 EXIT は atexit
去年からほそぼそと作ってきた、EmacsからDBを操作できるツール Emacs DBI を紹介します。 Emacs DBI の簡単な紹介 このツールの目的は、クロスプラットフォームで便利なDB操作環境を実現することです。 pgAdmin や MySQL Query Browser のようなGUIの良さをCUIで実現してみようとしてみました。すなわち、ぼくのかんがえたさいきょうのDBツールです。ちなみに、このツールにとってEmacsはただの実行環境です。Emacs使わない人でも使うと便利だと思います。 データベース画面 e2wmで3ペインの画面 機能概要 以下のような機能があります。 EmacsとDB接続可能なPerlが動けばターミナルでも何処でも動く DB定義、テーブル定義がすぐ見れる auto-complete によるSQL補完 接続先DBにからキーワード、型名、テーブル名、カラム名など
サキとは彼女の自宅近く、湘南台駅前のスーパーマーケットで待ち合わせをした。彼女は自転車で後から追いつくと言い、僕は大きなコインパーキングへ車を停めた。煙草を一本吸ってからスーパーマーケットへ向かうと、ひっきりなしに主婦的な女性かおばあちゃんが入り口を出たり入ったりしていた。時刻は午後5時になる。時計から目を上げると、待たせちゃったわねと大して悪びれてない様子でサキが手ぶらでやってきた。 お礼に料理を作るとはいえ、サキの家には食材が十分足りていないらしく、こうしてスーパーマーケットに寄ることになった。サキは野菜コーナーから精肉コーナーまで、まるで優秀なカーナビに導かれるように無駄なく点検していった。欲しい食材があると、2秒間程度それらを凝視し、一度手に取ったじゃがいもやら豚肉やらを迷うことなく僕が持っているカゴに放り込んだ。最後にアルコール飲料が冷やされている棚の前へ行くと、私が飲むからとチ
個人的にテキストファイルを処理することが多いのですが,簡単な処理ならUnixのコマンドをパイプとリダイレクトで組み合わせてできることが多くあります.今回はそんななかでもちょっとマニアックなTIPSをまとめてみました. sortコマンドでタブ区切りのファイルを指定する最近知って驚愕したのがこれ.sortコマンドでタブ区切りのファイルを指定したいときは,Ctrl+v Tabでタブ文字を入力していたのですが,$ sort -t $'\t' -k 2,2 のようにしてタブ区切りで2番目のキーでソートすることができます. 1000行おきにデータをサンプリングする1000行おきにファイルからデータをサンプリングしたいときとかは,perlでワンライナーを書くのが速いようです.$ perl -ne '$i++; print unless ($i % 1000)' 某所のコードゴルフによるとこれだけ短くでき
onagataniです こんにちわ。 今回から数回に分けて自分のお勧めするモジュールを紹介したいと思います。 内容がモダンじゃない!と思う方もいるかもですが自分の好きなモジュールを紹介しますので最新の技術が知りたい方は見ないように...。 一回目は「Class::Accessor::Fast」です。 これはなにかというとPerlでアクセサを自動生成するモジュールです。 たとえば、下記のような場合にとても便利です。 MyClass.pm package MyClass; use strict; use warnings; sub new { my ($class, $args) = @_; my $self = { address => $args{address}, blog => $args{blog}, }; return bless $self, $class; } sub addr
English 京都テキスト解析ツールキット(KyTea、「キューティー」)は、日本語など、単語(または形態素)分割を必要とする言語のための一般的なテキスト解析器です。 特徴 ダウンロード・インストール プログラム仕様 解析:手法の詳細, 入出力の形式, API 学習:モデル学習, 入手可能なモデル KyTeaを使った分野適応 開発情報 特徴 KyTeaには以下の機能が揃っています: 単語分割:分かち書きされていないテキストを適当な単語または形態素に分割する。 読み推定・品詞推定:かな漢字変換や音声認識、音声生成のために単語の発音を推定することができ、品詞を推定することもできます。 線形SVMやロジスティック回帰などを用いてそれぞれの分割点や読みを個別に推定するため、部分的にアノテーションされたデータを利用してモデルを学習することも可能です。 分類器の学習にはLIBLINEARを使用してい
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
Perlで二乗の計算をするなら $i ** 2 よりも $i * $i の方が約2倍早い。 実験 0〜1000000までの二乗を計算する速度 ソース pow1.pl(*で計算) #!/usr/bin/perl use strict; for (my $i = 0; $i < 1000000; $i++) { my $p = $i * $i; } pow2.pl(**で計算) #!/usr/bin/perl use strict; for (my $i = 0; $i < 1000000; $i++) { my $p = $i ** 2; } 結果 実行環境はWindowsXP SP2 + Cygwinなので、少し遅いです。 $ time ./pow1.pl;time ./pow2.pl real 0m0.394s user 0m0.374s sys 0m0.046s real 0m0.64
Perl で YAML と JSON のベンチマーク比較 YAML や JSON が軽い!速い!と言われているが、どれくらい速いのか Perl モジュールでベンチしてみた。 ※個人的に興味があったのがデータの読み込み (Load) だけだったので、データの書き出し (Dump) はテストしていない。 結果的には、YAML と 比べて JSON の方が 6倍〜8倍高速。ただし、これはデータ量が少ない場合で、データ量が大きくなると 0.5倍〜0.8倍 と差が縮まってしまう。 また、YAML::Syck と JSON::Syck で比べると、データ量にかかわらずその差は数パーセント程度になってしまう。 ちなみに、Data::Dumper でダンプしたデータを eval したものとも比べてみたが、YAML を基準にすると eval は約50倍速く、YAML::Syck (と JSON::Syck)
JSON は JavaScript での処理を前提にしたものが多く、Perl などほかの言語で処理をする場合のサンプルがなかったので、記しておく。 #!/usr/bin/env perl use strict; use warnings; use utf8; use Encode; use JSON; use LWP::UserAgent; use Data::Dumper; use URI::Escape; my $yahoo_app_id = 'your_app_id'; my $agent = 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'; my $apibaseuri = 'http://jlp.yahooapis.jp/KeyphraseService/V1/extract'; my $referrer = 'http
id:naoya:20080511:1210506301 のエントリのコメント欄で kzk さんに教えていただいた Hadoop Streaming を試しています。 Hadoop はオープンソースの MapReduce + 分散ファイルシステムです。Java で作られています。Yahoo! Inc のバックエンドや、Facebook、Amazon.com などでも利用されているとのことです。詳しくは http://codezine.jp/a/article/aid/2448.aspx (kzk さんによる連載記事)を参照してください。 Hadoop Streaming 記事にもあります通り、Hadoop 拡張の Hadoop Streaming を使うと標準入出力を介するプログラムを記述するだけで、Hadoop による MapReduce を利用することができます。つまり、Java 以外
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く