- 1. node.jsで簡易ftpサーバーを立てる(Qemu用)
- 2. Steinを使って名前マスタから情報を取得するメモ
- 3. 簡単 (電子) レシート receiptline の新機能を試してみた
- 4. 【Jest】テスト用のAPIとDBとうまく付き合っていく方法
- 5. 【Electron入門】GithubのIssueを一瞬で確認できるアプリを作って業務効率化してみた #2 GithubAPI編
- 6. 【Electron入門】GithubのIssueを一瞬で確認できるアプリを作って業務効率化してみた #1 Alfredっぽいwindow作成編
- 7. Elasticsearchのindexの引越し。Elasticdumpはlimitオプション再定義で高速処理。
- 8. YouTubeの配信・動画のコメント(トップレベルコメントのみ)を取得するnode.jsのツールを作成
- 9. 【エラーコード別解説】Twitter の Account Activity API の Webhook URL が登録できないときの解決法
- 10. Box UI Elementsを自前でホスティングする方法
- 11. LINEの絵文字・スタンプメッセージ送信メモ
- 12. タスクランナーで作ったサイトをHerokuでデプロイする
- 13. command not found: nodeエラーは、”nodebrew use” で解決する
- 14. Webアプリ未経験者がReactに手を出す
- 15. 【npx webpack】No valid exports main found for でエラー
- 16. Typescript(Node.js)でtgzを解凍する
- 17. PWAを試してみよう
- 18. Steinを使ってSpreadSheetのデータをとるときのメモ
- 19. 部屋が乾燥してきたらGoogleHomeで知らせてもらう
- 20. RaspberryPi で castv2-client を使ってGoogleHomeをしゃべらす
node.jsで簡易ftpサーバーを立てる(Qemu用)
## 概要
Qemuではフォルダ共有機能が実質存在しないので、ゲストOSからホストのファイルにアクセスするためのftpサーバーをnode.jsでサクッと構築する。
## パッケージのインストール
“`
npm install ftpd
“`## ソース
“`ftpd.js
var ftpd = require(‘ftpd’);
var fs = require(‘fs’);
var path = require(‘path’);//コマンドライン引数からポートとルートになるフォルダの設定
var port = process.argv[2] || 10021;
var root = process.argv[3] || process.cwd();//サーバーの設定
var server = new ftpd.FtpServer(‘127.0.0.1’, {
//接続後の初期ディレクトリ
getInitialCwd: function() {
return ‘/’;
},
//ルートとなるフォルダの設定
getRoot: funct
Steinを使って名前マスタから情報を取得するメモ
名前の登録があれば設定、なければ登録を促す処理
ユーザIDをもとにユーザ名を取り出す処理。“`javascript
function getUserName(userId){
let userName ;
userName = store.read(“name_master”, { search: { user_id: userId } }).then(data => {
console.log(data);
let uName;
console.log(data.length);
if(data.length === 0 ){
uName = “”;
}else{
uName = data[0].user_name;
}
console.log(uName);
//1行しか取れないので1つ目のユーザ名を指定
return uName;});
r
簡単 (電子) レシート receiptline の新機能を試してみた
マークダウン言語で紙のレシートや電子レシートを簡単に作れる receiptline。
https://github.com/receiptline/receiptline
https://www.npmjs.com/package/receiptline少し前にマイナーバージョンアップがあったので、新機能を試してみました。
(2020年11月21日時点で Verion 1.1.1)# Web フォントで表示
[前回の記事](https://qiita.com/dopperi46/items/5a327d8c7f22ad2fde22)で試していた Google Fonts の「Kosugi Maru」が採用されました。
これで iOS, Android, Windows, Linux, Mac どの環境でも同じ表示になるはずです。
![00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669512/782ade4e-dda6-828f-203e-02d734fc2933.png)データは[
【Jest】テスト用のAPIとDBとうまく付き合っていく方法
# 始めに
apiのnodeのバージョンを8から14にしました(まだリリースはしてない)!!
14への移行自体は簡単だったもののテストの移行でかなり苦戦しました。。。
テストは古のライブラリmocha-coで書かれており、仕方なくmocha-coのシンタックスをjestに置き換える作業を開始しました。これが予想以上にめんどくさくその時のHow toを解決する方法がこの記事になります。
以下の問題にお悩みの方はこちらを参考していただけるかと思います。またいい方法をご存知の方はお教えください!!– TooManyConnectionとなってしまう
– 毎回のテストでサーバー立ち上げとクローズをするのめんどくさい
– –ranInBandつけたけどなんか挙動がよくわからない・・・。
– mochaからのjestに移行したい正確にjestのランタイムの仕様が分かっているわけではなく、調べたり試したりした結果なので間違いやもっと詳細が分かる方がいらっしゃいましたらぜひお教えください!!
また正確なコードを書くと記述量が多いので雰囲気で書いているところもあるのでご了承ください。# 前
【Electron入門】GithubのIssueを一瞬で確認できるアプリを作って業務効率化してみた #2 GithubAPI編
## はじめに
[前回](https://qiita.com/ikkei12/items/cba90ac057e8f0a9c2c5)はwindowの作成をしました。
今回はGithubAPIを導入して完成させようと思います。
長くなってしまうのでJavaScriptでDOMの作成をする部分やCSSの説明は省きます。
気になる方はコードをご確認ください!## 完成品
option(alt) + Spaceで表示/非表示が切り替えられます。![scc.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488042/e31df68d-1879-ca25-6ad3-950a4f87d880.gif)
## 現状
![test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488042/563a9615-0192-68f9-2d24-2ed8a4468d05.gif)## Access Tokenを生成する
それではやっ
【Electron入門】GithubのIssueを一瞬で確認できるアプリを作って業務効率化してみた #1 Alfredっぽいwindow作成編
## 完成品
option(alt) + Spaceで表示/非表示が切り替えられます。![scc.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488042/e31df68d-1879-ca25-6ad3-950a4f87d880.gif)
### ソースコード
https://github.com/ikkei12/git-app.pub## はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488042/c4f4f457-8aaf-84be-ff7b-122b4d6cf3b6.png)[Alfred](https://www.alfredapp.com/)最高ですよね。
彼のおかげでマウスを使う頻度が激減して助かっています。Alfredと同じ手軽さで、自分がアサインされているissueを確認できるデスクトップアプリが作りたいなと思ったので、[Electron](https://
Elasticsearchのindexの引越し。Elasticdumpはlimitオプション再定義で高速処理。
# はじめに
Elasticsearch を docker を使って、ローカルマシンで使用している。
Elasticsearchのバージョンをあげてみたくなったので、データをDumpして引越ししてみることにした。# 事前調査
2020/11/20現在、Googleを使って、「elasticsearch インデックス 移行」と調べてみると、Elasticdumpというスクリプトを使っているひとが多いようだ。(以下、Googleの検索結果 表示される順に抜粋)
ElasticSearchのindexデータを移行する – Qiitaqiita.com › Node.js
https://qiita.com/taai/items/9244e7dc4dacf29ab95aよく使うElasticSearchのクエリ(elasticdump) – Qiitaqiita.com › Elasticsearch
https://qiita.com/nakazii-co-jp/items/3199433d685d0600c6d6Elasticsearchのデータをdumpしてコピー
YouTubeの配信・動画のコメント(トップレベルコメントのみ)を取得するnode.jsのツールを作成
## 概要
– 気になる事があったので、配信のコメントを取得するツールを作成した。
– トップレベルコメントのみ(コメントへの返信は取得していない)
– APIキーは伏字。log4jsでログ出力しているので(いないとは思いますが)流用する場合は各々の出力方法に変換してください。## 引数
– 動画ID(watch?v=XXXXXXXXXXXのXXXXXXXXXXX部分)## 実行結果
以下を出力する。
– 投稿者表示名(items.snippet.topLevelComment.snippet.authorDisplayName)
– 投稿者チャンネルID(items.snippet.topLevelComment.snippet.authorChannelId.value)
– 表示メッセージ(items.snippet.topLevelComment.snippet.textDisplay)
– いいね数(items.snippet.topLevelComment.snippet.likeCount)
– 投稿日(items.snippet.topLevelComment.
【エラーコード別解説】Twitter の Account Activity API の Webhook URL が登録できないときの解決法
# はじめに
Twitter の Account Activity API を使う機会があり、[こちらの記事](https://qiita.com/sbtseiji/items/7957de5db0987d9a6891) を参考に Webhook URL を登録しようとしたのですが、なかなか登録できず、丸一日ほど費やしてしまいました。Webhook の登録はかなり罠があり、調べても解決法が全然出てこなかったため、この記事では、発生するエラーコードを紹介し、その原因と解決法について解説します。参考になりましたら幸いです。
# 正しい設定方法だけ見たい
[正しい設定方法](#正しい設定方法)# 事前準備
Webhook URL を登録する際には POST リクエストを Twitter に送る必要があります。そのリクエストを送るために、本記事では [Postman](https://www.postman.com) を利用します。あらかじめアカウント登録し、デスクトップ版アプリをインストールしておいてください。cURL でもできる気がしますが、罠が多すぎていちいちパラメータをい
Box UI Elementsを自前でホスティングする方法
# Box UI Elementsを自前でホスティングする方法
BOX UI Elements は、React.jsを使っていない場合、CDNからJSファイルとCSSファイルをダウンロードして利用します。
これらのリソースをCDNを使わずに自前でホスティングする方法をメモしておきます。## まとめ (TL;DR)
##### 1. [box-ui-elements](https://github.com/box/box-ui-elements) をCloneして、CSSがフォントを直接参照してる部分を書き換える。
変更するファイルはこれ。
https://github.com/box/box-ui-elements/blob/v12.0.0/src/elements/common/fonts.scss
ビルドする前に、`https://cdn01.boxcdn.net`となってる4箇所を、http://localhost:3000 などに書き換えておきます。
マシなやり方あればおしえてください。##### 2. box-ui-elemensをビルドする。
“`sh:
LINEの絵文字・スタンプメッセージ送信メモ
これはうまくいくけど、
“`javascript
let text_length = pushText.length;
pushText += “$”// チャンネルに登録されている方たちに連絡
client.broadcast([{
type: “text”,
text: pushText,
“emojis”: [
{
“index”: text_length,
“productId”: “5ac1bfd5040ab15980c9b435”,
“emojiId”: “002”
}
タスクランナーで作ったサイトをHerokuでデプロイする
npm-scriptsやgulpで静的サイトを作った際にHerokuをテストサーバにしたい時の手順です。
## 前提
npm-scriptsやgulpで静的サイトを作った場合、管理の都合で、静的サイトはgitigoreしていることが多いと思います。
同じリポジトリのまま、Herokuへデプロイする手順です。## 手順
###(1) Heroku上でnodeでサーバを立ち上げるファイルを作る
“` sh
# Procfileを作る
echo ‘web: node server’ >> Procfile# expressをインストール
npm i express# server.jsを作成する
touch server.js
“`### (2) Herokuでサーバーを立ち上げるserver.jsを編集
“` server.js
var express = require(‘express’);
var app = express();var user = process.env.USER;
var pass = process.env.PASS;app.s
command not found: nodeエラーは、”nodebrew use” で解決する
##直面した問題
“`bash:Terminal
% nodebrew list
v15.2.1current: none
%
% node -v
zsh: command not found: node
%
“`
以下のように、パスを通したり、いろいろやっても*node*コマンドは認識されない。・[@kyosuke5_20さんのQiita記事「kyosuke5_20」](https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09)
・[「node がインストールできない」](https://teratail.com/questions/219745)##*nodebrew use vバージョン番号*を実行すると、*node*コマンドが認識された。
“`bash:Terminal
% nodebrew use v15.2.1
use v15.2.1
% nodebrew list
v15.2.1current: v15.2.1
%
% node -v
v15.2.1
%
“`
Webアプリ未経験者がReactに手を出す
妻が「こんなアプリがあったらいいのに」と話していたのを聞いて、ノリでちょっと作ってみようと思ったのだが、そもそもC言語しか知らない人間にとっては「WebアプリってCSSとJavascriptで作るもんでしょ?」ぐらいしか知識がなく。
しかし、断念するのもアレなので色々とググったら、ReactとかVue.jsとかどっかで見たことある言葉がたくさん出てきてしまって更に悩むことになったが、なんとなくReactを使おうと決めた。
Reactのことなら巷に情報は溢れているし、Webアプリ開発者の方々ならサクサク進めるであろうが、未経験者はいちいち躓いていくという現実を、備忘録込みで記録を残してみようと思う。
# 今の理解
Reactについての認識はこんなところ。– WebのUI用JavaScriptライブラリ群
– これを使えばWeb画面であれやこれやできる
– Facebookが開発しているOSSで、今は商用に使っても大丈夫また、このReactを用いてWebアプリ開発を行うには、以下の2つのパッケージが必要と知った。
– [npm](https://npm.community/
【npx webpack】No valid exports main found for でエラー
#【原因】Node.jsのバージョンが古い
Node.jsのバージョンが古い事が原因僕の場合は“`v13.5.0“` でした。
そこでまずは、[こちら](https://phoenixnap.com/kb/update-node-js-version)の記事のオプション2を参考にnpmを使用して更新しました。
①まずnpmキャッシュをクリアします
“`
npm cache clean -f
“`②続いて、バージョンマネージャーのnをインストール
“`
npm install -g n
“`③最新の安定バージョンをインストールします。
“`
n stable
“`④ここで、Nodeのバージョンを確認してみます。
“`
node -vv14.15.1
“`これで、バージョンが変わっていればOKなのですが、僕の場合はバージョンに変化なしでした。
#【原因】リンク先
続いては、[こちら](https://mebee.info/2019/10/12/post-1793/)の記事を参考にリンク先を変更してみました。
“`
ln -s
Typescript(Node.js)でtgzを解凍する
## Typescriptでtgz(tar.gz)ファイルを解凍する
実装例が少ないことと、紹介されている実装方法では展開先などが指定できなかったりするものがあるため、紹介しておきたいと思います。
## 使用するパッケージ
[npm tar](“https://www.npmjs.com/package/tar”,”npm tar”)
## よく見る実装方法
“`typescript
import * as fs from ‘fs’;
import * as zlib from ‘zlib’;
import * as tar from ‘tar’;const tgzPath = ‘/file/hoge.tgz’;
const outPath = ‘/path/output’;const gunzip = zlib.createGunzip();
const extractor = tar.Extract({path: outputPath});fs.createReadStream(tgzPath).pipe(gunzip).pipe(extractor
PWAを試してみよう
扱ったことがなかったので、PWA(Progressive Web Apps) を試してみようと思います。
WebページをPWAとして設定することで以下のことができます。
* Webアプリなのに、ネイティブアプリのように、Android/Windowsにアプリとして登録することができる。
* アドレスバーのようなブラウザっぽさはなく、全画面でネイティブアプリのように起動することができる。PWAのService Workerの機能を使った実装をすることで、以下のことができます。
* Webコンテンツをキャッシュ化することができ、オフラインで動かすことができる。
* サーバ側からPush通知ができる。ということで、今回の投稿では、PWAの設定方法と、Push通知の実装をしてみます。
ただ作るだけではモチベーションが上がらないので、パスワード管理アプリ「パスワードマネージャ」を作成します。
世の中にいろいろなツールがありますが、やっぱり自分で管理したいので。。。毎度ながら、ソースコード一式をGitHubに上げておきました。
poruruba/pwa_test
https
Steinを使ってSpreadSheetのデータをとるときのメモ
#準備
1.Steinにアカウント登録(Googleアカウント) このとき、SpreadSheetへのアクセス許可がなされる。
2.SteinのSpreadSheetのURLを貼り付けるところがあるので、扱いたいSheetのURLをコピペ どのファイルなのかを指定する目的
3.Stein上に表示されるAPIのURLをコピー Steinを通してSpreadSheetにアクセスされる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737206/fb71f1df-09b1-d8ce-138b-b9c75e3787eb.png)
4.Node.js(今回使う言語)上にコピペ“`javascript
// Read Sheet1
const SteinStore = require(“stein-js-client”);
const store = new SteinStore(
“https://api.steinhq.com/v1/storages/xxxxxxxxxxxxxxx
部屋が乾燥してきたらGoogleHomeで知らせてもらう
# はじめに
今年の冬は、例年以上に湿度に注意という事で、湿度が低いときはGoogleHomeに注意してもらうことにした。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203949/94ee9ef4-78ce-4eee-548c-c6dd8e9bf31d.png)
# ハード
– RaspberryPi 3B
– GoogleHome (私のはminiです)
– SwitchBot 温湿度計
– 母艦(Windowsマシン。何でも良い)# モジュール
主なモジュールは以下の通り。
– Raspberry Pi OS:Buster(2020-05-27-raspios-buster-armhf)
– Node.js
– castv2-client
– VoiceText
– node-switchbot
– ~~Ambient(予め準備しておく:[Ambient](https://ambidata.io/refs/node-js/))~~Ambient ヤメました。1年間しか
RaspberryPi で castv2-client を使ってGoogleHomeをしゃべらす
# はじめに
これまでは google-home-notifier を使って RaspberryPi からGoogleHomeをしゃべらせていたのだが、RaspberryPi を構築しなおしたら全く動かん!色々調べてみたら動かない記事が沢山あって皆さん苦労しているようだ。castv2-client なるものでも GoogleHomeをしゃべらすことができるらしいのでやってみた。# 環境
– RaspberryPi 3B
– GoogleHome (私のはminiです)
– 母艦(Windowsマシン。何でも良い)## Raspberry Pi OS
RaspberryPiのインストールは済んでいるもとします。“`bash
~ $ cat /proc/device-tree/model
Raspberry Pi 3 Model B Rev 1.2~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (