読者です 読者をやめる 読者になる 読者になる

CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: SQLAlchemy + mysqlclient (MySQLdb) でマルチバイト文字を扱う

今回は Python の O/R マッパーである SQLAlchemy と MySQL ドライバの mysqlclient を使ってマルチバイト文字を扱うときの注意点について書いてみる。 ただし RDBMS については MySQL ではなく、代わりに MariaDB を使った。 注意点というのを先に書いてし…

Python: インターネットと疎通がない環境に Python パッケージをインストールする (改)

このブログでは、以前にインターネットと疎通のない環境で Python パッケージをインストールする方法について書いたことがある。 具体的には Wheel でパッケージングした配布物を pip を使ってインストールしていた。 blog.amedama.jp ただ、上記の記事には…

Python: skflow を使ってディープラーニングで FizzBuzz 問題を解いてみる

最近 TensorFlow を使ってディープラーニングで FizzBuzz 問題を解くっていうブログ記事を読んだんだけど、これが面白かった。 joelgrus.com そこで、自分でも同じようにディープラーニングを使って FizzBuzz 問題を解いてみることにした。 ただし、アレンジ…

Python: 明示的な相対インポートの使い方

Python のインポートには、次のように3つの種類がある。 暗黙の相対インポート 明示的な相対インポート 絶対インポート このうち、暗黙の相対インポートについては Python 3 で廃止されたので使ってはいけない。 となると、残るは明示的な相対インポートか…

C: 静的ライブラリと共有ライブラリについて

C 言語で書かれた静的ライブラリと共有ライブラリについて、いまいち理解がちゃんとしていなかったのでまとめておく。 ライブラリというのは、複数のアプリケーションで使われるような共通の機能をまとめたものをいう。 今回使った環境は次の通り $ cat /etc…

Python: pipdeptree でパッケージの依存関係を調べる

Python のパッケージ同士が、どのように依存しているかを調べるのは意外と面倒くさい。 そんなときは今回紹介する pipdeptree を使うと楽ができそう。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.5 BuildVersion: 15F34…

CentOS: rpm でファイルが含まれるパッケージを調べる

なんか毎回忘れるのでメモっておく。 パッケージシステムの基盤として rpm を使っている Linux ディストリビューションでファイルがどのパッケージに含まれるか調べるやり方。 使った環境は次の通り。 $ cat /etc/redhat-release CentOS Linux release 7.2.1…

Ubuntu: apt-file でファイルが含まれるパッケージを調べる

あるファイルがどのパッケージに含まれているかを知りたくなる場面は意外と多い。 例えば何かをビルドするときにヘッダファイルがないといわれて、それがどのパッケージに含まれているか調べたいとか。 あるいは何かをパッケージングするときに、それが依存…

SQL: ナイーブツリーと閉包テーブルモデル

今回のエントリは以前かいた SQL のアンチパターン「ナイーブツリー」に関する記事の続き。 blog.amedama.jp 再帰クエリをサポートしていない RDBMS で再帰的な構造のスキーマを作りたいときの解決策のひとつとして閉包テーブルモデルを扱う。 使った環境は…

SQL: ナイーブツリーと経路列挙モデル

今回のエントリは以前かいた SQL のアンチパターン「ナイーブツリー」に関する記事の続き。 blog.amedama.jp 再帰クエリをサポートしていない RDBMS で再帰的な構造を表現するための解決策のひとつ経路列挙モデルを扱う。 使った環境は次の通り。 $ sw_vers …

SQL: ナイーブツリーと再帰クエリ

今回は「SQLアンチパターン」の中で紹介されているナイーブツリーというアンチパターンについて見てみることにする。 www.oreilly.co.jp 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersion: 15E65 $ mysql --ve…

Git のサブモジュールを使ってみる

今回は Git の中でもちょっととっつきにくいサブモジュール機能を使ってみることにする。 サブモジュール機能を使うと、外部のある Git リポジトリを別の Git リポジトリの中に取り込んで使うことができる。 これは例えばひとつの巨大なリポジトリを何らかの…

Python: flake8 のプラグインを書いてみる

flake8 は Python の linter の一種。 linter というのはソースコードを解析して問題がある箇所を見つけるツールの総称のことをいう。 flake8 の特徴としてプラグイン機構が備わっていることが挙げられる。 このプラグインは自分で自作できる。 つまり、独自…

Golang: math/big で大きい数や細かい数を扱う

Golang の数値型はビット数が決められているため、扱える数の大きさや精度に限界がある。 整数の大きさの限界 例えば 2 を 64 ビット左シフトした整数を作ってみる。 package main import "fmt" func main() { fmt.Println(2 << 64) } 上記を実行しようとす…

Golang: gore でスニペットの動作を確認する

Golang でも REPL を使いたいときは gore というサードパーティ製のパッケージがある。 今回使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersion: 15E65 $ go version go version go1.6 darwin/amd64 インストー…

Golang: gometalinter でソースコードを静的解析しまくる

先日、このブログで Golang の linter を使ってみたエントリを書いた。 blog.amedama.jp すると @r_rudi さんから gometalinter という便利なものがあることを教えてもらえた。 @momijiame https://t.co/VkWeIVx6pX をどうぞ— shirou - しろう (@r_rudi) 201…

Python: ast (Abstract Syntax Tree: 抽象構文木) モジュールについて

標準ライブラリの ast モジュールを使うと Python で書かれたソースコードを構文解析できる。 それによって得られるオブジェクトは AST (Abstract Syntax Tree: 抽象構文木) と呼ばれる。 その使い道としては、例えば Python の lint ツールなどが考えられる…

Golang: ソースコードを静的に解析する

2016/4/5 追記: こっちを使った方が便利そうです。 blog.amedama.jp 今回は Golang でイケてるソースコードを書くのに使うと良さそうなツールについて調べた。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersio…

Python: uptime でシステムの連続稼働時間を得る

システムの uptime (連続稼働時間) に関する情報はプラットフォームごとに取得する方法が異なっている。 今回紹介する Python の uptime パッケージは、それらの差異を吸収して共通の API で連続稼働時間を知ることができる。 今回使った環境は次の通り。 $ …

Linux ディストリビューションのコマンド実行履歴について

Linux ディストリビューションのコマンド実行履歴まわりについて理解を深めるために動作を調べたのでまとめておく。 主にコマンド実行履歴を残すファイルの指定方法とか history コマンドについて。 今回使った環境は次の通り。 $ cat /etc/lsb-release DIST…

Alien で rpm を deb に変換してみる

最近知ったんだけど Alien というソフトウェアを使うと rpm とか deb を相互に変換できるらしい。 今回はその Alien で CentOS7 向けの rpm を deb に変換して Ubuntu 14.04 LTS にインストールしてみた。 使った環境は次の通り。 $ cat /etc/lsb-release DI…

「スマートPythonプログラミング」という本を書きました

表題の通り Python の本を書いたので、そのご紹介です! スマートPythonプログラミング: Pythonのより良い書き方を学ぶ作者: もみじあめ発売日: 2016/03/12メディア: Kindle版この商品を含むブログを見る どんな本なの? ひと言で表すと、自信を持って Pytho…

Python: テストフレームワーク nose のプラグインを書いてみる

nose は Python のテストフレームワークのひとつ。 特徴のひとつとしてプラグイン機構があるためテストランナーの挙動をカスタマイズできる点が挙げられる。 プラグインの書き方は次のページに詳しく書かれている。 Writing Plugins — nose 1.3.7 documentat…

Python: モジュールとパッケージ

Python のモジュールとパッケージという概念についてまとめておく。 今回使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.3 BuildVersion: 15D21 $ python --version Python 3.5.1 モジュールを作ってみる Python におけるモ…

API Blueprint で Web API の仕様を書く

Web API のドキュメンテーションって結構めんどくさい。 どういうフォーマットで書くか悩むし、書いていくと似たような内容を何回も繰り返すことになる。 ドキュメントとは別に開発用のモックも用意しなきゃいけなくて、それとの整合性が…ってな具合に悩みは…

Python: 古いバージョンを使い続けるということ

例えば標準出力にユニコード文字列を書き込むという単純極まりない処理をやってみる。 Python 2.7 を使うとこんなかんじ。 $ python --version Python 2.7.10 $ python >>> import sys >>> sys.stdout.write(u'うにこーど\n') うにこーど 何の問題もない。 P…

シェル変数と環境変数

sh

シェルで扱う変数にシェル変数と環境変数があることは何となく知っていた。 ただ、それぞれどう違うのかとか操作方法についてあまり意識したことがなかった。 なので一旦ここで整理しておくことにする。 今回使った環境は次の通り。 $ cat /etc/lsb-release …

Python: EAFP スタイルと LBYL スタイル

プログラミングの方針に EAFP スタイルと LBYL スタイルという分類の仕方があることを知った。 これはそれぞれ「Easier to Ask for Forgiveness than Permission」と「Look Before You Leap」の頭文字から取られているらしい。 ざっくり言えば EAFP スタイル…

Python: PyPI にないパッケージを依存パッケージにするには

PyPI に無いパッケージを自作パッケージの依存ライブラリにしようとしたら色々と苦労したので、そこで得られた知見を共有しておく。 どうやら現状では setuptools と pip で対応方法が異なっているために、それぞれで微妙に異なるやり方を取る必要があるよう…

Docker: データボリュームとデータボリュームコンテナ

Docker を使っているとデータの永続化が問題になる。 例えばデータベースのアプリケーションを動作させるとして、どこにデータを残せばいいだろう。 通常のファイルシステム上に置いてしまうと、コンテナが終了すると使えなくなってしまう。 そんなときに便…

Python: pipe を使った Infix プログラミング

今回紹介する Python の pipe というサードパーティ製のパッケージは、実用性はともかくとして非常に面白い API になっている。 pipe を使ったソースコードを見れば目からウロコが落ちること請け合いだ。 その独特な書き方はインフィックス記法というらしい…

Python: concurrent.futures を使った並行・並列処理

Python の concurrent.futures はバージョン 3.2 で追加された並行・並列処理用のパッケージ。 似たようなパッケージにはこれまでにも threading や multiprocessing があったんだけど、これはそれよりも高レベルの API になっている。 デフォルトでスレッド…

docker-machine で "Error response from daemon: client is newer than server" になったときの対処方法

今回のネタは、おそらく docker-machine を使っていればいつか遭遇するエラーについて。 結論から先に言うと docker-machine を使っていて、ある日 Docker 本体のバージョンを更新するとこうなる。 まず前提として Docker は Linux コンテナが動作する Docke…

Python: TensorFlow のチュートリアルでソフトマックス回帰を試す

最近、囲碁でプロ棋士を負かした AlphaGo も、この TensorFlow で組んだニューラルネットワークを使っているんだとか。 とはいえ、チュートリアルを読みながら使ってみると、これは単にディープラーニングだけをターゲットにしたライブラリではないように感…

Python: モジュールを動的にロードする

Python のモジュールは通常であれば import 文を使ってあらかじめ静的にロードする。 では、プログラムの中で動的にロードしたい場合にはどうしたらいいのか?というのが今回の話。 結論から先に言うと今は標準ライブラリの importlib を使うのが推奨される…

Windows7 に Vagrant の環境をセットアップする

Windows に Vagrant の環境をセットアップしようとしたら思いのほかハマったのでその手順をメモしておく。 コマンドプロンプトを管理者権限で立ち上げる まずはスタートアップボタンから cmd を検索する。 出てきたプログラムを右クリックして「管理者として…

Python: doctest を書いてみよう

今回は Python が標準で提供しているテスト機構の一つである doctest について書いてみる。 doctest というのは docstring という Python のドキュメンテーション機構を使って一緒にテストもしちゃおうという発想の代物。 docstring については以前にもこの…

Python: Cookiecutter でプロジェクトのテンプレートを作る

Cookiecutter は Python で実装されたプロジェクトのテンプレートを作るためのツール。 似たようなツールだと JavaScript の Yeoman とか、Python だと他にも Paste Script なんかがある。 Python で実装されているとは言ってもテンプレートを作る・使うとこ…

VMware Fusion 8 の仮想マシンとして Mac OS X を動かす

Mac の手順書を作っていると、まっさらな状態の OS X が仮想マシンでほしいなあという場面がある。 VirtualBox を使おうとすると色々と面倒な手順が必要っぽいんだけど VMware Fusion 8 なら簡単に作れた。 ちなみにライセンス的には 1 台の Mac で 2 台まで…

Sphinx: 既存のテーマをカスタマイズする

Sphinx はドキュメントのコンテンツとデザインが分離されている。 デザインを変えたいときはテーマを変更すれば良い。 ただ、既存のテーマそのままでは満足できる見栄えにならないときもある。 そんなときは既存のテーマをカスタマイズする必要が出てくる。 …

Python: 特殊メソッド __getattr__() を使う際の注意点

特殊メソッドというのは、名前の前後にアンダースコアがふたつ付いた、特別な意味をもったメソッドのことをいう。 これをユーザ定義クラスで実装すると、クラスのもつ基本的な挙動をオーバーライドできる。 その中でも __getattr__() という特殊メソッドを使…

Python: scikit-learn の手書き数字データセットを SVM で分類してみる

今回は表題の通り scikit-learn の手書き数字データセットをサポートベクターマシンを使って分類してみることにする。 下準備 あらかじめ必要な Python パッケージをインストールしておく。 $ pip install scikit-learn scipy matplotlib 分類対象を確認する…

Xvfb を使って仮想ディスプレイを作る

Xvfb (X virtual framebuffer) は X Window System の仮想ディスプレイを作ることのできるソフトウェア。 これを使うと実際にスクリーンがない状態でも GUI が必要なソフトウェアを使えるようになる。 今回使う環境には CentOS7 を選んだ。 $ cat /etc/redha…

Python: 自作パッケージにデータファイルを含める

Python で自作パッケージを作る際に、ソースコード以外のファイルを含めたくなる場合がある。 例えば Web アプリケーションを作るときの HTML テンプレートなんかはよくあるパターン。 今回は自作パッケージにソースコード以外のファイル (データファイル) …

Python: オブジェクトのソートについて

Python のソートについてイマイチちゃんと理解していなかったので、ここで一旦まとめてみる。 すべての基本となる sorted() 関数 まず、ソートの基本となるのが組み込み関数の sorted() だ。 これはイテレータを引数に取って、内容を整列させたリストを返す…

RabbitMQ: Management Plugin の WebUI を使う

RabbitMQ は Erlang で実装された AMQP のブローカー。 具体的な利用例だと OpenStack プロジェクトで RPC のインフラとして使われている。 最近知ったんだけど RabbitMQ にはプラグイン機構があって、その中の Management Plugin を使うと WebUI を利用でき…

graphviz/blockdiag の作業を捗らせるツール diagram-autobuild をつくった

graphviz と blockdiag (シリーズ) は、どちらもテキスト形式のソースファイルからダイアグラムの画像を生成できるツール。 今回、その graphviz や blockdiag で作業する際の効率を上げまくるツール diagram-autobuild というものをつくってみた。 そもそも…

日本語の文章から文字列を検索するコマンド jpgrep をつくってみた

タイトルの通りなんだけど日本語の文章から文字列を検索するコマンドをつくってみた。 GitHub - momijiame/jpgrep: grep for japanese text 背景 例えば、次のような日本語の文章を格納したテキストファイルがあるとする。 文章には「事」と「事実」という、…

Python: オブジェクトを漬物 (Pickle) にする

Python の標準ライブラリにある pickle モジュールは Python のオブジェクトを直列化・非直列化するための機能を提供している。 直列化 (Serialize) というのはプログラミング言語においてオブジェクトをバイト列などの表現に変換することを指す。 非直列化 …

Python: ファイルオブジェクトのクローズについて

Python でファイルシステム上にあるファイルを扱うには open() 関数などを使ってファイルオブジェクトを取得する。 しかし、使い終わったファイルオブジェクトはちゃんと close() メソッドを呼んで後片付けをしなければいけない。 そして、同時に開くファイ…