OmniAICreator/Qiita-1.07M huggingface dataset:
2009~2013年のGit書籍の紹介

バージョン管理ソフトのGitは2005年にLinus Torvalds氏によって作成されて以来、バージョン管理ソフトとして多くの人に利用されています。
そんなGitについての技術書は2009年ごろから現在の2021年まで数多く出版されており、今回はGitの技術書についてまとめた記事です。2009~2013、2014~2016、2017~2021の3つの年代でおすすめの書籍を紹介するシリーズになってます。紹介する本は全て読んだ本です。
隠れた名著も多いので、興味ある方は手にとってみてください。

## 入門git
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339812/176527bb-8204-f390-8eff-49da1e4f6ff5.png)

- 出版年月：2009/8/12
- 出版社：オーム社
- ページ数：208
- 版型：A5
- GUI or CLI：CLI
- レベル：Git中級者向け
- 概要：図も多くわかりやすいです。Gitコマンドに少し慣れた頃に読むとGitを効果的に学ぶことができると思います。git rebaseコマンドのインタラクティブモードの使い分けなど、少し凝った操作方法からワーキングツリー・インデックスエリア・ローカルリポジトリ同士の関係など初心者がとっつきにくい内容を学ぶことができます。巻末のGitコマンドのリファレンスも一覧でコマンドを確認することができるのでおすすめです。初心者からのステップアップとして購入をおすすめします。

## 入門Git
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339812/6753358d-dfe0-b82f-c2d3-7f4d42b45a04.png)

- 出版年月：2009/9/24
- 出版社：秀和システム
- ページ数：340
- 版型：A5
- GUI or CLI：CLI
- レベル：Git中級者向け
- 概要：コマンドを中心とした書籍になっています。git addの-uオプションを大きく紹介していたり.gitignoreの正規表現など他の書籍ではあまり紹介されないような内容を紹介しています。

## Gitによるバージョン管理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339812/5e956a5d-6916-fa5c-1c39-9e91961fe95d.png)

- 出版年月：2011/10/25
- 出版社：オーム社
- ページ数：320
- 版型：A5
- GUI or CLI：CLI
- レベル：Git中級者向け
- 概要：入門gitと同様に図も多くわかりやすいです。個人的に入門gitよりも図はわかりやすいと感じます。こちらもGitコマンドに少し慣れた頃に読むとGitを効果的に学ぶことができると思います。git reflogコマンドの操作方法や様々なコンフリクトの対応が載っており、初心者からのステップアップとして購入をおすすめします。

## その他 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339812/3055f35b-9bd5-31e3-5752-b0910cbfcf2b.png)

- アリスとボブのGit入門レッスン
    - 出版年月：2012/9/18
    - 出版社：秀和システム
    - ページ数：288
    - 版型：A5

  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339812/b3bf1920-303b-4b35-eb4e-6c431e193000.png)

- 実用Git
    - 出版年月：2010/2/19
    - 出版社：オライリージャパン
    - ページ数：372
    - 版型：A5

## まとめ
2009~2013年は現在の技術書からすると技術レベルの高い書籍が多いように思いました。紹介した3冊全てCLI、コマンドでのGitコマンドなのも印象的でした。
「入門git」など10年経っても役立つ内容であり、非常に高い完成度だと感じました。
AWS re:Invent 2021 Amazon Redshift Serverless (Preview) の紹介

##はじめに
AWS re:Invent 2021 が12/1(水)より始まりました。
今回は、AWS CEO の Adam Selipsky 氏より発表がありました Amazon Redshift Serverless(Preview) について、そちらを簡単にまとめていきたいと思います。

公式のリンクは下記参照

- [Introducing Amazon Redshift Serverless – Run Analytics At Any Scale Without Having to Manage Data Warehouse Infrastructure](https://aws.amazon.com/jp/blogs/aws/introducing-amazon-redshift-serverless-run-analytics-at-any-scale-without-having-to-manage-infrastructure/)
- [Announcing Amazon Redshift Serverless (Preview)](https://aws.amazon.com/jp/about-aws/whats-new/2021/11/amazon-redshift-serverless/)

##Amazon Redshift Serverless について
###Amazon Redshift とは
Amazon Redshift(以下、Redshift) は、AWS が提供するデータウェアハウスサービスです。データウェアハウス（DWH）は、さまざまなデータ元からデータを収集・統合・蓄積し、分析のため保管しておくシステムのことを指します。Redshift の主な特徴は以下となります。

■Amazon Redshift の特徴

- フルマネージド型のサービス
- ペタバイトスケールのデータウェアハウス
- 数百ギガバイトのデータから、ペタバイト以上まで拡張が可能
- 大容量データの読み出し処理に最適


###Amazon Redshift Serverless(Preview) とは
今回発表された Amazon Redshift Serverless(Preview)(以下、Redshift Serverless )は、従来の Redshift の機能を有しつつ、サーバレスとなったことでより使い勝手が良くなったかと思います。
Redshift Serverless の主な特徴は以下となります。

■Amazon Redshift Serverless の特徴

- サーバレスとなり、自動で適正なコンピュータ容量をプロビジョニングすることが可能に
- ノードタイプやノード数の選択、ワークロード管理、スケーリングなどの手動設定が不要なので、 簡単にデプロイとスケーリングが可能
- 既存のAmazon Redshiftのプロビジョンドクラスタースナップショットをリストアすることが可能
- 従量課金制


今までの Redshift とは異なり、自動でのプロビジョニングやスケーリングが可能であることと、従量課金となっているのが大きな特徴かと思います。

###Amazon Redshift Serverless(Preview) の利用について
Redshift Serverless は、現在東京リージョンで利用することが可能です。東京以外の他のリージョンだと、US East (北部バージニア)、US West (北部カリフォルニア、オレゴン)、Europe (フランクフルト、アイルランド) で利用が可能です。
AWS コンソール画面にて Redshift を検索すると、右上に「Try Amazon Redshift Serverless(Preview)」と表示されているので、そこから試して頂くことが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/4473824b-59b0-b244-601f-89f2859d12a5.png)

確認すると、「デフォルト設定」・「カスタマイズ設定」が用意されております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/c5f8885e-1dfb-32f3-3a2a-9ed404e8cb57.png)


「デフォルト設定」を選択すると、Redshift Serverless を立ち上げるために、既存の VPC や SG 等が既に選択されているので、その内容で問題なければ、右下にある「作成」を押せば Redshift Serverless 作成は完了します。特に細かい設定を考える必要も無いので、試しの利用としても非常に扱いやすいかと思います。
「カスタマイズ設定」を選択することで、VPC や SG 等をユーザの方で選択していただくことが可能です。

##おわりに
Amazon Redshift Serverless(Preview) についての紹介は以上となります。
他にも様々な AWS の新サービスや機能の発表が re:Invent の Keynoteで行われているので、是非チェックしてみて下さい。
Laravel 7.* にbootstrapを導入する方法

Laravelにbootstapを導入する方法


まずは、自分の環境を確認する。

```php:qiita.rb
$ composer -v
Composer version 2.1.11 2021-11-02 12:10:25

$ php artisan --v
Laravel Framework 7.30.5
```

環境を確認できたら、実際にLaravelを組み込みましょう。
Laravel6~からbootstrapが使えなくなったので、自身で使えるようにしないといけません。

まずは以下のコードをターミナル上でコマンドしてみましょう。

```php:qiita.rb
$ composer require laravel/ui
```


おそらくエラーが起きるのではないかと思います。

バージョンを指定して、インストールする必要があります。
私はLaravel7.30.5ですので、２系にあたります。

```php:qiita.rb
///1系
$ composer require laravel/ui:1.*

///2系
$ composer require laravel/ui:2.*

///3系
$ composer require laravel/ui:3.*
```

実行した後は出力結果にある指示に従っていくだけです。

```php:qiita.rb
$ php artisan ui bootstrap
Bootstrap scaffolding installed successfully.
Please run "npm install && npm run dev" to compile your fresh scaffolding.
```

ありがとうございました。参考にしていただけたら幸いです。
もしかしてシーン切り替え時にフェードしたいのかい？

#はじめに
今回は良ゲームにフェードアリということでフェードインフェードアウトのやり方を何種類か紹介しようと思います。
(今回も含めてですが、Qiitaを使うのが久しぶりでかなり読みにくくなってるかも知れません。)
#目爺(目次)
>
1.コードを書いてやる
2.GitHubから落としてやる(一番楽)
3.おしゃれにフェードする(2番目に楽)

#1.コードを書いてやる
いきなりコード書くのかよって感じですけど、書きます。
まずフェードするために、UIからPanelを作成し、Imageのチェックボックスは外しておいてください。
できたらそのオブジェクトにスクリプトを作成して、適当に名前をつけておいてください。今回は「FadeManager」にしました。
できたら下のように記述すればOkです。
シーンを跨ぐにはここから少し改良が必要ですが基本的なフェードのやり方はこれでいけます。
Inにチェックを入れるとフェードインして、Outにチェックを入れるとフェードアウトします。

```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class FadeManager : MonoBehaviour
{
	float Speed = 0.02f;        //フェードするスピード
	float red, green, blue, alfa;   

	public bool Out = false;  
	public bool In = false;   

	Image fadeImage;                //パネル

	void Start()
	{
		fadeImage = GetComponent<Image>();
		red = fadeImage.color.r;
		green = fadeImage.color.g;
		blue = fadeImage.color.b;
		alfa = fadeImage.color.a;
	}

	void Update()
	{
		if (In)
		{
			FadeIn();
		}

		if (Out)
		{
			FadeOut();
		}
	}

	void FadeIn()
	{
		alfa -= Speed;                
		Alpha();                    
		if (alfa <= 0)
		{
			In = false;
			fadeImage.enabled = false;  
		}
	}

	void FadeOut()
	{
		fadeImage.enabled = true;  
		alfa += Speed;         
		Alpha();               
		if (alfa >= 1)
		{
			Out = false;
		}
	}

	void Alpha()
	{
		fadeImage.color = new Color(red, green, blue, alfa);
	}
}


```
#2.GitHubから落としてやる
コードを書くのがめんどくさい人は、GitHubから他の人が作成したものを流用するのが手っ取り早いと思います。
今回はおすすめのものを一つ紹介します。
[UnityRoom](https://unityroom.com/)で有名な[naichi](https://twitter.com/naichilab)さんが作成したフェードインフェードアウトを数行で実現するものです。
特殊なフェードはできないもののフェードするときの色などは変更可能でなんと言っても少ない数のコードで実行できるということです。詳しいライセンスはGitHubのところからご覧になってください。

GitHubURL:https://github.com/naichilab/Unity-FadeManager

![change-fadecolor.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866543/7be1429e-99cc-d3c6-e506-4da97af80ce9.gif)
↑GitHubから引用

#3.おしゃれにフェードする
先ほど紹介した方法のフェードだと簡単だけど、おしゃれさが足りないという人向けのものです。
(※Sceneを跨いでのフェードは若干癖があって私は苦戦したので初心者の方などはあまりお勧めしないかもしれないです。。)
紹介するやつは同じように他の方が既に作成したものを流用する形で実装します。
ルール画像というものを使って自分の好きなようにフェードインフェードアウトすることができます。ルール画像は[ForYou](https://4you.bz/rule)さんから既存のものを落とすことができます。かなり種類が多いのでおすすめです。気に入ったものがない場合は既存のルール画像をもとに自分でお絵描きソフトなどで作成するのもいいと思います。(私はそれをしようとしましたがあまりうまくいきませんでしたw)
参考サイトからフェードようのunitypackageを落として自分のプロジェクトに追加してください。
参考サイト：https://tsubakit1.hateblo.jp/entry/2015/11/04/015355

![20151104004515.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866543/a2c49bce-7c2e-2f95-a7ef-980b35daafbc.gif)
↑参考サイトから引用

こんな感じでめちゃくちゃルール画像があります。一括ダウンロードして気になったものを試していくのがいいと思います。
![Screen Shot 2021-12-01 at 21.37.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866543/5891e2e3-b93b-da2c-c86c-64e7503276a4.png)

[シーンを跨いでのフェードがうまくいかない方はこちら](https://www.youtube.com/watch?v=excJp8ah7qU&t=29s)

#最後に
今回はフェードについてまとめてみました。私的にはおしゃれにやらないのであればnaichiさんのが一番いいと思います。
参考になれば嬉しいです！
ご褒美に関連ネコ動画をおすすめしてくれるサイトのご紹介

#バズりたい
突然すいません。
ネット上に記事を書く方達にはわかってもらえると思うのですが、**せっかく書くなら多くの反応をもらいたい**と考えています。

2021年10月からプログラミングを学び始め、学んだことの実装をQiita記事にまとめてきました。
この記事が１０本目となるのですが、私が書いた記事のLGTMは平均すると5程度。
学び始めたばかりであることを考えると当然のことなのかもしれませんが、過去に一つだけバズった記事があります。

それがこちら。

https://qiita.com/naokiuc/items/ad01f4dae0f371b31fda

機械学習を学んだタイミングで何を学習させるか悩んだ結果、大学時代の屈折した感情を反映させた記事ですが、54LGTMと私の中ではぶっちぎりで反応が多い記事となりました。

今回、ブラウザAPIを学び、どういった実装を行うか考えた時に浮かんだワードが冒頭の**「バズりたい」**でした。

一方、話題となる記事を複数書いている方から最近聞いた話として、**バズることの再現は難しい**という話を聞いたのですが、また別の機会に同じ方から「ネコと子どもに関する記事は話題になりやすい」という話も聞きました。

#ネコだ！
そこで今回、ネコをテーマにしたプロトアウトを考えました。
実際に使っている様子の動画がこちらです。

https://youtu.be/QPtXJaxhnrE

サイトへのアクセスはこちら。
**iPhoneでアクセスする場合はSafariを使って、ポップアップブロックを解除してください。**

https://admiring-boyd-197bd9.netlify.app/

IFTTTを使ってFitbitで目標の歩数を達成したらLINE Notifyでサイトリンクが送られてきます。
サイトは、Web Speech APIを使って、話しかけた単語＋ネコのキーワードで動画検索をしてくれるというものです。

最終的なCodePenはこちらです。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="QWqwEMY" data-user="naokiuc" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/naokiuc/pen/QWqwEMY">
  ネコ動画　タイピング</a> by Naoki Ucihda (<a href="https://codepen.io/naokiuc">@naokiuc</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

#難しかった部分 -非エンジニア向け
まずはCodePenを使って、Web Speech APIで認識した単語をGoogle検索する仕組みを作りました。

```js
window.open('https://www.google.com/search?q=' + this.result);
```
これで、話しかけて認識された単語をGoogle検索することが可能になりました。

今回は、話しかけて認識された単語に「ネコ」を組み合わせて検索することが目的だったので、`'+ネコ'`を加え、さらに動画検索とするために`'&hl=ja&tbm=vid&source=lnms&sa=X&ved=2ahUKEwjJmsHv1_bxAhVYEYgKHQXzDQUQ_AUoAnoECAgQBA&biw=1286&bih=1303&dpr=2'`を追加しました。

あとは、CodePenのテンプレートで`cat`として適当なサイトを探して入れ込んだという流れです。

IFTTT側は、
IfでFitbit、ThenでLINEを繋いでいます。
![af518ecfd7d0-20211130.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2051906/5f70b1c3-7106-f07a-77e0-054aaa227321.png)

そして、LINEの設定画面で、CodePenをNetlifyでアプリ化したアドレスを載せています。
![82955df35d1c-20211130.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2051906/361d6bbc-ffae-ec0b-c77a-4be304407ebf.png)

#フィードバック
家族に、このサイトを作ったことを伝えたところ、妻からは「ネコに興味ないでしょ」『なんで？」という反応から、バズりたいからと伝えたら苦笑い。
「ネコの手も借りたかったのね」と上手いこと言われました。

また、今回の実装では、発話させる部分は関係なかったので消そうとして該当コード部分を消してみたのですが、そうすると「聞き取る」タブが反応しなくなり残すことに。
すると、子どもたちは「発話」の方に興味津々で、機械の声で指示をされると指示に従うという発見がありました。

#バズること間違いない!?
みんなが大好きなネコ動画を探せるサイトができました。
これできっと、バズること間違いなしです！！
(*ここまで記事を書き、`ネコ`のタブが4つしか書かれていないことに気づいて絶望しています、、*)

こんな記事を最後まで読んでくださってありがとうございます。
LGTMをいただけると今後の励みになりますので、宜しくお願いします。
初心者がJSTQB認定テスト技術者資格(FL)を取得するために行ったこと

##はじめに
テスター・テスト設計初心者の私がJSTQB（FL）を取得するまでに行った事を共有します。これから資格取得を目指す方のヒントになれば幸いです。

##まず最初に行ったこと
####・出題範囲全体の把握
全部で何章あり、どういった内容か、各章はどれくらいのボリューム感か、などシラバスや参考書を使って全体像を把握しノートにまとめました。
####・試験日から勉強開始日まで逆算して勉強のスケジュールを立てる
出題範囲の内容を踏まえて「試験1か月前までに模擬試験で〇点取れるようにする」、「今月の3週目までに〇章まで参考書を読む」など、試験日から逆算していつまでにどの程度進めるか目標を立てました。目標には必ず数字を設定して、出来たか出来なかったかを簡単に判定できるようにします。こういった目標を立てておくことで全体のペースの進捗を確認出来ます。
また、仕事やプライベートで突発的な予定が入ることも想定して、スケジュールには余裕を持たせておきます。併せて気分転換やストレス解消の為の予備日を設定しておくことをおすすめします。　
####・1日の中で勉強する時間をどこに組み込むか考える
私は通勤での移動時間中(バスで片道30分)は、練習問題を解く時間にしました。これは今振り返ってみてもいい方法だったと思います。平日は自宅でなかなか勉強する気になれなかったので、通勤時間は練習問題を解く時間と決めてしまえば自宅で勉強しなくても罪悪感がなく、結果的にストレスが少ない状態で毎日勉強を続けることができました。

##具体的な勉強方法
私が使用したのは参考書『ソフトウェアテスト教科書 JSTQB Foundation 第4版 シラバス2018対応』と、[スクエアリングサービス](http://squaring.jp/others/index.jsp)です。
基本は参考書を読み、スクエアリングサービスで有料会員になり練習問題を解くことを繰り返し行いました。
公式で公開されているシラバスをダウンロードして勉強するのが一番いいとは思いますが、一度読んでみて難しく感じるようなら、ちょっとお高いですが参考書を購入することをお勧めします。参考書ではかなり内容をかみ砕いて書かれているのでシラバスが難しいと感じた人だと取っつきやすいと思います。あと実物の参考書は分厚いので電子書籍だとかさばらなくて便利です。内容の改定が入っているので購入する際は最新のものを購入しましょう。
参考書の練習問題は試験対策としては問題が易しすぎると思うので、練習問題はほかで補うのがいいと思います。
勉強の中で私が一番時間を割いて行ったのは『練習問題を解くこと』です。
この方法は試験形式にも近く、内容を覚えやすいと聞いたので取り入れました。
練習問題を解いた後は参考書を読み返したり、試験直前に読む用のノートを作成し内容をまとめる作業を行いました。
覚え方は人それぞれだと思いますが、私は文章でノートにまとめるより図解した方がイメージがつきやすかったので、苦手な箇所は図を書いてまとめました。
ここでポイントなのは、あくまでも「自分が」理解できることが最も大切です。多少、字が汚くても見栄えが悪くてもいいので自分が理解できる内容になるようまとめましょう。


##試験に関して
ここからは試験を受けてみての所感や気づいたことをまとめています。試験全体の所感は「スクエアリングの模擬試験よりちょっと難しいし時間が足りない！」です。
#####・試験内容について
全体的にスクエアリングでやっていた模擬試験よりひねった問題文で出題され、じっくり考えているとかなり時間を取られた印象です。あと文章問題は問題用紙の最後の方に固まってる想定だったので、飛ばした後見返すのにちょっと手間取りました。また、文章問題は問題文が模擬試験より倍くらい長かったのでとても焦りました。
それから自分の解答が数問連続で同じ番号になっていて焦ることもありましたが、問題を見返して冷静に対処しました。
#####・持ち物について
想定していたより時間が足りなかったので試験中は腕時計を何回もチラ見していたのを覚えています(笑)腕時計はいらないかも？と思っていましたが、意外と役に立ったなという印象です。当然ですが座席は受験番号順に指定されているので移動ができません。座席位置によっては時計が見えづらい場合があるので腕時計を持っていくことをお勧めします。


##おわりに
こんな感じでしたが無事1回目の受験で合格することができました。一例として参考になれば幸いです。
Flickr APIを使って画像を収集し機械学習用のデータセットを自作する

# やること
Flickrから画像を収集して動物の画像データセットを作成する。
10カテゴリー
snake, horse, monkey, rhinoceros, elephant, fox, dog, cat, reindeer, zebra
各1000枚ずつ合計１万枚

# Flickrとは
写真の共有を目的としたWebサイト。タグやキーワードで検索が可能
https://www.flickr.com/explore

# 利用ツール
- google colab

本記事で使用しているすべてのコードは以下のNotebookに記載

https://colab.research.google.com/drive/1LNf72zHy38WEubk1LWKNnouQQNbvpOzI?usp=sharing

- flickr API

こちらからAPI keyを取得しておく必要があります
取得理由を求められますが特に審査とかはしてないようですぐ取得できました。

https://www.flickr.com/services/api/

# 収集できた画像
収集した各カテゴリに属する画像をランダムにピックアップしてプロットした結果
![ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2337375/989fc0e5-ea0c-9759-b23a-551b7df798f4.png)
トナカイ(reindeer)の収集結果が少し悪く関係ない画像が集まってしまってますがそれ以外の動物に関してはデータセットとしてかなりいいものができたのではないでしょうか。

# おわりに
よかったらLGTM、ストックよろしくお願いいたします。モチベが上がります
記事中によくわからないところがあればコメントいただければなるはやで返信、記事再編集します

需要があれば今回作成したデータセットを用いて画像分類・生成を行う記事なども作成するかも
画像サイズの統一などの前処理、データオーギュメンテーションなども必要ですね
新しい記事を出す際などはツイッターでも通知しますのでよかったら下記からフォローお願いいたします。
https://twitter.com/JuFi969696
Twitter Botの作り方 (の概念)

Twitter APIを利用したBotの作り方があまり載っていなかったので最新版(2021年12月版)でまとめてみました。

#####目的：「他人のアカウントで」つぶやかせる


他人のアカウントで呟かせるのはいわゆる「なりすまし」行為なので認証がわりと固いようです。
「3レッグ認証」などで検索するとそこそこ出て来ます。

:::note warn
今回は実際のプログラムの話はナシで、その認証の概念だけを解説します。
:::

認証方式は2つあって、「PIN方式」と「CallBack方式」
これらの方式はTwitter Developer Portal(いわゆる管理画面)のほうで切り替えるようです。

↓ 下のチェックを付けるとCallBack方式になります。(デフォルトはPIN方式)
![twitter_dev.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436032/26ef3109-e202-94f7-9b30-5a7a8aec543b.png)
※管理画面はしょっちゅう変わっているようなので、このスクリーンショットは参考にならないかも知れません。

## PIN方式
![twitter_pin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436032/17457721-351f-3bdb-fbd4-9caa54c77866.png)


## CallBack方式 (オススメ)
![twitter_cb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436032/d1ee4b3a-f1d5-988d-f0e1-40cab722989b.png)


CallBack方式のほうが実装もユーザ入力も少なくなるのでオススメです。
最終的に黄色い吹き出しのoauth_token と oauth_token_secret の2つが手に入れば、あとはプログラムから自由に送信出来ます。
[AWS][board] AWS Single Sign-On での board への SAML 認証によるログイン設定

弊社では [board](https://the-board.jp/) というサービスを使用して、見積書発行、請求書発行などの業務を行っております。
このサービスは、SAML による SSO ログインに対応しているので、AWS Single Sign-On からログインできるように設定してみました。
board の [FAQ](https://the-board.jp/helps/help_saml_sso) には Okta とか Azure AD とかの設定方法は書いてあったけど、AWS Single Sign-On での設定方法は書いてなかったので、メモ的に残しておきます。

# AWS SSO へのアプリケーション登録

Applications から New Application　として `Add a Custom SAML 2.0 application` を選択します。
![スクリーンショット 2021-12-01 16.49.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25964/1168d2bd-ddbe-2289-e271-5ab840a2077a.png)

次に表示される画面で `AWS SSO SAML metadata file` をダウンロードしておきます。
他の箇所は特に変更する必要はないです。
`Display name` と `Description` だけ、お好みで変更してください。

# board でのシングルサインオン設定

マスターアカウントで「シングルサインオン」アドオンを有効にする必要があります。
アドオンを有効にしたら、あとはマスターアカウントの権限は必要ないため、管理者権限があるアカウントで設定可能です。
参考: [SAML認証によるシングルサインオン（SSO）](https://the-board.jp/helps/help_saml_sso)

管理者権限のあるアカウントで「組織設定」 - 「シングルサインオン設定」を選択します。
![ad49805635f5d8458aaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25964/ac5352c6-5f4e-009f-154f-3a2292d0a656.png)

## ID プロバイダ設定

SAMLメタデータとして AWS SSO で作成したアプリケーションからダウンロードした `AWS SSO SAML metadata file` をアップロードして、「登録」をクリックします。
![5a21ad8b69b6580a77c8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25964/dafb135a-4040-ec06-178b-e172dd41b85c.png)

## サービスプロバイダー情報

「サービスプロバイダー情報」タブにある以下の情報をコピーしておいてください。

* ACS URL
* Audience

## SSO動作モード

「SSO動作モード」タブで「通常ログイン・シングルサインオン併用」を選択して「登録」をクリックしてください。
全てのユーザの AWS SSO からのログインが確認できたら、この設定は「シングルサインオンのみ」に変更した方が良いでしょう。

board 側の設定はこれで完了です。

# AWS SSO アプリケーションの設定変更

## Application metadata の設定

AWS SSO の管理画面に戻って、先ほど作成したアプリケーションの設定を変更します。
`Application metadata` を以下のように設定します。

* Application ACS URL : board の「サービスプロバイダー情報」の `ACS URL`
* Application SAML audience : board の「サービスプロバイダー情報」の `Audience`

![スクリーンショット 2021-12-01 17.04.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25964/24849a37-bdeb-6f43-3b1d-f78156c456b8.png)

## Attribute mappings の設定

以下のように設定します。

User attribute in the application|Maps to this string value or user attribute in AWS SSO|Format
---|---|---
Subject|${user:email}|persistent
last_name|${user:familyName}|unspecified
first_name|${user:givenName}|unspecified
email|${user:email}|unspecified
![スクリーンショット 2021-12-01 17.11.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25964/b2276a43-8d3c-91a9-d11d-c9df78c1e8bc.png)

これで、設定完了です。

AWS SSO から board にログインできるようになります。
webデザインの知識無用！　 Boootstrapを使ってみた（超初級者編）

初めに
現在書けるプログラミング言語はHTML・CSSのみです。
そんな私が初めてBootstrapを使ってみた感想を書いていきたいと思います。


○Bootstrapとは
BootstrapはウェブサイトやWebアプリケーションを作成するフロントエンドWebアプリケーションフレームワークで、HTMLおよびCSSベースのデザインテンプレートとして用意されています。


○Bpptstrapを使うメリット・初心者にお勧めする理由



![Qiita.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2308478/10a611c8-aeaa-bc92-0bd9-6e2cfd708e7c.jpeg)
￼
https://getbootstrap.jp/docs/5.0/layout/columns/を参照


写真のように他にも様々なフレームワークが用意されています。
また、初心者でもBootstrapにはサンプルコードがあるため、webデザインの知識がなくてもレイアウトを簡単に整えることができます。

○実際使ってみて感じたメリット・デメリット

メリット
・webデザインの知識がなくてもレイアウトを整えることができる
・作業時間の短縮
・様々なデバイスに対応が可能

デメリット
・オリジナル性が低い
・カスタマイズできない


まとめ
Bootatrapは、デザインを組み込んでいるがために、まったく違うデザインに変更しようとした場合かなり手間がかかりますが、初学者でソースコードがわからなくても簡単に使う事ができるためお勧めです。
GEC 十年一日

# 概要

小町が文法誤り訂正の研究に関係するようになった経緯を振り返るエントリーです。

# 奈良時代

小町は2005年に NAIST（奈良先端科学技術大学院大学）の情報科学研究科に入学しました。修士と博士の5年間、松本研究室（自然言語処理学講座）に所属して学生をしていました。松本先生は言語教育を自然言語処理の重要なアプリケーションの一つだと考えていて「言語教育勉強会」が立ち上がったり消えたりしていたのですが、自分が学生の頃は特に言語教育関係の研究には関わることなく助教になりました。

2010年に助教になったとき、松本先生からの指示は「一つの研究グループ（松本研用語では「勉強会」）の面倒を見てほしい。それ以外は好きにして」ということだったので、助教になったからといって特に言語教育（勉強会）に関わった訳ではなく、博士後期課程の時に取り組んでいたウェブマイニングに関する勉強会を開いたりしていたのですが、助教になって1-2年目に当時の M1 の学生（田尻くん）が「Lang-8 というウェブサービスがある。ここから言い換え知識を抽出したい」と言うので、行きがかり的に一緒に研究することになりました。

実のところ、ここからは彼の最初のアイデアのような言い換え知識は思ったように抽出できなかったのですが、これは面白いサービスだ、何かに使えるのでは、と思い、自分でスクレイピングするスクリプトを書いて1ヶ月くらいかけてデータを収集しました。自分的には言語学習の文脈で取り組んだというよりは、ウェブマイニングの文脈で触れたのがきっかけだったのでした。

その後、詳しい順序関係は忘れてしまいましたが、同じく当時 M1 の学生（水本くん）が Lang-8 のデータを使えば統計的機械翻訳手法で文法誤り訂正ができるのでは、ということで取り組み始め、実際にやってみたところそこそこできるようだったので、これをまとめて言語処理学会年次大会や国際会議（IJCNLP）に投稿して発表しました。それまでは統計的機械翻訳を用いた手法でも、擬似データでしか訓練・評価していなかったので、ウェブから抽出したデータとはいえ実データで訓練・評価できたのは一つのターニングポイントだったと思います。あと、水本くんは昨日の記事に登場した甲南大の永田さんのところの卒研生で、NAIST に来ても語学学習支援の研究に取り組むことになったので、永田さんともご縁ができてよかったです。

ちなみに奈良にいた間には Lang-8 の開発をしていた喜洋洋さんにも NAIST 松本研に来ていただいたりして、サイトの運用だとかデータの共有だとかについても色々相談できて、研究のサイドから開発を応援できるといいなと思っていました。（Lang-8 のデータがないとこれから先の文法誤り訂正の発展はなかったでしょう）

# 江戸時代

2013年に小町は首都大に移りましたが、その前後に英語の文法誤り訂正に関する共通タスクが相次いで開催されました。エポックメイキングだったことの一つは、2012年の CoNLL の共通タスクで NAIST のチームが提案した Lang-8 データと統計的機械翻訳を組み合わせた手法が前置詞誤り訂正でトップの成績を収めたことです。それまでは誤りの種類ごとにルールを書いたり分類器を訓練したりするのがスタンダードなアプローチで、かつ評価も誤りの種類ごとにやるのが主流だったのですが、誤りの種類を限定しないで訂正できる手法が登場したので、評価もそれに合わせて全ての誤りを対象にするようになっていったのです。

そうこうしていると世の中が深層学習の時代になり、文法誤り訂正も機械翻訳の手法がそのまま適用できるため、統計的機械翻訳アプローチからニューラル機械翻訳アプローチに移り変わっていきました。とはいえ、2015-2016年くらいは、このタスクは（大規模な対訳データが使える機械翻訳と違い）ニューラル手法ではうまく行かないのでは？と思っていた人も（自分を含め）多かったと思います。入力と出力がほとんど同じなので、入力をコピーするメカニズムがあるとうまくいく、というのがこのタスク的には大きい発見だったと思いますが、2018年以降はもうニューラル手法ではダメだと思う人はいなくなったでしょう。

2019年以降の大きなニュースとしては BEA というワークショップの共通タスクが開催され、ここで標準的なデータセットとして（既に研究では広く用いられていた）Lang-8 が採用されたことでしょうが、この辺りで訂正の精度は十分高いものが作れることもはっきりし、Grammarly のようなアプリケーションが登場してきたのは記憶に新しいです。他の深層学習における系列変換タスクで提案された手法が輸入されたり、日本でも文法誤り訂正の研究に取り組むグループが増えてきたのもこのあたりでした。

2021年現在はオープンソースで公開されている文法誤り訂正のツールも複数存在し、アプリケーションをユーザとして使うだけでなく、研究目的でも手軽に取り組んでみることができるようになっています。自分はというと、国際会議では NLP Applications という自然言語処理の教育応用に関する分野の査読に関わることが多いのですが、英語以外の言語でも文法誤り訂正のためのデータが整備されたり、多言語で用いることができる手法が提案されたり、研究レベルの技術から、開発レベルの技術に移行しつつある、ということを感じています。

# まとめ

文法誤り訂正の研究の今後の予想については記事を改めて書こうと思いますが、振り返ってみると2010-2011年に自分が Lang-8 に出会ったのが、文法誤り訂正に関わることになったきっかけで、今となってはウェブマイニングの研究には全く携わっていないのですが、ウェブマイニングの研究を当時はしていたな、というのを思い出すことができておもしろかったです。人生何が研究につながるかは分からないもので、今研究室で取り組んでいることも、全然別の文脈で意味があったりするのかも、と思ったりしています。
Dockerで、検証用サーバーを構築してみた② (Dockerファイル作成編)


## [概要]
Dockerインストール編の後続記事となります。
[① Dockerインストール編](https://qiita.com/Mar_N/items/07f3f2083158d52b2833)

**Dockerをインストールした後。Dockerファイルを作成してみよう！**

## [作業]

##作業用フォルダの作成
Dockerファイルを作成する前に、作業用フォルダを作ろう。
1, Finderを開いて、ユーザーディレクトリに、[LocalServer]フォルダを作成
2, [LocalServer]直下に、[app]フォルダも、ついでに作成
※フォルダ名は任意

##Dockerファイルとは

Dockerファイルとは、大きく2点を理解できればとりあえずはOKなのかなとは思います。

###[Dockerイメージ]
Dockerイメージとは、Dockerコンテナを作る上で必要なファイル群である。
Dockerイメージは、以下にゴロゴロ落ちています。
[docker hub](https://hub.docker.com/)

今回は、このDockerイメージを使用して、Dockerコンテナを作成することが目的です。
※Dockerイメージは自身で作成することも可能
※今回使用するのは、Dockerイメージ「python:3.7.4」

###[Dockerコンテナ]
Dockerコンテナとは、Dockerイメージを元に作成されるものとなります。
イメージとしては、コンテナという大きな箱に必要な複数のイメージファイルが入っている。

<大まかな流れ>
1, Dockerイメージを定義
2, Dockerイメージを元に、コンテナを作成
3, 上記コンテナを用途に合わせて「起動・停止」する


##Dockerファイルの作成
#### 1, テキストファイルで、ファイル名「Dockerfile」を以下の内容で作成する。

```
FROM python:3.7.4
ARG project_dir=/app/
WORKDIR $project_dir
RUN pip install flask
CMD [“python” “local_server.py”]
```
####<定義命令>
FROM：ベースとなるDockerイメージの指定

ARG：dockerfile内で使用できる変数を定義できる
　　　※使ってみた

WORKDIR：作業用ディレクトリを指定　
　　　　　　※指定しない場合はroot直下が指定される

RUN：コンテナビルド時に、コンテナ内でコマンドを実行する
　　　[pip install flask]は、Flaskをインストールするためのコマンドであり
　　　※Flaskは、「PythonのWebアプリケーションフレームワーク」である

CMD：コンテナのデフォルトの実行コマンドを定義する

#### 2, 上記ファイルを作成したら、[localServer]フォルダ直下に保存しよう。
LocalServer / Dockerfile


## [次のページ]
[③ docker-compose.ymlファイル作成編](https://qiita.com/Mar_N/items/cfba6158cdc1bd23ab61)


## [参考]
・ https://blog.codecamp.jp/programming-docker-image-container
・ https://programing-school.work/docker-image/
NrealLightアプリ実行中にログを確認する

# NrealLightとは

NrealLightとはARグラスの一種です。

https://au5g.jp/smartglasses/

このデバイスのログを、アプリ実行中に取得したいというのが、今回のお話です。


# NrealLightアプリ実行中にログを確認する

NrealLightアプリのOSはAndroidなので、ログを確認するにはlogcatが必要です。
ただし、スマートフォンのUSBポートはグラスに接続されており、PCにつなげることはできません。
そこで、PCと無線でつなげてみることにしました。

# 検証環境

- グラスデバイス: NrealLight
- スマートフォンOS: Android 11


# スマートフォンのワイヤレスデバッグを有効にする

開発者向けオプションを有効にした状態で、図のように `ワイヤレスデバッグ` のトグルを有効にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/85bca8c7-8150-144d-9dc9-a0e30c45dff1.png)

ワイヤレスデバッグを有効にするかどうか聞かれるので、 `許可` をタップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/9597a916-17f0-6303-2e67-458da5ca59fb.png)

次に、ワイヤレスデバッグのトグルではなく、文字をタップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/f9410053-8782-bf07-8084-352161fb6b1b.png)

以下の画面に遷移するので、 `ペア設定コードによるデバイスのペア設定` をタップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/5d6c2fd0-e204-cbe5-9bb9-4083390f817c.png)

すると、ペアリングコードやIPアドレス等の情報が表示されるのでメモします。

# adbでペアリングする

さきほどメモした情報をもとに以下のコマンドを実行してください。

```bash
adb pair <スマートフォンのIPアドレス>:<ポート>
```

`Enter pairing code:` と表示されたら、メモしたコードを入力してください。

`Successfully paired to` と表示された成功です！


## Failedになった場合

`Failed: Unable to start pairing client.` と出た場合、スマートフォンとPCが同一LANにない可能性があります。
`ping` コマンド等で疎通を確認してください。

# adbで接続する

ペアリングができたら、以下のコマンドで接続してください

```bash
adb connect <スマートフォンのIPアドレス>:<ポート>
```

## 対象のコンピューターによって拒否されたため、接続できませんでした。というエラーになった場合

`対象のコンピューターによって拒否されたため、接続できませんでした。 (10061)`

というエラーが出た場合、スマートフォンをUSBでPCに接続して、以下のコマンドを実行すると接続することがあります。

```bash
adb tcpip <ポート>
```

# logcatを実行する

以下のコマンドでlogcatを実行できます。

```bash
adb logcat
```

# さいごに

本記事作成にあたり、以下を参考にさせていただきました。ありがとうございます。

- [Unity Documentation / ログファイル](https://docs.unity3d.com/ja/2018.4/Manual/LogFiles.html)
- [Android Debug Bridge](https://developer.android.com/studio/command-line/adb#connect-to-a-device-over-wi-fi-android-11+)
- [Android 11 wifi adb error "Unable to start pairing client"](https://stackoverflow.com/questions/64670288/android-11-wifi-adb-error-unable-to-start-pairing-client)
Mac で ext4 を読む

mac ではext4でフォーマットされたHDDを読み書きすることができない。読み書きするには、有料のソフト(extFS for Mac by Paragon Software)を購入する必要があるようだが、読むだけであれば、フリーのソフトウェアであるext4fuseをインストールすること可能である。ext4fuseを利用してmacでもext4を読むことができたので、ここではその方法について記す。

==環境
- Mac Pro (2019)
- mac OS Monterey 12.0.1

==インストール
以下のページを参考にして、ext4fuse をインストールした。
https://qiita.com/shimizumasaru/items/88e3713eb3fce05a6246

具体的には、任意のディレクトリで ext4fuse.rb (上記のHPの記述をコピペ)をエディタで作成し、そのディレクトリで以下のコマンドを実行。
$ brew install --formula --build-from-source ./ext4fuse.rb

==マウント
マウント方法を記す。以下のHPを参考にした。
https://qiita.com/sameyasu/items/bc937fc70f536ef84ee7

(1) diskutil list でマウントしたいHDDのボリュームとパーティション名を確認する。
$ diskutil list
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *8.0 TB     disk2
   1:           Linux Filesystem ⁨⁩                        8.0 TB     disk2s1
この場合、/dev/disk2s1 をマウントすれば良いことがわかる。

(2) マウントポイントとなるディレクトリを作成（ここでは、mt/ というディレクトリを作成した）
$ mkdir mt

(3) マウントする
ext4fuseは以下のコマンドで実行する。
$ ext4fuse マウントするディスク　マウント先

具体的には、以下のコマンドを用い、ルートでマウントする。
$ sudo ext4fuse /dev/disk2s1 ~/mt -o allow_other

なお、以下のように、一般ユーザーでマウントしようとすると、/dev/disk2s1にパーミッションがないためマウントできない。
 $ ext4fuse /dev/disk2s1 ~/mt -o allow_other 
 disk_open: /dev/disk2s1: Permission denied

(4) アンマウントは通常のumountコマンド でOK。
$ sudo umount  ~/mt

以上。
UnityのAndroid SDKにAPIレベル30のSDKツールを導入する

# Google Play ConsoleでAndroidアプリをリリースしようとしたらエラーになった

ターゲットのAPIレベルが29のアプリをリリースしようとしたところ、エラーになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/9e33ce2b-b1c4-3881-d4af-233eb106d2f7.png)

どうやら、ターゲットレベルが30以上じゃないとダメみたいです。

**どうやって30をインストールするんだっけ？**

ということで、Android SDKに新しいAPIレベルのツールを導入する手順を、備忘録として残します。

今回は Unity 2019.3.6f1 に API level 30 を導入します。



# Unityが参照している Android SDK のパスを確認する

Unity の `Preferences > External Tools > Android SDK Tools installed with Unity` 欄に Android SDK のパスが記載されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/1ccac3b4-5440-61ea-7a92-34a6d276d685.png)

今回の私の環境では、

`C:\Program Files\Unity\Hub\Editor\2019.3.6f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK`

でした。



# Android SDK に API level 30 を導入する

管理者権限でコマンドプロンプトを開きます。

カレントディレクトリを先程の `SDK` フォルダにします。

```bash
cd "C:\Program Files\Unity\Hub\Editor\2019.3.6f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK"
```
※コマンドは一例です。SDKフォルダーへのパスはご自身の環境に合わせてください。


以下のコマンドで API level 30 をインストールできます！

```bash
tools\bin\sdkmanager "platform-tools" "platforms;android-30"
```

以下のように表示されたら `y` を入力しましょう！

```bash
Accept? (y/N): y
```

ゲージが 100% になったら成功です！


# さいごに

本記事作成にあたり、以下を参考にさせていただきました。

- https://developer.android.com/studio/command-line/sdkmanager?hl=ja
会員情報DBを安全に利用するためにマスキングする

この記事は[ナイル Advent Calendar 2021](https://qiita.com/advent-calendar/2021/nyle) 2日目の記事です。

# はじめに
サービスを運営していると本番で発生したバグの調査や機能開発時の動作確認などの際に本番データを使って行えるとなにかと作業がはかどります。
ですが、ユーザーの個人情報やセンシティブなデータをそのまま持ってきて、社内のメンバーが比較的カジュアルにアクセス出来る環境に反映することはセキュリティ的に非常にリスキーであり避けなければなりません。
そこで、本番データのセンシティブな部分をマスキングすることで、実際の本番に近いデータで調査・動作確認が出来るようにします。

# マスキングにあたっての要件

- 個人が特定できない程度に非特定化加工する
- （個人ではなく）ユーザーを特定できるようにしたい
- プロダクトの動作画面上で表示される情報からユーザーの当たりが付けられるくらいにはしたい

# 具体的方法

**メールアドレス**
原型は残さず、ユーザー特定がしやすいようにユーザーIDを含める形に加工する

**ユーザー名**
本名が入っているユーザーも居るので最初の1文字目以降は全てマスキングする

**ユーザーアイコン画像path**
個人の肖像画像が登録されている場合があるのでダミー画像のpathに差し替える



# マスキングについて

## 環境
Aurora MySQL(5.6)

## 実装方針
今回はSQLだけで実現したいのでMySQLの文字列関数を使います。
[MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.5 文字列関数](https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html)

## マスキング対象データ

本番DBをそのまま掲載できないので、今回はちょっとアレンジを加えた架空の会員情報テーブルを使います。
登録データは[個人情報テストデータジェネレーター](https://testdata.userlocal.jp/)を利用させていただきました。

![Screenshot 2021-12-01_15-11-24-047.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20213/f757efaf-bfae-7f2d-d57d-10f372fcea64.png)

## マスキングするSQL
実際の会員情報テーブルをマスキングするSQLはもっと複雑ですが、エッセンスだけ抽出するとこのような形です。

```SQL
UPDATE users
SET name = CONCAT(LEFT(name,1), REPEAT('X', CHAR_LENGTH(name) - 1)),
    mail = CONCAT('develop+user_',id,'@example.com'),
    icon_path = '/profile/default.jpg';
```



## マスキング結果
![Screenshot 2021-12-01_15-29-12-191.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20213/0b486efc-76d4-c4fc-118b-603a14d222ae.png)

`name`の２文字目以降がすべて`X`でマスキングされています。
`mail`のメールアドレスが`develop+user_{ユーザーID}@example.com`の体系になっていてメールアドレスからどのユーザーであるかわかるようになっています。[^1]
`icon_path`は単純にデフォルトアイコン画像`default.jpg`に差し替えただけ。

# おわりに
今回は本番データを使って調査・検証する際に個人情報のみマスキングして手っ取り早く安全性を確保する方法を提示しました。
これが必要な際に毎回手作業でやるのも手間なので、シェルスクリプトを作っておいて実行するだけでダンプとマスキングが実行されるようにしておくと便利かと思います。

一方で、個人情報データそのものに起因するバグやお問い合わせの調査をする場合はやはり本番データを参照する必要があります。その際は本番データを参照できる権限を持った限られたメンバーのみで対応するなどでセキュリティ性を担保するように気をつけましょう。


[^1]: Gmailの[業務ごとにメールアドレスを作成する](https://support.google.com/a/users/answer/9308648?hl=ja)機能を活用して`develop@example.com`のようなメーリングリストを作ればどのユーザー宛にメールを送信してもそこで受信できるのでテスト時に重宝します。
Razer Naga Trinity のサイドボタンが効かなくなった

Razer Naga Trinityというマウスを愛用しているプログラマー兼CGモデラーです！

それまで無線マウスを使用していたのですが、おもいきってこちらの有線マウスに切り替えてみたところ、3Dモデリングがすごくはかどるようになりました！

おすすめです。

ただ、ちょっとしたトラブルがあったので、そのことについて今回は書きます。

# サイドボタンが効かなくなった

ある日突然、 マウスのサイドボタンが効かなくなりました！

ブラウザバックするときとかに多用していたので非常に困ります。

いろいろ試してたら直ったので、今後、同じ問題が起きた時用に記事に残します。

# Razer Synapse を起動した

Razer Synapse を起動してみましたが、特に問題なさそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/e171af77-3e93-1fa5-7810-4cc13e746ee0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/b19c891b-6935-7a2a-62dc-5a283daf5d16.png)

サイドボタンというのは、こちらの図の `マウスボタン4` と `マウスボタン5` のこです。


# USBを抜き差ししてみたけどダメだった

マウスのUSBを抜き差ししたり、PCを再起動したりしましたが、効果はありませんでした。


# サイド部品をつけ直したら直った

Razer Naga Trinity は以下の図のように、サイドボタンの部品を外すことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/08521e35-6b90-ae91-c124-60b08c4629b3.png)
※図引用 https://www2.razer.com/jp-jp/gaming-mice/razer-naga-trinity

このサイド部品を何度か外したりつけたりしてたら、サイドボタンが効くようになりました！


# さいごに

本記事作成にあたり、以下の情報を参考にしました。ありがとうございました。

- https://www2.razer.com/jp-jp/gaming-mice/razer-naga-trinity
草を生やしてこどものモチベーションを上げる【その１】仕様〜設計編

# 前書き
去年から、AtCoderにどハマりしています。
毎日精進して、草を生やすのが楽しいです。
![スクリーンショット 2021-12-01 15.41.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74969/bb5dd9b0-a24c-e3cc-d941-b354c0499d18.png)

この精進、こどもにも応用できないのかな？と考えたのがきっかけ。

# 課題

子供（特に長男）が、「今何をやっているか？」を忘れがちで、宿題や準備が進みません。
宿題の途中で何か別のことをしたり、、、、

# 解決方法

子供用のToDoリストを見える化してみます
ポイントで釣ってどうにかならないだろうか、、、、と思っている

- 仕様
    - タスクを完了にするとポイントが貯まる
![スクリーンショット 2021-12-01 16.29.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74969/28f80791-5bc2-746f-61d4-9559e10e2905.png)

    - 毎日のルーティンタスクを発生させる＆おわったことをアーカイブする
    ![スクリーンショット 2021-12-01 16.30.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74969/730448eb-b79b-22f6-0287-bc48e0a682ba.png)


# 使う技術（サービス）
- [Trello](https://trello.com/ja)
    - タスクをかんばんボードのように使えるサービス
    - 使い方
        - 「やること」「いまやっていること」「おわったこと」の3つのリストを準備
        - 「やること」リストの先頭に、画像とメッセージ表示用のタスクを用意する
    - 使い方（API）
        - Trelloの操作イベントをGoogleAppScript宛に通知する
- [Pixela](https://pixe.la/ja)
    - 草を生やせるサービス
    - 使い方（API）
        - ポイントのデータを貯める
        - 画像を表示する
        - 合計と今日のptを取得
- GoogleAppScript
    - doPost
        - タスクの移動先が「おわったこと」リストの場合
            - Trelloタスクのラベルを外す
            - Pixelaを更新する（ラベルに合わせてポイントを増やす）
            - Pixelaのstatsから合計と今日のptを取得
            - メッセージ表示用タスクの更新（今日と合計のポイントを設定、画像を更新）
        - タスクボードの初期化
            - 毎日発生させるタスク
            - 「おわったこと」リストをアーカイブ
   
# 以下のシリーズものになる予定
- 草を生やしてこどものモチベーションを上げる【その１】仕様〜設計編
    - この記事
- 草を生やしてこどものモチベーションを上げる【その２】実装編
    - ソースコードを余すことなく。
- 草を生やしてこどものモチベーションを上げる【その3】テスト編
- [草を生やしてこどものモチベーションを上げる【おまけ】heroku編](https://qiita.com/meowmeowcats/items/c268f4f42bbbe3d976c2)
    - svg画像がGASで扱えなかったのでパワープレイでpngに変換したお話
- 草を生やしてこどものモチベーションを上げる【その4】運用編
    - 運用は今後なのでかけるかわかりませんのでこの記事は未定かもしれない。
[JavaScript]forEachの使い方

JavaScriptで```forEach()```を使用したので使い方を簡単にまとめておく。

#forEach()の使い方
　```forEach()```は、配列の各要素に対して操作を行いたいときに使用する。```forEach()```のラムダ式を使った書き方は以下となる。

```javascript
// arrayは配列
array.forEach((value, index, array) => {
    //　繰り返し処理
});
```

上記のように、```forEach()```は配列に対する処理を***コールバック関数***で指定することができる。この時のコールバック関数は、以下の3つの引数を受け取ることができる。
■ value : 配列の要素
■ index : 配列のインデックス
■ array : 処理対象の配列
ここで、```index```と```array```については省略することができる。また、for文などと違い```break```や```continue```が使用することができない。

# まとめ
今回```forEach()```の使い方について簡単にまとめてみた。
```forEach()```は、繰り返し処理をラムダ式で記述できるため、再利用性や拡張性を確保することができる。
neosでlogix その9

#概要

niosでlogixやってみる。
writeノード、使ってみた。

#写真

![2021-11-30 10.24.00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/df21ef89-752d-2368-49ab-22422225e987.jpeg)



#Write

```
Inputs
 	Impulse	Write
 	dummy	Value
Outputs
 	IValue`1	Target
 	Impulse	OnDone
 	Impulse	OnFail
```



以上。
Visual Studioのインテリセンス活用

インテリセンスとは、自動入力補完のことです。
１文字でもコードを書くと、自分の宣言した変数や予約語の候補がポップアップで出てくるあれです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689266/c4ac7e4e-d6fb-cd68-88ca-67e33c2c762d.png)
ちなみにこのポップアップを消してしまったときや任意のタイミングで出したいときは、`ctrl + space` `(command + space)`で再度表示できます。
(Macはデフォルトでは違うキーかも)

名前空間に適用
---
この機能は名前空間(using～のやつ)にも適用されます。
unityエディタ上で作りたてのスクリプトでは、例えばText型を宣言すると名前空間がないと怒られます。
![A1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689266/d3855e8d-c2f4-78ad-9940-90b373db410f.png)
ここで、エラーが出ている波線にカーソルを合わせると、ポップアップが出るので、<font color=blue>考えられる修正内容を表示する</font>をクリック 
![A2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689266/5ad8ce66-61df-d9ce-9329-93813cbc7f45.png)
usingの候補が出るので、今回はUnityEngine.UIを選択
![A3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689266/f9d74ae1-944b-c8a8-f904-58f004ec008b.png)
追加してくれました
![A4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689266/8476b6da-28b7-006a-8c6e-01dbff04283b.png)
以前いくつかの場所で聞いたら、手動で書いてる人も割といたようなので、名前空間もできますよと。。。

構文を自動で
---
for文やforeach文等の構文の雛型も自動で作ってくれます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689266/8df1b859-8124-80f2-1dac-254d43131952.png)
途中まで書いて候補が出たら、ポップアップにあるようにTabキーを2回押すと、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689266/621c13ad-dfc6-5a77-3224-75f14697f71f.png)
一瞬でやってくれました
出番の少ない構文は書き方忘れやすいので便利ですね
サーバーレスでWebシステム作った話

初めて記事を書きます！
フリーランス2年目のシステムエンジニアです。
不慣れな部分ありますが、温かい目でお願いしますm(_ _)m

また、次回に自己紹介を書こうと思いますw

## 今回は？？
フリーランスエンジニアとして、個人で受けた初仕事としてユーザー管理システム的なものを作りました。
そのシステムをどのようなアーキティクチャー、技術で作ったかを紹介したいと思います。
※サービス名はここでは伏せさせてもらいます、、、

仕事を受けた時の話、「こんなWebサービスつくりたんだよね〜」って言われて、色々ヒアリング開始！
ベンチャー企業だったということもあり社内で使えるサーバーも保守、運用できる人員もいないので、
当時、私がAWSの勉強中だったこともあり、サーバーレスで作ってみようと提案し進めることになりましたw

## システム構成
さっくり描くとこんな感じの構成のものになる。
![スクリーンショット 2021-12-01 15.20.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554213/fddf0861-5904-6d68-a909-95e7dc1c16c6.png)

## 使用技術と使い方
* Kotlin
    * WebAPI実装
* TypeScript+React
    * 静的ページ実装
* AWS S3
    * Webサイトのホスティング
* AWS APIGateway
* AWS Lambda
    * APIGatewayと合わせてWebAPI
* AWS Cognito
    * ユーザー認証
* AWS CloudFront
    * S3の前段でCDNとして使用
    * 証明書の設定
* AWS RDS
    * MySQLを使用

## ハマったこと
これから描くこと以外にもハマったポイントはたくさんあったのですが、
パッと思い出した範囲で、、、

### 本番環境と検証環境の分離
ベストプラクティスとして環境ごとにアカウントを分離させる方法があげられますが、
アカウントは1つしか用意できず、どうしようと迷いました。
アカウントは1つで分離された環境を2つ用意、、、

結局、AWSアカウントを分割せず、VPCごとに環境を分割と環境変数で頑張りました。
今後のプロダクトの拡張次第でここら辺は改善したいですね。。。

### Cognito
ログイン画面をS3にデプロイし、Cognitoで認証、認可。会員用ページに遷移する。
というものにしたかったが、なかなかうまくいかず、、、
認証はうまくされているようなのにURLにパラメータが追加され、会員用ページに遷移されそうで遷移されなくて結構時間かかった。。

納期の関係もあって結局、Amplifyを使ってCognitoとログイン画面を作ったらうまく動いてくれたのでそれで進めました。
Cognito難しい、、勉強のやり直しですね、、、( ；∀；)

## まとめ
今年1月に企画がスタートして10月に一旦リリース完了しました。
ひとまず、致命的なバグなく動いていて安心しています!
今は、ユーザーから機能の改善案や追加機能の実装を行っています。
実際にユーザーに使ってもらって改善していくはプロダクトが育ってる感じがしていいと実感しています^^

今回の対応を経て、壁にぶち当たったら文献漁って、解決、たまに諦めるの繰り返しでした。
知識不足をあらためて感じた次第でございます、、、( ；∀；)
今後も精進ですね、、、
CuPy を使った画像の幾何学変換 with OpenCV

## はじめに

魚眼カメラで撮影した等距離射影方式の画像を，普通のカメラの中心射影方式のへの変換をするなどの，画像を幾何学的変換することがあります。僕は研究で，中央付近を大きく，外側を小さくする変換をするために使いました。

ここでは，等距離射影方式の画像を中心射影方式の画像に変換する場合を取り上げ，紹介していきます。

## なぜ CuPy を使うのか

CuPy は NumPy と互換性を持つ NVIDIA の GPU で動作することのできるライブラリです。幾何学変換は大量の画素を移動させるので，安直なループで実装すると処理時間が長いです。なので，GPU を使って並列化しようということです。

## 実装

作成したコード等は [ここ](https://github.com/Daiji256/geometric-transformation) にあります。

### `import`

今回は画像を扱うライブラリに OpenCV を使います。`import` するのはこの 2 つだけです。

```Python
import cv2
import cupy as cp
```

### ElementwiseKernel

CuPy で並列化を行うには ElementwiseKernel で簡単に実装できます。詳しくは [CuPyのElementwiseKernelで楽にGPUの恩恵を受ける](https://qiita.com/bow-of-man/items/e4d8b3a2ca14c54511f1/) で詳しく説明されています。

入力を変換前の画像 `img1` とそのサイズ `size1` と変換後のサイズ `size2`，出力を変換後の画像 `img2` としています。ここでは簡単にするため入出力する画像は正方形を前提にします。

5 ～ 10 行目では，変換前後の画素の関係を計算しています。計算式については説明を省きます。

11 ～ 13 行目で変換後の画像に画素情報を格納しています。入力画像は RGB の 3 色あるのでこうなっています。変換後の `i`[^i] には，変換前の `i2, j2` にある画素を格納することになります。

[^i]: `i` は 2 次元を 1 次元に変えた状態の座標なので，2 次元で表すと `i/size2, i%size2` となります。

```Python
trans_kernel = cp.ElementwiseKernel(
    in_params='raw uint8 img1, int16 size1, int16 size2',
    out_params='raw uint8 img2',
    operation='''
        float x = (i % size2) - (size2 / 2.0) + 0.5;
        float y = (i / size2) - (size2 / 2.0) + 0.5;
        float ang1 = sqrt(float(x * x + y * y));
        float ang2 = 800 * atan(ang1 / 784); // Magic number: 800, 784
        int j2 = (ang2 * x / ang1) + (size1 / 2);
        int i2 = (ang2 * y / ang1) + (size1 / 2);
        img2[i * 3 + 0] = img1[(i2 * size1 + j2)*3 + 0];
        img2[i * 3 + 1] = img1[(i2 * size1 + j2)*3 + 1];
        img2[i * 3 + 2] = img1[(i2 * size1 + j2)*3 + 2];
    ''',
    name='trans_kernel'
)
```

### 入出力

1，2 行目では `imread` で読み込んだ画像 `img1` を CuPy の配列に変換しています。3 行目では変換後の画像を格納するための空の画像 `img2_cp` を生成しています。

5 行目では，`trans_kernel` を呼び出し，GPU を使って並列処理をして変換します。

7，8 行目で `img2_cp` を OpenCV で扱える NumPy 形式に変換し，出力します。

```Python
img1 = cv2.imread('img1.png')
img1_cp = cp.asarray(img1).astype(cp.uint8)
img2_cp = cp.zeros((1920, 1920, 3)).astype(cp.uint8)

trans_kernel(img1_cp, img1.shape[1], 1920, img2_cp, size=(1920 * 1920))

img2 = cp.asnumpy(img2_cp)
cv2.imwrite('img2.png', img2)
```

### 結果

結果は次のようになりました。

|魚眼画像|補正後|
|-|-|
|![img1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699841/50dbcdc5-41ae-3bc4-0221-3454ecbe0d9c.png)|![img2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699841/2bcf6353-f5cf-a9df-ca4b-a78fe437d10f.png)|

## 文献

1. [geometric-transformation (GitHub)](https://github.com/Daiji256/geometric-transformation)
2. [CuPyのElementwiseKernelで楽にGPUの恩恵を受ける (Qiita)](https://qiita.com/bow-of-man/items/e4d8b3a2ca14c54511f1/)
MotionboardでデータソースAで絞り込まれた値をもとにデータソースBを絞り込む

#はじめに

特定のデータソースAを絞り込んだら、それに連携してデータソースBも絞り込まれることがやりたい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/39f50b0d-db76-2e15-3647-15b4f64a4c41.png)

#tl:dr

データソースBの検索条件で、
- 検索値の指定方法を「複数リストボックス」にする
- 選択地に「すべて」を表示のチェックを外す
- 検索候補値をデータソースAの項目名にして
- 「他のデータソース定義に設定された検索を実行した結果を利用する」のチェックを付ける


#条件

ここで想定している状況では、データソースAとデータソースBがそれぞれ数十万レコード近く存在するため、MBVIEWでは対応できないものとする。
理想的には、データソースAとデータソースBをDB側でJOINしておいたほうが良い気がするが、それをせずともMB上で実現可能なので、以下で紹介する。

#準備
以下のデータを作成してボードにアップロードしておく

部品分類.txt

```
部品コード	構成商品コード
1	A
1	B
1	C
1	D
1	E
1	F
2	B
2	D
2	E
2	F
3	A
3	C
3	D
3	F
3	G
```

商品番号.txt

```
構成商品コード	商品番号
A	10001
A	10002
A	10003
A	10004
A	10005
B	10001
B	10002
B	10003
B	10004
B	10005
B	10006
C	10001
C	10002
C	10003
D	10001
D	10002
E	10001
E	10002
E	10003
F	10001
F	10002
G	10001
```

#手順
まずはファイルをアップロードして、それぞれデータソースを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/3bd97ce5-a301-6d8b-f138-a65087f9d7a1.png)


テキストファイルの読込設定は以下のとおり設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/a825ae88-e802-dffd-3d8b-af73f15bf200.png)

各データソースの明細表を作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/36cd03e1-3e24-d00a-465c-0af5060d2725.png)


「アイテムリロード」用のボタンを作成する。
ポイント！「明細表_データソースA」のリロードと、「明細表_データソースB」のリロードアクションは、２行に分ける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/23ce8150-0bc3-4f28-a086-90a4fc352e64.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/d72f4c62-bfb3-d36b-d97f-55caf7a8b103.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/65a379f7-3a8f-3696-98dd-186165c494e6.png)


「入力アイテム」で、「コンボボックスアイテム」を作成し、以下の通り設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/71a2bcc1-c869-7d98-d7a8-1c218136bdf5.png)

データソースAのデータソース編集で、検索条件を追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/1f364d7e-84ca-9e4b-ec43-43cb574c9dff.png)

データソースBのデータソース編集で、検索条件を追加する
このとき、条件設定は以下の画像の通りにする。ポイントは以下
- 検索値の指定方法を「複数リストボックス」にする
- 選択時に「すべて」を表示のチェックを外す
- 検索候補値は「他データソース定義項目の値」に設定
- 他のデータソース定義は「データソースA」を選択。
- 「他のデータソース定義に設定された検索を実行した結果を利用する」のチェックを付ける
- 項目名（値）は「構成商品コード」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/a38cc5af-472e-aaa3-32e8-3a1a0cb686f6.png)


コンボボックスで値を選択すると、データソースAもデータソースBも同時に絞り込まれる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507249/953520c5-2e32-df3b-087d-6972d9ef4bb3.png)


# おわりに
"選択時に「すべて」の表示"のチェックを外すのは目からウロコでした。

※本内容はnestのスレッドに基づきます。
https://membership.wingarc.com/view/post/0/86307?commentId=179182
語学学習支援のための言語処理

# 概要

文法誤り訂正に関する本「語学学習支援のための言語処理」の紹介をします。

https://www.amazon.co.jp/dp/4339027618

# どういう本？

日本でずっと語学学習支援のための自然言語処理の研究に取り組んできた甲南大の永田さんが書いた一冊です。文法誤り訂正も第4章「ライティング学習支援」の中で触れられています。

# ここがポイント

最近は Grammarly や GMail の中での文法誤り検出・訂正のようなアプリケーションが注目されていますが、これらのアプリケーションを実際に作る時に必要な学習者コーパスの収集やアノテーションについてもしっかり書かれているだけでなく、後段のアプリケーションのために必要な要素技術についてもきっちり整理されています（単純に既存のツールを適用するだけではこういうのがうまく行かない、というような実体験に裏付けられています）。

自分（小町）は文法誤り訂正から語学学習支援の研究に入ったのですが、永田さんと初めて話したとき「文法誤り訂正は本当に意味があるタスクなのでしょうか。語学学習者は学習することによって自分で書けるようになるのが目標であって、自動で直したら自分で書けるようにならず、適切な負荷を学習者にかけた方がよくて、そのためには文法誤り検出の方がいいのではないでしょうか」というお話をされて目から鱗でしたが、そういうように永田さんと直接お話しして「なるほど、それは確かに」と膝を打つような話が活字になっていて、大変勉強になりました。

# よもやま話

最初は永田さんと小町で分担して書く、という話だったのですが、自分の実力不足により途中でギブアップして永田さんに全部お任せしてしまいました。すみません。

ちなみにAmazon のリビューの usata3 というのは自分が書いたリビューです（ステマ）。
計画がうまくいってなくて、行動することに日和ってるやつ奴いる？

### はじめに
***
みなさま、こんにちは。
私の[前回の記事](https://qiita.com/vampire_0305/items/87c1a7a1529a007e87a7)で市場価値が高いQA社員の要素をNizi Projectにならい、4つのスキルに分けてご紹介しました。
良い品質のサービスをお客様に提供するためには個人の成長は不可欠です。
今回は私が考える個人が成長できるもっとも重要な要素をお伝えしようと思います。


###PDCAサイクル
***
![PDCA.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541100/5b12b176-1cb7-0b11-814f-06f3a52fa51d.png)

ビジネスや個人の成長にも有用なビジネスフレームワークの一つにPDCAサイクルがあります。

- 目標や行動基準が明確化される
- 作業効率の改善が図れる
- 具体的な行動ができる

のようなことが得られるメリットだと思います。

###実際の目標設定（MBO）にあてはめてみる 
***
![マイルストーン.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541100/73fcba66-9f46-27eb-db23-2f59e37bec41.png)

期初で計画して、実行に入り、期末に振り返りと改善を行うようにしているけど、理想です。
現実は、みなさん日々の作業おおいですよね？多いが故に目の前の作業に追われてあっという間。期初は謎の空白期間あって、PDCAのPに比重が重くDが道半ばでCなんてえいやでやって評価を迎えてAなんてスキップされて次の期が始まっていることが現実です。

計画を立てる、とは、最初からゴールを決めて、そこに対する綿密な筋道を立てることです。「計画」は、ポジティブな雰囲気を持つ言葉ではありますが、質量感もあります。
もし、計画を策定した後で、仮に前提条件や状況が変わった場合、どうすれば良いだろう？その時点で、計画は最初に逆戻りになり、なかなか行動に移れません。

###（私が考える）PDCAの問題点
***
問題点1は**計画をたてるまでの動き出しが遅くなる**
実際の現場は売上や施策状況、本番不具合の対応など多忙です。考える時間がなかなか取れず、計画に着手することが遅れて、サイクルを回すこと自体に時間と労力を費やしてしまいがちです。目標達成までの計画遂行や作業の改善といった本来の目的を達成できない状態に陥ります。

問題点2は**計画が難しい**
計画がすべての始まりだから丁寧、綿密になります。
完璧な計画を立てた結果、行動するハードルがすごく上がって結局先延ばしになることが多いです。
また、モバイルゲーム業界は変化が多いため計画のリバイスがよく発生します。


###言いたいことは
***
**とりあえず行動に移しましょう。**

実際に取り組んでいる各問題の対応として、OODAサイクルを適用しています。
「計画」部分を「観察」、「状況判断」に変え、その時の状況にあった最適な打ち手をまずはやっています。そのために

- 開発メンバーと定期的な連携を行っています。プロダクトの状況把握がしやすく、実行に移しやすいです。
- 本番不具合件数、QA工数はいつでも最新を確認できるように自動取得しております、またグラフを用いて直感的に変化や傾向の情報を察知できるようにしております。判断が早くなります。

計画があるから先に進めない、実行ができないから、振り返りもできないし、改善もできません。
これからは実行をとりあえずやってみましょう。やらない人はずっとやらないし、調査や計画はするけどそれで力尽きて何もやりません。やらないと何もはじまりません。
まずは行動をして実績、成果を積み重ねて、成長していきましょう！
[Unity] UIのワールド矩形領域を得る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/eb060018-1a0e-6416-eabb-fa8b3e017129.png)

World座標系のオブジェクトがUI領域にあるかどうかを知りたい時などに、
RectTransform.GetWorldCorners(Vector3[4])
を使うと、UI(RectTransform)の4頂点を一気にとれる。
もちろん回転していても大丈夫。

```
void debugDrawMargin(RectTransform _marginRT)
{
    Vector3[] corners = new Vector3[4];
    _marginRT.GetWorldCorners(corners);
    Debug.DrawLine(corners[0], corners[1], Color.yellow);
    Debug.DrawLine(corners[1], corners[2], Color.yellow);
    Debug.DrawLine(corners[2], corners[3], Color.yellow);
    Debug.DrawLine(corners[3], corners[0], Color.yellow);
}
```
DB、SQL小ネタ集（Oracle）


この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting "Advent Calendar 2021")の16日目の記事です。
こんにちは、シアトルコンサルティングの村田です。

## はじめに
データベース関連のちょっとした情報を集めました。
関数のちょっと便利な使い方や処理効率の話です。
1つ2つでも身になるネタがあれば幸いです。

## 1. in句とor句のパフォーマンスは同じ
&emsp;・WHERE 列1 = 値1 OR 列1 = 値2 OR 列1 = 値3
&emsp;・WHERE 列1 IN (値1,値2,値3)  

　上記は同じ結果を得られますが、IN句を使用した方が簡潔で見やすい指定といえます。
ただしIN句はOR演算子のセットとして評価されるためパフォーマンスは変わりません。
つまりIN句でまとめらるものはまとめましょうということです。

## 2. ワイルドカード「_」で文字数を指定
&emsp;「 _ 」は任意の1文字を意味するワイルドカードです。
下記は、列1から5文字の値を取得します。（文字の全角・半角は区別されません）
&emsp;・WHERE 列1 LIKE '_ _ _ _ _'  

&emsp;0文字以上の任意の文字列を意味する「%」との併用も可能です。
%は前方一致、後方一致、部分一致の三種類があります。
下記の場合、最後に「マン」が付く7文字以上のデータが取得されます。
「スーパーマン」と「アイアンマン」は取得されませんが「帰ってきたウルトラマン」は取得できます。
&emsp;・WHERE 列1 LIKE '%_ _ _ _ _マン'  
&emsp;「%」や「 _ 」を文字列として扱うときにはエスケープ処理(**escape**)を記述します。
下記のように記述すると「¥」がエスケープ文字となり、次の文字の%を文字列として扱うことができます。
よって「アキラ100%」が取得できます。もし仮に「アキラ99%」がいた場合にも取得されます。
&emsp;・WHERE 列1 LIKE 'アキラ%¥%' escape '¥'
※「100%」が全角だった場合取得できません。

## 3. 置換変数「＆」
&emsp;SQL*Plusでは置換変数が使用できます。
下記のように「&」を記述するとプロンプト内で変数1部分の値を指定できます。
&emsp;・WHERE 列1 = &変数1  

毎回日付等を設定しなおす時とかに使えそうです。
開発よりも保守運用で使用する機会があるかもしれません。

## 4. UPPER関数で大小文字問わず検索することができる
&emsp;UPPER関数は引数の文字列を全て大文字に変換します。
下記でSELECT結果は全て大文字で出力されます。
&emsp;・SELECT UPPER(列1) FROM テーブル1;  

またUPPER関数はWHERE句でも使用が可能です。
下記のように記述することで大文字、小文字を問わず取り出すことができます。
&emsp;・SELECT 列1 FROM テーブル1 WHERE UPPER(列1) = 値1;
（全て小文字に変換するLOWER関数でも同様のことができます。）  

## 5. SUBSTR関数でマイナス値を指定する
&emsp;SUBSTR関数は引数の文字列を切り出す関数です。
キャラクタ単位でのカウントであるため、該当の文字についてシングルバイトでもマルチバイトでも1文字と判定されます。
バイト単位で判別したい場合はSUBSTRB関数を使用します。  
下記は3文字目から3文字が指定され'パーマ'が返されます。
&emsp;・SUBSTR('スーパーマン',3,3)  

2つ目の引数に負の値にすると文字列の後ろから数えて何文字目と指定できます。
下記は'ーマン'となります。
&emsp;・SUBSTR('スーパーマン',-3,3)  

## 6. ROUND関数でマイナス値を指定する
&emsp;ROUND関数は引数を四捨五入して返します。
下記は小数点以下第一位になるように四捨五入し、1234.6となります。
&emsp;・ROUND(1234.567,1)  

2つ目の引数に負の値を指定することもできます。
下記は十の位を四捨五入し、1200となります。
&emsp;・ROUND(1234.567,-2)  

## 7. ADD_MONTH関数において月の最終日は特別
&emsp;ADD_MONTH関数は引数ヶ月後の日付を返します。
下記は'21-08-20'が返されます。
&emsp;・ADD_MONTH('21-07-20',1)  

ただし月の最終日は特別な値として扱われます。
引数に月の最終日を指定すると返される値も月の最終日となります。
下記で返される値は'21-08-28'ではなく、'21-08-31'となります。
&emsp;・ADD_MONTH('21-02-28',6)  
※うるう年についても自動で判別、計算されます。
2024年の場合は02/29が最終日として扱われます。

## さいごに
&emsp;Oracle Masterの学習中に面白いなーと思ったことまとめてみました。
実務の中で使える知識もあれば、あまり役に立たない雑学的な項目もあります。
in句とor句のパフォーマンスとか気にしません。普通にin句使います。
しかし引数に負の値を指定できる関数や、月の最終日の特別扱いは1年に1回くらい役に立つでしょう。  

### 参考
(1) 西昭彦 飯室美紀 鈴木佐和 岡野友紀 矢島祐子 ORACLE MASTER Bronze Oracle Database 12c[12c SQL基礎]（試験番号：1Z0-061）完全詳解＋精選問題集 SBクリエイティブ株式会社 2014 

コーポレートサイト
https://www.seattleconsulting.co.jp/
Wantedly
https://www.wantedly.com/companies/seattleconsulting
ASTERIA WARP Excelビルダーで『ワークシートを保存してから実行してください。』

# 確認バージョン
- フローデザイナー 2106.1100
- Excelビルダー V2.4.1

# 1.現象

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206716/ef2d7681-7404-e180-6f77-1209aa2b1d39.png)
↑これでExcelビルダーを起動しようとしたら、以下のエラー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206716/45ed06f5-06e2-01d9-2f13-f79668e7f2b6.png)

メッセージどおりにエクセルワークシートを保存してもダメ。
メッセージの意図は、新規ファイルの未保存状態に対してと思われるが、既に作成、保存済みのエクセルでいくつかためしてもダメでした。

# 2.原因と対応方法

### OneDrive管理されているとダメ

OneDrive管理,同期しているファイルは、2021/12/01時点ではExcelビルダーは起動しないようです。
OneDrive管理,同期していないファイルであれば、Excelビルダー起動しました。

# 3.考察

OneDrive管理をエクセルファイルは、サーバーと同期などするためにエクセル内部的には一時編集モードのような扱いなのでしょうか。
OneDrive管理ファイルは以下のように保存済みにしてもダメでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206716/7bd21852-225d-fea9-d6fa-aaf5caa68009.png)

Windows 10の初期セットアップに仕方によってデスクトップ、ドキュメント、ピクチャーがOneDriveの領域を利用するように設定されるので引っかかりやすいと思われます。