« 2007年07月 | メイン | 2007年09月 »

2007年08月 アーカイブ

2007年08月01日

レバレッジ・リーディング

レバレッジ・リーディング 100倍の利益を稼ぎ出すビジネス書「多読」のすすめ

本書は、ビジネスに活かす効果的な読書術を紹介する。

本の投資対効果は100倍。1500円の本なら15万円の利益を生む。

読み方については、フォトリーディングを重なるところが多い。

読書後のフォローで、知識をしっかりと身につけるための方法が参考になる。
目的は本を読むことではなく、ビジネスに活かすことだから、理にかなっている。

追記
本書で紹介されている書籍。

読んでおくべきビジネス書20

原理原則の本10

2006年に読んだ読むべきビジネス書10

ActiveRecordのbefore_saveメソッド

ActiveRecordのbefore_saveメソッドが真を返さない場合、 ActiveRecord::RecordNotSaveの例外を投げるようだ。

def before_save
  if ...
  end
  true #真を返すこと
end

2007年08月02日

C++Builder2007でCG32.DLLがリンクされてしまう問題

C++Builder2007では、コンパイルの設定にかかわらず、CG32.DLLがリンクされてしまうようです。

とりあえず、プロジェクトファイルの次の2行を削除することで、CG32.DLLがリンクされなくなるようです。

<LinkCodeGuard>true</LinkCodeGuard>
<BCC_CodeguardDebugLevel>Level1</BCC_CodeguardDebugLevel>

追記
C++Builder 2007 Update 2で修正されました。

Re:Re:href="#" onclick の悪習

a要素のhref属性に値が入ってるとonclick属性の内容を実行後にhref属性の値を参照しようとする。

Re:href="#" onclick の悪習

onclickの内容がfalseを返せば、実行後にhref属性の値は参照されません。

例
<a href="http://www.google.com" onclick="alert('click'); return false;">Google</a>

Google

2007年08月03日

トマト

トマト

トマトです。

難しい。
思うように描けませんでした。

レバレッジメモはマインドマップで代用できるか

レバレッジ・リーディングで紹介されているレバレッジメモ。
これは、フォトリーディングで描いたマインドマップで代用できそう。
文字をだらだらと書くよりも、マインドマップの方が認識が早いし。
ただし、かさばるという欠点がある。

2007年08月09日

寝るだけで夢がかなう仕事術

寝るだけで夢がかなう仕事術

一言で言うと、「寝る5分前に脳に命令を出しましょう」。

紹介されている参考文献の半分をすでに読んでいたため、目新しさはなかった。
知識の再確認にはなる。

レバレッジ時間術にもあったと思うが、やはり15分の午睡は良さそう。

2007年08月10日

C++Builder 2007 Update 2

C++Builder 2007 Update 2が公開されました。

解決された問題点は、

  • 「classic undocked」レイアウトを VCL デザイナとともに使用しているときに、IDE を最小化してもデザインウインドウが最小化しない
  • -O1 もしくは ?O2 オプションを使用したときにコンパイラがスタックポインタを破壊する。また、最適化を行うべき状況で、コンパイラが最適化しない場合に比べて遅く、肥大した不要なコードを追加する
  • プライベートの複数のTRect フィールドを持つDelphiコンポーネントを使用したときにC++コンパイラがTRect 構造体のオフセットアドレスのミスマッチを起こす
  • 頻繁な "incorrect project override option" エラーが発生し、C++Builder の再起動なしに、プロジェクトがコンパイルできない
  • CodeGuard オプションをオンに設定すると、すべての設定でcg32.lib をリンクし、設定をオフにできない
  • C++ ユニットに結び付けられていないヘッダファイルでコード補完が失敗する
  • ヘッダファイルでコード補完に失敗したときに、"Unable to open input file" というメッセージがビルドタブに表示される
  • C++ コンパイラが"Internal back end error C1038" というメッセージを表示する
  • 大きな .obj ファイルがある場合に、依存関係のチェックに時間がかかる

これで、だいぶ使えるようになりそう。

アップデートは、スタートメニューのスタート→プログラム→CodeGear RAD Studio→アップデートの確認から、簡単にできるようになった。

追記
「Update2の実行時に「オリジナルのセットアップファイルが保存されている場所」のダイアログが表示さる現象について説明が公開されました。

続・年収300万円時代を生き抜く経済学 実践編!―給料激減でも豊かに生きるための「新・生活防衛術」

続・年収300万円時代を生き抜く経済学 実践編!―給料激減でも豊かに生きるための「新・生活防衛術」

年収300万円でやりくりして心豊かに暮らす節約術。

それよりも年収を上げるように行動した方がいいと思う。

なぜ株式投資はもうからないのか

なぜ株式投資はもうからないのか

本書は、株式投資が一般投資家にとっていかに不利かをわかりやすく解説する。

特に目新しい話も奇抜な意見もない。入門書としていいかも。

これから株を始める人は一度読んでおくと良いかもしれない。

2007年08月11日

親より稼ぐネオニート―「脱・雇用」時代の若者たち

より稼ぐネオニート―「脱・雇用」時代の若者たち

ネオニートとは、仕事に就く意志はないが、何らかの収入源があり不自由なく暮らせる者たちを意味する言葉である。

ネオニート - Wikipedia

ニートとして行き詰まっている人たちに、本書は新しい選択肢と可能性を示す。

統計を見ると、若年労働人口の2割弱の人間には雇用の受け皿がない。
さらに、4割以上の企業が人手不足であると考えているにもかかわらず、フリーターの正規従業員としての採用には9割近くの企業が消極的だという。
そうなると、一度ニート・フリーターになると、その状況から抜け出すことはきわめて困難だ。
ニート・フリーターの当事者やその家族の閉塞感、そしてそれがトラブルを生み出すことだろう。

インターネットの普及により、アフィリエイト・オークション・情報販売など、わずかな初期費用でビジネスを始めることができるようになった。
就職という選択肢が困難であるなら、その他の選択肢を考えてみてはどうか。
本書では、自営業の選択肢を紹介している。

頭の固くなった大人たちには、就職以外の選択肢が見えない。
時代が変わり、選択肢が広がっていることに気づきたい。

ブログの目次を更新しました

ちょっと間が開きましたが、ブログの目次を更新しました。

2007年08月12日

たまねぎ

たまねぎ

携帯電話のカメラ、性能が良くないな…

商品パッケージを、色彩心理の視点から解説

カラーセラピストでもあるBeltaさんのブログで、 商品パッケージを、色彩心理の視点から解説しています。

アイスクリームも「和」ブーム。
中で目を引いたパッケージがこれ。「井村屋 大納言あずき最中」

「和」のイメージをきっちり押さえた配色です。

和風配色 その1

デザインに秘められたメッセージを読み解く、
興味深い記事です。

続編にも期待しています。

色に興味のある人は、色彩検定3級(正式名称は『文部科学省後援 ファッションコーディネート色彩能力検定』)がお薦めです。
色についての基礎知識と、色を見分ける力を身につけることができます。
普段の生活には3級で十分だと思います。

2007年08月13日

時間の分子生物学

時間の分子生物学

最近読んだいくつかの本で、時間の分子生物学が紹介されていたので、読んでみました。
読んでみて納得。すばらしい一冊でした。

本書は、生物時計と睡眠について、遺伝子レベルで解説しています。
というと難しそうに聞こえますが、素人にもわかりやすく読みやすく書かれています。

湾岸戦争で米軍が犯した失敗の一つに、味方の輸送機にミサイルを発射したことがあります。
このミスが起こったのは、眠くなりミスをしやすい時間帯だったことが、学会で発表されています。
睡眠について知ることは、ミスを減らして仕事の効率を上げることに役立ちます。

眠気は夜が強く日中は弱いのですが、午後二時頃に大きなピークがあるそうです。
また、夕方から早い夜にかけて(18時から20時くらい?)非常に眠気の弱い時間帯(フォービッドン・ゾーン)があります。
午後二時頃には、集中力が必要な重要な仕事は避けた方が良さそうです。

最近よく聞く「午睡」の効果ですが、元ネタは産業医学総合研究所の高橋正也氏らの研究みたいですね。
午睡を上手にとることで、午後の仕事の効率を上げて気持ちよく働くことができるようです。
時間は15分から30分、それ以上眠ると覚醒に時間がかかり作業効率が落ちます。
午睡する前にコーヒーを飲んでおくと、ちょうど効いてきた頃に目が覚めるという、ちょっとしたテクニックが紹介されていました。

「早寝早起き」よりも「早起き早寝」の方がいいそうです。
夜早く寝ても、生物時計が送れたままでは早く起きることはできません。
生物時計を進めるには、朝の早い時間に光を浴びる必要があります。
朝早く起きる習慣を作るには、まず朝早く起きて朝日を浴びることから始めると良いようです。

人間の生物時計の周期は25時間という話を聞いたことがありましたが、これはアドリブ条件下の限定的な話だそうです。
完全に外部の影響を除いた環境下では、年齢によらず、ほぼ24時間ということです。
ところで、この実験の被験者になるボランティア、謝礼は6週間の場合で100万円を越えるそうです。

目覚まし時計が鳴る直前に目が覚める仕組みも解説されていました。
通常、起床時間の1時間前から増え始める血液中のコルチゾールが、起きたい時間の直前になると増え始めます。 脳が生物時計を使って、今何時なのかを推測して、起きるための準備を始めているのです。
普通、意志では制御できない自律神経機能を、意志の力で、それも睡眠中に制御しているという、不思議な現象です。

まだまだ興味深い話はたくさんありましたが、長くなりましたので、この辺で終わります。

とにかくおもしろい、お薦めの本です。

汎用的なフォームタグ生成メソッド

Ruby on Railsの話。

フォームタグ生成メソッドに"_tag"をつけると、ActiveRecordインスタンスに依存しないinputタグを生成するメソッドになる。

<%= text_field_tag(:email, 'メールアドレスを入力してください。', :size => 10, :maxlength => 256) %>
<input id="email" maxlength="256" name="email" size="10" type="text" value="メールアドレスを入力してください。" />

XAMPP for Windows + OpenPNEでメール送信エラー

XAMPP for WindowsOpenPNE の組み合わせで、メール送信処理の時にエラーが発生する。

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in …

PHPの設定を変更することで、正常に動作するようになるようだ。

c:\xampp\apache\bin\php.ini の以下の箇所を修正する。

変更前

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

変更後
sendmail_pathの頭にある「;」を削除する。

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

修正後、Apacheを再起動すると、変更が反映される。(再起動するまでは修正が反映されないので注意)

PHPの$_POST、$_GET、$_COOKIE配列の要素に配列を使う機能

この「$_POST、$_GET、$_COOKIE配列の要素に配列を使う機能」はよく知られていない機能の一つと言っても良いかも知れません。

PHPの$_POST, $_GET, $_COOKIEの要素に配列を使用する

このページを見て、初めて知りました。

早速実験してみる。

test.php

<?php
print_r($_GET);
?>

に、http://localhost/test.php?a[b]=1&a[c]=2 でアクセスしてみると、

Array
(
    [a] => Array
        (
            [b] => 1
            [c] => 2
        )
)

これは便利かも。

2007年08月14日

XAMPP for Windows の Apache が起動しない

XAMPP for Windows の Apache が起動しない場合のチェックポイント。

Skypeが起動していませんか。
Apacheが使用するポート80をすでにSkypeが使用しているために、 Apacheが起動できないのかもしれません。

Skypeを終了したらApacheが起動できた場合、やはりSkypeが原因です。
ApacheもSkypeも両方使いたい場合は、Skypeの設定を変更することで対処できます。

  1. Skypeのメニューから「ツール」→「設定」を選択します。
  2. 「詳細」タブの「接続」を選択します。
  3. 「上記のポートの代わりに、ポート80を使用」のチェックを外します。

PHPの内部文字エンコーディング

内部文字エンコーディングはphp.iniのmbstring.internal_encodingで指定する。
また、スクリプト内ではmb_internal_encoding()で設定・取得ができる。

この内部文字エンコーディングは何に使われるのか、というと次の3つである。

  • HTTP入力文字エンコーディング変換
  • HTTP出力文字エンコーディング変換
  • マルチバイト文字列(mbstring)関数においてデフォルトの文字エンコーディング

ちなみに、PHPスクリプトの文字コードは「mbstring.script_encoding」で指定する。

HTTP入力文字エンコーディング変換

php.iniのmbstring.encoding_translationの値が「On」の場合、 HTTP入力文字エンコーディングが自動的に内部文字エンコーディングに変換される。

mbstring.encoding_translationの値が「Off」の場合は、何もしない。

HTTP出力文字エンコーディング変換

mb_output_handler()は、内部文字エンコーディングからHTTP出力文字エンコーディングに変換する。

マルチバイト文字列(mbstring)関数においてデフォルトの文字エンコーディング

マルチバイト文字列(mbstring)関数のうち、文字エンコーディングが必要な一部の関数では、 文字エンコーディングを指定しない場合は内部文字エンコーディングが指定されたことになる。

毎回、文字エンコーディングを指定する手間が省ける。

PHPスクリプトが出力するデータの文字コード

PHPスクリプトが出力するデータの文字コードについて。

mbstring.http_outputは出力する文字コードを指定します。
指定するだけなので、これだけでは自動的に変換しません。

変換するにはmb_output_handler()を実行します。
mb_output_handler()を実行したときに、内部エンコーディング(mbstring.internal_encoding)からmbstring.http_outputで指定した文字コードに変換して出力されます。

何もしない場合は、PHPスクリプトの文字コードで出力されます。

Firefox用PHPマニュアル検索プラグイン

Firefox用PHPマニュアル検索プラグインを調べてみたところ2つ発見

php.iniの設定を.htaccessで変更する

php.iniの設定を.htaccessで変更する方法。

設定可能な項目

「.htaccess」ファイルで設定出来る項目は、PHPマニュアル(php.ini ディレクティブ)において 「変更の可否」が「PHP_INI_PERDIR」または「PHP_INI_ALL」と指定されているものです。

.htaccessで変更できる項目を調べるスクリプト

<?php
print_r('.htaccessで変更できる項目は:<br>');
foreach (ini_get_all() as $name => $value) {
  if ($value['access'] & 2) {
    print_r($name . '<br>');
  }
}
?>

参考:ini_set()でどの設定を変えることが出来るか調べる

文法

.htaccessに記述する形式

php_value

php_value 項目名 値

セット済みの値をクリアしたい場合は、値に「none」を指定します。

php_value mbstring.language "Japanese"

php_flag

php_flag 項目名 on|off

php_flag  mbstring.encoding_translation Off

2007年08月15日

php.iniの設定をPHPスクリプト内で変更する

php.iniの設定をPHPスクリプト内で変更する方法。

PHPスクリプトの可搬性を高めるために、php.iniの設定にできるだけ依存しないようにしたい。

設定可能な項目

「.htaccess」ファイルで設定出来る項目は、PHPマニュアル(php.ini ディレクティブ)において 「変更の可否」が「PHP_INI_USER」または「PHP_INI_ALL」と指定されているものです。

.htaccessで変更できる項目を調べるスクリプト

<?php
print_r('ini_set()で変えてしまえる設定は:<br>');
foreach (ini_get_all() as $name => $value) {
  if ($value['access'] & 1) {
    print_r($name . '<br>');
  }
}
?>

参考:ini_set()でどの設定を変えることが出来るか調べる

ini_set

設定は、ini_set()で行います。
ini_set()は、成功した場合は変更前の値を、失敗した場合にFALSEを返します。

設定は、関連する関数を使用する前に行う必要があります。
たとえば、「session.use_trans_sid」は、session_start()を使用する前に設定します。

ini_get

現在の設定を取得するには、ini_get()を使用します。

また、ini_get_all()を使用すると、すべての項目の設定を取得できます。

オープンソースソフトウェアの設定

オープンソースソフトウェアではどのように設定しているか調べてみました。

mbstring.http_input、mbstring.http_outputを「pass」に変更しています。
文字化け対策として無難な設定だと思います。

PukiWiki 1.4.7 UTF8版

init.php

mb_language(MB_LANGUAGE);
mb_internal_encoding(SOURCE_ENCODING);
ini_set('mbstring.http_input', 'pass');
mb_http_output('pass');
mb_detect_order('auto');

XOOPS Cube V2.1

Legacy_LanguageManager.class.php

ini_set( 'mbstring.http_input', 'pass');
ini_set( 'mbstring.http_output', 'pass');
ini_set( 'mbstring.func_overload', 0);
ini_set( 'mbstring.substitute_character', 'none');

OpenPNE 1.8.2

config.phpで設定。
mbstring.http_inputが「auto」です。

mb_language('Japanese');
ini_set('mbstring.detect_order', 'auto');
ini_set('mbstring.http_input'  , 'auto');
ini_set('mbstring.http_output' , 'pass');
ini_set('mbstring.internal_encoding', 'UTF-8');
ini_set('mbstring.script_encoding'  , 'UTF-8');
ini_set('mbstring.substitute_character', 'none');
mb_regex_encoding('UTF-8');

仕事のための12の基礎力~「キャリア」と「能力」の育て方~

仕事のための12の基礎力~「キャリア」と「能力」の育て方~

先日読んだ『キャリアデザイン入門』と筏下りや山登りの話が同じだと思ったら、 同じ著者さんでした。

キャリアデザイン入門』が時期別に解説していたのに対して、 『仕事のための12の基礎力』は能力別に解説しています。

本書では、キャリアを成功に導く12の基礎力について解説しています。
身につけるべき年齢も示してあるので、今自分が何を学ぶべきか、 そしてこれから何を学んでいけばいいのかを考えるときの指針になると思います。

  1. 反応(リアクション)力…10代~20代
  2. 愛嬌力…10代~20代
  3. 楽天力…10代~50代
  4. 目標発見力…10代~40代
  5. 継続学習力…20代~40代
  6. 文脈理解力…20代~40代
  7. 専門構築力…30代~40代
  8. 人脈開拓力…30代~50代
  9. 委任力…30代~40代
  10. 相談(カウンセリング)力…40代~60代
  11. 教授力…40代~60代
  12. 仲介調整(コーディネート)力…40代~60代

2007年08月16日

レシピ1.1.今日の日付の割り出し(RubyクックブックをPHPに翻訳する)

RubyクックブックをPHPに翻訳してみる。

レシピ1.1.今日の日付の割り出し

getdate()は、引数を指定しない場合、現在のローカルな時間に関する情報を返します。

<?php
//現在の時間を取得する
print_r(getdate());
?>

Array
(
    [seconds] => 4
    [minutes] => 29
    [hours] => 12
    [mday] => 16
    [wday] => 4
    [mon] => 8
    [year] => 2007
    [yday] => 227
    [weekday] => Thursday
    [month] => August
    [0] => 1187234944
)

time()は、現在のUnixタイムスタンプを返します。

<?php
//現在のUnixタイムスタンプを返します。
print_r(time());
// => 1187589754
?>

date()は、ローカルの日付/時刻を書式化します。

<?php
//書式を指定して、現在の時間を取得する。
print_r(date('Y/n/j G:i:s'), time());
// => 2007/8/16 12:38:29

print_r(date('Y/n/j G:i:s'));
// => 2007/8/16 12:38:29
?>

mktime()は、日付を Unix のタイムスタンプとして取得します。

<?php
//1999年12月31日23時21分5秒のタイムスタンプを取得する
print_r(mktime(23, 21, 5, 12, 31, 1999));
// => 946650065
?>

昨日の日付を取得するには、date()mktime()を組み合わせて使用します。
ポイントは「date("d") - 1」です。

<?php
//昨日の日付を取得する
$time = mktime(date("H"), date("i"), date("s"), date("m"), date("d") - 1, date("Y"));
print_r(date('Y/n/j G:i:s', $time));
// => 2007/8/15 12:50:22
?>

明日の日付を取得するには、「date("d") + 1」です。

<?php
//明日の日付を取得する
$time = mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 1, date("Y"));
print_r(date('Y/n/j G:i:s', $time));
// => 2007/8/17 12:51:45
?>

OpenOffice.org CalcでTSV(タブ区切り)ファイルを開く方法

OpenOffice.org CalcでTSV(タブ区切り)ファイルを開く方法。

OpenOffice.orgで拡張子が「.txt」のファイルを開くと、Writerが起動してしまいます。

TSV(タブ区切り)ファイルをCalcで開くには、ファイルに種類に「テキスト CSV(*.csv;*.txt;*.xls)」を選択します。

  1. メニューから「ファイル」→「開く」を選択する。
    「ファイルを開く」ダイアログが表示される。

  2. 「ファイルの種類」を「テキスト CSV(*.csv;*.txt;*.xls)」を選択する。

  3. ファイルを選択して「開く」ボタンをクリックする。 「テキストのインポート」ダイアログが表示される。

  4. 区切りのオプションで「タブ」を選択する。

  5. 「OK」ボタンをクリックする。

2007年08月17日

1.2.日付の正確な解析とファジィ解析(RubyクックブックをPHPに翻訳する)

RubyクックブックをPHPに翻訳してみる。

レシピ1.2.日付の正確な解析とファジィ解析

checkdate()は、グレグリオ歴の日付/時刻の妥当性を確認します。

<?php
var_dump(checkdate(12, 31, 2000));
var_dump(checkdate(2, 29, 2001));
?> 

bool(true)
bool(false)

strtotime()は、英文形式の日付を Unix タイムスタンプに変換します。

<?php
echo date('Y/n/j G:i:s', strtotime("now")), "\n";
// => 2007/8/16 13:16:01

echo date('Y/n/j G:i:s', strtotime("10 September 2000")), "\n";
// => 2000/9/10 0:00:00

echo date('Y/n/j G:i:s', strtotime("+1 day")), "\n";
// => 2007/8/17 13:16:01

echo date('Y/n/j G:i:s', strtotime("+1 week")), "\n";
// => 2007/8/23 13:16:01

echo date('Y/n/j G:i:s', strtotime("+1 week 2 days 4 hours 2 seconds")), "\n";
// => 2007/8/25 17:16:03

echo date('Y/n/j G:i:s', strtotime("next Thursday")), "\n";
// => 2007/8/23 0:00:00

echo date('Y/n/j G:i:s', strtotime("last Monday")), "\n";
// => 2007/8/13 0:00:00
?>

strptime()は、strftime()が生成した日付/時刻をパースします。
※注意: この関数は Windows 環境にはまだ実装されていません。

<?php
print_r(strptime('2007/8/18 13:25:37', '%Y/%m/%d %H:%M:%S'));
?php

Array
(
    [tm_sec] => 37
    [tm_min] => 25
    [tm_hour] => 13
    [tm_mday] => 18
    [tm_mon] => 7
    [tm_year] => 107
    [tm_wday] => 6
    [tm_yday] => 229
    [unparsed] =>
)
?>

2007年08月18日

クッキー

クッキー

クッキー「森永 チョイス」とお皿ジノリ「ベッキオ・ホワイト」のクレセント。

書き始めてから、難しいことに気がついた。

お皿だけでよかったかも。

2007年08月19日

ブログの目次を更新しました

毎週恒例の、ブログの目次を更新しました。

2007年08月20日

1.3.日付の出力(RubyクックブックをPHPに翻訳する)

RubyクックブックをPHPに翻訳してみる。

レシピ1.3.日付の出力

strftime()は、ロケールの設定に基づいてローカルな日付・時間をフォーマットします。

<?php
echo date('Y/n/j G:i:s', strtotime("now")), "\n";
// => 2007/8/16 13:16:01

echo date('Y/n/j G:i:s', strtotime("10 September 2000")), "\n";
// => 2000/9/10 0:00:00

echo date('Y/n/j G:i:s', strtotime("+1 day")), "\n";
// => 2007/8/17 13:16:01

echo date('Y/n/j G:i:s', strtotime("+1 week")), "\n";
// => 2007/8/23 13:16:01

echo date('Y/n/j G:i:s', strtotime("+1 week 2 days 4 hours 2 seconds")), "\n";
// => 2007/8/25 17:16:03

echo date('Y/n/j G:i:s', strtotime("next Thursday")), "\n";
// => 2007/8/23 0:00:00

echo date('Y/n/j G:i:s', strtotime("last Monday")), "\n";
// => 2007/8/13 0:00:00
?>

date()は、ローカルの日付/時刻を書式化します。

<?php
//書式を指定して、現在の時間を取得する。
print_r(date('Y/n/j G:i:s'));
// => 2007/8/16 12:38:29
?>

idate()は、ローカルな時刻/日付を整数として整形します。

<?php
//年
print_r(idate('Y'));
// => 2008

//月
print_r(idate('m'));
// => 8
?>

2007年08月21日

レシピ1.4.日付の反復

RubyクックブックをPHPに翻訳してみる。

レシピ1.4.日付の反復

mktimeはUNIXのタイムスタンプを返します。
このタイムスタンプは秒数を表しています。

<?php
///1999年12月31日から2000年1月10日までの繰り返し
$day = 60 * 60 * 24; //1日の秒数
$from = mktime(0, 0, 0, 12, 31, 1999);
$to = mktime(0, 0, 0,  1, 10, 2000);
for ($date = $from;
     $date <= $to;
     $date += $day) {
  print_r(date('Y/m/d', $date) . '<br />');
}
?>

2007年08月22日

レシピ1.5.日付の演算

RubyクックブックをPHPに翻訳してみる。

レシピ1.5.日付の演算

タイムスタンプに秒数を加減して計算する

<?php
//タイムスタンプに秒数を加減して計算する
//2008年9月1日の10日後を求める
$date = mktime(0, 0, 0, 9, 1, 2008); //2008年9月1日
$inc_day = 10; //10日後
$one_day = 60 * 60 * 24; //1日の秒数
print_r(date('Y年m月d日', $date + $inc_day * $one_day));
// => 2008年9月11日
?>

mktime()の引数を加減して求める。

<?php
//[mktime()][3]の引数を加減して求める。
//2008年9月1日の10日後を求める
$inc_day = 10; //10日後
$date = mktime(0, 0, 0, 9, 1 + $inc_day, 2008); //2008年9月1日
print_r(date('Y年m月d日', $date));
// => 2008年9月11日

//2008年9月1日の10日前を求める
$inc_day = -10; //10日前。負の数を指定する
$date = mktime(0, 0, 0, 9, 1 + $inc_day, 2008); //2008年9月1日
print_r(date('Y年m月d日', $date));
// => 2008年8月22日
?>

月末の日付を求める。
mktime()の日に「0」を指定すると、前月の月末の日付を取得できます。

<?php
$date = mktime(0, 0, 0, 9, 0, 2008); //2008年9月0日
print_r(date('Y年m月d日', $date));
// => 2008年8月31日
?>

2つの日付の間隔を求めるには、タイムスタンプの差から日数を計算します。

<?php
$from = mktime(0, 0, 0, 9, 1, 2008); //2008年9月1日
$to = mktime(0, 0, 0, 9, 11, 2008); //2008年9月1日
$one_day = 60 * 60 * 24; //1日の秒数
$period = ($to - $from) / $one_day;
print_r($period);
// => 10
?>

2007年08月23日

カレントディレクトリとそのサブディレクトリから特定の文字を含むテキストファイルを検索するRubyスクリプト

Windowsのファイル検索は、文字コートがシフトJISに限定のようです。

シフトJIS以外の文字コード(euc-jpやutf-8)のファイルも検索したかったので、作成してみました。

カレントディレクトリとそのサブディレクトリから特定の文字を含むテキストファイルを検索します。

サンプルでは、ファイルの拡張子を「.php」に限定しています。
引数の文字列で検索します。

#!/usr/bin/ruby -Ks
require 'kconv'

keyword = ARGV.shift
Dir.glob("**/*.php") {|f|
  file = File.read(f).tosjis
  puts f if file.include?(keyword)
}

もっと早い方法がありますか?

レシピ1.6 任意の日付からの経過日数

RubyクックブックをPHPに翻訳してみる。

レシピ1.6 任意の日付からの経過日数

特定の日付から何日が経過したか、あるいは未来の日付まであと何日残っているか知りたい。

特定の日付から何日が経過したか

<?php
//2007年1月1日から何日が経過したか
$t1 = mktime(0, 0, 0, 1, 1, 2007); //2007年1月1日のタイムスタンプ
$t2 = time(); //現在のタイムスタンプ
$one_day = 60 * 60 * 24; //1日の秒数
echo ($t2 - $t1) / $one_day; //2007年1月1日からの経過日数
// => 234.69549768519
?>

未来の日付まであと何日残っているか

<?php
//未来の日付まであと何日残っているか
$t1 = mktime(0, 0, 0, 1, 1, 2008); //2008年1月1日のタイムスタンプ
$t2 = time(); //現在のタイムスタンプ
$one_day = 60 * 60 * 24; //1日の秒数
echo ($t1 - $t2) / $one_day;
// => 130.30420138889
?>

レシピ1.7 タイムゾーンの変換

RubyクックブックをPHPに翻訳してみる。

レシピ1.7 タイムゾーンの変換

ほかのタイムゾーンで同じ瞬間を表したい。

datedefaulttimezone_set()は、スクリプト中の日付/時刻関数で使用されるデフォルトタイムゾーンを設定します。

<?php
echo date('r', time());
// => Thu, 23 Aug 2007 16:56:02 +0900

//タイムゾーンをUTCに設定する
date_default_timezone_set('UTC');
echo date('r', time());
// => Thu, 23 Aug 2007 07:56:03 +0000
?>

timezoneidentifierslist()は、すべてのタイムゾーン識別子を含む配列を返します。

<?php
//すべてのタイムゾーンで現在時刻を表示する
$now = $time;
foreach (timezone_identifiers_list() as $timezone) {
  date_default_timezone_set($timezone);
  echo date("r", $now).": {$timezone}\n";
}
?>

2007年08月24日

健康重要

ある研究によれば、現代に企業幹部は睡眠不足のため、午後三時を過ぎると集中力が70歳の老人並みに低下するという。
(中略)
最高の力を発揮したければ、まず心身の健康に気をつかうことだ。
一生モノの人脈力

やっぱり、長期において高い生産性を達成するためには、健康は欠かせない。

ということで、スポーツジムの費用も経費にならないかな。

仕事ができるようになる秘訣は何か

経営の神様ピーター・ドラッカーは、仕事ができるようになる秘訣は何かと問われ、「バイオリンを習いたまえ」と答えたという。
一生モノの人脈力

絵もいいと思います。
右脳で描きましょう

2007年08月25日

phpDocumentor PHPのAPI仕様書作成プログラム

PHPのAPI仕様書作成プログラムは、phpDocumentorが標準的のようです。

phpDocumentorの文法は、Javadocと非常によく似ています。

これなら、すぐに使えそう。

2007年08月26日

借金の限度額

先日、GoMETAの「金融業界 むかしばなし」に行ってきました。
多くの話がオフレコのため書くことはできませんが、気になった話を一つ紹介。

借金を返済できなくなった人の多くは、不慮のアクシデントが原因だそうです。
不慮のアクシデントとは、事故・病気・失業。
これらのために、借金の返済が遅れる→翌月の負担が大きくなる→さらに借金の返済が遅れる→さらに翌月の負担が大きくなる、という悪循環になってしまいます。

いただいたアドバイスは、「借金の限度額は一括で返済できる額まで」。
一括で返済できるけどそうすると残金が心許ないから分割にする、というような使い方です。

これは会社経営にも言えることではないでしょうか。
稲盛和夫氏の著書に次のような文章があります。

安全に経営をしようと思えば、減価償却プラス税引後利益で返せる範囲のお金でしか設備投資をしてはならないことになる。

稲盛和夫の実学―経営と会計

企業も家庭も、お金の基本は同じなのかもしれません。

2007年08月27日

レシピ1.10 曜日の検出

RubyクックブックをPHPに翻訳してみる。

レシピ1.10 曜日の検出

特定の曜日を知りたい。

date()は、与えられたフォーマット文字列によりフォーマットし、日付文字列を返します。

フォーマット文字列に「w」を指定すると、曜日を数値(0(日曜)から6(土曜))で返します。

<?php
echo date('w', mktime(0, 0, 0, 9, 1, 2007)); //2007年9月1日
# => 6

$day = array("日", "月", "火", "水", "木", "金", "土");
$i = date('w', mktime(0, 0, 0, 9, 1, 2007));
echo $day[$i];
# => "土"
?>

フォーマット文字列に「D」を指定すると、曜日を3文字のテキスト形式で返します。

<?php
echo date('D', mktime(0, 0, 0, 9, 1, 2007)); //2007年9月1日
# => Sat
?>

フォーマット文字列に「D」を指定すると、曜日をフルスペル形式で返します。

<?php
echo date('l', mktime(0, 0, 0, 9, 1, 2007)); //2007年9月1日
# => Saturday
?>

getdate()は、日付情報を連想配列で返します。 連想配列の「wday」キーには、曜日が数値(0(日曜)から6(土曜))で設定されます。

<?php
$date = getdate(mktime(0, 0, 0, 9, 1, 2007)); //2007年9月1日
echo $date['wday']
# => 6
?>

2007年08月28日

レシピ1.8 夏時間のチェック

RubyクックブックをPHPに翻訳してみる。

レシピ1.8 夏時間のチェック

現在のロケールの時刻が夏時間がどうかを知りたい。

date()は、与えられたフォーマット文字列によりフォーマットし、日付文字列を返します。

フォーマット文字列に「I」(大文字のi)を指定すると、夏時間なら1、そうでなければ0を返します。

<?php
echo date('I', mktime(0, 0, 0, 9, 1, 2007)); //2007年9月1日
# => 0
?>

2007年08月29日

レシピ1.11 商業日の処理

RubyクックブックをPHPに翻訳してみる。

レシピ1.11 商業日の処理

暦日ではなく商業日を扱う必要がある。

[date()]は、与えられたフォーマット文字列によりフォーマットし、日付文字列を返します。

フォーマット文字列に「o」を指定すると商業年度、 「W」を指定すると商業週、 「N」を指定すると商業曜日を返します。
(それぞれRubyのDate#cwyear、Date#cweek、Date#cwdayに対応している、と 思う)

<?php
$sunday = mktime(0, 0, 0, 1, 1, 2006);

echo date('o', $sunday); //2006年1月1日
# => 2005

echo date('W', $sunday); //2006年1月1日
# => 52

echo date('N', $sunday); //2006年1月1日
# => 7
?>

About 2007年08月

2007年08月にブログ「山本隆の開発日誌」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2007年07月です。

次のアーカイブは2007年09月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35