OmniAICreator/Qiita-1.07M huggingface dataset:
MySQL

##### MySQLに接続する
```text:sample
/*
mysql:クライアントからmysqlサーバーに接続する
      -h:host、ホスト名
      -u:user、ユーザー名
      -D:database、データベース名
      -p:password、値を指定しないとターミナルが入力を求め、入力時に表示されない、セキュア
    　mysql -h ホスト名 -u ユーザー名 -D データベース名 -p
docker-compose exec app mysql -h db -u book_log -D book_log -p
#パスワード「pass」を入力
```

##### MySQLとの接続を切断する
quit(exit):MySQLサーバーへの接続を切断する
　　　　　　exitでも可
```text:sample
quit
exit
```

##### MySQL公式ドキュメント
https://dev.mysql.com/doc/refman/5.6/ja/create-table.html


##### 命名ルール
・データべース名、テーブル名、列名に使える文字
→半角文字のアルファベット、数字、アンダーバー

・名前の最初の文字は半角のアルファベット

・名前は重複してはダメ
→1つのデータべースの中に同じ名前のテーブルを2つ以上作成NG
→1つのテーブルの中に同じ名前の列を2つ以上作成NG


##### テーブルを作成
CREATE TABLE文で作成する
CREATE TABLE文<列名1>,<列名2>,・・・という列を持った<テーブル名>のテーブルを作成
```mysql sample.sql
/*
CREATE TABLE [IF NOT EXISTS] <テーブル名>(
    <列名1><データ型><制約>,
    <列名2><データ型><制約>,
    ・・・
)
    <テーブルオプション>
*/

//企業情報のテーブルを作成するなら
CREATE TABLE companies(
    id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    establishment_date DATE,
    founder VARCHAR(255),
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) DEFAULT CHARACTER SET = utf8mb4;    //utf8の4バイト文字に該当する文字を使用場合(日本語や絵文字など)

```

##### テーブルの表示
```mysql sample.sql
//テーブルの表示
SHOW TABLES;

//列の表示
//SHOW COLUMNS FROM <テーブル名>;
SHOW COLUMNS FROM companies;
```

##### テーブルを削除
DROP TABLE文で削除する
DROP TABLE文は1つ以上のテーブルを削除できる

```mysql sample.sql

//DROP [TEMPORARY] TABLE [IF NOT EXISTS] <テーブル名>

//企業情報のテーブルを削除するなら
DROP TABLE companies;

```


##### テーブルにデータを登録
INSERT文でテーブルに一行のデータを挿入する
INSERT INTO文<テーブル名>(列1,列2,・・・)VALUES(値1,値2,・・・);
```mysql sample.sql
/*
INSERT INTO文<テーブル名>
    (列1,列2,・・・)
VALUES
    (値1,値2,・・・);
*/

//企業情報のテーブルを作成するなら
$sql = <<<EOT
INSERT INTO companies(
    name,
    establishment_date,
    founder
) VALUES (
    'SmartHR Inc',
    '2013-01-23',
    'Shoji Miyata'
)
EOT;
```


##### SQLでデータを取得
SELECT文でテーブルからデータを取得する
```mysql sample.sql
//SELECTにはテーブルから出力したい列名、FROMにはデータを取り出すテーブルを指定
SELECT<テーブル名>,・・・FROM<テーブル名>;

//企業情報のテーブルを作成するなら
SELECT name, founder FROM companies';
```

##### mySQLで特定テーブルの全データを削除

```php sample.php
//指定したテーブルの全データを削除する
//DROP [TABLE] <テーブル名>

//会社情報のテーブルの全データを削除するなら
DROP TABLE companies;

```
Nextjs13 + IronSession

# Next13でLowレベルなログイン管理の実装
使用ライブラリ
1. Nextjs　13.4.1
1. iron-session　^6.3.1

# アプリ構成

```
src
+ middleware.ts
| App
    | login
        + Page.tsx
    | secure
        + Page.tsx
    | Api
        | login
            + route.ts
        | secure
            + route.ts
```
- `middleware.ts` に権限確認を行うレイヤを設けます。
- `/api/login`　から認証を行います。
- `/login`からログインを行います。
- `/api/secure`は認証済みユーザーのみアクセス可能です。

[iron-session](https://github.com/vvo/iron-session)を使いセッションにユーザー情報を管理を行います。


# ソースコード
`middleware.ts`と`api`直下の`route.ts`を中心に解説します。

1. middleware.ts
    ここには権限確認を行うロジックを実装してます。
    ```ts
    const needLogInPrefixes = [
    '/secure',  
    '/api/secure/'
    ]
    ```
    　認証を行うURLパターンを記載します。

    ```ts
      if (needLogInPrefixes.some((prefix) => pathname.startsWith(prefix))) {
    
        console.log("path", pathname)
        const session = await getIronSession(req, res, sessionOptions);
      
        const { user } = session;
        console.log("auth check in middle ", user)
    
        if (user === undefined) {
          return NextResponse.redirect(new URL('/login', req.url))
        }
    
      }

    ```
    認証を行うURLにリクエストがあった際に認証されていることを検証します。
    ユーザー情報がなければ`/loin`ページに遷移します。    


1. `api/login/route.ts`
    ```ts
    const session = await getIronSession(req, res, sessionOptions);
    console.log("before ", session, session.user === undefined)
    
    if (session.user === undefined) {
        console.log("set user")
        const user = { isLoggedIn: true, login: "sample user", avatarUrl: "avatar_url" } as User
        session.user = user
        await session.save()
    }
    console.log("after ", session)

    return res
    ```
    一部抜粋しました。
    ユーザー情報がなければ改めて作成してセッションに格納します。


1. `api/secure/route.ts`
    ```ts
    export async function GET(request: Request) {
    	return new Response('Hello, Next.js!')
    }
    ```
    `middleware.ts`で認可を行うのでこのAPI内には認可ロジックはございません。
    単純に`Hello Nextjs`を返却しているように動作してます。


# シナリオー
1. `localhost:3000/login`にアクセス
1. `login`ボタンを押下し、ブラウザのURLから`localhost:3000/secure`にアクセス
1. `get secure data`ボタンを押下し、正常にデータを取得していることを確認します。
1. `logout`を押下しloing画面に戻ります。
1. この状態で`localhost:3000/secure`にアクセスする場合、`login`画面に戻ります。


# 制約
nextj13からになりますが、`serverSideProps`が使えないため、`middleware.ts`から認可ロジックを入れることになりました。また、SSRのページからブラウザのRequestを扱えうことはできないようです。


# 補足
認可ロジックを自由に組み込み、拡張ができるかと思います。
下記のリポジトリに今回使用したソースを格納しております。
画面遷移に問題があり完全なソースではありません。もし使う際には適度修正お願いします。
https://github.com/dlstjq7685/nextjs13-iron-session


## 補足２
より良いソリューションがございましたらコメントなどにご教示いただければいいかと思います！
gcloudコマンドでGCEが起動しない

# 
gcloudコマンドでgoogle compute engine(GCE)を起動しようとすると以下のエラーが発生しました。

### 実施したコマンド
```
gcloud compute instances create test --project centos-cloud --image=centos-stream-9-v20230306 --boot-disk-size=50GB --zone=asia-northeast1-a --machine-type=e2-small
```

### エラーメッセージ
```
WARNING: You have selected a disk size of under [200GB]. This may result in poor I/O performance. For more information, see: https://developers.google.com/compute/docs/disks#performance.
ERROR: (gcloud.compute.instances.create) Could not fetch resource:
 - Required 'compute.instances.create' permission for 'projects/centos-cloud/zones/asia-northeast1-a/instances/test'
```

![スクリーンショット 2023-05-07 15.59.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607116/5b16198e-60e2-07b4-bf59-c40bc2082573.png)


### 原因
imageをパスで指定しなければいけないところを、名前だけで記載していました。
名前の調べ方は
```
gcloud compute list --uri
```
で出てきます。（v1以降をコピーする）
![スクリーンショット 2023-05-07 16.25.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607116/8f64776f-3bbd-9646-0d55-6d2c205824ce.png)


### 修正後の実行コマンド
```
gcloud compute instances create test --project <プロジェクト名> --image=projects/centos-cloud/global/images/centos-stream-9-v20230306 --boot-disk-size=50GB --zone=asia-northeast1-a --machine-type=e2-small
```
![スクリーンショット 2023-05-07 16.22.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607116/d0a29a05-1076-e226-114a-116504b9481a.png)
オプションが不足しているため一部警告が表示されていますが、GCEを作成することができました。
Solidityの始め方

# はじめに
solidity開発環境手順についてのメモです。

# 環境構築手順
・VScode拡張機能からsolidityをインストール
・初期化（package.jsonファイルの作成）
```terminal:terminal
npm init -y
```

・npm経由でhardhatのインストール
```terminal:terminal
npm install --save-dev hardhat
```

```terminal:terminal
npx hardhat
```
※ 選択項目
・どの言語で開発するかを選択（javascript, typescript）。
・後の項目はy(es)か、そのままEnterでOK。

※ 補足
指定するディレクトリ内に別のpackage.jsonファイルがあったりすると、npx hardhatのコマンドを打っても何も表示されない場合があるので注意。

同じバージョンのパッケージをインストールしたい時は、package.jsonとpackage-lock.jsonを任意のディレクトリに移動させ、npm ciと入力。

・コンパイルコマンド
```terminal:terminal
npx hardhat compile
```

・テスト
```terminal:terminal
npx hardhat test
```

# 参考
https://www.udemy.com/course/web3dapps
vue3 共通関数 global

グローバル関数を作りたい

参考
https://programmer-note.hatenablog.com/entry/2021/09/26/175427


elementplusも使っています。



```resources/user.js
import {reactive} from 'vue'
export default function (){

    const user = reactive({
        id:0,
        name:'',
    })
    
    // ユーザーの情報をセット
    const setUser = (data) => Object.keys(data).forEach(key => user[key] = data[key])

    // ユーザーの情報を取り出す
    const getUser = () => user

    const makeUser = () => user.name = 'ようこそ！ ' + user.name + ' さん'


    const showAlert = () => alert(user.id + user.name)

    // 上記を返す
    return {
        setUser,
        getUser,
        makeUser,
        showAlert,

    }
}

```

```Mypage.vue

<template>
    <div>
        <h2>マイページ</h2>
        <el-button plain @click="showAlert">これでユーザーのshowalertを動かせる</el-button>
    </div>
</template>

<script setup lang="ts">

import { reactive, ref} from 'vue'
import user from '/resources/user.js'

// 分割代入で関数定義
const {getUser,setUser,makeUser,showAlert} = user()

// 値をセット
setUser({id:1,name:'太郎'})

// 値を取得してみる
const data = getUser();

//1
console.log("ID : " + data.id);

//太郎
console.log("名前 : " + data.name);

//ようこそ！ 太郎さん
console.log(makeUser()) // {id: 1, name: 'ひかきん'}

//ようこそ！ 太郎さん
console.log("名前 : " + data.name);

</script>



```
typescriptのHello World

# はじめに
typescriptのHelloWorldまでの手順です。
※ node、npmのバージョン管理にはnvm、エディタにはVScodeを使用。

# 環境のセットアップ
・nvmのインストール（nodeのバージョン管理のため）
```terminal:terminal
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
```
参考：https://github.com/nvm-sh/nvm

ターミナルを再起動し、nvmが使えるか確認。
```terminal:terminal
nvm --version
```

・バージョン18.12.１をインストール
```terminal:terminal
nvm install 
```

・nodeとnpmのバージョン確認
```terminal:terminal
node --version
npm --version
```
※ 補足
node.js：サーバーサイドjavascriptの記述を可能にするランタイム環境
npm:node.jsで使用されるパッケージ管理システム

・package.jsonの作成
```terminal:terminal
npm init -y
```

・typescript環境の作成
```terminal:terminal
npm install --save-dev typescript
```

・ファイル（sample.ts）のコンパイル
```terminal:terminal
npx tsc sample.ts
```
sample.jsが作成される。

・typescriptの環境作成と、ファイルのコンパイルをまとめて行う方法
1.ts-nodeのインストール
```terminal:terminal
npm install --save-dev ts-node
```

2.以下のコマンドを実行
```terminal:terminal
npx ts-node sample.ts
```

# 参考
https://www.udemy.com/course/web3dapps
fp-ts を使ってみながら関数型指向の理解を進める(前準備編)

# fp-ts を使ってみながら関数型指向の理解を進める(前準備編)

## 目次

- TODO:追加したら足していく

## [fp-ts](https://gcanti.github.io/fp-ts/) とは

[fp-ts](https://gcanti.github.io/fp-ts/)

- TypeScript で関数型指向で書くために便利なライブラリ

## 動機

仕事で関数型指向で書かれたコードを読む場面がありました。そのコード TypeScript で fp-ts ライブラリを使って書かれていました。私は関数型指向をちゃんと勉強したことがなく、コードも理解できないし、fp-ts ライブラリのドキュメントを読んでもさっぱりだったため腰を据えて関数型指向を勉強しようと思いました。
ただしその際に、fp-ts のドキュメントはあるが、使用例があまり充実しておらず、また、関数型指向で使われる言葉や、概念などの前提知識をある程度知っておかないとドキュメントを読みこなすことが難しいと感じました。
そのため、本記事で関数型指向に触れたことがない人が直面するであろう困難を解決しつつ fp-ts のドキュメントを読み進められる情報を提供しようと思いました。

## 参考にした情報

- [関数型プログラミングの基礎](https://www.amazon.co.jp/%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E-%E7%AB%8B%E5%B7%9D%E5%AF%9F%E7%90%86-ebook/dp/B01MQG41Y0/ref=sr_1_1?adgrpid=53024885013&hvadid=655073159746&hvdev=c&hvlocphy=1009533&hvnetw=g&hvqmt=e&hvrand=16919075382033168790&hvtargid=kwd-297602069427&hydadcr=27266_14669471&jp-ad-ap=0&keywords=%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E&qid=1683441075&sr=8-1)
  関数型指向の基本的な考え方を理解するのにとても重宝しました。タイトルには「基礎」と入っていますが、後半に進むにつれコードを理解するのは難しく、読むだけでなく、実際にコードを書きつつ勧めたほうが自分は理解が進みました。自分は 2 周読んでかなり理解が深まったので、とりあえず最初は分からない部分は飛ばしつつ読み進めるのもいいと思います
- [Getting started with fp-ts series](https://gcanti.github.io/fp-ts/learning-resources/#getting-started-with-fp-ts-series)
  関数型指向を知らない人向けに書かれて書かれているので雰囲気をつかむのに良かったです。
- [fp-ts のドキュメント](https://gcanti.github.io/fp-ts/modules/)
  関数型指向の言葉が断りなく使われるので最初に読むのはなかなか難しいと思います。

- [The State monad](https://paulgray.net/the-state-monad/)
  state monad を一例として モナド の理解をするのにとても役に立った。

## 自分が取り組んだ順番

1. 「[関数型プログラミングの基礎](https://www.amazon.co.jp/%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E-%E7%AB%8B%E5%B7%9D%E5%AF%9F%E7%90%86-ebook/dp/B01MQG41Y0/ref=sr_1_1?adgrpid=53024885013&hvadid=655073159746&hvdev=c&hvlocphy=1009533&hvnetw=g&hvqmt=e&hvrand=16919075382033168790&hvtargid=kwd-297602069427&hydadcr=27266_14669471&jp-ad-ap=0&keywords=%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E&qid=1683441075&sr=8-1)」をわからない部分は深く考えず読む。

1. [The State monad](https://paulgray.net/the-state-monad/)を読んでモナドを理解する

1. [Getting started with fp-ts series](https://gcanti.github.io/fp-ts/learning-resources/#getting-started-with-fp-ts-series) を読みつつ、fp-ts を使ってみる。この際に [fp-ts のドキュメント](https://gcanti.github.io/fp-ts/modules/)を参照しつつコードを書いてみる

1. 「[関数型プログラミングの基礎](https://www.amazon.co.jp/%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E-%E7%AB%8B%E5%B7%9D%E5%AF%9F%E7%90%86-ebook/dp/B01MQG41Y0/ref=sr_1_1?adgrpid=53024885013&hvadid=655073159746&hvdev=c&hvlocphy=1009533&hvnetw=g&hvqmt=e&hvrand=16919075382033168790&hvtargid=kwd-297602069427&hydadcr=27266_14669471&jp-ad-ap=0&keywords=%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E&qid=1683441075&sr=8-1)」の分からなかった部分を中心にもう一度読む。
PandocでMarkdownをEpubにしたとき縦書きの左右が逆になる解決法

PandocでMarkdownをEpubにしたとき、縦書きの見開き２ページで左右が逆になる問題と、改行されない問題の解決法です。日本語の縦書きは本当に情報が少ないです。
まず解決法を説明します。後でpandocやtextlintの解説をしようと思います。

![img1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/aaf819cb-9b46-5b24-c981-7f97e1016233.png)
![img2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/0999b5fd-598d-ef3c-c5d4-8c25b2412bad.png)

# 左右が逆になる解決法

## 必要なファイル
cover.jpg　　←表紙画像
style.css　　←CSS
title.txt　　←pandocメタデータ
xxx.md　　←本文

## title.txt
page-progression-direction: rtl で見開き２ページが右から左になります。rtl は右から左。

```title.txt
---
title: たいとる
author: さくしゃ
language: ja-JP
page-progression-direction: rtl
...
```

## style.css
文章が縦書きになります。
```style.css
html {
  -webkit-writing-mode: vertical-rl;
  -epub-writing-mode: tb-rl;
  writing-mode: vertical-rl;
  text-orientation: upright;
  -webkit-text-orientation: upright;
}
```

## pandoc コマンド
markdown+hard_line_breaks で文章が改行されるようになります。
```cmd
pandoc -f markdown+hard_line_breaks -t epub3 xxx.md title.txt -o xxx.epub --css style.css --epub-cover-image=cover.jpg
```

# Pandoc とか Epub とか Textlint について

**Pandocz** は Markdown を Epub や LaTeX に変換するツールです。
**Epub** は電子書籍です。拡張子epubをzipに変換すると中身はHTMLです。
**Textlint** は文章校正ツールです。VSCode と組み合わすことで、ら抜き言葉や字下げなどを警告してくれます。

電子書籍を出版するときは Docx や Epub を作成します。
文字フォントやフォントサイズは読み手のリーダー側で変更します。フォントサイズが変更されるので改ページも意味がありません。そのため MS Word や Apple Pages などは逆に面倒になります。
そして何より縦書きが超めんどくさいです。
今まではMACのPagesでEpubに変換して、その後Epubを展開して中身を書き換えてましたが、今回上記のようにいい方法がみつかりました。

# Pandoc のインストール方法
brew のインストールは割愛
```cmd
brew install pandoc
pandac -v　　←確認
```

# Textlint の設定方法
Textlint は VSCode に入れると文章を校正してくれます。今回の記事の縦書きやEpubには無関係です。

## textlint のインストール
```cmd
brew install node　　←必要なら
npm install --global textlint
npm install --global textlint-rule-general-novel-style-ja
```
❗注意：textlint-rule-general-novel-style-ja は小説向けです。他にも技術系などいろいろあります。

## VSCodeの拡張機能
- VSCodeの拡張機能に vscode-textlint をインストールします。
- 設定を開きます。
- Textlint: Node Path に パスを設定します。
/usr/local/lib/node_modules/textlint
- Textlint: Config Path は空白のまま。

## Textlintの設定
- VSCodeでフォルダーを開きます。
❗注意；VSCodeで開いているフォルダー以下が適応されます。
- VSCodeのコマンドパレットで textlint: Create .textlintrc File を実行します。
.textlintrc が作成されます。
MACで隠しファイルが表示されない場合は [Shift]+[Comand]+[.]ドット で表示されます。
- .textlintrc を編集
```.textlintrc
{
  "plugins": {},
  "filters": {},
  "rules": {
    "textlint-rule-general-novel-style-ja": true
  }
}
```

# まとめ
MarkdownをEpubにしたとき、縦書きのときページ送りが左右が逆になる解決法を記事にしました。執筆はMarkdownで変換はPandocを使います。最近は縦長のPDFや横長のスライドもMarkdownで書いています。VSCode最強です。
RaspberryPi4 Samba編

# はじめに
windowsとファイル共有するためにsambaを入れる


# sambaのインストール

```bash
sudo apt update
sudo apt install samba
```

### 共有フォルダの作成

起動ディスクに設定すると書き換え回数増えるので、外付けSSDに共有フォルダを作成する

```bash
mkdir /mnt/ex-ssd/share/
```

### 設定ファイル

`/etc/samba/smb.conf`に共有フォルダを設定する(一番下に追記する）

```
[RaspberryPi]
   comment = RP
   browseable = yes
   path = /mnt/ex-ssd/share
   read only = no
   create mask = 0666
   directory mask = 0777
   force user = pi
```

デフォルトだとホームディレクトリが見えて気持ち悪いのでbrowseableをデフォルトNOにしておく

```
[global]
   browseable = no
```

`testparam`コマンドでチェックしておく

### アクセス用のパスワード設定

```bash
sudo smbpasswd -a pi
```
2回聞かれるので入力する（RaspberryPiのパスワードとは別のsambaにアクセスするようのパスワード）

### sambaのリスタート

ここまで出来たらsambaをリスタートする

```bash
sudo systemctl restart smbd
```

# アクセスしてみる
エクスプローラーのアドレスバーからRaspberryPiにアクセスする

```
¥¥192.168.xx.xx
```
ログイン用のダイアログが出てきたら
ユーザー:pi
パスワード:設定したパスワード

フォルダが見えたらOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133206/b89d3e2f-5063-b92f-5f33-c2c2349197e2.png)
６５歳、初心者がrailsに検索機能を


## はじめに

rails初心者が検索機能の実装に挑戦しました。
個人的な記録なので、あくまでに参考にする程度でお願いいたします。
環境は以下です。
mac
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin22]
Rails 7.0.4.3

[参考にさせていただいたもの]"https://abillyz.com/moco/studies/649")

### アプリの作成
```markdown:ターミナル
rails new To_do
--To＿doアプリが作成されたら--
cd To_do
--上記のコマンドでTo_doディレクトリに移動--
```

### scaffoldでtitleとcontent,starttime,endtime及びlimeを作成
 カラムには、更なるバージョンアップのため、同時に日付を作成しておりますが、その検索はここではできません。

```markdown:ターミナル
rails generate scaffold Task title:string content:string starttime:datetime endtime:datetime limit:datetime
```
下記を確認
```markdown:ターミナル
--テーブルとカラムを作成するファイルの生成を確認--
ls -1FA db/migrate
20○-----------○_create_tasks.rb
--以下で上記ファイルの中身を確認--
nano db/migrate/20○-----------○_create_tasks.rb
```
```markdown:ターミナルに表示された中身
class CreateTasks < ActiveRecord::Migration[7.0]
  def change
    create_table :tasks do |t|
      t.string :title
      t.string :content
      t.datetime :starttime
      t.datetime :endtime
      t.datetime :limit

      t.timestamps
    end
  end
end
--支障なしの場合、Cnt + x の次に　n
   変更がある場合については調査中--
```
### seedデータ作成準備と検索機能実装の準備
Gemfile（拡張子の記載なし）に以下を追加する。
```markdown:Gemfileの中身
--faker を利用ため、Gemfile の最後に以下を追記--
gem 'faker'
gem'ransack'
    --２段目の'ransack'は、検索用のものをついでに追加--
```
```markdown:ターミナル
bundle install
```
### seedデータの作成
　db/seeds.rbに以下を書き込む
```markdown:seed.rbの中身
20.times do |n|
    Task.create!(
      title: Faker::Book.title,
      content: Faker::Name.name,
      starttime: "Thu, 04 May 2023 20:18:00 JST +09:00",
      endtime: "Thu, 04 May 2023 20:18:00 JST +09:00",
      limit: "Thu, 04 May 2023 20:18:00 JST +09:00"  
    )
  end
```
### データベース、テーブル及びseedデータの作成

```markdown:ターミナル
 　　　rails db:create　
   rails db:migrate
   rails db:seed
　--seedデータの作成は成功の表示がないので以下で確認--
 rails s
　--一覧表示があれば成功している--
　--上手くいかない場合、最初にrails db:dropを実施--
```
### コントローラの実装
app/controller/tasks_controller.rbのdef indexの中身を変更する。

```markdown:tasks_controller.rb
 　 def index
    @q = Task.ransack(params[:q])
    @tasks = @q.result
  end
```
### ビューの実装
app/views/tasks/index
```markdown:index.html.rb
<h1>Tasks</h1>
--間に挿入--
<%= search_form_for @q do |f| %>
  <%= f.label :title_cont, 'title' %>
  <%= f.search_field :title_cont %>
  <%= f.label :content, '内容' %>
   <%= f.search_field :content_cont %>
 <%= f.submit %>
<% end %>
<%= link_to '一覧を出す', tasks_path %>
--間に挿入--
 <div id="tasks"> 
```
### modlesの実装
　app/modeles/task.rbの中身
```php:task.rb
class Task < ApplicationRecord
    def self.ransackable_associations(auth_object = nil)
        ['title', 'content']
   
    end
    def self.ransackable_attributes(auth_object = nil)
        ['title', 'content']
    end
end
```
### 動作の確認

```markdown:ターミナル
 rails s
　--新規作成や検索が動くことを確認--
```

### 最後に
　railsに独学で挑戦して、半年、いつまで経っても、初心者の高齢者が悪戦苦闘して、なんとかできたものの記録です。
　どなたかのお役に立てれば幸いです。

ps datetimeは非推奨となっているらしいので、複雑な操作を追加する場合は留意が必要なようです。
【個人開発】ChatGPT x LINE BOTお勉強アプリ【Code Stranger】

# Code Strangerによる開発とは
**【Code Stranger】**　とは？

「コードを全く知らない人」のことです。それは私、ぽ〜さん　そのものです。

GPTの出現によって、そんなぽ〜さんでも、アプリ開発ができるという実践が生まれつつあります。
その過程の共有になります。

## 学習アプリのリリース
「数学学習アプリ」をリリースしたことを、以前共有させていただきました。

https://qiita.com/bizposan/items/60f4b627b8afd71974b6

引き続きお友だち募集中です！

https://lin.ee/TrVQV1C

GPT3.5自体にも繋がってますので、数学だけでなく、学習全般に利用可能です
😌雑談はPromptで禁じてます😄

何回かに分けて、このアプリの作成にあたって参考にしたこと・学習したことを共有したいと思います。

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

LINE BOT の接続先にはいろいろあると思うのですが、この記事をみて、「Heroku」を選択しました。

https://qiita.com/shimajiri/items/cf7ccf69d184fdb2fb26

## Herokuを利用して気になっていること
Herokuは標準では30秒でTimeoutしてします。
が、GPT呼び出しと処理はToken Sizeが大きいとあっさり30秒は突破してしまいます。（50~60秒くらい）

学生向けに、解答を丁寧に返すようPromotを書いているのでToken大きめに設定してます。

実際にはGunicorn上でバックグラウンドで実行されているので処理は返していますが・・・・
この点対処法を引き続き調査中です。（何か対処されている方がいたら是非教えていただきたいです・・・！）

# 参考にさせていただいた記事　その２
LINE BOTを使う動機等が非常に近しく、ひそかに師匠を尊敬させていただいております。
youtubeも拝見させていただきました。

https://qiita.com/Tyamamoto1007/items/195baa27d59d3fa13538

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

なんせ、LINE BOT自体初めての開発でしたもので、Flex Messange　なるものがあること自体今回初めて知りました。
ありがとうございます。

https://qiita.com/4geru/items/0b8a19165e5b694f5446

Flex simulator はとても便利です。Flex Messangeを活用すれば、個人開発であってもいろいろインタラクティブことができそうです。

https://developers.line.biz/flex-simulator/

## まとめ
LINE BOT - GPTの接続事例を学びました
Heroku - LINE BOTの接続　を学びました
Flex messange の活用の仕方を学びました

GPTと対話しながら、これらのことが単独で全くの無知の状態から、３日ほどで習得できる。
まさにGPTは2023年の **モノリス** そのものですね。

# 次回
引き続き　次回も学びの共有をしたいと思います。
AWS Certified DevOps Engineer - Professional (DOP-C02) に合格しました


# はじめに
2023/5/3、AWS Certified DevOps Engineer - Professional (DOP-C02)に合格しました。
本記事では、試験の勉強方法や体験について共有します。

# 前提条件
- 3ヶ月ほど前にSAPを取得しています。
- Developer/SysOpsは2年前に取得しています。
- AWSの実務経験としては3年ほどあります。ただし、メインは開発であり、ここ数ヶ月はあまり触っていません。

# 問題の傾向
SAPに比べて、開発やデプロイ、運用に関わる部分が多く出題されます。
特に以下の内容が多かったです。
- デプロイ戦略
    - ブルーグリーンデプロイ、カナリアリリースなど
    - それぞれ、どのサービスが対応しているか理解しておいた方が良いです
- バックアップ/リカバリ
    - RTO/RPO要件により、どのやり方が適切か
- 適切な設計
    - バーストやレイテンシの要求に対してどの構成が適切か
    - SAPで問われる内容と近い部分がある

# 勉強方法
## 期間と時間
実のところ、DevOps用の勉強はほとんどしていません。
SAPで勉強した内容＋WEB問題集(3,4時間ほど)を実施しました。

## 学習教材
- [AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E5%95%8F%E9%A1%8C%E9%9B%86-AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB-%E5%B1%B1%E4%B8%8B%E5%85%89%E6%B4%8B/dp/4815609063) ※
    - 2023/5/31に[第2版](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%EF%BC%86%E5%95%8F%E9%A1%8C%E9%9B%86-AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB-%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88-%EF%BC%A1%EF%BC%B7%EF%BC%B3%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E5%B1%B1%E4%B8%8B%E5%85%89%E6%B4%8B/dp/4815617929/ref=asc_df_4815617929/?tag=jpgo-22&linkCode=df0&hvadid=624450295427&hvpos=&hvnetw=g&hvrand=3008903682788112850&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9156663&hvtargid=pla-1945183960042&psc=1&th=1&psc=1)がでます
- WEB問題集 TechStock (https://techstock.jp)
- 公式模擬問題


※ 実際にはSAP受験の時に利用したものです
※ 今回利用していませんが、Developer/SysOps向けの参考書や問題集を持っている場合は見直しておくと良いです。


## 学習の進め方
### SAP試験対策
受験時点でDevOps向けの参考書/問題集は出ておらず、SAPで実施したものが全てです。
詳細は以下の記事をご参照ください。

https://qiita.com/grhg/items/d429faeb237890225124

### 試験1週間前から
TechStockの問題集を後ろから10セット(各セット7問)実施しました。
この時点で成果率は7〜8割あり、SAPよりも易しく感じたので一度受けてみることにしました。
結果としてはこれで合格しましたので、8割正解できれば挑んでみても良いと思います。

### 試験直前
前日に公式の模擬問題をやりました。 (8/10正解)

# 受験体験
SAPではテストセンターで受験しましたが、希望日に空いている所がなく、仕方なく自宅受験をしました。
結果的に合格したものの、やはりテストセンターで受験すべきだったと感じました。

- あまり自宅の環境が良くなく、集中できなかった
    - この日、たまたま周囲の雑音が多く、中止にされないかヒヤヒヤしながら受験しました
    - Professional試験は要件をきちんと理解するのが重要なので、問題が頭に入ってこないのが結構辛かったです
- 受験者が多かったのか、チェックインに時間が掛かった
    - 待ち人数が多く、予定時間の30分後にやっと受験できました
    - (遅れてもチェックインが完了していれば受験はできるので、ご安心ください)


# 試験結果
受験後3時間ほどでCredly(デジタルバッジサービス)から結果が届き、751点で辛くも合格でした！
(AWSからの通知(メール)は12時間ほど経ってから来てました)

※ いち早く結果を知りたい場合は、Credlyと連携しておくのが良さそうです。(https://aws.amazon.com/jp/certification/certification-digital-badges/)

# 感想
Professional試験だけあり難しかったですが、SAPと比べると易しく感じました。
求められる知識が知識が変わるため単純な比較はできませんが、SAPの方が問題や解答が複雑且つ長いものが多かった印象です。
難関試験の1つですが、勉強すれば必ず取れる内容なので、ぜひチャレンジしてみてください。
【DynamoDB】キャパシティユニットとは何か

## はじめに
### 概要
DynamoDBのキャパシティユニットを増やす/減らすという概念がいまいちよくわからなかったので調べてまとめました

### この記事で得られること
キャパシティユニットとは何か

## DynamoDBとは

AWSのNoSQLデータベースのサービスで、DynamoDBはAWSのマネージド(AWS側がサーバー側を管理してくれる)サービスです。

今回はそんなDynamoDBのキャパシティユニットについてのお話です。

## キャパシティユニットとは

### WCUとRCU
DynamoDBにはキャパシティユニットという読み書きできる量を表したものがあります。

WCU(ライトキャパシティユニット)は書き込みできる量です。
RCU(リードキャパシティユニット)は読み取りできる量です。

### 1キャパシティユニット＝？

キャパシティユニットが「1」というのは「1秒間に1KB以下のデータ書き込み/読み込み」ができるということです。

仮に1秒間に1.5KBのデータを書き込む場合はキャパシティユニットが2必要です。

:::note info

最小キャパシティユニットはデフォルトで1に設定されています。
これは最小の読み書きが1秒間に1回は可能であるということです。

0という値は設定できませんが、仮に0が設定出来たとすると、それは読み書きができないデータベースということになります

:::

## キャパシティモード

### オンデマンド

オンデマンドは最初にキャパシティユニットの量を決めずに、
読み書きが増えればそれに応じてキャパシティユニットの量を増減させることができます。

これをオートスケーリングといいます

### プロビジョンド

オンデマンドがオートスケーリングするのに対してプロビジョンドは最初に容量を決めます。

プロビジョンドではリザーブドキャパシティという長期間分を前払いをして安くなるというオプションがあります。

### どっちを選べばいい？

まずはオンデマンドを使用してみて、読み書きの量が安定して予測可能なレベルであれば、プロビジョンドのリザーブドキャパシティを検討するのが良いでしょう。

逆にスパイクが発生するようなシステムであればオンデマンドで良いかと思います。

## まとめ
キャパシティユニットとは読み書きの量を1KBずつに分けた単位です。

### 所感
他のサービスでもそうですが、オンデマンドで使った分だけというのはちょっと試してみよう！ができるので学習もしやすくとても素晴らしいなと感じました。
自分で学習する方法



最近はずっとSalesforceのみで遊んでいるので、ここでの事例はSalesforce　における自分で学習する方法に限らせてもらいます。

# どのように学習していくのがいいだろうか

Salesforceの場合は学習用にトレイルが準備されています。まずは基本を押さえるためにはここからスタートするのがいいと思います。

**[トレイル](https://trailhead.salesforce.com/ja/trails)は、モジュールとプロジェクトによって、最短の時間でほとんどの基礎を身に付けることができるガイド付き学習パスです。新しいスキルを手に入れるためのパーソナルな計画表として利用できます。**

私の場合は初めてSalesforceに触れてからカスタマイズされたコンポーネントを使って社内のあるシステムを置き換えるまでの時間が３か月しかなかったので実はトレイルは利用しませんでした。いきなり開発者コンソールを立ち上げて簡単なプログラムを書きながら覚えていきました。その時に参考にしたのは先人たちのサンプルコードです。ちょっとだけJavaのコードを書いていたことがあったので、割とすんなりApexのコードは理解できましたが... SOQLはSQLの知識が邪魔してかなり苦労した記憶があります。過去の経験がすべて役に立つとは限らないですね。

と、新入社員時代にシステム部門に居たことがある昭和のIT屋さんなので、ひたすらコードを書いて覚えるという方法でもなんとかなりました。おかげでこの３か月は超睡眠不足でしたけど...

この方法は参考にはならないかもしれません。ただ効率よく覚えるという方法はかなり難しいと思います。ある程度は量をこなすことで確実に習得できる部分もあるのではないかと考えます。自分がいつも迷う、間違うところが明確になるためにもある程度は量をこなす必要を感じます。まぁ、それでも全く間違った方向で量をこなしても時間だけがかかるのでよくないでしょうね。

# バリデーションルール（入力規則）や数式フィールドで使う数式を学習する

実はSalesforceを使い始めてからすぐにAuraコンポーネントで開発したので実は標準の機能をほとんど理解できていません。何かあればすぐにコーディングして解決してきました。ということで数式系もほとんど使ったことはなかったです。しかし必要にせまられて使うことになったので、学習と思ったのですが先のトレイルだけでは絶対量が不足していました。これだけでは数をこなせてないので、自信を持って使うことができませんでした。

そこで考えたのはSalesforceの質問のサイトで質問されている数式の回答を見て覚えるというやり方です。実際に困ている内容なので教育用に用意されている内容に比べて実践的です。しかしただ見ているだけでは上達しないので、実際に回答することにしました。

これらの質問はかなり多いです。また先駆者さんたちの回答も超早い。その中で鍛えてもらったおかげでかなり自信を持って数式の回答ができるレベルまでになりました。自社のニーズだけではこれほど繰り返しの実戦練習はできなかったですね。

数式は合っているか間違っているかがすぐにテストできるので、質問者さんが結果を教えてくれるのも早くでいいいです。

ということで、質問コーナーで回答することで自分の学習に使うという方法を見つけました。
これはかなり早く覚えることができます。変な回答をすると恥ずかしいですから、集中して考えることにもつながります。

# 英語のサイトで回答することで理解を深めることができます。

何故、英語のサイトなのかと言えば、困ったことに日本のグループでの質問（当然日本語のサイト）は高度なんですおそらく質問者さんも考えて、考えて本当に分からないので質問してきています。そのため私の学習用としては少々難しかったですね。また私以外の回答者さんの回答が超絶に早いために私が回答できず、勉強になりませんでした。やっぱり答えを読むだけでなく自分で探して回答しないと覚えられないです。繰り返し探すことで確実に覚えることができます。（ここでも昭和スタイルの学習方法ですね）英語のサイトの方が圧倒的に質問の数や回答者さんの数も多いこともいいと思っています。

少しだけ英語の能力もアップするのではと期待しましたが、読むのも書くのも全てWEB翻訳を使っているので全然英語力はアップしていませんね。毎日英語を見るので確実に以前よりは英語に対しての拒絶反応が増えています。正直どんどん英語が嫌いになっていくのは自分でもわかります。

質問に答えるという、現実に起こている事象に対するトラブルシューティングという実践的な訓練が無料で学べるのがこの方法のいいとことだと思います。

# 質問者さんの内容で自分も考えさせられます。

まぁ、英語が分からないので長文の質問は始めから見ません。WEB翻訳も文章量の制約があるのか長文だとどうも文章を適当に間引きしているようで、日本語訳を読んでもさっぱり意味がわかりません。また長文だと日本語訳と英文の対比がすぐにできないので避けています。

そうそう、WEB翻訳でよく理解できる質問の内容の英語はおそらく英語の質問としても簡潔で分かりやすいのではと思っています。回答でも同じです。私が尊敬している回答者さんのWEB翻訳結果は実に分かりやすいです。きっと英語の原文でもわかりやすいと思います。ということで特に質問する場合の書き方には気を使います。

自分が分からないことを人に対して分かりやすく使えるという技術も大事だなぁって思うところです。
DD-wrt で usbio を python で動かす

# 背景
dd-wrt から io を制御したかったので、usbio なるものを1000円で入手して試してみた。
WXR-1900DHP は 1300円でゲットして dd-wrt化、USB memory を挿して program (/opt)領域を作ってある。

# 結果
dd-wrt から python で制御できる。
hid と pyusb を使う方法で確認できたが、すんなりとは行かなかったので、メモしておく


# hid 版 install
- opkg で basic な環境(python3, gcc, etc... )は insatall しておく
```
opkg install autoconf automake cmake pkg-config hidapi libudev-zero libusb-1.0 libusb-compat
git clone https://github.com/libusb/libusb.git
cd libusb
cp libusb*.h /opt/include
cd ..
git clone https://github.com/trezor/cython-hidapi.git
cd cython-hidapi
git submodule update --init
python setup.py bdist
cd dist
tar xzf hidapi-0.13.1.linux-armv7l.tar.gz -C /
```
動作サンプルは
- USB-IO2.0(AKI)を使ってみました https://mokomichi70.hatenablog.com/entry/2019/11/25/225028

# pyusb 版 install
```
pip install pyusb pyusbio 
```
これで install は終わりますが、動かないので修正版 up しておきます。github の issue には上げてありますが、良く理解しているわけでないので、PR はしてないのです。

```
/opt/lib/python3.10/site-packages/pyusbio/__init__.py 
```
を↓これに入れ替えます。
 https://github.com/yukkeorg/pyusbio/files/11414034/__init__.zip

動作サンプルは
- これは、USB-IO2.0をコントロールする ためのライブラリです https://github.com/yukkeorg/pyusbio
- export PYUSBIO_LOGLEVEL=DEBUG   で debug log が出ます。

```
root@sea-urc19:/opt/home/admin# cat pytest.py
import pyusbio as usbio
usbio = usbio.USBIO()
if usbio.find_and_init():
    port0, port1 = usbio.send2read([0x01, 0x0c])
    print("{0:x}, {1:x}".format(port0, port1))
else:
    print("init error.")

root@sea-urc19:/opt/home/admin# export PYUSBIO_LOGLEVEL=DEBUG
root@sea-urc19:/opt/home/admin# python pytest.py
2023-05-07 15:15:40,727 INFO:PyUSBIO:USB-IO(0x1352, 0x121) is found.
2023-05-07 15:15:40,730 DEBUG:PyUSBIO:IN endpoint address of interface 0 : 0x81
2023-05-07 15:15:40,732 DEBUG:PyUSBIO:OUT endpoint address of interface 0 : 0x1
2023-05-07 15:15:40,734 DEBUG:PyUSBIO:wr:[1, 12]  cmd:[32, 1, 1, 2, 12]
2023-05-07 15:15:40,742 DEBUG:PyUSBIO:rd:array('B', [32, 1, 15])
1, f
```
- 補足：同様に Windows 10/cygwin64 環境でも動きました。


## usbio モジュール 
- ＵＳＢ接続デジタル入出力モジュール　ＵＳＢ－ＩＯ２．０（ＡＫＩ）
https://akizukidenshi.com/catalog/g/gM-05131/
## dd-wrt 
- Router Model:     Buffalo WXR-1900DHP
- Firmware Version: DD-WRT v3.0-r44715 std (11/03/20)
- Kernel Version:   Linux 4.4.241 #1322 SMP Mon Nov 2 06:39:27 GMT 2020 armv7l

## Bufferlo WXR-1900DHP
- wxr1900dhpにOpenWrtを入れてみたときの失敗例と成功例  https://okoya.seesaa.net/article/465149182.html
- 私は殻割り方式で、2set作成しましたwww
OrangePi5(debian)でUART通信してみた

# はじめに
- OrangePi5でUART通信するための設定についてメモ
- コマンドからUART通信する方法を少しだけメモ


# 参考文献

こちらに書いてある内容を参考にしました。
`UART`で検索をかけていけば、だいたいの操作は出てくるはず。

https://drive.google.com/drive/folders/1Bre2q0bGgXQuQlYaYDMvwstpvtHLmcgX

# 環境

- OrangePi5
- debian (Orange Pi 1.1.4 Bullseye with Linux 5.10.110-rockchip-rk3588)

# 設定

まず、orangepi-configを開く。特にパスワードを設定していないのであれば、`orangepi`がsuのパスワードとなる。

```shell
$ sudo orangepi-config
```

　`System`→`Hardware`と選択していき、`uart*-m*`をSpaceキーでチェックを入れて`<Save>`を選択する。

ちなみに、UARTとピンの関係は下記となる。
(OrangePi_5_RK3588S_User Manual_v0.7.pdfのp201参照)

|  | UART0 | UART1 | UART3 | UART4 |
|:-:|:-:|:-:|:-:|:-:|
| TX  | pin8  | pin5  | pin19  | pin18  |
| RX  | pin10  | pin3  | pin21  | pin16  |

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271381/d1430a87-ae44-41a0-ebd7-873f0ca820b0.png" width="500px">

<img src="" width="500px">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271381/8ee21c79-ddeb-fb36-ab15-72773bdb8f05.png" width="500px">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271381/46fb48de-5eac-a890-45ec-2a7b7391968f.png" width="500px">

同じ画面に戻るため、`<Back>`を選択する。するとリブートの有無を問われるため、`<Reboot>`を選択する。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271381/3990fbf2-4534-0ba7-1259-17c68e0b7d65.png" width="500px">

再起動後、下記のコマンドを入力してシリアルデバイスが存在することを確認する。ちなみに、`ttyS~`以降の番号がUARTの番号は同じ。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271381/5bc29f52-3605-13e2-59cd-664d0135b087.png" width="500px">

# 確認

orangepi5のUART0でループバック通信して確認してみる。
（pin8とpin10をジャンパで結線しただけ。）

結線したら下記のコマンドを実行する。

ちなみに、下記の記事でsu権限なしでgpioを操作するための手順を実施していた場合は、sudoが不要となる。

https://qiita.com/Inoue_Minoru/items/25e3b04ec365b511929c

```shell
$ sudo gpio serial /dev/ttyS0
```

このように、`->`のあとに同じ数字が出力されていれば設定OKとなる。
ちなみに、正しく結線できていなかったり設定ができていないと`->`のあとが空欄になったり、そもそもコマンドが実行できない。そのときは再度設定や結線を見直す必要がある。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271381/95b329ca-aab3-70bd-b344-313152a3ace1.png" width="500px">

# ちゃんとUART通信してみる

同じくループバック通信で、お互いに文字を送受信してみる。
ターミナルを2つ用意し、先に`cat`コマンドをタイプして待機状態にした後に`echo`でデータを送信する。

```shell:ターミナル1
cat /dev/ttyS0
```

```shell:ターミナル2
echo "test" > /dev/ttyS0
```

分かりづらいですが、上がターミナル2で下がターミナル1です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271381/ff76f3e1-ae36-57a0-895f-1890c331a56f.png" width="500px">

ちゃんと通信できれいれば、ターミナル2側でechoした文字列がターミナル1側で表示されているはず。

ちなみに通信時のボーレートは下記コマンドで確認可能

```shell
$ stty -F /dev/ttyS0
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271381/004995c0-a276-6cf6-2b14-a01cf35cd94a.png" width="500px">

# おわりに

- orangepi-config便利だなぁ...
SharePointリストに計算列をつくる

**使用例**

既存列を参照し数式を用いて所望のデータを得たい場合などで使う。
今回は2つの列のテキストを合成して新規に1つの列に表示する例を記す。
「PartNumber」と「Rev」のテキストをつなげて「KeyNumber」のテキストを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/215a3abd-e771-ea71-d1c2-92019e0a22ff.png)

**設定方法**

SharePointサイトの対象リストを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/1d209ee8-9efc-6b44-00a5-6caa5c771124.png)

設定マークからリストの設定を押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/5bc7adab-5a51-9510-f9a2-c687f9baf620.png)

列の作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/639e740b-4d6f-3e1a-c2aa-789d985c708d.png)

列名、数式、データの種類を設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/a5bc3fac-e1c6-c8ac-aa2c-1d976b5bdeb7.png)

作業完了。
【Intellij】「コミット」が効かなくなった際の解決方法

## 結論
プラグインのアップデートと共に再起動をしたら直りました。

## 確認方法
①「Preferences...」を押下
![20230507-135356.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/08f05220-e9d1-fb98-34f2-282c74119148.png)

②「プラグイン」を押下
![20230507-135623.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/6ca9bbe7-1a7f-fd04-61be-5702ccfc2807.png)

ここで、アップデートが必要な対象のプラグインをクリックし、同時に再起動することでこれまで通りファイルの変更をGitを通してコミット出来る様になりました。

## まとめ
今回、いつもの様にコミットしようとしたところ「ファイルの変更なし」といった旨の反応があり、またインストールされているはずの「Git」がされていない事になっていたり、身に覚えのない内容が画面に表示されたりと少々焦りました。地味な内容ですが、どこかのタイミングで対応することになると思うので、もし同じ現象に立ち会った方は是非参考にしていただければ幸いです。
【学習記録】代表的なWebアプリの攻撃手法と対策について

今回の連休でWebアプリケーションを開発するにあたり、留意する必要のあるセキュリティ対策について学習したため、Webアプリの攻撃手法と対策について学んだことを記録する。

# SQLインジェクション
近年よく利用されるものの一つ。これはWebフォームなどの入力インターフェースを利用してデータベースに発行されるSQLを開発者が意図しない形に変更することで、情報の改ざんや不正取得を行う方法。
SQLインジェクションによって第三者による不正なログイン、閲覧権限のない情報へのアクセス、データベースの不正改ざんや削除といった攻撃を許すことになる。

## 対策について
最も有効な方法は入力値へのチェックを行うこと。
パスワードの入力において半角英数字のみを受け付けるようにすれば、SQLインジェクションで利用される「']
の混入を防げられる。

### プリペアード・ステートメント
もう一つの方法として、プリペアード・ステートメントがあげられる。
文字列連結でSQLを組みたてるのではなく、WHERE句などを条件によって変化する部分をプレースホルダーとして登録したSQLを事前に用意しておき、あとからパラメータをわりふる方法だ。

# XSS(クロスサイトスクリプティング)
クロスサイトスクリプティングはSQLインジェクションと同じように、HTMLの中に悪意のある動作をするJavaScriptを埋め込み、攻撃する手法である。
クッキーの盗難やページの改ざんなどが実行される恐れがある。
その結果、不正ログインや個人情報の流出といった問題につながる恐れがある。

## 対策について
対策としては、HTMLへ文字列を出力する際に「サニタイジング」と呼ばれる処理が有効である。
これはHTMLに埋め込むと元のHTMLの構造を変更したり、破壊する文字列を、削除したり無害な文字列に変換したりする処理のことをいう。
モデル駆動アプリでアイテムをソートする (複数条件でのソート)

**複数の列に優先順をつけてソートする方法**

アプリ一覧の3点リーダから編集に入る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/7d18eaa8-41b7-4569-d2e5-f6c8ef1688ab.png)

テーブルビューリスト右側の鉛筆マークからビューの編集に入る (カーソルを近づけるとマークが表示される)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/6b51740e-fce7-e13d-1df2-f0aa01027296.png)

テーブルビュー右側の編集エリアにある「並び替え基準」に条件を追加してソートする。
保存して公開。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289762/cba9d3b2-18ee-bba0-d719-2e41f2463063.png)


作業完了。
湘赣游十二首

湘赣游十二首
2021年10月

 一、再登衡岳

登高莫论君行早，进山客车次第开。
老妇挑橘拾级上，美眉赤脚下山来。
乱石堆叠寻诗路，流云遮蔽观景台。
天风起处松涛怒，石径直上游人衰。
浓雾穿林松挂雨，薄衫透凉汗已白。
降龙岩前思旧友，邺侯书院慕奇才。
道观古刹香火盛，各怀心愿与神猜。
青山依旧多妩媚，功名富贵俱尘埃。

二、宿武功山下

山舍秋凉客梦迷，虫鸣寒露晓星稀。
孤灯暗夜人寂寥，和衣起坐听晨鸡。

三、云雾天登武功山

密云翻滚锁峰峦，微雨送我到山前。
满眼翠竹真秀色，穿云索道似飞仙。
铁网围崖防岩裂，青松抱石悬亭边。
栈桥飞渡悬崖险，云梯萦纡攀登难。
露营少年结伴归，相问嘱我御风寒。
道边野菊映蒿草，不见春来红杜鹃。
金顶疾风吹彩帐，求嗣坛牌写传言。
云雾茫茫遮望眼，江西绝顶藏容颜。
惆怅下山走险谷，沟深林密听流泉。
飞石滑坠百丈壑，流水冲刷五彩岩。
急行直落九千阶，始得静谧一清潭。
已出雄峰脚发软，未见真颜心不甘。
须得晴明好风日，再上武功览众山。

四、山行

佳境武功深处藏，徐行不负好秋光。
山满翠竹风吹浪，村陈喜宴人满堂。
路绕奇峰飘玉带，景傍轻车走画廊。
行止不觉已百里，明月山前到温汤。

五、温汤古井

古井幽幽锁雕栏，不见村民围泡喧。
忍看匾牌争歌颂，独将冷眼向热泉。
天赐康养一小镇，人来沪浙多方言。
诚愿青山长眷顾，绵绵硒水再千年。

六、游明月山

独有仙山邀明月，奈何俗客逢雨天。
林中路赏诗中月，云上雾遮方外山。
天池寂寂淹枯树，岩洞幽幽淌清泉。
泉出洞口作飞瀑，人过天桥似登仙。
百丈绝壁风中立，千米栈道崖上悬。
凌云移步惊心魄，扶栏俯瞰凋朱颜。
怪石有型任想象，奇松作态堪爱怜。
垂枝尽展欲捞月，直干挺拔岂忧天。
峡谷生风驱水汽，行云飘雾掩峰峦。
青苔水饱树滴雨，山岩湿漉如流汗。
细水溅珠迎风舞，忽上忽下忽停悬。
莫怨层云阻远眺，空山烟雨献奇观。
游玩偏爱游人少，红叶稀疏红果繁。
归途停车近古寺，农家菜美鱼羹鲜。

七、再游庐山

名山自古入诗行，匡庐仙风更煌煌。
九天飞瀑诗仙画，天生仙洞吕祖房。
皇帝碑亭记周颠，司马花径通草堂。
阳明石刻品进退，牯岭别墅说兴亡。
天池寺前水长碧，含鄱口上云飞扬。
太乙愁云暗山色，鄱阳船影泊湖光。
崖飞流泉三叠壮，雾锁仙峰五老藏。
如琴秀色醉心脾，芦林波光照梦乡。
宝树参天黄龙寺，大儒垂名白鹿堂。
遍山水木皆风景，随处亭台有文章。
来时晴空次日雨，重阳浓雾白茫茫。
山中风雨频变幻，人事代谢总沧桑。
难见庐山真面目，只缘来去太匆忙。

八、访石钟山

江湖两色此山分，鄱阳水清江水浑。
顽石千年响钟磬，苏子三顾传美文。
由来水运咽喉地，曾经战场生死门。
曾帅投湖彭郎猛，湘勇血拼太平军。
硝烟散去风波静，立祠从此祭亡魂。
百代登临多名士，无端凭栏思古人。
舟船往复无穷尽，浪打石钟或可闻。

九、观浔阳楼楹联

醉题反诗知此楼，英雄聚首闹江州。
水浒传说庄周梦，浩浩长江送春秋。

十、石城程村

程村地偏远，美名早流传。
白墙衬黑瓦，写意在青山。
深秋枫叶红，晨光透轻烟。
飘飘似仙境，人间知婺源。
古树参天立，风雨几百年。
乡亲互问候，井水挑在肩。
菜地傍老屋，鸡鸣篱笆间。
青石铺小路，童叟尽悠闲。
田园堪入画，依稀见桃源。

十一、江湾晨景

昨夜江边卧，晨光照青山。
帘卷溪头水，窗含岭上烟。
木桥跨两岸，白鹭掠浅滩。
浣女勤劳作，捣衣清溪边。
路长关山远，且向徽州眠。

十二、篁岭见闻

婺源网红地，篁岭看晒秋。
屋舍山坡建，村景展画轴。
万物皆可晒，篾筐庆丰收。
红椒配皇菊，玉米傍黄豆。
色彩极鲜艳，造型甚讲究。
古树逾千年，沧桑仍挺秀。
高处望对山，梯田如梳头。
天街人如织，小店各驻留。
老宅都开放，游客随便瞅。
举头看雕梁，抬脚闯绣楼。
可做走马观，村巷半日游。
民居若体验，千金买一宿。
不贪一夜情，惯为稻粱谋。
【vim】 NERDTreeのセットアップ

# 0. はじめに
NERDTreeは、vim上で複数のファイルを切り替えながらの編集を可能にするプラグインである。
本稿では、NERDTreeのセットアップ手順を紹介する。

# 1. セットアップ
## 1.1 vimrcの編集
.vimrcを編集する。
最終行(execute pathogen#infect())がNERDTreeのセットアップにおいて必須である。
それ以外の設定は、利用頻度が高いと思われる設定値である。
```vim ~/.vimrc
"view number of lines
set number
"incremental search
set incsearch
"high light
set hlsearch
set ignorecase
set smartcase
set laststatus=2
set autoindent
set showcmd
"set wildmenu
set wildmenu wildmode=list:full
set ruler
set tabstop=4
set shiftwidth=4
set noexpandtab
set softtabstop=0
"set showmatch

"hi Comment ctermfg=3
set softtabstop =4
set shiftwidth  =4

set listchars=tab:^\ ,trail:~
syntax on
"auto complete
set completeopt=menuone
let g:rsenseUseOmniFunc = 1

"colorscheme molokai
"colorscheme pablo
"colorscheme elflord
"colorscheme torte
set t_Co=256

inoremap <C-e> <Esc>$
inoremap <C-a> <Esc>^
noremap <C-e> <Esc>$
noremap <C-a> <Esc>^

" necessary setting for NERDTree
execute pathogen#infect()
```

## 1.2 NERDTreeのダウンロード
以下を順に実行する。
```bash
mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
```
```
cd ~/.vim/bundle && \
git clone https://github.com/scrooloose/nerdtree.git
```
# 2. 動作確認
以下のように、ファイルを指定せずにvimを実行し、
```
vim
```
vim上で":NERDTree"とコマンドを実行すると、NERDTreeを用いて複数ファイルを切り替えながらの編集が可能になる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2756450/28153ce9-3dae-9c50-06ff-4aeb4470d6ad.png)

# 3. まとめ
vim上で複数のファイルを切り替えながらの編集を可能にするNERDTreeのセットアップ手順を紹介した。
Github Copilotの使用感を5秒で理解する

Githubのサービスの一つであるCopilotを実際に使って見たので動画にまとめてみました。

この機能は、プラグインをインストールした状態でVSCodeでコーディングをすると、コメントを書くだけでそのコメントにあったコードを提案してくれるという魔法の様な機能です。

裏ではChatGptで使われているgpt3のcodexがが使われているようですが、この性能は本当にすごいです…


![Copilot.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77722/c44bb610-1b73-4566-ea84-3eadd8559a6a.gif)

このデモでは、Javascriptを使って渡された値を２倍にして返す関数を作って見た例ですが、これを作るのにタイプしたのは最初のコメントのみです。
（このコメントも一部自動補完が効いている・・）

コメント入力後は、薄い文字でコードが提示されていくので、tabキーを押してコードを確定させるだけで欲しいコードができました。

エラー処理についてもコメントで指定しているので、きちんと処理を追加してくれているのがわかります。

実際に使ってみるのがこの凄さを理解する一番の手段だとは思いますが、この動画を見て使って見た気になっていただければ嬉しいです





## 参考：

https://github.com/features/copilot

https://qiita.com/shizen-shin/items/5fb258da165235722e4c
obsidianを使う上で、複数のデバイスのファイル共有・同期を行う方法

- 自分の場合の要件
    - 無料だと望ましい
    - 10秒程度の同期の遅延は許容できるがその程度であってほしい
    - windows, mac, android で動作してほしい

## 選択肢

- 自分が調べた限りいくつかの選択肢がありました
    - obsidian-sync
        - 公式
        - 有料
        - windows, mac, iphone, android に対応
    - obsidian-git
        - コミュニティプラグイン
        - 無料
        - android で動作が不安定(自分の場合だけかも)
    - google drive や icloud
        - obsidianとは直接関係ないツール
        - 値段: 要調査
        - osに依存する
    - **syncthing**
        - obsidianとは直接関係ないツール
        - 無料
        - windows, mac, android + その他たくさんに対応

## 結論

- syncthingを使うとよい

## ちなみに

- 日本語でobsidian & syncthingをお勧めしている記事がぱっと見つからなかったので書きました
- なので適当です(申し訳ない)
【Git】リモートのブランチを削除する方法

以下で削除できる

```
git push origin --delete ブランチ名
```

### 参考
* [Git ブランチを削除する方法 (ローカル、リモート)](https://www.freecodecamp.org/japanese/news/how-to-delete-a-git-branch-both-locally-and-remotely/)
イルカアプリ作ったらトロイの木馬判定されました:原因と対策


# 概要
先日、私が個人開発していたアプリaprecall（以下のGIF参照） (開発中止したので現在は非公開)をリリースしたところ、Windowsからマルウェアと誤判定され、一時的にダウンロードできなくなりました。ダウンロードしていただいた方にはご迷惑をおかけしました🙇 

![Untitled (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199662/2042af2e-c62a-3abb-4e58-46482dcc9390.gif)

# 現象
最初のユーザーはダウンロード、インストール、実行が可能でしたが、次のユーザーからはインストールできず、トロイの木馬と警告が表示されるようになりました（画像1参照）。さらに次のユーザーはダウンロードした瞬間にChromeがウィルスを検出し、ダウンロードファイルが即座に削除されました。Windowsのネットワークで情報が共有されているため、現象が発覚するまでに時間差がありました。

# 原因
Microsoft Defenderはマルウェアとの類似度を判断基準としているため、マルウェアに似た処理があれば怪しいと判断されることがあります。例えば、ウィンドウがない、ウィンドウが極小、ターミナルがない、printではなくloggerを使用している、pyinstallerを使用しているなど、悪意のない要素も評価対象になることがあります。一昨日まで友人数名にインストーラーを試してもらった時は問題ありませんでしたが、ターミナルを削除しウィンドウを極小にしたことがウィルス判定を受ける要因となりました。

Go言語でも、ファイル書き込み時のメモリの扱い方で判定を受ける[例](https://zenn.dev/akb428/articles/a7fdcd2614e366)があります。

# 対策
- [pyinstallerのビルドをやり直す](https://qiita.com/nobody_gonbe/items/5ffdd1a767c67256032e)
- ターミナルを再表示させる
- Microsoftに偽陽性として[申請し解除を求める](https://www.clear-code.com/blog/2019/3/18.html)

# 今後の対策
- ウイルス判定サイト [virustotal](https://www.virustotal.com/gui/rl) などで事前確認を行う
- ダウンロード、インストール、実行のプロセスを時間を置いて複数台でテストする
- 直前で機能追加をせず、安定した状態でリリースする

# その他
Chromeの警告やWindowsでの不明な発行元の表示を消すには、デジタル署名を行い信頼性が証明されたソフトが多くダウンロードされる必要があります。詳しくは[個人ソフト作者にとってのデジタル署名とは？](https://www.officedaytime.com/tips/codesigning.html)を参照してください。


# 参考サイト
- https://qiita.com/nobody_gonbe/items/5ffdd1a767c67256032e
- https://zenn.dev/akb428/articles/a7fdcd2614e366
- https://www.clear-code.com/blog/2019/3/18.html
Splunk: Splunkカスタムコマンド入門

###### 実施環境

CentOS 8-Stream

Splunk Free 8.2.2

Python 3.7.10

splunk-sdk-python 1.7.3

###### 目次

Splunkにおけるカスタムコマンドの基本的な作り方をまとめました。

* [とりあえず作ってみる(2023/5/7)](https://qiita.com/frozencatpisces/items/ee73ec1bec5bd7db8b03)

* [イベントを入力してみる(2023/5/14)](https://qiita.com/frozencatpisces/items/bcf1d5e8b14ab1eaf16b)

* [様々な機能を追加してみる1(2023/5/21)](https://qiita.com/frozencatpisces/items/58e14a4ad9bcf50fcccf)

* [様々な機能を追加してみる2(2023/5/28)](https://qiita.com/frozencatpisces/items/082d99b43965f923409c)
Raspberry Pi 3にWindows 10 IoT Coreをインストールする

### はじめに

今さらですが、使っていない古いRaspberry Piが家にあったので、Windows IoT Coreをインストールして活用方法を探ります。まずはOSをインストールについてまとめます。

Windows 10 IoTのRaspberry Pi 3B+の[Microsoft社のサポート状況](https://learn.microsoft.com/Ja-JP/windows/iot-core/troubleshooting#raspberry-pi-3b-booting-issues)はテクニカルプレビューのままのようです。Raspberry Pi4のサポートに関する情報は残念ながら見つけることができませんでした。いくつかの機能は制限されているようなので検証目的でのご利用が推奨されます。

### SDカードにOSイメージをインストールする

SDカードをローカルコンピュータにセットし、[こちら](https://learn.microsoft.com/Ja-JP/windows/iot-core/downloads)からWindows 10 IoT Core ダッシュボードをダウンロードします。

ダウンロードしたダッシュボードアプリを起動し、イメージをSDカードにセットアップします。
![win10iotinstall.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322105/93c8e7c2-44d9-11c6-00f6-4393676b0b85.png)

### Raspberry Piを起動する

OSイメージをインストールしたSDカードをRaspberry Piにセットし、電源を入れるとWindows 10 IoT Coreが起動します。
![Screenshot_2023-05-06_19-48-11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322105/89d3acf0-e56d-015b-81e6-ad6f90b07e17.jpeg)

### Windowsデバイスポータル

Windowsデバイスポータルで設定を変更したり、サンプルアプリケーションを動かしたりすることができました。[Windows IoTリモートディスプレイ](https://learn.microsoft.com/ja-jp/windows/iot-core/manage-your-device/remotedisplay)を使いたかったのですが、Raspberry Piには対応していないようでうまく動きませんでした。
![DevicePortal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322105/98cd0cf8-069b-9ea9-3528-d855f21a7a24.png)

### まとめ

Raspberry Pi 3にWindows 10 IoT Coreをインストールしました。AKS Edge Essentialsが動くと面白いなと思って始めたのですが、そもそも[Windows IoT Enterpriseでないと要件を満たしていないよう](https://learn.microsoft.com/en-us/azure/aks/hybrid/aks-edge-howto-setup-machine)ですね。残念！
Vim 9.0 patchダイジェスト (2023/04)

[Vim](http://www.vim.org/)のリリースされた[patch](https://github.com/vim/vim/commits/master)の説明です。
([9.0.1434](https://github.com/vim/vim/commit/39c9ec16ea7ef13c5d783481542ee9aa6c05282c) ～ [9.0.1503](https://github.com/vim/vim/commit/2dcfe9ae1df61e1249520ed435dd8cf60e157103))
**新機能、大幅な仕様変更には、:four_leaf_clover:が付いています。**

* [9.0.1501](https://github.com/vim/vim/commit/3ef2e41128bbe372f4e4535429ffa4770f572623): `:catch`ブロック内のネストした`:try`および`:throw`がクラッシュする件を修正しました。
* [9.0.1485](https://github.com/vim/vim/commits/master?after=048d9d25214049dfde04c468c14bd1708fb692b8+34&branch=master&qualified_name=refs%2Fheads%2Fmaster): :four_leaf_clover:`strutf16len()`と`utf16idx()`を追加しました。`byteidx()`, `byteidxcomp()` および `charidx()` に引数{utf16}を追加しました。文字コード UTF-16としてのインデックスや長さを返します。(関連patch: [patch 9.0.1522](https://github.com/vim/vim/commit/e4098457ab9c94225b1b0e3c5e06b82b75587971), [9.0.1629](https://github.com/vim/vim/commit/95707037afa1aeae4f3494dc623a721ceed7fc4e))
* [runtimeファイル更新](https://github.com/vim/vim/commit/71badf9547e8f89571b9a095183671cbb333d528): [Todo](https://github.com/vim/vim/commit/71badf9547e8f89571b9a095183671cbb333d528#diff-fb7eed53e3f2993f9d82c748206eaca82fd1d054a417c6de477bb54373d85643)更新。helpファイル更新。他。
* [9.0.1477](https://github.com/vim/vim/commit/b67ba03d3ef2e6c5f207d508e85fc6906f938028): 破損したswapファイルからリカバーするとクラッシュする件を修正しました。
* [9.0.1474](https://github.com/vim/vim/commit/9be736f2eb7b3474246d644d3defe6fd126b5b18): :alien:CIのUbuntuおよびツールのバージョンを上げました。(Ubuntu: 20.04→22.04)
* [9.0.1466](https://github.com/vim/vim/commit/61378a15425553cec1ec15f590e70ca50c7c34a8): Vim9: クラスメソッドの引数名がオブジェクトメンバー名と同名だとエラーになる件を修正しました。
* [9.0.1463](https://github.com/vim/vim/commit/4c42c7eef43ff0f58fa574f7a900c8a3313f372e): テキストプロパティのtruncate文字 '...' (U+2026 HORIZONTAL ELLIPSIS)が文字コードutf-8かつセル幅1固定でハードコードされている件を修正しました。
* [9.0.1458](https://github.com/vim/vim/commit/a77670726e3706973adffc2b118f4576e1f58ea0): 長いファイル名を展開するとバッファオーバーフローが発生する件を修正しました。
* [9.0.1444](https://github.com/vim/vim/commit/ac6cd31afcbdd08bfa92ca33f7d4ce5773ba4353): `setcmdline()`にNULLを渡すとクラッシュする件を修正しました。
* [9.0.1440](https://github.com/vim/vim/commit/23a971da506249fc8388f06cd5c011b83406ac5c): rvim: `:diffpatch`を通してシェルを実行出来てしまう件を修正しました。

---
#### 凡例

|表記|意味|
|:------|:------|
|:four_leaf_clover:|新機能、大幅な仕様変更|
|:alien:|Vim開発者向けの追加、変更|
|`'hoge'`|オプション (`:h options`参照)|
|`:hoge`|Exコマンド (`:h :index`参照)|
|`hoge()`|組み込み関数 (`:h functions`参照)|
|`v:hoge`|Vim定義済変数 (`:h v:`参照)|
|`+hoge`|feature (`:h +feature-list`参照)|

---
#### 方針
[こちら](http://qiita.com/h_east/items/23cd0d10932505072e6b#%E6%96%B9%E9%87%9D)を参照。
田间雅集

田间雅集

一

早岁哪知股市艰，
大A北望气如山。
吸筹出货庄家计，
追涨杀跌散户欢。
园中韭菜空自许，
账上资金已用完。
忍痛一割就完事，
千金散尽人安全。

二

耕罢辞夕阳，
深宅迎春香。
瓶中桃花水，
锅里野菜汤。

三

寻欢作乐垃圾堆，
当家遗洒一地灰。
主席打扫樱花落，
仿佛菜园蝴蝶飞。

四

黑发三千根，
长期忘脑后。
前线不太妙，
调兵来相救。
主席有刘海，
当家要装修。
发多见生气，
冤家好对头。

五

昨日去农村，
归来直犯晕。
田间耕地者，
都是城里人。

六

花傍多摩川，
楼望富士山。
人行杨柳岸，
水照碧云天。

七、萝卜花源记

日令和中，河南人出门买菜。缘川骑行，忘路之远近。忽逢萝卜林，沿岸数百步，中无杂蔬，芳草鲜美，落英缤纷。豫人甚异之，复前行，欲购萝卜。

林尽水源，便至一楼，楼有小门，彷佛若有光，便停车从门入。初极狭，才通人，复行数十步，豁然开朗。厅堂宽阔，商铺俨然，有摊位柜台排挡之属。过道纵横，声乐相闻。其中往来商贩，男女衣着，悉数workman。黄发垂髫，并怡然自乐。

见豫人，乃大喜，问所求购，具答之。便邀逛摊，纷呈瓜果试吃。场中闻有客来，咸来推销。自云先世奉秦王令，随徐福乘船来此绝境，不复出焉，遂与外人隔绝。问今是何日，乃不知曜日，无论水火。豫人一一为具言所闻，皆欢喜。余人各复延至其摊，皆奉酒水。停半日，辞去。此中人语云：“欢迎下次光临。”

既出，得单车，便扶向路，处处志之。及家中，诣当家的说如此。当家的即遣三宝随其往，寻向所志，遂迷，不复得路。

东京杨子驹，高尚士也，闻之，欣然规往。未果，血压高，领导不让乱跑，后遂无问津者。

八

三月春深风怒号，
卷我头上三重毛。
毛飞直往江里飘，
出游兴致全打消。
东倒西歪滚回家，
怒吃一个大西瓜。
西瓜吃完不解恨，
再煮米饭又吃虾。

九

唧唧复唧唧，
主席当户吃。
听见碗筷声，
又闻喝果汁。
问女何所喝，
问女何所吃。
女亦没吃馍，
女亦没喝酒。
今天去市场，
主席大采购。
口袋十二个，
个个圆溜溜。
当家爱吃鱼，
三宝要吃肉。
和牛买十斤，
活鱼来五篓。

十

主席晚饭很丰富，
更斟酌，酒一壶。
山珍海味配时蔬，
京东肉饼，韭菜饺子，
夜来香满屋。

心心悠悠和三宝，
笑语盈盈暗香去。
众里寻他千百度，
蓦然回首，那人却在，
居室角落处。（犄角旮旯处）

十一

股市今天涨锂电，
我辈如何能预见。
人工智能在熄火，
守着医药等兑现。

十二

中文传媒昨涨停，
今日跌停你真行。
前天卖飞还遗憾，
今天看戏暗高兴。

十三

豌豆生东洋，
春来摘几颗。
愿它多结果，
此物下饭多。

十四

力拔苗兮气不歇，
时不利兮豆不接。
豆不接兮可奈何，
蒜兮莓兮奈若何？

十五

辛苦早起睡眼沉，
欲求笑话问小冰。
何处传来猪叫唤？
八戒无缘做民警。
主席厅堂勤照料，
领导凡事总关情。
欣闻贷款已批准，
东风助力好经营。

十六、遥送徐利民返日本

人生几何半消磨，
东海往来似渡河。
家人两地常牵挂，
乡愁一缕细斟酌。
孤身自保身康健，
万事唯求心快活。
他岁如得了俗事，
相约结伴游中国。

十七、四月十六日北京同学会

遥闻六君子，
聚会四月中。
小陈对大董，
颖黄对云红，
巧选双色球，
力张千钧弓，
笑谈新鲜事，
喜接故旧风。
何事惊慌茶正绿，
天道从容春已浓。

十八

装备是条狗，
急急前边遛。
斌总还未动，
粮草备足够。
跑鞋早到位，
伙伴人已瘦。
同在身上长，
不忍抛肥肉。

十九

涩涩仙毫淡淡香，
汉中山岭有茶庄。
无端料想周飞人，
木耳餐前忆宁强。

二十

淄博烧烤当街熟，
海内游人竞传呼。
和蔼司机迎远客，
招摇悍马过齐都。
越臣大隐从商贾，
吴客流连不思鲈。
妙计轻施谁筹划，
太公门下有高徒。

二十一

佳节劳动日，
伉俪田间忙。
主席去弘农，
当家来扶桑。
叶下留红莓，
枝头葚绿张。
三宝已长大，
又育满地秧。

二十二

吴老梦仍在，房产久坐拥。
德高孚众望，才多做两工。
鸿飞东南亚，何惧西北风。
吉人自天相，潮头长称雄。

二十三

浪漫马拉松，
妙哉双双飞。
速速去报名，
早早见刚翠。
君子重礼仪，
女伴莫强追。
万一有差错，
卢美会来陪。

二十四

草莓心头好，
馅饼胃中咸。-魏忠贤
萝卜或去病，-霍去病
韭菜太可怜。

二十五

听说徐庶要来投，
刘备欢喜上三楼。
悬得被子阳光下，玄德
采摘鲜果摆案头。

二十六

吴老从来很慈祥，
星洲地产沁州黄。
交流三句说吃饭，
饮食正是老本行。

二十七

徐自故乡来，
东京做知事。
来日上班前，
零钱够花未？

二十八

白云朵朵蓝天晴，
铁塔巍巍菜地青。
邻居相见不相识，
蒙面客对包头人。