CKEditor: iframe 内の値を取得・設定する方法

※ CKEditor 4 の話です。

HTML 上で MS Word のようなリッチテキストエディター(WYSIWYG:ウィジウィグ)が実現できることで有名な CKEditor

CKEDITOR.replace('hoge');

以下のように HTML ドキュメント上の要素 id="hoge"(#hoge) に対して CKEditor を適用している場合、 これで値を取得できる。

CKEDITOR.instances.hoge.getData();

CKEditor ではブラウザー上で WYSIWYG を実現するために内部で iframe を用いています。

ということもあいまって iframe 内を自力で参照するやり方をしている方がいらっしゃいますが ↑ だけでいけるのです。

取得ではなく、逆に値を設定するにはこれで

CKEDITOR.instances.hoge.setData('<p>値がセットできた!</p>');

参考

  • http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html

JavaScript で DOCTYPE 宣言(document.doctype)を取得する

JavaScript で DOCTYPE 宣言を取得する方法として document.doctype があるが、これがブラウザーによって挙動が違う。

document.doctype プロパティ

name <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
publicId <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
systemId <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Chrome の場合、以下の記述だけで全体を取得できる

document.doctype;
// → <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Firefox, Safari, Opera の場合、個々のプロパティを指定しないと取得できない

document.doctype;
// → { entities, internalSubset, name, notations, publicId, systemId }

with (document.doctype) {
    var dtd = '<!DOCTYPE '+ name +' PUBLIC "'+ publicId +'" "'+ systemId +'">';
}
// → 実際にはこれでは駄目で、条件分岐させないと様々なDOCTYPEには対応できません。

console ベースで調べただけなので正規のやり方じゃないかも…。

何か良い方法があればコメントで教えてくださーい。

MySQL の ORDER BY で NULL を先にもってきて NULL 以外は降順にする

こんなんできたのね・・・。

ORDER BY created_at IS NULL ASC, created_at ASC

たとえばこんなデータで試すと…

CREATE TABLE test ( id INT(1), created_at DATETIME );
INSERT INTO test ( id, created_at ) VALUES ( 1, '2010-05-17 15:29:00' ), ( 2, '2011-05-17 15:29:00' ), ( 3, '2012-05-17 15:29:00' ), ( 4, NULL ), ( 5, NULL);

これを created_at 昇順で取得すると NULL が先にきてしまう。

SELECT * FROM test ORDER BY created_at ASC;

+----+---------------------+
| id | created_at          |
+----+---------------------+
|  4 | NULL                |
+----+---------------------+
|  5 | NULL                |
+----+---------------------+
|  1 | 2010-05-17 15:29:00 |
+----+---------------------+
|  2 | 2011-05-17 15:29:00 |
+----+---------------------+
|  3 | 2012-05-17 15:29:00 |
+----+---------------------+

逆に日付昇順ソートで NULL を最後にもってくるには…

SELECT * FROM test ORDER BY created_at IS NULL ASC, created_at ASC;

+----+---------------------+
| id | created_at          |
+----+---------------------+
|  1 | 2010-05-17 15:29:00 |
+----+---------------------+
|  2 | 2011-05-17 15:29:00 |
+----+---------------------+
|  3 | 2012-05-17 15:29:00 |
+----+---------------------+
|  4 | NULL                |
+----+---------------------+
|  5 | NULL                |
+----+---------------------+

ほほーう。

参考

  • https://dev.mysql.com/doc/refman/5.6/ja/working-with-null.html

MySQL おすすめ書籍

MySQL おすすめ書籍#1 MySQL おすすめ書籍#2

Python で PHP の isset 関数のように定義されているかどうかを判別する

Python で変数が定義されているかどうかを判別するには try を使用します。
(Python 1 や Python 3 は分からないけど)

try:
    _var = variable
except NameError:
    _var = 'default'

配列の値がない場合も同様に try を使用します。ただし except は IndexError になります。

try:
    _var = array[1]
except IndexError:
    _var = 'default'

参考サイト

Linux で CPU 使用率・メモリ占有率ランキングを表示する

だいぶ前に Munin 程までいかないけど、サーバー監視スクリプトを作りました。 そのスクリプトのコンセプトは「サーバーに負荷をかけている処理を特定する」というものでした。

そこで使った、現行処理の CPU 使用率・メモリ占有率ランキング表示方法を記載しておきます。 因みに以下のコマンドをシェルスクリプトで書いて監視スクリプトとしました。

■ CPU 使用率 TOP10 を表示する
ps -e aux | sort -r -k 3 | head -n 10

■ メモリ占有率 TOP10 を表示する
ps -e aux | sort -r -k 4 | head -n 10

■ 項目名がウザい場合は以下の文字列を付与する
ps --no-header

この表示だと見たくない情報も含まれたりしますorz なので…

■ CPU 使用率 TOP20 を項目名無しでかつ、整形したデータを表示する
ps --no-header -e aux | sort -r -k 3 | head -n 20 | awk '{print $1,$3,$11;};'

■ メモリ占有率 TOP20 を項目名無しでかつ、整形したデータを表示する
ps --no-header -e aux | sort -r -k 4 | head -n 20 | awk '{print $1,$4,$11;};'

因みに

$1=USER
$3=CPU

とかそういう具合です。普通に ps コマンド打ったときの並び順ですね。

更にログに落とすと…。

■CPU使用率TOP20を項目名無しでかつ、整形したデータをログに落とす
ps --no-header -e aux | sort -r -k 3 | head -n 20 | awk '{print $1,$3,$11;};' > cpu.log

■メモリ占有率TOP20を項目名無しでかつ、整形したデータをログに落とす
ps --no-header -e aux | sort -r -k 4 | head -n 20 | awk '{print $1,$4,$11;};' > mem.log

まあそれぞれのオプションは「ググれカス」ということでw awk は使えますよ~

※2009年10月6日…今更ながらコマンド間違いに気付くorz
 ソートの部分の「-kr」を「-r -k」へ変更。すみません。