«前月 最新 翌月» 追記

ぱぱネット(仮)


2009-09-01 急激に秋が深まってまいりました [長年日記]

_ [Linux] Objective-Cのお勉強をしよう

まだMacBookは届きませんが、スムーズに開発に入れるように Linuxでも環境を整えておく。といっても、Debian系なら

# apt-get install gobjc libgnustep-gui-dev

で、だいたいの下準備が整うようです。

_ コンパイル

試しにこんなソースを用意。ファイル名はsample1.m。

#include <Foundation/NSObject.h>
#include <stdio.h>

@interface Test1 : NSObject
{
   int x;
}
- (id)init;
- (void)print;
@end

@implementation Test1
- (id)init
{
  self = [super init];
  x = 1;
  return self;
}
- (void)print
{
  printf("Test1: %d\n", x);
}
@end

int main()
{
   Test1 *t1 = [Test1 new];

   /* 動的結合 */
   SEL printsel = @selector(print);
   if ([t1 respondsToSelector: printsel]) {
     [t1 performSelector: printsel];
   }
   [t1 release];
}

コンパイルはこんな感じでいいのかな。おー一応動くぞ。

% gcc -I/usr/include/GNUstep -lgnustep-base sample1.m
% ./a.out (実行)
  Test1: 1 (結果)

C++だと、ランタイム実行時に、メソッドの有る無しを調べてから実行、 なんてのは相当トリッキーなコードを書かないとできないですな。 これが柔軟なGUI構築につながっていくわけですね。

_ しかし....

valgrindで調べてみるとメモリリークしまくりなのですが(汗;) どこ間違ってるのかなあ....単純にvalgrindが対応してないとかなら いいんだけども。

% valgrind --num-callers=8 --leak-check=summary \
  --show-reachable=yes ./a.out
LEAK SUMMARY:
definitely lost: 5,840 bytes in 365 blocks.
possibly lost: 2,928 bytes in 71 blocks.
still reachable: 354,419 bytes in 6,308 blocks.
suppressed: 0 bytes in 0 blocks.

メモリ管理はObjective-C 1.0と2.0でも違うらしいので、 良く調べないとひどい目にあいそう。

_ クラスライブラリについて

/usr/include/GNUstep/Foundationを見る限り、iPhone SDK本に出てくるような基本的なフレームワークは全て備わっているように 見えます。手打ちでお勉強するには十分なのかな。

本はとりあえず「iPhoneアプリケーションプログラミング」を買ってきました。

iPhoneアプリケーションプログラミング
新居 雅行
技術評論社
¥ 3,360

書評で「図表による効果的な説明が行われていない」とか書いてあるけど、 ざっとみた感じC++,Javaでの開発経験者向けですね。


2009-09-02 まあ全体的には役立つ本なんだけどね [長年日記]

_ [iPhone][読書] iPhoneアプリケーションプログラミング

網羅的に様々な分野に触れていて良い本だと思ったんだがな..... 読んでみるとかなり酷かったので紹介します。

iPhoneアプリケーションプログラミング
新居 雅行
技術評論社
¥ 3,360

もうタイピングしてるだけでウンザリするわけだが、 どの程度酷いか理解してもらうために少し引用してみる。

p43

「まず、この@propertyによる宣言は必須となりますが、インスタンス 変数を{aka '定義'}}するかしないか、メソッドを自分で書くのかどうか、 @synthesizeを書くのかどうかという点については、 状況によって変わります。

しかし どのような状況で変わるのかまったく説明がない。 あるとすれば以下の項目だろうか。

p44

「プロパティageについてまず見てみましょう。オプションが何もないので ゲッタやセッタは指定されておらず、読み書き可能で、代入時はそのまま 代入されます。この場合、@synthesizeディレクティブを実装部記述 することで、同名のインスタンス変数ageに対しての代入や参照を行う ゲッタやセッタを背後で自動的に作り上げてプロパティとして機能する ようにします。 つまり、@synthesizeは文字通りメソッドを合成するということで実装部に記述します。整数データの場合は、単なる代入で多くの場合は問題ないでしょう。

いやいや、それまっったく説明になってないでしょう。「状況によって変わります=単なる代入で多くの場合は問題ないでしょう」。なに言ってるのかわかってますか?

次はもっとひどい。

p44欄外

「サンプルプログラムではnonatomicが付けられたプロパティがよく 見られます。これを書かないようにする必要があるのは複数のスレッド から書き込みが行われるようなプロパティです。書き込みが同時に発生 しないような場合は nonatomicと書いておく方が 良いでしょう。

この「新居雅行」という筆者にとって、どうもプログラミング言語というものが 「ああ、星が綺麗だな」とか「溶岩が吹き出ている」といった 現象として見えている ようだ。でもApple][やVIC-1001の頃から30年くらいコンピュータを学んできた程度の青二才に 言わせてもらえれば、

言語は'仕様'であって現象じゃない

仕様とは、Aという入力があれば必ず(バグを除き)f(A)という出力が 得られるもの。言い換えれば 思想 とも言うべきものだ。 ま、単なる素人には、状況や場面に応じて「ああ、書式が違うんだな」という 把握の仕方はありかもしれんけどさ、 そうなってしまう理由 、つまり必然があるのが プログラミング言語なんですよ。それを伝えるのが プロ の物書きとしての 義務なんじゃないの?

全体的に「あれもあります〜」「これもあります〜」「こういう可能性があります〜」と いう文体から、 実は全く内部構造を理解しないで本を書いている というのが伺えるけどね。

p45

「続いて、familyNameとgivenNameの場合を見てみます。ageと違って retainという記述があります。このretainについては次の節で説明 しますが、こちらは基本型ではなく、オブジェクトへの参照がプロパティ です。オブジェクトを引数に取るメソッドについては、 原則 としてこの ように代入時の動作を既定するオプションとしてretainを宣言するか、 あるいはcopyによってオブジェクトそのもののコピーを記録することを 行います。単なる参照の代入では、オブジェクトの開放との兼ね合いに 問題が出る 可能性があるので、

出たぁぁ!原則!可能性!

真面目な話、 この人の文章を初心者が読んだら混乱するだけ だぞ。 そういう意味ではAmazonの書評は全く正しいな。これは確かに初心者向けじゃない (むろん玄人向けでもないが)。 プロパティにしても、これは他言語からの概念で、オブジェクト指向含めて周辺的な知識を 網羅的に持っている人間には何が言いたいかわかるだろうけど、そんな人は読む必要もないだろ。

_ 俺ならこう書く!プロパティの説明

ちなみに手元のLinux gccには@propertyが無かったし(え?)言語仕様も知らないで(え?) propertyの説明を書いてみる。当然間違ってるだろう(笑)。

  1. オブジェクト指向の利点の一つに「隠蔽」がある
  2. オブジェクト内(インスタンス内)のアクセスする必要のないデータにはアクセスできないようにする
  3. 逆に、必要なデータにはアクセサ(アクセス関数,アクセスメソッド)経由で値を操作するという基本概念
  4. アクセサは、値の境界値チェックしたりもできるから、 単なる代入よりも、安全性が高まるよ
  5. でも全部のデータにアクセサを用意すると、それだけで関数てんこ盛りになって打つのがたるいよ
  6. しかも、スレッドセーフを考えると、関連する操作関数間で値を変更する際に排他制御を考えなくちゃならないので、値を操作するだけのつまんない関数なのにけっこう神経を使うよ
  7. 誰かなんとかしてくれないかなあ?
  8. Objective-Cではプロパティという宣言でコンパイラが勝手に作ってくれるようにしたよ

ここまでが導入。

  1. Objective-Cの場合は、変数宣言する段階で@propertyってつけるとプロパティになるよ
  2. さらに実装の部分は@synthesizeって書くと自動的にアクセサの実装を作ってくれるよ
  3. プロパティの書式HOGE.PIYOで読み書きするとき、自動的にアクセサであるゲッタとセッタが呼ばれるよ
  4. デフォルトではreadwrite属性だけど、 絶対書かないと分かっている場合は、 readonlyって書くとコンパイラがチェックしてくれるよ
  5. ゲッタとセッタは自分で定義することもできるよ。でもそれなら最初からメソッド記述しても大して差はないけどね。これは後で少し説明しようか。
  6. スレッドセーフに関しては未記述だとデフォルトでONだけど、 絶対にアクセス競合が起きないとわかっている時は nonatomic属性を付けるとOFFにできるよ
  7. アクセサの デフォルトは代入属性 assignだ。Cでも用意されている整数型などのプロパティ管理ではこれで十分だ。set(int v) { hoge_ = v; }ということね。
  8. しかし動的オブジェクトの場合はassginだと困るよね。Cで言えばchar *hoge = malloc(13);したポインタ変数にhoge = malloc(25);したらメモリリークだよね?
  9. assign属性の代わりにretain属性を付けると、リファレンスカウントによる参照管理を行ってくれるよ。つまり必要の無くなった(どのオブジェクトからも指し示されていない)オブジェクトは回収される。前期でいうとmalloc(13)の方は勝手に回収されるんだ。
  10. retain属性の場合は渡されたオブジェクトをそのまま管理する。つまりアクセサをコールした上位で 開放してはいけない。
  11. しかし時にはコールしたオブジェクトのコピーを保存しておいきたい場合がある。例えば辞書みたいなものを蓄積するテーブルオブジェクトを考えたときは、アクセサ内部でオブジェクトのコピーをしてくれるとありがたい。
  12. そんな時はretainの代わりにcopy属性をセットするよ。

以上がプロパティの仕様。

結局のところ「ただ単に文字列を内部でコピーして保持するセッタ」を「Cでオブジェクト指向っぽっく書く」と、以下のようなコードになるだろう。これを@property(copy)と@synthesizeで終わらせてしまえるのだから、メンバ変数が多くなればなるほどObjective-Cが有利なのは疑いない。 エラー処理がほとんどないのと、スレッドセーフの手段がグローバルロックなのは手抜きである。申し訳ない。

static CRITICAL_SECTION lock_;

void setFamilyName(id obj, char *newname)
{
  int len;
  char *tmp;

  if (obj == NULL || newname == NULL) return;

  ENTER_CRITICAL_SECTION(lock_);
  len = strlen(newname);
  tmp = (char *)malloc(len + 1);
  if (tmp == NULL) {
    LEAVE_CRITICAL_SECTION(lock_);
    return;
  }
  strcpy(tmp, newname);
  if (obj->name != NULL) {
      free(obj->name);
  }
  obj->name = tmp;
  LEAVE_CRITICAL_SECTION(lock_);
  return;
}

まあ正確性に関してはマジ墓穴というか

誤植だらけの本書いてたバカが何をほざく

という感じで赤面状態なわけだが、久々に高い本で腹が立ったので書いてみた。


2009-09-05 また房総へ行ってきました [長年日記]

_ [雑記] 朝から久里浜港に佇むtoga氏と俺

前日のチャットで「どうせもてないし小旅行でも行こうぜ」という話になったので(?)男二人フェリーに乗って千葉へ向かうのである。

_ [雑記] 竹岡式ラーメン元祖「梅の家」

もちろん千葉に行くからには、 前回お盆休みで食えなかった梅の家攻略 が目標に上がっていたのは言うまでもない。しかし・・・

めっちゃ混んでる(^_^;;
竹岡港って本当に何にもないんだよ。他に店らしい店もないのに、いきなり 7,8人外に並んだ上に、店内寿司詰め の店があったら怪しいっしょ。

でもコレを食わずに帰れるか!ということで30分待ちをこなして注文してみました「ラーメン+薬味」

感想:「う〜ん」 竹岡式を 好きな人は気を悪くしないで欲しいんだが、 なんというか素朴な味 やねえ。濃い醤油味。 チャーシュー煮汁を割っただけの出汁。そこへ玉ねぎの甘みがくる。

俺は正直もういいやと思っていたんだが、同行したtoga氏が絶賛して いたので、何か琴線に触れるものがあったんだろう。 ご馳走さまでした。暑い店内で小気味良く働いているお母さんたちに感謝を。

_ [雑記] 腹がいっぱいになったのでマザー牧場へ向かう

心臓破けた\(^o^)/

更和の交差点から数キロ登りばかりとかどういうことなの・・・ まるで手加減を知らない坂であり、自転車で来たことを心の底から 後悔したのである。toga氏には悪いことをした。申し訳ない。 toga氏のガーミンGPSで計測したところ、だいたい標高290メートルくらい登りだったらしい。口で言うと大したことないように聞こえるのだが・・・

牧場ではソフトクリームを食べながら、馬や羊やらと戯れておりました。

40近い男の生き様としてはどうかな?と思わないでもないが 近くでお馬さん見れたので満足です!(ぉ)

_ [雑記] 元きた道を戻る

はえええええええええええええええ!

標高300Mのダウンヒルは爽快そのもの でした。 やはり高原は快適だ・・・しかし下界へ降りてきたら気温高くて汗かいた。 海辺の湯 で汗を流してきました。

本当に温泉なのかは怪しいけれど 水面に反射した太陽を眺めながら入る露天風呂は格別でした。 ちーと高いけど、最近の銭湯はこんなものかな。

というわけで千葉の行程はひとまず終わり。

本日のツッコミ(全2件) [ツッコミを入れる]

_ 通りすがりのあいあん [お疲れ様でした。 >素朴な味 実はこれが曲者でまた食いたくなるんだなあ。]

_ はみんぐばあど [うーん、竹岡ラーメンの魅力は、「肉」だと思うけどなぁ。にくぅぅって感じの豚。]


2009-09-20 浜名湖へ遊びに行ってきました [長年日記]

_ [雑記] 久々に日記更新するかなあ

最近はアマゾンアフィリエイトの注文レポートに何か追加されていると、 「まだ読んでる人もいるんだな」と思って なんとなく日記を書くという自堕落になっております。

シルバーウィーク初日の19日。近所のオートバックスでオイル交換をし、軽く洗車もした。少しドライブしたくなったので、夕方から某所へ出発し、ともりん先生に往年のCCDスキャン型GT-8300UFを譲渡。

4年以上寝かせていた機体なのに、何の問題もなくvistaで動いた。拍子抜け。一応ポジフィルムのスキャンもできた。どうも背景真っ暗だと誤認識するみたいだけども。まあタダだから文句いうな!(ぉ

_ [雑記] そのまま東名にのる

このまま帰っても面白くないなーと思い、何の準備もなく東名高速に乗る。そしてほどなく後悔することになる(まあお約束)

東名富士IC付近で高波による通行止め('A`)

ええーっ?!高波ってなんだよ。そういや台風が近づいていたって言ってたなあ。手前の日本平PAで閉じ込められること数時間。特別予定があるわけじゃないので、夕食はPA内部の駿河亭で「かきあげ蕎麦+紅白丼」と相成った。 蕎麦はノビノビだったけど、桜えびとしらすのミニ丼はおいしかった。

_ [雑記] 結局解除されたのは23時前

このまま名古屋を超えるのは無理だな と判断。俺は車載クラスタにはなれない.....。はみんぐばぁど氏にもなれない(笑) で、「適当に降りれば街があるだろう」という 典型的ダメ都会っ子 の発想により相良牧ノ原ICで降りる。人は同じ過ちを繰り返す。

なにこの山中!

道路は整備されているのに、街頭一つない曲がりくねったワインディングロード。でも金谷駅(?)近くの山中から町並みが見えたときは思わず感動。これは奇麗だった。

_ [雑記] 補給しながら地図を見る(最初から見ろよ)

場所は島田市。金谷はSL運行で有名な大井川鉄道の始点として有名らしい。 もちろん初めて知ったことだ(笑)周囲が鉄だらけなのに、 鉄道に全く染まらない俺何者。ここは観光地でも何でもない ようなので、一般道で浜松市を目指す。

_ [雑記] 花博2009

偶然浜名湖立体花博というものが やっていたようだが、 華麗にスルーする俺 。 だって高いんだもん!なので隣のガーデンパークにいく。 公園は、ヨーロッパ調の庭園を広くした感じ。子供を遊ばせるにはちょうど良いのではないか。木陰にベンチがぽつんと置いてあったので、徹夜の睡眠不足を少し癒す。

ここでiPhoneアプリのAutoStichに初挑戦。公園内部の橋を中心に数枚つなげてみる。

元の写真の画質がアレなのだが、操作性は大変快適だった。本当にぺたぺた並べて行くだけで簡単につくれる。

_ [雑記] 浜名湖は奇麗だねえ

まるで海上を浮くように走ることができる架橋は最高でした。弁天島周辺も奇麗だねえ。でもお昼近くになってきて観光客が増え、気軽に駐車できなくなってきたので、湖畔を南からぐるっと北へ回って、猪鼻湖周辺へ。 マリンスポーツの若者が風光明媚な景色をカッ飛ぶのは、まあそれはそれでよいでしょう。この晴天下ではDQNさえもが煌めいて見える。

_ [雑記] 浜名湖と言えばウナギだよね!(中国産だけど)

この勝美というお店。店内がガラスばりになっていて絶景を眺めながら うなぎを食べられる。しかし味の方は..... うーん雰囲気補正!雰囲気補正! と唱えることで乗り切ったくらい。これで3500円はひど過ぎる。皮はビランと堅く身は味もしない水っぽいお味。タレはべっしゃり甘い。もしかしたら5000円の方を注文すれば違ったのか?いやそれはない。 なぜならこれは 焼いてるやつの技術の問題 だからだ。

連休中の日曜日ということで、店内はごった返し、店員さんもてんてこまいだった。厨房もおしなべて知るべし。ネットを見ても、ここまで酷評してるのはわずかなので、観光地に観光時期に行ってはいけなかった、というだけだろう。

まあ、これなら、浜松駅でも買える、浜名湖養魚漁協直営店のおみやげの方が10倍うまいんでオススメ。こちらは親に持って行った。

_ [雑記] 帰りの東名さん

厚木IC付近で3台玉突き衝突

例によって海老名手前から 渋滞30Km('A`) いやもう 俺何か悪いことしましたか? 運転手一人は渋滞時マジつらいわー。


2009-09-23 自信がないー [長年日記]

_ [PC] 5年前のCeleron搭載機のメモリ

クマさんのPCにメモリ増設....もう忘れた....チップセットはi845Gかなあ....悪名高いSocket478 Celeron(not D)だった気がする.....

I-O DATA DR400-512M(PC3200規格184pinDIMM:512MB)


2001|04|
2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|03|04|05|10|

[BANNER]
このサーバーをもう12年も維持しているかと思うとめまいがしますよ。
ツッコミ機能は、ハンドル名が完全日本語じゃないと登録できません。
また、本文にURLが含まれていても登録できません。
いずれもSPAM対策です。
[Panda Papanda]
2009年
9月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

[Papanda]  [Kuma]  [Tomorin]  [Iron]  [Eiza]  [Dokkin]  [Honya]  [Zyou]  [Tsuyo]  [Bike]  [KoeBBS]  [Chukei]  [portal]  [tvmatome]  [KaoPaku] 

訪問者数:(11777+2560143)