ブックマーク / methane.hatenablog.jp (8)

  • Python でシェル経由でコマンド実行するときのバッドノウハウ - methaneのブログ

    PHPだってシェル経由でないコマンド呼び出し機能が欲しい コマンド実行でシェルが怖いなら使わなければいいじゃない どちらの記事でも Python の subprocess を使ってシェルを介在せずにコマンドを実行する方法が紹介されています。 シェルを介在すると、エスケープの問題考えるのが面倒だったり、 kill してみたらシェルだけ殺して肝心のコマンドがずっと残ってるというアホみたいな問題を避けられるのでお勧めです。 いい子はこれを使いましょう。 この記事ではどうしてもシェルの機能が使いたい場合や、 subprocess の PIPE の組み立てが面倒な場合のための、バッドノウハウを紹介していきます。 ちなみに、バッドノウハウと呼んでるのは、安全安心 one size fits all ではなく、メリット・デメリット・やり方をいちいち調べないといけなくて、しかもその調べる行為がほとんどコン

    Python でシェル経由でコマンド実行するときのバッドノウハウ - methaneのブログ
    miyashiki
    miyashiki 2013/12/23
  • 次世代標準非同期I/Oフレームワーク asyncio (Tulip) - methaneのブログ

    Python Advent Calendar 2013 の4日目です。 Python 3.4 で標準ライブラリに追加される asyncio を触ってみます。 なお、 Tulip とは asyncio のリファレンス実装のプロジェクト名です。 背景 Python はよく非同期 I/O プログラミングに使われます。 Twisted, Tornado, gevent, eventlet, pyuv などのフレームワークがあります。 これらのフレームワークの問題点として、ライブラリの再利用性の低さが挙げられます。 たとえば Twisted 用に書かれた XMPP ライブラリは、そのままでは Tornado で 利用することができません。 この問題の解決策として、良くイベントループの乗り入れが行われます。 GUIアプリケーションに組み込む場合などを考えて、多くのフレームワークが最初から イベントルー

    次世代標準非同期I/Oフレームワーク asyncio (Tulip) - methaneのブログ
    miyashiki
    miyashiki 2013/12/04
  • Go で書いたサーバーを管理するには circus が便利 - methaneのブログ

    Go を使うとサーバーとアプリケーションの境界が無くなり、アプリケーションサーバーを書けるようになります。 それは良いことなのですが、アプリケーションを書く人が、従来サーバーを書く人が設計していた機能を理解して実現できないと、運用できないサーバーができあがる結果になってしまいます。 例えば Apache は、 master, worker プロセスが分離していて、設定変更を反映させるときなどは新しい worker を作ってから古い worker を殺すことで、サービスを一瞬も止めずに worker を再起動していました。これを graceful restart と呼びます。 Go で 1024 以下のポートを Listen するアプリを作る で触れたとおり、 Go はプロセス管理システムを作るのには少し向いていない面がありますし、せっかくアプリケーションプログラマーが簡単にサーバーを書ける

    Go で書いたサーバーを管理するには circus が便利 - methaneのブログ
    miyashiki
    miyashiki 2013/11/11
  • Go で 1024 以下のポートを Listen するアプリを作る - methaneのブログ

    Go はネットワークアプリケーションを手軽に書ける言語ですが、例えば 80 番ポートなど、 root でしか bind できないアドレスを Listen するアプリケーションを、 root でないユーザーで動かすのは地味に面倒です。 普通はソケットを bind してから setuid/setgid するのですが、 Linux では setuid が呼び出したスレッドしか適用されないという問題があり、 Go との相性が悪いからです。 参考 対処方法として、 Linux では capabilities を使って非 root ユーザーでも 1024 番以下を bind できるようにし、 Mac OS X などでは bind してから setuid するようにする。 先に root で bind したソケットを Go のプログラムに渡す。 2番めの方法を使うサンプルプログラムを書いておきます. $

    Go で 1024 以下のポートを Listen するアプリを作る - methaneのブログ
    miyashiki
    miyashiki 2013/11/11
  • Mac で Python の開発環境構築(2013.11) - methaneのブログ

    しばらく Mac からおさらばしていたのですが、ゆえあって戻ってきました。 Python 3.3 ベースで Python 環境の構築をしたので、参考までに手順を残しておきます。 1. Homebrew で Python 3 をインストール とりあえずベースになる Python を用意します。いまならもう Python 3 を普段使い用にできるので、 Python 3 を用意します。 $ brew install python3 MacPorts でも大丈夫だと思います。 2. 自分用のデフォルト環境を作る システムの Python に直接自分が普段使うツール類をインストールするのは憚られるので、自分用のデフォルト Python を用意します。 Python 3.3 では venv が標準ライブラリにあるので、この手順で virtualenv を手動で準備する必要がなくなりました。 $ mk

    Mac で Python の開発環境構築(2013.11) - methaneのブログ
    miyashiki
    miyashiki 2013/11/06
  • Python 3 の MySQL ドライバ事情 - methaneのブログ

    Python 3.3 の現状の MySQL 事情ってだいぶ解りにくいので、 MySQL-python と PyMySQL についてまとめておきます。 MySQL Connector/Python とかも Python 3 対応しているはずですが使ってないので知りません。 MySQL-python 多分デファクトスタンダードな MySQLドライバなのですが、現状リリースされている 1.2.4 では Python 3 対応ができていません。 Fork の MySQL-for-Python3 が推奨されます。 PyMySQL 一応、この前リリースした PyMySQL 0.6 で動くはずです。 速度的には CPython で使う文には MySQL-python の方が速いはずなので、そっちを使ったほうがいいです。 また、 PyMySQL 0.6 はプロトコル仕様みながら結構書き換えたので人柱要素も

    Python 3 の MySQL ドライバ事情 - methaneのブログ
    miyashiki
    miyashiki 2013/10/19
  • GoCon で発表してきました - methaneのブログ

    僕の発表 発表資料というかメモ 発表時間が20分だったので、ISUCONの紹介と、 Go 凄いよってことをアピールしてきました。 あとで流れてる Tweet を見ていたら、僕が一番感動した部分があまり拡散されてなかったので こちらで繰り返しておきます。 去年の ISUCON2 に参加した時、最終的にはカーネル空間で動く Webサーバー兼Memcachedサーバーの recaro を作ったのですが、それ以前に Meinheld や Gonet/http を nginx 並に速くしようと チューニングしていました。 その時に accept4 対応、 nonblock な write を分ける (当時の Go 1.0 ではシステムコールは 基的にブロックするものとして他の goroutine を別スレッドで動かすための処理がシステムコールの たびに実行されていた)、 Date ヘッダを毎

    GoCon で発表してきました - methaneのブログ
    miyashiki
    miyashiki 2013/10/16
  • PEP 8 を翻訳しました - methaneのブログ

    PEP 8 の邦訳は既にありましたが、誤訳が残ってたり版が古かったりと問題があったので、最新版の PEP 8 をエイヤと翻訳しました。 公式ドキュメントの翻訳プロジェクトで PEP 翻訳の管理・公開できる体制ができるまで、 DropBox においています。 https://dl.dropboxusercontent.com/u/555254/pep-0008.ja.html

    PEP 8 を翻訳しました - methaneのブログ
    miyashiki
    miyashiki 2013/09/04
  • 1