OmniAICreator/Qiita-1.07M huggingface dataset:
「データの自動準備」ノードの分析結果をクリアする

SPSS Modelerの「データ自動準備」ノードでは、データを読み込んで統計情報を取得します。
しかし、元データに変化があった場合にはこの統計情報をクリアする必要があります。

その場合、「分析のクリア」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/4677d054-5670-700b-cb93-5bda8ff841c2.png)

すると「精度分析」タブの情報がなくなり、ノードのアイコンも青いチェックマークがなくなり、赤い三角のマークになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/34e4a41c-89ec-9827-b5db-27a443cb4e0e.png)



毎回入力データの傾向が変わるときには、これを毎回実行時に行う必要があります。この場合、Modelerスクリプトを使うことができます。
以下のスクリプトを

```python:「データ自動準備」の分析のクリア
stream = modeler.script.stream()
node=stream.findByID("id21DVISXI1P3")
node.clearAnalyze()
```
ストリームのプロパティの「実行」タブのスクリプトに貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a1095085-7ffa-84c6-a298-7fa740d15e4c.png)


findByIDには「データ自動準備」ノードのIDを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1ef51dfd-fd02-6fdb-8518-42522636db62.png)

このスクリプトを実行すると、「分析のクリア」ボタンをクリックしたときと同様に、統計情報をクリアすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/4066fcb9-b670-b4dd-7c2a-11a08c115a7d.png)

## 参考
### SPSS Modelerで数値データの標準化、正規化 - Qiita 

https://qiita.com/kawada2017/items/d2b54b54379d7faaf0e2

### SPSS Modeler ノードリファレンス 3-14 データの自動準備 - Qiita 

https://qiita.com/416nishimaki/items/492b1522dd1ae083c664
C#.NETでxmlファイル読込

# やり方（サンプルexe作成）

## プロジェクト作成

VisualStudioでプロジェクト作成。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/3d822233-0928-1b7d-75a1-e54c5bdd09ff.png)

## xmlファイル作成

プロジェクト上で右クリック ⇒ 追加 ⇒ 新しい項目 。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/9f903c22-1127-dd24-707f-8b8166b5dd34.png)

今回は『setting.xml』って名前でxml作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/4200efa6-a9c7-c407-a2af-f5d77f4d5c5c.png)

```xml:setting.xmlの中身はこうしてみた
<?xml version="1.0" encoding="utf-8" ?>
<root>
	
	<うにゃあ>うにゃあの中身だよ。</うにゃあ>
	
	<task>
		<name>task_1_name</name>
		<message>task_1_message</message>
	</task>
	
	<task>
		<name>task_2_name</name>
		<message>task_2_message</message>
	</task>
	
	<task>
		<name>task_3_name</name>
		<message>task_3_message</message>
	</task>
	
</root>
```

デバッグ時に『ファイル存在しません例外』にならないように、下記のように設定しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/fe3d5bad-b7df-c94c-9975-b8ca9cdbd01a.png)

## ソースコード

```c#
using System;
using System.Xml.Linq;

namespace XmlLoad
{
    internal class Program
    {
        static void Main(string[] args)
        {

            //サンプルだからtry catch無し。

            //exeと同じフォルダーにある『setting.xml』ってファイルを対象にするよ。
            string xml_file_path_ = System.AppDomain.CurrentDomain.BaseDirectory + "setting.xml";

            //xmlを読み込め。
            XDocument xml_ = XDocument.Load(xml_file_path_);

            //ルートタグを変数に。
            XElement root_element_ = xml_.Element("root");

            //ルートタグ直下にあるタグの値。
            //日本語のタグも扱えるかどうかの確認。
            Console.WriteLine(root_element_.Element("うにゃあ").Value);

            //ルートタグ直下にあるtaskっていう名前のタグ一覧を走査。
            foreach (XElement task_element_ in root_element_.Elements("task"))
            {
                Console.WriteLine(task_element_.Element("name").Value);
                Console.WriteLine(task_element_.Element("message").Value);
            }

            //確認用にコンソール閉じずに残す。
            Console.ReadLine();

        }
    }
}
```

## F5でデバッグ実行した結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/d6174029-91f6-3ec3-b2bd-9881a7556811.png)

# 蛇足

そんなに難しくはない。

# バージョン

Windows 10 Pro 21H2 OSビルド 19045.2311
Microsoft Visual Studio Community 2022 (64 ビット) - Current Version 17.3.6
Microsoft .NET Framework Version 4.8.04084
Reactを触ってみる(useState)

# はじめに
この記事は完全未経験からフロントエンドに転職し、実務に就く前に書いたものです。
勉強中のため至らないところが多いかもしれませんが、これからReactを勉強する方の一助となれば幸いです。

## useStateとは
React 16.8 から追加された、Reactの機能に「接続 (hook into)」するための特別な`関数(フック)`の一部。
フックが導入される前はクラスを定義してstateを管理していたそうで、このタイミングでReactに取りかかれるのはある意味ラッキーかも。実際のコードを見比べると理解が浅くてもフックを使用している方がかなり簡潔に見える。
```React:クラス
class Example extends React.Component {
  constructor() {
    super();
    this.state = {
      count: 0
    };
  }

    render(){
        return(JSX)
    }
}
```
```React:フック
import React, { useState } from 'react';

const Example = () => {
  const [count, setCount] = useState(0);
  return (JSX)
}
```

このフックを使用したコードについて細かく分析していく。

## useState(フック)の使い方
先ほど述べたようにReactの機能を使用するため使うときはReactからimportする。
```React:useState
import React, { useState } from 'react';
```
import後は関数コンポーネント内で使用が可能になる。
使用方法のルールとしては関数コンポーネント内のトップレベルのみと決められているそうで、仮に条件分岐(if文)の中で定義してしまうと思わぬバグを発生してしまう恐れがある。
詳しくは[公式](https://ja.reactjs.org/docs/hooks-rules.html#explanation "公式")を参照。

importしたら実際にuseStateを実行する。
```React:useState
const [count, setCount] = useState(0);
```
これで簡単に何ができるかと言うと
`countで値の記憶`、`setCountで値の更新`ができる
上記のコードのような`const[]=hogehoge`の書き方はReactの特別な記法ではなくJavaScriptの`分割代入`を使用している。
よって上記のコードが意味するものは`useState`から返される値のうち１つ目を`count`に、２つ目を`setCount`に代入している。
分割代入をしているだけなので変数の名前は自由につけることができるが、２つ目の変数は更新用関数が入ってくるため頭に`set`をつけることが暗黙的に決まっているそう。
ちなみに useState() の引数を指定すると`初期値としてcount`に記憶される。
上記の場合は 0 が初期値として count に代入されている。

## set関数の呼び出し
何かボタンをクリックした際に`count`を更新したい場合はJSX内で以下のように記述する。
```React
const Example = () => {

  const [count, setCount] = useState(0);

  return (
    <div>
       <button onClick={() => setCount(count + 1)}>   ←set関数呼び出し
         Click me
       </button>
    </div>
  )
}
```
これでボタンを押したタイミングでset関数が呼び出され、変数 count が更新される。
このままでは変数 count が表示されていないのでJSX内で表示できるようにする。
```React
const Example = () => {

  const [count, setCount] = useState(0);

  return (
    <div>
       <p>{count}</p>  ←追加
       <button onClick={() => setCount(count + 1)}>
         ＋
       </button>
    </div>
  )
}
```
上記のコードを実行すると＋ボタンをクリックするたびに表示された数字が 0 から 1 ずつ上がっていくようになる。

今回は単純な useState だけですが、そのほかのフックを使いつつコンポーネントを増やして規模を大きくしていくと気をつけないといけないことが増えてくる。
そしてJavascriptの理解も必要になってくる。
ですが、初心者の方はJavascriptをガッツリやると言うより同時進行で必要に応じて知識を増やしていくのが効率が良さそう。
基本的なアロー関数やコールバックは大前提として。。。



https://ja.reactjs.org/docs/hooks-state.html#tip-what-do-square-brackets-mean
picoCTF Writeup picoGym Practice Challenges logon (注意<spoiler>)

# logon

Description
The factory is hiding things from all of its users. Can you login as Joe and find what they've been looking at? https://jupiter.challenges.picoctf.org/problem/44573/ (link) or http://jupiter.challenges.picoctf.org:44573

ソースコードを見ても特にカギとなる個所はない。

wiresharkを利用してHTTP通信をみてみる。



![スクリーンショット 2022-11-30 172606.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/813031/1feb6dc7-69c5-b762-bf23-83b424f45831.png)

Cookieのペアではadmin=Falseとなっているのでadmin=Trueにしてしまえばよい。

picoCTF{th3_c0nsp1r4cy_l1v3s_0c98aacc}
AWS-CDKでStepFunctionのDescribeXXXタスクを実装する

初めまして！
Webエンジニアで飯を食べている大西です。
初めてQiitaに記事を書くので、至らぬ点もあるかと思いますが、生暖かい目で見ていただけると嬉しいです！

# はじめに
最近、タスクが200個ぐらい追加されて、StepFunctionを活用する場面が増えて来ましたよね〜

WebUI上でアーキテクチャを組み終わっていざAWS-CDKで書き起こそうとした時に、DescribeXXXのタスクの実装方法が見つからなくて、かなり時間を使ってしまいました、、、

ということで、この記事ではAWS-CDKでDescribeXXXタスクを実装する方法をご紹介します。

# 環境
実行環境
- macOS Monterey v12.5.1
- node v16.3.0

package
- typescript@3.9.10
- aws-cdk@2.43.1


# DescribeInstanceStatuceの場合
DescribeInstanceStatuceの場合、以下のように書きます。
State Machineの定義を含めて全部書くと長いので、タスク定義に必要な最低限のコードだけ書きます。

```ts
import { Stack, StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import * as iam from "aws-cdk-lib/aws-iam";
import * as sfnTasks from "aws-cdk-lib/aws-stepfunctions-tasks";

export class StepFunctionStack extends Stack {
    constructor(scope: Construct, id: string, props?: StackProps) {
        super(scope, id, props);

        // taskのrole. これがないと実行できない
        const describeInstanceStatusTaskRole = new iam.Role(
            this,
            "DescribeInstanceStatusTaskRole",
            {
                assumedBy: new iam.CompositePrincipal(
                    new iam.ServicePrincipal("states.amazonaws.com")
                ),
                managedPolicies: [
                    iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonEC2FullAccess"),
                ],
            }
        );
        
        // describeInstanceStatusのタスク定義
        const describeInstanceStatusTask = new sfnTasks.CallAwsService(
            this,
            "DescribeInstanceStatusTask",
            {
                service: "ec2",
                action: "describeInstanceStatus",
                // state machineのinputで単一のinstanceIdが渡ってくる想定
                parameters: {
                    "InstanceIds.$": "States.Array($.instanceId)",
                },
                iamResources: [describeInstanceStatusTaskRole.roleArn],
                resultPath: "$.describeInstanceResult",
            }
        );
    }
}
```

# 他のAPIでも使えるように一般化
そもそも200個のタスクが追加されたのは、StepFunction用の機能が追加された訳ではなく、StepFunctionのタスクとしてAPIを叩けるようになったみたいですね(全部確認したわけではないので、それ以外のものも含まれるかもしれませんが、、、

APIを呼べる機能のことをAWS公式ではAWS SDK統合と呼んでるみたいです。
https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html

StepFunctionのタスクでAWS SDK統合を利用する方法は公式ドキュメントにもあります。
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions_tasks-readme.html#aws-sdk

公式ドキュメントだけだと微妙に分かりにくいので、AWS CLIを使って一般化したコードも載せておきます。
```ts
// aws <conmmand> <subcommand> <parameter>に相当するタスクを書きます。記法はよしなに変換してください。
// ex) aws ec2 describe-instance-status --instance-ids "<instanceId>"

const callAPITask = new sfnTasks.CallAwsService(
    this,
    "CallAPITask",
    {
        service: "<command>",
        action: "<subcommand>",
        iamResources: [callAPITaskRole.roleArn],  // 必要なRoleを定義して下さい
        parameters: {
            <parameter>
        }
    }
);
```

# おわりに
英語でググっても全然記事が出てこなくて、最終的にはAWSのサポートの方に助けてもらいました。
(いつもありがとうございます)

この記事が多くの方の手助けになれば幸いです。
【Laravel】開発環境にN＋1警察👮を宿らせる 【Laravel N+1 Query Detector】


## 概要

N+1を検知してアラートで知らせてくれるライブラリを導入して使ってみます。
実際にプロジェクトにも導入してみました。


## インストール
```terminal
composer require beyondcode/laravel-query-detector --dev
```
```terminal
php artisan vendor:publish --provider=BeyondCode\\QueryDetector\\QueryDetectorServiceProvider
```
configディレクトリに設定ファイルが追加されました。
邪魔になったらコメントアウトで消せます。
```php:config/querydetector.php
'output' => [
    // 画面上でアラートを検知内容を表示
    \BeyondCode\QueryDetector\Outputs\Alert::class,
    // ログファイルに検知内容を表示
    \BeyondCode\QueryDetector\Outputs\Log::class,
]
```
____

#### コンソールにも表示できます
```php
'output' => [
    \BeyondCode\QueryDetector\Outputs\Console::class
]
```

https://beyondco.de/docs/laravel-query-detector/usage

## 実際に警察に出てきてもらう🚔

```php:さんぷる
$schedules = Schedule::all();
foreach ($schedules as $schedule) {
    echo $schedule->user->name;
}
```

👮「
![スクリーンショット 2022-11-30 17.35.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282328/cafeb1da-0b92-d949-a3fb-f1b4ec40b199.png)
」

はい怒られました。
画面に出てくるのがうざい場合はコンソールだけにしましょう。


## プロジェクトに導入してみて
○ 無意識に起こしてしまっていたN+1を知れ、早急に対処に取り掛かれる
× ごちゃごちゃしてるコードだと実際どこのコードなのか分からない
GitとGithubについて

# はじめに

この記事は、GitとGithubの違いやGitの用語集をまとめたものです。

# GitとGithubの役割

## Git とは

ファイルの変更履歴をバージョンによって記録することのできる管理システムのこと。
実際のシステム開発の現場では、複数人で1つのシステムを作っていくので、ソースコードが頻繁に書き換わる。
開発を行う中で更新されていく様々な成果物を「誰が」「いつ」「何を変更したか」というような情報をバージョン（改定・更新ごと）で管理していくことで、綿密なバックアップのような役割を果たします。

## Github とは

Gitを利用したホスティングサービスのこと。Gitのシステムを複数人で使えるようになる。
ユーザー数は1000万を越えていることから、世界中から評価されているサービスだといえる。

<font color="red">まとめると、Gitは「システム」、Githubは「サービス」ということになる。
我々はGithubというサービスを通してGitというシステムを利用できる。</font>

# Github用語解説

## ローカルリポジトリ

「リポジトリ」とは、Githubでディレクトリやファイルなどを保存する場所のこと。
管理したいディレクトリをリポジトリと連携させることで、ディレクトリ内のすべてのファイルの変更履歴を記録することができる。
ローカルリポジトリとは、**自分のパソコン内で管理するリポジトリ**のこと。

## リモートリポジトリ

外部にあるサーバーなどネットワーク上にあるリポジトリのこと。
Githubを使えば複数人で作業を分けて開発する際、それぞれのパソコン内のリモートリポジトリで開発を行い、完成すれば共通のリモートリポジトリにアップロードするという効率的な開発ができるようになる。
また、個人開発でもネットワーク上にデータを保存・共有したいときに便利。

## クローンとプル

クローンとは、リモートリポジトリのファイルのすべてをローカルリポジトリにコピーして同期させること。

プルとは、ローカル側とリモート側で差異のあるファイルだけをコピーして同期すること。


## コミット

コミットは、ゲームで言うセーブのようなもので、追加・変更したファイルをリポジトリに記録する。

## ブランチとマスターブランチ

ブランチは、履歴の流れを分岐して記録していくためのもの。
分岐したブランチは他のブランチの影響を受けない。よって同じリポジトリで複数の開発を同時に行うことができる。

マスターブランチは、本流のブランチのこと。リポジトリに最初のコミットを行うと、masterという名前のブランチを作成する。
その後のコミットはブランチを切り替えるまでmasterブランチに追加されていく。

## プルリクエスト

ローカルリポジトリでの変更を他の開発者に通知するGithub特有の機能のこと。
会社内・チーム内でコードレビューするときによく利用される。

## プッシュとマージ

プッシュとは、ファイルの追加・変更の履歴をリモートリポジトリにアップロードするための操作のこと。
ローカルからリモートへ反映させること。

マージとは、変更を加えたブランチをmasterブランチに統合すること。









<hr>

今回はコチラのサイト様を参考にさせて頂きました。
イラスト表現でとても分かりやすいので必見です。

https://zukulog098r.com/git/


# とにかく手を動かしながらGitとGithubを学ぶ

https://ninjacode.work/
bundle install 時にpgでコケてしまうときに行ったこと

バージョンアップ等を行ったあと、bundle installを実行した際にpgの箇所でコケてしまったときに行ったことを備忘録として。

## 結論
```
bundle config build.pg --with-pg-config=/usr/local/Cellar/postgresql@14/14.6/bin/pg_config
```
/usr/local/Cellar以下から`pg_config`ファイルを探して、そのパスを`bundle config`で設定することで解決しました。


## 解決しなかった方法
色々調べていると、
```
brew reinstall postgresql
brew reinstall libpq
```
この辺のコマンドでpostgresqlをインストールし直したりすると解決するよ系の記事が沢山出てきましたが、私の環境ではダメでした。

## 参考になった記事
https://elastictechdays.info/rails-postgresql-bundle-install-error/
RSSとクロスドメイン制約

# やろうとしたこと
他サイトのRSSを読み込んで、自サイトに表示させるようなことをやろうとしました。
RSSとはサイトの新着情報、更新情報を自動で取得して表示してくれる機能のことです。
他のサイトの新着記事のタイトルリンクがでていて、クリックするとその記事に飛ぶ、ていうよくあるあれです。

# やってみた
rssを加工して必要な値をとれるようなコードを書きました。
コード的に値はとれているような感じに見えましたが、どうしてもうまくいきませんでした。
なんでだろ？て悩んだところ、クロスドメイン制約というものに引っかかってるらしい、ということがわかりました。

# クロスドメイン制約とは？
ブラウザはセキュリティ上ほかのドメインからデータを引き出すことができないっていう制約です。

# じゃあどうしたか
ぐぐってみたらいくつか回避するやり方がでてきました。
いろいろ試した結果、
主に参考にさせて頂いたのは以下の記事です。
https://on-ze.com/archives/5062

一旦phpで取得してからjQueryで取得する、ていうことができるみたいです。
恥ずかしながら仕組みを完全に理解はできていませんが、コーディングをいじって最新一件分の記事のみ自サイトのみ表示させるような処理をしました。
なんとか無事表示できました。
統計検定2級合格に向けた勉強方法


統計検定2級合格に合格したため、その勉強方法を書いておきます。もし参考になれば幸いです。

# 背景

データ分析系の仕事も任されるようになってきたため、基礎を固め直すことを目的として受験しました。

文系学部卒（経営学）で大学卒業時点では統計学に関する知識はなかったんですが、社会人2年目から4年ほど機械学習エンジニアとして働いており、仕事で必要な知識は穴埋め的に持っていました。ただ、これまではどちらかというと MLOps 関連の仕事の方が多く、今回の受験に関してはゼロから勉強し直す形で勉強しました。

また、2級の受験が終わり次第準1級の勉強に移ろうと考えていたため、ゴールとしては2級合格というよりも、『統計学入門（赤本）』の内容を理解することにおいていました。

# 勉強内容

受験の1ヶ月前から勉強を始め、最初の2週間は平日は仕事終わりに4時間ほどずつ、試験前の1週間はそれに加えて土日祝日に8時間ほどずつ勉強しました。

勉強した内容と時間配分しては

1. 『[統計学入門（赤本）](https://amzn.asia/d/diZjKCe)』の理解（2週間）
2. 『[統計学演習](https://amzn.asia/d/hK5MmIn)』での問題演習（1週間）
3. 過去問でのテスト対策（1週間）

となっています。

## 『統計学入門（赤本）』の理解（2週間）

https://amzn.asia/d/diZjKCe

まず、『[統計学入門（赤本）](https://amzn.asia/d/diZjKCe)』を理解するところから始めました。自分が書かないと理解できないタイプなので、本に書かれた内容を全てノートにまとめ直すという方法で勉強しました。

「以降の問題演習で統計学入門を開かなくて済むこと」を完了基準として

- 自分の中で咀嚼し理解してからまとめること
- 漏れがないようにまとめること

をルールとして本の内容をまとめていきました。

そもそものゴールがこの本の理解だったため時間をかけたこと、おそらく一番時間のかかる勉強方法をとっていたこともあり、本来ここはもっと短い時間で終わらせられたのかなあと思います。

https://amzn.asia/d/emnFvwy

また、統計学の知識がない方は、『[完全独習 統計学入門](https://amzn.asia/d/emnFvwy)』など、より初学者向けの本を通読してイメージをつけてから統計学入門を読むのがいいかもしれません。

## 『統計学演習』での問題演習（1週間）

https://amzn.asia/d/hK5MmIn

統計学入門をまとめ終わった段階で

- 理解の漏れがないかの確認
- 問題演習を通じた公式・解法などの暗記

を目的に『[統計学演習](https://amzn.asia/d/hK5MmIn)』で問題演習をしました。

問題演習は過去問でも可能ですが、過去問は出題内容がランダムであり上記目的に合わなかったことから、順序立てて網羅的に問題演習を行えるこの本を選びました。

問題を一度解いてみて、解けなかった問題や怪しかった問題は解説を読みながら解けるようにし、次の日に解き直す、解けなければまた解説を読みながら解けるようにし、また次の日に解き直すということを繰り返す形で勉強を進めていきました。また、理解が足りていなかった部分が出てこれば、『統計学入門』に戻ってその部分を再度まとめ直すということを繰り返していきました。

時間がなかったこと、その後過去問を解くことも決めていたこともあり、全問完璧にするというよりは、自分の理解の足りていないところ、理解の漏れがありそうなところを中心に問題を選んで解いていました。

## 過去問でのテスト対策（1週間）

https://amzn.asia/d/7Bk0k1Q

最後の1週間は

- 理解の漏れがないかの最終確認
- 試験形式に慣れること

を目的に、公式問題集で過去問演習を行いました。

- 『[日本統計学会公式認定 統計検定 2級 公式問題集(2018〜2021年)](https://amzn.asia/d/7Bk0k1Q)』
- 『[日本統計学会公式認定 統計検定 2級 公式問題集(2014〜2016年)](https://amzn.asia/d/je5RrYJ)』

こちらの二冊を購入し、平日は一日2回分、土日は4回分解いていきました。古い過去問に関しては Amazon やメルカリで中古のものを購入することができます。年を追うごとに傾向も変わってきているため、古い順に解いていくことをおすすめします。

ここまでの勉強で合格ライン（PBTだと70点が目安らしい）以上を取ることはできたのですが、『統計学入門』や『統計学演習』でカバーできていない範囲（そこまで多くはない）があったり、問題文の用語の呼び方がこれら二冊とは違ったりしたので、その部分は『[統計WEB](https://bellcurve.jp/statistics/course/)』で解消していきました。

https://bellcurve.jp/statistics/course/

また、統計WEBには[過去問の解説記事](https://bellcurve.jp/statistics/blog/19188.html)もあるので、公式問題集の解説でわからなかった問題はこちらで確認しました。

https://bellcurve.jp/statistics/blog/19188.html

また、2021年6月実施分に関しては最後のPBTだったこともあってか、他の回に比べて難易度が上がっており、気持ちが割と折れるので飛ばしちゃってもいいかもしれません。

# 試験中の注意点

おそらく試験問題の流出を防ぐためですが、計算用紙として紙ではなく、ラミネートされた紙を渡されます。そこに水性ペンで書き込んで計算していく形になるのですが、ペンが割と太く、小さい字で書き込んでいると確認の時に自分の書いた数字が判別できないといったことが起こります。ラミネートされた紙は試験中に追加でもらうことができるので、じゃんじゃん使っていった方がいいかもしれません。

また、水性ペンのインクが手につくので、問題が解けなくて焦っても試験中に顔を触ったりはしないようにした方がいいです。試験後鏡見てびっくりするので、、、
DockerでPython実行環境を爆速で作ってみる

## 概要
「Pythonのライブラリを使って色々実験したい！でもローカル環境汚したくないしなー」と思うことがあったので、DockerによるPython実行環境の型を作ってみました

## ディレクトリツリー
```
.
├── app
│   └── main.py
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── .env
```

appディレクトリの中に好きなだけpythonファイルを入れてやるというイメージです

## 使いたいライブラリをrequirements.txtに記述

```requirements.txt
pandas
numpy
tensorflow
...
```
## Dockerfile

```Dockerfile
FROM python:3.9

COPY requirements.txt .
COPY ./app/ ./app/

RUN pip install --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt

WORKDIR /app
```

requirements.txtに記述したライブラリをまとめてpipでインストールしてくれます

## docker-compose.yml

```docker-compose.yml
version: '3'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: python-sandbox
    working_dir: '/app'
    volumes:
        - ./app:/app
    env_file: .env
```

環境変数を使う場合は、env_fileで.envを読み込ませてあげます。
コンテナ名はお好きなものにしてください。（今回はpython-sandboxという名前にしました）


## コンテナを構築

コンテナ・イメージを作成
`docker-compose up -d`

コンテナ内に入る
`docker-compose exec python-sandbox bash`

コンテナ内に入れたら作成したpythonファイルをすぐに実行することができます。

## 参考・関連記事
https://qiita.com/jhorikawa_err/items/fb9c03c0982c29c5b6d5

https://zuma-lab.com/posts/docker-python-settings
【Athena】Query exhausted resources at this scale factor

# Query exhausted resources at this scale factor というエラーが発生

こちらのエラーはエラーメッセージの通り、Athenaのリソースが足りないというエラーです。

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/performance-tuning.html

リンクを参照すると以下のメッセージも同様にメモリが足りないなどに起因して発生するエラーです。
>INTERNAL_ERROR_QUERY_ENGINE
EXCEEDED_MEMORY_LIMIT: Query exceeded local memory limit
Query exhausted resources at this scale factor
Encountered too many errors talking to a worker node. The node may have crashed or be under too much load.

# 対応方法
Athenaのリソースを増強するのはできないため、クエリ・データを見直すしかありません。
先程のリンクに対応方法も記載があるのですが、自分でよく対応するやり方を書いておきます

## parquetファイルを利用する
CSVファイルを利用しているならparquetファイルに置き換えるのをおすすめします。列指向のファイルなので列を指定することでスキャン量を減らすことができます。これはクエリ速度・費用という観点からも有効です。

## パーティションの利用
パーティションを利用することでこちらもスキャン量を減らすことができます。
ただリンクにもある通り100,000を超えるようなパーティションは逆にリソースを使うようなので注意が必要です。不要なパーティションはつくらない・削除するようにしましょう。

## Order Byを避ける
order byは単一のノードで処理するようです。なのでorder byをかけると結構このエラーが発生してしまいます。
order byをなくすとクエリが通る事があるので一度試してみてもいいかもしれません。とはいえorder byしないとクエリの意味がないときもあるのでそのときは他のやり方を探らないといけないのですが…。

## クエリを分割する
これは面倒ですが一番効くやり方です。特にCTASの利用時は期間やidなどで絞って細かく処理をさせることでリソースエラーを避けることが可能となります。
例えばyear, monthでデータが分かれているなら
```sql
WHERE year = 2022
```
とつけたり

```sql
WHERE year = 2022 AND month = 1
```

として年月の分繰り返分ことでエラーを回避できます。
AthenaはINSERT分にも対応しているので繰り返すハードルは以前より下がっています。

Athenaは大量データ向けのサービスですが、大量すぎると処理ができなくなり、RedShiftなどの利用が必要となります。ただこの場合段違いでコストが掛かるのでなるべくAthenaで完結させたいところです。このようなやり方で回避できれば幸いです。
オークファングループ（開発部） ー 組織紹介

# はじめに

オークファングループの開発部として Advent Calendar に参加するのも 5年目となりました。
初日となる 12/1 は毎度、明日から記事を書いてくれるメンバーが所属する会社・事業と、開発・システム環境の紹介をすることになってい（る感を出してい）ます。

この場がメンバーにとって、定期的なアウトプットの場となると共に、
組織外の人たちにとって、こんな組織が世の中にあるという話だけでも良いですが
何かしら参考になる情報を拾える場になれば幸いです。

@aufan-nodake

# 組織の紹介（ざっくり）

オークファングループですが、
名前を冠する相場検索サービス（ https://aucfan.com/ ）を運営するオークファンと
問屋・卸売・卸・仕入れ専門サイト（ https://www.netsea.jp/ ）を運営するシナビズを
中心としたグループ会社となります。

グループ会社として人数を数えると 150人ほど。
その中で、プログラム書いたり、デザインしたり。開発に携わるメンバーから本イベントに参加してもらっており
その母体となる「開発部」は 30～40人ほどの規模の組織です。

現在は、withコロナで、リモート主体のメンバーが多く、
Zoom や Slack にてコミュニケーションを行いつつ
開発や運営といった日々を過ごしております。

# 明日から

明日（12/2）からメンバーによる記事が公開されていきます。
私達の自己紹介にもなっている記事です。

AdventCalendarが好きで見てまわっている方や、検索でたまたま流れてきた方でも
記事や、書かれた出来事、書いた人なりに興味を持って頂けたら嬉しく思います。


また、本記事に限らず、今回の AdventCalendar の記事で気になることなどありましたらご連絡ください。

以上となりますが、今年も宜しくお願い致します（違



# 以下、附録
## 特徴 － 業務

* 主に自社サービスの開発、保守運用を担当
    * 上述の他にも複数のサービスがあり、チームは小さく担当範囲は広め
        * 若手のうちから、設計・検証を担当することが多い
        * 小さなチームにしては、それなりの規模のシステムやデータを触っている
            * 数十台をシステムとして見ないといけないこともあれば、数百台を視野に入れて動くことも
            * 日々のトランザクション数は、そこそこ。検索対象のデータや、流通額から想像してみてください :)
        * 10年以上続くものも含め、複数文化が交錯。レガシーから新しめの技術まで

* Web を中心としたシステム、が対象
    * PHP や JavaScript 、Kotlin や Java が多く使われています
        * Python や Go、Ruby
    * バックエンドの業務システム、データ連携ももちろん
    * データ収集、分析基盤も一応あります

## 特徴 － 組織

* じゆうなしゃふう（メンバーに、うちの組織の特徴は？と聞いたら返ってきた答え）
    * 割りと好きなことが出来る。主体性を持っていたほうが活躍できる、、、らしい

* 平均年齢 35歳弱。
    * 感覚的には、もう少し若いかと思っていたけど。経過年数を忘れていた感
    * 20代 が 4割ほど存在
        * 若手、未経験勢も活躍中

* ひきこもり増減
    * 時代に合わせてリモートの仕方も熟れてきたでしょうか
        * 理由があれば、会社に来て話すことも
        * 短期ですが遠隔地リモートをした人も出てきました...



## 事業について


やっていることは、サービスに表れていたり、コーポレートサイト (*1) に色々と書いてありますが、
事業構想としては、社内で使われる資料から引っ張ってくると、こんな感じ ↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377233/b7998518-5c19-bee3-1810-26c04167d8be.png)

決算発表資料から、もう少し

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377233/0b5846b1-5dc1-c9ee-d804-58f419b1a95f.png)

オークションやマーケットプレイス、通常の売買だけでなく様々な情報を見ている会社として、海外含めグローバルにモノの再流通を促進する社会のインフラでありたい、そんな会社になります。

(*1) https://aucfan.co.jp/business/
JavaScriptについての基礎をおさえる③

## Object（連想配列）を使う
[連想配列とは](https://wa3.i-3-i.info/word11931.html)
通常の配列と同様に、キーとバリューの組み合わせだが、キーに文字列を採用することができる。

```javascript:main.js
let colorsObj = {
  red: "あか",①
  green: "みどり",
  'blue': "あお"②
};

console.log(colorsObj);

console.log(colorsObj["red"]);③
console.log(colorsObj.red);④
console.log(colorsObj.blue);
```
Objectを作成する場合には {}で囲み、キーとバリューを「:」で区切る。丁寧に書く場合やキーにスペースが含まれる場合などは"blue"のようにキーを文字列としてクオーテーションで囲むが（②）、たいていの場合は①のredのように囲まずに指定しても動作する。

colorsObj
|キー  |バリュー |取り出し方1          |取り出し方2       |
|---  |---   |------------------ |--------------- |
|red  |あか   |colorsObj["red"]   |colorsObj.red 
|green|みどり  |colorsObj["green"] |colorsObj.green
|blue |あお   |colorsObj["blue"]  |colorsObj.blue

値を取り出す場合には③のようにキーの文字列を[]で指定することで取り出せる。この記法には省略記法があり、④のようにドットでつなげて書くことができる。
![スクリーンショット 2022-11-30 17.16.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884270/11422518-9525-91d2-6b2f-1ed08c784bd5.png)

一度作ったオブジェクトの内容を変更したい場合には = 演算子を使って代入することで行える。この時キーの指定は取得する場合と同様に[]で指定するスタイルでも、「.」でつなげるスタイルでも可能である。

```javascript:main.js
colorsObj["red"] = "レッド";
console.log(colorsObj.red); // => レッド

colorsObj.blue = "ブルー";
console.log(colorsObj.blue); // => ブルー
```
コンソールを通してみると、次のように出力される。
![スクリーンショット 2022-11-30 17.19.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884270/0dc22946-0def-8718-8346-c319748a9074.png)

> 参考文献
[ステップアップJavaScript フロントエンド開発の初級から中級へ進むために](https://www.amazon.co.jp/%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97JavaScript-%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E9%96%8B%E7%99%BA%E3%81%AE%E5%88%9D%E7%B4%9A%E3%81%8B%E3%82%89%E4%B8%AD%E7%B4%9A%E3%81%B8%E9%80%B2%E3%82%80%E3%81%9F%E3%82%81%E3%81%AB-%E4%BD%90%E8%97%A4-%E6%AD%A3%E5%BF%97-ebook/dp/B09MQ53Y2C/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=9G912ZQLVXY8&keywords=%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97JavaScript&qid=1669644043&qu=eyJxc2MiOiIxLjEwIiwicXNhIjoiMS4wMCIsInFzcCI6IjAuOTcifQ%3D%3D&sprefix=%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97javascript%2Caps%2C293&sr=8-1)
picoCTF Writeup picoGym Practice Challenges More Cookies (注意<spoiler>)

# More Cookies
Description
I forgot Cookies can Be modified Client-side, so now I decided to encrypt them! http://mercury.picoctf.net:10868/

https://tech.kusuwada.com/entry/2021/04/08/121028#section9

```.py:solved.py
import requests
import string

candidates = string.ascii_letters + string.digits + '+/'
url = 'http://mercury.picoctf.net:10868/'

flag_format = 'picoCTF{'

def attack(cookie):
    cookies = {'auth_name': cookie}
    res = requests.get(url, cookies=cookies)
    #print(res.text)
    if flag_format in res.text:
        print(cookie)
        print(res.text)
        return True
    return False

while True:
    s = requests.session()
    res = s.get(url)
    cookie = s.cookies.get('auth_name')
    print(cookie)
    for i in range(len(cookie)):
        print(i)
        for c in candidates:
            chall = cookie[:i] + c + cookie[i+1:]
            #print(chall)
            if (attack(chall)):
                exit(0)
```
bitstar CROSS 2022 in EZOを開催した

# 言い訳
こういう記事はイベント開催後の鮮度がいいうちにさっさと書いたほうが良いんですが、イベント開催後忙しさにかまけてるうちに書くチャンスを逃していて、Advent Calendarの季節が来たのでイキって12/1に登録したのでした。

# bitstar CROSS 2022 in EZOとは？
>ビットスターは、サーバー設定などのITインフラ・システム開発からWEBデザイン・24時間365日の運用監視まで、ワンストップで様々なITソリューションを提供する企業です。見方を変えるとビットスターは様々なITが交差＝CROSSしている会社ともいえます。
>ITインフラxWEBデザイン・システム開発x運用監視などなど…。普段ITでCROSSするビットスターが今回はそのCROSSをIT外の領域まで拡げ、参加者の皆さまとビットスターそして参加者の皆さま同士が様々にCROSSし、今までになかった人との出会いやコラボレーションの種が見つかる、そんな場所を提供していきたいと思っています。

参考URL：https://bitstar.jp/news/20220927/39567/
という趣旨でビットスター株式会社が初めて主催したITカンファレナスです。
本イベントを設計するにあたって大きく意識したポイントが2つあります。
それは **「ビットスターの領域をわかってもらう」** と **「今までにないカンファレンス体験を提供する」** です。
本記事ではこの2つを主軸に本イベントの設計について解説します。

# セッション設計

**「ビットスターの領域をわかってもらう」** を主に意識したのがセッション設計です。
本イベントではキーノートに札幌で活躍されているプログラマーの島田さんをお呼びするとともに、通常セッションは弊社の社員がセッションを担当しました。
各セッションの詳細については、https://bitstar.doorkeeper.jp/events/143704 を確認していただきたいのですが、インフラからソフトウェア開発、WEB制作、チームや組織づくりなど多岐に渡っています。
通常、カンファレンスにおいてこういうセッション設計はおこないません。振れ幅が大きすぎるからです。
なぜ、今回、こういう振れ幅の**大きすぎる**設計をおこなったかというと、

1. ビットスターがカバーしている領域を表現したらこうなった
1. 幅広い参加者が想定された

の２つがあります。
1つ目は今回はビットスターがやっていることを社内外に広く知ってもらう目的があったため、できるだけその領域をカバーするようにしました。
2つ目は主にこれは社内からの参加者を想定しましたが、ビットスターに所属しているエンジニアはインフラからソフトウェア開発、WEBデザインと多岐に渡っています。今回は自分が所属しているチーム以外のことも知ってほしいという思いもありましたが、また、自分の担当領域や専門領域に学びを得てほしいという思いもありました。
そして、ITに関わるあらゆる人向けに組織づくりにおいて学びやヒントを得てほしいと思い、キーノートをお願いしました。

# 会場設計
 **「今までにないカンファレンス体験を提供する」** を主に意識したのが会場設計になります。
今回はキングムーという札幌で随一の広さを誇るクラブでカンファレンスと懇親会を実施しました。
カンファレンス自体は別の場所でおこなっても良かったのですが、その後の移動やイベントの最初から最後までの雰囲気づくりを考えて、懇親会と同じ場所でおこなうことにしました。
懇親会については従来であれば飲食を用意して懇親してもらうのが通例ですが、せっかくのクラブですので社員DJやゲストDJにDJプレイしてもらい盛り上げてもらいました。

# 結果どうだったか？
アンケートやtwitterなどのSNS投稿を見ると、皆さん楽しんでいただけたようでなによりです。
カンファレンスのスライド表示位置が高すぎてちょっと見るのに大変だったなど改善点はいろいろあるようですが、来年の開催に向けて改善していけたと思っております。
ご参加いただいた皆様、ありがとうございました。
CapacitorのConfigファイルをTypeScriptにすると型でチェックできて捗る話。

Capacitorをinitすると、Capacitorプロジェクトの設定ファイルは `capacitor.config.json` が生成されます。

```json
{
  "appId": "com.example.app",
  "appName": "example",
  "bundledWebRuntime": false,
  "webDir": "dist",
  "plugins": {
    "SplashScreen": {
      "launchShowDuration": 0
    }
  }
}
```

もちろんJSONファイルでもいいのですが、JSONファイルだとキーのtypoなどがあった時に気づけません。また、ドキュメントをみると、TypeScriptでの設定ファイルがでてくるんですよね。

https://capacitorjs.jp/docs/config

そこで、上記ファイルをTypeScriptファイルにしてみましょう。  `capacitor.config.ts` というファイルを作成して、中身を以下の通りにします。

`CapacitorConfig` は https://github.com/ionic-team/capacitor/blob/main/cli/src/declarations.ts でどんな型かを確認することができます。

```ts
import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.example.app',
  appName: 'example',
  bundledWebRuntime: false,
  webDir: 'dist',
  plugins: {
    SplashScreen: {
      launchShowDuration: 0,
    },
  },
};

export default config;
```

次に、 `capacitor.config.json` を削除します。

設定ファイルをJSONからTypeScriptにするのはこれだけで完了です。次回の `npx cap` コマンドから、自動的にCapacitor CLIは `capacitor.config.ts` を読み込むようになります。

簡単ですね。それでは、また。
労働関連法規

# 問題１
### 準委任契約の説明はどれか？
#### 準委任契約とは？
```完成責任や瑕疵担保責任を負わない形態で業務```を委託する契約。ただし、民法の定めにより、その業務のプロとして当然な```注意を払って業務を遂行する善管（ぜんかん)注意義務```がある。成果物に対価ではなく、```作業期間などで報酬を支払われる仕事に適した契約形態```。

# 問題２
### 偽装請負とされる事象はどれか？
#### 請負契約とは？
民法の定めにより、```請負人には請け負った仕事を完成させる義務が課されている。```また、成果物に欠陥やミスがあった場合、```一定期間は補修・修正する義務も負う```。(瑕疵担保責任)

#### 偽装請負とは？
請負契約を結んでいるのにも関わらず、実際の業務指示は発注先企業側が直接行なっている違法な労働形態。

* 偽装請負」とは、```実質的に「労働者派遣」又は「労働者供給」である```のにもかかわらず、「請負契約（“仕事の完成”が契約内容となっている契約）」や「業務委託契約（何らかの業務を委託する契約）」に偽装する行為のことです。
    ##### 出典
https://keiyaku-watch.jp/media/kisochishiki/gisoukeoi/#:~:text=%E3%80%8C%E5%81%BD%E8%A3%85%E8%AB%8B%E8%B2%A0%E3%80%8D%E3%81%A8%E3%81%AF%E3%80%81,%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E7%A6%81%E6%AD%A2%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

##### 関連記事
https://www.mhlw.go.jp/file/05-Shingikai-11601000-Shokugyouanteikyoku-Soumuka/0000093580.pdf

# 出典
https://gihyo.jp/book/2022/978-4-297-12375-8
【デグレ？】SPOリストコネクタのアクションでリスト名が出てこない場合はリストID直接入力

ここ最近Power AutomateのSharePoint Onlineコネクタのリストまわりのアクションの編集画面の挙動が怪しいです。

リスト名称は表示されずＩＤ、[×]で消すとドキュメントしか出てこないという状況です。（ドキュメントじゃないんだが。。）

![スクリーンショット 2022-11-30 165654.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1469675/f2420e5c-c238-c741-96fa-4ad3d38a73f4.png)
![スクリーンショット 2022-11-30 165724.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1469675/6f8fada0-a294-f065-4a97-6988a4b316cf.png)

### 対処法

[こちら](https://qiita.com/negimijin/items/2880ae7dec918a6bac79)でビューIDの取得方法とあわせてリストID取得について引用をしています。

　?List=%7B<B>6fb2371a-01be-4a6d-881e-ccbd1876002b</B>%7D
  ※太字部分がリストＩＤに相当

手間ですがURLからIDを抽出（後ろの%7Dを含んでしまっているとエラーとなりワークフローの保存ができなくなります）、カスタム値の入力を選択、コピペ入力しましょう。
STM32G071のI2Cを使い、AQM0802A液晶で文字表示(簡易版)


x NUCLEO-G071RB

x 原因は、わからないが液晶がちらつく場合は、ウェートを調整してね!!

目的
I2C液晶のテスト



![o_cop238.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/8b27a3ab-4a4c-80c6-db7d-43865f30261a.jpeg)



arduinoのプログラムと完全に同じ



```c++



//AQM0802A_DEMO1

#include <Wire.h> //I2C library

//i2cバッファー
char data_read[4];

//初期レジスター
char INIT_com[] = {
  0x0, 0x38, //1
  0x0, 0x39, //2
  0x0, 0x4,  //3
  0x0, 0x14, //4
  0x0, 0x70, //5
  0x0, 0x56, //6
  0x0, 0x6C, //7
  0x0, 0x38, //8
  0x0, 0xC   //9
};

//画面のクリアレジスター
char INIT_cls[] = {0x0, 0x1};


//i2c書き込みルーチン
void i2c_lcd_w(char *buff1) {
  Wire.beginTransmission(0x3E);
  Wire.write(buff1[0]);
  Wire.write(buff1[1]);
  Wire.endTransmission();
  delay(2);
}//i2c_lcd_w


void ns_putc(char ch)
{

  data_read[0] = '@';
  data_read[1] = ch;

  //I2Cに送信
  i2c_lcd_w(data_read);

}//ns_putc


void ns_puts(const char *str1)
{

  //文字の中身がゼロか
  while (*str1) {

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

  }//while

}//ns_puts


//カーソルの移動
void setCursor(int col, int rows)
{

  data_read[0] = 0x0;
  data_read[1] = 0x80 +  (rows * 0x40) + col ; //カーソルを移動

  //I2Cに送信
  i2c_lcd_w(data_read);

}//setCursor


//初期化関数
void setup()
{

  //I2Cの初期化
  Wire.begin();

  //液晶の初期化
  for (int ii = 0; ii < 9; ii++) {
    i2c_lcd_w(&INIT_com[ii << 1]);  // ii << 1 = ii * 2
  }//for

  //画面のクリア
  i2c_lcd_w(INIT_cls);

  //表示
  setCursor(0, 0); ns_puts("HELLO");
  setCursor(0, 1); ns_puts("WORLD");

}//setup


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



```
ビルのモデルを作る

[MoAR](https://whatever.co/moar/) はビルをキャンバスにした AR コンテンツなのでキャンバスとなるビルの正確なモデルが必要になる。

# PLATEAU

https://www.mlit.go.jp/plateau/

東京だし PLATEAU のデータ使えるかな？と思ってデータ確認してみたところ LOD2 で他より精度高く作られてはいるものの今回の用途にはディティールが足らなかった。（周辺のビルとかはオクルージョンとかには使えるかも

![WHEREVER in PLATEAU](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2595/795a043a-fbcb-ee74-c831-a9295a1426f3.png)

## PLATEAU から個別のビルモデルを抽出する方法

1. [PLATEAU View](https://plateauview.mlit.go.jp/) で建物 ID を調べる。
 ![建物ID](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2595/548a0ee7-bd8c-86a7-eb24-b19403044a1e.jpeg)
1. [CityGML](https://www.geospatial.jp/ckan/dataset/plateau) をダウンロードする。
1. ダウンロードした ZIP ファイルを展開すると大量の gml ファイルが出てくるので、建物 ID を全文検索して該当するモデルが含まれる gml ファイルを特定する。（gml ファイルには複数の建物データが含まれている
1. [PlateauCityGml](https://github.com/ksasao/PlateauCityGmlSharp) で↑で見つかった gml ファイルを処理すると建物1つずつの OBJ ファイルが生成される。
1. 建物 ID がファイル名になっているので該当するファイルを見つける。

# 自分でモデリングする

PLATEAU のモデルが使えないのなら作るしかないので図面もらって Fusion 360 でモデリング。

![図面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2595/fc16f9c5-dc5b-0c34-2f8e-143ba81ef978.png)

プリントされた図面をスキャンした PDF なのでところどころ歪んでたり傾いたりしてるやつを Photoshop で修正して Fusion 360 で下敷きにしてトレース。数値読めない部分もあったりするのも勘で適当に合わせる。割とシンプルな扇型だったので助かった。

![195022427-f59aa061-279d-4a87-8175-695f248d1ccd.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2595/80bb1c07-4307-9434-db53-6e93c869a9f3.gif)

<iframe width="100%" height="500" src="https://www.youtube.com/embed/Y00UTUyazmE" title="Fusion 360 model" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

作ったモデルを Immersal で AR 表示してみたところ。ちょいズレてるのが、ドリフトしてズレてるのかモデルが正しく作れてないのかそもそも建物が図面どおりに作られてないのかがわからないところが厄介だけど PLATEAU モデルよりは全然よい。

![194994246-81fce0cc-e993-47b7-9bd5-f8f0ef32ac10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2595/60cfcb87-e88d-557b-7c07-4ea11ccac673.png)
左が自分でモデリングしたやつで、右が PLATEAU のモデル。

## Blender で作り直す…

Fusion 360 でモデリングしたものは OBJ ファイルなどのポリゴンモデルとして書き出すと Unity などの他アプリで使用できるようになる。で、Fusion 360 からポリゴンモデルとして書き出すと、めっちゃ細長いこれは線なのでは？というポリゴンとかめちゃくちゃ小さいこれは点なのでは？というポリゴンとかが生成されたりするし当然ながらトポロジーみたいなのは全く考慮されないデータが出てくるので、単にそれを表示するだけならまだいいのだが（よくないのだが）、ここからさらに加工しようとするとその構造がアレすぎてかなり辛い。

という事情があって最終的に MoAR アプリで使っているモデルは、Fusion 360 のモデルを参照しながら Blender で1から再モデリングしたものだったりします。

![Blender model](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2595/ed26ad47-c47b-1d38-4b10-f15f5b112d05.png)

左が Fusion 360 から書き出したモデルで、右が Blender で1からモデリングしなおしたもの。
AWS CLIでAWS SSOを使用する

# 概要

AWS CLIでSSOの初期設定をする際の手順をよく失念するので、主に自分用の備忘録です。

# 前提

- AWS CLIのインストール
- direnvでAWS_PROFILE設定済み(これは `--profile` を省略する為に使用しています)

# プロファイルの設定

```shell-session
aws configure sso
```

```shell-session
% aws configure sso
SSO session name (Recommended): [ここは既存のセッション名と重複しなければ自由に設定OKです]
SSO start URL [None]: [ここはSSOでアクセスするURLを指定します]
SSO region [None]: [ここはリージョンの指定です]
SSO registration scopes [sso:account:access]: sso:account:access
```

ここまで対話式で入力するとデフォルトブラウザが起動します。
ブラウザの方でSSOログインすると自動でコードの入力までされます。
(ブラウザを閉じてしまったなど中断してしまった場合はコンソールに下記のようなメッセージが表示されているので、URLをブラウザに入力してSSOログインし、表示されているコードを入力します。

```shell-session
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.ap-northeast-1.amazonaws.com/

Then enter the code:

XXXX-XXXX
```

無事ログインできたらアクセスするAWSアカウントの指定をします。
候補が出てくるので選択します。

```shell-session
There are NN AWS accounts available to you.
```

無事アクセスするAWSアカウントの指定が終わると、今度は使用するロールの指定をします。
これも候補が出てくるので選択します。

```shell-session
Using the account ID XXXXXXXXXXXX
There are N roles available to you.
```

使用するロールの指定も終わるとデフォルトでクライアントがアクセスするリージョンと出力フォーマットの指定を行い、完了です。

```shell-session
Using the role name "AdministratorAccess"
CLI default client Region [None]: ap-northeast-1
CLI default output format [None]: json

To use this profile, specify the profile name using --profile, as shown:
```

# 次回以降のログイン

以下コマンドを実行すると、標準ブラウザで許可画面に遷移します。

```
aws sso login
```

許可するとSSOログインは完了です。

# 参照

- [AWS IAM Identity Center (successor to AWS Single Sign-On) を使用するための AWS CLI の設定](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-sso.html)
git-setretsでcommitができなくなった【解決済】

#  GitHubDesktopでコミットできなくなった
![Fiyj7aOUcAAQ0Dw.jfif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627142/3aff8935-fe7b-1bdb-6b2b-1d505bba912e.jpeg)

私はWindowsでGitHubDesktopを使用しているのですが、いつもの通りcommit to mainしようとしたら画像のような文字化けしたエラーが出てきてしまいました。
この解読に無駄な時間をかけてしまいました...

実は、トークンを間違えてアップロードしてしまわないようにGit-secretsをインストールしていました。
これが原因かと思い、フォルダの削除をしたのですが解決しませんでした...

#  CUIではエラーメッセージが出てきた

諦めてCUIでcommitしたら文字化けしていないエラーメッセージがちゃんと出てきました。
![Fiyx8WZUUAAD-DT.jfif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627142/fffe1dc8-d113-67e3-6b0e-2375dbd30baf.jpeg)

`git: 'secrets' is not a git command` ということなので、commitがsecretsに置き換えられているようです。

これを設定しているのは
.git/hooks/commit-msg
.git/hooks/pre-commit
.git/hooks/prepare-commit-msg
の実行ファイルなので削除してください。
gtiは隠しフォルダになっている可能性があります。

するとcommitできるようになっていると思います。

brewを使った場合は

~~~
$ brew remove git-secrets
~~~
でアンインストールできます。

git-secretsフォルダを削除しても良いようです。
個人で基板設計をするときの部品選びの５つの観点

# 部品選定どうやってやるか？
大企業で基板設計する場合、認定された部品メーカーリストや認定された部品リストなどが存在するので、ある程度使える部品は絞られる。しかし、個人で基板設計をする場合、無数に存在する部品からどのように絞っていいか迷う。要求スペックで絞られればよいが、検索するとスペックが合致する部品も無数に存在することがわかる。

最近基板を作った経験から、どういう観点で部品を選ぶべきかを記載する。

## １）基板メーカーの標準部品リストから選ぶ
基板メーカーは各々標準部品リストを持っている。発注する基板メーカーが決まっている場合は標準部品リストをもらい、まずはそこから選んだ方がよい。確実に手に入るし、部品代が安く済む場合が多い。チップ抵抗やチップコンデンサなどは標準部品リストから選び、なるべくリストの部品から逸脱しない抵抗定数などにしていく方がよい。

## ２）Digikeyで在庫がたくさんある
昨今の半導体不足でいろんな部品が入手しづらくなっている。うっかりしていると、目当ての部品が納期６ヶ月とかそういうレベルで手に入らない。前に作った基板の部品を流用しようとした場合は手に入らないと苦しい。そういうのはあるが、ここは一つ思考を切り替えて、過去に縛られず新規部品で部品在庫がしっかりあるものを選ぶというのが、ここ最近の定石だと思う。しかし、現時点でたくさんあっても数カ月後にあるかどうかはわからないので、設計に柔軟性を持っておくことが重要だと思う。

Digikeyでなくてもよいとは思うが、中国の基板メーカーなどに発注する場合、BOMにDigikeyのリンクを記載しておくと万事部品手配をしてくれる。そういう面でDigikeyで最初から選択して、BOMにリンクを記載しておいたほうが後々楽になる。

## ３）SnapEDAでシンボル・フットプリント・3Dモデルがある
意外とこれが重要。在庫があってもCAD用のシンボル・フットプリントが無いとまったくもって設計ができない。使用するCADのライブラリがちゃんとあるか最初に確認しないと回路設計の段階で息詰まる可能性がある。最近KiCADを使ったが、[SnapEDA](https://www.snapeda.com/)でシンボル・フットプリント、そしてできれば3Dモデルがちゃんとあることが確認できると安心して回路設計に進める。[Ultra Librarian](https://www.ultralibrarian.com/)もあるが、ここのライブラリはKiCADではちゃんと読み込めない場合があった。また、Digikey上でもSnapEDAへのリンクが貼ってあるが、シンボルしかないケースがあるので、ちゃんとシンボルとフットプリントが存在することを確認した方がよい。

## ４）小さすぎる部品を選ばない
部品が小さすぎると部品を外すのはできるが、つけるのが非常に難しくなる。チップコンデンサなどは1608より小さいサイズを選ぶと、手実装の限界を超えてしまう。基板の小型化などでどうしても、という場合はしょうがないが極力避けたほうがよい。

## ５）小ロットで購入できる
たまにリールで１０００個単位でしか購入できないような部品がある。誤って選んでしまうと、いざ発注する段階で困ることになる（パターンを引いたあとだとつらい・・・、基板メーカーに発注したあとだと更に・・・）。なので、最終発注個数がいくつなのかは事前に把握しておいたほうがよい。

# 最後に
基板設計を後々になって設計を変更するのは辛いです。上記５つの観点で部品を選んでおけば、まあそれほど大きな後戻りはないかなと。でもまあ、調べたときには在庫があったのに・・・、なんていうことも最近はありますが強い気持ちで設計するしかないですね。
VisutalSutdioで不使用usingの一括削除

# 概要

使ってない（グレーアウトしてる）usingを一つ一つ手で消すの面倒。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/a840644b-5c0a-6412-a6ae-8db61ba4f205.png)

# やり方

using上で右クリック ⇒ ```usingの削除と並び替え``` 。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/2eec9657-3daa-5c73-d87b-8208c4a1791a.png)

もしくは ```Ctrl + R``` 押した後 ```Ctrl + G``` 。

# 蛇足

右クリックとかキー入力も面倒だから、保存時に自動でやってほしい。
『保存時に実行される自動処理』みたいな機能がVisutalSutdioにあるか探してみよっと。

# バージョン

Windows 10 Pro 21H2 OSビルド 19045.2311
Microsoft Visual Studio Community 2022 (64 ビット) - Current Version 17.3.6
【HTML/CSS】テキストが長いとタグからはみ出てしまう時

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# タグのテキストが長くて文字がはみ出てしまう
今回、スクールの課題でオリジナルアプリを作成していて、初歩的な知識の部分ですが、テキストが長くて、タグから文字がはみ出て、直下のタグに重なってしまう状況になりました。
![スクリーンショット 2022-11-30 16.49.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955699/a4add97e-3993-204c-7f4c-81b97355caae.png)

それを解決するには、CSSの対象のセレクタに
```css
.show-article-content{
  height: 40px;
  padding: 5px;
  font-size: 18px;
  line-height: 30px;
  text-align: center;
  height: auto; *追記
}
```
を追記すれば、テキストの容量に応じて、伸び縮みしてくれるとのことでした。
![スクリーンショット 2022-11-30 16.53.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955699/362c050e-04ed-c70c-e919-b020a9e8c6de.png)
参考にさせてもらったサイトのURLを掲載させて頂きます。
https://omosirofuturestory.com/html-css/difference-of-height01/
若手エンジニア向け：目線をあげる３つのコツ

![24957099_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/976a6cd6-a0b3-16d5-3e63-e0ded114ff1a.jpeg)

あるべき姿に対しての理想を描くのは、重要。目線をあげて考えるのはとても大事です。
でも、大体皆忙しい。
日常の忙しい業務を行っていると、忙しさのあまり目線が下がってしまう。
ある時期、｢こうするべきだ！｣｢こうやるぞ！｣と思ってた事をすっかり忘れてしまう。
目線を上げる癖を付けましょう

# 1.そういう時は、本を読みましょう。
本には、沢山の正論が沢山書かれてます。
正論に触れて、再度、本来の自分を取り戻す。奮い立つ。
結構、僕はこればっかりやってます(笑
なので、同じ様な内容の本を結構読んでます。（同じ内容だと面白くないけど、目線をあげるために。。）
kindle　unlimited の読み放題がコスパ良いです。

# 2.人と話す
勉強会とかで同職種の人と話す事です。自分が目線低くなってる時でも、他の人は目線が高くなってる時があります。その目線を享受させてもらいます。
自分一人の考え、能力なんで、やっぱり１００人には敵いません。１００人の人と話せば、１００人の考え方を吸収できて１００倍のアイデアが浮かんで来ます。100倍のモチベーションが生まれます。
他人の夢、目標やチャレンジを聞いていると自然と自分のモチベーションも上がってきます。

# 3.旅に出る
旅行に出ると、飛行機の中、車の運転中、結構な待ち時間が発生します。待ち時間にPCを開いて仕事をする訳には行かないので、色々と考えを巡らせる事になります。この時間が結構大事です。
忙しくしてると、本来自分がチャレンジしたかった事等忘れてしまいます。無になる時間を作り出す事で意識がリフレッシュされて、目線が上がります。
加えて、旅に出て、全く違う職種の人達と話すのも勉強になります。僕の場合は、ダイビングで各地のダイバーさんとの会話。色んな経歴を経験されてるし、チャレンジ精神旺盛な人が多いので刺激を受けます。

# 最後に
森川なりの目線の上げ方でした。他にも皆さん流の目線の上げ方があると思います。
この３つに限らずに定期的に意識的に目線をあげることをオススメします。
是非、お試しあれ！
今後も続けていきますので、フォロー、イイね、シェアお願いします。
下記、説明会もご参加下さい。
[エンジニア年収アップ講習(転職サポート付き！)　無料説開会　12月6日　19時開催](https://cto-can-be.hp.peraichi.com/)
知的財産権の保護

# 問題１
### 著作権によるソフトウェアの保護範囲について適切な記述はどれか？

##### ソフトウェアの著作者
従業員が業務として作成し、```法人名義で公表されたソフトウェアは、原則として法人が著作者```。
外部へ開発を委託した場合、```著作者は受託した側```にある。そのため、委託先との間で、「開発したソフトウェアに関わる一切の権利及び所有権は、```委託料（著作権譲渡料を含む)の完済時点をもって移転する」という旨の契約を取り交わしておくのが一般的。

##### パッケージソフトの改変
著作物に```無断でソフトウェアを改造することは、著作権の侵害```にあたる。ただし、パッケージソフトのカスタマイズやマクロの作成など、正規ユーザーが、```自らそのソフトウェアを使用するために行う場合は、必要と認められる限度において許容される```。

#### オブジェクトプログラムとは？
```ソースプログラムをコンパイラで機械語に翻訳したプログラム```のことである。
ソースプログラムはコンピューターで実行することができないが、これを```実行できる形式に直したものがオブジェクトプログラム```となる。
##### 出典
https://japan.zdnet.com/glossary/exp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/?s=4#:~:text=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%A8%E3%81%AF%E3%80%81%E3%82%BD%E3%83%BC%E3%82%B9,%E3%81%8C%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%A8%E3%81%AA%E3%82%8B%E3%80%82

# 問題２
### 不正競争防止法において適切な記述はどれか？
#### 不正競争防止法とは？
企業間の```公正な競争の確保を目的```とした法律。偽ブランド品の製造、輸入・販売の禁止、音楽や映像の不法コピーやWebサイトなどへの無断転載の禁止、商標や商号の不正使用や消費者に誤解を与えいる類似品の販売禁止などが定められている。また社外秘として管理している```営業秘密の不正な取得も禁止```されている。営業秘密には、```営業情報（顧客名簿・新規事業計画・営業マニュアルなど)や、技術情報（製造方法・設計図面など）がある。

# 出典
https://gihyo.jp/book/2022/978-4-297-12375-8
picoCTF Writeup picoGym Practice Challenges where are the robots (注意<spoiler>)

# where are the robots
Description
Can you find the robots? https://jupiter.challenges.picoctf.org/problem/56830/ (link) or http://jupiter.challenges.picoctf.org:56830
```
Welcome
Where are the robots?
```

https://jupiter.challenges.picoctf.org/problem/56830/robots.txt
/robots.txtへ移動する
```
User-agent: *
Disallow: /1bb4c.html
```
/1bb4c.htmlへ移動する
https://jupiter.challenges.picoctf.org/problem/56830//1bb4c.html
```
Guess you found the robots
picoCTF{ca1cu1at1ng_Mach1n3s_1bb4c}
```

picoCTF{ca1cu1at1ng_Mach1n3s_1bb4c}
電流容量の話

# 電流容量の話

電流容量というものがありまして。
電流を何A流せるかという話なんですが。
それの話を、していこうかと思います。


### 記事を書こうと思ったきっかけ

ロボコンをしていて、4年目くらいに、こいつの存在に気づきました（おっそ）
これ以上自分のような哀れな回路弱者を出さないために、この記事を書こうと思いました

### 電流容量とは

その名の通り、「電流」の「容量」です。回路を構成するすべての部品には、かけていい電圧と、流していい電流と、上がっていい温度が存在します。すべてです。つまり、回路と回路を結ぶコネクタや配線や、基板上の部品と部品を結ぶ配線などにも、もちろん存在します。

正直、ここまで読んでくれればもう充分です。
あとは回路設計しながら、自分で調べて気を付けていけば大丈夫だと思います。

ここからは、割と見落としがちな部分の電流容量を紹介していこうかと思います。

### 配線の電流容量

配線には流せる電流があります。それについて話す前に、配線の太さの単位「sq」について。
「スケア」と読みます。「スケ」と略したりもします。どういう単位かといいますと、
1[sq]=1[(mm)^2]
です。つまり、両辺が1[mm]の四角形の面積が1[sq]です。「sq」とは、配線の断面積を表したものです。

配線に流せる電流は、配線の太さに大体比例します。
https://www.diylabo.jp/column/column-449.html
このページを参考にしながら話をしますと、ロボコンでよく使う0.2[sq]では2.5[A]、2[sq]では16.6[A]まで流せます。電源線に何も考えずに2[sq]の配線を使うことは多いと思いますが、一番おおもとの配線(リポバッテリーと直接つながるところとか)は十分な電流を流せるように、配線の太さを考える必要があります。また、無駄に太い配線を使うと配線がごちゃごちゃしたり、コネクタのコンタクトが圧着できなかったりということが起こりえますので、ちょうど容量を満たせるような配線を使うのがいいでしょう。ちなみに2022年は信号線に0.5[sq]の配線を使ったのですが、太すぎていろんなコネクタに合わないという悲劇が起きました...

### 基板上の配線の電流容量

基板上の配線は、表面に薄い銅の膜が張ってあって、そこを電気が通るようなイメージなので、流せる電流は結構小さくなります。銅の厚さが35[μm]なら、配線幅1[mm]で1[A]流せます。大体pcb基板とか、エッチング基板の銅の厚さは35[μm]ですが、念のため自分でも調べてみて下さい。

配線幅を10[mm]も20[mm]も取るのは難しいと思うので、モータードライバーや遠隔非常停止回路、電源回路などを設計するときには、幅が足りない部分だけ銅箔をむき出しにして(pcb基板を発注すると何も言わなかった場合配線はシルクでおおわれる)、そこにはんだを盛れば、電流をたくさん流せるでしょう。

### スイッチの電流容量

トグルスイッチや非常停止スイッチ、リレー素子などもスイッチの一種ですよね。これらは、電流を流すだけなので、意外と見落としがちです。トグルスイッチは大体3Aとか、リレースイッチは大体2Aとかでしょうか。もちろん、型番によって変わりますので、データシートなどを探して調べてみて下さい。

非常停止スイッチなどは、amazonに売ってるものなんかだと電流定格が10A等だったりします。これだと電流が流せないので、信号電流を流して、その信号電流のオンオフによって駆動電源のオンオフを切り替えるようにするといいかもですね。鹿児島高専さんのピットにお邪魔したときに、鹿児島高専さんは小電流を非常停止スイッチに流して、その電流をPch-MOSFETに入力して、そのPch-MOSFETによって駆動電源を切り替えていました。僕ですか？僕は...ヤッテナカッタ...デス

### コネクタの電流容量

コネクタにも流せる電流が決まっています。これも、まあ、コネクタによっていろいろなので、自分で調べてみて下さい(さっきからそればっかだ...)

例として、ピンヘッダには2Aしか流せないです。縦刺しのモータードライバーなどは、複数のピンヘッダを同じ場所につないだりすることで、電流容量を大きくするテクニックがあります。例えば、10A流したいときには5つのピンヘッダを同じところにつなげるとかですね。

### 降圧素子

電圧を下げる素子がありますよね。DCDCコンバータとか、3端子リニアレギュレータとか。あれの出力電流が決まってるんですけど、何も考えずにサーボとかいっぱいつないじゃうと、電流が足りなくなってサーボが動かなくなります。NJM78XXFA(XXは出力電圧)っていうのが割と3端子リニアレギュレータの中では強めなんですが、それが流せる電流が1.5Aくらいです。電圧可変のやつとかは、3Aくらい流せるものとかあります。これも、はい、自分で型番を調べてみるのが安全かと...。

### 最後に

まあなんだかんだ言いましたが、結局電流規格はマージンを取って設定されているので、ちょっとくらい超えても動きます。本番の2分30秒動けば勝ちなので(おい)

でもやっぱり、配線がめっちゃ熱くなったりとかはあって、結構不安な気持ちになります。安心して動かすためにも、電流容量にも気を使うべきかなと思います。

以上です！最後まで読んでくれてありがとうございました！
【Flutter】flutter build iosの使い道整理

## 記事を書くきっかけ
https://qiita.com/ikaruga/items/9dbc9f6bdec9c7979276

この記事でflutter build ipaの説明をしたので、続き

## 使い道
### 1. 前のやつ
https://qiita.com/ikaruga/items/9dbc9f6bdec9c7979276

これの1番のやつ

### 2. App Store Connectへのアップ(ipa作成含む)
```
flutter build ios
```
をした後、XcodeのarchiveでApp Store Connectにアップロードできる
(ipaを作成することもできる。)
これは完全に
```
flutter build ipa
```
の下位互換、、、

## 最後に
iOSアプリ開発をしています。
主にSwiftですが、最近は熱が入ってきてFlutterも🦾
色々やってます。もし良かったら見てってください。

https://sogablog.net/
Ionic7では、ion-inputなどの入力要素のマークアップがとてもシンプルになる話。

Ionic7から、ion-inputなどの入力要素のマークアップがとてもシンプルになる予定です。該当するdiscussionはこちら。

https://github.com/ionic-team/ionic-framework/discussions/25661

現在のマークアップ方法は以下の通りです。

```html
<ion-item>
  <ion-label>氏名</ion-label>
  <ion-input></ion-input>
  <span slot="error">氏名を入力ください</span>
</ion-item>

<ion-item fill="solid" counter="true">
  <ion-label>コメント</ion-label>
  <ion-textarea maxlength="500"></ion-textarea>
</ion-item>

<ion-item fill="outline">
  <ion-label>配色</ion-label>
  <ion-select>
    <ion-select-option value="red">赤</ion-select-option>
    <ion-select-option value="blue">青</ion-select-option>
    <ion-select-option value="green">緑</ion-select-option>
  </ion-select>
  <span slot="helper">あなたの好きな配色を選択ください</span>
</ion-item>
```

ただ、このマークアップはいくつかの問題を持っていました。

1. area-labelを設定すると、shadow root内のhostとinputの両方につくため、スクリーンリーダーは2度読み上げる
1. axe DevToolsはネストされたフォームインタラクティブとしてエラーを表示する
1. 入力コンポーネントが `ion-item` に密接に設計されたことで予期せぬ動作を熾すことがある（ion-itemとion-label[position=stacked]の組み合わせの時、ion-chipが追加されると不具合が起きるなど）

まぁそもそもForm内のアイテムとして書き方が冗長になっていて、正しく表示させるためには `ion-item` と `ion-label` の両方が必要とかちょっとつらいよねとか、すべてのion-itemに入力要素があるわけではないので最適化に向かないよねとか、そういう設計上の問題もありました。

そこで、以下のような書き方に変わる予定です。

```html
<ion-input label="氏名" error="氏名を入力ください"></ion-input>

<ion-textarea fill="solid" counter="true" maxlength="500" label="コメント"></ion-textarea>

<ion-select label="配色" helper="あなたの好きな配色を選択ください">
  <ion-select-option value="red">赤</ion-select-option>
  <ion-select-option value="blue">青</ion-select-option>
  <ion-select-option value="green">緑</ion-select-option>
</ion-select>
```

入力要素を配置する時に、 `ion-item` と `ion-label` はもう必要ありません。これらは入力要素の属性に移行します。

ちなみに、上記以外に、 `ion-checkbox` 、 `ion-radio` 、 `ion-range` 、 `ion-toggle` も新しい書き方がでてきますので要チェックです。

https://github.com/ionic-team/ionic-framework/discussions/25660

よりシンプルに書けるようになると開発がはかどりますね。期待！

それではまた。
ArgoCDでは、SYNCHRONIZE RESOURCESに出てくる項目すべてにチェックしなかった場合、ロールバックできない

タイトルがすべての出オチ記事ですが、、
一応説明を補記します

- ArgoCDでSyncする際に、「SYNCHRONIZE RESOURCES」という項目で、同期する項目を選ぶことが可能
- しかし、一部だけチェックすると、下記のWarningが出る
    - WARNING: partial synchronization is not recorded in history
- この状態でデプロイしても、historyに残らない
- なので、ロールバックする際に戻るべきこの一個前が表示されない

という話でした。
ここであーでもないこーでもないと一週間くらい悩んでいました。同様に悩んだ人の助けになればと思いpostします