2014/07/19

charは「ちゃー」だと思う

いくつかの事例を考える。
bin=「ビン」、proc=「プロック」、spec=「スペック」などを見てみると、短縮された場合は必ずしも元の語の発音に忠実に読む必要はないことがわかる。
元の発音を気にするならば、上の例はそれぞれ「バイン」「プロシ」「スピーシ」のように読まれるはずである。
よって、同様に考えてchar=「チャー」≠「キャラ」であると思われる。

ちなみにenum今まで脳内では「イーナム」と読んでいたが、よく考えると「{イ,エ}{ナ,ヌ}ム」のように読まれるはずである。
音節を区切ってe-numのように読めば合理性は説明できなくもない気はするが、4文字と短い略語でこのように音節を切るのは適切なのだろうか。
それはともかく「エニューム」はやはりおかしいと思った。

2014/07/13

squid,dnsmasq,openresolv on gentooで幸せになろう

wpa_supplicantで無線を使っているが、ネットワークを切り替えるとsquidが動かなくなる。
squidを通さなければ普通にネットワークが使えるので、どうも名前解決あたりで駄目になっているのではないかと考えたが、結果的に正解だった。
squidは内部に独自の名前解決の仕組みを持っているらしく、せっかくopenresolvとdnsmasqでローカルに正しく変更の反映されるDNSを持っているのに、それを利用してくれない(「dns_nameservers 127.0.0.1」しているにも関わらず、である)。
この挙動はsquidのconfigureオプションで「--disable-internal-dns」を指定することで変更でき、外部のDNSを使わせられるらしい。
ここでgentooの強みが生きる。

configureのオプションは普通ebuild内で指定されるが、configureスクリプトがautotoolsによるものの場合に限り、EXTRA_ECONF環境変数をオプションとして渡してくれるらしい(詳しくはManpage of EBUILD の"Compile"のところのebuildの説明を参照のこと)。
そんなわけで、merge時に「ECONF="--disable-internal-dns"」を指定できれば良いわけだが、ここでいつぞやの「jdkのヘッダにパスが通ってなくてemergeが失敗した話。」のケースを思い出す。
このときも環境変数(C_INCLUDE_PATH)を弄ろうという話だった。つまり、/etc/portage/package.envあたりを弄ってやれば良いだろう。

/etc/portage/package.env (追記)
net-proxy/squid squid-disable-internal-dns
/etc/portage/env/squid-disable-internal-dns (新規作成)
EXTRA_CONF="--disable-internal-dns"

んで、あとはsquidをmergeしなおしてやれば完了。
幸せだ。

2014/05/02

東工大ポータルとtitech-pubnetのログイン自動化のスクリプト(とブックマークレット)書いた

新規性あります!

ブックマークレットを利用するには、 東工大script ←このリンクをブックマークに登録し、その後、urlの最後らへんにある「14X99999」「password1234」「111……777」の箇所を自分のアカウントやパスワードに合わせて変えてください。
または、
javascript:(function(d,n,j,i,p,m){var l=d.login,f=d.getElementsByTagName('input'),t,c;switch(n.search.replace(/[&?]Template=([^&]*)(&.*)?/,'$1')){case 'userpass_key':l.usr_name.value=i;l.usr_password.value=p;l.submit();break;case 'idg_key':while(++j-4){t=f.item(j);c=t.parentNode.parentNode.getElementsByTagName('th')[0].innerHTML;t.value=m[c.match(/[1-7]/)[0].charCodeAt(0)-'1'.charCodeAt(0)].charAt(c.match(/[A-J]/)[0].charCodeAt(0)-'A'.charCodeAt(0));}l.submit();break;default:if(n.host+n.pathname=='wlanauth.noc.titech.ac.jp/fs/customwebauth/login.html'){d.getElementById('username').value=i;d.getElementById('password').value=p;submitAction();}else{n.href='http://portal.titech.ac.jp/';}}})(document,location,0,'14X99999','password1234',['1111111111','2222222222','3333333333','4444444444','5555555555','6666666666','7777777777']); これを一度テキストエディタなどにコピーして、編集後に手動でブックマーク登録するのもアリです。
(ちなみに、上の枠内では折り返しして表示されてると思いますが、改行はありませんので気にせずそのままコピペしてください。)



言うまでもないとは思いますが、たとえば「333…3」は学生証ウラの表の3行目のアルファベットを続けて10文字(AからJ列まで)入れてください。
ワンクリックで使える場所(ツールバーとか)に置いとくのが便利です。

gistの方にも書いときましたが、このブックマークレットは、

  • titech-pubnetのログイン画面でクリックすると自動入力+自動送信
  • 「同意(マトリクス認証)」をクリックした直後のページでクリックすると、自動入力+自動送信
  • その後の「Matrix Authentication」のページでクリックすると、適切に自動入力+自動送信でログイン完了
  • これら以外の普通のページからこのブックマークをクリックすると東工大ポータルのページにジャンプ
といった挙動をします。
要は普通のブックマークとしても使えて、ログインページではワンクリックで次のページに進める便利なスクリプトです。

詳しい解説はしませんが、安全性が心配なら gist にコメント付きのソース置いとくので各自確認するといいと思います。

ちなみに、Firefoxには Greasemonkey という、自作スクリプトを任意のwebページ上で動かせるアドオンがありまして、それを使えばクリック無しで自動ログインできます。
Firefoxユーザは是非そっちを使ってください。楽なので。

gist にアクセスして、titech-automatrix.user.jsの横にある「<>」みたいなボタンをクリックすると自動でインストール画面が出るはずです。

警告のある通りスクリプトで何でもできてしまうので、信頼したいならソース読んでください。

Google Chromeだとuser scriptを自作の拡張機能として使えるようですが、スクリプト読み込みのタイミングのせいか正常に動作しません。
(詳しく言うと、パスワード認証の段階でd.login.usr_nameが未定義だと言われます。たぶんDOMが構築される前にスクリプトが実行されてるとかじゃないかな。)
気が向いたら適当に対応するんでそれまで待つか、待てないなら誰か適当に改造しちゃってください。
利益取らなければ勝手に公開して構いませんので。

あと他になんか問題あったら連絡ください。

参考:新規性

  • ブックマークレット版は、ワンクリックで入力のみならず送信までできます
  • Greasemonkey版が用意されており、ノークリックで全自動ログインできます
  • パスワード認証にも対応しています。共通のブックマークレット(も、Greasemonkey用スクリプトも)ひとつでtitech-pubnetとtitech-portalの2つのサイトでのログインができます
  • 関係ないページでクリックした場合、普通のブックマークとして機能し、titech-portalにジャンプします(webページでなくブラウザ用の画面(新規タブとかアドオン管理とか)からは無理でしたが)。つまり普段からブックマークバーに置いておくだけの利用価値があります

2014/03/03

ターミナルでバイナリを表示して文字が化けることあるよね

ありませんか?そうですか。
僕は昔 $ sudo cat /proc/kcore とかやって残念なことになったり、最近だとうっかりvimの.swpファイルやgccの中間オブジェクトをcatしてしまったり。
まあ、そんなときtmux使いの僕は容赦なくペインを落として仕切り直すのですが、前の出力をまだ捨てたくない、表示を復活させたいときどうするか。

こうする。

選択1
$ echo ^O
もちろん^Oは「C-v C-o」です。
選択2
$ echo ^[c
もちろん^[は「C-v Esc」です。念のため。
選択3
$ setterm -default
今回調べて初めて知った。
まあ実際どれがベターなのかは知りません。ちなみに $ hoge | od -t x1 してみるとわかりますが、全部出力するバイナリが(僕の環境では)違います。謎。
ちなみにわざわざバイナリファイルを探さずとも $ echo ^N で化けさせられます(追記:tmux上でしか化けなかった。なんだろう)。お試しあれ。

追記:

なんかtputコマンドを使うやり方があった気がするんだけどなぁ……「tput reset」じゃうまくいかなかったし。
他のやり方知ってたら教えて偉い人。