OmniAICreator/Qiita-1.07M huggingface dataset:
WorkatoでKintoneのレコード一括取得方法の紹介

# はじめに
今回は、特にWorkatoでKintoneレコードを一括で取得する方法について話したいです。KintoneのConnectorを利用して、レコードを取得するレコード数は100個が限定しています。もし、Kintone上のレコードIDとworkatoのLists by Workatoアプリを活用すれば、kintoneのレコードを一括で取得できます。

# レシピ構築方法

考え方としては、[offset の制限値を考慮した kintone のレコード一括取得について](https://cybozu.dev/ja/kintone/tips/best-practices/kintone-get-records-with-offset-limitation/ "kintone")こちらのリンクから参考してください。今回は、特にレコード IDを利用して、レシピを作成しました。

具体的には、まず「Lists by Workato」を選択して、「Create repeat helper list」というActionを利用して、繰り返す数を保存ためのリストを作成します。

次に、「Variables by Workato」で「Create list」というActionを利用して、Kintoneで取得したデータをリストの中に保存します。

最後に、レコード IDを管理するために、「Lists by Workato」を利用して、レコード番号表を作成しました。

というわけで、準備作業が完了。
![Screenshot 2023-12-10 at 18.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3635209/120ec867-1d0c-ee10-991c-97f2070ebbc9.png)

次に、Step2で作成した繰り返すリストを用いて、Repeat Acitonで繰り返すデータを取得します。![Screenshot 2023-12-10 at 18.31.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3635209/30de8f07-9498-4dfe-dded-fa1fad0f7c02.png)
特にクエリのところに、ID 順にレコードを取得を絞り込み必要があります。

![Screenshot 2023-12-10 at 18.34.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3635209/5c58a599-37b8-52f0-5f09-13b682972317.png)

その後で、毎回繰り返す際に、StartレコードIDとEndレコードIDの更新を忘れないように繰り返すで全てのデータを取得します。

# 終わりに
最後まで見てくれてありがとうございます！！
最後、kintone ✕ Workatoのセミナーを紹介します。[kintone ✕ Workatoで業務改善に自動化をプラス！| Workato Connect! – kintone編](https://discover.workato.com/connect-kintone/p/1?utm_source=pr&utm_medium=webinar&utm_campaign=connect-kintone "workato")もしWorkatoで何かを自動化する興味がある方がいましたら、ぜひ活用してください。
今更Java8環境にJenkinsを入れる

# はじめに
すでに動いてるJenkinsをスペックの良い別PCで動かそうと環境を作っていたが、
諸事情によりJava8しか使えないことになりました。
その際に色々と手間取ってしまったので記録しておこうと思います。
環境はWindows10です。

本記事執筆時点でのJenkinsのJavaサポート状況は以下の通りです。
最新のJava Support Policyはこちらから確認できます。
https://www.jenkins.io/doc/book/platform-information/support-policy-java/

|Javaバージョン|LTS release|Weekly release|
|----|----|----|
|Java11, Java17, Java21|N/A|2.419|
|Java11, Java17|2.361.1|2.357|
|Java8, Java11, Java17|2.346.1|2.340|

このようにJava8は最新のJenkinsではサポートされていないので、環境作りが苦手な私にはつまづきポイントがいくつかありました。
※もっと良い方法はあると思うので、参考程度にお願いします。

# 手順

## Jenkinsのダウンロード
まずはJenkinsのダウンロードページからJenkinsのをダウンロードしてきます。
https://www.jenkins.io/download/
Java8に対応しているバージョンなので2.346.1にしました。

最新のバージョンであればWindows用に.msiが用意されているのですが、古いバージョンには.warしかないのでそれを落としてきます。（ここで慣れない私は少し心配になる）

## Jenkinsのセットアップ
コマンドラインから下記のコマンドでJenkinsを起動します。
`java -jar jenkins.war`

そのあとの手順は通常のセットアップと同じなので省略しますが、注意点として**プロキシの設定はしない**ことです。（理由は後述）

一通りセットアップが完了したら、「Jenkinsの管理」＞「Windowsのサービスとしてインストール」をします。

これでJenkinsが使えるようになりました。

## プラグインのインストール
ここが一番つまづいたところになります。

通常であればプロキシの設定をして、インストールしたいプラグインにチェックを入れて一括インストールができるのですが、Java8に対応した古いJenkinsを入れたことで最新のプラグインのインストールに失敗してしまいます。

古いJenkiinsのバージョンでも動くプラグインを手動で入れるため、すでに動いていた環境のバージョンを参考に下記から落としてきました。
(http://updates.jenkins-ci.org/download/plugins/)

一通りプラグインを落としてきたら、「Jenkinsの管理」＞「プラグインの管理」＞「高度な設定」から.hpiファイルをアップロードしていきます。
プラグインにも依存関係があるらしく、アップロードしようとしたらこのプラグインが必要だと怒られるので、そちらを先に入れるようにしてください。

この時、プロキシ設定をしているとすでにアップロードしたプラグインが最新バージョンに置き換わってしまい、結局使えないという問題に遭遇しました。
（プロキシ設定を消せばいいだけなのだが、結構つまづいてしまった）

## ジョブの設定
ここはポチポチ設定していくだけで、特につまづくところはありませんでした。
ジョブを実行して、ちゃんと動くことを確認できました。

# まとめ
つまづいたところとそれに対する解答を簡単にまとめます。

* 古いバージョンのJenkinsは.warしかダウンロードできない 
→ コマンドから起動できる

* Windowsのサービスとして使いたい
→ セットアップ後にJenkinsの管理からWindowsのサービスとして設定できる

* プラグインのインストールに失敗する
→ 古いバージョンのプラグインを手動でアップロードする。その際、プロキシが有効だと依存関係のあるプラグインの最新バージョンを取ってきてしまうので注意。

以上です。
Eloquentのwhereメソッドを簡潔に書く

## 概要
普段Eloquentでwhereメソッドを使う際、こんな感じで書いていると思います

```php
$users = User::where('is_active',true)->get();
```

実は「＝」の式ならメソッド名とカラムをくっつけてクエリが組み立てれちゃいます

## 例

```php
$users = User::whereIsActive(true)->get();
```

`where` + `アッパーキャメルケースのカラム名` で実現出来ます。
Flutter for web でHTMLデータを表示

Platform WebのアプリとしてStringに代入したHTMLを表示するサンプルコードを作成する。

# 確認環境
```
% sw_vers
ProductName:		macOS
ProductVersion:		14.0
BuildVersion:		23A344
% flutter --version
Flutter 3.13.9 • channel stable • https://github.com/flutter/flutter.git
Framework • revision d211f42860 (6 weeks ago) • 2023-10-25 13:42:25 -0700
Engine • revision 0545f8705d
Tools • Dart 3.1.5 • DevTools 2.25.0
% 
```

# コードの構成
- 「dialog」と表示されているボタンを押下する事で、SimpleDialogを表示し、あらかじめ固定値として設定したHTMLデータをレンダリングし表示させる。
- htmlをレンダリングするために標準パッケージのdart:ui_web、dart:htmlを利用する。
- dart:htmlは、web以外のPlatformでは推奨されない、または利用不可のライブラリの模様。

```
Don't use web-only libraries outside Flutter web plugin packages.
Try finding a different library for your needs.dartavoid_web_libraries_in_flutter
```

```dart
import 'package:flutter/material.dart';
import 'dart:ui_web' as ui;
import 'dart:html';

void main() {
  runApp(
    MaterialApp(
      home: Scaffold(body: MyApp()),
    ),
  );
}

class MyApp extends StatelessWidget {
  final IFrameElement _iframe = IFrameElement()
    ..srcdoc =
        "TEST10<br/><font size='5'>TE</font>ST<font color='red'>20</font></br><img src='https://storage.googleapis.com/cms-storage-bucket/6a07d8a62f4308d2b854.svg'/><br/>TEST30</br>TEST40</br>TEST50</br><a href='https://www.google.com' target='_blank'>https://www.google.com'</a><br/>TEST60"
    ..style.height = "100%"
    ..style.width = "100%";

  MyApp({super.key});
  
  @override
  Widget build(BuildContext context) {
    ui.platformViewRegistry.registerViewFactory(
      'id',
      (int viewId) => _iframe,
    );
    return Container(
      alignment: Alignment.center,
      child: ElevatedButton(
        child: const Text(
          'dialog',
        ),
        onPressed: () => {
          showDialog(
            context: context,
            builder: (_) => const SimpleDialog(
              title: Text('title'),
              children: [
                SizedBox(
                  height: 100,
                  child: Scrollbar(
                    child: HtmlElementView(
                      viewType: 'id',
                    ),
                  ),
                ),
              ],
            ),
          )
        },
      ),
    );
  }
}
```

# 実行
テキスト以外にもリンクやイメージのレンダリングも正しく処理され表示することができた。

![スクリーンショット 2023-12-10 18.28.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50452/f1fc19f8-d143-a7d6-5b80-90f350e4c1d3.png)
![スクリーンショット 2023-12-10 18.28.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50452/cf7017db-f8a5-5921-6639-b7fd86ecd2ad.png)
![スクリーンショット 2023-12-10 18.28.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50452/7ddf1c9f-ce4e-3b48-2473-c33fd07f2c8f.png)
![スクリーンショット 2023-12-10 18.28.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50452/f6042331-43cf-6225-0384-c3dc9764299a.png)
5分でわかるLLM 

# はじめに
初心者向けのLLMの説明記事です。「LLMってChatGPTみたいなものだけど、意味が曖昧でよくわかってない」という方や、「LLMがどういう仕組みかわからない」という方におすすめの記事となっております。

# 記事の要約
- ChatGPTなどの対話型AIの基盤となっているのが大規模言語モデル(**L**arge **L**anguage **M**odel)
- 言語モデルとは文章を**確率**で表現するモデルで、それを**大規模**にしたものがLLM
- つまり、言語モデルの**パラメータ数**と**学習させるデータ量**を増大させることで、高精度な文章生成を可能にした。
- LLMの技術的な発展の勢いは止まらず、ビジネスにおける活用も様々な企業で考えられている

# LLMとは
ChatGPTは対話形式で答えてくれるチャットボットですが、ルールベースのチャットボットとは違ってAIが答えてくれています。そういうものを、対話型AIと呼びます。LLM(Large Language Model：大規模言語モデル)は、ChatGPTのような対話型AIに使われているAIモデルのことを指します。ChatGPTは「GPT」というLLMから作られており、それを活用したチャットのサービスと考えることができます。(※GPTだけでは、文章のあとに続く文章を考えるものとなっていますが、ChatGPTは対話できるように調整されています。)

# 言語モデル
ここで、大規模言語モデル、すなわちLLMの「言語モデル」について説明します。言語モデルとは、文章中の単語の後に続く単語の出現確率を計算するモデルのことで、大量の文章を学習することでそのようなことを可能にしているのです。これだけではピンとこない方も多いと思いますので、具体例で説明します。

### 一般的なAIモデルの学習と推論
そもそも、AIのモデルは学習と推論の二つのプロセスに分かれています。犬と猫の画像判別を例に考えます。犬と猫の画像をAIに教え込ませるプロセスが学習です。画像に対してちゃんと犬か猫か答えを与えるのです。学習した結果、犬の確率が何%で猫の確率が何%なのかを判別するモデルが完成します。そして、推論する際には、画像しか与えません。そうすると、その画像が犬なのか猫なのかを予測してくれます。

### 言語モデルの学習と推論
言語モデルの学習プロセスでは、大量の文章データを言語モデルにいれます。それによって、ある文章の次に続く単語を学習していきます。例えば、「今日の天気は晴れです。」という文章があったとして、「今日の天気は」という文章に続く単語は「晴れ」なので、その文章に対して「晴れ」という答えを言語モデルに与えているというわけです。学習した結果、文章を確率で表現するモデルが完成します。

推論は、ChatGPTで文章を入力して回答が返ってくるプロセスと同じです。例えば、「今日の天気は」という文章を言語モデルに入力として与えたとします。そうすると、言語モデルは次にどんな単語が続くかを確率に従って考え、「晴れ」という単語が続く確率が高そうだという結論になったら、「晴れ」を出力しています。そして、言語モデルに「今日の天気は晴れ」と入力すると、確率の高い「です」が出力されます。それを繰り返して文章が作られていきます。

# 大規模化
LLMはLargeとついていますので、「大規模な」言語モデルです。何が大規模なのでしょうか。それは、パラメータ数と学習させるデータ量です。AIのモデルは、いくつもの数式で成り立っています。単純な数式y=ax+bで考えますと、パラメータというのはaやbにあたるものです。パラメータ数を大規模にすることで、複雑な処理を可能にしました。GPT-3に関していえば、パラメータ数=1750億、学習させる文章量=45TBなので、ものすごく大規模であることがわかります。

# LLMの発展
この一年間のLLMの技術的な発展の勢いはすさまじいものでした。LLMの機能は文章生成だけでなく、データ分析など多岐にわたっております。さらに、入力に使えるのは文章だけではありません。画像や音声も入力可能となり、マルチモーダルへの取り組みも広がっています。こうした、LLMの機能をビジネスに活用しようと考えている企業がたくさん出てきています。社内でのLLM活用についても記事を書きましたので、ご興味のある方はご覧ください。

# おわりに
LLMについて自分なりに整理しました。LLMは単純なようで複雑なようにも思います。記載内容に誤りがございましたらご指摘いただけたらと思います。
postgresqlその②　データベースやテーブル作成など

## データベース作成から

以下の方法で実施するとデータベースが作成できた。

https://www.smpl-rfrns.net/SQL/PostgreSQL/create_database.html

```
[postgres@docker163 ~]$  createdb testdb -U postgres
[postgres@docker163 ~]$
[postgres@docker163 ~]$
[postgres@docker163 ~]$ psql
psql (10.23)
"help" でヘルプを表示します。

postgres=# \d
リレーションが見つかりませんでした。
postgres=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 testdb    | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
(4 行)

postgres=#

```
## testデータベースにログインする

```
[postgres@docker163 ~]$ psql -d testdb
psql (10.23)
"help" でヘルプを表示します。

testdb=#
```

## テーブルを作成してみました

```
testdb=# CREATE TABLE test(id char(4) not null,name text not null,food text not null,PRIMARY KEY(id));
CREATE TABLE
testdb=#
testdb=#
testdb=# \d
           リレーション一覧
 スキーマ | 名前 |    型    |  所有者
----------+------+----------+----------
 public   | test | テーブル | postgres
(1 行)

testdb=#
```

## 軽くSQLを実行　どうも最後に「;」が必要！！
```
testdb=# select * from test;
 id | name | food
----+------+------
(0 行)

testdb=#

```

## showコマンドも実行できる

```

testdb=# show max_connections;
 max_connections
-----------------
 100
(1 行)

testdb=#

```



### 次回課題
ANALYZE
vacuum
backup
restore
などなど
配列のソート/反転/要素数のカウント/配列末尾への追加 Python3編

https://paiza.jp/works/mondai/array_primer/array_primer__array_sort

こないだコメントで教えていただいたのが早速（出力で）役に立った！
まったく便利だなぁ
答えを見たけど、下記を簡単に書いたものだったので省略

```py
N = int(input())
A = list(map(int,input().split()))
print(*sorted(A), sep="\n")
```

簡単すぎたので次の問題も

https://paiza.jp/works/mondai/array_primer/array_primer__array_reverse

```py
N = int(input())
A = list(map(int,input().split()))
print(*reversed(A), sep="\n")
```

やっぱり簡単だったので次の問題も

https://paiza.jp/works/mondai/array_primer/array_primer__elm_count

```py
N, M = map(int,input().split())
A = list(map(int,input().split()))
print(A.count(M))
```

次の問題。。。

https://paiza.jp/works/mondai/array_primer/array_primer__push_back


```py
N, M = map(int,input().split())
A = list(map(int,input().split()))
A.append(M)
print(*A,sep="\n")

```

さすがにここでやめとくか。。。
次の投稿いきます。
【Elixir アンチパターン】  Exceptionより、パターンマッチ

# Elixir アンチパターンを読んでみる

[exception for control-flow](https://hexdocs.pm/elixir/1.16.0-rc.0/design-anti-patterns.html#exceptions-for-control-flow)を読んでみます

Exceptionを使う事自体はアンチパターンではないけど、
- Exceptionではなく、パターンマッチで記述する方法を好んだほうが良い
- ライブラリー開発の側の場合、Exceptionでしか異常時の処理を行えないライブラリーはアンチパターン。

Exceptionを使うコード
```Elixir
defmodule MyModule do
  def print_file(file) do
    try do
      IO.puts(File.read!(file))
    rescue
      e -> IO.puts(:stderr, Exception.message(e))
    end
  end
end
```

パターンマッチを使うコード
```Elixir
defmodule MyModule do
  def print_file(file) do
    case File.read(file) do
      {:ok, binary} -> IO.puts(binary)
      {:error, reason} -> IO.puts(:stderr, "could not read file #{file}: #{reason}")
    end
  end
end
```

ファイルから読み込む関数はFile.read!とFile.readの二つがあり、前者はExceptionを発生させる。後者は、エラー時には{:error, reason}を返します。
Elixirのライブラリーなので当然、パターンマッチで判定できるタイプFile.read()が提供されていますね。

Pythonだと、戻ってくる値がエラーかどうかの判定の記述はせず、異常系の処理は例外で記述してみやすくなるので例外処理はよく使います。
Elixirでは、戻り値の判定がパターンマッチを使うことで、正常系の記述の邪魔する事なく書けるので事情が違いますね。

Exceptionは、Pythonのbreak的な事がしたくて、Exceptionを使った例を以前書きました。
https://qiita.com/GeekMasahiro/items/260b823e8defa42ccc15
Exceptionは、手続き型の言語に慣れてる人（私含む）には結構便利なんですよね。なにか処理を中断するときに使えたりして。

でもこの例外の発想は関数型と相性が悪いんだと思います。
パターンマッチを使いましょう。
【VSCode】Goツールで発生したエラーについて

この記事は、[海洋大技術系サークル Advent Calender 2023](https://qiita.com/advent-calendar/2023/kaiyo-tech)の10日目です。

# 1. はじめに
こんにちは！
主にバックエンドを中心に開発している、大学生です！
最近Goを書く機会が多いのですが、VScodeでGoの拡張機能の依存関係のパッケージインストールでエラーにハマったのでそちらについて書いていきたいと思います。

# 2. 何をしたのか
VSCodeでGoツールをインストールするために、パレッドで以下のように`Go: Install/Update tools`を行いました。
![スクリーンショット 2023-12-09 23.54.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970275/d27651f0-8abc-ed0e-fcd5-6406af7899fd.png)

![スクリーンショット 2023-12-10 0.04.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970275/43823b07-8dd3-a7bd-30d1-122a2dbe5cb7.png)


# 3. 発生したエラー
`Go: Install/Update tools`を実行したところ以下のようなエラーが発生しました。

```
Installing github.com/cweill/gotests/gotests@v1.6.0 FAILED
{
 "killed": false,
 "code": 1,
 "signal": null,
 "cmd": "/opt/homebrew/bin/go install -v github.com/cweill/gotests/gotests@v1.6.0",
 "stdout": "",
 "stderr": "runtime/cgo\n# runtime/cgo\nxcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun\n"
}
```
エラー内容としては、<br>`missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun\n`
ということで、xcrumコマンドが/Library/Developer/CommandLineTools/usr/bin/xcrun\nで見つからないというものでした。
どうやら、xcrumコマンドを使えるようにするために何かインストールしなければいけないみたいです。

# 4. 解決方法
xcrunは、macOSで提供されているXcode Command Line Toolsに含まれているので、こちらをインストールするために以下のコマンドを実行します。
```
xcode-select --install
```

インストール後は、xcrunがインストールされているか確認するために、以下のコマンドで実行します。
```
xcrun --version
```
`xcrun version {数字}.`が表示されればインストール完了です。


再度上記の2で行ったパレッドで`Go: Install/Update tools`を行い、VSCodeの出力で以下の結果のようになればGoツールのインストールができました。
```
Tools environment: GOPATH=/Users/{username}/go
Installing 5 tools at /Users/{username}/go/bin in module mode.
  gotests
  goplay
  dlv
  staticcheck
  gopls

Installing github.com/cweill/gotests/gotests@v1.6.0 (/Users/{username}/go/bin/gotests) SUCCEEDED
Installing github.com/haya14busa/goplay/cmd/goplay@v1.0.0 (/Users/{username}/go/bin/goplay) SUCCEEDED
Installing github.com/go-delve/delve/cmd/dlv@latest (/Users/{username}/go/bin/dlv) SUCCEEDED
Installing honnef.co/go/tools/cmd/staticcheck@latest (/Users/{username}/go/bin/staticcheck) SUCCEEDED
Installing golang.org/x/tools/gopls@latest (/Users/{username}/go/bin/gopls) SUCCEEDED

All tools successfully installed. You are ready to Go. :)
```

# 5. まとめ
今回は、VSCodeの拡張機能の依存パッケージをインストールする際に発生したエラー対処についてまとめました。
意外な詰まりポイントだったので、参考になれば幸いです。
トランジスターモデル。

トランジスターモデルを書いてみた。簡素化してみた。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625232/da1847fb-a39a-299d-f472-4c4f27c97b2d.png)
個人的な図。　トランジスターのイメージ図。私なりの図ではあるが。Eエミッター内部に微量の抵抗があるから、コレクターから流れこむとベースから流れこむしきい値がダイオードと比べて微妙に上がらざるを得ない。通電面がベースより大きいから通電した時のcev電圧がvbeより小さくなるってことを書きたかった。　CEのギャップにBがあるから、安定通電まではhfeが上がっていき飽和が出ると100なら100で安定して領域を増やして行って100%になったら、弁が100%開く事になります。PNP,NPNダイオードが逆だが逆通電もさせられるベースでってのを書いた。細かくごちゃごちゃ書き足したので見にくくなった。
後、雑音は熱で、接合部を均一温度に保たせられると減るのではないか?で、モールド樹脂の伝熱率とか、考えた。
配列の連結 Python3編

https://paiza.jp/works/mondai/array_primer/array_primer__array_join

extendで連結
```py
N,M = map(int,input().split())
A = list(map(int,input().split()))
B = list(map(int,input().split()))
A.extend(B)
for i in A:
    print(i)

```

でも＋でできるらしい。。。
```py
N,M = map(int,input().split())
A = list(map(int,input().split()))
B = list(map(int,input().split()))
Ans = A + B
for i in A:
    print(i)

```
Str::mask()で個人情報を隠そう！！

## 概要
メールアドレスとか、全部表示したくない時、ありますよね？
うってつけなヘルパがあります！

## Str::mask()

```php
$email = 'example@example.com';
//16文字後ろに下がった所から4文字目までを「*」でマスク
$maskMail = Str::mask($email,'*',-16,4);
dd($maskMail);

// 結果:
//"exa****@example.com"
```

これでよくある一定数文字以降を「*」表示させられます！！

## 参考

https://readouble.com/laravel/8.x/ja/helpers.html#method-str-mask
Databricksアシスタントの新たなUIを試してみる

こちらのアップデートで、Databricksアシスタントがデフォルトで有効化されました。なお、管理者画面からオプトアウト(無効化)することが可能です。

https://docs.databricks.com/ja/release-notes/product/2023/november.html#ai-assistive-features-are-enabled-by-default

そして、最近になってノートブックセルの変化に気づきました。右上がキラキラしてる。
![Screenshot 2023-12-10 at 17.50.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/59ca707d-8ec7-45e6-053f-810a5c5b732d.png)

**アシスタントを切り替え**とな。オンにしてみます。
![Screenshot 2023-12-10 at 17.50.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/718b67f4-d5d1-0965-a87c-a1175500c6fd.png)

何か出ました。アシスタントに尋ねるかコマンドのために`/`を入力だそうで。
![Screenshot 2023-12-10 at 17.51.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/15c59e76-c4e4-6845-eb0e-f48f3e59de7d.png)

`/`を入力します。`/doc`はコードにコメントを追加、`/explain`はチャットウィンドウでコードを説明、`/fix`はコードのエラーを修正。
![Screenshot 2023-12-10 at 17.53.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8e514327-6c6e-d3a8-63cb-9f96e3df9ba1.png)
![Screenshot 2023-12-10 at 17.53.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/25e76708-40cb-d802-7a36-9e45ddf1d049.png)
![Screenshot 2023-12-10 at 17.53.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/724d133c-2664-107a-f2c5-955109842b06.png)

説明と修正はこれまでも使えていましたが、`/doc`はどうなるのだろうって、なんか出た。コードにコメントを挿入してくれるんですね。嬉しいですが英語対応してほしい…。
![Screenshot 2023-12-10 at 17.55.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/39c39b19-0fe7-4f45-61c8-2d8c8e870240.png)

承認するとコメントが挿入されます。
![Screenshot 2023-12-10 at 17.55.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8953421e-826b-3bee-9deb-ea64f96a01be.png)

説明は上で言われていた通りコードの説明が表示されます。
![Screenshot 2023-12-10 at 17.56.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/993c7d25-56d4-e1a9-800f-ec4f2089f3bc.png)

エラーが起きた際には`/fix`を入力することで、修正案を提示してくれます。
![Screenshot 2023-12-10 at 18.03.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5b44a9ab-9e64-1448-963d-085fb692eb17.png)


そして、普通にアシスタントに問い合わせをするとコードを生成してくれます。SDKでのクラスターの作り方を聞いてみました。
![Screenshot 2023-12-10 at 17.58.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/37fbe361-4da3-84f2-8391-437e195c8c5c.png)

ますますコーディングが捗ってしまいます。

と、これを書いてからすでに検証されている方がいることに気づきました。不覚(ありがとうございます)

https://qiita.com/isanakamishiro2/items/c7a9530205e503d4985e#_reference-e7e39f74f8cf06fb19e7

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
【Android】Fluid Attacksを利用して脆弱性を検出する手順まとめ

# はじめに
最近GoogleのAPIを使用する際などの事前審査の項目に、脆弱性テストの結果を求められるようになりましたね。
アプリのセキュリティレベルを押し上げるための施策かと思いますが、今回は審査時に必要な脆弱性テストをFluid Attacksを使用して実施するための手順をまとめておこうと思います。

# Fluid Attacksとは？
Fluid Attacksは、Android、iOS、Windows UI用のアプリケーションのセキュリティ脆弱性を検出するサービスになります。
2001年から、テクノロジー業界などのクライアント向けにセキュリティサービスソリューションを開発しています。﻿

# テスト実施手順
まず、環境はMacで実施し、Docker環境がインストール済みである前提でご説明します。
DockerがPC内にインストールされていない場合は、以下を参考に導入しておいてください。

https://matsuand.github.io/docs.docker.jp.onthefly/desktop/mac/install/

上記がすでに環境としてある場合は実施に向け準備を進めていきます。
まず実行に必要なconfigファイルを以下よりダウンロードしておきます。

[config.yamlのダウンロード](https://appdefensealliance.dev/static/casa/tier-2/files/fluid-config.zip?hl=ja)

次に、以下画像を参考に上記configファイルをテスト対象のプロジェクト直下に配置します。

![static-folder-dir.png](https://appdefensealliance.dev/static/images/static-folder-dir.png?hl=ja)

次に、ご自身の環境のCPUのアーキテクチャを確認します。
以下コマンドを実行することで確認可能です。

```
$ uname -m
```

アーキテクチャが判明したら、次は実行に必要なDockerファイルをpullします。

```
$ docker pull ghcr.io/fluidattacks/makes/<arch>:latest
```
archには先ほど調べたアーキテクチャの結果をもとにamd64かarm64のどちらか設定します。

上記pullが完了すれば、以下コマンドを実行し、脆弱性のテストを実行します。

```
$ docker run -v <実行するプロジェクトへのパス>:/working-dir ghcr.io/fluidattacks/makes/<先ほどのアーキテクチャ> m gitlab:fluidattacks/universe@trunk /skims scan ./config.yaml
```

実行は以上です。
問題なく完了すればプロジェクト直下にFluid-Attacks-Results.csvというCSVファイルが生成されるので、結果を見て脆弱性が見つかれば対応し、見つからなければ左記ファイルを審査する際にご提出すれば完了です。

# さいごに
上記コマンドを実行するだけでお手軽に脆弱性テストができるので、便利ですね。
このテストも本番配信前とかに自動化できたらより便利に利用できそうですね。
Dockerを使ったFlaskアプリケーション構築: Step-by-Step Guide

![スクリーンショット 2023-12-10 175938.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/e4e9591d-8b8a-2fbe-7419-4deaa7401b98.png)

## はじめに
このガイドでは、Dockerを使用してFlaskアプリケーションを構築する手順について説明します。FlaskはPythonのウェブアプリケーションフレームワークであり、Dockerを組み合わせることでアプリケーションの環境をコンテナ化し、簡単にデプロイできるようになります。以下では、ステップバイステップで進め、FlaskアプリケーションをDockerコンテナ内で実行する方法を示します。

## ステップ1: プロジェクトのセットアップ
最初に、プロジェクトディレクトリを作成し、次のようなファイル構造を持つディレクトリを作成します：
```
my-flask-app/
|-- app.py
|-- Dockerfile
|-- requirements.txt
|-- docker-compose.yml
```
### ファイルの詳細 ###
app.py : FlaskアプリケーションのPythonコード
Dockerfile : Dockerイメージのビルド設定
requirements.txt : Flaskとその他の依存ライブラリのリスト
docker-compose.yml : Docker Composeの設定ファイル

## ステップ2: Flaskアプリケーションの作成
Flaskアプリケーションを app.py ファイルに作成します。以下は簡単な例です：
```python
from flask import Flask

app = Flask(__name__)

@app.route('/')
def flask_app():
    return 'おめでとう成功だ!'
```
## ステップ3: Dockerfileの作成
次に、DockerイメージをビルドするためのDockerfileを作成します。プロジェクトディレクトリに Dockerfile を作成し、以下の内容を記述します：
```
# Pythonランタイムを親イメージとして使用
FROM python:3.8

# 作業ディレクトリを/appに設定
WORKDIR /app

# 現在のディレクトリの内容をコンテナ内の/appにコピー
COPY . /app

# requirements.txtで指定された必要なパッケージをインストール
RUN pip install -r requirements.txt

# ポートの公開
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0"]

# コンテナ起動時にapp.pyを実行
CMD ["python", "app.py"]
```
## ステップ4: requirements.txtの設定
Flaskとその他の依存ライブラリを requirements.txt ファイルにリストアップします。例：
```
Flask==2.3.3
Werkzeug==2.3.7
```
## ステップ5: Docker Composeの設定
最後に、Docker Composeを使用してFlaskアプリケーションとRedisデータベースを含むコンテナを起動する設定を行います。docker-compose.yml ファイルをプロジェクトディレクトリに作成し、以下の内容を記述します：
```
version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: redis
```
## ステップ6: Dockerイメージのビルドとコンテナの起動
すべてのファイルと設定が完了したら、以下のコマンドを使用してDockerイメージをビルドし、コンテナを起動します：
```
docker-compose build
docker-compose build --no-cache  # キャッシュを無視してDockerイメージを再ビルドする場合
docker-compose up  # コンテナの起動
```
これで、Flaskアプリケーションがポート5000で実行され、Dockerコンテナ内でRedisデータベースが実行されます。ブラウザで http://localhost:5000 にアクセスするか、他のHTTPクライアントを使用してアプリケーションにアクセスし「おめでとう成功だ!」と表示されれば完了です。

## まとめ
今回は、Dockerを使用してFlaskアプリケーションを構築し、実行する方法を解説しました。
「Dockerfile」は環境設定とコンテナ構築に関わり、「requirements.txt」はPythonライブラリの管理に関与します。さらに、「docker-compose.yml」ファイルには、コンテナの構成や相互関係を記述することで、複雑なアプリケーション環境を簡単に構築し、管理できます。
これらのファイルは協力することで、アプリケーションのDocker化プロセスを支え、環境の再現性と依存関係の管理を実現します。アプリケーションの開発から本番環境へのデプロイメントまで、Dockerを活用して効率的な開発と運用を実現しましょう。
updated_atを更新せずにsave()したい？こうやるのよ

## 概要
Eloquentにおいて、`save()`を行うと基本的に`updated_at`が自動で更新されるが、更新させずに`save()`を行う方法がある


## やり方
`timestamps`プロパティに`false`をセットする

```php
$project = Project::first();
$project->timestamps = false;
$project->name = 'hoge';
$project->save();
```

これだけでOK

## 参考
Workato：Workbot for Teamsの403 Forbiddenエラーの解消方法

今回は、初めてTeams Workbotを使い際に、403 Forbiddenがよく出ている可能性があります。今回、403 Forbiddenというエラーの解消方法について話したいです。
# Workbotは？
Workbot for Teams は、Teams 内からビジネスアプリを監視したり操作したりするのに役立つ Workato チャットボットです。
Workbotコマンドを使用して、Teams上からワークフローを実行できます。コマンドが（ダイレクトメッセージまたはチャネルを介して）Workbotに送信されると、Workatoで対応するワークフローが検索され、ワー​​クフローが実行されます。

# 403 Forbiddenエラー
チームボットについての最初のレシーピを構築する際に、403 Forbiddenというエラーが出ている可能性があります。これはどう解決すれば良いでしょうか？
![Screenshot 2023-12-10 at 17.23.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3635209/c193f0c1-9a52-a092-52ad-180423d30f90.png)

# 解消方法
これは、初期インストール時に、アカウントに正しい権限が与えられていないです。Workbot for MS Teamsを利用する際には、以下二つのことを確認しましょう。
・**Microsoftの職場または学校のアカウントを使用しています**
・**Microsoft Graph権限を正しく与えること**
今回は特にMicrosoft Graph権限の与える方法について紹介します。まずは、[Azure](https://portal.azure.com/#home "Azure")をログインする必要があります。次に、Usersを検索して、自分のアカウントをクリックして、Assignedrolesの画面に進めします。

![Screenshot 2023-12-10 at 17.39.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3635209/98197851-374c-2bfb-be5a-12ec82b741ef.png)

その中には、少しともApplication Administrator（アプリケーション管理者
）、Cloud Application Administrator（クラウドアプリケーション管理者）、Global Administrator（グローバル管理者）、Privileged Role Administrator（特権ロール管理者）中の一つをアサインされる必要があります。

# 終わりに
最後まで見てくれてありがとうございます！

Workbot for Teamsに関して、もっと詳しく知りたい方がいましたっら、[Workato](https://docs.workato.com/ja/workbot-for-teams/workbot.html "Workato")
の公式ドキュメントを参考してください。
【Elixir アンチパターン】 booleanか、atomどちらを使うか？

# Elixir アンチパターンを読んでみる

[boolean-obsession](https://hexdocs.pm/elixir/1.16.0-rc.0/design-anti-patterns.html#boolean-obsession)を見てみます。

アンチパターン
```Elixir
defmodule MyApp do
  def process(invoice, options \\ []) do
    cond do
      options[:admin] ->  # Is an admin
      options[:editor] -> # Is an editor
      true ->          # Is none
    end
  end
end
```

お勧めの実装
```Elixir
defmodule MyApp do
  def process(invoice, options \\ []) do
    case Keyword.get(options, :role, :default) do
      :admin ->   # Is an admin
      :editor ->  # Is an editor
      :default -> # Is none
    end
  end
end
```

admin権限かeditor権限の切り替えの実装どっちが良いか？という話です。

アンチパターンの方は、optionsのキーの該当する権限がtrueかfalseで判定する。おすすめの実装は、:roleの値に権限に応じたatomを入れる方式。

アンチパターンの方では、複数の権限がtrueになる場合は発生してその場合優先度の高いほうの動作になる。具体的にはcond文の先に書かれた権限の動作になります。
roleの値はどれか一つというのが要件だったら、おすすめの方法のようにした方が明確です。
速度面でもbooleanの値もatomの一つなので違いはありません。

ONかOFFしかないものであってもbooleanではなくatomにした方がわかりやすい場合の例も書かれてました。

```Elixir
MyApp.update(invoice, approved: true)
```

```Elixir
MyApp.update(invoice, status: :approved)
```

どっちでもいい感じですが、状態が増える事も考えられる感じだったらstatusの方がよさそうだと私も思います。

booleanに固執せず、atomで表現する事も検討してみましょう。
Markdownで職務経歴書作ってみた

職務経歴書を直すにあたってWord不便だな...と思ったのでMarkdownを使ってみたので、備忘録と感想。


## Wordの何が不便なのか
まずはそもそもWordの何が不便やったんやという話。
前提として私は反Office勢力ではありません。
今回も職務経歴書やるかーと脳死でWordを開きました。
が、文字と文字の間隔とか行間とか表の挿入とか...そういうことを気にし始めるとめんどくささに天を仰いでしまいました。いかんせん、デフォルトの文字間隔も行間も~~ダサい~~大きい。それを修正していく手間を考えて途中でWordを放棄しました。

## 使用環境
で、Markdownだ、となったので環境を整えます。
とはいえMarkdownで書いてPDFで出力すればOKなので大したものは要りません。

- VS Code
- Markdown PDF

以上です。
もっと快適に書きたければ

- Markdownlint

とか導入すればいいと思います。

## 作業手順
環境を整えた後の作業を簡単に説明します。

1. ワークスペースを作る。
1. 本文を書く。 / Markdown HTML
1. スタイル調整をする / CSS
1. PDF出力する。

ざっくりこんな感じ。
環境と手順は↓を参考にしました。
https://mikansei-lab.net/markdown-pdf/

以下は追加で悩んだところをまとめます。


## 最初の難関：表
最初に詰まったのは表でした。
Markdownおなじみの

```Markdown:table
|id|種類|名前|
|:---|:---|:---|
|1|果物|リンゴ|
|2|野菜|きゅうり|
```
みたいなので済めばよかったんですけど、カラムの結合とかしたいとなるとちょっと不便。
いろいろ調べましたが、縦横を自由に結合となると素のMarkdownでは無理な様子。
なので、HTMLの`<table>`タグで解決。
これが案外、この後のスタイル調整にもちょうどよかったです。
最初からPDF出力を考えている場合はHTMLをデフォにした方がいいかもな...と思いました。

## 2つ目の難関：フォント
スタイル調整はCSSでするんですが、
最後まで「完璧に理解した」という感じにならなかったのがフォントでした。
デフォルトのフォントは絶妙に中華系？の崩れ方をしていたので、職務経歴書というからにはどうにか日本語フォントを適応したい...と悩みました。

```CSS:font
body {
    font-family: "指定したいフォント"
}
```
って感じで設定するんですが、
どのフォントがきちんと効くのかは結構PDF出力してみないとわからない...って感じで悩みました。
多分、自分のPC内にあるフォントを選ばないといけないのか？って感じではあったんですが、PC内にあるフォントでも無視されることがあってこのあたりに知見のある方いたら教えていただけると嬉しいです。
みんな大好きメイリオにいったん逃げて、とりあえずは事なきを得はしました。

## 3つ目の難関：ヘッダー / フッター
PDF出力すると、デフォルトでヘッダーフッターが入ります。
これがとても邪魔。
特にファイル名が入るヘッダーはとても邪魔。
どっちもいらない！って場合は
VSCodeからMarkdownPDFの設定を以下のように触ってください。
[File]→[Preference]→[Setting]で検索エリアに「Display Header Footer」と入力。
チェックを外してください。

## 4つ目の難関：改ページ
Markdownなんて普段改ページしないのでどうするんや...と調べました。
結論は改行したいポイントに以下のコードを差し込むだけ。

```
<div style="page-break-before:always"></div>
```
一つ注意しないといけないのが、前後にちゃんと1行スペースを開けること。
これは改行`<br>`以外のHTML挟み込むとき全般の話ですね。

3つ目、4つ目あたりの話題では↓を参考にしました。
https://blog.mmmcorp.co.jp/2018/11/16/markdown-to-pdf-document/
https://qiita.com/reona396/items/40b234108f7664267db8

## 感想
こんな感じでちょこちょこ調べものしながら職務経歴書を作りました。
結局Wordよりは仲良くできそうだなというのが素直な感想。
やはりある程度見慣れた文字間隔や行間のものが出力されるので読みやすさという点でよかったですし、表のカラムを増やしたり結合したりが慣れたコードで処理できるのも快適でした。
Wordだとちょっとした操作で思わぬ動作しますが、今回のやり方だと、書いたもの以上でも以下でもないと言った感じで安心感がありました。
これからはよっぽど複雑なテンプレートのある書類以外はMarkdownで作りたいなと思いました。
Alder Lake(Core i9) + VMWareWorkstation Pro 17.5 で「VMが遅い」の解決方法

# 概要
* Alder Lake のCPUで VMWareWorkstation の ゲストOSが思った以上に早くない場合の対処法です。

# 環境
* ホストOS
    * Alder Lake(Core i9) (Pコア 14 + Eコア6) 
    * Windows 11 (22H2)
    * VMWareWorkstation Pro 17.5 
* ゲストOS
    * Windows 10 (22H2)

# 事象:ゲストOS(Windows 10) が遅い
* 起動時間：40秒台～180秒台
* コア数を増やしても効果なし

# 原因:ゲストOSがEコアに割り当てられていたため

# 解決策:vmware-vmx.exe を電源制御外とする
管理者権限で起動したコマンドプロンプトで以下のコマンドを実行する。
```
> powercfg /powerthrottling disable /path "C:\Program Files (x86)\VMware\VMware Workstation\x64\vmware-vmx.exe"
```

# 効果
* ゲストOSの起動時間が20秒台になった。

# 不思議なこと
* ゲストＯＳの起動時間が、(コア数=4の起動時間) < (コア数=8の起動時間)  となった。
* 同じ20秒台なのでわずかな差であるが「コア数が多いほうがよい」という単純なことにはならないようだ。

# 参考サイト
* vmware VMTN Communities 
    * Workstation 16pro on alder lake system
mtomei Contributor ‎01-10-2023 11:54 AM
https://communities.vmware.com/t5/VMware-Workstation-Pro/Workstation-16pro-on-alder-lake-system/td-p/2880327
Windowsでフォルダに別名をつけるたったひとつの冴えたやりかた

## 目的
「デスクトップ」や「ダウンロード」のように**見た目は日本語だけど実体は英語のフォルダ**を作る

## やることはこれだけ

1. 名前を変えたいフォルダの中に **desktop.ini** を作成する
1. フォルダに **読み取り専用ファイル属性(R)** をつける (attrib +r *folderpath*)

## 動作確認したバージョン
- Windows 10 22H2
- Windows 11 23H2
- Windows 2016

## desktop.iniの中身
文字コードはUnicode16リトルエンディアンにします。

```
[.ShellClassInfo]
LocalizedResourceName=ここに別名を書く
```

## スクリプト
Pathのフォルダを作って、AliasNameで表示されるようにするPowerShellスクリプト(関数)です。
エラー処理考えてません。Pathはフルパスがいいと思います。

```
function CreateFolderWithAlias {
    param(
        [parameter(mandatory=$true)]
        [string]
        $Path,
        [parameter(mandatory=$true)]
        [string]
        $AliasName
    )

    New-Item -ItemType Directory -Path $Path | Out-Null

    $desktopIniPath = Join-Path -Path $Path -ChildPath "desktop.ini"

    $desktopIniContent = @"
[.ShellClassInfo]
LocalizedResourceName=$($AliasName)
"@

    Set-Content -Path $desktopIniPath -Value $desktopIniContent -Encoding Unicode

    attrib +r $Path
    attrib +s +h $desktopIniPath
}
```

以下のように呼び出して使います。

```
CreateFolderWithAlias -Path "C:\RealName" -AliasName "フォルダ別名"
```

## 解説
公式ドキュメントにはフォルダにシステム属性をつけると書いてありますが、読み取り属性にするだけで設定反映されました。システム属性にした場合でも、エクスプローラーでF2押してフォルダ名を変更すると、勝手に読み取り属性に変わります。変更後の名前はiniに書き込まれ、フォルダ自体の名前は維持されます。desktop.iniは属性つけなくても設定反映されるようです。
https://learn.microsoft.com/en-us/windows/win32/shell/how-to-customize-folders-with-desktop-ini

## 雑感
調べればわかることだけれど「コンパクトにまとまっててすぐ使える」って記事が見つからなかったので作りました。
二重ループでのカウント変数の変化(C言語)

```C:value1.c
#include <stdio.h>

int main(void)
{
    int cnt = 0;
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 10; j++) {
            cnt++;
        }
    }
    
    printf("%d\n", cnt);
    
    return 0;
    
}
```
変数「cnt」が二重ループの外にある場合、「5 * 10 = 50」
「i」が「0」の時・・・「j」は「0～9」までカウントされて「cnt = 10」
「i」が「1」の時・・・「j」は「0～9」までカウントされて「cnt = 20」
「i」が「2」の時・・・「j」は「0～9」までカウントされて「cnt = 30」
「i」が「3」の時・・・「j」は「0～9」までカウントされて「cnt = 40」
「i」が「4」の時・・・「j」は「0～9」までカウントされて「cnt = 50」
になる。


```C:value2.c
#include <stdio.h>

int main(void)
{
    int cnt;
    for (int i = 0; i < 5; i++) {
        cnt = 0;
        for (int j = 0; j < 10; j++) {
            cnt++;
        }
    }
    
    printf("%d\n", cnt);
    
    return 0;
    
}
```
変数「cnt」が二重ループの中にある場合、
「i」が「0～3」の間、インクリメントされるたびに「cnt」が「0」にリセットされる。
そして「i = 4」の最後のループの時、「cnt」は10回カウントされる。

「i = 0」の時、「j」の「0～9」まで「cnt」変数が10回カウントされるが、
「i = 1」の時、「cnt」変数は「0」にリセットされる。

「i = 1」の時、「j」の「0～9」まで「cnt」変数が10回カウントされるが、
「i = 2」の時、「cnt」変数は「0」にリセットされる。

「i = 2」の時、「j」の「0～9」まで「cnt」変数が10回カウントされるが、
「i = 3」の時、「cnt」変数は「0」にリセットされる。

「i = 3」の時、「j」の「0～9」まで「cnt」変数が10回カウントされるが、
「i = 4」の時、「cnt」変数は「0」にリセットされる。
「i = 4」の時、「i < 5」のため「i」は最後のループになるので、これ以上「cnt」変数はリセットされず、
「j」の「0～9」まで「cnt」変数が10回カウントされる。
静的webサイト制作Tipsまとめ

# はじめに

今日もお疲れ様です。よしＰです。
実は今入院中で自由に使える時間が急にできたので、僕が今まで重宝していたTipsや有益サイトをこの記事でまとめておきました。
個人的な備忘録というかチートシート的な記事となります。

:::note info
個人サイト作成やLP制作にどうぞ
:::

## 画像・写真素材

**Unsplash**
無料で高品質な写真を提供しているサイト。商用利用も可能で、クレジット表記も必要ない。

https://unsplash.com/ja

**Doodle Ipsum**
プロジェクトのプロトタイプやデザインに使える、手描き風のイラストを提供しているサイト。

https://doodleipsum.com/

**Pixabay**
商用利用可能な無料の写真、ベクター画像、アートワークを提供しているサイト。

https://pixabay.com/

**Burst**
Shopifyが提供する無料の高品質な写真素材サイト。商用利用も可能。

https://www.shopify.com/stock-photos

**ぱくたそ**
日本人の人物画像を無料で提供しているサイト。商用利用も可能で、クレジット表記も必要ない。

https://www.pakutaso.com/

**写真AC**
商用利用可能な無料の写真素材を提供しているサイト。人物画像、風景画像など多岐にわたる。

https://www.photo-ac.com/

**unDraw**
色をカスタマイズ可能な無料のベクターイラストを提供しているサイト。商用利用も可能。

https://undraw.co/illustrations

**Loose Drawing**
手描き風のイラストを無料で提供しているサイト。商用利用も可能で、クレジット表記も必要ない。

https://loosedrawing.com/

**Tech Pic**
IT関連の無料のイラスト素材を提供しているサイト。商用利用も可能。

http://tech-pic.com/

**ソコスト**
SNSやブログで使える、手描き風のイラストを無料で提供しているサイト。商用利用も可能。

https://soco-st.com/

## ロゴ作成

**Hatchful**
Shopifyが提供する無料のロゴ作成ツール。デザインの選択肢が豊富で、自分だけのオリジナルロゴを作成することが可能。

https://www.shopify.com/jp/tools/logo-maker

## 境界線カスタム（波形ジェネレータ）

**getwaves**
SVG波形ジェネレータ。自由にカスタマイズ可能な波形を生成し、ウェブサイトのデザインに活用できる。

https://getwaves.io/

## LPテンプレート

**BOOTSTRAPMADE**
Bootstrapを使用した無料のウェブサイトテンプレートを提供。レスポンシブデザインに対応しており、多種多様なテーマが用意されている。

https://bootstrapmade.com/

**theme wagon**
Bootstrap 5をベースにした無料のウェブサイトテンプレートを提供。商用利用も可能で、多様なデザインのテンプレートが揃っている。

https://themewagon.com/theme-framework/bootstrap-5/

**Start Bootstrap**
Bootstrapを使用した無料のテンプレートとテーマを提供。個人から企業まで、様々なニーズに対応したデザインが揃っている。

https://startbootstrap.com/

# まとめ

最近だとOpenAIのChatGPTの勢いが凄まじいので、大体のものは置換できるかもしれないですね。
他にもオススメの有益サイトがあれば教えて欲しいです。
ChatGPTでDalle(画像生成)用のプロンプトを作るアプリ①(機能紹介、クソアプリハッカソン参加)

# はじめに
本記事は[クソアプリ Advent Calendar 2023](https://qiita.com/advent-calendar/2023/kuso-app) シリーズ3の13日目の記事です。ChatGPTでDalle(画像生成)用のプロンプトを作りました。
尚、技術面は下記記事で紹介、[#AWSAmplifyJP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/amplify)に投稿しています。

https://qiita.com/tanosugi/private/050bdb2f51ee4a10c636

# Demo

https://easy-image.tanosugi.com/

# 作ったもの
この記事ではアプリの機能を紹介したいと思います。

![screencapture-easy-image-tanosugi-net-2023-12-10-16_59_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639092/478f443b-293a-d6dd-c766-7337d4c19934.png)

OPEN AI API Keyを入力し
![スクリーンショット 2023-12-10 170054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639092/9b3e0e6c-6b4a-aa6e-a936-9583fbd2f2b6.png)

どんな画像、何語で何単語のプロンプトにしたいか入力すると
![スクリーンショット 2023-12-10 170201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639092/c49c74e5-74bb-8fbd-a9eb-875a73be5b4c.png)

ChatGPTが画像生成用のプロンプトを考えてくれて
![スクリーンショット 2023-12-10 170234.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639092/b4fe9331-15ff-af77-062d-4aaaa7466962.png)

それをDalleに送って画像が生成されます。
![スクリーンショット 2023-12-10 170258.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639092/97bf65a4-9fff-9c71-8801-435c1d73cc35.png)

過去にどのようなプロンプト、画像が生成されたかも一覧で見られます。
![スクリーンショット 2023-12-10 170319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639092/9c2b6b56-f1d7-de21-78a4-8df87efa9b03.png)

# 作ろうと思ったきっかけ
画像生成のプロンプトは細かく指定するときれいな画像が描けるそうですが、考えるのが大変なのでChatGPTに代わりに考えてもらおうと思いました。

# クロアプリなところ
プロンプトの文字数を増やしすぎると、複雑なプロンプトが生成され、全然想定と違った画像になることもあります。
![スクリーンショット 2023-12-10 170823.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639092/4cd2762b-4ff9-ffcc-530a-05cdc65918ad.png)

# クソアプリハッカソン
クソアプリハッカソンに参加して作成しました。半分くらいは作ってから行ったので当日は後半半分くらい作業しました。
リアルのハッカソンは初めて参加したのですが、技術的に興味深いものから、ジョークのセンスが光りまくっているものまで、非常に面白い発表ばかりで充実した会でした。

# 今後
このアプリはここまでにして、今回使った技術(AWS Amplify、Langchain、ChatGPT API、Dalle API)を使ってアプリを作って公開したいです。
Web 開発再入門 #5 ― Burp Suite インストール

# Web 開発再入門 #5 ― Burp Suite インストール

fmockup

# はじめに

HTTP アクセスのテストに便利な Burp Suite をインストールします。
Burp Suite を使用することで、ブラウザーと Web サーバーとの間の HTTP アクセスをインターセプトし、HTTP リクエストや HTTP レスポンスを覗いたり改ざんしたりすることができます。

# 参考 URL

Burp Suite インストール
かなり詳しいです。公式ページなので。

https://burp-resources-ja.webappsec.jp/Documentation/burp/documentation/desktop/getting-started/download-and-install.html

## 最新の Burp Suite の特徴

バージョンアップするたびに便利になっています。
* インターセプトするポート番号を自動採番する（使用済のポート番号を避ける）。
* Chronium を同梱している。インターセプトしたポート番号にアクセスする。
昔は、ブラウザーの設定が必要なため、面倒でした。
* 自動的に最新版の Burp Suite をダウンロードし、起動時に Burp Suite のバージョンアップを行う。
自動的（勝手に）というのは、どうかとも思いますが、機能が便利になっていくので、簡単なテストで Burp Suite を使用する分にはいいのかなと思います。

## 基本的な考え

とにかく簡単にセットアップします。

* Windows インストーラーを利用する。
* インストール先や設定は、デフォルトのままとする。
* インストール物は、C ドライブに置く。

## Burp Suite のダウンロードおよびインストール

1. Burp Suite をダウンロードする。
https://burp-resources-ja.webappsec.jp/Documentation/burp/documentation/desktop/getting-started/download-and-install.html
“COMMUNITY EDITION” を選択して、“burpsuite_community_windows-x64_vYYYY_M_D.exe（注）” をダウンロードする。
注）例：burpsuite_community_windows-x64_v2022_8_2.exe

2. Burp Suite をインストールする。
“burpsuite_community_windows-x64_vYYYY_M_D.exe” をダブルクリックして実行する。
設定は、全てデフォルトのままとする。

## Burp Suite の起動

1. スタート・メニューで Burp Suite を起動する。

## 参考

**日本語化（私はやっていませんが...）**

https://spirits.appirits.com/doruby/9472/
「aria(-label)を使うな」を体験する

## aria-labelを使うな
アクセシビリティを学ぶ中で、「aria-labelを使うな（ariaを使わないのが一番いい）」を見かけた方も多いのではないでしょうか。

この記事では実際にいろんなパターンを用意したページで実際にスクリーンリーダーと音声コントロールを使用してみて、どういう実装にしたら一番いいのかを体験していきます。

## いろんなパターンを用意したページ
[https://shamokit.com/examples/a11y/aria-label](https://shamokit.com/examples/a11y/aria-label)

上記URLに以下の6パターンを用意しました。

- ボタンタグ内に「カウントアップする」というテキストを入れる
- ボタンタグ内に「カウントアップ」というテキストを入れ、aria-label属性で「カウントアップする」というテキストを指定する
- ボタンタグにtitle属性で「カウントアップする」というテキストを指定する
- ボタンタグにaria-label属性で「カウントアップする」というテキストを指定する
- ボタンタグの外に「カウントアップする」というテキストを用意し、aria-labelledby属性でそのテキストを参照する
- ボタンタグ内に「カウントアップする」というテキストをvisually-hiddenで入れる

## スクリーンリーダー
まずはスクリーンリーダーで確認してみましょう。

Windowsを持っている人はNVDAで読み上げを確認してみてください。
この記事ではVoiceOverを使って確認していきます。

それぞれのボタンにキーボードでフォーカスすると、
全て「カウントアップする、ボタン」と読み上げれらました。
スクリーンリーダーだけでテストすると、特にアクセシビリティ上問題があるようには見えません。

しかし、スクリーンリーダーは指や手足など、体の一部が動かせなければ操作できません。
スクリーンリーダーでの操作に対応できていれば対応していないよりかはより広いユーザーに対してアクセシブルな実装になりますが、それでも全てのユーザーに対応できているわけではありません。

## 音声コントロール
次に音声コントロールで確認してみましょう。
こちらもMacにデフォルトで備わっている音声コントロール機能を使用して確認します。

![システム設定→アクセシビリティ→音声コントロールをONに](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1677134/75ffbefe-0bca-d74c-2659-d853331dbfb8.png)

システム設定→アクセシビリティ→音声コントロールをONにすると音声コントロールできるようになります。

音声コントロールを有効化した状態で、「カウントアップする　クリック」と話すとページ内のボタン全てに番号が表示され、番号を読み上げるとそのボタンがクリックされカウントが一つ増えました。

「番号を表示」と読み上げるとボタンに番号が表示されるので、音声コントロールは一応問題なくできますね。

---

さて、パターン2個目の「プレーンテキストとaria-labelの内容が違う」ボタンには「カウントアップ」と表示されているので、音声コントロールを使用するユーザーは「カウントアップ　クリック」と読むはずです。

では「カウントアップ　クリック」と話してみましょう。
ボタンはクリックできましたか？　はい、**できません**。

aria-labelが「カウントアップする」で指定されており、ラベルが上書きされてしまっているからです。

**このように、aria-labelを間違って使用してしまうと音声コントロールを使用するユーザーが混乱してしまいます。**
スクリーンリーダーでのチェックばかりを気にして余計なaria-labelの付与をしてしまうとこういうことが起きてしまうということですね。

---

例えばテーブルの各行に同じテキスト「編集」が入ったボタンがあったとして、
このボタンはこの行の情報に関する編集ボタンだからaria-labelに「XXXを編集する」という対応をしてしまうと問題になるということです。
この辺はアクセシビリティを学びたての人はやってしまいがちなのではないでしょうか。

こういう場合はaria-describedbyを使用して、追加の情報を与えてあげるようにしましょう！

また、そもそも目に見えるテキストを置いておく（必要あればaria-describedbyやaria-labelledbyでそこに紐づける）のが一番アクセシビリティが高いです。
アイコンからボタンの動作を予測する必要もないですし、支援技術のサポートも特に問題なく受けることができます。

ということで、「aria(-label)を使うな」を体験する　でした。
最後まで読んでいただきありがとうございました！
Web 開発再入門 #4 ― Node.js インストール

# Web 開発再入門 #4 ― Node.js インストール

fmockup

## はじめに

シングル・ページ・アプリケーション開発のベースで必要となる Node.js をインストールします。

## 参考 URL

Node.js インストール
かなり詳しいです。

https://magazine.techacademy.jp/magazine/16050

## 基本的な考え

とにかく簡単にセットアップします。

* Windows インストーラーを利用する。
* インストール先や設定は、デフォルトのままとする。
* インストール物は、C ドライブに置く。

## Node.js のダウンロードおよびインストール

1. Node.js をダウンロードする。
https://nodejs.org/en/download/
“Windows Installer (.msi) 64-bit” を選択して、“node-vNN.NN.N-x64.msi（注）” をダウンロードする。
注）例：node-v20.10.0-x64.msi 

2. Node.js をインストールする。
“node-vNN.NN.N-x64.msi” をダブルクリックで実行する。

3. インストーラーが環境変数 Path に “C:\Program Files\nodejs\” と “C:\Users\xxxx\AppData\Roaming\npm” を設定する。

4. 今回は、環境変数 NODE_PATH を設定しない。
グローバルインストールを使わないため。
グローバルインストールとは、どのフォルダーにいてもコマンドを実行できるもの。
“npm install -g”でグローバルインストールしたときに、NODE_PATH が必要となる。
必要ならば、 環境変数 NODE_PATH に “C:\Users\username\AppData\Roaming\npm\node_modules” を設定する。

5. コマンド・プロントで確認する。
    ```bat:コマンド・プロント
    C:\Users\xxxx> set | findstr Path
    C:\Users\xxxx> npm --version
    10.2.3

    C:\Users\xxxx> exit
    ```

## その他

**ローカル・インストールとグローバル・インストールの違い**

https://qiita.com/aya02/items/4c9c827f6a782ef65d57
I can't see pseudo-elements in Panda CSS. 疑似要素が見えない...

Please enclose the 'content' element in quotation marks.

## NG

```
function HelloWorld() {
  return (
    <div
      className={css({
        _before: {
          content: "Hello, world!" // <--- NG
        }
      })}
    ></div>
  )
}
```

You might encounter the bellow error message in a Developper tools in Chrome...

> Determines which page-based occurrence of a given element is applied to a counter or string value.

## OK

```ts
function HelloWorld() {
  return (
    <div
      className={css({
        _before: {
          content: '"Hello, world!"' // <--- OK
        }
      })}
    ></div>
  )
}
```
Web 開発再入門 #3 ― Eclipse（Preiades）インストール

# Web 開発再入門 #3 ― Eclipse（Preiades）インストール

fmockup

## はじめに

Java 統合開発環境（IDE）である Eclipse（Preiades）をインストールします。
Preiades プロジェクトでは、Eclipse の日本語化かつオールインワン（Java SDK や SpringBoot などの組込み）を提供してくださっています。私にとって Eclipse のインストール・セットアップは鬼門ですので、本当に助かります。
本当は、Visual Studio Code や IntelliJ IDEA を使うべきなのかもしれませんが...。

IDE：Integrated Development Environment

## 参考 URL

Preiades インストール
すごく詳しいです。

https://sukkiri.jp/technologies/ides/pleiades_install_win.html

## 基本的な考え

とにかく簡単にセットアップします。

* Windows インストーラーを利用する。
* インストール物は、C ドライブに置く。

## フォルダー・ファイル構成

C:\\
└ Programs\\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└ pleiades-yyyy-mm\\ ← ココ
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└ eclipse\\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└ eclipse.exe ← コレ

D:\\
└ Development\\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└ Workspace\\

## Preiades のダウンロードおよびインストール

1. Preiades をダウンロードする。
https://willbrains.jp/
“202n - Windows x64 - Java - Full Edition” を選択して、“pleiades-yyyy-mm-java-win-64bit-jre_yyyymmdd.exe（注）” をダウンロードする。
注）例：pleiades-2023-06-java-win-64bit-jre_20230617.exe

2. Preiades をインストールする。
“pleiades-yyyy-mm-java-win-64bit-jre_yyyymmdd.exepleiades-yyyy-mm-java-win-64bit-jre_yyyymmdd.exe” をダブルクリックして実行する。
イントール先は、“C:\Programs\pleiades-yyyy-mm” とする。

3. ショートカットを作成する。
エクスプローラーでフォルダー “C:\Programs\pleiades-yyyy-mm\eclipse” を開く。
ファイル “eclipse.exe” を選択して、コンテキストメニュー [ショートカットの作成(S)] でショートカットを作成する。

## Eclipse（Pleiades）の起動

1. ショートカットをダブルクリックする。
2. ワークスペース（開発フォルダー）を指定する。
[Eclipse IDE ランチャー] ダイアログ画面で、[ワークスペース (W)] テキストボックスに “D:\Developmens\Workspace” を指定し、[この選択をデフォルトとして使用し、今後この質問を表示しない (U)] ラジオボタンをオンにして、[起動 (L)] ボタンを押下する。

## その他

**Pleiades 作者**

https://qiita.com/cypher256
latexを使ってレポート作成する際にに有用なツール紹介

　レポート作成のツールとして、latexはgitによるバージョン管理にも適し、多くの人に使われておる(?)。皆さんのレポート作成をさらに快適にするために、この記事ではいくつかのツールを紹介したいと思う。

**この記事の内容は vscode および LaTeX Workshop を利用した環境になる。**

# 1　 表作成
　　実験のデータ収集及び処理はそのテーマの指導教員にもよるが、ほとんどの場合 Excel を用いることが多い。Excelで作成した表をLaTeXに移す際に、次のサイトが有用である。

https://tableconvert.com/ja/latex-to-excel

![スクリーンショット (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632218/69bb2b9c-f249-5070-9180-176e917685b6.png)

　まずは情報源と変換後をそれぞれ Excel と LaTeX に直し、変換したい表をExcelからコピーして情報源のところに貼り付けると自動的に tex のコードとして変換される。また、変換した後コードの左側の詳細欄で、ボーダーラインの形式や文字の揃い方など調整できる。

 # 2　コードのフォーマット
LaTex Workshop にはコードのフォーマットについており、latexindent の引数を設定することで利用可能になる。詳しい設定の方法などは次の記事参考してください。

https://qiita.com/Yarakashi_Kikohshi/items/1a275f2046b002e398b3#-format-%E3%81%A8-lint

# 3 LaTeXで書いた式を画像として出力
現段階では、discord はデフォルトでtexの数式変換機能がついておりません。したがって、拡張機能をインストールしなければ、友達とレポートの内容について議論したいときに数式をコードの形で送ることしかできない。この問題を解決するために、Texの数式を画像やpdfとして出力できるサービスが必要である。

### 3.1 Macユーザー
Mac ユーザーの場合は　**MacTex**　が使用している場合が多いだろう。MacTex には　**LaTeXiT** というツールが標準で搭載されている。具体的な使い方は次の記事参考にしてください。

https://qiita.com/tttamaki/items/bb489e7dd1168e50913e

### 3.2 Windows
Windows の場合は別途で専用のソフトとサービスを利用することになる。類似したソフトは数多くある。例えば **TeX2ming**　はその一つである。

https://www.ms.u-tokyo.ac.jp/~abenori/soft/#TEX2IMG

また、ソフトウェアではなく、オンラインて提供されているサービスもある。

https://texclip.marutank.net/
Web 開発再入門 #2 ― MySQL インストール

# Web 開発再入門 #2 ― MySQL インストール

fmockup

## はじめに

データベースである MySQL、および、データベース操作ツールである MySQL Workbench をインストールします。

## 参考 URL

MySQL インストール
かなり詳しいです。

https://magazine.techacademy.jp/magazine/1940

> Oracleアカウント作成のページにアクセスします。
> 必要事項を記入してください。
> 個人情報や会社情報などを記入することになりますが、個人、会社宛に電話などの連絡が来ることはありません。
>
> ⇒ 私の経験では、登録したメール宛てにメールがありました。“お困り事があれば、ご連絡ください” 的な内容でした。

## 基本的な考え

とにかく簡単にセットアップします。
* Windows インストーラーを利用する。
* インストール先や設定は、デフォルトのままとする。
* インストール物は、C ドライブに置く。

## フォルダー・ファイル構成

C:\\
└ Program Files\\
&nbsp;&nbsp;&nbsp;&nbsp;└ MySQL\\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;├ MySQL Server 8.1\\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;└ bin\\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└ mysql.exe ← コレ
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└ MySQL Workbench 8.0 CE\\

## MySQL・MySQL Workbench のダウンロードおよびインストール

1. MySQL・MySQL Workbench をダウンロードする。
https://login.oracle.com/mysso/signon.jsp
Oracle アカウントを登録する。
https://dev.mysql.com/downloads/windows/installer/
“Windows (x86, 32-bit), MSI Installer (mysql-installer-community-n.n.n.n.msi)” を選択して、“mysql-n.n.n-winx64.msi（注1）” をダウンロードする。
https://dev.mysql.com/downloads/workbench/
“Windows (x86, 64-bit), MSI Installer (mysql-workbench-community-n.n.nn-winx64.msi)” を選択して、“mysql-workbench-community-n.n.nn-winx64.msi（注2）” をダウンロードする。
注1）例：mysql-8.1.0-winx64.msi
注2）例：mysql-workbench-community-8.0.34-winx64.msi

2. MySQL をインストールする。
“mysql-n.n.n-winx64.msi” をダブルクリックして実行する。
設定は、全てデフォルトのままとする。
**管理者パスワードを控えて控えておくこと。**

3. コマンド・プロントでインストール済みを確認する。
    ```bat:コマンド・プロンプト
    C:\Users\xxxx> cd "C:\Program Files\MySQL\MySQL Server 8.1\bin"
    C:\Program Files\MySQL\MySQL Server 8.1\bin> mysql --version
    mysql  Ver 8.1.0 for Win64 on x86_64 (MySQL Community Server - GPL)

    C:\Program Files\MySQL\MySQL Server 8.1\bin> exit
    ```

4. MySQL Workbench をインストールする。
mysql-workbench-community-n.n.nn-winx64.msi をダブルクリックして実行する。
設定は、全てデフォルトのままとする。

## MySQL Workbench の起動

1. スタート・メニューで MySQL Workbench を起動する。

2. データベース接続を設定する。
[ホーム（Welcome to MySQL Workbench）] タブ画面で MySQL Connections の (+) マークを押下する。

3. 接続名を設定する。
[Setup New Configration] ダイアログの [Connection Name] テキストボックス に “FMOCKUP” を指定して、[OK] ボタンを押下する。
Emscriptenで.libファイルを.aファイルに変換する手順

※ ChatGPT先生の説明がわかりやすかったのでQiitaにメモとして残したものです

## Emscriptenで.libファイルを.aファイルに変換する手順

Emscriptenは通常、Unix系のツールチェインと互換性があり、`.a` ファイル（Unix用の静的ライブラリ）を使用することが一般的です。`.lib` ファイルはWindows向けの静的ライブラリ形式であり、Emscripten用のツールでは直接サポートされていないことがあります。

### 1. コンバートツールを利用する

Emscripten SDKには、`.lib` ファイルから `.a` ファイルに変換するための `llvm-lib2yaml` と `yaml2obj` などのツールが含まれています。これらのツールを使って変換を行うことができます。

まず、`.lib` ファイルから YAML 形式の中間ファイルに変換します：

```bash
llvm-lib2yaml yourlibrary.lib -o yourlibrary.yaml
```
次に、YAML 形式の中間ファイルから .a ファイルに変換します
```
yaml2obj -o yourlibrary.a yourlibrary.yaml
```
### 2. emarを使用する
.lib ファイルを .a ファイルに変換する代替手段として、emarを使用することも考えられます。ただし、直接の変換ではなく、オブジェクトファイルを抽出して新しい .a ファイルを作成することになります。
```
# .lib ファイルからオブジェクトファイルを抽出
ar x yourlibrary.lib

# 新しい .a ファイルを作成
emar rcs yourlibrary.a *.obj

```
### おまけ
.aファイル内の詳細を表示する
```
nm -a libYourLibrary.a
```