トップ «前の日(12-19) 最新 次の日(12-21)» 追記   RSS 1.0 FEED  

Journal InTime


2000-12-20 (Wed)

_ シンナー中毒

会社のビルの一階で改装工事をしていて、シンナーみたいな匂いがすごい。 いや、シンナーの匂いなんて知らないですけど。

_ とんがらし麺

とんがらし麺の味噌チゲ味が出ていたのでお昼にたべてみた。

何か海鮮チゲ味より物足りないなあと思ったら激辛パウダーを入れ忘れていた。 ちょっと損した気分。

_ 英語のメール

mod_rubyについての英語の質問のメールが二通来ていた。 これからこういうことが増えるのか、と思うとあんまり宣伝するのもどうかな と思ったり。

_ 冤罪

RD2HTMLVisitorを疑ったけど、 "は文脈によってはエスケープしなくてもいいらしい。

というわけで、ごめんなさい、許してください、もう二度としません。


2003-12-20 (Sat)

_ tDiaryはじめました

ずーっとやろうやろうと思っていたのだが、やっとtDiaryに移行した。 やっぱり慣れるまではちょっと大変そうだ。 とりあえず、RDが使えるみたいなので、書き方は従来とあまり変わらないのがうれしい。

tDiaryで一番やりたかったのは画像の埋め込み。

ええ、親バカですとも。

Tags: その他

_ suexec

httpd.confに、

<VirtualHost 210.251.121.211>
  ServerName shugo.net
  ServerAdmin maeda@shugo.net
  DocumentRoot /home/shugo/public_html
  User shugo
  Group shugo
</VirtualHost>

のような設定をしようとして、はまった。

suexecのビルド時に指定したDocumentRoot以外の場所に あるCGIは実行できないのだ。 しかも、/var/log/apache/error.logにはまともなエラーメッセージが出ない(/var/log/apache/suexec.logに出る)ので、しばらく原因に気づかなかった。

_ 生姜コーラ

テレビで見て生姜コーラを試してみた。コーラに生姜を入れて沸騰させ るだけ。風邪のひきはじめに飲むと、体があったまっていいらしい。

味は…何か薬みたいだ。そういえば、コーラってもともと薬みたいな味 だけど、一体どんな成分なんだろう。昔、米軍の化学兵器開発の副産物 として出来た、みたいな話を聞いた気がするけど、嘘だよね?

Tags:

2013-12-20 (Fri)

_ x86-64での可変長引数の扱い

x86-64では整数・ポインタ・浮動小数点数の引数が一部レジスタで渡されるが、ふと可変長引数の場合はどうなるんだろうと思った。

調べてみると、va_listが

typedef struct {
    unsigned int gp_offset; /* 汎用レジスタで渡された次の引数を指すreg_save_area上のオフセット */
    unsigned int fp_offset; /* 浮動小数点数レジスタで渡された次の引数を指すreg_save_area上のオフセット */
    void *overflow_arg_area; /* スタックで渡された引数の領域を指すポインタ */
    void *reg_save_area; /* レジスタで渡された引数の値をダンプした領域を指すポインタ */
} va_list[1];

のような構造になっていて、va_start()で上記のメンバの値を適切にセットして、va_arg()で求められる型によってva_listを操作して値を取り出すようだ。

せっかくレジスタで引数を渡しているのに、メモリ上にレジスタの値をダンプした上でこんな効率悪そうな処理をしないといけないのはもったいない…とつい思ってしまったが、Ruby動かすコストに比べたら全然たいしたことないよなあ。

参考: System V Application Binary Interface AMD64 Architecture Processor Supplement

Tags: C

2017-12-20 (Wed)

_ PGP鍵の更新

PGP鍵の有効期限が切れたので新しい鍵を作成した。

pub   rsa4096/AD744A13 2017-12-20 [SC] [expires: 2027-12-19]
      Key fingerprint = 7645 6F57 D834 E17B ACEF  5239 568A D8CE AD74 4A13
uid         [ultimate] Shugo Maeda <shugo@ruby-lang.org>
uid         [ultimate] Shugo Maeda <shugo@netlab.jp>
uid         [ultimate] Shugo Maeda <shugo@debian.org>
sub   rsa4096/636AA7CD 2017-12-20 [E]

古い鍵で署名した上でpgp.mit.eduとpgp.nic.ad.jpに登録したので、古い鍵での署名が確認できる人は新しい鍵に署名していただけるとありがたい。


2023-12-20 (Wed)

_ MatzにっきでMongoDBを使うのをやめた

MatzにっきをHeroku化した際にMongoDBを使うようにしていたが、MongoDBが不自由なライセンスになってしまったのでDefaultIO(ファイル)に戻した。

移行用のスクリプトはなさそうだったのでtdiary-io-mongodbに同梱されているtdiary-mongodb-convertを以下のように書き換えて使用した。

#!/usr/bin/env ruby

require 'optparse'
require 'erb'
require 'tdiary/view_helper'
require 'tdiary/base'
require 'tdiary/comment'
require 'tdiary/comment_manager'
require 'tdiary/referer_manager'
require 'tdiary/style'
require 'tdiary/cache/file'
require 'ostruct'
require 'tdiary/core_ext'
require 'tdiary/io/default'
require 'tdiary/io/mongodb'
require 'tdiary/application'

def load_diaries(mongo_url, style_path)
  options = {
    'style.path' => style_path
  }
  conf = OpenStruct.new({
    database_url: mongo_url,
    options: options
  })
  tdiary = OpenStruct.new({conf: conf})
  TDiary::IO::MongoDB.load_cgi_conf(conf)
  mongo_io = TDiary::IO::MongoDB.new(tdiary)

  mongo_io.calendar.each do |y, ms|
    ms.each do |m|
      puts "loading #{y}-#{m}"
      month = Time.local(y.to_i, m.to_i)
      mongo_io.transaction(month) do |diaries|
        yield month, diaries
        TDiary::TDiaryBase::DIRTY_NONE
      end
    end
  end
end

def update_diaries(default_io, month, new_diaries)
  default_io.transaction(month) do |diaries|
    diaries.update(new_diaries)
    TDiary::TDiaryBase::DIRTY_DIARY | TDiary::TDiaryBase::DIRTY_COMMENT
  end
end

def store_diaries(data_path, style_path, mongo_url = nil)
  options = {'style.path' => [style_path]}
  conf = OpenStruct.new({options: options, data_path: "#{data_path}/"})
  tdiary = OpenStruct.new({conf: conf})
  TDiary::IO::Default.load_cgi_conf(conf)
  default_io = TDiary::IO::Default.new(tdiary)

  load_diaries(mongo_url, style_path) do |month, diaries|
    p month
    update_diaries(default_io, month, diaries)
  end
end

def store_conf(conf_path, mongo_url = nil)
  conf = OpenStruct.new({options: {}, database_url: mongo_url})
  tdiary = OpenStruct.new({conf: conf})
  s = TDiary::IO::MongoDB.load_cgi_conf(conf)
  File.write(conf_path, s)
end

args = {}
OptionParser.new do |opts|
  opts.banner = 'Usage: tdiary-mongodb-convert [options] <data_path>'
  opts.on('-c CONF', '--conf=CONF', 'store only tdiary.conf'){|v| args[:conf] = v}
  opts.on('-s PATH', '--style=STYLE', 'style path'){|v| args[:style] = v}
  opts.on('-m URL',  '--mongo=URL', 'URL of mongoDB'){|v| args[:mongo] = v}
  opts.parse!(ARGV)

  args[:data] = ARGV.shift
  unless args[:data] || args[:conf]
    $stderr.print opts.help
    exit 1
  end
end

if args[:conf]
  store_conf(args[:conf], args[:mongo])
else
  store_diaries(args[:data], args[:style], args[:mongo])
end

実行手順は以下のとおり(~/diary下のファイルが上書きされてしまうので注意)。

$ bundle exec tdiary_mongodb2default -s lib/tdiary/style -m <MongoDBのURL> ~/diary
$ bundle exec tdiary_mongodb2default -c ~/diary/tdiary.conf -m <MongoDBのURL>
Tags: Ruby tDiary