今回のプロジェクトに Template Toolkit を本格的に適用しようかと。 問題となるのは PAR にした時に、どのようにテンプレートを取得するか。 (PARでない場合は)テンプレートはモジュールと同じ位置にインストールしておき @INC から探すようにするつもり。
ということで泥臭いが「起動時に一時ディレクトリに展開してしまう」という方法を選択。 %PAR::LibCache を舐めて拡張子が 'tt2' であるものを、File::Temp で作ったディレクトリに放り込んで、Template の INCLUDE_PATH に指定する (実際には上記の処理を行うオブジェクトを作って INCLUDE_PATH で指定)。 Daemon 系ならこれで十分。
で、順次 Perl モジュールに散財していたHTML出力をテンプレートベースに変更。 コードがかなりすっきりしてきて気持ちいい。
今回の作業で @INC にサブルーチンリファレンスやら、オブジェクトやらを渡せることを初めてしった。実際 PAR で利用している。 CODE の混ざった @INC をそのまま Template の INCLUDE_PATH に渡すとエラーが起きるので除外したものを渡すように。
WiKicker では、直接 WikiPage にHTMLタグを記述して表示に反映させる機能を提供していない。
HTMLタグ付けを許すと
が起きやすくなるし、ページのソースの単純さが大きく失われてしまう。 レンダリングしてHTMLにした時に、正しいHTMLを出力されることを保証することが困難になるとともに、HTML以外へのレンダリング/コンバートもかなり難しくなる。
この機能を導入すると、Wiki の良さの半分(あるいはもうちょっと沢山か、もうちょっと少なめ)が失われてしまう。
とはいえ欲しいという声があることも事実。 オープンな WikiForum では全くお勧めできないが、閉じたユーザグループの中ではまぁ必要悪なのかもしれぬ。
また正直ちょっとした表現を追加したい時に、WiKicker 用のプラグインを書くのも面倒だというのは確かにある。
WiKicker では開始・終了マーカによる複数行にまたがるブロックを表すための文法は(閉じ忘れを避けるため)意図的に排除してある。 このため、複数行にわけて書きたいような長いデータを扱うような拡張も導入しにくい。
ちょっと手抜きして「生HTML書けちゃえば」という誘惑はなくはない。
ということでまあ自分に言い訳をしつつ、標準ではオフというかたちで HTMLタグ付けブロックを導入することにした。 スイッチは hell mode とかにしたい (今回は syntax.html というプロパティ名にしたけれど)。
記法は単純に、
normal wiki syntax text... <html> html tagged text... ... </html> normal wiki syntax text...
のように行頭が <html> である行から、行頭が </html>である行までをHTMLタグ付けブロックとすることに。 このため、<html>ではじまる段落が書けなくなるという小さな非互換が発生するが、いたしかたない。
HTMLタグを直接使えるようにするとはいえ、全てを許してしまうのはあまりに危険で非人道的すぎる。 有効なHTMLタグや属性は限定的であるべきだ。
このあたりの処理は面倒だが、幸いにしてCPANにモジュールがある。 今回は HTML::Scrubber を使うことにした。 HTML::Parserを使って parse し、指定したルールに従ってサニタイズしてくれる。
ちょっと使ってみた範囲では日本語(UTF-8、UTF8 フラグなし)でも問題ないようだし、文法的に正しくなくてもきちんとサニタイズできているようだ。
ということで、これを採用することに。
どの要素・属性を許すかはまだきちんと決めかねる。 当面は様子をみながら、調整していく予定。 サニタイザは設置者が置き換えられるようにプラガブルにしておかねばならないな。
WiKicker には終点アンカー(HTML だと name and/or id属性付きA要素)をページ中に書く機能がない。
等の(自分なりの)正当な理由で追加していなかったのだが、まぁ必要になったのであっさり追加することにした。 アンカーテキストに WiKicker のインライン要素を書けるようにするかどうか迷ったが、HTMLでレンダリングする際にA要素のネストを避けたりするのが大変なので書けない仕様にすることにした。
[[anchor:anchor_name]] or [[anchor:anchor_name][anchor_text]]
テストファースト開発に慣れてしまうと、テストコード無しにプログラムを書くというのは不安でたまらなく感じてくる。
テストが欲しい。安らぎが欲しい。
今開発している WiKicker ベースの Web アプリケーションもだんだん機能が増えてきて、コードを触るのがコワくなってきた。
今回は Basic 認証等もあるので、WWW::Mechanize::CGI ではなくてきちんと deploy してから Test::WWW::Mechanize でテストすることにした。
Test::WWW::Mechanize、使ってみると WWW::Mechanize + Test::More よりテストを書くのも読むのも楽になった。
deploy が必要なリグレッションテストはさすがに t/ の下に入れておくのはどうかと思う。 プロジェクト的にはビルドサーバを用意して、そこで自動的にテストできるような環境を用意するのが良さそうだ。
近々遠出をする予定がある。その間のバッテリ容量の少ない FOMA D703i の電池が心配なので、移動中でも FOMA 端末を充電できる充電器を探してみた。
コンビニでも売っているような、使い捨てや乾電池タイプはパス。単n形の充電池についても別途充電器を持ち歩く必要が出てくるのでパス。直結タイプも端子を痛めそうでイヤ。
リチウムイオン電池内蔵タイプで探すと、NTTドコモの純正オプション「FOMA 補助充電アダプタ 01」が順当か。
「AC アダプタ内蔵でコンセントに直結し充電可能」で、またそのまま「FOMA 端末 AC アダプタ」としても使える、リンケージのACL-01W にもちょっと魅かれたが、「FOMA 補助充電アダプタ 01」に比べて電池容量が少ないのと、大きさ・重量の点でちょっとためらった。 ちょうど今日、信号待ちしていた隣の人が手にしていたのを偶然見たのだがちょっと大きいな。
ということで「FOMA 補助充電アダプタ 01」をチョイス。 サンヨーの OEM で KBC-L1 とほぼ同等品。
FOMA の AC アダプタを使って充電しておき、外出先でこのアダプタから FOMA 端末を充電する。 「AC アダプタ」-「FOMA 補助充電アダプタ 01」-「FOMA 端末」とつなげておくと、それぞれ充電してくれるという点は便利。 説明書によると「AC アダプタ」-「FOMA 補助充電アダプタ 01」-「卓上ホルダ」-「FOMA 端末」は NG らしい。 D703i はカバーを開けにくいので、卓上ホルダと AC アダプタの間に挟んで充電しておきたいんだけれどなぁ。
サイズ的には結構コンパクト。 ストラップホールもついているけれど、しかしぶら下げておくってモノでもないな。
遠出する際チャック付きビニール袋にでも入れてバッグに放り込んでおくことにしよう。
遅ればせながら Twitter 公式の Tweet Button (http://twitter.com/goodies/tweetbutton)を nDiki につけてみた。
これで各記事の下部に Tweet Button が表示されるようになった。 もうちょっと手間かなと思ったがそれほとシステムに手を入れることなく埋め込めた。 なお、1ページ1記事なら Tweet Button の方でページの URL をタイトルを拾ってくれるのでもっと簡単。
貼り付けたボタンを押すと投稿ウィンドウが開く。必要ならテキストを追加・編集した後に tweet できる(ボタンを押してもただちに tweet されちゃうわけではなく、キャンセルもできるから押してみて)。
そうそう、短縮 URL サービスはちょっと話題の「t.co」。URL の後ろに + をつけても bit.ly みたいに情報が見られるわけではなかった。
昨日「docomo Wi-FiのWEP方式廃止に伴うSSID「docomo」提供終了のお知らせ」というお知らせかがドコモから出ていた。docomo Wi-Fi は今後は WPA2 用の SSID 0000docomo と 0001docomo(IEEE 802.1X ログイン)になるらしい。
WEP の間は公衆無線 LAN サービスは使わないと決めていたのだけれど、WPA2 になるなら iPod touch も買ったし使ってもいいかなとちょっと思った。docomo Wi-Fi永年無料キャンペーン対象なので無料だし。
ということで Web で申し込みを済ませた後、会社帰りに試してみた。結論からいうとあまり良くなかった。0000docomo が見つかってもつながりにくいし切れやすい。つながっても通信はテザリングより遅い。 渋谷駅のホームで接続設定して、その後乗り換え駅や下車駅でも試したんだけれどどこもよろしくない。あと 0001docomo は見つからなかった。
飲食店とか特定のスポットなら使えるのかもしれないけれど、普通に街中では使いにくそげ。
端末に設定残しておくと、アクセスポイントが見つかってしまった時にわざわざ不安定で遅い Wi-Fi 接続になって残念なことになりそうなので、設定は削除かなあ。 WPA2-PSK だとアクセスポイントなりすまされたらおわりだし。
箱根旅行 2014の2日目。
6:00 ぐらいに起きてとも思っていたのだけれど、昨晩スマートフォンのバッテリが無くて充電のために枕元に置けずアラーム仕掛けるのをやめたら、起きたの7:00 過ぎていた。興奮しているのかなんか浅い眠りで夢見がちだった。そういえば宿で浴衣で寝ると変に汗をかいた感じになるのはどうしてなのだろう。
昨日熱を出した1人も平熱で今日は大丈夫っぽい。
朝食を昨日と同じ席で食べる。朝はレストランが明るくて良い。今日は和食。朝食後にラウンジコーナーでコーヒーでもと思っていたのだけれど、朝食にコーヒーもついていたのでここで済ませた。
9:20 部屋に戻り。
今日は1日箱根小湧園ユネッサンの日。双子茶屋停留所まで歩き、そこから箱根登山バスでユネッサン前停留所へ(箱根湯本方面行きは止まるけれど、箱根町方面だと止まらないバス停)。
トスラブ箱根の周辺契約利用施設ということで和奏林を出発する時にフロントでもらった利用券を提示してお得料金で入場。リストバンドでロッカーの開錠/施錠ができるのとても便利。
バスタオルはレンタル。遊んでいて浮き輪もレンタルしたいなと思ったのだけれど、浮き輪は購入のしかなかった。残念。あと水着エリアだと周囲にバッグかけ用のフックがあってそこにプールバッグをかけておけるので、持ち込み用のバッグを用意しておいた方が便利。風呂(プール)間の移動の時などバスタオルで体を拭かないと寒かったので、バスタオルもバッグにいれて持ち込んだ方が良かった。
入ったのは
あたり。芋洗い状態だったけれどもワイン風呂に入れたので満足した。風呂/プール的には神々のエーゲ海とふしぎな洞窟風呂が楽しい。
昼食は神々のエーゲ海横のファストフード「フォンターナ」で。海の家的なカレーや焼きそばがある。お子様カレーは、お子様用にしてはちょと辛いみたい。
さきに着替え終わって5Fのソファのところで女子待ち。 FinePix XP70 が風呂で大活躍して満足。ただ中で1度落としたためか、あっさりストラップをつけるところの金具を留めているネジがひん曲がってぐらぐらになっていた。耐衝撃力不足。
14:12 に着替えを終えてきた女子と再会。フロントで精算を終えて 14:28 退場。
ユネッサンを退場した後に下のミーオモールでお土産を買ったりした後、軽食&喫茶コーナーのビタミンキッチンでアップルマンゴーソフト食べた。 ビタミンキッチンは1人で回しているのだけれど、メニューのバラエティーが豊富なので驚く。
箱根小湧園ユネッサンを出た後、バスに乗る前に近くのファミリーマートへ。トスラブ箱根の近隣にはお店がないので、戻る前に必要なものを買っておく。あと今回、箱根登山バスが Suica を使えて便利で利用しているのだけれど、残高不足になりそうなのでここでモバイル Suica ではない人はチャージ。
それから明日の観光の時に飲むペットボトルのお茶を購入。あと、今日の夜はレストランではなく部屋で呑むのがゆっくりで良いのかということで、柿の種とソフトさきいかも購入。
座ることができて、再び双子茶屋停留所へ。16:11 頃双子茶屋停留所着。
トスラブ箱根 和奏林に戻って、まずはラウンジコーナーでフリーのコーヒーを1杯。他に1組ラウンジコーナーにいた。今日からカレンダーで3連休なので、昨日よりは和奏林も賑いそう。
男女いれかわって昨日とは違う大浴場。まだ明るいので露天風呂も気持ち良い。露天風呂でゆっくりしたり髭を剃ったりと長湯した。
風呂から上がって部屋で FinePix XP70 の不要な動画を削除しているところで他の人が戻ってきたので慌てたのか、注意していたつもりだったけれども間違えて消さなくて良かった動画を消してしまってちょっとショック。あちゃー。
SDHCメモリーカードを抜いて書き込み防止し、別のメモリーカードと交換。家に帰って復旧トライしたけれども一部上書きされているようで復元ならず。残念。
出発に宿には夕食 19:00 で連絡してあったのだけれど昨日の食べ終わった時間を考えるともう少し早くても良いかなと思い、朝の出発時にフロントに 18:30 に変えてもらった。
夕食の時に出してくれる「そばふりかけ」が美味しいのでフロントで売店のどこに置いてあるか聞き(昨日みた時見つけられなかった)、お手頃なので買ってみた。
部屋に有線放送が入っているので試しに使ってみる。有線放送懐しい。
宿の中の自動販売機(普通の値段で買える)で買ったドリンク(自分はメッツ)で、部屋で一呑み。
今日も遅くならないで就寝。
デリケートなメッセージへの返信をする時は「人を動かす」の目次を読み返すようにしています。
スマートフォンで文章を書く際、行あるいはパラグラフ単位で入れ替えができるエディタが無いかと探しているのですが見当たりません。カット&ペーストで入れ替えるのちょっと手間なんですよね。
Google Keep でチェックリスト表示にすると、行単位で順番を入れ替えることができるのがちょっと便利だということに気がつきました。入れ替えが終わったらチェックリスト非表示にすればまたフラットに戻ってくれます。ただ undo が無いのでやはり怖いです。
今日 iPod touch 6th が値下げ。今は iPhone 5c が手元にあるので必須ではないのですが、20,800円(16GB 税別)ならスペック的に厳しくなった iPod touch (第5世代) から乗り換えたいなとちょっと思ってしまいます。
金王八幡宮、最近ネコがいる。 pic.twitter.com/IwEbYv5nA3
— Naney (@Naney) September 13, 2017
今日から渋谷の金王八幡宮の例大祭。今のオフィスの隣のビル前には渋谷二丁目町会のテントが張られ、神輿や山車も出されていた。去年見にいった BEGIN のライブは今年もあったんだけれど今回はパス。
自分のデジタルハリネズミ (デジタルてんとうむし) は緑かぶりしがち。もうちょっとマゼンタ寄りの方が好みだな。 Lightroom Classic CC の色かぶり補正でマゼンタ側に少しふってみた (山車の写真のみ補正なし)。
乗船して旅してみたい。
— Naney (@Naney) September 13, 2018
ダイヤモンド・プリンセス#SEL50F18 pic.twitter.com/EgqTBnbknJ
先日読んだ「シェアする美術 森美術館のSNSマーケティング戦略」(シェアする美術)の著者である洞田貫氏のセッションがあるということで午前中に MarkeZine Day 2019 Autumn 「デジタルマーケにできること」に行ってきた。
場所はホテル椿山荘東京。
株式会社シャトレーゼ 岩井一紘(@chaiphix)氏 森ビル株式会社 洞田貫晋一朗氏 ロクシタンジャポン株式会社 安倍もと子氏
パネルディスカッション形式だけれど、特に岩井氏ががっつりしゃべる形のセッションだった。
それぞれの運用体制の規模感について聞けたのが良かったかな。
メインの担当者はどの方のところでも1人ないし2人程度。
森美術館は広報チームではなくプロモーションチームで。 SNS アカウント運用は洞田貫氏がアライアンスも含め実質1人でされているとのことだった。
コンパクトな体制でやっているのがやはり多そうだ。
売上向上がゴール。商品認知を広めるため UGC を活用。Retweet・引用 Retweet で承認欲求を満たしたりコミュニケーションしたりしながらエンゲージメントを高めているようだ。
撮影して投稿しやすい自社商品を展開している企業ならではの取り組みだと感じた。
「シェアする美術」で言われている通りインプレッション最重視しているとのこと。著書に書かれている話の一部がご本人の声で聞くことができた。
LINE 中心。 LINE 投稿でインセンティブ提供を地道に続けている。
とメディアを使い分けているとのことだった。セッションの3者の中で一番しっかりと取り組みを積み重ねてきていて継続の強さを感じた。
株式会社Faber Company 白砂ゆき子(@oyukimaru)氏 株式会社ベネッセコーポレーション 持田武資氏
慣れた感じのお2人のかけ合いで進む安心して聞けるセッション。当日タイトルは「イチから取り組んだ『ストックコンテンツ』施策とは?」
雑誌「いぬのきもち」「ねこのきもち」は購買層である飼い主向けの構成だったところ、Web サイト展開ではターゲットを広げて記事を考えていったとのこと。
SEO が連呼されるセッションだったけれど、テクニカルな話よりも検索ニーズ・検索意図の把握をして記事を制作していくという話が中心だったのが良かった。「これを伝えていきたい」ではなく「ニーズがあるものを書くよ」という事にメディアとして徹していくなら、こういう手法がポイントなんだろうなというのが盛りだくさんだった。
SEO 観点で記事テーマを探していくようなことをほとんど考えたことが無かったので、そういうやり方もあるんだなというのが学べたセッションだった。
そういえば何かしら水はあるだろうと思って持参しなかったら会場内で確保できず。公式 Twitter アカウントが買ってくるのを勧めてるのに気がついたのは着席してからだった。他のイベントで水を配ってくれているスポンサーのありがたさを知ったよ。
制限高より高い雲。
— Naney (@Naney) September 12, 2019
RICOH GR III #GR #GRIII #GR3 pic.twitter.com/ezlEEKqPpG
先週テレビシリーズ第1期を観終えたので第2期を観る前に総集編にあたる『劇場版 響け!ユーフォニアム〜北宇治高校吹奏楽部へようこそ〜』(Sound! Euphonium The Movie -Welcome to the Kitauji High School Concert Band-)をこの週末で視聴した。
テレビシリーズを観終えてすぐなので復習的に観た感じ。当然だけれど駆け足に話が進んでいく。各シーンに時間をかけたテレビシリーズが良かったことがわかったかな。劇場版エンドロールは余韻に浸れるカットが続いてそこが良かった。
美しくなった自分と出会うために。#photography
— Naney (@Naney) September 13, 2020
RICOH GR III #GR #GRIII #GR3 pic.twitter.com/NgDAgw4SLj
ノートのネットワーク構造を可視化するのに Obsidian のローカルグラフを便利に使っている。
プロジェクトマネジメントの支援として Obsidian を使う場合
みたいな感じでプロジェクトの親子階層や期間の階層に合わせてリンクでノートを構造化してみているのだけれど、ローカルグラフだといい感じにならないのよね。
ローカルグラフが見やすくなるように構造をちょっといじってみたりしたけれど、対して見やすくならなかった。リンクにもグラフ描画にも上位・下位概念が無いのでまあ当然だよね。
多次元の上位・下位概念を可視化するものではないと割り切って使うべきだったよ。
可憐#photography
— Naney (@Naney) September 12, 2021
RICOH GR III #GR #GRIII #GR3 pic.twitter.com/eldDwxQhWn
体調が良くないので有給休暇をとった。
自身の体調不良が理由で当日連絡して休むの久しぶりだな。もしかして尿路結石が痛くで休んだ2015年12月7日より6年以上ぶり? その間に体調不良になったことはもちろん何度もある。しかしそういえば体調を崩すのは土休日が多かったような気がする。
質感#photography
— Naney (@Naney) September 13, 2022
RICOH GR III #GR #GRIII #GR3 pic.twitter.com/Z2yrcZrA2r
少し夜が過ごしやすくなったので RICOH GR III + ブラックミストNo.05 で渋谷をぶらぶらした。ブラックミスト使うの超久しぶり。
centerline#photography
— Naney (@Naney) September 12, 2023
RICOH GR III #GR3 pic.twitter.com/AMNJZ15FET
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。