API.AIのコンテキストを使ってChatOps環境を作る

API.AIのContextsとWebhookでChatOps環境を作ってみます。 docs.api.ai 今回は、SlackのChatbotとやりとりし、「管理者モード開始」から「管理者モード終了」までのやりとりの間に操作コマンドを実行できるようにします。 インテントを用意する インテントは…

API.AIを試す

Slackのbotなどを作るときに、API.AIを使うと面白いか便利かもねという話を聞いたので試しています。 api.ai API.AIってどういうものか API.AIの概要は公式ドキュメントの説明がわかりやすいのでそちらを読むのをオススメします。 Introduction · API.AI 自…

bpmappers 0.9

bpmappersのバージョン0.9を公開しました。 pypi.python.org リポジトリはbeproud organization以下にありますが、権限を頂いて引き続きメンテナンスしています。 以前のバージョンでは、django.utilsにあったSortedDictとMultiValueDictをコピーして使って…

django-ftpserver 0.5.0

django-ftpserverのバージョンを0.5.0に上げました。 pypi.python.org pyftpdlibのFileSystemにDjangoのStorageAPIをつなげる機能を追加してみました。 StorageAPIとつなげると、面白そうだなーというのは前から考えてたんですが、StorageAPI側の機能が足り…

プログラミング学習サービスPyQの紹介

PyQというプログラミング学習サービスの紹介と宣伝です。 ↓ これ ↓ 以前、私が勤務していた株式会社ビープラウドが開発しています。 ビープラウドは、Python言語が得意でシステム開発をやってる会社です。connpassというイベントサイトの開発、運営もやって…

CentOS7にCartonを導入する

CentOS7 (7.3) にCartonをインストールするところでハマったのでメモを残す。 GitHub - perl-carton/carton: Bundler or pip freeze for Perl cpanmコマンドまではインストール済み。Cartonをインストールするとcartonコマンドを使えるようになる。 CentOS7…

CentOS7にcpanminusを導入する

CentOS7 (7.3) にcpanminusをインストールするところでハマったのでメモを残す。 GitHub - miyagawa/cpanminus: cpanminus - get, unpack, build and install modules from CPAN cpanminusを導入するとcpanmコマンドを使えるようになる。 CentOS7はvagrantの…

Kerberos認証とPython

Windowsで認証にActiveDirectoryを使っている環境だと、シングルサインオン(SSO)などやるときにKerberos認証を使いたいこともあるだろうということで調べていました。 他の認証方法はNTLMがあるけど、非推奨のようなのでKerberosのほうを調べることに。 Kerb…

GoogleAppEngineとGoogleCloudPlatformの知識アップデート2017/05

3年ぐらいGoogleAppEngine (GAE)を使っていなかったのですが、GCPの無料枠も増えてるみたいだし久しぶりに触ってみようと思って調べていました。 以下、GAEとGCP周辺の知識のアップデートなメモ書き。 GoogleCloudPlatform (GCP) cloud.google.com Googleが…

ツンパァードラグーン・VR

前置き 今月は案件が無くて時間があったので、VRについていろいろ調べて試していました。 来月も今のところ暇になりそうなので、案件のお話があれば是非お問い合わせください。 www.open-c.jp 以下、本題です。 きっかけ HTC VIVEを試すために何かアプリケー…

AWS LambdaをPython3.6とChaliceで試す

AWS LambdaがようやくPython3に対応したそうなので試してました。 AWS Lambda Supports Python 3.6 Lambdaを使う際、Pythonランタイムだとchaliceというフレームワークを使うと楽なのですが、Python3サポートに合わせてchaliceもバージョンが上がっていまし…

Travis CIのmatrixでtoxを実行する

Djangoフレームワークに依存するPythonのモジュールを作っていると、複数のPythonバージョンと複数のDjangoバージョンでテストコードを実行する必要があります。 手元で実行する場合はtoxを使うのですが、CIツールでもテストを実行したいです。 Welcome to t…

Django 1.11がリリースされましたね

Djangoフレームワークの1.11がリリースされましたね。 Django 1.11 released | Weblog | Django 1.11はLTS(Long Term Support)バージョンです。メンテナンス期限はリリースから3年後までなので、2020年4月までになります。 1つ前のバージョン1.10のメンテナ…

Unity使い始め

HTC VIVEで遊びたくて、まずはUnityをちょっと使えるようになってみようって感じで勉強し始めたのでメモを残したり。 Unity - Game Engine 読み始めた書籍 購入して読み始めた本はこれ。 ほんきで学ぶUnityゲーム開発入門 Unity5対応作者: 夏木雅規出版社/メ…

VRをやっていきたい

VR

会社でHTC VIVEを購入したので、VRやARについて知見を得ていきたいと思う。知識ほぼないところからスタートだけども。 VIVE™ 日本 | 想像を超えたバーチャルリアリティの体験 HTC VIVEを少し動かしてみた感想としては、次のような感じ。 ルームスケール用の…

devproxyをWebアプリケーション開発で使う

devproxyというのを開発時に使っているのですが、便利なので紹介します。 GitHub - moriyoshi/devproxy: A swiss army knife of forward HTTP proxies devproxyは、Webアプリケーション開発向けのHTTPフォワードプロキシです。次のような点で便利です。 /etc…

SphinxでPDFをビルドするためのDockerイメージを作った

Sphinxでlatexpdfjaコマンドを使ってPDFをビルドするには、latexのインストールされた環境が必要になります。 Ubuntuだとtexlive-fullパッケージで必要なパッケージをインストールできるっぽいというのを把握しました。 texlive-fullは依存パッケージがたく…

2017年

年が明けて1月はもう後半になってしまいましたが、今年もちょっとずついろいろなことをやっていきたいです。 ブログの更新頻度をもう少し高めにしたい ここ1~2年、技術的に新しいことに手を出せていなくて危機感高まっているので、入門的なことからでもメモ…

畑を借りたり農作業したり

この記事はpyspa Advent Calendar 2016の7日目として投稿しています。 http://www.adventar.org/calendars/1435 今年、畑を借りました うちの近所には、市民が趣味で農作物を育てたりできる市民農園がいくつかあり、市営、民営で貸し出されています。 私が借…

dogpile.cacheでpickleシリアライズせずにRedisに値を保存する

Python用のキャッシュフレームワークでdogpile.cacheというモジュールがあります。 Welcome to dogpile.cache’s documentation! — dogpile.cache 0.6.2 documentation Redisに保存するバックエンドも提供されているんですが、そのまま使うと値はpickleシリア…

ThriftPy+gunicorn_thriftでRPCサーバーを動かす

ThriftPyを使って作ったサーバーを動かすのに、thriftpy本体が持ってるサーバークラスを使ってもいいのだけど、タイムアウト処理やマルチプロセス動作だとかやるのが少し面倒だなーと考えてました。 githubでサーバークラスを差し替えるpull requestを出して…

Procfileを扱う

Procfileというのを使ったのでメモを残す。 Procfileという名前のファイルを作って、アプリケーションの起動コマンドをまとめておくと、Procfileを扱うツールから簡単に実行できる。 Procfile: web: gunicorn -w 4 main:app 0.0.0.0:$PORT test: py.test . …

Google App EngineのPython SDKをDockerで動かしてみた

GoogleAppEngineを久々に使おうとしたらいろいろ変わっていて戸惑いまくり。 静的ページをホストしてるだけのプロジェクトで更新をしたかったので、SDKのインストールが必要なんですが、毎回面倒なのでDockerで少し楽できないかと、ゴニョゴニョしてました。…

ThriftPyを使ってPythonでThriftのRPCを扱う

Python3でApache Thriftを扱うライブラリは無いか探してたところ、ThriftPyというのがあるらしいとわかったので試してました。 ThriftPy — ThriftPy 0.3.9 documentation ThriftPyは、ApacheThriftのPython版と比べると、PurePython実装(Cythonによるスピー…

退職と入社

8年ほど勤務した株式会社ビープラウドを退職しました。 11月から株式会社オープンコレクターに入社します。 www.open-c.jp オープンコレクターという会社は、もりよしが代表で1人の組織でしたが、私とあおだぐが新しく加わって3人になります。 開発や技術支…

Pythonでファイルディスクリプタをサブプロセスに渡す

Pythonのsubprocessモジュールでサブプロセスを実行するときに、親プロセス側で開いたファイルのファイルディスクリプタを渡す方法。 subprocess.Popenのpass_fds引数を指定すると、指定したファイルディスクリプタは閉じられないようだ。 試したPythonのバ…

PyConJP 2016に参加しました

PyConJP 2016に参加してきました。 スピーカーとして、トーク1つ、ビギナーセッション1つ、オープンスペース2枠で話してきました。 ビギナーセッション(コードリーディング) ビギナーセッションは、講師の応募がなかったそうで、お願いされたのを引き受けて…

システムやアプリケーションの要件定義、設計から実装、完成まで

はじめに 普段システムやアプリケーションを作るのに、どういう手順でやるっけかなーというのを書き出してみた、というものです。 必ずしもこの通りにすればうまくいく、というものではなく、一例だと考えてください。 流れ 大雑把に次のような流れになりま…

ngrokというサービスを使ってLAN内のサーバーに外部から接続する

ngrokはNATやファイヤーウォール以下にあるローカルサーバーを、インターネット越しにアクセス可能にしてくれるサービス。 便利だよと教えてもらったので、試してました。 ngrok.com 無料版の機能はアカウント登録等不要で、ngrokコマンドをダウンロードして…

pipでPythonパッケージのソースアーカイブをダウンロードする

PyPIに登録されているPythonパッケージのソースコードをダウンロードする際、毎回PyPIのページを開くのが面倒だなーと思ってたのだけど、pipでダウンロードできた。 pip download --no-binary :all: --no-deps <package> 参考 pip download — pip 8.1.2 documentation</package>

Raspberry Pi 2 Model B でPythonを使ってLチカ

Raspberry Piを買ったのはかなり前だったりするんですが、放置してたのを動かしてみました。 とりあえずはLチカ youtu.be コード main.py from RPi import GPIO import time def main(): GPIO.setmode(GPIO.BOARD) GPIO.setup(12, GPIO.OUT) try: state = Tr…

Xubuntuを14.04から16.04にアップグレードした

2010年のMacBookAir(メモリ2GB)にXubuntuをインストールして使ってるのだけど、14.04LTSのデスクトップ版から16.04にアップグレードした。 $ sudo apt update $ sudo do-release-upgrade -d Firefoxを起動しててもメモリ使用量は1GB以内ぐらいで収まってるの…

オープンソースカンファレンス2016 HokkaidoというイベントでDjangoの紹介をしました

6/18に北海道のオープンソースカンファレンスでDjangoの紹介をしてきました。 www.ospn.jp 説明が急ぎ足になったり、デモが中途半端に終わってしまって申し訳ない感じですが、聞きに来てくださった方はありがとうございました。 いくつか面白いセミナーもあ…

はてなブログに移行しました

使い慣れた『はてなダイアリー』から、『はてなブログ』に移行した。 そろそろMarkdown記法に慣れといたほうがいいだろうなーと思ったりしてるけど、はてな記法やreSTに比べると貧弱だし、サイトやソフトウェア毎の方言が強くてつらみがある。 やっていく。

dockerとdocker-composeの使い方メモ

プライベートで使ってるVPSの環境をdocker-composeで動かしたのだけど、忘れてもいいようにメモを残す。 ホストOSは、Ubuntu16.04。 インストール dockerは手順通りaptでインストールすればよい。 Installation on Ubuntu docker-composeは、dockerとは別途…

通信料金の計算2016夏

前回の計算以降、プランの見直しや通信回線の解約、契約を行ったので、メモを残す。 現状の使い方 auガラケー、Nexus4、モバイルルーター(Aterm MR04LN)の3台を持ち歩いてる Nexus4はデータ通信専用、So-netの0 SIMを挿してるが、できるだけモバイルルーター…

pyftpdlibを使って1ユーザー専用のFTPサーバーを作った

pyftpdlibを使って、1ユーザー専用のFTPサーバーを作ってました。 でかいデータの受け渡しなんかに使ったりするのにFTPサーバーがやっぱり便利なんで。 ついでにDockerを試したりしてた。 GitHub - tokibito/soloftpd: FTP server application. soloftpd 0.4…

DjangoのDeprecationWarningを確認する

Djangoフレームワークでは、APIが変更、廃止される場合には、次のバージョンですぐに変わってしまうのではなく、警告を上げた上で2つ先のバージョンで削除されることになっています。 Deprecation policy Pythonの組み込み例外であるDeprecationWarningを継…

cx_Oracleをマルチスレッドで使う

PythonでOracle Databaseに接続するには、cx_Oracleを使う。 マルチスレッド環境下でcx_Oracleを使う場合にハマったのでメモを残す。 Oracleのクライアントライブラリは、マルチスレッドで使う際には、OCI_THREADEDというモードで使わないといけないらしい。…

concurrent.futures.ThreadPoolExecutorを使ってみる

Python 3.2から追加されたconcurrent.futuresモジュール。 ThreadPoolExecutorを使うと、スレッドプールで処理を実行できる。 コード main.py import time import threading from concurrent.futures import ThreadPoolExecutor def spam(): for i in range(…

スレッドが終了するタイミングについて検証

Pythonでスレッドをしばらく使っていなくて、どういう動きするのだったか忘れてたので、検証したメモを残す。 試した環境は、Ubuntu 14.04、Python 3.5.1。 検証に使ったコード main.py: import threading import os import sys import time import signal d…

funkload-friendlyというモジュールを作りました

FunkLoadはPythonで作られたWebアプリケーション向けの負荷試験ツールです。 レポートがわかりやすいので、負荷試験の際によく利用してます。 便利ではあるのですが、いくつか使いづらい点があったので、funkload-friendlyというラッパーモジュールを作りま…

テンプレートからプロジェクトを生成できるcookiecutterを試す

cookiecutterは、テンプレート(雛形となるファイル群)を元に、プロジェクトファイル(ディレクトリやファイル)を生成できるコマンドラインツール。 Pythonで作られている。 GitHub - audreyr/cookiecutter: A command-line utility that creates projects fro…

unittest.mock.patchの使用例

Pythonの標準ライブラリに含まれるunittest.mockモジュールの使い方メモ。patchのみ。 試したバージョンは、Python 3.5 テスト対象 main.py import subprocess def say(message): """echoコマンドでmessageを実行する """ return subprocess.call(['echo', m…

Pythonコードを3-way mergeする場合にKDiff3とP4Mergeのどちらを使うか検討

もう何年もKDiff3ユーザーですが、無料のマージツールならP4Mergeも良いよと聞いたので、少し試してみました。 MercurialやGitのマージツールとして使うため、3-way mergeが前提です。 できるだけ自動解決したいので、うまく自動解決する手段があればそちら…

Djangoで複数のデータベースを使う際に、モデルごとに使われるデータベース名を取得する

Djangoで複数のデータベースを使う際に、データベースルーター(Database router)を設定すると、モデル毎にデータベースを切り替えたりできます。 Multiple databases | Django documentation | Django データベースルーターが設定されている場合に、アプリケ…

復数のレコードをまとめて更新する際にdjango-bulk-updateが便利

既存の復数のレコードをまとめて更新する際にdjango-bulk-updateというパッケージが便利だったので紹介します。 GitHub - aykut/django-bulk-update: Bulk update using one query over Django ORM 通常のDjangoのORMを使ったレコードの更新 Djangoで既存の…

jedi-vimのrpcフォークをWindowsで使ってみた

メモ書き。jedi-vimのjedi部分をRPCで動かすforkを@nakamurayが作ってくれたのでWindowsで動かしてみてた。 https://github.com/nakamuray/jedi-vim/tree/rpc https://github.com/nakamuray/jedi-vim/tree/rpc2 そのままではWindowsで動かなかったので、手元…

作業のお供にノンアルコールビール(主にドライゼロ)

この記事はpyspa Advent Calendar 2015の2日目の記事です。 Python温泉は主催者の意向により、酒を飲むのは禁止となってます。 ノンアルコールビールは、酒としてカウントされないのでOKとなっています 。 前回のPython温泉で、「ノンアルコールビールでもド…

Delphiでインターフェースを使う

久々にDelphiを少し触ってました。かなり忘れてる。 Delphiのインターフェースを使って2つの実装クラスを作り、実行時にどちらのクラスを使うか決定してる。 試したバージョンはDelphi XE4。 Main.dpr program Main; {$APPTYPE CONSOLE} uses System.Classes…