モブ沢工房

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

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にして再度突っ込むみたいな適当な逃げにしてみました。 一応動くのでこれでいいや…

MyPaintのレイヤ切り替えを超高速化するたったひとつの冴えたやりかた

MyPaintにおいて、レイヤ切り替えはちょっともっさり。これがMyPaintの宿命だと思い込んでおりました。が…

gui/stategroup.pyのStateクラスのクラス変数、autoleave_timeoutをデフォの0.8から0.1とかにするとめっちゃ高速化します。

これはまさかして…拘束具…?

ってかユーザー設定で変更できたほうがいいなぁ(^^;

追記

確かに軽快ですが、速すぎて、今までの切り替えでは何のレイヤか見えていたのだけど、殆ど見えないので何のレイヤかわからなくなる罠 (>_<)

名前をちゃんと付ければいいのだけども…結構このブリンク表示?に依存していたのだなぁと思いました。

外部ターミナルにデバッグ情報などを表示してみた

当たり前なのかもですが (& よくわかってないので迂遠な使い方かもですが) 最近ようやくttyの使い方に気づいたのでメモっておきます。

ターミナルエミュレーターやコンソールでttyってやるとその端末のデバイスファイルが出るわけですが、当然、それに対してechoなどするとそっちに行くわけです。

これ便利だな〜と思いますがイマイチ使いドコロが分からなかったのです、というのも他の端末のウィンドウから特定の端末のウィンドウのttyを知る方法が無いような気がしたわけです。

そこで思いつきました!xfce4-terminalでは(あと他のターミナルでも)-eとかで起動時コマンドを受け付けるわけですよ。

だからデバッグ対象のソフトを立ち上げる前に、xfce4-terminalを立ち上げて起動時にtty > /tmp/ユニークなファイル名 して、それでそのファイルをcat ユニークなファイル名 で変数に受けて、

デバッグ対象のソフト > ユニークなファイル名 2&1

とするとそのソフトの出力が全部そっちにいってprintデバッグですごい便利じゃないですか?

さらにwmctrlを使って、自動でその端末の画面をサブモニタに飛ばしてしまえば超便利だ!!

こんな面倒なことをせず、最初から元のサブモニタに端末を置いて、そっちで起動するというのも最初に思いつきましたが、これだとターゲットのプログラムもサブモニタ側で起動しちゃうのでよろしくないわけです。WMにもよるんでしょうけど…

って今思ったけどターゲットのプログラムをwmctrlでプライマリに飛ばすのもアリか…(汗

そんなわけでMyPaint開発で使ってるシェルスクリプトがこちら

#!/bin/sh

branch="my_build"
std_err="2>&1"

#====================#
while [ "$1" != "" ];do

    case $1 in
    -b | --branch)
        branch=$2
        shift 1
        ;;
    -c | --current-branch)
        branch="CURRENT"
        ;;
    -e | --no-std-error)
        std_err=""
        ;;
    -o | --remain-open)
        remain_open=1
        ;;
    * )
        echo $1 is unrecognized option
        ;;
    esac

shift 1
done
#--------------------#


INSTALLDIR=$HOME/python/others/mypaint_src/mypaint
curdate=`date +"%y%m%d-%H%M%S"`

cd $INSTALLDIR
if [ "$branch" != "CURRENT" ];then
    result=`git branch | grep "\* ${branch}"`
    echo $result
        if [ "$result" = "" ];then
            shownotify -t mmypaint -m "mypaintのブランチが${branch}ではありません"
            exit 1
        fi
fi

ttyfile=/tmp/mypaint_${curdate}_tty
title=my_mypaint_${curdate}

# launch terminal emulator.
xfce4-terminal -e "bash -c \"tty > ${ttyfile}\";bash" -H --title="$title"

# move terminal window
wmctrl -r $title -e 0,1920,-1,-1,-1

./mypaint > `cat $ttyfile` 2>&1

rm $ttyfile

if [ "$remain_open" != "" ];then
    wmctrl -c $title
fi

なんか書き方がださいというか恥ずかしい気もしますがなんというか備忘録的なモノとして…

ちなみに、この手法では何故かpudbとかncurses使ったソフトは2>&1するとアカンっぽい?(なんで?)

それにしても…いや〜、LinuxってっていうかPC-UNIXってほんと素晴らしいですね!(シベリア超特急の人風)

私家版改造MyPaintがなんだかエライことになってきた件

機能つけすぎてわけわからんわ〜という感じになりつつあり… (^^;

github.com

↑なんか比較的カッコいいリンクが作れたので、これで参ります。

当私家版MyPaintでは様々な機能を実験していますが、その中でもひたすらインクツールを改良しまくっています。いや、改良になってればいいんですがね…

正直、誰かいいのを実装してくれないかと「ようすをみている…」のですが

f:id:dothiko:20160211165654j:plain

とりあえず、現在まだ私家版にしかない機能としては

Inktool

  • ノードの複数選択 (ADJUSTフェーズ時に、空白キャンバスでシフトキーを押したままドラッグで枠選択、もしくはCTRLキーを押したままノードをクリック)
  • キャンバス上での筆圧変更 (シフトキー押したままでノードの上で上下もしくは左右にドラッグ)
  • ノードの位置を平均化する (当然ながら選択中のノードにしか効果がない、ノードが一つしか選択されていないときは全体を平均化)

セーブ関連

  • ファイル名末尾にバージョンっぽい番号を付けて保存するインクリメンタルセーブ機能

デバイス関連

  • ペンタブのスタイラスをひっくり返して消しゴムにすると、ツール(Mypaintでは、モードというほうが正しいのかな…)も同時に切り替わる機能。なぜか現時点のmypaintは、ブラシのみでツールは切り変わらない。

アシスト機能

  • フリーハンドの描線を平均化して安定化するスタビライザー機能。 (手ブレ補正を最大にしたよりさらにストロークが遅くなるので、必要なときだけ使うようキーボードでトグルにしました)

次の計画を忘れないようにメモ

さて細かいバグフィックスやモデファイアキーを押下した時の反応なども修正していかねばなりませんね。

それが完璧中の完璧と感じられたら(とてもウッカリさんなワタクシの場合、これでようやく人並みの完成度です)、いよいよ小分けにして(これもまた動作確認して、それもgit merge可能かどうかなど)pull requestしていこうかと思います。

しかしそれ以前に私家版としての次は、超高速セーブか…これは当ブログではすでにMyPaint 1.1の時に実験済みですが、1.2ではautosaveという機能が付いて、これがほぼ同じ仕組みなのです。そして当時嘆いていたdirty tileを得られない件、これはすでに解決しております。だから、基本的には楽勝の筈…

しかし、この機構はautosaveにしか使われず、ドキュメントの保存は今までどおりのものなのですね。

現状のMyPaintの保存は大きく分けて通常のora保存とautosaveです(一枚絵の実質エクスポートは横に置いておくとして)

そこに、「プロジェクト保存」みたいなモードがあれば、いいんじゃないかなぁと…

さて、その他、いくつか手法が考えられます。

  • Mypaint専用のバイナリ保存ファイル形式を作る事。しかし、これはいかにも後々祟る感じがしますね。メンテナンスで。
  • xcfを吐くプラグインを作る!これは悪くないですが、Source atopなどはどうするのか?(勝手に付けたのをgimpで読み込まれるとクラッシュするでしょうねぇ…)

うーん、やっぱり「プロジェクト保存」がいいのかも(^^)

VAIO SVT1311AJにUbuntu 15.10をインストールしてみる

さて、何故か最近ノートづいているワタクシですが。 今度はVAIO SVT1311Aだ!

f:id:dothiko:20160205231807j:plain ↑インストール直後のバニラなUbuntu 15.10

最近メモリが安くなっていたため、サクッと4GBのキングストンのDDR3L PC-12800を購入して8GBに増量…はいいのですが、後になって12GB積めることを知り愕然。まぁ、気分的に4GBがデュアルチャネルじゃないような気がするので、いいけど…

さて、Ubuntuをインストールするにあたり気にしたのは、SSD構成です。デフォで積んでるmSATAの32GBを、IRSTのRAID構成ではなくここにシステムを収納したいわけですね。

よく分からなかったのですが取り敢えず、なんかBIOS画面とは違うのですが出てくるRAID設定画面でRAIDをすべて排除。プレーンな構成にします。やり方は忘れましたが、かなり簡単でした。

しかし残念なのはBIOSでもブートがHDDからしか設定出来ないのですね。SSDはダメです。まぁ、こんなことはLinuxなら無問題なわけですけど(^^)

その後、UbuntuをUSBから起動してインストール開始。ここで、/dev/sdb1がSSDです。こっちにマウントポイントを/で指定。そして、当然ながらブートローダーは/dev/sdaのHDDに入れます!HDDはスワップの8GBと残りに分け、/homeにマウント。これでOK。

後はオイラの好みとしては。SSDの消耗を避けるため、

  • /home/share/var,/home/share/tmpを作成。
  • そして/etc/fstabで
/home/share/var /var none bind 0 0 
/home/share/tmp /tmp none bind 0 0 

そしてリブートしないうちに sudo rsync -av /var/ /home/share/var して整合性を取り即リブート!無事起動、というわけでございました。

1.4GHzのi3ですが、CPUパワーとしてはC2Dの2.53GHzに匹敵するっぽいですね。これでどこまでやれるか、一度試してみたく思います。

githubでの初pull request@mypaintが通りました!

一応記事にしておきますです…

githubについて超ド素人の分際でいきなりmypaintのinktool node関連のpull requestを出してしまい、いろいろ修正しましたが結局、 achadwickさんにご迷惑をかける始末… 本当に申し訳ありませんでしたachadwickさん&mypaint guyの皆様!Very Thanks & I'm so sorry! 一応向こうにも書いといたけど!オイラのへっぽこEngrishが通じていればいいが…

inktoolを、改良案が出てるのに改良が一向に出てこないのでこのまま放置ですか?!と思って焦った結果がこのザマだよ…

いや〜もう適当にググって出た「pull requestは気軽にしてもいいんだよ」みたいな記事に乗せられてアホなワタクシが躍り出た結果、mypaint界隈の皆様に迷惑をかけてしまい本当に申し訳ない気持ちでいっぱいです。

いやほんと、慎重に行こう。な! (←自分に向けて言ってる)

というわけでもう今後はものすごい発明をしない限り、いや、してもものすごい慎重に、せいぜい年一回ぐらいのペースで。pushする前に少なくとも3日ぐらいはチェックを重ね。完全に大丈夫と思うまでpushしない。pull requestは本当にもう一週間ぐらいかけるぐらいの心構えが必要ですね。

それもすごい小さいコミットがいい。と思いました。

しかしまた黒歴史を一つ積み重ねてしまいました…てかgit難しすぎとも思ったり。いやオイラの頭が悪いのだけど。

てかprivate repositoryって意味大きいんですねぇ。最初は別に全部公開でいいじゃんと思ってたけど。こうやって商売するのだなぁ。

VAIO CR92HSのCPUを換装してみる

要らなくなったとのことで、VAIO CR92HSをいただきました。

しかし、CPUがCeleron 550… そこで、以前Thinkpad SL510のCPUを載せ替えた時に余ったCeleron Dualcore T3000にダメ元で載せ替えてみることにしました。

フタを開けて驚きです。

f:id:dothiko:20160203230808j:plain

えっ? こんな簡単にCPUにアクセスできるの?

これは凄いノートだ…まるで自作PCのような簡単さ、いや、それ以上の簡単さで載せ替えられます。

なぜこれをウリにしなかったのだ! > VAIO

載せ替え後の写真を撮りましたが、殆ど同じなので見せても仕方ない感じです(^^;

そんなわけで起動したら、最初はCeleron 550のまま認識して焦りましたが、再度リブートしたら無事認識。

f:id:dothiko:20160203230344j:plain

反応もグッとよくなりました。550の時は、応答なしが非常に多かったです。

このPC、OSはVista->Windows7->(無料)Windows10という変遷をたどっているらしいです。

Windows エクスペリエンスインデックスでは、4.3 -> 5.1と爆増!なんだか、やっぱりまた中古CPUでパワーアップしたくなりそうな雰囲気ですが、T3000で満足しておくのが正しいでしょう。

さてここからどう調理するか?Windows10マシンは既に確保済みなので別にこいつで走らせる必要は無いのでした。なにかLinuxを入れようかな〜

しかし残念ながら何故か光学ドライブだけがIDEで、手持ちのスリムラインSATA用ドライブキャディは使えませんでした。 SATA変換付きのを買ってこないと…