OmniAICreator/Qiita-1.07M huggingface dataset:
JavaScriptとTypeScriptの違い

まえがき
　SEとしての新人研修の中でTypeScriptについて学んだので忘れないためのメモ書きです。「TypeScript」を学ぶつもりなのに、講師やサイト、教本でJavaScriptについて触れることも多く、ごっちゃになることがあるので整理したいと思う。

JavaScriptとTypeScriptの同じこと
　どちらも言語の特徴として、インタプリタ型であること。
    ・インタプリタ型とは...
 コードを1行1行ごとに実行するプログラミング言語。プログラムの実行速度よりも効率性や柔軟にコードを書いていくことに重きを置かれている。動的言語、軽量級言語、スクリプト系言語と呼ばれることもある。
    ・「コードが1行ずつ実行」(コンパイル(後述)しない)
    ・実行速度 < 効率性、柔軟性
（柔軟性については、コードを書いているときにエディタの方が臨機応変に対応しながらコードを実行してくれている感じがする）
Perl,Ruby,PHP,Python,JavaScript,TypeScript

　インタプリタ型と比較されるのが、コンパイル型。
　・コンパイル型とは...
 コンパイラ型ともいう。書いたコードを保存して実行するまえに、コンパイルという処理を挟む。（コンパイルとは、人間が理解できるプログラミングコードを機械が理解できる言葉に"翻訳"する作業）実行速度が速い。
Java,Scala,Kotlin,C#,Go,Rust

ここからが本題、JavaScriptとTypeScriptの違いについて
JavaScriptとは、、、
LiveScriptと呼ばれるプログラミング言語だったが、Java人気にのっかって後からJavaScriptに名称変更した
バージョンの変更するごとに仕様が頻繁に変わる
フロントエンドだけでなく、バックエンドもこなすので、広く使われる言語のひとつになった。
コードファイルの拡張子は「.js」
JavaScriptの略称をJSと表記することもある。

TypeScriptとは、、、
一般的に言うAltJS言語(Alternative JavaScript言語,代替JavaScript言語)。TypeScriptでコードを書き「トランスコンパイル」することで、JavaScriptにj変換される。
JSの上位互換…充実した型サポートと方推論でVScode上で実装できる。
コードファイルの拡張子は「.ts」
TypeScriptの略称をTSと表記することもある。

まとめ
要は、JSの上位互換として、TSがあるので、調べ物の際に「TypeScriptについて実装の仕方を知りたいから、JavaScriptの内容が出てくるのはなんで？？」という不安は気にしなくてもよい。

参考
https://speakerdeck.com/iwasiman/history-of-programming-languages-with-gopher?slide=14
[Rails]MVCの責務範囲を サクッと説明

## Model
- controllerの情報は参照しない
    - よくあるのは、controllerで定義した`current_user`を参照してしまっていること。
 
- viewに依存するロジックは記述しない
    - DecoratorやHelperで記述する
    
## Controller
- リクエストを受け取り、何らかの処理を行い、レスポンスを返すだけ
- インスタンス変数の代入はアクションメソッド(indexやnewなど)直下で行う
    - before_actionやprivateメソッド内で代入すると可読性が下がってしまう

## View
- 複雑なロジックが含まれると可読性が落ちるので、DecoratorやHelper、Modelでの記述を検討する

### おまけ

## Decorator
- Modelに依存する表示用のロジックを追加するモジュール
- `モデル名Decorator`という命名規則に従う

## Helper
- Modelに依存しない表示用のロジックを記述する
- ただし、複数のモデルに依存する表示用のロジックを記述することもある
- 注意点
    - Helperに定義したメソッドはネームスペースが無く、グローバルメソッドとして全てのViewから参照される
    - インスタンス変数を参照しない。必要なデータは引数で受け取る。
stable diffusion txt2img コマンドtips

## stable diffusionのtxt2imgのコマンドに関するtipsとトラブルシューティング

![815F8128-6641-467D-8F73-705C0DEC5605.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266846/917d8273-28c2-8554-8a17-a3678e48ac84.png)

## --Hと--W

出力画像の幅と高さを指定できる…けど、学習マップの土台にもなってるので、小さくすると画像が壊れる。大きくすると即エラー。
お使いのマシンにもよりますが、大きくても600x600ぐらいが限度です。
小さくするのはおすすめしません。
変えない方が無難。

## --n_samplesと--n_iter

n_samples 一回の計算で出力する画像の数。メモリにもよりますが多くすると画像が壊れる。2,3ぐらいまでが無難

n_iter 画像出力処理を繰り返す回数。n_samples * n_iterが最終的に出力される画像の枚数になります。

## --seed

初期化の乱数の種で、これを変えると出力も変わるという話だけど、変えなくても毎回違う画像が出るので謎。

## stable diffusionのプロンプトのコツ

promptを学ぶのにおすすめのサイトはこちら

https://lexica.art/

こちらのプロンプトを参考に、前半部分を好みのシチュエーションに変えてみたりするといい感じに生成できる。

![4F652CB8-C9F3-4911-9A6B-B3A406349CAB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266846/3bcddfc5-fec5-eb7d-6a53-b5bb279ccc82.png)


![668FF506-B283-43EC-A28C-61870ED96935.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266846/ee669506-036f-8867-b2a4-2f5a60deef24.jpeg)

![25FD762A-CE65-4A90-9F84-7F1005715044.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266846/5155226d-2c76-bcbf-5b71-57c3dc22f81c.jpeg)
レスポンシブを行う為に知っておきたいことと対応策

## 前置き
最近HYMLやCSSを用いて画面を作成している際に、PC画面で綺麗に画面ができても、スマホやタブレットの画面サイズだとレイアウトが崩れてしまうということが多くあります。
今の世の中には、PCだけでなく他の媒体でもインターネットが使える為、それぞれの媒体でレイアウトが起きないように対策をしていかなくてはなりません。
レスポンシブ対応を行う上で、知っておきたいことと対策方法を簡単にまとめていこうと思います。



## レスポンシブを行う為に知っておきたいこと
レスポンシブ対応を行う上では、世に出ている媒体の画面幅シェア率を把握していかなくてはなりません。
現時点でのシェア率を把握し、どの画面幅まで対応しなければならないか確認していきましょう。
媒体のシェア率の確認は、[「Statcounter Global Stats」](https://gs.statcounter.com/screen-resolution-stats/desktop/japan)というサイトがとても便利です。
今回は、このサイトから日本で使われている媒体の画面幅のシェア率を確認していきましょう。

#### １.タブレット画面のシェア率
![StatCounter-resolution-JP-monthly-202107-202207-bar (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819422/5721dd15-d134-6d76-3c87-2a6bd2b53e1a.png)
グラフから横幅768pxが一番シェア率が高いです。
しかし、全体で見ると4位に横幅1280pxが入ってます。
そのため、タブレット幅は1280px〜768pxは確認したほうが良さそうです。

#### 2.スマホ画面幅シェア率![StatCounter-resolution-JP-monthly-202107-202207-bar (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819422/47018513-fbce-6985-7211-9f2d3b0cb49f.png)
グラフから横幅375pxが最もシェア率が高いです。
5位の画面幅360pxに関しては6.11%ですが、6位とは差をつけています。
その為、画面幅414px〜360pxは、確認した方が良さそうです。

## 対応策
シェア率を把握できた上で、対応策を考えていきましょう。
CSSでは、以下のようにメディアクエリをスタイルシートに書くことで、指定した画面幅に対してCSSを反映させることができます。

```css
@media screen and (min-width:480px) { 
}
@media screen and (max-width:390px) { 
}
```

また、レスポンシブ対応をしていくと、「〇〇pxから〇〇pxの間が崩れてしまう」といったことが起きてしまうこともあると思います。
そんな時は以下を試してみてください。
```css
@media screen and (min-width:768px) and ( max-width:1024px) {
    /*　最小値768pxから最大値1024pxまでを指定できる 　*/
}
```
なるべくどの画面幅でもレイアウトを保ちたい時は、この方法でCSSを書いてみてください。

## まとめ
ここまでで、レスポンシブを行う為に知っておきたいことと、対応策の一部を簡単にご紹介しました。
レイアウト崩れは、記事を見ていく人の気分を乱す部分でもあるので、改善していきたいですね。
紹介したのは一部に過ぎないので、ここから参考に画面幅やCSSについて調べてみてください。

## 参考文献
【Statcounter Global Stats -- Tablet Screen Resolution Stats Japan July 2021 - July 2022】
https://gs.statcounter.com/screen-resolution-stats/tablet/japan#monthly-202107-202207-bar
【Statcounter Global Stats -- Mobile Screen Resolution Stats Japan July 2021 - July 2022
Edit Chart Data】
https://gs.statcounter.com/screen-resolution-stats/mobile/japan#monthly-202107-202207-bar
【レスポンシブの基本、メディアクエリの書き方】
https://sole-color-blog.com/blog/71/
【日本国内のデバイス別ディスプレイサイズ（解像度）シェア【2022年8月】】
https://web-saku.net/displaysize-japan/
Xcodeのダウンロードが進まないとき確認すること

# はじめに
Xcodeをアップデートしているのに、全然進んでいるように見えなくて「なんか失敗してる？」と思ったことがある人は多いのではないでしょうか。
先日まさにそのような状況に遭遇しました。そのときに確認したことをメモ程度に書き記しておきます。

![スクリーンショット 2022-07-26 9.53.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2644705/75d3d991-8359-b51f-8830-e6348f0c7caf.png)

# インストールが進んでいるかを確認する方法
## ターミナルでログを見てみる
### ①lessコマンドでinstall.logファイルを表示
ターミナルをひらき、以下のコマンドを打ちます。
lessコマンドはファイルの中身をみる時に使うコマンドで、今回の場合はinstall.logファイルの中身を見ることができます。
```
less /var/log/install.log
```

## ②監視モードにする
lessコマンドを用いてファイルの中身を表示したら、監視モードにします。
監視モードは流れてくるデータをリアルタイムで見れるようにすることができます。
監視モードへは**F(shift+f)**と入力することによって切り替えられます。
ターミナル画面の一番下の行に以下の画像のように`Waiting for data...`と表示されていれば監視モードになっています。
![スクリーンショット 2022-08-28 13.57.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2644705/b6db80c3-1579-13e3-ef86-1e3f0d0f2896.png)

## ③ログが出力されるかを観察する
監視モードにしたあとは今開いているターミナルの画面にデータが流れてきて、動いているかを確認してみてください。
データーが次々に流れてきていれば、アップロードの処理は進んでいます！
ちょこちょこ止まることもありますがしばらくすると動き出したりするので、そのまま待機してみてください。

## ④監視モードを止める
動いていることが確認できたら監視モードをやめてしまってもいいです。
`control+c`で監視モードを止めることができます。
監視モードをやめた後に`q`と入力すると、`less`コマンドで開いていたファイルも閉じることができます！

# ちなみに
ちなみに`install.log`ファイルは以下の方法でも見ることができます。
### ①コンソールとSpotlight検索をする
右上の虫眼鏡からコンソールと検索して、アプリケーションを起動します。
![スクリーンショット 2022-08-28 14.09.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2644705/846fd659-894e-e096-2698-58541c446e13.png)

### ②ログレポートの中のinstall.logを開く
コンソールを起動したら、ログレポートの中にinstall.logファイルがあるのでこのファイルを開くとログを確認することができます！
![スクリーンショット 2022-08-28 14.10.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2644705/f57ab18e-3d22-c82d-a460-0f5c6bd45ebd.png)

# おわりに
また一つ賢くなりました。もっと勉強するぞ〜。
よくわからなくなってしまう用語解説記事

Pythonの基礎自体は2年ほど前に講座を受講したのですが、いまだにごっちゃになったりその都度調べながらやっていたものでAha momentを私に与えてくれた記事をシェアします！

①パラメータとアーギュメントの違い

一生覚えられませんでした！何が違うの？と思いつつまずは手を動かそうと思い突き進んできましたが、この記事は自分の中でしっくりきました。

✔️パラメータ：関数定義時に使用される仮引数

e.g., def curry(ingredient):
              　　　　　　　　  ↑

✔️アーギュメント：定義された関数を実際に使用するときに引き渡されるもの

http://blog.livedoor.jp/s_shu260/archives/9280699.html
Node.jsをnodebrewを用いて管理する（Mac向け）

## はじめに
ローカルマシンでバージョンの違う複数のプロジェクトを開発することは往々にしてあると思います。
単一バージョンをインストールしていると、毎回インストールとパスを通す作業が発生しますが、
nodebrewの場合はコマンドだけでNode.jsのバージョンの切り替えが可能です。
（最近はDockerを使うのでホストマシン側のNodeに依存することは少ないかもしれませんが。。）

今回はnodebrewのインストールとバージョン変更手順を説明します。

## Homebrewのインストール
ターミナルを開き、以下のコマンドでMacのパッケージ管理ツールのHomebrewをインストールします。
```
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
参考
https://brew.sh/index_ja

## nodebrewのインストール
ターミナルで以下のコマンドを実行します。
```
% brew install nodebrew 
```
## パスを通す
`nodebrew setup`コマンドを叩いて追加するパスを確認します。
```
% nodebrew setup

Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew

========================================
Export a path to nodebrew:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
```
以下のコマンドを叩いて使っているシェルを確認します。
```
% echo $SHELL
```
#### /bin/zshの場合
以下のコマンドを実行してパスを通します。
```
% echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc
```
以下のコマンドでシェルの設定を反映します。
```
% source ~/.zshrc
```

#### /bin/bashの場合
以下のコマンドを実行してパスを通します。
```
% echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
```
以下のコマンドでシェルの設定を反映します。

```
% source ~/.bash_profile
```

## Node.jsのインストール
インストール可能なNode.js一覧は以下のコマンドで確認できます。
```
% nodebrew ls-remote
```
以下のコマンドでバージョンを指定してインストールします。
```
% nodebrew install v18.4.0
```
安定版をインストールする場合
```
% nodebrew install stable
```
インストールしたNode.js一覧を確認する場合は`nodebrew ls`を実行します。
```
% nodebrew ls

v18.4.0

current: none

```
`current: none`となっているので、Node.jsを有効にする必要があります。

## Node.jsの有効化
以下のコマンドで使うNode.jsを指定します。
```
% nodebrew use v18.4.0
```
再度、`nodebrew ls`を実行します。
```
% nodebrew ls
v18.4.0

current: v18.4.0
```
上記の通り、指定したバージョンが有効になっていることが確認できると思います
三角比「宮城大学2022年後期第２問」をsympyでやってみた。 

∠A=90°,∠B=60°，∠C=30°である直角三角形....

オリジナル

https://mathmathmass.exblog.jp/32191756/

同じです。大学入試数学問題集成＞

https://mathexamtest.web.fc2.com/2022/202211081/2022110810200mj.html#top-0206

# sympyで
角度は,CADで確認したので大丈夫だと思います。

```python
from sympy import *
a=Symbol('a',positive=True)
def myGetDMS(Rad):
    DecimalDegree=float(Rad*180/pi)
    degree = int(DecimalDegree)
    minute = int((DecimalDegree - degree) * 60)
    second = ((DecimalDegree - degree) * 60 - minute) * 60
    return str(degree) + "度" + str(minute) + "分" + str(round(second)) + "秒"
#
A=Point(0        ,0)
B=Point(0        ,a)
C=Point(a*sqrt(3),0)
M=Line(B,C).projection(A)
P=A+Rational(1,3)*(M-A)
l=Line(B,C).parallel_line(P)
Q=Line(A,B).intersection(l)[0]
R=Line(A,C).intersection(l)[0]
print("#(1)",Point(A).distance(M))
print("#(2)",Point(A).distance(P),",",Point(M).distance(P))
print("#(3)",Point(P).distance(Q))
print("#(4)",Point(M).distance(Q))
print("#(5)",Point(M).distance(R))
cosQMR=Point(Q-M).dot(R-M)/(Point(M).distance(Q)*Point(M).distance(R))
print("#(6)",Point(Q-M).dot(R-M)/(Point(M).distance(Q)*Point(M).distance(R)))
cosCMR=Point(C-M).dot(R-M)/(Point(M).distance(C)*Point(M).distance(R))
if cosQMR>cosCMR:
    print("#(7) ∠QMR＜∠CMR,",myGetDMS(acos(cosQMR)),"＜",myGetDMS(acos(cosCMR)))
else:
    print("#(7) ∠QMR＞∠CMR,",myGetDMS(acos(cosQMR)),"＞",myGetDMS(acos(cosCMR)))
#(1) sqrt(3)*a/2
#(2) sqrt(3)*a/6 , sqrt(3)*a/3
#(3) a/6
#(4) sqrt(13)*a/6
#(5) sqrt(21)*a/6
#(6) 3*sqrt(273)/91
#(7) ∠QMR＞∠CMR, 56度59分44秒 ＞ 49度6分24秒
```

# 参考

https://www.wingfield.gr.jp/archives/2687
よく使うけど毎回忘れるggplotの書き方まとめ

# ドットプロット
``` R: dotplot.R
library(tidyverse)

ggplot(iris, aes(x=Species, y=Petal.Width, fill=Species)) +
      geom_dotplot(binaxis="y" , stackdir="center")
```
![Dotplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80212/d5e18198-3a66-e0c5-17c4-65943f11d2bb.png)

# 軸やタイトルの文字の大きさを変える
``` R: textsize.R
library(tidyverse)

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width,color=Species)) +
           geom_point() +
           ggtitle("Iris graph") +
           xlab("") + 
           theme(text=element_text(size=20)) + #全体の文字サイズ
           theme(plot.title=element_text(size=50)) +  #タイトルの文字サイズ
           theme(axis.text.y = element_text(size=30)) + #軸の文字サイズ
           theme(axis.text.y = element_text(angle=45, vjust=0.5)) #軸の文字の回転
```
![textsize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80212/c2fb8594-d3e9-1003-4dfc-63fb2a3a695e.png)

# グラフに特殊文字を使う
``` R: special.R
library(tidyverse)

# ギリシャ文字や数式を含む列名を持つデータフレーム
special_character <- data.frame(wt = factor(c(1:5)), mpg = 10*rnorm(5), 
                   gear = factor(c("alpha","beta",'integral(x)*dx',"x^2","over(a,b)")))

ggplot(special_character,aes(x=wt, y=mpg)) +
      geom_point() +
  #Facetで使うとき → label_parsed
      facet_wrap(~ gear,labeller=label_parsed) +  
  #タイトルに使うとき → expression
      ggtitle(expression(paste(alpha,beta,gamma,"123"))) +　
      theme(plot.title = element_text(hjust=0.5)) +
  #グラフ内にかくとき →　そのまま
      annotate("text",x=3.5,y=10, label="alpha * ' function'",parse=TRUE) + 
  # 軸ラベルにかくとき → expression
      xlab(expression(frac(1,sqrt(2*pi))*"  x label")) 　
```
![special.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80212/c13b9925-64ba-8348-799e-065a1799ab85.png)


# 検定の結果を入れる
```R: test.R
library(tidyverse)
library(ggsignif)

ggplot(InsectSprays, aes(x=spray, y=count)) +
      geom_boxplot() +
      geom_signif( test=t.test,
                   comparisons = list( c("A","B")),
                   map_signif_level = TRUE
      ) +
    geom_signif( test=t.test,
                 comparisons = list(c("D","E")),
                 map_signif_level = FALSE,
                 y_position = 15,
                 textsize = 10
                 )
```
![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80212/3dfcecb7-bf1d-7e94-0413-4aa3553a2480.png)

# グループごとに下線を引く
```R: group.R
library(tidyverse)

ggplot(InsectSprays, aes(x=spray,y=count)) +
        geom_boxplot()+
  
        ylim(-5,30) +
        annotate("segment",x=1,xend=3,y=-5,yend=-5,size=2) +
        annotate("text", x=2, y=-3, label="first",size=10) +
        annotate("segment",x=4,xend=6,y=-5,yend=-5,size=2) +
        annotate("text", x=5, y=-3, label="second",size=10) 
```
![group.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80212/a9fd9988-09ad-8448-9ec7-e30008a01d44.png)


# その他
思い出したら追記していきます（多分）

# 参考文献
- [Rグラフィックスクックブック 第2版](https://www.oreilly.co.jp/books/9784873118925/)　
Winston Chang　著、石井 弓美子、河内 崇、瀬戸山 雅人　訳
- [君の知らない物語(あまり知られていないtidyverseの便利な機能)](https://qiita.com/uri/items/892fc597a9076dec501e)
@uri(株式会社ホクソエム)
- [ggplot2で複数のプロットをまとめて表示する方法あれこれ](https://qiita.com/nozma/items/cd98ec7938e0783d5d89)
２点の座標の距離・一次関数方程式の導出・４点の座標から交点を導出（Pythonでライブラリを使わずに）

# きっかけ
競技プログラミングの勉強中に、２点の座標から距離と一次関数方程式を導いたり、４点の座標から一次関数を２つ導出して交点座標（対角線の交点）を導出する方法を調べていたところ、ライブラリを使う方法は見つかるのですが、素朴に計算していくものがなかったので作成しました。

# ※注意！
ある程度の確認は行いましたが、誤りがある可能性もあります。あくまで使用は自己責任でお願いいたします。

```python
# ２点の距離を返す
def makedistance(x1, y1, x2, y2):
    d = ((x2 - x1) ** 2 + (y2 - y1) ** 2)**0.5
    return d

# ２点の傾きと切片を返す
def makeliner(x1, y1, x2, y2):
    if x2-x1 == 0:
        return 'line'
    else:
        return (y2-y1)/(x2-x1),(x2*y1-x1*y2)/(x2-x1)

# 点Ａ・点Ｃがなす直線と、点Ｂ・点Ｄがなす直線の交点を返す
def makeintersection(ax,ay,bx,by,cx,cy,dx,dy):
    # ACの直線の傾きと切片
    ac_steep, ac_intercept = (cy-ay)/(cx-ax),(cx*ay-ax*cy)/(cx-ax)
    # BDの直線の傾きと切片
    bd_steep, bd_intercept = (dy-by)/(dx-bx),(dx*by-bx*dy)/(dx-bx)
    # 傾きが同じなら平行
    div = ac_steep - bd_steep
    if div == 0:
        return 'parallel'
    else:
        return (bd_intercept-ac_intercept)/div, (ac_steep*bd_intercept-bd_steep*ac_intercept)/div

```
仮想ネットワークを使うまでの流れ

# VPCで設定すべきこと
**VPCとはネットワークのこと**。すなわち、**どんな環境にサーバー(インスタンス)を置くのか、そのサーバーはインターネットに接続するのか**を設計する必要がある。
**インターネットへの接続をするのであれば、インターネットゲートウェイの設定が必要。**
**オートスケーリングを行うのであれば、サーバーが自動的に増えるので、IPアドレスを多めに用意しておく必要がある**。
セキュリティグループやネットワークACL(どちらも仮想ファイアーウォール)の設定のため、インスタンス用途に応じたポートの設定も考える必要がある。デフォルトではポート（機器やソフトウェアが外部の別の主体と接続・通信するための末端部分のこと）が開いていないので、サーバーとして使用するには、設定を変える必要がある。
VPCには予め、デフォルトVPCを初め、デフォルトのサブネットや、デフォルトのセキュリティグループが用意されている。
# VPCを使用する流れ（マネジメントコンソールにて）
1. AWSにログインする
* リージョンを選択し、マネジメントコンソールを開く
* VPCダッシュボードを開く
1. VPCを作る
* VPC名を設定
* CIDRブロック(サブネット)を設定
* テナンシー(ハードウェアを占有するかどうか)を選択
1. サブネットの設定をする
* サブネット名を設定
* 対象となるVPCを選択
* AZを選択
* CIDRブロックを設定
1. インターネットに接続する
* インターネットゲートウェイ(IGW)を作成
* IGWとVPCを接続
* ルーティング（ルートテーブルの作成を設定）の設定
useEffectがマウント時に2回実行される

## 環境
- OS: Windows 10
- Node.js: v16.16.0
- React: 18.2.0

## 現象
useEffectでマウント時に1回fetchでAPIにアクセスして情報をとってくると・・・

```react:React
useEffect(() => {
    fetch("https://xxxx.com/xxx")
    .then(res => res.json())
    .then(data => {
            console.log(data)
    })
} , []);
```

2回fetchされている！！
Why Japanese People！？！？（古い）

```console:コンソール
(10) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
(10) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
```

## 原因
React18の、StrictModeの追加機能によるものだった。

> when running in “strict mode“ React will intentionally double-render components for in order to flush out unsafe side effects.
> 「ストリクトモード」で実行すると、安全でない副作用を洗い出すために、React は意図的にコンポーネントを二重レンダリングします。

引用元：

https://github.com/reactwg/react-18/discussions/19

StrictModeが有効な場合は、コンポーネントが2回レンダリングされる。
そのため、useEffectが2回実行されて、fetchの結果が2つ返ってきた、ということになる。

以下のGitHubのissueで議論されていた

https://github.com/facebook/react/issues/24502


## 回避策
他にもありそうだが、見つけたものだけ挙げてみた。

### 方法1: StrictModeを無効にする
- 手っ取り早いのはこれ。
```diff_jsx:React
root.render(
-  <React.StrictMode>
    <App />
-  </React.StrictMode>
);
```

### 方法2: 2回目の実行結果を無視する
公式にこんな方法があった。

>If your Effect fetches something, the cleanup function should either abort the fetch or ignore its result:
>
>Effect が何かを取得した場合、クリーンアップ関数は取得を中断するか、その結果を無視する必要があります。
>
>```React
>useEffect(() => {
>  let ignore = false;
>
>  async function startFetching() {
>    const json = await fetchTodos(userId);
>    if (!ignore) {
>      setTodos(json);
>    }
>  }
>
>  startFetching();
>
>  return () => {
>    ignore = true;
>  };
>}, [userId]);

引用元：

https://beta.reactjs.org/learn/synchronizing-with-effects#how-to-handle-the-effect-firing-twice-in-development

## 感想
最初は戸惑いましたが、issueを見つけてドキュメントにも反映されていたので
すぐに原因が分かって良かったです。
とはいえ、ちょっと不便だなあ・・

## 参考文献
https://beta.reactjs.org/learn/you-might-not-need-an-effect#fetching-data
Rubyのメソッドと戻り値について

# 目次
1.メソッドとは？
2.戻り値とは？

# 1.メソッドとは？
メソッドとは、「複数の処理を1つにまとめたもの」であり、他の言語における「関数」に相当する。
メソッドの作り方は以下の通りである。
```
def  メソッド名
　　処理
end
```
※メソッドには、引数(追加情報)を渡すことでメソッドの中でその値を使うことができる。
※メソッドを呼び出すには、「メソッド名(値)」と入力する。
具体的にメソッドを使って、自己紹介をしようとすると、、、
```index.rb
def self_intro(name)
 puts "はじめまして！"
 puts "私は#{name}です。"
end

self_intro("太郎")      #メソッドの呼び出し「メソッド名(値)」
```
すると以下のように出力される。
```console
はじめまして！
私は太郎です。
```
# 2.戻り値とは？
戻り値とは、「メソッドを呼び出した際に受け取る値のこと」のことである。
メソッドの中でreturnを使うことで呼び出し元で値を受け取ることができる。
returnの使い方は以下の通りである。
```
def　メソッド名
 return 値
end
```
戻り値「メソッドを呼び出した際に受け取る値のこと」と言われるとわかりにくいと思うので、
具体的に戻り値を含んだメソッドの例を紹介すると、、
```index.rb
def addition(a,b)    #引数が2つ → ,で区切る
 return a + b        # a + b を呼び出し元のaddition(1,2)に受け渡す
end

sum = addition(1,2)       #呼び出し部分を変数に代入することで、メソッドの戻り値を受け取ることができる
puts sum
```
すると以下のように出力される。
```
3
```
最後に、returnは戻り値を返すだけでなく、メソッドの処理を終了させるという機能も持っている。
Rubyではreturnが省略されることもあるため注意が必要。
AWS上に作成する仮想ネットワーク

# Amazon VPCとは
**Webサーバーやデータベースサーバーなど、各種サーバーは、ネットワークにつながってなければ、意味を成さない。**
そこで、**AWSで提供されているリソースを仮想ネットワークに置くのが、AmazonVPC**。
**Amazon VPC（Virtual Private Cloud）はAWSアカウント専用の仮想ネットワークでAWSで提供されているリソースのみを置くことができる**。
EC2やRDSの場合、作成時にVPCを選択しなければならない。
# VPCの構成
VPCの中にサーバーを置くことでネットワークに所属することになる。
しかし、VPCはそのままでは閉じたネットワークなので、VPC自体をさらにインターネットや社内LANに繋げる必要がある。
# VPCの機能
VPCでは**ネットワークやサブネットの範囲、ルートテーブルやネットワークゲートウェイの設定など、仮想ネットワーキング環境**を設定できる。
**VPCの主な機能**
|項目|内容|
|-|-|
|CIDRブロック|サブネットのこと。ネットワークを分ける範囲。VPC作成時にネットワークの範囲をCIDRで決め、それをさらに小さいサブネットに分けて使う|
|サブネットマスク|ネットワークの大きさを計算する値。CIDRはサブネットマスクの表記方法の一つ。|
|アベイラビリティゾーン|サブネットを配置する物理的な場所|
|インターネットゲートウェイ|インターネットへの出入り口。VPCをインターネットに接続しないときは使わない|
|ルーティング|データをどこの場所に送るかを決めるところ。ルーティングでインターネットゲートウェイとのデータ送受信を設定しておかないと、VPCからインターネットへは繋がらない。ルーターと同機能を担う。|
|ルートテーブル|ルーティングに関する設定が書かれたテーブル。|
|セキュリティグループ|AWSで提供されている仮想ファイアーウォール。設定はインスタンス単位で行う。|
|ネットワークACL|AWSで提供される仮想ファイアーウォール。設定はサブネット単位で行う。|
# VPCのネットワークの特色とルートテーブル
VPCネットワークはクラウドであるため、一般的なネットワークとは少し異なる。
**VPCには物理的なルーターがなく、ルーターの役割をするソフトウェアがルーティングを行っている。**ルーティングが設定された**ルートテーブル（設定書のようなもの）**を使って行われる。
物理的なサーバーであればLANケーブルやWi-Fiでルーターとホストを繋ぐが、**クラウドではルートテーブルで行う**。
**その他のVPCネットワークの特徴**
* ソフトウェアがルーティングを行っている。ルーターはIPアドレスを持たない。
* 1つのルートテーブルに対し、複数のサブネットを設定できる
* インターネットゲートウェイは1つのVPCに対し、1つのみ置くことができ、IPアドレスを持たない
* サブネット間通信はルーターなしで直接通信できる。
C#: ピタゴラス数

## コンパイラーのインストール

Ubuntu

```bash
sudo apt install mono-complete
```

## プログラム

```c#:Program.cs
﻿// --------------------------------------------------------------------
/*
	Program.cs

						Aug/28/2022
*/
// --------------------------------------------------------------------
using System;
using System.Collections.Generic;

// --------------------------------------------------------------------
class pythagoras
{
// --------------------------------------------------------------------
static	void	Main (string[] args)
{
Console.WriteLine("*** start ***");
int nmax = 100;
var ratios = new HashSet<double>();
int icount = 0;
for (int it = 1; it < nmax; it++)
{
	int it2 = it * it;
	for (int jt = it + 1; jt < nmax; jt++)
		{
		int jt2 = jt * jt;	
		int itjt2 = it2 + jt2;
		double dkt = Math.Sqrt((double)itjt2);
		for (int kt = (int)dkt; kt <= (int)dkt + 1; kt++)
			{
			int kt2 = kt * kt;
			if (itjt2 == kt2)
				{
				double ratio = (double)it / (double)jt;
				if (!ratios.Contains(ratio))
					{
					out_proc(it,jt,kt,ratio);
                    ratios.Add(ratio);
					icount++;
					}
				}
			}
		}
}

Console.WriteLine("icount = " + icount.ToString());
Console.WriteLine("*** end ***");
}

// --------------------------------------------------------------------
static void out_proc(int it,int jt,int kt,double ratio)
{
	String out_str = it.ToString() + "\t";
	out_str += jt.ToString() + "\t";
	out_str += kt.ToString() + "\t";
	out_str += ratio.ToString();
	Console.WriteLine(out_str);
}

// --------------------------------------------------------------------
}

// --------------------------------------------------------------------
```

```text:Makefile
Program.exe : Program.cs
	mcs Program.cs
clean:
	rm -f *.exe
```

## コンパイル

```text
$ make
mcs Program.cs
```

## 実行結果

```text
$ ./Program.exe 
*** start ***
3	4	5	0.75
5	12	13	0.416666666666667
7	24	25	0.291666666666667
8	15	17	0.533333333333333
9	40	41	0.225
11	60	61	0.183333333333333
12	35	37	0.342857142857143
13	84	85	0.154761904761905
16	63	65	0.253968253968254
20	21	29	0.952380952380952
20	99	101	0.202020202020202
28	45	53	0.622222222222222
33	56	65	0.589285714285714
36	77	85	0.467532467532468
39	80	89	0.4875
48	55	73	0.872727272727273
60	91	109	0.659340659340659
65	72	97	0.902777777777778
icount = 18
*** end ***
```

## 確認したバージョン

```text
$ mcs --version
Mono C# compiler version 6.12.0.0
```
AndroidアプリからのGoogle Drive API使用方法まとめ - (1) 全体編

# 目的
- Androidアプリからの Google Drive API Ver.3 (旧REST API) 使用方法をまとめる。

# 環境
- OS：Windows10 Professional 21H2
- Android Studio 2021.2.1
- ブラウザ：Google Chrome 103.0.5060.66（64bit）

# 概要

- AndroidアプリからGoogle Drive APIを使う手順は以下の通り。
  
  (a) [アプリ情報登録][link0]

    - Google APIコンソールで、これから作成するアプリケーションがGoogle Drive APIを使うことを指定し、必要な情報を登録する。

  (b) [認証情報登録][link1]

    - Google Drive APIはユーザー毎のストレージ領域を利用するため、あらかじめ登録されたアプリを通してアクセスしたユーザーにのみAPIを使えるよう認証を行う。

    - AndroidアプリのAPKファイルは、改ざん防止のためアプリ署名鍵を用いてデジタル署名しているが、APIはアクセスしてきたアプリが登録されたものかどうかを、アプリ署名鍵を使用して生成した証明書のフィンガープリントを用いて識別する。

    - 認証のためにサーバー側とクライアント（アプリ）側で共有する情報を設定する。

    - この時点では、開発中のアプリ認証用としてデバッグ用の情報を設定する。

  (c) [Androidアプリ開発][link2]

    - API経由でGoogle Drive内のファイルへアクセスするアプリを開発する。

  (d) [Google PlayへのAndroidアプリ登録後の処理][link3]

    - Google Playへ登録したアプリはデバッグ時と異なる証明書で署名されるため、前述の認証情報としてデバッグ用に登録された情報は使えなくなる。

    - Google Playコンソールでアプリを登録後、同コンソールから認証情報を取得し、この情報をGoogle APIコンソールで設定する。

- アプリがAPIを使って動作するときの流れと上記(a)～(d)の対応を以下の図に示す。赤枠で囲まれた(a)～(d)が上記手順に対応する。
  
  （ファイルもプロセスもメモリ上のデータも同じ箱だったり、認証じゃなくて認可では？、とかいろいろ突っ込みどころはあるのであくまで雰囲気で）

  （デバッグ時）
![Key_Certificate_Debug.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2408239/1ede5604-7841-62ac-a2d6-35ebc5d97998.png)


  （Google Playへのリリース時）
![Key_Certificate_Release.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2408239/eb56e4c1-b427-4628-dd48-605e3c467491.png)

# 参考

- [AndroidアプリからのGoogle Drive API使用方法まとめ - アプリ情報登録編][link0]
- [AndroidアプリからのGoogle Drive API使用方法まとめ - 認証情報設定編][link1]
- [AndroidアプリからのGoogle Drive API使用方法まとめ - アプリ開発編][link2]
- [AndroidアプリからのGoogle Drive API使用方法まとめ - アプリ登録後の認証情報設定編][link3]

# 変更履歴
- 2022/8/28 初版
- 2022/10/2 誤記修正


[link0]:https://qiita.com/SolitaryFiatist/items/65a63220a51acad7d302
[link1]:https://qiita.com/SolitaryFiatist/items/c942e0e0cfb114bfb013
[link2]:https://qiita.com/SolitaryFiatist/items/f0f13d66d04d7a078c99
[link3]:https://qiita.com/SolitaryFiatist/items/aa0c4aec3a4354df0d61
flutterで相対パスを処理する

## パターン１

```dart
var httpsUri = Uri(
      scheme: 'https',
      host: 'example.com',
      path: '/page/',
    );
print(httpsUri);
httpsUri = httpsUri.resolve("../aaa.txt");
print(httpsUri);
```

もしくは

```dart
var httpsUri = Uri.parse("https://example.com/page/");
print(httpsUri);
httpsUri = httpsUri.resolve("../aaa.txt");
print(httpsUri);
```

## 結果

```
https://example.com/page/
https://example.com/aaa.txt
```


## パターン２

```dart
var httpsUri = Uri.parse("https://example.com/page/bbb.txt");
print(httpsUri);
httpsUri = httpsUri.resolve("../aaa.txt");
print(httpsUri);
```

## 結果

```
https://example.com/page/bbb.txt
https://example.com/aaa.txt
```
Macのマウスホイールの方向を逆にする

WindowsとMacではマウスホイールの方向が逆で使いづらいです。
マウスホイール方向を逆にします。

こちらがマウスの中身です。
![スクリーンショット 2022-08-06 10.00.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7160/ba81ae06-e621-8235-fa53-9c5e3fa219d2.png)


マウスホイールの回転はロータリーエンコーダで検出しています。
赤丸で囲ったところがロータリーエンコーダです。

ロータリーエンコーダには端子が３本あり、その内の１本はGNDです。
残りの２本がA相、B相と呼ばれるパルスを回転に応じて出すらしく、それによって回転方向を検出する仕組みのようです。
要するに、A, Bの端子を逆に接続すれば回転方向の認識を逆にすることができるはずです。

テスターでピーピーすると、このマウスだと、どうやら一番右の端子がGNDのようだったのでそれ以外の２本の端子を切断し
逆につなぎます
![スクリーンショット 2022-08-06 9.57.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7160/9a7dcd29-2351-54c3-32af-0a4ff5fba2f6.png)

裏
![スクリーンショット 2022-08-06 9.59.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7160/b2b36751-4990-3349-ec3c-b5a760cc514e.png)

あとは蓋を戻して完了です。
![スクリーンショット 2022-08-06 10.03.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7160/5f04be6c-c9b8-2510-7181-f3030a28f507.png)

これでマウスホイールの方向がwindowsと同じになり使いやすくなりました。
AWS Lambdaに Funtion URLsを設定する


AppSyncから、cloudsearchを叩きたかったので、Lambdaに Funtion URLsを設定して、httpリゾルバで取得する形に。Lambdaリゾルバよりテストなどがしやすそうだったので。

ローカルでcloudsearchのLambda作成する形は以下。
https://qiita.com/rei-ta/items/e86546130d157561ba8e

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83911/2a6a1f95-3dc8-90a9-1745-5e6fa111b27f.png)

configurationから、Function URL （Lambda Function作成後の設定も可能）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83911/927cf5d2-ca9c-5536-2f11-ea9c0a4c45f9.png)


アクセス制御の方法を変えられるので可用性が高そう。
AWS資産から、使用する場合は、AWS IAMで。ローカルから暫定的に試す場合は、NONEで認証せずに使用可。試していませんが、CORSでの設定も可能とのこと。

http経由で実行すると、クエリストリングなのでパラメータ取得方法は、queryStringParametersから取得

```
https://xkdmddddddddddddddXjck.lambda-url.ap-northeast-1.on.aws/?q=%E3%82%A6%E3%82%AF%E3%83%A9%E3%82%A4%E3%83%8A
```

```
export const lambdaHandler = async (event, context) => {
  console.log(event.queryStringParameters);
```

eventのオブジェクトは以下のような構造
```
2022-08-28T01:38:05.969Z	e52d0a8e-3720-4e8f-9a17-a694d33107a2	INFO	{
  version: '2.0',
  routeKey: '$default',
  rawPath: '/favicon.ico',
  rawQueryString: '',
  headers: {
    'sec-fetch-mode': 'no-cors',
    referer: 'https://xkdmddddddddddddddXjck.lambda-url.ap-northeast-1.on.aws/?q=%E3%82%A6%E3%82%AF%E3%83%A9%E3%82%A4%E3%83%8A',
    'x-amzn-tls-version': 'TLSv1.2',
    'sec-fetch-site': 'same-origin',
    'accept-language': 'ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7',
    'x-forwarded-proto': 'https',
    'x-forwarded-port': '443',
    'x-forwarded-for': '150.249.205.131',
    accept: 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
    'x-amzn-tls-cipher-suite': 'ECDHE-RSA-AES128-GCM-SHA256',
    'sec-ch-ua': '"Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"',
    'sec-ch-ua-mobile': '?0',
    'x-amzn-trace-id': 'Root=1-630ac6fd-47285d7b5f1cb6161c6d5e49',
    'sec-ch-ua-platform': '"Windows"',
    host: 'xkdml4bwlylraovesek6nvsxnu0urjck.lambda-url.ap-northeast-1.on.aws',
    'accept-encoding': 'gzip, deflate, br',
    'sec-fetch-dest': 'image',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
  },
  requestContext: {
    accountId: 'anonymous',
    apiId: 'xkdmddddddddddddddXjck',
    domainName: 'xkdmddddddddddddddXjck.lambda-url.ap-northeast-1.on.aws',
    domainPrefix: 'xkdmddddddddddddddXjck',
    http: {
      method: 'GET',
      path: '/favicon.ico',
      protocol: 'HTTP/1.1',
      sourceIp: '150.249.205.131',
      userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
    },
    requestId: 'e52d0a8e-3720-4e8f-9a17-a694d33107a2',
    routeKey: '$default',
    stage: '$default',
    time: '28/Aug/2022:01:38:05 +0000',
    timeEpoch: 1661650685806
  },
  isBase64Encoded: false
}
```
惑星探査機の画像解析ツールISISの使い方（データ取得）

# はじめに
本稿では、画像データの取得方法について簡単に扱いたい。
あくまでも自分用のメモの側面が大きいことをご容赦いただきたい。

※「[惑星探査機の画像解析ツールISISの使い方（基礎）](https://qiita.com/axlbe/items/533c4bdfe87515e99d42)」の続きである。

# ISISで扱えるようにデータ変換
ISISでは、cubeファイル(.cub)という形式でデータを扱う。従って、[本家の説明](https://github.com/USGS-Astrogeology/ISIS3/wiki/Locating_and_Ingesting_Image_Data#Venus-)と後述するようなウェブサイトから画像を取得しても、そのままではISISの恩恵を授かれない。そのため、データ変換用のコマンド（importer）を用いてデータの変換を行う。
このデータ変換用のコマンド（importer）は大体"◯◯◯2isis"という形式になっている。
importerコマンドは以下の二種類：
1. general importer: .pds、.png、.jpgなどのデータを変換する。
1. mission data importer: 各ミッション・機器のデータ変換に特化している。

結局どのコマンドを使うかは[本家のコマンド一覧](https://isis.astrogeology.usgs.gov/Application/index.html)を参照して、自分の持ってるデータに合うものを選んでいくのが良さそう。

```shell:例
ciss2isis from=PATH/in.lbl to=PATH2/out.cub
#ciss2isisでは.lbl, .LBLファイルを使う。
```

# データの取得
データの取得のためにいくつものウェブサイトが展開されている。

1. [PDS Image Atlas](https://pds-imaging.jpl.nasa.gov/search/?fq=-ATLAS_THUMBNAIL_URL%3Abrwsnotavail.jpg&q=*%3A*)
ISISの本家で紹介されているのはこちら
1. [SBIB(Small Bodies Image Browser)](https://sbn.psi.edu/pds/sbib/)
 小惑星・冥王星・Ceres・Vesta・土星衛星の画像はこれがみやすいかも
1. [OPUS(Outer Planets Unified Search)](https://opus.pds-rings.seti.org/#/cols=opusid,instrument,planet,target,time1,observationduration&widgets=instrument,observationtype,target&order=time1,opusid&view=search&browse=gallery&cart_browse=gallery&startobs=1&cart_startobs=1&detail=)
太陽系でも外側の木星系・土星系＋αはこちら

どんなデータ形式をダウンロードする必要があるかは、先述のimporterによるので確認する必要がある。ほかにもこういったウェブサイトはたくさんあると思うが、スタートとしては悪くないラインナップだと思う(気が乗ればまた追記していきたい)。

# 参考
- [ISIS3のコマンド一覧](https://isis.astrogeology.usgs.gov/Application/index.html)
- [ISISによるチュートリアル：Locating and Ingesting Image Data](https://github.com/USGS-Astrogeology/ISIS3/wiki/Locating_and_Ingesting_Image_Data)
Elixirで冪根を求めることを楽しむ




Advent Calendar 2022 139日目[^1]の記事です。
I'm looking forward to 12/25,2022 :santa::santa_tone1::santa_tone2::santa_tone3::santa_tone4::santa_tone5:
私の[Advent Calendar 2022 一覧](https://docs.google.com/spreadsheets/d/1HQvFjagQLRPjOYAjDVzWp9S4b8dKixxvvaz_TtbZWto/edit#gid=1723448955)。

[^1]: @kaizen_nagoya さんの「[「@e99h2121 アドベントカレンダーではありますまいか Advent Calendar 2020」の改訂版ではありますまいか Advent Calendar 2022 １日目　Most Breakthrough Generator](https://qiita.com/kaizen_nagoya/items/49ebebee3a0377f3b59b)」から着想を得て、模倣いたしました。 

---



# はじめに

[Elixir](https://elixir-lang.org/) を楽しんでいますか:bangbang::bangbang::bangbang:

この記事は、[Elixir](https://elixir-lang.org/)で冪根（べきこん、または累乗根（るいじょうこん））を求めてみます。

# What's 冪根（べきこん) or 累乗根（るいじょうこん） ?

次の式が成り立ちます。

```math
\sqrt[n]{x} = x^{\frac{1}{n}}
```

詳しくは、Wikipediaの[冪根](https://ja.wikipedia.org/wiki/%E5%86%AA%E6%A0%B9)をご確認ください。

たとえば、
- 3は、9の2乗根 (3を2乗すると、9になる)
- 9は、81の2乗根 (9を2乗すると、81になる)
- 9は、729の3乗根 (9を3乗すると、729になる)

というわけです。



# [Elixir](https://elixir-lang.org/)でやってみる

```
$ iex
```

[IEx](https://hexdocs.pm/iex/IEx.html) （Elixir's interactive shell）を立ち上げて確認してみます。

```elixir
iex> 9 ** (1/2)
3.0
iex> 81 ** (1/2)
9.0
iex> 81 ** 0.5  
9.0
iex> 729 ** (1/3)
8.999999999999998
```

※ 729の3乗根は9に近い値となっています。
http://www.ritsumei.ac.jp/se/rv/joen/program06/program2_06.html の話です。


# [**/2](https://hexdocs.pm/elixir/Kernel.html#**/2)

[**/2](https://hexdocs.pm/elixir/Kernel.html#**/2)は、[Elixir](https://elixir-lang.org/) 1.13から使えます。

その実装は以下にあります。

https://github.com/elixir-lang/elixir/blob/v1.13.4/lib/elixir/lib/kernel.ex#L4108-L4151

第2引数が、小数である場合には、`:math.pow(base, exponent)`とErlangの関数が呼び出されていました。

# 参考記事と御礼

https://qiita.com/shiracamus/items/fd35c685e9679323471f#%E7%AE%97%E8%A1%93%E8%A8%88%E7%AE%97

こちらの記事で、Pythonを使って`81 ** (1/2)`の計算をされていました。
[Elixir](https://elixir-lang.org/)でやってみるとどうなるのだろう？　とおもって、やってみたところ同じ結果が得られました。
ということを記事にしておきました。
ありがとうございます！




# まとめ

[Elixir](https://elixir-lang.org/)で冪根（べきこん、または累乗根（るいじょうこん））を求めてみました。

```math
\sqrt[n]{x} = x^{\frac{1}{n}}
```

[**/2](https://hexdocs.pm/elixir/Kernel.html#**/2)は、[Elixir](https://elixir-lang.org/) 1.13から使えます。

2022/12/25が待ち遠しいです :santa::santa_tone1::santa_tone2::santa_tone3::santa_tone4::santa_tone5: 


---



I organize [autoracex](https://autoracex.connpass.com/).
And I take part in [NervesJP](https://nerves-jp.connpass.com/), [fukuoka.ex](https://fukuokaex.connpass.com/), [EDI](https://fukuokaex.connpass.com/), [tokyo.ex](https://beam-lang.connpass.com/), [Pelemay](https://pelemay.connpass.com/).
I hope someday you'll join us.

[We Are The Alchemists, my friends!](https://www.youtube.com/watch?v=04854XqcfCY)
SwiftUI: Mapを表示してピンを立てる

自分用の時刻表アプリを作ろう、という記事を書いた時に、乗り場をタップすると、その乗り場の地図を表示できたらいいなと思ったので、調べました。

https://qiita.com/tnar-f/items/1a95429cf5e8547f0b2f

以下、調布駅北口ロータリー周辺の地図を表示し、12番乗り場にピンを立てるコードです。

```Swift
import SwiftUI
import MapKit

// ピンを定義する構造体
struct identifiableplace: Identifiable {
    let id = UUID()
    let latitude: Double
    let longitude: Double
    var coordinate: CLLocationCoordinate2D {
        CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
    }
}
struct ContentView: View {
    // 12番乗り場
    let terminal12 = [
        identifiableplace(latitude: 35.652148, longitude: 139.543785)
    ]
    // 調布駅北口のロータリー周辺
    @State private var region =
    MKCoordinateRegion(
                center: .init(latitude: 35.65249,
                              longitude: 139.54409),
                              latitudinalMeters: 120,
                              longitudinalMeters: 120
            )
    var body: some View {
        Map(coordinateRegion: $region,
            annotationItems: terminal12,
            annotationContent: { spot in MapPin(coordinate: spot.coordinate, tint: .red)
        }).edgesIgnoringSafeArea(.all)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
```


こんなかんじで表示されます。
![スクリーンショット 2022-08-28 11.00.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517091/189b631b-ecc1-b987-5613-f2694e06aabe.png)

AppleのMapKitのドキュメントを参考にしました。ピンだけでなく、マーカーやアノテーションの説明があります。
https://developer.apple.com/documentation/mapkit/map

以下の環境で、動作を確認しました。
MacOS Monterey 12.5.1
Xcode 13.4.1
『初めての自動テスト』感想

:::note warn
書籍の感想です。
:::

# 読んだ本

**『初めての自動テストーーWebシステムのための自動テスト基礎』**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595926/579cde02-88f3-c41c-529d-fb3a1c280b6e.png)

著者：Jonathan Rasmusson
訳者：玉川紘子
発行所：オライリー・ジャパン

https://www.oreilly.co.jp/books/9784873118161/

# 読んだきっかけ

テストやその自動化について学習しようと思っていたところ、和田（t_wada）さんが入門書としてお勧めしていた。[^1]
[^1]:Q&Aの「勉強会に最適な本」　1:24:30～

https://youtu.be/fX0DtxTTZXc

# 全体の感想

タイトルにもあるように、**HTMLで作成されたUIを伴うようなWebシステム**を対象にした自動テストについて解説されている。

初心者にもわかりやすい表現やコミカルなイラストで構成になっていて、**初めて自動テストについて学習するときや布教にも使いやすい**と思う。

**考え方に重点を置いた内容**になっているので、テストフレームワークなどツールの学習は別途行うことになる。

# テスト自動化のメリット

ソフトウェア開発を**スケールさせていくことを考えると必須になる**と思う。
「テストに時間をかければ質が上がるか」というと、質とスピードはトレードオフではないのでスピードも上げることも一緒に考える必要がある。[^2]
[^2]:スピードがないので質を上げる余裕がない、という状況がしばしば観測される

『LeanとDevOpsの科学』では「ソフトウェアデリバリのパフォーマンス」との関連が示されている。[^3]
[^3]:「信頼性の高い自動化テストの実施」はITパフォーマンスの予測尺度となりうる

https://qiita.com/blue32a/items/fea1f9f3ebd7cbc94a07

# テストピラミッドと３層のテスト

何度も強調されているのが「**UIテストは万能ではない**」という点。

実際にUIテストを書いてみたのでこの点はわかる。一連の動作を自動化できたときはちょっとした感動があったのだが、そこにたどり着くまでとても大変であったし、テストは非常に脆く見えた。

それぞれのテストの特徴をふまえて**バランスを考える必要がある**。

# 自動テスト導入の進め方

重要とされているのは、**なるべく下の層でテストできないか考える**こと。
これは前述の「UIテストは万能ではない」が示すように高コストで遅く、かつ壊れやすいという点からきている。

とはいえこれも状況次第で、テストのことが考えられていないレガシーなシステムだとユニットテストを入れるのが難しいので、外側（UI）から攻略していくことになる。
なのでいったん逆ピラミッド（アイスクリームコーン）の状態になったあと、ピラミッドの形にしていく流れが考えられる。

# プログラミングの基礎

初心者やテスターを対象にしているので、プログラミングの基礎にも触れている。
特にコーディングスタイルを重要視していて「**保守しやすいコードの書き方**」を解説している。
これは長期的にも**テストを「資産」とするための方法**と言える。

# モックの活用方法

初めてテスト自動化に挑戦していた頃、モックを使いすぎてテストに自信を持てなくなってきた事がある。「**モックの泥沼**」にはまった状態だった。
そういう時はプロダクトコードの設計を見直したり、上の層で本物を使ってテストすることを考える。

「古典派かモック派か」だと自分は古典派かな。

# テスト駆動開発（TDD）

この章まで来るとテスターには向かない内容だが、設計に悩む初心者は試してほしい。
自然と良い設計になっていくのを感じるし、テストコードも付いてくるので良い手法だと思う。

https://qiita.com/blue32a/items/608019d7fc7c65a750bc

https://qiita.com/blue32a/items/aeffc1f59f4948e9fb6b

# まとめ

## テスト自動化は人の効率を上げる

数多くのチェックを淡々と正確に行うのは機械が得意とするところ。自動化できるテストは機械に任せることにより、**人にしかできないことに力を集中することができる**。

## 常に見直す

自動化されたテストが長期的にもメリットを発揮し続けるには、**常にテストのバランスやコードの状態に気を配る必要がある**。

## 協調が大事

良い自動テストを作るには開発に関わる人たちの協力が必要。**協力が促進されるような組織体制や仕組みから考えていくことが重要**。
本日の発掘動画：デジタル署名

　・デジタル署名【まさるの勉強部屋】
　　　https://www.youtube.com/watch?v=s0pe4mNliZo
　・分離署名　包含署名　内包署名【まさるの勉強部屋】
　　　https://www.youtube.com/watch?v=it3cB-gxCXs
　・公開鍵証明書の検証　CRL OCSP【まさるの勉強部屋】
　　　https://www.youtube.com/watch?v=OroazRQ83QI
　・PKI【まさるの勉強部屋】
　　　https://www.youtube.com/watch?v=2hiMWRou_is


デジタル署名関係の学習。

-----
【情報・工学】青レンの良質解説動画 発掘一覧
　　https://qiita.com/aokiren8/items/965746f13ce27cb65ffa
【Tableau Data Saber挑戦記】本当にABテストに意味があったか、結果を検証したいとき〜クロス集計表とカイ二乗検定〜

# はじめに
こんな感じの項目ごとに数値を分類した表、よくエクセルで作ったりしますよね。これを「クロス集計表」といいます。この図では性別や年代別にアンケート結果をまとめています。もちろんこのクロス集計表もtableauでできます。
また、普段の業務でもABテストのように複数のものの結果を比較してどっちがパフォーマンスを検証する場面てあると思います。「本当にそのABテスト意味あるの？」ってことで統計的に検証する方法についても触れていきたいと思います。

クロス集計表とは？基礎知識と賢い活用法 | リサーチコラム

https://gmo-research.jp/research-column/cross-tally

# クロス集計表の作り方
今回も動画を見てイメージを掴んでみたいと思います。
 Tableau（タブロー）のクロス集計の設定例です。

https://www.youtube.com/watch?v=FAUMFAFOy2w

ざっくりいうと、行（「表側」）のところにカテゴリのような属性を入れていて、列（「表頭」）に年月を入れ、カテゴリごとと年ごとをかけ合わせた売上が見れるようになっています。
エクセルとかでもピボットテーブルを使えば簡単に作れますが、tableauでも簡単にできますね。
一応動画以外に参考として記事も載せておきます。

TableauでExcelのような「クロス集計表」を作る ＃10 | Web担編集部がゼロから学ぶ

https://webtan.impress.co.jp/e/2020/02/18/33405

# 検証
WEBマーケティングに関わっているとLPやバナー、タイトル文などのスプリットテストをすることってよくありますよね。
なんとなく「こっちのほうがCTR高いから効果あるんじゃないか」みたいな感じで結論づけてしまっていませんか。もしかしたら、たまたまそのときはそっちのバナーがよかっただけでインプレッション増やしてみたり、再度テストしてみたりしたら違う結果になることだって考えられます。
つまり、「本当にLPやバナーの違いが結果につながったのか」、はたまた偶然だったのか、誤差の範囲だったのか、その結果に意義があるのかを調べることを「検証（検定）」と言います。クロス集計表を作ってあれば、そんなこともできちゃいます。ここでは、そんなお話をします。
といいながら説明するのも面倒なのでこちらの動画を見てください。

【エクセルで統計分析】自店舗に効果的な宣伝方法は？（カイ二乗検定）

https://youtu.be/qsv3nKk5puc?t=40

「カイ二乗検定：クロス集計表の2つのデータが影響しあっているかどうかを見る手法」
ということでここでは薬A/Bと症状の変化をクロスして表にしています。
「薬の違い」と「症状の変化」とに関係性があるかどうかをカイ二乗検定で検証します。

詳細は動画を見ていただいたほうがいいと思いますが、ざっくりどんなことをするかというと

− 薬A/Bそれぞれの合計に対する比率を出す
− 比率をもとに「予測値」を算出する
− 「実測値」と「予測値」を選んでエクセル関数CHISQ.TEST関数でP-値を算出する

ということをしています。

P-値は0.05を基準に判断がなされます。「0.05よりも小さい」とその差に意味がある（効果がある）とされ、「0.05よりも大きい」とその差に意味はない（効果はない）
つまり今回のものなら、
0.05よりも小さい→薬の違いに意味がある
0.05よりも大きい→薬の違いに意味がない
となります。

この考え方を使えば、薬A/BをバナーA/Bなどに置き換えて考えれば普段の業務でも使えそうですよね。

# おわりに／参考
ということで、ほぼほぼエクセルのことじゃないか！と思われるかもしれないですが、とりあえずそういう概念があるよということを知っていただけたら良いかなと思っています。

参考としてtableauでカイ二乗検定をする記事があったので載せておきます。
TableauでABテストの検定結果を表示する方法

https://www.cresco.co.jp/blog/entry/5501/


サンプルファイルも付いてたりするのでよければ見てみてください。

個人的には、カイ二乗検定は「別にtableauを使ってまでやることでもないな」（エクセル関数で事足りる）と思った次第ですが、クロス集計表をきれいに見やすく作るという点ではtableauが良いんじゃないかなと思います。

それと、ツール（WEB広告／LP配信ツールやスプリットテストのためのツール）によってはカイ二乗検定の機能も備えているものもあるようです。

以上、お粗末さまでした。


## 【Tableau Data Saber挑戦記】の最初の記事はこちら
こちらもぜひ

[【Tableau Data Saber挑戦記】1. はじめます](https://qiita.com/hetare/items/d55a7dda34f3b0e9073b)

https://qiita.com/hetare/items/d55a7dda34f3b0e9073b
とりあえず知っておいた方が良いセキュリティ技術７選

# とりあえず知っておいた方が良いセキュリティ技術７選

以下７つについて簡単に解説。

1. Hash
2. Salt (Paper)
3. HMAC
4. Symmetric Encryption
5. Keypairs
6. Asymmetric Encryption
7. Signing

## 1. Hashing

ハッシュとは、任意の長さのデータを固定長の長さの文字列に変換することです。この変換には以下のルールがあります、ちなみに変換後の文字列をハッシュ値と言います。

1. 入力が同じ場合はハッシュ値も同じになる。
2. 違う場合は必ず変換結果も異なる、つまりある入力に対してユニークなハッシュ値があてがわれます。
3. ハッシュ値から入力を逆算できない。

ハッシュ化する方法は色々ありますがMD5やSHA-256が有名です。

### 目的

セキュリティ技術の根幹なので色々な用途がありますが、簡単な使用例としてはパスワードを保存することです。
サイト側でユーザーパスワードを保管する際に平文のパスワードを記録するとデータ漏洩時にリスクがありますが、代わりにハッシュ値を保管することで漏洩してもパスワードを解析させづらくします。
通信時も端末側でハッシュ化してから送信することでリスク低減を行うことができます。

## 2. Salt (and Papper)

ソルトとは、前述のパスワードをハッシュ化して保存する様な時に追加で行う処理です。
ソルトが使われる経緯ですが、単純にパスワードをハッシュ化するだけだとある状況で非常にまずいことになります。それはパスワードが非常によく使われる語句だった場合です。例えば文字列`password`のハッシュ値は
`5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8`
ですが、このようなハッシュ値を大量に用意し攻撃対象のハッシュ値へ照会を行うことで効率的に平文を割り出します。

この問題への対策として、ハッシュ化する入力にランダムな文字列を追加することによってハッシュ値もランダムに変化させます。これがソルトです。
しかし、ソルトの弱点として追加された文字列がなんだったのかDBで記録する必要があるのでそれが流出する可能性があります。

ペッパーはソルトの弱点を克服する為のアイデアです。単純に追加する文字列をDBよりもセキュリティレベルが高い場所に保存することです。

## 3. HMAC

HMAC(Hash Based Message Authentication Code)とはデータ通信時に送信者の認証とデータ改竄を検知する仕組みです。
前提として共有鍵というデータを送受信者間で決めておきます。
その上で送信者はデータ＋共有鍵のハッシュ値を再度ハッシュしたデータ（MAC値）をデータと共に送信します。そうすると
受信者側で受信したデータと共有鍵からMAC値を計算することで安全性を担保できます。何故なら両者のMAC値はデータと共有鍵の両方が一致した場合のみ等しくなる為、MAC値が異なっていた場合鍵が違うかメッセージが送信時と異なっていることになるからです。

```python
message = "Hello World"
key = "secret"
mac = hmac.new(key, message)

message_sent = "Hello World!!"
if hmac.new(key, message_sent) != mac:
    print("Altered message")
```

## 4. Symmetric Encryption

対象鍵暗号化はHMACの様なデータ通信時のデータを保護する仕組みです。対象、というように暗号化と復号化に同じ鍵を使用する方式です。
HMACだけでは通信中にデータを傍受されるとデータを読み取ることができてしまいます。そこで暗号化を行うことでデータを読み取ることを防ぎ、受信者側で復号化を行うことでデータを読み取ることができます。複合化に使用する鍵は送信者側と受信者側で共有しておく必要があります。
AES256等のアルゴリズムが有名です。

## 5. Key Pairs

非対称鍵暗号化は対象鍵暗号化とは異なり暗号化と復号化に異なる鍵を使用する方式です。送信者側で暗号化に使用する鍵を公開鍵と呼び、受信者側で復号化に使用する鍵を秘密鍵と呼びます。公開鍵と秘密鍵はペアであり、公開鍵で暗号化したデータは秘密鍵で復号化することができます。また、秘密鍵で暗号化したデータは公開鍵で復号化することができます。
公開鍵を別途用意することによって鍵の共有による漏洩リスクを回避することができます。
RSAが有名です。

## 6. Asymmetric Encryption

非対称鍵暗号化、特にSSLというプロトコルではウェブサイトがクライアントに送信するデータは公開鍵で暗号化し、クライアントは秘密鍵で復号化することで安全にデータを読み取ることができます。

## 7. Signing

署名とはデータの送信者を証明する仕組みです。暗号化ではデータを読み取れなくする仕組みですが、場合によっては内容よりも送信者が信頼できるかどうかが重要な場合があります。そのような場合に署名を使用します。署名は非対称鍵暗号化を使用しています。送信者はデータと秘密鍵から署名を生成し、データと共に送信します。受信者はデータと公開鍵から署名を検証し、署名が正しいかどうかを確認します。署名が正しい場合は送信者が正しいことが証明されます。
オーダ記法

オーダ記法とは、アルゴリズムの計算量（実行時間）。
* 関数の極限における```値の変化を大まかに評価```するための記法。
    出典 https://e-words.jp/w/%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E8%A8%98%E6%B3%95.html#:~:text=%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E8%A8%98%E6%B3%95%E3%81%A8%E3%81%AF%E3%80%81%E9%96%A2%E6%95%B0,%E3%81%AE%E8%A9%95%E4%BE%A1%E3%81%AB%E7%94%A8%E3%81%84%E3%82%89%E3%82%8C%E3%82%8B%E3%80%82

* 「データ数が十分大きい時のアルゴリズムの```計算量を大雑把に評価```したものを記す方法」
* 「これを計算するのにどのくらい```どれくらい時間がかかるのか```？」
    出典 https://trend-desk.com/archives/3333#i-2
* ```計算にかかる時間とデータ量の関係```について表した記法です。
    出典 https://note.com/strictlyes/n/n82d0a3874256

# 各アルゴリズムのオーダ
以下アルゴリズムのオーダを紹介する
## 探索アルゴリズムのオーダ
### 線形探索法           O(n)
### ２分探索法　           O(log2n)
### ハッシュ法            O(1)

## 整列アルゴリズムのオーダ
### 基本交換法（バブルソート） O(n^2)
### 基本選択法（選択ソート）  O(n^2)
### 基本挿入法（挿入ソート）  O(n^2)
### シェルソート           O(n^1.2)
### クイックソート          O(nlog2n)
### ヒープソート           O(nlog2n)
ベトナム産のDeltaXロボットでピッキングを実装するまで

# 本記事でわかる事
1. 購入したベトナム産のデルタロボット（Delta X2）について
2. 組み立て
3. PCとの接続
4. ピッキング作業の実装  （後編）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238056/b8e0573c-9bb6-f854-18c9-3821662200fd.png)
[Delta XのHP](https://www.deltaxrobot.com/)

# 1. ベトナム産のデルタロボット（Delta X2）について
デルタロボット（パラレルリンクロボット）をベトナムのDeltaXという会社（IMWI Technology大学のDeltaX team？）から購入した。自分が買ったのは、[Delta X 2 Pick & Place Kit($699)](https://deltaxstore.com/products/delta-x-2-pick-place-kit)。
PayPalで支払えるし、海外の記事で結構使える、と紹介されていたので買ってみることにした。
兵庫県への輸送代は$80。購入後3週間ほどして梱包材でグルグルにされた状態で無事に届いた。
なお、コロナキャンペーン？で約$70を値下げしてくれた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238056/bb12d14e-98b1-2be5-52bb-367a8c91f710.png)

#### 特徴1: オープンソース
オープンソースをうたい、ファームウェアやロボット操作用のソフトが[Github](https://github.com/deltaxrobot/Delta-X-Software)に公開されている。（2019年時点のもので、最新バージョンより古いようだが。）
さらに、ソフトだけでなくハードウェアの部材も一式情報が公開されていて、3Dプリンターの部材図面も含まれている。
その気になれば、ゼロから作ることができるようになっているのが凄い。

#### 特徴2: 複数の制御方法
制御には、[Gコード](https://www.deltaxrobot.com/p/g-codes-for-delta-x-2.html)というNCマシンなどの制御で使われている手順型の言語を用いているため、彼らが提供する[ロボット制御ソフト(Delta X Software)](https://www.deltaxrobot.com/p/download.html)を使わずに、[Arduino](https://www.deltaxrobot.com/p/control-delta-x-2-with-arduino-mega-2560.html)やRasPi、C＃やpythonからもロボットを制御することができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238056/f597c356-a6dd-c173-a471-20cf19e08694.png)

#### 特徴3: 便利なエンドエフェクタ付き
ホビー使いの自分には十分な種類のエンドエフェクタが用意されていた。
安価な部材と3Dプリンタの治具で組み立てられたもので耐久性などは期待できないが、ホビー用には十分だ。
![endefffectors-resize_1024x1024@2x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238056/7ba6b503-2e9a-3c59-5349-52643e7ee762.jpeg)

[Delta X 2 Pick & Place Kit($699)](https://deltaxstore.com/products/delta-x-2-pick-place-kit)に含まれていた一式は以下の通り；
①エンドエフェクタの手元を回転させるサーボモータ
②サーボモータでのグリッパー
③サーボモータでのグリッパー
④ペンのホールダー（ペン付き）
⑤吸引式
⑥吸引式
⑦エアーﾎﾟﾝﾌﾟ
（②～⑥を１つ選んで、①の先端に付ける感じ。⑦は⑤・⑥を使うときに接続させる。）

# 2. 組み立て
組み立ては簡単で、必要な道具類も全て梱包されていた。
手順は[彼らのHP](https://www.deltaxrobot.com/p/assembling-delta-x-2-robot.html)で確認可能。

# 3. PCとの接続
結論から言うと、Bluetooth接続がPCと接続する最も簡単な方法でうまくできた。[手順はこちら](https://www.deltaxrobot.com/p/control-delta-x-2-with-delta-x-software.html)に記載されている。
なお、AruduinoなどのBluetoothがないシングルボードを使うことを想定し、
有線での制御を[tutorial](https://www.deltaxrobot.com/p/control-delta-x-2-with-termite-software.html)に従ってトライしたが、自分はうまくいかなかった。
(切り分けテストのため、[USB-TTLコンソール](https://www.amazon.co.jp/gp/product/B00K7YYFNM/ref=ppx_yo_dt_b_asin_title_o08_s00?ie=UTF8&psc=1)まで買って試したがダメだった。幸い、部材まで含めて全て公開されているので、おいおい切り分けテストをして原因究明をしようと思っている。）

・・・
と、初めての投稿で時間が足りなくなったので、DeltaXを使ったピッキングの実装は、後編に記載しようと思う。

ここまでの、とりあえずの結論としては、
DeltaXロボットは、コスパが良い。日本でデルタロボットをホビー用で調達する場合、現時点ではベストパフォーマンスなのではないかと思っている。

ご意見あれば何なりと。
本日の発掘動画：アナログ含めたネットワークの種類・IP-VPN

　・ネットワーク技術の基礎知識（ネットワークの種類）【Odysseymedia】
　　　https://www.youtube.com/watch?v=cyiwo_3987k
　・「OSI参照モデル」が30分で絶対分かる！【ウズウズカレッジ】
　　　https://www.youtube.com/watch?v=5QHXbxZIUDg
　・CCNA「物理層」を完璧理解できる講座【ウズウズカレッジ】
　　　https://www.youtube.com/watch?v=7CqpCqLmghI
　・URLとは？【徳田 啓】
　　　https://www.youtube.com/watch?v=JFmWFh9S4Gs
　・IP-VPNのきほん【まさるの勉強部屋】
　　　https://www.youtube.com/watch?v=ETnXd7SPYR4
　・SSL/TLS サーバー証明書の基礎知識【サイバートラスト】
　　　https://www.youtube.com/watch?v=i59uwYdmS_U
　・認証局【まさるの勉強部屋】
　　　https://www.youtube.com/watch?v=vOCjdudSU7g
　・認証局の階層構造【まさるの勉強部屋】
　　　https://www.youtube.com/watch?v=JAgmikBSVv4
　・サーバ証明書 オレオレ証明書で遊ぼう【まさるの勉強部屋】
　　　https://www.youtube.com/watch?v=hxlQei0VFrg
ネットワークの復習。

------
【情報・工学】青レンの良質解説動画 発掘一覧
　　https://qiita.com/aokiren8/items/965746f13ce27cb65ffa
double等の浮動小数点数の四則演算で誤差がでた罠

小数点の計算にdoubleを使っていると
意図しない誤差が出てきて答えが合わなかった
実際に数値を表示させてみるとこんな感じ
```
double sum = 0.0;
double plus = 0.9;
for (int i = 0; i < 10; i++)                   // 10回繰り返す
{
    double pre = sum;
    sum = pre + plus;
    Console.WriteLine("|{0:G17}|{1:G17}|{2:G17}|", pre , plus, sum);
}
```
|pre|plus|sum|
|-|-|-|
|0|0.90000000000000002|0.90000000000000002|
|0.90000000000000002|0.90000000000000002|1.8|
|1.8|0.90000000000000002|2.7000000000000002|
|2.7000000000000002|0.90000000000000002|3.6000000000000001|
|3.6000000000000001|0.90000000000000002|4.5|
|4.5|0.90000000000000002|5.4000000000000004|
|5.4000000000000004|0.90000000000000002|6.3000000000000007|
|6.3000000000000007|0.90000000000000002|7.2000000000000011|
|7.2000000000000011|0.90000000000000002|8.1000000000000014|
|8.1000000000000014|0.90000000000000002|9.0000000000000018|

**浮動小数点数型の性質で近似値が格納されてるじゃん！！**

::: note info
細かい数値が処理に影響を及ぼす場合は
前もって小数点を含む数値は10^nを掛け算したのちに
Mathのround関数で丸めて整数にしておくと良いそうです
:::
Salesforce認定アドミニストレーター試験の公式練習問題を解説してみた-その006

こんにちは。本橋孝昭です。

Salesforce認定アドミニストレーター試験の公式練習問題があるのはご存じでしょうか。
Trailheadにフラッシュカードとして何度も解ける練習問題がございます。

今回はTrailhead
アドミニストレーター認定の準備: 構成、設定とオブジェクト
構成と設定の学習　にある練習問題6問目をご紹介します。
https://trailhead.salesforce.com/ja/content/learn/modules/administrator-certification-prep-setup-and-objects/study-up-on-org-setup

なお、こちらの内容はYouTubeでも公開しております

https://www.youtube.com/watch?v=DUgB5GVp4Wk

<iframe width="560" height="315" src="https://www.youtube.com/embed/DUgB5GVp4Wk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


練習問題6問目はこちらです

![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/405e2e98-cacf-f6be-1f04-ed3e744eba8d.png)


いかがでしょうか
とあるユーザがログインできない　というトラブルが起こったのでシステム管理者が最初に確認することろはどこか。　という話です


正解はAです。

では、解説にいきます

実際にユーザのログイン履歴管理関連リストはこちらです。

ここではユーザがログインを失敗したじ状況の把握が可能です。

例として今回の場合、パスワードが誤っていることによりログインできないことが分かります
![ログインエラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/b20a8fcd-0523-f704-63b8-84d4f3cf8c24.png)

ログイン履歴の詳細についてはこちらのヘルプをご参照ください

ログイン履歴の監視
https://help.salesforce.com/s/articleView?id=sf.users_login_history.htm&type=5





今日の内容はここまでです。
皆さん楽しく元気にSalesforceを学びましょう！