牛の一歩も、一歩は一歩

日々の関心、備忘録などをまとめる.

argument list too long: rm でrmできない

背景

以下のように、大量のファイルを一括でrmしようとしたところエラーが発生し、削除できなかった。

rm *

エラーメッセージは以下。

argument list too long: rm 

回避

rmの引数に、削除したいファイル名を一個ずつ渡してやれば事足りる。今回の場合であれば、以下のようなコマンドで十分。

ls | xargs rm

Ubuntu20のCiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process xxx (apt)...

背景

dockerでubuntu20でごちゃごちゃしており、apt installしたら、以下のエラーが発生した。

Citing for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process xxx (apt)...

解決

原因となっているdpkgプロセスを一度killしてやって、再設定をしてやると直る。

# 先ほど表示されたprocess id
kill xxx
dpkg --configure -a

確認

# installしたかったもの
apt install -y xxx

Mac (BigSur 11.3)にpkcrack(1.2.2)をinstall

ctf関連でpkcrackが必要になり, macにinstallしようと思ったが, 非常に時間がかかった. brewではなく, wgetしたpackageをinstallしている. 基本的にc言語のpackageが足りていないか, 必要ないpackageがincludeされているせいっぽい. C言語に精通していないため, あまりよくわかっていないが, おそらくverの違いでpackageの統廃合でもあったのではないかと考えている. あるいはclangのせいか?

とりあえず環境は以下

  • Mac BigSur 11.3 Intel
  • make 3.81
  • clang 12.0.5
  • pkcrack 1.2.2

以下でinstallできた.

wget http://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack/pkcrack-1.2.2.tar.gz
tar xzvf pkcrack-1.2.2.tar.gz
cd pkcrack-1.2.2/src
sed -i .bak '1s/^/#include <stdlib\.h>/' makekey.c
sed -i .bak '1s/^/#include <string\.h>/' mktmptbl.c
find *.c | xargs sed -i .bak 's/#include <malloc\.h>/#include <stdlib\.h>/g'
make

うまくいったかどうは, 以下のコマンド

./pkcrack

python メモ

一般的なものから, まあ使わんものまで, 見つけたものを追記していく予定.

数値計算

floatの値の小数第一位が0かどうか判定

  • float型の変数の整数判定
  • 以下で判定. 返り値はboolean
値.is_integer()

階乗

import math
math.factorial(x)

累乗

  • a**n
pow(a, n)

dictionary

keyが存在しない場合のみ初期化

dictionary.setdefault(key, value)

文字列

listの文字列化

  • code
'_'.join(["hoge", "fuga"])
  • output
hoge_fuga

英語の小文字, 大文字の判定

  • 返り値はbool
x.isupper()
x.islower()

英語の小文字, 大文字への変換

x.upper()
x.lower()

Unicode コードポイントへの変換, 逆変換

ord(x)
chr(x)

IO

listのunpack

  • code
list_=[a,b,c,d]
print(*lilst_)
  • output
a b c d

systemdのstart request repeated too quickly

環境

  • debian10

内容

あるミドルウェアを新しくaptでサーバに導入し, 起動し, 状態の確認systemctl status *としたところ, start request repeated too quicklyがエラー文として表示された. 調べてみたところ, どうやらユニットの起動に失敗した際に, 自動でユニットの再起動が行われるように設定されているようで, その再起動のスパンが早すぎるために出てくるエラー文らしい. つまり正しいエラー文が, 再起動のせいで埋もれている. 再起動のスパンを長くする手立てもあるが, とりあえずの処置として, そもそも起動に失敗した際に, 再起動しないように設定を行った.(いずれ再起動のスパンを長くする方法も調べる)

起動に失敗した際に再起動しないように設定

  • /lib/systemd/system/*.serviceの一部を書き換え
Restart=no
  • 設定の更新と起動
systemctl daemon-reload
systemctl start *

マイクロサービスアーキテクチャ chapter1

マイクロサービスアーキテクチャのchapter1のメモ

1章

マイクロサービス

思想

  • 最低限のサービスごとにコードを分けようという思想

    • 分割の際に凝集性に着目して分割
      • 凝集性は、端的に言えば、変更する理由が同じものは集める、それ以外は分割するという考え
    • どこまで分割するかが肝
  • 単一のコードでサービスを運用する場合

    • 技術の置き換えが大規模で大変
      • コードのどこを修正すべきかわかりにくい
      • バグの修正や実装が大変

自律性

  • 本書では、クラウド、オンプレのどちらかは考慮しない
  • サービスはAPIにより、通信して、動作
  • それぞれのサービスが独立して稼働, 変更もそれぞれ別個に可能

利点

技術特質性

  • マイクロサービスでは、サービスごとに異なった、それぞれのサービスに最も適したツールの選択が可能
  • 新たな技術の取り入れが容易
    • モノリシックなサービスと異なり、影響箇所が少ない

回復性

  • 一部に障害が生じても、その部分を切り捨て、残りで継続可能

スケーリング

  • マイクロサービスでは、各サービスごとにスケーリングを行うことが可能であり、無駄が少ない

    • i.e.) 大きなサービスのみ高価なハードウェアで、その他は安価なハードウェアで動作などが可能
  • tips

    • スケーリングとは
      • スケーリングとは、同じサービスを並列稼働し、LBなどでトラヒックの分散などを行うこと

デプロイ

  • デプロイのリスクを最小限に止めることが可能

開発チーム

  • サービスごとに小牙なチームによる開発が行えるため効率が良い

合成可能性

  • 一つのシステムが存在した際に、新たな利用方法(web, tablet app etc.)用の新たな機能を取り入れやすい
    • 携わったことがないのでいまいちモノリシックでは難しいのかがよくわからん

交換可能にするための最適化

サービス指向アーキテクチャ

  • サービス指向アーキテクチャ(SOA)

    • 複数のサービスを連携させて一つのサービスを提供する構成
    • 別デーモン
    • サービス同士のやりとりは、ネットワークを介して行う
  • tips

マイクロサービスに類似した思想、技術

  • tips
    • ライブラリとモジュールの違い
      • ライブラリ モジュールで検索すると、まともそうなURLのサイトは出てこなかったが、概ね以下の通りっぽい
      • モジュールはスクリプトそのもの
      • ライブラリはモジュールの集合体

共有ライブラリ

  • コードを目的ごとに対応した複数のライブラリに分割
  • 利点
    • ライブラリごとにチームを作って開発を行うことが可能
  • 欠点
    • 同じプラットフォームで動作させなくてはならない(同じ開発環境?verの統一等のことか?)
    • システムの各部を独立してスケーリングできない
    • 新たなライブラリをデプロイする場合、全てデプロイし直さなければならない
  • 組織内で用いる分には問題ないが、サービスのためのシステムで取り扱う場合は注意が必要

モジュール

  • コードを目的ごとに対応した複数のモジュール(スクリプト)に分割
  • 実行中のプロセスにも、プロセスを止めずにモジュールのデプロイが可能

欠点

  • 分散システムで新たな問題が生じることが多々ある

統計的因果探索 chapter1~3

1章 統計的因果推論

  • 統計的因果推論とは、相関があるだけでなく、実際に変化した時に、目的変数がどうなるかを推測する

    • この書籍では、統計的因果推論の一種である統計的因果探索を解説
  • 相関はあくまで、データから読み取れる結果でしかなく、因果関係は考慮していない

i.e.
- チョコの消費量が多いと、ノーベル賞受賞者が多い
=>相関

- チョコの消費量を増やしたときにノーベル賞受賞者数がどうなるか
=>因果関係
  • 因果関係は、因果グラフで表す
    • ノード
      • 観測変数&未観測変数
    • 有向エッジ
      • 因果関係の有無
        • エッジに因果関係の強さといったラベルは存在しない
        • エッジの向きで、原因=>結果
  • 矢印の間に挟まれるノードを共通原因と呼ぶ
    • 共通原因のうち、未観測なものを未観測共通変数と呼ぶ
  • 因果関係はないが、相関がある場合、擬似相関と呼ぶ

  • 未観測、観測変数の値より、ある変数の値が生成される工程を生成過程と呼ぶ

    • x, yからzが生成されている際、z=f(x, y, e)で表され、eは誤差関数と呼ばれ、バイアスのような役割をする
      • 未観測変数とバイアスは、なんらかの確率分布に従うと考え、確率変数で表す
  • 相関係数では、因果関係の大きさを測ることはできない

2章 統計的因果推論の基礎

統計的因果推論は因果グラフが既知の場合の手法

  • 実質科学
    • 因果関係を明らかにする目的の科学
  • 方法論

反事実モデル

  • 個体レベルの因果
    • 個体に対して二種類以上の試行を行い、因果関係があるかを実験
    • この個体が属する集合が存在した場合、その集合全体に、個体の因果関係が同様に適用可能かはわからない
  • 集団レベルの因果
    • 集団に対して二種類以上の試行を行い、集団の何割がどのような結果になるか観測

構造方程式モデルによるデータ生成過程の記述

  • 構造方程式
    • データの生成過程を定式化
    • yというデータが生成される過程は以下
      • xは観測変数
        • xもyと同様に未観測の誤差変数から生成されていると考えられる
      • eは未観測変数&誤差変数
      • x, yの誤差変数らは独立とは限らない
y=f(x, e)
  • yは内生変数
    • 構造方程式によって記述される変数
    • いくつかの変数で説明される変数
  • 誤差変数eは外生変数
    • 構造方程式において、生成手順が語られない変数

構造的因果モデル

反事実モデルと構造方程式を組み合わせたモデル

  • 集団レベルの因果構造方程式モデルによって記述
    • 介入により、ある変数に対して、任意の定数を代入
      • 集団に対する試行を、モデルを作成する人間が指定
      • i.e.) 薬を飲む、飲まないetc.
    • x=cという介入do(x=c)をした時、yの確率分布はp(y|do(x=c))で表される
  • 介入後の分布が介入前と異なる場合, 介入した変数xとyの間に因果関係があると言える
  • 個体レベルも同様に介入によってどう値が変化するかで分析可能
  • 因果効果の大きさの定量
    • 平均因果効果で因果効果の大きさを定量
      • 二種類の介入を行った分布の期待値の差
  • 出来事の説明
    • 観測された結果より, 過去に何があったかを説明
    • 潜在反応モデルにより深い考察が可能

ランダム化実験

  • 変数の値を, 個人ごとにランダムな値に
    • 未観測変数を独立に
      • 時系列的に捉えることで, 未観測共通原因をなくす

3章 統計的因果探索の基礎

統計的因果探索は因果グラフが未知の場合の手法

現実問題として取り扱う場合、統計的因果探索して因果グラフの推測を行ったのちに、統計的因果推論により、その因果関係の大きさなどを推測することも多々ある

本書では、ランダム化実験を行わず、いくつかの制約を設けることで因果グラフを推測する手法を取り扱う

統計的因果探索

  • 統計的因果探索は観測されたデータx, yより, 因果グラフを推測する問題
    • xとyに因果関係があるかどうか
    • 外生変数がどのような分布に従うか
      • ノンパラメトリック
        • 分布、関数になんの仮定も置かない
        • 因果関係が一方向であるという仮定を置く
        • データから読み取れることのみから因果グラフを推測するためシンプル
        • ただし、いくつかの因果グラフの候補をモデリングできるが、どれが優れているか評価できない
      • パラメトリック
        • 分布、関数に仮定を置く
        • モデルの単純化、数値解析の簡易化
      • セミパラメトリック
        • 関数に仮定を置き、分布には仮定を置かない
        • 関数系に線形性、分布に非ガウス分布を採用するモデルをLiNGAM (Linear Non Gaussian Model)と呼ぶ
  • 識別可能性
    • 因果グラフが識別可能であるかどうか(=観測データから因果グラフが一意に定まるかどうか
    • 因果グラフの構造が異なれば、観測変数の分布が必ず異なる場合、識別可能
  • 仮定によって、因果グラフの候補群の数を減らすことが可能
    • 誤差変数が独立である仮定
    • 非巡回グラフである仮定
      • 非巡回を仮定することで、先祖、親、子孫などの概念を導入可能
  • 平均因果効果
    • {x1, ..., xn}の因果グラフがある場合、x1とxkの因果効果は
      • x1からxkとの有向エッジがある場合、直接効果をcalc
      • x1からxkまで、どこかノード (中間変数)を経由したエッジが存在する場合、message passingの要領で、間接効果をcalc
      • 直接、間接効果の和が、平均総合効果

ノンパラメトリック

  • 二種類の仮定を置く
    • 因果的マルコフ条件を導入
      • 変数それぞれを親に当たる変数で条件付けするとその非子孫の変数と独立になる(親、先祖を含む
    • 忠実性を導入
      • 因果グラフを見ると従属なはずなのに、実際には独立ということがないように
      • 独立性は、因果グラフの構造からのみ表されるという仮定
  • (おそらく二変数に着目して)、同じ条件付き独立性を有する因果グラフを持つモデルの集合をマルコフ同値類と呼ぶ
  • ノンパラメトリックな手法では、マルコフ同値類への絞り込み等を行うことは可能だが、一意に因果グラフを特定できない
    • 制約に基づくアプローチ
      • 条件付き独立性を試薬として、それを満たすような因果グラフを探索
    • スコアに基づくアプローチ
      • マルコフ同値類ごとにスコアを出し、良いものを選択

パラメトリック

  • ノンパラメトリックと比較して、識別可能性は向上しない
  • ノンパラメトリックと同様に、マルコフ同値類内の全ての期待値を計算し、最小or最大の値によって評価
    • 少なくとも、期待値が正なので因果関係がありそう等

セミパラメトリック

  • 誤差変数の分布に、非正規分布を仮定することで、識別可能性が向上するらしい