タグ

tanakaBoxに関するyheldのブックマーク (43)

  • ボクノス

    ボクノス

  • 値の変更が出来る文字列についての格闘期。 - ボクノス

    ちょっとはまって調べてみたら、もっとはまってしまった・・・。値の変更が出来る文字列についての格闘記。 値の変更について func(char *s) { *s = 'a' } func("moge"); というアホなプログラムを書いてしまった・・・値が変更が出来る訳が無い!! なんとなく気になったので、値の変更について調べることにした。 値の変更について調べてみた。 strcpyで値をコピーしてみる。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char s1[] = "hoge"; const char s2[] = "piyo"; /* 普通 */ strcpy(s1, "copy"); printf("%s\n", s1); /* 警告は出るけど値の変更はできる */ strcp

    値の変更が出来る文字列についての格闘期。 - ボクノス
  • K&Rを読もう(28) 問題2-5 文字のマッチング - ボクノス

    2-4より先に2-5をやる。 文字列のマッチングをして、一致する文字の位置を返す問題。 mixi時代にkusakabeさんに激しく突っ込まれたのでよく覚えてる。 #include <stdio.h> #include <stdlib.h> int any(char *s, char *match) { int i = 0; char *sp; char *mp; for (;*s != '\0'; s++, i++) { if (*s == *match) { sp = s; mp = match; for (;*sp == *mp; sp++, mp++) ; if (*mp == '\0') return i; } } return -1; } int main(void) { printf("%d\n", any("01234567", "345")); /* 3 */ printf

    K&Rを読もう(28) 問題2-5 文字のマッチング - ボクノス
  • GNU catを読む - 全体的な流れ - ボクノス

    GNU catのソース読んでます。長くなってきたので分割しました。 ソースコードのありか オンラインで見るときはCVSを sources Index of /coreutils/coreutils/src ソースはftpからゲットせよ。 Coreutils - GNU core utilities グローバル グローバル変数static int input_descが入力ファイルディスクリプタ。超重要。 小さな関数 usageの処理はGNU定番の超絶テク。必見。 行番号の処理が凄い。写経しよう。 解析結果 -> ボクノス - GNU catを読む - next_line_num()編 main() getopt_longは定番の処理。 fstat (STDOUT_FILENO, &stat_buf)の意味がイマイチわからん。STDOUTのfstat??何が出てくる?? 調べた。cat >

    GNU catを読む - 全体的な流れ - ボクノス
  • GNU catを読む - next_line_num()編 - ボクノス

    昨日、catのソースを読んでいて謎だったnext_line_num()の処理を解析してみた。 実際の動作を確認する。 cat -nで行番号表示が出来る。 % cat -n next_line_num.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define LINE_COUNTER_BUF_LEN 20 5 static char line_buf[LINE_COUNTER_BUF_LEN] =表示桁数が固定なのが痛いが、catで行番号を表示することはまず無さそうなので、こんなもんかなぁと思う。 解析してみる。 next_line_num()を抜き出して遊んでみた結果。 解析結果はコメントに書いた。 #include <stdio.h> #include <stdlib.h> // 頭悪すぎコメント。 /* Buffer for li

    GNU catを読む - next_line_num()編 - ボクノス
  • Hacking Vim欲しい!! - ボクノス

    Vimってなかなか無いんですよね・・・世界中で使われてるグレイトなエディタなのに〜なぜだぁぁぁ!! と思ってたら、でた、でた、でたぁぁぁ〜Vim7!! (洋書だけど) Hacking Vim: A Cookbook to Get the Most Out of the Latest Vim Editor 作者: Kim Schulz出版社/メーカー: Packt Publishing発売日: 2007/05/18メディア: ペーパーバック購入: 2人 クリック: 122回この商品を含むブログ (3件) を見る Cookbook形式なので欲しいとこだけ拾い読み出来そう。Vim7対応で新機能の解説があるのが魅力。ただ、ページ数が228ページで7019円!! うぅぅぅ。たけぇ。欲しいけど、高い。しかも洋書。迷う。迷うなぁ・・・ あ、サンプルページはvim onlineからのリンクにありまし

    Hacking Vim欲しい!! - ボクノス
  • チャーチ数で対数の世界を作る。 - ボクノス

    チャーチ数 0 1 2 3 4 5 ... 僕等が普段接している世界は自然数の世界だ。 0 0に1を足して1 0に1を足して1を足して2 0に1を足して1を足して1を足して3ラムダ計算を生み出したチャーチは、自然数の世界を抽象的に捉えた。 xはzero xにfをしてone xにfをしてfをしてtwo xにfをしてfをしてfをしてthreeschemeに直すとこうだ。 (define zero (lambda (f) (lambda (x) x))) (define one (lambda (f) (lambda (x) (f x)))) (define two (lambda (f) (lambda (x) (f (f x))))) (define three (lambda (f) (lambda (x) (f (f (f x)))))) xにfを何回適用したか。というのがチャーチ数であ

    チャーチ数で対数の世界を作る。 - ボクノス
  • K&Rを読もう(22) 演習2-1 変数の範囲 - ボクノス

    演習2-1 変数の範囲を調べる問題。 面倒なのでマクロで自動生成してみた。 #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <float.h> #define UCHAR_MIN 0 #define USHRT_MIN 0 #define UINT_MIN 0 #define size(s, t, S) printf("%-15s : %2d byte %2d bit %16" #t "%16" #t "\n", \ #s, sizeof (s), sizeof (s) * 8, S ## _MIN, S ## _MAX) int main(void) { size(unsigned char, d, UCHAR); size(char, d, CHAR); size(unsigned short, d

    K&Rを読もう(22) 演習2-1 変数の範囲 - ボクノス
  • C言語にもboolがあった。 - ボクノス

    最近cflowの便利さに気づいたtanakaです。 % cflow cat.c | grep ':$' | sed 's/<.*//' main() usage() simple_cat() cat() write_pending() next_line_num()コールグラフが一目瞭然でっす。超便利。 便利過ぎなので関数のみ抽出するシェルスクリプト作った。 fflow() { cflow $@ | grep ':$' | sed 's/ <.*//' } やばい。死ねる。 boolって何よ? で、cflowのテストにGNU catのソースを使ってみたら、思わぬ拾い物。 bool ok = true; boolにtrue。なんだコレ? マクロの正体は、 #include <stdbool.h> 調べてみたら、標準Cライブラリの実装 stdbool.hあった。どうやらC99からの新機能らしい

    C言語にもboolがあった。 - ボクノス
    yheld
    yheld 2007/08/05
    うっはwwwすっげぇ便利w
  • K&Rを読もう(14) 演習 1-21 スマートタブ - ボクノス

    GNUインデント 世の中には様々なインデント方式がある。その中でも最も奇妙なインデント方式がGNUであろうと思う。 最初にGNU方式を目にしたときはハァ?ナンダコレ?などと思ったが、今はそのインデント方式が少し理解できるようになった。 スマートタブ さて、今回はGNUで使われているインデント方式であるスマートタブに変換せよという問題です。 「8個スペースが続いたら、tabに変換する」 という奇妙なインデント方式。tabとスペースを混在させて使っている所がポイント。 今回のソースはGNU方式で書いてみたぞ。 #include <stdio.h> #include <stdlib.h> // #define TAB "\t" // #define TAB ">-------" #define TAB "\033[1;30m>-------\033[0m" int main (void) { i

    K&Rを読もう(14) 演習 1-21 スマートタブ - ボクノス
    yheld
    yheld 2007/07/28
    >こいつら絶対頭おかしいよ!!, オレもそう思う
  • Vimのちょっとしたマクロ技。 - ボクノス

    僕がVimでデバッグするときは、 :!!と、前のコマンド実行をしているんですが、前のコマンドで:「!rm *」なんて事をしていると、ファイルをまるごと消してひどい目にあったりするので、なんか良い手はないかなぁ・・・と思ってたら、「そうだ、マクロがあった!!」 ふふ。便利な技を思いついてしまったので、Vimのマクロをキーボードの記録以外で使ってみようと思う。 マクロの使い方。 マクロの使い方を復習しておこう。 qaiほげほげ<ESC>qqでマクロ開始。次のaはレジスタ名。なんか打って、qで終了。 @a@aで、レジスタにa登録しておいたマクロを開始する。 そう、マクロには「レジスタ」を使うのだ。 :regで確認してほしい。 ってことは、 ソースにデバッグコードを埋め込んでおいて、マクロ実行すればいい!! /* 手抜きcat.c :!gcc -o cat cat.c && ./cat < cat

    Vimのちょっとしたマクロ技。 - ボクノス
  • K&Rを読もう(10) 演習1-16 これでいいのか不明。 - ボクノス

    世界中を飛び回ってみたけど演習1-16は(世界中で?)評判が悪い。問題の意味が全くわからない。 「プログラミング言語C(第2版)」第一章演習の答え を参考に書いた。(ほぼコピペ) バッファがオーバーフローした時は読み飛ばして、1行を取得せよ? int main(void) { int len; int max = 0; char line[MAX_LENGTH]; char longest[MAX_LENGTH]; int c; while ((len = getline(line, MAX_LENGTH)) > 0) { if (len == MAX_LENGTH - 1 && line[len - 1] != '\n') { // オーバーフロー中 while((c = getchar()) != EOF) { len++; if (c == '\n') // ココが正しい位置。 br

    K&Rを読もう(10) 演習1-16 これでいいのか不明。 - ボクノス
  • ハッカーと画家と英語の本 - ボクノス

    ハッカーと画家 オンラインでも読めるけど買ってみた。 ハッカーと画家 コンピュータ時代の創造者たち 作者: ポールグレアム,Paul Graham,川合史朗出版社/メーカー: オーム社発売日: 2005/01/01メディア: 単行購入: 109人 クリック: 4,884回この商品を含むブログ (582件) を見る 翻訳書なのに、英語のようなリズム感が心地よい。川合氏の素晴らしい翻訳に感動しました。 何かしたくなったら、ナイキのコマーシャルみたいにするんだ「とにかく、やる(Just do it)」 SICPとK&Rを読もう!! 勿論Paul Graham氏もSICPを読んだひとり。ハッカーとSICPにも強い相関関係があるらしい。 原書にリンク張っとこう。 Essays 読みやすい英語。翻訳読んだ後ならなんとか読めそう。 英語 長い文章が何故読めないかって?短い文章が読めないからだ。短い

    ハッカーと画家と英語の本 - ボクノス
  • C言語でJavaScript風prototypeを作ってみた。 - ボクノス

    JavaScriptのプロトタイプってこんな感じかなぁと思って、C言語でJavaScript風プロトタイブを再現してみた。 配列だけど。 #include <stdio.h> #include <stdlib.h> struct p2d { double x; double y; double (**prototype)(struct p2d *); }; typedef struct p2d Point2D; typedef double (*Point2D_method)(Point2D *); // メソッド型 enum {GET_X, GET_Y, END}; // 名前テーブル Point2D_method *point2d_prototype; // メソッドの配列としてプロトタイプの内容を宣言 // コンストラクタ Point2D *point2d_new(double x,

    C言語でJavaScript風prototypeを作ってみた。 - ボクノス
    yheld
    yheld 2007/07/21
    >ハッシュ=リストなので、JavaScriptエンジンのコアな部分はSchemeとほぼ同じだと思う。, すべてはSICPにあるということか!
  • tarメモ - ボクノス

    まったりとLFS中です。LFSの基は ダウンロード → 解凍 → コンパイル を繰り返す。つまり、一番使うコマンド郡はwget,tar,make。 今回は、理解の足らないtarついて調べようと思う。 tarとは tarは"Tape ARchive" の略。って、いつの時代から使われているんだ・・・。 元々は、「複数のファイルをまとめて tar 形式というアーカイブファイルにする機能」がメイン。 つまり、catよりちょっと凄い奴。圧縮解凍機能はおまけ。 よく使うコマンド .tar.gzの解凍 % tar xzf hoge.tar.gzこれだけ覚えておけば生きていける。 簡単なオプション x 解凍 c 圧縮 なし .tar z .tar.gzip形式 j .tar.bz2形式 v 詳細オプション有効 f ファイル指定。必ず最後に付ける。必修 manを見ると、 コピペ。 tar <operat

    tarメモ - ボクノス
    yheld
    yheld 2007/07/08
    >ユーザー名が入っているので、怪しいファイルを配布するときは、注意しよう(笑, うわwwやべw
  • ボクノス

  • K&Rと、買った本。 - ボクノス

    K&R 「K&Rを参照せよ」と、書いてあることが多いので、Cのバイブルと言われるK&Rを買ってみた。 プログラミング言語C 第2版 ANSI規格準拠 作者: B.W.カーニハン,D.M.リッチー,石田晴久出版社/メーカー: 共立出版発売日: 1989/06/15メディア: 単行購入: 28人 クリック: 721回この商品を含むブログ (199件) を見る 311刷・・・売れすぎ・・・。 バイブルと呼ばれる理由がわからないが、OS自作入門 mallocとK&R mallocの実装がほぼ一緒だったのには驚いた。 練習問題をこなせば、力がつきそうです。 でも、読むならSICPの方がいいと思う。 ゲーム理論 立ち読みで気になったゲーム理論 (図解雑学) 作者: 渡辺隆裕出版社/メーカー: ナツメ社発売日: 2004/08/01メディア: 単行購入: 12人 クリック: 70回この商品を含

    K&Rと、買った本。 - ボクノス
  • 遠回りの1年を振り返る - ボクノス

    OSを作りはじめて1年になる。この1年を振り返ってみたい。 葛藤 OSを作りはじめて1年。 この1年間ずっとひとつの葛藤がある。 「遠回りなんじゃないか・・・」 今は「基を学びたい」という思いからSICPを読んでいる。 かなり遠回りである。 「遠回りが正しい道なのか?」 この1年間の遠回りを検証したいと思う。 1年前の僕 Web屋だった僕はブラウザの中の人だった。 1年前の僕はこうだ。 ポインタ知らない。 アルゴリズム知らない。 データ構造知らない。 アセンブラ知らない。 C言語を知らない。 Linuxコマンドを知らない。 makeなんて聞いたこともなかった。 最新の技術を追いかけ、基をとことん飛ばしてきた。 基を飛ばしたことにも気づいていなかった。 そして、一冊のに出会う。 「OS自作入門」 このが自分を変えるきっかけになった。 1年前〜半年前 - OS自作入門期 仕事が忙しか

    遠回りの1年を振り返る - ボクノス
  • 1桁*2桁で脳の計算スタックの拡張 - ボクノス

    インド数学ドリルより。 「インド人は2桁の掛け算を暗算でこなすことが出来る」 しかし、かなり訓練が必要ということがわかってきた。 78 * 96 の計算をするときは、 70 8 +-----+-+ 90| | | | | | +-----+-+ 6 | | | +-----+-+頭の中に、こんな図を浮かべる。 式に直すと、 78 * 96 = (7 * 9) * 100 + ((9 * 8) + (7 * 6)) * 10 + (8 * 6) = 6300 + (720 + 420) + 48 = 6300 + 1140 + 48 = 7488となる。 暗算しようと思うと、途中の計算結果を頭のスタックの中に貯めておかなければならない。 特に、(9 * 8) + (7 * 6)を一気に計算するあたりは至難の技。 これは相当訓練が必要。 難しいので、1桁*2桁にしてみた。 7 * 28をやろう

    1桁*2桁で脳の計算スタックの拡張 - ボクノス
    yheld
    yheld 2007/06/25
    n倍化すれば簡単になりますね。
  • Linuxでよく出てくるけど、よくわからない単語メモ。 - ボクノス

    Linuxでよく出てくるけど、よくわからない単語をメモっておきます。 invoke (神に)祈る。(精霊を)呼び出す。 派生して、(アプリケーションを)起動する。(関数を)呼び出す。 例) zsh invoked Firefox. zshはFirefoxを呼び出した。 invoke main function. main関数を呼び出す。 祈りながらね。僕等は魔術師だから。 verbose 多弁な, くどい。 つまり、--verboseでよく喋る。詳細表示オプションを有効にする。 名詞は、冗長。"じょうちょう" 冗長化(じょうちょうか) バックアップを取る。予備を用意する。 ネットワークの冗長化 回線を複数用意したりすること。 ストレージの冗長化 バックアップを取ったり、パリティを取ったり。 つまり、障害等に備えて「まわりくどく」、何かを用意すること。 参考 in・voke - goo 辞書

    Linuxでよく出てくるけど、よくわからない単語メモ。 - ボクノス
    yheld
    yheld 2007/06/24
    冗長化が、バックアップを取るという意味でも使えるということをはじめて知った。