Word に画像を貼り付けると 元の画像のサイズよりも小さくなることがあります。 さらに手動で画像を圧縮することもできます。
まず元のになる Word ファイルを作ります。
「こんにちは」とだけ書いて 24KB です。 (Word 2003)
1407KB の bmp ファイルを挿入して保存すると 378 KB になりました。 元の画像サイズよりも Word ファイルは小さくなりました。
ここでさらに画像を右クリックして、メニューから 「図の書式設定」を開きます。 「図」タブの左下にある「圧縮」ボタンを押します。
「図の圧縮」ダイアログが表示されます。
「設定の対象」で「ドキュメント内すべての図」を選択すると 一括で圧縮することができます。
「解像度の選択」ではデフォルトが「印刷」になっています。 画像を貼り付けたときに自動で「印刷」になるようです(どこかに設定があるのかもしれません)。 今回は「 Web/ 画面」を選択します。
Word のサイズが 93 KB になりました。
当然、画像や大きさに影響されますが、「少しファイルサイズが多きいかな」と思ったときは
画像を見比べながら圧縮してみると良いと思います。
また、「図の圧縮」ダイアログでは、図のトリミング部分を削除することもできます。
通常トリミングした部分も広げなおせば表示されるようにデータは持っているのですが 完全に不要な場合は、この「図のトリミング部分の削除する」を実行しておけば不要なデータが無くなり ファイルのサイズを小さくすることができます。
9/24 の土曜日に大阪の中崎町で HTML5-WEST.jp 主催の 「第2回 HTML5 など勉強会」が 開催されたので行ってきました。
[参考]
第2回「HTML5など勉強会」を開催いたします - HTML5-WEST.jp
「HTML5 など勉強会」は HTML5 やそれに関連技術を発表し合い HTML5 に関心のある方々の技術の向上 情報交換を行い 関西の技術者を盛り上げていこう、という勉強会です。
今回は、LT を予定していた人が体調不良とのことで プレゼン 3 本+代理の村岡さんの発表でした。
村岡さんのデモが動かなかったのがちょっと残念でしたが モチベーションを高められた良い勉強会でした。
Word に次のように図や図形などのオブジェクトを入れた場合、 オブジェクトはどこかの段落に属することになります。
オブジェクトが属している段落を削除すると オブジェクトも一緒に削除されます。
どこの段落に属しているかを表示するには 「段落」メニューにある「編集記号の表示」を ON にします。
「編集記号の表示」が ON の状態でオブジェクトを選択すると オブジェクトが属している段落の左側にイカリのマーク(アンカー)が表示されます。
アンカーをドラック&ドロップで別の段落に移動させると オブジェクトが属する段落を変更することができます。
次のようにオブジェクトと離れた場所にある段落に アンカーを設定することもできます。
離れた場所でも段落を削除すればオブジェクトも削除されます。 アンカーの付いた段落を複写するとオブジェクトも複写されます。
Word にはスタイルなどを クリアするショートカットが いろいろあるので 覚えておくと作業が 結構スムーズになります。
次のようになります。
PHP はファイルの中身を丸ごと取得する file_get_contents() という関数があります。 この関数は http や ftp などのプロトコルを通して 外部にあるファイルも取得できるようです。
allow_url_fopen という設定が On になっていることが 前提ですが 5.3 のデフォルトでは On になっています。
allow_url_fopen という名前からもわかりますが fopen() 関数も同じ機能があります。 (というより file_get_contents() が fopen() の機能を使用しているのだと思います)
あとは次のように ファイル名の代わりに URI を指定します。
echo file_get_contents('http://www.yahoo.co.jp/');
http や ftp の他にも色々なプロトコルをサポートしています。
家のプリンターなどで印刷しているとページ順に重なってしまい 印刷後に入れ替えなくてはならないときがあります。
こんなときに 『逆順に印刷する』機能が Word には準備されています。
Word 2007 であれば 下図のように Word のオプションの「印刷」にある 「ページの印刷順序を逆にする」にチェックを入れます。
これで OK です。
自分が「う〜ん」と思うことは 他の人も思うことで、 解決策は用意されてることが多いですね。
9/17 の土曜日に大阪の梅田阪急ビルで 『スマートフォンアプリ開発の事例 〜 HTML5 開発の導入ポイント in 大阪』 というセミナがあったので行ってきました。 (#rag_tech0917)
講師は HTML5-WEST.jp 代表の村岡さんでした。
メーリングリストで紹介されてたので 行ってみたのですが、リクルートエージェントが主催のセミナでした。
リクルートエージェントといえば「転職」ですが
話を聞いてみると
今まで『今、転職する気がある人』のみを相手に仕事をしてきたのを
『今は転職する気のない人』にも知ってもらうために
このようなセミナを始めたそうです。
大阪は今回が初めてで、これからもやっていくとのことでした。
セミナの中では定型のアンケート以外は
変な勧誘もありませんでした(そこは逆にそう取られないように苦心されているようでした)。
セミナですが、技術寄りの話ではなく 「 HTML5 についてちょっとちゃんと考えてみて」というような内容でした。
体験を交えた話で 技術者も営業も技術で商売する人は 技術に浮足立ってはダメだ、という風に感じました。
他の人の実感のこもった話を聴けるのはありがたいですね。
オマケ?として紹介されていたサイトを上げておきます。
ついでに(希望者が多かったので)「 ie6 をやめる勇気をもとう」というような話も していただきました。 その時に紹介された JavaScript を上げておきます。
名刺が切れてしまって途中から交換できなくなったのと 次の予定があったので最後まで残れなかったのが残念でした。
正規表現で $ は終端ではなく行末を意味します。
たとえば次のような正規表現があります。
if (preg_match('/^abcdef$/', $value) ....
この場合、"abcdef" だけでなく "abcdef + 改行" もマッチしてしまいます。
ですので、次のような処理を書いて英小文字だけを期待しても
$input = $_GET['data']; if (preg_match('/^[a-z]+$/', $input) ....
xxxxx.php?data=abcde とかだけでなく
xxxxx.php?data=abcde%0A もマッチしてしまうわけです。 (%0A は改行)
このようなときは次のように書くそうです。
$input = $_GET['data']; if (preg_match('/\\A[a-z]+\\z/', $input) ....
[参考]
もし『よくわかるPHPの教科書』の著者が徳丸浩の『安全なWebアプリケーションの作り方』を読んだら - ockeghem(徳丸浩)の日記
ちょっとハマったのでメモを残しておきます。
PHP の header() 関数では 第 3 引数で HTTP レスポンスコードを指定することができます。
ところが次のように第 1 引数に NULL や空文字を指定すると HTTP レスポンスコードが設定されませんでした。
header(NULL, TRUE, 404); header('', TRUE, 404);
次のようなレスポンスが返ります。
HTTP/1.1 200 OK
Date: Sun, 11 Sep 2011 02:58:13 GMT
Server: Apache/2.2.14 (Ubuntu)
404 を期待しているのに 200 になってしまいます。
次のように、何か文字列を指定すれば 404 を返してくれます。
header('xxxx', TRUE, 404);
HTTP/1.1 404 Not Found
Date: Sun, 11 Sep 2011 02:59:47 GMT
Server: Apache/2.2.14 (Ubuntu)
PHP 5.3 のデフォルトでは expose_php という設定項目が On になっています。 この項目が On の場合、HTTP レスポンスヘッダに PHP のバージョンを出力します。
HTTP/1.1 200 OK
Date: Sat, 03 Sep 2011 04:24:15 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: PHP/5.3.2-1ubuntu4.9
Vary: Accept-Encoding
Content-Length: 1703
Connection: close
Content-Type: text/html
expose_php を Off にします。
HTTP/1.1 200 OK Date: Sat, 03 Sep 2011 04:26:20 GMT Server: Apache/2.2.14 (Ubuntu) Vary: Accept-Encoding Content-Length: 1703 Connection: close Content-Type: text/html
X-Powered-By の行が消えました。
Apache の設定で ServerSignature も Off にします。
HTTP/1.1 200 OK
Date: Sat, 03 Sep 2011 04:28:18 GMT
Server: Apache
Vary: Accept-Encoding
Connection: close
Content-Type: text/html
Apache のバージョンも消えました。
サーバを公開する場合、情報は少ないほうが良いですね。
Ubuntu は標準のメールサーバとして exim4 を入れることができます。 この exim4 は次のファイルに 設定内容を格納しています。
/etc/exim4/update-exim4.conf.conf (typo じゃないです) /etc/mailname
/etc/exim4/update-exim4.conf.conf には exim4 の設定内容が、 /etc/mailname には メール送信時に送信者の @ の後ろに付けるドメイン名が入ります。
$ cat /etc/mailname
example.com
ファイルの内容を修正した場合 dpkg-reconfigure を実行する以外に update-exim4.conf というスクリプトの実行で再設定することができます。
$ sudo update-exim4.conf
末尾に .conf と付いていますがスクリプトファイルです。 exim4 の設定を更新するので update-exim4.conf で その設定ファイルなので update-exim4.conf.conf なんだと思います。
Excel には次のような判定用の関数があります。
ISBLANK() や ISNA() は セルの未入力や VLOOKUP で値がとれない場合の #N/A を判定できるので 使用頻度は高いですね。
また、エラーには、#DIV/0 (0 除算) など色々ありますが 細かく分類するには ERROR.TYPE() という関数を使います。
エラー | ERROR.TYPE() の結果 |
---|---|
#NULL! | 1 |
#DIV/0! | 2 |
#VALUE! | 3 |
#REF! | 4 |
#NAME? | 5 |
#NUM! | 6 |
#N/A | 7 |
その他 | #N/A |
php5-xdebug を入れているのに 最近使っている環境では var_dump の表示が綺麗にならず(オーバーロードされず) 原因がわからなかったのですが、下記のサイトに書いてありました。
[参考]
php/インストール - zaininnari - livedoor Wiki(ウィキ)
xdebug で var_dump をオーバーロードさせるには html_errors が On になっていないとダメなようです。
html_errors は PHP_INI_ALL なので ini_set() します。
ini_set('html_errors', 1);
var_dump(array(1, 2, 3));
これで var_dump がオーバーロードされました。
PHP には最初から定義されている定数が色々あります。
たとえば実行環境にあわせた行末文字の PHP_EOL 。
echo "Hello!" . PHP_EOL;
こういうのは意外と助かりますね。
PHP のバージョンを返す PHP_VERSION とかもあります。 古いバージョンに無い関数を使うときなどに判定に使えます。
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
......
}
他にも TRUE, FALSE, NULL や、E_ALL などのエラー用の定数とかがあります。 定数で用意されているものは、定数を使いましょう。
PHP を Apache のモジュールとして実行していて 設定項目が PHP_INI_ALL か PHP_INI_PERDIR の場合 Apache の設定ファイル (httpd.conf, apache2.conf) や .htaccess に PHP の設定を記述できます。
詳しくは次の表を参照。
モード | php.ini | Apache 設定ファイル |
.htaccess | スクリプト内 ini_set() |
---|---|---|---|---|
PHP_INI_ALL | ○ | ○ | ○ | ○ |
PHP_INI_SYSTEM | ○ | ○ | ||
PHP_INI_PERDIR | ○ | ○ | ○ | |
PHP_INI_USER | ○ |
.htaccess に記述する場合 php_value と php_flag の 2 つのディレクティブを使うことができます。 php_value は論理値以外の値用で php_flag は論理値に使用します。
php_value default_charset UTF-8 php_flag html_errors on
Apache の設定ファイルに記述する場合 さらに php_admin_value と php_admin_flag の 2 つのディレクティブを使うことができます。
こちらのディレクティブで設定した場合 .htaccess や ini_set() では変更できないようになります。 PHP の設定ファイルである php.ini に記述した設定では そのようなことができないので 個々のユーザに変更されたくない サーバ全体の固い設定を作るときに良いですね。
PostgreSQL の PRIMARY KEY を削除する SQL が Oracle と違っていたのでメモ。
PRIMARY KEY の作成は PostgreSQL, Oracle, MySQL, SQLServer も同じで 次のようになります。
ALTER TABLE "テーブル名" ADD PRIMARY KEY ("キー名"...)
削除の場合は違います。 PostgreSQL と SQLServer では次のようになります。
ALTER TABLE "テーブル名" DROP CONSTRAINT "primary key 制約名"
PRIMARY KEY の作成でできた制約を削除することで PRIMARY KEY を削除します。
Oracle, MySQL は次のようになります。
ALTER TABLE "テーブル名" DROP PRIMARY KEY
こちらの方がシンプルですね。
[参考]
テーブル定義の変更(列の追加、変更、削除) - オラクル・Oracle SQL 入門
MySQLクイック・リファレンス
開発でのメモ:SQL Serverで主キーを追加するには? - livedoor Blog(ブログ)
WindowsPC に Excel が入っている場合 「ファイル名を指定して実行」に excel と入れるだけで Excel を起動することができます。
コマンドプロンプトで次のように打っても Excel が起動します。
C:\> start excel
excel.exe にパスは通っていなくても起動できる理由は レジストリに登録されているからです。
HKEY_LOCAL_MACHINE
\SOFTWARE
\Microsoft
\Windows
\CurrentVersion
\App Paths
\excel.exe
このように excel.exe が登録されています。
手動で App Paths にキーを追加して 値に実行パスを設定すれば パスが通っていなくても実行できるようになります。
nginx はコンパイル時にモジュールを指定しなくてはならないので パッケージで入れているとちょっと不便かと思ったのですが PPA で追加した場合や oneiric (Ubuntu11.10) では nginx はモジュールの組み合わせで いくつかのパッケージに分かれているようです。
nginx nginx-light nginx-full nginx-extras
nginx というパッケージを入れた場合 nginx-full になるようです。
パッケージごとのモジュールを比較してみました。
分類 | モジュール名 | Light | Full | Extras |
---|---|---|---|---|
Standard HTTP | Core | ○ | ○ | ○ |
Access | ○ | ○ | ○ | |
Auth Basic | ○ | ○ | ○ | |
Auto Index | ○ | ○ | ○ | |
Browser | - | ○ | ○ | |
Charset | ○ | ○ | ○ | |
Empty GIF | ○ | ○ | ○ | |
FastCGI | ○ | ○ | ○ | |
Geo | - | ○ | ○ | |
Gzip | ○ | ○ | ○ | |
Headers | ○ | ○ | ○ | |
Index | ○ | ○ | ○ | |
Limit Requests | - | ○ | ○ | |
Limit Zone | - | ○ | ○ | |
Log | ○ | ○ | ○ | |
Map | - | ○ | ○ | |
Memcached | - | ○ | ○ | |
Proxy | ○ | ○ | ○ | |
Referer | - | ○ | ○ | |
Rewrite | ○ | ○ | ○ | |
SCGI | - | ○ | ○ | |
Split Clients | ○ | ○ | ○ | |
SSI | - | ○ | ○ | |
Upstream | ○ | ○ | ○ | |
User ID | ○ | ○ | ○ | |
UWSGI | - | ○ | ○ | |
Optional HTTP | Debug | - | ○ | ○ |
WebDAV | - | ○ | ○ | |
Flash Streaming Video | - | - | ○ | |
GeoIP | - | ○ | ○ | |
Gzip Precompression | ○ | ○ | ○ | |
Image Filter | - | ○ | ○ | |
RealIP | - | ○ | ○ | |
Stub Status | - | ○ | ○ | |
XSLT | - | ○ | ○ | |
IPv6 | ○ | ○ | ○ | |
Embedded Perl | - | - | ○ | |
Secure Link | - | - | ○ | |
Random Index | - | - | ○ | |
Addition | - | ○ | ○ | |
Mail Core | - | ○ | ○ | |
POP3 | - | ○ | ○ | |
IMAP | - | ○ | ○ | |
SMTP | - | ○ | ○ | |
SSL | - | ○ | ○ | |
Third Party | Upstream Fair Queue | - | ○ | ○ |
Echo | ○ | ○ | ○ | |
Embedded Lua | - | - | ○ | |
Nginx Development Kit | - | - | ○ | |
Other | File AIO | - | - | ○ |
とりあえずメモ。
PHP の 1 行コメントには # と // の 2 種類があります。
# どちらもコメント // こちらもコメント
Perl などで # のコメントに馴染んでいたり PHP でバッチ処理を作ったときに Bash などと同様に # で コメントアウトできるのはありがたいですね。
Linux には ファイルのステータスを表示する stat というコマンドがあります。
$ stat /var/log/user.log
File: `/var/log/user.log'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 157223 Links: 1
Access: (0640/-rw-r-----) Uid: ( 101/ syslog) Gid: ( 4/ adm)
Access: 2011-02-03 10:18:03.000000000 +0900
Modify: 2011-02-03 10:18:03.000000000 +0900
Change: 2011-06-28 18:30:39.000000000 +0900
ファイルの最終アクセス日時まで取得できます。
ちなみに Access が最終アクセス日時、 Modify が最終変更日時、 Change が権限などの最終変更日時です。
ファイルの情報を取得するコマンドに file というのもありますが こちらはファイルタイプを表示します。
Ubuntu では root を使わずに sudo することになるのですが デフォルトでは 1 度 sudo してから 5 分 sudo しないと 再度パスワードの入力を求められます。
通常はそれで良いのですが まとまった作業をしているときなどは もう少し長くしたいときがあります。
sudo の設定は /etc/sudoers を visudo コマンドで編集するのですが
Ubuntu10.04 だとエディタは nano が起動するので env で環境変数を変えて vi にします。
(これは私が nano を使えないからです・・・)
$ sudo env EDITOR=/usr/bin/vi visudo
元々ある Defaults の下辺りに追加します。
Defaults env_reset ←既存
Defaults timestamp_timeout = 20 ←追加
これでタイムアウトまでの時間が 20 分になりました。
Defaults はカンマで区切って 1 行で書いても OK です。
Defaults env_reset, timestamp_timeout = 20
前に PPA を使って nginx (1.0.5) を Ubuntu10.04 に入れたときの configure の内容を 書きましたが、 PPA を使わない nginx 0.7.65 の内容も書いておきます。
$ nginx -V
nginx version: nginx/0.7.65
TLS SNI support enabled
configure arguments:
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--pid-path=/var/run/nginx.pid
--lock-path=/var/lock/nginx.lock
--http-log-path=/var/log/nginx/access.log
--http-client-body-temp-path=/var/lib/nginx/body
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--with-debug
--with-http_stub_status_module
--with-http_flv_module
--with-http_ssl_module
--with-http_dav_module
--with-http_gzip_static_module
--with-http_realip_module
--with-mail
--with-mail_ssl_module
--with-ipv6
--add-module=/build/buildd/nginx-0.7.65/modules/nginx-upstream-fair
こちらもメモ。
PostgreSQL の SEQUENCE には CACHE という設定があります。 (Oracle などにもあります)
この機能は高速化のためのもので、事前に SEQUENCE をまとめて 取得しておき、大量に SEQUENCE を発行するときに 何度も SEQUENCE を更新しないようします。
実際の動きを見てみます。
db=# CREATE SEQUENCE test_seq CACHE 3;
CACHE のみ設定して(他はデフォルトで)作成しました。
下のように設定されています。
db=# SELECT last_value, cache_value FROM test_seq; -[ RECORD 1 ]-- last_value | 1 cache_value | 3
nextval() で値を取得します。
db=# SELECT nextval('test_seq'); → 1 が返る
SEQUENCE は次のようになります。
db=# SELECT last_value, cache_value FROM test_seq; -[ RECORD 1 ]-- last_value | 3 cache_value | 3
1 回しか nextval() していませんが last_value は 3 になっています。 これは 1 を取得したときに 2, 3 をキャッシュとして取得しているためです。
もちろん nextval() を続ければ 2, 3 を取得できます。
db=# SELECT nextval('test_seq'); → 2 が返る db=# SELECT nextval('test_seq'); → 3 が返る
これでキャッシュした分を使い切ってしまったのですが さらに nextval() してみます。
db=# SELECT nextval('test_seq'); → 4 が返る
この状態で SEQUENCE は次のようになります。
db=# SELECT last_value, cache_value FROM test_seq; -[ RECORD 1 ]-- last_value | 6 cache_value | 3
このように、キャッシュを使い切ると新しくキャッシュを取得しなおします。 デフォルトでは CACHE が 1 なので取得するごとにキャッシュを使い切っているわけです。
キャッシュはセッション内でのみ有効です。 この状態は、このセッション以外からは 6 まで使用済みとして扱うため 別のセッションで nextval() すると次のように 7 が返ります。
[別セッション] db=# SELECT nextval('test_seq'); → 7 が返る [このセッション] db=# SELECT nextval('test_seq'); → 5 が返る
そのためキャッシュを使用すると SEQUENCE の値が時系列に 並ばないことがあるので注意が必要です。
Bash の 変数展開には結構種類があります。
よく使うのは次の「文字列の末尾から最短マッチさせて削除」で 「ファイルの拡張子」の削除です。
$ ls *.txt | while read FILE > do > echo ${FILE%.txt} > done
"${FILE%.txt}" の部分が変数展開です。 これで ls コマンドで .txt のファイルだけを取得して ファイル名から .txt を削除した部分を出力することができます。
変数展開には次のようなものがあります。
${変数:+文字列} | 変数が存在し空でなければその文字列、それ以外なら空 |
---|---|
${変数:-文字列} | 変数が存在し空でなければその値、それ以外なら文字列 |
${変数:=文字列} | 変数が存在し空でなければその値、それ以外なら変数に文字列を設定 |
${変数:?文字列} | 変数が存在し空でなければその値、それ以外なら文字列を出力して終了 |
${変数:位置} | 位置から末尾までの部分文字列 |
${変数:位置:長さ} | 位置から長さ分の部分文字列 |
${変数#パターン} | 変数の先頭がパターンマッチした場合、最短マッチ部分を削除 |
${変数##パターン} | 変数の先頭がパターンマッチした場合、最長マッチ部分を削除 |
${変数%パターン} | 変数の末尾がパターンマッチした場合、最短マッチ部分を削除 |
${変数%%パターン} | 変数の末尾がパターンマッチした場合、最長マッチ部分を削除 |
${変数/パターン/文字列} | 最初にパターンマッチした部分を文字列で置換 |
${変数//パターン/文字列} | パターンマッチしたすべての部分を文字列で置換 |
Bash だけでも色々なことができます。
nginx (1.0.5) を Ubuntu10.04 に入れたときの configure の内容です。
nginx は動的にモジュールの設定ができず configure で指定するしかないそうなので パッケージで入れる場合 どういう設定になっているかは重要ですね。
"-V" オプションで詳細を見ることができます。
$ nginx -V
nginx: nginx version: nginx/1.0.5
nginx: TLS SNI support enabled
nginx: configure arguments:
--prefix=/etc/nginx
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-log-path=/var/log/nginx/access.log
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi
--lock-path=/var/lock/nginx.lock
--pid-path=/var/run/nginx.pid
--with-debug
--with-http_addition_module
--with-http_dav_module
--with-http_geoip_module
--with-http_gzip_static_module
--with-http_image_filter_module
--with-http_realip_module
--with-http_stub_status_module
--with-http_ssl_module
--with-http_sub_module
--with-http_xslt_module
--with-ipv6
--with-sha1=/usr/include/openssl
--with-md5=/usr/include/openssl
--with-mail
--with-mail_ssl_module
--add-module=/build/buildd/nginx-1.0.5/debian/modules/nginx-echo
--add-module=/build/buildd/nginx-1.0.5/debian/modules/nginx-upstream-fair
とりあえずメモ。
PostgreSQL の SEQUENCE に値を設定するには ALTER SEQUENCE と setval() の 2 つの方法があります。
さらに setval() には 引数が 2 つのものと 3 つのものがあります。 それぞれの実行結果を見ていきます。
まず ALTER SEQUENCE 。
db=# ALTER SEQUENCE test_sequence RESTART WITH 1;
このとき、内部の値は次のようになっています。
db=# SELECT last_value, is_called FROM test_sequence; -[ RECORD 1 ]-- last_value | 1 is_called | f
last_value が RESTART WITH で設定した 1 になり、 is_called が f (偽) になります。
is_called というのは last_value が既に呼ばれたかどうかのフラグで is_called が偽であれば まだ呼ばれていないので nextval() したときに last_value の 1 を返します。
次に 引数が 2 つの setval() です。
db=# SELECT setval('test_sequence', 1);
このとき、内部の値は次のようになっています。
db=# SELECT last_value, is_called FROM test_sequence; -[ RECORD 1 ]-- last_value | 1 is_called | t
引数が 2 つの setval() では last_value は同じですが is_called が t (真) になりました。 last_value の 1 は既に呼ばれているという内容なので この場合 nextval() したときに 1 + increment_by (デフォルト 1) を返します。
同じように 1 を設定しても ALTER SEQUENCE と 引数が 2 つの setval() では 次に返す値が変わってしまいます。
そこで 引数が 3 つの setval() の出番になります。
db=# SELECT setval('test_sequence', 1, false);
上のように 引数が 3 つの setval() では 第三引数で is_called の値を指定することができます。
これで ALTER SEQUENCE したときと同じになります。
db=# SELECT last_value, is_called FROM test_sequence; -[ RECORD 1 ]-- last_value | 1 is_called | f
SEQUENCE はデータの一意性を守ってくれる大事な機能なので 移行時などにずれてしまわないよう注意が必要です。
nginx という Web サーバが かなりキてるということなので さっそくインストールしてみました。
[参考]
NginxJa - nginx
ちなみに「エンジンエックス」と読むそうです。
Ubuntu にはパッケージが用意されているので 普通に apt-get でインストールすることができます。
$ sudo apt-get install nginx
11/08/22 時点では ver 0.7.65 が入りました。
上記サイトを参考に もっと新しいバージョンを入れてみます。 以下のコマンドで lucid 版の PPA を追加してインストールします。
$ sudo sh -c "echo deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main > /etc/apt/sources.list.d/nginx-stable-lucid.list" $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C $ sudo apt-get update $ sudo apt-get install nginx
11/09/01 時点では ver 1.0.5 が入りました。