OmniAICreator/Qiita-1.07M huggingface dataset:
【Unity】DOTSで動的にShaderを書き換えたい。

# 何したいの！
DOTSを利用して近づいた時だけオブジェクトが縁どられるようなシステムを作りたい。

## 環境
Unity 2022.2.1f1
Entities 1.0.0-pre.15
Burst 1.7.4
Unity Physics 1.0.0-pre.15
URP 14.0.4
Shader Graph 14.0.4

# 基本的には…
基本的にはEntitiesのドキュメントにやり方があります。

https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.0/manual/material-overrides-code.html

ただ、今回縁取りをするために、オブジェクトを二重に描画する必要があり苦戦したので備忘録です。

# やりかた
## １．Shader Graphを作る。
こちらの方の動画で縁取りのShader Graphを作りました。

https://www.youtube.com/watch?v=Bm6Bmcjd1Mw

Shader Graphは詳しくないので詳しくは割愛。詳しくなりたいので勉強中です。
動画の通りURPのCustom Renderで描画を行ってください。（大事）
## ２．ドキュメント通りにIComponentのスクリプトを書く
これですね。

https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.0/manual/material-overrides-code.html

## ３．TriggerEventを作る。
DOTSのCllisionEventとTriggerEventについては以前書いたので省略

https://qiita.com/AtsuAtsu0120/items/3af64705d243d254da23

今回触れたいのはDOTSがステートレスなイベントシステムを採用しているということ。
なので、Exitの判定が取れないという問題があります。
今回作りたいのは離れるとShaderのプロパティを書き換えて元に戻したいので大問題です。

## ４．強引にやる
取れないなら、強引にやればいいじゃない。
ということで、Outlineを作りたいオブジェクトをforeachで回して全部リセットした後に、イベント判定を行うことで強引に解決しました。
```C#
        foreach (var (component, _) in SystemAPI.Query<RefRW<ActionableObjectComponent>>().WithEntityAccess())
        {
            component.ValueRW.OutlineThickness = 0.0f;
        }
```
こんな感じ

# さいごに
なにが難しいんやねんといいたくなる量でまとまりました。
しかし、URPのCustom Renderではない方法でOutlineを生成していた私は一生上手く動かなかったんです。
Custom Renderは偉大です。

グラフィックを勉強しようと頑張っていてちょうど作りたいなと思った機能を今までのDOTSの勉強と混ぜてできたのはよかったです。
ありがとうございました。またどこかで
Go: gorm で MariaDB のバージョンを表示

## プログラム

フォルダー構造

```text
$ tree -a
.
├── .env
├── config_mariadb.go
├── go.mod
├── go.sum
└── gorm_version.go
```

```go:gorm_version.go
// ----------------------------------------------------------------
//
//	gorm_version.go
//
//					Feb/26/2023
//
// ----------------------------------------------------------------
package main

import (
	"fmt"
	"os"
	"gorm.io/gorm"
	"gorm.io/driver/mysql"
)

// ----------------------------------------------------------------
func main() {
	fmt.Fprintln(os.Stderr,"*** 開始 ***")

	host,user,password,data_base := config_mariadb_proc()

	dsn := user + ":" + password + "@tcp(" + host + ":3306)/" + data_base + "?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic(err)
	}

	result := map[string]interface{}{}

	db.Raw("SELECT VERSION ()").Scan(&result)

	fmt.Println(result)

	fmt.Fprintln(os.Stderr,"*** 終了 ***")
}

// ----------------------------------------------------------------
```

```go:config_mariadb.go
// ----------------------------------------------------------------
//
//	config_mariadb.go
//
//					Feb/23/2023
//
// ----------------------------------------------------------------
package main

import (
	"os"
	"github.com/joho/godotenv"
)

// ----------------------------------------------------------------
func config_mariadb_proc()(string, string, string, string) {
	err := godotenv.Load(".env")
	if err != nil {
		panic(err)
	}

	host := os.Getenv("host")
	user := os.Getenv("user")
	password := os.Getenv("password")
	data_base := os.Getenv("data_base")

	return host,user,password,data_base
}

// ----------------------------------------------------------------
```

```text:.env
host = 'localhost'
user = 'scott'
password = 'tiger123'
data_base = 'city'
```

## 実行の準備

```bash
go mod init version
go mod tidy
```

## 実行結果

```text
$ go run gorm_version.go config_mariadb.go
*** 開始 ***
map[VERSION ():10.11.2-MariaDB]
*** 終了 ***
```

## 確認したバージョン

```text
$ go version
go version go1.20.1 linux/amd64
```
「第II幕　Apple：ディレクター」からの学びメモ(3)(リーダーの作法／マイケル・ロップ)

マイケル・ロップ氏の「リーダーの作法　ささいなことをていねいに」を読み解きながら、メモを残しています。

:::note info
各章ごとにまとめていますが、章の原題ではなく**私にとってのまとめ**をタイトルにつけなおしています。
:::

https://www.oreilly.co.jp/books/9784873119892/

この本との出会いと、アウトプットしながら読み解く経緯はこちらの記事で。

https://qiita.com/w2mjra555/items/73fcac51e65dc20e8cba

:::note warn
本文で登場する「ランズ」は、ロップ氏のネット上のハンドルネームです。
「はじめに」で、自身を「ロップ」とも「ランズ」とも呼ぶと宣言しています。
:::

# 第II幕　Apple：ディレクター

「リーダーの作法　ささいなことをていねいに」は、大きくは3部構成になっています。

- 第I幕　Netscape：マネージャー
- 第II幕　Apple：ディレクター
- 第III幕　Slack：エグゼクティブ

今回は **「第II幕　Apple：ディレクター」の16章～18章** について学びメモを残します。

```
第II幕　Apple：ディレクター

16章　どんなものだって破綻する
    16.1　三度目の正直
    16.2　ゲームスタート
    16.3　悲しいほど確実
    16.4　差別化要因としての失敗（あるいは、馬鹿げたゲームを2度やるなという教訓）

17章　組織図テスト
    17.1　読みやすいか確認する
    17.2　規模に応じて基礎が拡大する

18章　分散ミーティングの基礎知識
    18.1　リモート
    18.2　「人の多い」ミーティング
    18.3　たいした違いはない
```

## 前の記事
https://qiita.com/w2mjra555/items/b4937207269eb5a97cdf

## 16章　必ずバラバラになってゆくから、変わり続ける

ロップ氏は、**人が増えるにしたがって**ルールや文化を伝えることが難しくなり**物事がバラバラになってゆく**現実を、**「馬鹿げたゲーム」の思考実験**も通じて伝えています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2515319/eef67a65-18a1-0520-ac77-fe8ad807962f.png)

成長過程にある会社に向けて、という形でロップ氏は3つのアドバイスを取り扱っています。
1. **ビジョン、価値観、プラクティス**の観点でルールを説明する。
1. いざ混乱が起きたら真因に向き合って**ルールを進化**させる。
1. そのためにも、**失敗から学び、次の行動に反映**する(**健全**な文化)。

| No | トピック | 伝えるべきこと |
|-----------:|:-----------|:------------|
| 1 | ビジョン | どんな山に登ろうとしている？ なんのために登る？<br>登りきると何が起こる？ |
| 2 | 価値観 | 自分や他の人にどのように接したい？ それはなぜ？<br>行動に移すとどうなる？ |
| 3 | プラクティス | どんな行動をすればよい？ どうやって一緒に登る？ |

そうして、当然のように起こる破綻、失敗、バラバラを乗り越えてゆかなくてはなりません。

https://note.com/tsuyoshikiyohara/n/n791644a39a4b

:::note info
こう例えられると、そりゃそうだろうと思えるようなことに限って、なぜか実践されていないあるある。
:::

## 17章　帰るべきところにうかつに権力構造を描かない

ロップ氏は、組織図(あるいは、会社の価値観や現在のゴールが分かるもの)を**わかりやすい場所に置いてメンテナンスする**ことの意義を述べています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2515319/d40f0c2e-3348-8fd2-d3a5-8d1e1e5b9332.png)
…が、一番強く言いたいことは「組織図を**人間中心で描くな**(余計なものを描いたことになるから)」のようにも読めます。

組織図は、誰かが疑問を持ったら**立ち帰る大切な場所。**
そこを**にじみ出る権力構造などで汚すな**ということかもしれません…。

> **このアドバイスを皆さんにお伝えするのは、私が何年も犯してきた過ちだからです。**

何かこもっています、語りすぎないところに、**並々ならぬ思い**を感じます。

:::note info
ここまで思いを込められたら、
**先達の経験を深い考えなくスルーする浅慮**はできませんな。
:::

## 18章　「あなたが大切ですよ」を細部まで積み重ねる
ロップ氏は、遠隔地にいる分散メンバーのために気配りすべきあらゆる注意事項とは、とどのつまり分散メンバーに **「軽んじられてはいない」と実感してもらう**ためにあると伝えています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2515319/164767d1-2efd-a410-0f84-1aa28e5ef233.png)

- 分散メンバーが、**大切にされている**と理解し実感する

ことで、ホストと分散という**オーバーヘッドのある環境**においても、

- **同じ体験をしてもらい、同じ価値を生み出す**行動につなげる

ことができます。

:::note info
個人的には **「切断は一番大人数がつないでいる拠点が最後にする」** に痺れました。
:::

## ここまでの雑感
「第II幕　Apple：ディレクター」読了！
この幕を読んでから「第I幕　Netscape：マネージャー」に戻っても発見がありそうな…。

それにしてもロップ氏は、ただただとにかく**一人ひとりのメンバーに敬意を払う行動**を**ていねいに**とれ、とずっと言い続けているようです。それも、リモート接続を誰が最後に切断するか…のような、本当に**ささいなこと**を。

:::note info
**看板に偽りなし**とはこのことか。
:::

第III幕はエグゼクティブ。章の数も＋3なので、心してかからねば！

## 続きの記事

https://qiita.com/w2mjra555/items/704078126d284f65605d
【データ基盤構築/dbt】dbt testでのクエリコストを節約する

# 今回の課題
`dbt test`コマンドを実行すると、基本的にデータが全量スキャンされ、コストが高いクエリになってしまう。
コストを削減するために、
毎日特定の時間に一度、増分更新が行われているテーブルに対しては、
増分更新が実施されたデータに対してのみ、テストが走る方法調査して実装してみることにした。

※参考：[dbtとデータパーティショニングで、大量データを扱う(dbt test)](https://zenn.dev/pei0804/articles/data-partitioning-in-dbt#dbt-test%E6%88%A6%E7%95%A5)

## 実装方法
### 1)dbt modelが走った時間をカラム化する
下記のように`_last_dbt_run_at`カラムに、`dbt model`コマンドが走った日の日付を格納するようにする。
```sql
/* model */
select
    *
    , {{ dbt.date_trunc('day', dbt.current_timestamp()) }} as _last_dbt_run_at -- dbt runを実施した日のカラムがtimestamp型で生成される
from
    `テーブル名`
```

### 2)`_last_dbt_run_at`で、test範囲を絞り込む
上記で作成した`_last_dbt_run_at`カラムを使って、`schema.yml`ファイルにてtest範囲を絞り込む。
一日一回、増分更新が実施されるので、**前日から増分更新で追加されたデータに対して**、テストが走るように実装したい。
そこで、下記のように`_last_dbt_run_at`の日程が、`dbt test`を実行した日程の前日以降のものとなっているデータに対して、スキャンが走るように記述した。
```yml
# schema.yml
version: 2

models:
  - name: [モデル名]
    columns:
      - name: [カラム名]
        tests:
          - not_null:
              config:
                where: "_last_dbt_run_at >= date_sub(date_trunc(current_timestamp(), day), interval 1 day)"
```

以上のようなかたちで、`dbt test`時のデータのスキャン量を減らし、クエリのコストの削減を実現した。
Djangoスタートアップ その6（staticファイル編）

### staticフォルダの配置場所
```
myproject
├── (appName)
│   ├── migrations
│   ├── static
│   └── templates
└── otherApp
```

#### cssの追加場所
```
djangogirls
└─── (appName)
     └─── static
          └─── css
               └─── myCss.css
```
#### staticファイルのロード
```html:appName/templates/appname/post_list.html
{% load static %}★staticファイルのロード（先頭に追加）
<html>
    <head>
        <title>Title/title>
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
        <link rel="stylesheet" href="{% static 'css/blog.css' %}">★cssファイルの読み込み
    </head>
    <body>
        <div>
            <h1><a href="/">Django Girls Blog</a></h1>
        </div>

        {% for post in posts %}
            <div>
                <p>published: {{ post.published_date }}</p>
                <h2><a href="">{{ post.title }}</a></h2>
                <p>{{ post.text|linebreaksbr }}</p>
            </div>
        {% endfor %}
    </body>
</html>
```
※staticファイルの読み込ませる場合は一回サーバーを再起動しないとだめ

参考記事
https://tutorial.djangogirls.org/ja/template_extending/
改変Rコマンダーの技術解説

# 改変Rコマンダーとは？

　[対馬栄輝のホームページ](https://home.hirosaki-u.ac.jp/pteiki/r/)で配布されている改変Rコマンダーの仕様を説明します．
　ざっくり，統計解析のソフトウェアと思っていただければよいでしょう．

## R，Rコマンダーとの違い

　[CRAN](https://www.r-project.org/)で配布されているR（またはR言語）が基盤となっています．Rの精度については，[ウィキペディア](https://ja.wikipedia.org/wiki/R%E8%A8%80%E8%AA%9E)を参照してください．
　Rのさきに[S言語](https://ja.wikipedia.org/wiki/S%E8%A8%80%E8%AA%9E)というプログラミング言語が存在していましたが，いまでは[オープンソース](https://it-trend.jp/words/open)かつフリーウェアのRが最も多く使われていると思います．RはS言語のほとんどを引き継いでいますが，使い方はほぼ同じです．
　Rは基本的にプログラミング言語ですので，使い方を覚える＝R言語を覚える必要があります．必死に取り掛かれば3カ月ぐらいで，基本操作はできるようになります．あとは，web上に様々なプログラム例が上がっていますので，それを参照して自分の思い通りの統計解析も可能となります．

## パッケージの活用

　Rには，パッケージというオプションの追加機能があり，それも無料で配布されています．パッケージには様々な解析を可能にするプログラムが用意されています．しかしながらパッケージを追加してもR言語の修得は免れません．
　「プログラムは絶対嫌だけど，簡単に使えないのか？」という人が多いのも事実です．そのような人のために，プログラムを代わりに入力してくれる<font color="#1e90ff">**Rコマンダーというパッケージ**</font>が存在します．このRコマンダーをインストールして利用すれば，<font color="#1e90ff">**プログラミングの習得は不要**</font>となります．
　Rコマンダーというソフトのウインドウが新たに立ち上がり，そのウインドウのメニューから統計手法を選んで，解析したいデータを指定すれば統計計算ができるのです．ということは，<font color="#1e90ff">**誰でも無料で利用できる統計ソフトが実現**</font>するわけです．

## Rコマンダーの欠点

　Rコマンダーを利用すれば，誰でも簡単にしかも無料で統計解析できるわけですが，医療の世界では様々な統計手法が活用されつつあります．R自体は，配布されているパッケージを付け加えていくと万能な統計解析を可能としているのですが，そのパッケージに見合った新たな統計手法はRコマンダーにプログラムされていません．結局，Rコマンダーにもプログラムされていない統計手法を利用したいときは，泣く泣くR言語を修得せざるをない事態が起こります．
　万能なRを，Rコマンダーでも実現できないものか，という思いが沸いてきます．
## 改変Rコマンダーの開発
　Rコマンダーの統計メニューだけでは不足があるので，<font color="#1e90ff">**医療の世界で利用できる新しい統計手法を追加**</font>し（パッケージを利用したり，プログラミングをしたりして），メニューから統計手法を簡単に選んで操作できるようにしたものが[改変Rコマンダー](https://personal.hs.hirosaki-u.ac.jp/pteiki/research/stat/R/)です．改変Rコマンダーは年々バージョンアップを繰り返し，統計手法も増えつつあります．できるだけ<font color="#1e90ff">**医療の世界のニーズに併せた統計手法の追加**</font>を行っています．
　もちろん，Rコマンダーを改良した別の統計ソフトも普及しています．基盤はRなので，基本的には信頼性，操作性などの性能は同一です．ただ，**①どのような統計手法を追加しているか**，**②どのようなパッケージを使用しているか**，**③計算結果の情報量の違い**はあります．そういった理由から，自分の解析に適したソフトを選択してもらえばよいと思います．
　同じ統計手法を異なるパッケージで配布していることがあります（たとえば[ここを参照](https://www.marketechlabo.com/r-best-packages/)）．一般化線形モデル一つをとっても，glmnetパッケージ，glmmMLパッケージなど，**同じ統計手法なのに複数のパッケージが提供**されており，それらのうち<font color="#1e90ff">**どれを利用するかによって，出力される情報量が異なります**</font>．簡単にいえば，検定結果のp値だけを出力するパッケージに対して，p値と95％信頼区間も出力してくれるパッケージの何れを使用するかによって，出力形式が異なります．情報量が多ければ多いほど便利なように思えますが，初学者や統計解析に慣れない方にとっては，混乱を招く原因となります．仮に同じパッケージを使用したとしても，情報量を選択できるので，結果の情報量は異なる場合もあります．

# 改変Rコマンダーの技術解説

　改変Rコマンダーは，個人レベルのプログラムですので，**「信用できるのか？」という疑問**が沸くと思います．確かにプログラムのバグ等で万全とはいえませんが，それを疑うのであれば全てのプログラムに当てはまります（確率は異なるでしょうが）．
　従って，<font color="#1e90ff">**実際にどのようなパッケージを使用し，出力される情報がどのような意味を持つかといった技術解説が必要**</font>と考えています．以降，時間があるときに，少しずつ統計手法の解説を続けていければよいと思っています．
備忘録: Jupyter notebookインストールおよび設定

# 目的
下記サイトのPyGWalkerを試してみるために、Jupyter notebookのインストールおよび環境設定を行ったメモ

https://qiita.com/hima2b4/items/dfdfb77cf3a588f4131a


勉強用の外部公開していないサーバなので、パスワード、トークンなしでログインできるようにした。
肝心のPyGWalkerの動作確認はまた別途行う。


# 環境
RedHat Enterprise Linux 8.7
Python 3.8

# 手順
1\. Jupyter インストール
```
# pip3.8 install jupyter
```
2\. Jupyterの定義ファイルを作成する
```
$ cd 
$ jupyter notebook --generate-config
$ vi .jupyter/jupyter_notebook_config.py
```
```diff:jupyter_notebook_config.py
- # c.NotebookApp.ip = 'localhost'
+ c.NotebookApp.ip = '192.168.1.106'

- # c.NotebookApp.open_browser = True
+ c.NotebookApp.open_browser = False

- # c.NotebookApp.password = ''
+ c.NotebookApp.password = ''

- # c.NotebookApp.port = 8888
+ c.NotebookApp.port = 8888

- # c.NotebookApp.token = '<generated>'
+ c.NotebookApp.token = ''
```
※token, passwordを空欄にすることで、トークン、パスワードが不要となる

デフォルトポート:8888にしているので、必要に応じてポートを変更するか、`firewall-cmd`でポートを開放する

3\. Jupyter notebook起動
```
$ jupyter notebook
```


# 参考

https://qiita.com/hima2b4/items/dfdfb77cf3a588f4131a

https://anton0825.hatenablog.com/entry/2016/12/24/000000
#PowerApps 任意の数値で初期化されたレコードを1発生成する

Sequence 関数を利用して、Power Apps でレコードを全て同じ値で初期状態として準備する方法です。

# Power Apps の Sequence 関数
関数の公式情報はこちら。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-sequence?WT.mc_id=BA-MVP-5004053

## 参考情報
[コルネ](https://twitter.com/koruneko32767) さんの記事を読むと Sequence関数の基本的な利用シーンから応用編まで把握できると思います。是非、写経して手元で試してみましょう。

https://koruneko.hatenablog.com/entry/2020/09/07/012541

## ネタバレ？
2023年2月26日（日）に開催された下記イベントで発表した内容の補足でもあります。

https://jppgb.connpass.com/event/273912/

前置きはこれぐらいにして、本題へ。

# 初期化とは？
プログラミングの世界では「変数などを決まった値で初期設定しておく」＝ 初期化 の文脈で語られます。今回は Collection やテーブル、レコード等を任意の値で全て初期設定するコトを指しています。Power Apps では下記のようなコレクション値を用意するイメージです。

```
[ 0, 0, 0, 0, 0 ]
```

全ての値が 0（ゼロ）で設定されている状態を初期状態として用意したい、ということですね。

C# 等の開発言語であれば、下記参考リンクのように配列を宣言したタイミングで初期化されるのです。このような動きを Power Apps で実現したかったんですよ。

https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/arrays/single-dimensional-arrays?WT.mc_id=BA-MVP-5004053

前述のイベントで ナンバー9 というゲームを作成するために、0 で初期化された配列が欲しかったんです。
前述で紹介した Sequence関数の Docs には「Sequence 関数は、1、2、3 などの連続番号の単一列テーブルを生成します。 列の名前は Value です。 Sequence( 4 ) は [1,2,3,4] と等価です。」と明記されており、厳密には『単一の列を持つテーブル型』が正しい表現です。単一テーブルなので、コレクション（配列）と同様に利用している、という感じですね。ややこしいですが初学者の方には「同じように利用できるけど、変数の型としては厳密には異なる」というイメージをまずは持っていただければ、と思います。その先はやりながら、試しながら覚えていきましょ。

# Sequence 関数による初期化
では [ 0, 0, 0, 0, 0 ]  を Power Apps の Sequence 関数を利用して生成してみましょう。

```
UpdateContext( { ［変数名］: Sequence( 5, 0, 0) } );
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/b852ff49-eabf-defa-b787-e6835cd18174.png)

上記をボタンコントロールの OnSelect 等で実行した結果をデータテーブルコントロールで表示した状態が下記です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/b348ab5d-e8e4-7edd-5faf-cbefe5524964.png)

全て 0（ゼロ）の値で、5つの要素を持った状態で初期化されていますね。

## 補足説明
Sequence関数は［開始］の値から［ステップ］数ぶん増加（マイナス値であれば減少）しながら［レコード］数ぶんの値でレコードが生成されます。

:::note info
■Sequence 関数の構文

Sequence( レコード [, 開始 [, ステップ ] ] )
:::

つまり、
　開始 = 初期化したい値（今回の場合は 0）
　ステップ = 0 
で指定すると、増分が 0 なので、初期化したい値のレコードが生成されてくるのです。

# 応用
ナンバー9 を紹介しあうイベントでも案内しましたが、0 で初期化したレコードと、例えば 1 ～ 5 のレコードを合体できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/66eb7877-39b1-0871-0a29-51da4ac858af.png)

・（A）の関数

```
UpdateContext( { colWk01: Sequence( 5, 1, 1) } );
```

・（B）の関数
は、既に説明していますので割愛。

・A と B を合体

```
ClearCollect( colWk03 , colWk01, colWk02 );
```

ゲームでは、1～9 の値をランダムに配置するため、上記で生成されたコレクションに対して Shuffle 関数を実行して配列の内容を変更しています。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-shuffle?WT.mc_id=BA-MVP-5004053

# 結び
検索してみたのですが、記事投稿時点ではこの初期化に関して紹介している情報が Docs ほかで見当たらなかったのでネタにしてみました。

Power Apps では「必要な要素ぶんの Collection を必要な際に利用する」コトが多いと思います。なので、業務アプリ等では知っていなくても問題無いテクニックでもあるかな、と個人的には思います。ただ、知っておくと何かのタイミグで役に立つかもしれませんので、備忘録も兼ねて。

それでは皆さま、素晴らしい Power Platform Life を！！
Djangoスタートアップ その5（テンプレート編）

### ビューにモデルをインポート
- template⇔view⇔modelの関係（viewはモデルとテンプレートの橋渡し的な役割）
- Djangoの`Template`はMVCモデルの`View`に該当する
```python:(appName)/views.py
from django.shortcuts import render
from .models import Post★#新たにモデルをインクルード
```
#### クエリセットを操作する
```python:(appName)/views.py
from django.shortcuts import render
from django.utils import timezone★#追加
from .models import Post

def post(request):
    posts = Post.objects.all()#posts変数でクエリセットにアクセスできる
    return render(request, '(appname)/post.html', {'posts':posts})★#データを詰め込んでtemplateに返す
```
##### 補足
{'posts'→templateでアクセスするための名前
:posts→クエリセット}

#### テンプレートファイルのパス
`appName/templates/appName/post_list.html`

試しに表示できるか確認↓
```html:appName/templates/appName/post_list.html
{%for post in posts%}★postsはクエリセット
    <div>
        <h2><a href="">{{ post.title }}</a></h2>
    </div>
{% endfor %}
```



### 参考記事
https://tutorial.djangogirls.org/ja/
【2023年】詳細設定にいけなくなった【PowerApps】

## アップデート？レガシー完全廃止？
2023年の1月時点では「アプリ＞歯車アイコン＞詳細設定＞レガシーカスタマイズ」でレガシーのカスタマイズ画面に遷移できていた。
![Screenshot 2023-02-26 16.31.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524942/30b84bd2-18ff-7978-454d-d8e31f9cb84d.png)

しかし2月現在、詳細設定をクリックするとアプリ選択画面に戻されてしまう。
![Screenshot 2023-02-26 16.30.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524942/5f52cf8f-155b-9f2e-2974-3380e66d2b0d.png)

ちなみに個人設定はこれまで通り機能している。
![Screenshot 2023-02-26 16.45.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524942/7761ff0a-1c8b-4ece-765f-5734ceb1fe38.png)


## 原因
原因は取り急ぎ2つ考えられます。
**①無償環境のためレガシーを使う権限がない
②レガシーカスタマイズの完全撤廃アップデート**

①に関しては、現状のテストしている環境は無償のDynamics365 SalesでPowerAppsのみを使っている状況です。
ちゃんと**Salesを入れた環境であれば使える可能性**はあります。ちなみに権限は管理者権限です。
以前まではこの条件で普通にクラシックに入れていたと思うのですが...

②に関してはいつか来るとは思っています。これに関しては個人的に**かなり大きなアプデ**だと思っていてしれっとされると非常に驚きます。
なぜなら、まだ**レガシーからしか使えない機能**などもいくつかあるからです。
ただ最近は新カスタマイズ画面での編集がうまくクラシックの方に反映されないことも増えて、言われてみればそろそろだったのかなと思うところもあります。

## 結論
**アプデの可能性が高い。**
他にも原因はありそう。
システム設定などはPowerPlatform管理センターから設定しましょう。
個人設定はまだ使えているようです。

## 個人の見解
レガシーからしかできない**フォームのコントロール**とかもあったり、**セクション内の配置**などもクラシックのほうが正確だったりします。
まあMicrosoftとしてそういう意向であれば従うのみですね。**慣れていくしかないですね。**
pipでパッケージの一括更新

# pipでパッケージをインストールする際に手順を調べたので備忘録
pipでパッケージをインストールする際に手順を調べたので備忘録として記録する。
本来は用途別に環境を分けたほうが良いが、今回は勉強用環境の更新を行う。

1\. pip自体の更新
```
# pip3.8 install -U pip
```
2\. 更新が必要なパッケージの表示
```
# pip3.8 list -o
```
3\. 一括更新を行うパッケージのpip-reviewをインストール
```
# pip3.8 install pip-review
```
4\. pip-reviewで一括更新
```
# pip-review --auto
```

# 参考

https://dragstar.hatenablog.com/entry/2016/09/02/113243
【MySQL】mamp環境で一般クエリログを出力

#クエリログを出力するにあたってつまづいた部分があったので備忘録のため記事にしました。

## 環境
mampを使用してローカルでの開発
<dl>
  <dt>PC</dt>
  <dd>MacBook Pro late2016</dd>
  <dt>OS</dt>
  <dd>Mac OS Catalina 10.15.7</dd>
  <dt>DB</dt>
  <dd>MySQL 5.7.25</dd>
</dl>

## 実現したいこと
クエリ回数を確認してサービスのパフォーマンス向上の参考にしたい

## 分からなかったこと
* 設定ファイルはどこにあるか？
* 設定内容はどうするか？

設定ファイルはどこにあるか？
Macの場合は設定ファイルはmy.cnfというファイルに設定を書くことで設定できる。
```
$ mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /Applications/MAMP/conf/my.cnf ~/.my.cnf
```

/etc/my.cnf、/etc/mysql/my.cnf、/Applications/MAMP/conf/my.cnf、~/.my.cnfのいづれかに
my.cnfファイルがあれば反映される。
優先順位は左から順に優先される。

## つまづいた部分
調べているmy.cnf自体は/etc　にあったりするそうだが、私の環境では上記のディレクトリを探してもmy.cnfが見当たらなかった。

そのため、作成する必要に気づく。

今回は/Applications/MAMP/conf/にmy.cnfを作成した。

・設定内容はどうするか？
これについては色々とカスタムはあるので、正解はないと思うのですが、今回は単純に一般クエリログが出力したかっただけなので、一旦は下記のようにmy.cnfに記述。
```my.cnf
[mysqld]
general-log=1
general_log_file=/Applications/MAMP/logs/query.log
```

general-log を1にすることでログを出力
general_log_fileは出力するログファイルの場所を指定

最後に
```
$ mysql -u root -p 
mysql> show variables like 'general_log%';
+------------------+-----------------------------------+
| Variable_name    | Value                             |
+------------------+-----------------------------------+
| general_log      | ON                                |
| general_log_file | /Applications/MAMP/logs/query.log |
+------------------+-----------------------------------+
```

こうなっていればOKです！
私はこの反映がうまくいかず、つまづいていたのですが、mampの場合は再起動したら無事反映されました。
Djangoスタートアップ その4（URL～ビュー作成編）

### アプリケーションのURLを指定する
※プロジェクト側の`url.py`に変更を加える
```python:(プロジェクト)/urls.py
from django.contrib import admin
from django.urls import path, include★includeを追記
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('(アプリ名).urls')),
]
```
http://127.0.0.1:8000
は(アプリ名).urlsへリダイレクトされる

### アプリケーション内のURLを指定する
※アプリ側に`url.py`を新規作成
```python:(アプリ名)/urls.py
from django.urls import path★
from . import views★#viewsをインポート

app_name = (アプリ名)#追加しないと、後に出てくるtemplateからurlを読み込むことができない

urlpatterns = [
    path('', views.post_list, name='post'),
]
```

### ビューファイルの作成
- MVCモデルの`Controller`に対応する（ちょっとわかりずらい...Djangoの`View`はMVCの`Controller`）
```python:(アプリ名)/views.py
from django.shortcuts import render
def post_list(request):
    return render(request, '<アプリ名>/<出力するHTMLファイル名>.html', {})
```

views.pyで実装したビューは`urls.py`の`path`の第二引数で指定する

### 参考記事
https://tutorial.djangogirls.org/ja/
フィクションなどから拾う情報処理用語 その40 レプリケーション (セコマ)

これは数年前に作ったプレゼンテーションの転用である。この言葉が適切なのかは実は曖昧なのだが災害対応なので、この題にした。
セイコーマートは北海道を中心に展開しているが実は何故か茨城県や埼玉県にも支店がある。で店の展開の仕方も北海道と似ているところがあり、茨城県や埼玉県独自に展開している商品もあったりするのだが、兎に角、茨城県や埼玉県にも支店があるのだ。
さて、北海道胆振東部地震で北海道電力でブラックアウトが起き、セイコーマートも当然被害を受けたのだが、何故か茨城県や埼玉県の店でもその影響が出た。それを軽くまとめて考察したのが下記の資料である。

https://speakerdeck.com/hirokundayon/bei-hai-dao-dan-zhen-dong-bu-di-zhen-falsesi-wanuyu-bo-qi-yu-xian-toci-cheng-xian-nite

上記資料に描かれていることはあくまでも私の仮説に過ぎないのだが、毎日、お店に行くとそれなりの変遷を辿っているのである程度真実を描いたと私は個人的に考えている。あくまでも個人的な考えであるので実際は何が起きていたのかはわからないし、今もあのままなのかも当然わからない。なお。現在では復旧し、また少なくともガラナは上尾市内ではイオンでも手に入るようになったので、良い時代になったねえと思うのみである。
Djangoスタートアップ その3（adminサイトの設定～modelの連結編）

### adminサイトの設定
```python:(アプリ名)/admin.py
from django.contrib import admin
from .models import <models.pyで作ったmodel名>★#モデルの追加
admin.site.register(<models.pyで作ったmodel名>)★#モデルをadmin画面で扱えるようにする
```

### スーパーユーザーの登録
```shell:コマンドライン
python manage.py createsuperuser
```
後に続いていく案内に従って設定する

### 参考記事
https://tutorial.djangogirls.org/ja/
GeoJson を HTML に変換（力技）

# はじめに

本記事はGeoJsonをHTMLに変換するコード`geojson2html.py`の詳細な説明を兼ねた記事です。

https://github.com/RjChiba/geojson2html

:::note warn
`geojson2html.py` は現在も開発中です。
この記事は執筆時点（2023.02.26）での最新版 ver0.1 について書いています。
最新の使用についてはリポジトリを確認してください。
:::

`geojson2html.py`を利用して作ったデモはこちら。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">GeoJson使ってhtml生成してみた<br><br>サンプルのGeoJsonはこれ↓<a href="https://t.co/Odl8lIjS9T">https://t.co/Odl8lIjS9T</a> <a href="https://t.co/hfWwlyafVI">pic.twitter.com/hfWwlyafVI</a></p>&mdash; Rj.Chiba (@rj_phys) <a href="https://twitter.com/rj_phys/status/1629352520828207104?ref_src=twsrc%5Etfw">February 25, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# GeoJson
`GeoJson`はその名の通り、地理空間データ（`Geo-`）を記述するためのフォーマット（`json`）のことです。
国境や河川だけではなく、ランドマークなどのデータも保持することができます。

https://gis-oer.github.io/gitbook/book/materials/web_gis/GeoJSON/GeoJSON.html

GeoJsonをHTMLに変換する方法は既に複数存在します。

Pythonであれば[folium.py](https://python-visualization.github.io/folium/)、JavaScriptであれば[Leaflet](https://leafletjs.com)がメジャーだと思います。

これらは非常に便利なライブラリですが、ライブラリを利用しない形でGeoJsonをHTMLに変換する必要があり、`geojson2html.py` を作りました。

# geojson2html.py
このコード（ライブラリですらない...！）を使うと、以下のことができます。

- GeoJsonの`Feature`を`<polygon>`に変換する
`name`プロパティで`Feature`を指定することができます。
また、全ての`Feature`について処理を行うこともできます。

```python
from geojson2html import geojson2html

# GeoJson を準備する
geo = ...

# `name` が "Alaska" の `Feature` について処理を行う
svghtml = geojson2html(geo, key="Alaska")

# 全ての `Feature` について処理を行う
svghtml = geojson2html(geo)
```

:::note
ver0.1 で対応している`Feature`は`Polygon`と`MultiPolygon`のみです。
それ以外のtypeについては`Ops! {type} can not be handled!`が標準出力され、その`Feature`は無視されます。
:::

- `svg` タグの `viewbox`を決定する
cssで`svg`の`width/height`を指定しない限り、`svg`のサイズは図がちょうど収まるように調整されます。

## 出力例
出力されるhtmlファイルは`svg`タグのみです。
実際に使用する際は、完全なhtmlの中に生成された`svg`を埋め込む必要があります。

```html
<svg viewbox="{viewbox}" version="1.1" xmlns="http://www.w3.org/2000/svg">
<polygon id="{name}" points="{corrdinates}">
<title>{name/fullname}</title>
</polygon>
...
</svg>
```

# 何やってんの？
さて本題です。
基本的には次のような処理をしています。

1. `Feature`を全て取ってきてloop

2. それぞれの`Feature`から`name`を取ってきて、処理するか判断

3. 処理する `geojson2strpoly(feature)`:`Polygon` classのインスタンスをひたすら作っていきます

`Polygon` classはこれで定義↓
```python
class Polygon:
	def __init__(self, position, viewbox):
		self.polygon = position # points (str)
		self.box = viewbox # (list)
```
（`geojson2strpoly`、関数名変え忘れてる...）

4. できた`Polygon`インスタンスでloopを回し、htmlの`<polygon>`部分(`polygonhtml`)とviewbox(`vb`)を更新

5. `<svg>`の中に`<polygon>`を入れて`return`

# おわりに
進行中のプロジェクトで、地図をデザインも含めてゼロから作る必要があったので作ったコードです。
まだまだ改善点は多くあります。

- 穴のあいた`MultiPolygon`を処理できない
- `Multi/Polygon`以外の`Feature`を処理できない

使ってくれる方がいれば嬉しいですし、Pull Requests/Issueを頂けるとなお喜びます。
Laravel　よく使うartisanコマンド

Lravelでの開発において、よく使用したartisanコマンドを備忘録としてまとめていこうと思います。
# ●マイグレーション
マイグレーションはDBを操作するのに使用します。
開発時はよくDBの変更があるので、すごく使用しました。
## マイグレーションの実行
実行されていないマイグレーションをすべて実行します。
```PHP:migrate
php artisan migrate
```
## マイグレーションの確認
マイグレーションが実行されているかどうかが確認できます。
```PHP:migrate:status
php artisan migrate:status
```
## マイグレーションのロールバック
ひとつ前のマイグレーションをロールバックする。
```PHP:migrate:rollback
php artisan migrate:rollback
```
# ●Seeder
LaravelのSeederは、データベースに初期データを登録するために使用します。

## Seederの実行
このコマンドを実行すると、現在接続しているデータベースに対して作成したSeederを実行できます。
```PHP:migrate
php artisan db:seed
```
# ●キャッシュクリア
Laravelが独自にもっているキャッシュをクリアさせるartisanコマンド

## 各自キャッシュクリア
このコマンドを実行すると、各項目のキャッシュがクリアされます。
```PHP:migrate
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
```
【SpringBoot】JasperReportsのSubReportでデータ出力する場合の注意事項


# はじめに
SpringBootに依存した話ではないですが、JasperReportsのデザイナ環境で親レポートからサブレポートへのパラメータ渡しを正しく構成し、デザイナ環境上で親レポートをプレビューすると、正しくパラメータの内容が表示されているのに、SpringBootの実行環境で生成されたPDFでは表示されない現象についての備忘録です。

## この記事内容の作業目的
小一時間浪費したので備忘録。「When No Data Type」プロパティに言及した日本語情報はいくつかありましたが、プレビューで出力されない場合の説明だったので、プレビューで出力さてるのにPDFに出力されない原因としてこれが影響していることを特定できなかった。

## この記事内容の作業環境
Windows10 21H2
VSCode(Visual Studo Code)
java 11
SpringBoot
JasperReports 6.12
jusperStudio 6.12
## この記事内容の保証
※この記事には設定的な情報が含まれます。あらゆる条件下でも書かれた内容の妥当性を保証するものではありません。

# 設定のポイント

サブレポート側のプロパティにも「When No Data Type」があり、これが「No Data Section」の場合は、jusperStudioの親レポートのプレビューで、サブレポート側のテキストフィールドに親から渡されたパラメータ値は表示されますが、javaの実行環境（今回はVSCode上のSpringBoot）では表示されませんでした。ログより親レポートへのjasonパラメータは正常を確認。

これが「All Sections No Detail」の場合は表示されました。

「No Data Section」は親からのパラメータを表示用というよりはサブリポート側のクエリーのパラメータとして使っていた設定状態で、この設定でもクエリー結果のフィールドはテキストフィールドに正常表示されていたので看過していたようです。

# 参考リンク

https://qiita.com/nmaolks/items/8a68143c1e2ad9782a0f

https://qiita.com/tsu_22/items/4d354c20f2d3111671fc
[5分でできる]Qiitaで書いた記事をZennでも投稿

## 概要
- Qiitaで書いた記事をZennにも投稿する方法
- 5分以内でできます。
※多くの修正を必要としない場合

## 目次
1. 手順

## 手順
ものすごく簡単です。6ステップでできます。
Zennってなに？とかの解説はしません。
1. QiitaにてマイページからZennに投稿したい記事を選択
1. 左側の設定ボタンから、Markdownで本文をみるを選択
![スクリーンショット 2023-02-26 13.34.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/754596/768ecc98-e0a6-df02-1d62-2dd0995696c6.png)

1. 表示されたMarkdown形式のものをコピー
   ここで、ーーーで囲まれたtitle等はいらないです。スクショでいうと、概要と言う記載がある行から下の内容のみコピペでokです。
![スクリーンショット 2023-02-26 13.34.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/754596/b13026f6-6d14-f5a6-e4fa-bd8d01f0441d.png)

1. Zennを開いて記事の作成を押下し貼り付け
   前項どおり、タイトルはコピペしていないので、入力(別でコピペok)してあげましょう。理由は、タイトルの記述欄が文章の記述欄と別れているからです。
![スクリーンショット 2023-02-26 13.35.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/754596/7f5b0e0f-d272-0aeb-4de6-866e53939fcc.png)

1. 崩れていない箇所がないかを確認する。
   注意点として、QiitaとZennは細かい点で文法が異なるため、変換後に細かい修正が必要な場合があります。例えば、Qiitaの記事に埋め込まれている画像のパスは、Zennの記事に貼り付けたままでは正しく表示されません。そのため、画像のパスを修正する必要があります。Zennでは、画像をアップロードすることができるため、アップロードした画像のパスを貼り付けるようにしましょう。画像のアップロードは、右側のピクチャマークから実施できます。その他にもプレビューボタンを押して気になる点があれば適宜修正しましょう。
1. タグを検索して選択し投稿する。
![スクリーンショット 2023-02-26 13.36.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/754596/f99c1eff-7e76-3f22-b672-4282499d300a.png)

しっかりとZennでも投稿できていることが確認できればok。

## おわりに
- めちゃくちゃ楽でした。
- 投稿する記事は同じ内容なのですが、手順を知っておくと便利ですね。
Django スタートアップ その2（アプリ作成～データベース作成編）

### 新しいアプリの作成
```shell:コマンドライン
python manage.py startapp blog
```
※新しいアプリを作ったら`settings.py`の`INSTALLED_APPS`にアプリ名を追加する
```python:settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    '(新しいアプリの名前)',★新しく追加したアプリ※
]
```
※`アプリ名/apps.py::(アプリ名)Cofig`メソッド内のnameから確認可能

### モデルの追加
- DjangoのDBを担うファイル
- MVCモデルのM(Model)に該当する
```python:models.py
from django.conf import settings
from django.db import models
from django.utils import timezone
class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)
    def publish(self):
        self.published_date = timezone.now()
        self.save()
    def __str__(self):
        return self.title
```

```shell:コマンドライン
python manage.py makemigrations (アプリ名)
python manage.py migrate (アプリ名)
```
### 参考記事
https://tutorial.djangogirls.org/ja/
テストデータ生成CLIツールつくった

# 背景
マーケティングのシステムの機能追加のテストをしていたときに、大量のテストデータを作成する必要があったため。

# ツールを作成した目的
大量のテストデータを作成するCLIをGoで作成したらサクッと作れるしいいかなと考えたため。


# 使用方法

```bash
    genData [サブコマンド] [config file] [output file]
```

- ## genCSV

概要

- 指定桁数の文字列をカンマ区切りでcsvファイルに出力する
- 改行文字を指定することが可能

  
実行形式 - how to use
  ```bash
    genData genCSV [config file] [output file name]
  ```
  
設定ファイルの書式 - config file format
  ```yaml
    row_num: 100 # データの行数 line of deta
    nc: "\n"     # 改行文字 newline character 
    Col_info:    # データの項目情報 data infomation
        - {
            col_name: "test1", #項目名1 column name 1
            str_len: 10,       #項目1の文字列長 length column name 1
          }
        - {
            col_name: "test2", #項目名2 column name 2
            str_len: 20,       #項目2の文字列長 length column name 2
          }
        - {
            col_name: "test3", #項目名3 column name 3
            str_len: 5,        #項目3の文字列長 length column name 3
          }
  ```
  :::note info
  
   - config file, output file ともにカレントディレクトリに配置、出力されます
  
  :::


- ## genDat

概要

- 指定桁数の文字列を複数結合した固定長のdatファイルに出力する
- 改行文字を指定することが可能

  実行形式 - how to use
  ```bash
    genData genDat [config file] [output file name]
  ```
  
  設定ファイルの書式 - config file format
  ```yaml
    row_num: 100 # データの行数 line of deta
    nc: "\n"     # 改行文字 newline character 
    Col_info:    # データの項目情報 data infomation
        - {
            col_name: "test1", #項目名1 column name 1
            str_len: 10,       #項目1の文字列長 length column name 1
            require: false     #項目名1が必要化否かのフラグ flag of required one
          }
        - {
            col_name: "test2", #項目名2 column name 2
            str_len: 20,       #項目2の文字列長 length column name 2
            require: false     #項目名2が必要化否かのフラグ flag of required one
          }
        - {
            col_name: "test3", #項目名3 column name 3
            str_len: 5,        #項目3の文字列長 length column name 3
            require: false     #項目名3が必要化否かのフラグ flag of required one
          }
  ```

:::note info
  
  - config file, output file ともにカレントディレクトリに配置、出力されます

:::

- ## genAddress

概要

- 指定したドメインのダミーメールアドレスを出現割合を指定してtxtファイルに出力する
- 改行文字を指定することが可能

  実行形式 - how to use
  ```bash
    genData genAddress [config file] [output file name]
  ```
  
  設定ファイルの書式 - config file format
  ```yaml
    row_num: 100 # データの行数 line of deta
    nc: "\n"     # 改行文字 newline character 
    Col_info:    # データの項目情報 data infomation
        - {
            domain_name: "@icloud.com", #ドメイン名1 domain name1
            ratio: 0.5,               #ドメイン名1の出現割合 ratio of domain name1
          }
        - {
            domain_name: "@ezweb.ne.jp", #ドメイン名1 domain name2
            ratio: 0.25,               #ドメイン名2の出現割合 ratio of domain name2
          }
        - {
            domain_name: "@i.softbank.jp", #ドメイン名1 domain name3
            ratio: 0.25,               #ドメイン名3の出現割合 ratio of domain name3
          }
  ```

:::note info

- config file, output file ともにカレントディレクトリに配置、出力されます
- ドメインの出現割合は合計で1となるように設定してください

:::

# さいごに

共通で使用している関数の引数をインターフェース化したり、項目のバリエーション(項目の型を指定できる、可変長に対応する、柔軟に様々な要件に対応できるようにインターフェース化する)を増やしていきたいと考えています。

ソース

https://github.com/o-ga09/genData
Docekr コマンド おさらい


# 起動系のコマンド


##### DockerHubからイメージを取得
```zsh
docker pull
```
##### 取得したイメージからコンテナを作成
```zsh
docker create
```
##### 作成したコンテナを起動
```zsh
docker start
```

##### image 取得、コンテナ作成、起動 をまとめて実行（上記3つをまとめて）

```zsh
docker run
```
# 削除系

##### コンテナの削除
```zsh
docker rm コンテナ名
```

##### コンテナの強制削除
```zsh
docker rm -f コンテナ名
```


# 確認系のコマンド

### コンテナ一覧を確認

##### 現在実行中のコンテナを表示
```zsh
docker ps
```

##### 現在存在しているコンテナ一覧
```zsh
docker ps -a
```

### コンテナの詳細を確認
```zsh
docker inspect コンテナ名
```

# 起動コンテナのshell接続

```zsh
docker attach 起動中コンテナ名
```

```zsh
docker exec -it 起動中のコンテナ名 /bin/bash
```

# コンテナからimageの作成
##### コンテナからimageの作成
```zsh
docker commit コンテナ名 image名：タグ名
```

##### イメージの変更履歴
```zsh
docker history イメージ名
```


:::note info
docker commit での image 作成は 履歴が残らないため、
Dockerfile から image の変更を行うことを推奨
:::
デスクトップアプリのヘルプを MkDocs で書いて実行ファイルにする

やりたいこと
----------

chm ファイル（Windows用のヘルプファイル）の代替です。

- WPF で作ったアプリのメニューとかからヘルプを表示できるようにしたい。
- ヘルプファイルをインストーラに同梱して配布したい。
- 配布用のドキュメントとして整ったフォーマットにしたい
- Markdown でメンテできるようにしたい。

製品は BtoB な業務アプリを想定しています。

最近だとこのような製品でも、ブラウザを起動してオンラインマニュアルへアクセスさせるものが多いと思います。しかしそうするにはサーバやドメインの準備も必要だったりするので、製品が軌道に乗って予算が降りてこないと厳しいです。要求次第では過去バージョンのメンテも続ける必要がありますし、アプリとのバージョンをそろえる手間も無視できません。

というところでオフラインなヘルプをサッと作りたいところですが、クライアントさんもキレイなアプリを見慣れてきている昨今、体裁はある程度整えたい要求が出てくることもよくあります。

さすがに生テキストファイルや Office 文書を表示するのはアレなので PDF や CHM あたりが候補になるのですが、PDF は大きくなると閲覧性悪くなるし、CHM は [古すぎて色々問題を抱えています](https://qiita.com/hossie/items/bce49c524b0ac066ae65)。HTML ファイルだけ配布はアリかもしれませんが、ローカルで Webサーバ立てないと JavaScript を動かせないので検索などを十分にサポートできず、 PDF とあまり変わらないです。


作ったもの
----------

https://github.com/lriki/MKDocsNativeAppHelpExample

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129567/ba23d6f9-c3f3-ffca-9273-5b5759c8c06b.png)

[MkDocs](https://www.mkdocs.org/) を使って Makdown から出力した HTML を、 [NW.js](https://nwjs.io/) の実行ファイルから起動できるようにしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129567/f060912a-a332-1427-d835-ffcb4cf4a1ef.png)

出来上がった `docs.exe` を起動するだけで OK. 配布はこのフォルダを丸ごとコピーで。

上記リポジトリには最小構成が入っているので、色々なプロジェクトで使いまわせるはずです。

使い方は README.md をご覧ください。


中身について
----------

Staticなサイトを NW.js で動かしているだけです。

### [Poetry](https://python-poetry.org/)

ヘルプを作業分担するときにツールのバージョンを合わせるため、Python(MkDocs関係) のパッケージ管理に Poetry を使っています。

### [MkDocs](https://www.mkdocs.org/)

material テーマと、検索の日本語対応を ON にしてあります。

### [NW.js](https://nwjs.io/)

MkDocs の出力フォルダ (siteフォルダ) をエントリーポイントとして実行ファイルを出力するようにしてあります。

リポジトリの中に package.json が2つある点に注意です。

- /package.json
  - NW.js を使ってアプリをビルドするための設定です。
- /docs/package.json
  - NW.js によってビルドされるアプリの設定です。 `mkdocs build` 時に `site` フォルダへコピーされます。


おわりに
----------

技術的には特に面白みもないんですけど、自分の仕事ではこのスタイルでヘルプを配布することが多くなってきたので、テンプレリポジトリを作ってみました。

それにしても、BtoBデスクトップアプリなみんなはヘルプどうしてるんだろう。

案外 PDF,CHM で足りているのか、移行先が無いから我慢して使ってるのか、特に体裁に関心がないのか。一時期ヘルプを作るプロプラソフトが販売されていたこともあった気がしますが、クローズしたぽいところを見るとヘルプに予算掛けるケースがそもそも少ないのでしょうか。バージョン問題とか運用チームと折衝する必要もあるから、結局のところ凝ったことしないのがベターなのかも？

各々のルールにも依りますが、可能ならこのシステムすら不要で、 GitHub Pages で十分だと思います。MkDocsはバージョンのスナップショット取ることもできるし。
フィクションなどから拾う情報処理用語 その39 バッファオーバーフロー (ノンフィクション)

今、勢いもあって、このブログに記事を毎日追記している。

https://hirofumitouhei.hatenablog.com/

その理由などは上記ブログに書いたので端おる(こうやって工数(それ何?)を極力減らしている)。隙間時間を使って仮面ライダーBLACK RXを観て、これまた隙間時間(何故か早朝になることが実に多い)を使って書いているのだが、その過程で事件が起きた…と書くと大仰に感じるかもしれないが、私にとっては事件である。
2023年2月24日(金)の隙間時間を使って仮面ライダーBLACK RX 第18話「怪! 夢の空中遊泳」(脚本：江連卓、監督：蓑輪雅夫、アクション監督：金田治と村上潤)を朝の始業前に、第19話「恐怖の人工太陽!」(脚本：荒木憲一、監督：小笠原猛、アクション監督：金田治と村上潤)を昼休みに観て、翌朝となる2023年2月25日(土)の朝に仮面ライダーBLACK RX 第18話「怪! 夢の空中遊泳」(脚本：江連卓、監督：蓑輪雅夫、アクション監督：金田治と村上潤)の分(のつもりであったが)の記事を書いた。記事、できたー。＼(^o^)／ というわけで安心して横浜の関内駅へ行き、相変わらず勝烈庵は混んでいるなあ、と思いつつ、気がついたら大回りして放送ライブラリーに着いた後、目的の展示物を観た後で山下公園に足を伸ばし、さらに秋葉原の書泉ブックタワーへ寄って散財し、自宅最寄駅に着いた後、近所のスーパーで買い物をした後で自宅に到着。さて第19話「恐怖の人工太陽!」(脚本：荒木憲一、監督：小笠原猛、アクション監督：金田治と村上潤)の分の記事を書く隙間時間が出来たので書こうかなあと思って

https://pc.tokusatsu-fc.jp/

で再生した時になって気がついた。
なんと朝書いた記事は第18話と第19話を一緒に書いていたのであった!
色々な原因が考えられるが一番大きいのは2話を一気に観てしまったことなのであろう。私の頭はいつの間にか1話分しか処理できなくなってしまったのに2話分をぶっ込んでしまい、一種のバッファーオーバーフローを起こして、ああなってしまったのである。
というわけで慌てて第18話と第19話の記事であるように改稿し、第20話をさらっと観て、2023年2月26日朝の記事を書いたのであった。
もっとも考えようによっては2日で3話分を観たと証明できた(大袈裟)のである。塞翁が馬であった。しかも、このシリーズのネタもとい記事もできた。小堺一機さんや関根勤さんも御自分の失敗談をコサキンで開帳して笑いに昇華していた(もっとも私は断続的に聞いていただけなので通算聴取期間は多く見積もっても高々数年であろう)のだから、その手法を転用すれば何も恐くはないのである(そうか?)。
ＤＸってなんなんだ。

## 本記事について
最近転職してDX系部署で働いている筆者ですが、
「DXってなに？」と聞かれてちゃんと答えられなかったため調べてみました。

## DXとは？
### DXの定義
DX：「デジタルトランスフォーメーション（Digital Transformation）」の略。
直訳すると「デジタル変革」ですが、抽象的すぎてなんのこっちゃですね。

IPAが公開しているDX白書では以下のように定義されています。
>「企業がビジネス環境の激しい変化に対応し、データとデジタル技術を活用して、
顧客や社会のニーズを基に、製品やサービス、ビジネスモデルを変革するとともに、業務そのものや、組
織、プロセス、企業文化・風土を変革し、競争上の優位性を確立すること」

### DXの理解しにくさ

定義だけ読んでも、わかるようなわからないようなという感じなので
よりイメージを固めるために本を読んでみました。

[改革・改善のための戦略デザイン 小売業DX](https://amzn.asia/d/bQiEwS9)
※紹介する箇所はかなり浅い部分です
　事例やDX推進についてもがっつり記載があるため、興味がある方は購入してみてください

こちらの書籍では、「トランスフォーメーション」という言葉のとらえ方に振れ幅があることで
DXの理解が難しくなり、混乱を招いていると分析されていました。


変化なのか？変革なのか？がごっちゃな状態、かつ定義や境界が曖昧な状態で議論されることで
DXのイメージがぼやけてしまっているということですね。

また上記に関連して、書籍のなかで「デジタイゼーション」「デジタライゼーション」というワードもでてきました。

### デジタイゼーション、デジタライゼーションとは

総務省によると
>デジタイゼーション：既存の紙のプロセスを自動化するなど、物質的な情報をデジタル形式に変換すること
>デジタライゼーション：組織のビジネスモデル全体を一新し、クライアントやパートナーに対してサービスを提供するより良い方法を構築すること

と定義されており、

例としては下記のようなイメージになります。
- デジタイゼーション：ペーパーレス化、オンライン会議の導入
- デジタライゼーション：カーシェアリング

なぜカーシェアリングがデジタライゼーションかというと、
予約、配車がデジタル化されたことにより、従来のビジネスモデルが一新されたというロジックみたいです。

### デジタライゼーションとデジタルトランスフォーメーションの違い

DXとデジタライゼーションは同じ概念に思えますが、変革のスコープ、優位性の確保などが違いとしてあげられ、
デジタライゼーションはDXを実現するプロセスの一部であるという記事が散見されました。

筆者の理解では下記のイメージとなります。
1. デジタイゼーション：アナログをデジタルに移行
1. デジタライゼーション：デジタル化によりビジネスモデルや働き方の変革が起こる
1. デジタルトランスフォーメーション：デジタライゼーションにより競合他社への優位性を確保、企業全体の文化・働き方の変革が起こる

### デジタルトランスフォーメーション事例

上記イメージに当てはまる事例としては
ウォークスルー店舗などがわかりやすい事例かと思いました。

ウォークスルー店舗とは、2021年にダイエーが実験的にオープンした自動決済店舗のことを指し、
クレジットカードや電子マネーなど、あらかじめ決済手段を設定したQRコードで入店することで、
退店時に自動で決済され、店員どころかレジや財布も不要な店舗のことになります。

１店舗のみの取り組みであればデジタライゼーションに当てはまるかもしれませんが、
全店舗に普及するなどということがあれば、購入体験の根本的な変革、競合他社への優位性を確保
など、デジタルトランスフォーメーションに当てはまる事例になるのではないでしょうか。

## まとめ
以上をまとめると、
DXとは
1. デジタル化により
1. 企業規模で
1. 文化、働き方、ビジネスの仕組みが根本的に変わる、or新規創出されることで
1. 競争上の優位性を確保すること

と理解しました。

言葉の定義にとらわれ過ぎている気もしますが、
手が届かないかゆみ的なもやもやを感じていたため、少しすっきりしました。
その理解間違ってますという指摘はウェルカムなため、コメントお待ちしております。

## 参考文献
https://www.ipa.go.jp/publish/wp-dx/dx-2021.html

https://www.soumu.go.jp/johotsusintokei/whitepaper/ja/r03/html/nd112210.html

https://go.chatwork.com/ja/column/work_evolution/work-evolution-034.html

https://dmc.i-studio.co.jp/dx/digitization_digitalization/

https://www.nttdata.com/jp/ja/news/release/2021/083001/

[改革・改善のための戦略デザイン 小売業DX](https://amzn.asia/d/bQiEwS9)
ヘッダー作成



# ヘッダーのテンプレート

ヘッダーのテンプレートです。WEBサイトの作成の際に参考にしてみて下さい。

```index.html
<header id="header">
  <h1 class="site-title">
    <a href="#">
      <img src="./img/#1.png" alt="My work">
    </a>
  </h1>
  <nav>
    <ul>
      <li class="top-link">About</li>
      <li class="top-link">Works</li>
      <li class="top-link">News</li>
      <li class="top-link">Contact</li>
      <img src="./img/#2.png" class="top-link" alt="inst">
    </ul>
  </nav>
</header>
```

```index.css
/* 共通要素　*/
img{
  max-width: 100%;
  border-style: none;
}

/* header */
#header{
  max-width: 960px;
  height: 270px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin: 0 auto;
  padding: 0 5%;
}
#header ul{
  display: flex;
  justify-content: space-between;
}
.top-link{
  margin:0 10px;
}

```

# イメージ

[![Image from Gyazo](https://i.gyazo.com/8a5a7dd02e28b8a1673b83cd98576bf7.png)](https://gyazo.com/8a5a7dd02e28b8a1673b83cd98576bf7)
Raspberry Pi 4 初期設定 + Docker導入

# 概要
2023年2月現在のRaspberry Pi 4のイントロダクションガイド

## ゴール
- Raspberry Pi OS Lite(64bit)の導入
- Dockerの導入

# 事前準備
## 作業環境
- 作業用の親マシン
	- Windows 10
	- Powershell(SSH用)
- Raspberry Pi
	- Raspberry Pi 4 Model B Rev 1.2 4GB
	- 32GBのMicroSD
	- 有線LANで接続

# 実践
## Raspberry Pi OSの導入
### Raspberry Pi Imager の導入
[Raspberry Pi Imager](https://www.raspberrypi.com/software/)をダウンロードして、インストールをする。

### Raspberry Pi OS Lite(64bit)の導入
SDカードを挿入して、Raspberry Pi Imagerを起動する。
![Pasted image 20230225234258.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499004/8b74193c-1fe9-d309-2a4f-37438d4306d6.png)
OSはRaspberry Pi OS Lite(64-bit)、ストレージは挿入したSDカードを選択する。
歯車の設定ボタンから、下記の設定を行う。
- ホスト名
	- 任意 今回はraspi.localとした
- SSHを有効化する
	- パスワード認証
- ユーザ名とパスワードを設定する
	- ユーザ名とパスワードを設定してください
- ロケールを設定する
	- タイムゾーン : Asia/Tokyo
	- キーボードレイアウト : 任意

書き込むボタンを押して、Raspberry Pi Imagerの画面にSDカードを取り出してもいいですよと言われるまで待つ。

## Raspberry Piの初期設定
### 起動
SDカードを挿入して、USBの電源ケーブルを刺す。

### SSHで接続する
PowerShellを立ち上げ、`ssh ユーザ名@ホスト名`で接続する。
```powershell
PS C:\Users\yukad2> ssh yukad2@raspi.local
```
fingerprintの確認が出た場合は`yes`を入力。
(このタイミングまでに確認する方法って、モニターに繋ぐしかない？)

### raspi-config での初期設定
```sh
yukad2@raspi:~ $ sudo raspi-config
```
`6 Advanced Options > A1 Expand Filesystem`を実行しておく。
終了後は再起動するので、再度SSHで接続する。

### 更新作業
```sh
yukad2@raspi:~ $ sudo apt update
yukad2@raspi:~ $ sudo apt upgrade
```

### 今回は省略する設定
- IPアドレスの固定
- SSHの公開鍵認証
- ログの設定

## Dockerの導入
### Docker本体
https://get.docker.com/ のスクリプトを使えば`docker compose`までセットで入るようになっている。
```sh
yukad2@raspi:~ $ curl -fsSL https://get.docker.com/ | sh
# 省略
yukad2@raspi:~ $ docker -v
# Docker version 23.0.1, build a5ee5b1
yukad2@raspi:~ $ docker compose version
# Docker Compose version v2.16.0
```

### dockerユーザーグループに追加する
sudoなしでdockerを実行できるようにする。
```sh
yukad2@raspi:~ $ cat /etc/group | grep docker # 一応dockerグループがあるか確認
# docker:x:995:
yukad2@raspi:~ $ sudo gpasswd -a ユーザ名 docker # dockerグループに追加
# Adding user yukad2 to group docker
yukad2@raspi:~ $ sudo systemctl restart docker # dockerデーモンの再起動
yukad2@raspi:~ $ exit # ログインし直す
```

### 動作確認
```sh
yukad2@raspi:~ $ docker run hello-world
# 省略
```

## 雑記
docker-composeをpip経由で入れるのは代替策であったり、古い記事なので、あまり参考にしないほうが良いです。
Django スタートアップ その1（プロジェクト作成編）

### 基本コマンド
サーバーの起動(8080で。デフォルトは8000)
```shell:コマンドライン
python manage.py runserver 8080
```

### プロジェクト作成
```shell:コマンドライン
django-admin startproject project_name  <path>
```

### 設定の変更
`project_name/settings.py`

#### タイムゾーンの変更
```python:project_name/settings.py
TIME_ZONE = 'Asia/Tokyo'
```
#### 言語の変更
```python:project_name/settings.py
LANGUAGE_CODE = 'ja'
```
#### 静的ファイルのパス
```python:project_name/settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
```
#### 静的ファイルのパス
```python:project_name/settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
```
#### セキュリティの設定（ALLOWED_HOSTS）
- HTTPリクエスト内のホストヘッダー情報に、ALLOWED＿HOSTSでしたドメイン名（IPアドレス）が含まれている場合のみ、Webサービスがクライアントに提供される。
- ALLOWED_HOSTSにはWebサービスを提供するドメイン名をリストで指定する

```python:project_name/settings.py
ALLOWED_HOSTS = ['127.0.0.1', '.<公開したいドメイン名>']
```

### データベースのセットアップ

マイグレーションファイルの作成
```shell:コマンドライン
python manage.py makemigrations
```

マイグレーションファイルをデータベースに適用
```shell:コマンドライン
python manage.py migrate
```


### 参考サイト
https://tutorial.djangogirls.org/ja/django_start_project/
日報 始めます

# 自己紹介
霧影桜花です。
基本的にMarkdownの記法も知らないので、調べながら書いてます。
拙く、読みにくいかと思いますが…お付き合いください。
組み込みやロボットの開発や制御なども学んで行きます。特に、**ROS**や**Python**や**Arduino**がメインになるかと思います。
学んだことをまとめるために、Qiitaで連載していこうと思い早速自己紹介を書きました。

## 環境
Windows PCは2機で双方Windows10。もしかしたら、Windows11に更新するかも。
ROS環境に関しては、Foxyで学んでいこうと思います。
ニフクラmBaaSのXamarin SDKにファイルダウンロード機能を追加する

# やりたいこと
XamarinでニフティクラウドのmBaaSと連携してファイルのやり取りをしたい。
コミュニティSDK(https://github.com/NCMBMania/ncmb_xamarin) はあるがファイルのアップロードしか対応していない。

# 実装

## API実行結果をStreamで返却されるようにする
ExecメソッドはJObjectでしか返せなかったので、ExecFileメソッドを作ってStreamで返せるようにした。
```csharp:NCMBRequest.cs
        public async Task<Stream> ExecFile()
        {
            ～省略～
            var response = await client.SendAsync(request);
            var body = await response.Content.ReadAsStreamAsync();
            return body;
        }


```

## ファイルダウンロード用メソッド追加
GetClient()で生成するGetRequestのNameにfiles、ObjectIdにファイル名を設定する。
ファイル取得APIは以下のヘッダーにファイル名を指定する必要がある。
`-H "Content-Type: application/json" https://mbaas.api.nifcloud.com/2013-09-01/files/test.png`

`/files/test.png`のfilesがName、ObjectIdがtest.pngに対応する。

```csharp:NCMBQuery.cs
        public async Task<Stream> FetchFile(string filename)
        {
            var r = GetClient();
            r.Name = "files";
            r.ObjectId = filename;

            var results = await r.ExecFile();
            return results;
        }
```

# あとがき
　XamarinでニフクラmBaaSにファイルを保存してやり取りしたかったのでできるか確認してみた。ファイルストアにファイルをアップロードしてデータストアにファイル名を管理して、選択してダウンロードする感じで実現できた。
　データストアにバイナリ保存はできなさそうだったので上記の方法を使った。
届出電気通信事業 申請ガイド（自家サーバー、法人編）

## はじめに

この記事はこちらを参考にして作られています

https://qiita.com/neustrashimy/items/9e15c50fb75ca1d0f915

:::note info
↑↑↑個人向けはこちらより↑↑↑
:::

「電気通信事業」を行うためには、総務省に届出が必要です。

「Mastodon」というマイクロブロギングサービスを自家サーバーで運営する機会がありましたので、届出の申請を行ってみました。

:::note info
関東綜合通信局に確認したところ、自社設置であっても社内SNS等社内専用サービスであれば不要です。
:::

## 電気通信事業の届出はサービス提供前に行う

なんとなくMastodonとかを立てたいなと思って、何も手続きを取らず立ててしまったら、何が起こるかわかりません。

:::note info
少なくとも信頼されないサービスと見られる
:::

## 届出してみよう

### どのタイミングで届出すればいい？

サービスイン前に行う必要があります。

### 届出手続きに費用はかかる？

法人登記の情報を取得しなければならないため、数百円かかります

あわせて郵送料がかかります。

なお、電気通信事業届出自体には費用はかかりません。

## どんな書類を用意すればいい？

各様式のテンプレートは総務省のWebサイトに用意されています。

https://www.soumu.go.jp/menu_seisaku/ictseisaku/denkitsushin_suishin/tetsuzuki/gaikokuhoujin.html

## 以下のアイテムが必要です

法人で申請するには、以下のアイテムを用意します。

### 1. 電気通信事業届出書（様式８）

提出年月日、法人住所、法人番号、代表者氏名、電話番号、メールアドレス、提供区域、事業開始予定年月日を記入します。

提供区域は「全国」とします。

他の項目は非該当なので空白としました。

なお、代表者にこの電気通信事業に関して、電話されてもメールされてもわからない可能性がありますので、
あなたの電話番号、メールアドレスを記入します。

印鑑等は不要です

mastodonを立てるだけなら空欄だらけになりますが、気にする必要はありません。

### 2. 提供する電気通信役務（様式４）

どのようなサービスを提供する予定かを記入します。

今回は「クローズドチャット」として申請するため、
「30 インターネット関連サービス（ＩＰ電話を除く。）」の「提供する役務」に「クローズドチャット」と記入しました。
### 3. ネットワーク構成図（様式３）

もしお持ちであれば Microsoft Officeの中にある Visio で記載すると簡単でしょう。

Visioで書くとこんな感じ

![ネットワーク図-public.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149448/59ce454a-dfdd-077a-174f-fccd62d60450.jpeg)


自家サーバーですので具体的なモデル名がわかるわけですので、具体的に記載します。

提供回線についても具体的な業者がわかりますので、回線業者とプロバイダの会社名を記載します。

ですが、ざっくりと書いても大丈夫でしょう。

なお、自家サーバーの場合、自ら設置したサーバーやハブ、ルーター等は、「自己設置」と記載しましょう。

:::note info
さすがにLANケーブルのモデル名や自己設置までは記載する必要はありません
:::
:::note info
これを書くためだけにVisioを購入するのは勿体ないので、様式って書いてある文字だけを印刷し、そこに手描きをするとよいでしょう。
:::

### 4.登記事項証明書

https://houmukyoku.moj.go.jp/homu/shomeisho_000002.html

こちらからオンラインで簡単に取得できます。

ただし平日の8:30～21:00までしか受け付けていません

:::note info
当日受付は17:15までです
:::

指定した住所（法人でも個人でも）に郵送してもらうようにします。

選択肢はデフォルトのままがよいでしょう。

料金の支払いはネットバンクかペイジーで行います。

普通郵便で送付してもらうのであれば500円です。

### 5.定款

会社定款を印刷したものを同封しましょう。

### 6.返信用封筒

切手を貼って、あなたの住所氏名を記入しましょう。

## 注意

これらの書類はすべて日本語で記載されていないといけません。

外国法人等定款が他国語になっている場合、日本語に訳す必要があります。

## 書類の送り先は？

各地域の総合通信局・総合通信事務所です。

## 届け出はいつ届くの？

普通郵便でおおむね2週間で返信があります。

## 申請後、届出内容に変更があったら？

たとえば、引っ越したり、サーバー業者を乗り換えたり、サービスを行わなくなった場合などは
同じように各地域の総合通信局にその旨申請しましょう。

## 自家サーバーおすすめプロバイダー

[インターリンク](https://px.a8.net/svt/ejp?a8mat=2ZHA2C+1MDLEY+7QW+25IUOI)

固定IPV4を取得可能、もしくは固定IPV4/V6を取得可能でIPOEが使用可能です
cronの書き方・設定方法

## 概要

cron（クーロン）の設定方法について、いつも何だったっけと忘れてしまうので、備忘録として残しておきます。cronとは、定期的に実行したいものや時間を指定して何かを実行したいときに使用するものです。
crontabという言葉もありますが、これはcronの設定ファイル名であり、コマンドの名称でもあります。（cronは総称です。）

<br>

## 書き方・設定方法

#### 設定方法

* crontabファイルの編集方法
```
crontab -e [-u username]
```
※実行したいプログラムの実行権限を持ったユーザーで設定を行うこと
※別のユーザーのcrontabファイルを編集するには、rootユーザーになってから`-u`オプションを利用して設定を行う。


* 現在の設定の確認
```
crontab -l [-u username]
```
※別ユーザーの設定を確認するにはrootユーザーになってから`-u`オプションを利用して設定を確認する

* 設定を削除する
```
crontab -ir [-u username]
```
※`-i`オプションを使用することによって確認してから削除できる

おまけ
設定ファイルは`/var/spool/cron/`配下に各ユーザーごとの設定が表記されています。なので、全ユーザーの設定を一気に確認したいときは、以下のようなコマンドで確認することが出来ます。
```
cat /var/spool/cron/*
```

<br>

#### 書き方

続いてcronの書き方についてです。
```
* * * * * [実行したいコマンド]
```
|  左から（*）  |  実行時間  |
| ---- | ---- |
|  １番目  |  分  |
|  ２番目  |  時  |
|  3番目  |  日  |
|  4番目  |  月  |
|  5番目  |  曜日  |

<br>

(例)
##### 1分毎に実行
```
* * * * * [実行したいコマンド]
```
※すべて`*`にすると1分毎に実行されます。


##### 毎時○分に実行
```
# 毎時10分に実行
10 * * * * [実行したいコマンド]

# 毎時10分と30分に実行する
10,30 * * * * [実行したいコマンド]

# 毎時10分から30分の間1分毎に実行
10-30 * * * * [実行したいコマンド]
``` 
※上記と同様な感じで時，日，月で設定することができます。

##### 曜日

曜日指定は以下の様な感じで指定します。

|  曜日  |  数値  |
| ---- | ---- |
|  日  |  0  |
|  月  |  1  |
|  火  |  2  |
|  水  |  3  |
|  木  |  4  |
|  金  |  5  |
|  土  |  6  |

```
# 毎週日曜日の12時に実行
0 12 * * 0 [実行したいコマンド]
```

##### 応用
`*/30`みたいな書き方をすることによって30分ごとに実行なども書ける
```
# 30分ごとに実行
*/30 * * * * [実行したいコマンド]

# 5時間ごとに実行
0 */5 * * * [実行したいコマンド]
```

## まとめ
cronの書き方・設定方法についてでした。そこまで使う機会ないので、あれどうだったっけと忘れがちですが間違うとまずい場面もあるので、まとめました。
cronでは管理しきれないときは、rundeckとか使うといいかもです。GUIもリッチだし設定も柔軟で使いやすいです。