windowsにprophetをインストールする。
普通にpip install fbprophet
だと入らなかったので。
バックエンドでpystanを使用しているのだが、それがwindowsだとpipで入らないのでいくつかの準備が必要だった。
ここをみながらインストールした。
前提としてAnacondaを利用してインストールする。
Anacondaのインストールはこちら
まずはupdate
conda update conda
conda install libpython m2w64-toolchain -c msys2
依存関係のインストール
conda install numpy cython -c conda-forge conda install matplotlib scipy pandas -c conda-forge
pystanのインストール
conda install pystan -c conda-forge
最後にfbprophetのインストール
pip instal fbprophet
最後だけpip
なのはconda install fbprophet -c conda-forge
で入らなかったため。
本当は混ぜたらいけないのだけれど、なぜかpipだと入った。
さくらのVPSにAsteriskを設定し、内線通話するまで
自分用に
- まずはOSを選択
- アップデートとaptitudeのインストール
- fail2banのインストール
- 設定ファイルを書く
- iptablesの設定
- asteriskのインストール
- sip.conf, extensions.confのバックアップを取った後、適当に書き換える
- 出典
まずはOSを選択
自分はUbuntu 16.04 LTS
を選びました。Asteriskが簡単にインストールできるため。
ただしスタートアップスクリプトでufwは使わないほうがいいと思います。fail2banとコンフリクトしそうな気がします。
アップデートとaptitudeのインストール
sudo apt update sudo apt upgrade sudo apt-get install aptitude
fail2banのインストール
sudo aptitude install fail2ban
設定ファイルを書く
最初にfail2banはjail.confファイルを直接編集することは推奨されていないため、jail.localファイルを編集するようにする。
cd /etc/fail2ban sudo cp jail.conf jail.local sudo nano jail.local
jail.localに以下の文を追記する
[asterisk-iptables]と[blacklist]を設定してやる
[asterisk-iptables] enabled = true filter = asterisk action = iptables-allports[name=ASTERISK, protocol=all] sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@example.org] logpath = /var/log/asterisk/security maxretry = 5 bantime = 259200 [blacklist] enabled = true logpath = /var/log/fail2ban.* filter = blacklist banaction = blacklist bantime = 31536000 ; 1 year findtime = 31536000 ; 1 year maxretry = 10
blacklistの作成
// /etc/fail2ban/filter.d/blacklist.conf の作成 $ cd /etc/fail2ban/filter.d $ sudo wget https://raw.githubusercontent.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning/master/filter.d/blacklist.conf -O blacklist.conf // /etc/fail2ban/action.d/blacklist.conf の作成 $ cd /etc/fail2ban/action.d $ sudo wget https://raw.githubusercontent.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning/master/action.d/blacklist.conf -O blacklist.conf
/etc/fail2ban/filter.d
のasterisk.conf
ファイルを編集する
まずはファイルのバックアップ
cd /etc/fail2ban/filter.d mv asterisk.conf asterisk.conf.old
nano asterisk.conf
で以下の内容のファイルを作る
# Fail2Ban configuration file # # # $Revision: 250 $ # [INCLUDES] # Read common prefixes. If any customizations available -- read them from # common.local #before = common.conf [Definition] #_daemon = asterisk # Option: failregex # Notes.: regex to match the password failures messages in the logfile. The # host must be matched by a group named "host". The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>\S+) # Values: TEXT # failregex = SECURITY.* SecurityEvent="FailedACL".*RemoteAddress=".+?/.+?/<HOST>/.+?".* SECURITY.* SecurityEvent="InvalidAccountID".*RemoteAddress=".+?/.+?/<HOST>/.+?".* SECURITY.* SecurityEvent="ChallengeResponseFailed".*RemoteAddress=".+?/.+?/<HOST>/.+?".* SECURITY.* SecurityEvent="InvalidPassword".*RemoteAddress=".+?/.+?/<HOST>/.+?".* # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =
fail2banの再起動
sudo service fail2ban restart
起動する場合はsudo service fail2ban start
iptablesの設定
/etc/iptables/iptables.rules
を設定する
まずはバックアップ
cd /etc/iptables sudo mv iptables.rules iptables.rules.old
んでsudo nano iptables.rules
で以下を記述する
port:5060 UDP:10000~20000だと乗っ取りが怖いので多少変更してやる
具体的にはport:15060 UDP:20000~30000
設定がうまくいかなかったため、そのままでいくことにした。
*filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p udp -m udp --dport 5060 -j ACCEPT -A INPUT -p tcp -m tcp --dport 5060 -j ACCEPT -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
sudo iptables-restore > /etc/iptables/iptables.rules
でiptablesを再起動する。
sudoが絶対必要なので忘れない!!
asteriskのインストール
sudo aptitude install asterisk
sip.conf, extensions.confのバックアップを取った後、適当に書き換える
cd /etc/asterisk sudo mv sip.conf sip.conf.old sudo mv extensions.conf extensions.conf.old
sip.conf
[general] context=default port=5060 bindaddr=0.0.0.0 language=ja allow = ulaw allow = alaw allow = gsm allow = ilbc dtmfmode = inband [201] type=friend defaultuser=201 secret=pass host=dynamic canreinvite=no nat = force_rport,comedia [202] type=friend defaultuser=202 secret=pass host=dynamic canreinvite=no nat = force_rport,comedia
extensions.conf
[default] ; ; By default we include the demo. In a production system, you ; probably don't want to have the demo there. ; ;include => demo exten => 201,1,Dial(SIP/201,30,r) exten => 201,2,Hangup() exten => 202,1,Dial(SIP/202,30,r) exten => 202,2,Hangup() exten => 203,1,Answer() exten => 203,2,Playback(hello-world) exten => 203,3,Hangup()
以上でつながるはず。
出典
【Android Studio】Ankoが入らない
110P~Ankoセットアップについて
こちらの勉強をしているのだがバージョンの為か微妙に入らなかった。
- 作者: 金田浩明
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2018/04/20
- メディア: 単行本
- この商品を含むブログを見る
P110には正誤表があるのでそれをもとに最新のAnkoのバージョンにしたが、P111も訂正しなくてはいけなかった。
×:implementation "org.jetbrains.anko:anko-common:$anko_version"
〇:implementation "org.jetbrains.anko:anko-commons:$anko_version"
【Android Studio】Failed to load AppCompat ActionBar with unknown error.
StackOverflowより
Failed to load AppCompat ActionBar with unknown error.
て出たとき
styles.xml内の
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
→<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
に変更
お客様に貸し出すタブレットについて
昨今ホテルのお部屋にタブレット端末を導入することなどがあるかと思います。
その際SIerにタブレット端末の導入を見積もると半端ない値段とられたりします。しかも月ごとの課金とか。
そこで自分なりにどうやったら無料もしくはローコストで部屋に安全にタブレット端末を置けるか考えてきました。
Android限定にはなりますが、ようやくお客様のお部屋に入れるタブレットのベストプラクティスっぽいものができそうなので途中経過を共有します。
必要な要件
- 決まった時間にデータを削除すること
- 変なアプリを入れたり入れられたりしないこと
- 前のお客様の履歴(ブラウザのCookieなど)を見れないようにすること
こんなところだろうと思います。
①、②について:
- これは基本的には無料のmobilock kiosk lockdown basicを入れてそもそも不必要なアプリや設定画面を表示させないことで実現できると思います。
③について:
- これはmobilockとの合わせ技でfirefox focusを利用します。
こちらのアプリですが再起動時にすべての履歴やキャッシュを消去してくれるという非常にありがたい機能がついています。無料で
最後に:
- これだけだと電源オンのままだとブラウザの履歴が残ったままになりますので、決まった時間(例えばお昼12時など)に自動的に再起動をかけます。再起動のやり方は後ほどブログに載せます。
ここまで設定するとお客様も自分たちも気を遣わずにタブレット端末をお部屋に置くことができるかな、と思いました。
多少使いづらくはなりますが、すべての設定をフルで開放してしまうと持って行くお客様も出そうですし、こんな形がよいのかなと思いました。
Google Colaboratory できゅうりを選別する。
最近少しずつ趣味でディープラーニングを勉強しているのでそのアウトプットとして2年ほど前に話題になったキュウリを仕訳してみます。
モチベーション:写経だけじゃなくてもう少し踏み込んだところで機械学習をしたかった。
- 使用するモジュール:Keras
- 使用するアルゴリズム:CNN
jupyter notebookでゼロから作るディープラーニングを写経していたのですが、思った以上に学習に時間がかかることがわかりめちゃくちゃだるくなったため、 似たようなサービスであるGoogle Colaboratoryを利用してディープラーニングやってみます。
まだまだ勉強中につき深いことはわかりませんが、なんとなくでも実装できないかしら?と思ってやってみた。結果としてできたけどふわっとしてる
わかったこと:
- Google Colaboratoryの使い方がわからなかったため、めちゃくちゃつまづいた。
- さらにきゅうりの画像の読み込み方はさっぱりわからなかった。
- 前処理が教科書だとざっくりとkeras.dataset使えとかなんとか書いてあるけど、きゅうりの場合それがそもそもわからなかった。 そこでゼロから作るディープラーニングのMNISTのやつをちゃんと読んだ。 冗談かもしれないがそれでもわからなかったのでさらにcifar-10のやつやQiitaなどを読んだ。そしてほぼ丸々パクった。
わからなかったことがわかったこと:
- 途中の変数の
nb_train_samples
が何なのかわからない。 - CNNのsequentialの実装だがこれはたぶんだけどいろいろ流儀というかモデルの作り方があるみたいだ。今回は畳み込み層が2層と結合層が1層の畳み込みニューラルネットワーク・・だよね?
以下ソース
#まずはファイルをアップロードする。 from google.colab import files uploaded = files.upload()
アップロードするのはGithubからダウンロードしたやつ
ダイアログボックスが出るのでアップロードする。
ファイルの解凍
#ファイルを解凍する。 !tar -zxvf cucumber-9-python.tar.gz
解凍できているみたいだ。
#解凍したファイルを読み込む # def unpickle(f): import pickle fo = open(f, 'rb') d = pickle.load(fo,encoding = 'latin-1') fo.close() return d #訓練データを読み込む nb_train_samples = 2475 x_train = np.zeros((nb_train_samples, 3, 32, 32), dtype='uint8') y_train = np.zeros((nb_train_samples,), dtype='uint8') for i in range(1,5): fpath ='data_batch_' + str(i) batch_dict = unpickle(fpath) data = batch_dict['data'] labels = batch_dict['labels'] x_train[(i-1)*495:i*495, :, :, :] = data.reshape(495, 3, 32, 32) y_train[(i-1)*495:i*495] = labels #教師データを読み込む data = unpickle("test_batch") x_test = data['data'].reshape(495,3,32,32) y_test = data['labels']
次にデータを3つにわける
#処理したデータを3個に分割する。 from sklearn.model_selection import train_test_split x_train1,x_valid,y_train1,y_valid = train_test_split(x_train,y_train,test_size = 0.175)
次はモデルの設計図となるSequentialをデザインする。ここでCNNかRNNかNNかとかそういったいろいろが決まる。
#Sequentialの実装。ほぼコピペ。元画像がMNISTだと28*28*1だがきゅうりの場合は32*32*3なのでそれにあわせて書き換える。 #あと出力層はMNISTの場合10だがきゅうりの場合は9だとかなんとか from keras.models import Sequential from keras.layers import Dense,Dropout,Flatten from keras.layers import Conv2D , MaxPooling2D import keras model = Sequential() model.add(Conv2D(32,kernel_size = (3,3),activation = 'relu' , input_shape=(32,32,3))) model.add(Conv2D(64,(3,3),activation = 'relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0,25)) model.add(Flatten()) model.add(Dense(128,activation='relu')) model.add(Dropout(0,5)) model.add(Dense(9,activation = 'softmax'))
データをきれいにする。
#データの正則化。なぜやるのかよくわからない。 x_train = x_train.reshape(x_train.shape[0],32,32,3) x_valid = x_valid.reshape(x_valid.shape[0],32,32,3) x_test = x_test.reshape(x_test.shape[0],32,32,3) x_train = x_train.astype('float32') x_valid = x_valid.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_valid /= 255 x_test /= 255 y_train = keras.utils.to_categorical(y_train,9) y_valid = keras.utils.to_categorical(y_valid,9) y_test = keras.utils.to_categorical(y_test,9)
最後に学習とデータの確認。 なんかわからんけど出来ているようだ。
#学習させる。 from keras.optimizers import RMSprop model.compile(loss='categorical_crossentropy', optimizer = RMSprop(), metrics=['accuracy']) history = model.fit(x_train,y_train, batch_size = 120, epochs=10, verbose=1, validation_data = (x_valid,y_valid))
https://colab.research.google.com/drive/1o7gosgj5NytGGAXvjHxlnuXjW9bxk5E2