<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4519619120592049224</id><updated>2024-09-12T12:57:05.535+09:00</updated><category term="Linux"/><category term="プログラミング"/><category term="Ubuntu"/><category term="シェル"/><category term="Mac"/><category term="C++"/><category term="OpenGL"/><category term="Python"/><category term="XREA"/><category term="サーバー"/><category term="DTM"/><category term="LaTeX"/><category term="PHP"/><category term="Steinberg"/><category term="VST"/><category term="Web"/><category term="Windows"/><category term="XML"/><category term="データベース"/><category term="ニコニコ動画"/><category term="互換性"/><title type='text'>Geek Knowledge</title><subtitle type='html'>～日々発見したことを書き留める Geek な備忘録～</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-4783204819670496214</id><published>2012-08-12T01:33:00.000+09:00</published><updated>2012-09-15T00:19:22.035+09:00</updated><title type='text'>ニコニコ生放送の延長確認ツールを公開</title><content type='html'>&lt;p&gt;
Zero が一般会員に開放されたことや、また某生主さんのコミケデビューなどを記念して、ニコニコ生放送で生主が延長しているかを確認できるツールをひっそりと公開してみます。まぁ、そこまでは需要ないでしょうけど…。
&lt;/p&gt;
&lt;p&gt;
詳しくは&lt;a href=&quot;http://hseisyu.blogspot.jp/p/blog-page.html&quot;&gt;こちらのページ&lt;/a&gt;からどうぞ。
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/4783204819670496214/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2012/08/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/4783204819670496214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/4783204819670496214'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2012/08/blog-post.html' title='ニコニコ生放送の延長確認ツールを公開'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-5042008251995796299</id><published>2011-02-11T08:58:00.000+09:00</published><updated>2011-02-11T08:58:46.208+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="DTM"/><category scheme="http://www.blogger.com/atom/ns#" term="Steinberg"/><category scheme="http://www.blogger.com/atom/ns#" term="VST"/><category scheme="http://www.blogger.com/atom/ns#" term="プログラミング"/><title type='text'>【DTM】 VST 3.5 リリース！ということで現状での VST 開発まとめ</title><content type='html'>備忘録をかねて、たまには DTM の話題でも。といっても開発者視点の話題ですが f^^;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.steinberg.net/en/newsandevents/news/newsdetail/article/vst-35-a-milestone-in-vst-development-1451.html&quot;&gt;Steinberg の 2 月 10 日の記事&lt;/a&gt;によると、VST 3.5 がそろそろ出るみたいですね。SDK のダウンロードも可能。ということで、VST 開発に関する日本語情報が少ないので、（VST 3.5 新機能を含む）まとめ記事を作成してみました。&lt;br /&gt;
&lt;br /&gt;
まず VST (Virtual Studio Technology) とは、一言で言うと DAW ホスト（DTM ソフト）にプラグインの形でソフトウェア音源やソフトウェアエフェクトを追加することができるようにするための規格で、音楽業界でデファクトスタンダードになった Cubase というソフトを作った会社 Steinberg の規格です。ちなみに、ASIO ドライバなんて聞いたことがある人もいるかとは思いますが、これも同じ会社の規格です。Steinberg というと聞きなれないかもしれませんが、実は Steinberg は YAMAHA が最近買収したので経営権は日本にあります。ちなみに、MIDI も日本発の技術で、昔から「音楽業界の標準技術は日本にあり」なんて言われているのは業界では有名な話です。&lt;br /&gt;
&lt;br /&gt;
前置きはさておき、今回は一クリエイターではなく、一開発者の視点から VST 開発全体について情報整理してみます。&lt;br /&gt;
&lt;br /&gt;
まず、VST を開発するには、開発キット SDK を入手する必要があります。&lt;a href=&quot;http://www.steinberg.net/en/company/developer.html&quot;&gt;無償で公開されており&lt;/a&gt;、誰でも入手可能です（要ユーザー登録）。なので、無償の Visual Studio Express Edition 等を組み合わせれば能力次第で誰でも本格的な VST の開発ができます（OOP プログラミング、デジタル音楽の知識、音響物理学、英語と色々必要ですが）。開発言語は C++ で、クロスプラットフォームです（GUI 開発には独自ライブラリの VSTGUI が付属します）。ただ、開発ドキュメント（特に日本語）が少なく、誰かが作ったソースをダウンロードして解析するぐらいしかまともな勉強方法がありません。また、開発者の母数が少ないからか、SDK のドキュメントやサンプルソースも最低限のため、ある程度のトラブルは自力で解決できる経験が要求されます。さらに、音響効果をつけるためにはどのような波形処理を行うべきかといった音響物理の知識がいりますし、VST はリアルタイム処理のため処理に使える時間制限が厳しく、直接メモリ操作を行うような低レベルでのコード記述が要求されるなど、開発難易度は非常に高い部類だと思います。&lt;br /&gt;
&lt;br /&gt;
VST のバージョンに関して。3.5 がリリースされる以前は、VST2 系と VST3 系の２つの規格がありました。VST3 では VST2 に比べ構造が柔軟になりましたが、その分複雑になってしまい、複雑になったわりに有用な機能が少ないことから、結局 VST2 系が現在では広く使われています。VST3 には存在していて、VST2 に無い機能としては、サイドチェーンあたりが有名どころでしょうか。後は、柔軟な構造を活かして音響処理ＰＣと操作ＰＣを分離したりできたりするらしいですが、これは結局 DAW ホスト（DTM ソフト）側に依存するので、特殊な用途向けと言えると思います。&lt;br /&gt;
&lt;br /&gt;
ここに VST 3.5 が投入されることになります。VST 3.5 はこれまでの VST3 系とは独立のようですから、それぞれの系の最新バージョン VST 2.4、VST 3.1 と、今回の VST 3.5 の３規格が存在することになります。冒頭の Steiberg の記事（英語）によると VST 3.5 がリリースされることで、VST 3.0 に乗り換えなかった多くの人が 3.5 に移行することになるだろうと書かれているようですね。VST 3.5 の目玉機能は Note Expression という機能で、記事を読む限り、個々の MIDI ノート（イベント）に「MIDI の枠を超えた膨大なアーティキュレーション情報がついてくる」ことで、開発者にとって無限の柔軟性が生まれる、ということらしいです。記事の例を引用するとすれば、同じ楽器でも例えばピッチカート奏法やレガート奏法、トレモロ奏法を行うことができる楽器において、これまでは奏法ごとにトラック（チャンネル）を分割し、それぞれのトラックで MIDI ノートを入力していましたが、これらを自動的に切り替える機能が Cubase/Nuendo 側で実装され、それに対応したプラグインを開発することができる、ということが挙げられています。後は小さな新機能として XML ベースのパラメータのインポート・エクスポートに対応するとか、ホスト側のコンテキストメニューを作成できたりするみたいです。&lt;br /&gt;
&lt;br /&gt;
うーん、VST 3.5 はどちらかというとエンタープライズ向けの拡張かな…。仕事でやるならともかく、一個人の趣味プログラマーにとってはそこまでメリットなさそう。アーキテクチャも、VST 3.1 の時点で複雑なのに、もっと複雑になってそう。。サンプルも少なそうだし、公式サンプルをちょっと試すだけ試してみて、しばらくは VST 2.4 での開発を続けることにしようかな。&lt;br /&gt;
&lt;br /&gt;
ところでもうすぐ Cubase 6 が出ますね。欲しいけど、Windows 7 専用か。XP がデフォになってるし、どうしようかなぁ…</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/5042008251995796299/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2011/02/dtm-vst-35-vst.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/5042008251995796299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/5042008251995796299'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2011/02/dtm-vst-35-vst.html' title='【DTM】 VST 3.5 リリース！ということで現状での VST 開発まとめ'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-4588835689552261995</id><published>2010-10-10T23:24:00.000+09:00</published><updated>2010-10-10T23:24:20.658+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="シェル"/><title type='text'>（Linux等の）シェルスクリプトを Mac の Finder からダブルクリックで実行するには</title><content type='html'>&lt;p&gt;少し躓いたので、メモメモ。まとめると次の３点が要点となる。&lt;br /&gt;
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;スクリプトの拡張子を .command にする&lt;/li&gt;
&lt;li&gt;ターミナルから、chmod で実行権限を与える&lt;/li&gt;
&lt;li&gt;スクリプトの Shebang のすぐ下に cd `dirname $0` を入れる &lt;small&gt;（シングルではなくバッククオートであることに注意）&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;詳細について。まず、シェルスクリプトの書き方から。これは Linux と同様 Shebang ではじめ、通常通りコードを書いていく。&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;mycode&quot;&gt;#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
[ここからコード]&lt;br /&gt;
&lt;/div&gt;&lt;p&gt;このスクリプトファイルをダブルクリックした時にターミナルを起動するように設定する必要がある。Mac 上で拡張子の関連付けを行えばよいことになるが、10.6 (Snow Leopard) では、デフォルトで &quot;.command&quot; という拡張子がターミナルに関連付けられいることを確認した。&quot;install.command&quot; のような感じで拡張子をつけて保存するとよい。（もちろん別の拡張子を利用したい場合はその拡張子をターミナルに関連付けておく）&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;また、Linux と同様にスクリプトには実行権限を付加しておく必要がある。これは Mac 標準の Finder からは設定できないようなので、ターミナルから実行権限を付加する。例えばコードが install.command だった場合、&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;mycode&quot;&gt;chmod +x install.command&lt;br /&gt;
&lt;/div&gt;&lt;p&gt;もちろん、ファイルがホームディレクトリに無い場合は、該当のディレクトリに移動するか、フルパス指定で実行。&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;ただし、Mac ではダブルクリックで起動した場合、ホームディレクトリをカレントディレクトリとしてコードが実行されてしまう。例えば、ユーザー名が hoge、コードが /Users/hoge/abc/install.command においてある場合、Mac は自動的にホームディレクトリでコードを実行してしまう（下の太字の部分が Mac が実際に実行しているコマンド）。&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;mycode&quot;&gt;Last login Sun Oct 10 22:54:02 on Console&lt;br /&gt;
pcname:~ hoge$ &lt;b&gt;/Users/hoge/abc/install.command ; exit;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;[コマンド実行結果]&lt;/i&gt;&lt;br /&gt;
logout&lt;br /&gt;
&lt;br /&gt;
[プロセスが完了しました]&lt;br /&gt;
&lt;/div&gt;&lt;p&gt;コード内で相対パスを利用している場合、コードの置いてあるディレクトリにカレントディレクトリを移動させないと不具合が出る場合がある。これを行うためには、例えば &quot;cd `dirname $0`&quot; というコードをシェルスクリプトの冒頭に入れておけばいい（シングルではなくバッククオートであることに注意）。これは、コードのパスからディレクトリを dirname で取得し、その結果を cd に渡すことでカレントディレクトリを適切なところに移動するコードである。&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;結局、スクリプトは次のように書けばよいことになる。&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;mycode&quot;&gt;#!/bin/sh&lt;br /&gt;
cd `dirname $0`&lt;br /&gt;
&lt;br /&gt;
[ここからコード]&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/4588835689552261995/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2010/10/linux-mac-finder.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/4588835689552261995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/4588835689552261995'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2010/10/linux-mac-finder.html' title='（Linux等の）シェルスクリプトを Mac の Finder からダブルクリックで実行するには'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-1446017748721054620</id><published>2010-10-01T04:03:00.012+09:00</published><updated>2010-10-07T17:56:09.107+09:00</updated><title type='text'>Ubuntu 10.04 で x86 向け Android 2.2 (froyo-x86) のビルド（コンパイル）と iso イメージの構築</title><content type='html'>&lt;p&gt;今回は &lt;a href=&quot;http://www.android-x86.org/&quot;&gt;android-x86.org&lt;/a&gt; を参考にして、Android を ubuntu 10.04 でコンパイルし、インストールディスクを作成してみます。ただし、記事のままだとマウスが動かないなどの状態だったので、実用的に使えるレベルで動作させるには、このブログ記事の内容に加えてカーネルをカスタマイズしていく必要がありそうです。&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;コンパイルを行う環境として、ハードディスクドライブは２０ＧＢ、メモリとしては最低でも１ＧＢぐらい必要です。特に VMware や VirtualBox 等仮想環境でコンパイルする場合は割り当てるリソース量を多めにしてください。&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;まず、Java について躓いたのでメモ。Ubuntu 10.04 では、OpenJDK を標準化したいらしく、sun による実装がパッケージマネージャに含まれていないらしい。まず、Java のリポジトリを追加する。次の % までが１行ですので、お気をつけ下さい（出力は書いていません）。&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;mycode&quot;&gt;% sudo add-apt-repository &quot;deb http://archive.canonical.com/ lucid partner&quot;&lt;br /&gt;
% sudo apt-get update&lt;br /&gt;
&lt;/div&gt;&lt;p&gt;ちなみに、Java 1.5 JDK でのコンパイル環境を想定しているらしいが、最近最新版の 1.6 でもコンパイルできるようにパッチがあてられたらしいので問題なし。&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;コンパイル等に必要なパッケージをインストール。&lt;br /&gt;
&lt;p&gt;&lt;div class=&quot;mycode&quot;&gt;% sudo apt-get -y install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind g++&lt;br /&gt;
&lt;/div&gt;&lt;p&gt;ソースコードの管理は git で行われているが、Android 用にこれをラッピングする repo というスクリプトがあるのでそれを ~bin にインストールし、実行権限とパスを設定。&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;mycode&quot;&gt;% mkdir ~bin&lt;br /&gt;
% curl http://android.git.kernel.org/repo &gt;~/bin/repo&lt;br /&gt;
% chmod a+x ~/bin/repo&lt;br /&gt;
% export PATH=$PATH:~/bin&lt;br /&gt;
&lt;/div&gt;&lt;p&gt;JAVA_HOME を設定する必要があるようなので、設定。&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;mycode&quot;&gt;% export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.**.**&lt;br /&gt;
&lt;/div&gt;&lt;p&gt;（Java のバージョンは変わるので、各自調整してください。Ubuntu のデフォルトのシェルである bash の場合、java-6-sun-1.6. まで入力したら[TAB]キーでその後ろを補完してくれます）&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;ホームディレクトリの直下に android-x86 というディレクトリを作成し、そこにリポジトリからソースコードをダウンロード。&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;mycode&quot;&gt;% mkdir ~android-x86&lt;br /&gt;
% cd ~android-x86&lt;br /&gt;
% repo init -u git://git.android-x86.org/manifest.git -b froyo-x86&lt;br /&gt;
% repo sync&lt;br /&gt;
&lt;/div&gt;&lt;p&gt;repo init の行で、名前とメールアドレスを聞かれるので、入力する。その次の repo sync を実行した時点で、ソースコードのダウンロードが始まる。結構時間かかります。ちなみに、執筆時では実際にダウンロードした全容量は 4.6 GB でした。&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;ダウンロードが完了したら、コンパイルして iso イメージを作成。USB イメージも作成できるようですが、今回はより簡単な Live CD を作成してみます。Live CD を作成するには、make のターゲットを iso_img とします。ＯＳを構築するので、このコンパイル作業には数時間かかります。&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;mycode&quot;&gt;% make iso_img TARGET_PRODUCT=generic_x86&lt;br /&gt;
&lt;/div&gt;&lt;p&gt;以上の作業で、~/android/out/target/product/generic_x86/generic_x86.iso が作成されているはずです。これが Live CD 本体ですので、このファイルを CD に焼き、CD からブートしてみてください。BIOS で CD から起動できる設定にするのをお忘れなく。なお、Live ディスクからハードディスクへのインストールも可能のようです。&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;なお、USB イメージの作成だけでなく、iso データを圧縮するかオプションで設定したり、マルチプロセッサによる並列化等ができるようですが、これについては&lt;a href=&quot;http://www.android-x86.org/getsourcecode&quot;&gt;公式ページ&lt;/a&gt;を参照してください（英語）。&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;コンパイルやインストールはできましたが、やはり一部カスタマイズしないとマウスなどが使えなかったりしました。もう少し調べる必要がありそうです。&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;b&gt;参考ページ：&lt;/b&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://www.android-x86.org/getsourcecode&quot;&gt;公式ページ（英語）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://itpro.nikkeibp.co.jp/article/COLUMN/20090219/325052/&quot;&gt;ITpro 旧バージョン cupcake のインストール手順&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/1446017748721054620/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2010/10/ubuntu-1004-x86-android-22-froyo-x86.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/1446017748721054620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/1446017748721054620'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2010/10/ubuntu-1004-x86-android-22-froyo-x86.html' title='Ubuntu 10.04 で x86 向け Android 2.2 (froyo-x86) のビルド（コンパイル）と iso イメージの構築'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-9077726774798598442</id><published>2010-09-13T01:01:00.036+09:00</published><updated>2010-09-15T22:26:35.269+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ニコニコ動画"/><category scheme="http://www.blogger.com/atom/ns#" term="プログラミング"/><title type='text'>ニコニコ生放送と Ustream のコメントを統合する Nwhois プラグイン - UniUnifier</title><content type='html'>&lt;p&gt;…を作ってみました。&lt;br /&gt;
&lt;br /&gt;
今まではブログ記事に乗せていましたが、流れてしまうので独立ページに移動しました。&lt;a href=&quot;http://hseisyu.blogspot.com/p/ustream-nwhois-uniunifier.html&quot;&gt;こちら&lt;/a&gt;からどうぞ。&lt;br /&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/9077726774798598442/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2010/09/ustream-nwhois.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/9077726774798598442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/9077726774798598442'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2010/09/ustream-nwhois.html' title='ニコニコ生放送と Ustream のコメントを統合する Nwhois プラグイン - UniUnifier'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-2052863957453864026</id><published>2010-07-29T11:15:00.003+09:00</published><updated>2010-08-12T18:31:33.140+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="プログラミング"/><title type='text'>Ubuntu 10.04 で C++ が利用可能な環境を整える （g++ のインストール）</title><content type='html'>Ubuntu 10.04 にはデフォルトで C++ コンパイラがインストールされていませんので、インストール方法の紹介です。&lt;br /&gt;
&lt;br /&gt;
C++ コンパイラをインストールするには、[アプリケーション]-[アクセサリ]-[端末]を起動して、次のようなコマンドでインストールできます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% sudo apt-get install g++&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
パスワードを聞かれたら入力し、その後本当にインストールしてよいか聞かれるので、「はい」を意味する y ボタンを押してインストールを実行します。インストールが終わったら、もう既に利用可能になっています。ソースコードのファイル名が &quot;program.cpp&quot; だった場合、次のようなコマンドでコンパイルします。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% g++ program.cpp&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
このように実行して、何も出力されなかったら正常にコンパイルされています。a.out という実行ファイルが生成されているはずです。もし、No such file or directory のようなエラーが出る場合、作業ディレクトリにソースファイルが存在するか確認してください。&lt;br /&gt;
&lt;br /&gt;
生成された実行ファイル（a.out）は、コロンとスラッシュを頭につけて、次のように実行します。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% ./a.out&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
ちなみに、はじめからインストールされている C コンパイラは gcc という名前なので、g++ の代わりに gcc を使うと C コンパイラを使うことになります。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/2052863957453864026/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2010/07/ubuntu-1004-c.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/2052863957453864026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/2052863957453864026'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2010/07/ubuntu-1004-c.html' title='Ubuntu 10.04 で C++ が利用可能な環境を整える （g++ のインストール）'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-634403602673169346</id><published>2010-05-17T12:11:00.016+09:00</published><updated>2010-07-29T10:59:30.169+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="プログラミング"/><title type='text'>Ubuntu 10.04 への OpenGL + GLUT のインストール</title><content type='html'>Ubuntu 10.04 で OpenGL を利用するためのインストール手順です。OpenGL + GLUT での開発ができる環境を構築します。&lt;br /&gt;
&lt;br /&gt;
まず、ビデオカードのドライバを入れるところから始めます。無くても一応動きますが、ビデオカードによる並列処理が利用できないのでかなり動作が遅くなります。ドライバは GNOME メニューの [システム]-[システム管理]-[ハードウェア・ドライバ] あたりからでも入れられるかもしれないですが、無理な場合はビデオカードのベンダーのホームページに行ってダウンロードし、手順に従ってインストールします。その後おそらく再起動を求められると思うので、再起動します。&lt;br /&gt;
&lt;br /&gt;
次に、OpenGL と GLUT を利用するために必要なパッケージ群をインストールします。Ubuntu ではインストールは基本的に apt が自動的にやってくれます。実は Ubuntu 10.04 では、freeglut3-dev だけをインストール指定すれば、全ての必要な依存パッケージを芋づる式に自動的にインストールしてくれます。OpenGL の最新機能を利用したい場合は、libglew1.5-dev （とそれについてくる依存パッケージ）をインストールすると良いみたいです。ターミナルを開いて、&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% sudo apt-get update&lt;br /&gt;
% sudo apt-get install freeglut3-dev libglew1.5-dev&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
あたりでできるはずです。依存パッケージもインストールしてよいかと尋ねられるので、許可します（１回目の sudo コマンドでパスワードを求められるので入力して下さい）。&lt;br /&gt;
&lt;br /&gt;
ここまでできたら、&lt;a href=&quot;http://www.wakayama-u.ac.jp/%7Etokoi/opengl/libglut.html&quot;&gt;こちら&lt;/a&gt;の４章に従ってサンプルプログラムを動かしてみましょう。有名な床井先生の入門ページです。あ、もうインストールは全て終わっているので、２章の「GLUT のインストール」は必要ないですよ。プログラム起動時、ビデオカードのドライバが正常に利用できない場合（あるいは入っていない場合）、３Ｄアクセラレータが使えないよ、という警告をしてくれるようです。&lt;br /&gt;
&lt;br /&gt;
ちなみに床井先生のページの３章のコンパイルコマンドについて、プログラムのソースコードが program.c の時、&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% cc program.c -lglut -lGLU -lGL&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
で動くことを確認しています。&lt;br /&gt;
&lt;br /&gt;
もし動かない場合は、大文字小文字等の打ち間違い注意や、-lglut -lGLU -lGL の順番も揃えた方がいいかもしれません。上で紹介した方法は最小限の構成なので、それでも動かない場合はさらにパッケージ libxmu-dev libxi-dev を追加した後、ライブラリを可能な限り全てリンクすると動くかもしれません。これらは昔必要だったけど、今は必要ない（と思われる）パッケージです。上の作業に加えて、次のようにしてみてください。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% sudo apt-get install libxmu-dev libxi-dev&lt;br /&gt;
% cc program.c -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -lpthread&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
もしこれで動作したら、一つずつオプションを減らしていって最小限の構成を調べてみてもいいかもしれません。&lt;br /&gt;
&lt;br /&gt;
# Ubuntu にはＣ＋＋コンパイラが標準でインストールされていないので、Ｃ＋＋を使いたい場合は g++ も入れて下さい。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% sudo apt-get install g++&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;!--
&lt;div style=&quot;margin: 10px; padding: 10px; background-color:#EEF; border: 1px dashed gray&quot;&gt;&lt;br /&gt;
OpenGL のバージョンや利用可能な機能を調べるためのツールとして glxinfo というものがあります。このツールを利用して、ハードウェアを利用してレンダリングが行われているか調べることができます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% sudo apt-get update&lt;br /&gt;
% sudo apt-get install mesa-utils&lt;br /&gt;
% glxinfo | grep direct&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
で、次のような出力が得られるとＯＫです。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;direct rendering: Yes&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
正しくビデオカードがインストールされている場合は大抵 Yes となっていて、インストールされていない場合は No となっているようです。&lt;br /&gt;
&lt;br /&gt;
Virtual PC 等の仮想マシンを利用している場合、ビデオカードの３Ｄアクセラレーションを利用できるかどうかは仮想化ソフトの設定によります。実験的にサポートされ始めていますので、試してみるのもありかと思います。&lt;br /&gt;
&lt;/div&gt;--&gt;&lt;br /&gt;
&lt;!--VirtualBox で３Ｄをオンにするとテストプログラムで segfault、オフにすると安定して動くが direct rendering = yes ですた。これは nouview になってるため常に yes なのだろうか？--&gt;</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/634403602673169346/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2010/05/ubuntu-1004-opengl-glut.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/634403602673169346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/634403602673169346'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2010/05/ubuntu-1004-opengl-glut.html' title='Ubuntu 10.04 への OpenGL + GLUT のインストール'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-6446709176870408294</id><published>2010-03-27T08:18:00.002+09:00</published><updated>2010-03-27T08:23:37.785+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="シェル"/><title type='text'>Mac で圧縮された zip ファイルを Ubuntu で解凍した場合のファイル名文字コード修正</title><content type='html'>Mac で圧縮された zip ファイルを Ubuntu で解凍すると、ファイル名に&lt;a href=&quot;http://hseisyu.blogspot.com/2009/12/blog-post.html&quot;&gt;こちら&lt;/a&gt;のページで書いた NFC/NFD の濁点と半濁点の問題が発生してしまいました。&lt;br /&gt;
&lt;br /&gt;
そこでツールを使って修正する方法を見つけました。convmv というツールを用います。ツールのインストールは Ubuntu では非常に簡単ですね。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% apt-get update&lt;br /&gt;
% apt-get install convmv&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
インストールしてよいか聞かれる場合があります。インストール後、次のコマンドを実行すると変換されるファイルを確認することができます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% convmv -r -f utf8 -t utf8 --nfc [dir]&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
これはテストだけなので、確認後 -notest オプションを付け加えることで実際に変換します。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% convmv -r -f utf8 -t utf8 --nfc [dir] --notest&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
以上です。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/6446709176870408294/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2010/03/linux-ubuntu-mac.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/6446709176870408294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/6446709176870408294'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2010/03/linux-ubuntu-mac.html' title='Mac で圧縮された zip ファイルを Ubuntu で解凍した場合のファイル名文字コード修正'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-9206539609660525054</id><published>2010-02-05T12:50:00.005+09:00</published><updated>2010-02-11T00:06:42.150+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LaTeX"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Ubuntu 9.10 で latex おまかせインストール</title><content type='html'>今回は Ubuntu 9.10 で latex を自動インストールする方法です。あまり latex の中まで詳しく分かっていないのですが、どうやら「Ubuntu 9.10 Desktop 日本語 Remix CD 版」では比較的簡単にウィザードを使ってインストールできるみたいなので報告です。&lt;br /&gt;
&lt;br /&gt;
まず、アップデートマネージャや Synaptic 等のパッケージマネージャが起動していたら終了させておきます。次に [システム]-[システム管理]-[日本語環境セットアップ・ヘルパ] をクリックします。パスワードを求められるので入力します。&lt;br /&gt;
&lt;br /&gt;
ここで、どうやらアップデートマネージャがシステムをアップデートしようとするみたいなので、待ってみます。終わった後にもし再起動が必要といわれれば再起動します。再び[システム]-[システム管理]-[日本語環境セットアップ・ヘルパ]を選択すると、「Main 及び Universe コンポーネントから追加するパッケージの選択画面」に移ります。色々ほしいものがあればチェックを付けてください。latex は Japanese Team からの追加パッケージなのでまだ表示されていません。「ＯＫ」を2回ほどクリックすると Japanese Team のリポジトリからのインストール画面になります。ここで、latex-env-ja と latex-extra-ja の二つのパッケージを選択してＯＫボタンを。全てインストールが終われば latex が使えるようになっていると思います。&lt;br /&gt;
&lt;br /&gt;
あ、Ubuntu のデフォルトの文字コードである UTF-8 は確か latex で使えないはずので、EUC-JP を使ってください。例えば、もし latex のソースを書くのに gedit を使っているのであれば、「名前をつけて保存」のところで「エンコーディング」をクリックして、「EUC-JP」を選びます。もし EUC-JP が表示されていなければ、「追加と削除」から日本語のところにある EUC-JP を選択します。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/9206539609660525054/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2010/02/ubuntu-910-latex.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/9206539609660525054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/9206539609660525054'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2010/02/ubuntu-910-latex.html' title='Ubuntu 9.10 で latex おまかせインストール'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-8828569173436528143</id><published>2009-12-26T08:07:00.022+09:00</published><updated>2010-10-11T13:31:36.351+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><category scheme="http://www.blogger.com/atom/ns#" term="互換性"/><title type='text'>ＯＳ間の文字コード互換性（Win, Mac, Linux）</title><content type='html'>最近 Mac を使い始めたのもあって、Win と Linux 間だけでなく Mac も含めてＯＳ間の互換性を調べていましたが、文字コードについてはそれぞれが微妙に違うものを採用していたりして、本当に面倒くさいことがわかりました。今回はこのあたりをちょっとまとめてみます。&lt;br /&gt;
&lt;br /&gt;
（Mac で圧縮した zip ファイルを Ubuntu で解凍した際のファイル名の文字コード問題を修正する機会があったので、その方法を&lt;a href=&quot;http://hseisyu.blogspot.com/2010/03/linux-ubuntu-mac.html&quot;&gt;こちら&lt;/a&gt;のページに載せておきました）&lt;br /&gt;
&lt;!--
お約束ということで、まずは問題の原因を軽く述べておきたいと思います。これは二進数のデジタルデータ（数字）でしか文字を表せないコンピュータに日本語をどう割り当てるか、その割り当て方に関する問題ですね。例えば、二進数のこの数字は「あ」を表し、別の数字は「い」を表す、といったように決めてデジタルデータで文字を保存します。このデジタルの数字と文字の対応が異なると、日本語に戻すことはできなくなります。「１」で「あ」を表し、「２」で「い」を表す人がいて、別のところに「１」で「い」を表し、「２」で「あ」を表す人がいたとすると、数字をそのまま交換しても元の文章に戻せないですね。

そこで（正確じゃないですが、便宜的に説明すると）、これらの文字と数字の対応表のようなものを規格化してしまえばよい、という話になります。実際には、文字に対して割り当てられる「文字コード」として規格化されています。最小限の英語のアルファベット等が定義された ASCII コードという文字コードが全世界共通で用いられています。これだけでは日本語が扱えないので、その ASCII を拡張した JIS, Shift-JIS, UTF-8 等が日本で用いられています。日本語の文字コードはこのように一種類に統一されておらず、文字コードの誤判断により文字化けの原因になったりします。

さらに「改行」の扱いというものもあります。テキストを作る際に「次の行に行く」というコードが無いと、１行のものしか表現できなくなってしまいます。ASCII コードには改行を表すコードが２種（LF, CR）含まれていて、この２つの記号を用いて改行を表すことになります。ASCII を拡張した（大半の文字コードがそうですが）文字コードにももちろん含まれています。ところが、システムごとに LF, CR, CR+LF という三通りのどれかが一つの改行の意味として使われています。つまり、LF というコードが改行を意味するシステムもあれば、CR+LF が改行を表すシステムもあり、お互いにデータを交換すると改行されるべきところで改行されない、などのトラブルが起こります。

さらに面倒なことに、（語弊のある言い方かもしれませんが）文字コードと改行コードは独立しています。つまり、文字コードと改行コードの組み合わせで一つのテキストデータが構成されます。例えば、Shift-JIS を文字コードとして採用していても、改行は LF の場合もあれば、CR+LF の場合もあります。以下にこれらをまとめてみます。
--&gt;&lt;br /&gt;
&lt;table border&gt;&lt;tr&gt;&lt;th&gt;ＯＳ&lt;/th&gt;&lt;th&gt;文字コード&lt;/th&gt;&lt;th&gt;改行コード&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;td&gt;基本は CP932（Shift-JIS に Microsoft の独自仕様を足したもの）、最近は UTF-8・UTF-16 も。&lt;br&gt;カーネルや .NET 内部は UTF-16 と思われる&lt;/td&gt;&lt;td&gt;CR+LF&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Linux&lt;/td&gt;&lt;td&gt;システムに依るが、主に UTF-8、EUC-JP 等&lt;/td&gt;&lt;td&gt;LF&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;旧 Mac&lt;/td&gt;&lt;td&gt;MacJapanese&lt;br /&gt;
（Shift-JIS に Apple の独自仕様を足したもの）&lt;/td&gt;&lt;td&gt;CR&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Mac OS X&lt;/td&gt;&lt;td&gt;アプリケーションは MacJapanese&lt;br&gt;&lt;br /&gt;
カーネルはおそらく UTF-8 か UTF-16&lt;br&gt;&lt;br /&gt;
ファイルシステムは UTF-16 NFD（Mac 独自）&lt;/td&gt;&lt;td&gt;LF&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;div align=&quot;right&quot;&gt;&lt;small&gt;※Mac は詳しくないのですが、全て 10.5 (Leopard) で確認しています&lt;/small&gt;&lt;/div&gt;&lt;br /&gt;
このようにしてみると、一般的なものにちょっと独自仕様を足したものが目に付きますね。Mac も Win も、Shift-JIS を基本にしているのでお互いにデータのやり取りはできますが、例えば Mac で作成した標準テキストを Win に持っていくと、文字は読めますが改行コードが LF と CR+LF で異なるために改行がバグります。また、一部のお互いの独自仕様が絡む文字が含まれるとやり取りができなくなる可能性があります。&lt;br /&gt;
&lt;br /&gt;
Mac に関しては非常に汚いですね。Mac OS X までは Shift-JIS を独自拡張した MacJapanese ベースに改行コードとして CR を使ってましたが、Mac OS X からは UNIX ベースになったため改行コードが LF に変わっています。さらに、OS X のシステムも MacJapanese をデフォルトのエンコーディングとしながら、内部的には UTF-8 を利用し、ファイルシステム（HFS+）に NFD 正規化方式を利用した UTF-16 と全部で３種類利用しているようです。&lt;br /&gt;
&lt;br /&gt;
正規化方式の話が出ましたが、「UTF-8」等と書くとほとんどが一般的な NFC 正規化方式を意味し、NFD 方式は Mac ぐらいでしか利用されていません。NFC は濁点や半濁点、ドイツ語等に見られるウムラウトの文字を含めて一字とするのに対して、NFD は「が」→「か」＋「゛」のように分離して表現します。Windows や Linux では NFD に対応しているソフトは少なく、トラブルの原因になりかねません。つまり、濁点や半濁点を含むファイル名を直接テキスト等に書き出すと NFD として書き出され、一般的な UTF エディタ等では開けなくなったり、バグったりします。なので、例えばターミナルから&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% ls &gt; dirindex.txt&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
として書き出すと、UTF-8 NFD（UTF-8-MAC というやつです）で書き出されてしまい、Windows の UTF 対応エディタから開いた場合エラーとなる場合があります。一方で、Mac のテキストエディットでは UTF-8-MAC の文字も UTF-8 のファイルとして読み込めば問題なく表示され、どちらかを意識することなく編集できます。逆に言うと、そこに NFD が混じっていても全く区別がつかないので、Win 等に持っていく場合は注意が必要です。（ちなみに、UTF-8-MAC のテキストを開き、NFD の部分を消して同じ文字を打ち直すとその部分だけ NFC になりました）&lt;br /&gt;
&lt;br /&gt;
ただ、Mac・Linux 間はどちらも UNIX ベースということもあって、Mac のデフォルトエンコーディングの MacJapanese を UTF-8 として、かつ日本語のファイル名を利用しなければ、UTF-8 ベースの Linux ディストリビューションと文字コードに関して完全互換になりそうですね。&lt;br /&gt;
&lt;br /&gt;
しかし、様々な文字コードにソフトを対応させたり文字化け解消や適宜変換をしたりと、世界中でかなりの労力が裂かれてると思うのですが、いい加減統一する方向に向かないんですかね。システムの肥大化や文字化け等のトラブル、ＯＳ間の受け渡しコストとか、統一してしまえば全部解決する気がするんだけどなぁ…。UTF は全世界の文字をほぼ全部表現できることを目指してるので、もう素直に全部 UTF-8 あたりに統一すればいいのに。&lt;br /&gt;
&lt;br /&gt;
…まぁ、色々と大人の事情があるんでしょうね。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/8828569173436528143/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2009/12/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/8828569173436528143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/8828569173436528143'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2009/12/blog-post.html' title='ＯＳ間の文字コード互換性（Win, Mac, Linux）'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-1628587128162989111</id><published>2009-12-07T14:50:00.008+09:00</published><updated>2009-12-26T08:29:23.675+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><category scheme="http://www.blogger.com/atom/ns#" term="XREA"/><category scheme="http://www.blogger.com/atom/ns#" term="サーバー"/><category scheme="http://www.blogger.com/atom/ns#" term="プログラミング"/><title type='text'>[XREA] PHP による .htpasswd の生成</title><content type='html'>今回は apache で会員用ページに認証をかける時、XREA/coreserver のコントロールパネルの .htpasswd の生成ツールと同じパスワードを出力する php スクリプトの紹介です。このスクリプトを使うことで、php のスクリプトで .htpasswd を作成できるようになります。&lt;br /&gt;
&lt;br /&gt;
色々と調査してみたのですが、どうやら XREA/coreserver の .htpasswd 生成スクリプトでは標準 DES を用いているようですね。他の認証方式としては md5 等もありますが、同じ入力文字列に対して得られる出力結果（ハッシュ値）が固定なので、出力結果を比較することで同じパスワードが利用されているかどうかがばれてしまいます。一方、DES には平文に加え、salt（調味料ぐらいの意味？）というパラメータの組で一意の暗号化結果が得られるようになります。これにより、同じパスワードを暗号化しても、その都度 salt を変更すれば同じ出力結果になることを避けることができます。&lt;br /&gt;
&lt;br /&gt;
標準 DES を用いた場合、平文に２文字の salt を与えます。また、出力結果の始め２文字にも salt 自身が示されます。例えば、XREA/coreserver でパスワード &quot;a&quot; を暗号化した場合、&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;aiDm98/1yAB/6&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
を得ました。この中の、始めの &quot;ai&quot; が salt に該当し、元のパスワード &quot;a&quot; と、salt &quot;ai&quot; の二つの組み合わせで暗号化すれば上記の &quot;aiDm98/1yAB/6&quot; が得られることになります。&lt;br /&gt;
&lt;br /&gt;
php でこの標準 DES による暗号化を行うには、少なくとも XREA/coreserver 上では、$pass を平文、$salt を２字の文字列として&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;$r = crypt($pass, $salt);&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
とすれば、戻り値として暗号化結果が得られます。なお、php の crypt 関数は引数の状態（数や文字数）やオペレーティングシステムによって挙動が違うようなので、他の環境で完全に動作するかは未確認です。以上から、XREA/coreserver の出力結果を PHP からも再現したい場合、&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;echo crypt(&quot;a&quot;, &quot;ai&quot;);&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
とすることにより、XREA/coreserver の .htpasswd 生成ツールと同じ結果が得られます。実行してみると、&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;aiDm98/1yAB/6&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
きちんと同じパスワードが得られていることが確認できました。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/1628587128162989111/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2009/12/php-htpasswd.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/1628587128162989111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/1628587128162989111'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2009/12/php-htpasswd.html' title='[XREA] PHP による .htpasswd の生成'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-2725581297314031254</id><published>2009-11-05T07:07:00.008+09:00</published><updated>2009-11-05T07:24:36.326+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="シェル"/><title type='text'>ssh を使って Linux のあるＰＣのウィンドウを自分のＰＣで表示</title><content type='html'>以前は xauth や xauth 等を利用して、サーバーの許可設定や環境変数 DISPLAY を注意深く設定して、やっとウィンドウを他のＰＣに取り出すことができました。以前は面倒くさい手順が必要でしたが、最近の Linux では ssh がトンネル化してくれて非常に簡単にできるようになっていますね。&lt;br /&gt;
&lt;br /&gt;
ウィンドウを送りたい端末Ａと、ウィンドウを受け取って表示したい端末をＢがあるとします。まず、Ａの側で ssh サーバーを起動しておきます。Ubuntu の場合、&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% sudo apt-get install ssh&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
でインストールしてくれて、しかもサーバーの自動起動設定もしてくれます。&lt;br /&gt;
&lt;br /&gt;
そしてＢの側から、&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% ssh -X [Ａのユーザー名@ＡのＩＰアドレス]&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
と -X オプションを書いてＡにログインすると、そのセッションで開いた X のアプリケーションはＢのディスプレイに表示されます。これで、共用の Linux のパソコンがあった場合、誰かが使っていても画面を自分の画面に引き寄せて作業できるようになります。&lt;br /&gt;
&lt;br /&gt;
もちろん、この方法はＢの側の X サーバーを利用するので、X サーバーが起動してない Windows の端末エミュレータ等（Tera Term とか Putty）では使えないので気をつけてください。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/2725581297314031254/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2009/11/ssh-wolinux.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/2725581297314031254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/2725581297314031254'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2009/11/ssh-wolinux.html' title='ssh を使って Linux のあるＰＣのウィンドウを自分のＰＣで表示'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-3539513111281758951</id><published>2009-11-03T13:04:00.014+09:00</published><updated>2010-05-17T23:42:44.031+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Ubuntu 9.10 への OpenGL のインストール</title><content type='html'>Ubuntu 9.10、出ましたね。これに合わせて環境を 9.10 でクリーンインストールし直したので、その時の OpenGL 関係のインストール方法についてまとめておきます。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;red&quot;&gt;注意！この記事は古い情報になっています。最新の方法については&lt;a href=&quot;http://hseisyu.blogspot.com/2010/05/ubuntu-1004-opengl-glut.html&quot;&gt;こちら&lt;/a&gt;をご覧下さい（リンク先は Ubuntu 10.04 への、となっていますが 9.10 でも適用できると思います）&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
まず、ビデオカードのドライバを入れます。ビデオカードのベンダーのホームページに行ってドライバをダウンロードし、手順に従ってインストールします。[システム]-[システム管理]-[ハードウェア・ドライバ]あたりからでも入れれるはず。インストール後、&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% glxinfo | head&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
で、次のような一文が見つかるとＯＫ。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;direct rendering: Yes&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
次に、依存関係のファイルをインストール。必要なパッケージは次の通り。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;OpenGL … libgl1-mesa-dev&lt;/li&gt;
&lt;li&gt;glut … freeglut3-dev&lt;/li&gt;
&lt;li&gt;glew（最新・拡張機能を使いたい場合） … libglew1.5-dev&lt;/li&gt;
&lt;li&gt;その他依存ファイル … libxmu-dev, libxi-dev&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
インストールは、基本的に apt で自動的にやってくれます。ターミナルを開いて、&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% sudo apt-get update&lt;br /&gt;
% sudo apt-get install libgl1-mesa-dev freeglut3-dev libglew1.5-dev libxmu-dev libxi-dev&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
あたりでできるはず。これらの依存関係もインストールしてよいか尋ねられた場合は、もちろんインストール。１回目の sudo コマンドでパスワードを求められるので入力する。&lt;br /&gt;
&lt;br /&gt;
ここまでできたら、&lt;a href=&quot;http://www.wakayama-u.ac.jp/%7Etokoi/opengl/libglut.html&quot;&gt;こちら&lt;/a&gt;の４章に従ってサンプルプログラムを動かしてみましょう。有名な床井先生の入門ページです。あ、もうインストールは全て終わっているので、２章の「GLUT のインストール」は必要ないですよ。&lt;br /&gt;
&lt;br /&gt;
ちなみに床井先生のページの３章のコンパイルコマンドについて、プログラムのソースコードが program.c の時、Ubuntu 9.10 では&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% cc program.c -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -lpthread&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
で動くことを確認しています。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/3539513111281758951/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2009/11/ubuntu-opengl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/3539513111281758951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/3539513111281758951'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2009/11/ubuntu-opengl.html' title='Ubuntu 9.10 への OpenGL のインストール'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-5959667459971554291</id><published>2009-11-03T12:35:00.022+09:00</published><updated>2010-06-26T09:25:12.509+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="XML"/><category scheme="http://www.blogger.com/atom/ns#" term="データベース"/><category scheme="http://www.blogger.com/atom/ns#" term="プログラミング"/><title type='text'>ファイルを一括ダウンロード＆一括ファイル名編集</title><content type='html'>最近、ある会員用ページで２００曲以上の mp3 データをダウンロードできる権利を手に入れました。ところが、まとめてダウンロードできずに一つ一つリンクが貼ってありました。しかも、そのダウンロードしたファイルが全てローマ字表記で、&quot;hajime.mp3&quot;, &quot;tsugi.mp3&quot; といったように非常にわかりにくかった。&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;番号&lt;/th&gt;&lt;th&gt;タイトル&lt;/th&gt;&lt;th&gt;ファイル名&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;始めの曲&lt;/td&gt;&lt;td&gt;hajime.mp3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;次の曲&lt;/td&gt;&lt;td&gt;tsugi.mp3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;三番目の曲&lt;/td&gt;&lt;td&gt;sanbanme.mp3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;：&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
そこで、データを丸ごとダウンロードし、このダウンロードした mp3 をローマ字じゃなくて全部日本語の曲名のファイル名にしたい、というお話。例えば、「hajime.mp3」は「1-始めの曲.mp3」に、「tsugi.mp3」は「2-次の曲.mp3」に変換といった具合。もし数曲程度なら手動で整理した方が早いけれど、３桁もの数の曲データの手動ダウンロードと手動ファイル名修正はいかがなものかと。&lt;br /&gt;
&lt;br /&gt;
とりあえず、ファイルの一括ダウンロードはすぐにできそうなので、ダウンロードツールを探しました。&lt;br /&gt;
&lt;br /&gt;
あ…会員ページにログインする機能のないダウンロードツールは利用できないんだった。。そこで、Firefox のアドオンで、表示されているコンテンツを丸ごとダウンロードできる DownThemAll をインストールしてデータを一括ダウンロードしました。&lt;br /&gt;
&lt;br /&gt;
ダウンロード設定。しばらく待つと、全部のファイルが無事ダウンロード完了。&lt;br /&gt;
&lt;br /&gt;
さて、次はファイル名編集。幸い、HTML のテーブルの形でデータが整理されてたので、HTMLのソースから該当のテーブル部分を抜き出して、XML パーサにかけたらできそうですね。HTML の元のソースから table タグを見つけて抜き出し、拡張子 XML で保存。&lt;br /&gt;
&lt;br /&gt;
ブラウザで開いてみると…構文エラーが発生。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;エラー： invalid attribute value&lt;br /&gt;
&amp;lt;td width=5%&amp;gt;&lt;/div&gt;&lt;br /&gt;
…そうか、XML の構文はかなり厳格で、属性値にダブルクォーテーションがないとか、閉じ括弧があらゆるタグについてないとエラーになるとか、色々あったんですね。HTML 構文はそのあたり適当でもブラウザが適宜解釈してくれるんだけど、XML ではそうは行かない。HTML を XML に変換するのに躓くのは想定外というか、そういうことがあったって忘れてた。&lt;br /&gt;
&lt;br /&gt;
そこで、このあたりを修正できるツールを探していると、Tidy というツールを発見。XML ドキュメントのエラーを探して自動で修正してくれるツールみたいです。早速 Windows 版をインストールして試してみる。&lt;br /&gt;
&lt;br /&gt;
お…文字化けで肝心の日本語を変換できず…。あれこれ他のページを探してみるとこのページを発見！&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://html.idena.jp/program/index.shtml&quot;&gt;http://html.idena.jp/program/index.shtml&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
このツールを使うと、無事に XML 構文が修正されて、XML として読み込むことができました。&lt;br /&gt;
&lt;br /&gt;
ちなみに、Linux にても Tidy は利用できました。文字コードを UTF-8 にしておいて、次のコマンドを使いました。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% tidy -utf8 -asxml input_file &amp;gt; output_file&lt;/div&gt;&lt;br /&gt;
ただし、この方法で生成した出力ファイルには１つ問題がありました。&amp;amp;nbsp; が存在した場合、これは XML で定義されていないためにこの後使う expat でエラーになるようです。あまり綺麗ではないのですが、結局ストリーミングエディタを使って無理やり矯正してみました。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% sed -e &#39;s/&amp;amp;nbsp;/ /g&#39; output_file2 &amp;gt; out.xml&lt;/div&gt;&lt;br /&gt;
さて、この XML を構文解析して、ファイル修正スクリプトを組む必要がありますね。XML パーサだったらどこにでもあるだろう。なんとなく、python で作る方法を調べる。xml.parsers.expat あたりが軽量で使いやすそうなことがわかったので、このあたりを使うことにした。&lt;br /&gt;
&lt;br /&gt;
…ソースを載せようと思ったけど、よく考えたら会員じゃない人は試せないわけね。雰囲気だけ載せときます。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;&lt;pre&gt;#!/usr/bin/python
# coding: utf-8

import sys
import os
import xml.parsers.expat

# XMLファイルをパース
def parseDocument(p, file):
    f = open(file, &#39;r&#39;)
    p.ParseFile(f) 
    f.close()

# 要素の開始（&amp;lt;td&amp;gt; とかのときに呼ばれる。attrs には td の属性値）
def start_element(name, attrs):
    # if name == &#39;td&#39;: とかの処理

# 要素の終了（&amp;lt;/td&amp;gt; とかのときに呼ばれる）
def end_element(name):
    # if name == &#39;td&#39;: とかの処理

def char_data(data):
    # data に値が入る

# パーサの作成
p = xml.parsers.expat.ParserCreate()

# ハンドラの設定
p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data

# table.xmlをパース
parseDocument(p, &#39;table_new.xml&#39;)
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
ここまで結構長かった。。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/5959667459971554291/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2009/11/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/5959667459971554291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/5959667459971554291'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2009/11/blog-post.html' title='ファイルを一括ダウンロード＆一括ファイル名編集'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-7668515271675543561</id><published>2009-11-03T11:48:00.005+09:00</published><updated>2009-11-03T13:14:09.700+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Web"/><category scheme="http://www.blogger.com/atom/ns#" term="XREA"/><category scheme="http://www.blogger.com/atom/ns#" term="サーバー"/><title type='text'>[XREA] 携帯サイトへリダイレクト</title><content type='html'>RewriteEngine を使って、携帯からのアクセスがあった場合に携帯ページへリダイレクトするコードを作ってみました。&lt;br /&gt;
XREA/Coreserver で動作を確認しています。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;http://foo.bar/&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
がトップページで&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;http://foo.bar/mobile/&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
が携帯サイトだった場合、ドキュメントルートの .htaccess に以下のコードを記述。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;RewriteEngine on&lt;br /&gt;
RewriteCond %{HTTP_USER_AGENT} (DoCoMo|Vodafone|J-PHONE|SoftBank|UP\.Browser|KDDI)&lt;br /&gt;
RewriteCond %{REQUEST_URI} !^/mobile/&lt;br /&gt;
RewriteRule ^(.*) http://foo.bar/mobile/ [L]&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
４行目で、携帯からのアクセスならあらゆる場合に /mobile/ に飛ぶようにしてますが/mobile/ の中にいる場合も /mobile/ に飛ぶと /mobile/ トップページに常に縛られるので、既に /mobile/ の中にいた場合だけ /mobile/ トップページに飛ぶのを除外するコードが３行目の !^/mobile/ です。&lt;br /&gt;
モバイルモバイル！&lt;br /&gt;
&lt;br /&gt;
現在のところ上手く動いてる。ただ、ルートに置くと他の全ページに影響するんでバグがあった場合ちょっと怖いですね。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/7668515271675543561/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2009/11/xrea.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/7668515271675543561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/7668515271675543561'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2009/11/xrea.html' title='[XREA] 携帯サイトへリダイレクト'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-1236721042386236743</id><published>2009-11-03T11:28:00.005+09:00</published><updated>2009-11-03T13:15:11.683+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="シェル"/><title type='text'>source コマンドではまった</title><content type='html'>親シェルから呼び出された子シェルで export された環境変数は、呼び出し元の親シェルでは反映されない。つまり、子シェルで環境変数を設定しても、親シェルに戻った瞬間にその環境変数の設定は失われるということ。&lt;br /&gt;
&lt;br /&gt;
別のスクリプトに書かれた環境変数の export を呼び出し元にも反映したいなら、そのスクリプトを子シェルで実行するのではなく、include と同じ意味を持つ source か . を利用して呼び出し元に取り込まないといけない。これだと、子シェルを作らず、親シェル上で実行される扱いになるので、別スクリプトの export が呼び出し元にも反映されるわけです。&lt;br /&gt;
&lt;br /&gt;
で、その source コマンドで嵌りました。&lt;br /&gt;
&lt;br /&gt;
最近の Ubuntu は dash という sh 拡張のシェルを基本にしているらしく、以前に作ってた bash スクリプトを動かすと source コマンドが存在しないエラーが発生。&lt;br /&gt;
&lt;br /&gt;
ネットで調べてみると、source と . は等価変換可能、ということだったので bash で書かれた source を全て . に変換。&lt;br /&gt;
&lt;br /&gt;
でも、これが上手く動作しない。&lt;br /&gt;
&lt;br /&gt;
実は、bash 用コード中に&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% source prog param&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
なんて無理やり source で呼び出したコマンド（prog）にパラメータ（param）を指定してて、bash 上ではこれでうまく行ってたんですが、&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% . prog param&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
ってやってみたら、param が付いてこないみたい。親シェルの引数がそのまま prog に引き継がれるよ…。&lt;br /&gt;
&lt;br /&gt;
どうやら source コマンドの後ろの引数の部分の仕様は未定義らしくて、実装によってその挙動が異なるみたいです。今まで使ってた bash では、引数処理まできちんとやってくれてたけど、どこでも動くわけではなかったみたい。&lt;br /&gt;
&lt;br /&gt;
結局のところ、dash ではどうしても無理そうだったので&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;% arg=123&lt;br /&gt;
% . myscript&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
として myscript 内で変数 arg を評価するコードに…。これを見てアセンブラの push を思い出しました。しかも、このスクリプトは共有されてて今まで通り bash から読み込まれることもあるので、arg の存在の有無を判定して、無さそうなら引数を確認…とかかなり複雑に。なんか汚い…。&lt;br /&gt;
&lt;br /&gt;
…まぁ、これで動作するようになったので動かないことはなくてほっとしたけどね。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/1236721042386236743/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2009/11/source.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/1236721042386236743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/1236721042386236743'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2009/11/source.html' title='source コマンドではまった'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-1297589776335831911</id><published>2009-10-26T02:56:00.015+09:00</published><updated>2009-11-03T13:15:46.359+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="プログラミング"/><title type='text'>Python のリダイレクトでエラー？</title><content type='html'>普通に動いている Python のプログラムをリダイレクトしたらエラーが...&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;codeEncodeError: &#39;ascii&#39; codec can&#39;t encode characters in position 2-9: ordinal not in range(128)&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
調べてみると、どうやら内部仕様からこのエラーが出てくるようですね。出力文字コードに ASCII 以外の文字が含まれる時は何かにエンコードする必要があるようです。標準出力の時のみ自動でＯＳの利用している文字コードにエンコードしてくれるのでエラーが出ませんでしたが、リダイレクト時には何にエンコードしたらいいのかわからずエラーが出たようです。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;mycode&quot;&gt;str = u&quot;あ&quot;&lt;br /&gt;
print str.encode(sys.getfilesystemencoding())&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
で解決するようです。&lt;br /&gt;
&lt;br /&gt;
...どうでもいいですが Python って便利って聞いてますがですが、文字コード周りは面倒ですね...。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/1297589776335831911/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2009/10/python.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/1297589776335831911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/1297589776335831911'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2009/10/python.html' title='Python のリダイレクトでエラー？'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4519619120592049224.post-7163977599008574830</id><published>2009-10-20T02:09:00.002+09:00</published><updated>2009-11-03T11:07:27.057+09:00</updated><title type='text'>ブログ作成</title><content type='html'>ブログ始めました。&lt;br /&gt;
&lt;br /&gt;
技術系の話題がメインです。</content><link rel='replies' type='application/atom+xml' href='http://hseisyu.blogspot.com/feeds/7163977599008574830/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hseisyu.blogspot.com/2009/10/blog-post_20.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/7163977599008574830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4519619120592049224/posts/default/7163977599008574830'/><link rel='alternate' type='text/html' href='http://hseisyu.blogspot.com/2009/10/blog-post_20.html' title='ブログ作成'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>