OmniAICreator/Qiita-1.07M huggingface dataset:
安全な“デジタル通貨“を実現するなら、根本的にまず“パスワード”をなくさなきゃ（なくせます）

**はっきり言ってCBDCとか発行されても今のままだと全く安全じゃない**


ブロックチェーンネットワーク内での情報のトランザクションは安全ですよ。


ここは誤解のないように書き添えておきます。


問題なのは秘密鍵と公開鍵の運用。


ビットコインだろうがスマートコントラクトだろうがゼロ知識証明だろうがなんでもいいんですが、今ある秘密鍵と公開鍵の運用だとプライバシーは「絶対に」守られません。


量子コンピューターが悪用される時代がくれば簡単に突破されるし、一企業や通貨発行主体がネットワーク内に流通する情報を掌握することもできるのでせっかくブロックチェーンを使ってるのにまったく民主的でない。


**そもそも「パスワード使って鍵を管理したりネットワークに出入りするという発想が古い」と渡辺さんは言います**


NISTが可換アルゴリズムをベースとしたポスト量子技術の標準化を一生懸命進めてますが、まだいろいろ課題山積で実現できてないです。


ファイナリストこそ決まりましたがどのアルゴリズムも「計算困難性」に依存したもので根本的な解決にはならない。


一方、渡辺さんの発明は非可換アルゴリズムに注目しこのあたりを華麗に解決済みです。


>[強いて言えばこれは「ポストゼロ知識証明」という発明。事業者やユーザーは量子コンピュータによる未来の攻撃に対し完璧にリスクフリーになる](https://note.com/kosaka_/n/n6a54e3498cea)


ものすごく簡単に表現すると「そもそも鍵が必要ないので攻撃対象がない」というもの（確かこういう表現をしてたはず）。


せっかくなんでこの際こっち使えばいいのに、と思うんですがやっぱりいろいろ大人の事情があるんでしょうか。


**「うちのブロックチェーンはプライバシー保護できてます」はちょっとまだ信用しない方が・・・**


不安を煽るわけでも喧嘩売るわけでもまったくありません。


そりゃ事業者側はみんなそう言うでしょうが、そう言いながらプライバシーがダダ漏れする事件が未だに後をたたないわけです。


これがCBDCみたいなデジタル通貨で起きたらたいへんどころの騒ぎじゃなくなります。


本当のより良い未来を描いている企業が、渡辺さんの発明に目を留めてくれればいいなと思います。


聡明な方、連絡をお待ちしてます。


==================


**アクセスが多い他の記事**


**【多変数(量子耐性)暗号方式の特許を使って事業創造したい方求む！】**
- 標準化されるべきメイドインジャパンの知財です。
- ブロックチェーンの強力な補完技術でもあります。
- キーワードは＝**データ管理の主権をユーザー側に**。
- GAFAM超えを目指せます。


>→[記事①:渡辺さんの特許「多変数暗号方式＝量子耐性」が備わるとブロックチェーンは真価を発揮して最強になる](https://note.com/kosaka_/n/nba6d69d8b5d5)


>→[記事②:渡辺さんの特許「多変数(量子耐性)暗号✖️ブロックチェーン」で「発言歴が消えない」「絶対に乗っ取られない」「事業者をみんなでチェックする」民主的なSNS（事業創造パートナー求む）](https://note.com/kosaka_/n/n76c259e42f65)


>→[記事③:強いて言えばこれは「ポストゼロ知識証明」という発明。事業者やユーザーは量子コンピュータによる未来の攻撃に対し完璧にリスクフリーになる](https://note.com/kosaka_/n/n6a54e3498cea)


**【僕の略歴】**
- 新潟で面白いことやりましょう！


>→[記事①:何かワクワクできることを一緒にやりましょう](https://note.com/kosaka_/n/ne312cba752ba)


>→[記事②:新潟で面白いことやりましょう！](https://note.com/kosaka_/n/na8dc65342b29)


>→[記事③:地方ベッドタウンの宅地210坪を「坪47円」で買えた理由とその秘訣](https://note.com/kosaka_/n/nab5e7d013d28)


**【連絡先】**
- 遠慮なくメールください！
- メール→ tadahide@protonmail.com
- ライン→ tora3307tora
- twitter→@Tadahide_Kosaka
【kintone】グラフ機能でサブテーブルのフィールドを使う

今回は、とある受注アプリ（仮）についてグラフを描いてみる試みです。
サブテーブルのフィールドもグラフの設定に使ってみたいと思います。

# アプリの準備
たとえばkintoneでこんな受注アプリを作ったとします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/b7a56d1e-db81-a97d-e69f-06d84b8ed74d.png)

**フィールド詳細**

| フィールド種類 | フィールドコード | 計算式 |
|:-:|:-:|:-:|
| 文字列(1行)  | 案件名  |   |
| 文字列(1行)  |  顧客名 |   |
| 文字列(1行)  | 月  |   |
|  計算 | 合計  | SUM(小計)  |


**テーブル**
※商品ルックアップはなくてOKです

| フィールド種類 | フィールドコード | 計算式 |
|:-:|:-:|:-:|
|文字列(1行)  | 商品名  |   |
|  数値 | 単価  |   |
|  数値 | 数量  |   |
|  計算 | 小計  |  単価*数量 |

## レコード

こんな感じでレコードを追加しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/1b5d2fdf-6070-1dc1-e01e-a263c100945a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/5821183c-409c-e194-b94e-6d7e9a5bf243.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/bc839005-30bc-36b4-0963-660c970e3520.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/c74415e4-6eb2-3eec-5a8a-45ff88ec7fd2.png)


# 案件、月、商品別の金額クロス集計表
例えばこんな感じのクロス集計表を描くことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/f2028ce5-1bef-1f07-4c0d-565c706f7ccd.png)

一覧と比べてみると、合計と、合計（案件名）の金額は一致している事がわかります。

X案件：47000
B案件：28000
A案件：3900+1300=5200

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/e66befc1-11b2-15fb-65da-918d94cb6ba2.png)


商品名で分類しているので、集計方法の合計に「小計」を選択する
というのがポイントです。

| 設定項目| 設定内容 | 
|:-:|:-:|
|グラフの種類   |クロス集計表   |   
|分類する項目（大項目）   |月   |   
|分類する項目（中項目）   | 案件名  |   
|分類する項目（小項目）   | 商品名  |   
| 集計方法  | 合計、小計  |   


# 顧客ごとの商品別金額集計

顧客ごとにどの商品がどのくらい売れてるかな～というのが見たかったら・・・・

例えば、100％積み上げグラフで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/7d58ac98-eecf-1269-d3a3-8553c4397dd7.png)

クロス集計表で
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/13e79887-989b-6221-36fc-9fee515dc58d.png)

| 設定項目| 設定内容 | 
|:-:|:-:|
|グラフの種類   |クロス集計表 or 縦棒グラフ（100％積み上げ）   |   
|分類する項目（大項目）   |顧客名   |   
|分類する項目（中項目）   | 案件名  |   
|分類する項目（小項目）   | 商品名  |   
| 集計方法  | 合計、小計  |  

# まとめ
サブテーブルのフィールドもグラフの設定に使用できるので是非使ってみてくださいね！
Rails　はじめての正規表現

# はじめに
本記事はRailsにおける正規表現の簡単な表現方法や、実際に使うシーンに合わせて具体例を紹介するものです。正規表現についてほとんど理解のない方に向けて書いておりますので本記事を読むことで正規表現の知識がグッと深まる。ということはありません。一方で、正規表現を使いたいけど、全然わからない。という段階の方にとっては少しは役に立つかと思いますので、その点を理解いただいた上で、お読みください。
なお、筆者も学び始めにつき、間違った表現などございましたら、ご指摘をいただけると幸いでございます。よろしくお願いいたします。

## 正規表現とは
「多数の文字列の集合を一つの文字列として表現すること（Wiki）」ですが、主な用途としては入力フォーム等で特定のパターン（英数字・大文字小文字など）を指定したい時などに用います。Railsで使用する際は、モデルでバリデーションに正規表現を適用し用いることが一般的です。

##実際のモデルへの書き方
```ruby
class Test < ApplicationRecord
  validates :name format: { with: /\A[ぁ-んァ-ヶ一-龥々]+\z/ }
end
```
上記の例の場合、正規表現を適用させたいのはnameカラムです。`format:`に続けて{}を記述します。
{}内の`with:`に続けて記載されている`/\A[ぁ-んァ-ヶ一-龥々]+\z/ `が正規表現の一例です。
※これは「全ての日本語」を指定しています。
この場合、nameカラムは「全ての日本語の入力を許可する」といういう意味合いになります。

この`/\A[ぁ-んァ-ヶ一-龥々]+\z/ `にあたる箇所を書き換えることにより、入力フォーム等に様々な制約をかけることができます。

## 基本的な表現方法のご紹介
正規表現に用いる表現は多岐にわたり、全てを理解することは極めて困難です。
以下に、難解な正規表現のなかで私が特に理解しやすいと感じたものをピックアップしてみました。
細かな表現は、本記事の末、**引用**に公式リファレンスのリンクを設置してありますので、さらに細かな表現方法を学びたい方はそちらもチェックしてみてください！

● **文頭と文末の/**
「/から/までの範囲が正規表現ですよ」という、始まりと終わりを表します。
● **.**
どの1文字にもマッチということを表します。（改行は除きます）
● **[a-c]**
a,b,cまでの半角英小文字のうち、いずれかの文字が出現すればマッチということを表します。（-は範囲を示します）
● **\d**
半角数字であればマッチということを表します。
● **\w**
半角の文字・数字・アンダースコアにマッチということを表します。
● **c{3}**
cが3回連続して出現すればマッチということを表します。
● **c{3,5}**
cが3回以上5回以下、連続して出現すればマッチということを表します。
● **(d|e|f)**
dまたはeまたはfが出現すればマッチということを表します。
## パターンのご紹介
開発しているアプリやサイトで入力フォームを作ることを想定し、「パスワード」「電話番号」「郵便番号」の3つの使われそうなパターンを以下でご紹介します。
### ◉パスワード
```ruby
#半角英数字いずれかが6文字以上 ※大文字小文字の区別なし
/[a-z\d]{6,}/i
#半角英数字混合で6文字以上 ※大文字小文字の区別なし
/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{6,}+\z/i
#半角英数字大文字小文字混合で6文字以上
/\A(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)[a-zA-Z\d]{6,}+\z/
※{6,}の部分を{6,10}にすると、「6文字以上１０文字以下」と表現することもできます
```
### ◉電話番号
```ruby
#半角数字ハイフンなしで10桁or11桁
/\A\d{10,11}\z/
#(3桁ハイフン4桁ハイフン4桁)の半角数字 ※携帯電話を想定
/\d{3}-\d{4}-\d{4}/
#「市外局番2から4桁、ハイフンもしくは丸カッコ、市内局番1から4桁、ハイフンもしくは丸カッコ閉じ、加入者番号4桁」の並びの半角数字
/\d{2,4}[-(]\d{1,4}[-)]\d{4}/
※これは完全な形ではなく、03-3333)1111などいびつな形でも通ってしまいます
作りたい入力フォームにどの程度の制限をかけたいかによって、より精密、もしくは簡素な記述が必要になります
```
### ◉郵便番号
```ruby
#7桁の半角数字
/\A\d{7}\z/
#3桁ハイフン4桁の半角数字
/\A\d{3}[-]\d{4}\z/
#3桁ハイフン4桁の半角数字、もしくはハイフンなしでの7桁の半角数字
/\A\d{3}[-]\d{4}$|^\d{3}[-]\d{2}$|^\d{3}$|^\d{5}$|^\d{7}\z/
```
# さいごに
正規表現をマスターするのはとても難しいと思います。私のお勧めとしては、Rubularのようなサイトで実際に手を動かしながら学ぶことで、これだと「あ、この表現だとこれはOKでこれはダメなんだな...」と頭で考えるだけよりも早く理解することができます。開発しているアプリやサイトで正規表現を用いるシーンがある際は、本記事が少しのご参考になればよいなと思っております。
# 引用
記事を書くにあたり、参考にさせていただいたものです。
>* [Rubyリファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/doc/spec=2fregexp.html#quantifier)
>* [Rubular(Rubyの正規表現を簡単にテストできるサイト)]
(https://rubular.com/)
>* [nashirox様 githubリポジトリ](https://gist.github.com/nashirox/38323d5b51063ede1d41)
>* [@jnchito様 初心者歓迎！手と目で覚える正規表現入門・その１「さまざまな形式の電話番号を検索しよう」](https://qiita.com/jnchito/items/893c887fbf19e17d3ff9)
var, let, constの違い

# var, let, constとは
var, let, constは次の例のようにいずれもJavaScriptで変数を宣言する際に使うキーワードですが、これらをどのように使い分けたら良いのか。そのポイントをまとめます。

```javascript

var fruit = 'apple';
let fruit = 'apple';
const fruit = 'apple';
```
## letとconstは新しい記法
varは昔から変数の宣言に使われていたキーワードで、letとconstは現在（執筆当時2021年）のJavaScriptの標準仕様であるECMAScript2015で新たに導入されたキーワードです。

## var, let, constの違い

これらのキーワードの機能的な違いは「再代入、再宣言、スコープの範囲」にあります。それを次の表にまとめました。

|  | 再代入 | 再宣言 | スコープの範囲 |
|:-:|:-:|:-:|:-:|
| var  | ○  | ○  | 同一関数内  |
| let  | ○ | × | ブロック内 |
| const  | × | × | ブロック内 |

再宣言だけでなく、再代入も許されないconstはその名の通り、定数（constant）を扱うためのキーワードです。この表から分かるように変数の中身を適切に管理する観点から、現在varを使うことは推奨されていないようです。

## GASでV8ランタイムがサポート
現在のGASではJavaScript開発エンジンであるV8ランタイムがサポートされ、それに伴い最新のECMAScriptが使えるようになりました。

そのためGASでの開発も、定数のように再代入の可能性のない変数の宣言にはconstを使い、そうでない変数の宣言にはletを使えば十分だと言えそうです。

## 参考文献

* [詳解!GoogleAppsScript完全入門（第2版）](https://www.amazon.co.jp/Google-Apps-Script完全入門-GoogleアプリケーションとGoogle-Workspaceの最新プログラミングガイド/dp/4798063339/ref=sr_1_1?__mk_ja_JP=カタカナ&crid=1LK5C96ZJ323Q&dchild=1&keywords=google+apps+script完全入門&qid=1615370054&sprefix=google+apps%2Caps%2C254&sr=8-1)
* [JavaScriptで書く「var,let,const」の違いと使い分け方法](https://techacademy.jp/magazine/14872)
* [ES2015（ECMAScript 2015）とは何か](https://thinkit.co.jp/article/10434)
* [祝！Google Apps Scriptが「V8ランタイム」をサポート！モダンなECMAScript構文が使えるようになった](https://tonari-it.com/gas-v8-runtime/)
【Ruby】link_toのdestroyアクションが機能しないときの対処法

Ruby on RailsでDBのCRUD操作ができるアプリケーションを[公式のチュートリアル](https://guides.rubyonrails.org/getting_started.html#crudit-where-crudit-is-due)に沿って作成していたが、**削除（destroy）ができない**症状が発生したので、その対処法。


##結論
`link_to`を**`button_to`に変更**すると動く。


ただし、デザインが変わる。link_toを使いたかったが、ググっても回答はでてこず。

rails 6以前でも似た症状がでていて、jQueryをオフにするだの、application.jsの一部をコメントアウトするとだのといった解決策が提示されていたが、version 6では該当箇所が存在しない。

####confirmも使えない
なお、`button_to`では確認ダイアログを表示する、`data: {confirm: "アラート内容"}`が使えない。

頼むぜrailsさん、、



##症状

ルートはリソースフルを使用。

```rb:routes.rb
Rails.application.routes.draw do
  resources :articles
end
```

```:ルーティングの確認
$ bin/rails routes
      Prefix Verb   URI Pattern                  Controller#Action
        root GET    /                            articles#index
    articles GET    /articles(.:format)          articles#index
 new_article GET    /articles/new(.:format)      articles#new
     article GET    /articles/:id(.:format)      articles#show
             POST   /articles(.:format)          articles#create
edit_article GET    /articles/:id/edit(.:format) articles#edit
             PATCH  /articles/:id(.:format)      articles#update
             DELETE /articles/:id(.:format)      articles#destroy
```

DELETEメソッドでdestroyアクションが実行されるようになっている。


<br>
####コントローラのdestroyアクション

```rb:articles_controller.rb
  def destroy
    @article = Article.find(params[:id])
    @article.destroy

    redirect_to root_path
  end

  def edit
    @article = Article.find(params[:id])
  end
```

渡されたパラメータに該当するデータを取得して、destroyメソッドで削除するというシンプルな処理。


<br>
####ビュー
link_toでdeleteメソッドを指定してdestroyアクションを実行するように指定。

```erb:show.html.erb
  <li><%= link_to "Destroy", article_path(@article),
                  method: :delete,
                  data: { confirm: "Are you sure?" } %>
```

これを実行しても、destroyアクションにとばず、GETメソッドでeditアクションが実行されてしまう、、


##解決策
`link_to`を`button_to`に変更

```erb:show.html.erb
  <li><%= button_to "Destroy", article_path(@article), method: :delete } %>
```

確認ダイアログを表示するconfirmが機能しないので削除。


<br>
以上。
多相バリアントでopen recursion

[OCamlでも（オブジェクトもrefも使わずに）Open Recursionしたい！！・・・したい？？ - Arantium Maestum](https://zehnpaard.hatenablog.com/entry/2021/03/10/083026) に刺激を受けたので、多相バリアントでopen recursionする方法をメモ。

問題設定としては、よくある感じの整数の和と積がある言語の評価器を拡張可能にする。

```ocaml
type t =
  | Lit of int
  | Add of t * t
  | Mul of t * t

let rec eval = function
  | Lit i -> i
  | Add (l, r) -> eval l + eval r
  | Mul (l, r) -> eval l * eval r
```

まずは個々のバリアントタグを多相バリアントにばらして型を定義し、それぞれの評価関数を定義する。

リテラルに関しては何も考えずに定義するだけ。

```ocaml
type lit = [`Lit of int]

let eval_lit = function
  | `Lit i -> i
```

加算については、型定義で自分自身を参照すると再帰が閉じてしまうため、再帰部分は型パラメータで穴にしておく。うっかり再帰しないように `nonrec` をつけておいてみる。

```ocaml
type nonrec 't add = [`Add of 't * 't]
```

評価関数も同様に、 `rec` は付けず再帰的に部分木をたどる関数を外から与えるようにする。

```ocaml
let eval_add eval_rec = function
  | `Add (l, r) -> eval_rec l + eval_rec r
```

乗算も可算と同様に。

```ocaml
type nonrec 't mul = [`Mul of 't * 't]

let eval_mul eval_rec = function
  | `Mul (l, r) -> eval_rec l * eval_rec r
```

最後に `let rec` で再帰を閉じる。

```ocaml
type t = [ lit | t add | t mul ]

let rec eval : t -> int = function
  | `Mul _ as m -> eval_mul eval m
  | `Add _ as a -> eval_add eval a
  | `Lit _ as l -> eval_lit l
```

減算や除算を追加する場合もここまでと同様にすればよい。

ちなみに、この `eval` の型注釈は必要ない（というか、他の多相バリアント関連の型定義もすべて必要ない）。型注釈をつけなくても ``([< `Add of 'a * 'a | `Lit of int | `Mul of 'a * 'a] as 'a) -> int`` のような型が推論される。

動かしてみる。

```ocaml
module M = struct
  let ( * ) x y = `Mul (x, y)
  let ( + ) x y = `Add (x, y)
  let i n = `Lit n
end

let () =
  Printf.printf "%d\n" @@ eval M.(i 3 + i 42 * i 5)
(* -| 213 *)
```

# 参考文献

* [Code reuse through polymorphic variants.](https://www.math.nagoya-u.ac.jp/~garrigue/papers/variant-reuse.pdf) 元ネタ。多相バリアントをつかってラムダ計算の評価器を実装している
[rails db:migrate]Mysql2::Errorを簡単に解決する方法

# rails db:migrateでエラーになる原因　：文字数制限によるもの

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

Mysql2::Error: Specified key was too long; max key length is 767 bytesになるのはconfig/database.ymlの文字コードがutf8mb4のままだからです。
以下のようにutf8に変更しましょう。
[![Image from Gyazo](https://i.gyazo.com/6e600b7bd3456fac4b05a95c27389561.png)](https://gyazo.com/6e600b7bd3456fac4b05a95c27389561)


再度```rails db:migrate```を実行するとこのエラーは出ないはずです。
Anaconda パッケージ アップデート方法

# Anacondaのアップデート方法
毎回ググるので、自分のメモ用に
Anacondaを利用して、pythonのパッケージやAnaconda本体のアップデートをする

Anacondaを利用している場合、pip install xxだと上手くいかない
Anaconda Promptを起動して、以下を入力する
(Anacondaのコマンドプロンプトみたいなやつ,黒いの)


# パッケージのアップデート
すべてのパッケージをアップデートする場合
(自分はいつもこれを使用している)

```python
conda update --all
```


特定のパッケージのみアップデート

```python
conda update pandas matplotlib
```
スペース区切りで複数可能


# Anaconda本体のアップデート
```python
conda update -n base conda
```


# パッケージのインストール/アンインストール
```python
conda install pandas
```

```python
conda uninstall pandas
```

<br>
https://docs.anaconda.com/anaconda/
https://docs.anaconda.com/_downloads/9ee215ff15fde24bf01791d719084950/Anaconda-Starter-Guide.pdf
https://github.com/conda/conda
Find Numbers with Even Number of Digits  〜leetcode〜

#〜問題文〜
```
Given an array nums of integers, return how many of them contain an even number of digits.
 

Example 1:

Input: nums = [12,345,2,6,7896]
Output: 2
Explanation: 
12 contains 2 digits (even number of digits). 
345 contains 3 digits (odd number of digits). 
2 contains 1 digit (odd number of digits). 
6 contains 1 digit (odd number of digits). 
7896 contains 4 digits (even number of digits). 
Therefore only 12 and 7896 contain an even number of digits.
Example 2:

Input: nums = [555,901,482,1771]
Output: 1 
Explanation: 
Only 1771 contains an even number of digits.
 

Constraints:

1 <= nums.length <= 500
1 <= nums[i] <= 10^5
```

引用元：　https://leetcode.com/problems/find-numbers-with-even-number-of-digits/
　　


## 〜1時間かけて私が作った回答の残骸😇〜

```ruby

# @param {Integer[]} nums
# @return {Integer}
def find_numbers(nums)
    nums.each do |i|
        nums_count = nums.length
        num_count = i.length 
        array = []
        (0..nums_count).each do |n|
            while 0 != (num_count-1) do
              arreay [num_count] 
              
                
            end
             array =  
        end
    end
  end
  return #偶数の数
end

# nums = [555,901,482,1771]
# find_numbers(nums)



# 555 => 5,5,5 =>  5%2 != 0（奇数）　・　5%2 == 0（偶数）

# 数字の配列nums
# 偶数の数字の数を返しなさい
#  nums<i<
# 10**(num_count-1)

```

今できる精一杯のコーディングでした。悔いはありません。。。。😇


## 他の人の回答例（正解ではない）

さっき気づいたんですけど、leetcode　の　problem / discussって 「正 解」 じゃないんですね 笑
高確率でエラーが起こります 笑
なので他の人の回答を見て参考にしつつ、改善案と気づきを書いていくことにします。

```ruby
def find_numbers(nums)
  keepers = []
  nums.each do |n|
      if n.to_s.length % 2 == 0
          keepers.push(n)
      end
  end
   return keepers.count
end

```

回答例引用元（一部改変）：
https://leetcode.com/problems/find-numbers-with-even-number-of-digits/discuss/499246/Simple-Ruby-solution
#以下、上記回答の分解分析


## 1. メソッドの定義

```ruby

def find_numbers(nums)
         
         〜省略〜

end
```

 
「find_numbers」というメソッドを定義。
仮引数＝「nums」と定義する。


## 2. メソッドの処理

```ruby

    keepers = []
```

空の配列「keepers」を定義する。


```ruby

    
    nums.each do |n|
      
        〜省略〜

    end
   
```
　配列numsの要素数ごとに繰り返し処理をする。
　ブロック変数を「ｎ」として、繰り替えじ処理を行う。



```ruby

    
      if n.to_s.length % 2 == 0
          keepers.push(n)
      end
      
```

【if】
もし、n.to_s.length % 2 == 0 (数字の文字数が偶数)　であったら、配列 「target」 に 「ｘ（=nums[indx]）」を加算していく。

【else】
そうでなければ何もしない（処理なし）。

### ↑きっとここがおかしいポイント！

👌本来は、分解した一桁の整数が偶数の物をカウントしなければならない。
（例：243　→　[2,4,3]→偶数は2つ）

🙈しかし、本回答では桁数が偶数かどうか判別しているコードになっている。
（例：243　→　[2,4,3]→桁数は「偶数じゃない」）


```ruby


   return keepers.count

```
keepers.countでkeepersの文字数を返す。
SSR調査クエストについての報告

# はじめに
 最近nuxt.jsで自身のブログサイトを作ったり、next.jsでアプリを作ったりしてSSRについて調べることが増えてきました。SSRを調べていく中で、前提知識の不足により全体の流れが掴みづらかったためまとめました。

# 調べる前・調べた後に整理しておきたかったこと
- reactは仮想DOMを使用しており、仮想DOMはクライアント側でjavascriptにより実行される。nextは仮想DOMをサーバー側で生のHTML(RAW HTML)にしてクライアントに返す。(これについてfirebaseのyoutubeの解説でreactでSSRをしてみる的な動画があった気がします。分かりやすかったのでおすすめです。)

- SSRをしても全てのjavascriptが読み込まれるわけではなく、クライアント側で読み込み・実行されるjavascriptが少なからずある。（nextjs公式にあった例だとLinkタグは、クライアント側でjsが読み込まれ、実行されると有効になる。）

- クライアントでjavascriptが読み・実行されて、機能が有効になるまでのことをハイドレーション(hydration)という。

- クライアントであるブラウザは、htmlを読み込んで画面にUIを表示させるのは得意でそこは早い。だからSSRによりhtmlを生成する意味がある。（クローラーが理解しやすくてSEOがよくなるとか、htmlだけだからセキュリティ的にいいとか、他にも色々意味はあるけどSSRを理解するためにはあんまりピンとこなかった）

# 説明が分かりやすかった記事一覧
図やアニメーションで解説されている記事は全体の流れ見えていいですよね。

## [firebase公式youtubeによる解説](https://www.youtube.com/watch?v=GQzn7XRdzxY&t=76s&ab_channel=Firebase)
英語わからんなんですが、1分42秒からいい感じにCSRと比較したアニメーションが見れます。

## [nextjs公式の解説](https://nextjs.org/learn/basics/data-fetching)
これも英語わからんなんですが、セクション３からnextjsの機能についての解説に交えながらSSRの説明もされています。

## [apollo client公式の解説](https://www.apollographql.com/docs/react/performance/server-side-rendering/)
これも英語わからんなんですが、実際にSSRを使用したwebアプリを作る時に、ページによってSSRを使用したりしなかったり、状態が更新された時にどうするのとか迷ったときにみるとわかった気になれます。

# 終わり
最近、SSR・CSR・SSGに加えて、ISR（Incremental Static Regeneration）とかRSC（React Server Components）が出てきました。「DAI語かよ！！」と、銀魂の剣八の声でツッコミたいですが、いろんな技術や考え方が登場してくるのは面白いと思いました。
git push origin masterができない！master → mainに変更

# はじめに
GitとGitHubを用いて、ファイルのバージョン管理（変更の管理）をしようとした時の話。

# 状況
ファイルの内容を変更し、ターミナルにて、`git add .`、`git commit`の順に入力し、いざ、リモートリポジトリにpushしようと`git push origin master`コマンドを実行しようとしたら、以下のようなエラーが出ました。

```言語:ターミナル
error: src refspec master does not match any
error: failed to push some refs to 'https://github.com/Gitユーザー名/ファイル名.git'
```

# 原因と解決
試しにブランチ名を確認するため、`git branch`コマンド実行すると、`*main`と表示がされました。
あれ、`*master`じゃないの？と思い、調べてみると、
> GitHub、これから作成するリポジトリのデフォルトブランチ名が「main」に。「master」から「main」へ変更

という記事を見つけました。以下参照。
https://www.publickey1.jp/blog/20/githubmainmastermain.html

ですので、ターミナルにて、`git push origin master`ではなく、`git push origin main`と入力すると、無事リモートリポジトリにpushすることができました！
certbotの導入手順が新しくなっていた件

先日`HTTP/3`と`QUIC`に対応した`NGINX`を構築している際に`certbot`の導入手順が変わっているのに気が付きました。
後追いかもしれませんがせっかくなので記事にしたいと思います。

新しい`certbot`で`Nginx`をサクッとセキュアにしていきましょう。

# 何が変わったのか
以前は`apt`や`yum`なんかでインストールしていたと思いますが、新しく`snap`でインストールするようになりました。

>The Certbot snap supports the x86_64, ARMv7, and ARMv8 architectures. While we strongly recommend that most users install Certbot through the snap, you can find alternate installation instructions [here](https://certbot.eff.org/docs/install.html).

ということで、`snap`でインストールすることが**強く**推奨されるそうです。
`snap`とは、`apt`等の上位互換みたいなものですが、それらより柔軟に運用できるそうです。
なんでも、`Certbot`のチームとしては頑張っているけどポリシーやリソースの問題やらで`apt`等経由では最適な状態を維持できないそうです。

# 環境

`AWS Lightsail`上の`Debian`で行っていきます。
ドメインの取得及び設定が完了していることを前提とします。

```
$ uname -a
Linux ip-***-***-***-*** 4.19.0-14-cloud-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) x86_64 GNU/Linux
$ nginx -v
nginx version: nginx/1.19.7
```

# `snap`のインストール

`apt`でサクッと入ります。

```bash
sudo apt update
sudo apt install snapd
```

# 下準備

「インストール出来たら必ず更新してね」とのことです。

```bash
sudo snap install core; sudo snap refresh core
```

「もし`apt`とかでインストールしてたら削除してね！」とのことです。

```bash
sudo apt -y remove certbot && sudo apt -y autoremove
```

もしくは`sudo dnf remove certbot`または`sudo yum remove certbot`で削除します。

`apt purge`すると既存の証明書が消えて厄介なことになります。（体験談）
同じ過ちを犯してしまった人は、`nginx`の設定ファイルから、証明書（`ssl_certificate`）とHTTPSの待ち受け（`listen ... ssl`）をコメントアウトして再発行すればよいです。

# `certbot`のインストール

それでは`snap`経由で`certbot`をダウンロードしていきます。

```bash
sudo snap install --classic certbot
```

コマンドで実行できるようにシンボリックリンクを貼ります。

```bash
sudo ln -s /snap/bin/certbot /usr/bin/certbot
```

# 証明書発行

`certbot`の自動設定は確かに優秀なのですが、僕は既に設定を完成させてあり、いじられたくないので認証のみにします。
もちろん新規の場合などは自動設定でもよいと思います。
自動設定だとコマンドを実行するだけで`HTTPS`が待ち受けできるようになります。

いずれも対話型プロセスで分かりやすいのでよく読んで進めば問題ありません。

```bash
# 認証のみ
sudo certbot certonly --nginx
# 自動設定
sudo certbot --nginx
```

以下のような表示が出れば証明書は正しく発行されています。

```
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   ...
```

# 自動更新テスト

`certbot`は証明書の自動更新をしてくれます。

```bash
sudo certbot renew --dry-run
```

`Congratulations, all simulated renewals succeeded:`と表示されれば問題ありません。

# おわりに

サクッと新しい方式に移行できました。
こんな手軽に暗号化ができるなんて有難い時代ですね。

逆に、こんな手軽に暗号化ができるのだから未対応のサイトはすべて対応してくれ。
マジで。

`HTTP`しか対応していない企業サイトとか、どんな経営方針なんでしょうか。
ブラウザから締め出されてエンゲージメントが悪化するなど、百害あって一利なしだと思うのですが、それはまた別の話です。

最後までお読みいただきありがとうございました。
先輩PMから教わったプロジェクト成功の為に心掛けるべき重要なこと

# はじめに
プロジェクト管理に携わるようになって僕が大事だと感じたことをまとめておきます。
<br>
当たり前だけど、なかなかできない。できていない。

----
# 大切なこと
・期限を切った仕事は必ず状況確認をする。
・質問は基本的にクローズドな質問をする。
・落とし所を明確に自分の中にもちながら話をする。
・オンラインで話す時は、なにか画面共有を必ずする。
・話していることは、共有しているものにメモを取りながら。
・Wikiに決まっていることなどをまとめる。
・準備をやりきる。
・タスク管理は、自分で行う意識。
・いまできることに本気で向き合っていく。
・スピード。

---
## 期限を切った仕事は必ず状況確認をする。

当たり前だが、なにか作業やタスクに期限を切ったらその期限がすぎる前に状況を確認する。


---
## 質問は基本的にクローズドな質問をする。

お客様はもちろん、社内の人にも「どうしますか？」みたいな質問をしがち。

「Aであっていますか？」という質問を心がける。

---
## 落とし所を明確に自分の中にもちながら話をする。
お客様や社内でMTGをするときに、自分はどういうところにこのMTGの時間を着地させたいのか常にイメージしておく。

---
## オンラインで話す時は、なにか画面共有を必ずする。
なにか決めたり、確認したいことがある場合は必ずなにか資料などを画面共有し、いまどこのなにについて話ているのかをわかる状態にする。

---
## 話していることは、共有しているものにメモを取りながら。
画面共有しているのであれば、そこにメモを取る。

---
## Wikiに決まっていることなどをまとめる。
プロジェクト管理をしていると、資料が散乱しがち。(いまのぼくは）

だから、どんなことがあってもGitlabやGithubのWikiにまとめるという意識を持つ。
まとめる。

----
## 準備をやりきる。
やりきる。
提案プレゼンの練習
資料作成
すべて全力で向き合う。そうすれば自分に何が足りないか見えてくる。
それを潰せばいい。

---
## タスク管理は自分で行う。
これは、例えば上の立場の人がいるとその人がやってくれると甘えがちになる気がする。
すべて、自分のタスクは自分で管理する意識でいること。

TorellやGithub Gitlabでのタスク管理も自分のタスクは必ず自分で責任を持って管理する。
チケットを切っているのであれば、自分で動かす。

---
## いまできることに本気で向き合っていく。
すべて本気で向き合う。

---
## スピード
Slackでなにか連絡がきたら、10秒以内に返事してやるくらいの意識でいていい。

ただ、考えるべきことや確認するべきことの見極めは重要。

---
# まとめ
- 自分がどうしたいのかという考えを常に明確に持つ
- 全力で向き合う。だめならだめで次改善すればいい。
- スピード

がんばりましょう。
たった6行のcheckstyle設定があなたのチームとプロジェクトの未来を決める

```
<module name="FileLength">
    <property name="fileExtensions" value="java"/>
    <property name="max" value="500" /><!-- 本当は400でもいいくらい -->
    <message key="maxLen.file"
        value="{0}行あります。許される行数は{1,number,integer}までです。長過ぎるコードはあとで変更するときの恐怖心がマシマシ。ダメ。絶対。" />
</module>
```

参考: https://checkstyle.sourceforge.io/config_sizes.html#FileLength
最近のPHPDocでの型の書き方

最近のPHPDocでの型の書き方が覚えられないので、まとめておきます。

# 配列

## キーと値の型

キーが`TKey`、値が`TValue`：

```php
/**
 * @param array<TKey, TValue> $array
 */
```

キーが`int`、値が`string`：

```php
/**
 * @param array<int, string> $array
 */
```

## オブジェクトっぽい配列

以下の配列の場合、

```php
$array = ["hello", "world", "foo" => new stdClass, 28 => false];
```

以下のように書きます。

```php
/**
 * @param array{0: string, 1: string, foo: stdClass, 28: false} $array
 */
```

オプションのキーには`?`を最後に付けます。

```php
/**
 * @param array{optional?: string, bar: int} $array
 */
```

# スカラー

## 配列のキー

`array-key`は`int`と`string`のスーパータイプです。

```php
/**
 * @param array-key $key
 */
```

## 正の整数

```php
/**
 * @param positive-int $positiveInt
 */
```

## クラス文字列

```php
/**
 * @param class-string $classname
 */
```

型を指定することもできます。

```php
/**
 * @param class-string<A> $classname
 */
```

## callable文字列

```php
/**
 * @param callable-string $callable
 */
```

# 参考

- [Atomic Type Reference - Documentation](https://psalm.dev/docs/annotating_code/type_syntax/atomic_types/)

---

[![クリエイティブ・コモンズ・ライセンス](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/deed.ja)
この記事は[CC BY-SA 4.0（クリエイティブ・コモンズ 表示 4.0 継承 国際 ライセンス）](http://creativecommons.org/licenses/by-sa/4.0/deed.ja)の元で公開します。
Modelerデータ加工Tips#03コード

## Modelerデータ加工TIPS＃03 出題用サンプルコード


```python:python
stream = modeler.script.stream()

node = stream.create("userinput", u"ユーザー入力")
node.setXYPosition(100,100)
node.setPropertyValue("names", [u"故障",u"$-故障"])
node.setKeyedPropertyValue("data", u"故障", "1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0")
node.setKeyedPropertyValue("custom_storage", u"故障", "Integer")
node.setKeyedPropertyValue("data", u"$-故障", "1 1 1 1 0 1 1 1 1 0 1 0 0 0 0 1 0 0 1 1")
node.setKeyedPropertyValue("custom_storage", u"$-故障", "Integer")
node.setPropertyValue("data_mode", "Ordered")
node.setKeyedPropertyValue("type", u"故障", "Flag")
node.setKeyedPropertyValue("type", u"$-故障", "Flag")
```

スクリプトの手順はメニュー>ツール>ストリームのプロパティ>実行で以下のスクリプトをコピー＆ペーストし再生ボタンを実行

<img width="700" alt="dp-03-img32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/46c7b987-09a3-8fd4-e86d-59da8faba6bb.png">


出題は以下の記事にあります。

https://www.ibm.com/blogs/solutions/jp-ja/modeler-tips-03/
Android: EditText で IME (ソフトウェアキーボード) の変換中・入力中の文字列を確定させる

Kotlin コードから、IME (ソフトウェアキーボード) の変換中・入力中の状態を確定させる。
コンテンツの送信ボタンを押したときなどに、IME を閉じるわけでもないけど IME を入力完了状態に確定させたいときに有効。
入力状態を確定させることで、以下のことが実現できる。

* EditText の入力中の表示(下線が引かれてハイライトされた状態)を解除できる
* IME の変換候補やサジェスト表示を閉じることができる
    * IME のレイアウトにもよるが、変換候補をキーボードの上に表示するタイプのレイアウトなら IME の高さが変化し、小さくなる

## 実装

```kotlin
fun EditText.completeIme() {
    val selection = selectionStart
    // 変換中のハイライトは Spannable で表現されているため、
    // toString() で Spannable を削除することでハイライトが消える
    // setText() でテキストを設定しなおすことで、IME の変換中状態が解除される
    setText(text.toString())
    // setText() により、カーソルポジションが 0 に戻されてしまうので、
    // 直前のカーソルポジションに復帰させる
    setSelection(selection)
}
```

## View.clearFocus() では IME は確定されない

[View.clearFocus](https://developer.android.com/reference/android/view/View#clearFocus()) ではフォーカスが外れるだけで IME の入力中状態はそのままでした。
上記の実装ではフォーカスはそのままで IME の入力中状態だけが確定されます。

## TextView.clearComposingText() も挙動が怪しい

[TextView.clearComposingText](https://developer.android.com/reference/android/widget/TextView#clearComposingText()) も試してみましたが、正しく動作しませんでした。
Android 8 環境で ATOK や Gboard で入力中の状態とし`clearComposingText()` を呼び出すと、下線などは解除されましたが、さらに次の文字を入力すると確定したはずの文字が重複して入力されてしまう動きとなりました。
`clearComposingText()` を呼び出しても、変換候補欄は表示されたままでした。
java scriptの基礎1

# JavaScriptの基礎知識
アウトプットとして基礎的なことを記述していきます。
## 環境
mac OS Catolina
VScode

## JavaScriptとは？
ページの更新を行うことなく、サーバーと通信ができる、
ページ遷移させないで画面を表示できるといったことを叶えるためにあるプログラミング言語のこと。
デベロッパツールのコンソールで記述した文法の結果をみることができる

## JavaScriptのコードをどうすればHTMLに反映できるのか？
HTMLのhead要素の中にscript要素を入れてあげると反映される

```
<head>
 <script src=index.js></script>
</head>
```
## JavaScriptの基礎的な文法
console.log
ブラウザのコンソールにテキストを表示させる
var:再代入・再定義できる変数定義

```:js
var fruits = "apple"
fruits ="orange" 再代入ok
var fruits = "orange" 再定義ok
```

const：再代入・再定義どちらもできない変数定義

```:js
const fruits = "apple"
fruits ="orange" 再代入NG
const fruits = "orange" 再定義NG
```
let:再代入はできるが、再定義はできない変数定義

```:js
let fruits = "apple"
fruits ="orange" 再代入ok
let fruits = "orange" 再定義NG
```

使い分けとしては基本的にvarは使われない。理由は変えていいのかダメなのか後から見た人がわからないため。
使われるのはconstかletになる。
constの場合は何も変えてほしくないことが伝わるし、letは代入することだけならokと伝えることができるため。


テンプレートリテラル
文字列の中に変数を入れてあげたい時に使う
テンプレートリテラルを使わないときのコード

```:js
const fruits1 = "apple"
const fruits2 = "orange"

const introduction ="私が好きなフルーツは" + fruits1 + "と" + fruits2 "です。"
```

となるが、テンプレートリテラルを使ったときのコードは

```:js
const fruits1 = "apple"
const fruits2 = "orange"

const introduction =` 私が好きなフルーツは${fruits1}と${fruits2}です。`
→私が好きなフルーツはappleとorangeです。と出力される。
```

となるのでテンプレートリテラルを使った方が記述はしやすい。

以上です。
timerとloopを使った文字のアニメーション表示

# アニメーション表示の方法
timerとloopを使って，アニメーションで文字を表示させる方法をメモとして残しました．

```swift
import UIKit

class HelloViewController: UIViewController {

    @IBOutlet weak var titleLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        titleLabel.text = ""
        var charIndex = 0.0 //TimeIntervalと積を取るのでDoubleにする
        let titleText = "Hello World!"
        
        for letter in titleText {
            // withTimeInterval: 0.1だと全文字が同時刻でスタートしてしまい，一度に表示されてしまう
            // charIndexと積をとることで，表示をずらすことができ，アニメーション表示される．
            Timer.scheduledTimer(withTimeInterval: 0.1 * charIndex, repeats: false) { (timer) in
                self.titleLabel.text?.append(letter)
            }
            charIndex += 1
        }
    }
}
```

アニメーションの作り方は，他にもたくさんあるようなのでこれから学んでいきたいですね．
gtag.js の client_id を正式に読み出す

なんか、analytics.js で簡単に読み出せていた client_id が

gtag.js になってから、Cookie から直接読み取っている人とかが結構多いみたいだったので、メモしておく


# 実装
現在、gtag のAPIリファレンスには 普通に正式な読み出し方が書いてある
https://developers.google.com/gtagjs/reference/api?hl=ja#get_field_name
結構最近なんですかね、更新されたの

あとは普通にドキュメントに沿って呼ぶだけ

```ts
gtag('get', '<G | UA>-XXXXXXXX', 'client_id', (client_id: string) => {
      console.log(client_id);
    });
```

勿論 「定義されてないお」 って怒られるので定義する（typescript）

本当は @types/gtag.js だけで完結させたかったけど、'get' command が定義されてなかったので、作る

xxxx.d.ts

```ts
declare namespace Gtag {
  interface Gtag {
    (
      command: 'get',
      targetId: string,
      fieldName: 'client_id' | 'session_id' | 'gclid',
      callback: (field) => void
    ): void;
  }
}
```

おしまい

そんなに詳しいわけでは無いので、なんか変なとこあったら教えてください
Laravel 8.x の組み込みイベント57種

Larave の API ページで "Events" と検索した結果。

https://laravel.com/api/8.x/search.html?search=Events


## イベント一覧

- Illuminate\Auth\Events\Attempting
- Illuminate\Auth\Events\Authenticated
- Illuminate\Auth\Events\CurrentDeviceLogout
- Illuminate\Auth\Events\Failed
- Illuminate\Auth\Events\Lockout
- Illuminate\Auth\Events\Login
- Illuminate\Auth\Events\Logout
- Illuminate\Auth\Events\OtherDeviceLogout
- Illuminate\Auth\Events\PasswordReset
- Illuminate\Auth\Events\Registered
- Illuminate\Auth\Events\Validated
- Illuminate\Auth\Events\Verified
- Illuminate\Auth\Access\Events\GateEvaluated
- Illuminate\Bus\Events\BatchDispatched
- Illuminate\Cache\Events\CacheHit
- Illuminate\Cache\Events\CacheMissed
- Illuminate\Cache\Events\KeyForgotten
- Illuminate\Cache\Events\KeyWritten
- Illuminate\Console\Events\ArtisanStarting
- Illuminate\Console\Events\CommandFinished
- Illuminate\Console\Events\CommandStarting
- Illuminate\Console\Events\ScheduledTaskFailed
- Illuminate\Console\Events\ScheduledTaskFinished
- Illuminate\Console\Events\ScheduledTaskSkipped
- Illuminate\Console\Events\ScheduledTaskStarting
- Illuminate\Database\Events\DatabaseRefreshed
- Illuminate\Database\Events\MigrationEnded
- Illuminate\Database\Events\MigrationStarted
- Illuminate\Database\Events\MigrationsEnded
- Illuminate\Database\Events\MigrationsStarted
- Illuminate\Database\Events\NoPendingMigrations
- Illuminate\Database\Events\QueryExecuted
- Illuminate\Database\Events\SchemaDumped
- Illuminate\Database\Events\SchemaLoaded
- Illuminate\Database\Events\StatementPrepared
- Illuminate\Database\Events\TransactionBeginning
- Illuminate\Database\Events\TransactionCommitted
- Illuminate\Database\Events\TransactionRolledBack
- Illuminate\Foundation\Events\LocaleUpdated
- Illuminate\Foundation\Events\VendorTagPublished
- Illuminate\Foundation\Http\Events\RequestHandled
- Illuminate\Log\Events\MessageLogged
- Illuminate\Mail\Events\MessageSending
- Illuminate\Mail\Events\MessageSent
- Illuminate\Notifications\Events\BroadcastNotificationCreated
- Illuminate\Notifications\Events\NotificationFailed
- Illuminate\Notifications\Events\NotificationSending
- Illuminate\Notifications\Events\NotificationSent
- Illuminate\Queue\Events\JobExceptionOccurred
- Illuminate\Queue\Events\JobFailed
- Illuminate\Queue\Events\JobProcessed
- Illuminate\Queue\Events\JobProcessing
- Illuminate\Queue\Events\JobQueued
- Illuminate\Queue\Events\Looping
- Illuminate\Queue\Events\WorkerStopping
- Illuminate\Redis\Events\CommandExecuted
- Illuminate\Routing\Events\RouteMatched

## よく使うもの

### Registered

ユーザー登録時に発行される。
初めから `EventServiceProvider` に登録されている。

### MessageSending, MessageSent

メールの送信時に発行される。
【必見】AWS SAAの資格を最短で取得する方法


##はじめに

こんにちは、モナ坊です。

最近、AWSのSAAの資格に合格できたのでその体験記を書きたいと思います。
![SAA_badge_proof.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920249/4b672c11-322b-6438-4f82-79190c72cae4.png)

また、資格準備期間 <b>約２週間半</b> で合格までに至る最短の勉強方法を体験記を通して皆様にご紹介したいと思います。


<b>~注意~</b>
ちなみに、自分は全て英語で試験準備と試験を受けたのでこの記事が参考にならない人も出てくるかもしれません。
後、大体の勉強法は[とらぼうさんのQiita](https://qiita.com/torabo/items/a93a7066b41558d4d7e7)をガッツリ参考にしたので、こちらの方もじっくり拝見していただけると良きです！


##自己紹介
モナッシュ大学でソフトウェア工学専攻の２年生の学生です。
クラウドについての知識はゼロでした。

なぜ、SAAを取ろうとしたのか？？
その<b>理由</b>としては、、、

- VPSの構築を初めてする機会があってすごい手応えがあったので、このノリでAWSのクラウド構築も出来たらいけるんじゃね？っていうすごい軽いノリでやりました (ちょっと火傷しましたw)

- ただ、元々AWSに関してはすごく関心があり, AWSの本社で将来的に働きたいという目標があるのでそれに一歩でも近づくため。

大学と大学外での開発を２つしているためあまり勉強時間を確保できませんでしたが、それでも短期間で合格できたので社会人の方もきっとできます！

前置きが長くなりましたが、実際に参考にした教材と勉強方法について話したいと思います。


##参考教科書

<b>教科書:</b>

https://www.udemy.com/course/aws-certified-solutions-architect-associate-saa-c02/


<b>模擬試験用：<b>

https://www.udemy.com/course/practice-exams-aws-certified-solutions-architect-associate/



##勉強方法

毎日、暗記のための資料のスキミングをしました。

<h3>~教科書編~</h3>

<b>要約：</b>
資料のスキミング->ハンズオン->メモを書き残す

<b>詳細：</b>
最初は、資料をスキミングしてザーッと理解してからハンズオンをしてその資料にメモを書き残すようにしました。
そのあとは、ひたすら暗記するようにしました。


<h3>~模擬試験編~</h3>
<b>要約：</b>
試験->復習->暗記
の繰り返し

<b>詳細：</b>
模擬試験は、最低2日に一回はするように心がけました。
また、模試試験を解いていくのに意識する転置しては、なぜ他の回答が間違えでこの回答が正解なのかです。理由付けができない場所があれば、そこを試験中にメモをし試験後そのトピックを復習するようにしました。もし、それでも理解できない時にはYoutubeにたくさん解説動画があるのでそれを参考にしました。

模試試験を解いた後は、間違えた箇所をANKIというアプリで理解した後に隙間時間で暗記するようにしました。（例えば、犬の散歩中など）

また、資料にメモを書き残すようにしました。

同じ模擬試験をすぐにもう一周するのではなく、期間を少し置いてするようにしました。その期間の間は、他の模擬試験をしました。


##最後に
かなり簡易的な説明になってしまいましたが、もしもっとここを詳しく説明してほしいなどありましたらお手数ですがメッセージ送っていただけると嬉しいです！

次は、Developer Associateの資格を取ろうかなと思っています。応援よろしくお願いします！

LGTMよろしくお願いします！すごく励みになります！！
Vuetify~ヘッダー＆フッター~

それでは、コンポーネントを使って行きましょう👩‍💻

ちなみにコンポーネントの詳細は、公式にあります👍
▶https://vuetifyjs.com/ja/components/alerts/
![スクリーンショット 2021-03-10 16.09.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1033397/e827bfb8-9c64-8608-c4cc-17347a02fa5f.png)

では、ヘッダーを作っていきます。
公式ページのBarのコンポーネントを使って行きたいと思います😊

```app.vue
<template>
  <v-app>
 <v-app-bar
  color="pink"
 dark app height="90">テストサイト</v-app-bar>
<v-footer color="pink" dark app height="100">テストサイト
</v-footer>


  </v-app>
</template>
```
てな感じになります。
ブラウザ上ではこうなります😊

![スクリーンショット 2021-03-10 17.02.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1033397/5fc55707-c330-fad0-ef62-b5f8a98d46e0.png)

#①ヘッダー
ヘッダー作成の際は、dark appを忘れないようにしてください。これはヘッダーの位置を自動調整してくれます！
また、高さ調整もできますが、この場合はcssと違い、height="90"となります！！

#②フッター
フッターの作成の場合も同様です。dark app を忘れると、フッターがヘッダーの位置に固定されてしまいます😅
【Git】新しいブランチを作ってgit pushしたら、fatal: The current branch ブランチ名 has no upstream branch.と怒られた時の対処法

<h2>症状</h2>
Gitで新しいbranchを作成しコード修正後にgit pushをしたら、「fatal: The current branch fix-heroku has no upstream branch.」と怒られてしまいました。

```
git checkout -b ブランチの名前

#修正後
git add -A

git commit -m "コメント"

#pushしてエラー
git push
fatal: The current branch ブランチの名前 has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin fix-heroku

```

上記コマンドを日本語訳すると、

致命的：現在のブランチの分岐の名前には上流のブランチがありません
現在のブランチをプッシュしてリモートをアップストリームに設定するには、
git push --set-upstream origin fix-herokuをしてください

というものです。

<h2>解決方法</h2>
日本語訳する前に、commit→pushまでをやり直したら治りました。
上流ブランチが設定されていなかったためかと思われます。

```
#マスターブランチにチェックアウト
git checkout master

#マスターに作ったブランチをマージ
git merge　ブランチ名

#githubにプッシュ
git push

```

Gitについては知識不足であるので、研鑽していきたいです。

<h2>参考</h2>
事象 : プッシュしたらfatal: The current branch ブランチ名 has no upstream branch.
https://qiita.com/ponsuke0531/items/410735b544795506fdc5#%E4%BA%8B%E8%B1%A1--%E3%83%97%E3%83%83%E3%82%B7%E3%83%A5%E3%81%97%E3%81%9F%E3%82%89fatal-the-current-branch-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E5%90%8D-has-no-upstream-branch

git push --set-upstream origin masterって毎回聞かれるのをやめる
https://qiita.com/erii/items/e107b91a58f8250838da
DBViewerをEclipse2020-12でも使用したい！！

##追記
こっちで簡単にできます笑

https://qiita.com/sat0suu/items/0464d9462e56261b5d10

#はじめに
EclipseにMySQLをダウンロードする際に下記のサイトを参考にしていたが、自分のEclipseにはDBViewrがない！！！

ターミナルでパスとか通したい人はこっち

https://www.yutaliberty.com/2019/03/23/prog/1347/
#ということでダウンロードする必要がある
https://qiita.com/kaputaros/items/575dd9e1e8f2093d1201

この記事を確認するとjarファイルを配置する必要があると書いているが、
初心者の私にとっては配置のしかたにてこずりました。
#配置
自分のpluginフォルダを確認すると、`/Applications/Eclipse_202012.app/Contents/Eclipse/plugins`
だったのでMVコマンドを使用して、

```
mv ~/Downloads/zigen.plugin.db_1.2.2.v20101009.jar
/Applications/Eclipse_202012.app/Contents/Eclipse/plugin
```
を実行して配置後、

```
/Applications/Eclipse_2020-12.app/Contents/MacOS/eclipse -clean
```
を実行するとDBviewが使えるようになりました。
#最後に
これで勤怠管理をJavaで書いていきたいと思います。
Swiftの実機テストで"Signing for ~ requires a development team."と出たときの対処

#はじめに
こんちは．
Xcodeでビルド時にsimulatorで負荷かかりすぎてmac死にかけたので，実機でやろうとしたら詰まりました．
調べたけど，ここどこ？ってなったので1からわかりやすくやってきます．

何か間違えがあれば修正します．
参考程度にみていただければ幸いです．

#スペック
Swift担当:Macbook Air 2019 
- CPU : intel core i5
- RAM : 8GB
実機テスト：iPhone SE (2世代)

#作成したプログラム

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606971/06121632-c911-8164-6a9b-c713e3e22740.png)

ボタン押したら，HW!がHello Worldに変わるってやつですね．

Mac上のSimulatorでは動いたが，Macはアチアチで死にそう．．．．
せや！実機でぶち込んだろ！(脳死)

#直面したエラー
ビルド先を変えるのは，画面上の端末の切り替えをするだけです．
![スクリーンショット 2021-03-10 16.20.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606971/0fc39af0-42ab-efb2-10d4-790e2e6cabe7.png)

![スクリーンショット 2021-03-10 16.46.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606971/6fb53a91-1800-0db6-4751-7c9d4850d39a.png)

じゃあ，びるどすっか（脳死）
，，，，，，動かん．

![スクリーンショット 2021-03-10 16.23.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606971/dc9b5530-7cea-472a-2b46-de679f2c7eb6.png)

文面見ると，開発チームがないよ．設定しろやって感じ．
調べたら`Target` → `signing&Capabilities` → `team`の設定をする．
って書いてるけど，まずTargetってどこ？

#解決編
左のファイル欄の一番上のプロジェクト名のところをクリックすると，
`(project名).xcodeproj`というものがでます．
![スクリーンショット 2021-03-10 16.29.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606971/5e85eeac-0c24-8fcd-ccd8-e2a19657945b.png)

![スクリーンショット 2021-03-10 16.33.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606971/fbd4f149-6b92-9a60-0e62-43676574a834.png)

Targetありましたね．
今回は，Targetの`test`を選択して，`Signing&Capabilities`をクリック．
![スクリーンショット 2021-03-10 16.37.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606971/f325f9c7-d232-5afd-9c8d-e88ea09e17ba.png)

Teamのとこが，Noneになってますね．
ここを選択して，アカウントがない場合は`Add an Account`を選択してAppleIDでログインします．
（完全個人情報なので，見せられないですごめんなさい．）
ってやると，Xcode側の設定は完了です．

#iPhone側の設定
iPhoneは簡単で，
`設定` → `一般` → `プロファイルとデバイス管理` → `デベロッパAPP` 
→ `Apple Development:自分のAppleID`
を選んで，許可してあげると，もう動きます．

#最後に
振り返れば，こんなもん．ですが意外と，xcodeprojを探すのに詰まりました．
これがだれかの助けになれば幸いです．
次の投稿は初心者のぷろーぐらみんぐまとめ記事を書いてるのでそれ出したいですね．

#ちなみに

ここまで読んでいただき，ありがとうございます．
実は，プロジェクトを立ち上げる時に `Team`を設定しておけばエラーは解決します．

![スクリーンショット 2021-03-10 16.03.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606971/7325e8ce-051f-3275-865c-2f8c34fad0f3.png)

またお会いしましょう．
スプレッドシートに日本語URLを張り付けた際にハイパーリンクが自動で設定されないのを解消する方法

# 日本語URL問題

お客様のWebサイトの分析をするのに現在のサイトのサイトマップを作成しようと考えたときに、URLの一覧をアプリなどで抽出して、そのURLの一覧をスプレッドシートに貼り付けた際にハイパーリンクが自動で設定されないのでどうしたもんかと思って調べたのでメモ。
WordPressでパーマリンクの設定を記事のタイトルにしていると発生するんだよねー。

↓こうなってしまう
![hyperlink1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23791/4c6c5a03-a308-22bd-cd50-3dfc31acc7fa.png)

# HYPERLINK関数

調べたらすぐ出てきました。[HYPERLINK](https://support.google.com/docs/answer/3093313?hl=ja&ref_topic=9199554) 関数。これは素敵だ。
以下のように設定してあげます。

![hyperlink2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23791/e9fe7481-5486-6026-e6dd-284d7fc4aa0e.png)

貼り付けたセルとは別のセルでHYPERLINK関数を設定するだけで完了。
設定するとハイパーリンクが設定されてちゃんとページに遷移してくれます。

![hyperlink3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23791/89e9d761-cbc1-a898-38b8-12bf91bc4084.png)

できた！
WindowsServer2012 R2 TCP/UDP Dynamic Portの設定変更


WindowsServerのTCPポートのチューニングが必要になったのでコマンドのメモ


現状の設定を確認

# TCP

```
netsh int ipv4 show dynamicport tcp
```

```
プロトコル tcp の動的ポートの範囲
---------------------------------
開始ポート      : 49152
ポート数        : 16384
```

# UDP
```
netsh int ipv4 show dynamicport UDP
```
```
プロトコル udp の動的ポートの範囲
---------------------------------
開始ポート      : 49152
ポート数        : 16384
```

# 32768に増やしてみる

```
netsh int ipv4 set dynamicport tcp start=32767 num=32768
netsh int ipv4 set dynamicport udp start=32767 num=32768
```

```
プロトコル tcp の動的ポートの範囲
---------------------------------
開始ポート      : 32767
ポート数        : 32768
```
```
プロトコル udp の動的ポートの範囲
---------------------------------
開始ポート      : 32767
ポート数        : 32768
```


デフォルトに戻す場合

```
netsh int ipv4 set dynamicport tcp start=49152 num=16384
netsh int ipv4 set dynamicport udp start=49152 num=16384
```
 
# パラメーター説明
start：開始ポート番号
num：開始ポート番号からの使用するポート数

以上、備忘録として
Azureの障害情報の照会ができるサイト

#Azureの障害情報の照会

運用しているときに、なんか全体的にやばい状況とかAzure側の障害が疑われますが、以下サイトが一番よさそうかなと思いました。

以下サイトが良い
[Azure status history](https://status.azure.com/ja-jp/status/history/)
@keyframesって何


#大前提: @keyframesとは
アニメーション開始から終了するまでどのような動きのアニメーションをするのかを指定できるCSSの文法。
animation プロパティと @keyframes を使うと、CSSだけでアニメーションの設定ができる。

#基本文法
```nantoka.css
@keyframes 任意のアニメーションの名前(なくてもok) {
    0% {
        CSSプロパティ:値;
    }
    100% {
        CSSプロパティ:値;
    }
}

```

0%=アニメーションの始まり、100%=アニメーションの終わりを表している。0%=from 100%=toで置き換え可能。
例えば、
`<div class="box"></div>`
というHTMLの要素があり、boxに対してfadeInと名付けた

#アニメーションの時間を指定したい時はanimationプロパティを使う！

プロパティ一覧

| プロパティ | 説明 | 初期値 |
|:-:|:-:|:-:|
|  animation-name | アニメーションの名前  | none  |
| animation-duration  | アニメーションが開始してから終了するまでの時間  |  0s |
| animation-timing-function  |  アニメーションのイージング（加速度） | ease  |
| animation-delay  | アニメーションが開始するまでの時間  | 0s  |
| animation-iteration-count  |  アニメーションを繰り返す回数 |  1 |
| animation-direction  | アニメーションの再生方向（順番・逆再生）  | normal  |
|  animation-fill-mode | アニメーション開始と終了時のスタイルの状態  | none  |
| animation-play-state  | アニメーションの再生・停止  |  running |
|  animation |  記のプロパティを一括で指定できるショートハンド |  上記のそれぞれの初期値と同じ |

一括指定の順番としては、以下で覚える。
animation: ①-name ②-duration ③-timing ④-delay ⑤-iteration ⑥-direction ⑦-fill ⑧-play;
	
		
#transitionとの違いは？

|  | transition | animation |
|:-:|:-:|:-:|
| 動きの指定 |  始めと終わりのみ指定可	 |  段階を細かく指定可能 |
|  アニメーション開始のきっかけ	 |  マウスホバーなど開始のきっかけが必要 | 開始のきっかけは不要 |

transitionは例えばクリックされたら:hoverでちょっと色を薄くしてみる〜とか。何かしらのきっかけが必要。
animationはローディング画面で0.5秒までは文字がフェードインしてくるだけで、0.8秒になったらその文字が回転する〜とかの秒数毎の細かい設定ができる。

#参考記事
https://qiita.com/7968/items/1d999354e00db53bcbd8

https://dekiru.net/article/13257/

https://haniwaman.com/css-animation/

https://webdesignday.jp/inspiration/technique/css/5167/

https://swallow-incubate.com/archives/blog/20190206/

これとかわかりやすかった↓

https://memocarilog.info/webdesign/8050
Zoom API の使い方

次の仕様のAPI を使ってみます。
[get/users](https://marketplace.zoom.us/docs/api-reference/zoom-api/users/users)

token は取得済みとします。

Curl の例

```bash
curl "https://api.zoom.us/v2/users?status=active&page_size=30&page_number=1" \
    -H "Authorization:Bearer eyJL********************CMuy1YR5MqGZCCFjpEjvLnG8ShCVv2uVo"
```

Httpie の例

```bash
http "https://api.zoom.us/v2/users?status=active&page_size=30&page_number=1" 
\
    "Authorization:Bearer eyJL********************CMuy1YR5MqGZCCFjpEjvLnG8ShC
Vv2uVo"
```

Python3 の例

```py:get_users.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
#	get_users.py
#
#						Mar/10/2021
#
# ------------------------------------------------------------------
import  sys
import  json
import  requests
# ------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
#
url="https://api.zoom.us/v2/users?status=active&page_size=30&page_number=1"
args={}
#
headers = {
	'authorization': "Bearer eyJL********************CMuy1YR5MqGZCCFjpEjvLnG8ShCVv2uVo",
	'content-type': "application/json"
	}

rr=requests.get(url,headers=headers)
#
print(rr.text)
#
sys.stderr.write("*** 終了 ***\n")
# ------------------------------------------------------------------
```

関連ページ
[PHP: Zoom の token を取得](https://qiita.com/ekzemplaro/items/bf26be4a43549710e324)
UbuntuにZoteroをインストールするときは、zotero-debという方法がある

## はじめに

　Zoteroは有名なオープンソースの文献管理ソフトです。文献管理ソフトは、Mendeleyが有名です。Mendeleyは悪いソフトウェアではないのですが、オープンソース・ソフトウェアではありません。その点、ZoteroはGithubにソースコードが公開されており、安心感があります。(囲い込まれたり、開発が中止になるリスクが少ない)

https://github.com/zotero

（JavaScriptで開発されているらしい）

## ZoteroをUbuntuにインストールする

　ZoteroをUbuntuにインストール時は、[zotero-deb](https://github.com/retorquere/zotero-deb)を使うのが良さそうです。

```sh
wget -qO- https://github.com/retorquere/zotero-deb/releases/download/apt-get/install.sh | sudo bash
sudo apt update
sudo apt install zotero
```

Zoteroを起動して、ガイダンスに従ってFirefox用のプラグインや、LibreOffice用のプラグインをインストールします。（まあ実際にはLibreOffice用のプラグインはほとんど使うことないけれども）

## サーバーとの同期

Zoteroはアカウントを作成することで、ファイルを同期できるようになっているようです。ストレージは300MBまでは無料、それ以上になると有料になるようです。（オープンソース(≠フリー)なソフトウェアの開発を応援したいので、多少お金を支払ってもよい気はします。）

デスクトップ版のZoteroは 設定 > 同期 からサーバーと同期できます。

この記事は以上です。
Githubのリモートリポジトリの変更

# リモートリポジトリの変更方法
1.　現在のremote urlを確認

```
git remote -v

=>
origin  git@github.com:user/current-repo.git (fetch)
origin  git@github.com:user/current-repo.git (push)
```

2.　remote set-urlで新しいremote urlを設定（このとき，sshのurlを指定）

```
git remote set-url origin {new url}
```

3.　変更後のremote urlを確認

```
git remote -v

=>
origin  git@github.com:user/new-repo.git (fetch)
origin  git@github.com:user/new-repo.git (push)
```
Yellowfinのコードモードでレポートの中の数字を取得する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223443/9dd0c3c7-ae33-0ae0-e536-a6f95c2b9b4b.png)


#忘れないように自分用のメモ
report-uuidの値は不変なためこれでレポートを特定し、必要なtr,tdの場所を探して取得する。

```javascript:JSタブ.js
this.onRender = function () {
    // ここにコードを記述します。これは、イベントリスナーを設定するのに理想的な場所です
    let report = this.apis.canvas.select('Athlete');//HTMLタブ中のreport-outputタグのnameの値をセットする
    let button = this.apis.canvas.select('アクション');//canvas-buttonタグのnameの値をセットする
    
    button.addEventListener('click', (event) => {
        let $value = $('[report-uuid="6e6edd19-b81c-400b-9a8c-1c059bd51633"] tbody td')[1].innerHTML;
        console.log($value);
    });
};
```
Rで地図を描く【その5: csvファイル活用】

# 0. 大量の地点情報を読み込む

地図にポイントをうつ際、往々にして元データはエクセルファイルに保存されています。
エクセルに保存されている大量の地点情報を一度に`R`に読み込み、それを地図にプロットするにはどうすればいいでしょうか。

# 1. csvファイル作成
まず、地点情報が記入されたエクセルファイルを用意します。フォントは半角英数が無難です。日本語や全角文字がある場合は`R`での操作でエラーが発生するかもしれません。その際は、半角英数に置き換えるか、日本語の地名の列があるような場合は削除する、といった対応が必要です。

![スクリーンショット 2021-03-10 15.48.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449575/cfb601ee-10a7-2505-5db4-acc38717a9f6.png)


「名前をつけて保存」を選択し、csv（コンマ区切り）のフォーマットで保存します。

![スクリーンショット 2021-03-10 15.22.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449575/2fd16173-20eb-cc2e-840d-0543042ec65d.png)

![スクリーンショット 2021-03-10 15.23.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449575/ac2decec-ec4c-2695-258d-eae74d510c06.png)

csv形式のファイルを作ることができました！

# 2. csvファイルをRに読み込んでプロット

次の手順でcsvファイルを`R`に読み込みます

### 2.1. ディレクトリの設定

`R`では、コンピューター内のフォルダを1つ設定し、そこで様々な作業を行います。ここでは、csvファイルを保存したディレクトリを、作業ディレクトリ （フォルダ) として設定してください。

例えば、デスクトップにcsvファイルを保存している場合は以下の手順でデスクトップを作業ディレクトリとして設定します。

「その他->作業ディレクトリの変更->デスクトップ」

<font color="Blue">
ディレクトリについては下記リンクもチェック！
</font>
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/06.html

### 2.2 csvファイルの読み込み

`read.csv`という関数でcsvファイルを読み込みます。

```
dat <- read.csv("Places.csv")
```
`dat`の中身は`head`という関数を用いて確認できます。下記は`R`の実行画面です。

![スクリーンショット 2021-03-10 16.01.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449575/30a20c30-1597-ddea-a1fb-f33d541f2c60.png)



### 2.3 データのプロット

`dat`の`lon`列が経度、`lat`列が緯度を示しています。

```
library(maps)
map("world", xlim = c(125, 145), ylim = c(30, 45))
map.axes()
map.scale(x = 135, ratio = F)
points(dat$lon, dat$lat, col = "red", pch = 19)
```

![スクリーンショット 2021-03-10 15.49.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449575/8032f23e-c3ed-c05e-62af-9722bd442a89.png)
DjangoでVue Routerを使用するときにDjangoのNot Foundを避けるurls.pyの記述法

DjangoをWebサーバーとして利用し、VueでSPA開発をするとき、Vue Routerで遷移させてブラウザの再読み込みをするとDjangoで404 Not Foundになってしまう問題がある。

その解決方法。

urls.py

```python
from django.urls import path, re_path
urlpatterns = [
  re_path('^.*$', views.index), #index.htmlのテンプレートをrenderするメソッド
  ...
]
```

＜参考＞
https://stackoverflow.com/questions/47661536/django-2-0-path-error-2-0-w001-has-a-route-that-contains-p-begins-wit
Vuetify~使い方~

それでは、VSコードでファイルを開いてみましょう！！
今回は、いろんなファイルがあるなかで、App.Vueを編集していきます！
いろいろファイルの中に書いてありますが、これらをすべて初期化していきます👍

```App.vue
<template>
  <v-app>
  
  </v-app>
</template>

<script>

export default {
};
</script>

```
のようにしていきます👍

頭文字にあるvですが、これは、vueitifyのコンポーネントを指しています！
vuetifyのコンポーネントを使う場合は必ずvを使うので覚えておきましょう☆

先程の画面が真っ白になりましたか？？
ではここから、作って行きます👍


*コンポーネントとは、構成要素と言います。
Webページ上では、ヘッター、フッター、ボディーなどを言います！！
コンポーネントを使う事により、css細かい設定などをしなくても、モダンなwebサイトが作れるということです！！(ブートストラップ的な感じ)