OmniAICreator/Qiita-1.07M huggingface dataset:
EC2 Amazon Linux 2 + Apache環境でSSL対応

Apacheインストール済みのウェブサーバーにて，SSL証明書を

## cerbotによりSSL証明書を取得
```
$ amazon-linux-extras install epel -y
$ amazon-linux-extras enable epel
$ yum install -y certbot
$ certbot certonly --standalone
```
対話式に取得できるので多分わかると思います

## sslモジュールをインストール
```
$ yum install -y mod_ssl
```
※ 「-y」オプションは，インストール時の対話に全てyesする　という意味です

## ssl.confの編集
SSLモジュールをインストールしたことにより，/etc/httpd/conf.d/ssl.conf が出来ていると思います
ここに書かれている↓のデフォルトの記述を丸っと削除します
後ほどApacheを再起動する際に邪魔になる可能性があるためです

```config
<VirtualHost _default_:443>
〜〜〜〜
</VirtualHost>
```

## バーチャルホストの設定
以下より，「example.co.jp」の部分はご自身のドメインに読み替えてください

/etc/httpd/conf.d ディレクトリに
下記2ファイルを作ります

- vhost-example.co.jp.conf
- vhost-example.co.jp-ssl.conf

上がhttp用，下がhttps用です

```conf:vhost-example.co.jp.conf
# IPアドレスでアクセスした場合，リダイレクト
<VirtualHost *:80>
    ServerName **.***.**.***  # IPアドレスを入力
    Redirect permanent / https://example.co.jp/
</VirtualHost>

# httpsにリダイレクト
<VirtualHost *:80>
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>
```

```conf:vhost-example.co.jp-ssl.conf
<VirtualHost *:443>
    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} ^www.example.co.jp$
    RewriteRule ^(.*)$ example.co.jp%{REQUEST_URI} [R=302,L]
    ServerName example.co.jp
    ServerAlias www.example.co.jp  # www付アドレスにアクセスした場合，www無しアドレスにリダイレクトするように設定（事前に名前解決をしておいてください）
    ServerAdmin email@example.co.jp  # メールアドレスを適宜設定
    DocumentRoot /var/www/example.co.jp  # DocumentRootを適宜設定
    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn
    SSLCertificateFile /etc/letsencrypt/live/example.co.jp/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.co.jp/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.co.jp/chain.pem
    BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
    CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

# https://IPでアクセスした場合，リダイレクト
<VirtualHost *:443>
  ServerName **.***.**.*** # IPアドレスを入力
  Redirect permanent / https://example.co.jp/
</VirtualHost>
```

## Apacheを再起動
```
$ systemctl restart httpd
```
ドメインでアクセスしてみて動作確認
Openblocks AX3初期設定についてのメモ

# Openblocks AX3に関して

## 概要
* Openblocks AX3を最近購入したので触ってみています。Openblocks自体触ることがないので初めてさわりつつ、セットアップについて書いていきます。

## 備忘録
* [マニュアル](https://openblocks.plathome.co.jp/common/pdf/OBSA_UsersGuide_1.3.1.pdf)
* Debian9は2022年6月でサポートが終了しているため、リポジトリがアーカイブになっているらしい（このあたりの情報はまとまったものがないのですが、様々な記事を読むとそうらしい）  
そのため、apt updateが失敗するので、以下のように/etc/apt/sources.listを書き換える必要がある。単純にURLを書き換えただけだと失敗する（httpsだと失敗したり、stretch-updatesが存在しないと言われたりする）ため、試行錯誤したところ以下のようになった。正解は不明です…。

```/etc/apt/sources.list
deb http://archive.debian.org/debian/ stretch main contrib non-free
deb-src http://archive.debian.org/debian/ stretch main contrib non-free
deb http://archive.debian.org/debian-security/ stretch/updates main contrib non-free
deb-src http://archive.debian.org/debian-security/ stretch/updates main contrib non-free
```

* Debian9にはsystemctlがあるらしいが、Openblocks AX3のDebianには無いので/etc/init.d/からサービスを起動・停止・確認をする必要がある。

その他あれば追記します。
[Windows]DjangoでのER図自動生成の方法

[Windows]Djangoでのクラス図自動生成の方法

## はじめに
windows環境ではGraphvizをシステムにインストールする必要があります。
また、python3.12での自動生成を試みましたが、pygraphvizのバイナリが3.10までしかなかった為、Python3.10で生成しております。

## 本記事内容の環境
```
windows 10 pro x64
Python 3.12 -> 3.10

# ライブラリ
Django==5.0.1
graphviz==0.20.1
pydotplus==2.0.2
django-extensions==3.2.3
```


## クラス図自動生成の手順

```
pip install django-extensions
pip install graphviz
pip install pydotplus
pip install pygraphviz
```
pygraphvizのインストールで書きのようなエラーが出るかと思います。
```
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pygraphviz
Failed to build pygraphviz
ERROR: Could not build wheels for pygraphviz, which is required to install pyproject.toml-based projects
```
その場合は
[こちら](https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygraphviz)からpygraphvizのバイナリファイルをダウンロードし、
カレントディレクトリに配置後、インストールを行います。
```
pip install pygraphviz-1.9-cp310-cp310-win_amd64.whl 
```
※「cp310」はpythonのバージョンになります。


`pip show`でインストール出来たか確認します。
```
>pip show pygraphviz
Name: pygraphviz
Version: 1.9
Summary: Python interface to Graphviz
Home-page: http://pygraphviz.github.io
Author: Aric Hagberg
Author-email: aric.hagberg@gmail.com
License: BSD
.
.
.
```
このように出力されていればインストール出来ています。

続いてGraphvizをシステムにインストールします。
Graphviz公式の[ダウンロードページ](https://graphviz.org/download/)から
EXE installerをダウンロードしてインストールを行います。

![GOMCAM 20240127_1910400232.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662473/d9601e59-7eef-80d6-8014-a7578ed1f9dd.png)

インストール後は再起動を行って下さい。



Djangoのsettings.pyにdjango_extensionsを追記します。
```
INSTALLED_APPS = [
    # ... 他のアプリケーション ...
    'django_extensions',
]
```

```
python manage.py graph_models -a -o xxx.png
```
※「xxx」の部分は好きに変更して下さい。
カレントディレクトリに「xxx.png」が生成されます。
```
RuntimeWarning: 
(dot.exe:12348): Pango-WARNING **: couldn't load font "Roboto Not-Rotated 8", falling back to "Sans Not-Rotated 8", expect ugly output.
```
このような警告が出ますが、dot.exe（Graphviz の一部）がフォントを読み込むことができないために発生しています。
見た目が少々悪くなる、という内容なので生成には特に影響ありません。

このようなクラス図の画像が生成されます。
![xxx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662473/f98aa505-62e9-acf3-b4fe-326054240ee1.png)



参考
---------------------------------------
[GraphvizをWindowsにインストールする【Python】](https://self-development.info/graphviz%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E3%80%90python%E3%80%91/)
[Python環境の構築](https://www.dpac.dpri.kyoto-u.ac.jp/enomoto/pymetds/Install.html)


## 追記
バイナリファイルを掲載していたサイトでダウンロードができなくなっていまたので
下記githubのURLから1.7Verをダウンロードします。
この場合、pythonは3.9になります。
https://github.com/CristiFati/Prebuilt-Binaries/blob/master/PyGraphviz/v1.7/pygraphviz-1.7-cp39-cp39-win_amd64.whl
Dale Carnegieの名著を読み解く： Chapter 3の要約 📘🔍

人間関係のスキル向上に役立つDale Carnegieの名著から、Part１の、Chapter３を深く掘り下げていきます。

この記事を書こうと思ったきっかけ、および第１章は[こちら]("https://qiita.com/TakanoriVega/items/c3f44163febd5dfab4e2")です。
## 他人の興味に訴える 🎣

### 🍰 ケーキと釣りの教訓

みなさんはチーズケーキが好きかもしれません。しかし、釣りに行くときに釣り糸の先にチーズケーキをつけますか？もちろん、つけないと思います（多分つかない）。魚が欲しいのはみみずです。では、人間関係ではなぜ違う対応をするのでしょうか？

### 🌍 人間の普遍的な欲求

私たちは自分の欲求には興味を持ちますが、他人はそうではありません。他の人も私たちと同じで、自分の欲求に深い関心を持っています。他人に影響を与える唯一の方法は、彼らが何を望んでいるかについて話し、それを得る方法を示すことです。

### 🗣️ 話す前に一考

何かを話す前に、一旦停止して、相手がこの会話から何を得るかを考えてみましょう。自分の欲求については一切触れずに、相手が利益を得る方法を示すことで、あなたは他人にとって魅力的な存在になります。

### 🌟 利他的な行動の価値

自己中心的な人が多い世の中で、他人のために無償で尽くす人は珍しく、大きな利点を持っています。

### 📝 アンドリュー・カーネギーの逸話

アンドリュー・カーネギーには手紙を書かない姪や甥がいました。彼は手紙の最後に5ドル札を送ると書きましたが、実際には送りませんでした。結果として、彼らは彼に返信し、5ドル札について尋ねました。（賢い）

---

この章は、他人の興味や欲求に訴えることの重要性を教えてくれます。自分の欲求を抑え、相手の利益を第一に考えることで、人間関係を築き、影響力を高めることができるのです。アンドリュー・カーネギーのエピソードは、この考え方が実際にどのように機能するかを示す素晴らしい例です。次回の人間関係で、この教訓を念頭に置いてみてはいかがでしょうか。🤔💬🌟
Lens in Maps

# はじめに

　東京都交通局から、都営地下鉄でGoogle マップの「インドア ライブビュー」の導入が発表されました。

https://www.kotsu.metro.tokyo.jp/pickup_information/news/subway/2024/sub_p_2024012311334_h.html

私も実際に、大江戸線新宿から都庁に向けてナビゲーションを使って歩いてみました

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

実際に歩いてみた感想としては、東京都の地下は、工事中の看板などで道が寸断されている場所も多く途中でナビゲーションが止まってしまうケースが多かったり、ナビゲーションの基点となる風景が、壁に貼られた広告などで埋め尽くされている場所も多く、おそらく撮影時の状況と重ね合わせる風景が大きく変わってしまっているのか、認識しないこともあったり、まだまだ不便な部分は多いものの、もっと技術が進むことで、もっと便利になるんだろうなという期待もあります。特に、GPS等の電波が届きにくい地下鉄駅構内でも、スマートフォンをかざすことで、目的地までのナビゲーションができるという点はとても大きなメリットを感じました。

この中で使われているのは、グローバルローカライゼーションという技術で下記のブログによると、VPS、ストリート ビュー、機械学習を組み合わせた手法とのこと。

https://blog.research.google/2019/02/using-global-localization-to-improve.html

このブログによると、VPSなどでは、膨大な画像を収集する手法と、収集されたときの光景と異なる
場合に、どのように精度を上げるかなどの課題について、下記のように記載されています。

>「 That's why a core ingredient in this new approach is applying machine learning to automatically decide which features to pay attention to, prioritizing features that are likely to be permanent parts of the scene and ignoring things like trees, dynamic light movement, and construction that are likely transient. 
    (中核となる要素は、機械学習を適用して、どの特徴に注意を払うべきかを自動的に決定し、シーンの永続的な部分である可能性が高い特徴を優先し、樹木、動的な光の動き、建設などの可能性が高いものを無視すること)」


Google マップのライブビューを使用する
https://support.google.com/maps/answer/9332056?hl=ja

Google マップ で東京駅や渋谷駅などJR東日本の主要駅や商業施設での屋内ナビゲーションがより便利に
https://japan.googleblog.com/2021/07/google-jr.html


# Lens in Maps

このようにスマホを、風景に重ね合わせることでさまざまな情報を見る仕組みは
Lens in Maps (以前は Search with Live View)と呼ばれています。

(新しいマップの更新: マップ内のレンズとその他の AI 機能)
https://blog.google/intl/en-ca/products/explore-get-answers/new-maps-updates-lens-in-maps-and-other-ai-features/


# Immersive View

Lens in Mapsの中の一つで、3D都市によって、あらゆる情報を提供する仕組みが、 Immersive Viewと呼ばれるもので、2023年のGoogleIOで、情報が公開されました。

https://9to5google.com/2023/05/10/google-maps-immersive-view-routes/

Immersive Viewは、ユーザーが旅行を開始する前にルートを3Dで確認できることを目指して作られているサービスで、それに付随して、時間などによって変化するモデルや、天気などがAIによって鮮明な3Dによって描かれています。この機能は AI を使用して数十億のストリートビューと航空写真を融合し、世界の豊かな「没入型ビュー」を作成します。高度な AI 技術である Neural Radiance Field (NeRF) を使用して、通常の写真から 3D 画像を作成しているそうです。
これらは、Aerial View APIというAPIを経由することでサードパーティ製のアプリケーションにも組み込むことが可能となっています。

# そのほか

写真優先表示　「アニマルラテアート」などの特定の検索に対し、写真優先の表示が利用できるようになった。Googleマップのコミュニティによって共有された数十億枚の写真に基づき、AIや画像認識モデルを活用することで実現した機能。　


(参考)

フォトリアリスティックな 3D、2D、ストリート ビュー タイルを使用して大規模な没入型マップを構築、現在一般提供中
2023年10月27日

https://cloud.google.com/blog/products/maps-platform/build-immersive-maps-at-scale-with-photorealistic-3d-2d-and-street-view-tiles-now-in-ga?hl=en


Aerial View API が一般公開されました

https://cloud.google.com/blog/products/maps-platform/aerial-view-api-now-generally-available?hl=en
⑧3次元弾性体の応力とひずみとは？「youtube 【初めて学ぶ人のための材料力学の教室】演習問題1/2」をsympyでやってみたい。

・演習問題1

# youtubeです。
**途中4:38から (0:00〜10:57)**

https://www.youtube.com/watch?v=CBpGVbwCqcY&t=278

＜再生リスト
https://www.youtube.com/@zairiki/playlists

# sympyで
・ver0.1
```python
# ver0.1
from sympy import *
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN
var('E,ν' ,real=True)
var('σx,σy,σz'    ,real=True)
var('εx,εy,εz,εv',real=True)
var('τxy,τyz,τyz' ,real=True)
var('α ,ΔT'        ,real=True)
rep={E    :200,ν :0.3,        \
     σx  :1  ,σy:1  ,σz :0, \
     #τxy:0  ,τyz:1,τzx:0,  \
     τxy:0  ,τyz:1  ,        \
     α   :0  ,ΔT:0           \
     }
εx=    σx/E-ν*σy/E-ν*σz/E+α*ΔT  ;print("# εx=",εx)
εz=-ν*σx/E-ν*σy/E+   σz/E+α*ΔT  ;print("# εz=",εz)
# print("# εx =",εx.subs(rep)*10**3)     
# print("# εz =",εz.subs(rep)*10**3)     
# print("# εx =",round(εx.subs(rep)*10**3,0))     
# print("# εz =",round(εz.subs(rep)*10**3,0))     
# 
print("# εx =",Decimal(str(εx.subs(rep)*10**3)).quantize(Decimal('0.1'), ROUND_HALF_UP))
print("# εz =",Decimal(str(εz.subs(rep)*10**3)).quantize(Decimal('0.1'), ROUND_HALF_UP))
# εx= ΔT*α - ν*σy/E - ν*σz/E + σx/E
# εz= ΔT*α - ν*σx/E - ν*σy/E + σz/E
# εx = 3.5
# εz = -3.0
```
# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

# いつもと違うおすすめです。

小数を任意の桁数で四捨五入　＜　

https://note.nkmk.me/python-round-decimal-quantize/#_1

#### 参考文献

~~＞等分布荷重を受ける単純支持はり~~
~~＞JSME p85~~
　
~~＞単純支持ばり 7)~~
~~＞構造力学公式集 p136~~
【LaTeX】右寄せ・中央寄せ・左寄せが上手くいかない


## はじめに

$\LaTeX$では，テキストの右寄せ・中央寄せ・左寄せをするのにコマンド`\rightline`・`\centerline`・`\leftline`を使います．しかし，コンパイルした時に出力されない時がありました．今回はその原因がわかったので紹介します．

## 一行開ける！

結論一行開けると上手くいきます．

```LaTeX
\leftline{左寄せ}
 
\centerline{センタリング}
 
\rightline{右寄せ}
```
STM32C011J4M7ソフトウェアシリアルで遊ぶ。(送信)(9600bps)(オリジナル)


STM32C011J4M7ソフトウェアシリアルで遊ぶ。(送信)(9600bps)(オリジナル)


Arduino 電子工作 gpio シリアル通信 STM32C011



x 各自、勝手に微調整してね!!

目的

カラー液晶の開発用のため
デバッグ用にソフトウェアシリアルを導入する

いろいろ
たぶん、細かい修正と
タイミングの調整だけでいける。
完成した。


![o_cop900.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/e354dec9-9965-ef70-50f4-98c1b566644a.jpeg)




```c++



//SER_LB_9600_C011_1

#include <Arduino.h>

#include "SER_9600_C011_1.h"

//初期化
void setup()
{

  //シリアルの初期化
  pc.beginNS(9600);

} //setup


//メインループ
void loop()
{

  //データの表示
  pc.printNS("HELLO WORLD\r\n");
  
  delay(1000);

} //loop



```



```c++:SER_9600_C011_1.h



#ifndef TEST_H
#define TEST_H

//SER_9600_C011_1.h


#define TX1      PA12      // ?pin

//#define UART_DELAY  96   //  9600bps  NG
//#define UART_DELAY  97   //  9600bps  NG
//#define UART_DELAY  98   //  9600bps  NG
//#define UART_DELAY  99   //  9600bps  NG
//#define UART_DELAY 100   //  9600bps  OK 1 
//#define UART_DELAY 101   //  9600bps  OK 2 
//#define UART_DELAY 102   //  9600bps  OK 3 
//#define UART_DELAY 103   //  9600bps  OK 4 
//#define UART_DELAY 104   //  9600bps  OK 5 
#define UART_DELAY 105   //  9600bps  OK 6 
//#define UART_DELAY 106   //  9600bps  OK 7 
//#define UART_DELAY 107   //  9600bps  OK 8 
//#define UART_DELAY 108   //  9600bps  OK 9 
//#define UART_DELAY 109   //  9600bps  OK 10 
//#define UART_DELAY 110   //  9600bps  NG
//#define UART_DELAY 111   //  9600bps  NG


//#define UART_DELAY 1000   //  9600bps ok E


#define DW   digitalWrite


//クラスの定義
struct _pc
{
  void beginNS(int sp);      //メソッドの宣言
  int  putcNS(char ch);      //メソッドの宣言
  int  printNS(char *str1);  //メソッドの宣言
};


//ポートをhiにする 初期化
//メソッドの定義
void _pc::beginNS(int sp)
{
  //ポートをhiにする初期化
  pinMode(TX1, OUTPUT);
  DW(TX1, HIGH);
}


//仮想シリアルへの一文字出力 9600bps
//メソッドの定義
int _pc::putcNS(char ch)
{
  DW(TX1, HIGH);

  DW(TX1, LOW);//START
  delayMicroseconds(UART_DELAY); //START BIT WAIT

  for (int ii = 0; ii < 8; ii++) {
    DW(TX1, (ch >> ii) & 1  );
    delayMicroseconds(UART_DELAY); //DATA 1-8BIT WAIT
  }//for

  DW(TX1, HIGH);//Stop
  delayMicroseconds(UART_DELAY); //StOP BIT WAIT

  return (0);
}


//文字列の表示
//メソッドの定義
int _pc::printNS(char *str1)
{
  //文字の中身がゼロか
  while (*str1) {

    //一文字出力
    putcNS(*str1 ++);

  } //while

  //戻り値
  return (0);
}


//実体の作成
_pc pc;


#endif



```
高効率情報管理：アウトライン型ノートとマインドマップを組み合わせた革新的なソフトウェアの探求

在信息爆炸の時代、効果的に知識を管理し整理することは私たち一人一人にとっての挑戦となっています。アウトライン型のノートツールは、その構造化された特徴を活かし、私たちの思考を捉え整理する手助けをしてくれます。一方で、マインドマップは直感的な方法で複雑な情報を表示します。今、アウトライン型ノートとマインドマップを組み合わせたソフトウェア、Flowlist.jpが、私たちの仕事や学習の方法を変えています。
![ou1tput.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670847/fab342b0-4836-fbf3-fa3d-d01e29c85b7d.png)
一、デザインコンセプト
Flowlist.jpは、シンプルで強力なコンセプトに基づいています：構造化されたアウトライン型ノートと視覚化されたマインドマップを組み合わせ、より包括的で柔軟な知識管理ツールを提供します。このソフトウェアは、従来のノート方法の限界、例えばアウトライン型ノートの視覚表現の不足やマインドマップの深さや細部管理の制限を解決することを目指しています。
二、主な機能
アウトライン型ノートの革新的な応用：
- 多レベル構造：ユーザーは容易に多層のアウトラインを作成し管理でき、マクロからミクロまでの情報の階層を実現できます。
- リッチテキスト編集：テキストに限らず、画像、表、リンク、さらには動画を挿入し、ノートの内容を豊かにします。
- インテリジェントな分類と検索：キーワード、タグ、日付によって必要な情報を迅速に特定し、検索効率を向上させます。
マインドマップのダイナミックな表示：
- 自動図形変換：アウトラインの内容から自動的にマインドマップを生成し、情報の構造を直感的に表示します。
- 個性的なカスタマイズ：ノードのスタイルを編集し、色、形、サイズを変えて、各マインドマップをユニークにします。
- インタラクティブな探索：ズーム、ドラッグ、回転を通じて、複雑なマインドマップを簡単に探索します。
シームレスな統合：
- 双方向同期：アウトラインとマインドマップ間でシームレスに切り替え、内容をリアルタイムで更新します。
- 協力的共有（開発中）：チーム協力をサポートし、リアルタイムで変更を同期し、チーム間のコミュニケーションと協力を促進します。
- クロスプラットフォーム対応：PC、タブレット、スマートフォンで、いつでもどこでもノートにアクセスし編集できます。
![img5-f1bc8f3abd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670847/92d214fb-ea01-d66a-e3b0-269b41a17e8f.png)
三、応用シナリオ
学生、教師、研究者、プロジェクトマネージャー、デザイナー、または日常生活の中の誰もが、Flowlist.jpを活用できます。学生は学習ノートの整理や復習資料の作成に、教師や研究者はカリキュラムの計画や研究資料の整理に、プロジェクトマネージャーやデザイナーはプロジェクト計画や創造的思考の整理に使用できます。
四、ユーザー体験
Flowlist.jpのユーザー体験は非常に直感的でフレンドリーです。インターフェースはシンプルで、機能が一目でわかり、初心者でもすぐに使いこなせます。ソフトウェアの流れるような操作性と安定性は、長時間の使用でも高い効率を保つように緻密に設計されています。
五、未来展望
人工知能と機械学習の技術が進化するにつれて、Flowlist.jpも継続的に進化します。将来のバージョンには、音声認識ノート、インテリジェントなコンテンツ推薦などの機能が含まれるかもしれません。さらに、ユーザーの使用習慣に基づいてインターフェースと機能を自動的に調整することもできるようになるでしょう。
六、結語
急速に発展するこの世界で、Flowlist.jpは単なるソフトウェアではなく、知識管理と革新的思考をサポートするパートナーです。その登場により、情報の整理と応用に関するより効果的で柔軟な方法が提供されます。あなたが誰であっても、どこにいても、知識と思考をより良く管理したいと願うなら、Flowlist.jpはあなたにとって欠かせないツールとなるでしょう。
isc-dhcp-serverが起動しない

### TL;DR
```sh
sudo systemctl status isc-dhcp-server.service
```
でエラーが出るときは
```sh
journalctl -xeu isc-dhcp-server.service
```
で確認してinterface関連のエラーだったら以下を設定する

/etc/default/isc-dhcp-server
```
INTERFACESv4="eth0"
INTERFACESv6=""
```

https://qiita.com/JhonnyBravo/items/210ec3c02e362da03dcd
https://tomsalmon.eu/2020/02/isc-dhcp-server-disable-dhcpv6-debian-9/

### 注意
isc-dhcp-serverはEOLだそうです
https://www.isc.org/blogs/isc-dhcp-eol/
代替はありますが乗り換えは少し工夫が必要かもしれません
https://en.wikipedia.org/wiki/Comparison_of_DHCP_server_software
https://www.reddit.com/r/openbsd/comments/somwlv/differences_of_dhcpd8_isc_vs_openbsd/
https://en.wikipedia.org/wiki/Kea_(software)
https://qiita.com/maclineto/items/840195c1392c2c65d306
https://github.com/rsaxvc/dnsmasq-mac-based-ipv4/blob/master/dnsmasq.conf.example
VScodeで最初にすべき設定

## VScodeで最初にすべき設定

VScodeダウンロード後にした設定の忘備録
ウィンドウ左下の歯車マークから開ける設定画面で設定する


・ignore whitespace
チェックが入っていると、空白文字の差異が差分比較時に無視されるので、チェックを外す

・enable preview
チェックが入っていると、ファイルがプレビューモードで開く場合がある。煩わしいのでチェックを外す
階乗の末尾に０はいくつつく？

https://paiza.jp/works/mondai/loop_problems2/loop_problems2__factorial_zero

いかにもロジカルな問題。
ぶっちゃけ解けなかった。。。
10で何回割れるかっていうことかなとまではわかったけど。

```py

N = int(input())
sum = 1
for i in range(N):
    sum *= i + 1

cnt = 0
while sum > 0:
    if sum % 10 == 0:
        sum //= 10
        cnt += 1
    else:
        sum //= 10

print(cnt)

```

かすりもしませんでした。


http://fukiyo.g1.xrea.com/math-qa/kaijou.htm

これを読んで割り切れるか割り切れないかって
素因数分解の話だよって言われて、おお、、、数学。。。
と思いました。（ちなみに著者は数学苦手な典型的な文系）

とはいえ、プログラマとしては逃げるわけにはいかないので。

まあ。とりあえず素因数分解をしてみる。

ひとまず5の階乗ということにしてみよう。

5 * 4 * 3 * 2 * 1 = 120。
つまり5の階乗は120で、０は１つですね。
素因数分解。。。とかんがえたけど
けっきょくこれって階乗を使ってそのまま分解すればいいかな。
5 * (2 * 2) * 3 * 2 * 1 
こういうことですよね。
で、5は1回しか出てこないので0は一つ。

ではそれより下の4の階乗ならどうか。
4 * 3 * 2 * 1 = 24ですね。
素因数分解しても
(2 * 2 ) * 3 * 2 * 1 = 24
何をどうしても0はできません。

では６の階乗は。
６ * 5 * 4 * 3 * 2 * 1 = 
(3 * 2 ) * 5 * (2 * 2) * 3 * 2 * 1
=720
これも５が１つだけなので、０は１つ。

では７の階乗は。
7 * ６ * 5 * 4 * 3 * 2 * 1 = 
7 * (3 * 2 ) * 5 * (2 * 2) * 3 * 2 * 1
=1440
これも５が１つだけなので、０は１つ。

どうやら、<b>５が１つだけしかなければ０も１つだけ</b>、というパターンが見えてきました。

では10!。（８!も９!も５が１つなので絶対に０は１つだけでした）
計算面倒なので途中までやりますね

10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
= (5 * 2) * (3 * 3) * (2 * 2 * 2 ) * 7 * (3 * 2 ) * 5 * (2 * 2) * 3 * 2 * 1
= 720 * 1440 (つまり10〜８と、７〜１をかけたもの）

０、あきらかにそれぞれ１つありますね。だから０が２つになるはずです。
５も２つ。

つまり5で何回割れるか？が答えということになるんだね。
とりあえず10の階乗の例で、
まず10を5で割ると2。
この２をさらに5で割る。0あまり。なので結局2個というのが答え。

別の問題で、たとえば
10を２で何回割れるか？が答えになるとすると、
10を2で割ると５。
５をさらに２で割ると２あまり
2をさらに２で割ると １。
だから、この問題は各商を足し合わせた
５+２＋１の８個あることになる。

５で何回割れるかのところも、商だけで２個なので問題なし。

ロジックが理解できたところで本題

```py

N = int(input())

cnt = 0
while N > 0:
    #商を足し合わせ
    cnt +=  N // 5
    N //= 5

print(cnt)

```
ふー。勉強になりました。。。

とはいえ、ロジックというかパターンを読み解くなら
プログラムを書く前にどんなロジックになっているのかみる力を身に着けねばです。
RaspberryPiが静的IPでネットワークに接続できない時の対処法

# 結論
dhcpサーバーがない状態で静的IPを設定したいので/etc/dhcpcd.confではなく
/etc/network/interfacesを設定する

/etc/network/interfaces
```
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address {ip}
gateway {gateway}
netmask 24
```

[Linuxで固定IP設定（設定ファイル・コマンド）](https://qiita.com/routerman/items/4d19b3084fa58723830c)
[Remote IP configuration (without DHCP)](https://forums.raspberrypi.com/viewtopic.php?t=109090)

### おまけ(その他のやり方)
[いまどきのraspberry piは /etc/network/interfacesを使わない！！ ](http://monqy.blogspot.com/2019/11/raspberry-pi-etcnetworkinterfaces.html)
[RaspberryPi3 静的ルート(Static Route)の設定＋デフォルトゲートウェイの削除](https://qiita.com/BlueBlue/items/cf49e33cdc36a55b4082)
[ラズベリーパイで固定IPアドレスを設定する](https://mugeek.hatenablog.com/entry/2019/05/27/230256)
[デフォルトゲートウェイの設定 routeコマンド](https://centos.bungu-do.jp/archives/11)


### 問題の確認方法
間違っているとIncompleteが帰ってくる

これはEthernetレベルでIPとMAC addressが紐付けられていない証拠

```sh
arp -a|grep {ip}
```
正しく設定できていればMAC addressが出てくる

新しいraspberrypiのMAC addressの例: d8:3a:dd:xx:xx:xx

[【ARPトラブル】の原因と対処 ～応答解決しない(incomplete),要求の大量発生～](https://milestone-of-se.nesuke.com/troubleshoot/arp-trouble/)
[Raspberry Pi 4 のMACアドレスの範囲が変わったぞ](https://qiita.com/tomotomo/items/2ff445377c13f9db38e2)

### 強制設定(これだけでは解決しない、必要なときだけ実行する)
```sh
#Add entry
arp -s {ip} {mac} -i eth0
#Delete entry
arp -d {ip} -i eth0
```

[Linuxコマンド【 arp 】ARPキャッシュを操作する](https://webkaru.net/linux/arp-command/)
[arpコマンドでARPキャッシュへの静的エントリを登録する
](https://xtech.nikkei.com/it/article/COLUMN/20070207/260975/)
Unityで足音を実装する方法

#  WASDのいずれかが押されている間、途切れてはならない
### これ↓


<iframe width="560" height="315" src="https://www.youtube.com/embed/Tt8vB2FFTNU?si=IrYPmnsR0Ap3Cmkm" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

実はこれだけの実装にかなり時間を費やしました。そもそもAudioSourceとかClipとかよくわかんないという状態で・・・・。

WASDを押したタイミングと離したタイミングで音の再生を制御すればいいことはわかったけど、

**・途中でWASDの押すキーの数を増やすと足音が最初から流れる**
**・途中でWASDの押すキーの数を減らすと（2個→1個）足音が途切れる**

みたいな不完全さが目立ちました。

というわけで、さっそくそれらを解決したコードの方を紹介します。



```cs:playermove.cs
using UnityEngine;

public class playermove : MonoBehaviour
{
    public float moveSpeed;//スピード
    AudioSource audioSource;//オーディオソース
    public AudioClip footstep;//流したい音の設定
    private bool isRunning;
 
    void Start()
    {
        audioSource = GetComponent<AudioSource>();
        isRunning = false;
    }

    
    void Update()
    {
        //ここで足音をいつとめるかを制御する
        if (!Input.GetKey(KeyCode.W) && !Input.GetKey(KeyCode.A) && !Input.GetKey(KeyCode.S) && !Input.GetKey(KeyCode.D))
        {
            if (!isRunning)
            {
                audioSource.Stop();
                isRunning = true;
            }
        }

        //以下はWASD操作
        if (Input.GetKey(KeyCode.W))
        {
            transform.position += transform.forward * moveSpeed;
            if (isRunning)
            {
                audioSource.Play();
            }
            isRunning = false;
        }
        if (Input.GetKey(KeyCode.A))
        {
            transform.position += transform.right * -1 * moveSpeed;
            if (isRunning)
            {
                audioSource.Play();
            }
            isRunning = false;
        }
        if (Input.GetKey(KeyCode.S))
        {
            transform.position += transform.forward * -1 * moveSpeed;
            if (isRunning)
            {
                audioSource.Play();
            }
            isRunning = false;
        }
        if (Input.GetKey(KeyCode.D))
        {
            transform.position += transform.right * moveSpeed;
            if (isRunning)
            {
                audioSource.Play();
            }
            isRunning = false;
        }



    }
}

```

ここで注目していただきたいのは
```cs:playermove.cs
if (!Input.GetKey(KeyCode.W) && !Input.GetKey(KeyCode.A) && !Input.GetKey(KeyCode.S) && !Input.GetKey(KeyCode.D))
        {
            if (!isRunning)
            {
                audioSource.Stop();
                isRunning = true;
            }
        }
```
の部分です。要は、すべてのキーが押されていない状態でないと音の再生を止められないという処理です。つまり、何らかのWASDキーが押されてさえいれば音を流し続けられるよという意味ですね。

### まとめ

こんなに初歩的なことを記事にするつもりは無かったのですが、実は教え子にUnityを教えているときにこの内容を即答できなかったことをかなり悔やんでいるので、記事にすることで感情を浄化させようと思いました。閲覧していただきありがとうございます。
【GAS】セルのデータを２次元配列でプロパティに格納して取り出す方法

## 2次元配列をプロパティにセットする方法
備忘用に残しておきます。
プロジェクトのプロパティにデータを格納できる以下の記述は、
二次元配列を格納すると「[Ljava.lang.Object;abcdef10」のような形に格納されてしまい、
取り出しても使うことができません。
```gas:プロパティに値をセット.gs
ScriptProperties.setProperty(key,value);
```
2次元配列を格納する場合はJSON.stringifyを使用しましょう。
```gas:プロパティに値をセット.gs
ScriptProperties.setProperty(key,JSON.stringify(value)));
```
画像のように2次元配列の形で格納されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317240/11136a53-f16d-61db-cc39-6d14ce655c55.png)

## 2次元配列をプロパティから取り出す方法
プロパティから取り出すときも同様に、ひと手間加える必要があります。
JSON.parse()を使用しましょう。(key：testValues)
```gas:プロパティから値を取得.gs
getTestValues = JSON.parse(ScriptProperties.getProperty("testValues"));
```

## サンプルコード
#### ■仕様
テストシートのB1に最終更新日が入っています。
メインメソッドを初回起動時に、この最終更新日とテストシートの値をそれぞれプロパティにセットします。
[key]updateDate：[value]テストシートの最終更新日(B1セル)
[key]testValues：[value]テストシートの値

[key]updateDateの値が、セルの最終更新日と日時(秒数まで)が同じ場合は、
プロパティの[key]testValuesをメインシートに表示します。

[key]updateDateの値が、セルの最終更新日と日時(秒数まで)が異なる場合は、
再度、最終更新日とテストシートの値をそれぞれプロパティにセットし、
メインシートには現在のテストシートの値を表示します。(プロパティから復元しません)

#### ■コード
```gas:コード.gs
const SPREAD_SHEET = SpreadsheetApp.getActiveSpreadsheet();
const SHEET_NAME_MAIN = "メイン";
const SHEET_NAME_TEST = "テスト";

/**
 * isEqualUpdateDate()がtrueの場合、
 * スクリプトプロパティのkey：testValuesのvalueを取得する。
 * falseの場合、現在のテストシートの値を取得する。
 * 出力先はメインシートのA1以下。
 */
function executeService() {
  //スクリプトプロパティに設定している更新日と、シート状の更新日が一致するか確認する。
  if (isEqualUpdateDate()) {
    try {
      testValues = JSON.parse(ScriptProperties.getProperty("testValues"));
    } catch (e) {
      //もしも何らかの理由でエラーとなった場合は、現時点のテストシートの値をスクリプトプロパティに再設定する。
      ScriptProperties.setProperty("testValues",JSON.stringify(getTestValues()));
      Logger.log(e);
    }
  } else {
    testValues = getTestValues();
  }

  //メインシートに出力する
  getSheetObj(SHEET_NAME_MAIN).getRange(1,1,testValues.length,testValues[0].length).setValues(testValues);
}

/**
 * スクリプトプロパティのupdateDateと、
 * B1セルのマスタ更新日の値を比較し、一致する場合はtrueを返す。
 * 異なる場合はスクリプトプロパティにマスタ更新日とテストシートの値をセットしてfalseを返す。
 */
function isEqualUpdateDate() {
  const updateDate = getSheetObj(SHEET_NAME_TEST).getRange("B1").getValue();
  const getUpdateProperty = ScriptProperties.getProperty("updateDate");

  //getValue()は書式なしの場合string。getProperty()はデフォルトでstringになる。
  //比較できるように、形式をそろえる。
  if (formatDate(new Date(updateDate)) == formatDate(new Date(getUpdateProperty))) {
    return true;
  }
  //key：updateDateにテストシートB1セルの値をセットする。
  ScriptProperties.setProperty("updateDate", updateDate);

  //key：testValuesにテストシートの値を2次元配列の形でセットする。(そのままセットすると二次元配列にならないため注意)
  ScriptProperties.setProperty("testValues",JSON.stringify(getTestValues()));
  return false;
}

/**
 * 日付をyyyy/MM/dd hh:mm:ssにする
 */
function formatDate(date) {
  return Utilities.formatDate(date, "JST", "yyyy/MM/dd hh:mm:ss");
}

/**
 * テストシートの値をすべて取得する
 */
function getTestValues() {
  return getSheetObj(SHEET_NAME_TEST).getDataRange().getValues();
}

/**
 * シートオブジェクト取得
 */
function getSheetObj(sheetName) {
  return SPREAD_SHEET.getSheetByName(sheetName);
}
```
プロジェクトのスクリプトプロパティを確認してください。
実行時間も、都度テストシートの値を取得するよりも0.5～1秒は早くなります。
データ分析の現場で使用するSQLまとめ①（Bigquery）


## 概要
#### GCP環境の主にBigquery周辺で仕事をする際に役立つまとめ


![bigquerySQLまとめ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180499/07a67478-1351-b57c-c7e6-007efa012f57.png)


### SQLとは
ソフトウェアを操作＆管理するデータベース言語です。

SQL＝データベース言語

DBMS（データベース管理上）でデータやデータベースを制御するための言語
ユーザーやシステムからの命令を受けてRDB（リレーショナルデータベース）にクエリ（問い合わせ）を行い、結果を返します。返ってきた結果はモニターなどに表示されます。

## データベース設計

### データベースの設計とは？

現実世界の複数情報に共通する要素を抜き出しデータモデルを作成することです。

データモデル作成は

`<概念設計>`

　⇩　⇒ 概念モデルが作成
 
`<論理設計>`

　⇩　⇒ 論理モデルが作成

 `<物理設計>`
⇒ 物理モデルが作成

という段階行われて作成されます。

### 概念モデル作成
実体（エンティティ）とつながりを示した関連（リレーションシップ）によって作成される「ERモデル（実体参照モデル）」がよく使用されて表現されます。

### 論理モデル作成
ERモデルから⇒リレーショナルモデル作成
これはテーブルをリレーショナルモデルとして正規化という適切な形式に変換します。
本時点でデータの型を決定します。

### 物理モデル作成
モデルを修正を実施します。

論理設計のテーブルの定義からインデックス定義をして性能が向上するようにします。


### インデックスとは?

インデックスの作成にはCREATE INDEX文を使用します。

CREATE INDEX スキーマ名.インデックス名 ON インデックスを作成するテーブル名（カラム名, ...）

### リレーショナルデータベース(RDBMS)
1行1レコードとするテーブル形式で表します。
主キーでそのテーブルを代表するカラムを指定し、外部キーで別テーブルと関連付けます。
テーブルの設計には正規化と呼ばれる設計手法があり、これでデータの重複をなるべく無くして整合的にデータを取り扱えるようにすることを目指します。

### データベースの削除

データを保持したいが削除もしたいという場合には「論理削除」が使用されます。
「物理削除」は完全にレコードデータをデータベースから削除するのですが、「論理削除」は削除カラムを作成して削除が行われた場合に削除カラムで特定のフラグをたてるなどが行われます。「フラグ1は削除有/2は削除無」

## まとめ

以上。簡単にデータベース知識の概要を抑えたところで
次回は現場で役立つ意外と使用するクエリをまとめました。


[GCP公式](https://cloud.google.com/bigquery/docs/listing-datasets?hl=ja)
電子証明書の仕組み　学習

ネスぺ試験時の学習まとめ。

# AliceがBobにメッセージを送るとする
## Alice　→　Bob
![PKI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/509e5c96-f24d-6721-476b-b8244fbf8f79.png)

**1**.
アリスは**CSR**（Certificate Signing Request）を作成し、**CA**（Certificate Authority）に送信する。

**2**.
CAはCSRを受け取り、その中に含まれるアリスの情報を確認し、**アリスの公開鍵**（Public Key）を含む証明書を発行するための審査を行う。

**3**.
CAは**CAの秘密鍵**（Private Key）を使用して、「アリスの情報とアリスの公開鍵」のハッシュ値を暗号化し、**電子署名**（Degital Signature）を作成する。

:::note info
データからハッシュ値を生成し、それを秘密鍵で暗号化したものを**電子署名**という。

また、秘密鍵は**署名鍵**、公開鍵は**検証鍵**とも呼ばれる。

電子署名は秘密鍵によって暗号化され、公開鍵でしか復号することができないため、リアル世界における「署名」と同じ役割を果たす。

リアル世界での署名は、筆跡は改ざんできないことを前提としているので、署名した本人にしか作成することができない。

ネットワーク世界における電子署名では、秘密鍵は暗号化を行う者しか保持していないことが前提とされているため、リアル世界同様に、秘密鍵の所有者しか暗号化できない。
:::


**4**.
3で作成した電子署名とアリスの情報、アリスの公開鍵を含む証明書がまとめてCAからアリスに返却される。

**5**.
アリスはCAから受け取った電子証明書を自分の端末にインストールする。

**6**.
アリスはボブに送りたいメッセージをハッシュ化し、さらに**アリスの秘密鍵**を使用して、**電子署名**を作成する。

**7**.
アリスはメッセージ、6で作成した電子署名、5で受け取った電子証明書をボブに送信する。

## 一方、Bob
![PKI (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/faf2fbba-6d3b-e817-baf8-4d95f97ab77f.png)

**8**.
ボブは受信したメッセージをハッシュ化することにより、一つ目のハッシュ値を取得する。また同時に、同封の電子証明書に含まれた**アリスの公開鍵**を使用して電子署名を復号することで、二つ目のハッシュ値を取得する。

２つのハッシュ値が一致するかを比較する。

**9**.
電子証明書に含まれた「アリスの情報とアリスの公開鍵」をハッシュ化することにより、一つ目のハッシュ値を取得する。

また、同じく電子証明書に含まれた**CAの電子署名**を、**CAの公開鍵**を使用して復号することで、二つ目のハッシュ値を取得する。

２つのハッシュ値が一致するかを比較する。

**10**.
8と9の比較がそれぞれ一致すれば、ボブは受信したメッセージが確かにアリスが送信したものであることを検証できたことになる。

:::note info
**電子証明書**は、公開鍵を証明するための情報セットと考える。
:::

## CAの検証が必要な場合

上の例では、BobはCAを「信頼のおけるCAである」と考えていることを前提としている。

ここで、CAには**ルートCA**（**Root CA**）と呼ばれる、政府機関のCAである、認知度が高いなどの理由で第三者を介さずに自身の正当性を主張することができるCAと、ルートCAに正当性を証明してもらうことで自身の正当性が主張できる**中間CA**（**Intermediate CA**）が存在する。

CAをルートCAを見なすかどうかは、開発者が判断する。

また、中間CAが別の中間CAによって正当性を証明されていることもあるが、上位証明者を辿っていけば必ずルートCAにたどり着く。（というより、最後にたどり着いた証明者がルート証明者）

上の例で、もし仮に、Bobが中間CAを信頼していない場合、ルートCAを介した中間CAの検証が行われることもある。

![PKI (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/df967eed-45e9-6330-438b-694fb008e229.png)

**1**.
Bobは、ルートCAの電子証明書に含まれた電子署名を、同じくルートCAの電子証明書に含まれているルートCAの公開鍵で復号する（ハッシュ値が取得される）。

:::note info
ルートCAの電子証明書は、通常、リストとしてOSやWebブラウザにインストールされている。

またユーザが知らないうちに、定期的な更新もされている。

ブラウザは有効期限の切れた証明書リストも保持している。これを**CRL**（Certificate Revocation List）と呼ぶ。
:::

**2**.
Aliceから受信した「中間CAの電子証明書に含まれていた中間CAの公開鍵と、ルートCAの電子証明書に含まれていた情報」からハッシュ値を生成する。

**3**.
1と2で取得した２つのハッシュ値が一致するかを比較する。一致すれば、中間CAはルートCAによって信頼できることが証明されたことになる。

# 参考
・<a href="https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AA%E3%82%B9%E3%81%A8%E3%83%9C%E3%83%96" target="_blank" rel="noopener noreferrer">アリスとボブ</a>
・<a href="https://amzn.asia/d/fyBbwI0" target="_blank" rel="noopener noreferrer">ネスペの基礎力 -プラス20点の午後対策</a>
cronでshファイルを実行するときに引っかかった話

# はじめに
最近は、Linuxで遊んでいるのですが、cronで引っかかったので同じようなことを使用している人のために記事を書いてみることにしました。とはいえ、もしかしたら自分が初心者なだけで詳しい人には常識なのかもしれません。（ほぼ、初投稿なので至らぬ点もあるかもしれません。）

## やりたかったこと
cronでSSDのS.M.A.R.T.情報をtxtファイルに記録する。

## 引っかかったこと

cronにコードを書いたshファイルを登録し、エラーなく実行できているのにtxtファイルに記録されない。

## 解決方法

通常shファイルを書くときはファイルを相対パス（例えば`date.txt`みたいな感じで）ですが、cronから実行するときは必ず、フルパスつまり、`/home/username/date.txt`のような形で書く必要があります。
よく、cronの設定内にフルパスで記載するように書いてあること見ますが、意外とshファイル内までとは書いていないんですよね。


困っていた人の助けになれば良いと思います。
はじめてPoetryを使ってみた（例：FastAPI-Project）

# Poetryの設定手順（例：FastAPI-Project）
私の記事は、この記事に限らず全て...
備忘録的に書き連ねているだけなので、ご承知ください。

## インストール
```bash=
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
```

## 初期設定
```bash=
# 新しいプロジェクトを作成する際に自動的に仮想環境が作成される
poetry config virtualenvs.create true
# 各プロジェクトルートの .venv ディレクトリ内に仮想環境が作成される
poetry config virtualenvs.in-project true
```

## 新規プロジェクトを作成
```bash=
poetry new <project-name>
# 例
# poetry new fastapi-project
cd fastapi-project
```

## 仮想環境のアクティベート
```bash=
poetry shell 
```
## 
```bash=
# アップグレードされるパッケージ一覧が分かる
poetry update --dry-run
# アップグレード
poetry update
```
注)
- `poetry update` は、poetry.lock ファイルを更新する
- `poetry install`は、pyproject.toml と poetry.lock ファイルに基づいて依存関係をインストールする

## FastAPIとUvicornの依存関係の追加
```bash=
poetry add fastapi uvicorn
```
## プロジェクトルートにmain.pyを作成
```bash=
touch main.py
```
- main.py はアプリケーションのエントリポイント
- FastAPIアプリケーションのルートとなるファイル
- APIのルート、エンドポイント、ビジネスロジックなどを記述する

## main.py
```bash=
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}
```
注）
- 大規模なアプリケーションの場合、main.py は複数のモジュールやパッケージに分割されることがある
- 小さなプロジェクトやプロトタイプの場合は、main.py に基本的なコードを記述するだけで十分

## アプリケーションの実行
```bash=
uvicorn main:app --reload
# --reload オプションは開発中のコード変更を自動的にリロードするためのもの
```

参照：
- [Poetry実践入門 #自分用メモ](https://zenn.dev/t4aru/articles/fdc73127b895a5)
- [Poetry documentation (ver. 1.1.6 日本語訳)](https://cocoatomo.github.io/poetry-ja/)
- [Poetryをサクッと使い始めてみる](https://qiita.com/ksato9700/items/b893cf1db83605898d8a)
エッジ推論デバイス　HAILO について調査中

機械学習の推論の実行は、ボードのCPU/GPUのリソースを多く使ってしまう。
機械学習の推論したいモデルの数は、多くなりがちである。
１つの推論モデルだけを実行するだけならば十分でも、
複数の推論モデルを実行する際には、不足がちになってしまう。

# エッジ推論用のアクセラレータという選択肢
解決策の１つは、機械学習のためのアクセラレータを追加することだ。
## 追加するアクセラレータに必要な条件
- 既存の学習済みのモデルなどを利用しやすいこと。
- なるべく、既存の枠組みとの相性がいいこと。
- その大きさのモデルが載ること、メモリの使用量
- 画像入力とフレームレートとインタフェースの帯域
そういったことを検証すること。

# HAILO

HAILO [Hailo-8 AIプロセッサ](https://hailo.ai/ja/products/ai-accelerators/hailo-8-ai-accelerator/)

HAILO [AIビジョンプロセッサ「Hailo-15」](https://hailo.ai/ja/products/ai-vision-processors/hailo-15-ai-vision-processor/)



Hailo [Vision Processor Software Package](https://hailo.ai/ja/products/hailo-software/vision-processor-software-package/)

[HAILO にある例](https://hailo.ai/ja/products/hailo-software/hailo-ai-software-suite/#sw-tappas)
- Template APPlications And Solutions
- Object detection
- License Plate Recognition (LPR)
- Multi-stream Object Detection
- Multi-Camera Multi-Person Tracking (RE-ID)
- Semantic Segmentation
- Depth Estimation
- Instance Segmentation
- Pose Estimation
- Facial Detection and Recognition


github HAILO https://github.com/hailo-ai
github [HAILO models zoo](https://github.com/hailo-ai/hailo_model_zoo)


## [HailoRT](https://hailo.ai/ja/products/hailo-software/hailo-ai-software-suite/#sw-hailort)
> HailoRTは、ホストプロセッサー上で動作する商用化品質で軽量かつ拡張可能なランタイムソフトウェア
![](https://hailo.ai/wp-content/uploads/2023/10/HailoRT-Key-Capabilities-2.jpg)

## [Hailo-8 M.2 AI アクセラレーションモジュール](https://hailo.ai/ja/products/ai-accelerators/hailo-8-m2-ai-acceleration-module/#hailo8-m2-overview)

> Supported Frameworks
TensorFLow, TensorFlow Lite, ONNX, Keras, Pytorch

---

MACNICA [HAILO](https://www.macnica.co.jp/business/semiconductor/manufacturers/hailo/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/95bd5543-8bc5-5554-7a2a-f50f99b80277.png)
[引用元](https://www.macnica.co.jp/business/semiconductor/manufacturers/hailo/products/136346/)

---

アナログ・テック[長期供給、低消費電力で高い推論処理能力を誇る Hailo社の産業用AIチップ『Hailo-8™ AI Processor』](https://www.analogtech.co.jp/products-AI-Chip/)
> Hailo-8™チップ搭載モジュール

アナログ・テック[AIチップ開発環境 Hailo-8™ 評価開発キット](https://www.analogtech.co.jp/products/hailo8mpcie/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/a1c55b07-2a4d-38f9-0b0d-4af385ea97f7.png)
[引用元](https://www.analogtech.co.jp/products/hailo8mpcie/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/2a149395-0a70-dc5c-40e3-7cb028a641b7.png)
[引用元](https://www.analogtech.co.jp/products/hailo8mpcie/)


---
[Hailo、新しいスマートカメラ向けAIチップを発表――従来の5倍以上の性能を同等の価格帯で](https://engineer.fabcross.jp/archeive/230408_hailo-15.html)


TIER IV BLOG　[自動運転におけるAIコンピューティングIIのMEET UPを開催しました！](https://tier4.jp/media/detail/?sys_id=xQ76KCEgxuIdANLmGHnDi&category=BLOG)

MEET UPでの説明会のYoutube動画が上記のページにある。

## 比較デバイスの例： Google Coral EdgeTPUの評価事例
[エッジデバイス向けAIアクセラレータの比較検証](https://lab.mo-t.com/blog/benchmark-edge-ai-accelarator)
DB登録方法の違いによるパフォマンス比較

この投稿は Delphi Advent Calendar 2015 の21日目の記事です。


# はじめに
同じコンポーネントを使っても、データベースに登録する方法は複数あります。
今回は、その方法の違いによるパフォーマンスの比較をしたいと思います。

# 確認方法
コンポーネントは、FireDACを使います。Delphiは、10 Seattle、データベースは、PostgreSQLを使いました。
データは、日本郵便株式会社のサイトからダウンロードした郵便番号データを使用しました。
件数は、123,907件です。項目は、新旧郵便番号と、県市区町村名のｶﾅと漢字名で9項目のフィールド対象としています。
このデータをテーブルに追加する処理で確認します。

登録方法の比較は下記の3種類。すべて、TFDQueryを使います。
１）ChashUpdateを使用し、全件Append->Post後、ApplyUpdatesする。
２）Insert文を使い、ExecSQLで1件づつ全件登録します。
３）同じく、Insert文を使用し、配列DMLを使います。配列数は２パターン計測したものを示します。

# 計測結果
計測値です。それぞれ2回計測を行っています。
<div>
<table style="height: 102px;" width="425">
<tbody>
<tr>
<td>パターン</td><td>1回目(hh:nn:ss.zzz)</td><td>2回目(hh:nn:ss.zzz)</td></tr>
<tr><td>１）</td><td> 00:04:23.610</td><td> 00:06:49.251</td></tr><tr><td>２）</td><td> 00:01:22.688</td><td> 00:02:21.500</td></tr><tr><td>３）  ArraySize = 5000</td><td> 00:00:07.126</td><td> 00:00:07.031</td></tr>
<tr><td>３）  ArraySize = 10</td><td> 00:00:28.047</td><td> 00:00:41.969</td>
</tr>
</tbody>
</table>
</div>

配列ＤＭＬでArraSizeが大きいものが圧倒的に早いようです。
データ移行や、バッチ系の処理で、処理時間が気になるようなときは、配列ＤＭＬが有効なようです。ArraySizeは、大きいほうがよいと言うこと上記からわかりますが、あまり大きくするとメモリのエラーが出ます。
最初、ArraySizeをデータ件数(123,907)にしたら駄目でした。１万件でも駄目で、上記５０００件はＯＫでした。
その間は確認してません。このあたりはパラメータの項目数などによって、調整が必要なようです。
<a href="http://docwiki.embarcadero.com/RADStudio/XE8/ja/TFDQuery%E3%80%81TFDStoredProc%E3%80%81TFDUpdateSQL_%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E8%B3%AA%E5%95%8F">ここのQ4</a>に情報があるようです。いまいち意味がわからないですが、結局環境によって違うってことなのかなと思います。

##
*2021/10/15 追記
配列DMLを使ってよくわからないエラーが出るときは、ArraySizeを減らしてみるとうまくいくケースがある。
RoRにおける検索時の表記揺れ対応（漢字、カタカナ、ひらがな）

## 事象

検索機能を実装する際、表記揺れに対応する必要が生じました。例えば、検索ワードが「東京」の場合、「とうきょう」や「トウキョウ」といったひらがなやカタカナ表記でもヒットさせる必要がありました。また、「コンビニ」というカタカナで入力された場合には、「こんびに」というひらがな表記での検索にも対応することが求められました。この記事では、Ruby on Railsを使用して、これらの表記揺れに柔軟に対応する方法を共有いたします。

また、このアプローチは、「漢字のみ」「カタカナのみ」「ひらがなのみ」といった通常のパターンだけでなく、「漢字とカタカナとひらがな」「漢字とカタカナ」「漢字とひらがな」「カタカナとひらがな」といったイレギュラーなパターンに対しても柔軟に対応できます。これは、各文字が漢字、カタカナ、またはひらがなかどうかを個別に判断し、それに応じて適切な変換を行うことにより実現されています。この方法により、多様な表記揺れに対応することが可能になり、検索機能の精度を高めることができます。

## 対処法

以下のコードスニペットでは、RubyのStringクラスにStringHelperモジュールを追加し、文字列の相互変換機能を実装しています。具体的には、漢字からひらがな、ひらがなからカタカナ、カタカナからひらがなへの変換機能を提供しています。

```store.rb
module StringHelper
  require 'net/http'
  require 'nokogiri'

  # 漢字をひらがなに変換する
  def to_kanhira
    # 外部APIへのリクエスト処理
    http = Net::HTTP.new('yomikatawa.com', 443)
    http.use_ssl = true
    path = File.join('/kanji', self)
    html = http.get(path).body
    result = Nokogiri::HTML(html).search('#yomikata tbody tr td').first
    result ? result.inner_text : ''
  end

  # ひらがなをカタカナに変換する
  def to_kana
    tr('ぁ-ん', 'ァ-ン')
  end

  # カタカナをひらがなに変換する
  def to_hira
    tr('ァ-ン', 'ぁ-ん')
  end

  def with_furigana
    kana = to_kanhira.to_kana
    "#{kana}#{kana.to_hira}"
  end
end

class String
  include StringHelper
end

class Store < ApplicationRecord
  def name_with_furigana(name)
    return '' if name.nil?
    name.with_furigana
  end
  
  def store_name
    store&.name
  end
   
  def store_name_with_furigana
    name_with_furigana(store_name)
  end
end
```

## 参照

`miyabi`というgemの機能を参照させていただきました！m(_ _)m

https://github.com/isy/miyabi

当初は`Meilisearch`を使おうと思ったのですが、
漢字、カタカナ、ひらがなの表記揺れには弱いようでした。。

https://gigazine.net/news/20230430-meilisearch-search-engine/

自らの備忘録のために投稿してますが、なにかお役に立てましたら幸いです！:clap:
また、なにか間違ってましたらご指摘いただけますと幸いです！:pray:
英語の Intune ビジュアル登録ガイド (PDF) を Google 翻訳したら素晴らしかった

# はじめに
英語の PDF ドキュメントが手元にあって、日本語のものが手元にない場合、英語が出来ない人（つまり私）は、読む気がおきません。
テキストだけなら、翻訳サイトをつかって、翻訳すれば良いですが、表 になったようなものだと、枠ごとのテキストをコピペして翻訳しても、表全体を見渡せるわけではなく、全体像が頭に入ってきません。

今回、Intune ビジュアル評価ガイド（英語の PDF しかない）をどうしても読む必要が生じた際に、Google 翻訳で 簡単に翻訳することが出来たので、記事にしてみました。

無論、Intune ビジュアル評価ガイド以外の PDF でも翻訳可能なことは当然ですが、Intune ビジュアル評価ガイド を主軸に記事を書かせていただきますね。
※PDF 内の文字部分が、テキストではなく 画像 として記録されているものは、翻訳できないかもしれません。

:::note info
既に知っている人にとっては、本記事は 何の役にも立たない内容ですので、ご承知おきください。
既に普通に利用されている人は、多数いると思うのですが、私のように 気づいていない人も、それなりに大勢いるような気がしますので、そういう人向けの記事です。
:::

# PDF 原稿
以下に公開されている Intune ビジュアルガイド を原稿として使います。
https://learn.microsoft.com/ja-jp/mem/intune/fundamentals/deployment-guide-enrollment?wt.mc_id=mvp_407731#download-the-visual-enrollment-guide

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2daa84e4-01b0-c380-3842-d6450361888d.png)
上記のキャプチャをみると、日本語ドキュメントのようにも見えるのですが、見事に英語です。

2ページ目を見ると、以下のように 表組になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/3d789090-9e01-f9d3-d073-82c8a1cc0e8d.png)

当初は、この表を理解したかったので、EXCEL で表を作って、 各セル内のテキストを コピペで翻訳しつつ、自分で表を作るしかないかなぁ・・・と思っていました。

# 他社の翻訳サイトでは 失敗。
まず、ネットで "PDF 翻訳" というワードを使って、無料で 翻訳できるサイトを見つけて、ユーザー登録して、試してみました。

すると、以下のような感じで、アレレ こんなもんなのか・・・という出来具合で 正直 機械翻訳だと これが限界なのかなと諦めかけました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/88558c19-9db8-96c9-14f9-1962b46b169b.png)
※どの翻訳サイトを使ったのか・・は、ここでの記載は 控えたいと思います。

# Google 翻訳（ドキュメント）で解決
ところが、Google 翻訳 のサービスにも、PDF 翻訳 があることを知り、試してみました。
https://translate.google.co.jp/

なんと、普段 良く使っている Google 翻訳 に、「ドキュメント」タブがあり、左下の枠内に ドキュメントを「ドラッグ＆ドロップ」するだけで良かったのです。
灯台元暗しで、全然気づいてませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b64e11be-ad6a-04d7-59a3-8c4ac4546c73.png)
サポートされるファイル形式として、緑枠の箇所に ".pdf" と書かれています。

# 素晴らしい出来栄え
以下のように、Microsoft の オリジナル日本語のドキュメントかと見まがうばかりの出来栄えとなりました。スゴイ。
左上に、"Machine Translated by Google" と記載されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e2f4e16c-7651-73fb-d432-b1c88743b431.png)

今後も、Google 翻訳（ドキュメント）を活用していきたいと思います。
※企業内の機密情報の翻訳で使ってしまうと、セキュリティ的に まずい気がしますが、元々 不特定多数に開示されている公開文書であれば、問題ないですね。ガンガン使いましょう。

# 追伸
その後、Google ドキュメント翻訳を経験してみた結果、Microsoft のドキュメント翻訳は どうなっているのかと思って、調べてみた結果と その成果を 以下の記事で紹介しています。

翻訳の精度も、Google 翻訳 と遜色のない仕上がりだと思いました。
"Machine Translated by Google" のような フッターに文字が入らないのも良いです

こちらの方法を使うと、企業内のセキュリティ情報であっても、ドキュメント翻訳をすることができる可能性が秘められていると思います。

https://qiita.com/carol0226/items/1627d3bcb8449876434a
CognitoでClient+is+not+enabled+for+OAuth2.0+flowsというエラーが出る

TerraformでCognitoのユーザープールを作成した場合に「Client+is+not+enabled+for+OAuth2.0+flows」というエラーに遭遇しました。解決法は単純だったのですが苦労したので備忘録として説明します。

# 解決法
以下のようにallowed_oauth_flows_user_pool_clientにtureを設定することで解決できます。
```
resource "aws_cognito_user_pool_client" "client" {
・
・
  allowed_oauth_flows_user_pool_client = true
・
・
・
}
```
【AWS認定試験向け】CloudFront+S3のアクセス制御

## 1.はじめに
AWS認定試験の中で頻出の`S3`や`CloudFront`の署名付き～とか`OAI`とかワードについての理解がなんとなくだったのと、公式サイトなどを見ても初学者には何やら小難しいことが書いてあってよくわからないので、本質理解のために簡単に図でまとめてみました。


## 2.対象者
- `S3`、`CloudFront`についてふわっと理解している方
- AWS認定試験に向けて勉強している方

## 3.今回のゴール
1. `S3`と`CloudFront`がどういうものか理解する。
2. 署名付き～を理解する。
3. `OAI`を用いたアクセス制御の仕組みを理解する。
4. キャッシュを理解する。

## 4.S3、CloudFrontとは？
### CloudFront
・静的、動的なウェブコンテンツ(サイトや動画など)の配信を高速化できる。
・アクセス制御や暗号化など通信をセキュアにできる。(今回はここを紹介)
・AmazonやHuluにも採用されており、AWSでWebアプリケーションを利用する際も使われる。

### S3
・クラウドストレージサービス。容量無制限でファイルなどのデータを格納できる。
・バージョン管理やバックアップ、暗号化など何かあったときに対する安全性が強い。

### 組み合わせることで出来ること
Webアプリケーションを作り、htmlをS3に上げたものの、コンテンツが表示されるのが重いなどの場合にCloudFrontをはさんであげることで早くユーザにコンテンツを届けることができる。

## 5.署名付き～とは？
インターネットはだれでもアクセスできてしまうので、S3に上げた内容そのままだと他の人に見られてしまう。
なので、知っている人(例えばログインユーザなど)しか見られないようにするための仕組み。

### 署名付きURL
AWS認定試験で、まず登場するであろうワード。
文字通り、URLの後ろにこんな感じで署名がくっついてます。
```
https://s3-ap-northeast-1.amazonaws.com/index.html?X-Amz-Algorithm=cnhidnkjnjweqlmf~~~
```
署名用のタグは`X-Amz-Algorithm`以外にもいくつかあるのですが長いので割愛します。。
この`URL`+`署名`の形でリクエスト送ってくれないとアクセス通さないよ？というのがこれです。
この署名もいつまで有効にするかの時間設定が可能になってます。

### 署名付きCookie
二つ目が`署名付きCookie`で、何が違うかというと署名情報をURLにくっつけるのではなくてHTTPリクエストする際にCookieに署名情報を乗っけて認証する点です。
署名付きURLだと、URLが変わってしまうので変えたくない場合などはこちらを使用する形になると思います。
要件的にCookieを使えないという場合は`署名付きURL`になったりするので、この辺りはケースバイケースですね。

## 5.OAIとは？
オリジンアクセスアイデンティティの略称です。
（と言われても私は分からなかったので、ワードをかみ砕きました…笑）

**オリジン**...目的のものが置いてある場所。実際はS3のバケットを指定します。
**アクセス**...これはそのままアクセスですね。
**アイデンティティ**...その人(ユーザ)だと証明できること。

なので、`OAI`は **目的のもの(html)を取りに行く(アクセス)ための正しいユーザですよ。** という証明書のようなものの理解でよいと思います。

実際は`CloudFront`で作成できる特別なユーザのことを指しており、作成した`OAI`を`S3`のバケットポリシーに設定してあげると、`OAI`のみアクセスを許可するように機能してくれるようになります。
`S3`をセキュアにするために、`CloudFront`経由でアクセスしないと受け付けないようにしてくれるので、ありがたい機能ですね。
最近はもはやレガシーな仕組みで、現在は[**OAC**](https://repost.aws/ja/knowledge-center/cloudfront-access-to-amazon-s3)という仕組みがAWSから推奨されているようです。

## 6.キャッシュとは？
`CloudFront`の良い点としてキャッシュを保存しておける点があります。
ユーザがリクエスト投げたときにS3まで毎回取りに行ってもらうのではなく、同じリクエスト結果をすでに`CloudFront`側で保持しているのであれば、そのまま返してくれるというものです。
`CloudFront`では、あらかじめキャッシュの保持時間(TTL)などを設定したり、リクエストのパスパターンを設定しておくことで、パスパターンに応じてリクエストをさばくことができます。

このリクエストパターンの設定が`ビヘイビア`とも呼ばれていてリクエストのURLによってどの`オリジン`を見に行くかの振り分け設定をすることができます。
※先ほどの`署名付きURL`や`Cookie`もここで設定に絡んできます。

以下のようなイメージになります。
（ここに`OAI`や署名付きの設定、キャッシュがある場合はS3に取りにいかないなどありますが、簡易的な流れになります。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480753/64cecfdb-1fc5-6505-ded8-35abeb113320.png)


## 7.最後に
`S3`や`CloudFront`は細かく説明するとそれだけでびっしりなのであくまで要点を絞って内容を短めにしましたが、
AWSのサービスって本当に色々考えられててびっくりしました…。
AWS認定試験に限った話ではないですが、ちゃんと仕組みを理解したうえで覚える方がイメージとして頭に残るので遠回りのようで近道なのかもしれません。
同じような境遇の方に参考になれば幸いです。
killコマンドは、なぜkill（殺す）という名前が使われているのか？

---
C++のnewのエラー処理
---

**kill command**

&emsp;『キル・コマンド』は、テクノロジーへの依存が進んだ近未来を舞台に、海兵隊と戦闘用ロボット軍団が繰り広げる死闘を描いたイギリスのSFアクションホラー映画。

　軍事訓練のため、とある孤島に降り立ったビュークス大尉率いる海兵隊員たち。しかしその島は、暴走した戦闘用ロボットたちによって支配されていた。

&emsp;ビュークス大尉らは生きて島から脱出するべく、充分な装備もないまま凶暴なロボットたちに立ち向かうが&hellip;&hellip;。

&emsp;ロボットたちの目的はなんなのか。IDとは何を指すのか。

これは実験ではない。戦争だ。

人類の存亡をかけた戦いが今、始まる！！(始まらない)


**目次**
1. [killコマンドとは](#1-killコマンドとは)
2. [語源・由来](#2-語源由来) 
3. [他にもややこしいコマンドまとめてみた](#3-他にもややこしいコマンドまとめてみた) 
4. [おわりに](#4-おわりに)

# 1. killコマンドとは

<font color="green">**man kill**</font>

&emsp;killコマンドはプロセスを終了させる、もしくは、プロセスにシグナルを送ります。

&emsp;kill は、pidで指定されたプロセス番号のプロセスに対し シグナルを送ります。

&emsp;詳しい説明は下記サイトに載っています。

>参照
[man kill](https://nxmnpg.lemoda.net/ja/1/kill)

なお、C言語のkill関数も同じような役割を持ちます。
```php
#include <signal.h>
int kill(pid_t pid, int sig);
```


# 2. 語源・由来

&emsp;[killのWikipedia](https://ja.wikipedia.org/wiki/Kill)曰く、

>引用
&emsp;デフォルトで送るメッセージは、終了(termination)シグナルであり、プロセスに終了(exit)することを要求する。しかし、killは少し誤った名称である。送られるシグナルは、プロセスの終了とは無関係の場合がある。

&emsp;と書かれている通り、デフォルトではプロセスを終了、殺してしまうので、<font color="red">kill</font>、というのが使われるようになったそうな。


# 3. 他にもややこしいコマンドまとめてみた

&emsp;以下にややこしいコマンドを三つほど書いてみました。

| <font color="low blue">コマンド | <font color="brawn">意味 | <font color="orange">使用意味 | <font color="gray">引っかかるポイント |
|----------|------|------|----|
| <font color="blue">less | 	「less is more」から来ている。より少ないことがより良いという意味だが、実際はmoreコマンドよりも多くの機能を持つ。 | テキストファイルの内容をページごとに表示し、前後にスクロールして閲覧する。 | 名前が「少ない」を意味するが、実際にはmoreコマンドより多くの機能を提供する。 |
| <font color="blue">cat| 「concatenate」の略で、猫(cat)とは関係がない。 | ファイルの内容を表示したり、複数のファイルを連結して一つのファイルにまとめたりする。 | 名前が「猫」を連想させるが、実際にはファイル操作に関するコマンドである。 |
| <font color="blue">ping | 	音響測定信号のピンピング音から来ているが、卓球のピンポンとは関係がない。 | ネットワーク経由で他のホストに到達できるかを確認し、到達時間を計測する。 | 「ping」という名前が卓球の音を連想させるが、実際にはネットワークの通信確認に使用される。 |


# 4. おわりに

　歴史を知ることや、語源を知ることは好奇心を満たしてくれる喜びがありますね。

&emsp;killコマンドも、bouquet（花束）みたいな名前だったら、素敵な気持ちでプログラミングできるかもしれません&hellip;&hellip;。
ChatGPTに数式を書きたい

# 動機
https://www.yomiuri.co.jp/science/20230509-OYT1T50319/

勉強のためにChatGPTを使うのはすごくためになる。でも特に数学の式などテキストにどう打てばいいのかわからないときがある。

練習もかねて、書いてみる

# 基本
https://www.overleaf.com/learn/latex/Learn_LaTeX_in_30_minutes

https://texwiki.texjp.org/?LaTeX%E5%85%A5%E9%96%80

Latexで記述すれば、解釈してくれる。

## ChatGPTに聞いてみる
### ２次方程式

```tex{２次方程式}
y = 2x^2 + x - 1
の解を求めてください 
```

### 積分
```tex{積分}
\int_{1}^{5} x dx
を解答してください
```

### 行列
```tex{LU分解}

  A = \begin{pmatrix}
    5 & 6 & 7 \\
    10 & 20 & 23 \\
    15 & 50 & 67 \\
  \end{pmatrix}
をLU分解してください
```
行列については　`A=[[5,6,7][10,20,23][15,50,67]]` のようにPythonな書き方でもキチンと判別してくれるので、こちらのほうが楽だと思う。

# まとめ
[Short Math Guide for LATEX
](https://ftp.jaist.ac.jp/pub/CTAN/info/short-math-guide/short-math-guide.pdf)

とかもあり、あとは練習
laravelを使った自分が作った料理を投稿できるWebアプリの作成手順

今回はプライベートでPHPフレームワークのLaravelを使ったWebアプリケーションの開発をするので、その設計書を書いていきます。




## サービスを作ろうと思った背景

僕は大学生なので家族と離れて暮らしています。自分の生存確認のための連絡がよく入ってきます。Lineなどのアプリを使っても連絡ができますが、せっかく大学でプログラミングを学んでいるので自分でWebアプリを作ってみようと思いました。具体的には自分の生活ぶりが家族に伝わるようなWebアプリを作ってみようと考えています。




## どんなサービスか

利用者に会員登録してログインしてもらい自分が作った料理の写真を投稿したり、他の人の投稿を見れるようなサービスにしてみようと思ってます。




## サービスに使うスキル

- HTML
- CSS
- jQuery
- PHP
- Laravel
- MySQL
これらを使いたいと考えています。




## サービスの仕様

### 利用者の認証のために
- ログイン
- ログアウト
- 会員登録
- 退会処理
マイページ画面を作り
- メールアドレス変更
- パスワード変更
- パスワードリマインダー
これらを作っていきたいです。



### 料理に関する記事について
- 新規登録
- 一覧表示
- 詳細表示
- 更新処理
- 削除処理
料理に関する画像を投稿したいのでそれをajaxによる非同期処理で作りたいです。




### ユースケース図
簡単にユースケース図を書いてみました。

![スクリーンショット 2024-01-27 13.54.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/ec8c9890-049e-0e5d-1ed6-390960907516.png)




### 画面遷移図

画面遷移図はこんな感じです。


![スクリーンショット 2024-01-27 16.45.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/32485f61-361c-99d5-1e30-fdad389217e5.png)


### 開発期間

開発目安として2ヶ月を予定しています。
かなり予定を緩めに設定しているので速く作業が終わるように前倒しで作業していきます。
チーム協同作業においてオンラインスプレッドシートの活用

**チーム協同作業においてオンラインスプレッドシートの活用経験談**

今回のオブジェクトにおいて、チームのメンバーが同じエクセルのデータを参照する必要がありました。
最初はエクセル表を都度送っていて、更新していました。一日３～４回ほどの送付が必要でした。
かなり手間がかかり、特にまとめるほうでの更新作業をしないといけないため、作業の負担が大きかった。
チームメンバーがスプレッドシートを使っているのを拝見し、すごく便利な機能と実感しました。
それでスプレッドシートに切り替えました。
少し自分のほうは時代遅れを感じてしまったけど、新しいことができたので、すごく嬉しかったです。:relaxed:
スプレッドシートに切り替えたことにより得た**メリット**：
⓵一番大きく感じるにはメンバー何人デモ同時にドキュメントを修正することができるので、まとめて更新する必要がなくなり。
⓶MTGしなくても、二人が同じ個所を見て、同時に修正することも可能なので、効率的になります。
**デメリット**
一部ローカルのエクセルの機能が使えないので、慣れないうちはやや大変かもしれません。