OmniAICreator/Qiita-1.07M huggingface dataset:
【備忘録】位置情報の保存について

iphoneでGPSデータを取得する際の保存形式（GPX,KML）についてメモします。

# KML

KML は、Google Earth、Google マップ等で、地理データの表示に使用するファイル形式です。

```
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
     <Document>
          <name>名前</name>
          <Style id="id名">
               <LineStyle>
                    <color>線の色</color>
                    <width>線の太さ</width>
               </LineStyle>
          </Style>
          <Placemark>
               <name>目印の名前</name>
               <description>目印の説明</description>
               <styleUrl>#id</styleUrl>
               <LineString>
                    <extrude>1</extrude>
                    <tessellate>1</tessellate>
                    <altitudeMode>absolute</altitudeMode>
                    <coordinates>
                         経度１, 緯度１, 高度１
                         経度２, 緯度２, 高度２
                         経度３, 緯度３, 高度３
                    </coordinates>
               </LineString>
          </Placemark>
     </Document>
</kml>
```

`<Style>`タグ内で線についての情報を指定することができます。

| タグ | 説明|
|:-----------|------------:|
|`<LineStyle>`|線の情報|
|`<color>`|線の色|
|`<width>`|太さ|

`<Placemark>`タグ内で位置情報について記録することができます。

| タグ | 説明|
|:-----------|------------:|
|`<name>`|目印の名前|
|`<description>`|目印の説明|
|`<LineString>`|位置情報を記録|
|`<coordinates>`|緯度、経度、高度の順で記録|


# GPX

GPXは、アプリケーションとWebサービスの間でGPSデータを交換するための軽量のXMLデータ形式です。

```
<gpx xmlns="http://www.topografix.com/GPX/1/0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="GPS Visualizer http://www.gpsvisualizer.com/" version="1.0" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
     <trk>
          <name>名前</name>
          <trkseg>

               <trkpt lat="緯度１" lon="経度１">
                    <ele>高度１</ele>
                    <time>日付１</time>
               </trkpt>
               <trkpt lat="緯度２" lon="経度２">
                    <ele>高度２</ele>
                    <time>日付２</time>
               </trkpt>

          </trkseg>
     </trk>
</gpx>
```
`<trkpt>`タグ内で1つの位置情報を記録していきます。
取得回数分`<trkpt>`タグが増えるため、kmlよりもファイルサイズが大きくなります。

| タグ | 説明|
|:-----------|------------:|
|`<time>`|日付（`yyyy-mm-dd HH:mm:ss`）|
|`<ele>`|高度|

# 参考
[GPSデータ記録形式 KMLとGPX
](http://www.ic.daito.ac.jp/~mizutani/gps/gpsdata_formats.html)
[KML](https://developers.google.com/kml/documentation/kml_tut?hl=ja)
MaixCubeでクラシフィケーション

# はじめに

MaixシリーズのArduino/Maixduino開発環境に含まれているMobileNetのデモアプリで簡単にクラシフィケーション（分類）を試すことができます。

# コード

MaixCube用に調整したコードは[こちら](https://github.com/fukuen/maixcube-mbnet-1000-demo)

オリジナルのコードは ~/.platformio/packages/framework-maixduino/libraries/Maix_KPU/examples/mobilenet_v1 にあります

# 実行

まず、モデルを http://dl.sipeed.com/MAIX/MaixPy/model/mobilenet_0x300000.kfpkg からダウンロードし、zipで解凍するとm.kmodelというファイルが展開されるので、mにリネームしてSDカードに保存してください。

SDカードを挿入して実行すると、こんな感じで認識結果が文字で表示されます。

![mbnet-1000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/cc415b06-6303-fe69-2c8e-7aacce14ff92.png)
【Kotlin】トップレベル宣言

先日、GithubでKotlinのコードを眺めていたら以下のような記述を見かけました。

```kotlin
package hoge.huga

class Hoge {
    ...
}

private const val HUGA = "Huga"
```

定数がパッケージの宣言と同じレベルに宣言されています。
初めてみた書き方だったので色々調べてみました。

#トップレベル宣言 (Top-level Declarations)
Javaではトップレベルに宣言できるのはクラスのみですが、Kotlinではクラスの他に

・関数
・プロパティ
・型エイリアス

なども宣言することができます。

上記のように、パッケージのトップレベル(パッケージレベルとも)に関数やプロパティを定義することを**トップレベル宣言(Top-level Declarations)**といいます。

トップレベルに宣言されたものは、クラスインスタンスを経由せずに使用することができます。

# Companion Objectとの使い分け
ところでKotlinにはstatic修飾子がありません。
代わりにKotlinではトップレベルに宣言するほかに、`companion object`を使用することが代替手段として挙げられます。

両者の大きな違いとして、トップレベル関数からはクラスのprivateメンバにアクセスすることができません。
そのため、ファクトリーメソッドのようにクラス内部にアクセスしたい場合には、companion objectを使用します。

バイトコードとしての差など、より詳しい違いについては、[こちら](https://hydrakecat.hatenablog.jp/entry/2017/12/02/companion_object_vs._top-level)の記事が非常に参考になりました。

# おまけ：Javaから見たトップレベル宣言
KotlinとJavaは相互利用することが可能ですが、以下のように.ktファイルに宣言された関数をJavaから呼び出す場合、どうなるのでしょうか。

```kotlin:Hoge.kt
package com.hoge

fun printHoge() {
    println("Hoge")
}
```

Javaにおいて全てのメソッドはクラスに属していなければならないため、`Hoge.kt`というファイル名から自動的に生成された`HogeKt`クラスを介して呼び出す必要があるようです。

```kotlin:Huga.java
import com.hoge.HogeKt;

public class Huga {
    public static void main(String args[]) {
        HogeKt.printHoge();
    }
}
```

ファイル名から自動生成されるクラスには`JvmNameアノテーション`を使用して任意の名前を指定することができます。

```kotlin:Hoge.kt
@file:JvmName("Hoge")
package com.hoge

fun printHoge() {
    println("Hoge")
}
```

```Java:Huga.java
import com.hoge.Hoge;

public class Huga {
    public static void main(String args[]) {
        Hoge.printHoge();
    }
}
```
HTML(レイアウト復習)初心者おすすめ

#初心者におすすめChrome拡張機能

🛠️ 拡張機能（UI Build Assistant）
https://chrome.google.com/webstore/de...

##この動画でコーディングの勉強をしました
https://www.youtube.com/watch?v=CXrW5rqP-WY
ROS2コマンド一覧

[ROS2関係トップページへ](https://qiita.com/NeK/items/7ac0f4ec10d51dbca084)

# 概要
ROS2のコマンド一覧．
基本的にubuntuコマンド．

# colcon
colconの説明は，colcon -hで見ることができる．またcolcon build -hも有用である．

## colcon build
[colconビルドで便利なオプション](https://qiita.com/seshimaru/items/ed344530ead80ab1733f)のページがオプションが表になっていて見やすく素敵．

### 通常ビルド

```terminal
$ colcon build --symlink-install
```

### いくつかのパッケージのみビルドしたい場合

```terminal
$ colcon build --symlink-install --packages-up-to [package1 package2 ...]
```

## colcon test
パッケージのテスト

## キャッシュをクリア
一旦ビルドに失敗したら，失敗した情報がそのまま残ってしまい直してもビルドに失敗することがある．キャッシュをクリアしてやり直す．

```terminal
$ colcon build --cmake-clean-cache
```

それでもだめなら，プロジェクトの以下のディレクトリを削除するとよい．

* build/
* install/
* log/

# ros2
ros2 -hで色々ヘルプを見ることができる．サブコマンドも-hで細かくヘルプを見ることができる．

## ros2 pkg create
自動作成される設定ファイルなどについての詳細情報は[ROS2コマンド一覧:ros2 pkg create](https://qiita.com/NeK/items/9312f3bca2854a82db2e)を参照のこと．

* ros2 pkg create [options] [package_name]
    * options
        * --build-type [type]
            * type
                * ament_cmake
                    * デフォルト
                * ament_python
        * --node-name [node_name]
            * node_name
                * 指定するとhello world的なひな形のnode実行ファイルを作ってくれる
        * --dependencies [depend1 depend2 ...]
            * depend1...
                * 指定すると自動的に依存関係の必要なところをpackage.xmlとCMakeList.txtに書いてくれる．

### おすすめコマンド
パッケージ名の例:my_package
必要な依存関係の例:rclcpp

#### CMakeの場合

```terminal
$ ros2 pkg create --build-type ament_cmake my_package --dependencies rclcpp
```

## ros2 run

* ros2 run [パッケージ名] [ターゲット名] [options]
    * options
        * --ros-args --params-file [file名]
            * YAMLファイルをパラメータとして読み込む
            * ros2 runを行ったディレクトリからの相対パスで指定する．
        * -r
            * 名前を変えるオプション
            * -r __ns:=\<new node namespace\>
                * 名前空間を右項で設定
            * -r __node:=\<new node name\>
                * ノード名を右項で設定
            * -r \<old name\>:=\<new name\>
                * topic/serviceの名前をリマッピング
            * 参考
                * [Passing ROS arguments to nodes via the command-line](https://index.ros.org/doc/ros2/Tutorials/Node-arguments/)

## ros2状態確認
詳しくは[Introspection with command line tools](https://docs.ros.org/en/jazzy/Concepts/Basic/About-Command-Line-Tools.html)を参照．

よく使うもの
* ros2 node list
    * ノード一覧の表示
* ros2 topic list
    * トピック一覧の表示
* ros2 topic pub /topic_test example/msg/String '{data: hello}'
    * example/msg/Stringにデータをpublish
* ros2 service list
* ros2 action list
* ros2 interface list
    * メッセージ一覧の表示
* ros2 interface show example_interfaces/msg/String
    * example_interfaces/msg/Stringの構造を表示

###その他
Dashingまではros2 msg, ros2 srvコマンドであったが，Eloquentからros2 interfaceに統合された模様([Tutorial Creating custom ROS2 msg and srv])．topicは要調査．

#### Dashingの場合

* ros2 msg list
    * メッセージ一覧の表示
* ros2 msg show std_msgs/String
    * メッセージであるstd_msgsのStringの構造を表示


[Tutorial Creating custom ROS2 msg and srv]:https://index.ros.org/doc/ros2/Tutorials/Custom-ROS2-Interfaces/
HTMLのformで値を渡す

# HTMLのformで値を渡す

PHPでHTMLのformタグを使って値を渡す方法。
入力側で入れた数値をもとに三角形の面積を出す簡単なプログラムを作り、
それをもとに備忘録とします。
可読性を上げるためヘッダーとフッターは分割して部分テンプレート化し、
require文で呼び出してます。

まず入力側。

```php:container_input.php
<?php require './header.php'?>
<form action="container_output.php" method="post">

  底辺<br>
  <input type="text" name="bottom"></br>
  高さ<br>
  <input type="text" name="height"></br>
  <input type="submit" value="投稿">

</form>
<?php require './footer.php'?>
```

入力した底辺と高さの値を、Webサーバを介して出力側のcontainer_output.phpに
リクエストパラメータとして渡す。

```php:container_output.php
<?php require './header.php'?>
<?php

function calc($bottom,$height){

  //if文と正規表現で判定、底辺高さ共に値が数字ならtrue
  if(preg_match('/[0-9]/',$bottom) && preg_match('/[0-9]/',$height)){
    $result = ($bottom * $height) / 2 .'<a href="container_input.php">戻る</a>';
    return $result;
  } else {
    return '半角数値以外入力できません。'.'<a href="container_input.php">戻る</a>';
  }

} 
  
//送られてきた値をmb_convert_kana()の第二引数をnにして強制的に半角数字にする。
$bottom = mb_convert_kana($_REQUEST['bottom'],'n');
$height = mb_convert_kana($_REQUEST['height'],'n');

echo calc($bottom,$height);

?>
<?php require './footer.php'?>

```

PHPで定義されたスーパーグローバル変数の$_REQUEST['添字']で、リクエストパラメータを取得。
今回は入力側でinputタグのname属性に入れた文字列が添字部分に該当し、
これがキーとなり、値を呼び出す。
PHPで500エラーが出たら...対処する方法【エラー文を表示させる】

PHPにて複数のファイルを色々と管理するために作業していたら、500エラー（ファイルパスを間違ったなどが理由）が出ました...。どうしたらいいのか調べてわかったので、メモとしてまとめておきます。

##エラー内容を出力させよう

結論としては、まずエラーの理由を発見することです。

それは以下のコードを、読み込んでいるファイルの先頭に記述しましょう。

```
<?php

ini_set("display_errors", 1);
error_reporting(E_ALL);
```

他にも方法がありますが、エラー内容が出力されるので、問題解決へと進めます。

##まとめ

初学者の僕にはエラー文が出ると「ひえ〜」となりますが、早く仲良くなりたいです。ぜひ駆け出しエンジニアの皆さん、エラー文が出ても恐れず、理解できるようにしましょう！ベテランエンジニア達もエラーをバンバン出しているようですし。
Pythonista で pit を使う

aws などのアカウント情報を直接ソース上に記載したくない時に活躍する pit ですが、Pythonista で利用するにはネットでよく見かける方法が使えなかったので、私のやった方法をご紹介いたします。

もっとよい方法がございましたら、コメント等いただけると嬉しいです。

# インストール方法

launch_stash.py を起動して、ターミナル上から下記を実行します。

```bash
pip install pit
```

launch_stash.py については 
[Pythonista 3 にStaSh をインストールする。](https://qiita.com/maboy/items/cef5dee13d5b2e9ac843) 等を参照。

# 使い方

基本的な使い方は下記のような感じです。

```python:pit_sample.py
import pit
import yaml

yaml.warnings({'YAMLLoadWarning': False})

sample = pit.Pit.get('sample', {'require':{'name':'name-value'}})

print('# pit_sample.py output')
print(sample['name'])
print(sample['test'])
```

ただ、Pythonista には vi のようなテキストエディタが無いので、実行しても設定ファイルの入力は出来ず、参照する際に KeyError が出てしまいます。

# pit の設定ファイルを記載する

エラーの原因は設定ファイルの内容が空な事なので、設定ファイルにデータを記載します。

設定ファイルは

```
~/.pit/default.yaml
```

にあります。これを編集するためには、 launch_stash.py を起動して

```
edit ~/.pit/default.yaml
```

と入力します。
そうすると Pythonista のエディタで設定ファイルの編集が可能になります。

試しに

```yaml:default.yaml
{
  sample: {
    name: value,
    test: wao
  }
}
```

というように入力してから、最初に紹介した pit_sample.py を実行すると、今度はエラーにならずに console に下記のような表示がされるようになります。

```
# pit_sample.py output
value
wao
```
スクレイピングツール作成

Qiita初投稿です。よろしくお願いします。

<h1>自己紹介</h1>
31歳♂
国立大学の情報科学専攻を卒業。
22歳　独立系SIer入社。食品卸売会社に常駐。
26歳　食品卸売会社の情報システム部に転職。
現在に至る

<h1>Pythonを学習したいとなった経緯</h1>
食品卸売会社の情報システム部の企画に異動となり、
AIの導入の提案をしました。

しかし、AIベンダーだと高額すぎて、
利用部門から費用対効果が合わないと一蹴されてしまいました。

レガシーな開発ばかりであったことがコンプレックスになっていたのもあり、
自分でディープラーニングを組み込んで、提案できないかと思い、
Pythonを勉強し始めました。

Pythonを勉強し始めて、スクレイピングを知り、
これは需要あるのではと思い、ツール化しようとしました。

<h1>スクレイピングツールについて</h1>
食品卸売会社は50を超える支店、100を超える店舗を持っており、それぞれで得意先が違い、すべてを情報システム部で対応するのは不可能であったので、各店で多少ITの知識と根気があれば使えるように設計した。

<h3>実行方法</h3>
スタートアップにバッチファイルを配布して、朝PCを起動したときに、バッチファイルからPythonプログラムを実行。各得意先の情報を取得し、前回の取得内容と差分があった場合、URLと新しい情報があることをポップアップ表示する。

<h3>ファイル構成</h3>
各自で作成してもらえるようにシンプルなcsvファイルをインプット。アウトプットもcsvにして、前回の取得内容とのコンペアを容易にした。

<h3>指定内容</h3>
1.URL
2.取得項目のクラス（3つまで指定可能）
3.アウトプットファイル名

<h3>課題</h3>
1.クラスを定義していない項目は取れない
→仮に取りたい項目にクラスが定義されていないと取得できない。IDやnameでも取るように検討したが、ややこしくなるので、見送り。今後の改善点とする
2.狙ったところ以外の余計な項目まで取れてしまう
→入力データにするわけではないので、いらないところは削除してもらう。天気情報の取得は対応したが、汎用化するとややこしくなるので、見送り。今後の改善点とする
3.利用規約違反にならないこと、過剰な負荷をかけないことを意識しないといけない。

<h1>そして、転職へ</h1>
ここまで長々と書き連ねましたが、汎用性の高い開発技術を身につけ、会社に依存しないエンジニアになりたいと思うようになり、転職活動を始めました。このスクレイピングツールはポートフォリオとして活かします。

GitHubにて公開します。アドバイスをいただけると非常にありがたいです。
https://github.com/yamamasa2020/scraping-tool
index.php

<?php require_once('data.php') ?>

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Café Progate</title>
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
  <link href='https://fonts.googleapis.com/css?family=Pacifico|Lato' rel='stylesheet' type='text/css'>
</head>
<body>
  <div class="menu-wrapper container">
    <h1 class="logo">Café Progate</h1>
    <div class="menu-items">
      <?php foreach ($menus as $menu): ?>
        <div class="menu-item">
          <img src="<?php echo $menu->image ?>" class="menu-item-image">
          <h3 class="menu-item-name"><?php echo $menu->name ?></h3>
          <!-- $menuのgetTaxIncludedPriceメソッドの戻り値を表示してください -->
          <p class="price">¥<?php echo $menu->getTaxIncludedPrice() ?>（税込）</p>
        </div>
      <?php endforeach ?>
    </div>
  </div>
</body>
</html>
menu.php

<?php
class Menu {
  public $name;
  public $price;
  public $image;
  
  public function __construct($name, $price, $image) {
    $this->name = $name;
    $this->price = $price;
    $this->image = $image;
  }
  
  public function hello() {
    echo '私は'.$this->name.'です';
  }
  
  // getTaxIncludedPriceメソッドを定義してください
  public function getTaxIncludedPrice(){
    return floor($this->price*1.08);
  }
  
}
?>
//税込み価格を表示する
【Unity2D】当たり判定を検知するための手順~敵に弾を当てる~

シューティングゲームを作成している途中で当たり判定を学んだのでその備忘録として。
今回は自分の発射した弾が相手に当たったかどうかに当たり判定をつけたい。
当たり判定を検知するためには以下2つが必要となる。
**①GameObjectにcolliderをつける**
**②どちらかもしくは両方にRiditBodyをつける**

## 1. 衝突させたいオブジェクトを用意する
今回の主役となる、弾と敵機を用意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308839/0cb83de6-6603-9596-c5e5-d46bbb90c88f.png)


## 2.両方にcolliderをつける
今回当たり判定をつけたいオブジェクトを選択し、InspectorからAdd Componentを選択し、Box Collider 2Dをつける。(Circle Colliderなど別の形でも可)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308839/612a874d-7125-a2cf-80b9-305b766c637c.png)

これを弾の方のオブジェクトも選択し、同じようにする。

## 3.isTriggerにチェック
Colliderの大きさをInspectorのSizeも大きければ調節する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308839/b42c5c71-cdb6-eda2-04a8-3693b8261cc8.png)


## 4.Riditbody2Dをつける
Colliderと同じくAdd ComponentからRiditbody2Dをつける。
今回は重力を加味しないため、Body TypeをKinematicにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308839/b96dac67-5b68-fa75-e2d1-ff4c580431e8.png)

## 5.Scriptに追加
OnTriggerEnter2Dで弾と敵が当たった時にconsoleに「当たり判定！！」と出ます。

```c#
private void OnTriggerEnter2D(Collider2D collision)
    {
        Debug.Log("当たり判定！！");    
    }
```
ポートフォリオの開発日記2

今日もExpressの開発機能開発だった。
既に利用していたバリデーションライブラリがPOSTリクエストにしか対応してないことが判明し、他のHTTPメソッドに利用できない問題が発生した。
そのため、別のバリデーションライブラリを使用することにした。
そのライブラリは、以前の物はミドルウェアのような物だったのに対し、インスタンスライブラリのような物だった。だから、少しコントローラーに対する記述量が増えてしまった。
payjpを使ってクレジットカード機能を導入しちゃおうってわけ(ビュー、補足編)

いやー今日は風が強いですね。
涼しいのに、室内はベタベタジメジメ。

#### 夏だ！サマーだ！夏サマーだ！！

最近AKB48の横山由依ちゃんにときめいてますが、こんばんは。

今日は前回のpayjpを使ったクレジットカード登録の補足編でございますわよ。

見てない方は下をチェッキ！！
[クレジットカード登録編](https://qiita.com/rockettetsu/items/0bc062909a6ce3904506)

# 1　最初に何の補足しましょうかね。

見切り発車にも程があるわ。。。。
いや今回は勢いでいくわよ！！！

# 2 とりあえずビューファイル(haml)を見せちゃおうってわけ

まずはクレジットカードを登録する時のビューよね。
メ○カリとかメルカ◯とかメル◯リとかはこんな感じ。

<img width="734" alt="スクリーンショット 2020-06-16 21.51.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596765/11cb3f96-3ffa-baa7-05dc-2b2fce188e7b.png">

それを踏まえてビューファイルはこんな感じ。
(クレジットカード会社の写真は頑張って集めましょう。)

```haml:card/new.haml.html
　.my--page__contents__box--allert
    %section.card__information
      .card__information--header
        %h1 クレジットカード情報入力
      .card__information--form
        = form_with url: cards_path, method: :post, html: { name: "inputForm" } do |f| 
          %section.top
            %label カード番号
            %span 必須
          = f.text_field :card__number, type: 'text',class: 'card__number',id: 'card_number', placeholder: '半角数字のみ', maxlength: '19' 
          %ul.card__logo
            %li 
              = image_tag 'if-visa-2593666_86609.svg', width:'49', height: '20' ,alt: 'visaロゴ'
            %li 
              = image_tag 'mastercard.png', width: '34' ,height:'20', alt: 'mastercardロゴ'
            %li 
              = image_tag 'saisoncard.png', width: '30' ,height:'20', alt: 'saioncardロゴ'
            %li
              = image_tag 'jcbcard.png', width: '32' ,height:'20', alt: 'jcbcardロゴ'
            %li
              = image_tag 'americancard.png', width: '21', height:'20', alt: 'americancardロゴ'
            %li
              = image_tag 'diners_club.png', width: '32' ,height:'20', alt: 'dinersclucロゴ'
            %li
              = image_tag 'discover.png', width: '32' ,height:'20', alt: 'discoverロゴ'
          %section.middle
            %label 有効期限
            %span 必須
          .add__card
            = f.select :exp_month,[["01",1],["02",2],["03",3],["04",4],["05",5],["06",6],["07",7],["08",8],["09",9],["10",10],["11",11],["12",12]],{} ,id: 'exp_month', class:'card__number'
            //アングルダウンがきれいにいかないので他に良い方法があるかも。
            %span 月
            = f.select :exp_year, [["19",2019],["20",2020],["21",2021],["22",2022],["23",2023],["24",2024],["25",2025],["26",2026],["27",2027],["28",2028],["29",2029]],{} ,id: 'exp_year', class:'card__number'
            %span 年
          %section.bottom
            %label セキュリティコード
            %span 必須
          = f.text_field :cvc, type: 'integer',class:'card__number', id: 'cvc'
          .action
            %a1.question__mark ?
            %a カード裏面の番号とは
          .link__btn#card_token
                    / ↑ここもjsに関係するので大事。
            = f.submit '追加する', class: 'add__card__btn', id: 'token_submit'
                                                          /↑ここでid設定しないとjsで受け取ってくれない。
```

そんでscssはみんながんばれ。
これで大抵うまくいくかと。
質問あればコメント頂戴な！！

ではまた次でお会いしましょう。
AtCoder 生活　79日目

[前回](https://qiita.com/flandrescarlet237/items/8e45a80bd878d604e3f3)

#79日目
今回は茶色diffの問題を3問解きました。

|問題|難易度|自力で解けた|かかった時間|
|:-:|:-:|:-:|---|---|
|ABC068|C|◯|154分14秒|
|ABC022|B|◯|27分39秒|
|ABC041|C|◯|12分22秒|

##[ARC068_C](https://atcoder.jp/contests/abc068/tasks/arc079_a)

```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using Graph = vector<vector<int>>;

const int INF = 2e9;

int main(){
    int n,m;
    cin >> n >> m;
    Graph g(n + 1);
    rep(i,m){
        int a,b;
        cin >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    vector<int> dist(n+1,-1);
    queue<int> que;
  	que.push(1);
    dist[1] = 0;
    while(!que.empty()){
        int v = que.front();
        que.pop();
        for(int nv : g[v]){
            if(dist[nv] != -1) continue;
            dist[nv] = dist[v] + 1;
            que.push(nv);
        }
    }
    if(dist[n] == 2) cout << "POSSIBLE" << endl;
    else cout << "IMPOSSIBLE" << endl;
}

```

解くのにかかった時間：154分14秒


##[ABC022_B](https://atcoder.jp/contests/abc022/tasks/abc022_b)

```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;
using ll = long long;
using pii = pair<int,int>;

const int INF = 2e9;

int main(){
    int n;
    cin >> n;
    vector<int> a(n);
    rep(i,n) cin >> a[i];
    map<int,int> mp;
    int ans = 0;
    rep(i,n){
        mp[a[i]]++;
        if(mp[a[i]] > 1) ans++;
    }
    cout << ans << endl;
}

```

解くのにかかった時間：27分39秒

##[ABC041_C](https://atcoder.jp/contests/abc041/tasks/abc041_c)

```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;
using ll = long long;
using pii = pair<int,int>;

const int INF = 2e9;

int main(){
    int n;
    cin >> n;
    map<int,int> mp;
    vector<int> a(n),r(n);
    rep(i,n){
        cin >> a[i];
        mp[a[i]] = i+1;
        r[i] = a[i];
    }
    sort(r.rbegin(),r.rend());
    rep(i,n)cout << mp[r[i]] << endl;
}

```

解くのにかかった時間：12分22秒

###最後に
BFSでないと解けないのかどうかをしっかり理解して素早く解いていきたい

難易度|かかった平均時間|解けた問題数|
|:-:|---|---|
|B|27分39秒|1問中1問|
|C|83分18秒|2問中2問|
Graphvizは多分condaだけでインストールできるよって話

お仕事で決定木とか表示させるのに使おうとしたら割と手こずりました。
どうしてみんなpipをanaconda環境で使うんだ…怖い…ってなってたけど特に使わなくてもできるやんけ！
ってなった話です。
お仕事先の話を帰宅後思い出しながら書いてるのでうろ覚えですがよろしくお願いいたします…。

#動作環境
Windows10PC
anaconda導入済
#手順
前準備としてAnaconda Scriptを開いときます。
##1.Graphviz本体をインストールする
anacondaなのでcondaです。
pipだとインターフェース部分が入ってくるっぽいのですがanacondaでは入ってこないです。
Anaconda Scriptにコマンドを打ちます。
`conda install graphviz`
確認画面でyesを選択です。
インストール先に後でPATHを通さないと動かないので注意
##2.python-graphvizをインストールする
graphvizのインターフェースであるpython-graphvizをインストールします。
Anaconda Scriptで同様にコマンドを打ちます。
`conda install python-graphviz`
これも同様に確認画面でyesを選択します。
##3.PATHを通す
Graphvizのインストール先にPATHを通します。
職場のPCの場合C:\Users\ユーザー名\anaconda3\Library\binにインストールされていました。~~確か~~
ターミナルを再起動して`dot -V`と入力すると多分バージョンが表示されたハズです。

ここまで読んでくださりありがとうございました。
動かねぇなどの突っ込み等お待ちしております。
Railsが難しくて辛い！Ⅱ


# ファイルの場所が分らない

まずこれ！
頭の中がアナログな私にはrails newで作成されたアプリのファイルがどういう構造になっているのか分かりませんでした。
なんたって全部*アルファベット*なんですもの。

私は全て紙に書いて行きました。
そう、appからREADME.mdまで全て。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/5eb1143f-6443-5e5b-f837-bb2bddc16a4a.png)


こんな感じに最初はなっているかと思います。
今回は最初に理解しておきたいアプリケーションを作成する時にメインでいじるファイルがどこにあるのかを確認しましょう。
それ以外が後から徐々に理解が進みますので焦らないで大丈夫です。

## 画像の左上にある**app**これがアプリケーションの本体です。
appはアプリケーションの略ですね。
この中で最初に必要なのは、assets(アセッツ)・controllers(コントローラーズ)・models(モデルズ)・views(ヴューズ)の4つです。
それぞれ、ページの装飾、操作、データ、画面の表示を司るファイル群です。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/fe36bc0d-7714-f4b8-1566-669d942a9a4b.png)

### assets(アセッツ)
**ページの装飾に関係する物が入っています。**
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/043b3837-c711-e101-776d-8d30f9f8ecf9.png)
assets(アセッツ)の中に４つフォルダがあるかと思います。

- **config(コンフィグ)**：ジャバスクリプトの設定などが入っています。
- **images(イメージズ)**：埋め込み等で使用する画像などを入れておきます。
- **javascripts(ジャバスクリプト)**：ジャバスクリプトのコードが入ります。
- **stylesheets(スタイルシート)**：CSSが入ります。


### controllers(コントローラーズ)
アプリケーションのを動かす各種コントローラが入っています。
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/041cc66e-7d6f-246d-e032-d51ad517e37a.png)

- **application_controller(アプリケーションコントローラ)**：初期から存在します。アプリケーションで共通のコントローラです。
- **その下**：自分で作成したコントローラです。

### models(モデルズ)
データを扱う各種モデルが入っています。
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/20ecbdb9-7dec-5fe9-91ce-e4c1d1193cc4.png)
- 基本全て自分で作ります。

### views(ヴューズ)
各種HTMLが入ります。フォルダ名はコントローラ名と一致しています。
この中のusersは　＝　users_controllerからきています。
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/602efb57-e119-85e0-de34-2866ad9c5528.png)


## 次にconfigです。各種設定ファイルが入っています。
この中で最初に知っていたいのは、routes.rbです
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/efb9a739-0f26-6320-1775-f61328c99ffe.png)

###routes.rb(ルーツ)
ルーツ、つまり経路（ルート）の複数です。
コントローラやモデルなどアプリを動かす物を繋ぐ道のような役割です。

## 次にdbです。各種データベース関連ファイルが入っています。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/1705b880-ed2a-f46c-b465-b2bee839e1f1.png)
知っておきたいのはmigrate(マイグレート)です
### migrate(マイグレート)
この中にはデータベースの設計が入っています。
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/9c5b5dcc-1a64-c65c-44d6-0a997c9ef791.png)

## 最後にGemfileとGemfile.lockです。
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/96edd929-6249-169d-d363-c46bc9a37ba3.png)
この２つは、色々な機能をアプリケーションにインストールする時に使用します。

- Gemfile(ジェムファイル)：gem(ジェム)と言われる機能（アプリのようにパッケージされたもの）を記載して置く場所
- Gemfile.lock（ジェムファイルロック）：ジェムをインストールするたびに生成され直され、このアプリケーションで使用しているジェムの情報（バージョン等）を表示、固定しています。

# まとめ

今回はファイルの場所を整理していきました。
最初に覚えたいのは**８つ**だけです。
appの中にあるassets(アセッツ)、controllers(コントローラーズ)、models(モデルズ)、views(ヴューズ)
configの中にあるroutes.rb(ルーツ)
dbの中にあるmigrate(マイグレート)
それとGemfileとGemfile.lockです。

なんの役割のファイルがどのファイルの中にあるのか。
それが整理できればだいぶスッキリしてくると思います。
Gitのブランチの操作について

# ブランチの基本操作について

```shell
# ブランチの一覧を見る
git branch -a

# 新規ブランチを作成＆切替
git checkout -b {new_branch}

# 新規ブランチを作成&切替(origin/masterを元に)
git checkout -b {new_branch} {origin/master}

# ただの新規ブランチ作成
git branch {new_branch}

# ブランチの切換え
git checkout {new_branch}

# 現在のブランチ確認
git branch --contains

# 特定地点のコミットのブランチを作成する
git checkout {HEAD}
```

# ブランチの削除について

```shell
### ローカルブランチの削除
# HEADにマージしたブランチを削除する
git branch --delete {branch_name}

# マージしたかどうかに関わらず削除する
git branch -D {branch_name}

### リモートブランチの削除
# GitHub上で不要なブランチを削除する
# Pull Request > Delete Branch

# ローカルGit上で不要なブランチを削除する
git push --delete origin {branch_name}
```
Railsが難しくて辛い！

# 初めまして、こんにちは。

まーたろーです。よろしお願いします。
今回は私がプログラミングスクールに通い始めて初めて躓いた内容を公開します。
正直、辛かった！挫折しそうでした。
でもなんとか持ちこたえることが出来ました。

どう質問したらいいか分からない、そんな私と同じところで躓いた人。
そんな人の参考になると嬉しいです。
私の様に、まだアルファベットに頭が慣れていない人もいるかもしれないので、今回はなるべくカタカナ表記で書きます。

では、さっそくいきましょう！！

## 用意するもの

- 紙
- ペン

頭の中を整理するには、じっくり自分と向き合うのが一番です。
それにはやっぱり紙とペンがいい。
時間はかかってもいいんです。今、整理してしまいましょう。


# 難しい！！

Railsを初めて、何が分からないのか分からない。そんな状態になっていませんでしょうか？
私はなりました。
というより。Rubyのクラスとインスタンスの時点でそうなりました。
先ず、何が分らないのか、納得できていないのかモヤモヤするのか、ハッキリさせましょう。

## 分からない場所はどこ？
- [ファイルの場所が分らない](https://qiita.com/m-kawakami/items/91b3f36493018f830806)
- ファイルの繋がりが分からない
- コントローラーの役割分からない
- モデルの役割が分からない
- ビューの役割が分からない
- ルーティングの役割が分からない
- データベースが分からない
- CSSが分からない

などなど・・・当てはまるものはありますか？
私は**全て**でした
【PyTorch】BERTを用いた日本語文書分類入門

## はじめに
本稿では、ニュース記事をカテゴリに分類するタスクを通して、事前学習済みBERTモデルをファインチューニングする流れを追っていきます。

本編は以下のリンク先に移転しました。
https://amaru-ai.com/entry/2022/10/18/210620
FirebaseコンソールでFlutterアプリのios版がいつまでたっても認識されない

管理コンソールで赤いバッジがずっとついていて、アプリを起動しても認識してくれないことに2アプリでハマりました。

どちらも何故かiOSシミュレータで起動すると認識されるようになりました。

でcrashlyticsの方は実機の方が反応するような気がする。

謎い。

もう一回ハマる気がするので一応メモ
IBM i (旧AS400）の自己学習メモ　番外編０３　IBMが提供している参考資料集

# 自己学習メモインデックス

[IBM i (旧AS400）の自己学習メモ　インデックス](https://qiita.com/You_name_is_YU/items/3964849e7803c8eaf767)

# 概要

IBMiでのプログラミングなど、自己学習を進めるうえで、随時Webで検索したり、その都度ヒットした資料を見たり、
自分で購入した書籍を読んだりしながら進めていました。
改めて、よく活用した資料の中で、実はIBMがちゃんと体系的にまとめた資料を一般公開しており、
書籍とか買わなくてもいいんじゃね？というレベルのものもあったので、参考資料集として自分が必要だと思うものをひとまとめにしました。

# 参考資料集

- IBMiのプログラミング関連資料のルート
    - [IBM i 7.4 の資料（プログラミング）](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rzahg/rzahgicprog2.htm)
    - このページを基準に、様々な資料（Web／PDFなど）にアクセスできます。
- データ記述仕様（DDS）関連
    - [プログラミング DDS 概念](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/dds/rbafppdf.pdf?view=kc)
    - [プログラミング DDS 物理ファイルと 論理ファイル](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rzakb/rzakbpdf.pdf?view=kc)
    - [プログラミング DDS 表示装置ファイル](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rzakc/rzakcpdf.pdf?view=kc)
    - [プログラミング 印刷装置ファイルの DDS](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rzakd/rzakdpdf.pdf?view=kc)
    - [プログラミング DDS ICF ファイル](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rzake/rzakepdf.pdf?view=kc)
- 制御言語（CL）関連
    - [プログラミング CL 概説および 概念](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rbam6/rbam6pdf.pdf?view=kc)
- RPG関連
    - [ILEの概念](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/ilec/sc415606.pdf?view=kc)
    - [プログラミング ILE RPG 解説書](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rzasd/sc092508.pdf?view=kc)
- その他
    - [IBMi デバッガー](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rzamq/rzamqpdf.pdf?view=kc)
    - [アプリケーション表示プログラミング](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_71/rzakc/sc415715.pdf)
        - 画面実装に関連するプログラミングの基礎を学べるPDF（バージョンがちょっと古いですが問題ないと思います。）
    - [印刷の基本](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rzalu/rzalupdf.pdf?view=kc)
Machines Learning 学习笔记(Week10)

##Gradient Descent with Large Datasets

- Batch gradient descent: Use all $m$ examples in each iteration 
 - very computationally expensive
- Stochastic gradient descent: Use 1 example in each iteration
 - We can plot cost $\bigl(\theta,(x^{(i)},y^{(i)})\bigr)$ (averaged over the last (say) 1000 examples) to monitor how stochastic gradient descent is doing
 - If we reduce the learning rate α (and run stochastic gradient descent long enough), it’s possible that we may find a set of better parameters than with larger α.
 - If we want stochastic gradient descent to converge to a (local) minimum rather than wander of "oscillate" around it, we should slowly decrease α over time.
- Mini-batch gradient descent: Use $b$ examples in each iteration (b = mini-batch size 2-100)

- Map Reduce (Parallelize data computing)
 - use multiple computers or cores to parallelize learning algorithm
InvokeVBAのすゝめ

## それ、マクロでよくね？
[こちら]("https://qiita.com/Hellomy432/items/c9fdacc0c8dfc37154d0")の投稿で、2019年のRPA流行語大賞に選ばれた
#### それ、マクロでよくね？
現場でRPA開発をしていると確かにこの言葉がよく出ます。特に他人が作ったロボを保守していて、わざわざロボットで組まないでいいような処理を強引にUI操作で実現しているような目も当てられないポンコツの前では、この言葉が罵詈雑言となって出てくる。
私個人としては、「マクロでやるべきもの、UI操作でやるべきものを正しく切り分ける」ことが大事だと考える。
しかし、厳密にこれはマクロ、あれはUI操作、と明確な判断基準がないので何とも言えないが、今日は明らかにマクロで実装したほうが良いものを（よかったもの）を2つ紹介する

## シートの削除
仮にシートの削除をUI操作で実装しようとした場合、RPAツールでは
　1. 削除対象のシートを右クリック
　2. 「削除(D)」をクリック
　3. このシートは完全に削除されます～～で「はい」をクリック
という3ステップを踏む必要がある。一般的にRPAツールでは画面描写のタイミングによってうまくクリックできなかったり、対象のエクセルが重すぎて削除に時間がかかって後続の処理がうまくいかなかったりと、UI操作には一定不安定要素が残る。

しかし、これをマクロ（InvokeVBA）で実装した場合は以下になる

```visualbasic

Sub deleteSheet()
	Application.DisplayAlerts = False
	sheet([対象シート]).Detele
	Application.DisplayAlerts = True
End Sub
```

## グループ化の解除
これはさっきのシート削除と比べると、絶対にVBAで実装したほうがいいレベルの処理。たとえば、グループ化を解除したいときは、コレをクリックする必要があるが、そもそもこれが何行目に存在するのか、デフォルト表示なのか非表示なのか…という具合に、RPA化する上での罠がてんこ盛り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646573/b4d2fda1-60fc-63a9-4b63-3440b1f9271a.png)

ただこれをVBAで書くと

```visualbasic
Sub グループ化解除()
    On Error GoTo ERR
    sheet([対象シート]).rows.Ungroup
ERR:
End Sub
```
はいおしまい。たったこれだけで確実にグループ化を解除する処理が組める（グループ化する処理も同様）


## VBA活用によって得られる利点
##### 安定性の向上
不安定要素を孕むUI操作よりも一般的に安定稼働する

##### 可読性の向上
UI操作だけでは、何を実現したいのか直感的に理解しづらい点があるがコードであれば直感的に理解が可能
Rustで時計作りました。。。

Rustで時計作りました...

```rust
use std::thread;
use std::time::Duration;

fn main() {
  let mut time: (i32, i32, i32) = (0,0,0);

  loop {
    time.2 = time.2 + 1;
    if time.2 == 60{
      time.2 = 0;
      time.1 = time.1 + 1;
    }
    if time.1 == 60{
      time.1 = 0;
      time.0 = time.0 + 1;
    }
    if time.0 == 24{
      time.0 = 0;
    }
    println!("{}時{}分{}秒",time.0,time.1,time.2);
    thread::sleep(Duration::from_millis(1000));
  }
}
yarn add コマンドで "There appears to be trouble with your network connection. "と表示された際の対処法

開発で使っている npm レジストリのドメイン変更後に `yarn add `コマンドを実行するとエラーが発生するというトラブルに遭遇したので、原因と解決法をメモします。

## [トラブル内容]
npm レジストリのドメインの変更後に `yarn add` で新しいnpm レジストリからモジュールを取得しようとしたところ、下記のようなエラーが発生してインストールができなくなりました。

```
[1/4] Resolving package...
[2/4] Fetching packages...
warning Pattern [library name] is trying to unpack in the same destination ...
This could result in  non-deterministic behavior, skipping.
Info There appears to be trouble with your network connection. Retrying...
```

 
ドメイン変更後に、`yarn config set registory `(念のために`npm config set registory`も)で参照のレジストリを変更したのですが、エラーは解決しませんでした。

## [原因]
一部のモジュール(`yarn add `コマンドで追加しようとしていたモジュールの依存先)の yarn.lockファイル内での参照レジストリが 古いままになっていました。

## [解決方法] 
下記の手順の前に`yarn config  list `で参照レジストリが新しいものになっているか確認するといいです。
(古いままになっていた場合は、`yarn config set registory <npm レジストリのURL>`で参照レジストリを更新します。)
 
1. `yarn cache clean <対象モジュール名>` で対象モジュールのyarnのキャッシュを削除
2. `node_modules`フォルダと`yarn.lock` ファイルを削除
3. `yarn (install)` コマンドを実行して`node_modules`フォルダと`yarn.lock` ファイルを作り直す

上記の手順を実行したところ、無事すべてのモジュールの参照先レジストリが新しいドメインに変更され、`yarn add `コマンドも成功しました。

## [参考]
トラブル解決にあたって、下記を参考にしました。

* [npm installで失敗したときの5つの解決方法](https://sugimotonote.com/2017/10/31/npm-install-error/)
* [yarn cache](https://classic.yarnpkg.com/ja/docs/cli/cache/)
* [yarn config](https://classic.yarnpkg.com/en/docs/cli/config/)
【Golang】サードパーティ talib

#【Golang】サードパーティ talib
Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。

```
package main
/*
quoteで株価取得、
talibで株価分析をする

インストール 済
go get "github.com/markcheno/go-quote"
go get "github.com/markcheno/go-talib"
*/

import (
	"fmt"
	//株価取得
	"github.com/markcheno/go-quote"
	//株価分析
	"github.com/markcheno/go-talib"
)


func main() {
	//Quote
	//yahooからSPY株価を取得
	spy, _ := quote.NewQuoteFromYahoo(
		"spy", "2018-04-01", "2020-01-01", quote.Daily, true)
		//"spy", "2018-04-01", "2020-01-01", quote.Min60, true)
		//"spy", "2018-04", "2020-01", quote.Monthly, true)

	fmt.Println(spy.CSV())


	//Talib
	//RSI取得
	//株価の買われすぎ、売られすぎの指標
	// spyの終値過去2日間を基にしたRSIを取得
	
	rsi2 := talib.Rsi(spy.Close, 2)
	fmt.Println(rsi2)


	//移動平均線
	mva := talib.Sma(spy.Close, 14)
	fmt.Println(mva)

	//指数平滑移動平均
	ema := talib.Ema(spy.Close, 14)
	fmt.Println(ema)
	

    //この他、様々なインジケーターを取得できる.(ドキュメント)

}
```
windowsでiverilog その27

#概要

windowsでiverilogやってみた。
チャタリング対策、書いてみる。

#サンプルコード


```

module chattering(input clk, rst, sw, output out);
	reg s,
		o;
	assign out = o;
	always @(posedge clk or posedge rst)
	begin
		if (rst)
		begin
			s <= 1'b0;
			o <= 1'b0;
		end
		else
		begin
			if (s == sw)
			begin
				o <= sw;
			end
			else
			begin
				s <= sw;
			end
		end
	end
endmodule

module test();
	reg clk;
	reg rst;
	reg sw;
	wire out;
	chattering u(.clk(clk), .rst(rst), .sw(sw), .out(out));
	initial
	begin
		$monitor("%b %b %b %h", clk, rst, sw, out);
		clk = 0;
		rst = 0;
		#10
			rst = 1;
		#10
			rst = 0;
		#10
			sw = 1;
		#10
			sw = 1;
		#10
			sw = 1;
		#10
			sw = 0;
		#10
			sw = 1;
		#10
			sw = 0;
		#50
			$finish;
	end
	always
	begin
		#5
			clk = 1;
		#5
			clk = 0;
	end
endmodule




```

#実行結果


```


0 0 x x
1 0 x x
0 1 x 0
1 1 x 0
0 0 x 0
1 0 x 0
0 0 1 0
1 0 1 0
0 0 1 0
1 0 1 1
0 0 1 1
1 0 1 1
0 0 0 1
1 0 0 1
0 0 1 1
1 0 1 1
0 0 0 1
1 0 0 1
0 0 0 1
1 0 0 0
0 0 0 0
1 0 0 0
0 0 0 0
1 0 0 0
0 0 0 0
1 0 0 0
0 0 0 0


```

以上。
Java 3級対策　問１過去問ポイントまとめ

自己学習用メモ
知識問題まとめ

####Javaとは
- オブジェクト指向型プログラミング言語
- コンパイル型


####扱うことのできる変数は・・・
  ①「基本データ型」
	②「参照型」

####エラーチェックは
- 「コンパイル時」「実行時」双方で行われる

####javaコマンド
- 実行するプログラムには「mainメソッド」が必要
- javaプログラムのコンパイルが可能

####javacコマンド
- コンパイル用

#### 「.java」
- javaソースファイルの拡張子
- コメント記述OK
- 命令文の区切りは「；（セミコロン）」

####「.class」
- クラスファイルの拡張子
- コンパイルしないで別のJavaプラットフォーム上で実行することができる

#### 実行
- mainメソッドから実行が開始される
- 「ランタイムライブラリ」「JVM（Java Virtual Machine）」が必要

####JRE（Java Runtime Environment)
- コンパイラ以外、Javaのプログラム実行に必要なものはすべて含まれる
	（仮想マシンも）

#### ガーベッジコレクション
- 不要になったメモリ領域を解放する機能
タプルの仕組み｜Python

#Pythonでよく見る値のスワップ
よく見かける値の交換（スワップ）方法に以下のようなものがあります。
例えば C/C++

```c++:swapSample.cpp
#include <iostream>
using namespace std;
int main(void){
//初期設定
int x = 10;
int y = 25;
int tmp = 0;

cout << "x:"<< x << ", " << "y:"<< y << '\n';

// ここで交換処理をする
tmp = x;
x = y;
y = tmp;

cout << "x:"<< x << ", " << "y:"<< y << '\n';
return 0;
}
// 出力結果：
// x:10, y:25
// x:25, y:10

```
こういうswap処理をPythonでは以下のようにしてしまいます。

```Python:swapPython.py
x, y = 10, 25
print("x:{0}, y:{1}".format(x,y))
x,y = y, x # これだけでswap!
print("x:{0}, y:{1}".format(x,y))
# 出力結果：
# x:10, y:25
# x:25, y:10
```
この方法はよくフツーに便利に使っていますが、これはPythonのもつ
**タプル**
という機能です。

これはリストとは違い、
`t = (1, 2, 3, 4, 5)`
のように表現します。すると
`>>> t [ENTER]`
`> (1,2,3,4,5)`
`>>>`
のように値が格納されています。
いろいろな使用方法はあるのですが、今回はスワップについて。
##タプルのアンパッキング
タプルはかっこ（）を省略することが可能です。
以下の表現は

```Python:swapPython.py
x, y = y, x # これだけでswap!
```
という箇所は実は

```Python:swapPython.py
(x, y) = (y, x) # これだけでswap!
```
というタプルの処理を実行したことになります。
#まとめ
ちょっとしたことでしたが
いつもやってる処理が、実はこういう意味だったんだ
と気づくことは多いものですね。
クラウド初心者のAWS入門(第11回)

# 第11回 WordPressのインストール(おしまい)

今回はWordPressをWebサーバ上にインストールしていきます。
インストール後は動作確認として、自端末からWebブラウザを通してWordPressへアクセスします。

|![システム構成図_第11回目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/5b7e9065-414f-9edb-b3a8-68aee13074e6.png)
|:-:|

## 下準備

PHP関連ソフトウェアと、WebサーバからWordPressのDBへアクセスするためのソフトウェアインストールを行います。

```
## php最新版を確認する
$ sudo amazon-linux-extras

## php7.4が利用可能最新版だったため7.4をインストール
$ sudo amazon-linux-extras install php7.4

## ライブラリ関連のインストール
$ sudo yum -y install php php-mbstring

## WebサーバからDBへ接続できるようMariaDBコマンドをインストール
$ sudo yum install mariadb-server

## DBサーバへ疎通確認を行う
## オプション'-u'のあとは、前回作成したユーザを指定
$ mysql -h 10.0.2.10 -u wordpress -p

## 接続の確認ができたらDBを抜ける
MariaDB[none] > exit;
```

## WordPressファイルのダウンロード＆展開

WordPressをHPからダウンロードし、Apacheのコンテンツフォルダにコピーします。

```
## WordPressをダウンロード
## ダウンロードしたい場所へ移動、今回はユーザのホームディレクトリ
$ cd ~
$ wget https://ja.wordpress.org/latest-jar.tar.gz

## ダウンロードしたgzファイル展開
$ tar zxvf latest-ja.tar.gz

## 展開したwordpressフォルダ配下をApacheフォルダにファイルコピー
$ sudo cp -r ./wordpress/* /var/www/html/

## 所有者とグループをApacheユーザに変更
$ sudo chown apache:apache /var/www/html -R
```

## Apacheの起動

Apacheを起動します。

```
## httpdの起動状態確認
$ sudo systemctl status httpd

## 状態に応じて`restart`もしくは`start`をする
## 今回は起動していたため`restart`する
$ sudo systemctl restart httpd
```

## WordPressのインストール＆設定

WebサーバのパブリックIPをブラウザのアドレスバーに入力して、WordPressにアクセスします。

|<img width="1012" alt="img 2020-06-14 12.11.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/4c401f6a-a836-8458-1f95-80ddfe945ed8.png">
|:-:|

続けて設定を行っていきます。

* データベース名：wordpress
* ユーザ名：wordpress
* パスワード：DB作成時に入力したパスワード
* データベースのホスト名：10.0.2.10(DBサーバのIPアドレス)
* テーブル接頭辞：そのまま

|<img width="843" alt="img 2020-06-14 12.12.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/656a550c-d054-472d-769c-9324e892338e.png">
|:-:|

「インストール実行」を選択し、さらに必要項目の入力を行います。

|<img width="771" alt="img 2020-06-14 12.14.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/e26849bb-d336-53bc-d191-42d3e7c522dc.png">
|:-:|

以上でWordPressの初期設定が完了となります。

## 終わりに
AWSに触れてみたいと思っているけど、何から手を付ければ良いかわからない、という方へのとっかかりとなればと思い記載を始めました。

所管ではございますが、普段オンプレミス環境での構築ばかりなので、機材手配や設置場所・電源の確保が不要で、ここまでの環境が整備できる事に感動しました。

同僚の方も見てくれていたら是非触れてみて欲しいと思います。拙い文面でしたが、お付き合いいただきましてありがとうございました。

## 参考文献
[Amazon Web Services 基礎からのネットワーク&サーバー構築](https://shop.nikkeibp.co.jp/front/commodity/0000/231260/)
Python Djangoでよく使うコマンド8選

# はじめに
本記事では、PythonのWebフレームワークであるDjangoでよく扱うコマンドをまとめて取り上げていきます。

## プロジェクト作成
```
$ python manage.py startproject [プロジェクト名]
```
Djangoプロジェクトを作成するコマンドです。

## アプリケーション追加
```
$ python manage.py startapp [アプリケーション名]
```
既存のプロジェクトにアプリケーションを追加するコマンドです。
ソースコードを機能ごとに分けたい場合に有効です。

## ローカルサーバ起動
```
$ python manage.py runserver
```
ローカルサーバ上でDjangoプロジェクトを起動するコマンドです。
コマンド上でポート番号を指定しない場合、ポート番号は自動的に8000になります。
実行後、`http://localhost:8000`にアクセスすると、Djangoプロジェクトを確認できます。


## 管理者アカウント作成
```
$ python manage.py createsuperuser
```
Djangoプロジェクトの管理者アカウントを作成するコマンドです。
実行後、`メールアドレス`・`パスワード`をターミナル上で入力します。
また、Djangoの管理画面（URL: [ルートURL]/admin）で作成した管理者アカウントでログインできます。

## Python対話モード起動
```
$ python manage.py shell
```
Pythonの対話モードを実行するコマンドです。
Pythonの挙動を調査することはもちろん、Djangoプロジェクトの**データベースを生成・操作する**ために利用する場合もあります。

## データベース対話モード起動
```
$ python manage.py dbshell
```
データベースの対話モードを実行するコマンドです。
Djangoプロジェクトのデータベースに存在するテーブル名やテーブルの中身を取得できます。
デフォルトの場合、SQLiteの対話モードを起動します。

## マイグレーションファイル作成
```
$ python manage.py makemigrations
```
データベースの反映に必要であるマイグレーションファイルを追加するコマンドです。
models.pyにスキーマを追加した後によく使うことが多いです。

## データベース反映
```
$ python manage.py migrate
```
マイクレーションファイルからデータベースに反映するためのコマンドです。
`runserver`実行する前に`migrate`を実行することが多いです。

# おわりに
私がよく使うコマンドを厳選して上げてみましたが、他によく使うコマンドがあれば、コメントよろしくお願いします。
Automator で AirPods Pro を MacBook に接続させる方法

iPhoneとMacBookの両方にAirPodsを接続して使用していると、接続の切り替えが面倒です。
追加コマンドのインストールなしで、Automatorで自動化します。
https://dev.to/toshihue/connecting-airpods-pro-using-automator-53gk
【javascript】ページのスクロールで画像を入れ替えたい。

ポートフォリオサイトの制作中に使った画像の入れ替えについて
ざっくりまとめたのでご紹介。
( 今回はhamlではなくhtmlそのまま使用しています)
# やりたい事
以下のように、スクロール用によって画像をじんわり入れ替えたい。
[![Image from Gyazo](https://i.gyazo.com/ac0dc2743f39474c48e42ebb483700aa.gif)](https://gyazo.com/ac0dc2743f39474c48e42ebb483700aa)

# 1. 使う画像を準備する
今回は二枚の画像を入れ替えます。
クラスとかwidthはなんでも構いません。

```html:sample.html
~ 省略 ~

<div class="image-man">  ⬅️写真二枚いれる箱
  <img src="img/javascript.png"  class="js-image" width= 39%>
  <img src="img/github.png"  class="git-image" width= 39%>
</div>

~ 省略 ~
```

# 2. CSSを準備する
2枚目のGithubの方は下に重ねて、透過度を０にしておきます。

```css:sample.css
.js-image {
  margin-left: 395px;
  margin-top: 140px;
  z-index: 1;
}
.git-image {
  z-index: 0;
  position: absolute;
    top: 140px;
    left: 395px;
  opacity: 0;
}
  
```

# 3. JSで画像の入れ替えの準備をする
今回は、少しでも下にスクロールしたら2枚目の画像に変えたいので
１０pxで発火するようにしています。
じんわり透過率を変えたかったので（transition）を設定しています。

```js:sample.js
window.onscroll = function(){  
var scrollTop = window.pageYOffset ;  //スクロール量を代入する

if (scrollTop == 0 ) {   //最上部に戻ってきた時
$(".js-image").css('opacity', '1')
  $('.js-image').css('transition', '0.5s')

  $(".git-image").css('opacity', '0')
  $('.git-image').css('transition', '0.5s')
}
if (scrollTop > 10 ) {   //１０pxスクロールした時
  $(".js-image").css('opacity', '0')
  $('.js-image').css('transition', '0.5s')
    
  $(".git-image").css('opacity', '1')
  $('.git-image').css('transition', '0.5s')
}
}
```

___________________________
以上で終了です。
ご覧いただきありがとうございました。
Shopifiy Node AppのGraphqlで”Required parameter missing or invalid”エラーが出る

## ハマった
Shopify App CLIで作成した、Shopifyのnext.js node appで、
Graphqlが、HTTP400エラーになってハマった。

```
{"errors":{"query":"Required parameter missing or invalid"}}
```

## 解決

これで、解決した。
https://community.shopify.com/c/Shopify-APIs-SDKs/Can-t-Fetch-Graphql-Admin-API-with-Koa-shopify-graphql-proxy/m-p/569101



post bodyをパースする、`koa-bodyparser`をインストールしていて、

```js
import bodyParser from "koa-bodyparser"
```

graphQLProxyの前に差し込んでいた。

【誤】

```js
server.use(bodyParser())
server.use(
    graphQLProxy({
      version: ApiVersion.October19,
    })
)
```

【正】

```js
server.use(
    graphQLProxy({
      version: ApiVersion.October19,
    })
)
server.use(bodyParser())

```



の順にすると治った



Shopify App CLI （Github）
https://github.com/Shopify/shopify-app-cli
windowsでiverilog その26

#概要

windowsでiverilogやってみた。
bcdcounter書いてみる。

#サンプルコード


```

module bcd(input clk, input rst, input inc, output reg [3:0] dg2, output reg [3:0] dg1, output reg [3:0] dg0);
	always @(posedge clk)
	begin
		if (rst)
		begin
			dg2 <= 4'b0;
			dg1 <= 4'b0;
			dg0 <= 4'b0;
		end
		else if (inc)
		begin
			if (dg0 != 4'd9)
			begin
				dg0 <= dg0 + 1'b1;
			end
			else
			begin
				dg0 <= 4'd0;
				if (dg1 != 4'd9)
				begin
					dg1 <= dg1 + 1'b1;
				end
				else
				begin
					dg1 <= 4'd0;
					dg2 <= dg2 + 1'b1;
				end
			end
		end
	end
endmodule

module test();
	reg clk;
	reg rst;
	reg inc;
	wire [3:0] dg2,
		dg1,
		dg0;
	bcd u(.clk(clk), .rst(rst), .inc(inc), .dg2(dg2), .dg1(dg1), .dg0(dg0));
	initial
	begin
		$monitor("%b %b %b %h %h", clk, rst, inc, dg1, dg0);
		clk = 0;
		rst = 0;
		inc = 0;
		#10
			rst = 1;
		#10
			rst = 0;
		#10
			inc = 1;
		#10
			inc = 0;
		#10
			inc = 1;
		#10
			inc = 0;
		#10
			inc = 1;
		#10
			inc = 0;
		#10
			inc = 1;
		#10
			inc = 0;
		#10
			inc = 1;
		#10
			inc = 0;
		#10
			inc = 1;
		#10
			inc = 0;
		#10
			inc = 1;
		#10
			inc = 0;
		#10
			inc = 1;
		#10
			inc = 0;
		#10
			inc = 1;
		#10
			inc = 0;
		#10
			inc = 1;
		#10
			inc = 0;
		#10
			$finish;
	end
	always
	begin
		#5
			clk = 1;
		#5
			clk = 0;
	end
endmodule





```

#実行結果


```


0 0 0 x x
1 0 0 x x
0 1 0 x x
1 1 0 0 0
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0
1 0 1 0 1
0 0 0 0 1
1 0 0 0 1
0 0 1 0 1
1 0 1 0 2
0 0 0 0 2
1 0 0 0 2
0 0 1 0 2
1 0 1 0 3
0 0 0 0 3
1 0 0 0 3
0 0 1 0 3
1 0 1 0 4
0 0 0 0 4
1 0 0 0 4
0 0 1 0 4
1 0 1 0 5
0 0 0 0 5
1 0 0 0 5
0 0 1 0 5
1 0 1 0 6
0 0 0 0 6
1 0 0 0 6
0 0 1 0 6
1 0 1 0 7
0 0 0 0 7
1 0 0 0 7
0 0 1 0 7
1 0 1 0 8
0 0 0 0 8
1 0 0 0 8
0 0 1 0 8
1 0 1 0 9
0 0 0 0 9
1 0 0 0 9
0 0 1 0 9
1 0 1 1 0
0 0 0 1 0
1 0 0 1 0
0 0 0 1 0


```
チーム開発で使ったgitコマンドまとめ

# チーム開発する上で使ったコマンドたち
## github上の本家リポジトリたちと連携するときの設定
作業前のセットアップについて
    1. 本家リポジトリに共同編集者を登録してもらう
    2. ~~本家リポジトリをフォークする~~
    3. remoteで本家リポジトリと~~フォークリポジトリ~~をローカルと連携する
    4. リポジトリが連携できているかチェックしてみる
## ローカルで作業するときの色々
作業するときに使ったコマンドたち
慣れるまでが大変なのでそこを頑張ってやる

## github上のリポジトリと共有する
リーダが作っているプロジェクトをローカルに持ってくる。
ターミナル上で自分のワークスペースに移動したら、

```
git clone https://github.com/ユーザー名/リボジトリ名
```
cloneコマンドを使うことでリポジトリを丸々ダウンロードすることができる。
そして、後でpushを利用してアップデートなどもできるようにこのURLをアップロード先に指定できるように
remoteコマンドを使う。

```
git remote add upstream https://github.com/ユーザー名/リボジトリ名
git remote -v
```
remote addによってダウンロード/アップロード先が保存される。
remote -vを使うことで名前とurlを確認できる。
ここまでできれば作業前の設定は完了。

## masterブランチは常に正常に
新しい作業をする前にmasterブランチに最新の情報を更新する。

```
git branch master             //ブランチをmasterにする
git fetch upstream            //本家リポジトリからデータを取得
git merge upstream master     //本家リポジトリのmasterをローカルに取り込むことで最新の状態にする
```

## 機能追加するときはmasterブランチから新ブランチを作成して作業する

```
git branch                    //現在のブランチの情報を取得
git branch 新ブランチ名        //新ブランチを作成
git checkout 新ブランチ名      //ブランチの切り替え
```
## データをpushして更新する
ある程度作業が進んだらデータをgithubにpushする。
機能の完成までしたらプルリクエストを送ってレビューしてもらい、masterブランチに統合してもらう。

```
git add .
git commit -m "更新内容"

git push upstream 作業ブランチ名
```

## プルリクエストが完了したら
プルリクエストが完了したらmasterブランチをpullして更新し、作業していたbranchを消去する

```
git checkout master             //ブランチをmasterにする
git fetch upstream            //本家リポジトリからデータを取得
git merge upstream master     //本家リポジトリのmasterをローカルに取り込むことで最新の状態にする
git branch -d 作業ブランチ     //作業ブランチの消去
```
新しい開発を進める時はまた新たにブランチを作成して作業する、といったように繰り返していく。

- 新ブランチに切り替えてコミットする
- 定期的にPushする
- masterにマージするためにプルリクエストをして他の人から承認をもらう
- maaterブランチにマージしたらローカルにも反映させて使ったブランチを消す
    1. cloneで本家リポジトリからローカルにデータを持ってくる
    2. fetchで本家リポジトリの更新の有無を確認する
    3. mergeで本家リポジトリの変更をローカルに反映させる
    4. branchを作成する
    5. checkoutでbranchを切り替える

### ブランチの仕組み
ブランチ → コミットを指したポインタ
HEAD → 現在の作業中のブランチを指したポインタ
作業しているブランチで、コミットを行うと新しいコミットを指す
だからある地点でブランチを作っておけばそのあと別のブランチで作業を行ってミスが見つかっても戻ることができる



## リポジトリの変更履歴を表示する
```
git log

//一行で見たい場合は--onelineを追加
git log --oneline
```

## コマンドを省略して楽をする
エイリアスを設定することでgit コマンドを省略しすることができる
同じことを繰り返すので設定しておくと便利

```
git config --global alias.ci commit     //省略後コマンド:git ci 
git config --global alias.st status     //git st
git config --global alias.br branch     //git br
git config --global alias.co checkout   //git co
git config --global alias.fe fetch      //git fe
```
この「一冊で全部わかるWeb技術の基本」アウトプット１

インターネットはDARPAが開発し各地のコンピューター同士をネットワークでつなげたいという目的で作られた。

Webはティム・バーナーズ＝リーが主になって開発し世界中の実験者と文書を共有したいという思いから作られた。

別々に誕生した双方だったが並行してより多くの人が利用しやすいように改良された結果、相乗効果で爆発的に普及した。
Laravelのoldヘルパーが空の場合の初期値...

# LaravelのBladeでold()が空の場合、つまり初期値を登録したい時ってありますよね

## 例

nameという値がold()に存在すればvalueに入力し、nullの場合`田中`と表示したいとする
正しいやり方というか推奨は一番下に書いてます

## 巷でよく見かけるやつ

うーん。。

```test.blade.php
<input type="text" name="name" value="@if (old("name") !== "") old("name") @else "田中" @endif">
```

## 三項演算子使ってるやつ

もう少し頑張れそう

```test.blade.php
<input type="text" name="age" value="{{ old("name") !== "" ? old("name") : "田中" }}">
```

## null合体演算子使ってるやつ

かなりスマートになった
けどもう少し

```test.blade.php
<input type="text" name="age" value="{{ old("name") ?? "田中" }}">
```

## old()の第二引数を使ってるやつ

第二引数に初期値を登録するだけでいいんですねー
楽ですねー今度から第二引数を使用しましょう

```test.blade.php
<input type="text" name="age" value="{{ old("name", "田中") }}">
```

終わり
windowsでiverilog その25

#概要

windowsでiverilogやってみた。
timer書いてみる。

#サンプルコード


```

module timer(input clk, output out);
	reg [4:0] cnt;
	assign out = cnt[3];
	initial
		cnt = 0;
	always @(posedge clk)
		cnt <= cnt + 1;
endmodule

module test();
	reg clk;
	wire out;
	timer u(.clk(clk), .out(out));
	initial
	begin
		$monitor("%b %b", clk, out);
		clk = 0;
		#100
			$finish;
	end
	always
	begin
		#5
			clk = 1;
		#5
			clk = 0;
	end
endmodule



```

#実行結果


```

0 0
1 0
0 0
1 0
0 0
1 0
0 0
1 0
0 0
1 0
0 0
1 0
0 0
1 0
0 0
1 1
0 1
1 1
0 1
1 1
0 1


```

以上。
フリーランスとは法的にどのような立場にあるのか　Part2

〜Part1の続き〜

条文の解釈によると、フリーランス（請負契約）は「労働者」となることができないとされます。
しかし、労働法が制定されたのは
**使用者の指揮命令に服し、拘束性の高い労働者を保護する**
という目的があるからです。

そのことを考えると、請負契約であってもその実態として使用される者は当然存在するわけで、
そのような人を保護するのが労働法である以上、請負契約であるかどうか関係なしに
労基法上の「**労働者**」に該当するとして保護を与える
というロジックが成り立つわけです。

#労働者性の判断基準
では、どのようにして労働者性（＝使用される者であるか）を判断するのかでしょうか。
実際に労働者性が争われた事件として、関西医科大学研修医事件があります。

この事件は、研修医Xさんが、医師と同等の仕事をこなしていたのに月６万円で働かされ、過労死したことに対し、遺族が、Xは労基法上の「労働者」に該当するとして、最低賃金の額までの未払い分の支給を求めて訴えを提起した事件で、Xさんが労働者であるか否かが争われた事案です。
これについて最高裁は、労基法上の「労働者」に該当するか否かの主要な判断基準として５点あげました。

それが

①**仕事の依頼、業務従事の指示等に対する諾否の自由の有無**
②**業務の内容及び遂行方法に対する指揮命令の有無**
③**勤務場所及び勤務時間に関する拘束性の有無**
④**代替性の有無**
⑤**時間給、欠勤の控除あるいは残業手当の付与等、報酬の性格が使用者のし指揮命令下に一定時
    間労務を提供していることに対する対価と判断されるか否か**

の５点です。

それぞれについて軽く説明すると
①について
・諾否の自由あり…交渉力が高い→労働者性が後退
・諾否の自由なし…交渉力が弱い→労働者性肯定

②について
・指揮命令なし…自由裁量がある→労働者性後退
・指揮命令あり…自由裁量がなく従属性が高い→労働者性肯定

③について
・拘束性なし…自由裁量がある→労働者性後退
・拘束性あり…自由裁量がなく従属性が高い→労働者性肯定

④について
・代替性あり…その者の労務提供に対してでなく、その者の出す結果を重視
　　　　　　→結果が出ればだれでもよい→労働者性後退
・代替性なし…その者の労務提供に期待しており、他者では不可能→労働者性肯定

⑤について
・対価性なし…報酬は成果に対して払われており、時間拘束の対価ではない→労働者性後退
・対価性あり…報酬は成果でなく、時間拘束の対価として払われている→労働者性肯定

このような観点で判断されます。

また現在ではこれに加えて
・機械、器具は使用者が提供しているか
・報酬の額は高いか
・使用者に対する専属性はどの程度か
・福利厚生や退職金の有無
の４つの補助的判断基準があるとされています。

したがって、労基法上の「労働者」に該当するかどうかは
主要な判断基準５つ、補助的判断基準の４つを、**総合考慮**して決められるということになります。
「総合考慮」という言葉からわかるように、すべての判断基準が同一の結果になる必要はなく、
”一つ目と二つ目はの判断基準は労働者性後退だけど、それ以外は労働者性肯定だから、俺は労働者だ！”
というように結論づけることができます。

#まとめ
以上のように、「労働者」であるかどうかについては、契約類型ではなく、以上の判断基準をもとに判断されます。
たとえフリーランスであるとしても、この基準をもとに「労働者」に該当する可能性があるということになります。
フリーランスエンジニアの方は、今一度確認されてみてはいかがでしょうか！

最後まで見ていただきありがとうございます。
とあるdocker コマンドのインデックス

```
$docker login 
$docker pull <images> 
$docker run -it <image> bash 
$exit 
$docker ps -a (動いてないやつも) 
$docker images 
$docker restart 
$docker exec -it <container> bash 
$docker commit <container><image> 
$docker tag <source><target> 
$docker push <image> 
$docker rmi <image>   
```


####参考 
https://datawokagaku.com/whatisdocker/