トップ 追記   RSS 1.0 FEED  

Journal InTime


2024-05-26 (Sun) [長年日記]

_ K&Hのシート

ネームプレート

注文していたK&Hのシートが届いた。

仕様をどうするか迷ったが、ステッチは黒、ネームプレートは黒/黒、スポンジは柔らかめ(体重60kg未満向け)、アンダーカバーは黒ゲルコートにした。

K&Hのシート

Tags: 250DUKE

2024-05-20 (Mon) [長年日記]

_ バッテリー交換

MTX-9BS(G)

YTX9-BS-GY-Cが5年くらい経って、しばらく乗らない間にあがったり、セルの音がちょっと頼りなくなったりしたので、バッテリー交換した。

YTX9-BS-GY-Cは13,290円になっていてちょっと高いなということで、マキシマバッテリーのMTX9-BS(G)にチャレンジ。型番に「(G)」と付いているのがジェルバッテリーらしい。届いた時は13.00Vで念のため充電したら13.25Vになった。セルの音もよさげ。

走行距離: 19,778km

Tags: 250DUKE

2024-05-18 (Sat) [長年日記]

_ RubyKaigi 2024参加

BETTER GIRLで食べたBETTER BREAKFAST

伊丹空港のFree WiFiのネットワークアドレスがdockerとかぶっていて解決にてこずったので箇条書きで。

  • tompngさんの基調講演がすごかったのでそれだけでも元が取れた。
  • tagomorisさんの発表の反響で、Namespaceが入ったらRefinementsいらんのでは説多数。しかし、Refinementsにはまだ伸びしろがあるんですよ。
  • ima1zumiさんの発表でundoの実装で行とカーソル位置をスタックに保存するという話があったけど、Textbringerでは操作ごとにundo/redoというメソッドを用意したクラスを作ってスタックに保存している。
  • しおいさんの発表でIOと名前解決を同時に待つためにpipeを使う話があって、Textbringerでも同じようなことをしてるんだけど、eventfdが使えたら使って、使えない場合はpipeにfallbackするようないい感じのライブラリをだれか作ってませんかね。asyncとかにありそう?
  • ydahさんにparameterizing rulesの型はパラメータの型から推論できないんですかと聞いたら、やはりそういう議論はあったらしい。それを実装する手間と手でタグを書く手間のどちらが楽かという話になりますよね。
  • 羽角さんがmod_rubyの話をして会場が微妙な空気になっていた。
  • Ruby Committers and the Worldで、async/awaitやdeferの話があったけど、ブロックのネストをなくす汎用的な構文(例えばHaskellのdo記法とかScalaのforみたいな)を導入する方がかっこいいと思う。
  • 無料でステーキを食べられてほくほくしていたら、サンバルカンの真似をさせられた。
  • 咳さんの話は「あっ、これ進研ゼミでやったところだ!」となった。
  • Namespaceが完成したらRuby 4になるらしいが、認定試験がやっとRuby 3対応になったところなのでもうちょっと先だとありがたいです……。
Tags: Ruby

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

2023-12-03 (Sun) [長年日記]

_ ConoHa VPSへの移行とCentOS Stream化

この日記のサーバをDebian bookworkにアップグレードしようとした時に sudo find /etc -delete -name '*.dpkg-*' -o -name '*.ucf-*' -o -name '*.merge-error' で/etcをふっとばしてやっぱりVMイメージのバックアップを取りたいなと思ったのと、ConoHa VPSの512MBプランが12か月契約の割引で321円/月だったのでさくらVPSからConoHa VPSに移行した。

誤算だったのは512MBプランがUbuntu 22.03に対応してなかったことで、サーバ再構築でUbuntu 22.04を入れようとすると「失敗しました」とだけ表示される。 Ubuntu 20.04だとサーバ再構築が成功するが、22.04にアップグレードするとやっぱりkernel panicで起動しなくなってしまう。 そもそも契約時にUbuntu 22.04を選択したつもりだったのにCentOS Stream 9になってておかしいと思ったんだよな。

というわけであきらめて当分CentOS Stream 9を使ってみることにした。 firewall-cmdでhttp/httpsを空ける必要があったのとsavelogが使えなくなったこと以外はスムーズに移行できた。

Tags: Linux