tag:blogger.com,1999:blog-35941730927026703822023-11-16T02:51:20.740+09:00The hacker in the ryeyanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.comBlogger48125tag:blogger.com,1999:blog-3594173092702670382.post-63136819898199442532013-07-01T23:42:00.001+09:002013-07-02T00:48:34.033+09:00Tiny Tiny RSS+fever plugin+Mr. reader または Reederが最強な件<!-- -*- HTML -*-
巷では7月1日でGoogle Readerのサービスが終了すると言うことで、移行先は何処にすれば良いのか話題で賑わっていました。自分のそのなかの一人であったのですが、今回の事で他人のサービスを当てにしているとろくな事は無いなと思った訳です。
と言うことで、私が選んだのは[Tiny Tiny RSS](http://tt-rss.org/)でした。Tiny Tiny Rssは他人のサービスを使用するものでは無く、自サーバーなどを用意しインストールして自らサービスを立ち上げるタイプのRSSです。これをさくらのVPSにインストールすれば、他人の都合に左右されずにサービスを享受することが出来ます。最高!!
Tiny Tiny RSSをサクッとインストールしてみたのですが、一つ問題がありました。Google Readerの時は使いやすいクライアントソフトが多く存在していました。自分はiPadでMr.Readerを愛用していました。もう手放せない、Mr.Readerじゃないと読む気が起きないというぐらい気に入っていました。
しかし、Tiny Tiny RSSをサポートしているクライアントソフトはお世辞にも良いとはいえないものばかりです。しばらくはwebインターファースで読むしか無いかなと思っていました。
### Tiny Tiny RSS プラグイン
Tiny Tiny RSSにはプラグインが組み込める仕組みがあって、デフォルトで有用なプラグインが組み込まれていて、それ以外にも有志によって作成された[プラグイン](http://tt-rss.org/forum/viewforum.php?f=22)も公開されています。
何か便利なプラグインは無いかと物色していた所、[Reeder (iOS) integration with TT-RSS (via Fever API)](http://tt-rss.org/forum/viewtopic.php?f=22&t=1981)と言うプラグインが目にとまりました。どうやらFever APIをエミュレートしてReederでTiny Tiny RSSの記事を参照出来るようにするプラグインらしいです。そして、Mr.Readerの最新版もFeverをサポートしています。
そして、[Fever API pluginのreadme.md](https://github.com/dasmurphy/tinytinyrss-fever-plugin/blob/master/README.md)を見ると Supported/Tested Clients の所に Mr.Readerの文字が… これは入れるしか無いとインストールしてみました。
#### TinyTinyRSS Fever API pluginのインストール
1. 最初に[https://github.com/dasmurphy/tinytinyrss-fever-plugin](https://github.com/dasmurphy/tinytinyrss-fever-plugin)から[master.zip](https://github.com/dasmurphy/tinytinyrss-fever-plugin/archive/master.zip)をダウンロードしてきます。
2. 次に、適当な場所で解凍します。
3. 解凍すると、feverディレクトリが出来ますので、それをTiny Tiny RSSのpluginsディレクトリ(自分の環境では`/var/www/htdocs/ttrss/plugins`)に入れます。
`# mv tinytinyrss-fever-plugin-master/fever /var/www/htdocs/ttrss/plugins `
4. 次にTiny Tiny RSSをブラウザで開いて「操作」→「Preference」→「plugin」を選択するとfeverのチェックボックスが現れるのでこれをチェックし、Enable seleced pluginsボタンを押下して有効にします。
![plugin設定画面](http://blog.foobarhoge.com/images/20130701_1.jpg)
5. fever pluginを有効にしてリロードすると「Preference」ページに「Fever Emulation」タブが追加されますのでこれを開いて、パスワード入力エリアにログイン時のパスワードを入力します。
![パスワード入力](http://blog.foobarhoge.com/images/20130701_2.jpg)
6. Mr.ReaderのAdd Accountからfeverを選びます。
![Mr.Reader Add Account](http://blog.foobarhoge.com/images/20130701_3.png)
7. Server URLはプラグインを入れたディレクトリを指定し、CredentialsにログインIDとパスワードを入力しログインします。
![Mr.Reader Login](http://blog.foobarhoge.com/images/20130701_4.png)
8. ログインすると同期が始まります。
![Mr.Reader 同期](http://blog.foobarhoge.com/images/20130701_5.png)
9. 記事の一覧
![Mr.Reader 記事の一覧](http://blog.foobarhoge.com/images/20130701_6.png)
8. 記事もGoogle Readerの時と同じように読むことが出来ました。
![Mr.Reader 同期](http://blog.foobarhoge.com/images/20130701_7.png)
これで、Google Readerが無くなっても、快適なReader環境を整えることが出来ました。Reeder for iPhoneでも同様にログインして読むことが出来ることを確認しています。
-->
<p>巷では7月1日でGoogle Readerのサービスが終了すると言うことで、移行先は何処にすれば良いのか話題で賑わっていました。自分のそのなかの一人であったのですが、今回の事で他人のサービスを当てにしているとろくな事は無いなと思った訳です。</p><p>と言うことで、私が選んだのは<a href="http://tt-rss.org/">Tiny Tiny RSS</a>でした。Tiny Tiny Rssは他人のサービスを使用するものでは無く、自サーバーなどを用意しインストールして自らサービスを立ち上げるタイプのRSSです。これをさくらのVPSにインストールすれば、他人の都合に左右されずにサービスを享受することが出来ます。最高!!</p><p>Tiny Tiny RSSをサクッとインストールしてみたのですが、一つ問題がありました。Google Readerの時は使いやすいクライアントソフトが多く存在していました。自分はiPadでMr.Readerを愛用していました。もう手放せない、Mr.Readerじゃないと読む気が起きないというぐらい気に入っていました。</p><p>しかし、Tiny Tiny RSSをサポートしているクライアントソフトはお世辞にも良いとはいえないものばかりです。しばらくはwebインターファースで読むしか無いかなと思っていました。</p><h3 id="tiny-tiny-rss-">Tiny Tiny RSS プラグイン</h3><p>Tiny Tiny RSSにはプラグインが組み込める仕組みがあって、デフォルトで有用なプラグインが組み込まれていて、それ以外にも有志によって作成された<a href="http://tt-rss.org/forum/viewforum.php?f=22">プラグイン</a>も公開されています。</p><p>何か便利なプラグインは無いかと物色していた所、<a href="http://tt-rss.org/forum/viewtopic.php?f=22&t=1981">Reeder (iOS) integration with TT-RSS (via Fever API)</a>と言うプラグインが目にとまりました。どうやらFever APIをエミュレートしてReederでTiny Tiny RSSの記事を参照出来るようにするプラグインらしいです。そして、Mr.Readerの最新版もFeverをサポートしています。</p><p>そして、<a href="https://github.com/dasmurphy/tinytinyrss-fever-plugin/blob/master/README.md">Fever API pluginのreadme.md</a>を見ると Supported/Tested Clients の所に Mr.Readerの文字が… これは入れるしか無いとインストールしてみました。</p><h4 id="tinytinyrss-fever-api-plugin">TinyTinyRSS Fever API pluginのインストール</h4><ol><li><p>最初に<a href="https://github.com/dasmurphy/tinytinyrss-fever-plugin">https://github.com/dasmurphy/tinytinyrss-fever-plugin</a>から<a href="https://github.com/dasmurphy/tinytinyrss-fever-plugin/archive/master.zip">master.zip</a>をダウンロードしてきます。</p></li><li><p>次に、適当な場所で解凍します。</p></li><li><p>解凍すると、feverディレクトリが出来ますので、それをTiny Tiny RSSのpluginsディレクトリ(自分の環境では<code>/var/www/htdocs/ttrss/plugins</code>)に入れます。<br /><code># mv tinytinyrss-fever-plugin-master/fever /var/www/htdocs/ttrss/plugins</code></p></li><li><p>次にTiny Tiny RSSをブラウザで開いて「操作」→「Preference」→「plugin」を選択するとfeverのチェックボックスが現れるのでこれをチェックし、Enable seleced pluginsボタンを押下して有効にします。<img src="http://blog.foobarhoge.com/images/20130701_1.jpg" alt="plugin設定画面" /></p></li><li><p>fever pluginを有効にしてリロードすると「Preference」ページに「Fever Emulation」タブが追加されますのでこれを開いて、パスワード入力エリアにログイン時のパスワードを入力します。<img src="http://blog.foobarhoge.com/images/20130701_2.jpg" alt="パスワード入力" /></p></li><li><p>Mr.ReaderのAdd Accountからfeverを選びます。<img src="http://blog.foobarhoge.com/images/20130701_3.png" alt="Mr.Reader Add Account" /></p></li><li><p>Server URLはプラグインを入れたディレクトリを指定し、CredentialsにログインIDとパスワードを入力しログインします。<img src="http://blog.foobarhoge.com/images/20130701_4.png" alt="Mr.Reader Login" /></p></li><li><p>ログインすると同期が始まります。<img src="http://blog.foobarhoge.com/images/20130701_5.png" alt="Mr.Reader 同期" /></p></li><li><p>記事の一覧<img src="http://blog.foobarhoge.com/images/20130701_6.png" alt="Mr.Reader 記事の一覧" /></p></li><li><p>記事もGoogle Readerの時と同じように読むことが出来ました。<img src="http://blog.foobarhoge.com/images/20130701_7.png" alt="Mr.Reader 同期" /></p></li></ol><p>これで、Google Readerが無くなっても、快適なReader環境を整えることが出来ました。Reeder for iPhoneでも同様にログインして読むことが出来ることを確認しています。</p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-53411667685178272592013-06-03T23:48:00.001+09:002013-06-04T23:27:57.450+09:00html5でも正しくインデントしてくれるweb-modeを導入してみた<!-- -*- HTML -*-
以前にhtml5を書くためにnxml-modeを導入したが、これはどちらかというとxhtml5を書くためのものでinputタグ等は最後にスラッシュを書いてタグを閉じておかないとインデントが残念なことになってしまっていた。
![残念なインデント](http://blog.foobarhoge.com/images/20130603_1.png)
最近はhtml5で書いた(しかも、微妙にxhtmlの記述が混ざっていたりする)ファイルを扱う事が多くなってくると、インデントがうまく処理できないnxml-modeだと使いにくいので、web-modeをインストールして使用してみた。
##インストール
[web-mode.elのページ](http://web-mode.org/)から[web-mode.e](https://raw.github.com/fxbois/web-mode/master/web-mode.el)をダウンロードして適当なディレクトリに置く。
## .emacsの設定
.emacsに下記の記述を追加
~~~ lisp
(setq auto-mode-alist
(append '(
("\\.\\(html\\|xhtml\\|shtml\\|tpl\\)\\'" . web-mode)
("\\.php\\'" . php-mode)
)
auto-mode-alist))
;;==========================================================
;; web-modeの設定
;;==========================================================
(require 'web-mode)
(defun web-mode-hook ()
"Hooks for Web mode."
;; 変更日時の自動修正
(setq time-stamp-line-limit -200)
(if (not (memq 'time-stamp write-file-hooks))
(setq write-file-hooks
(cons 'time-stamp write-file-hooks)))
(setq time-stamp-format " %3a %3b %02d %02H:%02M:%02S %:y %Z")
(setq time-stamp-start "Last modified:")
(setq time-stamp-end "$")
;; web-modeの設定
(setq web-mode-markup-indent-offset 2) ;; html indent
(setq web-mode-css-indent-offset 2) ;; css indent
(setq web-mode-code-indent-offset 2) ;; script indent(js,php,etc..)
;; htmlの内容をインデント
;; TEXTAREA等の中身をインデントすると副作用が起こったりするので
;; デフォルトではインデントしない
;;(setq web-mode-indent-style 2)
;; コメントのスタイル
;; 1:htmlのコメントスタイル(default)
;; 2:テンプレートエンジンのコメントスタイル
;; (Ex. {# django comment #},{* smarty comment *},{{-- blade comment --}})
(setq web-mode-comment-style 2)
;; 終了タグの自動補完をしない
;;(setq web-mode-disable-auto-pairing t)
;; color:#ff0000;等とした場合に指定した色をbgに表示しない
;;(setq web-mode-disable-css-colorization t)
;;css,js,php,etc..の範囲をbg色で表示
;; (setq web-mode-enable-block-faces t)
;; (custom-set-faces
;; '(web-mode-server-face
;; ((t (:background "grey")))) ; template Blockの背景色
;; '(web-mode-css-face
;; ((t (:background "grey18")))) ; CSS Blockの背景色
;; '(web-mode-javascript-face
;; ((t (:background "grey36")))) ; javascript Blockの背景色
;; )
;;(setq web-mode-enable-heredoc-fontification t)
)
(add-hook 'web-mode-hook 'web-mode-hook)
;; 色の設定
(custom-set-faces
'(web-mode-doctype-face
((t (:foreground "#82AE46")))) ; doctype
'(web-mode-html-tag-face
((t (:foreground "#E6B422" :weight bold)))) ; 要素名
'(web-mode-html-attr-name-face
((t (:foreground "#C97586")))) ; 属性名など
'(web-mode-html-attr-value-face
((t (:foreground "#82AE46")))) ; 属性値
'(web-mode-comment-face
((t (:foreground "#D9333F")))) ; コメント
'(web-mode-server-comment-face
((t (:foreground "#D9333F")))) ; コメント
'(web-mode-css-rule-face
((t (:foreground "#A0D8EF")))) ; cssのタグ
'(web-mode-css-pseudo-class-face
((t (:foreground "#FF7F00")))) ; css 疑似クラス
'(web-mode-css-at-rule-face
((t (:foreground "#FF7F00")))) ; cssのタグ
)
~~~
## 主なキーアサイン
個人的には、`C-c C-f`でタグブロックを開閉できるので、複雑なHTMLを編集するときは便利だと思う。
<table>
<caption>
<strong>Generalなキーアサイン</strong>
</caption>
<thead>
<tr>
<th style="width:90px;">キー</th>
<th>機能</th>
</tr>
</thead>
<tbody>
<tr>
<td>C-c C-;</td>
<td>コメント/アンコメント</td>
</tr>
<tr>
<td>C-c C-e</td>
<td>閉じていないタグを見つける</td>
</tr>
<tr>
<td>C-c C-f</td>
<td>指定したタグのブロックを開閉する</td>
</tr>
<tr>
<td>C-c C-i</td>
<td>現在開いているバッファをインデントする</td>
</tr>
<tr>
<td>C-c C-m</td>
<td>マークする(マークする場所によって選択範囲が変わります)</td>
</tr>
<tr>
<td>C-c C-n</td>
<td>開始・終了タグまでジャンプ</td>
</tr>
<tr>
<td>C-c C-r</td>
<td>HTML entitiesをリプレースする</td>
</tr>
<tr>
<td>C-c C-s</td>
<td>スニペットを挿入</td>
</tr>
<tr>
<td>C-c C-w</td>
<td>スペースを表示・非表示</td>
</tr>
</tbody>
</table>
<table>
<caption>
<strong>HTML element系のキーアサイン</strong>
</caption>
<thead>
<tr>
<th style="width:90px;">キー</th>
<th>機能</th>
</tr>
</thead>
<tbody>
<tr>
<td>C-c /</td>
<td>閉じタグを挿入(エレメントを閉じる)</td>
</tr>
<tr>
<td>C-c eb</td>
<td>エレメントの最初へ移動</td>
</tr>
<tr>
<td>C-c ed</td>
<td>エレメントを削除</td>
</tr>
<tr>
<td>C-c ee</td>
<td>エレメントの最後へ移動</td>
</tr>
<tr>
<td>C-c ee</td>
<td>エレメントを複製</td>
</tr>
<tr>
<td>C-c en</td>
<td>次のエレメントへ移動</td>
</tr>
<tr>
<td>C-c ep</td>
<td>前のエレメントへ移動</td>
</tr>
<tr>
<td>C-c eu</td>
<td>親エレメントへ移動</td>
</tr>
<tr>
<td>C-c er</td>
<td>エレメントをリネーム</td>
</tr>
<tr>
<td>C-c es</td>
<td>エレメント全体を選択</td>
</tr>
<tr>
<td>C-c ei</td>
<td>エレメントのコンテンツを選択</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<table>
<caption>
<strong>HTML tag系のキーアサイン</strong>
</caption>
<thead>
<tr>
<th style="width:90px;">キー</th>
<th>機能</th>
</tr>
</thead>
<tbody>
<tr>
<td>C-c tb</td>
<td>タグの先頭へ移動(エレメントの先頭では無くタグの先頭です。<br/> &lt;/div&gt;で実行した場合は&lt;/div&gt;タグの先頭(&lt;)に移動します)</td>
</tr>
<tr>
<td>C-c te</td>
<td>タグの後尾へ移動</td>
</tr>
<tr>
<td>C-c tm</td>
<td>マッチするタグへ移動</td>
</tr>
<tr>
<td>C-c ts</td>
<td>タグを選択</td>
</tr>
<tr>
<td>C-c tp</td>
<td>前のタグに移動</td>
</tr>
<tr>
<td>C-c tn</td>
<td>次のタグに移動</td>
</tr>
</tbody>
</table>
## インデント
`C-c C-i`でhtml5でソースをインデントさせてみたところ、インデントの崩れは起きませんでした。
![coolなインデント](http://blog.foobarhoge.com/images/20130603_2.png)
-->
<p>以前にhtml5を書くためにnxml-modeを導入したが、これはどちらかというとxhtml5を書くためのものでinputタグ等は最後にスラッシュを書いてタグを閉じておかないとインデントが残念なことになってしまっていた。</p><p><img src="http://blog.foobarhoge.com/images/20130603_1.png" alt="残念なインデント" /></p><p>最近はhtml5で書いた(しかも、微妙にxhtmlの記述が混ざっていたりする)ファイルを扱う事が多くなってくると、インデントがうまく処理できないnxml-modeだと使いにくいので、web-modeをインストールして使用してみた。</p><h2 id="section">インストール</h2><p><a href="http://web-mode.org/">web-mode.elのページ</a>から<a href="https://raw.github.com/fxbois/web-mode/master/web-mode.el">web-mode.e</a>をダウンロードして適当なディレクトリに置く。</p><h2 id="emacs">.emacsの設定</h2><p>.emacsに下記の記述を追加</p><pre><code class="language-lisp">(setq auto-mode-alist
(append '(
("\\.\\(html\\|xhtml\\|shtml\\|tpl\\)\\'" . web-mode)
("\\.php\\'" . php-mode)
)
auto-mode-alist))
;;==========================================================
;; web-modeの設定
;;==========================================================
(require 'web-mode)
(defun web-mode-hook ()
"Hooks for Web mode."
;; 変更日時の自動修正
(setq time-stamp-line-limit -200)
(if (not (memq 'time-stamp write-file-hooks))
(setq write-file-hooks
(cons 'time-stamp write-file-hooks)))
(setq time-stamp-format " %3a %3b %02d %02H:%02M:%02S %:y %Z")
(setq time-stamp-start "Last modified:")
(setq time-stamp-end "$")
;; web-modeの設定
(setq web-mode-markup-indent-offset 2) ;; html indent
(setq web-mode-css-indent-offset 2) ;; css indent
(setq web-mode-code-indent-offset 2) ;; script indent(js,php,etc..)
;; htmlの内容をインデント
;; TEXTAREA等の中身をインデントすると副作用が起こったりするので
;; デフォルトではインデントしない
;;(setq web-mode-indent-style 2)
;; コメントのスタイル
;; 1:htmlのコメントスタイル(default)
;; 2:テンプレートエンジンのコメントスタイル
;; (Ex. {# django comment #},{* smarty comment *},{{-- blade comment --}})
(setq web-mode-comment-style 2)
;; 終了タグの自動補完をしない
;;(setq web-mode-disable-auto-pairing t)
;; color:#ff0000;等とした場合に指定した色をbgに表示しない
;;(setq web-mode-disable-css-colorization t)
;;css,js,php,etc..の範囲をbg色で表示
;; (setq web-mode-enable-block-faces t)
;; (custom-set-faces
;; '(web-mode-server-face
;; ((t (:background "grey")))) ; template Blockの背景色
;; '(web-mode-css-face
;; ((t (:background "grey18")))) ; CSS Blockの背景色
;; '(web-mode-javascript-face
;; ((t (:background "grey36")))) ; javascript Blockの背景色
;; )
;;(setq web-mode-enable-heredoc-fontification t)
)
(add-hook 'web-mode-hook 'web-mode-hook)
;; 色の設定
(custom-set-faces
'(web-mode-doctype-face
((t (:foreground "#82AE46")))) ; doctype
'(web-mode-html-tag-face
((t (:foreground "#E6B422" :weight bold)))) ; 要素名
'(web-mode-html-attr-name-face
((t (:foreground "#C97586")))) ; 属性名など
'(web-mode-html-attr-value-face
((t (:foreground "#82AE46")))) ; 属性値
'(web-mode-comment-face
((t (:foreground "#D9333F")))) ; コメント
'(web-mode-server-comment-face
((t (:foreground "#D9333F")))) ; コメント
'(web-mode-css-rule-face
((t (:foreground "#A0D8EF")))) ; cssのタグ
'(web-mode-css-pseudo-class-face
((t (:foreground "#FF7F00")))) ; css 疑似クラス
'(web-mode-css-at-rule-face
((t (:foreground "#FF7F00")))) ; cssのタグ
)</code></pre><h2 id="section-1">主なキーアサイン</h2><p>個人的には、<code>C-c C-f</code>でタグブロックを開閉できるので、複雑なHTMLを編集するときは便利だと思う。</p><table><caption><strong>Generalなキーアサイン</strong></caption><thead><tr><th style="width:90px;">キー</th><th>機能</th></tr></thead><tbody><tr><td>C-c C-;</td><td>コメント/アンコメント</td></tr><tr><td>C-c C-e</td><td>閉じていないタグを見つける</td></tr><tr><td>C-c C-f</td><td>指定したタグのブロックを開閉する</td></tr><tr><td>C-c C-i</td><td>現在開いているバッファをインデントする</td></tr><tr><td>C-c C-m</td><td>マークする(マークする場所によって選択範囲が変わります)</td></tr><tr><td>C-c C-n</td><td>開始・終了タグまでジャンプ</td></tr><tr><td>C-c C-r</td><td>HTML entitiesをリプレースする</td></tr><tr><td>C-c C-s</td><td>スニペットを挿入</td></tr><tr><td>C-c C-w</td><td>スペースを表示・非表示</td></tr></tbody></table><table><caption><strong>HTML element系のキーアサイン</strong></caption><thead><tr><th style="width:90px;">キー</th><th>機能</th></tr></thead><tbody><tr><td>C-c /</td><td>閉じタグを挿入(エレメントを閉じる)</td></tr><tr><td>C-c eb</td><td>エレメントの最初へ移動</td></tr><tr><td>C-c ed</td><td>エレメントを削除</td></tr><tr><td>C-c ee</td><td>エレメントの最後へ移動</td></tr><tr><td>C-c ee</td><td>エレメントを複製</td></tr><tr><td>C-c en</td><td>次のエレメントへ移動</td></tr><tr><td>C-c ep</td><td>前のエレメントへ移動</td></tr><tr><td>C-c eu</td><td>親エレメントへ移動</td></tr><tr><td>C-c er</td><td>エレメントをリネーム</td></tr><tr><td>C-c es</td><td>エレメント全体を選択</td></tr><tr><td>C-c ei</td><td>エレメントのコンテンツを選択</td></tr><tr><td></td><td></td></tr></tbody></table><table><caption><strong>HTML tag系のキーアサイン</strong></caption><thead><tr><th style="width:90px;">キー</th><th>機能</th></tr></thead><tbody><tr><td>C-c tb</td><td>タグの先頭へ移動(エレメントの先頭では無くタグの先頭です。<br /> </div>で実行した場合は</div>タグの先頭(<)に移動します)</td></tr><tr><td>C-c te</td><td>タグの後尾へ移動</td></tr><tr><td>C-c tm</td><td>マッチするタグへ移動</td></tr><tr><td>C-c ts</td><td>タグを選択</td></tr><tr><td>C-c tp</td><td>前のタグに移動</td></tr><tr><td>C-c tn</td><td>次のタグに移動</td></tr></tbody></table><h2 id="section-2">インデント</h2><p><code>C-c C-i</code>でhtml5でソースをインデントさせてみたところ、インデントの崩れは起きませんでした。</p><p><img src="http://blog.foobarhoge.com/images/20130603_2.png" alt="coolなインデント" /></p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-63638407830195153712013-05-29T23:44:00.001+09:002013-05-30T00:30:47.939+09:00散財2品目<!-- -*- HTML -*-
欲しかった品がお手頃価格で売っているのを見つけてしまったので散財してしまった。
##### soda stream
一品目はsoda stream。暑くなって来ると炭酸水が飲みたくなる。毎回ボトルを買うのが馬鹿らしいのでsoda streamで自分で作った方が手軽だよなと思っていたが、アメリカに比べて2倍近い価格差があって躊躇していた。
先日、近くのスパーに行くと、展示品現品限りのJet スターターキットが8,980円で売っていたので買ってしまった。おまけに試供品ソーダ12種類と500mlボトルがついてきたので、結構お得な買い物だったかも。
![soda stream](http://blog.foobarhoge.com/images/20130529_1.png)
買った途端に梅雨入りで涼しくなったしまった為、梅雨明けまでお預けになっている…
##### 無印良品アロマディフューザーセット
新築マンションに引っ越して油断していたら、早々にゴキブリが出現した。
試しにアロマで虫除けしてみようと思い、Amazonで安いアロマディフューザーを探していたが、安いものだとすぐ壊れるという評価が多いので迷っていた所、無印良品で30% offになっているアロマディフューザーセットを発見したので買ってしまった。
5,900円の30% offで4,130円。なんか単体で買うより安くなっているのですけど…
無印アロマディフューザーは、すぐに動かなくなったいう話は聞かないので、多少価格が高くても安かろう悪かろうな商品を買うよりは良いでしょう。
![無印良品アロマディフューザーセット](http://blog.foobarhoge.com/images/20130529_2.png)
-->
<p>欲しかった品がお手頃価格で売っているのを見つけてしまったので散財してしまった。</p><h5 id="soda-stream">soda stream</h5><p>一品目はsoda stream。暑くなって来ると炭酸水が飲みたくなる。毎回ボトルを買うのが馬鹿らしいのでsoda streamで自分で作った方が手軽だよなと思っていたが、アメリカに比べて2倍近い価格差があって躊躇していた。</p><p>先日、近くのスパーに行くと、展示品現品限りのJet スターターキットが8,980円で売っていたので買ってしまった。おまけに試供品ソーダ12種類と500mlボトルがついてきたので、結構お得な買い物だったかも。</p><p><img src="http://blog.foobarhoge.com/images/20130529_1.png" alt="soda stream" /></p><p>買った途端に梅雨入りで涼しくなったしまった為、梅雨明けまでお預けになっている…</p><h5 id="section">無印良品アロマディフューザーセット</h5><p>新築マンションに引っ越して油断していたら、早々にゴキブリが出現した。</p><p>試しにアロマで虫除けしてみようと思い、Amazonで安いアロマディフューザーを探していたが、安いものだとすぐ壊れるという評価が多いので迷っていた所、無印良品で30% offになっているアロマディフューザーセットを発見したので買ってしまった。</p><p>5,900円の30% offで4,130円。なんか単体で買うより安くなっているのですけど…<br />無印アロマディフューザーは、すぐに動かなくなったいう話は聞かないので、多少価格が高くても安かろう悪かろうな商品を買うよりは良いでしょう。</p><p><img src="http://blog.foobarhoge.com/images/20130529_2.png" alt="無印良品アロマディフューザーセット" /></p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-11939418424254005242013-05-02T23:29:00.001+09:002013-05-02T23:29:23.839+09:00OpenBSDからPPPoEでフレッツ光に接続する設定<!-- -*- HTML -*-
昨年の12月に引っ越してから約5ヶ月。新築物件だったので、光使えますよねと念を押して確認したのに入居してフレッツ光を申し込んだら対応していませんと言われ、不動産屋と工事依頼のやり取りしてやっと開通しました。
それまでは、WiMAXでがんばっていたけれど、ホビーベースで使用するならば十分な速度が出ていました。なんといっても帯域制限が無いのがとてもよかった。
それはともかく、フレッツ光が開通したので、自宅サーバーのOpenBSDからGMOのとくとくBBにPPPoEで接続するための設定を行った。
最初にインターフェースの設定をhostname.pppoe0と言うファイルを作成して下記のようにする。*mtu 1454*と入れておくのがミソ。
~~~ view
inet 0.0.0.0 255.255.255.255 NONE \
pppoedev em1 authproto chap \
authname 'xxxxIDxxxx' authkey 'xxxxpasswordxxxx' up mtu 1454
dest 0.0.0.1
!/sbin/route add default -ifp pppoe0 0.0.0.1
~~~
次にhostname.em1に下記の設定をする
~~~ view
up
~~~
pf.confに下記の行を追加。
~~~ view
match on pppoe0 scrub (max-mss 1414)
~~~
最初、上記の設定を忘れていたので、ロードが完了しないサイトが多発して、原因を特定するに少しはまりました。
やはり、光は速くて良いですね。
-->
<p>昨年の12月に引っ越してから約5ヶ月。新築物件だったので、光使えますよねと念を押して確認したのに入居してフレッツ光を申し込んだら対応していませんと言われ、不動産屋と工事依頼のやり取りしてやっと開通しました。</p><p>それまでは、WiMAXでがんばっていたけれど、ホビーベースで使用するならば十分な速度が出ていました。なんといっても帯域制限が無いのがとてもよかった。</p><p>それはともかく、フレッツ光が開通したので、自宅サーバーのOpenBSDからGMOのとくとくBBにPPPoEで接続するための設定を行った。</p><p>最初にインターフェースの設定をhostname.pppoe0と言うファイルを作成して下記のようにする。<em>mtu 1454</em>と入れておくのがミソ。</p><pre><code class="language-view">inet 0.0.0.0 255.255.255.255 NONE \
pppoedev em1 authproto chap \
authname 'xxxxIDxxxx' authkey 'xxxxpasswordxxxx' up mtu 1454
dest 0.0.0.1
!/sbin/route add default -ifp pppoe0 0.0.0.1</code></pre><p>次にhostname.em1に下記の設定をする</p><pre><code class="language-view">up</code></pre><p>pf.confに下記の行を追加。</p><pre><code class="language-view">match on pppoe0 scrub (max-mss 1414)</code></pre><p>最初、上記の設定を忘れていたので、ロードが完了しないサイトが多発して、原因を特定するに少しはまりました。</p><p>やはり、光は速くて良いですね。</p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-61020456466421949952013-04-30T23:10:00.001+09:002013-04-30T23:10:32.309+09:00VALUE DOMAINのDDNS用Shell Scriptを作った<!-- -*- HTML -*-
今まで固定IPな環境だったのが、非固定IPな環境に移ってしまったので、VALUE DOMAINのDDNSを使用して自宅サーバーのホスト名を管理すべくShell Scriptを作成してみた。
こんなこともあろうと、DDNSが使用出来るVALUE DOMAINで契約しておいて良かったよ。
~~~ sh
#!/bin/sh
HOST='foo' # ホスト名('*'も可)
DOMAIN='example.jp' # ドメイン
PASSWORD='*******' # DDNSのパスワード
DNS_SERVER='ns1.value-domain.com' # VALUE DOMAINのネームサーバー
wget=`/usr/bin/which wget`
host=`/usr/bin/which host`
grep=`/usr/bin/which grep`
mail=`/usr/bin/which mail`
# 現在のIPアドレスを取得
CURRENT_IP=`$wget -q http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip -O -`
# DNSに登録されているIPをCURRENT_IPでgrepする。
if [ "${HOST}" = "*" ]; then
CHANGE=$($host $DOMAIN $DNS_SERVER | $grep -F $CURRENT_IP)
else
CHANGE=$($host $HOST.$DOMAIN $DNS_SERVER | $grep -F $CURRENT_IP)
fi
# IPが変更になった場合はCHANGEは空が入ってくるので、登録処理に入る
if [ -z "${CHANGE}" ]; then
# DNSへ登録
RESULT=$($wget -q "http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=$DOMAIN&p=$PASSWORD&h=$HOST" -O - )
STATUS=$(echo $RESULT | $grep -F 'status=0')
if [ -z "${STATUS}" ]; then
# 登録失敗の場合は、root@localhostへメールを送信
echo "Dynamic DNS Updating was NG.\nresult:$RESULT" | $mail -s "DDNS updating failed" root@localhost
fi
fi
~~~
自宅サーバーはルータにもなっているので、boot時にプロバイダーとの接続が確立されてIPアドレスの取得後に一回実行させれば良いと思われるので、rc.localに下記のように記述を追加。
~~~ sh
if[ -f /usr/local/sbin/ddns.sh ]; then
/usr/local/sbin/ddns.sh
fi
~~~
-->
<p>今まで固定IPな環境だったのが、非固定IPな環境に移ってしまったので、VALUE DOMAINのDDNSを使用して自宅サーバーのホスト名を管理すべくShell Scriptを作成してみた。</p><p>こんなこともあろうと、DDNSが使用出来るVALUE DOMAINで契約しておいて良かったよ。</p><pre><code class="language-sh">#!/bin/sh
HOST='foo' # ホスト名('*'も可)
DOMAIN='example.jp' # ドメイン
PASSWORD='*******' # DDNSのパスワード
DNS_SERVER='ns1.value-domain.com' # VALUE DOMAINのネームサーバー
wget=`/usr/bin/which wget`
host=`/usr/bin/which host`
grep=`/usr/bin/which grep`
mail=`/usr/bin/which mail`
# 現在のIPアドレスを取得
CURRENT_IP=`$wget -q http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip -O -`
# DNSに登録されているIPをCURRENT_IPでgrepする。
if [ "${HOST}" = "*" ]; then
CHANGE=$($host $DOMAIN $DNS_SERVER | $grep -F $CURRENT_IP)
else
CHANGE=$($host $HOST.$DOMAIN $DNS_SERVER | $grep -F $CURRENT_IP)
fi
# IPが変更になった場合はCHANGEは空が入ってくるので、登録処理に入る
if [ -z "${CHANGE}" ]; then
# DNSへ登録
RESULT=$($wget -q "http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=$DOMAIN&p=$PASSWORD&h=$HOST" -O - )
STATUS=$(echo $RESULT | $grep -F 'status=0')
if [ -z "${STATUS}" ]; then
# 登録失敗の場合は、root@localhostへメールを送信
echo "Dynamic DNS Updating was NG.\nresult:$RESULT" | $mail -s "DDNS updating failed" root@localhost
fi
fi</code></pre><p>自宅サーバーはルータにもなっているので、boot時にプロバイダーとの接続が確立されてIPアドレスの取得後に一回実行させれば良いと思われるので、rc.localに下記のように記述を追加。</p><pre><code class="language-sh">if[ -f /usr/local/sbin/ddns.sh ]; then
/usr/local/sbin/ddns.sh
fi</code></pre>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-45457007291956565472013-04-23T23:38:00.001+09:002013-04-23T23:38:48.469+09:00phpで深いオブジェクトのメンバ変数を動的にアクセスする方法<!-- -*- HTML -*-
phpでは変数に値を代入してオブジェクトのメンバ変数を動的アクセスすることが出来ます。
~~~php
<?php
$foo->bar0 = "hoge0";
$foo->bar1 = "hoge1";
$foo->bar2 = "hoge2";
for($i=0;$i<3;$i++){
$idx = "bar".$i;
echo $foo->$idx."\n";
}
?>
~~~
これの結果は次のようになります。
~~~ term
$ php test.php
hoge0
hoge1
hoge2
$
~~~
しかし、オブジェクトが深くなるとこの方式ではアクセス出来なくなります。
~~~php
<?php
$foo->bar->hoge0 = "moge0";
$foo->bar->hoge1 = "moge1";
$foo->bar->hoge2 = "moge2";
for($i=0;$i<3;$i++){
$idx = "bar->hoge".$i;
echo $foo->$idx."\n";
}
?>
~~~
これだとUndefined propertyと言われてしまい、アクセス出来ませんでした。
~~~ term
$ php test.php
PHP Notice: Undefined property: stdClass::$bar->hoge0 in /Users/yanagimoto/public_html/test.php on line 8
Notice: Undefined property: stdClass::$bar->hoge0 in /Users/yanagimoto/public_html/test.php on line 8
PHP Notice: Undefined property: stdClass::$bar->hoge1 in /Users/yanagimoto/public_html/test.php on line 8
Notice: Undefined property: stdClass::$bar->hoge1 in /Users/yanagimoto/public_html/test.php on line 8
PHP Notice: Undefined property: stdClass::$bar->hoge2 in /Users/yanagimoto/public_html/test.php on line 8
Notice: Undefined property: stdClass::$bar->hoge2 in /Users/yanagimoto/public_html/test.php on line 8
$
~~~
あまり、良い方法ではありませんが[eval関数]を使うとアクセス出来ます。
~~~php
<?php
$foo->bar->hoge0 = "moge0";
$foo->bar->hoge1 = "moge1";
$foo->bar->hoge2 = "moge2";
for($i=0;$i<3;$i++){
$idx = '$foo->bar->hoge'.$i;
echo eval("return {$idx};")."\n";
}
?>
~~~
結果は下記のようになりました。
~~~term
$ php test.php
moge0
moge1
moge2
$
~~~
しかし、マニュアルにも書いてある通り、_任意のPHPコードを実行できてしまう危険な関数_なので用法はお間違えの無いように。
[eval関数]:http://www.php.net/manual/ja/function.eval.php eval関数
-->
<p>phpでは変数に値を代入してオブジェクトのメンバ変数を動的アクセスすることが出来ます。</p><pre><code class="language-php"><?php
$foo->bar0 = "hoge0";
$foo->bar1 = "hoge1";
$foo->bar2 = "hoge2";
for($i=0;$i<3;$i++){
$idx = "bar".$i;
echo $foo->$idx."\n";
}
?></code></pre><p>これの結果は次のようになります。</p><pre><code class="language-term">$ php test.php
hoge0
hoge1
hoge2
$</code></pre><p>しかし、オブジェクトが深くなるとこの方式ではアクセス出来なくなります。</p><pre><code class="language-php"><?php
$foo->bar->hoge0 = "moge0";
$foo->bar->hoge1 = "moge1";
$foo->bar->hoge2 = "moge2";
for($i=0;$i<3;$i++){
$idx = "bar->hoge".$i;
echo $foo->$idx."\n";
}
?></code></pre><p>これだとUndefined propertyと言われてしまい、アクセス出来ませんでした。</p><pre><code class="language-term">$ php test.php
PHP Notice: Undefined property: stdClass::$bar->hoge0 in /Users/yanagimoto/public_html/test.php on line 8
Notice: Undefined property: stdClass::$bar->hoge0 in /Users/yanagimoto/public_html/test.php on line 8
PHP Notice: Undefined property: stdClass::$bar->hoge1 in /Users/yanagimoto/public_html/test.php on line 8
Notice: Undefined property: stdClass::$bar->hoge1 in /Users/yanagimoto/public_html/test.php on line 8
PHP Notice: Undefined property: stdClass::$bar->hoge2 in /Users/yanagimoto/public_html/test.php on line 8
Notice: Undefined property: stdClass::$bar->hoge2 in /Users/yanagimoto/public_html/test.php on line 8
$</code></pre><p>あまり、良い方法ではありませんが<a href="http://www.php.net/manual/ja/function.eval.php eval関数">eval関数</a>を使うとアクセス出来ます。</p><pre><code class="language-php"><?php
$foo->bar->hoge0 = "moge0";
$foo->bar->hoge1 = "moge1";
$foo->bar->hoge2 = "moge2";
for($i=0;$i<3;$i++){
$idx = '$foo->bar->hoge'.$i;
echo eval("return {$idx};")."\n";
}
?></code></pre><p>結果は下記のようになりました。</p><pre><code class="language-term">$ php test.php
moge0
moge1
moge2
$</code></pre><p>しかし、マニュアルにも書いてある通り、<em>任意のPHPコードを実行できてしまう危険な関数</em>なので用法はお間違えの無いように。</p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-80916128897346069072013-04-15T23:21:00.001+09:002013-04-20T18:41:07.493+09:00MarsEditでMarkdown表記で書いた記事をbloggerに投稿するためのAppleScriptを作った<p>なんかすごく長い記事になってしまったが、bloggerはMarkdown表記の記事をサポートしていないので、投稿するときの少し便利にするMarsEdit用のAppleScriptを作ってみました。</p><h1 class="no_toc" id="section">目次</h1><ul id="markdown-toc"><li><a href="#marseditmarkdown">MarsEditでMarkdownを変換したときの不満点</a><ul><li><a href="#html">変換したHTMLに一部不具合が出る。</a></li><li><a href="#htmlmarkdown">HTMLにいったん変換するとMarkdownに戻せない。</a></li></ul></li><li><a href="#markdown-scripts-for-marsedit">Markdown Scripts for MarsEdit</a><ul><li><a href="#section-1">インストール</a></li><li><a href="#translate-markdown-to-html-">Translate Markdown to HTML の不満点</a></li><li><a href="#translate-html-to-markdown-">Translate HTML to Markdown の不満点</a></li></ul></li><li><a href="#toggle-markdown">Toggle Markdown</a><ul><li><a href="#toggle-markdown-1">Toggle Markdownのインストール</a><ul><li><a href="#kramdownoptional">kramdownのインストール(optional)</a></li><li><a href="#marseditoptional">MarsEditの設定(optional)</a></li><li><a href="#togglemarkdownscptscripts-folder">ToggleMarkdown.scptをScripts Folderにコピー</a></li></ul></li><li><a href="#section-2">使い方</a></li><li><a href="#section-3">欠点</a></li></ul></li><li><a href="#section-4">おまけ</a></li></ul><h1 id="marseditmarkdown">MarsEditでMarkdownを変換したときの不満点</h1><p><a href="http://www.toshiya240.com/2011/05/marsedit-markdown.html" title="Markdown 記法でブログを書く">Markdown 記法でブログを書く</a>で紹介されているように、MarsEditは最初からMarkdown記法をサポートしていて、MarkdownからHTMLに変換することも可能なのですが、不満点がいくつかあります。</p><h2 id="html">変換したHTMLに一部不具合が出る。</h2><p>例えば、下記のような<a href="http://blog.2310.net/archives/6#code_blocks" title="Code Blocks">Code Blocks</a>を含んだ文章をMarkdownで書いたとします。</p><p><img src="http://blog.foobarhoge.com/images/20130415_1.png" alt="Markdown sample" title="Markdown sample" /></p><p>これを変換するには ⌘ + ⇧ shift + Tで一度リッチテキストに変換します。すると下記のように<a href="http://blog.2310.net/archives/6#code_blocks" title="Code Blocks">Code Blocks</a>にあった改行が無くなって一行になってしまいます。</p><p><img src="http://blog.foobarhoge.com/images/20130415_2.png" alt="Rich Text" title="Rich Text" /></p><p>さらに⌘ + ⇧ shift + TをしてHTMLに変換しても下記のように無くなった改行はそのままです。</p><p><img src="http://blog.foobarhoge.com/images/20130415_3.png" alt="Rich TextからHTMLに変換" title="Rich TextからHTMLに変換" /></p><p>プレビューでみると下記のようになり、ソースコードが一行で表示されすごく見づらくなっています。ソースコードをたくさん貼り付けたい場合、修正の作業量が多くなってしまいかえって不便になってしまいます。</p><p><img src="http://blog.foobarhoge.com/images/20130415_13.png" alt="HTMLの変換結果をプレビュー" title="HTMLの変換結果をプレビュー" /></p><h2 id="htmlmarkdown">HTMLにいったん変換するとMarkdownに戻せない。</h2><p>Markdown → リッチテキスト → HTMLと変換した状態で、もう一度 ⌘ + ⇧ shift + TをしてもMarkdownに戻る事はなく、リッチテキストになってしまいます。</p><p>記事を投稿した後で、修正したいと思ってもHTMLを直接修正するか、どこかにMarkdown形式の記事を保存しておいて、それをコピーして使うと言うことになると思います。しかし、それではMarkdown記法をMarsEditで書いている意味が無くなってしまいます。</p><h1 id="markdown-scripts-for-marsedit">Markdown Scripts for MarsEdit</h1><p>同じような不満を抱いている人がいないかと思い、ググってみると<a href="http://drewthaler.blogspot.jp/2007/08/markdown-scripts-for-marsedit.html" title="Markdown Scripts for MarsEdit">Markdown Scripts for MarsEdit</a>と言う、MarsEdit用のAppleScripts<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>を見つけました。</p><h2 id="section-1">インストール</h2><p><a href="http://mac.softpedia.com/progDownload/Markdown-Scripts-for-MarsEdit-Download-72409.html" title="lisisoft">softpedia</a>からMarsEditMarkdownScripts.zipをダウンロードして展開します。そして展開したファイルを~/Library/Application\ Support/MarsEdit/Scripts/にコピーします。</p><pre><code class="language-term">$ cd ~/Desktop/MarsEditMarkdownScripts/
$ cp *.scpt ~/Library/Application\ Support/MarsEdit/Scripts/
$ cp html2text.py ~/Library/Application\ Support/MarsEdit/TextFilters/Markdown_1.0/
$</code></pre><p>インストールが終了すると、MarsEditのメニューバーにあるスクリプトメニューにTranslate Markdown to HTMLとTranslate HTML to Markdownが増えていると思います。<img src="http://blog.foobarhoge.com/images/20130415_4.png" alt="MarsEditのスクリプトメニュー" title="MarsEditのスクリプトメニュー" /></p><h2 id="translate-markdown-to-html-">Translate Markdown to HTML の不満点</h2><p>早速、さきほどのMarkdownを変換してみます。変換の仕方は、エディタ画面上でスクリプトメニューのTranslate Markdown to HTMLを選択するだけでHTMLに変換してくれます。</p><p><img src="http://blog.foobarhoge.com/images/20130415_5.png" alt="メニューからTranslate Markdown to HTMLを実行" title="メニューからTranslate Markdown to HTMLを実行" /></p><p>下記のように<a href="http://blog.2310.net/archives/6#code_blocks" title="Code Blocks">Code Blocks</a>の改行も保たれたまま変換されています。</p><p><img src="http://blog.foobarhoge.com/images/20130415_6.png" alt="Translate Markdown to HTMLの実行結果" title="Translate Markdown to HTMLの実行結果" /></p><p>プレビューでの表示も問題ありません。<img src="http://blog.foobarhoge.com/images/20130415_14.png" alt="Translate Markdown to HTMLの実行結果をプレビュー" title="Translate Markdown to HTMLの実行結果をプレビュー" /></p><p>しかし、変換エンジンがオリジナルのMarkdown.plを使用しているため、<strong>Markdownの拡張シンタックスが使えないので表現力が落ちます</strong>。
但し、Translate Markdown to HTML.scpt変更すれば、別の変換エンジンを使用することが可能です。</p><h2 id="translate-html-to-markdown-">Translate HTML to Markdown の不満点</h2><p>Translate Markdown to HTMLで変換したHTMLをMarkdownに戻してみます。</p><p><img src="http://blog.foobarhoge.com/images/20130415_7.png" alt="メニューからTranslate HTML to Markdownを実行" title="メニューからTranslate HTML to Markdownを実行" /></p><p>微妙に変換後のインデントが変わってしまいます。</p><p><img src="http://blog.foobarhoge.com/images/20130415_8.png" alt="Translate HTML to Markdownの実行結果" title="Translate HTML to Markdownの実行結果" /></p><p>このため何回かHTML ↔ Markdownの変換をすると、下記のように結果的に表示が崩れてしまいます。</p><p><img src="http://blog.foobarhoge.com/images/20130415_15.png" alt="Translate HTML to Markdownの実行結果をプレビュー" title="Translate HTML to Markdownの実行結果をプレビュー" /></p><p>これでは、編集作業には向きません。</p><h1 id="toggle-markdown">Toggle Markdown</h1><p>AppleScriptを使用してMarkdownをHTMLにするという発想は良いアイディアだと思うので、その考えを少し転換して下記のような動きをするAppleScriptを作成してみました。</p><ol><li>MarkdownからHTMLを変換する。</li><li>変換は拡張シンタクスも変換出来るようにする。</li><li>変換時にオリジナルのMarkdownはHTML内にコメントとして挿入しておく。</li><li>HTMLからMarkdownに戻すときは、コメントにしておいたMarkdownから復元する。</li></ol><h2 id="toggle-markdown-1">Toggle Markdownのインストール</h2><h3 id="kramdownoptional">kramdownのインストール(optional)</h3><p>最初にkramdownをインストールします。拡張されたMarkdown記法を使用しない場合はスキップしてもかまいません。</p><pre><code class="language-term">$ sudo gem install kramdown
Password:
Successfully installed kramdown-0.14.2
1 gem installed
Installing ri documentation for kramdown-0.14.2...
Installing RDoc documentation for kramdown-0.14.2...
$</code></pre><h3 id="marseditoptional">MarsEditの設定(optional)</h3><p>こちらも、拡張されたMarkdown記法を使用しない場合はスキップしてもかまいません。</p><p>MarsEditはデフォルトでmarkdown表記のプレビューが可能ですが、これはMarkdown.plを使用してプレビューを行っています。このため、kramdownの拡張シンタックスを使うとうまく表示できません。そこで、markdownのプレビューにkramdownを使うように設定します。</p><p>{$HOME}/Library/Application Support/MarsEdit/TextFilters/kramdownにkramdownディレクトリを作成し、そこにShell Script ファイルkramdown.shを作成します。</p><pre><code class="language-term">$ midir ~/Library/Application\ Support/MarsEdit/TextFilters/kramdown/
$ cd ~/Library/Application\ Support/MarsEdit/TextFilters/kramdown/
$ vi kramdown.sh</code></pre><p>kramdown.shの内容は下記のようにします。</p><pre><code class="language-file">#! /bin/sh
CMD=/usr/bin/kramdown
CMDARGS=&quot;--auto-ids&quot;
$CMD $CMDARGS $1</code></pre><p>CMDARGSに設定するオプションはコマンドラインでkramdown –helpとすると出てきますので、お好みで指定します。</p><h3 id="togglemarkdownscptscripts-folder">ToggleMarkdown.scptをScripts Folderにコピー</h3><p><a href="http://blog.foobarhoge.com/files/ToggleMarkdown.scpt" title="ToggleMarkdown.scpt">ToggleMarkdown.scpt</a>をダウンロードし、MarsEditのScripts Folderにコピーします。</p><pre><code class="language-term">$ cp ToggleMarkdown.scpt ~/Library/Application\ Support/MarsEdit/Scripts/
$</code></pre><p>MarsEditのメニューバーにあるスクリプトメニューにToggleMarkdownが出たら完了です。</p><p><img src="http://blog.foobarhoge.com/images/20130415_9.png" alt="MarsEditのスクリプトメニューにToggleMarkdown" title="MarsEditのスクリプトメニューにToggleMarkdown" /></p><h2 id="section-2">使い方</h2><p>ToggleMarkdownを実行する度にMarkdown→HTML→Markdown→HTML→… と変換していきます。</p><p>ToggleMarkdownはMarkDownエンジンを次のような優先順位で探しに行きます。</p><ol><li>~/Library/Application Support/MarsEdit/TextFilters/kramdown/kramdown.sh</li><li>パスが通った場所にあるkramdownコマンド</li><li>~/Library/Application\ Support/MarsEdit/TextFilters/Markdown_1.0/Markdown.pl</li></ol><p>次のようなMarkdownで書かれた文書を変換してみます。<img src="http://blog.foobarhoge.com/images/20130415_10.png" alt="変換サンプル" title="変換サンプル" /></p><p>スクリプトメニューのToggleMarkdownを実行します。<img src="http://blog.foobarhoge.com/images/20130415_9.png" alt="MarsEditのスクリプトメニュー" title="MarsEditのスクリプトメニュー" /></p><p>すると、MarkdownがHTMLに変換されます。<strong>オリジナルのMarkdownは上部にコメントとして保存されます。</strong><img src="http://blog.foobarhoge.com/images/20130415_11.png" alt="MarkdownからHTMLの変換結果" title="MarkdownからHTMLの変換結果" /></p><p>上記の状態で、再度スクリプトメニューのToggleMarkdownを実行すると、コメントにしてあったMarkdownを元に戻します。<strong>この処理は、HTMLをMarkdownに変換している訳では無いのでHTMLを直接編集した場合は編集内容は消えてしまうので注意してください。</strong><img src="http://blog.foobarhoge.com/images/20130415_12.png" alt="HTMLからMarkdownに戻した結果" title="HTMLからMarkdownに戻した結果" /></p><p>再度、ToggleMarkdownを実行するとHTMLに変換されます。<img src="http://blog.foobarhoge.com/images/20130415_11.png" alt="MarkdownからHTMLの変換結果" title="MarkdownからHTMLの変換結果" /></p><h2 id="section-3">欠点</h2><p>ToggleMarkdownはHTMLのコメントとして、変換元のMarkdownを残すので投稿する記事のバイト数が増えてしまいます。これをなるべく避けるためHTML部分の余分なスペースと改行を削除して出力します。</p><p>その方がHTMLが難読化されるので、HTMLをうっかり修正してしまうと言うミスも防げると言う利点も…</p><h1 id="section-4">おまけ</h1><p>スペースと改行を削除しないほうが良い場合もあるので、削除しないスクリプトを<a href="http://blog.foobarhoge.com/files/ToggleMarkdownNoCompress.scpt" title="ToggleMarkdownNoCompress.scpt">ToggleMarkdownNoCompress.scpt</a>として置いておきます。</p><p>今まで、AppleScriptで作った事が無かったので、これが初めてのスクリプトです。言語の仕様をwebで調べて2日程度で作ったので動きがおかしな所もあるかも知れません。これを使用したことにより、今までのブログが消えたとしても一切関知しないと言うことで…</p><div class="footnotes"><ol><li id="fn:1"><p>download先がリンク切れになっているようですが、<a href="http://mac.softpedia.com/progDownload/Markdown-Scripts-for-MarsEdit-Download-72409.html" title="lisisoft">softpedia</a>からダウンロード可能なようです。<a href="#fnref:1" rel="reference">↩</a></p></li></ol></div>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-17576206529196591622013-04-14T23:52:00.001+09:002013-04-15T01:12:06.478+09:00StartSSL更新を行う<!-- -*- HTML -*-
先日、StartComの証明書を更新したのですが、忘れないように手順を残しておきます。
コントロールパネルログイン用の証明書の更新
===========
StartComで作成した証明書の有効期限2週間前になるとメールが来ます。
メールは「コントロールパネルログイン用の証明書」と「サーバーのSSL証明書」の期限が来るのですが、文面が似ているので「コントロールパネルログイン用の証明書」の更新を忘れないようにしましょう。
## 認証 ##
[StartSSL™ Certificates & Public Key Infrastructure](https://www.startssl.com/?app=12)のページに行き、Authenticateからログインします。
![証明書がインストールされていない場合](http://blog.foobarhoge.com/images/StartSSL001.png)
その際ブラウザに一年前に作成した「コントロールパネルログイン用の証明書」がインストールされている必要があります。
証明書がインストールされていないと、次のような画面が表示されます。
Operaには証明書がインストールされていなかったので、この画面が出てちょっと焦った。
![証明書がインストールされていない場合](http://blog.foobarhoge.com/images/StartSSL002.png)
証明書がインストールされているブラウザで開くと証明書の要求ダイアログが出ますのでOKを選択します。
![証明書がインストールされている場合](http://blog.foobarhoge.com/images/StartSSL003.png)
無事認証が完了すると下記の画面が表示されますので"Control Panel"をクリックして進みます。
![認証後の画面](http://blog.foobarhoge.com/images/StartSSL004.png)
"Control Panel"画面に進むと下記の画面になりますので、"Validations Wizard"を選択します。
![Control Panel画面](http://blog.foobarhoge.com/images/StartSSL005.png)
## Email Address Validation ##
"Select Validation"画面が表示されますので、*Email Address Validation* を選択します。
![Select Validation画面](http://blog.foobarhoge.com/images/StartSSL006.png)
"Enter Email Address"画面に移りますので、自分のメールアドレスを入力しContiuneを押下します。
![Enter Email Addres画面](http://blog.foobarhoge.com/images/StartSSL007.png)
"Complete Validation"画面が表示された後しばらくして、入力したメールアドレスにメールが送信されます
![Complete Validation画面](http://blog.foobarhoge.com/images/StartSSL008.png)
送信されたメールにはVerification Codeが送られてきます。
~~~ file
This mail is intended for the person who requested verification of email ownership at StartSSL™ (http://www.startssl.com).
Your verification code is XXXXXXXXXXXXXXXX
Copy and paste this code now into the form at your open browser window.
Thank you!
StartCom Ltd.
StartSSL™ Certification Authority
~~~
ここに記載されているコードをVerification Codeに入力します。
![Verification Codeを入力](http://blog.foobarhoge.com/images/StartSSL009.png)
Verification Successの画面が出たら終了です。
*Email Address Validation*は30日間有効なので、その間に*Domain Name Validation*を行いクライアント証明書を入手する必要があります。
![Verification Success画面](http://blog.foobarhoge.com/images/StartSSL010.png)
## Domain Name Validation ##
"Validations Wizard"を選択し"Select Validation"画面を表示させます。今度は*Domain Name Validation*を選択します。
![Domain Name Validationを選択](http://blog.foobarhoge.com/images/StartSSL011.png)
次にドメイン名を入力します。ここではトップレベルのドメイン名を入力します。たとえば foo.invalid.com の場合はinvalid.comを入力します。
![ドメイン名の入力](http://blog.foobarhoge.com/images/StartSSL012.png)
Verification Codeを送るメールアドレスを選択してContinueを押下します。(なんか文字化けしてるものがありますね。)
![ドメイン名の入力](http://blog.foobarhoge.com/images/StartSSL013.png)
"Complete Validation"画面が表示された後しばらくして、Email Address Validationと同様に選択したメールアドレスにメールが送信されます
![Complete Validation画面](http://blog.foobarhoge.com/images/StartSSL014.png)
送信されたメールにはVerification Codeが送られてきます。
~~~ file
This mail is intended for the person who requested verification of domain control at
StartSSL™ (http://www.startssl.com).
Your verification code is OOOOOOOOOOOO
Copy and paste this code now into the form at your open browser window.
Thank you!
StartCom Ltd.
StartSSL™ Certification Authority
~~~
ここに記載されているコードをVerification Codeに入力します。
![Verification Codeを入力](http://blog.foobarhoge.com/images/StartSSL015.png)
Verification Successの画面が出たら終了です。
*Domain Name Validation*も30日間有効なので、30日以内にクライアント証明書を入手する必要があります。
![Verification Success画面](http://blog.foobarhoge.com/images/StartSSL010.png)
## クライアント証明書の更新 ##
Cerifications Wizardを選択して*Select Cretificate Purpose*画面を表示させ、"S/MIME and Authentication Certificate"の選択し次に進みます。
![Select Cretificate Purpose画面](http://blog.foobarhoge.com/images/StartSSL016.png)
Generate Private Key画面で"高強度の暗号化"を選んで次に進みます。
![Generate Private Key画面](http://blog.foobarhoge.com/images/StartSSL017.png)
Select Email Address画面では*Secure Hash Algorithm*を"SHA2"にして次に進みます。
![Select Email Address画面](http://blog.foobarhoge.com/images/StartSSL018.png)
これで成功すれば、Congratulations!画面になり、ブラウザにクライアント証明書が自動的にインストールされます。
![Congratulations画面](http://blog.foobarhoge.com/images/StartSSL019.png)
## クライアント証明書のバックアップ ##
クライアント証明書が失われてしまった場合に、startSSLにログイン出来なくなりますので証明書のバックアップをしておきます。
Firefoxの詳細画面を表示して「証明書の表示」を押下します。
![Firefox詳細画面](http://blog.foobarhoge.com/images/StartSSL020.png)
先ほどインストールされた証明書を選択して、「バックアップ」押下しファイルへ保存します。
![証明書マネージャー画面](http://blog.foobarhoge.com/images/StartSSL021.png)
サーバー証明書の更新
===========================
Cerifications Wizardを選択して*Select Cretificate Purpose*画面を表示させ、"Web Server SSL/TLS Certificate"の選択し次に進みます。
![Select Cretificate Purpose画面](http://blog.foobarhoge.com/images/StartSSL022.png)
Generate Private Key画面では、Private Keyは以前サーバ上で作成したキーを再利用しますのでskipを押下して次に進みます。
![Select Cretificate Purpose画面](http://blog.foobarhoge.com/images/StartSSL023.png)
Submit Certificate Request画面では、以前作成した証明書署名要求ファイルserver.csrをフォームにコピペする。
![Select Cretificate Purpose画面](http://blog.foobarhoge.com/images/StartSSL024.png)
作成したファイルが見つからない場合は下記のようにして証明書署名要求ファイルserver.csrを再度作成します。
証明書要求の作成 手順(server.csr)
~~~ term
$ su
# cd /etc/ssl/private
サーバー秘密鍵の作成 (server.key)
# openssl genrsa -out server.key -aes256 4096
パスフレーズを削除
# openssl rsa -in server.key -out server.key
証明書要求の作成(server.csr)
# openssl req -new -key server.key -out server.csr
#
~~~
証明書署名要求ファイルに問題が無ければ下記の画面が出ますので次にいきます。
![Select Cretificate Purpose画面](http://blog.foobarhoge.com/images/StartSSL025.png)
証明書に紐付けるドメインを選んで次にいきます。
![Select Cretificate Purpose画面](http://blog.foobarhoge.com/images/StartSSL026.png)
証明書に紐付けるサブドメインを選んで次にいきます。
![Select Cretificate Purpose画面](http://blog.foobarhoge.com/images/StartSSL027.png)
確認画面が出ますので次にいきます。
![Select Cretificate Purpose画面](http://blog.foobarhoge.com/images/StartSSL028.png)
作成されたサーバー証明書が、テキストアリアの中に表示されますので、コピーしてfoobar.com.crtとファイル名を付けてセーブします。FinishをクリックするとThank you画面に遷移して終了です。
![Select Cretificate Purpose画面](http://blog.foobarhoge.com/images/StartSSL029.png)
サーバー側の設定
==============
証明書の作成が終了したならば、サーバー側のファイルを新しい証明書を使って更新します。
## 以前のファイルをバックアップ
~~~ term
$ su
# cd /etc/ssl/startssl
# cp foobar.jp.crt foobar.jp.crt.old
# cp imapd.pem imapd.pem.old
# cp postfix.pem postfix.pem.old
#
~~~
## 新しいサーバー証明書のコピー
~~~ term
# mv ~/foobar.jp.crt /etc/ssl/startssl
~~~
startSSLの証明書が無い場合はダウンロードしておくこと。
~~~ term
# cd /etc/ssl/startssl
# wget https://www.startssl.com/certs/ca.pem
# mv ca.pem startssl.ca.pem
# wget https://www.startssl.com/certs/sub.class1.server.ca.pem
# mv sub.class1.server.ca.pem starssl.sub.class1.server.ca.pem
# wget https://www.startssl.com/certs/ca-bundle.pem
# mv ca-bundle.pem startssl.ca-bundle.pem
#
~~~
## postfixの設定
~~~ term
# cat foobar.jp.crt startssl.sub.class1.server.ca.pem startssl.ca.pem > postfix.pem
~~~
/etc/postfix/main.cfには次の記述
~~~ file
smtpd_tls_cert_file = /etc/ssl/startssl/postfix.pem
smtpd_tls_key_file = /etc/ssl/private/server.key
~~~
リスタートして接続確認
~~~ term
# /etc/rc.d/postfix restart
# openssl s_client -connect localhost:smtps -CAfile /etc/ssl/startssl/startssl.sub.class1.server.ca.pem
~~~
## imapの設定
~~~ term
# cat /etc/ssl/private/server.key foobar.com.crt startssl.sub.class1.server.ca.pem startssl.ca.pem > imapd.pem
~~~
/etc/courier/imapd-sslには次の記述
~~~ file
TLS_CERTFILE=/etc/ssl/startssl/imapd.pem
~~~
リスタートして接続確認
~~~ term
# /etc/rc.d/courier_imap_ssl restart
# openssl s_client -connect localhost:imaps -CAfile /etc/ssl/startssl/startssl.sub.class1.server.ca.pem
~~~
-->
<p>先日、StartComの証明書を更新したのですが、忘れないように手順を残しておきます。</p><h1 id="section">コントロールパネルログイン用の証明書の更新</h1><p>StartComで作成した証明書の有効期限2週間前になるとメールが来ます。<br />メールは「コントロールパネルログイン用の証明書」と「サーバーのSSL証明書」の期限が来るのですが、文面が似ているので「コントロールパネルログイン用の証明書」の更新を忘れないようにしましょう。</p><h2 id="section-1">認証</h2><p><a href="https://www.startssl.com/?app=12">StartSSL™ Certificates & Public Key Infrastructure</a>のページに行き、Authenticateからログインします。<img src="http://blog.foobarhoge.com/images/StartSSL001.png" alt="証明書がインストールされていない場合" /></p><p>その際ブラウザに一年前に作成した「コントロールパネルログイン用の証明書」がインストールされている必要があります。
証明書がインストールされていないと、次のような画面が表示されます。<br />Operaには証明書がインストールされていなかったので、この画面が出てちょっと焦った。<br /><img src="http://blog.foobarhoge.com/images/StartSSL002.png" alt="証明書がインストールされていない場合" /></p><p>証明書がインストールされているブラウザで開くと証明書の要求ダイアログが出ますのでOKを選択します。<img src="http://blog.foobarhoge.com/images/StartSSL003.png" alt="証明書がインストールされている場合" /></p><p>無事認証が完了すると下記の画面が表示されますので”Control Panel”をクリックして進みます。<img src="http://blog.foobarhoge.com/images/StartSSL004.png" alt="認証後の画面" /></p><p>“Control Panel”画面に進むと下記の画面になりますので、”Validations Wizard”を選択します。<img src="http://blog.foobarhoge.com/images/StartSSL005.png" alt="Control Panel画面" /></p><h2 id="email-address-validation">Email Address Validation</h2><p>“Select Validation”画面が表示されますので、<em>Email Address Validation</em> を選択します。<br /><img src="http://blog.foobarhoge.com/images/StartSSL006.png" alt="Select Validation画面" /></p><p>“Enter Email Address”画面に移りますので、自分のメールアドレスを入力しContiuneを押下します。<img src="http://blog.foobarhoge.com/images/StartSSL007.png" alt="Enter Email Addres画面" /></p><p>“Complete Validation”画面が表示された後しばらくして、入力したメールアドレスにメールが送信されます<img src="http://blog.foobarhoge.com/images/StartSSL008.png" alt="Complete Validation画面" /></p><p>送信されたメールにはVerification Codeが送られてきます。</p><pre><code class="language-file">This mail is intended for the person who requested verification of email ownership at StartSSL™ (http://www.startssl.com).
Your verification code is XXXXXXXXXXXXXXXX
Copy and paste this code now into the form at your open browser window.
Thank you!
StartCom Ltd.
StartSSL™ Certification Authority</code></pre><p>ここに記載されているコードをVerification Codeに入力します。<img src="http://blog.foobarhoge.com/images/StartSSL009.png" alt="Verification Codeを入力" /></p><p>Verification Successの画面が出たら終了です。<br /><em>Email Address Validation</em>は30日間有効なので、その間に<em>Domain Name Validation</em>を行いクライアント証明書を入手する必要があります。<img src="http://blog.foobarhoge.com/images/StartSSL010.png" alt="Verification Success画面" /></p><h2 id="domain-name-validation">Domain Name Validation</h2><p>“Validations Wizard”を選択し”Select Validation”画面を表示させます。今度は<em>Domain Name Validation</em>を選択します。<img src="http://blog.foobarhoge.com/images/StartSSL011.png" alt="Domain Name Validationを選択" /></p><p>次にドメイン名を入力します。ここではトップレベルのドメイン名を入力します。たとえば foo.invalid.com の場合はinvalid.comを入力します。<img src="http://blog.foobarhoge.com/images/StartSSL012.png" alt="ドメイン名の入力" /></p><p>Verification Codeを送るメールアドレスを選択してContinueを押下します。(なんか文字化けしてるものがありますね。)<img src="http://blog.foobarhoge.com/images/StartSSL013.png" alt="ドメイン名の入力" /></p><p>“Complete Validation”画面が表示された後しばらくして、Email Address Validationと同様に選択したメールアドレスにメールが送信されます<img src="http://blog.foobarhoge.com/images/StartSSL014.png" alt="Complete Validation画面" /></p><p>送信されたメールにはVerification Codeが送られてきます。</p><pre><code class="language-file">This mail is intended for the person who requested verification of domain control at
StartSSL™ (http://www.startssl.com).
Your verification code is OOOOOOOOOOOO
Copy and paste this code now into the form at your open browser window.
Thank you!
StartCom Ltd.
StartSSL™ Certification Authority</code></pre><p>ここに記載されているコードをVerification Codeに入力します。<img src="http://blog.foobarhoge.com/images/StartSSL015.png" alt="Verification Codeを入力" /></p><p>Verification Successの画面が出たら終了です。<br /><em>Domain Name Validation</em>も30日間有効なので、30日以内にクライアント証明書を入手する必要があります。<img src="http://blog.foobarhoge.com/images/StartSSL010.png" alt="Verification Success画面" /></p><h2 id="section-2">クライアント証明書の更新</h2><p>Cerifications Wizardを選択して<em>Select Cretificate Purpose</em>画面を表示させ、”S/MIME and Authentication Certificate”の選択し次に進みます。<img src="http://blog.foobarhoge.com/images/StartSSL016.png" alt="Select Cretificate Purpose画面" /></p><p>Generate Private Key画面で”高強度の暗号化”を選んで次に進みます。<img src="http://blog.foobarhoge.com/images/StartSSL017.png" alt="Generate Private Key画面" /></p><p>Select Email Address画面では<em>Secure Hash Algorithm</em>を”SHA2”にして次に進みます。<img src="http://blog.foobarhoge.com/images/StartSSL018.png" alt="Select Email Address画面" /><br />これで成功すれば、Congratulations!画面になり、ブラウザにクライアント証明書が自動的にインストールされます。<img src="http://blog.foobarhoge.com/images/StartSSL019.png" alt="Congratulations画面" /></p><h2 id="section-3">クライアント証明書のバックアップ</h2><p>クライアント証明書が失われてしまった場合に、startSSLにログイン出来なくなりますので証明書のバックアップをしておきます。
Firefoxの詳細画面を表示して「証明書の表示」を押下します。</p><p><img src="http://blog.foobarhoge.com/images/StartSSL020.png" alt="Firefox詳細画面" /></p><p>先ほどインストールされた証明書を選択して、「バックアップ」押下しファイルへ保存します。</p><p><img src="http://blog.foobarhoge.com/images/StartSSL021.png" alt="証明書マネージャー画面" /></p><h1 id="section-4">サーバー証明書の更新</h1><p>Cerifications Wizardを選択して<em>Select Cretificate Purpose</em>画面を表示させ、”Web Server SSL/TLS Certificate”の選択し次に進みます。<img src="http://blog.foobarhoge.com/images/StartSSL022.png" alt="Select Cretificate Purpose画面" /></p><p>Generate Private Key画面では、Private Keyは以前サーバ上で作成したキーを再利用しますのでskipを押下して次に進みます。<img src="http://blog.foobarhoge.com/images/StartSSL023.png" alt="Select Cretificate Purpose画面" /></p><p>Submit Certificate Request画面では、以前作成した証明書署名要求ファイルserver.csrをフォームにコピペする。<img src="http://blog.foobarhoge.com/images/StartSSL024.png" alt="Select Cretificate Purpose画面" /><br />作成したファイルが見つからない場合は下記のようにして証明書署名要求ファイルserver.csrを再度作成します。</p><p>証明書要求の作成 手順(server.csr)</p><pre><code class="language-term">$ su
# cd /etc/ssl/private
サーバー秘密鍵の作成 (server.key)
# openssl genrsa -out server.key -aes256 4096
パスフレーズを削除
# openssl rsa -in server.key -out server.key
証明書要求の作成(server.csr)
# openssl req -new -key server.key -out server.csr
#</code></pre><p>証明書署名要求ファイルに問題が無ければ下記の画面が出ますので次にいきます。<img src="http://blog.foobarhoge.com/images/StartSSL025.png" alt="Select Cretificate Purpose画面" /></p><p>証明書に紐付けるドメインを選んで次にいきます。<img src="http://blog.foobarhoge.com/images/StartSSL026.png" alt="Select Cretificate Purpose画面" /></p><p>証明書に紐付けるサブドメインを選んで次にいきます。<img src="http://blog.foobarhoge.com/images/StartSSL027.png" alt="Select Cretificate Purpose画面" /></p><p>確認画面が出ますので次にいきます。<img src="http://blog.foobarhoge.com/images/StartSSL028.png" alt="Select Cretificate Purpose画面" /></p><p>作成されたサーバー証明書が、テキストアリアの中に表示されますので、コピーしてfoobar.com.crtとファイル名を付けてセーブします。FinishをクリックするとThank you画面に遷移して終了です。</p><p><img src="http://blog.foobarhoge.com/images/StartSSL029.png" alt="Select Cretificate Purpose画面" /></p><h1 id="section-5">サーバー側の設定</h1><p>証明書の作成が終了したならば、サーバー側のファイルを新しい証明書を使って更新します。</p><h2 id="section-6">以前のファイルをバックアップ</h2><pre><code class="language-term">$ su
# cd /etc/ssl/startssl
# cp foobar.jp.crt foobar.jp.crt.old
# cp imapd.pem imapd.pem.old
# cp postfix.pem postfix.pem.old
#</code></pre><h2 id="section-7">新しいサーバー証明書のコピー</h2><pre><code class="language-term"># mv ~/foobar.jp.crt /etc/ssl/startssl</code></pre><p>startSSLの証明書が無い場合はダウンロードしておくこと。</p><pre><code class="language-term"># cd /etc/ssl/startssl
# wget https://www.startssl.com/certs/ca.pem
# mv ca.pem startssl.ca.pem
# wget https://www.startssl.com/certs/sub.class1.server.ca.pem
# mv sub.class1.server.ca.pem starssl.sub.class1.server.ca.pem
# wget https://www.startssl.com/certs/ca-bundle.pem
# mv ca-bundle.pem startssl.ca-bundle.pem
#</code></pre><h2 id="postfix">postfixの設定</h2><pre><code class="language-term"># cat foobar.jp.crt startssl.sub.class1.server.ca.pem startssl.ca.pem > postfix.pem</code></pre><p>/etc/postfix/main.cfには次の記述</p><pre><code class="language-file">smtpd_tls_cert_file = /etc/ssl/startssl/postfix.pem
smtpd_tls_key_file = /etc/ssl/private/server.key</code></pre><p>リスタートして接続確認</p><pre><code class="language-term"># /etc/rc.d/postfix restart
# openssl s_client -connect localhost:smtps -CAfile /etc/ssl/startssl/startssl.sub.class1.server.ca.pem</code></pre><h2 id="imap">imapの設定</h2><pre><code class="language-term"># cat /etc/ssl/private/server.key foobar.com.crt startssl.sub.class1.server.ca.pem startssl.ca.pem > imapd.pem</code></pre><p>/etc/courier/imapd-sslには次の記述</p><pre><code class="language-file">TLS_CERTFILE=/etc/ssl/startssl/imapd.pem</code></pre><p>リスタートして接続確認</p><pre><code class="language-term"># /etc/rc.d/courier_imap_ssl restart
# openssl s_client -connect localhost:imaps -CAfile /etc/ssl/startssl/startssl.sub.class1.server.ca.pem</code></pre>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-80005081788455870372013-04-12T23:03:00.001+09:002013-04-12T23:18:23.066+09:00Markdownを使う環境を整えてみた<!-- -*- HTML -*-
素のhtmlを使って書くより、`Markdown`を使用した方がblogやドキュメントが書きやすそうなので、`Markdown`を使用する環境を整えてみました。
Markdownのインストール
===================
`Markdown`はオリジナルの表記を拡張した、派生バージョンがあるらしいけれど、まずはオリジナルである`Markdown.pl`インストールしてみました。
Markdown.plをインストールする
-------------------------------
最初に[Markdown](http://daringfireball.net/projects/markdown/ "Daring Fireball: Markdown")のサイトよりMarkdown.plをダウンロードし、インストールします。
~~~ term
# wget http://daringfireball.net/projects/downloads/Markdown_1.0.1.zip
# unzip Markdown_1.0.1.zip
# cd Markdown_1.0.1
# chmod 755 Markdown.pl
# mv Markdown.pl /usr/local/bin/Markdown
#
~~~
試しにmarkdown.plを使用していくつかの文章を書いてみましたが、ちょっと凝った構造の文章を書こうとすると、HTMLを使わないと表現できなかったりするので、ちょっと貧弱かなと思いました。
kramdown コマンドのインストール
------------------------------
もう少し表現力高いものが欲しいので、シンタクスを拡張したバージョンを使ってみようかと色々と調べてみると、`kramdown`が機能が豊富で使いやすそうなので、これをインストールしてみました。
~~~ term
$ sudo gem install kramdown
Password:
Successfully installed kramdown-0.14.2
1 gem installed
Installing ri documentation for kramdown-0.14.2...
Installing RDoc documentation for kramdown-0.14.2...
$
~~~
これで、`/usr/bin/kramdown`にインストールされます。
[kramdownのドキュメント](http://kramdown.rubyforge.org/documentation.html)を見ると、かなり拡張されていて表現力もオリジナルよりアップしています。これならばHTMLタグに頼らなくても大体の文章は書けるのでは無いかと思います。
MarsEditでkramdownを使いプレビューさせる設定
========
MarsEditはデフォルトでmarkdown表記のプレビューが可能ですが、これはMarkdown.plを使用してプレビューを行っています。このため、kramdownの拡張シンタックスを使うとうまく表示できません。
そこで、markdownのプレビューに`kramdown`を使うように設定します。
`{$HOME}/Library/Application Support/MarsEdit/TextFilters/kramdown`に`kramdown`ディレクトリを作成し、そこにShell Script ファイル`kramdown.sh`を作成します。
~~~ term
$ midir $HOME/Library/Application\ Support/MarsEdit/TextFilters/kramdown/
$ cd $HOME/Library/Application\ Support/MarsEdit/TextFilters/kramdown/
$ vi kramdown.sh
~~~
`kramdown.sh`の内容は下記のようにします。
~~~ file
#! /bin/sh
CMD=/usr/bin/kramdown
CMDARGS="--auto-ids"
$CMD $CMDARGS $1
~~~
`CMDARGS`に設定するオプションはコマンドラインで`kramdown --help`とすると出てきますので、お好みで指定します。
ファイルの作成が完了したならば、プレビュー画面左下にある*Preview Text Filter*プルダウンを__karmdown__にすれば、kramdownの拡張シンタックスが正常にレンダリングされます。
![karmdown でプレビュー](http://blog.foobarhoge.com/images/20130412.jpg "karmdown でプレビュー")
emacsの設定
===================
emacsからもmarkdownを扱えるようにmarkdown-mode.elをインストール・設定をします。
markdown-mode.elのインストール
------------------
[Emacs Markdown Mode](http://jblevins.org/projects/markdown-mode/)のサ
イトよりmarkdown-mode.elをダウンロードしてelispのディレクトリに置きま
す。
~~~ term
$ cd ~/.elisp
$ wget http://jblevins.org/projects/markdown-mode/markdown-mode.el
$
~~~
.emacs.elの編集
----------
.emacs.elに下記のコードを追加します。
~~~ lisp
;;==========================================================
;; Markdown モードの設定
;;==========================================================
(autoload 'markdown-mode "markdown-mode"
"Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.\\(text\\|md\\|mdwn\\|mdt\\)\\'" . markdown-mode))
(defun markdown-custom ()
"markdown-mode-hook"
(auto-fill-mode -1)
(setq markdown-command "/usr/bin/kramdown")) ;; コマンドパスの設定
(add-hook 'markdown-mode-hook '(lambda() (markdown-custom)))
~~~
-->
<p>素のhtmlを使って書くより、<code>Markdown</code>を使用した方がblogやドキュメントが書きやすそうなので、<code>Markdown</code>を使用する環境を整えてみました。</p>
<h1 id="markdown">Markdownのインストール</h1>
<p><code>Markdown</code>はオリジナルの表記を拡張した、派生バージョンがあるらしいけれど、まずはオリジナルである<code>Markdown.pl</code>インストールしてみました。</p>
<h2 id="markdownpl">Markdown.plをインストールする</h2>
<p>最初に<a href="http://daringfireball.net/projects/markdown/" title="Daring Fireball: Markdown">Markdown</a>のサイトよりMarkdown.plをダウンロードし、インストールします。</p>
<pre><code class="language-term"># wget http://daringfireball.net/projects/downloads/Markdown_1.0.1.zip
# unzip Markdown_1.0.1.zip
# cd Markdown_1.0.1
# chmod 755 Markdown.pl
# mv Markdown.pl /usr/local/bin/Markdown
#
</code></pre>
<p>試しにmarkdown.plを使用していくつかの文章を書いてみましたが、ちょっと凝った構造の文章を書こうとすると、HTMLを使わないと表現できなかったりするので、ちょっと貧弱かなと思いました。</p>
<h2 id="kramdown-">kramdown コマンドのインストール</h2>
<p>もう少し表現力高いものが欲しいので、シンタクスを拡張したバージョンを使ってみようかと色々と調べてみると、<code>kramdown</code>が機能が豊富で使いやすそうなので、これをインストールしてみました。</p>
<pre><code class="language-term">$ sudo gem install kramdown
Password:
Successfully installed kramdown-0.14.2
1 gem installed
Installing ri documentation for kramdown-0.14.2...
Installing RDoc documentation for kramdown-0.14.2...
$
</code></pre>
<p>これで、<code>/usr/bin/kramdown</code>にインストールされます。</p>
<p><a href="http://kramdown.rubyforge.org/documentation.html">kramdownのドキュメント</a>を見ると、かなり拡張されていて表現力もオリジナルよりアップしています。これならばHTMLタグに頼らなくても大体の文章は書けるのでは無いかと思います。</p>
<h1 id="marseditkramdown">MarsEditでkramdownを使いプレビューさせる設定</h1>
<p>MarsEditはデフォルトでmarkdown表記のプレビューが可能ですが、これはMarkdown.plを使用してプレビューを行っています。このため、kramdownの拡張シンタックスを使うとうまく表示できません。</p>
<p>そこで、markdownのプレビューに<code>kramdown</code>を使うように設定します。</p>
<p><code>{$HOME}/Library/Application Support/MarsEdit/TextFilters/kramdown</code>に<code>kramdown</code>ディレクトリを作成し、そこにShell Script ファイル<code>kramdown.sh</code>を作成します。</p>
<pre><code class="language-term">$ midir $HOME/Library/Application\ Support/MarsEdit/TextFilters/kramdown/
$ cd $HOME/Library/Application\ Support/MarsEdit/TextFilters/kramdown/
$ vi kramdown.sh
</code></pre>
<p><code>kramdown.sh</code>の内容は下記のようにします。</p>
<pre><code class="language-file">#! /bin/sh
CMD=/usr/bin/kramdown
CMDARGS="--auto-ids"
$CMD $CMDARGS $1
</code></pre>
<p><code>CMDARGS</code>に設定するオプションはコマンドラインで<code>kramdown --help</code>とすると出てきますので、お好みで指定します。</p>
<p>ファイルの作成が完了したならば、プレビュー画面左下にある<em>Preview Text Filter</em>プルダウンを<strong>karmdown</strong>にすれば、kramdownの拡張シンタックスが正常にレンダリングされます。</p>
<p><img src="http://blog.foobarhoge.com/images/20130412.jpg" alt="karmdown でプレビュー" title="karmdown でプレビュー" /></p>
<h1 id="emacs">emacsの設定</h1>
<p>emacsからもmarkdownを扱えるようにmarkdown-mode.elをインストール・設定をします。</p>
<h2 id="markdown-modeel">markdown-mode.elのインストール</h2>
<p><a href="http://jblevins.org/projects/markdown-mode/">Emacs Markdown Mode</a>のサ
イトよりmarkdown-mode.elをダウンロードしてelispのディレクトリに置きま
す。</p>
<pre><code class="language-term">$ cd ~/.elisp
$ wget http://jblevins.org/projects/markdown-mode/markdown-mode.el
$
</code></pre>
<h2 id="emacsel">.emacs.elの編集</h2>
<p>.emacs.elに下記のコードを追加します。</p>
<pre><code class="language-lisp">;;==========================================================
;; Markdown モードの設定
;;==========================================================
(autoload 'markdown-mode "markdown-mode"
"Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.\\(text\\|md\\|mdwn\\|mdt\\)\\'" . markdown-mode))
(defun markdown-custom ()
"markdown-mode-hook"
(auto-fill-mode -1)
(setq markdown-command "/usr/bin/kramdown")) ;; コマンドパスの設定
(add-hook 'markdown-mode-hook '(lambda() (markdown-custom)))
</code></pre>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-69549674108271802622013-04-11T01:01:00.001+09:002013-04-11T01:06:52.375+09:00デザインを変えてみた。<!-- -*- HTML -*-
今までのデザインは、幅が狭くて大きめな画像を張ったりすると、はみ出してしまっていたのでレイアウトを変えたいと思ってた。
また、最近Markdowsでドキュメント等を書き始め出して、すごく簡単に書けるのでもっと早くから使っておけばと後悔したりしました。
現在のデザインをかえるならば、cssもいじりまわしてMarkdownが出力するHTMLに最適化したページにして、今後はMarkdownでBlogを書こうと思い2日ほどグダグダといじくり回して出来たのが現在のデザインです。
![新デザイン](http://blog.foobarhoge.com/images/20130411.jpg "新デザイン")
bloggerのtemplate siteからひな形となるテンプレートを選んで、修正しまくっていたのでエラい時間がかかりましたが、概ね満足なデザインになったと思います。
-->
<p>今までのデザインは、幅が狭くて大きめな画像を張ったりすると、はみ出してしまっていたのでレイアウトを変えたいと思ってた。
また、最近Markdowsでドキュメント等を書き始め出して、すごく簡単に書けるのでもっと早くから使っておけばと後悔したりしました。</p>
<p>現在のデザインをかえるならば、cssもいじりまわしてMarkdownが出力するHTMLに最適化したページにして、今後はMarkdownでBlogを書こうと思い2日ほどグダグダといじくり回して出来たのが現在のデザインです。</p>
<p><img src="http://blog.foobarhoge.com/images/20130411.jpg" alt="新デザイン" title="新デザイン" /></p>
<p>bloggerのtemplate siteからひな形となるテンプレートを選んで、修正しまくっていたのでエラい時間がかかりましたが、概ね満足なデザインになったと思います。</p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-77619334740628243242013-04-06T23:50:00.001+09:002013-04-07T00:44:38.930+09:00MacをSyslog Serverにする方法<p>リモートでSyslogを取りたい場面があって、手元にあるMac miniで取れば良いじゃんと思い方法を調べてみました。</p>
<p>最初にlaunchdの設定を簡単にできるアプリ<a href="http://www.macwelt.de/downloads/Lingon-2-1-2941008.html">Lingon</a>をインストールします。</p>
<p>launchdを立ち上げると下記のような画面が出てきます。ここで、サイドメニューにある<em>SYSYTEM DAEMONS</em>をマウスオーバーするとSHOWと言う文字が現れますのでこれをクリックします。</p>
<img src="http://blog.foobarhoge.com/images/20130406_1.png" style="display:block;margin:0px auto;padding-bottom:1em;" alt="" />
<p>クリックすると隠れていたデーモンの一覧が出てきますので、<em>com.apple.syslogd</em>を探してクリックします。</p>
<img src="http://blog.foobarhoge.com/images/20130406_2.png" style="display:block;margin:0px auto;padding-bottom:1em;" alt="" />
<p>次に画面右下にある<em>Expert Mode</em>ボタンを押下してエキスパートモードにします。</p>
<img src="http://blog.foobarhoge.com/images/20130406_3.png" style="display:block;margin:0px auto;padding-bottom:1em;" alt="" />
<p>この画面で、下記の赤色で書かれた部分を追加します。</p>
<div class="code"><pre>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnableTransactions</key>
<true/>
<key>EnvironmentVariables</key>
<dict>
<key>ASL_DISABLE</key>
<string>1</string>
</dict>
<key>HopefullyExitsLast</key>
<true/>
<key>JetsamProperties</key>
<dict>
<key>JetsamMemoryLimit</key>
<integer>300</integer>
<key>JetsamPriority</key>
<integer>-49</integer>
</dict>
<key>Label</key>
<string>com.apple.syslogd</string>
<key>MachServices</key>
<dict>
<key>com.apple.system.logger</key>
<true/>
</dict>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/syslogd</string>
</array>
<key>Sockets</key>
<dict>
<span class="comment"><key>NetworkListener</key>
<dict>
<key>SockServiceName</key>
<string>syslog</string>
<key>SockType</key>
<string>dgram</string>
</dict></span>
<key>AppleSystemLogger</key>
<dict>
<key>SockPathMode</key>
<integer>438</integer>
<key>SockPathName</key>
<string>/var/run/asl_input</string>
</dict>
<key>BSDSystemLogger</key>
<dict>
<key>SockPathMode</key>
<integer>438</integer>
<key>SockPathName</key>
<string>/var/run/syslog</string>
<key>SockType</key>
<string>dgram</string>
</dict>
</dict>
</dict>
</plist>
</pre>
</div>
<p>編集が終了したら、左上にある<em>save</em>ボタンを押下して保存します。保存後下記のコマンドを実行してsyslogdを再起動させます。</p>
<div class="screen">
<pre>
$ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist
$ sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist
$
</pre>
</div>
<p>あとはクライアントの設定を行えば、コンソール.appにクライアントのログが記録されます。今回はMac OSX 10.7.5で行いましたが、他のバージョンでも出来ると思います。</p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-40453150686664053462012-11-29T23:26:00.001+09:002012-11-29T23:53:09.076+09:00外苑前銀杏並木<p>外苑前の銀杏並木を見てきました。一部黄色になっていない部分はありましたが、概ね見頃な状態でした。</p>
<img src="http://blog.foobarhoge.com/images/20121129_1.jpg" style="display:block;margin:0px auto;padding-bottom:1em;" alt="銀杏並木1" />
<img src="http://blog.foobarhoge.com/images/20121129_2.jpg" style="display:block;margin:0px auto;padding-bottom:1em;" alt="銀杏並木1" />
<img src="http://blog.foobarhoge.com/images/20121129_3.jpg" style="display:block;margin:0px auto;padding-bottom:1em;" alt="銀杏並木1" />
<img src="http://blog.foobarhoge.com/images/20121129_4.jpg" style="display:block;margin:0px auto;padding-bottom:1em;" alt="銀杏並木1" />
<img src="http://blog.foobarhoge.com/images/20121129_5.jpg" style="display:block;margin:0px auto;padding-bottom:1em;" alt="銀杏並木1" />
<img src="http://blog.foobarhoge.com/images/20121129_6.jpg" style="display:block;margin:0px auto;padding-bottom:1em;" alt="銀杏並木1" />yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-64672263929938622272012-11-06T00:59:00.001+09:002012-11-06T00:59:50.083+09:00emacs24にしたらマウスでコピペの挙動が変わった<p>emacs24にしたらマウスでコピペの挙動が変わってしまった。以前はマウスで選択するとクリップボードにコピーされ、マウスの真ん中ボタンでペーストされていたのだが出来なくなってしまった。</p>
<p>どうやらその辺のデフォルト設定が変更になったらしいので、以前の動作に戻すため下記の設定を追加した。</p>
<div class="code"><pre>
(setq x-select-enable-clipboard nil)
(setq x-select-enable-primary t)
(setq select-active-regions t)
(setq mouse-drag-copy-region t)
(global-set-key [mouse-2] 'mouse-yank-at-click)
</pre>
</div>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-33731894538443297112012-11-04T22:43:00.001+09:002012-11-04T22:43:55.321+09:00スピーカ FOSTEX PM0.3を購入<p>最近はInternet Radioばかり聴いている訳なのですが、以前はSANSUI AU-α607LのアンプにAppleTVを繋いで、BOSE cubeスピカーから音を出していました。しかし、Internet Radioから流れる音楽はビットレートはそれほど高くありません。むしろ、音楽聴くのもiPhoneやMacからairplayで鳴らしているので、オーバースペックな気がするし機材が場所とっていて狭いので、現状の構成を取っ払って最小構成にしようと思いました。</p>
<p>スペースの確保を優先したかったので、アンプ内蔵のPCスピーカから幾つか候補を絞りました。最初に候補にあがったのが「BOSE Companion2 II マルチメディアスピーカー」でした。BOSE cubeを使用していたのと、Jazzを主に聴くのでドンシャリ系にチューニングされていると言うのも選んだ要因でした。</p>
<img src="http://blog.foobarhoge.com/images/20121104_1.png" style="display:block;margin:0px auto;" alt="BOSE Companion2 II マルチメディアスピーカー" />
<p>次の候補はFOSTEX パーソナル・アクティブスピーカー・システム PM0.3です。FOSTEXと言うメーカは正直知らなかったのですが、国内のメーカでスタジオ・モニター等のスピカーを作っている所らしく、癖がない音を出すと言うのがネット上の評価でした。</p>
<img src="http://blog.foobarhoge.com/images/20121104_2.png" style="display:block;margin:0px auto;" alt="FOSTEX パーソナル・アクティブスピーカー・システム PM0.3" />
<p>FOSTEXと言うメーカに興味を持ったのと、8,000円弱という価格を鑑み、FOSTEX PM0.3を選択しました。しばらく使用して見た感想は</p>
<ul>
<li>高音から中音の音がすごく良い。ボーカル・トランペット・サックス・ピアノが前に出てくる感じ</li>
<li>低音も普通に頑張っています。ベースのソロの時はちゃんと存在感が出ている音です。低音中毒で低音が足らないと聴いた気がしないという人以外は問題無いレベルだと思います。</li>
<li>少人数の演奏や音が少ない音楽だと活き活きとした音が出ます。ピアノトリオやグレン・グールドのバッハはやばいです。</li>
<li>逆にクラッシックのオケや音が多い音楽では、ぼやけた感じの音になります。ドビュッシーの「喜びの島」を聴いたときは音が多すぎて、音楽が後ろに下がってしまているような印象を受けました。</li>
<li>LEDが眩しい。潰したくなりますw</li>
</ul>
<p>FOSTEX PM0.3は価格の割には、とてもバランスの良い音を出します。買って正解だったと思います。</p>
<p>牛肉にたとえるならば、BOSE等が"ドンシャリ系"は巧みに調整された脂の乗った霜降り肉の神戸牛とするならば、FOSTEX PM0.3は自然の中で育った脂は少ないが適度に柔らかいアルゼンチン牛と言うところでしょうか。(両方とも食べたことは無いが……)</p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-32331000611493326562012-10-28T21:22:00.001+09:002012-10-28T21:22:30.454+09:00最近、よく聴いているInternet Radioの一覧<p>JazzのCDは1000枚近く持っているが、最近はどれを聴こうかとセレクトするのも面倒臭く、いざ選んだCDを聴いていてもマンネリ気味で、聴いていても気分が乗ってこない。</p>
<p>そういう訳で、最近はJazz系のInternet RadioをiTunesのプレイリストに登録し、AirPlayでスピーカーに飛ばし聴いている。これならば、気に入らない曲が流れていても、ザッピングして別の曲を選ぶ事が出来る。音質もそれなりに良いので、作業をしながら聴くには申し分がない。</p>
<p>特によく聴くのは下記の局です。</p>
<dl>
<dt><a href="http://www.jazzradio.com/">JAZZRADIO.com</a></dt>
<dd>Jazz専門のラジオ局。Jazzカテゴリー毎にチャンネルが分かれているので、「Modern Jazzが聴きたいのに途中からFusionに変わっていた。」などと言うことが単一局ではありがちなのですが、それが無いのが良いです。プレミアメンバの入会を勧誘するおねーさんの声がハスキーでセクシーと個人的に思っている。</dd>
<dt><a href="http://www.sky.fm/">SKY.FM</a></dt>
<dd>Jazz,Rock,rap,Classicalなの様々チャンネルに分かれています。Jpopなんてのもある。Jazzの選曲も悪くないです。</dd>
<dt><a href="https://calmradio.com/channels/">calmradio.com</a></dt>
<dd>iTunesのラジオライブラリーの中にサンプルとして入っていたのですが結構良いです。サイトを見に行くと沢山のチャンネルがありますが、iTunesで聴くためには有料会員にならないと駄目っぽい。<a href="https://itunes.apple.com/jp/app/calm-radio-for-iphone-ipod/id389241651?mt=8">iPhone</a>,<a href="https://itunes.apple.com/jp/app/calmradio-multimix-for-ipad/id434986866?mt=8">iPad</a>を持っているならば、専用のiアプリがあって無料で聴けるみたいですが、AirPlayが出来ない様なので微妙かな。</dd>
<dt><a href="http://www.radioswissjazz.ch/en">Radio Swiss Jazz</a></dt>
<dd>スイスのラジオ局だけあって、英語、ドイツ語、フランス語のアナウンスがあったりする。気に入った局があった場合は、Web Siteに行けば番組プログラム表に購入ボタンがあるので、そこからamazonなどで購入が出来るのが便利。</dt>
<dt><a href="http://www.tsfjazz.com/accueil.php">TSF Jazz</a></dt>
<dd>フランスのラジオ局。フランスらしいセンス良さと、フランスらしいダサさが混じった局。特に局の間に入るCMはダサさ満点w</dt>
</dl>
<p>他にも良いラジオ局はあるので、自分の<a href="http://blog.foobarhoge.com/files/JazzInternetRadios.txt">iTunesプレイリスト</a>を公開しておきます。[ファイル]->[ライブラリ]->[プレイリストを読み込み]でインポートが出来ると思います。</p>
yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-85760161128629409802012-09-12T11:20:00.001+09:002012-09-12T11:20:14.495+09:00マウリッツハイス美術館展に行ってきた。<p>仕事が忙しくて行けなかった、マウリッツハイス美術館展に行ってきました。ネットで混雑状況を調べてみると異様に混雑しているようですね。以前、Bunkamura ザ・ミュージアムで開催していた<a href="http://www.bunkamura.co.jp/museum/exhibition/11_loveletter.html">フェルメールからのラブレター展</a>を見に行ったときは、それほど混雑していなかったので、やはり「真珠の耳飾りの少女」の知名度が大きいのでしょうか?</p>
<img src="http://blog.foobarhoge.com/images/20120912_1.png" style="display:block;margin:0px auto;" alt="マウリッツハイス美術館展戦利品" />
<p>自分は、混雑した美術館が大嫌いなので行くことを迷っていたのですが、ネットの情報によると夕方は比較的空いている・8/11から20:00まで開室が延長される。との事なので、閉室間近に行けばゆっくり鑑賞できるのではと、夕方に行ってきました。</p>
<p>延長初日の8/11の6:15頃に美術館に到着、待ち時間は無しで入ることが出来、やはり読みは正しかった!館内は多少混雑はしていましたが、うんざりするほどの混み具合ではなく、空いている絵画から見ていけば全面でゆっくり鑑賞出来ました。</p>
<p>「真珠の耳飾りの少女」の絵の所はさすがに込んでいてたので、後回しにして他の絵画を鑑賞し閉室20分頃に「真珠の耳飾りの少女」の所に行くと、かなり空いていました。「真珠の耳飾りの少女」は「歩きながら止まらないで近くを鑑賞ルート」と「じっくり二歩ほど下がったエリアで鑑賞」の2方式があるのですが、この時間になると「歩きながら止まらないで近くを鑑賞ルート」は行列無しですぐ見ることができます。その後「じっくり二歩ほど下がったエリアで鑑賞」の最前列でゆっくり鑑賞。まさに"至福の時間"を味合うことができました。</p>
<img src="http://blog.foobarhoge.com/images/20120912_2.png" style="display:block;margin:0px auto;" alt="ギャラリーフェイク 「メトロポリタンの一夜」より" />yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-63204947113273684142012-08-25T17:37:00.001+09:002012-08-25T17:37:28.168+09:00Smartyでclass定数(const)を表示する方法。<p>先日、phpのconstをsmartyで表示させようと思って苦戦したので、備忘録として書いておきます。</p>
<p>php側に下記のクラスが定義されていたとします。</p>
<div class="code">
<pre><?php
class Hoge{
const firstname = 'foo';
const lastname = 'bar';
}
>
</pre>
</div>
<p>これをSmartyのテンプレートで表示するには次のようにします。assignはしなくてもアクセス出来る様です。</p>
<div class="code">
<pre><div>firstname:{"Hoge::firstname"|constant}</div>
<pre><div>lastame:{"Hoge::lastname"|constant}</div>
</pre>
</div>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-22765083467282807422012-06-16T14:09:00.001+09:002012-06-16T14:09:18.974+09:00Emacs nxml-modeの色設定<p>Emacsを23.4にしたら、nxml-modeのカラー表示設定が有効にならなくなってしまったので再設定しなおしてみた。</p>
<pre class="code">
(custom-set-faces
<span class="comment">;; xml-validate</span>
'(rng-error
((t (:foreground "red" :weight bold)))) <span class="comment">;; エラー部分</span>
'(nxml-name
((t (:foreground "#AACF53")))) <span class="comment">;; </span>
'(nxml-text
((t (:foreground "#AFAFB0")))) <span class="comment">;; テキスト</span>
'(nxml-ref
((t (:foreground "#FF6A6A" :weight bold)))) <span class="comment">;; 参照文字の親定義</span>
'(nxml-delimiter
((t (:foreground "#FFFAFA")))) <span class="comment">;; delimiterの親定義</span>
'(nxml-delimited-data
((t (:foreground "#9B30FF")))) <span class="comment">;; delimiter内データの親定義</span>
<span class="comment">;; xml宣言タグ</span>
'(nxml-processing-instruction-target
((t (:foreground "#C7DC68")))) <span class="comment">;; xml宣言</span>
'(nxml-processing-instruction-delimiter
((t (:foreground "#E9DFE5")))) <span class="comment">;; xmlタグのdelimiter(<? ?>)</span>
'(nxml-processing-instruction-content
((t (:foreground "#9B30FF")))) <span class="comment">;; ???</span>
<span class="comment">;; DOCTYPEタグ</span>
'(nxml-prolog-literal-delimiter
((t (:foreground "#AFAFB0")))) <span class="comment">;; DOCTYPE内のdelimiter(")</span>
'(nxml-prolog-literal-content
((t (:foreground "#82AE46")))) <span class="comment">;; DOCTYPEの内容</span>
'(nxml-prolog-keyword
((t (:foreground "#C1E4E9")))) <span class="comment">;; DOCTYPE内のkeyword</span>
'(nxml-markup-declaration-delimiter
((t (:foreground "#E9DFE5")))) <span class="comment">;; DOCTYPEタグのdelimiter(<! >)</span>
<span class="comment">;; htmlタグ</span>
'(nxml-namespace-attribute-xmlns
((t (:foreground "#FF8247")))) <span class="comment">;; xmlns属性</span>
'(nxml-namespace-attribute-prefix
((t (:foreground "#FF8247")))) <span class="comment">;; xmlns属性のprefix(xmlns:math)</span>
<span class="comment">;; '(nxml-namespace-attribute-colon
;; ((t (:foreground "#FFFAFA")))) ;; namespace属性のcolon</span>
'(nxml-namespace-attribute-value
((t (:foreground "#AFAFB0")))) <span class="comment">;; namespace属性値</span>
'(nxml-namespace-attribute-value-delimiter
((t (:foreground "#AFAFB0")))) <span class="comment">;; namespace属性のdelimiter(")</span>
<span class="comment">;; CDATA</span>
'(nxml-cdata-section-delimiter
((t (:foreground "#D9333F")))) <span class="comment">;; <![xxxx[ ]]></span>
'(nxml-cdata-section-CDATA
((t (:foreground "#D9333F")))) <span class="comment">;; CDATAの文字</span>
'(nxml-cdata-section-content
((t (:foreground "#AFAFB0")))) <span class="comment">;; CDATAの内容</span>
'(nxml-tag-delimiter
((t (:foreground "#E9DFE5")))) <span class="comment">;; tagのdelimiter(< >)</span>
'(nxml-tag-slash
((t (:foreground "#E9DFE5")))) <span class="comment">;; tagのスラッシュ</span>
<span class="comment">;;'(nxml-element-prefix
;; ((t (:foreground "#884898"))))
;;'(nxml-element-colon
;; ((t (:foreground "#884898"))))</span>
'(nxml-element-local-name
((t (:foreground "#E6B422" :weight bold)))) <span class="comment">; 要素名</span>
'(nxml-attribute-prefix
((t (:foreground "#C97586")))) <span class="comment">;; 属性のprefix(xml:lang)</span>
<span class="comment">;; '(nxml-attribute-colon
;; ((t (:foregroud "#9B30FF")))) ;; 属性のコロン</span>
'(nxml-attribute-local-name
((t (:foreground "#C97586")))) <span class="comment">;; 属性名など</span>
'(nxml-attribute-value
((t (:foreground "#82AE46")))) <span class="comment">;; 属性値</span>
'(nxml-attribute-value-delimiter
((t (:foreground "#AFAFB0")))) <span class="comment">;; 属性値のdelimiter(")</span>
'(nxml-comment-delimiter
((t (:foreground "#D9333F")))) <span class="comment">; コメントのdelimiter(<!-- -->)</span>
'(nxml-comment-content
((t (:foreground "#D9333F")))) <span class="comment">;; コメント内容</span>
<span class="comment">;; 参照文字
;; '(nxml-entity-ref-name
;; ((t (:foreground "#FF6A6A")))) ;; entity名 (<)
;; '(nxml-entity-ref-delimiter
;; ((t (:foreground "#FF6A6A")))) ;; entityのdelimiter(&xx;)
;; '(nxml-char-ref-number
;; ((t (:foreground "#FF6A6A")))) ;; 文字実体参照の番号 (&#160;)
;; '(nxml-char-ref-delimiter
;; ((t (:foreground "#FF6A6A")))) ;; 文字実体参照のdelimiter(&#xxx;)</span>
'(nxml-hash
((t (:foreground "#9B30FF"))))
'(nxml-glyph
((t (:foreground "#9B30FF"))))
)
</pre>
<p>下記の様な配色にしていみました。</p>
<img src="http://blog.foobarhoge.com/images/20120616.png" style="display:block;margin:0px auto;" alt="配色" />yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-33274085231292605482012-04-07T23:23:00.001+09:002012-04-07T23:25:36.039+09:00新さくらのVPSにOpenBSDをインストール<p>さくらのVPSに<a href="http://www.sakura.ad.jp/news/sakurainfo/newsentry.php?id=620">新しいプラン</a>が発表されました。価格が一番安い「さくらのVPS 1G」はHDDが100GBになり、現在契約しているプランの5倍の容量、メモリーは2倍の容量となりお得感が大きいですね。さらに、<a href="http://www.sakura.ad.jp/news/sakurainfo/newsentry.php?id=628">乗り換え優遇キャンペーン中</a>で一ヶ月利用料が無料となるので飛びついてみた訳ですが…</p>
<h1>新さくらのVPSはOpenBSDはインストールできない?</h1>
<p>いえ、できます。</p>
<p>正確には、<a href="http://d.hatena.ne.jp/syuu1228/20101221/1292952842">驟雨のカーネル探検隊</a>さんの所で紹介されていた方法では出来ませんでした。前回インストールしたときは、Ubuntuを再インストールしてGRUB2からOpenBSDのインストーラを立ち上げる方法を取っていました。</p>
<p>今回も、その方法でインストールを試みました。しかしこの方法では、ブートはするのですがHDDを認識しなくなってしまいました。ブート時のメッセージを見ると、旧サービスではI/Oの仮想化に<a href="http://ja.wikipedia.org/wiki/QEMU">QEMU</a>が使われている?ようですが、新サービスではに、<a href="http://www.ibm.com/developerworks/jp/linux/library/l-virtio/">virtio</a>が使われるようになったらしく、OpenBSDがvirtioを認識できないのでHDDが見えていなかったようです。</p>
<h1>FreeBSDからインストールしよう。</h1>
<span>色々調べてみると、新さくらのVPSにFreeBSDをインストールするとQEMUが使われる事がわかりました。FreeBSDのブートメッセージを見ると下記の様に"QEMU HARDDISK"と出力されています。</span>
<img src="http://blog.foobarhoge.com/images/20120407_4.png" style="display:block;margin:0px auto;width:550px;" alt="FreeBSDのdmesg" />
<p>ならば、FreeBSDからインストールすればいいんじゃね? と言う事で次のような手順でインストールしてみました。</p>
<ol>
<li>FreeBSDをインストール</li>
<li>FreeBSD上にGRUB2をインストール</li>
<li>GRUB2からOpenBSDのインストーラをキックする</li>
<li>OpenBSDをインストール</li>
</ol>
<p>インストールのベースがUbuntuがFreeBSDに変わっただけですね。</p>
<h2>FreeBSDをインストール</h2>
<p><a href="http://support.sakura.ad.jp/manual/vps/mainte/custom_freebsd.html">カスタムOSインストールガイド FreeBSD編</a>に従ってインストールします。インストールしたものはすぐ消えてしまうので適当で構いません。パーティションの設定はおまかせ・インストールもミニマムで問題無いです。</p>
<h2>FreeBSD上にGRUB2をインストール</h2>
<p>インストールが終了したらGRUB2のインストールを行います。最初に必要なパッケージをftpでダウンロードしてきます。</p>
<div class="screen">
<pre>
# ftp ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/devel/libiconv-1.13.1_1.tbz
# ftp ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/devel/gettext-0.18_1.tbz
# ftp ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/amd64/packages-<span class="comment">9.0</span>-release/sysutils/<span class="comment">grub2-1.98_1.tbz</span>
#
</pre>
</div>
<p>ここで注意するのが、<span style="font-weight:bold;">「”grub2はpackages-8.1-release”でなく”packages-9.0-release”のパッケージを使用する。」</span>と言うことです。</p>
<p>自分の環境では、packages-8.1-releaseのパッケージを使用するとgrub-installコマンドがエラーになり、grubがインストール出来ませんでした。</p>
<div class="screen">
<pre>
# grub-install /dev/ad0
/usr/local/sbin/grub-probe: error: cannot find a device for /boot/grub (is /dev mounted?).
No path or device is specified.
Try `/usr/local/sbin/grub-probe --help' for more information.
Auto-detection of a filesystem module failed.
Please specify the module with the option `--modules' explicitly.
#
</pre>
</div>
<p>必要なファイルがダウンロード出来たならばインストールします。</p>
<div class="screen">
<pre>
# pkg_add libiconv-1.13.1_1.tbz gettext-0.18_1.tbz grub2-1.98_1.tbz
pkg_add: warning: package 'grub2-1.98_1' requires 'gettext-0.18.1.1', but 'gettext-0.18_1' is installed
#############################################################
To install GRUB on the master boot record of your hard drive
use 'grub-install <drive-to-install>' command.
A typical menu entry in /boot/grub/grub.cfg for FreeBSD:
menuentry "FreeBSD" {
set root(hd0,1,a)
kfreebsd /boot/loader
}
Or use grub-mkconfig to create the config file.
#############################################################
#
</pre>
</div>
<p>ワーニングが出ますが気にせず、grubをインストールします。</p>
<div class="screen">
<pre>
# grub-install /dev/ad0
Installation finished. No error reported.
# cd /boot/grub
# vi /boot/grub.cfg
# vi /boot/grub/grub.cfg
menuentry "FreeBSD" {
set root(hd0,1,a)
kfreebsd /boot/loader
}
</pre>
</div>
<p>grubのインストールが完了したら、bsd.rdを/boot以下にダウンロードし、リブートします。</p>
<div class="screen">
<pre>
# cd /boot
# sudo ftp ftp://ftp.jaist.ac.jp/pub/OpenBSD/5.0/amd64/bsd.rd
# sync;sync;sync;reboot
#
</pre>
</div>
<br/>
<h2>GRUB2からOpenBSDのインストーラをキックする</h2>
<p>リブートとすると下記の様なgrubの画面が出てきますので、すかさず"c"キーを押下します。</p>
<img src="http://blog.foobarhoge.com/images/20120407_1.png" style="display:block;margin:0px auto;width:550px;" alt="FreeBSDのgrubメニュー" />
<p>次にbsd.rdを読み込んでブートさせます。</p>
<img src="http://blog.foobarhoge.com/images/20120407_2.png" style="display:block;margin:0px auto;width:550px;" alt="bsd.rdのロード" />
<p>hddが認識されています。<p>
<img src="http://blog.foobarhoge.com/images/20120407_3.png" style="display:block;margin:0px auto;width:550px;" alt="OpenBSDのdmesg" />
<p>その後は、普通のOpenBSDインストール作業と変わらないので、粛々とインストール作業を進めればよいでしょう。</p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-8863728166076284522012-04-04T21:50:00.001+09:002012-04-04T21:50:42.081+09:00iterm2で処理が終了したとき、Growlに通知する方法<p><a href="http://www.iterm2.com/#/section/documentation">iTerm2のドキュメント</a>にあるInteresting Linksに載っていた方法ですが、リンク先が無くなっていたので備忘録として書いておきます。</p>
<p>iTerm2でコンパイル等の時間が掛かる処理をしている場合、処理が終了したときにGrowl通知させたい、と言う事があると思います。このような場合、下記のコマンドを実行することによりiTerm2からGrowlに通知する事ができます。</p>
<div class="screen">
<pre>
$ echo $'<b>\e]9;</b><span style="color:#FFD700;">Growlへ通知するメッセージ</span><b>\007</b>'
$
</pre>
</div>
<p>メッセージは日本語もOKです。</p>
<div class="screen">
<pre>
$ sleep 10;echo $'\e]9;起きたよ〜\007'
$
</pre>
</div>
<p>上記のコマンドでは、10秒後にGrowlに対して「起きたよ〜」のメッセージを通知します。</p>
<img src="http://blog.foobarhoge.com/images/20120404_1.png" style="display:block;margin:0px auto;" alt="growl通知" />
<p>実行する度に、エスケープシーケンスを打ち込むのは面倒なので、.bashrcに関数を定義して登録しておくと便利です。</p>
<pre class="code">
growl() { echo -e $'\e]9;'${1}'\007' ; return ; }
</pre>
<p>試しに、mercurialをportからコンパイルしてみます。</p>
<div class="screen">
<pre>
$ sudo port install mercurial +bash_completion; growl "mercurial のインストールが終わったよ"
</pre>
</div>
<p>インストール終了後に、growlに通知されました。</p>
<img src="http://blog.foobarhoge.com/images/20120404_2.png" style="display:block;margin:0px auto;" alt="インストール終了のgrowl通知" />yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-84472303655468100662012-03-30T23:44:00.001+09:002012-03-30T23:54:13.831+09:00iterm2の機能まとめ その3<p>かなり間が開いてしまったが、一応まとめてあったので書いておこう。iterm2の機能まとめ その3です。</p>
<h2>隠し設定</h2>
<p>ドキュメントに書いてあるのだけれども、設定しても変化がないものが多い。やり方が間違っているのか?</p>
<div class="code">
<pre>
<span class="comment">#タブの幅を動的に伸縮させる</span>
defaults write com.googlecode.iterm2 UseUnevenTabs -bool false
<span class="comment">#コンテキストメニュから選択したキーワードをgoogle検索(デフォルト)</span>
defaults write com.googlecode.iterm2 SearchCommand -string "http://google.com/search?q=%@"
<span class="comment">#コンテキストメニュから選択したキーワードをyahoo検索</span>
defaults write com.googlecode.iterm2 SearchCommand -string "http://search.yahoo.com/search?p=%@"
<span class="comment">#ホットキー押下時のアニメーション速度を設定 (変化無かった)</span>
defaults write com.googlecode.iterm2 HotkeyTermAnimationDuration -float 0.25
<span class="comment">#スプリットペインのぼかし量を設定 0(クリア) 1 (不鮮明) デフォルト値は 0.15
#値を変えても変化無</span>
defaults write com.googlecode.iterm2 SplitPaneDimmingAmount -float 0.25
<span class="comment"># フォント幅を調整(変化無かった)</span>
defaults write com.googlecode.iterm2 HiddenAdvancedFontRendering -bool true
<span class="comment"># フォント幅はマイナスの値で0に近づく程薄くなり、遠くなるほど厚くなります</span>
defaults write com.googlecode.iterm2 HiddenAFRStrokeThickness -float -0.1
<span class="comment"># フォアグラウンドタブにGrowlの通知を受信したい場合 (変化無かった)</span>
defaults write com.googlecode.iterm2 GrowlOnForegroundTabs -bool true
</pre>
</div>
<br/>
<h2>独自のエスケープコード</h2>
<h3>カーソルの形状の設定</h3>
<div class="code">
<pre>
^[]50;CursorShape=N^G
N=0, 1, 2
0: Block
1: Vertical bar
2: Underline
echo -e "\033]50;CursorShape=0^G"
</pre>
</div>
<p>インサートモードの時にカーソルを細くしたいならば.vimrcに下記の設定をします。</p>
<div class="code">
<pre>
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
</pre>
</div>
<br/>
<h3>ウインドウタイトルとタブの背景色</h3>
<p>ウインドウタイトルとタブの背景色を変更するには次のようにします</p>
<div class="code">
<pre>
^[]6;1;bg;red;brightness;N^G
^[]6;1;bg;green;brightness;N^G
^[]6;1;bg;blue;brightness;N^G
<span class="comment">Nは0から255までの十進数です。</span>
</pre>
</div>
<p>bashだと下記の例では背景が紫色になります</p>
<div class="screen">
<pre>
echo -e "\033]6;1;bg;red;brightness;255\a"
echo -e "\033]6;1;bg;green;brightness;0\a"
echo -e "\033]6;1;bg;blue;brightness;255\a"</pre>
</div>
yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-995837814415871302012-02-23T22:48:00.001+09:002012-02-23T22:52:18.473+09:00iterm2の機能まとめ その2<p>前回に続いてiterm2の機能まとめ その2です。まとめてみると知らなかった便利機能が出てきて目から鱗です。</p>
<h2>マウスレステキスト選択</h2>
<p>マウスを使用せずテキストを選択する場合は、cmd+fで検索窓を開いて選択したい文字のキーワードを打ち込みます。検索候補が複数ある場合は下記のショートカットで候補間を移動出来ます。</p>
<ul>
<li>cmd+g:前候補に移動</li>
<li>cmd+shift+g:次候補に移動</li>
</ul>
<img src="http://blog.foobarhoge.com/images/20120223_1.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<p>選択したい文字列に移動したらば、tabキーで選択範囲を後ろへ広げます。shift+tabキーで選択範囲を前に広げます。</p>
<ul>
<li>
shift+tab:選択範囲を前に広げます
<img src="http://blog.foobarhoge.com/images/20120223_2.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
</li>
<li>
tab:選択範囲を後ろへ広げます
<img src="http://blog.foobarhoge.com/images/20120223_3.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
</li>
</ul>
<h2>画面分割</h2>
<p>iTerm2は、複数のセッションを複数の"ぺイン(窓枠)"にcmd+dやcmd+shift+dで分割表示する事ができます。ペイン間の移動は下記のショートカットになります。</p>
<ul>
<li>cmd+opt+←:左のペインに移動</li>
<li>cmd+opt+→:左のペインに移動</li>
<li>cmd+opt+↑:上のペインに移動</li>
<li>cmd+opt+↓:下のペインに移動</li>
<li>cmd+[:前ペインに移動</li>
<li>cmd+]:次ペインに移動</li>
</ul>
<h2>現在位置のマーク/マークへのジャンプ</h2>
<p>cmd-shift-mでセッション内の現在位置をマークします。マークした位置にはcmd-shift-jでジャンプ出来ます。(同一セッション内でのジャンプが可能で他のセッションにはジャンプ出来ません。)</p>
<p>最初にプロンプトが"etc(46)$"の所で現在位置をマークします。</p>
<img src="http://blog.foobarhoge.com/images/20120223_4.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<p>しばらく作業したのでプロンプトが"etc(50)$"になりました。</p>
<img src="http://blog.foobarhoge.com/images/20120223_5.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<p>上記の状態でcmd-shift-jとするとプロンプトが"etc(46)$"の場所へジャンプしました。</p>
<img src="http://blog.foobarhoge.com/images/20120223_6.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<br/>
<h2>正規表現検索</h2>
<p>cmd+fで検索窓が開きますが、虫眼鏡マーク横の下矢印により正規表現検索を有効に出来ます。正規表現は<a href="http://userguide.icu-project.org/strings/regexp#TOC-Regular-Expression-Metacharacters">IUCシンタックス</a>が使用されます。</p>
<img src="http://blog.foobarhoge.com/images/20120223_7.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<br/>
<h2>オートコンプリート</h2>
<p>タブまたはそのスクロールバッファ内に存在する任意のテキストを、そのタブ内で自動補完することができます。オートコンプリートを使用するには、補完したい単語の先頭の一部を入力してcmd+;を押下すればオートコンプリートウィンドウが開きます。</p>
<img src="http://blog.foobarhoge.com/images/20120223_8.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<p>オートコンプリートウィンドウには、入力候補が20個表示されますが、更に文字を入力する事により入力候補を絞り込む事が出来ます。</p>
<p>候補を選びエンターキーを押下すると、その候補がコマンドラインに入力されます。</p>
<p>候補を選びtabキーを押下すると、その候補対する幾つかの候補が絞り込まれます。</p>
<h2>ペースト履歴</h2>
<p>テキストをコピーまたはiTerm2に貼り付けされるたびに、それがペースト履歴に追加されます。</p>
<p>cmd+shift+hでペースト履歴を表示する事ができます。文字を入力する事により履歴の絞り込みが出来ます。</p>
<img src="http://blog.foobarhoge.com/images/20120223_9.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<p>Preferences > General > Save copy/paste の設定によりペースト履歴をディスクに保存する事も出来ます。</p>
<h2>インスタントリプレイ</h2>
<p>topコマンドやwgetの進捗バーの様なインタラクティブなプログラムは画面が上書きされてしまい、履歴を見ることが出来ません。
インスタントリプレイを使用すると、時間を遡るように過去のある時点の画面とまったく同じものをステップ実行で見ることができます</p>
<p>インスタントリプレイモードを有効にするには、cmd+opt+bを押下します。</p>
<img src="http://blog.foobarhoge.com/images/20120223_10.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<p>インスタントリプレイモードでは、左右矢印キーで時間を前後に移動出来ます。インスタントリプレイから抜けるにはescを押下します。</p>
<img src="http://blog.foobarhoge.com/images/20120223_11.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<p>デフォルトで各セッションは、インスタントリプレイの履歴を保存するために4メガバイトまで使用出来るように設定してあります。
これはPreferences > General > Instant Replay uses __ MB per sessionで設定可能です。</p>
<h2>フルスクリーン</h2>
<p>cmd-enterでフルスクリーン表示になります。フルスクリーン表示では透明度の設定が(画面に集中できるように)無効になります。cmd-uで透明度の設定を再度有効にすることができます。 (出来なかった)</p>
<h2>256色モード</h2>
<p>iTerm2は256色モードをサポートしています。 cshシェルでこれを有効にする
には、設定(Preferences > Profiles > Terminal > Report Terminal
Type)でxterm-256colorを選択します。</p>
<p>一部のアプリケーションでは、このモードをサポートするように構成する必要
があります。vimではvimrcにこれを追加します。</p>
<div class="code">
<pre>
set t_Co=256</pre>
</div>
<br/>
<h2>マウスフォーカス制御</h2>
<p>このオプションはデフォルトでオフになっていますが、Preferences > General > Focus follows mouseで有効に出来ます。(Build 1.0.0.20120203ではPreferences > pointer > Focus follows mouseで設定出来ます)[iTerm2ウィンドウ間でマウスフォーカス制御が有効になるだけで、他のアプリケーション間だとフォーカス制御が働かないようです]</p>
<h2>スマート カーソル カラー</h2>
<p>ブロックカーソルを使用する場合、それはすべての背景色に最適なカーソルの色を選択するのは難しいです。スマート カーソル カラー(Preferences > Profiles > Colors)を有効にすると背景色に最適なカーソル色を動的に選んでくれます。</p>
<h2>Growlをサポート</h2>
<p>あなたのマシンにGrowlがインストールされており、iTerm2のGrowlを有効(Preferences > Profiles > Terminal > Enable Growl Notifications)にしている場合は、幾つかの端末状態をGrowlに通知させることができます。</p>
<img src="http://blog.foobarhoge.com/images/20120223_12.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<br/>
<h2>Exposéのタブ</h2>
<p>cmd-opt-eで全てのタブを一度に表示出来ます。</p>
<img src="http://blog.foobarhoge.com/images/20120223_13.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<br/>
<h2>ウィンドウ アレンジメント</h2>
<p>現在開いている、ウィンドウ、タブ、メニューオプションのウィンドウとペインのスナップショットをcmd+shift+sで保存する事が出来ます。</p>
<p>リストアしたい場合は、デフォルトに設定したアレンジメントの場合はcmd+shift+rで戻せます。それ以外のアレンジメントはメニューオプションのWindow > Restore Window Arrangementから選んでリストア出来ます。</p>
<p>iTerm2を立ち上げたときにリストアしたい場合は、Preferences > General > Open saved window arrangementを設定します。複数のアレンジメントの管理は Preferences > Arrangementsで出来ます。</p>
<img src="http://blog.foobarhoge.com/images/20120223_14.png" style="display:block;margin:0px auto;" alt="Split Horizontally" />
<p>燃え尽きなければ、その3も書こうかな...</p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com1tag:blogger.com,1999:blog-3594173092702670382.post-55583701609560836752012-02-22T20:41:00.001+09:002012-09-09T21:49:36.687+09:00iterm2の機能まとめ その1<p>iTerm2を常用していますが、一部の機能しか使用していないので、どんな機能があるのかしらべてみました。と言っても<a href="http://www.iterm2.com/#/section/documentation">ここ</a>に書いてある事が殆どだけれども(笑)</p>
<p>iTerm2は頻繁にアップデートされているため、ここに書いてある事が古くなる可能性が高いです。ここでの記述はBuild 1.0.0.20120203のiTerm2を前提にしています。</p>
<h2>タブ</h2>
<p>iTerm2は複数のWindowセッションを開くことが出来ます。複数のセッションを開くには複数の方法がありあります。</p>
<ul>
<li>Shell > New Window で新しいウインドウを開きます</li>
<li>Shell > New Tab で新しいタブを作成します</li>
<li>Shell > Split Horizontallyで現在のウインドを水平に分割して新しいセッションを開きます
<a href="http://blog.foobarhoge.com/images/20120222_1b.png" target="black"><img src="http://blog.foobarhoge.com/images/20120222_1.png" style="display:block;margin:0px auto;" alt="Split Horizontally" /></a>
</li>
<li>
Shell > Split Verticallyで現在のウインドを垂直に分割して新しいセッションを開きます
<a href="http://blog.foobarhoge.com/images/20120222_2b.png" target="black"><img src="http://blog.foobarhoge.com/images/20120222_2.png" style="display:block;margin:0px auto;" alt="Split Vertically" /></a>
</li>
</ul>
<br style="clear:both;"/>
<p>タブは一般的なタブブラウザと同じような動作をします。タブをウインドウの外に出すことにより、新しいウインドウを作成できます</p>
<img src="http://blog.foobarhoge.com/images/20120222_3.png" style="display:block;margin:0px auto;" alt="tab separate" />
<p>デフォルトのタブタイトルは、現在動かしているジョブ名が表示されます。幾つかのシステムではカレントディレクトリが表示されます。</p>
<img src="http://blog.foobarhoge.com/images/20120222_4.png" style="display:block;margin:0px auto;" alt="Tab alart" />
<p>タブタイトルはPROMPT_COMMAND環境変数(bashを使用)を設定する事によって表示は変更可能です。私の場合は、ホスト名:カレントディレクトリ(現在動いているジョブ名)を表示するように設定してあります。</p>
<div class="code">
<pre>
PROMPT_COMMAND='echo -ne "\033]0;${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
</pre>
</div>
<p>他のshellを使用の場合は、<a href="http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s4">How to change the title of an xterm</a>を参考にして下さい。</p>
<p>タブはステータスによって色付けされます。現在開いているタブ以外のタブに出力があると、タブのタイトルがマゼンダ色に変化します。更に数秒後に赤色に変化して注意を促します。変化があったセッションのタブをアクティブにすると元の色に戻ります。これは、 Preferences > Appearance > Color tab labels on activityで無効に出来ます。</p>
<img src="http://blog.foobarhoge.com/images/20120222_5.png" style="display:block;margin:0px auto;" alt="proc finish" />
<img src="http://blog.foobarhoge.com/images/20120222_6.png" style="display:block;margin:0px auto;" alt="Proc done" />
<h2>マウス</h2>
<p>マウスの主な用途はテキストの選択です。選択されたテキストは直ちにクリップボードにコピーされます。ダブルクリックすると単語を選択します。トリプルクリックすると行全体を選択します。クアドラプルクリック(4回クリック)すると、urlやメールアドレスと認識した文字列にマッチした所を選択する"スマートセレクト"を実行します。</p>
<p>shiftを押下しながらクリックすると、現在の選択エリアがクリックされた所まで拡張されます。</p>
<p>cmdキーを押下しながらurlをクリックすると、そのリンクをブラウザで開きます。</p>
<p>cmdキーを押下しながらファイル名をクリックすると、そのファイルをエディタで開きます。"FileName:LineNo"と言う形式の表示をクリックし開くアプリケーションがMacvim, Textmate,BBEditである場合には、ファイルを開き指定した行番号にジャンプします。</p>
<p>cmdキーを押下すると、選択文字列をドラッグ&ドロップできます。</p>
<p>cms+Ctrキーを押下しながら選択すると、長方形に選択出来ます。</p>
<a href="http://blog.foobarhoge.com/images/20120222_7b.png" target="black"><img src="http://blog.foobarhoge.com/images/20120222_7.png" style="display:block;margin:0px auto;" alt="rectangular selection" /></a>
<p>"Mouse Reporting(Preferences > Profile > Terminal)"が有効にしてあると、現在の動作している端末のアプリケーションがマウスを使用している時、optキーで一時的にマウスを無効にし選択を行うことができます。 </p>
<p>Ctrキーを押下しながらクリックした場合は、右クリックをシミュレートします。</p>
<p>スクロールマウスをサポートします。</p>
<p>トラックパッド(ナビゲートに設定されている場合)を右または左に3本指スワイプすると、隣接するタブを選択します。(自分の環境では動作しなかった)</p>
<h2>キーボード</h2>
<p>便利なキーボードショートカットがあります。</p>
<ul>
<li>"cmd+→","cmd+←"と"cmd+{","cmd+}"は前後のタブを移動します。</li>
<li>"cmd+数字" 数字番目のタブに移動します。</li>
<li>"cmd+opt+矢印"で分割されたウインドウ間を移動します。</li>
<li>"cmd+[","cmd+]"で分割されたウインドウ間を使用順に移動します。</li>
</ul>
<p>Preferences > Keys で グローバルキーショートカット・Preferences > Profiles > Keys で プロファイル ローカルなキーボードショートカットを設定出来ます。</p>
<p>Preferences > Keys では、cmdのような修飾キーを変更する事ができます。</p>
<p>iTerm2は、グローバルホットキーを定義することができます。これを定義する事により、ウインドウを非表示にしたり、全面に表示したりできます。</p>
<h2>コンテキストメニュー</h2>
<p>画面上で右クリックするとコンテキストメニューが開きます。</p>
<img src="http://blog.foobarhoge.com/images/20120222_8.png" style="display:block;margin:0px auto;" alt="Context menus" />
<h2>プロファイル</h2>
<p>多くの設定はプロファイルに保存されています。 プロファイルは設定の名前付きコレクションであり、好きなようにあなたはそれらの多くを持つことができます。</p>
<p>ほとんどのユーザーは1つのプロファイルだけを持っていますが、あなたが頻繁に別のサーバーに接続するような場合、複数のプロファイルで管理する事は役に立つかもしれません。</p>
<p>プロファイルの主な特徴は、プロファイルに使用するコマンドを関連付け、それを開始時に実行する事が出来ます。例えばexample.comに頻繁にsshでログインするならば、example.comのプロファイルを作成し、"ssh example.com"を自動実行する設定をする事ができます。</p>
<a href="http://blog.foobarhoge.com/images/20120222_9b.png" target="black"><img src="http://blog.foobarhoge.com/images/20120222_9.png" style="display:block;margin:0px auto;" alt="Profiles" /></a>
<p>その2に続きます。多分…</p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com2tag:blogger.com,1999:blog-3594173092702670382.post-88126797748024281552012-02-21T23:30:00.001+09:002012-02-21T23:30:01.008+09:00iPhoneを脱獄してロック画面を作ってみた。<p>昨年の末に長い間使用していたNokia N81からiPhone 4sに買い換えた。キャリアーはSoftBankからの機種変更だったのだけれども、本体一括払いだと月々980円で維持できると言うのが決め手でした。</p><p>iPhoneは「パケットし放題フラット」しか選択出来ないと思っていたので、パケットを余り使わない自分ではお得感がなかったのだけれども、「パケットし放題for スマートフォン」が選択出来るならば持っていても良いかなと思い買ってしまった。</p>
<p>既にiPad2は持っていたので、特に目新しくもなく使っていたのですが、今年になってiPhone 4sが紐無し脱獄が可能になったと聞いて、なんか面白そうじゃんと思い脱獄してみたら、初iPhoneで初脱獄だったにも関わらず凄く簡単にできてしまった。</p>
<p>脱獄アプリを幾つかインストールしてみて面白そうだったのが、WinterBoardと言うiPhone 画面をカスタマイズ出来るアプリ。兼ねてから、ロック画面のデジタル時計をアナログ時計にしたいなと思っていたので、カスタマイズに挑戦してみました。</p>
<p>カスタマイズするといってもやり方がわからないので、テーマを配布している<a href="http://www.ithemesky.com/iphone-themes">ithemesky</a>から幾つかロック画面のテーマをダウンロードして中身を見てみると、テーマ中身はhtmlとjavascriptで書かれていることがわかった。</p>
<p>それならば、そんなに難しくないと言うことで、よさげなテーマを見つけ出して部品画像を拝借し、javascriptを改造または追加して出来がったのがこれでした。</p>
<img src="http://blog.foobarhoge.com/images/20120221_1.png" style="display:block;margin:0px auto;" alt="Lock画面" />
<p>電波が受信出来なくて、お天気の情報が取れないときは次の画像になります。</p>
<img src="http://blog.foobarhoge.com/images/20120221_2.png" style="display:block;margin:0px auto;" alt="Lock画面" />
<p>本当は位置情報をnavigator.geolocation.getCurrentPositionで取得して、その場所の天気情報を取りたかったのだけれども、navigator.geolocation系のプロパティは使えないようなので断念しました。残念。</p>yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0tag:blogger.com,1999:blog-3594173092702670382.post-84747998241904067892011-12-17T23:50:00.001+09:002011-12-19T00:57:41.961+09:00さくらVPSでOpenBSD (squidの設定)
<p>squidをインストールして設定してみます。</p>
<p>squidはproxyサーバーですが、自分の場合「外出時にiphoneなどで何処かのサイトにアクセスしたいけど、不要な画像とかは表示したくないのでsquidでブロックしちゃうよ。」的な使い方になります。</p>
<p>このようなコンテンツフィルタリングにはsquidGuardなどがありますが、そこまでやる気はない(サーバーの物理メモリも少ないのでプロセスはあまり立ち上げたくない)ので、squidで出来る程度のフィルタリングになります。</p>
<p>設定ポリシーは</p>
<ul>
<li>squidのバージョンは2.7(portsでインストール)</li>
<li>squidだけで、コンテンツフィルタリングするぞ。</li>
<li>ディスクがもったいないので、コンテンツのキャッシュは無効にします。</li>
<li>外部からのアクセスなので、Proxy認証をかけます。</li>
<li>画像をブロックしたときにエラーページを返すとレイアウトが崩れるのでなんとかする。</li>
</ul>
<h1>インストール</h1>
<p>portsでインストールします。</p>
<div class="code">
<pre>
# cd /usr/ports/www/squid/
# make install
# make clean=depends
#
</pre>
</div>
<br/>
<h2>/etc/rc.conf.localの設定</h2>
<p>インストールが完了したら、/etc/rc.conf.localに下記の設定を追加します</p>
<div class="code">
<pre>
<span style="color:green;">squid_flags=""</span>
pkg_scripts="postfix saslauthd …… 略 …… courier_imap_ssl <span style="color:green;">squid</span>"
</pre>
</div>
<br/>
<h1>アクセスコントロールの設定</h1>
<p>最初にaclの設定をします。この辺はデフォルトの設定をコピペしただけです。</p>
<div class="code">
<pre>
<span class="comment"># Recommended minimum configuration:
#</span>
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
<span class="comment"># Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed</span>
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
</pre>
</div>
<br/>
<h1>ブラックリストの設定とキャッシュの無効化</h1>
<p>/etc/squidにコンテンツフィルタリングの設定ファイル、whitelist.txt blacklist.txt blackpath.txtを置く事にします。また全てのアクセスをキャッシュしない設定にします。</p>
<div class="code">
<pre>
<span class="comment"># blacklistとwhitelistの設定</span>
acl whitelist url_regex -i "/etc/squid/whitelist.txt"
acl blacklist url_regex "/etc/squid/blacklist.txt"
acl blackpath urlpath_regex -i "/etc/squid/blackpath.txt"
<span class="comment"># cacheを無効にする</span>
no_cache deny all
</pre>
</div>
<br/>
<h1>squidアクセスの制限設定</h1>
<p>aclのblacklist・blackpathで定義したコンテンツはブロックします。aclのwhitelistで定義したコンテンツはブロックしません。</p>
<div class="code">
<pre>
<span class="comment"># cachemgrアクセス(キャッシュされたオブジェクト情報へのアクセス)は
# ローカルホストからのみ許可する。</span>
http_access allow manager localhost
http_access deny manager
<span class="comment"># acl名Safe_portsで定義したポート以外へのリクエストを拒否する。</span>
http_access deny !Safe_ports
<span class="comment"># SSLポート以外へのCONNECTメソッドのリクエストは拒否する。</span>
http_access deny CONNECT !SSL_ports
<span class="comment"># whitelistは許可 と blacklist拒否</span>
http_access allow whitelist
http_access deny blacklist
http_access deny blackpath
deny_info http://blackhole.example.com/index.php?url=%s blacklist
deny_info http://blackhole.example.com/index.php?url=%s blackpath
<span class="comment"># ローカルホスト ローカルネットからのアクセスは許可する。</span>
http_access allow localnet
http_access allow localhost
</pre>
</div>
<br/>
<h2>画像をブロックするとリンク切れの状態なる問題</h2>
<p>blacklistで画像をブロックすると、squidは空白のページを返してきます。するとsafariなどのブラウザは画像のリンクが切れていると判断して、はてなマークのアイコンを表示してしまい画面が見づらくなってしまいます。</p>
<img src="http://blog.foobarhoge.com/images/20111218_1.png" style="display:block;margin:0px auto;" alt="画像link切れ" />
<p>これを回避するために下記の設定を行い、ブロックした場合はhttp://blackhole.example.com/index.phpに飛ばします。index.phpでは引数に指定されたURLにより出力内容を変えてあげます。</p>
<div class="code">
<pre>
deny_info http://blackhole.example.com/index.php?url=%s blacklist
deny_info http://blackhole.example.com/index.php?url=%s blackpath
</pre>
</div>
<p>index.phpは拡張子をみて、それに見合った1dotの白画像を出力するだけの簡単なプログラムです。</p>
<div class="code">
<pre>
<?php
error_reporting(0);
if(preg_match('/\.(jpeg|jpg|jpe)$/',$_GET['url'])){
$img = file_get_contents('./images/spacer.jpg') ;
header('Content-type: image/jpeg') ;
echo $img ;
}
elseif(preg_match('/\.(png)$/',$_GET['url'])){
$img = file_get_contents('./images/spacer.png') ;
header('Content-type: image/png') ;
echo $img ;
}
elseif(preg_match('/\.(gif)$/',$_GET['url'])){
$img = file_get_contents('./images/spacer.gif') ;
header('Content-type: image/gif') ;
echo $img ;
}
else{
echo "" ;
}
?>
</pre>
</div>
<p>この設定をした後の画面は下記のようになりすっきりします。</p>
<img src="http://blog.foobarhoge.com/images/20111218_2.png" style="display:block;margin:0px auto;" alt="画像link切れ対処" />
<br/>
<h1>認証の設定</h1>
<p>外部サイトのproxyなので他人に使用されないように認証をかけます。basic認証だと平文でパスワードが流れてしまうので、Digest認証を使うことにします。</p>
<div class="code">
<pre>
<span class="comment">## 認証設定
# digestを使用</span>
auth_param digest program /usr/local/libexec/digest_pw_auth /etc/squid/digpass
<span class="comment"># 認証プロセスの数を指定します。</span>
auth_param digest children 5
<span class="comment"># ダイジェスト認証の「ユーザ名・パスワード画面」に表示する文字</span>
auth_param digest realm Squid proxy-caching web server
<span class="comment"># クライアントエージェントの有効性をチェックする時間を指定します</span>
auth_param digest nonce_garbage_interval 5 minutes
<span class="comment"># nonce(臨時・その場限り)の有効性のチェックする時間を指定します</span>
auth_param digest nonce_max_duration 30 minutes
<span class="comment"># nonceの使用できる回数を指定します。</span>
auth_param digest nonce_max_count 50
<span class="comment"># Squidでnonceのカウンターを1づつ進めていきます。</span>
auth_param digest nonce_strictness on
<span class="comment"># このディレクティブはoffにセットされたならnonceのカウントチェックを無効</span>
auth_param digest check_nonce_count off
auth_param digest post_workaround off
<span class="comment"># 認証を要求</span>
acl password proxy_auth REQUIRED
<span class="comment"># 認証を通ったアクセスは許可</span>
http_access allow password
<span class="comment"># そのほかのアクセスはすべて拒否する</span>
http_access deny all
</pre>
</div>
<p>設定値はsquid.confのコメントに書いてあったものをほぼコピーしただけです。但し、auth_param digest check_nonce_countはoffにしておかないと、iOSで認証ダイアログが繰り返し表示されてしまいました。原因を特定するのにえらい苦労しました。IDとパスワードは/etc/squid/digpassに平文でID:PASSWORDの形式で列記してあげれば良いです。</p>
<h1>それ以外の設定</h1>
<p>ヘッダ情報やキャッシュなどの設定を行います。</p>
<div class="code">
<pre>
<span class="comment"># ドットなしのホスト名にローカルなドメイン名を付加します。</span>
append_domain .example.com
<span class="comment"># squidが受け付けるhttpのポート番号</span>
http_port 1234
<span class="comment">## ヘッダー情報の設定
# 内部 IP アドレスが送られないようにする</span>
forwarded_for off
<span class="comment"># Proxyの存在を知らせない</span>
header_access X-Forwarded-For deny all
header_access Cache-Control deny all
<span class="comment">## キャッシュの設定
# 複数のsquidサーバで、お互いのキャッシュ情報を参照し、効率的に連携させることができる。
# 無効にするには "0"を設定する。</span>
icp_port 0
<span class="comment"># IPキャッシュの数</span>
ipcache_size 5120
cache_mem 32 MB
<span class="comment"># キャッシュは無効にしてあるので /dev/nullに設定</span>
cache_dir null /dev/null
maximum_object_size 512 KB
maximum_object_size_in_memory 16 KB
<span class="comment">## ログの設定
# ストレージ・マネージャーの活動を記録しない</span>
cache_store_log none
<span class="comment"># apache風ログで出力</span>
emulate_httpd_log on
logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh
access_log /var/squid/logs/access.log common
<span class="comment"># クライアントごとの統計を無効</span>
client_db off
</pre>
</div>
<br/>
<h1>設定のチェックと起動</h1>
<p>最初に設定した記述が正しいかチェックします。エラーメッセージが出なければ問題なしです。</p>
<div class="screen">
<pre>
# /usr/local/sbin/squid -k parse
#
</pre>
</div>
<p>設定に問題無ければキャッシュディレクトリを作成します。今回はキャッシュ無しなのでやらなくても問題ないと思うのですが一応… ディレクトリを作成したら起動させます。</p>
<div class="screen">
<pre>
# /usr/local/sbin/squid -z
2011/12/16 00:36:03| Creating Swap Directories
# /etc/rc.d/squid start
squid(ok)
#
</pre>
</div>
<p>起動したら、ブラウザ側にproxyの設定を行い、接続および認証ができるか確認してみます。</p>
<br/>
<h1>blacklistの作成</h1>
<p>blacklistは、頻繁に訪れるサイトの不要な画像やjavascript,iframe等のリンクを抽出して/etc/squid/blacklist.txtに正規表現で記述していきます。同様に不要なパスを/etc/squid/blackpath.txtに正規表現で記述します。</p>
<p>/etc/squid/whitelist.txtにはブロックしたくないコンテンツを記述していきます。特に</p>
<div class="code">
<pre>
deny_info http://blackhole.example.com/index.php?url=%s blacklist
deny_info http://blackhole.example.com/index.php?url=%s blackpath
</pre>
</div>
<p>の設定では、"?url"にブラックリストのURLが入ってくるため、このプログラム自体がブラクックリストにマッチしてしまいフィルタリング処理がループしてしまいます。ですので上記で設定したドメインは必ずwhitelist.txtに指定します。<p>
<p>参考の為にブラックリストを晒しておきます。このリストは俺専用にカスタマズされているので、他の人が使用しても全く効果がないかもしれません。</p>
<ul>
<li><a href="http://blog.foobarhoge.com/squid/whitelist.txt">whitelist.txt</a></li>
<li><a href="http://blog.foobarhoge.com/squid/blacklist.txt">blacklist.txt</a></li>
<li><a href="http://blog.foobarhoge.com/squid/blackpath.txt">blackpath.txt</a></li>
</ul>
<h2>フィルタリング適応前と適応後</h2>
<p>フィルタリング適応前と適応後を比べてみます。比較するページがなんで「発言小町」なんだと言う突っ込みは無しの方向で(笑)</p>
<p>まずは適応前で、全体的に五月蠅い感じで、讀賣らしさが出ていますね。</p>
<img src="http://blog.foobarhoge.com/images/20111218_3.png" style="display:block;margin:0px auto;" alt="適応前" />
<p>そして適応後、素のHTML部分が残ってしまているのが悔しいですが、大分すっきりしました。「小町のiAppを入れろよ」と言ってくる、うざい広告のjavascriptもブロックしているのでイライラせずにブラウズする事が出来るようになりました。</p>
<img src="http://blog.foobarhoge.com/images/20111218_4.png" style="display:block;margin:0px auto;" alt="適応後" />
yanmoohttp://www.blogger.com/profile/09498233513692620318noreply@blogger.com0