メモの日々


2003年08月24日(日)

生活

  • 昼寝したら、誤ってウィルスプログラムをインストールしてしまった夢を見た。PCはいうことをきかなくなり、xreaのサーバやPHSにまで感染させてしまった。ひどく焦った。
  • FSWikiを3.5.0へバージョンアップした。
  • CSSをいじった。ひどく疲れる。色合いがきつすぎるかな?
  • 世界陸上をTV観戦。男子100m二次予選で朝原ギリギリの走り。第2組ではドラモンドがフライングの判定に納得せずコース上に大の字になったり抗議抗議で退場しない。結局第2組は最後に走ることになる。でも観客からのブーイングが止まずなかなかなかなかなかなかなかなかなかなかなかなかなかなかなかなかスタートできない。CM明けにやっとスタートした。

やること

  • 電気カミソリを買う
  • 梨を食べきる

2005年08月24日(水)

[db] MySQLで外部キー削除時にエラー

MySQL 4.0.24でテーブルから外部キーを削除しようとして

alter table YYYY drop foreign key ZZZZZ;

を実行したら

ERROR 1025: Error on rename of './XXX/YYYY' to './XXX/#sqlW-WWWW-WWWW' (errno: 152)

のようなエラーが表示されて削除できなかった。

検索するとMySQLのバグMySQL Bugs: #10333: Incorrect error when deleting a foreign key with incorrect constraint nameがヒットした。エラーメッセージが適切でないというバグ。

外部キーの識別子の指定を間違えるとこのエラーが出るのか。上のZZZZZの所にはカラム名を指定していたが、外部キーの識別子はデフォルトではカラム名にならないのだ。show create tableを使って外部キーの識別子を調べ、それを指定することで解決。

やること

  • ブラウンの安い電動歯ブラシ買う
  • 蛍光灯を捨てる
  • 腕時計(8/18)
本日のツッコミ(全1件) [ツッコミを入れる]

babyloos [同じ問題で悩んでたので助かりましたあああああ!! babyloos.net]


2006年08月24日(木)

[unix][howto][net] 静的ルーティングの設定方法

Fedora Core 5やCent OS 4で静的ルーティングを設定するには、/etc/sysconfig/network-scripts/route-XXX というファイルを用意しそこに設定内容を記述すればいいようだ。XXXにはデバイス名を指定する。

route-XXXには

ADDRESS0=192.168.100.200
NETMASK0=255.255.255.255
GATEWAY0=192.168.0.10

ADDRESS1=192.168.200.0
NETMASK1=255.255.255.0
GATEWAY1=192.168.0.20

のように記述していく模様。このファイルを読み込むのは /etc/sysconfig/network-scripts/ifup-routes で、この中に

       if egrep -q '^[[:space:]]*ADDRESS[0-9]+=' $file ; then
           # new format
           handle_file $file $1
       else
           # older format
           { cat "$file" ; echo ; } | while read line; do
               if [[ ! "$line" =~ '^[[:space:]]*(\#.*)?$' ]]; then
                   /sbin/ip route add $line
               fi
           done
       fi

という記述があり、「new format」と「older format」の2種類を読み込めるようになっていた。先に書いたのはnew formatの方。older formatの場合は「/sbin/ip route add」に続けたい文字列をroute-XXXに書けばいい。older formatの方が融通が利く。

やること

  • デザイン変更
  • 保険
  • ツールのDVDを観る
  • 単4乾電池
  • スリッパ

2023年08月24日(木)

[c++] std::chrono::time_pointの文字列表現から秒未満を除去する

system_clockから取得する現在時刻を文字列として出力すると秒未満の値も出力されるが、秒未満の値を出力しないようにするにはどうするのか。

std::cout << std::chrono::system_clock::now() << std::endl;
2023-08-23 15:41:17.7805038

std::put_time() でできる

<iomanip>にあるput_time()を使うと一応できる。でも gmtime とか呼びたくない。

#include <chrono>
#include <iomanip>
#include <iostream>
#include <time.h>

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

    const auto now = ch::system_clock::now();
    const auto now_t = ch::system_clock::to_time_t(now);
    tm tm;
    gmtime_s(&tm, &now_t);
    std::cout << std::put_time(&tm, "%F %T") << std::endl;
}
2023-08-23 15:43:08

std::format() でできない

format()でフォーマット指定することで制御できそうなものだが、秒だけを出力する指定子は無いみたい。put_time()とは「%T」(というか「%S」)の挙動が違う。

time_pointのdurationを変更するとできる

time_pointの刻みを粗くして、秒単位の時刻に変換すれば秒未満の値は出力されなくなる。釈然としないが、これが想定されている制御方法のようだ。

#include <chrono>
#include <iostream>

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

    const auto now = ch::system_clock::now();
    const auto now2 = ch::floor<ch::seconds>(now);

    std::cout << now << std::endl;
    std::cout << std::format("{:%F %T}", now) << std::endl;
    std::cout << now2 << std::endl;
    std::cout << std::format("{:%F %T}", now2) << std::endl;
}
2023-08-23 15:43:36.5353184
2023-08-23 15:43:36.5353184
2023-08-23 15:43:36
2023-08-23 15:43:36