OmniAICreator/Qiita-1.07M huggingface dataset:
[UE4]Single Sample Shadow from Stationary Light

Stationary LightはStaticなObjectの影をMovableなObjectに投影するためにPreshadowというShadowMapを裏でひっそり作成してます。
そのため正確に各オブジェクトからの影が反映されるのですが、各スケルタルメッシュ一つ一つにこのシャドウマップを作成するためCPU/GPU的にも重たい処理となっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/64f9c57d-ea1e-1300-9162-6d7396d82261.png)



このPreShadowはInset Shadowの処理の一つであり、Directional LightのCascadeのInset ShadowをOffにするとDefaultで無効になります。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/8d17c475-8804-f776-77a9-dfe749ff3573.png)

ただし、無効になるとスタティックオブジェクトの影に入った際に露骨に明るくなってしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/0bc91776-3f13-a0d4-9324-fe0c5fa2dc82.png)


これを緩和するためのオプションがSingle Sample Shadow from Stationary Lightsです。Volumetric Lightmapが格納しているDirectional Lightの Shadowの値を各Pixelで読み込み、それを影としてDirectional Lightからの計算を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/5539305b-01bf-63e1-edb5-4f16ee6f4123.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/5e44881d-bf60-43b8-2dc2-9984666ff03f.png)


Volumetric Lightmap使用時のみできる技ですが、PreShadowのためのShadowMap作成コストなどがなくなるので、速度的には非常にありがたいものとなっています。

以上。自分の2018年のツイートをコピペしただけの記事でした。
[UE4]ドキュメントサイトのサイドバーにFilterあるよ！

Epic Games Japanのローカライズマネージャーである星野さんから教えてもらいました！
（自分は知らなかった！）


[Unreal Engine 4 ドキュメント](https://docs.unrealengine.com/ja/index.html) このサイトのサイドバーにいつのまにかFilter Pagesが作られました！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/3559ce44-7fbb-9c13-77d1-d831d63721fd.png)

まじだ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/9e457db7-7de1-04eb-dc66-3578a4f3a3be.png)

検索速い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/787fdf12-86a9-e816-b1a0-1baa96a31172.png)


みなさんもドキュメント探すときにお使いください！
星野さんありがとうございます！
[UE4]r.InvalidateCachedShadersで全シェーダの再コンパイルを強制する

# r.InvalidateCachedShaders

内部でシェーダコードを書き換えたりした際や、マテリアル内部のシェーダを確実に更新したい場合があります。そんなとき便利なのが

```
r.InvalidateCachedShaders 1
```
というコマンドです。r.InvalidateCachedShaders に0以外の数字を与えることで、ShaderVersion.ushというファイル内部に下記の様にコメントアウトで記載されているGUIDを別のランダムな数字に更新します。

(ShaderVersion.ushの中身)

```
// This file is automatically generated by the console command r.InvalidateCachedShaders
// Each time the console command is executed it generates a new GUID. As this file is included
// in Platform.ush (which should be included in any shader) it allows to invalidate the shader DDC.
// 
// GUID = 3FC0C8634C638C1980F7FFBE48ABCB58
```

実は、すべてのシェーダはこのShaderVersion.ushというファイルをincludeしております。ですのでこのファイルが更新されることで全シェーダが更新されたということになるのです。


# RecompileShaders allじゃだめなの？

UE4は別にRecomipleShadersというコマンドを持っています。

```
RecompileShaders all
```

こちらにallを指定することでシェーダをコンパイルしようとしてくれますが。。。既にDDC内部にそのシェーダキャッシュがある場合はそのシェーダキャッシュを参照します。

※UE4は、ビルドデータやクック(各種プラットフォーム向けデータコンバートのUE4内部での呼称)されたデータの一部をDDC(Derived Data Cache)にキャッシュしています。マテリアル(シェーダ)のコンパイル結果もDDCに保存されています。

全シェーダの再コンパイルのためにDDCを消す人もいますが、そうするとシェーダ以外のキャッシュ情報も同時に削除してしまい他のいろいろなもの再ビルドやコンパイルも走ってしまう可能性があるので注意が必要です。
[UE4] Entrian Source SearchでUE４内部のソースコード検索を安価で容易に！

Epic Games Japanのエンジニアの多くがUE4のソースコード内部のキーワード検索に使っている
便利なVisual Studio Add-onを紹介します。
**Entrian Source Search** といいます。

[Entrian Source Searchのサイト](http://entrian.com/source-search/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/08093d9e-9501-2979-fb36-dea0ae17df23.png)


こちらをインストールし、インデックスを作成するフォルダを指定して待てば、あとは、ソースコード内部でのキーワード検索が一瞬で可能になります！そして何より安い。１ユーザなんと29ドルで買い切り！


#Example

例えば、r.invalidateCachedShaderコマンドを見つけて、それが具体的に何をしているか調べるためにソースコードでこの文字列が使われてる部分を調べます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/ef005b60-e1d3-70d4-6eda-c1c943e0c025.png)

コマンドを打ち込んでる間に予測変換も出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/0fe14fc4-647d-f299-054c-16caf2abf4e5.png)

予測から選ぶと一瞬で使われている一覧を出してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/790c8e6f-bcd5-7f1d-fadb-009346fe581b.png)

ソースコード内での全使用箇所をリストしてもらうまで約3秒ぐらいでできます。便利です。


※UE4のソースコードは非常に大きく、エンジンコードを調べようと思うと関連箇所を見つけるまでなかなかやっかいだったりします。そういったことやコーディングの支援環境のメジャーなものとしてはVisual Assist Xがありますが、比較的高価であったりして、個人でUE4を使っていたりする方で使用していない又は会社で使ってても個人のPCにはインストールしていないという人がよくいます。そんな方にはこちらをおすすめしております。Visual Assist Xよりも検索がすごく速いので、ソースコードを書かないけどよく読むような方にはむしろこっちのほうが使いやすいかもしれません。


#おまけ (2021/1/23: UE4.25以降向けに訂正)
インデックスを作る際に僕が指定しているUE4内部のディレクトリです(UE4.26)
各Platform向けのコードがPlatformsに集約されたことにより、Platformsディレクトリを追加しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363464/70ba8c14-83a6-6261-73a8-6c834981efed.png)




また、 ソースコード検索時に ext:○○やdir:○○で拡張子やディレクトリ名を指定、また-ext:○○や-dir:○○で省くことができます。これらを使うことで絞り込みがさらに容易になります。お試しあれ。
Python -連続時間マルコフ連鎖の状態遷移シミュレーション

# 概要
**連続時間**マルコフ連鎖（Continuous Time Markov Chain）の状態遷移シミュレーションを実装します．
利用するアルゴリズムはギレスピーアルゴリズム(Gillespie Algorithm)です．実装を載せたのち簡単に概略を説明しています．


**離散時間**マルコフ連鎖の状態遷移シミュレーションはこちらの記事を参考にするといいと思います．
[Python - マルコフ連鎖状態遷移シミュレーション](https://qiita.com/popondeli/items/673b6ad920329875823c)
# 実装
３状態の場合(state = 0,1,2)のマルコフ連鎖を考えます．

```Python:CTMC.py
import numpy as np
import math
import random
import matplotlib.pyplot as plt
#状態数
N=3
#遷移率行列
TRANSITION_MATRIX = [[-0.3, 0.1, 0.2],
                     [0.2, -0.9, 0.7],
                     [0.7, 0.2, -0.9]]

initial_state = 0 #初期状態
current_state = initial_state #現在の状態
next_state = 0 #次の状態
dt = 0 #状態の滞在時間

state_list = [] #状態の格納リスト
dt_list=[] #滞在時間の格納リスト
state_list.append(current_state)
dt_list.append(dt)

time = 0
T=15 #観測時間

#ギレスピーアルゴリズム(Gillespie Algorithm)
while(time <= T):
    rand_s = random.random() #状態を決定する乱数
    rand_t = random.random() #滞在時間を決定する乱数
    q =  -TRANSITION_MATRIX[current_state][current_state] #propensity function
    total = 0
#次の遷移状態を決定する
    for i in range(N):
        if(i == current_state):
            continue
        total += TRANSITION_MATRIX[current_state][i]
        if(rand_s < total/q):
            next_state  = i
            break;
    current_state = next_state
    state_list.append(current_state)
#現在の状態の滞在時間を決定する
    dt = 1/q * math.log(1/rand_t)
    time += dt
    dt_list.append(dt)
#プロット
arr_state = np.array(state_list)
arr_dt = np.array(dt_list)
arr_cumsum = np.cumsum(arr_dt)
arr_state_repeat = np.repeat(arr_state,2)
arr_time_repeat = np.repeat(arr_cumsum,2)
plt.plot(arr_time_repeat[1:],arr_state_repeat[:-1],label="state")
plt.xlabel("time")
plt.ylabel("state")
plt.title("DTMC")
plt.legend()
plt.grid(color='gray')
```
結果のグラフです．
![CTMC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183119/82d04776-c9e6-45f1-ce03-da202abf350d.png)

状態[0,1,2]の間を時刻T=15まで遷移を繰り返しているのが見て取れます．（このグラフだと17.5付近に遷移していますが，これは仕様です．リストの最後尾を削るといった処理を行うことで取り除けますが，コードが煩雑になってしまうのでここでは取り除いていません．）
# ギレスピーアルゴリズム（Giilespie Algorithm）

このアルゴリズムの主としたアイデアは,遷移率に従って
1. 次の遷移が**いつ**発生するか　
2. **どの**状態に遷移するか
の二つを，乱数によって無作為に決定するというものです．遷移率の和が大きいほどすぐに遷移しやすくなるように，また遷移率が大きい状態により遷移しやすくなるように設計されています．
詳しくは，[Wikipedia](https://en.wikipedia.org/wiki/Gillespie_algorithm)をご参照ください．
jQueryでヘッダー、フッターなど共通部分のHTMLを別ファイルとして管理する方法

#はじめに
ヘッダー、フッターなどの共通部分のHTMLを別ファイルとして管理する方法はいくつかありますが今回はjQueryを用いて行う方法を紹介します。
特にサイトのページ数が多い時などは、共通部分のHTMLをパーツごとに分けて管理することで圧倒的に管理が楽になります。以下の例では、メインファイルとなる`index.html`から共通部分である**ヘッダー部分**と**フッター部分**を切り分けて管理する方法を記載します。
とても簡単なのでぜひ実装してみてください。

#手順1：indexファイルを作成する

```index.html
<!DOCTYPE HTML>
<html lang="ja">
<head>
</head>
<body>
<div id="header">
タイトルロゴや画像<br>
グローバルメニューなど
</div>

<main>
メインコンテンツは直接記述
</main>

<div id="footer">
サイトのSNS情報や<br>
コピーライトなど
</div>
</body>
</html>
```

#手順2：共通パーツを切り分ける

```header.html
<header id="header">
タイトルロゴや画像<br>
グローバルメニューなど
</header>
```

```footer.html
<footer id="footer">
サイトのSNS情報や<br>
コピーライトなど
</footer>
```

#手順3：index.htmlに各パーツを読み込むscriptを記述
`head`内にjQueryを読み込む。また、loadメソッドで各パーツを読み込む。
※この順番を間違えてはならない

```index.html
<head>
//jQuery読み込み
<script src="//code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
//共通パーツ読み込み
  $(function() {
       $("#header").load("header.html");
       $("#footer").load("footer.html");
});
</script>
</head>
```

###最終的なHTMLファイル

```index.html
<!DOCTYPE HTML>
<html lang="ja">
<head>
<script src="//code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
//共通パーツ読み込み
  $(function() {
       $("#header").load("header.html");
       $("#footer").load("footer.html");
});
</script>
</head>
<body>
/*ここにheader.htmlが読み込まれる*/
<div id="header"></div>

<main>
メインコンテンツは直接記述
</main>

/*ここにfooter.htmlが読み込まれる*/
<div id="footer"></div>
</body>
</html>
```

#問題点
jQueryで共通部分のHTMLを別ファイルとして管理する場合、一つだけ問題点があります。
実際にプログラムの反映を確認する際に、google chromeのローカル環境では、確認ができないという点です。（リモート環境では正常に確認ができます。）
なのでローカル環境で確認するときは、IEやEdgeなどを使うことをお勧めします。
Xamppのsendmailとgmailでメール送信フォームを作りましょ

#gmailの二段階認証をクリアしてメールフォームを作りましょ
こんにちは～
初めての投稿になります。
Qiitaはじめの一歩ということでgmailを活用したメールフォームの作り方を解説します。
あれ～言いつけ通りに作ったのに送信できなーいという初心者の方がきっといると思いまして、簡潔にまとめたいと思います。
ググると数多くの参考になる投稿があるので、ここではあまり細かい技術解説は行いません。
理屈を知りたい方は他を参考にしてください。（星の数ほど出てきます。）
ただ二段階認証のクリア方法まで一気通貫で書かれているサイトが無いので、
コピペでできる簡潔な解説で初心者の皆様にご参考になれば幸いでございます。

```html:メールフォーム（HTML）
<form method="post" action="./mail.php">
	<input type="text" name="name" placeholder="Name" >
	<input type="email" name="email" placeholder="Email" >
	<textarea name="message" placeholder="Message" rows="6"></textarea>
	<input type="submit" value="Send Message" >
</form>
```
次にmail.php。ご自分の環境に書き換えてお使いください。

```php:メール送信スクリプト（PHP）
<html>
	<head>
		<meta charset="utf-8">
	</head>
	<body>
		<?php
			mb_language("Japanese");
			mb_internal_encoding("UTF-8");
			$name = $_POST['name'];
			$email = $_POST['email'];
			$message = $_POST['message'];
		if (mail("test@gmail.com",$name, $message,$email))
		{
		echo "メールが送信されました。";
		} else{
		echo "メールの送信に失敗しました。";
		}
		?>
	</body>
</html>
```
php.iniでmail functionを検索して以下の項目だけ修正します。

```php:php.iniの編集
[mail function]
SMTP=localhost //localhostのままでOKです。
smtp_port=587 //サブミッションポートを登録します。
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" //sendmail.exeのパスを登録します。
```
ここまでは多くのサイトで説明されている通りです。
そしてこのままsendmail.iniを登録していざテストとなると、あれ？送信できないってなると思います。
安全性の低いアプリのアクセスをブロックしましたとGoogle様から拒否されてしまうのです。
でこれを回避するにはどうすればよいかと右往左往していると、「安全性の低いアプリを許可すれば良いのですよ」と悪魔の囁きをするサイトに出くわしたりするのです。
危ない危ない。
それはやっちゃダメです。
sendmailを安全性の高いアプリにしてあげればよいのです。
ではその手順をご紹介しましょう。

まずはGoogle様にログインします。
アカウントの編集画面からセキュリティを選択します。
![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537641/c742dc69-960e-4886-dbe7-092c4b03343b.jpeg)

ここで二段階認証プロセスをオフになんて絶対しちゃいけません。
そのすぐ下にアプリパスワードというのが控えめにありますのでこいつをクリックします。
またログイン認証を求められると思います。
今ログインしたパスワードが表示された状態でアプリパスワードの画面が開きます。

![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537641/b6f69f55-3be5-0989-5cfd-d6e9ed435ebb.jpeg)

ここでアプリ選択をメール、デバイスはその他を選んでsendmailと名前を付けてやってください。
するとなんということでしょう！
sendmail専用のパスワードが発行されるのです。

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537641/afa9b66c-6f4b-44f6-88e6-beaf5a992dec.jpeg)

発行されたパスワードをコピーしてください。
はいあとは最後にsendmail.iniを編集して終わりです。
auth_passwordに先ほど生成されたパスワードを登録してください。

```sendmail:sendmail.iniの編集

smtp_server=smtp.gmail.com //smtp.gmail.comを登録します。
smtp_port=587 //サブミッションポートを登録します。
auth_username=test@gmail.com //送信用のgmailアドレスを登録します。
auth_password= xxxxxxxxx //アプリパスワードを取得して登録します(ここ最重要！)
```
はいここまで来たらApacheを再起動しましょう。
そして作ったサイトを呼び出してフォームから何か送信してみてください。
無事二段階認証を乗り越えてメールが送信されましたか？
なんでやねんなんでやねんなんでやねんと悩んでいたあなたこれで解決です。

そうそう、ファイアウォールのポートも忘れずに開けてくださいねーーー

以上初心者が初心者向けに書いた記事でした。
ベテランの方々は笑ってフォローをお願いします。
KeiganMotor(KM-1U)をハッカソンで使うメリットと注意点

この記事は@ele_funとの共著です。

# KeiganMotorとは？

結論から言えば、**ハッカソンにおける最強アイテム**。

[株式会社Keigan](https://www.keigan.co.jp)が販売している多機能モーターモジュールです。今回使ったのはラピッドプロトタイピングに特化した製品である「KM-1U（ホイールキット）」です。

KeiganMotorは様々なイベントで貸し出しされており、自分が初めて知ったのも[デジットハッカソン](https://digithack.jp)（大阪開催のハードウェア系ハッカソン）でした。

![10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535537/24010e19-4052-9063-2aec-e13c4598f4e2.jpeg)
最強アイテム

# 作ったプロダクト

デジットハッカソンでは「自分で維持費を稼ぐ」をコンセプトにした["未来ゴミ箱"](https://protopedia.net/prototype/814a9c18f5abff398787c9cfcbf3d80c)を作りました。

街中でゴミを捨てたいときに、ゴミ箱が見つからずモヤモヤした経験があり「お金払ってでも捨てたい」と思ったのをきっかけに「電子決済でゴミを捨てられるゴミ箱」を考えました。

最終的に[「ROHM OPEN HACK CHALLENGE（ROHC2019）」](http://open.rohm.com/rohmhack/)で最優秀賞を受賞し、[「LINEエンジニアブログ」](https://engineering.linecorp.com/ja/blog/miraigomibako-linethings/)で取り上げられたり、[「KeiganMotorの使用例」](https://keigan-motor.com/future-dustbox/)で製品ページに掲載されるなど、なんだかすごいことになりました。

![fullsizeoutput_1228.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535537/ec055117-12ba-4f32-0951-b1300bb9ab1a.jpeg)
当初アイデア

![71912200_433881360570942_6423214773323694080_n.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535537/2b5624e5-2e71-23c4-d4f8-fc00a4b69e07.jpeg)
最終的に出来上がったもの

# なぜKeiganMotorはハッカソン最強なのか？

参加したことのある方はご存知だと思いますが、ハッカソンの大枠は以下の通りです。

1. アイデア出し
2. チームビルディング
3. 開発
4. プレゼン審査

チームで参加する場合は別ですが、大体の場合**初対面のメンバーでチームを結成する**ことが多いと思います。いざ開発を進めようとした時に、**コンセプトの議論ばかりに時間を費やして、開発時間が無くなり、最終的に妥協を重ねた**という苦い経験をした人も多いんじゃないでしょうか？

「未来ゴミ箱」の開発では「とりあえず試してから考えよう」という方針で、**コンセプトの議論は全くせず、各プロダクト触り始める**ことをしました。

そのわずか１時間後…
[![動き出すゴミ箱](http://img.youtube.com/vi/T1Yhvukqqr4/0.jpg)](https://youtu.be/T1Yhvukqqr4)
おもむろ動き出すゴミ箱（クリックでyoutubeに飛びます。音量注意）

動くゴミ箱を見てチームメンバーのワクワク感が高まりました。「こんな操作はできるのか？」「こういう機能をつけてみてはどうか？」など、試したいことや妄想が膨らみ、チーム全体で目指すべきイメージが共有され、一度もピボットすることなく開発を続けられました。**仕様書を見て議論するより、動くモノを見て議論した方が断然良いです**。

その結果、ROHC2019の受賞に繋がったと思っています。

# 実際に触って分かった、KeiganMotor

**モーター側の知識も装置も不要で、モバイルバッテリーにケーブルを繋げばすぐ動く**というのが、一番の強みだと感じました。それも含めて実際の使用感（Good/Bad）を列挙したいと思います。

## 良い点

- 起動してすぐ動かせた
- 給電はモバイルバッテリーでOK
- スマホから操作・ブロックプログラミングが可能
- 反応速度が速いため、滑らかに動作する
- トルクがある程度出るため、機体が重くても大丈夫
- Arduinoから制御可能
- ファームウェアのバグはすぐ対応してくれる
- ライブラリが充実しているので、どの開発環境を選んでも安心
- 外部にモーター用の回路が不要（はんだ付けが不要）
- USB type-C 1本で給電できる
- ローレベルAPIで細かな制御ができる（ライブラリがない部分もある程度補える）
- モーターの状態がステータスLEDで確認できる（デバッグが楽）

## 注意点

- 個人で使うには価格感が少々高い
- I2Cケーブル作成が大変（ハッカソン当時）→ [KeiganMotor用I2Cケーブル](https://keiganmotor.myshopify.com/products/i2c) 発売されました
- 使えるライブラリに対してサンプルコードが少ない
- バッテリーによっては電流量不足で動作しない場合も
    - 推奨は1ポート当たりの出力が2.４A以上
    - USB PD対応のバッテリーだと安心
- GitHub資料が英語で、読むのが大変
- 有線で制御中、スマホからペアリングすると制御を乗っ取ることができる
- モーターの制御中に割り込みなどの処理を挟むと挙動がおかしくなる
    - モーターの再起動が必要

# まとめ

**アイデアをすぐ形にできる**という点は、**プロダクトの完成イメージをチーム全体に共有できる**ということ。もし、何らかモノを動かすプロダクトを思いついたら、まずKeiganMotorで動くモノを作ることをお勧めします。
PowerShell でも tail -f がしたいし grep もしたい

Linux では `tail -f` でファイルの更新を監視してリアルタイムに表示を更新させることができます。ログファイルの監視などを行う際にお世話になるお便利コマンドですが、PowerShell にはそもそも `tail` がありません。困った。

## PowerShell でも `tail -f` がしたい

そんなときには `Get-Content` コマンドレットを利用しましょう： 

```Powershell:
Get-Content -Path <ファイルパス> -Wait -Tail <行数>
```
おおよそ `tail <ファイルパス> -f -n <行数>` と同じ挙動を示します。文字コードが SJIS でない場合は文字化けしてしまいますが、 `-Encoding UTF8` などと指定して回避することができます。

## PowerShell でも `tail -f | grep` がしたい

ログファイルの監視をする際、任意の文字列が含まれる行だけをリアルタイムに抽出して表示したいことがあります。Linux では `grep` すればすむ話ですが、PowerShell には `grep` コマンドもありません。そんなときには `Select-String` コマンドレットを利用しましょう： 

```Powershell:
Get-Content -Path <ファイルパス> -Wait -Tail <行数> | Select-String "GET","POST" -CaseSensitive 
```

 `grep` コマンドとの目立った違いとしては、OR 検索が `-e` オプションではなくカンマ区切りであること、デフォルトで大文字小文字を区別しないことがあげられます。

正規表現を利用したい場合は `-Pattern` オプションを利用します：

```Powershell:
Get-Content -Path <ファイルパス> -Wait -Tail <行数> | Select-String -Pattern "http*"
```

## PowerShell でもパイプラインでテキストを渡したい

PowerShell のパイプラインは、Linux のそれとは異なりオブジェクトを渡す仕様になっています。それが便利なこともありますが、画面上に表示されているコマンドの実行結果を「見たまま」 grep にかけたいこともありますよね。そんなときには `Out-String` コマンドレットを利用しましょう：

```Powershell:
Get-ChildItem | Out-String -Stream | Select-String ".log"
```

`Get-ChildItem` からパイプラインで渡したオブジェクトを直接 grep するとカレントディレクトリにある各ファイルに対して grep が走ってしまいますが、`Out-String -Stream` を挟むことによってファイル名で絞り込むことができます。

## 参考リンク

* [Get-Content](https://docs.microsoft.com/ja-jp/powershell/module/Microsoft.PowerShell.Management/Get-Content?view=powershell-5.1)
* [【 tail 】 ファイルの末尾を表示する](https://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230894/)
* [grep的なPowerShellコマンドSelect-String](https://qiita.com/kmr_hryk/items/101c15c8c1c95469f53e)
* [文字列の一致検索 Select-String、Out-String](https://news.mynavi.jp/itsearch/article/hardware/3761)
position:sticky;を使わずにサイドバーを固定しようとしたら予想以上に苦しんだ。

Qiita初投稿だ~
[この記事](https://qiita.com/hissy/items/e781a62ff6521803a230)の被検体です。

スクロールしていってサイドバーが一番下までいったら固定されるアレあるじゃないですか。
それをしようと思ったら予想以上に苦しんだので、忘れないようにメモします。

#position:sticky;使えない問題

`position:sticky;`　これ、便利なやつですね。
詳しくは[こちら](https://developer.mozilla.org/ja/docs/Web/CSS/position)を読んでください。

今回これを使わなかった理由は、メインコンテンツとサイドバーをfloatで配置していたからです。
じゃあ`display: flex;`で配置したらいいじゃんって思うかもしれませんが、どうしてもfloatでの配置のままサイドバーを固定したかったのでこのままいきます。
floatしてても使えるよ！っていう方は教えてください....

なので、`position:sticky;`を使うのを諦めました。

#ScrollMagic使えない問題

次はこれ、[ScrollMagic](http://scrollmagic.io/)が使えませんでした。
使えなかったといっても、ちゃんと固定して動かすことはできましたが...
**メインコンテンツ部分にあるリンクが押せない!!!!!(chrome)**
<p class="codepen" data-height="297" data-theme-id="default" data-default-tab="html,result" data-user="moyori" data-slug-hash="vYYMZgX" style="height: 297px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="ScrollMagic">
  <span>See the Pen <a href="https://codepen.io/moyori/pen/vYYMZgX">
  ScrollMagic</a> by MOYORi (<a href="https://codepen.io/moyori">@moyori</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

押せないですよね？
リンクが押せないのは、固定されたサイドバーが`display: block;`になってメインコンテンツを覆ってしまっているからっぽいですね。
困る。
ということで、ScrollMagicも使うのを諦めました。

#jQueryで書こう
まあ、この流れならjQueryになりますよね。きっと。
そこで一番苦しんだのは、スクロールイベントが発火するたびにシュババババッて動いてカクついたことです。もうね、サイドバーご乱心ですよ。
このカクつきを止めるには、間引くべきだ。
参考にしたのは[こちら](https://benmarshall.me/attaching-javascript-handlers-to-scroll-events/)
ここで言っている
>It’s a very, very, bad idea to attach handlers to the window scroll event.

```
$( window ).scroll( function() {
  // Do your thang!
});
```

これで書いてしまってました。そりゃあサイドバーもご乱心ですわ。
なので、setTimeout()メソッドを用いて、スクロールイベントが断続的に呼ばれないようにしました。
ずっとカクつくということは無くなったけど、ある時急にガクンッてサイドバーが動くということになってしまったのでやめました。
次に使ったのがrequestAnimationFrame()メソッドです。
[こちらの記事](https://qiita.com/kikuchi_hiroyuki/items/7ac41f58891d96951fa1)を参考にしました。
これがうまくいきました。
そしてできたのがこれ

<p class="codepen" data-height="301" data-theme-id="default" data-default-tab="js,result" data-user="moyori" data-slug-hash="bGGzVwQ" style="height: 301px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="スクロール固定">
  <span>See the Pen <a href="https://codepen.io/moyori/pen/bGGzVwQ">
  スクロール固定</a> by MOYORi (<a href="https://codepen.io/moyori">@moyori</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

ちゃんと動いてますかね？若干の不安アリ。
リンクも押せる！止まる！動き出す！

#最後に
なんだかんだ、これだけのことに結構時間を使いました。
ちゃんと自分の動いて欲しいように動くとほっとしますね！

サイドバーを固定するだけでも色々な書き方があるので、合ったものをサッと考えられるようになりたいな~って思いますね。

以上、サイドバー固定に苦しんだ記録でした。
マイナンバーカードでmacOSにログインできるようにしようとしたら酷い目に遭った話

# 概要
2016年1月から交付の始まった個人番号カード（以下、「マイナンバーカード」）。今まで受け取っていなかったが、ついに親から通知カードをもらったので交付してもらった。以前からマイナンバーカードに組み込まれている電子証明書を用いて、macOSにログインすることができることを知っていたので試したが、その結果大変な目に遭ったので、それを記す。

# 注意
私は理工系学部所属ではなく、情報系の勉強をしていない。この領域に関しては完全な素人である。そのため、各所に誤りが多分に含まれているかもしれないことに注意しながら読んで頂きたい。
また、この記事には解決策等は特に書いていない。「何が起きたか」の備忘録と言った方が良いかもしれない。

# 環境
* 機種：Apple MacBook Pro (Mid 2012, 13-inch)
* OS：macOS High Sierra (10.13.6)
* カードリーダー：NTT ACR1251CL-NTTCom

# 導入
基本はOSS Techの濱野司 氏が[書き記してくれている](https://www.osstech.co.jp/~hamano/posts/jpki-macos/)。
ACR1251CLのドライバをインストールした後、[OpenSC](https://github.com/OpenSC/OpenSC/releases)を導入（記事執筆時の最新版は0.19.0）。githubからdmgファイルをダウンロードし、インストールする。

あとは濱野氏のブログの通りにすれば、PIN(利用者証明用電子証明書用の番号4桁)を入力することでログインすることが可能になる。



# 問題発生
問題は再起動後に発生した。PINを入力してログインすると、アラートがたくさん出る。OneDriveは「再ログインが必要です」といい、iCloudは「問題が発生しました」と言う。

OneDriveは再度パスワードを入力するだけで良かったが、問題はiCloudである。
iCloudパスワードを再入力したが、iCloudキーチェーンが復旧しない。2段階認証を導入しているので他デバイスに承認を依頼するが、いつまで待ってもiPhoneに承認依頼通知が来ない。仕方なくSafariを起動するが、いつもならパスワード入力欄を選択した際に出る「パスワード候補一覧」が出ない。Safari環境設定のログインパスワード一覧を見るが、真っ白。全て消え去っている。

おそらくPINを有効化したのがいけないのだろうと思い、PINログインの無効化、OpenSCのアンインストール、iCloudからログアウトし、再起動。再びiCloudにログインすると、上述の問題は発生しなくなった。

再度ドライバ、OpenSCをインストールし、再びPINログインを有効化すると同じような症状が発生した。

# 考察
再度iCloudにログインする際、iCloudのパスワードの他にMac本体のログインパスワード(≠PIN)の入力も求められていた。当然だが、PINと本体のログインパスワードは異なる。そこら辺が悪さをしたのだろうか。濱野氏のブログには特段そのような問題が発生した旨が書かれていなかった。OSや環境の違いによるものなのだろうか。もしこの問題で解決策をお持ちの方が居たら、是非教えて頂きたい。

# 付随する問題
以上が基本的な問題点であるが、それ以外にもマイナンバーカードを使用する上でいくつか問題が発生した。

## 1. 「○○がキーチェーン"JPKI-card#2"を使おうとしています。」
PINログインを解除したことで前述の問題が発生しなくなったが、リーダーの上にマイナンバーカードを置いていると、パスワード入力欄を選択した際に毎回「Safariがキーチェーン"JPKI-card#2"を使おうとしています。」という表示が出るようになった（Safariに限らず、他のパスワード入力が必要な部分でも出た）。マイナンバーカードを取れば表示されなくなるのだが、非常に不便である。

これに関してはJPKIが[対策を示してくれていた](https://www.jpki.go.jp/faq/clientsoft.html)。これに従ってJPKI.tokendを削除すれば表示されなくなる。

## 2. マイナンバーカードとの通信失敗
マイナポータルやゆうびんポータルにログインする際、ID・パスワードでなくマイナンバーカードでログインすることができる。しかし弊環境では、マイナポータルにログインしようとすると、マイナポータルAPで「マイナンバーカード又はカードリーダライタを確認してください(EMA140-1A11)」というエラーが表示されてしまい、ログイン出来ない。これら2つに問題があるのかというと、そうではない。事実、JPKI利用者ソフトの動作確認ではOKが出ているし、同ソフトの「自分の証明書」ではいずれも証明書の確認が出来ている。

対策としては、カードを載せた直後にOKを乱打しPIN入力欄が出たら2, 3秒で入力しOKを押すことくらいである。タイムアタックをしているようで非常に疲れる。
なおゆうびんポータルにおいては、EM340-2211というエラーコードになっている。

リーダーを接続していない状態でマイナポータルAPを動作させようとすると同じエラーコードが出る。なのでマイナポータルAP自体がリーダーまたはマイナンバーカードを認識していないということになる。

この現象はOpenSCをアンインストールすることで回避できるようになった。しかしそれは次の問題を生む。

## 3. OpenSCを外せない？
「ACR1251CLのドライバのみにすればいいんじゃないか」という考えもあるが、そうするとAcrobat Readerで電子署名をすることが出来ない。

Acrobat Readerで電子署名できることは[公式にも書かれている](https://helpx.adobe.com/jp/acrobat/kb/cq07131410.html)が、マイナンバーカードの利用者クライアントソフトで書き出し出来る証明書は.perである。しかしAcrobat Readerで使える証明書は.p12又は.pfxである。
デバイスから直接証明書を取り出す方法もあるが、Acrobat Readerはリーダーもカードも認識してくれない。

Acrobat Readerで電子署名する方法は[こちらに書かれている](https://contents.shinonomekazan.com/tips/pdf-sign-by-mynumber-card.html)が、これはOpenSCを使う方法となっている。

[JPKI PDF SIGNER](https://jpki.osdn.jp)もあるが、こちらはWindows専用である。

WordはそもそもMac版では電子署名機能を搭載していない。

# 結論
おそらく電子情報系に強い方であればこれらの問題点を苦も無く解決できるのであろう。しかし残念ながら、私はそのような知識も技術も持ち合わせていない。今後これらの問題を解決し、便利に利用できるソフトウェアを開発してくれる方、あるいは問題を解決してくれる方が登場することを願う。
pythonの関数、引数、スコープ、戻り値、モジュール、ライブラリをprogateで学習

#python progate 学習コースⅢ
##関数
*関数の作り方*
関数はある処理をまとめたプログラムの塊。printやinputは関数
**def 関数名():**と定義する
関数を実行するには
**関数名()**で呼び出す
関数は定義した後でしか呼び出せない
###引数
引数は関数を呼び出す際に関数に値を渡すこの値のこと
引数を渡すとその関数内で値を利用できその値によって値を変えることができる
関数に引数を渡すには引数を入れる箱となる変数（仮引数）を指定する
関数に引数を渡すには**関数名(引数)**として呼び出す
###スコープ
変数にはその変数が使える範囲が存在する、この範囲をスコープ
仮引数や関数の中で定義した変数のスコープは関数の中だけ

関数が複数の引数を受け取るためには、仮引数をコンマ（,）で区切って定義する
引数は左から順番に「第1引数、第2引数・・・」と呼ぶ
複数の引数を渡すには対応する仮引数の順番と同じにする必要がある

引数に初期値を設定できる
引数が省略されたとき、初期値が与えられていれば代わりの値として初期値が使われる

###戻り値
関数の処理結果を関数の呼び出し元で使いたい時
戻り値を呼び出し元に返すには、関数の中でreturnを使う
**return 戻り値**
retuanは関数内の処理を終了させる、よってreturn以降の処理は実行されない
条件分岐を利用して複数のreturnを使用できる

###モジュール
モジュールとは、Pythonのコードが書かれたファイルのこと
別ファイルをモジュールとして読み込むことでそこに書かれたコードを利用することができる
**import**を使うことでモジュールを読み込むことができる
モジュールを読み込んで使いたいファイルに、「import モジュール名」と書くことで読み込むことができる
読み込んだモジュールは「モジュール名.関数名()」と書くことで、モジュール内の関数を実行することができる

###ライブラリ
あらかじめ用意されているモジュールは**標準ライブラリ**と呼ばれる
randamモジュールの関数randintを用いてコンピュータにランダムに取得させる
**random.randint(x, y)**と書くことで、xからyまでの整数をランダムに取得することができる
綺麗なものを見たいので最適化関数のベンチマークに利用される関数の可視化をしてみた

# 参考

https://en.wikipedia.org/wiki/Test_functions_for_optimization

# 実行ソース

https://github.com/akidukin/optimize_test/blob/master/benchmark_functions.py

# 対象

- 決めていない(自己満足)
- 「へーこんなのあるんだー」って思う人

# 最適化関数のベンチマークに利用されている関数 とは

最適化関数とは
https://ja.wikipedia.org/wiki/最適化問題

ざっくりなイメージとして
1) x + 10 = 25
2) x + 60 = 15
3) x + 45 = 60
のxを機械に求めさせる時に　正確に求めさせる関数
上記の関数の性能を測るためのホゲホゲ、最適化関数の性能っていうのもいくつか指標があって、速度や正確性、ロバスト性などなんか難しそう。

単純に言うと、上記のような単純な(1次元でかつ単一解)物で性能を測っても変わらないので、より複雑な物で測った方が性能の比較がしやすいよねってこと。


# 何をやったのか

ただ参考URLに乗っている関数スクラッチで作成し実行させた
その際に 2次元 までの入力のみを受け付ける形とした

# 結果(関数名が正式な物ではないです。正しくは参考URLへ)

![ackely.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/367a8ba4-f02f-b4b8-20a5-9e10dd413dbf.png)

![sphere.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/3a66497f-34ac-56a5-35fb-e4a66a649553.png)

![rosenbrock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/4da3b8d6-07ab-908d-bb73-5f4ae547f9d3.png)

![beale.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/08131efc-a35f-7230-d7f2-3ae64d2d1fce.png)

![goldstein_price.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/1778e098-97c7-fae0-4c0a-12f5e5ee12b4.png)

![booth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/e78fb236-7067-f0a8-2399-be4485b7b895.png)

![bukin_n6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/7fe68cf1-1528-4c39-2904-47b0d22652a1.png)

![matyas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/7478e295-6d8f-2018-f666-576273cc7097.png)

![ThreeHumpCamel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/47c1970e-4847-8d1b-d8fa-3217197b1106.png)

![easom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/2c4e574c-0597-580d-a6e5-3535548338ff.png)

![mccormick.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/40567647-3cde-8fe3-a571-e004d3cec836.png)

![crossintray.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/75e020d1-4beb-2578-ed4d-5f056597752d.png)

![holdertable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/44a1f451-75ff-4bc3-5847-6cac757d2d3b.png)

![styblinski_tang.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/b0a0ee29-d1e1-63da-a749-b957b77bacb4.png)

![himmelblau.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531228/eec1b781-ef5b-d6bb-7966-46a6d8ad14e3.png)

# 感想

なんだかんだRosenBrock関数の形が好きです。（こなみ）
次は、それぞれに対していくつか代表的な最適化関数で最適解を求めるまでの軌道をみてみる
rails javascript/jqueryの実装　メソッド　gem


覚えることが多いので覚えた内容の備忘録を書こうを思います。

# rails-ujs

基本rails5.1以降にかかれている記述ですがその意味は

Ajax の送受信の "送" の部分を JavaScript で実装せずにやってくれるライブラリです。

Rails 5.1 から導入された form_with を使ってフォームを構築し
form でデータを送った後のレスポンスだけを JavaScript で書けば良くなります。

```js:application.js
//= require rails-ujs 
```

# FormData
formタグ内の要素のデータをオブジェクトにしたもの
inputに入力された情報が、javascriptのオブジェクトとしてキーバリュー形式で表される。

new FormData(フォーム要素)とすることでFormDataを作成できます。

```js
$(function(){
  $('#new_comment').on('submit', function(e){
    e.preventDefault();
    var formData = new FormData(this); //ここがあたります。
  })
})
```

# Ajaxでコメントの保存

```js
$(function(){
  $('#new_comment').on('submit', function(e){
    e.preventDefault();
    var formData = new FormData(this);
    var url = $(this).attr('action')
    $.ajax({
      url: url,
      type: "POST",
      data: formData,
      dataType: 'json',
      processData: false,
      contentType: false
    })
  })
})
```

## attrメソッド
要素が持つ指定属性の値を返します。
要素が指定属性を持っていない場合、関数はundefinedを返します。

## processDataオプション
デフォルトではtrueになっており、dataに指定したオブジェクトをクエリ文字列に変換する役割があります。

クエリ文字列とは、WebブラウザなどがWebサーバに送信するデータを
URLの末尾に特定の形式で表記したものの事です。

## contentTypeオプション
サーバにデータのファイル形式を伝えるヘッダです。
こちらはデフォルトでは「text/xml」でコンテンツタイプをXMLとして返してきます。

ajaxのリクエストがFormDataのときはどちらの値も適切な状態で送ることが可能なため
falseにすることで設定が上書きされることを防ぎます。
FormDataをつかってフォームの情報を取得した時には必ずfalseにするという認識で構いません。

# jbuilder
rails newコマンドでアプリケーションを作成した際にgemfileにデフォルトで記述されているgemで
入力データをJSON形式で出力するテンプレートエンジンです。

例としてはこちら

```js:views/comments/create.json.jbuilder
  json.text  @comment.text
  json.user_id  @comment.user.id
  json.user_name  @comment.user.nickname
```

# テンプレートリテラル記法
ダブルクオートやシングルクオートの代わりにバックティック文字で囲むことで
複数行文字列や文字列内挿入機能を使用できます。
shift + @ 
で出てきます。

# 総まとめ

```js
$(function(){
  function buildHTML(comment){
    var html = `<p>　　
                  <strong>
                    <a href=/users/${comment.user_id}>${comment.user_name}</a>
                    ：
                  </strong>
                  ${comment.text}
                </p>`
               //テンプレートリテラル記法
    return html;
  }
  $('#new_comment').on('submit', function(e){
    e.preventDefault();
    var formData = new FormData(this);
    var url = $(this).attr('action');
    $.ajax({
      url: url,
      type: "POST",
      data: formData,
      dataType: 'json',
      processData: false,
      contentType: false
    })
    .done(function(data){ //更新の成功
      var html = buildHTML(data);
      $('.comments').append(html);
      $('.textbox').val('');
      $('.form__submit').prop('disabled', false); //submitボタンを一度押したらdisabled属性というボタンが押せなく属性の追加。
    .fail(function(){ //更新の失敗
      alert('error');
    })
    })
```
第4回 転職透明化らぼ-技術ブランディング編に行ってきた話

# 目的

- 題名のmeetupに行ってきた内容のまとめを書く  
※本記事はかなり筆者のとらえた情報よりの内容になっています。実際の登壇者の方々のしていただいたお話とは異なる可能性があります。すいません。。。

# 参加したmeetupの内容

- 求職者と採用担当者が出会える会だった。
- 技術ブランディングの在り方、そもそも技術ブランディングについてなど初心者の自分にも優しい会だった。
- 転職活動の情報の格差を埋めるためのもの(求職者と採用担当)
- 付箋を使って登壇者のみなさんに質問をできた。それを元にディスカッションする時間が設けられていた。
- 懇親会では、採用担当、求職者関係なくdeepなお話をして、めっちゃ盛り上がっていた！
※あんまり内容に関係ないけど名札で求職者と採用担当者が一目で見分けられるなど工夫がなされていた→めっちゃよかった！

# 今回参加させていただいたmeetupの詳細ページ

- connpassのリンクを下記に記載する。  
[第4回 転職透明化らぼ-技術ブランディング編](https://rtlabo.connpass.com/event/152001/)

# 転職透明化らぼって？？

- 転職の情報格差を埋めよう！転職者の情報量を増やそう！という目的をもって活動しているコミュニティである。
- 「エンジニアとして転職をしたいけどどんなことをしたらいいかわからない。。。」という方にピッタリ！
- 転職をする方のためにmeetupをひらいてくださっている。
- 転職透明化らぼの各リンクを下記に記載する  
ナレッジーベース: [Tbpgr Blog](http://tbpgr.hatenablog.com/entry/2019/05/20/151839)  
Twitter: [主催者の方のひとりのてぃーびーさん](https://twitter.com/tbpgr)  
connpasグループ: [https://rtlabo.connpass.com/](https://rtlabo.connpass.com/)

### 登壇をされた方の情報(リンク先)にばらつきがあってごめんなさい。。。

## 池上 純平さん （株式会社プレイド Product Specialist Engineer）モデレーター

[Twitter](https://twitter.com/jumpei_ikegami)

- 「完全Sier脱出マニュアル」の著者
- Podcastではパーソナリティのzuckeyさんと一緒に「しがないラジオ」を放送中！
- 会場提供LTと司会を担当されていました！

## 近藤 佑子さん（株式会社翔泳社 CodeZine編集部 副編集長）

[Twitter](https://twitter.com/kondoyuko)

- 今年18回目の登壇で今年はアウトプットに力入れている方でした。
- エンジニアのアウトプットの暗黙知になっているお話をされていました。
- 記事広告の作成などを本業でされている方で、そういった目線からの技術ブランディングについてのためになるお話でした。
- 相対的な目線から知見を発信することの大切さをお話されていました。

## 飯田 意己さん（株式会社クラウドワークス 執行役員）

[Twitter](https://twitter.com/ysk_118)

- アジャイルチームを支える会の理事もされているそうです。
- 企業側の技術ブランディングの位置付けについてお話されていました。
- 主に企業側からの技術ブランディングとして、の考え方、継続の大切さ、継続のするための知見などもお話されていました。

## mottox2さん（フリーランス）

[Twitter](https://twitter.com/mottox2)

- 技術同人誌書くことが好きな方でした。
- ブランディングできている人はどんな人なのか、界隈で認知してもらう意味などお話されてました。
- 多くのブランディングの方法についてお話されていました。

### スポンサーLT

## 株式会社ゆめみ 「技術ブランディングについて〜SNSは履歴書になる〜」

- 株式会社ゆめみの紹介と今までの苦労をお話されていました。(個人的に色々あった過去のお話を自らされていた点に衝撃を覚えました、いい所良くないところ全て包み隠さずお話していて文字通り｢透明化｣されました)
- SNSは履歴書というお話で大変興味深いものでした。

## 株式会社うるる 「採用担当者視点からの技術ブランディングへの期待」

- 株式会社うるるの紹介と経歴書についてのお話でした。
- 転職活動中の自分にはとてもためになるお話でした。
- よくある経歴書から読み取れること、読み取れないこと、こんなことを書くと良いなどなど実践的なお話もされていました。


## 会場スポンサー プレイド 様 「スタートアップの採用現場から見た技術ブランディングの価値と限界」

- 企業側の技術ブランディングのメリットについてお話されていました。 
- また、デメリットについてもお話されていて、アウトプットに対するデメリットは考えたこともなかったため新鮮でした。
- スタートアップ企業では、採用の際に技術も大切だが長期的な目で見るとカルチャーや考え方のマッチも大切であるとお話されていました。

# 登壇された方々のお話を総合して筆者が大切に感じたこと

- 求職者のアウトプットも大切だが、それと同じくらい企業側のアウトプットも大切である。
- 実はかなり企業側もリスクを背負っている。
- Twitterでもいい、なんでも良いのでアウトプットすること自体に意味がある。
- 継続することの大切さと難しさ。
- ニッチな内容はブランディングに向いている。
- 知見の相対化も重要なパーツである。

# 筆者はこれからどうするか

- Sierに居る人が少しでも幸せになれるような経験や知識をコンプラやセキュリティを破らない程度にまとめる。
- 勉強会とかmeetupの楽しさを広げる。
- qiita毎日投稿は書く内容が無くなるまで継続する。
- 知見に対してより多角的なアプローチを行い、絶対的では無く相対的な投稿を増やす。
- 勉強会用の名詞について記事としてまとめる。
子育て中助産師が、プログラミング学習して３週間目に作ったMAPアプリ

前回の記事よりも遡りますが、プログラミング学習を始めて３ヶ月目に作ったものについて記載します。

#これを作った背景
MAP APIを使って何か作ってみようという課題でした。
何を作ろうかなと考えていた時に思い出したのは、学生で訪問看護の実習へ行った際、印刷された地図を片手に自転車で看護師さんが移動しているのでした。
しかしこれってあくまでも私の学生時の状態、１０年くらい前の状況です。
流石に今はこのニーズないと思ったので、一応訪問看護師さんや新生児訪問をする助産師・保健師をターゲットと想定しましたが、ほぼ自分の学習のために作りました。

#記事を投稿しようと思った理由
こちらにあげるつもりもなかったのですが、しかし！！
こんなツイートを以前発見しました。
![IMG_3800.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533569/ce458c60-8b5d-6252-c2d2-2d333da8bcca.jpeg)

とある保健師さんのツイートです。（ご本人様の許可を得て掲載しています）
これはやばいと思い、こちらと[個人ブログ](https://www.55mfmfmf55.com/)に記載することにしました。
[個人ブログ](https://www.55mfmfmf55.com/after-3-weeks/)には主に感想を記載しました。

#アプリの具体的な機能
Map API はMicrosoftの　Bing map。
現在地を取得できるものとルート検索できるのを組み合わせました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">プログラミング学習して３週間目に作ったアプリ <a href="https://t.co/TJvGXr1VZM">pic.twitter.com/TJvGXr1VZM</a></p>&mdash; 助産師はよん (@mfmfmf5555) <a href="https://twitter.com/mfmfmf5555/status/1197832706945470465?ref_src=twsrc%5Etfw">November 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

アプリを開くと現在地にピンが置かれ、現在地の住所を表示させました。
そしてそれを出発地や経由地、到着地に指定できるボタンを設置しました。
地域で活動する看護職は基本的には自転車か車移動のためルート検索に電車は省きました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">qiita書くように動画アップします、気にしないでください <a href="https://t.co/WI4nWqSLGn">pic.twitter.com/WI4nWqSLGn</a></p>&mdash; 助産師はよん (@mfmfmf5555) <a href="https://twitter.com/mfmfmf5555/status/1197833190888501248?ref_src=twsrc%5Etfw">November 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

元々は出発地、経由地１点、到着地でルート検索するものですが、１日に３〜４件訪問する看護職を想定して、経由地を最大3個追加出来るようにしました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">訪問看護師、保健師さんを想定して作りました <a href="https://t.co/BHq0ROyljo">pic.twitter.com/BHq0ROyljo</a></p>&mdash; 助産師はよん (@mfmfmf5555) <a href="https://twitter.com/mfmfmf5555/status/1197832878890995712?ref_src=twsrc%5Etfw">November 22, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

お気に入りには、事前に登録したよく行くリストを登録し、それらもクリックで出発地、経由地、到着地に指定できるようにしました。（動画では学校の近くで好きなお店を入れときました）

#こだわった点
以前掲載したアプリもそうですが、本当にPC操作が出来ない方が多い業界なので、なるべく文字入力をしなくてもいいように工夫しました。（PCのタイプを人差し指でする方も多い現場です）
クリックだけでできる限り簡単にルート検索ができるように工夫しました。

#実装したいこと
###お気に入りを自分で登録や削除出来る機能の追加
お気に入りの追加や削除ごときでいちいち業者に連絡するのは、現場で忙しい看護職には向いていません。
そんな暇ありません。
定期的に訪問するお宅を登録したり、そうでなくなった場合は削除したり。
可能な限り出来る事は自分たちでカスタマイズする、それが一番早いし確実です。
病院だけでなく地域も常に時間がないのです。

###お問い合わせフォームの追加
何か困ったことやエラーがあればそのフォームからすぐに問い合わせられるようにしたいです。

###可能であれば移動しながらログが取れるような機能
自分が動いている位置がリアルタイムで地図に反映される事でより正確な移動が可能かと思います。

###CSS！UI!
３日ないくらいで作ったものなので、機能の追加だけで精一杯のためデザインは何も考えていませんでした、結果究極にダサい笑　UI破綻・・・
欲を言うならば現場の看護職のテンションが上がるようなデザインにしたいですね！
（残念ながら私にそんなセンスはありませんが笑）

#感想
これは機密情報や個人情報はほぼ入らないただのルート検索なので、すぐにでも使えるようにして地域で働く看護職に使ってもらいたいです！
というかこういうアプリ、私がわざわざ作らなくても既にあるような気もするのですが・・・
Puppeteerで作ったスクリプトを実行可能ファイル化する



# TL; DR
- Node.jsを実行可能ファイルに変換するのに[Pkg](https://github.com/zeit/pkg)を使用した。
- `puppeteer.launch()`のオプションに`executablePath: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome`を指定する。要は普段使っているであろうGoogle Chromeのパスに変更してあげる必要がある。
- 共有先のPCによっては実行権限が無かったりするので、`chmod`で付与してあげる。

## 課題
- ブラウザ上で行っていた管理者限定の単純作業を自動化したい。

## やったこと
- ブラウザ操作はPuppetterでやる。ログイン情報とかはscriptの実行時に尋ねるようにする。今回は[enquirer](https://github.com/enquirer/enquirer)を使った。
- 自分の権限的に見れない画面だったので、保存したHTMLファイルを貰って、それをローカルサーバーで開き、Puppetterの自動入力の実装をした。
- Puppeteerで作ったはいいが環境設定の手間をかんがえると、repositryを共有して `yarn install` → `yarn start` みたいに実行させるわけにもいかなそう。
- とりあえず動作確認したいだけなので、そのためだけにGUIアプリまで作るのだるい。
- [Pkg](https://github.com/zeit/pkg)というNode.jsを実行可能ファイル化してくれる君を見つけたのでそれを使うことにした。
- いざ、作って共有!実行してもらったところ、`command not found` と怒られてよくよく見ると、ファイルに実行権限がなかったので、`chmod 755 ./コマンド名`で実行可能にしてあげる。

## 感想
`headless: false`にした時の自動で動いてる感、パソコンハックされてる感あって面白い。
XPath使ったことなかったけど、柔軟にDOMにアクセスできるの便利だった。[XPath Helper](https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?hl=ja)というXPathを入力すると該当の要素をハイライトしてくれるChrome拡張があるのでおススメ。
Ubuntuでkindleを接続する方法

家に転がっていたkindleをUSB接続させたかったので繋いでみました。

#まずはPC側
スペックはUbuntuの18くらいな気がします。
結論から話すと、Ubuntuにはそもそもすでにリポジトリ内にadbがあります。
Ubuntu12.10以降は下記のコマンドを入力してください。

sudo apt-get install android-tools-adb

実はこれで終わりです。
linuxblewからインストール出来ないか試しましたが、macosでしかadbはインストール出来ないとエラーがでました。

というか、リポジトリに入ってたらそれを使えばよし。

さて、本当に入っているのか試します。

sudo adb kill-server
sudo adb start-server

これで、成功と出るはずです。

##いよいよkindle
私のkindleはもらいものなのでいきなり開発者オプションがありました。
　
開発者オプションというところで設定が必要ですので、
まずは、設定の端末オプションを開き、シリアル番号を７回タップするそうです。

そうすると、開発者オプションというものが出てくるとか

開発者オプションを開いていただき、デバックの中にある「ADBを有効にする」を有効にすれば
実機でデバックできます。

###Ubuntu側のコマンドで下記を入力しましょう
sudo adb devices

これでで端末番号が出てくるはずです。

ちなみに、私は最初出なかったので、USBを挿し直したら成功しました。
（もちろんもう一度コマンドは入力する必要があります。もちろん）

ここから、Androidアプリをkindleでデバッグできるのを目指します。。。
イノベーション仮説のMVPを作ったらクソゲ―になった！


**学びがあったから大丈夫！まだ一度もピボットしていないから余裕！（挨拶）**

### あらすじ

すげー電車激込み状況でも平然とゲームやってる人居ますよね。そっと手を伸ばして電源ボタンポチーしてしまいたいけど、輩に逆ギレされるより

ゲーム中断→課金モチベーションが下がる→機会損失が発生→ゲーム会社が儲からない→クラウドが売れない→ICT業界が停滞→リストラ！

という、いけないなんちゃら先生ロジックが恐ろしいのでできん！！笑

なので、逆説的に仮説を立ててみました。

満員電車でもゲームをやりたい→ならゲームを楽しむ意欲は強いはず→ならよりゲームを楽しむためには我慢ができる→であれば**ゲームを我慢する事でゲームをより楽しむ仕組みがあれば良い**

？？？？？

何言ってんだかさっぱ。

されどこの仮説ロジックをコード化すると

**「満員電車に詰め込まれている人のBLEデバイス数をゲーム内の成長経験値に換算すれば良いのでは？」**

アンド

**「あとBLEデバイスのMACアドレスから昔流行った[バーコードバトラー](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%83%90%E3%83%88%E3%83%A9%E3%83%BC#%E8%83%BD%E5%8A%9B%E3%81%AE%E6%B1%BA%E5%AE%9A)みたく敵を生成すればより我慢するメリットもあるかも！！」**

と思った。

ので即MVP作成。

### cordovaで作ってみた

コードはこれ

[BLEbattler](https://github.com/yasutakatou/BLEbattler)

Android用の[パッケージ](https://github.com/yasutakatou/BLEbattler/releases/download/0.1/app-debug.apk)もあります。

素材は以下のサイトのGIF動画を使用させていただきました。

[カツのGIFアニメ](http://katus-gifani.sakura.ne.jp/)

じゃんけんに見せかけた確率ガチャ、つまり殆どただの運ゲーになった！すごい！！イノベーション仮説が破壊されるイノベーション！笑

![0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/bd476df6-ade4-beac-79e3-5e5ac6a727eb.png)

まずは敵を探すにしてBLEスキャンをオンにして電車に乗り込みましょう！デバイス名とMACが溜まっていくので満員電車から解放された後などに戦いを開始しましょう。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/82fcf81f-bcf6-c0a9-12ec-e696f483b2a0.png)

敵キャラが一覧で出ます。強さはレート化されているので自分のレートと比べて強すぎないのを選びましょう。
各キャラにグー、チョキ、パーの攻撃力と耐性があります。
戦闘画面の耐性がマスクされているので探り探り有効な攻撃を見つけて戦ってください。
あと回数制限がありますが魔法が使えます。体力回復などあります。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/38f38806-9017-7997-1e76-bfd24c551fdc.png)

何対か倒すとボスが出現します。ボスを攻略するとごっそり経験値がもらえます。
経験値が溜まってレベルアップしたら自分を強化できます。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/189e0836-2cd0-536c-1f68-4e12d0d8a784.png)

余談　一週間で経験値が1000とか溜まるような人は壮絶な通勤に耐えてますのでみかけたら一緒に泣きましょう。。自分か！

### 学びは？

仮説ロジックのコード化以外の実装点が多いゲームはMVPに向いていないという事！あたりまえだ！！笑
あと20年ぶりくらいにゲームロジックを考えたけど、本職ゲーム業界でもないおじさんが魔法とか考えるの凄く凄く辛いです。この歳から黒歴史作ってる感がヤバい。

てか、スマホの操作自体をキャプチャして操作が少なく、BLE密度が高かったら報酬として仮想通貨のトークンを払い出すようなどんなスマホ使用状況であっても汎用的なのが相応しかった。。
でも仮説ロジック自体は正しいと思うのでどっかのゲーム会社実装してくんないかなー。スマホながら自転車凸防止したいですし。

## おまけ

バズった割にあんまキてない技術の一つとしてiBeaconがありますが、その理由の一つにBluetooth使ってないのにバッテリー勿体ないからオフってる人が多いからというのがありましたが、この実験から見るに2019年現在ではバッテリーの大容量化によってデフォでオンな人が多いと思いました。退勤時に50～70は拾えた。

てか、MACとデバイス名で毎日同じ車両にいる、おっちゃんとか丸見えなんで逆にセキュリティ的にヤバいような気がする。会社で毎日同じ時間にトイレ籠ってる人とか調べられてしまう。
これはこれで良いのだろうか・・複雑だな。
新人体験記1「install.wimがない!?」

#そもそもinstall.wimとは
新人の自分はこっから始まりましたので一応書いときます。
なので「そんなん知ってるぜ」って方は読み飛ばしてください。
結論から言うとWindowsのインストールイメージです。
そんなこと言われてもという人がいると思うので追記しますと、インストールイメージとはほとんど読んで字のごとくなのですがインストールをするためのデータ、コードetc...といったところです。

#この問題にぶち当たった流れ
Windows展開サービスの勉強がてらブートイメージとインストールイメージをISOファイルから取り出そうとしたのですが、まず「そういえばISOイメージってどうやって作るんだろ」となりMicrosoftのそれっぽいページを探しました。
そしたら親切なことにWindows10においてはMicrosoftさんがWindowsのOSをISOにする専用ツール的なのを出していることが分かり、即刻インストール。(そんなのどこにあるの?って思ったひとは⇒[こちら](https://www.microsoft.com/ja-jp/software-download/windows10#34de222e-6944-44aa-8f45-8e96988880a4))
無事ISOファイルを得ることができwindows展開サービスも触って、いざインストールイメージをwindows展開サービスに登録するぞ!!っとなって新人に電撃が走る、、、

***install.wimないやんけー!!!!!***

install.wimやboot.wimは普通ISOファイル直下のフォルダであるsourceの中に入っているのですが、boot.wimは普通にあったのにinstall.wimがありません、、、その代わりに何やら似ているファイルinstall.esdというファイルがありました。
こうなったら手詰まりだなぁなんて思って、ググってみたら偉大なQiitaに居る先人がesdをwimにする方法を書いているではありませんか!!それを参考にしてみたら無事できたのでその手順をここでも紹介しようと思います。
(参考:[SkyLaptorさんのありがたかった記事](https://qiita.com/SkyLaptor/items/7f2bf545e3d0a9170303))

PowerShellを起動して下記のコマンドを実行します。

```ruby:PowerShell
Dism /Get-WimInfo /WimFile:{ESDファイルパス}
```

ここではinstall.esdのファイルに入ってるインストールイメージは何がありますか?情報をコンソールに表示してくださいというコマンドを実行しています。

ここで注意しなければならないのはフルパス指定でしっかりと最後までinstall.wimというとこまで{ESDファイルパス}のところに入れましょう(決してここでエラーが出たとかそういうのじゃないんです。イヤ本当に。)

これを実行すると次のような画面になります。

```ruby:PowerShell
展開イメージのサービスと管理ツール
バージョン: XX.X.XXXXX.X

イメージの詳細: {ESDファイルパス}

インデックス: 1
名前: Windows 10 Home
説明: Windows 10 Home
サイズ: 14,980,100,861 バイト

インデックス: 2
名前: Windows 10 Education
説明: Windows 10 Education
サイズ: 15,259,815,851 バイト

インデックス: 3
名前: Windows 10 Pro
説明: Windows 10 Pro
サイズ: 15,260,386,568 バイト

操作は正常に完了しました。
```

注目してもらいたいのはインデックスの番号です。
この番号は後で使いたいので覚えておく必要があります。

そして最後に下記のコマンドを実行します。

```ruby:PowerShell
Dism /Export-Image /SourceImageFile:{ESDファイルパス} /SourceIndex:{インデックス番号} /DestinationImageFile:{WIMファイルパス} /Compress:max /CheckIntegrity
```

`{ESDファイルパス}`は先ほどのコマンドと同じで、`{インデックス番号}`は先ほどのコマンドの実行結果で出てきたもの、`{WIMファイルパス}`は自分で好きな場所と名前を指定し最後に.wimとつけたものにしてください。(.../install.wimという形にした方が良いと思います。)そうすると処理が始まり、完了の旨のメッセージがPowerShellに表示されたら完了です。
サーバースペックにもよりますが意外に時間がかかります。

#この現象で考えたこと
参考元のSkyLaptorさんによると
>ESDが入っているメディアはイメージ作成ツールで作成したisoがほとんどだと思う。

だそうです。
更に
>install.esdとは複数のwimを高度に圧縮した形式

のようできっとMicrosoftのエンジニアさんたちが「ISOファイルにそのまま複数のwimファイル入れるんだったら、その複数のwimファイルをぜーんぶesdって形にして圧縮したほうがISO作成ツールの処理が早くなるんじゃね?」となったのでしょう。(もちろん想像ですが)

それと
>この方法で取り出したinstall.wimと正規(VL版)のinstall.wimは厳密にいうと別物らしいので利用は自己責任で

ということでもあるのでもしかしたらwindows展開サービスを使う時とかはやらない方が良いのかな?とか考えました。(もう使っちゃってるけど)
以上、ここまで読んでくれた方ありがとうございました。
自分が新人だと感じる限り、この新人体験記シリーズは気が向けば投稿します。
5tuple(ファイブタプル)とは

ネットワーク分野で以下の５個のセットのことを指して言う言葉。

* 送信元IP
* 送信元ポート番号
* 宛先IP
* 宛先ポート番号
* プロトコル番号


業界用語をさも当然のように使うエンジニアの悪い癖。
Pythonista3のUI実装で遊ぶ[超超入門]

# はじめに
ぼくは自宅等でPython遊びをするときはiPadで[Pythonista3](https://apps.apple.com/jp/app/pythonista-3/id1085978097)というアプリを使っています[(過去記事)](https://qiita.com/EkatoPgm/items/3f5aba481c63f77c739f)。
Pythonista3にはスマホアプリのUIを実装するためのライブラリが備わっていて、なーんかこれ使ってかっこいいことできねーかなぁなんて考えたので、いろいろやってみました！

# ご紹介
まずはPythonista3のuiライブラリがどんなものなのか見ていきましょう！

## ファイル作成
まずはUI実装のためのファイルを作ります。
新規ファイル作成で「Script with UI」を選択しましょう！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404171/552d00ae-c075-4850-fe97-6df000864ccb.jpeg" width=40% >

これをすると任意の名前foo.pyと、同名のfoo.pyuiが作られます。
pyの方はみなさんよく知るスクリプトです。そしてpyuiを開くと
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404171/331a4d68-e754-9422-6caf-cbc3d60fdbf9.jpeg" width=60%>

ってなかんじの画面が出ると思います。
この白いのが要するに今から作る画面です。
右っ側にあるSizeで、お好きな画面サイズにしましょう！

## 画面に部品を配置
左上の＋ボタンで画面に要素を追加することができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404171/0951bf04-8d78-bec6-5b53-7df6b9ecb6b8.jpeg" width=60%>

いろいろありますね。
それぞれの部品が何かまではここでは説明しませんが、いくつか使ってこんな画面を作ってみました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404171/6ec4e934-5879-77a5-2f1f-edf07abebec9.jpeg" width=60%>

各部品の説明は記事末尾の別記事を参照してください！
レイアウトの作り方はやってみるのが一番かと！

## 実行してみる
作ったUIを実行してみるには、pyファイルの方を開いて実行してあげます。
pyファイルには、最初から以下のコードが記述されています。

```python
import ui

v = ui.load_view()
v.present('sheet')
```
まずは、そのまま実行してみましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404171/01c10dc4-1680-9910-e0ee-e1963daafc06.jpeg" width=60%>
サブスクリーンでアプリが実行されました！
このサブスクリーン形式はiPadだけのようで、iPhoneのPythonistaで実行した場合はフルスクリーンでアプリが実行されます。

# おわりに
ともかく、見た目を作って実行することができました！
どんどんアドバンスな内容にしていきますので、続きは以下の記事をご参照ください！

[PythonistaのUI実装で遊ぶ[画面要素]](https://qiita.com/EkatoPgm/items/c382996be664cdf64d78)
[PythonistaのUI実装で遊ぶ[Actionの実装]](https://qiita.com/EkatoPgm/items/7b54e850b1b1c64acb13)
[Pythonista3のUI実装で遊ぶ[画面遷移]](https://qiita.com/EkatoPgm/items/2aea68188d053047cfb6)
既存のRailsアプリにReactを導入する方法

#概要
yarn、Webpacker、react-railsを使います。

#1.Yarnのインストール
nodeが入っている場合

```ruby:
$brew install yarn --without-node
```
nodeが入っていない場合

```ruby:
$brew install yarn
```

#2.Webpacker をインストール

Gemfileにwebpackerを追加します。

```ruby:Gemfile
gem 'webpacker'
```

bundle（bundle install）を実行。
インストールが終わったら、以下を実行。

```ruby:
$bundle exec rails webpacker:install
```

#3.既存アプリへReactを導入する

```ruby:
$bundle exec rails webpacker:install:react
```

application.html.slimに以下追記

```ruby:application.html.slim
= javascript_pack_tag    'application'
```

#4.Gem react-railsをインストール

```Genfile
gem 'react-rails'
```

bundle（bundle install）を実行。

```Genfile
$rails g react:install
```

#5.実際に使ってみる
以下でReactコンポーネントを作成。

```Genfile
$rails g react:component Hello
```

app/javascript/components/以下にHello.jsが作成されます。

次に先ほど作成したコンポーネントを表示させたい画面のビューファイルに以下を挿入します。

```Genfile
= react_component("Hello" )
```
react_componentメソッドで先ほど作成したコンポーネントを呼び出します。

次に,railsのモデルデータをReactのコンポーネントに渡す方法です。
今回はユーザーデータを渡します。では、先ほどの挿入した箇所を以下に変更してください。

```Genfile
= react_component("Hello" , user: @user)
```



次にHelloコンポーネントのretuen内を以下のようにします。

```Hello.js
render () {
    return (
       <div>
         {this.props.user.name}
       </div>
    );
  }

```

これで、挿入したビューの画面にアクセスすると、先ほど渡したユーザーの名前が表示されます。
シェルスクリプト case文 書き方(3つの例)

#### 1. いろんなパターンの指定のしかた

```bash:case-example1.sh
arg=$1
case $arg in
  [a-z])
    echo "英小文字1文字"
    ;;
  ?)
    echo "1文字"
    ;;
  japan*)
    echo "japanではじまる"
    ;;
  *)
    echo "その他"
esac
```

```
$ ./case-example.sh a
英小文字1文字
$ ./case-example.sh 1
1文字
$ ./case-example.sh japan-color
japanではじまる
$ ./case-example.sh other
その他
```

#### 2. つぎの条件内の処理も実行 ;&
```
var=my
case $var in
  my)
    echo "my"
    ;&
  you)
    echo "you"
esac
```
一度条件にマッチしたら、つぎは条件にマッチするかに関わらず実行される。

```
my
you
```

#### 3. つぎの条件も判定 ;;&
```
str="your"
case $str in
  you*)
    echo "youではじまる"
    ;;&
  my)
    echo "my"
    ;;&
  your)
    echo "your"
esac
```
条件にマッチしていたら、つぎの分も実行される。

```
youではじまる
your
```
primengのドロイド君iconを使いたい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367808/a25eeaab-bf41-76d9-b0f4-fbf4c9062b03.png)

色違いのドロイドがあらわれたっ！

意外に苦戦しました（笑）

まずは
npm install primeicons --save
モジュール取ってきます。


 class="pi pi-android"
app.component.htmlに埋め込みます。
(※本当はiディレクティブで囲みますがqiitaに直接html文書けなくなったようなので
省いてます。https://www.primefaces.org/primeng/#/icons)


@import '~primeicons/primeicons.css';
styles.cssに書きます。

.pi {
    font-family: 'primeicons';
    font-style: normal;
    color: blue;　//追記
    font-weight: normal;
    font-variant: normal;
    text-transform: none;
    line-height: 1;
    display: inline-block;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    font-size: 500px;　//追記
}

node_modules下にnpm installで生成されたprimeicons.cssに書き込みます。
デフォルトだとかなり小さく、色も黒なので追記しました。

今回つまずいたのがindex.htmlに書くのかangular.jsonに書くのかとかそこらへんで
す。classって書いているのでcssで設定するのはそりゃそっかって終わってみてなりました。

実務では改修メインだから0から作るってまた難易度が段違い。しかし楽しい！
Hello! Qiita's World!

 はじめまして、ヨースケと申します。
初投稿ですので最初は自己紹介でもしようと思います。まだ、このMarkdown方式の書き方に慣れていないので、おかしなレイアウトになるかもしれませんが徐々に慣れていこうと思います。

### 自己紹介
 改めまして「ヨースケ」と申します。特にニックネームとかは考えるのが苦手でそれを考えるだけで時間がかかってしまいます(笑)。
 主にAndroidアプリを開発しています。といってもフリーランスと言うわけではなく、うつ病になって退職して約1年経つのでその間の穴埋め的な感じです。アプリ開発を始めたのは3か月前くらいで体調がいい日悪い日と波があるので少しずつやっています。
 Androidアプリを初めて開発したのは大学3年の頃で授業の一環で目覚ましアプリを作りました。あの時はとても充実していたな...
 
 就職して1年間は何とか小売系の社内SEとしてやっていったのですが、去年の春にうつ病にかかりました。教育もまともにしてもらえなかったり、規模が大きなプロジェクトを一人で任されたり...そもそも新卒を採用するのはかなり久しぶりらしく僕のほかにも4,5人は精神疾患を患った同期が...

 初めて憎悪:blush:という感情が生まれた過去で、病気療養中は地学を勉強したりいろいろやってはいましたが、ふと「自作のアプリを公開したい！」と思い、始めた次第です。

 大学でJavaを勉強したとはいえAndroidは奥が深くまだまだ勉強中の経験が浅い青二才ですが、備忘録的なことや「これができてうれしい！」ことを投稿できればなと思います。これから宜しくお願い致します。m(._.)m
F#でAndroidアプリ開発 Helloworld編

F#でandroidアプリ開発の基本となるHelloworldを出力する方法を紹介します．

まずはVisual Studio 2019を起動します．
「新しいプロジェクトの作成(N)」→「空のアプリ(Android)」を選択します．

![1_createProject.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521336/212ae8bf-75af-a98b-f4e0-82223454af49.png)

任意の「プロジェクト名(N)」「場所(L)」「ソリューション名(M)」を入力し，作成します．

私の環境では下記のエラーが表示されます．
もしも表示されない場合はこの項目は飛ばしてください．

FSharp.CoreとXamarin.Android.Fsharp.ResourceProviderのパッケージが見つからなかったようです．

![2_errorMessage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521336/4fe046da-7658-5f83-e661-a9bf7785cf4c.png)

パッケージがインストールできなかったのでエラーが出ています．

・「XXXで型'Resource'が定義されていません」
・「このプログラム ポイントよりも前の型情報に基づいて、メソッド 'SetContentView' の固有のオーバーロードを決定することができませんでした。型の注釈が必要な場合があります。 候補: Activity.SetContentView(layoutResID: int) : unit, Activity.SetContentView(view: View) : unit」
・「値、コンストラクター、名前空間、または型 'Layout' が定義されていません。」
・「値、コンストラクター、名前空間、または型 'Id' が定義されていません。」


![3_errorMessage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521336/a721f5b6-10ec-2b51-5d70-93fa6e0d6f37.png)

タブの「ツール「T」」→「NuGetパッケージマネージャー(N)」→「ソリューションのNuGetパッケージの管理(N)...」を選択します．
FSharp.CoreとXamarin.Android.Fsharp.ResourceProviderをインストールします．

![4_FSharpCore.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521336/90be4900-5ccc-93c3-9457-c5ad2dbae8e5.png)

![5_XamarinAndroidFSharpResourceProvider.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521336/df3450b5-32d7-bd8e-de4b-fb8e9182d1ba.png)

まだエラーがなくなっていないです．
・「型 'int' が定義されていません。」
・「フィールド、コンストラクター、またはメンバー 'Add' が定義されていません。」

プロジェクトの参照設定から「参照の追加(R)...」→「アセンブリ」→「System.Numerics」にチェックを入れて参照に追加します．

![7_SystemNumerics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521336/bc733485-bcbd-9ee5-1a25-c5c2cf4f3af6.png)

するとエラーが出なくなりました．
プロジェクトを作成してエラーが出なかった場合はここから進めてください．

プロジェクトのResources\layout\Main.axmlを開きます．

![8_Mainaxml.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521336/8748d803-bd89-93c1-d0eb-653d4e5a9ef8.png)

すでにHelloworldが記載されていますが，テキストを挿入します．
タブの「ツールボックス」→「Text(Large)」を選択して，レイアウト画面にドラッグ&ドロップします．

![9_largeText.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521336/9f23fff8-42bd-5bc3-069e-d74594cf909c.png)

プロパティのTextを"Helloworld"に変更します．

![10_MainaxmlHelloWorld.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521336/98ba4f3d-0962-7b9e-ad52-69696005f82a.png)

これで完成です．
Androidスマートフォンを接続して実行してみました．
Helloworldが出力されました．

![11_HelloWorld.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521336/09992b44-4378-08af-dae0-b81b56d9ac9b.png)