- 1. WindowsにてSublime Text 3でコーディング、gulp-sass(+node-sass)を利用するときは”atomic_save”を設定しよう
- 2. CentOS8にnode13をインストールする
- 3. Google のプリエンプティブル VM の状態を監視し、落ちていたら実行する
- 4. express-generator で jade を pug に差し替える方法がわからなかったハナシ
- 5. Node.jsでrequestモジュールを使ってHTTPリクエストを実行する
- 6. socket.io にセッション情報を渡す
- 7. Homebrewインストールからnode、npm環境構築まで
- 8. Node.jsのアップデート手順(Mac)2020年度版
- 9. internal/modules/cjs/loader.js:1197(bcrypt Error)
- 10. nvmでバージョン管理
- 11. Node.jsで指定したディレクトリをZIP圧縮するサンプル (async/awaitを用いて書く)
- 12. GulpでSassをコンパイル(環境構築)
- 13. 【Node.js + PostgreSQL】特殊なクエリ記法
- 14. javascriptができるのは非同期処理であって並列処理ではない
- 15. JS1日クッキング まとめページ
- 16. [JS1日クッキング]小さなPromiseライブラリでPromiseを理解する
- 17. 【Laravel 6.0】スピード環境構築!
- 18. Jimp の hash はすぐに衝突するので注意する
- 19. Puppeteerにはまだまだ負けられないcheerio-httpcliの底力を見せる時が来た
- 20. AWS IoT Greengrassを使ってGoogleHomeにしゃべらせる
WindowsにてSublime Text 3でコーディング、gulp-sass(+node-sass)を利用するときは”atomic_save”を設定しよう
Windows10(Pro, 64bit)でタスクランナーにGulp4(^4.0.2)を利用しているときに、scssのコンパイルがうまくいかない(”@import/xxxx”を読み込んでくれない)状況になり、解決まで長いこともやもやしていたので備忘録として載せておきます。
#環境
| ツール名など | 詳細 |
|:—————–|:——————–:|
| OS |Windows10 Pro 64bit |
| エディタ |Sublime Text 3 |
| タスクランナー |Gulp4(^4.0.2) |
| Node.js |v14.4.0 |
| npm |v6.14.5 |## package.json
“` json
{
// ︙略
“devDependencies”: {
// ︙略
“br
CentOS8にnode13をインストールする
# 概要
DiscordのbotをPythonからnodeで書き直したので、動かしていたサーバーにnodeを導入した。
デフォルトのnodeは10.19.0だったのでnodeのバイナリディストリビューションからインストーラーをダウンロードしてnode13をインストールした。# 環境
– CentOS8
– node v13.14.0# インストール
nodeバイナリディストリビューション
https://github.com/nodesource/distributions参考 : https://github.com/nodesource/distributions#rpminstall
nodeのインストール
“`
$ sudo yum install curl
$ curl -sL https://rpm.nodesource.com/setup_13.x | sudo bash –
$ sudo yum install nodejs% node -v
v13.14.0% npm install -g npm
% npm -v
6.14.4
`
Google のプリエンプティブル VM の状態を監視し、落ちていたら実行する
VM を startVM するだけのサンプルはたくさん見つかったけど、VM が実際に実行状態(RUNNING)なのかどうかをチェックしながら落ちていたら実行するサンプルが全然見つからなかったので、API を調査して実装した。
ランタイム:node.js 10
“`node.js
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.startVM = (req, res) => {
const Compute = require(‘@google-cloud/compute’);
const compute = new Compute();
const zone = compute.zone(‘your zone id’); // asia-northeast1-c とか
const vm =
express-generator で jade を pug に差し替える方法がわからなかったハナシ
# express-generator インストール後の jade の脆弱性表示を何とかしたいという記事です
## 経緯
“`bash:install
sudo npm install express-generator -g
express somefolder
cd somefolder
express somefolder
“`上 コマンドを叩いたあとで
![Clipboard01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647892/9f101073-977d-6727-4c46-9e31ce6bb03e.png)っていうのが出てやだなと思っていた。
詳しくは省くけど、結局“`bash:
npm audit fix
“`は全然効かなくて、でも express-generator 使ったのはじめてだし、
きける先輩もいないし(っていうか、node 案件受けてないのかもしれない。ビビり過ぎ)っていう状態。
## 原因の推測
調べてみると jade というものが
Node.jsでrequestモジュールを使ってHTTPリクエストを実行する
# Node.jsでHTTPリクエストを使う
前回の[記事](https://qiita.com/takashi53/items/69d4395c70d76ddbb0ab)のとおり、Raspberry piでNode.js環境を整えました。
## requestモジュールを準備する
このページを参考にしました。
https://garafu.blogspot.com/2017/05/node-http-httpss-request.html#postreq
requestモジュールをインストールする。
“`shell-session
pi@raspberrypi:~ $ npm install request
“`バージョンを確認します。
“`shell-session
pi@raspberrypi:~ $ npm view request version
2.88.2
“`## requestモジュールを利用してPOSTメソッドを実行する
HTTPリクエストのPOSTメソッドを試してみます。
コードは、この[記事](https://garaf
socket.io にセッション情報を渡す
# socket.io + express-session + passport
[hidden.in](https://github.com/ukiuni/hidden.in) というsocket.ioを使ったビデオ会議をするプログラムを使用していました。
その際に、ユーザー名を表示させたいとの要望があり実装した備忘録です。各バージョン
* Node v12.13.1
* express-session 1.17.1
* passport 0.4.1
* passport-local 1.0.0[hidden.in](https://github.com/ukiuni/hidden.in)のインストール、使用方法については記事がありますので、参考にしてください。(また、後日まとめたいと思います)
インストール済みを想定して話を進めます。少し話はそれますが、フォームにユーザー名を入力させてemitするといけるんちゃんと考え、実装したのですが、ブラウザをリロードすると消えてしまう為、ダメでした。
では、実装手順です
1. express-sessionとpassport
Homebrewインストールからnode、npm環境構築まで
#Homebrewインストール
インストールを始める。基本的に公式サイトのフローに沿って進める。
[Homebrew公式サイト](https://brew.sh/index_ja)“`bash
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)”
“`実行すると確認が表示、Enterを押すとmacのパスワードが求められる。
“`bash
Press RETURN to continue or any other key to abort
Password:
“`パスワードを入力しenterでインストールが始まる。
“`bash
brew install wget
“`#環境構築
こちらを参考にphp7.2,apache,mysql5.7をインストール
https://qiita.com/kobiyama/items/4e48604f1120cfe47f36mysqlの初期設定
https://qiit
Node.jsのアップデート手順(Mac)2020年度版
# はじめに
ひょんな機会でパッケージのアップデートが必要になると必ずと言っていいほどggってしまう筆者です:hand:
今回はMacOS環境でNode.jsのアップグレードをする手順を日本語で書いていくぅ!
# 手順
## 1. 現バージョンの確認
“`
# パッケージマネージャー
npm -v# node本体
node -v
“`## 2. パッケージのインストール
次のコマンドを実行する。
“`
npm install -g n
“`インストールが完了すると、ご丁寧にアップデート前後のバージョンを表示してくれる。
“`
/Users//.ndenv/versions/v8.11.1/bin/n -> /Users/ /.ndenv/versions/v8.11.1/lib/node_modules/n/bin/n
+ n@6.5.1
added 1 package in 1.429s╭──────────────────────────────────────╮
│
internal/modules/cjs/loader.js:1197(bcrypt Error)
# 開発環境から本番環境に移行した時
**npm start**をすると“`
internal/modules/cjs/loader.js:1197
return process.dlopen(module, path.toNamespacedPath(filename));
“`
というエラーを吐きやがった.これは**bcrypt**のnpmのversionとかの問題らしい.
解決策はこれ一択
“`
npm rebuild bcrypt –build-from-source
“`# 参考
https://github.com/kelektiv/node.bcrypt.js/issues/635
nvmでバージョン管理
# nvmのインストール
* https://github.com/coreybutler/nvm-windows/releases—
# インストール可能なnode.jsのバージョン確認
“`
$ nvm list available
“`# 指定バージョンの node.js インストール
“`
$ nvm install x.x.x
“`# インストール済みの node.js バージョン確認
“`
$ nvm list
“`# 指定バージョンの node.js に切り替え
“`
$ nvm use x.x.x
“`
Node.jsで指定したディレクトリをZIP圧縮するサンプル (async/awaitを用いて書く)
`Node.js`で指定したディレクトリをZIP圧縮するためのサンプルコードとなります。
`async/await`を用いて書いてみます。なお、圧縮処理には `archiver`というnpmライブラリを利用します。
https://github.com/archiverjs/node-archiver
下記のような状況を想定しています。
ここの`dir`を `dir.zip`にするイメージです。“`sh
dir
├── sample1.mp4
├── sample1.mov
└── sample2.mov
“`## サンプルコード
`archiver`をインストール
“`sh
yarn add archiver
“`なるべくシンプルに書こうと思い、削れるところは削ってみています。
`archiver` 自体の細かな使い方は公式を参照してみてください。“`javascript
const fs = require(‘fs’);
const path = require(‘path’);
const archiver = require(‘arch
GulpでSassをコンパイル(環境構築)
* Gulp導入に必要なNode.jsとnodebrewについてはこちら
[nodebrewでNode.jsをインストール(初心者向け)](https://qiita.com/aya_omochimochimochi/items/21df67dd5337f6dbc47e)## Gulp.jsのインストール
#### 1.まずは、Webサイトのファイル一式が保存されるフォルダーを作成します
任意の場所にフォルダーを作成してください。
ここでは「testproject」をDocuments(Macの「書類」ディレクトリ)に作成します。
#### 2.ターミナルを開いてフォルダー(testproject)の場所へ移動します
ターミナルに` cd`と打ってから、フォルダーをターミナルにドラッグ&ドロップして` return`キーを押すとドロップしたフォルダーが現在地になるよ!
#### 3.package.jsonを作成します
ターミナルで以下を実行して下さい。“`zsh:ターミナル
npm init -y
“`
* package.jsonとは
プロジェクトの名前やバージ
【Node.js + PostgreSQL】特殊なクエリ記法
# 悩んでいたこと
– IN句で複数の条件を指定したい
– INSERT文で複数レコード登録したいこれらはただSQL文を書くのは簡単ですが、プレースホルダーを使った上での書き方が難しく、日本語の情報が全くなかったので、まとめました。
上記以外に使えそうな記法もまとめてあります。# 前提
pg-promiseパッケージを使用し、databaseとの接続などはできていることとします。
載せているサンプルコードではanyメソッドを使っていますが、非推奨なので、oneやmanyを適宜使いましょう。# 普通のSELECT文
とりあえず、例としてただのSELECT文“`javascript
const userName = ‘田中’;
const query = ‘SELECT * FROM user WHERE name = $1’;
const res = await db.any(query, [userName]);
“`クエリ内の”$1″がanyメソッドの第二引数の値で置き換わる感じです。
# IN句に複数条件
“`javascript
const use
javascriptができるのは非同期処理であって並列処理ではない
# はじめに
初投稿です
非同期処理と並列処理の違いをやっと理解できたのでそのことについて書きます。## 並列処理
まず並列処理は複数スレッドを同時に立ち上げて処理を行う方式のことを言います。(マルチスレッド)## 同期処理
同期処理とは通常の実行順番通りにプログラムが実行され実行が終わるまで次の処理に移らない、というような処理方式です。
javascriptは同期処理で処理が行われます。以下のコードを実行すると、
“`javascript:sample1.js
function sleep(n, name) {
n = n * 1000
let start = Date.now();
while (Date.now() – start < n) { } console.log(name) } function A() { // 重たい処理A sleep(1, "A"); } function B() { // 重たい処理B sleep(2, "B"); } function C() { // 重たい処理C sleep(3,
JS1日クッキング まとめページ
キューピー3分クッキングのように、お手軽に何か作ってお勉強するシリーズのまとめページです。
コンセプトは、
– JavaScript(or TypeScript)を使う
– 1日前後でお手軽に作れる
– どの記事からでも独立して読めるように努めるけど、繋がりのある記事は前のものも読むとわかりやすいかもです。
# APIサーバー
1. [[JS1日クッキング]SequelizeとExpressでAPIサーバー – Qiita](https://qiita.com/kei_lb6/items/86491a87d9154de05e76)
1. [[JS1日クッキング]APIサーバーにJestでユニットテストをする – Qiita](https://qiita.com/kei_lb6/items/c0923745dd8ecfaa68f7)
1. [[JS1日クッキング]APIサーバーをCircleCIで自動テスト – Qiita](https://qiita.com/kei_lb6/items/19465f0803db971e6be7)# Promise
1. [[JS1日ク
[JS1日クッキング]小さなPromiseライブラリでPromiseを理解する
Promiseはthenとcatchでチェーンで、async/awaitで非同期処理が終わるまで待つことができる。それくらいはわかる。でも、Promiseの解説を読んでもイマイチよくわからない。
そんな人のために、自作した小さなPromiseライブラリを読みながらPromiseを理解する記事です。
今回は、同時に動かす非同期処理の数を制限しながら非同期処理をする`forEach()`, `map()`とタイムアウトを設定して処理をリトライする`retry()`を書いていきます。
コード → [promise-utils](https://github.com/kei-lb6/promise-utils)
[JS1日クッキング まとめページ – Qiita](https://qiita.com/kei_lb6/items/bde95a536e978c3fa7fe)
# 材料
– Promise、async/awaitを使った経験
# 作り方
## 1. `forEach()`を書く
同時実行数を制限して、Promiseを実行する`forEach()`を書きます。Prom
【Laravel 6.0】スピード環境構築!
# 背景
Laravelを使う際に環境構築が必要ですが、1つ1つ確認しながらやるのは面倒だと思うので、速攻で使えるようになるまでの手順を紹介します。## 手順
1.Xcodeのインストール
“`
$ xcode-select –install
“`2.Homebrewのインストール
“`
$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
“`3.PHP7.3のインストール
“`
$ brew search php@7$ brew install php@7.3
“`4.Composerのインストール
“`
$ brew search composer$ brew install composer
“`5.[Node.js](https://nodejs.org/ja/)公式サイトへアクセス
6.「推奨版」をクリック
7.ダウンロードされたファイルを開き、インストールを完了させる
Jimp の hash はすぐに衝突するので注意する
Node.js の画像処理によく使われる [Jimp](https://github.com/oliver-moran/jimp) だが、思いがけない落とし穴(バグではない)があったのでメモ。
# 全く異なる2つの画像のハッシュ値が同じになってしまう
– 次の2つの画像を Jimp で hash すると、同じハッシュ値 `80000000000` (base64) になる
– ![](https://img.hackforplay.xyz/u/k8iYlBvaCHXeUQNkuHekaEwzUyO2/80000000000.png)
– ![](https://img.hackforplay.xyz/u/fvnXbi6IzkWAykuzkTyzzXXXlA82/80000000000.png)
– [この Codesandbox](https://codesandbox.io/s/loving-ride-eiljq?file=/src/index.js) を開けばブラウザ上で再現可能– ハッシュ値が衝突してしまうことは「起こりうる事象」なのだが、 Jim
Puppeteerにはまだまだ負けられないcheerio-httpcliの底力を見せる時が来た
昨今のWEBスクレイピングといえばSPAなどの動的更新WEBサイトの増加もあって[Puppeteer](https://pptr.dev/)が主流になっていますが、かつて一世を風靡した(言いすぎ)[cheerio-httpcli](https://www.npmjs.com/package/cheerio-httpcli)というスクレイピングライブラリもあるのをご存知でしょうか。
静的HTMLを解析してjQueryのように要素を検索・操作するいわゆる古いタイプのライブラリではありますが、まだまだ現役でやれるところを見せるべく、目玉機能をいくつか引っさげてバージョン0.8.0へと進化したのでこの場を借りて紹介させていただきます。
Puppeteer使いの方にも役立つ情報もあるのでぜひぜひ最後までご覧ください。
ちなみに、cheerio-httpcliについての紹介記事は過去に何度かQiitaで紹介しているので「cheerio-httpcli?なにそれおいしいの??」的な人はそちらもご覧になるとより分かりやすいと思います。
#### 過去の紹介記事
* [Node.js用のスクレ
AWS IoT Greengrassを使ってGoogleHomeにしゃべらせる
今回は、AWS IoT Greengrassの勉強を兼ねて、自宅にあるGoogleHomeにしゃべってもらいましょう。
これまでいろんな記事でGoogleHomeをしゃべらせてきましたが、GoogleHomeはローカルネットワーク上にある必要がありました。
したがって、いつも使っているAWS Lambdaに配置したNode.jsから、GoogleHomeにアクセスしようにも、ローカルネットワークにないのでダメでした。そこで、GreengrassによってNode.jsのロジックをサーバ側のAWS Lambdaで管理しつつ、ローカルネットワークに配置するGreengrassコアにロジックをデプロイしてGoogleHomeを操ります。
また、IoTの特徴であるMQTTで起動させたりできますし、PublishするクライアントをX.509公開鍵ペアできちんと認証することができます。全体像です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/968182a0-bfb3-d6