メモの日々


2001年03月07日(水) 外出だ

今日はこれからドコモのMobile Solution Conference 2001というのに行くのだ。パネルディスカッションがあるけど、つまらないに違いないのだ。司会は宮崎緑。


2002年03月07日(木) 無タイトル

会社

  • 15:50 まだバージョン画面作っている。いかんなあ。
  • 今日のGoogleのこれは何?もんどりあん?
  • わー、読みました、お昼ご飯で返してください。
  • 21:05 あまり進まない。

テレビ/本

  • Web+DB Press Vol.6やっと読み終わり。次はJavaWorldだ。

2003年03月07日(金) 坂井隆憲衆院議員、政治資金規正法違反容疑で逮捕

生活

  • (10:30)起床。まだまだだ。今日も会社は休む。
  • (14:45)頂いたPCにVineLinuxをインストールしようと思い、DVDROMの内容をCDROMに写し、Windows98上でデバイスの情報を調べ、CDROMからのブートを試すがどうにもうまくいかず、ブート用フロッピーを作成し、インストーラが起動することを確認した。が、頂いたPCにLANボードが付いていないことが分かりガッカリ。買わねば。LANボードを取り付けてからインストールした方が楽な気がするのでインストールはお預け。
  • (16:00〜17:00)寝てしまった。いかんいかん。その後外出。
  • (25:00)就床。眠れないかも。

[hard] ネットワーク機器購入

電機屋へ行き、LANボード(LD-10/100s、820円)、ハブ(LD-PSW05N/AT、2680円)、LANケーブル(LD-CTFS2/GN3、580円)を購入。全てELECOM製。

[unix] Linuxインストール

できない。ひー。

買ってきたハブとLANケーブルはまあよし。LANカードは取り付けるも固定するためのネジがなくてグラグラする。ケーブルの抜き差し時に力を加減しないといけない。まあよし。

VineLinux2.6r1をインストールしようとした。昼間に作ったフロッピーからインストールを試みるも、「CDROMを入れてくれ」というメッセージに対しCDROMを入れても「CDROMが入っていない」と言われる。頂いたPCにはCDROMドライブが2つ付いていてちょっと特殊なのだ。とにかくどちらのCDROMに入れてもだめ。BIOSの設定をいじればいいのかと思ったがそれらしい所は見つけられない。BIOSなんてわからん。

Windows98を立ち上げるとVirtual CD-ROMドライブというのがあって3つのCD-ROMが見える。これがいけないのかと思いCD革命だかなんだかいうソフトをアンインストールしてみた。これでVirtual CD-ROMドライブは無くなったがその後もやはり「CDROMが入っていない」と言われ続ける。

色々やったがもうどうしたらいいのか分からないのでネットワークインストールすることにした。インターネット経由より速いと思い、ネットワークインストール用のフロッピーを作りノートPCにIISをインストールしIISのパッチを当てノートPCにVineのCDROMを入れてネットワークインストール開始。駄目。インストーラが途中でだんまりになる。なぜだ。...WindowsXPでファイアウォール機能を使っているからだった。

ファイアウォールがHTTPを通すよう設定し直し再度トライ。先へ進んだがなんだかダウンロードが異常に遅い。こういうものなの?これならインターネット経由でもよい気がしてきた。しかし我慢強く待っていたら先へ進んだ。わーい、インストールするパッケージを選んでパーティションの設定もしてブートローダタイムゾーンユーザの設定グラフィックカードの設定よしもう少しだパーティションのフォーマット中に致命的なエラーが発生しましたインストールできません再起動してください。ん?

うえーん(>_<)、今日は時間切れです。

やること

  • ハブ&LANケーブル&LANボード購入→Linuxインストール→tDiary1.5.3インストール
  • 手帳購入
  • 携帯&PHS&ThinkPadを返す
  • 退職後の手続きをまとめる
  • アントレを返す

2004年03月07日(日)

[work] 確定申告書作成

やっとした。

確定申告書は説明書が付いてくるのでそれに書いてある通りに埋めていけばよい。青色申告決算書は簿記の結果を写せばよいだけ。

簡単なはずなんだけど、間違いがないか色々と心配で遅々として進まない。で、見直すと色々と間違いがあって修正したりして大変。

少しでも得をしようと色々考えすぎてしまうのがいけないと悟った。そんなことをしても時間の無駄無駄。少額の税金などより時間の方が大事だ。

[life] プリンタ壊れた

申告書作成で忙しいのにプリンタが壊れやがった。ガリガリ異音がして印刷ができない。

ネジを外して分解しようとしたがあと一歩のところでカバーを分離できない。窮屈な場所で一時間くらいカバーを押したり引いたりしていた。苛々。結局力任せに引っぱったら分離できた。

分解した状態で見ていたら異音の原因は分かり、指ででっぱりを引っ込めることで解決したつもり。直ったかと思ったのだけれど、印刷しようとしても給紙ができない。紙を引き込んでくれない。見てても給紙の仕組みがサッパリ分からなくてどうしようもない。給紙のための部品が足りない感じがするよ。

新しいインク買ったばっかりなので悔しい。うー。

寝る

四時半になってしまった。

やること

  • 決算
  • 歯ブラシ買う
  • 申告書の添付書類のコピー
  • 税務署へ行く
  • 未処理分の経理処理をする

2011年03月07日(月)

[work][life] 確定申告に行く 2011

雪の降る中税務署へ行ってきた。寒い。書類に印を押し忘れていたのだけれど、判子を持ち歩いていたので大丈夫だった。税務署では朱肉と糊は自由に使える。

税務署は今年もガラガラだった。来ているのはおばさんばかりで、男はおれだけ。

提出したら、帰ってからでいいので控えにも印を押すようにと言われた。なんでだろう。来年は控えにも押印してから提出してみよう。ちゃんと出口から出て、職場へ向かう。

やること

  • 確定申告

2012年03月07日(水)

  • 長かったC++の仕事が一応終わって、今月からJava。Javaの不自由さはストレスだけど、言語が変わるとなんだか楽しい。

[work][life] 確定申告に行く 2012

また提出が3月になってしまった。税務署のプレハブの入り口と出口が逆になっていた。何故変えたのか。今年は今までより混んでいた。プレハブ内の行列に並ぶ。特に何もなく、自分の番になったらあっと言う間に終了。他の人たちは何を揉めているのか不思議だ。


2017年03月07日(火)

[c][c++] open_memstream()

glibcなどにはopen_memstreamという関数がある。

FILE *open_memstream(char **ptr, size_t *sizeloc);

これは自動的に伸長するバッファをバックエンドに持つFILEポインタを返してくれる。データ長が分からない文字列構築をするときなどに便利。なお、sizelocにNULLを指定することはできない模様。サンプルコードと実行結果をメモ。

#include <stdio.h>
#include <stdlib.h>

int main() {
  char* p;
  size_t size;

  FILE* fp = open_memstream(&p, &size);
  if (!fp) return 1;

  fputs("hello", fp);
  fflush(fp);
  printf("%s %lu\n", p, size);

  fputs("world", fp);
  fflush(fp);
  printf("%s %lu\n", p, size);

  // バッファの先頭から書き込みなおす
  rewind(fp);

  fputs("hi", fp);
  fclose(fp);
  printf("%s %lu\n", p, size);

  free(p); // 要free
  return 0;
}
hello 5
helloworld 10
hi 2

[c++] std::ostringstreamは遅い

ostringstreamが遅いことは以前メモした。これはマルチスレッド動作時のことだったけど、シングルスレッドでもfprintfなどより遅い。

それでもostringstreamにはバッファサイズの管理をしなくてよいという便利なところがある。しかし、stdio.hにも上述のopen_memstreamがあるので、これを使えばostringstreamよりも速い出力文字列ストリームを作れるはず。

以下にopen_memstreamを使ったmy_ostringstreamとstd::ostringstreamの比較プログラムをメモ。my_ostringstreamの方が少しだけ速い。my_ostringstreamは標準ライブラリのストリームに似せているだけでstd::ostreamではないことに注意。

#include <chrono>
#include <iostream>
#include <sstream>
#include <stdexcept>

#include <stdio.h>
#include <stdlib.h>

class my_ostringstream {
public:
  my_ostringstream() : fp_{open_memstream(&buffer_, &buffer_size_)} {
    if (!fp_) throw std::runtime_error{"open_memstream failed"};
  }

  // copyやmoveは面倒
  my_ostringstream(const my_ostringstream&) = delete;
  my_ostringstream& operator=(const my_ostringstream&) = delete;
  my_ostringstream(my_ostringstream&&) = delete;
  my_ostringstream& operator=(my_ostringstream&&) = delete;

  ~my_ostringstream() {
    std::fclose(fp_);
    std::free(buffer_);
  }

  std::string str() {
    std::fflush(fp_);
    return {buffer_};
  }

  explicit operator bool() const { return !is_failed_; }

  my_ostringstream& operator<<(char c) {
    if (std::fputc(c, fp_) == EOF) is_failed_ = true;
    return *this;
  }

  my_ostringstream& operator<<(double d) {
    if (std::fprintf(fp_, "%g", d) < 0) is_failed_ = true;
    return *this;
  }

private:
  char* buffer_;
  std::size_t buffer_size_;
  FILE* fp_;
  bool is_failed_{false};
};

template<typename Out>
void call(const std::string& name, Out&& out) {
  using namespace std::chrono;
  constexpr int n = 1000000;

  const auto s = system_clock::now();
  for (double d = 0; d <= n; d += 0.1) {
    out << d << ' ';
  }
  const auto e = system_clock::now();

  std::cout
      << out.str().size()
      << ", " << duration_cast<milliseconds>(e - s).count() << " ms"
      << ", " << name
      << std::endl;
}

int main() {
  call("my_ostringstream", my_ostringstream{});
  call("std::ostringstream", std::ostringstream{});
}
70688902, 6103 ms, my_ostringstream
70688902, 7639 ms, std::ostringstream