2016年8月8日月曜日

タブレット故障

なんかまたタブレットが壊れた。もうそろそろ5代目くらい。

液晶ムラみたいなのは計算に入れず、致命的な死亡パターンって
①USB不良と②タッチパネル死亡が2大死亡原因で、昔っからずっと変わってない。

今回もやっぱりタッチパネル。ビビビビっと押さえてないところの
タッチを検出してパターン認証さえままならない。

持ち歩かなければ壊れないがそれではタブレットの意味が無いし、壊れるたびに仕方ないかと思う反面、そろそろどこかのメーカーがこの宿命的壊れ方に対して真剣に取り組んでくれないだろうかと思う。

2,3年で必ず壊れているような。
毎度のことながら割り切ってるつもりでも案外切ない。

なんか壊れにくくて壊れても交換が容易な方法ってないのかな。

パナソニックのタフブックとかどうなんだろう。

2016年7月29日金曜日

QWERTY キーボードの楽器の入力デバイスとしての有用性って

DTMの始め方とか探ってみたり。 お金をかけるのは極力なしの方向で。

DTMを始めるとき、まずシーケンサーやらDAWやらシンセサイザーやらVSTとかMIDIやらシンセ用語がよくわからないってのがひとつのハードルになってると思うのですが、ぼんやり3割くらい理解できるようになってきた。 

最低限必要なのは

  • vst host
  • 音源(VST Instrumentというやつ)


で、まあこれだけで音を作って鳴らすことができる。 ただ、コンピューターが楽器と呼べるレベルになるかというとそうでもなくて、qwertyキーボードで音を鳴らすのは結構キツいものがある。

これを楽器を扱う感覚で鳴らすにはMIDI鍵盤などを追加する必要がある。

が、ここでMIDI鍵盤を追加するのはちょっと本末転倒なんじゃないかと思ったり。

どういうことかというとPCの中に音楽制作環境を作ろうとしているのに外部パーツを安易に増やしていいんだろうかってことで。

果たしてjp106QWERTYキーボードを楽器レベルに昇華することはできないのか。

確かに普通の鍵盤と比べるとキーボードは横幅もないし、ハード的にベロシティの入力ができないなど不利な面もあるのだけど、考えようによっては、面白い特徴もある。

まずキーの数は結構多い。アルファベットだけで26キーあるし数字やファンクションキーテンキーを合わせると50は軽くある。奥行きがあるぶん、直線に並べた時より、直感的ではないが、うまく使えば演奏時の手の移動距離は小さくできそうだし、より多くのキーを押さえることも可能かもしれない。

そして、鍵盤と違ってカスタマイズが容易という利点もある。

で、QWERTYキーボードを純粋に楽器の入力装置として使えないか、調べてみると、freepianoというソフトを見つけた。
VirtualMIDIケーブルを使えば、MIDIデバイスであるかのように使用することもできる。MIDI Yokeというソフトを使う。また、freepiano はVSTi を直接インポートできたりするので、VSTHostが無くてもちょっと音源単体を鳴らしてみたい時にもつかえてなんかいい。音質はよくわからない。

このソフトを使えば入力は可能になったが、♯や♭を鳴らす時に難があって、キーマップをいじる必要があるみたい。だが、カスタマイズはフルスクリプトではないもののある程度の事はできそうだった。Key UP Downによって定義済みの変数を変更したり 複数の NOTE ON を送ったりはできるようだ。

おもしろそうだ。キーボードを擬似鍵盤として定義するとやっぱり劣化鍵盤としての位置にならざるを得ないけど、全く新しい入力装置としてゼロから再定義するならばどういう形になるだろうかと考えたり。 例えばドは必ずしもレの左側に配置する必要もないのではないかってこと。せっかくキーボードには奥行きがあるのだからそれを活かすインプットメソッドを模索できる余地がありそうかなあと思いながら、楽器も弾けない癖にポップコーンをはじいてみたり、和音を押してみたりしてみたり。

すると、なんか致命的な欠点を発見した。自分のQWERTYキーボードには同時に押せないキーがある。logicool の K360というやつだがKとWとRを同時に押したとき、どうやってもそのうち二つまでしか認識しなかった。ハード的にそういうモノらしい。

やっぱりQWERTYキーボード奏者になる事は叶わなかった。ま、モノシンセだったら問題ないっちゃないけど。

ただ、希望が無いわけでも無い。
確かにQWERTYキーボードはキーを押せない。しかしゲーミングキーボードはどうだろう?
ゲーミングキーボードは同時押しの制限があまりないようだ。だとすればこれを買えばもう少し遊べたかもネ。

でもそうなってくると、グダグダやってないであきらめてMIDI鍵盤買えよってハナシになるので微妙なところなんですけど、知りたいだけで、楽器やDTM使いになりたいってわけでもないし、みんながやったことが無い事をやるという意味ではゲーミングキーボードを買うのもありかも。

2016年7月21日木曜日

Strongswanはどうなったか

なんかわからんがIKEv2 公開鍵認証方式でAUTH_FAILが返ってくる。

きいては見たが、rightid の設定らしい。

証明書には alternertive dn だかを設定する方法があるらしく
それとIPなりホストが合う場合はすんなりいくようだが、
それが無い場合 Full Subject Name?
を指定してやる必要があるようだということだった。
しかし、ちゃんとSubject name を指定たつもりでも結果は同じだった。
というかちゃんとできてないのかもしれない。しかしそれを確認するパワーが尽きた。

頭の隅にrightid はIPなりホストなりがAlternertive DNに合わない場合は
Public Key 認証方式は面倒くさくなるという事をとどめておいて
また、仕事などでやる機会があればじっくり腰を据えて取り組もうとは思う。
マスタリングTCP/IP IPSec 編がちょっとほしくなった。

まあ、個人使用の場合 OpenVPNで十分だし設定も簡単なので、こっちがうまくいったら
あまりIPSec/L2TPにこだわる必要は無いのかなと思う。

飲み会でAndroid機でWindows10が動くデモを自慢するのに裏でOpenVPNが動いてようが、
IPSec/L2TPが動いてようが、効果に変わりはないと思うのね。

StrongSwan でなければならない状況というのは
ネットワークの関係でOpenVPNが使えないとかClientソフトがインストールできないという場合等があるかな。

中国内からグレートファイウォール越えのときとかOpenVPNだけ封じられる危険性もないわけではないし。やっぱりStrongSwanの重要さは高いのだろうけど、ふつうの日本のふつうのケーブルテレビネットワークにつないでいる人間にはどちらかひとつ使えるようにしてしまえば、そこまでの情熱は沸かないというのが本音だなあ。

vpngate のページを見ても IPSec なサーバ数は多くないようだった。

2016年7月15日金曜日

Vpnの方は動くようになった

openvpn はまあまあ快調である。
ただ wake on lan はやっぱり効かない。lanには接続できているブロードキャストが届かない。
スイッチングハブかコンバーターかvirtualbox ブリッジのどれかの時点で学習してブロードキャストをブロードキャストせず知らんという奴がいてそう。
ノートPCのポートに到着してなさそう。
スイッチングハブはそもそもipアドレス面倒みないのでarpを削除してしまえば、こいつが犯人では無いと思う。
bridgeも然り。またrpi に送ってもらっても届かないので経路地図的に可能性は低い。プラネックスが怪しい。コンバーターも本来いらんことをしないがプラネックスのmf300nは信用ならない。なんかこいつがいらんことしてそう。でも確証はない。しかしこいつには前科がある。

Wake On LANが効かない事があるのは、スタンバイに入ってしまうとWake On LAN が効かなくなるのが原因だった。自分でも意識しないうちにスタンバイに入ってしまうパスがあったらしい。

ハード的にはスタンバイでもWake On LANにする方法はありそうな気もするのだけど、そこまでわからんので、スタンバイや省電力モードの設定をことごとく見直し、電源オフ、ログアウト、再起動以外を選択できないように調整した。

結果、Wake On LANが効かなくなる状況は発生しなくなった。

OpenVPNはすこぶる快調。

リモートデスクトップの方は回線の質によってパフォーマンスにだいぶ差が出る印象。

クライアントのCPUはちょっと前のATOM程度の能力があれば実用に耐えそう。

同じ有線LANネットワークでは音飛びが主な不具合だが、
無線LANになると、JPEGのようなもや付きが少し気になるようになり、
インターネット回線1Mbps くらいになってしまうと間引かれたコマのせいでだいぶカクカクする。
艦これでいうと、何回かの攻撃エフェクトがとんでいつの間にか大破してるくらいの感じ。
それでも艦これはネイティブ版よりリモートデスクトップの方が早い気もしないでもない。
オフィス関係であれば、ここまでしんどくないだろう。

通信量はかなり大きく、やっては見たが、通信量の壁をサクッと超えてしまう勢いなので、
Wifi フリースポットの無いところでは飲み会での小ネタで見せびらかす以外に使い道はなさそうな感じ。dock操作だけでたぶんパンクする。

OpenVPNも試してみる

ちょっと煮詰まったので、strongswan の方は人に訊くことにして
OpenVPNで遊ぶ。OpenVPNの方はOpenWRTでやる場合は特に簡単。
OpenWRTのHOWTOの完成度が高く、ほぼコピペでいける。

無事 Android から通信の秘密を守りながら軍事機密の多い提督業を遂行できたが、
外から接続したときは提督業は遂行できなかった。

正確に言うと外から外へはアクセスできる。外から中はできない。

中国に機密情報を漏らしながら、提督業などとあり得ないハナシだ。
チャイナの赤盾回避には使えそう。

だが、あえて敵の懐に潜り込んだまま、機密通信で指令を出したい時もあるではないか。
時には外からもLANにアクセスしたいのである。

それはOpenVPNがRouterモードで起動していてやっぱり自己の名乗るIPは外のままだから弾かれているようだ。これを回避するには2通りあるかなと思った。一個はブリッジモードでOpenVPNを使うかもう一つはOpenVPNで作ったトンネルデバイス毎にNATを設定してやる事かな。

~~~~

(7/21 追記)
これはpush route add 198.168.1.1/24
みたいなのを設定ファイルに書く事で実現できるので↓の思考は無駄であった。
push route add openwrt で検索。

~~~

Googleで調べたら、こんなのが出てきた。

OpenVPNクライアントをゲートウェイとして、LAN内の別クライアントがVPN先のマシンにアクセスする

こいつは素晴らしい。
でもdefaultに設定されてないトンネルデバイスはNATの対象にならないため、サーバ側と逆のハナシになるみたいでちょっと違うな。

デフォルトゲートウェイはあってるが、割り当てたtunインターフェイスについてNATしてほしい。

2016年7月14日木曜日

Windows 10 でWifiが起動直後だけつながらない場合の対処法

Windows 10 が起動直後だけネットにつながらないマシンがあった。

ルータのOpenWRTとバッファローのWHR-300HPの組み合わせはド安定しているからルータの責任ではない。
1日2回再起動していたのがウソのようで何週間もほったらかしで再起動の必要もない状態。

ちなみに電源OFFのあとの起動は繋がらないが、リブート直後はつながる。

VISTAではちゃんと動いていたので、たぶん高速起動が原因っぽい。

高速起動OFFにして様子見。

今のところ問題無さそう。

たぶん治るだろう。

ところでバッファローのルーターは完璧ではないけどなかなか好きだな。
また買うかもしれない。遊べるルーターなので。

安定度でいうと?なのだけど、使えないほどではないし、使用者も多いので前評判を得やすい。さらにOpenWRT等のフリーのファームが対応している確率が高く、完全に使えないゴミクズにはなりにくい。elecom とは違うのである。

フリーのファームウェアOpenWRTはうまく動けばかなり安定性が高い。

300HPの方は標準ファームウェアではルータとしての機能、安定性では一流メーカーには及ばないだろうが値段が倍以上するのであまり比べてあげるのはかわいそう。

腐ってもアクセスポイントとしての安定度は素晴らしいので有線ルータで安定性の高いものと組み合わせればそれなりに使えて、ダメージ無いのがいい。

2016年7月13日水曜日

CA Cert はふつうの認証ファイルではないとかぐだぐだぐだ

L2TP/IPSecを諦めて Public key によるサイト認証の設定してる。
L2TP諦めたけど、なんだか、もうちょっと頑張るべきだったか。

サーバ側のログの見方が少しわかってきたので、もう少し頑張るネタあったかもと思ったり。

ipsec.conf の

config setup セクションに

charondebug="ike 2, knl 2, cfg 2, net 2"

を書き込んだ後で、ipsec restart をする。

↑に書いてある。他にも出力を制限したり増やしたりできるオプションはある。

出力に設定したログは
openwrt では cat や tail -f で見る感じではない。
ふつう/var/log/messageとかかと思ってたけどそんなファイルない。

logread というコマンドを打てば読める仕組み。

ストレージが小さいからそうしたのかも。

さて、サーバー認証をやっているが、なかなかこれもうまくいかない。

仕組みが難しい。

openssl を勉強する。

http://d.hatena.ne.jp/ozuma/20130511/1368284304
等をみてカギ、認証要求、証明書等用語の意味と作り方はだいたいわかってきたのだけど、
ただ、CA 認証ファイルはふつうの認証ファイルとして作成してはいけないようなので完全に正確ではないようだ。

ソフトによってはbasic constraints に引っかかって無視される。
strongswan もbasic constraints に従わない証明書は受け付けないみたい。

なので

strongswan でも通るCA証明書を作るには別の方法が要りそうだ。
http://int128.hatenablog.com/entry/20090117/1232124815
これかなあ。

ざっと見た感じ、CA.sh で作って見てそれでもおかしくなるのであれば、別の方法考える。

ちなみに cygwin 32bit の openssl の場合、CA.sh がどこだか分らなかったので、
find . | grep CA.sh
してみたところ
/usr/ssl/misc以下みたいで

openssl 関係のファイルは
/usr/ssl以下を探ればいいということらしい。

あと、32bitのPCで使ってる方のVirtualBoxがどうしてもVMにUSBデバイスを割り当てできない。
64bit の Intel CPUのほうは全く問題なくデバイスの割り当てができるが、
AMD のC60のほうではまるでダメ。
たぶんVirtualboxが動く最低スペックなので文句が言える立場でもない気がする。

で、Cygwinで出力した認証ファイルをopenwrtに持ち込むのに難儀した。

wget でやり取りするとか
もっとトリッキーにiso ファイルでやり取りするとか。

iso でやり取りする場合は

cygwinにmkisofs をインストールして

mkisofs -r -o cert.iso ./path_to_cer_folder
したのち cert.iso ファイルを GuestAdditions.iso みたいな感覚でマウントしてあげればよい。
-r オプションが無いとファイル名が短くなって使いづらい。

openwrt には fstab が無いのでマウント時は全部オプション指定しないと文句言われる。

mount /dev/sr0 /mnt -t iso9660

cd /mnt

このあたりのコマンドは最近のLinuxは打つ必要がないので久しぶりな感じ。

raspberrypi に nfs とか入れてみたいけどなー。

認証局の管理ツール。

http://www.openvpn.jp/vpnux-pki/

これ良さそうだ。

2016年7月12日火曜日

L2TP/IPSecなサーバを立てたい(迷走メモ) Vol.4

作業記録。めちゃくちゃな走り書き。VOL4

★★★ Step 10 L2TP は諦める ★★★

13:11:41.633586 IP 192.168.1.156.56747 > 192.168.1.32.1701:  l2tp:[TLS](0/0)Ns=0,Nr=0 
*MSGTYPE(SCCRQ) *PROTO_VER(1.0) *HOST_NAME(anonymous) *FRAMING_CAP(AS) *ASSND_TUN_ID(31946) 
*RECV_WIN_SIZE(1)
13:11:41.633688 IP 192.168.1.32 > 192.168.1.156: 
ICMP 192.168.1.32 udp port 1701 unreachable, length 105
13:11:41.634490 IP 192.168.1.156.56747 > 192.168.1.32.1701:  l2tp:[TLS](0/0)Ns=1,Nr=0 
*MSGTYPE(StopCCN) *ASSND_TUN_ID(31946) *RESULT_CODE(6)
13:11:41.634542 IP 192.168.1.32 > 192.168.1.156: ICMP 192.168.1.32 udp port 1701 unreachable, length 72

どんなに設定を見直しても OpenWRT 側 Firewall で1701のポートが閉じているなどという事は無いように思う。port unreachable で見直すのはたぶんfirewall だけではないのではないか?もしfirewall を適切に設定していたとしても、port unreachable が発生するパスがあるような気がするのだけど、全く確証もない。なんにせよ、Android から要求があった時点でポート1701の準備ができてないのは間違いないようで、それ以上何もヒントがなくなってしまった。

Android の期待するシーケンスと、strongswan の期待するシーケンスが違うのではないかって気がするのだが、確証はない。
設定によって避けれるのかどうかもよくわからなかった。strongswan と違ってandroid の方は特にエラーメッセージも吐かないし。

L2TP/IPSec はもうちょっとデファクトスタンダードな、これを選べば間違いないものが決まってきたらいいんだろうけど、そういうのが無い。IKE のバージョンやら plute charon やら NAT Traversalやら認証方式も暗号化や、使えるソフトも多すぎてよくわからない。

みんなが使うであろう一番簡単なオプションを選択しているつもりでもわずかに違うものを選択するだけで動かなくなる可能性がある。バージョンアップなどで動かなくなるリスクもかなり高い。メールサーバ以上に設定が疲れる。
とりあえずL2TPを使う事はいったん忘れることにする。

いつかまたやるかも。

L2TP/IPSecなサーバを立てたい(迷走メモ) Vol.3

作業記録。めちゃくちゃな走り書き。VOL3

★★★ Step.9 fresh install again 5回目★★★

設定がごちゃついてきたのでまたVirtualBox に OpenWRTインストール。

5回目。寝ていてもできそうだ。

IPSec の設定が難しいというのはやっぱりステップバイステップで動作確認しながら設定するのが難しいからだと思う。もし、仮想PCのソフトが無い時代だったらほんとに吐きそうになっただろうな。

ハードディスクの初期化だけじゃなくて配線とかもしないといけないわけだし。

今日はAndroid との接続を試してみているがどうにもつながらない。

今日のダメ記録
13:11:41.633586 IP 192.168.1.156.56747 > 192.168.1.32.1701:  l2tp:[TLS](0/0)Ns=0,Nr=0 
*MSGTYPE(SCCRQ) *PROTO_VER(1.0) *HOST_NAME(anonymous) *FRAMING_CAP(AS) *ASSND_TUN_ID(31946) 
*RECV_WIN_SIZE(1)
13:11:41.633688 IP 192.168.1.32 > 192.168.1.156: 
ICMP 192.168.1.32 udp port 1701 unreachable, length 105
13:11:41.634490 IP 192.168.1.156.56747 > 192.168.1.32.1701:  l2tp:[TLS](0/0)Ns=1,Nr=0 
*MSGTYPE(StopCCN) *ASSND_TUN_ID(31946) *RESULT_CODE(6)
13:11:41.634542 IP 192.168.1.32 > 192.168.1.156: ICMP 192.168.1.32 udp port 1701 unreachable, length 72

156の方がアンドロイドマシン で.32の方がxl2tpd + strongswan の方
android が繋ごうぜって言ってる気がするのだが
サーバの方が、さっきのパケットは届かなかったみたいな返答してじゃあやめる
ってなってる気がするんだよね。

ただ、ファイヤーウォールとか1701INPUT ACCEPT 設定にしてるんだけどなんで弾くのか。
即答で着かないってくそー。オレのPCヤギが棲んでるな。

L2TP/IPSecなサーバを立てたい(迷走メモ) Vol.2

作業記録。めちゃくちゃな走り書き。VOL2

★★★ Step.6 StrongSwan以外に必要そうなヤツいれる ★★★

vpn.ipsec.basics 

strongswan のインストール時がちょっと変だったが
vpn.ipsec.basics にも strongswan ではなく strongswan-defaultと書かれているので
strongswan-defaultのインストールが成功し、
strongswan パッケージのインストールが失敗したけどまあいいか。

(後記:strongswan パッケージは無視して、strongswan-full をインストールすべし、strongswanパッケージは-fullを入れれば勝手に入る。入れないとコンフィギャ失敗する)

StrongSwan以外にip、iptables-mod-nat-extra、djbdns-toolsが要るようだ
 
opkg update
...(略
opkg list ip
opkg install ip


opkg list iptables-mod-nat-extra
opkg install iptables-mod-nat-extra


opkg list djbdns-tools

むむむむ、んなファイル無い。
djbdns-tools は何故必要とされていたんだろうか?

現状このパッケージは無視の方向。

diff を使いたいので

opkg install diffutils

★★★ Step.7 OpenWRTなマシンをもう一つ作る ★★★

ここまで来て気づいたが、IPSecを試験するには単体では無理だ。
VMをクローンする

Oracle VM Virtualbox マネージャ

仮想マシンを選択して クローン(O)
全てのネットワークカードのMACアドレスを再初期化(R)にチェック

シリアルポートの パス/アドレスを変更
\\.\pipe\vbox2

クローン先のネットワークアダプター2はクローン元のアダプター2と独立している必要がある。
Oracle VM Virtualbox マネージャ
ファイル(F)⇒環境設定(P)⇒ネットワーク⇒ホストオンリーネットワーク(H)→+追加
アダプター(A) IPv4 アドレス 192.168.178.2 ネットマスク 255.255.255.0

クローンを起動
/etc/conf/network

config interface 'lan'
        option ifname 'eth1'
#       option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.178.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

ここで構成図を書き直した方がいいんだろうな。
HostOnly1[192.168.254.2]<->[192.168.254.1]OpenWRT1[192.168.1.202]<->[192.168.1.116]OpenWRT2[192.168.178.1]<->[192.168.178.2]HostOnly2

で、ホストからはHostOnly
以外に192.168.1/24にもアクセスできる状態。
この状態でOpenWRT1をネットワーク192.168.254.0/24 へのゲートウェイトしてOpenWRT2からIPSec を試みる。




★★★ Step.8 最低限のIPSec connection★★★

ドキュメントを読んでいるとなんかIPSec = VPN という気がしない。
VPNを達成するのにIPSec を使っているだけであって本来は
Ethernet 接続を セキュアにする目的。
そこが設定が難しいと言われる根源なのではないかという気がしてきた。

ikev1 PSK IPv4

の例を参考にする。
OpenWRT1が moon 的位置づけ
OpenWRT2が carol という事になるんだろうなあ。

まずファイヤーウォールをどげんかせんといかん。
まず、INPUT,FORWARD,OUTPUT DROP,REJECT,ACCEPTの意味もよくわかっとらんので
Linuxで作るファイアウォール[パケットフィルタリング設定編] (1/2)
を読んでみる
おそらくここの設定がOpenWRT の FireWall 設定General Setting のところになるだろうか。
OpenWRT1のWAN->LANは自らサービスを提供するから INPUTはACCEPTにしなければならないだろう。
OUTPUTもACCEPTでいいだろう。FORWARDもACCEPTでいいか。
NAT が要るか要らないか。
現段階では192.168.1.0/24のネットワークだけのハナシで要るようなきがしない。
HostOnlyNetworkにつなぐようになる場合も
適切にStatic Routeを設定さえすれば、いいのではって気がする。
今はとりあえずOFFにしておく。

OpenWRT1は ipsec を誰かに任せるわけではないので今のところPortForwardも設定不要か。

OpenWRT2の方は実際に指定するIPが違うだけでパターンは同じで良さそうだな。

現段階ではかなりのノーガードになってしまうが、こいつがすぐにFirewallになる事もないしDMZに配置されることもないから、遊んでる現状ではこれでいいだろう。
不要なポートの戸締りは実用化段階で検討。

OpenWRT1
/etc/ipsec.conf
config setup
        # strictcrlpolicy=yes
        # uniqueids = no
conn %default
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1
        keyexchange=ikev1
        authby=secret

conn openwrt2
        also=rw
        right=192.168.1.116
        auto=add

/etc/ipsec.secrets
# /etc/ipsec.secrets - strongSwan IPsec secrets file

192.168.1.202 192.168.1.116 : PSK 0sFpZAZqEN6Ti9sqt4ZP5EWcqx

OpenWRT2
/etc/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file

# basic configuration

config setup
        # strictcrlpolicy=yes
        # uniqueids = no
conn %default
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1
        keyexchange=ikev1
        authby=secret

conn home
        left=192.168.1.116
        leftfirewall=yes
        right=192.168.1.202
        rightsubnet=192.168.254.0/24
        auto=add

/etc/ipsec.secrets
# /etc/ipsec.secrets - strongSwan IPsec secrets file

192.168.1.116 : PSK 0sFpZAZqEN6Ti9sqt4ZP5EWcqx


以降 OpenWRT2から実行

ipsec restart

ipsec up home


なんかつながってはいるようだ。
ただ、暗号化されているかパケットが見えない。
oot@OpenWrt:/etc# ipsec status
no files found matching '/etc/strongswan.d/*.conf'
Security Associations (1 up, 0 connecting):
        home[1]: ESTABLISHED 11 minutes ago, 192.168.1.116[192.168.1.116]...192.168.1.202[192.168.1.202]
        home{1}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: c326ca0a_i c3dc83fc_o
        home{1}:   192.168.1.116/32 === 192.168.254.0/24
root@OpenWrt:/etc# ping 192.168.254.2
PING 192.168.254.2 (192.168.254.2): 56 data bytes
^C
--- 192.168.254.2 ping statistics ---
15 packets transmitted, 0 packets received, 100% packet loss

うーんPINGが通らない。192.168.254.1へは通るようになったが…。

問題切り分けのためにOpenWRT1からtraceroute をすると traceroute 192.168.254.2 が通らない。
traceroute を試してみたがbusybox の traceroute は -I オプションでもICMPを送らないような設定にできるらしく、OpenWRTのbusybox もビルドオプション見てない
CONFIG_FEATURE_TRACEROUTE_USE_ICMP was set to n っぽい。
busybox は Trace route は UDP ガチガチでICMPと結果は違うものになる。

WindowsファイヤーウォールをOFFにしたら traceroute が通るようになったかも。
まさかと思ったがWindows firewall 仕事してるんだ…。

でもやっぱりOpenwrt2 192.168.1.116から192.168.254.2へはPINGもtracerouteも通らない。

Secure connection は張れてるっぽい。でも接続先のGatewayがFirewallになってしまっている状態。

route の設定をちゃんとしても、ポートの設定をどうやって設定してもそっから先に
Pingが飛ばなかった。

うーんとにかくやたらめったにコマンドを打って様子を観察した。

wiresharkをやろうと思ったが、流石にハードルが高いのでtcpdump で観察したり。

原因の一つはルートをちゃんと設定できてなかったこと。
クライアント側はデフォルトルートをIPSEC接続先に変更するくらいの事をして観察すれば、一応は、IPSec 接続先までは暗号化されており、その先へのパケットも飛んでいることがわかる。
だが、問題は接続先の接続先のLANはICMP echo response を返さない事。

何故ならば接続クライアントはPINGパケットを相変わらず自分のIPを設定して送るようだ。GatewayはちゃんとヨソのLANに投げ直してくれているのだけど、応答する側が無視している。
ubuntu 等を見ていると、インターフェイスと同じネットワーク上の端末からのICMP echo request
にはICMP echo responseを返しているようだが、得体の知れないecho request に対しては全くのだんまりであることがわかった。

そういう事であれば
ikev1 PSK IPv4
の設定というのはそのままではなかなかPINGが通らない。という事になるかもしれない。
返事をしてもらうにはNATが要るのだ。
WANからのパケットのIPをLANのIPに書き換え
WANへのパケットのIPを書き戻す設定が必要なのだ。

NATは無くてもパケットは送れる。でも誰も応答してくれない。

ふつうのブロードバンドルータのNATとは逆の考え方になる。
ふつうは中から外なのが、外から中になるわけだから。

でもやっぱりもっといい方法があるハズだ。根本的な問題は、Roadwarrior が内部LANのメンバーになりきれていないという事で、ヨソモノのIPを使っており総スカンを食らっているのが原因だ。

VirtualIPにせよxl2tpd にせよ ローカルネットワーク用のアドレスを割り当ててもらう機能があるハズだから、とりあえず strongswan の根本的な機能を学習できたし、次に進もうかと思う。

2016年7月10日日曜日

L2TP/IPSecなサーバを立てたい(迷走メモ) Vol.1

作業記録。めちゃくちゃな走り書き。

★★★ Step.1 OpenWRTのディスクイメージから仮想ディスクを作る ★★★

まずはじめにOpenWRTのディスクイメージをVirtualbox仮想ディスクに変換

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe convertfromraw 
   c:\vm\openwrt-15.05.1-x86-generic-combined-ext4.img c:\vm\ow15051.vdi --format VDI
Converting from raw image file="c:\vm\openwrt-15.05.1-x86-generic-combined-ext4.img" 
to file="c:\vm\ow15051.vdi"...
Creating dynamic image with size 55050240 bytes (53MB)...

と。

★★★ Step.2 作った仮想ディスクでVMを作る ★★★

VirtualBoxマネージャ起動⇒新規⇒


次へ(N)⇒メモリーサイズ 256MB⇒ハードディスク すでにある仮想ハードディスクを使用する(U)
⇒一番最初に作成したVDIを使う。ow15051.vdi

~~↑VM作成終わり↑~~

★★★ Step.3 VMをカスタマイズする(シリアルポート編、スキップ可) ★★★

シリアルポート設定。(SSHが死んでもコンソールがバグったりKernelメッセージで洪水になってもシリアルポートが生きていれば安心。安定してきたら、ヘッドレス化も容易になる。
TeraTermで繋ぐことができるのでTextのコピペも簡単で、作業記録を残しやすい設定。
不要ならスキップ。
OpenWRT15.05.1(VPN_TEST_0)を選択⇒設定(S)⇒シリアルポート⇒ポート1
シリアルポートを有効化にチェック。
ポートモードを ホストにパイプに、
存在するパイプ/ソケットに接続(C)のチェックを外す。
パス/アドレスに \\.\pipe\vbox
を入力(Teraterm で TELNETでホストに\\.\pipe\vbox 指定すれば接続できる)
~~↑シリアルポート設定終わり↑~~

★★★ Step.4 VMをカスタマイズする(ネットワーク編) ★★★

ネットワーク設定
アダプタ1 ブリッジアダプター LANカード名を選択。
(ふと思ったがここでホストにwifi dongleしかないとちょっとここの部分は作業記録として実践できない。この作業記録の前提としてVirtualboxのホストマシンが有線LANでルータのNATにつながっていること)

アダプタ2
ネットワークアダプタを有効化(E)にチェック
割り当て⇒内部ネットワーク
(未割当にしようとするとネットワークハングが記録され続けてうっとうしい。ループバックコネクタは無いのかと思った)

この辺でスナップショット取って起動

 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 CHAOS CALMER (15.05.1, r48532)
 -----------------------------------------------------
  * 1 1/2 oz Gin            Shake with a glassful
  * 1/4 oz Triple Sec       of broken ice and pour
  * 3/4 oz Lime Juice       unstrained into a goblet.
  * 1 1/2 oz Orange Juice
  * 1 tsp. Grenadine Syrup
 -----------------------------------------------------
root@OpenWrt:/# ls
bin         init        mnt         rom         sys         var
dev         lib         overlay     root        tmp         www
etc         lost+found  proc        sbin        usr
root@OpenWrt:/# ping www.yahoo.co.jp
ping: bad address 'www.yahoo.co.jp'
root@OpenWrt:/# passwd
Changing password for root
New password:
Bad password: too weak
Retype password:
Password for root changed by root
root@OpenWrt:/#

この辺でスナップショット取って起動。
パスワードを設定。
yahoo.co.jpにPINGを打ってみるもそれいぜんに、DNSが引けてない。

ネットワークの設定をちゃんとやらないといけない。
デフォルトでは家庭内WifiルータのIPアドレスをスタッティックで名乗ってしまう。
VirtualBox Hostとのeth0の接続がNATであれば問題ないのだが、
ブリッジなのでまずい。大急ぎで家庭内WifiルータからIPを割り当ててもらうように設定。
本来であればどこにもつながってないネットワークで先に設定確認してから家庭内LANにつなぐべきであった。まあ、家庭内だからいっか。

root@OpenWrt:/etc/config# cat network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'wan'
        option ifname 'eth0'
        option proto 'dhcp'

config interface 'lan'
        option ifname 'eth1'
#        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.254.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan6'
        option ifname 'eth1'
        option proto 'dhcpv6'

config globals 'globals'
        option ula_prefix 'fd2a:82cf:1d52::/48'

yahooにPINGが通るようになる。

root@OpenWrt:/etc/config# ping yahoo.co.jp
PING yahoo.co.jp (■.□.△.○): 56 data bytes
64 bytes from ■.□.△.○: seq=0 ttl=52 time=86.698 ms
64 bytes from ■.□.△.○: seq=1 ttl=52 time=42.318 ms
64 bytes from ■.□.△.○: seq=2 ttl=52 time=87.604 ms
64 bytes from ■.□.△.○: seq=3 ttl=52 time=55.463 ms

ここで VirtualBoxの外につながってるブリッジ上のDHCPからゲストeth0に割り当てられた
 http://192.168.1.202/
にアクセスしてみると、接続できない(拒否される)
これはeth0がWANとして扱われているからfirewall にはじかれてるっぽい。
よく考えると当たり前か。
firewall の設定をするよりりはLAN側にも VirtualBox ホストが接続できるようにする方が正しい。

面倒なので eth1を内部ネットワークではなくホストオンリーネットワークに変更する。
VirtualBox環境設定⇒ネットワーク⇒ホストオンリーネットワーク(H)⇒+追加
ホストオンリーネットワークの詳細 IPアドレスを192.168.254.2に変更

ping 192.168.254.1が通るようになる。
192.168.254.1 からの応答: バイト数 =32 時間 =1ms TTL=64

リブート後
http://192.168.254.1/
へのアクセスも可能に。LUCIが出るようになった。



★★★ Step.5 OpenWRTにStrongSwanを入れてみる ★★★

L2TP/IPSec を実現するにはxl2tpd と strongswan のセットアップが必要っぽい。
ひとつずつやった方が良さそう。strongswan は L2TP/IPSec のうち IPSec 部分を
実現するソフトっぽく、L2TPに手を出す前に StrongSwan単体で行うIPSecというものがどういうモノ
なのか体験しておいた方が良さそう。

「OpenWRT StrongSwan」でググる
 関係のドキュメント漁る。
vpn.ipsec.basics まずはコレだけを押さえとくヤツっぽい
vpn.ipsec.roadwarrior こっちは設定のハナシなので↑先っぽい
strongswan.howto 必要パッケージがこっちの方が多い記述。情報ソースが新しいかどうかAndroidにも使えるハナシなのか。

vpn.ipsec.basicsをまず最初にやるべきのような気がする。

opkg update
...(略



opkg list | grep strongswan

なんかいっぱいあるなあ。



opkg install strongswan
...(略
/etc/rc.common: line 143: ipsec: not found

ぐぬぬ。
既知問題っぽい。
https://dev.openwrt.org/ticket/20336

root@OpenWrt:/# opkg remove strongswan
Removing package strongswan from root...
/etc/rc.common: line 143: ipsec: not found
You can force removal of packages with failed prerm scripts with the option:
        --force-remove
No packages removed.
Collected errors:
 * pkg_run_script: package "strongswan" prerm script returned status 127.
 * opkg_remove_pkg: not removing package "strongswan", prerm script failed

ぐぬぬ。
アンインストールはできない=インストールされているとも言い切れない微妙な状態。
このまま突き進んでさらに謎に遭遇しそうで怖い。
opkg install strongswan-default
root@OpenWrt:~# which ipsec
/usr/sbin/ipsec
root@OpenWrt:~#

なんか依存関係が変なのかな?
strongswan package require --> /usr/sbin/ipsec
but, strongswan does not have the command.
strongswan-default has the command.

strange dependency......

What, which should i install??????????????????????????


(後記:strongswan パッケージは無視して、strongswan-full をインストールすべし、strongswanパッケージは-fullを入れれば勝手に入る。入れないとコンフィギャ失敗する)

2016年7月8日金曜日

L2TP/IPSecなサーバを立てたい Vol.0

OpenWRTが面白いのでVirtualboxにもインストールしてみてみる事にした。

そこで何がしたいかというと最近スマホを使うようになったのでVPN接続がしたい。
ゆくゆくは外からもアクセスしたい。

ただ仕組みがよくわかってない中でWeb上のドキュメントを漁っても情報過多なのでとにかく、最低限の実現を目指す。

まず仕組みを理解してから少しずつ手を広げたいなあと。

AndroidからなのでL2TP/IPSecがいいかな。VPNの最低限からスタートした方がいいだろうけど、最低限って何だろうというところを考えるところからスタートで。


よくわからんけど、たぶんこれがVPNが勉強できる最小構成なのかなあと思いますね。
HostOnly Networkにつないで何がうれしいんだというレベルですがね。

まあね。

2016年7月7日木曜日

NetBSD が VirtualBox で動くようになったようだが実機へのインストールは案外ハードルが高い

久々に NetBSD で遊んでる
昔はVirtualBoxには入れられなかったけど

NetBSD7.0.1をCD-ROMからインストールしたところ問題なくインストールできた。

ま、Virtualboxにインストールできるようになったことは素晴らしい。

でも、遊んでると動作が怪しいところを発見してしまった。

仮想環境じゃなく、実機での動作も怪しいとバグレポートした方がいいのかなと思ったのだが、
実機へのインストールが案外難しく、頓挫してしまった。

どうもNetBSD は USBのCDROMドライブではインストールできないらしい。
USBのCDROMも最近ブート可能だからいけるだろうと思っていたが、

ちゃんと読み込んでインストーラはスタートするのだが途中で CDROM を見失ってしまう。
帰り道も進むべき道も知らないというハードボイルド仕様で、ちょっとどうしようもなかった。
や、ワイルドなのかな。BIOSなんて捨ててやったぜっていう。

で、USB メモリからインストールを試みたがどうやってもWindowsパーティションを破壊する選択肢しかない。

せっかくバグっぽいものは発見したが、ちょっと実機へのインストールがうまくできない現状では
レポートしにくいな。
やっぱり何もしないでおこう。

2016年7月4日月曜日

MZK-MF300Nの挙動

MZK-MF300Nはアクセスポイントにもなるし、ルータにもなるらしいし、コンバータにもなる。

Linuxなんかをインストールする時に、無線のドライバが無かったりする場合重宝する。

Wake on lan は無線には対応してないので、こいつを押し入れから引っ張りだしてきた。

ところが、こいつはちょっとヘンな機械だ。

mf300N下流のネットワークが死亡した。

DNSが解決できないという。

で、調べてみると単なるコンバータとして動いてるのかと思いきや、こいつは何故かDNSを中継しようとしているようで、

ipconfig /all したとき 192.168.1.249 がDNSになっている。
そんなことをしてもメリットは
http://mf.setup/でアクセスできるようになるだけで全く嬉しくない。
MF300NはそれだけのためにDNSを中継したい気持ちがあるのだろうが
状況から考えるとDNSが死んだ理由はどう見てもMF300Nの死亡が疑わしく、コンバータは黙ってEtherとWifiの変換だけやってくれって感じだ。

DHCPはクライアントに設定した。

ところがまだ問題があって、クライアントに設定してもDHCPサーバの設定に従ってくれない
DHCP サーバの返したIPは全く無視して、192.168.1.249に張り付く。

PINGを打っても192.168.1.249 でリプライしてくる。

こいつのコンバータモードは結構やばい地雷仕様だ。
たぶんネットワーク管理者をイライラさせる性質の機械なので仕事では使わない方がいいだろう。
ホテルとか、公衆無線とか迷惑顧みないどうでもいいヤツ用だね

これをコンバータで使う場合DHCPをクライアントに設定したうえでルータ側で
Static Lease として192.168.1.249を設定してあげるしか逃げ道が無さそうである。

まったくでたらめなIPを設定した場合デフォルトゲートウェイがうんたらと文句を言われる。
何故レイヤー3まで踏み込んでくるのだコイツは…

ポンコツノートのリモートデスクトップホスト化

どうも最近ノートPCの調子が悪く、外に持ち歩くのは重いし不安だし使用頻度が落ちている。

調子が悪くなった原因は高いところから落としてしまったからで、症状としては、タッチパッドが効かない。たまに、ドライブエラー(読み込みエラーではなくドライブ未接続状態)、バックライトムラなどが発生しており、売っても二束三文にしかならない。特にドライブエラー動かすと起きやすく、下手に動かすとご臨終してしまわれるのではないかと思うと、持ち運ぶのはためらわれる。キーボードも荒く叩けずストレスが貯まるのだ。

しかし安静に扱う限り何も起きないので、リモートデスクトップのホストとして復活させたい。

復活させるメリットはそれなりにある。
  • core i3 2367mという自分の所有するPCの中では最速のcpu intel−VTが使える
  • 腐っても64ビットOS搭載
  • ライセンスされたちゃんとしたMS OFFICE
  • androidで艦これ
など。

で、やってみた。
ms製リモートデスクトップアプリはすこぶる気持ちよく動いてくれる。
ちょっとは迷ったりしたが、目標は達成できた。

艦これはandroid専用アプリは当選しないから、タブレットで気分を味わうにはよかろう。

問題はサクサク動きすぎて、いざあたった時やる気がなくなるかも。

実はドルフィンブラウザならネイティブandroidでも動くが、不安定で猫が出まくる。

横道にそれたがリモートデスクトップ快適である。

ウェイクオンランも設定したので家庭内からだとちょっとポチるだけで、スイッチを入れに行く必要もない。

ハマったのはwindows10の高速起動をoffにしないとwolがうまく機能しないところくらいだろうか。

実はルーターをいじって外部からもwolさせようとしたのだがこれはうまくいかなかった。openwrtはブロードキャストアドレスでポートフォワード設定をしてもうまくできない。セキュリティ上の問題などがあるのかも。

立ち上がってもないマシンにはipアドレスもないだからブロードキャストで投げるしかない。外からの接続をブロードキャストで投げるのはどうなのよっていう。メビウスリング的などうしようもなさ。

openwrt12以降にはip command を使ったワークアラウンドが掲示板に出ていた。無効なipにブロードキャスト※MAC※アドレスを設定するようなコマンドを起動時に叩くように設定し、そのアドレスにフォワードするように見受けられたが、古いルータでopenwrt10.03.1のためipコマンドがなかった。

外から艦これの夢は少し遠のいたがまあそこは今はいいかな。
どこかに穴が開けれたらwake on lan は可能なのだが。vpnをrpi に入れてそこにフォワードすれば全部解決するんだが。

2016年7月2日土曜日

ボロwifi ルーターアップタイム1週間超え

ルータ環境入れ替えてから家庭内wifiの安定度は飛躍的に向上した。

バッファローWHR−300HPは初期ファームではルータモードでは安定しない。しかしブリッジモードでのアクセスポイントとしては全く問題ない安定感だ。最新ファームに入れ替えたせいもあるかもしれないが、安定しない場合はブリッジモードで使用するのがおすすめできる。

その場合wanポートを別のルータに接続しなくてはならない。

自分の場合ルータにはopenwrt化した型落ちジャンクのWHR−G54Sを使用した。ただアマゾンで捨て値で売られている、yamahaのリース落ちVPNにもなるルータとかopenwrt化したゴミノートパソコンやRPIを使うとかでも安定しそうな気がするな。x86系とかRPIであればファームのサポート切れとかは無いしそういうのが好きな人であればいっかも。

ま、出費無しでとりあえず1週間ノートラブルでリブートなし。一件落着。

2016年6月27日月曜日

プライベートビエラのネットワーク

適当につないでみたところ、プライベートビエラは、DHCPから、
映像部と録画部で別々のIPを要求しているようだ。

プライベートビエラ内で閉鎖的ネットワークを構築しているわけでなく、DHCPにアクセスしに行くみたい。

イメージ的にはプライベートビエラの中にビエラとディーガが居て、それぞれがLANにつながっているイメージ。一台増やすとLAN内に機器は二つ増える。

録画部分のハードウェア的にはアクセスポイントとして活用できそうな気がして設定をさらっと
探してみたが、パッと見は無いみたい。

ディーガとビエラだけのWLANにしたいってことだろう。映像を最優先にしたいってことだろうね。

パナソニックの録画機器は全部ホスト名がDIGAになって
映像機器はCOM-MID1になってる若干気持ち悪いけどなんか解決方法ないだろうか。

androidみたいにunique な名前つけてくれたらいいのに。

openwrt動作状況

バッファローのwifi ルーターWHR−300HPが不安定になったので、放置されて黄ばんでいたWHR−G54Sで置き換えた。
WHR-G54SのファームウェアはOpenWRTを入れた。
WHR-300HPの方は純正ファームのバージョンアップを行ったうえでブリッジモードとしてアクセスポイントの方はそのままやらせることにして配線をやり直した。

前まで1日2回くらい止まっていたが今のところ前よりは安定している。
G54SのWifiは一度アンテナレベルが0%に張り付いていることがあったが、300HPのアクセスポイントは落ちていないし障害耐性は上がっている。300HPが生きているからluci経由でG54S側アクセスポイント復活の操作もリブートせずにできる。

一歩進んでこれをウォッチさせて自動wifi リスタートとかやりたいな。

300HPのできが悪いかというとちょっとわからない。純正ファームの初代はあんまり良くないということだけは言える。

ま、そこ切り分けても意味ないのでやらないけど。

2016年6月24日金曜日

WHR-G54S を OpenWRT化

Atermが欲しいなあ。

ま、間に合わせで、廃棄しても問題ないWHR-G54SをOpenWRT化してみた。
インストールはやってみればそう難しくもない。

tftp クライアントはCygwinのものを使用した。

root のパスワード設定にTELNETが要るけども
TELNETなんて無いのでteraterm で代用。

バッファローの設定IPは192.168.11.1となっているが、
ファームウェア書き換えに成功すると192.168.1.1で立ち上がってくる。

実は書き換えに何度か失敗したが、ブートローダが死んでしまうわけではなさそうなので
何度かやり直してるうちになんとか起動できた。

今後の活用方法だけど、さすがに54MbpsのWifiルータは遅い。
ただ、いくら300Mbps のWifiルータでもフリーズするのでは意味がない。
54Mbpsでもフリーズしないのであれば活用の価値はある。

で、思いついたのは300HPはブリッジモードで
アクセスポイントとして働いてもらおうかと。

幸いというか、LAN側の転送速度はどちらも100baseなので、ボトルネックになる事もないだろうし。
また、負荷分散にも多少の効果はあろう。またブリッジモードでは、
フリーズするリスクもさすがに少しマシになるのではないか。
また、仮にフリーズしたとしてもアクセスポイントを繋ぎ直すだけでいいので
ダウン時間は減らせるはずだ。

さて、みんなが寝てる間にやろう。案外メリットがある工事だぁね。
300HPルータの新ファームウェアも出てたのでバージョンアップもやっておこうかと思う。

2016年6月23日木曜日

WHR-300HPが不安定すぎるのでWHR-G54Sを復活させる

バッファローのルータが不調になった。
不調になった原因はよくわからないがこのところ接続機器が滅茶苦茶増えた事が原因と言えばそんなところか。

YAMAHAのルータはかさばるし別途APが要るし、一番手っ取り早いのはNECのAtermを買ったら良さそうなのだけど、評判は明らかにバッファローより良さそうだけど、なんか似た様なスペックのWifi ルータを買うのもどうか。

手頃な解決方法を探るべく、DD-WRTを試すことにした。OpenWRT でも良さそうなのだけど難しそうなので、DD-WRTで安定するなら、OpenWRTはいいかな。

この手のソフトはファームを飛ばして泣き寝入りするリスクもあるからやる気が起きなかったのだけど、ちょうどいいどうでもいいハードがある。WHR-G54S。これならどうなってもいい。

無線LANの調子が悪い

このところ無線LANの調子が悪い。

Wifi機器が増えて転送量が増えたのもあるだろうが、なんだか1日2回くらいフリーズしているような。

バッファローのWHR-300HPだと思う。
フリーズといっても無線アダプタ部が死んでしまうのであれば、救いようがあるような気もするが、有線で接続した機器からも無応答なのには閉口する。

有線LAN部と無線LAN部は別にした方が良さそうかなあ。

あとどうも致し方なくリブートすると、IPアドレスの重複が発生するようで、DHCPの割あて規則もちょっと微妙な感じ。

次買うならNECにするか。
YAMAHAのVPNルータのリース落ち+無線LANアダプタで構築するか。

RPIでルータするという手もないわけじゃないけど。


2016年6月19日日曜日

今更、マルチディスプレイに

部屋片付けてて、昔使ってたディスプレイが邪魔だなあと。

捨てるのも面倒なので、有効活用することにした。

しかし、今のPCはAGPもPCIもないので拡張ボードが有効活用できず。
ファンがうるさいマシンはいやなのでどうしたものか。

USBを使うか既存のコネクタにつなぐしかない。

既存のコネクタが一番無駄が無いが、
C60M1にはDVI-DとD-SUB25 しかなくて、
プライマリディスプレイがD-SUB25を使ってるため DVI-D しか空きが無いため
アナログに変換するアダプタが要る

USBの変換アダプタという手もある。

結局価格的に、DVI-Dの変換ケーブル?というか案外リッチなハードウェアだとおもうが
を買う事にした。

費用は部屋片付けてた時出てきたお宝で賄うつもり。

間違って貼った収入印紙が4000円出てきたぜい(税)
税務署に言ってお金もらおっと。

2016年6月18日土曜日

Amazon で送料無料にちょっと足りないときの技

アマゾンで1980円のモノを注文したら送料が350円かかるが
2000円以上で送料無料になる場合がある。

あと20円埋めればいいわけだ。

そういう時おススメなのが ジョイ

洗剤なんて絶対消費するもんだし、送料が350円マイナスになるわけだから、
万が一使わなくても元は取れるのだ。
要らなければおばちゃんにプレゼントすると仲良くなれる事まちがいなし。

気を付けないといけないのは
送料が無料になる場合は扱い主がAmazonでなければいけない。

2016年6月16日木曜日

今更ながらC60M1 で変なエラーreboot and select proper boot device

ふつうあり得ないと思うのだが、いまだにC60M1マザーボードを使用していて、
Windows 10でもちょっと遅いけど問題なく動いている。

なんでこんなマシンを使っているかと言えば、一時増えすぎたマシンが部屋を占拠してしまったことがあったことの反省で、あまりマシンを増やさないようにしている。
今残っているのは、

  • 上記、C60M1マザーのマシン。
  • 使う予定のない初代Atomマシン
  • 時々調子のオカシイノートCore i3(エクセル用)
  • RaspberryPI
になった。
コンピュータはこの4台だけに絞ったが、もっぱら常用しているのはC60M1とサーバのRPIだ。
昔は追及したい事がいろいろあって、たくさん持っていたかったのだけど、そんなに情熱もないし、スマホが便利なので現在スマホとアンドロイドが増えすぎて困っている。

さて、C60M1はたぶん初代Atomに毛が生えた程度のスピードのマシンであるが、いいこともわずかにある。CPUはマザボに組み込みでなんせファンレスで動くため、ACアダプタ、SSDで動かせば、全く無音で動く。図体は少しでかいがRPIと同様に音は皆無である。

ファンがブンブンいうマシンが嫌いだ。できる限りこのマシンを使っていきたい。

が、VMを動かすのは非力なのと、Wifiを直接制御したいので
USBStickにLinuxを入れてLinuxでしかできない事をやろうとして、
USB32GBにUbuntu16.04LTS 日本語を入れてみた。

問題なくインストールは終わってしばらく使った後HDDのWindows10からブートしようとすると
カーソルがしばらくチカチカしたあと、
reboot and select proper device みたいな
メッセージで起動できなくなっていた。

USB Stick 以外に影響を及ぼすような操作はしていないハズだがMBR飛ばしちゃったのだろうか?と陰鬱な気分になった。

リブート後BIOS Bootメニューから明示的に選択したり、
HDD以外のブートデバイスを全て取っ払ったりしたが状況は好転せず。
CMOSクリアまでやってみたが治らなかった。

で、どうやって解決したか。

  • とりあえず、電源のコンセントを抜く。
が正解だった。
電源とマザーのコラボで不可解な現象が出ているようであった。
次回からは違うOS起動後はコンセント抜く運用でカバーするつもり。

ふう。あと何年使えるんだろう。

ubuntu 16.04 インストール Wifi ドングルの相性とか

ubuntu 16.04 LTS 日本語 インストールしたっていってもPQIの1000円くらいのUSBに書いてみただけだけど。。。

インストール時のネットワークは接続できているようであったが、インストール用カーネルはMY USBトングルを認識していたようなのだけど、いざインストール後ログインするとWifiドングルが認識していないようだった。

こういうネットワーク関係のドライバってコンパイルし直さないといけないが、
コンパイルにはネットワークがいる卵鶏デッドロックになってしまう。

面倒くさいのでオヤジのPCのドングルとこっそり入れ替えることにした。

以上

以下メモ
Ubuntu16.04で動作状況
✗ダメ Elecom WDC-150SU2M
rtl8188euのようだが、動かすには自分でコンパイルが必要なうえに、
Ubuntu16.04ではコンパイルもうまく通らないような状況。
linux では避けたほうがいいかも。
 青色LEDが眩しいしなんか期待してないところで頑張って期待したところで
働いてくれない感。

○Planex GW-Eco300
○Planex GW-USValue-EZ
 こちらはチップはわからないが rtl8192cu で認識しており、
ちょっと使った感じでは問題ない様子。
現在Planex GW-USValue-EZは現行機種ではないかも。
流通してない。

昔Wifiのアクセスポイント1500円で買ったらドングルもセットでついてきた。
こっちは、期待もしてなかったが意外と使えてるんだなぁ。

2016年4月10日日曜日

Cygwin mysqld って 大データ入る?

cygwin で
cat /cygdrive/z/db_finance_bak.sql|mysql -u root -p db_finance2
Enter password:

実行してRASPBERRY PI から DUMPした
DBをインポートしてみたが、12時間以上たっても終わってない。13GByte 位あるSQL文
株価データベースはどうしてもこのような馬鹿みたいなサイズになる。

cygwin は64Bit版だと思う。

CPU占有率が25%のまま終わる気配が無い。
更新対象と思われる/var/lib/mysqlの中にあるタイムスタンプすら更新されていないようで、
生きてる可能性が極めて低い。
/usr/share/mysql/mysql.server stop
すら効かない。

思えば過去にも同じ体験をしたことがある気がする(ずいぶん昔の気がするが)

でもネットを探してもCygwinで大規模なサイズのデータベースが構築できないなんてみあたらないけど、現実問題使えた記憶がないなあ。誰か使えてる人っていますか?

困ったなあ。
MysqlWindowsネイティブ版ってあったっけ?
って思って探してみる事にした。

こっちは固まりませんように。
http://dev.mysql.com/downloads/installer/

2016年4月9日土曜日

cygwin lighttpd メモ linux-sysepoll 無いとか、sendfile わからんとかのメモ

lighttpd の設定で躓いたのでメモ lighttpd.confを編集する。

1個目(起)
$ /usr/sbin/lighttpd  -f /etc/lighttpd/lighttpd.conf
2016-04-09 11:20:11: (/usr/src/ports/lighttpd/lighttpd-1.4.37-1.i686/src/lighttpd-1.4.37/src/
configfile.c.1355) the selected event-handler in unknown or not supported: linux-sysepoll
2016-04-09 11:20:11: (/usr/src/ports/lighttpd/lighttpd-1.4.37-1.i686/src/lighttpd-1.4.37/src/
server.c.649) setting default values failed

#server.event-handler = "linux-sysepoll"
server.event-handler = "poll"

linux-sysepollが知らんか、サポートされてないといってるし選択できそうなのでpoll に変更した。

2個目
$ /usr/sbin/lighttpd  -f /etc/lighttpd/lighttpd.conf
2016-04-09 11:23:46: (/usr/src/ports/lighttpd/lighttpd-1.4.37-1.i686/src/
lighttpd-1.4.37/src/network.c.959) server.network-backend has a unknown value: sendfile



server.network-backend = "sendfile"
↓変更
#server.network-backend = "sendfile"

に変更。何かよくわからないが、コメントアウトしてみた。(いいかげんすぎる)


3個目(転)
$ /usr/sbin/lighttpd  -f /etc/lighttpd/lighttpd.conf
2016-04-09 11:25:20: (/usr/src/ports/lighttpd/lighttpd-1.4.37-1.i686/src/lighttpd-1.4.37/src/server.c.927) can't have more connections than fds/2:  1024 256

#server.max-connections = 1024
server.max-connections = 128
これでもかというくらい減らしてやった。

4個目(結)
$ /usr/sbin/lighttpd  -f /etc/lighttpd/lighttpd.conf
2016-04-09 11:26:20: (/usr/src/ports/lighttpd/lighttpd-1.4.37-1.i686/src/lighttpd-1.4.37/src/network.c.410) can't bind to port: localhost 80 Address already in use
あれ?あれれ。

実はApache2がすでに設定してあった事が判明。
やれやれ。完全に無駄な努力であった。

server.port = 8080

でhttp://localhost:8080
でアクセスできましたとさ。

でもapache2 入ってないかと思ってlighttpd 選んでみたのに

動いてるなら別に要らないよね。


2016年4月7日木曜日

バックテストに向けてようやくデータ側の準備は整いつつある

今まで株のシステムはエクセルでずっと考えてきた。
エクセルがシステムトレードに全く使えないという人は居るとは思うけど、
そんなことは全然なくて期待値としてはどうなんだ?とか、
こういうシグナルで利益が取れる株は~な傾向がありそうだなあとか、そういう事はエクセルでも判るようだったし、ローソク足も違った見方ができるようになった。

エクセルは間違いなく株取引で勝つうえでプラスのツールだと思う。

いくらシステムトレード用ソフトが優れているとはいえ、ピボットで即効で結果が見える
エクセルは思い付きを実現する最速のツールとしてはシステムトレードソフトに負けているとは
思えない。
ただ、大量データ操作に関しては、やっぱり力不足な気がしている。
この点に関してはシステムトレード用ソフトには全くかなわない。
同じ事をやろうとすると大規模なマクロを組まなければならない。
でもエクセルはちょっとモッサリしていて大量のデータ操作にはちょっと使いたくないなあという気がする。実際アクティブな銘柄はたぶん3000ぐらいあって、それをエクセルマクロで処理するなんて
悪夢だ。

それで、Perlのフィルタに食わす程度の全銘柄データを出したいなという野望が出てきてだんだん実現に近づいて来た。


ああ、面倒だった。

面倒だった点

まずデータをどこから買うかという事。Yahoo と 無尽蔵等から集める事も可能だけど、寄せ集めのデータを扱うのは案外たいへんなのでData-getを使う事にした。面倒なので、ここの割り切りが必要だ。方法が確立するまではお金払ってもいいかな。

テキストファイルからデータベースへの変換が面倒だった。

分析に必要のないデータの消去が面倒だった。例えば、大証のデータとか。

修正の必要な項目の修正が面倒だった。特に分割の修正と4本値が0の場合の処理とか、
前日のデータから引っ張ってこないといけない。


今の状況と今後

とりあえず、修正後の四本値はsql を投げるPHPでLAN内のRPIWeb Server から取得できるようになった。(期間を指定することも可能)
ただ、SQLは時間がかかるので、バックテストをする前の夜中は、CSVファイルを出力するスクリプトを走らせておいたほうが良さそうだ。

今後は、テクニカル分析の数値とか昨日の上昇下落%とかをブラウスするものを作りたい。できれば、システムトレードの期待値とかも。

うーんようやく道具の一つが持てた。
でもまだまだパンツしかはいてない。

頑張ろう。

2016年4月6日水曜日

RPI家庭内my株価データベース分割修正についてのメモ

data-get.comより株価データを買って、家庭内サーバに株価データベースを構築して遊んでいる。
最低限、4本値と、会社分割情報だけ入れられたらいいかなあと思っている。

mysql> describe tbl_dg_devide;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| s     | char(4) | NO   | PRI |         |       |
| d     | char(8) | NO   | PRI |         |       |
| f     | float   | YES  |     | NULL    |       |
| t     | float   | YES  |     | NULL    |       |
| mul   | float   | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
5 rows in set (0.01 sec)

分割情報を保持するテーブルは↑のような感じ s はセキュリティコード(証券コード)
dは日付文字列にした。データタイム型にするとload data する時に面倒なのでやってない。
f は分割前~に当たり t ~個の株式を割り当てるみたいな。
f と t はあまり必要ない。

mul が重要で、分割修正乗数というべきもの。

とりあえず、Data get の devide.csv はそのままload data できる構造にした。

ところで、data-getの株価は分割情報は別テーブルだ。
これはこれで便利なのだけど。
普通バックテストや過去データの検証に必要なのは分割を調整した後の4本値だ。
だから

ふつうの4本値

分割情報から

⇒ 分割を調整した後の4本値を記録した時系列データを

作らないといけない。

で、やり方にはいろいろあるが、SQLでできるのかどうかを考えてみる。
12.19.1 GROUP BY (集約) 関数
をみてうーんと考えてみたけどもどうにもできそうにない。

できない原因は集約関数にEXCELでいうPRODUCT的な動きをする関数や
Perlでいうmap 関数のようなものが無いからだと思う。
また集約関数を自作できそうな情報もなかったので、これはたぶん無理か難しいんだろうな。

でも、SQLで修正乗数のPRODUCTを返す数式なら返す事ができるなあと気が付いた。

まずソフトバンクの分割を調べてみる
mysql> select * from tbl_dg_devide where s="9984";
+------+----------+------+------+---------+
| s    | d        | f    | t    | mul     |
+------+----------+------+------+---------+
| 9984 | 19960326 |    1 |  1.4 | 0.71429 |
| 9984 | 19960925 |    1 |  1.4 | 0.71429 |
| 9984 | 19970326 |    1 |  1.3 | 0.76923 |
| 9984 | 20000425 |    1 |    3 | 0.33333 |
| 9984 | 20051228 |    1 |    3 | 0.33333 |
+------+----------+------+------+---------+
5 rows in set (0.01 sec)
ソフトバンクの1996年3月2X日の終値を表示
mysql> select d, s,c from tbl_dg_ohlc where s="9984" and d LIKE "1996032%";
+----------+------+-------+
| d        | s    | c     |
+----------+------+-------+
| 19960321 | 9984 | 26800 |
| 19960322 | 9984 | 26000 |
| 19960325 | 9984 | 26300 |
| 19960326 | 9984 | 19200 |
| 19960327 | 9984 | 19800 |
| 19960328 | 9984 | 20200 |
| 19960329 | 9984 | 21800 |
+----------+------+-------+
7 rows in set (0.01 sec)

ソフトバンクの1996年3月2X日の終値を表示↑の二つの表から修正値の数式を出力させてみる。
mysql> select a.s,tbl_dg_ohlc.d,GROUP_CONCAT(a.mul separator '*') 
from (select s,d,mul from tbl_dg_devide where s="9984" ) as a, 
tbl_dg_ohlc 
where a.s = tbl_dg_ohlc.s and a.d > tbl_dg_ohlc.d 
and tbl_dg_ohlc.d LIKE "1997032%" group by tbl_dg_ohlc.s,tbl_dg_ohlc.d ;
+------+----------+-----------------------------------+
| s    | d        | GROUP_CONCAT(a.mul separator '*') |
+------+----------+-----------------------------------+
| 9984 | 19970321 | 0.33333*0.76923*0.33333           |
| 9984 | 19970324 | 0.33333*0.33333*0.76923           |
| 9984 | 19970325 | 0.33333*0.33333*0.76923           |
| 9984 | 19970326 | 0.33333*0.33333                   |
| 9984 | 19970327 | 0.33333*0.33333                   |
| 9984 | 19970328 | 0.33333*0.33333                   |
+------+----------+-----------------------------------+
6 rows in set (0.44 sec)
どうだろう。なぜか、CONCATの順番が入れ替わったりしているが概ね機能してそうな気がする。

おしいところまではできるのだが、あと一押し eval()関数が欲しいなあ。

あ、これだと分割情報の適用されないところが出てくるからRIGHT JOIN した方がいいのか。

select b.s,b.d, IFNULL(GROUP_CONCAT(a.mul separator '*'),1) 
from 
  (select s,d,mul from tbl_dg_devide where s="9984" ) as a
     right join
         (select * from tbl_dg_ohlc where s="9984") as b
     on a.s = b.s and a.d > b.d  group by b.s,b.d ;

2016年4月4日月曜日

家庭内my株価データベースでマーケットの重複を取り除くSQL文のメモ

家庭内my株価データーベース tmp2というテーブルに
s証券コード
d日付
mマーケット
o,h,l,c 始値、高値、低値、終値
v 出来高

という形式で保存されている。
複合プライマリキーとして(s,d,m)を設定。

で、同じ証券コードの同じ日付に2つのマーケットがあると
エクセルなんかで処理するのが面倒になる。

例えば大阪証券取引所のデータなどが邪魔になる。
別にEXCELやPerlでやるのは難しくないのだが、
出来ればSELECT文で取り除きたいなあ。
要らない条件は、まあ、出来高のでかいヤツがあれば、
それでいいマーケットと考えてよかろー。

(1)同日の同証券コードの最大の出来高を取り出す。
select s,d,max(v) as v from tmp2 group by s,d;
単体だと上みたいなSQL

(2)同日の同証券コードの最大の出来高のマーケットは複数ある可能性がある。この場合、個人で株シミュレーション走らせるだけならどちらを選んでもいいだろうが、どちらかを選ばねばならない。
同日の同証券コードの最大の出来高のマーケットのうち最大のマーケットを選ぶ。
select a.s as s ,a.d as d,max(a.m) as m from tmp2 as a, (1) as b where a.v = b.v group by a.s, a.d

(3)同日の同証券コードの(2)で選んだマーケットの4本値をselectする。
select a.s, a.d, a.m, a.o, a.h, a.l, a.c, a.v from tmp2 as a, (2) as b where a.s = b.s and a.d=b.d and a.m=b.m;

select 
    a.s, a.d, a.m, b.o, b.h, b.l, b.c, b.v
from
    (select b.s as s ,b.d as d,max(b.m) as m 
     from  (select s,d,max(v) as v 
            from tmp2 where s="1332" group by s,d ) as a,
           tmp2 as b 
     where a.s = b.s and a.d=b.d and a.v = b.v
     group by s, d
    ) as a,
    tmp2 as b
where a.s = b.s and a.d=b.d and a.m=b.m;

ぬー。 パワー過ぎ。。。。。。頭が。。。。。。。。。。。。
艦これヤルっす。

where s= "1332"のところを変えて使うみたいな。

こんなんでいいのかな…。
よくわかんないのだが、stock_code を変えるだけで実行できるように
ストアドプロシージャ登録しておいた。
便利だワイ

分割を修正するSQLも考えないとなあ。


2016年4月3日日曜日

巨大になってしまう家庭内株価データベースを少し最適化する

テキトーに株価のデータをdata-get から買ってmysql にインポートしたはいいけど、
ギガバイトオーダーのデータ量になってしまい1個の銘柄を検索するのに8分かかるクレイジーなテーブルになってしまった。8分も検索にかかるとやる気がなくなってしまい、艦これをやってしまう。

こ れ は い か ん 。

恐ろしい無計画。

なんで遅いかよくわからないのだが、myisamchk --sort-index --sort-record を使うと速くなるかもっていう気がした。 たぶんあっているだろうが、 テーブルのエンジンがInnodb だったので、できない。 

じゃあ、innodb でクエリを高速化する方法が無いかというと、 無いわけがない。
もしなかったら世界中で mysql が普及するわけがない。

絶対あるはずだがよくわからないなあと思って help alter table とか打ってみると んむむパーティションというモノがあるではないか。

https://dev.mysql.com/doc/refman/5.6/ja/partitioning-limitations.html まずは、今腐るほど遅いテーブルの構造を引き継いだテーブルで実験してみることに。


create table tmp like tbl_dg_ohlc;

要は、日付順に並んでるデータをコード毎にテーブルを分ければアクセスが速くなる。
山積みの書類を積んでおくと、関係のあるヤツどれって言われると(目録はあるにせよ)取りにいかないといけないが。
引き出しにあらかじめ分けて入れておけばサッと取り出せるおばあちゃんの知恵みたいな。

alter table tmp PARTITION BY RANGE COLUMNS(s) (
PARTITION p1500 VALUES LESS THAN('1500'),
PARTITION p2000 VALUES LESS THAN('2000'),
PARTITION p2500 VALUES LESS THAN('2500'),
PARTITION p3000 VALUES LESS THAN('3000'),
PARTITION p3500 VALUES LESS THAN('3500'),
PARTITION p4000 VALUES LESS THAN('4000'),
PARTITION p4500 VALUES LESS THAN('4500'),
PARTITION p5000 VALUES LESS THAN('5000'),
PARTITION p5500 VALUES LESS THAN('5500'),
PARTITION p6000 VALUES LESS THAN('6000'),
PARTITION p6500 VALUES LESS THAN('6500'),
PARTITION p7000 VALUES LESS THAN('7000'),
PARTITION p7500 VALUES LESS THAN('7500'),
PARTITION p8000 VALUES LESS THAN('8000'),
PARTITION p8500 VALUES LESS THAN('8500'),
PARTITION p9000 VALUES LESS THAN('9000'),
PARTITION p9500 VALUES LESS THAN('9500'),
PARTITION p9999 VALUES LESS THAN('9999'),
PARTITION pMAX VALUES LESS THAN(MAXVALUE)
);

むーん。パワー。

insert into tmp select * from tbl_dg_ohlc;

今なら言える。
データ一日1万個アホは万里を超える。

待ち。

ババーーーン。
風呂入ってこよ
select * from tmp where s="9984";
...
| 20160331 | 9984 | t1 |   5454 |   5466 |   5362 |   5366 |   6804900 |
+----------+------+----+--------+--------+--------+--------+-----------+
5332 rows in set (50.46 sec)

もとは8分以上かかっていたが、50秒に短縮され 8倍以上は速くなった。 けどやっぱり十分遅いっちゃあ遅いな、RPIなんで仕方ない部分はあるけどパーティションギチギチに切って 日付とセキュリティIDを入れ替えたり、セキュリティIDやマーケットIDをもっと小さなサイズの数値にしたりという事は可能かもしれない。 でもあんまり複雑にすると面倒なのでどうしたもんか

仮にこれだけしか実力を発揮できないとすると、仮に銘柄が3000くらいあったとして日々それを調査するのにSelect文3000個発行すると、3000分時間がかかって全然実用にならない。パーティションではたぶんこれ以上の高速化はたいして効果ないように思う。


根本的に何か間違っているとしか思えない。

で、いろいろやってみましたよ


alter table tmp modify d char(8) after m;


⇒効果なし。

alter table tmp drop primary key;
alter table tmp add primary key(s,d,m);
select * from tmp where s="9984"
略)
| 9984 | t1 | 20160331 |   5454 |   5466 |   5362 |   5366 |   6804900 |
+------+----+----------+--------+--------+--------+--------+-----------+
5332 rows in set (0.39 sec)

正解はこれだったか。 Raspberry PI の株価サーバは十分実用に耐えると思います。


結論 複合プライマリキーの順番には要注意!!!!

RaspberryPIに構築した my 株価データベースのレスポンスが超絶遅い件

昨日頑張って、mysqlimport した株価データ。 朝になったら終わってたみたいだ、が。

select * from tbl_dg_ohlc where s="9984";

うーんレスポンスがない。動いてんのか心配になり始める。と。

| 20160331 | 9984 | t1 |   5454 |   5466 |   5362 |   5366 |   6804900 |
+----------+------+----+--------+--------+--------+--------+-----------+
5332 rows in set (8 min 16.92 sec)

mysql>


8分って… PRIMARYKEY で INDEXが効いているのではないのか。 切なくなるほど遅い。
where like "9984"もほぼスピードは同じ。

RaspberryPIだけの問題ではなさそう。

さすがにギガ越えでノープランDBはダメか。

データベース屋じゃないのでどこをどうすれば高速化するのかよくわからないが。

さすがに30秒くらいで返ってこないときつい。

やりたい事はとにかくセキュリティコードだけの検索は高速化したい。

他はボチボチでいい。


2016年4月2日土曜日

株価データベースをload data local infile しようとして失敗した

データゲットのデータをMYSQL にインポートする時のメモ

data-get 10年 株価 cdrom も買った5775円だったが4月からは値上がりの様子。
しかし、データゲットのデータはエクセルだけじゃちょっと使いにくい形式。
MySQLとかDBを活用した方がいいっぽい。

load data local infile を使ってやるつもりだった。 ちなみにCD-ROMの構成は
./1990
./1990/199001.zip
./1990/199002.zip
./1990/199003.zip
./1990/199004.zip
./1990/199005.zip
./1990/199006.zip
./1990/199007.zip
./1990/199008.zip
./1990/199009.zip
./1990/199010.zip
./1990/199011.zip
./1990/199012.zip
./1991
./1991/199101.zip
./1991/199102.zip
./1991/199103.zip…

みたいになってて各zip には月ごとの4本値データが全部入ってる感じの
単一のテキストが入っている。

面倒なので、寝てる間にどうにかする作戦。

cd 株価データ/
for i in `ls -1 */*.zip`; do funzip $i >> ~/all.txt; done
cd ~

なんと全て解凍して結合するのに、unix だと2,3行でできる。 で、できたall.txt は 桁を間違えたかと思ったが普通に間違いなく1GByte のファイルになっていた。下記コマンドを打って寝るというのが当初の作戦であった。

load data local infile 'all.txt' replace 
into table  tbl_dg_ohlc fields terminated by ',' 
lines terminated by '\r\n';
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

んぬぬ。
タイムアウト。。
┐(´∀`)┌ヤレヤレ。てか若干ヤッパリ感。


mysqlimport ではだめだろうか。
mv all.txt tbl_dg_ohlc
mysqlimport -u root -L --lines-terminated-by="\r\n"
 --fields-terminated-by="," db_finance tbl_dg_ohlc -p
load data local infile でダメだったからダメいかもと思いつつ。 寝てみる。起きてきて終わってたら超嬉しい。 もやすみ

RaspberryPi に 家庭内株価データベースを構築する。

ヤフー!から株価のデータはゲットできるのだけど、流石に全銘柄ってのは申し訳ないなと思い始める。

HTMLからデータを抽出して毎日の転送量の事を思うとやってられないという気持ちが出てきてたぶん転送量とか生のCSVを取るのと比べて100倍くらいは、非効率なんじゃないだろうか。YAHOO FINANCEプレミアム会員になろうとも思ったが、Data-get のアカウントを持ってるので1か月だけ更新してみた。1500円。毎月1500円の副収入が得られるようになったら継続していこうと思う。

でもdata-get の株価は十分だけど、時系列データを取ろうとするとちょっと骨が折れる。
基本的に日々データなので銘柄毎に変換してやる必要がある。

RaspberryPI上に株価データを構築することにする。

といっても、過去にすでにインストール済みであったため、何もすることが無かった。

create table tbl_dg_ohlc(
d CHAR(8), 
s CHAR(4),
m CHAR(2),
o float,
h float,
l float,
c float,
v float,
primary key(d,s,m) );

で、テーブルを作って日々データを解凍して

 load data local infile '201601.txt' replace into table tbl_dg_ohlc
 fields terminated by ',' lines terminated by "\r\n";

みたいな日時作業にできる。

「なんでフィールド名短いネン!」

って突っ込みはあろうが、日々データをいつも見てると
F_SECURITY_CODEみたいな、フィールド名つけるのも面倒くさい。
自分専用だからこれで十分明快なのだ。
d→ 日付
s→証券コード
m→市場コード
o→始値
h→高値
l→低値
c→終値
v→出来高


 select * from tbl_dg_ohlc where s="9984";
な感じでソフトバンクだけの時系列データをとれるようになった ワイ♪ あと解凍するときはunzipをインストールしたら入ってくる funzip が便利。 標準出力に出るのでコマンドラインにまとめやすい。

2016年3月23日水曜日

ヤフー!から取ってきた株価データの分割が面倒なので分割調整後の四本値を出すフィルタ

これはちょっとどうしていいのかよくわかんないので
間に合わせのスクリプト書いた。

#!/usr/bin/perl
use strict;
use warnings;
my @lines = <>;
my $adj=1;
my $adj2=1;
my $spltday="";
for my $line (@lines){
  if ($line=~/\d\d\d\d\/\d\d?\/\d\d?,\D*(\d+\.?\d*)[^0-9\.,]+(\d+\.?\d*)\D*/){
    $adj = $adj2;
    $adj2 = $adj * ((0+$1)/(0+$2));
    $line =~/^(\d+\/\d+\/\d+)\D/;
    $spltday = $1;
    next;
  }
  
  my @cols = split(/,/,$line);
  if ($cols[0] ne $spltday){
    $adj = $adj2;
  }
  map{ $_ *= $adj;}@cols[1..4];
  if ($adj > 0){
   $cols[5]/= $adj;
  }
  print "".join(",",@cols[0..6]);
    #print $line;
}


#アドじゃスタ

こうやって、ひとつひとつ地道に自動化するのである。


株価データのゼロパディング

日付データはややこしい。

区切りが /だったり、ドットだったり 無かったり ハイフンだったりして、PCに処理させるのが面倒くさい。

自分が使う日付データは

yyyy/mm/dd にしよう。

yahoo から取ってきたデータだと
1995/9/26 とかなっているので、変換しないといけない。

面倒なので取ってきた時点でsed かます。

sed -e "s/\/\([0-9]\)/\/0\1/g" -e "s/\/0\([0-9][0-9]\)/\/\1/g"

これで固定かされて、cut コマンドとかも使いやすい感じになるはず。

スクリプトってほんの些細な想定外で止まっちゃって、母性本能くすぶらないよね全く。


2016年3月20日日曜日

エクセルマクロを使わずに ヤフー! ファイナンス から過去の株価データをCSVに落とす方法

ヤフー!ファイナンス VIP倶楽部に入ると時系列CSVデータは取得できますが、

VIP倶楽部は月1980円。

決して高くない。特に、株で成功した人にとっては全くもって必要経費である。

Yahoo!ファイナンスVIP倶楽部

しかし、2000円もあれば艦これのドックを増やさなければならない。2カ月もあればさらに母港の増設もできる。お金が無いのである。なければ無いでどうにかなっちゃうと言えばどうにかなるのだが、自分でどうにかするのがどれほど面倒だかをご覧ください。

プロになりたければツールを選ばないとタイヘンという悪い見本をお見せしたい。
ちなみにエクセルの転がってるマクロを使えば一発という事はすでに知っているのである。

俺はバッドアイデアの泉と呼ばれたオトコ。

車輪を2度開発はしないが、パンツ位なら自作してもいい覚悟なんやで。

まあ、黙ってみてなさい。やればできる子なのである。

ただ、EXCELのマクロがどういう動作をしているのかというと実際にたような動作をしています。

1.CYGWINをインストール

説明はCygwinのページにお任せする。

2.wget をインストール

Cygwin からSetup.exeを実行して


上のSearch するテキストに wget を入れ web のジャンル の wget を Install にして次へを押しまくる。

次=>6まで読み飛ばしてください。

3.yahoo のページで調べたい銘柄を表示する。

例えば、1570を調べてみる。

とりあえず↓みたいな画面に行く。


4.1983 1 1 NEXT!






5.ページ番号を500くらいにしてみて、ページ数を計算する。


URL いじってエンター


6.cygwin shell で実行するコマンドを考える。。。って3~5のステップ要らんかった。


yget なる俺様スクリプトを考える。

#!/bin/bash
url="http://info.finance.yahoo.co.jp/history/?code=$1&sy=$2&sm=$3&sd=$4&ey=$5&em=$6&ed=$7&tm=d&p="
i=1
while wget -O- $url$i |sed -n -e '/^<\/tr><tr[^>]*><td[^>]*>....年/p' |sed -e "s/[,日]//g" -e "s/[ 年月]/\//g" -e "s/<tr[^>]*><td[^>]*>/\n/g" -e "s/<\/\?[^>]\+>/,/g" -e "s/,\+/,/g" -e "s/,\+\s/\n/g" -e "s/,\+$/\n/g" | sed -e "/^$/d" |grep ","
do
 i=`expr $i + 1`
done

さすが、バッドアイデアの泉
yget <-バグあります。スイマセン <tr><td>のところ <tr[^>]*><td[^>]*>デス。
どうだ6行である。
何やら恐ろし気な While 以降のパイプライン。
意地でもテンポラリファイルを使いたくなかったのである。

さすが、艦これをBANされた経験もある男。

使い方は

C60M1@C60M1-PC ~/tmpdir
$ ./yget 1570.t 1983 1 1 2016 3 18  >1570t.csv

あら、案外、使えるわ。
エクセルマクロをOpenOffice用に改変しなくて済んだ。

え?エクセル?メインマシンはUWSCスクリプトが動いてて今使えないっす。

もう一台エクセルを買うお金なんてあるわけないよね。

2016年3月15日火曜日

株のアラート機能を Raspberry PI で実現する(2) 他力本願で最速でpostfix から gmail 経由でメールを送る方法

メール関係ブザマな状態オレのRaspberryPI


ここは┐(´∀`)┌ヤレヤレ日記なので興味ない人はスキップの方向でお願いします。

むかし、何かの拍子に設定しようとしたpostfixの設定が残っていて
やり直そうとしたものの、あまりにもmain.cfがぐちゃぐちゃになっており
仕方ないから、postfixを再インストールする事を決意した。

ところが、ぐちゃぐちゃ過ぎて、postfix の停止に失敗する。
再インストールもできない状態に。

起動には成功したのだから、起動中に何かしらイランことをしてしまったのだろう。
めんどいので、いったん/usr/sbin/postfix をテキトーにリネームして
reboot後、/usr/sbin/postfix に戻したのち

apt-get install postfix をやり直してみた。
がやっぱり
[....] Starting Postfix Mail Transport Agent: postfixpostfix: fatal: bad string length 0 < 1: sendmail_path = Failed

みたいなメッセージが出る。
まだいらないものが残ってるのかも。

apt-get remove postfix
cd /etc/postfix/ 
rm -r *
apt-get install postfix

やっぱり自分用のサーバーって何をやってもいいからいいね。 
管理者は悲鳴を上げるようなことが誰の許可も要らないからね。
こんなに面白いのに5000円程度というRaspberryPIは最高である。

最速でRaspberryPIからpostfix で gmail 経由でメールを送る方法

いろんなサイトがあったのだけど、どのサイトを見てもよくわからなかった。
結局ある結論に達した。
考えてもわからないならそのままやってみようと。。。
超絶他力本願。情報源の検索順位が上がってくれればそれでいい。
今、postfix が入っていない状態だとする。

やるべき事はまず
Postfixを使ってGmailアカウントのメールを送る [Server software]

忠実に何も変えずに実行するだけなのです。(おい。

# vi /etc/postfix/sasl_auth
--
[smtp.gmail.com]:587  example@gmail.com:password

だけはちゃんと変えてください。自分のアカウント情報を入れること。

ただし、自分がうっかり間違えたポイントだけ書いとく。

1.main.cf の 行の真ん中で #を入れていたら、途中で止まるので #以下を削除

2.# postfix  /etc/postfix/sasl_auth
 のところは postfix じゃなく postmap を使うべし
  (情報源にも書いてあるが、うっかり読み飛ばしていた

テスト

# mail hoge@hoge
Subject: hoge
Hoge
.
hoge@hoge 部分はケータイアドレスにでもかえとく

ところが…Gmailに文句を言われる

最近は、ログイン試行をブロックしたと言われてしまうようです。
https://www.google.com/settings/security/lesssecureapps
で解除しておくと大丈夫な様子。
更にセキュリティにちゃんと対応させることも可能なのだろうけど、
やり方がわからない。使えないよりは使えるほうが10000倍は良いので、
また時間があれば、そのあたり挑戦してみようかと思う。

確かに不明のヤツにログインを許したくはないのだけど、RPIは使いたい。
どうしようもないんで、普通の人用のアカウント以外に
RPI用にGmail アカウント一個取っとくってのはどうだろうか。
http://serverfault.com/questions/662568/why-does-gmail-block-my-postfix-relay
それにしてもどうも、GoogleはGmailにサードパーティ製メーラを使われたくないらしい。
いつか、gmailが使えなくなったらどうしよう…。何か代替があればいいのだけどな。

株のアラート機能を Raspberry PI で実現する(1) 何がしたいか。

久しぶりに株で遊んでいて、株ブログ的ななにかもちょろちょろいじっています。

収益発生する予定はほぼありませんが、やっぱりなかなか楽しいものですね。

オトコのロマンであります。

で、やっぱり、興味が横道にそれる事に関しては、なかなかの才能を持っている事を自負している私なのですが、ある株を見ているときに気づいたのです。

この銘柄の出来高が急増するときトレンドが転換するのではないか?

わからない人が居るといけないので一応説明しておきますが、出来高は取引量の事です。

なぜだかは判らないのですが、出来高が一気に増えた次の瞬間相場の空気が変わる事があるのです。

まあ、実際どの銘柄かは恥ずかしいので言いませんが、だったら、出来高をウォッチしておけば、利益を得る事が可能かもしれないなあと思いました。

しかししかし、俺はもう一つのオトコのロマン「艦隊これくしょん」に忙しい提督としての顔も持っているのであります。

2足のワラジは履けません。艦娘に申し訳が立ちません。

そんなに一日中株なんて見てらんないわけです。

じゃあ、どうしようと思ったわけです。

ひとつの当たり前の解はSBI証券に口座を持つことです。

SBI証券はたぶん手数料もまあまあ安かった記憶がありますが、(アフィリ記事じゃないのでテキトー)

どうもアラート機能が充実していて出来高をトリガにリアルタイムでメールが送れるということなので、
もうこれだけで十分なのです。

しかし、現在無職の(提督という仕事がありますが)俺にとって、なんとなく新たにSBI証券に、口座申請書を出して口座を作ってもらうのはなんだか恥ずかしいのであります。

じゃあ、自分で(というか他力本願でググれば)なんとかなるんじゃないかと、思い始め、このページをまとめてみる決意をしました。

現時点ではできるかどうかよくわかっていません。

2016年3月5日土曜日

UNIXでじわじわ来る言葉とは

TeraTerm で Raspbery PI に接続し、大量のWavファイルをMP3に変換する作業をやっていて寝ていたら途中で勝手に落ちていて作業が中断されてしまっていた。

調べたら簡単なハナシであった。

せとっちの備忘録(技術系)TeraTermがすぐ落ちることへの対策

をみる
設定⇒TCP/IP⇒自動的にウィンドウを閉じる。なるほづ。

今後 でかい時間を要するコマンドは上記対策に加えて、
Screen を使うっす。
Screen を使った場合、途中で落ちても再度やり直すことができる。
Screen -r

「Screenがめっちゃ便利」という言葉は最初は意味が解らなかったのだけど
だんだん実感できるようになる。そして自らもScreenの伝道師になっていく。

UNIXでじわじわ来る言葉といったら「Screenがめっちゃ便利」

UNIXあるある。

2016年3月4日金曜日

ケースで学ぶマーケティングの教科書を読んだ

ケースで学ぶマーケティングの教科書
死ぬほどつまらん。事例に一切共感できない。
脳内劇場を無理矢理みさされているような。わずかに内容っぽい部分は既知であり。エグザンプルはすべてステマかパブ記事の類のようであった。


まれにみるしょうもない本だけど評価が高いのはナゼ?

今更 Android SDK 再入門

ちょっと作りたいジョークソフトがあって、
勉強しよっと。思いっきりナンセンスなソフト作りたい。

図書館で借りてきたのは少し本が古い。



さすがにアマゾンで古書は一円だなあ。

新しいバージョンも出ている。 とりあえず、古い方も全部読んでみるかな。

ああ、プログラム久しぶりだ。

アイデア勝負なんで、難度は低めのハズなんだけどネ

2016年3月3日木曜日

board というサービスってどうか

登録無料だったので【board(ボード)】 というサービスに登録してみた。

登録自体は一瞬で終わるというか、Google+のアカウントがそのまま使える。

TOP画面fps の小さい ノスタルジックな映像がバックグラウンドで流れててカワイイ。ただ、文字数が少なくていまひとつピンと来なくて、とりあえずログインして中を探ったほうがはやそうなので、しばらくうろうろしてみた。

どうやら、写真や絵をふんだんに使ったいい感じの本がネット上で持てるサービスらしい。なんか手書きとかもできて、画像編集ソフト並みの表現力はあるのかもしれない。デジタルアルバムに最適っぽい。

じゃあ、オイラのようにメインにテキストベースで生きている人はどうすればいいのか?
と心配になってきて、とりあえず空のブックを作ってみたけど、文字を入力することは問題ないみたい。でも絵のないフォントがやけに綺麗なページにニーズが無いので、ちょっと絵心取得からはじめないといけないな。
ま、フォントとか好きだけどさ。

もし才能があったらオンラインで共有できるお絵かき帳みたいな使い方もできるんだろうな。

絵が描けなくても、写真が取れなくても、アートに造詣があるのであれば自分の視点で感想を言い合えるのでいいかもしれない。
少し発展して、Amazonのパブリッシャーと連携したり、有料化のヴィジョンも提供できたりすると夢見がちな人々の心をくすぐるのになあと思った。まだ、全部見れてないから、あるのかどうなのかわからないけど。

ま、とにかく写真はいつかやりますよ。ネットで生きていくには必要なんで。
デジカメとかGIMPか勉強して出直したい。ペットとかの写真もあげたいな。ペット居ないので人のペットを激写してあげたりして練習からスタートだな。

商用利用はNGなので、「俺、boardっていうの作ってます」とか、boardの中で「実はなになにもやってます」、程度のアピールするくらいが限界だと思う。

だけど、このボードというシステムどう考えてもチラシやブックレットを作るのに超絶便利そうで、たぶん追加のソフト無くてもそこそこのクオリティのチラシができるんじゃないかとさえ思うのでもったいない気はする。一方で
激安!!とか黄色の破れ吹き出しみたいな、ボードばかりになったら雰囲気丸つぶれなんでトレードオフというか、その運営の決定も納得はできるんですけど。技術的には商用で利用したいというニーズはあるでしょうネ。

 

2016年3月2日水曜日

ミニマリストになる方法

ぼくたちに、もうモノは必要ない。 - 断捨離からミニマリストへ

 

↑の本を読むと、オークション代行業の話が出てくる。
自分はものすごく少額ではあるけど、アマゾンに出品をやっていて面倒だと思う事も多い。

まあ、値段を決めたりするのも面倒だし、落札されるとメールがくるのですが、見落とすと悪評につながるので、毎日Seller centralにログインしなくてはいけないなど。ちゃんと値段つけようと思うとオークファン 何かも利用しないといけない。

その点オークション代行を利用すると何のストレスも溜まらない。
今の流れはそうなってるのか。

オークション代行のサイト神戸オークション出品方法
おまかせ、特急、こだわりコースがあるみたいだが、基本的にアズケッパで良いらしい。あまり部屋にモノがあふれてくるならそれもいいかもしれないな。

ただ、必要ないという主張の本を買ってしまうのは若干矛盾している気がせんでもない。

2016年3月1日火曜日

「モテる販売員になって銀座で1億円売っていました」とかいう本

背表紙にモテる販売員とか書いてあったから著者の写真をみたら、そうでもなかったのでそっと本棚に戻した本。

2016年2月29日月曜日

無料画面録画ソフトを試用してみた

カハマルカの瞳 をダウンロード。

カハマルカの瞳はデスクトップ画面操作を録画として記録できるソフト。

なぜ今これをダウンロードしてきたかというと、動画だといいたいことが伝わりやすいから。

アフィリエイト関係を再挑戦していて、
純粋に伝え方がまずかったなあと反省し始め、文章でしか伝わらない事は仕方がないと思うけども、そうでないなら、絵、写真、動画などで伝えた方がはるかにわかりやすい事に気が付いた。


こんなのみると、ちょっとしたTipsでもこれからは動画でないと、見てもらえない時代になってる。

それにしてもカハマルカってなんですかねえ。