2016年9月10日土曜日

flash player 23 beta for linux

今はpipelightを使ってflashの最新を使っている。
http://tthhfugapiyo.blogspot.jp/2015/07/pipelight.html

どうやらversion23からlinux版が復活しそうなようだ。(2ch情報)
pipelightは結構クラッシュするし起動が遅いので、早速移行してみる。

1.ダウンロード

http://labs.adobe.com/downloads/flashplayer.html
linux版64bitを取ってくる。

libflashplayer.so

2.有効化

pipelightを無効にして、~/.mozilla/pluginsに置いたが、古い方を優先してしまっている模様。
firefoxの設定で片方無効化しようとしても、両方無効化されてしまう。(同じプラグイン名だから?)
しょうが無いので以下にaptで入れたもの(というかaptで入れたinstallerが取ってきたもの?)
が置いてあるので、置き換えた。

/usr/lib/flashplugin-installer
動かしてみたら意外と普通に動いている。

3.デュアルディスプレイの問題

デュアルディスプレイの片面でフルスクリーンにしておき、もう片面で作業しようとすると、
フルスクリーンが解除されてしまう。
対応方法を探した。 ↓
http://www.webupd8.org/2012/10/ubuntu-multi-monitor-tweaks-full-screen.html

とりあえず読んでみて簡単そうなのは、libflashplugin.soをバイナリエディタで編集し、
_NET_ACTIVE_WINDOWを別の文字に置き換える
(_AET_ACTIVE_WINDOWとか)という方法。
やってみたらうまく行った。

付録:vimでバイナリエディタ

簡単なバイナリ編集くらいはvimでやりたいので調べてみた。↓
http://d.hatena.ne.jp/rdera/20081022/1224682665

やってみたが、エラーコードみたいなの(bash  command not found endifみたいな感じ)
で置き換えられてデータが飛んでしまう。うまく動いてないようだ。

とりあえず:help hex-editingを読んでちょっと修正。

augroup BinaryXXD
  autocmd!
  autocmd BufReadPre  *.bin let &binary =1
  autocmd BufReadPost * if &binary | silent %!xxd -g 1
  autocmd BufReadPost * set ft=xxd | endif
  autocmd BufWritePre * if &binary | %!xxd -r
  autocmd BufWritePre * endif
  autocmd BufWritePost * if &binary | silent %!xxd -g 1
  autocmd BufWritePost * set nomod | endif
augroup END

2016年8月16日火曜日

GnuCashで日本の株とか


素晴らしい物を作っている人がいたので使い方をメモっておく。

http://liosk.blog103.fc2.com/blog-entry-185.html
http://liosk.blog103.fc2.com/blog-entry-204.html
日本の株価とかがgnucashで取って来ることができる。

最新は↓にあるようだ。
https://github.com/LiosK/Finance--Quote--YahooJapan

インストール方法も書いてあるけど、
ユーザの環境変数をいじらないと行けないので、
どっちかというと古いやり方の方が好み。
よって以下のようにした。


1. GnuCash / Finance::Quoteインストール


# apt install gnucash

(libfinance-quote-perlは勝手に入るようだ。)

2. Finance::Quote::YahooJapanインストール


↓でインストール先を調べておく。
$ dpkg -L libfinance-quote-perl

必要なファイルはYahooJapan.pmだけのようなので、ダウンロードして以下に置く。

/usr/share/perl5/Finance/Quote/YahooJapan.pm

で、これが読み込まれるように/usr/share/perl5/Finance/Quote.pmの184行目あたり、
YahooJapanを追加する。

             Yahoo::USA YahooYQL ZA_UnitTrusts YahooJapan/; }

あとはgnucashを起動したら読み込まれているので、↓のやり方で使える。
http://liosk.blog103.fc2.com/blog-entry-185.html

2016年8月6日土曜日

apache2のuserdirとsuEXEC


Ubuntu 16.04 LTSを新たに入れたところsuphpはすでに無くなっていたようだ。興味がなくなったのでやめるっぽい。(勘弁してくれ)
ずっとアップグレードで運用していたのでわからなかった。
以前やっていた方法ではダメなのでepgrec再構築を兼ねてメモを残す。

userdir上でphpをユーザ権限で動かそうとして色々やってみたがどうにもならん。意味不明すぎる。
仕方ないのでvirtualhostで動かした。

方針

1. virtualhostを新たに定義、使いたいユーザだけSuexecUserGroupで実行ユーザを決める。
2. ユーザ用のcgi-binを用意、phpのラッパーを置く
3. phpをそのラッパーで開く

インストール


apache2
apache2-suexec-custom


(libapache2-mod-suphpはお亡くなりになったらしい)
mysql-server
php
php-cgi
php-mbstring
phpmyadmin

virtualhost

/etc/apache2/sites-available/001-user.confを作る

# conf-enabled/serve-cgi-bin.confがベース -------- ①
<IfModule mod_alias.c>
    <IfModule mod_cgi.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>

    <IfModule mod_cgid.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>




    <IfDefine ENABLE_USR_LIB_CGI_BIN>
        # ユーザごとのcgi-binをつくる
        ScriptAliasMatch ^/~(.*)/cgi-bin/(.*) "/home/$1/cgi-bin/$2"
        <Directory "/home/*/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +FollowSymlinks
            Require all granted
        </Directory>
    </IfDefine>

</IfModule>

<VirtualHost *:80>
    # 000-default.confとuserdir.confがベース
    DocumentRoot /var/www/html
    ServerName hogehoge # サーバ名
    SuexecUserGroup user1 user1 # suexecで動かすユーザ
    UserDir public_html
    UserDir disabled root

    # 000-default.confとuserdir.confがベース
    <Directory /home/user1/public_html>
        AllowOverride All
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI FollowSymLinks
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>
</VirtualHost>



※/etc/hostsにサーバ名を書いて、それでアクセスする


userdir.confを編集

virtualhostの設定と重複するので、userdir.confの方のuserdirを無効にする。

/etc/apache2/mods-enabled/userdir.conf を編集
<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root user1 #ユーザを無効にする。


suexec


suexecを有効にする。
a2enmod suexec
 suexecでphpを実行する。ユーザディレクトリごとにphpをおいてそれを実行することで、phpをユーザ権限で動作させる。
/etc/apache2/suexec/www-dataを以下のように設定

/home
public_html
①で設定したcgi-binにphpのラッパーを置く
・実行権限をつける
・他ユーザからの書き込みアクセスはNG: chmod g-w

cat php
#!/usr/bin/php-cgi

.htaccess

AddHandler cgi-script .cgi
AddHandler php-script .php
Action php-script /~user1/cgi-bin/php


a2ensite 001-user
a2enmod userdir
a2enmod actions
a2enmod auth_digest


いろいろ試行錯誤しすぎて漏れがあるかもしれない

2016年7月20日水曜日

ScanSnap iX100 on Ubuntu Linux 16.04 (wine)その2

前回の結果、とりあえずScanSnap Managerをwineで起動するところまでは出来た。
でも、ものすごく読み取りが遅くて実用に耐えない。しかも3枚までしか取れない。
何が問題で遅くなっているのか見てみようと思った。

遅い原因を探す(DEBUGフラグ)


https://wiki.winehq.org/Debug_Channels
を参考にデバッグフラグをつけて動かしてみた。
 +relay,+snoop

OKなとき、↓のInitializeのCALLで色々やったあと、RETで戻ってくる。
808373:0038:CALL PfuSsImgCtl.SsICSRGBInitialize(<unknown, check return>) ret=060bc073
808395:0038:RET  PfuSsImgCtl.SsICSRGBInitialize(060f023c "ScanSnap iX100") retval=00000000 ret=060bc073

NGのとき、戻ってこない。
これは、以下で戻ってこないのが原因っぽい(SsICSRGBInitializeの中で呼んでいる)
003b:Call mscms.OpenColorProfileA(001c3c58,00000001,00000001,00000003) ret=037211bb

OKの場合は、以下のような感じで、
ReadFileしたあと、FreeHeapして戻ってくるだけ





2025424 0038:Call KERNEL32.ReadFile(00000294,0c522540,00000c48,0cf0ee18,00000000) ret=7c56bb29
2025425 0038:Ret  KERNEL32.ReadFile() retval=00000001 ret=7c56bb29
2025426 0038:Call ntdll.RtlFreeHeap(00110000,00000000,0c4f51c8) ret=7c56c102
2025427 0038:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=7c56c102
2025428 0038:Ret  mscms.OpenColorProfileA() retval=00000002 ret=037211bb


なのだが、NGの時は、スレッド0038はしばらく止まったあと以下のような感じでタイムアウトになる。
ロックしたまま開放されないのが原因であって、処理が遅いわけじゃないようだ。



2443843 0039:Call KERNEL32.Sleep(00000014) ret=00d7d00e
2443844 err:ntdll:RtlpWaitForCriticalSection section 0x7c575640 "handle.c: mscms_handle_cs" wait timed out in thread 003b, blocked by 0038, retrying (60 sec)
2443845 0039:Ret  KERNEL32.Sleep() retval=00000000 ret=00d7d00e

遅い原因を探す(printfデバッグ)


wineの最新をgit pullしてきて、dlls/mscms/handle.cで
mscms_handle_csの操作している前後に以下のような感じでprintfを入れて見てみる。

243     printf("%s:%d\n", __FILE__, __LINE__);
244     EnterCriticalSection( &mscms_handle_cs );
245     printf("%s:%d\n", __FILE__, __LINE__);

見てみようとしたら、動くようになってしまった。
printfの有無で動きが変わるので、タイミング的な問題のようだ。
根本的には何にも解決してないが、動くので良しとする。
(追記:やっぱり動かない。何が影響したのかわからない。)

カスタムwineをplayonlinuxで使う


wineのprefixをplayonlinuxのバイナリ置き場にする。
./configure --prefix=/home/****/.PlayOnLinux/wine/linux-x86/1-custom

あとはmake && make install


その他


これを調べてる最中にScanSnap Cloudってのがあることを知った。
これだと、PCなくてもiX100だけでキャプチャできるので、
linuxで動かすためにそこまで苦労する必要無かったかも。

でも、PCを介さず自動なのでレシートとか名刺がバラバラにJPGにされたりする。
ある程度制御したい場合はPCで使えたほうが便利。
なのでLinuxで動かすことに意味がなかったわけではない。(強がり)

あとは電波感度が良ければいいんだが。

追記


追記1:
やっぱり動かない。何が影響したのかわからない。
ログからすると、以下の2つの処理が遅いようだ。
P2ICRPPR.P2iGetDocPosMulti
P2IERASECLRBDR.P2iEraseClrBdr


2862806 1942566.330:003a:CALL P2ICRPPR.P2iGetDocPosMulti(<unknown, check return>
) ret=034b2c0f
3082841 1942605.508:003a:RET  P2ICRPPR.P2iGetDocPosMulti(0dd2cc6c,0dd2cca0,00000
000,00000000,0dd2d150) retval=00000000 ret=034b2c0f

3130018 1942619.899:003a:CALL P2IERASECLRBDR.P2iEraseClrBdr(<unknown, check retu
rn>) ret=034b37e6
3398921 1942702.424:003a:RET  P2IERASECLRBDR.P2iEraseClrBdr(0dd2cca0,0dd2cd9c,00
000000) retval=00000000 ret=034b37e6

追記2:
どうも使うwineをバージョン上げたりして変更したらしばらく使えるような感じがある。


2016年7月8日金曜日

ScanSnap iX100 on Ubuntu Linux 16.04 (wine)

前回の結果、とりあえずlinux上のソフトでScanSnap iX100を動かすことが出来たが、やっぱり使い心地は製品には及ばない。windows用のソフトを使いたいが、いちいち仮想環境を動かすのはめんどくさいから、できればwineで動かしたい。
 ScanSnap iX100はWi-Fi接続で使える機能がある。USB接続はドライバがそもそも動かないが、Wi-FiならOS関係なく動くんじゃないか?と考え、色々やった結果を以下に記す。

前準備


windows等で、Wi-Fi接続の設定をやっておく。

wineの準備


PlayOnLinuxで、wine-1.9.10-stagingを使った。文字化けしないようにwinetricksで以下を入れておく。
  • fakejapanese
  • fakejapanese_ipamona
(多分どっちかでいいと思う)

インストール


付属のCDからインストール



インストールは割とすんなり行った。
最後にUSBを接続して確認とか、Wi-Fiで確認とか、アップデートの確認とか出てくるが、USBが使えないと進めないので全部キャンセルする。
(おそらくこれはかなり重要。キャンセルせずUSBで固まったりすると、インストールが正常終了しないので、中途半端な状態になる。)

インストール後勝手に動く。PlayOnLinux Wizardが終了しないので、とりあえず一旦全部終了する。バックグラウンドで色々動いているので、それっぽいものは適当にkillしていく。
全部終わらせたらwizardが進む。

 


とりあえずはScanSnap Manager.lnkとScanSnap Managerの設定.lnkを登録しておけばいいと思う。

動かしてみる。


ScanSnapManagerを動かす。
.lnkだと起動に失敗したりする。「ScanSnap Managerの設定.lnk」の方を動かしたらいいかもしれない。



Wi-Fi接続をやってみる。



登録していないものには繋がらないようだ。
(他人にうっかり使われないようにみたいな配慮か?)

Wi-Fiにつなげる


色々ファイルを探しまわった結果、PfuSsMon.iniというのが怪しそうなので、これをWindowsから取ってきて置き換える。
コピー先:drive_c/Program Files/PFU/ScanSnap/Driver/

もう一度起動。

 

認識した。
スキャンしてみる。



ダメっぽい。

スキャンが失敗する原因


色々探しまわったら、詳しい情報が書いてあるサイトを見つけた。
なんか執念を感じるほど調べてある。すばらしい。

これを元に調べると(3) RAW画像の出力はできていて、(5)のJpgTmpへの出力ができていない。ってことで(4)のカラープロファイルのところで失敗しているっぽい。
で、もうちょっと上を見ると以下の2つを読んでいるらしい。

  • %SYSTEMROOT%\system32\spool\drivers\color\ScanSnap S1500.icm
  • %SYSTEMROOT%\system32\spool\drivers\color\sRGB Color Space Profile.icm 

このうち2個めのファイルがwineの方には無かったのでwindowsから取ってきて入れる。
コピー先:drive_c/windows/system32/spool/drivers/color/

 

よめた。
けど、変換が超遅い。
これはこれで実用にならない。

諦めた。
(と見せかけて続き

2016年7月5日火曜日

ScanSnap iX100 on Ubuntu Linux 16.04

なんとなく銀行の明細とか保管してしまう。
ほとんどの場合必要ないので捨てたいんだけど、
ごく稀に取っとけばよかったって物があるので、つい捨てるのをためらってしまう。
いい加減ゴミだらけになるので、PCに取り込んで捨てることにした。

 ○Linuxで使えそうなものを調べる。

SANEでサポートされているやつを調べて
http://www.sane-project.org/sane-mfgs.html

ScanSnap iX100ってやつを買った。
ゴミを整理するのに馬鹿でかいものは要らんかなと思ったので小さそうなやつ。

○一応Windowsから使ってみる。

うごいた。(当たり前)

○SANEで認識できるか?


$ sane-find-scanner

 を実行すると

could not open USB device 0x04c5/0x13f4 at 001:027: Access denied (insufficient permissions)

とかUSB接続のデバイスがずらずら出てくる。
アクセス出来てないようなので、とりあずrootで実行してみる。


found USB scanner (vendor=0x04c5 [Fujitsu], product=0x13f4 [ScanSnap iX100]) at libusb:001:027
  # Your USB scanner was (probably) detected. It may or may not be supported by
  # SANE. Try scanimage -L and read the backend's manpage.

とりあえず書いてある通りscanimage -Lを打ってみる。

$ sudo scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).

見つからないらしい。
googleによると/etc/sane.d/fujitsu.confに設定があるらしい。
確かに見てみたらiX500はあるのにiX100が無い。
↑で出てきたvendor IDとproduct IDを追記した。

#ScanSnap iX100
usb 0x04c5 0x13f4

もう一度やってみる。

$ sudo scanimage -L

device `fujitsu:ScanSnap iX100:1202619' is a FUJITSU ScanSnap iX100 scanner

なんか認識したっぽい。
sudo xsaneでスキャンしたら普通にうごいた。

○一般ユーザで動かしたい。


USBデバイスの権限の問題っぽいのでudevに書いた。
所有groupをscannerにしたけど、666なので関係ない。

 $ cat /etc/udev/rules.d/96-saned.rules
 SUBSYSTEM=="usb", ATTR{idVendor}=="04c5", ATTR{idProduct}=="13f4", MODE="0666",GROUP="scanner"

(scannerグループはsaneを入れた時に作られたのかもしれないが、
ユーザをscannerグループに入れても何の影響もなさげ。
何のためのグループなのか?)

○スキャナソフト


・xsane

問題外レベルで使いにくい。

・simple-scan

名前の通りsimple、手動だがトリミングできる。

・gscan2pdf

余白を自動トリミングしたりできる。(完璧ではない)
色々パラメータをいじればなんとか使い物になるかも。
たまにバグって止まる。なんか遅い。

○結果

苦労してlinuxで動かしたけど連続で何枚も取るなら
virtualbox立ち上げてwindowsからやったほうが良い。という結論になった。
wineでwifi接続で動けばいいんだけど、wifiで認識させるときにUSB繋がないと登録できないみたい。


あと、何枚も取ると疲れる。
ちょっとでかいやつ(複数枚セットできるやつ)買えばよかった。

・linuxで取ったやつ


gscan2pdfの結果。調整次第だが、windowsの3倍位のサイズ。
トリミングは3回に1回くらいうまく行く。
向きは手動で合わせる。




・windowsで取ったやつ



ScanSnap Managerで自動でこうなる。サイズも1/3くらい。さすが商品レベル。

















wineで動かそうとした続き↓

ScanSnap iX100 on Ubuntu Linux 16.04 (wine)
ScanSnap iX100 on Ubuntu Linux 16.04 (wine)その2

追記:
ScanSnap Cloud使えば何もしなくても全て解決する

2016年6月29日水曜日

selenium webdriverで古いバージョンのfirefox

firefoxの仕様がちょこちょこ変わるせいか定期的にwebdriverが動かなくなる。
いい加減にしろと言いたいとこだけど、
どうしようもないので、古いバージョンで動かすことにした。

環境: linux (ubuntu 16.04), ruby 2.3.0, selenium-webdriver

以前のバージョンの Firefox をインストールするには
から、linux用のちょっと前のバージョンをダウンロードして、適当に展開。

WebDriverを開く前に一行追加する。
(開くときにダウンロード先の指定とofxファイルのmime設定をしているが今回の件とは関係ない)


 ↓追加

 Selenium::WebDriver::Firefox.path = "展開したところ/firefox/firefox"

 profile = Selenium::WebDriver::Firefox::Profile.new
 profile["browser.download.useDownloadDir"] = true
 profile["browser.download.dir"] = '~/smbc'
 profile["browser.download.folderList"] = 2
 profile["browser.helperApps.neverAsk.saveToDisk"] = "application/x-ofx"
 driver = Selenium::WebDriver.for :firefox, :profile => profile



2016年5月17日火曜日

wineで体験版2






alicesoftのevenicle(イブニクル)っていうソフトの体験版をwineで動かしてみた。

以下の手順

1.PlayeOnLinuxで1.9.9を入れる。
2.Install Componentsからquartzを入れる。
3.Install Componentsからwmp9を入れる。
4.体験版ファイルをコピーして入れる。






ムービーもほぼ完璧に動いた。
ストレスなく遊べて結構普通に面白い。
ここまで完璧にゲームが動くことも少ないので、せっかくだから買おうかな。
とおもったけど、ダウンロード販売の奴はソフト電池とかいう仕組みが必要っぽい。
ソフト電池のサイトからテスト用のやつをいろいろやってみたが、
どうもLinuxで動かすのは無理そうなので諦めた。