2018-07-21

2018夏の新番組

暑すぎる夏、皆様はいかがお過ごしでしょうか。

とりあえず1~3話くらい見ましたが、今のところ気になるのは次の作品あたりでしょうか。これ! というほどのものは今のところありません。

07/01(日) 07:30~ テレビ東京系 ミッキーマウスとロードレーサーズ
07/01(日) 22:00~ TOKYO MX ISLAND
○+ 07/01(日) 24:00~ TOKYO MX はねバド!
07/01(日) 24:30~ TOKYO MX バキ 死刑囚編
07/01(日) 25:00~ TOKYO MX じょしおちっ! ~2階から女の子が…降ってきた!?~
07/02(月) 25:35~ TOKYO MX One Room 2ndシーズン
○+ 07/02(月) 25:40~ TOKYO MX ヤマノススメ サードシーズン
07/03(火) 21:54~ TOKYO MX アイドルマスター シンデレラガールズ劇場 3rd SEASON
× 07/03(火) 23:00~ TOKYO MX 千銃士
07/03(火) 25:00~ TOKYO MX 焼肉店センゴク
07/03(火) 25:40~ TOKYO MX Back Street Girls
× 07/03(火) 25:59~ 日本テレビ 中間管理録 トネガワ
07/04(水) ~ デジタル配信 あるゾンビ少女の災難
07/05(木) 22:00~ TOKYO MX 異世界魔王と召喚少女の奴隷魔術
07/05(木) 22:30~ TOKYO MX すのはら荘の管理人さん
07/05(木) 23:00~ TOKYO MX BanG Dream! ガルパ☆ピコ
07/05(木) 24:00~ TOKYO MX 夢王国と眠れる100人の王子様 TVアニメシリーズ
07/05(木) 24:55~ フジテレビ BANANA FISH
07/05(木) 25:58~ TBS 七星のスバル
07/06(金) 21:54~ TOKYO MX 働くお兄さん!の2!
○+ 07/06(金) 22:00~ TOKYO MX ちおちゃんの通学路
× 07/06(金) 22:30~ TOKYO MX 殺戮の天使
07/06(金) 25:40~ TOKYO MX はるかなレシーブ
07/06(金) 28:00~ テレビ東京 闇芝居 第6期
07/07(土) 06:30~ TBS系 ゾイドワイルド
07/07(土) 24:00~ TOKYO MX はたらく細胞
× 07/07(土) 25:00~ TOKYO MX 音楽少女
07/07(土) 25:30~ TOKYO MX 百錬の覇王と聖約の戦乙女
07/08(日) 10:30~ TOKYO MX スペースバグ
○+ 07/08(日) 22:30~ TOKYO MX プラネット・ウィズ
△+ 07/08(日) 23:30~ TOKYO MX あそびあそばせ
07/09(月) 21:54~ TOKYO MX 兄に付ける薬はない!2-快把我哥帯走2-
07/09(月) 24:00~ TOKYO MX 悪偶 -天才人形-
07/09(月) 24:30~ TOKYO MX Phantom in the Twilight
× 07/09(月) 25:05~ TOKYO MX 邪神ちゃんドロップキック
07/09(月) 26:10~ テレビ東京 京都寺町三条のホームズ
× 07/10(火) 25:40~ テレビ東京 深夜!天才バカボン
07/11(水) 24:00~ TOKYO MX Free!-Dive to the Future-
07/11(水) 25:05~ TOKYO MX アンゴルモア~元寇合戦記~
07/12(木) 23:30~ TOKYO MX 天狼 -Sirius the Jaeger-
× 07/12(木) 25:28~ TBS 少女☆歌劇 レヴュー・スタァライト
○+ 07/13(金) 24:30~ TOKYO MX ハイスコアガール
× 07/13(金) 25:05~ TOKYO MX ロード オブ ヴァーミリオン -紅蓮の王-
07/13(金) 25:55~ TBS ハッピーシュガーライフ
07/13(金) 26:25~ TBS ぐらんぶる
07/14(土) 09:00~ NHK Eテレ おしりたんてい 新作
× 07/14(土) 23:30~ TOKYO MX ゆらぎ荘の幽奈さん
07/15(日) 07:00~ TOKYO MX おしえて魔法のペンデュラム ~リルリルフェアリル~
  07/22(日) 24:10~ NHK総合 つくもがみ貸します
07/22(日) 24:35~ NHK総合 進撃の巨人 Season3
2018-04-17

2018年春の新番組

うーん、今期は不作ですかね。数はあれどコレは!というものはなし。

  開始日時 チャネル タイトル
03/02(金) Netflix B:the Beginning
03/09(金) Netflix A.I.C.O. -Incarnation-
03/23(金) Netflix ソードガイ 装刀凱 The Animation
04/??(?) 中京テレビ 黒猫モンロヲ
04/01(日) 08:30 テレビ東京系 デュエル・マスターズ!
04/01(日) 09:00 フジテレビ系 ゲゲゲの鬼太郎 第6期
04/01(日) 24:00 TOKYO MX ウマ娘 プリティーダービー
04/01(日) 25:00 TOKYO MX 甘い懲罰~私は看守専用ペット~
04/01(日) 深夜 テレビ東京 フォーカード
04/02(月) 10:15 NHK Eテレ キャラとおたまじゃくし島
04/02(月) 17:55 テレビ東京系 ベイブレードバースト 超(ゼツ)
× 04/02(月) 18:25 テレビ東京系 パズドラ (新作)
04/02(月) 22:30 TOKYO MX かくりよの宿飯(やどめし)
04/02(月) 25:00 TOKYO MX 宇宙戦艦ティラミス
04/02(月) 25:35 テレビ東京 キャプテン翼 新作
04/02(月) 25:40 TOKYO MX 魔法少女 俺
× 04/03(火) 17:55 テレビ東京系 ガンダムビルドダイバーズ
04/03(火) 18:45 NHK Eテレ 少年アシベ GO!GO!ゴマちゃん 第3シリーズ
04/03(火) 23:00 TOKYO MX 東京喰種 トーキョーグール:re
04/03(火) 25:00 TOKYO MX 立花館To Lieあんぐる
04/03(火) 25:29 日本テレビ ルパン三世 PART5
04/03(火) 25:59 日本テレビ 3D彼女 リアルガール
04/04(水) 18:45 NHK Eテレ ねこねこ日本史 第3シリーズ
04/04(水) 19:25 NHK Eテレ カードキャプターさくら クリアカード編
04/04(水) 22:25 TOKYO MX ありすorありす
04/04(水) 23:30 TOKYO MX 重神機パンドーラ
04/04(水) 26:05 TOKYO MX 妖怪人間ベム-HUMANOID MONSTER BEM- & 俺たちゃ妖怪人間G
04/05(木) 18:25 テレビ東京系 アイカツフレンズ! (第3期)
04/05(木) 21:54 TOKYO MX ケッケロケー
04/05(木) 22:00 TOKYO MX 多田くんは恋をしない
04/05(木) 22:30 TOKYO MX 銀河英雄伝説 Die Neue These 邂逅
04/05(木) 23:30 TOKYO MX こみっくがーるず
04/05(木) 25:28 TBS メガロボクス
04/05(木) 25:58 TBS されど罪人は竜と踊る
04/06(金) 17:55 テレビ東京系 イナズマイレブン アレスの天秤
04/06(金) 18:20 NHK Eテレ あはれ!名作くん
04/06(金) 22:30 BSスカパー グラゼニ
04/06(金) 22:48 テレビ東京 テレビ野郎 ナナーナ
04/06(金) 24:30 TOKYO MX Lostorage conflated WIXOSS
04/06(金) 25:35 TOKYO MX 信長の忍び~姉川・石山篇~ (第3期)
04/06(金) 25:40 TOKYO MX ヒナまつり
04/06(金) 25:55 TBS 魔法少女サイト
04/07(土) 17:30 日本テレビ系 僕のヒーローアカデミア 第3期
04/07(土) 17:35 NHK Eテレ MAJOR(メジャー) 2nd
04/07(土) 23:25 Animax お前はまだグンマを知らない
04/07(土) 24:00 TOKYO MX ソードアート・オンライン オルタナティブ -ガンゲイル・オンライン-
04/07(土) 24:30 TOKYO MX PERSONA5(ペルソナ) the Animation
04/07(土) 25:00 TOKYO MX 鬼灯の冷徹 第弐期 その弐
04/07(土) 25:30 TOKYO MX LOST SONG
04/08(日) 07:00 テレビ東京系 こねこのチー ポンポンらー大旅行
04/08(日) 07:14 テレビ東京系 若おかみは小学生!
04/08(日) 08:30 フジテレビ レイトン ミステリー探偵社 ~カトリーのナゾトキファイル~
× 04/08(日) 10:00 テレビ東京系 キラッとプリ☆チャン
× 04/08(日) 11:30 TOKYO MX SNSポリス
04/08(日) 22:00 TOKYO MX ニル・アドミラリの天秤
04/08(日) 23:00 TOKYO MX あまんちゅ!~あどばんす~ (第2期)
× 04/08(日) 23:30 TOKYO MX Caligula -カリギュラ-
04/08(日) 24:10 NHK 総合 ピアノの森
04/08(日) 24:30 TOKYO MX 食戟のソーマ 餐ノ皿 -遠月列車篇-
04/08(日) 25:35 TOKYO MX デビルズライン
04/08(日) 25:35 テレビ東京 美男高校地球防衛部HAPPY KISS!
× 04/09(月) 19:00 TOKYO MX Cutie Honey Universe(キューティーハニー)
× 04/09(月) 19:30 TOKYO MX 実験品家族 -クリーチャーズ・ファミリー・デイズ-
04/09(月) 23:00 TOKYO MX ゴールデンカムイ
04/09(月) 24:30 TOKYO MX 蒼天の拳 REGENESIS
04/09(月) 25:10 TOKYO MX あっくんとカノジョ
04/09(月) 25:15 TOKYO MX 踏切時間
× 04/09(月) 25:20 TOKYO MX レディスポ
× 04/10(火) 24:30 TOKYO MX ハイスクールDxD HERO (第4期)
04/11(水) 22:00 TOKYO MX 鹿楓堂よついろ日和
× 04/11(水) 24:00 TOKYO MX ラストピリオド-終わりなき螺旋の物語-
04/11(水) 25:05 TOKYO MX Butlers~千年百年物語~
04/11(水) 25:35 TOKYO MX STEINS;GATE 0 -シュタインズ・ゲート ゼロ-
04/12(木) 24:00 TOKYO MX ひそねとまそたん
04/12(木) 24:55 フジテレビ ヲタクに恋は難しい
× 04/12(木) 25:05 TOKYO MX 奴隷区 The Animation
04/13(金) 12:00 Amazon PV 異世界居酒屋~古都アイテーリアの居酒屋のぶ~
04/13(金) 18:25 テレビ東京系 妖怪ウォッチ シャドウサイド
× 04/13(金) 22:30 TOKYO MX フルメタル・パニック!IV Invisible Victory
04/20(金) Netflix アグレッシブ烈子
2018-03-09

最近の自宅Bluetooth環境と2.4GHz帯

BluetoothのドングルというかUSBアダプタってどれを買ったら良いんでしょうね。サッパリ分かりません。とりあえずサンワサプライの2014年の品を買ってみました。

ELECOMので良いのかなと思ったけどAAC、apt-xに対応していないとかレビューにあったので回避。

  • Bluetooth4以降(マウスが4以降じゃないとダメなので)
  • apt-x対応
  • そんなに飛ばす必要は無いのでClass2

というわけで↓これになりました。

サンワサプライ Bluetooth 4.0 USBアダプタ(class2) MM-BTUD44

ついでにおすすめされるままにSoundPEATS Q30 Bluetooth イヤホンも買ってみました。問題なく再生されますね。音質も悪くない。遅延も少ない。Bluetoothのオーディオなんて遅延が酷すぎて使い物にならないと思っていたのだけど、このくらいであれば十分実用に耐えられます。これがapt-xの力なのだろうか。

とはいえ、デスクトップPCではaudio-technica デジタルワイヤレスヘッドホンシステム ATH-DWL3300+耳掛けヘッドホンを使っていてこちらの方が好きな音なのでQ30はタブレットで使うことにしました。XperiaZ2 Tabletはapt-x対応でした!

ちなみのこのオーテクのATH-DWL3300は2.4GHz帯を使っているのですが、Wi-Fiとすこぶる相性が悪い。2.4GHz帯のWi-Fiを使うとブツブツ音が途切れます。Wi-Fiの方もスピードが落ちるような。
両方のチャネルを手動で調整してATH-DWL3300は一番低い方の周波数に、無線LANルータは一番高い方の周波数に変更したら干渉しなくなりました。

他にも2.4GHz帯を使うものといえば:

  • Bluetooth
  • LogicoolのUnifyingレシーバ
  • LogicoolのUnifyingじゃないレシーバ

があってPCのUSBポートが三つも同じような物で塞がっていました。

Unifyingレシーバは今回Bluetooth4で置き換えられたのでお役御免。

先日寝そべり打ち用に買ったワイヤレスキーボードがLogicool製だったのですがUnifyingでもBluetoothでもないという。これはどうしようも無いかな……。打鍵感とコンパクトさと軽さで選んだので代わりはなかなか見つからなそう。

2018-03-08

さくらのレンタルサーバにGitWebを入れてスマホ対応とハイライト

さくらインターネットのレンタルサーバにGitWebを入れた。GitWebはいろいろパッとしないけれどレンタルサーバに入れるにはちょうど良いだろうと思ったので。

いや、実は大分前に入れていたのだけど使いづらいのであまり使っていなかった。

使いづらい点:

  • 見た目がパッとしない上にスマホ縦持ちだとかなり見づらい(画面が切り替わるたびにいちいちズーム調整したりスクロールしたりしながら見なければならない)
  • ソースコードのハイライトを有効にしていない

というわけで、入れ直してそのあたりを改善してみた。

gitのインストール

gitのインストール。基本的に最新のソースコードをダウンロードして展開、 gmakegmake install する。その際 gmake prefix=/gitインストール先 install とインストール先を指定する。(参考:さくらインターネットのレンタルサーバーへGitをソースコードからインストールする手順 | WPlogs)

gitwebの配置

gitwebは gitインストール先share/gitweb 以下にある。とりあえずコピーしてhttpサーバが見えるところに配置した。

  • /gitweb置き場/gitweb.cgi
  • /gitweb置き場/static/*

gitへのパスはビルドした時に gitweb.cgi に埋め込まれている。

gitwebの設定

/gitweb置き場/gitweb_config.perl を作る。

# 全gitリポジトリの置き場所
our $projectroot = "/gitリポジトリ置き場";
# プロジェクト一覧のデフォルトの表示順。最近変更した物優先
our $default_projects_order = "age";
# プロジェクトの所有者を非表示
our $omit_owner=1;
# UTF-8ではない場合のエンコーディング
our $fallback_encoding = 'cp932';
# サーバに /etc/mime.types が無いので作って指定(必要なら)
#our $mimetypes_file = "/gitweb置き場/mime.types";

# 見た目のカスタマイズ。モバイルデバイス(スマホ)対応
push @stylesheets, "gitweb-site.css";
our $site_html_head_string = '<meta name="viewport" content="width=device-width,initial-scale=1.0" />';

# ソースコードハイライト
$highlight_bin = "/highlightインストール先/bin/highlight";
$feature{'highlight'}{'default'} = [1];
push @stylesheets, "highlight.css"; #highlight --print-style -s <stylename>

gitwebのテーマ?……失敗

モバイルデバイス対応

スマホ(縦)でもそこそこ見られるようにcssを調整する。

/gitweb置き場/gitweb_config.perl に次の文を追加。

our $site_html_head_string = '<meta name="viewport" content="width=device-width,initial-scale=1.0" />';
push @stylesheets, "gitweb-site.css";

/gitweb置き場/gitweb-site.css を次のように作成。

/* page header,body,footer height */
/* (レイアウトが崩れるので) */
div.page_header {
    height: auto;
}
div.page_body {
    overflow: scroll;
}
div.page_footer {
    height: auto;
    overflow: auto;
}

/* search box width */
/* サーチボックスの幅が広すぎ */
input {
    max-width: 30%;
}

/* table vertical align */
/* (狭い画面幅だと文字の折り返しでセルの高さが高くなりがち。
   ファイル名やプロジェクト名部分など、中央に合わせた方が見た目が良い) */
td {
    vertical-align: middle;
}
table.object_header > tr > td {
    vertical-align: top;
}

/* narrow screen device */
/* (幅か狭いデバイス用の設定) */
@media screen and (max-width:480px){
    body { margin: 0; }
    td { word-wrap: break-word; }
    table { padding-left: 1px; padding-right: 1px;}
    /* source code */
    /* (ソースの文字を小さくする) */
    td.pre, div.pre, div.diff {
        font-size: 8px;
    }
    /* file list */
    /* (ファイル一覧のモード列とサイズ列を消す) */
    td.mode { display: none; font-size: 0; width: 0; padding: 0;}
    td.size { display: none; font-size: 0; width: 0; padding: 0;}
    /* project list */
    /* (プロジェクトリストの幅を画面に合わせ、description列を消し、
        その他の列の幅を指定する) */
    table.project_list {
        display: fixed;
        width: 100%;
    }
    table.project_list > tr {
        width: 100%;
    }
    table.project_list > tr > td:nth-child(1) {
        max-width: 150px;
    }
    table.project_list > tr > th:nth-child(2){display:none; width:0; padding:0;}
    table.project_list > tr > td:nth-child(2){display:none; width:0; padding:0;}
    table.project_list > tr > td:nth-child(3) { width: 4em;}
    table.project_list > tr > td:nth-child(4) { width: 6.5em;}
    /* shortlog */
    /* (shortlogのレイアウトを横に幅を取らないように) */
    div.title_text {
        padding: 4px;
    }
    div.log_link {
        float: none;
    }
    div.log_body {
        padding: 4px;
    }
    /* (shortlogテーブルの幅を画面に合わせて列の幅を調整) */
    table.shortlog {
        table-layout: fixed;
        width: 100%;
    }
    table.shortlog > tr{
        width: 100%;
    }
    table.shortlog > tr > td:nth-child(1) {width: 4em;}
    table.shortlog > tr > td:nth-child(2) {width: 20%;}
    table.shortlog > tr > td:nth-child(4) {width: 6.5em;}
    /* log */
    /* (logのコミット経過時間とコミットログとの間に改行を挟む。
        横に長くならないように) */
    div.header > a.title > span.age {
        width: 100%;
    }
    /* tags */
    /* (タグ一覧のテーブル幅を画面に合わせ、列の幅を調整) */
    table.tags {
        table-layout: fixed;
        width: 100%;
    }
    table.tags > tr{
        width: 100%;
    }
    table.tags > tr > td:nth-child(1) {width: 4em;}
    table.tags > tr > td:nth-child(4) {width: 2.5em;}
    table.tags > tr > td:nth-child(5) {width: 5em;}
    /* object header */
    /* (gitオブジェクトヘッダーテーブルの幅を画面に合わせ、列の幅を調整)*/
    table.object_header {
        table-layout: fixed;
        width: 100%;
    }
    table.object_header > tr {
        width: 100%;
    }
    table.object_header > tr > td:nth-child(1) {width: 4em;}
    table.object_header > tr > td:nth-child(3) {width: 5em;}
    /* history */
    /* (履歴一覧テーブルの幅を画面に合わせ、列の幅を調整)*/
    table.history {
        table-layout: fixed;
        width: 100%;
    }
    table.history > tr {
        width: 100%;
    }
    table.history > tr > td:nth-child(1) {width: 4em;}
    table.history > tr > td:nth-child(2) {width: 4em;}
    table.history > tr > td:nth-child(4) {width: 6.5em;}
}

/* link buttons */
/* (リンクの見た目をボタンにする) */
td.link > a,
div.page_nav > a,
div.log_link > a,
td.selflink > a {
    display: inline-block;
    background: #ffffff;
    padding: 2px;
    margin: 1px 1px;
    font-weight: bold;
    font-size: 11px;
    color: black;
    text-decoration: none;
    border-radius: 3px;
    border: 1px solid #e0e0e0;
}
td.link > a:visited,
div.page_nav > a:visited,
div.log_link > a:visited,
td.selflink > a:visited {
    color: black;
}

/* small buttons */
div.log_link > a {
    font-size: 70%;
}

/* log */
/* (ログのボタンの位置を調整) */
div.log_link {
    margin-top: -6px;
    padding: 0 0 4px 0;
    width: 150px;
}

/* expand anchor clickable area */
/* (ファイル名やプロジェクト名のリンクを押しやすくする) */
table.tree > tr > td.list
{
    padding: 0;
}
table.tree > tr > td.list > a,
table.project_list > tr > td > a.list
{
    display: block;
    padding: 0.4em 1em;
}

ボタンの間の区切り線(|)が邪魔なので取り除くために gitweb.cgi を修正する。CSSやJavaScriptでやるのは大変なのでCGIを直接書き換える。 gitweb.cgi 内の " | "' | ' の部分を $linksep に置き換え、変数 our $linksep = ""; を頭の方で定義しておく。 ただし、run_highlighterのところの " | " は置き換えてはダメだと思う。

一部のソースがダウンロードされてしまう問題(mime typeの調整)

一部のソースコードで blob を押しても表示されずダウンロードしてしまうので、見知らぬファイルは基本 text/plain として扱うものとする。

gitweb.cgisub blob_mimetype { 内を次のように変更。

        } else {
-               return 'application/octet-stream';
+               #return 'application/octet-stream';
+               return 'text/plain';
        }
 }

困る場合もあるかもしれないが、いちいち mime.types を追加していられないし Makefile のように拡張子が無い場合もある。

ソースコードのハイライト

ハイライトには André Simonhighlight を使用する。

ただし、さくらのレンタルサーバではg++のバージョンにより最新版はビルド出来なかった。試行錯誤の末、最終的に少し古いバージョンをビルドして済ませた。

Luaのインストール

highlightはLuaをライブラリとして使用するので、先にビルドする。

wget https://www.lua.org/ftp/lua-5.3.4.tar.gz
tar xf lua-5.3.4.tar.gz
cd lua-5.3.4
gmake freebsd
gmake install INSTALL_TOP=/luaインストール先

続いてhighlightのインストール……失敗

wget http://www.andre-simon.de/zip/highlight-3.42.tar.bz2
tar xf highlight-3.42.tar.bz2
cd highlight-3.42
gmake PREFIX=/highlightインストール先

エラー。 g++のオプションに -std=c++11 がついている。一部のソースコードでC++11の機能を使用しているので、対応コンパイラでないとビルド出来ない。 さくらのサーバに入ってるのはg++ 4.2.1(20070831)なのでc++11はおろか c++0xオプションすら使えない。 unique_ptrを使っている部分はauto_ptrで済むけれど、union内にstd::string入れているのはよく調査しないと無理。 最新のg++をインストールするのはさすがに無茶。

パッケージを利用出来ないか……失敗

ユーザーローカルなパッケージシステムを使う試みもあったようだ。

さくらのレンタルサーバ(スタンダード)でportsとpkgngを使って超簡単インストールツールを作ってみた - Qiita

sh -c 'bash -c "$(curl -fsSL https://raw.githubusercontent.com/bellflower2015/pspkg/master/setup.bash)"'

.cshrcに環境変数を設定するコードをセットして少し試してみる。

pspkg --search vim
Unknown modifier 't'

"/home/***/.pspkg/ports/Mk/bsd.port.mk", line 1043: Unknown directive
Unknown modifier 't'

Variable .CURDIR is recursive.
"/home/***/.pspkg/ports/Mk/bsd.port.subdir.mk", line 117: warning: "make -V _JAVA_VERSION_LIST_REGEXP USE_JAVA=1 -f /home/***/.pspkg/ports/Mk/bsd.port.mk" returned non-zero status
"/home/***/.pspkg/ports/Mk/bsd.port.mk", line 1043: Unknown directive
Unknown modifier 't'
...

うーん、エラー。makeがらみで動かなくなってるみたい。.pspkgのサイズも1GB以上ある。諦める。

highlightの古いバージョンを試す

いつからC++11前提になっているのか。

次のコミットからgcc4.7に移行し、C++11オプションが入った。

その直前のコミットでauto_ptrがunique_ptrへ置き換わっている。

となるとその直前のコミットか?

このバージョンならc++11オプションもunique_ptrもunion内std::stringも使っていない。

というわけで、 1fd00c2 のコミットでビルド。

git clone https://github.com/andre-simon/highlight.git
cd highlight
git checkout --forced 1fd00c2
cd highlight
gmake PREFIX=/highlightインストール先 conf_dir=/highlightインストール先/etc/highlight/ LUA_CFLAGS="-I/luaインストール先/include -I/boost展開先"  LUA_LIBS=/luaインストール先/lib/liblua.a LDFLAGS=
gmake PREFIX=/highlightインストール先 conf_dir=/highlightインストール先/etc/highlight/ LUA_CFLAGS="-I/luaインストール先/include -I/boost展開先"  LUA_LIBS=/luaインストール先/lib/liblua.a LDFLAGS= install

※boostは昔サーバに入れておいたboost_1_39_0を使った。xpressiveを使っているっぽい。インクルードファイルだけ必要なので展開して適当なところに置くだけで良い。

オプション 説明
PREFIX= highlightのインストール先
conf_dir= デフォルトは/etc/highlight固定なので明示的に指定
LUA_CFLAGS= luaの(ついでにboostの)インクルードパスを入れる
LUA_LIBS= luaのライブラリ(.a)ファイル
LDFLAGS= -ldl の指定がエラーになるので

※一部のパス(データ等へのパス)はプログラム内に埋め込まれるので注意。

テーマを選ぶ。

  • /highlightインストール先/bin/highlight -w でテーマ名一覧が出る。
  • 一部のテーマは highlight Theme-Samples にサンプルがある。

Fine-Blueにする。

gitwebのディレクトリに行き、次のコマンドを実行すると highlight.css が生成される。

/highlightインストール先/bin/highlight --print-style -s fine_blue

設定ファイルに次を追加。

$highlight_bin = "/highlightインストール先/bin/highlight";
$feature{'highlight'}{'default'} = [1];
push @stylesheets, "highlight.css";
2018-03-04

分割式泥よけの修理 Honjo H27-700N.Smooth(ジョイントタイプ)

先日後輪に木の枝を巻き込んで派手にひしゃげてしまって以来後ろの泥よけを取り外していたのですが、雨上がりなど路面が濡れていると背中やお尻に水で線が……。

というわけで泥よけを何とかしようと思ったのですが、私の自転車(スポルティーフ)についている泥よけはツーリング車にマッチするHonjoの泥よけ(フェンダー、マッドガード)。700C、細身のタイヤ用、亀甲加工ではないタイプ。これがなかなか売っているところが限られる代物なのですが、インターネットで検索して売っていそうな実店舗へ電話。在庫ありとのことでお店へ出向いて買ってきました。

この Honjo の H27 は通常タイプとジョイントタイプ(分割式泥よけ用)があります。分割式泥よけというのは輪行のために後輪側の泥よけが二つに分割出来るようになるものです。 私の自転車は元々買ったときはH27のジョイントタイプがついていて、数年乗った後にジョイント部分が壊れてお店に持って行ったところ、ジョイントタイプがないので通常タイプを切断して自分で加工して作ってくれと言われたという経緯があります。悪戦苦闘の末、最終的にステンレス製のジョイントを自作するに至るのですが、それはまた別の話。 なので通常タイプがあればいいやと思っていたのですが、ダメ元で聞いてみたところ分割式もありました。

購入したジョイントタイプの後ろ側をすでに車体についている前側へ接続してみるとピッタリ! 自作のなんちゃってジョイントとは比べものになりません。さすが本物です。

2018-03-04-honjo-h27-700n-joint-01.jpg 2018-03-04-honjo-h27-700n-joint-02.jpg 2018-03-04-honjo-h27-700n-joint-03.jpg 2018-03-04-honjo-h27-700n-joint-04.jpg 2018-03-04-honjo-h27-700n-joint-05.jpg 2018-03-04-honjo-h27-700n-joint-06.jpg 2018-03-04-honjo-h27-700n-joint-07.jpg 2018-03-04-honjo-h27-700n-joint-08.jpg 2018-03-04-honjo-h27-700n-joint-09.jpg 2018-03-04-honjo-h27-700n-joint-10.jpg 2018-03-04-honjo-h27-700n-joint-11.jpg 2018-03-04-honjo-h27-700n-joint-12.jpg 2018-03-04-honjo-h27-700n-joint-13.jpg 2018-03-04-honjo-h27-700n-joint-14.jpg 2018-03-04-honjo-h27-700n-joint-15.jpg

2018-01-22

2018冬の新番組

今期は今のところゆるキャン△ラーメン大好き小泉さんあたりがお気に入りです。宇宙よりも遠い場所も目を引きましたが今後の展開次第でしょうか。

1話印象 開始日時 チャネル タイトル
01/01(月) 20:00~ TOKYO MX アイドリッシュセブン
○+ 01/02(火) 23:00~ TOKYO MX 宇宙よりも遠い場所
01/04(木) 17:59~ TOKYO MX みっちりねこ(※月~金の帯放送)
○+ 01/04(木) 22:00~ TOKYO MX ラーメン大好き小泉さん
01/04(木) 23:30~ TOKYO MX ゆるキャン△
01/05(金) 21:54~ TOKYO MX 働くお兄さん!
01/05(金) 24:00~ TOKYO MX グランクレスト戦記
× 01/05(金) 25:05~ TOKYO MX 刀使ノ巫女
01/05(金) ~ Netflix DEVILMAN crybaby
01/06(土) 06:30~ TBS系 七つの大罪 戒めの復活
01/06(土) 07:00~ TBS系 新幹線変形ロボ シンカリオン THE ANIMATION
01/06(土) 09:30~ テレビ東京系 ポチっと発明 ピカちんキット
× 01/06(土) 22:00~ TOKYO MX サンリオ男子
× 01/06(土) 24:30~ TOKYO MX スロウスタート
× 01/06(土) 25:00~ TOKYO MX ポプテピピック
01/07(日) 07:30~ BSプレミアム カードキャプターさくら クリアカード編
01/07(日) 22:00~ TOKYO MX 伊藤潤二『コレクション』
× 01/07(日) 23:00~ TOKYO MX 学園ベビーシッターズ
01/07(日) 23:30~ TOKYO MX citrus(シトラス)
01/07(日) 24:00~ TOKYO MX 続 刀剣乱舞-花丸- (第2期)
01/07(日) 24:30~ TOKYO MX 刻刻
× 01/07(日) 25:00~ TOKYO MX 25歳の女子高生
01/07(日) 25:35~ TOKYO MX 三ツ星カラーズ
01/07(日) 25:35~ テレビ東京 銀魂 銀ノ魂篇
× 01/08(月) 23:00~ TOKYO MX からかい上手の高木さん
× 01/08(月) 24:00~ TOKYO MX バジリスク ~桜花忍法帖~
01/08(月) 24:30~ TOKYO MX りゅうおうのおしごと!
× 01/08(月) 25:05~ TOKYO MX まめねこ
× 01/08(月) 25:10~ TOKYO MX gdメン
01/08(月) 26:05~ テレビ東京 弱虫ペダル -GLORY LINE- (第4期)
01/09(火) 12:00~ dTV d松さん(仮)※おそ松さん オリジナルショートアニメ
01/09(火) 17:20~ NHK Eテレ うちのウッチョパス
01/09(火) 21:54~ TOKYO MX 怪獣娘~ウルトラ怪獣擬人化計画~ 第2期
01/09(火) 24:30~ TOKYO MX オーバーロードⅡ
01/09(火) 25:40~ TOKYO MX 一人之下2 the outcast 羅天大ショウ篇
01/09(火) 25:59~ 日本テレビ ちはやふる 秀歌撰
01/10(水) 22:30~ TOKYO MX ダメプリ ANIME CARAVAN
01/10(水) 23:30~ とちぎテレビ サクラノチカイ ~まろに☆え~る 東の飛鳥下野市をえーる!~
01/10(水) 24:00~ TOKYO MX ヴァイオレット・エヴァーガーデン
× 01/11(木) 22:30~ TOKYO MX メルヘン・メドヘン
× 01/11(木) 24:00~ TOKYO MX デスマーチからはじまる異世界狂想曲
01/11(木) 24:55~ フジテレビ 恋は雨上がりのように
01/11(木) 25:58~ TBS ミイラの飼い方
01/11(木) 26:28~ TBS だがしかし2
01/11(木) 26:43~ TBS たくのみ。
× 01/12(金) 22:00~ TOKYO MX 覇穹 封神演義
01/12(金) 22:30~ TOKYO MX ハクメイとミコチ
01/12(金) 24:30~ TOKYO MX 博多豚骨ラーメンズ
01/12(金) 25:55~ TBS BEATLESS
01/12(金) 26:40~ TBS キリングバイツ
01/13(土) 21:00~ TOKYO MX 銀の墓守り(ガーディアン) 第2期
× 01/13(土) 23:30~ TOKYO MX ダーリン・イン・ザ・フランキス
01/16(火) 25:35~ テレビ東京 斉木楠雄のΨ難 第2期
01/20(土) 他配信サイト多数 トミカハイパーレスキュー ドライブヘッド~機動救急警察~ 新シリーズ
01/27(土) 24:00~ TOKYO MX Fate EXTRA Last Encore
01/29(月) ~ YouTube 七つの美徳

ゆるキャン△良いですね。山に行きたくなっちゃいます。まぁ、冬のキャンプ場で本を読みたいとは思いませんけど。 中学生の頃にテントと寝袋を自転車に積んで友だちと出かけたことがあります。そのうち一回は目的地のキャンプ場で私が怪我をして救急車で麓の病院へ送られてあえなく中断したわけですが、まぁ、それは良いとして……。 大人になってからは一緒に行ってくれる人も居ませんし何より体力も気力もありません。 最近は公共交通機関で気軽に行ける山に登ったり、せいぜい山小屋に泊まるくらいです。 そういう所に行くとキャンプしている人も見かけるので自分もやってみたいなーと思います。 でもテント泊の登山なんてやったことありませんし、重い荷物を持って長時間歩けるものなのでしょうか。 場所によってはテントの貸し出しをやっているらしいですが。 涸沢カールなんて一度行ってみたいです。

2017-12-26

新しいtableのスタイル

なんとなく表(table)のCSSを変えてみた。

ポイントはセルの角、つまり縦線と横線が交差する点の色をどう制御するか。

表はHTML要素的には table > tbody > tr > td の順に重なっているわけだけど、基本的に手前である子孫要素(tdに近い側)が優先される。なので、セル(td)の区切り線の色を指定すると、それは表全体(table)の境界線よりも優先されてしまう。その結果表全体の境界線にセルの区切り線が食い込む形になってしまう。

そこで重要なのが境界線の指定が重なったときに何が優先されるかというルール。親要素であっても線の幅が太い方が優先される。同じ太さならスタイル(破線とか二重線とか)によって優先度が決められている。特に二重線(border-style: double)は使える。solidよりもdoubleのほうが優先されるからだ。その上二重線といっても1pxの太さならsolidと見た目は変わらない。

外側(親、祖先)の要素の太さやスタイルをより優先度が高い物に変えることによって、セル区切りの色が外にはみ出さないように出来る。

/* table style */
table{ border: 1px double #4472c4;}
  /* striped background color */
thead{ border: none; background-color: #4472c4; color: #ffffff;}
tbody>tr:nth-child(odd){background-color: #d9e1f2;}
  /* vertical line between colgroups */
colgroup{ border: none;}
colgroup+colgroup{ border: none; border-left: 2px double #81a0d7;}
  /* horizontal line between tbodys */
tbody{border: none;}
tbody+tbody { border-top: 2px double #81a0d7;}
  /* vertical line between columns  */
tr:nth-child(even) >td+td {border-left: 1px solid #d9e1f2;}
tr:nth-child(odd)>td+td, th+th {border-left: 1px solid #fff;}

テスト

0 1 2 3 4
a b c d e
f g h i j
k l m n o

ヘッダー無し

項目1 項目2
項目3 項目4

ヘッダー無し

項目1 項目2

ヘッダー無し

項目1 項目2
項目3 項目4
項目3 項目4

良くある奴

品名 価格
りんご 100
みかん 80
みかん 80
  180

列グループ

場所 最低 最高
東京 晴れ 晴れ 曇り -1 9
大阪 晴れ 晴れ 0 12
大阪 晴れ 晴れ 0 12
大阪 晴れ 晴れ 0 12
大阪 晴れ 晴れ 0 12
大阪 晴れ 晴れ 0 12
大阪 晴れ 晴れ 0 12
2017-12-26

2017秋最終回

最近は全12話が多いから終わるのが早いね。

今期はどんどん切った。ここまで切ったのは初めてじゃないだろうか?

最後まで見たのは次:

不愉快な要素が鼻につくものは面白いところがあっても切りがちだと思う。 逆にそれほど面白くなくてもあまり期待せず気楽にながら見できるようなものは残りがち。

2017-12-26

2017年末ゲームアンインストール祭り

城とドラゴン、どうぶつの森ポケットキャンプ、ソリティア、Pokemon GO、駅メモをアンインストールした。

それほど面白くなくなっていた割に、合わせると結構な時間を消費していたからだ。

城とドラゴン。人に勧められて始めたのだけど、ずいぶん長いことプレイした。農場ゲー的育成要素と単純・短時間な対戦要素。チケット制。適度な緩さが良かったのだが、育成が進んでレベルが上がるにつれトロフィー戦はおろかリーグ戦も勝てなくなった。どうやら育成に失敗したらしい。次々と出る新キャラが古いキャラを相対的に弱くしていく。ついて行くには新キャラを手に入れて育成し続けなければならない。そういうキリのなさが見えてしまうともうダメだ。キャラクター間の相性ももはや全く覚えられない。チケットも最初は少なくて長時間遊べないのが逆に良かったのだけど、最近は対戦形式が増えたせいもあって全く消費しきれなくなっていた。

どうぶつの森ポケットキャンプ。プレイしたのは1ヶ月くらいだろうか。緩いように見えて案外時間を消費させられる。画面切り替え効果やローディングの時間はもとより、動物たちとの会話が単調で面白くなく、単なる時間の浪費でしかない。プレゼントを渡したときに時々発生するちょっとしたイベントはもはや罰ゲームでしかない。「バーベキューやるけど食っていくだろ?」いやいやいかねーよ!! はやく終わってくれよ。日々の作業が全部一括で終わるボタンがあれば良かったのに。

ソリティア。Androidのそのものズバリなゲームなのだが、ずいぶん長くプレイしてしまった。デイリーチャレンジがあるのが良かったのだが、通知が機能せずに逃してしまうことが多くなっていた。やり逃しても過去に遡ってプレイできるのだが、カレンダーに着く王冠マークが微妙に変わってしまう。それ以外に何の罰もないのだが何か不愉快だ。ゲーム自体もソリティアなので、何も考えずに適当にポチポチ押してクリアできるかどうか何回か試すだけである。まぁ、もういいよね。

Pokemon GO。もうずっとプレイしてなかった。

駅メモ。最初全く面白さが分からなかった。何回か旅行の際に遊んでみるうちにある日突然面白くなった。ローカル線主体の旅行でやるのが一番良いと思う。バスはずっと同じ駅しか入らないし新幹線や特急はずっと画面を見てないと通過駅を逃してしまうのでつらい。キャラクターの育成も最初全く分からなかったが、どうやると稼げるのか分かるとちょっと面白くなった。溜めていた無料ライセンス(1日のチェックイン回数が伸びるアイテム)が無くなってきたので最近はやらなくなっていた。課金してまでやりたいほどではない。路線コンプリートも一見魅力的だが、別にいつ無くなるか分からないようなアプリでやらなくていいじゃない。

2017-12-21 ,

org-mode スプレッドシート(表計算)での参照の書き方まとめ

org-modeで表計算が出来るということはよくご存じかと思いますが、細かいところがよく分からないという方も多いのではないでしょうか。特にフィールド(いわゆるセル)を式内から参照する書き方は広く使われている表計算ソフトとは異なるのでなかなか覚えられない、普段使うところだけ覚えてるということも多いと思います。なので今回はorg-modeのスプレッドシート機能の内、「参照」に的を絞ってまとめてみました。

参考: Org Mode マニュアル 3.5.1 参照 References (The Org Manual)

表内のフィールドや範囲等を参照する方法

フィールド参照

意味
@0 現在の行
$0 現在の列
@1 1行目
$2 2列目
@1$2 1行目2列目
@-1 直上の行
$-1 左隣の列
@-1$+3 現在のフィールドから上に1行、右に3列
@< 最初の行
@> 最後の行
$< 最初の列
$> 最後の列
@>$2 最終行の2列目
@>$> 最終行の最終列(右下)
@<<< 最初の行から下へ数えて3行目(@3)
@>> 最後の行から上へ数えて2行目
$<< 最初の列から右へ数えて2列目($2)
$>>> 最後の列から左へ数えて3列目
@I 一つ目の水平線
@-I 現在の行から上にある最初の水平線
@+II 現在の行から下にある2番目の水平線
@III+2 三つ目の水平線から下にある二番目の行
@III-1 三つ目の水平線の直上の行
  • @行$列
  • 0は現在
  • 符号が付くと相対指定
  • <が先頭で>が末尾
  • @Iは水平線
  • < > I は複数連続で書くとその個数分だけズレる

範囲参照

意味
@2$3..@3$5 「2行目の3列目」から「3行目の5列目」までの矩形範囲(6フィールド)
@2$1..@>>$> 「2行目の1列目」から「下から2行目の右端列」までの矩形範囲
@I..@II 一つ目の水平線から二つ目の水平線までにある行、現在の列

始点.. 終点 の形で 始点 から 終点 までの 矩形範囲 を指す。 始点終点 はそれぞれフィールドへの参照。

式の右辺に書いた場合範囲内の値を含む ベクトル になる。(例えば @1$1..@2$2 なら4要素のベクトルになる)

式の左辺に書いた場合計算で書き換える対象を表す。(@1=1行目の全列の式, $1=1列目の全行の式, @1$1..@2$2=左上2x2(4マス)の式)

※式の 左辺 に範囲参照を書く時 始点 には水平線参照(@I 等)は書けない(ダメな例: @I+1$>..@II-1$>=foo)。 終点 にはなぜか書ける(書ける例: @2$>..@II-1$>=foo)。(参考: 水平線参照を左辺には書けないのはなぜ?)

名前参照

意味
$name nameという名前の何かを参照

参照できる物:

リモート参照

意味
remote(table1, @>$>) table1という名前の表の最終行最終列(右下)にあるフィールドを参照。

#+NAME: 名前 を表の直前に書くとその表を名前で参照できる。

フィールド座標

意味
@# 現在の(計算対象の)行番号に展開される
$# 現在の(計算対象の)列番号に展開される
@@# @ ( @# ) と解釈。つまり@現在の行番号
$$# $ ( $# ) と解釈。つまり$現在の列番号
@$# @ ( $# ) と解釈。つまり@現在の列番号
$@# $ ( @# ) と解釈。つまり$現在の行番号

例1:列名と範囲参照

#+NAME: purchase2016
|   | 品名   | 単価 |     個数 |    計 |
| ! | item   | unit | quantity | total |
|---+--------+------+----------+-------|
| # | りんご |  128 |        5 |   640 |
| # | みかん |  200 |        3 |   600 |
|---+--------+------+----------+-------|
| # |        |      |          |  1240 |
#+TBLFM: @3$>..@II$>=$unit*$quantity::@>$>=vsum(@I..@II)

! の行は列名となる。列名は $unit*$quantity のように使える。 $3*$4 より幾分分かりやすい。 # の行は自動再計算(フィールド入力後TABやRETで全体を再計算する)対象となる。その他にも同じような方法でフィールド名やパラメータを定義する機能がある。(参考: Org Mode マニュアル 3.5.8 一歩進んだ機能 Advanced features (The Org Manual))

@3$>..@II$>=$unit*$quantity

式の左辺にある @3$>..@II$> は「3行目の最後の列」から「2本目の水平線までの行の最後の列」までの範囲を表す。つまり右端の小計を入れる部分(右下の合計部分を除く)を指す。水平線参照だけを使って @I$>..@II$> のようには(左辺には)書けない(エラー:"Can't assign to hline relative reference")。列名を使って @3$total..@II$total のようにも書けなかった。 @<<<$>..@>>$> のようには書ける。

@>$>=vsum(@I..@II)

@I..@II は現在の列の一つ目の水平線から二つ目の水平線の間の範囲を表す。範囲内の値を要素とするベクトルが作られ、vsumでその合計が計算される。結果は @>$> つまり一番右下のフィールドに格納する。

今回は代入先の範囲が重ならないように厳密に指定して書いたが、 #+TBLFM: $>=$unit*$quantity::@>$>=vsum(@I..@II) のように書いても構わない。 $> は右端の全てのフィールド(ヘッダー以外)を意味するので右下( @>$> )と重なってしまうように見えるが、列指定よりフィールド指定が優先されることが決まっている。(参考: Org Mode マニュアル 3.5.5 列の数式 Column formulas (The Org Manual))

例2:リモート参照

| 税抜き | 税率 | 税込み |
|--------+------+--------|
|   1240 | 1.05 |   1302 |
|   1240 | 1.08 |   1339 |
#+TBLFM: $1=remote(purchase2016,@>$>)::$3=floor($1*$2)

remote(表名, 参照) で別表の値を取り出せる。

この例ではpurchase2016という名前の表(例1)の一番右下のフィールド(@>$>)を1列目($1)へ代入している。

例3: リモート参照(表の名前を計算時に決める)

purchase2016とpurchase2017の二つの表があるとき、この二つの表の合計部分(一番右下のフィールド)を別の表から参照したいとする。

#+NAME: purchase2016
|   | 品名   | 単価 |     個数 |    計 |
| ! | item   | unit | quantity | total |
|---+--------+------+----------+-------|
| # | りんご |  128 |        5 |   640 |
| # | みかん |  200 |        3 |   600 |
|---+--------+------+----------+-------|
| # |        |      |          |  1240 |
#+TBLFM: @3$>..@II$>=$unit*$quantity::@>$>=vsum(@I..@II)

#+NAME: purchase2017
|   | 品名   | 単価 |     個数 |    計 |
| ! | item   | unit | quantity | total |
|---+--------+------+----------+-------|
| # | りんご |  128 |        3 |   384 |
| # | みかん |  200 |        8 |  1600 |
|---+--------+------+----------+-------|
|   |        |      |          |  1984 |
#+TBLFM: @3$>..@II$>=$unit*$quantity::@5$5=vsum(@I..II)

列に表名を入れれば次のように書ける。

|   表名       | 金額 |
|--------------+------|
| purchase2016 | 1240 |
| purchase2017 | 1984 |
#+TBLFM: @<<$>..@>$>=remote($1,@>$>)

remoteの第一引数である $1 は先に展開されるのに対して第二引数である @>$> は展開されない(1984に置き換わらない)のが興味深い。

表名を表の中に書くのはかっこ悪いので年から表名文字列を生成してリモート参照したいなら次のようにする。

|   年 | 金額 |
|------+------|
| 2016 | 1240 |
| 2017 | 1984 |
#+TBLFM: @<<$>..@>$>='(org-table-get-remote-range (concat "purchase" $1) (string ?@ ?> ?$ ?>))

remote(表名, 参照) の書き方では文字列の結合等はできない(リモート参照の展開タイミング的に)ので、Elisp式を使っている。

(string ?@ ?> ?$ ?>) の部分は "@>$>" とは書けない。展開のタイミング的に。

(参考: emacs - Org mode spreadsheet programmatic remote references - Stack Overflow)

例4: 結果の行内への埋め込み

行内コードブロックを使えば表の中の値を文書中の行内に埋め込める。

#+NAME: ex4
| 品名   | 金額 |
|--------+------|
| りんご |  123 |
| みかん |   89 |
|--------+------|
|        |  212 |
#+TBLFM: @>$>=vsum(@I..@II)

合計は src_emacs-lisp[:results raw]{(org-table-get-remote-range "ex4" "@>$>")} 円です。

参考: Org Mode: Using table formula outside of a table? - Emacs Stack Exchange

例5: 連番

| 番号 | 番号4桁 |
|------+---------|
|    0 |    0000 |
|    1 |    0001 |
|    2 |    0002 |
|    3 |    0003 |
#+TBLFM: $1=@#-2::$2='(format "%04d" (- @# 2))

例6: 文字列の参照

基本的にElisp式で行った方が良い。Calcで扱えないこともないが非ASCIIは怪しい?

| 参照する文字列→      | abc                  | りんご                     >
| ↓式                  | ↓結果               | ↓結果                     >
|-----------------------+----------------------+---------------------------->
| @1                    | abc                  | #ERROR                     >
| "@1"                  | [40, 97, 98, 99, 41] | [40, 12426, 12435, 12372, 4>
| string("@1")          | (abc)                | string([40, 12426, 12435, 1>
| '(identity @1)        | abc                  | りんご                     >
| '(format "%sです" @1) | abcです              | りんごです                 >
#+TBLFM: @3$2=@1::@3$3=@1::@4$2="@1"::@4$3="@1"::@5$2=string("@1")::@5$3=string("@1")::@6$2='(identity @1)::@6$3='(identity @1)::@7$2='(format "%sです" @1)::@7$3='(format "%sです" @1)::@8$2=string("$s1")

水平線(hline)参照の謎

水平線参照をフィールド参照として使うとどうなるか

単に @I と書いた場合どこを参照するのか。

|       | 10 |
|-------+----|
|       | 11 |
|       | 12 |
|-------+----|
| ↓式  |    |
| @I-1  | 10 |
| @I    | 11 |
| @I+0  | 11 |
| @I+1  | 11 |
| @I+2  | 12 |
| @II-1 | 12 |
#+TBLFM: @5$2=@I-1::@6$2=@I::@7$2=@I+0::@8$2=@I+1::@9$2=@I+2::@10$2=@II-1

水平線の直下の行を参照する模様。意図した動作かは不明。 @I+1 と書いた方が安心?

水平線参照を左辺には書けないのはなぜ?

範囲参照例1にも書いたが、水平線(hline)への参照(@I 等)は式の左辺に書けない。

例えば次の良くあるような例では、小計を集計するのに「一つ目の水平線から二つ目の水平線までの行、右端列」つまり @I$>..@II$> と左辺に書けると便利である。

|        | 重量 | 個数 | 計 |
|--------+------+------+----|
| みかん |   30 |    2 |    |
| りんご |   50 |    3 |    |
|--------+------+------+----|
|        |      |      |    |
#+TBLFM: @I$>..@II$>=$-2*$-1

しかし実際に書くとエラーになる。

Can't assign to hline relative reference

なぜ書けないのかメーリングリストを"left hline"で検索してみた。

長年未解決で放置中らしい。

リモート参照とフィールド座標の展開規則

例3でも触れたがremoteの第二引数は別表の参照前に展開されないように見える。

しかしマニュアルには次のような例がある。(Field coordinates in formulas)

@3 = 2 * remote(FOO, @1$$#)
Insert the doubled value of each column of row 1 of the table named FOO into row 3 of the current table.

この例の @1$$# はremote()を解決する前に @1$1 , @1$2 , @1$3 のように参照元の列の番号に展開されなければならないはずだ。

#+NAME: remote-ref-tbl1
| 1 |  2 |  3 |  4 |
| 5 |  6 |  7 |  8 |
| 9 | 10 | 11 | 12 |

| 2 | 4 | 6 |
#+TBLFM: @1=2*remote(remote-ref-tbl1, @1$$#)

ちなみに「現在の列」を表したいなら $0 やそもそも列を省略すれば良さそうだが、実際にやると次のようになる。

| 2 | 2 | 2 |
#+TBLFM: @1=2*remote(remote-ref-tbl1, @1$0)

マニュアルにもリモート参照の第二引数は絶対参照か名前参照でなければならないと書いてあるのでこの書き方はできないのだろう。

org-table-eval-formula 関数を見ると、 @# 等のフィールド座標表記はリモート参照よりも前に解決しているようだ。つまり、remoteとその引数の展開は次のような順番になっている。

  1. フィールド座標(@# $#)だけ先に解決(数字へ置き換え)
  2. 第一引数を現在の表上で解決し、得られた名前に従って参照先となる表を見つける
  3. 見つけた表上で1の結果得られた第二引数の参照を解決する

そもそもこの remote(表名, 参照) という表記は関数の計算などではなく文字列の置き換えに過ぎない。なので展開の規則はCalcともElispとも異なる。 実際マニュアルの例にもあるとおりElisp式内でも同じように書ける。

$2 = '(identity remote(FOO, @@#$1))
Copy text or values of each row of column 1 of the table named FOO into column 2 of the current table.