OmniAICreator/Qiita-1.07M huggingface dataset:
【AWS】アカウント作成方法（スクショ画像あり）

# はじめに
今回はAWSのアカウント作成方法についてまとめさせていただきます。
そもそもAWSとは何か？とクリアになっていない方は、
先日まとめさせていただいたこちらの記事をぜひご覧いただければと思います。

https://qiita.com/kenta-nishimoto-1111/items/86ba0156c71b91dbc999

# アカウント作成前に準備するもの
①メールアドレス
メールアドレスはrootアカウントのログイン時に使用したり、請求情報の確認やメールなどが来ます。

②クレジットカード情報
支払い方法は、基本的にクレジットカード決済を使用します。
私はデビットカードでも行けましたが、三井住友などのデビットは使用不可でした。
理由としてはアカウント登録時に「そのカードが本当に使えるのか？」を確認するために1円ほど引き落とされるようですが、
三井住友は最低引き落とし金額？が決まっており1円を引き落とすことができないみたいです。
ネット銀行のデビットでいけました！
（結構前のお話なので、今は三井住友も問題がない可能性はあります！）

③電話番号
電話番号は本人確認時にSMSまたは、自動音声電話がくるときに使用します


# アカウント作成手順
※以下のリンクからアカウント作成が可能です
https://portal.aws.amazon.com/billing/signup#/start


①メールアドレス、パスワード、アカウント名を設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/8f15b815-8d06-a387-0dfc-cad427099dd6.png)


②連絡先情報を入力
個人で使用する場合はアカウント種類はパーソナルで選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/f2ab0d9a-8d08-1f4f-8be5-075704002b1a.png)


③クレジットカード情報の入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/889a5849-bf75-2566-ef2e-c877cf5d3426.png)


④本人確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/dcbeff72-285a-f27e-1ef2-7c730243afbb.png)

SMSで送られてきた認証コードを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/69d6f0bf-2ba2-b754-5e35-90e929f79837.png)


⑤サポートプランの選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/251578a3-9393-6031-e58f-3d433d68c031.png)


以下のように表示されていれば成功です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/2e6e456c-bf1e-d28f-9c0c-672d044a6eb2.png)


# アカウントにサインインする方法
AWSのコンソール画面からサインインが可能です。
こちらはルートユーザーでサインインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/8a3b9089-de2f-d142-ea8f-e75e9bc9c450.png)

無事にサインインができた場合はこのようなコンソール画面に遷移されます！
これと同じ画面であればOKです！
![スクリーンショット 2021-09-01 10.19.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/0f9c2106-1b20-a30f-15f0-536f73f8871f.png)

# 終わりに
これでアカウントの作成はOKです！
そこまで難しい工程はないかと思うので、ぜひこちらを見ながら作成していってください！
FahCore_a8 の対処

Macが突然重くなった。
調べるとウイルス感染してることが判明。

CPUのユーティリティプログラムで FahCore_a8 というのがあるらしいがそれと同名のウイルス（トロイの木馬）もあるらしい。自分で入れた覚えも無いし挙動が明らかに不審なので、ウイルス感染したとみて間違いなさそう。

![](https://i.imgur.com/DbLGhzK.png)

> CPUの占有率が800%超えとだいぶやばいことになっている。

## 対処

アクティビティモニタでプロセスを強制終了してもすぐに復活してくるから元を断たないとダメそう。

とりあえずプロセス名でgrepしてみる。

```bash
% ps aux | grep fah
nobody            2135 864.6  0.4  4621760  61748   ??  RN    9:39AM  79:13.23 /Library/Application Support/FAHClient/cores/cores.foldingathome.org/osx/64bit-avx2-256/a8-0.0.12/Core_a8.fah/FahCore_a8 -dir 00 -suffix 01 -version 706 -lifeline 2134 -checkpoint 15 -np 11
kuwana            4081   0.0  0.0  4268340    560 s000  R+    9:47AM   0:00.00 grep fah
nobody            2134   0.0  0.0  4301928   1560   ??  SN    9:39AM   0:00.17 /usr/local/bin/FAHCoreWrapper /Library/Application Support/FAHClient/cores/cores.foldingathome.org/osx/64bit-avx2-256/a8-0.0.12/Core_a8.fah/FahCore_a8 -dir 00 -suffix 01 -version 706 -lifeline 2133 -checkpoint 15 -np 11
```

**いるわ。**


## 殺る

まずは大元を断つ。

```bash
sudo rm -rf "/Library/Application Support/FAHClient"
sudo rm -rf "/usr/local/bin/FAHCoreWrapper"
```

次に現在生きてるプロセスをkillする。

```bash
sudo kill 2135
```

しばらく経っても `FahCore_a8` が復活しないことを確認。

めでたしめでたし。

## ウイルススキャンする

こういうたぐいのプログラムは派生ウィルスを残すこともあるそうなので念の為ウイルス対策のフルスキャンをかける。

対策ソフトは「Avira Free Security」という無料のもの。

![](https://i.imgur.com/TzMnLa3.png)


---

対策としてこれでいいのかは不明。
今のところ問題は出てないから多分大丈夫。
**実行する際は自己責任で。**
Asia Tech Startup Day 開催！

##クラウドで夢を叶えましょう！

![スクリーンショット 2021-08-31 17.59.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/087da1bb-3f1b-d6b4-f10a-bdebcc896241.png)



この度、Alibaba Cloudは9月9日にて、アジアのスタートアップ企業を繋ぐ「Asia Tech Startup Day」を開催いたします。

------

**日時：2021/9/9 10:00~15:00(日本時間)**
**オンラインカンファレンス**

------
 

アジアを代表するクラウドサービスプロバイダーとして、AlibabaCloudは
多くのスタートアップ企業にご利用頂いております。本イベントでは、Alibaba Cloudが提供するスタートアップ企業向けのサービスのご紹介やユーザーの成功事例、パートナー企業との協同サポートプログラム、日本と韓国のユーザーコミュニティのご紹介などコンテンツ満載でお届けいたします。


また、「Asia Tech Startup Day」では、日本、韓国、中国とその他のアジア諸国のスタートアップ企業を繋げることができ、ビジネスコミュニケーションや投資活動などについても相談を受けられるため、ビジネスチャンスに繋げることができます。


アジアで活躍するスタートアップ企業に注目されている方、また、Alibaba Cloudのサービスやユーザー事例にご興味をお持ちの方、ぜひご参加をお待ちしております！


#####詳細は[こちら](https://asiatechstartup.live/?page_id=40&lang=ja)
classの配列を作る

# 標準の`init(repeating:count:)`

``` swift
Array(repeating: HogeClass(), count: 3)
```

これでできる配列の要素は全て同じ参照になります。

# `Array`の拡張

``` swift
extension Array {
    init(repeatingWith repeatedClosure: () -> Array.Element, count: Int) {
        self.init()
        for _ in 0 ..< count {
            self.append(repeatedClosure())
        }
    }
}

Array(repeatingWith: { HogeClass() }, count: 3)
```

こうすると配列の要素を全て別の参照にすることができます。
電話番号/カード番号の入力規制集【REGEX】


[Answersで回答する時に使う情報のまとめに戻る](https://qiita.com/Keiji_otsubo/items/9e6e0e946826133eddc7)



# オーストラリアかな？

```
AND( 
NOT(ISBLANK(MobilePhone)) ,
NOT(REGEX( MobilePhone ,"(^ [+] 614[0-9]{2}(| )[0-9]{3}(| )[0-9]{3}$)|(^04[0-9]{2}(| )[0-9]{3}(| )[0-9]{3}$)"))
) 
```

# オーストラリア形式を補完する数式

+ [If statement with multiple conditions for Mobile Phone Australia](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000EnEN0SAN)

```
IF(LEFT(Phone,4) = "+610","+61"&RIGHT(Phone,LEN(Phone)-4), 
IF(LEFT(Phone,3) = "610","+61"&RIGHT(Phone,LEN(Phone)-3), 
IF(LEFT(Phone,2) = "61","+61"&RIGHT(Phone,LEN(Phone)-2),  
Phone)))
```

# スイス

+ [ Swiss Phone Numbers](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000H1lZF)

```
AND(
NOT(ISBLANK(Phone)) ,
NOT(REGEX(Phone, "[+]{1}41[0-9]{9}"))
)
```

# RegEx for phone number format "+1 ##########"

What's the regular expression that validates the phone number format of '+1', followed by a space, followed by 10 consecutive digits?

+ [RegEx for phone number format "+1 ##########"](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgD69)

```
AND(
NOT(ISBLANK(Phone)) ,
NOT(REGEX(Phone, "[+]{1}1 [0-9]{10}"))
)
```


# 理解できない

+ [Salesforce が電話番号で自動的に入力する括弧とスペースが追加の数字としてカウントされるため、電話番号には 10 桁を入力する必要があるというエラーが表示されます](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007erW5V)

\d : 半角文字
\D : 半角文字以外

```
AND(
NOT(ISBLANK( Phone )),
NOT(REGEX( Phone , "\\D*?(\\d\\D*?){10}"))
) 
```

# その他

+ [Fix a phone number flow formula](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KhU6L)

Example Outputs:

+ Input: 0013059519322
  + Output: +13059519322
+ Input: +13059519322
  + Output: +13059519322
+ Input: (305) 951-9322
  + Output: +3059519322
+ Input: 305-951-9322
  + Output: +3059519322

```
IF(NOT(ISBLANK({!$Record.GC_Mobile__c})),
IF(BEGINS({!$Record.GC_Mobile__c}, "00"),
"+" & MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE({!$Record.GC_Mobile__c}, "-", ""), " ", ""), "(", ""), ")", ""),3,
LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE({!$Record.GC_Mobile__c}, "-", ""), " ", ""), "(", ""), ")","")) - 1),
IF(BEGINS({!$Record.GC_Mobile__c}, "0"),
"+" & MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE({!$Record.GC_Mobile__c}, "-", ""), " ", ""), "(", ""), ")", ""),2,
LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE({!$Record.GC_Mobile__c}, "-", ""), " ", ""), "(", ""), ")","")) - 1),
"+" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE({!$Record.GC_Mobile__c}, "-", ""), " ", ""), "(", ""), ")",""))),
"")
```
【.NET】labelコントロールのサイズを自由に変更する方法

.NetにてLabelコントロールはデフォルトではサイズを自由に変更できないようになっています。

変更するプロパティは「AutoSize」です。

「False」かた「Ture」に変更します。

するとドラッグ操作にて自由にサイズを変更できるようになります。
RGBの補色を返す関数を書いた

書き捨てのコードなので、適当に参考にしてください。
実装はTypeScriptですが、同じノリで他の言語もできると思ってます。


```
wikipedia
補色同士の色の組み合わせは、互いの色を引き立て合う相乗効果があり、これは「補色調和」といわれる。
しかし、純色など、明度が同じ補色同士を組合せた場合は、ハレーションを引き起こして、目がチカチカしてしまう
```

```javascript
// FFFFFF, 00FF1E などの文字列を受け取り、その補色を設定して返却する
getComplementaryColor(rgbStr: string): string {
    const R = rgbStr.substr(0, 2).toLowerCase()
    const G = rgbStr.substr(2, 2).toLowerCase()
    const B = rgbStr.substr(4, 2).toLowerCase()

    const r = ('00' + (255 - parseInt(R, 16)).toString(16)).slice(-2)
    const g = ('00' + (255 - parseInt(G, 16)).toString(16)).slice(-2)
    const b = ('00' + (255 - parseInt(B, 16)).toString(16)).slice(-2)

    return r + g + b
}
```
Blue Prism でファイルを「読み取り専用」にする

# はじめに

ファイルを読み取り専用に設定するための標準VBOは提供されていないようでしたので、作成してみました。

# コードステージで実装する

この辺りの記事を参照しました。

* [Microsoft Docs : FileInfo.IsReadOnly プロパティ (System.IO)](https://docs.microsoft.com/ja-jp/dotnet/api/system.io.fileinfo.isreadonly?view=net-5.0)

コードステージで発生した例外を、Blue Prism のオブジェクト側でどのようにハンドリングするのかは、 "Utility - FileManagement" を参考にしました。

## Object のコードオプションで、外部参照と名前空間インポートを設定する

![namespaces.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/91d67a8d-77e1-a0dd-0527-1c28d7c7a92b.jpeg)

「外部参照」には「System.IO.FileSystem.dll」を、「名前空間インポート」には「System.IO」を指定します。

## オブジェクトとアクションを作成する

完成図は以下のような感じです。

![setReadOnlyTrue.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/eff8ad6a-e296-f843-b630-c0fecbc53a6c.jpeg)

### 「読み取り専用にセット」というコードステージ
中身はこのような感じです。

![SetReadOnly.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/517ed4f9-81aa-0a55-eb1d-28444d296e01.jpeg)

```C#
try{
    // Create a new FileInfo object.
    FileInfo fInfo = new FileInfo(file_path_0);
    // Set the IsReadOnly property value True.
    fInfo.IsReadOnly = true;
	// Set Output Param.
	Success = true;
	Message = "";
}catch (Exception e){
	Success = false;
    Message = String.Format("exception occured. {0}", e.Message );
}
```


* Inputパラメーター : ファイルパス（file_path_0)
* Outputパラメーター : 成功フラグ（Success)とエラーメッセージ（Message）
![output.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/5f57d4bb-4b00-ff16-5e63-e0abbe3df8ba.jpeg)


Outputパラメーターは、 "Utility - FileManagement" 周りを参考にしています。

### 例外を投げるアクション

例外を投げるかどうかは、下図のような "Raise Exception If Appropriate " アクションに切り出してあります。（こちらも  "Utility - FileManagement" から引用してます）

![RaiseExceptionIfAppropriate.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/898f80b5-ff79-4db3-0d40-e8e6693856b4.jpeg)

この中の判断ステージは下記のようになっています。
![ShouldRaiseException.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/c63e68a5-0f36-b9c0-ac5d-b612c6bf480d.jpeg)
Docker サブスクリプションサービス契約のお知らせについて

Docker の利用規約が大幅に変更になったようなので、取り急ぎ届いたメールを翻訳してみました。

[Docker is Updating and Extending Our Product Subscriptions](https://www.docker.com/blog/updating-product-subscriptions/?utm_campaign=2021-08-31-business-tier-launch&utm_medium=email&utm_source=mailgun&utm_content=sj-blog)

要約すると、一定規模以上で商用利用する場合は、1ユーザあたり月額5ドルの利用料が発生するようになったよ、ということです（個人利用などはいままでどおり無料）

===

皆さま

あなたがこのメールを受け取ったのは、いまお使いの Docker の製品およびサービスに関する用語を、私たちが更新したからです。

あなたが知る必要のあること：

- すべての Docker の製品およびサービスは、いまから新しい用語集に置き換えられます - Docker サブスクリプションサービス契約です。
- Docker サブスクリプションには、４階層のサービスが含まれるようになりました。Personal、Pro、Team、そして Business（新しい階層のサービス）です。各階層は、Docker Desktop を含んでいます。
- 既存の Docker Free サブスクリプションは「Docker Personal」に名前を変えます。Docker Desktop は、個人利用、教育目的、非営利のオープソースプロジェクト、スモールビジネス（250人以下の従業者かつ年間売上が10M USD）において、これまでと同じように無料です。
- Docker Desktop の商用利用（250人以上の従業者または年間売上が10M USD）には、Docker Pro, Team または Business サブスクリプションが必要です。これらは、１ユーザあたり月額わずか５ドルです。
- Docker Business は新しい製品です。アプリケーション開発のために大規模に Docker を使用し、集中管理や安全なソフトウェア・サプライチェーン機能などの追加機能を必要とする組織向けです。

新しい規約は2021年8月31日に発効され、Docker Desktop を継続して使用するために有料サブスクリプションが必要となるものについては、2022年1月31日までの猶予期間が設けられています。Docker の使用を継続することで、新しい Docker サブスクリプションサービス契約に同意したことになります。

Docker サブスクリプションサービス契約書の更新内容を必ずご一読ください。これらの変更についての詳細は、FAQ をご覧になるか、今後予定されているウェビナーにご参加いただくか、最近のブログ記事をご一読ください。

===
【Ruby on Rails】exists?とpresent?って何が違うの？？？


#前置き

ランキング機能を実装中
![スクリーンショット 2021-09-01 8.49.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/c000da44-9497-dfef-690b-f13d203f9d49.png)

サーバー立ち上げたら下記の箇所で怒られた
![スクリーンショット 2021-09-01 8.50.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/2c939647-eb8a-8f06-efc3-26d5333414b0.png)

exists?じゃダメなの？？？？

適当に知っているメソッドを入れているとpresent?だと問題なく稼働した。理由がわからなかったので、２つのメソッドになんの違いがあるか調べてみた。

#目的

* ２つの違いをはっきりさせる


###1.結論

* **データベースからデータを取得する前か後かで違う**
* **データベースから取得した値が文字列か配列か又は存在するかで違う**

##### exists?
データベースからデータを取得する前に、データが存在しているかどうか

#####present?
データベースからデータを取得した後、条件に該当したデータの存在を調べるとき


###2. 原因

実際に初めに挙げた例では@today_ranksには配列でデータを渡していたので、present?で正常に稼働しました。

```ranks_controller.rb
  def rank
    @today_post_ranks_user = Article.group(:user_id).where(created_at: Time.current.all_day).order('count(user_id) desc').limit(10).pluck(:user_id) # 今日投稿した記事
    @today_ranks = []
    @today_post_ranks_user.each do |user_id|
      @today_ranks.push({
        "user" => User.find(user_id),
        "count" => Article.where(created_at: Time.current.all_day).where(user_id: user_id).count,
      })
    end
end
```

ちなみに!blank?も同じ意味になり、正常に動きました。



#参照

>[nil? empty? blank? present? exists? メソッドを状況に応じて使い分けよう[Rails]](https://qiita.com/takuyanin/items/aa8c1d82ab14f1827a6a)


####投稿者コメント
適当に書いてたらなんか動いた
じゃなくて、ここではこういう使い方があってこうだから動いたんだ！
とちゃんと理由がわかるように勉強していきます！


####My Profile
プログラミング学習歴３ヶ月目のアカウントです！
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。
goofysでは、EC2インスタンスメタデータ（IMDSv2）を参照できない件

# 起きたこと

Security Hubで指摘される、Instance Metadata Service Version 2 (IMDSv2) の改善要求
を対策したら、goofysでのS3マウントが失敗するようになった

goofysからS3の認証は、インスタンスプロファイルで行っていました

```/var/log/messages.
Aug 30 14:38:08 xxxxxxxxx /usr/local/bin/goofys[1784]: s3.ERROR code=NoCredentialProviders msg=no valid providers in chain. Deprecated.#012#011For verbose messaging see aws.Config.CredentialsChainVerboseErrors, err=<nil>
Aug 30 14:38:08 xxxxxxxxx /usr/local/bin/goofys[1784]: fuse.ERROR *fuseops.ReadDirOp error: NoCredentialProviders: no valid providers in chain. Deprecated.
Aug 30 14:38:08 xxxxxxxxx /usr/local/bin/goofys[1784]: fuse.ERROR #011For verbose messaging see aws.Config.CredentialsChainVerboseErrors
```

同じ様にS3マウントしている他のサーバでは起きないので、色々と違いを調べたところ
問題が発生するサーバの方だけ、Security Hub指摘に対応していた所が差異でした
Credentialsが通らなくなっているのでかなり怪しいと言うことで
IMDSv1を利用できるように戻したところ、問題なくCredentialsも通りマウントできるようになりました

どうやら、goofysがまだIMDSv2に対応していない様です


# EC2 インスタンスでは、Instance Metadata Service Version 2 (IMDSv2) を使用する必要があります


[EC2.8] This control checks whether your Amazon Elastic Compute Cloud (Amazon EC2) instance metadata version is configured with Instance Metadata Service Version 2 (IMDSv2). The control passes if HttpTokens is set to required for IMDSv2. The control fails if HttpTokens is set to optional. [修復手順](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#ec2-8-remediation) 

# IMDSv1のSSRF脆弱については、徳丸浩先生の記事が一番わかりやすかったので、ご紹介しておきます。

[SSRF対策としてAmazonから発表されたIMDSv2の効果と限界](https://blog.tokumaru.org/2019/12/defense-ssrf-amazon-ec2-imdsv2.html)

# IMDSv2の使用に移行する

[既存インスタンスのインスタンスメタデータオプションの変更](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/configuring-instance-metadata-service.html#configuring-IMDS-existing-instances)

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567898abcdef0 \
    --http-tokens required \
    --http-endpoint enabled
```

# IMDSv1を利用可能にする

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567898abcdef0 \
    --http-tokens optional \
    --http-endpoint enabled
```
Chromebook で blender

# Chromebook で blenderを動かしてみる
![Screenshot 2021-08-31 07.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/4addf053-03f2-5c90-1653-8fe1b8209f4e.png)
Chromebook で [Linux開発環境が使用できる](https://support.google.com/chromebook/answer/9145439?hl=ja)ようになりました
ということで、3Dモデリングなどで有名なblenderは動くのか？？？試してみました

### 1. Linux環境のインストール
設定からLinux開発環境をオンにするを実行
![Screenshot 2021-08-31 07.31.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/e9e38055-040f-ae9d-61e1-1f234ccab704.png)
セットアップ画面。ユーザ名（半角英数）などを入力して「インストール」をクリック
![Screenshot 2021-08-31 07.32.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/190fb70d-aec7-56ad-3140-7b8a3decb22b.png)
インストール中
![Screenshot 2021-08-31 07.32.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/8fc4c002-8ec0-216c-a113-c243e8483f87.png)
インストール完了 Linuxコマンドラインが表示される
![Screenshot 2021-08-31 07.33.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/d08f7a3d-9c61-35b3-5c95-33d28409469c.png)
![Screenshot 2021-08-31 07.33.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/a7ba7081-91a0-d991-96e6-399a7499428b.png)
メニューを確認
![Screenshot 2021-08-31 07.34.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/ad0f25c1-a735-a655-aaf8-017b635a2635.png)
### 2.Linuxコマンド実行
apt コマンドで更新（[apt update と apt upgrade](https://timetotravel.space/update_upgrade_chigai/)）

```console
$ sudo apt update
$ sudo apt upgrade
```
更新作業が行われる
![Screenshot 2021-08-31 07.34.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/e0041695-6e78-f753-9a1e-ff9a1a76b159.png)
![Screenshot 2021-08-31 07.35.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/435f5921-6de3-aa4c-af53-26fbb8bcc50a.png)
![Screenshot 2021-08-31 07.37.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/7ab37389-3434-a11c-9161-1d44fbb010b7.png)
更新完了
### 3. blender インストール
```console
$ sudo apt install blender
```
![Screenshot 2021-08-31 07.37.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/9fc1173d-cab0-e8b4-a3d1-006bdbc6a9d7.png)
![Screenshot 2021-08-31 07.38.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/8352b67a-55cd-ff5b-15a4-8bbbaaaac647.png)
インストール終了

メニューを確認
![Screenshot 2021-08-31 07.39.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/502ab484-d155-a088-c620-56c59bcc3c95.png)

### 4.メニューから起動
メニューからblenderを起動する
![Screenshot 2021-08-31 07.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/8e4b0b26-5053-e141-708d-b3bd1c82f358.png)
動きました！
普通に動きます。Chromebookでblender使えそうです。
![Screenshot 2021-08-31 07.39.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641564/2e5dac25-d184-4730-6f31-0d92de47ed12.png)
[Java基礎③]データの変換（キャストする）整数→実数　文字列→整数

<h2>初めに</h2>
Java学習３日目です。今回は、データ型の変換について学びました。

データ型の変換をデータのキャストと言うそうです。

<h2>小数点あり→整数型</h2>

double型の3.14と定義した値を３と表示します。

```java:コード
public class Main {
    public static void main(String[] args) {
    double number1 = 3.14;
    System.out.println((int)number1);
    }
}
```

<h2>整数を小数点ありに変換</h2>

```java:コード
public class Main {
    public static void main(String[] args) {
    double number1 = 3;
    System.out.println((double)number1);
    }
}
```
<h2>文字列を数値に変換</h2>

```java:コード
public class Main {
    public static void main(String[] args) {
    String text = "123";
    System.out.println(text);
　　　　　　　#出力結果　１２３
    System.out.println(Integer.parseInt(text));
　　　　　　　#出力結果　１２３
    System.out.println(Double.parseDouble(text));
　　　　　　　#出力結果　１２３.0
    }
}
```

「parseInt」は文字列はint型に変換してくれるメソッド。
「parseDouble」は文字列をdouble型に変換してくれるメソッド。


<h2>捕捉 データ型の自動変換 </h2>


<h3>割引価格を計算してみる</h3>

以下のコードはエラーになります。
```int discountPrice = price * 0.5;```は、
int型で定義していますが0.5という少数をかけることにより、
double型に変換されてしまっているからです。

```java:エラーになるコード
public class Main {
    public static void main(String[] args) {
    int price = 1800;
    System.out.println("定価" + price + "円");
    int discountPrice = price * 0.5;
    System.out.println("割引価格は" + discountPrice + "円");
    }
}
```

一部、以下のように修正します。

```java:intにキャストする
int discountPrice = (int)(price * 0.5);
```

<h3>消費税こみの価格を出す</h3>

```java:コード
public class Main {
    public static void main(String[] args) {
    int price = 1800;
    System.out.println("定価" + price + "円");
    int discountPrice = (int)(price * 0.5);
    System.out.println("割引価格は" + discountPrice + "円");
    int taxinPrice = (int)(discountPrice*1.1);
    System.out.println("税込価格は" + taxinPrice + "円");
    }
}
```

<h2>まとめ</h2>

```java
データ型の変換を「キャストする」と言う。

#文字列→整数
System.out.println(Integer.parseInt(text));

#文字列→実数
System.out.println(Double.parseDouble(text));

#intで定義してても、少数点のある数字をかけると、double型になる。
int discountPrice = price * 0.5;は、
double型に自動変換されてしまう。

以下のようにint型にキャストする。
int discountPrice = (int)(price * 0.5);

```
redashでCloudWatchをデータソースとした場合のクエリの書き方

##前提
redashでは対応しているデータソースに合わせてクエリを書く必要がある。
CloudWatchをデータソースとした場合、どのようにクエリを書けばよいのか分からなかったため、備忘録として記事を残しておく。

##結論
CloudWatchをデータソースとした場合のクエリを書くといっても、実態としてはCloudWatchのメトリクス取得APIを叩いているだけなので、そのAPIへのリクエストパラメータを書くのと同じ。

公式リファレンスからリクエストの例を一部抜粋して改変したものを次に示す。

```json:リクエストの例
{
  # どれだけの期間のデータを取得するか
  "StartTime": 1518867432,
  "EndTime": 1518868032,

  # 取得したいメトリクス群の記述
  # この例では、2つのEC2インスタンスのCPU使用率を取得している
  "MetricDataQueries": [

    # 1つ目のEC2インスタンスの指定
    {
      "Id": "m1",
      "Label": "CPUUtilization m1",
      "MetricStat": {
        # どのAWSリソースのなんのメトリクスを取得するかの指定
        "Metric": {
          "Namespace": "AWS/EC2",
          "MetricName": "CPUUtilization",
          "Dimensions": [
            {
              "Name": "InstanceId",
              "Value": "i-1234567890abcdef0"
            }
          ]
        },
        # どれくらいのスパンのどういった値を取得するかの指定
        # この例では5分(300秒)ごとの平均を取得している
        "Period": 300,
        "Stat": "Average"
      }
    },

    # 2つ目のEC2インスタンスの指定
    {
      "Id": "m2",
      "Label": "CPUUtilization, m2",
      "MetricStat": {
        "Metric": {
          "Namespace": "AWS/EC2",
          "MetricName": "CPUUtilization",
          "Dimensions": [
            {
              "Name": "InstancdId",
              "Value": "i-111111111111111111"
            }
          ]
        },
        "Period": 300,
        "Stat": "Average"
      }
    }
  ]
}
```

一番外枠で取得したいメトリクスの期間を指定している。
これは"MetricDataQueries"に記述される全てのメトリクスに適用される。

"MetricDataQueries"には取得したいメトリクスをどんどん繋げて書いていく。
AWSリソースによっては多少"Dimensions"の書き方に違いが出てくるが、そのほかはほとんど同様な形式でリクエストが記述できる。

また、リクエストの書き方によっては、複数のメトリクスの値に四則演算を行い算出した「カスタムメトリクス」を取得することもできる。
そうしたリクエストの書き方も、次の公式リファレンスに記載されている。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html

##redash画面
画面上では、次のように上のリクエストをそのままコピペすることでメトリクスの値が取得できるはず。
![スクリーンショット 2021-09-01 9.13.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/805423/6d7ecab2-1cd2-ef0b-3b4e-0f34c84d25f2.png)
IBM Cloud: Client VPN for VPC利用時の接続中ユーザーを確認する方法

#1. はじめに

Client VPN for VPCの概要や接続方法については、[こちらの記事](https://qiita.com/y_tama/items/16987e07842262cd9068)が参考になる。本稿では、落ち葉拾い的に、Client VPN for VPC利用時の接続中ユーザーを確認する方法について紹介したいと思う。

#2. Customer Portalからの確認方法
Client VPN for VPCにおける認証方式は、

- クライアント証明書
- UserID/passcode
- クライアント証明書とUserID/passcodeを両方使用（「どちらかで接続できる」という意味ではない）

のいずれかから選択できる。Customer Portalからも接続中ユーザーを確認することはできるのだが、残念ながら`User ID`のフィールドしかないため、`クライアント証明書`を利用した接続では、誰が接続しているかわからない（注：将来的に改善される方向性にはあるようです）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/32a71532-3af9-cdca-fefc-b0933e944f64.png)


:::note warn
切断されたクライアントは１時間後に自動的にこのテーブルから削除されるようです。

https://cloud.ibm.com/docs/vpc?topic=vpc-vpn-client-to-site-connections&interface=ui 
> The disconnected VPN client is automatically deleted after one hour.
:::

#3. CLIからの確認方法

CLIであれば、UserIDだけでなく、クライアント証明書の`CN(Common Name)`を表示する機能があるため、当面はこちらの方が役立ちそうである。

```txt:VPNサーバーの特定
# ibmcloud is vpn-servers
Listing VPN servers in all resource groups and region jp-tok under account xxx as user xxxxxxx@xx.xxx.com...
ID                                          Name          Status   Protocol   Host name                                        Port   Subnets                                Resource group
r022-35f58c82-814b-4005-a1a4-b4d882af39e3   syasuda-vpn   stable   udp        xxxxxxxxxxxx.xx-xxx.vpn-server.appdomain.cloud   443    sub-172-16-0-0-24                      Default
```

```txt:対象のVPNサーバーに接続中のクライアントを出力
# ibmcloud is vpn-server-clients r022-35f58c82-814b-4005-a1a4-b4d882af39e3
Listing clients of VPN server r022-35f58c82-814b-4005-a1a4-b4d882af39e3 under account xxx as user xxxxxxx@xx.xxx.com...
ID                                     Common name   User name   Status      Client IP       Remote IP      Remote port   Created
b1ff973b-38bb-4750-a014-b1e2542fa333   Taro-Yamada   -           connected   192.168.252.2   118.x.xx.xxx   59899         2021-09-01T08:33:20+09:00
```
応用数学

第一章　線形代数
行列について、行と列を掛け合わせることで新たな成分の行列を求めることができる。
また行列の計算をするということは連立方程式を解くというように考えられる。行列の計算には割り算はないが、割り算のようなものである『逆行列』がある。（解が１つに定まらないタイプのものは逆行列が存在しない。
行列の２つの横ベクトルの組み合わせだと考えた時、そのベクトルで作られる平行四辺形の面積を表す式を行列式と呼ぶ。
固有値固有ベクトルは行列式を使って求めることができる。固有ベクトルは一つに定まらない為、〇の定数倍などとして表記する。
固有値分解は固有値固有ベクトルを使い求めることができるが、正方行列でなければならない。
正方行列以外は特異値分解を行う必要がある。

第二章　確率・統計
集合は物の集まりのことをいう。
確率は発生する頻度を表す頻度確率と信念の度合いを表すベイズ確率に大きく分けて二つに分けられる。
条件付き確率じゃある事象Bが与えられてもとでAとなる確率のことである。
ベイズ則を用いることによって条件を入れ替えた時の確率を知ることができる。
確率変数は事象と結びつけられた数値であり、確率分布は事象が発生する確率の分布である。
期待値は確率×確率変数を行い全て足し合わせた値である。
確率分布には恋んトスのイメージのベルヌーイ分布とさいころを転がすイメージのマルチヌーイ分布などがある

第三章　情報理論
情報の増え方は比率で捉えている。
自己情報量　I(x) = -log(P(x)) = log(W(x))
シャノンエントロピとは自己情報量の期待値である。
H(x) = E(I(x))
     =-E(log(P(x))
     =-Σ(P(x)log(P(x)))

公差エントロピーはKLダイバージェンスの一部分を取り出したものであり、Qについての自己情報量をPの分布で平均している。
GCC 11.2.0 - _mm_cvttps_pi32 (__builtin_ia32_cvttps2pi) 最適化のバグ

以下のサンプルを GCC, Clang を使って確認します。

```c:sample.c
#include <stdio.h>
#include <xmmintrin.h>

int
main ()
{
  __v4sf i = { 1e20, 2.0, 0, 0 };
  __v2si o = _mm_cvttps_pi32(i);

  printf("%#010x\n", o[0]);
  return 0;
}
```

**GCC version 11.2.0 (GCC)**

```console:
$ gcc -O0 sample.c ; ./a.out
0x80000000
$ gcc -O1 sample.c ; ./a.out
0x7fffffff
```

**Apple clang version 12.0.5 (clang-1205.0.22.11)**

```console:
$ clang -O0 sample.c ; ./a.out
0x80000000
$ clang -O3 sample.c ; ./a.out
0x80000000
```

| 最適化 | GCC | Clang |
|:-:|:-:|:-:|
| なし | 0x80000000 | 0x80000000 |
| あり | 0x7FFFFFFF | 0x80000000 |

となりました。GCC (11.2.0) では定数を最適化するとプロセッサと違う値として処理するようです。
Nucleo-F303K8 レジスターを叩きながらDACを使う

電気屋さんとしては，PWMじゃなくて，H/Lじゃなくて，もう少し自由に電圧を出せたらいいなあと思うことがあります。

ふと手持ちのNucleo STM32F303のスペックをよく見ますと，DACがあります。やってみることにしました。

# 確認環境

- Nucleo-F303K8
- mbedで開発

Nucleoのピンアウト図やらデータシートやらをまとめますと...

```
/*

A5 PA_6 DAC2/1 unbuffered imp=15k DOES'NT WORK...
A4 PA_5 DAC1/2 unbuffered imp=15k DOES'NT WORK...
A3 PA_4 DAC1/1 buffered

*/
```

以下を参考に，
https://os.mbed.com/users/okini3939/notebook/AnalogOut_jp/

```cpp:
AnalogOut Vout3(PA_4);
Vout3=0; // 0 to 1
Vout3.write_u16(0x8000); // 0 to 0xffff
```

A4とA5はなぜか出力しませんでした... まだまだ修行が足りないようです。
A3は所望の電圧になっていました。すばらしい！

# いよいよレジスターも叩いてみる

さらに確認しますと，A3の出力インピーダンスは10kよりも多い感じです。これは**Buffered**とは言えないですよね...

最近見つけた **Mbedでのレジスター叩き** をやってみます。

https://os.mbed.com/users/MACRUM/notebook/mbed-library-internals/

リファレンスマニュアルとデータシートから，レジスターの存在と絶対アドレスを知りました。

```cpp:
    volatile unsigned int *dac_cr = (unsigned int *)0x40007400;
    *dac_cr &= !(1<<1); // means DAC_CR BOFF1=0 buffer=ON
```
#未解決案件

それでも2.8Vぐらいから上は、少しずつ出力インピーダンスが出てきます。
マニュアルをよく読んでまたレジスターを叩けば解決するのか，バッファーの限界なのか，よくわかりません...

とにかく，かなり便利になりました！
Chat Transcript 


# 「ソース」で始まるフィールドの適切な使用法は何ですか？例：Source.ToAddress
[What is the proper usage of a field that is prefixed with "Source"? Ex: Source.ToAddress](https://salesforce.stackexchange.com/questions/273114/what-is-the-proper-usage-of-a-field-that-is-prefixed-with-source-ex-source-t)

 Source:EmailMessage.ToAddress

これは、ソースが電子メールであり、そのソースからのフィールド値を使用してケースレコードに保存していることを指定します。

チャットに関連するケースについても同様のことが言えます。チャットのステータスをケースに保存する必要がある場合は、次のような式を作成する必要があります。

Source:LiveChatTranscript.Status


[Show Chat Transcript Status On Case Record](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Brl3SSAR)

# リアルタイムイベントの取得

[How to track Chat Transcript Events in real time?](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000G6F2t)


# 400 error

+ [Getting error while retrieving value for LivechatTranscript object using connectors. Permision level system Administrator](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ifuQc)

:::note alert
error response:{

  "status": 400,

  "message": "Salesforce failed to complete task: Message: \nSELECT Id, Body FROM LiveChatTranscript where Id = 'XXXXXXXXXXXX4X'\n                     ^\nERROR at Row:1:Column:22\nsObject type 'LiveChatTranscript' is not supported. If you are attempting to use a custom object, be sure to append the '__c' after the entity name. Please reference your WSDL or the describe call for the appropriate names.\r\nclientRequestId: 12wer34-self",

  "error": {
    "message": null,
    "code": "InvalidType",
    "originalMessage": null
  },

  "source": "Salesforce.Common",

  "errors": []
:::

:::note
yup, the issue is fixed basically you need to have correct mapping between permission set and the user. As in the user should add a permission set which has salesforce license.

Go to user -> choose the user with system administrator role -> edit you will see permission set on the the top -> click on that and assign a permission set who has l"salesforce license"

はい、問題は基本的に修正されています。権限セットとユーザー間のマッピングを正しく行う必要があります。ユーザーは、Salesforce ライセンスを持つ権限セットを追加する必要があります。

ユーザーに移動 -> システム管理者ロールを持つユーザーを選択 -> 編集すると、上部に権限セットが表示されます -> それをクリックして、「salesforce ライセンス」を持つ権限セットを割り当てます。
:::
大企業でも(だから)イノベーションは起こせる？ - 組織のルールに悩んだら読む記事

https://qiita.com/ok2/items/04086f7ee7bde6ab57b9

https://qiita.com/e99h2121/items/20fe59cc5625250487f1

https://qiita.com/e99h2121/items/8773ef78613ab8214dfc

を溜め込んでいるが意外と「大手企業」や大きな組織でも情報発信をしているなという話。これが「DX」というやつか？と思いつつウォッチしていきたい気持ちを込めてまとめたもの。




## NHK

[記者に「プログラミングのスキル」って必要なの？ちなみにNHKニュースの画像生成も記者がコードを書いてます｜NHK取材ノート｜note](https://note.com/nhk_syuzai/n/n9ccbd599da50)

2021年8月31日話題の記事。記者さん格好いい。


## 都庁

[「シン・トセイ」、始まります。｜＃シン・トセイ 都政の構造改革推進チーム（東京都 公式）｜note](https://note.com/kouzoukaikaku/n/nc51289509662)

https://note.com/smart_tokyo/

https://www.slideshare.net/norisukehirai/dxdx-242997785

https://qiita.com/viva_tweet_x/items/bebb40f3c5df05a17c39

「行政は世の中の課題が凝縮されている」が印象的だった講演。
![image (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/4f706799-b37a-7782-1fc3-c787039f3bff.png)
そこに敢えて飛び込むマインドに共感。

### 2021.12 最近ではこういうイベントも

https://twitter.com/tokyoossparty/status/1466960547585609730?s=21

## 登さん

https://www.technologyreview.jp/s/254889/the-genius-programmer-says-innovation-is-born-from-playfulness/

https://note.lapras.com/interview/dnobori/

https://note.com/dnobori/n/ncdefdb7d3ee3

NTTとかIPAとか硬そうな組織にかかわりつつ凄いことをできているそのタフネスに驚いてしまう。

## 日立

https://qiita.com/organizations/hitachi-oss

https://togetter.com/li/1670207

https://qiita.com/dracuttimeout/items/54bef3dd4cd9026ea0c0

好きなのがこれ

> かかった時間
> 投稿するまでの準備: 1日
> 記事を書いた時間: 30分
> ハンコをもらう時間: 3日

何度読み返しても笑ってしまうがこの投稿が承認までこぎつけたことから察するとやはり中の人々は「社会のコードを書き換えよう」の志の持ち主なのでしょう、と勝手に思ったりする。

[日立製作所と共催で「Social Tech Talk #01」を開催します！ - Qiita Zine](https://zine.qiita.com/event/202101-hitachi-2/)


## 採用

https://www.kajima.co.jp/tech/c_recruit/index.html

https://10q89s.jp/


## まとめ

特に日本の企業を顧客に据えて日々開発に携わっていると、大きな組織から変革を起こすなんてもはや夢物語なのか？と葛藤ばかりすることも多くある。しかしそれを逆に考えられるのも大きな組織ならでは。ルールが明文化されているなら「逆にいま目の前にあるこのルールを守りさえすれば後は自由」と解釈することもできる。

長いが引用: [【登大遊】「みんなすぐに諦め過ぎ」約２週間で『シン・テレワークシステム』を開発した天才プログラマーの“粘り力”](https://type.jp/et/feature/13945/)

> 「組織のリバースエンジニアリングというものは、昔のソースコードがどこかへいってしまったバイナリーのソフトウエアをリバースエンジニアリングするようなものだと思うんです。ソフトウエアエンジニアならその面白さが分かるのではないでしょうか。『上司が……』『会社が……』と、愚痴を言いたくなる気持ちも分かります。でも、そのレベルで立ち止まっていたらいつまで経っても状況は変わりません。

> 大企業で職場に閉塞感を感じているなら、上司や会社と正面から向き合っているか、自分に問い掛けてみてください。たった一度や二度のチャレンジでやる気を失ったり、忖度して議論を面倒がって避けていたりしていませんか？ そうだとしたら本当にもったいないことだと思います」

> **「多くの人はイノベーションを起こすのはGAFAやベンチャー企業の専売特許だと刷り込まれていますが、日本の場合、イノベーションを起こせるポテンシャルを秘めた場は別にあると思います。それが大企業です」**

> ある程度規模のある組織には、昔から堆積してきて由来や存在意義がよく分からない仕組みが重層的に存在し、動いています。複雑な業務プロセスが存在しているにもかかわらず、全体としては組織が一応機能しているように見えるのは、**それを補って余りあるオペレーション力とリソースがあるから。**

> 変えるべき問題があり、変わる必然性があり、変えられるポテンシャルもある。だから、登さんは大きな組織、特に大企業が面白いと思って注目するのだ。


組織の理不尽に直面するたびに「もう嫌だ」を常に頭をよぎらせて早20年弱な自分ですが、こういった粘り強く変革を試みる話には勇気を貰います。そしてやはり他には代えがたい、大きな組織の強みではある影響力、体力。

[Best Qiita賞の裏側 ～プライズ提供プロジェクトにおける工夫と、プロジェクトの中で得た学び～ - Qiita](https://qiita.com/cold-wisteria/items/be3ec7f417a199a619cd) 
[レガシーソフトウェアに小さな改善を積み重ね、モダンな開発体験を実現する｜S.Yamamoto｜note](https://note.com/flyaway/n/nc1ed9bc5ccfc)


も追記しておく。

そういえばデジタル庁のことを書き漏らしてしまったし「みずほ」という銀行の話もすっかりここでは忘れているが...。**「要はバランス」** などと凡庸な結論に辿り着きつつ心が折れかけたら読み返そうと思う物たちを集めた（また見つけたら足す）。なにがしか参考になればさいわいです。
エラーメッセージまでたどり着けない事例の整理



# Customize the Home Page 「今日のタスク」と「今日のイベント」はコンポーネントリストにありません。

+ [Customize the Home Page](https://trailhead.salesforce.com/content/learn/projects/prepare-your-salesforce-org-for-users/customize-the-home-page?lang=ja)
+ [Customize the Home Page challenge | Missing components](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000BrkkkSAB)


:::note
The issue was that I was selecting “App Page” instead of “Home Page” . With the right option “Home Page” both components “Today’s tasks” and “Today’s events” were available.

問題は、「ホームページ」ではなく「アプリページ」を選択していたことでした。適切なオプション「ホームページ」を使用すると、「今日のタスク」と「今日のイベント」の両方のコンポーネントを利用できました。
:::
== operator for String object in Java

First please read [this](https://qiita.com/saladlam/items/c867416f9b0db83b5e1d) if you don't sure how to use == operator for object.

# Example from The Java® Language Specification

Got from [here](https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.5).

```Java
package testPackage;
class Test {
    public static void main(String[] args) {
        String hello = "Hello", lo = "lo";
        System.out.print((hello == "Hello") + " ");  // (1)
        System.out.print((Other.hello == hello) + " ");  // (2)
        System.out.print((other.Other.hello == hello) + " ");  // (3)
        System.out.print((hello == ("Hel"+"lo")) + " ");  // (4)
        System.out.print((hello == ("Hel"+lo)) + " ");  // (5)
        System.out.println(hello == ("Hel"+lo).intern());  // (6)
    }
}
class Other { static String hello = "Hello"; }
```

```Java
package other;
public class Other { public static String hello = "Hello"; }
```

The output is

```
true true true true false true
```

# Things you need to know about String class

1. String object is immutable
2. A pool of strings, initially empty, is maintained privately by the class String. You may use [intern()](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#intern--) for looking up reference (Output of (6))
3. All String constants will refer to the same String instance if the values are the same during compile time, no matter what package is in. And a reference will be stored in pool stated in point 2 (Output of (1), (2), (3), (4))
4. New String object will be created during runtime (Output of (5))

# Suggestion

**Don't** use == operator for checking if value of two String objects are equal. Please use [equals()](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#equals-java.lang.Object-) instead.
Prometheusとプリンターの変な関係

つまらない話ですが、びっくりしたので記録。

# ことの経緯

子供の保育園がコロナで休園となってしまい、暴れる怪獣を大人しくさせるため、塗り絵やらペーパークラフトを印刷しようとプリンター（EPSON製・WiFi接続）の電源を入れた直後、プリンターが給紙をはじめ、何かを印刷しようとする。慌てて中止ボタンを押すも、また給紙の繰り返し。諦めて印刷させてみると、写真の内容が。
![lpr_prometheus.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321595/fb3164f4-d194-5feb-af36-52501f9099f9.jpeg)

# 原因

書かれているUser-AgentとIPアドレスを見て気づいた。

- プリンターの電源を入れる数時間前、Parallesで仮想Linuxを起動しており、そのIPアドレスが192.168.10.114
- 仮想LinuxにNode Exporterを入れ、別ホストのPrometheusから監視するテストをしていた
- 用が済んだのでLinuxは落としたが、Prometheusの監視設定はそのままにしていた
- 確認してないけどプリンターを起動した際に振られたIPが192.168.10.114と思われる

で、Prometheusは律儀に監視を続けた先がたまたまプリンターのRAWポートとして立ち上がった結果、印刷が始まったと。
使い捨ての仮想環境でもDHCP割り当て外のIPを付けるとかしないとダメってことか。
っていうか、RAWポートってHTTPアクセスするだけで印刷されちゃうんですね。知らんかった。
Obsidian で WYSIWYG


Markdown エディタを選ぶときに WYSIWYG であることが自分の中の絶対条件なので Typora や Bear を愛用しています。ただ以前から Obsidian が気になっていたので調べてみました。


## （追加）2022-02-13 LiveView がReleaseされました

触った感じの所感

- シンプルな構造の場合は普通に使えそうです
- ただ、例えばネスト構造とかにすると動かなくなるようなケースもあるのでTypora/Bearなどに比べるとまだ完全にリッチな感じではないです。
- とはいえ、すでにある程度は使えるレベルなのでしばらく使ってみます
- ちなみに、モバイルではまだ対応されてないようです。

https://twitter.com/obsdmd/status/1473364649357807616?s=20&t=c611lHtBv-feE4zvPPQtHQ

すでにReleaseされたのでこれ以降の記事の内容は過去に調べたときの情報なので見る必要がないかと思います。

## tl;dr

2021-08-31 時点ではこのようなステータスでした。

- Custom CSS / Plugin で 擬似的なWYSIWYGは可能。だが挙動が不安定
- 公式の Roadmap にWYSIWYG typora like なるチケットがshort-term のラインに置かれてるのでこちらを待つのが良さそう
- とりあえずは `ctrl+e` で編集/Preview のモードを切り替えて我慢する

https://twitter.com/snamiki1212/status/1432794439920017410



## Custom CSS

ObsidianへCustom CSSを設定する方法はこちらを参照。

- [Add custom styles](https://help.obsidian.md/How+to/Add+custom+styles)



Custom CSS 自体はここらへんに落ちているのを試してみました。

- [Meta Post - Common CSS Hacks - #104 by _ph - Share & showcase - Obsidian Forum](https://forum.obsidian.md/t/meta-post-common-css-hacks/1978/104)
  - H1~H6はWYSIWYGになるけど。
  - ただ挙動が不安定なのでリアルに使うにしては微妙。
- [Meta Post - Common CSS Hacks - #223 by TriDiamond - Share & showcase - Obsidian Forum](https://forum.obsidian.md/t/meta-post-common-css-hacks/1978/223)
  - これも同じ感じ。



## Plugin

ObsidianへPluginを設定する方法はこちらを参照。セキュリティ的に気をつけてください。

-  [Third-party plugins](https://help.obsidian.md/Advanced+topics/Third-party+plugins)

こちらのPluginを試してみました。

- [GitHub - OwnJoke/obsidian-budget-wysiwyg: Obsidian plugin that automatically switches between preview and source mode.](https://github.com/OwnJoke/obsidian-budget-wysiwyg)
  - ただ上記の Custom CSS と同じような挙動です（というか、もしかして同じスタイル使ってる？そこまで見てない）



## Roadmap

Short-term にWYSIWYGが入ってます。

- https://trello.com/c/pXHHXIzj/18-wysiwyg-editor-like-typora



## その他

みんなWYSIWYGを熱望してますね

- [How are you working with the live preview? - Resolved help - Obsidian Forum](https://forum.obsidian.md/t/how-are-you-working-with-the-live-preview/6758)
- [A Typora-like editing mode (edit and preview at the same time) - Feature requests - Obsidian Forum](https://forum.obsidian.md/t/a-typora-like-editing-mode-edit-and-preview-at-the-same-time/1953)



## おわりに

気長に待ちましょう
2021年09月の質問の中から整理します

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)

**参照して頂くのは結構ですが、そのまま内容を丸ごとコピーするような行為は控えて欲しいです。一応時間を掛けて作っているので、その点はご考慮願いたいです。**



# Object Task is not supported in UI Api
全く理解できなかった回答。まぁ、フローを覚える気が全くおきないからだけどね。

[Task populate Lookup field in flow](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000BrhsgSAB)



# 【ヘルプ預かり】Executing the 'accountsByState' method on 'AccountUtils' failed. Make sure that you named your method correctly, that it's public and static, and that it accepts a String and returns a List of Account objects.

[Challenge problem on: Map .NET Concepts to the Lightning Platform module](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000CgOH7SAN)


# 'Control Access to Fields' is throwing an error 'In the Sales Profile, we can't find the correct permissions for the Account object

FLSに削除権限がついていたようです。

[In the Sales Profile, we can't find the correct permissions for the Account object](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000ChlPjSAJ)
検索の仕方とサーチ能力について

#サーチ能力とは？

**サーチ能力とは、分からないことがあった場合に、いかに速く解決方法を調べられるかというスキルのことです。**

プログラミングの知識はただでさえ膨大な上に、常に新しい技術が生まれており、これら全てを頭に記憶しておくなんてことは不可能です。

プログラミングの基本的な「仕組み」や「考え方」はしっかり理解しておく必要がありますが、その根本さえ正しく理解しておけば、枝葉となる知識はその都度調べて取り出すという考え方で大丈夫です。

#プログラミングの半分は「調べる時間」

プログラミングというと、ソースコードをガリガリ書き続けているイメージがあると思いますが、実際には処理の実装方法を調べたり、書いたコードがうまく動作せずエラーになるの解決方法を調べたり、といった「調べる時間」が多くあります。

開発をするときは毎日何かしらの調査をしています。
ですので「欲しい情報をどれだけ早く見つけられるか」と言うことが、仕事スピードにそのまま直結するので「サーチ能力」はとても大事です。

#実際のサーチ方法(検索方法)

調べるときは「Google」を使います。

プログラミングの情報はリファレンスサイト、技術系のサイト、企業や個人のグログ、Q＆Aサイトなど様々な場所にあり、探している情報は大抵ネットに落ちています。

知りたい情報や解決したい問題があった時、
**・「Googleの検索ボックスに何を入力するか」
・「検索結果の中から自分が求めている情報が載っていそうなサイトを素早くピックアップ出来るか」**
これが具体的なサーチ能力のポイントになります。

##複数ワードで検索する

複数ワードで検索する

**検索ボックスには、複数ワードをスペースで区切りで入力する。**

例) 「JavaScriptでidを取得したい」ということがあった場合、検索ボックスに「JavaScript　id　取得」と入力します。

![スクリーンショット 2021-09-01 1.36.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262417/c74e67be-fbad-03c5-ebcd-cb48bbb24faa.png)

すると、それを行うための記事がすぐにたくさん見つかります。

![スクリーンショット 2021-09-01 1.32.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262417/01ae96a7-2837-ae05-60a6-3f6c789db9b1.png)

★ 自分がやりたいこと、知りたいことを明確にし、できるだけ細かく絞り込めるようなキーワードを複数指定するのがコツ

#サジェストや関連ワードも参考にする

入力していると、このように候補が表示されることがあります。これを「サジェスト」と言います。

![スクリーンショット 2021-09-01 1.39.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262417/24c1c3a8-da42-893e-b920-42b2cb7b1d95.png)

また、画面下にこのような関連ワードも表示されることもあります。

![スクリーンショット 2021-09-01 1.40.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262417/c2310ce4-d4e0-20db-efd5-8a1e9cda6029.png)

これらはどちらも、多くの人が検索したキーワードとともに検索している関連ワードです。

この二つを活用することによって自分で思いつかない適切なワードがここから見つかる場合もありますので、これらをよく見て参考にしましょう。

##太字表記部分を充填的にチェックする

検索結果が表示されたら、タイトルとその下に表示されている概要をざっと確認し、自分が欲しい情報が記載されているかどうかを判断します。

入力したキーワードとマッチした場合は、文面内の文字が太字で表記されます。太字に目線を置きながらざっと確認していきます。

![スクリーンショット 2021-09-01 1.32.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262417/01aff902-2d31-b452-9b54-870a6889aa21.png)

気になるページがあればクリックして実際にページを確認します。
ページを読んで違うと思ったらブラウザバックしてやり直します。
こんな感じで知りたい情報をサーチしていきます。
最初は欲しい情報が見つかるまでに時間がかかりますが、慣れていけば早くなります

#寛大な心でページを読む

残念ながら、いい情報をみんながわかりやすいように書いてくれるとは限りません。

プログラミングは専門用語が多いので、初心者にはわかりずらい言い回しで書かれているページも多くあります。

qiitaなどプログラマーが使う個人ブログは自分用のメモとして書いてるケースもあるので誰かに見てもらうために書いていなかったりします。

そういったページを見ると訳がわからず、ブラウザバックしたくなりますが、そういった個人が作成してるページにこそ有益な情報が多くかかれています。

そこでブラウザバックしても何の得もないので、落ち着いて一つ一つ読み解いていくようにしましょう。

ここは文章を読み解く力、読解力が試されます。

#英語サイトにビビらない

英語のサイトにしかない情報なども多くあります。検索結果に英語のページが出たからといって確認対象から除外せず

翻訳機能を使って読み解きましょう。

#自分のノウハウ集を作る。

これもかなりプログラマーにとって重要なことです。

調べてる中で「これは今後も使えそうだな」、「調べて理解したけど英語のページしなかった」と思う知識については、自分のノウハウ集（武器）としてまとめておくとさらにスピーディに開発ができます。

qiitaやEvernoteなどをつかって自分なりにまとめておくとバグやエラーになった時「このバグ調べたことあるな」と自分でまとめた記事を確認すれば素早く情報を見つけられます。

#まとめ

サーチ能力を高めれば、頭に入っていない情報でもすぐに調べて検索し補完することができます。
これは、プログラミングの軸となる考えさえわかっていれば、他にも応用が効くのです。

**ネットにつなげば誰でも博士になれるわ。後は検索の仕方だけ**

とめちゃめちゃ刺さることをルパン三世に出てくる凄腕ハッカーのアミが言ってるように、
プロはわからないことを調べてスピーディに情報を見つける能力に長けています。

知りたいときに、知りたい情報をインターネットからすぐに取り出せる能力。

それがサーチ能力です。

これはプログラミングだけではなく、日常生活でも役に立ちます。
わからないことや、気になることがあればガンガン調べてサーチ能力を身につけましょう。
[jQuery]ランキングしたものをslickで表現する

# はじめに
本記事では、slickを用いた記述をいたします。
`slick`はjQueryベースのスライダーを作成するための`プラグイン`です。

# コード
いろんなサイトやYouTubeの動画を参考にしましたが、
`CDN`を使用するのが一番良いなという結論に至っています。
（ファイル保存とか色々グダってトラウマ）

```erb
<!DOCTYPE html>
<html>
  <head>

省略

    <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick-theme.css"/>
    <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css"/>
  </head>

  <body>
    <%= yield %>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script type="text/javascript" src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
  </body>
</html>
```
これだけです。

あと、`gem 'jquery-rails'`は予めbundle installしています。

以下長いのでランキングの部分だけ。

```erb
<h2 class="ranks-title">Ranking !</h2>
  <div class="ranks">
    <% @ranks.each do |food| %>
      
      <div class="ranks-img-content">
        <h2 class="food-post-user">
          <%= link_to user_path(food.user_id) do %>
            <%= food.user.nickname %>
          <% end %>
        </h2>
            <%= link_to food_path(food) do %>
              <%= image_tag food.image, class: "food-img" if food.image.attached? %>
              <div class="food-img-info">
                <h2 class="shop-name">
                  <%= food.shop_name%>
                </h2>
                <h2 class="food-name">
                  <%= food.food_name%>
                </h2>
              </div>
            <% end %>
      </div>
    <% end %>
  </div>

<script type="text/javascript">
  $(function() {
    $('.ranks').slick({
      dots: true
    });
  });
</script>
```
ドットは付けたいなと思ったので、即記述しました。
矢印が画面外にいってしまっているので、明日調整しようと思います。

また、
scriptタグを一番下にして記述しましたが、まあまあ汚いコードだと思っています。
ここ含めてリファクタリングのこと考えないとな。

ランキングのことをお話ししているので、
コントローラーも記載します。

```ruby
  def index
    @foods = Food.order("created_at DESC")
    @like = Like.new
    @ranks = Food.find(Like.group(:food_id).order('count(food_id) desc').limit(5).pluck(:food_id))
  end
```

いいね数が多い順番で、上から５位までをとっています。
難点なのが、過去の投稿全てのランキングになってしまっているので、改善が必要。
1週間や1ヶ月にいいね獲得数ランキングにするのが一番ベスト。
考えます。

また、リファクタリングの点では、モデルに記載するのが良いですが、
出来上がったことの満足感で後回しにしてしまっています。
後々改善します。


# 終わりに
導入しましたが、プラグインは便利でかっこいいですね。
導入後、楽しくていっぱい遊んでしまいます。

矢印が画面外にいる点が気持ち悪いので、明日の目標です。

以下参考サイトです。

[【Rails】 便利なpluckメソッドをマスターしよう！](https://pikawaka.com/rails/pluck)
[Railsで週間いいねランキングを作る！](https://qiita.com/takaaaaaaaya/items/a293b6b0db713320cdcd)
[slickの公式サイト](http://kenwheeler.github.io/slick/)
[【Rails】slickでスライドショーを表示させる](https://qiita.com/hitochan/items/e50733e5ab61a78a2edd)
[slickの使い方からカスタマイズまで【スライダープラグイン決定版】](https://b-risk.jp/blog/2020/01/slick-customize/)
[jQueryスライダープラグイン9選！スライドショーを手軽に作成](https://ferret-plus.com/9396)
[どこよりも詳しい万能スライダーjQueryプラグインslick.jsの使い方](http://ithat.me/2016/10/17/how-to-use-slick-jquery-plugin)
[【jQuery】一行でスライダーが動く！slickをご紹介！](https://www.youtube.com/watch?v=8SO23maM9os)

それでは、明日も頑張りましょう！！
【Zapier】NocodeでSlackにbotを実装・編集を行う

#概要
この記事は、Zapierというサービスを使用しコーディングを一切行わずにSlackにbotを実装する。
今回は例としてwelcomebotを作成する。

#この記事で出来ること
Slackのワークスペースに新規参画者がいた場合に、その人宛に自動でSlackbotからDMを送信することが出来る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731058/fcf07ea1-8dc9-0052-5156-4c5fa8466d58.png)


#Zapierについて
Zapierは、異なるサービスやプラットフォームを連携するiPaaSと呼ばれるものである。
Slack側の設定を無しに、Zapと呼ばれるZapierプロジェクトを作成して各サービスに紐づいた動作を登録することができる。
類似するものとしてIFTTTが存在する。

https://zapier.com

#Zapを実装する
画面左上部にある[Create Zap]を選択する。
![スクリーンショット 2021-09-01 0.19.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731058/817aac12-06cf-9dfc-ea43-a41103ac504a.png)

###triggerを作成する
Zapのtrigger設定で[Slack]の[New User]を選択する。その後、botが動作を検知したいSlackのワークスペースに存在するユーザーでログインを行いZapと紐付けを行う。（例：new userが新規参入するワークスペース）
正常に紐付けが完了すると、ワークスペース内に存在するメンバーが表示される。
※このログインを持ってSlackのAPIKeyなどを取得しているのではないだろうか。
![スクリーンショット 2021-09-01 0.59.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731058/a84ec5f6-2dc2-e800-8625-eb7278a5a791.png)
![スクリーンショット 2021-09-01 1.17.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731058/e338080f-e992-3ea0-f90e-79d716a1632a.png)

###actionを作成する
triggerの作成が完了すると、自動でactionの作成画面に遷移するので、trigger同様に[Slack]の[Send Direct Message]を選択する。その後、botを導入したいSlackのワークスペースに存在するユーザーでログインを行いZapと紐付けを行う。（例：new userにDMを送信するワークスペース,別の管理ワークスペース）
![スクリーンショット 2021-09-01 1.18.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731058/d2d7a9df-0e09-9a60-1a67-ede4ff598ed1.png)

正常に紐付けが行われるとset up actionが表示されるので、以下を参考に設定する。

```
#複数人のDMを作成するか
Send Multi Message：No

#誰宛にDMを送信するか (変数的に宛先を取得することが可能) 
To Username：custom → 1.Name

#DM内容（絵文字＋slack上のカスタムスタンプも入力可能）
Message Text：ようこそSlackワークスペースへ！！:slackカスタム絵文字:

#誰がDMを送信するか。（Noにするとユーザーを選択可能）
Send as a bot?：Yes

#botの名前
Bot Name：welcome bot

#botのアイコン
Bot Icon：画像url or :絵文字:

#Zapのリンクを表示するか
Include a link to this zap：No

#画像を添付するか
Attach Image by URL：画像url

#linkを拡張表示するか
Auto-Expand Links?：Yes

#タイマー設定(120日以内)
Schedule At：
```

設定が完了すると、[Test&Continue]を選択することが出来るようになり、実行するとテスト実行されZapが起動する。

#Zapを編集する
Zapierメインメニューから[Zaps]を選択すると、実装済みと作成中のZapが表示されるので編集したいZapを選択すると実装時と同じ画面が表示される。
編集が完了したら[Retest&Continue]を選択し、右上のラジオボタンが[turn on]になっていることを確認する。

#Zapの稼働確認
Zapが正しく機能しているかは[Zap history]を選択すると確認することができる。
![スクリーンショット 2021-09-01 2.08.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731058/4541e2e1-28fb-4f75-0b23-5178faa77468.png)
Ruby3.0以降の画像ファイルの開き方

# 動作環境

`Ruby3.0.2`

# Ruby3.0で openメソッド は使えない

`open-uri`を使って画像ファイルを開く際、`openメソッド`を使用する記事をよく見かけます。
しかしRuby2.7以降、openメソッドは非推奨となり、Ruby3.0以降では使用不可となりました。

Ruby2.7以降の環境でopenメソッドを使うと下記の警告が出ます。

:::note warn
<font color="orange">warning: calling URI.open via Kernel#open is deprecated, call URI.open directly or use URI#open</font>
:::

また、Ruby3.0以降の環境でopenメソッドを使おうとすると下記のエラーが発生するはずです。

:::note alert
<font color="red">No such file or directory</font>
:::

# Ruby3.0以降における画像ファイルの開き方

さっそく結論です。
Ruby3.0以降では以下のようにすれば画像ファイルを開くことができます。

```ruby
require 'open-uri'

URI.open('https://hoge.png')
```

今までは`open`で良かったところを`URI.open`とするだけです。簡単ですね😉

# 参考記事
[Ruby 3.0.0 リファレンスマニュアル ＞ ライブラリ一覧 ＞ open-uriライブラリ](https://docs.ruby-lang.org/ja/latest/library/open=2duri.html)
Node.js で Excel ファイルをパースしてデータ抽出するときの備忘録

覚えておきたいことだけ書く。

# リファレンス
https://www.npmjs.com/package/xlsx

# セルの指定方法

'A1', 'A2' と指定するのが基本。
隣のセルとかを指定するには、セルをエンコードして操作する。

> Cell and cell address manipulation:

> - format_cell generates the text value for a cell (using number formats).
> - encode_row / decode_row converts between 0-indexed rows and 1-indexed rows.
> - encode_col / decode_col converts between 0-indexed columns and column names.
> - encode_cell / decode_cell converts cell addresses.
> - encode_range / decode_range converts cell ranges.

# 値の取得

セルオブジェクトには、v(raw value), w(formatted value), t(type) の値がある。
数字は変な値になる。日付とかはvで取れない。
なので、基本は`w`で取得する。


# 参考
https://www.kwbtblog.com/entry/2019/09/27/122318
https://photo-tea.com/p/17/excel-parse-javascript-node/#%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92nodejs%E3%81%A7%E8%A7%A3%E6%9E%90
https://qiita.com/indometacin/items/020513f7801a040dab33