ロベールのC++入門講座 その1

ロベールのC++入門講座

ロベールのC++入門講座

将来への不安から今年中にロベールのC++入門講座を読んどこうと思った。

分からなかったこと等のメモとしてここを使っていこうと思う。

最初の方は知っていることが多いので飛ばし気味。

これは知らなかった。includeの話。

P129

ファイル名を< >で囲めば設定されたフォルダの、” “で囲めば今のフォルダのファイルを優先的に調べる。

emacs23で新しいファイルを開いた時にemacsを複数起動させない

emacsを23にアップデートしてから、新しいファイルをFinderとかから選んでemacsで開こうとすると、もう一つemacsが起動してしまい、癖でC-x C-cをしてしまい最初から開いていたemacsも一緒に閉じてしまうという事が頻発していました。

解決方法: .emacsに以下を追加


;;複数ウィンドウを開かないようにする
(setq ns-pop-up-frames nil)

すると、常に同じemacsでファイルを開く事ができます。

エンジニアとしての生き方 IT技術者たちよ、世界へ出よう!

エンジニアとしての生き方  IT技術者たちよ、世界へ出よう! (インプレス選書)

エンジニアとしての生き方  IT技術者たちよ、世界へ出よう! (インプレス選書)

副題でもある「IT技術者たちよ、世界へ出よう!」というのは、常々自分が理想として考えていることでもある。

そういった意味で、新年の自戒を込めて読んでみようと思ったが、結論から言ってとてもいい刺激を受けたと思う。

そしてこのブログ記事を書こうと思ったのも、もちろん本書の影響を受けてである。

自分がエンジニアとしていかに生きて行くべきかと考えたときに、著者は世界へ出る準備をすることを勧める。

もはや数多くの人達が述べていることだが、「これまでの常識であった「(日本の)一流大学に入って一部上場の大企業に就職さえすれば一生安心」という考えが時代遅れであることを強く認識した上で、もっと幅広く視野を持って、自分の活躍する場を求めること」が大事である。

その上で必要となるのは柔軟な頭と、英語力であると筆者は述べる。

いまは、日本企業は終身雇用・年功序列に支えられてきたが、これからの時代はそう簡単にいかないのは多くの人が考えている通りであろう。

例えばインドのインフォシスの例が載っていたが、今後はまさに「インドのことを「単に値段が安いだけの外注先」と見下していると痛い目にあう」だろう。

日本の企業が本気で国際競争力を高めたいのならば、もっと自由に人を解雇できるようにしなければならないと著者は述べる。

私としても、人材の流動性は高めるべきだと思うし、今働いている会社に後何年いるかということも分からない。ましてや定年まで働いている姿などもちろん想像できない。

また、仕事を選ぶ際にも、「頼まれなくても自分から喜んで残業するほど楽しい仕事か」どうかで選ぶべき、という基準を著者は述べている。

これはなかなか見つけるのが難しいが、この一年はそれを見極めることに使えればと思う。

著者が薦める本

頭の体操 BEST

頭の体操 BEST

頭の体操BEST 2

頭の体操BEST 2

これは小学校の時に昔の版だが読みあさった。久々に解いてみようかな?

エンジニア30歳定年説(これが正しかったら入社したばかりだが、わたしは後数年で定年だw)のバカらしさが分かるらしいので読む。

古典力学の形成―ニュートンからラグランジュへ

古典力学の形成―ニュートンからラグランジュへ

暇があれば

いろんな人が勧めているので気になっていたが読もう。

MozReplを使ってホッテントリをすべて開く

僕が毎日見るwebページの一つにはてなブックマークのホッテントリがあります。

技術者の人たちが多いので有意義な情報が多いです。

しかし、自分が面白そうと思った記事ばかり読んでいても興味の範囲が広がらないと思います。せめてチラリとでも記事を眺めておいたほうがいいかもしれない、そう思ってホッテントリをすべて開くプログラムを作りました。

使ったものはrubyのMechanizeと、MozReplというFirefoxのアドオンです。


# -*- coding: utf-8 -*-
require 'rubygems'
require 'mechanize'
require 'kconv'
require 'net/telnet'


def mozrepl_open
$telnet = Net::Telnet.new("Host" => "localhost", "Port" => 4242, "Prompt" => /repl> z/n)
end
def mozrepl_cmd(str)
$telnet.cmd(str)
sleep(0.5)
end
def mozrepl_close
$telnet.puts("repl.quit()")
$telnet.close
end

agent = Mechanize.new
agent.get('http://b.hatena.ne.jp/hotentry')

mozrepl_open
agent.page.search('blockquote').each do |p|
p.search('cite').each do |q|
puts q.values
end
mozrepl_cmd("gBrowser.selectedTab = gBrowser.addTab()")
mozrepl_cmd("content.location.href = " + p.values.to_s)
puts p.values
puts '---'
end
mozrepl_close

実行後はこんな感じにタブがいっぱいに。

f:id:hiroshi128:20110819142019p:image

とても重いです。。。

Cの配列アクセス豆知識

この本を最近読んでます。

C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

この中で、


array[1]

と、


1[array]

が全く同じだということを知って衝撃を受けた。

これは結局のところ、


array[1]


*(array + 1)

のシンタックスシュガーであるからなんですね。

デーモン君のソース探検 その1

買ってみた。

VMWare上のUbuntuで進めていきます。

まずはNetBSDのソースコードを取得します。がしかし、cvs loginができずに書いてあるとおりには進めないので、普通にFTPでNetBSDのソースコードを取得してきた。

取ってきたバージョンは5.1で、本は1.6を使っているけど基本的なコマンドのソースは同じだろうという判断で進めていきます。

ちなみにlocateコマンドのデータベース作成ですが、


# sh /etc/weekly

はUbuntuでは無いようなので、


# sudo updatedb

でデータベースをアップデートできます。

ロベールのC++入門講座 その2

5章4節

Struct1.cppを今までの理解の確認をかねて、ポインタ渡しのコードにしてみる。


#include <iostream>
using namespace std;

const int MAX_NAME = 16;

struct Student {
char name[MAX_NAME + 1];
int scoreJapanese;
int scoreMath;
int scoreEnglish;
};

void Show(const Student* student) {
cout << "名前 : " << (*student).name << endl << "国語 : "
<< (*student).scoreJapanese << endl << "数学 :"
<< (*student).scoreMath << endl << "英語 ;"
<< (*student).scoreEnglish << endl;

}

int main() {
Student student[] = { { "赤井孝", 73, 98, 86 }, { "笠井大介", 64, 45, 40 }, {
"吉田叶", 76, 78, 69 }, };

int size = sizeof student / sizeof *student;

for (int i = 0; i < size; ++i) {
Show(&student[i]);
}
}

foldでハマった

多分初歩的な事ですが、foldでハマった。

Schemeのfoldで


(fold (lambda (f v) (f)) #f '((lambda () (* 1 2))))

のような事をやろうとしたら


*** ERROR: invalid application: ((lambda () (* 1 2)))

と出てハマった。いやいやinvalidじゃないでしょー、と思って試行錯誤を続けたら


(fold (lambda (f v) (f)) #f `(,(lambda () (* 1 2))))

とする事で、望み通りの動きが実現出来た。