OmniAICreator/Qiita-1.07M huggingface dataset:
AtCoder参加記録 No.1ーABC195

#ABC195
自分のモチベーションと記憶用にAtCoder参加記録を付けることにしました

初参加は2021年3月13日（土）のパナソニックプログラミングコンテスト（AtCoder Beginner Contest 195）でした。

https://atcoder.jp/contests/abc195



##結果

A,C問題を正解
レート：0→16
順位:5007/7679
時間: A問題55:58   C問題97:08
パフォーマンス:330

##詳細

###A問題
[問題](https://atcoder.jp/contests/abc195/tasks/abc195_a)

提出コード（AC)

```python:A問題.py
m ,h =map(int,input().split())
if h%m==0:
  print('Yes')
else:
  print('No')
```

[提出コード詳細](https://atcoder.jp/contests/abc195/submissions/20892291)

###B問題
[問題](https://atcoder.jp/contests/abc195/tasks/abc195_b)
考えたが解法が思いつかなかったため未提出

###C問題

[問題](https://atcoder.jp/contests/abc195/tasks/abc195_c)

提出1回目（WA)

```python:C問題_1.py
n=int(input())
n_a=str(n)
l=len(n_a)
a=n-999999999999
b=n-999999999
c=n-999999
d=n-999
if l>3:
  if l>6:
    if l>9:
      if l>12:
        print(a+b+c+d)
      else:
        print(b+c+d)
    else:
      print(c+d)
  else:
    print(d)
else:
  print(0)
```

[詳細](https://atcoder.jp/contests/abc195/submissions/20901231)

2回目（WA)

```python:C問題_2.py
n=int(input())
n_a=str(n)
l=len(n_a)
a=n-999999999999
b=n-999999999
c=n-999999
d=n-999
if l>3 and d>0:
  if l>6 and c>0:
    if l>9 and b>0:
      if l>12 and a>0:
        print(a+b+c+d)
      else:
        print(b+c+d)
    else:
      print(c+d)
  else:
    print(d)
else:
  print(0)
```

[詳細](https://atcoder.jp/contests/abc195/submissions/20901915)

3回目（AC)

```python:C問題_3.py
n=int(input())
n_a=str(n)
l=len(n_a)
z=n-999999999999999
a=n-999999999999
b=n-999999999
c=n-999999
d=n-999
if l>3 and d>0:
  if l>6 and c>0:
    if l>9 and b>0:
      if l>12 and a>0:
        if l>15 and z>0:
          print(a+b+c+d+z)
        else:
          print(a+b+c+d)
      else:
        print(b+c+d)
    else:
      print(c+d)
  else:
    print(d)
else:
  print(0)
```

[詳細](https://atcoder.jp/contests/abc195/submissions/20902518)

###振り返り
バイト後の参加のためスタートが遅れてしまい、だいぶ遅い時間からの参加になってしまった。

Ａ問題は普通に解くことができ、Ｂ問題が分からなかったため。C問題に挑戦し運よく正解することができた。

A問題については特になし

B問題はちょうどにならないことを考える処理が分からなかった。

C問題についてはN≦10^15を勘違いしていたことがWAの原因であった。
2回目の提出はまったく意味のない修正であった。

```python:C問題.py
n=int(input())
n_a=str(n)
l=len(n_a)
z=n-999999999999999
a=n-999999999999
b=n-999999999
c=n-999999
d=n-999
if l>3:
  if l>6:
    if l>9:
      if l>12:
        if l>15:
          print(a+b+c+d+z)
        else:
          print(a+b+c+d)
      else:
        print(b+c+d)
    else:
      print(c+d)
  else:
    print(d)
else:
  print(0)
```

三回目の提出でも正解だが桁数が条件を満たす時a,b,c,d,zが0より大きいことは自明であるため、考えが甘かった。

##感想

自分のコードを見てみると変数のつけ方などが未熟であったり、自明なことを書いていたりとミスが目立つため、参加記録を付けることで復習になることが分かった。
Hours time tracking

Many agencies sense that there's an every day call for daily boom the performance of the organisation's operations. This will be executed without difficulty the use of the Hours time tracking software. This is a great every everyday software that can be used for both professional as well as household tracking of sports. In an administrative center, it could be used every day work time tracker spent by an employee in every venture.  
The time thus captured electronically can be used for in addition middle analysis. The Hours time tracking or expense tracking software program is of use day-to-day both the control as well as the personnel. All your holiday time or ill depart period may be calculated using this software. The time applied in internet sports and different non enterprise related activities in addition to worker attendance info can be gathered effortlessly and hastily.   

For more info:-https://www.livetecs.com/

https://freeadsonline.biz/458/posts/3-Services/27-Other/512428-Identify-the-best-time-tracking-software.html

![download (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486995/aefa0ab1-ac59-5215-c026-786b44fdebc6.jpeg)
スケールアップ、スケールアウト

スケールアップ(Scale up)
個々のサーバの増強、サーバのCPUやメモリをスペックアップする

スケールアウト(Scale out)
サーバの台数を増やすことでシステム全体の性能を向上させる

スケールイン(Scale in)
台数減

スケールダウン(Scale down)
CPU メモリ減
Project time tracking

Challenge monitoring, value monitoring, and time management are decisive fields for each business enterprise. Managers need information in their employees' practice and insight into in which they stand with their initiatives. The worker time monitoring software program will supply powerful mission time and costing records in actual time with a history assessment for evaluation, managers can be certain that their corporation runs at full electricity. 
Modern-day commercial enterprise surroundings require organizations to become greater price powerful. Information is strength and having a listing of over a hundred and thirty 5 customizable time and fee signs and controls, distinctive reviews offers you that strength.

For more info:-https://www.livetecs.com/

https://archello.com/brand/livetecs-llc

![download (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486995/6fe802b4-2f3b-41df-2e43-40b07967f041.png)
Fastest project time tracking

Find the fastest project time tracking software at Livetecs. With the help of our project time tracking software, you can easily coordinate various projects and tasks. It becomes very easy and simple to track your working hours and create awesome-looking reports which is sent to the clients. It is easy to use and receive the most out of your data with powerful and well versed reporting. We have seen that the organizations who use TimeLive are more productive, efficient and organized. You can easily break down your work into different projects and tasks so that it can be complete in the given time period. It has a feature of prioritizing tasks, adding different types of details and assigning them to your team to complete in a given deadline. Due to this, you can plan an estimated budget for a project or task level.

for more info:-https://www.livetecs.com/project-time-and-expense

https://topdigital.agency/client/livetecs-llc-2/

![download (3).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486995/4e594a5a-a8b2-c1e9-c13c-1615276b818c.jpeg)
Arduino MKR WiFi 1010でハローワールド（Lチカ） #Arduino


## Arduino MKR WiFi 1010

待望のArduino公式でWiFi使えるものが日本でも出てきましたね。

Wi-Fiの確認の前にまずは書き込みテストからやってみます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">まずはLチカ <a href="https://twitter.com/hashtag/Arduino?src=hash&amp;ref_src=twsrc%5Etfw">#Arduino</a> <a href="https://twitter.com/hashtag/arduinomkrwifi1010?src=hash&amp;ref_src=twsrc%5Etfw">#arduinomkrwifi1010</a> <a href="https://twitter.com/hashtag/iotlt?src=hash&amp;ref_src=twsrc%5Etfw">#iotlt</a> <a href="https://t.co/bliMOUJufs">pic.twitter.com/bliMOUJufs</a></p>&mdash; 菅原のびすけ (@n0bisuke) <a href="https://twitter.com/n0bisuke/status/1427165386001113093?ref_src=twsrc%5Etfw">August 16, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## Arduino IDEから書き込んでみる

Arduino IDE 1.8.15で進めていきます。

### ボードマネージャーのインストール

公式だし追加でボードマネージャーインストールいらないのかなぁなど思ってましたが、[公式のチュートリアル](https://www.arduino.cc/en/Guide/MKRWiFi1010)を見てみると追加でインストールが必要な模様です。

`ツール > ボード > ボードマネージャー`からボードマネージャーを開いて`Arduino MKR WiFi 1010`で検索します。

検索して出てくる`Arduino SAMD Boards`をインストールします。

> ![スクリーンショット 2021-08-16 0.07.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/261abbba-e388-2ea1-950a-378a53c2f963.png "スクリーンショット 2021-08-16 0.07.29.png")

通信環境が悪かったかもですが、けっこうインストールに時間がかかった印象です。

ボード選択で`Arduino SAMD > Arduino MKR WiFi 1010`を選択

> ![スクリーンショット 2021-08-16 0.20.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/561454ca-ef65-771a-c1e2-f70cb7ad6a3f.png "スクリーンショット 2021-08-16 0.20.26.png")

### USBケーブルでPCと接続

ちゃんとArduiono MKR WiFi 1010と表示されました。

> ![スクリーンショット 2021-08-16 16.00.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/1406711e-f7aa-6d39-b0ee-c5aa720adcb1.png "スクリーンショット 2021-08-16 16.00.41.png")

ちなみにMac Book Proで試しています。

### 

公式サンプルのLチカ(blink)プログラムを試してみます。

そのまま実行する場合は`ファイル > スケッチ例 > 01.Basics > Blink`から開いたサンプルを実行しましょう。

> ![スクリーンショット 2021-08-16 16.03.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/c48e6ec4-a62a-c228-785c-ae42a8f7a562.png "スクリーンショット 2021-08-16 16.03.32.png")


僕はちゃんと書き込み出来てるか試したかったので新規ファイルを作成して、delayの値を500などにして挙動確認をしました。

```blink.ino
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}


void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);
  digitalWrite(LED_BUILTIN, LOW);
  delay(500);
}
```

無事に書き込みが出来ると[冒頭の動画](https://twitter.com/n0bisuke/status/1427165386001113093)のように組み込みLEDがLチカしてくれます。

## 所感

追加のライブラリインストールが必要ってあたりが最初迷う人いそうな気がしたくらいであとは通常のArduinoだなぁという印象です。

Wi-Fi/Bluetoothを使ってこそだと思うのでまだ本題に入ってない感がすごいですが笑

あとあるあるですが、手元のmicroBケーブルが給電専用のものが多く書き込み出来ない問題がありました。

このタイミングで出てきたらUSB microBじゃなくType-Cでも良さそうな気がしますがコスト問題なんですかね
個人アクセストークンを使用したGitHubの認証の設定手順

8月13日からGitHubのパスワード認証が廃止され、これまでのようにプッシュなどの操作を行うことができなくなりました。
実際、私もプッシュしようとした途端に以下のようなメッセージが表示されました。

```none:ターミナル
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: unable to access '自分のリポジトリURL': The requested URL returned error: 403
```

本記事では、パスワードの代わりに「個人アクセストークン」を使用した認証の設定手順をまとめたいと思います。
(私はMacを使用しています。Windowsをご使用の方はご注意ください)

# 個人アクセストークンの作成、取得

以下に手順がわかりやすく示されています。

https://docs.github.com/ja/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token

上記のドキュメントに記載されている手順を大まかに書くと、以下の通りです。

1. GitHubにログイン
2. 画面右上のプロフィール画像をクリックし、次にメニューのSettingsをクリック
3. 左側メニューの下から4番目にある「Developper settings」をクリック
4. 続いて左側に表示される「Personal access tokens」をクリック
5. 「Generate new token」をクリック
6. 「Note」の入力フォームにはわかりやすいトークン名を入力し、「Select scopes(権限)」の下にある「repo」にのみチェックを入れたら、「Generate token」をクリック
7. 個人アクセストークンが生成される(ghp_〇〇〇〇のような文字列)ので、それをコピーしておく。


ここまでで個人アクセストークンの作成、取得が完了しました。

しかし、ここで私はしばらく

「個人アクセストークンは取得できたけど、これをどうすればいいんだ？」

と悩んでいました。


# 取得した個人アクセストークンをキーチェーンアクセスのgithub.comに登録

調べているうちに、「キーチェーンアクセス」と言うものを使って、パスワードの代わりに個別アクセストークンを設定できることがわかりました。

キーチェーンアクセスとは
>パスワードやアカウント情報を保管するmacOSアプリケーション

だそうです(<a href="https://support.apple.com/ja-jp/guide/keychain-access/kyca1083/mac" target="_blank">Appleサポートより引用</a>)。

まず、「command + space」でSpotlightを起動し、「キーチェーンアクセス」と入力します。
すると、「キーチェーンアクセス.app」が表示されますので、クリックして開きます。

キーチェーンアクセスを開いたら、右上の検索バーに「github.com」を入力し、検索します。
すると、「種類」の項目が「インターネットパスワード」で「github.com」という名前のものが表示されるので、クリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1813727/4e330ce3-e991-c298-d2ee-24b7e52bb3ca.png)

すると、以下の画像のような画面が表示されると思います(右側は個人情報のため、左側のみお見せします)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1813727/01d40648-b18e-c304-6ba1-9f5118085612.png)

ここで、一番下の「パスワードを表示」にチェックを入れてください。既存のパスワードを入力したら、パスワードを削除し、先ほど作成した個人アクセストークンを代わりに入力してください。
これで「変更を保存」をクリックします。


以上で　「個人アクセストークンを使用したGitHubの認証の設定」は完了です。
私は上記の手順により、以前と同じようにプッシュを行うことができるようになりました。

# 参考記事

<a href="https://docs.github.com/ja/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token">個人アクセストークンを使用する(GitHubの公式ドキュメント)</a>
<a href="https://qiita.com/isaatsu0131/items/4a134cc9b296c00e6751">8月13日よりgithubでパスワードでプッシュできない。</a>
<a href="https://qiita.com/shiro01/items/e886aa1e4beb404f9038">GitHubがパスワード認証を廃止するらしいので</a>

こちら、参考にさせていただいた記事です。ありがとうございました。
SaaSとは

Saas(サース）「Software as a Service」
クラウドサーバにあるソフトウェアをユーザーが利用
ex:Gmail, Twitter, Dropbox

PaaS(パース)「Platform as a service」
サービスとしてのプラットフォーム
アプリケーションの実行に必要なプラットフォームであるネットワークやサーバをインターネットを使って利用
ex:AWS, Microsoft Azure

IaaS(イアース)「Infrastructure as a service」
サービスとしてのインフラ
ex:Google Compute Engine, Amazon EC2
Couchbase Server機能解説：認可（ロールベースのアクセスコントロール）

## ロール

Couchbase Serverのロールは、権限のセットと関連付けられています。権限は、読み取り、書き込み、実行、管理、などのCouchbase Serverに対する操作を行うために必要です。また、権限は操作対象となるリソースに関連します。

ロールは、ユーザー（または、エンタープライズエディションでは、グループ）に対して割り当てます。

## 認証とロール
ユーザーが、Couchbase Server (のリソース)にアクセスする際、ユーザーは認証される必要があります。それによって提示されるユーザー資格情報に関連付けられたロールと特権は、Couchbase　Serverによってチェックされます。関連付けられたロールに、試行されているアクセスの種類をサポートする特権が含まれている場合、アクセスが許可され、それ以外の場合は拒否されます。

## ロールの種類

ロールには次の種類があります。

画面イメージは、WEB管理コンソール画面のものです（エンタープライズエディションのもの）。ユーザー追加を行う際のダイアログから抜粋しています（グループ機能を持つ、エンタープライズエディションではグループ追加ダイアログでも同じ、ツリーが表示されます）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/e3e731c9-a991-3c61-4e23-fbfa8a63d308.png)


#### Administrativeロール

クラスター全体の権限に関係します。これらのロールの一部は管理者向けです。クラスター構成を管理する可能性のあるユーザー。または統計を読む。またはセキュリティを実施します。その他は、特定のクラスター全体のリソースへのアクセスを必要とするユーザーおよびユーザー定義アプリケーション用です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/54118c7e-5ac3-9afb-9e35-08508034a341.png)

#### Bucketロール

バケット管理、コレクション管理、およびアプリケーションアクセスに関連付けられています。このカテゴリのロールは、クラスターの（1つ、複数、またはすべての）バケットに対して適用できます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/42fce4a1-67b7-4c15-bcdd-4eaa6af4dc6f.png)

#### Dataロール

Dataサービスに関連付けられています。下記画面イメージのように、バケット、スコープ、コレクションに対して、データの読み取り、書き込み、監視、などの権限を設定可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/c30c3bbd-cc50-3862-7fce-1f6ec9ff1ed5.png)

画面イメージの「Data Reader」の例のように、バケット、スコープ、コレクションのそれぞれで、「*」(アスタリスク)を用いて、全てのバケット/スコープ/コレクションに対して権限を指定することができます。


#### その他

それぞれのサービスや機能に関連付けられたロール（ここでは、詳細については触れません）。

#### Mobileロール

Couchbase Sync　Gatewayの管理に関するロール
　




## コミュニティエディションのロール


ここでは、Couchbase Server、コミュニティエディションでサポートされているロールを紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/001b4267-9d1e-67b9-c059-2df9bc8fe1b7.png)

### Administrativeロール

#### Full Admin
Full Adminロールは、セキュリティを含め、すべてのCouchbase-Server機能やリソースへのフルアクセスを許可します。


#### Read-only Admin
Read-only Adminロールは、Couchbase　Webコンソールへのアクセスが許可されます。

### Bucketロール

#### Application Access
バケットレベルで全ての権限を許可します。


### ロールの一般的な使用方法
Couchbase Serverのユーザーは、主に管理者、または、アプリケーション、そして開発者に分類できます。
それぞれのカテゴリは、以下のようにロールの異なるサブセットによってサポートされています。

#### 管理者
Couchbase Web Consoleにログインして、管理タスクを実行します。基本的に、データの読み取りまたは書き込みを行う必要はありません。

#### アプリケーション
アプリケーションは、データの書き込み、及び（または）、読み取りを行います。ただし、Couchbase Webコンソールにログインしたり、クラスター設定を変更する必要はありません。

#### 開発者
開発者は、自分の担当するアプリケーションに関係するデータを参照する必要があり、多くの場合データの書き込み権限も必要になります。
また、WEBコンソールにログインし、クラスターの情報を参照したり、データを確認・操作することも必要とされるでしょう。
たとえば、Read-Only Adminロールを付与し、WEBコンソールとクラスターの統計情報などの参照を可能にし、データ読み取りおよびデータ書き込みロールを用いて、特定のバケットのデータへのアクセスを許可することが考えられます。


### ロールとバケットとの関係

Couchbase Serverのバケットに格納されるデータは、特定のスコープの特定のコレクションに含まれています。ロールによって伝達される権限（アクセス許可）は、次のいずれかの方法で付与されます。

- バケット： 指定されたバケット内のすべてのデータに適用されます。

- バケットとスコープ：　指定されたバケットの中に、指定したスコープにのみ適用されます。

- バケット、スコープ、およびコレクション： 指定されたバケットの中の、指定されたスコープの、指定されたコレクション内のデータに適用されます。

#### 関連情報

[Couchbase公式ドキュメント Roles](https://docs.couchbase.com/server/current/learn/security/roles.html)

[Couchbase公式ドキュメント Role-Based Access Control (RBAC)
](https://docs.couchbase.com/server/current/rest-api/rbac.html)
LPIC Level1 合格体験記

`LPIC-1`にコスパよく合格するための学習フローを共有します．

全体の流れとしては，**まず最初の一週間に101, 102の共通の学習を行い，その後の一週間ずつを101, 102のそれぞれの試験の学習に充てました．**

# 所要期間

101, 102共通の学習：1週間

101の学習：1週間

102の学習：1週間

私はLinuxの基礎的な内容の全体像を把握したいという思いとそれに適う時間的余裕があったため，最初の1週間で101, 102共通の学習を行いました．

合格までのスピード感を重視したいという方にとっては，このフローは不要と思います．



# 使用教材

- [ping-t](https://ping-t.com/)
- [スピードマスター問題集](https://www.shoeisha.co.jp/book/detail/9784798160856)
- [Linux標準教科書](https://linuc.org/textbooks/linux/)

## ping-t

メイン教材です．

ping-tの無料枠で101試験用の問題集が利用できますので，そちらを利用しました

まず，自由演習モードにて，各分野について`未出題`＋`ミス`を選択し，ひたすら問題を解きます．わからない箇所は直下にある`正解タブ`を読み込み，知識をインプットしていきましょう．

Linuxの知識がまっさらな状態ですとなにがなんだかわからないと感じるかもしれません．そのような人にとってはこのフェーズでかなり骨が折れるかもしれませんが，これを乗り越えるとだいぶ楽になります．

慣れてきたら出題範囲を`全分野`に指定して取り組んでみましょう．

さらに，`未出題`＋`ミス`が数順問程度（私の場合は20問程度）になったら，出題範囲の選択範囲に`ヒット`（お好みで`コンボ`）を追加して取り組んでみるのがよいでしょう．

コンボが`1/3`-`1/2`程度になったら模擬試験に挑戦してみましょう．9割以上を連続で取得できるようになれば，合格への確度はかなり高いと感じます．

私のping-tのスコアはこんな感じでした．このくらいの演習量でも，本番の試験に十分対応することができました．

![スクリーンショット 2021-08-01 14.12.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576571/92e6aa2a-c7cd-c41a-15ea-ac8b833f8994.png)

※ 102試験についてはスクリーンショット取り損ねてしまいましたが，30レベル程度までやりました．


## スピードマスター問題集

アウトプット用のサブ教材として用いました．

ping-tの模擬試験に移る段階で，本書を補助的に用いました．

マニアックな問題や難解な解説箇所などがいくつか散見されましたが，補助教材としての位置づけとしてはむしろ長所として捉えることができました．

本番の試験を受検したときにたいへん役に立った問題も多く収録されており，私としては満足な内容でした．

## Linux標準教科書

インプット用のサブ教材として用いました．

私はいわゆるあずき本と称される著書を購入しませんでしたので，教科書的な位置づけとして適宜こちらを用いました．

とはいえ，使用機会としてはほとんどありませんでしたが，ping-tでインプットすることに違和感を覚える方（ping-tはあくまでもアウトプット用として用いたい方）や，お金をかけずLinuxの教科書的な教材がほしいという方に，大変おすすめです．

https://linuc.org/textbooks/linux/

## コマ問

ほとんど用いませんでした．
しかし，本番の試験では十分対応できました．


# 101試験

`スコア`：660

`結果`：pass

# 102試験

`スコア`：750

`結果`：pass

以上となります．
演算子

算術演算子

```
+　加算
－　減算
※　乗算
/　除算
Mod 剰余
＾　べき乗　
```

連結演算子

```
& 文字列を連結
+ 文字列を連結
```

代入演算子

```
= 右辺の値をを左辺の変数に代入
```

複合代入演算子

```
+= 右辺の値を左辺の変数に加算
-= 右辺の値を左辺の変数から減算
*= 右辺の値を左辺の変数に乗算
/= 右辺の値で左辺の変数を乗算
```
比較演算子

```
= 等しい
<> 等しくない
> より大きい
< より小さい
>= 以上
<= 以下
Like 文字列パターン比較
```

理論演算子

```
Not　論理否定
And 論理積（両方とも条件に満たしていれば、True）
Or 論理和（どちらか一方、条件に満たしていれば、True）
```
【GCP】GAEのIPアドレスについて

https://h-memo.com/google-app-engine%e3%81%afip%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9%e3%81%8c%e5%9b%ba%e5%ae%9a%e3%81%95%e3%82%8c%e3%81%aa%e3%81%84/
こちらの記事でも言われていますが、GAEのIPアドレスはレンジ内で変更することがあります。

FWでレンジではなく、IPアドレス単体で許可していて、変更になったら当然エラーになります。
こういうことはシステムではよくありますし、レンジではなく、ホスト名などで許可してほしいとかもある。
当然、変更の都度連絡なんてしてくれない。
公式ドキュメントにも書いてあるのことなので、それを考慮したシステム構成を組んだほうがいい。
子要素や孫要素のボタンだけにClickイベントをつけたかった

### 特定のブロックの子要素や孫要素のボタンだけにClickイベントをつけたかった

HTML

```html
<div id="_myID">
 <input class="btn btn-primary mb-1" type="button" value="渡す">
</div>
```

jQuery

```js
$('#_myID').find('.btn').click(function() {
    console.log('クリックされました！');
});
```

実際には孫要素で使っています。
AtCoder参加記録 No.0

##挨拶
始めましてこんどうです。
プログラミングもQiitaも初心者ですが自分用に記録をつけようと思います。
AtCoder参加記録を付けるうえでもし参考にする人がいたとき用に自分の経歴について書いておこうと思います。

##バックグラウンド
国立大学工学部化学系大学3年生
プログラミングは大学2年の時に趣味で始める
大学2年の後期に[東京大学の公開講座GCI 2020Winter修了](https://gci.t.u-tokyo.ac.jp/gci-2020-winter/)
大学3年生の4月にITパスポート取得
TOEIC　560点取得　（2021年7月）

##これまでの学習
プログラミングを始めようと思ったきっかけは、コロナで時間が余ったこと、プログラミングができたらかっこいいな、知識があって損はないよね!というすごく漠然とした理由で学習し始めました。
私は基本的に独学でプログラミングを学習しました。
すらPyや独学プログラマーで言語の基礎を学習したのち、データ分析に興味をもち東京大学で機械学習の講座をしているとのことなので参加しました。
また、[サポーターズ](https://talent.supporterz.jp/)　のイベントに参加し、そこで競プロに出会いました。
競プロに興味を持ち参加してみたところ面白くやってみたいと思いました。
ただ、土曜日の夜はバイトが入っていることが多いため、あまり参加できていないのが現状です…
コンテストに参加できていないためモチベーション維持のために参加記録を付けて世間に発信することでモチベーションにしようとしているところです。


###使用した書籍
####プログラミング学習

すらすらわかるPython　https://shoeisha.co.jp/book/detail/9784798151090
独学プログラマー　https://nikkeibp.co.jp/atclpubmkt/book/18/C92270/
Pythonエンジニアファーストブック　https://gihyo.jp/book/2017/978-4-7741-9222-2
Python Django 3超入門 https://www.shuwasystem.co.jp/book/9784798061924.html
(2021年8月現在）


####IT系の知識

人工知能は人間を超えるか https://kadokawa.co.jp/product/321410000316/
キタミ式イラストIT塾ITパスポート　https://gihyo.jp/book/2020/978-4-297-11779-5
（2021年8月現在）

###競プロを始めるにあたり参考にしたもの

[レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【初級編：競プロを始めよう】](https://qiita.com/e869120/items/f1c6f98364d1443148b3)　By[E869120](https://qiita.com/e869120)さん

##終わりに

ここまで読んでくださりありがとうございます。
これからも頑張っていこうと思います。
時間がありましたら、今後も見ていただけると幸いです。
初心者なのであまり有益な情報はありませんが、温かい目で見守ってください。
ClojureScript + React / React Nativeの雛形まとめ

ポイントとして、shadow-cljsを使うか、figwheelを使うかで分かれる。またReact Nativeの場合はExpoを使うか使わないかでも分かれる。

## React

### shadow-cljs

https://github.com/filipesilva/create-cljs-app

丁寧な日本語の解説記事があってわかりやすい。 

https://qiita.com/lagenorhynque/items/7c049f3c3b967ee777ac

#### ◎ 使い方

```bash
$ npx create-cljs-app hello_react
$ cd hello_react
$ npm install
$ npx shadow-cljs watch app
```

### figwheel

https://github.com/bhauman/figwheel-template

#### ◎ 使い方

```bash
$ lein new figwheel hello_react -- --reagent
$ cd hello_react
$ npm install
$ lein figwheel
```

## React Native

### shadow-cljs + Expo

https://github.com/PEZ/rn-rf-shadow

雛形生成コマンドではなく、サンプルプロジェクト。READMEがとてもわかりやすい。

#### ◎ 使い方

```bash
$ git clone https://github.com/PEZ/rn-rf-shadow
$ cd rn-rf-shadow
$ npm install
$ npx shadow-cljs watch app
# 最初のコンパイルが終わるのを待ち、別のタブを開いて
$ npm start
```

### shadow-cljs + react-native

https://github.com/tomthought/react-native-init-shadow

スター数が少ないのが少し気になる。

#### ◎ 使い方

```bash
$ npx react-native-init-shadow MyAwesomeProject
$ cd MyAwesomeProject
$ npm install
$ npx pod-install
$ npx shadow-cljs watch dev
$ npx react-native run-ios # or: npx react-native run-android  # or: npx react-native run-web

```

### figwheel

https://github.com/bhauman/react-native-figwheel-bridge

#### ◎ 使い方

react-nativeとExpoが初期化時に選べる。

```bash
# react-nativeの場合
$ npx react-native init MyAwesomeProject
$ cd MyAwesomeProject
$ npx react-native run-ios # or: npx react-native run-android  # or: npx react-native run-web

# expoの場合
$ npx expo init MyAwesomeProject
$ cd MyAwesomeProject
$ yarn ios # or: yarn android # or: yarn web
```
Jasper Report で帳票を縦横4分割で作成する。

# 初めに
Jasper Report で帳票をA4用紙4分割で作成する方法をまとめます。
印刷順序はZ順序で印刷されます。

# 前提条件・環境
・TIBCO Jaspersoft Studio-6.17.0

# 手順
1. PageFormat から Colums を 2 に、Print Order を Horizonal に設定します。
2. BandDetail の高さを PageFormat の高さの 1/2 で設定します。

## 1. PageFormat から Colums を 2 に、Print Order を Horizonal に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1864623/e2c8ccfb-8535-3a15-1cbc-5a77e3b4d3dd.png)

## 2. BandDetail の高さを PageFormat の高さの 1/2 で設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1864623/6fcbd22b-642a-d870-6bc5-8befedd596af.png)

## 結果の確認
上記設定を行って帳票印刷を行えばZ順序で印刷されます。
印刷結果は以下の通りとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1864623/9b89ba74-5bdd-4ab4-1304-68f30527bea3.png)
オブジェクト指向プログラミングPart3 継承、派生クラスの書き方 MQL5

[← オブジェクト指向プログラミングPart1](https://qiita.com/aisaki180507/items/d343b1ad46c8d3807ec2)

[← オブジェクト指向プログラミングPart2　(前回)](https://qiita.com/aisaki180507/items/2bdc3898391ebcc7acbd)

##継承、派生クラスとは
　クラスは変数や変数を一つにまとめたものでした。用途に応じてクラスを作成しておくと、関数をバラバラに管理するよりもスッキリするという利点があるわけですが、さらに管理しやすくするために、__基底クラス__と__派生クラス__というものを作成できます。例えばEA作成時に使う用のクラスがあるとします。その中でも注文するときに使う関数、ロジックに使う関数、ポジションサイジングに使う関数、などEA作成用のクラスの中でもさらに派生のクラスを作成し、管理することができます。
　派生クラスは基底クラスから変数やメソッドを引き継ぎます__(継承)__。派生クラスのオブジェクト生成をしてしまえば、その基底クラスのメソッドを使うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1882169/0f500d8e-b153-1311-1ce2-c021e57ec811.png)

###派生クラスの書き方
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1882169/b2a09093-9060-1fbf-9dad-aa3e4ac4fc3b.png)
　派生クラスを書くときは通常のクラスの書き方に加えて、基底クラスも記述する必要があります。

　実際にコードを書いてみると↓

```.cpp
// 基底クラス
class CRen{
private: 
   int   AI;

public: 
   int get_AI() { return AI; };
   void set_AI(int ai) { AI = ai; };
   
};

// 派生クラス
class CPractice :public CRen{
private:
   int   SA;

public:
   int get_SA() { return SA; };
   void set_SA(int sa) { SA = sa*2; };
};

int OnInit()
  {
   CPractice ren; // オブジェクト生成
   
   // 派生クラスのメソッドを使う
   ren.set_SA( 1234 );
   Print("派生クラスのメソッド ", ren.get_SA() );
   
   // 基底クラスのメソッドを使う
   ren.set_AI( 1234 );
   Print("基底クラスのメソッド ", ren.get_AI() );
   
   
   return(INIT_SUCCEEDED);
  }
```
このプログラムを実行すると↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1882169/46228e62-1bc2-7b5c-500a-80d5b06bc1b3.png)
　OnInit関数内では派生クラスのオブジェクト生成しかしていませんが基底クラスのメソッドを問題なく使用することができました。

　実際にはひとつの基底クラスに対して複数の派生クラスを用意しておき、作りたいプログラムに応じて派生クラスを選択するという使い方が便利だと思います。

***
続きを読むときはこちら
[オブジェクト指向プログラミングPart4 ポリモーフィズム →](https://qiita.com/aisaki180507/items/efb14c10abf9ee6c3fe3)
kintoneの標準機能で対数を求める #3

[前回](https://qiita.com/juri_don/private/fe26dd14a89e79f650da)は
kintoneの標準機能で $ lnX $ の真数$ X $の範囲をできるだけ大きくできるようにXのn乗根を求めました。
今回は[前回](https://qiita.com/juri_don/private/fe26dd14a89e79f650da)、[前々回](https://qiita.com/juri_don/private/0531ff025b57cca95cb8)のアプリを利用して $ X>2 $ の自然対数を求めます。

# 真数Xを大きくする方針

$ log_eX $において$ X = x^n $ とおくと、
$ log_eX = log_ex^n = nlog_ex $ となります。

$ x = X^\frac{1}{n} $ なので、真数$ X $を$ \frac{1}{n} $ 乗した数 $ x (x > 0) $ を真数とする $ log_ex$ を求めて $ n $ 倍すれば、
進数 $ X>2 $ の自然対数を求めることができるはず。

というわけで、

1.　Xのn乗根（$ X $ の $ \frac{1}{n} $ 乗)を求めるアプリ（[前回](https://qiita.com/juri_don/private/fe26dd14a89e79f650da)）
2.　真数 $ X>2 $ の自然対数 $ lnX $  を求めるアプリ（✨今回✨）
3.　$ log_aX $ を求めるアプリ（次回）

の順に作っていきます。
今回は**真数 $ X>2 $ の自然対数 $ lnX $  を求めるアプリ**を作成します。


# アプリの準備

今回のアプリはルックアップが多くてちょっと複雑かも？

アプリ名は**lnX(自然対数)を求めるアプリ**としておきましょう。
※あとからルックアップで使用します。

| フィールド種類 | フィールド名 | フィールドコード | 設定・数式など |
|:-:|:-:|:-:|:-:|
| ルックアップ  |  lnXのXを手入力して！ | X_手  |  前回のアプリ「Xのn乗根(ニュートン法)」から引っ張ってくる（図2参照） |
| 計算  |lnX   |lnX   |  ln_X_n * n |
| 数値  | Xのn乗根  | x_n  | ルックアップ「ほかのフィールドのコピー」で設定する  |
| 数値  |  n | n  |  ルックアップ「ほかのフィールドのコピー」で設定する  |
|  ルックアップ |Xのn乗根を手入力して！   | Xn乗根  |  前々回のアプリ「lnX(0<X≦2)を求めるアプリ」から引っ張ってくる（図3参照） |
| 数値  |  ln(Xのn乗根) |  ln_X_n |  ルックアップ「ほかのフィールドのコピー」で設定する   |


図1：アプリ全体図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/3a4a3113-c552-ad1e-e3bc-30580b3b361b.png)


図2:ルックアップの設定（lnXのXを手入力して！のルックアップフィールド）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/6e98a6be-e1bb-44bc-2751-ea758681969d.png)

図3:ルックアップの設定（Xのn乗根を手入力して！ のルックアップフィールド）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/8cff0d62-5846-da69-8ba6-c84419f81bca.png)

# 使い方
ちょっとわかりにくいかもですが
$ lnX $ を求める手順としては

1. [前回のアプリ](https://qiita.com/juri_don/private/fe26dd14a89e79f650da)で$ lnX $のXのn乗根（デフォルト10乗根）を求める
1. [前々回のアプリ](https://qiita.com/juri_don/private/0531ff025b57cca95cb8)で$ lnX^\frac{1}{n} $ を求める
1. $ lnX = n \times lnX^\frac{1}{n} $　なので 2. で求めた値に10をかけた値が$ lnX $ になる

という流れになっています。

<iframe width="480" height="360" src="https://www.youtube.com/embed/rsXQz9AAWco" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
Oracle Database 21cの簡易セットアップ

Oracle Database 21cがリリースされました。

[Oracle Database 21cのご紹介 | Oracle オラクルエンジニア通信 - 技術資料、マニュアル、セミナー Blog](https://blogs.oracle.com/oracle4engineer/column_db21c)

手元のPC上のVirtualBoxでサクッとセットアップする手順を自動化したので公開します。

[shakiyam/vagrant-oracle-database-21c: Vagrant + Oracle Linux 7 + Oracle Database 21c (21.3) シングル環境の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle-database-21c)

```console
[oracle@localhost ~]$ sqlplus system/oracle@localhost/pdb1

SQL*Plus: Release 21.0.0.0.0 - Production on Mon Aug 16 05:40:55 2021
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Last Successful login time: Mon Aug 16 2021 04:55:00 +00:00

Connected to:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

SQL>
```

それ以外のバージョンの手順も下記にて公開しています。

* [Oracle Database 19cの簡易セットアップ - Qiita](https://qiita.com/shakiyam/items/cd842a3f417c4285414a)
    * [shakiyam/vagrant-oracle-database-19c: Vagrant + Oracle Linux 7 + Oracle Database 19c (19.3) シングル環境の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle-database-19c)
* [Oracle Database 18c XEの簡易セットアップ - Qiita](https://qiita.com/shakiyam/items/9bd74c08f2208346f19e)
    * [shakiyam/vagrant-oracle-database-xe-18c: Vagrant + Oracle Linux 7 + Oracle Database 18c XE の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle-database-xe-18c)
* [Oracle Database 18cの簡易セットアップ - Qiita](https://qiita.com/shakiyam/items/575148a486324b53b682)
    * [shakiyam/vagrant-oracle18: Vagrant + Oracle Linux 7 + Oracle Database 18c (18.3.0) シングル環境の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle18)
* [Oracle Database 11.2, 12.1, 12.2の簡易セットアップ - Qiita](https://qiita.com/shakiyam/items/3d2b94c118ab88fa4c79)
    * [shakiyam/vagrant-oracle12.2: Vagrant + Oracle Linux 7 + Oracle Database 12c Release 2 (12.2.0.1) シングル環境の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle12.2)
    * [shakiyam/vagrant-oracle12.1: Vagrant + Oracle Linux 7 + Oracle Database 12c Release 1 (12.1.0.2) Enterprise Editionシングル環境の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle12.1)
    * [shakiyam/vagrant-oracle11.2: Vagrant + Oracle Linux 7.4 + Oracle Database 11g Release 2 (11.2.0.1) Enterprise Editionシングル環境の簡易セットアップ](https://github.com/shakiyam/vagrant-oracle11.2)
pythonで良く使う書き方

## リストを分割

リスト l を，長さ n で分割し，二重リストに格納する。最後の要素が n 未満の場合はそのままの長さとする。

```python
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
n = 3
[l[idx:idx + n] for idx in range(0,len(l), n)]
```
温度アラートとかをメールで送るけど多すぎても困る時のメモ

#概要
標準入力から受け取った文字列を、初回だけその場で任意のメールアドレスで送信して、その後はファイルに保存し任意のタイミングにまとめてメールで送信する。

:::note info
exim4を設定済み前提
引数：command::address,interval(s)
:::
```bash:mayday.sh
#!/bin/bash
current=$(date "+%s") #現在時刻
if [ -f ./pan ]
then
 timer=$(($(head -n 1 ./pan)+$2)) #先頭のタイムスタンプ取得
 if [ $timer -lt $current ]
 then
  dat=`cat pan`
  echo "$current" > pan #タイムスタンプで上書きする
  echo "$dat" | mail $1 #$datは改行を維持するためダブルクオーテーションで囲う
 else
  cat - >> pan #標準入力をファイルに追記
 fi
else
 cat - | mail $1
 echo "$current" > pan #新しいファイルpanの先頭に現在のタイムスタンプを書き込む
fi
```
#使用例
[CPU温度警告をGmailで送るやつ](https://qiita.com/FizmimiFiz/items/349da3d7c0d086d6296f)なんかのmailコマンドをこれに変える

```bash
$ ./mayday "example@gmail.com" 120
```
うまくいくとこうなる
![ss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548777/aef5bc16-c53a-8582-7d0f-356d8ed16efb.png)

#補足
警告をチェックしたらpanファイルを消して下さい。
mayday-resetとか作っとくと良いです。

おわり。
Raspberry Pi でカメラ利用 初期設定

# Raspberry Pi でカメラ利用
### Spec

| アイテム | 詳細 |
|:-:|:-:|
| Raspberry Pi  | Raspberry Pi 3 Model B+  |
| カメラモジュール  |  OV5647センサー 500万画素 |

### カメラ接続確認
カメラ背面にテープの青い面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637498/d1d88707-be12-0495-44f7-df960117c213.png)
LANケーブル側にテープの青い面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637498/6dd49357-c83d-86e5-395d-1d0b528a8c13.png)

# カメラ設定
Start ＞ 「設定」＞「Raspberry Piの設定」 ＞ インターフェース ＞ カメラ：有効

### コマンドで接続確認

```
vcgencmd get_camera
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637498/377ae0dc-a9e5-889c-ef34-d2fd657de691.png)
***「supported=1 detected=1」*** だと正常にカメラ認識。
違う場合は、接続確認及び

```
sudo apt-get update
sudo apt-get upgrade
```

でドライバなどアップデート。

# 画像撮影

```
sudo raspistill -o image.jpg
```
「/home/pi」に imege.jpg が出来ているので確認。

## カメラコマンド

| コマンド |  | 詳細 |
|:-:|:-|:-|
| -?  | --help  | ヘルプの表示  |
| -w  | --width  | 画像の幅の指定 (サイズ)  |
| -h  | --height  | 画像の高さの指定 (サイズ)  |
| -q  | --quality  | jpeg 品質を設定 （0 - 100)  |
| -r  | --raw  | jpeg メタデータに Bayer 配列データを追加する  |
| -o  | --output  | 出力ファイル名 (標準出力の場合は '-o -'). 指定しなければ何も保存されない  |
| -v  | --verbose  | 詳細情報の表示  |
| -t  | --timeout  | 撮影までの時間をミリ秒単位で指定。指定しない場合は5秒  |
| -th  | --thumb  | サムネイルパラメータを設定 (x:y:quality)  |
| -d  | --demo  | デモモードを実行、撮影しない  |
| -e  | --encoding  | 出力ファイルのエンコード方法の指定 (jpg, bmp, gif, png)  |
| -x  | --exif  | EXIFタグの指定 ('key=value'の形式)  |
| -tl  | --timelapse  | こま撮りモード(ミリ秒で指定した間隔で連続撮影)  |
| -fp  | --fullpreview  | 撮影する写真とモニターに映るプレビュー画面を同じサイズ(最大解像度 2592x1944)にする(画面更新が最大15fpsまで遅くなる)  |

[(参考：Jun's Homepageさん)](https://www.mztn.org/rpi/rpi23.html)

# (備考) VNC Viewer でのファイル転送
## Raspberry Pi → PC
#### 1. 右上の VNC アイコンを右クリック ＞ 「File Transfer」
#### 2. 「Fetch files to」でフォルダ選択 ＞ 「Send files」でファイル選択。
#### 3. ファイル送信。デフォルトだとデスクトップに行く模様。

## PC → Raspberry Pi
#### 1. VNCの画面の上側のツールボックスで「File Transfersアイコン」選択。
#### 2. 「Fetch files to」で「Downloads」(ファイル読み込み先)を選択し、「Send files」。
#### 3. 転送するファイルを選択。
LWC Specialist Superbadge


# Step5

**We can’t find the correct settings for the method handleSearchOptionChange() in the component boatSearchForm JavaScript file.**

[Lightning Web Components Specialist Step 5 error](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Fxrt3)


# LWC Specialist Superbadge Step 8 Error

**We can’t find the correct settings for the method handleSave() in the component boatSearchResults JavaScript file. Make sure the method was created according to the requirements, using the correct event, refresh method, correct promises, toast events for success and failure using the constants, and complete error handling.**

[LWC Specialist Superbadge Step 8 Error](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000A7uXySAJ)
htmlタグ、<br>を表示されないようにしたい【Node.js】【 Express】【 ejs】

#htmlタグが表示されてしまう
`Node.js` `Express` `ejs`を使って、Webアプリを作成していた際、`request.render()`で飛ばした文字列が、そのまま表示されてしまった。
htmlと認識されるようにしたい。

###ブラウザにこんな感じでhtmlタグが表示されてしまっている。

```
  <h1>そのまま表示される<br>のを直したい</h1>
  <h2>そのまま表示されるよぉ〜</h2>
```

###現在のコード( cssとかは割愛）

```app.js
const express = require('express');
const app = express();

app.use(express.static('public'));

app.get('/', (req, res) => {
    const result = [{comment:"<h1>そのまま表示される</h1>"},{comment:"<h2>そのまま表示される</h2>"}];
    res.render('index.ejs',{tests:result});
});

```

```index.ejs
<% tests.forEach(test => { %>
    <div id="comment"><%= test.comment %> </div>
<% }); %>
```

#いろいろ調べた結果
1日かけて調べたけど、なかなか解決に至る記事が見つからず…
結局、「brタグ　html 表示　変換」なんてワードチョイスが悪かったみたいで、「node.js ejs htmlタグ」で調べたらすぐ解決した。

`request.send()`使用するとか、`{Content-Type:text/html}`を指定するとか、いろいろ見つけたけど、原因はめっちゃシンプルに解決できました。

#解決方法

ejsでの変数の出力を`<%= %>`→`<%- %>`にするだけでした。
なので、以下に変更

```index.ejs
<% tests.forEach(test => { %>
    //<div id="comment"><%= test.comment %> </div>
             ↓↓↓↓↓↓↓↓
    <div id="comment"><%- test.comment %> </div>
<% }); %>
```

ちゃんと表示されるようになりました！


#<%= %> と <%- %>
どちらもHTML内で変数として出力してくれるが、以下の違いがあるよう。

`<%= %>`　：文字として出力
`<%- %>`　：HTMLの要素として出力

参考：[EJSの基本的な書き方](https://qiita.com/miwashutaro0611/items/36910f2d784ff70a527d)
Git Githubお役立ちコマンド一覧

GitやGitHubでのコマンドの書き方をよく忘れてしまうので、よく使うものだけ本記事にまとめておきます。もし他の方の参考にもなれば幸いです。

いずれもターミナルで実行してください。また、[]で示しているものは自身のURLやブランチ名に変更してください(その際、[]は不要です)

ワークツリーやインデックスについては、下記のリンク先などを参照されるとよいのではないかと思います

[サル先生のGit入門](https://backlog.com/ja/git-tutorial/)

#gitコード集

- git初期設定(ローカルリポジトリの作成)

```
$git init
```

- ワークツリーからインデックスに登録(-Aで変更ファイルのみ)

```
$git add -A
```

- インデックスからローカルリポジトリにコミット

```
$git commit -m “[コミットメッセージ]”
```

- リモートリポジトリの登録

```
$git remote add origin [リポジトリのURL]
```

- ブランチ名のmasterをmainに変更

```
$git branch -M main
```


- リモートリポジトリにプッシュする(-uをつけると次回以降 `git push`だけでOK)

```
$git push -u origin [ブランチ名]
```

- 今のブランチを確認

```
$git branch
```


- ブランチの作成と移動

```
$git checkout -b [ブランチ名]
```


- ブランチの移動

```
$git checkout [ブランチ名] 
```


- リモートリポジトリからプル(下記`fetch`と`merge`を同時に行う)

```
$git pull origin [ブランチ名]
```

- リモートリポジトリの情報をローカルリポジトリにコピー

```
$git fetch origin
```

- 今いるブランチへ反映

```
$git merge origin/[ブランチ名]
```

- 現在のワークツリーやインデックスの状況を確認

```
$git status
```

- ワークツリーとインデックスの差分を確認

```
$git diff
```

- コミットのログを確認

```
$git log
```
ServiceNowでgithubいじってたら'The user only has read access to the repo. Make sure the user has both read and write access.'          

**この解決策が当てはまる前提として**
・これまで正常に使えてたのに...。
・2021/08/13日以降のエラー
・ServiceNowのgithub認証でパスワードを使用していた<br/>
**原因**
Githubが2021/08/13をもって外部からのパスワード認証を廃止したためです。<br/>

**手順**
***1, GitHubでアクセストークンを生成してください。***
Your github page(Your icon) > settings > Developer settings >Personal access tokens > 'Generate new token'

※アクセストークンは生成したとき一度しか表示されませんので忘れずにメモを！(もし忘れてもまた作ることはできます。)

***2, ServiceNowのGithubのCredentialを設定し直す。***
ServiceNow > Service Management > Connections & Credentials > Credentials

***3, あなたが使ってたGithub credentialをクリックして、パスワード欄にアクセストークンを記入して更新してください。***

***4, 以上。***
Open Source PyMOLをMacにインストールする際のfreetypeのトラブル．

## この記事はなに？
PyMOLをソースコードからインストールしましたので，手間のかかったトラブルとその解決策を記載します．インストールの流れは[公式のGitHubのページ](https://github.com/schrodinger/pymol-open-source)のInstallationに記載があるのでここでは記載しません．ここで扱うトラブルは，インストール時に<font color=red>freetypeをうまく読み込めない</font>ことです．この記事は，PyMOLインストール時に発生した以下のエラーを解決した際の作業ログです．

```bash
$ python3 setup.py install --prefix=~
(略)
layer1/TypeFace.cpp:25:10: fatal error: 'ft2build.h' file not found
#include <ft2build.h>
         ^~~~~~~~~~~~
1 error generated.
```

私がPyMOLをインストールした環境は以下の通りです．
端末: MacBook Air (M1, 2020)
OS: macOS Big Sur Version 11.5
Bash:  GNU bash, version 3.2.57(1)-release (arm64-apple-darwin20)
python3: Python 3.9.6

## 解決策
まず，freetypeがインストールされていることを確認します．

```bash
$ brew list|grep freetype
freetype
```

過去の私はfreetypeを既にインストールしたようです．入っていなければ`brew install freetype`でインストールする予定でした．

つぎに，freetypeに関連するディレクトリから`ft2build.h`を見つけます．私の環境では以下の場所に見つけました．

```bash
$ ls /opt/homebrew/Cellar/freetype/2.11.0/include/freetype2/
freetype        ft2build.h
```

この場所にある`ft2build.h`を読み込んでもらうために，`PREFIX_PATH`を設定します．この設定をするのは，[PyMOL wiki](https://pymolwiki.org/index.php/Linux_Install#Libraries_in_non-standard_places)に以下の説明があるためです．
>Libraries in non-standard places
Optional: You may use the colon-delimited $PREFIX_PATH variable to point setup.py to non-standard locations of libraries and headers (those locations should have include and lib directories).

つまり，今回のようにヘッダーファイルを読み込ませたいときは，`PREFIX_PATH`にコロン区切りで設定したら良いということです．この説明に従って，次のように変数`PREFIX_PATH`を設定しました．

```bash
$ export PREFIX_PATH=/opt/homebrew/Cellar/freetype/2.11.0/
```

ここで注意すべきことがあります．`ft2build.h`へのパスを指定するのではなく，必ず<font color=red>includeの親ディレクトリまでを</font>指定します．(私はこのことに気づくまで多くの試行錯誤と時間を要しました．)この後再度以下のコマンドを実行することで，インストールすることができました．

```bash
$ python3 setup.py install --prefix=~
```
python alembicを使用して、テーブル内の型を変更する


alembicの`$ alembic revision --autogenerate`ではデータ型の変更を認識してくれないため、revisionファイルに型を明示的に宣言する必要がある。
下の例では、column_nameカラムの型を String(255)からText()型へ変更する。

```python:alembic_revision_file
def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.alter_column('table_name', 'column_name', 
        existing_type=sa.String(255),
        type_=sa.Text()
    )
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.alter_column('table_name', 'column_name', 
        existing_type=sa.Text(),
        type_=sa.String(255),
    )
    # ### end Alembic commands ###
```

参考文献:https://eshlox.net/2017/08/06/alembic-migration-for-string-length-change
Pythonではじめる機械学習 part3

# 前回の内容
[Pythonではじめる機械学習 part2](https://qiita.com/yuto_suzuki/items/20d4475a82aa38a4466c)

# 2章 アイリスのクラス分類(準備) 概要
ようやく機械学習らしい内容に入っていきます!
今回はアイリスのクラス分類という機械学習界隈では、定番？の問題を通して、機械学習の触りを学習していきます。

#### アイリスのクラス分類とは？
アマチュア園芸家が見つけた、アイリスという品種の花の種類を自動分類したいという問題
花弁の長さと幅・ガクの長さと幅を特徴量として、解析していく。
後ほど述べるが、3種類の花の種類が事前に確定しているので、「教師あり学習」という枠に分類される。

#### Pythonを通して問題を解いていく
この問題は、scikit-learnに付属されているload_iris関数を通してアクセスが可能となっている。

```load_iris.py
from sklearn.datasets import load_iris

iris_dataset = load_iris
```
このように取得したirisデータを使って、新たな花弁の特徴量を与えた際に、自動で予測・分類を行うようなモデルを構築していく。

#### 訓練データとテストデータについて
実際にモデルを構築するにあたって、そのモデルが本当に正しいかを測定することが必要であることは以前述べた。
モデル構築の際に利用したデータをテストデータに使ってしまうと、丸々データを覚えているだけであり、本当に正しいかの評価に利用することはできない。
一般的には、集めたデータセットの75%をモデル構築に利用し、残りの25%をテストデータとして構築には使用せずに取っておく。

#### 訓練データとテストデータをPythonを使って分割する
具体的には、sklearnに含まれるtrain_data_split関数を使って分割が可能である。

``` train_test_split.py
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    iris_data['data'], iris_data['target'], random_state=0
)
```

# 2章 アイリスのクラス分類(準備) 所感
アイリスのクラス分類という基礎問題を通して学習を進めていった。
モデル構築をする前に、訓練データとテストデータと分割しておくことは評価する上で確かに重要なことだと感じた。
(間違えて全部構築に回してしまったらデータを集め直すか、構築をやり直すかのどちらかになりそう。)

次回から、実際に、構築・予測を行っていくので楽しみである。

# 次回記事
[Pythonではじめる機械学習 part4](https://qiita.com/yuto_suzuki/items/97f158451990dca1bb58)
Jestの「 The error below may be caused by using the wrong test environment」の解決方法

## 概要

Reactアプリケーションの開発で、Jestを27系にアップデートしたら以下のエラーが発生したので、対応を書き残します。

```
The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string.
Consider using the "jsdom" test environment.
```

## 解決策

解決策は2通りあります。

ひとつ目。
テストファイルの冒頭に以下を書く。

```js
/**
 * @jest-environment jsdom
 */
```
ふたつ目。
`jest.config.js`で指定する。

```js
module.exports = {
  // ...いろいろ設定
  testEnvironment: 'jsdom',
};

```

全テストファイルに書くのが面倒であれば、こちらにしましょう。

ただ、`jest.config.js`で指定すると、全テストファイルに適用されてしまうので、
DOM APIを使わないテストファイルでは、テストファイル冒頭に`node`を指定するのを忘れずに。

```js
/**
 * @jest-environment node
 */
```

## 詳細

Jest@27からデフォルトの`testEnvironment`が変わり、26までは`jsdom`でしたが、27から`node`になりました。

この変更の背景には、

- nodeアプリ開発でテストを実行する際も、明記しなければ`jsdom`環境で実行されてしまい、パフォーマンスが劣化
- しかも`jsdom`環境で実行されていることに気づけない

という問題があり、それらを救済するためにデフォルトを`node`に変更したようです。

この変更で、DOM APIを使うフロントエンドのテストではエラーが発生するようになりました。
エラーが発生するから気づけるよね！　自分で設定変えてね！　ということらしいです。

## 参考

- [Jest 27: New Defaults for Jest, 2021 edition ⏩ · Jest](https://jestjs.io/ja/blog/2021/05/25/jest-27#features-coming-with-breaking-changes)
- [Jestの設定 · Jest@26](https://jestjs.io/ja/docs/26.x/configuration#testenvironment-string)
- [Jestの設定 · Jest@27](https://jestjs.io/ja/docs/configuration#testenvironment-string)
テキストをうんこにするアプリつくった

# 背景

テキストをうんこにしたいことってよくありますよね
そんなときにサクッと使えるツールが見当たらなかったので自分で作ってみました

# 実物

[うんこ製造機(GitHub Pages)](https://haserror.github.io/uncode/)

これが
![before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275964/9e9ad22d-9034-dd98-3198-e58fcaa5aa49.png)

こうなります
![after.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275964/f90553e4-9b97-6b73-b829-d8174918f02b.png)

# 解説

charCode 取得して4進数に変換して4文字当てはめてるだけ
うんこだけじゃうんこすぎるので4文字なら何でもいけるようにしました

# 他

サロゲートペア使う文字の場合どうしようか考えたけど、
今回は JavaScript の仕様に上手くハマった

``` JavaScript:test.js

console.log("💩".length);	// 2
console.log("💩".charCodeAt(0).toString(16));	// "d83d"
console.log("💩".charCodeAt(1).toString(16));	// "dca9"

```
データベースの障害管理

ロールバック
障害が発生した時に、データベースをトランザクション開始直前の状態まで戻す「トランザクション内の更新すべてを取り消す」

ロールフォワード
障害発生した時に、データベースを障害発生直前まで復旧させる「トランザクション内の更新すべてを反映する」

コミット
一連の処理が問題なく完了できた時、内容を反映させること
laravel レコードの存在判定

# 目的

- laravelにてレコードの存在判定を行う方法をまとめる

# 環境

- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | macOS Big Sur(11.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

- ソフトウェア環境

| 項目 | 情報 | 備考 |
| --- | --- | --- |
| PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
| Laravel バージョン | 7.X | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d6392e08) |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→[Mac HomebrewでMySQLをインストールする](https://qiita.com/miriwo/items/ef6a064bc545fbea29d9) |
| Node.jsバージョン | v12.14.1 | Homwbrewを用いてこちらの方法で導入→[Mac HomebrewでNode.jsをインストールする](https://qiita.com/miriwo/items/73d1546220f1c091a7d5) |

# 方法

1. 下記のように記載することでレコードがヒットした場合「true」、ヒットしなかった場合「false」が返される。

    ```php
    return DB::table('テーブル名')->where('レコード絞り込み情報のカラム名', レコード絞り込み情報の値)->exists();
    ```

# 参考文献

- [https://readouble.com/laravel/6.x/ja/queries.html](https://readouble.com/laravel/6.x/ja/queries.html)
コンピュータの5大装置

【CPU(Central Processing Unit)】
1.制御装置
プログラムの命令を解釈して、コンピュータ全体の動作を制御
2.演算装置
四則演算をはじめとする計算、データの演算処理（ALU:Arithmetic and Logic Unit)

3.記憶装置
主記憶装置
動作するために必要なプログラムやデータを一時的に記憶する装置
補助記憶装置
プログラムやデータを長期的に渡り記憶する装置
ex:ハードディスク、CD-ROM、DVD-ROM

4.入力装置
コンピュータにデータを入力するための装置
ex:キーボード、マウス、スキャナ

5.出力装置
コンピュータのデータを出力するための装置
ex:ディスプレイ、プリンタ
iPhone 書類と同期がモバイル通信を圧迫している

#背景
2021年8月現在でもappleが改善していない状態です。
モバイル通信の使用状況を確認すると、システムサービスの「書類と同期」が何GBという通信を勝手に行っております。

#検索サイトで調査するも…
インターネットで検索すると記事がいくつかあるのですが、以下の方法を試しても改善することはありませんでした。
■試した対処法
・WiFiアシストをオフにする
・ネットワーク設定をリセットする
・iCloudから一度ログアウトしてログインしなおす
・iOSのアップデート

上記に関しては一時的に改善するのかもしれませんが、根本的な対処法ではありませんでした。

#原因
根本的な原因については現在調査中ですが、有力な方法としては
「iCloudの連絡先の同期をオフにする」ことが、一番最善の対処法ではないかと思います。
![20170509_o0103.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52022/f6146e42-8f3c-4384-8662-919c20316bbc.png)
この対処法を実施してからは「書類と同期」のモバイル通信の使用量が増えることはありませんでした。
Django 実践例集(小中型)

Django 2, 3 系での小型〜中型の実践例集です.

|コンテンツ|実践時期|
|:--|:--|
|[[メモ] Django の DurationField を使って有効期間切れ判定をする](https://qiita.com/robozushi10/items/241bb0da0e60a359ddc1)|2020/05|
|[[メモ] Django の POST の ModelViewSet でのオーバライド例.](https://qiita.com/robozushi10/items/1e0a00e32bd2ae6bbd09)|2020/05|
|[[メモ] Django外のPythonプログラムから Django ORM を使用するコード](https://qiita.com/robozushi10/items/0a44ba2a2dba430a25bb)|2020/05|
|[[メモ] Django Admin 管理者作成のワンライナー](https://qiita.com/robozushi10/items/d76a9b2ccbc28db32cd4)|2020/05|
|[[メモ] Django RESTful API の POST で画像データを Upload する](https://qiita.com/robozushi10/items/8bf6eab461848830e9a2)|2020/05|
|[[メモ] Django REST の GET 応答に任意の情報を詰める](https://qiita.com/robozushi10/items/8dba11dc3d388e7694d5)|2021/08|
rsync の -a オプションの意味を整理する



# 経緯

- 取り急ぎ、`rsync` コマンドを使うとき、`-a` オプションを付けて実行することがあるが、
- Windows10 Git Bash 環境において `rsync` を実行するときに、`-a` オプションを使ってよいか心配になった
- `-a` オプションの意味を正確に把握していいないので、整理する

# 環境

## Windows 10
- Git Bash
- rsync  version 3.2.2  protocol version 31

## WSL
- Ubuntu 20.04
- rsync  version 3.1.3  protocol version 31

# rsync `-a` オプションの意味

- -rlptgoD と同じとのこと
- Window 10 Git Bash では、`group`、 `owner` などの扱いは不明
- 今のところ、Windows 10 Git Bash で、`-a` オプションを使っても、問題がなさそうに感じる

```bash
 -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
 -r, --recursive             recurse into directories
 -l, --links                 copy symlinks as symlinks
 -p, --perms                 preserve permissions
 -t, --times                 preserve modification times
 -g, --group                 preserve group
 -o, --owner                 preserve owner (super-user only)
 -D                          same as --devices --specials
     --devices               preserve device files (super-user only)
 -H, --hard-links            preserve hard links
 -A, --acls                  preserve ACLs (implies --perms)
 -X, --xattrs                preserve extended attributes
```

| オプション | 長い形式のオプション   | 意味              |
| ----- | ------------ | --------------- |
| \-a   | \--archive   | -rlptgoD と同じ |
| \-r   | \--recursive | 再帰的に実施          |
| \-l   | \--links     | シンボリックリンクをコピー   |
| \-p   | \--perms     | パーミッション情報を保持         |
| \-t   | \--times     | 時刻情報を保持         |
| \-g   | \--group     | グループ情報を保持       |
| \-o   | \--owner     | オーナー情報を保持       |
| \-D   | \--devices   | デバイスファイルを保持     |
| \-H   | \--hard-links| hard linksを保持     |
| \-A   | \--acls      | ACLs を保持     |
| \-X   | \--xattrs    | extended attributesを保持     |

# 参考にした情報

## Help

```
rsync --help
```

## Git Bash に `rsync` をインストールする方法

https://zenn.dev/buchio/articles/d7a3ea47ac9d65185c33
[メモ] DRF ModelViewSet で POST オーバライドして新規投稿(PUT)と更新(PUT)に振り分ける


|本シリーズのトップページ|
|:--|
|https://qiita.com/robozushi10/items/4559a281d0319eb62c6c|


# はじめに

次のように、DRF の View で POST されたデータに応じて
「POST」(新規投稿) と「PUT」(更新) に処理を振り分ける例.

|POST されたデータについて|実行内容|アクション|
|:--|:--|:--|
|テーブルに登録済みのレコードである|テーブル上の既存レコードを更新する|PUT に相当する|
|テーブルに未登録のレコードである|テーブルに新規登録する|POST|



# サンプルコード

「**『PC(パソコン) を管理』するデータベース**」を例にする.

## pclist/models.py

モデルは次の通り.
「OS情報」「ホスト名(主キー)」「IPアドレス」情報を持つ.
ここでは、変数名と型をさらっと見る程度で OK.

```python
class Pclist(models.Model):
  os = models.CharField(verbose_name='OS情報', max_length=64, blank=True, null=True)
  hostname = models.CharField(primary_key=True, verbose_name='ホスト名', max_length=32)
  ipaddr = models.CharField(verbose_name='IPアドレス', max_length=64, blank=True, null=True)
  略
```

## apiv1/views.py

DRF の view である.

・(下記🛑より) `request.data['フィールド名']` でペイロードの各要素にアクセスできる
・(下記💚より) POST されたデータに一致するレコードが DB に存在しているか
・(下記🔵より) 動的にクラスメンバにアクセスする (Python の文法)


```python
class PclistViewSet(viewsets.ModelViewSet):
  queryset = Pclist.objects.all()
  serializer_class = PclistSerializer # 後述の「apiv1/serializers.py」を参照

  def create(self, request, *args, **kwargs):
    """Pclist オブジェクトの登録に対応するアクションメソッド"""
    # すでに DB に POST された PC が存在するか否かのフラグ
    exists = False
    # POST されたペイロードに「hostname」の値が存在するか？ 
    if request.data['hostname']: 🛑
      # DB に「hostname」に該当するマシン名が存在しているか？
💚    exists = Pclist.objects.filter(hostname__exact=request.data['hostname']).exists()

    # すでに DB に該当するマシン名が存在する場合
    if exists == True:
      # DB から該当するレコードを取り出す
      pclist = Pclist.objects.get(hostname=request.data['hostname'])
      for k, v in request.data.items():
        # 主キーである「hostname」以外のフィールドを書き換える ... PUT 相当
        if v != "" and k != 'hostname':
          # 「hostname」以外のキーと値があれば上書きする
          setattr(pclist, k, v) 🔵
      # 更新された情報を DB に書き込む
      pclist.save()
      return Response(status=status.HTTP_202_ACCEPTED)
    else:
      # 存在しないホスト名だったので新規投稿する ... POST 相当の処理
      response = super().create(request, *args, **kwargs)
      return response
```

## apiv1/serializers.py

特筆すべき処理はない.

```python
class PclistSerializer(serializers.ModelSerializer):
  class Meta:
    var = ''
    model = Pclist
    fields = ('os', 'hostname', 'ipaddr',)
```