トップ 最新 追記

kaztomo日記


2017/05/01

_ Windows10 ってセーフモードないのね (>_<)

色々とサイトをググってみたけど、 結局 PCパワーオン直後にセーフモードで立ち上げる方法が見つからない。

MediaCreationTool を使って ISOを作成し、そこから修復を試みようとするも 「復元ポイントまで戻す」どころか「前のバージョンに戻す」ことすらエラーとなってしまう (+_+)

詰みました orz

仕方ないので、現有パーティションは残したままクリーンインストール実行・・・

1年以上バックアップしていなかったことが悔やまれる(後悔先に立たず)


2017/05/04

_ C:\ を覗いていると

パーティションを残したまま Windows10 Creators Update をインストール したので、前のバージョンのファイルが残っていることに気づく。

C:\Windows.old.000
  $Recycle.bin
  PerfLogs
  ProgramData
  Program Files
  Program Files (x86)
  Windows

同容量の SSD にダビングをしてから、 MediaCreationTool で作成したISOを起動&コマンドプロンプトを実行。 上記サブフォルダと同名の現在のフォルダについて、C:\backup へ move しておき、 前のバージョンのファイルを C:\ へ move してからリブート。

いちおうドキュメントの参照やユーザプログラムは起動できるみたいだけど、 OSバージョンが Creators Update のままになっているため Edge など起動エラー。あらら (>_<)

ひととおりユーザデータをバックアップしたら、クリーンインストールして 環境を作り直すか。┐(´д`)┌ヤレヤレ


2017/05/07

_ [FreeBSD][ruby]Rubyではじめるシステムトレード

Python でシステムトレードを作る(または利用させて頂く)ことを 考えていたけど、たまたま立ち寄った書店で手にした ”Rubyではじめるシステムトレード”という本のコンセプトがなかなかイイっ\(^o^)/。

もちろん儲けたいという想いについては言うまでもないけど、私の気を引いた文言は、

  • CUI
  • 売買ルールの部品化、着脱
  • 「移動平均乖離率システム」と「ブレイクアウトシステム」のプログラム化

で、電子書籍板を探してみると見つかりました! Rubyではじめるシステムトレード

紙の本だと \3024 のところ、kindle本では ¥1944 !!

早速、読み始めようと思ったけど、もう少し”事の発端”を知りたいなぁと思い、 作者さんの前著2冊を読むことにした。

なかなか面白いし、資金管理が大事で、その意味するところも説明されていて、 タイトルに似合わず良い本だと思った。(^o^)


2017/05/08

_ 自サーバへの SSL接続でエラーが出ていたが解決

数日前より、インターネットから自サイトへ SSL接続すると 「プライバシーが保護されない」というエラーが出ていた。

この接続ではプライバシーが保護されません

攻撃者が、Hogehoge.com 上のあなたの情報(パスワード、メッセージ、クレジット カード情報など)を 不正に取得しようとしている可能性があります。 NET::ERR_CERT_COMMON_NAME_INVALID

このサーバーが Hogehoge.com であることを確認できませんでした。 このサーバーのセキュリティ証明書は [missing_subjectAltName] から発行されています。 原因として、設定が不適切であるか、悪意のあるユーザーが接続を妨害していることが考えられます。

不思議なことに Chrome ではエラーとなるのに、IE10ではエラーとはならなかったこと。

ERR_CERT_COMMON_NAME_INVALIDをキーワードにググってみると、 まさしくドンピシャなサイトがあった。 Chrome58で、HTTPSの自己証明書が NET::ERR_CERT_COMMON_NAME_INVALID になる場合の対応

早速 openssl.cnf を指示通りに書き換え、SAM エントリーが追加されていることを確認。 apache を restart してみると、無事 Chrome でもサーバー証明書エラーなくSSL接続が出来るようになった\(^o^)/

確かに Chrome を 58に上げたぐらいの頃から証明書エラーになってたんだよなぁ。

さすが、先人の経験、お知恵には感服致します。


2017/05/09

_ [Python][FX]OANDA API を使って、各通貨ペアの直近時間足を取得

OANDA APIって便利だなぁ。 自口座の情報取得や、指定した通貨ペアの Bid/Ask値取得、 指定した範囲のヒストリカルデータの取得など 色んなことが出来る。トレード指示もできる。 なんてステキなんだ\(^o^)/

色々とググりながら Pythonでのコーディングを勉強しつつ、 指定する通貨ペアについて直近の1時間足確定分5つを取得して csv形式に表示(値の指定は closeMid)

USD_JPY,113.722,113.7015,113.8005,113.8345,113.8025
EUR_USD,1.08822,1.08865,1.08947,1.089505,1.08931
EUR_JPY,123.7565,123.782,123.9835,124.0185,123.965
GBP_JPY,147.238,147.229,147.369,147.4185,147.3245
EUR_GBP,0.84048,0.8407,0.84129,0.84131,0.84149
...etc

参考にさせていただいたサイト:


2017/05/13

_ [FreeBSD]ひとまず VirtualBox はインストールできた模様

PYTHONバージョンがどうのこうのという WARNING は残ったものの、 ports を使うことで symlink エラーを無理やり回避出来たようだ。

退役した WindowsXP 32bit パッケージバージョンがあるんで、それをゲストとして 試しにインストールしてみようかな。


2017/05/15

_ [FreeBSD]FreeBSD なサーバーに VirtualBox 5.1.18 を入れて、headless で Ubuntu を動かす

まずは ports から headless用の virtualbox をインストール

# cd /usr/ports/emulators/virtualbox-ose-nox11
# make
#  ... make 出来ることを確認

その後、symlinkエラーを無視するよう修正。virtualbox ポリシーに背くけど (^^; (VirtualBox は GPLなので、それに従いソースの patch を記す)

--- emulators/virtualbox-ose-nox11/work/VirtualBox-5.1.18/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp  2017-05-14 12:55:20.030470000 +0900
+++ emulators/virtualbox-ose-nox11/work/VirtualBox-5.1.18/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp~ 2017-03-16 04:17:34.000000000 +0900
@@ -1404,9 +1404,7 @@
         && !S_ISREG(pFsObjState->Stat.st_mode))
     {
-        if (S_ISLNK(pFsObjState->Stat.st_mode)) {
-            return VINF_SUCCESS;
+        if (S_ISLNK(pFsObjState->Stat.st_mode))
             return supR3HardenedSetError3(VERR_SUPLIB_SYMLINKS_ARE_NOT_PERMITTED, pErrInfo,
                                           "Symlinks are not permitted: '", pszPath, "'");
-        }
         return supR3HardenedSetError3(VERR_SUPLIB_NOT_DIR_NOT_FILE, pErrInfo,
                                       "Not regular file or directory: '", pszPath, "'");

/boot/loader.conf と /etc/rc.conf に関連設定を追加

# vi /boot/loader.conf
vboxdrv_load="YES"
# vi /etc/rc.conf
vboxnet_enable="YES"
vboxdrv_load="YES"

ubuntu 16.04 LTS の DVD image を用いて vboxを作成。 64bit OS、VNC接続(Port=5901) できるように設定。

# vboxmanage createvm --name <VMname> --basefolder /hoge --ostype Ubuntu_64 --register
# VBoxManage modifyvm <VMname> --memory 2048 --acpi on --ioapic on --cpus 2 --hwvirtex on --nestedpaging on --largepages on --nic1 bridged --bridgeadapter1 em0 --nictype1 Am79C973 --cableconnected1 on --boot1 dvd --boot2 disk --boot3 none --boot4 net --usb off --usbehci off
# vboxmanage createhd --size 20480 --filename /PathToVdiImage
# VBoxManage storagectl <VMname> --name "IDE Controller" --add ide --controller PIIX4 --bootable on
# VBoxManage storageattach <VMname> --storagectl "IDE Controller" --port 0 --device 1 --type dvddrive --medium /PathToDvdImage
# VBoxManage storageattach <VMname> --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium /PathToVdiImage
# VBoxManage modifyvm ubuntu1604 --vrde on --vrdeport 5901 --vrdeproperty VNCPassword=<MyPassword>

途中でハマったこと。

最初 ostype を Ubuntu としてインストールしてしまい、DVDをブートして直後に

This kernel requires an x86-64 CPU, but only detected an i686 CPU

エラーが発生した。

色々とググってみると 『BIOSメニュー上で VT-xが有効化されていないから』 というアドバイスを見つけたが、俺の場合は既に設定済み (>_<)。

更にググってみると、ostype と稼働させるOSのbitが異なるからという指摘を見つけ、 まさにその状態であると判明。そこでインストール状態の vbox に対して追加で、

vboxmanage modifyvm <VMname> --ostype Ubuntu_64

とするも、あえなく撃沈 orz

結局 unregistervm して、念のため vbox ファイルも削除してから、 改めて createvm 以降やり直ししたら無事起動できた \(^o^)/ どうやら後から ostype を指定し直してもダメなようだ。


参考にさせていただいたサイト:


2017/05/16

_ Perl 5.24 がリリースされたんだね。

とうとう $_ が使えなくなったのか。 5.10 で登場した時は「Perlって省力化に拘るなぁ」なんて思ってたけど、 いざ使ってみると使いやすかったり間違ったり (-_-;; そういやまだそのまま使ってるライブラリあったよな(*´∀`)


2017/05/18

_ [FreeBSD][ Postgresql]OANDAの直近ヒストリカルデータを溜め込むためにSQL使おうかな

と思い立ち、SQLは何を選ぼうかと色々とググってみたら、 PostgreSQL v9.2以降は JSONが扱えるみたい (^o^)/ 更に、v9.4以降だと JSONB というバイナリ形式も扱えるようだ。(よく判ってないけどw)

そこで、現在 pkg/ports で最新版な PostgreSQL v9.6 をインストールすることにした。 Python と連携するには psycopg2 モジュールもインストールするけど、 FreeBSD-10.3 な現状ではどうやら PostgreSQL v9.3 に依存しているようだ。 仕方なしに、postgresql96 は pkg でインストールし、psycopg2 だけは ports でインストール。

/etc/make.conf:
DEFAULT_VERSIONS+=pgsql=9.6   # ports のデフォルトを v9.6 にする
# pkg install postgresql96-server postgresql96-client
# cd /usr/ports/databases/py-psycopg2
# make install clean
/etc/rc.conf:
postgresql_class="postgres"
postgresql_user="pgsql"
postgresql_data="/PathTo_pgsql/data"
postgresql_enable="YES"

インストールが出来たら initdbを作成し、postgresql サービスを起動。ユーザを追加。 外部アプリからアクセスできることを確認しておく。

# /usr/local/etc/rc.d/postgresql initdb
# /usr/local/etc/rc.d/postgresql start
#
# su pgsql
$ createuser --pwprompt --interactive pgadmin
新しいロールのためのパスワード:
もう一度入力してください:
新しいロールをスーパーユーザにしますか? (y/n)y

追加したユーザにて、新しくデータベースを作ってみる。

% createdb newdb --locale=ja_JP.UTF-8 --encoding=UTF-8 --template template0

参考にさせていただいたサイト:


2017/05/20

_ [PostgreSQL]OANDA API で取得し JSON形式で保存したヒストリカルデータを PostgreSQL で読んでみる

JSON形式で読んで扱えるということで、色々とググりながら SQL文を勉強中。

FileName : PathToJson ... [Pythonから出力した JSONファイル]

{
"USD_JPY": [
    {
        "complete": true,
        "closeMid": 111.4825,
        "highMid": 111.52,
        "lowMid": 111.3545,
        "volume": 2112,
        "openMid": 111.356,
        "time": "2017-05-18T20:00:00.000000Z"
    },
    {
        "complete": true,
        "closeMid": 111.567,
        "highMid": 111.6115,
        "lowMid": 111.451,
        "volume": 2936,
        "openMid": 111.5375,
        "time": "2017-05-18T21:00:00.000000Z"
    },
(snip)
],
"EUR_JPY": [
    {
        "complete": true,
        "closeMid": 123.781,
        "highMid": 123.884,
        "lowMid": 123.743,
        "volume": 539,
        "openMid": 123.7515,
        "time": "2017-05-18T20:00:00.000000Z"
    },
 (snip)
 ]
}

このファイルを PostgreSQL v9.6 で読み込んで、指定した配列要素番号にある closeMid を取得。

% createdb currency --locale=ja_JP.UTF-8 --encoding=UTF-8 --template template0
% psql currency
currency=# create table json_exam as select pg_read_file('PathToJson')::json as jsonColumn;
currency=# \d json_exam
テーブル "public.json_exam"
     列     |  型  | 修飾語
------------+------+--------
 jsoncolumn | json |

currency=# SELECT jsoncolumn::jsonb#>'{USD_JPY,1,closeMid}' FROM json_exam;
   ?column?
 ----------
  111.567
 (1 行)

currency=# SELECT jsoncolumn::jsonb#>'{EUR_JPY,0}' FROM json_exam;
                         ?column?
----------------------------------------------------------------------------
{"time": "2017-05-18T20:00:00.000000Z", "lowMid": 123.743, "volume": 539,
"highMid": 123.884, "openMid": 123.7515, "closeMid": 123.781, "complete": true}
(1 行)

参考にさせていただいたサイト:


2017/05/21 お家サーバ2の外付けHDDの調子が悪い

_ CRCエラーが出始めた

とりあえず新しく外付けHDDを買い、読み取れるデータだけバックアップ開始。

その合間に HDDに関する情報をググってみて萎えました orz

外付けHDDメーカ品番内蔵HDDメーカ内蔵HDD品番
(1)BuffaloHD-LB2.0TU3-BKCSeagateST2000DM01
(2)ELECOMSGD-NX030UBKSeagateST3000DM01

(1)は、今回お亡くなりになったHDD。アマゾンで2年半ほど前に購入。

(2)は、買い足したHDD

そしてどちらもカカクコムでの評価は最悪 ORZ

今回お亡くなりになったHDDの稼働時間を確認したら 19,900時間なので、まぁ寿命ってコト何でしょうねぇ。┐(´д`)┌

買い足したHDDも 2万時間くらいもってくれるといいんだけど、ファンレス筐体のためアイドル時でも 49℃!(室温28℃) 筐体を冷やすファンも買っておくかw


2017/05/23 10年前に自分が作ったプログラムが理解できない

_ ダメだ orz スキルが落ちすぎていて理解できない


2017/05/26

_ [Python]いちいちスクリプト内を編集していてはたまらない (>_<)

Amazon Advertising API を使った商品検索スクリプトを書いて 検索できるようになったはいいけど、価格の上限や検索キーワードを 変えて検索したい場合に、いちいちスクリプトを編集していた。

毎回編集するのは面倒くさい (+_+) ので、Pythonの勉強のため、 オプション解析する便利な方法がないかググってみたら、あるじゃないの (^o^)V

argparse っていうコマンドライン引数解析のための便利なパッケージ!

早速使ってみました。便利すぎる \(^o^)/

def euc_to_unicode( string ):
 return string.decode('euc-jp')
parser = argparse.ArgumentParser(description='Amazon product search program')
parser.add_argument('kw', nargs="?", default="Python",
                    type=euc_to_unicode, help='search keyword')
parser.add_argument('-node',
                    default="MyDefaultNodeId",
                    help='Amazon Node ID. multivalue with comma')
parser.add_argument('-max', type=int, default=30000,
                    help='max limit value for searching')
parser.add_argument('-min', type=int, default=0,
                    help='min limit value for searching')
parser.add_argument("-d", action='count',
                    help="debug flag. multiple times will increase level")
args = parser.parse_args()
print(args.kw, args.node, args.max, args.min, args.d)

参考にさせていただいたサイト:


2017/05/29

_ [Python]OANDA stream API 見ながら自分でコーディングするかどうか

現在のレート値を知るために、OANDA API を勉強しようとしているけど、 参考となるコードをググっていくうちに自分が欲しい機能を実装した コードが在ることを度々見つけてしまうんだよなぁ。

これって、そのまま参考にさせていただくのがいいのか、 はたまた自分のコーディング力を付けるために自力で類似機能を実装 するのが良いのか。悩ましい。