2011年2月28日月曜日

文章と僕とロジカルシンキング。

「文章を書くのが上手」と言われる。
その実感が私にはない。

というより、書けない方が不思議なようにも思える。
自分から見て自分のレベルは相当低い。
(文章的な部分で)

知人から「どの辺が良いのですか?」ときいてみたところ、
「とても、論理的思考ができている」といわれた。

論理的思考。世で言うロジカルシンキングなんですが、
今日までその意味を知らなかったのですよね、私。

ロジカルシンキングとは、難しい現象などを分かりやすく他人に構造化して説明できる思考回路だそうです。
言われてみれば、たしかにそれはできております。

が、私の文章は下手で仕方ない。
ちなみに発声言語はもっと苦手。喋るのは苦手。
本屋で「文章の書き方」というものを眺めてきたのだが、
自分が書いている文章とは全く手法が違うので戸惑ってしまった。
どの本をめくっても、自分と同じような手法で書いている本がない。

「文章がとても上手だから、きっとプログラミングもうまくなる」といわれた。
色々な人からこれは言われる。
この言葉、じつはしっくりこないのである。

私の思う「プログラミング手法」と「文章を書く手法」はすごく違うからだ。

同じにできれば、今よりもっと強くなれるのだろうけど。
相当頭をひねってださないといけないので疲れてしまう。
ひねればひねるほど、「不思議ちゃん」って言われてしまうのだよな。

ひねる時間があればあるほど、私がどんどん不思議ちゃんになっていくような。

うーん・・・。


一度でいいから
自分の言うことを笑わずに聞いてくれる人に会ってみたいのである。
そんな人がいたら、きっとその人は仏かなにかだろうな。

2011年2月27日日曜日

また忘れ物・・・いまはやりのfacebookはじめたよ。

さっきのに書き忘れたけど
まぁ、話題があれなんで
別記事にします。

facebookをはじめました。
周りがどんどんはじめているので
影響されて。

本名晒しで
超はずかしいです。
本名知ってる人はこぞってどうぞ。
リアルでのつながりがほしい人っていうのがはじめるそうなので、
リアルで知り合いたい人はこぞって友人登録して下さい。

わりと繊細なのでからかい半分とか
変な目的はやめたげてください。傷ついちゃうので。

ちなみに私はまだ映画のあれはみてません。
興味がないのですよね・・・。
っつか、映画館ってひとりでいくのは嫌です。
寂しいからとかそういう問題ではなく、
上映後にふらふらしてそのへんですっころぶのが恒例なので付添が必要なんですよね。

忘れてましたが

先週の話をすっかり書き忘れてました。

先週、「Dell Streak」を購入しました。
なんつか、かっとなって(笑)

そのあたりのことはコラムにかいてみました。

「DELL Streak」という、甘美な響きに打ち抜かれて


通信料の関係でまだそんなにいじってないんですけどね。
ついでに無線環境も整えました。

やっぱり、大きい端末って素敵だなとおもうのです。

他、お知らせですが、
アスキードットテクノロジーズに執筆しました。
よかったらどうぞ。

かってくださいー。

電化製品といえば
ビックカメ○でお買いものしてきました。
ペンタブレットとデルさんのケース。

デルさんのケースはかっこいいのがなかったので
ちょっと「むー!!」ってなりました。

まぁ、しょうがないよね。

さて、明日からまたC言語の勉強するかなぁ・・・。

アプリ「とげとーく」をリリースしました。

せっかくの休日なのでアプリケーションをつくってみました。

なんつか、しょぼくてすみません・・・。



とてつもなく脱力系の絵・・・。さすが画伯(笑)
TTSを使用して、なんちゃって日本語で感情を表現するアプリです。

使い方
1.場所をおす
2.きもちをおす
3.はなすをおす

すると、なんとなく感情を表現した「なんちゃって日本語」がしゃべります。
TTSが日本語に対応してないので「なんちゃって」になるのは御愛嬌です。

TTSの使い方としてはそんなむずかしいことはしてないのでソースコードは割愛。
(要望があればアップしますが)
時間がなくて「せつめいしょ」が実装できなかったのでまた来週にでも。

なんでこんなアプリをつくったのかといいますと・・・
まぁ、それは秘密ってことで。

ソースコードよりも絵を描く方が時間がかかりました。

余談ですが「?」と「?」をえらぶと「助けて!!」となります。



実装面でお手伝いをしてくださった先生に感謝。
来週先生に会うので、もうちょっとアドバイスをもらってきます。

2011年2月7日月曜日

さっきの続き

Twitterでたくさんの愛の鞭・・・
いや、ツッコミをいただきました。

えっと、そんなわけで修正したのですが、
ラストのコード、\0がコピーされてませんね。
for文にすればいいのだとおもうのですが、
すいません、目が限界のようなのでそろそろ寝ます。

また明日。
チャオ★

おい・・・。


えっとですね、ツッコミはすごくありがたいのです。
現実世界でもありがたいのですが、ネットもこんなにありがたいとは!!感動です!!
容赦なくお願いします。
あ、氏ねとかはやめてあげてね。なんていうか、こう・・・温かい目でおねがいします。

ありがとうございます!!

いただいたツッコミを返せるまでがんばります!!

2011年2月6日日曜日

C言語の文字列コピーが危険でござる。

前にもちろっと書いたと思いますが、C言語の勉強をしております。
C言語のむずかしいところっていうのは
概念が
「アドレス」
っていうところですね。
「アドレス」と「値(AとかBとかの値)」だと扱いが違うので
頭の中がこんがらがってたまに「うはー!!(汗)」ということがおこります。
うはー!!ってなによ?と思われそうですが、値をいれたいのにアドレス入れちゃったとか
アドレスに変な値をいれて変なアドレスになってしまう
つまり
メモリ破壊が発生します。

今のパソコン様はかしこいので壊れないですが、昔のものはちょっと危ないそうです。
昔といっても、相当昔なのであんまりこのへんは考えなくてもいいです。が!!
メモリに厳密にならないといけない世界では超重要な世界です。
これを理解しないと、いかんみたいです。C言語は。

というわけで、
身近なところからせめていくわけです。
文字列コピーが危険というお話しをします。でも知識がにわかです。
って言い訳をして逃げるあたりがかっこわるい。

C言語における文字列の扱いは難しいです。
文字型の配列を使用する もしくは 文字型のポインタを利用するしかないです。
(って考えると、JavaのString型って本当にありがたい)

問題なのが 配列 は 値
ポインタは アドレス

というわけで「概念」が違うのです。この違いって話すとむずかしいっつか、
私もよくわかってない箇所が多いので、
日本語と英語ぐらいにおもってください。
故に、これはダメな例です。

#include

void main() {
char work[5] = "ABC";

char *copy;

/* これ、大変 */
*copy = work;

printf("orignal:%s",work);
printf("copy:%s",copy);

};


コンパイルエラーで怒られます。なぜか?
アドレスに値を渡そうとしているので通じないのです。
英語の人にひたすら日本語で話しかけてる感じですかね。通じません。

だから、コピーの際には翻訳が必要になるのです。

配列にあわせてやるとか、ポインタにあわせてやるとか。
で、ここで登場するのがstrcpyという関数。

C言語は文字列コピーの際にstrcpyという関数を使います。
軽く書いたらこんな感じです。

#include
#include

void main() {
char *work;
work = "ABC";
char copy[50];

/* strcpy (char *s1,const char *s2)
/* *s1:複写先
/* *s2:複写元 */
strcpy(copy,work);

printf("original:%s\n",work);
printf("copy:%s\n",copy);

};


コメントでちょこっとかいてますが、これ、アドレスをコピーするんですよね。
が、このstrcpyとやらはやっかいなことに
「コピー先のこと、考えてません」

ためしにさっきのコードをこうしてみましょう。


#include
#include

void main() {
char *work;
work = "copy de copy";
char copy[10];

/* strcpy (char *s1,const char *s2)
/* *s1:複写元
/* *s2:複写先 */
strcpy(copy,work);

printf("original:%s\n",work);
printf("copy:%s\n",copy);

};


コンパイルは通りますが、実行したら即終了します。
コピー元のほうが、コピー先より大きいからです。サイズが。
strcpy関数はこれを考えてないので死にます。

そういう時の回避としてstrncpyを使用します。

strncpy(copy,work,10);

最後に「サイズ」を指定するので死ぬことは防げます。
かしこいことに、大きくても、文字列の終わりである「\0」は絶対確保してくれるので元が長くても少なくとも落ちることはありません。
が、変な文字にはなります。サイズはあたまにいれておきましょう。

「って、おめー!!文字数がきまったぶんだけってのはむずかしいべや!!」(何弁?)

ってもあるかとおもいます。
そういう時は、strcpyを自作すればいいだけです。ちょっとめんどいですけど。
要するにコピーなんで、
配列を1文字ずつみてやって、アドレスに渡してやればいいだけですね。
で、終了文字がやってきたら、終了すればいいのです。
コードにするとこう。

文字型同士(値同士)

#include

void main(){
char work[50] = "ABC";
char copy[50];
int i;

for(i = 0;work[i] != '\0'; i++) {
copy[i] = work[i];
};

printf("orignal:%s\n",work);
printf("copy:%s\n",copy);

};


ポインタと値でやってみた。

#include

void main() {
char *work;
work = "ABC";
char copy[10];
int i;
int j;

for(i = 0;work[i] != '\0';i++) {
copy[i] = work[i];
};

printf("orignal:%s\n",work);

/* \0までコピーしているので、直前の長さまで表示 */
printf("copy:");
j = 0;
while(j < i) {
printf("%c",copy[j]);
j++;
};
printf("\n");


};


上記2つは厳密には間違いですね。
だって、strcpy関数はポインタとポインタを渡すので
(アドレスをわたすってことね)
というわけで正しく書くと・・・


#include
#include
#include

void main(){
char *work;
char *copy;
int i;

work = "ABCDEFGHIJK";
copy = malloc (strlen(work) +1);

i = 0;

while(work[i] != '\0') {
*(copy+i) = *(work +i);
i++;

};
printf("orignal:%s\n",work);
printf("copy:%s\n",copy);

free(copy);

};


となります。
じつはこれ、もうちょっと簡単にかけるってことを
コード書いた後に調べて愕然としました(涙)
苦労したのに。
mallocとか
値とアドレスの渡しにはつまづかなくて、ずっとおちてたのは
iの初期化を忘れてたという
超凡ミス・・・。
だって、サクラエディタでやってるしなぁ・・・。

さて、

スペシャル簡易コード、
そのあたりは
このページの下のあたりにのってます。ご参考にどうぞ。


あー、それにしてもこういう時間は楽しい。本当はsplit関数自作したかったぜ。


追記
最初のコードと最後のコードにミスがあってツイッターでフルボッコにあったでござる。
文字列ってこわいわーね。

最初の copy = work はただしいので通ります。
*copy = work がとおりません。

orignalのスペルちがいました。originalですね。英語だめっす!!

えーと、最後のコード、mallocしているので
最後にfreeが必要です。

みなさんありがとう。


まだまだつっこみがきた。
sizeof って()つけたらだめなんですね。
そしてsizeofでなくて、文字数とるならstrlenなんですね。
あう、string.h使わないとだめなんか。あうあうあ。

ご参考 → http://www.ne.jp/asahi/hishidama/home/tech/c/sizeof.html

あと、最初のところ、アドレスに値を渡してどーん!!ですね。


ツッコミ歓迎ですー。勉強になるので!!
@morihimeまでどうぞ。

・・・でも「初心者しね」とか言わないでね(けっこう凹むんで)

Android3.0 Preview SDK がおとせるようになってた。

今日、某仕事の調査のためにSDKのダウンロードエラー画面を
キャプチャしようとしたら
SDKがおとせるようになっていた。

ので、さっそくおとした。

ちなみにおとしかたですが、
SDK Managerからじゃないとだめみたいです。
公式にはおいてないので、AVDのメニュー開くなりなんなりして
アップロードみたいなかたちでやらないとだめみたいです。

さて、今からさわってみよう。

2011年2月1日火曜日

睡眠不足はよくない

疲れているので(いろんな意味で)
いいかげん眠らないと・・・とおもうのだが、神経が高ぶって眠れない。
そしてプログラミングやら書類の整理も手につかない。

まぁ、私は慢性的な睡眠不足なのでこういうときにやっていることをご紹介しようかと思う。
難しいことを考えるということ。

というわけで今日のお題は
なんとなくで目についたこれ。
「富士山をどう動かしますか?」という問題の回答。

まっさきにうかんだのは
「富士山」から「富士山」という概念を消し去る。
つまり、人々が思っている「富士山」というものを頭から消し去る。
まぁ、もっと具体的に言うと
阿蘇山と富士山の名前を交換する
ということ。

法律をひとつだせばすむこと。
偉い人が
「明日から阿蘇山を富士山と呼びなさい。
 代わりに富士山を阿蘇山と呼びなさい」
と、おふれをだすだけでつぎの瞬間から阿蘇山は富士山になるので
富士山は「論理的には」動いたことになる。

自然物質を(しかも山と言う壮大なもの)を動かすよりも偉い人を一人動かす方が楽なように感じる。

と、言う話を今日、知り合いにしてみた。
「あなただったら富士山をどう動かす?」
と。
さまざまな回答でおもしろかった。

たまにこういう会話で遊びたくなる。自分以外の思考を知るのは楽しい。
特に最近は学ぶことが多いのですごく楽しい。
プログラミングを学ぶことも楽しい。
いろいろな人を知ることが楽しい。

さて、先程の話に戻るが、
偉い人の一言で世間の常識が変わる。
まぁ、法律や常識というものが世の中に存在するから
(これを制約というかは知らん)
可能なことであるんだが。

まぁ、自然物質に人間がつけた名前がついている時点で
制約が生じるのだけどね。

あぁ、柄にもなく難しいことかんがえちゃった。
ちょっと神経がおさまってきたかな。

私は一定時間以上のすいみんが確保できないとキャラが崩壊するらしい。


「あなたは自分の世界を大切にするね」
といわれたけど。
うーん、これは褒め言葉とは受け取れない・・・素直じゃない私はやっぱり眠い。


あ、ちなみに「富士山を~」のやつは
マイクロソフトの面接ででてくる問題だそうだ。ビルゲイツについて調べていたらでてきたんだよね。ひっかかったけど回答は見てない。興味ないから。


関連で思い出した。
ピザ屋が3人並んで走っているのはなぜか?
それはピザ屋が窃盗をしているからだよ。

うー、どの記憶だったかな。ねむい。