サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
www.denzow.me
現在の仕事では各個人の開発環境をDockerで用意しています。基本的にコードがあるディレクトリをコンテナ側と共有していますが、一部分だけ共有したくないというケースが発生しました。以下のようなケースです。 drwxr-xr-x 571 denzow staff 19414 3 18 09:43 node_modules -rw-r--r-- 1 denzow staff 286 3 18 09:43 package.json drwxr-xr-x 3 denzow staff 102 3 18 09:47 src -rw-r--r-- 1 denzow staff 584 3 18 09:47 webpack.config.js -rw-r--r-- 1 denzow staff 134 3 18 09:51 Dockerfile_webpack -rw-r--r-- 1 denzow st
現在仕事でWEBサービスを作るときはDjango一択な環境にいます。今度Websocketが必要になったのですがDjangoでWebsocketどうするんだってことで調べたところChannelsというライブラリを使うらしいです。Djangoのグループが作っているので安心感があります。Channelsは日本語でもいくつか記事がありましたが1.x時代のものでそのままでは動かなかったりしたのでチュートリアルを中心に試してみました。 ということで何回かにわけて(たぶん3回?)Django Channelsのチュートリアルをベースにちょっとだけ手を加えた内容をまとめていきます。また最終的には本番環境で動かせるようにnginx経由でwebsocketができるところまで持っていきます。 環境 以下の構成でやっていきます。 Python 3.6 Django 2.0.3 Django Channels 2
最近はHead First デザインパターンを読みながら、デザインパターンの勉強をしています。この本は読みやすくてとても参考になるのですが、サンプルの実装はJavaになっておりそのままPythonに移植することはできません。 第5章がシングルトンパターンですが、そもそもPythonでどのようにシングルトンを実装すべきかがわからなかったので確認した結果を残しておきます。 Javaでの実装 書籍に載っているJavaの実装は2重チェックロッキングを用いた以下のようなものです。 public class Singleton { // 唯一のインスタンスを保持する変数 private volatile static Singleton uniqueInstance; // コンストラクタがPrivateなので外部からは呼び出せない private Singleton(){} // 外部からインスタン
Djangoはモデルの内容が変更されても、makemigrationsしてmigrateすればDBにモデルの変更を反映できるので楽でいいですね。しかし、ちょっとユニーク制約をもったカラムを追加しようとしたら簡単にはいかないケースに遭遇したのでメモを残しておきます。 遭遇したケース こんなモデルが最初にあったとします。 from django.db import models class Product(models.Model): name = models.CharField(verbose_name='商品名', max_length=100) price = models.IntegerField(verbose_name='価格') def __str__(self): return '{}: {}'.format(self.id, self.name) また、すでにエントリが2件
前回書いたようにISHOCONというプライベートなISUCONに出てきました。MySQLの思いクエリをRedisに変えることでスコアは伸びたのですが、Redis自体もプロセスローカルのメモリに比べると遅いのでできるだけ効率的な使い方を模索しました。いつになく記事が長くなってしまいました。 hiredis Pythonでredisを使うにはredis-pyを使います。これをいれるだけで使うことはできるのですが、パーサ部分をCで実装したHiredisを入れるとredis-py自体が高速化するので一緒に入れておくのがマストでしょう。(10倍くらい違うらしい) $ pip install hiredis hiredisをredis-pyの代わりに使うわけではなく、いれるとredis-pyが早くなるということだそうです。確かにhiredisが入ってるかどうかで動きが変わる部分がredis-pyにあり
最近のクローラ周りのunittestを書いていたのですが、テスト速度の改善や安定化のためにmockのpatchを使おうとして色々とハマったのでまとめておきます。 mock?patch? Pythonのunittestにはテスト時に一部の関数を置き換えることを目的としたMockを生成するクラスが用意されています。 26.5. unittest.mock — モックオブジェクトライブラリ 以下のように作成したMockオブジェクトは何も定義していなくてもどんな呼び出し方にも対応し、またその呼び出され方を記憶しています。 In [1]: from unittest.mock import Mock In [2]: mock_obj = Mock() In [3]: mock_obj() # 引数なしでの呼び出し Out[3]: <Mock name='mock()' id='4584656792'
Dynamodbを使うようになったのですが、RDBMSに比べるとDynamodbは雰囲気でやっているところが多く、表題のLimitオプションの挙動で嵌ったのでboto3での例とあわせてまとめておきます。 対象テーブル order_table = { 'TableName': 'order_table', 'KeySchema': [ { 'AttributeName': 'user_id', 'KeyType': 'HASH' }, { 'AttributeName': 'ordered_at', 'KeyType': 'RANGE' } ], 'AttributeDefinitions': [ { 'AttributeName': 'user_id', 'AttributeType': 'N' }, { 'AttributeName': 'ordered_at', 'AttributeT
会社の後輩に、社内のFAQの利用率を高めたいからなんとかしたいといわれ、自然言語の入力を受け付けて近いFAQのリンクを戻すコードを書いてみました。 後輩に説明しながらという点と元データも70件程度と少なかったことや、そもそも自分がちゃんと理解してない点もあったので、gensimやsklearn等は用いずになんちゃってBoWで実装しました。 コンセプト こんな感じでやることにしました。計算効率とかはあまり考えずわかりやすさを優先して実装します。 元々あるFAQを単語分割 単語の出現数をそれぞれカウント ユーザが入力した内容も単語に分割し出現数をカウント 出現している単語が近いものをスコア順に提案 対象データについて こんなイメージのデータでした。中身はイメージです。URLも適当です。 Question Answer link AWSとOracleCloudの違いはなんですか? 名前が違います
最近やたらunittestを書いているのですが、標準出力部分のテストをしなければいけなくなり、やり方を確認したのでメモとして残します。 どういうことか こういう標準出力に内容を書き出す関数についてunittestを作成したかったという話です。 def hoge(): print("HELLO") ポイント print等で書き出される標準出力はsys.stdoutだということ、そしてsys.stdoutは再代入可能という点がポイントです。各テストケース前にsys.stdoutをio.StringIO()等のファイルライクなオブジェクトで置き換えてしまえばテストができるようになります。ただ、そのまま上書きしてしまうと支障が出るのでオリジナルのstdoutも退避しておきます。 def setUp(self): """ :return: """ # sys.stdoutを退避し、StringIO(
ChannelsとVue.jsの練習がてらカンバンを実装してみました。割りとカンバンのUIの実装記事はあるのですが、サーバ側までセットになったものが少なかったのでがんばりました。 github.com リポジトリのコードが全てではありますが、一応メモ程度に内容を残しておきます。 とりあえず試す場合 リポジトリをクローンしたら、docker-compose upするだけで動きます。あとはブラウザからhttp://localhost:8000/kanban/1にアクセスすればカンバンが試せます。なお末尾のIDを変えれば新規カンバンが作成できます。 利用バージョンについて 主要なコンポーネントのバージョンは以下です。 Python 3.6.4 Django 2.0.3 DjangoChannels 2.0.2 Vue.js 2.5.16 vuedraggable 2.16.0 vuex 3.0.
先日、ISUCONの練習としてISHOCONに参加してきました。ISUCONもそうですが初期実装のRDBMS部分をどれだけRedis等に移せるかでスコアの伸び方が違う気がします。少なくとも今回の問題はRedisを上手に使えるかが鍵です(少なくともPythonでは しかし、イマイチRedisを触ったことがなかったのでまとめておきます。 Redis Wikipediaより Redisは、データ構造サーバーを実装するオープンソースソフトウェアプロジェクトである。 いわゆるNoSQLデータベースの一つであり、Redis Labsがスポンサーとなって開発されている。 ネットワーク接続されたインメモリデータベースでかつキー・バリュー型データベースであり、オプションとして永続性を持つ。 売りとしてはマスタスレーブだったりってのもありますが、1ノードなのでただのおっきなDictとして使い潰します。memc
ISUCON7の予選は、画像へのアクセスをいかに304で処理して帯域を節約できるかが肝でした。そこでnginxのETagやLast-Modified等の設定周りを見直してみます。 環境 以下の環境で試しました。 OS: Ubuntu 16.04 nginx: 1.10.3 Client: python-requests 2.8.1 初期設定 サーバ上の/public/sample.pngにサンプルの画像を配置し、http://host/sample.pngでアクセスできるようにnginx.confを設定します。以下で拡張子が*.cssや*.js、*.pngの場合は/public配下より配信されます。 server { listen 80; location ~* \.(css|js|png)$ { root /public; } } 今回はアクセスのテスト用にPythonのrequests
Raspberry Pi と照度センサを使って、トイレの使用状況をSlackからわかるようにしてみました。 ※全部会社で買ってもらった(*´ω`*) 動機 職場は2フロアあり、下のフロアがオープンスペースになっていおりトイレもここにあります。私は上のフロアで仕事をしていますので、トイレにいくには下のフロアに降りるのですが、トイレが1個しかないので、降りてみたら使用中で仕方なく上に戻るという非生産的な行動が多発していました。 そのため、上のフロアにいてもひと目でトイレの使用状況がわかるようにしたかったのです。 動機 実現方法 照度センサーについて Skackへの通知 Slack Tokenの取得 Botによる会話 Botの在籍状況(ステータス)の設定 自動起動の設定 まとめ 実現方法 会社のトイレは家庭用のトイレ個室のような感じですので、こちたの記事のように扉の開閉センサーでの判定は難しい(
この記事はJPOUG Advent Calendar 2017の3日目です。 さらに同日にもう1記事あげていますのでよろしければご覧ください。 次の仕事ではOracleとかかわらなくなりますが、思い入れがありますのでエントリ書いておきます。 PythonからOracle DatabaseにSQLを発行するまでの流れを簡単にまとめていきます。 PythonからOracle Databaseを利用するには PythonからOracle DatabaseにSQLを発行したりするには、cx_Oracleを利用します。 cx_OracleはPythonのDB API2.0を実装するモジュールで、他のRDBMSに対するPython用モジュールとほぼ同じメソッドで利用できます。また、それらに加えてLOBやPL/SQLのカーソル等、Oracle独自の機能への対応も行われています。 今回は、cx_Oracl
このページを最初にブックマークしてみませんか?
『www.denzow.me』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く