ほんじゃらねっと

ダイエット中プログラマのブログ

nodejs

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

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

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でWebスクレイピングして取得データを保存する

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

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

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

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

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

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

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

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もメール通知も提供してないなら) そこに「重要」とか「…

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

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

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

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

正規表現を使ったエレガントな置換処理を学びつつ簡易なファイル名一括変換ツールを作る

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

プログラミングはしたくないけど自動化はしたい人のための、Grunt.jsによる作業自動化入門

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

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

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

IFTTTのMakerチャンネルを使って、いろんなサービスの更新情報を通知してくれる仕組みを作る

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

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

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

Subversionにコミットしたらチャットワークに通知するNode.jsスクリプト

ある開発プロジェクトで、 非技術系のメンバーにも進捗を知っておいてもらいたいものの、 「お前らSubversion入れろ」とか「リポジトリログを見ろ」といっても見そうになく、 いちいち伝えるのも面倒大変そうだったので、 Subversionにコミットがあったらメ…

Node.jsでWebページのレスポンス時間をチェックする

個人的にNode.jsを習得しようと色々調べてた時に 仕事でWebアプリの速度改善の依頼が飛び込んできたので、 Node.jsでHTTPリクエストのレスポンス時間をチェックしたい時は どう書くのかな、と調べてみた。

Node.jsでRedmineのREST APIにアクセスしてチケット取得&一括登録

とあるWeb開発プロジェクトで WBS(Excel製)に書かれた、機能ごとの開発担当・開始日・期日・予定工数を そのままRedmineのチケットとして登録するという、 手作業でやったらえらく時間のかかりそうな作業があったので、 RedmineのAPI経由でチケットを一括登…

Node.jsのRESTクライアントモジュールでBit.lyのAPIにアクセスする

Node.jsのRESTクライアントモジュールを試すため、 以前Groovyで作成したBit.lyの履歴を取得するスクリプトをNode.jsで焼きなおしてみる。 「node-rest-client」というモジュールを使用した。 get_bitlinks.js var RestClient = require('node-rest-client')…

MongoDBに保存したデータをNode.js+ExpressでWeb表示する簡単なサンプル

そろそろNode.jsスクリプト作成にも慣れてきたので、 簡単なWebアプリ作成に挑戦してみた。 Meteor、MEAN.js、Sails.jsなど色々あって迷ったけど、 まずはシンプルにExpressを使ってみる。 MongoDBコレクションに保存された情報を Webページ上に一覧表示する…

ApacheのアクセスログをMongoDBコレクションにインポートするNode.jsスクリプト

MongoDBの勉強を兼ねて、Apacheのアクセスログを後でログ分析や ビジュアライズに使えるようにMongoDBにインポートするスクリプトを書いた。 下記のスクリプトはログファイルを行単位で読み込んでMongoDBの 特定のコレクションに登録する。 行単位のファイル…

Javascript(node.js)でExcelのシート一覧を出力する

node.jsはWindowsでもLinuxでも同じスクリプトが そこそこ安定して動くので嬉しい。 今回は、ExcelJSモジュールを使って、 Excelのシート一覧を出力するスクリプトを書いた。 リダイレクトでファイルに出力できる。 簡単なスクリプトだけど、こういうものを…

Node.jsとwebshotパッケージでWebサイトのスクリーンショットリスト作成を自動化する

Web開発を仕事にしていると 「マニュアルやプレゼンに使うのでWebアプリのスクリーンショットをくれ」 と依頼されることがよくある。 ChromeのFireshotのようなブラウザの拡張機能を使ったりすれば 1画面ずつ撮っていけるのだけど、 chrome.google.com たく…

treeコマンドで出力したJSONをExcelで階層表示できるように変換する

あるプロジェクトのソース分析を行う必要があったので、 まずはソースファイルの一覧をExcelに出力してみることにした。 treeコマンドがいい感じで階層出力してくれるのだけど、 それをそのままExcelに持っていくと文字化けするので、 treeコマンドから一旦J…