<TEXTAREA> で rows を指定しても IE と Firefox では見た目が違ってしまいます。
例えば次のように定義します。
<textarea rows="3" cols="20">
1.ABCDE
2.あいう
3.アイウ</textarea>
rows を 3 にしていますが、Firefox では 次の赤線で囲んだように 3 行分以外に スペースが空いてしまいます。
不思議に思っていたのですが、 どうやらこのスペースは、横スクロールバーのための予定地だったようです。 スタイルシートで横スクロールバーを出してみます。
textarea { overflow-x : scroll ; }
次のようになります。
Firefox はこの状態で 3 行分の縦サイズになりました。 逆に IE の方は横スクロールバーの分 隠れてしまいました。
自動改行させる場合(デフォルト)は、横スクロールがなくても 横に長くなった分は、次の行に改行されるだけなので 横スクロールバーを“なし”に設定してみます。 (ついでに縦スクロールバーを“必須”にしてデザインを合わせます)
textarea {
overflow-x : hidden ;
overflow-y : scroll ;
}
次のようになりました。
IE と Firefox で同じ縦サイズになりました。
横に長くなっても折り返すだけなので問題ありません。
自動改行させない場合はこの方法は使えません。
wrap を off にしてみます。
<textarea rows="3" cols="20" wrap="off">
1.ABCDExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2.あいう
3.アイウ</textarea>
横に長くなった分が隠れてしまうだけでなく IE 側にスペースができてしまいました。
Word には文字書式解除のショートカットとして [Ctrl]+[Space] があります。 次のように「太字」「下線」「斜体」のような書式を解除することができます。
範囲を選択して [Ctrl]+[Spcae] を押します。
解除できました。
Word で、次のようにテキストボックスを並べている場合
テキストボックス間の移動は [Tab] キーではできません。
(普通に Tab が入力されます)
そういう場合、[Alt]+[↑] や [Alt]+[↓] を使うことで フォーカスを移動することができます。
ただし、テキストボックスの生成順にフォーカスが移動するので その順で並んでいない場合は、変な順番の移動になります。
Word を使っていて (C) と入力すると © (○に c) に 勝手に変換されてしまうことがあります。
これは、オートコレクトという機能のせいです。
変換されてしまった直後に [Back Space] や [Ctrl]+[Z] を押すと 変換前の状態に戻すことができますが、 次のように、この機能自体を無効にすることもできます。
Word 2000 の場合、「ツール」から「オートコレクト」を選択します。 ( Word 2007 でも「オートコレクト」を探すのは同じです)
「入力中に自動修正する」のチェックを外します。
これで自動変換されなくなります。
Excel では「 =sum(A1:A5) 」のようにセルに計算式を入れることができますが Word でも表に計算式を入れることができます。
まず表を作ります。
表の計算式を入れたいセルにカーソルを置いて 「罫線」メニューから「計算式」を選択します。 ( Word2000 の場合)
計算式を入れるセルの上に数値があれば 次のようにデフォルトで「 =SUM(ABOVE) 」がセットされています。 "ABOVE" は、表内のこのセルより上にある範囲のことです。 "LEFT" だと 計算式を入れるセルより左にある範囲になります。
計算結果が入りました。
次のようにセルの位置の指定もできます。
計算結果が入りました。
計算式の結果は、他のセルの値を変えても自動では反映されません。 右クリックで「更新」するか、[F9] キーを押して更新する必要があります。
bash には pushd というコマンドがあります。
pushd コマンドは cd コマンドと同じように ディレクトリを移動することができます。
cd コマンドとの違いは 移動したディレクトリをディレクトリスタックに 積んで(保存して)くれます。 "push directory" なワケです。
ディレクトリスタックの内容は dirs コマンドで見ることができます。 初期状態では、ホームディレクトリが ディレクトリスタックに積まれています。
~:$ dirs ~
実際に使ってみます。 pushd コマンドは、実行後に現在のディレクトリスタックを 表示してくれます。
~:$ pushd /var /var ~ /var:$ pushd /home /home /var ~ /home:$
ディレクトリスタックから取り出すには popd コマンドを使います。
/home:$ popd /var ~ /var:$
このままでも良いのですが 私は function を使って既存の cd コマンドを 置き換えて使用しています。
function cd { case $1 in "") pushd $HOME > /dev/null ;; "-") [ `dirs | wc -w` -gt 1 ] && popd > /dev/null ;; *) [ -d $1 ] && pushd $1 > /dev/null ;; esac }
引数を指定しなければホームディレクトリに、ディレクトリを 指定した場合は移動してディレクトリスタックに積みます。 ハイフン "-" を指定した場合はディレクトリスタックから取り出します。
Excel の VBA で クリップボードにデータを格納する場合 DetaObject を使う方法があります。
参照設定をせずに DetaObject を使う場合 次のように書きたくなりますが、 これはエラーになります。
Set Clip = CreateObject("MSFORMS.DataObject")
色々と調べてみると、次のように宣言できるようです。
CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
これを利用すれば 参照設定せずに 簡単にクリップボードに文字列を格納できます。
With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText "この文字列をクリップボードに格納します" .PutInClipboard End With
PostgreSQL に格納されている PL/pgSQL 関数のソースを確認するメモです。
次の test という関数で確認してみます。
CREATE OR REPLACE FUNCTION test(f1 TEXT, f2 TEXT) RETURNS TEXT AS $$ DECLARE BEGIN RETURN 'This is a pen!'; END; $$ LANGUAGE PLPGSQL;
関数の情報が格納されている pg_proc カタログから取得します。 prosrc 列にソースが格納されています。
db=# SELECT prosrc FROM pg_proc WHERE proname = 'test'; prosrc ------------------------------ DECLARE BEGIN RETURN 'This is a pen!'; END; (1 row)
pg_proc カタログには 他にも色々な情報が格納されています。
db=# \x db=# SELECT * FROM pg_proc WHERE proname = 'test'; -[ RECORD 1 ]--+----------------------------- proname | test pronamespace | 27944 proowner | 16384 prolang | 34946 procost | 100 prorows | 0 proisagg | f prosecdef | f proisstrict | f proretset | f provolatile | v pronargs | 2 prorettype | 25 proargtypes | 25 25 proallargtypes | proargmodes | proargnames | {f1,f2} prosrc | : DECLARE : BEGIN : RETURN 'This is a pen!'; : END; : probin | - proconfig | proacl |
proargnames が引数の名前で proargtypes が引数のデータ型です。 prorettype は戻り値のデータ型です。
またもや関西限定の情報で、関西以外の方にはアレなのですが 7 月に LPIC の無料セミナーが 2 つあります。
7/11 大阪
『LPICレベル1技術解説無料セミナー』開催@大阪(7月11日)のお知らせ|Linux技術者認定機関 LPI-Japan
7/9 京都
オープンソースカンファレンス2010 Kansai@Kyoto - イベント案内 | 2010-07-09 (金): Linux技術者認定資格(LPIC)レベル2 技術解説セミナー
今年も、オープンソースカンファレンス Kansai の季節がやってきました。 日程は、2010年7月9日(金),10日(土)です。
オープンソースカンファレンス2010 Kansai@Kyoto - オープンソースの文化祭!
オープンソース好きが集まる オープンソースのためのお祭です。 (去年も全く同じことを書いていました。)
関西に住んでいるので、いつも関西のイベントだけピックアップしています。 関西以外の方にはゴメンなさい。
以前紹介した tac コマンドと rev コマンドの 使い道を探していたのですが、素晴らしいネタが書いてあるサイトがありました。
【参考サイト】
しげふみメモ : Linuxのrevコマンドで文字を逆に並べる
ソートや文字の切り出しは考えていたのですが banner コマンドを使ったネタは想定外でした。
banner は 次のような出力ができるコマンドです。
$ banner Linux
# ### # # # # # #
# # ## # # # # #
# # # # # # # # #
# # # # # # # #
# # # # # # # # #
# # # ## # # # #
####### ### # # ##### # #
これを tac コマンドに通すと上下が逆になります。
$ banner Linux | tac
####### ### # # ##### # #
# # # ## # # # #
# # # # # # # # #
# # # # # # # #
# # # # # # # # #
# # ## # # # # #
# ### # # # # # #
rec コマンドに通すと左右が逆になります。
$ banner Linux | rev
# # # # # # ### #
# # # # # ## # #
# # # # # # # # #
# # # # # # # #
# # # # # # # # #
# # # # ## # # #
# # ##### # # ### #######
2 つのコマンドに通すと 180 度回転させることができます。
$ banner Linux | rev | tac
# # ##### # # ### #######
# # # # ## # # #
# # # # # # # # #
# # # # # # # #
# # # # # # # # #
# # # # # ## # #
# # # # # # ### #
アイデア次第だと感心させられます。
以前書いた tac コマンドは 行を反転さるコマンドでした。 そこで、行内の文字列を反転するコマンドも無いかと探してみたら rev というコマンドがありました。
次のテキスト( test.txt )を処理します。
1 2 3 4 5 6 7 8 9
rev コマンドで出力します。
$ rev test.txt
3 2 1
6 5 4
9 8 7
行の順番はそのままですが、行内で文字が反転しています。
標準入力を受けることもできます。
$ cat test.txt | rev
3 2 1
6 5 4
9 8 7
tac と合わせて使うと全て反転させることができます。
$ tac test.txt | rev
9 8 7
6 5 4
3 2 1
ソートに使うくらいで、他に「これぞ!」という使い道は思いつきませんが いつか必要になるときのために、こういったコマンドが用意されているのは安心ですね。
Perl の文字列置換では、"e" オプションを付けると 置換先の指定を実行文として処理できるので、 条件にマッチした部分をサブルーチンで処理させることができます。
ややこしいので実際の例で説明します。
sub replace {
return "[".($1*2)."]";
}
$xx = "123456789";
$xx =~ s/(\d)/replace($1)/ge;
print $xx;
文字列置換のときに replace() サブルーチンが実行されます。
実行結果は次のようになります。
$ perl replace.pl
[2][4][6][8][10][12][14][16][18]
これと同じことを PHP でやりたい場合 preg_replace_callback() という関数を使用します。
<?php
function replace($matches) {
return "[".($matches[1]*2)."]";
}
$xx = "123456789";
$xx = preg_replace_callback("/(\d)/", "replace", $xx);
print $xx;
?>
実行結果は同じになります。
PHP の preg_replace_callback() では条件にマッチした部分を
第二引数のコールバック関数に渡すような形になります。
Perl の "e" オプションは、実行文として処理するだけなので サブルーチンを使用せずに 次のようにも書けます。
$xx = "123456789";
$xx =~ s/(\d)/"[".($1*2)."]"/ge;
print $xx;
PHP でも別の場所にわざわざ関数を定義したくない場合 create_function() で無名関数を作るという手があります。
<?php
$xx = "123456789";
$xx = preg_replace_callback("/(\d)/"
, create_function('$matches'
,'return "[".($matches[1]*2)."]";')
, $xx);
print $xx;
?>
Linux には tac というコマンドがあります。
資格の学校とは全く関係はありません。
「 cat コマンドの逆」ということで tac です。
$ cat test.txt
abc
123
efg
456
$ tac test.txt 456 efg 123 abc
このように cat とは 逆順の出力になります。
デフォルトでは、区切り文字が改行になっているので 行単位で逆になります。 他のコマンドで行を逆にするのは結構大変なので 覚えておくと役に立つときがあるんじゃないでしょうか。
他にも if 〜 fi、case 〜 esac といったように 「逆の文字列」で何かを表現することがありますが、 テキストならではの発想で面白と思います。
Linux に newgrp というグループを変更するコマンドがあります。
このコマンド、設定ファイルなどを変更するコマンドではなく su コマンドのように一時的に状態を変更するコマンドです。
まずグループについてですが、 Linux のユーザは 次の例のように複数のグループに属することができます。
$ id uid=501(hoge) gid=502(develop) groups=497(manage),502(develop)
id コマンドで出力される groups は、補助グループと呼ばれる
ユーザが属しているグループです。
gid の方は、一次グループと呼ばれ、ファイルを作成したときは
このグループの権限が設定されます。
次のコマンドで、一次グループを変更することができます。
$ newgrp manage $ id uid=501(hoge) gid=497(manage) groups=497(manage),502(develop)
ファイルを作成するとグループが変わっているのがわかります。
$ ls -l -rw-r--r-- 1 hoge develop 0 2010-06-01 22:55 a.txt -rw-r--r-- 1 hoge manage 0 2010-06-01 22:56 b.txt
次の場合、newgrp するときにパスワードの入力が求められます。
su コマンド同様、root の場合はパスワードの入力が不要です。
newgrp すると su と同様に新しいシェルが起動します。
$ pstree init┬ ├ ├sshd─sshd─bash─pstree $ newgrp manage $ pstree init┬ ├ ├sshd─sshd─bash─bash─pstree
su コマンドと同様に環境を初期化するには "-" を指定します。
$ newgrp - manage
また、sg という newgrp とほぼ同機能のコマンドもあります。
newgrp との大きな違いとして、su コマンドと同様に
"-c" オプションでコマンドを実行することができます。
$ sg --help
usage: sg group [[-c] command ]
ちなみに、sg コマンドは newgrp のシンボリックリンクのようです。
$ ls -l /usr/bin/newgrp /usr/bin/sg -rwsr-xr-x 1 root root 27080 Mar 8 2004 /usr/bin/newgrp lrwxrwxrwx 1 root root 6 Jan 20 2004 /usr/bin/sg -> newgrp
HTML では #RRGGBB と名前で 色を指定することができます。
<body bgcolor="#ffffff" text="black">
スタイルシートでは他の指定方法も使えます。
まず HTML と同じ指定。
<span style="color:red">名前で指定</span> <span style="color:#ff0000">#RRGGBBで指定</span>
#RGB の 3桁で指定することもできます。
<span style="color:#f00">#RGBで指定</span>
#3fb と指定した場合 #33ffbb と同じ色になります。
rgb(R,G,B)での指定です。
0 〜 255 を 10 進数の数値で指定することができます。
<span style="color:rgb(255,0,0);">rgb(R,G,B)で指定</span>
rgb(R%,G%,B%)での指定です。
パーセンテージで 0 〜 100 で指定することができます。
<span style="color:rgb(100%,0%,0%);">rgb(R%,G%,B%)で指定</span>
join というコマンドがあります。
配列を文字列に結合する join もありますが データベースを使ってる人ならテーブルの結合を 思い浮かべるのではないでしょうか。 そちらのイメージです。
まずは paste コマンドのおさらい。
次の 2 つのファイル sugaku.txt と kokugo.txt を処理します。
ito 98 1 kameda 83 2 tanaka 71 3 wada 32 4
ito 91 2 tanaka 100 1 wada 45 3
数学と国語のテスト結果で、「名前、点数、順位」が テキストファイルに書かれています。
join します。
$ join sugaku.txt kokugo.txt ito 98 1 91 2 tanaka 71 3 100 1 wada 32 4 45 3 ~~~~|~~~~ ~~~~|~~~~ sugaku.txtの内容 kokugo.txtの内容
2 つのファイルが 1 つにまとまりました。
オプションなしの場合、1 列目の値を使って結合します。
kokugo.txt に kameda の行はなかったため除外されました。 データベーステーブルの内部結合と同じです。
結合条件となる列を変えることもできますが、
あらかじめソートされている必要があります。
順位で結合するために kokugo.txt を順位の列でソートして
kokugo2.txt を作ります。
( sugaku.txt は順位の列も昇順になっているのでソート不要)
$ sort +2 -n kokugo.txt > kokugo2.txt $ cat kokugo2.txt tanaka 100 1 ito 91 2 wada 45 3
3 列目の順位の列で join します。
$ join -1 3 -2 3 sugaku.txt kokugo2.txt 1 ito 98 tanaka 100 2 kameda 83 ito 91 3 tanaka 71 wada 45 ~~~~|~~~~~ ~~~~|~~~~~~ sugaku.txtの内容 kokugo2.txtの内容
"-1" は 1 つ目のファイルの結合条件となる列を指定します。 "-2" は 2 つ目のファイルの結合条件となる列です。
結合条件となる列は 先頭に出力されます。
ファイルの 1 つを標準入力から受けることもできます。 その場合、ファイルの指定の変わりにハイフン "-" を指定します。
$ cat sugaku.txt | join -1 3 -2 3 - kokugo2.txt 1 ito 98 tanaka 100 2 kameda 83 ito 91 3 tanaka 71 wada 45
これを利用して 標準入力から受けたコマンドの出力結果のテキストを 抽出してみたいと思います。
ls の結果が次のようになるとします。
$ ls -l
-rw-r--r-- 1 hoge hoge 54 May 31 04:12 a.txt
-rw-r--r-- 1 hoge hoge 54 May 31 04:12 b.txt
-rw-r--r-- 1 hoge hoge 54 May 31 04:12 c.txt
-rw-r--r-- 1 hoge hoge 54 May 31 04:12 d.txt
まず次のようなテキスト( where.txt )を用意します。
a.txt b.txt
join します。
$ ls -l | join -1 9 - where.txt
a.txt -rw-r--r-- 1 hoge hoge 54 May 31 04:12
b.txt -rw-r--r-- 1 hoge hoge 54 May 31 04:12
a.txt と b.txt だけ抽出できました。
列を指定して抽出できるので抽出条件が他の列に混ざっていても 大丈夫という利点があります。