ブログネタに困ったらインプットが足りてないんじゃないかという話

このブログは技術ブログとして自分のアウトプット用という面があります。ということで始めた当初は書きたいことがいっぱいあったわけですが数ヶ月も経つと書きたいこともなくなってきました。なんとなく更新しなきゃなーという感じで当初の目的も忘れつつアクセス増やしたいなとか考えていました。

ただ最近技術書をたくさん読むようになって書きたいことが増えてきました。そこで気がついたのですがやはりインプットが大切だなと。

改めて言わなくても当たり前なのですが自分の場合は

書くことがない=インプットがない

と考えて間違いなさそうです。

ブログを書き続けることで自分の状態がわかる


ということでブログの更新がしばらくないということはインプットが足りていないということなのでちょっと勉強をサボっているということになります。そういうことに気がつくことができるのもブログの利点ですね。

それだけの話でしたが自分なりにハッとしたので書きました。

簡単ですが今日はこの辺で。

スポンサーリンク

『達人プログラマー』を読んで。

名著として名高い『達人プログラマー』を読みました。11ページに及ぶ序章とまえがきをようやく読んだ後に「猫がソースコードを食べちゃった」というタイトルがきたときには読むのをやめようかと思いましたが、読んでみてなるほど確かにプログラマーは読まなければならない本だと納得しました。

今まで業務でやっていたことが上手く語原化され、知識を整理することができました。特に1章『達人の哲学』と2章『達人のアプローチ』はプログラマーとして働く上で必要な基本的な心構えや考え方が書かれており勉強になりました。

プログラマーが取り扱うものは知識


読んでみて色々心に残っていますが、一番はっとさせられたのが第3章『基本的なツール』に書かれていた一文「プログラマーが取り扱う素材は木でも鉄でもありません。知識です」です。

ここはプレインテキストの説明なので知識はプレインテキストに保存しようという趣旨の内容でしたが、プログラマーは知識を扱っているという言葉はとても印象に残りました。よく「技術を売っている」は聞きますが、知識を扱っているという考え方は自分の中で(とても抽象的な表現ですが)色々繋がりました。

知識を扱っているからこそ知識をつけるために勉強し、そして業務に活かすというプログラマーの本質が上手く語原化されたように思います。

翻訳書ならではの読みづらさも…


ただ翻訳書ならではの読みづらさもありました。実は結構前に技術書を読もうとしたときの候補に上げていたのですが、本屋で立ち読みしてやめたことがありました。理由は翻訳本独特の回りくどい言い回しがどうも合わなくて今じゃなくてもいいやと思ってしまいました(ゴムのアヒルちゃん、ドードー鳥のコード、邪悪な魔法使いとか)。

ただその辺も読み進めて行くうちにあまり気にならなくなったので読んでよかったと思いました。

「達人」とつくだけあって難易度が高いところも


後半の章になるにつれて内容が難しくなっていくように思いました。中には「どういうことだ?」と思うこともありました。

また、新卒が読んで「こういうことなのかなぁ?」と想像するよりある程度業務をした上で「こういうことだったのか」と追体験をするような本のように思えました。

達人とは


この本に書かれていることは言ってしまえば理想としてみんなの頭の中にはあるものだと思います。ただ、実際にこの本の内容を徹底されているようなコードは見かけません。

もしかすると達人とは理想通りのプログラムを徹底して書ける人のことを言うのかもしれません。

達人プログラマーを読んでそんなことを思いました。

明日から自分も頑張ります。

スポンサーリンク

30日でできる!OS自作入門パート10(15日目①)

気がつけば1カ月ほど空いてしまいましたがまだ終わっていません。ということで続けていきます。

今回のサブタイトルは『マルチタスク-1』です。

 

マルチタスクをCPUにさせるには?


実はCPUが1つしかなくてもマルチタスクはできているようです。その場合同時に複数のプログラムを動かしているのではなく、忍者の分身の術のようにAのプログラムを少し動かして次にBのプログラムをちょっと動かして…と処理しているようです。そうなるとこの切り替えを高速にしないと同時に動かしているように見えないですね。このプログラムの切り替えを「タスクスイッチ」と言うようです。

CPUにタスクスイッチをしなさいと命令するとCPUはレジスタの値をすべてメモリに書き込みます(後で実行を再開するため)。その後にこれから実行するプログラムのためにメモリから全部のレジスタの値を読み込みます。これで切り替えは完了となります。

 

レジスタの内容はどのようにメモリに書き込まれるのか?


struct TSS32 {
    int backlink, esp0, ss0, esp1, ss1, esp2, ss2, cr3;
    int eip, eflags, eax, ecx, edx, ebx, esp, ebp, esi, edi;
    int es, cs, ss, ds, fs, gs;
    int ldtr, iomap;
};

このコードはTSS(タスク状態セグメント)というものでこれをつかってレジスタの内容をメモリに書き込みます。TSSはintが26個集まったもので全部で104バイトです。

1行目はタスクの設定に関する内容、2行目は3bitのレジスタ、3行目は16bitのレジスタです。4行目のldtrとiomapは1行目と同じくタスク設定に関する部分です。

 

タスクスイッチしてみる


ということでタスクスイッチをしてみます。タスクAとタスクBを準備してAからBへ切り替えます。まずはTSSを二つ作る必要があります。

メインクラスにTSSの呼び出しを書き、ldtrとiomapに適当な値を代入します。

// 呼び出し
struct TSS32 tss_a, tss_b;    

// tss_aに値を代入
tss_a.ldtr = 0;
tss_a.iomap = 0x40000000;
// tss_bに値を代入
tss_b.ldtr = 0;
tss_b.iomap = 0x40000000;

// GDTに登録(tss_aをgdtの3番目、tss_bをgdtの4番目に設定)
struct SEGMENT_DISCRITPTOR *gdt = (struct SEGMENT_DESCRIPTOR *) ADR_GDT;
set_segmdesc(gdt + 3, 103, (int) &tss_a, AR_TSS32);
set_segmdesc(gdt + 4, 103, (int) &tss_b, AR_TSS32);

 

ここまで出来たら実際に切り替えをします。

続きは次回


マルチタスク-1はここでまだ半分です。なかなか手強いので15日目は2つにわけたいと思いますので今回はここまでです。

 

スポンサーリンク

『PHPフレームワーク CakePHP 3入門』を読んで

PHPフレームワーク CakePHP 3入門

少し前に読んだ本ですが紹介したいと思います。

当時私はPHPで開発をするためにフレームワークの選定をしなければいけませんでした。PHPもほぼ触ったことがない状態で選定をしなければいけなかったのですが、たまたまCakePHPリーダーがこの本を持っていたため借りて読みました。

この本は最初から読み進めながらコードを書いていくと体系的にCakePHPがわかる内容になっており、初学者の私にとってとても勉強になりました。公式ドキュメントやウェブで調べながらでもいいのかもしれないですが、それなりの厚さがあるだけあり細かいところまで説明されていてよかったです。この先続けて1つのフレームワークを使っていくのであればこういう本で一度しっかり勉強しておくととても力がつくように思います。

ただアマゾンのレビューがあまりよくなく、理由は誤字が結構あるということでした。なんとなく流しながらソースを書いていたらあまり気になりませんでしたがそうなのですね。レビューを読んでびっくりしました。

ちなみにLaravelにしました。


結果的にはLaravelにしました。プロジェクト的にあまり大規模なものではなかったのでフォルダ構成が自由にできるというのと自動テストライブラリであるPHPUnitがデフォルトで入っているところが理由です。

CakePHPはバージョンに合わせて別途PHPUnitを入れなければならずそこがちょっと苦戦したのでそれなら最初から入っているほうにしようと思いました。

ただPHPのフレームワークを複数触って思ったのは「どれもあまり変わらないな」というものでした。そう思ったのは使いこなせていない証拠なのかもしれませんが、機会があれば仕事でCakePHPも使いたいものです。

 

スポンサーリンク