Category Archives: 未分類

2018-11-14

Googleカレンダーのdata-datekeyの謎

Google Calendarで過ぎた日の色を変えるが大分前から動かなくなっているので新しいカレンダーのデザインを調べたのですが、日付のセルに data-datekey という属性が指定されているのに気がつきました。

今日11月14日だと data-datekey="24942" となっています。

最初はどこかの起点から経過日数かと思ったのですが、逆算してみると1950年8月1日??

よく見てみると、月の間や年の間で日数が飛んでいます。ははぁ、これは y*Y+m*M+d みたいな形式だなぁ。

24609 2018-01-01
24927 2018-10-31
24929 2018-11-01
24958 2018-11-30
24961 2018-12-01
24991 2018-12-31
25121 2019-01-01

うーん……2018年1月1日から2019年1月1日が 25121-24609=512 (=2^9)、11月1日から12月1日が 24961-24929=32 (=2^5)。

  • 1年で512
  • 1月で32
  • 1日で1

つまり

(y-1970)*512 + m*32 + d

※(m、dは1から始まる月、日)

ビット演算でやるなら

((y-1970)<<9) | (m<<5) | d

ですね。

2018-11-04

2018秋の新番組

今期はこれはといったものはありませんがそれなりなものはいくつか。

△→○ 09/30(日) 22:30 TOKYO MX DOUBLE DECKER! ダグ&キリル
10/01(月) 22:00 TOKYO MX Thunderbolt Fantasy 東離劍遊紀2
× 10/01(月) 22:30 TOKYO MX あかねさす少女
10/01(月) 24:00 TOKYO MX 転生したらスライムだった件
10/01(月) 25:00 TOKYO MX 宇宙戦艦ティラミスII
× 10/01(月) 26:20 テレビ東京 軒轅剣 蒼き曜
△→× 10/02(火) 17:55 テレビ東京系 爆釣(ばくつり)バーハンター
10/02(火) 25:00 BS11 異世界居酒屋~古都アイテーリアの居酒屋のぶ~
○→△ 10/02(火) 25:00 TOKYO MX 人外さんの嫁
○→× 10/02(火) 25:29 日本テレビ 風が強く吹いている
× 10/03(水) 17:55 テレビ東京系 トロールズ-シング・ダンス・ハグ!-
10/03(水) 22:24 TOKYO MX ほら、耳がみえてるよ!
△→× 10/03(水) 24:00 TOKYO MX ソラとウミのアイダ
10/03(水) 25:05 TOKYO MX RErideD(リライデッド) -刻越えのデリダ--
△→× 10/04(木) 24:00 TOKYO MX ゾンビランドサガ
10/04(木) 25:05 TOKYO MX でびどる! コチンPa!
10/04(木) 25:28 TBS 学園BASARA
× 10/04(木) 25:58 TBS BAKUMATSU ~恋愛幕末カレシ 外伝~
10/05(金) 17:55 テレビ東京系 イナズマイレブン オリオンの刻印
○→× 10/05(金) 22:00 TOKYO MX 火ノ丸相撲
10/05(金) 22:30 BSスカパー グラゼニ シーズン2
△→× 10/05(金) 22:30 TOKYO MX やがて君になる
△→× 10/05(金) 24:00 TOKYO MX 抱かれたい男1位に脅されています。
10/05(金) 24:30 TOKYO MX とある魔術の禁書目録Ⅲ
10/05(金) 25:05 TOKYO MX ジョジョの奇妙な冒険 第5部 -黄金の風-
× 10/05(金) 25:23 テレビ東京 宇宙戦艦ヤマト2202 愛の戦士たち
△→× 10/05(金) 25:25 TBS 寄宿学校のジュリエット
△→× 10/05(金) 25:35 TOKYO MX おこしやす、ちとせちゃん
10/05(金) 25:40 TOKYO MX うちのメイドがウザすぎる!
10/05(金) 25:55 TBS 色づく世界の明日から
10/06(土) GYAO! お酒は夫婦になってから 第14話(未放送話)
△→× 10/06(土) 07:55 TOKYO MX ほしの島のにゃんこ
10/06(土) 09:20 NHK Eテレ ピングー in ザ・シティ
△→× 10/06(土) 17:30 日本テレビ系 逆転裁判 Season2 その「真実」異議あり!
△→× 10/06(土) 17:35 NHK Eテレ ラディアン
10/06(土) 22:00 TOKYO MX となりの吸血鬼さん
10/06(土) 23:30 TOKYO MX 青春ブタ野郎はバニーガール先輩の夢を見ない
10/06(土) 24:00 TOKYO MX ソードアート・オンライン -アリシゼーション- (第3期)
△→× 10/06(土) 25:00 GYAO! その時、カノジョは
10/06(土) 25:00 TOKYO MX SSSS.GRIDMAN
10/06(土) 25:30 TOKYO MX ゴブリンスレイヤー
10/07(日) 06:54 テレビ東京 愛玩怪獣
10/07(日) 07:00 テレビ東京系 FAIRY TAIL(フェアリーテイル) ファイナルシリーズ
△→× 10/07(日) 22:00 TOKYO MX ユリシーズ ジャンヌ・ダルクと錬金の騎士
10/07(日) 23:30 TOKYO MX RELEASE THE SPYCE
× 10/07(日) 24:00 TOKYO MX アニマエール!
10/07(日) 25:00 TOKYO MX 終電後、カプセルホテルで、上司に微熱伝わる夜。
10/07(日) 25:35 TOKYO MX ガイコツ書店員 本田さん
10/07(日) 25:50 TOKYO MX ひもてはうす
10/08(月) 23:00 TOKYO MX ゴールデンカムイ 第二期
10/08(月) 24:30 TOKYO MX 蒼天の拳 REGENESIS 第2期
○→△ 10/08(月) 25:10 TOKYO MX 狐狸之声
10/08(月) 25:25 TOKYO MX おとなの防具屋さん
10/08(月) 26:40 Amazon Prime 走り続けてよかったって。
10/09(火) 21:54 TOKYO MX アイドルマスター SideM 理由あってMini!
10/09(火) 23:00 TOKYO MX 東京喰種 トーキョーグール:re (第2期)
△→× 10/09(火) 25:40 TOKYO MX CONCEPTION 俺の子供を産んでくれ!
△→× 10/10(水) 25:35 TOKYO MX 俺が好きなのは妹だけど妹じゃない
10/11(木) 22:30 TOKYO MX からくりサーカス
× 10/11(木) 23:30 TOKYO MX メルクストーリア -無気力少年と瓶の中の少女-
10/12(金) 26:10 TOKYO MX 閃乱カグラ SHINOVI MASTER -東京妖魔篇-(第2期)
10/13(土) 24:30 TOKYO MX ベルゼブブ嬢のお気に召すまま。
10/17(水) 24:55 フジテレビ Ingress
10/21(日) 24:10 NHK総合 ツルネ-風舞高校弓道部-
10/25(木) 22:00 TOKYO MX 叛逆性ミリオンーアーサー
10/26(金) Netflix 悪魔城ドラキュラ(キャッスルヴァニア) 第2シーズン

2~3話時点でのお気に入り:

2018-10-12

水浸けスパゲティ

なんで今までやらなかったんだろう。後悔。

あらかじめ水につけておくというアイデアは以前から聞いたことはありましたが、スパゲティを作る上での問題をこれほど見事に解決出来る方法だとは思っていませんでした。

  • 食べたいときにすぐ食べられる(3分で調理可能)
  • フライパン一つでOK(洗い物少ない)
  • 自然に一手間かけた食べ方ができる(美味しい!)

事前に水につけておきさえすれば食べたいときにすぐに食べられます。 スパゲティってお湯を沸かしてゆであがるまで結構な時間がかかりますからね。 最近は早ゆでタイプもありますが少し高いですし、どのみちお湯が沸くまでの時間はどうしてもかかりますし。 それがこの方法なら食べたいと思ってからフライパン一つですぐに完成します。 長時間浸けっぱなしにしていてもそれほど問題ないみたいです。

洗い物が少ないのも嬉しいですね。水に浸けるための容器はそれほど汚れませんし、あとはフライパンだけ。フライパン一つで火を通してソースも温めて、何ならそのまま食べれば良いので皿も不要。

それでいて美味しい。どんなに手軽でも美味しくなければ続きませんからね。フライパンで調理したパスタは美味しいです。市販ソースの裏によく書いてある「一手間かけた食べ方」はたいてい茹でた後にフライパンを使う方法です。鍋で長時間茹でた上にフライパンまで使うのは面倒ですが、この方法なら最初から使うのはフライパンだけなのでついで感覚で色々出来ます。

このくらいの手軽さなら山(アウトドア)でもできそう。ガスもそれほど使わないはずですし。持ち運び(水入りのジップロック?)はちょっと注意が必要ですが。

2018-10-12 , ,

Org2blogでアイキャッチ画像を設定する

Org2blogでアイキャッチ画像(投稿サムネイル, featured image, post thumbnail)を指定するオプションを追加しました。次のように書けます。

#+TITLE: Org2blogでアイキャッチ画像を設定する
#+POST_THUMBNAIL: ./some-featured-image.jpg

ファイル名が変わっていたらアップロードして再設定します。オプションを空文字列にすればアイキャッチ画像は投稿から取り外されます。ただし、APIからメディアを削除する方法が分からなかったので変わる前の画像はメディアライブラリに残り続けますのでご注意を。

ソースコード全体としては https://github.com/misohena/org2blog の image-fix ブランチで提供しています。

2018-10-11 , ,

Org2blogでサムネイル画像のサイズをリンク毎に個別に設定する

このBlogは Org2blog + WordPress で書かれているわけなんですが、画像を張るときにちょっと気になることがあります。

それは画像のサイズを個別に指定する標準的な方法が無いこと。 org2blog/wp-image-thumbnailsorg2blog/wp-image-thumbnail-size という設定があってそれを使えば全体でサイズを指定出来るのですが、一つの文書の中でこの画像はどうでもいいので小さくしたい、この画像は重要なので大きくしたい、といった個別に指定する方法が用意されていません。

最終的にHTMLでエクスポートされるので、画像(img要素)に対してstyleやwidth属性を設定すれば無理矢理大きさを変えられます。

#+ATTR_HTML: :width 240px
[[file:./a.png]]

しかしこの場合、あくまで表示時に縮小することになるため不必要に大きな画像をダウンロードすることになります。WordPress側ではアップロード時にいくつかの解像度差分を自動的に生成してくれているのに勿体ない話です。

というわけで、作ったのが次のパッチ。

imgのwidth=を見て適切なサイズの画像を選ぶようにしてみました。

ただ、実はこれだけでは不十分で、同じ画像をサイズを変えて何度も使いたい場合にうまくいきません。org2blogは内部で一つのファイル名に対して一つのサムネイルサイズを前提にしているため、最初に指定した画像リンクのサイズが以降使われてしまいます。

それを解決してみたのが次のパッチ(一つ目のパッチを前提にしています)。

これによって同じ文書の中であっても次のような指定が可能になります。

# mediumサイズが使われる
#+ATTR_HTML: :width 200px
[[file:./a.png]]

# largeサイズが使われる
#+ATTR_HTML: :width 640px
[[file:./a.png]]

# org2blog/wp-image-thumbnail-sizeで指定したサイズが使われる
[[file:./a.png]]

ソースコード全体としては https://github.com/misohena/org2blog の image-fix ブランチで提供しています。

https://github.com/misohena/org2blog/commits/image-fix

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