wgetでBasic認証付きのページをダウンロード

このエントリーをはてなブックマークに追加
はてなブックマーク - wgetでBasic認証付きのページをダウンロード
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

wget先のURLを指定する際に,basic認証のユーザ名とパスワードを以下のように設定すれば良い.

http://username:password@www.server.name/path/to/file

ここで,passwordに「@」が入っていると,それ以降がサーバ名だと解釈されてうまくいかない.

http://username:p@ssword@www.server.name/path/to/file

こういう場合,ssword@www.server.nameがサーバ名だと思われてしまう.

パスワード中の「@」を「%40」に置き換えることでこれを回避できる.

http://username:p%40ssword@www.server.name/path/to/file

C++/CLI のコンソールアプリケーションで標準エラー出力

このエントリーをはてなブックマークに追加
はてなブックマーク - C++/CLI のコンソールアプリケーションで標準エラー出力
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

ふと思い立って,以前作ったGUIのプログラム(C++/CLIで書いたもの)をCUI化した.

そのとき,C++でいうところの

std::cerr << "usage: ~" << std::endl;

みたいなことをやりたくなった.C++/CLIでは,標準出力に出力する

System::Console::WriteLine("usage: ~");

という関数はあるが,ググっても標準エラー出力への出力方法が見つからなかったのでメモしておく.(実際はMSDNで見つけたけど.)

Consoleクラスには,Errorというメンバがいて,こいつが標準エラー出力のインスタンス.これWriteLineメソッドを呼べばよい.つまり

System::Console::Error->WriteLine("usage: ~");

と書くと,標準エラー出力に出力できる.

まとめると,

  • 標準出力
    • C
fprintf(stdout,"Test\n");
    • C++
std::cout << "Test" << std::endl;
    • C++/CLI
System::Console::WriteLine("Test");
    • Java
System.out.println("Test");
  • 標準エラー出力
    • C
fprintf(stderr,"Test\n");
    • C++
std::cerr << "Test" << std::endl;
    • C++/CLI
System::Console::Error->WriteLine("Test");
    • Java
System.err.println("Test");

画像処理におけるマルチスレッドの利活用(OpenCV編)

このエントリーをはてなブックマークに追加
はてなブックマーク - 画像処理におけるマルチスレッドの利活用(OpenCV編)
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

次のエントリではもうちょい具体的なソースコードを書く.かも.といった手前,別のエントリは書けないということで,具体的なコードを書いてみる.

今回のコードはC言語とOpenCVを使った例.動作確認はしていないので注意*1.なお,キャプチャ部分はOpenCV.jpのサンプルコードからパクリました.

ちなみにCreateThread(windows.h)を使っているのでWindows専用です.

#include <windows.h>
#include <cv.h>
#include <highgui.h>
// スレッドに渡すデータをまとめた構造体
struct captureparam{
CvCapture *capture;
IplImage *temp;
};
// スレッドで実行する処理(画像のキャプチャ)
void capturethread(struct captureparam* cap){
cap->temp = cvQueryFrame (cap->capture);
}
int main(int argc, char *argv[]){
CvCapture *capture=NULL; // キャプチャ用の構造体
IplImage *temp=NULL;     // 画像(撮影予約用「temp画像」)
IplImage *img=NULL;      // 画像(実際の処理で使う「画像」)
// GUIの初期化
cvInitSystem(argc,argv);
cvNamedWindow("captured",CV_WINDOW_AUTOSIZE);
// キャプチャ用構造体の初期化
capture = cvCreateCameraCapture (0);
// 1枚目の画像の準備
temp = cvQueryFrame (capture);
img=cvCloneImage(temp);
// スレッドに渡すデータの準備
struct captureparam cap;
cap->cam=capture;
cap->temp=temp;
// メインループ
while((char)cvWaitKey(10)!='q'){
// “撮影予約”処理.スレッド作成し,ハンドルを保持する
HANDLE h=CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE) capturethread, &cap, 0,NULL);
// ここから img を使った時間のかかる画像処理
// このとき,tempの方をいじってはいけません
cvShowImage("captured",img);
// ここまで
// 先ほど撮影予約した処理が終わっているか?
//(撮影が終わるまで待つ)
WaitForSingleObject(h);
// スレッドはさようなら
CloseHandle(h);
// 撮影した「temp画像」を処理で使う「画像」へコピー
cvReleaseImage(&img);
img=cvCloneImage(temp);
}
// いろいろ終了処理
cvReleaseCapture (&capture);
cvDestroyWindow("captured");
cvReleaseImage(&img);
return 0;
}

追記

画像処理におけるマルチスレッドの利活用(OpenCV編):Linux版を書きました.Linuxユーザはこのpthread版を見てください.

*1:だれか報告してもらえると助かります

画像処理におけるマルチスレッドの利活用

このエントリーをはてなブックマークに追加
はてなブックマーク - 画像処理におけるマルチスレッドの利活用
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

最近研究で,ウェブカメラ(的なもの)から画像をとってきて画像処理(追跡とか重い処理)をすることがあります.

このとき,「画像をとってくる」処理は結構「待ち時間」があるので,リアルタイム処理をするときに困ります.

そこで,時間のかかる画像処理をやってる間に裏で画像をとってくる処理を並列して行う方法を書きます.「マルチスレッド」を使います.

とりあえず疑似コードで.

カメラからとってきたデータを「画像」へコピー
繰り返し始め
「temp画像」に撮影予約
「画像」を使って時間のかかる画像処理
撮影が終わるのを待つ(というかたぶん終わってる)
「temp画像」を「画像」へコピー
繰り返し終わり

ループ冒頭の“撮影予約”の部分では,スレッドを作成します.ここで作成したスレッドでは,“カメラからとってきたデータを「temp画像」へコピー”を実行します.

“撮影が終わるのを待つ”部分では,上で作成したスレッドの処理が終わるまで,メインの処理を停止させて待ちます.

これにより,時間のかかる画像処理中に撮影を並行しておこなっておくことができるようになります.

次のエントリではもうちょい具体的なソースコードを書く.かも.

ヲタクと非ヲタの判定基準

このエントリーをはてなブックマークに追加
はてなブックマーク - ヲタクと非ヲタの判定基準
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

ひょっとしたらヲタクと非ヲタの基準はメタ情報の知識かもしれない.

ここでいうメタ情報というのは,アニメでいうと,一通りアニメを見ただけでは知り得ない情報(たとえばあるキャラの裏設定だとか声優だとか,その時代背景とか)のこと.

Webページの応答を異常に遅らせる方法

このエントリーをはてなブックマークに追加
はてなブックマーク - Webページの応答を異常に遅らせる方法
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

管理しているWebページで,見ることはできるのに,なぜか異常にレスポンスが悪い,ソースコードも正しく受信しているのに,なぜか画面にレンダリングされない,ということが起きていました.

原因を探った結果,存在しないcssファイルを参照していたことが原因でした.cssファイルにアクセスしたときに,ファイルが無いためにリダイレクトされてNotFoundなページに飛ばされ,それを受信したけどCSSとして読めない,みたいな.

無事その参照している部分を削除したらレスポンスが戻りました.

スーパーカリフラジリスティックエクスピアリドーシャスに対してi18nizer

このエントリーをはてなブックマークに追加
はてなブックマーク - スーパーカリフラジリスティックエクスピアリドーシャスに対してi18nizer
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

長い単語で有名な Supercalifragilisticexpialidocious に対して,i18niserを実行してみると・・・

S32s

が正しく出力された.

ついでに,世界一長い英単語(1913文字)

Methionylglutaminylarginyltyrosylglutamylserylleucylphenylalanylalanylglutaminylleucyllysylglutamylarginyllysylglutamylglycylalanylphenylalanylvalylprolylphenylalanylvalylthreonylleucylglycylaspartylprolylglycylisoleucylglutamylglutaminylserylleucyllysylisoleucylaspartylthreonylleucylisoleucylglutamylalanylglycylalanylaspartylalanylleucylglutamylleucylglycylisoleucylprolylphenylalanylserylaspartylprolylleucylalanylaspartylglycylprolylthreonylisoleucylglutaminylasparaginylalanylthreonylleucylarginylalanylphenylalanylalanylalanylglycylvalylthreonylprolylalanylglutaminylcysteinylphenylalanylglutamylmethionylleucylalanylleucylisoleucylarginylglutaminyllysylhistidylprolylthreonylisoleucylprolylisoleucylglycylleucylleucylmethionyltyrosylalanylasparaginylleucylvalylphenylalanylasparaginyllysylglycylisoleucylaspartylglutamylphenylalanyltyrosylalanylglutaminylcysteinylglutamyllysylvalylglycylvalylaspartylserylvalylleucylvalylalanylaspartylvalylprolylvalylglutaminylglutamylserylalanylprolylphenylalanylarginylglutaminylalanylalanylleucylarginylhistidylasparaginylvalylalanylprolylisoleucylphenylalanylisoleucylcysteinylprolylprolylaspartylalanylaspartylaspartylaspartylleucylleucylarginylglutaminylisoleucylalanylseryltyrosylglycylarginylglycyltyrosylthreonyltyrosylleucylleucylserylarginylalanylglycylvalylthreonylglycylalanylglutamylasparaginylarginylalanylalanylleucylprolylleucylasparaginylhistidylleucylvalylalanyllysylleucyllysylglutamyltyrosylasparaginylalanylalanylprolylprolylleucylglutaminylglycylphenylalanylglycylisoleucylserylalanylprolylaspartylglutaminylvalyllysylalanylalanylisoleucylaspartylalanylglycylalanylalanylglycylalanylisoleucylserylglycylserylalanylisoleucylvalyllysylisoleucylisoleucylglutamylglutaminylhistidylasparaginylisoleucylglutamylprolylglutamyllysylmethionylleucylalanylalanylleucyllysylvalylphenylalanylvalylglutaminylprolylmethionyllysylalanylalanylthreonylarginylserine

に対してやると,

M1911e

と正しく出力された.

i18n

このエントリーをはてなブックマークに追加
はてなブックマーク - i18n
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

i18n(internationalization, 国際化)という言葉がある.

似たものに,L10N(Localization, 地域化)という言葉がある.

Wikipediaによれば,

情報処理における国際化と地域化(こくさいか (英語: Internationalization または Internationalisation、i18n と ちいきか(英語: Localization または Localisation、L10N)は、ソフトウェアを開発した環境とは異なる環境、特に外国や異文化に適合させる手段である。国際化はソフトウェアに技術的な変更を加えることなく多様な言語や地域に適合できるようにする、ソフトウェア設計の工程である。地域化は地域固有の構成部品や翻訳テキストを追加することによって、ソフトウェアを特定の地域や言語に適合させる工程である。

つまり,簡単に言えば各国語対応バージョン.

ところで,なぜ internationalization が i18n なのか?以前からこのi18nという文字列の意味は気になっていたが,昨日たまたま本を読んでいたらその由来が載っていた.

i nternationalizatio(18文字) n.つまり,iとnの間に18文字!L10Nの方も,L ocalizatio(10文字) N.

なんと.

週刊アスキー別冊 ビスタの超技100

このエントリーをはてなブックマークに追加
はてなブックマーク - 週刊アスキー別冊 ビスタの超技100
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

週刊アスキー別冊 ビスタの超技100

http://weekly.ascii.jp/2009/03/10035.html

ブロガー・レビュープログラムに当たっていたのに,忙しすぎて放置してしまってました.やべー.

普段こういう本は滅多に読まないので,(というのも,だいたいネット上の情報を参考にやっているので)知識が断片的なものでしかない.

この本ではかなり網羅的にいろんな技が載っていて,かなり参考になった.(やっぱ金払って得られるだけのものはあるのかも)

内容的には,まぁだいたい知ってることが書いてあったけど,初心者の人や,あんまりネットで調べ物とか得意じゃない人には貴重な情報かも.

ただ,少し気になったのは,割と誰にでも役立ちそうな内容や,誰が使うのかわからないような機能が混在していて,想定している対象読者がどんな人なのかよくわからないこと.(まぁそもそも,Vistaの機能がそんなもんなので,まとめたらこうなってしまうのは仕方ないかもしれない.)

個人的に,すごく「へぇ~」な項目は,第1章一番最初の「よく使うソフトを簡単に起動しよう!」で,クイック起動が,Windowsキー+数字で起動できるという内容.

クイック起動に並んでいるアイコンが左から順に1,2,3・・・と数字に対応しているので,キーボード操作で素早くブラウザなどが起動できて便利.

これはすごく便利なので,早速利用しています.

まぁ,Launchy入れたら・・・

pLatexを作ってる会社

このエントリーをはてなブックマークに追加
はてなブックマーク - pLatexを作ってる会社
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]

pLatexは「アスキー」が作っているとは聞いていた.

「アスキー」ってASCIIと思ってたら,実は「週アス」とか出版してるアスキー・メディアワークス社の方らしい!

知らんかった!