Storyboardを使って作った画面上に表示するところでハマったうえにググっても情報を探すのが大変だったのでメモ。Application」を選択してテンプレートからプロジェクトを作成。Data」にチェックを入れておく。Dataプログラミングガイドの「管理オブジェクトモデルの作成」に従ってオブジェクトモデルを作成する。Dataスタックの初期化」を行うよう記されていて、NSManagedObjectContext、NSPersistentStoreCoordinator、NSManagedObjectModelの3つが必要と記述されている。初期化コードとしてDataControllerクラスの実装例もあるのだが、このオブジェクトをどのオブジェクトが所持すべきなのか(ビューなのかドキュメントなのか)が記載されていない。Data関連の初期化を行って「ready-to-use」のNSManagedObjectContextのインスタンスを提供すると書いてある。Dataスタックの初期化をする必要はなさそうである。Dataの管理はDocument(MVCにおけるModel)の仕事であるべきで、ViewController内でこの作業を行うのはよろしくないのではないか、という疑問があるし、前述の通りNSPersistentDocumentを利用する場合この処理は不要であるはずである。Controllerに参照させる手段が分からない。Controllerのoutletを作成することもできない。context」というメッセージが表示される。NSDocument?」にそのものずばりの質問と回答があった。結論的には、まずDocument.swiftのmakeWindowControllers()の末尾に下記を追加する。ControllerのrepresentedObjectがDocumentを参照するようになる。Controller」を指定する。Pathには「representedObject.managedObjectContext」を指定する。Pathに「!」が表示されるのがちょっと気持ち悪い。Controllerにアクセスするのは面倒臭いなおこの辺の作業を行ったコードはhttps://github.com/hylom/ttune/tree/76d43fe476c24f064aee51b7748529aa82a309d1です。2.6系および2/7系のxmlrpclibで、サーバーからはどう見ても正しいXMLが返ってきているはずなのにxml.parsers.expat.ExpatErrorが出た場合の対処方法メモ。xmlrpclibでは、サーバーから受け取ったXMLデータを一定サイズごとに分割してXMLパーサーに投入する、という処理を行っている。Expatを使わないようにするとこの問題は発生しない。114たぶん挙動的にExpatのバグのようだが、それを修正する気力もなかったので、とりあえずxmlrpclibでExpatを使わないようにすることで対処。パース速度は低下すると思われるが。具体的には、xmlrpclibをimportしたのち、XMLパーサーを取得するxmlrpclib.getparser関数を以下のようにして置き換える。mygetparserここでは、getparser関数の戻り値がExpatParserクラスのインスタンスだった場合、SlowParserクラスのインスタンスに置き換えるという処理をやっている。hackなので利用はおすすめしない。02:25:39MongoDBにデータを格納する場合、格納するデータをプロパティとして持つオブジェクトを引数にコレクションのinsertメソッドを実行する。バイナリデータをデータベースに格納したい場合、バイナリデータをBuffer型のオブジェクトとして与えればよい。MongoDBに格納するドキュメント(データを格納する単位。SQLデータベースの1行に相当する)には最大4MBというサイズ制限がある。そのため、格納できるバイナリデータの上限は4MBだ。次のサンプルコードは、引数で指定したファイルを読み込んでデータベースに格納するものだ。データベースに格納するオブジェクトを用意しているのが42行〜45行の部分だ。ここでdataオブジェクトは読み出したデータを格納しているBuffer型のオブジェクトとなっている。ちなみに、格納されたデータをmongoシェルで確認すると、BASE64でエンコードされた形で表示される。Driverのドキュメント)。このオブジェクトから格納しているデータを取り出すには、readメソッドを使用する。オブジェクトのbufferプロパティを直接参照することでもバイナリデータにアクセスできるのだが、ドキュメントにはこのプロパティが明示されていないので、readメソッドを使用したほうが確実だ。length)ここでposition引数にはデータの読み出しを開始するオフセットを、length引数には読み出すバイト数を指定する。次の例は、読み出したデータをファイルに保存するものだ。データの取り出し処理をしているのは60〜61行の部分だ。lengthメソッドでバイナリのサイズを取得してlen変数に格納し、0バイト目からlen変数で指定したサイズまで、つまりバイナリの最初から最後までを取り出してコールバック関数を実行している。01:18:39Node.jsのhttpモジュールには、HTTPクライアント機能も実装されている。http.request関数およびhttp.get関数がそれだ。詳細はドキュメントを確認していただきたいが、http.requestは任意のリクエストメソッドを使ってリクエストを送信できるものだ。http.getはGETリクエストに限定されるものの、URLを与えるだけで簡単にリクエストを送信できる。以下のコード(http-request.js)は、引数で指定したURLに対しGETリクエストを送信し、取得したコンテンツを表示するものだ。err.message);});http.request関数やhttp.get関数はともに戻り値としてhttp.ClientRequest型のrequestオブジェクトを返す。http.request関数の場合、request.endメソッドを実行して明示的にリクエストの送信を完了させる必要があるが、http.get関数の場合はendメソッドは暗黙的に実行されるので不要だ。http-request.jsを以下のように実行すると、http://hylom.net/のコンテンツがコンソールに表示される。http://hylom.net/さて、http.get関数やhttp.request関数を使ってリクエストを送信する場合、デフォルトではタイムアウト時間が設定されない。サーバーへの接続が成功した後、サーバー側がレスポンスの送信を完了しない限りクライアント側の処理は終了しない。次のslowserver.jsはローカルホストの4000番ポートで待ち受けをし、リクエストを受信してから5分(300秒)後にレスポンスを返すというものだ。4000...');});このサーバーを実行し、先ほどのhttp-request.jsを使ってアクセスすると、実行後5分をすぎたあたりでレスポンスが表示される。slowserver.js^Cさて、タイムアウトが設定されていないということは、サーバー側がレスポンスを返さない、もしくは接続を破棄しない限り、クライアント側は永遠にレスポンスを待ち続けることになる。クライアント側でタイムアウト時間を設定するには、http.get関数やhttp.request関数の戻り値として返されるhttp.ClientRequestクラスのsetTimeoutメソッドを利用する。[callback])timeout引数にはタイムアウト時間を指定する。接続後、ここで指定された時間が経過するとrequestオブジェクトに'timeout'イベントが発生する。callback引数はtimeoutイベント発生時に一度だけ実行されるコールバック関数を指定する。'timeout'イベントハンドラは引数を取らない。ここで注意したいのが、timeoutイベントが発生した場合でも接続は継続されたままになっている点だ。次のコードは、先のhttp-request.jsにrequest.setTimeoutメソッドを使ってタイムアウトを設定したものだ。err.message);});これを実行すると、次のようにtimeoutイベントは発生しているものの、イベント発生後も引き続きレスポンスを待ち続けていることが分かる。OK.timeoutイベント発生時に接続を破棄したい場合、イベントハンドラ内でrequest.abortメソッドなどを使用して明示的に接続を破棄する操作を行えばよい。req.abort()});このように修正した上で先ほどのhttp-request.jsを実行すると、次のようにタイムアウト発生時に接続が破棄され、errorイベントが発生する。02:03:46Expressでは、Connectミドルウェア「logger」を使うことで詳細なアクセスログやエラーログを記録することができる。Expressコマンドで生成したスケルトンコードでは、以下のようにloggerミドルウェアを利用するように設定されている。:}このように第一引数に'dev'引数を与えて生成されたloggerミドルウェアを使用すると、標準出力にカラー付きでアクセスログが出力される。これは開発用という目的なので、実サービスの運用には適していない。そこで、Apacheのデフォルト設定で使われる形式のアクセスログおよびエラーログをファイルに出力するよう設定していく。2.7.2ベースを使用している。logger型オブジェクトを生成するloggerミドルウェアオブジェクトのファクトリ関数は、以下のような引数を取る。logger([options])options引数にはオプション情報を格納したオブジェクト、文字列、関数オブジェクトを与えることができる。省略された場合は空のオブジェクト({})が与えられたものと見なされる。文字列もしくは関数オブジェクトが与えられた場合、次のようなオブジェクトが与えられたものと見なされる。<与えられた文字列もしくは関数オブジェクト>}options引数に与えられたオブジェクトのうち、表1のプロパティが挙動に影響を与える。非falseの値を指定すると、リクエストを受信した時点でログ出力を実行する。出力フォーマットを指定する。表2のどれかに該当する文字列が指定された場合、それに対応する定義済みフォーマットが使用される。バッファを利用する場合、非falseの値を指定する。undefinedまた、options.formatプロパティでは出力形式を指定できるが、ここでは表2の定義済みフォーマット値が利用できる。「tiny」と「dev」はほぼ同じ内容を出力するが、devはコンソール出力時に見やすいよう色付き表示のためのエスケープシーケンス付きで出力される点が異なる。:res[content-length]なお、フォーマット文字列では表3のトークンが利用できる。これらは出力時に適切な値に変換される。定義済みフォーマットで所望の出力が得られない場合、表3のフォーマット文字列を使って独自のフォーマットを定義することも可能だ。options.formatプロパティに独自のログ整形処理を実装した関数オブジェクトを与えることもできる。res)という引数が与えられて実行される。exports引数にはloggerモジュールが、req引数にはリクエストオブジェクトが、res引数にはレスポンスオブジェクトが与えられ、この関数の戻り値がログとして指定されたストリームに出力される。Apacheのデフォルト設定で使われる形式のログを出力する以下はApacheのデフォルト設定で出力されるログの例だ。user-agent"このとき、各フィールドには次のような情報が格納されている。定義されていない/取得できない値に対応するフィールドには「-」が出力される。"<User-Agentリクエストヘッダの値>"これと同じ形式のログをloggerミドルウェアを使って出力するには、定義済みフォーマットの「default」を利用すればよい。/home/foobar/access_logというファイルにログを出力するには、以下のようにする。16:34:25「大切な事は全て.NETから学んだ」を見て、ああそういう人もいるんだなと思ったので自分がプログラミング関連知識をどこから学んだかを挙げてみる。プログラミングとは何か:BASIC。コンピュータのアーキテクチャ:アセンブラ(とFM-7のマニュアル)。Toolkit)メッセージ型アーキテクチャ:Objective-Cダックタイピング、動的型付け、リスト内包:Python並列処理:OpenMPプロトタイプベースのクラス機構、クロージャ:JavaScript見事にJavaとPHPとRubyからは何も学んでいない、というかこれらの言語は読めるけどあまり書けない(汗)。16:54:03SDL_mixerはCentOS用のパッケージが用意されていない&提供されているSRPMをx64環境でビルドすると64ビットバイナリが/usr/lib/以下にインストールされてしまうという問題があるので、これを修正するspecファイルを作成した。Gist:SDL_mixer.specで公開している。rpm,centos,programmingPrevNexthylom.net:ライター/エディター/プログラマー/Webディレクター、hylomのブログです。ご興味のある方はつぶやきや執筆記事などもどうぞ。絶対わかるGitバージョン管理」を出版しました。コマンドラインおよびGUIクライアントのSourceTreeを使ったGitによるバージョン管理の流れを解説してします。コマンドラインリファレンスも収録しています。-サーバーサイドJavaScriptでWebアプリを開発する-」を出版しました。Node.jsのインストールや環境構築、パッケージの利用、Webアプリケーション作成、データベースやファイルアクセス、Expressフレームワークの利用、デバッグやテストといった、Node.jsでのWebアプリケーション作成に必要な知識を一通り解説しています。分散型SNSであるMastodonの入門書を電子書籍として出版しました。初心者向けにMastodonの仕組み、用語、クライアントの使い方などを解説しています。Magazineオープンソース関連ニュース/情報を掲載OSDNオープンソースソフトウェア開発支援サイト。私も使っていますGitHub公開Gitリポジトリ。nodeWeblog.。