読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

WGoエディタ

追記(2016-11-14]
SabakiというElectronベースの良さげなSGFエディタがありました。

github.com

こちらを利用させていただきます。なのでWGoエディタの開発は中止します_o_

version 0.19.0のmacOSバイナリはうまく動かないようです。githubレポジトリをcloneしてnpm run build:osxしてできるアプリはうまく動きました。

WGo.jsを使ってSGFエディタを作りました。

github.com

NW.jsを使いました。NW.jsいいですね。クライアントサイドのウェブアプリがそのまま載って、システムにアクセスする部分だけNode.jsのAPI使って追加したらいい。メニュー部分で少し悩みましたが、簡単に作ることができました。

Excite翻訳非公開APIの変更があったようです

Exciteの翻訳は特に中国語、韓国語の翻訳の精度が高く重宝しています。
また、URLにクエリパラメータを指定すると指定の翻訳ができるのも便利でした。
最近、(6月20日頃から)この、クエリパラメータ指定がうまくいかなくなって、原因を調べたところ、HTTPメソッドがGETでいけていたところがPOSTに変更になったようです。

URL: http://www.excite.co.jp/world/chinese/
parameters:
    before: <翻訳したい文章>
    wb_lp: <言語指定>

でHTTP POSTすると翻訳を載せたウェブサイトを取得できます。<言語指定>は、例えば中国語を日本語に翻訳するなら、"CHJA"と指定します。

Mac用外付けSSDドライブ

[2016年7月6日追記]
以下の内容間違っていました。
trimforceを使わない(disable)状態でもその後フリーズが起こるようになりました。
どうもネットワーク絡みのようです。フリーズした時にWiFiルータを再起動すると復帰する感じがあります。



要約

  • ELECOM SSD ESD-E0256U3はMacの起動ディスクとしては使えなかった。
  • Transcend Thunderbolt対応 USB3.0/2.0 SSD StoreJet for Mac TS256GSJM500はMacの起動ディスクとして良好。ただし、sudo trimforce enableはしてはいけない。

27インチ iMac Late 2012を愛用しています。
最近のOS Xへの不満は置いておいて、ハードディスクのスピード以外全く不満ありません。
ただ、MacBook AirSSDに慣れたせいか、特に起動時のハードディスクの遅さだけは不満でした。
(円安が進んだ時に、未カスタマイズの型落ち品を買ったのでフュージョンディスクではないのです)

購入して3年近く経って、外付けSSD付けたら解決することに気がつきました^^;
今年の4月に購入して色々あって最近安定してきたので、メモを残します。

最初に、ELECOM SSD 外付けSSD 256GB USB3.0 MLC ESD-E0256U3Fを購入しました。
起動用ディスクで速度を求める場合、MacならI/FとしてUSB3.0かThunderboltの選択肢があります。
Thunderboltはまだまだ割高なのでUSB3.0を選びました。

結論ですが、この製品は追加ドライブとして使用した場合十分な性能が出たのですが、起動ドライブとしてしようすると速度が出ませんでした。ハードディスクより遅いぐらい。
初期不良かと一度交換してもらいましたが、現象は変わらず。返金ということになりました。

次はTranscend Thunderbolt対応 USB3.0/2.0 SSD StoreJet for Mac 256GB TS256GSJM500を購入しました。USBコントローラの相性問題があるかと思うと他のUSB3.0製品を試す気持ちになれなかったので、少し奮発したということです。

この製品は、起動ドライブとして使っても素晴らしいスピードで、ずいぶん快適になりました。
巷の記事に従って、早速trimをenable。(使用しているうちにSSDのスピードが遅くなる現象を回避できるらしいです)
これがよくなかったようです。

満足して使っていたのですが、どうも2日に1度ぐらいの頻度でOSがフリーズします。おかしいなと思いつつ、電源を落として入れ直せばすぐ起動してくれるのでまあいいかと^^;

最近、流行りのディープラーニングをやり始めました。これがまた2日3日と走らせる必要があります。
フリーズされたら何時間何十時間が無駄になります。

なので、フリーズの原因を探るべく、最初にやったのがtrim disable。
1週間以上経ちますがフリーズしなくなりました。

Maxima日本語マニュアル更新

5.38.1に更新しました。

http://maxima.osdn.jp/maxima.html

トップページに\input texinfoと表示されていて、マクロの処理がおかしい感じです。
オリジナルでもそうなるので、申し訳ないですが放置しています^^;

Meteorのappcacheの有効活用

Meteorは、appcacheというパッケージを追加するだけで、Application Cacheを利用できます。
手作業だと、manifestをしこしこ書かないといけないのでとても楽です。

ただ、Meteorのappcacheは静的リソースのサーバー側での動的変更をサポートしていて、このために、オンラインの時には静的な画像もクライアントは毎回サーバーにリクエストし、サーバー側は変更がなければステータスコード304を返します。
静的な画像が多いとこのパケットの往復がバカにならない。
なので、一度デプロイしたら更新しない静的リソースはオンラインでもApplication Cacheを使うようにしたいです。

以下、そのためのハッキングです。

Meteor.startup ->
    unless Meteor.AppCache?
        return

    for resource in WebApp.clientPrograms['web.browser'].manifest
        if resource.url?
            if resource.url.indexOf('/images/') == 0 # 例えば、/public/images/以下のリソースが対象
                resource.cacheable = true # オンラインでもキャッシュを有効化
    return

Meteorのソースコードを見ると、リソースのハッシュを取ってくるヘルパーを作って、アプリのURL指定の部分にハッシュを埋め込むようにと書いてあったのですが、CSSのURLにヘルパー埋めるのは大変なので、cacheableがオフになっているところ、強引にオンにしました。

appcacheのさらなる高速化を求めている方のご参考になれば幸いです。

サイトの画像を一括ダウンロード

訳あって、サイトに表示されているimg画像を一括してダウンロードするスクリプトを書きました。

((func) ->
    scr = document.createElement 'script'
    scr.src = "//ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"; # 短いのに大げさですが、jQueryを使います
    scr.onload = ->
        func jQuery.noConflict true
    document.body.appendChild scr
) ($) ->
    $('img').each (num) -> # セレクタを変更すると欲しい部分だけにしぼれる
        a = document.createElement 'a'
        a.download = num + '.jpg' # jpg決めうちの品のないコード
        a.href = $(this).attr 'src'
        evt = document.createEvent 'MouseEvent'
        evt.initEvent 'click', true, false
        a.dispatchEvent evt
        return
    return

これをコンパイルして、自分のサイトに置きます。

次に、このスクリプトを読み込むブックマークレットを作ります。

javascript:(function(d,s){s=d.createElement("script");s.src="<スクリプトのURL>?"+Date.now();d.body.appendChild(s)})(document)

取得したいサイトを開いて、ブックマークレットをクリックすると、画像のダウンロードが始まります。
(Chromeの場合、初回だけ複数ダウンロードを許可するかどうか確認のウィンドウが開きました。)

ファイル名に<番号>.jpgを指定していますが、他の種類の画像もあるので、本来対称のsrc属性を調べて決定すべきです。
src属性からハッシュを消して拡張子を取り出すのがそれっぽい処理ですが、srcはdataURLの場合もあるのでご注意ください。

不具合

Chromeの場合、最初の0から19までの画像は<番号>.jpgの名前で保存されましたが、それ以降はimages.jpeg, image (番号).jpegという名前になりました。なぜでしょう?自分の用は足せたので原因を調べたりしていません。あしからず。