動かざることバグの如し

近づきたいよ 君の理想に

python3でNo module named sklearnエラー

環境

  • Python3

こんな感じ

~/python/Random-Forest-Example $python estimation.py 
Traceback (most recent call last):
  File "estimation.py", line 2, in <module>
    from sklearn.ensemble import RandomForestClassifier
ImportError: No module named 'sklearn'

解決

apt経由でインストールしろとか言う記事もあるけどpip経由のほうが無難

pip install scikit-learn

Ubuntuの自動アップデートを無効に設定する

サーバー運用だと自動でアップデートされると都合がわるいときもある。ってことで無効化設定するメモ

対象環境

ファイルで設定変更する

自動アップデートをするかどうかは/etc/apt/apt.conf.d/20auto-upgradesを書き換える。デフォルトは1なので

root@myubuntu:~# cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

0に書き換える

root@myubuntu:~# cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

これでおk

Ubuntuのバージョンによってファイル名違ってる問題

/etc/apt/apt.conf.dの中にあるのは確実なんだけど微妙にファイル名が違う場合がある。

そこで先にgrepしておくといい この場合は /etc/apt/apt.conf.d/10periodic の値を書き換えればおk

# grep APT::Periodic::Update-Package-Lists /etc/apt/apt.conf.d/*
/etc/apt/apt.conf.d/10periodic:APT::Periodic::Update-Package-Lists "1";

以下のようにヒットしなかった場合は /etc/apt/apt.conf.d/20auto-upgrades を作成して設定する

# grep APT::Periodic::Unattended-Upgrade /etc/apt/apt.conf.d*

コマンドで設定変更する

さすがUbuntu、それ用のコマンドも用意してあった

apt install -y unattended-upgrades

でインストールして

dpkg-reconfigure --priority=low unattended-upgrades

を実行すると有効にする?って聞かれるので、自動アップデートしたければ「Yes」、じゃなければ「No」を選択

実際に書き換えてるファイルは/etc/apt/apt.conf.d/20auto-upgradesっぽい まぁそりゃそうか

動作確認のログは?

/var/log/unattended-upgrades に吐かれる。1日1回とのこと。

参考リンク

Mechanizeでページを取得するたびにランダムなプロキシサーバーを設定

スクレイピングに便利なMechanize

だけどアクセスしまくるとBANされてしまうのでプロキシを使うことで回避しようという話

環境

  • ruby 2.3
  • Mechanize
  • プロキシサーバー2台以上
  • 同じポートでアクセスできるようにしてあると便利である

やりかた

モンキーパッチ?はやり方がよくわからないので、Mechanizeクラスを継承して新しくオレオレクラスを作成する

class MechanizeHelper < Mechanize
  def get(uri, parameters = [], referer = nil, headers = {})
    proxies = ['8.8.8.8', '8.8.4.4']
    self.set_proxy(proxies.sample, 8888)
    self.max_history = 1
    self.keep_alive = false
    self.read_timeout = 60
    super
  end
end

これでつかうときにMechanizeHelperをイニシャライズする

agent = MechanizeHelper.new
agent.get('https://www.yahoo.co.jp/')

これで診断くんとか見るとたしかにIPがランダムに変わっている

squidの設定ジェネレーターが欲しい

たががプロキシサーバー、されどプロキシサーバー。

機能が豊富な分、設定項目が多すぎてつらいsquid

毎回ググるのも辛いので備忘録

# security
http_port xxxx

acl myhome src xxx.xxx.xxx.xxx/32
http_access allow myhome

http_access allow localhost

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
http_access allow localnet

acl SSL_ports port 443
acl purge method PURGE
acl CONNECT method CONNECT

acl Safe_ports port 80
acl Safe_ports port 443
http_access deny !Safe_ports

http_access deny all

# privacy
forwarded_for off
request_header_access Referer deny all
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

# other
access_log /var/log/squid/access.log combined

no_cache deny all