- 1. 画像に対して顔検出を行いマスクする(opencv/opencv4nodejs/Node.js)
- 2. なぜ僕たちはサーバレスでJavaを諦めTypescriptを採用したか
- 3. Docker 環境で nodemon が watch してくれない問題と対処方法
- 4. UbuntuでNode.jsとExpressの環境を作る
- 5. react-native のMetro bundlerでNodeエラーが出るときの対処
- 6. ubuntu18.04でnpm testを使いava実行すると「SyntaxError: Unexpected token {」エラーが出てしまうときの解決方法
- 7. JavascriptのDate.prototype.toString()系まとめ
- 8. Hueを使って照明の色で天気予報を認識する
- 9. Elixirのノード、プロセス間通信
- 10. S3にCSVファイルがアップロードされるとLambdaがDynamoDBへデータを挿入します
- 11. Node.jsで常時フォルダを監視してS3へファイルをアップロードする
- 12. Node.jsでhtmlのlinkタグなどから外部ファイルを読み込めないときの解決法
- 13. Node.jsでYYYYMMDDの文字列を出力する
- 14. Firebase CloudFunctions x TypeScript をデバッグしながらHotDeploy
- 15. [Node.js]フォルダを配下のファイルも含めて一括削除する(since 2019)
- 16. package.jsonで環境変数(NODE_ENV)を設定するとき、WindowsでもLinux,Macでも動くようにする
- 17. Fn Projectを使ってJavaScriptで書いたfunctionを動かしてみる
- 18. SYMFONISK(Sonosランプ)とTRADFRIライトを連携させてみた。
- 19. エンジニア向けSNSアプリを孤独にフルスクラッチした時の技術要素とか苦労話とか
- 20. iPadだけでCloud9開発環境を構築してみた話
画像に対して顔検出を行いマスクする(opencv/opencv4nodejs/Node.js)
# 動機
インカメラで人物や顔写真入り証明書を撮影したエビデンス画像に対して、顔部分のマスクを行うツールを作成したかった。# 言語選定
画像処理ライブラリ [opencv](https://opencv.org/) の対応言語は `C/C++` `Java` `Python` です。
今回の動機であるツール的に用いるならば、Pythonが適していると思います。サンプルコードもたくさんあります。しかし、自分がPythonに対する知識が少なく、時間がかかりそうで逡巡していました。
しかし、opencv を Node.js 環境から使えるライブラリ[opencv4nodejs](https://www.npmjs.com/package/opencv4nodejs)を見つけたので、試してみることにしました。## 落とし穴
opencv4nodejsはopencvの型やメソッドと全く同じ名称ではなく、Javasciptの言語仕様に合わせて引数なども異なります。→ [Contribution Guide](https://github.com/justadudewhohacks/open
なぜ僕たちはサーバレスでJavaを諦めTypescriptを採用したか
この記事は個人ブログのうち技術に関する箇所のみを抜粋した転載です。
[なぜ僕たちはサーバレスでJavaを諦めTypescriptを採用したか -Junks, GC cannot sweep-](https://munchkins-diary.hatenablog.com/entry/2020/02/05/002748)またブログには書いたのですが、諸事情により先に英語版が存在します。
こちらも書いたのは僕なので、剽窃などではないことはご了承ください。\[元記事\]: [Why we replaced Java with Typescript for Serverless](https://dev.to/csohei/why-we-used-typescript-instead-of-java-on-serverless-39e2) in [dev.to](https://dev.to)
## はじめに
**サーバレス(serverless)**は昨今もっとも注目を集める設計手法の一つで、おそらく多くの開発者が大なり小なり自分のプロダクトに応用し始めているのではないでしょうか
Docker 環境で nodemon が watch してくれない問題と対処方法
Web アプリの開発環境を Docker で作っていたところ、nodemon がうまくファイル変更を検出してくれなくて困ったので、そのときのメモ。
## マウントしたボリュームだと nodemon が watch してくれない問題
問題を再現するために、以下の3つのファイルを用意する。ポイントとしては、ホストのディレクトリをコンテナ内にマウントしてそれをコンテナ内の nodemon が watch しているということ。
“` Dockerfile:Dockerfile
FROM node:12ADD . /app
WORKDIR /appCMD [“node”, “.”]
“`“` javascript:index.js
const http = require(‘http’)http.createServer((req, res) => {
res.writeHead(200, { ‘Content-Type’: ‘text/plain’ })
res.end(‘ok’)
}).listen(80)
“`“` yaml:docker-co
UbuntuでNode.jsとExpressの環境を作る
# Ubuntu で Node.js と Express の環境を作って試してみる
Ubuntu の環境は既に作成済なのが前提## Node.js を動かす環境を作る
– 参考サイト→https://qiita.com/seibe/items/36cef7df85fe2cefa3ea
– とりあえず最新のを入れようとしてみる下記を順番に入力したら完了
“`
sudo apt install -y nodejs npm
sudo npm install n -g
sudo n stable
sudo apt purge -y nodejs npm
exec $SHELL -l
“`versionを確認するなら↓コレ
“`
node -v
“`v12.14.1 とか出るはず
### Node.js で Hello World してみる
node と入力して node を起動
↓こんなのが出る“`
Welcome to Node.js v12.14.1.
Type “.help” for more information.
>
“`以下
react-native のMetro bundlerでNodeエラーが出るときの対処
## 概要
React Native開発をしているとMetro Bundlerが上がってきます。
このときに自動で立ち上がってくるTerminal上のMetroでエラーが出た時の対処方法のメモとなります。## 対象読者
– React Native v0.59.x >= 利用者## 事象
React Native開発をしていると(古いバージョンでは)必ずMetro Bundlerのお世話になります。Metro Bundlerは `react-native-cli`の`run-ios`コマンドを叩くなどすると上がってきます。その際、新規PCで何気なく実行すると下記のエラーが出ました。
あれ?nodeがない?となりましたが、普段使いして
ubuntu18.04でnpm testを使いava実行すると「SyntaxError: Unexpected token {」エラーが出てしまうときの解決方法
なんてことないことでしたがNode.js, npm, avaを使い初めて日も浅くて2~3時間悩んだのでメモです。あまりいないかもしれないですが、他に同現象で困っている人がいたら役立ちますように。
# 現象
初めてavaを使おうと https://www.npmjs.com/package/ava に従ってnpm testをすると以下のエラーとなってしまい実行できない。“`bash
$ npm test> ava -v
(node:5301) UnhandledPromiseRejectionWarning: /home/shohei/tmp/20200203/shoheihagiwara-cli/node_modules/ava/lib/node-arguments.js:9
} catch {
^SyntaxError: Unexpected token {
at createScript (vm.js:80:10)
at Object.runInThisContext
JavascriptのDate.prototype.toString()系まとめ
new Date()からタイムスタンプを作ってファイル名にしたい時、どのフォーマットにするか毎回調べてるのでまとめる
| メソッド | 出力される文字列 | 備考|
|:——————————————————|:———————————————–|:—
| new Date(‘2000-01-01 00:00:00’).toString() | “Sat Jan 01 2000 00:00:00 GMT+0900 (日本標準時)” | |
| new Date(‘2000-01-01 00:00:00’).toISOString() | “1999-12-31T15:00:00.000Z” | |
| new Date(‘2000-01-01 00:00:0
Hueを使って照明の色で天気予報を認識する
## 1. 億劫なこと
毎日、テレビやスマホで天気予報を確認して服装の選択や傘の有無を考えるのがめんどくさい。
## 2. やりたいこと
当日の天気予報をAPIで取得し、天気・温度に応じて室内照明(Hue)の色を点灯させたい。
想定する手順は以下の通り。1. 気象情報APIによって、当日の情報(天候と気温)を取得する
1. 取得した天気の情報を元に、照明の色を変化させる## 3. 環境
– node version : v8.11.3
– Philips Hue Go + ブリッジ## 4. 実装
### 4.1 準備
モジュールのインストール。
“`
$ npm install request
“`### 4.2 気象情報APIの利用
今回は無料のAPIを使いたかったため、[openweathermap](https://openweathermap.org/)を利用した。
HPから利用登録してAPPIDを入手。天気の情報は以下のAPIによってGETできる。
“`
http://api.openweathermap.or
Elixirのノード、プロセス間通信
# はじめに
プログラミングElixirの「15.2 プロセスの名前付け」を理解するための備忘録です。
概要:とあるコールバックプロセスのPIDを登録し、そのPIDに対して2秒間隔でメッセージを送信するプログラム
異なるノードからコールバックプロセスを登録できるようにする。# 参考
プログラミングElixir「15.2 プロセスの名前付け」# 環境
– IEx 1.9.1 (compiled with Erlang/OTP 22)# 目次
– ソース
– ノード1で実行
– ノード2で実行
– まとめ# ソース
“`Elixir:ticker.ex
defmodule Ticker do
@interval 2000 # 2 seconds
@name :ticker
def start do
# 関数generatorのプロセスを開始
pid = spawn(__MODULE__, :generator,[[]])
# 開始した関数generatorを名前「ticker」として登録
:global.register_n
S3にCSVファイルがアップロードされるとLambdaがDynamoDBへデータを挿入します
#概要
S3へjsonファイルがアップロードされるとLambdaがそのファイルの中身を解析して、DynamoDBへデータを挿入します。#jsonファイルの構成
`data`キーに配列があり、配列の要素はオブジェクトとなっています。“`json
{
“data”: [
{
“item1”: “sample data1”,
“item2”: 123,
“item3”: “test data1”
},
{
“item1”: “sample data2”,
“item2”: 1234,
“item3”: “test data2”
},
]
}
“`#主な流れ
1. S3へファイルがアップロードされるとLambdaが起動
2. アップロードされたファイルの中身を取得
3. `data`キーから配列を取得
4. 配列を`forEach`で各要素をDynamoD
Node.jsで常時フォルダを監視してS3へファイルをアップロードする
#概要
あるフォルダに不定期にCSVファイルが作成されるので、そのCSVファイルをS3にアップロードするプログラムをNode.jsで作成します。
処理に失敗するとAWS SESを使って、管理者へメールを配信します。
loggerも使って何が起こったかを追えるようにします。
[全コードはこちら](https://github.com/TKFM21/monitoring_template)#フロー
##起動時に監視フォルダとローカルの保存フォルダが存在するかチェック
“`javascript:initial_check.js
const fs = require(“fs”);
const fsPromises = fs.promises;const initialCheck = async (WATCHING_DIR, DEST_DIR) => {
try {
await fsPromises.access(
WATCHING_DIR,
fs.constants.R_OK | fs.constants.W_OK
);
await
Node.jsでhtmlのlinkタグなどから外部ファイルを読み込めないときの解決法
Node.jsでJavaScript入門書のサンプルコードを実行したが、htmlのlinkタグとscriptタグでcssとJavaScriptが読み込まれなかった。
なお学習目的のため以下の条件を設けている
– Expressなどのフレームワークは使わない
– サンプルのディレクトリ構造は変えない# サンプルコード
入門書のコードをそのままここに書くわけにはいかないので、自作のサンプルコードを記しておく。
ディレクトリ構成図
“`
.
├── common
│ ├── jquery-3.4.1.min.js
│ └── style.css
└── samples
├── sample1
│ ├── index.html
│ └── script.js
└── sample2
“`
ピンク色の「うんこ」を表示するサンプルコード“`index.html
Node.jsでYYYYMMDDの文字列を出力する
#概要
Node.jsを使って現在日時からYYYYMMDDの文字列を出力します。
2020/2/3なら`20200203`となります。
少し工夫しないと`202023`とかになってしまいます。
#実際のコード
“`javascript
const createYYYYMMDD = () => {
const today = new Date();
const monthMM = (‘0’ + (today.getMonth() + 1)).slice(-2);
const dayDD = (‘0’ + (today.getDay() + 1)).slice(-2);
return today.getFullYear().string() + monthMM + dayDD;
};console.log(createYYYYMMDD); // 20200203
“`##ポイント
`getMonth()`, `getDay()`で得られる値は、現在の月(日)から1引いた値となります。
そのため1を足して`(today.getMonth() +
Firebase CloudFunctions x TypeScript をデバッグしながらHotDeploy
# CloudFunctions x TypeScript デバッグしながらホットデプロイできるようにする
## package.json
scriptsを以下のようにします(必要な部分のみ抜粋)
“`json:package.json
{
“scripts”: {
“watch”: “tsc –watch”,
“shell”: “npm run watch & firebase functions:shell”,
“start”: “npm run shell”
}
}
“`## debug
`npm start`ソースを保存したら自動的に反映(ホットデプロイ)されることを確認してみてください
[Node.js]フォルダを配下のファイルも含めて一括削除する(since 2019)
#Overview
フォルダを配下のファイルも含めて一括削除しようかと思ったら意外と過渡期であることが判明。
ググると古いコードが上位にいるため、2019年以降のフォルダ削除の方法を残しておく。#Target reader
– Node.jsでフォルダをファイルも含めてスマートに削除したい方。
#Prerequisite
なし。
#Body
##Special thanks
今回はstack overflowの内容をなぞるだけなので、必要に応じてリンク先を確認してください。
Remove directory which is not empty
https://stackoverflow.com/questions/18052762/remove-directory-which-is-not-empty##Node v12.10以降の場合
この回答がすべて。
https://stackoverflow.com/a/57866165>
“`javascript
fs.rmdir(dir, { recursive: true });
“`APIリファレ
package.jsonで環境変数(NODE_ENV)を設定するとき、WindowsでもLinux,Macでも動くようにする
# 概要
**npm start**したいときpackage.jsonで環境変数(たとえばNODE_ENV)をセットしつつ起動したいとき[**cross-env**](https://www.npmjs.com/package/cross-env)をつかうと実行環境がWindowsなのかLinux、Macなのか、といったプラットフォームを意識しなくて良いようにする## 使用前→Linux用とWindows用で書き換える必要あり
スクリプトは以下のようになる
**Linux,Macなら**
“`json:package.json(使用前)
“scripts”: {
“test”:”NODE_ENV=test jest”
}
“`**Windowsなら**
“`json:package.json
“scripts”: {
“test”:”set NODE_ENV=test&&jest”
}
“`このようにプラットフォームを意識して書きわける必要があった
## 使用後→”**cross-env**”で解決
[**cross-env**](htt
Fn Projectを使ってJavaScriptで書いたfunctionを動かしてみる
# 概要
このエントリでは、OSSのFaaSサーバである「Fn Project」を使い、JavaScriptの関数を動かすパターンを扱います。JavaScriptのエンジンはNodeです。
下図のようなJavaScriptによる足し算の関数をFnのサーバにデプロイして動かします。
![write_node_with_code_server.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/ef38d5df-e149-c593-a4fa-11bfbe0e841f.png)
## 想定読者
– Fn ProjectでのJavaScriptプログラムまだ自分で動かしていない方
# 準備
Fn Projectを動かすまでのところは、別エントリ[「OCIのMicro InstanceでCentOSにFn Projectのサーバをインストールしてみる」](https://qiita.com/hrkt/items/e37bab448c8aa1b00117)を参照ください。
# Nodeでfu
SYMFONISK(Sonosランプ)とTRADFRIライトを連携させてみた。
# はじめに
2020年2月1日。
とうとう日本でSonosとIKEAのコラボレーションモデルSymfoniskが発売されました!
SymfoniskはBookshelf型とLamp型の2種類がありますが、音と照明の組み合わせに惹かれて
Lamp型を選択しました。
ただ、残念なところが1点あり、上の照明部分と下のSonos部分がバラバラ(連携していない)なのです。
## ゴール
Sonosの音楽再生に合わせて照明を変化させます。
エンジニア向けSNSアプリを孤独にフルスクラッチした時の技術要素とか苦労話とか
# 作ったもの
エンジニア同士、デザイナ同士、エンジニアーデザイナが一緒に「なんか作ろうぜ」「なんか勉強しようぜ」というつながりを実現できるSNSアプリEDICPAT
https://play.google.com/store/apps/details?id=com.engineer_forum.engineer_forum# 作った動機
エンジニア向けSNSアプリってもう色々あるんでしょうけど、既存の団体に自分が参加する形式とか、作ったものを見てもらうとかの形式だったりすると思います。そうじゃなくて、未経験者とか、フリーランスエンジニアとか、**そこら辺の仲間と「勉強会やろうぜ」とか「何か作ろうぜ!」ってやりたい。**休日とか、ライトなノリで。自分自身がそういうのに
iPadだけでCloud9開発環境を構築してみた話
# 初めに
iPadのOSがiOSからiPad OSに変更されiPadを取り巻く環境が大きく変わりました。特にSafariが強化されPCブラウザと遜色がないレベルになりました。強化されたSafariがあればCloud IDEであるAWS Cloud9を使っていつでもどこへでも持ち歩ける開発環境が手に入るのではないか、日差しが差し込むカフェのオープンテラスでコーヒー片手にドヤ顔しながら開発ができるのではないかと妄想がパーンと弾けてしまったため、さっそくiPad Proを購入して開発環境を構築してみました。[^1]
## 想定読者
記事としては前提知識を要求する記事となっております。(はしょったとも言う)– AWSでの開発経験があり、どこへでも持ち歩ける開発環境に興味がある人
– 特にCloud9を利用していて、iPadで動かしてみたい人Cloud9って何という人は事前にAWS Cloud9について調べてください。
## 検証環境
今回の記事では以下の環境にて動作確認を行なっています。環境が異なれば出来ることや対処法が異なる可能性があります。ご留意ください。– iPad