ラベル technique の投稿を表示しています。 すべての投稿を表示
ラベル technique の投稿を表示しています。 すべての投稿を表示

2007年11月2日金曜日

リブログとは…

へー.


Webギョーカイの歩き方
第6回「インプットとアウトプット」
http://jobzine.jp/special/2007/08/6.php
ブックマークレットを登録して、閲覧中のサイトやブログから、文章や画像などを数秒で引用が可能です。クリッピング専用に使われることが多いようです。これを「リブログ」(reblog)と呼ばれたりしています。



グレモンもようやくなのに…w.
#技術は知っていても略称や使い方まではついていけてないんだよなぁ….

Cover Flow用のViewがあるかなぁー.なんて期待してた.

10.5のIBを見てみた.

…ちょっとびっくり.
アイコンがきれいなのはいいんだけどオブジェクト類のパレットが扱いにくい.かも.
まぁなれなんでしょうけどね.

で,タイトルにも書いたけどNSArrayControllerを相手にする感じでNSCoverFlowViewなんてありそうな感じがしてたんだけど….ないね.やっぱり汎用的ではないのかしら….

ではQuartz Comp.で物まねしていたヤツを実装していくかな.….

#きっとやり方がもうあるのか,すでにだれか作ってそう….
##時代おくれだからなぁおいら…

ーー
追記:
ExamplesにCoverFlowの文字発見.
NSAnimation関連で自分で実装しろと….あたりまえか.
#それにしても読み込みが遅い.画像をそのまま読むからか?
##Finderで同じ事してもそんなに遅くない気がするけど…気のせい?Carbonだから?

2007年11月1日木曜日

mouseイベントはupで起こす(確定する).

downでなくupで発生させる方が確かな確定.
#というかそういうのにみんなが慣れている.

あとundoは大切.できればredoも欲しい.
#そのためのコンピュータ.

いまさらだが書き留めてみる.
これを読んで思いたったからw.
Wikipedia
ユーザーエクスペリエンスデザイン
http://ja.wikipedia.org/wiki/ユーザーエクスペリエンスデザイン

#きっとそういうことじゃないんだろうけどねぇ…

2007年10月30日火曜日

メニューを開くと呼ばれるメソッド:- (BOOL)validateMenuItem:(NSMenuItem *)item

メニューのenable / disable, on state / off state などやりたいときに便利.
sampleを見る限りitemのactionからselectorを判断して使うのがただしいっぽい.
#ここでの"myAction"はIBでメニューアイテムに設定したアクション名.
#このメソッド自体アクションを有するObjectに書く.
#だからアクションを色々つなぎ分けた構成をIBでしたらその分だけ必要.

戻り値がsetEnable:に反映される.

- (BOOL)validateMenuItem:(NSMenuItem *)item {
SEL action = [item action];
if (action == @selector(myAction:)) {
[item setStatus:NSOnState]; //or NSOffState or NSMixState
return YES; // or NO;
}
return YES;
}


#諸先輩方におかれてはあたりまえなんだろうなぁ.

デフォルトでチェックを入れたい環境設定….(ワガママ

えーっとですね.
・環境設定パネルを用意.
・NSUserDefaultsで管理してやろう
・環境設定パネルにチェックボックスを追加.
・初回起動時にチェックを入れておきたい.
・チェックボックスのattributesでselectedにチェックを入れときゃ良いのでは?
・えー.まったく関係なしぃ−.
って状況です.(自分の文章上のキャラクターが分からなくなりつつあります.)

で,いろいろ調べるべきなんでしょうが面倒くさくなりましたのでnibが読込まれたところで初期化してやろうという方針を取りました.
幸い,なにも設定していないときvalueForKey:nilで戻ります.boolForKey:だとNOで戻る.


- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
[super windowControllerDidLoadNib:aController];

NSUserDefaultsController * udc= [NSUserDefaultsController sharedUserDefaultsController];
NSUserDefaults *ud= [udc defaults];
if ([ud valueForKey:@"isTrue"]==nil) {
[ud setBool:YES forKey:@"isTrue"];
}
}


だれかもっとエレガントなの教えてー.

NSCFBoolean : BOOLを取り出すためには.

先のNSUserDefaultsにCheckbox等のvalueをしまうと当然BOOLの型でしまわれると想像すると思うのだが,プリミティブはオブジェクトでないのでKVC上都合が悪くNSCFBooleanでしまわれる.

これはBOOLのオブジェクト.通常は見えないところで働いている.
でも次のような状況では出くわしてしまう事もある.

たとえばIBでcheckboxを用意してbindingにてvalueをShere's User Defaultsに"isTrue"というキーでしまったとしよう.
これを取り出すには
 NSUserDefaults *ud= [[NSUserDefaultsController sharedUserDefaultsController] defaults];
id choice= [ud valueForKey:@"isTrue"];

とやるとchoiceに入る.

ところがこれBOOLではなくNSCFBooleanで,そのままではif文等で評価式として使えない.
変換するには
 BOOL b= CFBooleanGetValue(choice);

としてあげる必要がある.

もっともNSUserDefaultsにはboolForKey:というのがあるので
 BOOL b= [ud boolForKey:@"isTrue"];

とできるんだけどね.実はw.

設定するときはsetBool:forKey:を使ってねw.

2007年10月29日月曜日

環境設定パネルをつけよう.

と思って探したドキュメント.
#考えてみればインスペクタとかと同じで良いんじゃん.

環境設定パネルをつけていますがドキュメントの目的が環境設定そのものではなかったねw.

Developer Connection
Binding your Preferences in Cocoa
http://developer.apple.com/cocoa/cocoabindings.html


・なるほどねぇー.便利だこれ.  NSUserDefaultsController
・そっかー.これでパネルは表示するのね. panelのaction "makeKeyAndOrderFront"

もっと勉強しよ….
--
ちなみにこの値は以下のようにして取り出せる.
 NSUserDefaultsController * udc= [NSUserDefaultsController sharedUserDefaultsController];
NSUserDefaults *ud= [udc defaults];
id obj= [ud valueForKey:@"textSize"];

2007年10月28日日曜日

2007年10月17日水曜日

「SLはネットの孤島ではない」…

それって結構すごくない?
ttp://codezine.jp/a/article/aid/1763.aspx

考えてみれば過去にみたtwitterのtime lineを流してた人とかはこうやってたのか…

2007年10月15日月曜日

bi_gramを使ってみた.

正直FULLTEXT, LIKE検索などなどとの違いがあまり詳しくは分かっていない….
以下が認識.

 FULLTEXT:英語ベースなので半角スペースでパースされたwordによるインデックス?
  問題は日本語は単語単位で半角スペースは入らないこと.

 LIKE検索:WHERE句で使うマッチング.
  問題は大変遅いこと.

あってる?

とりあえず使ってみる.

table.txt(文字コードはeuc-jpでテスト)

CREATE TABLE t (c VARCHAR(255), FULLTEXT (c) WITH PARSER bi_gram);
INSERT INTO t VALUES('昨日はよい天気だった.');
INSERT INTO t VALUES('今日はよい天気です.');
INSERT INTO t VALUES('明日は良い天気でしょう.');


query.txt

SELECT c FROM t WHERE MATCH(c) AGAINST('天気で' IN BOOLEAN MODE);


データベース:test はmysql_install_db時に作られていた.

>mysql5 -u root -p test < table.txt
Enter password: [password]
>mysql5 -u root -p test < query.txt
Enter password: [password]
c
今日はよい天気です.
明日は良い天気でしょう.


参考:
MySQL用N-Gram全文検索プラグイン
http://mysqlbigram.googlepages.com/mysql用n-gram全文検索プラグイン

ありがとうござます.

2007年10月14日日曜日

mysql bi-gramをMacPortsで入れたMySQLに入れてみる.

追記: 動かした記事



ソースを取得

以下のURLのコンパイル項にあるtar.gz.
http://mysqlbigram.googlepages.com/mysql用n-gram全文検索プラグイン
http://mysqlbigram.googlepages.com/home-j(URL変わってた 2008/07/06)


上記ページに沿ってみる.
#ちなみに私のマシンはMacOSX10.4.10で"/Developer"が入っています.

bi_gramのコンパイル

1. > tar xvzf bi_gram-src-1.0.1.tar.gz
2. > cd bi_gram
3. > ./configure --prefix=/opt/local --includedir=/opt/local/include/mysql5-devel
4. > vi Makefile
4.1 "pkglibdir = $(libdir)/mysql"を"pkglibdir = $(libdir)/mysql5-devel/mysql"と変更
5. > make
6. > sudo make install
#/opt/local/lib/mysql5-devel/mysqlの下にbi_gramlib*がある


my.cnfへのパラメタ設定

> cd /opt/local/etc/mysql5-devel/
> sudo vi my.cnf

[mysqld]
ft_min_word_len=1



プラグイン

>mysql5 -u root -p
mysql> INSTALL PLUGIN bi_gram SONAME 'bi_gramlib.so';
mysql> SHOW PLUGINS;


とりあえず入ったっぽい.

参考:
http://mysqlbigram.googlepages.com/mysql用n-gram全文検索プラグイン
http://mysqlbigram.googlepages.com/home-j(URL変わってた 2008/07/06)
ありがとうございます.

MySQL 5.1.xをMacPortsから入れて起動するまで

いろいろやったので関係ないのもあるかもしれないけど….

MySQLを入れる
>sudo port install mysql mysql5-devel +server

ファイル名の手直し
> cd /opt/local/share/mysql5-devel/mysql
>sudo ln -s mysql.server5 mysql.server

> cd /opt/local/libexec
>sudo ln -s mysqld5 mysqld
>sudo ln -s mysqlmanager5 mysqlmanager

> cd /opt/local/lib /mysql5-dev/bin
>sudo ln -s my_print_defaults5 my_print_defaults
>sudo ln -s mysql_upgrade5 mysql_upgrade
>sudo ln -s mysqld_safe5 mysqld_safe
>sudo ln -s resolveip5 resolveip

初期化
>sudo /opt/local/bin/mysql_install_db5

初期化の手直し
> cd /opt/var/db/mysql5-devel/
> chown -R mysql:mysql mysql
> chown -R mysql:mysql test

起動
> cd /opt/local/share/mysql5-devel/mysql
> ./mysql.server start

MySQLのrootのパスワード設定
>sudo /opt/local/lib/mysql5-devel/bin/mysqladmin -u root password 'new-password'

確認
>mysql5 -u root -p
'new-password'を入れて確認.

以上.誰かの役に立てば幸い.

2007年10月5日金曜日

".mac"の多言語対応は微妙?

今日外出先でメイルを返信するために.macを利用しました.

新しいAppleのページは.macへどういくのか分からず四苦八苦.

英語環境にたどり着きログイン.

言語を気にせず(英語環境だがメイル件名や本文は日本語を正しく表記)返信.

いい気になっていると.

「文字化けしてますよ」のメイルが….

いろいろ調べてみると日本語環境からログインしないと(言語で日本語を指定しておかないと)だめ.

英語環境でも表示はされるのでいいのですが….

多言語対応の方針の見直しを希望.

2007年9月18日火曜日

Safari: 新しい英辞郎に対応してみた.

これ(下)をBookmarksに入れる.
Bookmarksの位置(フォルダはのぞく)で番号が振られ,apple+'番号'のショートカットができる(1つめなら1(フォルダは数えない)).
#これはSafariだけの機能かしら?
でブラウジング中に文字列を選択し,これを呼び出す.


javascript:d=document;w=window;t='';if(d.selection){t=d.selection.createRange().text;}else%20if(d.getSelection){t=d.getSelection();}else%20if(w.getSelection){t=w.getSelection();}%20;void(w.open('http://eow.alc.co.jp/'+encodeURIComponent(t)+'/UTF-8/',%20'_blank',%20''))



文字を選択してbookmarkletを使う(ショートカットでも,バーをクリックでも)と…動いた動いた.

2007年8月17日金曜日

で,どうやってシステム環境設定のHTTPプロキシ情報を得るか

まぁ卵と鶏の関係なのだが上手くいくなら以下の方法で情報が取れるはず.

[[NSURL URLWithString:@"http://www.apple.com/" propertyForKey:NSHTTPPropertyHTTPProxy];

でもこれが動くならそんな値(情報)必要としないとも言える.

で以下がやるべきこと

//SystemConfiguration.frameworkを追加
//includeなりimportで次のheaderを読込む<SystemConfiguration/SystemConfiguration.h>

CFDictionaryRef proxyDict = SCDynamicStoreCopyProxies(NULL);
CFNumberRef enableNum = (CFStringRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPEnable);
CFStringRef hostStr = (CFStringRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPProxy);
CFNumberRef portNum = (CFNumberRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPPort);

だということです.CFxxx系は不勉強で良く知りません.

が,CFStringRef, CFNumberRefはNSStringのように扱えちゃいました.
そこで以下のような方法でHTTP Proxyを設定してみました.

CFDictionaryRef proxyDict = SCDynamicStoreCopyProxies(NULL);
CFNumberRef enableNum = (CFStringRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPEnable);
if ([enableNum intValue]==1) {
CFStringRef hostStr = (CFStringRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPProxy);
CFNumberRef portNum = (CFNumberRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPPort);
NSString* proxyURLStr= [NSString stringWithFormat:@"http://%@:%@", hostStr, portNum];
NSURL* proxyURL = [NSURL URLWithString:proxyURLStr];

WSMethodInvocationSetProperty(ref, kWSHTTPProxy, proxyURL);
}

もっと賢い方法や正しい方法があったら教えてやってください.

#2007/08/30 kSCPropNetProxiesHTTPEnableにてproxyを使うかどうかに変更

とりあえず目的達成.

参考
ttp://developer.apple.com/jp/qa/qa2001/qa1234.html

WebServiceをプロキシ越しに利用したい.

追記(20100829): でどうしたかを書いたのへリンク付け忘れてた



MacOSXなのでシステム環境設定がそのまま適用されると信じていたのだがそれは妄想でした.
相手がhttp proxyなので以下が必要となる.

WSGeneratedObj.mの171行目あたり.

else {

WSMethodInvocationSetProperty(ref, kWSHTTPProxy, [NSURL URLWithString:@"http://proxyhost:proxyport"]); //これ

WSMethodInvocationSetProperty(ref, kWSSOAPBodyEncodingStyle, style);

PropwertyとしてkWSHTTPProxyを設定するということらしいですね.

NSURLがシステム環境設定のproxyを引っ張ってくれないのはなんでだろう?
#10.2以下と認識して動作しているってこと?(プロファイラとしては10.4.10と言ってますがw.)
どうも人によってちがうらしいんですよね…
ttp://www.oomori.com/cocoafw/Foundation/NSURL/propertyForKey.html
ttp://homepage.mac.com/mkino2/bbs/spbbslog/log3.html (120以降の流れ, といっても03'の話ですね.こっちはNSURLHandlerが相手.だけどHandlerってもう使わない方向らしい.)


NSURL *url= [NSURL URLWithString:@"http://www.apple.com/"];
NSLog(@"%@", [[url propertyForKey:NSHTTPPropertyHTTPProxy] description]);

ってやっても'(null)'しか戻らん.(もちろんプロキシは設定してる.)

2007年8月16日木曜日

以前Windows版のアプリがあったきもする

そのときは「笑い男」が乗っかってましたけどね.
#あれは静止画だったかな.

ttp://blog.nodera.tv/2007/08/post.html

2007年8月15日水曜日

ゲームのUIのあのスムーズさや分かりやすさを

実際いろいろ仕事をしていて自分の実装のヘボさ加減を思い知るのだが
ゲームのUIや実装方針,エフェクトやトランジションの活用などをみていると
なぜこれが自分にできないのだろうと腹が立つことがあります.

デザインよりも機能の実現が大切なのはわかるがそれをパッケージとして
世に送り出すときには使う側のココロにも届くことができたら幸せだと思います.
ttp://jp.techcrunch.com/archives/ipod-v-the-insulin-pump-adaptive-path-rises-to-the-challenge/
ttp://jp.techcrunch.com/archives/apple-ipod-v-the-insulin-pump/

ホンダが二足歩行ロボットを世にデビューさせたときロボットの研究者はあれはそれほどスゴくないと言っていました.
でもあのパッケージ力こそスゴいのだと思うのです.

完成させるのではなくまとめあげる力が求められる気がします.

2007年7月24日火曜日

フレームワーク作者の意図を読み解く

以下を読んでいつも思う事を書いてみる.
http://dev.activebasic.com/OverTaker/?p=318

ここで書かれているのはつまりは
 フレームワークを使うので無く,フレームワークに如何に落とし込むか.
ってことだろうか.またアプリケーションや機能のテンプレートとして,
フレームワークがあるということだろうか.
(iLife…の部分の方が本題だとも思うが)

これが難しくなってしまう理由としてフレームワークは単発の関数と異なり
複数のオブジェクトの協調によって目的を達成している点であろうか.

個々のオブジェクトの役割の割り振りは
当然フレームワークの設計者(チーム)の個人的な利便性感からくる.
(統計や調査等したとしても最後の決断は主観だ.)

実際フレームワークを利用しようとしているエンジニアはこの役割分担を
自分の直面している問題にフィットするように解釈しようとする.

しかしサンプルプログラムでない限り
当然いくつかの不整合があるだろう.

このとき,この不整合をどう回避すべきか?という指針はまさに
役割分担の意図(目的)を理解していなければおよそ正解と呼べる答えとならない.

実装内容のよっては後にフレームワークを十分活用できなくなったりする.
(しかも大抵,いろいろやった後で理解不足に気付いたりする.)

逆に役割分担の意図を正確に捉える方法があれば
そのフレームワークは本来の実現される機能を十分に発揮でき
広くに使われやすくなるだろう.

で,その方法は?というとたぶん実際実装することじゃないかなぁ.
なんてみもふたもないことを書いてみておく….

2007年7月21日土曜日

KVO : で,テーブルの行選択するたびに知りたい!のでKVO.

このエントリーにはまとめのエントリーが書かれました.新しいエントリーを参照してください.
NSArrayController(NSTableView)の選択結果の取得について
http://edotprintstacktrace.blogspot.com/2007/11/nsarraycontrollernstableview.html

ーー
さてココまで来て,テーブルを行選択する度に
イベントをおこして欲しい!となりました(私が).

KVOはあるオブジェクトのある"Model Key Path"でアクセスできる値を
観測していて変化があったときに登録したオブジェクトの
KVO用メソッドを呼んでくれるというものです(説明できてるかな…).

さて,具体的(?)に.
前述のNSArrayControllerを取得したとして,こいつの
selectionIndexesという値を以下のようにオブジェクト(ここではself)を登録する.

[_nsArrayController addObserver:self
forKeyPath:@"selectionIndexes"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
context:NULL];


で登録されているモノが呼び出すのは以下のようなメソッド.

- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([keyPath isEqual:@"selectionIndexes"]){
//event!
}
}


#注意:選択情報のもとはNSTableViewのselectionIndexesです.
#これをNSArrayControllerにbindすることで
#NSArrayControllerだけコード側でみれば良い状態にしていることを前提としてます.
#これをしない場合はNSTableViewをコード側で取得してこれにKVOをしてあげてください.

となる.うーんやっぱりNSArrayControllerを取得しないといけないのは正しいのかな?
でも要素の登録もController経由で行うというのは正しい姿だと思うから…あってる?.
そもそもNSArrayControllerにNSMutableArrayを設定するのが間違い?


追記(2008/10/06):GUIのKVO(?)について書いた