OmniAICreator/Qiita-1.07M huggingface dataset:
colaboratryでBigQueryを使う関数

# 1.はじめに
* colaborarotyでBigQueryを多用してますが、毎回「あれ？どうやって書くんだっけ」を繰り返してるので、このGoogleの記事も参照にメモを作成。


#2. 式
* ポイントはmax_rowsとchankを指定することで、レコードが多くてもバッチとして取り出して都度処理を行える点。
* LLMでテキストをembedするときなどに重宝する。
* pandasなどで後工程の処理をする際に全部一気に入れるとクラッシュするのを防げる。

```python
#@title 最初１回実行
from google.colab import auth
auth.authenticate_user()


from typing import Any, Generator
import pandas as pd


from google.cloud import bigquery
PROJECT_NAME = "******"
client = bigquery.Client(PROJECT_NAME)


QUERY_TEMPLATE = """
SELECT publication_number,title ,top_terms,url,embedding_v1
 FROM `{PROJECT_NAME}.{DATASET_NAME}.{TABLE_NAME}`
 WHERE ****
LIMIT {limit} OFFSET {offset};
"""


#公式にあったのを流用させてもらう。大きなデータでも細かくとれる
def query_bigquery_chunks(
    max_rows: int, rows_per_chunk: int, start_chunk: int = 0
) -> Generator[pd.DataFrame, Any, None]:
    for offset in range(start_chunk, max_rows, rows_per_chunk):
        query = QUERY_TEMPLATE.format(limit=rows_per_chunk, offset=offset)
        query_job = client.query(query)
        rows = query_job.result()
        df = rows.to_dataframe()
        #df["title_with_body"] = df.title + "\n" + df.body
        yield df

#max_rowsとchankでバッチを調整可能
df = next(query_bigquery_chunks(max_rows=100, rows_per_chunk=10))

```
cscの作法 その405

# 概要
cscの作法、調べてみた。
練習問題、やってみた。

# 練習問題
ffmpegのimage2pipeを使え。


# サンプルコード

```
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;

namespace App
{
	class Program {
		public static void Video(int bitrate, int fps, string outputfilename) {
			Process proc = new Process();
			proc.StartInfo.FileName = @"ffmpeg.exe";
			proc.StartInfo.Arguments = String.Format("-f image2pipe -i pipe:.bmp -pix_fmt yuv420p -maxrate {0}k -r {1} -an -y {2}", bitrate, fps, outputfilename);
			proc.StartInfo.UseShellExecute = false;
			proc.StartInfo.RedirectStandardInput = true;
			proc.StartInfo.RedirectStandardOutput = true;
			proc.Start();
			for (int i = 0; i < 30; i++)
			{
				using (MemoryStream ms = new MemoryStream())
				{
					using (Image img = Image.FromFile(@"1.png"))
					{
						img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
						ms.WriteTo(proc.StandardInput.BaseStream);
					}
				}
			}
		}
		static void Main(string[] args) {
			Video(5000, 10, "ff9.mp4");
		}
	}
}



```

以上。
第2回sisaku{CTF}

第2回のsisaku{CTF} ではpwnableジャンルから出題します。想定難易度はeasyです。

プログラムが脆弱な場合コードを注入することが可能な場合があります。我々が注入するコードは通常「シェルコード」と呼ばれます。プロセスにシェルコードを注入した後、それにジャンプして実行をできます。一般的には、`/bin/sh`を呼び出すことが望ましいとされています。

```c
#include <stdio.h>
#include <string.h>

int main() {
    char buffer1[128];

    printf("The buffer is located at: %p\n", buffer1);

    gets(buffer1);
}
```

脆弱性がある上のコードのExploitを書くことで攻撃を成立させてシェルを奪う＝interactive modeにスイッチしてください。

flag 提出フォーム

https://docs.google.com/forms/d/1JQdYC4azQ_Tcfkm4C9X6kGnCUBoe9h2e_oWAyhow9Q0/edit
【Rails】投稿のソート機能（kaminari)

投稿の表示順を変えるソート機能を実装したのでまとめておきます。

完成するとこんな感じです。
[![Image from Gyazo](https://i.gyazo.com/c68701c41d8fa158beb4b963a2d9316a.gif)](https://gyazo.com/c68701c41d8fa158beb4b963a2d9316a)

# kaminariをインストール
gemファイルに記載しbundle install
```
gem 'kaminari'
```

# モデル
```ruby
  scope :latest, -> {order(created_at: :desc)} #新しい順
  scope :old, -> {order(created_at: :asc)}　　#古い順
  scope :random, -> { order('RAND()') } #ランダム
```

# コントローラー
```ruby
def index
　　@posts = Post.all
  if params[:latest]
    @posts = Post.latest.page(params[:page]).per(1)
  elsif params[:old].present?
    @posts=Post.old.page(params[:page]).per(1)
  elsif params[:random].present?
    @posts = Post.random.page(params[:page]).per(1)
  else
    @posts = Post.all.page(params[:page]).per(1)
  end
end
```

# ビュー
```ruby
        <div class="sort">
        <%= link_to '新しい順', posts_path(latest: "true") %>
        |
        <%= link_to '古い順', posts_path(old: "true") %>
        |
        <%= link_to 'ランダム', posts_path(random: "true") %>
        </div>
```
MAUI プログラミング

https://forest.watch.impress.co.jp/docs/news/1516322.html

■ Visual Studio Code
・拡張機能「.NET MAUI」をインストール。

■ .NET
・.NET 7 をインストール。

https://dotnet.microsoft.com/ja-jp/download

・dotnet コマンドでMAUIの環境をインストール。
dotnet workload install maui

■ MAUIプロジェクト作成
VSCodeコマンドパレット＞.NET:新しいプロジェクト...＞.NET MAUI App
ChatGPT Code Interpreterで、できること・できないこと

## 背景・目的

+ Code Interpreterで何ができるのか？を調べて活用方法について考察したい

## できること

+ ユーザー
    + 自然言語の入力
    + ファイルのアップロード
+ システム
    + Pythonの実行
    + 自然言語の解釈
    + Pythonの実行結果の解釈

## できないこと

+ インターネットアクセス
+ python以外の言語を使った処理(shellscriptとか)
+ 学習しないように設定して使う（2023/07/15時点で、chat history & trainingをOFFの状態で使えない)



## Pythonの実行環境について

+ CPUコア数: 16
    + `psutil.cpu_count()`
+ メモリ: 60GBぐらい
    + `psutil.virtual_memory().available`
+ ディスク: 130GBぐらい
    + `psutil.disk_usage('/').total`

## プリインストールされているPythonライブラリ

```python
import pkg_resources

installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
   for i in installed_packages])

installed_packages_list
```

上記の結果が343件。面白そうなもの・使えそうなものをピックアップしてみる

+ pandas: 行列データ処理
+ scikit-learn,keras,xgboost: 機械学習
+ bokeh,soaborn,matplotlib,plotly,plotnine: グラフ描画
+ gensim,spacy,nltk: 自然言語処理
+ geopy,folium,shapely,pyshp,pyproj: 位置情報処理
+ scikit-image,svglib,opencv-python,pillow: 画像処理
+ pytesseract: 画像 -> テキスト(OCR)
+ soundfile,audioread,pyaudio,librosa: 音声処理
+ speechrecognition,pyttsx3: テキスト <-> 音声
+ prcode: QRコード
+ pyyaml,json5,toml,xml-python,lxml: yaml,jsonなどシリアライズ処理
+ xlsxwriter,odfpy,openpyxl: エクセルファイル,OpenDocument
+ pypdf2,pdfkit,pdf2image,tabula: PDF処理
+ beautifulsoup4: HTMLの解析
+ jinja2,flask,fastapi,starlette: Webフレームワーク
+ faker: ダミーデータ作成
+ python-pptx: パワーポイント処理
+ pygraphviz: 図の描画
+ markdown2: markdown処理
+ ebooklib: Ebook処理?
+ exchange-calendars: 証券取引カレンダー?
+ kerykeion: 占星術?

## いろんな人の実行例

+ CSVデータをアップロードしてグラフを作ってもらう
+ markdownファイルをアップロードしてスライドを作ってもらう
+ 画像処理
+ 音楽の処理
+ 長期記憶を作る
+ pythonライブラリをアップロードして使ってもらう

## 使ってみてわかったことを整理
### できること
+ インターネットにアクセスできないPythonエンジニアにお願いしてできることは大体できそう
+ 隔離された世界にいるので、その人に何かファイルを送るときはまとめて送るしかない
+ 既存のライブラリでできることは把握しておくとよさそう
+ 将来的にGPU搭載版とかが出るとできること増えそう
+ gpt4と同じく一般的な知識はある点と、pythonの実行環境があることで計算などの苦手領域がカバーされているのが、gpt4単体と違って安心感があるところかも

### できないこと

+ ディープラーニングの学習 -> x
+ 動画の字幕をつける -> △
    + whisperとか使えない(speechrecognitionは入ってた)
    + srtファイル扱うライブラリ入っていない
    + ffmpegはありそう
+ 形態素解析 -> x
    + mecab,janomeとか入っていない
    + DeepLearning系のモデルもデフォルト環境で使えなさそう
+ 西暦・和暦変換 -> △
    + 一般的な知識を使って処理はしてくれたものの、ライブラリは入っていない
+ 他の言語のスクリプトを作る -> ?
    + 試していないけど、難しそう
+ AWS,Googleとかのクライアントがない -> x
    + まぁインターネットアクセスできないしな・・


### やってみたいこと

+ fakerあるしテストデータ作成とかお願いしたいところ。gpt4だけでも十分できたけど。csvとかで作ってくれそう
+ 文字起こしとか、テキストから音声化とかのライブラリが入ってるっぽいので使ってみたい

### その他気づいたこと

+ ライブラリが入っているのに、Code Interpreterはその存在を知らないことがある。（占星術を試しにやってもらおうとしたら、入っていないと言われた）。先に教えてあげる必要がありそう
+ 文字 -> 音声をお願いしたら、音声データの生成や操作は制限されているとの回答だった



## 参考資料

+ https://qiita.com/ot12/items/39ff4264e0f13209ba62
【2023年版】Neovim (--HEAD) + coc.nvimでTabキー補完とインサートモードでのタブ文字挿入の両方を実現する

<h4>【概要】</h4>
nvim + coc.nvim環境で、coc.nvim公式のキーマップサンプルにあるように、Tabキーにて補完リストを表示するようにできます。しかし、サンプルコードそのままだとコード保管時にTabキー押下にて補完リストを移動できるものの、補完リストが表示されていない状態でTabキーを押下すると、エラーになるため、エラーの状態と対策を行ったキーマップ(Lua版)について例示解説します。

<h4>【環境】</h4>

<table>
    <tr><td>Ubuntu</td><td>22.04 LTS</td></tr>
    <tr><td>neovim</td><td>0.10.0-dev (--HEAD)</td></tr>
    <tr><td>coc.nvim</td><td>0.0.82</td></tr>
</table>

<h4>【よくあるエラーの起きる書き方】</h4>

その１)
```lua:lua
  local opts = {silent = true, noremap = true, expr = true, 
  replace_keycodes = false}
  vim.keymap.set("i", "<TAB>", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : oc#refresh()', opts)
  vim.keymap.set("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"]], opts)
```

その２)
```vimscript:vim.script
  inoremap <silent><expr> <TAB>
    \ coc#pum#visible() ? coc#pum#next(1):
    \ <SID>check_back_space() ? "\<Tab>" :
    \ coc#refresh()
  inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\  <S-TAB>" " "\<C-h>"
  inoremap <silent><expr> <c-space> coc#refresh()
```

まず、その１についてですが、下から２行目の <em><strong>v:lua.check_back_space()</strong></em>でluaのグローバル関数check_back_space()を呼び出そうとしているのですが、関数名が見つからず、グローバル変数自体がnilになってしまい、関数の参照エラーで条件分岐に進めず、よって補完リストが表示されていないときにTabキーを押下したケースも実行されないという状態になります。最初、ここはcheck_back_space()からnilが返ってきているのだと思っていたのですが、いろいろ調べているうちにどうやらそうではないということが分かりました。
次にその２ですが、vim.script表記なので、luaに書き換えると、結局ほぼその１と同じになるため、同様のエラーが発生します。

<h4>【修正したキーマップ】</h4>

```diff_lua:lua
  local opts = {silent = true, noremap = true, expr = true, 
  replace_keycodes = false}
- vim.keymap.set("i", "<TAB>", 'coc#pum#visible() ? oc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts)
+ vim.keymap.set("i", "<TAB>", 'coc#pum#visible() ? coc#pum#next(1) : "<Tab>"', opts)
  vim.keymap.set("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(1) : "<C-h>"]], opts)
```

修正したところは、バックスペースの入力チェックは無くても動作に影響がないため、<em><strong>v:lua.check_back_space()</strong></em> を削除したことと、<em><strong>coc#pum#refresh()</strong></em>も条件に合致しなくなり、削除しても同じく影響がないため削除しています。替わりに、<em><strong>coc#pum#visible()</strong></em> の条件が偽の(つまり補完リストが表示されていない)場合、<em><strong>"\<Tab>"</strong></em>でタブ文字を挿入するようにしています。これにより、補完リストはTabキーとShift+Tabキーで順送り/逆送りができるのと、インサートモードで補完リストが表示されていないときにタブ文字の挿入の両方を実現しています。

解説はここまでです。最後までお読みいただき、ありがとうございました。

<h4>【あとがき】</h4>
luaの記法と補完リストの挙動がわかってしまえば、そんなに難しくない修正なのですが、結構あちこちのサイトを見て回っても解決策が書かれているサイトが見つけられず、エラーの原因を探るのに時間がかかってしまいました。
操作上エラーが頻発していたので、どうしても改善したくいろいろ調べた甲斐がありました。
地味な修正ですが、余計なイライラを起こさなくて済むようになったので、これからnvim作業が捗る・・・・といいなぁ(笑
[リサーチ・メモ]「when-thenReturn」と「doReturn-when」の違い

## 背景
何気なく使用していた「when-thenReturn」と「doReturn-when」の違いが気になり調査したが、挙動は変わらないという記事ばかりだった。しかし、仕事で実際は挙動が違うことを教えて頂いた為、備忘録として纏める。

## when-thenReturn
対象のメソッドを実際に呼び出し、戻り値を差し替える。

## doReturn-when
対象のメソッドを呼び出さないで、戻り値だけ返す。

## まとめ
ルート確認、呼び出し回数の確認が必要な場合は、when-thenReturnを使用する。
呼び出せない、または呼び出しをスキップしたい場合は、doReturn-whenを使用する。
[Symbol]Timestampを日付に変換するツールを作りました！

## はじめに
Catapult REST APIのレスポンスではtimestampを日付に変換する必要があります。
普段symbol-sdk v2系を使っている人はSDKがやってくれている部分なので
一応覚えておくといいかと思います。

変換するにはSDKを使うか変換コードを自分で使用する必要があったので
ちょっと確認したい時とかに使いたかったので作りました。

symbol-sdk v3系で開発する人は使ってくれるかもしれない…。

今回はこれだけです。

## timestampを日時に変換するツール
https://villhell.github.io/timestamp-converter/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532264/1d457298-4fc0-fe69-61c1-f0f87c7599b7.png)
Pull Requestは書き方が9割

## はじめに
いきなり個人的な話になりますが、
つい最近開発メンバーが増えてレビューしないといけないPRが爆増しました。

レビューしてもレビューしても減らないPR。

**「あれ、これ見たっけ。」
「これ修正依頼してまだ対応してくれているやつだ。」
「あ、これレビュー漏れてた。」**

などなど、自分の開発タスク＆PMOとして進捗管理などをしているので
レビューが大量にきた時にはパンクしそうになります。


そして何よりPRを見てて...

**「えーと、このPRは何がしたいんだ。」
「そもそもこの機能どういう仕様だっけ...」
「どんなバグの対応だったけ？」
「何が原因で、何をして、その結果どう変わったのだろうか。」**

などと思うことが多いなと気づきました。

元々PRのテンプレートは設定してたのですが、
以前までの体制に適したものにしており、半年以上同じテンプレートのまま放置していました。

新規メンバーが増えたことにより**PRの内容・粒度**が
**メンバー間によってバラつき**が出て色々課題が見えてきたので、
もっと効率的にレビューができるようテンプレートを見直すことにしました。

そこで調査・検討した内容を残そうと思います。

## 大前提
PRは「**コードを出すためのついでに書くもの**」ではありません。
仕様書や開発資料などといったものと同じ、**ドキュメントの一種**です。

なぜならPRは
- **レビュワーなどの第三者が読む**
- **何か問題が発生した時など、後から見返す場合がある**

ものだからです。

そのため、
**いつどんな人が見ても内容がスッと理解できるように**書く必要があります。

それでは本題です。

## PRを作成する前に
いきなりですが、PR作成する前に何か意識されていること、
習慣的にやっていることはありますか？

**「コードは書けたし一通り動いたからとりあえずPR出そう！」**

これはやめた方がいいと思います。


確認項目はプロジェクトや開発内容によって変わるかもしれませんが、
以下のように基本的にいくつかチェックしておくことがあります。

### PR作成前のチェック項目
- **ブランチの最新化**
  - 当たり前ですがコンフリクトは解消しておきましょう
- **コンソールやログにerrorやwarnは出ていないか**
  - warnでも放置しておくのは良くないですね
- **LintやRubocopなどの静的解析ツール、RSpecなどの自動テストは落ちていないか**
  - ちゃんとローカルでチェックしてからPRをあげましょう
- **動作確認**
  - 何か少しでも変更を加えたらこれはマストです。例えば、作業終わってからdevelopの内容を取り込んで動かしたらバグっていた。なんてこともあります。

## いざ、PRを作成する
上記のような下準備が完了してはじめてPR作成に取り掛かります。

ここはチームの開発ルールがあればそれに従ってください。

もしルールない・またはルールはあるが十分でないと思う方がいらっしゃれば、
ぜひ参考にしていただければと思います。

### DraftでPRを作成する
これは必須ではありませんが、
いきなりOpenにするのではなくDraftという形でPRを作ることができます。

これのメリットは
* **誤ってマージされることを防げる**
* **他の人に実装途中のコードを共有できる**

などがあると思います。

「実装で詰まったので途中だがみてほしい！」
という場合にとても有効です。

### 差分を確認する
次に、**不要な変更が紛れていないか**、**typoがないか**など
今一度ここでざっと見直します。

よくあるのは、
消し忘れていたコメントやconsole.logが残っているケースです。

### PRの概要を記入していく
ここがかなり重要だと思っています。

レビュー効率化のために、
レビュワーをやっていて書いてあると嬉しいことを以下の表にまとめてみました。

|見出し|備考|
|-|-|
|概要|PRでの対応内容の概要|
|原因と対処法（バグ修正の場合）|何が原因と判断し、どう対処したのか|
|やったこと|対応内容を簡潔にリストアップ|
|変更結果|操作動画やスクショ、レスポンス内容など|
|やらないこと|このPRでスコープ外とする内容|
|注意事項|マージした後はこのコマンドを実行してね、などメンバーに知らせるべき内容|
|どうやるのか|変更後の使い方や再現（確認）手順|
|課題|悩んでいるところ、とくにレビューしてほしいところ（これは直接ソースにコメントしてもいいと思います。）|
|備考|その他追記事項、関連資料や参考資料などをまとめる|

自分は以上の内容に加えて「**特に見てほしい箇所**」や
「**もう少し上手く書けそうだけど良い方法が思い浮かばない**」
といった箇所に直接コメントを入れています。

また、「ソース内のコメントに書くほどではないけど、**初見だと突っ込まれそうだなぁ**」
と思った箇所にもコメントを入れています。

あとは動画について。

**軽いから**という理由で**gif**を貼っているPRを見たのですが、
数十秒以上の長い動画になると**飛ばして見れなく**、
**全て再生されるのを待つのが苦痛**なので避けてほしいなと思いました。
（数秒の短い動画なら別に良いと思います）

## PRを作成し終わった後
もしDraft状態であればOpenにして、レビュー依頼をしましょう。

ここでは、以下のことをチェックするといいと思います。

* **レビュワーの設定はできていますか？**
*  **CIは通っていますか？**（設定している場合）
* **コンフリクトは起きていませんか？**
* **PRの向き先は正しいですか？**
  *  デフォルトで開発用ブランチに設定していることがほとんどだと思いますが、念の為確認しましょう。


## 最後に
PRの書き方次第で、**レビュワーの時間は何倍も変わってくる**と思います。

実際にやってみてこそ感じる
「**ああしてほしいなぁ、こうしてほしいなぁ**」
という感情は、今後も忘れずにどんどん改善していければと思います。

他にもこういう良い方法あるよ！などあれば
是非コメントを頂けますと幸いです。

それでは最後までお読みいただきありがとうございました！

## おまけ
Slackを使っているのであれば、リアルタイム通知を設定することをお勧めします。
レビュワーに設定されたり、コメントがついたりしたら通知を飛ばすことができます。

また、レビュワーに設定されていてレビュー完了していないPRについては
リマインドが来るようにも設定できます。

参考：[Scheduled remindersでPull Requestのレビュー依頼をSlackに通知してみた](https://dev.classmethod.jp/articles/github-scheduled-reminders/)

## 参考記事
https://applis.io/posts/how-to-write-git-pull-request

https://zenn.dev/chot/articles/a28ee73d60fd1e

https://qiita.com/kata_1997/items/fd6cd3009e3d7704f984
Pythonを使ってエクセルファイルをpdfに変換する

# はじめに
Pythonを使って、エクセルの表をPDFファイルに変換する方法は、インターネットで簡単に見つけることができました。ただ、表が複数ページにまたがる場合、最初の2行（タイトル行）をすべてのページに表示させる方法については悩みました。そこで、この問題の解決策をメモとして残すことにしました。

# 印刷設定してからpdfファイル
例えば、次のようなエクセルの表があります。行は1から491まであります。この表を何も設定せずにPDF化すると、複数のページに分割された表が作成されますが、タイトル行（例：銘柄コードなど）は最初のページにしか印刷されません。どうすればいいのかと悩みましたが、最初に印刷設定を行ってから、PDFファイルに変換すればよいことに気づき、プログラムを作ることにしました。

![スクリーンショット 2023-07-15 143509.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3245171/e3eaea92-b2a6-4d67-5009-85e3a441f606.png)

印刷設定は、次の記事で紹介されており、参考にさせていただきました。

https://qiita.com/rihu-do/items/91313c5b572a9ffdfc3e

# ソースコード
```python
from openpyxl import load_workbook
import win32com.client    

#pdfファイルにしたいエクセルファイルを開く
file_name="C:\\○○○\\○○○\\○○○.xlsx" 
wb=load_workbook(file_name)  #エクセルファイルの読み込み
ws_list = [ws.title for ws in wb.worksheets] #各シートをpdfファイルにするために、リストを作る。

#シート分だけ印刷設定を変更する
for i, ws in enumerate(wb.worksheets):
    ws.print_title_rows='1:2' #ページの先頭にタイトル行をいれる場合、ここで設定する。
    ws.oddHeader.center.text=str(ws_list[i])
    wps=ws.page_setup
    wps.fitToWidth=1
    wps.fitToHeight=0
    ws.sheet_properties.pageSetUpPr.fitToPage = True
wb.save(file_name)    #エクセルファイルを保存（上書き）
wb.close()

#ここからpdf化
excel = win32com.client.Dispatch("Excel.Application")
file = excel.Workbooks.Open(file_name)
for j, ww in enumerate(ws_list):    
    file.WorkSheets(j+1).Select()
    file.ActiveSheet.ExportAsFixedFormat(0,"C:\\○○○\\○○○\\○○○_"+ww+".pdf")
file.Close()

```

# 結果
このようなタイトル行が全部のページに入ったpdfファイルができました。
最初のページ
![スクリーンショット 2023-07-15 144535.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3245171/bd22948d-ec8a-5b0b-adc3-53484090e1d8.png)

最後のページ
![スクリーンショット 2023-07-15 164723.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3245171/62593aab-f7bb-e47f-9589-083692441f17.png)

# その他
プログラムを作っているとき、

PermissionError: [Errno 13] Permission denied:

というエラーが出る時がありました。

エクセルが開かれていると思われる状態であるにもかかわらず、実際には開いていない場合があります。このような場合、次の手順を試してみてください。
1. タスクマネージャーを開きます（Ctrl+Alt+Deleteを押します）。
2. プロセスタブを選択し、エクセルのプロセスが実行中かどうかを確認します。
3. エクセルのプロセスを見つけたら、それを選択し、Deleteキーを押してプロセスを終了させてください。
これにより、不要にエクセルが起動している場合、それを終了させることができます。
[Symbol]Addressを変換するツールを作りました！

## はじめに
Catapult REST APIのレスポンスではAddressの値が普段と違う形で返却されます。
普段symbol-sdk v2系を使っている人はSDKがやってくれている部分なので
一応覚えておくといいかと思います。

変換するにはSDKを使うか変換コードを自分で使用する必要があったので
ちょっと確認したい時とかに使いたかったので作りました。

symbol-sdk v3系で開発する人は使ってくれるかもしれない…。

今回はこれだけです。

## 変換ツール

https://villhell.github.io/address-converter/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532264/cd3ed748-ff73-3a5f-b3f2-563f75d1163b.png)
【個人開発】【iOS】積み上げ記録を残せるアプリをリリース

# はじめに
積み上げ記録を残し、目標達成までのサポートをするアプリをリリースしました。

# URL
https://apps.apple.com/us/app/buildtimer/id6448892333

# 目的
日々何かに取り組んで努力している方は多いと思います。

そういった毎日の行いを記録化してアウトプットできれば幸せになれると思い開発しました。
また、データ化することで分析でき目標達成へのサポートにもなります。

BuildTimerは毎日の活動を管理し、計画的に目標達成を支援します。

# サービス概要
### 1.積み上げ目標を投稿
右下のプラスボタンから積み上げ目標を投稿することができます。
目標内容、アイコン、目標達成にかける時間を設定します。
![ezgif.com-video-to-gif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/c4ba62f8-805a-583a-7992-fe88fdf8af37.gif)

### 2.活動を記録
カウントアップ形式で活動の時間を記録します。
画面上部から目標を選択して、カウントアップを開始します。
![ezgif.com-video-to-gif (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/3a3af88b-9bf0-5459-7a86-c6614647092b.gif)

### 3.残した記録を一覧で確認
記録は「積み上げ記録」ページで確認することができます。
日、週、月、年別で切り替えて表示が可能で、どれだけ積み上げたかすぐ把握できます。
![ezgif.com-video-to-gif (5).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/90249696-4f78-1207-3dec-25e843f269e9.gif)
いいコード悪いコードまとめ２章設計の初歩

## 省略せずに意図が伝わる名前を設計しているか
```
player #pとか書いちゃうと自分は分かるかもしないが、他の人は分からない。
damage #dも同様

状況によってはplayerやdamageだけでは分からないので、読み手が理解しやすい配慮をする。
```

## 変数を使い回さない、目的ごとの変数を用意しているか
以下のように`damage`という変数を使い回して、再代入するのはNG
```
damage = player_attack
damage = damage - something
```

## 意味のあるまとまりでメソッド化しているか
以下のような記述が１つのメソッドに混在していると可読性や保守性においてよろしくない。
したがって、意味のあるまとまりでメソッド化することが重要
```
プレイヤーの攻撃力を合算する
敵の防御力を合算する
ダメージ量を評価する
```

## 関係しあうデータとロジックをクラスにまとめているか
いろいろなところにメソッドを書いていると可読性が落ちてしまう。そのため、関連し合うデータやロジックは1つのクラスにまとめること。

また、クラス化するときに重要なのはコンストラクターで初期化するときに不正な値が紛れ込まないように条件でエラーを投げたりする仕掛けを持つこと。

例えば最小値が1の場合、-1などが紛れ込むとバグの原因になる。したがって、以下のような記述を書いておくとよい。
```
MIN_VALUE = 1.freeze
if value < MIN_VALUE
  raise_error('this number is wrong.')
end
```
Next13×PandaCSSのセットアップ

最近話題のゼロランタイムのPandaCSSをNext.js13で使えるようにします。

https://panda-css.com/


### 各種パッケージをインストール
Next.jsの最新バージョンとPandaCSSをインストールします。

```sh
$ npx create-next-app@latest
$ npm i -D @pandacss/dev
$ npx panda init
```

### panda CSSの設定

package.jsonを更新

```
{
  "scripts": {
++    "prepare": "panda codegen",
  }
}
```

最上位のコンポーネントに``をインポートします。これがないとcssを定義しても適用されません。
```tsx:app/layout.tsx
import "styled-system/styles.css";
export default function RootLayout({children,}:{children: React.ReactNode;}) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  );
}
```


次にpandaCSSをビルドするコマンドを入力する。オプションの`--watch`をつけると変更があるたびビルドしてくれます。
```sh
npx panda
# or
npx panda --watch
```

### pandaCSSを使ってみる
試しにappディレクトリのpage.tsxに書き込んでみましょう。
```tsx:app/page.tsx
import { css } from "../styled-system/css";

export default function Home() {
  return <div className={css({ bg: "red.400" })}>hoge</div>;
}
```

これでhogeという文字が表示され背景に赤色が当たっていたら問題ありません。

### 注意

自動で生成される`styled-system`はGitに上げる必要がないため`gitignore`に追加しておいた方が良いです。

```sh:gitignore
styled-system
```

以上でNext.js13でPandaCSSが使えるようになりました。
ナレッジの自動アーカイブされたレコードの取得方法

Salesforceのナレッジは特殊なオブジェクト。通常のSOQLでは「Draft」と「Online」が取得できるものの、
システムよより自動的に「Archived」になった記事は取得できません。
※：手動でアーカイブしたレコードは取得できます。

下記のように 3つの条件を併用することでアーカイブレコードが取得できます。

select KnowledgeArticleId, id, versionnumber, PublishStatus from Knowledge__kav
where PublishStatus = 'Archived'
  and IsLatestVersion = false
  and KnowledgeArticleId = 'xxx'
モダンアクティビティを使ってみた(Excel編Part9～シートの保護もできると？～)

## はじめに
①本記事は、2023年7月開催の「UiPathブログ 発信チャレンジサマー」の15日目のブログです。
ブログの詳細、参加方法については以下のブログを参照ください。

https://note.com/shumpei_w/n/nd082bdf28853

②このブログ情報は、2023/7時点の情報です。
③UiPathはCommunity Edition、Versionは2023.6.1を使用しています。

## シートの保護もできる

### シートの保護アクティビティ
「シートの保護」アクティビティは、対象のシートにパスワードを設定することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/ff0285b6-6e5a-8ad1-a895-d50e91f8997d.png)
プロパティはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/d90f9270-f527-894b-4c83-4bfda4a55f1a.png)

【入力】
シート：パスワードをかけたい対象のシートです。
パスワード：String型で、パスワードを設定できます(でもおすすめしません)
パスワード(SecureString)：SecureString型で、パスワードを設定します。
【オプション】
追加の権限：追加でつけたい権限を付与することができます。(デフォルトは"None"になっています。)

※こちらの詳しい説明は小串先生のサイトに記載がありました。情報ありがとうございます。

https://ogushishoji.site/uipath-studiox-sheets/#i-17


## やってみよう
①　あるExcelのシートにパスワードをかけてみよう
というわけで、シートを"Sheet3"で設定してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/41cf5481-732c-e3dc-7c20-5020ce9672d5.png)

### パスワード：Stringで設定する場合
②-1　パスワードを設定してみよう
試しにパスワードの欄に適当に入力してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/952cec78-4c0d-8059-39d0-8a25f376c50f.png)
すると、以下の警告が出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/c17def8b-807d-7677-331b-2d5a1ea850a8.png)
なので、もし文字型(String型)で設定の場合は、変数に前もって値を格納してからのほうがいいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/0b0182df-7ae8-d256-4978-0cb6e77b127c.png)

String変数"パスワード"に先程のパスワードを入れてからだと...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/92d5f5bc-dd57-7e62-7ba4-b3a668009a85.png)
お、警告出なくなりましたね。

実行してみると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/17811e7b-4d62-23e4-1b01-015d72fdf889.png)
あ、シートが保護されたことを確認！パスワードかかっていました！

### パスワード：SecureStringで設定する場合
②-2　パスワードを設定してみよう
まずはパスワードをどうするかですが、通常OCのアセットに設定しておくか、String型→SecureString型に変換しておくなどの対応が必要です。

<b>【参考】</b>String→SecureStringへの変換(Assign(代入)アクティビティの右辺に入れてみよう)
new System.Net.NetworkCredential("",String型変数or引数)).SecurePassword

ではSecureString型の変数"sss"を設定しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/dc30fadc-97ee-4faa-82f5-0def1da7dc5d.png)

実行してみると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/f9d99fbf-d50c-509b-ed79-c64eb34bf951.png)
おお、できましたね！！！

## まとめ
パスワードが2通り設定できますが、SecureString型を使うほうが良いですね。
(String型も使えますが、パスワードの管理、実装の際は自己責任でお願いします)

最後までお読みいただきありがとうございました。

## 参考URL
https://ogushishoji.site/uipath-studiox-sheets/#i-17
ついにGA！Azureの新機能「クロスリージョンLB」とは？

# 2年のプレビューを経てようやくGA！

2023年7月10日、Microsoft Azureクラウドの新機能「Azure cross-region Load Balancer」が一般提供開始されました。全リージョンが対象です。

https://techcommunity.microsoft.com/t5/azure-networking-blog/distribute-global-traffic-with-ultra-low-latency-using-azure/ba-p/3857991

この機能は2021年からプレビュー版の試験提供がされており、2年以上を経てようやくGAされました。



# この機能は何が嬉しいの？

一言でいうと、Azureのロードバランサーが同じIPアドレスで複数リージョンへ負荷分散できるようになりました。

Azureでもともと提供されていたLBサービス「Azure Load Balancer」はAWSと同じく、リージョン内に閉じた負荷分散を提供するものでした。一方でGoogle CloudではCloud Load Balancingがマルチリージョンで機能することで有名ですが、こちらに近い機能がAzureでも実現できるようになったものと言えそうです。

https://cloud.google.com/load-balancing?hl=ja

AWSでいうとGlobal Acceleratorに近いですね。


# 主な特徴

- 同じグローバルIPアドレスでマルチリージョンへの負荷分散ができる。IPアドレスは固定可能
- パケットのIPアドレスを保持するため、IPアドレス固有のロジックを実装できる
- ターゲットリージョンの増減が可能。トラフィックの変動に対処しやすくなる

![スクリーンショット 2023-07-15 14.36.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/cda17652-1aad-015f-d8c9-662562cd7f8b.png)

### その他

- 低遅延
- グローバルティア（マルチリージョン対応部分）のSLAは99.99%
- Azure LBのフローティングIP機能を利用可能。LBの受信ポートをターゲット側でも再利用できる
- IPv4のUDPもサポート ★プレビュー段階では無かった機能！


# え、名前解決じゃダメなの？

「同じIPのまま複数リージョンに負荷分散できるようになりました！」と聞くと「え、DNS使えば良くない？？」と思われる方もいるかも知れません。概ね間違っておらず、ユースケースに応じて使い分けが必要になりそうです。

Azureで負荷分散を行う際、もともと以下サービスを使い分ける必要がありました。

- Azure Load Balancer（AWSでいうNLB）
- Application Gateway（AWSでいうALB）
- Traffic Manager（AWSでいうRoute 53のDNSルーティング機能）
- Front Door（CDN。AWSでいうCloudFront）

https://learn.microsoft.com/ja-jp/azure/architecture/guide/technology-choices/load-balancing-overview#decision-tree-for-load-balancing-in-azure

特にDNSベースの負荷分散の場合、ルーティングの設定変更やターゲットのフェイルオーバーが発生した場合にDNSキャッシュが残ってしまい反映に時間がかかるケースがあり、クロスリージョンLBを使えばこういった課題を回避できます。
また、名前解決のトラフィックを挟まないことでレイテンシーの短縮にも効果がありそうです。


# 最後に

私もAzureはまだまだ勉強し始めたばかりですので、不備やお気づきの点などあればフィードバックいただけますと幸いです。

ハンズオン用のチュートリアルも公開されていますので、興味ある方はぜひ触ってみましょう！

https://learn.microsoft.com/ja-jp/azure/load-balancer/tutorial-cross-region-portal?wt.md_id=searchAPI_azureportal_inproduct_rmskilling&sessionId=5142b4ac35a14f70856df3580d6f6d04


# 参考文献

https://learn.microsoft.com/en-us/azure/load-balancer/load-balancer-floating-ip

https://learn.microsoft.com/en-us/azure/architecture/aws-professional/networking

https://ascii.jp/elem/000/004/052/4052105/
openshotで動画をトリミングしてみた

参考サイト
https://www.avaide.com/ja/edit-video/openshot-crop-video/
http://serverarekore.blogspot.com/2020/06/openshot_75.html

動画を撮影したところ画面の端に人が映ってしまったので
その部分だけ削除します。

# 動画をタイムラインにドラッグアンドドロップする
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106311/a94b0314-b78c-e034-6f58-bf5bf3cbedc5.png">

# エフェクトのトリミングを動画にドラッグアンドドロップする
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106311/f93b6a96-2d8f-df18-abb1-2491663c77a6.png">

# トリミングのアイコンを右クリックして、プロパティをクリックする
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106311/80a02692-3139-f465-9efa-91714660b673.png">

# トリミングのプロパティが表示される
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106311/fcad062f-c646-6301-d54d-f1407576a1b1.png">

# プロパティ値を調整する
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106311/c7ea24cb-8df5-4045-01c1-72fc18098b0e.png">

|プロパティ  |最小値|最大値|
|---|---|---|
|左サイズ|0  |1  |
|右サイズ|0  |1  |
|上サイズ|0  |1  |

0.5にすると画面中央までトリミングされる
下サイズはないので、上サイズを指定した後Yオフセットで同じ値を負数で入力する

<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106311/cec11509-1e59-8468-891a-fd8114d3220f.png">
OpenAPIを業務で一から書いてみた時の反省

RailsをAPIとして利用する際のAPIドキュメントを業務で作成したのだが、思っていたより時間が掛かったので反省も含め書いていく。

---
### 1.色々調べてみた
最初、1から書くのは億劫だし楽に書く方法を調べたところ、GemにRspecから生成する方法があることを知り試してみた。

https://qiita.com/noguri/items/4d60b7bf509bf90b3425

それっぽいものは直ぐに生成されたから便利ではあったが、Rspecが全てのControllerで書かれている訳ではなかったので、書かれてないControllerを探したりで時間が掛かってしまった。(素直に急がば回れをするべきだった。反省。)

---

### 2. 書いてはみたものの...

その後、あまり理解もしてないままOpenAPIの記法に従ってymlを書いていくが、理解してないため遭遇するエラーの解決速度が如何せん遅い。

この手のものは、全体から細部に書くべきだが、Pathを列挙することもなくただひたすら上から順々に書いてしまった。


```yml
### 今回のよくない進め方の例

"/line/message":
    post:
      summary: create
      tags:
        - Line::Message
      requestBody:
        content:
          application/json:

と愚直に書いてた
```


おそらく正解の作業の進め方はこう。
この方がそもそも進めやすいし、進捗も把握しやすい

```yml
### この方がもれなく勧められたはず

"/line/message":
    post:
      responses:
    get:
      responses:
  "/line/message/{id}":
    put:
      responses:
    get:
      responses:
```

また、書いていく際情報収集不足で、ymlに直接書いていたが世の中には便利なものがあるらしく書きやすいエディターが存在した

https://editor.swagger.io/

---

### 3. 記法について

特段私からいうことはなく、下記記事を参考に書くのが一番早い。

https://techblog.asahi-net.co.jp/entry/2019/03/04/102734

下記記事は各項目の詳細が書かれてるから一回読むべき

https://techblog.zozo.com/entry/swagger_yaml

整理のためメモがてら記載。何か項目を書いたらtypeで型を常に指定してあげるイメージ

```yml

"/line/message":
    HTTPメソッド:
      parameters: or requestBody:
      #parametersの場合
        - name: user_id #paramsの名前と揃える.pathの値になるため
          in: path or query #queryなら /line/message?user_id=値になる
          required: true # 必須かどうかのフラグ
          schema: #型とか詳細設定する場所
            type: string
          description: ユーザーID #nameで指定したkeyの説明書いたりでいいかな
          example: U2525 #swagger editorで発行するqueryにそのまま入ってくれるから書いた方がわかりやすいし良いかも。
      # requestBody
        - content:
          application/json: # xmlとか合わせる
            schema:
              type: object #schemaのtypeを指定。他にはarrayがある。その時はitems:必須
              properties: # objectの必須
                user_id:
                  type: string
                  example: U2525
                message: #lineをイメージ
                  type: object
                  propertirs:
                    text:
                      type: string
                    type:
                      type: string #typeカラムの型をtype: stringで定義してるだけ。ややこしい
                examples: # こんな感じで値によって分岐するような表記もできる
                  typeがwordの場合
                    value:
                      user_id: U2525
                      type: word
                  typeがimgの場合
                    value:
                      user_id: U2525
                      type: img
      responses:
        "200":
          description: メッセージ作成完了 # このrequestの結果生じるreesponsを書くべきかな

```
---

### 4. 反省まとめ
1. 初見の事象問わず、常に`全体から細部へ`の考えを忘れずに作業すべき
1. チートシートなどで大枠を捕らえつつ、自分が書いてるコードの意味を調べて理解した上で書かないとエラーが生じた際に結局無駄な時間がかかる 
1. 今回だとpathとquery、requestBodyの理解が少し甘く知識不足面で時間を食った場面があったので、再度勉強するきっかけを得た。
[Blender]ボーン設定をリセットしてまっさらにする手順

# 概要
ボーンを消してまっさらにしたい時はこの手順で出来ます。

:::note warn
せっかく作ったボーン設定を消してしまう事になります。大切なデータの場合はバックアップを取っておくなど対策をしておいて下さい
:::

![スクリーンショット 2023-07-15 13.17.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/897d6a72-01a7-5ef0-a653-362b1172cf37.png)
# 本文
**⓪最初に本体オブジェクトを選択状態にしてObjectModeに切り替えておきます。**
① スクショの部分のParentを削除してボーンとオブジェクトの親子関係を解除します。
（Object Propertiesタブ > Relations > Parent）
![スクリーンショット 2023-07-15 13.10.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/a72fd619-aaa2-933d-7586-b30d06937d39.png)

② Armatureモディファイアをバッテンボタンで削除します。
(Modifier Propertiesタブ > Armature)
![スクリーンショット 2023-07-15 13.10.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/d1dfb9f0-aeee-3121-71b0-b2f7237520be.png)

③ 頂点グループ(VertexGroups)を全部消します。
(ObjectData Propertiesタブ > Vertex Groups)
![スクリーンショット 2023-07-15 13.10.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/61113022-9966-a63b-d988-8160edc254d4.png)

④ 最後にボーンを削除します。
(ボーンを選択してXキー)
![スクリーンショット 2023-07-15 13.30.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/ba48893d-c20e-2547-f489-8a3f51160621.png)

⑤ 無事ボーンの設定が全て消えてオブジェクトだけの状態になりました:raised_hands:
![スクリーンショット 2023-07-15 13.11.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/acdd0f97-5637-cac3-ee9f-ff6ee2f3f2cc.png)

:::note info
Auto Rig Proで作成したRigの場合でも、ちょっと作業は多くなりますがこのやり方でまっさらに出来ます
:::
API経由でdeleteした際に画面レンダリングが行われない時の確認事項(React redux)

React reduxを使った状態管理の練習としてツイッター風アプリを作成していた際に、reducer経由でdeleteしてるのに画面の再レンダリングが走らない問題に遭遇。
きっとレンダリング発生条件周りの理解が甘いのだと思い、見直してみたものの修正できずに困っていたのですが、実はAPIのdeleteメソッドの挙動の理解不足だったことがわかりました。
基本中の基本すぎてお恥ずかしい限りですが、一応記録として。

## apiにdeleteメソッドを投げた時の返り値

![スクリーンショット 2023-07-15 13.27.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073877/23c3bcf6-705d-53b8-b9d1-2960a02d93aa.png)
getメソッドやpostメソッドだと返ってくる値がわかりやすいですが、deleteメソッドは上の結果を見るとわかるように、空っぽのオブジェクトが返ってくる。

なので、例えば下のような実装をするとまずいわけです。

```javascript
const tweetSlice = createSlice({
  name: "tweet",
  initialState: initState,
  reducers:{
    destroy(state, {type, payload}){
      const newState = [...state];
      return newState.filter( (tweet)=>{
        return tweet.id !== payload.id
      } );
    }
  }
});

const { destroy } = tweetSlice.actions;

// 非同期処理部分

const ENDPOINT_URL = "http://localhost:3000/tweets";

const asyncDestroyTweet = (payload) => {
  return( async(dispatch, getState)=>{
    const result = await.delete(ENDPOINT_URL + "/" + payload.id);
    dispatch( destroy(result.data) );
  } );
};

export { asyncDestroyTweet };
export default tweetSlice.reducer;

```

まずい部分はここ。
```javascript
const result = await.delete(ENDPOINT_URL + "/" + payload.id);
dispatch( destroy(result.data) );
```
resultは空っぽなのに、それをdestroy関数に入れても当然何も起きないので、結果storeの更新が行われず、画面のレンダリングも行われない。

## 正しい実装

正しくは、以下のようにすること。
```javascript
await axios.delete(ENDPOINT_URL + "/" + payload.id);
dispatch( destroy(payload) );
```

無意識でGETとかPOSTとかと同じように書いていていると引っ掛かるかも。
気づいたら当たり前のことなんですが、しばらく気づけなかった、、、
Javaのインストールと環境設定の確認をしてみた

# 概要
Javaのインストールと環境設定の確認をしてみました。以下のページを参考にしました。

https://www.javadrive.jp/start/install/

# 順番に以下のページを確認

https://www.javadrive.jp/start/install/index5.html

https://www.javadrive.jp/start/install/index1.html

https://www.javadrive.jp/start/install/index4.html

https://www.javadrive.jp/start/install/index3.html



# 私の環境はUbuntuなので以下で一発設定完了
```
sudo apt install openjdk-8-jdk
```
以下のコマンドでインストールされているのを確認できます。
```
sudo apt search openjdk
openjdk-8-jdk/jammy-security,jammy-updates,now 8u372-ga~us1-0ubuntu1~22.04 amd64 [インストール済み、自動]
  OpenJDK Development Kit (JDK)
```

# まとめ
何かの役に立てばと。
Astro.jsでテーマファイルをインストールする - 一言メモ

# Astro.jsでテーマファイルをインストールする

```javascript
npm create astro@latest -- --template satnaing/astro-paper
// 「npm create astro@latest」でAstroの初期設定が行える
// 「-- --template」に注意
// 「satnaing/astro-paper」には、作者/テーマ名※下記画像の赤線部
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119135/90f8c344-1ffc-1eed-cb4b-376c329e3569.png)

- まだ日本語になっていないページに記載
https://docs.astro.build/ja/reference/publish-to-npm/
- Astro.jsのテーマファイルのGithubのReadMeに記載がなかったため、備忘録として残す
- テーマリストは下記URL
https://astro.build/themes/
baserCMSをWindowsのXAMPPで動かす(サブディレクトリ対応)

1. XAMPPのインストール
1. Apache, MySQLの起動
1. baserCMSのダウンロードと設置
1. baserCMSのインストール
    1. サブディレクトリに設置する場合の注意点
    1. intl拡張が必要とのことで拡張を有効化する
    1. PHPのパスの確認
1. Composerでのインストールが失敗する問題の解決
    1. Composerのmanual download
    1. PawerShellでインストール
    1. .envの生成と編集

## XAMPPのインストール、Apache, MySQLの起動
既にqiitaにあるので [こちら](https://qiita.com/ryome/items/8e193e183461a52154b1) を参照

## baserCMSのダウンロードと設置
[公式サイト](https://basercms.net/)からzipを取得
展開して C:\xampp\htdocs\basercms として配置

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114772/97b9f5c8-1acd-5212-a05d-429af8a1a7d5.png)

## baserCMSのインストール
### サブディレクトリに設置する場合の注意点
.htaccessの書き換えが必要になります
C:\xampp\htdocs\basercms\\.htaccess

    #RewriteBase    /
    RewriteBase    /basercms

C:\xampp\htdocs\basercms\webroot\\.htaccess

    RewriteBase /
    RewriteBase /basercms/webroot

### intl拡張が必要とのことで拡張を有効化する

XAMPPのControlPanelのphp.iniを編集
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114772/345fa799-eb1b-00e0-30a6-8d9c46763b38.png)

コメントされたintl拡張を有効化する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114772/4de58b26-7390-5201-e403-b797b12e1002.png)

他にもgdとzipが必要になるので下記もコメントされている拡張を有効化します
extension=gd
extension=zip

※ XAMPPのControlPanelからApacheをStopしてStart(再起動)

### PHPのパスの確認

ふむ: C:\xampp\php\php.exe
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114772/aa1b6c57-0130-58bb-77e0-9ff3998527e1.png)

## composerでのインストールが失敗する問題の解決

これでも失敗するので、手動でcomposerをインストールし、関連ライブラリをインストールする。
![スクリーンショット 2023-07-15 122053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114772/4f798a6d-0b3c-3e19-fe3f-16ca0f4bfc56.png)

### Composerのmanual download
Composerの[公式サイト](https://getcomposer.org/download/)から Manual Downloadして、
C:\xampp\htdocs\basercms\composer\composer.pharに配置

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114772/c05c7041-03da-80cc-242b-f05888a18158.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114772/e1ee69cb-fe4a-8b1d-d779-62d856cc4477.png)

### PawerShellでインストール
PawerShellを起動してcomposer の installコマンドを実行

    PS C:\> cd .\xampp\htdocs\basercms\
    PS C:\xampp\htdocs\basercms> C:\xampp\php\php.exe .\composer\composer.phar update

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114772/2ec81644-caa5-e917-7d35-e646be03b532.png)

### .envの生成と編集
公式ガイドでcomposerの[インストールが上手くいかなかった場合](https://baserproject.github.io/5/introduce/#%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%8C%E3%81%86%E3%81%BE%E3%81%8F%E3%81%84%E3%81%8B%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88)を参考に、.envを手動で生成

#### .env内の下記は動作環境に合わせて変更が必要です
export SITE_URL="https://localhost/"
export SSL_URL="https://localhost/"

## 以上でインストールが実行可能になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114772/2411cb22-020d-7469-2523-90aba0a79d66.png)

※ インストールではデータベースが必要になるため、phpMyAdmin等で事前にデーターベースを作っておく必要があります。
Macで開発するときのキャッシュ削除まとめ

# どうした？
消す前のスクリーンショットを忘れたけど、あっとゆーまにXcodeのフォルダが肥大化するので、定期的に削除するまとめ。
![スクリーンショット 2023-07-15 12.03.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8424/90772ace-848e-5206-120d-98cae632f3ee.png)

# 結論
```sh
xcodebuild clean
xcodebuild -alltargets clean

xcrun --kill-cache
xcrun simctl erase all

brew cleanup -s
pod cache clean --all
```

```sh
rm -rf ~/Library/Caches/com.apple.dt.Xcode/

rm -rf ~/Library/Developer/Xcode/Archives/
rm -rf ~/Library/Developer/Xcode/DerivedData/
rm -rf ~/Library/Developer/Xcode/macOS\ DeviceSupport/
rm -rf ~/Library/Developer/Xcode/iOS\ DeviceSupport/


rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang.$(whoami)/ModuleCache"

rm -rf ~/Library/Caches/Homebrew
rm -rf $(brew --cache)

rm -rf ~/Library/Caches/org.carthage.CarthageKit 
rm -rf ~/Library/Caches/carthage
```
これを実行する。
ただし、macOSやiOSのDeviceSupportを削除するので、注意。
私が使っているCarthage、Pods、Homebrewもキャッシュクリアします。
Xcodeの中間ファイルを削除するので、Xcodeは終了させましょ。

```sh
xcrun simctl spawn booted log config --mode "level:off"  --subsystem com.apple.CoreTelephony
```
Xcodeで不要なログが表示されるので、表示オフに。


# 参考もと
https://qiita.com/shtnkgm/items/c96a58579ec406194fa8
ほぼ、こちらから。感謝！
一部拡張してたり、私が使ってないのを外したり。
行ごとにコピペするのも面倒なので全部まとめました。

# 結果
![スクリーンショット 2023-07-15 12.27.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8424/f6011406-bd8c-b062-edbc-87aed4f9939f.png)
無事に38.5GBから1.5GB　になりました。

![スクリーンショット 2023-07-15 12.50.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8424/a42cf90a-18f1-2476-f39e-2010a5000359.png)
その後、１回デバッグで立ち上げただけで、11.7GBなのでやっぱそこそこ食いますね。
Vue.js を初めてみる

オンラインスクールを卒業したばかりの転職活動中未経験者です。

PHPについてある程度学びましたが、違う事にも挑戦っということで本日より、
Vue.js 
について学習してく傍らアウトプットも兼ねてと初めての投稿です。

環境開発（OS:mac）

1 node.lsのダウンロード
2 ターミナルを起動
3 作業用のディレクトリに移動
4 環境構築
```
npm init vue@latest
```

この後の選択はほとんどNOでいいらしいが、、、、参考にさせてもらった以外の所では違うことを言っていたので保留で、、

5　VScodeにてファイルを開き、ターミナルを表示 
　　4.完了後に出てくる3行の真ん中を再度打ち込む
```
npm install
```
6 サーバー起動して確認
```
npm run dev
```

nodeのverが古い物だとエラーが出ることもあるらしい


以上で完了？しました。

取り敢えず第一歩を踏み出したということで、引き続き勉強していこうと思います。
Railsのクエリ文字とparams

今まで漠然と理解していたが整理のため記載

クエリパラメーター

```ruby
http://example.com/line/latest_message?user_list=U2525
```

paramsのkeyであるuser_listにはU2525が入る


```ruby
class Line::LatestMessageController < ApplicationController
  def index
    params[:user_list]) #params[:user_list] == U2525
  end
end
```

またinputタグのname属性の文字がURLのqueryのkeyになる

```html
 <input type="text" name="user_list">
```
Railsアプリ作成の上で大まかな進め方



# DBの構造を考える

 1.DBの基盤となるテーブルを考える
　どんなテーブル構造にするか？また、そのためにはどんなカラムの追加が必要か？(例:name,emailなど)
　内容がまとまったら、まず`rails db:create`でデータベース自体を作成します。ただし、この段階ではまだテーブルは作成されていません。

2.モデルを作る（命名規則は***最初の文字が大文字の単数形***）
　基本構文は以下の通りです。
　`rails g model モデル名 カラム名:データ型`
　例えば以下のようになります。
　`rails g model Content name:string email:string`
　rails g modelを実行するとモデルと同時にマイグレーションファイルも生成されます。なのでrails g migrationは実行不要です。もし、先にマイグレーションファイルを作成してしまったら
`rails g model モデル名 --skip-migration`でmodelだけを作成し、マイグレーションファイルは作成しないようにしてください

3.rails db:migrateを実行してテーブルを作成する
　rails db:migrateを実行することで初めてテーブルが作成されます。

# コントローラを作る（この時controller名は<font color="red">小文字の複数形にする</font>こと）
基本構文は以下の通り
　rails g controller コントローラー名
　例は以下の通り
　 rails g controller contents

# コントローラでアクションを定義する
CRUD（Create, Read, Update, Delete）操作に対応する7つのアクション（index, new, create, show, edit, update, destroy）の中から必要なものを定義します。

# ビューを作る
コントローラのアクションに対応するビューファイルを作成します。例えば、新規作成用の画面を表示するnewアクションに対するnew.html.erbや、編集用の画面を表示するeditアクションに対するedit.html.erbなどを作成します。

# routes.rbを定義する
get '/contents', to: 'contents#index'のようにルーティングを一つ一つ書く方法もありますが、これでは時間がかかるためCRUD操作に対応する7つのルーティング（index, show, new, edit, create, update, destroy）を一度に定義するために、resourcesメソッドを使うことが一般的です。以下のように書くことで全てのCRUDルーティングを定義できます。
`resources :コントローラ名`
また、特定のroutesを定義したい時はonlyを使って指定してあげることもできます
資格を取る本当の意義について気が付いた話

# 本記事の内容と目的
これまでの僕は資格を取る必要性が分からなかったため、
資格に対する勉学を何にもしてきませんでした、、
しかし、様々な資格を保有する先輩社員から頂いた意見によって資格に対する意識が激変しました！
そのＥＰを共有することでエンジニアの資格に対する意識を変えられたらなと思います！

# 資格に対する僕のもともとの考え方
- 資格取っても実務でそのまま使えるわけじゃないし、取っても意味ないのではないか、、
- 資格取るくらいなら自作でゲームとか作ったほうが技術力つくんじゃないか？
- デキる人は「資格とっても技術力的にも市場価値的にも意味ないよ」って良く言うし
やっぱり意味ないんだー
...

# そんな中で先輩社員に言われたこと
パイセン：SASAKOHって最近勉強とかしてるのかい？例えば資格とか取ってるの？

ワタクシ：はい！マネジメント・設計・技術の書籍を読んでます！
　　　　　でも資格は何にもないです、、
　　　　　取るくらいなら自作ゲームとか作ったほうが良いって聞くので、取らなくてもいいかなって

パイセン：確かに業務に直結しない資格もあるから**資格取得＝業務がデキる**訳ではないかもしれないねー

ワタクシ：ほうーやっぱじゃあ資格取るよりも自作ゲームつくりした方が技術力って身に付くんですね！

パイセン：いやオレはそうは思わないよ！
　　　　　まず大体にして、それは資格取ってない人の意見でしょ？？
　　　　　資格取ってる人はそう思ってないと思うな笑

ワタクシ：なら資格取る意義って何なんすか？？

パイセン：資格を取る意義は大きく2個あると思う！
　　　　　①：確かで共通的な知識を身につけることが出来る
　　　　　②：それが必要な知識なのかを判断することが出来る　かな！

ワタクシ：それぞれ説明してください、、🙇

パイセン：おけ！まずは、**①：確かで共通的な知識を身につけることが出来る**についてだけど、
　　　　　まず、資格って公的な組織が基本的には定めているよね？
　　　　　つまり、**確かな組織が定めた技術レベル**な訳だから、確かな知識を得られるって訳だよね！
　　　　　しかも、資格を取るに必要な学習は決まっているから、資格取りたい人は**同じ勉強**するよね！
　　　　　なので、その資格を取得すること**＝確かで共通的な知識**を取得できるんだよ！

ワタクシ：ほうほう！確かに自作ゲームを作るだけでは、
　　　　　**自分が必要としている知識を自分だけが勉強すること**になるので、
　　　　　自作ゲームつくりよりも資格の勉強の方が優位性が高いのかも！と思ってきました！
　　　　　では次に②についても説明してくだせえ🙇

パイセン：そうそう！そういうこと！
　　　　　**②：それが必要な知識なのかを判断することが出来る**についてね！
　　　　　資格を取る勉強をするとそれに関連する周辺知識が身につくよね？
　　　　　その過程で自分に不足していた知識が身につく訳だけど、
　　　　　その知識が付いていないと、**その知識が本当に必要か否かって判断できないのよー**
　　　　　だって、知識がないのに「その知識必要ないです！」ってなんの根拠もないでしょ？笑
　　　　　つまり、**知識が身についていないと、その知識自体が必要か否かの判断はできない。**
　　　　　だから、資格を取るって必要なんだとオレは思うよ！

ワタクシ：なるほど、、確かに資格の勉強は公的な組織が定めてて、それが不必要な訳ないし、
　　　　　それを勉強しないと見えない世界ってありますね、、
　　　　　資格意味ない派閥、脱退しようと思います、、
　　　　　ちなみにおすすめの資格って何かありますか？？

パイセン：ようこそ資格の世界へ。
　　　　　個人的には**DBスペシャリスト**がおすすめだね！
　　　　　この資格を取る過程でＤＢの正規化の知識が身につくんだけど、
　　　　　個人的には、この知識を身に付けている人とそうでない人では
　　　　　ＤＢ周りの捉え方が全然違うと感じるかなー
　　　　　最低限これは取っておくべきかなと思う！

ワタクシ：ＤＢスペシャリストですね！
　　　　　よし！絶対取ります！！ありがとうございます！！

# まとめ
### 資格を取得する意義
1.  確かで共通的な知識を身につけることが出来る
    →公的な組織が策定しているため、**確かな知識**で、
    　資格取得のためには勉強しなくはいけないことが決まっているので**共通知識**が身に付く。
1.  それが必要な知識なのかを判断することが出来る
    →資格を取得する過程で身に付く知識を得ていないと**それが本当に必要な知識なのか**判断できない。
### おすすめの資格
**DBスペシャリスト**
→DBをいじるなら正規化の概念が必須であるため、おすすめ


指摘や不明点等を教えて頂けると幸いです！
最後まで読んで頂きありがとうございました！
TIOBE INDEX人気プログラミング言語ランキング

昨今、各社メディアがGitHubのコミット数や某転職サイトの求人票から人気言語ランキングを発表しています

同じようにTIOBEというオランダの企業が集計している人気プログラミング言語ランキングを公表しているサイトがありました

サイトはこちら
・TIOBE INDEX
https://www.tiobe.com/tiobe-index/

TIOBE INDECの集計方法は公式には下記のように記載されています
>TIOBE Programming Community indexは、プログラミング言語の人気を示す指標です。指数は毎月1回更新されます。評価は、世界中の熟練エンジニアの数、コース、サードパーティーベンダーに基づいています。評価の算出には、Google、Bing、Yahoo！、Wikipedia、Amazon、YouTube、Baiduなどの人気検索エンジンが使用されています。TIOBEインデックスは、最高のプログラミング言語や、最も多くのコードが書かれた言語に関するものではないことに注意することが重要です。
(原文をDeepLで翻訳したもの）

月別にプログラミング言語の人気ランキングを集計しています

7月のランキングは
1位 Python
3位 C
4位 C++
5位 Java
6位 C#
7位 JavaScript
8位 VisualBasic
9位 SQL
10位 PHP

日本でジワジワ人気が出ているGO言語は13位
国産のRubyは16位
Rustは17位
Swiftは18位という結果でした
コミットの直前にrubocopを自動実行する

Railsアプリケーションの開発において、「よしできた、git push!」したあと、GithubでPRをみるとCIでバツマークがついていた。チェック結果をみたらrubocopでフォーマットエラーを吐いていた・・なんて経験はありませんか？　私はあります。

これを解決する方法が実はありました。

## 前提とする読者
- Railsでアプリケーションを開発している人
- CI環境が整っていて、rubocopを使っている人

## 簡単な方法
gitコマンドでは、フックという仕組みがあり、git commitコマンドの直前に自前のプログラムを実行させることができます。開発中のディレクトリの中に、`.git/hooks` というディレクトリがあるはずです。
`.git/hooks/pre-commit` というファイルを準備して、そのなかで

```
bundle exec rubocop -a
```

を書いておきます。
（コミットの前に　`.git/hooks/pre-commit`　ファイルがそのまま実行されるので、`chmod +x .git/hooks/pre-commit` として、実行権限を追加しておくことを忘れずに！）

その後、適当なファイルを変更し、コミットすると rubocopが自動で実行されるようになります。

#### rubocopのオプションについて
rubocopのあとについている `-a` はrubocop警告対象のファイルを自動で修正してくれるオプションです。
小文字の `-a` であれば、RuboCopが安全と判断した自動修正のみを行ってくれます。
大文字で `-A` とすると、全ての修正候補を自動で修正してくれますが、RuboCopが元のコードの意図を誤解する可能性がある場合や、修正が元のコードの挙動を変更する可能性がある場合があるそうです。

## 開発メンバーで設定を共有したい場合
ただし、`.git`以下のファイルはGit管理されていません。この設定をプロジェクトの他の開発メンバーに使ってもらうにはどうしたらよいでしょうか？
もちろんメンバー全員に `.git/hooks/pre-commit` ファイルの内容を共有し、使ってもらう、という方法でもOKですが、開発が進むうちにrubocop以外のコマンドも自動実行させたくなるかもしれません。
そこで、lefthookというツールがあります。

- [lefthook](https://github.com/evilmartians/lefthook)

lefthookは、gitのhooksファイルを管理するツールです。

インストールは、Macであれば以下でOKです。
```
$ brew install lefthook
```

プロジェクトのディレクトリにて
```
$ lefthook install
```

コマンドを実行すると、`lefthook.yml` ファイルが作成されます。その中の、pre-commitのあたりを編集します。今回の場合は、以下のようにしてみました。

```
pre-commit:
  parallel: true
  commands:
    rubocop:
      run: bundle exec rubocop -a
```

このファイルの内容を反映させるため、以下を実行します。

```
$ lefthook add pre-commit
```

反映後、git commitコマンド直後に rubocopコマンドが実行されるようになります。

この例ではrubocopだけを実行させるようにしていますが、`lefthook.yml`ファイルを編集すれば、例えばrubocopの後にstylelintのチェックを走らせたりすることも可能そうです。適宜、お試しください！

### まとめ
この記事では、
- git commitの直前に rubocopチェックを自動で実行する方法
- gitフックまわりのファイルを管理するための、lefthookの紹介
についてまとめました。ぜひぜひ、使ってみてください！
WSL2がE_INVALIDARGで起動不可

WSLが起動しなくなった

```
パラメーターが間違っています。
Error code: Wsl/Service/CreateInstance/CreateVm/E_INVALIDARG
```


```
>wsl --version
WSL バージョン: 1.2.5.0
カーネル バージョン: 5.15.90.1
WSLg バージョン: 1.0.51
MSRDC バージョン: 1.2.3770
Direct3D バージョン: 1.608.2-61064218
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.25905.1000
```

2023年7月の定例で降ってきたWindows11のinsiderのアップデート当てたらこれだ
もう直接almalinux入れるかな

やったこと
```
>wsl --update
更新プログラムを確認しています。
Linux 用 Windows サブシステムの最新バージョンは既にインストールされています。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606569/1a96cc1b-1856-ce9b-8e65-e145be00c39b.png)

適当にoff-onしてもダメ、Windows ハイパーバイザープラットホームは多分使ってない初期はオフだった。どっちでも動作変わらず

exportも引数あってるかわからんが同じエラー

```
>wsl --export AlmaLinux-8 aaa
エクスポートが進行中です。これには数分かかる場合があります。
パラメーターが間違っています。
Error code: Wsl/Service/CreateVm/E_INVALIDARG
```

→ Windows 11 Insider Preview 25905 が原因の模様、回復して25905を削除したら元に戻った
【初期設定】iTerm2おすすめの設定

# iTerm2とは

iTerm2はMacのターミナルを使いやすくするアプリです。iTerm2を使用すると、自分好みの設定を行うことができます。たとえば、見た目や操作方法をカスタマイズしたり、便利な機能を追加したりすることができます。

参考URL：https://iterm2.com/index.html

https://iterm2.com/index.html

# 今回の設定内容

今回の設定の目標は、以下のスクリーンショットのような見た目にします！！
![スクリーンショット 2023-07-15 10.19.20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552607/f9ed20e7-8afa-97bc-5f09-d24513fb511e.jpeg)

# 設定手順

## ①Oh My Zshのインストール

まず、Zshのフレームワークである「Oh My Zsh」をインストールします。以下のコマンドを実行してください。

```zsh
$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```

https://ohmyz.sh/

:::note warn
Oh My Zshのインストールすると.zshrcの内容が書き換わるため、既存の設定がある場合はバックアップを作成しておくことをおすすめします。
自分はここで元々設定したものを上書きしてしまい悲しい思いをしました😭
:::

## ②フォントとテーマのセットアップ

### フォントのセットアップ

```zsh
$ git clone https://github.com/powerline/fonts
$ cd fonts
$ ./install.sh
```

参考サイト：https://github.com/powerline/fonts

https://github.com/powerline/fonts

iTerm2 > iTerm2 > Preferences... > Profiles > Text から下記設定を行います。

- Fontのプルダウンから「Inconsolata for Powerline」を選択する
- Use a different font for non-ASCII textのチェックボックスにチェックを入れる
- Non-ASCII Fontのプルダウンから「Inconsolata for Powerline」を選択する

![スクリーンショット 2023-07-15 10.40.36.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552607/244ff509-5b20-1ab7-a982-737fe9c77920.jpeg)

### テーマのセットアップ

今回は`Cobalt2`というテーマを使用します。

```
$ git clone https://github.com/wesbos/Cobalt2-iterm.git
$ cd Cobalt2-iterm
$ cp cobalt2.zsh-theme ~/.oh-my-zsh/themes/
```

参考URL：https://github.com/wesbos/Cobalt2-iterm

https://github.com/wesbos/Cobalt2-iterm

以下のコマンドで.zshrcファイルを開き、設定を変更します。

Vimで.zshrcファイルを書き換えます。
```zsh
$ vi ~/.zshrc
```

.zshrcファイルの下記箇所を変更します。

```diff
- ZSH_THEME="robbyrussell"
+ ZSH_THEME="cobalt2"
```

![スクリーンショット 2023-07-15 11.47.48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552607/3b42346e-d446-046b-84cd-ec41aa16ccf6.jpeg)


次に、iTerm2 > Preferences... > Profiles > Colors から下記設定を行います。

1. 「Color Presets…」から「Impor…」を選択する
2. 「cobalt2.itermcolors」を選択してインポートする
3. 「Color Presets…」から「cobalt2」を選択する

![スクリーンショット 2023-07-15 10.58.48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552607/57899fbe-d012-9a6e-cba3-eb4e5d80c2e2.jpeg)

## Zshの設定を反映

- `source ~/.zshrc`を実行する
- iTerm2を再起動する

## その他の設定

### 背景を透過する

iTerm2 > Preferences... > Profiles > Window から

Transparency を適当に右にスライド
Keep background colors opaque にチェック

### スクロールバック設定(行をスクロールで戻れるかの行数設定)

iTerm2 > Preferences... > Profiles > Terminal から

デフォルトが2000行と少ないので適当に増やしておきましょう。


これで完成です🎉🎉🎉🎉🎉

他のテーマにしたい場合[このサイト](https://github.com/ohmyzsh/ohmyzsh/wiki/themes)にいろいろあります。

この設定もおすすめだよ！というものがあれば是非教えてください！！
【Microsoft Bing Chat】戻った&新機能発見

:::note info
本記事は、ChatGPT（無料版）で
行なっております。GPT4での確認
はできておりません。あしからず。
:::

　どうも、カーブミラーです。

　今回は、
　　ChatGPTさんではなく、
　　　MicrosoftBingさんです。
　　　　GoogleBardさんも少々。

　以前に
[【Microsoft Bing Chat】のあの三つのモードが消えた！？](https://qiita.com/kabumira/items/fbd32792734b621e2d8c)
　　で、
　　　あの有名なインターフェース
　　　　（創造的/バランス/厳密）
　　　　　が、消えた、と
　　　　　　書きました。

　それが、
　　おそらく、ここ数日ほどで、
　　　復帰しました。
***
　そんなBingさんに
　　別の変化が……。
　　
　MicrosoftBingさんの入力枠に、
　　Googleレンズ的なマークが。

　使ってみたら、
　　画像の解析が可能のようです。

　使い方は、
　　1.何も入力せずに、
　　　　レンズマークをタップ。
　　2.画像撮影
　　　　入力枠に、
　　　　　画像のサムネイルが
　　　　　　入ります。
　　3.プロンプトに
　　　「OCRして」とか
　　　　「要約して」と
　　　　　入力して送信するだけ。

　下記は、
　　池袋のサンシャイン60の
　　　ベビーカー貸出サービスの
　　　　立て札を撮影して、
　　　　　OCRを依頼した結果です。

　OCRというよりは、
　　要約かも。

>前回送信された画像には、日本語と英語で書かれた看板が写っています。看板は、ピンクのテキストとピンクの枠線が付いた白いもので、タイル張りの壁に掛けられています。日本語のテキストには、「ベビーカー貸し出しサービス」と「入場制限あり」と書かれています。英語のテキストには、「Baby Stroller Rental Service」と「Feel free to make use of this service」と書かれています。看板には、サンシャインシティ内での利用制限や、2歳以下の子供である必要があることなど、日本語と英語で制限事項が記載されています。また、営業時間も記載されており、10:00から20:00までです。

***
　GoogleBardさんも
　　実は、
　　　見た目に
　　　　変化はありませんけど、
　　　　　メニューを見ると、
　　　　　　いろいろと
　　　　　　　変わっています。

　　また、
　　　返答を音声出力してくれる
　　　　機能も追加されています。

　　　さすがに、
　　　　音声入力は、
　　　　　スマホの機能で
　　　　　　行なうしか
　　　　　　　ありませんけどw
***
　GoogleBardさんも
　　MicrosoftBingさんも
　　　基本的に、毎日、
　　　　アクセスして
　　　　　いるんですけど、
　　　　　　たまに変化があります。

　みなさんも
　　たまには、
　　　アクセスしてみても
　　　　悪くない、かもw