Gmailで改行が消える

前からGmailでメールを送信すると、途中に入れている改行が勝手に消えてしまう現象が存在しているのは気づいていたが、送信者自身にはそのメールはGmail上では閲覧できない(参考:)ので、どの程度の崩れ具合なのかが把握しにくい。

別サーバに転送されている送信メールを見直すとレイアウトが見づらさを再確認したため、前に1行の文字数が関わっているということまではたどり着いていたと思うが、改めてこの現象を調べてみた。

  • 1行中の文字数が半角で256文字、全角で125文字(250バイト?)を超えるとメール本文全体で改行が消える。空行+改行は改行のみになる?
  • 1行中に空白があると、70文字程度で自動改行が入る。
  • これが起こるのはテキスト形式のメールの場合

ということで、次のような行(全角126文字)が1行でもメール本文にあると改行消えが本文全体で起こってしまうらしい。

012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345

これも自動改行してくれればいいんだが、英語圏とは異なる空白が入らない言語にはうまく対応していないということか。なんとか、Gmail Labsのツールを自作すればいいのかもしれんが、作成方法は特に公開されていないようでよくわからない。

JavaScriptを使ってテキストフィールドの文字数を計数するというスクリプトもある:

(し、WordPressの記事入力欄でも文字数カウントが付いている)ので、「毎行の文字数を数えて自動改行させる」ようなグリモンスクリプトを書いてもいいのかも?

Thunderbirdの表示レイアウトを切り替えたい

Thunderbirdをフィードリーダとして使っているが、レイアウトが3ペインだと次のように「左側にサイト一覧」「右上部に記事一覧」「右下部に記事本文」となる。

これだと、記事一覧を眺めるときには上部を広くして、記事本文を読むときには下部を広くするようにいちいち表示を切り替えないといけない。どちらかに幅を固定していると閲覧性が悪くなる。

希望としては、次のようにサイト一覧と記事一覧の位置を入れ替えられるとよさそうなのだが、なかなかうまくいかない。

アドオンで、「Maximize Message Pane」と「More Layouts」というのがあって、それらしい機能があるのだが希望の動作をうまく実現できない。

「Maximize Message Pane」はその名のとおり、記事本体のメッセージペインを最大化してしまうので、その際は記事一覧が眺められなくなるし、またその切り替えが「ペインの境目」をクリックするというものなので、そもそも押しにくかったり、切り替えの度に押す位置が上下に移動するのでちょっと操作しにくい。固定位置に切り替えボタンがあるともう少し使いやすいかな。あと最大化の割合を「85%」などと指定できるといいのだけど。

もうひとつの「More Layouts」は、ペインの入れ替えもできそうな感じだったのだが、Thunderbirdのバージョンが合わないのか、他のアドオンと干渉を起こしているのか表示が崩れてしまって使うのを取りやめた。

何か手はないものか~。

CakePHP練習(2)

CakePHP練習(1)の続き

CakePHPのブログチュートリアル」を動作させる例。ここでは、CakePHPの動作設定まで。

まず、CakePHPを入手(2.1.1 STABLEが出ていた)

$ wget --no-check-certificate https://github.com/cakephp/cakephp/zipball/2.1.1
09:37:11 (135.00 KB/s) - `2.1.1' を保存しました [1765102/1765102]
$ mv 2.1.1 cakephp-2.1.1.zip

アーカイブを展開

$ unzip cakephp-2.1.1.zip
Archive:  cakephp-2.1.1.zip
43cf2f06471ba9dcd5968b37ca68fcf3b343dd2c
   creating: cakephp-cakephp-0cad237/
  inflating: cakephp-cakephp-0cad237/.gitignore
  inflating: cakephp-cakephp-0cad237/.htaccess
  inflating: cakephp-cakephp-0cad237/.travis.yml
  inflating: cakephp-cakephp-0cad237/README
   ...

展開後のディレクトリを移動。ファイルは「~/public_html/cakephp-test/」に置くものとする。

mv cakephp-cakephp-0cad237 ~/public_html/cakephp-test

で、ユーザディレクトリ内でCakePHPを試したいが、そのままだとCakePHPが使っているApacheのrewriteルールが不十分となってページを表示できない。

Not Found
The requested URL /home/oshiro/public_html/cakephp-test/app/webroot/ was not found on this server.

これはRewriteRuleの

RewriteRule    ^$ app/webroot/    [L]

で、「app/webroot/」へアクセスしても実際には「app/webroot/app/webroot//」あたりを表示しようとしてエラーになってしまっているらしい。

なので、.htaccessに以下のRewriteBaseの設定を追加(それ以前にApache側でユーザの.htaccessでの設定を有効化しておく必要がある)。

# ./.htaccess
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteBase    /~oshiro/cakephp-test
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>
# ./app/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase    /~oshiro/cakephp-test/app
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>
# ./app/webroot/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase    /~oshiro/cakephp-test/app/webroot
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

これでCakePHPのトップページは表示できるようになるが、ディレクトリオーナを一般ユーザにしているので、ページ表示側のApacheの権限が不足で「キャッシュが保存できない」と警告が出る:

Warning (512): /home/oshiro/public_html/cakephp-test/app/tmp/cache/ is not writable [CORE/Cake/Cache/Engine/FileEngine.php, line 320]

ということで、該当ディレクトリに書き込み権限を付加。

$ chmod -R o+w app/tmp/cache/

次に、Security.saltやらSecurity.cipherSeedが変更されていないとエラーが出る:

Notice (1024): Please change the value of 'Security.salt' in app/Config/core.php to a salt value specific to your application [CORE/Cake/Utility/Debugger.php, line 806]
Notice (1024): Please change the value of 'Security.cipherSeed' in app/Config/core.php to a numeric (digits only) seed value specific to your application [CORE/Cake/Utility/Debugger.php, line 810]

のでこれを設定(以下は単なる例)。

Configure::write('Security.salt', 'oshiro');
Configure::write('Security.cipherSeed', '4457');

あとは、データベースの設定がないと言ってくる:

Your database configuration file is NOT present.
Rename APP/Config/database.php.default to APP/Config/database.php

ので、指示に従ってdatabase.php.defaultをdatabase.phpへコピー:

$ cp app/Config/database.php.default app/Config/database.php

してこれを自前の設定に合わせて書き換えていく。

データベースとして、標準ではMySQLを使うようになっており、これは「lib/Cake/Model/Datasource/Database/Mysql.php」を読み込んでいる。今回はSQLiteを使いたい(読み込まれるファイルは「lib/Cake/Model/Datasource/Database/Sqlite.php」で対応バージョン3)のでそれに合わせて変更する。

元が次のようになっているもの:

class DATABASE_CONFIG {
        public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'user',
                'password' => 'password',
                'database' => 'database_name',
                'prefix' => '',
                //'encoding' => 'utf8',
        );
        // ...
}

を、以下のように、ホスト/ログインID/パスワードは空にして、データベース名はSQLiteのデータベースファイル名(このファイル名指定はサーバ上のフルパスでないとアクセスに失敗するので注意)と変更する:

class DATABASE_CONFIG {
        public $default = array(
                'datasource' => 'Database/Sqlite',
                'persistent' => false,
                'host' => '',
                'login' => '',
                'password' => '',
                'database' => '/home/oshiro/public_html/cakephp-test/db/database.sqlite3',
                'prefix' => '',
                //'encoding' => 'utf8',
        );
        // ...
}

ここでは、「cakephp-test/」ディレクトリ直下に「db/」ディレクトリを作り、そこにSQLiteのデータベースファイルを置くことにした。

$ mkdir db/

で、とりあえずSQLite用のデータベースファイルを空ファイルとして作成しておき、他ユーザでも変更可能のようにディレクトリとデータベースファイルを設定。

touch db/database.sqlite3
chmod og+w db/ db/database.sqlite3

さらに、セキュリティ的な観点からは本来はWebアクセスできない場所にファイルを置くべきだが、ここではとりあえずこのディレクトリは閲覧できないようdb/ディレクトリに.htaccessファイルを置いて閲覧禁止に設定:

# db/.htaccess
order deny,allow
deny from all

以上で、CakePHP自体は動作するようになる。

CakePHPでjQuery

リンク

USB-RGB2のドライバ更新

IO-DATA USB-RGB2を使っているが、オプション設定の「ビデオの最適化」をオンにしていても(しているから?)、マルチモニタ側での画面更新が間に合わず表示がモザイク状になってしまうことが多々ある。

(付記:使っているものの型番を改めて確認したら、USB-RGBでなくUSB-RGB2だったので、適宜修正…)

USB-RGBのアイコンメニューに「アップデート確認中…」と出ている

ので、アップデートを確認しているのかと思っていたが、改めてこの項目をクリックしてみると「サーバーに接続できません。」との表示:

更新確認はできていなかったようだ。

#もっともサポートソフトの配布自体も2011/5で終了しているが。

次の手ということで、デバイスドライバから

ドライバの詳細を確認すると「DisplayLink」のドライバは日付が「2011/4/10」でバージョンが「5.6.31854.0」となっていて:


さらに「ドライバーの更新」などを試しても「最新であることが確認されました。」などと言ってくるだけ:

試しにとDisplayLinkのサイトを見るとバージョン6のドライバが配布されていた:

ので、ダメもとでこれを試してみることに(上記配布サイトの「Optional Utilities」に表示されている「Actual Mutiple Monitors」というのは、メイン画面以外でもタスクバーを表示したりする補助ソフトらしい。有償っぽい?)。

で、ドライバーを更新すると日付が「2011/11/8」でバージョンが「6.1.32700.0」(「6.0.32700.0」と表示されている場合もある?)に更新された。

で、肝心のUSB-RGB2が動かなくなることも心配したが、無事動作をしてさらに動作自体はかなり改善されたもよう!今のところはモザイク状の表示になるのは、ほんとうに最小限に収まっている感じ(ドライバ更新は自己責任でお願いします)。

もしこれがダメなら、性能向上を期待して後継機のUSB-RGB/D2(か、その一つ前のUSB-RGB/D)への買い替えも考えていたが、当分は現在のものを使い続けられそうだ。

そういえば、ドライバを入れ替えたら、Windows7ではそっけなくなっていたUSB-RGB2のアイコンメニューも更新されていた。