OmniAICreator/Qiita-1.07M huggingface dataset:
SAPUI5>SimpleForm columns系についてまとめて見た

# SimpleFormの「columnsX」系をまとめてみた

## SimpleFormにはサイズによって設定するカラム数を変更出来るオプションがある

・columnsM（７００px〜1120px)
・columnsL(1121px〜1569px)
・columnsXL(1570px〜）

※（）の中に入っているサイズはオプションが切り替わるサイズ

## 各オプションにはそれぞれ以下のような条件がある

columnsMはcolumnsLより小さくてはならない
columnsMはcolumnsXLより小さくてはならない
columnsLはcolumnsXLより小さくてはならない

図にするとこんな感じ
columnsM<=columnsL<=columnsXL

## ソースベースだと
```
<form:SimpleForm columnsM="2" columnsL="3" columnsXL="4">
　　・
　　・
　　内容
　　・
　　・
</form:SimpleForm>
```

## 他を設定するのが手間だったのでcolumnsMだけ設定しよしなにしてくれないと思ったが

```
<form:SimpleForm columnsM="3">
　　・
　　・
　　内容
　　・
　　・
</form:SimpleForm>
```

![スクリーンショット 0004-05-24 17.31.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500270/e2a9e106-ed3f-42d8-a02d-b8614a5e715f.png)
めちゃくちゃ怒られた💦

どうも何も設定しない場合
columnsM="1"
columnsL="2"
columnsXL="2"
デフォルトで上記が設定されているようだ
条件がある為横着をすることは出来ないようだ
条件を満たす値であればある程度は省略できそうだ

あと、どうもサイズが700px以下の画面サイズになると強制的にカラム数が「１」と設定されるようだ

## 最後に
SAPUI5のDemo Kitは英語ばかりで翻訳するとその解釈が合っているのか
間違っているのかよくわからない
なので今回の記事のように簡単なものかもしれないが今後纏めていければと思います
初投稿なので指摘が怖い
AppExchangeを開くことができない


回避策 

現時点では回避策はありません。代わりに、ケースをログに記録し、次の詳細を提供してください。 
-エラーを受け取ったページの完全なURL。 
-エラーのスクリーンショット。-ログイン試行に使用したユーザー名。 
--Trailblazer.meアカウントに関連付けられているメールアドレス。
--Trailblazer.meプロファイルのURLまたはID番号。プロファイルURLを見つける方法は次のとおりです：https ：//help.salesforce.com/articleView？id = sf.tbid_profile_urls.htm 

[Can’t Log In to AppExchange](https://trailblazer.salesforce.com/issues_view?id=a1p4V000001ZrtDQAS&title=can-t-log-in-to-appexchange)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/389726ab-40e1-0778-a738-539dd2e4e8d0.png)


[Install Salesforce Adoption Dashboards in your Trailhead Playground](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HDV27SAH)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/728e8e8e-abab-a457-38dd-dcbde95ad346.png)


[Can't install the app in Install AppExchange packages](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HDRmBSAX)


# パッケージもエラー？ 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ad6fc1bb-af02-497a-5af8-8ff83541a7c6.png)


[I cant install packages or open my previous playgrounds. Any suggestions?](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HkhpoSAB)

# 認識できない？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/78c81650-7eb1-85c5-2db1-a4e3a79de4ff.png)

[新しい遊び場とそれに関連するユーザー名のパスワードをリセット...](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HDb04)
Service Cloud Agent Productivity >Use All the Service Console Productivity Tools Together


[Trailhead関係　個別の課題別 に戻る](https://qiita.com/Keiji_otsubo/items/56eb7a90bb72138ece1f)

# here was an unexpected error in your org which is preventing this assessment check from completing: System.NullPointerException: Attempt to de-reference a null object

何で正解を得たら質問ごと消すんだろう。自分勝手な人が多い。

[Service Cloud Agent Productivity Use All the Service Console Productivity Tools Together](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000Em6QDSAZ)

+ [Service Cloud Agent Productivity Use All the Service Console Productivity Tools Together](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000HDdAjSAL)

:::note
I had the same issue.  It was resolved by deleting email from case 1002, which had a null message.  (I had only updated the subject, not the body.)  Next, I updated the macro to include simple HTML in the body and repeated the task of sending the email using the macro.  Upon checking, the challenge was complete.
:::

+ [マクロが使えないらしい](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000OrJwE)

The Macro instration can't be used in this view. Update the Macro

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d71ad859-badf-0c0e-8438-b8eeefea31a9.png)
[Flutter] window_sizeを使えるようにしよう



### 注意点
・`ref`については、最新を入れたほうがいいらしいです。何を入れたらいいんだ！？と思った方もこれをみたら大丈夫！！
この値はハッシュ値を入れるっぽいです。


写真を参考に最新を入れてもらえると！

![スクリーンショット 2022-05-30 7.16.25（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/196808a6-7903-1601-713b-cf48bfa86e5c.png)




```pubspec.yaml

dependencies:
  flutter:
    sdk: flutter

  window_size:
    git:
      url: git://github.com/google/flutter-desktop-embedding
      path: plugins/window_size
      ref: a738913c8ce2c9f47515382d40827e794a334274

```

これで、`Pub get`しても、以下のエラーが出てうまく行きません。


```terminal
Running "flutter pub get" in gro_flutter...                     
Git error. Command: `git clone --mirror git://github.com/google/flutter-desktop-embedding.git C:\Users\Woton\AppData\Local\Pub\Cache\git\cache\flutter-desktop-embedding-87b62662532896a522efe2d4fc10c086d1a2768b`
stdout: 
stderr: Cloning into bare repository 'C:\Users\Woton\AppData\Local\Pub\Cache\git\cache\flutter-desktop-embedding-87b62662532896a522efe2d4fc10c086d1a2768b'...
fatal: remote error: 
  The unauthenticated git protocol on port 9418 is no longer supported.
Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information.
exit code: 128
pub get failed (server unavailable) -- attempting retry 1 in 1 second...
```


検索してもなかなか出なかったので時間がかかりました。とてもシンプルな解決策を見つけたので共有します。



# 解決策

以下のコマンドを打つとできました。

```

git config --global url."https://".insteadOf git://

```





# 参考文献

https://github.com/flutter/flutter/issues/100363　


https://github.com/google/flutter-desktop-embedding/commit/a738913c8ce2c9f47515382d40827e794a334274
Nautobotのデバイスとケーブル接続

# はじめに
NautobotというイケてるSoT(Source of Truth)ツールを使ってみたいものの、各コア機能の中身がわからないので、調べてみようと思いました。
今回は「デバイスタイプ」について進めていきます。

# TL;DL
- デバイスコンポーネントテンプレートについてはよくわからなかった

# [デバイスタイプ](https://nautobot.readthedocs.io/en/stable/core-functionality/device-types/#device-types)

## デバイスタイプ
- ハードウェアのメーカーとモデルを表す
    - デバイスの物理属性(ラックの高さと深さ)
    - 個々のコンポーネント(コンソール、電源、ネットワークインターフェースなど)
- デバイスタイプは「クラス」で、「インスタンス」化したものがデバイス
    - デバイス作成時に自動的にデバイスタイプのコンポーネントが継承される
    - ただし、デバイス作成後にデバイスタイプの属性を変更しても、デバイスには適用されない


## メーカー
- デバイスの「メーカー」を表す
    - 例：Cisco、Dell
- 各デバイスタイプはメーカーに割り当てく必要がある
- 一意の名前が必要

# [デバイスコンポーネントテンプレート](https://nautobot.readthedocs.io/en/stable/core-functionality/device-types/#device-component-templates)
で
- 各デバイスタイプには、デバイス内の物理コンポーネントを定義可能なテンプレートが割り当てられている
    - コンソールポート
    - コンソールサーバのポート
    - 電源ポート
    - 電源コンセント
    - ネットワークインターフェース
    - 前面・背面ポート
    - デバイスベイ
- 新規デバイス作成⇒デバイスタイプに割り当てられた各テンプレートを読み込み⇒コンポーネント自動作成
初めてのケーブルマネジメント

# はじめに
皆さんは、自分のデスク周りの配線、きれいにされていますか？
私は生来めんどくさがり屋なので、やりたい放題の配線状態になっていました。
しかし、ケーブルマネジメントという言葉に出会って、以前よりデスク周りを格段にきれいにすることができたので、自分へのメモもかねてここに残します。

# ケーブルマネジメントとは？
日本語訳すると「配線管理」となりますが、配線を整理・適切に管理することによって、
予期せぬ作業の発生による時間浪費を防いだり、作業の効率化を図ることを指します。
また、配線をきちんと管理することにより火災などの原因とならないようにします。

# 実際にどうやって整理したか
整理方法について、意識したこと・実際に使用したアイテムに分けて記載します。

## とにかくシンプルに
整理・管理を容易にする手法として「対象の頭数を減らす」のはシンプルかつ効果的です。
なので、なるべく兼用できるケーブルは兼用し、数を減らしたり長さを短くまとめたりすることに注力しました。

## 使用したアイテムたち

### ケーブルタイ
100円ショップで5本セットになっているものを使いました。
これで必要以上に長かったケーブルのダブつきをまとめて短くしました。

### HDMIアダプター
私が使用しているメインの端末はノートPCなのですが、それを有線HDMIケーブルでテレビに出力して半デスクトップとして使用していました。
しかし毎回ケーブルを抜き差ししたり、有線のため取り回しが面倒だったりと不満があったので、これを機会に無線に切り替えました。
Fire stickをお持ちの方はそれでも実現可能なようですが、私はこちらを使用しました。
個人的にHDMIの無線化が一番効果的＆気持ち的に楽になりました。

https://www.amazon.co.jp/gp/product/B01BG9NG5E/ref=ppx_yo_dt_b_asin_image_o02_s00?ie=UTF8&th=1

### DC電源をType Cに置き換える
数あるケーブルの中で一番かさばっていたのが、PCの電源でした。
大きさばかりはどうしようもなかったので、汎用性の高いType Cに変換することでかさばっていた電源を小さいものに置き換えることができました。

https://www.amazon.co.jp/dp/B0831GN1Z9?ref_=cm_sw_r_cp_ud_dp_D0EEMKFCAQGZT7KVM1CZ

# 参考文献

https://officehands.jp/blog/lancabling/

# おわりに
正直ここに書いていいものなのかと迷ったのですが、私自身Qiitaが一番記録に残しやすく、よく見るものなのでここに書きました。
エンジニアの皆様の中でも自分の作業環境がもじゃもじゃで困っている方の助けとなれば幸いです。
2022/5/30主にITとかセキュリティの記事

Emotetだけじゃない！いま、正しく知って備えるべきセキュリティ対策(6/2開催)
https://www.sbbit.jp/eventinfo/71026/

サイバー攻撃の対策共有(5/28)
https://www.yomiuri.co.jp/local/hyogo/news/20220527-OYTNT50249/

病院に相次ぐサイバー攻撃　遅れる医療の防衛、日経調査
大規模3病院に侵入　3分の2でパスワード漏れも(5/28)
https://www.nikkei.com/article/DGXZQOUC07A910X00C22A4000000/

米、ロシア銀行などに制裁 北朝鮮ミサイル発射めぐり(5/28)
https://www.afpbb.com/articles/-/3407126?act=all

次のiPadOS 16、ウィンドウの大きさが変更可能に？ 新たな手がかりが見つかる【Gadget Gate】(5/27)
https://www.phileweb.com/sp/news/mobile_pc/202205/27/2897.html

日本初、BSVブロックチェーン協会、暗号資産交換所フォビジャパンによるBSV取り扱い開始を発表(5/27)
http://mjp.acrofan.com/article_sub3.php?number=98829&lang=

OCS、顧客情報4846件流出か　追加調査で発覚　オートローン申し込み(5/28)
https://ryukyushimpo.jp/news/entry-1524542.html

「ついうっかり」が情報漏洩につながることもある
ペンテスターの情報収集法から見た、コミットとアカウント使用の注意点(5/28)
https://logmi.jp/tech/articles/326638

17病院に身代金ウイルス　22年被害6件、過去最悪(5/28)
https://nordot.app/903252860543664128?c=39546741839462401

信販会社「ＯＣＳ」４８００人の個人情報が流出したおそれ(5/27)
https://www3.nhk.or.jp/lnews/okinawa/20220527/5090018436.html

Spring Securityに認証回避の脆弱性、アップデートを(5/27)
https://gunosy.com/articles/aBVXJ

先端技術流出防止、ネットワーク設立　県警が産官学連携で　／鹿児島(5/28)
https://mainichi.jp/articles/20220528/ddl/k46/010/311000c

テストコード導入奮闘記～私はこうやってプロジェクトにテストコードを導入しました～(5/27)
https://qiita.com/papi_tokei/items/5960a4e031229fe44eb1

ITエンジニアとはどんな職種？仕事内容や必要スキルを詳しく解説！(5/28)
https://and-engineer.com/articles/YnklgRAAACMAsIUT

個人向けGoogleアカウントでの基本認証は5月30日にサポート終了
メールソフトのGmailで、ユーザー名とパスワードだけのログイン（基本認証）がブロックされるようになる。(5/27)
https://www.itmedia.co.jp/pcuser/spv/2205/27/news160.html

人民元をアプリで使うと中国政府からスパイされる？謎法案が米国で提出される(5/28)
https://iphone-mania.jp/news-458200/

【オンライン開催】
文書電子化と押印変革
～DX推進による電子化の検討と法令対応～(6/24開催)
https://events.nikkei.co.jp/48275/

「2000個問題どころか2万個問題だ」、岡村弁護士が直近1年のネット関連法を総括(5/30)
https://xtech.nikkei.com/atcl/nxt/column/18/02083/052700001/
「コンサル一年目が学ぶこと」を読んだ。開発の自分はありがたい立場だなと感じた。

[新人さんにすすめる有益な技術書達 2022春 - Qiita](https://qiita.com/e99h2121/items/1b243efb1499527f0701) に記載しておきつつ自分はしっかり読めていなかったので読んだ本。開発者にも有益な「コンサル一年目が学ぶこと」について理解した点のまとめと、開発者として「コンサル」な人とお仕事をする上でどういうマインドを持ちたいかのメモです。


[図解　コンサル一年目が学ぶこと | 大石哲之 | ビジネス・経済 | Kindleストア | Amazon](https://www.amazon.co.jp/dp/B097MP9X3G/)
https://d21.co.jp/book/detail/978-4-7993-1532-3

![](https://m.media-amazon.com/images/I/51X1wC-+efS.jpg)

## 感想

- ストイックだなあ... 言っていることはわかる。でもストイックだなあ... という感想である。
- 何故これらが大事なのか、のテクニカルな側面はもっと他の本で深掘りするのが良いのかもしれない。例えば会議の議事進行などは [「世界で一番やさしい会議の教科書」を読んだので、その要点 - Qiita](https://qiita.com/e99h2121/items/4eba8cfadf91f96f923d) がおすすめであるし、文書作法なども色々記事はある。
- 読んでよかった点もある。 [「コンサル一年目が学ぶこと」を読んで、コンサル会社の「容赦ない」カルチャーについて思い出した。 | Books&Apps](https://blog.tinect.jp/?p=65811) ... この記事の「容赦ない」という表現に共感する。コンサル界隈の各位、大変だな... 
- 数字を大事にするマインドには同意である。彼らをリスペクトしながらお仕事せねばと感じた。

## 要点

- 「15年後にも役立つ普遍的なスキルを基礎的レベルから理解できる本」。

### 第1章　コンサル流話す技術
- 結論から話す
    - 短い時間で物事がシンプルに明確にできる
    - PREP法
        - Point
        - Reason
        - Example
        - Point (繰り返し)
- Talk Straight 端的に話す
    - 質問にまず答える
    - 率直に物を言い、駆け引きをしない
- 数字というファクトで語る
    - 意見は封殺されることがあるが、事実は封殺しようがない
    - 経験のない者の武器は数字
    - 論理と数字は共通語
- 感情より論理
- 相手のフォーマットに合わせる
    - 相手の期待値を把握する
 

### 第2章　コンサル流思考術
- 「考え方を考える」という考え方
    - 全体から細部へ
- ロジックツリーを使いこなす
- 雲雨傘　提案の基本　etc
    - 事実: 雲が出ている
    - 解釈: 雨が降りそうだ
    - アクション: 傘を持っていこう
    - 雲・雨・傘 はセット。フィードバックを受けて改善する
- 自分の考えを持つ

### 第3章　コンサル流デスクワーク術
- 文書作成の基本、議事録書きをマスターする
- 最強パワポ資料作成術
    - ワンスライド、ワンメッセージ
- エクセル、パワーポイントは、作成スピードが勝負
- シンプルな課題管理表を

### 第4章　コンサル流ビジネスマインド
- ヴァリューを出す
- 喋らないなら会議に出るな
    - 「発言しない人の価値はゼロ」
- 「時間はお金」と認識する


## まとめ

- 「意見は封殺されることがあるが、事実は封殺しようがない」。わかるけど、そのとおりだけど、封殺って言いまわしはコワイな。「コンサル」もそりゃ大変だよな... コンサルの世界の共通言語というのもいろいろ興味深い
- 会議で「発言しない人の価値はゼロ」といった辺りでお腹いっぱい大満足感をもって読了 :pray: ごちそうさまでした
- 敢えて批判的に読もうとは思わないが、「コンサル」大変だよな... と改めて認識できた本である。言っていることはどれもこれも「正論」であるので、社会人とは、体力だな、と認識しながら、時折たのしい事も考えながら彼らと接していきたい。

おつかれさまでした。以上です～
STM32G031のボリュームの入力でサーボ出力


x 確認済み2022/5/30 6:58

目的
サーボのテスト


![o_con505.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/c12afd64-5fc6-74f8-7e6b-063d98ced845.jpeg)


![o_con506.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/7fde6dbc-29e8-0928-0fa7-f6dace237734.jpeg)


親切な人がNRSTにつてい書いてある


https://blog.mmaakkyyii.com/posts/post21/


名前は、まだない


```c++



//ADC_PWM_031_1


#include <Arduino.h>

#define DD PA11    // potentiometer connected to analog pin x


//初期化
void setup()
{

  pinMode(DD, OUTPUT);   // sets the LED pin as output
  analogWriteFrequency(50);
  analogWriteResolution(16);

} //setup


//メインループ
void loop()
{

  int sensorValue;
  int x;

  //analogReadResolution(12); //adc 12bit mode
  //sensorValue = analogRead(A3); // PA11 PIN5 031
  sensorValue = analogRead(A9); // PB7  PIN1 031
  //sensorValue = 2024;//debug
  //sensorValue = analogRead(A0); //UNO

  x = sensorValue >> 2;

  analogWrite(DD, 1310 + (26 * x) );  // analogRead values go from 0
                                      // to 4095, pwmWrite values
                                      // from 0 to 65535, so scale roughly
                                      
}//loop



```
長い横髪対応のLongHairSupporter

# What'S LongHairSupporter?

LongHairSupporterとは[こちら](https://sites.google.com/view/longhairsup)で配布してくださっている、髪の毛に簡単にboneが仕込める無料神アセットの一つです。

https://sites.google.com/view/longhairsup

##### 改造したLongHairSupporter

https://github.com/blackpopo/QiitaLaboratory/releases/tag/LongHairSupporterCustomized

## どこを改良したの？

LongHairSupporterは神アセットなのですが、3点ほど手のかゆいところに届かず改造させていただきました。

1. 間違ってDynamicBoneを設定してしまうと修正が大変
1. 長い横髪だと、めり込んでしまう
1. Bang, Side, Back, Othersをまとめてセットしたい

## どう改良したの？

1. LongHairSupporterで設定したDynamicBoneを一括で消去するスクリプトを追加した
2. UpperChestを設定して、それに横の髪がめり込まないようにした。
2. HairsGroupのところでまとめて設定できるようにした。

## どう使うの？

1.まず、通常のLongHairSupporterと同じようにLongHairSupporterPrefabを導入します

![longhair.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/4e1e9482-17a0-7891-9b8a-b91d5a0dead7.jpeg)

2.髪の毛をBangs,　Side, Others, Backにまとめます。(全部がそろってなくても大丈夫です。)

![hair.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/9af3050c-6cde-a190-a4f8-4f23b4448c4b.jpeg)

3.Longhair Suporter の AvatarAnimatorにモデルをセットします。
 ![major.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/f78bdb7e-a696-8c95-b0af-24b29b23f751.jpeg)

4.次にAvatarHairObjectsをセットします。

##### 注意

1. HairsGroupを4に設定する
1. Parent Hair Typeをすべて選ぶ
1. Hairs Parentを選ぶ

必ず、この順番で髪の毛を設定してください。

 ![hair_set.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/b0678d6d-d150-e9b6-8907-02cd29f82f33.jpeg)

5. effect をセッティングします

 ![effect.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/2f0e11c8-2982-2336-62e9-8ec40aaa5a03.jpeg)

* Chestは後の髪の毛が前に行かないためのCollider
* Headは前髪などが頭にめり込まないためのコライダー
* Upper Chestは横髪などが胸にめり込まないためのコライダー

これらについて、気を付けて設定してください。

5.DynamicBone生成

![スクリーンショット 2022-05-30 044053.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/1a818724-fe30-1b0a-aa70-d76d922707c8.jpeg)

6.ボーンを全部消したくなったら

![スクリーンショット 2022-05-30 044054.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353403/e89aeeaf-3ebc-4638-0482-98aa020575b5.jpeg)


##### 最後に

HairHungについてですが、Oculus上で実行するとスーパーサイヤ人化するので、スクリプトの中でコメントアウトしています。

それよりも、本当に素晴らしいアセットを作ってくださり、ありがとうございます！
郵便番号から該当地域・最寄駅を返すLINE BOTを作成してみた。

# 郵便番号も忘れるが、住所も忘れてしまう・・・

取引先への送付物がある場合に郵便番号なんだっけ？といったことがよくある。ただ、探す手順がクセづいていることもあり意外とスムーズに調べているようにおもう。（面倒くさいが。）
逆に住所が出てこないときがあり、取引先担当者の方のメールを探し、署名に記載されている住所を確認したり、取引先の会社サイトで確認したりと手間がかかっていた。

# そんなとき簡単に調べられる方法は？

* 「郵便番号から住所が調べられるようにしよう！」
* 「普段よく使うLINEで調べらるようにしよう！」

ということで **LINE BOT** を使った「住所検索ツール」を作成してみた。

# 使用ツール
* [Line Developer](https://developers.line.biz/ja/)
  LINE APIの仕様や、開発手順を解説したドキュメントを開発者向けに提供
* [Make](https://eu1.make.com/)
  異なるツール同士を連携できるノーコードツール
* [HeartRails Geo API](http://geoapi.heartrails.com/api.html#postal)
  HeartRails Geo API は、郵便番号／住所／緯度経度データ等の地理情報を、XML、JSON(P) 形式の API により無料でご提供させていただくサービス


# 完成品

![宿題1-1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697311/b329a28f-2370-0ab3-b83b-3abd70fbe729.gif)


# 作成

1. API選定
・「HeartRails Geo API」サイトより利用するAPIURL入手
![宿題1-1_API_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697311/bf5eee9d-4b56-4041-a73a-710e3debe430.jpeg)

1. Line Developer
・チャネルを新規に作成
![宿題1-1_Line Developers_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697311/24730047-fa05-56ea-9f95-312510c4942a.jpeg)

1. Make
・Line ⇔ API 連携
![宿題1-1_Make_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697311/8e5bff8c-ff8a-84c5-c1c5-090658f3e1a1.jpeg)

**完成！！**

# 作成してみての感想
今まで使ったことのないツールだったので、それなりに時間がかかりました。。
ただ、基本的なことは作成手順は理解できた？ので、次回作成時は別ツールの連携を含めた実装もしてみたいと感じた。

# memo
・オープンソースの組み合わせで実装可能
・APIのレスポンスデータをパラメータとして別APIの連携可能
・条件分岐可能（Make Routerモジュール）
・Makeの動作が不安定な時がある。（再設定したら動作する など）

ぜひチャレンジしてみてください！
【Kotlin】Exposedでテスト実行時に毎回テーブルの中身をTruncateする方法

おはようこんにちはこんばんは。

Exposedを使った開発をしていてデータベーステストを実行したいときに、テスト関数を実行するごとにテーブルの中身を綺麗さっぱり消したいことがあります。

Laravelのようなフレームワークには `RefreshDatabase` や `DatabaseTransactions` のようなテスト実行時に入れたものをテストが終わったときに消してくれる仕組みがありますが、Exposedにはそのようなものは用意されてないので何らかの方法で消すしかありません。

毎回使ったテーブルの中身を消しに行くのはなかなか億劫なので、ベースになる抽象クラスを作っておいてそれを継承して使う形にして何もしなくても勝手に毎回中身が空になるテストを書いてみたので、そのメモです。

## テストクラスのベースとなる抽象クラスでそれを実装してみる
今回はマイグレーションにflywayを使っているので、それのテーブルを除いて全てのテーブルを取得して中身を消すというものを書いてみました。

また、今回は `kotlin.test` を使っている前提で書いているので通常のJUnitなどを使っている場合は適宜読み替えて書き変えてください。

https://kotlinlang.org/api/latest/kotlin.test/

```kotlin
abstract class BaseTest {
  private fun setupApplication() {
    // DBへの接続のセットアップなどの必要な初期化処理を行う
  }

  @BeforeTest
  fun beforeBaseTest() {
    setupApplication()
    truncateDatabase()
  }

  private fun truncateDatabase() {
    transaction {
      // 外部キー制約があるテーブルをTRUNCATEするために一時的に制約を取る
      TransactionManager.current().exec("SET FOREIGN_KEY_CHECKS = 0")
      // flywayのテーブルを除いて全てのテーブルをTRUNCATEする
      db.dialect.allTablesNames().filterNot { it.contains("flyway_schema_history") }.forEach {
        TransactionManager.current().exec("TRUNCATE TABLE $it")
      }
      // 一時的に外していた制約を戻す
      TransactionManager.current().exec("SET FOREIGN_KEY_CHECKS = 1")
    }
  }
}
```

思ったより簡単ですね！

また、`TRUNCATE`時には外部キー制約周りの罠に引っかかることもあるので、(中身全部消しちゃうし良いでしょうということで) 一旦外部キー制約のチェックを強制的に外して`TRUNCATE TABLE`を実行してます。

## テストを実行してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41743/788bd952-d427-4933-7e2b-ded31b1bde48.png)

テストケースごとにしっかりテーブルの中身がTRUNCATEされてますね！

## さいごに
普段業務や趣味でLaravelやRailsを触っていると、あれ？これも無いのぉ！？とびっくりすることもありますが、案外頑張れば意外と簡単に実装出来るのでExposedとKtorを使った開発もアリだなあと思いました。
【Dokcer】全ファイルをボリュームで管理する【Remote-Containers】

## 全ファイルをボリュームで管理する
### Docker
```Dockerfile:/Dockerfile
FROM node:16.15.0

ENV TZ=Asia/Tokyo
ARG USERNAME=node

RUN corepack enable npm
USER ${USERNAME}
WORKDIR /myapp-frontend

EXPOSE 3000

```

```/docker-compose.yml
version: '3.9'
services:
  frontend:
    build: .
    volumes:
      - .:/myapp-frontend
    environment:
      NODE_ENV: development
    ports:
      - 3000:3000
      - 9229:9229
    volumes:
      - sources:/myapp-frontend
    command: /bin/sh -c "while sleep 1000; do :; done"
volumes:
  sources:
```

### Remote-Containers

```.devcontainer/devcontainer.json
{
  "name": "myapp-frontend",
  "dockerComposeFile": ["../docker-compose.yml"],
  "service": "frontend",
  "workspaceFolder": "/myapp-frontend",
  "customizations": {
    "vscode": {
      "extensions": [
        "EditorConfig.EditorConfig",
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode",
        "VisualStudioExptTeam.vscodeintellicode",
        "arcanis.vscode-zipfs",
        "bradlc.vscode-tailwindcss"
      ]
    }
  }
}
```
EclipseでtWAS 9.0開発環境の構築 

# 目的

EclipseでtWAS 9.0用のアプリケーションをテストするときには、古い(Java8で動作する)Eclipseが必要でした。その方法を記載します。


# IBM Installation Manager
IBM Installation Manager を導入します。（IBM id が必要です）

[Installation Manager and Packaging Utility download documents](https://www.ibm.com/support/pages/installation-manager-and-packaging-utility-download-documents)

導入手順や画像はここでは省略します。IBM id さえあればダウンロードできて導入できました。最新にしておきましょう。

# tWAS 9.0

IBM Installation Manager に ILANのレポジトリを追加して導入します。
ファイル > 設定 > リポジトリの追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/d9ec3ac1-1203-df6d-92ba-7bc826199bbd.png)

で

http://www.ibm.com/software/repositorymanager/com.ibm.websphere.ILAN.v90

を入力して OK して追加します。IBM idのパスワードやマスターパスワードを入力して登録完了です。
インストールを押すと ILAN のレポジトリをもとに導入できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/ed48c65f-4976-d978-2164-0c172a5c6ada.png)

2022/05/30 現在では ILANでは 9.0.5.6 の導入になってました。導入手順は省略します。プロファイルの作成などが必要になります。


# Eclipse 2020-06

Semeru Runtime Java8(LTS) の JDK をダウンロードします。

https://developer.ibm.com/languages/java/semeru-runtimes/downloads/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/026978fa-3650-66f5-9e91-2f5f097ba741.png)

インストールは unzip するだけですが、
```
C:\Program Files\IBM\Semeru Runtimes\jdk8u332-b09
```
にしておきました。

Eclipse 2020-06 の　Eclipse IDE for Enterprise Java Developers をダウンロードします。

https://www.eclipse.org/downloads/packages/release/2020-06/r

インストールは zipを unzip するだけでした。すでに最新のEclipseが導入されているようならそれと区別できるように入れておくとよいです。展開後、eclipse.ini にjavaw.exe のパスを以下のように追加します。-vmargs 前の行に追加しておくと良いです。
```
-vm
C:\Program Files\IBM\Semeru Runtimes\jdk8u332-b09\bin\javaw.exe
```

この編集後 eclipse.exe を起動します。


# WAS V9.x Developer Tools

IBM WebSphere Application Server V9.x Developer Tools を Marketplace から導入します。
Eclipseのメニューで HELP > Eclipse Marketplace... を選択して websphere を検索します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/3d64ccdd-2316-526d-bdf0-9c6e1672ac04.png)


# サーバー追加

Serverビューで tWAS 9.0 を作成します。Profileの作成がまだな場合はしておきます。一般ユーザーの場合はプロファイルは自分が書き込み権限のあるディレクトリに作成してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/5b3868dc-e7a9-a95e-45f6-739135143ec3.png)

IBM > WebSphere Application Server traditional V9.0 を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/d2e01e30-4b3b-f9f0-cd71-5c0e1a13379f.png)

tWASv9.0のインストールディレクトリ
プロファイルディレクトリ
管理ユーザーとパスワード

の設定をしたら作成が完了します。サーバーを選択して右クリックからサーバーの起動ができたら問題ありません。
モーターの可動確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697457/d3529fed-186b-d4be-ef34-ab8317a0f29b.png)

組み立てができましたので、モーターを通電して動作確認したいと思います。
いきなりプロペラをつけるのも危険なので、まず、プロペラはつけないでテストしましょう。
## モーターの入力信号
モーターを駆動するため、フライトコントローラーとモーターの間にESCというドライバが必要です。このESCにPWM信号を与えることによって，モーターの回転速度を制御することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697457/c858fda1-8dfe-126c-09b8-53b5f6f86ee0.png)
## モーターの可動確認の電路図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697457/7a715c7a-5f60-9d1a-36d0-36580ff2ac3d.png)
>[HowToMechatronics](https://howtomechatronics.com/tutorials/arduino/arduino-brushless-motor-control-tutorial-esc-bldc/)の電路図
## ソースコード
```c:test_motor.ino
/*
        Arduino Brushless Motor Control
     by Dejan, https://howtomechatronics.com
*/
#include <Servo.h>
Servo ESC;     // create servo object to control the ESC
int potValue;  // value from the analog pin
void setup() {
  // Attach the ESC on pin 9
  ESC.attach(9,1000,2000); // (pin, min pulse width, max pulse width in microseconds) 
}
void loop() {
  potValue = analogRead(A0);   // reads the value of the potentiometer (value between 0 and 1023)
  potValue = map(potValue, 0, 1023, 0, 180);   // scale it to use it with the servo library (value between 0 and 180)
  ESC.write(potValue);    // Send the signal to the ESC
}
```
## ESCキャリブレーション
ESCには高点と低点があります。ESCが正しく動作のため、フライトコントローラーの最大（小）打角をESCに伝える必要があります。

ESC をキャリブレーションするの手順は下記に示す：
1. ESCを通電する前に、まずフライトコントローラーの出力を最大値に設定します。
2. 次に、ESCの電源を入れると、モーターからビープ音が数回鳴り、新しい最高点を設定したことを確認します。
3. そして、フライトコントローラーの出力を最小値に設定します。
4. 確認のビープ音が再び鳴り、ESCキャリブレーションが完了します。

---

テストするときには，いつもショートに注意して，電源をすぐ切れるように注意しましょう
ドローンの構想，部品選定、組み立て

## 部品準備
色んな情報を収集しましたので、部品を集めしながら製作を開始したいと思います。なるべく費用を抑えるため、部品は基本的にaliexpressやamazonで購入しました。
```:部品リスト
・フレーム　
　　450クラスのフレーム
・フライトコントローラー
　　Arduino UNO
・受信機器
　　WIFI無線(esp32-cam)
・送信機器
　　IPHONE アプリ
・プロペラ
　　10x4.5 プロペラ
・モーター
　　2212 920kvブラシレスモーター
・ECS
　　ReadyToSky 40A ESC 2-4S 5V/3A Brushless ESC　
・バッテリー＆充電器
　　11.1V 60C 5200mAh リポバッテリー
　　ISDT Q6 NANO 充電器
・センサ
　　6軸センサー（MPU6050）
　　気圧センサー（BME280）
・その他：
　　工具類
　　電線
```
---------------------------------------
## 組み立て
RailsAPI+Reactでnpmの階層を間違えて沼った話

# ブラウザのコンソールに以下のエラーが出た
```
Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.
```

1と2には該当していなかったので、3に当たりをつけて``npm ls``や``npm ls react``などをしてみる。
``npm ls react``ではエラーが発生しているが解決方法がわからず、とりあえず
「node_modulesを削除」→「再度npm install」をしてみるも解決せず。。

ただ、あることに気づきます。

# node_modulesが二つあるぞ。。？

私はRailsAPI+Reactでアプリを作っていたので、
ルートディレクトリは基本Rails関連で埋め尽くされていて、frontend/のみにreact関連のディレクトリやファイル(node_modulesやpackage.jsonなど)が存在する想定だった。

期待していたディレクトリ構成↓
```
$ ls
Gemfile       README.md     app/          config/       db/           lib/          public/       test/         vendor/
Gemfile.lock  Rakefile      bin/          config.ru     frontend/     log/          storage/      tmp/
```
しかし、実際にlsしてみると上記+で``node_modules/,package-lock.json,package.json``が存在していた！！

どうやら``npm install 〇〇``をfrontend/に入って実行しなければいけないのに、その一個上のルートディレクトリで行っていたことが原因のようだった。

# 解決方法
ルートディレクトリの``node_modules/,package-lock.json,package.json``を全て削除し（node_modulesだけで良いかもしれない）、再度npm startしたらエラーが治った！！
```
$ rm -rf node_modules
$ rm package-lock.json
$ rm package.json
$ npm startとしていたタブでControll+Cしていったん終了
$ npm start
```

ただ、機能自体は問題なくなったのだが、``npm ls react``したらまだエラーが出るのが気がかり。。
どなたかご存知の方、教えてください〜
オペアンプ実験につかう±15V電源を作った

**はじめに**
オペアンプ実験に使う±15V電源を作成した。
そこでの苦労した点や備忘録を書く。

注文は基板製造メーカーのJLCPCBで作成した

JLCPCBは初めて発注する日本在住の人に３４＄のクーポンを配っていて本当にお得なので是非使ってみてほしい
以下がリンク
https://jlcpcb.com/JPV

**概要**
今回はコンセントからトランスを介して直接±15Vを作成する。
コンセント → 100V to 18Vのトランス → ±15V基板(今回作成)
こんな感じの構成で作った。

回路はトランジスタ技術(2019年6月)の回路から引用。

引用する際に回路を書き間違えたり、フットプリントの不備があったりしたので基板を改造して完成させた

回路図と完成品はこちら
![スクリーンショット 2022-05-30 001839.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867623/9d9f8ba1-7ef4-1a05-2336-52b0f09974f0.png)
![IMG_9283.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867623/1c628345-fbc4-facc-8309-7e626a9a7373.jpeg)


**間違え部分**
①U1オペアンプが電源に繋がっていない
オペアンプをパスコンだけに繋いで満足していた。
電源無しで動くわけが無いので基板上ジャンパーでオペアンプ電源を電源ラインに接続させた
![IMG_9281.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867623/303431e8-db7b-d2fa-c726-ddee7213e875.jpeg)



②D1,D2ダイオードのカソードマークを逆にしていた
こういった極性のあるものはちゃんと図面提出前に確認しよう
下の画像がフットプリントだが、回路図を見ると2pinをカソードにしている
これのせい(？)でオペアンプが壊れていた事に気が付かなくてデバックがすごく沼った

![キャプチャaaa.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867623/16bdd319-cb08-7f1b-6693-6b812175c370.png)

③R6の抵抗値の違い
これは半田付けしている時点で気が付いた。
ここの乗数が違うと負電源側だけ過電流シャットダウンがかかる値が違くなってしまう。

④回路の接続してはいけない部分に接続していた。
シンプルに回路を間違えていたのでカッターナイフでパターンをカットした。(回路図修正済み)
ヘタなのでちょっと汚い
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867623/3dc2b598-d317-c893-03ff-f650b146091e.png)




**完成**
改造して完成した基板はこちら。
トランスで入力電圧を変える(発熱注意)、または部品の乗数を変更すれば任意の値の正負電圧が作れて非常に便利に使えそう。
毎回改造するのも面倒なので、どっかのタイミングで修正部分を盛り込んで再度基板から作り直したい。
ちなみに基板は４層で作った。JLCPCBでの注文は２層と４層の価格の差が６００円しかないので２層で引くのが面倒なら４層にしておくと楽。

**JLCPCBの注文方法**
ガーバーデータの出し方は以下の記事を参照
[JLCPCBで基板を作ろう[KiCad6編]](https://qiita.com/Konbanwa11/items/4e1d14b7cdc2282063fb)

記事に従い、ガーバーデータをzipで出したら、JLCPCBサイトの"Order now"タブからzipファイルをアップロードする。
zipファイルはドラック＆ドロップでアップロード出来るので非常に簡単。
層数や、基板サイズなどはガーバーデータをアップロードした時点で自動的に入力してくれる。
注文ページには色々と細かく指定できる欄があるが(例：ページ上部のBase Materialなど)"Layer Stackup"以外は初期設定でも問題はない。
"Layer Stackup"も基板の層数が4層以上の場合のみ指定する必要がある。
Layer Stackupは各層の名称なので、設計データを見て適切な層を指定してあげよう。
![キャfsdfsdfプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/867623/66cfe6b7-c94c-629c-a15c-7ae352ac390a.png)
【Angularアプリケーション開発 #3】新規コンポーネントを作成しよう

今回は新規コンポーネントを作成し、AppComponentに組み込んでみましょう。
フッターコンポーネントを作成してみます。
- FooterComponentを作成します。
ターミナルで`ng g component footer` と入力して実行します。
すると↓エクスプローラーにfooterのディレクトリ（中身はcss、html、tsファイル等）が作成されているでしょう。
![スクリーンショット 2022-05-30 0.05.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/c949fca8-0632-12c6-8e14-44d8b41db5b3.png)
- こちらをAppComponentに組み込みます。
app.component.htmlに```<app-footer></app-footer>```のタグを書きます。
![スクリーンショット 2022-05-30 0.09.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/29c43e32-0024-9ca3-e63e-b3fbf70a8665.png)
- footer.component.htmlにはわかりやすいように```<p>フッター</p>```とでも書いておきましょう。
![スクリーンショット 2022-05-30 0.13.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/39b4468e-1b73-bb9a-730a-f77baced5b83.png)
- ターミナルに`ng serve`を打ち込んで実行！
- [http://localhost:4200/](http://localhost:4200/)を開く。
`フッター`の文字列を表示するだけですが、コンポーネントが組み込まれたことがわかります。
![スクリーンショット 2022-05-30 0.15.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/51816244-7518-442e-4f67-7c3c1b4ba397.png)
CodePenで簡単にバッティングスコア管理アプリを作成⚾

## バッティングスコアをかっちょよく記録する
毎週草野球にいそしんでいる私だが、バッティングスコアとかをさくっと管理してみたかったりする。
まぁそういうアプリは当然あるわけで、その辺のアプリでもいいし、正直エクセルでも事は済むのだが、”オリジナル”のかっこいい感じのアプリとかにそそられることはないだろうか。
実は、CodePenなるものでさくっと1人でアプリが作れるらしい。
ちょうどアプリを作るタイミングが草野球をした日だったので、今日の打撃成績管理出来るといいんじゃないか？ということで、やってみることにした。
（その日は4打数2安打1盗塁。気分ウキウキで帰ってきた。）

## CodePenが便利だという前置き
CodePenはこちら。

https://codepen.io/

そして、ものの数時間で出来たプロフィールページ。おしゃれ。
サンプルとなるものがあれば、そこから派生して作れる。

https://eclectic-medovik-72ae3b.netlify.app/


## 仮完成作品
作ってみたのはこんな感じ。
もっとおしゃれにしたいし、項目も充実させたい。

https://batting-statistic-e9f4c9.netlify.app/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/3ed0bea3-045d-1689-8d67-8e4b5cf93d1a.png)

## ソースコード

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="oNEEEZB" data-user="long66tail" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/long66tail/pen/oNEEEZB">
  打撃成績表</a> by long66tail (<a href="https://codepen.io/long66tail">@long66tail</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>


## 作り方の過程と解説
### ベースとなるCodePenを探す
CodePenは、参考となるサンプルやベースを見つけるのが一番手っ取り早いと思う。
スコアの管理ということで、データを積み上げたり足したりして管理出来るものがよいと考えた。
そこで、以下の家計簿アプリを利用させてもらった。

https://codepen.io/yuta-yoshinaga/pen/VwpMmqm

各種の項目や合計値の計算式を修正することで、打数や安打の合計値を算出することが出来る。

### iTypedでタイプライタ風おしゃれ演出
簡単にタイピングアニメーションを実装することができるJSライブラリ『iType.js』を使用した。
これでサイトの上部に野球選手の名言を表して、ちょっと雰囲気を出してみた。
自分自身を鼓舞させる意味もこもっている。
（ちなみにイチローが好きで、小学生の時の夏休みの自由研究をイチローの活躍した記事だけの新聞スクラップにしたことがある。とても関係ない。）

中身としては、まずHTMLにidで設定しておく。
~~~HTML
<head>
  <span id="ityped"></span>
</head>
~~~
Javascriptで、タイプライタ風に打ち込みたい文字を書き出すだけで出来上がり。非常に簡単で使いやすい。
~~~javascript
ityped.init(document.querySelector("#ityped"), {
    strings: ['小さいことを積み重ねるのが、とんでもないところへ行くただひとつの道だと思っています。byイチロー', '他人は失ったものに目を向けますが、僕は得たものに目を向けます。by桑田真澄','努力は人が見てないところでするものだ。努力を積み重ねると人に見えるほどの結果が出る。by長嶋茂雄','敵と戦う時間は短い。自分との戦いこそが明暗を分ける。by王貞治'],
})
~~~

### unsplashでおしゃれ画像の挿入
unsplashという、おしゃれ画像を提供してくれるAPIがある。
参考サイトは多数見つかるが、サイズ調整も載せてくれている以下サイトが参考になった。

https://co.bsnws.net/article/207

これでHTML部で縦横比を自身で調整して定義すれば良い。
~~~HTML
<head>
  <div class="unsplash">
    <img id="unsplash" src="https://unsplash.it/1000/200/?random" alt="me">
  </div>
</head>
~~~
CSSでは位置調整を行っている。
~~~CSS
.unsplash {
  width: 100%;
  height: flex;
  display: flex;
  justify-content: center;
  align-items: center;
}
~~~

## 感想
WEBアプリを作るというハードルはすごく高いものだと思っていて、特訓というか、真剣に学ばなければ作れないものだと思っていた。
そういった意味では、思いのほか簡単に作ることが出来たなと思った。
が、やっぱり作り込んでいこうと思えば思うほど難しくて、理解度が足りていないことも同時に痛感した。
vue.jsの理解が追い付いていないというところと、他のJSライブラリでanime.jsが面白そうなんだが組み込む力が足りなかった。
環境変数とは何か？

## 自分なりの結論
- OSがしてる型宣言で宣言された変数のこと

## 結論への経緯
- LinuxやOSの勉強をしていると環境変数という用語が出てくる。
- 色々な説明があったが、自分としてどうもしっくりこなかった。
- 自分なりに「あっなるほど。」と思えた捉え方が、「OSがしてる型宣言で宣言された変数のこと」という理解だった。
- 自分としてよくわからないポイントとして、「なぜ環境変数なる概念があるのか？？？」となっていた。
- あっているかはわからないが、自分の理解としてOSもプログラムの集合体である以上、型宣言があると捉えてみた。
- 型宣言では、「変数名＝代入する値」で変数名を代入した値として使用するので、その理解で見ると、「なるほど、OSもプログラムの集合体なんだし、型宣言をしてても不思議じゃないな、それをOSでは環境変数って呼ぶのか。」となって自分的に腑に落ちた。

自分の見え方に関するナレッジでした。

## 個人ブログ

https://takuma-tech.com/2022/09/27/224/
【ニッチすぎる】とある自動車学校の時間割から学科を連続して受けられる日程を出力するアプリ



# はじめに

自動車の教習所では技能（実際の運転）と学科（座学）を勉強する必要があります．技能は担当教官と日程を調整して進めていくことが多いですが，学科は決められた時間割から都合の良い時間の講義を取っていくことが多いかなと思います．以下が私が通っている千歳自動車学校の学科時間割の一部です．第一段階の学科は黒文字で，第二段階の学科は赤文字で表記されています．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542476/d9324719-3024-69fb-c070-a3ba59abbb71.png" alt="時間割の例" title="時間割の例" class="img" width=500px/>

第一段階の学科を連続して受けられる箇所を赤丸で囲いました．どうせ教習所に足を運ぶなら，こういう連続して受けられる日程を狙って行きたいですよね？別に目視で確認すればすむことではあるのですが，私が通っている教習所の時間割が2行で一つの時間帯を表していて若干見づらいのと，個人的に色弱気味で赤と黒の判別が大変です．そこで ****千歳自動車学校の学科を連続して受けられる日程を出力するCLIスクリプト**** を書きました．ニッチ過ぎるアプリですが [GitHub Gist で公開](https://gist.github.com/Hirata-Kodai/69d8124e6748e65ee70e33d88f583f32)しているので，ライブラリをインストールすれば誰でも使えます．千歳自動車学校に通われている方はご活用ください（いるのか？）．


# 最終的な出力

```
$ python find_continue_blacks.py
20（金） 16:00~17:00 5 10
21（土） 11:00~12:00 1 2
29（日） 11:00~12:00 1 5
31（火） 12:00~13:00 1 9
```
20日辺りがねらい目ですね。

# 用いたライブラリ

-   bs4
-   click
-   requests-html


# 工夫した点

-   表を List of List の行列形式にパース
    -   必要なのは表の情報だけなので，行列形式で格納し直します．後々 for 文とかを回しやすくするためです．
    
    ```python
    def get_time_table_matrix():
    	html = scrape_latest_timetable()  # requests_html.HTML
    	mat = []
    	soup = BeautifulSoup(html.html, 'html.parser')
    	# tableの取得
    	table = soup.find('table')
    	# tbodyの解析
    	tbody = table.find('tbody')
    	trs = tbody.find_all("tr")
    	for tr in trs:
    		r = []  # 各行を保存
    		th_tds = tr.find_all(["th", "td"])
    		for th_td in th_tds:
    			r.append(th_td)
    		mat.append(r)  # 行をテーブルに保存
    	return mat
    ```
-   列単位で処理するためにリストを転置
    -   連続して受けられる時間を見るためにはテーブルを上から下に走査する必要があります．組み込みリストを転置するのが若干複雑です．
    
    ```python
    mat_T = list(map(list, zip(*mat)))
    ```


# 感想

今回みたいなノリで個人的な課題に対して，さくっとプログラムを書けると楽しいですよね．色弱の人を支援するアプリとか作れないかな&#x2026;
🔰【初学者用】本当に初歩の初歩の初歩的なマークダウン記法まとめてみた。

# はじめに
毎日Qiita投稿3日目です。
今回は初学者が最低限覚えておくべき、本当に初歩の初歩の初歩的なマークダウン記法まとめていきます。

# マークダウン記法とは？
マークダウン記法とはHTMLの主な装飾を、タグをタイプすることなく記号を入力するだけで表現できる記法。
ドキュメントを書くことが多いITエンジニアにとっては特に便利な面が多いツールです！
このQiitaの記事もマークダウン記法で書かれていますし（このような感じ↓）、GitHubなどでも使用します！
[![Image from Gyazo](https://i.gyazo.com/7274d51b37e04cffe647cf51abe78aec.png)](https://gyazo.com/7274d51b37e04cffe647cf51abe78aec)
つまり開発において**最低限の知識は必要**なわけです。

# 最低限覚えておくべきマークダウン記法
Lets'go!
## 見出し
`#`を先頭に記述することで「見出し」にすることができます。
Markdown記法ではh1～h6まで記載可能です。
```HTML:記述
# 見出し１
## 見出し２
### 見出し３
#### 見出し４
##### 見出し５
###### 見出し６
```
結果
# 見出し１
## 見出し２
### 見出し３
#### 見出し４
##### 見出し５
###### 見出し６

## 箇条書き
文頭に` - `をつけることで箇条書きができます
```HTML:記述
- 箇条書き
- 箇条書き２
- 箇条書き３
```
結果
- 箇条書き
- 箇条書き２
- 箇条書き３

# テーブル作成
`3x3`などと入力するとテーブルを自動入力できます！便利！

:::note alert
xはエックスです。
:::

[![Image from Gyazo](https://i.gyazo.com/d0428e57321ea333a294459867a55497.gif)](https://gyazo.com/d0428e57321ea333a294459867a55497)

**便利！**

### 手動入力の場合
```HTML:記述
|カラム1|カラム2|カラム3|
|:----|:----:|----:|
|おはよう|こんにちは|おやすみ|
|あか|あお|きいろ|
|いくらでも|ついか|かのう|
```
2行目の`:`の位置によって左・右・中央の好きな列に整列します。（↓下記表示ではカラム1が左、カラム2は中央・カラム3は右に整列しています。）

結果
|カラム1|カラム2|カラム3|
|:----|:----:|----:|
|おはよう|こんにちは|おやすみ|
|あか|あお|きいろ|
|いくらでも|ついか|かのう|

# リンク
`[リンク名](URL)`でリンクが表記されます。
```HTML:記述
[Google](https://www.google.com)
```
結果
[Google](https://www.google.com)

# 引用
`>`を先頭に記述することで引用表記ができます。
```HTML:記述
> テキスト１
>> テキスト２
```
結果
> テキスト１
>> テキスト２

# コード
[```]を上下段に記述することでコード表記になります。
```HTML:記述
このように表記します。
```

# コードスパン
`(バッククォート)をで囲むことでコードスパンができます。
```HTML:記述
`puts 'Qiita'` と書くことでインライン表示することも可能です
```

結果
`puts 'Qiita'` と書くことでインライン表示することも可能です

# 強調
**で囲むことで引用表記ができます。
```HTML:記述
** puts 'Qiita' ** と書くことで強調できます
```

結果
**puts Qiita** と書くことで強調できます

# 終わりに
以上が最低限、覚えておくべきマークダウン記法でした！最後まで見てくださった皆様におすすめしたい記事を１つ紹介！

# 参考Qiita
https://qiita.com/Qiita/items/c686397e4a0f4f11683d

こういうのを神記事っていうんですよね〜。すばらしい！僕はLGTMに加えて、ブックマークにも保存してちゃってます笑
皆様も是非！

### ※補足
投稿欄やコメント欄の右上にある?マークでこのチートシートを確認できるみたいです！
コメントにて教えていただきました！


※プログラミングを始めてまだ月日も浅い初学者が投稿しています。誤字脱字等ありましたら申し訳ないです。何か間違いがあればご指摘いただけると助かります。
アレどこ店だっけ？をLINE BotとMAKEを使って解消してみた。

![7B394159-78FF-4556-BA23-3E5E0F81DA64.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668122/380dd585-cfb9-6605-e449-05c84e509c10.jpeg)

こんにちは商業ディベロッパーの法務部に勤めています。
現在の業務は、主に商業施設に出店するテナント管理をしています。

紙の契約書に埋もれ、紙の請求書に埋もれ、エクセルでポチポチと
管理業務をする日々に、昭和かよ！もうわけワカメ！！となったので、
無謀にもデジタルテクノロジーの世界に飛び込んでみました。


なんだかよくわからないけど、ノーコードって便利そう！
LINE Botが作れるっぽい！
これぞ令和じゃん！ということで今回は『ショッピングセンター名を入れるとスーパー名を返してくれるbot』にチャレンジしました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668122/5ecfa9e5-19d1-6a99-8350-c35029b93495.png)


１今回の使用ツール
■Line Deveropers 
■Make
■Googleスプレッドシート

２結論
何とか動きました。
![trim_A108ED4C-D190-4B51-A053-148CD6CCBCE7_MOV_AdobeCreativeCloudExpress (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668122/1806e618-24da-823d-77ff-6ba12ffa7710.gif)

文字情報でショッピングセンター名を入れると、
そのショッピングセンターに入っているスーパー名をちゃんと返してくれます。


３良い点
今回はシンプルにスーパーの名前のみでしたが、業務の中でコード番号、住所とか電話番号をすぐ知りたい！という時がよくあるので、
色々応用が出来そうです。


４悪い点
GoogleスプレッドシートのデータをSSSAPIでAPI化していますが、
無料だと50行までなのでしか対応していないという点。
150以上のショッピングセンターがあるので50行じゃ足りないので、
何かしら工夫が必要です。


５おまけ
![trim_27434522-3B75-411A-9AE7-39F0E4FA77FA_MOV_AdobeCreativeCloudExpress 3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668122/ab97cd67-2f3b-23e0-cdd1-33a592bd41e9.gif)
今回データがとり切れなかったSCを入れるとランダムで猫ちゃんが表示されるようにしました。
とにかく画像をランダムで出力したいという思いが形になっています。

APIは下記からお借りしています。
https://thecatapi.com/

６反省
アイディア出しの時点では夢はでっかくでしたが、
現実は甘くありませんでした。
https://twitter.com/am003004/status/1529801596598894593?s=20&t=mrIO2sRZi6B8D_tGP_scVw!
![スクリーンショット 2022-05-29 234234.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668122/428a2f92-ddac-e361-cd8d-49b6d3e0b4b6.png)

コードも言語もわからない初心者にはだいぶ厳しいチャレンジでしたが、
とにかく動かせたので満足です。

今回作成したものから、より実用に向けて発展させていきたいです。
【Java初心者】改良版・Commons emailで日本語添付ファイルの文字化け解消

# 改良版を作ったわけ

以前の記事[【Java初心者】Commons emailで日本語添付ファイルの文字化け解消](https://qiita.com/sev01/items/6c8ea0c1a82324341fdd)では、添付ファイルの文字化けが発生しないことを確認していたのですが、差出人やタイトルの文字化けが発生することがありました。

環境変数に頼っていたことが原因かもしれないと思いまして、JavaMailやCommons emailに備わっていたメソッドを利用する方法を試したところ、目的を達成することができました。

```java
package mailsendtest;

import java.io.UnsupportedEncodingException;
import javax.mail.internet.MimeUtility;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;

public class MailSendTest1 {

    public static void main(String[] args) throws EmailException, UnsupportedEncodingException {

        // 添付1
        EmailAttachment attach1 = new EmailAttachment();
        String name = "/home/XXXXXX/日本語のファイル名.pdf";
        attach1.setPath(name);
        attach1.setDisposition(EmailAttachment.ATTACHMENT);
        // 以下の1行は、添付ファイル名から変更してもいい。拡張子はあったほうが無難
        attach1.setDescription("日本語の添付ファイル.pdf");
        // attach1.setName(((new File(name)).getName())); // これでもOK
        
        MultiPartEmail email = new MultiPartEmail();
        email.setHostName("<SMTPサーバー>");
        email.setSmtpPort(<SMTPサーバーのポート>);
        String from = "XXX@XXXXX.jp"; // 差出人のメールアドレス
        email.setFrom(from, "日本語の名前");
        String subject = "タイトル";
        subject = MimeUtility.encodeText(subject.strip(), "iso-2022-jp", "B");
        email.setSubject(MimeUtility.unfold(subject));

        String msgText = "メールの本文";
        email.setMsg(msgText);
        String to = "XXXXXXXXX@XXXX.or.jp,AAAAA@AAAAA.jp"; // 宛先
        String[] listTOs = to.split(",");
        for (String listTO : listTOs) {
            email.addTo(MimeUtility.encodeText(listTO.strip(), "iso-2022-jp", "B"));
        }
        // SMTPがTLSの場合
        email.setStartTLSEnabled(true);
        String id = "<SMTP認証のID>";
        String pwd = "<SMTP認証のパスワード>";
        email.setAuthentication(id, pwd);
        email.attach(attach1);
        email.send();
    }
}

```
C&Cサーバ とは

## 勉強前イメージ

サーバがあるのね？

## 調査

### C&Cサーバ とは

Command and Control server の略で、C2サーバとも呼ばれます。
サイバー攻撃などで外部からの攻撃で攻撃者に操作されるようになったコンピュータに対して
ネットを通じて指示を出したりするサーバになります。

利用者に気づかれないように外部から操作されるようになったコンピュータを `ゾンビコンピュータ` と言われます。
また、ゾンビコンピュータをまとめてボットネットと呼ばれるネットワークに組織化して一斉に指示を出したりします。

C&Cサーバからゾンビコンピュータへ指示を送る際は80番ポートが使用されることが多く
他の通信に紛れて検出は難しい場合があります。
また、C&CサーバのIPアドレスを頻繁に変更するのでIP指定の対策も難しくなっています。

## 勉強後イメージ

要するに指示を出すサーバってことか。
確かに元のサーバは必要よね。
80番ポート使われてるんだ・・・・IP頻繁に変えるとかできるのね？

## 参考

- [マルウェア感染したPCからの攻撃の自動遮断による対策方法](https://www.ntt.com/bizon/sec/cybersec04.html)
- [C&Cサーバ 【Command and Control server】 C2サーバ](https://e-words.jp/w/C-C%E3%82%B5%E3%83%BC%E3%83%90.html)
Google Chromeを使って自炊

# Chromeで自炊

Google Chromeを使ってwebページのPDF化を行います。

## 自炊とは

一般的に自炊とは、物理的な書籍を電子書籍化する際ことを指します。
この場では、WebページをPDF化することを自炊と呼んでいます。

## Chromeの起動オプション

Google Chromeはコマンドラインから起動することができます。
こちらの記事で以前紹介しました。

https://qiita.com/shuyaeer/items/dd73f02275e4aa038f30

macOS
```bash
$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
```
linux

```bash
$ google-chrome
```

## --print-to-pdfオプション
`--print-to-pdf`オプションと対象のURLを先程のChrome起動コマンドの引数に指定することで、URLのWebページがPDFとして保存されます。
以下実行例。出力PDF名を`sample.pdf`としています。URLは機能私が投稿した[記事](https://qiita.com/shuyaeer/items/ae0fbb75a77b46a6c071)にしました。

```bash
$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
  --headless --disable-gpu --print-to-pdf=sample.pdf 'https://qiita.com/shuyaeer/items/ae0fbb75a77b46a6c071'
```
出力されたPDFを確認してみます。

![出力PDF.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/473706/f02ad0c6-91b4-440f-201c-2a360a43dfc1.png)

いい感じです。

## スクリプト化

シェルスクリプトと同じ改装にurls.txtを作成し、PDF化したいURLの一覧を作成しておけば、下記のスクリプトで一括でPDF化ができます。

```bash
#!/bin/bash
set -eu
i=1
while read line
do
    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
        --headless --disable-gpu --print-to-pdf="sample_${i}.pdf" $line
    let ++i
done < urls.txt
```

### 余談
#### 余談1
普段私はMacをしており

```bash
$ alias google-chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
```
このようなエイリアスを貼ることで、linuxと同じ用に`google-chrome`コマンドを使用していますが
シェルスクリプト内でエイリアスを参照することはできないので、注意が必要です。

#### 余談2
`google-chrome`をターミナルから実行する場合、既存のchromeのプロセスは停止している必要があります。
毎度Chromeを終了するのは面倒なので、代わりに`chromium`を使用することを勧めます。

```bash
$ chromium --headless --disable-gpu \
   --print-to-pdf=sample.pdf 'https://qiita.com/shuyaeer/items/ae0fbb75a77b46a6c071'
```
chromeと同じように使うことができます。

## 応用
Qiitaのストックした記事一覧をPDF化しようと思います。
今すぐ別タブで<https://qiita.com/stock>にアクセスし、デベロッパーツールを開きます。
そして、`console`に下記javascriptをコピペ->実行。

```javascript
let articles = document.querySelectorAll("article > a");
for (let i=0;i<articles.length;i=i+1){
    var ele = articles[i].href
    console.log(ele)
}
```
出力を先程の`urls.txt`にペースト後、スクリプトを実行します。
ストックした記事PDFがそれぞれ生成されたでしょうか？
タブレットとかで閲覧したら素敵なドキュメントになる気がします。

今回は簡易的な実装のため、ページの遷移は行っていません。
ページをまたいでURLを収集した場合は以前紹介したpychromeを使うのが良いでしょう。

https://qiita.com/shuyaeer/items/dd73f02275e4aa038f30
fastlaneで `sh("flutter build ipa ...")` やったときにぶち当たった error: exportArchive: The data couldn’t be read because it isn’t in the correct format のエラーを直せたやり方

## 事象

fastlaneでFlutterのビルドをするときに以下のようなコマンドを実行した

```ruby:Fastfile
sh("flutter build ipa --release --flavor #{flavor} --dart-define=FLAVOR=#{flavor} --export-method #{method}")
```
※変数部分の内容は割愛

すると、

```bash
2019-07-10 10:53:31.367 xcodebuild[71361:4395732] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/rc/_dsryxmx5tz2l7h9rc9xqqc80000gn/T/Fastlane - Dev_2019-07-10_10-53-31.367.xcdistributionlogs'.
error: exportArchive: The data couldn’t be read because it isn’t in the correct forma
```

でipaファイルを作成できなかった。


## 環境

```bash
$ flutter --version
Flutter 3.0.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision ee4e09cce0 (3 weeks ago) • 2022-05-09 16:45:18 -0700
Engine • revision d1b9a6938a
Tools • Dart 2.17.0 • DevTools 2.12.2

$ bundle --version
Bundler version 2.3.14

$ bundle exec fastlane -v
fastlane installation at path:
path/to/project/vendor/bundle/ruby/3.0.0/gems/fastlane-2.206.2/bin/fastlane
-----------------------------
[✔] 🚀
fastlane 2.206.2
```

## 調べたこと

https://github.com/fastlane/fastlane/issues/15008

同じ事象があった。

内心助かったー、と思ったら


https://github.com/fastlane/fastlane/issues/15008#issuecomment-514288917
```
Well, after all the struggles we had, I ended up formatting, and this fixed my problem, I don't know what environment bug I had, but this worked...
Thanks.
```

```:ざっくり訳

「Macをフォーマット(初期化)したら治った！！！」
```

なん...だと...

さすがにこれだけのために初期化は辛いので、色々調査

## 気づいたこと

「...あれ、ExportOptions.plistが生成されていないな」

通常 `flutter build ipa` でipa作成時、ipa出力するディレクトリに `ExportOptions.plist` が生成される(xcodeが作成したものを複製している)

だが、生成されていない


## やったこと

なんとなく権限周りなのかなーと思い、以下のコマンドに変更

```ruby:Fastfile
sh("sudo -u `whoami` flutter build ipa --release --flavor #{flavor} --dart-define=FLAVOR=#{flavor} --export-method #{method}")
```

動いた！！！

## 原因

わからない。だれか教えて下さい！！
Python の数値を日本の命数法(万億兆)の文字列に変換するパッケージ cnum

# はじめに
株式市場の分析に Python を活用しているのですが、大きな数字をあつかう際に、「万、億、兆」といった、命数法を使いたくなりました。Apple社の昨年度の株式時価総額は307兆9029億200万円と示す方が、307902902000000円よりも日本人にはわかりやすいです。このような命数法は日本、中国、韓国でも利用されています。cnum は数値データから各国の命数法に合わせた文字列を生成するためのパッケージです。

# インストール方法
以下のコマンドでインストールをします。
```
pip install cnum
```

以下のようにパッケージのメソッドに、数値データを引数として渡して呼び出すことで、各国の命数法の文字列を取得できます。（韓国の小数点以下の命数法がわからなかったので、日本の命数法を使用しています。もしわかる方がいらっしゃいましたら、コメントをお願いいたします。）
```python
import cnum

# 日本の命数法で文字列を返す。
cnum.jp(123456789.12)
'1億2345万6789 1分2厘'

# 中国（簡体字）の命数法で文字列を返す。 
cnum.scn(123456789.12)
'1亿2345万6789 1分2厘'

# 中国（繁体字）の命数法で文字列を返す。 
cnum.tcn(123456789.12)
'1億2345萬6789 1分2厘'

# 韓国の命数法で文字列を返す。 
cnum.kr(123456789.12)
'1억2345만6789 1分2厘'
```

各メソッドに指定する数値データは、int型、float型、str型 を受け付けています。
int型、float型には表現できる数値に制限があるため、str型を使用することが好ましいです。
```python
import cnum

# 引数にfloat型を指定
cnum.jp(123456789123456789.12345) 
'1 2分3厘4毛5糸6忽' <--- 不正

# 引数にstr型を指定
cnum.jp('123456789123456789.12345') 
'12京3456兆7891億2345万6789 1分2厘3毛4糸5忽'
```

命数法のルールを変更した場合は num2cnumメソッドを呼び出してください。各国のメソッドと同様に、第一引数では変換対象の数値データを指定しますが、第二引数には整数のルールを記したリストを、第三引数には小数のルールを記したリストを指定します。下記の例は、jpメソッドとほぼ同様の整数ルールを記したリストを指定していますが、3番目の要素に '千' を指定したため、'1億2345万6千789'と出力されました。このように、ユーザがリストを変更することで、任意の命数法を実装できます。
```python
cnum.num2cnum(
    123456789,
    [
        None, None, '千', '万',
        None, None, None, '億',
        None, None, None, '兆',
        None, None, None, '京',
        None, None, None, '垓',
        None, None, None, '𥝱',
        None, None, None, '穣',
        None, None, None, '溝',
        None, None, None, '澗',
        None, None, None, '正',
        None, None, None, '載',
        None, None, None, '極',
        None, None, None, '恒河沙',
        None, None, None, '阿僧祇',
        None, None, None, '那由他',
        None, None, None, '不可思議',
        None, None, None, '無量大数'
    ],
    [
        '分', '厘', '毛', '糸', '忽'
    ]
)
'1億2345万6千789'
```

# 関連リンク
GitHub: https://github.com/town-paddy/cnum
PyPI: https://pypi.org/project/cnum/