2009/02/28

これかっこいい、浜崎あゆみのCD

これかっこいい

鳥山明が担当したCDジャケット

実は、これ、NETAFULLさんの浜崎あゆみのCDに鳥山明がイラスト描き下ろしというエントリーで知りました。

なんと、今度リリースされる浜崎 あゆみのCDの盤面を

鳥山明先生



がデザインしたとか!!

曲を聞いてないので、いいかどうかわかりませんが、浜崎あゆみが亀の胴着を着ています。

まじかっこいい♪

また、今回の曲は、映画ドラゴンボールエボリューションのテーマソングにも起用されているみたいです。

曲名は、Ruleです。


他にも、Gigazineさんの映画「ドラゴンボール」最新予告編が登場、浜崎あゆみの主題歌をBGMにしてついにシェンロンが登場にも詳しいことが書かれています。

2009/02/27

[JavaScript]ローカルでajaxは使えない(IE6)

言葉としてあまり適切ではないのかもしれませんが、ローカルでjavasriptを経由して、httpリクエストをかけた場合、エラーが発生するみたいです。

少なくともIE6の場合、「書き込みができません」というエラーが返ってきました。

他のブラウザも同じなのだろうか??

2009/02/26

[ColdFusion]ページング

下の本と同時並行でその下の本も、emacsのタイピング用として使っています。



で、上の本では、dreamweaverと連携したcoldfusionの開発を紹介しているのですがソースがほとんどかかれていなくて、サンプルプログラムの中に、ページングに関する、項目があったので、自作するとどうなるのかなーと思い、ちょっと考えてみました。

<cfparam name="form.flg" default="0">
<cfparam name="form.startrow" default="1">
<cfparam name="form.endrow" default="10">
<cfparam name="pageup" default="10">

<cfquery name="lq" datasource="test">
<--- クエリーを記述 --->
</cfquery>

<cfset lq_total = lq.recordcount>
<cfswitch expression="#form.flg#">
<!--- 先頭へ --->
<cfcase value="1">
<cfset form.startrow = "1">
<cfset form.endrow = "10">
</cfcase>
<!--- 前へ --->
<cfcase value="2">
<cfset form.startrow = form.startrow - pageup>
<cfset form.endrow = form.startrow + pageup - 1>
</cfcase>
<!--- 次へ --->
<cfcase value="3">
<cfset form.startrow = form.endrow + 1>
<cfset form.endrow = form.endrow + pageup>
</cfcase>
<!--- 最後へ --->
<cfcase value="4">
<cfif Right(lq_total,1) eq "0">
<cfset form.startrow = lq_total - pageup + 1>
<cfelse>
<cfset form.startrow = left(lq_total,Len(lq_total)-1)&"1">
</cfif>
<cfset form.endrow = lq_total>
</cfcase>
</cfswitch>

<cfif form.endrow gt lq_total>
<cfset form.endrow = lq_total>
</cfif>

<html>
<head>
<title>test</title>
</head>
<body>
<cfoutput>
#lq_total#件中:#form.startrow#件~#form.endrow#まで表示しています。

<table>
<cfloop query="lq" startrow="#form.startrow#"
endrow="#form.endrow#">
<--- クエリーを表示 --->
</cfloop>
<tr>
<td colspan="3">
<cfif form.startrow gt 1>
<a href="javascript:lf_go(1);">先頭へ</a>
<a href="javascript:lf_go(2);">前へ</a>
</cfif>
<cfif form.endrow lt lq_total>
<a href="javascript:lf_go(3);">次へ</a>
<a href="javascript:lf_go(4);">最後へ</a>
</cfif>
</td>
</tr>
</table>

<form name="frm" action="./test.cfm" method="post">
<input type="hidden" name="flg" value="">
<input type="hidden" name="startrow" value="#form.startrow#">
<input type="hidden" name="endrow" value="#form.endrow#">
</form>
<script type="text/javascript">
function lf_go(amode){
with(document.frm){
flg.value = amode;
submit();
}
}
</script>
</cfoutput>
</body>
</html>

「最後へ」は、問い合わせの一番最後のページに進み、「最初へ」は、問い合わせの一番最初のページに進むような仕様にしています。

こうやって、フォーマットしていっかい開発しておけば、後で、ある程度使い回しが効くので便利かなと

2009/02/25

[JavaScript]動的にscriptタグを生成する

ことってできるのかなーと思って、調べました。

参考にさせていただいたサイトはこちら
IT戦記:動的ローディング雑感
Script雑感:動的に JavaScriptを読み込む
dak ブログ:script タグで json

で、結果からいうとできるみたいです。

ちょっとサンプルを作ってみました。

test.js
------------------------------------------
document.write("hello javascript");

test.htmlの中身
------------------------------------------
var s = document.createElement("script");
s.src = "./test.js";
s.type = "text/javascript";
document.body.appendChild(s);

で、test.htmlを実行すると、確かに、hello javascriptがhtmlに表示されました。

動的にscriptタグを発行できるなんて、なんて便利な世の中なんだー。

See also:
floatingdays
JavaScript によって動的に script要素を追加する場合のブラウザごとの挙動の違い

2009/02/24

[oracle]カラムのコメントを参照する

前回の記事では、テーブルのコメントを参照する方法を書きましたが、今回は、コメントを参照する方法について書きたいと思います。

【 カラムのコメントを参照する 】
SELECT * FROM USER_COL_COMMENTS;

via:【SQL】 Oracle - コメントの取得

とまさに上のテーブルを使えばオッケーなのですが、実際にどんなカラムがあるのかなーと調べたところ、
TABLE_NAME
COLUMN_NAME
COMMENTS

があるようで、コメントを見るには、COMMENTSカラムが該当するのかなと。

2009/02/23

男用ブラジャー

さっき、島田紳介の行列のできる法律相談所で男がつけるブラジャーが紹介されていました。


テレビ、雑誌で話題のメンズブラ☆メンズーインナーその他部門では5週連続1位!Men,s premium ...

着け心地ってどうなんでしょうか?

同ページを読んでみると、ものすごくメディアに取り上げられているようです。
さっき初めて知りました。

どーやら、つけているとリラックス効果があるらしく、逆につけてないと落ち着かなくなってしまうようです。

ってことは、今後は、ヌーブラとかも展開するのかなー。

ちなみに、テレビにでていた社長は、黒が一番売れているといっていました。

ここまでくると、男性用のTバックとか、結構、きわどい、パンツも展開されそうな気がするなー。

2009/02/22

[ColdFusion]cfservletがない。。。

今、emacsのタイピング練習として下の本に書かれているソースを模写しています。

本書では、cfservletを使ったソースが紹介されているのですが、困ったことにcfservletはcoldfusion 7または8では使えないんだよねー。

当然、cfservletparamも使えません。

リファレンスには、「JSP PageContext API」または「Servlet RequestDispatcher API」を参照してくださいと書かれていたのですが、検索しても発見できなかったんですよねー。

代替案として、createobectを使ってjavaを使わないといけないのかなーと思っています。

2009/02/21

[ビール]ティマンマン・ランビック

久しぶりにフルーツビールを飲みました♪
Photobucket

Photobucket

Photobucket
裏のラベルを読んでみると、ティマンマン・ランビック ヴァウドヴルフテン(森のフルーツ)と書かれていて、すごくフルーティーな香りと味わいがあって、あまりビールを飲んでいる感覚がありません。

かといって、缶チューハイとはまた違う香りで、ビールの泡とものすごく相性があっていました。

実際の味は、チェリーのような味わいでした。

だいたい300〜400mlで値段は、300円後半から400円後半ぐらいだったような気が。

さっき買ってきたばかりなのに、もう忘れてしまっている。。。

2009/02/20

[oracle]テーブルのコメントを参照

テーブルのコメントを参照する必要があったので、やり方を調べてみることに。

【 テーブルコメントを参照する 】
SELECT * FROM USER_TAB_COMMENTS;

via:【SQL】 Oracle - コメントの取得

上のエントリーではselect区が「*」だったので、具体的にどんなカラムがあるのかなーとさらに突っ込んでみると

TABLE_NAME
TABLE_TYPE
COMMENTS

の3つがあるみたいです。

で、コメントは「COMMENTS」カラムで取得できます。

2009/02/19

[oracle]テーブル名の変更

ちょっとテーブル名だけを変更したかったので、調べてみました。

RENAME 変更前オブジェクト名 TO 変更後オブジェクト名
※テーブルの場合、あくまでもテーブル名が変更されるだけで、
主キーなどの制約や索引の名称は変更されません。

via:オブジェクト(テーブルなど)名の変更

というわけで、table名を変更したい場合は、

rename hoge to foo;

と書くことにより、テーブル名がhogeからfooに変わります。

2009/02/18

[mac][php]mac os x 10.5.6でPHPを使う

タイトル通り、mac上でPHPを使ってみたかったので調べてみました。

調べていくうちにびっくりしたのが、すでに、PHPとPerlはインストールされているとのこと。

というのも、もともと、mac os x 10.5がunixベースで構築されており、従って、apacheが購入時点ですでにインストールされているので、必然的についているみたいです。

でも、PHPの場合、何もしなくても使えるのではなく、いくつか設定をしないといけないみたいです。

Mac OS X(10.5.4)のローカル環境で PHP を動かす方法の記事を読むと、あるファイルのコメントをはずせば使えるみたいです。

Apache2 というフォルダの中にある httpd.conf というファイルを見つけ出す。
ここまでのパスは

/private/etc/apache2/httpd.conf

この

httpd.conf

を一旦デスクトップなどにコピーして、テキストエディタで開く。

「php」で検索すると、114行目あたりに

#LoadModule php5_module libexec/apache2/libphp5.so

があるので、先頭のコメントアウト「#」を削除して保存。

via:Mac OS X(10.5.4)のローカル環境で PHP を動かす方法

と書かれていたので、「Finder」から「etc」フォルダに移動させ、さらに、直下にある「apache2」フォルダに移動します。

で、この時に注意なのですが、後で、apache2フォルダにあるhttpd.confを変更するので、apache2フォルダに、ログインしているユーザーの書き込み権限を追加する必要があります。

確か、権限の追加は、「ファイル」の「情報を見る」で変更したような気が。。。

書き込み権限を追加した後、上の記事で書かれている該当箇所のコメントをはずしました。

そして、

システム環境設定の「共有」を開いて、「Web共有」のチェックをONにする。



ローカルの

ユーザ/ユーザ名/サイト/



http://localhost/~ユーザ名/info.php
でアクセスして、問題なく表示されれば、ビバ!PHP!

via:Mac OS X(10.5.4)のローカル環境で PHP を動かす方法

と書いてある通りに、「web共有」をonにし、ローカルの「ユーザ/ユーザ名/サイト/」にindex.phpを置いたら無事に実行できました。

これでよーやくmac上でPHP開発ができる。

ちなみに、同じことをwindowsで行う場合あ、もっと大変。

だって、まず、apacheのインストールから始まり、終わったらPHPのインストールと、結構手間がかかります。

ここら辺の違いから、macは開発者用に設計されている部分もあることが認識できる。

追記
他にも参考になった記事があったので、紹介します。
Mac OS X 10.5 Leopard で PHP を動作させるには
Mac OS X 10.5(Leopard)のWeb共有で.phpとか.cgiを有効にする方法

2009/02/17

[oracle]sysとsystemの違い

昨日、オラクルを触っていて、ユーザー(スキーマー)を新規に作成する際に、sysで作成したほうがいいのか?それともsystemで作っていいのか迷ってしまいました。

ちょっと調べてみるとこんなことが

sys データベースの管理ユーザー。データディクショナリの実表やビューを所有する
SYSTEM データベースの管理ユーザー。ツールや製品で使用される内部表などを所有する

via:Oracleユーザーを管理する

なんとなくわかりそうでわからないような。。。

実際、これを読んでみると、sysで新規ユーザーを作ったほうがいいような気がしていきました。

2009/02/16

[JavaScript]年齢計算

javascriptで年齢計算する必要がでてきたので、ちょっとこさえてみることに。

<script type="text/javascript">
function disp(){
$("age").value = lf_cal();

}

function lf_cal(){
var current_yyyy;
var current_mm;
var current_dd;
var age = "";

l_date = new Date();
current_yyyy = l_date.getFullYear();
current_yyyy = parseInt(current_yyyy,10);

current_mm = parseInt(l_date.getMonth(),10);
current_mm = current_mm + 1;

current_dd = l_date.getDate();

/* 現在月が入力された月よりも大きい場合 */
if(current_mm > $("mm").value){
return current_yyyy - $("yyyy").value;
/* 現在月が入力された月よりも小さい場合 */
}else if(current_mm < $("mm").value){
return current_yyyy - $("yyyy").value - 1;
/* 現在月が入力された月と同じ場合 */
}else{
/* 現在日が入力された日より以上の場合 */
if(current_dd >= $("dd").value){
return current_yyyy - $("yyyy").value;
/* 現在日が入力された日より小さい場合 */
}else{
return current_yyyy - $("yyyy").value - 1;
}
}
}

function $(aid){return document.getElementById(aid);}
</script>
生年月日:
<input type="text" id="yyyy" value="">年
<input type="text" id="mm" value="">月
<input type="text" id="dd" value="">月
<input type="button" value="Run" onclick="disp();">
<br>
年齢:<input type="text" id="age" value="">

2009/02/15

赤い糸を見ました。

さっきまで赤い糸をみてました。

最近、カミさんが、溝端淳平にはまっているので、その勢いで映画も見てしまったのだが、今の中学生や高校生ってこうなっているのかなーと思うと、ちょっと怖いなーと思う作品でした。

テレビでも映画でも、「自分の子供も中学生や高校生になったら、こういう感じになっちゃうのかなー」と思いながら、見ていると、いつの間にか年くっちゃったなーとちょっと悲しくもなりました。

今の中高生は共感できるのかなー??

話変わりますが、南沢奈央もてそうだなー。

高校の時もあーいうー人いたんだけど、すっげーもてていた記憶がある。

カミさんと同じ高校だったので、「うちの高校にも、あーいうー人いてさー、すっごくもててたよねー」と聞いたら、「そうだねー。。。」と納得していました。

なので、南沢奈央もモテるじゃーないかと結論。

とーいうーかここのサイトを見ると、1990年生まれって、平成うまれなんだー。

なんかジェネレーションギャップを感じてしまう。

後、赤い糸は、ケータイ小説からきているだけど、なんかいくつか種類があるみたいで、何が一番最初なのかわからん。

今年もバレンタインデーは2個だった。。。

例年とおり、今年もバレンタインは、2個だった。

それは、


カミさん





オカン



からです。(ともにカタカナ表記)

超甘党なので、もらったときは、すごくうれしかったです。

カミさんからもらったものは忘れてしまいましたが、オカンからは、グラマシーニューヨークのバレンタインデーバージョンチョコレートをもらいました。

ホットチョコレート用のチョコまで入っていてオサレでした。
そっこーで暖めた牛乳に溶かして飲みました。(実食)

甘いものと言えば、ロイズのポテトチップスチョコレートと、六花亭のマルセイバターサンドが大好きです。

前者は、ポテトチップスのしょっぱさとチョコの甘さがいい感じで調和していて、最初、食べた時、あまりのバランス加減に感動しました。確か、カミさんが知ってたんだよなー、このチョコレートチップス

後者は、レーズンサンドなのですが、高校の修学旅行(北海道)の時におみやげコーナーで試食したときに、これまたものすごく感動してしまい、白い恋人よりもおいしいかなと思いました。レーズンの味とクリームの味ががっつり組み合わさってマジまいうーです♪♪♪


【ロイズ】ポテトチップチョコレート[キャリーボックス2袋入]バレンタインに人気!0209ok va-re...


六花亭 マルセイバターサンド 10個入

ルパンとコナンが共演

gigazineのまさに夢の共演、「ルパン三世 vs 名探偵コナン」が放送決定を読んで、今年の3月に、コナンとルパンが共演するみたいです。

最初、この記事を読んだ時、すごい企画だなーと思いました。

ストーリーの内容や詳しい時間帯はまだわかってないのですが、すごく楽しみです。

やはり、ルパンが盗んだものをコナンが追いかけるというストーリーなのでしょうか?

捕まってほしくないなールパン。

コナンが登場しちゃうと、銭形警部のポジションってどうなっちゃうんだろう??
そこがすごく気になる。

しかし、最近、コナンも見ていないなー。

ルパンも日テレでたまーに放送されるテレビスペシャルをみるぐらい。

ルパンと言えば、「カリオストロの城」かな。

最後の銭形警部の台詞がかっこいいです。

ここで紹介するにはちょっともったいない気がするので、気になる方は、是非、本編をcheck it!!

2009/02/14

はなわらしき人を見た

昨日、中華料理屋でご飯を食べていたら、はなわらしき人が隣でご飯を食べていました。

最初、人違いだろーと思っていたのですが、妻も「あれは、はなわだー」と言っていたので、確かなのではないかと。

東京で飯を食ってると、隣の席に芸能人が座っていたりと、なんとなく身近に感じるんだなーと思う今日このごろ。

2009/02/13

[Objective-C][iPhone sdk]ヘッダーがついた表を出力

前回は、各セルに文字列が入った表の出力だったので、今日は、それにヘッダーをつけてみようかなと。

まず、新規プロジェクトを作成する時に、「Navigation-Based Application」を選択してファイルを作ります。

例によって、Interface Builderは使わないっす。

ファイル作成後、「RootViewController.h」と「RootViewController.m」が、「hogeAppDelegate.h」と「hogeAppDelegate.m」以外に作成されていると思います。

なので、最初は、RootViewController.hから入りたいと思います。

#import <UIKit/UIKit.h>

@interface RootViewController : UITableViewController {
NSArray *names;
}

@property (readwrite, retain) NSArray* names;
@end

前回の「set_table.h」と変わりません。

続きましては、RootViewController.mです。
#import "RootViewController.h"

@implementation RootViewController

@synthesize names;

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}

#pragma mark Table view methods

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


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
(NSInteger)section {
return 10;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

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

// Set up the cell...
cell.text = [names objectAtIndex:indexPath.row];
return cell;
}

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

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


@end

たぶん、前回と9割同じで、違う部分は、initWithStyleメソッドがないことです。

これは、最初、ファイル作成時になかったので、このままにしておきました。

ちなみに、今回も、セクションは1で、セルの数は、10個でいきます。

では、次に、「output_table_selectAppDelegate.h」です。
(ファイル名をoutput_table_selectとしました。)
#import <UIKit/UIKit.h>

@interface output_table_selectAppDelegate : NSObject {

UIWindow *window;
UINavigationController *navigationController;
}

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

@end

まったく編集していないです。
前回と違うのは、UINavigationControllerの型で宣言されている変数が一つ増えたことぐらいではと思います。

最後に、「output_table_selectAppDelegate.m」
#import "output_table_selectAppDelegate.h"
#import "RootViewController.h"


@implementation output_table_selectAppDelegate

@synthesize window;
@synthesize navigationController;


- (void)applicationDidFinishLaunching:(UIApplication *)application {

RootViewController* rootViewController =
[[RootViewController alloc] initWithStyle:UITableViewStylePlain];

rootViewController.names = [NSArray arrayWithObjects:
@"hoge1"
, @"hoge2"
, @"hoge3"
, @"hoge4"
, @"hoge5"
, @"hoge6"
, @"hoge7"
, @"hoge8"
, @"hoge9"
, @"hoge10"
, nil
];

rootViewController.title = @"いや〜ん";
navigationController = [[UINavigationController alloc]
initWithRootViewController:rootViewController];

[rootViewController release];

// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}


- (void)applicationWillTerminate:(UIApplication *)application {
// Save data if appropriate
}


- (void)dealloc {
[navigationController release];
[window release];
[super dealloc];
}

@end

このファイルは2段階で構成されていて、rootViewController.title = @"いや〜ん";までの部分では、各セルに値をセットし、titleメソッドでヘッダーのタイトルを設定しています。

前回と違って、セルに値をセットする時に、retainメソッドを使っていない理由ですが、書いてビルドをかけたらバグったので、はずしました。

以降は、navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];で、作った表をnavigationControllerに貼付け、さらに、貼付けられたnavigationControllerを[window addSubview:[navigationController view]];によってウィンドウに貼付けています。

今回は、2段階に構成されていた処理でした。

最後に、実行結果を貼付けます。

Photobucket

2009/02/12

電卓ガジェット終了

電卓ガジェットをこのたび、終了させることにしました。

理由は、googleが作った電卓の方が、GUIがかっこいいし、使いやすいから。。。

今まで、お使いいただき、ありがとうございました。

2009/02/11

[Objective-C][iPhone sdk]表を作成

今度は、iPhoneに表を出力してみたいと思います。
(ファイル名は、output_tableで、Interface Builderを使ってないです。)

ちなみに、純粋に表を出力するエントリーは、asialさんのInterface Builderを使わずに作るiPhoneアプリケーション作成入門というのがあるのですが、文字列が出力されていない点と、入門なのでおそらくそうだと思うのですが、オブジェクト指向ではなく、どちらかというと、プロシージャー指向で書かれていたので、今回は、文字列を出力する、および、オブジェクト指向っぽく書いてみたいと思います。

例によって、処理順にかいていこうかなと。

main.mはかわらずデフォルトのまま

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

次は、tableの設定を行うset_table.hをみてみます。
#import <UIKit/UIKit.h>


@interface set_table : UITableViewController {
NSArray *names;

}
@property(readwrite,retain) NSArray *names;
@end

表の各セルに入れるデータを格納する変数namesを宣言しています。

また、こやつは、プロパティです。

次、set_tabl.mの実装です。
#import "set_table.h"

@implementation set_table

@synthesize names;

- (id)initWithStyle:(UITableViewStyle)style {
// Override initWithStyle: if you create the controller programmatically and
// want to perform customization that is not appropriate for viewDidLoad.
if (self = [super initWithStyle:style]) {
}
return self;
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}

#pragma mark Table view methods

/* テーブルに表示するセクションの数 */
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}


// Customize the number of rows in the table view.
/* 1セクションに何行表示するか */
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
(NSInteger)section {
return 10;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

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

// Set up the cell...
/* セルに値を代入する */
cell.text = [names objectAtIndex:indexPath.row];

return cell;
}

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


@end

initWithStyleメソッドは、このオブジェクトを初期化するときに使われるメソッドで、UITableViewControllerのサブクラスを作成したときに、デフォルトでついてきて、ここでは変更を加えてないです。

同様に、didReceiveMemoryWarningメソッド、deallocメソッドもデフォルトの状態です。

numberOfSectionsInTableViewメソッドでは、セクションの数を決めるのですが、今回は、1に設定します。

tableView:numberOfRowsInSectionメソッドは、1セクション内に、いくつセルを格納するかを、今回は、10でいきます。

後、プロパティを同期させるのに、synthesizeを忘れずに。

で、これが一番、重要なところと思われる、tableView:cellForRowAtIndexPathメソッド。

これは、各セルをどのように設定するかを決めるメソッドだと思われ、おそらく、iPhone sdkが、numberOfSectionsInTableViewで決めたセクション数×tableView:numberOfRowsInSectionで決めた表の数だけコールされるものと思われる。

今回は、1×10で、10回呼び出されます。

基本的には、デフォルトのままなんだけど、追加した部分は、「cell.text = [names objectAtIndex:indexPath.row];」というところ。

これは何かというと、引数の数字(indexPath.row)と同じ番号に入っている配列の値を表のセルに格納している処理を行っています。

ちなみに、表のセル及び配列の最初の番号は、「0」です。
これは、JavaScriptと同じですね!!

また、その上に書かれているif文などの処理は、表のセルの初期化だと思われる。
というか、この部分は、ファイル作成時に自動的に書かれていて変更していないんですよ。

そして、「output_tableAppDelegate.h」を見ていきます。
#import <UIKit/UIKit.h>

@interface output_tableAppDelegate : NSObject {
UIWindow *window;
}

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

@end

ここも変更はないです。

最後に、「output_tableAppDelegate.m」です。
#import "output_tableAppDelegate.h"
#import "set_table.h"

@implementation output_tableAppDelegate

@synthesize window;


- (void)applicationDidFinishLaunching:(UIApplication *)application {
set_table *tableViewController =
[[set_table alloc] initWithStyle:UITableViewStylePlain];
tableViewController.names = [[NSArray arrayWithObjects:
@"hoge1"
, @"hoge2"
, @"hoge3"
, @"hoge4"
, @"hoge5"
, @"hoge6"
, @"hoge7"
, @"hoge8"
, @"hoge9"
, @"hoge10"
, nil
]retain];

[window addSubview:tableViewController.view];
// Override point for customization after application launch
[window makeKeyAndVisible];
}


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


@end

set_table *tableViewController = [[set_table alloc] initWithStyle:UITableViewStylePlain];
で、変数宣言及び、初期化を行っています。

UITableViewStylePlainは定数で、「ふっつーの表を出力してください」ということを言っています。

次に、tableViewController.names = [[NSArray arrayWithObjects:・・・,nil] retain];は、配列に値を入れる処理かつ、retainメソッドで保持することを指示しています。

ちょっと変わっているのが、arrayWithObjectsメソッドをコールして配列に値をセットするときに、最後に、nilをセットするところ。

これは、リファレンスに書かれていたので、そのまま使いました。

そして、[window addSubview:tableViewController.view];で、表を貼付けています。

今、思ったんだけど、makeKeyAndVisibleメソッドをコールする前に、tableViewControllerのメモリを解放した方がよかったのかもしれない。

実行結果はこちらになります。
Photobucket
今回も自由に転載オッケーです。

2009/02/10

[Objective-C][iPhone sdk]文字列を画面に出力

iPhone sdkサイトにあるサンプルコードをアレンジして、やっと自由自在に画面に文字列を出力することができたので、自作テンプレートを公開しようかなと。
(前提条件として、Interface Builderを使わずコーディングし、プロジェクト名を「output_text.xcodeproj」とします。)

ただ、単純に文字列を出力するだけなので、テンプレートもくそもないのですが、すごくうれしかったので♪

プログラムの流れの順に公開
iPhone sdkは、main.mが最初に実行されるので、まずは、main.mから。
(おそらくこれは、アプリを開発する言語がCとObjective-Cで構成されているので、main.mからスタートすると考えられる。)

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

実際のところ何も変わっていません。

デフォルトの状態です。

次は、文字列を格納、出力位置、文字の色を格納するインターフェースset_text.hを実装
#import <UIKit/UIKit.h>

//UIViewを継承する
@interface set_text : UIView {
NSString *text;
CGPoint location;
UIFont *font;
UIColor *color;
}

@property (readwrite, retain) NSString *text;
@property (readwrite) CGPoint location;
@property (readwrite, retain) UIFont *font;
@property (readwrite, retain) UIColor *color;

@end

このset_textは、UIViewクラスを継承して、{}の中にある4つの変数を宣言しています。

と同時に、プロパティとして{}の後ろで宣言しています。

ちなみに、「readwrite」は、読み書き可能、「retain」は、iPhone sdkプログラミングには、「オブジェクトにretainメッセージを送る」と書かれていて納得できないのですが、英語で「保持する」と書いてあったので、入れました。

この場合、変数の情報を保持してくれないと困るので。

また、CGPointに入れていない理由ですが、最初入れたら、エラーか警告がでたので、はずしました。

ここで、Javaと大きく違うのは、同じクラスを作成するにしても、まず、「●●●.h」でだいたいの骨組みを作って次に紹介する、「set_text.m」で肉付けをします。

ちなみに上のインターフェースは、Javaのインターフェースとは、違い、Objective-Cの場合は、プロトコルという名前になります。

で、次に、肉となる「set_text.m」

#import "set_text.h"


@implementation set_text
@synthesize text;
@synthesize location;
@synthesize font;
@synthesize color;

- (id)initWithFrame:(CGRect)frame {

if (self = [super initWithFrame:frame]) {
// Initialization code
}
return self;
}

- (void)drawRect:(CGRect)rect {

//フォントの色を設定
[self.color set];

//テキストを設定した書式、場所で表示
[text drawAtPoint:location withFont:font];
}

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

@end

「set_text.h」で宣言したプロパティを使う場合、「@synthesize」が必要なので、忘れずに追加。

initWithFrameメソッドは、UIViewクラスを初期化するのに必要なので、このままにしておく。
(というか、このメソッドは、ファイルを作った時に既にあるので、その設定のままにしておいただけです。)

で、drawRectメソッドは、viewの所定の位置に、設定されたフォントの色と大きさで書き込むメソッドです。

deallocはメモリを解放します。

iPhone sdkはJavaのようなガベージコレクションがないので、手動で解放しなければなりません。

ガベージコレクションについては、schemeにもでてくるので、後々考察したいポイントです。

次に、今回のプロジェクトの名前がoutput_textなので、実行部である「output_textAppDelegate.h」を見てみます。
#import <UIKit/UIKit.h>

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

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

@end

ここもファイルを作った時から変更を加えていません。

で、最後に、「output_textAppDelegate.m」です。
#import "output_textAppDelegate.h"
#import "set_text.h"

@implementation output_textAppDelegate

@synthesize window;


- (void)applicationDidFinishLaunching:(UIApplication *)application {

// Override point for customization after application launch
//文字列を作成するオブジェクトをコール
set_text *output_text = [[set_text alloc] initWithFrame:[window frame]];

//文字列をセット
output_text.text= @"ふぁいと〜一発、うふ";
//文字列を出力するポイントを設定
output_text.location = CGPointMake(10,200);

//フォントの大きさを設定
output_text.font = [UIFont systemFontOfSize:24];

output_text.color = [UIColor whiteColor];

//オブジェクト(window)をウィンドウに追加
[window addSubview:output_text];

//メモリの解放
[output_text release];

//ウィンドウの表示
[window makeKeyAndVisible];
}


- (void)dealloc {

[window release];
[super dealloc];
}


@end

上のapplicationDidFinishLaunchingは、アプリケーションを稼働する直前にコールされるメソッドで、初期設定を行うところです。

set_text型のオブジェクトを定義し、出力する文字列、位置、フォント、色を設定します。

文字列は、output_text型のtextメソッドで設定。
(いわゆる、setterです。)

位置は、CGPointMake関数で設定、第一引数は、x軸、第二引数は、y座標。

フォントは、UIFont型のsystemFontOfSizeメソッド、いわゆるクラスメソッドですね。

色もUIColor型のwhiteColorメソッドで、こちらもクラスメソッド。
でも、これだけだと、色の設定が完了しきれていなくて、最後に、setメソッドを呼ぶ必要があります。
(これは、set_text.mにあるself.color setで実現)

で、これでオールオッケーのように思いますが、実際これでビルドして実行しても何も表示されなくて、最後に、ウィンドウに貼付けるという作業が残っています。

それが、window型のaddSubviewメソッドです。

ビルド後の実行結果を貼付けておきます。

Photobucket

基本的には、再利用可能なので、是非、使ってみてください。

「バグがあるんですけどー」、「こっちの方がメモリーの効率がよくていいと思いますよー」など、意見がありましたら、ドシドシ、コメント、トラックバックなりでいただけると幸いです。

いつになく、こういった意見を求めている理由は、

1.組み込み系のアプリを作るのが初だから
2.オブジェクト指向の言語に真剣に取り組んだのが初だから
3.Objective-Cの仕様を完璧に把握してないから
4.iPhone sdkの仕様の理解度がまだまだ低いから

があります。

まだ、もうちょい今回のエントリーに関して書きたいことがあるのですが、さすがに長くなっていると思うので、いったん、閉じます。

2009/02/09

[Beer]ピルスナーウルケルを飲みました

今日は、チェコ・ビールで有名な、ピルスナーウルケルを飲みました

Photobucket

Photobucket

Photobucket

Photobucket

Photobucket

新婚旅行で、チェコに行って、初めて飲んだのですが、最高においしかったです♪
やはり現地で飲むのがBestです。

で、あの時の味をもう一度、ということで、いつも通り、東武で購入。

だいたい、400円あれば、ちょっとおつりがくる感じです。

330mlで、上のコップ、一杯半ぐらいの量で、味あいは、うーん、おいしい。
先週紹介した、ヒューガルデンよりも、日本のビールに近い味なんだけど、軽いです。

ヒューガルデンのように、750mlがないので、残念です。

実際に、チェコでは、上の泡がクリームのような感じでした。
一番、小さいサイズでもかなりの量がでた記憶があります。

旅行のことを思い浮かべながら、飲んでいると、もう一度、あの時に戻りたいなーと思う、今日このごろ。

2009/02/08

DS Liteのケースと保護シールを購入!!

できることなら、傷をつけたくないなーと思って、今日、アキバに行ったので、液晶にはるシールと、DS Liteを保護するケースを購入しました。

これで、思う存分遊べるぞと。



2009/02/07

[emacs]行番号の表示

とりあえず、早く仕事場で使っている秀丸ぐらいまでの環境にセットしたいと思って、実は、carbon emacsでは、行番号が表示されません。

Photobucket
そこで、どうやったら、実現できるのか調べてみると、こちらに解答が書かれていました。

結局、最後のlinumが一番シンプルで良かったのでこれを使うことにした。使い方はsetnu.elとほぼ同じ。
.emacs.elに

(require 'linum.el)


と記述しておき、表示するときは

M-x linum-mode

とするだけ。

via:行番号の表示

とあったので、.emacs.elに、linum.elのソースコードをコピペして、貼付けただけ。

ちなみに、「.emacs.el」ファイルは、ホームディレクリに作成しました。

で、コピペ完了後、「M-x linum-mode」を打ち込んで、作業を始めると確かに、行番号が表示されました。

Photobucket
行番号を出すだけでも一苦労だな。

というか、毎回、毎回、このコマンドが打つのがめんどいので、先々、うたなくても、済むようにしたいです。

[emacs].emacs.el

ひょっとしたら、上のファイルを上書きしてしまった可能性があります。。。

やっちまったな〜〜〜。



ただ、こちらのサイトを参考にすると、もともとなかったような気がしなくもないのだが。。。?

自分のホームディレクトリに .emacs.el という名前のファイルを作って下さい。なくても結構です。

via:設定ファイルの .emacs.el はどこにあるのでしょうか?


最初から付属していたのかなー。

あ”ー本当、どうしよー。

あんまり気にしない方がいいのかな。。。
結構、ショック

[mac]ファイル名の先頭に「.」がついてしまう場合

なんと、ファイル名の一番最初に、「.」がつく場合、どーやら、これは、macで予約されているファイルなので、作成しても、フォルダに表示されないみたいです。

う〜怖い。。。

こちらを参考にしてわかりました。

ただし、Mac OS Xでは、頭に「.」が付くファイルは初期設定で隠しファイルになっているので直接作成できない事と、ファインダーからは見えない事に注意してください。

via:設定ファイル.emacs.el

2009/02/06

[emacs]再インストール完了

無事、再インストール完了できたのですが、前回、作った設定ファイルなどが生きているみたいです。

まぁー気にしなくていいっか!!

[emacs]アンインストール

ちょっと設定で失敗してしまったので、アンインストールの方法を調べました。

Emacs アイコンをゴミ箱に捨てて下さい。気になるようでしたら、設定ファイル(~/Library/Preferences/org.gnu.Emacs.plist と ~/Library/Preferences/CarbonEmacsPackage.plist)を削除して下さい。

via:2.Emacs をアンインストールするには?

ということで、思いつく限りの、emacsのアイコンと、「org.gnu.Emacs.plist」を削除しました。

「CarbonEmacsPackage.plist」はフォルダになく、Spotlightで検索してもなかったので、とりあえすここまでいいのかなと!!

2009/02/05

[javascript]google gadgetのコメント欄にある評価を考えてみる

google gadgetで、コメントを記入するところがあるのですが、その時、評価をつけるのに動的に星マークがいったりきたりすることができます。

例)下図
Photobucket
画像だけみても、いまいち実感がわかないと思うので、実際に見せます。




星印にマウスを持っていくと、星が塗られてその横には、文字が表示されると思います。

そして、星マーク上でクリックするとそのポジションを覚えてくれて、星マークからマウスを放しても、その位置を保ってくれるという仕様です。

で、おそらくこれ、JavaScriptで実装されていると思い、試しに考えてみました。
<div style="cursor:default">
<span onmouseout="lf_setVote()" onmouseover="lf_setVote(1);"
onclick="lf_VoteVal(1)" id="vote_1">☆</span>
<span onmouseout="lf_setVote()" onmouseover="lf_setVote(2);"
onclick="lf_VoteVal(2)" id="vote_2">☆</span>
<span onmouseout="lf_setVote()" onmouseover="lf_setVote(3);"
onclick="lf_VoteVal(3)" id="vote_3">☆</span>
<span onmouseout="lf_setVote()" onmouseover="lf_setVote(4);"
onclick="lf_VoteVal(4)" id="vote_4">☆</span>
<span onmouseout="lf_setVote()" onmouseover="lf_setVote(5);"
onclick="lf_VoteVal(5)" id="vote_5">☆</span>
<span id="vote_msg"></span>
</div>
<input type="text" name="judge" value="0" id="judge">

<script type="text/javascript">
var vote_msg ={};
vote_msg = {
"0":""
, "1":"よくない"
, "2":"あまりよくない"
, "3":"普通"
, "4":"お勧め"
, "5":"超お勧め"
};
function lf_setVote(aVal){

/* 引数がない場合 */
if(isFinite(aVal) == false){
MaxVal = $("judge").value;
/* 引数が存在する場合 */
}else{
MaxVal = aVal;
}

/* 星マークに色を塗る */
for(var i=1; i<=MaxVal; i++){
$("vote_"+i).innerHTML = "★";
}

/* 星マークを白にする */
for(var k=parseInt(1)+parseInt(MaxVal); k<=5; k++){
$("vote_"+k).innerHTML = "☆";
}

/* メッセージの挿入を行う */
$("vote_msg").innerHTML = vote_msg[MaxVal];
}

function lf_VoteVal(aVal){
$("judge").value = aVal;
}


function $(aId){
return document.getElementById(aId);
}
</script>

動作確認は、firefoxとIE両方で動きました

2009/02/04

[JavaScript]グローバル変数とローカル変数

突然ですが、下のようなコードがあったとします。

function lf_tes1(){

hoge = "Hello JavaScript";
}

function lf_test2(){

lf_tes1();

alert(hoge);
}

lf_test2();

この場合、変数「hoge」にはなんと表示されるでしょうか?

実は、なんと、「undefined」ではなく、「Hello JavaScript」を返します。

つまりファンクション内で、varをつけずに変数宣言をしてしまった場合、他のファンクションからでも参照できるみたいです。

ちょっとびっくり。

2009/02/03

[javascript]checkboxの必須チェック(n個分)

やはりradioボタンの時と同様に同じやり方でいけるみたいです。

全然、ソースに変更はありません。

しいて言えば、ファンクション名が変わったぐらいかなと。

<input type="checkbox" name="hoge" value="1">test_01
<input type="checkbox" name="hoge" value="2">test_02
<input type="checkbox" name="hoge" value="3">test_03
<input type="button" value="run"
onclick="lf_check_checkbox('hoge');"
>
<script type="text/javascript">
function lf_check_checkbox(aObjName){
var ret = (function(){
var temp_obj = document.getElementsByName(aObjName);
var input_length = temp_obj.length;
/* checkboxボタンの数だけループ */
for(var i=0; i<input_length; i++){
/* 一回でもついている場合は、その場でtrueを返す */
if(temp_obj[i].checked){ return true; }
}
/* チェックがついていない場合 */
return false;}()
);

/* チェックがついていない場合 */
if(!ret){
alert("チェックが入っていません");
/* 以下、チェックがついていない場合の処理を追加 */
/* ・・・・ */
return false;
/* チェックがついている場合 */
}else{
alert("チェックが入っています。");
/* 以下、チェックがついている場合の処理を追加 */
/* ・・・・ */
return true;
}
}
</script>

上のソースは、複数個ですが、1個の場合でも動きます。

2009/02/01

[iPod touch]公衆無線Lanを使うのは危険??

GIZMODEのiPod touchで公衆無線LAN経由でアプリを使うのは危険?という記事で、使うサイトによっては、SSLを施してないものもあるので、使う時は、十分に注意することという、ことが書いてありました。

これによると、公衆無線LANを使う時には、暗号化に気を使ってないアプリを使うとパスワードなどが盗まれる可能性があるよ、とのこと。

via:iPod touchで公衆無線LAN経由でアプリを使うのは危険?

こういった記事を読んでしまうと、ちょっと公衆無線LANを使うのを躊躇しちゃいそうです。

だけどこれって一般的に、SSLを施していないサイトにアクセスするケータイも同じような気がするのですが。。。

ケータイも、パスワードも盗まれる可能性があるから、別にiPod touchでもへーきだろと開きなおってしまう今日このごろ。