Yado_tech

旅館+ITとはなんぞ

windowsにprophetをインストールする。

f:id:devilmakelie:20181020212344p:plain

普通にpip install fbprophetだと入らなかったので。

バックエンドでpystanを使用しているのだが、それがwindowsだとpipで入らないのでいくつかの準備が必要だった。

ここをみながらインストールした。

前提としてAnacondaを利用してインストールする。
Anacondaのインストールはこちら

weblabo.oscasierra.net

まずはupdate

conda update conda

次にc++コンパイラのインストール

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を設定し、内線通話するまで

f:id:devilmakelie:20180109191549p:plain

自分用に

まずは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.dasterisk.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.rulesiptablesを再起動する。

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()

以上でつながるはず。

出典

Fail2Banでアクセス制限

Fail2Ban (with iptables) And Asterisk - VoIP-Info

【Android Studio】Ankoが入らない

110P~Ankoセットアップについて

こちらの勉強をしているのだがバージョンの為か微妙に入らなかった。

はじめてのAndroidプログラミング 第3版

はじめてのAndroidプログラミング 第3版

P110には正誤表があるのでそれをもとに最新のAnkoのバージョンにしたが、P111も訂正しなくてはいけなかった。

f:id:devilmakelie:20180907220031p:plain

f:id:devilmakelie:20180907220426p:plain

×: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.

f:id:devilmakelie:20180903141249p:plain

StackOverflowより

Failed to load AppCompat ActionBar with unknown error.て出たとき

f:id:devilmakelie:20180907215152p:plain

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">

に変更

github.com

お客様に貸し出すタブレットについて

昨今ホテルのお部屋にタブレット端末を導入することなどがあるかと思います。

その際SIerタブレット端末の導入を見積もると半端ない値段とられたりします。しかも月ごとの課金とか。

 

そこで自分なりにどうやったら無料もしくはローコストで部屋に安全にタブレット端末を置けるか考えてきました。

 

Android限定にはなりますが、ようやくお客様のお部屋に入れるタブレットのベストプラクティスっぽいものができそうなので途中経過を共有します。

 

必要な要件

  1. 決まった時間にデータを削除すること
  2. 変なアプリを入れたり入れられたりしないこと
  3. 前のお客様の履歴(ブラウザのCookieなど)を見れないようにすること

こんなところだろうと思います。

①、②について:

  • これは基本的には無料のmobilock kiosk lockdown basicを入れてそもそも不必要なアプリや設定画面を表示させないことで実現できると思います。

    play.google.com

③について:

  • これはmobilockとの合わせ技でfirefox focusを利用します。
    こちらのアプリですが再起動時にすべての履歴やキャッシュを消去してくれるという非常にありがたい機能がついています。無料で

    play.google.com

最後に:

  • これだけだと電源オンのままだとブラウザの履歴が残ったままになりますので、決まった時間(例えばお昼12時など)に自動的に再起動をかけます。再起動のやり方は後ほどブログに載せます。

 

ここまで設定するとお客様も自分たちも気を遣わずにタブレット端末をお部屋に置くことができるかな、と思いました。

 

多少使いづらくはなりますが、すべての設定をフルで開放してしまうと持って行くお客様も出そうですし、こんな形がよいのかなと思いました。

 

japandasで `module 'pandas.core.common' has no attribute 'is_list_like'` て出たとき

どうやらpandas.core.commonがpandas.api.typesに変更になった模様。

てことでjapandasのソースを書き換えてください。

~\Anaconda3\Lib\site-packages\japandas\tseries

f:id:devilmakelie:20180830165519p:plain

9行目をコメントアウトして1行追加するだけ

#import pandas.core.common as com
import pandas.api.types as com

以上。

Google Colaboratory できゅうりを選別する。

f:id:devilmakelie:20180817174629p:plain

最近少しずつ趣味でディープラーニングを勉強しているのでそのアウトプットとして2年ほど前に話題になったキュウリを仕訳してみます。

モチベーション:写経だけじゃなくてもう少し踏み込んだところで機械学習をしたかった。

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からダウンロードしたやつ

ダイアログボックスが出るのでアップロードする。

f:id:devilmakelie:20180817173720p:plain

ファイルの解凍

#ファイルを解凍する。
!tar -zxvf cucumber-9-python.tar.gz

解凍できているみたいだ。

f:id:devilmakelie:20180817173922p:plain

#解凍したファイルを読み込む
#
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))

f:id:devilmakelie:20180817174425p:plain

https://colab.research.google.com/drive/1o7gosgj5NytGGAXvjHxlnuXjW9bxk5E2

パクリ元: