細かいことは気にせずに。ただただ、コードを打つ。
今月18日に、基本情報試験が終わってから、すぐに買いに行った「RailsによるアジャイルWebアプリケーション開発」という本を着々とこなしています。これまで色々な本を買ってきましたが、自分のやりたい事(Web開発)の本なので、いつも以上にスラスラ進みます。(iPhoneかWebかといわれれば、Webの方が好きかもしれない・・・。)
全28章+付録という濃密な本です。ページ的にいうと、600ページはくだりません。現在読んでいるところは第6章。第15章までは楽しくやれると思うのですが、その先はRailsの解説が続くので果たして完読するかは怪しい感じです。
さて、じゃあ第15章まではRailsの解説ではないのかというと、違います。初めてRails・Rubyを触る人のために楽しく、詳しく、丁寧にオンラインショッピングのサイトを作るのです。
Rubyの良さなのかRailsの良さなのか分かりませんが、本当にコードを書くことなく、Webサイトになっていくのです。さしあたって、今までに書いたコードは100行も、50行も無いかもしれません。これがRuby on Railsの良さなのかもしれません。Rubyはプログラミングが楽しく感じる言語のようですが、まさに今楽しいです。明日学校に行かなくて済むなら徹夜するレベルです。マジで面白いのです。本当です。(僕の友人に、”DXライブラリ”でプログラミングの面白さを知ったという人を二人程知っているのですが、それのWeb版といったところです。)
そして、コーディングを楽にさせてくれる”エディタ TextMate”には大感謝です。Cやその他の言語でもお世話になるとおもいます。
iPhoneにインストールしたTodoアプリ達
iPhoneを使い始めてから、三ヶ月目となりました。様々なアプリを試してきたので議事録的に残します。
スケジュールやタスク管理はiPhoneの得意分野です。個性的なアプリ達がAppStoreで購入可能ですが、あくまでも学生の身分です。必要最低限の機能さえあれば事足りるのです。いろいろなサイトで調べながら結局、domo Todo+とiTask Timer、そして純正のカレンダー.appをしばらく使うことにしました。
まず、domo Todo+です。国産のTodoアプリでコストパフォーマンスの良さやGoogleカレンダーとの同期、見やすさの良さで選びました。domo Todo+は多くのサイトでも賞賛されています。実際に使えば分かるのですが、多少重めのアプリで、アプリ上の「タグ登録」はGoogleカレンダー上では”場所”として登録されます。見やすさや使いやすさは良いです。Todo系で有料アプリはdomo Todo+しか購入していないのでなんとも言えませんが、良質のアプリで間違いはないです。
続いて、iTask Timerです。これはTodo系のアプリでも異色のモノとなります。詳しくは他のサイトで確認する方がわかりやすいでしょう。簡単に説明すると、自分のタスクに作業期限ではなく作業時間を与えるというものです。「この作業は2時間で終われるかなあ」と言った具合にタスクの登録をしていきます。このアプリもGoogleカレンダーと同期ができます。その作業が実際に何時から何時間かけて行われたかというデータを同期をするみたいです。
さて、最後のカレンダー.appです。カレンダー単体のアプリは意外にも数が少ないので思い切って純正appを使います。もちろんGoogleカレンダーと同期が可能です。(同期するには多少イジる必要があります)使い心地はいいです。iPhone購入時から使ってきたのでかなりいい感じです。ずっとiCalと同期させてきましたが、Googleカレンダーと同期させる方が得策です。iCalの場合はMeに入会しない限り、母艦に接続しないとカレンダーが同期されません。すなわち、ネット経由の同期はしません。今回、Googleカレンダーの同期はネットを経由するので、母艦に接続することなく同期します。
他にもよく使うアプリとして、EvernoteやDropBoxなどなど。この二つはオンラインストレージだったりします。EvernoteのデータはiPhone上で編集可能ですが、ストレージ容量が50MBほどです(無料版の場合)。DropBoxの場合はiPhone上の編集は出来ませんが観覧は可能です。ストレージ容量は2GBです。用途によって使い分けてます。
しばらくこれらのソフトで様子を見てみます。
超・ファイル入出力
fprintfとprintfの違いを知った今、もうprintfを使う機会は無いです。
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFFERSIZE 4096 int main(int argc, char *argv[]) { FILE *fpin; FILE *fpout; char buffer[BUFFERSIZE]; if (argc == 3 && (strcmp(argv[1],"-")) == 0 ) { //第一引数が"-"なので、書込ファイルを第二引数から受け、標準入力を出力する if ((fpout = fopen(argv[2], "w")) == NULL) { fprintf(stderr, "%s : Error.\n",argv[2]); } else { while (fgets(buffer,BUFFERSIZE,stdin) != NULL) { fprintf(fpout,"%s",buffer); } } } else if (argc == 3 && (strcmp(argv[1],"-")) != 0) { //第一引数を入力で読み込み、第二引数を書込として読み込む。 if ((fpin = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "%s : Error.\n",argv[1]); } else if ((fpout = fopen(argv[2], "w")) == NULL) { fprintf(stderr, "%s : Error.\n",argv[2]); } else { while (fgets(buffer,BUFFERSIZE,fpin) != NULL) { fprintf(fpout,"%s",buffer); } } } else if (argc == 1) { while (fgets(buffer,BUFFERSIZE,stdin) != NULL) { fprintf(stdout,"%s\n",buffer); } } else { fprintf(stderr,"Error!\n"); } fclose(fpin); fclose(fpout); return 0; } |
自作atoi関数
C言語には、atoi関数というモノがあります。ポインタの練習のために、自作atoi関数を作ってみました。
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 31 32 33 34 35 36 37 | #include <stdio.h> int _atoi(char *s); int main(int argc,char *argv[]) { int j; int sum = 0; for (j=1; j<argc; j++) { sum += _atoi(argv[j]); } printf("\n%d\n",sum); return 0; } int _atoi(char *s) { int result = 0; while (1) { if (*s >= '0' && *s < '9') { printf("%d",*s-'0'); result = (result * 10) + (*s - '0'); s++; } else if (*s == '\0') { printf("\n"); break; } else { printf("不正です。\n"); return -1; } } return result; } |
ポインタ超入門
よく爪突くといわれる、ポインタです。ポインタを単独で覚えようとしても覚えにくいので、配列と一緒に覚えるのがよいと思います。
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 | #include <stdio.h> int main(void) { char str[] = "bino98"; char *sptr; int i; //配列で表示する方法 for (i=0;i < strlen(str); i++) { putchar(str[i]); } putchar('\n'); //ポインタを使い表示する方法 sptr = str; while (*sptr != '\0') { putchar(*sptr++); } putchar('\n'); //配列自身をポインタとして扱う printf("%s\n",str); //おまけ sptr = str; printf("%s\n",sptr); } |
配列とポインタは切っても切れない関係なんですね。
文法はいいんだけど、アルゴリズムがあまり進んでいない気がする。近いうちに、ソッチ系の本を買うことにする。
文字列の中から一文字探すというプログラム。ポインタを使って書いてみる。
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 | #include <stdio.h> #define BUFFERSIZE 1024 int main(void) { char str[] = "ABCDEFGHI"; char *x = str; char s[BUFFERSIZE]; if (fgets(buffer,BUFFERSIZE,stdin) != NULL) { while (1) { if (*x == s) { printf("Hit!\n"); break; } else if (*x == '\0') { printf("Not Found\n"); break; } else { x++; } } } return 0; } |
一つ覚えておきたいことは、アドレスのインクリメントはデータ型一つ分をプラスするということ。
超・Ruby入門
旬のプログラミング言語といえば、ズバリRubyでしょう。
ただの気まぐれで、Rubyを触る・・・のではありません。”情報システムの開発”という学校の授業でWebアプリの開発をすることになりました。そこで、どんな言語を使って作ろうかと考えた結果、Ruby on Railsとなったのです。
(”課題研究”ではC++?とOpenGLを使ったシューティングゲームづくり。パソコン甲子園のためにもC、C++共に勉強しているのです。)
(na-toi君と一緒に作るWebアプリは、ぜひRuby on Railsがいい!と勝手に思ってます。見てるかな?)
Ruby on Railsを触る前に、Rubyを知らなければいけない。そのためにも、Rubyを壱から勉強しているのです。よし、がんばるぞー。
てわけで早速、最も簡単なRubyプログラムを作ってみました。
1 2 3 4 5 6 | filename = ARGV[0] file = open(filename) while text = file.gets print text end file.close |
という具合。ファイル名はfile_print.rbとします。
実行するときは、保存先カレントディレクトリに移動してから、ターミナルで
$ ruby file_print.rb <テキストファイルの名前> <テキストファイルの中身>
でおk。
Cでバブルソート
アルゴリズムで基本中の基本である「バブルソート」をC言語で書いてみるとこうなりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> int main(void) { int a[5] = { 2, 3, 5, 4, 1}; int i, j, w; for (j=0; j < 4; j++) { for (i=4; i > j; i--) { if (a[i-1] > a[i]) { w = a[i-1]; a[i-1] = a[i]; a[i] = w; } } } for (i=0; i<5; i++) { printf("%d",a[i]); } putchar('\n'); return 0; } |
a[4]からa[0]を比較し、最終的にはa[0]に1が収納される。a[0]が確定するので、次はa[4]からa[1]を比較する。それが、jのforループ。
iのforループが実際の比較を行うループで、aの添字が4から3、3から2へと変化していく。
プログラミングはじめの一歩
文字列の長さの比較。長さが等しい場合は初めの一文字のASCIIコードを比較する
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 | #include <stdio.h> int main(void) { char str1[] = "TestStirngNow."; char str2[] = "TestStirngnow."; int i=0; if (strlen(str1) < strlen(str2)) { printf("長いのはstr2です。"); } else if (strlen(str1) > strlen(str2)) { printf("長いのはstr1です。"); } else { while ( i < strlen(str1) ) { if (str1[i] < str2[i]) { printf("アスキーコードにより、str2です。"); break; } else if (str1[i] > str2[i]) { printf("アスキーコードにより、str1です。"); break; } else { i++; } } } if (i == strlen(str1)) printf("文字列は同じです。"); return 0; } |
なんたって、基本情報。
Posted by bino98 in 基本情報技術者への道 on 2010年4月3日
先日、ブログにも書きました。この春中に国家資格を取得しないと国公立大の推薦は通らないようです。あれ、これって、ほんと瀬戸際ですよね。僕。
(ただ、浪人にはなりません。それは保証されてます。)
今日から地獄のような16日間をはじめます。
まず、現時点で致命的に分からない基本情報の出題範囲
- ハミング符号
- 木構造(特に探索法)
- アルゴリズム(ブログラム書いてる人には余裕みたいですが。。)
- 平均故障間隔etc
- 統計と確率
- その他
逆に余裕のあるところ
- ハードウェア
- ネットワークとセキュリティ(すこし怪しめだけど
勉強したところ
- 論理回路、シフト演算
- データベース
- プロジェクト管理
- ネットワーク(特にCisco CCNA1の勉強の時に)
がんばるでええ。
で、ちなみに今日やったところは、データ構造とアルゴリズム。完璧にしてやりますよ。クッソ・・・。
