ランダム順でデータを取得するSQL

/ db

ORDER BY句と聞くと、整然と並べられたデータを取得できるイメージばかりが先行してしまう。でも、「ソート」という考え方を応用すると、実はぐちゃぐちゃな順列で取得することも可能。

// postgresql の場合
SELECT * FROM table ORDER BY random();

// MySQL の場合 SELECT * FROM table ORDER BY rand()

乱数でソートできるというのが、イカス!

でも、データをそんなブサイクに並べてどうするのか。たとえば、テーブルから任意のレコードを抽出したい場合に、この方法が使える。統計で無作為抽出するときなんかは、有用なんじゃないでしょうか。

onEnterFrame で複数メソッドを個別に実行する方法

onEnterFrameとかのイベントで、複数のメソッドをダイナミックに実行するうまい方法がわかりませぬ。これはFlashを始めた頃から悩んでいることのひとつだったりして。

たとえば、徐々にアルファ値を上げていきながら、あるタイミング(フレーム)からスケールアップするとか。または、onEnterFrame 内で処理Aと処理Bを同時に実行するとき、onEnterFrame をdeleteするには、両方の処理が完了するのを待たなければならず、そのためにムダなif文が入ってしまうとか。

その場しのぎで色んな方法を試してきたけど、そろそろ汎用化できたら良いなーってことで、EventDispatcher を使う方法を試してみたよ。

続きを読む "onEnterFrame で複数メソッドを個別に実行する方法"

AfterEffects 7.0 リリースされてました

Adobe AfterEffects 7.0 が、本家アメリカでリリースされたみたい。日本でも2月上旬に出荷されるとのこと。サイトで予約を受け付けているので、映像系のアルファーな人はどうぞ。

「グラフエディタ」や「タイムワープ」など、すぐに使えそうな新機能がいろいろ。また、FLV書き出しを標準サポートしているっぽいので、AftterEffects の VFX を Flash でアルファチャンネル合成して、スゴイことができるかもしれない。勢いで書いているけど。

新しいモノ好きとしては食指が動くんだけど、その前に6.5の機能を全然使いこなせていないという現実の壁。つーか、2年くらい触っていない気がするぞ。せっかく買ったのに。でも、今はまずFlash8が優先か。早くActionScriptゴリゴリ書けるようにならんとね。

c:forEach varStatus のプロパティ一覧

JSTL の <c:forEach> は、strutsタグの <logic:iterate> に比べて格段に便利だ。最もその差を感じるのが、ループ内で扱えるステータス変数の扱いやすさ。

<c:forEach> のステータス変数が持つプロパティの一覧。

プロパティ機能初期値
varStatus.indexループインデックス0
varStatus.countカウント値1
varStatus.first最初の要素かどうかの真偽値
varStatus.last最後の要素かどうかの真偽値
varStatus.beginbegin属性値(開始値)
varStatus.endend属性値(終了値)
varStatus.stepstep属性値(増分)
varStatus.current現在値

first とか last とか、かゆいところに手が届いていて嬉しい。贅沢を言えるなら、perl の HTML::Template にあるような odd や even プロパティなんかあると、テーブルの縞模様とか二段組がカンタンに作れるのにね。

続きを読む "c:forEach varStatus のプロパティ一覧"

strutsタグとJSTLの対応表

今まで JSP で struts の bean タグや logic タグで記述していたところを、JSTLを使って書かなくちゃいけなくなった。めんどっちぃ。ということで、対応表。

struts taglibJSTL
bean:definec:set
bean:cookiec:set
bean:headerc:set
bean:parameterc:set
bean:messagefmt:message
bean:writec:out
bean:write format="yyyy/M/d"fmt:formatDate pattern="yyyy/M/d"
bean:includec:import
logic:emptyc:if test="${empty x}"
logic:notEmptyc:if test="${not empty x} != null"
logic:presentc:if test="${empty x}"
logic:notPresentc:if test="${not empty x} != null"
logic:equalc:if test="${x == 'abc'}"
logic:notEqualc:if test="${x != 'abc'}"
logic:greaterEqualc:if test="${x >= 0}"
logic:greaterThanc:if test="${x > 0}"
logic:lessEqualc:if test="${x <= 0}"
logic:lessThanc:if test="${x < 0}"
logic:iteratec:forEach

logic:match に対応するもんは無いのかな。どうせなら正規表現マッチとかできたら楽しいんだけどなあ。あとは、bean:size に対応するタグが無いのも痛い。JSTL1.1からある fn:length とか使うと良いっぽいけど、開発環境 JSTL1.0 だった気がする。でも、そのままでも、ちょっと工夫すれば取れるのか。

柔軟性ありそうな感じなんで、使っていくとハマるかな。

LG.JPドメイン

今の今まで知らなかったけど、LG.JPっていう属性型ドメイン名があるのね。

local government - 地方公共団体
(a) 地方自治法に定める地方公共団体のうち、普通地方公共団体、特別区、一部行政事務組合および広域連合等
(b) 上記の組織が行う行政サービスで、総合行政ネットワーク運営協議会が認定したもの
via. IT用語辞典 e-Words

区役所のホームページなんか見ていなかったから全然知らなかった。創設は2002年と比較的最近みたい。ドメインの種類も増えているんだろうけど、まったく付いていけてない…っていうか、これは常識の範疇かもしれないな。ヤバス。

正規表現マッチの真偽値の取り方

これまで、javascript で正規表現のマッチング結果を得るときは、バカのひとつ覚えで String.match を使っていた。

var str = "12345";
var reg = new RegExp(/123/);
if(str.match(reg)) {
    // マッチしたときの処理
}

でも、match関数の戻り値は「最初にマッチした部分の文字列(マッチしなかった場合は null)」 で、純粋にマッチしたかどうかを知りたい場合では、わずかにリッチすぎる。そのような場合は、RegExp.test (戻り値はtrue / false) を使うのが良い。

var str = "12345";
var reg = new RegExp(/123/);
if(reg.test(str)){
    // マッチしたときの処理
}

続きを読む "正規表現マッチの真偽値の取り方"

WebアプリケーションのUI

@ITで連載されている「Webアプリケーションのユーザーインターフェイス」のシリーズが、すごくタメになる。Web系のデベロッパーやデザイナーは、ぜひ一読したい内容。

第1回 ユーザーにとって “インターフェイス”が製品そのもの
第2回 ユーザーが選びやすいフォームのカタチを考えよう
第3回 UCD=利用者中心設計のプロセスとは?
第4回 お金を下ろせないATMの画面デザインを考える
第5回 入力情報を預かる責任を果たせる画面デザインとは?
第6回 「戻る」で入力データが消えてしまうフォームはいらない

続きを読む "WebアプリケーションのUI"

デザインを変えてみた

年も改まったところで、とりあえずブログのデザインを変更してみた。特にテーマもなく、自分の好きなように組んでいった結果、こうなった。どことなく韓国っぽいので、調子に乗ってハングルを書いてみたり、やりたい放題。いやあ、テキトーって素晴らしい。(再構築時に再度TB飛ばしてしまった人、ごめんなさい)

デザインを変更したついでに、カテゴリも整理。価値ありそうな記事を活かすために、ワケわからんエントリは全部 misc. に突っ込んでやった。これで、開発系ネタの更新について、モチベーションが上がるかもしれない。自信ないけど。

今年は、既出しまくりのネタだったり、価値の低そうなネタでも、自分としてのキヅキは、とりあえずエントリしていこうと思う。誰かの役には立つかもしれないし、自分のリファレンスになるかもしれないし。

ということで、2006年もよろしくお願いします。

続きを読む "デザインを変えてみた"