Python:文字列内での途中改行(のコツ)

文字列が長くなりすぎるので行をまたいで1つの文字列を作りたい場合,
行末エスケープやトリプルクオテーションを使うことで実現できる.

通例は,

mystr = "Hellooooooooooooooooooooooooooooooooooooooooo\n \
             world.\n \
             I'm going to bed."

とするか,

mystr = """
             Helloooooooooooooooooooooooooooooooooooooooooo
             world.
             I'm going to bed.
             """

として複数行のstringを一度の代入で生成できる.

本来コードの見易さのために行う書き方であるので,目的に沿うように
この例では複数行文字列内でインデントをしている(行頭を揃えている).

しかし実際にこのコードをemacsなどで書き,
生成した文字列を出力すると,
インデント分が空白文字として書き出されてしまい,
上の例では"world."の位置がだいぶ右へ行ってしまう.
見易さを犠牲にしてインデントをしなければいいが,それでは本末転倒である.

この問題は複数行で文字列連結をすることで当然解決できる.

mystr = "Helloooooooooooooooooooooooooooooooooooooooooo\n" \
             + "world.\n" \
             + "I'm going to bed."

多少見易くなってほとんど見たままの出力がされる.

また数値を代入したい場合も

foo = 1
bar = 3.3333333
hoge = "hogehoge"

mystr2 = "foo = %d\n" % foo \
               + "bar = %f\n" % bar \
               + "hoge = %s" % hoge

で複数行でも一つの文字列に問題なく代入できる.

emacs:browse-urlから起動するブラウザの変更

emacsのtwittering-modeを試しに使ってみた.<iconまで表示されて素敵なプラグインですね.
リンクを開いた時に起動するブラウザのデフォルトがiceweasel(firefox)だったので,ちょこっと調整.

twittering-mode.elを見ると,どうやら外部ブラウザの起動は"browse-url"というelispファイルを使っているらしいことがわかる.
(twittering-enter関数なんかがそう)

なのでbrowse-urlの設定を.emacsに書いて変更.
この例ではLinux上のGoogle Chromeに変更するが,genericなのでコマンド指定の部分を任意のブラウザにできる.
firefoxをはじめepiphancyとかnetscapeとかは専用の関数があるみたいなのでそちらをどうぞ:参考URL

(setq browse-url-browser-function 'browse-url-generic
      browse-url-generic-program "google-chrome")

でOK.

こういう使い方だと,chromeの起動の速さに特に感心する.

TAPESTREA

今日知って驚いたもの.

TAPESTREA:

Princeton大学が開発した”環境音抽出・再生成システム”(端的に言ってしまうとしょぼい).
つまり:

  1. 様々な音が入った録音から環境音を複数抽出−>オブジェクト化
  2. それらを加工(周波数・時間領域で伸縮,ランダム変化付与,etc...)
  3. できあがったオブジェクトを時間軸上で自由に並べて任意のサウンドスケープを構築

といったもの.
動画を見てもらうとわかるが,これらをちょいダサなGUIで直感的かつ簡潔に実装している優れモノ.

スペクトログラムを時間周波数で簡単に切り取れてしまうシステムって中々無いので,そこのところに妙に関心してしまった.
このあたりが従来のサンプリングシステムとは違うんじゃないか(そのあたりは詳しくないので自信なし).
また変化のランダムネスは環境音にとっては非常に大事なので,それをツマミでちょろっと変えられるのが嬉しい.

で研究室のDebian Lennyにインストールしたんだが,Debianだとaudioというグループに入らないと,
オーディオデバイスにアクセスできないので,tapestreaを立ち上げる時にエラーが出る.
ところが当方はNIS環境下にいるため所属グループを簡単には追加できないとさー.
もちろん

# chmod 666 /dev/snd/*

なんかでパーミッションを与えるとその場は凌げるが,ログアウトしたり再起動すると元に戻ってしまう.
何か良い方法はないだろうか.
taps起動用のシェルスクリプト書くという手もあるにはあるんだけど,まずはもう少し根本を解決したいですね.

にしてもここの研究室(soundlabと呼ぶのか?)は面白い研究をしてるのですねー.


追記:/etc/rc.localにchmod以下を追記することで,毎回起動時にパーミッションを与えるようにしたら解決.もうちょっとスマートな解決法はありそうなんですけどね.

linuxのfirefoxがセグる

最近は割とパワフルなPCが手に入ったので,Winをホストにして
debian5.0 amd64VMwareで動かしている.

しばらく使っていたらfirefoxが起動時にセグってしまう症状が出たので備忘録に一つ更新でも.

私の場合はこんな感じのエラーを二回吐いてfirefox(正確にはIceweasel)立ち上がらなくなった.最終的にはセグメンテーションフォルトを吐く.

LoadPlugin: failed to initialize shared library /usr/lib/iceweasel/plugins/nppdf.so
[/usr/lib/iceweasel/plugins/nppdf.so: wrong ELF class: ELFCLASS32]

犯人:scim-anthy
原因:全てのアプリケーションで同一入力メソッドを使用していたから
解決法:「設定」→「SCIM入力メソッドの設定」→「全体設定(フロントエンド)」→「オプション」→「全てのアプリケーションで同一入力メソッドを使用」のチェックをはずす.

エラーの感じからAdobe関連のPluginが犯人かと思ってましたが,思わぬところに隠れてました.

関係ないですが,早く安定版の64bit firefoxを出してほしいものです.

歩み寄るといふこと

人間同士で行われる争いというのは、しばしば自己正当化の応酬である。

例えば問題を抱えた夫婦やカップルの間で口論がされた場合、その問題の解決や本質は脇に置かれ、

「私の考えは異常ではない」という論点で主張しあっていることがほとんどではないだろうか。

戦争だって結局は自分達の正当性を信じ込んでいる者同士が行う争いである。

ここでは、男女間でことさら頻繁に行われている(ように思える)「話し合い」と呼ばれる議論に的を絞る。

解決にあたって、こう考えれば楽なのになぁと感じることをメモ。

続きを読む