初めに この記事は、Python その2 Advent Calendar 2015の9日目の記事です。 書こうと思ったわけ 僕がPython初めて書いたのが4年前でとてもよい言語だと思い、簡単なコードなどはいつもPythonで書いていました。 初めに書いたのはPython2.7でしたが、調べていたらPython3なるものがあり、新しいもの好きだったので本気で学ぼうとし始めた時はPython3.3を使ってました。 なので、2系の話などはほとんど知らず、わざわざ古い(といっても当時は2系がメインでしたが)ものを学ぶ必要もないと思ってました。 が。 2系のライブラリが3系に対応していなかったり、2系で書かれていて3系に自分で置き換えなければならないなど色々問題がありました。 とまぁ、とにかく2系と3系の違いを学習ついでにまとめて見ようと思った次第です。 (すでに3系がでてから7年位経っているのは
ずっとPython2.7を愛用してきたが,人からもらった言語処理系のスクリプトがPython3を使用していたので,これを機に3.X系に乗り変えようとした. 乗り換える前に2.X系と3.X系の違いを調べてみると,どうも思っていたのと違う. 結局どっち使い続けるのがいいのだろ?と思い,いろいろと漁ってみると公式サイトに,「どのバージョンを使うかは,何をしたいかにほぼ依存する」といった記述があった笑. そこで,ぼくも食わず嫌いしていたpyenvを使ってみることにした. そんなこんなで,先駆者達の知恵を拝借し,自分の環境にpyenv-virtualenvを導入した時のメモを残しておく. pyenvとvirtualenv pyenv Pythonのバージョン切り替えに使用 基本的にPythonのバージョンごとに管理 同一バージョンで複数のPython環境を管理不可能(パッケージが混在する) 数値計算
PEP 263 – Defining Python Source Code Encodings PEP 263 – Defining Python Source Code Encodings Author: Marc-André Lemburg <mal at lemburg.com>, Martin von Löwis <martin at v.loewis.de> Status: Final Type: Standards Track Created: 06-Jun-2001 Python-Version: 2.3 Post-History: Table of Contents Abstract Problem Proposed Solution Defining the Encoding Examples Concepts Implementation Phases Scope Re
Flask(フラスク)は、プログラミング言語Python用の、軽量なウェブアプリケーションフレームワークである。標準で提供する機能を最小限に保っているため、自身を「マイクロフレームワーク」と呼んでいる。Werkzeug WSGIツールキットとJinja2テンプレートエンジンを基に作られている。BSDライセンスで公開されている。 Flaskは、標準で提供する機能を最小限に保っているため、自身を「マイクロフレームワーク」と呼んでいる。Flask自身は、他のフレームワークがしばしば持っているような、データベース抽象化レイヤやフォーム値の検証などの機能を持たない。これは、どんなWebアプリケーションにも適合する良い基盤を作るための設計判断だとしている(例えば、テンプレートエンジンはほとんどのWebアプリケーションで有用だが、関係データベース等はすべてのアプリケーションが必要とするものではない)[2
Ruby は柔軟なプログラミング言語であり Sinatra のような手軽で軽量なウェブアプリケーションフレームワークがあります。いままで分析用の言語として主に Python で統計やデータの可視化をおこなってきましたが、もちろん Python にも多種多様なウェブアプリケーションフレームワークがあります。 数値計算などを Python でおこなう仕組みをウェブシステムとして提供したい場合、わざわざ別の言語を利用するよりウェブの部分も同じ言語で作ってしまったほうが一貫性があります。 そこで今回は Flask という Python の小規模なフレームワークを利用し、ごく簡単なウェブアプリケーションを作ってみます。 Flask には日本語訳された親切なユーザーガイドがあります。 https://a2c.bitbucket.io/flask/ とても丁寧に書かれているので、基本的にはこのドキュメン
昨日は Python のウェブフレームワーク Flask で簡単な応答システムを作りました。これだけだとあまりに退屈なので、せっかくですから NumPy を利用して少しは楽しめるものを作ってみたいと思います。 「ガチャ」とは、最近流行のソーシャルゲームやオンラインゲームにおいて 1 回課金することによってアイテム等をランダムに入手できる仕組みのことです。 10 連ガチャとは 1 回の試行で 10 回分のレアガチャを引く仕組みのことです。基本無料を謳うソーシャルゲームなどでは、このようなアイテム課金で利益を得る仕組みになっています。 シミュレーションの目的としては、運営サイドとしてはプレイヤーがじゃぶじゃぶ課金したくなるような射幸心を煽りまくるガチャが提供できているかどうか確認する、プレイヤーサイドとしてはリアルマネーいわゆる実際のお金を投入する前にあらかじめどれくらいの確率で成功するのかを
PythonでAES暗号を取り扱わなければならなくなったので備忘録代わりにメモ。 まずはPyCryptoをインストール。 $ pip install PyCrypto それではAESの暗号化、復号化してみるよ。 こんなコード書いてみた。 CBCモードで初期ベクトルは乱数を使ってる。 import os import hashlib from Crypto.Cipher import AES # key and initial vector secret_key = hashlib.sha256('This is secret passphrase.').digest() iv = os.urandom(16) # plain text plain_text = 'A' * 16 # encrypt aes = AES.new(secret_key, AES.MODE_CBC, iv) en
```get_encrypt_data.py from Crypto.Cipher import AES import hashlib import base64 def get_encrypt_data(raw_data, key, iv): raw_data_base64 = base64.b64encode(raw_data) # 16byte if len(raw_data_base64) % 16 != 0: raw_data_base64_16byte = raw_data_base64 for i in range(16 - (len(raw_data_base64) % 16)): raw_data_base64_16byte += "_" else: raw_data_base64_16byte = raw_data_base64 secret_key = hashlib
import base64 from Crypto import Random from Crypto.Cipher import AES class AESCipher(object): def __init__(self, key, block_size=32): self.bs = block_size if len(key) >= len(str(block_size)): self.key = key[:block_size] else: self.key = self._pad(key) def encrypt(self, raw): raw = self._pad(raw) iv = Random.new().read(AES.block_size) cipher = AES.new(self.key, AES.MODE_CBC, iv) return base64.b64e
暗号っていいよね。なんかこう、楽しい。 というわけで、pythonで試してみました。 といっても、残念ながら標準ライブラリにはそれっぽいのがない。 hmacとかsslとかはあるんだけどねー。 AESくらいは標準ライブラリに入れといて欲しいよね・・・。ま、仕方がない。 仕方がないので、今回使うのはpycryptoっていうライブラリを使わして頂きます。 インストールgentooのportageにパッケージがあったので有難く利用。 python2.xでもpython3.xでもCryptoって名前のパッケージになります。 小文字じゃないんだね、頭。 gentoo以外を使ってる方はpypiにあるpycryptoのページあたりからどうぞ。 使ってみる早速AESで遊んでみます。 1つ注意しなきゃいけないのは、AESはブロック暗号だということ。 つまり、鍵長は16バイト、24バイト、32バイトのうちのどれ
Pythonで作ったデータを暗号化して、Javaで復号したい セキュリティ上の話で、そんなことが必要になった。 どちらもCryptoというライブラリがあるからすぐできるだろうと思っていたら大ハマりで、復号に至るまでに4時間くらいかかった。 参考 http://nori3tsu.hatenablog.com/entry/2013/10/01/012130 ハマった私に降りた天使のようなページ。 https://qiita.com/pink/items/f795b0680a2a000e1934 http://pentan.info/doc/block_cipher.html#anc_padding パディングについて説明してくれているページ。 ポイント 暗号化には次の考えておくべき要素がある。(かなりざっくり) 暗号化の種類→今回はAESとする 鍵 ECB/CBC/OFB 暗号化対象のパディン
Pythonと情報セキュリティ Pythonは情報セキュリティの世界でよく使われる言語でもあります。 いろいろな計算を行うライブラリが標準、外部ライブラリともにそろっていたり、Pythonのインタプリタの使い勝手がよかったり、手軽に書きやすいなどの理由から愛用している人も多いようです。 TBS系で放送されたブラッディ・マンデイというドラマで主人公の凄腕ハッカーがPythonを使っていたことが(一部で)話題になっていたこともありました。 そんなPythonの暗号化/復号化するためのライブラリ「pycrypto」を紹介します。 [pycrypto] https://pypi.python.org/pypi/pycrypto [ドキュメント] http://pythonhosted.org/pycrypto/ pycryptoのつかいかた まずはpipでinstallを行います。 $ pip i
要点を言えば、公式Pythonライブラリでメモリの問題が2回発生した上に、バージョンアップでさらにコントロールできないものになったので使うのをやめた。 自社用データ収集のプロジェクトoceanusでは、データをBigQueryに保存するだけでなく、データのリアルタイム処理、ストリーミング処理用にPub/Subにも送信している。 github.com 例えば、コンバージョンとか特定のイベントが来たらメールするとか、Googleスプレッドシートに書き込むとか。 開発してからしばらくは同一ネットワーク内(GKE)に自分で立てたRedisのPub/Subで行っていたが、Google Cloud Pub/Subの方が、自分でスケーリングとか考えなくていいし、どこからでもアクセスできたり、他のGCPサービス(Cloud Functions)と連携もしやすいので移した。 しかし、Cloud Pub/Su
要約 Google Pub/Subクライアントを使い、ずっと動かし続けてたらメモリリークが見つかった 調査したらクライアント自体のバグか仕様だった。そもそも動かし続けるように作られてない multiprocessingのProcessを使い、別プロセスで動かし、メッセージを一定数ごと受け取ったらそのプロセスごと再起動するようにした oceanusのpubsubからデータを受け取り処理を行うrevelationで、pubusbをRedisからGoogle Cloud Pub/Subにしたところ、メモリリークが発生した。 データはbizoceanのイベントログが送られてきて、一つ数KB、~10メッセージ/秒が来る。 起動時は50MBだけど1時間に数MB増え、1週間で数百MBになり、他のPODにも影響してしまう。 本番のKubernetes(GKE)では下記コマンドでメモリの増加を確認。 % k
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く