ほんじゃーねっと

おっさんがやせたがったり食べたがったりする日常エッセイ

プログラミング

RustとVueで百人一首特訓Webアプリを作る

たまに親子で百人一首で遊ぶのですが、最近長女がメキメキ力をつけてきてなかなか勝てなくなりました。 遊んでいるだけでどんどん歌を記憶していける小学生に記憶力の衰え始めたおっさんが勝つにはこっそり特訓する必要がありそうです。 そんなわけで和歌を…

SlackをGo製ツールのGUIフロントエンドとして使う(#2: データの変更と削除)

Slackを自作ツールのフロントエンドとして使う、というテーマで書いた下記の記事の続きです。 blog.honjala.net 前回はSlack上で飲んだものと飲んだ量を登録する「水分摂取量記録アプリ」を作りながら、Slack APIの「ショートカット」「モーダル」を使ったボ…

SlackをGo製ツールのGUIフロントエンドとして使う(#1: データの登録と表示)

ブラウザで操作できるツールを作りたいけどWebのフロントエンド作るの面倒だな...とWeb系開発者にあるまじき事を考えつつ良いプラットフォームを探していたら、SlackのAPIが進化してツールフロントエンド化するのにうってつけの機能が増えているのを見つけま…

PostgreSQLのプリペアド文とパラメータに分かれたスロークエリログを実行可能なSQLファイルに分割する

PostgreSQLのスロークエリログはパフォーマンス調査する際に必ずと言っていいほどよく利用するものですが、Java等のデータベースライブラリ経由で出力されるクエリはプリペアド文とパラメータに分かれて出力されるため、そのままコピペして実行して確認する…

node.jsがやたら非同期化しようとするのをasync/awaitでどうにか同期化する

Node.jsは入出力関連の処理を非同期で行ないます。入出力イベントが非同期で実行されることで、遅い入出力処理の合間に他の処理を挟んで効率的にプログラムを実行することができます。この特長を活かすため、ライブラリに含まれる関数も非同期的に実行される…

OpenCV.jsでインストール不要な画像ぬりえ化ツールをつくる

OpenCV、インストール難しすぎじゃね? 前回の記事で blog.honjala.net Node.jsでOpenCVを使うことに成功したわけですが、 OpenCVはとにかくインストールでうまくいかないことが多くて、 Macでどうにかうまく動いてもLinuxにインストールしようとすると また…

OpenCV + Node.js で画像からぬりえ用の線画をつくる

画像処理で遊びたいな、と思い立ったので、 以前PythonとOpenCVで作成した画像線画化スクリプトを Node.jsで作成しなおしてみました。 blog.honjala.net OpenCVはPythonと使うのがやはり一番使いやすいのですが、 Javascript用APIも提供されているので、 Web…

WebアプリとWebサーバをセットにした「ポータブルなWebアプリ」という形でソフトウェアを配布する

先日書いたツールのGUI化に関する記事で blog.honjala.net Electronやcarloを使ったデスクトップアプリ化について紹介したあとで ちょっと考えていた時のこと。 carloのようにUI機能を持たずに インストールされているChromeを使うのがアリならば、 もう思い…

Node.jsで作成した自動化プログラムをGUI化してより多くの人に役立ててもらおう

プログラマの仕事は、人が行う作業を代わりに行なってくれるプログラムを書くことであり、それはつまるところ「作業を自動化」することだ。 長くプログラマをやってると忘れちゃうけど、 コマンドプロンプトを開いてコマンドを実行するのは、 プログラマ以外…

マインクラフトBE (Win10版)をNode.jsで自動操作する

子どもたちがマインクラフト(iOS版)にはまっており、一緒に遊んだりしている。 クリエイティブモードで一緒にわーわー言いながら街や建物を作るのはなかなか楽しい。 楽しいのだけど、 ちまちまブロックを置いていくのはそろそろ飽きてきたので、 ビャーっと…

Node.jsでSQLServerにWindows認証接続する

苦労したのでメモ。 Node.jsでのデータベース操作にはいつもknexを使用していて、 Knex.js - A SQL Query Builder for Javascript knexはSQLServerにも対応しているのだけど、 そこで使用されているmssqlパッケージがWindows認証には対応していないのか、 う…

作成した Node.js スクリプトをサーバーレスな AWS Lambda で手軽に定期実行する

以前作成した映画情報取得用スクリプトのように blog.honjala.net 定期的に実行したいスクリプトを作成した場合、 そのスクリプトをどこで動かすか、というのが悩みどころになる。 いくつか方法はあるのだけど、 ローカルのPCでタスクスケジューラなりcronな…

「 Javascript / Node.js で仕事自動化」記事まとめ

Javascript と Node.js を使ってあれこれ自動化する記事が増えてきたので、 目次としてまとめておく。 blog.honjala.net blog.honjala.net

Node.jsでテレビの映画放映情報をWebスクレイピングしてSlackに通知する

最近素晴らしいことに家族内でSlackを使ってやりとりするようになった。 せっかくなので何かボット的なものを作ろう、ということで 昔Clojureで作った、 「映画情報をスクレイピングして通知する」スクリプトのNode.js版を作って、 定期的にSlackに通知する…

Windowsでタスクスケジューラを使用せずにnode.jsスクリプトを定期実行する

会社の自分のPC(Windows)で何かを定期的に実行したいときは だいたいPythonなりnode.jsなりでスクリプトを書いて タスクスケジューラに登録しておく。 のだけど、 タスクスケジューラは未ログイン時に実行しようとすると ログインアカウントを登録しておく必…

Vue.js + SVG でブロック崩しゲーム(自動版)を作る

数当てゲーム、マインスイーパーに続き、Vue.jsでこども向けゲームを作る。 もう少し動きのあるゲームが作ってみたいので、 今回はボールが跳ね回るブロック崩しゲームに挑戦する。 これまでに作ったゲームは初期処理で何か答えを生成しておいて、 あとはユ…

node.jsでWebスクレイピングして取得データを保存する

node.jsでデータ収集のためのWebスクレイピングを行う。 Webスクレイピングの流れというのはだいたい決まっていて、 WebページにアクセスしてHTMLを取得する 取得したHTMLの中から必要なデータを抽出する 抽出したデータを保存する の3段階となる。

node.jsでリモートのLinux環境やデータベースの操作を自動化する

ぼくが仕事でLinuxサーバ環境に接続して行う操作というのはだいたい決まっていて、 コマンドでサーバの状態を確認 ログをファイル出力してダウンロード サービスの設定変更と再起動 SSHトンネル経由でDBアクセス のうちどれかを行うことが多い。 基本は手作…

Vue.js + SVG でヌメロン風数当てゲームをつくる

Vue.jsでこども用ゲーム作成シリーズ第3弾。 前回作ったマインスイーパーは、ゲームルール自体の中毒性のおかげか、 たまにプレイしてくれてるようで作った甲斐があった。 blog.honjala.net 飽きないうちに次のゲームを作成しておこう、ということで 今回は…

Vue.js + SVG でマインスイーパーもどきをつくる

前回作った数当てゲームがこどもに好評だったので、 blog.honjala.net 次はもう少し複雑なマインスイーパー作成に挑んでみた。 数当てゲームはシンプルすぎて2秒で飽きられたけど、 マインスイーパーならしばらく遊んでくれるにちがいない。 今回は前回使っ…

数当てゲームを作る(Vue.js + Vuex + TypeScriptに挑戦)

料理人の子がパパにおいしい料理を作ってもらえるように、 うちの子も何がしかプログラマの子としてのメリットを受けて然るべきではないか、 と急に思い立ち、子供用のゲームを色々作ってあげよう! と燃えてきたので、すぐ作れそうな「数当てゲーム」を作っ…

Java/Pythonプログラマの自分が今からC#を学ぶ価値があるかどうかを検討する

WindowsのGUIアプリとして作りたいものがいくつかあって、 PythonのGUIライブラリを いくつか(PyQtとかwxPythonとかKivyとか)試してみたけどしっくりこず、 やっぱりWindows用アプリを作るなら.NETじゃない? ということでC#での開発について調べている。 …

お絵かきおもちゃ「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パタ…