100歳までの長期投資

元証券アナリストの著者が、インデックスをメイン、バリューをサブとした長期投資のやり方を書いた本。

・30歳までは人間形成、60歳までは資産形成、そこから死ぬまでは好きに生きる
・72/利率で資産が二倍になる年数が分かる
・債券はデフレファイター、株式はインフレファイター
・安全資産(預金等)とリスク資産(債券、株式)に分ける
・リスク資産をコアポートフォリオ(2/3)とサテライトポートフォリオ(1/3)に分ける
・コアポートフォリオは日本と海外の債券投信、インデックスで運用する
・サテライトポートフォリオは国内株式個別銘柄で運用する
・リバランスをすると熱い時に売り、悲観的な時に買うことが自動的にできる
・株価は将来にわたって続く配当金によって決定される
・株式の価値=配当金/(割引率-成長率)
・債券と株式の益利回りの差をイールドスプレッドと言う
・利益の潜在成長率=株式資本利益率×利益内部留保率

テーマ : 雑記
ジャンル : コンピュータ

2007-07-29 : Home-Money-Investing : コメント : 0 : トラックバック : 0
Pagetop

真っ当な株式投資

投資の合宿を主催している著者による、テクニカル投資を完全に否定し、長期投資がどれだけすばらしいかを説いた本。

・株式投資は人に投資するということ
・投資とは確実な今を差し出して、不確かな未来のリターンを受け取るということ
・価格に価値が見合っている場合のみ、投資を行え
・リスクとは不確実性のこと
・あらゆる経済取引は誰かの価値と誰かの価格との交換である
・人の評価には継続性を見る
・価値を創造するには時間が必要
・長期投資をして自分の資産をうまく運用し、自らも働いて社会に貢献しろ

テーマ : 雑記
ジャンル : コンピュータ

2007-07-28 : Home-Money-Investing : コメント : 0 : トラックバック : 0
Pagetop

負の割り算とシフト演算との関係

intを使用して正の数を2のべき乗で割る場合、シフト演算で代用できます。

ただし、負の数の割り算の場合はそうではありません。

以下はCで記述した負の割り算とシフト演算の例です。シフト演算でも最上位bitが符号bitで補間されているため、符号が変わることはありません。

ただし、割り切れない部分がシフト演算だと切り捨て処理になっていますが、割り算だと切り上げ処理になっています。

これは知っていないと少し詰まる箇所だと思います。


#include <stdio.h>

void calc(int i, int sft);

int main()
{
int i;
int sft;

i = 0xfffffffe; sft = 1; calc(i, sft);
i = 0xffffffff; sft = 1; calc(i, sft);
i = 0xfffffff8; sft = 3; calc(i, sft);
i = 0xfffffff9; sft = 3; calc(i, sft);
i = 0xffffffff; sft = 3; calc(i, sft);

return 0;
}

void calc(int i, int sft)
{
printf("=========================\n");
printf("integer division %d/%d=%d\n", i, (1<<sft), i/(1<<sft));
printf("integer division 0x%x/0x%x=0x%x\n", i, (1<<sft), i/(1<<sft));
printf("integer shift %d>>%d=%d\n", i, sft, i>>sft);
printf("integer shift 0x%x>>0x%x=0x%x\n", i, sft, i>>sft);
}



■ 結果
=========================
integer division -2/2=-1
integer division 0xfffffffe/0x2=0xffffffff
integer shift -2>>1=-1
integer shift 0xfffffffe>>0x1=0xffffffff
=========================
integer division -1/2=0
integer division 0xffffffff/0x2=0x0
integer shift -1>>1=-1
integer shift 0xffffffff>>0x1=0xffffffff
=========================
integer division -8/8=-1
integer division 0xfffffff8/0x8=0xffffffff
integer shift -8>>3=-1
integer shift 0xfffffff8>>0x3=0xffffffff
=========================
integer division -7/8=0
integer division 0xfffffff9/0x8=0x0
integer shift -7>>3=-1
integer shift 0xfffffff9>>0x3=0xffffffff
=========================
integer division -1/8=0
integer division 0xffffffff/0x8=0x0
integer shift -1>>3=-1
integer shift 0xffffffff>>0x3=0xffffffff

テーマ : プログラミング
ジャンル : コンピュータ

2007-07-27 : Work-Linux-C/C++/Java : コメント : 0 : トラックバック : 0
Pagetop

数値のビット指定取り出し

数値(32bit)のうち、MSBとLSBのビット位置を指定して値を取り出したいという場合があるかとおもいます。

その際に使用する関数例です。


#!/usr/bin/perl

use bigint;

$num = hex "f0000000"; printf("%x\n", bitdec($num, 31, 28));
$num = hex "0000000f"; printf("%x\n", bitdec($num, 3, 0));
$num = hex "80000000"; printf("%x\n", bitdec($num, 31, 31));
$num = hex "00000001"; printf("%x\n", bitdec($num, 0, 0));

sub bitdec()
{
my $_val = int $_[0];
my $_msb = int $_[1];
my $_lsb = int $_[2];

if (!(0<=$_msb&&$_msb<=31)) { die "error! not support msb=$_msb\n"; }
if (!(0<=$_lsb&&$_lsb<=31)) { die "error! not support lsb=$_lsb\n"; }

$_mask = (1<<($_msb+1))-1;
$_val &= $_mask;
$_val >>= $_lsb;

return $_val;
}

テーマ : プログラミング
ジャンル : コンピュータ

2007-07-24 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop

デフォルトの端末サイズを調整する

端末起動時のデフォルトサイズをあらかじめ自分の好きなものに変えておくと、手で調整する手間が省けます。

端末の起動オプションはアイコンのプロパティで設定できます。


gnome-terminal --geometry=WIDTHxHEIGHT+XPOINT+YPOINT


例)
gnome-terminal --geometry=120x28+550+0

テーマ : Linux
ジャンル : コンピュータ

2007-07-24 : Work-Linux-Env : コメント : 0 : トラックバック : 0
Pagetop

本の電子化

自分は本をPCで読みたい場合、カッターで本を切り離してスキャンをします。

その際に困ることは、本のサイズはそのつどばらばらなのですが、両面スキャンはA4しか対応していないことです。

そのため片面スキャンすることになるのですが、0から数えて奇数ページは手で逆にしない限り、本の後ろからスキャンすることになって順番が逆になってしまいます。

それを直すためにリネームするのが以下のスクリプトです。

偶数ページは0というディレクトリ、奇数ページは1というディレクトリに格納されているとし、結果はdstに保存されます。

その後は、Windowsのソフトですが、藤でリサイズし、pic2pdfによってPDFファイルに変換します。


#!/usr/bin/perl

# 片面スキャンしたファイル名を変換

task("0");
task("1");

system "mv 0/*.jpg ../dst";
system "mv 1/*.jpg ../dst";

sub task {
my $tgtdir = $_[0];

# ファイルリスト取得
@list = `ls $tgtdir`;

# ソート
if ($tgtdir eq "0") { @list = sort @list; $sta = 0; }
else { @list = reverse sort @list; $sta = 1; }

$idx = $sta; # 開始インデックスを決定
# テンポラリのファイル名で置換
foreach (@list) {
# jpgのみ
if (/\.jpg/) {
$fn = sprintf("%03d.tmp", $idx);
system "mv $tgtdir/$_ $tgtdir/$fn";
$idx+=2;
}
}
$lastidx = $idx; # 最終インデックスを保存

$idx = $sta; # 開始インデックスを決定
# テンポラリのファイル名でを元に戻す
for ($idx = $sta; $idx < $lastidx; $idx+=2) {
$fn = sprintf("%03d", $idx);
system "mv $tgtdir/$fn.tmp $tgtdir/$fn.jpg";
}
}

テーマ : プログラミング
ジャンル : コンピュータ

2007-07-23 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop

ローカル環境でWikiを使う

ローカルの環境で使えるWikiを用意しておくと、個人用データベースとして重宝します。
ここではWindows上でXAMPPとPukiWikiを使用した方法を説明します。

■ XAMPP

・普通にインストール、途中でApachがファイヤーウォールの設定に引っかかりますが、無効にしておきます。また、MySqlとFileZillaをOFFにしておきます。
・"…\xampp\htdocs\.htaccess"を以下のように編集します。

Order deny,allow
Deny from All
Allow from localhost 127.0.0.1

・スタートメニュー→apachefriends → xampp → php switchで4を入力してPHP4に切り替えます。
・"…\xampp\apache\bin\php.ini"を編集し、[mbstring]の行をコメントアウトします。(最新のバージョンでは最初からコメントアウトしてあります)
・Apachを再起動します。
・"…\\xampp\htdocs"がhttp://localhost/になります。

■ PukiWiki

・"…\xampp\htdocs"にpukiwiki-1.4.7を保存し、http://localhost/pukiwiki-1.4.7/にアクセスします。
・pukiwiki.ini.phpを以下のように編集します。
$modifier = 'anonymous';

$modifier = 'your-name';

$modifierlink = 'http://pukiwiki.example.com/';

$modifierlink = 'http://localhost/';

$adminpass = '{x-php-md5}!';

$adminpass = '{x-php-md5}' . md5('your-pasword');

テーマ : フリーソフト
ジャンル : コンピュータ

2007-07-22 : Work-Win-Env : コメント : 0 : トラックバック : 0
Pagetop

上手いやり方を見つけるための一手段として本を読もう

上手いやり方の情報というのは、人の頭の中、資料、本、ネットと、いろいろあるわけです。

ですので、今時本をたくさん読む、というのはかえって非効率的な面もあり、またそれが目的になってしまうと、まさしく練習のための練習になって本末転倒で意味がありません。

あくまで情報を得るための一手段として本を読む事も選択肢に入れる、くらいで十分です。

参照:
http://www.amazon.co.jp/dp/4774126624/
2007-07-22 : Home-Money-Incoming : コメント : 0 : トラックバック : 0
Pagetop

得意分野を持ちつつ新しい提案や製品を作ろう

まず得意分野を持ちましょう。

何でもできるというのは何もできないのと同じだからです。何もこだわりが無いと、ノウハウが蓄積できずその都度勉強しながら何とかやり遂げても、品質が今一つという事になってしまいます。

かといって同じステージに留まっていては進歩が無いので、仕事はどんどん人に任せ、自分はより高いレベルを目指しましょう。

そのためには自ら新しい提案や製品を率先して作っていかなければなりません。

自ら営業し、明確にアピールできる技術があって、お客さんの要求と一致すれば、仕事にならない方がおかしいです。

参照:
http://www.amazon.co.jp/dp/479801558X/
2007-07-21 : Work-Product-Customer : コメント : 0 : トラックバック : 0
Pagetop

emacsのインストール

標準で Fedora Core6 をインストールした場合、emacsが無いですので、rootでインストールします。

yum install emacs emacs-common emacs-common-muse emacs-el emacs-muse emacs-muse-el

また、このままだとコードを編集する際に色が表示されないため、.emacsを以下のように設定しておきます。


;
; 色付けの設定
;

; 色を付ける
(global-font-lock-mode 1)

; 対応する括弧に色付けする
(show-paren-mode 1)

; 選択した領域に色付け
(transient-mark-mode 1)

テーマ : Linux
ジャンル : コンピュータ

2007-07-21 : Work-Linux-Command/Editor : コメント : 0 : トラックバック : 0
Pagetop

Makefileの基本テクニック

Makefileを記述する際に知っておくと便利なテクニックを挙げ、それぞれについて説明を行ないます。

■ ディレクトリパス取得
ディレクトリに移動し、その中でカレントディレクトリパスを新しく更新します。

- ./Makefile

curdir = $(shell pwd)

all:
echo $(curdir)
(cd hoge; make;)


- ./hoge/Makefile

curdir = $(shell pwd)

all:
echo $(curdir)


shell関数を使用して$(shell pwd)のように記述すると、Unixのシェルコマンドの実行結果が変数展開されます。また、ディレクトリ移動の箇所を括弧"()"で囲むと、ディレクトリ移動先の処理が終了後に自動的にカレントディレクトリに戻ってきます。

■ 引数からターゲットを決める
引数でmakeにディレクトリリストを渡し、それをターゲットにしてコマンドを実行する例です。カレントディレクトリに複数のディレクトリが存在し、特定のディレクトリに対してのみ処理を行なう場合に使用します。


hoge*::
(cd $@; make;)


"make hoge*"という風に使用します。フォニーターゲットを二重コロンルールで記述し、ファイルターゲットで更新されないようにします。コマンドには自動変数"$@"を使用し、複数のターゲットの内現在使用されているターゲットが展開されます。

■ ターゲットディレクトリ生成
ターゲットに対応したディレクトリが無い場合には上記のテクニックは使用できません。そこで、ディレクトリの存在しない場合とする場合で、二つターゲットを用意しておくと問題が解決可能です。


hoge%:
mkdir $@

hoge*::
(cd $@; ls > tmp.txt;)


hoge*が無い場合には最初のターゲットに沿ってディレクトリが作成され、hoge*が存在する場合には2番目のターゲットが実行されます。

■ if文
Makefileを使用する場合、文法はBourne shellと変わりませんが、一行に書く必要がありますので、いくつかコツが必要です。


all:
if [ ! -d hoge ]; \
then mkdir hoge; \
fi


Bourne shellで改行する必要がある箇所は、"; \"に置き換えてSyntaxエラーを回避します。これはhogeというディレクトリが存在しない場合に新しくディレクトリを作り、そうで無い場合には何もしないMakefileです。

■ for文
Makefileを使用する場合、文法はBourne shellと変わりませんが、一行に書く必要がありますので、いくつかコツが必要です。


all:
for i in hoge*; \
do (cd $$i; make;); \
done


Bourne shellで改行する必要がある箇所は、"; \"に置き換えてSyntaxエラーを回避します。また、MakefileとBourne shellの変数展開のルールが2重で適用されますので、for文の変数を"$$i"と記述します。

for文のリストの部分はカレントディレクトリのファイルリストにも適用可能です。この例の場合はカレントディレクトリにhoge1, hoge2, ・・・といったファイルもしくはディレクトリが必要となります。

■ 条件分岐
Makefileの構文による条件分岐の例を以下に示します。


MODE = write

all:
ifeq ($(MODE), write)
echo write
else
echo read
endif


変数MODEの値がwriteならばifeq以下のコマンドが実行され、そうでなければelse以下のコマンドが実行されます。

テーマ : Linux
ジャンル : コンピュータ

2007-07-20 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

Makefileの構成

Makefileの構成としては、以下のようにするのが理想的です。


all:reltarget3
・・・
target1:relation
・・・
target2:target1
・・・
target3:target2
・・・


target1をtarget2の依存関係に、target2をtarget3の依存関係に記述し、relationが更新されると連鎖してターゲットが新しく生成されるようにします。そして、最終ターゲットをデフォルトターゲットの依存関係に組み込むと、各ターゲットをさかのぼって依存関係が更新されていると、その部分のコマンドを実行します。

テーマ : Linux
ジャンル : コンピュータ

2007-07-20 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

Makefileの基本

単純なMakefileは以下のような"ルール"から成り立っています。


変数 = 値

ターゲット : 依存関係
コマンド
・・・


変数とは変数の値と呼ばれるデータの文字列に取って代わらせるのにMakefile内で定義する名前のことです。明示的に値を要求する事でターゲットや依存関係、コマンドなどのMakefileのさまざまな場所で代用できます。

変数の値に置き換えさせるようにするには、ドル記号の後に括弧か大括弧(ブレース、"{ }"の事)の中に変数を書きます。つまり、変数fooの有効な参照は"$(foo)"と"${foo}"になります。この"$"にはこのように特別な意味があるため、ファイル名やコマンドに一文字のドル記号を使うには"$$"と書かなければなりません。

変数はMakefileのどこにあっても読み込み時に展開されます。

変数には関数を使う事も出来ます。関数呼び出しは変数の参照に似ていて、$(関数 引数)または、${関数 引数}と記述します。

ターゲットは通常、プログラムによって生成されたファイルの名前です。ターゲットの例として、実行可能なオブジェクトファイルがあります。"clean"のように実行するアクションの名前でも構いません(フォニーターゲット)。なお、最初に記述されたターゲットをデフォルトターゲットと呼びます。

依存関係とは作成するターゲットを入力するのに利用されるファイルもしくはターゲットのことです。1つのターゲットはよくいくつかのファイルに依存しています。

コマンドとはmakeが実行するアクションのことです。ルールは複数のコマンドを持っていてもよく、それぞれが各自特有の行に並びます。

[重要]
コマンド行の始まりは必ずタブでなければいけません!! このことは気づきにくいため思いもよらぬ失敗になることがあります。

テーマ : Linux
ジャンル : コンピュータ

2007-07-19 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

一括置換

プログラミング作業をしている最中、複数のファイルを同じルールで一括置換したいという状況は頻繁にあるかと思います。ここではPerlスクリプトを使って一括置換する方法を説明します。

まず3つのスクリプトを準備します。最初はbackup.plです。このスクリプトは引数で指定したファイルを、.backupをつけた名前でコピーします。


#!/usr/bin/perl

# 引数分ループ
foreach (@ARGV) {
# 入出力ファイル名決定
$in_file_name = $_;
$out_file_name = $in_file_name . ".backup";

# 出力ファイルで入力ファイルを上書き
system "cp -f $in_file_name $out_file_name";
}


次はreplace.plです。スクリプト内で設定した置換ルールで、引数に指定したファイルを置換します。


#!/usr/bin/perl

# 引数分ループ
foreach (@ARGV) {
# 入出力ファイル名決定
$in_file_name = $_;
$out_file_name = $in_file_name . ".tmp";

# 入出力ファイルハンドル確保
open (INFILE, "<$in_file_name") || die "$in_file_name: $!";
open (OUTFILE, ">$out_file_name") || die "$out_file_name: $!";

# 入力ファイル内を走査
while (<INFILE>) {
#
# <置換記述開始>
#

s/hoge/fuga/g;

#
# <置換記述開始>
#

print OUTFILE; # 出力ファイルに置換結果を書き込み
}

# 入出力ファイルハンドル開放
close (INFILE);
close (OUTFILE);

# 出力ファイルで入力ファイルを上書き
system "mv -f $out_file_name $in_file_name";

}


最後はundo.plです。もしも間違って置換してしまった場合、引数に置換したファイルを指定すると、backup.plで作成しておいたファイルと置き換えて置換前に戻します。


#!/usr/bin/perl

# 引数分ループ
foreach (@ARGV) {
# バックアップファイルかそうでないかを識別
if (!/\.backup$/) {
# 入出力ファイル名決定
$in_file_name = $_ . ".backup";
$out_file_name = $_;

# 出力ファイルで入力ファイルを上書き
system "cp -f $in_file_name $out_file_name";
}
}

テーマ : プログラミング
ジャンル : コンピュータ

2007-07-19 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop
ホーム

プロフィール

zive

Author:zive
大阪在住、男

ブログ検索

月別アーカイブ

FC2カウンター