- 1. 初めての Azure Bot Service – Sample code と local test 編 –
- 2. `let`にあんまり知られてなさそうな性質が結構あった話
- 3. 色空間を 3D で可視化した Web アプリで色への理解を深める
- 4. webサイトの更新の表示をgithubのreleaseで管理
- 5. 初心者による ES6 関数
- 6. JSON.Stringifyで循環オブジェクト参照構造体が処理できないのをcycle.jsで処理した
- 7. VueとFirebaseと使ってAtCoderのAC数をツイートするウェブアプリケーションを作った
- 8. toioとTwitterAPIを合わせて使ってみた!
- 9. 【Next.js/Nuxt.js】Nuxt.jsで言うasyncData()のNext.js版→getInitialProps()
- 10. Cloud Functions for Firebase で環境変数を扱うための方法
- 11. M5StickCのディスプレイに現在の天気を表示する。
- 12. 【ニコニコ動画】他人のマイリストを自分のとりあえずマイリストに一括登録するブックマークレット
- 13. plugin実践編:vue-scrolltoでスムーズにスクロール
- 14. Javascriptコーディングでグローバル汚染を防ぐために即時関数を利用する方法
- 15. JavaScriptのclass構文を使わないクラスと継承
- 16. ブロックリーゲームズ:タートル9 正解でない?
- 17. 初心者による ES6 引数
- 18. 同じテーブル内に複数の外部キーを設定する方法!!
- 19. Strapiに認証機能を追加する(特定のユーザしかAPIが呼べない仕様に変更する)
- 20. モダンブラウザにおけるキー入力のキャンセル
初めての Azure Bot Service – Sample code と local test 編 –
# はじめに
今回は Azure Bot Service を使用して連続した対話に対応できる Bot を作成します.
Azure Bot Service を初めて使用する人を(できる限り)想定してます.
(熟練の方々からしたら退屈するかと思います.)また,今回は Bot の sample を local test するところまでで
Azure への Deploy については次回行います.(訂正や指摘などあれば,温かく教えていただけると助かります.)
# 私の開発環境
– PC : surface laptop2 (windows 10)
– Editor : VS CodePC に関しては何でも大丈夫です.
Editor に関しては 本記事を参考にされる場合は VS Code をご使用ください.
(後程お話しますが, Azure への deploy 時に VS Code の Extension を使用しています)# Azure Bot Service の概要
Azure Bot Service とは,Microsoft 社のクラウドサービスである Azure のサー
`let`にあんまり知られてなさそうな性質が結構あった話
# 前書き
“`javascript:A
for (var i = 0; i < 5; i++) { setTimeout(() => {
console.log(i);
}, 100);
}// 5 5 5 5 5
“`“`javascript:B
for (let i = 0; i < 5; i++) { setTimeout(() => {
console.log(i);
}, 100);
}// 0 1 2 3 4
“`
この2つのコード、`var`と`let`の違いとしてそこそこ有名なものだと思います。この動作自体に文句はありませんし、自分もそういうもんだと思って使っていたのですが・・・
よくよく考えると**B**のコード上では
1. `console.log(i)`は`let`で宣言された変数`i`を参照している
2. `let`で宣言された変数`i`は、`for`文によってインクリメントされている
3. `console.log(i)`が実行されるのは、`for`ループが完了した後であるという処理になっているため、**
色空間を 3D で可視化した Web アプリで色への理解を深める
0. はじめに
=========色に関して「ちゃんと知りたい・理解したい」と思っている方、実は多かったりしないでしょうか。
私は以前、下記のようなもやもやした気持ちを抱いていました。– 色が見える根本的な仕組みを知りたいけど、なんか難しそう
– 「RGB」とかって、なんとなく分かるけどよく知らない
– 「彩度」と「明度」という言葉をたまに聞くけど、ぶっちゃけよく分からない(でも日常生活は困らない)
– 資料作成やデザイン関連作業で、色をどうやって選んだらいいか分からない・なかなか出したい色にたどり着けずイライラする本記事では、上記のような色に関する素朴な疑問の解決(もしくは解決への糸口)を可能な限り目指して、**色及び色空間に関する基礎的な内容**をご紹介したいと思います。
背景としては、この年末年始に下記動画のような **[色空間を 3D で可視化する Web アプリケーション ―ColorSpace―](https://colorspace.choo.works/)** を趣味で開発したこともあり、開発の目的だった**「色空間の直感的な理解」**を一人でも多くの
webサイトの更新の表示をgithubのreleaseで管理
# TD;LR
webサイトの更新履歴をgithubのリリースで管理したら便利だった
releaseの更新に合わせてツイートをするgithub actionsを作った# releaseで管理
よくウェブページについている下みたいな更新履歴を作ろうと思ったけど“`
20xx/0x/xx xxxxxの内容を更新
20xx/0x/xx xxxxxを追加
20xx/0x/xx xxxxxを更新
“`
ファイルにまとめたりして一々追記していくのが嫌だったのでgithubの機能を使いました。## release機能
releaseはgithubの機能でリリースノートや添付ファイルを付けてユーザーに公開する事ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256522/fc7007d8-2e0a-f759-0252-69a6c877b39e.png)
ここの`releases`と書いてある部分から作成でき、
初心者による ES6 関数#複数の戻り値を個別の変数に代入する
「関数から複数の値を返す」ためには、配列/オブジェクトとして値を一つにまとめる方法があります。
そのような場合には、“`javascript:sample.js
function getMaxMin(…nums) {
//配列で返す
return [Math.Max(…nums), Math.Min(…nums)]
}//分割代入
let [Max, Min] = getMaxMin(1,2,3,4,5)
//Maxがいらない場合(最大値は切り捨てられる)
let [, Min]
“`
#タグ付きテンプレート文字列
変数を埋め込む際に「<」「>」などの文字列を「<」「>」に置き換えたい(エスケープしたい)ときに、役立つのがタグ付きテンプレート文字列です。
タグ付きテンプレート文字列の実態は、単なる関数呼び出しでしかありません。“`
関数名`テンプレート文字列`
“`
の形式で呼び出されます。タグ付きテンプレート文字列で利用するためには、関数は次のような条件を満たしておく必要があります。“`
1. 引
JSON.Stringifyで循環オブジェクト参照構造体が処理できないのをcycle.jsで処理した
#概要
https://qiita.com/saitoeku3/items/9e9a608e53029d541a8f
と同じエラーにあったので、cycle.jsで処理したサンプルコードを紹介するよというお話##cycle.js
https://github.com/douglascrockford/JSON-js/blob/master/cycle.js##インストール
“`
npm install json-cyclic
“`##サンプルコード
“`
//import
const decycle = require(‘json-decycle’).decycle;
const retrocycle = require(‘json-decycle’).retrocycle;
……
//文字列に変換
receiveNewAcString = JSON.stringify(receiveNewJson, decycle());//JSONオブジェクトに変換
receiveNewAc = JSON.parse(receiveNewAcString, retr
VueとFirebaseと使ってAtCoderのAC数をツイートするウェブアプリケーションを作った
# 概要
AtCoder上でのAC数を1日1回ログインしたツイッターアカウントでツイートしてくれるdevotterというアプリケーションを作成したよというお話##リンク
– https://devotter.app/##スライド
– https://www.slideshare.net/KaoruIshizawa/devotter##Github
– https://github.com/10kaoru12/devotter_backend
– https://github.com/10kaoru12/devotter_frontend## ソースコード(フロントエンド)
“`
{{errorMessage}}
toioとTwitterAPIを合わせて使ってみた!
# toio.jsとTwitter APIを合わせて使ってみた
久しぶりの記事投稿。今回は[toio](https://toio.io/#four-attracts)をJavascriptで制御するのとTwitterAPIを合わせて使っていく。
## toioとは
toioとはソニーインタラクティブエンタテインメントより発売されているロボットトイである。詳しくは公式サイトを見てほしいが、子供から大人まで楽しめるモノになっている。公式から[toio.js](https://github.com/toio/toio.js)というNode.js(サーバサイドで動くJavaScript環境)のライブラリが公開されているので今回をそちらを利用していく。## 今回やること
toioの最大の特徴は主役であるデバイスのキューブ(下図)の光学センサーを用いて、付属のマットやシールに施されている特殊印刷を読み取り、キューブの絶対座標やIDを取得できる点だ。
【Next.js/Nuxt.js】Nuxt.jsで言うasyncData()のNext.js版→getInitialProps()# Next.jsのgetInitialProps()
Next.jsでも、Nuxt.jsで言うところのasyncData()にあたる処理と思われる処理を見つけました。
`getInitialProps(context)`です。詳しくは、[getInitialProps | 公式サイト(英語)](https://nextjs.org/docs/api-reference/data-fetching/getInitialProps)に記載があります。
画面表示前にfetchができるとのことです。※もし認識に誤りがある場合はコメント頂けるとありがたいです。
# 説明
getInitialProps()の引数は、[Context Object | 公式サイト(英語)](https://nextjs.org/docs/api-reference/data-fetching/getInitialProps#context-object)です。
jsxの`this.props`に`getInitialProps()`でreturnしたオブジェクトのプロパティが入ってきます。
Cloud Functions for Firebase で環境変数を扱うための方法
# はじめに
Functionsにcrediancalな情報をもたせるにあたって、
可能な限り環境変数をそのまま利用した形式にしたかったのでその作業録となります。外部APIのトークン情報などを環境変数で管理しており、CIや手元では環境変数の値で向き先を切り替えるといったことをしているので、可能な限りそこに合わせたかった都合もあります。
今回使用した言語はJavascriptで、[webpack](https://webpack.js.org/) + [Jest](https://jestjs.io/)を利用している構成になります。
JavaScriptでWebpackを利用したFunctionsに関しては[Cloud Functions for Firebase入門 (簡単なテストまで)](https://qiita.com/glassmonkey/items/a8a8a5f0b7c16b940f46)で記載したので、もしよければご確認ください。
# 公式が推奨する方法について
## 設定値をデプロイする方法
まず最初に公式で紹介されている設定値を与える方法を説明します。
M5StickCのディスプレイに現在の天気を表示する。
#はじめに
[obnizOSを搭載したM5StickC](https://obniz.io/ja/doc/m5stickc/hw_overview “M5StickC”)のディスプレイに現在の天気を表示したいと思います。HTMLとJavaScriptしか使わない簡単なコードなので、プログラミング初心者にも優しくなっています。
天気を取得するには[OpenWeatherMap](https://openweathermap.org/ “OpenWeatherMap”)という無料のAPIを使用します。
# 完成品
# 用意するもの
– [obnizOSを搭載したM5StickC](https://obniz.io/ja/doc/m5stickc/hw_overview
【ニコニコ動画】他人のマイリストを自分のとりあえずマイリストに一括登録するブックマークレット
友人用に作成したけど、需要あるよと言われたので公開してみる。
他人のマイリスト一括で自分のとりあえずマイリストに登録するブックマックレットです。
#コード“`javascript:
var token = document.getElementsByClassName(‘content_672’)[0].getElementsByTagName(‘script’)[1].innerText;
token = token.replace(‘FavMylist.csrf_token = “‘, ”).replace(‘”;’, ”).replace(‘\n’,”).replace(/\s+/g, “”);
var watch = document.getElementsByClassName(‘watch’);
var list = ”;
for(var i = 0 ; i < watch.length ; i++){ var url = watch[i].href; var index = url.indexOf('sm'); var id = url.sli
plugin実践編:vue-scrolltoでスムーズにスクロール
# vue-scrolltoとは
ページ内リンク(アンカーリンク)で
スクロールしながら指定場所に飛びます?♀️?
**【公式】**
https://www.npmjs.com/package/vue-scrollto# 比較: vue-scrollto未使用
味気ない?
nuxt-linkを使うと1回しか機能しない
a hrefでやれば解決するけど…
どうせならnuxt-link使いたいじゃない![anchor.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469755/12a2d9b6-20fd-9815-78b8-751c9fe76f80.gif)
“`index.vue
下に飛ぶ
とべた!
“`# 比較: v
Javascriptコーディングでグローバル汚染を防ぐために即時関数を利用する方法
Javascriptを用いた開発を行うときに、一般的に出回っている入門書のように、jsファイル内でそのまま変数を定義すると、他のjsファイルを読み込んだ際に、変数がバッティングしてコンテンツの機能が停止することがあります。
こういったことはバグの元ですし、特にチーム開発では大きな支障があります。それを防ぐために、一つのjsファイル内で作成した変数が他コンテンツに干渉しないようにする必要があります。
具体的には、jsファイルを即時関数で囲うことになります。
以下に2通りのひな型を記します。“`javascript
(function (root) {
var initialize = 以下略
var insert = 以下略root.SomeThing = root.SomeThing || {};
// 他のjsファイルで用いたい関数を以下に記述
root.SomeThing.Main = {
initialize: initialize,
insert: insert
};}(typeof window ==
JavaScriptのclass構文を使わないクラスと継承
現在ではどのブラウザや環境でも、とりあえず提供されてる最新の安定バージョン使っておけばclass構文や、それにより提供されるconstructor、extendsによるサブクラスの作成(継承)が実現できます。
しかしJSの上記構文はあくまでシンタックスシュガーとなっており、裏ではprototypeにより実現されています。
私自身の考えですが、裏がどう動いているかを理解することで、表をより深く理解できると考えていますので、本記事はES2015以降見かけなくなったprototypeにを用いたクラスと継承を考えます。
今現在この記事を参考にprototypeを用いたコードを書くのはオススメしません。
以前書いていたようなコードだとしても・class構文がシンタックスシュガーだとしても、prototypeを汚染しかねないコードなのであくまで参考程度に
—
前提として、現在よく使われるJavaScriptのclass構文と継承は以下のようになります。
“`javascript:es2015
//getter,setterの都合上プロパティにはアンダースコアをつけています。
/
ブロックリーゲームズ:タートル9 正解でない?
ブロックリーゲームズ:タートル9
暗い色は、「このように描画せよ」という問題
色は間違っていない。
正解判定にならず、次の問題へ移行しない。
![ブロックリーゲームズ:タートル9_できているのになぜ?.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76087/5a4a4a9b-460b-2da2-e5e1-5f1453f9cb50.gif)
初心者による ES6 引数
#引数のデフォルト
ES6では引数のデフォルト値を宣言するには、「仮引数=デフォルト値」という形式で宣言します。“`javascript:sample.js
function getPluss(a = 0,b = 0){
return a + b
}console.log(getPluss(1, 2))
“`##デフォルト値を使う場合の注意点
###1. デフォルト値が適用される場合、されない場合
デフォルト値が適用されるのは、引数が渡されなかった場合です。null, false, 0, 空文字列であっても、引数に渡されているのであればデフォルト値は適用されません。ただし、undefinedは大丈夫です。undefinedは「定義されていない = 渡されていない」だからです。“`
null / false / 0 / ‘ ‘ –> デフォルト値が発動しない
undefined –> デフォルト値が発動する
“`##デフォルト値を持つ仮引数は、引数リストの末尾に置く
これは慣例として、デフォルト値を持つ引数の後方に持たない引数を記述するべきではない。
同じテーブル内に複数の外部キーを設定する方法!!
##はじめに
某プログラミングスクールで、担当した実装を復習していきたいと思います。
今回は、出品・取引中・売却済みのこの3つをクリックした際に、それぞれにあった商品を
表示させる実装を行いました。これを実装するにあたって、1つのテーブル内に複数の外部キーを設定する必要があり、
ここで詰まったため、記録として残していきます。ちなみにこんな感じの実装をしていきます。
![c0b6f5dcc3487ef71b3605eb6e99ffe0.gif](https://i.gyazo.com/c0b6f5dcc3487ef71b3605eb6e99ffe0.gif)##工程
今回は、工程を以下に分けて説明をしていきます。
1.実装の大まかな説明とマイグレーションファイルの作成
2.モデルの作成
3.コントローラーの作成
4.hamlでの条件分岐設定
の順で行っていきます。
少し、長いですががんばっていきましょう。##解説
1.実装の大まかな説明とマイグレーションファイルの作成はじめに出品中・取引中・売却済みを区別するために、
productというテーブル内に、seller_i
Strapiに認証機能を追加する(特定のユーザしかAPIが呼べない仕様に変更する)
## Strapi APIに認証機能を追加してみる
前回の記事「[Strapi (Headless CMS)を使ってみたので使い方まとめ + GraphQL](https://qiita.com/mtoyopet/items/46d3f6edbaaed4f0065c)」でHeadless CMS「Strapi」を使って簡易APIを作ってみました。
今回は特定のユーザしかAPIを呼び出せない様に、APIに認証を付けていきたいと思います。ちなみに「[公式サイト](https://strapi.io/documentation/3.0.0-beta.x/plugins/users-permissions.html#concept)」に詳しく説明が載っているので、英語が読める方はこちらを読んで進めることを強くお勧めします。
この認証機能を使ったVueアプリのレポジトリーはこちらです
・ [レポジトリ](https://github.com/mtoyopet/strapi-vue-app-cdn)## 事前知識
Strapiでは、「ロールと権限」というプラグインを使って認証を行いま
モダンブラウザにおけるキー入力のキャンセル
## モチベーション
Markdownエディタを作っていたが、Macの動作がWindowsやLinuxとは微妙に異なり、仕様変更が余儀なくされた。
一方で、Fire Foxは異なるOS間でも一貫性をもっており、素晴らしい。
ChromeはIME入力時のKeyDownイベントでevent.keyの値が非IME時と異なってくれれば制御しやすかった。、特に開始時には非IMEでの入力と区別ができないので困った。
新Edge(Chromium)は今回は未調査。おそらくChromeと同様だろう。
## 基本的な方針と解決策
Markdownに対応したリッチなユーザー操作をさせつつ、Undoの履歴を完全に管理するには次の二通りの方針が考えられる。
1. ブラウザによるDOMの操作はさせない。ユーザーによるキー入力をpreventDefaultし、その上で、そのキーに対応したDOM操作を自前で全て実装し、自前のUndo履歴に登録する。
2. ブラウザによるDOM操作を行わせた後、操作された痕跡を調査してその内容をUndo履歴に登録する。ここで、今回は前者の方針を取った。後者の場合だと