«前の日記(2019/02/16(Sat.)) 最新 次の日記(2019/02/20(Wed.))» 編集

ETilog.net

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|

2019/02/17(Sun.) 長いものには巻かれるな! [長年日記]

[ETilog][CMS][tDiary] わたしとtDiary

まず、私とtDiaryの関係性について書いておきたい。Blogブーム初期(2004年初頭)のときにやってみようかと思い*1、インターネットマガジン誌の特集もあり、tDiaryでWeb日記をクローズドに付け始めたのが馴れ初めである。そのWeb日記は大学内限定公開だったのだが、仲間内では概ね好評であった。そんなこともあり、学部4年生と修士2年間、結構な頻度で書いていた。その経験を元に外部でも書き散らすことになったのだが、そのうちの一つがはてなダイアリー(「TOKYO REVIEW SHOW」)であった。大学卒業後ははてなダイアリーでブログを書いていたが、大学時代のWeb日記はこっそり参照用に仲間内共有サーバ→レンタルサーバに置いたtDiaryで見られるようにしていた。そのため、tDiaryは2004年から使い続けてはいたというのがこれまでの状況だった。

さて、今回のはてなダイアリーSunsetに伴い、前々から公表していたとおりはてなブログ移転はありえず、tDiary移転を考えなければならないこととなった。大学時代のWeb日記は公開出来ない、としていたのだが、確認してみると公開出来そうな内容が過半数であった。前々からこの2つのWeb日記統合出来るのでは、と思っていたがはてなダイアリー終了によってその時が来たと判断した。

*1 個人WebSite作者だったため、Web日記という個人を押し出したコンテンツの導入は遅れた

[CMS][tDiary] tDiaryサーバを準備する

問題はtDiaryサーバの準備である。

現在、レンタルサーバで動くRubyのバージョンは惨憺たる状況である。RubyバージョンのEOSにtDiaryがガンガン追随するなか、1.8、1.9、2.0しか動いていないところばかりである。ネットをさまよってみると、00年代はさくらインターネットにRubyの最新版を入れる記事がちらほら見られるが、ここ5年くらいはこのことが原因でWordPressに移転したtDiaryが多いという現実が見て取れる。

tDiaryは時代に即した開発が活発に行われた結果、PaaS対応・Docker対応が進んだ。一方で、Rubyの状況はと言えばRailsが鉄板であちこちで活用もなされている一方、CGI・WebプログラムとしてはPHP全盛が続いていており(WordPressが動けば良い)、ほぼレンタルサーバにおいては放置されているのが実情のようだ。tDiaryがCGIのキラーコンテンツになって、レンタルサーバにRuby導入が進んだ、というのはもう歴史で語られる事項のようだ。

はてなブログを良しとせず出ていく立場としては、選択肢は多くない。一瞬、はてなダイアリーデータからの親和性とまだバージョン制限が緩いPerl利用と言うことでaDiaryも考えた。が、やはりtDiaryの入力画面とプラグインへの親しみがまさった。あとはhnsとか残念ながら、今の私のスキルセットではVPS管理維持は難しい。将来的なPaaS利用も見据えて、まずはいったんRuby2.3が動くレンタルサーバを見つけ出して契約することとした。……じつは某年表サイトでレンタルサーバを借りてるのだが、別に借りることにした。

[CMS][tDiary] tDiaryを最新にする

話はここではてなダイアリー終了騒ぎの前に戻る。そもそも問題は、過去の大学時代のコンテンツがtDiary Ver.2.xなことだった。tDiary Ver.3.xからUTF-8になっていたが、Ver.2.xではEUC-JPだった。これをまずUTF-8化するところからだった。

これは、当時メインで使っていたレンタルサーバを乗り換えることになり、Ruby1.8が標準だったサーバがRuby2.0が入っているサーバーになってようやくVer.5.0.0より前までは追随出来る状況が出来た。このあたりは珍しくはてなで書き残していた。まず、Ver.3のtDiaryを探すところからだったが、これはgithubのTagsをたどれば存在はしているということが分かった。補足すると、tDiaryをサーバ移転する際は、(多くの場合公開Web領域置いていない)データファイル、td2やtdcあたりだけを移すべきであって、サーバプログラム自体は1から入れた方が良いということになる。UTF-8化された以降のtd2ファイル(tDiary2形式)であれば、問題無く読み込める。そもそもがテキストファイルなのだから、バックアップも容易なのだ。…使っていたプラグインとか前に使っていた状態に揃えるのが不安で、ファイルをコピーしようとしていましたごめんなさい。

さて、2018年春にデータをUTF-8化出来たものの、Ver.3以降にするということが出来ない状態は進展が無かった。今回、メインとは別に新たに契約したレンタルサーバはRuby2.3が標準だ。そこで(作業を始めたときの最新版の)tDiary 5.0.10を入れようとしたが成功しない。そこで、はじめてRuby 2.3に対応したVer.5.0.4から入れ始めると無事動いた。そう、ここが敗因だった。 きちんとtar.gzでパッケージされたものを入れていれば大丈夫なのだということにようやく気づいた。これは、「何があるか分からないので段階的にバージョンを上げよう」と思ったのが敗因だった。

Ver.5.0.10まではあげられたが、Ver.5.0.11にあげられない。どうも、WIndowsnのLhaplusでは「〜ファイルを上書きしますか」と聞かれてそのあたりがよくない。Mac OS Xのターミナルで解凍をしたものを上書きしたらこの問題は解決した。歴代バージョンのリリースノートは精読したほうが良い。tDiary Ver.4.0.2でスタイルの置き場所の変更(gem分離)があったり、tDiaryは時代に応じて変更が入っている。releases過去分のリリースノートを含め

12年かけてtDiaryを最新版に出来た(大苦笑)。これまでの経験からして、tDiaryはバージョンアップで転けることが多い。それを踏まえ、検証用のtDiaryを設置して、公開している本番系のtDiaryのバージョンを上げる前に上手くいくか確かめる運用を行うことにした。

[CMS][tDiary] はてなダイアリーデータをtDiary形式に移す

はてなダイアリーはxmlでエクスポートデータを提供している。MT形式やCSVでも出せるが、tDIary形式にするにはxmlを変換かけるのが良いという結論に至った。RubyではnokogiriやOxなどの性能高いXMLパーサがあるようだが、今回はスポット処理で速度は求められないため標準のREXMLで処理することとした。先述の通り、tDiaryスタイルでなくWikiスタイルにする決断をしたのは、ここでtDiaryスタイルに変換する、あるいはHatenaスタイルを使えるように何とかするよりは、Wikiスタイルへの変換が一番工数が少ないと判断したからである。

で、変換プログラムが以下である。

# h2t_convert.rb
#
# h2t_convert.rb: はてなダイアリーのxmlファイルから本文をtDiary2形式にコンバートする

require 'rexml/document'
require 'date'

doc = REXML::Document.new(open("【xmlファイルを指定】"))

doc.elements.each('/diary/day/') do |element|
	str1 = element.attributes["date"]
	# はてなの日付形式をtDiaryの日付形式(ハイフン無し)に置き換える
	str1a = str1.gsub(/(\d\d\d\d)-(\d\d)-\d\d/,'\1\2')
	str1a = str1a+".td2"

	# ファイルが存在する場合は開く
	if File.exist?(str1a)
		file =File.open(str1a,'a')
	# ファイルが存在しない場合はヘッダを挿入する
	else
		file =File.open(str1a,'a')
		# 最近のtDiaryはTDIARY2.01.00を吐くが、このヘッダとするとファイルが消えることがあり「TDIARY2.00.00」とした
		file.puts "TDIARY2.00.00"
	end

	# 日記の日付を挿入
	file.print "Date:\s"
	file.puts str1.gsub('-','')
	
	# 日記のタイトルを挿入
	file.print "Title:\s"
	file.puts element.attributes["title"]

	# 本文中からその日に最後に更新したUNIXTIMEを抽出する
	file.print "Last-Modified:\s"
	str2 = element.elements['body'].text
	str3 = str2.scan(/(?:\*)([0-9]{10})(?:\*)/m)[-1]
	file.puts str3

	# ここの公開設定とフォーマットは固定
	file.puts "Visible: true"
	file.puts "Format: Wiki"

	# はてなダイアリーエクスポートファイルの本文を取得
	str10 = element.elements['body'].text
	# はてな記法をWikiスタイルに変換:見出し記法
	str10 = str10.gsub(/^\*[0-9]{10}\*/m,'!')
	str10 = str10.gsub(/^\*\*\*/m,'!!!')
	str10 = str10.gsub(/^\*\*/m,'!!')
	# はてな記法をWikiスタイルに変換:リスト記法(箇条書き)
	str10 = str10.gsub(/^\-\-\-/m,'***')
	str10 = str10.gsub(/^\-\-/m,'**')
	str10 = str10.gsub(/^\-/m,'*')
	# はてな記法をWikiスタイルに変換:リスト記法(数字付箇条書き)
	str10 = str10.gsub(/^\+\+\+/m,'###')
	str10 = str10.gsub(/^\+\+/m,'##')
	str10 = str10.gsub(/^\+/m,'#')
	# はてな記法をWikiスタイルに変換:脚注記法。footnote.rbが必要
	str10 = str10.gsub(/\(\((.*?)\)\)/m,'{{fn \'\1\'}}')
	# はてな記法をWikiスタイルに変換:改行記法。2行連続空行がある場合BRタグを挿入
	str10 = str10.gsub(/(\r\n|\n|\r)^(\r\n|\n|\r)^(\r\n|\n|\r)/m,"\n\{{\'<br>\'}}\n")

	# はてな記法をWikiスタイルに変換:isbn/asin記法。amazon.rbが必要。なお「:title」で終わる記法は変換せず
	str10 = str10.gsub(/\[asin:([B0123489][A-Z0-9]{9}):image\]/m,'{{isbn_image_left \'\1\'}}')
	str10 = str10.gsub(/\[asin:([B0123489][A-Z0-9]{9}):detail\]/m,'{{isbn_detail \'\1\'}}')
	str10 = str10.gsub(/\[asin:([B0123489][A-Z0-9]{9}):title=(.*?)\]/m,'{{isbn \'\1\',\'\2\'}}')
	str10 = str10.gsub(/asin:([B0123489][A-Z0-9]{9}):image/m,'{{isbn_image_left \'\1\'}}')
	str10 = str10.gsub(/asin:([B0123489][A-Z0-9]{9}):detail/m,'{{isbn_detail \'\1\'}}')
	str10 = str10.gsub(/ISBN:([B0123489][A-Z0-9]{9}):detail/m,'{{isbn_detail \'\1\'}}')
	str10 = str10.gsub(/asin:([B0123489][A-Z0-9]{9}):title=(.*?)/m,'{{isbn \'\1\',\'\2\'}}')

	# はてな記法をWikiスタイルに変換:fotolife記法。自作したfotolife.rbを使用。なお、全ての記法変換を考慮していない	
	str10 = str10.gsub(/\[f:id:(.[0-9a-zA-Z:,]*)\]/m,'f:id:\1')
	str10 = str10.gsub(/f:id:(.[0-9a-zA-Z:,]*)/m,'{{fotolife \'f:id:\1\'}}')

	# はてな記法をWikiスタイルに変換:引用記法。bq.rbが必要。
	str10 = str10.gsub(/^>>(\r\n|\n|\r)/m,'{{bq \'')
	str10 = str10.gsub(/^<</m,'\'}}')
	# 引用時のcite、title属性付の引用も対応。bq.rbが必要。
	str10 = str10.gsub(/^><blockquote cite="(.*?)" title="(.*?)"><(.*?)><\/blockquote></m,'{{bq \'\3\',\'\2\',\'\1\'}}')
	# はてな記法をWikiスタイルに変換:外部リンクを変換。Wikiスタイルでは地の文のURIは勝手にリンクされるため、リンク先を記載しているものを置き換える。kw.rbが必要。
	str10 = str10.gsub(/\[http(.*?):title\]/m,'http\1')
	str10 = str10.gsub(/\[http(.*?):title=(.*?)\]/m,'[[\2|http\1]]')

	# はてな記法をWikiスタイルに変換:修正時刻保存記法。DELタグのみ対応。
	str10 = str10.gsub(/<del(?:.+?)>(.*?)<\/del>/m,'==\1==')

	# はてな記法をWikiスタイルに変換:太字と斜体対応
	str10 = str10.gsub(/<span class="deco" style="font\-weight:bold;">(.*?)<\/span>/m,'\'\'\'\1\'\'\'')
	str10 = str10.gsub(/<span style="font\-weight:bold;">(.*?)<\/span>/m,'\'\'\'\1\'\'\'')
	str10 = str10.gsub(/<strong>(.*?)<\/strong>/m,'\'\'\'\1\'\'\'')
	str10 = str10.gsub(/<b>(.*?)<\/b>/m,'\'\'\'\1\'\'\'')
	str10 = str10.gsub(/<span class="deco" style="font-style:italic;">(.*?)<\/span>/m,'\'\'\1\'\'')
	str10 = str10.gsub(/<span style="font-style:italic;">(.*?)<\/span>/m,'\'\'\1\'\'')

	# はてな記法をWikiスタイルに変換:その他の装飾についてはHTMLタグをそのまま使うこととした
	str10 = str10.gsub(/<span(.*?)>(.*?)<\/span>/m,'{{\'<span\1>\2</span>\'}}')
	str10 = str10.gsub(/<a(.+?)?>(.*?)<\/a>/m,'{{\'<a\1>\2</a>\'}}')

	# はてな記法をWikiスタイルに変換:pre記法とスーパーpre記法。プラグインもあるがHTMLタグ使用とした。
	str10 = str10.gsub(/^>>\|/m,'{{\'<pre>')
	str10 = str10.gsub(/^\|<</m,'</pre>\'}}')
	str10 = str10.gsub(/^>\|/m,'{{\'<pre>')
	str10 = str10.gsub(/^\|</m,'</pre>\'}}')

	# pタグ挿入を目的に改行を入れる。はてなダイアリーは改行するとbrタグを挿入する記法があったがはてなブログやWikiスタイルでは対応していない。全体を考え、pタグで囲うようにした。
	str10 = str10.gsub(/^(?!\n|\r\n\|\r|\!|\!\!|\*|#|\{\{bq)(.*?)\n/){"#{$1}\n\n"}

	# サブタイトルの前など不必要な改行を削除
	str10 = str10.gsub(/(\r\n|\n|\r)^(\r\n|\n|\r)^(\r\n|\n|\r)^\!/m,"\n\n\!")
	str10 = str10.gsub(/(\r\n|\n|\r)^\'\}\}/m){"\'\}\}"}

	str10x = ""
	chk = 0

	# Preタグの中でも改行が挿入されてしまうためPreタグ内では改行を取り除く措置
	str10.each_line do |line|

		if line =~ /(.*)<pre>/
			chk = 1
		end

		if line =~ /(.*?)<\/pre>/
			chk = 0
		end

		if chk == 1
			str10x = str10x + line.gsub(/^(\n|\r\n\|\r)/,"")
		else
			str10x = str10x + line
		end
	end

	file.puts str10x

	# 日付の最後はピリオドで句切り
	file.print ".\n"
	file.close
end

コメントも抽出する必要があるのでもうひとつ。

# h2t_convert_comment.rb
#
# h2t_convert_comment.rb: はてなダイアリーのxmlファイルからコメントをtDiary用にコンバートする
require 'rexml/document'
require 'date'

doc = REXML::Document.new(File.open("【xmlファイルを指定】"))


doc.each_element("//diary/day") do |daytag|
	writeday = daytag.attributes["date"]
	
	daytag.each_element("./comments/comment") do |commtag|
		str1a = writeday.gsub(/(\d\d\d\d)-(\d\d)-\d\d/,'\1\2')
		str1a = str1a+".tdc"
		
			if File.exist?(str1a)
				puts str1a+"ins"
				file =File.open(str1a,'a')
			else
				file =File.open(str1a,'a')
				file.puts "TDIARY2.00.00"
				puts str1a+"make"
			end

		file.print "Date:\s"
		file.puts writeday.gsub('-','')
	
		file.print "Name:\s"
		file.puts commtag.elements['username'].text
		file.puts "Mail:\s"

		file.print "Last-Modified:\s"
		file.puts commtag.elements['timestamp'].text
		

		file.puts "Visible: true"
		file.print "\n"

		str10 = commtag.elements['body'].text
		str10 = str10.gsub(/<br>/m,"\n")
		file.puts str10

		file.print "\n"
		file.print ".\n"
		file.close
	end
end

正直、自分のファイルを変換するためのスクリプトなので、すべてのはてな記法を考慮していない。まとめておくと

  • 自分は使っていないので未考慮の記法
    • name属性付き見出し記法、定義リスト記法、スーパーpre記法(シンタックス・ハイライト)、aa記法、スーパー続きを読む記法、tex記法、ウクレレ記法
    • mailto記法、niconicok記法、google記法、amazon記法、wikipedia記法
    • question記法、antena記法、bookmark記法、gropu記法、haiku記法、keyword記法、jan/ean記法
    • 下書き記法、修正時刻保存記法のうちinsタグ
  • たぶん使ってないので未考慮の記法
    • diary記法
  • 使っていたが無視した記法の数々
    • id記法
      • ガン無視
    • rakuten記法
      • Amazon書影が無いときに使っていたが、件数も多くないのでisbn記法に寄せた。手修正
    • 続きを読む記法
      • イコールが4つだけ残して放置。無視。
    • graph記法、map記法
      • 無視。記法の記載だけがなされている
    • 表組み記法
      • 正直、うまい正規表現が思いつかずタイムアップ。表組み記法以外でも縦棒は使われているので思いつかなかった。

正直、完全な変換は無理である程度は割り切った。例えば「:title」でおわるリンクやisbn記法。いちいちライブラリを使ってタイトル取得もよいかと思ったが、そもそもリンク切れも多い。そのままでも実害がないので逐次手修正という整理にした。

問題は、リンク周りの置換で正規表現の最短一致がその日の記事内で上手く動かないことがあることだ。1日の記事内に複数の「:title=」でリンクを張る文章をしている場合上手くいかないことが多かった。これは原因追及が割に合わず、個々に直す方が早いという現実に屈してしまった。SPANタグの入れ子になってる場合も、太字修飾周り含め上手くいかないことがあった。まだまだ修行が足りない。だが、何せ片手で数えられる程度なので屈してしまった。

あと難儀したのは、はてなダイアリーと違ってtDiaryはプラグイン内でWIki記法を許容しないというところだ。気づいたものは直したが、完全ではない。footnote内ではHTMLタグにしなければならないというのは大きな差分だ。これは追々直すということで。


はてなダイアリーからtDIaryに移転した人は2000ゼロ年代前半にしか見当たらない。みんなはてなブログに行ったり、Wordpressに行ったり、居たりしても静的ジェネレーターに行った人だ。続く人がいるのかは分からないが、参考になればと思い実施方法を晒す。年取ってから提出するには恥ずかしいので、若いうちから恥かいておいた方が良いなと思う*1

*1 つーか変数の規則が笑える

[CMS][tDiary] 新・はてなフォトライフプラグインを書く

問題は「TOKYO REVIEW SHOW」で存外多いはてなフォトライフの写真である。何せ、asabloから移転してきた最も大きな理由がはてなフォトライフというくらいである。PaaS時代のtDiaryを見すえると、image(-ex)プラグインで自前で容易というのはトレンドで無さそうだった。界隈の大勢はGoogleフォトプラグインだが、ここははてなフォトライフに残置することとした。写真も毎月というわけではなく頻度としても困っている現状はない、そしてはてなフォトライフははてなブログでも使われており、サービス終了リスクが低いと判断した。

が、現状の「Hatena-foto.rb」はあくまで極小サムネイル用のプラグインである。だいたい、配布元サイトはすでに404 Not Foundだ*1。そこで、自前の新・はてなフォトライフプラグインを作成することにした。

そのプラグインが以下である。

# fotolife.rb
#
# fotolife: はてなフォトライフの画像を展開する
#
#   src:fotolife 記法の引数
#
# Distributed under the GPL2

def fotolife( src )
	str = src
	if str =~ /f:id:([a-zA-Z][a-zA-Z0-9_-]{1,30}[a-zA-Z0-9]):(.{14}\d?)(j|p|g|b):image(.*)/
		match_str = Regexp.last_match
		filetype = {"j" => ".jpg","b" => ".bmp","p" => ".png","g" => ".gif"}
		ext = filetype[match_str[3]]

		path1 = match_str[1][0,1]
		path2 = match_str[2][0,8]

		css1 = ""

		op = $4
		if op =~ /\A:small|\,small/
			ext = "_m.gif"
		elsif op =~ /:medium|\,medium/
			ext = "_120.jpg"
		end

		if op =~ /\A:left|\,left/
			css1 = " hatena-fotolife-image-left"
		elsif op =~ /\A:right|\,right/
			css1 = " hatena-fotolife-image-right"
		end

		if op =~ /\A:w(\d+)/
			width = ' width="'+$1+'" '
		elsif op =~ /\,w(\d+)/
			width = ' width="'+$1+'" '
		end

		if op =~ /\A:h(\d+)/
			height = ' height="'+$1+'" '
		elsif op =~ /\,h(\d+)/
			height = ' height="'+$1+'" '
		end

		result = %Q[<a href="http://f.hatena.ne.jp/#{match_str[1]}/#{match_str[2]}" class="hatena-fotolife"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/#{path1}/#{match_str[1]}/#{path2}/#{match_str[2]}#{ext}" #{width}#{height}alt="#{str}" title="#{str}" class="hatena-fotolife#{css1}"></a>]

	elsif str =~ /f:id:([a-zA-Z][a-zA-Z0-9_-]{1,30}[a-zA-Z0-9]):(.{14}\d?)(j|p|g|b)/

		filetype = {"j" => "jpg","b" => "bmp","p" => "png","g" => "gif"}
		ext = filetype[$3]

		path1 = $1[0,1]
		path2 = $2[0,8]

		result = %Q[<a href="http://f.hatena.ne.jp/#{$1}/#{$2}">#{str}</a>]
	elsif str =~ /f:id:([a-zA-Z][a-zA-Z0-9_-]{1,30}[a-zA-Z0-9]):favorite/
		result = %Q[<a href="http://f.hatena.ne.jp/#{$1}/favorite">#{str}</a>]
	elsif str =~ /f:id:([a-zA-Z][a-zA-Z0-9_-]{1,30}[a-zA-Z0-9]):t:(.*)/
		result = %Q[<a href="http://f.hatena.ne.jp/#{$1}/t/#{$2}">#{str}</a>]
	elsif str =~ /f:id:([a-zA-Z][a-zA-Z0-9_-]{1,30}[a-zA-Z0-9])/
		result = %Q[<a href="http://f.hatena.ne.jp/#{$1}/">#{str}</a>]
	elsif str =~ /f:t:(.*)/
		result = %Q[<a href="http://f.hatena.ne.jp/t/#{$1}/">#{str}</a>]
	else
		result = str
	end

	result
end

fotolife記法の大半に対応している。はてなダイアリー終了前日にあわてて作っていたサブドメインのはてなダイアリーで試してみた結果を仕様にしている

  • right属性とleft属性両方あるときは後者を優先
  • widthとheightが複数設定されたときは、1番最初の内容を利用する

なお、以下のような残タスクもある

  • movie記法には未対応
    • ……対応予定はないです
  • plain記法(はてなブログ)には未対応
    • 出来れば便利かとも思うが、個人的に必要性を感じていない
  • 関係ない記述が書かれたときの動作がはてなダイアリーのfotolife記法と違う
    • そうなんだけどそこまで拘る気力が流石に湧かなかったデス

tDiaryの管理がgithubになってからどうやってプラグイン公開するのかよく分かってないのだよね。現状ファイル配布してない状況だけども、しばらく様子を見て考えたい。

*1 幸い?Web Archiveに公開サイトのアーカイブが残されており、ソースの記述もある。それで着想を得た。

[Programming][Ruby] ここまでのまとめ

そういう学部を出たはずなのだが、紆余曲折あってプログラムを書くことを仕事にしてないと、いろいろへっぽこであることが分かって辛い。あれが出来てないな、とか察することだけは出来るから一番辛い*1

*1 逆に組織を動かすというのはプログラムを動かす以上に楽しいとも言える。が、これはコンピュータ・サイエンスのような体系だった方法は、ない。

[ETilog] 過去コンテンツの整理

と、ようやく技術的なお仕事が終わった。存外時間がかかったのが、大学で書いていたETilog1を公開出来る内容にする作業である。

  • 人の悪口は削除
    • 大切なことです。が、一部に残ってる(笑)*1
  • ref_toolプラグインの後始末
    • これが動かなくなって、URL記載もないエントリが2004年代は多い。今回整理し、リンクがあればa.rbで書き直し、なければURLだけ書くようにした。
  • 引用しているニュースが全文引用
    • ほぼ全てのカテゴリでこれを解消した。部分引用にしたり、公開しないことにしたり。
  • 引用をし続けることの是非
    • 例えば引用したニュースでは、出身地の近くの強姦事件について容疑者名が実名で書かれていたり、町田の殺害事件の被害者の名前が記されていたりした。前者は未来永劫名前が残って欲しいと思わないこともないが、現在までの人権配慮よりの考え方に合わせて引用は削除している。いろいろ考え方はあろうが、ここは複製自由なデジタル社会のネットなので。市民が望めば図書館に行って新聞縮刷版を調べることは出来るのだから。
  • 2019年時点の考え方からはギャップのある考え方がある
    • 15年という歳月はたいしたもので、今の時代なら叩かれるような内容もある。犯罪に該当する内容はなかったが、パワハラとか女性の社会進出とかセクハラとかは微妙なところがある。気づいた範囲で削除した。が、全部消せたとも思ってない。
  • 所属組織の秘匿化
    • 大学名は消しているが、正直「岩手で大学生」と言ったら2000年代初頭でも5択であまり意味は無いのだが……が、2010年代に大学略称が商標登録されて使えなくされるアホな一件があり*2、それもあって修正をかけている。参加プロジェクト名、あまりに固有な組織名もある程度リライト。ある程度というのはgrep検索で確認する程度ということ。学会名もある程度は秘匿*3
  • 個人名のイニシャル化
    • もともとイニシャルだらけなうえでに、独自のニックネームを数多付け、読む人のみならず書く人でさえも誰のことか分からないETIlog1だが、明らかな実名のものは極力リライトした。完全ではないかもしれない。だいたい、「Kもん」とか「Iがらしさん」とか秘匿されてねーというのも多い。これは今今twitterで書いている程度の範囲ということで。もっとも、イニシャルにしたところで行動をこのETIlogで可視化されていることの方が問題かも知れない。
    • ちょっと悩んだのが「おいさショップ」「oisaショップ」。が、これはそれぞれネットに1件ずつ見つかったのでそのままとした。
  • 自分の実名の削除
    • 一応手を付けてみましたが、無理だよこれ(笑)。だいたい「完全戦国年表」も「MACHIDA PC MAP」も実名でやってたし(苦笑)フルネームは削除して、セレンディピティで訪れた人は分からなくなった、はず。が、精読しGoogle検索した人はいろいろ分かります(苦笑)。中途半端に「ettie」「エティー」に直したたため、一部不自然なエントリがあるかも。そもそも、tDiary界隈はみんなハンドルネームだけど、ソースを見ると実名で公開している…大学で修士というのをやると、論文名で所属は明らかになってしまうのでいろいろが無理なのだ。
  • カテゴリ名の整理
    • これもちょっと頑張って整理した。ETilog1のカテゴリの考え方をETilog9に寄せて「Review」カテゴリに統一し、2004年から2018年まで一気通貫で確認出来るようになった。一方で、「Network」「Internet」カテゴリを「Web」カテゴリに寄せてしまってちょっとおかしい話もあるかもしれない。大学カテゴリは、研究室の話と大学全体の話があり、一部重複しているエントリもあるかも。tDiaryはカテゴリがアンカーに影響を与えるシステムではないので、ガンガン補足修正していこうと考えている。

*1 とりあえず僕は、誰かの批判/悪口/非難すべてを行いますが、逆に批判され悪口を言われ非難されるのも甘受しなければならないとする立場です。相互に言える自由を求めます。

*2 

*3 情報処理学会だけは無理だった

[Web] 結論として

広告が多いことを除けば、はてなブログは色々悪くなくて、アクセスを集めるという観点ではよいかもしれない。モダンな造りで、かゆいところに手が届く機能も多い。カスタマイズしていて楽しくもあった。

だが、それでもわらわは日記のタイトルが必要なのじゃー

[ETilog][CMS][tDiary] なぜtDiaryで書くのか

tDiaryはWordPressとtwitterのあいだという言及があって、なるほど、と。

正直、過去のtDiary・はてなダイアリー共々140字以内のエントリが多い。なんだけども、twitterは言うてSNSで、流れてくるっていうのは大きい。ブログにせよ個人ホームページにせよ、見る側が主体的に見に行くってのが大きいのだよな。で、攻撃的な一言や病んだつぶやき、それに加えて長い文章で何かを批判したり、良いと思ったものを褒めてみたり。そういう可変長なコンテンツを束ねられるのはtDiaryしかないというのが目下の結論である。

[ETilog] スマートフォン対応

限りなく場当たり的だけど、一応。

今やappend-css.rbで追記が妥当な修正ばかりなのだけど、既存テーマを改変して使っている。ここは時間を見てどこかで。

[Diary] そう言えば

「TOKYO REVIEW SHOW」では書いてなかったが、2013年3月を最後に煙草を吸わない運用にしている。禁煙療法とかでなく、意志で吸わないようにしただけなので、6年経過しようという今でも吸いたいと思うときはある。でも、匂いは苦手になってきたか。

吸わないことにした理由は複数あって、複数理由が無ければ吸わなくなってないのだが、一番大きいのはスモーカーだった父母の健康被害ではないか。早死にするのは良いと思っていたが、死ねずに不健康で生きなければならないケースというのを昔は全く考慮出来てなかった。次いで大きい理由を書いてしまえば、非喫煙者の言動の有毒性も大したものかな、との感想である。これを批判するには、自分が非喫煙者にならなければなるまいと思った。結果的に喫煙者が減ったのだから有毒も有益ではとも思うが、どちらにせよ健康被害が大きい。

[ETilog] きょうの日記の公開に大苦戦する

久々のエティログらしい大長文だったから…ではなく、Macのメモアプリで書いてたら、プラグインのシングルクォーテーションが勝手に意図しない文字に置換されていたから、だ! おこだよ!!*1

*1 箇条書きは明確におかしく変わってたのでフォームのエディタで修正するようにしたのだが…

[ETilog] はてなブログを経由した移転に挑戦

終わったつもりになってたが、単にコンテンツ引っ越しなだけでなくて、今回かなり丁寧な手順を踏んだのだった。

  • まず、はてなダイアリーをはてなブログProに移転し、独自ドメイン化。インデックスを待った
  • 800記事程度合ったためか、インポートは1日で終わらず移転したのは1月3日となった
  • その間にtIDaryへのデータ変換作業
  • 完了したので、はてなブログのサブドメイン付アドレス(www.etilog.net)をCNAMEではてなドメインに設定しているのを削除し、Aレコードで自前のレンタルサーバーに変更
  • あらかじめ301リダイレクトでwwwつきドメインからwwwなしドメイン(本tDiary)へ遷移するよう作成。
    • tDiary側はcategory_legacy.rbでエントリ一覧を作成し、重複を削除した
    • はてなブログ側はMT形式でエクスポートし、BASENAMEとTITLEを抽出
    • この2つのファイルをタイトルをキーにぶつけて変換表を作成
    • 他にsitemap.xmlやアーカイブ、カテゴリーなども適宜
  • DNSのCNAME設定をやめると、はてなブログの独自ドメイン設定はほぼ即時に消え失せ、はてなのドメイン+サブドメインに切り替わってしまった。いったんはてなブログは非公開にした上で、JavaScriptで遷移する方法を採用
  • その他、サーチコンソールなどで適宜リダイレクトをケア。

出来ることはやってみたが、どうだか。そこまでアクセス来ている記事もないので痛くはないのだが。


«前の日記(2019/02/16(Sat.)) 最新 次の日記(2019/02/20(Wed.))»

何かあればwebmaster@etilog.netまで