次のようなテーブルが データベースにあるとします。
group_name | food_name |
---|---|
fruits | orange |
fruits | apple |
fruits | pears |
fish | sardines |
fish | tuna |
fish | bream |
画面に表示する場合は、 次のようにグループ化して表示したくなることが あるんじゃないかと思います。 私はそうです。
group_name | food_name |
---|---|
fruits | orange |
apple | |
pears | |
fish | sardines |
tuna | |
bream |
そのためには、グループごとに件数を取得するなど 追加で処理を作成する必要があるのですが、 今回は集約関数を作って擬似的に対応してみます。
集約関数とは max(*) や count(*) のように 複数のレコードに対して処理を行なう関数です。
まず定義です。
CREATE AGGREGATE 文を使用します。
詳しくは、以下を参照してください。
PostgreSQL 8.0.2 文書 - CREATE AGGREGATE
こんな感じです。
CREATE AGGREGATE array_accum ( BASETYPE = anyelement , SFUNC = array_append , STYPE = anyarray , INITCOND = '{}' );
テーブルは次のようになっています。
db=# select group_name, food_name from foods;
group_name | food_name
------------+-----------
fruits | orange
fruits | apple
fruits | pears
fish | sardines
fish | tuna
fish | bream
(6 rows)
作成した集約関数 array_accum を使ってみます。
db=# select group_name db-# , array_accum(food_name) as food db-# from foods db-# group by group_name; group_name | food ------------+----------------------- fruits | {orange,apple,pears} fish | {sardines,tuna,bream} (2 rows)
これでは値の並びが悪いので 副問合せでテーブルをソートします。
db=# select group_name db-# , array_accum(food_name) as food db-# from (select * from foods order by food_name) as foods db-# group by group_name; group_name | food ------------+----------------------- fruits | {apple,orange,pears} fish | {bream,sardines,tuna} (2 rows)
文字列として返すために array_to_string を使って 配列を結合します。 array_to_string(配列, '区切り文字') です。
db=# select group_name db-# , array_to_string(array_accum(food_name), '/') as food db-# from (select * from foods order by food_name) as foods db-# group by group_name; group_name | food ------------+--------------------- fruits | apple/orange/pears fish | bream/sardines/tuna (2 rows)
値を受けたプログラムで処理をすることもできますが 元が改行を含まない値の場合、 次のように改行で区切って返すようにすると扱い易いです。
select group_name , array_to_string(array_accum(food_name), chr(10)) as food from (select * from foods order by food_name) as foods group by group_name;
改行を <br> に置き換えると 次のようになります。
group_name | food |
---|---|
fruits | apple orange pears |
fish | bream sardines tuna |
複数行のデータを1行で返すこの方法は 色々な応用ができるので 覚えておくと役に立つと思います。
これも、個人的にオススメのアドオンです。 しばらく 3.5 に対応されていなかったので 紹介が後回しになっていました。
これを入れるとテキストエリアのサイズを変更できるようになります。
このようにテキストエリアの端にマウスカーソルをあてると サイズの変更ができます。
グループウェアなどのメーラーで テキストエリアのサイズが小さい場合などの便利です。
ただし、Webのシステムではテキストエリアのサイズで 改行させることを、前提にしているものもあるので、 そういう場合は、注意して使用してください。
Google が 発表した Go 言語を とりあえず試してみます。
↓を参考にしてインストールしていきます。
ちなみに環境は Debian Linux です。
コンパイラなどが入ってない場合は、インストールします。
# apt-get install bison gcc libc6-dev ed make
Mercurial をインストールします。
# apt-get install python-setuptools python-dev # easy_install mercurial
Go 言語で開発するユーザの環境変数を設定します。
.bashrc などに書いておきます。
export GOOS=linux export GOARCH=386 export GOROOT=$HOME/go export GOBIN=$HOME/bin export PATH=$GOBIN:$PATH
GOOS は、Linux なら "linux"、Mac OS X なら "darwin" を設定します。 GOARCH は、32-bit x86 なら "386" を設定します。
開発用のディレクトリを作成します。
$ mkdir ~/go $ mkdir ~/bin $ mkdir -p ~/dev/go
ソースコードを取得します。
$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT
ビルドします。
$ cd $GOROOT/src $ ./make.bash
"hello world" を 出力するプログラムを作成します。
ソースファイルを hello.go とします。
$ cd ~/dev/go $ vi hello.go
package main import "fmt" func main() { fmt.Printf("hello world\n") }
386 の場合、8g コマンドでコンパイルします。 amd64 は 6g、armなら 5g です。
$ 8g hello.go
できた hello.8 というファイルを 8l コマンドで リンクします。
$ 8l hello.8
8.out という実行ファイルができるので実行します。
$ ./8.out
hello world
これで終わりです。
$GOBIN には、8g 8l の他にも 8c 8a などのコマンドが作成されています。 8c は C のコンパイル用のようですが 8a はアセンブラでしょうか? (未確認)
最近は USB の持ちこみ自体も厳しく言われるようになっていますが 「 USB に入れられる = PC へのインストール不要」ということで 自分用の環境作りに便利だったり、他人の家の PC を使うときに 持っていくと便利なソフトを紹介したいと思います。
今回は圧縮・解凍から、「 7-Zip Portable 」です。
使用言語に日本語を設定できるので、メニューも日本語で表示できます。 圧縮の形式は、.7z .zip .bzip2 .gzip .tar に対応、 解凍は、.7z .zip .lzh .bzip2 .gzip .tar .rar .cab... など数多く対応しています。
導入ですが、まず上記の「詳細(入手)はこちら」のサイトから ファイルをダウンロードします。 .exe ファイルなので、それを実行します。
言語の選択がありますので「 Japanese 」を選択します。
「次へ」をクリックします。
インストール(解凍する)フォルダを選択して「インストール」をクリックします。
これで終わりです。
インストール(解凍)したフォルダは、移動しても問題ありません。
CSS に :after と :before という擬似要素があります。 名前の通り、擬似的に要素を作ってくれるのですが その応用範囲は広すぎるので、 簡単に「これまではできなかった例」で、紹介します。
次のように <li> タグの :before に “【”を、 :after に “】”を content 属性として指定します。
li:before { content : "【" } li:after { content : "】" }
あとは次のように普通にリストを作成します。
<ol> <li>起</li> <li>承</li> <li>転</li> <li>結</li> </ol>
次のような結果になります。
対応していないブラウザもあるので、画像で表示しています。
このように“【】”で囲むことができました。
デザインを CSS だけで定義したくても どうしてもデザインのためのタグを書かなければならないときがあります。
例えば、前回の「吹き出し」も、尖った部分を作るには 次のように、メッセージ部分と別のタグを書く必要がありました。
<div class="balloon"> <p>メッセージ部分</p> <div class="arrow">↓</div> </ol>
多くのブラウザで擬似要素がサポートされれば、 デザインのための要素を書くことはグッと減るはずです。 当然 IE6 も・・・。
この記事を読んで思い出したのですが sl というコマンドがあります。 実行すると 次のような SL が画面を走りぬけけます。
==== ________ ___________ _D _| |_______/ \__I_I_____===__|_________| |(_)--- | H\________/ | | =|___ ___| / | | H | | | | ||_| |_|| | | | H |__--------------------| [___] | | ________|___H__/__|_____/[][]~\_______| | |/ | |-----------I_____I [][] [] D |=======|__ __/ =| o |=-~~\ /~~\ /~~\ /~~\ ____Y___________|__ |/-=|___|| || || || |_____/~\___/ \_/ \__/ \__/ \__/ \__/ \_/
ガチャガチャと ディレクトリを移動しながら ファイルを探しているときなど ls コマンドを間違えて sl と打ってしまうことがあります。 (少なくとも私は、よくあります・・・) このコマンドが入っていると、SL が走りぬけるまで ボーっと画面を見ることになります。
ジョークコマンドのようですが、存在しないコマンドを 打つと PATH 中を全て探すため 昔のコンピュータでは 時間がかかり、ダミーの sl コマンドを入れていた、 というのが起源のようです。 (ただし、このコマンドの場合は 逆に時間がかかります)
ちなみに、Debian では、パッケージが用意されています。
# apt-get install sl
-a, -l -F のオプションで変化します。
最近は JavaScript版 まであるようです。
漢字二字を 音+訓で読む事を 重箱読みと言いますが この逆の 訓+音の場合の名前が 思い出せませんでした。
答えは「湯桶読み」です。
小学生の頃に習った知識ですが 「重箱」は知っていても 「湯桶」は知らなかったので 記憶に残らなかったようです。
受験してから 既に 1 ヵ月経っていますが LPIC 302 の受験記を作成しました。 たいした情報はありませんが、 受験を考えてる人の参考になればと思います。
「コマンドプロンプトで、キーボードだけで クリップボードのテキストをペーストできませんか?」と 聞かれました。
私は、マウスとショートカットを組み合わせて使うのが好きなので あまり気にならないのですが、キーボードユーザは マウスに持ち替えるのが、好きではないようです。
ちょっと考えてみました。
編集 → 貼り付けは、下の図のように ウィンドウの左上のアイコンからも呼び出せます。
意外と知られていないようなのですが [Alt+Space] で、ウィンドウの左上のアイコンのメニューを 呼び出すことができます。
これを使います。
あとは、普通に [E] (編集)と [P] (貼り付け)を押します。
1アクションでは無理だったのですが キーボードユーザには マウスを使わなくて済むだけで充分なようで 満足してもらえました。
慣れてくると [Alt+Space] [E] [P] とリズム良く押せます。 何でも疑問に思うことは大事ですね。
mutt というコマンドで 簡単に添付ファイル付きの メールを送信することができます。
yum の場合、次のようにインストールできます。
# yum install mutt
次のコマンドで、本文に「message」、件名に「subject」、 添付ファイル「test.txt」を付けて 「xxx@example.com」にメールを送信します。
$ echo "message" | mutt -a test.txt -s "subject" xxx@example.com
サーバからログファイルを送る場合など便利です。
CSSだけを使って三角形を表示する方法があるようです。 なかなかに目からウロコなテクニックです。
Using borders to produce angled shapes (CSS tutorial)
ポイントは太い枠線の使い方です。 太い幅の、上側と左側のように隣り合う枠線を別の色で塗ります。
.triangular { border-left : solid 20px red ; border-top : solid 20px blue ; }
これを表示すると↓のようになります。
←↑は枠線
左上の部分が斜めになっています。 これを利用するわけです。
.triangular { width : 0px; line-height : 0% ; font-size : 0px ; border-left : solid 20px red ; border-top : solid 20px blue ; }
こんな感じで幅を消すと↓のようになります。
片方の色を背景と同じにすると↓のようになります。
左側・上側・右側を上手く使うと ↓のようになります。
これは次のような指定をしています。
.triangular { width : 0px; line-height : 0% ; font-size : 0px ; border-left : solid 10px white ; border-top : solid 20px gray ; border-right : solid 10px white ; }
「吹き出し」の尖った部分などにも使えそうです。
こんな矢印も作れます。