MySQL,MariaDBでログファイルが作られない問題

なぜかログファイルが
my.cnfに

log_error = /var/log/mysql/error.log

とかちゃんと指定してるのにファイル自体が作られない。

なんでだろうと思ったらただのフォルダのパーミッションの設定が悪かっただけでした。

単純ミスだけど意外と見落としたから一応記録

FirefoxのseleniumでnameとIDのelementを取得

答えから
//タグ名=”form”を検索
driver.findElement(By.cssSelector(“form”)).click();
//クラス名=”login”を検索
driver.findElement(By.cssSelector(“.login”)).click();
//id名=”form”を検索
driver.findElement(By.cssSelector(“#testForm”)).click();
//タグ名=”input”、クラス名=”login”を検索
driver.findElement(By.cssSelector(“input.login”)).click();
//タグ名=”form”、id名=”testForm”を検索
driver.findElement(By.cssSelector(“form#testForm”)).click();

 

終わり!
 

java.lang.OutOfMemoryErrorの対処法

java.lang.OutOfMemoryErrorは出ないけど、GCが頻発しまくるのでメモリの調整をしてみた

Tomcat の起動パラメータ設定
Eclipse のTomcat プラグイン設定
ウインドウ > 設定 > Tomcat > JVM 設定 > JVM パラメータへ追加

以下のパラメータを設定する。

-XX:MaxPermSize=256m
-Xmx1024m
-Xms256m
RAMの容量を考慮して、適宜メモリを割り当てる。

追記:また足りなくなった
-XX:MaxPermSize=512m
-Xmx2048m
-Xms512m

なんか根本的に解決探さないといけないかな

PubNub java でPNBadRequestCategory

pubnub-gson-4.19.0-all.jarでWebsocket的な高速のデータ取得(subscription)をやろうとした

subscriptionだけならPublishKeyはなくても良いとのこと

テストコード

PNConfiguration pnConfiguration = new PNConfiguration();
//pnConfiguration.setLogVerbosity(PNLogVerbosity.BODY);

pnConfiguration.setSubscribeKey(“sub-c-e12e9174-dd60-11e6-806b-02ee2ddab7fe”);
//pnConfiguration.setPublishKey(“demo”);

pnConfiguration.setReconnectionPolicy(PNReconnectionPolicy.LINEAR);
//pnConfiguration.setSecure(false);

PubNub pubnub = new PubNub(pnConfiguration);

 

これでpubnubにchannelをexcuteしたらできる

だけどなぜかError=PNConnectedCategoryで動かない

正しいパターン
statusPNStatus(category=PNConnectedCategory, errorData=null, error=false, statusCode=200, operation=PNSubscribeOperation, tlsEnabled=true, uuid=null, authKey=null, origin=ps.pndsn.com, clientRequest=Request{method=GET, url=https://ps.pndsn.com/v2/subscribe/sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f/lightning_ticker_BTC_JPY/0?requestid=5fd2956a-3935-4f3d-85f1-da2fb9c9fb0f&heartbeat=300&tt=0&pnsdk=PubNub-Java-Unified/4.19.0&uuid=pn-acc4761e-6587-4195-931b-dff944ddf1cc, tag=null}, affectedChannels=[lightning_ticker_BTC_JPY], affectedChannelGroups=[], executedEndpoint=null)

正しくないパターン
statusPNStatus(category=PNBadRequestCategory, errorData=PNErrorData(information=null, throwable=com.pubnub.api.PubNubException), error=true, statusCode=0, operation=PNSubscribeOperation, tlsEnabled=false, uuid=null, authKey=null, origin=null, clientRequest=null, affectedChannels=[lightning_ticker_BTC_JPY], affectedChannelGroups=[], executedEndpoint=com.pubnub.api.endpoints.pubsub.Subscribe@65a58842)

別環境では動いたからライブラリが干渉してたっぽい

具体的にはgson-2.3.1.jarをはずすと動いた。

If you catch the error “PNBadRequestCategory” in pubnub-gson-4.19.0-all.jar  , just remove gson library (gson-2.3.1.jar etc…)

ってことだ

 

ubuntu16.0.4でGeforceでCUDAでcnDNN

今流行のディープラーニングを本格的にやってみようと思ったら色々ハマったのでメモ

環境:GeForce GTX 1080 Ti
OS:ubuntu16.0.4

自分の環境だと最新版が動かなかったので古いCUDA8をいれた

前準備
sudo apt update
sudo apt upgrade

ubuntu-16.04.3-server-amd64.iso
をダウンロードして
rufus-2.18でUSBメモリにISOをいれてインストール

このときせっかくだからキーボードの確認無しで自動的にOSをインストールするPRESEEDをしようとしたけど、成功しなかったから面倒くさくなってあきらめた。
(ちなみにCentOSだったらKickstartっていう)

Command Lineが出てきたら以下実行

CUDAインストール
wget https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb

sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb
sudo apt update

sudo apt install cuda cuda-drivers
sudo reboot

ファイルパスを通す

export PATH=”/usr/local/cuda/bin:$PATH”
export LD_LIBRARY_PATH=”/usr/local/cuda/lib64:$LD_LIBRARY_PATH”

この後nvidia-smiで確認すると成功してたら↓みたいなのがでてくる
+—————————————————————————–+
| NVIDIA-SMI 384.90 Driver Version: 384.90 |
|——————————-+———————-+———————-+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108… On | 00000000:02:00.0 Off | N/A |
| 91% 81C P2 204W / 220W | 812MiB / 11170MiB | 99% Default |
+——————————-+———————-+———————-+

消費ワット下げることもできる
sudo nvidia-smi -pl 240

※persistence-modeを有効じゃないと出来ないっぽい
sudo nvidia-smi -i 0 -pm ENABLED

deb削除する場合
rm cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb

cuDNNのインストール
https://developer.nvidia.com/rdp/cudnn-download
からcuDNN 6 for CUDA 8.0のdebパッケージをダウンロード
# Install Runtime library
sudo dpkg -i libcudnn6_6.0*+cuda8.0_amd64.deb
# Install developer library
sudo dpkg -i libcudnn6-dev_6.0*+cuda8.0_amd64.deb
# Install code samples and user guide
sudo dpkg -i libcudnn6-doc_6.0*+cuda8.0_amd64.deb

cuDNNの動作確認
cuda-install-samples-8.0.sh ~
cd ~/NVIDIA_CUDA-8.0_Samples/
make
cd bin/x86_64/linux/release
./smokeParticles

これでいけるはず

おまけ
CCminerもインストールしてみた

sudo apt-get install automake libssl-dev libcurl4-nss-dev
wget https://github.com/Nanashi-Meiyo-Meijin/ccminer/archive/v2.2-mod-r2.tar.gz
tar zxvf v2.2-mod-r2.tar.gz
cd ccminer-2.2-mod-r2

bash autogen.sh
./configure
make

OANDAのFIXprotocolでレートを取得

色々あってドル円とかのレートデータを高速で取得する必要があった。
調べたところThe Financial Information eXchange (FIX) protocolがなんか良い感じでスタンダードらしいからそれで構築することにした。

使用したものはQuickFIX/J

http://www.quickfixj.org/

です

YJFXのFIXプロトコルはそこそこ素直に出来たけどOANDAはかなり悩んだ。

ハマったポイントはレートサーバーは別です!
//settings.setString(“SocketConnectHost”, “fxgame-fix.oanda.com”);
settings.setString(“SocketConnectHost”, “fxtrade-fix.oanda.com”);

だけじゃだめ

if(rateServer)settings.setString(“TargetSubID”, “RATES”);

これがいる

これあるとレートサーバーに繋いでくれます。そうじゃないと

toApp :8=FIX.4.49=12735=V34=249=USERID52=20171104-11:48:06.69256=OANDA262=foo263=1264=1265=1266=Y146=155=USD/JPY267=2269=0269=110=207

fromApp :8=FIX.4.49=10835=j34=349=OANDA52=20171104-11:48:05.33056=pp35260445=258=MsgType <35> = V not supported.372=V380=310=180

って怒られます。

正しいリクエスト↓

toApp :8=FIX.4.49=13635=V34=249=USERID52=20171104-11:54:35.94856=OANDA57=RATES262=foo263=1264=1265=1266=Y146=155=USD/JPY267=2269=0269=110=251

んですべてのリクエストに毎回「57=RATES」を入れないとダメです

@Override
public void toAdmin(Message msg, SessionID sessionID) {

try {
String msgType = msg.getHeader().getString(MsgType.FIELD);
if(settings.isSetting(“TargetSubID”))
try {
msg.setString(quickfix.field.TargetSubID.FIELD,
settings.getString(sessionID, “TargetSubID”));
} catch (ConfigError | FieldConvertError e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(MsgType.LOGON.compareTo(msgType) == 0)
{

try {
if(settings.isSetting(“Password”))msg.setString(quickfix.field.Password.FIELD,
settings.getString(sessionID, “Password”));
msg.setString(quickfix.field.ResetSeqNumFlag.FIELD,
“Y”);

} catch (ConfigError e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FieldConvertError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (FieldNotFound e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

System.out.println(“toAdmin :”+msg.toString());
}
public void toApp(Message msg, SessionID sessionId) throws DoNotSend {
if(settings.isSetting(“TargetSubID”))
try {
msg.setString(quickfix.field.TargetSubID.FIELD,
settings.getString(sessionID, “TargetSubID”));
} catch (ConfigError | FieldConvertError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(“toApp :”+msg.toString());
}

ゴミコードも置いときます。

 

eclipseのコンソール出力をテキストファイルに保存する方法

そのままConsoleのlogをtextで保存したい。

やり方

runの▷矢印の右らへんの▽クリックしてrun configurationでEclipse application選択して、CommonでOutput Fileにチェックして保存自体場所を選んで終わり

Tomcatでjre1.8.0_131が勝手にjre1.8.0_144になって動かなくなった問題

なんか勝手にアップデートされて jre1.8.0_131からjre1.8.0_144になってた
そしたらeclipseでデバックと言うか全然ライブラリーないよーって怒られた。
勝手なアップデートはほんと辞めてほしいけど、対応した

ProjectのPropetiesでJava Build PathのライブラリでJRE System Library(unbound)をremoveして

Add LibraryでJRE System Library選択してjre1.8.0_144が自動選択されるのでそれを選択しつつFinish

以上!

 

SQLで秒おきの最新のカラムのみを取ってくるクエリ

統計処理で何分とか、何時間とか何秒とかで区切りをつけてSQLを取ってきたい時がある
その時は以下の方法でできそう

SELECT DATE_FORMAT(FROM_UNIXTIME(TRUNCATE(UNIX_TIMESTAMP(`date`) / 180, 0) * 180), ‘%Y-%m-%d %H:%i’) AS custom_date,`id`
FROM `child` Where `date`>\”2017-07-04 00:00:00\” GROUP BY TRUNCATE(UNIX_TIMESTAMP(`date`) / 180, 0) ORDER BY `date`DESC LIMIT 360″;