OmniAICreator/Qiita-1.07M huggingface dataset:
【PHP】関数

この記事は以下の書籍を参考にして執筆しました。

- [独習PHP 第3版](https://www.amazon.co.jp/dp/B01FH3KVNU/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
- 
#構文の表記について

```php5
                       仮引数
  ┌戻り値のデータ        ┌─┴─────────────┐
void  asort ( array $array [, int $sort_flags = SORT_REGULAR])        
  関数名─┘       └─引数のデータ型─┘                       └─デフォルト値
```
>出典：[独習PHP 第3版](https://www.amazon.co.jp/dp/B01FH3KVNU/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

**`[]`(ブラケット)で囲まれた引数は省略可能**

データ型

|名前|説明|
|---|---|
|mixed|複数のデータを返す可能性がある(戻り値の場合)、または複数のデータ型を指定できる(引数の場合)|
|void|戻り地がない|

#文字列関数
##mb_strlen
文字列の長さを取得する
strlenとの違いはマルチバイトに対応しているかしていないか。

##mb_substr
文字列から特定文字列を抽出
引数には負の数も指定できるがこれにメリットは有るのか？

##printf

###プレイスホルダ(変換指定子)に含めることができる指定子
####符号指定子
数値に付与する符号を指定する

```php5

$num = 120;
$num2 = -120;
printf("数値は%+dです\n", $num);//数値は+120です
printf("数値は%-dです\n", $num);//数値は120です
printf("数値は+%dです\n", $num2);//数値は+-120です
printf("数値は-%dです\n", $num2);//数値は--120です
```
負数はデフォルトで−がつく。
正数で+を指定すると強制的に+がつく。
####パディング指定子
不足している桁を埋めるための文字(デフォルトは空白)
0を指定すると0詰め。

```php5
$num = 120;
printf("数値は%05dです", $num);//数値は00120です
```

0以外も指定でき、その際は`'`(シングルクォーテーション)を文字の前につける

```php5
$num = 120;
printf("数値は%'_5dです", $num);//数値は__120です
```
####アラインメント指定子
文字列を寄せる。デフォルトは右寄せ
`-`指定して左寄せ。

```php5
$num = 120;
printf("数値は%-5dです", $num);//数値は120  です
```

####表示幅指定子
文字列を最低何桁にするかを指定する。

```php5
$num = 120;
printf("数値は%5dです", $num);//数値は  120です
```

####精度指定子
浮動小数点数にたいして小数点以下の表示桁を指定

```php5
$num = 120;
printf("数値は%.5fです", $num);//数値は120.00000です
```

型指定

|名前|引数|表示|
|---|---|---|
|b|整数|2進数|
|c|整数|ASCII|
|d|整数|10進数|
|e,E||指数表記として処理|
|f|double|浮動小数点数|
|F|float|浮動小数点数|
|o|整数|8進数|
|s|文字列||
|x|整数|16進数(小文字)|
|X|整数|16進数(大文字)|

#配列関数

##array_push/array_unshift/array_pop/array_shift
配列に値を追加できる。


#参考文献
- [独習PHP 第3版](https://www.amazon.co.jp/dp/B01FH3KVNU/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
jsQRサンプル: AndroidスマホでQRコードを読み取ったら保存

* [[HTML5] QRコードリーダーを作成する](https://blog.katsubemakito.net/html5/qrcode-reader) に感動した。
    * スマホ対応、連続読み込み、読み取ったら音を再生、記録する処理を追加。
* https://github.com/tukiyo/sample.jsQR

## 動作に必要な環境

* `https` のphp (phpは読み取った内容を保存時に使った。)

![スクリーンショット_2020-07-24_15-11-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/c8e76df6-d65c-f469-756a-d59e2ffa8631.png)

* なぜか iPod Touch 2019 (iOS 14 Safari) だとうまく読み取れなかった。
* [OK] iPad mini 5 (iOS 13 Safari)
* [OK] Android9 (楽天mini)
Unity2020.1じゃなくても(0,0,0)の位置にCreate Emptyしたい！

# Create Emptyって変な位置にGame Objectを生成するよね・・・

`GameObject > Create Empty` してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/e09d066a-89b2-56c0-6839-ec645651960f.png)
生成されたGameObjectの `Position` を見てみると・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/0aa7b7ae-778f-3b8d-c7cd-4d9a8a0b8f30.png)
**あああああ！(0.155,0.255,0.34)ってどこ！？変な位置に生成しないで！**

ってなることがよくあります。

これは、 `Create Empty` をする時の `Scene` タブの表示領域が影響しているみたいです。



# どうやらUnity2020.1だと原点にオブジェクトを生成できるらしいぞ！

昨日、こちらのツイートではじめて知ったのですが、Unity2020.1には `原点でオブジェクトを生成` という設定があるようです。これを使えば変な位置に生成されなくて便利ですね！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Unity2020.1でアセットやゲームオブジェクトを複製した時の命名ルールを変えたりオブジェクトを作った時の座標を原点にしたりできるようになってた。 <a href="https://t.co/mAT62jKGGH">pic.twitter.com/mAT62jKGGH</a></p>&mdash; KOGA Mitsuhiro (@shiena) <a href="https://twitter.com/shiena/status/1286301582452121601?ref_src=twsrc%5Etfw">July 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

でも、Unity2018やUnity2019を使いたいケースもまだまだあると思います。

Unity2020.1じゃなくても、オブジェクトを原点 `(0,0,0)` に生成する方法がないか調べてみました！



# Unity2020.1じゃなくてもできる方法見つけた

調べてみたら、まったく同じ悩みの質問を見つけました。

[Is there a way to force new objects to always be created at (0,0,0,)?](https://answers.unity.com/questions/289680/is-there-a-way-to-force-new-objects-to-always-be-c.html)

こちらでは拡張エディターを作る手法がベストアンサーに選ばれてました。サンプルコードが記載されてますので、そちらを参考に拡張エディターを作ってみました。



# 常に `(0,0,0)` の位置にCreate Emptyする拡張エディターを作る

Assetsフォルダー配下に `Editor` フォルダーを作成し、そこに `GameObjectCreation.cs` を作成します。内容は以下のようにします。

```c#
using UnityEngine;
using UnityEditor;

public class GameObjectCreation : MonoBehaviour
{
    [MenuItem("GameObject/Create At 0 #&0")]
    static void createAtZero()
    {
        GameObject go = new GameObject("GameObject");

        go.transform.position = Vector3.zero;
        go.transform.rotation = Quaternion.identity;
    }
}
```

これで拡張エディターは完成です！
（ベストアンサーのコードはもっと長いですが、とりあえず必要なところだけ抽出しました。）

メニューに以下のように `Create At 0` というのが追加されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/565af1de-7192-cbcb-4ad2-0c35dba225a7.png)
試しに押してみると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/63c4b6f5-3dd1-a687-6681-e39fa6033774.png)
ちゃんと `(0,0,0)` に生成されてますね！

`Shift+Alt+0` でも生成できました。



# さいごに
無事に解決してよかったです。本記事の作成にあたり、以下を参考にさせていただきました。ありがとうございました。

- https://twitter.com/shiena/status/1286301582452121601
- [Is there a way to force new objects to always be created at (0,0,0,)?](https://answers.unity.com/questions/289680/is-there-a-way-to-force-new-objects-to-always-be-c.html)
Rust: PostgreSQL のデータを読む (Read)

```text:Cargo.toml
[package]
name = "postgres_read"
version = "0.1.0"
edition = "2018"

[dependencies]
postgres = "*"
```

```rs:src/main.rs
// --------------------------------------------------------------------
/*
	postgres_read/src/main.rs

					Jul/24/2020
*/
// --------------------------------------------------------------------
use postgres::{Client, NoTls, Error};

// --------------------------------------------------------------------
fn main() -> Result<(), Error> {
	eprintln!("*** start ***");
	let mut client = Client::connect("postgresql://scott:tiger123@localhost/city", NoTls)?;

	for row in client.query("SELECT id,name,population,date_mod FROM cities", &[])? {
		let id:String = row.get(0);
		let name:String = row.get(1);
		let population:i32 = row.get(2);
		let date_mod:String = row.get(3);
		println!("{}\t{}\t{}\t{}",id,name,population,date_mod);
	};	

	eprintln!("*** end ***");
	Ok(())

}

// --------------------------------------------------------------------
```

実行コマンド

```bash
cargo run
```
Rust: PostgreSQL のデータを作成 (Create)

```text:Cargo.toml
[package]
name = "postgres_create"
version = "0.1.0"
edition = "2018"

[dependencies]
postgres = "*"
```

```rs:src/main.rs
// --------------------------------------------------------------------
/*
	postgres_create/src/main.rs

					Jul/24/2020
*/
// --------------------------------------------------------------------
use postgres::{Client, NoTls, Error};

// --------------------------------------------------------------------
fn insert_proc(client:&mut Client,key:&'static str,
	name:&'static str,population: i32,date_mod:&'static str)
	 -> Result<(), Error> {

	let sql_str = "INSERT INTO cities (id,name, population,date_mod) VALUES ('".to_string()
		 + &key.to_string() + "','" + name + "',"
		 + &population.to_string() + ",'" + date_mod + "')";

	eprintln!("{}",sql_str);

	client.batch_execute(&sql_str)?;

	Ok(())
}

// --------------------------------------------------------------------
fn main() -> Result<(), Error> {
	eprintln!("*** start ***");
	let mut client = Client::connect("postgresql://scott:tiger123@localhost/city", NoTls)?;

	
	client.batch_execute("drop table cities
	")?;

	client.batch_execute("
		CREATE TABLE IF NOT EXISTS cities  (
			id	varchar(10) primary key,
			name	VARCHAR(20),
			population	int,
			date_mod	varchar(20)
			)
	")?;

	let _ = insert_proc(&mut client,"t3461","広島",38415,"1956-5-18");
	let _ = insert_proc(&mut client,"t3462","福山",42978,"1956-9-21");
	let _ = insert_proc(&mut client,"t3463","東広島",17246,"1956-3-7");
	let _ = insert_proc(&mut client,"t3464","呉",37416,"1956-10-11");
	let _ = insert_proc(&mut client,"t3465","尾道",45971,"1956-2-25");
	let _ = insert_proc(&mut client,"t3466","竹原",19243,"1956-7-9");
	let _ = insert_proc(&mut client,"t3467","三次",97456,"1956-11-12");
	let _ = insert_proc(&mut client,"t3468","大竹",25931,"1956-5-6");
	let _ = insert_proc(&mut client,"t3469","府中",89173,"1956-12-19");

	eprintln!("*** end ***");
	Ok(())

}

// --------------------------------------------------------------------
```

実行コマンド

```bash
cargo run
```
macOS に Mono をインストールして F# を CLI からコンパイルして実行する

『プログラミング F#』を読み始めて、macOS で F# を CLI からコンパイルする方法に戸惑ったので、Mono を使用してコンパイルする方法をメモっておく。

『プログラミング F#』の Hello World が CLI からコンパイルできないってことで調べたわけなんだけど、プロジェクトを作成した後にビルドして実行するとか、F# スクリプトとして実行するとか、F# インタプリタで実行するとかであれば、[Use F# on macOS](https://fsharp.org/use/mac/)を参考にするといいかも。

# Mono をインストールする

Homebrew を最新にしてから Mono をインストールする。

```shell-session
$ brew update
$ brew install mono
```

# HelloWorld.fs をコンパイルする

『プログラミング F#』にある Hello World をコンパイルしてみる。Homebrew でインストールした Mono では `fsc` が `fsharpc` になるみたい。ちなみに、`fsi` は `fsharpi` になるっぽい。

```shell-session
$ cat << EOS >> HelloWorld.fs
// HelloWorld.fs

printfn "Hello, World"
EOS
$ fsharpc HelloWorld.fs
```

コンパイルがうまくいくと、HelloWorld.exe ができあがる。

# HelloWorld.exe を実行する

HelloWorld.exe を Mono で実行する。`./HelloWorld.exe` として実行できないことに注意する。

```shell-session
$ mono HelloWorld.exe
Hello, World
```

# 参考文献

プログラミング F#
https://fsharp.org/use/mac/
Ubuntuでよく使うコマンドリスト

参考記事
https://note.com/10mohi6/n/n273bad25c378
https://www.cnblogs.com/csu-lmw/p/12910481.html
https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04


#コマンドリスト
sankou(https://support.kagoya.jp/gput/manual/driver/index.html)

#sudo apt-get update
sudo apt-get update
sudo apt-get upgrade

#日付を確認
date

#日本語ロケールを変更する
localectl status
sudo localectl set-locale LANG=ja_JP.UTF-8
localectl status#確認

#Anacondaのインストール
wget https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh
bash Anaconda3-5.2.0-Linux-x86_64.sh

yes
yes
no#Do you wish to proceed with the installation of Microsoft VSCode? [yes|no]

sudo nano ~/.bashrc
最後の行に追加
export PATH=~/anaconda3/bin:$PATH
反映
source ~/.bashrc

#仮想Python作成
conda create -n tf36 python=3.6
source activate tf36
//uwsgiを使う場合
conda install -c conda-forge uwsgi

#日本語対応
sudo apt -y install fonts-takao language-pack-ja fcitx fcitx-mozc
sudo update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
sudo im-config -n fcitx
sudo reboot

#git install
sudo apt-get install git
dpkg -l git#確認
git config --global user.name <myuser>
git config --global user.email <myemailaddress>
D-Waveの量子コンピュータクラウド環境Leapを無料の範囲で使ってみる(2. プラン更新)

## 1. はじめに
D-Waveが量子コンピュータ(量子アニーリング方式)のクラウド環境Leapを2018年10月にリリースしました。
最近、量子コンピュータのニュースをよく見かけるので、無料の範囲でLeapを使ってみようと思います。

[前回はアカウントの登録](https://qiita.com/kueda-qiita/items/c55e5b5794f44ac57820)について報告しました。
アカウント登録時はTrial Plan(試用プラン)としてLeapの環境が有効期限1ヶ月間で合計60秒使えるようになりました。
今回は、有効期限が過ぎたので、Developer Plan(開発者プラン)への移行について報告します。

Developer Planへの移行時はGitHubのアカウントとLeap使用時に紐付けるリポジトリが必要になるので、事前に用意しておいてください。

## 2. プランの移行
[ログインのページ](https://cloud.dwavesys.com/leap/login/)へ移動し、以下の項目を入力してログインします。
- EMAIL ADDRESS (メールアドレス)
- PASSWORD (パスワード)

ACCOUNT TYPE (アカウントタイプ)がTrial Planと記載されている隣の"GET MORE TIME"のリンクをクリックし、[プラン選択のページ](https://cloud.dwavesys.com/leap/plans/)へ移動します。
"Free Developer Access"について記載がある部分の一番下にある"CHOOSE THIS PLAN"をクリックします。
以下の項目を入力します。
- GITHUB USERNAME (GitHubのユーザ名)
- REPOSITORY LINK (リポジトリのリンク)
入力が終わって"SUBMIT GITHUB INFO"をクリックすると移行が完了します。

## 3. おわりに
Trial PlanからDeveloper Planへ移行が完了すると、Leapの環境が無料で毎月合計60秒使えるようになります。
LaravelのCI実行時にcomposer installでCIが落ちる現象を回避したい

# 要約

- CIのcomposer install時には`--no-scripts`をつけておく

## 概要

LaravelをGitHub Actionsでテスト実行時になぜかcomposer installで落ちる時期が突然出てきた。
ログを見ると`php artisan ide-helper:generate`で毎回落ちている。


```composer.json
  "scripts": {
    "post-root-package-install": [
      "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
      "@php artisan key:generate"
    ],
    "post-autoload-dump": [
      "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
      "@php artisan package:discover",
      "php artisan ide-helper:generate", 
      "php artisan ide-helper:meta"
    ]
  }
```

[barryvdh/laravel-ide-helperのREADME.md](https://github.com/barryvdh/laravel-ide-helper)によると、 `Some classes need a working database connection.`とのこと。

マイグレーション前にDB接続されるのは回避したい。

```
The generator tries to identify the real class, but if it cannot be found, you can define it in the config file.

Some classes need a working database connection. 
If you do not have a default working connection, some facades will not be included. You can use an in-memory SQLite driver by adding the -M option.
```

## 解決策

composer install時には`--no-scripts`をつけて、script実行を回避することにした。

```github-bactions.yml
~~省略~~
      - name: Install Composer dependencies
        run: composer install --no-scripts
~~省略~~
```

こんな感じで。

composer install時の引数については[Composer公式ドキュメント](https://getcomposer.org/doc/03-cli.md)を参照。
UiPathの魅力とは？基本情報をおさらい！最後にセミナー情報もあり！


こんにちはPeaceful morning社でインターンをしている高橋です！
先週まではAutomate anywhereなどについて書いてきましたが今回から新しく**UiPath**についても触れていこう思います。今回はUiPathの基本的な情報について触れます。詳しいツールの特徴などは次回以降の投稿で紹介していきます。

また記事の最後には、当社で行うセミナーの情報もあります！

##UiPathとは
UiPathはUiPath社が提供しているRPAツールで、デスクワーク作業を自動で行ってくれるロボット開発ツールとなっています。**多くの大企業でUiPathは使われており、日本でも人気のツールです。**ロボット開発と聞くと、難しいイメージがありますが、UiPathでは誰しもが使いやすいように、工夫がなされているツールもあり、初めてRPAを使うという方はUiPathから初めてみるのもいいかもしれません。

##UiPathの優れている点
①無料で使うことが出来る Community Cloudプランなら無期限に使用可能　　　　　　　　　 　(URL:https://www.uipath.com/ja/start-trial)
② UIが分かりやすい　　　　　
③多数のアプリと連携可能
　AIやブラウザとも連携可能
④チーム作業が可能
⑤サポートが充実している

以上のような部分がUiPathの優れている点です。

##UiPathの開発者向け製品
RPAプラットフォームを6つに分類したものがこちらです。
![スクリーンショット 2020-07-24 14.14.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670049/e7c2763a-dc12-406a-c873-db68be936c5b.png)

UiPathのRPAプラットフォームには、**発見・開発・管理・実行・協働・測定**の６種類があり、多くの製品が存在します。今回は６種類の中からRPA開発ツールで、日本語対応のあるStudio、StudioX、2つの製品について紹介していきます。StudioX→Stuidoの順で、操作が難しくなっています。

###UiPath StudioX 
StudioXはもっとも新しいツールです。ITスキルが無くても開発できるようにという思いで作られています。主にはドラック＆ドロップで開発を進めていくことができます。StudioXはStudioよりもシンプルで簡単にフローが作成できますので、初めてRPAを触るという方におすすめです。StudioXの特徴についてはまた今度の投稿で詳しく解説しますので、お楽しみに！

###UiPath Studio 
StudioはRPA開発者向けのツールです。StudioXよりも少し、難易度が上がっています。
StudioXにはなかった「変数」という概念を理解する必要があり、プログラミングを経験したことがないという方は少し勉強が必要になってくるかもしれません。まずは、StudioXである程度の基礎をおさえながら、Studioに移行するという流れがよいでしょう。

##セミナー情報

お知らせするのが遅くなってしまいすいません。この度Peaceful morning社ではUiPath StudioXのトレーニングセミナーを開催することが決まりました！以下が、オンライントレーニングの詳細です。


![料金イメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670049/c00b442e-067b-8ab5-a8da-77e84d0e3813.png)

7/30(木)に開催するオンライントレーニングセミナーは**スタンダードコース**となっています。スタンダードコースは一度、**StudioXがどのようなツールなのか一度、体験してみたい方向け**となっております。たくさんの方のご参加お待ちしております。


また、7/30(木)に参加するのが難しい方でも、上記の画像に記載の通り定期的に開催しております。7〜9月までのスケジュールを下記に貼っておきますので、ご参照ください。

![スクリーンショット 2020-07-22 17.08.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670049/2950615e-32cd-1bde-d860-aca7c07e635e.png)

この投稿を見て、興味を持っていただいた方は、以下のリンクから詳細のご確認と、申し込みをしていただけます。

参加申し込み・詳細はこちらから↓
https://studiox.rpahack.tech/


##StudioXについての知識をつけたいという方へ
**UiPathの新製品StudioXとは？ 特徴～勉強方法まで解説! ↓**
https://rpahack.com/uipath-studiox

**UiPath StudioXの基本をマスター！～画面構成/カード/アクション**
https://rpahack.com/uipath_studiox_1

今後QiitaでもUiPathの情報を投稿していきたいと思いますので、お楽しみに！

##RPA HACKについて
RPA HACKではRPA・AI・Power Automateに関する記事が100本以上掲載されています！すべて無料でご覧いただけます！

RPAエンジニアとして働いてみたいという方におすすめ↓
**・事務職から転職したRPAエンジニアが語る仕事の2つの魅力**
https://rpahack.com/attraction-of-rpa

Power Automateの使い方を学んで見たい方におすすめ↓
**・Power Automateの便利な使い方をカテゴリーごとに紹介**
https://rpahack.com/powerautomate-2


RPA HACKのtwitterのフォローもよろしくお願いします！
(URL：https://twitter.com/home)
svelteの開発環境の作り方

(2021-06-09追記)
フロントエンド開発においては、無理にdockerを使う必要はありません。
理由は、dockerを使うことで開発PCの負荷が高くなり、ビルド時間などが延びてDXが悪化します。
nodeバージョンを揃えるにはvoltaなどのバージョン管理がオススメです。

# 開発環境

- macOS Catalina
- docker -v @19.03.8

# 開発環境の作り方

## svelteプロジェクト作成

```zsh
npx degit sveltejs/template svelte-spa
cd svelte-spa
```

## Dockerからlocalhostにつなげるための設定

```diff:package.json
  "scripts": {
    "build": "rollup -c",
    "dev": "rollup -c -w",
-   "start": "sirv public"
+   "start": "sirv public build --host 0.0.0.0"
  },
```

## Dockerfileを作成

```
touch Dockerfile
```

```text:Dockerfile
FROM node:12-alpine
COPY package.json ./
RUN npm install
COPY . .
EXPOSE 5000
ENV HOST=0.0.0.0
CMD [ "npm", "start" ]
```

Docker起動を確認

```
docker build -t svelte/svelte-spa .
docker run -p 5000:5000 svelte/svelte-spa
```

`http://0.0.0.0:5000/`にアクセスしてsvelteのHelloWorldが開けることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134221/71f7710a-6978-05c0-8960-82565642a9fb.png)

やった！

# 参考
- [【Svelte】Svelte環境をDockerで作ってみた【Sapper】
](https://qiita.com/hisayuki/items/84ad20682dfba8076459)
- [How to put a Svelte app in a docker container?](https://stackoverflow.com/questions/61106423/how-to-put-a-svelte-app-in-a-docker-container)
半導体デザイナ向け電卓スクリプトの紹介

# はじめに
みなさん、半導体設計時の計算機には何を使用しているでしょうか? Windows付属の電卓? まあまあ使いやすいのですが、筆者にとっては致命的な欠陥があります。それは64bitまでしかサポートしていないこと。
アプリケーションにもよりますが、ASICの設計では128bit越えの演算なども使用することもありますのでこれはいただけません。
そこで自分のニーズにあった電卓プログラムを作成してみましたので、その紹介をしたいと思います。

# 特徴
* Python3で書いたよ
* 結果は常に10進、16進、2進の3種類で表示するよ
* 桁数に制限はないよ。100桁でも1000桁でもコンピュータのリソースが許す限り対応するよ
* 入力は2進、10進、16進を受け付けるよ。任意の場所で'_'で区切っていいよ
* 結果が負の場合は16進、2進表示は2の補数として表示するよ
* Python 3がint型に対して持っている全ての演算をサポートするよ (演算部分はPythonに丸投げしているよ)
* 結果が小数を含む場合は、16進、2進表示は切り捨てて表示するよ
* カーソルキーやCtrl-p, Ctrl-nなどで入力のヒストリを辿ることができるよ

# デモ

```
Lcalc > 0x3ff * 10 + 0b111_0010
(DEC) 10,344
(HEX) 0000_2868
(BIN) 0000_0000_0000_0000_0010_1000_0110_1000

Lcalc > 1024 * -1
(DEC) -1,024
(HEX) ffff_fc00
(BIN) 1111_1111_1111_1111_1111_1100_0000_0000

Lcalc > 0xffff_ffff * 0xffff_ffff * 0xffff_ffff
(DEC) 79,228,162,458,924,105,385,300,197,375
(HEX) ffff_fffd_0000_0002_ffff_ffff
(BIN) 1111_1111_1111_1111_1111_1111_1111_1101
      0000_0000_0000_0000_0000_0000_0000_0010
      1111_1111_1111_1111_1111_1111_1111_1111

Lcalc > 11 >> 1
(DEC) 5
(HEX) 0000_0005
(BIN) 0000_0000_0000_0000_0000_0000_0000_0101

Lcalc > 25 / 3
(DEC) 8.333333333333334
(HEX) 0000_0008
(BIN) 0000_0000_0000_0000_0000_0000_0000_1000
```

#入手法
以下にて公開しています。
https://github.com/triggerfish-mongara/lcalc
JS基礎復習

そろそろJsの復習をまた開始するのでアウトプットです。

JSコードの記述（呼び出し）
htmlファイルのScriptタグの中にコードを記述

```ruby:qiita.rb
<body>
    <script>
        // この中にJavaScriptのコードを記述する
    </script>
</body>
```

CSSファイルの読み込み方

```ruby:qiita.rb
<body>
    <script src="script.js"></script>
</body>
```

画面上部のアラート表示

```ruby:qiita.rb
window.alert('こんにちは')
```
redirect_toとrenderの違い

##はじめに
私はredirect_toとrenderの違いを理解していなかったために、redirect_backを使用しエラーメッセージを表示をすることができず、悩みました。もし、悩んでいる方がいれば少しでも助けになれればと思います。

##redirect_to
一回指定したアクションを実行して、そのアクションに対応したビューを表示させる
ちなみにredirect_backはredirect_toと同じ動き方をし、ユーザを直前のページに戻すことができます。


##render
アクションを実行せずにビューファイルを表示する

###2つの動き方
・redirect_to　　　：　controller　→　URL　→　route　→　controller　→　view
・render　　　　　：　controller　→　view

###使い分け
・render：　ログインや入力形式に失敗した場合など　＝　ただエラーを表示させるだけ
・redirect_to：　データ更新/削除が必要な場合　　　　＝　controllerの処理が必要
【学習記録(PHP)】関数作りの失敗

こんにちは、いちかわです。・ V ・

ECサイトを制作する過程で、関数の取り扱いが増えてきたので、
忘れないように記録させていただきます。

<h2>関数は便利で分かりやすくが基本！</h2>

関数をつくるとき、修正のしやすさや、流用が効く書き方が重要になってきます。


まずはこちらをご覧ください。関数を覚えたての私が、最初に書いた関数です。
おそろしい見た目をしていますが、このときの私は「ちゃんと動いた！」と、とても満足していました。

こちらのプログラムは、\$nameと\$commentの文字数をカウントし、指定文字数をオーバーした場合には、\$err_msgという配列にエラーメッセージをためるという仕様になっています。

```php:function.php
$err_msg = check_text_length($err_msg, $name, $comment); 
```
```php:function.php
function check_text_length($err_msg, $name, $comment) {
    $name_length = mb_strlen($name);      
    $comment_length = mb_strlen($comment);          
    
    if ($name_length > 20 || $comment_length > 100) {     
        $err_msg[] = '注）名前は20字以内、コメントは100字以内におさめてください。';  
    }
    return $err_msg;
} 
```
<br>
こちらの関数のいけないところは、
<ul>
<li>「check_text_length」という命名が分かりにくく、何が返ってくるかが分からない。</li>
<li>それぞれの引数に何を入れたらよいかが分からない。</li>
<li>限定的で、他のプログラムへの流用が効かない。</li>
</ul>
などなど、上げだしたらきりがありません(TT)
<br>
そこで、この怖い関数を自分なりに見れる関数へ改良してみました。
それがこちらになります。


```php:function.php
if (is_over_length($name, 20) === true) {
    $err_msg[] = '注）名前は20字以内におさめてください。';
}
    
if (is_over_length($comment, 100) === true) {
    $err_msg[] = '注）コメントは100字以内におさめてください。';
}  
```
```php:function.php
function is_over_length($str, $int) {
    $str_length = mb_strlen($str);
    if ($str_length > $int) {
        return true;
    }
}
```

まずは、曖昧だった「check_text_length」という関数名を、「is_over_length」に変更して、真偽値が返ってきそうな雰囲気を出しました。
また、第1引数は文字数をチェックしたい変数、第2引数は文字数の上限値とすることで、関数の分かりやすさと、汎用性を改善しました。
こうすることで、先ほどの関数に比べて見栄えも使いやすさも改善されました。
もしも、「こうすればもっとよくなるよ」というご指摘がございましたら、教えていただけますと幸いです。
<br>
勉強を進めれば進めるほど、分からないことはどんどん増えていく一方ですが、
過去の自分のプログラムの書き方を指摘できるようになったのは、ちゃんと前に進んでいけてるからだと思います。昔の自分の姿を見るというのは少し恥ずかしいのですが、今後も成長を実感しながら勉強していきたいと思います。
<br>
ここまでご覧頂き、ありがとうございました！
【PowerShell】自作コマンドレットの読み込み方

### 環境

```
Name                           Value
----                           -----
PSVersion                      7.0.3
PSEdition                      Core
GitCommitId                    7.0.3
OS                             Microsoft Windows 10.0.18362
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0
```

## 方法1： $Profile に追記する

`$Profile` （`C:\Users\USERNAME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1`）に書かれた内容は起動時に読みこまれてセッション内で使用できるようになります。

ここに書かれた変数はスコープ的には最上位の `global` になるので気をつける必要がありますね。

外部モジュールの読み込みやエイリアスの登録だとかの簡単な設定であればこの方式が楽です。

## 方法2：$Profile からドットソースで読み込む

PowerShell では `.` に半角空けて `.ps1` ファイルのパスを指定すると中身が現在のセッションに展開されます。このドットソース機能を使うと用途別にファイルを分けてカスタマイズできるようになるので、自作コマンドレットが増えたときに上記の方法1よりも管理がしやすくなるというメリットがあります。

今のところ、 `$Profile` と同じ階層の `cmdlets` というディレクトリに自作コマンドレットを置いていくという運用がしっくり来ています。

コマンドレットの読み込みには以下の内容を `$Profile` に書いておきます。

```Microsoft.PowerShell_profile.ps1
$Profile | Split-Path -Parent | Join-Path -ChildPath "cmdlets" | Get-ChildItem -Recurse -Include "*.ps1" | ForEach-Object {
    . $_.FullName
}
```



動作的には読み込み先の `.ps1` ファイルがそのまま `$Profile` 内に展開されるようです。 PowerShell 3 以前から使える `$myInvocation` は、読み込み先のファイルに書かれていても実際の実行場面では `$Profile` と同じディレクトリを指すようになるので注意が必要です。
（PowerShell 3 以降で導入された `$PSCommandPath` なら正しくファイル名を返すようです）



モジュールとして読み込む方法もありますが、 `Modules` ディレクトリは公式から取得したモジュールのために充てたいのと、`.psd1` や `.psm1` の扱いが手に余るのでこの方式です。
他に便利な方法がありましたらご指示いただければ幸いです。
Reactプロジェクトで.envを使う

create-react-appで作成したプロジェクトであれば、プロジェクト直下に.envファイルを作成し、prefixに`REACT_APP_`を付けるだけで.envから変数を読み込むことができます。
参照：[Reactにおける環境変数を設定について、ようやく理解したので原因と共にまとめてみる\_100DaysOfCodeチャレンジ38日目\(Day\_38:\#100DaysOfCode\) \- Qiita](https://qiita.com/yuta-ushijima/items/a653e9ca4847276f19cd)

この記事は、create-react-appを使わずに作成したReactプロジェクトで.envファイルを使う方法となります。

# .envファイルの作成

プロジェクト直下に.envファイルを用意します。

```text
API_KEY=12345678
```


# dotnev-webpackインストール
webpackコンパイル時に.envファイルの内容をインポートしてくれるパッケージ`dotenv-webpack`を使います。
[dotenv\-webpack \- npm](https://www.npmjs.com/package/dotenv-webpack)

## インストール
```bash
yarn add dotenv-webpack
```

## webpack.configの設定

```js
const Dotenv = require('dotenv-webpack');

module.exports = {
    ...
    plugins: [
      new Dotenv(),
    ],
    ...
  };
```

# 読み込み

`process.env.HOGE`で読み込めます。

```js
console.log(process.env.API_KEY);
```

# 追記：htmlファイルで.envの値を使いたい場合
`html-webpack-plugin`を使います。
## インストール
```bash
yarn add html-webpack-plugin
```

## webpack.configの設定

```js
const Dotenv = require('dotenv-webpack');

module.exports = {
    ...
    plugins: [
      new Dotenv(),
      new HtmlWebpackPlugin({
        template: './src/index.html',
      }),
    ],
    ...
  };
```

# 読み込み

`<%= process.env.HOGE %>`で読み込めます。

```html
<script src="http://maps.google.com/maps/api/js?key=<%= process.env.GOOGLE_API_KEY %>&language=ja"></script>
```
GitHubPagesでMarkDown(MD)とPDFを公開するには

# はじめのはじめに

このページの情報は

-  「mdファイルをGitHubPagesで公開するにはどうすればよいのか」
-  「pdfファイルをGitHubPagesで公開すればどうすればよいのか」

という2つの問いに対応します。

# はじめに

VSCodeの追加プラグインでMarpというものがあります。

これはGoogleスライドやPowerPointでのプレゼン資料の作成作業を、
MarkDown記法によって代用できる！というものです。

詳しくは[こちら](https://qiita.com/ta9star/items/da9af53c4bf542d3ae7a)

さて、私はこのMarpを利用して、スライドをPDFファイルとして作成(= MarkDownで記述→PDFとして保存)したのですが、

**「PDFファイルそのもの」「もととなったMarkDownファイルのソースコード」を、GitHubPagesで公開するにはどうすればよいのか？**

という問題に遭遇し、解決することができたので、
そこで得られたことを共有します。

# 前提条件

PDFファイルと、そのもととなるMarkDownファイルは、すでに作成されているものとします。


# 注意

## GitHubpagesではmdファイルは出力できない

README.mdは例外として一応表示できるようなのですが、
他のmdファイルにアクセスしようとすると404が返ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549712/6ddc140c-1894-67d2-a255-308f142a9693.png)

そこで、md形式ではなくtxt形式として保存しなおし、GitHubにアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549712/4e9cca7d-ded4-b2cf-17d2-c6cf3956b681.png)

# HTMLでの記述方法


インラインフレームタグを利用します。
widthやheightなどはお好みで調整してください。
CSSなどで回り込みなどの設定をすると、さらにきれいになるはずです。

```HTML

    <iframe
      class="slide"
      src="projectSlidebyMD20200626.pdf"
      width="50%"
      height="500px"
    ></iframe>

    <iframe
      src="projectSlidebyMD.txt"
      width="45%"
      height="500px"
      class="sorce"
    ></iframe>

```

# 出力例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549712/5e749ef3-71cf-18a0-21ec-653719ccec2e.png)



# 参考

[LTのスライド作成に時間をかけたくない](https://qiita.com/ta9star/items/da9af53c4bf542d3ae7a)
rubyでドローポーカーを作ってみる～実装編3（プレイヤー）～

## 概要

[rubyでドローポーカーを作ってみる～準備編～](https://qiita.com/r12tkmt/items/56a60f2d69226b2bdcf2)
↓
[rubyでドローポーカーを作ってみる～test-unit準備編～](https://qiita.com/r12tkmt/items/48940d0e09a77d210bf2)
↓
[rubyでドローポーカーを作ってみる～実装編1（カード）～](https://qiita.com/r12tkmt/items/175aa66fd91995f13524)
↓
[rubyでドローポーカーを作ってみる～実装編2（役）～](https://qiita.com/r12tkmt/items/cd22e04eb102eabf03cd)

に続いて。

ソース: https://github.com/rytkmt/ruby_poker

今回はカード、役を扱うプレイヤーの実装に入っていきたいと思います。

## プレイヤーの実装

今回もまずは要件を整理してみます。

- 始め5枚のカードをもらう
  - 役を判定する
- 任意の枚数、任意のカードを交換する
  - 再度、役を判定する
- プレイヤーの勝敗を判定する
  - 実質、プレイヤーの持つ役を判定する

### ファイルの作成

```ruby:ruby_poker/player.rb
module RubyPoker
  class Player
    def initialize(cards:)
      @cards = cards
      @hand = Hand.new(cards: cards)
    end
  end
end
```

もらったカードで役を判定するまではこれで出来ました。

```diff:ruby_poker.rb
require "ruby_poker/version"
require "active_support/all"
-require "ruby_poker/card"
-require "ruby_poker/hand"
+Dir[__dir__ + "/ruby_poker/*.rb"].each { |p| require p }

module RubyPoker
```

requireも忘れずに行いますが、1ファイルずつ追加していくのもあほらしく感じたので全て読み込むように変更しました。

### カードの交換

続いて、任意のカードの交換を実装します。

- いらないカードを捨てる
- 新しいカードをもらう
- 新しいカードにて、再度役を判定する

カードの交換は要素番号をもらい削除するようにしようと思います。
こんとき、要素番号で削除するため小さいものから削除してしまうと要素がそのぶんずれておかしなことになってしまいます。
なので、大きい番号から削除するようにしないといけないので注意して実装します。
検証）

```ruby
x = %i[a b c d e]
# a & c & d    =>   [b, e]
indexes = [0, 2, 3]

indexes.each { |i| x.delete_at(i); p x }
# => [:b, :c, :d, :e]
# => [:b, :c, :e]
# => [:b, :c, :e]

x = %i[a b c d e]
indexes.sort.reverse_each { |i| x.delete_at(i); p x }
# => [:a, :b, :c, :e]
# => [:a, :b, :e]
# => [:b, :e]
```

カードは山札からもらう必要があるため、捨てるカードの枚数だけ新しいカードをもらえばプレイヤーの責務の範囲は小さくなるかと思いました。
なので、そのように実装してみましょう（あとから変える可能性もありますが、、）k

```ruby:ruby_poker/player.rb
    def change(indexes:, new_cards:)
      raise(ArgumentError) unless indexes.size == new_cards.size
      raise(ArgumentError) unless indexes.all? { |i| (0..4).include?(i) }

      indexes.sort.reverse_each { |i| @cards.delete_at(i) }
      @cards += new_cards
      @hand = Hand.new(cards: @cards)
    end
```

### プレイヤーの勝敗判定

今回も`Comparable`を使用します。
結局は役にて判定するので委譲するようにします。

~~delegateは`active_support`にて`Module`に`delegate`メソッドが拡張で用意されています。~~
~~`Class`は`Module`のサブクラスなので同じく`delegate`が使えます。~~

```ruby:ruby_poker/player.rb
    delegate :<=>, to: :@hand
```

↑ダメでした。。
`<=>`のotherが、そのままdelegateだとhandに渡されてしまうため、自分のhandとotherのplayerを比較してしまうことになってしまいました。

```ruby:ruby_poker/player.rb
    attr_reader :hand
    def <=>(other)
      @hand <=> other.hand
    end
```

おとなしく普通に実装しました。。


これで完了。楽ですねー

## 終わりに

今回は、勝敗などに関わる機能面での処理のみ実装しました。
ここから、ゲーム進行のことを考えるとコンソール出力回りを実装する必要もでますが、それは次の進行回りを検討するタイミングで追加するようにしていきたいと思います。

## 続き

↓
[rubyでドローポーカーを作ってみる～実装編4（山札）～](https://qiita.com/r12tkmt/items/649dbd9a6e4d097ceb4c)
【JDLA】 G検定 受験記録

JDLA G検定 2020#2を受験しました。

###G検定とは
一般社団法人　日本ディープラーニング協会(JDLA/[リンク](https://www.jdla.org/certificate/general))が主催している、ディープラーニングの知識を問う試験で、JDLAのホームページでは以下のように記載されています。

>ディープラーニングの基礎知識を有し、適切な活用方針を決定して、事業活用する能力や知識を有しているかを検定する。

今年は3月、７月に実施され、あと１１月実施予定を合わせて３回開催予定です。

###試験内容
####受験資格など
受験資格は特にありません。
※どこかで「日本在住者」に限定するような記述があったと思いますが、詳細はJDLAのホームページを確認してください。
受験料は通常12,000円、学生は5,000円で設定されています。
2020#2に関しては、コロナ禍の影響もあり、受験料半額キャンペーンが実施されました。

####出題内容
JDLAのシラバスでは以下の８項目からの出題、となっています。

- 人工知能（AI）とは（人工知能の定義）
- 人工知能分野の問題
- ディープラーニングの概要
- ディープラーニングの概要
- 人工知能をめぐる動向
- 機械学習の具体的手法
- ディープラーニングの手法
- ディープラーニングの応用に向けて

####試験形式
オンラインでの試験です。
試験時刻に試験用サイトにログインして受験します。
（PC、ネット環境があれば自宅でもカフェでも受験できます。）
ここから択一形式で２００問、試験時間は２時間です。
試験時刻は13:00-15:00です。

###結果
合格でした！！
試験から１０日前後でメールにて合否通知が届きます。
合否のみで点数は分からないですが、
他の試験同様、65-70%がボーダーではないかと言われています。

###勉強法(と、前提知識)
####前提知識
ディープラーニングに関する試験、ということで、理系的な知識が必要と思われるかもしれませんが、私自身は数学がニガテ過ぎて高校・大学と文系特化の学科に進んだので、ほとんど理系的な能力はありません。
つまり、G検定合格のために、理系であることやディープラーニングの学習者・技術者であることは必要ありません。

###勉強法
自宅で受験できる、ということもあり、”カンペ”の準備や試験中にググる行為も禁止はされていません。
ここがG検定受験の特徴であり、キモであり、落とし穴でもあると思います。

2時間で200問ということは、36秒/問のスピードで回答していく必要があり、いちいちカンペやgoogleに頼っていては時間が足りません。
まずは、ある程度きちんと知識を身につけておき、自分の知識のみでスピーディに解いた上で、分からない問題や最終チェックのためにこれらの手段をとっておく、というのが理想だと思います。

前置きが長くなりましたが、実はG検定の受験は去年11月にも受験しており（ナメていたので不合格でした）、そのときの内容をメモしていたものがありましたので、基本的にはその内容（過去問）で出た言葉を１つずつ確認する作業を通して少しずつ知識を増やしていきつつ、カンペとしてまとめていきました。
※ネットを調べると過去問をそのまま掲載したブログなどがありますが、受験細則に「問題を保存したり、拡散するのは禁止」とする旨の記載がありますので、正直そういったところを頼るのはおすすめしません。

”黒本”([amazon](https://www.amazon.co.jp/dp/4295005665/ref=cm_sw_r_tw_dp_x_v-LgFbCKQH0JR))などの問題集や、Study-AIという[サイト](http://study-ai.com/generalist/)で模擬試験を作成して公開していますので、出題内容はそちらかもある程度掴めると思います。

あと、kindleサービスを利用するコトに抵抗がなければ、G検定対策用のテキスト・用語集・問題集を個人で販売している人がいますので、そういったモノを使うコトでより試験向きにまとめられた知識を得やすいと思います。

###つまずきどころ
個人的には、下記のようなジャンルがつまずきどころでした。

- 権利・法律系・・・問題文・選択肢も長い。カンペにしにくい。
- 計算や数学理論系・・・偏微分の計算結果や数学理論を説明を回答するようなもの。数学ワカラナイ。。

特に権利・法律系は割と序盤で出てくるので、ここで詰まると一気に時間的にも精神的にもあせらされます。

####開き直りが大事
上述しているとおり、G検定は36秒で１問解く必要があります。
ですが、合格さえできればいいという意識に切り替えて、75%だけはちゃんと回答しようと思えば、50問分(30分)も余裕を持つことができます。
問題文・選択肢が長い、調べても情報が出てこない、といったようなものは積極的に捨てていくのが良いように思いました。

###最後に
昨日(7/23)にG検定合格者の会もありましたが、合格者のみが参加できる勉強会などの情報が紹介され、今後ディープラーニングに継続的に関心を向けていくにあたって、”G検定合格者”という立場でいるコトのメリットは、「単に検定に合格した」という以上に、非常に大きいように感じました。
また、この業界は目まぐるしく変化しているので、その動向を追うという意味でもG検定対策の勉強は非常に有意義だと思います。
私も今後継続的に受験して、少しでもこの業界に関心や知識を持ち続けたいなぁと思います。
機種変更をするときに気をつけるべきこと

# 気を付けるべき項目
機種変更したときに，失敗したな..っと思ったことがあったため，次変更するときの備忘録として残しておきます．そんな高性能でなくても低スペックでもいいよ..って思っていたのですが，実際に普段使っている機能がなかったときにものすごく不便に感じたため，押さえておくべき機能を列挙しておきます．当たり前が当たり前じゃなかったんやな..

## 生体認証が付いているかどうか
### 携帯の解錠
今や，携帯にロックをかけるのが当たり前になってきいますが，番号やパターンを入力するのは面倒．そこで，生体認証ですぐに携帯のロックを解除することができます．
- 指紋認証
- 顔認証
実用化されている認証方式はこの2つ．特に指紋認証は便利．マスクをつけていても，暗い場所にいても安定的に認証することが可能です．

### パスワード管理アプリ
また，パスワード管理アプリの認証のマスターパスワードとして，生体認証に置き換えることができます．今やさまざまなサイトやアプリで会員IDとパスワードの設定が行われており，パスワード管理アプリを使われている方も多いかと思います．そのマスターパスワードをいちいち入力するのは面倒なため，生体認証に置き換えてパスワード管理アプリを開くことができます．しかし，現在(2020/07/24)ではAndroidの場合は顔認証で置き換えることはできず，指紋認証でないと解錠することが叶いません．iPhoneだと顔認証でも対応しているアプリがあるようです．

## モバイル通信のON/OFFが切り替えやすいかどうか
僕はWi-Fi環境下で作業することも多いため，あまりモバイル通信を使わないです．そのため，通信量が最も少ない契約プランに入り，基本的にモバイル通信はOFFにして，外に出かけるときのみONに切り替えています．設定から，どの機種でもモバイル通信のON/OFFは切り替えられますが，そこまで移動しなくても，たやすく切替できれば嬉しいです．そのため，ホーム画面からすぐON/OFFが切り替えられるか否かは僕にとっては重要な要素となってきています．

## イヤホンジャックがあるかどうか
ほとんど付いているかと思いますが，最近のiPhoneではなくなりましたね..ある程度妥協しないといけなくなってくるかもです．

## 防水であるかどうか
最近の人はお風呂に入りながらYoutubeやネットサーフィンをする人もいるそうですが，僕には無縁です．ただ，最低限「日常生活防水」は欲しいです．雨が降ったときに携帯の心配をするのはストレスです．僕が高校生のときは普通のスマホは防水機能なんてついていないのに，今や当たり前になって必須レベルになってきました（生体認証も然り）．部活をしていたら雨が降ってきてiPhone4Sの心配を真っ先にした..ってこともありました．

# おまけ
気になる機種をメモしておきます．ちなみに僕はスマホにそれほど機能を要求しておりません(~~さっきまで色々要求していた~~)．年々スマホのカメラの画質が綺麗になっていますが，別に画質よくなっても今の時点で十分なレベルだし，むしろこれ以上良くなられてもストレージ喰ってしまうし，iPhone8の時点でキープしてほしい．むしろそれより若干悪くてもいい(~~だから価格を抑えてくれ..~~)．ストレージはiPhone4S買ったときは多めで16GBだったのに，今や64GBでももうちょい欲しいくらい(~~画質がもっと良くなったら128GBあっても足りなさそう..~~)．だから要求的には128GBですね．メモリは正直気にしない．そんな性能を求めてない．PCじゃないんだから..．いや正確に言うと，スマホはPCだけど，メインPCは別で買うって感じです．
## [iPhoneSE](https://www.apple.com/jp/iphone-se/?afid=p238%7CsTf4OICNI-dc_mtid_20925qtz40402_pcrid_437767511959_pgrid_100058840853_&cid=wwa-jp-kwgo-iphone-slid--Brand-iPhoneSE-Evergreen-)(2020/05/11~発売)
最近のスマホは大画面化している傾向がありますが，僕にとっては嫌です．あんな大画面の必要性を感じないです．今iPhone8を使っていますが，iPhone8すらも大きく感じています．iPhone4Sくらいのサイズ感で十分．スティーブ・ジョブズのセンスの良さをひしひしと痛感しています（ただジョブスと僕の相性がいいだけ）．今，iPhone8とMacBookAir(2015)を使っている一見Apple信者の僕ですが，PCはThinkPadにスマホはグーグルピクセルaに乗り換えようかと考えています．でもこのiPhoneSEはサイズ的にはギリ許容範囲(iPhone8と同じ)価格がiPhoneにしては安いということで，気にはなっています．

## [Google Pixel4a](https://store.google.com/jp/product/pixel_4a_specs) (2020/08/20~発売)
iPhone8と比較してさらに画面は大きくなっていて，若干の不満要素です．とは言え，まだコンパクトな方ではあります．

## Xiaomi
セカンドスペース機能がやばいらしい．
使ってみたい．
[Python] Django で Web アプリに挑戦してみた(Form 作成編)

# はじめに

先日、「*connpass - エンジニアをつなぐIT勉強会支援プラットフォーム*」で Django の*勉強会イベント*に参加してきました！！

そこから Django の面白さ・楽しさに気付いたので（昔から若干の興味も持ってました）独学で勉強してようやく Form の作成ができました。。。（これだけで一苦労です）

![Form 完成画像](https://raw.githubusercontent.com/taiseiyo/taiseiyo/master/figure/form.png)

![User 登録画面](https://raw.githubusercontent.com/taiseiyo/taiseiyo/master/figure/register.png)

コードの全ては[ github ](https://github.com/taiseiyo/heroku/)にありますので是非ご覧下さい

# Django について

DjangoとはPythonでWebアプリを開発する際に使うWebフレームワークです。勉強には[ Python3 Django 超入門 ](https://www.amazon.co.jp/Python-Django3%E8%B6%85%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798061921)を使いました（結構オススメできます）

## Django のメリット

### 大規模
Webアプリ開発でよく使われる、「ユーザー認証」「管理画面」「サイトの案内ぺージ」「RSSフィード」など、よく使われる機能が全て詰めこまれています！！

### 別途ソフトなど不要
Python の環境が用意できれば、その場で組み込み利用が可能です

# Form 作成用のコード
```python:forms.py
#!/usr/bin/env python3
from django import forms

class DailyForm(forms.Form):

    name = forms.CharField(label="name",
                           widget=forms.TextInput(
                               attrs={"class": "form-control"}))
    password = forms.CharField(label="password",
                               widget=forms.PasswordInput(
                                   attrs={"class": "form-control"}))

```

Django 側の処理として widget の作成を forms.py で行いました。

この widget を views.py で呼び出そうと思います。

因みに DailyForm クラスが [*はじめに*] の写真の上部の部分、RegisterForm クラスが [*はじめに*] の写真の下部の部分に相当してます。

```python:views.py
class DiaryView(TemplateView):
    def __init__(self):
        self.data = ActiveUser.objects.all()
   
        self.params = {
            "title": "Welcome to Diary Application Form",
            "message": "Input your data",
            "form": DailyForm(),
            "data": self.data
        }

    def get(self, request):
        return render(request, "***", self.params)

    def post(self, request):
        if(request.POST["name"] == "***" and request.POST["password"] == "***"):
            template = loader.get_template('***')
            return HttpResponse(template.render(None, request))
        return render(request, "***", self.params)

```

views.py の中で先程作成した widget を self.params として HTML に渡します。（コードの一部です。全コードは[ github ](https://github.com/taiseiyo/heroku/blob/master/myproj/diary/views.py)にあります）

後は、HTML で Form を作成するだけです！！（HTML,CSS の知識なさすぎて辛いです。。。）

※追記（2020/8/10）
JavaScript のコードも追加で [github](https://github.com/taiseiyo/heroku/tree/master/myproj/diary/static) に挙げています。

# 実際に動かしてみた

プログラムがついに完成しました！
さあ、プログラムがちゃんと動くか試してみます（デバッグしながらコード書いてるので、動くのは当たり前なんですけどね）

下記のコマンドを打つと
$ python manage.py runserver

Starting development server at http://127.0.0.1:8000/
とでてきました。早速 Firefox で動かしてみます。すると最初の写真のように動作してます！！


# まとめ
python には豊富なライブラリがありますがその中でも Django は簡単に Web 開発などが可能なので皆さんも遊んでみてはいかがでしょうか？？
コメント機能実装エラー

未解決ですがアウトプット
投稿に対するコメント機能実装中
下記エラー発生

<img width="1425" alt="147c5a62a1cd9a9552e448e34dffd606.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653208/42905c2f-7879-d0dd-86d9-fa794c149cd9.png">

```top_page>show.html.haml
.main
  = form_for @comment, url:{controller: 'responses', action: 'create'}do |f|
    .main__consultation
      .main__consultation__title
        お悩み一覧
      .main__consultation__text
        = @toppage.contents
    .main__comment
      = f.text_area :comment, class: "main__comment__form"
      .main__comment__sent
        = f.submit "投稿する"
      .main__comment__text
        <コメント一覧>
      -if @comments　
        -@comments.each do |response|
          .main__comment__main
            .main__comment__main__name
              = response.user.name
            .main__comment__main__form
              = response.comment
```

```response_controller.rb
class ResponsesController < ApplicationController
  def create
    @comment = Response.create(response_params)
    redirect_to "/top_page/#{comment.top_page.id}"
  end

  private
  def response_params
    params.require(:respons).permit(:comment).merge(user_id: current_user.id, top_page_id: params[:top_page_id])
  end
end
```
```top_page_controller.rb
class TopPageController < ApplicationController
  def index
    @toppages = TopPage.all
  end

  def new
    @toppage = TopPage.new
  end

  def create
    TopPage.create(top_page_params)
    redirect_to top_page_index_path
  end

  def show
    @toppage = TopPage.find(params[:id])
    @comment = Response.new
    @comments = @toppage.responses.includes(:user)
  end

  private
  def top_page_params
    params.require(:top_page).permit(:contents,:name).merge(user_id: current_user.id)
  end
end
```


urlの飛ばし先が間違っているきがするのですが、top_pageにとばしても特に治らず
というか普通にこんがらがってきた。。。

ルーティングのネストから見直してこよう
nvmをインストールする手順

## 概要
最新の[githubレポジトリのREAD.me](https://github.com/nvm-sh/nvm#installing-and-updating)を手順を参照してその通り実行すればよい。

## インストール

### インストーラーを実行

インストーラーをダウンロードして実行する。


```
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
```

実行時にbash設定ファイルにnvm用の環境変数の設定処理などが自動で書き込まれるので、それが反映されるよう一度ターミナルを開き直す。
開き直したターミナルで`nvm`と打って、コマンドの説明文とかが表示されればok。

## nodeをインストール

### 自動で最新版を入れる

何も考えず最新版をインストールする場合は以下を実行。

```
nvm install node 
```

### バージョンを指定して入れる

```
nvm install 12.16.1
```

### インストール可能なバージョン一覧を確認する

```
nvm ls-remote
```

### 現在インストール済のnodeのバージョンを確認

```
nvm ls
```


### 現在使用中のnodeのバージョンを確認

```
nvm version node
```
【Python】データサイエンス100本ノック（構造化データ加工編） 011 解説

- データサイエンス100本ノックをやりきる会を作りました🎉
- こちらの[Slack招待URL](https://join.slack.com/t/data-science-100nocks/shared_invite/zt-gfncg9vm-8W8b3UrDg8R~TKaqUkQpgw)からご参加ください！！
- ぜひ一緒に励まし合いながら、データサイエンス100本ノックをやり切りたいと思っています！

##Youtube
[動画解説](https://youtu.be/q9av-XzHhNo)もしています。

##問題
P-011: 顧客データフレーム（df_customer）から顧客ID（customer_id）の末尾が1のものだけ全項目抽出し、10件だけ表示せよ。

##解答
```:コード
df_customer.query("customer_id.str.endswith('1')", engine='python').head(10)
```

##出力
|  | customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
|--:|:--|:--|--:|:--|:--|--:|:--|:--|:--|--:|:--|
| 1 | CS037613000071 | 六角 雅彦 | 9 | 不明 | 1952-04-01 | 66 | 136-0076 | 東京都江東区南砂********** | S13037 | 20150414 | 0-00000000-0 |
| 3 | CS028811000001 | 堀井 かおり | 1 | 女性 | 1933-03-27 | 86 | 245-0016 | 神奈川県横浜市泉区和泉町********** | S14028 | 20160115 | 0-00000000-0 |
| 14 | CS040412000191 | 川井 郁恵 | 1 | 女性 | 1977-01-05 | 42 | 226-0021 | 神奈川県横浜市緑区北八朔町********** | S14040 | 20151101 | 1-20091025-4 |
| 31 | CS028314000011 | 小菅 あおい | 1 | 女性 | 1983-11-26 | 35 | 246-0038 | 神奈川県横浜市瀬谷区宮沢********** | S14028 | 20151123 | 1-20080426-5 |
| 56 | CS039212000051 | 藤島 恵梨香 | 1 | 女性 | 1997-02-03 | 22 | 166-0001 | 東京都杉並区阿佐谷北********** | S13039 | 20171121 | 1-20100215-4 |
| 59 | CS015412000111 | 松居 奈月 | 1 | 女性 | 1972-10-04 | 46 | 136-0071 | 東京都江東区亀戸********** | S13015 | 20150629 | 0-00000000-0 |
| 63 | CS004702000041 | 野島 洋 | 0 | 男性 | 1943-08-24 | 75 | 176-0022 | 東京都練馬区向山********** | S13004 | 20170218 | 0-00000000-0 |
| 74 | CS041515000001 | 栗田 千夏 | 1 | 女性 | 1967-01-02 | 52 | 206-0001 | 東京都多摩市和田********** | S13041 | 20160422 | E-20100803-F |
| 85 | CS029313000221 | 北条 ひかり | 1 | 女性 | 1987-06-19 | 31 | 279-0011 | 千葉県浦安市美浜********** | S12029 | 20180810 | 0-00000000-0 |
| 102 | CS034312000071 | 望月 奈央 | 1 | 女性 | 1980-09-20 | 38 | 213-0026 | 神奈川県川崎市高津区久末********** | S14034 | 20160106 | 0-00000000-0 |

##解説
・PandasのDataFrame/Seriesにて、条件に当てはまる先頭データを確認する方法です。
・条件に当てはまる情報を確認したい時に使用します。
・**'.endswith(<文字列>)'は、指定した文字列で終わるどうかを判定する関数**であり、終わる場合はTrue、終わらない場合はFalseを返します。
・ただし、**'.query('---.str.endswith(<文字列>))'は、指定した文字列で終わることを条件として指定します**。
・今回の場合、custmer_id を文字列に置換するために'custmer_id.str'とし、'.endswith('1')'を続けることで、「1」で終わる custmer_id を指定しています。
・'engine = 'python''について、query の引数である engine には'python'か、'numexpr'かを選択することができますが、strを用いる場合は、'python'を指定してあげないとエラーが発生してしまいます。
福岡市のコールセンター相談件数の予測を試してみる

4連休です。テレビでは朝からコロナ関連の情報が多く放送されています。
福岡市のコールセンター相談件数の予測を試してみたいと考えました
福岡市がオープンデータとしてデータを提供しているので、また猛威をふるっているコロナ関連の分析をDataRobotさんのAutoMLを使ってしてみたいと思います。

##福岡市 オープンデータカタログサイトでデータセット取得

福岡市![福岡市相談件数.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/2aaa3f27-96f6-442e-a337-d96ed2a030f7.jpeg)
![福岡市相談件数2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/432c5524-4222-827a-e175-7a9448b09ebe.jpeg)
 オープンデータカタログサイトでデータセット取得


##Data Robotで予測する
![データの読み込み.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/8e5df9a3-138f-1961-0507-4c69c55ac853.jpeg)

データセット
![福岡市データセット.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/d12eedc0-ede2-b604-13d9-4abc57846274.jpeg)


モデルの選定


![福岡市相談件数3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/6886cafb-a00e-966c-6b33-72ab10a4f22b.jpeg)


時系列を扱うデータセットなので、時間認識モデルを選択します。

![時系列認識モデル.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/9a693415-e364-d380-2f6b-dc12f07517cd.jpeg)

##学習の開始
![分析中.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/ae2c6670-320a-a791-2562-7662511027e7.jpeg)

評価
![推奨モデル.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/698569af-c321-28cb-f57b-015cf629dac6.jpeg)

ブループリント
![モデルブループリント.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/83b9b19b-27cd-c750-41ee-ecb36d475ac2.jpeg)

精度パラメーター
![制度パラメーター.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/1b31fa78-86fa-bb9e-4adf-1cf2cfcce65c.jpeg)

特徴量セット
![特徴量セット.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/5e0f6297-8ca8-0575-8a48-b61ea5ac661d.jpeg)

特徴量ごと予実
![特徴量ごとの予実.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/311167e2-bb56-e3e4-efe5-8ba14149a95c.jpeg)

残渣分布
![残渣分布.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/8a51152f-ca60-f1cb-afcf-1af811b78a4f.jpeg)


2モデルを戦わせてみます　精度だけでなく処理スピードの分析もします

![モデルを戦わせてみた.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55742/ae4e0c18-6bbf-de22-0af9-dde930c07bda.jpeg)


週末は可能なら実績と予測の差を分析したいと思います。
PRML 演習問題  6.11（基本）

## はじめに
本記事は, 機械学習の教科書の決定版ともいえる, **Christopher Bishop先生**による[**『Pattern Recognition and Machine Learning （パターン認識と機械学習）』**](https://www.microsoft.com/en-us/research/people/cmbishop/prml-book/), 通称**PRMLの演習問題の解答**を記したものです. これは, [**生物測定学研究室**](https://www.ut-biomet.org/)の輪読会でPRMLを取り扱っており, その勉強の一環として演習問題を解いたときのもので, **匿名の有志の学生による解答をこちらのアカウントから代わりに投稿**させていただいています.　（なお一部数式の表現などを修正してあります.）


## 問題
><b>6.11</b> $(6.25)$ の展開の中央の要素を, べき級数展開することによって, ガウスカーネル $(6.23)$ は, 無限次元の特徴ベクトルの内積で表せることを示せ.

参考・ガウスカーネルとは、

```math
\begin {align*}
k(\mathbf{x},\mathbf{x'}) = \exp(\ \|\mathbf{x} - \mathbf{x'}\|^2 / 2\sigma^2).
\tag{6.23}
\end {align*}
```
である。
次に、

```math
\begin {align*}
k(\mathbf{x},\mathbf{x'}) = \exp(-\mathbf{x}^\rm{T}\mathbf{x}/2\sigma^2)\exp(\ {\mathbf{x}^\rm{T}\mathbf{x'}} / \sigma^2)\exp(-(\mathbf{x'})^\rm{T}\mathbf{x'}/2\sigma^2).
\tag{6.25}
\end {align*}
```
である。

## 解法
中央の部分が無限次元であることを示して、残りの左右を組み合わせてもカーネルとして成り立つということを示す。
まず、指数関数の部分がマクローリン展開できることを示す。

```math
\exp(x)  = \sum_{n=0}^{\infty} \frac{1}{n!}x^n
```
また、これに $\frac{\mathbf{x}^\rm{T}\mathbf{x'}}{\sigma^2}$ を代入することで、中央の形にして

```math
\exp \left(\frac{\mathbf{x}^\rm{T}\mathbf{x'}}{\sigma^2} \right )  = \sum_{n=0}^{\infty} \frac{1}{n!}\left(\frac{\mathbf{x}^\rm{T}\mathbf{x'}}{\sigma^2}\right )^n
```
となる。
このとき、$(6.16)$ （カーネルの指数もカーネル）と日本語版下巻2ページの $k(\mathbf{x},\mathbf{x'})=\mathbf{x^T}\mathbf{x}$ というカーネルが有用であることを組み合わせると、中央部がカーネルであることが分かる。
更に、$(6.14)$ より、$(6.25)$ の「（$\mathbf{x}$ の関数）（カーネル）（$\mathbf{x'}$ の関数）」がカーネルであることが分かる。
よって、$(6.23)=(6.25)$ の式がカーネルであることを示すことができた。
■
android firebase Auth　email&passwordでログインする処理memo

#onCreateメソッド内でFirebaseAuthのインスタンスを取得しておきます

```kotlin:LoginActivity.kt
class LoginActivity : AppCompatActivity() {

    companion object {
        private const val RC_SIGN_IN = 120
    }

    private lateinit var loginViewModel: LoginViewModel
    private lateinit var mAuth: FirebaseAuth
    private lateinit var googleSignInClient: GoogleSignInClient

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        //onCreateメソッド内でFirebaseAuthのインスタンスを取得しておきます
        mAuth = FirebaseAuth.getInstance()
```


#ログイン処理
TaskAuthResult 操作の結果に
public Task < AuthResult > signInWithEmailAndPassword （String email、String password）
指定されたメールアドレスとパスワードでユーザーのサインイン

```kotlin:LoginActivity.kt
private fun loginEmailUser() {
        val email: String = username.text.toString()
        val password: String = password.text.toString()

        //入力欄が空白だったらエラーメッセージ
        if (email == "") {
            val ts = Toast.makeText(this@LoginActivity, "please write email.", Toast.LENGTH_SHORT)
            ts.setGravity(Gravity.CENTER, 0, 0)
            ts.show()
        } else if (password == "") {
            val ts = Toast.makeText(this@LoginActivity, "please write password.", Toast.LENGTH_SHORT)
            ts.setGravity(Gravity.CENTER, 0, 0)
            ts.show()
        } else {
            //ログイン処理
            mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener { task ->
                    if (task.isSuccessful) {
                        val intent = Intent(this@LoginActivity, DashboardActivity::class.java)
                        startActivity(intent)
                        finish()
                    } else {
                        val ts = Toast.makeText(
                            this@LoginActivity,
                            "Error Message: " + task.exception!!.message.toString(),
                            Toast.LENGTH_SHORT
                        )
                        ts.setGravity(Gravity.CENTER, 0, 0)
                        ts.show()
                    }
                }
        }
    }
```
Zoom学会用タイムキーパーの設定

以下の記事を参考にWindows 10上でZoom用タイムキーパーを設定した．
[オンライン研究会用タイムキープを自動化してみた](https://qiita.com/aDAVISk/items/19fe17a63bff3a7127ea)

ただし，自分の環境では「効果音ポンだしくん」がうまく動かなかったので，代わりに以下のソフトを導入した．
[研究会用タイマー【TimerKIT】](https://www.phys.chuo-u.ac.jp/labs/kittaka/contents/others/timer/index.html)

あとの設定は，参考記事通り．ベル音が大きく鳴りがちなので，Audio Routerでレベル設定をする．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629005/f053036c-fcae-60c4-9686-e84fcee10dbe.png" width="250">

タイムキーパー用アカウントを用意してノートPCで立ち上げておき，別PCで立ち上げた本アカウントの背後にノートPCの画面を写しつつベル音を鳴らしてみる予定．
IPv6アドレスの表記として，適切なものはどれか。

応用情報技術者令和元年秋期 午前問34


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/bf0c87a9-3aee-6d56-9815-66bacd3e262d.png)


IPv6表記ルール：
１、長さが128bit、16bitごと':'で区切り。例：1234:5678:90AB:CDEF:A234:5678:90AB:CDEF
　　※IPv4は32bit、8bitごと'.'で区切り。例：127.0.0.1

２、先行する0を省略できる。0の16bitセクションが連続する場合、'::'で表記される。ただ、１箇所だけ使用できる。
　　例：2001:0db8:0000:0000:0000:ff00:0042:8329 は 2001:db8::ff00:42:8329
　　※なぜ１箇所だけできるとは、複数箇所とすると、何箇所0000があるのは分からなくなるため。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/73b2b836-5b17-b43f-ec89-65fc107c29b9.png)


補足：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/9833e8d4-7d65-171c-1b8d-0e644102afbf.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/15bccef0-d8ad-558c-baef-114cf96a5c64.png)



From https://www.ap-siken.com/kakomon/01_aki/q34.html
https://www.fe-siken.com/kakomon/26_haru/q32.html