ほんじゃら堂

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

子どもの塗り絵にするために写真を線画化してみたら、むしろ大人向けな味のあるものができた

小学校にあがった娘が、 「もうお子様向けのぬりえでは満足できません」 というので、 写真を線画化して細かくてリアルな塗り絵を作ってみたら、 超上手なデッサンみたいな画像ができた。

効率的にやせるために栄養について理解するために栄養素データで遊ぶ

太り過ぎでそろそろ家族の冷たい視線と容赦ない言葉に耐えられなくなってきたので、 ダイエットに真剣に取り組みたい。 ダイエットといえば「食事のバランス」と「適度な運動」だけど、 おそらく日々の食事の方が体重への影響は大きいだろう、 ということで…

お絵かきおもちゃ「Etch-A-Sketch」があまりにも懐かしかったので操作感を再現するためにWeb版を作った

小さい頃に気に入って遊んでたあのお絵かきおもちゃ、 なんだったかな、 と思って検索したら「Etch-A-Sketch」という製品だった。 Ohio Art Classic Etch A Sketch Magic Screen出版社/メーカー: Ohio Artメディア: おもちゃ&ホビーこの商品を含むブログを…

いちいちExcelを開くのがつらいのでCSVファイルのカラムを揃えて見やすく出力してくれるスクリプトをつくる

仕事でCSVファイルのやりとりをすることが多い。 CSVファイルというのは、Excelで開くと見やすいのだけど、 普通にテキストエディタやCUI環境で開くと結構見づらい。 そして、Linuxで作業してる時なんかにいちいちファイルを ダウンロードしてExcelを開くの…

デザイナーとプログラマのわがままに応えて、テンプレートエンジンから生成されたHTMLファイルを元の部品ファイルに分割するツールを作る

Webアプリを開発する際、 最近の多くのテンプレートエンジンはHTMLをレイアウトや部品に分割して作成し、 それをextendしたりincludeしたりして1つのHTMLとして出力できるようになっている。 部品化することで、ヘッダーとかメニューとかフッターとか、 複数…

Web Speech Synthesis APIを使って、正月のかるた読み上げ無間地獄タスクを自動化する

正月休み、帰省した実家で娘たちがかるた遊びにハマり、 ほぼ毎日祖母やいとこと遊んでいた。 楽しそうだし、瞬発力やら記憶力やらが鍛えられそうで大変良い。 大変良いのだけど、 かるた遊びの困ったところは、プレイヤー以外に読み手が必要だというところ…

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

YouTubeでお気に入りに入れた動画のタイトルを一覧化して見たくなったので、 YouTube Data API経由でデータを取得して表示するNode.jsスクリプトを作ってみた。 APIへのアクセス自体はサクッとできたのだけど、 複数ページデータを非同期で取得するフローの…

jQueryUIのsortableウィジェットを使ってアイテムの並び順を管理するUIを作成する方法

例えば商品のランキングを手動で管理する場合、 商品データに並び順のようなものをつけてその順序で表示すると思うのだけど、 並び順を設定するUIをどのように作るのが良いか。 近いうちに作る機会がありそうなので、考えてみる。 ReactやVue.jsを使う機会は…

PostgreSQLのJSONB型カラム内のキーにユニーク制約をつけてUPSERTする方法

Node.jsとPostgreSQLを使ってるなら、 もうデータは全部JSON形式で管理した方が楽なんじゃないの、 ということでPostgreSQLのJSON型カラムについて色々調べている。 JSON/JSONB型カラムの基本的な使い方についてはちょっと前に書いた。 blog.honjala.net 今…

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とは、 「配慮ある無関心」「思いやりある無視」 「相手のことを考えて見て見ぬふりをする」などと訳せる言葉で、 使ったことはないけど、おそらく 隣りにいる人がコーヒーを吹き出すとか、 ちょっとした失敗をした時に気づかないふりをして…

既存の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出力する機能ありませんでしたっけ?」 と確認しても「しらん。やれ。」と言われる。 そんなよくある状況で助け…