動かざることバグの如し

近づきたいよ 君の理想に

PCが重くしている戦犯 TiWorker.exeを殺す

Windowsを起動してしばらくすると、すごく重くなっていることがある。 タスクマネージャーとかで観察していると、どうも原因はTiWorker.exeにあった

TiWorker.exeとは

どうやらWindowsUpdateに関係あるっぽい。

これらはWindows OSに新しいプログラムやモジュール、更新プログラムなどをインストールするために利用されるプログラムやその補助プロセスである。ユーザーによる明示的なインストールの場合だけでなく、例えばWindows Updateによる自動的なバックグラウンドでのインストール時などにも実行されている。

Tech TIPS:Windows OSでよく見かける重いプロセス、ベスト10 - @ITより引用

解決策

Windows10だと自分でWindows Updateを切れないクソ仕様なのでどうしようもない、、、

pythonで配列操作

1〜10までの配列をつくりたい

array = list(range(1,10))
>> [1, 2, 3, 4, 5, 6, 7, 8, 9]

rubyでいうeachをしたい

for num in array:
    print(num)

rubyでいうeach_with_Indexがしたい

array = list(range(1,10))
for i,num in enumerate(array):
    print(i, num)

以下のように表示される

0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9

rubyでいうmapがしたい

例えば配列の全要素に1を足したい場合

非常に汚いやり方だと以下

array = list(range(1,10))
for i,num in enumerate(array):
    print(i,num)
    array[i] = num + 1

pythonにもmap関数はあってそれを使うと以下 phpと一緒でメソッドを先に用意しなくてはいけない

array = list(range(1,10))

def plus(num):
    return num + 1

array = list(map(plus, range(1, 10)))

今回のタスクでは内包記法?ってやつが一番スマートに見えた

array = list(range(1,10))
a = [num+1 for num in array]

Python3環境でMecabを動かす

環境

そもそもMecabが入ってなかったら以下でインストールする

thr3a.hatenablog.com

echo おはよう|mecabで表示されればOK

pythonMecabを使えるように

pip install mecab-python3

サンプル

# coding: utf-8
import MeCab
 
text = '庭には二羽鶏がいる。'
mecab = MeCab.Tagger('mecabrc')
mecab.parse('')

node = mecab.parseToNode(text)
while node:
    print(node.surface, node.feature)
    node = node.next

結果

 BOS/EOS,*,*,*,*,*,*,*,*
庭 名詞,一般,*,*,*,*,庭,ニワ,ニワ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
二 名詞,数,*,*,*,*,二,ニ,ニ
羽 名詞,接尾,助数詞,*,*,*,羽,ワ,ワ
鶏 名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
いる 動詞,自立,*,*,一段,基本形,いる,イル,イル
。 記号,句点,*,*,*,*,。,。,。
 BOS/EOS,*,*,*,*,*,*,*,*

mecab.parse(‘’)の謎

先程のコードで mecab.parse('')の空パースをせずにいきなり文章を投げるとエラーになる事がある。

 BOS/EOS,*,*,*,*,*,*,*,*
.7 名詞,一般,*,*,*,*,庭,ニワ,ニワ
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-47-6ae1b4dc3c53> in <module>()
      8 node = mecab.parseToNode(text)
      9 while node:
---> 10     print(node.surface, node.feature)
     11     node = node.next

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 1: invalid start byte

バグ?っぽいので現状読み込み時の最初に空パースするのが安全だと思う

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回とのこと。

参考リンク