メモの日々


2001年05月08日(火) パソコン移行中

パソコン移行を完了し、古いdellを4階に返した。今Cドライブのサイズは3.4GB。

MS SDK for Javaをインストールするぞ。なんだか悲しい。

[book] 黒い家 (貴志祐介)

黒い家(貴志祐介/著) 読了。グロテスクな話だ。

[dev][c] GNUコーディング規約

GNU Coding Standardsの日本語訳。fj.comp.lang.cより。

[dev][c] プログラム言語 C の推奨されるスタイルとコーディング規範 (リンク切れ)

http://www.gfd-dennou.org/arch/comptech/cstyle/cstyle-ja.htm

もう一つコーディングスタイルの文書。fj.comp.lang.cより。

[unix] いつも心に太陽を

Solarisのことが色々書かれていそうなページ。fj.sys.sunより。

[java] Jag (リンク切れ)

http://jarg.sourceforge.net/

Jarファイルを小さくするプログラムJag。fj.comp.lang.javaより。

[unix] パーティション

Linuxのパーティションの分け方についての文書。fj.os.linuxより。

[dev][net] 電子メールなどのフォーマットを定めた文書「RFC2822」が公開

RFC822はRFC2822に取り変わられるのだ。PCDN News Letterより。

[java] 初めてのEnhydra

Enhydraの紹介記事。PCDN News Letterより。どう発音するのかがわからない。


2002年05月08日(水) 布袋頭蓋骨骨折

会社

  • そういえば今日は朝丸の内線の定期券を買った。3ヶ月で18000円。高い気がする。
  • 13:40 Kのサポートなどしていてまだ仕事していない。やっとこれから。DB2について調べないと。
  • 今日の昼食はどういうわけか服部さんのおごり。
  • 18:45 Yの打合せしたところ。金額は大体決まった。でもどうにもこうにもようわからん。
  • 兒玉くんに車の修理代として1万円貸した。 明日返してもらう予定。
  • 20:25 明日は早く来ないといけないのでもう帰りましょう。午前中に見積もりの数値を出し終えること。たぶん重要なのは早く環境を作って試してみることなので、明日そこに時間を割ければよいのだが。無理かな。
  • 21:10 くよくよしていても仕方がない。帰るぞ。この時間でこのフロアにはもうおれしかいない。そんな日もある。
  • 21:20 うだうだと居残るおれ。情報センタのページでウィルスメイルの送信者だとか受信者のリストが公開されている。意図がわからん。おれには6回ウィルスメイルが来たらしい。
  • 21:25 総務部による休暇に関するアンケート結果の集計を見た。なんか「検討チームの考え」ってアンケート結果と合ってない所がある。どーゆーこと?別にいいけど。ただPDF形式は読みづらいので改善して欲しいずら。
  • 21:35 間接部門へのアンケート結果と対策も見た。はじめはいらいらしたが段々面白くなっていった。各部で回答の感じが違うのが興味深い。まあこういう取り組みは大事でしょうね。
  • 21:50 今度こそ本当に帰ります。さようなら。

[windows] 会社四季報CD-ROM

IEでファイルのダウンロード時に警告のダイアログを出すためのチェックボックスを外してしまった後、再び警告のダイアログを出すように戻す方法を調べていたらなぜかこんなところで分かった。ファイルタイプの設定のところで設定できるのだ。

(追記)

Win FAQ にも書かれていたのでメモ。

[soft] InternetExplorer上で、弊社製品で作成したファイルが表示されない

一太郎の不具合。これだといいのだけれど。

[windows] 機能説明

ここからWindowsの各サービスの説明ページへ飛べる。ただし英語だ。Windows FAQより。

[windows] エクスプローラで任意のフォルダをカレントにしてコマンドプロンプトで開くには?

エクスプローラからコマンドプロンプトを開くようにする方法。便利なはずだ。

[dev] 見積もり

とりあえず今感じている見積もり手法をまとめておこう。

  • まず、お客から出てきている機能を大雑把に分割し、それぞれの機能項目に対し仕様検討、設計、実装、テストの工数を人日単位で予想し、そこに単価を掛けて金額を出す。いや、人日の予想なんて立たないのだが、とにかく金額を出してみて実感することが重要なのだ。
  • 次に、お客からは出てきていないが必要になる機能がないかどうか考えてみて、工数をだし金額をだす。
  • で、上で見積もった機能の中に含まれると言えなくもないけど別立てで明示しといた方が良さそうなこととか、機能とはちょっと違うような気がするけど実装しなければならない何物かがあればそれも出して工数を予想し金額を出してみる。
  • さらに設計実装テストという枠組みではない作業が発生するはずなのでそれは何でどの程度の工数が掛かるかを予想し金額を出す。いや、予想なんてできないんだけどさあ。
  • あとは運用や開発に必要なハードソフトや出張費教育費なども忘れてはいけませんな。
  • で、合計いくらになったかを見てみる。で、出た金額がこのシステムが稼動した暁に得られる効果に見合った額なのかをこの時点で初めて考えてみる。多分高い。ので、どこがボトルネックになっているのかを考えてみる。二重にカウントしている感じになっているとことかあるんだろうな。あとは説得力のある金額なのかをひたすら自問自答し金額を修正していくのだ。

どうかなあ。で、プロジェクトの進行に合わせてあるいはプロジェクト終了後にこの見積もりと実績がマッチしているかを検証するのでしょうね。どこが乖離したかを知ることで、もっとましな見積もり方法が見えてくると。

みんなやっていると思うんですよ。だから経験者は語れよと思うのだが誰も語ってくれない。ってことはましな見積もり方法が見えてくるというのは幻想なのだきっと。うーむ。

[サッカー] 日本代表vsレアルマドリード

朝やっていることに気付き最後の20分位だけ見れた。そのとき出てたのは曽ヶ端宮本中沢中田稲本福西市川服部小笠原鈴木久保。松田やアレックスがなぜいないのかが分からなかった。中村はひざの怪我、西澤は盲腸だ。0-1で負け。

テレビ/本

  • 日経オープンシステム4月号。少し。

2003年05月08日(木)

はてなアンテナ不調

不具合発生中のようだ。昨日は使えたけどな。アンテナ使いたいときに使えないと落ち着かない。

[life] ご飯を炊く

やっと炊いた。ご飯の炊き方。

  1. お米を透明カップに1杯とってボールに入れる。
  2. ボールに水をジャーっと入れてひと混ぜし、水を捨てる。お米は捨てない。
  3. お米を研ぐ。要するにお米をかき混ぜればよろしい。
  4. 再びボールに水をジャーっと入れてひと混ぜし、水を捨てる。
  5. お米を研いで水を入れて水を捨てることを3回繰り返す。
  6. お米を炊飯器に入れ、水を「1」のラインまで入れる。そして30分間待つ。
  7. 炊飯器のスイッチを入れる。炊き上がったら10分間待つ。
  8. 炊飯器を開け、ご飯をかき混ぜる。

おれのやり方とちょっと違うな。次回は上のようにやってみよう。

1合って意外に多いのね。満腹だ。水を入れすぎたのか、柔らかくなってしまった。でもいいの、自分で炊いたご飯は美味しいの。

[javascript] JavaScriptに触る

JavaScriptって嫌いだ。でもバイトで作っているやつはJavaScriptバリバリ使っているから避けられない。日本語で書かれた信頼できるウェブページがあるといいんだけど。とりあえず今日参考になったのはこの辺だ。

出来上がったのはこれ。二つのリストボックス内で要素を移動させるもの。

仕事のTODO

  • 二つのリストボックス内のユーザ名をボタンで移動させられるようにする。JavaScriptで実装だ。
  • 年度を変えたらリストボックス内のユーザ名リストを更新する。

やること

  • ご飯を炊く
  • 厚生年金の一時金の手続き

2006年05月08日(月)

  • GWが明け、仕事再開。
  • ずっと英語の仕様書を読んでた。読めども読めども頭に入ってこない。きっと仕様書の書き方が悪いのだ。こんなのホントに流行るの?

[web] 「日本語ファイル名」 (PHP による Web プログラミング)

日本語ファイル名のファイルにリンクを張りたい場合にどうするかという話。Okumura's Blogより。

やること

  • テーブル生成
  • デザイン変更
  • TV買う?
  • プリンタインク
  • 保険

2007年05月08日(火)

  • SくんがJavaScriptで困っていたのを少し手伝った。HTML片をロードし直してもイベントハンドラは古い変数を参照しているみたい。おれはまだクロージャを理解できていないようだ。変数を使わないように変更して一応解決。
  • みんな新人研修の手伝いで忙しいみたい。でも楽しそうだなあ。
  • 昨日は早く帰れたが、今日は終電になってしまった。とほほ。

[web] textarea内で折り返されないようにしたい

HTMLのtextarea要素が生成するコントロールは、(ブラウザに依るだろうけど)普通長い行を折り返して表示する(みたい)。通常はこの挙動の方がいいんだけど、折り返されないようにしたいケースに遭遇した。

CSSでなんとかなるのだろうと思って色々試した(「white-space:pre」とか)けど、うまくいかなかった(対象ブラウザはIE6)。

結局textarea要素のwrap属性にoffを設定することで実現したけど、wrap属性というのはHTML標準の仕様には含まれていないようだ。wrap属性を使わずに実現することはできないのかな?

やること

  • 年金

2008年05月08日(木)

[ruby] 配列の配列からハッシュを生成

Enumerable#inject() を使うとわりと簡単に書ける。

p [[1, 2], [3, 4]].inject({}) {|h, a| h[a[0]] = a[1]; h}
#=> {1=>2, 3=>4}

これがフツウの方法かは知らない。

[shell][unix] 環境変数の設定

基本的なことだがおれはよくわかってないみたい。

今まで環境変数は .zprofile(bashの場合は .bash_profile)内で設定していたが、これだとgdmからログインしてgnomeを使う場合に環境変数が設定されないことに気づいた。UnixのGUIはほとんど使わないので知らなかったが、gdmやxdmからログインする場合「ログインシェル」は起動されないようで、従って .zprofile は読み込まれない、ということみたい。

だから、対話シェルで使いたい環境変数の設定は .zprofile ではなく .zshrc に書かないといけない。.zprofile にはなるべく何も書かない方がよさそう。[debian-users:16041] Re: 環境変数の設定

> という利用方法が推奨されていたと思いますので、.bashrcにはあま
> り環境変数の設定を入れないのが普通なのではないかと思っています。

昔はそんなことも言われましたが、X、特にxdmが一般的になるにつ
れ、ログインシェル用と、その他の対話的シェル用の初期化ファイ
ルを分けないのが常識になりました(と思います)。
# (あんな昔の)「続たのしいUNIX」にすらそう書かれていたような…。

なんて話もあった。

が、再帰的に設定する環境変数などは .zshrc には書きたくない。例えば

export PATH=~/bin:$PATH

を .zshrc に書くと子シェルが起動される度にPATHに同じ値(上の例だと ~/bin)がどんどん追加されてしまい嫌だ。 世の中の人はどう設定しているのかな。検索してもいい方法は見当たらなかった(とほほ)。

仕方ないので、再帰的に設定したい変数は .zprofile の方に戻した。これだとgdmからログインしたときにこの設定が有効にならないが、手元のUbuntu 7.10ではgdmからログインする際に ~/.profile が読み込まれるようになっているようなので、.zprofile に書いたのと同じことを .profile にも書けばなんとかなる。変だけど。

ちなみにgdmからログインする際の設定は .xsession に書けばいいのかと思ったが、.xsession ファイルを作成するとログイン処理の途中でエラーになってしまいログインできなくなる。なんでや。


2018年05月08日(火)

[life] 保育園への送り

今日も大体は自分で歩いてくれた。途中で走って転んで泣いたがすぐに立ち直った。手のひらを少し擦りむく。

雨で道が湿っている個所を「びちゃびちゃ」だと言って歩きたがらなかった。自分は乾いたところを歩き、お前はそのびちゃびちゃの所を歩けと命令される。

カラスが道に降りてきたのを見て「カーカー言わないねえ」。それからカラスの歌を歌いだした。


2019年05月08日(水)

[c++] reverse_iteratorが指す要素の削除

reverse_iteratorが指す要素の削除方法をメモしておく。Effective STLの第28項「reverse_iteratorの基底iteratorの使い方を理解しよう」に説明がある。

  • コンテナのerase()メソッドはreverse_iteratorを受け付けないので、reverse_iteratorのbase()メソッドによりiteratorオブジェクトを取得する必要がある。
  • base()が返すイテレータが指す要素はreverse_iteratorが指す要素からend()方向に1つずれているので、erase()に渡す際にはイテレータの位置を調整する必要がある。調整には (++rit).base() のようにreverse_iteratorを1つ進めてからbase()を呼ぶべしとEffective STLにある。
 rend()                         rit                         rbegin()
       +-------+-------+-----+-------+-------+-----+-------+-------+
       |   a   |   b   | ... |   h   |   i   | ... |   y   |   z   |
       +-------+-------+-----+-------+-------+-----+-------+-------+
         begin()                     rit.base()                      end()
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>

int main()
{
  std::vector<int> v(10);
  std::iota(v.begin(), v.end(), 1);

  auto rit = std::find_if(
      v.rbegin(),
      v.rend(),
      [](int i) { return i % 3 == 0; });
  if (rit != v.rend()) {
    // reverse_iterator::base()が返すイテレータは指す要素が異なるので調整が必要
    // see Effective STL 第28項
    v.erase((++rit).base());
  }

  for (const auto& e : v) {
    std::cout << e << " ";
  }
  std::cout << std::endl;
}
1 2 3 4 5 6 7 8 10