2009/03/29

レクサスとオリーブの木—グローバリゼーションの正体

この前、実家にあった本を整理した際に、泣く泣く手放した本


第1部 グローバル化システムを知る
(冷戦後、ストーリーなき世界レクサスとオリーブの木
そして、いっせいに壁が崩れ落ちた
情報免疫不全症候群
黄金の拘束服 ほか)
第2部 グローバル化システムに接続する
(DOS資本バージョン6.0グローバリューションあなたの国は大丈夫か?)

via:目次



第2部 グローバル化システムに接続する(戦争とマクドナルドの不思議な関係
持続可能なグローバル化
勝者がすべてを手に入れる)
第3部 グローバル化システムへの反動(グローバル化への反動
うねり、または反動に対する反動)
第4部 グローバル化システムとアメリカ(合理的な活況
革命はアメリカから
破滅に向かうシナリオ
前へ進む道)

via:目次


ニューヨーク・タイムズの寄稿したりアメリカのジャーナリストとして活躍しているトーマス・フリードマンが、当時の企業状況、政治・経済から2000年以降展開されるであろう世界情勢を描いた作品。

この本を手に取った当時、インターネットからニュースや情報を仕入れるという概念が全くなく(というかインターネットすらやっていなかったと思う。)、新聞か雑誌または本で仕入れることしか頭になかったので、随分、重宝した本でした。

今回、この本を手放したのは、本で描かれた当時の世界観が実現したにせよ、しないにせよ、内容が古くなってしまったことと、インターネットでリアルタイムのニュースが届いてしまうので、本としての役割を果たしたのではないかと思ったので。

また、著者の次の本も出版されていたので。



実は、これも古くて、その次もでちゃっている。




というわけで、次は、フラット化する世界が欲しいなーっと。

2009/03/28

FRIENDS見てました

実は日課としてFRIENDS見てます。


英語の勉強の一環(主にリスニング)として見てます。

毎週、Mさんと一緒に英会話をしていて、その際に、推薦してくれたので、見てみることに。

他のアメリカンドラマと比べて、放送時間が短いので集中力を保つことができます♪
(だいたい30分前後)
しかも、コメディ色が強いので、見ていて苦痛にならないです。
(ケラケラと笑ってしまいます。)

早く英語をしゃべることができるようになりたいなと♪

2009/03/27

世紀の対決ルパンVSコナン

すごい、すごすぎる企画!!

先ほど、ルパンVSコナンを見ました♪
(前にルパンとコナンが共演を書きました。)

ルパンのテーマンソングから始まり、ルパンのテーマンソングで終わるという素晴らしい♪

最初に想定していた内容とはちょっと違っていました。

ルパンの盗む物をコナンが追いかけるという構成なのかなーと思っていたら、ある事件を軸にお互い別方向から関係してくるという話でした。

あと、銭形警部とゴエモンの登場が若干遅かったような気がしました。
おそらく、コナンよりルパンの方が好きだからそう感じたのかも知れません。

ちなみに、コナン嫌いじゃないっす。
めっちゃ好きです。
げんに、漫画持っていましたし。

逆にコナン派の人は、いつもの子供達(すみません、名前を忘れてしまいました。。。)が登場しなかったので、物足りなかったかもしれません。

全体的には、素晴らしかったです♪

2009/03/26

[design]Web 2.0っぽいFaviconでメッセージを表示

最近、google gadgetのアップデートを行っていて、web 2.0系のiconがほしいなーと模索していたところ、
Web 2.0っぽいFaviconでメッセージを表示『Web 2.0 Write』 from IDEA*IDEA ~ 百式管理人のライフハックブログ ~でFaviconでメッセージを作ってくれるサイトを発見しました。

web 2.0 write

試しに「test」という文字を入れて右にあるボタンを押してみます。

Photobucket
すると、入力した内容がfaviconで表示されます。

Photobucket
しかも、これリロードかけると、同じメッセージでもfaviconが変わるので、サポートされているAPIを使って自分のサイトで毎回、毎回、違うfaviconでメッセージを表示していみるとおもしろいかなと。

2009/03/25

[coldfusion]これってタグなのか?カスタムタグ

cfにはカスタムタグがあるのですが、リファレンスを調べてみると、ファイルそのものをタグと認識する方法があるみたいです。

例えば、hoge.cfmのソースは↓のようになっていたとします。

hoge.cfmです。

純粋な文字列が書いてあるだけです。

一方、test.cfmが↓のようになっているとします。
<CF_hoge>

上の状況で、test.cfmを表示すると一体どうなるでしょうか?

なんと、「hoge.cfmです。」と表示されるんですねー。
「CF_ファイル名」でファイルをコールできちゃうみたいです。

なんか不思議な仕様だなーと思ってしまいます。
だって、他にもきちんとした使い方があるのかもしれませんが、これってcfincludeと等価のような気がするから。

もう少し深く考察する必要があるのかもしれません。

2009/03/24

1週間で合格できない 1週間で分かる初級シスアド集中ゼミ

当初、これさえやっておけば合格できるかと思った。。。



第1章 コンピュータのしくみ
第2章 表計算ソフト
第3章 データベース
第4章 ネットワーク
第5章 情報システムの構築と運用
第6章 業務知識

via:目次


第1章 E‐R図とDFD(E‐R図―実体と実体には切っても切れない関係がある
決定表―行動はYesかNoかで決まる ほか)
第2章 データベース(抽出と結合―表をバラバラにしたりくっつけたり
表名と主キー―表の中のデータは主キーで識別する ほか)
第3章 ネットワーク(10進数と2進数―コンピュータは0と1しか理解できないんだ
IPアドレス―あなたのパソコンにも住所があるの知っている? ほか)
第4章 表計算ソフト(行の複写と相対参照・絶対参照―複写元のセルとその下のセルを確認せよ
列の複写と相対参照・絶対参照―複写元セルとその右のセルを確認せよ ほか)
第5章 作業計画(PERT図―ちゃんと間に合うように日程を管理する
PERT図の例題―クリティカルパスはヒヤヒヤ経路 ほか)

via:目次

初めてIT系の資格を取得するに当たって、まずは初シスからと先輩社員からアドバイスを頂いた時に、参考書ないかなーと色々探した結果、本書を購入してみました。
(ちょーど去年か一昨年くらいのこと)

実際に絵や表、グラフなどがふんだんに入っていて、大変、わかりやすかったのですが、読了後、模擬試験として過去問をやってみると全然解けなくてマジで焦ってしまいました。
過去問の内容と結構、違っている部分があってホント参ったことを覚えております。

なので、本書を購入した場合は、過去問をやることをお勧めします。

今は、初級シスアドがなくなりITパスポートという資格になっちゃいましたが、似たような表紙の参考書をたまたま見つけたので、懐かしいなーと思いエントリーを書きました。


ちなみに、当時やった過去問はこれだったような記憶が。。。
(年度が若干違いますが。)

2009/03/23

[emacs][scheme][gauche]emacsからgaucheを実行する

念願のemacsからschemeそしてgaucheを実行することができました。

今日は、その方法をまとめてみようかなと。

基本的には、ここで紹介されているソースを「.emacs.el」に貼付けるだけでオッケー♪

Emacsの設定

gaucheのインタプリタの起動方法は、Emacs + Gauche で二兎を追う!にも記載されている通り、「C-c S」で稼働します。

gacuheの本では、「C-c s」と書かれていて、それ通りにタイプしても起動できませんでした。



gaucheの実行する上で重要となるコマンドは、
SICP再開に向けて emacs + gauche の環境を整えた
主婦でもできるEmacs上でScheme(Gauche)を動かす方法で紹介されていましたが、このコマンドは、schemeでも使えるのではないかなと思いました。

と四苦八苦しているうちに見事、実行にこぎつけることができました。

It's cool!!

2009/03/22

[emacs]Shift+矢印キーで領域選択

デフォルトのemacsの設定では、shift+矢印キーでは、範囲選択ができません。

そこでできるように設定するには、

.emacs.elに以下の式を記述しておく
(setq pc-select-selection-keys-only t)
(pc-selection-mode 1)

via:Shift+矢印キーで領域選択する

これ通りに打ち込んだらできちゃった♪

素晴らしい!!

2009/03/21

[emacs]全角空白、半角空白、タブ表示

emacsでは、全角空白、半角空白、タブの区別がつきません。

そこで、はっきりとなにかわなからないかなーと思い、検索してみると見つかりました。

~/.emacsに以下を追記します。
;====================================
;;全角スペースとかに色を付ける
;====================================
(defface my-face-b-1 '((t (:background "medium aquamarine"))) nil)
(defface my-face-b-1 '((t (:background "dark turquoise"))) nil)
(defface my-face-b-2 '((t (:background "cyan"))) nil)
(defface my-face-b-2 '((t (:background "SeaGreen"))) nil)
(defface my-face-u-1 '((t (:foreground "SteelBlue" :underline t))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)
(defadvice font-lock-mode (before my-font-lock-mode ())
(font-lock-add-keywords
major-mode
'(
(" " 0 my-face-b-1 append)
("\t" 0 my-face-b-2 append)
("[ ]+$" 0 my-face-u-1 append)
)))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
(add-hook 'find-file-hooks '(lambda ()
(if font-lock-mode
nil
(font-lock-mode t))))

via:ubulog: Emacsで全角空白、タブ、改行文字を表示させる

で上で紹介されていたソースをコピペして、再度、emacsを立ち上げたら反映されました。

徐々に業務で使っている秀丸の設定に近くなってきました。

[24]シーズン7のイントロダクション

そーいえば、おとといリリースされた、24の最新作に、シーズン7のイントロダクションが入っています。

う”ー、気になる。

2009/03/20

[24]見ました♪

さっそく見ました



いやー、これは先が気になる♪

シーズン6〜シーズン7にかけての橋渡しとなる今作は、なんと、いつもの1時間枠ではなく、1時間30分のスペシャル版、ジャック・バウワーが、叫ぶ、撃つ、走ると見ていて、ものすごく興奮。

早く、シーズン7のレンタル始まらないかなー。。。

2009/03/19

今日は、、、

最新の24のDVDリリースだ^-^

超気になる。


すごい、今、アマゾンで見たら、DVDランキング5位だった♪

[gauche]ターミナルから実行

とりあえずターミナルから実行できるかなーと思い、インストールした時と同じディレクトリ上で、

gosh
(define (hoge x) (* x x))
(hoge 4)

と入力すると実行することができました。

再度、繰り返しになりますが、重要なポイントとして、macのターミナル上で実行を行う場合、インストールを行った同じディレクトリ上で、上のコマンドを入力することが重要。

なんか忘れそうなので、メモ代わりにエントリーを書きました。

何を参考にしたのかなー??
はっきりとは言えませんが、おそらく本だと思います。
ただ、本には実行するディレクトリには触れていませんでした。
(というか、linuxやmacにとっては、それが普通なのかもしれませんが。。。)

[gauche]インストール完了

schemeをもっと肌で感じたいと思い、去年、これを買いました。


で、macを買ってから開始しようと思い、ほんの少しだけ時間が取れたので、インストールをしました。

最初、本書に書かれている付録Aに書かれているインストールガイドを読んでも、ちんぷんかんぷんだったので、ぐぐってみて、以下の2つを参考にしました。

第1回:Gaucheをはじめてみませんか?
Mac で Gauche で Scheme で

がしかし、正直な話、わかりませんでした。
記事がわかりにくかったのではなく、完全に、理解不足だったのです。

さらにもう少しぐぐってみると、グレートな記事を発見。
Macにおける、gaucheのインストール方法。

1.gaucheのインストールに必要なデータをダウンロード。
2.圧縮されているなら解凍
3.ターミナルを起動
4.パス移動
cd ~/downloads/Gauche-0.8.9
5. ./configure --enable-threads=pthreads
このオプションがMacに入れる場合必要らしい。
6. make
make check
7. sudo make install
8. gosh -V
以下のように出たらOK。
Gauche scheme interpreter, version 0.8.9 [utf-8,pthreads]

via:Macにおける、gaucheのインストール方法。

と書かれているように、まんま実行したらみごとにインストールできました。

どうして、インストールするまでに、こんなに時間がかかったのかなーと改めて考えてみると、これってターミナルから実行するんですね。

windowsユーザーがあるソフトのインストールを行う場合、基本的に、DOSからインストールを行うということはしないので、ターミナルからインストールをするという思考回路にまでたどりつくのに時間がかかりました。

ふむふむ、これだけでも非常に勉強になるなー。

ちなみに余談ですが、つい最近、インストールされた方も、いらっしゃるんですね。
なんか、親近感がわきます(もちろん勝手なですが。。)
MacにGaucheをインストールしたよ

2009/03/18

[oracle]型が同じテーブルを複製する

ひょっとしたら既に同じ記事を書いちゃっているかも。

最近、oracleのネタに関して、重複している記事を書いていような気がしてならないっす。

でも、やっぱり書かないより書いた方がいいかなーと思い、念のため。

こちらのサイトでは、複合創成として紹介されているのですが、あるテーブル(ここではtest_aテーブルとします)と同じ型のテーブルを作成したい場合、一般的にはこのようにSQLを発行します。

create table test_b as
select * from test_a
;

ただ、この場合、型と同時にデータまで登録されてしまいます。

純粋に型だけを複製したい場合、下のように記述すれば実現できることに気づきました。

create table test_b as
select * from test_a where 0 = 1
;

select文の結果だけを見ると確実に0件なので、何もselectされずに型だけコピーされるというスンポウです♪

今度、データなしの複製を作りたい場合、バシバシ使っていきたいと思います。

2009/03/17

[oracle]USER_SYS_PRIVS

ちょっと権限について調べることがあったので、今回は、USER_SYS_PRIVSについて書いていきたいと思います。

もともと、このVIEWは、権限の確認/付与/取り消しという記事を発見しました。

USER_SYS_PRIVSでぐぐってみると、さらに具体的な情報を発見。

USER_SYS_PRIVSは、ログインしているユーザーに付与されたシステム権限を示します。

via:ユーザーに付与されたシステム権限情報(SYS_PRIVS)

カラム名ですが、select * from USER_SYS_PRIVSで実行してみると、3種類ありました。
USERNAME
PRIVILEGE
ADMIN_OPTION

先ほどのサイトでカラムの意味を確認すると、

USERNAME:ログインしているユーザー名
PRIVILEGE:システム権限
ADMIN_OPTION:ADMIN OPTION付きで権限が付与されたことを示す

via:ユーザーに付与されたシステム権限情報(SYS_PRIVS)

と書かれていました。

admin option付きというのが若干気になりますが、これで、ログインしているユーザーの権限を把握することができるのかなと思うと、便利なんじゃーないかなーと思います。

[DOS]処理をいったん止める場合

は、PAUSEコマンドで。

2009/03/16

下流社会 新たな階層集団の出現

これほど、タイトルと内容のギャップがあった本を読んだのは初めてかもしれない。



最初、本屋さんでタイトルだけ見て、本書は、仕事も住む家もなく、生活にものすごく困窮している人たちに焦点をあてた内容なのかなーと思って買って読んだら、全然、違かった。
(タイトルだけ見たら、そう思いませんか??)

第1章 「中流化」から「下流化」へ
第2章 階層化による消費者の分裂
第3章 団塊ジュニアの「下流化」は進む!
第4章 年収300万円では結婚できない!?
第5章 自分らしさを求めるのは「下流」である?
第6章 「下流」の男性はひきこもり、女性は歌って踊る
第7章 「下流」の性格、食生活、教育観
第8章 階層による居住地の固定化が起きている?

via:目次

本書は、アンケート調査、インタビューをもとに、上流階級、中流階級、下流階級と3種類の特徴を、それぞれ年代別にわけて書いた内容です。
その各特徴に対しての著者の主張もさほどなく、すごく中立的な観点から書かれた内容だなーと思いました。

しかも、上流階級は、「中の上」「上」の人、中流階級は「中」、下流階級は「下」「中の下」と定義されており、そこに金銭的な定義もなく(だったような)、ものすごく抽象的だなーという印象が。

唯一これが著者の独自の主張かなーと思ったのは、「おわりに」の部分で、下流階級の固定化を防ぐ手段を述べているのですが、うまくいくかどうかわからないが確かに一理ある手段かなと思いました。

各階級の特徴を述べていて、特に興味深かったのは、「第8章 階層による居住地の固定化が起きている?」で、首都圏(主に東京都と神奈川ですが)地図を中心に歴史をさかのぼりつつ、どのようにして階級が分布していったのかという話があって、そこが一番おもしろかったです。

よく妻と一緒に遊びに行ったりすると、「ここら辺に住んでいる人たちは、金持ちだよ。」ってある特定の地域に行くと言ってくるのですが、「どうして、ここら辺に住んでいる人たちは金持ちなんだろう」と逆に疑問を感じてしまい、ずっと悶々とした気持ちが続いていたのですが、本書でその謎が解けました。

原因がわかったとき、ものすごくすっきりしました。

後、本書を通して、ずーと感じていたのが、アンケート調査そのものの有効性についてです。

つまり、「本当にそのアンケート調査やらインタビューやら基にして、ある階級の全体的な特徴の判断をしてしまっていいのだろうか?」ということです。

なぜ、そう思ったのかは、大学のゼミで、よく教授から「そのアンケート本当に役に立つの?」「調査結果を基に、判断していいの?」「どうなの?」とさんざん突っ込まれたことがあるからです。

アンケート自体の有効性もある程度検証しないと、信用できないし、判断も下せないというのが、おそらく教授の主張だったと認識しているのですが、確かに、安易に信じてしまうと、それが間違っていた場合、大変なことになるし、こうして他の人の本を読んでみると、教授の気持ちがよくわかるなと。

有効性まで検証を行うと莫大なコストがかかるので、そこまではできないと思うのですが、ちょっと注意して読む必要があるのかなーと思いました。
(多少、本書にも、有効性についての記述はあったのですが、ちょっとそこの主張が弱いかなと。)

著者も、その点について、「あとがき」で触れていました。

そもそも本書で紹介した私のアンケート調査は、サンプル数が少なく、統計学的有意性に乏しいことは認めざるを得ない。

via:あとがきより

ちなみに、冒頭で、下流階級かどうかチェックするのですが、見事、下流階級でした。

下流度チェックは、小飼さんのブログで紹介されています。
娑婆の流れは同じくしてしかももとの人にあらず

あと、続編らしきものがでているんですね。


2009/03/15

先輩社員の結婚式が

無事に終了しました。

人生初の受付をしまして、すっげー緊張しました。

お二方とも末永くお幸せにです。

Photobucket
昨日と同様に先輩社員からいただいた写真。

奥様は、キューイが好物みたいで、フンダンに入っていました。

すごくおいしかったです♪

2009/03/14

今日は、先輩社員の結婚式

今日は、川越プリンスホテルで、先輩社員の結婚式があります。

初めて受付を担当することになりました。

緊張するなー。。。

Photobucket
当日、一緒に参加した先輩社員からいただいた写真。

始まる前までは、雨がすごかったのですが、見事止んですごくいい天気になりました。

2009/03/13

[ColdFusion]cffunction内でcffunctionの定義ができない

関数系言語だと割りとできるのですが、関数内で関数を定義するというもの。

以下のようにファンクションを作り、実行するとエラーが起きました。

<cfoutput>
#test()#
</cfoutput>
<cffunction name="test">
<cfscript>
WriteOutput("Hello ColdFusion");
</cfscript>

<cffunction name="hoge">
<cfreturn true>
</cffunction>

</cffunction>

まー、CFでは、あまりこのようにして使うケースはないので、いいといえばいいのですが。

2009/03/12

[oracle]フラッシュバック問い合わせからinsert文発行

最近、はまっているのが、フラッシュバック問い合わせからinsert文を発行する方法

oracle10gから可能になったのですが、開発でテストを行っていると、次第にデータがぐにゃぐにゃになってしまうのがしばしば。

そこで、たいていの場合、エクスポート、インポートをしてデータをある時点に戻すのですが、フラッシュバック問い合わせからinsertを走らせてデータを元に戻す方法もあります。

例えば、昨日の時点のデータに戻したいなーと思った時に、ソースはこんな感じになる。

insert into hoge
select *
from hoge
as of timestamp to_timestamp('20090311','yyyymmddhimmss')
;
commit;

こうすることによって、わざわざ、dmpファイルをとらなくても、データを戻すことができるので便利だなーと。

ただ、注意点があって、オブジェクト自体が変更されてしまうと、データを元に戻すことができないので、その点は注意かなと。
(フラッシュバック問い合わせができない場合に、ついては、こちらを参照)

2009/03/10

[oracle]動的SQL

ちょっと前に動的SQLを使う機会があったので、ちょっと調べてみることに。

参考サイトとして
動的PL/SQL
8 動的SQLのコーディング
で、すごくおおまかに書くと、以下のような感じ


DECLAR
lc_hoge INTGER; --カーソル変数名を宣言
lv_SQL VARCHAR2(1000); --動的SQL文
lb_RET BINARY_INTEGER;
BEGIN
--カーソルをオープンします
lc_hoge := DBMS_SQL.OPEN_CURSOR;

--動的SQL文を記述します
lv_SQL := 'INSERT foo(create_date)values(sysdate)';

--動的SQL文を解析します
DBMS_SQL.PARSE(lc_hoge, v_stmt_str,DBMS_SQL.NATIVE);

--動的SQL文を実行します
lb_RET := DBMS_SQL.EXECUTE(lc_hoge);

--カーソルをクローズします
DBMS_SQL.CLOSE_CURSOR(lc_hoge);
END;

これで基本的にいけるはず、ただ、SQLインジェクションと動的バインディングは考慮されていないので、それは今後、検証していきたいと思います。

最初、動的SQLと出会ったのは、先輩社員が持っていた黒本のPL/SQL編でした。



読んだ時、ファンクション、プロシージャー、パッケージという流れで、その流れをきるような感じで、動的SQLの記述があったことは覚えていたのですが、文法を忘れてしまいました。
やっぱ日々使わないと忘れちゃうなー。。。

2009/03/09

生キャラメルを食べました

最近、ちょくちょく噂になっている生キャラメルを初めて食べました。


口に入れた瞬間溶け出す、新食感の生キャラメル花畑牧場 生キャラメルセット
テレビで結構、放送されていて、ぶっちゃけた話、そんなうまくないだろうーと思って、なめてました。

で、いざ、食べてみると、とんでもない、とんでもない。

めちゃくちゃうまいです。

他の固いキャラメルと違って、ほのかに甘く、やわらかいです。
グミよりもやわらかいと思います。

しかも、妻、曰く、東京には売っていないとか。

ついついやみつきになる味です。
紅茶ともあいます

2009/03/08

アンタッチャブルにはまってます

最近、ロンドンハーツを見てて、アンタッチャブルの山崎が、ちょくちょくでてくるのですが、とてもおもしろいです♪

なんであんなにおもしろいんだろー。

なんか、あのテキトーさが、好きです。

テキトーさは、ないですが、あれぐらいの勢いでものすごくおもしろい友達がいます。

今、何しているのかなー。



2009/03/07

小さな会社の給与計算と社会保険の事務がわかる本

だいぶ前のことですが、人事の本を読んでみました。


1 給与計算事務を始める前に
(給与の意味
—給与は働いて得るもの給与の体系的分類
—給与にはさまざまな種類がある
従業員の生活を守る給与支払いの原則
—給与支払いには5つのルールがある ほか)
2 年間タイムスケジュールによる給与計算・社会保険事務の進め方(4月
5月
6月 ほか)
3 社会保険の給付に関する届出(
社会保険の意義と種類—国民の生活を守る社会保険
厚生年金保険のしくみ—生活の安定を図る厚生年金保険
健康保険のしくみ—業務外の病気やけが等に給付を行う健康保険 ほか)

via:目次

人事の本ということで、最初、字だけしかない小説のような感じを、読む前に思い浮かべていたのですが、それとは裏腹に図や表がふんだんに取り入れられていて、大変、読みやすかったです。

ただ、読了したからと言って、すぐに人事や労務の仕事ができるとは思えませんでした。

というのも、年末調整のセクションを読んでいて、今と制度が変わっていて、本に書かれている内容では、調節できないんです。

後、おおまかな就業規則は掲載されているのですが、やはり企業毎に細かな点は違うので、注意が必要かなーと思いました。

最新の人事の情報ってどうやってキャッチアップすればいいのかなーと疑問が発生しました。

さらにこれは要望なのですが、途中、途中、源泉徴収票や勤務関連のフォーマットが登場するのですが、引用元を書いてほしかったです。

文末には、引用元が書かれているのですが、そこからでは、いったい、どこからどれを引用したのかすぐに把握できなくて、ネットで調べるか、問い合わせないと把握できないような状態かなと。

表や図の直下に小さな字で引用元がほしかったなーっと。

2009/03/06

[oracle]フラッシュバック問い合わせができない場合

昨日、フラッシュバック問い合わせの記事を書きましたが、タイトル通り、oracleではフラッシュバック問い合わせができない場合があります。

なんでかなーと思って、ひょっとしたら「テーブル定義が変更されたから?」なのではないかと予想しながら、調べたら案の定ビンゴ!!

3.フラッシュバック問合せの実行

フラッシュバック問合せでは、以下のようなケースでは対応不可となる。

①表の構造を変更したとき

たとえば、表に主キーを追加したりカラムを追加したりするとその時点以前へのフラッシュバック問合せはできなくなる。

via:3.フラッシュバック問合せの実行

現に問い合わせを行ったとき、以下のエラーが返ってきた。
ORA-01466: データを読み込めません - 表定義が変更されました

そこで、実際に対象となるテーブルが変更されたかどうかを確認してみます。

エラーの出る可能性のあるスキーマオブジェクトを見つける。
SQL> column object_name format a30
SQL> select object_name, created, last_ddl_time, timestamp
from user_objects
where last_ddl_time >= sysdate

via:ORA-01466: データを読み込めません - 表定義が変更されました

と単純にuser_objectsに問い合わせればテーブルの変更履歴がつかめることがわかりました。

変更した時系列に並べたい場合は、order by last_ddl_timeを使えばオッケーです。

ちなみに、余談ですが、user_objectsテーブルには、STATUSカラムもあって、オブジェクトがvalidかinvalidを確認することができます。

うーん、なんて便利なんだ!!

2009/03/05

[oracle]フラッシュバック問い合わせ

oracleでは、フラッシュバック問い合わせという、現在ではなく、過去のある一時点のデータを持っている状態でテーブルの問い合わせをすることができます。

例えば、昨日(2009年03月04日)時点のhogeテーブルについて考えてみます。

ID   フルーツ
-------------
001 りんご
002 いちご

昨日までは上のデータだったのですが、今日(2009年03月05日)、hogeテーブルに一行登録を行ったとします(insert)。

その時の状況は、下のようになります。

ID   フルーツ
-------------
001 りんご
002 いちご
003 バナナ

この時、昨日時点でのデータを取得したいなーと思った時、以下のSQL文を実行すれば取得できます。

select *
from hoge
as of timestamp TO_TIMESTAMP('20090304','yyyymmddhh24mi')
;

この時、重要なのは、as of timestampを使うというところ。

他にもSCNを使う方法もあるのですが、それはまだ使ったことがないので、使ったときにまた改めて書きたいと思います。

2009/03/04

妻とコーディングの両立

同棲していたときから、しばしば感じていたことなのですが、妻と自宅で行うコーディングをどうやって両立させたらいいのかなーと。

というのも、よく、家でパソコンをやっていると、妻から、「あれだけ、仕事場でパソコン触って、まだやるの?」といわれます。

プログラムを書く上で、仕事と家庭とかあまり区別なくやってしまっているので、あまり気にしてないのですが、妻は気になる模様。

家で書いているのは、iPhoneのアプリ、iGoogleのアプリ、仕事で書いているのは、イントラなので、ジャンルが違うと返したくなるのですが、理解できないよなーと思い、いつもシカトかましています。

しかし、そろそろ結婚3年目を迎えようとしているので、そんな風にもいかないのかなーと思っていた矢先に「ギークなプログラマーが妻と上手に付き合いながら勉強する方法」というナイスなネーミングの記事を発見。

具体的な打開策は書かれていなかったのですが、さらに引用されていた「ギークなプログラマーが妻と上手に付き合いながら勉強する方法」を読んでみるとありました、ありました。

そうならないためにも日頃のコミュニュケーションが大切です。

via:ギークなプログラマーが妻と上手に付き合いながら勉強する方法

というわけで、やはり妻とのコミュニケーションが大切なのかなと。

でも、いったい、どんなネタを話せばいいのだろうか?

当然、パソコン以外のネタになってくるわけだが。

そうなってくると株や映画の話になってくるのかなーと。

政治や経済の話になると、いつも最後には喧嘩モードになってくるので。

どーしても譲れなくなっちゃうですよねー。

まー、結果的にどんなネタであれ、妻とのコミュニケーションは大事なんだなと改めて反省。

2009/03/03

seeqpodガジェット終了

いくつか理由があって、今回、seeqpodガジェットを終了することになりました。

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

2009/03/01

赤い糸の最終回が中途半端な件

さっき赤い糸が最終回を迎えてしまいました。

なんかなー終わり方がどーしても納得いかない。

あそこから先は、読者自身が考えなくてはいけないのでしょうか?
恋の最後まで読者はのぞいてはいけないのでしょうか?
共有することはできないのでしょうか?

ご覧になったみなさんは、どう思ったでしょうか?

ちなみに、小説を読んでないのですが、エンディングは同じなのかなーと疑問が。。。



後、DSからゲームにしちゃったみたいですけど、小説と同じ内容にするのではなくて、マトリックスのように、小説の前や後を描いたゲームにした方がおもしろかったような気がするのですが?

アマゾンレビュー見ると、結構、不評です。

CM中にかなり放送されていたので、ちょっと気になったので、調べました。

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
行番号を出すだけでも一苦労だな。

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