インターネットからJpeg画像をダウンロードして表示するアプリケーションを開発していたとき、
特定のJpeg画像を読みだしたときにiOS SDK側でEXC_BAD_ACCESSが起きて困ったことがありましたので、
解析結果と対策を書いておきます。
UINavigationControllerを使うと、Viewのサイズが勝手にリサイズされてしまいます。
普段は便利なのかもしれませんが、
ナビゲーションバー(UINavigationBar)やツールバー(UIToolbar)を透明にしたとき、
その裏に描画できなくて困ります。
これを避けて、以下のように画面全体に描画する方法を調べましたので書いておきます。
UIViewのframeの状態をコンソールに出力するのが結構面倒でしたので、
以下のようなクラスを作って対応することにしました。
Google Toolbox for Macに入っていたロギング用のGTMLoggerクラスを使ってみました。
XMLやHTMLを扱うとき、"&"といった実体参照文字列を、"&"に置き換えたい場合があったので、適当なライブラリがないか調べてみました。
Google Toolbox for Macのgtm_stringByUnescapingFromHTMLを使うのが良さそうだったので、これを導入してみることにしました。
導入手順を参考までに残しておきます。
最近Objective-CでiOSのアプリケーションを書いているのですが、ライブラリ的な役割をするコードで異常を検出した際、
呼び出し元への通知に例外処理を使ってよいのかどうかで良く悩みます。
HTTPを扱うアプリケーションを開発するとき、 HTTPの生データをモニタするために横取り丸とInetSpyというソフトを使っていました。
Window-based Applicationプロジェクトを作成して、initWithNibName:bundle:を使ってUIViewControllerを追加して表示しようとすると、
以下のようにInterface Builderの表示とiPhone Simulatorの表示がStatusBarの分ずれることがあります。
iOSでHTML(not XML)を解析(Parse)するコードを書く機会がありましたので、トラブル情報や解決策などをまとめておきます。
NSURLConnectionを使ってデータをダウンロードするとき、
ダウンロードデータを格納するNSMutableDataの容量をダウンロードデータのサイズと合わせておこうと思って
NSURLConnectionのdelegateを担うクラスに以下のようなコードを書きました。
遅ればせながらiPhoneアプリ開発環境をiOS SDK 4.0にアップデートしてみたところ、
シミュレータでアプリを終了した時に、XxxAppDelegateのapplicationWillTerminateが呼ばれなくなっていました。
このMessageを受けてアプリ終了処理(状態保存など)をしていたので、呼ばれなくなってしまうと大変です。
最近アカウントが必要なウェブサービスに接続するアプリケーションを作っていたとき、
開発の初期段階では、ソースコード中に自分のアカウントのパスワードを埋め込んでいました。
iPhone SDK 3.1.2 において、タッチイベント処理が、
touchesBegan → touchesMoved x N → (touchesEnded or touchesCancelled)
という順番で来る想定でコードを書いていたら、マルチタッチ時に上手く動作しないという問題が発生しました。
この問題があるため、以前リリリースしたButterfly 15というアプリは、
画面を複数の指でタッチしまくっていると落ちます。なんてことだ。
人材獲得作戦・4 試験問題というのがあったのでやってみました。
iPhoneアプリの登録作業(2/3)の続きです。
Overviewの入力が終わりましたので、残りの項目を入力していきます。
iPhoneアプリの登録作業(1/3)の続きです。
先日iPhoneアプリの登録作業をしてみましたので、作業に必要だったものや遭遇したトラブルについてメモしておきます。
先日iTunesのApp Storeへ登録したiPhoneアプリ「Butterfly15」のレビューが完了し、公開されました。
登録から公開までは10日ほどでした。Appleからの指摘は何もありませんでした。
内容無いので指摘しようがなかったのかもしれませんが。
先日iTunes App Storeへの登録を行ったアプリですが、アプリ名称は「Butterfly15」で、以下のようなロゴを使っています(LogoShader V1.85で作成しました)。
ちょっと大きめのロゴなので、アプリで使う場合は縮小して使うのですが、縮小するときにトラブルが起きたので、そのときの話を書いておきます。
iPhoneアプリの15パズルが完成したので、iTunesのApp Storeに登録してみました。
最近iPhone SDK 3.1.2を使い、以下のようなアプリを作ってみています(ただの15パズルですが)。
iPhoneアプリを作るのは初めてなので、感想を書いておきます。
最近iPhoneアプリの開発を始めたので、iPhone SDK Agreementを読んでみました。
iPhone SDKの利用規約みたいなものです。発行日は2009/07/30のようでした。
興味深かったところをメモしておきます。
忘備録代わりに4方向を回るfor文を書いてみました。
先日(2009/11/14)、iPhone Developer Programに加入しました。
参考にしたページは「iPhone実機に自作プログラムを転送するまでの手順」です。
このページの通り私もiPhone Developer Programに加入するときにトラブルが発生したので、そのあたりの出来事をまとめておきます。
突然ピンポイントな情報でなんですが、
NikonのD90というカメラで撮影したJPEGデータからアクティブD-ライティングに関する情報を抜き出す方法を調べましたので、
ここに記録しておきます。
Windowsアプリケーションでは、ウィンドウのタイトルバーや枠を表示せず、画面一杯にアプリケーションデータを表示することはフルスクリーン化と呼ばれています。
このフルスクリーン化を実現する方法のひとつに、ウィンドウスタイルをWS_POPUPにしてウィンドウサイズを画面サイズと同じにする、という方法があります。
しかし、WS_POPUPにすると、Windowsキー+Mによる最小化が効かなくなります。私はこのショートカットをよく使うので大変不便に感じました。
boost 1.35.0では、Boost.Threadが結構強化されたようですので、Boost.Threadのドキュメントを読んでみたのですが、残念ながらThread Priorityの制御にはまだ対応していないようです。
Thread制御のコードをWin32APIではなくboostで書きたいのですが、これができないために移行できずにおります。
早く対応して欲しいなぁ・・・。
boost 1.35.0がリリースされました。
boost::functionとboost::bindの組み合わせは結構強力なようです。以下のコードをコンパイルしてみると・・・
前回の続きです。
前回はFuncオブジェクトにObjectへのポインタを渡していましたが、今回はboost::shared_ptr<Object>を渡してみました。
前回の続きです。
前回はFuncオブジェクトにObjectそのものを渡していましたが、今回はポインタを渡してみました。
boostにはFunctionというライブラリがあります。
一言でいうと強化型関数ポインタですが、結構多機能です。
特にメンバ関数周りの機能が充実していて、以下のようにメンバ関数を格納した上に呼び出すこともできます。
本記事は過去に書いた記事の焼き直しです。
Windowsアプリケーションの中には、ウィンドウのサイズ変更に時間がかかるものがあります。
代表的なものは画像ビューアです。画像の拡大縮小を綺麗にやろうとすると時間がかかるからです。
この時間がかかる処理をOnSize(WM_SIZEのハンドラ)に書くと、ウィンドウのサイズ変更がもっさりとしたアプリケーションになってしまいます。
本日紹介する方法は、サイズ変更のもっさり感を解消するための方法です。
本日はVisual Studio 2008のマルチスレッドデバッグ機能を紹介します。
従来のVisual Studioからあった機能ですが、ほんのちょっとだけ進化しているようです。
Visual Studio 2008を買ってからほぼ毎日ちょっとずつ触っていますが、GUIが今まで使っていたVisual Studio.NET 2003とあんまり変わらないので慣れるのは早そうです。
まだboostが公式に2008に対応していないあたりがちょっと辛いですが。
Visual Studio 2008のインテリセンスは、Visual Studio.NET 2003に比べて良くなっています。(Visual Studio 2005は持ってないので比較できません)
特にboostを使ったコードが書きやすくなっています。例を数点紹介します。
ソフトウェア工房αさんがリリースしているlibjpeg高速化改造版をVisual Studio 2008で使う方法を調べましたので、まとめておきます。
(正式名称はIndependent JPEG Group's JPEG software release 6b with x86 SIMD extension for IJG JPEG library version 1.02)
IJGが配布しているIJG JPEG library(libjpeg、jpeglib、jpeg-6bと呼ばれることもあるようです)をVisual Studio 2008で使う方法を調べましたので、まとめておきます。
以前書いたコードのバージョンアップ版です。
仕様は以前と同じです。若干コードがスマートになっている・・・かもしれません。
SQLite3.4.2の性能について調べた結果をまとめておきます。
調べたのはデータ追加(INSERT)のパフォーマンスです。テーブルに100000件のデータを追加した時の処理時間を測りました。
「SQLite性能評価その4」の続きです。 SQLiteインメモリデータベースと、C++標準ライブラリのコンテナの性能を比較してみることにします。
ややこしい処理を何もしていない分C++標準ライブラリの方が圧倒的に速そうですが、実際のところはどうでしょうか。
Visual C++.NET 2003用にboost 1.34.1ライブラリをビルドしてみました。
結構手間でしたのでやり方をメモしておきます。
「SQLite性能評価その3」の続きです。今回はインメモリデータベースの性能を評価してみました。
「SQLite性能評価その2」の続きです。テーブルに100000件追加する処理だけでも、Case2の他にいろいろな書き方があるので、試してみました。
2007年10月07日
WTL紹介
Windowsで(Pure)C++とWin32でGUIアプリを作るとき、GUIライブラリがあると楽です。
私は昔はGUIライブラリとしてMFCを使っていました。
しかし、MFCは、Visual C++の各バージョンに依存していて、Visual C++のバージョンを新しくするだけで問題が起こることもありました。これはちょっと勘弁して欲しかったので、もうちょっとポータビリティが高いWTLというライブラリを使うことにしました。
「SQLite性能評価その1」の続きです。
SQLiteは、ファイル名を":memory:"とすると、インメモリデータベースを構築します。
このとき、前回のCase1とCase2の処理時間を測ってみました。
SQLite 3.4.2 の性能を少し見てみたいと思い、
テーブルに100000件のデータを追加した時の処理時間を測ってみました。
最近、SQLiteというデータベースライブラリの存在を知りました。
シンプルな機能なので扱いやすいデータベースです。中小規模のアプリケーション向けですね。
ライセンスもパブリックドメインなので言うことなし。
スタンドアロンなアプリケーション向けのデータベースとしては、たぶんこれが最有力候補でしょう。
C++でファイルの内容をメモリ上に読み出すコードを書いてみたところ、
書き方によって結構性能に差がありました。そこでちょっと性能を調べてみましたのでまとめておきます。
「libjpeg高速化改造版の性能を簡単に評価」の続きです。
libjpeg(以下、通常版)とその高速化改造版の性能をもうちょっと比べてみました。
libjpeg高速化改造版の使い方(Visual C++.NET 2003)の続きです。 libjpeg(以下、通常版)とその高速化改造版の性能をちょっと測ってみましたので、まとめておきます。
libjpegの使い方(Visual C++.NET 2003)の続きです。 ソフトウェア工房αさんがリリースしているlibjpeg高速化改造版の使い方を調べましたので、まとめておきます。
Visual C++.NET 2003でIJGが配布しているIJG JPEG library(libjpeg、jpeglib、jpeg-6bと呼ばれることもあるようです)を使う方法を調べましたので、まとめておきます。
Boost C++Librariesプログラミング 第2版を読んで気が付いたのですが、 boost::arrayクラスのオブジェクトは不思議な方法で初期化できます。
Windowsのバッチファイルで、ファイル名に日付や時刻を使いたいときがあります。
例えばバックアップのバックアップ先ファイル名です。ファイル名にバックアップ日時を入れるのは良くある話でしょう。
Perlなどのスクリプト言語を使えば簡単にできるのですが、バッチファイルだけでもできるので、やり方を紹介します。
MSXMLが不正なコードを含むXMLファイルをどう扱うか、という話です。
MSXMLのバージョン次第で扱いが違いますので、夫々のバージョンにおける扱いを調べてみました。
先日のboost::bindのサンプルコードは、 boost::lambdaを使うことによりもうちょっと分かり易くなるようです。
boostのbindを使った感想とサンプルコードを書きます。
C++のSingletonパターンの実装のうち、有名なものの1つとして、以下のようなローカルstatic変数を使った実装があります。
文字列クラス_bstr_tとwstringの相互変換のお話です。
開発環境は Visual C++.NET 2003 です。
_bstr_tはBSTR型のラッパで、COMサポートクラスの1つです。COM スマートポインタなどと一緒に使うととても便利です。 Visual C++からMSXMLを使うときは手放せないクラスです。
今、大容量のRAID5対応ネットワーク接続型ストレージ(NAS)を買うことを検討している、各社のNASを価格面で調べてみました。
対象は以下の3シリーズです。
BUFFALO TeraStation TS-TGL/R5シリーズ
I/O DATA LANDISK Tera HDL-GTシリーズ
Logitec TERAGATE LHD-LANシリーズ
この記事は、先日の「WindowsのHTTPスタック」をHiro Kannoさんの標準語→大阪弁変換ツールで(無意味に)変換した記事です。
Life is beautifulの「大阪弁変換で遊んでみた」に感化されてなんとなくやってみました。技術文書ももいい味が出ますね。
今日はWindowsのHTTPスタックを紹介します。
TTPスタックとは、HTTPを使うための各種ライブラリを集めたものです。
図を書くと、各レイヤのライブラリを積み重ねたように見えるので、スタックと呼ぶのだそうです。
アプリケーションレイヤから見ると単なるライブラリに見えますけどね。
最近MSXMLをあれこれ触っているのですが、
時々妙な現象に遭遇するので、メモを残しておきます。
MSXML4.0のIXMLDOMDocument2インターフェースのload 関数でURLを指定したとき、
HTTPステータス301(Moved Permanently)や302(Moved Temporarily)が返ってくると、新しいURLにアクセスせずにエラー終了します。
MSXML2.6やMSXML3.0は新しいURLにアクセスします。
これはデフォルト状態の動作なので、何か設定を変えればうまく動くのかもしれません。
Windowsにおいて、GetMonitorInfoやMonitorFromPointなどのマルチモニタAPIを使用するときによく発生するエラーと、その対処法を紹介します。
WinHTTPは、レスポンスのヘッダに関する細かい処理を行うことができます(HTTPライブラリとしては当たり前ですが)。
そこで細かい処理を行う例として、ステータスコードが301の場合だけリダイレクト先のURLを記録し、それ以外の場合はリダイレクト先のURLを記録せずに転送するコードを書いてみました。
WindowsのHTTPライブラリであるWinHTTPを紹介します。
このライブラリはWinInetに代わる新しいHTTPライブラリです。
このライブラリを使うことにより、以下のようなコードだけでURLからデータを取得できます。
とても簡単です。WinInetよりも簡単でしょう。
5/24の記事の続きです。
今までWinInetのバグ対策について検討してきました。一応、WinInet以外のHTTPライブラリを使うという手もあります。これについても検討しておきましょう。
5/23の記事の続きです。
今までバグ対策であるInternet Explorerの設定変更について色々と検討してきました。
対策をこれと決めてしまう前に、一応、他に何かないか検討しておきましょう。
バグ対策のためにHTTP 1.0を使うようInternet Explorerの設定を変更しても、大丈夫そう(ホントか?)なことが分かってきました。次はInternet Explorerの設定を変更する方法について検討しましょう。
5/20の記事の続きです。
このバグの対策を行うためには、Internet Explorerの詳細設定を変更することが必要だと分かりました。
お次は副作用について検討してみましょう。
このバグの対策により、他のWinINetを使用しているほぼ全てのアプリケーションがHTTP 1.1からHTTP 1.0へ移行することになるわけです。さて、どんな不具合が発生する可能性があるでしょうか。
このバグの対策としてMicrosoftが提示しているのは、以下の2点を行うことです。
(1) HttpOpenRequestの第4引数を"HTTP/1.0" とする。
(2) Internet Explorerの詳細設定の「HTTP 1.1 を使用する」をOFFにする。
5/17の記事の続きです。
WinINetを使用してインターネットアクセス中にCPU使用率が100%になってハングしてしまうという不具合の原因は、
t.oさんに指摘してもらったWinINetのバグだと思われます。
やっと辿りつきました。t.oさん本当にありがとうございました。
Google Calendar Data APIを使ってカレンダーのイベントFeedを取得するためには、gsessionidと呼ばれるIDが必要です。
gsessionidは、カレンダー取得用のURLにGETリクエストを送ることで簡単に取得できます。
5/16の記事の続きです。
不具合の原因は恐らく以下の通りです。残念ながら、断言できるところまで解析はできませんでしたが。
Heimdallrは、MFCのCInternetSession/CHttpConnection/CHttpFileクラス(以下、CInternetSession関連クラス)をマルチスレッドで使用してインターネットアクセスを行っておりますが、
残念ながらこれらのクラスはスレッドセーフではないことが原因のようです。
特に、Heimdallrでは、サーバに接続した後、一定時間が経過した場合、別スレッドからCHttpFile::Closeを呼んで切断しているのですが、このやり方に問題があったようです。
5/12の記事の続きです。
先日またHeimdallrの例の不具合が起きたので解析を進めました。
残念ながらまだ原因は確定はできませんでしたが、インターネットアクセス用スレッド処理がスレッドセーフになっていないのにマルチスレッドを使っているのが原因でしょう。
Windows上でShift_JISのようなマルチバイト文字とUnicodeとの変換を行う関数を紹介します。
これはMFCやATLが使えない場合の関数です(例えばVisual C++ 2005 Express Edition使用時のように)。MFCが使えればCStringを使うべきですし、ATLを使えばCW2AやCA2Wを使うべきでしょう。
Google Trendsが面白いです。最近Google元気ですね。
5/3の記事「Heimdallrのバグ解析」の続きです。
上記記事に書いてある不具合が昨日再現できたので、Visual C++.NET 2003のプロセスデバッグ機能と、Heimdallrが吐き出す大量のログを使って解析してみました。
その結果、ようやく不具合を引き起こす仕組みらしきものが見えてきました。まだ特定できないのが辛いところですが。
本日Google Calendar Data APIの仕様をちょっと勉強しました。
現時点で気が付いたことをあれこれ書いておきます。
まだ仕様を眺めただけであり、コードを書いて検証していないので、所々間違えているかもしれません。
このサイトで公開しているRSSリーダー Heimdallr ですが、既知のバグが1件あります。最新の情報に更新する処理が永遠に終わらなくなるバグです。CPU使用率が100%になるのが特徴です。
最近のエントリの情報をiCalendar(iCal)ファイルとして出力するMovableTypeテンプレートを公開します。
動作させるためには、先日公開した「MTEntryAnotherDate」プラグインが必要です。
また、文字エンコーディング方式(mt-config.cgiの設定)がUTF-8ではない場合は動作しないと思われます。
Movable TypeにMTEntryAnotherDateというテンプレート・タグを追加するMovable Type プラグイン「MTEntryAnotherDate 0.01」を公開します。
最近スケジュール管理サービスのGoogle Calendarを使ってみています。
Webベースなのにレスポンスの遅さを意識させないインターフェースになっていて、使いやすいですね。
しばらく前に、MicroSoftからフリーのC++開発環境 Visual C++ 2005 Express Editionがリリースされました。これをインストールし、ウィンドウを1つ表示するだけの簡単なWindowsネイティブアプリケーションを作成しましたので、その手順をメモしておきます。
Heimdallrのログビューについて色々とコメントを頂いたので、今後設計をどう進めていくのか考えてみたいと思います。
Heimdallrはフリーソフトなので、必ずしも真面目に考える必要は無いものだとは思いますが、頭の体操にもなるのでちょっと真面目に考えてみます。
トラックバックを頂いた以下の2件の記事から感想を抜粋させて頂きます。
2005年11月05日
ログビュー
Heimdallrにログビューという新しいビューを追加しようとしています。
今のところこんな感じのビューにする予定です。
表示されている記事は、最近閲覧した記事や既読化(削除)した記事です。
このビューを追加する主な目的は2つほどあります。
WinInetというWindowsのAPI群があります。これは、Win32 Internet Extensionsの略で、 Gopher、FTP、HTTPなどのプロトコルを容易に扱うためのAPI群です。
InternetOpen、InternetOpenUrlなどのAPIがこれに属します。
MFCでは、CInternetSession、CInternetConnectionなどのクラスがWinInetを使っています。
Heimdallrの起動時間にいちゃもんの続きです。
今回はブラウザ起動時間についてのお話です。
Heimdallrに色々と文句を付けた記事「Heimdallrにいちゃもん」に対するコメントやトラックバックを色々と頂きましたので、返事も兼ねてもうちょっと詳しくいちゃもんを付けて見たいと思います。
今回は起動時間、終了時間、設定変更時のハング時間についてです。
Heimdallrの今の安定版のバージョン番号は1.09です。これは、9回のそこそこ大きなバージョンアップが行われたことを意味しています。だいぶ機能も充実してきたので、今後はパフォーマンスやインターフェースの改善を進めていく予定です。
ここでは、そのあたりの問題について考えてみます。私自身、Heimdallrユーザなので、使っていてあれこれ感じることを書いてみて、それに対し開発者としてのコメントなどをしてみます。
「Subversionにおけるcommit時のRSS生成テスト」にて紹介したRSS Feed生成スクリプトを公開します。
「Subversionにおけるcommit時のRSS生成テスト」にて紹介したRSS Feed生成スクリプトを公開します。
Subversionにおいて、commitしたときにRSS Feedを生成するようなスクリプトを書き、試しにsandboxリポジトリ(http://www.sutosoft.com/room/svn/sandbox)で使ってみました。
最近、SDL(Simple DirectMedia Layer)とOpenGLとを組み合わせて使ってみています。結構面白いです。
以下のURLに練習用のSubversionリポジトリを作成しました。
http://www.sutosoft.com/svn/sandbox
誰でもCommitできます。Subversionの練習用としてご自由にお使い下さい。
私も他の人がCommitしたとき、ログにどのような情報が残るか知りたいです。
「Subversionの使い心地」の続きです。
Subversionを使い始めて1ヶ月経ち、今まで使用していたVisualSourceSafeとの違いがまたいくつか見つかりました。
boostライブラリというC++のライブラリがあります。有名なライブラリなので説明は省略します。
このライブラリに含まれるクラスのうち、shared_ptrやarrayなど大半のクラスは、ヘッダファイルをインクルードするだけで使えるのですが、filesystemやdate_timeを使うときは、boostライブラリをビルドしてライブラリファイルを作成し、それをリンクする必要があります。
本記事では、Visual C++.NET 2003向けのライブラリファイルを作成する方法を説明します。
「feed meter の OPML」によると、少し前から実験的にfeed meter 人気度ランキングのOPMLが配信されているようです。
feed meterの人気度ランキングは、大体RSSを配信しているサイトの人気度ランキングと同じだと思います。
ですので、例えばトップ50サイトのOPMLには、世の中の人気がある(RSSを配信している)サイトの上位50サイトが記述されているわけです。
これと、Heimdallrを組み合わせると、面白いアプリケーションができあがります。
最近、Heimdallrのキーワードチャンネルで使うためのRSS検索エンジンを探しています。 RSS検索エンジンというのは結果結果をRSSで出力してくれる検索エンジンのことです。
Heimdallrのキーワードチャンネルで使うには、以下のような検索エンジンが望ましいと思ってます。
前の記事において、HeimdallrのプラグインのキーワードチャンネルでBlogPoepleの検索エンジンを使うことにしたと書きましたが、やめにしました。
Heimdallrのプラグインであるキーワードチャンネルは、
Feedback、Bulkfeeds、Gooブログ検索の3つの検索エンジンで検索した結果を利用してます。しかし、Feedbackが停止したようですので、替わりにBlogPeopleの検索エンジンを使うことにしました。
最近、私はソースコード管理ツールをVisualSourceSafeからSubversionに切り替えました。
切り替えて1週間程度経ちましたので、それだけ使っただけで分かった夫々のソースコード管理ツールの利点を書いておきます。
CppUnit 1.10.2をビルドするためのVisual C++.NET 2003用プロジェクトファイルを作成しましたので、公開します。
最近、Subversionというバージョン管理システムを使ってみました。
Subversionはフリーなオープンソースのシステムであり、CVSの後継とも言われる将来有望なシステムです。
以前作成したC++の暗復号ストリームライブラリを公開します。
以下、このライブラリの概要と、構成、コンパイルするために必要なものと、注意点について説明します。
本ライブラリは、「libdesのライブラリ化」で紹介したDESライブラリや、 「aesライブラリ化」で紹介したAESライブラリを用いて暗復号を行うことができるC++のストリームクラスを提供します。
Heimdallrは、カスタマイズ版Heimdallrが作成できると謳っています(詳しくはカスタマイズ版Heimdallr作成ガイドラインを参照して下さい)。カスタマイズ版を作るのでしたら、スキンはオリジナルのものにするべきだとは思います。しかし、Heimdallrで、オリジナルのスキン、特に画像付きのスキンを使おうと思った場合、 UNLHA32.DLLを使う必要があります。
Heimdallrのビューには、マウス右ボタン押下から始まるマウスジェスチャ機能や、既読ボタン上でマウス左ボタン押下から始まる既読化機能など、色々な機能があります。今のところ、マウスジェスチャ中であることを表すフラグや、既読化中であることを表すフラグなどを内部で保持し、マウス左ボタン押下や右ボタン押下のときにそれらのフラグを見ながら処理を行っていたのですが・・・。マウスジェスチャ中に既読ボタン上でマウス左ボタン押下してそれからマウス右ボタンを離した場合など、色々とややこしいケースがあるようです。
最近、DES、AES、Blowfishといった幾つかの暗号方式の実装を眺めているのですが、AESのサンプルコードに面白いコードが入っているのを見つけました。
AESのサンプルコードは、「AES暗号化ライブラリ」で紹介したものです。
「AES暗号化ライブラリ」の続きです。
AESで暗号化/復号化を行うVisual C++.NET 2003用スタティックライブラリの作り方を説明します。 「libdesのライブラリ化」のAES版です。
以前、「暗号化ライブラリlibdes」でlibdesを紹介しました。
今回は、Visual C++.NET 2003で使えるlibdesの静的ライブラリを作成する方法を紹介します。
「MFCにおけるzlibの使い方」と同様に、6種類のlibファイルを作成します。
「AES暗号化ライブラリ」の続きです。
AES暗号化ライブラリが結構いい感じだったのでこれを使おうかと思いましたが、最後にライセンスフリーで評判のBlowfishを試してみることにしました。
今更ですが、ライセンスフリーの暗号化方式と言えばBlowfishが有名でしたね。すっかり忘れていました。
暗号化ライブラリlibdesの続きです。
より使いやすいライセンスの暗号化ライブラリは無いかと探し回っていたところ、
Brian Gladman氏のサイトでAESの暗号化/複号化を行えるCのコードを配布しているのを見つけました。
Bloglinesチャンネル開発における課題の1つとして、パスワード保存方法があります。
これをなんとかするため、C++又はCの暗号化ライブラリを探していましたところ、libdesというDESの暗号化ライブラリを見つけました(libdesの公式サイトってどこだろう?)。
iostreamの拡張について書かれたサイトを見つけました。「iostreamの拡張」
私が以前の記事で作ったbasic_filterbufやbasic_inflatebufと比べてみます。
Heimdallrのチャンネル拡張プラグインの1つであるキーワードチャンネルのソースコードをリリースします。
前に作成したbasic_filterbufクラスを使って、Inflateを行うクラスを作ってみました。
InflateについてはRFC1950を参照して下さい。Deflateにより圧縮されたデータを展開する方式です。
zlibを使っていますので、前に説明した方法を使ってzlib.libをリンクしておく必要があります。
また、
basic_filterbufクラスを定義したヘッダファイルをfilterbuf.hというファイル名で用意しておく必要があります。
zlibという超有名なフリーの可逆圧縮ライブラリがあるのですが、今回はMFCアプリケーションにおけるこのライブラリの使い方について書いてみます。
以前の記事でbasic_streambufの派生クラスであるbasic_filterbufクラスを作成しました。
しかし、アプリケーションから直接basic_streambuf派生クラスを扱うのはあまりよろしくない気がします。アプリケーションからばbasic_ostream派生クラスなりbasic_istream派生クラスだけを扱うべきだと思います。なんとなく今のC++標準ライブラリからそんなポリシーを感じるためです。
以前の記事の続きということで、多少は役に立つオリジナル入出力クラスを作ることを考えてみます。最終的には書き込んだデータに何らかの加工を施して他のストリームに書き出すクラスを作る予定です。
前回の記事でC++標準ライブラリの入出力周りについて書きましたが、
そもそも入出力周りを調べようと思ったのはオリジナルの入出力クラスを作ってみようと思ったからです。
今回は、そのことについて書いてみようと思います。
C++の標準ライブラリには入出力関連のクラスが含まれています。
例えばファイルに出力するためのクラスはofstreamです。
「MTのコメントをRSS化」を参考に、MovableType専用のコメントのRSS作成用テンプレートを作ってみました。
参考元のRSS FeedはRSS 2.0準拠ですが、なんとなくRSS1.0に準拠したものを作成してみました。RSSのバージョンなんて何でも良いと思いますけどね。
前回の続きです。
今回の調査項目は、「BLOGサービスの調査」と同様です。
以前は、RSSを出力するサービスの調査の一環として、「BLOGサービスの調査」を行いました。
今回、RSSを出力するニュースサイトについて調べてみようと思います。
前回の続きです。
調査項目及び調査方法
以下の5項目を調査しました。
以前の記事「RSS検索サイトはステータスコード304を返すか」と「RSS検索サイトは検索結果を圧縮して返すか」において、RSS検索サイトの機能について調べました。
その続きということで、他のRSSを出力するサービスについても調べてみたいと思います。
前の記事ではRSS検索サイトがステータスコード304を返すか調べましたが、今回はRSS検索サイトが検索結果を圧縮して返すかどうか調べてみようと思います。
キーワードチャンネル高速化のために、If-Modified-Sinceを使うことを考えてみました。これを使えば、検索結果が前回と変わっていなければ検索サイトはステータスコード304(Not Modified)とレスポンスヘッダだけを返し、検索結果本体は転送されないので転送時間が短縮されます。
Heimdallrは、本記事のガイドラインに従う限り、カスタマイズを行って自由に配布することを許可致します。
このカスタマイズを行ったHeimdallrのことを、カスタマイズ版Heimdallrと呼ぶことにします。
それではHeimdallrにおいてデザインパターンが使われているクラス構成を紹介します。
最初に紹介するのは、Heimdallrのスキン関連のクラス構成です。
ここがHeimdallrにおいてもっともデザインパターンが有効に活用されたところでしょう。
Heimdallrは、C++を用いてオブジェクト指向による開発が行われている、ということに一応なっています。
そして、そこでは様々なデザインパターンが使われています。
本記事のデザインパターンは、GoFのパターンを意味することにします。Abstract Factoryパターンやらなんやらの23個のパターンのことです。
本記事では、WindowsのCOMライブラリを扱いやすくしてくれるcom_ptr_tクラスを紹介したいと思います。
com_ptr_tは、IUnknownインターフェースのQueryInterface、AddRef、Releaseメンバ関数周りを隠蔽してくれるテンプレートクラスで、いわゆるスマートポインタの一種です。
今回の記事はFirefoxブラウザのユーザ向けの記事です。
Heimdallrは、1.07alpha1でFeed Protocolに対応しました。
Feed Protocolとはなんぞや?という話はさておき、一体何ができるのか?ということを書いてみます。
先日紹介したブラウザFirefoxの拡張機能の一つに、Feed Your Readerというものがあります。
今回説明するのは、高さが特定の条件を常に満たしているウィンドウの作り方です。
特定の条件は、ここでは例として「10の整数倍+5」としておきます。
前回の続きです。
残るセクションの説明です。
前回の続きです。
Inno Setupはスクリプトファイルを元にインストーラーを作成するツールです。
よってスクリプトファイルの記述内容が全てです。
Heimdallrのインストーラーは、Inno Setupを使って作っています。
Inno Setupは、Windows用のインストーラー作成ソフトで、商用利用も可能なフリーソフトです。
以下のような背景が透明なウィンドウの作り方の続きです。
このウィンドウは、2枚のウィンドウを重ねて使います。
1枚目は、マウスメッセージを受信して処理する透明なウィンドウで、
2枚目は、文字などを表示する描画用のウィンドウです。
HeimdallrやSBookでは、アプリケーションが使用する設定ファイルを、「マイドキュメント\SutoSoft\アプリケーション名」に記録しています。
このような場所に記録している理由は一応あります。
CMenu::TrackPopupMenuを呼び出してポップアップメニューを表示した際、
メニュー項目を選択するとCMenu::TrackPopupMenuから戻ってきますが、
メニューコマンド自体はSendではなくPostされるので、
一旦OSに制御を返さないとメニューコマンドの処理は行われません。
メニューコマンド処理後、何か別の処理を行いたいというとき、これではちょっと不便です。
特に、メニュー項目を選択せずキャンセルした場合、何もメニューコマンドがPostされないので、
ポップアップメニューをキャンセルしたときに何か処理をさせる方法がありません。
うちのソースコードを管理しているVisualSourceSafe(VSS)のデータベースが壊れました。
壊れたといっても、ソースコードを失ったわけではなく、
特定のバージョンを指定してソースコードを取得することができなくなっただけです。
背景が透明なウィンドウの作り方です。
ウィンドウの透明な部分をクリックしても、ちゃんと応答するウィンドウになるようにします。
まず、どの方法を使って実現するか考えてみます。
MFCは、SDIやMDIなどの標準的なウィンドウを持ったアプリケーションを開発するのに向いたクラスライブラリですが、MFCで特殊なウィンドウも作ることができます。
例えばHeimdallrもMFCを使って作られています。
壁紙に張り付くようなウィンドウの作り方です。
最近、VisualSourceSafeの分岐機能とマージ機能を使ってみました。
これらの機能を使った感想や、うまく使うコツを書いてみたいと思います。
アプリケーションの初期化シーケンスをもう一度走らせたい場合など、
アプリケーションが、自身を再起動させたいときがたまにあります。
それを実現する方法です。
ちょっと便利なVisualSourceSafeの小技集です。