下記日程でXREAサーバーのメンテナンスが行われる予定です。
日時:2012/05/20 (日) 午前0時 ~ 午前9時
対象サーバー:s291.xrea.com – s378.xrea.com
当サイトも対象サーバーに含まれます。メンテナンスの間はアクセスできなくなるようですのでご了承ください。
下記日程でXREAサーバーのメンテナンスが行われる予定です。
日時:2012/05/20 (日) 午前0時 ~ 午前9時
対象サーバー:s291.xrea.com – s378.xrea.com
当サイトも対象サーバーに含まれます。メンテナンスの間はアクセスできなくなるようですのでご了承ください。
WordPressのアップデートに失敗してコメントデータベースが壊れたらしい。
ちょうどサーバーの調子が悪いときに自動アップデートしたらしく途中で失敗。
再度自動アップデートかけたら成功したので大丈夫かと思っていた。
そしたら、一昨日意味不明なトラックバック通知がきたのでみてみたところコメントが全部消えていた。
データベースのコメントを直接見てみたら、壊れているのかなんなのかよくわからないがエラーがでてアクセスできず。
たぶん記事にコメントやトラックバックを付けることもできないと思う。
バックアップもだいぶ前のしかないので、まあどうしようもないのでここはこのまま放置しようかと。
ということで、アップデート前のデータベースのバックアップは大事です。(^_^;
気が向いたら、また新規にインストールして始めようかと。
2011-03-12 追記
PhpMyAdminでコメントのデータベースの修復をやってみたら復活できたようだ。
ということで、ここはこのまま継続します。
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のニックネームの入力値チェック用に、ニックネームに使用できる文字を正規表現でチェックするテストプログラムを作ってみた。
まず、Cocoaで正規表現を使う方法を調べてみたら、
というのがあって試してみたのだが、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圧縮してみたのだが。
★本日までの進捗報告
また間があいてしまったが一応ちまちま進んでいる。これまでの状況を報告する。
前回Ustreamで発言できなかった件は、もともとUstreamのIRCではチャンネルモードに+mが設定されているので-mしないとゲストは発言できないというのをちゃぼさんから教えてもらって確かにそれもあったんだが、なんのことはなくただ単にログインパスワードの設定を間違っていて正常にログインしていなかったというのが真相であった。(なので一覧にもニックが表示されていなかった。)
これは入力設定ミスというよりも現在のつくりではTextFieldの入力がフォーカス移動した場合(Enter入力でもいいのかな)でないと確定されないというUIの問題といえる。(つまり自分はパスワード変更したつもりだったのだが入力確定されてなくて設定が保存されず前のパスワードのままログインしてて失敗していたという話。)
これについては、なんらかの対策をしたほうがいいようにも思うが、いまいちいいアイデアが浮かばない(というか知識がない)のでとりあえず放置している。(というか、そもそもサーバー設定のUI自体が簡易的なもので使いやすさを考えるならもっと作り込まないといけないと考えている。)
次に、NSTableViewにチャンネルのメンバーを表示する処理の追加は完了。とりあえず某チャンネルに1時間ほど接続して入退室の様子を眺めていたがうまく動いていたのでまあいいかな。本当はリストの表示がスクロールするときの挙動も見たかったのだが、そんなに人数がいなかった(笑) ので確認できず。これについてはUstreamで大勢いるようなところに接続すりゃいいかなと考えている。
ちなみに、こないだ某サーバーに繋がらないとmixiに書いた件は、サーバー設定が鑑賞用のほうだとダメで、入力用のほうだと繋がることが判明。内部事情はわからないので理由はしらんけど。
あと、設定の入力値のチェックが激甘なので、とりあえずニックネームの使用文字チェックのために正規表現で判定するテストプログラムを作ってみた。これについては次の記事にまとめます。
★今後の予定
ニックネームの入力チェックを組み込むのと、他の入力値のチェックを見直す。(Friend ChatはUsernameも制限があるみたいなのでそのチェックもしたいのだが、そもそものUsernameの使用可能文字の仕様を探しているのだがみつからない。)
もう大体できてきた(最小レベルでやることがなくなってきた)ので、これ以上余計なもんを付けないシンプルなうちに開発者向けにソースだけでも公開(一般ユーザーに使ってもらうレベルにはないのでビルドしたアプリはまだ)しようかと考えている。まあたいした参考にはならんだろうけども。
★本日の進捗報告
★明日の予定
★本日までの進捗報告
ちょっと間があいたが一応ちまちまと進んでいる。
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のクローズ処理までいかずに終了してしまっているようだ。本来ならクローズ処理を待ってから終了したいところなんだが待ちかたがわからないのでそのまま放置。まあそのうちログの保存確認ダイアログとか出すようになったらその処理の間にクローズすんじゃないかと思ってたりもする。
★明日の予定
★本日の進捗報告
「初期値に戻す」ボタンについてこちらの記事(続きの記事も)を読んだら大体やり方がわかったので実装。
以上、説明をかなり端折っているがビルドして動かしてみると「初期値に戻す」ボタンを含めちゃんと思い通りに動いた。パチパチ。ちなみに先に作ったActionのコードはすべて不要になった。よきにはからえとはこういうことなのだな。すげえ楽ちん。
あと、昨日書いた今日の予定の2「できれば既存の本体部分への設定値の反映のコーディングまで完了したい。」はサーバー接続あたりは反映した。
次に、設定した値を適用する方法だが、昨日書いたshowWindow:senderのsenderをインスタンス変数にとっとくやり方でやってみたらまあできたことはできたんだが、このPDFドキュメントを読んでみるとPreferenceControllerの初期化メソッド(initWithAppControllerとか)で渡してとっとくのがパターンらしく、とりあえずそうしてみることにする。(現時点でまだ実装が完了していない。)
上記のPDFドキュメントはアプリケーションの設計を考えるには有益なものだと思う。一読の価値あり。ただ、今作ってるのとは設計方針がちょっと違ってたりもするけど。(^_^;
オブジェクト間通信の方法としては、ちゃぼさんが教えてくれたNSNotificationがスマートだとは思うのだが、前にやってみてうまく動かなかった(直接の原因はNSNotificationではなかったかもしれんが)のと、設定値と変更箇所が1対1なのでNSNotificationを使うまでもないかなあとも思ったり。使った方が楽になりそうになったら改めてやってみようかと。
★明日の予定
★本日の進捗報告
今日は調べものでコーディングはなし。
昨日の問題は昨日の記事に追記で書いたが、「+ (void)initialize」を「- (void)initialize」と間違えて書いていただけで+に直したら正常に動いた。
だが、「初期値に戻す」ボタンを実装しようとして悩む。
なんも考えずおばかなことをするならば、initializeに書いてあるコードを環境設定パネルの「初期値に戻す」ボタンのActionにコピペして、環境設定パネルをリフレッシュ(正確な呼び名はわからん)すればいいと思うんだが、無駄というか修正するときには両方修正しないとおかしなことになる。(バグの元)
つまりやりたいのは初期値に設定する部分を共通化して、initializeと、ボタンのActionからメソッド呼び出しできればいいんだが…はて?
んで、ちゃぼさんが教えてくれたページには、「初期値に戻す」ボタンを実装するにはNSUserDefaultsControllerを使うとやら書いてあったのだが、実際にどうするかまで書いてないのでわからない。
Appleの同様な記事にも具体的なボタンの実装方法が書かれていない。うーむ。
また、HMDT Second Editionの説明を読んでみたがいまいちやりたいこととずれている。
もうひとつの悩みは、環境設定パネルで例えばメインウィンドウのTextViewの文字色や背景色を設定変更して「適用」ボタンを押した場合、メインウィンドウのTextViewにどうやって設定するのか。
AppControllerからPreferences PanelをshowWindow:しているのだが、showWindowをオーバーライドしてsenderを保存しておいてそれからAppControllerのメソッドを呼び出せばいいのかな?
こういうクラス間の呼び出しかたがいまいちピンとこないなあ。
★明日の予定