CUBE SUGAR CONTAINER

技術系のこと書きます。

Apache Hive の ARRAY 型を試す

Apache Hive には ARRAY 型というデータタイプがある。 これは一般的なプログラミング言語でいえば配列に相当するもの。 ようするに、文字列や数値といったデータを一つのレコードに複数格納できる。 リレーショナルデータベースのアンチパターンであるジェ…

RedPen で技術文書を校正する

今回は RedPen というオープンソースの文書校正ツールを使ってみる。 こういったツールを使うことで、文書の典型的な誤りや読みにくいところを見つけやすくなる。 似たようなツールとしては textlint なんてのもある。 環境は次の通り。 $ sw_vers ProductNa…

Python: Twine を使って PyPI にパッケージをアップロードする

Python のサードパーティ製パッケージは、一般に PyPI (Python Package Index) というリポジトリに登録されている。 このリポジトリはユーザ登録さえすれば誰でも自分で作ったパッケージをアップロードできる。 今回は Twine というツールを使って PyPI にパ…

Python: ERAlchemy を使って ER 図を描く

今回は ERAlchemy という ER 図を描くツールを使ってみる。 このツールは erd という Haskell で書かれた同様のツールにインスパイアされて作られたものらしい。 ただ、機能的にできることは ERAlchemy の方が多いみたいだ。 ERAlchemy が提供する基本的な機…

macOS に Homebrew で PostgreSQL をインストールする

とあるライブラリのために PostgreSQL を使う機会があったので、その作業メモ。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G1114 $ brew --version Homebrew 1.4.1 Homebrew/homebrew-core (git rev…

Python: 機械学習で分類問題のモデルを評価する指標について

今回は、機械学習において分類問題のモデルを評価するときに使われる色々な指標について扱う。 一般的な評価指標としては正確度 (Accuracy) が使われることが多いけど、これには問題も多い。 また、それぞれの指標は特徴が異なることから、対象とする問題ご…

Python: 多様体学習 (Manifold Learning) を用いた次元縮約

今回は多様体学習を使ってデータの次元を縮約する方法について。 これはデータの前処理として、主に二つの目的で使われる。 一つ目は、次元を縮約することで二次元や三次元の形でデータを可視化できるようにするため。 もう一つは、次元を縮約した結果を教師…

Python: NumPy で正方行列を三角行列に加工する

今回は NumPy で正方行列を扱うとき、上三角行列とか下三角行列を取り出す方法について。 三角行列というのは、正方行列において対角要素より上の成分が全て 0 だったり、下の成分が全て 0 だったりする行列のこと。 ちなみに、最初この呼び方を知らなくて「…

電球形蛍光灯を買ったけどすぐに LED 電球を買い直した話

今回は、珍しくコンピュータではなく照明器具の話題で。 実際にやった (やらかした) のは今から 2 年ほど前のこと。 照明の節電と長寿命化のために電球形蛍光灯を選んでみたら失敗した、という話。 今となっては電球形蛍光灯と LED 電球の価格差はだいぶ縮ま…

Python: ジェネレータをイテレータから理解する

Python のイテレータとジェネレータという概念は意外と分かりにくい。 今回は、実は深い関わり合いを持った両者についてまとめてみることにする。 というのも、最終的にジェネレータを理解するにはイテレータへの理解が欠かせないためだ。 使った環境は次の…

head コマンドの不思議な挙動と標準入出力のバッファリング

今回は Unix における標準入出力のバッファリングモードについて扱う。 普段あまり意識していなかったけど head コマンドの挙動をきっかけに気になって調べていったらなかなか面白かった。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductV…

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() …