CUBE SUGAR CONTAINER

技術系のこと書きます。

macOS で Git LFS (Large File Storage) を使ってみる

元々 Git というバージョン管理システムは、その性質として大きなファイルやバイナリファイルを扱うのが苦手だった。 そんな欠点を補うために GitHub が開発したのが今回扱う Git LFS (Large File Storage) という拡張機能 (仕様) になる。 git-lfs.github.c…

標準入力の内容を直接 gzip で圧縮・解凍する

今回は、標準入力の内容を直接 gzip を使って圧縮したり解凍する方法について。 どうしてそんなことをするかというと、ディスクの消費を抑えるため。 一般的には一旦内容をファイルに書き出してから、それを圧縮・解凍すると思う。 ただ、圧縮しない状態で書…

Python: pandas でカラムの型を変換する

pandas はデータを読み込むとき、よきに計らってカラムに型を付与してくれる。 ただ、その内容が意図しない場合もある。 そんなとき、どうやってカラムの型を直すか、ということについて。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductV…

Docker イメージをファイルでやり取りする

基本的に Docker イメージは Docker リポジトリからダウンロードしたりアップロードするものだと思う。 とはいえ、インターネットに疎通がなかったりすることもあるし、自前でリポジトリを運用するのもつらい。 そんなときは Docker イメージを、そのままフ…

Python: map/filter 処理を並列化する

今回は Python でリストなんかへの map/filter 処理をマルチプロセスで並列化する方法について。 この説明だけだと、なんのこっちゃという感じだと思うので詳しくは後述する。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.1…

Python: pandas で数の少ない項目を「その他」にまとめる

pandas で集計した内容をグラフにするとき、数の少ない項目がたくさんあるとごちゃっとしてしまう。 今回は、そんな数の少ない項目を「その他」としてまとめる方法について。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12…

Python: 無名数化によるデータの前処理

データエンジニアリングの分野では、分類精度などを高めるためにデータの前処理が重要となってくる。 今回は、そんな前処理の中でも無名数化と呼ばれる手法について見ていく。 無名数化というのは、具体的にはデータに含まれる次元の単位をなくす処理のこと…

Python: Apache Parquet フォーマットを扱ってみる

今回は、最近知った Apache Parquet フォーマットというものを Python で扱ってみる。 これは、データエンジニアリングなどの領域でデータを永続化するのに使うフォーマットになっている。 具体的には、データセットの配布や異なるコンポーネント間でのデー…

Python: 組み込みのソケットサーバをマルチスレッド化する

今回は小ネタ。 Python の標準ライブラリには、いくつか組み込みで提供されるソケットサーバの実装がある。 例えば WSGI サーバのリファレンス実装とか。 21.4. wsgiref — WSGI ユーティリティとリファレンス実装 — Python 3.6.1 ドキュメント HTTP サーバを…

Apache Spark でクラスタリングすると動かなくなるプログラムについて

今回は Apache Spark をスタンドアロンで使っていると上手くいくのに、クラスタリングした途端に上手くいかなくなる状況がある、ということについて。 スタンドアロンなら上手くいく場合 まずは Apache Spark のコマンドラインシェルを起動する。 この場合は…

Vagrant Cloud から取得した Box のバージョンを更新する

今回は Vagrant Cloud からダウンロードしてきた Vagrant Box を更新する方法について。 それにしても、最近は自分で Vagrant Box を作っていた頃なんてすっかり今は昔という感じだ。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersio…

macOS: ファイルのハッシュ値を計算する

ファイルのハッシュ値を計算するのに macOS だと何を使うんだっけ?と毎回なるのでメモしておく。 GNU Linux で使い慣れた *sum コマンドを使おうとすると、そんなものないよ!と怒られてしまうので。 $ md5sum zsh: command not found: md5sum $ sha1sum zs…

Metasploit Framework でペネトレーションテストを実施する

Metasploit Framework というのはオープンソースのペネトレーションテストツール。 ペネトレーションテストというのは、実際にシステムに対して侵入を試みるなど Exploit を実行するテストを指している。 その成功可否によって、システムが脆弱性の影響を受…

Python: scikit-learn のハイパーパラメータを GridSearchCV で最適化する

機械学習のアルゴリズムにおいて、人が調整する必要のあるパラメータのことをハイパーパラメータと呼ぶ。 これは自動では決められないので、色々な値を試したりして汎化性能が高くなるものを選ばなきゃいけない。 今回はハイパーパラメータを決めるのに scik…

オープンソースの脆弱性スキャナ OpenVAS を使ってみる

今回はオープンソースの脆弱性スキャナである OpenVAS を使ってみることにする。 脆弱性スキャナというのは、ホストに既知の脆弱性が含まれないかどうかを自動でスキャンしてくれるツール。 注意: 脆弱性スキャンはポートスキャンやペネトレーションを含むた…

Nmap を使ってシステムに不要なポートが開いていないか調べる

今回はセキュリティの世界では有名な Nmap というツールを使ってみる。 このツールは、ポートスキャンや簡易な脆弱性スキャナーとして利用される。 例えば不要なポートが外部からアクセスできるようになっていないかを調べることは重要なポイントだ。 Nmap …

sqlmap を使って SQL インジェクションの脆弱性を検証する

sqlmap は SQL インジェクションに特化したオープンソースのペネトレーションテストツール。 これを使うと Web アプリケーションの特定のパラメータに SQL インジェクションの脆弱性があるか否かを確認しやすい。 注意: 外部のサーバに使うことは攻撃となる…

SQL: CASE 句を使って縦持ちのデータを横持ちに変換する

使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.5 BuildVersion: 16F73 $ mysql --version mysql Ver 15.1 Distrib 10.2.6-MariaDB, for osx10.12 (x86_64) using readline 5.1 サンプルのテーブルとレコードを用意する ま…

SQL: COALESCE() 関数で NULL を別の値に置き換える

RDB のスキーマ設計において、なるべくなら Nullable なカラムは無い方が良いけど、そうもいかないときがある。 そんなときは COALESCE() 関数を使うと NULL になっているフィールドを別の値に置換できる。 これは、特定の値を NULL に置換できる NULLIF() …

SQL: NULLIF() 関数を使ってゼロ除算を防ぐ

RDBMS によってはゼロ除算をするとエラーになってしまうものがある。 例えば PostgreSQL とかがそう。 $ psql --version psql (PostgreSQL) 9.6.3 次のようにゼロ除算をするとエラーになって結果が得られない。 これは SQL を使って演算するときに問題となる…

SQL: UNION を使ってテーブルを縦に連結する

今回は SQL の UNION を使ってみる。 試した環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.5 BuildVersion: 16F73 $ mysql --version mysql Ver 15.1 Distrib 10.2.6-MariaDB, for osx10.12 (x86_64) using readline 5.1 典型的…

SQL:2003 のウィンドウ関数を MariaDB 10.2 で試す

今回は SQL:2003 の規格で追加されたウィンドウ関数を使ってみる。 この機能を使うとカラムをグループ化して集約関数を使うのが楽になる。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.5 BuildVersion: 16F73 $ mysql --…

Apache Hive を JDBC 経由で操作する

以前、Apache Hive の環境構築についてこのブログで書いた。 blog.amedama.jp 上記では Hive を操作するのに、同梱されたシェルを使っていた。 今回は JDBC (Java Database Connectivity) を使って操作する例を示す。 環境については先ほど紹介したエントリ…

統計: 偏相関係数で擬似(無)相関の有無を調べる

以前、このブログでは共分散や相関係数について扱ったことがある。 共分散や相関係数というのは、二つの変数間に線形な関係があるかを調べる方法だった。 blog.amedama.jp しかし、実はただの相関係数では「第三の変数」からの影響を受けてしまう場合がある…

SQL: 内部的なコードを人間に分かりやすいラベルに変換して表示する

RDB のスキーマには、たまに対応表などを参照しながらでないと分からないような内部的なコードが使われていることがある。 大抵はアプリケーションの中で変換して表示するだろうけど、これを直接 SELECT とかで確認しようとすると分かりにくい。 今回は、そ…

ファイルから SQL を読み込む (MySQL, PostgreSQL, SQLite3)

色々な RDBMS で SQL の書かれたファイルを読み込む方法について調べた。 まずはSQL の書かれたテキストファイルを用意しておく。 $ cat << 'EOF' > sample.sql DROP TABLE IF EXISTS users; CREATE TABLE users ( id integer, name varchar(255), age integ…

Apache Spark を完全分散モードの YARN クラスタで動かす

Apache Spark を使って複数ノードで分散並列処理をする場合、まずは動作させるためのクラスタマネージャを選ぶことになる。 Apache Spark では以下のクラスタマネージャに対応している。 Apache Spark 組み込み (これはスタンドアロンモードと呼ばれる) Apac…

Python: pep8 は pycodestyle になったし pep257 は pydocstyle になった

意外とまだあんまり知られていないような気がしたので、このブログにも書いておく。 PEP8 と pep8 と pycodestyle Python には PEP8 という有名なコーディングスタイルガイドラインがある。 www.python.org そして、そのコーディングスタイルに沿ったコード…

Python: ... (Ellipsis) は任意の処理を示すのにも便利かも

PEP 484 – Type Hints を読んで「なるほど、こういう使い方もあるのか」と気づかれたのでブログに書いておく。 尚、このエントリの内容を実行するには Python 3 以降が必要となる。 使った Python のバージョンは次の通り。 $ python --version Python 3.6.1…

Ubuntu 16.04 LTS に最新の VirtualBox をインストールする

apt-get で入る VirtualBox は古いので新しいソフトウェアと組み合わせると支障が出る場合もある。 なので Oracle が公開しているリポジトリを使って最新版をインストールする方法について書いておく。 インストール方法は以下の公式サイトに載っている。 De…