リンクシェア・ジャパン 東北地方太平洋沖地震 義援金プロジェクト

5月20日、XREAサーバーのメンテナンス

下記日程でXREAサーバーのメンテナンスが行われる予定です。
 日時:2012/05/20 (日) 午前0時 ~ 午前9時
 対象サーバー:s291.xrea.com – s378.xrea.com

当サイトも対象サーバーに含まれます。メンテナンスの間はアクセスできなくなるようですのでご了承ください。

WordPressのアップデートに失敗

WordPressのアップデートに失敗してコメントデータベースが壊れたらしい。
ちょうどサーバーの調子が悪いときに自動アップデートしたらしく途中で失敗。
再度自動アップデートかけたら成功したので大丈夫かと思っていた。
そしたら、一昨日意味不明なトラックバック通知がきたのでみてみたところコメントが全部消えていた。
データベースのコメントを直接見てみたら、壊れているのかなんなのかよくわからないがエラーがでてアクセスできず。
たぶん記事にコメントやトラックバックを付けることもできないと思う。
バックアップもだいぶ前のしかないので、まあどうしようもないのでここはこのまま放置しようかと。

ということで、アップデート前のデータベースのバックアップは大事です。(^_^;
気が向いたら、また新規にインストールして始めようかと。

2011-03-12 追記
PhpMyAdminでコメントのデータベースの修復をやってみたら復活できたようだ。
ということで、ここはこのまま継続します。

お散歩ついでの雪の写真

コンビニに行ったついでにご近所の庭木に積もってた雪の写真を撮ってきた。
iPod touch 4Gにて撮影。

Cocoa版 IRCクライアント 開発者向けにソースの公開

9月中にとりあえず一段落終えたいという予定であったので、まだまだ不完全ながらソースの公開をしてみる。(もともとCocoaプログラミングの学習が目的で、完全なアプリケーションを目指したプロジェクトではないのだが)
開発環境は、Mac OS X 10.6.8、Xcode 3.2.6 です。それ以外での動作確認はしていません。

 ※※※ ソースのダウンロード ※※※

ちなみに前の進捗で書いた入力値のチェックの見直しもまだ途中であるが、9月中に公開という〆切優先なので勘弁。(^_^;
それと、入力値を即時に保存するのは、パインディング設定の「Continuously Updates Value」というチェックボックスにチェックをいれるとできることはわかったのだが、これはこれで入力値をチェックする前に保存されてしまうという問題があり今回は見送り。

簡単にプロジェクトの解説してみると、もともと参考にしたものは「CocoaEcho」というサンプルコードでこれがネットワークまわりのベースになっている。
んで、このサンプルコードがAppControllerでなくAppDelegateがメインになってるので、わたしのものもChobircAppDelegateがメイン(メインウィンドウの操作もここ)になっている。この辺の違いはよくわかっていないので、ControllerとDelegateを分離できるかどうかとか分離したほうがいいとかはよくわからない。

んで、IRCサーバーから受信したメッセージを解析するのが、カテゴリでメソッドを分離してまとめたChobircAppDelegate+IRCAnalyzeになる。

あとは、環境設定パネルはPreferenceController、IRCプロトコルで使用する規定値はIRCconst、ログ表示のテキスト追加のメソッドをNSTextViewに追加するのがNSTextViewEx。

実行はビルドして起動すると何も起きないので、Preferences…から環境設定パネルを開いて設定値を入力しConnectボタンを押す。「Connect to start up」のチェックボックスにチェックをいれておくと次回起動時に設定値で自動接続する。

とりあえず今回はここまで。参考になるかどうかはわからんけど好きにいじって遊んでみてください。

IRCのニックネームの使用可能文字を正規表現でチェックする

IRCのニックネームの入力値チェック用に、ニックネームに使用できる文字を正規表現でチェックするテストプログラムを作ってみた。

まず、Cocoaで正規表現を使う方法を調べてみたら、

  • rangeOfString: option:NSRegularExpressionSearch を使う方法
  • NSRegularExpression を使う方法

というのがあって試してみたのだが、undeclaredとコンパイルエラーになったのでおかしいなあとドキュメントを調べてみたらどちらも 10.7 and later と書いてありあきらめる。(現在のわたしの開発環境は、Mac OS X 10.6.8 で Xcode 3.2.6)

次に、RegexKitLite というフレームワークを使う方法があったのでこちらでやってみることにしたのだが、ググったどっかの解説ページに書いてあった、単純に RegexKitLite.h と RegexKitLite.m をプロジェクトに追加しただけではビルドできなくて、再度ググって見つけたページに書いてあった libicucore.dylib をFrameworkに追加したらビルドできて動いた。
違っていた部分は、わたしの環境は10.6だったのでそちらの方(/Developer/SDKs/MacOSX10.6.sdk/usr/lib/libicucore.dylib)を選んだ。それと上記ページには追加したあとにいろいろやってるけど、わたしの場合は追加しただけで動いた。

んで、ニックネームのチェックの動作確認用に作ったのが下記プロジェクト。正規表現部分を書き換えてビルドすれば他にも使えるんではないかと。
プロジェクト CheckNickname のダウンロード

↑プロジェクトの提供方法がよくわからんのだがこれでいいのだろうか? buildフォルダを削除してzip圧縮してみたのだが。

IRCクライアント開発 2011-09-25の進捗

★本日までの進捗報告

また間があいてしまったが一応ちまちま進んでいる。これまでの状況を報告する。

前回Ustreamで発言できなかった件は、もともとUstreamのIRCではチャンネルモードに+mが設定されているので-mしないとゲストは発言できないというのをちゃぼさんから教えてもらって確かにそれもあったんだが、なんのことはなくただ単にログインパスワードの設定を間違っていて正常にログインしていなかったというのが真相であった。(なので一覧にもニックが表示されていなかった。)

これは入力設定ミスというよりも現在のつくりではTextFieldの入力がフォーカス移動した場合(Enter入力でもいいのかな)でないと確定されないというUIの問題といえる。(つまり自分はパスワード変更したつもりだったのだが入力確定されてなくて設定が保存されず前のパスワードのままログインしてて失敗していたという話。)

これについては、なんらかの対策をしたほうがいいようにも思うが、いまいちいいアイデアが浮かばない(というか知識がない)のでとりあえず放置している。(というか、そもそもサーバー設定のUI自体が簡易的なもので使いやすさを考えるならもっと作り込まないといけないと考えている。)

次に、NSTableViewにチャンネルのメンバーを表示する処理の追加は完了。とりあえず某チャンネルに1時間ほど接続して入退室の様子を眺めていたがうまく動いていたのでまあいいかな。本当はリストの表示がスクロールするときの挙動も見たかったのだが、そんなに人数がいなかった(笑) ので確認できず。これについてはUstreamで大勢いるようなところに接続すりゃいいかなと考えている。

ちなみに、こないだ某サーバーに繋がらないとmixiに書いた件は、サーバー設定が鑑賞用のほうだとダメで、入力用のほうだと繋がることが判明。内部事情はわからないので理由はしらんけど。

あと、設定の入力値のチェックが激甘なので、とりあえずニックネームの使用文字チェックのために正規表現で判定するテストプログラムを作ってみた。これについては次の記事にまとめます。

★今後の予定

ニックネームの入力チェックを組み込むのと、他の入力値のチェックを見直す。(Friend ChatはUsernameも制限があるみたいなのでそのチェックもしたいのだが、そもそものUsernameの使用可能文字の仕様を探しているのだがみつからない。)

もう大体できてきた(最小レベルでやることがなくなってきた)ので、これ以上余計なもんを付けないシンプルなうちに開発者向けにソースだけでも公開(一般ユーザーに使ってもらうレベルにはないのでビルドしたアプリはまだ)しようかと考えている。まあたいした参考にはならんだろうけども。

 

IRCクライアント開発 2011-09-15の進捗

★本日の進捗報告

  1. メッセージの送受信時にエンコード設定を判定し切り替えるようにした。
  2. Ustreamに接続してみたが、受信はできるが送信ができない。LimeChatで見てみたらチャンネルメンバーには入っているのでJOINはできてるようなんだが、Ustreamページをブラウザで見ると参加者に表示されていない。ちゃんとJOINできてないのか、発言権がないのか、送信しているメッセージがおかしいのか、まだ切り分けができていない。
  3. メンバー表示のNSTableViewは、何やら理解が難しい方法(バインディング)もあるみたいなんだが、ニックネーム並べるだけの単純なものなのでとりあえずNSMutableArrayでデータを保持してやりゃいいのかなあと考えてやり始めたところ。

★明日の予定

  1. もう少しUstreamで実験してみる。
  2. NSTableViewでメンバー表示をできるようにする。
  3. 接続設定を頻繁に変更すると、毎回強制自動接続では面倒なので自動接続以外のUIを付けようかと。

IRCクライアント開発 2011-09-14の進捗

★本日までの進捗報告

ちょっと間があいたが一応ちまちまと進んでいる。

  1. PreferenceのカラーウェルのActionでテキスト、背景色変更。(前回の予定1)
  2. Preferenceの設定を反映させるため、インスタンス変数名やらメソッド名やら、インスタンス変数の扱いの統一やらなど全体のソースの見直し。(前回の予定2)
  3. チャンネルへの自動入室。(今のところ強制的に自動入室なので、後ほど選択できるように変更)
  4. Preferenceウィンドウに文字エンコード(ISO2022JPとUTF-8)を選択するNSPopupButtonの追加。
  5. アプリの終了でIRCサーバーにQUITコマンド送信処理追加。

2は、今までCocoa流になってなかった(REALbasic流ともいう)ので整理。あとインスタンス変数の操作も勘違いしていたところがあったので統一。

3は、処理としてはENDOFMOTDの後にJOINを送信するだけなのでたいしたことはない。(ERR_NOMOTDのほうにも同じ処理を入れとかなきゃならんのだがとりあえず正常系だけ)

4は、UTF-8対応しておけばUstreamで使えるかなあと思って。はまりどころは、NSPopupButtonのバインドで最初 Selected Index でやってみたら落ちた。ググってみたら Selected Value なら大丈夫そうだったのでやってみたらとりあえずできた。(保持データとか、判定処理とか無駄になりそうだが…まあ動けばいいかと)

5は、最初QuitメニューにAction付けたら終了しなくなった。(笑)  調べてみたらMac♪Mac♪Mac♪ – 第12回 Cocoaプログラミング(MVC)に、「// アプリケーションが終了する前のイベント – (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;」というのがあったので、よしよしとコピペして処理追加。後でログの保存処理とか終了キャンセルとかもここでできそうである。

だが、QUIT送信はいいんだが、その後のStreamのクローズ処理までいかずに終了してしまっているようだ。本来ならクローズ処理を待ってから終了したいところなんだが待ちかたがわからないのでそのまま放置。まあそのうちログの保存確認ダイアログとか出すようになったらその処理の間にクローズすんじゃないかと思ってたりもする。

★明日の予定

  1. エンコードのポップアップの設定値をメッセージの送受信処理に組み込み。気が向いたらUstreamに接続して遊んで(試して)みる。
  2. NSTableViewにチャンネルのメンバーを表示する処理(追加、削除)を追加したいところだが、まだやりかたがよくわかっていないのでもうちょっと調べもの。

IRCクライアント開発 2011-09-01の進捗

★本日の進捗報告

「初期値に戻す」ボタンについてこちらの記事(続きの記事も)を読んだら大体やり方がわかったので実装。

  1. まず、UserDefaults.plistを作成し、初期値を設定する。ちなみにNSColorをNSDataに変換したものを設定するのには、それ以前に試しているうちにできていたplistから設定値をコピペ。
  2. Appleのドキュメントのリスト2のsetupDefaultsのメソッドをコピペ。
  3. setupDefaultsの中のresettableUserDefaultsKeys=のValue1,Value2…を自分の初期値に戻したいキー名に変更。(ちなみにキー名とキー値(文字列定数)の定義はあらかじめやっておく。)
  4. initializeからsetupDefaultsを呼ぶ。
  5. Preferences.xibを開いて、配置したパーツのバインディングをすべて設定する。(キー名はUserDefaults.plist並びに上記3の定義と一致させておく。)
  6. 「初期値に戻す」ボタンをShared User Defaults ControllerのrevertToInitialValues:に接続する。

以上、説明をかなり端折っているがビルドして動かしてみると「初期値に戻す」ボタンを含めちゃんと思い通りに動いた。パチパチ。ちなみに先に作ったActionのコードはすべて不要になった。よきにはからえとはこういうことなのだな。すげえ楽ちん。

あと、昨日書いた今日の予定の2「できれば既存の本体部分への設定値の反映のコーディングまで完了したい。」はサーバー接続あたりは反映した。

次に、設定した値を適用する方法だが、昨日書いたshowWindow:senderのsenderをインスタンス変数にとっとくやり方でやってみたらまあできたことはできたんだが、このPDFドキュメントを読んでみるとPreferenceControllerの初期化メソッド(initWithAppControllerとか)で渡してとっとくのがパターンらしく、とりあえずそうしてみることにする。(現時点でまだ実装が完了していない。)

上記のPDFドキュメントはアプリケーションの設計を考えるには有益なものだと思う。一読の価値あり。ただ、今作ってるのとは設計方針がちょっと違ってたりもするけど。(^_^;

オブジェクト間通信の方法としては、ちゃぼさんが教えてくれたNSNotificationがスマートだとは思うのだが、前にやってみてうまく動かなかった(直接の原因はNSNotificationではなかったかもしれんが)のと、設定値と変更箇所が1対1なのでNSNotificationを使うまでもないかなあとも思ったり。使った方が楽になりそうになったら改めてやってみようかと。

★明日の予定

  1. 今日の続き。ただし「適用」ボタンはやめて色変更したらActionですぐに反映させてしまう方法にしようかと。
  2. 既存の本体部分への設定値の反映のコーディング(IRCサーバーからのメッセージ解析部)まで完了する。
  3. ここまでやるとPreferencesパネルは大方終わるので次からNSTableViewのコーディングに移る。

IRCクライアント開発 2011-08-31の進捗

★本日の進捗報告

今日は調べものでコーディングはなし。
昨日の問題は昨日の記事に追記で書いたが、「+ (void)initialize」を「- (void)initialize」と間違えて書いていただけで+に直したら正常に動いた。
だが、「初期値に戻す」ボタンを実装しようとして悩む。
なんも考えずおばかなことをするならば、initializeに書いてあるコードを環境設定パネルの「初期値に戻す」ボタンのActionにコピペして、環境設定パネルをリフレッシュ(正確な呼び名はわからん)すればいいと思うんだが、無駄というか修正するときには両方修正しないとおかしなことになる。(バグの元)
つまりやりたいのは初期値に設定する部分を共通化して、initializeと、ボタンのActionからメソッド呼び出しできればいいんだが…はて?
んで、ちゃぼさんが教えてくれたページには、「初期値に戻す」ボタンを実装するにはNSUserDefaultsControllerを使うとやら書いてあったのだが、実際にどうするかまで書いてないのでわからない。
Appleの同様な記事にも具体的なボタンの実装方法が書かれていない。うーむ。
また、HMDT Second Editionの説明を読んでみたがいまいちやりたいこととずれている。

もうひとつの悩みは、環境設定パネルで例えばメインウィンドウのTextViewの文字色や背景色を設定変更して「適用」ボタンを押した場合、メインウィンドウのTextViewにどうやって設定するのか。
AppControllerからPreferences PanelをshowWindow:しているのだが、showWindowをオーバーライドしてsenderを保存しておいてそれからAppControllerのメソッドを呼び出せばいいのかな?
こういうクラス間の呼び出しかたがいまいちピンとこないなあ。

★明日の予定

  1. 「初期値に戻す」ボタンはとりあえず置いといて、「適用」ボタンの方をコーディングして試してみようかと。
  2. できれば既存の本体部分への設定値の反映のコーディングまで完了したい。
Subscribe to RSS Feed Follow me on Twitter!