[Dd]enzow(ill)? with DB and Python

DBとか資格とかPythonとかの話をつらつらと

Chrome Extensionのアイコンを動かしたい(chrome.browserAction.setIcon)

最近ちょこちょこChrome Extensionのコードを書いています。メインの処理自体はAPIを叩いて結果を取り出すだけのシンプルなものですが、細部に凝りだすと際限がないですね。 Chrome ExtensionのbrowserActionを使っている場合、常にブラウザの右上にアイコン…

Djangoのtemplateでifを省略する(yesnoフィルター)

Djangoのtemplateでちょっとしたifを省略する場合の話です。Listを元にDOMノードを作成しているときに、元データに応じてCSSクラスを変更したい場合の話です。以下のようなケースをもう少しきれいに書きたくなったので調べました。 <ul> {% for row in data_list</ul>…

DynamodbのLimitが思った動きでなくて嵌った話(Dynamodbの基本的なクエリ等)

Dynamodbを使うようになったのですが、RDBMSに比べるとDynamodbは雰囲気でやっているところが多く、表題のLimitオプションの挙動で嵌ったのでboto3での例とあわせてまとめておきます。

Pythonでシングルトン(Singleton)を実装してみる

最近はHead First デザインパターンを読みながら、デザインパターンの勉強をしています。この本は読みやすくてとても参考になるのですが、サンプルの実装はJavaになっておりそのままPythonに移植することはできません。 第5章がシングルトンパターンですが、…

CSSを使用したローディング画面を実装したかった

CSSでローディング画面を追加しないといけなくなって色々調べて悩んだので、まとめておきます。こういうのです。

DjangoのATOMIC_REQUESTSの挙動について

今回はDjangoのsettings.DATABASESに指定できるATOMIC_REQUESTSという設定について挙動を確認してみます。なおデータベースにはPostgreSQLを利用します。

AWS WorkMail をboto3でユーザー登録する

AWS WorkMail、便利ですね。AWSが提供しているメールサービスで、独自ドメインでメールの送受信ができます。自社のサービスでは、お客様ごとにメールアドレスを発行しており、その際にWorkMailを使っています。 現在は契約処理の一環で担当者がWorkMailにア…

boto3でAWSのRDSインスタンスを再作成する

2018年もはじまって1週間、そろそろ社会復帰しないといけないですね。昨年末にRDSやらboto3やら触っていたのでそこら辺まとめておきます。 解決すべき課題 RDSはいずれもMySQL 本番のRDSがある(本番RDS) 開発用環境のRDSがある(開発RDS) 開発RDSのデータは本…

2017年を振り返る(DBA@SIer -> Pythonista@startup)

大晦日も普通に技術記事をあげようと思ったのですが、ガキ使見ながらうまくコードをまとめられなさそうなので、今の気持ちとかを残しとくという意味も兼ねて振り返り記事くらいにしておきます。

Djangoのモデルであとからユニーク + NOT NULLな列を追加する

Djangoはモデルの内容が変更されても、makemigrationsしてmigrateすればDBにモデルの変更を反映できるので楽でいいですね。しかし、ちょっとユニーク制約をもったカラムを追加しようとしたら簡単にはいかないケースに遭遇したのでメモを残しておきます。

DjangoのあるModelを参照しているModelの一覧を取得する

ここのところDjangoを触り続けていてなかなか楽しいです。触っている中であるModelのオブジェクトを1つに統合する処理を書かなければいけなくなりました。そんなときに影響を受けるModelの洗い出しをどうするか調べたので残しておきます。

Pythonのunittestのmock.patchでハマった話(結局何をpatchすればいいのか)

最近のクローラ周りのunittestを書いていたのですが、テスト速度の改善や安定化のためにmockのpatchを使おうとして色々とハマったのでまとめておきます。

Raspberry Pi でトイレの使用状況をSlackに通知してみた(IOTT:Internet Of The Toilet)

Raspberry Pi と照度センサを使って、トイレの使用状況をSlackからわかるようにしてみました。 ※全部会社で買ってもらった(*´ω`*) 動機 職場は2フロアあり、下のフロアがオープンスペースになっていおりトイレもここにあります。私は上のフロアで仕事をして…

Pythonで一番小さいWEBフレームワークbottle.py その7(REQUEST DATA)

今回はREQUEST DATAのあたりを見ていきます。HTMLで作成したフォームの内容をサーバ側でどのように受取っていくかです。

Pythonで一番小さいWEBフレームワークbottle.py その6(COOKIES)

少し間が空いてしまいましたが、久々にbottleについてまとめていきます。今回はCookieあたりを見ていきます。

PythonからOracleに繋いでみる!その2 (sqlpylus(sqlplusではない)でOracleに繋いで見る)

この記事はJPOUG Advent Calendar 2017の3日目です。 さらに同日にもう1記事あげていますのでよろしければご覧ください。 本記事では、sqlpylusを使用してPythonからOracle DatabaseにSQLを発行する流れをご紹介します。 なお、sqlpylusはsqlplusの誤植では…

PythonからOracleに繋いでみる!その1 (cx_Oracleの簡単な使い方)

この記事はJPOUG Advent Calendar 2017の3日目です。 さらに同日にもう1記事あげていますのでよろしければご覧ください。 次の仕事ではOracleとかかわらなくなりますが、思い入れがありますのでエントリ書いておきます。 PythonからOracle DatabaseにSQLを発…

nginxでの静的ファイル配信時のキャッシュ(ETagやLast-Modifed)

ISUCON7の予選は、画像へのアクセスをいかに304で処理して帯域を節約できるかが肝でした。そこでnginxのETagやLast-Modified等の設定周りを見直してみます。

PyCharmのProでの機能有効化(JS構文チェックとDjangoプロジェクトの有効化)

いままでPyCharmのコミュニティエディション(CE)を使っていましたが、Djangoとかを書くならProがいいらしいのでとりあえず体験版で始めてみました。ちょっと気になったことや設定等をメモしていきます。

退職しました(DBエンジニアからPythonのWEBエンジニアへ転職しました)

新卒から7年間務めた会社を今年いっぱいで退職することにしました。11/22には最終出社をすませました。(引継ぎで忙しくてブログが1か月近く途絶えてました…) 次の職場も楽しみですが、やはり7年もいた会社にも思い入れはあり、いろいろ思うところがあるので…

Pythonでシンプルな文章の類似度判定をやってみた

会社の後輩に、社内のFAQの利用率を高めたいからなんとかしたいといわれ、自然言語の入力を受け付けて近いFAQのリンクを戻すコードを書いてみました。 後輩に説明しながらという点と元データも70件程度と少なかったことや、そもそも自分がちゃんと理解してな…

scouty 機械学習講習会 〜自然言語処理入門「Pythonでつくる言語モデル」〜 に参加してきた

ISUCONショックから1週間ほど更新が空いてしまいました。先日表題のイベントに参加してきたのでその備忘録です。 scouty.connpass.com

ISUCON7で惨敗してきました

先日ISUCON7に出場してきました。個人としては初めての参加でしたが、結果としては最高得点でも予選通過の20万に遠く及ばない、7万程度と振るいませんでした。 反省の意味も込めて感想を残します。 敗因 今回の予選は初の複数台構成でした。そのため、nginx…

WEBアプリケーションにおいて「あなたはどこにいますか?」(Flask, Bottleでのセッションデータの格納先)

WEBアプリケーションを作ると、ログインしているか?や買い物かごに何が入っているのか?といった状態を管理する必要があります。通常はセッション(session)データに格納しますが、そもそもこのセッションデータがどこにあるのかを調べました。

Redisの永続化とパフォーマンスのバランスを考えてみる(redis-pyを添えて)

ISUCONに関わって初めて真面目にRedisと向かい合ってます。RedisはオンメモリのKVSですが、デフォルトの設定では、再起動後もその内容が失われないように永続化されています。しかし、ISUCONというパフォーマンス重視の環境で永続化を考える場合、いくつか検…

Flaskで書かれたWEBアプリをBottleに書き換えるときの勘所

今週はISUCON7予選ですね。ここのところ毎回ですが今回もISUCON関連のネタです。ISUCONのPython実装はFlaskで作成されているケースが多いですが、これをBottleに書き換えるとパフォーマンスが上がるケースがあります。しかし書き換えにはいくつか注意点があ…

uWSGI caching frameworkを試してみる(PythonのWEBアプリケーションでのプロセス間情報共有)

今回はuWSGIのワーカプロセス間でキャッシュを共有できる、cache frameworkを試してみます。ISUCONをPythonで戦うとなると、大抵はRedisあたりだと思うのですが、それだと1プロセスで動作するGoやNode.jsに対してディスアドバンテージをもつことになるので、…

PythonでRedisを効率的に使う(redis-pyのパフォーマンスをあげるには)

前回書いたようにISHOCONというプライベートなISUCONに出てきました。MySQLの思いクエリをRedisに変えることでスコアは伸びたのですが、Redis自体もプロセスローカルのメモリに比べると遅いのでできるだけ効率的な使い方を模索しました。いつになく記事が長…

PythonでRedisを扱う(redis-pyの基本)

先日、ISUCONの練習としてISHOCONに参加してきました。ISUCONもそうですが初期実装のRDBMS部分をどれだけRedis等に移せるかでスコアの伸び方が違う気がします。少なくとも今回の問題はRedisを上手に使えるかが鍵です(少なくともPythonでは しかし、イマイチR…

Pythonのunittestで標準出力のテストを作る

最近やたらunittestを書いているのですが、標準出力部分のテストをしなければいけなくなり、やり方を確認したのでメモとして残します。 どういうことか こういう標準出力に内容を書き出す関数についてunittestを作成したかったという話です。 def hoge(): pr…