OmniAICreator/Qiita-1.07M huggingface dataset:
Python 3 エンジニア認定実践ベータ試験を受けて合格しました

忙しい時期に受けて感想が書けていなかったのですが、合格したので体験記として。

6 月の終わりごろに Python 3 エンジニア認定実践ベータ試験を受けて合格しました。
ベータ試験と書いてある通り、Python 3 エンジニア認定実践試験のベータ版として提供されています。

## 試験対策について

実は 6 月は、AWS Cloud Practioner, 情報セキュリティマネジメント試験, Python 3 エンジニア認定実践ベータ試験の 3 つを受けてていました。
対策は 1 週間しか取れませんでした（情報セキュリティマネジメント試験の感想はまた別途…）。

そのため要点を絞って勉強する必要がありました。勉強するにあたって参考にしたのは下記の note 記事です。

[Pythonの新試験： Python 3 エンジニア認定 実践試験 (ベータ試験) に合格したので勉強方法をレポート｜mikumo｜note](https://note.com/39mo/n/n5c414784d5ec)

主教材となっている「Python 実践レシピ」から出るようなので、Amazon で事前に買いました。

[Pythonエンジニア育成推進協会監修 Python実践レシピ](https://www.amazon.co.jp/dp/4297125765)

## 自分が勉強した範囲について

参考にした note 記事を参考によく出る範囲について勉強をしていきました。

このうち、3 章の Python の言語については、「Python 3 エンジニア認定基礎試験」で問われた内容が多いと考え、ノータッチでいきました。
というか、1～4 章は「Python 3 エンジニア認定基礎試験」の内容とほぼ変わらないので、こちらを先に受けていれば覚えることはそれほどないはずです。
私も過去に受けているので参考にしてみてください -> [Python 3 エンジニア認定基礎試験を受けて合格しました - Qiita](https://qiita.com/dip-m-hirao/items/ccb1748ad58deaeeacac)

逆に 5 章のタイプヒントは 3.8 以降正確な情報を追えていないこともあり、公式ドキュメントも含めてよく読んだり…。
他は 14 章のインターネット上のデータ（普段は[Requests](https://requests.readthedocs.io/en/latest/)とか[HTTPX](https://www.python-httpx.org/)で誤魔化しがちでわすれてしまう）、16 章テスト（doctest は使ったことなかった…）、17 章デバッグ（pdb とかはあまり使えてないので…）あたりが次の優先度で詳しくなかったので、よく読んだり公式ドキュメントを眺めながら理解を深めました。

逆に他はこれまでの仕事であったり、プライベートでやったことがあるような箇所が多かったので覚えていたかなーという感じです。

## 試験受けてよかったところとか

タイプヒントについては新機能がどんどん追加されているので、常に新しい書き方に合わせていきたいと思いました（逆に多数のバージョンをサポートするようなライブラリの場合は注意なのかも）。

あとはランダムな文字列を作ったりするときに、secrets とか hashlib とかちゃんと活用しようと思いました（反省、これまで自分で書きがちだったので）。

自分自身の経験からくる使い方を生かすのも大事ですが、新しい学びがあるのでやっぱり標準ライブラリって大事…と思いました。
（サードパーティのものは今回試験範囲から外れてるので放置しましたが、便利なものが多いのでデファクトっぽいのは触っておこうと思いました）

## 試験結果

1000 点中 825 点で合格でした。
記憶があいまいだったテストやデバッグの項目は点数が低かったので、勉強不足だったかなーと思います。

## まとめ

Python のことを基礎試験よりも知っていないといけないということや、標準ライブラリへの知識が大幅に問われるという点で難しかったように思います。
言語系の試験は OCJP Sliver 8 以来なので何とも言えませんが（しかも古すぎるし…比較にならない…）、本試験を受けてみて Python についてはちょっと詳しいって言えるのかも？　とか思いました（本当かな？）。

少なくともサードパーティのものをゴリゴリ使う前に、標準ライブラリで実はどうにかなるんじゃない？　とか、タイプヒントや標準のテストを使って Python らしいコードを書いたり、というのはできそうかも？　と思いました。

自分の主戦場は PHP に移ってしまいましたが、お気軽なスクリプトを書くときは Python が今でも一番手になじんでいるので、これからもちょこちょこモノを作りつつ感覚を忘れないようにしたいです。
【環境構築】 「memory_limit」が足りないと言われた！

環境構築時にコードを```clone```してきた後

ターミナル上で```$ php init```したら下記のようなエラー文が表示されました


```
 Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes) in phar:///usr/bin/composer/src/Composer/DependencyResolver/RuleSetGenerator.php on line 129
```
メモリが足りないとのこと。。

## 解決策１ 「cloneしてきたphp.iniを編集する」
1.  ```$ php init``` で作成されたdockerをdeleteする
1.  `php.ini`内の「memory_limit」を編集する
（※viまたはvimで編集した方がいいかも、手作業だと反映されない。。）
```
memory_limit=256M
↓
memory_limit=-1
```

3.　再度```$ php init```で環境構築する

→変化なし。。

## 自PC内ディレクトリのphp.iniを編集
1.  cloneしてきたディレクトリに移動することなく`$ php -i | grep memory_limit`で「memory_limit」を確認
```
$ php -i | grep memory_limit
memory_limit => 126M => 126M
```
2.　  `php.ini`をvimで開く(`$ php -r "echo phpinfo();" | grep "php.ini"`で場所を確認)
3.  　「memory_limit」を検索し編集する（検索できない場合400行目あたりにカーソルを下げる）
```
memory_limit => 126M
↓
memory_limit => -1
```

→こちらで```$ make init```をするとエラーなくできました！


参考↓
https://akizora.tech/docker-install-vim-4830
プログラミング作法を改めて読んでみての感想


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/f74624cc-6f9e-a236-cc4f-35f1f0f2384f.png)
出版社 ‏ : ‎ アスキー (2000/11/1)
発売日 ‏ : ‎ 2000/11/1

しかし私の本をみると　2000/11/21初版発行となっています。何故？

久しぶりに単身赴任先から自宅に戻って本棚を眺めてみると目にとまりました。う～ん、少し古い本かなぁ。若い方にはとっては子供時代の本でしょうかね。ぱらぱら中をみると例題はCあるいはC# そのほかはJavaが多いようです。一部awkもあるなぁ。　そういえばこの本を買った頃は全くawkを使ったことはありませんでした。今ではLinuxでコードを書くときはほぼawkになっていますが...


さて、思い出してみるとこの本の中では第5章のデバッグに興味がありましたね。　そうそう特に**5.３手がかりのない困難なバグ**はとても参考になった記憶があります。

+ バグを再現できるようにしよう。
+ 分割統治しよう。
+ 誤動作を「数字占い」で検証しよう。
+ 出力表示によってバグ探索範囲を狭めよう。
+ 自己検証コードを記述しよう。
+ ログファイルを出力しよう。
+ 作図しよう。
+ ツールを使おう。
+ 記録を取ろう。

まぁ、今思えばそんなに特別なことをしているわけでないですね。今はApexでプログラミングをすることが多いので特に「自己検証コードを記述しよう。」は実践しています。　画面のないApexトリガーやバッチではコードを書いたらすぐにテストクラスも用意してデバッグしながら作業を進めます。こうすることでデバッグがかなりしやすくなったと思います。テストデータを簡単に準備できるのがいいです。

一時期Linuxで遊んでいた時はデバッガーを使っていましたが、今ではほとんどprint文でデバッグしています。この方が楽になってしまいました...

本当は画面の開発でも何かしらのテストツールが使えたらいいのですが、いいものが見つからないですね。

そうそう、それから巻末のAppendix:ルール集も非常に役に立ったと思います。　一部？はいまだに実践させてもらっています。

気に入ったルール

**スタイル**
+ 複雑な式は分割しよう
+ マジックナンバーには名前をつけよう
+ 当たり前のことはいちいち書くな
+ 悪いコードにコメントをつけるな、書き直せ

**性能**
+ コードをチューニングしよう
+ 共通する式をまとめよう
+ より低級な言語で書き直そう <-- 以前はよくアセンブラのコードをインラインで展開したけど、今はしませんね。
RepeatMasker 

# conda で簡単インストール  

[condaのサイト](https://anaconda.org/bioconda/repeatmasker)
  ```
   conda create -n repeatmasker_v4.1.2.p1
   conda activate repeatmasker_v4.1.2.p1
   conda install -c bioconda repeatmasker=4.1.2.p1
  ```
# Repbase のデータベースを設置
conda でインストールした場合、RepeatMasker のデータベース自体は ~/XXXX/envs/repeatmasker_v4.1.2.p1/share/RepeatMasker/Libraries にあるが、ここに Repebase をコピーして RepBase をデータベースに追加しようとするとエラーになった。(これはなぜかわからない。。もしかすると何か他のことが原因だったのかも。)
  
仕方ないので、RepeatMasker の Libraroes ディレクトリ 自体を他の場所に移動して実行。

  ```
# Libraries をコピー
cp -r ~/XXXX/envs/repeatmasker_v4.1.2.p1/share/RepeatMasker/Libraries ~/Libraries
# Repbase を Libraries の中にコピーする。  
tar xvf RepBaseRepeatMaskerEdition-20181026.tar  
cp Libraries/* ~/Libraries
# addRepBase.pl を実行し Repbase を RepeatMasker.lib にマージする。
~/XXXX/envs/repeatmasker_v4.1.2.p1/share/RepeatMasker/addRepBase.pl -libdir ~/Libraries
# ~/Libraries をまるごと、conda 内のディレクトリに戻す (その前に元のLibraries ディレクトリ を待避)
mv ~/XXXX/envs/repeatmasker_v4.1.2.p1/share/RepeatMasker/Libraries ~/XXXX/envs/repeatmasker_v4.1.2.p1/share/RepeatMasker/Libraries_bk   
mv ~/Libraries ~/XXXX/envs/repeatmasker_v4.1.2.p1/share/RepeatMasker/ 
  ```

# 実行
  
  ```
   export BLASTDB_LMDB_MAP_SIZE=100000000
   RepeatMasker -e rmblast -pa 8 -dir output -xsmall -gff -species rice -nolow $GENOME
  ```

  * BLASTDB_LMDB_MAP_SIZE  makeblastdbでエラーになったので付与。
  * -nolow Does not mask low_complexity DNA or simple repeats
    遺伝子アノテーションの精度をあげるためにゲノムをリピートするとき、-nolowをつけないと遺伝子領域もマスクされることがある。
  * -xsmall ソフトマスキング (リピート領域をNでマスクせずに小文字にする)
  * -gff    ゲノム上のrepeat領域をgffを出力

   --> -nolow オプションは保留。
77.78コンストラクター関数（クラスについて）

## コンストラクター関数とは
新しくオブジェクトを作成するための雛形となる関数
## メリット
オブジェクトを簡単に生成できる
## 主なフロー
1.関数を宣言する
2.オブジェクトを生成(インスタンス化)
3.実行する

## 書き方
1.関数を宣言する
```javascript
function Person(name,age){
	this.name = name;
    this.age = age;
    this.intro = function(){
  	console.log(`私は${this.name}です${this.age}`)
  }
}   　 
}
関数を作成するが
Personのnameという変数に名前を代入しておく
＊自分のなかでは A of B(AのB)を作る作業だと考えている
```
2.オブジェクトを生成(インスタンス化)
```javascript
const tani = new Person("taniyan",34);
console.log(tani.age)
```
1.で作ったAのBの変数に代入して、オブジェクトを作る
  例)taniくんを作ります。PersonのnameはtaniyanでPersonのageは34歳です

3.実行する
```javascript
console.log(tani.age)
console.log(tani.name)
tani.intro()
```
さっきのAofBで実行すると答えが呼ばれるようになる。

##　なにがいいのか？
```javascript
function Person(name,age){
	this.name = name;
  this.age = age;
  this.intro = function(){
  	console.log(`私は${this.name}です${this.age}`)
  }
}
// ここの１行だけで、taniくん,satoくん,suzukiくんが完成する
const tani = new Person("taniyan",34);
const sato = new Person("satoyan",26);
const suzuki = new Person("su-san",19);
console.log(tani.age)
console.log(tani.name)
console.log(suzuki.name)

tani.intro()
sato.intro()
```
## もしメリットが分かりづらかったら、自分のクラス全員または職場全員分のnameとageを出力できる関数を
以下を参考にして作ってみてください。
```javascript
const taniname = "taniyan"
const taniage = 34
function taniCall(taniname,taniage){
    console.log(taniname,taniage)
    }
tanicall()
```
Linux ロケール(locale,iconv)について（自分用メモ

Linuxなどのソフトウェアで表示される言語やフォント、日付や通貨などの書式を利用者の言語に翻訳したりして合わせることをローカライゼーション「L10n（Localization）」という。
また、ソフトウェア設計時から、多様な地域や多言語に対応できるように考慮することを国際化「i18n（internationalization）」という。


ロケール用の主な環境変数（カテゴリ）

・LC_CTYPE 文字の分類、文字の種類の規定
・LC_NUMERIC 数値の書式
・LC_TIME 日付・時刻の書式
・LC_MESSAGES 出力メッセージの言語
・LC_MONETARY 通貨の書式
・LC_ALL 指定した値が全てのカテゴリを上書きし、カテゴリごとの設定ができない
・LANG 指定した値が全てのカテゴリを上書きするが、カテゴリごとの設定はできる。(LC_ALLが設定されていない場合は指定した値がデフォルトとして使用される)


システム全体のロケール設定ファイルは「/etc/locale.conf」
システム全体のロケール設定ファイルにLC_ALLを設定できるが、設定することは推奨されない


●localeコマンド
現在のロケールの設定確認。

locale [-a]

オプションを指定しないで実行すると現在のロケールの設定が表示
「-a」オプションを使用すると現在のシステムで使用できるロケールが表示


●iconvコマンド
文字コードを変換。変換した内容を標準出力に出力するため、ファイルに保存する場合はリダイレクトを使用。

iconv [オプション] [入力ファイル]

オプション
・-f 文字コード　変換前の文字コードを指定(from)
・-t 文字コード　変換後の文字コードを指定(to)
・-l 扱える文字コードを表示(list)

Windowsで作成したファイルをLinux上で開くと文字化けを起こすことがある。このような場合は文字コードの変換コマンド「iconv」を使う。


●主な文字コード

・ASCII 7ビットの文字コード128種類の文字
・ISO-8859 ASCIIを8ビットに拡張したもの。256種類の文字
・ISO-2022-JP 日本語でのメール送信で主に使用されていた日本語文字コード（JISコードとも呼ばれる）
・Unicode 多言語を扱うために作成された符号化文字集合。UTF-8(多くのLinuxで標準的に利用されている)などがある
【Salesforce】このエラーは、フローでレコードの更新が試行されたときに発生しました: Too many DML rows: 10001

# 問題

・プロセスビルダー設定済
・トリガ設定済

上記のカスタムオブジェクトに対して、データローダにてinsertを行ったところ、下記のエラーが出力されました。
※レコード→2000件、BatchSize→200件、Bulk Api→false

```java:エラー

このエラーは、フローでレコードの更新が試行されたときに発生しました: Too many DML rows: 10001

```

# 解決策

BatchSizeを減らす。
※BatchSize50件の場合、ガバナエラー出ませんでした。

# 参考リンク

[【Salesforce：エラー回避方法お教えします！】Too many SOQL queries: 101を防ぐには](https://sol.conexio.co.jp/blog/salestech/knowledge-salesforce)
【Jetpack Compose】角丸のカードを作る

# 概要
こんな感じの角丸のカードを作ります。
主にジャンルを表示したりするのに使うと思います。
![スクリーンショット 2022-09-05 9.50.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524029/2bff59ef-bcf3-a436-cec2-73dbad9c00eb.png)

# コード
まず、角丸にするためにこう書きます。
```Kotlin:余白が気になる.kt
        Text(
            modifier = Modifier
                .background(
                    color = Color.Blue,
                    shape = RoundedCornerShape(50)
                ),
            text = "カレー", fontSize = 20.sp, color = Color.White
        )
```
この状態で表示されるのがこういうカードです。
![スクリーンショット 2022-09-05 9.56.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524029/48d4a64c-48a1-f3c2-ee65-5baf8fd5fbe4.png)
詰まった感じで、綺麗なレイアウトになっていないことがわかると思います。
そのため、paddingで余白を調整します。

```Kotlin:余白を調整.kt
        Text(
            modifier = Modifier
                .background(
                    color = Color.Blue,
                    shape = RoundedCornerShape(50)
                )
                .padding(top = 5.dp, start = 20.dp, end = 20.dp, bottom = 5.dp),
            text = "カレー", fontSize = 20.sp, color = Color.White
        )
```
これで最初に載せた通りのレイアウトにすることができました。
Aws::Sigv4::Errors::MissingCredentialsError

# Aws::Sigv4::Errors::MissingCredentialsError」
AWSのEC2のデプロイで、エラーの原因が分からなくて苦労したので備忘録。
EC2へデプロイ時に「Aws::Sigv4::Errors::MissingCredentialsError」が出るので、
.envに原因があるのでは？と思い、AWS_ACCESS_KEY_IDを小文字から大文字に変えたり、
あらゆる記事で記述方法を確認しても、、ずっと同じエラー文。。。

### 結論
先に結論から書きます。アプリのrake secretが、インスタンスを再起動したら、なぜか乱数が変わっていて、エラーが出ていました。EC2のsecrets.ymlを新しく生成されたものを記述し直して、デプロイをすると成功しました。

今回私がエラー発生から解決まで打ったコマンド

[ローカル]
```
$ bundle exec rake secret
```
→　乱数をコピーしておく

[EC2にて実施]
secrets.ymlファイルディレクトリに移動する。
```
$ cd /var/www/アプリケーション名/shared/config
$ vi secrets.yml
```

```
production:
  secret_key_base: 生成した乱数をコピペし直す
```

これで無事デプロイが出来ました。
Teamsの詳細表示をクリックするEdge/Chromeの拡張機能

# はじめに
Teamsでは、長い投稿があると次のように折りたたんで表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/a5b7808a-d522-dc6c-995e-2e381a4e0c2f.png)
これを「常に詳細表示にするという動作と、ユーザーごとの設定を追加してほしい」という要望は[以前から出ている](https://answers.microsoft.com/ja-jp/msteams/forum/all/teams/8f1b21a0-d6ca-43ec-89b8-957dd7671249)もののなかなか実装されません（というか、UserVoce自体なくなってしまいました😢）。今回はEdgeとChromeの拡張機能としてTeamsの詳細表示が表示されたら常に展開する機能を実装してみます。

# 方針
詳細表示ボタン付近のHTMLは次のようになっているようです。詳細ボタン(`ts-see-more-button`)をクリックすると、`see-more`要素のclass属性にexpandedが付与されるようです。
雰囲気、画面上に詳細ボタン(`ts-see-more-button`)が表示されたら、このボタンを自動的にクリックし、ボタン自体を消してしまえば常に詳細表示された状況になりそうです。

詳細ボタンクリック前のHTML
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/88665398-7d76-c103-4fa1-fabe70f6b1e6.png)

詳細ボタンクリック後のHTML
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/3eb11f91-7667-f96b-6cd4-bd0bd8397f79.png)

# 詳細表示
ということで、`ts-see-more-fold`を探して、クリックして、ボタンを消す処理を3秒ごとに呼び出す処理を`content_script.js`に組み込んであげます。

```javascript: content_script.js
function expansionDetailViews() {
  const elem = document.getElementsByClassName("ts-see-more-fold");
  if (!elem) return;

  Array.from(elem).forEach((e) => {
    e.click();
    e.outerHTML = "";
  });
}
setTimeout(async () => {
  while (true) {
    await new Promise((resolve) => setTimeout(resolve, 3000));
    expansionDetailViews();
  }
});
```

展開されて、詳細表示、簡易表示ボタンそのものが消えてくれましたね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/65612551-007c-e1c6-88b8-0cf553e1e84e.png)

# おわりに
ブラウザーの拡張機能と同じようにTeamsの表示も拡張できる機能が欲しいなぁ
というか、UserVoiceどこ行った！？
Python Asyncio で作る Socket Server

Python の **asyncio** で作成した **socket** サーバーです。 簡単なecho サーバです。 OSレベルのAPI **selectors** を直接使うのではなく、より高レベルの **asyncio**を使うことで簡潔で読みやすいプログラミングが可能となっています。クライアントとのやり取りをasyncioのコルーチンとして書き、イベントループ上で並列実行させています。
[Python Asyncio入門 - Qiita](https://qiita.com/sand/items/0e445a13d81d20ea33c3)


```Python:main.py
import asyncio, socket

async def handle_client(client, loop):
    while data := await loop.sock_recv(client, 1024):
        print( f"data = {data}")
        await loop.sock_sendall(client, data)
    client.close()

async def run_server():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # Server ソケット
    server.setblocking(False)                                   # ノンブロッキングソケット
    server.bind(('localhost', 8000))
    server.listen()
    loop = asyncio.get_event_loop()

    while True:
        client, address = await loop.sock_accept(server)         # Client ソケット
        client.setblocking(False)                                # ノンブロッキングソケット
        print(f"New client from {address}")
        asyncio.create_task(handle_client(client, loop))    # イベントループでスケジューリング

asyncio.run(run_server())
```

プログラムの起動
```
python main.py
```

クライアントからの接続
```
telnet localhost 8000
```


コルーチン **run_server()** はServer ソケットを作成しクライアントからの接続を待ち受けます。クライアントから説毒が来るとacceptしClient ソケットを作成し、コルーチン **handle_client()**を**イベントループ**に放り込みスケジューリングします（**asyncio.create_task()**）。
コルーチン handle_client()はクライアントからのデータを待ち受け(**loop.sock_recv()**)、受け取るとそのままクライアントに返却します(**loop.sock_sendall()**)。


ここで重要なのが、asyncio の **イベントループ**上で使える以下の3つの**コルーチン**です。


* **coroutine loop.sock_accept(sock)**
接続を受け付けます。ブロッキングコールの socket.accept() メソッドをモデルとしています。ソケット **sock** はアドレスにbind 済みで、接続を **listen** 中である必要があります。戻り値は **(conn, address)** のペアで、conn は接続を通じてデータの送受信を行うための 新しい ソケットオブジェクト、address は接続先の端点でソケットに束縛されているアドレスを示します。**sock はノンブロッキングソケットでなければなりません。**

* **coroutine loop.sock_recv(sock, nbytes)**
nbytes で指定したバイト数までのデータをソケット sock から受信します。 このメソッドは socket.recv() の非同期版です。受信したデータをバイトオブジェクトとして返します。**sock はノンブロッキングソケットでなければなりません。**

* **coroutine loop.sock_sendall(sock, data)**
データ data をソケット sock に送信します。 socket.sendall() メソッドの非同期版です。このメソッドは data をすべて送信し終えるか、またはエラーが起きるまでデータをソケットに送信し続けます。送信に成功した場合 None を返します。エラーの場合は例外が送出されます。エラーとなった場合、接続の受信側で正しく処理されたデータの総量を特定する方法はありません。**sock はノンブロッキングソケットでなければなりません。**


[イベントループ - Pythonドキュメント](https://docs.python.org/ja/3/library/asyncio-eventloop.html)


今回は以上です。
picoCTF事始め

## picoCTFとは?
```
picoCTF is a free computer security education program with original content built on a capture-the-flag framework created by security and privacy experts at Carnegie Mellon University.
```
カーネギー大によって作られたセキュリティ教育用のコンテストサイトのようです。  
問題を解いたりコンテストに参加することでセキュリティについて学ぶことができるそう。  
ということで、セキュリティに関してなんもわからん状態からやってみた。  
[picoCTF](https://picoctf.org/)

## 学ぶ
[このページ](https://primer.picoctf.org/#_practical_example)に必要な前提知識がまとまっていそうです。  
長いので時間があるときに少しずつ読むことにして、とりあえず先に進みます。

## 問題を解いてみる
[picoGym](https://play.picoctf.org/practice)で実際の問題を解くことができます。
![2022-09-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332696/9f37683f-5136-e8d6-c363-372a1a92efcf.png)
上の画像のように問題がパネルで表示されているので、解きたいものを押します。  
初めてなのでとりあえず一番最初のObedient Catというものを解いてみます。
![2022-09-05 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332696/b8a845bf-b81a-b24d-934b-7654a63e8505.png)

### 問題の確認
flagを含むファイルがあるので、そのファイルからflagを取得しろ、みたいな感じっぽいです。  

### ヒントの確認
ヒントは得点には影響しないみたいなので、全て確認してみます。
1. そもそもヒントをどう使うかの説明。ターミナルにコマンドを打ち込むときには`$`の後に打ち込んでね、というもの。
2. 今回対象にしているファイルの取得コマンドが記載されています。  
3. `man cat`とだけ書かれています。この問題自体がチュートリアルみたいなものなので、`cat`コマンド使えるようになってねという意味もあるんじゃないでしょうか。

### 実際にやってみる
Ubuntu18.04LTSで実行しています。  
ヒント2に従って、対象ファイルを取得します。  
こちらはセキュリティソフトにはじかれたので、`--no-check-certificate`をオプションで指定して実行しています。
すると以下のようにファイルが取得されます。
![2022-09-05 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332696/c87114ea-a499-65ba-39c1-9016449de499.png)

`ls`コマンドでflagファイルが取得できていることを確認後、`cat`コマンドでflagファイルを開きます。  
すると、`picoCTF{...}`の形式で探していたflagが表示されました。(答えは隠しています)  
![2022-09-05 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332696/e6f4a843-5582-f3fc-71bd-3bbec5cbe98c.png)

これを先ほどの問題パネルの入力欄(下の写真赤枠)に入れて、`submit flag`を押すと...通りました。
![2022-09-05 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332696/9ac2445a-f063-cb80-8233-57cfab6813c1.png)

この問題はこれだけのようですが、問題ごとに色々頑張って何とかしてこのflagを取得しろっていうものっぽいです。

## 終わり
カテゴリ分けされているので練習はやりやすそうです。  
webshellがどうも問題ページ上で使えるっぽいので、もしかしたらローカルに落としてこなくてもいいのかもしれない(未確認)。
あとこれまでシェルをあまり使ってこなかったので、単純に学ぶことが多そうで良い。
Salesforce認定アドミニストレーター試験の公式練習問題を解説してみた-その014

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

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

今回はTrailhead
アドミニストレーター認定の準備: 構成、設定とオブジェクト
オブジェクトマネージャと Lightning アプリケーションビルダーの確認
　にある練習問題2問目をご紹介します。
https://trailhead.salesforce.com/ja/content/learn/modules/administrator-certification-prep-setup-and-objects/practice-user-setup

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

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

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


オブジェクトマネージャと Lightning アプリケーションビルダーの確認
練習問題２問目はこちらです

![関連.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/d87d98e9-ab15-66c9-8217-c04e8780e785.png)





みなさんいかがでしょうか


オブジェクトの関連が問われる問題ですね

正解はAとBです


取引先オブジェクトはデフォルトで商談とケースオブジェクトにつながっています

その証拠に取引先の関連リストには商談やケースが見れます

どうでしょうかみなさん

いきなり「オブジェクトのつながり」といってもなんだかイメージしにくいですね


では、オブジェクトの案連してる。してないが分かりやすい「スキーマビルダー」を見てみましょう


スキーマビルダーならオブジェクト同士のつながりが可視化できます

スキーマビルダーを見ると取引先と商談、取引先とケースが関連あるのが分かりますね

そして、間違いのリードやキャンペーンは取引先と繋がっていないこともよく分かりますね



今日の内容はここまでです。
皆さん楽しく元気にSalesforceを学びましょう！
Amazon Pollyに英語のスクリプトを読み上げてもらう

## TL;DR
- Amazon Pollyを使うと流暢にスクリプトを読み上げてくれる。休みを入れたりとか細かい制御も[SSML (Speech Synthesis Markup Language) ](https://docs.aws.amazon.com/ja_jp/polly/latest/dg/supportedtags.html)を使って制御できる。ただ細かい単語を期待通りに一発で読んでくれないこともあるので試行錯誤ができるように変換スクリプトを用意しておくと便利でした。

## やり方
1. Amazon Pollyに話してほしいスクリプトを作成
2. Amazon Pollyにスクリプトを音声に変換してもらう
これだけ

### Amazon Pollyに話してほしいスクリプトを作成
[SSML (Speech Synthesis Markup Language) ](https://docs.aws.amazon.com/ja_jp/polly/latest/dg/supportedtags.html)でタグを付けてあげると細かい制御ができます。
全然難しくなくて単なるxmlです。

``` polly.xml
<?xml version="1.0"?>
<speak version="1.1"
  xmlns="http://www.w3.org/2001/10/synthesis"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US">
  <prosody rate="80%">
  This is sample
    <break time="0.5s" />
  You may edit the code <w role="amazon:NN">V</w><w role="amazon:NN">I</w> or <w role="amazon:NN">VIM</w> 
  </prosody>
</speak>
```
よく使ったタグ
- prosody rate:デフォルトだと読み上げスピードが早かったので少し遅くするために使った。ただあんまり遅くしすぎるとゆっくりになりすぎてしまうので80%くらいまでが限界
- break time:休みを意識的に入れたいときに使用した。ピリオドでも少し休みをいれてくれるが、意味の区切りでは少し長めに休みを入れたかったので使用
- w role="amazon:NN":名詞として読ませたかった場合に使用した特に大変だったのがviと読ませること```<w role="amazon:NN">V</w><w role="amazon:NN">I</w>```にしてVとIを一文字づつ読ませることでなんとか読んでくれるようになった

### Amazon Pollyにスクリプトを音声に変換してもらう
Pollyに変換してもらうxmlファイルが完成したら実際に変換をします。AWSコンソールから変換できるのですが変換ファイルが増えてくると大変なのでスクリプト化しておきました

```build.sh
#!/bin/bash

set -e

COMMAND=$1
TARGET_FILE=$2
start=`date +%s`

current_directory=`pwd`
script_dir=$(cd $(dirname $0); pwd)
cd $script_dir
voice=Matthew

convert() {
    _create_dir
    echo ${voice}
    input_file=${TARGET_FILE}
    file_name=${TARGET_FILE%%.*}
    echo ${file_name}
    _to_audio_file ${voice} ${input_file} ${file_name}
    return 0
}

convert_all_files() {
    _create_dir
    echo ${voice}
    for input_file in *_*.xml
    do
        file_name=${input_file%%.*}
        echo ${file_name}
        _to_audio_file ${voice} ${input_file} ${file_name}
    done
    return 0
}

_to_audio_file() {
    voice=$1
    input_file=$2
    file_name=$3
    aws polly synthesize-speech \
        --text file://${input_file} \
        --voice-id ${voice} \
        --output-format mp3 \
        --text-type ssml \
        "../audio/${voice}/${file_name}.mp3"
    return 0
}

_create_dir() {
    mkdir -p ../audio/${voice}
    return 0
}

case $COMMAND in
    "--all" ) convert_all_files ;;
    "--target" ) convert ;;
    * ) echo "Usage: $0 --all | --target <TARGET_FILE_NAME>" 1>&2
        exit 1 ;;
esac

end=`date +%s`
echo Time elapsed: $((end-start)) seconds
cd $current_directory

exit 0

```

スクリプト化しておくことで変換が大分楽になりました。
build.shと同じディレクトリにある全ファイルを変換
```
./build.sh --all
```

build.shと同じディレクトリにある特定のファイルを変換
```
./build.sh --target <TARGET_FILE_NAME>
```

例
```
./build.sh --target 1_sample.xml
```

### 音声の読み上げをターミナルから実施する
[Macでコマンドラインから音楽を再生する。](https://k-igrs.hatenadiary.jp/entry/2017/08/28/040928)
で紹介されていたafplayコマンドを使ってました。
【Javascript】6.変数

# 前提知識
変数は数字や文字列を格納しておく箱
## 1.変数は値の意味を明示できる*値の意味はAとBはどちらがわかりやすい？
```javascript:A
let snack = 120
let tax = 1.08
console.log(snack * tax) //console.logは（　）に入れた値を表示
```
```javascript:B
console.log(120 * 1.08) //console.logは（　）に入れた値を表示
```
Aの方はお菓子の値段を消費税でかけた額というのが見たらわかるようになるね

## 2.変更が簡単
```javascript:A
// 1995年には消費税が5%です
let snack = 120
let tax = 1.05
console.log(snack * tax) // 5%の時の消費税が表示される
// 2020年には消費税が10%です
tax = 1.10
console.log(snack * tax) // 10%の時の消費税が表示される
```

```javascript:B
console.log(120 * 1.08) console.log(snack * tax) // 5%の時の消費税が表示される

console.log(120 * 1.10) // 10%の時の消費税が表示される
```
Aの場合は数字を変更するときに変数を変えるだけだが、Bの場合は値そのものを変更しなければならない


## 3つの変数
＊let
＊const
＊var
上記は後日説明
GitLabのIssuesやWikiを複製する

RepositoryはCloneすれば簡単に複製できるが、IssuesのチケットやMilestones、Wikiなども複製したい時はProjectのExport機能を使うのが手っ取り早い。\
この記事はGitLabのExport・Import機能を利用してProjectを複製する方法の備忘録である。\
オフィシャルの説明ページは[こちら](https://gitlab.gitlab.unohude.info/help/user/project/settings/import_export)となる。

## Exportされるもの・されないもの
Exportされるものは以下となる。
- Wiki
- Repository
- Projectの設定(Avatarとか)
- IssuesやMerge Request（コメント含む）
- Milestone、Snippet、Board
- その他いくつか

逆にExportされないものは以下となる。
- Project名（Import時に自分でつける）
- CI/CDのVariables
- Jobのログとアーティファクト
- Pipeline triggers
- Token
- Webhook
- コンテナイメージ

CI/CD周りの設定のバックアップには使えなさそうなので、そういう用途で考えていた人は注意が必要そう。

## 事前準備
Download用のURLがメールで飛んでくるので、ログインアカウントのメール設定を適当にしている人は見直しておく。

ユーザアイコンをクリックし、"Edit profile"から"Main settings"の"Email"から変更できる。


## ProjectのExport
プロジェクトを開いた状態で、左のサイドバーの"Settings"から"General"を選択し、一番下の"Advanced"の横のExpandをクリックする。
![1662095504873.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/9ca4b672-0cd2-4f9d-cf93-3342857555b0.png)


クリックした後、"Export project"のところにある、Exportをクリックする。

クリックしてしばらくすると、以下のような文面のメールが届く。
```
Project xxx was exported successfully.

The project export can be downloaded from: Firstname Lastname / xxx export

The download link will expire in 24 hours.
```
メール内にリンクがあるので、クリックするとブラウザが開いて`2022-09-01_21-45-247_name_xxx_export.tar.gz`といった名前のファイルがダウンロードされる。\
これでExportは完了。

## ProjectのImport
ダウンロードしたファイルはプロジェクト作成時に利用して復元することが出来る。

"Menu"->"Projects"->"Create new project"からプロジェクトの新規作成画面を開き、"Import project"を選択する。

![1662096066762.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/da566052-d1db-e14a-f01b-ae9d4452cb93.png)


この時、以下のようになればOK。
![1662096164595.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/10bd4079-1dd8-72b7-6944-1f110849149e.png)

"GitLab export"を選択し、遷移後の画面で"Choose File"をクリックしてExportしたファイルを選択し、Project name, Project URL, Project slugを好きなように入力してImport ProjectをクリックすればExportしたProjectが復元できる。

なお、運用によってはImport方法を以下のように制限していることもあり、その場合は使えない点に注意。
![1662096320443.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/c526084a-0b3d-c294-d04c-dfcc32f4d314.png)
SQL高速化のためのメモ書き

SQL高速化のためのメモ記事
# Like句
前方一致ではインデックス効くが、後方一致・部分一致では使用されない。

関連して、REGEXP関数はインデックスが効かないので注意。
こういうのはインデックス使われない
```
(SELECT * FROM テーブル WHERE カラム regexp '(^bb\\.\\*.*)|(^11.*)'));
```

## LIKEとINを併用したいケースはどうすべきか
→OR繋ぐ
これがシンプルだがインデックスも使えて良い
```
(SELECT * FROM テーブル WHERE カラム like 'b%' OR カラム like '1%';
```
Vueでhello world!②

# 下記ファイルを作成する

```vue: Hello.html
<div id="app">
    {{ text }}
</div>
<script src="vue.js"></script>
<script>
    new Vue({
    el:'#app',
    data(){
        return{
            text: "hello world!"
        };
    }
})
</script>
```

## ブラウザへ表示する
Hello.htmlをブラウザへドラッグ&ドロップする

# マスタッシュ構文
{{ 変数名 }} とすることで、Vueに定義したdataの変数をコンポーネントやテンプレートに埋め込むことができる。

# Vueでhello world!① はこちら
https://qiita.com/gusuku/items/dc3cb31ef21e58be775e

# 参考
https://qiita.com/mackeyTA/items/ddf102a48da65c70162f
Jupiter labでブラウザか開かない時

## 事象
使えない時は
![スクリーンショット 2022-08-26 15.42.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/714631/6017467e-6cd1-79ac-4063-78f5e004a214.png)
こんなのが出てきたりと

## 原因
わからない、、
## 解決方法
```:webmanagerをインストール
pip install wedriver_manager
```
## 解決方法
```:webmanagerをインストール
pip install wedriver_manager
```
```:webmanagerをモジュール化
from webdriver_manager.chrome import ChromeDriverManager
```

```:ブラウザを開いてみよう
browser = webdriver.Chrome(ChromeDriverManager().install())
```
```:ブラウザを開いてみよう２
browser2 = webdriver.Chrome(ChromeDriverManager().install())
```

![スクリーンショット 2022-08-26 18.26.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/714631/5258b2fe-c78b-6676-ebe7-63502fc98117.png)

### ＊ポイント
変数の数だけページが開く　browser　browser2を宣言したので、２ページ作成
![スクリーンショット 2022-08-27 0.37.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/714631/3f250d91-9c7b-d8d4-4bbe-065b0112e3af.png)


## ブラウザにURLを加えてみよう
```:ブラウザにURLを加えてみよう
browser.get('URLを加えよう')
```
【Ruby】ループ処理をより簡潔に書こう(each,map,&:)

## はじめに
どうも、もきおです。Rubyのループ処理はfor,each,mapなど色々と選択肢がありますよね。今回はループ処理をより簡潔に書く方法をメモとして残しておきたいと思います。

最後に実務でループ処理をどうリファクタリングしていったかを記載しておくので最後までご覧いただけますと幸いです。
## データ作成
まずはデータを作成していきます。今回はnameカラムを持ったuserを作成し、userをループ処理してnameを配列に格納してname一覧を作成するという処理をしていきます。
```ruby:
class User
  attr_accessor :name
end

user1 = User.new
user1.name = "鈴木"
user2 = User.new
user1.name = "佐藤"
user3 = User.new
user1.name = "小林"

users = [user1, user2, user3]
```

## eachでループ処理して配列作成
まずはeach文。each文でループ処理して新たな配列に格納するには事前に空配列を定義しておく必要があります。
```ruby:
names = []
users.each do |user|
  names << user.name
end

p names
#=> ["鈴木", "佐藤", "小林"]
```

## mapでループ処理して配列作成
今回みたいにループで回し、各々を処理した結果を新しい配列に格納したい場合はeachよりもmapの方が簡単に記述する事ができます。mapの場合は事前に空配列を定義していなくてもそのまま配列に格納していく事ができます。
```ruby:
names = users.map do |user|
  user.name
end
#=> ["鈴木", "佐藤", "小林"]
```
## ブロックを使ってより簡潔にループ処理を書く
続いて今回みたいにループ中の処理が1行のみという簡単な処理の場合　(1行でなくても可能です)、ブロックを使用することによってより簡潔に記述する事ができます。
```ruby:
names = users.map { |user| user.name }
#=> ["鈴木", "佐藤", "小林"]
```
前項の処理がこのように1行で記述する事ができてしまいます。これは実務コードでも良く見かけますし使います。

## &:を使用して更に簡潔にループ処理を書く
最後にブロックを使用するよりも更に簡潔に記述できる方法があります。アンパサンド(&)とメソッド名をシンボルで(:)囲みます。
```ruby:
names = users.map(&:name)
#=> ["鈴木", "佐藤", "小林"]
```

(&:)が何をやっているのかというのは以下の記事が参考になりました。

https://qiita.com/k-penguin-sato/items/420d7487b28b5d58cac4


## 実務でループ処理をどう簡潔に書くか
最後に実務でループ処理をどうリファクタリングしていったかを記載して終わろうと思います。今回はaccountsに複数のアカウントが格納されており、それぞれ売上(sale)カラムを所持しているという設定。アカウントの総売上を求めたいとします。

まずはeachでループ処理して算出する方法
```ruby:
sale_total = []
accounts.each do |account|
  sale_total += account.sale
end
```
次にpluckメソッドを使用し売上一覧を配列にし、それをsumメソッドで合計する方法
```ruby:
sale_total = accounts.pluck(:sale).sum
# [1000, 2000, 3000, 4000].sum
p sale_total
# => 10000
```
pluckメソッドはカラムの値一覧``例：[1000, 2000, 3000, 4000]``を配列として取り出してくれるというメソッドです。

何度も値一覧を使用したい場合、配列として取り出しておけば、都度クエリを発行しなくて済むので、pluckメソッドは実務でめちゃくちゃ使います。実務でRubyを使用するなら覚えておいて損はないかと思います。

https://qiita.com/k-o-u/items/31e4a2f9f5d2a3c7867f

最後に``&:``を使用する方法
```ruby:
sale_total = accounts.sum(&:sale)

p sale_total
# => 10000
```
こんな感じで最終的にここまで簡潔に記載する事ができました。

## あとがき
いかがだったでしょうか？実務コードを読んでいて(&:)の記載を見た時何これ状態でした。こうやって地道に調べていってコードの理解を深めていきたいと思います。

最後までご覧いただき本当にありがとうございました！！

Twitterでも日頃の業務で思ったことを呟いていくのでご覧いただけると幸いです。
[@mokio_50](https://twitter.com/mokio_50)
文字コードの5C問題について解説

最近直面した5C問題をメモとしてまとめておこうと思います。

## 5C問題とは
日本語は、ひらがな、カタカナ、漢字など文字数も多く、1バイト（256種類）では
すべての文字を表現することは難しいため、`ShiftJIS`では、漢字を**1文字当たり2バイト**を
使って文字情報を表します。

ここで問題なのが、`「￥」`、`「 \ 」`の文字コードが「**5c**」であり、
**一部の漢字の文字コードが重複している**ため、コンピュータはその箇所を
**エスケープ記号**として解釈することにより正常に読み取れなくなっている。

<table>
  <tr>
    <th>文字</th>
    <th colspan="2">Shift-JISコード</th>
  </tr>
  <tr>
    <td style="text-align:center">噂</td>
    <td style="text-align:center">89</td>
    <td style="text-align:center">5c</td>
  </tr>
  <tr>
    <td style="text-align:center">予</td>
    <td style="text-align:center">97</td>
    <td style="text-align:center">5c</td>
  </tr>
  <tr>
    <td style="text-align:center">兔</td>
    <td style="text-align:center">99</td>
    <td style="text-align:center">5c</td>
  </tr>
</table>

こちらの文字コード表を参考

http://charset.7jp.net/sjis.html


## コードで確認

PHPで`ShiftJIS`の「兔」の文字の値を見てみる。
```php:php
$str = mb_convert_encoding('兔', 'SJIS', 'UTF-8');
var_dump($str);
// 出力結果: string(2) "�￥"
```
エスケープ文字の`「￥」`が表示された。
これは、コンピュータが「兔」の文字コード`「5c」`の箇所を`「￥」`として
解釈したためである。
このままの状態でプログラムを書くと予期せぬエラーが発生する可能性がある。

## 想定されるエラー

例として、CSVデータ取得処理のときファイルが`Shift-JIS`で
特定の文字を使っているときを想定し、PHPの`fgetcsvメソッド`を使用してデータを取得する。
```php:php
$temp = tmpfile();
$str = mb_convert_encoding('"兔"', 'SJIS', 'UTF-8');
var_dump($str);
// 出力結果: string(4) ""�￥""
fwrite($temp, $str);
var_dump(fgetcsv($temp));
// 出力結果: bool(false)
```
`$str`の値には`""�￥""`がはいっており、これを解釈すると
`「￥」`の次の`「"」`がエスケープされ、形式が崩れてしまうことで
`fgetcsvメソッド`は`false`を返してしまう。


## 回避するには
- 文字コードを`ShiftJIS`を`UTF-8`へ変換する。
- 各言語で変換するためのロジックを組む必要がある。

PHPであれば、`file_get_contentsメソッド`でファイル全体を文字列に読み込んだ後に
`mb_convert_encodingメソッド`で`UTF-8`へ変換する。

又は、`ストリームフィルタ機能`を使って`php_user_filterクラス`を継承したクラスを
生成した後に`filterメソッド`を定義して変換する処理を書く。

## 感想
文字コードの問題は頭の片隅に置いといて
ファイル読み込みの際は、対策を考慮しないといけないですね。

ストリームフィルタを作るのは結構大変そうなので
調べて別の記事に注意点などメモとしてまとめたいなと思います。
Databricks SQLのクエリーキャッシュ

[Query caching \| Databricks on AWS](https://docs.databricks.com/sql/admin/query-caching.html) [2022/6/23時点]の翻訳です。

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

Databricks SQLでは以下のタイプのクエリーキャッシュをサポートしています。

- Databricks SQLのUIキャッシュ: Databricks SQLの[UI](https://docs.databricks.com/sql/user/queries/index.html)においてすべてのクエリーとダッシュボードの結果のユーザーごとのキャッシュ。

    パブリックプレビューにおいては、クエリーのデフォルトの挙動とクエリーの結果の両方は、お使いのDatabricksアカウントのDatabricksファイルシステムに恒久的にキャッシュされ、格納されます。キャッシュが不要になったクエリーを再実行することで、クエリーの結果を削除することができます。

- クエリー結果のキャッシュ: SQLウェアハウスで実行されるすべてのクエリーの結果をクラスターごとにキャッシュします。

    クエリー結果のキャッシュを無効化するには、SQLエディタで`SET use_cached_result = false`を実行します。

    :::note warn
    **重要！**
    テストやベンチマークを行う際にのみこのオプションを使用してください。
  :::

- [Deltaキャッシュ](https://qiita.com/taka_yayoi/items/395fb7fabad655ceb37c): SQLウェアハウスで実行されるクエリーのために、データストレージからデータを読み込みローカルのSSDにキャッシュします。

    クエリー結果のキャッシュと[Deltaキャッシュ](https://qiita.com/taka_yayoi/items/395fb7fabad655ceb37c)は、Databricks SQLの[UI](https://docs.databricks.com/sql/user/queries/index.html)と[BIや他の外部クラインアント](https://docs.databricks.com/integrations/index.html)で有効となります。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
Python,Ruby,PHP,Java,JavaScript,Perlの演算子の比較 | プログラミング言語比較



<a href="https://qiita.com/yuki_kimoto/items/f9c2454e7f9130ddb003">Qiita > プログラミング言語の比較</a>

プログラミング言語Python,Ruby,PHP,Java,JavaScript,Perlの演算子の比較

# Python

https://qiita.com/G-Rape/items/cd3f2f284ba990164564

# Ruby

https://www.tohoho-web.com/ruby/operators.html

# PHP

https://qiita.com/mzmz__02/items/8bfbcf2cd48d9e9f2806

# Java

https://qiita.com/suema0331/items/7045e3ce3e2f5faa9acf

# JavaScript

https://qiita.com/uhyo/items/cc92a553059274d85403

# Perl

https://perlzemi.com/blog/20161005147566.html
できるスキーム　Keycloakインストール編

前回はAzure上のUbuntuのKeycloak9.0でOAuth2.0を試しました。
https://qiita.com/namikitakeo/items/0c283b2e5da55670c542

今回はSCIM2.0をつかうためにAzure上のUbuntuにKeycloak18.0をインストールしてみます。
https://github.com/Captain-P-Goldfish/scim-for-keycloak

テスト環境は以下の通りです。

```
# uname -a
Linux ubuntu18 5.0.0-1020-azure #21~18.04.1-Ubuntu SMP Fri Sep 13 14:10:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

# java -version
openjdk version "17.0.4" 2022-07-19
OpenJDK Runtime Environment (build 17.0.4+8-Ubuntu-118.04)
OpenJDK 64-Bit Server VM (build 17.0.4+8-Ubuntu-118.04, mixed mode, sharing)
```

まずはKeycloakをダウンロードして解凍します。

```
# cd /opt
# wget https://github.com/keycloak/keycloak/releases/download/18.0.0/keycloak-18.0.0.tar.gz
# tar zxvf keycloak-18.0.0.tar.gz
# cd keycloak-18.0.0
# wget https://github.com/Captain-P-Goldfish/scim-for-keycloak/releases/download/kc-18-b1/scim-for-keycloak-kc-18-b1.jar
# mv ./scim-for-keycloak-kc-18-b1.jar providers/
# ./bin/kc.sh build
# ./bin/kc.sh show-config
```

つぎに管理ユーザー(admin)を設定して起動します。

```
# export KEYCLOAK_ADMIN=admin
# export KEYCLOAK_ADMIN_PASSWORD=********
# ./bin/kc.sh start --proxy=edge --hostname=ubuntu18.japaneast.cloudapp.azure.com
```

SSL設定とProxy設定をApacheで行います。

```apache2.conf
（省略）
ProxyPreserveHost On
ProxyRequests Off
RequestHeader add X-forwarded-proto https
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
（省略）
```

# 次回
できるスキーム　Keycloak活用編
https://qiita.com/namikitakeo/items/60f1ee79f51b13fbf7c0
git初学者が必ず出会う「error: Your local changes to the following files would be overwritten by checkout:」について

どうもaono1234と申します。記事がいいなと思ったらtwitterのフォローもお待ちしております‼
https://twitter.com/takeshi_program


今回は初心者が必ず遭遇する`error: Your local changes to the following files would be overwritten by checkout:`のエラーについて説明したいと思います。

gitをまだ触って日が浅い方は100%このエラー文を経験するかと思います。
私も経験しました。🤢

このエラーはどのような場合に出力されるのか？書いていきます。

# はじめに
本記事は以下の読者様が対象です。
* <b>プログラミング初心者

* <b>gitを少し触ったことがある人

* <b>add commitしたことある人

# 先に結論(⭕下に図解があります)
<b>【パターンA】該当のエラーが発生するケース
1. `burach A`から新しい`branch B`を切る
1. `branch B`にてなんでも良いのでコードを`commit` する。
1. `branch B`にて ~~なんでも良いので~~2で変更をcommitしたファイルについて「ワーキングツリー上でコードを変更する」`or`「変更したコードを `git add` する」。(commitしない)
1. `burach A`に移動する
1. <b>エラー発生

<b>【パターンB】該当のエラーが発生しないケース👈重要!!😲
1. `burach A`から新しい`branch B`を切る
1.  ~~`branch B`にてなんでも良いのでコードを`commit` する。~~
1. `branch B`にてなんでも良いので「ワークツリー上でコードを変更する」`or`「変更したコードを `git add` する」。(commitしない)
1. `burach A`に移動する
1. <b>エラー発生しない


# 実演
## 【パターンA】該当のエラーが発生するケース
```sh
current_branch[master]
    $ git checkout -b test
        #Switched to a new branch 'test'

#【このタイミングでindex.htmlのコードを一部変更】
current_branch[test]
    $ git add .

current_branch[test]
    $ git status
        #On branch test
        #Changes to be committed:
        #  (use "git restore --staged <file>..." to unstage)
        #    new file:   index.html ←ステージングしたファイル

current_branch[test]
    $ git commit -m "first commit"
        #[test a0d22ab] first commit
        # 1 file changed, 1 insertion(+)


#【このタイミングでindex.htmlのコードを一部変更】
current_branch[test]
    $ git add .

current_branch[test]
    $ git switch master
        #error: Your local changes to the following files would be overwritten by checkout:
        #        index.html
        #Please commit your changes or stash them before you switch branches.
        #Aborting
```
## 【パターンB】該当のエラーが発生しないケース
```sh
current_branch[master]
    $ git checkout -b test
        #Switched to a new branch 'test'

#【このタイミングでindex.htmlのコードを一部変更】
current_branch[test]
    $ git add .

current_branch[test]
    $ git status
        #On branch test
        #Changes to be committed:
        #  (use "git restore --staged <file>..." to unstage)
        #    new file:   index.html ←ステージングしたファイル

current_branch[test]
    $ git switch -
        #M       index.html
        #Switched to branch 'master'
```
# 図解
【パターンA】はエラーが発生するのに対して、【パターンB】はエラーが発生しません。
これはワークツリーとステージングエリアは同時期のブランチには並行移動できるが、過去のブランチには移動できないことを意味しています。以下のようなイメージです。

## 【パターンA】
![パターンA.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534058/ea5355dd-7822-1c60-7b18-b657d2e95894.png)

## 【パターンB】
![パターンB.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534058/0612c4f4-5284-e575-06b2-c1afc9a27fee.png)

# おわりに
如何でしょうか？
イメージは掴めましたか？

この違いを把握しておけば
master ブランチで間違って作業していた！😨
という場合でも、testブランチがまだコミットしてない（並行移動できる位置）であれば
ワークツリーとステージングエリアをtestブランチにそのまま引っ越しすることができますね😄

これからも色々と記事を投稿したいと思っておりますので、
どうぞ、よろしくお願いします！　:smiley:
Accuracy(精度)を求める(SPSS Modeler データ加工逆引き8-1)

# Accuracy(精度)を求める（混同行列）

![スクリーンショット 2022-08-12 11.52.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/1345af6f-ebea-d846-cc86-f533718e8c06.png)

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

・予測モデルの性能評価
・実装後のモデルメンテナンスのための性能指標の算出

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

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

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

![スクリーンショット 2022-08-13 9.09.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/8c6dc147-06a6-9aac-c6e3-176c07411ebe.png)

a.入力するデータは以下の通りです。故障有無とその予測の2列のデータです。
![スクリーンショット 2022-08-12 11.57.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/833c5174-cdd7-ff80-f384-4c8de52da9b3.png)

b.[精度分析]ノードを編集します。[一致行列]にチェックします。
![スクリーンショット 2022-08-12 11.56.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/96de672b-5fe7-78df-b88a-02b05a4d525d.png)

[実行]します。故障と予測して実際に故障していたのが8レコード（TP）、故障しないと予測して実際に故障していなかったのが6レコード（TN）。その正解の合計が全体20レコードに占める割合が精度=0.7です。
![スクリーンショット 2022-08-12 11.56.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d143118b-ba6e-6b28-6be5-3ed82f5f6c64.png)

https://qiita.com/416nishimaki/items/fa492fa4c68e05f3c3f3

#### 実装後のモデル監視のために精度をテーブル表示させる。

c.[フィールド作成]ノードを編集します。[派生]モードを[フラグ型]にしてフラグが真になる条件を予測と実績が合致するように記述します。
![スクリーンショット 2022-08-13 10.04.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e7bc2217-460e-b543-bc76-50636e63a099.png)

d.[棒グラフ]ノードを実行します。[派生]モードを[フラグ型]にしてフラグが真になる条件を以下のように記述します。
![スクリーンショット 2022-08-13 10.04.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d50dc955-4803-b319-2e80-e0cd39445412.png)

[プレビュー]します。予測と実績が合致するとAccuracyにフラグが立ちます。
![スクリーンショット 2022-08-13 10.05.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b7b2a857-76a8-7050-aa93-fb91de50e94b.png)

e.[レコード集計]ノードを編集します。
![スクリーンショット 2022-08-13 10.08.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/7b5c0b25-89c0-90f5-3c3b-4694d8cb7f35.png)

[プレビュー]します。Accuracy（精度）が表示されました。
![スクリーンショット 2022-08-13 10.09.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d14e7125-1613-a05b-188d-67d326823ea3.png)

#### 注意事項

精度は最初に確認するべき重要なモデル性能指標ですが、以下のように故障をひとつも当てられなくても、故障しないと予測したレコードの多くが当たっていると（TN）見かけ上の精度が高まるので注意します。そのためにもPrecision（適合率）とRecall（再現率）など目的に応じた性能指標を併せて確認する必要があります。

![スクリーンショット 2022-08-13 10.02.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/715e8826-0195-0f61-24bb-97b3bb1695bc.png)

## 4.参考情報

#### モデルの性能指標について解説した記事

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

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

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

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

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

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
【VSCode】プレーンテキストと言語の関連付け




## 目次

[1. はじめに](#1はじめに)
[2. 環境](#2環境)
[3. 方法](#3方法)
[3-1. プレーンテキストから関連付け](#3-1プレーンテキストから関連付け)
[3-2. 設定から関連付け](#3-2設定から関連付け)
[3-3. 関連付けの編集と削除](#3-3関連付けの編集と削除)
[4. 参考](#4参考)
[5. 最後に](#5最後に)


# 1.はじめに

テキストエディタでVSCodeを使用しています。VSCodeでは、登録されていない拡張子はプレーンテキスト扱いとなっています。（プレーンテキストの場合なかなか見にくいです…😅）

自分が業務で使用する拡張子はVSCodeに対応していないのですが、先輩から関連付けの方法を聞いて導入しました。

関連付けをすることで、その言語として扱われるようになります。

今回は、VSCodeで登録されている言語に関連付けする方法を2つまとめました。


# 2.環境

- windows10 バージョン21H2
- VSCode 1.70.0


# 3.方法

対応している言語の場合だと、以下のように色がついているかと思います。これをプレーンテキストでもやっていきます。

▼例:CSSの場合(右下にCSSと表示されています)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689555/359509ed-4c66-908f-ed08-450e3d9e814d.png" width=80%>


## 3-1.プレーンテキストから関連付け

①プレーンテキストを選択します。

②「’○○(拡張子)’に対する関連付けの構成…」を選択します。

③関連付けをしたい言語を選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689555/aa6ce335-0a5c-4444-4e65-a0f34c972537.png" width=80%>

一度関連付けをすると、別のフォルダを開いた際でも関連付けができていました。


## 3-2.設定から関連付け

①左下の歯車ボタンを選択します。

②設定を選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689555/fed1542a-d204-6186-81fd-55394f097f6e.png" width=80%>

③検索窓で「関連付け」と入力します。

④「Files: Associations」の項目に拡張子、値に関連付けをする言語を入力します。

▼例:「.dat」をASPの言語に関連付けたい場合(項目：*.dat,値：aspとしています)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689555/cdd067c0-fc14-062a-7c9c-f7a9729dd958.png" width=80%>
こちらも一度関連付けをすると、別のフォルダを開いた際でも関連付けができていました。
例の場合、「.dat」ファイルをASPとして扱われるようになります。


## 3-3.関連付けの編集と削除

①途中までは3-2と同様で、設定→関連付け→「Files: Associations」のところにいきます。

カーソルを合わせると編集と削除が表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689555/f15485c1-0e9d-c475-1984-592d04aa907a.png" width=80%>


# 4.参考

https://pg.kdtk.net/1336


# 5.最後に

個人的には便利だなと思ったので記事にしました。「プレーンテキスト見にくいなぁ」という方は参考にしてみてください。
読んで頂き、ありがとうございました。
Python nlplot で共起ネットワーク表示

Pythonの[`nlplot`パッケージ](https://pypi.org/project/nlplot/)で共起ネットワークを表示しました。
例えば「木下ふみこ」と検索したTwitter結果を取得してnlplotで表示すると以下のような図が出てきます(前処理をいくつか加えているので、単純にやっても以下のとおりにはならないです)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134273/0d64e45b-0dc1-fe35-bf7d-7f00b2833488.png)

https://ja.wikipedia.org/wiki/%E6%9C%A8%E4%B8%8B%E5%AF%8C%E7%BE%8E%E5%AD%90

# 環境

|Python/パッケージ|Version|
|:-:|:-:|
|Python|3.9.13|
|nlplot|1.4.0|
|pandas|1.4.3|

# Python Script
コードはシンプルでこんな感じ。`save=True`にしたことで、HTMLファイルとして保存されます。

```python
import pandas as pd
import nlplot

df = pd.read_table('test.txt', names=['tokens'])

# target_col as a list type or a string separated by a space.
npt = nlplot.NLPlot(df, target_col='tokens')
stopwords = npt.get_stopword(top_n=15, min_freq=2)
npt.build_graph(stopwords=stopwords, min_edge_frequency=5)
npt.co_network(title='Co-occurrence network', width=600, height=500, save=True)
```

読込ファイルの中身は分かち書き済みのテキスト(スペース区切り)です。

```txt: test.txt(一部抜粋)
建築 エコノミスト 肩書き 自称 人物 小池 都政 当時 主張 豊洲 デマ メディア 共犯 関係 政局 都議選 問題 こと 小池 新党 こと 都民 ファースト 圧勝 ちなみ
こと 木下 ふみこ
写真 右 木下 ふみこ 笑
無免許 ひき逃げ 木下 ふみこ 板橋 選出 都 比較 申し訳 木下 違い 木下 板橋区 地元 愛 松田 都 板橋区 板橋 区民 松田 都 本当 前
都議会 ホームページ 死亡 退職 お知らせ 木下 ふみこ 辞職 荒木 ちはる 退職時 西山 議員 紹介 ページ 現員 会派 議員 西山 議員 分
木下 ふみこ 都民 白紙 投票
A 経済産業省 金融 課 Q 昨日 電話 議会 今 電話 A Q 崖 上 A ポニョ ポニョ 会話 結局 議員
```
本日の発掘動画：QEMUで組み込みLinux

・QEMUを活用し実機の無い環境で組み込みLinuxを開発／実行する【APS】
　　https://www.youtube.com/watch?v=0cD2fRGrVKQ

-----

【情報・工学】青レンの良質解説動画 発掘一覧
　　https://qiita.com/aokiren8/items/965746f13ce27cb65ffa
code-serverを使ってWindows上で簡易なLinux上の開発環境を得る方法

あるオンラインコースで用意されたコードやスクリプトは、LinuxやMacのみ対応でした。私はWindowsを使っていたためそのまま使うことができず不便な思いをしました。もちろん、WSL (Windows Subsystem for Linux)、VirtualBox、そして、Hyper-Vなどを使ってLinux環境を得る方法もありますが、会社等組織の中でその使用が規制されていたり、また、一時的な環境のためには面倒であったりしました。幸い、私のWindowsにはDocker Desktop for Windowsがインストールされていたので、code-serverを使って必要な環境を用意することにしました。以下の手順は、Docker Desktop for Windowsがインストールされていることを前提に書いています。

## code-serverのインストール

まずはコードを格納するフォルダを用意します。Windowsコマンドをプロンプトを開き、`c:\mycode`を作成します。

```bat
mkdir c:\mycode
```

そして、Dockerの起動コマンドを`code-server`を起動します。このコマンドは[このドキュメント](https://hub.docker.com/r/linuxserver/code-server)からほぼコピペしています。必要に応じて変更してください。

```bash
docker run -d --name=code-server -e PUID=1000 -e PGID=1000 -e TZ=Europe/London -e PASSWORD=password -e SUDO_PASSWORD=password -e DEFAULT_WORKSPACE=/mycode -p 8443:8443 -v c:/mycode:/mycode --restart unless-stopped lscr.io/linuxserver/code-server:latest
```

そして、[http://localhost:8443](http://localhost:8443)を開くと以下のように表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634234/dcfcb46a-a264-a48c-eb92-969e490c7389.png)

そして、`password`と設定したパスワードを入力し、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634234/831539c4-a3a5-3437-a961-5a060a476345.png)

環境を開きます。

## ターミナルを開いて環境を確認

```
cat /etc/os-release
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634234/197f91e1-6d97-4f55-5c1f-fa10ff5ada00.png)

表示されているようにUbuntuの環境です。このターミナルを通して必要なパッケージやコマンドをインストールすることができます。例えば、`strace`が必要だとします。その場合は、

```bash
sudo apt-get update -y
sudo apt-get install strace -y
strace -h
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634234/55b041c7-34c9-31bd-10b2-65690c0d6b29.png)

## おわりに

このようにDockerと`code-server`を使ってWindows上で簡易なLinux上の開発環境を得ることができます。ちょっとLinuxの環境が必要な時に利用してみてください。
ドラッカーの「マネジメント」を読み直して永遠の「管理職vs専門職」問題を考えた

マネジメント(管理職) をM職、スペシャリスト(専門職) をS職と表現する。以下まとめは自己流な理解も含むので、詳細は[「マネジメント」](https://www.amazon.co.jp/dp/4478410232) 参照

## 結論

この記事の結論です

- **M職はS職よりえらいのか**
    - **えらくない**
    - ただの違い
    - 両者を行き来しても良い
- **M職もS職も目指すものは何が同じなのか**
    - **真摯であり、謙虚であること**
    - チームに貢献する
    - チームに貢献するために、皆に良い影響を与える
- **M職とS職の違いは何なのか**
    - **結局役割分担**
    - M職は、皆の環境面
    - S職は、皆の道具面とか、現場面とか
    - 違いを聞かれたら、例えるならこんな関係
        - 野球部のマネージャーと野球部員
        - 監督とトッププレーヤーな選手
        - 指揮者とコンサートマスター
- **M職とS職の誤解**
    - S職にもコミュニケーション力は要るし、協調性もむしろ要る
    - M職にも知識の研鑽は要る


## ドラッカーの「マネジメント」

> **組織をして高度の成果をあげさせることが、自由と尊厳を守る唯一の方策である。** 組織に成果をあげさせるものがマネジメントであり、マネジャーの力である。成果をあげる責任あるマネジメントこそ全体主義に代わるものであり、われわれを全体主義から守る唯一の手立て

だから、専門職だから自由とか、管理職だから全体主義的とか、そんなことはない、

> 仕事のうえの人間関係は、尊敬に基礎を置かなければならない。これに対し心理的支配は、根本において人をばかにしている。伝統的なＸ理論以上に人をばかにする。

> 心理的支配は、人を怠惰で仕事を嫌う存在とは仮定しないが、マネジメントだけが健康で、他の者はすべて病気であると仮定する。

> マネジメントだけが強く、他の者はすべて弱いとする。マネジメントだけが知識を持っており、他の者はすべて無知であるとする。マネジメントだけが正しく、他の者はすべてばかであるとする。まさに傲慢で、ばかげた仮定

これらは、マネジメントをよい気持ちにさせてるだけ。つまりこういうマネジメント像は、誤り

> **責任** がマネジャーを見分ける基準である。いわゆるマネジャーと専門家との関係も、マネジャーを責任と機能によって定義することによって、初めてはっきりさせることができる。

> **機能と地位は切り離さなければならない。**
> 軍では、少佐は地位である。それだけでは、大隊の指揮官すなわちマネジャーであるか、国防総省の研究者すなわち専門家であるかはわからない。軍では、少佐という地位のほかに、大隊長とかコミュニケーション専門家といった機能上の肩書を与えている

管理職vs専門職 は二項対立ではない。役割分担

> 野球のスターが、監督やコーチよりも収入が多くとも不思議ではない。専門家によって構成される部門の長たるマネジャーは、その部門のほとんどの者よりも多くの報酬を受ける。しかし、彼よりも多くの報酬を受けるスターが、一人や二人いることを例外としてはならない

**真摯さなくして組織なし**
- 強みよりも弱みに目を向ける者をマネジャーに任命してはならない
- 何が正しいかよりも、誰が正しいかに関心を持つ者をマネジャーに任命してはならない
- 真摯さよりも、頭のよさを重視する者をマネジャーに任命してはならない
- 部下に脅威を感じる者を昇進させてはならない
- 自らの仕事に高い基準を設定しない者もマネジャーに任命してはならない

だから某ベストセラーのように、 野球部のマネジャーたる野球部員の関係 のようなもの
だから本来、マネジャーの仕事も楽しさがあるはず

**どちらも目指すゴールは、チームを勝たせること**
[マネジメント[エッセンシャル版] - 基本と原則 | ピーター・F・ドラッカー, 上田 惇生 |本 | 通販 | Amazon](https://www.amazon.co.jp/dp/4478410232)

![](https://images-na.ssl-images-amazon.com/images/I/41AY8WEF74L._SX327_BO1,204,203,200_.jpg)


## 参考
[(17) 「管理職になりたくない！」という若者が増えた理由は何なのでしょうか？ - Quora](https://jp.quora.com/%E7%AE%A1%E7%90%86%E8%81%B7%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84-%E3%81%A8%E3%81%84%E3%81%86%E8%8B%A5%E8%80%85%E3%81%8C%E5%A2%97%E3%81%88%E3%81%9F%E7%90%86%E7%94%B1%E3%81%AF%E4%BD%95)
> 人を纏める(マネジメント)によって結果を出す。目標を達成する過程を作り上げる。人を育てる。それらは面白い仕事です。その面白さを伝えきれていない日本の労働環境を変える事が出来れば、きっと管理職を目指したいと思う筈です。

[スペシャリストとマネージャーにまつわる誤解3選 - Qiita](https://qiita.com/rf_p/items/ddbab94776a288eb55dd)
[管理職になりたくない若者が増えているというがマネージャーのお仕事をたのしくしたい - Qiita](https://qiita.com/e99h2121/items/2d6e6045df53ab527b4d)
[なぜIT技術者でマネジメントのキャリアパスを目指す人は少ないのか - Qiita](https://qiita.com/rf_p/items/d837f0d370c86a4e9318#%E6%8A%80%E8%A1%93%E8%80%85%E3%81%AE%E7%AE%A1%E7%90%86%E8%80%85%E3%81%AF%E6%8A%80%E8%A1%93%E8%80%85%E3%81%98%E3%82%83%E3%81%AA%E3%81%84%E3%81%A8%E3%81%84%E3%81%91%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B)

以上です～
2022/9/5主にITとかセキュリティの記事

パスワード付きファイルが添付されたメールの送受信制限に関するお知らせ(9/1)
https://www.softbanktech.co.jp/news/topics/info/2022/020/

害悪とまで言われる日本特有のメールセキュリティ「PPAP」から企業はどう脱出するか(9/2)
https://atmarkit.itmedia.co.jp/ait/articles/2209/02/news003.html

スマホに怪しいメールが届いても「見分けよう」としてはいけない理由(9/1)
https://news.infoseek.co.jp/article/itmedia_mobile_20220823024/?tpgnr=it

米シンクタンク、CBDC調査のため「テクニカル・サンドボックス」立ち上げ(9/2)
https://jp.cointelegraph.com/news/think-tank-launches-technical-sandbox-exploring-united-states-cbdcs

スマホ乗っ取り被害の実態　自宅のリビングでも放置しておくのはリスク大(9/2)
https://news.goo.ne.jp/article/moneypost/life/moneypost-942412.html

Webサイト向けCMS、WordPressの圧倒的なシェア変わらず(9/3)
https://news.mynavi.jp/techplus/article/20220903-2442660/

【第10回】UbuntuのCLIはそこまで怖くない！(と思う。たぶん)(9/3)
https://pc.watch.impress.co.jp/docs/column/ubuntu/1437029.html

Sudoswap は、そのガバナンストークンである SUDO のローンチを発表しました(9/2)
https://portalcripto.com.br/ja/sudoswap-%E3%81%AF%E3%80%81sudo-%E3%81%AE%E3%82%AC%E3%83%90%E3%83%8A%E3%83%B3%E3%82%B9-%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E9%96%8B%E5%A7%8B%E3%82%92%E7%99%BA%E8%A1%A8%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82/

Google Playストア、日本でもアプリ内決済で外部サービス選択可能にするテスト開始(9/3)
https://www.itmedia.co.jp/news/articles/2209/03/news047.html
   
iPhone機種変での「LINE移行」がますます簡単になってるので、やり方をまとめました(9/2)
https://gunosy.com/articles/ecyEM

Avalancheサブネットはパブリックチェーン部門でどのように目立ったのか？(9/1)
https://crypto-times.jp/avalanche-coinex-pr/
[heroku]IP address mismatchが出たとき。

```terminal:terminal
heroku login
```
でIP address mismatchが出たときの対処法
```terminal:terminal
heroku login -i
```
を実行するとターミナル内でメアドとパスワードの入力が求められてログインすることができる。ただしこのときのパスワードはAPI Keyであることに注意しなければならなかった。
自分のAPI Keyはherokuのサイトの右上のアイコン→account settings→Accountタブ→API keyから確認することができる