JavaScript でスプレッド構文使ってオブジェクトから pick する
こういうのがある
const obj = { a: 1, b: 3, c: 5 };
ここから a, b だけを取り出した
{ a: 1, b: 3 }
を作りたい
結論
こうすれば良い
const picked = (({ a, b }) => ({ a, b }))(obj);
流れ
スプレッド構文*1使ってこんな感じで要素を取り出せる
const { a, b } = obj; console.log(a, b); // => 1 3
関数にして同じことやるとこんな感じ
const proc = ({ a, b }) => { console.log(a, b) }; proc(obj); // => 1 3
戻り値で受け取るとこんな感じ
const fn = ({ a, b }) => { return { a, b } }; const picked = fn(obj); console.log(picked); // => { a: 1, b: 3 }
なので省略して書くと
const picked = (({ a, b }) => { return { a, b } })(obj);
return も省略できる*2ので
const picked = (({ a, b }) => ({ a, b }))(obj);
VSCode に Makefile のタスクを追加する
流れ
Configure 開く
Create tasks.json する
Others 選ぶ
tasks.json の雛形ができるのでこんな感じで書き換え
( ${relativeFile} みたいにすると「現在開いてるファイルの相対 path 」が取れる)
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "make: test current file", "type": "shell", "command": "make", "args": [ "test", "path=${relativeFile}" ], "presentation": { "panel": "dedicated", "clear": true, "focus": true } } ] }
Run Task 実行
tasks.json につかした label が表示されているのでそれを実行
こんな感じで下に表示される
絵文字を判定する正規表現
以下の記事の最初だけを読んで
/\p{Emoji}/u.test("😃");
みたいに書けば良いのかなぁと思ったらそうではなかった。
読み進めるとこんな風に書きましょう、というのが出てくる。
/\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
で、 unicode.org にある emoji-data ってのを見てみた。
http://unicode.org/Public/emoji/12.0/emoji-data.txt
0..9 が入ってる。
0030..0039 ; Emoji # 1.1 [10] (0️..9️) digit zero..digit nine
1 がどうなるか試してみる。
> /\p{Emoji}/gu.test("1") true
おー!たしかに。
> /\p{Emoji}/gu.test("あ") false
「あ」だとちゃんと false になる。
提案されているやつで 1 を試す。
> /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu.test("1") false
ちゃんと false になった。
terraform で workspace 使って環境ごとの変数の読み込みをする
terraform の workspace 使っていて「本番と staging で変数名変えたいときにはどうするんだろうなぁ?」って思って調べたんだけど、
ドキュメント探してもたどり着かず、結局以下の issue のようにした
Feature: Conditionally load tfvars/tf file based on Workspace · Issue #15966 · hashicorp/terraform · GitHub
以下のようなディレクトリ構造だとして、
. ├── main.tf ├── modules └── workspaces ├── production │ └── tfenv.json └── staging └── tfenv.json
例えば staging の tfenv.json が以下のようになっているときに
{ "db_host": "staging.example.com", "db_name": "staging" }
main.tf に以下のように書いて解決。
locals { // デフォルト値があるやつはここに書いちゃう default_env = { db_name = "default_db" } tfvarsfile = "workspaces/${terraform.workspace}/tfenv.json" tfvarsfilecontent = fileexists(local.tfvarsfile) ? file(local.tfvarsfile) : "{}" tfvars = jsondecode(local.tfvarsfilecontent) tfenv = merge(local.default_env, local.tfvars) } module "base" { tfenv = local.tfenv source = "./modules" }
iPhone 故障で Suica 引き継げずに新しい iPhone になってしまった場合には iCloud.com から削除する
メールアドレスのドメインチェックで問題ないやつがエラーになる
node でメールのアドレスのドメインチェックするのに dns 使ってるんですが、
dns.resolveAny(domain, (err, records) => { if (err) { // 1. ドメインが存在しないのでエラー return; } const mailRecords = records.filter((record) => { return record.type === 'MX' || record.type === 'A' || record.type === 'AAAA' }); if (mailRecords.length === 0) { // 2. ドメインあるけどメール使えないのでエラー return; } // 問題なし });
の 2. に関してたまにエラーになって欲しくないやつがあって困る。
例えば softbank.ne.jp の結果が
[ { "value": "ns003.bbtec.net", "type": "NS" }, { "value": "ns004.bbtec.net", "type": "NS" }, { "nsname": "ns003.bbtec.net", "hostmaster": "root.softbank.ne.jp", "serial": 2019010901, "refresh": 1200, "retry": 600, "expire": 2419200, "minttl": 1800, "type": "SOA" } ]
みたいになったりする。
どういう状態なんだろうか?使い方間違ってるのかなぁと思いつつたまにしかエラーにならないしわからん。
builderscon tokyo 2018 行ってリフレッシュしてきました
前夜祭の朝から気合いを入れて行きました
今日 #builderscon 行くからビルコンTシャツで行こうかなと思ったんだけど、1つは実家のパジャマになってるし、もう1つは今日着てたパジャマだったし、結果洗濯し終わったばかりのパジャマの派手ピンクなやつになった
— monmon (@lesamoureuses) 2018年9月5日
前夜祭の IoT 話楽しかった
闇の話、ヤバいしか書けないないけど「あー、使ってたライブラリの開発が終わってしまったから書き換えないといけないのかー」がとても小さく思えるレベルだった。
ペパボのデモ、かわいくてよかった。
ペパボ Make部発表のロボットボールかわいい #builderscon pic.twitter.com/vVybD2EixZ
— monmon (@lesamoureuses) 2018年9月6日
もう1つの発表の歯ブラシスタンドで「光らないんですけど笑」がネタっぽくなってて笑っちゃったけど上手くいってるのか失敗してるのかわからないから光らせるの大事なのねと理解した。
IoT 光るの大事なんだなってことがわかった #builderscon
— monmon (@lesamoureuses) 2018年9月6日
初日朝に電子名札いじった
「会場のネットワークが設定済みです」的なこと書いてあったんだけど、「 Mac から直接画像突っ込むし、まぁ関係ないよね」と思って画像突っ込んで再起動したらネットワークなくてQRコード取りに行けなくなっちゃったみたいでエラーになった。ということで会場で設定し直して上手くいきました。とりあえずでやるとこういうことあるけどそういうの含めて楽しかったので良い良い。
家でとりあえず画像突っ込んでみるかって試したらネットワーク設定してないからQRコード取れなくてエラーになった。なるほど盲点。 #builderscon #nafuda pic.twitter.com/eQerr1RjVT
— monmon (@lesamoureuses) 2018年9月6日
懇親会と HUB 良かった。
ぼっちだったので懇親会では隣りにいた人を捕まえて話をした。オンプレでインフラエンジニア1人な環境の人で、技術話だけじゃなく会社の話も面白かった。こういう集まり、隣りの知らない人に話しかければ何かしら面白い話できる。
HUB ではスタッフの人たちと話してたらすぐに終わってしまった。話足りなかったなー。ボウモア美味しかったです。
ボウモア12年美味しいです #builderscon pic.twitter.com/ctb5C0YzuT
— monmon (@lesamoureuses) 2018年9月7日
多目的教室2倍くらいの大きさが欲しい
懇親会で話した人も言ってたけど、多目的教室すぐ満席になってしまうので多目的のトークいくつか聞くの諦めてしまった。「メインホールとイベントホールに居ればいっか」みたいな感じに。
多目的教室すぐ満席になっちゃうから慶應の方にスケールアップをお願いしたい #builderscon
— monmon (@lesamoureuses) 2018年9月7日
入ることができた場合でもスクリーンが1つだったため、逆側一番前に座るとほぼ真横向く上に隣りの人の動きが気になっちゃうっていう辛さあった。
多目的教室、スクリーンの真逆の列から見てるのだいぶ辛かった。横の人に被らないように机の向きをスクリーン側に角度付けて欲しい #builderscon
— monmon (@lesamoureuses) 2018年9月8日
のだけど、これはすぐに反応してもらって机の向きが変わってました。すごい!
(残念ながらそのあと僕は座ってないのでもしこれによって良くないことがあったら僕のせいですごめんなさい)
申し送りしました!
— Daisuke Maki (anovaさん) (@lestrrat) September 8, 2018
今年も ajitofm 聴けました
今年も面白かったんだけど短い時間の中でたくさんのカテゴリ話さないといけないってなると深い話に行けずに回さないとで大変そうだなという感じだった。
わぁ、これが #ajitofm かぁ! #builderscon pic.twitter.com/pwhXTPno2W
— monmon (@lesamoureuses) 2018年9月8日
トミールさん、昔から常に何かを何かに変換しているイメージある #builderscon
— monmon (@lesamoureuses) 2018年9月8日
HUB に来たら #ajitofm の人たちが居たので飲んでます #builderscon pic.twitter.com/ZX8OjyJGD0
— monmon (@lesamoureuses) 2018年9月8日
今年も builderscon 楽しかったです!
トークについては feedback から返すことができてそこに直接感想送れるの良かったです。
聴いた中では kazuho さんのトーク は普段全然触れていないのでわからないところ多々あったんだけど「こういう問題あったよ」「こう解決したよ、まだこういう問題もあるよ」の流れわかりやすくてきっかけとしてすごく良かった。
「朝一セッション行こうかなぁどうしようかなぁ」と思ってたんだけどこのために早起きして良かった。
ということで今年も builderscon 楽しかったです!
全く知らない話に触れるきっかけたくさんあって普段の仕事の時と気分が変わる。
スタッフの方々も外から見てるとだいぶ余裕ある感じでわぁすごいという感じだった。運営ありがとうございました。