Hatena::ブログ(Diary)

130単位

2008-10-30

smbldap ユーザー追加/削除コマンド

なにやらLDAPというのでユーザーとその認証データを管理しているらしいです。sambaとかも絡んでいたりして、ちょっと自分が理解するのには相当な時間がかかりそうです。

とりあえず環境は既にできていて、ユーザーの追加と削除をおこなったので、そのメモ。

【追記 09/07/14】ユーザー確認を追加

コマンド

ユーザー追加
# smbldap-useradd -a -m -F "" [ユーザー名]

※使ったオプション
  -a    is a Windows User (otherwise, Posix stuff only)
  -m    creates home directory and copies /etc/skel
  -F    sambaProfilePath (profile directory, like '\\PDC-SRV\profiles\foo')
パスワード設定
# smbldap-passwd [ユーザー名]
Changing UNIX and samba passwords for [ユーザー名]
New password: [パスワード入力]
Retype new password: [パスワード入力]
ユーザー確認
# smbldap-usershow [ユーザー名]
ユーザー削除
# smbldap-userdel [ユーザー名]

参考リンク

Windowsネットワーク用統合認証サーバー構築(OpenLDAP+Samba) - Fedora自宅サーバー構築
http://fedorasrv.com/openldap.shtml

[Asianux3]smbldap-toolsでSambaの認証データをLDAPに格納|Server OS Cafe
http://ameblo.jp/serveroscafe/entry-10055658397.html

2008-10-26

ゆるキャラまつりに行ってきた

ゆるキャラまつりin彦根〜キグるミさみっと 2008〜
http://kigurumi.shiga-saku.net/

2日前に突然誘われ、JRではるばる彦根へ。

yuruchar_01

ゆるキャラたち

なーむくん

yuruchar_02

あおいくん

yuruchar_04

いしだみつにゃん

yuruchar_06

茶々姫

yuruchar_08

とらにゃん

yuruchar_11

ひこちゅう

yuruchar_12

でんのすけ&じーも

yuruchar_13

さばトラななちゃん

yuruchar_20

せんとくん

yuruchar_29

yuruchar_31

yuruchar_32

ひこにゃん

yuruchar_34

yuruchar_35

yuruchar_41

yuruchar_43

感想

あくまで着ぐるみではあるんですが、実際に動いている姿はなんだか愛らしくて。来場した誰もが親しくふれあうことのできる、不思議なあたたかい空間がそこには存在してました。

想像以上に楽しかったです。

リンク

ほかの写真はFlickrでどうぞ。

kigurumi summit 2008 - a set on Flickr
http://www.flickr.com/photos/28855912@N04/sets/72157608370747286/

毎日新聞の記事。写真たくさん。

ゆるキャラ:全国の46体集合 「せんとくん」「なーむくん」も共演 ゆるキャラまつり - 毎日jp(毎日新聞)
http://mainichi.jp/kansai/graph/20081025/

*1:ステージでのPRタイムは通りが人で埋まってました

*2彦根城でのショーにものすごい行列ができてました

2008-10-23

Yahoo!ウィジェットでJSON

Yahoo!ウィジェットの開発で、Webを介したJSONの読み込みを以下のようにやっていました。

var obj = eval('(' + contents + ')');

そしたら申請が下りませんでした*1。以下、審査結果メールより抜粋。

■掲載を見送らせていただく代表的なケース

(中略)

(例2)インターネットを通して外部から取得したJavaScriptのコードを使用している

インターネットを通じて外部から取得したJavaScriptのコードを、そのままeval,include

しないようご注意ください。

外部から取得したJSON文字列を使用する場合は、evalを使用せずに、ウィジェットエンジン4.5

から追加されたJSON.parseを使用してください。詳細は、リファレンスガイドのJSONの項を

ご確認ください。

リファレンスガイドを確認してみます。

JSON

エンジンは、バージョン4.5以上では、JSONエンコードおよびデコードをサポートしています。

JSON.stringifyおよびJSON.parseの2つのAPIが使用可能です。これらのAPIは、パブリックドメインJSONオブジェクトを使用して実装しています。

Yahoo!ウィジェットエンジン リファレンスガイド - Yahoo!ウィジェット - 開発ツール

以下のように変更してみました。

var obj = JSON.parse(contents);

すると、エラーが生じてしまいました(以下はデバッグモードでの表示)。

ReferenceError: JSON is not defined

動作確認したウィジェットエンジンのバージョンは4.5.3なのですが、どうもJSONオブジェクトが存在していないみたいです。ほかの人のマシンでも同様の現象が起きていました。

前の記事で、json.jsを使うとfor inで問題が起きることを取り上げました。Yahoo!ウィジェットエンジンのバージョン4.5が公開されたのが「2008年6月10日(火)」。で、json.jsの最終更新が「2008-05-25」となっている*2ので、もしかしたら何か関連していたりするのかもしれません。

仕方がないので、ライブラリ配布元からDLしたjson2.jsウィジェットに同梱してインクルードするようにして対応したのでした。

include("js/vendor/json2.js");

(※注)まだ修正後の申請が通るかは定かではありません。

関連記事:

json.jsとjson2.jsの違い - 130単位

*1:却下理由は具体的には明記されないため、これ以外が原因の可能性もあり

*2json.js→json2.jsになったのは正確にはわかりません

2008-10-22

json.jsとjson2.jsの違い

JavaScriptのとあるコードの修正において、JSONの受け渡しでevalの使用をやめようとした*1ときに調べたメモ。

JSON in JavaScript
http://www.json.org/js.html

http://www.json.org/json2.js

これがメジャーなライブラリのようです。

ふとファイル名の「2」に疑問を持って「json.js」に変えてみたら、そちらも落とせました。で、最初にjson.jsを使ってみたら思うように動きませんでした。json2.jsに変更してみたところ、正常に動きました。

json2.jsには無くて、json.jsのみに存在するのが以下のコード。これが原因だったようです。

if (!Object.prototype.toJSONString) {
    Object.prototype.toJSONString = function (filter) {
        return JSON.stringify(this, filter);
    };
    Object.prototype.parseJSON = function (filter) {
        return JSON.parse(this, filter);
    };
}

調べていた中で見つけたmalaさんの記事で理解することができました。

まず、Object.prototypeにメソッドを生やしてしまうとfor inでキーを列挙するときにいちいちhasOwnPropertyを使わないといけなくなるので普通は使いません。影響が大きすぎるので、よっぽど変態的なライブラリじゃないと使わない。

最速インターフェース研究会 :: JavaScriptにおけるdeep clone

実際にfor inを使っていて、そこで追加されたメソッドの分も回ってしまっていたために動きがおかしくなっていました。

json.jsの中をもう一度詳しく見てみると以下のようなコメントが。

52行目

    This file will break programs with improper for..in loops. See
    http://yuiblog.com/blog/2006/09/26/for-in-intrigue/

523行目

// Augment the basic prototypes if they have not already been augmented.
// These forms are obsolete. It is recommended that JSON.stringify and
// JSON.parse be used instead.

プログラムがおかしくなるかも」とか、「このやり方は時代遅れだ」とか書かれているようです。

というわけで、現状json.jsへのリンクは生きているみたいですけど、よほどのことがない限りは通常のリンク通りにjson2.jsを使うようにしたほうが良さそうです。

*1:好ましくないとされているため

2008-10-21

「上長」という言葉を知る

上長とは - はてなキーワード
http://d.hatena.ne.jp/keyword/%BE%E5%C4%B9

上司のことを指すらしいです。

面接に来られた方がお話の中で何度か発していたため、気になって思わず聞いてしまいました。


数年ほどアメリカ在住経験がおありのようです。印象に残ったのが、アメリカでは小さなことでもとにかく褒める、ということ。もちろん、評価も厳しく下すそうですけど。なんでもオープンにするという自由な感覚がそうさせているのでしょう。人を褒めて伸ばす、そういう雰囲気づくりをしていきたい、なんてことを話していただけました。

現在の自社にはいないタイプの独特な存在感で、異質でありながらも非常に前向きな影響を与えてくれるような気がしています。仕事に対する姿勢を改めなおし、ともに成長していければと思います。

2008-10-20

「キャレット」という言葉を知る

なんか、Firefoxで閲覧中にでっかいカーソルが出たりするようになってました。

f:id:deeeki:20081020174344j:image:w320

firefox カーソル 点滅」でググってみると、OKWaveとかで似たような質問が。キーボードでの文字列選択可能な「キャレットブラウズモード」というのになっていたのが原因らしいです。

モードの切り替えはF7キーで行われるようで、押したら普通に閲覧できるようになりました。

参考

Mozilla Re-Mix: Firefoxをキャレットブラウズモードに切り替えれば、エディタのようにキーボードでテキスト選択ができます。
http://mozilla-remix.seesaa.net/article/68176361.html

キャレット (caret)とは: - IT用語辞典バイナリ
http://www.sophia-it.com/content/%E3%82%AD%E3%83%A3%E3%83%AC%E3%83%83%E3%83%88

2008-10-17

Tera Termで鍵認証サーバへ自動ログイン

Tera Termを使っていますが、公開鍵/秘密鍵による認証のみ許可している開発用のサーバがあって、毎回公開鍵を指定するのが面倒になってきたので、何か自動化できるような方法がないものか調べてみました。

teraterm(ssh2対応) + 公開鍵認証 - Charly's notepad
http://www.erde.co.jp/~katsu/wiki/index.php?teraterm%28ssh2%C2%D0%B1%FE%29%20%2B%20%B8%F8%B3%AB%B8%B0%C7%A7%BE%DA#l15c65cd

TeraTerm Menu」というソフトで解決できるようです。「Tera Term」と同じディレクトリインストールされるようですが、自分の環境では存在しませんでした。

インストールしてみて原因がわかりました。インストール時に「標準インストール」ではなく「フルインストール」を選択する必要があったみたいです。

f:id:deeeki:20081017191204j:image:w320

f:id:deeeki:20081017191205j:image:w320

あとは上記ページの手順通りに設定したところ、スムーズな自動ログインが行えるようになりました。


なお「フルインストール」では、複数起動したTera Termをタブで切り替えられる「Collector」というソフトもインストールされます。画面キャプチャなどは下記ページで確認できます。

Cygterm + Collector でリッチな CUI 環境 - バキュラのように・・・
http://d.hatena.ne.jp/hnamaizawa/20070717/p1

2008-10-16

mp3ファイルを編集するフリーソフト

wmaからmp3へ変換するフリーソフト - 130単位

の続き。少しでも聞きやすいものにするため、編集を行います。

編集ツール

前後の不要部分を除去する場合は、開始位置と終了位置を決めて「Crop」後、保存でいけました。

音量調整ツール

ファイル自体の音量が小さい気がしたので、上げることに。61dbくらいだったのをデフォルトの設定値である89dbへ上げてみたところ、それなりに大きく聞こえるようになりました。ちなみに、上で紹介した「mp3DirectCut」でも調整は行えるようです。

ファイル情報取得ツール

編集ではないですが、ついでに。メディアファイルの音質などの詳細情報を知るのに大変便利です。

2008-10-15

wmaからmp3へ変換するフリーソフト

【追記ここから 09/07/09】

DL先としてリンクしていたhttp://cowscorpion.com/につながらなくなっているようですので、新たなリンク先を加えておきました(広告バナーリンクにご注意ください)。

また、SUPER ©はマルウェアの可能性があるようで、以前のバージョン(2008 build 33)はセキュリティソフトのCOMOD Internet Securityで検出対象になっていました。現バージョン(2009 build 36)は問題ありませんでしたが、情報のひとつとして認識した上でソフトをお試しいただければと思います。

【追記ここまで】


shigeo氏ICレコーダーを借りて、自社勉強会の録音をしました。録音後、メモリの中身を見てみたらwmaファイルが入っていました。

で、Web上で公開するんだったらなんとなくmp3のほうがいいんじゃないかと思い、変換ツールを探すことに。

変換ツール

感想

最初は機能がシンプルそうだった「Free WMA to MP3 Converter」を使ってみました。が、変換後にノイズが入ってしまいました。

次に試したのは、なんか似た感じのソフト「Free MP3 WMA WAV Converter」。ノイズは生じなかったのですが、変換中の進捗状況でなぜか「-10%」とか出たりして分かりづらかったです。

最後に、何でも変換できるという「SUPER ©」を。初期画面がごちゃごちゃしていますが、選んだフォーマットによって自動的に設定項目の表示が切り替わるので、慣れれば問題ないかと思います。こちらは、ノイズも表示のバグもなく無事に変換されました。

補足

いちおう、変換元ファイル情報を載せておきます。上記の感想で起こった現象は、このファイルから44.10kHz/32kbpsのmp3への変換を試みたときのものになります。

Windows Media Audio V8 44.10kHz 16Bit 1ch 32.02kb/s
[WindowsMedia] 01:06:05.000 (3965.000sec) / 16,184,836Bytes

2008-10-14

Subversion Windows上で大量ファイルを扱う際のフリーズ回避法

Windows上でTortoiseSVNを使っていて、インポートコミットなどで大量のファイルを扱った際に、PCがフリーズすることが何度かありました。どうしたもんかと思って先輩に聞いてみると、「私もなるけど、まぁちょっとずつコミットすればいいんじゃない」とのこと。んー、でもそれではやっぱり非効率なので、何かいい方法がないものか調べてみました。

みけメモ: TortoiseSVNマルチコアCPU上で動かすと止まる???
http://mikememo.cocolog-nifty.com/blog/2008/03/tortoisesvnga.html
low level life - Subversion (※下のほうの記事)*1
http://www.lowlevellife.com/?s=Subversion

2番目の記事の、

でも、コマンドラインsvnと直接やりとりすると大丈夫だった。

ってのがもっとも手短な解決方法のように思えましたので、早速実践。

svnコマンドの確認

コマンドプロンプトを起動し、「svn help」など打ってみてsvnコマンドが使えるか確かめます。

C:\>svn help
'svn' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

こんなのが出た場合は、以下サイトからWindows用の「CollabNet Subversion」をダウンロード

subversion.tigris.org
http://subversion.tigris.org/

インストール後、実行ファイルを環境変数のPathに設定します*2

C:\>svn help
usage: svn <subcommand> [options] [args]
Subversion command-line client, version 1.5.2.

...

こんな感じで出れば大丈夫。

コマンド実行例

インポートコマンドを実行してみた例です。

C:\test>svn import http://192.168.0.*/svn/test
svn: Could not use external editor to fetch log message; consider setting the $S
VN_EDITOR environment variable or using the --message (-m) or --file (-F) option
s
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and
 no 'editor-cmd' run-time configuration option was found

エラーになりました。ログメッセージを指定しないとだめなようです。

C:\test>svn import http://192.168.0.*/svn/test -m "import test."
Adding         test.txt

Committed revision 1.

引数「-m」で指定してやればOK。

実際に大量のファイル*3インポートしてみたところ、別作業を行いながらでもフリーズすることなく一発で済みました。

補足

↑の実行例ででエラーになったのは、厳密には、「ログメッセージが指定されてないので、メッセージ入力用の外部エディタを開こうとしたけど開けなかった」というものみたいです。

「C:\Documents and Settings\[username]\Application Data\Subversion\config」をエディタで開き、helperのセクション(27行目くらい)を以下のように変更します。

# editor-cmd = %SystemRoot%\system32\notepad.exe

editor-cmd = %SystemRoot%\system32\notepad.exe

これでメッセージなしの場合であっても、メモ帳が開いて処理が続くようになります。

参考
Windows環境にCUISubversion(svn)をインストールするメモ - Knowledge Database IT
http://it.kndb.jp/entry/show/id/1084

関連記事:

Subversion Windows上からサーバへのインポート - 130単位

*1パーマリンクが使えなかったのです

*2:システムのプロパティ→詳細設定→環境変数

*3:約8200ファイル

2008-10-13

アマチュアの将棋大会を観てきた

f:id:deeeki:20081013232735j:image:w240

とある縁から、朝日アマ名人戦の予選(とそれに付随する大会)を観戦しに行ってきました。なにもかもが初体験だったわけですが、以下ど素人目線での感想など。

わかったこと

  • ルール
  • 運営の先生に対局相手を告げられると、適当な位置に座って対局開始
  • 盤は緑のゴムボードが使われる
  • 時間の計測はチェスクロックが使われる
    • 1手指したら自分側のボタンを押す*3
    • 秒読み、残り5秒からは連続音が鳴る
  • 小学生と大人がふつうに指している
  • 小学生同士の対局はめっちゃ早く終わる
  • 短いながらもしっかり勝負所の感想戦が行われる

なぜか対局

しばらく観戦してたら、突然知らないおじいさんに「ワシと将棋やらん?」と話しかけられました。戸惑いながらも自由対局スペースへ移動して、ほんとに対局することに。

  • 1局目 → やや劣勢から逆転勝利
  • 2局目 → 序盤で失敗して負け
  • 3局目 → また序盤で失敗し、そこからもつれて、最後は詰みがあったものの逃して負け

実戦なんてごくたまに友人と指すくらいなのですが*4、それなりの勝負ができたことが単純にうれしかったです。ちなみにおじいさんは3局とも初手5六歩中飛車。自分の"型"を貫き通すのが流石です。

で、なんやかんや手配していただいて、なんと小学生の子とも対局することに。とりあえず四間飛車で美濃に組んでみたものの、ふつうに定跡知らなくて一気に形勢傾いて負け。感想戦で正しい手順を教えていただきました。にしても、ちゃんと有利不利の説明までできているのがスゴいと思います。


その後、朝日アマ名人戦のほうで元アマ名人の方の将棋を観戦したりして、夕方頃に会場を後に。

新しい世界に触れ、いい刺激になりました。きっかけをくださったkashimaさん、ありがとうございます。


関連記事:

JT将棋日本シリーズ二回戦第二局 封じ手を振り返る - 130単位

*1:代表へは確か5・6勝必要

*2:勝者同士、敗者同士の組合せで4回対局する

*3:ちなみに開始時は後手がまずボタンを押す

*4:それも相当ぬるい対局

2008-10-11

PHPでオブジェクトをセッションへ格納するには

PetitworkというPHPフレームワークでは、値の受け渡しの際などにValueObject*1を主に使っています。で、それをセッションに格納しようとして、試したり調べてみたりしたメモ。

そのまま格納すると

まず、そのままではセッションに格納はできるのですが、読み込んだあとにうまく扱えません。var_dumpで中を覗いてみると、「__PHP_Incomplete_Class」とでます。値も確認できるのですが、アクセスしようとするとNULLが返ってきてしまいます。どうやらセッション開始前にクラス定義がされていないとだめらしいです。

PHP: オブジェクトシリアル化 - セッションでのオブジェクト - Manual
http://php.benscom.com/manual/ja/language.oop.serialization.php

あーありがち - __PHP_Incomplete_Class を防ぐ富豪アプローチ
http://aligach.net/diary/20070426.html

オブジェクトシリアル化 - え〜ちゃんのブログ
http://a-chan.com/blog/2008/02/post.html

シリアル

というわけで、クラス定義をしないで汎用的に扱うには、シリアル化(serialize())してから格納しないといけません。読み込んだあとにunserialize()してやれば、普通に使うことが可能になります。

と、ここで頭に浮かんだのが、似たようなかたちでJSON形式に変換する「json_encode() / json_decode()」の存在。実際に試してみたところ、問題なく動作しました。

ではseriarize()とjson_encode()では、どちらを使ったらいいのでしょうか。ググってみたら、そのものずばりの記事がでてきました。

zuzara : PHP5.2.0でserialize()とjson_encode()はどちらが速いのか
http://blog.zuzara.com/2006/12/22/175/

「結論としては速度はほぼ同じ。」とのことです。ただし留意点もあったりするので、詳しくは元記事をご確認ください。

シリアル化比較

調べた情報をもとに、それぞれ特徴をまとめると以下のようになるかと思います。

  • serialize() / unserialize()
  • json_encode() / json_decode()
    • PHP 5.2.0以降で利用可能
    • JavaScriptでそのまま使える
    • 配列の階層が深くなると処理が落ちる

利用環境が5.2.0以降で確定しているのならば、JSON形式を使うのが良さそうな気がします。

2008-10-09

SEまんがの傑作を読む

Dr.きたみりゅうじのSE業界ありがち勘違いクリニック リターンズ (講談社BIZ)
『Dr.きたみりゅうじのSE業界ありがち勘違いクリニック リターンズ (講談社BIZ)』


なぜかわかりませんが、茶太郎兄さんが自分で読む前に貸してくれました。

Webでの記事掲載時にも読んでいたりしましたし、ほとんどのテーマはなんとなくわかるなぁと共感することが多かったです。また、読者からの反応がテーマ毎にいくつか掲載されており、新たな発見もあったりしました。

以下、大きな文字の部分から適当に引用。

  • 増やすは簡単、減らすは難しいの法則
  • 否定は肯定よりも安全なのだ
  • 診て即わかるほどに、単純なものはなし
  • 極論は、どっちに転んでも害ばかり
  • 保証は検証とワンセットなのです
  • ムダな連帯責任は大キライ
  • 楽して身につくワザなし

IT未経験にもかかわらず成長著しいちっちゃくさんも読んでみるといいんじゃないかと思います。

関連リンク

タイムリーなことに、新しいレポート記事が公開されていました。viaまなめはうす

IT業界って、ブラックな噂が多いよね?/Tech総研
http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001190

キタ印工房
http://www.kitajirushi.jp/

レポートにて「客先と自社が半々くらいが楽(しい)」というのがありましたが、非常にわかる気がします。

2008-10-08

html metaタグのkeywordsとdescription

検索結果でウェブページの表示順序を上げるには - インフォセンター - Yahoo!検索 http://info.search.yahoo.co.jp/archives/002872.php

前の記事でも書いたWebサイト制作案件にて、多少のSEO対策はしておきましょうということになって、上記ページなんかを読んだりしていて、ふと疑問に思ったこと。

  • <meta>タグのhttp-equiv属性とname属性はどう違うのか?
  • 属性値「keywords」や「description」はname属性で使うのが正しいのか?

で、調べてみました。その中から説明つきで分かりやすかったものを引用させていただきます。

<meta name="Keywords" content="ホームページの検索キーワード" lang="ja">

検索エンジン(サーチエンジン)の検索したときのキーワードとして使用されます。カンマ区切りで複数記入できます。表記内容はそのまま拾ってくれるロボットが多いようです。META要素でlang属性を指定しておくと、content属性値の言語を指定できます。

<meta name="description" content="ホームページの紹介文">

検索エンジンに対してホームページ内容紹介を表記しておきます。表記内容をそのまま拾ってくれる親切なロボットも多数あります。

METAタグリファレンス

調べたどのページにも共通して書かれていたことから、「keywords」や「description」はname属性で使うのが正しいようでした。また、SEO効果についてはページによって様々な解釈だったりしましたが*1、書いておいて損はないというくらいの認識でいいのではないかという気がしました。


【2008/10/21 追記】XHTMLではmetaタグは末尾で閉じる(「..." />」)必要があります。

参考リンク

HTML - meta タグの仕様詳細まとめ :: Drk7jp
http://www.drk7.jp/MT/archives/001311.html

W3C HTML4入門編
http://yaplog.jp/html4/category_4/

HTMLの書き方についてです。metaのkeywordsとdescriptionについてです。 .. - 人力検索はてな
http://q.hatena.ne.jp/1221997473

metaタグのプロパティ、'name'と'http-equiv'の違いはなんなのでしょうか。... - Yahoo!知恵袋 
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1019259200

*1:keywordsの数は5〜6つまで良いらしい、けどコードの例としては3つが多かったり

2008-10-07

html IE6でCSS未適用ページが一瞬表示される問題への対処

あるWebサイト製作案件にて、納品の最終段階で嵌ったことのメモ。

現象

IE6で、各ページ描画の際にスタイル未適用のページが一瞬表示される

原因をさぐる

元々以下のようなhtmlでスタイル適用がなされていました。

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css" media="all">
@import url("base.css");
@import url("top.css");
</style>
</head>

おそらくDreamweaverで制作時に自動生成されたものだと思われます*1。動作確認にはFirefoxをメインにしていたこともあって、特に問題には気づかず普通に作業していました。

で、いざ本番のサーバにアップしたところ、問題発覚。本番環境へ移った際にhtaccessファイルでドメインのアクセス制限をかけたので、最初はもしかしたらそれが原因かと思いました。が、どうも違うようでした。さらにPCによってはIE6でも普通にページ閲覧可能だったりしたため、キャッシュが影響しているような気もしましたが、いまいちよくわかりませんでした。

ちなみに、スタイル記述箇所を「<!--」〜「-->」で囲っても、また以下の文を<head>タグ内に追記しても現象は変わりませんでした。

<meta http-equiv="Content-Style-Type" content="text/css; charset=UTF-8" />

解決法

htmlで直接「@import」を使わず、<link>タグを用いると問題が起きなくなります。具体的には、top.css に「@import url("base.css");」という記述を追加して、htmlを以下のようにしました。

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="top.css" type="text/css" media="all" />
</head>

この現象について解説してくれているサイトより引用。

IEでのFlash of Unstyled Content(フラッシュ・オブ・アンスタイルド・コンテント)を防ごう

外部スタイルシートを使う際、@importのみに依存していると、IECSSを適用する前にプレーンでフォーマットされていないHTMLを一瞬表示することにそのうち気づくでしょう。これは防ぐことができます

no title

というわけで、CSSは外部ファイルを利用し、link要素で指定するのが良いようです。

参考リンク

RedLine Magazine : FOUC 
http://redline.hippy.jp/lab/css/fouc.php

Stylesheet Stylebook:CSSカンニングペーパーhttp://www.stylesheet-stylebook.com/archives/000041.php

[CSS]CSSの適用方法 | コリス
http://coliss.com/articles/build-websites/operation/css/223.html

*1:自分は途中から案件に入ったのです

2008-10-06

PostgreSQL ALTER TABLEを使わないカラム追加手順

testtable
column_A,column_B,column_C

こんなテーブルがあって、既にいくつかデータが入っている。で、新たにカラムを追加したいんだけど、途中のcolumn_Bとcolumn_Cの間に追加したい。でも「ALTER TABLE」だと末尾にカラムができてしまうので、それは避けたい。

そんな場合で、pgAdminの機能を使ったりせずにSQLのみでカラム追加を行う手順。

--1.元テーブルからバックアップ用テーブルを作成
CREATE TABLE testtable_bak AS (
  SELECT * FROM testtable
);

--2.元テーブルを削除
DROP TABLE testtable CASCADE;

--3.カラムを追加した新テーブルを作成
CREATE TABLE testtable (
    column_A        decimal(15)     NOT NULL,
    column_B        varchar(255)    NULL,
    add_column      varchar(255)    NULL,
    column_C        varchar(255)    NULL,
  PRIMARY KEY(column_A)
);

--4.バックアップ用テーブルから新テーブルにデータを挿入
INSERT INTO testtable (
    column_A,
    column_B,
    column_C
)
(SELTCT * FROM testtable_bak);

--5.バックアップ用テーブルを削除
DROP TABLE testtable_bak;

メリット

  • 任意の位置にカラム追加が可能
  • SQLのみでカラム追加+データ復元可能
  • バックアップファイル不要 → 生成・削除の手間削減

留意点

  • 手順4.のINSERT文に「VALUES」は不要
  • ビューを利用している場合
    1. 手順2.の前にビューの数を覚えておく
    2. カラム追加後、消えたビューを再作成する
    3. 元の数と合っているか確認
  • カラム追加後はVACUUMをしたほうがいいかもしれない

関連記事:

PostgreSQL CSVファイルからのインポート - 130単位

2008-10-01

Subversion Windows上からサーバへのインポート

とある事情でSourceForgeへの新規プロジェクト作成を任され、初めてファイルのインポートを行いました。ので、そのメモ。

(※TortoiseSVN version 1.5.3)

インポート手順

  1. 右クリック→「TortoiseSVN」→「インポート
  2. リポジトリURL」にインポート先のURLを指定→OK

エラーとその対処

上の手順でやってみたところ、エラー発生。

f:id:deeeki:20081001204301j:image

どうやらディレクトリ作成権限がないようです。最初原因がさっぱりわかりませんでしたが、shiro氏に聞いて解決。同サーバに対し、管理権限のない認証データが保存されていたのが原因のようでした。

f:id:deeeki:20081001204302j:image

  1. 右クリック→「TortoiseSVN」→「設定」
  2. 「保存データ」から「認証データ」をクリア

再度インポートを実行し、管理権限をもつユーザで認証したところ、無事完了できました。

わかったこと

*1:.svnフォルダとかが混ざっているため