読者です 読者をやめる 読者になる 読者になる

ほんじゃら堂

めんどくさい仕事をラクにする作業自動化レシピ集

かるた遊びの相手をするのに疲れたのでWeb Speech Synthesis APIで自動読み上げツールにまかせる

f:id:piro_suke:20170104012805j:plain

正月休み、帰省した実家で娘たちがかるた遊びにハマり、

ほぼ毎日祖母やいとこと遊んでいた。

楽しそうだし、瞬発力やら記憶力やらが鍛えられそうで大変良い。

良いのだけど、

かるた遊びの困ったところは、プレイヤー以外に読み手が必要だというところで、

その際はだいたい近くで暇そうにダラダラしている人間(私)が呼ばれて参加させられる。

最初はこちらも娘達に相手をしてもらえるのが嬉しいので喜んで参加するのだけど、

毎回同じ内容を読み上げるので、何回かやっているとげんなりしてくる。

しかしダラダラしている手前、断るのも難しい。

そこで、「繰り返し作業は自動化や!」と

「テキスト読み上げ」でググったら出てきたWeb Speech Synthesis API を使って、

かるた自動読み上げツールを作ってみた。

続きを読む

Node.jsで非同期処理を不特定回数繰り返す方法をYouTubeのお気に入りタイトル一覧を取得するスクリプトを作りながら考える

f:id:piro_suke:20161212004436j:plain

YouTubeでお気に入りに入れた動画のタイトルを一覧化して見たくなったので、

YouTube Data API経由でデータを取得して表示するNode.jsスクリプトを作ってみた。

APIへのアクセス自体はサクッとできたのだけど、

複数ページデータを非同期で取得するフローのコントロールで苦労した。

Node.jsスクリプトを書く時は毎回このフローコントロールでつまづくのだけど、

慣れの問題なのだろうか。

今回はcaolan/asyncライブラリのおかげで何とか解決できた感じ。

async - Documentation

作成したスクリプトの内容を紹介しつつ、

非同期処理を不特定回数実行する際のパターンについて考えてみよう。

続きを読む

jQueryUIのsortableウィジェットでリストのソート順を管理する

f:id:piro_suke:20161207003918j:plain

例えば商品のランキングを手動で管理する場合、

商品データに並び順のようなものをつけてその順序で表示すると思うのだけど、

並び順を設定するUIをどのように作るのが良いか。

近いうちに作る機会がありそうなので、考えてみる。

ReactやVue.jsを使う機会はなさそうなので、jQueryベースで。

続きを読む

PostgreSQLのJSONB型カラム内のキーで一意制約&UPSERT

f:id:piro_suke:20161204023310j:plain

Node.jsとPostgreSQLを使ってるなら、

もうデータは全部JSON形式で管理した方が楽なんじゃないの、

ということでPostgreSQLのJSON型カラムについて色々調べている。

JSON/JSONB型カラムの基本的な使い方についてはちょっと前に書いた。

blog.honjala.net

今回はJSONB型カラムに一意制約をつけたり、

それを利用してUPSERT処理を行う方法について調べたことを書く。

続きを読む

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

f:id:piro_suke:20161202005524j:plain

PostgreSQLでUPSERT(データがあればUPDATEしてなければINSERT)する

方法について調べたところ、いくつか書き方があるようだ。

UPSERT処理で気になるのは同時実行された際に

重複登録されたり重複エラーが発生しないかどうかなので、

その観点で下記の4パターンの方法を検証してみる。

  1. UPDATEしてNOT FOUNDならINSERT
  2. CTEでUPDATEしてNOT EXISTSならINSERT
  3. INSERT ON CONFLICT DO UPDATE
  4. INSERTしてUNIQUE_VIOLATION EXCEPTIONならUPDATE
続きを読む

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

f:id:piro_suke:20161119021025j:plain

昨日書いた下記記事の続き。

blog.honjala.net

全角半角大文字小文字ひらがなカタカナを区別せず高速検索できるようには

なったのだけど、肝心のlike検索でインデックスが使えず

遅いままだったので、pg_bigmを導入してこれを解決する。

pg_bigmは簡単に言うと日本語の中間一致like検索でインデックスを

使えるようにしてくれるPostgreSQL用モジュール。

本家サイトはこちら:

pg_bigm

続きを読む

PostgreSQLで全角半角大文字小文字ひらがなカタカナを区別せず検索する

f:id:piro_suke:20161118011707j:plain

仕事で必要となったので調査してみた。

こういった区別なし検索を実装する方法としてパッと思いつくのは、

あらかじめ検索対象となるカラムの検索用カラムを用意して、

データ変更時にトリガーで

元カラムの内容を半角小文字英数字カタカナに変換したデータが入るようにしておき、

検索時はその検索用カラムを使用する、という方法。

これはめんどくさそうだ。

続きを読む