メモの日々


2001年08月23日(木) 台風一過

[windows][security] ホームユーザー向け セキュリティ対策 早わかりガイド

マイクロソフト製品に対するセキュリティ対策ガイド。セキュリティホールmemo MLより。Windows2000がない。

[unix][security] インストール直後に絶対やるべき作業と設定

linuxのセキュリティ対策ガイドだ。セキュリティホールmemoより。読んでない。

会社など

  • 台風はたいしたこと無かった気がした。なんでだろ。
  • オブジェクト指向2001シンポジウムに行き、昨日はパターンのパネルディスカッションを聞き、今日はXP&RUPとIBMの話を聞いた。明日も行く。

2002年08月23日(金) 雨で寒い。最高気温25度

会社

  • 11:55 Flash Playerにセキュリティホールがあるとセキュリティホールmemoに載っていたのでバージョンアップしようとしたが、バージョン6,0,47,0の今すぐインストールボタンを押すと出てくるFlashムービでバージョンを見ると5,0,42,0と出る。どないすればいいんじゃい。
  • 11:40 ベスタのオークションに出品し、自分で伝言を書いたが「送信する」を押すとエラーになる。
  • 13:35 cssファイルをいじり、サイトのデザインを少し変えてみた。って言っても見出しだけだけど。
  • 14:05 Windows2000の管理ツールには「パフォーマンスログと警告」というコンソールがあるのだ。使い方が分からない。
  • 14:15 メイル読み終わり。色々忙しい。
  • 19:01 OfficeXP導入に伴いIMEもバージョンアップしたが、まだ新しいIMEに慣れない。突然無変換モードになるのが謎だ。ひらがなは打てるが勝手に確定してしまい変換できなくなる。そんな時はIMEのプロパティダイアログを開き何もせずにOKボタンを押せば直る。バグかな。

[dream] 水泳の夢

水泳する夢を見た。最初の飛び込みは真上へジャンプしてしまい、そのまま空中でふわふわしてしまいなかなか降りれない。変な格好で着水。やり直した二回目はどうなったか忘れた。スタートの笛はピストルで高本さんが扱ってた気がするがはっきりしない。黒木瞳がプールを訪れていた気もするがこれもはっきりしない。

[web] ColdFusion関連

ColdFusionのロックの解説。jcfug MLより。

Iプロジェクト

  • 14:20〜19:00 新テンプレート対応の続き。なかなか終わらない。
  • 〜21:00 終わったつもり。でもまだ色々あるであろう。キリがないのだ。とりあえず設定画面で入力可能な階数を制限することはやりたい。これからプログラムをチェックインする。
  • global.mptは個人のapplication dataフォルダにあることを発見。でもたくさんあるのでどれが本命か分からない。
  • 21:10 チェックイン終わり。帰ろう。

Kプロジェクト

  • 10:30 回線障害について2通メイルを送信した。まだ終わらない。
  • 山下さんからFW会社の返答をもらう。それを見ても詳しい内容は分からない。
  • プロジェクト登録を手伝った。やり方を忘れている。
  • 21:15 がーん、ステータス確認をせねばいけないことを思い出した。これから。
  • 21:25 そしたらラッキーのApacheが再び立ち上がらないのを発見。何故だー。以前停電でPC再起動したら直ったので今回も再起動してみる。
  • 21:30 PC再起動したらApache起動した。なんでや。Windowsみたいな奴だな。
  • 〜21:55 おしまい。帰れるかな。

2003年08月23日(土)

[dream] 笑っていいとも→帰宅

夢を見た。笑っていいともにて電話で視聴者プレゼント。タモリが家族の名前を尋ねるが当選者は答えられない。当選者はゲストの川原亜矢子の弟らしく、「冷蔵庫の上の紙に書いてあるよ」とアドバイスする。すると電話の向こうから何かが崩れる音と「ぎゃー」という声。そして静寂。心配になった川原亜矢子は急遽家に帰る。川原亜矢子の家の様子を見に松本人志が派遣される。家へ向かう途中で浜田へ電話し「おまえが代われや」などと話している。浜田はゴンドラに乗ってビルの窓拭きをしていた。

歩いていたおれは小学校方面から第一公園方面へUターンする。第一公園では体力自慢大会が開催中で、午後最初の競技らしい800m走が行われていた。菅直人、梅田さん、小松、根木、上岡、細谷、井沢、菅井らの姿があった。中学の同級生が多い。すげー久しぶりだな。おれはその脇を家へ向かい歩くが上手く歩けない。

水道の所辺りまで進めた所で場面が変わり、ニュースステーションにて菅直人の悪いニュースを放送している。体力自慢大会の映像が流れ、久米宏が「大会に出場したのは失敗でしたね」などとコメントしていた。そんな夢。

夢の中でよくあるパターンその1:

  • 上手く歩けない(足の動作が異常に緩慢)。こうなったときは体を斜めにし体重を利用して進む。それでもゆっくりにしか進めない。あるいは空中を平泳ぎで泳ぐ。こちらの方が速い。

でも最近は空中を泳ぐ夢を見なくなった。

やること

  • 電気カミソリを買う

2015年08月23日(日)

[tdiary] tDiaryを4.1.3にバージョンアップ

XREAのRubyが2.2にバージョンアップしてから7ヶ月経ってしまったが、これでtDiaryの最新版が使えるようになったはずなのでtDiaryをバージョンアップ。前回のバージョンアップは4年前

でもなかなか動かなかった。

プラグインが動いてない

日記が色々正しく表示されないのでプリントデバッグしたところ、色々なプラグインが動いていないのが原因のようだった。lib/tdiary/plugin.rbのPluginクラスのコンストラクタにある変数plugin_pathが指しているディレクトリが存在していない。

組み込みのプラグイン(00default.rbとか)の置き場所がpluginからlib/tdiary/pluginに変わったようだ。tdiary.confを調べると@plugin_pathで古いパスを指定していた。このパラメータは指定しなくてもいいようなので、この行をコメントアウトしたら動くようになった。何で今まで明示的に指定していたのかは思い出せない。

タイトルが表示されない

これでほぼ動くようになったのだけれど、日記のタイトルが表示されていない。原因はcontribのプラグインが足りなかったから。

tDiaryの入れ替えは以前のメモを見ながらやったので、その後に追加した3つのプラグインが導入されていなかった。これらを追加することで解決。

カテゴリ一覧が表示されない

が、まだカテゴリの一覧が表示されない。

カテゴリプラグインの設定画面を見ると「カテゴリインデックスの作成」というチェックボックスがあったので、これを実行してみたら解決。

データ置き場のディレクトリを見るとplugin/category.dbというファイルができていた。カテゴリはDBで管理するように変わったようだ。

.bundle配下の不要そうなディレクトリを削除

以上で以前と同じように動くようになったと思われる。

が、tDiary自体のディスク消費量が以前より大分多いのが気になった。調べると、.bundleというディレクトリ配下がかなり使っている。ここはRubyのバージョンごとのディレクトリになっていたので、不要そうな2.0.0と2.1.0というディレクトリは削除した。


2023年08月23日(水)

[c++] std::chronoメモ

std::chronoについてメモ。C++20で色々機能が追加されており、それを前提とする。

durationは時間

durationは時間を表すクラステンプレート。テンプレートパラメータとして値の型と、値の1が何秒を表すかの比率を持つ。

テンプレートをインスタンス化したクラスとして seconds、milliseconds、years などの色々な型が用意されている。なお、yearsは31556952秒、monthsは2629746秒という「平均的な長さ」が単位になっていることに注意。

sなどのリテラル演算子も用意されており、これらを使ってオブジェクトを作ることもできる。

durationクラス間の変換は、精度が落ちなければコンストラクタや代入で行え、精度が落ちる場合はduration_cast()floor()などを使い分けて行う。

#include <chrono>
#include <iostream>

int main()
{
    using namespace std::literals::chrono_literals;
    namespace ch = std::chrono;

    const ch::duration<int> d1{ -100 };
    const ch::milliseconds d2 = d1;
    const auto d3 = ch::duration_cast<ch::minutes>(d1);
    const auto d4 = ch::floor<ch::minutes>(d1);
    const auto d5 = d4 + 1s;
    const ch::months d6{ 1 };
    const ch::years d7{ 1 };

    std::cout << "d1 = " << d1 << std::endl;
    std::cout << "d2 = " << d2 << std::endl;
    std::cout << "d3 = " << d3 << std::endl;
    std::cout << "d4 = " << d4 << std::endl;
    std::cout << "d5 = " << d5 << std::endl;
    std::cout << "d6 = " << d6 << std::endl;
    std::cout << "d7 = " << d7 << std::endl;
}
d1 = -100s
d2 = -100000ms
d3 = -1min
d4 = -2min
d5 = -119s
d6 = 1[2629746]s
d7 = 1[31556952]s

time_pointは時刻

time_pointは時刻を表すクラステンプレート。テンプレートパラメータとして「時計」型と、時刻の刻み幅とするdurationを持つ。

時計型としてsystem_clocklocal_tなどが用意されており、それらを使ってtime_pointテンプレートをインスタンス化したクラスとしてsys_secondslocal_daysなどが用意されている。

時刻は起点となる時刻(エポック)からの経過時間として表現されている。エポックは時計型から決まる。

特定の時刻を生成するには、/ 演算子を使ってyear_month_dayオブジェクトを作り、それをsys_daysに変換するという方法が使える。

time_pointクラス間の変換もdurationと同様で、精度が落ちなければコンストラクタや代入で行え、精度が落ちる場合はtime_point_cast()floor()などを使い分けて行う。

#include <iostream>

int main()
{
    using namespace std::literals::chrono_literals;
    namespace ch = std::chrono;

    const ch::time_point<ch::system_clock> t1;   // system_clockのエポック
    const ch::sys_seconds t2{ ch::months{ 1 } }; // エポックから約一か月後
    const auto t3 = ch::sys_days{ 2023y/8/15 } + 12h + 34min + 56s;
    const ch::time_point<ch::system_clock, ch::milliseconds> t4 = t3;
    const auto t5 = ch::floor<ch::days>(t3);

    std::cout << "t1 = " << t1 << std::endl;
    std::cout << "t2 = " << t2 << std::endl;
    std::cout << "t3 = " << t3 << std::endl;
    std::cout << "t4 = " << t4 << std::endl;
    std::cout << "t5 = " << t5 << std::endl;
}
t1 = 1970-01-01 00:00:00.0000000
t2 = 1970-01-31 10:29:06
t3 = 2023-08-15 12:34:56
t4 = 2023-08-15 12:34:56.000
t5 = 2023-08-15

時計とタイムゾーン

時計は現在時刻を取得するときに使うクラス。いくつか用意されているが、通常はsystem_clockを使い、経過時間を計る際にsteady_clockを使うくらいか。

system_clock::now()が返す時刻はUTC相当のものであることに注意。システムのタイムゾーンでの時刻を取得するには、current_zone()time_zoneオブジェクトを取得し、そのメンバ関数to_local()を呼び出す方法が使える。

また、時刻をタイムゾーン付きで管理したい場合はzoned_timeクラステンプレートを使う。zoned_timeは時刻を表すがtime_point型ではなく、time_pointとtime_zoneのペアである。

#include <chrono>
#include <iostream>

int main()
{
	namespace ch = std::chrono;

	const auto now1 = ch::system_clock::now();
	const auto now2 = ch::current_zone()->to_local(now1);
	const ch::zoned_time now3{ ch::current_zone(), now1 };

	std::cout << "now1 = " << now1 << std::endl;
	std::cout << "now2 = " << now2 << std::endl;
	std::cout << "now3 = " << now3 << std::endl;
}
now1 = 2023-08-23 10:16:29.2074391
now2 = 2023-08-23 19:16:29.2074391
now3 = 2023-08-23 19:16:29.2074391 JST