irbの長すぎるecho backを詰める, サイドチャネルによるAM放送,アルゴリズムの作り方, Dell XPS-13 9350 に Debian をインストール


supress irb echoback

うっかりばかでかい配列が戻り値になってるコードを実行してしまうことはありがちです.そんなとき, control-C で停止できればいいのだが,何かの拍子にirbごと全部がぶっとぶことは普通にある.

わすれずに末尾に

;nil

などと書けば問題ない(べつにnilでなくても評価できて短いものなんでもいい)のだが,「わすれずに」というのは一般には実行不能で,すなわちかならず忘れる時があるのだ.ついでにいえばやばいときほど忘れる.おかげで苦労した計算結果がどっかいっちゃって取り戻せない,というのもありがちだ.

これはそもそも echo back するオブジェクトのサイズというか文字列にしたときの長さが制限できればこんな問題は起こらない.そうであれば,echo back しているコードに手を入れて... とも考えたが,そもそもこれに悩むのが俺だけということはありえないので,どっかに解決があるはず.と思って探したらすぐに見つかった.

conf.return_format="%.3000s\n"

こんなふうに書けば3000文字に制限できるらしい.

たしかにirbの中でこの呪文を唱えると3000文字に制限される.しかし .irbrc の中に書いても何も起こらない.というか 'confって何すか' という例外になるだけだ.環境が違うのだ.だったら,いちいち手でこんなコマンドをうたないといけないのは何の解決にもなりゃしない.このコマンドをうつのと同じ効果のある初期化コードとは何なのか?

どこをどう探したか忘れたけど,結局こうなりました.

IRB.conf[:PROMPT][:INF_RUBY][:RETURN] = "%.3000s\n"

これで emacs で使う irb の中で効きます. 表の端末で使う場合は :INF_RUBY の代わりに :DEFAULT を指定してください.これでもう永遠に流れつづける文字列を見て呆然とする,という事も無くなりました.コンピュータを使っていてうれしいことなどほとんど無い俺ですが,これは純粋にうれしかったので是非この喜びを皆様と共有したく思い,ここに書いておくのです.

eval-expression-print-length is a variable defined in `simple.el'.
Its value is 255

Documentation:
Value for `print-length' while printing value in `eval-expression'.
A value of nil means no limit.

You can customize this variable.

This variable was introduced, or its default value was changed, in
version 21.1 of Emacs.

こちらは emacs lisp にある類似の設定項目です.

MW AM radio on ordinary PC

普通のコンピューターからAMラジオを鳴らそう http://cpplover.blogspot.jp/2016/03/am.html

普通のパソコンから出ている電磁波を解析すれば,中で走っているコードが判る場合がある.

ということは,逆に考えると中で特定のコードを走らせれば,特定の電磁波を出す,たとえばAMラジオみたいな事もできるんじゃね?

というのを実践するコードです.使い方は git clone してきたコードをビルドして実行するだけです.記事にもあるとおり,どこの周波数に出てるかはラジオでスキャンしてみるまでは判らない,というのが非常に面白いので,ぜひ自分でもやってみてください.

コンピュータから漏れる電磁波を拾ってデータやコードを推測する,というのは攻撃手法として比較的昔からあり,たとえば画面が出す電磁波から画面の内容を再構成する,などの手法が知られています.

ラジオのコードが動いてるところを,AMラジオで拾っている動画です.普段使っているラップトップでは1363KHzにキャリアが出ていました.

メール工事

あいかわらず電子メールというものが使われているので,俺もしょうがなく使っている.じつにめんどくさく,信頼性に欠け,脆弱性をもったプロトコルだ.できれば使いたくない.

しかも俺が使っているメールのシステムが非常に頭のおかしい設計になっていた.imap4のクライアントとしてfetchmailという20世紀のプログラムを使っていた.なぜこれを使っているかとういと,間に標準入出力を介してスパムのフィルタをかますことができたからである.

このクライアントは,どういうわけかそのままメールをローカルに貯めるという事ができず, maildrop という別のソフトウェアが fetchmail のデータを Maildir みたいなところに積むようになっていた. なぜ maildrop だったかというと,他のちゃんとしたソフトウェアはリモートからの接続を受け付けたりして,そういうのを切る設定を書かねばならず,面倒だからでもあり,MTAにはいろんな製品があるので,アップデートの拍子に同じ機能を提供する別のソフトウェアに置き換えられたりして新たな面倒の種だからだ.

ところでこのほど大規模なアップデートがあり, maildrop が動かなくなった.

普段,メールの送受信のインタフェースとして使っているのは Sylpheed というプログラムで,これは imap4 のクライアントとしても使えることがわかっている.標準入出力でフィルタをかますこともできるので,だいぶまえに,スパムの判定自体は fetchmaxil で行うのをやめてこっちに移行していた.もう fetchmail + maildrop という謎の構成は棄却して, Sylpheed に一本化すべきだろう.

ということで, imap4 を設定した.なかなか動かなくて,tcpdumpみたいな事をやったりしたが,あれこれいじくっている間にどうにか動いた.動いてみればなかなか便利だ.どこをどういじったか思い出せないし,思い出す気もない.俺がいいたいのはメールは無くなってほしい,という事だからだ.

あと,直接の関係はないが,別の日にまた大規模なアップデートがあって gnome が動かなくなった. 月末が論文の締切りということもあり,とりあえず動いてくれないと話にならないので unstable から testing にダウングレードした.

既にいろいろ動かなくなっているところにダウングレードするのはかなり大変だった.こういうトラブルのあとでなければ, sources.list を編集して apt-get update; apt-get dist-upgrade でおおむね終了なのだが.

対策としては,インストールできなくなったものが依存していたパッケージを一旦消してインストールしなおす,というのを地道にやっていくのが基本か.直すのに1時間ぐらいかかった.

アルゴリズムの作り方

アプローチは二つあると思う.

「より速くなったアルゴリズム」というのはよくある.わかりやすい.速いといってもいくつかの評価基準があり,開始からゴールまでかかる手数が少ないとか,手数の上限が判ってるとか,期待値が減ったとかである.期待値が問われるケースでは,しばしば手数の分布も問題になる.途中経過が線形で判断できる,なんていう性質もあって,今半分ぐらい終わったとかそういう事がわかると使う側としては嬉しいのである.プログレスバーの最後のひとこまが進むのに1時間かかったとか,結局終わらなくて例外になった,みたいなのありがちですが,本当にイラっときますからね.

ある処理をやるのが世界で自分が初めて,というのはなかなか無いんだけど,新たな分野がうまれる時は,案外そういう状況になる.そうなれば,もうその問題を計算機で解決すれば,すなわち新しいアルゴリズムの誕生という場合も多い.まぁ既存の手法の応用で間に合ってしまう事も多いですけどね.

Dell XPS-13

むっちとtakuoに教えてもらって,USのAmazonから中継業者を使って購入した.全部つき最強モデル.発注から届くまで3週間ぐらいかかったと思う.忘れた頃に届いた.日本の代理店で売ってるものに比べるとかなりスペックが高くなっていて,キーボードもus配列である.

かなり設定が大変だったが,無事にwindows10/Debian testing で dual boot できるようになった.

マシンのポイントは次のとおり

最近のwindowsは自分でパーティションを詰めるのができるので,windows側でパーティションを詰めておく.

ドライブが比較的新しい規格だが,カーネル4.6はこれをサポートしているので,最新のインストーラを使えば問題なくインストールも起動もする. debian testing installer などいって検索すれば見つかります.10年ぐらいまえに買ったDVD-R が大量にあったので,ためしに新しく買った光学ドライブに入れてみたら使えたので,これでインストールしました.

無線は動かすのに別途firmwareが必要で面倒なので有線LANがあるといいです.USB穴に挿すRJ45穴が2000円ぐらいであるので,インストールではこれを使いました.ネットワークのトラブルなど何かの時に役立つので一本持っていると具合良い,とむっちが言ってました.俺もそう思います.

BIOSを操作するには画面にdellマークが出てる間にF2を押すといいです.

BIOS の SATA operation で disable を選んでおく. これがプレーンな nvme のモードである.raidは不可です.ここで24時間ぐらいはまりました.

bios設定が正しければtesting のインストーラは普通にドライブをみつけてくれて,よきにはからってインストールしてくれます.ただし英語限定です.localeも英語のしかできません.これは,あとで

locale-gen

というコマンドで生成できるので,インストールが終わって起動してから適当なタイミングでログインして生成すればいいです.

無線は intel の7265っていうモジュールに入れ替えました.ふたを開けるのはかなり大変だが,粘着テープなどは使っていないので,この手のマシンとしてはまだマシな方だと思われる.

今回,こういう道具を買ってきた.裏蓋のネジはtorxの5とフィリップスだ.

ネジが全ぶ外れても,ツメを外さないと分解できないわけだが,これがかなり大変だ.

底蓋はどうも多少良いアルミみたいなので,プラッチックよりは多少ツメも頑丈で,これが良いニュースだ.

画像のように,ツメはおおむね底蓋側が内向き,本体側が外向きになっている.ただし悪いニュースがあって,一番右の画像にあるように,蓋側が外向きのツメもある.放熱口付近のツメがそれだ.

マニュアルにもあるとおり,ヒンジ側からツメを外すとよい.0.5mmぐらいの厚さのプラスチックを差し込んで隙間をあけて,その隙間を明るいライトで照らしながらツメの位置をピンポイントで特定しつつ作業する.自分の指のツメも適宜使って無茶な力をかけないように慎重に作業する.

中はこんな感じ.WLANと書いてあるのがそれだと思われるので,これを取り外す.固定しているネジをぬいて,アンテナ端子ケーブルを抑えている金属の部品をはずし,ケーブルをぬく.端子が非常に小さいのでかなり気をつかう.

ラベルがついてるのが元からついてたやつ.非常に小さく,切手ぐらいのサイズで目を疑った.ワンチップ無線LANである.すべてが1チップに詰まっているうえにbluetoothまでついているらしい.

元どおり組み立てたら,本格的に使うまえにバッテリの充電を設定.biosで充電開始および終了の容量を設定できるので,電池が新しいうちにこれを設定し100%に充電しないようにする.これで電池の寿命が何倍ものびる.100%に充電しているとすぐに電池がダメになってしまうのだ.

firmware-iwlwifi をインストールして wifi を有効にすると,特に何もせんでもただちにwifiが動き,非常に具合いい.

あとはX-200から自分のホームディレクトリを rsync で外付けHDDに書き出して,それを新しいホストに書き戻して終了.足りないものを徐々にインストールしつつやっていきます.

特になにかトリックが必要ということは一切なく,普通に nvme が使えました.

yuji@ikaru:/proc%cat partitions 
major minor  #blocks  name

 259        0  500107608 nvme0n1
 259        1     512000 nvme0n1p1
(以下略
  

心配したなぞりパッドの性能ですが,必要十分です.赤イボがなくても全く普通に暮らしていけますし,あっというまに慣れました.

とにかくあらゆる処理がむちゃくちゃに速く,しかも画面が無限に広いので,すごいです.しかし字がものすげぇ小さいです.なんせ今まで使ってた画面がまるごと4枚余裕で入る.

rubyのパケジはgemに統一され,debもgemでインストールすることになったようです. rubygems-integration という deb を一個入れとけばいいみたいでした.

あと,apache2 の事情が知らんまにかなり変化しており, 既定値ならびに user-wise なフォルダの設定などがかなり変化していました.まず,初期設定で各ユーザのディレクトリを見に行くようになってない.

それから,みにいくようにする設定がモジュール?とかいうものとしてまとめてある.これを読み込むことにすると見にいくようになるらしい.コマンドがあって, a2enmod という.

a2enmod userdir

などというとこれが load されるようになる. ただしこんなコマンドが用意されているわりには,いま動いているサーバに設定を反映するために別途 service apache2 restart する必要がある.この設定は Debian では /etc/apache2/mods-avalable にあるファイルに書いてあるのだが AllowOverride がいろいろうるさく,勝手に設定した .htaccess などがある場合,これと衝突して internal server error となるので, AllowOverride のところを all に書き換えとくといいです(本当はよくないですがめんどくさいですw).

ポインティングデバイス

多機能なポインティングデバイスが載っているが,インストールしたばかりではpsmouseドライバがロードされているために昔ながらのps2なマウスとしてしか動かない.

これをunloadするだけでだいぶマシになる.このための設定は以下のとおり

yuji@ikaru:/etc/modprobe.d%cat psmouse-blacklist.conf 
blacklist psmouse
  

設定を有効にするにはrebootすればよい.これだけでタップからの掴み移動や3本指タップによるmiddle buttonなどが動くようになる.昔ながらのXのまんなかペーストも使えるようになる. tap からの掴み移動は非常にありがたい.

libinput


記事リストへ