OmniAICreator/Qiita-1.07M huggingface dataset:
Pythonでエニグマシミュレータを作成

# はじめに
Qiita 初投稿です。

映画「[イミテーション・ゲーム/エニグマと天才数学者の秘密](http://imitationgame.gaga.ne.jp/)」で、エニグマが登場し興味があったので、Pythonで実行しました。

githubにてライブラリを公開しました。

https://github.com/kazumamatsu/enigma_sim

# 目次
# エニグマの仕組みについて
参考記事
- エニグマとは：[Wikipedia-エニグマ (暗号機)](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%8B%E3%82%B0%E3%83%9E_(%E6%9A%97%E5%8F%B7%E6%A9%9F))
- エニグマの仕組み：[たった1枚の紙でナチス・ドイツの傑作暗号機エニグマを再現できる「Paper Enigma Machine」を使ってみた](https://gigazine.net/news/20201123-paper-enigma/)


# 使用方法
pipにてライブラリをインポート
```
pip install git+https://github.com/kazumamatsu/enigma_sim.git
```

```python
import enigma
```

３つのローターの初期値と乱数の設定
```python
config = list("AAA")
seed = 100
```

#### 暗号化
インスタンスオブジェクトを作成し、
```python
E = enigma.enigma(config[0], config[1], config[2], seed = 100)
text = list(str.upper(input()))
code = []
for t in text:
  code.append(E.typing(t))
print(text)
print(code)
```
「JAPAN」を暗号化すると、
```python
>>> JAPAN
>>> ['J', 'A', 'P', 'A', 'N']
>>> ['W', 'U', 'Z', 'H', 'W']
```
「WUZHW」になります。

#### 復号化
再度、同様の設定でインスタンスオブジェクトを作成し、
「WUZHW」を入力すると、
```python
E = enigma.enigma(config[0], config[1], config[2], seed = 100)
decode = []
for t in code:
  decode.append(E.typing(t))
print(decode)
```
```python
>>> ['J', 'A', 'P', 'A', 'N']
```
「JAPAN」に戻ります。

#### 補足
途中結果を表示したい場合、```.dec_print(ptype)```を実行します。

```python
E = enigma.enigma(config[0], config[1], config[2], seed = 100)
text = list(str.upper(input()))
code = []
for t in text:
  code.append(E.typing(t))
  E.dec_print(ptype = 0) #<-- ココ
print(text)
print(code)
```

出力は、
```python
>>> JAPAN
>>> J -> Y -> H -> Q -> K -> G -> Z -> L -> W
>>> A -> B -> P -> K -> D -> R -> J -> O -> U
>>> P -> E -> N -> Z -> A -> M -> E -> B -> Z
>>> A -> H -> M -> H -> F -> A -> O -> I -> H
>>> N -> E -> P -> K -> D -> R -> J -> R -> W
>>> ['J', 'A', 'P', 'A', 'N']
>>> ['W', 'U', 'Z', 'H', 'W']
```
となります。

```.dec_print(ptype = 1)``` の場合、
出力は、
```python
>>> JAPAN
>>> J -> W
>>> A -> U
>>> P -> Z
>>> A -> H
>>> N -> W
>>> ['J', 'A', 'P', 'A', 'N']
>>> ['W', 'U', 'Z', 'H', 'W']
```

となり、各ローターでの途中結果が省略されます。
LaravelのCache用のDynamoDBテーブルを構築するCloudFormation

```
AWSTemplateFormatVersion: '2010-09-09'
Description: "Create DynamoDB Table for Laravel Cache"

Parameters:
  DynamoDbTableName:
    Description: DynamoDB Table Name
    Type: String
    Default: cache
    
Resources:
  LaravelCacheTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: !Sub "${DynamoDbTableName}"
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      TimeToLiveSpecification:
        AttributeName: expires_at
        Enabled: true
      BillingMode: PAY_PER_REQUEST
```
- DynamoDBのテーブル名は cache で作るか、他のテーブル名にするならLaravelのenvファイルの DYNAMODB_CACHE_TABLEの値も書き換える。
- DynamoDBテーブルのメインのキーの名前を key に設定し、SortKeyは未設定。
- TTL用に expires_at を設定。ただし、DynamoDBでは特性上その時間になってもすぐに消えてくれずに48時間くらい残る事もあるが、
https://github.com/laravel/framework/blob/9.x/src/Illuminate/Cache/DynamoDbStore.php の isExpiredメソッドにて、LaravelのCache経由ならexpires_atが期限切れの場合、ちゃんと期限切れ扱いとなるように対応されている。


## artisan tinkerで検証
```
php artisan tinker
>>> Cache::store('dynamodb')->put("test", "hogehoge", 60);
// Laravelのconfig/cache.phpのprefixがデフォルト内容であれば、
// DynamoDBのテーブルには laravel_cache_:test のキーで60秒間保持される。
```

## IAMロールをEC2にアタッチした場合
DynamoDBを操作可能なIAMポリシーを持つIAMロールをEC2にアタッチした場合、DynamoDBを使うconfig設定として、Laravelのconfig/cache.phpのdynamodbの箇所の、key, secret, endpointをコメントアウトするとLaravelからDynamoDBが利用出来る。
```
'dynamodb' => [
    'driver' => 'dynamodb',
    // 'key' => env('AWS_ACCESS_KEY_ID'),
    // 'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
    // 'endpoint' => env('DYNAMODB_ENDPOINT'),
],
```
音声で神経衰弱をするPGM

<h3>音声で神経衰弱をするPGM</h3>
コマンドラインから音声で神経衰弱をするPGMをPowerShellで作りました

<hr>
githubURL:https://github.com/NanjoMiyako/SinkeiSuijaku

<hr>
スクリーンショット1: https://github.com/NanjoMiyako/SinkeiSuijaku/blob/main/scn4.png

<hr>
使い方
powershellPGMの神経衰弱用のファイルカードパスの設定(SinkeiSuijaku.ps1の74行目)をし、
コマンドラインから以下の種類のコマンドを入力します

***:終了コマンド
*-:残りのカードを再シャフル
数値A-数値B:A番目とB番目のカードを引く

すべてのカードを裏返すとゲーム終了します

<hr>
参考サイト
<a href="https://blog.serverworks.co.jp/powershell-to-speak-voice">PowerShellで音声合成を試してみた - サーバーワークスエンジニアブログ</a><br>
<a href="https://hake.hatenablog.com/entry/20161230/p1">PowerShell - 関数（値渡しと参照渡し） - hakeの日記</a>
Windows11にしたのでWSL使ってみました

# はじめに
高専の卒業研究で、世の中のライブラリを色々使わせてもらってます。
その中で環境構築をしなくてはならないんですが、Windowsでは不便なことが多いと教わりました。
「代わりにWSLを使ってみたら？あとWindows11にしても良いよ」ということでチャレンジしてみました。

## Windows11へアップデート
https://www.microsoft.com/ja-jp/software-download/windows11/

ここからインストールアシスタントをダウンロードして、進めるとWindows11になります。システム要件は確認してください。

## WSLについて
WSLはWindows Subsystem for Linuxの略で、Windows上でLinuxを動作させる環境のことです。

## WSLのインストールの前に

WSLを使っていくうえで、Windows側で設定する項目を紹介します。
まず「Windowsの機能の有効化または無効化」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539025/4d164146-774f-7a83-7297-17a10ba84454.png)
そこで、以下の項目を有効化した後にPCを再起動します。
- Linux用 Windows サブシステム
- Windowsハイパーバイザープラットフォーム
- 仮想マシンプラットフォーム

## WSLのインストール
基本的にWSLは既に入っていると思います。
入っていない場合は、まずコマンドプロンプトを管理者として実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539025/5cd299dd-1014-e1fe-a1b0-e7b1ba792ef5.png)
以下のコマンドを実行します。
```shell
wsl --install
```

既にインストールされていれば、以下のような応答が返ってきます。
```
Linux 用 Windows サブシステムは既にインストールされています。.

インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。

NAME               FRIENDLY NAME
Ubuntu             Ubuntu
Debian             Debian GNU/Linux
kali-linux         Kali Linux Rolling
SLES-12            SUSE Linux Enterprise Server v12
SLES-15            SUSE Linux Enterprise Server v15
Ubuntu-18.04       Ubuntu 18.04 LTS
Ubuntu-20.04       Ubuntu 20.04 LTS
OracleLinux_8_5    Oracle Linux 8.5
OracleLinux_7_9    Oracle Linux 7.9
```
## Ubuntuについて
https://ubuntu.com/

UbuntuはLinuxの一種であるOSです。CUIでの操作が一般的です。
ライブラリのインストールではLinuxコマンドが良く紹介されているため、Linuxのコマンドが使えるのがメリットです。

## Ubuntu-20.04のインストール
先ほど行ったWSLインストールの応答の通りにダウンロードすることができます。
```shell
wsl --install -d Ubuntu-20.24
```

Ubuntu-20.24をインストールすると、Ubuntuが起動します。
ここでエラーが発生した場合には、エラーコードに応じて処理を行う必要があります。以下、参考にしてください。
- ? ばかりのエラー文が返ってきた場合
→ 以下のURLのwsl_update_x64.msiでWSLを更新します(64bit版)

https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package

## Ubuntu-20.24のユーザー設定
正常にインストールが終了すると、ユーザー設定に移ります。
ユーザー名、パスワード、パスワード確認を済ませます。

## Ubuntuのホームディレクトリ
ホームディレクトリはC:ドライブ直下ではなく、新たに作られます。
`\\wsl.localhost\Ubuntu-20.04\home\USERNAME`
Lambda で どうしても大きい容量のライブラリが必要な場合

Selenium を動かすときにはまったので、備忘録として。

https://valmore.work/aws-labmda-pytorch/

の内容の追加になります。

## Lambda のレイヤーでは対応できない場合

Lambda のレイヤーを使えば、250MB までのライブラリを比較的簡単にインストールできます。
ですが、250MB 以上になった場合は、どうしても EFS を使って EC2 も使って ライブラリを呼び出す必要があります。

使い方は、

https://valmore.work/aws-labmda-pytorch/

に載っている通りなのですが、いくつかハマるポイントがあるので、それを説明します。

#### 2049番ポートからのアクセスを開放しているセキュリティグループ

EC2 のセキュリティルールで、インバウンド 2049・アウトバウンド全許可のルールを作りましょう。SSH も忘れずに。

#### Lambda への ポリシーのアタッチ

https://valmore.work/aws-lambda-s3/#lambda

にポリシーへのアタッチの方法が書いてあります。
２つ続けて、基本的なことですが。

#### インターネット接続できない

Selenium で何回やっても、空のHTML しか出力されないのでおかしいと思ったら、VPC Lambda を設定する場合は、自分でインターネット接続をできるように設定をしないといけないようです。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/internet-access-lambda-function/

https://qiita.com/kojiisd/items/a15c1807c5c6bb08add0

###### プライベートサブネットの作り方。

??.??.0.0/20 と ??.??.??.0/20 の２つのパブリックサブネットが作られていますが、インターネットに接続するには、プライベートサブネットを作る必要もあります。
そこで問題になるのが、CIDR に何を入れるかです。
自分の場合は、??.??.32.0/20 で動くものができました 。間違っていたりしたら、ご指摘お願いします。

#### その他 Selenium の設定

###### Selenium の設定で、空のHTMLが出力される場合

https://prglog.info/home/?p=521

###### 日本語文字化け対策

/mnt/efs/ 直下で、

https://moji.or.jp/ipafont/installation/

を適用して、Lambda の環境変数を、`/mnt/efs` にすれば直ります。Selenium も ChromeDriver 2.43以降 & Chromium 68以降 だと基本的に EFS 使わないと、250MB超えてしまうので、`.fonts` も `headless` も `/mnt/efs` 配下に置きます。

---

他のものも思い出したら、追記します。
Leetcode 153. Find Minimum in Rotated Sorted Array

# 153. Find Minimum in Rotated Sorted Array

https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/

## アプローチ
### 1. 二分探索 

```java
class Solution {
    public int findMin(int[] nums) {
        int start = 0;
        int end = nums.length - 1;

        while(start < end){
            int mid = start + (end - start) / 2;
            if(nums[mid] > nums[end]){
                start = mid + 1;
            }else{
                end = mid;
            }
        }
        return nums[start];
    }
}
```


### 2. ソート

```java
class Solution {
    public int findMin(int[] nums) {
        Arrays.sort(nums);
        return nums[0];
    }
}
```
AWSにてApacheサーバを構築してみた！(後編)

# AWSにてApacheサーバを構築してみた！(後編)
皆さんこんにちは！
前回はEC2インスタンスの作成まで終了したかと思います！

前編はこちら！↓↓

https://qiita.com/railgun-0402/items/c6b7df1f238228e25dd2


そして今回はいよいよ。。
実際にEC2インスタンスに接続をして行きましょう！

## 1. EC2インスタンスに接続する
まずはWindowsの方はコマンドライン、Macの方はターミナルを開きましょう。
前回作成したpemファイルを覚えてますでしょうか？

このpemファイルを保存したフォルダに移動する必要があります。
以下のコマンドを実行しましょう！

```
$ MV ~/Downloads/「pemファイルの名前」.pem ~/ .ssh/
```
次に権限設定を変更しましょう。
以下のコマンドを実行してください！
```
$ chmod 400 ~/.ssh/udemysample.pem
```

最後に以下コマンドを実行して、SSH接続をしていきましょう。

・「ssh」はSSH接続するコマンド
・「-i」は秘密鍵ファイルを指定
・「xxx」は作成したEC2のパブリックネットワークを設定します

```
$ ssh -i ~/.ssh/udemysample.pem ec2-user@xxx.xxx.xxx.xxx
```

成功すると、以下のようになるかと思います！
![](https://storage.googleapis.com/zenn-user-upload/a53572190b93-20221117.png)

## 2.Apacheをインストール
まずは以下コマンドを実行して、パッケージを更新しましょう。
```
$ sudo yum update -y
```

次にApacheのインストールをしましょう。
```
$ sudo yum install httpd -y
```

成功すると、以下のように「完了しました！」と表示されるはずです。
![](https://storage.googleapis.com/zenn-user-upload/24bb09195d04-20221117.png)

## 3.Apacheを起動
Apacheを起動するには、以下コマンドを実行します。
```
$ sudo systemctl start httpd
```

完了したら、ファイルを移動し
実際に起動するHTMLファイルを作成して行きましょう！

## 4.HTMLを作成
以下コマンドで、場所を移動してください。
```
$ cd /var/www/html
```

試しに「ls」コマンドを実行してみましょう。。
おそらく何も表示されないはずです。

そこでnanoを使用して、HTMLファイルを作成してみましょう！
作成するファイルは適当にsampleとでもしてください。
```
$ nano sample.html
```

作成する内容は任意で大丈夫です！
一応サンプルを貼っておきます！
```sample.html
<html>
<h1>
Hello World!
</h1>
</html>
```

再度「ls」を実行すると、作成したHTMLファイルが存在しているかと思います！

## 5.ブラウザで表示！
では、、、
今作成したファイルをブラウザで表示して行きましょう！

以下コマンドを実行して、起動して行きましょう！
```
$ systemctl start httpd
```

起動後、ブラウザでEC2のパブリックIPアドレスを入力し
検索したら「Hello World!」が表示されれば完成です！

![](https://storage.googleapis.com/zenn-user-upload/f412612e4250-20221117.png)

:::message
最後にサーバを停止させるときは以下コマンドを実行しましょう。
:::
```
$ sudo systemctl stop httpd
```

## 最後に
お疲れ様でした！
簡単にですが、サーバを構築しブラウザに表示させることができました！

デプロイ作業など業務であるかと思いますが、
今回の記事が参考になれば幸いです！

また前編でも記載しましたが、EC2のインスタンスを起動していると
料金が発生するので必ず**停止**か**終了**してください！

:::note alert
料金が継続的にかかってしまうため、
必ずインスタンスの後処理をお願いします！
:::

AWSなどクラウドやインフラについてはまだまだ素人なので、
何かあればご教示いただけますと幸いです！
paiza.ioでelixir その80

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

# 練習問題
dbpediaのsparqlを叩いて、緯度経度で仕切った範囲の地物を地図上に表示せよ。

# サンプルコード

```
: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>
    <style>
.wikidata {
  white-space: nowrap;
  width: auto;
  height: auto;
  background: orange;
  border: 1px solid black;
}
.wikidata.q {
  background: black;
  color: orange;
}
    </style>
  </head>
  <body>
    <h1>dbpedia</h1>
    <textarea id="src" rows="5" cols="50">
"""

query = URI.encode_query(%{query: """

SELECT DISTINCT ?link ?title ?lat ?long
WHERE {
	?link rdfs:label ?title;
	geo:lat ?lat;
	geo:long ?long .
	FILTER (?lat > 37.9 && ?lat < 38.1 && ?long > 139.9 && ?long < 140.1 && lang(?title) = 'ja')
}   
LIMIT 5

"""})
#|> IO.inspect
{:ok, {{_, _, _}, _, body}} = :httpc.request(:post, {
	'https://ja.dbpedia.org/sparql', 
	[{'Accept', 'application/sparql-results+json'}], 
	'application/x-www-form-urlencoded', 
	query
}, [], [])
#|> IO.inspect
body = IO.iodata_to_binary(body)
IO.puts(body)

IO.puts """
</textarea>
    <div id="map" style="width: 300px; height: 300px;"></div>
    <script>
var src = document.getElementById('src');
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);
var responseText = src.value;
var res = JSON.parse(responseText);
res = res.results.bindings;
for (var i = 0; i < res.length; i++)
{
  var lat = res[i].lat.value;
  var lon = res[i].long.value;
  var html = "<span class='wikidata'>" + res[i].title.value + "</span>";
  L.marker([lat, lon], {
    icon: L.divIcon({
      html: html
    })
  }).addTo(map);
}
    </script>
  </body>
</html>
"""


```

# 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/20deb83a-4b02-f350-cb9e-1474e40e206c.png)


# 成果物

https://paiza.io/projects/xSZGHyT3l-tcp2cL-S-i1A?language=elixir


以上。
Leetcode 162. Find Peak Element

# 162. Find Peak Element
https://leetcode.com/problems/find-peak-element/description/?envType=study-plan&id=binary-search-ii
## アプローチ
### BruthForce

```java
class Solution {
    public int findPeakElement(int[] nums) {
        int check = Integer.MIN_VALUE;
        int result = 0;
        for(int i = 0 ; i < nums.length;i++){
            if(check<=nums[i]){
                result = i;
                check = nums[i];
            }
        }
        return result;
    }
}
```
AWSにてApacheサーバを構築してみた！(前編)

# AWSにてApacheサーバを構築してみた！(前編)
Amazon EC2でApacheサーバを構築します。
目標はブラウザにHTMLファイルを表示できることです！
![](https://storage.googleapis.com/zenn-user-upload/76025ad2b023-20221117.png)

## 環境
・MacOS 12.6
・Amazon EC2利用

## 注意事項

:::note warn
今回AWSでEC2サーバを設定しますが、終了後は必ず
インスタンスを停止してください！

インスタンスが実行中になっている間は料金が
発生してしまうのでご注意ください。。
:::

## まずはEC2を起動させよう
### 1.インスタンスを起動しよう
まずはAWSにログインし、**[EC2]→インスタンスの起動**を押下しましょう！
![](https://storage.googleapis.com/zenn-user-upload/3d245d692943-20221117.png)

右上のこれをクリック！↓
![](https://storage.googleapis.com/zenn-user-upload/88874c27790d-20221117.png)

すると以下の画面が出てくるので、以下を設定して行きましょう。。
①名前を決定(インスタンスの名前になりますが、任意の値で大丈夫です)
②今回は**Amazon Linux**を選択します。
![](https://storage.googleapis.com/zenn-user-upload/3c55ab0e70df-20221117.png)


### 2.キーペアの設定をしよう
少し下にスクロールしてください。
インスタンスタイプとキーペアが出てくると思います。

まずインスタンスタイプは**t2.micro**を選択します。
次にキーペアですが、すでに作成しているものがある方は
そちらをご利用ください。

キーペアは安全に接続するために設定するものであり、
未設定は推奨されていないです。

新しく作成する場合は、「新しいキーペアの作成」を押下し
以下のように設定しましょう！
![](https://storage.googleapis.com/zenn-user-upload/48cb6aef5f1c-20221117.png)
作成後、設定した名前と同じPemファイルがダウンロードフォルダに
できると思います。

こちらは後程使用するので必ず分かるように保管してください。

### 3.ネットワーク設定で、SSHやHTTPに接続できるようにしよう
次にSSH、HTTP、HTTPSに接続させる必要があります。
以下の画像を参考に、それぞれのプロトコルにチェックをつけてください。

![](https://storage.googleapis.com/zenn-user-upload/8b38f6b4f563-20221117.png)

注意いただきたいのは、SSHの右にある「任意の場所 0.0.0.0」です。
「0.0.0.0/0」はデフォルトルートとも呼ばれ、
**全てのホスト、任意の宛先を意味します。**

どこにでも接続できるのはセキュリティ的に危険なので、
業務や自分の成果物を正式にあげる際は設定が必須になります。

:::message
SSH接続対象に注意！
:::

### 4. サブネット設定
どこでも同じことを皆さん仰っているかもですが、
サブネットをパブリックに設定しないと、インターネットに接続ができないです。

ではサブネットを設定しましょう！
ネットワーク設定の右の「編集」を押下してください。

すると以下の画面にいくと思います。
![](https://storage.googleapis.com/zenn-user-upload/a63ad869b306-20221117.png)

2つ目の項目に「サブネット」があるかと思います。
こちらをパブリックサブネットにする必要があります。

プライベートは外のインターネットに接続することができません。。
後程インスタンスを起動する際、プライベートIPを使用するとタイムエラーに
なります。

:::message
以下の2つを必ず設定してください！！！
・サブネットはパブリック！
・「パブリックIPの自動割り当て」を「有効化」
:::

### 5. インスタンス完成！
最後に、「インスタンスを起動」を押下しましょう。
少々時間がかかりますが、インスタンスが増えているはずです。

お疲れ様でした！
後編では、作成したEC2へ実際に接続して行きたいと思います！

後編はこちら！↓↓

https://qiita.com/railgun-0402/items/0f983864c82756b3ba32
今すぐesolangを始めるべきただ１つの理由

> esolangをやってない人へ。
>
> あなたがesolangを始めてないのだとしたら、
> 私はとても悲しいです。
> 私はより多くの人にesolangの魅力を知ってもらうべく、この記事を書きます。
>

# あなたが今すぐesolangを始めるべきただ１つの理由

私はesolangに関する記事をいくつか書きました。
その理由は皆さんにesolangをして欲しいからです。

では、なぜesolangを始めるべきなのでしょうか。
それは、**esolangが楽しいから**です。

## esolangを楽しむ
esolangには
残念ながら
実用性はほとんどありません。
ですが、これは大切なポイントです。
もしこれが実用性に溢れた言語だと少し悲しい結果になってしまいます。
せっかくの楽しむためのプログラミングに実用性を求めるようになってしまうからです。

しかしesolangにはその心配はありません。
**なぜなら実用性がないから。**
実用性がないからこそ、プログラミングを楽しむことに集中することができます。

純粋にプログラミングを楽しみたいと言う人は、今すぐesolangを始めるべきです。
この記事を読んでる人はきっとそういうことに興味があると信じています。

純粋にプログラムを楽しむために、あなたもesolangを始めませんか？

# 何から始めたらいい？
esolangには色々な種類がありますが、あなたがやりたいと思ったものを行うのが一番良いでしょう。
あなたの好奇心を、インスピレーションを大切にしましょう。

ただ、本当に全くどれを選べば良いのかわからないのであれば、一番のおすすめはBrainfuckです。

この言語は非常に素直に動きます。
もっとわかりやすく言うとかなり描きやすいです。

pietはコードが二次元上を移動することで難易度は跳ね上がりますし、Lazy Kはコンビネーター演算に対する知識が必要かもしれません。
ですが、Brainfuckは簡単です。
あなたがフローチャートに書いたものを一番わかりやすく反映してくれるものがBrainfuckです。

また、Brainfuckはesolangの象徴的な存在であるため比較的環境が整っています。
そのため学習コストが非常に低いです。
だから、悩んだらとりあえずBrainfuckをしましょう。
メタサーキュラーインタプリタくらいなら簡単に作れる様になると思います。(※個人差があります)

# 最後に
皆さんもぜひ、esolangの世界を味わってみてください。
楽しいですよ。
この複雑怪奇な世界に、どうか参加してみてください。

あと普通にesolangでのコーディングは縛りプレイみたいなものなので、プログラムに対して新しい考え方も持つことができますが、これは本題ではないので割愛します。

>
> 筆者より。

# おまけ
入力された文字の文字コードを調べるコードです。
`^D`で終了します。
Brainfuckで`Hello World`をするときなどにご活用ください。
```brainfuck
,+[-[->>>[-]+[->>[-]<---------[<]-[>]<<+[->--------->+<<]>++++++++++<+>>]+[<<]<]>>>->>[>>]<<[-<++++++++++++++++++++++++++++++++++++++++++++++++.[-]<]<<<++++++++++.----------,+]
```
業界未経験から転職して1年間で学んだこと

# はじめに
オークファン開発部の@Soogle_1729です。
2021年の11月に`製造業からIT業界未経験`で当社へ中途入社してから約1年が経過しました！（ちなみに去年は[こんな記事](https://qiita.com/Soogle_1729/items/74c2d8c1a9f163946f76)を書いてました。）
この1年間で学んだことや身につけたスキルについてまとめと振り返りをしてみたいと思います。

IT業界へキャリアチェンジを考えている方や、実際の業務でどのようなスキルセットが必要になるか気になっている新人エンジニアの方などの参考になればと思います。

# 1年間で学んだスキルセット
業務である程度触れた技術についてザーッと並べてみると下記のような感じです。


```yaml
- バックエンド
  - 言語
    - Kotlin  # バックエンド側でメインで使用している
    - Java
    - Go  # ソースコードを読む程度
    - SQL
  - フレームワーク
    - Spring Boot

- フロントエンド
  - 言語
    - TypeScript  # フロント側でメインで使用している
    - JavaScript
  - フレームワーク
    - Vue.js # Reactとどっちがいい？
    - Vuetify
    - Nuxt.js  

- 仮想化コンテナ
  - Docker  # 基本的に立ち上げる程度でほとんど書かない

- プロジェクト開発
  - 要件定義
  - 基本設計
  - 詳細設計  # 基本的には詳細設計以降を担当
  - 結合テスト/単体テスト # バグだらけのコードを生み出してありがたみを実感

- 設計方針
  - DDD  # 流儀が多岐に渡ってますね
  - REST API  # 深みにハマると抜け出せない
  - Atomic Design  # 画面のオブジェクト指向?

- その他
  - HTTPなどのWebに関する知識  # 認証を実装する中で理解が深まった
  - ドキュメント作成  # 細かく書きたいが保守が大変になるジレンマ
  - クラス図やシーケンス図の書き方
  - PlantUML
  - Git管理 # コンフリクトが起きてからが勝負
  - 脆弱性の調査
```

- バックエンド
    - 主にWeb APIの開発を担当しているので、1番経験したのはSpring Bootを使用した**バックエンドの技術**になります。入社したての頃は、このフレームワークがさっぱりわからなくて、かなり苦労しました。（JavaやKotlinなどの静的型付言語も触れたことがなかったので、、、お察しください。）
    - 今では、フレームワークの使ったことのない技術についても公式ドキュメントを見ながらある程度実装できるようになったと思います。（かなり試行錯誤しますが。。。）

- フロントエンド
    - 次点で触れた技術としては、**フロントエンドの技術**です。私の所属するチームでは、Nuxt.jsを使用してフロント側の開発をしています。
キャッチアップは大変になりますが、**新しめの技術を使って開発できる**というのはとても魅力的だと思います。
    - 画面の実装ができるようになると、**急激に作った感が高まって**楽しくなってきますね。

- その他
    - その他の技術については、この業界に入るまでは存在も知らなかったものばかりですね。
    - プログラムを書く以外の業務がこんなにも存在していたんですね。。。


# 1年やってみた感想
IT業界で1年やってみて**良かったこと**と、**入社前に想像していたIT業界(当社)とのギャップ**について記載します。

## 良かったこと
- プログラムを書く仕事が楽しい
    - 転職した1番の理由が**プログラムを書く仕事をやってみたい**だったので、希望が叶って非常に満足しています。
    - もちろん大変だな〜と思うこともありますが、**自分の書いたプログラムが期待通りに動いた時**は爽快感がありますね。
- スキルが身につく実感が得やすい
    - 自身の技術力の向上がソースコード上に成果物として表れるので、**成長を感じやすい**と思います。
    - 以前はできなかったことができるようになると自然とモチベーションも高まりますよね。
- テレワークが最高
    - 私の所属するチームでは、**週5のテレワークが可能**となり、出社するのは3ヶ月に1度くらいです。（テレワークのルールはそのうち変わるかもしませんが。。。）
    - **通勤のストレスが無い**のは、かなりQOLが高いと実感しました。（会社と自宅が遠いのもあります。。。）


## 想像とのギャップ
- 想像以上に教育してもらえる
    - （正確な定義はわかりませんが、）当社はベンチャー企業だと思って入社したので、入社即OJTが始まりてんやわんやするのだと思っていました。
    - 私の場合はしっかり外部研修まで受講させてもらい、さらに研修用プロジェクトでゆるやかにOJTが始まり、業務になれることができました。
    - チームによると思いますが、かなり細かくコードレビューしてもらい基本が身についた?気がしています。
- プログラムを書く以外の仕事がたくさん存在する
    - 入社するまでは、`エンジニアの仕事 = プログラムを書く`くらいに考えていたのですが、システムを開発するには仕様やスケジュールの調整、ドキュメント作成など想像以上にやることがあると感じました。
    - 調整系の業務などは、前職とあまり変わらないイメージなので、違和感なく取り組めそうです。


# 今後の抱負
まだまだ始まったばかりですが、手広く技術を身につけたいと思っています！
- インフラがさっぱりなので、習得したいですね。（AWS難しいです。。。）
- LinuxなどのCLIに慣れていきたいですね。
- スマホアプリも楽しそうですね。

当社では積極的に採用活動をしているので、興味のある方はぜひ[コチラ](https://aucfan.co.jp/recruit/)をご覧ください！
OmniScript のエラー



# OmniScript でドキュメントを生成する際のエラー

+ [Error Generating Document with OmniScript](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000JerQzSAJ)

最後の最後のステップで、OmniScript をプレビューしてドキュメントを生成するときにエラーを受け取りました。OmniScript に表示されるエラーは、スクリプトが「Failed to execute postMessage on Window.」と述べています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ef7fdfe0-64ea-c656-c600-71134a6b9787.png)

私が従った手順は次のとおりです。

1. セットアップに移動
2. セッション設定の検索
3. セッション設定ページを開く
4. 「Lightning Web コンポーネントに Lightning Web セキュリティを使用する」オプションのチェックを外します
5. [保存] をクリックします
6. ブラウザのキャッシュをクリアする
7.再度サインインして、新しいセッション設定を適用します

ステップ6は私にとって重要でした。サインアウトして、更新されたセッション設定で再度ログインしようとしましたが、更新が有効になったのはキャッシュをクリアするまでではありませんでした。
Git 特定のコミットまでリポジトリの状態を巻き戻す方法（ローカル）

# 概要

- Gitにて特定のコミットまでリポジトリの状態を巻き戻す方法をまとめる。

# 方法

- ローカルリポジトリにて下記コマンドを実行する。

    ```bash
    git reset --hard 戻したいコミットのコミットID
    ```
Ubuntu22.04のsnap版LXD5.0でタブ補完できるようにする

# 概要

Ubuntu 22.04 で snap から LXD5.0 をインストールすると `lxc` コマンドでタブ補完ができずに使いづらいので、手動でタブ補完できるようにする。

## 環境

- OS: Ubuntu Server 22.04 minimalインストール
- LXD: snap版 LXD 5.0.1(5.0/stable)

## やること

1. bash-completion をインストールする
   ```
   apt install -y bash-completion
   ```

2. シンボリックリンクを作成する
   ```
   ln -s /snap/lxd/current/etc/bash_completion.d/snap.lxd.lxc /etc/bash_completion.d/lxc
   ```

## 参考文献

- [[LXD 4.7] Autocompletion on ubuntu 20.04](https://discuss.linuxcontainers.org/t/lxd-4-7-autocompletion-on-ubuntu-20-04/9480/4)
Databricks ( Spark ) にて前方一致したデータベース（スキーマ）を削除する方法

## 概要

Databricks ( Spark ) にて前方一致したデータベース（スキーマ）を削除する方法を共有します。

## 実践例

### 1. 削除対象のデータベースを作成

```python
%sql
create database _test_1;
create database _test_2;
create database _test_3;
create database _test_4;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d696f518-65b8-a50f-42ad-ba692b41a607.png)


### 1. 前方一致したデータベース（例：`_test`ではじまるデータベース）を DROP

```python
db_prefix = '_test'
 
dbs = spark.sql(f"SHOW DATABASES '{db_prefix}*'").select('databaseName').collect()
for db_index in range(len(dbs)):
    db_name = dbs[db_index][0]
    spark.sql(f'DROP DATABASE {db_name} CASCADE')
    print(f'{db_name} is dropped.')
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/34c792e6-d81e-a391-4b6d-9d040d838882.png)
Leetcode 263. Ugly Number

# 263. Ugly Number
https://leetcode.com/problems/ugly-number/description/


# 難易度
 - EASY


# アプローチ
 - Bruthforce


## Java
```java
class Solution {
    public boolean isUgly(int n) {
        if (n == 0) {
            return false;
        }
        if (2 <= n && n <= 6) {
            return true;
        }

        while (true) {
            if (n % 2 == 0) {
                n /= 2;
                continue;
            }

            if (n % 3 == 0) {
                n /= 3;
                continue;
            }
            if (n % 5 == 0) {
                n /= 5;
                continue;
            }
            break;
        }
        return n == 1;
    }
}
```

## Golang
```go
func isUgly(n int) bool {
    if n == 0 {
        return false
    }

    for {
        if n % 2 == 0{
            n /= 2
            continue
        }
        if n % 3 == 0{
            n /= 3
            continue
        }
        if n % 5 == 0{
            n /= 5;
            continue
        }
        break
    }
    return n == 1
}

```
paiza.ioでelixir その79

# 概要
paiza.ioでelixirやってみた。
dbpediaのsparqlを叩いてみた。

# サンプルコード

```
:inets.start
:ssl.start

query = URI.encode_query(%{query: """

SELECT DISTINCT * WHERE {<http://ja.dbpedia.org/resource/東京都> ?p ?o . } LIMIT 3

"""})
#|> IO.inspect
{:ok, {{_, _, _}, _, body}} = :httpc.request(:post, {
	'https://ja.dbpedia.org/sparql', 
	[{'Accept', 'application/sparql-results+json'}], 
	'application/x-www-form-urlencoded', 
	query
}, [], [])
#|> IO.inspect
body = IO.iodata_to_binary(body)
IO.puts(body)


```

# 実行結果

```

{ "head": { "link": [], "vars": ["p", "o"] },
  "results": { "distinct": false, "ordered": true, "bindings": [
    { "p": { "type": "uri", "value": "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }	, "o": { "type": "uri", "value": "http://www.w3.org/2002/07/owl#Thing" }},
    { "p": { "type": "uri", "value": "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }	, "o": { "type": "uri", "value": "http://dbpedia.org/ontology/AdministrativeRegion" }},
    { "p": { "type": "uri", "value": "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }	, "o": { "type": "uri", "value": "http://schema.org/Place" }} ] } }

```

# 成果物


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


以上。
git clone時にログの詳細を確認する

# 前提
* Linux（RedHat系）
* gitlab
* httpsでクローン

# 確認方法

* コマンドの頭に、GIT_TRACE=1 GIT_CURL_VERBOSE=1をつけるだけ。
```
GIT_TRACE=1 GIT_CURL_VERBOSE=1 git clone https//XXXX
```

* httpsではこんな感じのログが出ます。
以下のケースでは、アクセス先から送信されてきたCA証明書の公開鍵暗号強度が弱いためcloneに失敗していた例。
※クライアント側のcrypto-policiesがFUTURE（暗号化強度の要求が高め）だと発生した。DEFAULTに変更すると解消できる。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962888/0e30d676-a719-f479-5685-2e315a0934db.png)
numpy の 型昇格(type promotion) がやばい話

結論: numpy ではちゃんとオーバーフローのめんどうを見ましょう

* `np.__version__ == '1.23.4'`
* 表は index * column の計算結果
* スカラーと `ndarray` で挙動が違う
* オーバーフローしたときの `RuntimeWarning` はスカラー同士の時にしか出ない
* [numpy.result_type](https://numpy.org/doc/stable/reference/generated/numpy.result_type.html) の結果が計算結果の `dtype` 、足し算と掛け算で同じ型を使っているため最悪死ぬ


| = i * j         | 255                           | np.uint8(255)                 | np.uint8([255])               | 257                                | np.uint16(257)                     | np.uint16([257])         | 258                              | np.uint16(258)                   | np.uint16([258])                 |
|:----------------|:------------------------------|:------------------------------|:------------------------------|:-----------------------------------|:-----------------------------------|:-----------------------------------|:---------------------------------|:---------------------------------|:---------------------------------|
| 255             | 65025 <br> int                | 65025 <br> np.int32           | [1] <br> np.ndarray(np.uint8) | 65535 <br> int                     | 65535 <br> np.int32                | [65535] <br> np.ndarray(np.uint16) | 65790 <br> int                   | 65790 <br> np.int32              | [254] <br> np.ndarray(np.uint16) |
| np.uint8(255)   | 65025 <br> np.int32           | 1 <br> np.uint8               | [1] <br> np.ndarray(np.uint8) | 65535 <br> np.int32                | 65535 <br> np.uint16               | [65535] <br> np.ndarray(np.uint16) | 65790 <br> np.int32              | 254 <br> np.uint16               | [254] <br> np.ndarray(np.uint16) |
| np.uint8([255]) | [1] <br> np.ndarray(np.uint8) | [1] <br> np.ndarray(np.uint8) | [1] <br> np.ndarray(np.uint8) | [65535] <br> np.ndarray(np.uint16) | [65535] <br> np.ndarray(np.uint16) | [65535] <br> np.ndarray(np.uint16) | [254] <br> np.ndarray(np.uint16) | [254] <br> np.ndarray(np.uint16) | [254] <br> np.ndarray(np.uint16) |
データアナリストとしてDatabricksを使い始める

[Get started with Databricks as a data analyst \| Databricks on AWS](https://docs.databricks.com/getting-started/sql-quick-start.html) [2022/11/15時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

お使いのデータレイクに格納されているデータに対してクエリーを実行し、ダッシュボードを作成するためにDatabricks SQLをどの様に使うのかを学びます。あなたが、SQLクエリーやBIツールを主に取り扱うデータアナリストなのであれば、Databricks SQLはアドホックなクエリーの実行やダッシュボードの作成において直感的な環境を提供します。

# ユーザー向けクイックスタート

Databricks SQLの主要機能を使い始めて学ぶには、これらのクイックスタートを実施してください。

- [Databricks SQL user quickstart: Import and explore sample dashboards](https://docs.databricks.com/sql/get-started/sample-dashboards.html)
- [クイックスタート： クエリーの実行と可視化](https://qiita.com/taka_yayoi/items/fd0d5e4de3c7f50de617)

# 管理者向けクイックスタート

あなたが、チームがDatabricks SQLを使い始める際に責任を持つ管理者なのであれば、あなたの主要なタスクをガイドするこれらのクイックスタートを実施してください。

- [Databricks SQLのオンボーディングタスク](https://qiita.com/taka_yayoi/items/aca244745439b9d12f2b)
- [ユーザーがテーブルをクエリーできる様にセットアップする](https://qiita.com/taka_yayoi/items/8b6154eb8bfe202951c6)

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
SQL開発者向けDatabricksのご紹介

[Databricks for SQL developers \| Databricks on AWS](https://docs.databricks.com/spark/latest/spark-sql/index.html) [2022/11/15時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

本書では、Databricks Data Science & EngineeringやDatabricks Machine Learning環境でSQL言語を用いたノートブックを開発する際のガイドを提供します。

# Databricks SQL

あなたがSQLクエリーやBIツールを主に取り扱っているデータアナリストなのであれば、[Databricks SQL](https://docs.databricks.com/sql/index.html)を用いることで、お使いのデータレイクに格納されているデータに対して、アドホックなクエリーを実行したりダッシュボードを作成するための直感的な環境を手に入れることができます。Databricks Data Science & EngineeringやDatabricks Machine Learning環境でのノートブックの開発にフォーカスしている本書をスキップし、以下の資料を参照いただくこともできます。

- [データアナリストとしてDatabricksを使い始める](https://qiita.com/taka_yayoi/items/8cda2e2c85ca0ed45286)
- [Queries in Databricks SQL](https://docs.databricks.com/sql/user/queries/index.html)
- [SQL reference](https://docs.databricks.com/sql/language-manual/index.html)

# ユースケース

- [Databricksにおける不正レコード、不正ファイルの取り扱い](https://qiita.com/taka_yayoi/items/81f06dcbcb212892630d)

# ビジュアライゼーション

SQLノートブックでは`display`関数を用いた様々なビジュアライゼーションをサポートしています。

- [新たなビジュアライゼーションの作成](https://qiita.com/taka_yayoi/items/b3f7bd30907967afee17#%E6%96%B0%E3%81%9F%E3%81%AA%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90)

# ツール

Databricksノートブックに加え、様々なサードパーティの開発ツール、データソース、その他のインテグレーションを活用することができます。[Databricks integrations](https://docs.databricks.com/integrations/index.html)をご覧ください。

# アクセスコントロール

以下のドキュメントでは、データベースオブジェクトに対してアクセスコントロールを行うために、どのようにSQL構文を使うのかを説明しています。

- [データアクセスオブジェクト](https://qiita.com/taka_yayoi/items/225c4db5dffa51cbbbae)

# リソース

- [Apache Spark SQL Guide](https://spark.apache.org/docs/latest/sql-programming-guide.html)
- [What is Delta Lake?](https://docs.databricks.com/delta/index.html)
- [Knowledge Base](https://kb.databricks.com/sql/index.html)


### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
複数系列グラフを表示する(SPSS Modeler データ加工逆引き10-4)

# 複数系列グラフを表示する（新グラフ）

![スクリーンショット 2022-11-12 17.38.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/3db1281c-63f0-6751-0d36-b3a47780e36c.png)

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

・時系列データの表示
・クラスタなどのカテゴリ値の比較


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

https://github.com/yoichiro0903n/blue/blob/main/multi-series.str?raw=true

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

![スクリーンショット 2022-11-12 17.44.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/68ec1d16-7540-61b2-efa1-044bb6a2d4bb.png)

入力するデータを確認するため[テーブル]を実行します。
![スクリーンショット 2022-11-12 17.45.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/a9fb78be-7670-e8b8-72e2-5c646584d347.png)

[時系列グラフ]ノードで従来の複数系列グラフを表示します。
![スクリーンショット 2022-11-12 17.47.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c39cdcbd-ff66-7e5b-dd4f-a405cd1e90bc.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-12 17.42.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/dedc1b57-8953-fd69-77a6-a50eb0347e99.png)

*[時系列]は10レコード以上の日付データの分解（時系列分析）を行う際に利用します。逆引き10-5を参照ください。

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

![スクリーンショット 2022-11-12 17.35.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/19281875-f90b-745d-cbc2-264346698e28.png)

![スクリーンショット 2022-11-12 17.35.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2fb54a65-3f6b-c5e1-2990-2f99fc32b996.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
因果関係と相関関係の違い


![4009930_m.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/8b883b7c-1073-0e3b-81a1-9e66cb9aacf8.jpeg)

因果推論が最近流行ってますね。
きっと機械学習やディープ・ラーニングで因果に関しての考察の場が増えた事で話題になってるんだと思います。

重要な言葉の定義として、因果関係と相関関係の違いを把握しておく必要があります。

#　因果関係があるとは
Aという事象でBが起きた時に因果関係があるといいます。
Aが原因でBが結果です。原因の因と結果の果で因果関係と言われてます。（多分。。汗）
事象Aが発生すると事象Bが発生する。事象Aをやると事象Bが発生する。
事象Aは、不可抗力の場合もあれば、意識的な場合もあるかもしれませんが、事象Bは自動的に発生します。こちらは不可抗力の場合が多いでしょう。

# 相関関係とは
相関関係は、AとBが同時に起きた相関が高いという事です。相関係数は、一緒に起きているだけなので、どちらかが原因でどちらかが結果という事ではありません。
「目が覚める」と「顔を洗う」は、相関関係はありますが、因果関係はありません。
因果関係と相関関係の違いは、
「雨が降った」　→　「傘が売れた」
これは、因果関係があります。
「英語が得意」　→　「数学が得意」
これは、因果関係はありません。英語が得意でも数学が苦手な人は沢山います。しかし、勉強ができる人は英語も数学も得意な場合が多いことも事実です。なので相関関係が存在します。

# 因果関係と相関関係の混同の罠
高校の学力テストのデータ分析を行うと、結果として英語の点数が良い人は、数学の点数が良い傾向が高いと出るかも知れません。これは、英語の点数と数学の点数が因果関係しているのではなく、相関として勉強を頑張っている人は、英語も数学も点数が高いという事なので、英語を頑張って勉強すれば数学の点数が上がる訳ではありません。
英語の点数と因果関係があるのは、英語の勉強時間だったり、家庭環境（親が英語喋れたり、海外旅行好き）だったりするでしょう。
この因果関係と相関関係を混同する事で問題なのは、数学の点数を上げるために英語の勉強しても意味がないという事です。逆もしかり、英語の点数を上げるために数学の勉強しても意味がありません。
ここを間違えて対策している事が多いので因果関係と相関関係の混同の罠があると言えます。

# 因果関係の向きにも注目
バスケット分析で有名な「おむつとビールが同時に購入されていた」という有名な話があります。この現象は、おむつとビールが相関が高いという結果です。因果関係でいうと、母親が日常品の買い物時におむつを一緒に買おうとすると荷物が大変なので、父親が別途おむつを買いに行く。そのついでにビールを買っているという因果関係が存在しそうです。（母親、父親の役目がステレオタイプなのは、ここでは、ご勘弁下さい）
しかし、ビールを買うと、おむつを買うという逆の因果関係にしてしまうと、ビールを買う人におむつをゴリ押しして大失敗に終わる恐れがあります。

# それって相関はあるかもだけど、本当に因果関係あるの？
これ言えるとカッコいいですよね。いや、嫌味な奴と思われるでしょうか。。
この図を見て下さい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/6c265f40-6150-47fb-5747-ea0c2930fc0e.png)
夏と気温が高いは、因果関係があります。気温が高いとアイスが売れるは、因果関係があります。
しかし、夏とアイスが売れるは、因果関係がありません。相関関係です。
理由は、夏でなくても、気温が高ければアイスは売れるからです。
これが因果関係と相関関係のややこしい所です。　

# どうすれば、因果関係が見えるのか
「夏」と「アイスが売れる」に相関が見えた時に、もう一歩踏み込んで見ることです。「夏」と因果関係が深い項目を洗い出し、そこと因果関係がないかという見方です。「夏「」と「気温が高い」の因果関係が見えれば、「気温が高い」と「アイスが売れる」にたどり着く事ができます。そーすれば、秋や冬でも「気温が高い」と「アイスが売れる」という因果の法則が導き出せます。

因果関係があるのか相関関係だけなのか注意深く考えてみる癖をつけるのは、問題の本質を見抜く第一歩だと思います。
高次元とかSFじゃないの？？

# このおっさん高次元とか言い出すのな・・・
先の説明で、

https://qiita.com/imaginarytake/items/b93d01b03775ff54272d

**「コペンハーゲン解釈は既に破綻しまくっていて、一方でちゃんとふるまいを説明できるシリコンオイルの液面と液滴が、この世界と高次元の量子と考えるととても説明がしやすくなる」**

そして下では、シュレジンガー方程式は、虚数を含んでるが、虚数は「虚とかなじゃくて、数学的に系の次元を上げて扱うために使う方策だ」

https://qiita.com/imaginarytake/items/927d6048c0296a3df769

と明確に話を出したよ。日本ではあまり知られてないが既に海外ではオイルの液滴の話は多数の実験などで明らかになっている。

なんだけど、特にQiita見てるソフト業界の人とか、高次元？？うーん、アニメではよく見るが・・・ **俺は見たことないしなあ・・・（ポリポリｗ）** ってなってると思うんだよね。日本のマスコミ含めて、そんなこと言うとすぐトンデモな人扱いになっちゃう。異論を許さない **全体主義の国日本** らしい所ではあるｗ

そこでもうちょっとこのあたりを抑えておこうと思う。

# そもそも誰が「高次元ガー！！」とか言ってんだよ？？

って思うでしょ？結論を言っちゃうとね、

**今の現役のほぼすべての物理学者はこの世界は高次元からなると思ってる。**

んだよね。

これは１００年前のアインシュタインがいたころと全く違う。この世界は高次元空間といいたくなってるのは、「こう考えないともろもろ説明がつかないから」でしかなく、３次元で済ませようとしても **「もうどうしても無理！そんな考えは無駄無駄無駄無駄ー！」** だからなんだよね。

![DgMuh_xUYAA9Qi5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2974126/192cc346-63fd-b4a9-4c80-f63585137d36.jpeg)
【この世が３次元しかないことを信じる人たちへの物理学者たちの攻撃】

そしていろんな理論があるけど、少なくてもこの世界を５次元以下とする理論はもうない、と考えた方がいい。

特に一番の有望理論といわれてる超弦理論をまとめたＭ理論とか、平然と **１１次元あると思うぞ？ｗ** 、とか言ってて、もはやどうなってるやら。

だから、もし **えー？？この世界は３次元だよ、見たことないしな！**

って言ってる人は、既に中世の、「地球は平らだよ！！だって地面が平らじゃないか！」とか、「地球が宇宙の中心に決まってるでしょ？だって自分たちは動いてないじゃないか！！」と言ってる人たちと厳密な意味で同じで **古代の人たち** なんですよ・・・

ＡＩも量子コンピュータもいよいよ実用が進んてるし、シンギュラリティが見えてきたりになって来てる時代に、それはダメだろ？？

頭固くなってないで、もう認めなよって話でしかなく。

それを考えれば、先の話も頭に入ってきやすいと思うんだ。たくさんある次元の中のたった１個増やせば、量子力学はもう不思議さのベールがどんどん剥ぎとられていくんだよ。

**いやだからさ、高次元が怪しいだろ！！？**

だから、地球は平らじゃないんだよ、認めるんだ。この世界が３次元では何にも素粒子とかの説明がつかないんだよ。

でもいくらこういったって、今でも「地球は平らだ」って思ってる人がいるぐらい、人間の頭は固いものだからね。

もっとこの後色々そう考えるしかないか・・・ってのを出していくつもり。

まあ１個１個出していこうと思うよ。まずはようつべで先に書いた液滴の系で「トンネリング」が起こる過程が紹介されてる。

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

これもあるね。

https://www.youtube.com/watch?v=72DA4fgamPE

なんだよー。液の中に壁があって、その上に少しある液体の上を液滴が通ってるだけ・・・でも波があるから、行けたり行けなかったり。まさに確率的。

**こんなもので「トンネリング？？」ふはははは！何を言ってんだ！！**

と言われそうｗ

でも、次元を上げて考えるんだよ！！我々の３次元世界は「液面」の２次元にあると考えるんだ。そうすると自分たちは高さを知らない２次元人なんだよ。でも実際には我々は３次元人。そして、２次元人は「高さ」を知らないんだけど、我々は４次元への「高さ」は見れなくてわかんないんだ。そして物理学者は **この世界が３次元で済む確率はもうほぼない!!** と言っているんだよ。

そう思えば、量子はまさに、**４次元側の高みにいるから３次元の壁を抜けられる** トンネリングができるという事なんだ。

そんなこと追っても、数学的にとか説明つくのかよ？？量子力学の式は？？
というでしょう。これは実際にシリコンオイルの液滴の系にはシュレジンガー方程式と同等の式が成立するし、実際に計算もできるし、ふるまいも量子の計算同様にシミュレーションもできる、というのが明確になっている。

そして、あとちょっと難しい話なんだけど重要な話を一個上げておくと、ある次元での量子力学は＋１次元でのカオス力学系の「射影と見なせる」という事だ。

量子力学では全部確率的にしかわかんないよ！！とかの給うてるんだけど、実は次元を上げて考えると、そんなことないんだな。上の次元のものがどう動いてるかで下の次元での確率も決まるんだよな、って話だ。ちょっと難しい話なんだけど、次元を上げることで量子力学はちゃんと上の次元の物理とつながることが **数学的に証明されてる** という事なんだ。要はね。影がこれからどう動くか、下にいる２次元人たちには全然予想できないけど、３次元の形が分かってる自分達なら分かるでしょ？って話です。かなり厳密にもそんな話。

これは実際に「ベクトルポテンシャル」の話なんかとつながってくるけど、またどっかで書かないとね。

要はこの世界が高次元なのは、数学的にもおかしくない、物理的にも実験できる、いやむしろそうでないと説明がつかない！という話なんだよね。トンデモでもなんでもなく、むしろ

**理詰めで考えたら** それしかないなあ・・・*

という事だ。宇宙が回ってるより、地球が回ってるという方が説明がつくよね、って話と同じだよ。

# 今回の結論（でもないけど）

まああきらめて、さっさとこの世界は高次元だという事を認めようよｗ量子もそれで考えようよ！（特に日本の頭の固い学者さん達とかも、アニメ好きな自分達もｗ）、ってな話でした。
リリースレゴで盛り上がる -モブプロ開発を行っているチームでやっている取り組み-

# はじめに

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

今回は「リリースレゴ」についての取り組みについて紹介します。
実はこの取り組み一瞬やっていたのですが、在宅に変わって行えていないので、以前のチームでやったときの話を踏まえて記事にさせて頂きます。

# 前回

https://qiita.com/Sicut_study/items/53f0afc4dc0e7bcbe66c

# Chapter#6 プロダクトの大きさを可視化する

ベープ「じんさんそこにあるブロックみたいのなんですか？」
そういうとベープさんはzoom越しに私の手元に置いてあったクジラのブロックを指さした

じん「あ、これですか？これは100均に売っているプチブロックというおもちゃです。以前、リリースレゴで作ったやつです」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/10723a94-e900-d94b-30b6-a015196b00a0.png)

ミュート「ほんとクジラ好きね」(筆者はDockerつながりでクジラが好き)
アール「そのリリースレゴってなんのことですか？」
ベープ「全然聞いたことない単語ですね」
じん「チームでも今後やっていきたいと考えていたので紹介しますね」

# リリースレゴ

リリースレゴはこちらの記事を参考に始めた取り組みになります (スクラムの本で紹介されていました)

https://su-kun1899.hatenablog.com/entry/2019/09/23/205243

毎日その日の夕方にマスターブランチにいくつマージされたかを確認してその数だけレゴブロックを組み立てて、製品の開発をブロックで可視化するという取り組みになります。
その日の最後にみんなで盛り上がりながらブロックを組み立てるのがとても楽しいので、開発を頑張ろうという気分になれます。

このリリースレゴについては以前別の記事で上げているのでこちらも確認ください

https://note.com/jinwatanabe/n/n3642cfb7fd2e

この取り組みをすることのメリットがいくつかあります

- モチベーションを保てる
- ブロックを作るために開発を頑張る
- ブロック組み立てでチームで盛り上がれる
- 開発に限らず私生活でも利用可能 (ToDoリストが1つ終わったら1つ組み立てる)
- 完成したのが並ぶと嬉しくなる

ブロックにはピース数が多くないものを選ぶとよいので、100円ショップダイソーの「プチブロック」がおすすめです

https://jp.daisonet.com/collections/party0226

また、ナノブロックもピースは少し多めですが、クオリティが高いので私用でやっているToDoで組み立てるブロックにはお勧めです。

https://www.kawada-toys.com/brand/nanoblock/

デメリットは、在宅だとやりづらかったり、夕会っぽいものを開かないといけないというところかなと思います

# 次回

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

# おわりに

今回は短い記事となりましたが、リリースレゴについて紹介しました
私たちのチームでも来期からリリースレゴに取り組んでいこうかなと考えています。
チームビルディングにとても役に立つのと導入が簡単なのでぜひ試してみてください
タスクスケジューラを使うときにユーザー名が日本語だとプログラムが実行されないときもある話

# タスクスケジューラで指定したプログラム等が動かない原因
ググったら色々出てくるけどどれを試してもタスクスケジューラで指定したプログラムが実行されなかったとき、使ってるユーザーの名前が日本語であるか否か(あるいはC:¥Usersに入ってるユーザーフォルダの名前が日本語であるか否か)を確認するべきだと思ったから備忘録のような意味合いで書き残す
これに気付かずにそれなりに時間を浪費した

どうやらユーザー名に日本語が含まれていると、指定されたパスにアクセスする過程のどこかで文字化けかなんかが起こってプログラムが上手く実行されない模様
ユーザー名に日本語やスペースが含まれてるとタスクスケジューラに限らず色んなソフトでバグるっぽいからWindowsのユーザー名はアルファベット、アンダーバーのみで構成した方が良さそう
調べた感じ、ユーザー名の変更みたいな機能はあるけどそれを使っても問題のC:¥Usersに入ってるユーザーフォルダの名前は変わらないし無理矢理変更したとしてもまた不具合が生まれそう

## ぱっと思いついた対策
- Windowsアカウントを作り直して新しい方で作業する
- Cドライブ直下など、日本語・スペースの含まれないフォルダ内に実行したいプログラムを配置する
Python用語集

## オブジェクト指向
何かしらを作る時に、一気に作るのではなく、要素要素に分解してその要素を繋ぎ合わせて作る考え方の事

## 動的な
流動的に変化する

## 静的な
変わらない

## インタープリタ方式
プログラミング言語の命令を一つずつ機械語に解釈しながら実行する方法
作成したソースコードをすぐに実行できるメリットがあるが、毎回解釈するため実行時間が長くなる

## バイナリ形式
データが、0と1で表現されているデータ形式のこと

## PyPy
動作を早くする時に使用されるインタプリンタ

## CPython
標準で使えるインタプリンタ

## 文字列リテラル
0以上の連続した文字列

## 組込み関数
初めから用意されている標準で使用可能な関数のこと

## シーケンス型
複数の要素をまとめて扱える型
例 : リスト、タプル、文字列など

## メソッド
class内で使用する関数 別名 : メンバ関数

## フォーマット済み文字列リテラル f-string
接頭辞 'f' または 'F' の付いた文字列リテラル。これらの文字列には、波括弧 {} で区切られた式である置換フィールドを含めることができます。

## コレクション
リストやタプル、辞書のように他のオブジェクトを集約することを目的としたオブジェクト

## イテレート
繰り返すこと

## イテラブル
繰り返し可能なオブジェクトのこと

## イテレータ
イテラブルオブジェクトを利用した連続データ
iter(イテラブルオブジェクト)で作成できる。
特徴として、nextを使用して要素を一つずつ取り出し、また削除できる。

```python:qiita.py
list_1 = [1,2]
iter_1 = iter(list_1)

print(next(iter_1))
>>1
print(next(iter_1))
>>2
print(next(iter_1))
>>StopIteration  Traceback (most recent call last)
```

## シンボルテーブル
変数名(シンボル)とその内容(データ型、スコープレベルなど)からなる情報のテーブル

## メソッド
オブジェクトに属している関数のこと

## スコープ
アクセスできる範囲のこと ローカルかグローバルか

## ドキュメンテーション文字列 docstring
関数名.__doc__で、参照可能な文字列
```python:qiita.py
def my_function():
    """Do nothing, but document it.
    No, really, it doesn't do anything. #この部分
    """
    pass

print(my_function.__doc__)
```

## 関数のアノテーション
アノテーションの意味:注釈
ユーザー定義関数で使用される型についての完全にオプションなメタデータ情報

コードを読む際に、視認性が高まる 
```python:qiita.py
def f(one: int, two: int = 1) -> int:
    print("Annotations:", f.__annotations__)
    print("Arguments:", one, two)
    return one+two

f(1,2)

>>
Annotations: {'one': <class 'int'>, 'two': <class 'int'>, 'return': <class 'int'>}
Arguments: 1 2
3
```
以下のようにすると、Annotationsは、何も出力しない。
```python:qiita.py
def f(one, two= 1):
    print("Annotations:", f.__annotations__)
    print("Arguments:", one, two)
    return one+two

f(1,2)
>>
Annotations: {}
Arguments: 1 2
3
```
## キュー
入れたものが、入れた順で取り出せる構造になっているもの
例 : 最初に入れたものを最初に取り出す

## ネスト
操作の中にある別の操作

タプルのネスト
```python:qiita.py
t = 1, 2, 'アイウエオ!'
u = t, (3, 4, 5)
u
>>((1, 2, 'アイウエオ!'), (3, 4, 5))
```

ネストが深い例
```python:qiita.py
if(~~):
    if(~~):
        if(~~):
```
## リスト内包表記
```python:qiita.py
[式 for 変数名 in イテラブルオブジェクト]
test=[i for i in range(3)]
print(test)
>>[0,1,2,3]
```

## アンパック 
コレクションの要素を一気に変数に代入する方法のこと
コレクション : リストやタプル、辞書のように他のオブジェクトを集約することを目的としたオブジェクト
```python:qiita.py
one, two, three = (1, 2, 3)  # タプルのアンパック
print(one, two, three)
>>1 2 3
```

## マッピングオブジェクト
ハッシュ可能な値を任意のオブジェクトと対応づけるもの

## ハッシュ
データと共に生成される値

## ハッシュ関数
データからハッシュ値を算出する関数
同じデータからは、同じハッシュ値が算出される

## 位置引数
def(a,b)に対するdef(1,2)の1,2のこと。
順番が重要な引数

## キーワード引数
def(a=1,b=2)に対するdef(b=3,a=3)のこと。
キーワードを使うことで位置に縛られる心配はない。

## yield
関数を一時的に停止させることができる機能

## 抽象クラス
インスタンス化できない継承する事を目的としたクラスのこと

## コンテキストマネージャ型
with文に対応したオブジェクト  コンテキストマネージャにより定義される実行時コンテキストをサポートする

### 参考
Python 公式チュートリアル
https://docs.python.org/ja/3/tutorial/index.html
ffmpeg + バッチファイルで画像を一括リサイズする

Windows環境でバッチファイルとffmpegで画像をリサイズするコードのメモです


# 1. ffmpegのインストール


まだインストールしてない人は以下の手順でインストールできます
https://qiita.com/studio_haneya/items/ae44e39b5a389cf8cf6e


# 2. バッチファイルで画像をリサイズする


ファイル1つずつで良いなら以下のバッチファイルに画像ファイルをドラッグ＆ドロップすればリサイズできます

%1がドロップしたファイルのフルPATH、%~dp0がバッチファイルのあるフォルダのPATH + ファイル名、%~x1がドロップしたファイルの拡張子なので、「d:/fuga/hoge.bat」に「d:/hoge/img.png」をドラッグ＆ドロップした場合、%1が「d:/hoge/img.png」、%~dp0\%~n1_%resolution%%~x1が「d:/fuga/img_1440.png」になります

以下ではアスペクト比固定で横のピクセル数を1440にするという指示にしています


```batch:hoge.bat(単独ファイルのみ)
set resolution=1440
ffmpeg -i %1 -vf "scale=%resolution%:-1" -q 2 %~dp0\%~n1_%resolution%%~x1
```


# 3. バッチファイルで複数画像をリサイズする


バッチファイルは引数すべてに対してfor文で順番に取得していくことが出来るので、以下のようにドロップしたファイルすべてについて順番に実行していくことができます


```batch:hoge.bat(複数ファイル対応版)
set resolution=1440
set folder=%~dp0

for %%i in (%*) do (
    ffmpeg -i %%i -vf "scale=%resolution%:-1" -q 2 -y %folder%%%~ni_%resolution%%%~xi
)
```
picoCTF Writeup picoGym Practice Challenges Tab, Tab, Attack (注意<spoiler>)

# Description
Using tabcomplete in the Terminal will add years to your life, esp. when dealing with long rambling directory structures and filenames: Addadshashanammu.zip

zipファイルをダウンロードし解凍するとディレクトリが長く続いている。

そこでcd [Tab]とコマンドを打てばディレクトリの奥のファイルまでたどり着ける。

fang-of-haynekhtnametというファイルが出てくるので、とりあえずcatで中身を見るとフラグが出てくる（cmdだと見れない、wslだと見れた。）


```
$ cat fang-of-haynekhtnamet 
 HH/lib64/ld-linux-x86-64.so.2GNUGNUL/|%Z6ژU= 
                                              Y h "libc.so.6puts__cxa_finalize__libc_start_mainGLIBC_2.2.5_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTabl
       H
 Ht5
 %
 @%
 h%
H=HHPTLH
 DH=
 UH
 H9HtHZ
]f.]@f.H=i
 H5b
 UH)HHHH?HHtH!
 Ht
   ]f]@f.=



/H=    ]fDUH]fUHH=]f.DAWAVIAUATL%F UH-F SAIL)HWHt 1LLDAHH9u[]A\A]A^A_Ðf.*ZAP!* picoCTF{l3v3l_up!_t4k3_4_r35t!_524e3dc4}<X"H0zRxRx FJ
                                                                                                                                    ?;*3$"D\R
 o`BE B(H0H8M@r8A0A(B BBB0

  GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.08Tt`  
  $ z  @R Yx   `e ~0+ :  "
                          crtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.7698__do_global_dtors_aux_f
ini_array_entryframe_dummy__frame_dummy_init_array_entryfang-of-haynekhtnamet.c__FRAME_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_fini_ITM_deregisterTMCloneTableputs@@GLIBC_2.2.5_edata__libc_start_main@@GLIBC_2.2.5__data_start__gmon_start____dso_handle_IO_stdin_used__libc_csu_init__bss_startmain__TMC_END___ITM_registerTMCloneT   0)@cxa_finalize@@GLIBC_2.2.5.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.rodata.e      (;
```

picoCTF{l3v3l_up!_t4k3_4_r35t!_524e3dc4}
picoCTF Writeup picoGym Practice Challenges Static ain't always noise (注意<spoiler>)

# Description
Can you look at the data in this binary: static? This BASH script might help!

二つのファイルが渡される。(.bash,bainary)
とりあえず二つとも実行してみる
```:ltdis.sh
#!/bin/bash



echo "Attempting disassembly of $1 ..."


#This usage of "objdump" disassembles all (-D) of the first file given by 
#invoker, but only prints out the ".text" section (-j .text) (only section
#that matters in almost any compiled program...

objdump -Dj .text $1 > $1.ltdis.x86_64.txt


#Check that $1.ltdis.x86_64.txt is non-empty
#Continue if it is, otherwise print error and eject

if [ -s "$1.ltdis.x86_64.txt" ]
then
	echo "Disassembly successful! Available at: $1.ltdis.x86_64.txt"

	echo "Ripping strings from binary with file offsets..."
	strings -a -t x $1 > $1.ltdis.strings.txt
	echo "Any strings found in $1 have been written to $1.ltdis.strings.txt with file offset"



else
	echo "Disassembly failed!"
	echo "Usage: ltdis.sh <program-file>"
	echo "Bye!"
fi

```

```
>bash ltdis.sh       
Attempting disassembly of  ...
Disassembly successful! Available at: .ltdis.x86_64.txt
Ripping strings from binary with file offsets...
```
staticをとりあえずa.outとコピーし実行すると

```
$ ./a.out
Oh hai! Wait what? A flag? Yes, it's around here somewhere!
```

実行結果からみてbashファイルにstaticを読み込ませれば良さそう。

```
$ bash ltdis.sh static
Attempting disassembly of static ...
Disassembly successful! Available at: static.ltdis.x86_64.txt
Ripping strings from binary with file offsets...
Any strings found in static have been written to static.ltdis.strings.txt with file offset
```
出力されたstatic.ltdis.x86_64.txtを見てみるとフラグが書かれている。

picoCTF{d15a5m_t34s3r_1e6a7731}
picoCTF Writeup picoGym Practice Challenges GET aHEAD (注意<spoiler>)

# Description
Find the flag being held on this server to get ahead of the competition http://mercury.picoctf.net:21939/

HTMLコードであったりヒントのBurpsuiteを使用してもあまり情報は取れなかった。

タイトルの通りHEADを取得しようと試みたらフラグが返ってきた。

curl -I HEAD -i http://mercury.picoctf.net:53554/

```
>curl -I HEAD -i http://mercury.picoctf.net:21939/
curl: (6) Could not resolve host: HEAD
HTTP/1.1 200 OK
flag: picoCTF{r3j3ct_th3_du4l1ty_6ef27873}
Content-type: text/html; charset=UTF-8
```