2011年8月6日土曜日

PITR

どうも、69です。

ご無沙汰しております。
69は今日も生きていますよ!


掲題のとおりポイントインタイムリカバリについてです。
もう完全にPostgreSQLです。。。

まぁ、まずLAPP環境を整え、PHPからプログラミングを学んで
Javaに行き、Androidという流れを。。。ということで、お許しください。
いつになることか…


PostgreSQLでは3通りのバックアップがあります。
そのうちの1つがPITRです。

何がいいかって言うと

データベースを止めずにバックアップがとれる!
比較的短時間でバックアップがとれる!
リカバリがベースバックアップから障害発生までの間の任意の時間に戻せる!
もちろん最新の状態に戻すことも可能!

こんな感じかな?
でも、もちろん欠点はあります。

多少、手順が煩雑。。
メジャーバージョンの移行には適さない。。
WALログ・アーカイブログのサイズに気をつける。。

ぐらいかな?

で、今日言いたいことは


PITRなら人生をやり直せるって事!!!!


ただし、ベースバックアップの中に含まれてしまったらダメ!
ベースバックアップから最新の間だけね!

細かい手順とか用語とか、残りの2つのバックアップについては、また今度。



とりあえず、今日言いたいことは


PITRなら人生をやり直せるって事!!!!


僕もあの時に戻りたい。。。

おしまい。

2011年7月25日月曜日

プロ

どうも、69です。



今日?昨日?ライブを観に行って、帰りにタクシーを使いました。
フツーに乗ってフツーに走りだしました。


目的地までの半分くらい走ったところで、運転手の方は異変に気付きました。
僕が乗っていたタクシーを止めようと手を挙げている人がちらほら。。。

運転手の方はメーターを確認しました。
料金が表示されていませんでした。
気付いた時点でメーターを開始しました。
運転手の方は
「料金が半分くらいになっちゃうね。。。」
「料金表示のところに、あと何時間働くかが書いてあってわかりにくいんだよね。。。」
「ここに(ハンドルの横)に空車って書いてあるんだけど、読めないんだよね。。。」
と言いました。そして最後に

「ちょっと色付けてよ!」

と。まぁ、冗談だと思っていました。


そして、目的地に到着し、料金を払う時が来ました。
1880円(確か、そうだったはず)を要求されました。
1000円札2枚で2000円を払い、お釣りをもらおうと待っていました。

返ってきたのは

「じゃ、2000円で貰っちゃっていいかな?」

というお言葉でした。


ミスったのは運ちゃんなのに、そんなことほんとに言っちゃうんだ!
って思ってね、もうね、言葉にならないです。。。


自分も気をつけないと、そうなっちゃうな!っと勉強になりました。
ミスって、しょうがないじゃん、それでいいじゃん。って。

おしまい。

2011年7月23日土曜日

制約

どうも、69です。

今日はリレーショナル・データベースの知識についてです。


制約とはデータ内容の矛盾を防ぐ機能です。

SQLのようなデータベース言語は
アプリケーションとは無関係に、制約を格納できなくてはならない。
んだそうです。「コッドの12の法則」で提唱されているんですって。。

コッドの12の法則はhttp://androidid-69.blogspot.com/2011/07/12.htmlでチラッと触れましたが
ググるったほうが、良さそう。。。

で、制約は属性(列)に定義します。以下に代表的な制約を挙げます。

1.非ナル制約(NOT NULL)
→指定した属性(列)に値が入っていない状態じゃないことを保証
NULLでないことを保証

2.主キー制約(PRAIMARY KEY)
→テーブルの中でレコードを一意に識別する値
NULL値であってはいけない⇒非ナル制約を満たしている必要あり
テーブルの中で1つだけ指定できる
複数の属性(列)でPRAIMARY KEYを構成できる

テーブルの中にあるレコードを一意に識別する値が複数個の属性(列)ある場合
それらを候補キー(主キーの候補)と言います。
で、候補キーから主キーを選択し、それ以外の選択されなかったものを代替キート言います。

レコードを一意に識別できる候補キーがない場合
連番などの自然発生的でないキーを作成し、それを主キーとします。
これを人工キーと言います。

3.一意性制約(UNIQUE)
→テーブルの中の列、または列の組み合わせが一意であるを保証
列の中に重複する値が発生しないことを保証
主キー(PRAIMARY KEY)との違いは、
・NULL値を許可すること
・1つのテーブルに複数指定できる

4.外部キー(FOREIGN KEY)制約
→テーブル同士の関連付け
参照整合性制約を付加できる
→テーブルBのFOREIGN KEYに指定された属性(列)の値は
テーブルAの一意性のある属性(列)の値に存在するものでなければならないってこと


テーブルAの一意性のある属性(列)をテーブルBで参照するときに
テーブルB側の属性(列)はFOREIGN KEYとなります。

テーブルA側の属性は主キーであることが多いらしいですが、必須条件ではないそうです。
一意性があればいいんだそうです。


う~ん。たぶんですが…

あるテーブルで一意性のある属性(列)を
そのほかのテーブルで使用したいときに使用する

のかな??

5.チェック制約(CHECK)
→属性(列)の値が、指定した条件を満たすものしか入らないことを保証


わからないことがありましたら、ググってください。
そして、コメントに書き込んでください!(笑)
僕がブログを作るんじゃない。みんなで、いいブログにしていきましょう!!(笑)

おしまし。

2011年7月22日金曜日

Oracle-2

どうも、69です。

昨日、前回OracleをLinux環境に入れよう!!と意気込んでいました。

が、グループ作ってユーザまで作りました。
で、肝心のOracleを解凍していたら


途中で/homeがいっぱいになってしまいました。。。

しかも、1/2の途中で。。。なので2/2も当然解凍できない。。。


で、解凍先を変えてみようとしたのですが
たぶん所有者・グループが違うからだと思うのですが、失敗しました。。。

というわけで、パーティションから区切り直しかな~なんて思う今日この頃。


あ、あとCentOSではOracleって入らないらしいんです。
でも、世の中いるんですよね~、すごい人が。
で、その方のを参考にしている訳で、あんまり公開できない…



おしまい。

2011年7月20日水曜日

Oracle

どうも、69です。

今Oracle11gR2をLinux(CentOS)に入れようとしてます。
てか、勉強中です。

DBマスターになります。


PostgreSQLとOracleとMySQLを押さえてSQL文をガリガリと。


そしたら、転職の時に「あなたは何できますか?」って言われても大丈夫!
まだ、転職は考えてないですがね。。。

あとは、将来のためにシェルスクリプトを。。。
って、このブログのタイトルと違う道に進み始めてる…

まぁ、適当な人間のブログだし!
明日には↑も撤回されてるかもだし!

おしまい。

2011年7月18日月曜日

ファイアーウォール

どうも、69です。

ずっとファイヤーウォールだと思ってたんですが
ファイ「ア」ーウォールなんですね。。

前回、アクセス制限について取り上げたんですが
その中にファイアーウォールもありまして。。

今まであんまりわかっていないかったので少し調べてみました。
ほんと少しですけど。


Linuxでのファイアーウォールはiptablesって言うツールを使います。
これはカーネル2.4からだそうで、それ以前のカーネルではipchainsって言われていたそうな。

iptablesにはテーブル・チェイン(チェーン)・ルールってものが存在します。


簡単に言うと(違ったら、ごめんなさい)


テーブル:パケットを制御する目的。三つのテーブルがある。
filter

 →パケットの許可や廃棄を設定。パケットフィルタリング。
nat
 →パケットの宛先や送信元を変更。NAT。
mangel
 →パケットの内容を変更する。TTLの変更とか。




チェイン:ルールが適用される場所。五つのチェインがある。
PREROUTING
→自分宛のパケットか、他宛のパケットかの判断をする。
適用されるテーブル:nat,mangle
INPUT
→自分宛のパケットの場合にPREROUTINGから受け取り、アプリケーション等に渡す。
適用されるテーブル:mangle,filter
FORWARD
→他宛のパケットの場合にPREROUTINGから受け取り、POSTROUTINGに渡す。
適用されるテーブル:filter,mangle
OUTPUT
→他宛のパケットをアプリケーションから受け取り、POSTROUTINGに渡す。
適用されるテーブル:filter,nat,mangle
POSTROUTING
→パケットを外部に転送する。
適用されるテーブル:nat,mangle


ルール:パケットの判断基準と処理。ACCEPT,DROPとか。



コマンドは紹介しません!調べてください。
イメージがつかめちゃえば、コマンドはググっちゃえばいいので。。
あ、コマンドでやったら、セーブしないといけないらしいです。これは注意!



パケットフィルタリング(ファイアーウォール)したかったら
INPUT,OUTPUT,FORWARDのチェインにルールを追加してあげたらいいんです!そーなんです!
NAT変換したかったら
PREROUTING,POSTROUTING,OUTPUTのチェインにルールを追加したらいいんです。


全てじゃなくていいと思いますが。。。
Windowsのファイアーウォールとか見たら、送信は基本許可で受信いろいろ設定されてたし。。。
そういうことだよね??わからん。。

てか、いつのからか知りませんが、RHEL5.4ではGUIで設定できちゃうし。。。
system-config-securityだっけ?そんな感じだったような。

おしまい。

アクセス制御

どうも、69です。

前回pg_hba.confについて書きました。

それで、ふと思い出しちゃいました。

アクセス制御について。


TCPラッパー
→これはhosts.allowとhosts.denyを順に見て
allowに当てはまれば許可。
当てはまらなかったらdenyを見て、当てはまれば拒否。
当てはまらなかったら許可。
と、言うことはdenyに書かない限り基本的に許可。

アクセスリスト(Ciscoルータ)
→これはリストを一行目から順に見て
当てはまった処理に従います。
どの行にも当てはまらなかった場合は拒否します。
「暗黙のdeny」って言うらしいです。
アクセスリストを適用したら、許可の記述がない限り拒否。

apacheのアクセス制限
→httpd.conf内で設定します。
order allow,denyもしくはorder deny,allowと設定します。
order allow,denyでは基本的に拒否で、許可するアクセスをAllow from 以降に記述します。

  order deny,allowでは基本的に許可で、拒否するアクセスをDeny from 以降に記述します。

FireWall(パケットフィルタリング)
 →これはポリシーを決めるのが重要。
  基本は全て許可し、拒否するアクセスを決めていく。
  基本は全て拒否し、許可するアクセスを決めていく。
  下の方が、セキュリティ的にはいいです。だって何も指定しなかったら、接続できないわけで。。。


適当な順番で書いちゃいましたが、クライアント側からサーバにアクセスした場合
制限を通過する順序は

アクセスリスト(Ciscoルータ)
FireWall(パケットフィルタリング)
TCPラッパー
apacheのアクセス制限
pg_hba.confによる制限


だと思います。他にもアクセス制限はあるかと思いますが
今のところ、僕が知っているものだけの概要です。

おしまい。

pg_hba.conf

どうも、69です。

早速調べました。
速攻でてきました。

pg_hba.confについてです。

まず、hbaはhost-based authenticationの略でした。

次、
ホストから接続が来て、pg_hba.confの条件の中で最初に一致したものが適用されます。
以降の条件は無視らしいです。

で、一致するものがなかった場合、アクセスが拒否されます。


なので、書き順も重要です。

http://www.postgresql.jp/document/9.0/html/auth-pg-hba-conf.html

に書いてあります。よかったら、いや、必ず見てください。
9.0.4のマニュアルですが、大きな違いはないかと。。

おしまい。

postgresql.conf

どうも、69です。

昨日はじめて皇居行きました。


東京にもあったんだ、あんな広い所。
で、せっかくなので、ちょっと走ってみたり。


で、今回は最近お気に入りのpostgresql.confとpg_hba.confから
接続に関するパラメータを。


PostgreSQLはクラサバアプリケーションなので
PostgreSQLのクライアントとサーバは別々のホスト上で動作できます。

ですが、デフォルト設定ではPostgreSQLサーバは
localhost・自分自身からの接続しか受け付けません。

なので、他のホストからの接続を可能にする設定が必要になります。
で、それは前回ご紹介した

listen_addresses = '*'

です。これにより、全てのホストからの接続を可能にします。

で、今日ご紹介するのは、こちら!

#port = 5432

です。これはデフォルトの状態です。
つまり、デフォルトではポート5432番を使用します。
これを変更したい場合は

#port = 5432



port = 5433

とかってします。この例では5433ポートに変更しました。
unkwonポート?ウェルノンポートではない?ので他とかぶらないように。。。
で、postgresql.confをいじったらリロード・もしくはPostgreSQLを再起動。

繰り返し繰り返し、言いますよ。国民は三日で忘れ…失礼しました。


ただ、ポートを変更したら、クライアントからの接続はポートを指定しなきゃだめですよ!
これは注意ですね。
クライアントもデフォルト5432で接続しようとするので。

psql -p 5433 <データベース名>

てな感じで。

そしたら、次はpg_hba.confを設定します。
pgは多分PostgreSQLのことで
hbaってのはhost(s) basic authenticationだろうかと。
ということで、基本認証を設定してます。

書式は

<種類> <データベース> <ユーザ> <IPアドレス> <認証方式>

です。

種類:対象の接続を設定します。以下の値を設定します。
local→UNIXドメインソケット経由
host →TCP/IP経由
hostssl→SSL経由
hostnossl→SSLを使用しない接続

データベース:対象のデータベースを設定します。
allを設定すると全てのデータベースに適用されます。
「,」カンマ区切りで複数のデータベースを指定することも可能です。

ユーザ:対象のユーザを設定します。
allを設定するを全てのユーザが対象になります。
「+」が頭につくとグループ名を指します。

「,」カンマ区切りで複数のユーザを指定することも可能です。
多分、このユーザはPostgreSQLのユーザだろうかと。。まだ確証は得てないです。すんまそ。

IPアドレス:対象のIPアドレスを設定します。
0.0.0.0/0なら全てのIPアドレスだし、192.168.1.1/32ならそのIPアドレスだけです。
もちろん、ネットワークでの指定もできます。10.1.0.0/16とか
CIDER?クラスレス?での指定ができます。

認証方式:今までに挙げた対象の認証方式を設定します。他にもありますが、値は以下です。
trust→無条件に許可
reject→無条件に拒否
password→BASIC認証。パスワードが平文で流れる?
md5→md5を利用した認証方式


例をあげると

全てのホストが全てのユーザで全てのデータベースに無条件に接続可能。。。
一番簡単なやつ。

host all all 0.0.0.0/0 trust

10.1.1.0/24からの接続は全て拒否し
10.1.2.0/24からはデータベースDB69にのみパスワードなしでアクセスできる。

host all all 10.1.1.0/24 reject
host DB69 all 10.1.2.0/24 trust


あれ?そういえば、明示されないのってどうなるんだろ?
原則拒否?それとも疑わしきは罰せず(許可)?
調べてみよ。

おしまい。

2011年7月16日土曜日

PostgreSQL-5

どうも、69です。

最近postgresql.confを読むのにハマってます。


マニュアルで言ったら、17か18章あたりに相当してて

パラメータとか設定してます。
一回マニュアルを読んでからだと
英語なんですが、わかりやすいです!


てか、まんまじゃん!って言いたくなります。

あ、ちなみに今読んでるのは8.4で。
マイナーバージョンは4だったり5だったり8だったりします。
いずれは9.0とか9.1も。。。



ちょっとだけ、パラメータを。
listen_addresses = ''

これは、接続を受け付けるアドレスを指定していて
デフォルトでは'localhost'となっています。


あ、postgresql.confってデフォルトではほとんどコメントアウトしてあります。
それは、デフォルトの設定を明示してくれているんですって。
なので、変更する場合はコメントをはずして、新しい値を入れる。

#listen_addresses = 'localhost'



listen_addresses = '*'

みたいな。これは全てのホストから接続を受け付けるようになります。

confファイルをいじったら、リロードしてあげなきゃ、なんですが、
値によってはPostgreSQLを再起動しなきゃいけないとかあります。


基本的にconfファイルをいじったら
そのサービス?プロセス?デーモン?は再起動!
って覚えておけばいいのかな。


おしまい。

2011年7月15日金曜日

PostgreSQL-4

どうも、69です。


PostgreSQLってログはデフォルトでは出ないんですってね。。
あ、でもソースによるとかの情報も。。。


WALログは勝手に出るみたいですが。。


接続もデフォルトではlocalhostしかできないし。。


でも、最近confファイルを見るのが楽しくなってきたり。。。

いずれ、パラメータも書いていこうかな。

おしまい。

2011年7月12日火曜日

インデックス

どうも、69です。

今日こそは、本分のAndroidやろうかと思いましたが
眠いので…

今日は許してください。
自分には甘いので。。。


さらっと行きます。
インデックスです。

インデックスとは大量のデータから目的のデータを素早く見つけるための仕組みです。
書籍の目次や索引みたいなものです。

このたとえはわかりやすかった!!


インデックスを使わない検索では
目的のタプルが見つかるまでテーブルのレコード全体を順次読み込んでいきます。
上のほうにあれば、すぐ見つかるけど…ねぇ。

インデックスをつかうと
インデックステーブル(あらかじめ作成しておく)を探して、目的のデータの位置情報を取得します。
ただ、件数が増えちゃうと、インデックステーブルから探し出すだけで時間食っちゃう。。。

なので、効率を上げるために「Bツリー」というデータ構造でインデックスを作成します。

Bツリーはバランスツリーといいまして、
ツリー構造で、各ノードに一定の個数のキーとポインタ(位置情報)のペアを格納します。

一番上のノードをルートノード。
一番下のノードをリーフノード。
その間のノードをブランチノード。
と言います。層が増えるとブランチノードが増えてきます。

これを見て、思ったのが、二分探索ってやつ。
真ん中の値より小さいから小さい側だけを探せばいいや。みたいな。
それを繰り返して、キーを見つけ出す。のかな?

でも、これだと順番にアクセスしようとしたら
ノードを行ったり来たりしないといけなくなってまう。。。

そこで「B+ツリー」です!

B+ツリーではキーとポインタは全てリーフノードに格納されます。
その格納されたリーフノードをシーケンスセットと言います。
リーフノードはポインタでつながれているので、
Bツリーの弱点を解決できます!

よくわかりませんが、B+ツリーってのがいいらしい!

おしまい。

2011年7月10日日曜日

山荘すきま

どうも、69です。

今回はさんそうすきーま。
そう、サンソウスキーマについてです。

スキーマ(schema)とは

図式、図表、図解
概要、大要

て意味らしいです。
で、そこからいろいろあり、データベースを構築する時の設計図をスキーマと言うように。。

で、それが三層、三つのレベルがあるから、三層スキーマ。
その三層って言うのは

1.外部スキーマ
→特定のアプリケーションプログラム、データベース利用者が関心を持つデータを定義
リレーショナル・データベースのビューが実装にあたります。
2.概念スキーマ
→特定の利用目的に依存しない、全体像を概念的に定義
リレーショナル・データベースのテーブルが実装にあたります。
3.内部スキーマ
→概念スキーマを物理的な記憶構造に落とすために、データの物理的配置・記録方式を定義
ググったら、インデックスやデータファイル配置などが実装にあたるそうです。

です。う~ん。さっぱり!
各スキーマ間の変換処理を写像(マッピング)というそうで。


↑の並びで、上のほうが、人側に近くて、下のほうが、遠いって事しか…
で、三層スキーマにより、データの独立性が確保されますって。。。どういうこと?



あ、あれか!!
TCP/IP?だかOSI基本参照モデル?だかの
他の層に依存しないので他の層を考えなくて良くて便利、みたいな。



ググったら、情報処理試験とかのブログが出てくるので、
続きはWEBで!

おしまい。

表!表!表!

テーブル1
名前  年齢  身長
69    24   180
70    70   170
71    71   171


テーブル2
名前  誕生日  体重
68    6/8    68
69    7/10   60
70    7/11   70

テーブル3
名前  年齢  身長

71    71   171
72    72   172

73    73   173

テーブル4
身長
180

って、あるとします。
テーブル適当です。。。69さんの値以外。

・和集合
→テーブル1とテーブル2は和集合演算はできません。
だって、和両立じゃないから。
テーブル1とテーブル3が演算できます。で、結果は

名前  年齢  身長

69    24   180
70    70   170
71    71   171
72    72   172
73    73   173

てな感じです。71さんの重複は一つにまとめられちゃいます。

・差集合
→これもテーブル1とテーブル2は差集合演算できません。
だって、…。
テーブル1-テーブル3の結果は

名前  年齢  身長
69    24   180
70    70   170

逆にテーブル3-テーブル1は

名前  年齢  身長
72    72   172
73    73   173

です。

・積集合
→これもテーブル1とテーブル3で行うと

名前  年齢  身長
71    71   171

ですね。

・直積集合
→やっと、テーブル2の出番です。
テーブル1×テーブル2の結果は

名前  年齢  身長  名前  誕生日  体重
69    24   180   68    6/8    68
69    24   180   69    7/10   60
69    24   180   70    7/11   70
70    70   170   68    6/8    68
70    70   170   69    7/10   60
70    70   170   70    7/11   70
71    71   171   68    6/8    68
71    71   171   69    7/10   60
71    71   171   70    7/11   70

で、合ってると思います。以後ではテーブル12という名前で使っていきます。

・選択
→テーブル12から誕生日=7/10という比較条件で選択演算をすると

名前  年齢  身長  名前  誕生日  体重
69    24   180   69    7/10   60
70    70   170   69    7/10   60
71    71   171   69    7/10   60

だし、比較条件を身長=170とすると

名前  年齢  身長  名前  誕生日  体重
70    70   170   68    6/8    68
70    70   170   69    7/10   60
70    70   170   70    7/11   70

です。

・射影
→テーブル12から身長と体重という属性のみ取り出します。

身長  体重
180    68
180    60
180    70
170    68
170    60
170    70
171    68
171    60
171    70

だし、年齢と身長だけ取り出すと

年齢  身長
24   180
70   170
71   171

です。重複は除外されます。

・等結合
→テーブル1とテーブル2をテーブル1の名前=テーブル2の名前で等結合します。

名前  年齢  身長  名前  誕生日  体重
69    24   180   69    7/10   60
70    70   170   70    7/11   70

です。これは、テーブル12から名前=名前のものを選択したと考えられるらしい。。。

・自然結合
→テーブル1とテーブル2をテーブル1の名前=テーブル2の名前で自然結合します。

名前  年齢  身長  誕生日  体重
69    24   180   7/10   60
70    70   170   7/11   70

うん。これが見慣れた感じ。

・左外部結合
→テーブル1とテーブル2をテーブル1の名前=テーブル2の名前で左外部結合します。

名前  年齢  身長  名前  誕生日  体重
69    24   180   69    7/10   60
70    70   170   70    7/11   70
71    71   171   NULL  NULL  NULL

です。てか、どっちが左になるんだろう…
テーブル1と2をって言ったら、1が左なのかな?それでいいのかな?

・右外部結合
→テーブル1とテーブル2をテーブル1の名前=テーブル2の名前で左外部結合します。

名前  年齢  身長  名前  誕生日  体重
NULL NULL  NULL  68    6/8    68
69    24   180   69    7/10   60
70    70   170   70    7/11   70

・フル外部結合
→テーブル1とテーブル2をテーブル1の名前=テーブル2の名前で左外部結合します。


名前  年齢  身長  名前  誕生日  体重
NULL NULL  NULL  68    6/8    68
69    24   180   69    7/10   60
70    70   170   70    7/11   70
71    71   171   NULL  NULL  NULL

・商演算
→やっとテーブル4の登場です。
テーブル1÷テーブル4

名前  年齢
69    24

かな?正直わかりません。。。



こんなもんかな?演算結果が違ってたり、例が悪いかもですが
なんとなく、イメージはわかったような。。。

おしまい。

演算

どうも、69です。


http://androidid-69.blogspot.com/2011/07/12.htmlの続きです。

・結合
→内部結合・外部結合があります。

・内部結合
→二つのテーブルから結合の条件に合うタプルだけを抜き出す結合です。
等結合と自然結合があります。

・等結合
→二つのテーブルの指定された属性が等しい組み合わせを求める結合演算です。
二つのテーブルから名前が69で一致するものをくっつける。う~ん。文章だと難しい。。

あ、等結合の結果には、内容が同じものが重複します。
あと、直積集合演算と選択演算の結果の組み合わせとして表現できます。

・自然結合
→等結合から射影演算で内容の重複しているものを除いたのもです。
う~ん。ダブりがないほうが自然だしってこと?

・外部結合
→条件に合わないタプルも含める結合です。
左外部結合、右外部結合、フル外部結合があります。

・左外部結合
→左側のテーブルの全てのタプルともう一方のテーブルから条件にあうタプルを選択します。

・右外部結合
→左外部結合の逆です。

・フル外部結合
→二つのテーブルのすべてのタプルを含みます。

・商演算
→片方のテーブルをもう片方のテーブルで割ります。
ちょっと意味が…

一旦、おしまい。

だって、今日お誕生日だもん!!

2011年7月8日金曜日

コッドの12の規則

どうも、69です。

タイトルの「コッドの12の規則」ですが
Wikiると
規則0から規則12まである。。。

だとすると、13の規則じゃね?って疑問はさておき
その規則の中で次のような規定があります。

システムは、集合(複数行)単位でのデータの挿入、更新、削除の演算機能を提供しなければならない

集合として複数のタプル(※http://androidid-69.blogspot.com/2011/07/blog-post_06.html参照)を同時に操作できるってことらしいです。

で、集合を扱うために関係代数ってのが必要になり
関係代数ってのは、数学の集合論に基づく集合演算とリレーション専用の関係演算から成り立ちます。


早速行きます!

1.和集合
→OR演算。AもしくはB。重複するタプルは除かれます。
この時、AとBは和両立でなければいけません!


和両立とは「次数(属性の数)が同じで対応する属性のドメインが同じであること」



簡単に言うと「体重と身長はたせませんよ」みたいな。


2.差集合
→引き算。A-BとB-Aは等しくない。
難しく言葉では「集合の差は交換法則を満たさない」と言います。

3.積集合
→AND演算。AかつB。またの名を共通集合演算。
AとBの共通部分。

4.直積集合
→A×B。AのタプルにBのタプルを全て組み合わせます。
全ての取りうるパターン。計算の途中とかで出てくるらしいわよ、奥さん!

5.選択
→比較条件でテーブルからタプルを選択してテーブルを作ります。
つまり、日本の野球選手から日本選抜を選ぶみたいな。

6.射影
→テーブルからある属性だけ取り出します。
つまり、好きな人の全てが好きなんじゃなくて、笑顔が好きなんだ!みたいな、
あ、演算結果から重複するタプルは除外されます。


まだ続きありますが。。。
眠いので、今日はここまで。

おしまい。 

2011年7月6日水曜日

リレーショナル・データベース

どうも、69です。

今日はリレーショナル・データベースについてです。

リレーショナル・データベースは二次元の表として
同じ種類のデータの集合を表現します。

えー、つまり、エクセルですね。たぶん。

で、その表を「リレーション」もしくは「テーブル」と言います。
で、その表の列(フィールド)を「属性」と言います。
で、属性値の組み合わせである行(レコード)を「タプル」と言います。

例をあげると(ほんとは画像がいいのですが…)


↓属性
名前     年齢    出身
タプル→   69      69      関東
タプル→   70      70      東北


てな感じです。
属性の値の集合を「ドメイン」(定義域)と言います。

上で言うと出身属性の値は『関東』『東北』で、これらをドメインと言うはずです。


次のページを見たら、苦手だった、算数・数学っぽい感じなので、今日はここまで。

おしまい。

2011年7月5日火曜日

データモデル

どうも、69です。

がっつり、Android以外です。。
まぁ、SQLiteの勉強と思っていただければいいかな??
違うかも!


データモデルとは何か?
モデルとは


模範・手本または標準となるもの
ある事象について、諸要素とそれら相互の関係を定式化して表したもの


これは金田一耕介の言葉です。
つまり、データについての関係を定式化したものがデータモデル、かな。
わかんなかったら、脚の長い、綺麗なおねーさんと思っておけばいいんでは。。


代表的なデータモデルは4つです。図が無くて申し訳ないです。。

・階層データモデル
→子データは1つの親データしか持たない
えーっと。お使いのPCのCドライブでも見ていただければ、幸いです。

・ネットワークデータモデル
→子データが複数の親データを持てる
えーっと。69はとある会社の社員であり、とある野球チームの選手であるわけで。
69という、子データはとある会社・とある野球チームという親データを持っています。

・リレーショナルデータモデル
→データを行と列から構成される二次元の表で表します。
えーっと。エクセルです。Excel。データベースっていう場合、主にこのモデルを指します。

・オブジェクト指向データモデル
→えーっと。よくわかりません。(笑)

まぁ、そんな感じです。

おしまい。

DBMS

どうも、69です。

この前、DBMSのたとえが…という話をしました。

今もまだ、いいたとえは思いついていないのですが
ちょっと、説明をしようかな??

DBMSとはDataBaseManagementSystemの略でデータの集合体とその管理を行います。
機能としては
・ユーザー管理
→「ユーザID」、「パスワード」を確認し、合致すれば「権限」をチェックします。
・SQL文の解釈/実行
→リレーショナルデータベースを操作する共通言語を解釈し実行します。
これがこの前言っていた、小人さんの主な役割です。
・障害対策
→バックアップ機能。操作を更新ログとして保存しておきます。
バックアップデータと更新ログを使用して最新の状態に復元できます。
・ロック制御
→排他制御。ダブルブッキングなんてことがないようにします。えらいな~。
・トランザクション制御
→複数の処理がひとまとまりとして実行されることを保証します。
誰かが僕の口座に百万円振り込むとして
誰かさん口座は-100万で、僕の口座は+100万ってなって初めて正常実行できたとする
ってことです。
途中で障害があった場合は、ロールバックと言ってすべて無効とします。
両方成功してコミットします。

てな感じです。

おしまい。

驚愕

どうも、69です。

そういえば
このblogって
Androidが
メインでしたね。いや、ですね。


最近、横道ばっかで…

すいません。。。


でも、僕は、変わらないよ!!
いろいろ道草してくよ!
やさしい人は、見守っててね!
そうでない人は、知らないよ!(笑)

おしまい。

たとえ

どうも、69です。

例え、って難しいですね。。。
今、データベースについて少し勉強してるんですが
その本の中で

「DBMSは、いわば貸金庫と番人と小人たち」

とあるのですが。。。

????小人たちって????

僕、見たことないっす!
だからと言って、なにかいいたとえが見つかっているわけではなく…

なので、むずがしいなぁ~って。

何かいいたとえが見つかったら、ご報告いたします!

おしまい。

2011年6月29日水曜日

どうも、69です。

波が激しいです!
一気に落ち込んだと思ったら、一気に激上がり!!

もうね、心臓に悪いですよ!

まるでジェットコースターですよ!僕の嫌いな。


まるでジェットコースターですよ!僕の嫌いな。


あ、此処↑テストに出ま~す!

あ、何がかって言うと、豪ドル/円相場。。。
金利がいいからって預けてたら、赤い字で諭吉さんが二桁くらいと思ったら
今度は、黒い字で諭吉さんが数人。

座右の銘が安定。尊敬する人が川相昌弘。な自分にはきっつい。

おしまい。

驚き

どうも、69です。

とあるサイトで電話番号を交換っていうのがあって
本来なら、ポイントを購入しなきゃなんですが
向こうから、物語になって届きました。

私が0歳で生まれた時におばあちゃんは90歳でした。5人目の孫の私は24歳のいとこと・・・


みたいな。
ちょっと感動!
まぁ、使い道がないですが。。。


おしま、わない。


当ブログへのアクセスを見てみたら
android関連で来ている方が多い。。。
なんかすいません。
くだらない日記になってます。
ちょっとずつ、軌道修正をしていきます。


おしまい。

PostgreSQL-3

どうも、69です。

只今、PostgreSQLインストール中です。
9.0.4です。
OSS-DBは9.0がベースらしいので。


浅広(浅く広く。あ、でもそんなに広くない。。。)人間にとっては、受けるしかないですね!
予定は未定ですが。。。
万が一、受験して、合格した場合のみ、発表します!


せっかくなので、手順を文字で。あ、今回はソースからです。
あと、OSはCentOS5.6です。

1.なにはともあれ、ダウンロード。
日本PostgreSQLユーザ会とかあるのでその辺でダウンロード。
postgresql-9.0.4.tar.gz (←9.0の最新6/28現在)

2.ユーザ・インストールディレクトリの作成
PostgreSQLはrootユーザによる、ログイン?だか起動?だかが禁止されているらしいので。
#useradd postgres
#passwd postgres
#mkdir /usr/local/pgsql
#chmod -R postgres:postgres /usr/local/pgsql

あ、一言。
Cluster環境だと複数台のサーバでpostgresユーザのUIDとGIDとがそれぞれ一致させるらしい。
わかりにくいけど、UID=GIDじゃなく、サーバ1のUID=サーバ2のUID。。。わかるか、そのくらい。(笑)

3.解凍
任意の場所(でいいと思います)のダウンロードしてきたファイルを解凍します。
いろいろ見てると/usr/local/srcが多いので、そこでやってます。
#tar -zxvf postgresql-9.0.4.tar.gz

4.
ここからはpostgresユーザです。
#su - postgres
$cd /usr/loca/src/posgres-9.0.4
$./configure --enable-multibyte=EUC_JP --enable-syslog --prefix=/usr/local/pgsql

これで、漢字が使えて、syslogにログが残り、/usr/loca/pgsqlにインストールされるようになるはず!
が、
なんかエラー。。。
Cのコンパイラがありませんって。なので5.は飛ばす場合もあるのかも。

5.Cのコンパイラをインストール
これはrootユーザで。めんどいので、yum使用。
#yum install gcc

で、4.をもう一回。
したら、今度はreadlineがないって。
なにそれ。一応。

6.
#yum install readline-*

で、4.をもういっかい!イェイ!
したら、残念なお知らせが。
今度はzlibがないって。

7.
#yum install zlib-*

で、4.を…
したら、今度は認識でないオプションです。ってさ。

8.
$./configure --prefix=/usr/loca/pgsql

なんかうまくってそうなので、次へ

9.
$make all

10.
$make install

なんか大丈夫そう!
眠いので、今日はここまで。

おしまい。

2011年6月27日月曜日

チーム化

どうも、69です。

前回はお見苦しい記事をお見せして失礼しました。

今日はNICのチーム化をしました。
チーム化すると、何がいいのか?


なんにも面白発言ができません。。。
1つのポートがつぶれても、通信ができるようにと。

今回は
eth0,eth1をチーム化。OSはRHEL5.4。
ちゃんとNICとOSがチーム化をサポートしてること。

で設定は
/etc/sysconfig/network-scripts/ifcg-eth0を編集

DVICE=eth0
BOOTPROTO=none
MASTER=bond0
ONBOOT=yes
SLAVE=yes


/etc/sysconfig/network-scripts/ifcg-eth1を編集

DVICE=eth1
BOOTPROTO=none
MASTER=bond0
ONBOOT=yes
SLAVE=yes

/etc/sysconfig/network-scripts/ifcg-bond0を作成

DVICE=bond0
BOOTPROTO=static
IPADDR=○.○.○.○
NETMASK=○.○.○.○
GATEWAY=○.○.○.○
ONBOOT=yes

/etc/modprobe.confの編集(追記)

alias bond0 bonding
options miimon=1000 mode=1 primary=eth0

で、再起動。
で、できるはず。自分はできました。
/etc/modprobe.confでの設定は
bond0は プライマリがeth0で モードはホットなんちゃらで 監視を1000ミリ秒間隔で行う
ようになってます。詳細はググって。linux bondとかlinuc lan チーム化とかで。

おしまい。

スマートフォン

どうも、69です。

ケータイをスマートフォンに変えたわけですが。

もうね。
なんかね。
全然スマートじゃないわけですよ!


電波悪くてイライラし。
画面が切り替わらなくて、悶々とし。
いっそのこと、地面にたたきつけてやろうかと!

変えようにも簡単に変えられる値段じゃないし。

それに、それを選んだ自分が悪いわけで。
忍耐力をつけるための道具と思えば、イケるかも!

つまり、なにが言いたいのかといいますと。
今日も一日、お疲れ様でした!

おしまい。

2011年6月26日日曜日

PostgreSQL-2

どうも、69です。

PostgreSQLのセミナーに行ったことを書いたので
せっかくなので、自分でもなんとなくイメージできたものを少しだけ書いてみます。。

大丈夫だよな??

・9.1新機能
 ☆レプリケーションの強化
  →synchronous_standby_names
    このパレメータで指定した”名前”に合致したもののみ同期する
    スレーブサーバ1は同期するけど2はしない、みたいにできるそうです。
 ☆拡張性の向上
  →FOREIGN TABLE ⇒CREATE TABLEの代わりにCREATE FOREIGN TABLE
   外部データを直接テーブルとして参照可能になる
 ☆性能強化
  →UNLOGGED ⇒CREATE TABLEの代わりにCREATE UNLOGGED TABLE
   ログを残さない。結果高速に。全セッションから参照可能。
 ☆機能強化
  →SECURITY LABEL
   強制アクセス制限の機能が本体に組み込まれる
 ☆互換性に関する注意
  →standard_conforming_stringのデフォルト値が変更
   ~9.0はデフォルトで「off」だが、9.1では「on」なので注意が必要
   
・運用テクニック
 ☆状態監視
  →log_line_prefixの設定
   ログにどんな情報を付加するかを設定するパラメータ
  →application_name
   どのアプリケーションに異常があるかを判別できる
  →log_filemode (9.1~)
   ログファイルのパーミッションの設定。
   今までは600固定で所有ユーザのみしか見れなかった。
 ☆異常発生時
  →異常・残存プロセスの削除
   kill -SIGKILLは行わない! -SIGTERMか-SIGINTを行う。
 ☆バックアップ・リストア
  →pg_archivecleanup (9.1~)
   アーカイブログを管理する
   それ以前ではfindでタイムスタンプをみて不要分をrmで削除
  →リストア
   以下が必要
   ・ベースバックアップ
   ・アーカイブログ
   ・トランザクションログ
 ☆アップデート・アップグレード
  →アップデート(マイナーバージョンアップ)
   基本的にバイナリ変更でOK
  →アップグレード(メジャーバージョンアップ)
   データの変換が必要
 ☆メンテナンス
  →自動vacuumってのが便利らしい
・OSS-DB
 ☆LPIC
  →年々受験者が増えている
   「身につけたいスキル」ランキング5年連続第一位(@IT自分戦略研究所調べ)
 ☆PostgreSQL
  →素晴らしさ
   無料・容易なインストール・ロックインのリスク回避
  →事例
   yahooやらなんやら
 ☆IT業界
  →chasmのリスク回避
   詳しくは調べてください。
  →差別化
   他と差別化するためにオープンソースを使う
 ☆OSS-DB技術者認定試験


最後のほう、やっつけですが、そんな感じでした。

おしまい。

PostgreSQL

どうも、69です。


先日、PostgreSQLのセミナーに参加しました。
品川で行われたのですが、昼食で行った吉野家の店員さんが可愛か…
話が逸れました。すいません。


内容は

・この夏の終わりごろにリリースされるであろう9.1の新機能
・PostgreSQLの運用テクニック
・OSS-DBの試験について

でした。
初心者、インストールしかしてないですが…には
何言ってるかチンプンカンプン。。。

でも、理解できるようにしたいなぁ。
また、今度もあったら行ってみよう!

あ、LPICの値下げは今のところないらしいです。。
理事長が仰っておりました。
NPOは財源の確保を通常の会社よりしっかりしなくてはいけないらしい。。

おしまい。

2011年6月25日土曜日

SPS

どうも、69です。

共有ディスクをFCケーブルで接続しているのですが。
それのパスを通すためにSPS(StoragePathSaivor)というのをインストールしました。

共有ディスクには3本の論理ディスクを作成したのですが、
FCケーブルを接続したら新たに6つのデバイスが…
/dev/sdc~/dev/sdhまで増えました。


FCコントローラが2つなので、それぞれが認識しちゃってるみたいな。。
でも実はSPSデバイスっていうのも増えてるらしくて。
(今回は3本だったので/dev/dda~/dev/ddc)

で、そのSPSデバイスってのにアクセスするらしい。


先輩に聞いたら、マニュアルに書いてあるって。。。
以後ちゃんと読みます。

おしまい。

2011年6月24日金曜日

出会い系男子

どうも、69です。

草食系男子に代表される○○系男子。。
本日69は出会い系男子になりました。(笑)
笑い話じゃなくひかれるかもしれませんが。。。

でも、こんな時間に家でブログを更新しているってことは…
まぁ、お察しの通りです。。。


話なんて盛り上がらないし!
困ったら「何か飲みますか?」しかないし!
でも、あんまり飲んでないし!


そんなつまらない男です。。。

最近、雑記しか書いてない…

おしまい。

連携

どうも、69です。


クラスタ構成っていうのやってます。
あんまり詳しく言えませんが
共有ディスクでACT・ACTで
CLUSTERPROっていうやつインストールして
PostgreSQLインストールしてsambaでファイル共有もする。

みたいな。


ただインストールして
起動・停止とディスクのマウントをCLUSTERPROに任せればいい

と思っていたのですが、違うみたい。
ちゃんとインストール順序があるみたい。

なんで、最新版マニュアルを置いておかないんだよ!

ちょっと古いマニュアルしかないのですが
それによると

CLUSTERPRO→PostgreSQL→samba

の順かな?PostgreSQLとsambaは逆でもいいかも?

あ、共有ディスクなので先に
FCコントローラのドライバとSPSとかいうパスが通るようにするやつ
が必要みたい。。。

おしまい。

2011年6月22日水曜日

扇風機はじめました

どうも、69です。


暑いですね。
う~ん。暑い。


扇風機はじめました。
一瞬回らなくて、焦りましたが。
無事回りました。

おしまい。

2011年6月21日火曜日

google

どうも、69です。

chrome ブラウザいいですね。
他でもできたのかもしれませんが

一度閉じたタブを戻すやつ

↑これいいですね!

ショートカットは
<Shift>+<Ctrl>+<t>

ただ最後にいたページに戻るんじゃなくて
そのページまでの履歴まで残っているので。

ぶれる自分にとっては重宝してます。
一度閉じてから「もっかい」というのがよくあるので。

さすが、神ブラウザ!(笑)

暇ん時、OSも試してみよ!

おしまい。

2011年6月20日月曜日

サンバ

どうも、69です。

今日はsambaを踊ってました!
ピーッピ、ピッピッピッピピ!
じゃなくて
インストールしてました。
ありきたりなボケ、すいません(汗)
ただファイル共有をするだけに半日かかってしまいました。

smb.confをいじってもいじっても

「アクセスできません」

ってなっていて、投げやりに
SELinuxを無効にしたり、サーバ再起動させたり
ユーザ作り直したり、インストールしなおしたりしてたら
いつの間にか、共有できてました!

もう一回やり直してみよう!

そしたら、やっと開発できそう!

おしまい。

2011年6月19日日曜日

VMware Player3

どうも、69です。

CentOS5.6をインストールしてみたのですが
勝手に言語とかも全部決められてしまう。。。

↑を回避するには
まず空の仮想ハードディスクを作るらしい。

やってみよ!


なんか、つぶやきみたいになってきた…
ま、いっか!

おしまい。

VMware Player2

どうも、69です。

VMware Playerで仮想OSが再生できなかった問題ですが
修復してもダメだったので
ダウンロードしなおして、削除して、再インストールして
新規仮想マシンを作成したら出来そうです!!

インストールがおかしかったのかな?

まあ、いいや。
またダメそうだったら…
その時はその時で(笑)

おしまい。

VMware Player

どうも、69です。

PC一回ぶっ壊してVMware Playerを入れ直してサーバー構築をしようかと思いましたが。。。
VMware Playerはよかったのですが、仮想OSを起動させようとしたら

VMware Authorization serviceが起動していません

みたいなのが出て、起動できませんでした。
windowsのサービスを見てみたら、確かに起動してなくて、開始させました。が、
開始できませんでした。
ログを見てみると

このサービスはインストールされていません

みたいな感じ…
とりあえず、修復して再起動してどうなるか。。。

これができないと先に進まな~い!!

おしまい。

2011年6月18日土曜日

オブジェクト指向

どうも、69です。

Javaってオブジェクト指向ってやつらしいです。


あんまり理解しませんが
昔ジーちゃんに言われたとと似ているような…



むかしむかし、東京のあるところにジーちゃんとその孫がおったそうな。

ジーちゃんは、新聞記者をやっていて、それはそれはとても上手に文を書いたそうな。
まさに、文章のプロだったそうな。
そのおかげで、孫は文章の才能全て吸いとられちゃったような、
ひどい文を書いてます…(現在進行形で…すいません)

ある日、ジーちゃんは言いました。


「ひとつしっかりした文を書きなさい」
「後は、中身を変えるだけだから」


言われた孫は「???」でした。
そして、孫はその意味がわからず
相変わらず、ひどい文章を書いてます…




最近、オブジェクト指向とやらを学び始めて

「ジーちゃんが言ってたことじゃね」

と思いました。
どっちもちゃんとした理解はないので
違うかもしれませんが、概要はそんな感じなのかな??


そういえば、お笑いとか見てても、ちょっと感じます。

「同じ流れで、中身が違うなぁ~」

って。お笑いについては知識はまったく無いので、
ほんとザックリですが。。。

オブジェクト指向って意外と身近なんだな~って感じる今日この頃です。

おしまい。

hogehoge

どうも、69です。

やっとわかりました!hogehogeが。

あれ、メタ構文変数って言って、意味のない名前ってことらしいですね。

ネットやら本やらその他で見たソースコードに

hogehoge

って、あって。。。

なんでみんなこれなんだ?
どんな意味なんだ?

って思ってましたが、

まさか、意味がないってことだとは。。。


おしまい。

2011年6月15日水曜日

My おでん

どうも、69です。

今日は東京メトロの東から西への電車に乗っていたのですが

電光案内で

「To Myoden」

とあり、「マイおでん」って何ふざけてんだよ!って思っていました。
妙典行きでした…



今日は何も、解決してません。
MediaPlayerもPostgreSQLもPHPも。

で、今日は新しくOracleの問題も抱えちゃって…
SQLPLUSから「conn / as sysdba」で接続できなくて…
エラー内容が「プロトコルアダプタエラー」とかで(番号覚えてません。。)

ググるとSIDが間違っているSETされていないとからしいのですが、
合ってるし!setで変数見ても出てくるし!
ということで、わかりませ~ん!

おしまい。

2011年6月11日土曜日

住信

郵便局に郵送時間の連絡の時に
「送信主は?」と聞かれて
「スミシン~」と答えたら
「ジュウシンですね!!」って言われた…
送られてきたものを確認したら
「sumishin」って書いてありました。

無駄に恥かかされた、どうも、69です。

今日は開発環境を整えようとしてました。
が、Internetっと怖いですね。。。
意志が弱いものを巣食ってしまう。
そんなわけで、あまり進んでません(汗)

今日のeclipseチョイ技は

<ctrl>+<shift>+<s>

押してみそ。
おしまい。

進展なし。6/11

どうも、69です。

昨日は6/10で無糖の日ということで
近所の喫茶店でブラックコーヒー飲み放題!

だったら、いいなとか思って一日が終わりました。

なので、
PostgreSQLもCentOSもJavaもAndroidもPHPも何の進展なしです。
残念。

2011年6月9日木曜日

MediaPalyer

どうも、69です。

昨日から再開したわけですが、今日は6月9日…
狙ってないです!決して。
何か持っているかもしれません。

最近、アプリ作成も再開したんですが…

MediaPlayerができません。
とりあえず、本通り書いてみたんですが、

<ファイル名>は解決できないか、フィールドではありません

となってしまいます。Java初心者には何のことやら…

とりあえず
フィールドとはデータの事を言うらしい。

解決できないので
最近習ったeclipceの小技を。

<ctrl> + </>

を押してみそ。
おしまい。

お久しぶりです。

どうも、69です。


やっと設定が終わりそうなので、ブログ更新をはじめよっかな!?


最近CentOS5.6+PostgreSQLやってます。
わけわからんです。
データベースとテーブルは作れたけども・・・

何か情報を得たら、書きこんで行きます!
もちろん、Androidも。。。

2011年3月30日水曜日

雑記7

どうも、69です。


久久久久々くらいですね。
最近、納期が間近でして
残業残業休日出勤という感じで・・・
で、今日は早く終わったので。


プログラム更新は、自分のやりたい項目から順次やっていこうかと思います。


Androidケータイ使って2週目ですが未だ慣れないです。
メールとか打つのが面倒で、面倒で。
そのうち慣れるかなぁ。


読みたい本があるけど全然進みません。


おしまい。

2011年3月24日木曜日

雑記7

どうも、69です。

今日も雑記です。。。
今週が終われば少しは落ち着くと思うので。

で、仕事で

赤い帽子

が攻めてきました。
もう、ぜんぜんお手上げ。。。

完全に資格だけになってしまった。
でも、やっぱり面白いな!と感じてます。

これを機に、ちょっと勉強再開しようかな?
でも、最近ゲームにもハマってて。

まぁ、まずはAndroid!
あ、仕事優先だった!!

おしまい。

2011年3月23日水曜日

雑記6

どうも、69です。

今日はなんかプログラム更新しようと思ってましたが・・・


仕事が終わらなくて・・・


また今度。


明日も長い一日になりそうだ。。。

おしまい。

2011年3月20日日曜日

Androidその23 ~アクティビティ2~

どうも、69です。

今日はお詫びが2点あります。

まず、ブログのタイトルの番号が適当となことです。

履歴が最新のものを出してくれなくて
「確か○番だ」
という感じでつけてしまし・・・

次に、ソフトバンクのiPhone以外のスマホユーザに対してです。

「なんで、ソフトバンクでiPhoneじゃないんだよ!」
って言っていたのに

GALAPAGOS

買っちゃいました。
うん、ガラパゴっちゃいました!!
やはり、自分で作ったアプリを自分でまずは使いたい、という事ね!

どうも、すいませんでした。。。


では、本題↓

アクティビティにはライフサイクルがあります。

生成されたら終わらなければいけない。
生まれたら死ぬ運命にある。

で、主要なメソッドは

onCreate(Bundle)
→生成時に呼ばれる。onSaveInstanceState()メソッドで保存した情報があれば、Bundleに。

onStart()
→アクティビティの表示

onResume()
→アクティビティがユーザの入力を受け入れる

onPause()
→アクティビティがバックグラウンドになる。メモリが少なくなると勝手に破棄される事がある

onStop()
→アクティビティがしばらく使われなかった時。メモリが少なくなると勝手に破棄される事がある

onRestart()
→onStop()の後に、他のアクティビティが終了することで再開

onDestroy()
→アクティビティの破棄

onSaveInstanceState(Bundle)
→インスタンスの状態の保存。アクティビティが破棄されても引数Bundleを利用して戻せる

onRestoreInstanceState(Bundle)
→インスタンスの状態を復元。onSaveInstanceState()メソッドで保存した値を復元できる

おしまい。

Androidその21 ~アクティビティ~

どうも、69です。

今日はAndroidアプリ作成の基礎をやろうかと。


教科書を変えてから、
Androidアプリ作成の方法が
若干違う・・・

なので、新教科書に則っていこうかと。

***********************************************************
アクティビティ(Activity)とは


画面を持った機能の単位


です。Androidではアクティビティ毎に状態を管理する仕組みがあります。
だいたいは、画面の遷移もアクティビティ単位で行います。

***********************************************************

今まで「~.java」というファイルを作ってきましたが
その中に

「class クラス名 extends Activity」

というのがありました。
「extends」は継承するってことで、訳すと

「クラス名classはActivityclassを継承します。
その中身を{}内に定義します。」

という感じです。
詳細はいつかJavaについてやろうと思ってます。
定義の中で

「onCreate()」メソッドを使ってアクティビティを生成します。

おしまい。

2011年3月18日金曜日

雑記5

どうも、69です。


お久しぶりです。
って言っても、何日振りだろ・・・


わからん!


やっぱりブログ休止ではなく
回数を減らすという方向にします。


自分の精神衛生上良くないことに気付きました。

というわけですので、よろしくお願いします。

おしまい。

2011年3月14日月曜日

Androidその21 ~自作3~

どうも、69です。

やっとできました。
簡単なものですが。


画面タッチを検出してそこに
画像を表示させるだけ

っていうホントに簡単なもの。
で、今までエラーしていたのは
Tomcat関係なさそう・・・
自分のミスでした。
具体的に言うと、TouchViewクラスからオブジェクトの生成をし忘れてまして。。


で、このソースを公開したら
しばらくブログ公開はストップしようかと。
うち、停電の地域に入ってるので。

では↓

*****Appli.java*******************************************

package com.blogspot.androidid.appli1;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

public class Appli1 extends Activity {
    /** Called when the activity is first created. */

private AppliView appliview;
private TickHandler tickHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        appliview=new AppliView(this);
        setContentView(appliview);
    }
  
    @Override
    public void onResume(){
     super.onResume();
     tickHandler=new TickHandler();
     tickHandler.sleep(0);
    }
  
    @Override
    public void onPause(){
     super.onPause();
     tickHandler=null;
    }
  
    public class TickHandler extends Handler{
     @Override
     public void handleMessage(Message msg){
     appliview.invalidate();
     if(tickHandler != null) tickHandler.sleep(100);
     }
    
     public void sleep(long delayMills){
     removeMessages(0);
     sendMessageDelayed(obtainMessage(0),delayMills);
     }
    }
}

**********************************************************


*****AppliView.java******************************************

package com.blogspot.androidid.appli1;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.MotionEvent;

public class AppliView extends View{
private int X=0;
private int Y=0;
private int Action=-999;
private Bitmap image;

public AppliView(Context context){
super(context);
setBackgroundColor(Color.BLUE);

setFocusable(true);
Resources r=context.getResources();
image=BitmapFactory.decodeResource(
r,R.drawable.android);
}


@Override
protected void onDraw(Canvas canvas){
int w=image.getWidth();
int h=image.getHeight();
if(Action != -999)
canvas.drawBitmap(image,X-(w/2),Y-(h/2),null);
}

@Override
public boolean onTouchEvent(MotionEvent event){
X=(int)event.getX();
Y=(int)event.getY();
Action=event.getAction();
return true;
}
}


**********************************************************


解説はまた今度。いつかは未定ですが。

おしまい。

2011年3月11日金曜日

雑記4

どうも、69です。


最近、リンゴ病にかかりました。



Apple製品にはまったなと思った方、
おしい!


椎名林檎です。はまったのは。
なぜかは判りません。

ただ、いっつも流れてます。
『積木遊び』

YOUTUBEでみて更にはまってく・・・

おしまい。

2011年3月10日木曜日

Android20 ~初自力2~

どうも、69です。


初めての自分で考えたもの。


デバッグできない。
ググっても、Tomcatって誰?wって状態です。


ソースはあってそうですが。
動作確認が一番の楽しみなので。
それができるまでは、公開できない・・・


どこにいる!Tomcat!!!!

おしまい。

Android19~初自力~

どうも、69です。


今日は自分で考えたものを公開する






つもりでした。

ただ、デバッグがうまくいかないので
見送りになりそうです。

あと、自力って言っても
「コピペで作ろうなので」
過去のを参考にしてます。

初自力
もうちょっと待ってください。

おしまい。

2011年3月9日水曜日

雑記4

どうも、69です。


移設して
ちょこちょこ触ってますが…

いまだに、ブログの使い方慣れません。
まぁ、前のも使いこなしてはいませんでしたが。


で、関係ないですが
いろいろ興味があって
PHPやりたい。Javaやりたい。Oracleやりたい。
MySQLやりたい。ネットワークも勉強したい。サーバに強くなりたい。
LinuxもWindowsも。FXやってみたい。

で、ちょっとづつやっていこうと思います。
その過程もBlogにしようかとも思ってます。
で、Blog分けたほうがいいのかな~とか悩んでます。
朝も起きれないほど。

ま、なんくるないさ~。

おしまい。

Androidその18~タッチイベントの処理2~

どうも、69です。

早速前回 タッチイベントの処理 の解説です。

*****TouchEx.java***************************************

↓TouchExクラスの定義
public class TouchEx extends Activity {
    /** Called when the activity is first created. */

private TouchView touchView;→変数touchView。型はTouchView

private TickHandler tickHandler;→変数tickHandler。型はTickHandler

    //アプリの初期化
    @Override
    public void onCreate(Bundle android) {
        super.onCreate(android);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        touchView=new TouchView(this);→TouchViewオブジェクトの生成。引数:this(TouchEx)

        setContentView(touchView);→実画面に表示するビューの指定
    }
   
    //アプリの再開→onResumeメソッドの定義
    @Override
    public void onResume(){
     super.onResume();
     tickHandler = new TickHandler();→TickHandlerオブジェクトの生成

     tickHandler.sleep(0);→tickHandlerオブジェクトのsleepメソッドを利用

    }
   
    //アプリの一時停止→onPauseメソッド定義
    @Override
    public void onPause(){
     super.onPause();
     tickHandler=null;→tickHandlerを空(null)に。
    }
   
    //定期処理ハンドラ→TickHandlerクラスの定義
    public class TickHandler extends Handler{

     //ハンドルメッセージ→handlerMessageメソッドの定義
     @Override
     public void handleMessage(Message msg){

     touchView.invalidate();→touchViewオブジェクトのinvalidateメソッドを利用

     if(tickHandler != null)tickHandler.sleep(100);→もし「tickHandlerがnull」じゃなかったら「tickHandlerオブジェクトのsleepメソッドを引数100で利用」
     }
    
     //スリープ→sleepメソッドの定義
     public void sleep(long delayMills){
     removeMessages(0);→メッセージの削除
     sendMessageDelayed(obtainMessage(0),delayMills);→メッセージの送信
     }
    }
}


*************************************************

*****TouchView.java*******************************

//タッチイベントの処理→TouchViewクラスの定義
public class TouchView extends View{

↓変数touchX,touchY,touchAction,ballX,ballY,ballActionの宣言、初期値設定
private int touchX=0;
private int touchY=0;
private int touchAction=-999;
private int ballX=0;
private int ballY=0;
private int ballAction=-999;
 

//コンストラクタ
public TouchView(Context context){
super(context);
setBackgroundColor(Color.WHITE);

//フォーカス指定
setFocusable(true);→フォーカス有効化
}
 
//onDrawオブジェクトの定義 @Override
protected void onDraw(Canvas canvas){
String str;

//描画オブジェクトの生成
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setTextSize(32);

//タッチXY座標の描画
canvas.drawText("TouchXY>"+touchX+","+touchY, 0, 40*1, paint);

//タッチアクションの描画
str="NONE";

↓もし「touchActionがMotionEvent.ACTION_~」だったら「strにACTION_~を代入」 if(touchAction==MotionEvent.ACTION_DOWN) str="ACTION_DOWN";
if(touchAction==MotionEvent.ACTION_MOVE) str="ACTION_MOVE";
if(touchAction==MotionEvent.ACTION_UP) str="ACTION_UP";
if(touchAction==MotionEvent.ACTION_CANCEL) str="ACTION_CANCEL";
canvas.drawText("TouchAction>"+str, 0, 40*2, paint);

//ボールXY座標の描画
canvas.drawText("TrackballXY>"+ballX+","+ballY, 0, 40*3, paint);

//ボールアクションの描画
str="NONE";
if(ballAction==MotionEvent.ACTION_DOWN) str="ACTION_DOWN";
if(ballAction==MotionEvent.ACTION_MOVE) str="ACTION_MOVE";
if(ballAction==MotionEvent.ACTION_UP) str="ACTION_UP";
if(ballAction==MotionEvent.ACTION_CANCEL) str="ACTION_CANCEL";
canvas.drawText("TrackballAction>"+str, 0, 40*4, paint);
}

//タッチイベントの処理→onTouchEventの定義
@Override
public boolean onTouchEvent(MotionEvent event){
touchX=(int)event.getX();→x座標の取得
touchY=(int)event.getY();→y座標の取得
touchAction=event.getAction();→Actionの取得
return true;
}

//トラックボールイベントの処理
@Override
public boolean onTrackballEvent(MotionEvent event){
ballX=(int)(event.getX()*100);
ballY=(int)(event.getY()*100);
ballAction=event.getAction();
return true;
}

}


*************************************************
*****主に利用したパッケージ*****************



import android.app.Activity;
 void onCreate(Bundle android)→アプリの起動時に呼ばれる。引数:android 呼び出し時に渡されるデータ


 void requestWindowFeature(int featureID)→ウィンドウの特徴IDの指定。引数:ID


 void setContentView(View view)→実画面に表示するビューの指定。引数:ビュー

import android.os.Handler;
 void removeMessage(int ID)→メッセージの削除。引数:メッセージID



 boolean sendMessageDelayed(Message msg,long delayMillis)→メッセージの送信。引数:メッセージ,送信までの時間(ミリ秒)


 void handleMessage(Message msg)→メッセージ受信。引数:メッセージ


import android.view.View;
 boolean onTouchEvent(MotionEvent event)→タッチ発生時に呼ばれる。引数:タッチイベント。戻り値:処理が完了したか


 boolean onTrackballEvent(MotionEvent event)→トラックボールイベント発生時に呼ばれる。引数:ボールイベント。戻り値:処理が完了したか


import android.view.MotionEvent;

 float getX()→タッチイベントのX座標取得。戻り値:X座標


 float getY()→タッチイベントのY座標取得。戻り値:Y座標


 int getAction()→タッチイベントのアクション種別の取得。戻り値:種別
**********************************************************


今日のところは
こんなところです。


おしまい。