OmniAICreator/Qiita-1.07M huggingface dataset:
ActiveRecord::StatementInvalid: PG::DuplicateTable: ERROR:  relation "tweeets" already exists

マイクグレーションを実行しても以下のエラーが出る

```
ActiveRecord::StatementInvalid: PG::DuplicateTable: ERROR: relation "tweeets" already exists
```
Rails のアプリをコントローラーから作ると、高い確率でこのエラーにあたってしまう。
テーブル作成しているやん。と言ってくれていたのですね。
以下の記事を参考にさせていただきました。

https://qiita.com/motty93/items/455515ede653371a5887

```
$ rake db:migrate:reset
```
リセットして

```
$ rake db:migrate
```
もう一度マイグレーションを行ったところ直りました。ありがとうございます。
必ずここでエラーが出て、ファイル作成　→　もう一度最初からという非効率なことを行っていたので
絶対に忘れたくなくて記事を書きました。もし、私と同じエラーに苦しんでいる人がいたら試してみてください。
TECH CAMP 16日目(8/24)

Ajax
メモ投稿機能の実装@サーバー・フロント両側
APIについて

Heroku
アプリ公開
Basic認証

アプリの修正実践

API実装が有効的なのは間違いない✨
アプリ修正の前半、一発でLGTMもらえたのは凄い達成感☺️
Arch Linux で NFSサーバーを構築する

NFS (Network File System) は UNIX 系のシステムで使用されることが多い分散ファイルシステム (ファイルサーバー) です。個人的には Samba の方が扱いやすいように感じていますが、パフォーマンスは NFS の方が若干勝るユースケースが多いようです。

なお、Samba と比べると若干面倒ですが Windows から NFS サーバーにアクセスすることも可能です。ただし、スマホやタブレットからのアクセスはほぼできないと考えてください。そのようなユースケースでは Samba の使用を推奨します。[Arch Linux で Samba サーバーを構築する](https://qiita.com/pttkny/items/90f4c335cb6e94ef46e2) を参照してください。

# サーバー

## インストール

[nfs-utils](https://www.archlinux.jp/packages/?name=nfs-utils) パッケージをインストールします。

```console
# pacman -Syu nfs-utils
```

## NFS の設定

ディレクトリを公開するための設定を行います。ここでは 192.168.0.0/24 の任意のホストに対して `data/share/public` を公開します。

```config:/etc/exports
/data/share           192.168.0.0/24(ro,sync,no_subtree_check,fsid=0)
/data/share/public    192.168.0.0/24(rw,sync,no_subtree_check,nohide)
```

ここではサーバーとクライアントの uid, gid が共通であることを前提にしています。共通にできない場合は all_squash オプションを追加すれば匿名ユーザとしてアクセスできます。

## 共有ディレクトリの作成

対象のディレクトリを作成し、設定を反映します。

```console
# mkdir -p /data/share/public
# exportfs -arv
```

## ファイアウォールの設定

TCP の 111,2049,20048 番ポートを開放してください。以下に iptables の設定例を示します。

```config:/etc/iptables/iptables.rules
-A INPUT -m state --state NEW -m tcp -p tcp --syn -m multiport --dports 111,2049,20048 -j ACCEPT
```

## NFS サーバーの起動

NFS サーバーを起動します。

```console
# systemctl start nfs-server
```

また、システムを再起動した後にも自動的に NFS が起動するように設定しておきます。

```console
# systemctl enable nfs-server
```

# クライアント

## Mac

以下のうち、いずれか一方の方法を選択してください。

### Shell

以下のようにして NFS サーバ上の共有ディレクトリをマウントできます。

```console
# mkdir /Volumes/Share
# mount -t nfs -o nolockd,resvport,hard,bg,intr,rw,tcp,nfc 192.168.0.16:/data/share /Volumes/Share
```

ただし、これではシステムを再起動するとアンマウントされてしまいます。自動的にマウントされるようにするためには `/etc/auto_master` の末尾に `/- /etc/autofs_nfs` を追加し、以下の内容で `/etc/autofs_nfs` を作成します。

```config:/etc/auto_master
+auto_master		# Use directory service
/home			auto_home	-nobrowse,hidefromfinder
/Network/Servers	-fstab
/-			-static
/- /etc/autofs_nfs
```

```config:/etc/autofs_nfs
/System/Volumes/Data/mnt/share -fstype=nfs,nolockd,resvport,hard,bg,intr,rw,tcp,nfc nfs://192.168.0.16/data/share
```

すぐに反映させるには以下のコマンドを実行してください。

```console
# automount -cv
```

### Finder

「移動」「サーバへ接続 (Command + K) 」をクリックするとダイアログが表示されるので、`nfs://192.168.0.16/data/share` のようなアドレスを入力してください。

ただし、これではシステムを再起動するとアンマウントされてしまいます。自動的にマウントされるようにするためには「システム環境設定」「ユーザとグループ」「ログイン項目」「+」から上記のマウントポイントを選択してください。
TECH CAMP 11日目~15日目(8/17~8/21)分

8月17日(月)
ブランチ作成
テーブル作り
関連コントローラー作成
中間テーブル作り
referencesとforeign_keyは相棒
selectとoptionも相棒
モデル名.whereについて
Sequel Proの罠
バリデーション
ルートパス変更

Sequelで引っかかった😂
全体が掴めたらもっと楽しくなりそう☺️


8月18日(火)
以下の機能を実装
メッセージ投稿
画像投稿
単体テストコード
結合テストコード

アプリの実装、一通り完了✨
最後の方は駆け足だったから、要復習だな😂


8月19日(水)
デバイス別のレイアウト実装
viewport・メディアクエリ

Rubyを更に深堀り
case文・while文
ループとbreak
クラス継承・オーバーライド
例外処理
オブジェクト指向

正規表現

今日も知識量が半端ない😂
でも先週より力がついた実感は確かにあった❗️✨


8月20日(木)
本日の内容
Rails深堀り
View Helperとモジュール
Controller レンダリングとJSON、サービスクラス
Model Callbacks・validations、フォームオブジェクト
SQLについて DDL、DML、DCL

JavaScript
基礎文法・関数・オブジェクト

JSが結構面白い☺️
Rubyとはまた違った魅力がある✨


8月21日(金)
JavaScript
script要素、イベント発火、インラインスタイル
Attributeメソッド各種、thisメソッド、innerHTML

Ajax
非同期通信、boolean型、orderメソッド
エンドポイント、パラメーター3種、XML、
イベントハンドラー、XMLHttpRequest

Ajaxの実装がいよいよ実践的✨
Tensorflow Lite のWindows用ビルド

# はじめに

ここ最近多くの時間を費やし, 心が壊れたため, 愚痴として書き出す.
 そのため, "だ, である"調です.

目的は, C/C++, Windowsで学習済みモデルtfliteをロードして推論を実行すること.
公式では, WindowsでもビルドしてC++ APIが使えるように読めるが, そんなことはないぶっ壊れ. Debugビルドなら動くが, まともに使えるわけもない. 
具体的には, inputとoutputのテンソルを指すインデックス配列がぶっ壊れている.

C APIなら動きそう.

ビルドが通った組み合わせは次.

| Tensorflowバージョン | Visual Studio バージョン|
| :--- | :--- |
| 2.3.x | 2019 |
| 2.2.x | 2017以上 | 

# ビルド手順

msys2とpython, bazel, patch, unzip, gitのインストールまでは公式に従う.
次にmsys2でビルド作業を行う.

bazelにVCの場所を教える. コマンドラインだけのBuilt Toolsでもビルドはできる.

```
$ export BAZEL_VC="/x/XXX/Microsoft Visual Studio/2019/Professional/VC"
```

ビルド, テストも行う.

```
$ python configure.py
$ bazel build -c opt //tensorflow/lite/c:tensorflowlite_c
$ bazel build -c opt //tensorflow/lite/c:c_api_test
$ bazel-bin/tensorflow/lite/c/c_api_test
```

必要なバイナリ.

```
set BAZEL_BIN=bazel-bin\tensorflow\lite\c
%BAZEL_BIN%\tensorflowlite_c.dll
%BAZEL_BIN%\tensorflowlite_c.dll.if.lib
```

必要なヘッダ.

```
tensorflow\lite\builtin_ops.h
tensorflow\lite\c\c_api.h
tensorflow\lite\c\c_api_experimental.h
tensorflow\lite\c\common.h
```

# まとめ
TECH CAMP 6日目~10日目(8/10~8/14)分

8月10日(月)
今日から日々アウトプットを発信していけるように頑張ります✨
本日の内容：
Ruby on Railsを使ってのアプリ作成に挑戦
アプリの立ち上げ
ライブラリ(Gem)の導入
ツイート機能に関して以下の実装
表示・保存・削除・詳細表示

少しずつ本格的になるのが刺激的でした☺️

8月11日(火)
Ruby on Railsを使ってのアプリ作成 続き
ツイート機能に関して以下の実装
ユーザー登録・マイページ・
投稿者のみへの編集・削除許可・表示順の並び替え

ユーザー登録とマイページが本当にヤマでした...
大まかな所もだけど、細かい箇所にも注意を配らんとな😰

8月12日(水)
Ruby on Rails アプリ作り続き
部分テンプレートの実装・コメント・検索・エラー解消・
開発の手順・設計
GitとGitHubの基礎知識
テストコードについての基礎

アプリ作りは一応終わったけど要復習ですな😂
GitHubは触ってて面白かった☺️

8月13日(木)
テストコードについて
RSpecの導入
テストコードの書き方
単体テストコードを実際に記述
結合テストコードの基礎
結合テストコードを実際に記述

いよいよ記述が複雑になってきましたよ😱
でも実行してプログラム通りにテストコードが動いた時は本当に嬉しかった🤗

8月14日(金)
結合コード 実際に記述 続き
ここまでのコードをまとめる
サポートモジュールで共通部分を省略
チャットアプリの作成に着手
アプリの要件定義
中間テーブルの内容
HTML記述、Rubyで再び

本格的になってきて知識量がすごい😂
土日も復習せんと😰
Shibboleth IdPとSimpleSAMLphpのSPを接続する

# 概要
Shibboleth IdPとSimpleSAMLphpのSPを連携させるには、Shibboleth IdPで一部専用の設定を行う必要がある。その部分を含めての設定手順。今回の手順ではDSは利用しない。

# 設定方法
## 構築環境
* IdP: Shibbpleth IdP 3.4.6、Tomcat 7、OpenJDK 8
* SP: SimpleSAMLphp 1.18.7、PHP 5.6 
* 共通: CentOS 7.8、Apache httpd 2.4.6

IdPのホスト名: idp.mydomain
SPのホスト名: sp.mydomain

## SimpleSAMLphpのインストール
Apache httpdの設定とサーバ証明書の導入は完了しているものとする。

```
# wget https://github.com/simplesamlphp/simplesamlphp/releases/download/v1.18.7/simplesamlphp-1.18.7.tar.gz
# tar xzvf simplesamlphp-1.18.7.tar.gz
# chown -R apache:apache simplesamlphp-1.18.7
# mv simplesamlphp-1.18.7 /var/www/
# vi /etc/httpd/conf.d/ssp.conf
Alias /simplesaml /var/www/simplesamlphp-1.18.7/www

# systemctl reload httpd
```
_※パスを /simplesaml から変更する場合は、/var/www/simplesamlphp-1.18.7/config/config.php の baseurlpath の値も変更する。_


``/var/www/simplesamlphp-1.18.7/config/config.php`` の以下の値を適当に変更。
・secretsalt
・auth.adminpassword

## Shibboleth IdPのメタデータをSimpleSAMLphpに登録
Shibboleth IdPで ``/opt/shibboleth-idp/metadata/idp-metadata.xml`` の内容をコピーする。学認IdPの場合は、このメタデータを利用せず、IdPのXMLを「学認申請システム」から拾ってくる。

ウェブブラウザで ``https://sp.mydomain/simplesaml`` にアクセスし、[連携]タブの「XMLをSimpleSAMLphpメタデータに変換」をクリック。「メタデータパーサ」でIdPのXMLをパースし、表示される **saml20-idp-remote** の値をコピーし、``/var/www/simplesamlphp-1.18.7/metadata/saml20-idp-remote.php`` にコピーした値を追記する。 
[連携]タブを再度開き、「SAML 2.0 IdPメタデータ(Trusted)」に追記したIdPが表示されていることを確認。

## Shibboleth IdPにSimpleSAMLphp SP用メタデータ追加
SimpleSAMLphpで[連携]タブから「メタデータを表示」をクリック、「SAML 2.0 用のメタデータXMLフォーマット:」の値をコピーする。
コピーしたXMLをShibboleth IdPの ``/opt/shibboleth-idp/metadata/`` のなかに任意の名前で保存する。ここでは **simplesaml.xml** とする。

``/opt/shibboleth-idp/conf/metadata-providers.xml`` に以下を追記。**id**は適当に変更しても良い。

```diff
+       <MetadataProvider id="SimpleSAMLphpSP"
+           xsi:type="FilesystemMetadataProvider"
+           metadataFile="%{idp.home}/metadata/simplesaml.xml"/>
    </MetadataProvider>
```

``/opt/shibboleth-idp/conf/attribute-filter.xml`` に以下を追記。Requesterとして記載するEntity IDはSimpleSAMLphpの[連携]タブで確認しておく。必要に応じて**AttributeRule**を追加。

```xml
<AttributeFilterPolicy id="PolicyforSimpleSAMLphp">
    <PolicyRequirementRule xsi:type="Requester"
        value="https://sp.mydomain/simplesaml/module.php/saml/sp/metadata.php/default-sp" />
    <AttributeRule attributeID="eduPersonPrincipalName" permitAny="true" />
    <AttributeRule attributeID="eduPersonTargetedID" permitAny="true" />
</AttributeFilterPolicy>
```

``/opt/shibboleth-idp/conf/relying-party.xml`` を編集して以下を追記。この**encryptAssertions**と**encryptNameIDs**がfalseになっていないと、SimpleSAMLphpとの連携ができない。

```diff
    <util:list id="shibboleth.RelyingPartyOverrides">
+       <bean parent="RelyingPartyByName" 
+           c:relyingPartyIds="#{{'https://sp.mydomain/simplesaml/module.php/saml/sp/metadata.php/default-sp'}}">
+           <property name="profileConfigurations">
+               <list>
+                   <bean parent="SAML2.SSO" p:encryptAssertions="false" p:encryptNameIDs="false" />
+               </list>
+           </property>
+       </bean>
    </util:list>
```

設定反映のため、tomcatを再起動。

```
# systemctl restart tomcat
```

simpleSAMLphp設定ページを開き、[認証]タブから「設定されている認証元をテスト」をクリック。「default-sp」をクリック。IdPの認証画面に遷移し、認証が成功すれば設定完了。
DNSレコードを色んなパターンで削除してみた

# はじめに
DNSレコードを消す機会があって、色々なパターンで消す方法があったので
備忘録として残しておこうかと思い、記事にしてみました。
※レコード作業はコマンドプロンプトを使ってね:raised_hand:

# いろんなパターンでやってみた
#### 正引きレコードの消し方:point_up:
①DNSCMD /RecordDelete [ドメイン名] [ホスト名] A /f
　結果：最終確認されずに、そのままレコードが削除される。正引きだけがレコードから消える。

②DNSCMD /RecordDelete [ドメイン名] [ホスト名] A [ipアドレス] /f
　結果：最終確認されずに、そのままレコードが削除される。正引きと逆引きがレコードから消える。

③DNSCMD /RecordDelete [ドメイン名] [ホスト名] A [ipアドレス]
　結果：「本当に消しますか？」とコマンドプロンプトに表示される。正引きと逆引きがレコードから消える。

④DNSCMD /RecordDelete [ドメイン名] [ホスト名] A
　結果：「本当に消しますか？」とコマンドプロンプトに表示される。正引きだけがレコードから消える。

#### 逆引きレコードの消し方:point_up:
①DNSCMD /RecordDelete [IPアドレス(第3オクテットから逆に遡る)] in-addr.arpa [第4オクテットIPアドレス] PTR /f
　結果：最終確認されずに、そのままレコードが削除される。逆引きだけがレコードから消える。

②DNSCMD /RecordDelete [IPアドレス(第3オクテットから逆に遡る)] in-addr.arpa [第4オクテットIPアドレス] PTR [ホスト名とドメイン名]  /f
　結果：最終確認されずに、そのままレコードが削除される。逆引きだけがレコードから消える。

③DNSCMD /RecordDelete [IPアドレス(第3オクテットから逆に遡る)] in-addr.arpa [第4オクテットIPアドレス] PTR [ホスト名とドメイン名] 
　結果：「本当に消しますか？」とコマンドプロンプトに表示される。逆引きだけがレコードから消える。

④DNSCMD /RecordDelete [IPアドレス(第3オクテットから逆に遡る)] in-addr.arpa [第4オクテットIPアドレス] PTR
　結果：「本当に消しますか？」とコマンドプロンプトに表示される。逆引きだけがレコードから消える。

# 実際のコマンド結果サンプル
上記の説明では、ややこしい部分もあったりするので、下記では実際のコマンドを用いて、一連の流れを抑えようと思います。今回は正引きのコマンドを使用して正引きレコードも逆引きレコードも両方同時に消えるコマンドだけサンプルとして出したいと思います。

##### サンプル(最終確認無しVer)
DNSCMD /RecordDelete test.local test001mg A 192.168.10.10 /f

test.localにあるAレコードを削除しました。
コマンドは正常に終了しました。

##### サンプル(最終確認有りVer)
DNSCMD /RecordDelete test.local test001mg A 192.168.10.10

レコードを削除しますか?（Y/N） ※Yを入力して押下

test.localにあるAレコードを削除しました。
コマンドは正常に終了しました。

# 補足
コマンドの最後に「/f」を入れれば、最終確認をせずにそのままレコードが消えて、「/f」を入れないと、きちんと「レコードを削除しますか？（Y/N）」と聞いてくれるみたいです。
又、正引きも逆引きも1つのコマンドで一気に消すには、「ホスト名」と「IPアドレス」を入れておけば消すことは可能です。逆に片方どちらかしか消したくない場合は、「ホスト名」か「IPアドレス」のどちらかしか入れなければ両方一気に消えることは無いです。

# 最後に
皆様の使用している環境にもよりますが、どのパターンでもDNSレコードの削除はできますので、ぜひ機会があれば、こちらのページを思い出してコマンドを活用してみてください！:sunny:
CustomHandで物をつかんだ時の処理の方法②（効果音を鳴らしたい）

#１．はじめに
　この記事は前記事CustomHandで物をつかんだ時の処理の方法１を読んでいることを前提としています。

　前回はSetActiveをつかってgameObjectを非表示するようにしましたね。

　今回は、もう少し処理を増やしていきましょう！！

#２．効果音を鳴らしたい！！！！！
　gameObjectを掴んで、非表示にしたときに効果音が鳴るようにしてみましょう。
　物をゲットした感が強まること間違いなしですね笑

```c#
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using UnityEngine;


public class custom : OVRGrabbable
{
    public AudioClip sound001;

 //掴まれた時に実行
    public override void GrabBegin(OVRGrabber hand, Collider grabPoint)
    {

        base.GrabBegin(hand, grabPoint);//この行は消しちゃだめ

        //ここにやりたいことを書きましょう
        AudioSource.PlayClipAtPoint(sound001, transform.position);
        gameObject.SetActive(false);
  
    }
```

前記事と比較すると、public AudioClip sound001;とAudioSource.PlayClipAtPoint(sound001, transform.position);という二か所が追加されていますね。

sound001の部分は好きに変えてもらって大丈夫です。（変えるなら二か所とも変えて下さいね）

この部分にget音なんかを入れるといい感じになると思います。

###コラム的な

知っている方は飛ばしてもらって大丈夫ですが、簡単にpublicの説明を、、、↓

public AudioClip 〇〇；と書くことでunityのInspector上で〇〇の部分を好きにいじることができるようになります。

publicで書くと便利ですよねー　（反対にprivate AudioClip 〇〇と書くと、Inspecter上でいじれなくなります。）

#最後に
　今回は少し応用というかほかの処理を入れてみました。効果音を鳴らすのはよくあることだと思うので役に立てば幸いです。
　気力があればこのスクリプトにもうすこしプラスアルファしてみようと思います！！
CustomHandで物をつかんだ時の処理の方法①(Oculus quset)

#１．環境
  Unity 2019.2.21
  Windows10

#２．やりたいこと
　CustomHandで物をつかんだ時に何か処理をしたい。

#３．準備
　Oculus Integrationをインポートしてください。

#４．スクリプト内容１
```c#

public class custom : OVRGrabbable
{
 //掴まれた時に実行
public override void GraBegin(OVRGrabber hand, Collider grabPoint)
 {
 base.GraBegin(hand,grabPoint); //この行は消しちゃだめ

 //ここにやりたいことを書きましょう
gameObject.SetActive(false);
 }
}
```
##スクリプト内容２
　public class の　custom　の部分は自分の好きなように名前を付けて下さいね！
　そのさいUnity側のスクリプト名も変更するようにして下さいね。（私は最初これを知りませんでした。エラー吐くので気を付けて下さい笑）

　このスクリプトをくっつけたgameObjectを掴んだ時、そのgameObjectを非表示にするようになっています。
　やりたいことによって変わってくるとは思いますが、gameObjectを非表示にしたいときはこのスクリプトをこのままお使いください！

###必要な設定
　掴まれるもの（例えばcube）に、RigidbodyとColliderのコンポーネントをアタッチして下さい。そうしないと動かないです。

#最後に
今回qiitaの初投稿です！！！　文章がおかしかったり読みづらかったりしたらすみません。
次はこのスクリプトにプラスアルファしてみたいと思います！（音を鳴らす、他のオブジェクトを表示させる）
pandasで行に特定の文字がいくつあるかをカウントして項目追加する方法

他の記事を探してもなかなか行方向で特定文字列を集計するやり方を書いてある記事がなかったので、
試行錯誤した内容を記載します。


# データの準備

```python:データの準備

import pandas as pd

list = [['a', 'c', 'a', 'a'],
        ['b', 'a', 'b', 'b'],
        ['b', 'c', 'a', 'a'],
        ['c', 'a', 'b', 'b']]

df = pd.DataFrame(list, columns = ['first', 'second', 'third', 'forth'])
df
```

![2020-08-25_21h17_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428239/c6da82e2-832f-4870-61f5-b5b17825aaea.png)

今回はこのデータのを行向きの文字列`a`と`b`をカウントして`count`という列に集計結果を追記していきます。



# 転置させる


```python:データの転置
# 転置する
df_T = df.T
df_T
```

![2020-08-25_21h11_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428239/cdd97b27-15e9-8170-b272-7afa76c6a414.png)


# 置換してカウントの準備

replaceはオブジェクトで複数文字を置換できるので、
カウントしたい文字列をTrueへ変換する。

```python:カウントしたい文字の置換
# replaceでカウントしたい文字をTrueに変更
replacer = {'a': True, 'b': True}
df_T = df_T.replace(replacer)
df_T
```

![2020-08-25_21h14_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428239/6f0133df-9ff2-9a13-ad5a-d331426fe2ca.png)


# カウントさせる

```python:カウントしたい文字の置換
(df_T[df_T.columns.tolist()] == True).sum()
```

![2020-08-25_21h15_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428239/2c9d0e9d-ecd2-c59a-d6bd-707790320393.png)


# カウントさせた内容を元のデータの新しい項目に追加させる

上記の内容を元のデータフレームの新しい項目に追加させる

```python:カウントさせたのも元のデータの項目に追加させる
df['count'] = (df_T[df_T.columns.tolist()] == True).sum()
df
```


![2020-08-25_21h08_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428239/1a833cba-f25a-f27c-71a2-9a7dad725fec.png)


# 全体のコード


```python:全コード
import pandas as pd

list = [['a', 'c', 'a', 'a'],
        ['b', 'a', 'c', 'b'],
        ['b', 'c', 'a', 'c'],
        ['c', 'a', 'b', 'b']]

df = pd.DataFrame(list, columns = ['first', 'second', 'third', 'forth'])

df_T = df.T
replacer = {'a': True, 'b': True}
df_T = df_T.replace(replacer)

df['count'] = (df_T[df_T.columns.tolist()] == True).sum()
```


もっと良い方法があれば追記していきます。
【React】入門

こちらの記事は以下の書籍を参考にアウトプットとして執筆しました。

[React入門 React・Reduxの導入からサーバサイドレンダリングによるUXの向上まで](https://www.amazon.co.jp/dp/B078XDLL2J/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

私的備忘録です。

#Webフロントエンド界隈
流行り廃りが早いと言われるが、ライブラリ、フレームワークに限るとトレンドに大きな変化はない、とこの書籍では述べています

#Reactとは
Facebook社のjavascriptライブラリでWebUI作成に特化している。

|用語|意味|
|---|---|
|コンポーネント|見た目と機能をひとまとめにしたもの|
##特徴
###Virtual DOM
HTMLやSVGの各要素へアクするためのAPIとも言えるもの。
ブラウザのDOMとは別にReact内で仮想のDOMを管理しているイメージ。
####レンダリング
コードをブラウザへ描画するまでの処理の総称
ブラウザのパフォーマンス面向上にはDOM操作を減らすといい。

Reactはページ変化の際にまずはVirtual DOMをいじる。
これはブラウザのレンダリングに影響しないため、影響はない。

###JSX
Virtual DOMの生成の効率化が図れるjavascriptの拡張言語

#Flux
##Fluxの構成要素
###View
Reactのコンポーネントと同義
###Action
単なるオブジェクト
###Dispatcher
すべての流れを管理している。
###Store
アプリ状態とロジックを保持している。
MVCのMに似ているが別物

#Redux
##特徴
3つの原則がある

###Single source of truth
アプリ内のすべての状態を大きなオブジェクトとして管理することで、テストとデバッグがしすくなる。
###State in read-only
アプリの状態はコンポーネントから参照できるのみで直接変更はできない。
これによりデータの流れが1方向になり、余計な副作用がない。
###Change are made with pure functions
状態の変更は副作用のない純粋関数(入力が同じなら同じ出力を返す)で行われる。
##構成要素
###Reducer
状態変化のための関数
以下は本を読んでいるかどうかの状態を変化させる例。
整理のために、書籍のコードを引用しています。

```javascript
function books(state = null, action) {
    switch (action.type) {
        case 'START_READING':
            return {
                ...state,
                status: 1,
            }
        case 'FINISH_READING':
            return {
                ...state,
                status: 2,
            }
        default:
            return state;
    }
}
```
引用：[React入門 React・Reduxの導入からサーバサイドレンダリングによるUXの向上まで](https://www.amazon.co.jp/dp/B078XDLL2J/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

|用語|意味|
|---|---|
|books|React本体|
|state|Reducerに変化させられるオブジェクト|
|action|どんな動作を行ったかを示すオブジェクト。typeプロパティにより何をしたかの文字列返る。|


#create-react-app
React開発を簡単に始められるツール 
##アプリケーション作成
```
$ create-react-app アプリケーション名
```
これを実行するとディレクトリが作成され、依存性ファイルもDLされる
##アプリケ−ション起動
作成したディレクトリに移動して以下コマンド

```bash 
$ npm start
```

##Hello World
src/App.jsの適当なところに修正を加えて保存
保存した時点で自動でリロードされて反映される。


#JSX
javascript拡張言語
これを使うことでjavascriptでHTMLが書ける
javascript内にHTML構造を直接かける
##JSXの文法
####スコープにReactが必要
JSXのタグはReact.createElement関数呼び出し時に変換されるため。
####式の埋め込み
`{}`を使うことで式が埋め込める。
####JSCを式として扱う
JSXタグはトランスパイル後にjavascriptオブジェクトに変換される。
津町JSXは変数へ代入、関数の引数として使うことができる。
####属性の指定
HTMLと同じように記載できる
`{}`を使えば式が使える
属性名はcamelケースでかく
最初は小文字で次の単語は大文字

```:例
onclick
↓
onClick
```
参照：[React入門 React・Reduxの導入からサーバサイドレンダリングによるUXの向上まで](https://www.amazon.co.jp/dp/B078XDLL2J/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
【Ruby／リファクタリング】JavaやC言語のようなRubyの繰り返し処理からRubyらしい繰り返し処理へ

## はじめに
JavaやC言語を勉強した後にRubyでプログラムを実装している。
その際に、最初に実装していたループ文がJavaのような実装内容になっており、
Rubyらしさがなかったため、下記のようにリファクタリングを実施した。

下記よりもRubyらしい記述方法があればご教授いただければ幸いです。

## プログラム内容
0から100までの奇数を表示するプログラム

## 修正前
Rubyの下記文法に即して繰り返し処理を記述。
JavaやC言語でfor文に慣れているため、書きやすい。

```ruby
for 変数 in オブジェクト do
  繰り返し実行する処理
end
```
```ruby:loop.rb
for n in 0..100 do
  if n % 2 != 0 then
    puts n
  end
end
```

## 修正後
Rubyを勉強していくと繰り返し処理はeachを用いることが一般的であることを認識します。
さらに整数を扱うメソッドodd? even?や
selectのようなインスタンスメソッドを知ることで下記のように
繰り返し処理を修正することができます。

```ruby
# 自身が奇数であればtrueを返す
3.odd? # 実行結果 true

# selectメソッド
# 各要素をブロックで判定し、true要素だけを返す
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
puts array.select(&:odd?) # 実行結果 1 3 5 7 9

```

```ruby:loop.rb
(0..100).select(&:odd?).each do |n|
  puts n
end
```

## 最後に
Rubyのfor文は実行時にeachメソッドが実行されているようです。
（上記のような実際は別のメソッドが実行されていることをシンタックスシュガーというらしいです。）
Rubyにおいて繰り返し処理を記述する際は個人的にはeachを推奨いたします。

今回の修正から下記を教訓にしていきたいと思いました。
***Rubyに入ってはRubyに従え***
他の言語を学ぶ時も同様の精神を持って取り組みたいと思います。
【備忘録】viコマンドまとめ

#プログラミングの勉強日記
2020年8月25日
以前に授業でviコマンドを扱ったことがあるが、覚えていなかったのでまとめる。

#基本操作
　viはLinuxの標準のエディタを起動するコマンド。基本的には`vi ファイル名`で指定しているファイルが存在していれば、そのファイルを開く。

```terminal:例
$ vi ファイル名
$ vi work/config.php
```
　このコマンドでは編集することができない(見た目だけ表示される)コマンドモードで始まる。カーソルを動かすことで閲覧ができる。

#使い方

##入力モードのキー一覧

| キー | 説明 |
|:---:|:---:|
| iキー | 現在のカーソルの位置に文字を挿入 |
| Rキー | 現在のカーソルの位置かた文字を上書き |
| Aキー | 現在のカーソル行の最後に文字を追加 |
| Oキー(大文字) | 現在のカーソル行の前の行に行を挿入 |
| oキー(小文字) | 現在のカーソルの行の次に挿入する |

##コマンドモードのキー一覧　

| xキー | キーの内容 |
|:---:|:---:|
| xキー | 1文字削除 |
| yyキー | 1行コピーしてクルップボードに保存 |
| ddキー  | 1行切り取りしてクリップボードへ格納するもしくは1行消去 |
| pキー |  クリップボードの内容をカーソル行の下の行に張り付け |
| :q!キー | ファイルを閉じる（変更があった場合は変更を破棄） |
| :wキー | ファイルを保存する（viは終了しない）|
| wqキー | ファイルを保存してviを終了 |
無観客ライブ配信で検討すべき機能について挙げてみた

# はじめに

もはや周回遅れになってしまった話題な感はありますが、コロナ禍の中で話題なのが無観客ライブ配信。
私個人としては現地で生演奏を聴く派なので、早くアーティストが普通に活動できるようになってほしいですが、このご時世はライブ配信は新しいエンタメの形かもしれません。サービスも乱立しているようですが、コンテンツ保護の観点で検討すべき機能について思いつくことを書き連ねていこうかと思います。


# DRM

DRMとはDigital Rights Managementの略で、デジタルコンテンツの著作権管理技術の総称です。
ダウンロードしたファイルを暗号化しておくだけでなく、

- 許可された期間しか再生させない
- スクリーンショットを防ぐ [^1]
- 決められた保護バージョン以上のディスプレイでしか再生させない

といった機能を持っています。
[^1]: 全てのプラットフォームで完璧なわけではないので過信は禁物

DRMの詳細については手前味噌ですが、弊社のブログ記事をご参考ください
https://media-streaming.nextscape.net/blog/229/

この後は、現在主流の3つのDRM（PlayReady, Widevine, FairPlay Streaming)だけでは対応できない機能も上げていきます。

# 同時視聴制御

有料配信チケットを販売したとして、同じアカウントやチケットで複数人が使い回しで見られてしまうと、大変なことになります。
そのようなアカウントの使い回しを防ぐには、クライアント側が再生中は定期的にサーバーと通信させることで、複数環境でアカウントが使い回されていないかチェックする必要があります。

# 海外アクセスチェック

世はグローバル！と言いつつ、契約周りは複雑なことが多いのが現状です。メジャーアーティストだと、契約の都合で海外からの視聴は制限したいという場合があり得るでしょう。

そういった場合、IPアドレスを元にアクセス制限を行うのが一般的です。
IPアドレスがどの国・地域で使われているかのデータベースは色々な会社がサービスとして提供していますので、調べてみるとよいと思います。[^2]

ただし、そういったデータベースはどこまで精度が上がっても、あくまでベストエフォートであることに注意してください。国内のユーザーが誤判定されて視聴できないといったケースは厄介です。

[^2]: IPアドレスの所有者の所属ではなく、そのIPアドレスがどの地域で使われているかを判別する必要があることに注意

# 配信ファイルへのアクセス制限

DRMをかけていて、ライセンスの設定も適切に運用されている場合はそれほど気にすることはありませんが、一切暗号化なしだったり、AES-HLSを使っている場合には配信ファイルへのアクセスには気を使う必要があります。


- 配信CDNに期限付きのトークン認証を導入する
- ライブ配信終了後は配信ファイルをそもそも残さない

など注意しないとURLを抜かれてあとから再生されてしまうなどのリスクが考えられます。

# 最後に

コンテンツ保護のリスクを考えていくと他にも考慮すべきことはキリがないですが、最終的にはコストと効果との兼ね合いになるかと思います。
スコープ-JavaScript-クロージャー

スコープについて。
では早速


```javascript
let b = 'Hello'
function sample() {
  console.log(b)
}
sample()//Hello
console.log(b)//Hello
b = 'Bye'
console.log(b)//Bye
sample()//Bye
```
ブロックの外で変数を宣言した場合はどこからでも参照できるし代入可能になる。



```javascript
function sample() {
  let a = 'Hello'
  console.log(a)//Hello
}
sample()
console.log(a)//エラー
```
ブロック内で変数を宣言した場合スコープがブロック内になるので
外からは参照できない。

```javascript
let c = 'Hello'
console.log(c)//Hello
function sample() {
  c = 'Bye'
  console.log(c)//Bye
}
console.log(c)//Hello
sample()
console.log(c)//Bye

```
外で宣言した変数は中(ブロック内)で再代入することもできる。
今回の場合、最初に__'Hello'__を代入して関数内で__'Bye'__とした場合
関数が実行されたタイミングで変数__c__には__'Bye'__が入る為
関数実行後の変数__c__は__'Bye'__となる。


```javascript
let d = 3
function sample1() {
  let e = 5
  console.log(d)//3
  function sample2() {
    let f = 10
    console.log(d)//3
    console.log(e)//5
    console.log(f)//10
  }
  console.log(f)//エラー
  sample2()
}
console.log(e)//エラー
sample1()
sample2()//エラー
```
ネストした場合内側のブロックからは外側のブロックの値を参照できるが
外側から中の値は参照できない。

#クロージャー
呼び出す度にインクリメントしたい場合など

```javascript
function increment() {
  let num = 0
  num++
  console.log(num)
}
increment()//1
increment()//1
increment()//1
```
これだと毎回初期化されてしまうため欲しい結果が得られない

```javascript
let num = 0
function increment() {
  num++
  console.log(num)
}
increment()//1
increment()//2
increment()//3
num = 0
increment()//1
```
欲しい結果は得られるが外部から再代入可能になる

```javascript

function incrementFactory() {
  let num = 0
  function increment() {
    num++
    console.log(num)
  }
  return increment
}
const increment = incrementFactory()
increment()//1
increment()//2
increment()//3
num = 0
increment()//4
console.log(num)//0
```
こうすることで外部から変数を触れなくできる
今回の場合だとブロックで__変数num__は外から参照できないので
仮に外で新たに__num__を宣言しても関数内の__num__には影響を与えない。

```javascript
function greeting(value) {
  function userName(name) {
    return value + name
  }
  return userName
}

const hello = greeting('Hello')//valueに'Hello'とはいった関数になる
const bye = greeting('Bye')//valueに'Bye'とはいった関数になる
const result1 = hello('太郎')//この引数がnameに入る
const result2 = bye('次郎')//この引数がnameに入る
console.log(result1)//Hello太郎
console.log(result2)//Bye次郎


//このように書くことでもできる
const greeting = (value) => {
  const userName = (name) => {
    return value + name
  }
  return userName
}
//同じように実行できる
```
__return__でuserName関数が返ってくるので
__const hello = greeting('Hello')__とした場合、この__hello()__を実行したときに呼ばれるのは
中にある__userName__になる
このように引数の値を変えることで
__一つの関数を異なる関数のように扱うことができる__



関数宣言は

```javascript
function func1() {
  console.log('func1')
}
const func2 = function() {
  console.log('func2')
}
const func3 = () => {
  console.log('func3')
}
func1()//func1
func2()//func2
func3()//func3

```
でも書ける。
以上です！

間違いがありましたらご指摘いただけると嬉しいです。
色々なandroidx86派生OSの紹介

# 目次
1.はじめに
2.androidx86
3.Phoenix OS
4.Prime OS
5.Bliss OS
6.OpenThos
7.まとめ
# 1.はじめに
androidx86派生の紹介記事です。
この記事は投稿日時点の情報です
androidx86とは、androidをPCでも使えるようにという考えによって作られたもの。
プロキシサーバーで規制されている中でYOUTUBEを見たいという邪念から生まれた奮闘記です。（アンドロイドアプリからなら開ける）たぶん海外のサイトとかもくまなくみたんで、見落としはないと思います。
では実際に紹介していきましょう。
# 2.androidx86
たぶんandroidをPCで使えるOSの基礎になってるOS。
バージョンはいろいろあってアンドロイド９が最大
### 利点
簡素。それだけ
### 欠点
・ウィンドウを最大化しようとしても、まわりが黒くなるだけで最大化できない（ことが多い）。
・多分一番致命的な欠点。開けないアプリが多すぎる。
理由的には、アプリはARMベース（スマホ等に使われてるCPUの種類）でx86ベースではないから互換性が低いからだそう。
# 3.Phoenix OS
中国の会社が開発してるandroidx86ベースのOS。
そのせいかホームページが英語と中国語で書いてある。ただわかりやすいのでそこで困ることはない
バージョンはアンドロイド７
### 利点
・わりかし成功率の高いインストーラーがある。
つまりいちいちブートメディアを用意しないでもOSを入れることができる。
ただメインPCに入れた際にWINDOWSの標準アプリ（フォト、映画とテレビなど）が開けなくなったのであまりおすすめはできない。
・ちゃんとウィンドウが最大化できる
### 欠点
・中国の会社なのでたまにアプリ名に中国語が混じる。設定の名前も中国語になる（筆者は何が書いてあるのかわからないので何となく好きになれない。）
ただそれ以外はすべて日本語化できる。
# 4.Prime OS
これはインドの会社が開発してるOS。
バージョンはアンドロイド7
### 利点
・エミュレーターのようにキーボードで操作することができる。（Wキーで上にスワイプ等）
・一番まともに動く。
### 欠点
・発熱がとにかくひどい。熱のせいなのかPCが落ちることがある。これで一番まとも。
# 5.Bliss OS
アンドロイド９、１０に対応している。一番（バージョンは）最先端をいってるOS。ただ元のところはandoroidx86にかなり似ている。
### 利点
・ない。バージョンが上なだけ。
### 欠点
・電源を切るボタンがない。いちいちコンソール開いてrebootって打ち込んでいた。あったのかもしれないが、それだったら死ぬほど見にくいところにある。
# 6.OpenThos
中国が開発してるOS。っホームページがすべて中国語。寄り添う気がない。GOOGLE翻訳かければ読めるようになる。
### 利点
ない。わりかしWINDOWSに似てるぐらい。
### 欠点
とにかく中国語がわかりにくい。あとOSの感じが十年前のOSみたい。
# 7.要するに何が言いたいか。
androidx86派生はやめたほうがいいPCに最適化されてないので、発熱が全体的にものすごい。あとgrub2が起動しないことが多い。軽いOSを求めているならlinuxのzorin liteとかmintとかに行ったら個人的に幸せになれると感じる。
【Heroku】【Laravel】をデプロイする

###herokuをhomebrewでインストール
```:ターミナルでhomebrew経由でherokuをインストール
brew install heroku/brew/heroku
```

```
$ heroku login 
// 実行してログインする
```

###設定もろもろ
```:ターミナル
$ cd プロジェクト名
```

Procfileを作成して編集する

```:ターミナル
$ touch Procfile
// ファイルが生成されるので下記を追加
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/9ea3e2fc-ce2d-a067-5dcc-c56b18ea8bd7.png)
プロジェクトの一番上のディレクトリに作られる。下を追記しましょう

```:Procfile
web: vendor/bin/heroku-php-apache2 public/
```

###Gitの設定?
```:ターミナル（プロジェクトディレクトリで）
$ git init
$ git add .
$git commit -m "initial release"

```

###herokuにアプリを作成したりGitを使ったり
```
$ heroku create
```
herokuの画面を確認すると新しいプロジェクトが作成されているのがわかると思います。
名前はランダムっぽい感じでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/03ff4c2e-2db2-dfc4-c7c5-59eff71e021c.png)

中を見ると何かがONになってます。とりあえずうまくいっているらしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/e23f716a-1a37-8377-e0b4-57396b2bd2f4.png)

リモートリポジトリを有効にする？
```
$ git remote -v
```
プッシュ？
```
$ git push heroku master
```


###Herokuの設定をしないと表示されない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/44da8a5c-6ace-72ad-4ff1-41d7f5622971.png)
ここから
必要な設定をする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/a7e71b65-4811-ccd0-21d2-4433d3b72e25.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/f7403881-0fc7-c5d9-8f28-3e2dd37a03c9.png)

まずは下の2つを設定するとトップ画面は表示されるはず

```
APP_KEY .envファイルの上の方に書いてる
APP_DEBUG　true
```

上の画面から直接入力してもOKだけど、ターミナルから設定できるもよう。

ターミナルから設定する場合

```
$ heroku config:add DB_PORT=5432
```
という感じで、設定していく。

設定した項目は
上の画像の通り。



すべてconfigを設定したらHEROKUにデータベースを準備する。
標準ではデータベースは準備されていないらしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/f7efe8c6-0bca-8efd-1ee5-913b09d5677a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/a193293e-2b43-5a09-aa1e-e36410743309.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/ba4e66d1-567a-f04a-0f15-e9f73f9adc35.png)

###Herokuのデータベース情報を取得する

```:ターミナル
% heroku pg:credentials:url
```
このコマンドを実行すると、
dbname
host
port
user
password
などが表示される。それらにしたがって

```:ターミナル
heroku config add DB_CONNECTION=pgsql
heroku config:add DB_HOST=表示された文字列
heroku config:add DB_POST=表示された文字列
heroku config:add DB_DATABASE=表示された文字列
heroku config:add DB_PASSWORD=表示された文字列
```

これで設定するべきものは終了。


テーブルの作成。マイグレーションの実行。
```
$ heroku run php artisan migrate
```


一応以上でデータベースの設定・作成まで完了。

###シンボリックリンクがなくなっている！？
storage/app/publicに画像を保存するようにしていたのが読み出せなくなっていました。

まだ解決法はわかっていないので模索していきます。

gitの使い方については全然わかっていない状態です。

とりあえずHerokuへのLaravelデプロイの基本的な流れの参考として。

参考にした動画
https://www.youtube.com/watch?v=639Pe0PpVLQ&t=604s

英語で細かい説明は理解できずm(__)m
【RubyonRails】カラム名を変更する方法

##はじめに
環境
ruby-2.6.3

開発の過程で、カラム名を変更する必要がありました。
対処方法を備忘録として記しておきます。

##やりたいこと
モデルuserのカラムの名を以下の通り変更する

<b>zipCode　→　zip_code</b>
##方法
###1.マイグレーションファイルを作成する

以下のコマンドを実行し
db/migrate/20200825114039_rename_zip_code_column_to_users.rb
を作成します。

```rails generate migration rename_zipCode_to_users```
###2.マイグレーションファイルを編集する
```db/migrate/20200825114039_rename_zip_code_column_to_users.rb
class RenameZipCodeColumnToUsers < ActiveRecord::Migration[6.0]
  def change
    rename_column :users, :zipCode, :zip_code
  end
end
```

###3.データベースへ反映させる
下記を実行する

``$ rake db:migrate``

<b>無事、usersモデルのカラム名がzipCodeからzip_codeに変更されました！</b>
##終わりに
当初、コードでカラム名書き換え後
「rake db:migrate」やればいいと思ってましたが、違いました。

慣れるまでは少し面倒ですが、今後同様のミスがあっても
落ち着いて対処できそうです。
jestのチュートリアルで躓いた話

# はじめに
jestを覚えたいと思った。
[チュートリアル](https://jestjs.io/docs/ja/getting-started)を実行した。
いきなりエラーが発生した。

# npmのバージョン
```zsh
❯ npm -v
5.6.0
```

# 構成
```zsh
❯ mkdir jest-spike
❯ cd jest-spike
❯ npm init
❯ npm install --save-dev jest
❯ vim sum.js (サンプルの通り)
❯ vim sum.test.js (サンプルの通り)  
❯ vim package.json (サンプルの通り) 
```

# エラーの内容
```zsh
❯ npm test

> jest-spike@1.0.0 test /Users/xx/workspace/jest-spike
> jest

/Users/xx/workspace/jest-spike/node_modules/jest/node_modules/jest-cli/build/cli/index.js:227
    } catch {
            ^

SyntaxError: Unexpected token {
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:616:28)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/xx/workspace/jest-spike/node_modules/jest/node_modules/jest-cli/bin/jest.js:16:3)
npm ERR! Test failed.  See above for more details.
```

# 原因
nodeのバージョンが古すぎた。
yarnでjest入れたらこんなエラー出た。

```zsh
error jest@26.4.2: The engine "node" is incompatible with this module. Expected version ">= 10.14.2". Got "8.11.1"
error Found incompatible module.
```

nodeをv8.11.1からv14.8.0に上げたら動いた。
duコマンド、ディレクトリの容量を確認



ストレージのディレクトリの容量を調べたい時は、duコマンドを使います。

```
$  du -h hogedir/hogedir2
```

上のコマンドは、hogedir/hogedir2ディレクトリ下にある全てのサブディレクトリ毎（全ての階層）の容量を表示してくれます。
-hオプションは、容量のサイズを適当にまとめて表示してくれます。

また、-sオプション(--summarize)をつけると、指定したディレクトリの容量の合計のみを表示してくれます。

```
$  du -sh hogedir/hogedir2
```

また、指定したディレクトリの直下にあるサブディレクトリ毎の容量を表示したい場合、以下のようにします。

```
$  du -sh hogedir/hogedir2/*/
```

また、duではなくdfコマンドで、ストレージディスクの使用容量、空き容量なども表示できます。

#### 参考サイト

[ストレージ(EBSなど)の使用率(使用容量や空き容量)をコマンドで確認。df,duコマンド](https://it-jog.com/cmd/dfducmd-storage)
[duコマンドでディレクトリごとの容量を一発で出力する](https://www.greptips.com/posts/756/)
カラムの追加と削除


#カラムの追加

カラムを追加する際のテンプレートは以下です。

```
rails g migration Addカラム名Toテーブル名 カラム名:型名
```

1,ターミナルで、上記のコマンドを実行する。今回はitemテーブルにbrandカラムを追加することにします。

```
$ rails g migration AddBrandToItem brand:string
```

2,マイグレーションファイルに2020○○○○○○○○○○_add_brand_to_item.rbファイルが作成されているか確認する

```ruby
class AddBrandToItem < ActiveRecord::Migration[5.2]
  def change
    add_column :item, :brand, :string #ここでnull falseなどを指定
 
  end
end
```

3,rails g migrateのコマンドを実行する

```
$ rails db:migrate
```


#カラムの削除

カラムの削除のテンプレートは以下です。

```
rails g migration Removeカラム名Fromテーブル名 カラム名:型名
```
この場合はchangeメソッドではなくupメソッドとdownメソッドを分けて記述する必要があります。

あとは追加の作業と同様にrails db:migrateで完了です！
Unityのエディタ拡張

## メニュー追加
static関数にMenuItemアトリビュートを追加

```c#:OpenMenu.cs
using UnityEditor;

public class Menu
{
    [MenuItem("Menu/Do Something")]
    static void DoSomething()
    {
        // Do Something.
    }
}
```

## create追加
ScriptableObjectを継承したクラスにCreateAssetMenuアトリビュートを追加

```c#:CreateAsset.cs
using UnityEngine;

[CreateAssetMenu("HogeAsset")]
public class HogeAsset : ScriptableObject
{
}
```

## settings追加
SettingsProviderを継承したクラスを作成

```c#:Settings.cs
using UnityEditor;

public class Settings : SettingsProvider
{
}
```

## Inspector表示変更
Editorを継承したクラスを作成し、CustomEditorアトリビュートを追加

```c#:HogeBehaviourEditor.cs
using UnityEngine;
using UnityEditor;

public class HogeBehaviour : MonoBehaviour
{
}

// TODO : you should separate HogeBehaviourEditor in other file!!
[CustomEditor(typeof(HogeBehaviour))]
public class HogeBehaviourEditor : Editor
{
    public override void OnInspectorGUI()
    {
    }
}
```

## エディタショートカット
Edit > Shortcutsからショートカットキーが割り当てられる。
よく使うコマンドはショートカットキーを割り当てることをおススメ！
**２回押しコマンド(Ctrl+x Ctrl+s とか)はできない**
同時押しにしか対応していなくてちょっと残念

## エディタウィンドウビュー
GraphViewやUIElementsを使ってみましょう。
GraphViewはBlueprintのような洗練されたノードベースの作成ができるのでおススメ。
UIElementsはcssやxmlを使うことで設定やレイアウトの使いまわしが効く。
IMGUIとも互換性があるので使いやすい。
**ただし、再生中のUI表示にはまだ対応していないので注意！**
mongoDBのドキュメント削除方法

初めまして！初投稿です。
こうきといいます。

mongoDBでドキュメント内容を削除する方法が日本語で簡潔に纏められている記事がなかったので、
備忘録にと投稿することにしました。

# 環境
ターミナル : iTerm
mongoDB : ver. 4.4.0

# DB起動　ログイン

```
mongo  // mongoDB起動

use admin  // adminの部分は各々のDB名を記入
```

#コレクション検索〜ドキュメント削除まで

##### ・コレクション検索
```
show collections  // コレクション検索
```

##### ・コレクションの中身(ドキュメント)表示
```
db.inventory.find() //inventoryの部分は各々のコレクション名を記入
```

##### ・ドキュメント削除
inventoryの部分はコレクション名を記入
mongoDBのバージョンが３未満なら波括弧｛｝は不要です。

```
db.inventory.deleteMany({}) //すべてのドキュメントを削除
db.inventory.deleteOne({})　//指定したドキュメントを削除

例：db.inventory.deleteOne({ status: "D" }) //statusが"D"のドキュメントを削除
```

参考：https://docs.mongodb.com/manual/tutorial/remove-documents/
トレンドチャートの説明

応用情報技術者平成30年秋期 午前問52


システム開発の進捗管理などに用いられるトレンドチャートの説明はどれか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/362182bb-3d34-597a-1f2f-ebcebf6c092c.png)

１、トレンドチャート(trend chart)は、
計画の予算・工期、および実績の費用・進捗を表す2本の折れ線グラフを並べたグラフで、差異の把握や傾向(トレンド)の分析に用いられます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/4946df49-7037-5879-467a-b7612bd0612e.png)



２、責任分担表の説明
作業に関与する人と責任をマトリックス状に示したもの

３、アローダイアグラムやプレシデンスダイアグラムの説明
作業の順序や相互関係をネットワーク状に示したもの

・アローダイアグラムとは日程計画を表すために矢線を用いたネットワーク図で, PERT (Program Evaluation and Review Technique)と呼ばれる日程計画・管理のネットワーク技法で使用されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/6f2e6fd8-bd1c-b285-4ada-0e7ec83a36da.png)

４、ガントチャートの説明
作業日程の計画と実績を対比できるように帯状に示したもの

・ガントチャート（英: Gantt chart）とは、プロジェクト管理や生産管理などで工程管理に用いられる表の一種で、作業計画を視覚的に表現するために用いられる。 棒グラフの一種でもあり、横棒によって作業の進捗状況を表す。

例：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/c7fb4ab9-c0ba-320f-4682-a3aad70a1d3d.png)


参照：
https://www.fe-siken.com/kakomon/29_haru/q54.html

アローダイアグラム (PERT図)
https://knowledge-makers.com/arrow-diagram/#:~:text=%E3%82%A2%E3%83%AD%E3%83%BC%E3%83%80%E3%82%A4%E3%82%A2%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%A8%E3%81%AF%E6%97%A5%E7%A8%8B,%E6%8A%80%E6%B3%95%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99.

ガントチャート
https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%B3%E3%83%88%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88#:~:text=%E3%82%AC%E3%83%B3%E3%83%88%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%EF%BC%88%E8%8B%B1%3A%20Gantt%20chart,%E3%81%AE%E9%80%B2%E6%8D%97%E7%8A%B6%E6%B3%81%E3%82%92%E8%A1%A8%E3%81%99%E3%80%82
【Azure Synapse Analytics】 SQL on-demand でシステムビューが利用できないか試してみる

# はじめに

Azure Synapse Analytics におけるシステムビューの利用可否について調べたところ、SQL pool については以下リンクに記載がありました。

[Synapse SQL プールでサポートされるシステム ビュー](https://docs.microsoft.com/ja-jp/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-reference-tsql-system-views)

これに対し SQL on-demand については明確な記載が見つけられませんでしたが、Synapse Studio の Data Hub を見るとシステムビューらしきものが存在するように見えます。
![20200825_sysview_sqlondemand_00_tree.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685288/3b1b7b47-3520-9858-5403-6f4e73d8e631.jpeg)

公式にサポートはされていないかもしれませんが、軽く触ってみたのでわかったことを簡単にまとめます。

# 試してみる

Synapse Studio の Develop Hub で接続先を SQL on-demand に指定した上で、クエリを発行します。FROM 句にシステムビューを指定した SELECT 文であれば何でも構いません。以下は、sys.configurations の情報を取得している例です。
![20200825_sysview_sqlondemand_01_try.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685288/68c0a54b-e69c-627c-aa1b-2afd7c64940d.jpeg)

# エラーになるケース

何度か試してみたところ、指定するシステムビューによってはエラーが返ってくるものがありました。

エラーになるものとしては DMV(動的管理ビュー)に関するものが多く、メッセージにも DMV は対応していないと明記されていました。
![20200825_sysview_sqlondemand_02_error.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685288/7d1d4cab-b588-1670-0be5-35b9adca8997.jpeg)

# 内部動作に対する気づき

SQL on-demand におけるシステムビューの実行を通していくつか気づいたことがあったので、2 点ほどご紹介します。まずは、sys.servers の実行結果です。Product 列に「SQL Server」という文字が確認できます。
![20200825_sysview_sqlondemand_03_servers.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685288/4b839a81-57d3-b5d9-5e99-113835ff5afa.jpeg)

次に、sys.database_files の実行結果です。どこかの Blob ストレージ上に mdf と ldf ファイル(SQL Server におけるデータベースファイルとログファイル)がそれぞれ格納されていることがわかります。
![20200825_sysview_sqlondemand_04_files.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685288/5e9e7618-ec91-f253-1033-1aacf9e25068.jpeg)

これらのことから、SQL on-demand も内部的には SQL Server をベースとした仕組みで動作していることが伺い知れます。サーバレスのサービスの裏側を知ってどうするんだという話はあるかもしれませんが、個人的に興味深い結果であったため共有させていただきました。

# まとめ

今回は SQL on-demand におけるシステムビューの実行を試してみました。DMV 等も実行できるようになるとシステムでのトラブルシューティングやパフォーマンスチューニングが捗るため、今後の正式サポートと機能強化に期待したいです。

最後に、Azure Synapse Analytics は現在 Public Preview であり、今回の SQL on-demand におけるシステムビューの利用も公式ドキュメントに記載のあるものではありません。

本記事の内容は、それらに対して何らかの動作保証をするものではございませんのであらかじめご了承ください。正式な製品仕様や機能の対応状況については、Azure サポート等に直接お問合せください。
プロジェクトの期間を短縮する方法ークラッシング　crushing、ファストトラッキング　Fast Tracking

応用情報技術者平成30年秋期 午前問51


プロジェクトの期間を短縮する方法のうち，クラッシングに該当するものはどれか。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/7f2218e1-bcf4-f389-78b8-798b439a2b45.png)

プロジェクト期間を短縮する方法は、クラッシングとファストトラッキングに大別されます。

・クラッシング　crushing　or crashing
　　アクティビティに追加資源を投入して、所要期間を短縮することでスケジュールの短縮を図る方法

　　クラッシングとは、プロジェクトの工期を短縮する手法の一つで、クリティカルパス上の工程に追加の資源（人員、資金）を投入して予定より短い工期で完了すること。 工期の遅れを挽回するために用いられることが多い。

・ファストトラッキング　Fast Tracking
　　開始当初の計画では直列に並んでいた作業を同時並行的に行ったり、作業の前後を入れ替えたりすることで期間短縮を図る方法

本来は順番に実行するはずだった各工程について、前工程の完了を待たずに次工程に着手し、一部を並行して実行する。前工程で既に作業が済んだ成果物を利用して次工程の作業をできるところまで進めるといった手法が取られる。

直接的にコストを増やさずに遅れを挽回できる手法であり、他の手法に比べ選択されやすいが、本来並行して行わない複数の工程に人員を分割して割り当てることになるため、人的負担が大きく、連携が円滑に進まないと混乱が生じることがある。

また、ファストトラッキング開始後に前工程で重大な変更や修正などが発生し、これを元に進めていた次工程の完了部分を破棄してやり直し（手戻り）を迫られるリスクもある。


アイウはファストラッキングですね。

参照：
https://www.ap-siken.com/kakomon/30_aki/q51.html

クラッシングとファストトラッキング
https://www.s-arcana.co.jp/tech/2012/05/project-schedule-delay-crashing-and-fast-tracking.html
http://e-words.jp/w/%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%B3%E3%82%B0.html#:~:text=%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%B3%E3%82%B0%E3%81%A8%E3%81%AF%E3%80%81%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88,%E7%94%A8%E3%81%84%E3%82%89%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E5%A4%9A%E3%81%84%E3%80%82
【Ruby on Rails】PJ立ち上げ時にDBをsqliteからmysqlに変更する方法

#【Ruby on Rails】PJ立ち上げ時にDBをsqliteからmysqlに変更する方法

`rails new PJ名`でPJを作成すると、デフォルトのDBはsqlite3になっている。

DBの変更方法は2種類。

1. [PJ立ち上げ時にmysqlを指定する方法](#pj立ち上げ時にmysqlを指定する方法)
    2. [エラー１「active record.nodatabaseerror」の対応](#エラー１active-recordnodatabaseerrorの対応)
    3. [エラー２「An error occurred while installing mysql2」の対応](#エラー２An-error-occurred-while installing-mysql2」の対応)
2. [作成後に変更する方法](#作成後に変更する方法)



<br>
##1. PJ立ち上げ時にmysqlを指定する方法

オプションでdatabaseを指定してPJを作成する。

```:PJの作成
#gemのDBをmysql2に設定する（サーバーにmysql2がインストールされている前提）
$ rails new PJ名 --database=mysql
```

<br>

```:dbの作成とmigration
##DBの作成
$ rake db:create


##DBを紐付け
$ rake db:migrate

```

migrateを実行すると、config > dbフォルダの中に、schema.rbが生成される。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/793fd50f-e065-9c7c-b7ca-e30316e675f4.png)|
|:--|



Gemfileで指定されているDBも確認してみる。
DBにmysql2が指定されている。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/81fdf36a-e3fd-7427-0278-0cde1ea02969.png)|
|:--|

```rb:Gemfile
gem 'mysql2', '>= 0.3.18', '< 0.6.0'
```


<br>

```:mysqlとrailsサーバー起動
##mysqlの起動
$ sudo service mysqld start


##railsサーバーの起動
$ rails server -b 0.0.0.0
```

接続成功。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/05f0f8f0-ad8b-4e05-0411-801a4eccf538.png)



<br>
###エラー１「active record.nodatabaseerror」の対応
databaseが作成されていない場合に発生するエラー。rakeコマンドでDBの作成と紐付けを行う。

```
##DBの作成
$ rake db:create


##DBを紐付け
$ rake db:migrate
```





<br>
###エラー２「An error occurred while installing mysql2」の対応
下記エラーが発生した場合、サーバー環境にそもそもmysqlがインストールされていない可能性がある。

```:エラー
An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.
```

####mysql2のインストール

```:エラー対応
##mysql2（mysql55-devel）のインストール
##インストールするか聞かれるのでyを選択
$ sudo yum install mysql-devel

##Gemfilemとgemライブラリを紐付け
$ bundle install

##dbの作成
$ rake db:create 
```





<br>
##2. PJ作成後に変更する方法

Gemfileを確認すると、デフォルトのDBはsqlite3が設定されている。

```rb:デフォルト
gem 'sqlite3'
```

１）これを、mysql2に変更する。

```rb:Gemfile
gem 'mysql2', '>= 0.3.18', '< 0.6.0'
```

２）ターミナルで以下を実行

```
$ bundle install


##db未作成の場合
$ rake db:create 

$ rake db:migrate
```

<br>

```:mysqlとrailsサーバー起動
##mysqlの起動
$ sudo service mysqld start


##railsサーバーの起動
$ rails server -b 0.0.0.0
```



###既存DBがある場合
既存DBがある場合は、Gemfileを修正し、bundle install後、以下を実行する。

```
$ rake db:migrate
```

<br>

```:mysqlとrailsサーバー起動
##mysqlの起動
$ sudo service mysqld start


##railsサーバーの起動
$ rails server -b 0.0.0.0
```

<br>
以上。
【Rails】windows10でcredentials.ymlの編集をする

##はじめに
Railsでは各APIキーなどをcredentials.ymlなるファイルで管理？するらしい。
このファイルは暗号化されているようで普通に開いて編集することはできず、コマンドから開くみたいでWindows向けの文献が少なかったので、需要はあまりなさそうですが上手くいった方法を書いておこうと思います。


##環境

```console:console
Windows10
ruby 2.6.6
Rails 6.0.3.1
VSCode 1.48.1
```


##まずは普通にやってみる

「rails credentials:edit」でファイルを開く。

```console:console
C:\Users\sample> rails credentials:edit
```
すると、

```console:console
No $EDITOR to open file in. Assign one like this:  

EDITOR="mate --wait" bin/rails credentials:edit  

For editors that fork and exit immediately, it's important to pass a wait flag,  
otherwise the credentials will be saved immediately with no chance to edit.
```
なにやらEDITORを指定して実行しなければいけないみたいなのですが、Windous環境で「EDITOR="〇〇 --wait" bin/rails credentials:edit」を実行しようとすると

```console:console
'EDITOR' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```
と出てしまいます。
そのため、Windowsの環境変数に「EDITOR」を追加します。

##環境変数の設定

Windows10の場合「コントロールパネル」の「システム」より「システムの詳細設定」→「環境変数」と進みます。
※平気だとは思いますが環境変数はむやみに編集したり、削除したりしないでください。
![コメント 2020-08-25 185525.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637123/96682677-6b16-21c3-49fc-8764c9eb1905.png)

すると「ユーザー環境変数」と「システム環境変数」の２つが表示されると思います。
この内の「ユーザー環境変数」に「EDITOR」という変数がなければ「新規」から追加します。

「変数名」を「EDITOR」とし、「変数値」には使うエディタ（今回はVSCode）の場所を入力します。
エディタの場所は「ファイルの参照」から選んでも問題ありませんが、下の画像のように「"場所"-w -n」と直してください。
※「-w」が無いとcredentials.ymlファイルを編集しても[保存できない](https://stackoverflow.com/questions/48539408/rails-5-2-encrypted-credentials-not-saving)みたいです。「-n」は新規ウィンドウで開くため。
![コメント 2020-08-25 191503.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637123/c99c293d-6234-e40c-05a3-8e1c21c806c1.png)

##もう一度やってみる
その前にコマンドプロンプトが開いていたら、一旦閉じて再起動します（環境変数を読みに行くので）。

```console:console
C:\Users\sample> rails credentials:edit
```

指定のエディタでファイルが開けば成功です。
一応、保存ができるか確認してみてください。

##おしまい
変数値の書き方を間違えると、ファイルが開かなかったり保存がされなかったりしたので疑ってみてください。
「区間が無限の積分を数値計算で行う(ガウス積分)」を参考にしました。

オリジナルポスト

https://qiita.com/Tukaene/items/70b6116ad1768d4a6388

##Wolfram|Alpha 日本語版で実行しました。
```
e^(-t^2)をtがマイナス無限大から無限大まで積分
```
https://ja.wolframalpha.com/input/?i=e%5E%28-t%5E2%29%E3%82%92t%E3%81%8C%E3%83%9E%E3%82%A4%E3%83%8A%E3%82%B9%E7%84%A1%E9%99%90%E5%A4%A7%E3%81%8B%E3%82%89%E7%84%A1%E9%99%90%E5%A4%A7%E3%81%BE%E3%81%A7%E7%A9%8D%E5%88%86&lk=3

integral_(-∞)^∞ e^(-t^2) dt = sqrt(π)≈1.77245

```
e^(-x^2)
```
https://ja.wolframalpha.com/input/?i=e%5E%28-x%5E2%29

integral_0^∞ e^(-x^2) dx = sqrt(π)/2≈0.886227


##online sympyで実行しました。
https://live.sympy.org

```
print(integrate((exp(-x**2)),(x, -oo, oo)))
```
sqrt(pi)
Boost.Phoenixでのactorとlazy control structureを考える

Boost.Phoenixには"actor"と"lazy control structures"というフレーズがある。

アクターは関数型言語でよく出てくるが、いまいちよくわからない。。

> Actors are the abstractions for lazy functions which composes Phoenix function.

とあるが、actorは遅延評価関数を構成するために使うモノであるぐらいに解釈した。

     1#include <boost/phoenix/core.hpp>
     2#include <boost/phoenix/operator.hpp>
     3#include <vector>
     4#include <string>
     5#include <iostream>
     6#include <algorithm>
     7
     8int main() {
     9  using boost::phoenix::arg_names::arg1;
    10  std::vector<std::string> vec{"Taro", "Ichiro",
    11                               "Shiro", "Saburo"};
    12  std::for_each(vec.begin(), vec.end(),
    13                std::cout << arg1 << '\n');
    14}

↑ Boost.Phoenixでラムダ式を使う。

遅延評価も厳密な解釈がむずかしいのだが、個人的には「リストを作って各要素に関数を適用していく」くらいの解釈にしている。

> Lazy control structures.
It is possible to generate actors which lazily evaluate entire blocks of code with branching and looping constructs.

これは、「遅延評価をifやloopなどのコントロールブロック全体に適用できる」という感じだらうか。(*´Д｀)

     1#include <boost/phoenix/core.hpp>
     2#include <boost/phoenix/statement/if.hpp>
     3#include <boost/phoenix/operator.hpp>
     4#include <algorithm>
     5#include <vector>
     6#include <iostream>
     7
     8int main() {
     9  namespace phx = boost::phoenix;
    10  using namespace phx;
    11  using phx::arg_names::arg1;
    12
    13  std::vector<std::string> names{"Taro", "Ichiro",
    14                                 "Shiro", "Saburo"};
    15  std::for_each(names.begin(), names.end(),
    16            if_(arg1 == "Shiro") [
    17              std::cout << arg1 << ", vocalist" << '\n'
    18            ].else_[
    19              std::cout << arg1 << ", player" << '\n'
    20            ]
    21            );
    22}

実行してみる。。。

<pre>
# ./a.out 
Taro, player
Ichiro, player
Shiro, vocalist
Saburo, player
</pre>
「広義積分の数値計算」を参考にしました。

(オリジナルポスト)

https://qiita.com/Tukaene/items/f6f8457a2cdc565ecde1

## Wolfram|Alpha 日本語版で実行しました。

### 例1



https://www.wolframalpha.com/input/?i=1%2F%281%2Bx%5E4%29%E3%82%92x%E3%81%8C%E3%83%9E%E3%82%A4%E3%83%8A%E3%82%B9%E7%84%A1%E9%99%90%E5%A4%A7%E3%81%8B%E3%82%89%E7%84%A1%E9%99%90%E5%A4%A7%E3%81%BE%E3%81%A7%E7%A9%8D%E5%88%86&lang=ja

integral_(-∞)^∞ 1/(1 + x^4) dx = π/sqrt(2)≈2.2214


https://www.wolframalpha.com/input/?i=1%2F%281%2Bx%5E4%29&lang=ja

integral_0^∞ 1/(1 + x^4) dx = π/(2 sqrt(2))≈1.1107


### 例2



https://www.wolframalpha.com/input/?i=x%5E%28-x%29%E3%82%92x%E3%81%8C0%E3%81%8B%E3%82%89%E7%84%A1%E9%99%90%E5%A4%A7%E3%81%BE%E3%81%A7%E7%A9%8D%E5%88%86&lang=ja

integral_0^∞ x^(-x) dx≈1.99545595750014...


https://www.wolframalpha.com/input/?i=x%5E%28-x%29&lang=ja



### 例3


https://www.wolframalpha.com/input/?i=sinx%2Fx%E3%82%92x%E3%81%8C0%E3%81%8B%E3%82%89%E7%84%A1%E9%99%90%E5%A4%A7%E3%81%BE%E3%81%A7%E7%A9%8D%E5%88%86&lang=ja

integral_0^∞ sin(x)/x dx = π/2≈1.5708


https://www.wolframalpha.com/input/?i=sinx%2Fx&lang=ja

integral_0^∞ sin(x)/x dx = π/2≈1.5708



### 例4

https://www.wolframalpha.com/input?i=sin+x%5E2%E3%82%92x%E3%81%8C%E3%83%9E%E3%82%A4%E3%83%8A%E3%82%B9%E7%84%A1%E9%99%90%E5%A4%A7%E3%81%8B%E3%82%89%E7%84%A1%E9%99%90%E5%A4%A7%E3%81%BE%E3%81%A7%E7%A9%8D%E5%88%86&lang=ja


integral_(-∞)^∞ sin(x^2) dx = sqrt(π/2)≈1.25331


https://www.wolframalpha.com/input/?i=sin+x%5E2&lang=ja

integral_0^∞ sin(x^2) dx = sqrt(π/2)/2≈0.626657



## online sympyで実行しました。
製作中

https://live.sympy.org

```
```
アジャイル開発でイテレーション(Iteration)を行うの目的

応用情報技術者平成30年秋期 午前問50


アジャイル開発で"イテレーション"を行う目的のうち，適切なものはどれか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/df43e5a3-c444-5837-fa6d-f63935457b49.png)

１、イテレーション(Iteration)は、
アジャイル開発における反復の単位で、分析、設計、実装、テストの一連の活動を含みます。アジャイル開発では、概ね数週間程度ごとにこの開発サイクルを繰り返して次第に完成度を高めていきます。短い期間で区切ることで、開発の工程管理がしやすくなったり、計画の変更に対応しやすくなったりする利点があります。


２、タスクボードの目的
タスクの実施状況を可視化して，いつでも確認できるようにする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/dad24820-3aea-9fae-f5c4-96a03f0cdd42.png)


３、ピンポンペアプログラミングの目的
ペアプログラミングのドライバとナビゲータを固定化させない。

・ペアプログラミング（英: pair programming）はソフトウェア開発の手法の一つで、2人のプログラマが１台のマシンを操作してプログラミングを行う手法。

当初は、２人が１台のワークステーションに向かって作業するものだったが、現在では一人で複数台を同時に使ったり、一台に複数台のディスプレイを使うことも多くなり、具体的なやり方は変わっている。

実際にキーボードを操作してコードを書く人を「ドライバ」、もう1人を「ナビゲータ」と呼ぶ。30分ごとか、単体テストを1つ完成させる度に役割を交替するのがよいとされる。また、1日に一度の頻度でパートナーを変えるのがよいともされている。


４、日次スクラムの目的
毎日決めた時刻にチームメンバが集まって開発の状況を共有し，問題が拡大したり，状況が悪化したりするのを避ける。

・スクラム（英: Scrum）は、ソフトウェア開発における反復的で漸進的なアジャイルソフトウェア開発手法の1つである。この方法論は「柔軟かつ全人的なプロダクト開発ストラテジーであり、共通のゴールに到達するため、開発チームが一体となって働くこと」とされる。この方法論は、製品開発における伝統的な、シーケンシャルなアプローチとは大きく異なる。この方法論は、チームが自発的に組織だって行動することを可能にする。この自己組織化を実現するのは、すべてのチームメンバーが物理的に同じ場所にいること、あるいは密なオンライン共同作業を通じ、全員が日々直接会ってお互いにコミュニケーションをとり、プロジェクトにおける規律を守ることである。


参照：

https://www.ap-siken.com/kakomon/29_haru/q49.html

スクラム (ソフトウェア開発)
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA)

タスクボード
https://it-managers-life.hatenablog.com/entry/2019/02/16/130012