ほんじゃらねっと

食と自転車とダイエットとたまにプログラミング

PostgreSQLでのUPSERT(INSERT or UPDATE)処理を検証する

PostgreSQLでUPSERT(データがあればUPDATEしてなければINSERT)する 方法について調べたところ、いくつか書き方があるようだ。 UPSERT処理で気になるのは同時実行された際に 重複登録されたり重複エラーが発生しないかどうかなので、 その観点で下記の4パタ…

PostgreSQLでpg_bigmを使って中間一致like検索を高速化する

昨日書いた下記記事の続き。 blog.honjala.net 全角半角大文字小文字ひらがなカタカナを区別せず高速検索できるようには なったのだけど、肝心のlike検索でインデックスが使えず 遅いままだったので、pg_bigmを導入してこれを解決する。 pg_bigmは簡単に言う…

PostgreSQLで全角半角大文字小文字ひらがなカタカナを区別せず検索したい!というよくあるわがままに応える

したいしたい!絶対したい!と駄々をこねられたので調査してみた。 こういった区別なし検索を実装する方法としてパッと思いつくのは、 あらかじめ検索対象となるカラムの検索用カラムを用意して、 データ変更時にトリガーで 元カラムの内容を半角小文字英数…

PostgreSQLでテスト用組み合わせパターンデータを一括生成する

先日書いたgenerate_series関数を使用したテストデータ生成の続き。 blog.honjala.net どうせテストデータを作成するなら、 連番だけでなく、必要なパターンの組み合わせデータを生成したい。 ちょっと前にPythonやClojureを使った組み合わせデータ作成のス…

JSONB型カラムでPostgreSQLをNoSQL風にスキーマレスに使う方法

PostgreSQL9.2以降のバージョンではjson型/jsonb型カラムが使える。 ちょっと特殊な記法を使うけど、 json/jsonbデータ内のキーをDBのカラムと同様に使えるようになるので、 スキーマレスDBのように同じテーブル内のレコードで 異なるデータ構成を持たせるこ…

PostgreSQLのgenerate_series関数でテスト用データを作成する

これまでテスト用にたくさんデータを作成する時は、 PythonやらNode.jsやらでプログラムを書いてた。 blog.honjala.net PostgreSQLならgenerate_seriesという連続値生成関数を利用することで SQLだけで手軽にデータ生成できる、ということを発見したので、 …

PostgresqlのSELECT句での関数呼び出し順序を確認した

チーム内の雑談で、 Delete-Insert処理を1つのSQL文で行うとしたら、 SELECT文のSELECT句でDELETE用SPとINSERT用SPを呼び出す方法もあるよね、 SELECT句って記述順に実行してくれるのかな? みたいな話になったので、検証してみた。

自動化のための「トリガー」について考える

何かしらの作業を自動化する際、 その作業を起動する「きっかけ(イベント)」を何にするかを考える必要がある。 例えば定期的に実行するなら、「曜日」や「時間」がきっかけになるし、 自分が実行したい時に実行するなら(それを自動化と呼ぶかどうかはさて…

イギリス帰りの友人から教えてもらった「polite ignorance」という言葉

学生時代にイギリス帰りの友人から「Polite Ignorance」という言葉を教えてもらったことがあります。 今調べてみるとこの2語を組み合わせた言葉としての説明は見つけられなかったので自分なりに解釈しますと、「上品な」「思いやりある」という意味の「polit…

既存のMarkdownファイルをreStructuredTextに(ざっくりと)変換する

新しいプロジェクトを開始するにあたり、 ExcelやめてSphinx + reStructuredTextでドキュメント作るようにしません? という提案をしてみたら、意外とすんなり通った。 概要 — Sphinx 1.5.6 ドキュメント reStructuredText入門 — Sphinx 1.5.6 ドキュメント …

エディタ浮気性の自分のための、Vimから他のエディタに乗り換えたくなった時にチェックするポイント

ライトな言語で開発する時とか、文章を書く時は テキストエディタとしてVim(KaoriYaさんのWindows版Vim)を長く使用している。 www.kaoriya.net 根が浮気症なので Spacemacs+EmacsとかSublimeTextとかAtomとかLightTableとか 話題になったエディタには 「これ…

昨日食べたものも思い出せなくなってきたおっさん(自分)のために食事履歴記録アプリをつくった

おじさんになると、 よっぽど興味を持ったこと以外はすぐに忘れてしまうようだ。 忘れるというよりも、覚えてるけどうまく思い出せない、というべきか。 今週ランチで食べたものを思い出してみようとしても、 昨日のメニューすらなかなか出てこないことがあ…

プログラムテスト用の組み合わせパターンデータをササッと作るためのテンプレ【Python/Clojure】

他の誰かが作成した検索プログラムやストアドファンクションを 修正させられる時に、 検索対象のテストデータとか プログラムに渡す検索パラメータのテスト用データを 必要なパターン分作成してテストするのだけど、 抜け漏れのないテストデータを簡単に生成…

Windows/Linuxでディスクがいっぱいになった時に、フォルダ毎に使用している容量を確認する方法

PCやサーバの容量がなくなる、というのは案外よくあるもので、 年に1回くらいそんな事態に遭遇しては、 どのフォルダ・ファイルが容量を圧迫してるんだ! 容量を調べるためのコマンドなんだっけ? とコマンドを探したりツールを探したりする。 なので、自分…

忙しいけど映画は観たい人のために、テレビ映画放映情報チェックして通知してくれるスクリプト

映画鑑賞は割と好きなのだけど、 なかなか映画館にはいけないし、 DVDを借りてもレンタル中に観る時間が取れるとは限らないし、 ということでもっぱらテレビで面白そうな映画をやってたら録画して 時間のある時に観ている。 しかしそうそうテレビ欄をチェッ…

はてなカウンターのログを分析できるようにデータベースに取り込むスクリプト【Python/Clojure】

はてなカウンターの「ログ」画面で ログを月単位でダウンロードできることを発見したので、 ダウンロードしたログを分析用にデータベースに保存するスクリプトを作成する。

Node.jsがES5とES6(ES2015)に対応してることに今さら気づいて、使ってみたら感動した新要素

Pythonを堪能したのでJavascriptに戻ってきた。 JavascriptでPythonのジェネレータみたいな機能はないのかな、 と調べてみると、ES6(ES2015)で追加され、Node.jsはES6対応済みらしい。 そういえばES5もES6もよく調べたことないな、と思って 調べてみると、便…

Pythonのジェネレータを使って大容量ファイルを分割する

過去に下記のような、ファイルを複数に分割する方法について記事を書いた: blog.honjala.net この記事に書いたコードをもう少しエレガントに書けないものか、 と方法を調べていて、 Pythonのジェネレータが使えそうだったので色々試してみた。

PythonでSSHトンネリングしてデータベースアクセス

稼働中のWebアプリのデータベースに定期的にアクセスして データの状態をチェックしたい、でもデータベースには 外部から直アクセスできないようになっているので、 SSHトンネル経由でないとアクセスできない、という場合。 A5:SQLなりpgAdminなり最近のDBア…

Pythonでgrep風にディレクトリ内のファイルを検索する方法(Python3対応&機能追加版)

だいぶ前に書いた下記の記事 blog.honjala.net の内容がPython3で動かないようなので、 Python3対応しつつ、もう少し使えるように書きなおしてみる。

SQL Serverから出力したrptファイルを使いやすいようにcsvファイルに変換する【Python】

SQL Serverからエクスポートしたrpt形式ファイルを渡され、 CSVに変換してくれと依頼される。 「あれ、SQL Server Management Studioに 直接CSV出力する機能ありませんでしたっけ?」 と確認しても「しらん。やれ。」と言われる。 そんなよくある状況で助け…

ボケてきたのかタイムカードの打刻を忘れてしまうので、打刻漏れ防止用チェックプログラムを作成した

毎朝出社時に社員カードで入室し、 入室したのと同じカードで出勤打刻をするのだが、 入って数歩のところにタイムレコーダーが置いてあるにも関わらず、 打刻が漏れることがある。 どうやら、 雨の日に途中で傘を置いたり(傘立てはドアとタイムレコーダーの…

PostgreSQLにサクッとテストデータを登録するPythonテンプレ

Python手軽でいいね、ってことで 最近はJavascriptよりもPythonでスクリプトを書いている。 今日もパフォーマンステスト用に大量データを登録する必要があったので SQLAlchemyを使ってスクリプトを書いてみた。 Python3で動作確認済み。

iPythonでコマンド履歴ログ出力を自動化する

たまにはPythonを使っておこう、 ということでここ数日シェル環境としてiPythonを使っている。 Jupyter and the future of IPython — IPython ほぼPython言語としての機能は使っていないのだけど、 ちょっとした計算をしたりするにはなかなか便利だ。 せっか…

Node.jsでメモリを使い切らずに大容量ファイルを読み込んでデータベースに登録する方法

サーバが重いけどどこを直せばよいか分からないから調査してくれー、と Tomcatのでかいアクセスログファイルを渡されたので、 とりあえずデータベースに入れて調査してみるべ、と ログファイルの内容ををデータベースに取り込むスクリプトを書いてみた。 Nod…

便利なリスト・マップ操作関数を提供してくれるUnderscore.js を使ってJavascriptで文字別出現回数を数えるスクリプトを作成する

Javascriptライブラリの中でも、 Underscore.jsが大変気に入っている。 Underscore.js each、filter、map、reduce等 リスト操作、マップ操作関連の関数が 100以上含まれたユーティリティライブラリで、 他の言語にあってJavascriptにもあったらいいのにな、 …

Node.jsでWebサイトの更新チェックを自動化する

特定のWebサイトを定期的にチェックして特定のキーワードが含まれていたら 通知してくれる仕組みを1つ覚えておくと色々重宝する。 例えば 会社に社員用Webサイトがあるなら、 (そしてそのサイトがRSSもメール通知も提供してないなら) そこに「重要」とか「…

WindowsのタスクスケジューラからGruntスクリプトを起動する方法

どうせ自動化するなら完全自動化したいよね、 ということで今回は作成したGruntスクリプトを Windowsの起動時や毎日の決まった時間に実行できるように タスクスケジューラに登録する方法を紹介する。 この記事はGruntを実行する環境が整っていることを前提と…

一日使い続けるだけで通信速度が低下する古いルーターを毎日再起動させるNode.jsスクリプト

先日iPad miniとiPhone 6sを導入してから、 うちの古いルーターが2日間隔くらいで再起動しないと 通信が遅くなってネットに繋がらなくなるようになった。 どうやら新しいiPadとiPhoneはWi-fi環境だとガシガシ通信するようで、 ルーターのキャパをすぐに超え…

Node.jsとGruntでフォルダ監視ツールを作る

コミュニケーションというのはなかなか難しいもので、 「急いで確認したいから資料ができたら共有フォルダに入れて、すぐ連絡してよ」 と強めに伝えても、 資料はとっくにできてるのに やれ後で連絡するつもりだっただの、 もうちょっと確認してから連絡する…