2010/09/30

[ChromeWebApps]Chrome Extenshonsが使えるようです

Google Developer Day 2010に参加したときに初めて知ったのですが、どうやら、packaged appの場合は、Chromeのextensions機能が使えるようです。
(全部が全部使えるわけではないと思いますが。。。)

というわけで、Google Chrome Extensionsをちょっと読んで見ようかなと。

2010/09/29

[mysql]databaseを選択する

ある特定のユーザーでログインできたものの、どうやってデータベースを選択するのかなーっと悩んで調べることに。

mysql> USE menagerie
Database changed

via:3.3.1. データベースの作成および選択

なんて単純なんだ!!

2010/09/28

Google Developer Day 2010に参加

しました。

Photobucket

去年は、参加できなかったのですが、今年は参加することができました。

今までと比較してものすごく講演の内容が変わったなーっと。
去年までは、Google Mapや、Open Social、Android(なかった場合は、Gearsなどのテクノロジー)が中心だったのですが、
今回の主なテーマとしては、
クラウド
HTML5
android
と、3つのテーマにわかれて進行しました。
(唯一、androidが残った感じですね。)

数ある講演の中から、
Google App Engineの新機能
Chrome Developer Tools
Chrome Web Apps
を聞きました。

日頃使っているツールや言語のブラッシュアップや、新機能を知る事ができたので、大変有意義な時間を過ごすことができました。

さらに、これも去年までなかったと思うのですが、各企業や学校などのブースが展示してあって、空いた時間にまわりました。
みんな、色々なことを考え、そしてこうして目に見える形で実現しているんだなーっと思うと、感心と今以上に頑張らないとというプレッシャーがかかり刺激になりました。

実は、もう一つ、Google Storage for DevelopersGoogle Prediction APIに関する講演に参加したかったのですが、立ち見がでてしまうほど、ものすごい人だかりができていたので、諦めました。

しかし、今年もすごい人の数だったなー。
来年もまた参加したいです。
(なんか、androidのアプリ作りたくなってしまった。。。)

2010年9月29日に追記
inputタグのtype属性がsearchの場合でかつ、speech属性がついている場合、音声認識を行い検索することができる。

<input type="search" speech required name="q" >

(調べてみたところ、Using the Speech Attribute Feature in Chrome 7にも情報がありました。)

JavaScriptとWebGLを使ったAquariumのデモ
Demos: GPU Acceleration and WebGLに詳細が掲載されています。

transliterate APIの拡張API
Google CGI API for Japanese Inputリリース
仕様に関しては、こちらを参照

macbook proを使ったdevice orientation apiを使ったデモ
当日の映像はなかったのですが、YouTubeに映像があったので、紹介します。

イベントでは、macbook proのみと発表されていましたが、macbookでもいけちゃうような気がするのですが。。。

根拠となった記事は、Detecting device orientation

Currently, this is supported on certain mobile devices (Windows Mobile, for example) and on Apple's MacBook and MacBook Pro computers.

via:Detecting device orientation


Google公式ブログ
Google Japan Blog: Google Developer Day 2010 Japan がいよいよスタート!

2010/09/27

[jQuery]$(func)でready(fn)みたいな動作

びっくりしたのですが、前回、ready(fn)でonload処理を・・・でjQueryを使ってonloadのような処理する方法を書いたのですが、もっと簡単な方法があったようです。

<!DOCTYPE html>
<html>
<head>
<script src="jquery-1.4.2.min.js" type="text/javascript" charset="UTF-8"></script>
<title>jQuery</title>
</head>
<body>
<script type="text/javascript">
$(function(){
console.log("整いました。")
})
</script>
</body>
</html>

これすっげー便利!!

参考:jQuery日本語リファレンス
jQuery(callback)

2010/09/26

[Chrome Web Store]必須入力項目

ようやく、Chrome Web Storeに出品するアプリが完成したので、Chrome Developer Dashboardにファイルをアップロードを行い、Publishをしようと思ったら、

なんと、

エラーが発生。

原因を突き詰めてみると、どうやら、必須入力の項目があるみたいです。

現段階でわかっているのは、
「Language」

は、必須入力みたいです。

なんだか、めんどくさくなってきたなー。。。
(必須入力項目に関しては、随時、更新予定)

2010年9月28日更新
「Icon」 128x128pxの画像も必須(pngでオッケーでした)
2010年9月29日更新
「Screenshots」400x275pxのGIF, JPEGまたはPNGでおk(最低一枚必要)


2010/09/25

[本]カリスマ受験講師細野真宏の経済のニュースがよくわかる本 世界経済編

昨日に引き続き、


1 これまでの円の動きについて
2 「ヘッジファンド」と「ポンド危機」について
3 「アジア通貨危機」について
4 「ロシア危機」と「ヘッジファンドの危機」について
5 これからの「世界の通貨体制」の行方について

via:目次

こちらは、世界経済について解説してあります。

日本経済版と遜色なくわかりやすくてステキな一冊です。

ただ、はやり、2003年に出版されているので、改訂版がほしぃ~~~。

もちろん、表紙は、漫画家の江川 達也


2010/09/24

[本]カリスマ受験講師細野真宏の経済のニュースがよくわかる本 日本経済編

文句なしにおもしろい

円高と円安と日本の景気について
2 日銀の仕事について
3 バブル経済について―マネー経済への導入
4 バブル崩壊後の日本と景気対策について―景気対策の効果とその問題点
5 借金大国日本の現状について
6 政府の財政政策と日銀の金融政策の現状について―国債の大量発行の問題点とは?

via:目次

本書の最大の特徴は、文字ばかりではなく、絵やイラストがふんだんに入っいてとてもわかりやすいところ。
本書に出会う前では、まったく活字を読んでいなかったにもかかわらず、すーっと入ってきました。

前回、経済ってそういうことだったのか会議で紹介した際に、どうしても、別エントリーで紹介したい衝動にかられてしまい、今回、エントリーを設けました。

さらに、本書のすごいところは、表紙が、漫画家の江川 達也のイラストということ。

これ以前の経済本でなかった試みなんじゃーないのかなーっと。

ここまでわかりやすいのだから、是非、小学校のデファクトスタンダードの書籍にしてほしですね。

ただ、初版がリリースされてから、すでに7年もたっているので、改訂版がほしいところ。

2010/09/23

大嶌先生のサイン

をずばり先生の誕生日の際に頂きました。
Photobucket

2010/09/22

[Objective-C]半角英数字チェック

をする方法を開発しました。

NSMutableCharacterSet *checkCharSet = [[NSMutableCharacterSet alloc] init];
[checkCharSet addCharactersInString:@"abcdefghijklmnopqrstuvwxyz"];
[checkCharSet addCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
[checkCharSet addCharactersInString:@"1234567890"];
if([[filename stringByTrimmingCharactersInSet:checkCharSet] length] > 0){
//エラー処理
}
[checkCharSet release];

上のサンプルでは、チェック対象となる変数は、NSString型のfilenameであり、stringByTrimmingCharactersInSetメソッドを使って半角英数字を取り除きそのlengthをとって0よりも大きい場合はエラー処理を記述するという流れになっています。

注意としては、マニュアルに書いてあったのですが、NSMutableCharacterSetクラスは、結構、メモリをくうようなので、必ずreleaseメソッドを使うようにしてほしいとのこと。

これで半角英数字ができるようになるぞと。

2010/09/21

[Objective-C]ハイライト表示について

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPathメソッドでハイライト表示を非表示にできかったので方法を探るべくぐぐりました。

その結果、わかったのは、How can I highlight a UITableViewCellを読むと、(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPathメソッドを使えば動的にハイライト表示を操作できるみたいです。

実際に、試してみたところ、非表示にすることができました。

めでたし、めでたし。

2010/09/20

[Google Libraries API]APIをloadする

APIをロードするのは、とても簡単。
Load the APIを参考にすると、たとえば、jQueryをロードするには、下記のたった一行でオッケー

google.load("jquery", "1.4.2");

の代わり、<script type="text/javascript" src="http://www.google.com/jsapi?key=INSERT-YOUR-KEY"></script>を先にインクルードする必要があります。
INSERT-YOUR-KEYは、Sign-up for an AJAX Search API Keyで表示されたキーに差し替える必要があります。

これを使えば、毎回、毎回、新しいバージョンがでてもそのつど、ダウンロードしてインクルードするという作業を省くことができ、JavaScriptの行を一行編集するだけですむので便利だなと。

2010/09/19

[本]小飼弾の 「仕組み」進化論

おもしろすぎてすぐに読了

Part0 仕組み作りが仕事になる
●仕組み化が進んだ社会
●仕組みづくりを仕事にするための「新20%ルール」

Part1 仕組みの仕組み 仕組みを作る前に知っておきたいこと
●仕組みはどんなふうにできているのか
●身近にある「テコ」と「奴隷」を使った仕組み

Part2 仕組みを作り直す 目の前の仕事を20%の力でこなす仕組み
●プログラマーに学ぶ「仕組み作り」の基本
●プログラマーの三大美徳「怠慢」「短気」「傲慢」
●日常業務を仕組み化してみよう

Part3 仕組みを使う 仕組みのコストとテストを考える
●仕組みは使ってなんぼ
●「使わないでなんぼ」な仕組み

Part4 仕組みを合わせる チームで仕組み合うために
●仕組みを合わせる基本ルール
●上手に仕組みを合わせる
●安全に“仕組み合う”ための仕組み

Part5 仕組みと生物 「新しい仕組み」を作るヒント
●生き残りの名人「生物」という仕組みに学ぶ
●生き残るための仕組みを作る

Part6 仕組みの未来
●「リソース重視」の仕組み作りが格差をなくす
●新しい仕組み作りへリソースを投じよう

via:目次

数多くの仕組み本がリリースされていますが、本書は、小飼弾さんの段取りについての本。

やはり元オンザエッヂのCTOであり、オープンソースプログラマーでもあるので、内容自体、プログラムを作る際のアプローチを他の一般的な仕事にも活かせるような内容となっており、恥ずかしながら同じ職業としてすーっと頭に入っていきました。

さらに本書のすごいところ(言い換えれば、弾さんのすごいところでもあるのですが)は、プログラム以外のこと、例えば、車産業や航空産業、さらに生物学と色々な仕組みも随所に取り入れてさらに段取りを進化させているところ。

しかし、全体的に理系の内容が多かったので、文系の人には難しいかもしれませんが、最終的には、本書で述べていることは一つに集約することができ、それは、本書で確認してほしい。

弾さんの他の書籍
[本]弾言 成功する人生とバランスシートの使い方
[本]空気を読むな、本を読め。 小飼弾の頭が強くなる読書法

弾さん自身の紹介エントリー
紹介 - 「小飼弾の 「仕組み」進化論 」、3月19日発売です


2010/09/18

EOSB500を撮影

科学フォーラム2009年11月号

科学フォーラム2008年12月号
を大嶌先生から頂いたのですが、先日、先生のパーティに誘っていただきました。

下の写真は、その時に、撮影したEOS B500の写真。
なんと、先生がお持ちだったのです。
(シンセがめちゃくちゃ大好きなので、そっこーでカメラ撮影)

Photobucket

Photobucket

Photobucket

Photobucket

Photobucket

Photobucket


2010/09/17

[本]経済ってそういうことだったのか会議

やっと読了


第1章 お金の正体―貨幣と信用
第2章 経済のあやしい主役―株の話
第3章 払うのか取られるのか―税金の話
第4章 なにがアメリカをそうさせる―アメリカ経済
第5章 お金が国境をなくす―円・ドル・ユーロ
第6章 強いアジア、弱いアジア―アジア経済の裏表
第7章 いまを取るか、未来を取るか―投資と消費
第8章 お金儲けはクリエイティブな仕事―起業とビジネス
第9章 人間とは「労働力」なのか―労働と失業
終章 競争か共存か

via:目次

竹中平蔵さんと佐藤さんが日本、世界と括らず経済について対談した内容が収録されているのですが、わかりやすさで言えば、正直、細野真宏の経済のニュースシリーズの方がわかりやすかった。




どうして、そう思ったのか?理由は、単純、細野シリーズの方が、フンダンに、絵や図などが挿入されているためイメージしやすいのである。

では本書のポジショニングは、具体的な統計数字などを話し合う内容でもないだろう。
それは、前回紹介させていただいた日本経済図説 第三版の方が圧倒的に網羅されている。

そうではなくて、一人の元政治家として竹中平蔵が経済をどう考えているのか?それを知る事ができるのが、本書の醍醐味である。
しかも、上から目線ではなく、経済を知らないであろう読者目線で語っているところがすごいなと。

ただ、唯一、残念に思ったのが、対談していた佐藤さんが、若干、先入観を持ちすぎているんじゃーないのかなーっと。
例えば、「企業って、本来、思想があって利益を目指すべきだと思うんだけど、目的が逆転している気がしておかしい気がする」みたいなくだりがあったが、別にそれでもいいんじゃーねーっと正直思ってしまった。

だって法律に違反しているわけではないし、それできちんと利益をあげて多額の税金を納めれば、それだけで社会貢献をしていると思うし、何かするのに、思想って必要なのだろうか?って思ってしまう。

極端な話をすれば、スポーツ、料理、ゲームといった趣味をしたい場合も思想がないとできないわけではなく、とりあえずおもしろそうだから始めるといった感じで会社をはじめてもいいじゃん。
(自己資金で開始し、商品を発売すればスタート時点では誰も迷惑をかけてないと思うし。)

解釈が飛躍しすぎてしまったのだろうか?

本書を拝読した限り、「バザールでござーる」などのキャッチフレーズなどの仕掛人であるのだから、もっと柔軟だと思っていたのだが、読んでいるうちに、勝手にハードルをあげすぎてしまったのだろうか?

要望として、本書のハードカバー版が出版されてからはや10年ぐらいたち、当時と比べて世界はものすごい勢いで変化していると思うので、是非、パート2の対談を実現してほしいものである。



2010/09/16

[Objective-C]NSCharacterSetとNSStringの違い

今、ipadのアプリを作っていて、何気なく上記の疑問が浮上

まず、NSCharacterSetとは、

An NSCharacterSet object represents a set of Unicode characters. NSString and NSScanner objects use NSCharacterSet objects to group characters together for searching operations, so that they can find any of a particular set of characters during a search.

via:Character Sets

ここでは、NSCharacterSetは、ある一組のUnicodeを表現するクラスとして容易されているのに対して、NSStringは

A string object is implemented as an array of Unicode characters (in other words, a text string).

via:Strings

となっている。
つまり、Unicodeの配列として表現されるクラスであるそうです。

なんか、ドキュメントを読めば読むほど、わけがわからなくなってくるような。

つまり、テキストとして表現した場合は、NSString。セットとして扱いたい場合は、NSCharacterSetなのかなーっと無理やり納得させる。
(なので、NSStringがlengthが取れる一方で、NSCharacterSetでは、取得することができない。)

あとは、各メソッドが要求しているクラスを適宜使用すれば問題ないと思うのですが。

2010/09/15

[jQuery]append()とappendTo()

appendは、引数にエレメントの追加を行い、逆に、appendToは、引数に対してコンテンツを追加するというメソッドです。

ちょっとサンプルプログラムを作成

<html>
<head>
<title>Jquery extendテスト</title>
<script type="text/javascript"
src="./jquery-1.4.2.min.js"
></script>
</head>
<body>
<div id="foo_01"></div>
<div id="foo_02"></div>
<input type="button"
value="Run"
id="hoge"
>
<script
type="text/javascript"
>

$("#hoge").bind(
'click'
, function(){
$("#foo_01").append("<span>Hello jQuery</span>");
$("<span>Good Bye jQuery</span>").appendTo("#foo_02");
}
);
</script>

</body>
</html>

id=foo_01にHello jQueryが追加され、id=foo_02にGood Bye jQueryが追加されます。

使い方に注意しないと頭の中で、ぐしゃぐしゃになりそうです。

参考
jQuery日本語リファレンス
append()
appendTo()

2010/09/14

[jQuery]ready(fn)でonload処理を・・・

jQueryを使ってonloadのような処理をしたい場合は、readyメソッドを使うのが便利。

<html>
<head>
<title>Jquery extendテスト</title>
<script type="text/javascript"
src="./jquery-1.4.2.min.js"
></script>
<script type="text/javascript">
$(document).ready(function(){
alert("準備完了");
});
</script>
</head>
<body>
</body>
</html>

参考:jQuery日本語リファレンス ready(fn)

2010/09/13

[jQuery]extend()

これと、前回紹介した[jQuery]関数を追加するで紹介した方法との違いがよくわからない。

一応、サンプルを作ってはみたもの。

<html>
<head>
<title>Jquery extendテスト</title>
<script type="text/javascript"
src="./jquery-1.4.2.min.js"
></script>
</head>
<body>
<input type="button"
value="Run"
id="hoge"
>
<script
type="text/javascript"
>

jQuery.extend({
foo:function(){alert("hello jQuery");}
});

$("#hoge").bind(
'click'
, function(){
jQuery.foo();
}
);
</script>
</body>
</html>

jQuery.fn.fooとは違って、直接、jQueryに結びついているのが特徴なのかなーっと無理やりなっとくさせる。

2010/09/12

[iPad][Objective-C]splitViewを表示する

iPadの新機能であるspliteViewを表示させる方法について書きたいと思います。

//sqliteBrowserAppDelegate.h

#import <UIKit/UIKit.h>

#import "MainSplitViewController.h"
#import "LeftNavigationController.h"
#import "LeftTableViewController.h"
#import "RightNavigationController.h"
#import "RightViewController.h"

@interface sqliteBrowserAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

//sqliteBrowserAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

LeftTableViewController *lefttableviewcontroller = [[LeftTableViewController alloc] initWithStyle:UITableViewStylePlain];
LeftNavigationController *leftnavigationcontroller = [[LeftNavigationController alloc]
initWithRootViewController:lefttableviewcontroller
];

RightViewController *rightviewcontroller = [[RightViewController alloc] initWithNibName:nil bundle:nil];
RightNavigationController *rightnavigationcontroller = [[RightNavigationController alloc]
initWithRootViewController:rightviewcontroller
];

MainSplitViewController *mainsplitviewcontroller = [[MainSplitViewController alloc] init];
mainsplitviewcontroller.viewControllers = [NSArray arrayWithObjects:leftnavigationcontroller,rightnavigationcontroller,nil];

[window addSubview:mainsplitviewcontroller.view];
[window makeKeyAndVisible];

return YES;
}

//MainSplitViewController.h
#import <UIKit/UIKit.h>

@interface MainSplitViewController : UISplitViewController {

}

@end

//MainSplitViewController.m
#import "MainSplitViewController.h"


@implementation MainSplitViewController


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return YES;
}


- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}


- (void)viewDidUnload {
[super viewDidUnload];
}


- (void)dealloc {
[super dealloc];
}


@end

//LeftNavigationController.h
#import <UIKit/UIKit.h>


@interface LeftNavigationController : UINavigationController {

}

@end

//LeftNavigationController.m
#import "LeftNavigationController.h"


@implementation LeftNavigationController


- (id)initWithRootViewController:(UIViewController *)rootViewController{
if((self = [super initWithRootViewController:rootViewController])){

}
return self;
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return YES;
}


- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];

}


- (void)viewDidUnload {
[super viewDidUnload];
}


- (void)dealloc {
[super dealloc];
}


@end

//LeftTableViewController.h
#import <UIKit/UIKit.h>

@interface LeftTableViewController : UITableViewController {

}

@end

//LeftTableViewController.m
#import "LeftTableViewController.h"


@implementation LeftTableViewController


#pragma mark -
#pragma mark Initialization

- (id)initWithStyle:(UITableViewStyle)style {
if ((self = [super initWithStyle:style])) {
UIBarButtonItem *addbutton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:nil
action:nil
];
self.navigationItem.leftBarButtonItem = addbutton;
}
return self;
}



#pragma mark -
#pragma mark View lifecycle


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}


#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 3;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell...

return cell;
}

#pragma mark -
#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

}


#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];

}

- (void)viewDidUnload {
}


- (void)dealloc {
[super dealloc];
}


@end

//RightNavigationController.h
#import <UIKit/UIKit.h>


@interface RightNavigationController : UINavigationController {

}

@end

//RightNavigationController.m
#import "RightNavigationController.h"


@implementation RightNavigationController


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}


- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}


- (void)viewDidUnload {
[super viewDidUnload];
}


- (void)dealloc {
[super dealloc];
}


@end

//RightViewController.h
#import <UIKit/UIKit.h>


@interface RightViewController : UIViewController {

}

@end

//RightViewController.m
#import "RightViewController.h"


@implementation RightViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
self.view = [[UIView alloc] initWithFrame:CGRectMake(320, 0, 704, 768)];
self.view.backgroundColor = [UIColor whiteColor];
}
return self;
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}


- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}


- (void)viewDidUnload {
[super viewDidUnload];
}


- (void)dealloc {
[super dealloc];
}


@end

実行結果は、このような感じになります。
Photobucket
特に重要なのが、UISplitViewControllerのインスタンス変数を作る際に、initをコールするということ。

実際にスプリット元になるviewcontrollerに関しては、その後の、viewControllersプロパティーで設定するということさえ押さえておけば、難しいことはありません。

こうして一度、まとめておけば、次も楽に作成することができるぞと。

ちなみに、参考にした箇所は、iPad Programming GuideのCreating a Split View Interfaceというところ。


2010/09/11

[Objective-C]Trimをかける

NSString型の文字列にTrimをかけることはできないのかなーっと思って調べたところ、下記の記事を発見

I'm looking for a method like "-(NSString*) trim" but can't find it.

via:Topic : How to trim whitespace from NSString?

それに対する答えがこれ

text = [text stringByTrimmingCharactersInSet:NSCharacterSet whitespaceAndNewlineCharacterSet]

The trimming can take into account any character set you want: the one shown here is the built-in set that includes blanks, tabs and newlines, but you can also find the whitespaceCharacterSet or build any variant of this.

via:Topic : How to trim whitespace from NSString?

というわけで、NSStringのstringByTrimmingCharactersInSetに引数を[NSCharacterSet whitespaceAndNewlineCharacterSet]で渡せばトリムをかけることができます。

実際に試したところ確かにできました。

すぐに実現することができてうれしかったぁ〜。

2010/09/10

[jQuery]clone()

jQuery日本語リファレンス:clone()を覗くと、要素の複製を行うみたいです。

<html>
<head>
<title>Jquery cloneテスト</title>
<script type="text/javascript"
src="./jquery-1.4.2.min.js"
></script>
</head>
<body>
<div id="test1" class="ugougo">
<span>
life goes on
</span>
</div>
<div id="test2" class="ugougo"></div>

<input type="button"
value="Run"
id="hoge"
>
<script
type="text/javascript"
>

$("#hoge").bind(
'click'
, function(){
$("#test2").html($("#test1").clone(true));

}
);

</script>
</body>
</html>

実行した結果、id名test2の子要素に、id名test1の要素のコピーが挿入されるわけですが、これは便利だなー。
cloneメソッドの引数にtrueを設定することで、イベントもコピーすることができるみたいです。