タグ

ブックマーク / blog.64p.org (57)

  • Web Application の validation はどのレイヤーでかけるべきか - tokuhirom's blog

    数年前にも同じことかいた気がするけど、最近の状況にあわせてかいてみる。 途中で面倒になってきて説明が雑になっている点をご容赦ください。 言いたいことは「結局、昔はサーバサイドで懇切丁寧なエラーメッセージを出すためにModelではなくControllerでバリデーションに関する知識が必要だったけど 今はJavaScriptでやるから不要だよね111」ってことです。 この表題は、よく話題にあがるところなのだが、理想論としては Model, Controller, Client side のいずれにおいてもきっちりと validation を行うことがのぞましい。 しかし、実際にはなかなか面倒である。ということで、どこをはぶくかというと Controller における Validation であろう。 ユーザーに対する親切なメッセージは JS の側でだすのが理想的。model の validat

    Itisango
    Itisango 2013/11/27
    “昔はサーバサイドで懇切丁寧なエラーメッセージを出すためにModelではなくControllerでバリデーションに関する知識が必要だったけど 今はJavaScriptでやるから不要だよね” #Web #Application #validation #JavaScript
  • Perl 5.19.4 ではいった新記法があつい - tokuhirom's blog

    1> my %x=(a => 1, b => 2); $res[0] = [ 'a', 1, 'b', 2 ] 2> %x{a} $res[1] = [ 'a', 1 ] これはあつい!今迄はいってなかったのが不思議なかんじする。

  • Perl5 における B optree の操作方法入門 - tokuhirom's blog

    いよいよ今週から YAPC だ。YAPC にあわせて、Perl5 の内部構造を復習できるエントリーを書いたのでご一読いただきたい。 Perl5 hack においては、XS をつかった B optree の操作が楽しい。B optree というのはいわゆる AST(抽象構文木) である。Perl5 は byte code interpreter などではなく昔ながらの AST をそのままなめるインタプリタである。であるから、この B optree を操作すれば、簡単にインタプリタの挙動を変えられるというワケ。 一方で、B optree の操作については、あまり知られていないし情報がすくない。日語でも情報がすくないし、英語でもまた情報がすくなく、それっぽいモジュールのコードをよみながら会得するしかないのが現状だ。 すこしでも B 初心者が、ステップアップできるように、私のもっている情報をここ

    Itisango
    Itisango 2013/09/17
  • ふと思いたって、emacs の設定を1からやりなおしたの記 - tokuhirom's blog

    久々に Emacs の設定をした。普段は vim をつかっているのだが、日語の長 文を vim で書くのはつらいので Emacs 環境を整備したかったのだ。 (Emacs ですべてを書くと左手の小指が死ぬので、日語のときだけにつかう ことにしている) Emacs の設定は最近は MELPA だか package.el だか el-get だかでやるのが ナウいらしいのだが、どうちがうのかよくわからない。いろいろと日語の情 報があるのだが、「そもそもどれがなんなのか」というところをあんま説明し てくれてなくて辛い。 いろいろと調べた結果、僕は以下のような結論にたっした。 package.elインストーラ。tar ball とか file を指定すると、それをインストールして くれる。便利。 MELPAレポジトリから定期的にフェッチしてきて、いいかんじに package.el 対応の サ

    Itisango
    Itisango 2013/05/02
    #VM を作っては壊しの作業をするようになってから、アプリの #カスタマイズ が面倒になってきてここ最近 .emacsとかとんと触っていない。
  • Perl テスティングハンドブックという電子書籍をだしてみた - tokuhirom's blog

    主に KDP をためしてみたいという理由ですが、だしてみました。 Perl で Test を書くときのポイントを押さえてちいさくまとめています。ボリューム的にはちょっとした小冊子程度です。当に自分で実践につかったことがあるものしかのせてないのがひとつの特徴です。 今回は pandoc でつくってみました。 gumroad からも買えるようにしてみました なお目次は以下のとおり - 前書き - 対象読者 - なにはのっていないか - 想定環境 - カイゼン - Test::More をもちいた基的なテスト - 便利なユーティリティ関数 - is 関数 - cmp\_ok 関数 - is\_deeply($a, $b[, $msg]); - like($got, $regexp[, $msg]); - subtest 関数でテストケースをネストさせる - Test::More をたすけるラ

  • はてながMarkdown記法に対応していた!! - tokuhirom's blog

    tokuhirom's Blog Search はてなMarkdown記法に対応していた!! Created: 2012-09-19T07:59:23 Updated: 2012-09-19T07:59:23

    Itisango
    Itisango 2012/09/20
  • uuencode を Perl で再現するコードのストリームバージョン - tokuhirom's blog

    uuencode を Perl で再現するコードのストリームバージョン(省メモリ)が欲しい — ちょ子 (@cho45) September 5, 2012 danさんのコードをちょっとかえたら、目的をはたせそうですね。 #!/usr/local/bin/perl use strict; use warnings; for my $filename (@ARGV){ my $perm = (stat($filename))[2] & 0777; printf "begin %o $filename\n", $perm; open my $rfh, '<', $filename or die "$filename : $!"; my $buf; while (read($rfh, $buf, 4500)) { print pack("u", $_) while($_ = substr($bu

    Itisango
    Itisango 2012/09/06
  • node.js でも Inline::C みたいなことをしたい。 - tokuhirom's blog

    node.js をつかっているときに、ふと C 言語を書きたくなったりしたことはありませんか? 僕はありません。 そういう時には、node-tcc をつかうといいですね。node-tcc は TinyCC( http://bellard.org/tcc/ ) の node.js バインディングで、これをつかうと以下のように、簡単に C 言語を実行することができます。 var TCC = require('tcc'), var tcc = new TCC(); tcc.compile_string('int main() { return 4649; }'); var ret = tcc.run(); // => 4649 しかし、これだけでは、C 言語をつかいこなしているとはいえないでしょう。出力が、main 関数の返り値しかありませんからね。 そこで node-ffi の出番です。以下の

    Itisango
    Itisango 2012/09/01
  • Pretty object diff generator for Perl5 - tokuhirom's blog

    I wrote a new CPAN module named Data::Difflet. It's inspired from difflet Data::Difflet makes colorful diff like difflet. This is a example implementation using Data::Difflet. use strict; use warnings; use Test::More; use Test::Difflet qw/is_deeply/; is_deeply( { "foo" => [ 1, 2, 3 ] }, { "foo" => [ 4, 2, 3 ] } ); done_testing; This is a result of test output. So, this module is highly useful for

    Itisango
    Itisango 2012/08/13
  • URL の自動リンクをする autolink.js ってのつくった。 - tokuhirom's blog

    なんかまともにうごくフリーのやつみあたらなかったというか、そういう感じだったので、つくっといた。 https://github.com/tokuhirom/autolink.js/ 動作としては以下のようなかんじになります。まあコピペしてつかうなりなんなりご自由にどうぞ。MIT ライセンスってかいてあるけど public domain 扱いでいいので。 #!/usr/bin/env node var assert = require('assert'); var al = require('../lib/autolink.js'); assert.equal(al.autolink("http://google.com/"), "<a href='http://google.com/'>http://google.com/</a>"); assert.equal(al.autolink("

    Itisango
    Itisango 2012/08/11
  • O/R Mapper におけるページャーの実装について - tokuhirom's blog

    欠点$rs->pager(); のように、クエリをうっているっぽくないのに裏でうってるので、重い処理なのにおもそうにみえなくてさがすのが面倒。お気軽につかえすぎて危険。 HAVING などをつかうクエリの場合、そもそもただしい値がとれてないのに、なんとなくうごいてしまう。まちがった値をかえす API を標準でつけるのはいかがなものか。 得に HAVING などの処理がうまくできないのは自明なので、こういう実装は僕は好きではないです。 → Teng にはついてない。

    Itisango
    Itisango 2012/08/06
  • Re: perl 5.16.0 でメモリリーク? - tokuhirom's blog

    http://d.hatena.ne.jp/tagomoris/20120731/1343713558 以下のコードで再現するので、Perl 5.16.0 のバグのようです。もりもりプロセスがふとっていきます。 use strict; my $kan = bless +{}, 'Kan'; my $code = sub { }; for (1..100) { for (1..1000) { for my $f ($code, $kan) { ref $f; } } my @x = split /\s+/, `ps aux|grep leak.pl|grep -v grep| grep -v vim`; print $x[5], $/; }ref のキャッシュ処理とかがバグってるとかですかね。 とりあえず perlbug しておきました。 see http://www.nntp.perl.o

  • shell script を書くときの tips 2つ(初心者向け) - tokuhirom's blog

    shell script は普段さけて通りたいと願ってやまないわけですが、たまには書かないといけないことがあるので、そういうときは覚えておくと便利な tips を2つ。 autodie っぽくするset -eとすると、コマンドの実行に失敗したときにそこで実行がとまるので便利。 #!/bin/sh set -e perl -e 'die' echo SHOULD NOT REACH HEREとすると % ./hoge.sh Died at -e line 1. % echo $? 255となって、最後までいかずに死にます。 複数のコマンドを順番に実行するときに便利。 なお、以下のような挙動をするんだそうです。 ただし失敗したコマンドが until または while ループの一部である、 if 文の一部である、 && または || リストの一部である、 コマンドの返り値が ! で反転されてい

  • いまどきの SCSS 運用方法 - tokuhirom's blog

    最近は scss をつかっています。SCSS の運用についてまとめておこうとおもったので、まとめます。 scss --watch を手元でうごかす運用などをすると、scsscss の両方を git レポジトリにコミットすることになって残念ですし、生成された css を直接いじる人があらわれてまきもどったりするのでそういった運用は避けています。 開発環境についてPlack::Middleware::Scss::Lite ( https://github.com/tokuhirom/Plack-Middleware-Scss-Lite ) というミドルウェアを配置して利用しています。これはリクエストがあったタイミングで scss コマンドがはしります。 実行する際、scss コマンドは、エラーメッセージも stdout に出力するので、stdout を capture することが肝要です

  • llvm で Hello wolrd!! 〜llvm入門 その2〜 - tokuhirom's blog

    http://www.ibm.com/developerworks/jp/opensource/library/os-createcompilerllvm1/ 最初なのでとりあえず↑の記事を基なぞってますが、わかりやすく解説をいれています。 llvm であそぶには、まあいろいろな方法がありますが、わかりやすく大きくわけると以下の4ステップです。 llvm IR の動的生成llvm IRの最適化llvm IRの JIT コンパイルllvm IRのネイティブコードへの変換それぞれのフェーズごとに分離して動作させることができるので、創りたいところだけつくればいいのです。 とりあえず基となる llvm IR の動的生成をおこなってみます。 とりあえずなにもしない main 関数をつくりましょう。 #include "llvm/LLVMContext.h" #include "llvm/Modu

    Itisango
    Itisango 2012/07/19
  • llvmの基本となるツールたち 〜llvm 入門 その1〜 - tokuhirom's blog

    3つのツールをためすhelloworld.c はこちら。 #include <stdio.h> int main( ) { printf("Hello World!\n"); }llvmアセンブリを生成! $ llvm-gcc -S -emit-llvm helloworld.c helloworld.s ができてた。 ; ModuleID = 'helloworld.c' target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" target triple = "x86_64-apple-darwin11.4" @.str

  • Module::Suggest できた!! - tokuhirom's blog

    use Module::Suggest;とかいう他に使っているモジュールのもっといいやつを教えてくれるモジュール作ってくさだい。 — しがなょきまう (@hail2u_) July 11, 2012 できたよー。 perl -MModule::Suggest -e 'use JSON::Any'とかで実行できます。実行時にやってるのがシャレオツ!! https://github.com/tokuhirom/Module-Suggest ほんとはポゥをエニーイベントに、とか書こうとおもったけど荒れそうなのでやめておいた。 package Module::Suggest; use strict; use warnings; use 5.008008; our $VERSION = '0.01'; use Carp; BEGIN { our %SUGGEST_MAP = ( 'JSON::Any

  • cmake と scons と waf と gyp の話 - tokuhirom's blog

    @repeatedly さんが scons はオワコンだとさかんにいってる今日この頃ですが、まあぼくはそこまでだとはおもっていません。開発 ML はそれなりに流量がありますし、http://two.pairlist.net/pipermail/scons-dev/ bitbucket のレポジトリにもそれなりにコミットされています https://bitbucket.org/scons/scons。 とはいえ、scons には致命的な問題があって、それはとてつもなく遅いということです。 小規模な C 言語ならあまり気にならないのですが、C++ で開発している場合、非常におそくてやってられません。ヘッダの依存解析が非常に遅いのかなー、とか考えてしまいますね。 実際、おなじコードを cmake と scons でコンパイルすると cmake の方が倍ぐらいはやいです。 tokuhirom@ww

    Itisango
    Itisango 2012/07/11
  • mysql の binlog api を利用するための Perl Binding を作りました - tokuhirom's blog

    mysql の binlog api をあつかうためのライブラリである libreplication というものがあるのですが、これの perl binding を開発しました。 https://github.com/tokuhirom/MySQL-BinLog とりあえず、examples/basic-2.cpp でやっていることができるところまでつくっておきました。 バイナリログの内容を streaming で処理できるのがおもしろいです。 以下のような用途での応用が考えられるようです。夢がひろがりんぐですね。 libreplication のセットアップ方法については riywo さんの記事をごらんください。 http://blog.riywo.com/2012/07/08/133005 はまりポイントは、streaming 開始時に ROTATE_EVENT が発生して、最新のログ

    Itisango
    Itisango 2012/07/10
  • TheSchwartz のような RDBMS をつかったジョブキューをリアルタイムに処理するアイディア - tokuhirom's blog

    TheSchwartz のような RDBMS をつかった job queue は、新規に daemon をたてたりする必要がないので楽でいいのですが、一方で job の追加の timing が storage から push でおくられてこないので、若干の delay が生じてしまうのが難点でした。 この問題を解決するために、mysql の binlog API を用いて、処理してみるハックを考えてみました。 binlog API を利用すると更新クエリを streaming で処理できるので、こういったハックも簡単にできちゃいます。おもしろい。 use 5.016000; use MySQL::BinLog; use TheSchwartz; my $sch = TheSchwartz->new(...) or die; $sch->can_do($_) for ...; $sch->w

    Itisango
    Itisango 2012/07/10