悩み[プログラミング]

初めてプログラムを書いたとき、期待した動作が出力されなかった。
そんなときはprintfで動作を確認していけば原因がわかると教えられた。

今度は、コードが長くなってきて可読性が悪くなった。
関数に分けたらコードを機能ごとに分割できて読みやすくなるよと教えられた。

コードが大規模になってきて、ふとしたときに今まで動いていたコードが動かなくなった。
そんなときはgitでバージョン管理しておけばもとに戻せていいよと教えられた。

こんな感じに「printfデバッグ(?)」「関数」「git」といったような
"単語"と"使われる場面"をまとめた場所があればいいなぁと思った。

こういう現象に困ったときはこんな単語で調べればいい、みたいな場所。
どっかにないのかな。

Terminalのvim上でノーマルモードに戻るとき入力も半角に戻す

一年ぶりぐらいにブログを書いてる気がする。

便利そうなのでメモ。

参考にしたサイトのkeyRemap4MacBookを使った、Terminal上でESCを押したらESC+半角機能は簡単にできた。Controlを空打ちしたときだけESCの代わりになるようしてたのでControlのほうも半角英数機能を持たせたい。それでなんとかしたのが下のコード

<?xml version="1.0"?>
<root>
    <list>
        <item>
            <name>LeaveInsMode with EISUU(Terminal)</name>
            <identifier>private.app_terminal_esc_with_eisuu</identifier>
            <only>TERMINAL</only>
            <autogen>--KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
            <autogen>--KeyOverlaidModifier-- KeyCode::CONTROL_L,ModifierFlag::CONTROL_L |
                ModifierFlag::NONE, KeyCode::CONTROL_L, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
        </item>
    </list>
</root>


参考
Vimで挿入モードから抜ける時に英数入力に切り替える - ✘╹◡╹✘
http://r7kamura.hatenablog.com/entry/20110217/1297910068

https://github.com/tekezo/KeyRemap4MacBook/blob/version_8.0.0/src/core/server/Resources/include/checkbox/samples.xml

とりあえずC言語のブラッシュアップ3

21:http://homepage3.nifty.com/mmgames/c_guide/15-07.htmlの配列の[]について

配列を宣言する時には、[]で要素数を指定し、
配列の要素を使う時は、[]で番号を指定するのですが、
実は、この2つも全く別の記号です。
宣言時の[]は要素数を指定するという意味を持ちますが、
数式の中で使用する[]は、アドレスに足し算する演算子です。

[]について理解をごっちゃにしてたけど言われてみたら確かに意味が違うよなぁ。


22:異なる型の変数をまとめる - 苦しんで覚えるC言語について
構造体は数回書いただけだから抜けてるなぁ。typedef structで宣言するとかすっかり忘れてた。使うようになれば自然に覚えられるはず、かな。


23:配列を自由自在に作る - 苦しんで覚えるC言語の動的配列、ヒープについて
一度宣言した配列の要素数を変えられるなんて全然知らなかったので「ほーっ」と思いながら読んでた。いつか使いそうだけども今は使う宛が無いから概要だけ把握して必要になったらまたここに来て勉強し直せば大丈夫そうかな。


24:最小限の分割 - 苦しんで覚えるC言語について
ここも使うようになれば覚えるだろう。使わなきゃ覚えなくていいだろう(だんだん適当になってきた



とりあえずひと通り見通したし次はiPhoneアプリのサンプルコードをいじいじしていこー。

とりあえずC言語のブラッシュアップ2

ブラッシュアップ1に続いて2。まだまだ知らないことがたくさん。


11.配列の使い方 - 苦しんで覚えるC言語の配列宣言時の初期値代入について
"配列の要素数よりも少ない場合、残りには全て0が代入されます"の部分。今まで何も入ってないんだと思ってた。


12.配列の使い方 - 苦しんで覚えるC言語の配列のサイズを求めることについて
"配列全体のサイズを求め、それを要素1つのサイズで割れば要素の数がわかります。C言語には、変数や配列のサイズを求めるsizeof(サイズオブ)演算子があります"の部分。javaみたいなlengthはCに無いと思ってた。これはint型だと4byte取るってことなのね。


13.配列の使い方 - 苦しんで覚えるC言語のmemcpy(コピー先配列名、コピー元配列名、配列全体のサイズ)の存在
配列のコピー時に。便利なのでそのうち使いそう。


14.文字の扱い方 - 苦しんで覚えるC言語のprintf("%c", 65)ところ
この結果がどうなるか分からなかった。


15.文字列を扱う方法 - 苦しんで覚えるC言語の'\0'がEOSについて
文字の扱いにおいてEOSは忘れてたら駄目そう。


16.文字列処理関数 - 苦しんで覚えるC言語のsprintfについて
φ(._.)メモ : 文字合成に使用できる万能関数,sprintf(結果を記憶する配列,書式文字列,各種変数・・・)


17.メモリの仕組み - 苦しんで覚えるC言語32bitコンピュータの意味

CPUは、メモリのデータの何個かをひとまとめにして取り扱うことは説明しました。
そして、現在のコンピュータは、多くが32個をひとまとめにして取り扱っています。
これを、32ビットコンピュータと呼ぶわけです

今まで32ビットコンピュータ、64ビットコンピュータって使ってきたけどこういう意味だったんだなぁと理解できた。


18.アドレスを記憶する変数 - 苦しんで覚えるC言語のポインタについて
ポインタ型、ポインタ値、ポインタ変数の区別がこれを読むまで出来ていなかった。


19.引数による情報の受け渡し - 苦しんで覚えるC言語の&付きで呼び出していた関数について
&付きで変数を扱っていた関数、scanfにはアドレスを渡して変数の中身を操作していたこと。理解が薄かった。

20.引数による情報の受け渡し - 苦しんで覚えるC言語関数の引数におけるポインタの扱い
次の3つは同じ意味の仮引数宣言になること。これは、配列ではなくアドレスを渡しているから。

int getaverage(int data[10]);
int getaverage(int data[])
int getaverage(int *data);

ブラッシュアップ3に続く。

とりあえずC言語のブラッシュアップ

iPhoneアプリ作る前にオブジェクティブCやる前にC言語をパーッと復習しよう、ということで
苦しんで覚えるC言語 - 苦しんで覚えるC言語
を最近読んでます。


以下ちゃんと理解してなかったところ、知らなかったところ。


1.改行文字 - 苦しんで覚えるC言語の\tの存在
主にprintf関数で表示結果を綺麗にまとめる際に使う。こういう表示ができるんだなぁ。知らなかった。


2.数値の桁揃え - 苦しんで覚えるC言語の%05dの存在
例えば%dの、%とdの間に数字を入れて桁数を綺麗に表示する方法があることは知ってたけど、桁数の前に0を入れる表示する方法は知らなかった。場合によってはこっちのほうが見やすいかもな。


3.比較を行う文 - 苦しんで覚えるC言語if文の真偽判断について
"if文では、指定された数値が真である(数値が0以外の)場合だけ横の文を実行します"って書いてあったけどこの根本的なのを分かってなかった。いつも==や>で比較しかしてなかったからだろう。ここらへんちゃんと覚えときたい。


4.練習問題7 - 苦しんで覚えるC言語if (-1) printf("OK\n");について
さっきの続き。今まで知らなかったからこんなif文書けるなんて知らなかった。恥ずかしい。。。


5.番号による場合分け - 苦しんで覚えるC言語case文の連続した使用の仕方について
"実は、caseは、複数を連続させて使うことが可能です"、と本文に書いてあったけどこれは知らなかった。無駄の無いコードを書くためには覚えときたい。

例えばcase文によって男性と女性を振り分ける場合

switch (no) {
	case 1:
	case 3:
	case 4:
		printf("男性\n");
		break;
	case 2:
		printf("女性\n");
		break;

という分け方が可能。


6.ループ動作の仕組み - 苦しんで覚えるC言語for文の仕様について
いままでfor文の無限ループには「;;」というコマンドを打ち込めばいいという認識だったけど違うんだな。for(;;)っていうのは条件を書かなかった結果生まれた無限ループだった。"for文では、どんな式を置いてもいいどころか、式を置かなくても構いません"というのをちゃんと理解していなかった感じ。


7.自作関数を作る - 苦しんで覚えるC言語プロトタイプ宣言について
単語の知識抜け。思い出せなかった。


8.練習問題11 - 苦しんで覚えるC言語戻り値について
ここも同様。しばらくやってないと忘れてくなぁ。そういえば初期の頃、引数を「いんすう」って読んでたこともあった。


9.関数内で寿命が尽きる変数 - 苦しんで覚えるC言語ローカル変数の寿命と関数の独立性
ローカル変数に寿命があることは分かっていたけれど、なぜ寿命があるかと聞かれたら説明できなかった。関数の独立性を高めるために寿命があるんだね。


10.関数内で生き残る変数 - 苦しんで覚えるC言語staticの存在
単語の知識抜け。staticを使うコードなんてほとんど書いたことないから忘れちゃうんだろな。



とりあえず今日はここまで。続きはブラッシュアップ2で。

vimの使い方メモ

なんか有名でなんか良いらしいからなんとなく使ってるvim。なんとなく使ってるだけなことに加えて短いコードしか書いてない。だから一層良さが分かんない。良さがわかるためにはコマンドをいろいろ覚えること。それにいろいろいじいじカスタマイズせねばならぬらしい。そういうことなのでvimの基本的なコマンドメモ。

入力・編集

  • i:カーソルの左から入力開始
  • I:行頭から入力開始
  • a:カーソルの右から入力開始
  • A:行末から入力開始

保存・終了

  • zz:viを終了(内容が保存されている場合は保存)
  • wq:ファイルに保存しviを終了
  • q:viを終了(内容が変更されている場合は警告)
  • q!:viを強制終了

カーソルの移動

  • gg:ファイルの先頭に移動
  • ctrl+b:1画面戻る
  • ctrl+u:半画面戻る
  • H:画面最上に戻る
  • zz:カーソル行を画面中央に持っていく
  • L:画面最下に進む
  • ctrl+f:1画面進む
  • ctrl+d:半画面進む
  • G:ファイル末尾に移動
  • 0:行頭へ
  • $:行末へ
  • %:対応する括弧へ移動

削除・コピー・貼りつけ

  • dd:1行切り取り
  • yy:1行コピー
  • p:貼りつけ

置換・挿入・整形

  • s/old/new:oldをnewに置換する
  • ctrl+v→j→選択→I→挿入したい文字→ESK:複数行同時挿入
  • gg=G:最初から最後までのインデントを綺麗にする

ウィンドウ操作

  • sp:ウィンドウを縦に分割
  • q:カーソルのあるウィンドウ以外を閉じる
  • ctrl+w w:ウィンドウを移動

取り消し

  • u:直前の操作を取りやめる
  • ctrl-r:取り消しの取り消し
  • .:直前の操作の取り消し

2012/1/27:置換・挿入にインデント整形について追記(参考 cl.pocari.org - Vim でインデントを整える)

参考予定サイト

C言語
苦しんで覚えるC言語 http://9cguide.appspot.com/

iPhoneアプリチュートリアル
iPhoneアプリを作ってみよう:目次エントリー - もとまか日記乙 http://d.hatena.ne.jp/moto_maka/20081118/1226953067
テン*シー*シー http://ameblo.jp/xcc/
サルにもできるiPhoneアプリの作り方 http://ameblo.jp/micro-garden/

チュートリアル http://t.co/R9DptVY

・参考動画
Objective C Programming Tutorial http://thenewboston.org/watch.php?cat=33&number=1
Developing Apps for iOS (HD) http://itunes.apple.com/jp/itunes-u/developing-apps-for-ios-hd/id395605774
iOS Development Overview http://teamtreehouse.com/topics/introduction/ios

・Q&A
stackoverflow http://stackoverflow.com/

・Library
iOS Developer Library
https://developer.apple.com/library/ios/navigation/index.html?section=Resource+Types&topic=Getting+Started

iOS Developer Library(日本語)
http://developer.apple.com/jp/devcenter/ios/library/japanese.html

iOS App Programming Guide https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007072-CH1-SW1

・UI
iOSヒューマンインターフェイスガイドライン http://developer.apple.com/jp/devcenter/ios/library/documentation/MobileHIG.pdf

Cocoa
https://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/
https://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjCTutorial/01Introduction/chapter_1_section_1.html

・参考
プログラミング未経験からiPhoneアプリ開発を勉強する人が読むべき超オススメな参考書3つ! http://wayohoo.com/programming/objective-c/best-iphone-apps-develop-books.html
C言語すら知らなかった私が2ヶ月でiPhoneアプリをリリースするまでにやった事。 http://www.lastday.jp/2010/11/22/objective-c