OmniAICreator/Qiita-1.07M huggingface dataset:
wslでelixir その143

# 概要
wsl(wsl2じゃない)で、elixirやってみた。
練習問題やってみた。

# 練習問題
Livebookで、俺言語の九九を実行するインタープリターを書け。

# サンプルコード

```
defmodule Sim do
	def start_link do
		Agent.start_link(fn ->
			[a: 0, b: 0, c: 0, pc: 0]
		end, name: __MODULE__)
	end
  def a(s) do
		Agent.update(__MODULE__, fn v ->
		  ex = "[" <> s <> "]"
			{[d], _} = Code.eval_string(ex, v)
			v = List.keyreplace(v, :a, 0, {:a, d})
			List.keyreplace(v, :pc, 0, {:pc, 777})
		end)
  end
  def b(s) do
		Agent.update(__MODULE__, fn v ->
	    ex = "[" <> s <> "]"
			{[d], _} = Code.eval_string(ex, v)
			v = List.keyreplace(v, :b, 0, {:b, d})
			List.keyreplace(v, :pc, 0, {:pc, 777})
		end)
  end
  def print(s) do
		Agent.update(__MODULE__, fn v ->
	    ex = "[" <> s <> "]"
			{[d], _} = Code.eval_string(ex, v)
			IO.write(d)
			IO.write(' ')
			List.keyreplace(v, :pc, 0, {:pc, 777})
		end)
  end
	def r() do
		IO.puts("")
	end
  def jmp(s) do
		Agent.update(__MODULE__, fn v ->
		    if String.match?(s, ~r/\*/) do
	        p = String.split(s, "*")
			    g = Enum.at(p, 0)
			    ex = "[" <> g <> "]"
    			{[d], _} = Code.eval_string(ex, v)
    			if d == true do
    			    x = String.to_integer(Enum.at(p, 1))
    			    List.keyreplace(v, :pc, 0, {:pc, x})
    			else
    			    List.keyreplace(v, :pc, 0, {:pc, 777})
    			end
		    else
    			List.keyreplace(v, :pc, 0, {:pc, 777})
		    end
		end)
  end
	def pc() do
		Agent.get(__MODULE__, fn v ->
        v[:pc]
    end)
  end
  def test() do
		Agent.get(__MODULE__, fn v ->
        v
    end)
  end
end

defmodule Main do
    def src(n) do
        str = """
10 a=1
20 b=1
30 ?=a*b
40 a=a+1
50 #=a<10*30
60 b=b+1
70 a=1
80 r
90 #=b<10*30
100 #=0
"""
        Enum.map(String.split(str, "\n", trim: true), fn l ->
		      s = String.split(l, " ")
		      cond do
  			  String.to_integer(Enum.at(s, 0)) == n ->
	  			  l
		  	  true ->
			  	  nil
			    end
	      end)
    end
    def run(0) do
    end
    def run(pc) do
        m = src(pc)
        m = Enum.reject(m, fn(x) -> 
	            x == nil 
            end)
        Enum.map(m, fn l ->
            b = String.replace(l, "=", " ")
            s = String.split(b, " ")
	          cond do
		        Enum.at(s, 1) == "?" ->
	    	      Sim.print(Enum.at(s, 2))
		        Enum.at(s, 1) == "#" ->
		   	      Sim.jmp(Enum.at(s, 2))
		        Enum.at(s, 1) == "a" ->
			        Sim.a(Enum.at(s, 2))
		        Enum.at(s, 1) == "b" ->
			        Sim.b(Enum.at(s, 2))
		        Enum.at(s, 1) == "r" ->
			        Sim.r()
		        true ->
			        IO.puts ""
		        end
    		    cond do
		        Sim.pc == 777 ->
		          run(pc + 10)
		        true ->
		          run(Sim.pc)
		        end
    	  end)
	end
end

Sim.start_link
Main.run(10)

```

# 実行結果

```
1 2 3 4 5 6 7 8 9 
2 4 6 8 10 12 14 16 18 
3 6 9 12 15 18 21 24 27 
4 8 12 16 20 24 28 32 36 
5 10 15 20 25 30 35 40 45 
6 12 18 24 30 36 42 48 54 
7 14 21 28 35 42 49 56 63 
8 16 24 32 40 48 56 64 72 
9 18 27 36 45 54 63 72 81 

```

以上。
Renesas TSIP⑦：RX65N上でユーザ鍵のWrapped Key計算

## はじめに
TSIPにおいて、Encrypted Keyは暗号化されているもののMCUとの紐づけはありません。デバイスごとのHUKで暗号化され、デバイスとの紐づけが行われた形式のことをWrapped Keyと呼びます。

この記事は、RX65N上でユーザ鍵のWrapped Keyを計算するためのものです。
プロビジョニング時に行う操作（のはず）ですが、ここでは簡単にするため、Security Key Management Toolでユーザ鍵のラッピングを行い、Cソースで出力した状態を想定します。

## 準備
e2studio でプロジェクトを作成し、FITモジュール r_tsip_rx を組み込んでおきます。

## Wrapped Key計算コード
以下のようにしてユーザ鍵のWrapped Keyを計算することができます(ユーザ鍵がECC鍵で、NIST P-256 秘密鍵の場合)。
```
#include "r_tsip_rx_if.h"
#include "w-private.h"

tsip_update_key_ring_t kuk_wrapped = {...};
tsip_ecc_private_key_index_t userkey_wrapped;

void generate_userkey_wrapped_key(void)
{
    R_TSIP_Open(NULL, &kuk_wrapped);

    R_TSIP_UpdateEccP256PrivateKeyIndex(
        g_encrypted_user_key_data.initial_vector,
        g_encrypted_user_key_data.encrypted_user_key,
        &userkey_wrapped);

    R_TSIP_Close();
}
```

`kuk_wrapped`はKUKのWrapped Keyです。
w-private.h はSecurity Key Management Toolがユーザ鍵のラップされた鍵として出力したCソースファイルで、g_encrypted_user_key_dataを宣言・定義しています。
上記generate_userkey_wrapped_key関数を実行することで、userkey_wrapped にユーザ鍵のWrapped Keyが計算されます。

上記コードのようにCソースファイルとしてSecurity Key Management Toolの出力をファームウェアに取り込むと、この情報をコピーすることでユーザ鍵による操作ができてしまいます。
実際は、Security Key Management Toolの出力をシリアル経由で与え、フラッシュには保存しないなど工夫が必要です。

作成されたユーザ鍵のWrapped Keyは、計算ごとに値が変わります。
また、ユーザ鍵のWrapped Keyをフラッシュに保存しておくことが可能です。Wrapped Keyだけを保存することで、キーのコピーを防ぐことが可能です。

## ユーザ鍵のWrapped Key利用方法

ユーザ鍵のWrapped Keyをフラッシュに保存しておけば、そのまま利用することができます。
ユーザ鍵のWrapped Key生成が不要であれば、`R_TSIP_Open`の第二引数にKUKのWrapped Keyを指定する必要はありません。
```
#include "r_tsip_rx_if.h"

/* フラッシュに保存されている想定 */
tsip_ecc_private_key_index_t userkey_wrapped = {...};

void test(void)
{
    R_TSIP_Open(NULL, NULL);

    /* 例：NIST P-256秘密鍵を用いて署名生成 */
    R_TSIP_EcdsaP256SignatureGenerate(..., &userkey_wrapped);

    R_TSIP_Close();
}
```
awk の使い方

## $1 ファイルやテーブルから1フィールド目を出力する
echo からパイプで渡して、出力させます。
```
sel = SQL文
sel_sql=$(b_psql.sh -tA -c "${sel}" 2> /dev/null)
// 1 2 3 4wを取得
echo "${sel_sql}" |awk '{print $1}'
1
```
## $0は「パイプやファイルから渡された、文字列全て」を出力する
```
sel = SQL文
sel_sql=$(b_psql.sh -tA -c "${sel}" 2> /dev/null)
// 1 2 3 4を取得
echo "${sel_sql}" |awk '{print $0}'
1 2 3 4
```

## 区切り文字を指定して、出力内容を決める
```
sel = SQL文
sel_sql=$(b_psql.sh -tA -c "${sel}" 2> /dev/null)
// 1 |2 |3 |4 を取得
echo "${sel_sql}" |awk -F '{print $1}'
1 2 3 4
```

## 参考
https://qiita.com/yamazon/items/563af1b485ff413d381f
[Apache]IP制限とBasic認証の豪華2本立て

# HPの特定ページにアクセス制限かけといて
アプリやシステム作るのは得意だけど、
インフラまわりとかマジでバブちゃんなのでマジで今回の実績で給料上げて欲しい（切実

つい最近、社内PJの【お手伝い】でHP作成をしてたわけで、その要望の中で、
- サイト自体は1つのURL
- その中で特定URL（管理者向けページ）だけはタイトルの通りIP制限とBasic認証を同時に掛ける

みたいなのがあり、__IP制限だけ__　とか　__Basic認証__ だけの設定は探せばいくらでも出てくるけど、
両方いっぺんに使いたいっていうのが全然見つからなかったので、
同じことで悩んでる子羊達にむけてちょっと色々と調べて出来た結果を載せようかと。
※ちなメインのPJの ~~片手間~~ 業後の社内バイトとしてやってるので【お手伝い】


# んなわけで、答え（コレが欲しいんやろ
```apache:.htaccess
<Directory "/var/www/html">
    AllowOverride None
    Require all granted
    # 特定URLの時にIP制限とBasic認証をかけるやつ
    <If "%{REQUEST_URI} =~ /adminPage/">
      <RequireAll>
        <RequireAny>
          Require ip xxx.xxx.xxx.xxx # 許容するIPを記述
          Require ip xxx.xxx.xxx.xxx # 許容するIPを記述
          Require ip xxx.xxx.xxx.xxx # 許容するIPを記述
        </RequireAny>

        # Add Basic
        AuthType Basic
        AuthName "Basic認証だよ"
        AuthBasicProvider file
        AuthUserFile /etc/httpd/conf/.htpasswd # ID/PASSはファイルで管理
        Require valid-user
      </RequireAll>
    </If>
</Directory>
```

## ざっくり解説
他のサイトとか調べるとLocationタグとかに設定を書いてたけど、Directoryタグに色々とかけるんなら、もう時間も余裕もないためソレでいいのかなと思い記述しました。
※要件通り問題なく動くからひとまずおｋ

- Ifタグで特定のURL部分の時の分岐を記載し、
- RequireAllタグでこのタグの中の条件が全部あってる時にしか動かないみたいな書き方をして、
- RequireAnyタグでIP制限の記述を書いて、
- 最後にBasic認証の処理を書くって感じにしました。

htpasswdの作り方とかに関しては、いっぱい情報あるからここでは書かないよ。
※いつかネタに困ったら書くけど

# 元も子もないまとめ
[公式](https://httpd.apache.org/docs/2.4/mod/core.html#directory)読んだら普通に書いてあったので、他の人のちゃんと動くかわからん古い情報のサンプルをコピペするよりも、ちゃんと公式読んでから他の人のやつコピペして使えって話だよね。。。
Content Insights | OTT Platform Data Scraping

Enhancing-Content-Insights-through-OTT-Platform-Data-Scraping
The Client
A leading media and entertainment company partnered with Actowiz Solutions to harness the power of data for optimizing their content strategy and viewer engagement on their OTT platform.

Key Challenges
Limited Metadata Visibility: The client faced challenges in obtaining comprehensive metadata for their shows, movies, and episodes, hindering effective content curation and personalized recommendations.

Manual Data Entry: The existing process relied heavily on manual data entry, leading to inaccuracies, delays, and an inability to keep up with the dynamic nature of the OTT industry.

Objectives
Objectives
Unified Data Repository: Create a centralized and structured database incorporating detailed information on shows, movies, episodes, and personnel.

Automation of Data Extraction: Implement automated data scraping techniques to streamline the extraction of metadata from various OTT platforms.

Key Solutions
Actowiz Solutions devised a customized OTT platform data scraping solution, focusing on extracting key information across different content categories.

Shows:
Shows
Title, Synopsis, Genres, Tags
Sources, IMDb ID, TVDb ID, TMDb ID
Images (Poster, Background, Thumbnails)
Seasons, Episodes, Related shows
Cast & Crew
Movies:
Movies
Title, Release year, Synopsis, Genres, Tags
Trailers, Sources, IMDb ID, TVDb ID, TMDb ID
Images (Poster, Background, Thumbnails)
Related shows, Cast & Crew
Episodes:
Episodes
Title
Synopsis
Sources
Playback links
Images
Person:
Person
Name
Role
Credits
Images
Implementation
Utilizing a combination of web scraping scripts and APIs, Actowiz Solutions automated the data extraction process, ensuring real-time updates and accurate information scraping OTT platform data.

Final Outcome
Enriched Content Metadata: The client gained access to a comprehensive database, significantly enhancing their understanding of show attributes, enabling more effective content categorization.

Improved Viewer Experience: Leveraging the scraped data, personalized viewer experiences were implemented, resulting in increased user engagement and satisfaction.

Operational Efficiency: Automated data extraction reduced reliance on manual efforts, resulting in operational efficiency, timely updates, and improved data accuracy.

Conclusion
Actowiz Solutions' professional OTT platform data scraping services empowered the client with a robust foundation of content metadata, fostering innovation, informed decision-making, and ultimately delivering an enhanced viewer experience on their OTT platform.

sources >> https://www.actowizsolutions.com/case-study-insights-ott-platform-data-scraping.php
Power Automate(クラウドフロー)のプルダウンでの入力値を使いまわしたい

Power Automate(クラウドフロー)にてプルダウンで選択した設定値を何度も入れることなく使いまわしたいよね？という話

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/012307ac-ae0d-e638-166a-640d640501dc.png)


# 設定方法
まず最初に手作業で入力するアクションに設定値を入れて三点リーダーから"peek code"を選択し、jsonの構造をみてパラーメータの階層を把握します

この時、アクション内で表示されている表示名と、実際のパラーメータ名が違う場合があるので注意（この場合Locationはsourceという名前になっています…）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/d5438383-b7a4-6895-249b-a8d9a9145aae.png)

次に変数へactions関数を使って先ほどの手入力で入れたアクション名と、jsonの対応するパラーメーター名を設定します。
この場合は以下となります。
 > actions('List_rows_present_in_a_table')?['inputs/parameters/source']

最後に変数的に入れれば完成！何度も手入力する手間が減りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/130264bd-8bd6-735a-e51b-499802441529.png)


参考：actions関数について詳しくはこちら

https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#actions
【線形代数】連立方程式

# ０.はじめに
大学で線形代数の講義を受講している者です。
ざっくりと計算方法を個人的な備忘録としてまとめております。

##### 関連学習
[【線形代数】ベクトル](https://qiita.com/AkihideKato/items/f581ee500782b2272c0a)
[【線形代数】行列](https://qiita.com/AkihideKato/items/7d92b048d5bd392389e8)
[【線形代数】連立方程式](https://qiita.com/AkihideKato/items/6ddd947e438c4fae77a6)
[【線形代数】線形空間・線形写像](https://qiita.com/AkihideKato/items/2f03f8a996372525db6d)
[【線形代数】座標](https://qiita.com/AkihideKato/items/cda674d9fcf3f1fc00ba)
[【線形代数】固有値・固有ベクトル](https://qiita.com/AkihideKato/items/42a6bd7eec6ca66085c8)

# 連立一次方程式
連立一次方程式には以下の3パターンが存在する	
・交点が存在する	
・2つの方程式は直線である	
・交点を持たない	

# 解き方（加減法・代入法）			
```math
\left\{
\begin{array}{ll}
x+y=1・・①\\
2x+2y=4・・②	 
\end{array}
\right.
```	

#### 加減法				
①を2倍し②に合わせて差を求め計算する		
#### 代入法			
①を``x = 1-y``と表す
その``x``を②の``x``に代入し``2(1-y) + 2y = 4``と求める

# 解の数について

#### 解が複数ある場合の条件														
未知数の数＞式の数													
これが成り立つと解が複数あることになる													
掃き出し法によって単位行列にする方法があるが解が複数ある場合は単位行列にならない					
零ベクトルになるケースも解が複数ある場合に起こる													
														
掃き出し法により3行目の解が零行列になっている	
```math
\begin{pmatrix}
1 & 0 & a_1\\
0 & 1 & a_2 \\
0 & 0 & 0 \\
\end{pmatrix}
\begin{pmatrix}
b_1\\
b_2\\
0 \\
\end{pmatrix}
```
														
#### 解が無い場合														
左側の係数行列が0であるにもかかわらず右側の定数ベクトルに値がある										
```math
\begin{pmatrix}
1 & 0 & a_1\\
0 & 1 & a_2 \\
0 & 0 & 0 \\
\end{pmatrix}
\begin{pmatrix}
b_1\\
b_2\\
b_3 \\
\end{pmatrix}
```

# クラメールの公式
連立一次方程式の解を求める公式						
未知数が``n個``ある連立一次方程式``Ax = b``の解は``|A| ≠0``であれば``xi = |Ai|/|A|``で表される
b列を分子のi列に変形させサラスの方法を使用する						
例：下行左側x₁で例えると、b₁b₂を分子の左側（1列目なので）に置き換えあとは					
サラスの方法を使用し分子分母を計算する
x₂は分子2列目、サラスの方法を最初に行い0ではない事を確認しクラメールの公式を使用する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/2949edb2-42ad-5b9b-d408-ea0df0e311f8.png)

# ガウスジョルダン法
掃き出し法とも言われる連立方程式を行列式で解くための方法
単位行列にすることを目的とする
行と行を足し引きし数を揃える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/84bf088a-e895-04e6-2f92-bd4cee848fd0.png)
トレーニングをシェアアプリ（Webアプリ）が完成しました

# ー🏋️トレーニングをシェアしよう💪ー(Webアプリ)
この度、2023年12月頃から地道に制作していたwebアプリ **「トレーニングをシェアしよう」**　を完成しましたーー🎉🎉

しかしー、悔しいことに現時点でリリースはできておりません。
エラー対応に手こずっており、未だ解決策を発見できておりません。mm

そのため、GithubのREADME.mdに詳細を記載させていただきましたので、もし良ければ見に行っていただけますと幸いです。。。

https://github.com/YUJI1027/portplio1.git
AWS SAMのテンプレートでFunctionのCode Uriに!Refや!Subを使えない時の解決法

# はじめに
AWS SAMのテンプレートでFunctionのCode Uriに`!Sub`パラメーターを指定してデプロイしようとしたところ、下記のようなエラーが発生してデプロイに失敗しました。

```text:Error
Error: Failed to create changeset for the stack: my-stack, ex: Waiter 
ChangeSetCreateComplete failed: Waiter encountered a terminal failure state: 
For expression "Status" we matched expected path: "FAILED" Status: FAILED.
Reason: Transform AWS::Serverless-2016-10-31 failed with: Invalid Serverless
Application Specification document. Number of errors found: 1. Resource with
id [MyFunction] is invalid. 'CodeUri' requires Bucket and Key properties to
be specified.
```

原因を調査したところSAM固有の問題で、`AWS::Serverless::Function`のPathパラメーターに`!Ref`や`!Sub`が使えないようでした。
なんとか解決できないか試行錯誤した結果、やり方がわかったので備忘録として残します。

# 方法

解決策としては、
- `CodeUri`に直接S3のURLを`!Ref`や`!Sub`で指定せず`Bucket`と`Key`を設定する
です。

簡単な例を出します。


まず、ダメな例。
```yaml
Function:
    Type: AWS::Serverless::Function
    Properties:
        FunctionName: example-fucntion
        Handler: bootstrap
        Runtime: provided.al2
        CodeUri: !Sub s3://${bucket}/function.zip
```

良い例。
```yaml
Function:
    Type: AWS::Serverless::Function
    Properties:
        FunctionName: example-fucntion
        Handler: bootstrap
        Runtime: provided.al2
        CodeUri: 
            Bucket: !Ref bucket
            Key: function.zip
```


これで、エラーの問題が解決できます。
以上です。

:::note info
もちろん、Bucketブロックで`!Sub`や`!ImportValue`の設定も可能です。

```yaml
CodeUri: 
    Bucket: !ImportValue example-bucket
    Key: function.zip
```
:::

# さいごに
誰かの参考になれば嬉しいです。
PHPのメモリ容量とは

### はじめに
負荷テストをしている際に、タイムアウトエラーが発生してしまい、原因を探ると変数に大量のデータが入っていることが要因だった。
対策としてはプログラムの方で一つの変数に大量のデータが入らないように改修したが、それと同時にphpのメモリ上限をあげる方法があるということを知った。
それまではphpのメモリという概念自体を意識していなかった上に、理解をしていなかったためQiitaを執筆する。


### phpのメモリとは
まずphpのメモリとは、phpのプログラムを実行する際に使用されるメモリの容量のことである。

### phpのメモリに関するエラーが発生した際の対処
メモリ容量の上限は任意に設定することができるが、メモリエラーやタイムウトエラーが発生した際に、上限を上げるというのは安易で、プログラムの方でおかしな処理の仕方をしていないか確認することが重要である。
例えば今回の自分のように、変数に大量のデータが入るようになってしまっていたり、for文で大きな負荷がかかる処理の書き方をしていないかを確認することが重要。
phpのメモリの上限を上げるということは最終手段と考える。

### phpのメモリ容量を上げる方法
php.iniファイルを編集し、memory_limitディレクティブを変更する。
```php:.ini
memory_limit = 256M
```

### まとめ

・phpのメモリとはphpのプログラムの処理に使用するメモリ容量のこと
・メモリに関するエラーが発生したら負荷のかかる処理を書いていないか見直す
・メモリの上限を上げるのは最終手段
なんのエラー? Failed to compile ./node_modules/@react-aria/overlays/dist/import.mjs Attempted import error: 'clamp' is not exported from '@react-aria/utils'

## エラー内容
```
Failed to compile
./node_modules/@react-aria/overlays/dist/import.mjs
Attempted import error: 'clamp' is not exported from '@react-aria/utils' (imported as '$k7QOs$clamp').
This error occurred during the build process and can only be dismissed by fixing the error.
```

上記のエラーがとてつもなく意味がわからなかった。
## なぜ起きたか
next@14.0.4を使用していて、react-selectを使用しようと(使用できるかわからなかったのですが、試しで入れてみようとした)
```yarn add react-select```というコマンドを使用し、removeしたのですが、永遠とこのエラーが出るようになった。

## やったこと
- docker up /down
- yarn upgrade @react-aria/overlays @react-aria/utils
　　- 上記のコマンドで更新
- 今いるブランチのpackage.jsonと切った元のブランチにあるpackage.jsonとの差分を削除して、yarn install
- 再ビルド
- node_moduleを削除し、yarn installで再度作成
- cacheの削除
- dockerサービスの再起動
- dockerサービスの中のvolumeやimageの削除

## 最終的にどうしたか

作業していたブランチを作業していたコードのみをリモートにpushし、
作業ディレクトリ削除後にgit cloneしなおして無理やり解決させました。
元々作業を行ってたブランチに移動したところ、エラー消えてました。

何が原因だったのか一切わからず、調査しようにも情報がなかったです...

## clampとは

下記のようなCSSの関数らしいです...
https://developer.mozilla.org/ja/docs/Web/CSS/clamp
Insert Final Newline とセットでセットして欲しい！ Render Final Newline の話

# 前提条件：ファイルの末尾に改行を入れる

- Linux を使うならテキストファイルの末尾に改行を入れる方が便利
    - `git` や `wc -l` や `cat` など、それが前提になっているものが多い
- VSCode で Insert Final Newline にチェックを入れると保存時に改行を入れてくれる
    - prettier や eslint で設定してるから大丈夫だよっていう人も居るかも

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78152/812d3141-21b3-eefb-82b5-706330d3b6a5.png)

> When enabled, insert a final new line at the end of the file when saving it.

https://qiita.com/hamamamama/items/11c17c7412a5aeb2ad74

https://qiita.com/kyo_nanba/items/d384b2a46170bf8764dd

# VSCode のオプション、Editor: Render Final Newline とは

ファイルの最後の行番号を表示するかどうか選べる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78152/cc77edf2-380b-c7e5-e4e9-bbe900896189.png)

> Render last line number when the file ends with a newline.

## Render Final Newline が off の場合

off にすると `wc -l` で表示したときのファイルの行数と最終行の行番号が一致するので嬉しい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78152/995d65ab-0ab2-8777-3ca6-b2de7546f103.png)

## Render Final Newline が on の場合

最後の空行に行番号が表示されているとなんとなく違和感がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78152/4d37ef3b-7481-014c-f941-cbaf42ee9c87.png)

## Render Final Newline が dimmed の場合

行番号が薄い色で表示されるようになる。中間の選択肢。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78152/ce0a36c3-4edb-e76e-2d75-3408a1c8796c.png)

# おわりに

Render Final Newline について説明している記事があんまりなかったので書いてみました。
プログラミングのためのタッチタイピング

　おはようございます。いちょうです。今回は、著者がタッチタイピングを習得した過程を紹介します。プログラミングに関わる話も交えています。

# 1.ホームポジションを覚える
　ホームポジションは、どのキーをどの指で入力するかを決める基本の位置です。`左人差し指を「F」、右人差し指を「J」`に置きます。大抵はキーボードの「F」と「J」に、小さな突起がついているのでそれを基準とします。タイピングをしている途中で、キーの配置が分からなくなっても、その突起を探して位置調整できるので、わざわざキーボードを見なくてもよくなります。

　ホームポジションを覚える際、お世話になったサイトが[ひよこでも出来るタイピング練習講座](https://typing.twi1.me/training)です。このサイトの、「ひよこのタイピング練習(初心者向け)」では五十音順にあ行→か～さ行→・・・と実際にタイピングしていくことで少しずつ習得できるようになっています。ある程度の正確さと速度を出すことができれば合格がもらえるというシステムのため、モチベーションを維持しやすいです。

 # 2.ひたすら練習する
 　練習あるのみです。練習と言ってもその方法は多様ですので、実際に利用した練習サイトを紹介します。掲載順に優劣はないので、好きなサイトを利用しましょう。

- [マナビジョン-タイピング練習（日本語入力）](https://manabi-gakushu.benesse.ne.jp/gakushu/typing/nihongonyuryoku.html?_gl=1*1kw40g8*_gcl_au*NjQ5NzAyLjE3MDk3MDAxMDk.*_ga*MTgzNDE4MjQ4Mi4xNzA5NzAwMTA5*_ga_1YYYR3J6VM*MTcwOTcwMDEwOS4xLjEuMTcwOTcwMjEyNC40Ni4wLjA.)
　Benesseのマナビジョンで提供されているサイトです。1～5分で選ぶことができ、5分を選択するとそのスコアに応じてP検の何級合格相当か分かり、モチベーションを保ちやすいです。また、全ての文に句点（。）があるので、しっかりと文を書きたいときにおすすめです。[他にも](https://manabi.benesse.ne.jp/gakushu/typing/)英語入力などが提供されています。
 - [e-typing 腕試しレベルチェック（英語入力）](https://www.e-typing.ne.jp/english/check/)
 　[日本語入力](https://www.e-typing.ne.jp/)もあるのですが、英語入力で練習する利点として、「Shift」や「Space」キーを使うということが挙げられます。例えば、 以下のコードだけでも「()」,「{}」,「=」,「!」,「""」を入力するときに「Shift」を押していたり、「Space」も押していたりします。そのため、日本語入力の延長線として英語入力も検討してみて下さい。（もちろん実際にコーディングして習得していくのもありです。）
  ```rust:Rust
fn main() {
    let n = 10;
    for i in 1..=n {
        println!("{}", i);
    }
}
  ```
  - [寿司打](https://sushida.net/)
  　著者がよく利用しているサイトです。3000円コースでは反射神経を高める（初動の動きを速くする）用途、10000円コースではタイピングの正確さや速度を高める用途で使い分けられます。（あまり考えたことはないですが）最初はお寿司の流れるスピードが速くても、雑にタイピングせず、`正確にタイピングして、ミスタイプ数を減らしていきましょう。`また、「！」,「？」,「、」が文中に出てくることがあるので、キーボードを見ずに打てるようにしましょう。（初めて、お得になったときはたまらなくうれしかったです。）

# 3.最適化する
　ここまでは、ホームポジションでタッチタイピングをしてきました。しかし、速さと正確さをさらに追求するのならば、最適化をするべきです。
 
  　例えば、「じゅ」を入力するには「zyu」と「ju」（他「zixyu」,「zilyu」）が考えられます。また、「ju」と入力する場合、「j」と「u」をどちらも右人差し指で入力するか、「j」を右人差し指、「u」を右中指で入力するかなどで分かれます。
  
 　 このように、「じゅ」と入力するだけでも複数の方法が考えられます。各方法に優劣はあまりなく、`自分が打ちやすい方法を選んでいくことが大切です。`
   
   　[『知られざる"競技タイピング"の世界。競技タイピング日本一のmiriさんに聞くその面白さや見どころとは。』](https://and-engineer.com/articles/X3f6vxIAAIPV7sdf#heading2-3)という記事では競技タイピング選手であるmiriさんの運指のこだわりやタイピングのコツなどが特集されているので、一読してみるとよいと思います。
    
　ちなみに著者は、「ふ」→「fu」、「にんにく」→「nixnniku」（「ninnniku」にしない）など、小さな所を最適化しています。
# おわりに
　一番つらい時期はホームポジションを覚えるところです。ある程度練習をすれば、タイピングにゲームとしての楽しさを見いだせていることでしょう。今日うまくタイピングができなくても、夜が明ければうまくできるようになっていることも少なくないので、少しずつ成長していきましょう。また、タイピングerの方のご意見もお待ちしております。
VSCodeで同じファイルを複数タブで操作する

## 問題
自分はVSCodeを使って日々の開発を行っています。
開発をしていると、複数のブランチを行き来しながら開発を行うこともあるのではないでしょうか。
そんな時、単一のタブで操作していると、複数ブランチで編集したたくさんのファイルが混同し、
* どのファイルを操作していたのかわからない
* 編集したいファイルが見つかりづらい
* シンプルに煩雑になり収集がつかなくなる

などの問題が発生します。
この問題に対処すべく、Dockから新しいタブを開き、同じファイルを操作しようとすると、なぜかタブが統一されてしまい、複数タブで作業を行うことができません。

## 対処法
そんな時は、以下を実行するだけで簡単に複数タブで作業を行うことができます。
1. VSCodeを開いた状態で、コマンドパレットを開く（`Shift` + `⌘` + `P`）
2. 検索タブに、"Duplicate As Workspace in New Window" と入力
3. 下に候補が表示されるので、 （日本語の設定をしている方は）
`ワークスペース：新しいウィンドウでワークスペースとして複製` をクリック!

![スクリーンショット 2024-03-12 19.00.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742625/82ea5c8e-a790-44a3-70ae-8db6d9d21325.png)

以上で終わりです。自分はブランチごとに分けているので、作業内容を明確に分割することができ、気持ちよく作業を行うことができています！
ぜひお試しください！
Renesas TSIP⑥：Security Key Management Tool によるユーザ鍵のEncrypted Key取得

## はじめに
Security Key Management Toolは、KUKによりユーザ鍵を暗号化し、ユーザ鍵のEncrypted Keyを得ることができます。

## Security Key Management Tool
「鍵のラッピング」タブの「鍵の種類」タブで以下の設定をします。

鍵の種類：ユーザ鍵の種類に応じてAES/RSA/ECC/HMACを選択します。
ラッピング鍵：KUKを選択し、UFPKファイルとしてKUKの平文鍵を指定します。
出力：バイナリを選択し、出力ファイル名（.bin）を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3738861/4cd334f3-4165-ccc1-6004-cd8734cf6e17.png)

「鍵データ」タブに移動し、以下の設定をします。

ファイル：ユーザ鍵の平文鍵を指定します。バイナリ(.key)に加えPEM形式(.pem)のファイルを選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3738861/2ce2b232-7b2a-56c0-12ea-fe755e5adc5b.png)

上記設定後、「ファイルを生成する」をクリックすると「出力」に指定したファイルにバイナリ形式で出力が生成されます。
バイナリファイルのフォーマットはドキュメントまたはCソースでの出力に記載があります。
出力形式をCソースにすると以下のようになるはずです（具体的な値は異なる）。
```
const encrypted_user_key_data_t g_encrypted_user_key_data =
{
    /* uint32_t keytype; */
    0x00000000,
    /* uint32_t shared_key_number; */
    0x00000000,
    /* uint8_t initial_vector[16]; */
    {
        0x06, 0x29, 0xDA, 0x17, 0x11, 0xD5, 0xC3, 0x9B, 0x5F, 0x3B, 0x51, 0x9A, 0xC6, 0xD2, 0x2E, 0x99
    },
    /* uint8_t encrypted_user_key[ENCRYPTED_KEY_BYTE_SIZE]; */
    {
        0x80, 0xD4, 0xAA, 0xC3, 0x33, 0x54, 0xEF, 0xAC, 0x0B, 0x95, 0x20, 0x4A, 0x45, 0xE4, 0x92, 0x4D,
        0x5B, 0x74, 0xF1, 0xC4, 0x2C, 0x2A, 0x5B, 0xD0, 0x50, 0x1E, 0x88, 0x46, 0x0A, 0x36, 0xC9, 0xE4,
        0x79, 0x6D, 0x02, 0x0C, 0x95, 0xD1, 0x2B, 0x73, 0xA6, 0xC4, 0x9A, 0xE1, 0xE3, 0x1D, 0xB5, 0xAA
    },
    /* uint8_t crc[4]; */
    {
        0xED, 0x2D, 0xE1, 0x47
    },
};
```

以下の情報が含まれています（big endian）。

keytype(32bit)：キー種別ですが、RXの場合使用しません。
shared_key_number(32bit)：RXの場合0x00000000固定です。
initial_vector(16byte)：KUKのEncrypted Keyを計算するときに使用されたIVです。
encrypted_user_key(ユーザ鍵の種類による)：KUKのEncrypted Keyです。
crc(4byte)：keytype～encrypted_user_keyまでのCRCです。
上記のうちinitial_vector、encrypted_user_key を入力とし、ユーザ鍵のWrapped KeyをMCUに計算させることができます。

ファームウェアへの組み込み方法は、以下のような方法が考えられそうです。

Security Key Management ToolからCソースを出力しファームウェアに組み込む：攻撃者へのキーの漏洩はないものの、フラッシュのコピーによりユーザ鍵で可能な操作がすべてできる。
デバイスのプロビジョニング時にSecurity Key Management Toolからのバイナリ出力を読み込み、MCU上でユーザ鍵のWrapped Keyを計算・データフラッシュへ書き込む：プロビジョニング操作が必要な代わりに、フラッシュのコピーができない（デバイスごとのHUKで暗号化されるため）。
セキュリティを考えると、ユーザ鍵のWrapped Keyのみをデータフラッシュに保存することがよさそうです。
Pythonで「パターンから正規表現オブジェクトを作成する(Pattern)」の動作を確認してみた

# 概要

Pythonで「パターンから正規表現オブジェクトを作成する(Pattern)」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/python/regex/index2.html

# 実装

以下のファイルを作成しました。
```sample.py
import re

filename = 'apple.png'
pattern = re.compile(r'png$')

result = pattern.search(filename)
if result :
    print('パターンにマッチします')
else :
    print('パターンにマッチしません')
```

以下のコマンドを実行しました。
```
$ python3 sample.py 
パターンにマッチします
```

# まとめ

何かの役に立てばと。
論文紹介：Textbooks Are All You Need

## 概要
- [紹介する論文](https://arxiv.org/abs/2306.11644)
- モデルサイズ1.3B、データセットサイズ7Bという規模で、HumanEval(pass@1)で50.6%、MBPP(pass@1)で55.5%を達成
- GPT-3.5による合成データとWebデータで事前学習を行い、演習データで微調整。どちらも教科書レベルのデータ。

## データセットの内容

- The StackとStackOverflow（6B）
- GPT-3.5よる合成データ（1B）
- Python演習問題データ（180M）

## データセットへの事前処理

### The StackとStackOverflow

1. GPT-4によってアノテーションする。「基本的なコーディングを学ぶ学生にとって、教育的な価値があるか」
2. ランダムフォレスト分類器の訓練
    1. codegenモデルのエンコーダーを使用して、出力エンベッディングを特徴として使用する

### GPT-3.5よる合成データ

- 基本的には、プロンプトを手動で作成し、それをGPT3.5で読み込ませ、合成データセットを作成したよう。
- プロンプトの内容は、推論やアルゴリズムについてのトピックに制約を与えることで多様性を出したらしい。
- 詳細は記載されておらず、よくわからない。

以下、プロンプト例。

```python
To begin, let us define singular and nonsingular matrices. A matrix is said to be singular if its
determinant is zero. On the other hand, a matrix is said to be nonsingular if its determinant is not
zero. Now, let's explore these concepts through examples.

Example 1: Consider the matrix A = np.array([[1, 2], [2, 4]]). We can check if this matrix is
singular or nonsingular using the determinant function. We can define a Python function, `
is_singular(A)`, which returns true if the determinant of A is zero, and false otherwise.

import numpy as np
def is_singular(A):
	det = np.linalg.det(A)
	if det == 0:
		return True
	else:
		return False
A = np.array([[1, 2], [2, 4]])
print(is_singular(A)) # True
```

### Python演習問題データ

- GPT3.5で作成
- 内容は未完成のdocstringで、続きを予測する形になっている。
- HumanEvalなど評価データセットが含まれないように汚染除去している。

以下、問題例。

```python
def valid_guessing_letters(word: str, guesses: List[str]) -> List[str]:
"""
Returns a list of valid guessing letters, which are letters that have not been guessed yet and
are present in the word.
Parameters:
word (str): The word to guess.
guesses (List[str]): A list of letters that have already been guessed.
Returns:
List[str]: A list of valid guessing letters.
"""
valid_letters = []
for letter in word:
	if letter not in guesses and letter not in valid_letters:
		valid_letters.append(letter)
return valid_letters
```

## モデルアーキテクチャ

- 変わったことはしていない。
- マルチヘッドアテンション(MHA)のFlashAttentionを使用したデコーダのみのトランスフォーマーモデル。
- CodeGen のような、MHAとMLP層を並列構成。
- 1.3Bモデルは、24層、2048の隠れ次元、8192のMLPインナー次元、各64次元の32のアテンションヘッドから構成。
- codegen-350M-monoと同じトークナイザを使用。

## 学習

- こちらもオーソドックス
- データセット配列からスライスした 2048 個の配列長に対して、次のトークンの予測損失で学習。
- AdamWオプティマイザ、linear-warmup-linear-decay学習率スケジュール、attentionとresidual dropout 0.1でfp16学習。
- Nvidia-A100 GPU ✕ 8で、deepspeedを用いて学習。
- 事前学習は、The StackとStackOverflow、GPT-3.5よる合成データを使用して行う。
    - 有効バッチサイズ1024(データ並列と勾配累積を含む)、最大学習率1e-3、ウォームアップ750ステップ、重み減衰0.1、合計36,000ステップ、約8エポック、総トークン数50B。
- ファインチューニングは、Python演習問題データを使用し、基本的には事前学習と同じ設定。
    - 有効バッチサイズ256、ウォームアップ50ステップ、最大学習率1e-4、重み減衰0.01、合計6,000ステップ、1000ステップごとに保存。
Pythonでコラージュ川柳を詠む

# はじめに

コラージュ川柳がめちゃくちゃ好きで作りたいのだが、筆者は紙の新聞の契約をしていないため、Pythonとインターネットでやってみた。

https://www.yomiuri.co.jp/local/kansai/news/20230422-OYO1T50019/

# データソース

「インターネットでスクレイピングして辞書を作ろうか、しかし文字数の処理がわからない…辞書さえ作れてしまえばあとは一瞬なのに…」と1年近く悩んでいたが、別件で形態素分析周りを調べていたところ、全ての問題を解決できる「単語感情極性対応表(著作者:東工大　高村教授)を発見した。素晴らしすぎる。

http://www.lr.pi.titech.ac.jp/%7Etakamura/pndic_ja.html 
http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic
43400語収録、よみがな、品詞付きである。素晴らしすぎる。
このリストをcsvにし、よみがなの文字数の列を追加したものをPythonで取り込む。

# 実装
```python
import random
import pandas as pd
import numpy as np
 
df_dic = pd.read_csv('C:/Users/xxxxxxx/Desktop/kyokusei_240312.csv')
 
kami_shimo_option = df_dic[(df_dic["len"] == 5)]
naka_option = df_dic[(df_dic["len"] == 7)   

kami = random.choices(kami_shimo_option['word'].tolist())                                      
naka = random.choices(naka_option['word'].tolist())
shimo = random.choices(kami_shimo_option['word'].tolist())
                           
print(kami + naka + shimo)
```
形容詞+品詞、名詞+助詞など、色々遊べる余地はある。

出力
```python
['蓄電池', '無官の太夫', 'じんかくか']
['書下し', 'パーセンテージ', 'かんだちめ']
['仰ぎ見る', '門前払', '借受ける']
['てんかいち', '刃物三昧', '足ついで']
['たずねびと', 'はばかりながら', '但書']
['未解決', 'ハードボイルド', '三和音']
['うるしまけ', 'ストロンチウム', 'ノミネート']
['灰均し', 'サンクチュアリ', 'ぶんなげる']
['酒浸り', 'くいあらためる', 'サントニン']
['人いきれ', 'たいとうごめん', 'えんつづき']
['高御座', 'グルタミンさん', 'おどりでる']
```
良すぎる。

# chatGPT(4.0)に聞いてみた

![IMG_1020.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661209/d345e4ef-cd31-5929-243d-9b87d7a58821.jpeg)

![IMG_1021.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661209/87406412-0308-cfcc-c99d-f630d86288cf.jpeg)

…だそうです。

# 感想
Pythonと辞書でやったからこそ、「高御座」「上達部」等の筆者の地頭とセンスからは絶対に出てこないワードを含んだセレンディピティ感あふれる謎川柳を生成することができた。とてもうれしい。
dial error直った方法 - migrateできない

## 想定読者

- GO言語でMigrateしようとしたらdialエラーが出た人
- udemyでto do アプリ作ってる人

## 結論

dockerを起動するの忘れていた

![スクリーンショット 2024-03-12 175805.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551481/326245e2-f95e-a274-5d97-830447bacfbd.png)

## 試したこと
* ENVファイルの変数名チェック
* `db, err := gorm.Open(postgres.Open(url), &gorm.Config{})`を睨んだ

## 教訓
~~あるある言いたい~~
作業を中断して時間おくとdockerの存在忘れがち
Microsoft Copilot Studio で、自分専用のチャットボットを作ってみた

# 作ったもの

Microsoft Copilot Studio で、自分で指定した情報ソースを元に回答してくれる
自分専用のチャットボットを作成しました。
ゼルダの伝説 ティアーズオブザキングダムの攻略情報を教えてくれる
「ティアキンサポートくん」です。（試用版のため期限切れでアクセス不可の可能性あり）

[ティアキンサポートくん](https://copilotstudio.microsoft.com/environments/Default-f760e6b7-48d2-4133-967e-85062a979df1/bots/cr91d_hE_46zGScQoJ4h0LYtUGc/canvas?__version__=2)


# はじめに

少し前の話になりますが、4ヶ月ほど前、
[Microsoft Ignite Japan](https://aka.ms/ignitejapan.top) に参加しました。

https://aka.ms/ignitejapan.top

上記イベントで紹介されていたサービスで、
WEBページ や pdfをソースとして指定し、独自のチャットボットを作成することができる
[Microsoft Copilot Studio](https://www.microsoft.com/ja-jp/microsoft-copilot/microsoft-copilot-studio) がとても面白そうだったので、実際に触ってみました。
試用版は60日間無料 + 30日の延長が可能（未検証）です。

https://www.microsoft.com/ja-jp/microsoft-copilot/microsoft-copilot-studio



# 「職場または学校アカウント」の準備
Copliot Stidio の試用には、Microsoft の個人アカウントではなく
「職場または学校アカウント」が必要です。

また利用にあたっては、入力した情報がアメリカに送信されてしまうことから、
**アカウントのグローバル管理者による許可と追加の設定が必要**になっています。
（私が所属している職場のアカウントでは利用ができませんでした。）

そのため、以下のページから、一般法人向けOfficeを試用版で登録することで
「職場または学校アカウント（〜@onmicrosoft.com）」を作成します。

https://www.microsoft.com/ja-jp/microsoft-365/business
```
⚠️⚠️⚠️⚠️⚠️
課金を発生させないためには、Office試用版の終了前にキャンセルが必要です。
作成したアカウントは残りますので、キャンセル後もCopilot Studio の利用が可能です。
⚠️⚠️⚠️⚠️⚠️
```

# Copilot Studio の試用版の登録

https://learn.microsoft.com/ja-jp/microsoft-copilot-studio/sign-up-individual

上記記事に記載されている [こちら](https://go.microsoft.com/fwlink/?LinkId=2107702) のリンクから、試用版に登録します。
前の手順で作成した「職場または学校アカウント（〜@onmicrosoft.com）」で
サインインしてください。



# 生成AIの利用許可設定

上記でCopilot Studio は利用可能ですが、生成AI機能が使えない状態となっています。
生成AI機能を有効化するには、[Power Platform admin center](https://admin.powerplatform.microsoft.com/environments) での設定が必要です。
（グローバル管理者のみ有効可能です。）

https://admin.powerplatform.microsoft.com/environments

サインインし、「環境」がない場合は作成します。
「環境」がある場合は、環境名をクリックします。
すると右下に、「生成AI機能」の欄がありますので、
どちらも「許可する」に変更しておきます。

![スクリーンショット 2024-02-25 10.59.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/979767/26124673-1399-a34c-c382-8d353fa96269.png)

```
⚠️⚠️⚠️⚠️⚠️
こちらの設定を「許可する」に変更してしまうと、
アカウントの情報がアメリカに送信されることになります。
管理者でなければ変更は不可能ですが、職場のアカウント等で変更される際は
データが送信されても問題ないかを十分にご確認いただいた上で、変更してください。
⚠️⚠️⚠️⚠️⚠️
```
詳しくはこちらに記載があります。

https://learn.microsoft.com/ja-jp/microsoft-copilot-studio/manage-data-movement-outside-us

# ボットの作成

今回は、私がここ最近ずっとハマっているゲームである
ゼルダの伝説 ティアーズオブザキングダムの攻略情報を教えてくれる
チャットボットを作成したいと思います。

まずは情報の元となるページを探します。
なお、Copilot Studio では、情報元として指定できるURLは
トップから2階層までのURLに限られています。
```
（例）
https：//AAA/BBB/ ← OK
https：//AAA/BBB/CCC ← NG
```
上記踏まえた上で、今回はこちらのWEBページを情報元として指定します。
https://gamewith.jp/zelda-totk/

https://gamewith.jp/zelda-totk/

実際にしてみた様子がこちらです。（1分程度の動画となります。）

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

# 最後に
Ignite Japan で聞いた段階では日本語に未対応でしたが
日本語に対応したチャットボットを簡単に作成することができました。
なかなか職場で活用できるケースは（情報流出の観点から）難しそうですが
今後も新しいサービスがあれば手を動かして触ってみたいなと思います。

https://naokichigyoza.com/
リモートデスクトップ接続で「お待ちください」が出て死にそうになったときの純正裏技

# 問題

Windows のリモートデスクトップ接続で、ブルーな背景に「お待ちください」と出ることがあります。
一度こうなると、何時間待とうと何回接続を試みようと、現れるのは同じ色とメッセージです。
[Ctrl]+[Alt]+[End] も効きません。
いくら調べても、出てくるのは「ホストで再起動するしかない」「不具合だから諦めろ」という情報ばかりです。

LAN内なら `shutdown` コマンドや `Restart-Computer` コマンドレットという手がありますが、インターネット越しの場合、それらが使えるような大胆な環境には、普通はなっていないと思います。

# 解消策

諦められなかったので、いろいろ試してみました。
そして、以下の方法で解消することができました。

1. Microsoft Learn から Sysinternals の [Remote Desktop Connection Manager](https://learn.microsoft.com/en-us/sysinternals/downloads/rdcman) をダウンロード
1. RDCMan.exe を起動
1. [Session]-[Connect to...] で接続情報を入力して [Connect]
1. [Session]-[List sessions]
1. リストに出てきた接続のコンテキストメニューから [Log off]
1. ログオフされる
1. ログオンできるようになる

タイミングの問題かもしれませんが、[Session]-[Log off] ではだめでした。

# 制限事項

たまたまかもしれませんし、すべての「お待ちください」が解消できるとも限りません。
MacにPythonインストール

## １ 目的
Mac（macOS Sonoma 14）でPythonを始めるために、環境を整えます。
macOSには、以前はPython2系は標準で入っていて3系は入っておらず、最近のは2系も3系も入っていないと思っていたのですが、自分のMacをよくみるとPython 3.9.6が入っていました。これは、標準で入っていたわけではなく、Xcodeをインストールした時についでに入ったものです。（[1 MacでPython3の開発環境を構築する（Command Line Tools for Xcodeによるインストール）](https://zenn.dev/sexy_fujii/articles/f6ffa615d0e018)

しばらくこれを使っていましたが、Pythonプログラミングの本に従ってやってみようとしたら出来ないことが出てきて、ちゃんと環境を作ろうと思いました。Python 3.9.6はこのまま置いておきます。

## ２ Pyenvはどうするか
PyenvはPythonのバージョン管理を行うツールで、これを使うならPyenvをインストールしてそれを使用してPythonをインストールすることになります。複数のプロジェクトでPythonのバージョンを変えて並行して開発しているプロなら必要なのでしょうが、私には要らないかなぁと思い、Pyenvは使わないことにしました。Python3に含まれているvenvは使うかも。

## ３ HomebrewでPythonをインストール
MacにPythonをインストールするには、[Python公式サイト](https://www.python.org/)からダウンロードした.pkgを使用する方法と、Homebrew（パッケージ管理ソフト）でインストールする方法があります。今回はHomebrewで入れることにしました。Homebrewをインストール後、
```
brew install python
```
これでPython 3.12.2が入りました。

この時点では、Homebrewでインストールしたコマンドの在り処までパスがとおっておらず、ターミナルでpython3と打つと前からあるPython3.9.6が起動する状態です。

## ４ HomebrewでインストールしたPythonを使いやすくする
まず、パスの設定。/etc/paths を編集して一番上に/opt/homebrew/bin を追加しました。

```txt:/etc/paths
/opt/homebrew/bin
/usr/local/bin
/System/Cryptexes/App/usr/bin
/usr/bin
/bin
/usr/sbin
/sbin
```
/opt/homebrew/bin　にはHomebrewで入れたものが入っており、前からあるpython3は/usr/bin に入っていますので、ターミナルでpython3と打てばHomebrewで入れたものの方が優先されるようになりました。

あるいは別の運用方法として、コマンドpython3で前からのPython3、コマンドpythonでHomebrewのPython3を起動する使い分けもできます。その場合、/opt/homebrew/bin の中にある、python関連の一部のファイル（エイリアス）の、ファイル名を変更すればよいかと思います。
``` 
mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python
mv /opt/homebrew/bin/python3-config /opt/homebrew/bin/python-config 
mv /opt/homebrew/bin/pip3 /opt/homebrew/bin/pip
```
パスの設定などは、[3 HomebrewでPython3をインストールする設定諸々](https://skume.net/entry/2022/01/19/060000) を参考にしました。

## ５ Tkinterが使えるようにする
１で書いた「出来ないことが出て」というのはTkinterがうまく動かなかったため。その対応で、Homebrewでpython-tkをインストールしました。アップルのTcl/Tkには不具合があるようです（[4 IDLE and tkinter with Tcl/Tk on macOS](https://www.python.org/download/mac/tcltk/))。[5 新しいMacの環境にしてtkinterがうまく動かない時に試したことのメモ](https://zenn.dev/takudooon/scraps/947c7ce90a7387) と [6 macOS Monterey 12.6でtkinter(tcl-tk)をちゃんと動かす](https://qiita.com/Shibu-Shin/items/2fcb02f53026a5e9af7e) を参考にしました。

## ６ 参考
1. [MacでPython3の開発環境を構築する（Command Line Tools for Xcodeによるインストール）](https://zenn.dev/sexy_fujii/articles/f6ffa615d0e018)

2. [Homebrewのインストール](https://qiita.com/zaburo/items/29fe23c1ceb6056109fd)

3. [HomebrewでPython3をインストールする設定諸々](https://skume.net/entry/2022/01/19/060000)

4. [IDLE and tkinter with Tcl/Tk on macOS](https://www.python.org/download/mac/tcltk/)

5. [新しいMacの環境にしてtkinterがうまく動かない時に試したことのメモ](https://zenn.dev/takudooon/scraps/947c7ce90a7387)

6. [macOS Monterey 12.6でtkinter(tcl-tk)をちゃんと動かす](https://qiita.com/Shibu-Shin/items/2fcb02f53026a5e9af7e)
web3開発者を目指すためのSolidity勉強方法

## スマートコントラクトの特徴

- Solidityによるスマートコントラクトは「サーバーサイドの開発」というイメージに近い。ただし従来のサーバーサイド開発と大きく異なるのは、自分たちで個別のサーバー（あるいはDB）を用意せず、**Ethereumメインネットワーク(あるいは他の通貨のネットワーク)を世界で唯一のサーバーとして共有**する。

:::note
💡 ReduxやVuex等のFLUXに基づいたState Management(状態管理)の経験がある方には、Single State Of Truth（「信頼できる唯一の情報源」）という言い方が分かりやすい。EthereumメインネットワークをSingle State Of Truthとするのがスマートコントラクト開発。
:::

- **スマートコントラクトは一度Deployしたら修正できない。**ブロックチェーン的な特徴と言える。例えばスマートコントラクトにセキュリティ上の問題点があった場合、新しくスマートコントラクトをDeployし直すしかない
- **スマートコントラクト上でコードを実行するのには費用がかかる**。上記で紹介したように全員で一つのサーバーを共有するので、余計な処理やデータ転送でネットワークが重くなるのを避けるためにこのようにコードの実行に課金されるように設計された。つまり、**メモリ単位でのコードの最適化が求められる**（冗長なコードを書くとユーザーに余計なお金を払わせることになってしまう）。昨今の可読性を重視してフロントエンド的な書き方とは対照的で、むしろCやJavaのような古い言語の書き方や競プロの書き方に近い
- Solidityはどんな言語に似ていると言えるか。SolidtiyはJavaScriptをベースに開発され、大元の記法は共通している。しかし、**厳格な静的言語であるSolidityと、動的言語であるJavaScriptでは埋められらない隔たりがある**というのが個人的な所感。**むしろTypeScriptに近いと言った方が正確**


:::note
◎「SolidtiyはJavaScriptを元に開発された」
△「正：「SolidtiyはJavaScriptに似た言語である」
◯「SolidityはTypeScriptの経験があるエンジニアと親和性が高い」
:::



## 求める能力的な要件

### 必須要件

- プログラミングやComputerScienceのバックグラウンドがある

:::note
個人的な所管ですが、Pythonで競プロをやっていた方や、研究の手段としてプログラミングをしていた方は親和性が高いと思います。
:::

- Solidityで「セキュアかつある程度最適化された」スマートコントラクトが実装できる

- 英語で情報集することに抵抗がない（ある程度は英語での情報収集が必須になるため。ただし、研究で使用するような英語よりは遥かに容易）

### 望ましい要件

- Reactによるフロントエンド開発の経験（業務レベルでなくて良い）


:::note
Reactのキャッチアップについては現状では必要ないですが、希望者には別途ご案内します。僕がReact入門の電子書籍出そうと思っているくらいなので、最短のフローをご案内できます
:::

- [Moralis](https://moralis.io/)を利用してNFTマーケットプレイスの実装ができる
    - Moralisの使い方
    - MoralisのDB設計

:::note
Moralisとは簡単に言うとDapps開発を簡易化するためのサービスです（Web3におけるFirebaseのようなものです）。
開発の工数を大幅に削減できます。
ただし、スマートコントラクトの実装はどのみち必須です。
:::

## 具体的な実装予定の機能

NFTマーケットプレイスを開発します。

リリースに必要な最小限度の機能（いわゆるMVP）から始めて、ユーザー間でのC2Cな二次流通機能、ボンディングカーブ等の高度な機能の実装を予定しています。

### 初期段階で必須

- NFTのMINT
- NFTのTransfer
- NFTの売買(※Transferとほぼ同じ)

### 将来的に実装したい機能

- NFTの価格のボンディングカーブ
- Programable NFT

## 学習リソース

### まずやるべきこと

[CryptoZombie](https://cryptozombies.io/jp/)

市販の書籍ではSolidityの文法・記法そのものに対して十分な紙幅が割けられていない。Solidityの公式ドキュメントでも推奨されている教材で実装をハンズオンで体験できる。

[https://baasinfo.net/?p=3791](https://baasinfo.net/?p=3791)

### 書籍の紹介

**『[ブロックチェーン実践入門: ビットコインからイーサリアム、DApp開発まで](https://amzn.to/2Xlkivk)』**

「そもそもブロックチェーンとは？ETHの仕様とは」が気になる方向け。ブロックチェーンの基礎やETHの仕様について技術的な側面からインプットしておくとSolidityやDapps開発等の学習効率も良い。

**『[SolidityとEthereumによる実践スマートコントラクト開発 ―Truffle Suiteを用いた開発の基礎からデプロイまで](https://amzn.to/2VIFniW)』(オライリー)**

題名ほどスマートコントラクトについて掘り下げていない。

**『[マスタリングイーサリアム](https://amzn.to/2XnKZPZ)』(オライリー)**

ETHの著者による書籍。有名だが、難解でおすすめできない。

### 公式ドキュメント

常に公式ドキュメントは読むべき。
**公式ドキュメントを理解するためにその他の教材や資料が存在する。**

[Solidity公式ドキュメント](https://docs.soliditylang.org/en/v0.8.7/)

[Solidity公式ドキュメント（和訳）](https://solidity-jp.readthedocs.io/ja/latest/)(ただし、和訳版は多少バージョンが古いです)

[Web3.js公式ドキュメント](https://web3js.readthedocs.io/en/v1.4.0/)

[OpenZeppelin公式ドキュメント](https://docs.openzeppelin.com/openzeppelin/)

## 参考資料

[SolidityとEthereumによる実践スマートコントラクト開発 ―Truffle Suiteを用いた開発の基礎からデプロイまで](https://amzn.to/49J6jQa)
[スマートコントラクトの仕組みと法律](https://amzn.to/48QgSQ3)
[図解即戦力 暗号と認証のしくみと理論がこれ1冊でしっかりわかる教科書](https://amzn.to/48WBdDj)
pyファイルexe化を1クリックで出来るようにする【pyinstaller, bat, Windows】

## 結論
```bat:pyinstaller make exe file.bat
cd /d %~dp0
for %%f in (*.py) do set FILE=%%f
pipenv run pip install pyinstaller
pipenv run pip install -r requirements.txt
pipenv run pyinstaller %FILE% --onefile
pipenv --rm
```
### 動作環境
Windows

## 必要な準備
### pipenvをインストール
```cmd
pip install pipenv
```
### requirements.txtを書く
pyファイルでimportしている、必要なライブラリをrequirements.txtにまとめてください。
（標準ライブラリのみならrequirements.txtは不要）
requirements.txtの書き方は各自でググってください。
requirements.txtはexe化したいpyファイルと同じディレクトリに保存してください。
https://note.nkmk.me/python-pip-install-requirements/

ディレクトリがこういう感じになるかなと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529474/e9b14b39-356b-845b-080f-f19ed98ea8c7.png)
あとはbatを実行すればdistフォルダが出来ますので、その中にお目当てのexeファイルがあるかなと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529474/7ac4186f-572d-8cf7-e5ba-051a65e2e217.png)


## やってはいけないこと
この.batファイル自体の名前を「pyinstaller.bat」という名前にしないこと。
pyinstaller実行時に、pyinstaller.batが参照されるため、無限ループになります。
wsl2 のメモリを制御する

# 放っておくと際限なくメモリを使われる
残っているメモリをすべて使い尽くすしてしまうひどいやつ
（ディスク容量だってかなりもってかれる）

# 上限を設けてやる
場所はc:\user\\[username]の直下に配置
このファイルがない場合は作成してあげる
```.wslconfig
[wsl2]
memory=4GB
```

ふぅ…
エンジニアのためのDeFi勉強方法

DeFiの勉強方法について紹介させていただきます。

:::note
この記事はこんな方にお勧め
🐶「急にDeFi開発へアサインされたエンジニア」
🐱「Web3に本気でのめり込みたい開発者」
🦉「DeFiをガチりたい方」
:::

## DeFiとNFT、Web3について

NFTをきっかけにWeb3へ入った方が多いのではないでしょうか？
僕もその一人です。
しかしながら、NFTはWeb3領域のアプリケーションレイヤーでしかありません。厳密にはアプリケーションレイヤーのアプリケーションレイヤーです。
NFTはWeb3のマスアダプションを実現するポテンシャルを秘めた分野ですが、Web3の表層でしかありません。
事業者間ではとっくに知れ渡っていますが、NFTだけではもはや先がありません。
Web3に本気で貼りたいなら、まずコインやDeFiについて本気で勉強しましょう。


## 勉強方法

### Binance Academyで基礎知識を叩き込む

コインやDeFiの記事を片っ端から読みましょう。
紙に印刷して、ペンで線を引きながら読むのがおすすめです。

▼例
- [仮想通貨とは？](https://academy.binance.com/ja/articles/what-is-cryptocurrency)
- [流動性とは？](https://academy.binance.com/ja/articles/liquidity-explained)
- [Liquidity Pool (LP) トークンとは?](https://academy.binance.com/ja/articles/what-are-liquidity-pool-lp-tokens)
- [分散型取引所(DEX)とは？](https://academy.binance.com/ja/articles/what-is-a-decentralized-exchange-dex)
- [仮想通貨取引戦略に関する初心者ガイド](https://academy.binance.com/ja/articles/a-beginners-guide-to-cryptocurrency-trading-strategies)
- [全てのDeFi投資家が知っておくべき7つの指標](https://academy.binance.com/ja/articles/7-indicators-every-defi-investor-should-know)
- [PancakeSwapガイド](https://academy.binance.com/ja/articles/a-guide-to-pancakeswap)
- [ステーブルコインとは?](https://academy.binance.com/ja/articles/what-are-stablecoins)
- [マーケットメイカーとマーケットテイカーについての解説](https://academy.binance.com/ja/articles/what-are-makers-and-takers)
- [分散型金融（DeFi）の完全入門ガイド](https://academy.binance.com/ja/articles/the-complete-beginners-guide-to-decentralized-finance-defi)
- [Liquidity Pool (LP) トークンとは?](https://academy.binance.com/ja/articles/what-are-liquidity-pool-lp-tokens)


### 主要DeFiプロトコルの公式Documentを読解する

「他人に説明できる」ことを目指して読解しましょう。
僕はNotionにまとめることが多いです。


- [PancakeSwap](https://docs.pancakeswap.finance/)
- [SushiSwap](https://docs.sushi.com/)


### 主要なDeFiプロトコルをユーザーとして触ってみる

十分に機能や仕組みを理解したら、一ユーザーとして実際に触りましょう。
Testnetに対応しているものばかりではないので、私財をある程度使います(数千~数万円程度でもOK)。
未来への投資です。ただし、あくまで勉強のためと割り切り、儲けようと思わないように心がけましょう。
それが唯一の溶かさないコツです。


### 主要なDeFiプロトコルのGithubレポジトリをクローンして触ってみる

主要なDeFiプロトコルは基本的にスマートコントラクトがGithub上で公開されています。
それだけでなく、フロントエンドやバックエンドのコードまでOSS化されていることも珍しくありません。
もっと言うと、マイナーチェーンのDeFiプロトコルはそれらをフォークしてガワだけ変えたものであることが多いです。

- [PancakeSwap](https://github.com/pancakeswap)
- [Sushiwap](https://github.com/sushiswap)


### その他おすすめの記事
[DEXの歴史とAMMの概要、x*y=kについて（PancakeSwap勉強会①）](https://qiita.com/ksuhara/items/fc23ca9bea203f795054)

[PancakeSwapのコントラクトの全体像（PancakeSwap勉強会②）](https://qiita.com/ksuhara/items/8e6fdc4da527e77692de)




## 参考資料

[SolidityとEthereumによる実践スマートコントラクト開発 ―Truffle Suiteを用いた開発の基礎からデプロイまで](https://amzn.to/49J6jQa)
[スマートコントラクトの仕組みと法律](https://amzn.to/48QgSQ3)
[図解即戦力 暗号と認証のしくみと理論がこれ1冊でしっかりわかる教科書](https://amzn.to/48WBdDj)
AWS Lambda の alias と $LATEST をそろそろ理解する

Lambda の function versionについて、流石にそろそろ理解する。

## Function version のまとめ

- `$LATEST`
- version 4
- version 3
- version 2 <- alias `dev` とか
- version 1


ここで、`$LATEST`をpublishすると、、、

- `$LATEST` (現在 versinon5 との差分はなし)
- version 5
- version 4 
- version 3
- version 2　<- alias `dev` は変更なし
- version 1

🌟🌟🌟 **`$LATEST` は aliasではない！**

なお、Lambdaをfunction versionを指定せずに呼び出すと、`$LATEST`が呼び出される。

## Provisoined concurrency について

alias (e.g. `dev`)の指定は可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534442/3a846e36-6141-97e5-187b-fb2810fe4c95.png)

特定バージョン(e.g. `version 4`)も可能である。
しかし、`$LATEST` の指定は不可能である。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534442/b5e17013-7910-1288-24df-7da77d4dbe1e.png)
AWS勉強備忘録1

## 仮想化のメリット

仮想化技術は、物理的なハードウェアリソースをソフトウェアで模倣し、複数の仮想マシンを同時に可能にする。その主なメリットは以下の通り

- **柔軟性とコスト削減**：物理的なハードウェアに依存しないため、CPU、メモリ、ストレージの追加や複製が容易。
- **スケーラビリティ**：需要に応じてリソースを動的にスケールアップ・ダウン可能。
- **冗長化と高可用性**：ソフトウェア的にサーバを複製・増設し、システムの冗長化が容易に実現可能。

## 分散処理

分散処理は、処理を複数のサーバーに分散させて実行する技術である。これにより、アプリケーションの処理能力と耐障害性が向上する。

## ロードバランサーとELB

AWSのElastic Load Balancing（ELB）は、複数のサーバー間で入ってくるトラフィックを自動的に分散させるサービスである。ELBを利用することで、アプリケーションの可用性と耐久性を向上させることが可能。

## アベイラビリティーゾーンについて

アベイラビリティーゾーンは、物理的に分離されたデータセンターを指し、AWSではこれを利用して高可用性を実現する。複数のアベイラビリティーゾーンにインスタンスを分散配置することで、一つの場所に障害が起きても他の場所でサービスを継続可能。

## 機能としてのサーバと物理的なコンピュータとしてのサーバの違い

「サーバ」という言葉は、特定の機能（例：Webサーバー）を提供するソフトウェア、またはそのソフトウェアが動作する物理的または仮想のコンピューターのいずれかを指す。 

## コンピュータ内のサーバ

サーバーは物理的な障害が発生した場合に、サービスの提供を停止するリスクがある。AWSなどのクラウドサービスでは、冗長化やバックアップを通じて、このようなリスクの軽減を図っている。

## サーバ用のOS

代表的なサーバ用OSにはLinux（例：Ubuntu、CentOS）とWindows Serverがある。Linuxはオープンソースでコストが低く、カスタマイズ性が高い一方、Windows Serverは使いやすいGUIとMicrosoft製品との高い互換性を提供する。
書籍「3ステップでしっかり学ぶ MySQL入門」レビュー

# 初めに
この度、「3ステップでしっかり学ぶ MySQL入門」という本をWINGSプロジェクト様よりご恵贈いただきました。

https://wings.msn.to/index.php/-/A-03/978-4-297-13919-3/

この本についてレビューしていきます。
しかし、まだ5章までしか読了出来ていないので、読み進めていくに従ってレビューも更新していこうと考えています。

# 全体を通した感想
データベース、MySQLの基本を掴みたい方に適した本だと思います。
しかし、5章から段々発展的な内容になって来るので、基本はわかっているという方がもう一歩先のステップに進むための本としても役立つと思います。

ここからは、大きく3つに分けて本書の良いところを書いていきます。
### わかりやすい
これは「3ステップでしっかり学ぶ」シリーズの他の本にも言えることですが、文字が大きく重要な所は色分けされていて図解されている部分も多くわかりやすいです。
プログラミング特有の概念やコンピューターの中という、実際に見ることのできない部分を想像するのに図解がとても役立ちます。

### 到達度をチェックしながら進められる
各単元の最後には「まとめ」が書かれており、要点を復習することが出来ます。
そして、各章末には練習問題が付いており、各章の理解度を確認できます。
練習問題に付いている「ヒント」には問題が解けない場合にどの単元に戻れば良いか書かれています。

### ポイントを押さえたサンプルコード
本書にはすべての単元にサンプルコードがあります。（同じものをダウンロードして実際の動きを簡単に確認することもできます。）
一つの命令ごとに「この命令を入れるとどうなるのか」の解説があり、読者がこれから実践的にMySQLを使えるように教えてくれている感じがします。

# 最後に
本書はMySQL初学者、データベース初学者、また、専門書を読みなれていない方に特にお勧めしたい本です。
初学者向けとはいえ難しそう…と思った方も、前単元に戻ったりしながら熟読していけば内容を理解できるのではないかなと思います。

最後までお読みいただきありがとうございました。
異なる数理モデル同士を一つのものにする方法


異なる数理モデル同士を一つのものにする方法



異なる数理モデルを統合して一つのモデルにする方法は、モデルの性質や目的によって異なります。


モデルの統合には慎重な計画と実験が必要であり、モデルの性能を評価するための適切な評価基準を使用することが重要です。また、モデルの統合が目的に合致し、性能向上に寄与することを確認するための検証が重要です。

以下に、異なる数理モデルを統合する一般的な方法とアプローチを紹介します。



## アンサンブルモデル:
異なる数理モデルを統合する最も一般的な方法は、アンサンブルモデルを作成することです。アンサンブルモデルは、複数のモデルの出力を組み合わせて予測を行うモデルです。アンサンブルモデルを作成する方法には次のものがあります。

## 平均化:
異なるモデルの予測値を単純に平均化する方法です。これにより、異なるモデルの予測を統合できます。

## 重み付け平均: 
異なるモデルに異なる重みを割り当てて、それぞれのモデルの予測を重み付け平均する方法です。性能が良いモデルに高い重みを与えることができます。

## スタッキング: 
なるモデルの予測を入力として、新しいモデルをトレーニングする方法です。この新しいモデルは、異なるモデルの予測からパターンを学習します。

## ドメイン適応:
異なる数理モデルが異なるドメインや条件で有効な場合、ドメイン適応技術を使用してモデルを統合できます。ドメイン適応は、モデルを新しい環境に適応させるための手法であり、異なるモデルのドメイン適応を組み合わせて使用できます。

## 特徴エンジニアリング:
異なるモデルが異なる特徴を使用する場合、特徴エンジニアリングを行い、共通の特徴を抽出して異なるモデルに供給できます。共通の特徴を使用することで、モデルの統合が容易になります。

## 複雑なモデルの統合:
異なるモデルが複雑である場合、モデルの統合にはより高度な手法が必要かもしれません。例えば、深層学習モデルのアンサンブルを作成する場合、異なるモデルの出力を統合するためのニューラルネットワークを設計することが考えられます。
ORACLE MASTER Silver DBA【合格体験記】

### はじめに
上司にORACLE MASTER Gold DBAを取得してほしいと言われたので、まずはSilverをと思い受験しました。

### 勉強について
- 期間
約二か月
- 勉強方法
[オラクルマスター教科書 Silver DBA Oracle Database Administration I ](https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E6%95%99%E7%A7%91%E6%9B%B8-Silver-Oracle-Database-Administration/dp/4798166359/ref=rw_dp_pbnx_fo_thb_2)を5周ほどいたしました。
また、[oracle公式のウェビナー](https://blogs.oracle.com/oraclemaster/post/om-campaign2024)に参加しました。

### 試験について
- 試験方式
オンライン受験にしました。テストセンターが埋まっていたので仕方なく、。
- 困った点
試験官が外国人ということもあり、英語での指示は焦りました。
- 難易度
参考書の問題より難しく感じました。

### 最後に
資格勉強を通してDBについて理解が深まり、自信が付きました。
oracle dbを触られている方でしたら、取得して損はない資格だと思います！
rexcornuで約半年インターンしてみて



最近寝不足気味なインターンの上村です。IT系専門学校に通う1年生で、2025年3月卒業予定のため、現在絶賛就職活動中です。

そんな私ですが、インターンを始めて約半年経つので、その振り返りをしてみたいと思います。

## はじめに：インターンをすることになったきっかけ
私が通っているのはIT系の専門学校で、2年で卒業になりますので、入学して早々に就職を意識しなければなりません。このため、昨年の夏ごろに、学生のうちに実務経験を積んでおき、就職活動もそうですし、社会人になってから実際に会社でチーム開発などに携わった際の対応力などを磨いておきたいと思い、インターンで実務経験を積めるといいなと思っていました。

その折に、rexcornuでインターンを募集しているお話を聞き、応募したところ、参画させてもらうことになりました。

## これまでにやってきたこと

**作業環境のセットアップ**
rexcornuでは、インターン生の作業環境として、仮想デスクトップ環境が提供されています。まずはこの仮想デスクトップ環境のログインなどの基本的な操作に慣れるところから入りました。尚、開発に必要なVS Codeについてはインストールだけは最初にしてありましたので、Git連携などのセットアップをしました。この仮想デスクトップ端末にインターネットから不正アクセスをされないように、Webで記事を調べたりしながら、ログインの際のパスワードの強化や接続ポート番号をデフォルト値から変更するといったセキュリティ強化の対応をしてみました。

この他、rexcornuでは、全社やチーム開発のコミュニケーション環境として、Google Workspace、Slack、Confluenceなどのサービスが提供されています。また、ソースコードの管理はGitHubで行なっていますので、まずはこれらの登録を行い、開発作業に入れる準備をしました。

初めてのインターンで、あまりこうしたツールやサービスの操作に慣れていなかったので、セットアップに苦戦して、開発に入るまでにかなり時間がかかってしまったことを覚えています。

**新規プロジェクトに参画して開発を実施**
rexcornuでは、幸運なことに新規サービス開発のプロジェクトに参加することができました。このプロジェクトでは、開発者も含めてプロジェクトが初めてというメンバが複数名いたこともあり、本格的に開発をする前に、まずは開発チームビルディングの一環として、TODOアプリケーションのチーム開発をしてみようということになりました。

作ったTODOアプリケーション自体は、React.jsを使ったフロントエンドのみのプロトタイピングのような簡単なものではありましたが、この後に予定されている、実際の新規プロジェクトのアプリケーション開発のプロセスを意識して、1週間のスプリント期間のスクラム開発を行いました。このスプリント開発の中では、一週間でどのようなことを目的として行動するかの共有や、不明な点の報告、誰がどの部分の開発を行うかの役割分担等を、定期的なMTGですり合わせながら進み、普段の学生生活では経験したことのない実務ならではの感覚を味わうことができ、当初インターンに参画しようと思った目的に近いことができていることを実感しました。

rexcornuでは、プロセスや仕組みが整備されていて、私のようにあまり開発経験のない人でもチーム開発に溶け込んで行けますので、とても良い環境だと思いました。

**振り返りの開催**
スクラム開発では、スプリントが終わるタイミングなどで振り返りをすることになっています。この振り返りでは、一般的な振り返り方法の一つであるKPT（Keep、Problem、Try）法が採用されています。ミス等の発生した問題（Problem）を明確に資料として残す事でチームメイトへの共有はもちろん、それを踏まえた改善（Try）として対策まで明確にすることで、次の開発にその教訓を活かすことができます。また、それだけではなく、うまくできたこと（Keep）を認識することで、ポジティブな気持ちでチーム開発をすることができるようになります。チーム開発を行う際は、振り返りを定期的（スプリント周期にあわせて）に開催しておくと、スプリントをこなすに連れてチームが学習して成長していけるということを実感し、ただ開発して物を作るだけではなく、こういうプロセスをしっかりみんなでやっていくことが重要なものだと認識できました。

## 今後やっていきたいこと
すでに年明けから新規プロジェクトの開発が本格的に始まってきているので、そこでしっかりと自分の担当であるフロントエンドのReact.jsの開発をやり切って、開発者としてどんどん自信をつけていきたいと思っています。

## これからインターンを考えている学生の皆さんに向けて
インターンへ参加するにあたって一番の目標が、自分以外の人がいる状況での開発や実社会の経験に慣れるといったものでしたが、今回の約半年間のインターンで、スクラム開発で役割分担をしながら開発をしたり、定期的なMTGを通して社会人の皆さんと仕事のコミュニケーションをとることで、社会人に必要なものが身についてきた実感が湧いています。
インターンに参加してみてはじめて気づくこともたくさんありましたので、もし、これからインターンに参加されるか悩んでいる方は、思い切って参加してみるときっと思ったよりも多くのことが得られると思います。

## おわりに
rexcornuでは、これからの会社の成長を共にしてくれる仲間を募集しています。

https://www.rexcornu.com/career

https://www.wantedly.com/companies/company_9295588/projects

https://www.rexcornu.com/

https://c.tech-match.net/