OmniAICreator/Qiita-1.07M huggingface dataset:
【ZEUSCloud】 でオールインワン分析ができるって!?（第2回）What’s ZEUSCloud ！？

# はじめに
こんにちは、株式会社ジール所属の@uemura_eです。
現在、BI onlineライター・編集・運営を行っております。

BI onlineについて:point_down_tone2:
https://bi-online.jp/

ZEUSCloud の実態に迫る、第２回目の投稿です。
前回1回目では ZEUSCloud というBIツールがこの世に存在しているよ！というお話でした。

第1回 : https://qiita.com/uemura_e/items/dfc091245254e20d2a1e


第2回目は、ZEUSCloudの内部構造とログインについてご紹介します。

※今回もテストデータを用いております。

## ZEUSCloud の内部構造って？
ZEUSCloud の製品ページによると、機関部門のデータや、IT部門のデータ、データ形式が様々であるにも関わらず、ZEUSCloud にポンと入れれば万事OKとのこと。内部構造を紐解くと、下の手順で処理される様です。
 

❶ データの収集、加工などのETL処理　　
　　↓
❷ DWH や Data Lake によるデータの蓄積
　　↓
❸ MicroStrategy 側の機能として、データ分析を行い、ダッシュボードやレポート作成


ZEUSCloud は、これらのステップがパッケージ化されているので、ユーザ側の負担が少ないのだそうです。なるほど、とても便利そうな製品ですね。

しかし・・・言うは易く行うは難し。
猫も杓子もかんたんかんたんって。実際使ったら意外と落とし穴があるに違いない・・・
きっと導入に踏み切れないお客様は、もっと不安をお持ちになると思います。

### :thinking: 私が抱いた懸念点     

●インフラ回りに明るくないお客様の場合、導入そのものが後ろ向きだろうな。。。
●自社インフラの整備が整っていない場合、厳しそうだな。。。
●実際、ポンとデータを入れた後、結局はデータの結合とか色々あったりするのだろうな。。。
●データのクリーニングが必要ないと言いつつ、ふたを開けたらあったりするパターンもあるから、その修正にまた時間がかかりそうだな。。。
●レポート画面も一から作成するというのは、初めての方にはハードルが高いと思うな。。。


オールインワン？マユツバものじゃないか？？？
という事で、早速真相を確かめるべく試してみました！！

## いざ、ZEUSCloud ログイン！

ZEUSCloud を開くと下の画面が出てきました。

❶
![やってみました5弾_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545424/74ed0bda-f56d-8cf8-3b80-7d85b26bd800.png)

ZEUSCloud にログインしたら、すっきり明快！
な、な、なんと主に使用するボタンは3つ (①②③) だけだった！
<よく使用するボタン３つ>
①分析機能
②参照機能
③メンテナンス機能

<サポート用に使用するボタン２つ>
④マニュアル
⑤クライアントツール


❷
１の画面で③のボタンを押すと、左図の２の画面に遷移します。
ZEUSCloud にデータをインポートする方法は、Data Lake か DWH を選択します。選択ボタンは①又は③、データ読み込みボタンは②又は④を押すだけ！
![やってみました5弾_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545424/afd0fb0a-40e2-2a14-253c-274a8b29a4b0.png)


①Data Lake にファイルをインポート　③DWH にファイルをインポート
　　↓ 　　　　　　　　　　　　　　　　                                      ↓
②Data Lake へ取り込み　　　　　　　 ④DWH へ取り込み



❸
インポートはファイルをドラッグアンドドロップすればOK。
![やってみました5弾_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545424/bf595b84-9776-12a5-7b23-062ada800fe5.png)


❹
インポート後にデータを追加する場合は、挿入からデータを追加する。
![やってみました5弾_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545424/2f8f8e52-0777-a0a6-94f1-8884cad26543.png)




❺
インポートするファイルはクリックしてファイル指定する。
![やってみました5弾_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545424/086fc443-e8ab-6c46-995a-c0376fbe4fa1.png)


❻
インポートの際、ファイルに編集が必要なデータがあれば、インポートする際にキレイに整える。整える必要があるデータがあれば自動でチェックしてくれる。インポート後に型変換をしたい場合は、随時行えるので焦らなくてもOK。
![やってみました5弾_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545424/f8ccf9f5-d04e-35fc-99c6-67d4c6f7cf1d.png)


そんなこんなで、あっという間にデータがインポートされました:ok_woman:

# おわりに
いかがでしたでしょうか。
以外と簡単にデータをインポートすることができますよね。
さて次回は、いよいよビジュアルを作成し、レポート完成までご紹介予定です:muscle_tone2:
![20221122_Qiit第2回.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545424/1fa2aac6-4372-cd1c-249e-4849b0ff70fc.jpeg)
paiza.ioでelixir その89

# 概要
paiza.ioでelixirやってみた。
練習問題やってみた。

# 練習問題
api叩いて、住所から、緯度経度、求めて、地球儀上にピンを立てよ。

# サンプルコード

```
:inets.start
:ssl.start

IO.puts """
<html lang="ja">
    <head>
        <meta charset="UTF-8" />
        <title>test</title>
        <link href="style.css" rel="stylesheet" />
        <script src="https://cesium.com/downloads/cesiumjs/releases/1.99/Build/Cesium/Cesium.js"></script>
        <link href="https://cesium.com/downloads/cesiumjs/releases/1.99/Build/Cesium/Widgets/widgets.css" rel="stylesheet" />
        <style>
body {
    padding: 0;
    margin: 0;
    overflow: hidden;
    height: 100%;
}
#cesiumContainer {
    display: flex;
    width: 100%;
    height: 100%;
}
        </style>
    </head>
    <body>
        <div id="cesiumContainer"></div>
		<script>
const viewer = new Cesium.Viewer('cesiumContainer', {	
	timeline: false
});
const pinBuilder = new Cesium.PinBuilder();
function pin(longitude, latitude) {
	const bluePin = viewer.entities.add({
		name: "red pin",
		position: Cesium.Cartesian3.fromDegrees(longitude, latitude),
		billboard: {
			image: pinBuilder.fromColor(Cesium.Color.RED, 10).toDataURL(),
			verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
		},
	});
	viewer.camera.flyTo({	 
		destination : Cesium.Cartesian3.fromDegrees(longitude, latitude, 450000)
	});
}

"""

query = URI.encode_query(%{q: "山形県東置賜郡川西町"})
url = "https://msearch.gsi.go.jp/address-search/AddressSearch?" <> query
url = String.to_charlist(url)
{:ok, {_status, _headers, body}} = :httpc.request(url)
body
body = IO.iodata_to_binary(body)
body = String.replace(body, "\\", " ")
Regex.scan(~r/:\[(.+?)\]/, body)
|> Enum.map(fn [_, v] -> 
    IO.puts("pin( #{v});")
end)


IO.puts """
		</script>
	</body>
</html>
"""
```

# 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/abf36728-b5ca-c5e2-51ca-a86698e99dab.png)


# 成果物

https://paiza.io/projects/xLNFjGLeBNjMu6E5Kg3yyg?language=elixir


以上。
paiza.ioでelixir その88

# 概要
paiza.ioでelixirやってみた。
練習問題やってみた。

# 練習問題
api叩いて、住所から、緯度経度、求めて、地図上にピンを立てよ。


# サンプルコード

```
:inets.start
:ssl.start

IO.puts """
<!DOCTYPE html>
<html>
	<head>
		<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/leaflet/1.5.0/leaflet.css"/>
		<script src="//cdnjs.cloudflare.com/ajax/libs/leaflet/1.5.0/leaflet.js"></script>
	</head>
	<body>
		<div id="map" style="width: 300px; height: 300px;"></div>
		<script>
var map = L.map('map').setView([38.0, 140.0], 10);
var mapLink = '<a href="http://openstreetmap.org">OpenStreetMap</a>';
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
	attribution: '&copy; ' + mapLink + ' Contributors',
	maxZoom: 18,
}).addTo(map);
function pin(lat, lon) {
    
    L.marker([lon, lat]).addTo(map);
}
"""

query = URI.encode_query(%{q: "山形県東置賜郡川西町"})
url = "https://msearch.gsi.go.jp/address-search/AddressSearch?" <> query
url = String.to_charlist(url)
{:ok, {_status, _headers, body}} = :httpc.request(url)
body
body = IO.iodata_to_binary(body)
body = String.replace(body, "\\", " ")
Regex.scan(~r/:\[(.+?)\]/, body)
#|> IO.inspect
|> Enum.map(fn [_, v] -> 
    IO.puts("pin( #{v});")
end)


IO.puts """
		</script>
	</body>
</html>
"""
```

# 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/110baa1b-e47d-7b86-38f7-897d08390946.png)




# 成果物

https://paiza.io/projects/3aa6wElDFaQEjx-PQtCKVA?language=elixir


以上。
BigQueryで削除済みのテーブルを復元する方法

## 本記事の内容
BigQueryで削除してしまったテーブルを復元する方法を共有して、BigQuery初学者の方の助けになればと思い作成しました。
## 復元するためのコード(CLIで叩いてください)
```bash
$ bq cp <復元したいテーブルがあったdataset_id>.<復元したいtable_id>@<unixエポック時刻の経過時間(ミリ秒単位)> <コピー先のdataset_id>.<コピー先のtable_id(新しく作成してOK)>
```
### 具体例
```bash
$ bq cp banana_dataset.yellow_table@1669079136904 apple_dataset.yellow_table_restored
```
## unixエポック時刻の経過時間の出し方(bigqueryコンソールで叩いてください)
```sql
select unix_millis(timestamp_expression)
```
### 現在時刻のunixエポック時刻の経過時間の出し方
```sql
select unix_millis(current_timestamp())
```
## 削除済みのテーブルを復元する際の注意事項
>BigQuery では、タイムトラベルを使用して、BigQuery で変更または削除されたデータにアクセスできます。デフォルトでは、**過去 7 日間のタイムトラベル期間内であれば**、どの時点のデータにもアクセスできます。
>https://cloud.google.com/bigquery/docs/time-travel?hl=ja#restore-a-table
## 参考記事
https://cloud.google.com/bigquery/docs/time-travel?hl=ja#restore-a-table

https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions?hl=ja#unix_millis
今さらcookieについてまとめる

# 背景
### Cookieとは
[MDN Web Docs: HTTP Cookie の使用](https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies)

cookieを3つのパターンに分けて触ってみる

- **1st Party HTTP Cookie**
  - 1st ドメインのサーバーからSet-Cookieレスポンスヘッダによって設定されるCookie
- **3rd Party Cookie**
  - 3rd ドメインのサーバーからSet-Cookieレスポンスヘッダによって設定されるCookie
- **JS Cookie**
  - Javascriptの document.cookie で設定されるCookie

### 環境
- MacOS Monterey: 12.6
- Chrome: 107.0.5304.110
- Safari: 16.0

# 1st Party HTTP Cookie

WebページをホストしているドメインのサーバーからSet-Cookieレスポンスヘッダによって設定されるCookie

### 特徴

- 保持期間が長い
- HTTPOnlyがTrueになり、JSの `document.cookie` で参照したり更新したりできない

### 設定方法

```python
from flask import Flask, jsonify, make_response

app = Flask(__name__)

@app.route("/cookie_test")
def cookie_test():
    resp = make_response()
    max_age = 60 * 60 * 24 * 120  # 120 days
    # domain="xxxx" でdomain指定できるが、配信元以外のドメインを指定しするとcookie setされなかった
    # domainを指定しないと自動的に配信元のdomainが指定される
    resp.set_cookie('uid', value="asdf", max_age=max_age, path='/', secure=True, httponly=True)
    return resp
```

# 3rd Party Cookie
Webページをホストしているドメイン以外のサーバーからSet-Cookieレスポンスヘッダによって設定されるCookie


### 特徴
- safari も chromeも登録できなかった


# JS Cookie
Webページをホストしているドメインのサーバーから配信されるJavaScriptの `domument.cookie =` で設定されるcookie. 配信元が1stドメインだろうが3rdドメインだろうが挙動は変わらない


### 特徴
- 保持期間が1st Party Http Cookieに比べて短い
    - chromeでは1年くらいいけた
    - safariでは7日

### 設定方法

```python
function writeToCookie() {
    max_age = 60 * 60 * 24 * 1000
    document.cookie = "1st_with_write_domain=uuuu;domain=test.com;max-age=" + max_age;
}

writeToCookie()
```


# 参考

- [https://pythonbasics.org/flask-cookies/](https://pythonbasics.org/flask-cookies/)
- [https://flask.palletsprojects.com/en/1.0.x/api/#flask.Flask.make_response](https://flask.palletsprojects.com/en/1.0.x/api/#flask.Flask.make_response)
- [https://www.yoheim.net/blog.php?q=20160506](https://www.yoheim.net/blog.php?q=20160506)
paiza.ioでelixir その87

# 概要
paiza.ioでelixirやってみた。
api叩いて、住所から、緯度経度、求めてみた。

# サンプルコード

```

:inets.start
:ssl.start


query = URI.encode_query(%{q: "山形県東置賜郡川西町"})
url = "https://msearch.gsi.go.jp/address-search/AddressSearch?" <> query
url = String.to_charlist(url)
{:ok, {_status, _headers, body}} = :httpc.request(url)
body
body = IO.iodata_to_binary(body)
body = String.replace(body, "\\", " ")
Regex.scan(~r/:\[(.+?)\]/, body)
#|> IO.inspect
|> Enum.map(fn [_, v] -> 
    IO.puts("( #{v})")
end)


```

# 実行結果

```
( 140.053177,38.005203)
```

# 成果物

https://paiza.io/projects/hlxPkYMbIeLLLY1wxPU8xQ?language=elixir


以上。
Accessで引数をもらいながらの起動

# やり方

```/cmd``` で引数渡せる。

```:ショートカット先サンプル
C:\Users\d\tester.accdb /cmd "てすと"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/cacaecb9-90ec-b9a2-078c-1429a15b407e.png)

受け取った側（Access）は ```Command``` で引数の値を参照できる。

```vb:引数の中身確認
Debug.Print Command
```

# cmd引数に何も指定しなかった場合

下記の場合 ```Command``` には空文字が入る。
（NULLではない）

```
C:\Users\d\tester.accdb /cmd
```

# cmdで数字を渡した時

ショートカットが下記。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/539fcaee-8043-2061-8286-1ea2b0deeb52.png)

下記の出力結果は『2』。

```vb:数字を引数でもらった時の動作確認
Dim arg_ As Long
arg_ = Command
arg_ = arg_ + 1
Debug.Print arg_
```


# 参考サイトさん

https://asbepartners.com/access_task/

# バージョン

Windows 10 Pro 21H2 OSビルド 19045.2311
Microsoft Access for Microsoft 365 MSO (バージョン 2209 ビルド 16.0.15726.20188) 32 ビット
paiza.ioでelixir その86

# 概要
paiza.ioでelixirやってみた。
URI使ってみた。

# サンプルコード

```


URI.decode("https%3A%2F%2Felixir-lang.org")
|> IO.inspect

URI.decode_query("foo=1&bar=2")
|> IO.inspect

URI.encode("ftp://s-ite.tld/?value=put it+й")
|> IO.inspect

URI.encode("a string", &(&1 != ?i))
|> IO.inspect

query = %{"foo" => 1, "bar" => 2}
URI.encode_query(query)
|> IO.inspect

URI.merge(URI.parse("http://google.com"), "/query") 
|> to_string()
|> IO.inspect

URI.parse("https://elixir-lang.org/")
|> IO.inspect

URI.query_decoder("foo=1&bar=2") 
|> Enum.to_list()
|> IO.inspect

uri = URI.parse("http://google.com")
URI.to_string(uri)
|> IO.inspect


query = URI.encode_query(%{q: "山形県東置賜郡川西町"})
|> IO.inspect




"ok"
|> String.to_charlist
|> IO.inspect

url = "https://msearch.gsi.go.jp/address-search/AddressSearch?" <> query
url = String.to_charlist(url)
|> IO.inspect



```

# 実行結果

```
"https://elixir-lang.org"
%{"bar" => "2", "foo" => "1"}
"ftp://s-ite.tld/?value=put%20it+%D0%B9"
"a str%69ng"
"bar=2&foo=1"
"http://google.com/query"
%URI{
  authority: "elixir-lang.org",
  fragment: nil,
  host: "elixir-lang.org",
  path: "/",
  port: 443,
  query: nil,
  scheme: "https",
  userinfo: nil
}
[{"foo", "1"}, {"bar", "2"}]
"http://google.com"
"q=%E5%B1%B1%E5%BD%A2%E7%9C%8C%E6%9D%B1%E7%BD%AE%E8%B3%9C%E9%83%A1%E5%B7%9D%E8%A5%BF%E7%94%BA"
'ok'
'https://msearch.gsi.go.jp/address-search/AddressSearch?q=%E5%B1%B1%E5%BD%A2%E7%9C%8C%E6%9D%B1%E7%BD%AE%E8%B3%9C%E9%83%A1%E5%B7%9D%E8%A5%BF%E7%94%BA'

```

# 成果物

https://paiza.io/projects/UosQohAw62DVH9jp2GA_-g?language=elixir


以上。
Azure Administrator(AZ-104)：Azure管理者向けの前提条件「PowerShellの概要」

Microsoft Learnを用いたMicrosoft Azure Administrator(AZ-104)の試験内容をまとめる投稿です。
この投稿ではMicrosoft Learnで学ぶ内容をできるだけ簡潔にまとめております。
Azureの勉強を一から始め、AZ-900取得後の資格としてAZ-104取得を目指している方の参考になれば幸いです。
※AZ-900の内容は本投稿では省略しております。再度復習したい方は下記をご参照ください。
[Azure Fundamentals(AZ-900)：試験合格に向けた学習内容のまとめ](https://qiita.com/fsd-jume/items/e4ec76959adb547ac5e8)

## 今回の学習内容
**◆「PowerShellの概要」**
◇対応するMicrosoft Learn ラーニングパス
[AZ-104:Azure 管理者向けの前提条件](https://learn.microsoft.com/ja-jp/training/paths/az-104-administrator-prerequisites/)
◇対応するモジュール
[Azure PowerShell の使用](https://learn.microsoft.com/ja-jp/training/modules/configure-azure-resources-tools/4-use-azure-powershell)
[PowerShell の概要](https://learn.microsoft.com/ja-jp/training/modules/introduction-to-powershell/)

※前回の投稿は下記から確認できます。
[Azure Administrator(AZ-104)：Azure管理者向けの前提条件「Azure Cloud Shell の使用」](https://qiita.com/fsd-jume/items/041b92d577edb8c7c782)

## PowerShellの概要
### コマンドを見つける
**◆コマンドレット・・・PowerShell専用のコマンド**
・コマンドレットのネーミングルールは[動詞]-[名詞]

**◆コマンドレットを調べる代表的なコマンドレット**
**◇Get-Command**
・使用可能なすべてのコマンドレットを表示
・必要なコマンドを素早く見つけたい場合はフラグを使用して表示をフィルター処理する
　-「-Noun」：名詞部分をフィルター処理する場合に使用
　　例)名詞部分がDateから始まるコマンドを表示したい場合→「Get-Command –Noun Date*」
　-「-Verb」：動詞部分をフィルター処理する場合に使用
　　例)動詞部分がGetのコマンドを表示したい場合→「Get-Command –Verb Get」
※これらを組み合わせてフィルター処理することも可能→「Get-Command –Verb Get –Noun Date*」

**◇Get-Help**
・コマンドの使用方法を表示
・「-Full」や「-Detailed」を使って、細かく表示させることも可能
　例)「Get-Help –Name Get-Date -Detailed」
・「help」関数でも使用方法を表示可能だが、1ページずつ表示

**◇Get-Member**
・オブジェクトのメンバー(プロパティとメソッド)を表示
　-プロパティ：オブジェクトに含まれる値
　　例)オブジェクト「Get-Date」に含まれるプロパティ→Date, Day, Hour, Monthなど
　-メソッド：オブジェクトに対する操作
　　例)「(Get-Date).DayOfWeek」→現在の日付の曜日を取得

## 次の学習内容
**◆Azure CLIの使用**

https://qiita.com/fsd-jume/items/206c801b6a504a780f11

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/6eda24728c9c03c36bc3
AndroidのDeepLinkを手軽にdebugする

**「DeepLink」** 
モバイル開発においてよく使う機能であり、ユーザとしても便利なものであり、そしてdebugがやりづらい。という開発においては苦しいもの。というイメージが個人的にはありました。（本番環境や開発環境でURL違うなど準備もそこそこある）
それを解決する方法を本記事では紹介します。

# DeepLinkについてざっくりと

- iOSのユニバーサルリンクと似ている
- httpも使用可能
- カスタムURLスキームと似ているが微妙に異なる
- タップすると設定されたアプリが起動される
- 特定の画面を表示させることも可能

# 解決したいこと
- DeepLinkのためにサーバやドメインなどを準備したくない
- 手早く動作確認したい

# Android Studioでの設定
## AndroidManifestにfilterを設定

```xml
<activity
  android:name="com.example.android"
  android:exported="true">
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data
      android:scheme="https"
      android:host="${serverUrl}"
      android:pathPattern="/.*/hogehoge/.*" />
  </intent-filter>
</activity>
```

## Activityで起動時の処理を作成

```kotlin
override fun onCreate(savedInstanceState: Bundle?) {
  // deeplink起動時の値を取得する方法
  intent.data?.let { -> uri
    // eg.GETのクエリを取る
    val param = it.getQueryParameter("query-key")
  }
}
```

# 本記事のメインディッシュ
## debugするためのコマンド
https://developer.android.com/training/app-links/deep-linking#testing-filters

上記より抜粋

```shell
# command
$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>

# e.g.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
```

これで実行中のappよりDeepLinkした時の動作確認が可能となる。
`http` でも `https` でもいけるしURLのQueryなども設定可能。
【3年後に後悔しないためのJavaScript勉強法】新卒入社からこれまでを振り返って今から勉強する人に伝えたいこと

私は**勉強の手順や方法を間違えたと今になって思います**。
会社に入った頃は何もかもが不安でとにかくガムシャラな状態でした。

ただ、振り返ると**もっとシンプルで良かったかもしれない**と考えています。
「新人は経験より基礎」をコンセプトにUdemyでオススメの講座を紹介します！

:::note alert
スキルアップは日々の積みが重要です。
紹介する動画は、初見で完璧に理解できる魔法の教材ではありません。
JavaScriptはそれほど奥深いですし、自分で「作る→動画を見る→作る」を繰り返すとことを前提とした教材の紹介です。
:::

## JavaScriptを勉強するなら絶対に見るべき3つの講座
JavaScript初心者から中級者までの道のりをStep方式で紹介します！

### Step1. JavaScriptの輪郭をとらえる
JavaScriptがどんな言語なのか？どのように使うことができるのかを具体的にイメージするために有効なのが下記の講座です。

https://www.udemy.com/share/106u543@mESIE5w1AALSMuuF7rnFA9524kf-gi-YSXmjGiO6LY6ohMhxB4UwCMpbVTXYqVc6/

本当に初めてJavaScriptを学ぶ方にとっては少しハードルが高いかもしれませんが、
**どんな時に利用するのか？具体的な例をもとに解説いただける**のでわかりやすい講座だと考えています。

:::note info
初学者の方は、詳細まで理解しようとしないで「そんなのがあるんだー」ぐらいの理解度で次へ進んでいけば良いと考えます！
:::

#### おすすめのポイント
- メソッドなど網羅性が高く、幅広い範囲をカバーしてくれている
- 具体的な事例を元に解説・説明されている
- 初学者でなくても勉強になる

### Step2. JavaScriptの細部を知る

「超JavaScript 完全パック 2022」JavaScriptの表層と理解を深めたら、JavaScriptの仕組みや内部的な処理、**なぜそうなるのかを詳しく解説している「【JS】ガチで学びたい人のためのJavaScriptメカニズム」で学ぶ**と良いです。

https://www.udemy.com/share/103dh43@0zrIvb22Yt7UMgpAP4Ul3bDLN9PrAjGNrP-HjY6KZ4FHXSslvI9FohOrYpB4eQ2R/

初学者の段階で閲覧することはオススメしません…。
**何を言っているのかわからず、だんだん眠くなってきます。**

野球でボールの投げ方すらわからないのに変化球を要求されるような感覚です。

:::note info
一度見て難しいな…と感じたらStep1の動画を見る。ちょうどいいと感じたなら見てしまうという方法でも良いです！
それならStep1を省略できるので勉強時間が短くなって良いです！
:::

#### おすすめのポイント
- これまで「そんなもんだ」という理解をなるほどに変えられる
- さまざまな記述における処理がなぜそうなるのか仕組みを知ることができる

### Step3 TypeScriptで型について学ぶ
JavaScriptじゃないの？と疑問に思うと思います。
TypeScriptはJavaScriptの拡張言語のため、JavaScriptの兄貴的な存在と言えます。

大きく違うのはTypeScriptが「静的型付け言語」だということです。
要は、JavaScriptでは自動で型をつけてくれるのに対して、TypeScriptは自分で型を定義できます。

:::note info
型というのはデータ型のことです。
真偽値（Boolean）、数値（Number）、文字列（String）などがあります。
※その他にもありますが割愛します。
:::

**型を自分でつけることを意識しながらコーディングできることによって、JavaScriptの理解度が上がります！**

https://www.udemy.com/share/102AoG3@QSVyYzth8G-B-V65xEaFe-j1Rk3L-F96GjIP0TsomvZS6EkH5fCUxwhRTMX7Wp8_/

良くも悪くもJavaScriptではあるメソッドの返り値がStringかNumberかを考えなくても問題ない場合が多いです。

ただ、**TypeScriptはメソッドの返り値がどんな型で返ってくるのかを嫌でも意識するので自然とメソッドの理解度を上げてくれます。**

#### おすすめのポイント
- TypeScriptへの理解が深まる
- 副次的にJavaScriptの理解も深まる

## Udemyで学ぶ時のオススメしたいこと
個人的にUdemyで学習する時にやっている学習方法を紹介します！
おそらく目新しいものではありませんが参考にしてください！

### 再生速度の調整
オススメな速度は1.2〜1.5倍です。
**初めて学ぶことなら1.2倍ぐらいが良いと思います。**

学び直し、復習に利用している場合は何を言っているか摘めればいいので2倍でも良いと思ってます。

:::note info
私は1.5~2倍をないようによって調整しています！
:::

講師の方によっても2倍だと早すぎる場合もありますので、一概には言えませんが1.5倍ぐらいであれば問題ないと思います。
学習時間を短縮していっぱい学びましょう！

### 端末にダウンロードして電車やバスで
外で見るとすぐに通信制限がかかってしまうと思います…。
Udemyは端末にダウンロードしておくことができるので、Wi-Fi環境でダウンロードしておいて好きな時に通信量を気にせず見ることができます！

先ほどの**再生速度を調整してみれば通勤30分の間に少なくても2〜3本の動画を見ることができるので1日6本は見ることができます！**

:::note info
紹介している講座だと大体20日〜1カ月ぐらいはかかるのですが、それでも1カ月でそれまでの自分と桁違いに知識量がアップすることを想像したらワクワクしませんか？
:::

ぜひ活用してみてください！


## まとめ
JavaScriptと2本とTypeScript1本の講座を紹介させてもらいました。
1つでも参考になったものがあれば幸いです！

しっかり時間をかけて学ぶのも良いですが、**時間は有限なのでいかに効率よく学べるかも1つのポイント**だと思います。

私ごとですが、子供ができてからぐっと勉強に使える自由な時間が減ってしまいました。
効率良く、最短ルートを探しなからスキルアップに励んでおります。

みなさんのスキルアップがより良いものになり、これからのエンジニアライフの糧にあることを切に願っております。
【BizRobo!】開発前に行って良かったなと思う事例（開発者目線）

# はじめに
みなさんこんにちは。
普段はRPA開発エンジニアとして活動しております。

今回は、BizRobo!の開発前に行って良かったと思う事例をご紹介します。
<font color="Red">※あくまで個人の意見です。参考にしていただければ幸いです。</font>

# 開発前に行って良かったこととは？
RPAの開発時に注意しておく点はたくさん存在します。
・業務削減時間
・業務手順の精査
などなど諸々ありますが、今回は開発者側の事例です。

本題のやっておいてよかったなと思う事例は、、、、、
<font color="Red">__BizRobo!の開発フォーマットを予め作成しておくことです！__</font>

# 開発フォーマットの作成とは？
ご存じの方もたくさんいらっしゃるかとは思いますが、
UiPathは __REFramework__ というものが存在します。

REFrameworkはUiPath社が独自に提供している、開発フォーマットみたいなものです。
筆者本人がUiPathで開発していた当初は英語だらけで、、、、、
読み解くのにかなり苦労しました。

そのような開発フォーマットがBizRobo!には存在しません。
なので、 __開発フォーマットを作成することをすごくおすすめします！！__
独自でそのようなフォーマットを作成されている方も中にはいらっしゃいます。

# どのような処理を組み込めばいいの？
どのロボットにも必ずと言っていいほど組み込んでいる処理は無いでしょうか？？
【例】
__・日付取得__
　→yyyyMMdd、yyyy/MM/dd、yyyy_MM_dd、前月日付、翌月日付
__・メール送信__
　→ロボット処理開始メール、ロボット処理完了メール、エラーメール（ログインエラーなど）
__・ファイルパス or フォルダパス取得__
　→インプットファイルフルパス取得、アウトプット先フォルダパス取得　　など

上記3点は比較的各ロボットに組み込んでいることが多いかなと思います。

なので、使用頻度が高い処理については予め組み込んでおくことをおすすめします。

もし開発フォーマットが完成したならば、
そのロボットファイルをコピーして使用していけば問題なく使えると思います。

逆にフォーマットの中に処理を組み込んだけど、今回のロボット開発では必要ないわ～などになれば、
その処理だけ消せばいい話なので、そこまで大きく影響はないかなと思います。

# さいごに
もしいいなと思っていただけたのであれば、ぜひ参考にしていただければ幸いです。
最後までご覧いただき誠にありがとうございました。
Amazon QuickSightがDatabricksをサポートしました！

これも長らくお待たせしました！です。

https://aws.amazon.com/about-aws/whats-new/2022/11/amazon-quicksight-supports-connectivity-databricks/

Databricksレイクハウスに格納されているデータを用いて、QuickSightによる可視化が可能となりました。

# Databricks側の設定

1. QuickSightから接続する[SQLウェアハウス](https://qiita.com/taka_yayoi/items/23d7789198c2dcd66381)を作成して起動します。
1. **接続の詳細**を開き、サーバーのホスト名、ポート、HTTPパスをコピーしておきます。
![Screen Shot 2022-11-22 at 8.57.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/42bb2ad3-0a51-bc9f-f0e3-33212d552973.png)
1. ユーザー設定にアクセスしてパーソナルアクセストークンを作成し、トークンをコピーしておきます。
![Screen Shot 2022-11-22 at 9.31.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/55a9f623-4f64-d0ec-d86a-15a317b8db24.png)

# QuickSight側の設定

1. データセットを追加します。Databricksが追加されています！
![Screen Shot 2022-11-22 at 8.54.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3b71b779-66d9-4d57-4139-63faba0215c6.png)
1. [上で作成](#databricks側の設定
)したSQLウェアハウスの接続の詳細情報をコピー&ペーストします。
![Screen Shot 2022-11-22 at 8.56.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d3388353-5ccb-45cd-a3d6-f2caa3dbf7ec.png)
1. ユーザー名は`token`、パスワードには[上で作成](#databricks側の設定
)したパーソナルアクセストークンを貼り付けます。
![Screen Shot 2022-11-22 at 8.59.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ae2e4ca0-2689-a2f6-1a6a-fd52633bd021.png)
1. 使用するカタログ・スキーマ(データベース)・テーブルを選択します。
![Screen Shot 2022-11-22 at 9.00.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3abd3144-24d2-9bf8-b61f-3fd2599799d5.png)
![Screen Shot 2022-11-22 at 9.22.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3e604281-8bdf-1134-ce81-e7939c46698b.png)
![Screen Shot 2022-11-22 at 9.22.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2f352af8-5925-d106-4ef8-7ce3b844a4ee.png)
1. これで、QuickSightからDatabricksのデータを使ってビジュアライズができるようになります！
![Screen Shot 2022-11-22 at 9.25.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f0421bc1-60b0-2d06-e12f-da68f4134efa.png)


### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
npmとコマンドについて

# npmとは
Node Packaged Managerの略字。
node.jsで作られたpakageを管理するツールのこと。
開発者はnpmを利用してnode.jsで作られたpackageをインストールすることができる。

# npm の利用方法
### npmのインストール
[node.js](https://nodejs.org/ja/)サイトにて簡単にインストールすることができる。

### packageのインストール
以下のコマンドでweb上のpackageをインストールすることができる。
```shell
npm install webpack
```

### package.jsonの生成
以下のコマンドをターミナルで入力するとpackage.jsonを生成することができる。
正確には、npmを使うための初期設定をするコマンド。
```shell
npm init
```
コマンドを入力すると、いろいろ聞かれるが、そのまま`enter`を押して進むと作成が完了する。

package.jsonについては、以下の記事をご参考に...
[npm i とnpm ci の違い](https://qiita.com/phoby20/items/0cce4bf81333fe7d4358)
[package.jsonの^ (キャレット) と~ (チルダ)の違い](https://qiita.com/phoby20/items/afa6c782dbc9cfefe3bf)

これでpackage.jsonを作成することができた。
```json:package.json
{
  "name": "application-study",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {
    "webpack": "2.2.1",
  },
  "scripts": {
    "build": "webpack --config webpack/webpack.config.js",
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/aaa/bbb.git"
  },
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/aaa/bbb/issues"
  },
  "homepage": "https://github.com/aaa/bbb#readme"
}
```
ここで注目するものが`script`と`dependencies`である。
`script`：これから出てくる`run`コマンドをもって実行させたいことを記録したもの
`dependencies`：インストールしたpackageを記録したもの

例えば、`webpack.config.js`を実行させるためには、以下のコマンドを利用する。
```shell
npm run build
```
# npmのコマンド
基本的には[公式ドキュメント](https://docs.npmjs.com/packages-and-modules)を参考にすればOK。
以下はよく使うコマンドを紹介する。

### package.jsonの生成
```shell
npm init
```
`npm init -y`を入力すると、すべての設定をデフォルトにしてセッティングをすることができる。

### packageをインストール
```shell
npm install package名
```
基本的にはローカルにインストールするが、`npm install -g package名`を入力すると、グローバルにインストールができる。
簡単に`npm i package名`を入力してもOK。
オプションとして`npm install --save package名`を入力すると`dependencies`に追加され、`npm install --save-dev package名`を入力すると`devDependencies`に追加される。

### packageの削除
```shell
npm uninstall package名
```

### packageのアップデート
```shell
npm update package名
```

### packageの検索
```shell
npm search package名
```

### packageの詳細確認
```shell
npm info package名
```

### ローカルpackageのインストール場所（node_modulesの場所）を確認
```shell
npm root
```

### scriptの実行
```shell
npm run script名
```
package.jsonの`script`のプロパティのうち、指定したscriptを実行する。

### npm内のcacheの確認
```shell
npm cache
```

### npm内のcacheの削除
```shell
npm cache clean --force
```

### npm内の重複されたmoduleを整理
```shell
npm dedupe
```

### npmのバージョン確認
```shell
npm -v
```
ヒストグラムを表示する(SPSS Modeler データ加工逆引き10-6)

# ヒストグラムを表示する（新グラフ）

![スクリーンショット 2022-11-15 10.45.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b1810377-e119-6b20-ddfe-f9d70ec3f31a.png)

## 1.想定される利用目的

・データの分布の確認
・ばらつきのあるグループの比較


## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/hist.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2022-11-15 10.49.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d5064def-b8de-9de5-aca2-5068ad28b5fc.png)

入力するデータを確認するため[テーブル]を実行します。
![スクリーンショット 2022-11-15 10.47.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/437b16a8-9e48-eff7-85eb-3856029709cd.png)

[ヒストグラム]ノードで従来のヒストグラムを表示します。
![スクリーンショット 2022-11-15 10.48.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d078d5a5-ecf8-f866-ca84-6fc40deeaa74.png)

[シミュレーション生成]ノードを右クリックして[データの表示]を選択します。
![スクリーンショット 2022-11-11 14.15.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/1ef9f2d0-77cb-20ba-4894-df147b7e4b05.png)

ヒストグラムを選択します。
![スクリーンショット 2022-11-15 10.50.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ecaf85ca-29bf-b80d-c090-a7d45cc81361.png)

以下の画面左の設定に従いセットします。

![スクリーンショット 2022-11-15 10.43.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/517c6747-10ee-fd2b-6710-42b49ea1b971.png)

![スクリーンショット 2022-11-15 10.44.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/620c76d4-84d2-938a-634a-56c64baa6810.png)

#### 注意事項

新グラフ機能はバージョン18.1以降で装備されました。

## 4.参考情報

#### 新グラフを解説した記事

https://www.ibm.com/blogs/solutions/jp-ja/learn-modeler-04/

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
TypeScript環境でChart.js v4を使いたい

# はじめに
業務中に学んだことをアウトプットするために簡単にまとめてみます。

# やりかた

公式サイトで最新バージョンを確認するとv4でした。
前のバージョンとimportの書き方などが異なるようなので他サイトの記事を参考にする際は気を付けた方が良いです。

https://www.chartjs.org/docs/latest/

## 導入

公式サイトではnpm install chart.jsと記載されています

https://www.chartjs.org/docs/latest/getting-started/installation.html

Reactで使用したいので今回はreact-chartjs-2が必要なのと、yarnで導入するので以下を実行します
```
yarn add -D chart.js react-chartjs-2
```

## 実行サンプル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2889192/1795b286-4796-f70e-360e-7890c2310717.png)


以下のWeight.tsxをApp.tsxで呼び出します
```Weight.tsx
import React from "react";
import { Line } from "react-chartjs-2";
import {
  Chart as ChartJS,
  CategoryScale,
  LinearScale,
  PointElement,
  LineElement,
  Title,
  Tooltip,
  Legend,
} from "chart.js";

ChartJS.register(
  CategoryScale,
  LinearScale,
  PointElement,
  LineElement,
  Title,
  Tooltip,
  Legend
);
const Scale = {
  y: {
    min: 0,
    max: 100,
    title: {
      display: true,
      text: "weight",
      color: "#FF4500",
      rotate: "vertical",
      font: {
        size: 20,
      },
    },
    ticks: {
      stepSize: 10,
    },
  },
  x: {
    title: {
      display: true,
      text: "month",
      color: "rgb(255,69,0)",
      font: {
        size: 20,
      },
    },
  },
};

export const options = {
  responsive: true,
  plugins: {
    legend: {
      position: "top" as const,
    },
    title: {
      display: true,
      text: "graph",
    },
  },
  scales: Scale,
};

const labels = ["January", "February", "March"];
const data = {
  labels,
  datasets: [
    {
      label: "Aさん",
      data: [55, 50, 60],
      borderColor: "rgb(255, 99, 132)",
      backgroundColor: "yellow",
    },
  ],
};

export const Weight = () => {
  return <Line options={options} data={data} />;
};

```

# おわりに
グラフ描画系ができるようになると分析系のシステム開発に利用できるのでこれからも学んでいきたいです。
mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e)) の解決策

## 実行環境
- M1 mac
- Rails 7.0.4
- ruby 3.1.0 

## エラー内容

`rails s`を実行しようとすると次のようなエラーが出てきた。

```bash
$ rails s
/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require': dlopen(/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/ffi-1.15.5/lib/ffi_c.bundle, 0x0009): tried: '/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/ffi-1.15.5/lib/ffi_c.bundle' (mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))) - /Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/ffi-1.15.5/lib/ffi_c.bundle (LoadError)
```

エラー内容から、ffiの実行ファイルがx86_64で生成されてしまっているが、本当はarm64eで生成されなければならないというのが原因だとわかった。

## 解決方法
以下のコマンドを実行する
```
sudo arch -arm64e gem install ffi
```

再度`rails s`を実行すると無事にローカルサーバーが立ち上がった。


## 参考

https://stackoverflow.com/questions/66644365/cocoapods-on-m1-apple-silicon-fails-with-ffi-wrong-architecture
Adventurer3という3Dプリンタについて語る

# Adventurer3について

* FLASHFORGE社製の3Dプリンタで、私が４年ほど愛用している3Dプリンタである。
* 構造がシンプルでメンテナンス性も高くまだまだ現役。

<img width="600" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/949ae03d-9524-5d33-0675-6dcac1072812.jpeg>

## Adventuter3のスペックと特徴

スペック表から一部抜粋
 <table>
    <tr>
      <td>造形サイズ</td>
      <td>150mm×150mm×150mm</td>
    </tr>
    <tr>
      <td>ノズル温度</td>
      <td>240℃</td>
    </tr>
      <td>ステージ温度</td>
      <td>100℃</td>
    </tr>
 </table>

#### いいところ
* 造形サイズが小さい分コンパクト
Adventurer3は現在FLASHFORGEのオンラインストアで税込47,850円で購入可能である。
この価格帯で他のメーカーの3Dプリンタと比較すると造形サイズは小さい方であるが、個人的には十分な造形サイズ。
追記：12月1日、FLASHFORGEの日本代理店であるAPPLETLEEより3Dプリンタの価格改定が発表され、Adventurer3の価格が1月5日から税込49,500円となる。

* ノズルとステージの最高到達温度がそれぞれ240℃、100℃であるため、ABSのプリントが可能。
265℃のノズルがオンラインストアで販売されており、交換すればPCのプリントが可能になる。（ほしい）

* エンクロージャと呼ばれる筐体で造形部分が囲まれているため、プリント安定性が高い。
ノズルなど造形部分がむき出しではないため、間違って触れてしまうリスクの防止や、内部が保温されるためABSなどの反りやすいフィラメントでもプリントしやすい。

* インターネット経由でプリントが可能！（__重要__）
他のメーカーのこの価格帯の3DプリンタはプリントするためのデータをSDカードを利用してデータを送るが、
Adventurer3はネットワーク経由でデータを送ることができるため、非常に楽。また、家の外からプリント
や、筐体内部に設置されているカメラからプリントの様子を確認することができる。

* その他いいところ
　動作音が割と静か、日本語対応、サポートが充実している

#### よくないところ
* フィラメントを取り付けるリール部分に500gの純正フィラメントしか取り付けられない。
私は他社製の1kgのフィラメントを利用するために、リールを取り付ける部分に拡張部品をプリンタで製作し、取り付けている。
ちなみに、Adventurer3の後継機であるAdventurer4では他社製のフィラメントが取り付けられる設計になっている。

## いいたいこと
家庭向け3Dプリンターメーカーはいくつかあるが、FLASHFORGEの3Dプリンターは日本語のサポートが充実している点や、扱いやすさ、プリントの安定性という点が優れていると感じとてもお勧めできる。

年明けには値段が2000円ほど上がってしまうので買うなら今年中。
自分や大切な人へのクリスマスプレゼントでAdventurer3をプレゼントしてみてはいかがだろうか？
Adventurer3をもらって喜ばない人はいないだろう。

#### 参考

https://flashforge.jp/product/adventurer3/

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【価格改定のお知らせ】 <a href="https://t.co/wgMosC9oH2">pic.twitter.com/wgMosC9oH2</a></p>&mdash; FLASHFORGE JAPAN【3Dプリンター】 (@flashforge_jp) <a href="https://twitter.com/flashforge_jp/status/1598119694015160321?ref_src=twsrc%5Etfw">December 1, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
モブプログラミングでチームを変える -モブプロ開発を行っているチームでやっている取り組み-

# はじめに

本記事は[モブプロ開発を行っているチームでやっている取り組み Advent Calendar 2022](https://qiita.com/advent-calendar/2022/mob_torikumi_example)の10日目の記事です

今回はついにタイトルにもある通り「モブプログラミング」で実際にどのようなことをやっているのか紹介していきます。
私たちは半年ほどモブプログラミングですべての開発を行っており、多くの学びを得ることができました。
本記事ではそこまで詳しく説明をしていませんので、詳しく知りたい方は以下の記事を確認ください

https://qiita.com/Sicut_study/items/f3c0869df9490b0d992d

# 前回

https://qiita.com/Sicut_study/items/3a6f54f9620285d14044

# Chapter#9 チームの希望！モブプログラミング

アール「このチームの皆さんは私よりも断然開発経験があって私だけ置いて行かれないか心配です」
ミュート「いやー、でも今回の開発はまったくみたことのないレイヤーで実装されているから俺もよくわからんよ」
ベープ「大丈夫っす！俺はRailsまったくわからんので」

そう、今私たちはこのチームが結成された目的である外部委託していたプロダクトの開発引継ぎを行っていた

じん「まぁ全員不安もあると思いますし、全員がまったくわからない状況でそれぞれで学習を進めるのは効率が悪いので今日からこのチームでは**モブプログラミング**を導入したいと思います」

一同「モブプログラミング？？」

じん「そうです！通称モブプロといいます。簡単に言うと全員で同じタスクをこなすという実装方法になります。まずはモブプロがどういうものなのか。そしてどんなメリットやデメリットがあるのか1時間程度の勉強会をしましょう」

そして、じんは[とあるスライド](https://qiita.com/Sicut_study/items/33f94bafcb738ecf44ae)を画面共有する

じん「この記事はモブプログラミングベストプラクティスという本をまとめた個人メモになりますので、これをみながら一気に説明していきます」

# モブプログラミングについて

モブプログラミングは全員で同じ開発画面を利用して1つの作業をする開発方式です
参加者の中から1人タイピストを選んで、それ以外の人でタイピストに実装の指示をだします
10分したら次の人にタイピストを交代します

簡単に説明するとこのようなものをモブプログラミングといいます

ではなぜこのチームでモブプログラミングを導入したのか説明します
- 開発能力がメンバーでばらばらだった
- 全員がまったく知らないコードを読まなければならない
- 慣れない形式(レイヤー)で実装されていた

この辺りが大きな理由となります。

開発能力がばらばらだったについては、チームには開発歴1年未満の方もいたため到底同じレベルで実装することが不可能だと予想されました。
その人を放置していしまうと進捗が把握できなかったり、その作業が遅れたり、心理的にも負担になり他の人に聞きすぎでしまうことから聞くことをためらう心配がありました

全員が知らないコード、慣れない形式に関しては、私一人で仮に理解して実装したときに、同じ説明を個別に全員にする可能性が高くコストがかかる可能性があると感じました

実際にモブプログラミングをやることで

- 全員が全部のコードを理解している(技術負債なし)
- テストコードの粒度の統一化
- 開発能力が同じレベルに近づいた
- チームとして絆が深まった

など良い効果が多くありました。

しかし、全員が同じレベルだとしたときに4人それぞれで開発する効率に比べるとやはり劣る部分もあります

次回以降の記事でその対策を2点紹介します

モブプログラミングについてはかなり力を入れて取り組んでおり、既に記事として作成しているのでここまでの話を聞いて興味が出た方はよければ以下の記事を確認ください

https://qiita.com/Sicut_study/items/f3c0869df9490b0d992d

# 次回

https://qiita.com/Sicut_study/items/86f431b99b09696a5f27

# おわりに

今回は別の記事に詳しいものを用意していたので簡単な概要と記事の紹介をしました
モブプログラミングには大きな可能性があり、タイミングよく導入することで大きな効果があると思っています
まずは体験からやってみて、終わったら振り返りをしてみてチームに導入できるか検討してみてはどうでしょうか
【HTML】中一がリアルタイムでブログを作るまで #1

こんにちは。ユウフと申します。

最近、色々あってプログラミングに興味を持ちました。
そこで、HTMLやCSSなるものを使いブログを作って公開するところまでを記していこうと思います。

今後ともよろしくお願いします！

P.S. エディタはVisual Studio Codeを使います。
Pythonの仮引数の扱いの注意点を可視化してみた

# Pythonの仮引数の扱いの注意点
注意すべきは、仮引数のデフォルト値として、リストなどを指定した時だ。
定義する関数内でその変数に書き込みをすると、2度目以降にその影響が残る。

この動作を理解するポイントは、def文による関数定義は、perlの関数定義のような宣言文ではなく、pythonでは実行文だということだ。
実行文であるゆえに、デフォルト値の生成は、def文の実行時に行われる。関数呼び出し時にデフォルト値が生成されるわけではない。

# ロジックを可視化したもの
Python Tutor code visializerで、このロジックを示す例を可視化した。
それを見るには、下記リンクをクリックして欲しい。

https://pythontutor.com/render.html#code=def%20func%28a,b%3D%5B1%5D%29%3A%0A%20%20%20%20c%20%3D%20a%2Bb%5B0%5D%0A%20%20%20%20b%5B0%5D%3D3%0A%20%20%20%20return%20c%0A%0Afunc%281%29%0Afunc%281,%5B2,3%5D%29%0Afunc%281%29&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false

例にしたコードは、下記のとおり。
```python
def func(a,b=[1]):
    c = a+b[0]
    b[0]=3
    return c

func(1)
func(1,[2,3])
func(1)
```

これを可視化したもので順に実行すると、以下が分かる。
* Step 2の段階では、変数bのデフォルト値のリストが生成済みである
* Step 3の関数呼び出し時には、変数bはその生成済みのリストを指す
* Step 6でそのリストの中身を修正している
* Step 9の関数呼び出し時は、変数bの値を引数で渡しているゆえ、変数bは別のリストを指す
* Step 15の関数呼び出し時は、Step 6で修正したリストを変数bは指すので、返り値が1回目の呼び出しと異なるという状態につながる
MagicPodのここが好き

# 概要
MagicPodの画面は、左側にテストステップ記述UI、右側にブラウザという構成で、特に、稼働中のブラウザと、その画面から要素抽出した画面とを、タブで切替えながらテストステップを作成できるという、かつて、Seleniumを使って、Chromeのデベロッパーツールから要素抽出しながらテストコードを書いていた筆者にとっては、すごい時代になったものだと、つくづく思うのですが、それだけでも十分お薦めのMagicPodには、他にも今回紹介したような気に入った機能がいくつかあります。

# お気に入り、その1：部分実行
React等が使われている画面の自動テストを、例えばマウス・ホバーで出現するような要素を指定しようとすると、Chromeデベロッパーツールでは、難しいです。ホバー状態で、要素を調べるというのが、まず無理な話で、MagicPodだと部分実行してマウスホバー状態のブラウザからキャプチャして要素取得するということができます。
# お気に入り、その2：ブラウザへの再接続で、直近に起動済みのブラウザに接続
テストステップ編集作業をしていると、クラウドで起動中のブラウザ画面から離れてしまうことが多いのですが、再び、編集作業に戻った時、短い中断時間ならば、さっき使っていたブラウザを呼び戻してくれます。再ログインとかしなくても作業継続できて便利です。
# お気に入り、その3：テストケースのラベル
動作確認済み / 仕掛かり中 / 要修正 / 非現用
のラベル定義してテストケースに貼っています。特に、スケジュール実行に移す時、どのテストケースなら動作確認済みでスケジュールに入れていいか判るようにしています。
# お気に入り、その4：共有ステップにマウスオーバーで、共有ステップの説明が表示される
共有ステップ名から判るように工夫したいところですが、テストステップ編集作業中に、共有ステップの説明がエディタにマウスオーバーすると表示されるのは助かります。
# お気に入り、その5：ブラウザのバージョンとWebDriverの更新作業が不要
ローカル環境だと、久しぶりに動かそうとして、まずDriverの更新から着手しないと進まなくて、心が折れそうになったことがありますが、MagicPod社の人たちが、やってくれているのでしょう。
そういうのは、気にしなくてテストに専念できます。
# お気に入り、その6：コメントステップ
必要に応じて、テストステップにコメントステップを入れることができます。
可読性を少しでも高めるために、コメント入れるのをお薦めします。
とても簡単に自動テストを構築できてしまう反面、テストステップの可読性が悪いと、維持がつらくなるのを避けたいものです。
# お気に入り、その7：クラウド実行なので、ローカルPCは他の作業に使える
SaaSなので、当たり前だし、MagicPodに限ったことではないのですが、ローカル実行だとPCが自動テストに占有されてしまい、issueの確認作業やチームのメンバーから頼まれた仕事をすることができません。
もう1台作業環境を用意することも可能ですが、たまに、Sleepモードに入ってしまい、覚醒させた時点から再実行など、とかく、面倒な世話をする必要もあり、クラウドで自動テストが実行されるのは、とてもありがたいです。
# 総括
MagicPodでは、今回紹介した機能以外にも、操作のカテゴリーでは、大抵の操作はカバーされていて、検証で使うものも、確認のカテゴリーでカバーされていました。
さらに、MagicPodの[gitHub](https://github.com/Magic-Pod/japanese-issue-and-doc/blob/master/UPCOMING_FEATURES.md)を見てみると、今後の実装予定にも期待したいと思います。
SaaSで自動テストが簡単に利用できる恩恵はテスト担当者にとっては大きいと思います。
その分、テスト担当者は、プロジェクトにおけるテストの本質的な意義や役割について考察し、有効な品質保証活動について、その役目を果たしていけているかが問われていくのだと思います。
【ショートコーディング】Pythonの三項演算子の周辺

# Pythonの三項演算子の代用について

今回は、Pythonでのショートコーディングで三項演算子に相当する処理をどう書くと短く書けるのかを考えていきます。

## Pythonの三項演算子

```Python
z = x if b else y
```

## 三項演算子の例

```Python
z = x if n==10 else y
```

# 三項演算子なしで書く

Pythonではbool型はTruthy(True相当)の時に1、Falsy(False相当)で0として扱われるので、次のように書いたほうが短くてわかりやすいと思います。

```Python
z = [y,x][n==10]
```

そう考えるとPythonの前述のようにif elseで書く形は長ったらしいし、見づらいし、あまり嬉しくない文法であるように思います。

# list構築時の副作用

しかし、listは構築時に評価(実行)されるため、次のようにx,yが関数である場合は、意図通りになりません。

```Python
z = [x(1),y(2)][n==10]
```

```Python
def x(i):
  print("関数 x が呼び出されました")
  return i*2

def y(i):
  print("関数 y が呼び出されました")
  return i*3

n=10
z = [x(1),y(2)][n==10]
```

## 実行結果
```
関数 x が呼び出されました
関数 y が呼び出されました
```

# 三項演算子は副作用がない

「じゃあ、やっぱり三項演算子で書いたほうがいいじゃん!!」と言われるかも知れません。三項演算子ならば、このような副作用はないですからね。

```Python
z = y(2) if n==10 else x(1)
```

# 副作用がある式はショートカット演算子で書こう

そこで皆んな大好き(?)ショートカット演算子の出番です。

ショートカット演算子についてご存知ない方は、こちらの記事をどうぞ。

論理演算子(&&, ||)の短絡評価
https://qiita.com/gyu-don/items/a0aed0f94b8b35c43290

ショートカット演算子を用いると、b and x or yのように書けます。
```Python
# bはbool型の変数であるか、具体的な条件式であるものとする。
z = b and x or y
```

この式は、bがTrueの時にxが評価され、bがFalseの時にyが評価されます。さきほどの三項演算子とほぼ同じ意味となります。

```Python
z = x if b else y
```

また嬉しいことに、bがTruthyの時には、xだけが評価され、yが評価されません。逆にbがFalsyの時にはyだけが評価されxは評価されません。三項演算子(if else)で書くより短く書けるので、ショートコーディングにおいては強い味方です。

ところが、bがTruthyでxがFalsyである場合、yも評価されてしまいます。

```Python
b=True
b and print("X") or print("Y")
```

## 実行結果
```
X
Y
```
なぜこのようになるかと言うと、print()は返し値を持たない関数で、すなわちNoneを返しているとみなせて、NoneはFalsyだから、or側のprint()も評価されてしまうわけですね。

# XがFalsyになる場合のb and X or Y

XがFalsyになることがないなら単にb and X or Yと書けるのですが、そうでない場合は、もうひと工夫必要です。

Pythonでは空ではないシーケンスはTruthyであることを利用すると次のように書けます。

```Python
b=True
b and[print("X")]or print("Y") # Xだけが表示される
```
いい感じのアイデアで、このテクニックはショートコーディングで重宝しそうです。

# 左辺で変数に値を受け取る形のb and X or Y

次のようになるのですが、このままですと、bがTruthyの時にx(1)の返し値がlistに入ってやってきて困ります。

```Python
z = b and[x(1)]or y(2)
```

そこで、次のようにunpackを使ってlist剥がしを行うのがお勧めです。

```Python
z,*_ = b and[x(1)]or[y(2)]
```

unpackについて慣れていない方は、以下の記事を御覧ください。

Python の * 演算子 (iterable unpacking operator) の使い方
https://qiita.com/eumesy/items/dda85b70d28da61663cb

でも、上のようにするぐらいなら普通に三項演算子使ったほうが短いですね。

```Python
z =x(1)if b else y(2)
```

# ショートカット演算子はifの代用になるか？

ショートコーディング的な観点で、ショートカット演算子が三項演算子(if else)の代用となりそうなところまでは見えてきましたが、普通のifの代用になるかは、色々難しい問題があります。

その一つが代入操作です。

# 代入を伴うb and X or Y

```Python
if b:x=1
else:y=2
```
上記のコードと同等のことをand orでやりたいとします。これはセイウチ演算子( := )を用いると可能です。

```Python
b and(x:=1)or(y:=2)
```

ところが、セイウチ演算子は、配列の添字つきの式に対しては使えないため次のようなものは不可能です。(今後のPythonでは改善される可能性もありますが、現時点で最新のPython 3.11においては出来ません。)

```Python
b and(x[0]:=1)or(y:=2)
```

# 添字つきの式へexecによる代入

そこで出てくるのがexec()です。これは文字列をPythonのプログラムとみなして実行してくれる大変ありがたい関数です。

```Python
b and exec("x[0]=1")or(y:=2)
```

しかし、exec()は返し値を持たないため、さきほどと同じ問題が生じます。そこでさきほど出てきたテクニックを用います。

```Python
b and[exec("x[0]=1")]or(y:=2)
```

これでかなりand or構文で出来ることの幅が広がりました。ifで書いた方が短いことも多々ありますが、面白いテクニックだと思うので紹介してみました。

# まとめ

このb and[X]or Yの形は、私が発見したものです。(AtCoderで1000問程度のPythonのshortestの提出を見た限りはこのテクニックを使っている人はいなかったので)

良かったら(ショートコーディングに)活用してみてくださいね。

今後、ここでPythonでのショートコーディングのテクニックを網羅的かつ体系的に書いていこうと思いますので、良かったらフォローしてください。
はやとちりでごめんなさい。今日、ブロックを解除させていただきました。

いろいろfollowしてくださる方の挙動で、不振な点がある場合に、何人かブロックさせていただきました。　

その後、単に不振な挙動の方と似た挙動なだけで、ちゃんと投稿されたり、いいねされたりしていました。　

今日、ブロックを解除させていただきました。　早とちりでごめんなさい。　

きっと、はやとちりで、通報されたりする方もおみえだろうなということが推測できました。　

人間の挙動は、何かを真似るところから始まることがあり、たまたま真似た行動が、挙動不審な方と似た行動だったということはしばしばあるような気がしています。　

経験値としては１割から２割くらい。　

いいねをしてくだされば、followのボタンが表れず、失礼ながら間違えてブロックしてしまったことが分かるようです。　ブロックしているからいいねができないという仕様ではないような気がします。　

詳細は、順番を確かめる方法がなくわかっていません。ごめんなさい。　

もし、上記のような仕様であれば、うまく回避できそうなので、少し安心しました。　

31人followするという行動を取られた方が多かったので、あわてて２０人くらいブロックさせていただいた方のうちのお一人だと思います。はやとちりでごめんなさい。

# 参考資料　

出没する挙動不振なfollowerたち

https://qiita.com/kaizen_nagoya/items/cd982abe913398603c56

こんなにfollow順番が似てるのってどういう現象＝偽識別子

https://qiita.com/kaizen_nagoya/items/ea0de85a2e5fbcbdd06e

ブロックさせていただきました。followを取り消させていただきました。

https://qiita.com/kaizen_nagoya/items/a1bfb426cfed1b534dfe

ブロックさせていただきました。followを取り消させていただきました(2)

https://qiita.com/kaizen_nagoya/items/51363c3e3e6d4396a067

偽識別子(fake ID)と呼んでもいいですか

https://qiita.com/kaizen_nagoya/items/ad466661c9985457cb70

直近のfollowerの行動記録

https://qiita.com/kaizen_nagoya/items/124277ebfcd3712efa66

いいね(lgtm)せずにfollowする人の行動を分類

https://qiita.com/kaizen_nagoya/items/1496dac5a85d10b461d9

プログラマが違和感を感じたときにするとよいこと。仮説（148）

https://qiita.com/kaizen_nagoya/items/f32ae742655621b309fb


空気読まない・空気読みたくない・空気読むの？・空気読めない・空気読もうとも思わない。仮説(75)

https://qiita.com/kaizen_nagoya/items/8cb7a81950ed23737e79

人間が計算機に勝てる３つのこと。忘れる、あきらめる、やめる

https://qiita.com/kaizen_nagoya/items/49dc709d289d22846044

SNSでの戦略転換

https://qiita.com/kaizen_nagoya/items/c4df4eba0cced3b07e53
Google UXデザイン：デザインにおける暗黙（バイアス）の偏見

# はじめに

わたしが[Google UX Design Crtificateで得られた素晴らしい体験][google]を、特に重要だと思われるポイントを小さく分割して、わかりやすく簡潔に紹介していきます。

興味があれば、ぜひ Google UX Design Certificateを受講してみてください。

[google]: https://qiita.com/mapami/items/7a0d0a3d4661c50f8bec

https://www.coursera.org/professional-certificates/google-ux-design

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/1ed400d1-bbdf-302d-70be-3175620c3912.png" width="800">

<details><summary>これまでの振り返り</summary>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/3e4df6fa-6d4c-9c75-df02-7b3aacaa87c3.jpeg" width="500">

</details>

# バイアスを認識する

誰もが個人的なバイアスに影響されます。UXリサーチにバイアスが入り込むと、ユーザーの真のペインポイントに対処できない製品のデザインを作成してしまう恐れがあります。ですから、自分自身の視点がどのようにデザインを変え、ユーザーに影響を与え、社会に影響を与えるかを意識する必要があります。

デザイナーに影響を与える最も一般的なバイアスの1つは ***<font color="MediumVioletRed">『暗黙の偏見』</font>*** です。暗黙の偏見とは、<font color="MediumVioletRed">私たちが意識せずに人と結びつけている態度や固定観念の集合体</font>です。ポジティブなものであれネガティブなものであれ、これらのバイアスは無意識のうちに真実であると勘違いしてしまうことがあります。暗黙の偏見は、偏見の主体である人々に有害な影響を与える可能性があります。


### サンプル①

例えば、あるレストランのマネージャーが新しい従業員を雇おうとしているとしよう。マネージャーには二人の応募者がいます。一人は22歳のレストラン未経験者。もう一人は、飲食業界で30年以上の経験を持つ53歳の男性です。もし、レストランのマネージャーが、50歳以上の人は若い人に比べて圧倒されやすい、あるいは動きが鈍いという暗黙の偏見を持っていたら、応募者の経験を検討することなく、年上の応募者を見過ごしてしまうかもしれません。これは、年配の応募者に対する暗黙の偏見です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/05af59b3-5cd2-9dcb-e51c-c355892bcf78.png" width="600">

### サンプル②

例えば、あなたがニューヨークの地図アプリケーションをデザインしているとします。このアプリは、歩道や緑地帯を通るルートを表示します。つまり、ユーザーが徒歩で移動することを前提に作られているため、暗黙のバイアスが働いています。しかし、多くのニューヨーカーが徒歩で通勤している一方で、何百万人ものニューヨーカーが地下鉄やバス、タクシー、車、自転車などを利用しています。さらに言えば、多くの人は歩けないのです。

つまり、ニューヨーカーはみんな歩いているという暗黙のバイアスは、制約要因としての能力を無視することになります。公共交通機関を利用している人は、最寄りの地下鉄やバスの停留所への道案内が必要ですし、車いすの人は地下鉄の駅にアクセスできないかもしれません。この場合、ニューヨーカーに対するバイアスが、すべてのユーザーのために真に役立つ製品を作ることを妨げているのです。


# バイアスを取り除く

暗黙の偏見は、ペルソナとユーザージャーニーマップを作成し、それに従うことが非常に重要です。
- ペルソナとは、より多くのユーザーのニーズを反映した目標や特性を持つ、架空のユーザーのことです。
    - ペルソナを作成する際、UXデザイナーは可能な限り包括的であることが必要です。特定の民族、性別、年齢、能力、社会経済的なグループがオーディエンスに含まれる、あるいは含まれないと決めつけてはいけないのです。
- ユーザージャーニーは、ユーザが製品にたどり着くまでの道筋、つまり、ユーザのニーズは何か、製品がどのようにそのニーズを解決できるかを表します。

<font color="MediumVioletRed">ユーザーリサーチは、ユーザーが誰であるかについての推測を避ける</font>のに役立ちます。

### サンプル③

例えば、育児用品を購入する親を支援するアプリを設計しているとします。最初の画面に「ようこそお母さん、私たちはあなたの小さなお子さんにぴったりのベビーシッターを見つけるお手伝いをします」というメッセージを表示します。これは、ユーザーを「お母さん」と呼ぶことで、人間味あふれる体験ができると考えたのでしょう。しかし、このメッセージには問題があります。祖父母、保護者、父親など、他のあらゆるタイプの介護者を即座に排除してしまうのです。

このような暗黙のバイアスは、重要なユーザーを排除することになり、ビジネスにとって好ましくないことです。また、育児は母親がするもの」という固定観念を助長し、「すべての子どもには母親がいる」という前提で話を進めてしまいます。暗黙の偏見に気づき、ステレオタイプに対抗することは重要な仕事です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/24e4c566-372c-9d19-9c2e-a7834e794b4d.png" width="600">
自己紹介【未経験web系エンジニアを目指す切っ掛け・応援してくれると嬉しいです】

　初めまして、TaskAraiと申します。はじめに、良かったら良いUdemyの講座を教えてください！セール中に買うかもしれませんので！すでに、14本買ってます（笑）

<h4>　僕は、2023年4月から、web系企業で働くことになった「未経験web系エンジニア」です。</h4><br>
　まだ、エンジニアを名乗れることはありませんが、他に名称が分かりませんでした（笑）
<br>
<br>
　芝浦工業大学で、6年間生命科学系を学んでおりましたが、とある切っ掛けで「web系エンジニア」を目指すこととなりました。
<br>
<br>
　最初に結論から話すと、僕が修士課程において、ハラスメントが原因で精神疾患になりました。その結果、在宅ワークに憧れて、「web系エンジニア」を目指そうと決めました。
<br>
<br>
　研究室では、日本語が通じないが英語も通じない中国人後輩、大まかに指示しても細かく指示しても異なる作業を実行してトラブルを引き起こす日本人後輩、降りかかるtaskやトラブルシューティング、週で3時間しか寝れない時期などがありました。
<br>
<br>
　最終的には話していたことの3分前のことが思い出せなくなったり、毎日していた3桁の暗算が出来なくなったり、日本語をうまく話せなくなったり、一日16時間寝るしか出来なくなったり、家から出ることが出来なくなったりしました。
<br>
<br>
　元々は、メーカーのプライム企業（昔で言う東証一部上場企業のようなものです）の内定を頂いており、人事の反応から、開発部にも行けそうな雰囲気を感じておりましたが、3月末にパニック発作が悪化したため内定をやむなく辞退しました。
<br>
<br>
　そんなこんなで、自宅療養となり、精神科でついた診断は「気分障害（双極性障害疑い）」と言うものでした。双極性障害とは、およそ100人に1～2人がなる病気であり、精神が異常に昂ったり、うつ状態になる病気のことです（躁鬱状態と呼ぶことがあります）。5月までは、その症状よりも、パニック発作と不安症状により家から出ることすらできないことが問題でした。
<br>
<br>
　6月ぐらいになると、パニック発作が収まり、不安症状も薬で抑えられて、散歩に出掛けられるようになりました。7-8月になると、パニック発作が収まった影響か、躁鬱状態が強く発現するようになりました。その結果、精神が異常に昂り、10万円ほどの詐欺に会いました。このことから、お金が必要になり、9月末からバイトをするようになりました。また、9月10月は躁鬱状態の軽躁が強くなり、異常に精神が昂った結果、マッチングアプリに10万円を課金するという恐ろしい行動を取りました。病気の所為ですが、お金が足らないことに間違いはありません。
<br>
<br>
　さて、お金が無くなった僕ですが、良いこともありました。それは、新しい薬に変わって、不安症状も軽くなり、普通にバイトは出来るし、知的行動も出来るようになったことです。元々は、部活で英語ディベートをして遊んでましたし、競技者としてではなく、審査員としてですが、国際大会の本選に出たこともあります。このような背景から、大学で学んだ生命科学系を捨てて、異業種でも学んで在宅ワークをしたいと考えるようになりました（生命科学系は特殊な環境でないといけないので、在宅ワークに向いていません）。
<br>
<br>
　親戚に、情報系出身者でweb系エンジニアとして在宅ワークをしている方を知っていたため、未経験でも受け入れてくれる会社様が無いかと探しました。その結果、10月にも関わらず条件にあう数社が採用活動を継続していました（僕は既卒という扱いで、一部の会社では新卒採用枠に応募できました）。
<br>
<br>
　3社受けた結果、プライム市場に上場している会社様から無事内定を頂くことが出来ました。後から知ったのですが、未経験web系エンジニアでも通常はポートフォリオを持って行くのがマナーな様子で、何も持たない僕をよく受け入れて下さったな、という感想があります。それだけ、人困っているのか、企業研修でどうにかできるという自信の表れなのか、僕にはまだ分かりません（笑）
<br>
<br>
　さて、そんなこんなで、「web系エンジニア」になることが決定したTaskAraiですが、プログラミングはおろかITに関しても全くの素人、何も分かりません。
<br>
<br>
　現在では、基本情報技術者試験の勉強に挫折してITパスポートから学ぶことにし、ProgateでHTML、CSS、JavaScript、Rubyに触れ、Udemyなどの動画教材でDockerやLinuxなどに触れながら、プログラミングや周辺の環境の難しさに怯えています（笑）
<br>
<br>
　正直言って、「分からないことが分からない」状態なので、初心者の内はこれやっておいた方が良いよ～とか、この教材おすすめだよ～とか教えてくださると幸いです。今後、Qiitaは、僕個人の備忘録として利用しようと思っています。大変申し訳ないのですが、良かったら温かい目で見守ってくださると嬉しいです（笑）
<br>
<br>
　下に、僕が今買っているUdemyの講座を貼り付けます。この他に良いものがあったら、教えてください。毎日、6時間以上掛けて、ゆっくりと消化していくつもりです。
<br>
<br>
　まだ企業の配属は決定してませんが、キャリアが広がると言われているバックエンドエンジニアになれたらなぁ…という考えを持っています。また、ITパスポートを取得したら、応用情報技術者まで取得したいと思っているほか、HTML5およびAWS、PHPは、一番簡単な資格で良いので取得したいなぁ…と考えております。
<br>
<br>
<br>
【購入したUdemy教材】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984231/3155a28a-4d97-4a92-0473-baba17cf9037.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984231/00224fde-af09-4478-76a8-72c3635245ee.png)
保存版：マネージメント極意！

![スクリーンショット 2022-11-20 14.49.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/2dfc4b96-5832-e8c8-6e00-d2fa6ff44a8b.png)
日曜日の朝、ワイドナショーを見てました。今週は、まっちゃん不在少し寂しい感じでした。
その中で出た話。

話の流れは、糖尿簿を別の名前にするという話から、

# 色んなポジティブ変換
・シルバーシート　-> 優先席
そういえば、最近、優先席としか書いてないからあまり気にしてませんでしたが、確かにシルバーシートは違和感あります。
・仮想通貨 -> 暗号通貨
これは、昔から思ってましたし、最近、TVでも暗号通貨となってるなぁと思ってました。ただ、これってそもそも暗号通貨であって仮想通貨自体がおかしな言葉で違和感ありました。
・自殺点 ->　オウンゴール
ワールドカップの選手でオウンゴールがきっかけで射殺された人がいたとか。怖いですね。
・ロスタイム -> アディショナルタイム
ロスでなく、新たにチャンスとなるアディショナルタイムという解釈との事。これは素晴らしいですね。
・シンクロナイズドスイミング -> アーティスティックスイミング
これ、オリンピックで目にしてましたがシンクロ：同期って言葉が競技とは違って、アーティスティック：芸術が正しいとの事でした。

# ポジティブ変換って素晴らしい
言霊と言われるくらい言葉による響きで未来が変わってきます。マネージメント側面でもポジティブ変換をドンドンやっていっていく事で反応が変わってきます。
**・遅刻 -> モーニングミーティング**
朝、出社タイムを規制するのではなく、朝イチで全員で週末の楽しかった事を共有したり、今週の仕事内容を共有したり楽しい時間にすれば、参加出来なかった事自体が残念に思えてきます。
一緒にコーヒーやドーナツとかあれば、なお良いと思います。
**・リモートワーク -> 集中ワーク**
Twitterでイーロン・マスクがリモートワーク廃止を掲げてます。この流れはコロナの収束と共に加速していくと思いますが、このリモートワークの良さも結構あります。出社してると色々と声かけられて集中できない仕事が家で一人で集中できたりします。良い面について、フォーカス当てて、集中ワークの申請制度とか作れば良いと思います。
**・評価制度 -> キャリアすり合わせ制度**
評価って、誰が誰をみたいな感じだし、給与のための評価になりがちです。一番大事なのは、個々人のキャリアについて一緒に定義し、そこに対して達成度合いを議論する場にすれば、もっとポジティブな制度にできると思います。
**・納期 -> リリースデイor報告会**
期限のための仕事ではなく、サービスをリリースするためだったり、誰かに報告するために仕事をやってたりします。この方がポジティブになれます。
**・ワーケーション -> リゾートワーク**
僕がいつも言ってるのですが、ワーケーションって仕事してる場所が変わってるだけのイメージですが、リゾートワークっていうとリゾートで楽しく仕事できる感ないですか？僕は、こっちの方がワクワクしますｗ
**・部下 -> メンバー**
部下って言葉として人を下に見ています。これってイメージ悪いです。言霊になって下に見てしまいます。
常にメンバーという言い方としているとフラットな関係性に感じます。

マネージメントにはポジティブ変換は、マストです。皆さんもチャレンジしてみて下さい。