小粋空間: 月別アーカイブリストの年別表示にはサイドバーなどで用いる月別アーカイブリストを年別に表示する方法が紹介されている。これを参考にして自分のサイトでもやってみたのだけど、この方法はダイナミックで生成しているページではうまくいかないことが判明した。バグなのか仕様なのかよくわからないのだけど、どうもスタティックとダイナミックでは変数の振る舞いに違いがあるようで、そのことが原因になっているらしい。

ダイナミックでは変数にMTタグの値を代入しようとした場合、タグの値が代入されるのではなく、タグへのポインタが代入されるような仕組みになっているらしい。ちょうどC言語などで変数と変数へのポインタを取り違えた時のような状況が発生して、current_year と year の値が永遠に同じままになり、年を区切るためのタグが生成されなくなってしまうのだ。


そこでこれを何とかダイナミックでも使えるように、自分なりに工夫してみた。取り敢えず問題なく動作しているので、そのやり方をここに公表しておいてみる。

ウィジェットの中身を次のように記述するとうまくいった。

<mt:IfArchiveTypeEnabled archive_type="Monthly">
  <mt:ArchiveList archive_type="Monthly">
    <mt:ArchiveListHeader>
<div class="widget-archive-monthly widget-archive widget">
  <h3 class="widget-header"><$mt:ArchiveTypeLabel$> <a href="<$mt:Link template="archive_index"$>">アーカイブ</a></h3>
  <div class="widget-content">
    <ul>
      <mt:archiveList archive_type="Monthly">
      <mt:archivePrevious><mt:archiveDate format="%Y" setvar="prev_year" /></mt:archivePrevious>
      <mt:archiveDate format="%Y" setvar="current_year" />
      <mt:archiveNext><mt:archiveDate format="%Y" setvar="next_year" /></mt:archiveNext>
      <mt:if name="current_year" ne="$next_year">
      <li><mt:archiveDate format="%Y&#24180;" />
        <ul>
      </mt:if>
          <li><a href="<$mt:ArchiveLink$>"><$mt:archiveDate format="%m&#26376;" regex_replace="/^0/","&nbsp;"$> (<$mt:ArchiveCount$>)</a></li>
      <mt:if name="current_year" ne="$prev_year">
        </ul>
      </li>
      </mt:if>
      </mt:archiveList>
        </ul>
      </li>
    </ul>
  </div>
</div>
    </mt:ArchiveListFooter>
  </mt:ArchiveList>
</mt:IfArchiveTypeEnabled>

見てわかる通り、ポイントは MTArchiveNext タグと MTArchivePrevious タグを使うことにある。この二つのタグはアーカイブが存在しない場合の振る舞いに違いがあるようで、MTArchiveList を閉じた後で ul と li の閉じタグを記述する必要がある(青字の部分)。ただし、検証はできていないのだけど、1月からブログを始めた場合にはこのままだと閉じタグが余計に生成されてしまうことになるかも知れない。その際はこの部分を削除すればよい(はず)。

Movable Type にはブックマークレットによるクイックポストという機能が用意されている。ところがこの機能、MT4 以降では文字コードに EUC-JP を使用していると利用できないのだ。ブログ記事投稿画面の下部に表示されているリンクをブックマークして利用しようとしても、そのままだと「不正な要求です。文字コードEUC-JPに含まれない文字データを送信しています。」というメッセージが表示されて、ブログ記事投稿画面に到達することができない。ページのタイトルや選択文字列に日本語の文字が含まれていた場合、JavaScript はそれを UNICODE でエスケープして送信するのだが、MT の側ではその文字列の処理を拒絶してしまうようなのだ。確かめていないけどこれはおそらく Shift JIS でも同様だと思う。

EUC-JPでもクイックポストを使いたい (うむらうす)にはスクリプトからページ・タイトルや選択文字列を送信する部分をカットするという方法が紹介されている。これはこれで一つの方法には違いないけれど、本質的な解決にはなっていない。この問題に何とか対処できないかと予てから考えていたのだけど、このほど JavaScript の勉強がてら腰を据えて取り組んでみて、苦難の末にどうにかうまく成功したのでここに記録しておくことにする。


まず最初に考えたのは MT の側で受けとった文字列のコードを変換して扱うようにできないか、ということだった。しかしこれはソースを見てもよくわからないし、下手にいじってほかの機能がダメになっても困るので断念。そこでスクリプトを修正して文字列を送信する側でコードを変換することを考えた。そのためのライブラリとして ecl.js という便利なものが公開されていて、それ自体は簡単にできる。またブックマークレットで外部ライブラリを読み込むことも特に難しくはない。ただ、それで普通にやってもなかなかうまくはいかないのだ。

調べてみると、JavaScript では外部ファイルを動的に読み込む場合、処理が非同期に行われることに原因があるらしい。今回のケースでいうと、ecl.js の読み込みが終わらないうちに文字コードの変換を行おうとするのでエラーとなるようだ。この仕様には利点もあるものの、ブックマークレットのような場合には大きな障害となる。これは本職のプログラマにとっても対処するのがなかなか難しい問題のようだ。

ブックマークを2回クリックすると2回目の時点ではすでに読み込みが終わっているので無事ブログ記事投稿画面にたどり着くことができる。実用上はこれで十分といえるかも知れないが、それでは何ともすっきりしないので回避できる方法はないか調べてみた。


いくつかの方法が紹介されていたのだが、それに従ってやってみても私のやり方がまずいのか自分の環境ではなかなかうまくいかなかった。いくつか試行錯誤するうちにたどり着いたのがいつでも jQuery を読み込めるブックマークレット jQuerify | バシャログ。である。これを参考にしてやってみたところ見事に成功したので、その方法を以下に紹介する。

  1. まず Escape Codec Library: ecl.js からライブラリ ecl.js をダウンロードし、どこかのサーバにアップロードしておく。MT を運用しているサーバでもいいし、ほかに利用できるサーバ・スペースがあればそれを使っても構わない。
  2. 以下のスクリプトをブックマークに登録する。もちろん ecl.js や MT のアドレス、blogid などは自分の環境に応じて適宜修正する。変更が必要になる(かも知れない)箇所は青字で記載。
    javascript:(function(){scr=document.createElement('script');scr.setAttribute('type','text/javascript');scr.setAttribute('src','http://www.your-site.com/ecl.js');document.getElementsByTagName('body')[0].appendChild(scr);id=window.setInterval(function(){if(JCT8836){window.clearInterval(id);d=document;w=window;t='';url=d.location.href.replace(/#.*$/,'');str='';if(d.selection)t=d.selection.createRange().text;else{if(d.getSelection)t=d.getSelection();else{if(w.getSelection)t=w.getSelection();}};if(t.match(/\n|\r/))str='<blockquote%20cite="'+url+'">\n%20%20<p>'+t.replace(/[\n\r]+/g,'</p>\n%20%20<p>')+'</p>\n%20%20<cite>'+d.title.link(url)+'</cite>\n</blockquote>';else{if(t)str='<q%20cite="'+url+'">'+t+'</q>('+d.title.link(url)+')';else{str=d.title.link(url);}};void(w.open('http://www.your-site.com/mt/mt.cgi?__mode=view&_type=entry&blog_id=1&qp=1&text='+EscapeEUCJP(str),null))}},100);})();
  3. あとはブログ記事で言及したいページをブラウザに表示させて、ブックマークをクリックするだけ。

これで大体はうまくいくようになると思う。取り敢えず自分の環境だと Firefox と Opera では意図した通りに動作している。IE だとデフォルトの設定ではポップアップ・ブロックに引っかかるのと、選択した文字列が長い場合に URL が途中で切られてしまうという問題が発生する。しかしこれはスクリプトではなくブラウザの実装の問題なので、私としてはこれ以上は追求しない(どうせ自分では使ってないし…)。なお、Shift JIS の場合は EscapeEUCJP() の代わりに EscapeSJIS() を使えばうまくいくのではないかと思う(ただし未検証)。


ブックマークレットのスクリプトはとても見づらいので、改行とインデントを適宜ほどこして行番号を付したものを以下に表示しておく。

 1:javascript: (
 2:  function () {
 3:    scr=document.createElement('script');
 4:    scr.setAttribute('type','text/javascript'); scr.setAttribute('src','http://www.your-site.com/ecl.js');
 5:    document.getElementsByTagName('body')[0].appendChild(scr);
 6:    id=window.setInterval (
 7:      function () {
 8:        if (JCT8836) {
 9:          window.clearInterval(id);
10:          d=document;w=window;t='';url=d.location.href.replace(/#.*$/,'');str='';
11:          if (d.selection) t=d.selection.createRange().text; else { if (d.getSelection) t=d.getSelection(); else { if (w.getSelection) t=w.getSelection(); } };
12:          if (t.match(/\n|\r/)) str='<blockquote cite="'+url+'">\n  <p>'+t.replace(/[\n\r]+/g,'</p>\n  <p>')+'</p>\n  <cite>'+d.title.link(url)+'</cite>\n</blockquote>';
13:          else { if (t) str='<q cite="'+url+'">'+t+'</q>('+d.title.link(url)+')';
14:            else { str=d.title.link(url); }
15:          };
16:          void ( w.open('http://www.your-site.com/mt/mt.cgi?__mode=view&_type=entry&blog_id=1&qp=1&text='+EscapeEUCJP(str), null) )
17:        }   // if (JCT8836)
18:      },    // function
19:      100
20:    );      // setInterval
21:  }
22:)();

私も見よう見まねでやってみただけなのでちゃんとわかっているわけではないのだが、簡単に解説してみると、まず3-5行目で script 要素を生成し、ライブラリ ecl.js を読み込んでいる。この読み込みが完了しないうちに次の作業を開始してしまうので、このまま普通に window.open(...EscapeEUCJP(...)...) とやってもうまくいかない。そこで ecl.js の最後に定義されているオブジェクト JCT8836 が存在しているかどうかを100ミリ秒ごとに検証し(6,8,19)、成功したらこのループを解除し(9)、記事本文に挿入すべき文字列を整形し(10-15)、それを EscapeEUCJP() で EUC-JP に変換して MT に送信する(16)、という手順で行っている。

なお、ブログ記事本文にあらかじめ入力される文章は、MT が自動生成するブックマークレットのものがあまりにあんまりなので(これについては開発者のセンスを疑ってしまう)自分なりに工夫して手を加えてみた。具体的にいうと選択文字列に改行が含まれる場合は <blockquote> タグで囲い(12)、そうでない場合は <q> タグで(13)、空の場合はページのタイトルからのリンクだけを生成する(14)、という風にしてみた。よそ様のサイトのページ・タイトルやコンテンツの一部を自分のブログのエントリーのタイトルに使用するというのはちょっとまともとは思えないので、そこの部分は空にしてある。このあたりも好みに応じて変えて使ってみるといいだろう。


自分でウェブサイトを運営するようになって数年が経ち、(X)HTML と CSS についてはほぼわかってきた(つもりになっている)のだが、JavaScript には未だによくなじめないでいる。セミコロンで区切って並べているのに先に書いたコマンドの実行が完了しないうちに次の作業を開始してしまう、というのは UNIX のシェルに慣れた身にはかなり衝撃的だった。まあそれでもこれまでは document.write() みたいな関数しか使いこなせていなかったのが、今回の作業を通じていろいろなことに慣れることができたのは収穫だった。

本当はこんなことにかまけている暇があるならこのところ放置気味になっているメインのブログをどうにかしろよ、という話ではあるんだけど…。


追記: 10月5日21時00分

コードを一部修正。

MTOS に移行

| コメント(0)

MTOS 4.31 にバージョンアップした。今年の4月に MT4.25 にバージョンアップしたことは以前のエントリーで述べた通りだけど、その後 4.26 へのバージョンアップはWingMemo: Movable Type 4.261にアップ…できませんでした(;;で報告されている問題がこのサイトでも発生して、元に戻さざるを得なかった。この問題が 4.3 以降で対処されているのかどうか把握していなかったのだけど、ダメだったら元に戻す覚悟でおっかなびっくりバージョンアップしてみたら、全く問題なく動作した。

で、その後になって気がついたのだけど、この問題に自力で対処された方がおられた。うろうろ... ●MTOS導入日誌 2009年07月29日がそれで、mt/php/lib/mtdb_base.php を一行手直しするだけで解決するらしい。もっと早く気がついていれば 4.31 へのバージョンアップにも落ち着いて取り組むことができたはずなのに、惜しいことをした。


Movable Type が GPL でも配布されるようになって以降、商用の MT でしか利用できない機能は元々使っていなかったこともあり、どこかのタイミングで MTOS に移行しようかとは従来から考えていた。Six Apart 社の日本法人が 4.3 への対応を見送ったことが、それを実現するきっかけとなった。個人ライセンスでの利用というのは気分的にどこか気兼ねしてしまうようなところがあったのたげど、GPL での利用ということになって何となく気持ちが晴れ晴れとした感じがする。

日本法人が 4.3 への対応を見送ったのはもちろん MT5 の普及に注力したいということなのだろうけど、MT5 では MySQL のバージョン5 以上が必須になり、文字コードは UTF-8 にのみ対応ということなので、正式にリリースされてもこのサイトでは当面移行はできないだろう。移行するにはまずサーバを移転しなければならないし、これまで EUC-JP で運用してきたデータベースの文字コードを UTF-8 に変換するという作業をしなれければならないが、そんなことはとてもうまくできそうにない。ほんの数年前までは UNIX といえば文字コードは EUC-JP が定番だったのに、こうした技術の進歩にはとてもついていけない。MT4 系列の今後はどうなっていくのだろう。もしかするとこれが最後のバージョンアップということになってしまうのか…。


なお、MT4.3 のローカライゼーション・ファイルには typo があり、編集画面のアイテム関連づけを設定する部分には「entry 関連づけられたアイテムはありません。」と表示されている。運用上の実害は皆無だが、mt/lib/MT/I18N/ja.pm の該当部分(3029行目)を修正すると直るので、気持ちが悪い人は直しておくといいだろう。

Movable Type 4.2 がリリースされていることはわかっていたのだけど、テンプレートとか変更するのがいろいろと面倒なので(特にコメントフォーム周り)ずっと 4.15 のままにしていた。やっと一昨日の8日になってバージョンアップ作業を行った。もうすでにマイナーバージョンは 4.25 にまでなっていたけど。

作業の際につまづいた点、対処方法などを備忘録としてここに書いておく。4.25 になってモーションブログだとかアクションストリームといった機能が追加されたようなのだけど、使い方がわからないし取り敢えずあまり関心もないのでそれについてはパス。


コメントフォーム

コメントフォーム周りのことは小粋空間: Movable Type 4.1 と 4.2 の差分(コメント入力フォーム)を参考に修正。しかし「サインインできます」のメッセージが表示されないなど、どうしてもうまくいかなかった。しばらく悩んでいたが、初期化した mt.js (うちのところでは MT3時代の名残りで mt-site.js というファイル名なのだけど)の最初の方で<mt:Ignore>で囲まれている部分を出力されるように変更してみたらうまくいった。

<mt:Ignore>
/*  The following functions and variables are here to support legacy MT templates.
    If you have refreshed your JavaScript template but still use older MT comment
    templates, you may need to uncomment this block in order for those templates 
    to work properly. To use, simply remove the 'mt:Ignore' tags wrapping this
    block of code.
*/
    function hideDocumentElement(id) { return mtHide(id) }
    function showDocumentElement(id) { return mtShow(id) }
    function individualArchivesOnLoad() { return mtEntryOnLoad() }
    ...
    var captcha_timer;
</mt:Ignore>

この部分を以下のように変更。

<mt:Ignore>
/*  The following functions and variables are here to support legacy MT templates.
    ...
    block of code.
*/
</mt:Ignore>
    function hideDocumentElement(id) { return mtHide(id) }
    ...
    var captcha_timer;

これで万事うまくいった。

追記: 2009年10月15日

その後の調査の結果、この不具合はエントリー・テンプレートの body タグに onload="individualArchivesOnLoad(commenter_name)" というイベント・ハンドラが指定されていたことが原因らしいと判明。おそらくこの関数(と変数)が定義されていないことでエラーとなっていたものと思われる。このアトリビュートを削除して再構築したところ、上記の変更を元に戻しても正常に動作するようになった。


ページ分割

このブログ自体は今のところ全てスタティックに出力しているのだけど、メインのブログの方ではスタティックとダイナミックを併用していて、 Smarty の機能を利用してページ分割を行っていた。ところが 4.2 からはMT本体にページ分割の機能が加わったというので、それを利用してみることにした。参考にしたのは Six Apart の公式のアナウンスWingMemo: ダイナミック・パブリッシングで頁分割(8) MT4.2公式編

ここに書いてある通りにして大体うまくいったのだけど、全体のページ数が2ページになる時に1ページ目から次のページへのリンクが生成されないという問題が生じていることが発覚。どうすればいいのかわからず途方に暮れていたが、やみくもに検索してみたら同じ問題に遭遇していともあっさりと解決してしまったというすご腕の方のページを発見した。MT4.2のダイナミックパブリッシングでのページ分割 - kwLogがそれなのだけど、この通りにしたら見事に解決した。

この方がさらにすごいのはページキャッシュとの両立の問題をも解決しているところ。これについては今までMovable TypeでPHPダイナミックパブリッシングとキャッシュとページ分割を同時に利用する方法::レビログで紹介されているmtview.phpを修正する方法で対応していたのだけど、これだと結局アドレスに‘?’のつくページはキャッシュされないことになる。ところがMovable Type 4.2でキャッシュ付きダイナミックパブリッシングでのページ分割 - kwLogではMT本体のファイルをいじることによって全てのページがキャッシュされるようになる方法が紹介されている。早速やってみたが全く問題なく動作していて、実にすごいとしかいいようがない。


認証方式

4.2になって新たにいくつかの認証方式に対応するようになった。特に GoogleYahoo!ミクシィのようなメジャーなサービスのアカウントでサインインできるようになったというのは大きなことかも知れない。私がやっているようなブログでは TypePad のアカウントを持っている閲覧者なんておそらくあまりいないだろうから。

ところが Google とミクシィのアカウントでの認証を可能にするには Perl のモジュールが足りないらしい。調べてみると私が利用しているのと同じ XREA でうまく対応した方のページを発見。XREAでMovable Type 4.25のGoogle認証を使う設定 - BBBLOGを参考にやってみたら Google の方はうまくいった。ただし私はシンボリックリンクは mt/extlib 以下に作成した。多分その方が自然だと思うので。

ただこれでもまだミクシィの方はうまくいかない。調べてみるとプラグインを修正してやる必要があるらしい。Movable Type 備忘録 - mixiComment プラグインを参考に mixiComment.pl を修正したらうまくいった。


こうやって頻繁にバージョンアップされて機能が豊富になっていくというのは有り難いことである反面、ついていくのがなかなか大変なことでもある。まあ今回は無事作業を終えられてよかった。参考にさせていただいた各ページの作者のみなさんに感謝。

今日になってサイトのトップ・ページGoogle PageRankが3に上昇しているのに気がついた。これまでずっと2をキープしたまま動かなかったのだけど、初めて自分のサイトのランク・アップという体験をすることができた。

これまでこのサイトはなぜかYahoo!との相性がやたらとよかった一方で、Googleの評価は低いままだった。比率でいうと大体3倍から4倍程度Yahoo!検索からのアクセスが上回っていた。しかしこれでこの比率にも変化が生じることになるのか、今後の動向が楽しみである。

ローカルマシンに MediaWiki をインストールした。先日 Wikipedia のある大物管理者さんがご自身のブログで MediaWiki をローカルで使用する効用について述べられていたので自分もやってみる気になったのだ。

自分の場合は Linux 環境へのインストールなのでそれほど難しいことはないのだけど、文字コード関連でつまづくところがあったので備忘録としてメモしておく。


まずは MySQL の設定から。MediaWiki は文字コードにutf8を用いるので、データベースの方もそれに合わせておかなければならない。/etc/my.cnfをいじってもいいけど、私はデータベースを作成する時のオプションで指定した。

mysql> CREATE DATABASE wikidb DEFAULT CHARACTER SET utf8;

ここまでは順調に進んだのだが、実際にインストールしてみると微妙なところで部分的に文字化けが起こり、ログインができないという問題が発生。いろいろと試行錯誤の末、phpのmbstring.encoding_translationという設定項目がOnになっていることが原因と判明した。Vine Linux ではなぜか/etc/php5/php.iniの末尾でこの項目が設定されているのだ。

[Vine]
output_buffering = Off
expose_php = Off
memory_limit = 32M
variables_order = "GPCS"
default_charset = EUC-JP
extension_dir = /usr/lib/php5
allow_url_include = Off
sendmail_path = /usr/sbin/sendmail -t -i
session.save_path = "/var/php5/session"
session.use_only_cookies = On
session.use_strict_mode = On
session.entropy_file = /dev/urandom
session.entropy_length = 32
session.hash_function = 1
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = pass
mbstring.encoding_translation = On

この最後の行をOffに変更することで全てうまくいった。

mbstring.encoding_translation = Off

という具合に。

php.iniをいじりたくなければ MediaWiki をインストールしたディレクトリの.htaccessに以下の一行を書き加えてもうまくいくはず(ただし未検証)。

php_flag mbstring.encoding_translation Off

PCを新調

| コメント(0)

今月に入って突如PCを新調することになった。OSの新規インストールから始まって種々の設定作業が漸く一段落したところ。Windows XPLinux のデュアル・ブート体制で使用している。

Linux はこれまで Vine Linux 3.2 を使用していたのを最近注目を集めている Ubuntu に乗り換えてみようと思ってインストールしたのだけど、いろいろと細かい部分で気に入らないところが多くて結局 Vine Linux 4.2 にすることにした。

Ubuntu の気に入らなかったところというのはいろいろあるけれど、最も不満なのは root でログインできないことだった。コマンドの頭にいちいち sudo をつけるのは煩わしくて仕方ないのだけど、多くの人が愛用しているということはそう感じるのは自分だけなのだろうか。

一方 Vine の方はインストール後に最初にシステムを立ち上げた時点ですっかり気に入ってしまった。まず何よりもデザインのセンスが秀逸なのが私にとってはうれしい。もちろんデスクトップの見映えなんてものはどんなディストリビューションでも後からいくらでもカスタマイズできるけど、やはりデフォルトのデザインが心地いいというのはぜひ愛用したいという気分を掻き立ててくれるものだ。アップデートのタイミングが他のディストリビューションにくらべて若干遅いということだが、私にとってはそれほど気になることではない。何しろついこの間まで Version 3.2 を気にせず使っていたくらいだから。当面は Vine のお世話になっていくことになるだろう。

MT4の使い勝手

| コメント(0)

Movable Type をバージョンアップして二週間が過ぎたが、これまで使ってみた感想を簡単に述べておきたい。


スパム対策

まずバージョンアップの主目的であるコメント投稿の認証システムには大いに満足している。これまでできるだけ気軽に書き込みできるように投稿への敷居を下げたいと思っていたのでスパムには場当たり的な対応に終始していたけれどついにそういうわけにもいかなくなった。MT4になり使えるようになったCAPTHCA認証を採用したお蔭でスパムコメントは一切なくなった。コメントして下さる方にはお手数をかけさせてしまい申し訳ないけれど、これでスパムとの腐れ縁は解消である。

それに伴い SpamLookup の Keyword Filter に登録してあった膨大な数のNGワードもきれいに消去した。これで真面目な投稿が巻き添えでフィルタリングされることもなくなる。

トラックバック・スパムは時折ぽつぽつとやってくるけど、こちらは承認後の反映にしてあるのでサイトに表示されることはない。もう自サイトにスパムが表示されることはないのだと思うとせいせいする。


管理画面

一方MT4から管理画面のインタフェイスが大きく変わったのだが、こちらは少し扱いづらい印象。javascriptが本格的に使われていて、ローカルマシンのリソースを大量に消費しているようだ。もっと高性能なマシンを使っていればそうストレスを感じなくて済むのかも知れないが、自分の使っている低スペックマシンではやや動作がまどろっこしく感じられる。こうしたところは多機能さよりも軽快さの方を優先して欲しいと個人的には思うのだが。


いずれにしてもオープン・ソース版もリリースされたことでライセンスの上でも WordPress に引けをとらない使い勝手になったので、少なくとも日本では当分 Movable Type のブログ・ツールとしての優位性は動かないと見ていいだろう。このソフトウェアとは今後も長いつきあいをしていくことになりそうだ。

Movable Type が昨年メジャー・バージョンアップされたことはわかっていたのだが、3.xからかなり大きく変わっていると聞きテンプレートの細かい修正などが面倒で自分のサイトでは導入しないままでいた。しかしこのところスパム・コメントがあまりに多くなっていたのを機にCAPTCHAなどの認証システムを利用できるようにしようと決意し、先週7日に遅まきながらバージョンアップした。その時すでに最新版は4.1になっていたけれど。

そこでこの機会にサイト運営上の技術的な事柄をメモしておくための新たなブログを立ち上げることにした。プログラミングやネットワーク技術について詳しいわけではないので大した内容は書けないけど、せめて自分用の備忘録として役立つようにしていきたい。