モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

M100rマウス故障→改造決行!

まぁ、またもクソマウスを買ってしまうという愚行を繰り返したこともありますが…

M100rの右クリボタンがチャタるようになりました。 保証に出そうかな〜と思ってましたが、保証って送料はどうなってるんですかね。M100rの実売価格を考えると送料のほうが高くね?と思い躊躇しておりましたが、クソマウス購入で吹っ切れました。

これはもう、かねてから考えていた改造を行う他無い、と。

そんなわけで オペを開始する! (仮面ライダーブレイブ風)

計画としては

  • 中スイッチ用のスイッチを取り出し、故障した右スイッチと入れ替える。
  • 中スイッチの場所からワイヤーを伸ばしてその先に新しいスイッチを付け、中スイッチをサイド化

です。

まず、開腹して作業の為にホイールだけ取りました f:id:dothiko:20161015102420j:plain

そしてあっさりとボタン除去。 f:id:dothiko:20161015103236j:plain

これには、はんだシュッ太郎が大活躍です。 一家に一本はんだシュッ太郎!

というぐらいオススメしたい工具です…が、なぜかもうNEOしかない模様? いままでのシュッ太郎は30Wだったと思うのですが、45Wもあって大丈夫なんだろうか…?

まぁともかく。 なおスイッチはタクトスイッチにしました。これを筐体にテキトーに開けた穴に差し込んで固定。 f:id:dothiko:20161015103521j:plain

見て下さい、このものすごいフィット感…まるで最初からついていたかのようだぜ… f:id:dothiko:20161015103659j:plain

なお、現時点での固定はのちのち調整することも考えてホットメルトで行っています。まぁ、ホットメルトで十分な気もしなくもないですが、できればABS材+アクリサンデーで強力合体したいところ。

最終的にはこうなりました。 f:id:dothiko:20161015103749j:plain

そしてブラウザのジェスチャアドオンの起動ボタンを中ボタンに変更。まぁ、これは考え方次第というか、xmodmapで中ボタンを戻るボタンにマップしちゃうのも手かもですね。

いや〜、それにしても、(今の所)実に使いやすい。ホイールの押しこみって前々から嫌いだったんですが。

CAD周りで純3ボタンを探している方も散見されますが、改造してホイールを取っ払ってスイッチ付けちゃうのもありかと。

追記:中ボタンから戻るボタンへの変更について

他のエントリでも書こうと思いますがとりあえず、xmodmap -e ではホイールの中ボタン2を戻るボタン9にマップすることはできないようです。 何故なら、ボタン数を超えるボタンにはマップ出来ない…のだそうです。(evdev emulatewheelはエミュレーションだからokらしい)

そこで、xbindkeys & xvkbdを使うという手も考えて実行したのですが、これにはとんでもない問題点が。 バイスを限定出来ないため、タブレットの中ボタンまで戻るになりペイント系ソフトの中ボタンスクロールが全滅

そこでもしかして、と思ったらやっぱりありました。xinputにそういう機能がある。set-button-mapです。

xinput --set-button-map "Logitech USB Optical Mouse" 1 8 3 4 5 6 7 8 9 10 11 12 13 14 15 16

これにて、M100rのサイド中ボタンのみが、サイド戻るボタンとして機能します。

サイドでは、ジェスチャ起動のようなホールド操作より、ワンショット操作のこっちのが良いかも知れない…

反省などについて

何より、自分がわかっていながらまたも愚行を繰り返したという情けない有様。 ああ、釈迦の教えにきちんと従っていれば…orz

そもそもM100rを買ったのは「足るを知る」ためではなかったのか。自分のバカ!バカバカ!

そんな必要十分なM100rを横目に、クソマウスで2000円を気前よくドブに放り込んでしまったワタクシ… クソマウス2000円ぐらいいいじゃん、という心の広い考え方もあるのでしょうが

  • 「これってつまり、新しいマウスを買うときに2000円追加して買ってるのと同じだよね?」
  • 「それってカカクコム最高値サイトでわざわざ買ってる感じじゃない?」
  • 「てかM100rが3個買えない?」

という心のつぶやきがオイラを責める…脳内嫁に責められてる感じでw

っていうかこれで5個目ですよクソマウス。LS-1Tがイマイチフィットしないのに始まり、サンワサプライナカバヤシエレコム、そしてバッファローか…

ここまでクソマウスに手を出してしまう理由は、ロジクールの有線マウスがもうほとんど放置状態になっているのと、マイクロソフトのマウスが息をしてない状態になっているのが原因なわけでした。

つまり内心焦っていると。

それで「PCが衰退しているのでマウスも売れないので衰退」というありがちな仮説に加えもうひとつ、「マウス界二大巨頭以外の安マウスが使い物になる時代が来ているので衰退しているのでは?」という仮説を脳内で提唱してみたのですが…

しかしまぁ、それはあながち無いわけでもない感じですか。というのも、ここでクソマウス呼ばわりしている安マウスたちは、オイラの手にマッチしないだけで、多分手の小さい人が使えば問題ない気がするからです。ってかワシの手巨大すぎない…?

まぁ、いまやマウス各社の主戦場となっているゲーミングマウスが最後の希望かもしれない…けど、ゲーミングはボタン多いのがちょっと。

ボタンが多いのがなぜいけないのか?と言えば、それに依存するからなのですよ… 間違いなくいろいろな機能を割り当てたくなる。 そして、それに依存しきった頃にディスコンとかで消えてまた右往左往するのですな。それが怖い。

まぁ心をしっかりと持ち、いつ使えなくなっても心が動揺せぬよう執著を離れればゲーミングマウスを使う境地に達するのかも知れない…

ちなみに、無線ではロジクールのm325tは実に使いやすいです。安いし。てか、m325tは有線並の反応速度で持ちやすくてチルトホイールがあり電池一本で軽く、その上電池交換を忘れきるほどに超長持ちで、何一つ言うことないです。

ボディは超小さいんですが、何故かワタスの巨大な手にフィットする不思議な形状。つまみ持ちしやすいのでしょうか。

じゃあそれ使えよ!って感じですけど無線なのがねぇ… Wifiに加えPS4のコントローラとかみんな無線で、2.4GHz帯やばすぎないか?と思ったりしているのです。

LinuxにおけるDualshock3(PS3) & DualShock4(PS4) とMednafen向け設定について

(正確にはDualshock3ではなくホリの「ホリパッド3ターボプラス」なのですが、DualShock4の方は正真正銘のPS4のDualShock4です。)

このDS4をXubuntu 16.04のPCにUSBケーブルで差し込んだ所…(当たり前なのでしょうが)普通にジョイパッドとして認識しました。 面白いことにタッチパッドも対応しています。すごい!! このDS4タッチパッド、jstestで見ると、どうも絶対座標のデバイスとして認識している模様。

それで欲が出て、DualshockエミュレータのMednafenで使えないか?と思ったのですね。まぁ、とりあえず連射機能のあるホリパッドのほうを。眠らせておくのもアレですし。

なんでDualshockをつなげておきたいかというと、いつの日か、両スティックを移動と射撃に利用した今風スタイルの360度シューターで、SNKの「怒」とか洋ゲーの「Smash TV」をインスパイアしたのを作ってみたいという壮大な野望があったりするからでして、まぁ、いつになるかは不明ですが(^^;

さて、Mednafenはユニバーサルなエミュレーターで、将来的には手持ちのROMカセットを全部吸いだしてプレイしたい所(^o^)ですが、現在そんなものがなくてもフリーで公開されているHomebrewなファミコン(NES)ゲームがいくつかありまして、これがまた完成度が高い!のでした。

一方、残念ながらDS3/DS4には十字キーとアナログスティックを切り替える方法が無いようです。いやあるかもですが、とりあえずワタクシは知らない。何も設定しないままだと、アナログスティックでの代用でもっさりなプレイをすることになる…

さてそこで気づいたのですが、必死になって「この十字キーのハットスイッチをmednafenで方向キーに使えないか?」と思ったのですが、よくよくjstestの出力を見てみると、今までハットスイッチと思い込んでいたこのDS3/DS4の十字キー実はハットスイッチではない

他の軸のデバイなのですね。axis 0/1が左スティック、axis 2/3が右スティックで、 axis 4/5が方向キーです。

注:しかし、何故かopenmsxではaxis4/5ではなくhat0として認識する模様…

あとDS4は面白いことに、L2/R2を押すと、専用のアナログ軸と同時にボタンとしてもON/OFFされます。

ともかく、かなり時間を無駄にしてしまいましたが…

Mednafen側から設定も出来るようですが、物凄くわかりづらいUIだったので~/.mednafen/mednafen-09x.cfgを手動設定しました。

;nes, Port 1, Gamepad: A
nes.input.port1.gamepad.a joystick 0cb8f90ec3ed0f96 00000003

;nes, Port 1, Gamepad: B
nes.input.port1.gamepad.b joystick 0cb8f90ec3ed0f96 00000000

;nes, Port 1, Gamepad: DOWN ↓
nes.input.port1.gamepad.down joystick 0cb8f90ec3ed0f96 00008005

;nes, Port 1, Gamepad: LEFT ←
nes.input.port1.gamepad.left joystick 0cb8f90ec3ed0f96 0000c004

;nes, Port 1, Gamepad: Rapid A
nes.input.port1.gamepad.rapid_a joystick 0cb8f90ec3ed0f96 00000002

;nes, Port 1, Gamepad: Rapid B
nes.input.port1.gamepad.rapid_b joystick 0cb8f90ec3ed0f96 00000001

;nes, Port 1, Gamepad: RIGHT →
nes.input.port1.gamepad.right joystick 0cb8f90ec3ed0f96 00008004

;nes, Port 1, Gamepad: SELECT
nes.input.port1.gamepad.select joystick 0cb8f90ec3ed0f96 00000008

;nes, Port 1, Gamepad: START
nes.input.port1.gamepad.start joystick 0cb8f90ec3ed0f96 00000009

;nes, Port 1, Gamepad: UP ↑
nes.input.port1.gamepad.up joystick 0cb8f90ec3ed0f96 0000c005

ジョイスティックは/dev/input/js1のような変わりうるノードではなく、GUIDで設定できるので極めて便利です。 GUIDはコンソールからmednafenを起動した時に一覧が表示されるため、そこからコピペすればよいです。

つーか、この方式ならば、余ってる昔のシンプルなUSBパッドをDualshockと同時挿しで全く問題ないわけで、極めて便利でナイスな設計ですが、それをやったら今回のエントリの意味が完全に消失してしまうのでこのまま参ります。

Mednafen特有の方向キーの設定がミソで 00008004 というのは、「jstestで見える4番目の軸が正方向の値の時」と言う意味で、 0000c004とは、「jstestで見える4番めの軸が負方向の値の時」という意味だそうです。

その他は、jstestで見えるボタン番号となります。

f:id:dothiko:20161009000314j:plain

Bladebusterが動いてるっ! 楽しいィィィッ!

それはともかく、MednafenはLYNXにも対応しているのです。 なんとかしてATARI LYNXのカートリッジのイメージを吸い取りたいところです…

ていうかコレ、PCEngineにも対応してるんですね? ライザンバー2とか駿河屋で買ってきてDVD-Rドライブから即プレイ出来たりしたら嬉しいのですが…

MednafenとPulseaudioでの問題

書き忘れていましたがどうも、Pulseaudio環境下ではalsaがbusyということで音が鳴らないっぽいです。この解決方法はいくつかありまして

  • -sounddevice sdl オプションで起動する
  • mednafen-09x.cfgのsound.driverエントリをsdlにする
  • sound.driverはdefaultもしくはalsaのままにして、pasuspenderコマンドを利用する

しかし、sdlは非推奨とのことです。内部的な処理の問題か?CPUにどれだけ余裕があってもsdlオプションだと描画がもたつく場合があるっぽいです。

そこで、Pulseaudioのpasuspenderコマンドを利用して、

pasuspender mednafen ~/roms/bladebuster.zip

のように起動すると、その時だけpulseaudioがサスペンドされmednafen実行終了とともに復帰します。このため、alsaで問題なく動くようです。

なお、pasuspenderでは、たとえばAudaciousなどのアプリで音楽を鳴らしていると、pasusupender実行中は音楽が停止します。この方が便利でよいかもしれない…

mayu向けにsystemdのserviceを書いてみた件

考えてみると半年ぶりのエントリだったのか… 三ヶ月ぶりぐらいの気分でいたわけですが…恐ろしい時間の速さ。 どこぞの神父のスタンド攻撃でも喰らっているのでしょうか。それはともかくsystemdだ。

ubuntu 16.04ではsystemdになっているので、daemonも書き直しな感じです。いや、多分なんか互換レイヤ的なものはあるのでしょうが、せっかくなので書きなおして見たかった。前に書いたのは、かなりとんでもなくやっつけだったし。

そんなわけで、mayu(linux窓使いの憂鬱)を自動起動させるべくsystemdのserviceを書いてみたのです。

serviceファイル

ググッて出たサイトの皆様を参考にしました。本当にありがとうございました。

[Unit]
Description=run mayu command
After=basic.target

[Service]
Type=simple
RemainAfterExit=yes
User=root
ExecStart=/usr/local/bin/mayu

[Install]
WantedBy=multi-user.target

とはいえ、全て完全にオイラのやりたいことに合致しているサンプルというものは中々見つからず…

正しいかどうかはイマイチ良くわからないのですがこれをmayu-call.serviceとし、/etc/systemd/systemに直接投入。 シンボリックリンクで置いたら、systemctl enable mayu-call.serviceとしたとき「リンク多すぎてわかんねーよ(意訳)」的なエラーが出たのでそうしました。他のは全部シンボリックリンクなのに何故…

User指定が無いと何故かmayuが動いてくれなかった気がします。(試行錯誤の末なので、不確か)

あと.mayuファイルがどうもrootのしか見てくれないっぽいんで/root/にコピー。シンボリックリンクでも良い気がするのですが、とりあえず試行錯誤中なので不確定要因を排除する意味で…まぁ、.mayuを書き換えることももはや無い感じですし。

後はよくある

sudo systemctl daemon-reload
sudo systemctl enable mayu-call.service
sudo systemctl start mayu-call.service

で、リブート後も一応動いているのです。

うーむ、良いのではないですかねsystemd?? なぜあんなにアンチが多いのか不思議。

PCのサウンド環境とオーディオ沼の恐怖

新マシン建造直前に、唐突にPCのサウンド周りを改良し始めました。

これは特に音質の改善を目論んだものではなく、単に3.5mmミニプラグの接触が時折悪くなりサウンドが出ない、片方のチャンネルが出ない…ということがよくあったため、接触を改善するにはいくつかの候補がありました。

SPDIFでD/Aコンバータに接続する

これは完璧なわけです。しかし現在ブルーレイプレイヤーに接続してるD/Aコンバータを使って以前やってみましたが、音が痩せるというのを実感した感(安物D/Aゆえ?)。そしてブルーレイプレイヤーは同軸なので、光出力のH77Mとはセレクターを共用できない…等の問題がありまして。 まぁ、同軸→光コンバータを購入もしくは自作すればいいのでしょうが…これはこれでまた、無意味にコストが上がるというか、DAコンバータをもう一個買うのと全然変わらないですよね。どうしたもんだか。

あと思いついたのが光出力を同軸化し、機械式のAVセレクタを切替器にするというところでしょうか。可能であれば。これならアナログの機械式切り替えと違い音質劣化もないと思えます。

ただしかし、ともかくそれより何より、どういうわけか、skylake世代のマザボにはSPDIF端子がほとんど存在しない。辛うじてASUSのものにはヘッダが存在するぐらい。

今や、HDMIやDPでデジタル接続がデフォで普通なのでしょうね。デジタル高音質接続が究極に一般化した結果こうなるとは、なんだか時代の流れを感じて寂しくなりました(´・ω・`)

RCAピンプラグで接続する

通常のオンボードオーディオにはRCAピンプラグは存在しません。そこで思いついたのがフロントパネルオーディオをRCAピンプラグに変換するブラケット。 売ってないかな〜と思いましたが売ってない。

この解決方法が最もローコストかつ、今使用しているシステムと最も親和性が高い。

そういうわけで古いビデオキャプチャカードからブラケットを外して自作しますた。参考にしたのは

Want to use Intel HD Audio Header for Line In and Line Out, Any Suggestions? - MP3Car.com

です。ここではEMIフィルタを提示していますが、めんどくさいのと普通のATXケースのフロントオーディオにこんな立派な回路が付属しているのを見たことがない気がするので、まぁ多分いらんだろという感じで無視してみました。

f:id:dothiko:20160906205315j:plain

f:id:dothiko:20160906205319j:plain

こんな感じですね。ピンヘッダに抵抗ポン付けして適当な同軸ケーブルでひっつけただけという…ちなみにビデオがアナログRGBで接続されているのは、Xubuntu 16.04インスト移行時の一時的措置です。

こ、これがPCオーディオの実力なのか!

んで接続してみたらもうなんですか、音の太さが違うんですよ。

今まで聞いていた音はなんだったのか…と言う感じで。

ちなみにAsrock H77Mの時点で既にこんな感じの違いを感じました。ASUSのH110にして更にちょっと良くなったか?ような?気分ですがw

特に、自作のヘッドフォンアンプから聞こえる音は凄い良くなったというか、「これがハイレゾだ!」とか嘘つかれたら信じてしまうぐらいに。

結論としてはケーブルで音が変わるというのは本当にあるんだなと。とてつもなく低いレベルで。

要するに聞こえるべき音を1.0とすると、 それを0.3とか0.1にしてしまうケーブルが世の中には氾濫していて、それが0.7とか0.8になると人は「ケーブルで音が良くなった!」と思っているのではないかという仮説を思いつきました。

んでもって中華アンプ+スピーカーまで買ってしまった

そんなわけで昨今話題になってた中華アンプを今更手にしてみました。 そう、デジタルと勘違いしてフルアナログのLP-V3Sをゲット!(涙

…1700円ぐらいだったから許そうというか、まぁそんなに劣るものでもないどころかデジタルのLP-2020Aなどより良い場合もあったりするようです。ググッて読んでいる間に知ったのですが、なんでもそのLP-202X系のウリであるTripathのICはもうない?っぽいんで、多分Lepyとしても今後の展開を考えているのでしょうねぇ…

しかしやっぱり微妙に理不尽に感じたので改造だ。といっても知識は殆どないので出来ることはコンデンサオペアンプの載せ替えだけですが。コンデンサを余っていたオーディオグレードのものに変え、オペアンプはOPA2134に交換。

f:id:dothiko:20160906205322j:plain

なんか、音が良くなった感がします。特にトーンコントロールをしても音質悪化があまり感じられないというか。

スピーカーはヤマハのNS-BP200を考えていたのですが、サイズが微妙に大きいのと、設置場所が壁が近いので後面バスレフはまずいか?と思い、ONKYOのD-55EXにしました。いずれ、BP200も買ってみちゃうかもですけどね(汗

今まで使ってたBoseのCompanion2 series2との比較になりますが… LP-V3Sは電源切った時のポップノイズも有りませんし(Companion2は小さいポップノイズがあった)、また、経年劣化でCompanion2は小音量だとギャングエラーを発するようになってたんで、この新しい中華アンプ+スピーカーシステム、結構気に入ってます。

今思えば、かつて「鎌ベイアンプ」を使ってた時、このように手元に設置しておればよかったのでは?と思いましたが既に処分してしまったわけで、後の祭りナリ…

今まで使ってたBoseのCompanion2 series2との比較は…正直もうしあげて現時点ではやや微妙ですが、コストを考えると半額ぐらいで同等のレベルになったのと、アンプを手元に設置して即座に制御できるので操作性が向上しました。

逆に言うとあのサイズとあの価格であの音を出すBoseってすごいなーと思います。

まぁしかしちょっとエージングが進んできたのか?なかなか良い音を奏ではじめました。 このシステム、特にクラシックやサウンドトラックでは解像感と広がりがあっていい音を出します。このへんはCompanion2より向いてる感。 キングゲイナーの「オーバースキル・スムース!」なんかとても良いです。 そしてこの曲もいい音を出しますぞ〜

実はプリキュアとか見ないんですけどスイプリは音楽が良いですね。 それに空間構成というんでしょうか?実によい動きをしている。

新規skylakeマシンを建造しXubuntu 16.04.1をインストール & mayuをコンパイルできた!

Linuxに最新のデバイスは全く良くない… そんなふうに考えていた時期が 僕にもありました

しかしながら、あまりにも32GBメモリが安いのでついつい、まぁ、どうせ将来的にはこれも古くなるんだし…的な発想で。 ASUSのH110M-A M.2とPentium G4500で作ってみました。

今まで使ってたのがCore i5の3470Sという微妙なヤツということもありますが、実際、実家マシンのPentium G2030を使っていて、Pentiumだからおっせーわと思ったことは、ほぼ思い出せないのです。大抵忘れきってる。 つまり、おいらの用途(ネットとお絵かきとライトなプログラミング)では、i5はオーバースペックというわけです。

さらに言えば、まぁなんつーか釈迦や老子の教えに少し従ってみたというか、せめてスペックに対してだけでも、少しづつ無意味な執著を減らしていけたらなぁと…それで、i3よりPentiumを選んでみました。

貼ってみたらなんかG4500の値段が高い感。Amazonのが売り切れてるせいでマーケットプレイスのが出てるようですね。コスパ高くて人気なんですかね?

さすがにまだ新しいためグラフィック周りはデュアルモニタなど現時点では宜しくないとのことなので、HWEを待つというのもなんなので前々から欲しかったNVidiaのGTX750Tiを買ってみました。ツクモ特価で10500円ぐらい。 念願のDisplayportがついたやつなのですが、このDisplayportは4K出来ないので実質あまり意味がないという。

今時950との価格差も詰まってきて750というのも躊躇したのですが、どうも安い950はファンが煩いのばかりのようで時期尚早と判断しました。結構長い人生で、特にパソコン関連では、将来を見据えた購入がろくな結果をもたらした記憶がないのですな。 4Kについてもどうせ、それが主流になる時はインテルオンボードで十分とか、超ローエンドでデスクトップならサクサクになるわけですから。

そういう意味では32GBのDDR4とかもどうなのか?と思わなくもないのですが、まぁこれはいいだろうということで。

信頼のブランドクルーシャルを購入しました。

何よりもまず、memtestでハマる

しかしながら最近はEFIが当たり前だそうで、それでmemtestはEFIではgrub2の起動リストに出ないということを知らず。 memtestが出ないため焦りまくりました。 これは結局のところ、

  1. XubuntuのUSBブートスティックを挿してUEFIセットアップ画面に入る
  2. Boot Menu(F8) を選択してブート選択、この時USBスティックはEFIとそうでないほうがでるので、EFIでないほうの項目を選ぶ。
  3. Failed to load COM32 file menu.c32 みたいなメッセージを出してコケるので、tabキーを押して候補を出してみる。
  4. たしかこのときmemtestがあるはずなので、memtestと入力してやるとmemtestが起動する

というわけでした。個人的に2パスでokということにしているので問題なく通過。6時間かかりました…

Xubuntu 16.04.1 をインストール

ここでもハマりました。普通に起動はしてインストーラーが立ち上がるのですが、mp3のプロプラソフトとかをインストールするかという項目にチェックを入れると、延々そこで止まってしまいます。 後にlameとか入れれば不要なんでここはチェック無しで!

ここでX(U)buntuとは関係ない個人的ハマりを迎える

気分転換でユーザー名を変えてみたんですよ。そしたらもうひどいめにあいました! chown -R で大丈夫だろとか思ったら、設定各所に自分のユーザー名を決め打ちしているので全部書き直しですわ… そしてシンボリックリンクも全部張替え…何か、自動で張り直してくれる方法はあるのでしょうか… 結局、自動張り直しソフトをpythonで自作するという有様です。

最後にmayuがコンパイルできず…しかし!ついにコンパイル

さて、mayuです。これがboost絡みと言う実にどうでもいいところで./configureすらできず… ここはまずこれで回避

 ./configure --with-boost-libdir=/usr/lib/x86_64-linux-gnu/

次にmakeすると以下のようなエラーで止まります

msgstream.h:205:7: error: ‘setp’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   setp(m_buf, m_buf + SIZE);

ググったら似たようなエラーを出す別のソフトのコンパイルの例があり、それではthisポインタを指定してやればいいと出たのでmsgstream.hの全部のsetpをthis->setpに書き換え。 そうしたらコンパイルが通りました。

なお、確か14.04の時も何かコンパイルが通らなくて書き換えた記憶があるんで、大元のソースからコンパイルするにはいろいろ書き換えないとダメかもですね… たしか、そういう内容の記事を以前書いたような記憶もあるのですが。

正直、OSアップグレードの度にmayuが動かなかったらどうしよう…とビビリ上がっているので、ここまで高機能でなくていいのでわかりやすいソースで自作したいという気持ちがフツフツと湧いてきたり。

あと変えたとこ

相変わらずfcitxのmozcアイコンがでかすぎるので、20x20pxぐらいにリサイズしたもので/usr/share/fcitx/mozc/icon/mozc.pngのショートカットを置き換えました。そうしないと日本語入力のたびにリサイズが毎回入るのでうざくてかなわないのです。

新マシンの感想

以前使っていたi5 3470Sと比べると、グレードダウンになるわけですから多少覚悟はしていたのですが、意に反してなかなかサクサクです。シングルスレッド性能では上回ってるっぽいのでそういうことなんでしょうか?それともメモリの速度が上がったからなのでしょうか? あるいはグラボをプロプラではなくそのままのnuveauドライバで使ってるからでしょうか。 心配していたサウンドもネットも全く問題ありません。昔は、新しいマザボなんぞにLinux入れようもんなら運良く動いても、オンボLANが使えない音が鳴らないは普通でしたけどね…いい時代になりました。

Xubuntuも日本語関連殆ど何もいじってないのですが、何も考えずとも日本語がこうしてバリバリ書けています。恐ろしい時代だ。

気が大きくなって、/tmpにtmpfsなラムディスクを1GB、ブラウザのキャッシュに2GB割り当てるという豪勢過ぎる構成。こういうことが簡単にできるからLinuxはやめられない…

ともかく、大満足の新型ローコストマシンとなりました。(今のところ)

MyPaintにPolyfilltoolを実装しています

MyPaint私家版にさらにPolyfilltoolを実装ッ!(途中)

イデアとしてはこうです。

「brushlibを弄ってポリゴンフィルを付けるのは面倒だが、pycairoで描いてそのサーフェスをgdk.pixbufに変換しさらにそれをmypaintのレイヤのメソッドload_surface_from_pixbufで流しこめば簡単に出来るのではないか?」

…と思って、思い立ったらガマンできない堪え性のないワタクシ *1は早速着手しました。

と思ったんですが、着想はよかったものの、中々上手く行かず。pycairo、gtk、そしてmypaintのクラス群と、分からない要素の数々がオイラを責め立てる…

しかし数日間の苦闘の後!!

遂に!!

遂にレイヤに描画することに成功しました!!!

f:id:dothiko:20160313141327j:plain

まだUIは作ってないけどグラデも出来る!

f:id:dothiko:20160313143914j:plain

Cairoにはメッシュグラデも実装されており、UIさえ作ればグフフのフっと…*2

とりあえず描画部分のコードだけ置いときますね(´・ω・`)

MyPaintソースの様々な部分からのコピペ多し…

            sx, sy, ex, ey = self._get_maximum_rect(None)
            sx = int(sx)
            sy = int(sy)
            w = int(ex-sx+1)
            h = int(ey-sy+1)
            surf = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
            cr = cairo.Context(surf)
            _draw_node_polygon(cr, None, self.nodes, ox=sx, oy=sy,
                    color=self.foreground_color)
            surf.flush()
            pixbuf = Gdk.pixbuf_get_from_surface(surf, 0, 0, w, h)
            layer = lib.layer.PaintingLayer(name='')
            layer.load_surface_from_pixbuf(pixbuf, int(sx), int(sy))
            del surf, cr

            tiles = set()
            tiles.update(layer.get_tile_coords())
            rootstack = self.doc.model.layer_stack
            dstlayer= rootstack.deepget(rootstack.current_path)
            dstsurf = dstlayer._surface
            for tx, ty in tiles:
                with dstsurf.tile_request(tx, ty, readonly=False) as dst:
                    layer.composite_tile(dst, True, tx, ty, mipmap_level=0)

            bbox = tuple(dstlayer.get_full_redraw_bbox())
            dstlayer.root.layer_content_changed(dstlayer, *bbox)

これが出来ると何が良いのか?と申しますと、かつてgimpがメインだった頃一時期凝っていた「パス塗り」が、gimpよりも遥かに簡単に手間なく出来てしまう点。

あと、このpixbuf変換 + レイヤ操作をマスターすれば…OpenCVを使った何らかの操作すら可能だろう…ということ…!!(利根川幸雄風

*1:いや〜この性格、マジに物理学者とかでなくてよかったですな…地球破壊爆弾とか思いついたらどうなっちゃうんだろ。オイラの頭が悪かったことに地球人類は感謝しなければならないと思う

*2:思ったんだけどまだpycairoでは対応してないみたい orz

BeautifulSoup4で突然なんだかエスケープされるようになったので対処

あ…ありのまま 今 起こった事を話すぜ!

「おれは xml-rpcでfc2から取ってきた記事をbs4にかけたと
思ったら すべてのタグが<とかでエスケープされていた」

な… 何を言っているのか わからねーと思うが 

おれも 何をされたのか わからなかった…

というわけでなんなんざましょ?理由はわからないのですが、もしかして何かfc2側が変わったのか? それともライブラリ側のアップデートで挙動が変わったのか?

いやまさかスタンド攻撃ではないよな…

今まで動いていた自作スクリプト…すなわち最初にヒットする自ブログの画像を最適アスペクトの最適サイズに切り取り縮小して自動アップロードするというモノなのですが、それが突然動かなくなりました。

そんなわけで色々調べた結果、こういう風にして回避することにしました。

    b=BeautifulSoup(entry['description'].encode(CHARSET)) # <-ここで勝手に&lt;されてる
    imgs=b.find_all('img') # エンコードされているので当然、タグとはみなされない
    if len(imgs)==0:
        # it may be prettify error?
        print('[INFO] no image found,but try prittify(formatter=None)') 

        b=BeautifulSoup(b.prettify(formatter=None)) # <- これだ!このformatter=Noneでprittifyして再度突っ込む!
 
        imgs=b.find_all('img') # <- これは動く

要するにprettifyのformatterをNoneにして再度突っ込むみたいな適当な逃げにしてみました。 一応動くのでこれでいいや…