初心に帰ってKaggleで機械学習勉強し直し始めた話
就職してから2年と少し経ちましたが、最近色々辛くて大学生時代の意識高い系自分に戻りたくなりました。
あくまで意識高い 系 なので、決して高スペックでもなかったですがまだ自分に無謀な期待を持っていた時代が懐かしい。
あの頃を思い出しつつ、あの頃雰囲気でしかわかっていなかった機械学習や統計をもう一度勉強し直すためにKaggleなど使って勉強することにしました。
(何度も再入門して挫折していることは内緒。たまにしか書かないブログにまで書いていることが本気の現れ、ということで一つ・・・)
まずは手始めにKaggleのチュートリアル的なコンペであるタイタニックさんをやろうと思います。
Titanic: Machine Learning from Disaster | Kaggle
高得点を狙うとかとうてい無理ですが、最近の道具の使い方や基本的な機械学習などについて思い出しながら(ほぼ再勉強しながら)やっていこうと思います。
この記事は決意表明だけですが、実際にはもう手をつけ始めています。次回からその稚拙な内容を書いていきます。
Log4jのDailyRollingFileAppenderはrollOverするタイミングでプロセスが実行していなくても、次にプロセスが実行されるタイミングでrollOverする話
自分用メモ
DailyRollingFileAppenderで、日付でのローテーションを行う設定をする場合、普段ローテーションするタイミングで サーバーなりプロセスなりが落ちていた場合どうするのでしょう。
まずは確認。DRFAだと普段はMidnightにローテーションされる
At midnight, on March 8th, 2002, /foo/bar.log will be copied to /foo/bar.log.2002-03-08. Logging for the 9th day of March will be output to /foo/bar.log until it is rolled over the next day.
DailyRollingFileAppender (Apache Log4j 1.2.17 API)
じゃあMidnightにサーバー落ちてたらどうなるのっと。
その答えは以下
log4j/DailyRollingFileAppender.java at v1_2-branch · apache/log4j · GitHub
/** * This method differentiates DailyRollingFileAppender from its * super class. * * <p>Before actually logging, this method will check whether it is * time to do a rollover. If it is, it will schedule the next * rollover time and then rollover. * */ protected void subAppend(LoggingEvent event) { long n = System.currentTimeMillis(); if (n >= nextCheck) { now.setTime(n); nextCheck = rc.getNextCheckMillis(now); try { rollOver(); } catch(IOException ioe) { LogLog.error("rollOver() failed.", ioe); } } super.subAppend(event); } }
つまり、まずファイルにログを書き出しする前にちゃんとローテーションされているかをチェックして、されていなければrollOverしてくれるっぽい
cowsay + fortuneで遊ぶ
参考のサイトを少しいじった程度です。以下を~/.zshrc
に記入します。
function random_cowsay() { cows=$(ls -1 /usr/share/cowsay | tr '\n' ' ') cows_array=${(z)cows} num_cows_array=${(w)#cows} random_cows=$(expr $RANDOM % $num_cows_array + 1) cow_name=$cows_array[$random_cows] cowsay -f $cow_name "$(fortune -s)" # I dont know why the line is need below ... echo $RANDOM > /dev/null 2>&1 } random_cowsay
Ref:
LPIC Level 3 (303-150)に受かった
タイトルが全てです。今回、諸般の事情により勉強時間が3日しか取れなかったのでアカンかなと思いましたが、なんとか受かりました。得点は550点と低飛行でしたが・・・;)
使った教材は定番の黒本
そしてこちらのサイトです。
Linux Questions & Answers | Category Archive | 117-303 (v.1)
特に上のサイトが良くて、かなりボリューム感ある演習ができます。
ただ、303-150の試験は2016年8月までで終わりみたいで、303-200の試験しか受けられなくなるみたいですね。早いとこ黒本の新板が出て欲しいところです。
受けた時はまず最初のほうの問題が意味不明なのが多く、落ちることを覚悟しました。後半のほうは見たことある系の問題だったので助かりました。
Windows 10 anniversary update + VirtualboxでBSODを回避する方法
TL;DR Hyper-Vを有効にしてる方は,cmd(管理者権限付き)で以下のコマンドを打って再起動
bcdedit /set hypervisorlaunchtype off
要はHyper-VとVirtualboxの相性が悪いんでしょうかね.
Bash on Ubuntu on Windowsが来てうっひょーとなりながらアップデートしてBash動かしてapt-getしてうっひょーとなっていたのもつかの間,
Vagrant upしようとしたらBSODになって再起動しやがることを繰り返し始めました.
最初は最近アップデートしたVirutalboxがいけないのかなーとか思って,昔のバージョンに戻したりしても全部ダメ.
辛い辛いと思いながらググってたら以下のページを発見
virtualbox.org • View topic - Windows 10 Anniversary Update Broke VirtualBox?
皆さん同じようなことで困っていた様子.つまりはHyper-Vを無効にしろとのこと
そういえば最近bcdedit /set hypervisorlaunchtype auto
とかやってうっひょーってなってたっけなと思って冒頭のコマンド打って再起動したら治りました.
しかしここで重要なのは,筆者が使っているWindows 10はHomeエディションで,そもそもHyper-Vなぞ機能として使えないことです.
(じゃあなんでbcdedit /set hypervisorlaunchtype auto
なんて打ったんだよって話ですが,打つまでProでないとHyper-V使えないと知らなかった情弱でした)
使えない機能をオンにしたらBSODになったという話でした.ProにしてHyper-V有効にしてDocker for Windows使いたい
bash -c オプションの細かい話
とある案件でbash -c
めっちゃ使いてえな・・・となり,いろいろ見ていたんですが,なんか思っていた挙動と違っていたのでメモ
bash -c echo test
でtest
が出力されると思っていました.ところが・・・
$ bash -c test echo (何も表示されない)
どうやら"
などで囲まないと行けないらしい
$ bash -c "echo test" test
man bash
で-c
のセクション読んでもよくわからない・・・解釈力が低すぎる・・・