Rusted windown flame

アドベントカレンダー、去年は自分で一個作ってみた。

できる Mac OS X Advent Calendar 2015 - Adventar

カレ主(カレンダー作った人 = 自分のこと)以上にほぼ毎日記事を書いてくれた人( trurusuke さん)がいて記事埋まったけど、 trurusuke さんのコントリビューションがなかったら全然スカスカだった。

自分でも複数記事書いたけど、一番最後は年明けの 2/27 に書き終わったりしてて最悪だった。

Soulver と Calca - portal shit!

アドベントカレンダー、作るからには真剣にファシリテートしないといけない。軽い気持ちで始めると書いてくれる人に失礼だしそもそも誰も登録してくれない。仕事でプロジェクトをリードするのに似てる。よいアドベントカレンダーをファシリテートできる人は仕事やオープンソースソフトウェアプロジェクトや町内会、保護者会、学生サークル・社会人サークルなどでリーダシップを発揮することができると思う。自分はどれもさっぱりなのでカレ主になれるような器ではなかったのだ。


Adventar 、最近は登録されるカレンダーの数めっちゃ数増えてて、奇をてらいすぎてるものや個人の日記、カレ主にやる気がない(去年の自分)ものも散見される。 25 個の枠が埋まってない状態のやつが増えてきてるのではないかと思って 2012 年から調べてみた。 JSON API を用意してくれてた Adventar++ 。

⚡ curl -s http://www.adventar.org/calendars.json?year=2016 | jq '. | length'
530
⚡ curl -s http://www.adventar.org/calendars.json?year=2016 | jq '. | map(select(.entries_count==25)) | length'
125
⚡ curl -s http://www.adventar.org/calendars.json?year=2016 | jq '. | map(select(.entries_count>=20)) | length'
169
⚡ curl -s http://www.adventar.org/calendars.json?year=2015 | jq '. | length'
510
⚡ curl -s http://www.adventar.org/calendars.json?year=2015 | jq '. | map(select(.entries_count==25)) | length'
236
⚡ curl -s http://www.adventar.org/calendars.json?year=2015 | jq '. | map(select(.entries_count>=20)) | length'
281
⚡ curl -s http://www.adventar.org/calendars.json?year=2014 | jq '. | length'
311
⚡ curl -s http://www.adventar.org/calendars.json?year=2014 | jq '. | map(select(.entries_count==25)) | length'
142
⚡ curl -s http://www.adventar.org/calendars.json?year=2014 | jq '. | map(select(.entries_count>=20)) | length'
168
⚡ curl -s http://www.adventar.org/calendars.json?year=2013 | jq '. | length'
230
⚡ curl -s http://www.adventar.org/calendars.json?year=2013 | jq '. | map(select(.entries_count==25)) | length'
112
⚡ curl -s http://www.adventar.org/calendars.json?year=2013 | jq '. | map(select(.entries_count>=20)) | length'
129
⚡ curl -s http://www.adventar.org/calendars.json?year=2012 | jq '. | length'
42
⚡ curl -s http://www.adventar.org/calendars.json?year=2012 | jq '. | map(select(.entries_count==25)) | length'
27
⚡ curl -s http://www.adventar.org/calendars.json?year=2012 | jq '. | map(select(.entries_count>=20)) | length'
30

下落傾向かと思ったけど調べてみたらそんなことなくて大体毎年 50% 弱くらいみたいだった。最初の年の 2012 年が枠埋まり率高い。個人的には闇アドベントカレンダーと寿司アドベントカレンダーがあった 2013 年がアツかった気がするのだけど枠埋まり率は 45% で 2015 年と大差ない。各年の 20 枠( 80% )以上埋まり率も調べてみたけど同じような傾向だった。

すべての情報を表にまとめると以下のような感じ。

2012 年 2013 年 2014 年 2015 年 2016 年
カレンダー数 42 230 311 510 530
25 枠埋まり (率) 27 (64%) 112 (48%) 142 (45%) 236 (46%) 125 (23%)
20 枠埋まり (率) 30 (71%) 129 (56%) 168 (54%) 281 (55%) 169 (31%)

最初の年を除いて、大体半分弱の全枠埋まり率、半分強の 20 枠以上埋まり率であるということがわかった。クラウドファンディングみたいに 12/1 までに枠埋まり率が 8 割に達しなかったらカレンダー不成立としたらどうかと思った。その方がスリルがあるしだるいアドベントカレンダーが量産されたりしないと思う。運営におかれましてはクラウドファンディング的システムの導入を検討してもらえたらうれしいです。あと携帯からも見やすいようにレスポンシブウェブデザインにして欲しい。

それにしてもだるい。


この記事はアドベントカレンダーだるい Advent Calendar 2016の三日目の記事でしたが一日遅れて書いています。四日目は空いていて五日目は ouka_puyo さんです。

Hikiyama at Karatsu kunchi

こんにちは。僕は福岡県の博多市に住んでおりまして、最近九州の中小規模の都市に行って面白いなと思うことが度々ありました。今回、大分県の別府について書こうかと思っていたのですが、よくよく記録を見直してみると別府に行ってたのは去年の年末で今年ではありませんでした。とにかく別府最高で、別府最高という記事を書く気満々だったのでちょっと困っていますが、かわりに先日行って良かった唐津について書きます。

唐津は佐賀県ですが、呼子という漁業の街が近く、イカを食べることができます。

DSC_0689.NEF

活け作りを食べて残ったげそをこのようにイカ天にしてもらうことも可能です。これがすこぶるうまい。

DSC_0694.NEF

先日行ったときにはイカは食べませんでした。唐津くんちというお祭りを見に行きました。こういうの。

Karatsu kunchi

Hikiyama at Karatsu kunchi

なんかユネスコの文化遺産になったっぽいです。僕は配偶者が長崎出身でくんちと言えば長崎という感じなのですが、長崎のくんちとは違った趣があって大変よいと思いました。小さな街が年に一度フィーバーする感じがあるのです。長崎の場合は県庁所在地ですし九州を代表する観光地ですので年柄年中お祭りをやっているような感じがあるのですが、唐津の場合はハレとケと言いますか、くんちに非日常感があるのです。一年間取っておいたパワーがこのときに発散されるような感覚を味わえます。

Drinking on the street

唐津の街は城下町で、街並みもなかなかよいです。うらぶれた地方都市のような感じは確かにあるのですが、商店街を歩いてまわると洒落た喫茶店や食べ物屋さんがありますし、唐津なので焼き物の店もあったりして散策しても非常に楽しいところです。

An alley at Karatsu

DSC_1761

唐津の焼き物でカレーを食べたりピタパンを食べたりコーヒーを飲んだりすることができるカフェもあります。

DSC_0050

DSC_0053

DSC_0060

Caffe Luna

お酒を出すお店もありますから、車で行くのも良いのですが、福岡から電車に乗って行って飲んで帰ってくるってのもなかなかよいです。電車に乗ってこういう景色を見てたら着いてしまいます。

糸島の海

城下町から少し離れますが、唐津には虹の松原というキラーコンテンツもあります(画像は Wikipedia から)。

鏡山からの景色

虹の松原

どうですか、唐津に行ってみたくなったでしょう? 福岡に旅行に来て一日予定が空いたときに行ってみる価値が十分にあります(福岡は住むにはよいところですが観光するところは意外とない)。福岡市中心部の天神駅から一時間ちょいです。

皆様のお越しをお待ちしております。


この記事は今年行った場所 Advent Calendar 2016 - Adventarの一日目の記事ですが間に合わずちょっと遅れて書いています。次は train_sanda さんです。

Untitled

Docker で rep2 を動かす - portal shit!

なぜ 2016 年にもなって rep2 を使うのか。実は2ちゃんねるはほとんど見ていなくて、まちBBSを見ている。特に大人になってから他県から移り住んできたような人だと住んでる町に同級生や昔からの知り合いというのがいないので町のちょっとした情報というのがきわめて入って来にくい。近所の人たちは自分の親かそれよりも上の世代の人ばかりなのでなかなか気軽に情報交換するということもできない。となるとネットで情報収集したいと思うけど、そういうのができる場所はまちBBSしかないような気がする。

ブログは今どきやる気がある人しかやってないので情報が少ない。情報あったとしても福岡だと天神だとか博多だとか薬院だとか人が集まる場所の情報がほとんど。自分が住んでる町の情報にはなかなかたどり着けない。 Twitter は検索しても出てくる情報にばらつきがある。たとえば住んでる町の名前で検索しても、同じ地名が横浜や姫路にあったりして効率が悪い。そもそも Twitter は町の情報よりもその人の思ったこと、感じたこと、やってることがメインなので効率的に情報を収集できない。 Facebook は基本的に情報が閉じられているし、知らない人から情報を集めるというより知ってる人の近況を読む場所という感じ。 mixi はどうだろうかと思って、 10 年ぶりくらいにアカウントを作って自分が住んでいる町のコミュニティに参加してみたけど誰も人がいなくて閑古鳥が鳴いてた。

今年の梅雨頃、マチマチというウェブサービスできて地元の人とお店や病院の情報などをやりとりできるという話だったので、これこそ求めていたものだと思って飛びついたけど、お前がこの町の最初のユーザーだから一ヶ月以内に 5 人ユーザー集めろや、できなきゃマチマチ上のコミュニティは閉鎖な、という厳しいルールだった。嫁さんはこういうのは一切興味ないし近所の人はじいさんばあさんばかりなので当然 5 人もユーザーを集めることはできず終了した。そもそも近所に知り合いがいないからネットで情報を集めたいと思ってるのに知り合いはお前が人力で集めろというのは難易度が高いと思う。

まちBBSは30代以降みたいな人たちが皆好き勝手に自分が書きたいことを書いているけど、最近できたあの店はどうだとか、あそこの病院はよくないだとか、どこそこの店が閉店して別の店になる、移転する、などのような情報を仕入れることができる。当然匿名掲示板なので嘘やネイティブ広告(工作員による宣伝投稿)も時々はあるけど、まぁ読み手もそれは織り込み済みなので特に問題はない。少なくとも SNS よりかは格段に情報に触れやすい。掲示板はトピックが決まっていて、多少脱線することはあってもそのトピックについて話すので、福岡の今宿の話かと思っていたのに横浜の今宿だったみたいなことはないし、失恋してつらいさみしい、今年の夏に別れた彼氏と行った今宿の花火大会の写真です、みたいなおセンチツイートを目にすることもない。 2016 年になったいまでも掲示板が一番情報を集めやすいのかもしれないなぁと思った。

VPS 上で Docker を動かし、 rep2 1 入りのコンテナを運用するようにした。

ホストの 81 ポートをゲストの 80 ポートに向けてマッピングし、ホスト側の Nginx で localhost:81 にプロキシするようにした。

まちBBS のスレッドの >>1 の記事があぼーんになる現象を直したので快適に閲覧できるようになった。

https://github.com/yaasita/docker_rep2 を docker hub から pull してきて最新版の rep2 を使うようにちょこちょこっと修正し、共有ディレクトリ内のコンテンツを /var/www に置くように修正した。なのでホスト側で PHP を編集したものがゲスト側に反映されるし、コンテナを落としてもデータが残り続ける。最高便利。

Docker 、これまでなかなかユースケースが思いつかずいまいち便利さがわからなかったのだけど、手元に PHP 入れたくないとかごちゃごちゃしたセットアップしたくないとかいうときに異常に便利。 rep2 のようなレガシー PHP 環境が必要なソフトを動かすのにもってこいだと思う。

このブログも Docker で運用できないか考えてみたい。


  1. PHP 製のサーバーインストール型2ちゃんねるビューアー。 

無職の頃に買って背表紙が外れかけてテープで補強したりしてた満身創痍状態のモレスキンノートに革のカバーをかけて使うことにした。

モレスキンのノート、無職時代に買ってどうでも良いポエム(ポエム警察に怒られそうなので予めあやまっておきます)を綴ったりしてたんだけど、鞄の中に突っ込んだりしてるうちに背表紙が破れてはがれそうになってきた。普通の人はこんな風になる前に書き終わってしまうんだろうけど、持ってるだけで満足して書くということをあんまりしないのでなかなか使い終わらず、ページはまだ半分くらい残っている。このままにしておくのはもったいないのでレザーのカバーをかけて使うことにした。

ネット通販の革製品屋さんで4000円くらいで買った。2週間くらいで届いた。革カバーが付いてこれ以上ダメージが進む恐れがないのでまた持ち歩いていろいろ書いてみようと思う。iPhone でメモは取れるけど、肝心なときに電池が切れてしまっていることだってあるし、電話しながらメモをとるときはどうしても紙のメモ帳がいる。絵を描くのに使うのも良いかもしれない。

モレスキンMOLESKINE 本革レザーカバー本革ナチュラルブラウン

風呂 Kindle

Kindleまた水没した - hitode909の日記

風呂 Kindle 、たまにやるけど水没させたことない。前はジップロックに入れてたけど最近は入れなくなった。ジップロック、繰り返し使ってると角から破れて水が入ってることあるし、脱衣所に置いておくといつの間にかなくなってる。風呂 Kindle で水没を防ぐためには風呂蓋が肝要な気がする。蓋があればそこに手を置いて使えるので、手が疲れたり眠くなったりして湯船に落とすの避けられる。蓋の上にはバスタオルを敷いて、 Kindle 使うときは必ず手を拭いてから使うとより良い。ちなみに僕は4年前に 7800 円で買った初代ペーパーホワイトをまだ使っています。最近のは高すぎて水没させても買い換えられないので緊張感が生まれているのだと思う。

風呂蓋が分厚すぎて手を乗せると腕が肩の位置より少し高くなり結構疲れるのが最近の悩みです。

糸島の海

自作の Lokka プラグインに Amazon の Product Advertising API に問い合わせてアフィリエイトリンク付きの商品画像を返すやつがある。 Amazon 上の商品管理番号を <!-- ASIN=XXXXXXXX --> みたいな感じで本文中に書いとくと良い感じに小銭を稼げるかたちのリンクにして画像を表示してくれるという便利なやつ。

Amazon の規約上、 Amazon Product Advertising API に対しては一秒間に一リクエストしか送ってはいけないことになってるので、データを取得する度に 1 秒 sleep するようにしていたけど、一ページ内で複数のリンクがあるときにキャッシュがエクスパイアして Amazon の API を叩くとめっちゃレスポンス遅くなってださかったので非同期で取るようにした。ページコンテンツ本体はサクッと返して、商品情報などの取得はページがレンダリングされたあとに JavaScript で行う。 Amazon から JSON を取ってくる処理自体は Ruby にやらせる。

+----------+            +----------------+             +--------------------------------+
|          | +--------> |                | +---------> |                                |
|  client  |            |  Ruby (Lokka)  |             | Amazon Product Advertising API |
|          | <--------+ |                | <---------+ |                                |
+----------+            +----------------+             +--------------------------------+

最初は雑に body の innerHTML を正規表現で replace したりしてたんだけど、そうすると Twitter のウィジェットなど本文内に埋め込んである script タグが動かなくなる問題に気がついた。 HTML 5 の仕様で、 innerHTML = で挿入されたコンテンツの script タグは無視されるらしい。なるほど〜。

element.innerHTML - Web API インターフェイス | MDN

ということでもうちょい調べたら DOM には Node.nodeType というプロパティがあって、COMMENT_NODE など type を持っているらしい。

Node.nodeType - Web API インターフェイス | MDN

<!-- ASIN=XXXXXXXX -->COMMENT_NODE として扱われるので、こいつの後ろに document.createElementして JavaScript で動的に生成された要素を突っ込むようにした。 Promise を使ってナウでヤングな感じに書いた。

let promise = new Promise(function(resolve, reject) {
  request.open('GET', url);
  request.onreadystatechange = function() {
    if (request.readyState != 4) {
      // リクエスト中
    } else if (request.status != 200) {
      // 失敗
      reject(request.response);
    } else {
      // 取得成功
      let formatter = new Formatter(request.response);
      let result = formatter.formatItem();
      resolve(result);
    }
  };
  request.send();
});
promise.then(function(result) {
  let previous = node.previousSibling;
  let parent = node.parentNode;
  let d = document.createElement('div');
  d.className = 'amazon';
  d.innerHTML = result;
  parent.insertBefore(d, previous.nextSibling);
}).catch(function(error) {
  console.log(error);
});
return promise;

意地でも jQuery 使うまいと思ってやってみたけど意外と大丈夫だった。楽をせずに素の JavaScript を書いていると精神が浄化されるような感覚があってよい。写経に通じるものがある。写経やったことないけど。