2011-11-02
■[Apache][Subversion][Redmine] SubversionとRedmineのアカウント共通化(プロジェクト毎にグループ化可能)
※2011-12-26 Redmine-1.3.0 に合わせて改訂。
Redmine-1.2からユーザテーブルにsaltが追加されたが、mod_auth_mysqlがRedmineのsaltの掛け方に対応していないので、パッチを当てる必要があった。変更点は以下の通り:
SubversionとRedmineのアカウントを共通化する事例はいくつかあったが、グループ認証を加えようとしたら、AuthMySQLGroup* の設定方法の詳細も設定例もほとんど無くてえらく試行錯誤したのでメモ。
用意するもの
- Apache
- mod_dav_svn
- mod_auth_mysql + Redmine salt対応パッチ
- Subversion
- Redmine (データベースはMySQLでインストールする)
- MySQL
設定
Apacheの設定に以下の設定を加える。
<VirtualHost ......> ...... ### Subversionの設定 ### ### Redmineのユーザテーブルを用いて認証を行う <Location 【Subversionリポジトリパスの基点】> DAV svn SVNParentPath 【Subversionリポジトリ群を格納するディレクトリ】 AuthName 【Realmの指定】 AuthType Basic Require valid-user AuthMySQLEnable On # my.cnfの設定に合わせて変更 AuthMySQLSocket /var/lib/mysql/mysql.sock # Redmineのdatabase.ymlの設定に合わせて変更 AuthMySQLHost 【MySQLサーバホスト名】 AuthMySQLUser 【MySQLユーザ名】 AuthMySQLPassword 【MySQLパスワード】 AuthMySQLDB 【MySQLデータベース名】 ### Redmineのテーブルとの紐付け # Redmineのユーザテーブル AuthMySQLNoPasswd Off AuthMySQLUserTable users AuthMySQLNameField login AuthMySQLPasswordField hashed_password AuthMySQLSaltField salt AuthMySQLPwEncryption sha1-rm # グループの設定。プロジェクト識別子をグループとして扱う AuthMySQLGroupTable "users, members, projects" AuthMySQLGroupCondition "users.id = members.user_id and projects.id = members.project_id" AuthMySQLGroupField "projects.identifier" ...... </Location> # リポジトリ毎にアクセスできるアカウントを制限したい場合は以下を追加 <Location 【個々のSubversionリポジトリパス】> # 下記のどちらかを設定 Require user 【RedmineログインID】 Require group 【Redimeプロジェクト識別子】 </Location> ...... </VirtualHost>
参考資料
- Redmineのアカウントを使って、Subversionの認証を行う on debian lenny
http://www.dabits.net/archives/87 - Redmineのアカウントと、Redmineが参照しているSubversionのアカウントの同期を取る
http://www.masatom.in/pukiwiki/Redmine/TIPS%BD%B8/#v12fcfff - Redmine の ERD を描いてみました
http://d.hatena.ne.jp/kiwamu/20090824/1251123971 - mod_auth_mysql付属ドキュメント (以下のパスはCentOS5.xの場合)
/usr/share/doc/mod_auth_mysql-3.0.0/CONFIGURE
2011-10-25
2011-07-05
2010-10-05
■[Emacs] Emacs23の日本語関連coding-system一覧
NTEmacs23でのskkの設定でハマったので、とりあえずメモ。
- ISO-2022-JP系
- J -- iso-2022-jp (alias: junet)
- J -- iso-2022-jp-2
- J -- iso-2022-jp-2004 (alias: iso-2022-jp-3)
- j -- japanese-iso-7bit-1978-irv (alias: iso-2022-jp-1978-irv old-jis)
2010-10-03
■[GDD2010JP] 基調講演
HTML5
- 「クラウドならベンダロックインしない」⇒ いや、GAEに依存すると思いっきりロックされるじゃん(^^;
- HTML5対応ブラウザ一覧の順序が、何気にIE9がトップ。Google Chromeは、シェアよりもテクノロジドライバの役目の方が大きいのかも。
- ブラウザのGPUサポートによるパフォーマンスアップが意外とインパクトが大きかった。
- ブラウザで使えるデバイスやAPIの範囲がどんどん広がってる ⇒ 将来的にブラウザだけで何でもカタが付く時代になるのかねぇ……。(それはそれでどーなんだ)
- Chrome Web Store
- Google Chromeの画面から、Webアプリの発見や再発見、およびマネタイズができる。
- 後で梯子外されたりしない? (Google Waveという「前科」があるので不安が拭えない)
Android関連
- 日本のAndroidデバイス総スルー状態を何とかしてくれ……。
- 7inch Galaxyは良さげ。
- エラーレポートの機能は確かに欲しい。
- アプリを「盗め」ないライセンシングサーバ。
- テザリング ⇒ 日本で使えるの?
- モトヤフォントがcontributeされたのは素晴しい。
- 日本androidの会1万人、ってそんなにいるのか(^^;
- Android Appsの日本のシェア: アプリ数5位、購入数(or金額?)2位 ⇒ デバイス本体のリリース状況が今一つなのに、がんばるなぁ。
Google App Engine関連
- トラヒックは日本2位。
- 日本のデベロッパー数9,000。
- エコポイントサイトはGAEも使ってたのか。
- for Businessでは以下を提供: SSL, SQL, テクニカルサポート、SLA, 一元管理コンソール, エンタープライズ向け価格
- GWT&Rooを提供。⇒ Rooは知らんかった。
Google日本語入力
- Google日本語入力 Cloud API: 変換機能をクラウドで提供。SocialIMEは辞書だけ?
- 10月に何かイベントがあるらしい。(メモ取り損ね)
DevQuiz
パックマン解かなくても参加できたっぽい。
■[GDD2010JP] Google App Engine についての最新情報
- Pythonプリコンパイル機能 ⇒ CPU時間が半分以下。(実時間は半分になってないけど)
- TaskQueue
- キューのサイズを指定可能。単位がTBまであるのにはワロタw
- BLOBにURLが付けられる。ただしパブリックURLなので注意が必要。
- 1000件制限がなくなった。(30秒制限は依然有効)
- バックグラウンドタスクは制限を延長する予定。
- マルチテナンシ機能。namespaceを指定可能。ドメイン名をnamespaceに指定することも可能。
- ○ datastore, memcache, taskqueue
- × blobstore
後半はひたすらマルチテナンシ機能の説明だが、割とどーでもいー。(実際に何か作るなら使うだろうけど^^;)
■[GDD2010JP] Apps Marketplace で広がるクラウドビジネスチャンス
Google Apps for Business: Gmail, Google Docs等の企業向け有償提供。
提供機能
- 企業システムとの統合
- AD/LDAP同期
- Exchangeとの併用
- Outlook, iPhone, Android, Blackberry
- 端末のリモート管理(?)
- 99.9% SLA (⇒ 年間停止8時間45分くらいか)
- 24x7電話サポート
- 6千円/ユーザ/年
- メールアーカイブオプション
導入状況
- 250万社
- 2,500万アカウント (×6,000円=1,500億円/年。さすがワールドワイド……)
- 3,000社/日新規サインアップ
Google Apps Marketplace
Google Appsには、業務管理ソフトウェア(顧客管理/販売管理、承認フロー/決算フロー、モバイル決済など)のたぐいが無い。
⇒ Google Apps Marketplace: サードパーティが、Google Appsを拡張したWebアプリケーションを販売できる。(余計にベンダーロックインが怖いんだが^^;)
全体の位置付け
- Google Apps for Business (Google自身が提供)
- Google App Engine for Business (有償/サポート/技術サポート付き) (導入企業による自社開発)
- Google Apps Marketplace (サードパーティからの提供)
社内システムとの連携も可能。(いわゆる「ハイブリッドクラウド」?)
Marketplaceの利用について
■[GDD2010JP] Part1: Google App Engine for Businessの概要 / Part2: 新しいGoogle Cloudサービス
Googleのサービスの位置付け:
- SaaS: Google Apps, Google Apps Marketplace
- PaaS: Google App Engine
- IaaS: Google Storage (……IaaS!?⇒ビルディングブロックなのでIaaSと考えた、とのこと)
Google App Engine for Business
現在の利用状況:
- 9万デベロッパー
- 13万Apps
- 7億PV/日
Google Storage for Devlopers
機能概要:
- Amazon S3互換。
- バケットは階層なし。
- オブジェクトの種類は自由。
- 最大サイズ: 100GB
- アクセスキーによる認証 / Google アカウントによる認証
- US内部ではレプリケーションされる (将来的にはUS外にも拡張予定)
- データ制約: Read Your Writes
- オブジェクト数は制約なし
- バケット数は1000(?)
価格:
- $0.17/GB/月
- アップロード: $0.10/GB
- ダウンロード: $0.30/GB
Google Storageを利用するアプリケーション
Prediction(予測) API
テキストの言語を予測して返す?
例: カスタマーセンターでのメールの言語別ルーティング
- Google Storageにアップロード
- 学習
- predict
Google BigQuery
例:
- Google Storageにアップロード (CSV?)
- BigQuery Tableにインポート
- SQLで問い合わせ: SELECT ... FROM ... WHERE .... GROUP BY ... ORDER BY ... LIMIT ...;
その他:
■[GDD2010JP] Google Chrome の Developer Tools
Firebugのようなものだが、Firebugのポートではない。Google Chrome の一部。(= WebkitのWebインスペクタ)
リリース間隔は、開発版が週に1回。
主な機能
- Mastering DOM
- Analyzing Network Activity
- 各リソースについて、リクエスト/レスポンス等各種情報が取得できる。
- Debugging JavaScript
- デバッガ上でJavaScriptの編集ができる。(ただし元ファイルには反映されない)
- イベントの再発行も不要? (→ 挙動がよくわからなかった。どういう操作をすればいい?)
- Identifying performance issues
- Understanding memory usage
- メモリプロファイラがある。
- 処理前後のスナップショットを取って比較することで、メモリリークを把握することができる。(スナップショットの取得が手動なのはちょっと残念)
その他のフィーチャー
- CTRL(or Command)+SHIFT+C ⇒ inspectモード
- DOMブレークポイント: DOMにブレークポイントをかけると、変更をトラッキングできる(⇒ 素晴しい)
- バグ報告 ⇒ http://crbug.com/
Q&A
- JavaScriptのライブ編集機能で、編集結果を元ファイルに反映する手段はあるか? ⇒ 現状では無い。リクエストには挙がっている機能なので検討中。現状では、Google Chrome Developer Tools for Java (Eclipseのプラグイン: http://code.google.com/p/chromedevtools/ )を使うのが良い。
- devtools自体のExtensionは作れるか? ⇒ 現在作業中。
- 圧縮/難読化されたJavaScriptのデバッグは可能か? ⇒ 現状では無い。
- Closure Library ( http://code.google.com/intl/ja/closure/library/ ) のdevtoolsへの統合(extensionとかで利用したい)は? ⇒ そもそもClosure Libraryはそういうものではない。extensionの中で使うことは可能。
- Chrome Extentionのデバッグはできるか? ⇒ 可能。チュートリアルとビデオがある。
■[GDD2010JP] Chrome Extension/WebApps のご紹介とアップデート
GoogleI/Oの時点でアクティブユーザは7千万人。
Chrome Extension
- Chrome Extensionも1つ1つプロセスが独立している。
- 以下、Chrome Extensionの話が続くが、Extensionの技術的概要を聞いたことがある人には基本的な話なので省略。
- ExperimentalにSidebarがある!!
Chrome WebApps
- Chromeにインストール可能なWebアプリケーション。
- Bookmarkと同じじゃないの? ⇒ パーミッションが一括指定可能。(利用時ではなく、インストール時に確認が行われる)
- 2種類のWebアプリがある。
Chrome WebStore
■[GDD2010JP] ライトニングトーク
メモってるのだけ紹介。
- 「平日のこんな時間に仕事もしないで」www
- App Inventor: プレゼン自体を同ソフトを使ってAndorid端末上でやってるのがインパクト大。
- GAE/JRuby: JRubyがGAE上で使いもんにならないことだけは理解したw
- OAuthの話: メモが「後でプレゼン資料が見たい」だけ書いてある(^^;
- ToriSat: 有料なのは正しい戦略だと思う。
- 建築物の現場検証に3Dテクスチャ+ARなどなど: 所属もお名前もわからんけど、えらく実用的ですごかった。
- HTML5デモ: そうか、HTML5でプレゼン資料を作成すると、iframe内でデモできるんだ……。あと、ajaxでiPhoneをリモコンにしているのが面白かった。
- Google Wave本の話(番外編): (-人-)
- WebSocketサーバ: 商用WebSocketサーバの紹介。コアのコード自体は「しらすプロジェクト」にてOSSとして公開。(でも作ってるのは中の人一人)
- DevQuizの答え合わせ: しりとりは深さ優先探索で解ける。パックマンは最高得点18.2(補正後)。敵がいない状態の場合「中国人郵便配達問題」相当。敵については、適当にウエイト入れたり、進化的アルゴリズムを使ったり、だそう。
2010-09-20
■[Unicode] BOM付きUTF-8ファイルはテキストファイルではない
では何か? 構造のあるデータ、すなわちバイナリである。C言語*風*に書けばこんな感じ。
struct {
char signature[3];
char body[n];
};
- バイナリなので、shebang(“#!”)が動作しないのは当然である。
- バイナリなので、catでつなぐとゴミが混じるのは当然である。
- バイナリなので、grepで行頭からの前方一致に1行目が引っ掛からなくてもそれはgrepのせいではない。
- バイナリなので、splitしたら1つ目のファイル以外にBOMが付かなくてもそれはsplitのせいではない。
BOMを付けるか付けないかの違いは好みの問題ではない。テキストデータを、テキストファイルとして保持するか、バイナリファイルとして保持するかの違いなのだ。
2010-08-12
■[Java] 実行可能jarに外部jarを含めるためのライブラリ調査
実行可能jarを作ろうとして、jarに外部jarを含めようとしたら、NoClassDefFoundError を投げてコケる。調べてみると、以下のような問題があるらしい。
外部ライブラリを含む場合の問題 - JARファイルをダブルクリックで実行
で、さらに調べてみると、これを解決するライブラリがいくつか見付かった。(参考: JarClassLoader)
この種のライブラリは、ソースコードを自分のプログラムに含める必要があるため、ライセンスには特に注意を要すると思われる。そこで、JarClassLoaderのページで挙げられていた類似プロジェクトのライセンスを確認してみた。
| プロジェクト | ライセンス | 最終リリース (バージョン) |
|---|---|---|
| Classworlds | 独自ライセンス? BSD似だが項目数が多い | 2003-12-04 (1.0) |
| Meta Jar Utilities | GPL v2 & Apache ライセンス 2.0 | 2002-08-16 (1.7.1) |
| One-JAR | 修正BSDライセンス | 2010-07-15 (0.97) |
| Embedded jar classloader in under 100 lines | 不明 | 2008-10-30 |
| jar in jar loader (Eclipse内蔵用) | EPL v1.0 | 2009-11-05 (1.3) |
| JCL - Jar Class Loader | LGPL v3 or later | 2010-05-03 (2.2) |
| JarClassLoader | GPL v2 & 商用ライセンス | 2010/02/18 (1.24) |
2010-08-05
■[Emacs] NTEmacs 23 に乗り換える(途中)
前々から気になりつつも、面倒&特に利点無しだったので放置していたのですが、flymakeを使ったらMeadowが頻繁に落ちるので、ついにNTEmacs23への乗り換えを決意しました。
ということで、とりあえずメモ。なお、インストール等は Cygwin 1.7 の bash 上で作業しています。
NTEmacs 23 バイナリの入手
http://gnupack.sourceforge.jp/docs/current/UsersGuide.html
hiwin-mode
gnupackから直接抽出 → site-lisp/hiwin-mode
tabbar
gnupackから直接抽出 → site-lisp/tabbar
APEL
http://www.jpl.org/elips/apel/
make EMACS=/opt/emacs/bin/emacs install
LIMIT (FLIM)
http://www.jpl.org/ftp/pub/m17n/
make EMACS=/opt/emacs/bin/emacs install
SEMI
http://www.jpl.org/ftp/pub/m17n/
make EMACS=/opt/emacs/bin/emacs install
SKK
http://openlab.ring.gr.jp/skk/index-j.html
SHELL=`cygpath -am $SHELL` make EMACS=/opt/emacs/bin/emacs install
Wanderlust
http://www.jpl.org/elips/wl/snapshots/
make EMACS=/opt/emacs/bin/emacs install
WindowsのISO-2022-JP対応
http://nijino.homelinux.net/emacs/cp5022x.el
cd /opt/emacs/site-lisp
wget http://nijino.homelinux.net/emacs/cp5022x.el
フォント設定
http://www11.plala.or.jp/metameta/takuayu_papa/emacs2.html
⇒ えせBDF Fontにしよう!(new)
文字コード設定
http://nijino.homelinux.net/emacs/emacs23-ja.html
上記だけではまだ問題が出たので、若干改変
@@ -1,5 +1,15 @@ --- orig.el 2010-08-06 00:08:30.312500000 +0900 +++ new.el 2010-08-06 00:10:14.531250000 +0900 @@ -1,5 +1,15 @@ (cond ((not (string< mule-version "6.0")) + ;; 機種依存文字 + (require 'cp5022x) + (define-coding-system-alias 'euc-jp 'cp51932) + ;; decode-translation-table の設定 + (coding-system-put 'euc-jp :decode-translation-table + (get 'japanese-ucs-jis-to-cp932-map 'translation-table)) + (coding-system-put 'iso-2022-jp :decode-translation-table + (get 'japanese-ucs-jis-to-cp932-map 'translation-table)) + (coding-system-put 'utf-8 :decode-translation-table + (get 'japanese-ucs-jis-to-cp932-map 'translation-table)) ;; encode-translation-table の設定 (coding-system-put 'euc-jp :encode-translation-table (get 'japanese-ucs-cp932-to-jis-map 'translation-table)) @@ -7,6 +17,8 @@ (get 'japanese-ucs-cp932-to-jis-map 'translation-table)) (coding-system-put 'cp932 :encode-translation-table (get 'japanese-ucs-jis-to-cp932-map 'translation-table)) + (coding-system-put 'utf-8 :encode-translation-table + (get 'japanese-ucs-jis-to-cp932-map 'translation-table)) ;; charset と coding-system の優先度設定 (set-charset-priority 'ascii 'japanese-jisx0208 'latin-jisx0201 'katakana-jisx0201 'iso-8859-1 'cp1252 'unicode) @@ -18,8 +30,6 @@ (get 'japanese-ucs-jis-to-cp932-map 'translation-table) (coding-system-plist 'utf-8)) (set-terminal-coding-system 'utf-8-for-putty) - ;; 機種依存文字 - (require 'cp5022x) ;; East Asian Ambiguous (defun set-east-asian-ambiguous-width (width) (while (char-table-parent char-width-table)
その他の参考ページ一覧
2010-05-31
■[雑談] iPhoneで撮った動画に手を加えようとしたら心が挫けた
当方、コンテナとCODECの区別が付く程度の動画初心者なのだが、うっかり動画処理に手を出したら、この世界の深淵を垣間見た気がした(^^;
先日、四季の森公園にお出かけしたとき、写真だけじゃなくてムービーも撮ってみた。が、家に帰って再生してみると、手ぶれが激し過ぎて見れたもんじゃない(-_-; まぁ、画面も見ずに胸元にささげながら歩き回っていたせいなんだけど。
しかしこの手の問題をかかえているのは私だけであるはずがない、ということで適当にぐぐってみる。ツール自体はすぐに見付かった。
早速ダウンロード、インストール、実行でファイルを開こうとしてみる。……MOVは食ってくれないらしい。
そこで、MOVをAVIに変換するツールを探してみる。……多過ぎて、どれを選んでいいかわからねぇ。とりあえず、
を入れてみたけど、2010年現在だと何を入れるのが適当なんだろーか?
で、適当に1個変換してみるかー、と思って起動してみる。……なんかCODECがいっぱいあって、またしてもどれを選んでいいかわかんねーよ!! まぁ、コンテナの載せ替えができればいいんじゃないかと思って、ビデオをx264、オーディオをaacにしてみる。
……なんか一所懸命変換してるっぽいんですけど。*1
……VirtualDubで開こうとすると、そんなCODEC知らんと言われるんですけど。
よくわからんので、デフォルトになってた xvid + mp3 で変換してみると、ようやく VirtualDub が食ってくれた。(何が最適なのか未だにわからん)
ややうんざりしつつ、Deshakerの設定画面を開いてみる。……意味がさっぱりわからねぇ。(この時点で既に挫けつつある) 全くわからんので、参考元のブログ記事そのまんまの値を突っ込んで変換してみる。……CPU(Core2Duo 3GHz)のパフォーマンスメーターが振り切れているにもかかわらず、遅々として進まない。生まれて初めてGPGPUの必要性を体感した瞬間であった。
この辺で心が挫けたので、目的は全く果たされていなかったりする。リベンジするにしても、どこから手を付けるべきかねぇ……。
*1:後から「Original」という選択肢があったことに気付く。が、どっちにしろVirtualDubは食ってくれなさそう
2009-12-17
■[Java][Wicket] Session Fixation対策
Wicketで、ログイン時にJSESSIONIDの再発行を行おうとしたんだけど、ぐぐってもぐぐってもなかなか情報に行き当たらない。なんとか見付かった「2008-07-27 - okkeyの日記」を参考にキーワードを工夫することで、ようやく「[#WICKET-1767] Protection against Session Fixation - ASF JIRA 」にたどりついた。
おもいっきりはしょると、Wicket-1.4以降なら「Session#replaceSession()」を呼ぶだけでいい。中身はokkey氏の日記のコードと同じだったりするが:-)
2009-09-30
■[Java][Eclipse][WTP] WTP上のTomcat6でH2をデータソースにする
一回できたのに忘れてしまったのでメモ。なお、EclipseにはPleiadesが組み込まれてるものとする。
多分これでいいと思うんだけど、間違ってたら誰か突っ込んでくれ。
WTPで動かすTomcat6に外部のjarを登録する
「Servers」プロジェクトを選択して右クリックメニュー
⇒ 「実行」 ⇒ 「実行の構成」
⇒ 「クラスパス」タブを選択
⇒ 「適用」を押す。
H2をJDBCドライバとして登録する
「Servers」プロジェクトのサーバ定義フォルダ(例えば「ローカル・ホスト の Tomcat v6.0 サーバー-config」)にある「context.xml」を編集する。
<Context>〜</Context>の内側に以下を追加。
<Resource name="TestDB" auth="Container" type="javax.sql.DataSource" maxActive ="-1" -- テスト用なので適当 -- maxIdle="-1" -- 〃 -- maxWait="-1" -- 〃 -- username="test_web" password="test_web" driverClassName="org.h2.Driver" url="jdbc:h2:~/workspace/TestDB" />
H2がサーバとして起動している場合は「jdbc:h2:tcp://localhost/~/workspace/TestDB」のように指定する。
Connectionオブジェクトを取ってくる
public class ClassOfSingleton { @Resource(name = "TestDB") private DataSource ds; ... void method() { Connection conn = null; try { conn = ds.getConnection(); ... } catch (SQLException e) { ... } finally { try { conn.close(); } catch (SQLException e) { ... } } ... } }
2009-08-31
■ 勉強会参加予定(8月分)
- 2009-08-08(土) 10:00-17:00
Java読書会BOF - 2009-08-14(金) 18:30-21:00
第1回Scala言語仕様輪読会@scala-be : ATND - 2009-08-29(土) 10:30-20:40
Lightweight Language Television (LLTV)
2009-08-24
■ 聴神経腫瘍が判明orz
- 8月某日: 突然耳の聴こえが悪くなったので耳鼻科に行ったら、突発性難聴、と診断される。原因はほとんどの場合不明らしい。症状が出て2〜3週間だったら投薬で治ることが多いそうだが、よく考えると3月頃にもおかしかった記憶が……。4月頃の健康診断でも聴力が落ちてたんだよなぁ。
- 8月某日: 1週間ほど薬を飲んでみたが、あまり効かず。低音部は多少改善。かかった町医者が夏休みに入るので、市立病院を紹介してもらう。
- 8月某日: 診断とともにMRIを予約。突発性難聴はたいてい原因不明だが、MRIにて0.5〜1%程度の確率で原因がわかることもあるそうな。
- 8月某日: 経口薬があまり効かなかったので、点滴を一週間程度実施。終了後の聴力検査では、やはり低音部が多少改善レベル。
- 8月某日: MRI実施。
- 本日: MRIにおもいっきり影が写ってますたorz 確率1%未満の外れクジを引くとは……。ぐぐってみると、思ったより怖い状況のよーな。ぅぅぅ……。
2009-07-27
■[Cygwin]「Cygwin-1.7はレジストリを使いません」
http://cygwin.com/ml/cygwin/2009-07/msg00924.html
HKLM/Software/Cywin/setup/rootdir
that rootdir is only used by setup.exe, not by Cygwin.
なん……だと……? じゃあどーやって / を検出してるんだ?
http://cygwin.com/ml/cygwin/2009-07/msg00928.html
- Check for Cygwin DLL path, for instance C:/cygwin/bin/cygwin1.dll.
- Strip DLL name and parent dir --> C:/cygwin
- Create default mount points from here:
C:/cygwin / whatever binary,auto 0 0
C:/cygwin/bin /usr/bin whatever binary,auto 0 0
C:/cygwin/lib /usr/lib whatever binary,auto 0 0
2009-05-26
■[Unicode] 続々・wcwidth と East Asian Ambiguous Character Width 問題
[NetBSD][Cygwin] wcwidth(3)その2くらいより:
しかし世の中には -c- で -ISO10646-1なフォント、ちゅう頭の痛いモノも存在しますが。常にwcwidth=1って…
そんな邪悪なシロモノに付き合う必要性は認めません(^^;
# 何考えてンなフォント作ったんだ……何も考えてなかったんだろうなぁ。
了解です。何か突っ込まれたときのネタにさせていただきます。
# ≒光画部時間?:-)
あと2なのはCJKだけで、V(=vietnam)の場合は1の方がよさげ。
参考になります。Vについてはあとで修正依頼を出しておこう。
以下余談。
アプリケーションと表示機能が切り離されている、固定ピッチフォントベースの環境(要はCUI)に特化した標準規格*1が必要なんだと思います。
……どーすればそんなの確立できるのだろう。
2009-05-24
■[Unicode] 続・wcwidth と East Asian Ambiguous Character Width 問題
[NetBSD][Cygwin] wcwidth(3)より:
そもそもL prefixはC localeつまりPortable Character Set以外ダメで、multibyteは扱えないでっせ
動けばいいやーレベルのテストコードなんで大目に見てつかーさい(^^;
# 文字コードも表示してるのは、期待通りにコンパイルされなかったときに検出するためだったり。
対応するのは定義ファイル書けばすぐなんですが、/usr/share/localeの
容量問題というのがあるので、誰か文句言ってくるまでは放置しようかと思ってたとこ。
なるほど。単に容量の問題であって、積極的に「1でなければならない」と判断してそうなってるわけでないんですね。
ちなみに、直すとしたら「LC_CTYPE=ja, ko, vi, zhなら2を返す」になると思っていいですか?
I'm not happy with the idea of a cygwin-specific solution (or workaround).
なんて言われて、このやろー、と思ったりしてたので、ある程度反論できるネタが欲しいな、と。
そもそもUnicodeとwcwidth(3)って結合文字とかとも食い合わせ悪いですしねぇ、困ったもんだ。
まったくで。┐('〜`;)┌ その割には意外といろんなとこで使われてるんだよな……。
もうwcwidth(3)はobsoleteにすべきですが、替わりになるlayout engineの標準が無いという。
どこに向かって叫べば改善されるんでしょーねぇ……。
個別パッチに付き合うのはもう嫌だポ……。
2009-05-23
■[Unicode] wcwidth と East Asian Ambiguous Character Width 問題
ことの発端@Cygwin-ML
こりーな「CJK Ambiguous Width は無視するぜ!!」
おれ「冗談ぢゃねぇ、LC_CTYPE=ja, ko, vi, zhなら2を返せ*1」
こりーな「おk」
とます「かくかくしかじかという問題があるし、そもそもそんなworkaroundは許せん」
おれ「そういう実装もあるらしい(*1のこと)ぞ。それに、おまいの言ってることは実用上問題にはならん」←いまココ
次の反論説得対策にakrさんの言ってるような実装を探してみる
が、見付からない……。
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <wchar.h> int main(void) { wchar_t w[] = L"α■"; wchar_t *wp; int i; setlocale(LC_ALL, "ja_JP.UTF-8"); for (wp = w; *wp; wp++) printf("%06X[%lc]: %d\n", *wp, *wp, wcwidth(*wp)); return 0; }
| Debian lenny (glibc) | 0003B1[α]: 1 / 0025A0[■]: 1 |
| CentOS-5.3 (glibc) | 0003B1[α]: 1 / 0025A0[■]: 1 |
| FreeBSD-7.2 | 0003B1[α]: 1 / 0025A0[■]: 1 |
| NetBSD-5.0 | 0003B1[α]: 1 / 0025A0[■]: 1 |
| Solaris 10 | 0003B1[α]: 1 / 0025A0[■]: 2 |
うーん。特にSolaris 10はわけわからん……。どなたか、上のコードのどちらも2になる処理系をご存知でしたら教えてください。
East Asian Ambiguous Character Width に対する wcwidth はどうあるべきか
俺はCJK(Vも?)の場合は2になるべきだと思うんだけど、glibcにも*BSDにも入ってないのは何で? kubotaさん(debianとこのホームが消えてる……)とか、Citrusな人とかが活動してたはずなんだけど、そこらへんの状況が今一つわからん。
調べてみると個別パッチだらけなので、いい加減なんとかならんもんか……。

