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

ほんじゃら堂

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

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

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

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

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

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

例えば商品のランキングを手動で管理する場合、 商品データに並び順のようなものをつけてその順序で表示すると思うのだけど、 並び順を設定する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をスキーマレスに使ってみる

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句って記述順に実行してくれるのかな? みたいな話になったので、検証してみた。

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

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

MarkdownファイルをreStructuredTextに変換する

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

Vimから他のエディタに乗り換えたくなった時にみるべきポイント

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

昨日食べたものも思い出せなくなってきたので食事履歴記録アプリをつくる

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

テスト用に組み合わせパターンデータを生成する

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

指定フォルダ以下のファイルとフォルダのサイズを一覧表示する

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

テレビの映画放映情報を定期的にチェックする

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

はてなカウンターのログをデータベースに取り込む

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

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

【Python】打刻漏れ防止用に出勤チェックスクリプトを作成する

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

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ライブラリの中でも、 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でフォルダ監視ツールを作る

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

プログラムを「読む」スキルを身につける

会社の新入社員研修の事を考えていてふと思いついた。 社内で何がしかの開発を行っている場合、 全員がプログラマになるわけではない場合でも 一通りプログラムの基礎を身につけておこう、と新人研修に プログラミング研修が含まれていることがある。 そこで…

【Windows】フォルダ内のファイル名一覧を簡単に作成する方法

教えてあげたら喜ばれたので、 1つの作業効率化方法として書いておく。 資料を作成する際、特定のフォルダに入っているファイルの一覧を Excelに貼り付けたりしたい場合がある。 しかし、エクスプローラではファイル一覧を見ることはできるが、 それをそのま…

正規表現を学びつつ簡易なファイル名一括変換ツールを作る

文字列を検索したりマッチしたものを置換したり、という作業は 技術者が制作・開発する時だけでなく、例えばExcelやWordで文書を編集する際や Webページ内で目的の文章を探したりする場合にも行うもので、 「作業の効率化」という点では欠かせないものだ。 …

Grunt.jsでノンプログラミングな作業自動化に挑戦

前回書いたNode.js入門記事の続き。 blog.honjala.net 前回から引き続き、 いかにプログラムの勉強無しで自動化できることを増やすか、 もとい、 いかに他部署のノンプログラマに自動化ツールを使わせて自分への作業依頼を減らすか、 をマイテーマに少しずつ…

作業自動化のための Node.js 入門

これまでいくつかの記事でNode.jsを使ったスクリプトを載せてきたが、 自動化のためのスクリプトを書いて動かす環境として Node.jsは手軽だし速いし色々ライブラリは揃ってきているし なかなか良い環境だと感じている。 Web系の仕事をしていればJavascriptは…

フリーの帳票デザインツールJasperReportsで楽々PDF生成【Java】

ついこないだまでJavaでのPDF出力にはpdfboxを使っていて、 なんでPDF文書作成っつーのはこんな大変なんだ! いちいち座標で指定させるんじゃねー! PDF出力嫌い!大嫌い! となっていたのだが、JasperReportsと出会って変わった。 何とJasperReportsを使う…

データベースマイグレーション用にJava製ツール「flyway」を導入する

新しいチームでデータベースマイグレーションの仕組みが決まっていなかったので、flywayを導入してみた。 結論としては手軽で十分使えそう。 データベースマイグレーションとは 本来のマイグレーションの意味とは異なるかもしれないが、 データベースマイグ…

IFTTTのMakerチャンネルを使っていろんなサービスの更新情報をチャットワークで通知する仕組みを作る

仕事でチーム間のコミュニケーションツールとして使い始めたチャットワークだが、 最近は「いろんなサービスやスクリプトからの通知を集めるツール」としての利用がメインになってきている。 www.chatwork.com 以前記事にした、 「Subversionのコミット情報…

Node.jsでドメインのはてなブックマーク合計件数を取得する

ブログを書いていると、 自分が書いた記事にどれくらいブックマークがついているかが 気になるものである。 はてなブログでブログを管理している場合は、 ブログ管理画面や「はてなのお知らせ」というChrome拡張で ブックマークされたことを知ることができる…

ClojureでMapの内容をコンバートしたい時はforで回してできたリストをintoでMapに再変換する

Mapの内容をコンバートする方法を調べてたら、StackOverflowで良い方法を見つけた。 stackoverflow.com Mapのキーをキーワード化する時の方法についての相談で、下記のようなintoとforを使った方法が紹介されてた。 (into {} (for [[k v] my-map] [(keyword …

ClojureでExcelからPostgreSQLにデータを取り込む

Clojureの練習を兼ねて、Excelでデータを編集して簡単にデータベースに 反映できるLeiningenアプリケーションを作ってみました。 pirosuke/clj-xlsx2db データベース操作にはKormaを使ってるのですが、 使いやすくて気に入ってます。 使い方 コマンドを指定…

Twitter APIでタイムラインを分析してブログ投稿に最適な時間を見つける

最近記事を予約投稿するということを覚えたので、 せっかくだからたくさんのユーザーに見てもらえる時間に投稿したい、 ということで調べてみました。 このブログは記事を投稿した時に自分のTwitterタイムラインにリンクを ツイートするようになっているので…

ClojureでHTML以外に対応したテンプレートエンジンを探す

Clojure始めました。 ちょっとしたスクリプトを作成しながら勉強中です。 最初にClojureで書かれたソースを見たときは 「このカッコ地獄には絶対慣れない」 と思いましたが、 書いているうちにカッコのおかげで処理や変数の範囲が明確に なっていることに気…

Pythonでオブジェクトから階層ごとに属性があるかチェックせずに値を取得するための関数

AmazonのAPIを触っていて、レスポンスとして返ってきた(XMLから生成された)オブジェクトから値を取得する際にいちいちhasattrでチェックするのが面倒だったので、そのパスがなければデフォルト値を返す関数を作った。 見つけられなかったけど、標準ライブ…

PythonでExcelの表からINSERT用SQLを生成して初期データ作成を楽にする

職場はメイン言語がJavaなので、プロジェクトでPythonを使う機会は ないのですが、キャプチャを撮ったりExcelを操作したりする作業を 「こっそり自動化」するスクリプトをPythonで書いたりしています。 最近はSE作業で何かとExcelを使うことが多いので、 Exc…

Python+ScrapyでWeb上のリストからデータを抽出する

昨日の続きでScrapyをさわる。 ちなみに、昨日Linux環境にインストールする時は苦労したが、 今日Windows環境にpipでScrapyをインストールしてみたら、 何ひとつひっかからずにインストールが完了した。 ともあれ、ようやくScrapyをインストールできたので、…

CentOSのPython2.7環境にScrapyをインストールするまで

ひとつPythonでWebスクレイピングでもやってみようかとScrapyをVPS環境に入れてみたところ、インストールするだけで手間取ってしまった。 環境はPython2.7.3で、インストールしてから特に何も設定していない状態。 本サイトに書いてある通り、まずは pip ins…