スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
3大栄養素
3大栄養素について調べようと思ったんだが、3大栄養素の話のときに出てくるエネルギーの意味がわからん。

位置エネルギー? 熱エネルギー? 運動エネルギー?

なに、どういう意味? なにエネルギー?

なんでエネルギーの話で、ブドウ糖とかの物質の話になるわけ・・・

クイックソートなんかより断然むずい。。。。


追記:
なにやら、体の内部に蓄えられるという意味で使われているっぽいので位置エネルギー(ポテンシャルエネルギー)の部類かな・・・
スポンサーサイト
おお、面白い
ウノウラボ Unoh Labs: vi エディタの練習ソフト

追記:
カーソル移動問題は
3級


編集問題は
10級
なぜか、置換を使おうとするとハングする
どうやってもシステムは一人では動かない
毎週1回、ひとつ上の先輩方に部署内のチームの役割(このチームはこんな処理を担当してますみたいなの)を説明して頂いていました。

ここからファイルがきて、ここに出力されて、こんなテーブルがあって・・・ みたいな話です。

で、ちょっと「まとめ」を書くことがありまして、今まで教えていただいたことは、概ねわかりました。これこれこういったところで使われるものを僕らは開発することになるんですね。っと書いたところ・・・・・


「あ、中西君が作るところ、というか俺らのチームはまだ出てきてないから」

「!? どういうことですか?」

「いや、説明してもらった図にさえまだ登場してないのよ」

「ということは・・・・」

「ちょっと説明してあげよう」


前回までのシステムに関する図とおんなじくらいのスケールのシステムが横に隠れてた・・・orz

で、そろそろ実戦に投下されます・・・

プログラム以前に覚えることが多すぎる・・・
乗り換えれるか! いや乗り換えるしかない
h← j↓ k↑ l→

b ← → w

[[ 文頭
]] 文末

0 行頭
$ 行末

u アンドゥ
Ctrl + r リドゥ

X BackSpaceキー 
x Deleteキー 

J 次の行と連結(末尾の改行削除)


参考資料:
Windows版viエディタ入門 - faireal.net
クイックソート
注)ほとんど覚書の文章なので、あまり推敲していません

実は、クイックソートって難しすぎて一生理解できないと思ってたんだが、 なんだ、できそうだ。 ソートの仕方自体は特にむずかしくない。 

ピボットを決めてそれより小さいのは左、それより大きいのは右にすればよい。あとはこれを、分割されたところに適時くりかえせばよい。


で、なんで俺が、一生理解できないと思ったかっていうと、いきなり右と左でなにやら矢印がスタートしたかと思うと、ぶつかるところまでデータを入れ替えていくからである。

だが、
「ピボットを決めてそれより小さいのは左、それより大きいのは右にすればよい」
ということに気づいたので、概ね理解できた。

右と左でなにやら矢印が進んでいくバージョンのクイックソートは

ぶつかった所で分割(勝手に分割されてる)

ピボットは基準となる数字(ぶつかった所とピボットは関係ない)

と覚えておけば、実装できそうだ。
Wordのマクロで、プログラムに行番号をつける
Sub Macro2()
'
' Macro2 Macro
' 記録日 2007/06/29 記録者 Bingo_Nakanishi
'
For i = 1 To Selection.Paragraphs.Count
Selection.HomeKey Unit:=wdLine
Selection.TypeText (i)
Selection.TypeText (": ")
Selection.MoveDown Unit:=wdLine, Count:=1
Next i
End Sub


これで、マウスで選択された範囲に行番号がつきます。
Wordにプログラムのソースを載せたいときに便利です。

ただ、アンドゥするとわかるのだが、なかなかマクロ実行前に戻れないw

# 試してもらったら、
# なんだか、特定ソースコードに行番号付けようと
# 実行するとエラーが、、、
# 意味がわからん orz
# しかも、今のところあのソースだけ・・・
だああ 何で俺は gdb使ってなかったんだーーー
gdb、超使えるでないか!!!
もっと早く使っていれば、私の大学生活はより豊かになっていたかもしれない。

セグメンテーションエラーになった箇所を探すのに、何故、あれほどまで苦労していたんだ。gdbで実行すれば一撃でわかるではないかorz
(セグメンテーションエラーになった時点で行番号がでる)

使い方は まず、ソースを gcc -g と -gオプションをつけてコンパイルする。

あとは、

list 関数名

break 関数名(もしくは行数)

run

next (もしくは step)

print 変数名

q

みたいに使っていく。

bt や info args, info locals とかも使える。



# ちなみに、EclipseのJava用(?)のデバッガーはすごいと思います
配列の名前で起こる勘違い
C言語で初学者がよくやる勘違い

int main(void){
char a[50];
char *p = a;

p++; // ←こっちはOK
a++; // ←まったくもってNG

return 0;
}


えー、なんでー 配列の名前ってポインタじゃないのーーーー!??

と、思うと大間違いです。配列の名前は、ただ配列の先頭のアドレス(番地)を返すだけにすぎません。「返すだけ」という表現が大切です。つまり関数みたいなものです。 a と配列の名前を書けば500とかいった単なる数字が返ってくると考えましょう。すると、
a++
のところは
500++
と書いたのと同じです。
C言語はこのように数字に++を付けることはできません。


以下も不可能です。
int main(void){
char a[50];
char b[50];

b = a; // ← 無理だーー!!!

return 0;
}


上の例は、
400 = 500
と代入しようとしたのと同じです。

配列の名前は、ポインタと違って、メモリ空間を所有していません(char *p; と宣言されるポインタとはまるで別物という意味)。

main関数だけではこのような操作はしませんが、charの配列などをもった構造体などを別の関数に渡したときに、こういった操作を知らず知らずにしてしまいハマります。
線形リストのオーダー
アルゴリズムとデータ構造 連結リスト

(配列は)
右に1つずつシフト O(N)時間・・・うれしくない



線形リスト - Wikipedia

任意の位置でデータの追加・削除がO(1)時間でできるのが特長である。しかし、ソートされた配列や木構造と違い、データの検索はO(n)時間かかってしまうという欠点がある



WikipediaのO(1)というのは、配列では、データの追加・削除にともなってデータをシフトする必要があるが、リストだとシフトの必要性がないのでO(1)だと言っているようだ。

でも、どこにデータを追加・削除するのか検索するためには、O(n)かかってしまうのでO(n)+O(1)ということになって結局、データの追加・削除はO(n)なんじゃないのかと思えてしかたがない・・・

ということは、配列も検索するのにO(n)、データの追加・削除にO(n)で O(n)+O(n)となり、O(n) になって結局、どちらも、データの追加・削除にかかるコストは、O(n)なんじゃないかと思える・・・


と考えていたら、配列は検索するのにO(n)、データの追加に・削除にO(n)までは同じだが、O(n)*O(n)ではないかという意見をもらった。

配列で実装した場合、検索でfor文、その中にシフト処理がfor文となって入れ子になるからO(n)*O(n)ではないかということだ・・・

でも、入れ子とは言え、シフトが実行されるのは1回こっきりだと思うからO(n)*O(n)はやりすぎのような気がするんだが・・・・


数学むずいorz
だーぁあ これって駄目だったんだーー
だぁーー これって駄目だったんだ・・・ 浅はかだった・・・orz

int main(void){
int *i;

*i = 5; // ←エラい、こっちゃでぇえええ

return 0;
}


intへのポインタを格納する領域しか確保できてないのに、ポインタの指す領域に値を入れようとしている!! そんなことをしちゃいけないぞ!!


この人(俺)がやりたかったことは、こういうことだったのだ、

int main(void){
int *i;
int k;

i = &k;
*i = 5;

return 0;
}


もしくは、

#include <stdlib.h>

int main(void){
int *i;
i = (int*)malloc(sizeof(int));
*i = 5;

return 0;
}


いや、ちょっとこのソースでハマったわけじゃないんだが、線形リストを組んでて、おんなじ理由でハマって何時間も悩んでしまった。 駄目だ俺、、、知らないことが多すぎる。。。

# なお、今回はコンパイラをインスールしましたので
# コンパイルして確認済み
バブルソートの名称
私は頭がよくない。

バブルソートを実装しようと思った。

泡みたいにあがってくるやつだよなぁ・・・

単純に一番大きいのが、一番右にくればいいんだっけ・・・

いや、でもそれだと、バブルソートと呼ばれるものにならなかったはず・・・・

えーと、、、

バブルソート - Wikipedia

隣接交換法ともいう



隣どおし、なんにも考えずに交換していけば実装できるじゃないか!



さて、会社、会社いかんと
いまだに抽象クラスとインタフェースの違いがわからん
Javaの話なのだが、未だに抽象クラスとインタフェースに違いがわからん。

詳解Javaプログラミングによると、抽象クラスの発想を拡張したものがインタフェースであるとある。インタフェースの名称は、○○ableとなることが多いようだ。

ん~、というか抽象クラスも、インタフェースもポリモーフィズムを型安全に行いたいためにあるようにしか思えない・・・

さらに、詳解Javaプログラミングにまで、

Javaのインタフェースは他の言語における多重継承の必要性(と面倒な混乱のすべても)の代わりをしています。

とある。しかし、実装されてないメソッドをいっぱい継承したところで何がうれしんだ・・・orz


オブジェクト指向の継承 Perl講座
↑このように、実装されてるからうれしいんじゃないのか・・・orz


そもそもインタフェースがポリモーフィズムのためだけにあると思ってる発想が間違っているのかorz


# 正直、型安全という言葉の使いどころがあってるかも
# 自身がない・・・ たぶん合ってると思うのだが・・


むかし、
ビンゴ中西のほげほげ Template Methodを学ぶと!!
↑こんな記事書いたけど、なんか利点が違う気がするなぁ・・・
なんなんだろうな・・・いったい・・
ページサイズ
ページサイズについて半日調べてわからなかった・・・

そこでカーネルが武器の部長さんにお声をかけていただいた。

そこで頂いたアドバイスと、その後のその部署の新卒との会話で、ないなりの知識(Linuxは1プロセス4Gのメモリ空間とか)で判断すると・・・・


我々はC言語のアドレスについて嘘を教わっていたということになる。。。

# というか、はじめは厳密なことは教わらない


なぜ、++演算子で、ポインタは次のアドレスを知れるんだ!?
そもそも、メモリ(実メモリ)にそんなに綺麗に連続したアドレスが取れるわけがない。仮想的にメモリを考えている(取っている)から、プログラマは何も考えないでメモリに連続した空間をとっているようにプログラミングができるのか・・・・


ページを理解するのにキーとなるのは以下の等式のようだ。 

32 = 12 + 12 + 8
4096 = 2^12





まだ読んでない参考資料:
仮想記憶 - Wikipedia
そうか!コールバックは呼ばれるんだ!!
ビンゴ中西のほげほげ Don't call us. We'll call youでは、サーブレットは、コンテナから「呼ばれる」のでコールバック方式であるとあった。


そして、GUI環境であるアプレットなどのイベント駆動のプログラムも、イベントと共に呼ばれるのでやっぱりコールバックみたいだ。


J2EE入門 4章:アプレット : 富士通

アプレットではユーザの操作の結果発生する事象をイベントという概念で取り扱います。 つまりユーザが何かの操作をするとイベントが発生すると考えます。 イベントの処理はイベントリスナーで行います。 これはアプレット固有の機能ではなくJavaにもともと備わっている機能です。 あらかじめイベントごとに処理方法を記述しておくと、イベント発生時にその処理が呼ばれるようになっています。

イベントの処理を記述する仕組みはコールバックメソッドと同じです。 各処理がイベントをきっかけにして実行されるので、このような処理のやり方をイベント駆動(Event Driven)方式と言います。



やっぱり、

Don't call us. We'll call you

ということなんだ。

今回は、

「俺(ユーザ)を呼ぶな、必要なときに必要なメソッドをイベント(クリック等)で呼んでやる」

ってことか!
Don't call us. We'll call you
よいページを見つけました。

J2EE入門 : 富士通

サーブレット、そしてコンテナの思想が載っていました。

J2EE入門 2章:サーブレット : 富士通

通常のプログラムでは、全体はプログラマーが作り、特定の機能をライブラリ(部品)に頼るという構造が普通です。 これに対し、全体の枠組みが提供され、その一部をカスタマイズして望む機能を実現するやり方があります。 これをコールバック方式と言います。 このやり方は英語では Don't call us. We'll call you. と表現され、高慢なプロデューサの言葉になぞらえて「ハリウッドの法則」と呼ばれることがあります。



そうか!コールバック方式は今までのプログラムの作り方と発想が違うんだ!!!

「printf( ) を呼んでくれるな、お前の書いたprintf( ) を呼んでやろう」

ってことか。

やっと、「Don't call us. We'll call you」の意味がわかった!
だから main がないんだ!!
値が、関数またメソッドに渡されるとき
C言語の記事が続いたので、ついでに書いておこう。

C言語で関数に渡される値は、全部コピーだ!コピー!!

「参照渡し」とか「値渡し」とかあるけどコピーと覚えときゃ問題ない。
てか、コピーって覚えておかないと逆にハマる。


ちなみにJavaのメソッドに渡されるのも全部コピーだ!
でもJavaは、ほとんど参照なんで、コピーといっても参照先がいじられるから さほど気になる時はない(?)


# てか、全部とか そんな強い言い切りしていいのか俺
# たぶん問題はないと思うが・・・


で、この知識がなんでいるかっていうと関数の中のやつらは、関数抜けたと同時に消滅しやがるんだよ。この事実とても大切。

あと、コピーは「代入」と、とらえなおすともっとわかりやすい。
代入されたほうの値をいくら変えたところで代入した値は変わるわけがない。
ファイルポインタ と ファイルディスクリプタ
ファイルポインタ と ファイルディスクリプタ

ファイルポインタのほうがプログラマは楽ができる。

# 実はこのあたり、あんまり詳しくないまま卒業してしまった・・・
printfデバッグしたいなら
pintfデバッグしたいなら、改行コード(\n)を入れた方が吉である。

もしくは

perror 

を使うか、

fprintf(stderr, 以下略)

だ。

なぜなら、printfは行バッファリングするので、もしプログラムが途中で死んだ場合にバッファにたまった内容を表示してくれないときがあるからだ。

以下のソースを試してみるとおもしろいだろう。

# ちなみにコンパイルしてません・・・(手元にコンパイラが)
# なぜかbcc落としてこようと思ったら超時間かかりそうだったし・・・

#include <stdio.h>

int main(void){
printf("aaaa");
perror("bbbb");

return 0;
}


#include <stdio.h>

int main(void){
printf("aaaa\n"); // \n に注目
perror("bbbb");

return 0;
}




以前に書いた記事:
ビンゴ中西のほげほげ 行バッファリングを体験してみよう
Cymbalsよい
070624_1039~01.jpg


特に「午前8時の脱走計画」がよい。

できることなら脱走したいw



404 Blog Not Found:好きを仕事にするな、仕事を好きにしてしまえ

・・・頑張るか

しかし、俺はなんのために雇われ、なんのために必要なのか。。。。
1年間くらいは、まず答えがでないだろう・・・
だあー
だあー。知らんかった。

書店で TomcatやStrutsやら関係、買おうかみてたんですが、

JSPってコンパイルされるとサーブレットになるのか!!!!!!!!!!!!!!!



じゃあJSPから学ぶんじゃなくてサーブレットから学ばないと!!!!!!!!!!!!!!!!!!!!!!
ああ
ああ、俺、今までこんなにきっちりソフトウェア開発したことがねぇ。。

ほとんどドキュメント作成や、設計じゃなかろうか。

てか、速度速くねぇか。怒涛のように学んでるんだが・・・


部署配属して間もない課題が、
日本最大級のデータベースの本番環境が対象で、でもってJavaでスレッドが走りまくって設計書(仕様書?)も書きまくるってこれって普通なのか・・・

でもって3人と神とで速さ勝負って・・・・・


きついorz
日付回って本日
ちょっと社会見学にいってきます。
# ハードディスク2枚と共に「直行」です




Java島に漂着してから今日で何日目ですか・・・
本が読みたい
けど、寝たほうが無難だ・・・・

そしてなんで今日300アクセス超えてるのかまったく理解できない。。。
うごいたぁあ!!
スレッドの数がものすごいことになっているが、
動いたので今日は定時帰りだ。よくやった。俺。

やっと風呂に入れるw つらかった・・・
神のソースを読み終えたので
さて、わが部署のJavaの神様(でもわが部署、最年少)のソースを読み終えたので改良作業(高速化作業)に入ってます。

Javaの醍醐味である「再利用」のやりかたがわからないので、どんどんソースが汚くなる。

3人がかりで毎日読んだが、どうやったらあんなコードが書けるんだ、、 どこにも載ってないぞあんなの!

こんなソース、講習とかじゃ絶対読めないよ。会社じゃないと絶対ありえん。などとありがたがって毎日読みました。 よく理解した(理解したつもりになった)と自分たちを誉めておこう。



Jakartaとデザパタのオンパレードだった
天才過ぎるよ・・・orz

いや、ホントよく読んだよ。疲れた(泣)



そもそもJakartaは初耳だったし、
デザパタ、会社入る前の春休みにやっといてよかった・・・


残念ながら、私は凡人なのだ 努力でしか勝負できない。。。
・・・
Webエンジニアやってます

システムエンジニア
流星ビバップ
オザケンばっかり最近聞いているのだが、

「流星ビバップ」がカバーされていて驚いた。

ビバップとは - はてなダイアリー

それにしても ビバップってこういう意味なのね。
タコライス
タコライスにはタコは入っていないorz

タコライス - Wikipedia
Javaの例外処理
Javaは例外を処理してないと、コンパイル時に怒ってくれるという素晴らしい仕様なのだが、プロトタイプ的にこれって動くのだろうか?と思って小さいプログラム書いても try catchがありませんって怒られた。。。

てか、例外処理をしてないとコンパイル時に怒られるの知らないと対処できないし。。。

オライリー読んどいてよかった。


そういえば、
try catchのせいで、インデントがひとつ深くなって可読性に欠けると、ちょっと前文句をいってみたら、○○言語学んでみるとよいよと教えてくれた。

○○はあとで追記予定(OCamlだったけ・・・)。

追記:
Rubyは例外処理でもインデントが下がらないらしい。


てか、毎日、超しんどい
料理中の味見は大切
料理の味見は

 「とりあえず動かしてみて、駄目ならデバッグ」

ってことですか 


 「ここまで動くかな」

みたいな

 「あ、おいしくできてる」

みたいなw

 「あ、セミコロン抜けた」
 「あ、塩入れるの忘れた」

的なものか。
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

05 | 2007/06 | 07
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

ブロとも申請フォーム

この人とブロともになる

| ホーム | 次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。