サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ニコニコ動画
68user.blog27.fc2.com
perl+DBI プログラムの鉄則 のつづき。 鉄則その4. my $sql = "SELECT ". " hoge, ". " fuga ". " FROM table1 ". " WHERE foo = ?"; SQL 文の可読性を高めるため、必ずインデントを付けること。SQL はプログラムと データベースの界面である。プログラムが正しくて、なおかつデータベースが正しく ても、SQL 文が誤っていたら全ては台無しとなる。 しかも SQL 文は多機能なわりに短く書けるので、情報密度が高い (逆に言うと 重要な部分を読み取りづらい)。SQL 文の可読性を高めずして、プログラムの質の 向上はない。 $dbh->prepare("SELECT hoge, fuga FROM table1 WHERE foo = ?"); などと prepare や execute の引数に直接 SQ
外国為替レート変換タグ が Firefox 3.6.8 で動かない (作者様ページ)。 IE8 では OK。Firefox のコンソールには illegal character http://raku2fx.com/fxapi-getfx.php?e=ex1&f=USD&JPY&v=5 (以下文字化け) と表示されている。 http://raku2fx.com/fxapi.js をローカルに保存して、 function exchange(e, f, t, v, cf){ document.write('<script type="text/javascript" src="..."> を document.write('<script type="text/javascript" charset="utf-8" src="..."> とすれば動いたので、ぜひご修正いただければと。 Ameb
最近、技術者やプログラマの方と面接する機会が多いです。 毎回質問事項を考えるのにも飽きたので、再利用できるようにまとめておきます。 もしさわりの質問に対する反応が良かった場合は、さらに突っ込んだ質問 (インデントが深いもの) をします。経験がないようなら、さらっと流します。 当ページ管理人は、現在 EC サイト構築・運営を担当しているため、 そっち方面に偏っています。 最小限の質問でその人のスキルを見極めるのは難しいなぁ…。 ------- ●追記 ホッテントリに載ったようなので、このチャンスに 人材募集 を再アピールしておきます。 興味のある方はぜひ。 念のため言っておきますが、全部できないとダメというつもりは全くありません (当ページ管理人も、CSS・Eclipse・Struts・Spring・Hibernate・Ruby・アセンブラなど、 弱い部分が多々あります)。 「~はできますか
perl+DBI プログラムの鉄則 のつつき。 鉄則その 1. my $dbh = DBI->connect($dsn, $user, $password, {RaiseError => 1, PrintError => 0, AutoCommit => 0 }); connect 時にするべきこと。 RaiseError は ON にする。そうすれば DB の処理でエラーが発生した ときに勝手に die してくれる。いちいちエラーチェックをする 必要もなくなるし、エラーチェック漏れも起こりえない。楽できるのに、 なおかつ質も向上する。プログラマたるもの、怠惰でなくてはならない。 デフォルトでは PrintError が ON で RaiseError を OFF になっている。 RaiseError を ON にするとエラー発生時にエラーメッセージがダブって 表示されてしまうため、Pri
ウノウラボ Unoh Labs: コマンドラインで作業する上で知っておくといいテクニック% find . -name '*~' -exec rm {} \; 404 Blog Not Found:勝手に添削 - find(1)% find . -type f -name '*~' | xargs rm % find . -type f -name '*~' | perl -nle unlink わたしなら% find . -type f -name '*~' | sed 's/^/rm /'で確認し、OK なら% find . -type f -name '*~' | sed 's/^/rm /' | shで消します。 いまどき fork/exec rm のオーバーヘッドがどれほどのものか。 xargs を使うとき、rm が 1回だけ実行されるときと、ARG_MAX を超えたときに rm
要件定義のヒアリングシートはいくつか見たことはあるが、web 開発に 特化したまともなヒアリングシートを見たことがないので作ってみた。 「サイトの目的は」などの上流部分はあえて省いて、機能・実装にフォーカスしている。 思いつくままに記述してみたが、結果としてはインターネット上の コマース向けサイトに特化した形になった。 請負時のヒアリングシートと、発注時の要件伝達漏れチェックシートと、 開発時のレビュー観点の元ネタとして使えるといいなぁ。今後気づいた ところがあれば追記していきます。 ●2010/02/24 追加分。 - サイトメンテナンス時のアナウンス要否 - メンテナンスページは「503 Service Temporarily Unavailable」を返すようにし、 検索エンジンにキャッシュされないよう注意する。 ●2007/08/23 追加分。 404/403/500 などのエラー
話のネタになるかもしれないトリビア50個 > * "Almost"は、全ての文字がアルファベット順になっている単語の中で最も長い単語。 > A→l→m→o→s→t。他にどんな単語があるのでしょうか。 > > * "Rhythm"は、母音の無い最も長い単語。 > これも他の単語が気になります。 英単語トリビアが気になったので調べてみる。 UNIX には look というコマンドがある (1979年リリースの V7 から存在する)。引数で与えた文字列から始まる英単語を表示するだけのものだ。 % look fuga fugacious fugaciously fugaciousness fugacity fugal fugally テキストファイル (FreeBSD だと /usr/share/dict/words) に英単語が羅列してあって、そこから grep しているようなものである。テ
http://example.jp/ は http だが、http://example.jp/security/ は SSL/TLS 必須と する場合の .htaccess 設定。 方法1. バーチャルホスト (VirtualHost ディレクティブ) を別に切る これが一番スマートかも。それができない場合は方法2 や方法3 で対応。 方法2. SSLRequireSSL を使う。 .htaccess に SSLRequireSSL と書くだけで、そのディレクトリ以下は SSL 必須となる (SSL 以外のアクセスは deny する)。 httpd.conf に記述するなら <Directory "/foo/bar"> SSLRequireSSL </Directory> とする。 マニュアル: http://httpd.apache.org/docs/2.0/ja/mod/mod_ssl
SELECT 要素の値を参照・代入する場合は 参照: myform.myselect.options[myform.myselect.selectedIndex].value 代入: myform.myselect.selectedIndex = ".."; とするしかないとずっと思っていたのだが、 参照: myform.myselect.value 代入: myform.myselect.value = '..'; と書けるということを先日知った。 例: ソース: <select name="pref"> <option value="0">選択してください</option> <option value="1">1:北海道</option> <option value="2">2:東京都</option> <option value="3">3:沖縄県</option> </select
perl+DBI プログラムの鉄則 のつつき。 鉄則その3. while ( my $arr_ref = $sth->fetchrow_arrayref ){ my ($hoge, $fuga) = @$arr_ref; ... } SELECT 時は上記のように fetchrow_arrayref を使うこと。そして必ずスカラーに 代入すること。せっかく fetchrow_arrayref を使っていても while ( my $arr_ref = $sth->fetchrow_arrayref ){ print "$$arr_ref[0] $$arr_ref[1]\n"; } などと書いては台無しである。配列のインデックスで指定すると取得カラムの 増減に非常に弱い。そしてなりより、$$arr_ref[1] が何を意味するのか さっぱりわからない。 fetchrow_array は使わな
perl - There's more than one best practice > この点ははっきり言おう。こういう形でreturnできるのはperlの美点だと。 途中で return できるのは別に perl 独自の機能ではないですよね。「perl なら許される」ということであれば、ちょっと理解できない。どんな言語で あろうと、基本は出口はひとつがベストと考えます。ただし実際にプログラム を組むと、例外処理・エラー処理が必要になるので、なかなかそうもいかない。 ではどういう return なら容認するかというと、わたしの場合は sub func { return if $debug; ... } という関数先頭付近で値のチェックをして return するタイプ。あるいは 関数の途中であっても、 sub func { ... $ret = subfunc1(); return
perl - 勝手に添削 - WEB+DB Press Vol.32 pp.94 について。 わたしなんかよりよっぽど perl を知っている人なのだろうから機能的な 点についてはコメントしないが、はたしてこの添削後のコードはきれいなのか? 気になるのは、 sub search_result{ return unless param("query"); ... my $response = get($uri) or return; ... と途中で節操なく return しているところ。 上記関数の引数がなく、$q がグローバル変数化しているところ。 最後の return $xml->{'totalResultsAvailable'}, "hits", ol(map { encode_utf8 li(a({href=>$_->{'ClickUrl'}}, $_->{'Title'}
perl+DBI プログラムの鉄則 のつつき。 鉄則その2. DB に接続したらすぐに別の関数に飛ばし、そこですべての処理を行う。 main 部分は my $dbh = DBI->connect(...) || die "$!"; eval { ... $dbh->commit; $dbh->disconnect; }; if ( $@ ){ $dbh->rollback; $dbh->disconnect; } とだけ書いておく。これは Java で言うところの try ~ catch に相当する。 内部で die すれば if ( $@ ) で引っかかるわけだ。なお、RaiseError を ON にしておかないと、エラーが起こっても自動では die してくれないので 注意。disconnect の部分には、エラーが発生したことをログに記録するなどの 後始末を処理を付け加えること。 t
些細なことですがdie_on_bad_params ではなくて、global_vars ですね。 ところで、現状に不満なら自作という手もありますよ。 (嫌味ではなく。) そういう自分も、HTML::Template を使っているくせに 「param() で与えられていない変数が template に書いてあっても それをはじく機能が無い」ことが不満なので、 パッチでも書いてから人に言えという話ですが。 LoBex | URL | 2006-02-16(Thu)05:21 [編集] HTML::MasonはCGIでもつかえるようですhttp://search.cpan.org/~drolsky/HTML-Mason-1.32/lib/HTML/Mason/CGIHandler.pm 試してみたわけではないのですが^^; あと Embperl (http://search.cpan.org/~
Perl による web アプリケーション生成のための手法・モジュールを、 わたしはよく知らない。 ずっと print 文でゴリゴリ書いていたが、最近は HTML::Template を お試し中。モジュール作成者の手のひらで踊らされている感が嫌いなのと、 デファクトスタンダードが固まるのをずっと待っていたが、最近は開発効率の あまりの悪さに耐えがたくなってきた。 まずは候補をリストアップ。 ●print 文 print 文をなめてはいけない。いろいろできる。 print "" print '' print qq() print "@{[ $var ]}"; print <<END; (ヒアドキュメント。変数展開あり) print <<'END'; (ヒアドキュメント。変数展開なし) ●HTML::Template 変数置換 (TMPL_VAR)・ループ (TMPL_LOOP)・真偽判定
となっている。明細が 8行なので、明細テーブルは 5,000万×8レコードで 4億レコード。月に 4億レコード増える。これは怖い。12ヶ月で 48億レコードである (まぁ延滞利息については料金計算システムではなく、与信管理システムが算出して いるような気がするが)。 さらに言えば、何月何日何時何分に何パケット送受信した、というデータも当然管理 しているだろう。これを RDBMS で管理したとするなら、レコード数は 1千億や1兆の 単位になるかもしれない。 ちなみに上記四半期データによると ARPU (Average Revenue Per User。1契約 あたりの月間売上) は 7,000円程度なので、1ヶ月の請求額合計は 350,000,000,000 円 (3,500億円)。 これもデカい。32bit 符号付整数の最大値は 21億なので全然足りない。64bit 符号付整数なら余裕だけ
昨日から今日にかけて はまったこと。 DBI + DBD::mysql + MySQL で、RaiseError が効かない。 use DBI; my $dbh = DBI->connect( 'DBI:mysql:dbname', 'user', 'password', {AutoCommit => 0, RaiseError => 1, PrintError => 0} ) || die; my $sth = $dbh->prepare("select * from not_exist_table"); $sth->execute; 上記のように、存在しないテーブルやカラムに対して DML を発行しようとすると、 RaiseError を ON にしておけば SQL 解析の prepare で勝手に die してくれる。 エラーはこんな感じ。 DBD::mysql::st execut
68user 的 perl+DBI プログラムのルール。初心者に教育するときはこのサンプルプログラムを渡すこと。重視すべきなのは、バグの入り込まないコーディングスタイルであることと、可読性を重視すること。速度はその後でよい。 まずはサンプルプログラム。解説は後ほど。 #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect($dsn, $user, $password, {RaiseError => 1, PrintError => 0, AutoCommit => 0 }) || die "$!"; eval { &mainwork(); $dbh->commit; $dbh->disconnect; }; if ( $@ ){ $dbh->rollback; $dbh->disconnect; } exit 0; #----
このページを最初にブックマークしてみませんか?
『無精で短気で傲慢なプログラマ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く