hogashi.*

日記から何から。

Windows+SublimeTextでのTeX環境修繕

 WindowsでSublimeTextのLaTeXToolsなる拡張機能を使ってTeXを書いているけど、いつからかタイプセット周りがうまくいかなくなったのでうまいことする。

tl;dr

 タイプセットとかはBasicBuilderというのが走るようになったっぽいので、前までのTraditionalBuilderに戻す。

状態

 jlisting使って書いたファイルをタイプセットしようとすると、

File ended while ... \lstlistingname ...

とかエラーが出てpdfまで行き着かなくなる。pdfに出ても日本語がでなくなったりする。

対処

 なんだかわからないけど、TraditionalBuilderですり替える。

# ...

# class TraditionalBuilder(PdfBuilder):
class BasicBuilder(PdfBuilder):

# ...

#		super(TraditionalBuilder, self).__init__(*args)
		super(BasicBuilder, self).__init__(*args)

#...

という感じで、"Traditional"という箇所を"Basic"に置き換えてやればよくなる。あんまり大きな声で良いとは言えないが。

 最後に元のBasicBuilder.pyを消すなり.py_orgなりにして、編集したTraditionalBuilder.pyをBasic~にしてやれば完了。それでもうまくいかないときは何回か再起動してやればうまくいったりする。

 LaTeXToolsは更新頻度が高くてメンテナンスされている感があるが、更新されるごとにまたもとに戻るので、また編集してやる必要がある。根本的になんとかするには、ファイルのアクセス権限とかをいじればなんとかなるかもしれない。

拡張機能「twitter画像原寸ボタンforGreaseTamperMonkey」ver.2.1.4公開

 昨晩本体を更新したので、続けてFireFoxなどに向けたMonkey系拡張機能用ユーザスクリプトも、同じver.2.1.4に更新しました。おそらく能動的にスクリプトを再インストールしないと更新されない?気がするので、してみてください。

 GreaseMonkey、TamperMonkeyは以下からインストールできます。


 twitter画像原寸ボタンは、以下のリンクをクリックしてインストールしてください。Monkey系は(先にMonkey系の拡張機能を入れておく必要がありますが)リンクのクリックだけで勝手にインストールを促してくれます。
https://github.com/hogashi/twitterOpenOriginalImage/raw/master/tooi-forGreaseTamperMonkey.user.js

 ↑ のコードの内容は以下で見られます。
twitterOpenOriginalImage/tooi-forGreaseTamperMonkey.user.js at master · hogashi/twitterOpenOriginalImage · GitHub


 変更内容はこちら。
hogashi.hatenablog.com


 使い方は変わっていません。設定方法としては、ソースコードの最初にある

hogehoge: 'istrue'

となっているのを

hogehoge: 'isfalse'

に変えるとhogehoge機能が無効になります。戻せば有効になります。よくわからなくなったり、動かなくなったりしたら、再インストールしてください。

 不具合があればお伝え下さい。
 ソースコードGitHubに公開しています。
GitHub - hogashi/twitterOpenOriginalImage: is a GoogleChrome extension which opens original image to new tab.

拡張機能「twitter画像原寸ボタン」ver.2.1.4公開

 拡張機能twitter画像原寸ボタン」ver.2.1.4を公開しました。割りと焦るタイプの不具合だったのでシュッと修正して、ついでにもうひとつ修正しました。今(2017/04/26/23:25)さっき公開したので明日になれば反映されるかなと思いますがゆったりお待ち下さい。

chrome.google.com

使い方は以下です。大きくは変わっていないということです。

hogashi.hatenablog.com

更新内容

 今回の更新は2つです。

  • "Original"という文字が見えなくなってボタンが見えづらくなっていたのを、文字を表示するように修正
  • 画像ツイートへの返信をするときCtrl+Enterで送信すると画像が開くようになっていたのを、開かないように修正

 実はボタンは存在していて、文字だけ表示されないようにtwitterのページスタイルが変更されていたようです。ボタンのスタイルはtwitterのものに則れるように極力寄せているのですが、たまにこういうことが起きます。もっともDOM構造が変わってしまったりするとボタン自体無くなったりするので、避けられないところではあります。

技術的な内容

 文字が消えていたのは、

.ProfileTweet-actionList

というclassに

font-size: 0;

というスタイルが当たるようになっていたからでした (ただブラウザのインスペクタから見ても打ち消しされていたりしてどこのスタイルが効いているかわかりませんでした)。
 つまり、

font-size: 13px;

と指定するようにしました。変更が小さかったのでなんとなく事細かに書いています。

 Ctrl+Enterで画像が開いてしまう不具合は、前に一回、返信時にEnterで改行できないというので修正していたところでした。そのときの修正法は、

document.activeElement.className.match(/rich-editor/)

という条件でテキストボックスにフォーカスがあるかどうかを判定して、あるなら入力中なので画像は開かない、という感じにしていました。
 今回出ていた症状の訳は、このフォーカスのある要素が"ツイートする瞬間から"テキストボックスではなくなってしまうということで、こうなります。
f:id:hogashi:20170426234159p:plain

 要は条件がズレていたということなので、ともかくCtrl/Alt/Shift/MetaKeyの押された状態では開かないように挙動を変えました(そもそも考えていなかった挙動でした)。

 ということでした。また何かあればお伝えください。

 ソースコードGitHubに公開しています。
GitHub - hogashi/twitterOpenOriginalImage: is a GoogleChrome extension which opens original image to new tab.

twitter画像原寸ボタンの現状

 twitter画像原寸ボタンをお使い頂いてありがとうございます。作ったものを使ってもらえるのは嬉しいお話です。

 現状としては、気力をこれに注ぐことができていないので、更新はしていないというところです。TweetDeckのギャラリーとかにつけると便利そうだなと思いつつ。

 一応不具合とかないかなーとtwitterでよくツイートを検索してみたりしているのですが、割りとあるのは「急にボタンが出なくなった」という症状かなと思います。
 これは全く意図しない挙動で、その上こちらでほとんど再現しないので、改善は難しいです。

 ということなので、対処としては、

  • 見ているページを再読込する、
  • 設定から拡張機能を一旦無効化してから有効化する、
  • ブラウザを再起動する、

の順に試していって、直ったらめでたい、という感じです。


 ここから微妙な話になりますが……先に"ほとんど再現しない"と書いたのは、実はこちらで同様の症状がたまーに再現するのは、この拡張機能ではなくて、BetterTweetDeckというものなのです。あれも同じく常駐系というか、TweetDeckを読み込んだときに一緒に読み込まれるはずです。

 しかしこれが読み込まれないことがあるんですよね。何故なのかわからないんですが、GoogleChromeを疑いつつあります。
 つまり、manifest.jsonにそのスクリプトが走る対象のURLを書いておきそのとき走るようになっていますが、その辺で上手く拡張機能が発火せずにページだけぬるっと読み込まれてしまうのでは……?という疑念です。わかりませんが。


 原因が判明したら改善したいです。拡張機能自体の機能追加もゆっくりですがしていきます。

拡張機能「twitter画像原寸ボタン」ver.2.1.3公開

 twitter画像原寸ボタン、ver.2.1.3公開です。

 今回の更新は、「TweetDeckのツイート詳細にボタンを設置する」という小さいものです。なので、あんまり影響は無いと思いますが、万一不具合か何かあればお伝え下さい。

 使い方などは以下をご覧ください(毎度リンクで済ませて申し訳ないです、また近々書き直します)。

hogashi.hatenablog.com

 今さっきアップロードしたところなので、数時間見てもらえれば更新されているかなと思います。ver.2.1.3になっていれば最新です。

 あとはこれからTweetDeckのギャラリー表示でのボタン設置やなんかをやっていきます。

 あっあとユーザ数が3万人を越えました*1。メンテナンスしていかなければという気持ちになりますね。

 GitHubにソースを公開しています*2

github.com

*1:2017/03/06 20:00現在 30,009人

*2:下手なコードで恥ずかしいですがこれからだんだん綺麗にしていくつもりです

GoogleChrome拡張機能「twitter画像原寸ボタン」の移管

 GoogleChrome拡張機能twitter画像原寸ボタン」は今まで友人に公開してもらっていたんですが、やっとこ自分のアカウントに移管できることになったので移管します。

↓最初の公開時の状況

今回から友人の力をお借りしてChromeウェブストアに公開することになりました

GoogleChrome拡張機能「twitter画像原寸表示」ver1.3 公開 - hogashi.*

 中身は変わらず、管理がスムーズになるというだけなので特に影響はないはずです。


 中身については、今のところまた2月中に少し更新できるといいなという気持ちです。早いとこTweetDeckの詳細ツイート表示とか画像ギャラリーとかに対応したいのでそこからやります。

 やってることが素朴なのにもうユーザ数が3万弱*1というくらいの拡張機能になっていて驚きですが、ゆるゆるやっていきます。

chrome.google.com

(追記: 2017/02/20/16:32) 移管されたのを確認しました。管理者のアカウントが変わっても、見た目は本当にほとんど変わらないようで、なによりです。

*1:執筆現在(2017/02/18/03:23)29,777人

MMAって一体

 これは MMA Advent Calendar 2016 - Adventar の4日目の記事です。

 MMAに所属して2年目の部員です。

 とことん忘れる体質を許してほしいのですが、MMAに入ったきっかけとか入った当初とかを殆ど覚えていません。おそらく kyontan とかって人と話をしてたら入っていたのではと思います。

 当時は高校でUbuntuの上辺を扱った程度でコンピュータにはさっぱり詳しくなかったのですが、今はそれよりちょっとは詳しくなれました。周りの人たちが色んなことをしていて、これを作ったとかこれを運用しているとかという話を聞いているとそれなりに知識がついてくるもので、とてもいい環境と言えます。家にマシンが複数台あってネットワークをどうするかみたいなものの考え方もわかってきます。あんまり自分でやっていないままでカーネルとかシェルとかその他未だにふわふわしたままですが。

 して「MMAって一体何をしているの」みたいなことを聞かれることが多いんですが、1日目の記事 (MMAとは(MMA Advent Calendar 2016 1日目) - /var/log/) にあるように、これくらいしか答えられないという話で、なんとかする術として僕のやったことを書きます。賢明な読者はもうお分かりかと思うが本編は終わった。

 長さは長いものの内容は薄いので斜めに読んで下さい。

 電気通信大学という大学には休講という概念があって、講義がお休みになります。広義の休講では自主的なものも含まれるようですが今回は狭義でいきます。

 便利なページがありまして、電気通信大学(学域・学部) 休講のお知らせ というのですが、これを見ることで講義があるか否かを知ることができます。
 大変なのはこのページが不定期で更新されることで、朝見て休講がないままよ~し行くぞと大学に着いたら誰もいないみたいなことがあります。つまりいつの間にか休講になっていたりするということです。

 なんとかして更新を知りたくなるわけで、cronを回すか何かしてみようとなるわけです。curlするとこうなります。

$ curl kyoumu.office.uec.ac.jp/kyuukou/kyuukou.html
<HTML>
<HEAD>
<TITLE>d
        C?M・
            wi
              襴
                wj@
u?ィm点</TITLE>     x
"<meta name='viewport' Content = 'width=320,' height=480, initial-scale=1.0, minimum-scale=1.0,maximum-scale=2.0,user-scalable=yes' />"
<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<H2>d
     C?M・
         wi
           襴
             wj@
u?ィm点</H2>     x
<font color='red'>
                   wアⅲVXe?pX[h?X??「ト <BR>
                                          wアⅲVXe?pX[hェA<strong>ⅲ
                                                                  靏Z^[
                                                                       ・
?ュセウ「B<BR>ヲⅲ                                                           nVXe?pX[h</strong>??靹湜?オスB</font><BR>[Uシヘ?ィ・キフ?イ
(後略)

 charset=Shift_JISとの指定があります、あいにくUTF-8環境なのでnkfでねじ伏せます。

$ curl kyoumu.office.uec.ac.jp/kyuukou/kyuukou.html | nkf -Sw
<HTML>
<HEAD>
<TITLE>電気通信大学(学域・学部) 休講のお知らせ</TITLE>
"<meta name='viewport' Content = 'width=320,' height=480, initial-scale=1.0, minimum-scale=1.0,maximum-scale=2.0,user-scalable=yes' />"
<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<H2>電気通信大学(学域・学部) 休講のお知らせ</H2>
<font color='red'>★ 学務情報システムのパスワード変更について ★<BR>学務情報システムのパスワードが、<strong>(後略)

 すごいですね。上の文字化け状態でもわかりますが、HTMLタグが大/小文字混じっているとか、fontタグとか、沢山使われていて良いです。何より良いのは4行目で、クオートがついていて丁寧です。
 view-source:http://kyoumu.office.uec.ac.jp/kyuukou/kyuukou.htmlとかすれば同じものが見られます。

 まぁ実はこの辺りは変わらないので特に気にしないでokです。
 必要なのは下の方にある表です。

<TABLE BORDER=2>
<TR BGCOLOR=#DDDDDD>
<TD ALIGN=CENTER><B>クラス</B></TD>
<TD ALIGN=CENTER><B>月日</B></TD>
<TD ALIGN=CENTER><B>時限</B></TD>
<TD ALIGN=CENTER><B>科目</B></TD>
<TD ALIGN=CENTER><B>担当教員</B></TD>
<TD><B>備考</B></TD>
</TR>
<TR>
<TD ALIGN=CENTER>
(後略)

と続きます。これを

  • うまいことパースして
  • 更新されてるか確認して
  • うまいこと通知する

ことがしたいですね。

 パースは何も考えずにシェルスクリプトでやりました。awkとか使ってコクを出します。

$ curl kyoumu.office.uec.ac.jp/kyuukou/kyuukou.html | nkf -Sw | egrep -i '<(tr|td)' | tr -d '\r' | sed 's/<\/\?b>//ig' | sed 's/<\([^\s>]\+\)\s\+[^\s>]*>/\1 /i' | sed 's/<\(tr\|td\)>/\1 /ig' | sed 's/\(tr\|td\) /\1,/ig' | sed 's/<\/\(tr\|td\)>//ig' | awk 'BEGIN{FS=",";f=0} /TD/{s=s "|" $2} NR>1 && /TR/{print s "|";s="";if(f==0){print "|:---|:---|:---|:---|:---|:---|";f++;}} END{print s "|";}'

 パイプ9本で済みます。2016/12/04/00:00現在ではこんな感じ↓になります。

|クラス|月日|時限|科目|担当教員|備考|
|:---|:---|:---|:---|:---|:---|
|3S・電子工学コース・光エレクトロニクスコース・応用物理工学コース|12月2日(金)|1|熱・統計物理学基礎|尾関|&nbsp;|
|1年昼・クラス4・9・10|12月2日(金)|2|Academic Written English Ⅱ|上原|&nbsp;|
|2昼|12月2日(金)|4|英語演習|上原|&nbsp;|
|1K|12月3日(土)|2|Academic Spoken English Ⅱ|○ロイ|&nbsp;|
|1K|12月3日(土)|3|Academic Written English Ⅱ|○ロイ|&nbsp;|
|2I・I2クラス|12月5日(月)|2|情報・通信演習2|西(一)|&nbsp;|
|2I・I2クラス|12月5日(月)|3|基礎電気回路|西(一)|&nbsp;|
|3S生体機能システムコース|12月5日(月)|3|分子分光学|山北|&nbsp;|
|1年昼・クラス9|12月6日(火)|2|微分積分学第二 |山口(耕)|&nbsp;|
|1年昼・クラス7・8・12|12月6日(火)|3|Academic Spoken English Ⅱ|上原|&nbsp;|
|1年昼・クラス9|12月6日(火)|3|物理学概論第二|來住|&nbsp;|
|1年昼・クラス12|12月6日(火)|4|微分積分学第二 |山口(耕)|&nbsp;|
|1年昼・クラス3・4・6|12月6日(火)|4|Academic Spoken English Ⅱ|上原|&nbsp;|
|上級科目|12月6日(火)|5|Preparation for Graduate School|上原|&nbsp;|
|人文社会|12月7日(水)|1|地理学B|○戸田|&nbsp;|
|2M|12月8日(木)|2|プログラミング演習|結城|&nbsp;|
|2I・I1クラス|12月8日(木)|4|基礎電子工学|○望月|&nbsp;|
|2I・I2クラス|12月13日(火)|2|プログラミング通論(I2クラス)|○丸山|&nbsp;|
|II類第4クラス|12月14日(水)|1|確率統計|川端|&nbsp;|
|2I・I2クラス|12月15日(木)|4|情報通信と符号化|川端|&nbsp;|
|3K・EMCコース|12月17日(土)|4・5|専門実験B テーマ5(応力解析)担当:梶川のみ休講|梶川|対象はグループA。なお、17日の補講については10日の実験の際に相談して決めます。|
|人文社会|12月21日(水)|5|歴史学B|○倉橋|&nbsp;|
|人文社会|1月4日(水)|1|文化人類学B|○執行|&nbsp;|
|1年・Ⅱ類|1月4日(水)|1|力学|柳澤|&nbsp;|
|2I・I2クラス|1月4日(水)|3|生涯スポーツ演習B(卓球)|○額谷|&nbsp;|
|2I・I1クラス|1月4日(水)|4|生涯スポーツ演習B(卓球)|○額谷|&nbsp;|
|クラス4・9・10|1月13日(金)|2|Academic Writing in English Ⅱ|○近藤(良)|&nbsp;|
|1年昼・クラス6|2月3日(金)|1|線形代数学第二|○中井|&nbsp;|
|1年昼・クラス5|2月3日(金)|2|線形代数学第二|○中井|&nbsp;|

 これで扱いやすいmarkdownの表ができました。列の数は固定なので便利ですね。

 これをcronして、md5sumか何かで更新されたか否かを見て、SlackだとかLINE Notifyなんかに投げてあげれば、スマートフォンで更新通知を受け取ることができます。

 残った欲望としては自分に関連するところだけを通知したいんですが、講義によって様々な分け方が存在するため、出てくるパターンの全貌が不明です。収集して図鑑みたいにするとできそうですね。

お後

 明日の記事は未定のようです。 id:masn19 さんです。よろしいようで。[追記(0:50)]