OmniAICreator/Qiita-1.07M huggingface dataset:
Simulated Annealing 法　（日本語：やきなまし法）  基本編

SAは、冶金額におけるやきなましから着想を得た軌跡ベースのメタヒューリスティックス手法であり、多くの組み合わせ最適化問題を解くために適応され、一般的な問題から特化したものまで、長年にわたって改良・変形されてきた。

実現可能な初期解 ｘ０ がランダムに生成され、各反復iにおいて、その反復で検討された解xiの近傍N（xi）から新しい（yi）がランダムに生成される。

新しい解が現在の解よりも優れている場合、アルゴリズムはその解に移動する。そうでなければ、悪い解に移行する確率が与えられている。

より悪い解を受け入れることで、最適な解をより広く探索することができ、初期の反復において局所最適に陥ることを避けることができる。

要は、今、探している解が局所解かもしれず、もしかしたら、もっとよい解があるかもしれない。そこを判断するパラメーター（近傍：といいます。近傍は、別途、説明します。）がある確率変数で決定されます。一旦、悪い解を受け入れるとは、山登りの谷を想像すると分かるように、一旦、山を降らないと、一番高い山（を目指すことをゴールとしています）に行けないというイメージです。

このメタヒューリスティクス（ちなみに、東工大のAIのクラスで、AIと数理モデルの合いの子、中間みたいイメージだと教えてもらいました）は、とても人間が考える手段と似ています。

今、このSAを開発中です。
Java SE 11 パイプでOutputStreamとInputStreamを接続する

```
        /* インスタンス */
        PipedOutputStream pipedOutputStream = new PipedOutputStream(); //パイプの送信側 上流
        PipedInputStream pipedInputStream = new PipedInputStream(); //パイプの受信側 下流

        /* 送信側と受信側の接続 */
        pipedOutputStream.connect(pipedInputStream); //connect()は送信側と受信側のどちら一方から呼び出す
        

        /* パイプへの送信 */
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(pipedOutputStream))
        bufferedWriter.write("テキスト");
        bufferedWriter.flush(); // flush()を呼び出すことでデータは受信側のバッファに送られる

        /* パイプからの受信 */
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pipedInputStream))
        System.out.println(bufferedReader.readLine());

        /* 切断 */
        bufferedWriter.close() //送信側のclose()を呼び出しても受信側のバッファを読み込むことは可能
        bufferedReader.close()
```

#参考
[PipedOutputStream](https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/io/PipedOutputStream.html)
[PipedInputStream](https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/io/PipedInputStream.html)
【VSCode】コードは正しいがエラー表示が出るとき

##背景
プログラミングを学び始めた初学者です。
コードが合っているにも関わらずエラーが表示されてしまい、解決に手間取ったので同じような状況で悩んでいる方に向けて書いています。

##前提
PHP 8.1.1<br>エディタ Visual Studio Code

##症状
簡単なコードを書いていた際に、次のようなエラーが出ました。（実際のエラー発生のコードではありません）![スクリーンショット 2021-12-28 15.07.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2408438/37e1e0fc-2e4d-3806-3978-ebd3d7ac7974.png)
構文は正しいのですが、ブラウザでも表示されず。（まあ、正しくないので表示されないんですが、それは置いといて。）
エラー文は「echoという記号は使用が予想されていませんよ」と出ています。

##原因と解決法
エラー表示の出ている文の一つ上の行（ここでは<?php）の後ろに、全角のスペースがあったことが原因でした。スペースを消したらエラーもなくなりました。
コメントを残しておく際などに、気付かず全角でスペースをつけてしまい、エラーが出ることがあるかもしれません。
分かればなんてことなかったのですが、無駄に時間を費やしてしまったので、気をつけてください。
「Microsoft Teamsで投稿に「いいね」をしていないひとに対してスケジュール実行でメンションする」を加工した話

Microsoft Teamsで投稿に「いいね」をしていないひとに対してスケジュール実行でメンションするという記事を利用するにあたり、メンバー管理をExcelのリストで管理することで、対応出来ないかと思い実行した時のメモ

https://qiita.com/wataruf01/items/f72465433c7aca0b0f81

##変更した理由
元の記事では変数にメンバーを定義する際、値に直接メールアドレスを記入していました。
その為、メンバーの追加・削除等が発生した場合、PowerAutomateそのものをいじる必要がありました。
まだ弊社ではPowerAutomateそのものが浸透しておらず、大変ハードルが高い。
でも使ってみたいが、何とかならんか。という話があり、Excelをいじるだけなら出来るということから、今回の加工となりました。

##修正箇所
元の記事では、変数を初期化してメンバーを定義を行いました。
今回は図のように２アクション追加し、Excelのリストを読み込み定義しました。

![image003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1737197/dc204fa7-b888-c9a1-a824-8bbeebb7b06d.png)

##Excelファイル
Excelでは管理しやすいように名前とＥメールをセットにして作成しています。
フローで名前を使用しませんが、メンバーの追加・削除を行う際の管理しやすさを考慮したためです。
Webの勉強はじめてみた その18～Git編②～

N予備校「プログラミング入門Webアプリ」を受講しています。
第2章16,17節を受講しました。

<h2>ブランチ</h2>
:::note
ある時点のソースコードを分岐させて開発をしたもの
本流となるブランチはmaster(またはmain)と呼ばれる
:::

`git branch`
現在のブランチを確認する。

 `git checkout gh-pages`
現在のブランチを以下(gh-pages: GitHub Pages)に変更する。

:::note
checkout : ブランチを切り替え、使用できる状況にすることをチェックアウトという
gh-pages : GitHub Pages に自動的にWebページとしてリポジトリ内容が公開される
:::

`git push origin gh-pages`
origin(リモートリポジトリ)にgh-pagesブランチを`push`する。

`git merge gh-pages`
マージコミット: 他のブランチから変更を取り込む。

<h2>その他コマンド</h2>
`git commit -am "メッセージ"`
既にリポジトリに登録したすべてのファイルの変更をインデックスに加えて、コメントを付けてコミットする

`git diff`
現在のブランチとの差分を確認する。
コンフリクトが起きた時など。

<h2>まとめ</h2>
一通りgitの使い方を学習しました。
とにかく自分に馴染ませるために色々やっていこうと思います。
第二章はこれで終わり、次章からNode.jsをやっていくみたいなので楽しみです。
pythonからYeelightを操作する。

#環境
Python version:3.9.7
OS: windows 10.0
Anaconda:conda 4.11.0

#実装したかった、やりたかったこと
・pythonを使ってyeelight を操作する。

#今後すること
・時間や家の温度によって自動的に動作するようにしたい。
　温度のクライテリアを決めて、onにするとか。

#セットアップ
##1.yeelightパッケージのinstall
pythonにyeelightのパッケージが公開されています。下記でinstallします。


```
pip install yeelight
```
intall後、下記を実行すると、yeelightのipアドレスが取得できます。

```
import yeelight
yeelight.discover_bulbs()
```

##2.code
別ファイルでclassの設定をしてみたかったので、light_action.pyを読み込んで操作るようにした。

```yeelight.py
import time
#user module
import light_action

#Set up 
ye_address = "IPアドレス"
light_action_class = light_action.light_up_rgb_color() #instance
light_action_class.address_set(ye_address) # light address set

#Turn on 
light_action_class.light_turn_on()

light_action_class.rgb_white()
time.sleep(3)
light_action_class.rgb_olive()
time.sleep(3)
light_action_class.rgb_yellow()
time.sleep(3)
light_action_class.rgb_fuchsia()
time.sleep(3)
light_action_class.rgb_silver()
time.sleep(3)
light_action_class.rgb_red()
time.sleep(3)
light_action_class.rgb_gray()
time.sleep(3)
light_action_class.rgb_blue()
time.sleep(3)
light_action_class.rgb_green()
time.sleep(3)
light_action_class.rgb_purple()
time.sleep(3)
light_action_class.rgb_navy()
time.sleep(3)
light_action_class.rgb_teal()
time.sleep(3)
light_action_class.rgb_maroon()
time.sleep(3)

#Turn off 
light_action_class.light_turn_off()

```

yeelightの操作は、別ファイルでまとめてます。

```python:light_action.py
import yeelight

class light_up_rgb_color :
    # 初期処理
    def __init__(self) : 
        bulb_def = ""
        print("initilize")

    def address_set(self, ac_address) :
        self.bulb_def  = yeelight.Bulb(ac_address)        

    def light_turn_on(self) :
        self.bulb_def.turn_on()

    def light_turn_off(self) :
        self.bulb_def.turn_off()

    def rgb_white(self) :
        self.bulb_def.set_rgb(255,255,255)

    def rgb_olive(self) :
        self.bulb_def.set_rgb(128,128,0)

    def rgb_yellow(self):
        self.bulb_def.set_rgb(255,255,0)

    def rgb_fuchsia(self):
        self.bulb_def.set_rgb(255,0,255)

    def rgb_silver(self):
        self.bulb_def.set_rgb(192,192,192)

    def rgb_red(self):
        self.bulb_def.set_rgb(255,0,0)

    def rgb_gray(self):
        self.bulb_def.set_rgb(128,128,128)

    def rgb_blue(self):
        self.bulb_def.set_rgb(0,0,255)

    def rgb_green(self):
        self.bulb_def.set_rgb(0,128,0)

    def rgb_purple(self):
        self.bulb_def.set_rgb(128,0,128)

    def rgb_navy(self):
        self.bulb_def.set_rgb(0,0,128)

    def rgb_teal(self):
        self.bulb_def.set_rgb(0,128,128)

    def rgb_maroon(self):
        self.bulb_def.set_rgb(128,0,0)
'''
# No to set color
    def rgb_black(self):
        self.bulb_def.set_rgb(0,0,0)
'''
```
色々な会社・エンジニアのまとめ of まとめ

## 会社紹介資料まとめ

会社紹介資料です。

https://twitter.com/azu_re/status/1441756069114511365?s=21

https://company-introduction-jp.vercel.app/

https://github.com/azu/company-introduction-jp

https://twitter.com/iwashi86/status/1547824529204183040?s=20

## 研修資料まとめ

各企業無償公開されていますね。公開できる企業には公開できる理由アリに見えます :smiley: 

2022年: [有名企業のエンジニア向け研修資料まとめ - Qiita](https://qiita.com/SMAC/items/f3268b311e11d5b821c0)


https://www.itmedia.co.jp/news/articles/2112/24/news115_2.html

https://gist.github.com/gcchaan/02f4746a323acac4095c30e0783a3912

https://qiita.com/ok2/items/04086f7ee7bde6ab57b9

https://twitter.com/jujulife7/status/1456217641543077891?s=20

https://twitter.com/jujulife7/status/1476509193792532483?t=-Sph4ssWKsBlXtX0Xr5-ww&s=19


## ブログまとめ

同様、企業のブログまとめです。


https://tech.gamewith.co.jp/entry/2018/01/19/191230

https://qiita.com/organizations

[永久保存版！エンジニア向け情報収集サイトをまとめてみた【定期更新】 - Qiita](https://qiita.com/tomox1001/items/384e27b6259efdb6064e#%E3%83%86%E3%83%83%E3%82%AF%E3%83%96%E3%83%AD%E3%82%B0) - テックブログ

https://github.com/koji/awesome-company-tech-blogs

### RSSフィード

https://yamadashy.github.io/tech-blog-rss-feed/

https://qiita.com/yamadashy/items/0130e3e569b0832bc51f


## Twitterアカウントまとめ

https://twitter.com/i/lists/1556807077586079745



## ソースコード公開まとめ

https://zenn.dev/username/articles/2021-11-29-3fe9ccd53b5395d5ad5b

https://qiita.com/e99h2121/items/20fe59cc5625250487f1


## テストまとめ

https://github.com/tadashi0713/howtheytest-jp

## リモートワークまとめ

https://github.com/remote-jp/remote-in-japan

## textlintを使っている会社まとめ

https://zenn.dev/kgsi/articles/a88273d293abe07c5acb

## 女性エンジニアまとめ

https://womeneng.jp/

https://github.com/womenengjp/womeneng.jp

## まとめ of まとめ

https://note.com/chanmoro/n/n4473f2f14a12

これらに力を入れている会社とは、

>「経営者がエンジニアリングをビジネスの成長や競合への差別化の重要な要素と捉えていて、エンジニアリングに対して積極的に投資をしている会社」

ということで以上参考になればさいわいです。
Julia: Redis のデータを削除 (Delete)

```julia:redis_delete.jl
#! /usr/bin/julia
#
#	redis_delete.jl
#
#					Dec/28/2021
# --------------------------------------------------------------------
using Redis
using JSON
# --------------------------------------------------------------------
println(stderr,"*** 開始 ***")
key_in = ARGS[1]
println(key_in)
#
conn = RedisConnection()
#
set_keys = keys(conn,"t*")
#
if key_in in set_keys
	println(stderr,key_in," *** exist ***")
	del(conn,key_in)
	println(stderr,key_in," *** deleted ***")
end
#
disconnect(conn)
#
println(stderr,"*** 終了 ***")
# --------------------------------------------------------------------
```
Gitレポジトリのトップに移動するコマンド

私はIDEやGUIでの操作より、シェルでの原始的な操作の方が好きなのですが、シェルにはディレクトリ間の移動（`cd`）がめんどくさいという欠点があります。

そこで、よくある移動操作である「Gitのトップレベルへの移動」を行うコマンドを用意しました。

```shell
t() {
	local toplevel
	toplevel="$(git rev-parse --show-toplevel)"
	if [ $? -eq 0 ]
	then
		cd "$toplevel" && return 0
	else
		return 1
	fi
}
```
Julia: Redis のデータを更新 (Update)

```julia:redis_update.jl
#! /usr/bin/julia
#
#	redis_update.jl
#
#					Dec/28/2021
# --------------------------------------------------------------------
using Redis
using JSON
# --------------------------------------------------------------------
println(stderr,"*** 開始 ***")
key_in = ARGS[1]
population_in = ARGS[2]
println(key_in,'\t',population_in)
#
conn = RedisConnection()
#
set_keys = keys(conn,"t*")
#
if key_in in set_keys
	println(stderr,key_in," *** exist ***")
	str_json = get(conn, key_in)
	unit_aa = JSON.parse(str_json)
	println(key_in, '\t', unit_aa["name"])
	unit_aa["population"] = population_in
	today = Libc.strftime("%F", time())
	unit_aa["date_mod"] = today
	str_json_new = JSON.json(unit_aa)
	println(str_json_new)
	set(conn,key_in,str_json_new)
	println(stderr,key_in," *** updated ***")
end
#
disconnect(conn)
#
println(stderr,"*** 終了 ***")
# --------------------------------------------------------------------
```
MySQLへの登録データをtail -fする

アプリからDBに登録するデータをいちいち検索するのが面倒くさくなったので、リアルタイムで確認したかったんだが、
SQLにはTailみたいなコマンドはなさそうなので、他の方法で代用する。

## 環境

* Mac OS Big Sur
* MySQL 5.7.36

## 手順

MacにはWatchコマンドがなかったのでインストール。

```shell
$ brew install watch
```

指定したクエリを発行しつつテーブルを監視し、追加された箇所をハイライト表示する。

```shell
$ watch -d=cumulative 'mysql -h${ホスト} -P${ポート} -u${ユーザ名} -p${パスワード} ${DB名} -e "select * from ${テーブル名} order by ${登録順序をソートできるカラム} desc"'
```

## 追記

order byで逆順にソートしつつ、cumulativeでハイライトすると、思ったようなハイライトがされないように見える。
limitで絞っても似たような感じ、、なにか他にいい方法はないものか...。

## 参考

https://atmarkit.itmedia.co.jp/ait/articles/1806/29/news037.html
Julia: Redis のデータを読む (Read)

```julia:redis_read.jl
#! /usr/bin/julia
#
#	redis_read.jl
#
#					Dec/28/2021
# --------------------------------------------------------------------
using Redis
using JSON
# --------------------------------------------------------------------
println(stderr,"*** 開始 ***")
#
conn = RedisConnection()
#
set_keys = keys(conn,"t*")
#
for kk in set_keys
	str_json = get(conn, kk)
	unit_aa = JSON.parse(str_json)
	print(kk, '\t', unit_aa["name"])
	print('\t',unit_aa["population"])
	println('\t',unit_aa["date_mod"])
end
#
disconnect(conn)
#
println(stderr,"*** 終了 ***")
# --------------------------------------------------------------------
```
Flutterで,APIの使い方を学ぶために簡易的な天気予測アプリを作った話

<h2>目的</h2>
<p>Flutterで、APIの使い方を学ぶために簡易的なアプリを作りました。<br>APIを学ぼうと考えたのは、自身の勉強用のアプリケーションを作っていく中で,<br>
Cloud上のdatabaseを用いる時にAPIの使い方がわからないので、<br>APIについて学ぼうと思いました。


<h2>参考コード</h2>
下のリンクに自信が作ったweather forecastのコードが載っています。

https://github.com/sugityan/weather_forecast

APIの取得方法について知りたい方は、以下にAPIを取得するためのコードが載っています。

https://github.com/sugityan/weather_forecast/blob/main/weather_forecast_app/lib/network/network.dart

<h2>学んだこと</h2>
APIを取得してそれを利用するには、Database上のJsonファイルについて理解してから、<br>
それをDartファイル(PODOファイル)に変換する必要がある
Julia: Redis のデータを作成 (Create)

text_manipulate.jl はこちら
[Julia: text ファイルの crud](https://qiita.com/ekzemplaro/items/5c7f674ee034a33e2553)

```julia:redis_create.jl
#! /usr/bin/julia
#
#	redis_create.jl
#
#					Dec/28/2021
# --------------------------------------------------------------------
using Redis
using JSON

include("text_manipulate.jl")
# --------------------------------------------------------------------
function data_prepare_proc()
    dict_aa = Dict()
#
    dict_aa = dict_append_proc(dict_aa,"t1851","福井",52961,"2013-5-21")
    dict_aa = dict_append_proc(dict_aa,"t1852","敦賀",17395,"2013-1-16")
    dict_aa = dict_append_proc(dict_aa,"t1853","小浜",31874,"2013-4-14")
    dict_aa = dict_append_proc(dict_aa,"t1854","大野",43512,"2013-2-9")
    dict_aa = dict_append_proc(dict_aa,"t1855","勝山",72691,"2013-8-4")
    dict_aa = dict_append_proc(dict_aa,"t1856","鯖江",25387,"2013-3-21")
    dict_aa = dict_append_proc(dict_aa,"t1857","あわら",81546,"2013-6-23")
    dict_aa = dict_append_proc(dict_aa,"t1858","越前",45291,"2013-12-26")
    dict_aa = dict_append_proc(dict_aa,"t1859","坂井",74839,"2013-11-15")
#

    return  dict_aa
end
# --------------------------------------------------------------------
println(stderr,"*** 開始 ***")
#
dict_aa = data_prepare_proc()
conn = RedisConnection()
#
for key in collect(keys(dict_aa))
	unit_aa = dict_aa[key]
	str_json = JSON.json(unit_aa)
	set(conn,key,str_json)
end
#
#
disconnect(conn)
#
println(stderr,"*** 終了 ***")
# --------------------------------------------------------------------
```

次のバージョンで確認しました。

```text
$ julia --version
julia version 1.7.1
```
Discord.js v13.4.0 でBot自身がタイムアウトされているかの判別

Discord.jsでBotを趣味で作っています。([NikkoBot](http://nikko114.f5.si/discord-bot/nikko-bot/))
タイムアウトされているかを判別するために3時間くらいかけたのでここに残せば皆さんが無駄な時間をかけないで済むかなあと思ったのでここに置いておきます。
実は初の記事投稿です。びっくり仰天。

#環境
+ [Node.js](https://nodejs.org) v17.3.0
+ [Discord.js](https://discord.js.org) v13.4.0

#そもそも「タイムアウト」って何者？
「タイムアウト」とは最近のDiscordのアップデートで追加されたものです。
機能としては

+ テキストチャンネルで発言やリアクション(絵文字)の追加ができなくなる。
+ ボイスチャンネルやステージチャンネルに接続できなくなる。
+ ボイスチャンネルやステージチャンネルに接続していた場合自動的に退出させられる。

などがあります。
サーバー管理Bot ([Dyno](https://dyno.gg/), [MEE6](https://mee6.xyz)) の機能がが進化して公式によって実装された物と考えてください。
以下の画像は私のフレンドがタイムアウトされる様子です。
![タイムアウトの説明1](http://nikko114.f5.si/pictures/qiita/discord-timeout/1.png "俺がフレンドをタイムアウトする様子-1")
![タイムアウトの説明2](http://nikko114.f5.si/pictures/qiita/discord-timeout/2.png "俺がフレンドをタイムアウトする様子-2")
![タイムアウトの説明3](http://nikko114.f5.si/pictures/qiita/discord-timeout/5.png "俺がフレンドをタイムアウトする様子-3")
かわいそうですね。
※プライバシー保護のためアイコンを編集で隠しています。

#本題
※Javascriptの知識がある程度あることを前提にしています。
※事前にDiscordのBotを作っていることを前提にしています。
※最近実装されたばかりの機能なので今後変わるかもしれません。


Discord.jsにはタイムアウトがいつ解除されるかというプロパティしかありません。
([.communicationDisabledUntilTimestamp](https://discord.js.org/#/docs/main/stable/class/GuildMember?scrollTo=communicationDisabledUntilTimestamp))
これを使って判別を行います。

解除される時間を取得することができるので
`今の時間より大きいならタイムアウトされている`
という風に考えることができます。
なので以下のコードを書くことで実装できます。

```javascript:index.js
new Date().getTime() < message.member.communicationDisabledUntilTimestamp

//例:
//もし今の時間が 90 で解除される時間が 120 ならタイムアウトされている。
//もし今の時間が 150 で解除される時間が 120 ならタイムアウトされていない。
```

すごそう！
if文を書くなら以下のように書きます。

```javascript:index.js
if (new Date().getTime() < message.member.communicationDisabledUntilTimestamp) {
    //実行する内容...
};
```

これで万事OK！
※実際はミリ秒までの数字なので何度も確認して実装してください。

#おまけ
ギルドメンバーをタイムアウトさせるときは`timeout()`を使えばいいみたいです。
こっちは簡単なのになあ...
([.timeout()](https://discord.js.org/#/docs/main/stable/class/GuildMember?scrollTo=timeout))

```javascript:index.js
message.member.timeout(60 * 1000, "メッセージを送ってきたから");
//メッセージを送ってきた人を60秒タイムアウトする鬼畜コード
```

#URL集
+ [Discord.js](https://discord.js.org)
+ [Discord.js Documentation](https://discord.js.org/#/docs/)
+ [Node.js](https://nodejs.org)
soucetreeでチェックアウトしようとしたら「error: Your local changes to the following files would be overwritten by checkout:」とでてできなかった

この記事は記録用です。
改めてわかりやすく更新予定です。
現在改良中記事です。

----


```
error: Your local changes to the following files would be overwritten by checkout:
	Pages/Shared/testPage.cshtml
Please commit your changes or stash them before you switch branches.
Aborting
```

リモートのブランチをチェックアウトしようとしたら上記のエラー

```
以下のファイルのあなたのローカルな変更は、チェックアウトによって上書きされます：
	Pages/Shared/testPage.cshtml
あなたがブランチをチェックアウトにより変更してしまう前に、あなたの変化をOKするか、現在のブランチを記録するためにスタッシュなどで記録しておいてください。

```

と和訳できるかな。（確かではないです）

１、チェックアウトで変更してしまうのをOKする
２、変更前をどこかに残すためスタッシュする。

ということで、やることを２択でアドバイスしてくれている。

今回は特に変更上書きされても問題ないと判断したので１を実行

コマンドをターミナルで打つ。

Pages/Shared/testPage.cshtmlのが変更されているらしいので
それをコミットする作業をする。


```
【１】　git add Pages/Shared/testPage.cshtml
```
コマンドの意味は[ここから](https://eng-entrance.com/git-add)※参考サイト

```
【２】git commit -m 'コミットの際のメッセージをここに記載'
```
完了。これでチェックアウトもできるようになった。

以下、コミットした作業が履歴に残った。

```
Merge branch 'feature/RN_testBranch' of https://xxxxxx/xxxxxxx/xxxxxxxx into feature/RN_testBranch	715c183	xxxxxxxx<xxxxx@xxxx.com>	2021/12/28 15:41
```


２、は今回行っていないがスタッシュする。

```
git stash
```

これで完了
コミットしたくない時はこれがいいのかも。
今回の件はこちらでも良かったかも。
どちらにしてももう消してもいいブランチだったので大丈夫かなと判断した。

この事象はざっくりと理解したが
もっとわかりやすくまとめたい。



----

 [参考サイト](https://note.com/koushikagawa/n/n6f7c16a0d9e6)
ラビットチャレンジ　レポート（その3　応用数学-情報理論）

# 情報理論

## 自己情報量
情報の重要さは、そのレアリティにある。
ex.)天気や占いでも、確率の低い事象を当てた方が価値が高い（＝情報量が多い）
という考え方。
定義は以下。

```math
I(x) = -\log(P(x))
```
ここで、$\log$の底は一般的に2を使い、単位はbitを使う。底が$e$（ネイピア数）の時は単位はnatになる。

## シャノンエントロピー
自己情報量の期待値のこと。
式は以下。

```math
H(x) = E[I(x)] = -\Sigma(P(x)\log(P(x)))
```

## KL距離（カルバック・ライブラー　ダイバージェンス）
2つの確率分布の差異を測る尺度。異なる確率分布$P,Q$のKL距離は以下のように定義される。（$P,Q$が離散型確率分布であった場合）

```math
D_{KL}(P||Q) = \mathbb{E}_{x\sim P}[\log{\frac{P(x)}{Q(x)}}]
= \sum_{x}P(x) \log{\frac{P(x)}{Q(x)}}
```

## 交差エントロピー
2つの確率分布の間に定義される尺度。2つの確率分布$P,Q$があった時、$Q$についての自己情報量を$P$の分布で期待値を取ったもの。定義は以下。（$P,Q$が離散型確率分布であった場合）

```math
H(P,Q) = H(P)+D_{KL}(P||Q) = -\sum_{x}P(x) \log{Q(x)}
```
ラビットチャレンジ　レポート（その2　応用数学-確率・統計）

# 確率

## 頻度主義とベイズ主義

  * 頻度確率：発生する頻度。ある事象の発生確率は無限回試行した場合に、真の値に近づいていく（大数の法則）。
  * ベイズ確率：信念の度合い。ある時点で有している情報を元に事象の発生確率を考える。新たな情報が加わわれば情報を改定する。

## 条件付き確率

ある事象$X$が起きた下で、$Y$が起きる確率。ここで、$X,Y$を確率変数、$x,y$をそれぞれの実現値とする。条件付き確率は以下のように表される。

```math
P(Y=y|X=x)= \frac{P(Y=y,X=x)}{P(X=x)}
```

## 独立事象の発生確率
事象$X$と事象$Y$がお互いに無関係であった場合に、事象$X$と事象$Y$の発生確率は、各々の確率の掛算で表すことが可能。

```math
P(X=x,Y=y) = P(X=x)P(Y=y)
```

## ベイズの定理

```math
P(X|Y) = \frac{P(Y|X)P(X)}{P(Y)}
```
で表される。
この式に置いて、左辺の$P(X|Y)$は事後確率、右辺の$P(Y|X)$は尤度、$P(X)$は事前確率と呼ばれる。$P(Y)$は規格化定数、証拠などと呼ばれる。

## 確率変数と確率分布

  * 確率変数：起こりうる事象に割り当てている値（実現値）をとる変数。
  * 確率分布：事象の発生する確率の分布。離散型確率分布と連続型確率分布がある。

## 期待値・分散・共分散

**期待値**とは、確率変数の全ての実現値にその発生確率を掛け合わせた加重平均。事象$X$の期待値を$E[X]$と表すことが多い。
離散型確率分布では、

```math
E[X]=\sum_{k=1}^{n}x_kP(X=x_k)
```

連続型確率分布では、

```math
E[X] = \int xP(x) dx
```
のように書く。（ここで、$x_k$や$x$は全て確率変数$X$の実現値）

**分散**とは、データの各々の値と平均値との差の2乗をデータ数で割ったもの。また、その平方根を**標準偏差**と呼ぶ。

分散、標準偏差はそれぞれ

```math
V[X] = E[(X-E[X])^2] \\
\sigma _X = \sqrt{V[X]}
```
で表される。
また、データ系列が2つあった場合に、この2つのデータ系列の傾向の違いを表したもの。

```math
Cov(X,Y) = E[(X-E[X])(Y-E[Y])] = E[XY] - E[X]E[Y]
```

で表される。

## 種々の確率分布

### ベルヌーイ分布

表が出る確率が$\mu$のコインでコイントスをする際、表を$x=1$,裏を$x=0$とした場合に、確率変数$x$が従う分布。以下のように表される。

```math
P(x|\mu) = \mu^x (1-\mu)^{1-x}
```

### マルチヌーイ分布（カテゴリカル分布）

さいころを振る試行のように、独立した発生確率$p_k$を持つ$K$個の事象が存在し、1回の独立した試行でそのいずれか1つが観測されるような離散確率分布。

### 二項分布

ベルヌーイ分布に従う試行を$n$回行ったとき、$x=1$になる（上の例では、$n$回中表が$x$回出る）確率を与える分布。

```math
P(x|\lambda ,n)= \frac{n!}{x!(n-x)!} \lambda^x(1-\lambda)^{n-x}
```

### ガウス分布

多くの自然現象が従う釣り鐘型の分布。
真の分布がわからなくても、サンプル数が多いとガウス分布に近づく。

```math
\mathcal{N}(x;\mu,\sigma^2)=\dfrac{1}{\sqrt{2\pi\sigma}}\exp(-\dfrac{(x-\mu)^ 2}{2\sigma^ 2})
```
ESRI ASCII形式ファイルで長方形セルを指定する方法

# 概要
- ラスタデータをテキスト化するフォーマットの一つにESRI ASCII方式がある
- デフォルトでは南北方向と東西方向でセルサイズが等しくなってしまう
    - ヘッダ部のCELLSIZE行は1つしか引数を取らない
- CELLSIZE行を削除し、dx行とdy行を追加すると、長方形のセルとして読ませることができる
    - このときヘッダの行数は7行になる
- ArcGISで読み込んで図示は可能
- ArcGISのraster to asciiで出力すると、元は長方形セルのラスタでも正方形セルに変換されてしまうようである（変換詳細不明）
[py2rb] numpy array copy=False

# はじめに
移植やってます。
# numpy (Python)
```python
import numpy as np
x = np.array(x, copy=False)
```
`False`を`false`に替えればいいんだよね。
# false (Ruby)
```ruby
require 'numpy'
x = Numpy.array(x, copy=false)

# Cannot interpret 'False' as a data type
```
ぐぬぬ。
# False (Ruby)
```ruby
x = Numpy.array(x, copy=False)

uninitialized constant False (NameError)
Did you mean?  FALSE
```
`FALSE`やないわい。
# nil (ruby)
```ruby
x = Numpy.array(x, copy=nil)
```
どうやら`nil`が正解らしい。
# メモ
+ Python の numpy を学習した
+ 道のりは遠そう
pip3をupgradeしたあと、`pip3`を使用時に`ModuleNotFoundError: No module named 'pip._internal'`となる際の解決策

以下の通りpip3をupgradeしたあと

```
/usr/bin/python3 -m pip install --upgrade pip
```

以下のようにエラーが出るようになった

```
$ pip3 --version
Traceback (most recent call last):
  File "/home/ubuntu/.local/bin/pip3", line 5, in <module>
    from pip._internal.cli.main import main
ModuleNotFoundError: No module named 'pip._internal'
```

以下のようにすると解決

```
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
```

# 参考
[https://pip.pypa.io/en/stable/installation/](https://pip.pypa.io/en/stable/installation/)
SQLのUPDATE文を使ってテーブル内のデータを更新／その他、テーブル内データの参照方法

サッカーの試合のマッチングサービスを作っており、
試合募集記事の投稿→投稿の一覧→投稿の詳細をそれぞれ表示できるようにしました。

記事詳細のうち、1つを除いて全ての投稿が取れているのですが、
1件だけ記事を開こうとすると、下記のようなエラーが出ました。

```
Trying to get property 'name' of non-object
```

このエラーを改善すべく、まずはテーブルにきちんとデータが入っているかを確認しました。

①既存のテーブルデータ参照

```
select * from テーブル名;
```

②テーブルに入っているカラム名の順番を参照　※select文で実行したテーブルと、そのテーブル内のカラムの順番を確かめるために実施。

```
PRAGMA table_info('テーブル名');
```

テーブルを確認した結果、都道府県と市区町村のID番号が他のテーブルと比較して、
大きく違うことが判明しました。
（これが起きた原因は、今は都道府県と市区町村をセレクトボックス化しているのですが、
セレクトボックス化する前に、手打ちで番号を書き込んだ時のものが残っていたんだと思います…）

上記を踏まえ、エラーが起きたレコードのprefecture_id,manuicipality_idを変更することに。

③ここで、UPDATE文の登場です。

```
UPDATE 該当テーブル名 SET prefecture_id = 27 where id=該当レコード名;
```

同様に、市区町村の方も変更して、無事データが取れるようになりました。
WordpressでAdvanced Custom Fieldのチェックボックスのみ値が保存できない

結論から言うと原因はPOSTされた内容に
問答無用でトリムをかける処理をしていたことでした。


```php:function.php
function trim_posts($value, $post_id, $field)
{
    return trim($value);
}
add_filter('acf/update_value', 'trim_posts', 10, 3);
```
php.iniの max_input_vars 設定等も疑いましたが
保存できないのがチェックボックスのみでDBのpostmetaテーブルから
フィールド名値ともに削除されており、他のフォームは保存できることから
ソース側に原因があると思い更新系を調べてたところここに行き当たりました。

同様の処理をされている方はご注意くださいorz
すぐに使えるCSSボタンアニメーション10選

これまでに作って好評だったボタンアニメーションを10個ご紹介いたします。
ホバーは忙しいとつい透過や反転で対応しがちですが、少し手間を加えるだけでサイトのクオリティがぐっと上がるのでおすすめです。
コピペで使えるので、カラーやEasingの値などを変更して自分好みにカスタマイズしてみてください。

## グラデーション
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="LYzeemY" data-user="tabam" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/tabam/pen/LYzeemY">
  Button Animation01 (Gradient)</a> by tabam (<a href="https://codepen.io/tabam">@tabam</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

Button02 のようなグラデーションのかかった角丸の線を作るのには少し工夫が必要です。
ボーダーを太めに設定してその上から角丸のついた擬似要素被せて再現しています。

## テキストが広がる
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="RwLxxeG" data-user="tabam" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/tabam/pen/RwLxxeG">
  Untitled</a> by tabam (<a href="https://codepen.io/tabam">@tabam</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

## テキストが回転・背景が伸びる
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="poWpagG" data-user="tabam" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/tabam/pen/poWpagG">
  Button Animation03 (Rotate/Background)</a> by tabam (<a href="https://codepen.io/tabam">@tabam</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

## 円が広がる
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="JjrMpbX" data-user="tabam" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/tabam/pen/JjrMpbX">
  Button Animation04 (Circle)</a> by tabam (<a href="https://codepen.io/tabam">@tabam</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>
JavaScript——深度理解（2）


#現代モジュール機構

大多数のモジュールは、ブースター／マネージャに依存しており、このようなモジュール定義を1つの友好的なAPIにパッケージ化する。ここでは特定の具体的なライブラリを研究しません。マクロを理解するために、簡単にコア概念を紹介します。
```
var MyModules = (
    function Manager(){
        var modules = {};
        
        function define(name, deps, impl){
            for(var i=0;i<deps.length; i++){
                deps[i] = modules[deps[i]
            }
            modules[name] = impl.apply(impl,deps);
        }
        
        function get(name){
            return modules[name];
        }
        
        return {
            define,
            get
        }
    }
)()
```

#thisは一体何ですか

thisは運転中にバインディングされており、作成時にバインディングされていません。thisの結合と関数宣言の位置は関係なく、関数の呼び出しに依存します。

#thisバインディング規則

1.標準バインディング

独立関数の呼び出しは、この規則を他の規則が適用されない場合のデフォルトと見なすことができます。
```
function foo(){
    console.log(this.a)
}

var a = 'test'

foo() //test
```
foo()は、修飾なしの関数参照を直接使用して呼び出されるので、デフォルト規則、すなわちthisはグローバルオブジェクトにのみ使用されます。

厳密なモードを使用すると、グローバルオブジェクトはデフォルトのバインディングには使用できませんので、thisはundefinedにバインドされます。

2.陰式バインディング
```
function foo(){
    console.log(this.a)
}

var obj = {
    a:2,
    foo:foo
}

obj.foo() //2
```
foo（）が呼び出されると、その前に確かにobjへの参照が加えられています。関数がコンテキストオブジェクトを参照すると、このコンテキストオブジェクトに関数呼び出し中のthisをバインドします。foo（）を呼び出したときにthisがobjに結合されるので、this.aとobj.aは同じです。

オブジェクト属性参照チェーンは、前のレイヤーのみとなり、または最後のレイヤーが呼び出し位置で機能します

##陰でなくします

最も一般的なthisバインディング問題は、陰的に結合された関数がバインディングされたオブジェクトを失うこと、すなわちデフォルトのバインディングが適用され、したがって、thisをグローバルオブジェクトまたはundefinedに結びつけることで、厳密なモードかどうかによって異なります。
Prism コードサンプル学習：18-NavigationCallback

# Prism コードサンプル学習：18-NavigationCallback

## はじめに

以下の記事の続きです。
<https://qiita.com/mngreen/items/1ed016e9dff06ae374b6>

## 18-NavigationCallback

本サンプルは、前回記事に引き続き、RegionManager.RequestNavigateメソッドを用いてコントロールを切り替える例です。
ただし、ひとつ違う点として、コントロール切り替え後にメッセージボックスを表示するという振る舞いが追加されています。
具体的には、NavigationCompleteメソッドがRegionManager.RegionNavigateメソッド呼び出し時に引数として渡されています。

```cs
using System;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;

namespace BasicRegionNavigation.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {
        private readonly IRegionManager _regionManager;

        private string _title = "Prism Unity Application";
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }

        public DelegateCommand<string> NavigateCommand { get; private set; }

        public MainWindowViewModel(IRegionManager regionManager)
        {
            _regionManager = regionManager;

            NavigateCommand = new DelegateCommand<string>(Navigate);
        }

        private void Navigate(string navigatePath)
        {
            if (navigatePath != null)
                _regionManager.RequestNavigate("ContentRegion", navigatePath, NavigationComplete);
        }

        private void NavigationComplete(NavigationResult result)
        {
            System.Windows.MessageBox.Show(String.Format("Navigation to {0} complete. ", result.Context.Uri));
        }
    }
}
```

前回記事でナビゲーションに至るまでのパスを追いましたが、今回も大きく変わりません。

呼び出し口が[RequestNavigate](https://github.com/PrismLibrary/Prism/blob/7f0b1680bbe754da790274f80851265f808d9bbf/src/Wpf/Prism.Wpf/Regions/RegionManager.cs#L397)メソッドに変わっただけで、以降の処理は同様です。巡り巡ってRegionクラスの[RequestNavigate](https://github.com/PrismLibrary/Prism/blob/7f0b1680bbe754da790274f80851265f808d9bbf/src/Wpf/Prism.Wpf/Regions/Region.cs#L368)メソッドが呼び出され、RegionNavigationServiceクラスに委譲。
NavigationServiceクラスを読み出し元を順に辿っていくと、[RequestCanNavigateFromOnCurrentlyActiveView](https://github.com/PrismLibrary/Prism/blob/7f0b1680bbe754da790274f80851265f808d9bbf/src/Wpf/Prism.Wpf/Regions/RegionNavigationService.cs#L134)メソッドにたどり着き、[140行目](https://github.com/PrismLibrary/Prism/blob/7f0b1680bbe754da790274f80851265f808d9bbf/src/Wpf/Prism.Wpf/Regions/RegionNavigationService.cs#L140)を満たさない場合のみ（ここの意図は依然わかっていない。）、[ExecuteNavigation](https://github.com/PrismLibrary/Prism/blob/7f0b1680bbe754da790274f80851265f808d9bbf/src/Wpf/Prism.Wpf/Regions/RegionNavigationService.cs#L221)メソッドを実行します。 [この中でコールバックアクションが実行されています](https://github.com/PrismLibrary/Prism/blob/7f0b1680bbe754da790274f80851265f808d9bbf/src/Wpf/Prism.Wpf/Regions/RegionNavigationService.cs#L247)。

## おわりに

今回は、RegionManager.RequestNavigateメソッドの引数に追加したアクションが、どのタイミングで呼び出されるのかを確認しました。
ただ、大きな流れ（クラス間の関連やメソッド呼び出し）はあまり大きく変わっていませんでした。
次回、[19-NavigationParticipation](https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/19-NavigationParticipation)について見ていこうと思います。
SQLite とは

## 勉強前イメージ

mysqlとかpostgresとかの横並びな感じする
聞いたことはある

## 調査

### SQLiteとは

オープンソースのリレーショナルデータベース管理システムの1つになります。
2000年にリリースされたアプリケーションに組み込んで使用する軽量なRDBMSになります。
パブリックドメインソフトウェアとして公開されています。

### SQLiteの特徴

- アプリケーションに組み込む

アプリケーションに組み込んで使用可能なRDBMSになる、珍しい型になります。
ローカルのファイルを直接DBとして扱うため、ネットワーク越しの接続等は向いておりません。
複数台使用する際はmysql等を使用したほうがよいです。

- 軽くて速い

名前の通り、軽くて速いです。

- データ型を指定しなくても使用可能

1つのカラム内にいろんなデータ型のデータを入れることが可能です。

- ライブラリとして使える

600KB程度の容量で使用可能なので、
容量が少ないデバイスでも使用でき、動作を実現できます。

## 勉強後イメージ

聞いたことはあったけど、使ったことがなかった。
アプリケーションに組み込んで軽いDB的な感じで使えるのかな。

## 参考

- [SQLiteの特徴や使い方を徹底解説！SQLiteを導入するメリットは？基本的なコマンド入力方法とダウンロード手順も紹介](https://agency-star.co.jp/column/sqlite)
大量のログを調査したい際に使えるSOF-ELK

# SOF-ELKとは
SANSのトレーニングで使用されているログ調査ツールです。 ElasticsearchやKibanaを使用したログ調査ツールで、通常は非常に大変な設定が予め行われており、一般的なログであればすぐに調査することが可能です。

https://www.sans.org/tools/sof-elk/
https://github.com/philhagen/sof-elk

# 使い方

以下からVMをダウンロードして起動します。
https://for572.com/sof-elk-vm

起動したマシンの/logstash/ 以下のディレクトリにログファイルをコピーするだけです。
コピーすることで自動的にデータベースに追加されます。

あとはブラウザでhttp://\<ip>:5601にアクセスし、以下の画面上部のDashboardをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549537/5a55a1a4-c053-50b5-3374-c13f1c3f5acd.png)

以下の画面では表示したいログをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549537/21f3a64e-bd0e-bf7a-af41-fdf177b8ce27.png)

以降は調査するログによって画面が異なりますが、画面上部の検索ボックスに検索条件を入れたり、マウスで画面上のIPアドレスなどをクリックすることでフィルタを適用することができます。
以下では、ソースIPアドレスとソースポートを指定してフィルタしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549537/def357f7-c759-0c21-3e97-260a3c920a4d.png)

# 注意点
デフォルトでは、時刻がUTCになっています。また、取り込んだログが正しくJSTとして認識されているかは確認してください。
思うようにログが取りこまれないという場合は、表示する日時の範囲が狭すぎる可能性があります。右上にある表示する日時の範囲を広めに設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549537/90db92da-5349-3962-eae0-8c19dfa1b7ec.png)

また、NetFlowはそのままでは取り込めない可能性があります。付属しているnfdump2sof-elk.shコマンドで変換する必要があるかもしれません。

それでも取り込まれないという場合は、おそらく非対応のログ形式です。一般的なサーバで出力されるログ形式であれば対応していますが、対応している形式は多くはありません。
対応するのを気長に待つか、もし可能なのであれば対応している既存のログ形式にうまく変換して取り込むという方法も考えられます（うまくいくかはわかりません）

# 課題
私が機能に気づいていないだけかもしれませんが、grepでいう-Aや-Bに相当する機能が見つけられていません。条件にマッチする箇所だけでなく、その前後が見たいということは多いと思うので、この機能があると良いと思いますが、それらしい機能を発見できていません。
【GoogleMap】無料でHPに地図を埋め込んでみた

# 初めに
[Google Maps Platform](https://developers.google.com/maps)を用い、無料でHP埋め込みに使用できる、
[Maps Embed API](https://developers.google.com/maps/documentation/embed/get-started)を使用する。
できることは、プレイ(場所の表示)/ルート(ルートの表示)/サーチ(検索結果)の表示の3パターン。

>[Google Maps Platform の料金](https://developers.google.com/maps/billing/gmp-billing?hl=ja#embed-advanced)より引用(2021年12月現在)
>Maps Embed API リクエストは、使用量の上限なく、すべて無料でご利用いただけます。

その他APIは[料金表](https://www.zenrin-datacom.net/business/gmapsapi/price/)を確認のこと

## 環境
 - Windows10
 - Google Chrome 96.0

## パラメータ
### プレイスモード/サーチモード
* key(必須) => [Google Cloud Platformに登録](https://www.zenrin-datacom.net/business/gmapsapi/api_key/)し取得して下さい。
* q(必須) => 検索ワード(名称、住所、プラスコード※空白の代わりに+を使用すること)
* center =>  中心の緯度経度(例:37.4218,135.0840)
* zoom => ズームレベルを指定(0-21)
* maptype => roadmap (デフォルト) or satellite

### ルートモード
* key(必須) => [Google Cloud Platformに登録](https://www.zenrin-datacom.net/business/gmapsapi/api_key/)し取得して下さい。
* origin(必須) => 出発地点(名称、住所、プラスコード※空白の代わりに+を使用すること)
* destination(必須) => 到着地点(名称、住所、プラスコード※空白の代わりに+を使用すること)
* waypoints => 複数の中継地点が指定できます。ハイプ"|"にて指定(例:Berlin,Germany|Paris,France).
* mode => driving, walking, bicycling , transit, or flyingから指定
* avoid => フェリーや有料道路、高速道路を通らないルートの指定 (例:avoid=tolls|highways).
* units => metric or imperial
* center =>  中心の緯度経度(例:37.4218,135.0840)
* zoom => ズームレベルを指定(0-21)
* maptype => roadmap (デフォルト) or satellite

本コードではURLにパラメータをセットしてください。

# サンプルコード
```html:GoogleMapsPlatfrom_enbedAPI.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>Google maps Platform　EnbedAPI</title>
  </head>
  <body>
    <div name="enbed_place">
      <h align="center">Google map Platform EnbedAPI デモサイト</h>
      <h>【プレイスモード】</h>
      <iframe
        width="800"
        height="600"
        frameborder="0"
        style="border: 0"
        src="https://www.google.com/maps/embed/v1/place?key=YOUR_API_KEY
      &q=東京駅&zoom=15"
      >
      </iframe>
    </div>

    <div name="enbed_route">
      <h align="center">【ルートモード】</h>
      <iframe
        width="800"
        height="600"
        src="https://www.google.com/maps/embed/v1/directions?origin=東京駅&destination=銀座駅
      &mode=walking&key=YOUR_API_KEY"
        allowfullscreen
      >
      </iframe>
    </div>

    <div>
      <h align="center">【サーチモード】</h>
      <iframe
        width="800"
        height="600"
        src="https://www.google.com/maps/embed/v1/search?q=神保町カレー&key=YOUR_API_KEY"
        allowfullscreen
      ></iframe>
    </div>
  </body>
</html>

```
# 終わりに
無料で意外と多くのことができますので、一度試してみて下さい。
Google Maps Platformを使用するメリットは、多くのユーザーが使い慣れいているUXを提供できることが一番大きいと思われますが、他のプラットフォームにはない強みは、パラメータのqにある程度曖昧な言葉を入れても機能することだと思われます。
そのため、内部システム等で利用する際も、住所表記の揺れ等に比較的強いと思います。

※各種サービスを利用する際はご自身で確かめてご利用ください。有料へなる場合や、あるパラメータを利用する場合は有料となる場合がございます。

# 参考サイト
https://developers.google.com/maps/documentation/embed/embedding-map

https://developers.google.com/maps/billing/gmp-billing?hl=ja

https://qiita.com/junara/items/bcfb9c1c5737c6d2fed9

https://www.zenrin-datacom.net/business/gmapsapi/api_key/

https://www.zenrin-datacom.net/business/gmapsapi/price/
psqlで1回のクエリだけ\x (expanded output) する

MySQLの `\G` のように1回のクエリだけexpand形式にする方法。

# psql 10以降の場合
SQLの末尾に `\gx` をつければ良い。

```
postgres=# select * from t1 \gx
-[ RECORD 1 ]-----
id   | 1
name | hoge
-[ RECORD 2 ]-----
id   | 2
name | moge
```


# psql ９以前の場合
`~/.psqlrc` に

```
\set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0'
```

と書いておく。そしてpsqlで

```
select * from t1 :G
```

のように末尾に `:G` をつけてクエリすると

```
-[ RECORD 1 ]
id   | 1
name | yamada
-[ RECORD 2 ]
id   | 2
name | tanaka
```

のようにexpand形式で表示される。

https://stackoverflow.com/questions/9604723/alternate-output-format-for-psql#comment77313864_9605093 より。

ちなみに、端末の幅が足りれば表形式、足りなければexpand形式の表示にする`\x auto`という設定もある。
複数のWinActorシナリオをタスクスケジューラで順次実行したかった

## 前提

### WinActor

WinActorは１端末につき１台のみ起動可能のため、複数のシナリオを並列処理することができない。
そのため、定期実行する場合はシナリオの時間帯をずらし、順次実行する必要がある。

WinActor単体にはシナリオを管理するための機能が含まれていない。
そのため、決まった時間に実行するには専用の管理ソフトか、タスクスケジューラを利用する。

例えば、以下のように複数のシナリオを指定した時間に定期実行したい、とする。

- シナリオAは**09:00**, 13:00, **16:00**
- シナリオBは10:00, **15:00**, 17:00
- シナリオCは**09:00**, **15:00**, **16:00**
- ...

太字の部分で時間帯が重複しているが、順次実行できるようにタスクスケジューラで設定したい。

## タスクとインスタンス

タスクスケジューラから起動した現在実行中のプロセスをインスタンスという。
タスクが既に実行中の時に同じタスクがトリガーされた場合、二つのインスタンスが生まれる。
この時、二つのインスタンスをどのようにコントロールするか決めることができる。

[Windowsタスクスケジューラの多重起動](https://qiita.com/smiler5617/items/31d0e8f37d6424adc1d2)

## タスクのプロパティ

### 操作

プログラム/スクリプト(P)にWinActor7.exeを指定
引数に「-f ファイルパス -r -e」を指定し、「WinActorの起動後にシナリオを実行して終了する」タスクを作成。

WinActorシナリオは起動後に60,000ミリ秒(1分間)待機するだけのシナリオを作成した。

### 設定

- タスクが失敗した場合の再起動の間隔を「1分」
- タスクを停止するまでの時間を「1時間」
- 要求時に実行中のタスクが終了しない場合、タスクを強制的に停止するのチェックマークをOFF
- タスクが既に実行中の場合に適用される規則を「新しいインスタンスをキューに追加」

## 実験

### １つのタスク内でずらして起動した場合

トリガーA, Bを設定し、BはAの30秒後に起動するように設定した。

この場合、**トリガーBのインスタンスはキューに置かれ、トリガーAによって作られたインスタンスが完了次第すぐに起動する**。

### ２つのタスクでずらして起動した場合

タスクAをコピーして名前をタスクBに変更して保存する。
タスクAのトリガーA, タスクBのトリガーBを設定し、BはAの30秒後に起動するように設定した。

この場合、**後にトリガーされるBの操作は瞬時に正常完了する**。
WinActor側でエラーコードを吐くことはない。

### ２つのタスクで同時に起動した場合

タスクAをコピーして名前をタスクBに変更して保存する。
タスクAのトリガーA, タスクBのトリガーBを設定し、BはAと同時に起動するように設定した。

この場合、**AとBは並列で起動し、シナリオ通り1分間待機した後に終了する**。
ただし、あくまで並列実行はサポート対象外なので、今回はExcelの操作など、実際のシナリオで適用した時にどのような挙動をとるかは実験しない。

## 総括

タスクスケジューラだけで複数のシナリオを任意の時間帯に定期実行するようにスケジュールし、重複した時に順次実行する設定はできない（と考えられる）。
複数のタスク間でインスタンスを共有するための機能があれば良かったのに。

## バージョン

Windows 10
WinActor v7.1.0
[py2rb] matplotlib

# はじめに
移植やってます。
# matplotlib (Python)
```python
plt.figure()
plt.hist([peptide['m/z'] for peptide in peptides],
    bins = 2000,
    range=(0,4000))
plt.xlabel('m/z, Th')
plt.ylabel('# of peptides within 2 Th bin')

plt.show()
```
![20211227b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/20710bc7-1c86-6528-b769-39c20e8b3503.png)
`range=(0,4000)`ここがタプルなので嫌な予感が。
# どうする？ (Ruby)
```ruby
require 'matplotlib/pyplot'
plt = Matplotlib::Pyplot

plt.figure()
plt.hist(peptides.map{ _1['m/z'] },
    bins = 2000,
    range = [0,4000])
plt.xlabel('m/z, Th')
plt.ylabel('# of peptides within 2 Th bin')

plt.show()
```
![20211227a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/2ac4b52b-ccf3-de3a-d482-f1a619124971.png)
ちがくね？
# select (Ruby)
```ruby
plt.hist(peptides.map{ _1['m/z'] }.select{ _1 < 4000 },
    bins = 2000)
```
![20211228a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/43ad4307-9443-0faf-1061-b67e5930c3e6.png)
まあ、こんなもんか。
# : (ruby)
```ruby
plt.hist(peptides.map{ _1['m/z'] },
    bins: 2000,
    range: [0, 4000])
```
![20211228b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/b3bd1fb4-a69d-0f21-b4a5-32ecae9e1063.png)
おお、ドンずば。

こちらのサイトを参照しました。

https://hogelog.com/ruby/ruby-matplotlib.html

# メモ
+ Python の matplotlib を学習した
+ 道のりは遠そう
カーディナリティ とは 

## 勉強前イメージ

DBの用語？

## 調査

### カーディナリティ とは

リレーショナルデータベースにおいて、
テーブルのカラムに含まれる異なる値の数のことを指します。
カーディナリティは `高い`, `低い` で示すことが多いです。

### カーディナリティの高い場合

カーディナリティが高い場合は、同じ値が入ることが少ない場合を指します。
例えば以下だとすれば、マイナンバー(下記の番号は適当です。)は個々によって違うので
同じ値が入ることはありません。
これが `カーディナリティが高い` 場合になります。

|  ID  | マイナンバー |
|:----:|:----:|
| 1001 |  xxxxyyyy1001   |
| 1002 |  xxxxyyyy1002  |
| 1003 |  xxxxyyyy1003  |
| 1004 |  xxxxyyyy1004  |


### カーディナリティの低い場合

例えば以下の性別の欄であれば、
基本的には入力される値は男or女であり、
同じ値が何度も入力されることがほとんどです。
これが `カーディナリティが低い` 場合になります。

|  ID  | 性別 |
|:----:|:----:|
| 1001 |   男   |
| 1002 |    女  |
| 1003 |    男  |
| 1004 |    女  |


## 勉強後イメージ

いままであまり聞いたことなかったけど、
イメージがついた。

## 参考

- [カーディナリティ 【cardinality】](https://e-words.jp/w/%E3%82%AB%E3%83%BC%E3%83%87%E3%82%A3%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3.html)
[Rails]データベースへのアクセス負荷を軽減するために気をつけるべきこと　「3行で要約」

#3点にまとめる
```
テーブルを正規化する
シンプルなSQLを心がけ
インデックスの張り忘れ、もしくは不正
```
##テーブルの正規化とは
```
データの冗長性を排除し、一貫性や効率性を保持するようなデータ形式になる形でテーブルを定義すること。
```
##SQLとは
[SQLとは](https://hnavi.co.jp/knowledge/blog/sql/)
##インデックスとは
```
「テーブルとは別に検索ように最適化された状態のデータ」
```
##終わりに
アップデートしていきます。
STM32L010でナイトライダー(Mbed)(STM32L010F4P6)


x Mbed2リビジョン143

目的
8LEDを順次点灯するプログラム

いろいろ
ほぼ3分クッキング


![78577B07-E8C6-4169-83CF-AC41C013C5D2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/6ef2e259-03ce-562a-eccf-b193d0b0cc16.jpeg)



```c++



//IO_Knight_Rider_1

#include "mbed.h"

//GPIOの初期化
DigitalOut myled(PB_1);//D7

//GPIOポートの初期化
//                       76543210
PortOut ledport(PortA, 0b11111110); //D0 - D6

//シフトの軽量高速化の為
//              12345678   12345678   12345678   12345678
char b8[8] = {0b10000000,0b01000000,0b00100000,0b00010000,
              0b00001000,0b00000100,0b00000010,0b00000001
             };

//メイン関数
int main()
{

    char buf[10]; //バッファー

    //無限ループ
    while(1) {

        //0から7までループ
        for(int ii=0; ii<8; ii++) {

            buf[0] = b8[ii];//バッファーのクリア

            ledport = buf[0]<<1; //1シフト後に代入

            myled =( ((buf[0] & 0x80) == 0)  ? 0 : 1 ); //D7を代入

            wait_ms(1000); //1秒待つ

        }//for

    }//while

}//main

//容量削減
void error(const char* format, ...) {}




```
【Blue Prism】コレクションから必要な条件に一致するものを抽出する

#コレクションアイテム・・・必要な条件だけ取得したい
Blue Prismでよくありませんか？<br>
取得したコレクションから必要な条件に一致するものだけ抽出したいとき<br>
そんな時は、「Utility - Collection Manipulation::Filter Collection」を使ってみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/f56a2190-42df-157a-e2b3-7d9381a9cee0.png)

#フィルター条件がよくわからない・・・・代表的な使い方はこんな感じ
見てみても抽出条件をどう設定したらいいのかよくわかりませんよね・・・・<br>
でも大丈夫。今回はこの抽出条件の設定方法をご紹介します！<br>
以下のテスト用プロセスを用意して早速やってみましょう。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/12478d1a-4a70-d361-452c-eedc4db9951f.png)

コレクションの中身はこんな感じ<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/3b112d12-1a5b-9388-6091-2bf1f543b3ab.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/4ca3a463-3de1-ca1a-ed27-94498fe9e42e.png)

アクションの中身はこちら<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/c07df127-6448-3326-364d-180d0a92e675.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/32fdba0d-a973-d844-5293-bb58dbbc5f18.png)

#色んな条件で抽出してみよう
代表的な抽出条件を挙げてみました<br>
ご参考までに・・・<br>

##指定した文字列が設定されている

###一つの場合
以下のように入れます。

```
"氏名='山田一郎'"
```
####結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/a5d72b35-5ad1-dc57-be1b-4db68d0c70c9.png)
このように２件抽出できましたね。<br>
この調子で次行ってみましょう<br>
###複数の場合
```
"氏名 IN ('山田一郎','田中史郎')"
```
####結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/a03aecc1-9d1b-b925-93e0-58745e6d7627.png)

##指定した文字列が含まれている（ワイルドカード）
ワイルドカードで抽出する場合はこうします。<br>

###文字列を含む場合
```
"氏名 like '*山田*'"
```
####結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/d465bd28-6ac7-7300-c5f9-ccfcf4eddd9f.png)

###文字列を含まない場合
```
"氏名 not like '*山田*'"
```
####結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/190dadd2-4e79-7eeb-1288-78842e4ef6d4.png)

##複数の条件を指定する
設定できる抽出条件は複数入れることも可能です。<br>
こんな感じで<br>

###ORの場合
```
"氏名='山田一郎' OR 氏名='山田次郎'"
```
####結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/eb220af9-15f0-2bc1-1e33-63a5e7c448fc.png)

###ANDの場合
```
"氏名='山田一郎' AND 出身地='東京'"
```
####結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660650/d127f9e3-d05a-3cb7-8476-c5c575848588.png)

#まとめ
いかがだったでしょうか？<br>
代表的なコレクションの抽出条件をまとめてみました<br>
他にも挙げていない抽出条件がまだまだありますのでその都度更新していけたらと思います！<br>
neosでlogix その42

# 概要

niosでlogixやってみる。
練習問題、やってみる。
実装編。

# 練習問題

cpuを実装せよ。
１から１００まで、数えよ。

# 写真

![2021-12-28 04.41.33.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/c1dd590e-79af-3a01-b8cc-89b3d7c1f545.jpeg)

# 感想

ビット演算が出来なかったので、デコーダーが組めないので、オペコードとオペランドを分けた。
残念。


# 成果物

```
neosrec:///U-ohisama/R-0ee1ec21-db19-425b-ba63-9a699caff48e

```


以上。
N+1問題

#　N+1問題とは

必要以上にＳＱＬが発行されてしまいアプリのパフォーマンスが低下してしまうこと。

##具体例

テーブルは
OwnerテーブルとPetテーブルがあると仮定
Petテーブルにはowner_idという外部キーが設定されていて、下記のように関連付けているという前提にします

```ruby
-------オーナーモデルクラス---------
class Owner < ApplicationRecord
  belongs_to :pet
end

-------ペットモデルクラス---------
class Pet < ApplicationRecord
has_many :owner
end
```

まず下記のallメソッドをすると全件取得するためにＳＱＬが発行されDBに1回アクセスします。

```ruby
owners = Owner.all
```

下記は全件取得したownersをeachで一つずつ取り出して取り出したownerに関連づいてるpetの名前を全件取得し、eachでひとつずつ取り出し出力しています。

```ruby
#ownerがに関連している（飼っている）ペットの名前を取得している
owners.each do |owner|
  owner.pets.name　do |pet_name|
    puts pet_name
  end
end
```
上記のコードの裏ではまずownerに関連づいたpetのデータを取得するためにＳＱＬが発行されます。このownerに関連づいたpetのデータを取ってくる作業をownerの数だけ行うので大量に関連づいたデータを取得するためにデータへのアクセスが行われます。

つまり、owner1回のデータベースへのアクセスに対して関連づいたデータベースへのアクセスが複数（Ｎ）回行われる
これを
### N + 1 問題
といいます

##解決方法

includesを使った解決方法
先ほどのコードを書き換えます

```
owners = Owner.includes(:pets)

owners.each do |owner|
  owner.pets.each do |pet|
    puts pet.name
  end
end
```

まず1行目はallの部分をincludesに変えています。
これでOwnerを全件取得して取得したOwnerに関連するpetsのデータを取ってきています。
ＳＱＬは具体的に

・Ownerの全件取得
・取得したOwnerに関連したpetsを取得

この二つのＳＱＬが発行されます。
これで関連づいたpetのデータをまとめて取得しているので4行目のeachではＳＱＬは発行されずさきほど発行したＳＱＬの2回のみでデータを扱うことができます。

includesを事前にまとめて関連データを取得することでＳＱＬを複数回呼び出さずに2回のＳＱＬのみで済ませることができました。
「ファイルが大きすぎます」の対処法

> 環境 (最終確認: 2021.12.29)
64bit Windows 10 Home

:::note alert
【警告: ファイルが大きすぎます】
ファイル ".+\.mp4" は大きすぎて対象のファイルシステムに入りません。
:::

<br>

と、表示された場合...

<br>

:::note warn
外付けハードディスク、USBメモリ等が <strong>FAT32</strong> で <strong>フォーマット</strong> されている可能性があります
:::

<br>

そこで、どうすればいいのかというと

<br>

:::note info
<strong>exFAT</strong> で <strong>フォーマットし直す</strong> ことで、解決する場合があります
:::

<br>

フォーマットはファイルエクスプローラーの外部メモリを右クリックし、「フォーマット」から選択できます。現在のメモリは全消去されるため、バックアップを忘れないでください。

<br>

##### ちなみに、FAT32, exFAT形式はMac, Windows間で互換性がありますが、NTFS形式はMacでサポートされていません。

<br>

初歩的なことですが、つまずいたことなので備忘録として残しておきます。
Julia: PostgreSQL のデータを削除 (Delete)

```julia:postgre_delete.jl
#! /usr/bin/julia
#
#	postgre_delete.jl
#
#						Dec/28/2021
# --------------------------------------------------------------------
using LibPQ
using DotEnv
# --------------------------------------------------------------------
println("*** 開始 ***")
key_in = ARGS[1]
println(key_in)
cfg=DotEnv.config()
user=cfg["user"]
password=cfg["password"]
data_base=cfg["data_base"]
#
str_connect = "dbname= " * data_base * " host=127.0.0.1 user=scott password=tiger123 port=5432"
conn = LibPQ.Connection(str_connect)
command = "delete from cities where id = '" * key_in * "'"
println(command)
rr = execute(conn, command)
println(rr)
#
close(conn)
#
println("*** 終了 ***")
# --------------------------------------------------------------------
```

## 確認したバージョン

```text
$ julia --version
julia version 1.10.2
```
【VSCode】PHPで型宣言をしたときにsyntaxerrorのエラーが表示されたときはVSCodeの拡張機能を確認する。

<img width="1440" alt="Vscode_syntaxerror.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250884/ce3787be-b328-558e-85a9-3a2b1bf2497c.png">

VSCodeでPHPを書いていると型宣言の部分でエラーが表示されました。
今回はこちらのエラーについての対応について書いていきます。

### ■解決策
VSCodeの拡張機能「PHP Language Features」を無効にする。

>Go to Extensions.
・Search for @builtin php
・Disable PHP Language Features. Leave PHP Language Basics enabled for syntax highlighting.
Note that other (3rd party) PHP extensions which provide similar functionality should also be disabled for best results.
引用：https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client

1. VSCodeのExtentionsで「@builtin php」を検索
1. 「PHP Language Features」をdisableに変更&reload

### ■現象
VSCodeで型宣言を書いた際、「syntax error」が表示。
型宣言はPHP7.4.0以降で可能であり、今回はPHP8.1.1を使っていたのでPHPのバージョンが問題では無い。

### ■原因
VSCodeに初めから入っている拡張機能（@builtin php）の「PHP Language Features」によるもの。
無効にすることでエラーを非表示にすることができる。

PHPについてのVSCodeの拡張機能は「PHP Intelephense」を使っていたので
今回の拡張機能「PHP Language Features」は無効にしても問題ないと判断し、今回の対応を行なった。

以上。

#### 参考サイト
>PHP Intelephense - Visual Studio Marketplace
https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client
Julia: PostgreSQL のデータを更新 (Update)

```julia:postgre_update.jl
#! /usr/bin/julia
#
#	postgre_update.jl
#
#						Dec/28/2021
# --------------------------------------------------------------------
using LibPQ
using DotEnv
# --------------------------------------------------------------------
println("*** 開始 ***")
key_in = ARGS[1]
population_in = ARGS[2]
println(key_in,'\t',population_in)
#
cfg=DotEnv.config()
user=cfg["user"]
password=cfg["password"]
data_base=cfg["data_base"]
#
today = Libc.strftime("%F", time())
println(today)
#
str_connect = "dbname= " * data_base * " host=127.0.0.1 user=scott password=tiger123 port=5432"
conn = LibPQ.Connection(str_connect)
#
command = "update cities" * " set population = " * population_in
command *= " , date_mod = '" * today * "'"
command *= " where id = '" * key_in * "'"
println(command)
rr = execute(conn, command)
println(rr)
#
close(conn)
#
println("*** 終了 ***")
# --------------------------------------------------------------------
```

## 確認したバージョン

```text
$ julia --version
julia version 1.10.2
```