OmniAICreator/Qiita-1.07M huggingface dataset:
AtCoder Beginner Contest 224

##[A - Tires](https://atcoder.jp/contests/abc224/tasks/abc224_a)

O(1)

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }
 
int main() {
    string s;
    cin >> s;
 
    int n = s.size();
    if(s.size() >= 2 && s.substr(n-2, 2) == "er") cout << "er" << endl;
    if(s.size() >= 3 && s.substr(n-3, 3) == "ist") cout << "ist" << endl;
 
    return 0;
}
```

##[B - Mongeness](https://atcoder.jp/contests/abc224/tasks/abc224_b)

O(N^4)
N<=50で6250000です。
間に合いますね。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }
 
int A[50][50];
 
int main() {
    int H, W;
    cin >> H >> W;
 
    rep(i, H) rep(j, W) cin >> A[i][j];
 
    int sum=0;
    int cnt=0;
    for(int i1=0; i1<H; i1++){
        for(int i2=i1+1; i2<H; i2++){
            for(int j1=0; j1<W; j1++){
                for(int j2=j1+1; j2<W; j2++){
                    if(A[i1][j1] + A[i2][j2] <= A[i2][j1] + A[i1][j2]) sum++;
                    cnt++;
                }
            }
        }
    }
 
    if(cnt == sum) cout << "Yes" << endl;
    else cout << "No" << endl;
 
    return 0;
}
```

##[C - Triangle?](https://atcoder.jp/contests/abc224/tasks/abc224_c)

O(N^3)
N<=300で27000000です。
間に合いますね。

問題は座標の最大値が10^9であること。
doubleとか小数の計算を考えるより、python3のが分かりやすいかなと思いました。

```python:python
import sys
import math
import heapq
import itertools
from collections import deque
from functools import reduce
 
# main
def main():
    N = int(input())
    x = [0] * N
    y = [0] * N
    for i in range(0, N):
        x[i], y[i] = list(map(int, input().split()))
 
    res=0
    for p in range(0, N):
        for q in range(p+1, N):
            for r in range(q+1, N):
                x1 = x[q] - x[p] 
                x2 = x[r] - x[p] 
                y1 = y[q] - y[p] 
                y2 = y[r] - y[p]
 
                ans = abs((x1 * y2) - (x2 * y1)) / 2
                if ans>0:
                    res = res + 1
 
    print(res)
 
 
# エントリポイント
if __name__ == '__main__':
    main()
```
Gluejob pythonScriptでmongo Atlasからデータ取得をしてみた

## 本記事について
この記事では, AWS GlueJobでmongoDBに接続してデータを取得し, s3に保存する処理をまとめて
記述していきたいと思います.

## 前提条件
本来glueでmongo Atlasを接続する際, その旨を設定する必要がありますが
本記事ではできていることを前提とします.（後日詳しく記入）

## アーキテクチャ図
![スクリーンショット 2021-10-24 14.27.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/efe12789-ac9b-1dc7-12df-6bbccc0a26ab.png)


## gluejobで作成したコード

```python:glue_sample.py
import pandas
import pymongo
import boto3
from pymongo import MongoClient

'''s3に送るプログラム'''
def upload_data(dist_bucket, s3_file_path, file_name):
    S3_RESOURCE = boto3.resource('s3')
    s3_source_bucket = S3_RESOURCE.Bucket(dist_bucket)
    s3_source_bucket.upload_file(file_name, s3_file_path)

''' query取得部分'''
def mongo_query():
        client = pymongo.MongoClient("mongodb+srv://{User}:{Password}@{接続host}?retryWrites=true&w=majority")
        #mongoDB nameの指定
        db = client.{{db}}
        #mongoDB Collectionの指定
        path_collection = db.{{collection}}
        #mongoDB データ取得
        collection_data = path_collection.find({query})
        #データフレームにする
        df = pandas.DataFrame(collection_data)
        #csvで返す
        return df.to_csv('{{file_name}}.csv')
'''関数の実行'''
mongo_query()
today = datetime.date.today()
SOURCE_BUCKET = 's3_bucket'
s3_file_path  = '{{file_name}}.csv'
upload_data(SOURCE_BUCKET,s3_file_path, str(today)+'{{s3_output_filename}}.csv')
```

## 注意点
pythonでmongoDBと接続する際にはpymongoが必要
<b>mongodb+srv://</b>を使用する為には, <b>PyMongo'[srv]'</b>が必要
通常python Scriptで実行するときには下記のライブラリをインストールする.

```:pip
python -m pip install pymongo[srv]
```
をインストールする.
glueではpip installできない為, 自分でwhlファイルを用意する.

<b>用意するのは下記2つ</b>

* pymongo<br>
https://pypi.org/project/dnspython/
* dnspython<br>
https://pypi.org/project/dnspython/

### glue jobの設定
独自のライブラリを使用する際には, 以下の部分で設定する.
![スクリーンショット 2021-10-24 15.20.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/9929f7b4-dd23-c452-8e58-ab3616cb2b96.png)
のここの部分↓
![スクリーンショット 2021-10-24 15.19.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/dce85ac5-be42-c3d6-f1b6-acf2ed9a7298.png)
に以下のように設定する.

```shell:pythonライブラリパスの設定例
s3://{{s3_bucket}}/dnspython-2.1.0-py3-none-any.whl,s3://{{s3_bucket}}/pymongo-3.12.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
```

## 終わりに
上記のように設定することによって, mongo Atlasから, glue job python Scriptを使ってデータを取得することができる.
rails migrate リセット（reset）できないエラーを解消する Windows SQLite3

# エラー
Windowsでsqlite3をつかってると、migrateのリセットができない

```
rails db:migrate:reset
# →エラー
```

# 解決法
コードエディターで`db/development.sqlit3`(これがDB本体)を削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324819/49ab4c6c-0991-b62d-6036-52652b872ebe.png)


```
rails db:migrate
```

以上でデータベース(`development.sqlit3`)が作り直される
再度、新しく作られていれば問題ない

※ユーザーなどのデータも全てリセットされるので、新規登録が必要になる
VSCodeでSwaggerの環境構築

##前提
VisualStudioCodeが導入済み

##目的
VSCodeでSwaggerを書ける状態にする

##インストール
VSCodeにPrettierプラグインをインストールします。


## Swagger Viewer のインストール

* Visual Studio Codeを開く
* 画面左部拡張機能をクリックする
* 検索フォームに『Swagger Viewer』と入力し検索する
* 検索結果から『Swagger Viewer』を選択し、インストールする
![Swagger Viewer 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914798/35a115cb-1f14-e37d-3d3b-f13e43eb15d9.png)


## API使用書の作成
* sample.yamlで新規ファイルを作成する

```sample.yaml
openapi: 3.0.0
info:
  version: 1.0.0
  title: Swagger sample
paths:
  /users:
    get:
      summary: Usersを取得するAPIです。
      responses:
        '200':
          description: HTTPステータスコード200と以下の情報を含むJSONオブジェクトを返します。
          content:
            application/json:
              schema:
                type: object
                properties:
                  user_id:
                    type: string
                    example: 1
```


API仕様書のプレビュー
"Shift+Alt+p"でプレビュー表示する


#HTMLファイルとして出力したい場合
redoc-cli を使うとコマンドラインでyamlを静的HTMLに変換できる
前提：nodeがインストールされている必要がある


### redoc-cliをインストールする
```
npm install -g redoc-cli
```
### 静的HTMLを生成する
```
redoc-cli bundle sample.yaml
```
tinyscheme on Android ( Termux )

android termux のパッケージに `tinyscheme` というパッケージがあった。
これは arm で動いた。

![IMG_20211024_141705_037.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/1ca600bd-6b2a-4501-6673-6bb1a7894ec6.jpeg)


##Emacs で REPL を動かすセッティング
emacs での簡単な簡易的セットアップ。これで emacs で tinyscheme コードを編集する分には`（）`入力してから`）`の中へ入れる。

Emacs で

1:`M-x customize-variable`


2:Enter `scheme-program-name`. Press Enter.
3:Replace 'scheme' with the path to your Scheme executable.

![IMG_20211024_145442_550.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/3aebf634-4f2a-ea5f-8e1c-b1ee8453d49d.jpeg)

eg)
 Termux ターミナルで

```
~ $ which tinyscheme                                                    /data/data/com.termux/files/usr/bin/tinyscheme
```

このプログラムまでの path "/data/data/com.termux/files/usr/bin/tinyscheme" を scheme-program-name の初期値の`scheme` の語と入れ換えて入力。すなわち書き換え。

![IMG_20211024_145442_610.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/67d41004-2c3a-a6ca-bb5d-9d1d55651287.jpeg)

4:Click the 'State' button and select 'Set for Current Sessions'.

![IMG_20211026_182156_171.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/a9aaed56-7b4d-dd1d-4632-402d5dc46b5c.jpeg)

* 'Save for Future Sessions' を選ぶと `~/.emacs.d/init.el` 等に設定コードが書き込まれる。
*  'Set for Current Sessions' を選んだ場合設定は emacs を終了させると次回同じように使うには、1. から設定する。

`M-x run-scheme`

![IMG_20211024_145442_620.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/f5f6ce7f-e9e6-b8ac-90e6-38fafb080d1b.jpeg)

editモードのマニュアル
`C-h m`

![IMG_20211024_145753_268.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/3dc0d962-e79c-1af1-07f5-c31bd1ec7697.jpeg)
----
# Hello
save hello.scm 

```scheme:hello.scm
(define fhello (lambda ()
                 "Hello world"))
```

`M-x run-scheme`

`C-c C-l` `hello.scm`

![IMG_20211026_185653_966.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225786/a75caab3-3b3b-3be6-6d7f-fe8fc9ef2303.jpeg)

参考:

もうひとつの Scheme 入門
>勾配の緩やかな初心者向け Scheme 入門ページです。
コンピュータは使ったことがあるが、プログラミング経験があまりない人を想定しています。 Scheme の解説はすでに山ほど優れたものがありますが、あえて解説記事を書いてみました。 Scheme のような抽象的な話題は波長が合えばすんなりと理解できますが、あわないと全く理解できません。 他の解説を読んで今ひとつよく理解できなかった人は試しに読んでみてください。
この記事の目標はコンピュータ科学の教科書の決定版である SICP を読める程度の Scheme の知識を提供することです。
**4. 関数を定義しよう**
https://www.shido.info/lisp/scheme4.html

##TinyScheme
**TinyScheme**
"Safe if used as prescribed" (Philip K. Dick, "Ubik")

http://tinyscheme.sourceforge.net/
Laravel開発でよく使うコマンド一覧

# はじめに

主題の通りLaravelの開発で頻出のコマンドをまとめます。
使うポイントなども同時にコメントしていきます。
なお、任意の文字を入力する箇所は
- 単数系：`Hoge`
- 複数形：`Hoges`
としていきます。大文字小文字も確認してください。

# ファイル生成系コマンド

基本形は

```bash
php artisan meke:生成したいもの ファイル名 --オプション
```
です。

##Controller
```bash
php artisan make:controller HogeController
```

##Model
```bash
php artisan make:controller Hoge
```

##Migration

####新しいテーブルを作成する場合

```bash
php artisan make:migration create_hoges_table
```

####【任意】カラム追加する場合

```bash
#例 hogesテーブルにfugaカラムを追加する場合
php artisan make:migration add_column_fuga_for_hoges_table --table=hoges

#add_column_fuga_for_hoges_tableは任意の命名規則
```

####【任意】テーブル内容変更する場合

```bash
#例 hogesテーブルのfugaカラムを変更する場合
php artisan make:migration alter_column_fuga_hoges_table --table=hoges

#alter_column_fuga_hoges_tableは任意の命名規則
```

####【任意】カラムを削除する場合

```bash
# hogeテーブルのfugaカラムを削除する場合
php artisan make:migration drop_column_fuga_hoges_table --table=hoges

# drop_column_fuga_hoges_tableは任意の命名規則
```

## Request
```bash
php artisan make:request HogeRequest
# Hogeはバリデーションするテーブルによって命名する
```

## Seeder
```bash
php artisan make:seeder HogesTableSeeder
```

## Factory
```bash
php artisan make factory HogesFactory --model=Hoges
```

# 実行系コマンド

## config:cache
```bash
php artisan config:cache
```
`src/config/`の中のconfigファイルを触った時に実行するコマンド

## route:cache
```bash
php artisan route:cache
```
`src/routes/`の中のルーティングファイルを触った時に実行するコマンド

## composer dump-autoload

```bash
composer dump-autoload
```

クラスを新たに作成した時に実行するコマンド。
ControllerもModelもseederも、新規作成したファイルにはほぼクラスが含まれているので、作成し終わったらこのコマンドを実行するのを忘れずに！

## migrate

#### 未処理のマイグレーションをすべて実行する
```bash
php artisan migrate
```

#### 全マイグレーションをロールバックしてからマイグレーションし直す
```bash
php artisan migrate:fresh
```

#### 一旦全てのテーブルを削除してマイグレーションし直す
```bash
php artisan migrate:refresh
#本番でやるとデータ消えるので注意
```

##seed

#### seederの生成
```bash
php artisan db:seed
# src/database/seeds/DatabaseSeeder.php の DatabaseSeederクラス を実行するコマンド
```

#### 指定したseederの生成
```bash
#HogesTableSeederのみ生成する場合
php artisan db:seed --class=HogesTableSeeder
```

#### migrationもseederも 削除→再生成
```bash
php artisan migrate:refresh --seed
```

## コンパイル
```bash
npm run dev
```
cssやjsファイルをコンパイルします。
ライブラリを導入した際なども忘れないように実行すること。
*.vhdx（CentOS）のサイズを縮める

Hyper-Vのvhdxがでっかくなっちゃったときの対処

# 前提
- Powershellから "SSH サーバ名" でHyper-VのGuestVMに入れるようになっていること

# ホストOS(Powershell)


```powershell

# サーバ名を指定
$SVR_NAME="HOGEHOGEServer"

# サーバが存在する場合実行
if ((Get-VM).Name.Contains($SVR_NAME)){

    # ログインディレクトリ配下を0FILL
    ssh $SVR_NAME "dd if=/dev/zero of=zero bs=4k; \rm zero"

    # VM停止
    Stop-VM $SVR_NAME

    # VHD最適化(配置先のvhdxフルパスは各々の環境に応じて...)
    Optimize-VHD -Path D:\VHD\$SVR_NAME.vhdx -Mode Full

    # VM起動
    Start-VM $SVR_NAME
}

```

# 有識者各位

https://blog.treedown.net/entry/2018/03/16/010000
<!DOCTYPE html>の意味

HTMLの基本
知ってそうで知らないことをアウトプットしていきます。


<!DOCTYPE html>の意味
このタグの役割は、「このHTMLドキュメントはHTML5の仕様に基づいて作られている」とブラウザに教えること。

このタグのおかげで、ブラウザがHTMLドキュメントをコードが異なった仕様やバージョンとしてレンダリングするトラブルを回避できる。
Eclipseショートカットキー(備忘録)

#Eclipseショートカット一覧
よく忘れるので知っている範囲でまとめてみました。

| ショートカット | 内容 |
|:-|:-|
| Ctrl + Shift + F  | インデントを勝手に整える  |
| Ctrl + Shift + R  | ファイル名検索  |
| Ctrl + H  | 文字列検索(全てのファイルを検索対象可)   |
| Ctrl + Alt + ↓  |カーソルのある行を下にコピー   |
| Ctrl + D   | カーソルのある行を削除  |
| Ctrl + Shift + O  | import文を勝手に記述  |
| Shift + Alt + R  | リファクタリング  |


適宜追加していきます。
MySQL Workbenchで処理がタイムアウトする場合

デフォルトでは処理に30秒以上かかってしまう場合には処理が中断され、結果を返さない。


その際のレスポンスはこれ。
```Error Code: 2013. Lost connection to MySQL server during query```


では、中断されてしまう秒数を30秒より、長くする。
Preferenses > SQL Editor > DBMS connection read timeout interval (in seconds)
ここを30秒以上にする。
ワードプレス Jetpack パブリサイズ共有 SNS連携 デフォルトをオフに

#ワードプレス Jetpackプラグイン
##パブリサイズ共有
SNS(Facebook, Twitter)と連携して共有する機能
デフォルト値は、オン（共有）となっている。
このデフォルト値をオフにする方法。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2087247/5445ad91-05e7-a1ad-59fc-99f309603339.png)

次のフィルター関数を追加すれば、デフォルト値の変更が可能。

add_filter( 'publicize_checkbox_default', '__return_false' );

テーマのfunctions.phpに追加したり、プラグイン化して追加することが可能ですが、今回は次のプラグインを使用してみた。

###Code Snippets
https://ja.wordpress.org/plugins/code-snippets/
皆がカレンシーの事に興味なかった【C#】

C#のDataGridViewでソートする機能を作らなくてはならなかった。
DataGridViewの仕様をよく把握していなかったのでList<List<string>>でデータを収集し、DataTableへ追加する形でさっさと作った。
本来であれば独自クラスを作成してBindingSource化すれば.Filterで簡単に検索できるが、大体作り終わった後にその事実を知ったので単純にforループでdataGridView.Rows[]の.Visibleプロパティを変更する形で対応した。

が、此処で問題が発生する。

`System.InvalidOperationException: '現在のカレンシー マネージャーの位置に関連付けられた行を非表示にすることはできません。`

すぐにGoogle検索を行って対処法を探すが、すぐに引っかかる内容では「BindingSourceで作り直せ」しか見当たらない。
やむを得ず作り直しを決意するために少しだけデータを弄っていたが、その時に不可解な動作が発生する。
特定のデータ検索時にはエラーが発生せずに非表示に出来たのだ。
一回成功したので成功時のデータを何度か再現して動作を確認するとすぐに原因が判明した。
カレンシーはCurrentの意味だったのだ。
CurrentCellとして設定されている行は非表示に出来ないよ、というエラーだったのである。
そのためCurrentCellとして設定されている行を非表示にしなければ問題なく動作する事が確認できた。
ならCurrentCellの設定を事前に削除してしまえば問題なく動作するはずである。

```C#
dataGridView.CurrentCell = null;
```

この設定を追加するだけでカレンシーが出没する事はなくなった。
一行で解決する問題をわざわざBindingSourceで一から作り直してくださいと言うのもどうなんだろうなぁと思ったので備忘録として残します。
＜初学者向け＞DBについて

#はじめに
初めまして、公務員からエンジニア転職を目指して勉強している者です。Dockerについて勉強したので、まとめていきたいと思います。間違い、アドバイス等あればコメント頂きたいです。

#目次
1.DB
2.DBMS
3.SQL(DML,DDL)

#1.DB
###DBって何？
データの基地。＝基礎、土台。
例）電話帳、Excel等

###できること
・データを探しやすくする
・データを保管する
・検索、抽出、集計ができる

###DBの種類
・リレーショナル型（RDB)
　→Excelのような、表のDB（SQLで操作可能）
・階層型
　→ツリー構造のDB
・ネットワーク型
　→網目状にデータがつながったDB
・NoSQL
　→SQLを使わないDB

###DBの必須用語
・テーブル：表全体
・レコード：横の行のデータ
・カラム：縦の列のデータ
・フィールド：一つ一つの入力項目
※DBはテーブルがいくつもある
![スクリーンショット 2021-09-12 18.55.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1715679/c49079a4-1994-d9c7-efc2-d80617fc7941.png)

#2.DBMS
###DBMSとは
Database Management Systemの頭文字を取ったもので、データベース管理システムと呼ばれる。
＝DB自体を管理するシステム。

###RDBMSとは
Relational Database Management Systemの頭文字を取ったもので、SQLを使って、リレーショナル型DBを管理するシステム。

###一般的なRDBMSの種類
・Oracle Database：有料で、最近のクラウド環境にも対応できる
・Microsoft SQL Server：無料と有料があり、Microsoft OSと相性がいい
・MySQL：オープンソース。基本は無料で、研修や個人開発等で使われる
・PostgreSQL：オープンソース。MySQLと同じような規模で使われる

#3.SQL
###SQLとは
RDBを操作するための言語。

###SQLの種類
・データ操作言語 (DML: data manipulation language)
・データ定義言語 (DDL: data definition language)
・データ制御言語 (DCL: data control language)


##データ操作言語（DML）
・SELECT ： DBからデータを取得
・INSERT ： DBにデータを追加
・UPDATE ： DBに保存されてるデータを更新
・DELETE ： DBに保存されてるデータを削除

###SELECT：データの取得
○全てのカラムのデータを取得
→SELECT　*
 　FROM　テーブル名;
※ * ＝全て

○複数のカラムを選んでデータを取得
→SELECT カラム1, カラム2 … 
　FROM テーブル;

○レコードを絞ってデータを取得
→SELECT * 
　FROM テーブル名 
　WHERE 条件式;

　●条件式について
　　・WHERE カラム1 AND カラム2
　　→カラム1とカラム2を満たすデータを取得

　　・WHERE カラム1 OR カラム2
　　→カラム1かカラム2のいずれかを満たすデータを取得
　　
　　※ANDとORには優先順位があり、ANDが先に実行される。
　　　ORを先に実行したい場合は、(カラム1 OR カラム2)の様に括弧で
　　　くくって、その後ろにAND処理を書く
　　　→WHERE 条件式1 OR 条件式2]
　　　   AND 条件式3

###INSERT：データの追加
○データを一件追加（カラム指定）
→INSERT INTO テーブル名 (カラム1、カラム2…)
　VALUES  (値1a,  値1b…);

○データを一件追加（カラム指定省略）
→INSERT INTO テーブル名
　VALUES （値1a,  値1b…);
　※設定してるカラムの左から順にデータを入れる

○データを複数追加
→INAERT INTO テーブル名（カラム1、カラム2、カラム3…)
　VALUES（値1-1, 値1-2…),
　　　（値2-1, 値2-2…),
　　　（値3-1, 値3-2…);

###UPDATE：データの更新
→UPDATE テーブル名
　SET カラム1 = 値1
　WHERE 条件式;
　※WHEREは省略可だが、全てのレコードが対象になる

###DELETE：データの削除
→DELETE FROM テーブル名
　WHERE 条件式;

##データ定義言語(DDL)
○ルール
・DB名、テーブル名、列名に使える文字
→半角文字のアルファベット、数字、アンダーバー
・名前の最初の文字は半角のアルファベット
・名前の重複は✖️
→1つのDBの中に同じ名前のテーブル✖️
→1つのテーブルの中に同じ名前のカラム（列）✖️

###CREATE：テーブルを作成
→CREATE TABLE テーブル名 (
　　カラム1　データ型　制約
　　カラム2　データ型　制約
　　・・・
　　);

※データ型 : BOOLEAN,INTEGER, VARCHAR, DATE, TIMESTAMP等をカラムによって使い分ける

※制約 : ・PRIMARY KEY：UNIQUE + NOT NULL
　　　 ・UNIQUE：重複するフィールドの禁止
　　　 ・NOT NULL ：NULL値を禁止
 　　　 ・CHECK:条件を満たさないデータを禁止
　　　 ・FOREIGN KEY:他のテーブルの列を参照してその列にないデータを禁止

###ALTER TABLE：テーブル構造（制約）の変更
○カラムの追加
→ALTER TABLE テーブル名 ADD カラム名　データ型　制約;

○カラム指定の変更
→ALTER TABLE テーブル名　CHANGE 変更前のカラム名　変更後のカラム名　データ型　制約;

○カラムの削除
→ALTER TABLE テーブル名　DROP カラム名;
初心者向け）Herokuで設定した環境変数をDjangoで参照する

### Herokuで設定した環境変数を使う

Herokuではアプリごとに環境変数が設定できます。そいつを設定しただけではプログラムで参照できないので、したい場合は以下のコードを追加する必要があります。

```
(Settings.pyの記述　部分）

import os
SECRET-KEY = os.environ['SECRET_KEY']
```

DjangoのSettings.pyに指定されているSECRET-KEYをHerokuの環境変数に設定して、ソースに記載しないときには上記のとおりos.environ['環境変数のキー名']で設定を読み込んで変数にセットする必要があります。Herokuの環境変数にキーと値を設定しただけじゃ反映されないので注意が必要です。

ちなみにDEBUGを環境変数に設定して、値をTrueにしたりFalseにしたりしてテストと本番の環境をデプロイせずに切り替えようと思ったところ、変更後にDynoをリスタートしてもソースを再デプロイしても反映しませんでした。Herokuの説明を読んでもよくわからないので、とりあえずDEBUGはソース直書きで対応しとります。

現場からは以上です。
phpstorm で 自動的に画像ファイルをアップロードするには？

例えば、外部のツールでダウンロードした画像を
自動的にアップロードしたい場合。

phpstorm 2020.1

なぜかアップロードされないので、設定してみた。


File
→ Settings
→ Build, Excution,Deployment
→ Deployment
→ Options

ここの

Upload changed files automatically to the default server
→ Always

そしてここが味噌

Skip external changes
→ チェックを外す

これで自動的にアップロードされる。
多次元連想配列の値が全て空かを判定する

# 背景
下のような多次元連想配列があって、key1の値が全て空かどうかを判定したい。（※キーの名前が同じであることが前提です。）

```
$hoge = [
	(int) 0 => [
		'key1' => ''
	],
	(int) 1 => [
		'key1' => ''
	],
	(int) 2 => [
		'key1' => ''
	]
]
```

# まずはkey1の値だけで配列を再作成
[array_column](https://www.php.net/manual/ja/function.array-column.php)を使って、空か判定したいキーに対応する値の配列を作成。
今回の場合、全てのkey1の値が空なので下のようになる。

```
array_column($hoge, 'key1') = [
	(int) 0 => '',
	(int) 1 => '',
	(int) 2 => ''
]
```

もし、$hoge[0]のkey1の値に「HOGE」と入っていたら下のようになる。

```
array_column($hoge, 'key1') = [
	(int) 0 => 'HOGE',
	(int) 1 => '',
	(int) 2 => ''
]
```


# 次にそれぞれの値が空か判定
次に[array_filter](https://www.php.net/manual/ja/function.array-filter.php)で、key1の値だけで作った配列の要素をフィルタリングする。

array_filterの第二引数を設定しなければ、第一引数に渡した配列の中で値が空のものはすべて削除される。
なので、今回の場合は空の配列が返ってくる。

```
array_filter(array_column($hoge, 'key1')) = [];
```

# ifの条件式に使用する
array_filterでの返り値を使って処理の条件分岐。
ifの条件式に空を渡すとfalse判定してくれるのでそれを利用。

```
if(array_filter(array_column($hoge, 'key1'))) {
　　（空じゃないときの処理）
}
```

# 最後に
今回、色々調べて実行した方法を記載しましたがもっと良い方法がありそうな気がします…
その他に良い方法等があれば教えていただけると幸いです。
【初学者~中級者向け】JavaScriptのsplitについて②

前回に続きJavaScriptのsplitについて
ちょっと踏み込んだとこまで解説していきます。
##目次
①**第二引数**について
②**正規表現**との組み合わせ

について解説していきます。



##①第二引数について
前回、split( )は**引数で指定した区切り文字で文字列を分割し配列にする**というとこまで紹介しました。怪しい方は[前回](https://qiita.com/yasu-hoshi/items/f3853e05aed48f96c0f7)をぜひチェックしてみてください

split( )は**第二引数**で
**<font color="red">配列に取り出す個数を指定することが出来ます</font>**

**split ('<font color="orange"> - </font>' , <font color="red">3</font> )**　 ⇒ **　「<font color="orange">-</font>」で区切って<font color="red">3</font>つ取り出す**
**split ('<font color="orange"> / </font>' , <font color="red">4</font> )** 　⇒ **　「<font color="orange">/</font>」で区切って<font color="red">4</font>つ取り出す**

といった具合です

```javascript
const lists = '大阪,京都,兵庫,滋賀,和歌山';

const result = lists.split(',', 3);
 
console.log( result );  //['大阪','京都','兵庫']
```

##②正規表現との組み合わせ

spit( )の引数として正規表現を用いることが可能です

**・空白文字(\s)**

```javascript
// (1)空白文字で間隔をあけて並んだ文字列
const str = "大阪 兵庫 京都";
//空白文字で区切る
const strSplit = str.split(/\s/);
console.log(strSplit);  // ['大阪','兵庫','京都']


// (2)","で分けられてるが空白ができてしまってる状態、、、の場合
const str = "大阪 ,  兵庫   ,京都";
//正規表現で、","の前後に空白も含めて引数を指定
const strSplit= str.split(/\s*,\s*/);

console.log(strSplit); //　['大阪','兵庫','京都']
```

**・カンマ( , ) or ピリオド( . )**

```javascript
const str = "大阪,兵庫.京都";
//","か"."で区切る
const strSplit= str.split(/[,|.]/);

console.log(strSplit); //['大阪','兵庫','京都']
```

##まとめ
今回はsplitと正規表現の使い方を解説しました。他にもsplitは別のメソッドと組み合わせることもよくあるので機会があればそちらも解説して行こうと思います
スプライン(非線形回帰モデル) vol.1

#参考本

多変量解析入門　-線形から非線形へ- 小西貞則著

#複雑な非線形構造について

以下、オートバイの衝突実験を繰り返し、衝突した時間から経過した$x$(ミリセカンド)において, 頭部に加わる加速度$y$を計測する.
![path1445.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698527/5aecf0aa-4036-3749-8595-7619f53d6b7f.png)

縦軸：頭部に加わる衝撃の強さ[N]
横軸:衝突後の経過時間[ms](1/1000秒)


これは特定の非線形関数によるモデル化は難しい. 

まずスプライン、B-スプライン、動径基底関数などに基づくモデルについて順に述べ、後に基底展開法と呼ばれる方法によって統一的に整理できることを示す。

#スプライン

$n$組の観測データに1つの多項式モデルを当てはめるのではなく、説明変数に関わるデータを区分し考える。

繰り返しになるが、全データを1つの多項式モデルで捕らえようとすると、どうしても高次の多項式が必要となる。予測に有効な安定したモデルを得るのは現実的には厳しい。

#分割

ある閉区間$[a,b]$上、
$$x_0=a<x_1<x_2<\cdots< x_m < b$$
各$x_i \hspace{1em} i \in \Lambda$を分点(節点)と呼ぶ。
こういった$\[x_k, x_{k+1}](x_{m+1}=bとする)$に区分することを分割と呼び、この区分された各区間を各「小区間」と呼ぶ。

各$x_i$でのデータ$y_i$はノイズを伴って
$$y_i=u(x_i)+ \epsilon_i$$
と観測されたとする. データからノイズを分離して、現象の構造を反映する$u(x)$をモデルを通して捉えるために、いくつかの柔軟なモデルが提案されている.

# 3次スプライン

各小区間で3次多項式を当てはめ、各モデルが分点で滑らかに接続するものとする。

具体的には、各分点で導関数、2次導関数(2回微分した関数)が連続になるように制約をつけて当てはめを行う。

ハイパーパラメーター(更新可能なパラメータ)、$\boldsymbol \theta=(\beta_0, \beta_1, \beta_2, \beta_3, \theta_1, \theta_2, \cdots,\theta_m)^T$とし、$M_{x-t_i}＝{\rm max} [ 0, x-t_i]$として、

$$u(x;\boldsymbol \theta)= \beta_0+\beta_1 x+ \beta_2 x^2 + \beta_3 x^3 + \sum_{i=1}^{m} \theta_i M_{x-t_i}^3$$

# 境界付近

一般には境界付近では3次多項式の当てはめは、推定曲線の変動が大きく適当でないことが知られている。
両端区間$[a, t_1]$, $[t_m, b]$では1次式であるという条件を付加したのが自然3次スプラインで次の式で与えられる。

$$u(x;\boldsymbol \theta)= \beta_0+\beta_1 x+ \sum_{i=1}^{m-2} \theta_i (d_{i}(x) - d_{m-1}(x))$$
,
$\boldsymbol \theta= (\beta_0, \beta_1, \theta_1, \theta_2, \cdots, \theta_{m-2})^T$
とし、また
$$d_i(x) = \frac{M_{x-t_i}^3-M_{x-t_m}^3}{t_m-t_i}$$
とおく。

とすると端っこの区間以外は3つ上の式のように書ける。$M$は$x-t_i$が負のとき、$t_i$から左に$x$がある時は0になる。

分子が$x-t_j$ $(j\neq i)$であれば、3乗、$x-t_j$ $(j = i)$であれば2乗の項が残る。展開すると、元々の式と同一となることがわかる. $\theta$,$\beta$やらは元のものと同一でなく、係数は$\square$やら$\triangle$だと思ってほしい。

端っこ、左側に$x$があるときは∑部分の分子が全部0(ダミーの分子が0)
右側の∑のダミー部分は

$$d_i - d_{m-1}= \frac{(M^3_{x-t_i}-M^3_{x-t_m})(t_m-t_{m-1})-(M^3_{x-t_{m-1}}-M^3_{x-t_m})(t_i-t_m)}{(t_i-t_m)(t_m-t_{m-1})}$$
$a^3-b^3= (a-b)(a^2+ab +b^2)$を使えば、
$$=\frac{(t_m-t_i)((x-t_i)^2+(x-t_i)(x-t_m)+(x-t_m)^2)(t_m-t_{m-1})-(t_m-t_{m-1})((x-t_{m-1})^2+(x-t_{m-1})(x-t_m)+(x-t_m)^2)(t_m-t_i)}{(t_m-t_i)(t_m-t_{m-1})}$$


$$=\frac{(t_m-t_i)(t_m-t_{m-1})[((x-t_i)^2+(x-t_i)(x-t_m)+(x-t_m)^2)-((x-t_{m-1})^2+(x-t_{m-1})(x-t_m)+(x-t_m)^2)]}{(t_m-t_i)(t_m-t_{m-1})}$$


$$=(x-t_i)^2-(x-t_{m-1})^2+(x-t_i-x+t_{m-1})(x-t_m)$$
$$=(t_i-t_{m-1})(2x-t_i-t_m)+(t_{m-1}-t_i)(x-t_m)$$
$$=(t_i-t_{m-1})[(2x-t_i-t_m)-(x-t_m)]$$
後ろの項の符号を逆にした。
$$=(t_i-t_{m-1})(x-t_i)$$
よって1次の項と定数項のみ。
【Vue.js】算出プロパティのgetterとsetter

#はじめに
こんにちは！
今回は【Vue.js】getterとsetterについてアウトプットしていきます！

#getterとsetter
・cpmputed（プロパティ）・・・getter,setterが必要
・methods（メソッド）・・・getterのみ必要

getter=**dataの値を取り出すのメソッド**
setter=**dataの値に代入するためのメソッド** 


#書き方・解説
今回は税抜価格、税込価格の計算を例に解説していきます。

```HTML:HTML
<p>
base price : <input type="text" v-model="basePrice">
</p>
<p>
tax included prie : <input type="text" v-model="taxIncludedPrice">
</p>
```

```Vue.js
 data: {
    basePrice: 100
  },
  computed: {
    taxIncludedPrice: {
      get: function() {
        return parseInt(this.basePrice * 1.10)
            //⏫整数を返す関数
      },
      set: function(taxIncludedPrice) {
      this.basePrice = Math.ceil(taxIncludedPrice / 1.10)
                    //⏫小数点以下を切り上げる関数
      }
    }
  }
```
![あ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2114750/3ffa0cb7-6e3f-e1f0-3be7-58dd70a8ccc6.png)



`data`に基準となる数字を`dataPrice`入れる。

`get`で`dataPrice`に税価格をかけた`taxIncludedPrice`を定義。

`set`の部分では税込価格`taxIncludedPrice`を受け取って税抜価格にする計算を記述。（ここでは同時に小数点以下を切り上げる関数`Math.ceil`も記述しています。）それを`base price`に代入しています。

このままでは`dataPrice`に価格を入力しても、`taxIncludedPrice`で税込価格が表示されないので、テンプレートの側に双方向データバインディング(`v-model`)を記述します。

#まとめ
・`data`に基準となる数字を入れる。
・getでdataの値を取り出し税価格（1.10）をかけ、新たな定義を作る。
・setで新たに定義したものの税を抜いたもの（/1.10）をdataの値に代入する。


#最後に
今回はgetterとsetterについてアウトプットしました。
今回の記事を読んで質問、間違い等あればコメント等頂けると幸いです。

今後ともQiitaにてアウトプットしていきます！

最後までご愛読ありがとうございました！
【AI分野に関わる方必見】無料で見られる良質な資料まとめ

![note_header001_アートボード 1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667780/3bcf9199-5320-fc5e-3fd5-1c689f8c3236.jpeg)
こんにちは。2021年からキカガクにてAIプログラミングを学んでいる川合です。この記事では私がAIに興味を持ち始めてから出会ったAI関連リンクを貼っていきます。

ありがたいことに、AIを学べる無料で良質なコンテンツがどんどん増えてきています。それらをストックしていつでも見れる状態にし、良いコンテンツがあれば更新していきたいと思います。


# 勉強したい方向け

#### KIKAGAKU
まずは私が受講しているキカガクのサイトを紹介します。無料公開されているのが不思議なくらい、分かりやすく綺麗にまとめられた資料で学ぶことができます。

https://free.kikagaku.ai/

#### 東京大学 Pythonプログラミング入門
Pythonプログラミングの基本的なことが網羅されています。

https://utokyo-ipp.github.io/index.html

#### Python でデータサイエンス
統計分析の手順や使い方を初学者にも分かりやすく解説しています。

https://pythondatascience.plavox.info/

#### note.nkmk.note
Pythonまわりで分からないことを検索すると、だいたいこのサイトがヒットするほど情報が網羅されています。

https://note.nkmk.me/

#### Chainer Tutorial
シンプルな図と整理された文章で読みやすい情報を提供しています。

https://tutorials.chainer.org/ja/tutorial.html

#### 高等学校における「情報II」のためのデータサイエンス・データ解析入門
主に機械学習の分野をイラストやフロー図などを多用して分かりやすく説明しています。

https://www.stat.go.jp/teacher/comp-learn-04.html

####  深層学習
深層学習の各分野について、GIFアニメやコードを用いながら細かく説明しています。

https://atcold.github.io/pytorch-Deep-Learning/ja/

#### DATA SCIENCE LIFE
Pythonを用いて数学も学びたい方におすすめです。

https://datawokagaku.com/

# AIの活用事例を知りたい方向け

#### AIマップβ 2.0
「AIって実際どんなことに活用できるの？」という疑問を職種別に知ることができます。

https://www.ai-gakkai.or.jp/pdf/aimap/AIMap_JP_20200611.pdf

#### cedro-blog
AIを楽しんでいる、遊んでいる印象を受けました。驚きの技術が盛りだくさんで、見ているだけでも楽しくなるブログです。

http://cedro3.com/

# データを集めたい方向け

#### 【保存版】オープンデータ・データセット100選 -膨大なデータを活用しよう！
お馴染み[AINOW](https://ainow.ai/)さんのデータセット提供ページまとめです。

https://ainow.ai/2020/03/02/183280/

***

たくさんのLGTM、ストックありがとうございます！サイトを紹介しているだけなのに恐縮ですが、今後もどんどん良質なサイトを追加していきます。
Splunk: 内部ログを確認する

しばしば必要となるのでメモ。

###### 実施環境： Splunk Free 8.2.2

 Splunk 自体の内部ログは、基本的には _internal という名前のインデックスに保管されています。

[Splunk 内部ログ一覧] (https://docs.splunk.com/Documentation/Splunk/8.2.2/Troubleshooting/WhatSplunklogsaboutitself)

```Splunk:Splunk
index="_internal"
| stats count BY sourcetype, source
```

![スクリーンショット 2021-10-17 14.29.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/5ea1ebb6-a003-dd8e-8617-8d74aca691f5.png "内部ログ一覧")

 _internal ログには複数のログが格納されていますが、よく使用されるログは次のとおりです。

###### メインログ

ソースタイプ名：splunkd
ログファイル名：splunkd.log

 Splunk のメインログです。
大抵のログはここに出力されるため、何か問題が発生した場合はまずここを確認します。

```Splunk:Splunk
index="_internal" sourcetype="splunkd" source="*/splunkd.log" log_level="ERROR"
| table _time, event_message
```

![スクリーンショット 2021-10-17 15.07.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/6a2736fb-c954-44ad-8c5a-a6f683a844ec.png "エラーログ")

###### メトリクスログ

ソースタイプ名：splunkd
ログファイル名：metrics.log

スループット等、 Splunk のパフォーマンスに関連する情報が出力されるログです。
 Splunk の性能分析に使用できます。

```Splunk:Splunk
index="_internal" sourcetype="splunkd" source="*/metrics.log" group="per_index_thruput"
| stats avg(kbps) BY series
```

![スクリーンショット 2021-10-17 15.01.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/0a2d64a9-7122-166c-24ab-dba3c9e9e7d5.png "スループット")

###### ライセンス使用量ログ

ソースタイプ名：splunkd
ログファイル名：license_usage.log

ログデータの取り込み量が出力されるログです。
日々のログ流用を確認するのに使用できます。
 Splunk のライセンス料は1日のログの取り込み量が基準となるため、日々のログ流用は重要な情報です。

```Splunk:Splunk
index="_internal" sourcetype="splunkd" source="*/license_usage.log"
| where isnotnull(idx)
| eval index_sourcetype = idx + ":" + st
| timechart span=1d sum(b) BY index_sourcetype
```

![スクリーンショット 2021-10-17 14.44.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/4413264d-7cc6-49dc-1e46-03bb25d65225.png "ログ流量")

###### スケジュールログ

ソースタイプ名：scheduler
ログファイル名：scheduler.log

スケジュールしたジョブの実行履歴が出力されるログです。
定期的に動作させているジョブについて、開始/終了時刻や成否を確認するのに使用できます。
直近のジョブであれば他にも確認方法はありますが、古いジョブの実績を知る場合は本ログを見る必要があります。

```Splunk:Splunk
index="_internal" sourcetype="scheduler" source="*/scheduler.log"
| where isnotnull(savedsearch_name)
| table _time, savedsearch_name, status
```

![スクリーンショット 2021-10-17 15.11.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/21b5bcbf-cc03-ee98-1525-78b25db71c4e.png "ジョブ実績")

###### 監査ログ

インデックス名：_audit

ログイン履歴等、監査に必要な情報が出力されるログです。
本ログは例外的に、 _internal とは別の _audit という名前のインデックスに格納されています。
個人レベルではあまり必要ないかもしれませんが、企業その他の団体で使用されるサーバの場合はセキュリティ上非常に重要なログです。

```Splunk:Splunk
index="_audit" action="login attempt"
| table _time, clientip, user, info
```

![スクリーンショット 2021-10-17 15.16.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/a800f8cf-8774-17e5-fef7-0da99a0d2011.png "ログイン履歴")
adguardのユーザールールで5ちゃんねる用の非表示フィルタを作成

# ﾜｯﾁｮｲ，IPアドレス，コテハン，名前

```javascript
!wacchoi,ip,name
5ch.net##div:matches-attr("/class/"="/post|post highlightpost|post_hover vis own[0-9]+/") > div > span:matches-attr("/class/"="/name/"):contains(/ここに正規表現で書き込み/):upward(2):remove()
```

## ﾜｯﾁｮｲ決め打ち
正規表現，こんな感じで前後に分けて判定

```javasceipt
abcd-....|....-efgh
```


# ID

```javascript
!userID
5ch.net##div:matches-attr("/class/"="/post|post highlightpost|post_hover vis own[0-9]+/") > div > span:matches-attr("/class/"="/uid/"):contains(/ここに正規表現で書き込み/):upward(2):remove()
```

## 末尾の決め打ち
正規表現，例として末尾d・末尾a・末尾r・末尾Mを弾く

```javascript
\b.+[darM]\b
```


# 正規表現の仕様


https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions#using_special_characters

概ねこれに一致しているかと思います（オプション指定はしなくても良さそう）


# 鯖毎or板毎に使い分け
ドメインを細かく指定すれば何とかなると思います
エクセルの特定の表データを抽出してCSVファイルに保存

# 目的
エクセルに存在する特定の表データのみを抽出してCSVファイルに保存する
# 前提条件
・抽出したい表の項目は以下の５項目（列）
　名前、体力、攻撃力、防御力、必殺技
・エクセルの１枚目のシートに対象の表が存在
・シートのA列に先頭の項目”名前”が存在
・シートの一番上にある表のみを抽出

```python:
import pandas as pd
import openpyxl

# データの項目は以下の５項目であることとシートのA列に"名前"が存在することが前提
# 名前、体力、攻撃力、防御力、必殺技

# データが存在するファイルを読み込む
wb = openpyxl.load_workbook("book.xlsx")

# データが存在するシートを読み込む　※一番のシートにデータが存在することを想定
ws = wb.worksheets[0]

# 行番号を検索により取得する
start_row = ''
for i, row in enumerate(ws.iter_rows(min_row=1), start=0):
    # A列（pythonでは0列目）を対象に、キーワード探索して、その行番号を取得する
    if row[0].value == '名前': # キーワードをシートの上の行(1行目)から探索
        start_row = i+1
        break # forループを抜ける

# エクセルシート内にある最終行を取得する
end_row = ws.max_row

# 表範囲を配列で取得する
data_rows = []
for rows in ws.iter_rows(min_row=start_row, min_col=1, #"名前は１列目にあるのでmin_col=1"
                        max_row=end_row, max_col=5):#"データは6個なのでmax_col=6"
    data_cols = []
    for cell in rows:
        data_cols.append(cell.value)
    data_rows.append(data_cols)
    
# pandasデータフレーム形式へ変換
df = pd.DataFrame(data_rows[1:], columns=data_rows[0])

# 行名を”名前”に置換する。
df.set_index("名前",inplace=True)

# csvファイルに出力
df.to_csv('df_con.csv', index=True, encoding='cp932')

```
deviseユーザー情報をパスワードなしで更新するとき詰まった話

今回 deviseでログイン機能を作った際、
プロフィール編集をパスワード入力しなくても更新できるように実装したく
詰まった所を簡潔にお伝えしたいと思います！！


最初の仕様としましてはパスワードを入力しないとプロフィールを変更できない状態でした、
ですが本来であれば更新するためのパスワード１箇所入れれば更新できるはず....

大体のアプリケーションには
新規のパスワード、変更確認用、プロフィールを更新するためのパスワードがあるかと思います。

でもなぜかその３つを入れないと入力が不足していますとエラーが出る状態でした。

この仕様は本当に不便ということでパスワードを更新用のみいれればプロフィールを変更できる仕様に変えましたのでそのコードを紹介します！！



```models/user.rb

  def update_without_current_password(params, *options)
    if params[:password].blank? && params[:password_confirmation].blank?
      params.delete(:password)
      params.delete(:password_confirmation)
    end

    result = update(params, *options)
    clean_up_passwords
    result
  end
```

```controllers/users/registrations_controller.rb

   def after_update_path_for(resource)
    user_path(id: current_user.id)
   end
   
   def update_resource(resource, params)
    resource.update_without_current_password(params)
   end
```

ここまでは色々な先人様の記事を参考にして実装しましたが、
なぜかパスワードが不足していると言うエラーがまだ出る。

[deviseのパスワード更新が出来ない](https://wcf-drill.com/devise%E3%81%AE%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E6%9B%B4%E6%96%B0%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%84-752.html9)

そこで


```models/user.rb

attr_accessor :current_password

```

この１文を入れるだけで、問題は解決致しました！！

deviseでログイン機能、マイページを作成していてまだまだ学ぶことが沢山あるなと
しみじみ思う今日この頃でした。

同じような悩みを抱えてる方がスムーズにアプリケーションの実装が出来ますように
こちらにて備忘録として残しておきます！
【学習記録⑨】カスタムディレクティブを用いて独自のDOM操作を作る！

#はじめに
Vue.jsを最近勉強し始めたので学んだ文法などを備忘録としてメモしていこうと思います。
今回はカスタムディレクティブを用いて特定の処理を使いまわす方法について記載していこうと思います。

##カスタムディレクティブ
ディレクティブとは`v-if`や`v-for`などのようにDOM操作に関する属性を指しますが、`カスタムディレクティブ`を用いると独自のDOM操作を定義することが可能です。

https://v3.ja.vuejs.org/guide/custom-directive.html

以下では`v-colorRed`というカスタムディレクティブを作成しています。
`v-if`や`v-for`と同じように属性として設定し、その内容が`script`タグの`directives`プロパティに書かれているという感じですね。

```vue:test.vue
<template>
  <div v-colorRed>おはよう！</div>
</template>

<script>
export default {
  directives: {
    colorRed(el, binding) {
      el.style.fontColor = 'red';
    }
  },
};
</script>
```

カスタムディレクティブの登録方法としては、各コンポーネントでしか利用できない`ローカル登録`と、どのコンポーネントでも利用できるようにする`グローバル登録`の2種類があります。
上記の例は`ローカル登録`に当たります。

※グローバル登録、ローカル登録の詳細については以下の公式ドキュメントをご参照ください。
[カスタムディレクティブ:登録方法](https://v3.ja.vuejs.org/guide/custom-directive.html#%E5%9F%BA%E6%9C%AC)

##フック関数
`カスタムディレクティブ`には「いつ発火するか？」をセットするフック関数があります。
フック関数は以下になります。

[フック関数一覧](https://v3.ja.vuejs.org/guide/custom-directive.html#%E3%83%95%E3%83%83%E3%82%AF%E9%96%A2%E6%95%B0)

この中でもよく使われる`mounted`と`updated`には省略記法があります。
[関数による省略記法](https://v3.ja.vuejs.org/guide/custom-directive.html#%E9%96%A2%E6%95%B0%E3%81%AB%E3%82%88%E3%82%8B%E7%9C%81%E7%95%A5%E8%A8%98%E6%B3%95)

##引数と修飾子
カスタムディレクティブは引数と修飾子を持つこともできます。
引数はカスタムディレクティブの後に`:○○`という形で渡され、修飾子は引数の後に`.○○`という形で渡されます。
引数で渡された値はそのままの値として扱われ、修飾子として渡された値についてはbooleanとして判定されます（その修飾子があるか、ないか）。

https://v3.ja.vuejs.org/api/application-api.html#directive

##以上を用いてサンプルを作ってみる
以上を用いて簡単なサンプルを作ってみます。
今回は`v-colorRed`というカスタムディレクティブを作成し、その引数に`文字を太くする`設定を、修飾子に`特定のフォント設定`を入れてみます。また、フック関数については省略記法を用いて設定していこうと思います。
それぞれの引数や修飾子をセットした場合とセットしない場合で出力結果が異なることを確認していきましょう。

```vue:App.vue
<template>
  <div>
    <morning></morning>
  </div>
</template>

<script>
import Morning from "./components/Morning.vue";

export default {
  components: {
    Morning,
  },
};
</script>
```

```vue:Morning.vue
<template>
  <div v-colorRed:bold.isBorderBottom="fontData">おはよう！</div>
  <div v-colorRed:_.isBorderBottom2="fontData">おはよう2！</div>
</template>

<script>
export default {
  data() {
    return {
      fontData: {
        fontSize: "24px",
        color: "red",
      },
    };
  },
  directives: {
    colorRed(el, binding) {
      el.style.fontColor = binding.value.color;
      el.style.fontSize = binding.value.fontSize;
      // 引数の値をfontWeightにセット
      el.style.fontWeight = binding.arg;
      // isBorderBottom修飾子がある場合はborder-bottomへスタイルを適用する
      if (binding.modifiers.isBorderBottom) {
        el.style.borderBottom = "1px solid red";
      }
    },
  },
};
</script>
```

出力結果は以下になります。
![pic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538249/800aaec9-f2ad-c5f3-b9a8-2f81a706bbf3.png)

「おはよう！」のほうは引数`bold`がセットされていることや、isBorderBottom修飾子があることが認識されていることが分かりますが、「おはよう2！」の方は引数がセットされていなかったり、修飾子が異なるものがセットされているため、指定したスタイルが適用されていないことが分かります。

#おわりに
今回はカスタムディレクティブの使い方を学びました。
こちらも利用することはたくさんありそうなのでしっかり理解していこうと思います！
SwiftからSlackに通知を送るコード

SwiftからSlackに通知を送るコード。

## 1. SlackのWebhook URLを取得

まずはSlackのWebhook URLを取得する必要があります。

特に難しいポイントはありませんので以下の記事を参考に、`https://hooks.slack.com/`から始まるURLを取得します。

https://zenn.dev/hotaka_noda/articles/4a6f0ccee73a18

https://www.yukibnb.com/entry/slack_incoming_webhook_url

botを設定する際に、botのアイコンやbotの名前も自由に設定できます。

## 2. Alamofireを導入

ライブラリのAlamofireを導入します。

必須ではありませんがコード量が短くて済みます。

https://qiita.com/uhooi/items/c0e083f916dc516175bd

CocoaPodsの場合はPodfileに`pod "Alamofire"`を書いて`pod install`か`pod update`をターミナルから実行。

Carthageの場合はCartfileに`github "Alamofire/Alamofire"`を書いて`carthage update --platform iOS`をターミナルから実行。

## 3. コーディング

最後に適当なswiftファイルを作って以下のコードを実装すれば完成です。

```swift
import Foundation
import Alamofire

let parameters: Parameters = [
    "attachments": [
        [
            "color": "#36a64f",
            "text": "〇〇さんが会員登録を行いました！",
            "fields": [
                [
                    "title": "日時",
                    "value": String(describing: Date()),
                    "short": true
                ],
                [
                    "title": "名前",
                    "value": "〇〇",
                    "short": true
                ],
                [
                    "title": "メールアドレス",
                    "value": "〇〇",
                    "short": true
                ]
            ]
        ]
    ]
]
let headers: HTTPHeaders = [
    "Content-Type": "application/json"
]
AF.request("取得したWebhookのURL",
           method: .post,
           parameters: parameters,
           encoding: JSONEncoding.default,
           headers: headers).responseString {
            response in
    switch response.result {
        case .success(let element): do {
            print("success")
        } catch {
            print("error")
        }
        case .failure(let error): do {
            print("error")
        }
    }
}
```
日時はSlackに送信する現在時間をそのまま入れていますが、変更したい場合は自由に設定してください。

`"value": "〇〇"`の部分はそれぞれ設定してください。

## Swiftのお役立ち情報

https://wagtechblog.com/programing/swift-iphone-application-school

https://wagtechblog.com/programing/swift-textbook.html
Gecko とは

## 勉強前イメージ

レンダリングのなんちゃら・・・ってmozilla調べてるときに見た気がする

## 調査

### Gecko とは

標準に準拠するように設計されているwebブラウザの部品でhtmlレンダリングエンジンの種類の一つで、ゲッコーと呼びます。
firefoxで使われています。
Mozilla Thunderbirdでも使われているみたいです。

#### htmlレンダリングエンジン とは

webブラウザが扱うドキュメントを解析して表示を行う機能を提供しています。
HTMLやCSS、JavaScriptなどの処理を行うためのエンジンとして採用されているおり、windowsやMax、linuxといった様々なOSで動作ができる。
元々はNetscape用に開発されていたものベースにMozilla Foundationが開発しています。

### 要するに・・・・

`Gecko` とは、firefoxで使われてる、html・CSS等を表示するためのエンジンの一つ。
ベースはNetscape用に開発されたもの。

### htmlエンジン他にも種類はある？

- Trident
	- IEで使われている
- WebKit
	- chromeやsafari、Edgeで使われている
- Presto
	- Operaで使われている

## 勉強後イメージ

WebKitもアクセスログで見たことあるかも！！！
レンダリングエンジンは表示させるものってイメージを持ちました。
今度見るとき、もっと注意深く見ておこう。

## 参考

- [ブラウザの種類とレンダリングエンジン](https://webukatu.com/wordpress/blog/928/)
- [Gecko](https://dic.nicovideo.jp/a/gecko)
- [Gecko](https://wa3.i-3-i.info/word1362.html)
【MATLAB】図の背景を透明化して保存する方法

# やりたいこと
MATLABで描画した図の背景を透明にして保存したい．

例えば、スライドの模式図に使えます．

本記事では、出力したFigureの背景を透明化してemf形式で保存する手法を紹介します。

![explanation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2122187/22ee7491-fa32-c201-39d1-b26ceaeaefb9.png)



## 例
記事の冒頭で紹介した画像の例です。この例では、波形だけを載せたい時を想定して、軸などの描画もなくしています。

```matlab:main.m
x = 0:0.01:6*pi;

fig = figure(1);
ax = gca;
plot(x,sin(x),'LineWidth',4,'Color','black');

fig.Color = 'none';
ax.Color = 'none';
fig.InvertHardcopy = 'off';

% === （任意）軸，外枠の非表示 ===
ax.Box = 'off';
ax.XColor = 'none';
ax.YColor = 'none';
% ==============================

saveas(fig,'transparent.emf')
```
## 動作環境
MATLAB R2022a
ABC224 C - Triangle? を解いた

https://atcoder.jp/contests/abc224/tasks/abc224_c

![abc224c1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/c1864681-51df-ea95-f477-e29c8ffd1a5f.png)
![abc224c2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/9fc0b4fc-7e02-ede0-89e0-afc7530173e2.png)
![abc224c3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/8f87a3d8-7f68-36f4-782b-29a83240b9c2.png)
![abc224c4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/7a64ea99-3fe9-2de2-2f11-0147e91a39c1.png)

選んだ3点が一直線上になる組み合わせを
数えて全体の組み合わせから引けばいい。

```abc224c.py
def solv():
    N = int(input())
    lis = []
    for _ in range(N):
        x,y = map(int,input().split())
        lis.append([x,y])

    from itertools import combinations
    cnt = 0
    for a,b,c in combinations(range(N),3):
        if (lis[a][1]-lis[b][1])*(lis[a][0]-lis[c][0]) == (lis[a][1]-lis[c][1])*(lis[a][0]-lis[b][0]):
            cnt += 1
    print( (N*(N-1)*(N-2))//6 - cnt)

solv()
```

計算量は 10^7 オーダーになるので、
def でまとめて、pypy で提出すればいい
英語文献の無料翻訳方法

# はじめに

英語文献をさくっと翻訳して読む方法です。

# PDFの場合

PDFの場合は、翻訳する前にAdobe Acrobat のオンライン無料コンバータでPDFからWordに変換します。

- [Convert PDF to Word online for free | Adobe Acrobat](https://www.adobe.com/acrobat/online/pdf-to-word.html)

# Wordの場合

DeepLの「ファイルの翻訳」機能でWordを日本語に翻訳します。

- [DeepL翻訳：世界一高精度な翻訳ツール](https://www.deepl.com/ja/translator)

# Excel やその他のファイル形式の場合

多様なファイル形式に対応しているGoogle翻訳のドキュメント翻訳をつかいます。

- [Google 翻訳](https://translate.google.com/?hl=ja&sl=en&tl=ja&op=docs)
比較ソートの時間計算量平均の最善値は O(n log n) か？

> Q) 比較ソートであって、平均計算量が $O(n \cdot \mathrm{log}(n))$ より良いものを思いつきますか？ また存在しないとしたらそれは何故ですか？

# ソートで許される操作は基本的に compare と swap だ。

* 抽象化されたデータ構造として HeapTree 等を使う場合でも内部的にはこの制約から逃れられない。
* swap が不要なマージソートでも、必要なのは複数の stream の先頭のうち、小さい方を決定して(Compare)、新しいストリームの先頭に追加する作業だ。


# 一方で、入力値として取り得る可能性は

$n!$ ある。

# 疑問は
これをソートする平均計算量を求めればよいが、逆に考えて、（ランダムな）swap を繰り返したときに最低何回あれば $n!$ の多様性を生み出せるだろうか？

要するに $\mathrm{log}_2(n!)$ を評価すれば良い

# 簡単に計算する

```math
\begin{align*}
\log_{2}( n!) & =\sum _{i=1}^{n}\log_{2}( i) & \because \log(a \cdot b) = \log(a) + \log(b) \\
 & < \sum _{i=1}^{n}\log_{2}( n) & \because \log_{2}( i) \ < \ \log_{2}( n)\\
 & =n\log_{2}( n) \\& \because 中身が添字\ i\ に寄らないので単純掛け算
\end{align*}
```

これで上から押さえる評価としては $n \log_{2} (n)$ で妥当だって事は解った。

# この評価は適切か？

この評価が適切か？（不十分に上から押さえていないか？）を知りたい。

やり方としては2種類あって、一つは以下の式が0では無い値に収束することを確かめるか

```math
1 > \frac{\log_2(n!)}{n\log_2(n)}
```

誤差が知れてるので積分を計算する

```math
\begin{align*}
\mathrm{log}_2(n!) = \sum _{i=1}^{n}\log_{2}( i) &∼ \int_{x=1}^{n} \log_2(x) \mathrm{d} x \\
&= \Big[x \log(x) - x + C\Big]_1^n \\
&= n \log(n)-n + 定数
\end{align*}
```
Python VSCodeで自動フォーマットを設定する

##目的

pythonの
コードフォーマッター『autopep8』と
静的解析ツール『flake8』を
利用し自動フォーマットを設定する。

##インストール
```python
pip install flake8 autopep8
```

## VSCodeの設定

VSCodeの左下のギアアイコンをクリックし
メニューを開き設定をクリックする。
![Visual Studio Code1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914798/0a66fe9a-7c38-f92a-ac8e-c7548e4c6f82.png)

###pylintを無効化する
検索バーに『python.linting.pylintEnabled』を入力すると
pylint Enabledの設定画面が表示されるので
チェックを外す
![Settings 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914798/ca8572a1-f251-c619-70c4-ab87a00896bf.png)


###flake8を有効化する
検索バーに『python.linting.flake8Enabled』を入力すると
Flake 8Enableの設定画面が表示されるので
チェックを入れる
![Settings 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914798/baa862b6-29b6-7a5a-1925-6dfa6e57fcc4.png)

###autopep8を有効化する
自動整形するフォーマットをautopep8に指定する
検索バーに『python.formatting.provider』を入力すると
Formatting provider設定画面が表示されるので
autopep8を指定する

![Settings 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914798/6df76a75-e8ee-d01b-0760-ee0736b62d21.png)


###lintOnSaveを有効化する
保存時自の動整形を有効にする
検索バーに『python.linting.lintOnSave』を入力すると
Lint On Saveの設定画面が表示されるので
チェックを入れる

![Settings 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914798/829340c5-58db-468e-84f1-67ae8b69b5c3.png)

以上の設定によりファイルを保存すると自動整形が行われます。


##flake8のエラーチェック解除一例
* flake8のエラーチェックからautopep8の一行文字数制限（79文字）を外す場合

検索バーに『flake8args』を入力すると
Flake8 Argsの設定画面が表示されるので
Add Itemボタンをクリックする
『--ignore=E501』と入力しOKをクリックする
![Settings 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914798/415cdcd0-40cf-cc29-4083-680a9759c057.png)
![Settings 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914798/2beeab87-208e-a524-e26a-971890798c81.png)
日テレルパンPart6の0話のデータ修正の件

自己責任で。

・「設定・管理」の「データベース直接編集（上級者向け）」より、foltiaアカウントでログインする。
　　(パスワードは自分で調べろ。これができないと以降はおすすめできない。)
・左上の「サーバー＞PostgreSQL＞foltia」より「foltia」を選択する。
・右上の「SQL|履歴|検索|ログアウト」のところの「SQL」を選択する。
・下記の0話更新用SQLをSQL画面のSQL入力欄にコピペして「実行する」ボタンを選択する。
　　(WHEREの行を忘れると取り返しがつかなくなるので注意する)
・もう一度、右上の「SQL」を選択する。
・下記の確認用SQLをSQL画面のSQL入力欄にコピペして「実行する」ボタンを選択する。
・0話の更新対象の4項目に値が入っていればOK。

```
--0話更新用SQL(lastupdateは各自異なるがこの内容で問題ない)
UPDATE public.foltia_subtitle 
SET 
 m2pfilename = '6141-1-20211010-0055-25.m2t'
,lastupdate = '2021-10-10 03:24:35.319407'
,filestatus = '200'
,mp4hd = 'MHD-6141-1-20211010-0055-25.MP4'
WHERE pid = 564947
```
```
--確認用SQL(0話と1話を表示)
SELECT * FROM public.foltia_subtitle
WHERE pid IN (564947,561353)
ORDER BY countno
```
ZigSimを使ってスマートフォンの側の開発をせずに傾きをUnityで取得する

スマートフォンってセンサーの塊っていうけど、実際あんまし使わないですよね

## ZigSimとは

https://zig-project.com/

アプリ画面

[![Image from Gyazo](https://i.gyazo.com/92ad33ac82aa960e0212d46b7c00661f.png)](https://gyazo.com/92ad33ac82aa960e0212d46b7c00661f)

左の画面で送信するセンサー値を選んで、真ん中の画面で実行、右はIPやPortの設定

### スマートフォンのセンサー値を取得する方法

- Webブラウザで開発
    - JavaScriptでWebsocketを使って送り、サーバ側で受け取って、Unityは値を取得しにいく
    - もしくは、JavaScriptから直接Unityに送信する
- スマートフォン向けアプリを開発する
    - KotlinとかSwiftとかで
    - Flutterとかでクロスプラットフォームで
    - むしろUnityでアプリ開発

### ZigSimを使うよさみ

**先程出したスマートフォン側の開発が一切いらないこと**

## やってみる

1. スマートフォンにZigSimアプリのインストール
2. Unityプロジェクト（今回試したバージョン：2019.4.18）作成
3. Unity上でスクリプト作成し、後述のコードをコピペ
4. GameObjectのCubeを作ってスクリプトを追加、Cubeをアタッチ
5. Unity側のコードでポート番号(LOCA_LPORT)をZigSimアプリに合わせる（デフォルト50000番だから特に操作しなくてもよい）
6. PCのIPアドレスを調べてZigSimアプリの設定から編集
7. アプリでQuaternionにチェックし、スタート
8. Unityエディター上でスタート

### ソースコード

```C#
using UnityEngine;
using System.Net.Sockets;
using System.Net;
using System.Text;

public class UDPReceive : MonoBehaviour
{
    [System.Serializable]
    public class ZigSimData
    {
        public Sensordata sensordata;
        public string timestamp;
    }
    [System.Serializable]
    public class Sensordata
    {
        public Quaternion quaternion;
    }

    public GameObject cube;
    public int LOCA_LPORT = 50000;

    private UdpClient udp;

    private readonly string testText = "{  \"device\": {    \"name\": \"unknown device (iPhone10,1)\",    \"displayheight\": 1334,    \"uuid\": \"zbmjCQARSd9oFVJ8\",    \"os\": \"ios\",    \"osversion\": \"14.7.1\",    \"displaywidth\": 750  },  \"timestamp\": \"2021_10_21_10:43:24.409\",  \"sensordata\": {    \"gyro\": {      \"y\": -0.29756850004196167,      \"x\": -0.014113557524979115,      \"z\": -0.27333009243011475    }}}";
    
    void Start()
    {
        udp = new UdpClient(LOCA_LPORT);
    }

    void Update()
    {
        IPEndPoint remoteEP = null;
        byte[] data = udp.Receive(ref remoteEP);
        string text = Encoding.ASCII.GetString(data);
        //Debug.Log(text);

        ZigSimData zigSimData = JsonUtility.FromJson<ZigSimData>(text);
        Debug.Log(zigSimData.sensordata.quaternion);
        cube.transform.rotation = zigSimData.sensordata.quaternion;
    }
}


```

## 所感

すごく簡単だった

スマートフォン側のコードはJavaScriptとかでは一応簡単だと思うけども、まったく書かないってなるのは全然印象が違うと感じました！いい感じ！

似たようなアプリで [tramontana](https://tramontana.xyz/) というのもあるので要チェックやで

[OscJack](https://note.com/hikohiro/n/ndf0bb8f93b5b) も気になる
未経験から直受け独立系SIerに転職するまでPart2

# この記事でお伝えしていること
* 未経験エンジニア転職で行きたいと思った会社の特徴(Part1)
* [スクール](https://tech-camp.in/expert/grant?utm_source=google&utm_medium=ls&utm_campaign=name&gclid=CjwKCAjw5c6LBhBdEiwAP9ejG1iwjAED30lCIk7s0IDvHxKXogUv0Alz8Rxei_7oTr71GznlqAlbhRoCVNUQAvD_BwE)は通うべきかどうか？(Part1)
* 転職活動を有利に進めるために意識したこと(Part2)
* 転職活動時に作成した実際のポートフォリオ(Part2)

# 前提
転職活動をしていく中で主に3人と**コネクションを持ちました**。
1人目は、**未経験エンジニアの採用担当**(エンジニアではない人)
2人目は、**未経験エンジニアの採用担当もしているエンジニア**(未経験でエンジニアになり、5年目くらいの人)
3人目は、**未経験からエンジニアになり3年目の人**
この方々や、**テックキャンプのキャリアアドバイザー**から聞いた話と、私の個人的な意見をベースに書きます。
質問とかあれば、答えます。私も色々な人から教えてもらったので。少しでもお役に立てれば！
##### PGMを学び始めてから内定をいただくまでの流れ
2020年11月　ProgateでRubyを学ぶ
2020年12月　[テックキャンプ](https://tech-camp.in/expert/grant?utm_source=google&utm_medium=ls&utm_campaign=name&gclid=CjwKCAjw5c6LBhBdEiwAP9ejG1iwjAED30lCIk7s0IDvHxKXogUv0Alz8Rxei_7oTr71GznlqAlbhRoCVNUQAvD_BwE)の夜間転職コースに入学
2021年4月　[テックキャンプ](https://tech-camp.in/expert/grant?utm_source=google&utm_medium=ls&utm_campaign=name&gclid=CjwKCAjw5c6LBhBdEiwAP9ejG1iwjAED30lCIk7s0IDvHxKXogUv0Alz8Rxei_7oTr71GznlqAlbhRoCVNUQAvD_BwE)のカリキュラムコンプリート＆独学で+αを学習スタート
2021年8月　転職活動スタート(テックキャンプのサポートあり)
2021年9月　第一希望の企業から内定をいただく
2021年12月　第一希望の企業にて勤務開始予定

##### 内定をいただいた企業情報(社名は控えます)
【本命】
* 独立系SIer企業
* 全件直受け
* アート、ソリューション、自社コンテンツ開発をしている会社
【その他】
SES1社・受託開発会社3社・自社開発会社2社
から内定をいただきました。
全部で20社くらい応募しました。面接に進んだのが、8社くらい。それ以外は書類選考で落ちました。書類選考が厳しいなという印象でした。

# 転職活動を有利に進めるために意識したこと
他の受講生とどう**差別化**できるか？ということを考えていました。
大きくは、2つの観点で差別化できると考えております。1つ目は、技術力。2つ目は、選考への対策
##### 技術力
+αを実施することで、学ぶことへの意欲を見せました。サーバーサイド・フロント・環境構築とバランスよく学んでおくといいのかなと思いました。(環境構築はそんなにできなかったですが。)
具体的には、下記の項目をカリキュラム以外に実施しました。

* HTTPS通信
* dockerでの仮想環境構築
* API連携
* Swiftでのアプリ制作
* ペアプログラミング

##### 選考への対策
大事なことは、2つあると感じました。1つ目は、**マイナスになることを把握し、その発言をしない。**企業側ではおそらくですが、こういう人財は取りたくないと定めているのだと考えています。それが何か？をHPや、ときには会社の人に会って聞いてみたりしました。どんな人材が欲しいかということを気にするのは、皆さんやることだと思います。
2つ目は、**技術を学ぶことへのモチベーションを伝える言動と行動を一致させること。**これからやろうと思いますっていう人に対して、私なら、どうして今やってないの？と突っ込み入れたくなるなと思っていたので、できる限り言行を一致させていました。もちろん全て一致させることはできませんがwww

# 実際のポートフォリオ
[学習成果共有アプリGithub](https://github.com/sam-19950315/tucktter1_app.git)
[学習成果共有アプリWebアプリURL](http://tucktter.tk:3000/) 
[絵本管理アプリGithub](https://github.com/sam-19950315/YOMEBA.git)は、まだデプロイできていないので、もし興味があれば、ReadMeのローカル環境構築手順を見てローカルで立ち上げてみてください。
[子どもの興味分野の測定Github](https://github.com/sam-19950315/Swift6firestore1.git)