メモめもメモ

環境構築やプログラミングに関するメモ

scikit-learnで混同行列を求める

python向け機械学習ライブラリであるscikit-learnを使って、混同行列を計算します。 scikit-learnのインストール 多くの場合は下記コマンドでインストール可能です。 より詳しいインストール方法は公式ドキュメントを参照してください。 pipの場合 pip insta…

PythonのNetworkXパッケージを使って重み付き有向グラフの最短経路をダイクストラ法で求める

Pythonのネットワーク計算パッケージ「NetworkX」を使用して重み付き有向グラフの最短経路をダイクストラ法で求めます。 NetworkXのインストール 下記のようにpipでインストールができます。 pip install networkx 今回はNetworkX2.2を使用しました。 グラフ…

「ファイルを開く」や「名前を付けて保存」のコモンダイアログの動作が遅くなる問題

「ファイルを開く」や「名前を付けて保存」のコモンダイアログの動作が遅くなる問題を解決した。 私の場合はKDriveが原因だったが、おそらくこれレアケースで通常は別の個所に問題がある。 今回はレアケースなだけあってネット上に適切な解決方法が一切なか…

dockerを使ってMattermostを立ち上げる

mattermost/mattermost-dockerのReadmeに沿ってdockerを使ってMattermostをセットアップしたメモ。 思いのほか簡単にできた。 試した環境 OS:Ubuntu 16.04 使用したリポジトリ:mattermost/mattermost-docker(コミットea79d25) 非プロキシ環境 手順 必要…

Python3でコードを並列実行して高速化する

コードを並列実行する方法はマルチスレッドを使う方法とマルチプロセスを使う方法がありますが、Pythonはグローバルインタプリタロック(GIL)と呼ばれる仕組みにより同一プロセス内では常に1スレッドしか進行できません。そのため、マルチスレッドを使う方…

Pythonでパケットキャプチャ(Windows用)

RAWソケットを使ってWindowsでパケットキャプチャを行います。 実行には管理者権限が必要です。このスクリプトでキャプチャできるのはIPから上位のレイヤーであり、Ethernetヘッダはキャプチャできません。 コード import socket MYHOST = "自分のIPアドレス…

pythonでマウスカーソルを移動させる(Windows API使用)

Windows APIのSetCursorPosをpythonのctypesライブラリから呼び出し、マウスカーソルの座標を指定します。 コード 下記コードはx座標100・y座標50の地点へマウスカーソルを移動させます import ctypes # 座標(x, y)にマウスカーソルを移動させる def SetCurs…

Python3でpyopensslを使ってRSA秘密鍵ファイルを生成する

インストール まず、下記コマンドでpyOpenSSLパッケージをインストールします。 cryptographyパッケージも同時にインストールされます。 $ pip install pyopenssl 環境によってはpipではなくpip3を使ってインストールを行います。 コード 鍵長4096bitのRSA暗…

Python3.6でcsvファイルを読む

pythonの標準ライブラリのひとつであるcsvを使うと、簡単にcsvファイルを読み込むことができます。 使い方を見ていきましょう。 CSVファイル 読み込み対象のcsvファイルとして下記のファイル(sample.csv)を使います。 name,age,height,weight yamada,20,17…

docker hubを利用してOpenGrokを簡単に立ち上げる

ソースコード検索システムであるOpenGrokをdockerを使って手軽に立ち上げる方法です。 OpenGrokのdockerイメージを取得する まずはdocker hubからOpenGrokのイメージをpullします。ここではhttps://hub.docker.com/r/scue/docker-opengrok/を使わせていただ…

systemd利用時のdockerの認証プロキシ設定

docker pull等のネットワーク接続を伴う操作をするとき、認証プロキシは邪魔をしてきます。 ここではsystemdを使ってdockerデーモンを起動している場合の認証プロキシ設定について紹介します。 前提 プロキシの情報は次の通りとする 項目 値 ユーザID userna…

Python3のclassに反復処理をサポートさせる

classに__iter__と__next__メソッドを実装することで、反復処理をサポートさせることができます。 反復処理をサポートしたclassは、for文などに対してiterable objectとして与えることが可能です。 コード # 反復処理をサポートしたクラス class iter_sample…

Python3のconfigparserを使って設定ファイルを読み込む

pythonの標準ライブラリのひとつであるconfigparserを使うと、設定ファイルを簡単に扱えるようになります。 これを使うことで、ソースコード中に設定をべた書きするよりもユーザに優しいスクリプトが書けるでしょう。 設定ファイルの用意 test.confとして、…

Python3でプロセスIDからプロセス名を取得する(WindowsAPI使用)

PythonからGetModuleBaseNameを呼び出し、プロセス名を取得します。 Windows APIを利用しているため、Windowsでしか動作しません。 コード import ctypes # 引数としてプロセスIDを与え、プロセス名を取得する def get_name_by_pid(pid): PROCESS_ALL_ACCESS…

C言語で文字列を逆順にするプログラム

C言語入門の宿題としてたまに見かけるお題です。 文字列の先頭と末尾から順に入れ替えを行っていきます。 下記のコードでは文字の入れ替えに排他的論理和演算を使っていますが、 char tmp; tmp = msg[i]; msg[i] = msg[len-1-i]; msg[len-1-i] = tmp;のよう…

rdtsc命令とcpuid命令を使ったVM検知

cpuid命令をVM(Virtual Machine, 仮想マシン)環境で実行すると制御が一時的にVMM(Virtual Machine Monitor, 仮想マシンモニター)へ移るので、 物理マシン環境と比べて実行速度が遅くなります。 そのため、cpuid命令の実行速度をrdtsc命令などで計測する…

Python3でISO 8601形式の時刻を取得する

現在のローカル時刻をタイムゾーン付きのISO 8601形式(YYYY-MM-DDThh:mm:ss±hh:mm)で取得します。 Python3.6からはnaiveなdatetimeオブジェクトもastimezone()を使えるようになりました。 import datetime # --- python3.3以降 --- utctime = datetime.dat…

Python3.6でランダムなパスワードを生成する

Python3.6で実装されたsecretモジュールを使うと、暗号学的に強い乱数を簡単に得ることができます。 これを使ってランダムなパスワードを生成することができます。 import secrets import string # パスワードの文字数 num = 16 # パスワードに使用する文字…

認証プロキシ環境でpythonのRequestsライブラリを使用する方法

proxies引数を使おう ユーザIDがusername、 パスワードがpassword、 プロキシのアドレスがhogehoge.proxy.jp、 プロキシのポート番号が8080 である場合は、 import requests proxy_dict = { "http": "http://username:password@hogehoge.proxy.jp:8080/", "h…

認証プロキシ環境でpip installを使用する方法

--proxyオプションを使おう インストール対象がfugafuga、 ユーザIDがusername、 パスワードがpassword、 プロキシのアドレスがhogehoge.proxy.jp、 プロキシのポート番号が8080 である場合は、 $ pip install fugafuga --proxy=http://username:password@ho…

認証プロキシ環境でapt-getを使用する方法

まずは設定ファイルをエディタで開く エディタはなんでもいいので、下記のどちらでもOK。 viを使いたい場合(viは大抵のlinuxで使える) $ sudo vi /etc/apt/apt.conf nanoを使いたい場合(Ubuntu系ならこちらのほうがわかりやすい) $ sudo nano /etc/apt/a…