OmniAICreator/Qiita-1.07M huggingface dataset:
Gitでよく使う＆たまにしか使わないけど使う必要のあるコマンド

# gitでよく使うコマンド

gitのコマンド、よく使うものはサラッと出てくるのですが、そうじゃないものは毎回調べてるな〜と思ったので、まとめておけば、便利なのかな？と･･･

## よく使うもの
### 現在のディレクトリーに、gitリポジトリーを作る
  `git init .`

### ファイルやディレクトリーをgitに登録(コミット)する対象にする。
  ※新規のファイルでも、更新したファイルでもこれをしないとコミットされない。
  `git add <directory>`
  `git add <file>`

### 消したファイルをgitに登録(コミット)する対象にする
  `git rm <file>`

### 変更したファイルを全部まとめて、gitに登録(コミット)する
  `git commit`

### 変更したファイルの一部を、gitに登録(コミット)する
  `git commit <file>`

### 現在のgitリポジトリー内の変更されたファイルを確認する<br>
  `git status`

### リモートリポジトリーをコピー(クローン)する
  `git clone <reposURL>`

### ブランチを指定してリモートリポジトリーをクローンする
  `git clone <reposURL> <branch>`

### リモートリポジトリーにコミットしたものを送信する
  `git push`

### リモートリポジトリーから変更を[リモート追跡ブランチ](https://qiita.com/uasi/items/69368c17c79e99aaddbf)へ取得する
  `git fetch`

### (わたし的に非推奨) リモートリポジトリーから変更を取得して統合する
  ※ pullは、このfetchとmerge origin/masterをまとめてやってしまうので、自分でfetch & mergeとかした方が、コントロールしやすいそう。
  `git pull`

### リモートリポジトリーから他の人の変更を取得してローカルリポジトリーの分岐点を最新のものに変更(リベース)する
  ※ 今までに1度でもpushしたことがあると、色々問題が発生するので、そのブランチを **初めてgit pushする** 直前にだけ利用するのが望ましいように思える。
  `git pull --rebase`

### リモートリポジトリーの更新内容をローカルリポジトリーに統合(マージ)する
  'git merge`

### ローカルディレクトリーの変更したファイルを元に戻す(変更を破棄する)
  `git checkout -- <file>`

### 現在のbranchを確認する
  `git branch`

### ブランチを切り替える
  `git checkout <branch>`

#### 新しいブランチを作る
  `git checkout -b <branch>`

## たまにしか使わなくて、毎回調べるもの
### 直前のコミットメッセージを変更
  ※ EDITORが開くので、修正して保存すれば、コミットメッセージを修正してコミットし直してくれる。
  `git commit --amend`

### リモートリポジトリーをoriginとして追加する
  `git remote add origin <REPOS_URL>`

### リモートリポジトリーにコミット履歴をプッシュすると同時に、それを上流ブランチのディフォルトにする
  `git push --set-upstream origin master`

### ブランチを変更する際に一時保存しておく
  `git stash save`

### 一時保存した一覧を確認する
  `git stash list`

### 一時保存したものの詳細を確認する
  `git stash list -p`

### 一時保存したもののファイル一覧を確認する
  `git stash show`

### 一時保存したものを取り出す
  ※ 使っているシェルによっては{}がエスケープされてしまっている可能性があるので、その場合は`git stash apply stash\{0\}`といった風にする。
  `git stash <stash>`

### 一時保存したものを消す
  `git drop <stash>`

### 適用しなおした一時保存したものを取り消す
  ※ 参考: [変更を一時的に退避！キメろgit stash](https://qiita.com/fukajun/items/41288806e4733cb9c342)
  `git stash show <stash> -p | git apply -R`

### ブランチ名を変更する(ついでに削除)
  1. master を main にする
     `git branch -m master main
  1. 名前を変更したものをpushする
     `git push -u origin main
  1. originから、masterを削除する
     `git push origin --delete master

### リモートブランチを追加する
  `git remote add __URL__ origin`

### リモートブランチ名を変更する
  `git remote rename __OLD_NAME__ __NEW_NAME__`

## [変更履歴]
- 2018/12/07: 目次がちゃんと付くように修正
- 2018/11/22: marge -> merge
- 2022/01/18: ブランチ名の変更、リモートブランチの追加を追加
リーダブルチームのススメ

# リーダブルチームとは？

- 情報共有で透明性の高いチーム
- 自分の意見を言える壁のないチーム
- 人間を読んで信頼関係が築けるチーム

# Question

- リーダブルコードを読んだことがないプログラマはいるか
- コードがリーダブルならチームもリーダブルであって良い
- チームがリーダブルとは何？ とクエスチョンしてみよう

# 例. 息を吐くように問題ステート共有するのでリーダブル

- キーボードを軽快に打ち鳴らしてホウレンソウ
- Slack・口頭などでの共有をリアルタイムに、テニスの試合みたいにやる
- チームが一体となり一つの生き物のように動くのだ

# 例. 心理的安全性を作るのでリーダブル

- 疑心暗鬼では自分の弱さをさらせない
- カードを開くためには安心安全が必要だ
- 心理的安全性を作るのは良い睡眠と笑顔だ

# あなたのチームの例

- 何か思いついたらコメント欄へ。

# Hey yumainaura

- [チーム yumainaura - Google Search](https://www.google.co.jp/search?q=%E3%83%81%E3%83%BC%E3%83%A0+yumainaura&oq=%E3%83%81%E3%83%BC%E3%83%A0+yumainaura&aqs=chrome..69i57j69i60.2206j1j7&sourceid=chrome&ie=UTF-8)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
[メモ]RubyXLでシートを不可視にする

この記事は
===

* RubyXLのメモです

やりたかったこと
===

* RubyXLでExcelを操作しています
* シートを不可視にした時のメモです

やりかた
===

* 下記でOK

```
workbook[1].state = 'hidden'
```

終わりに
===

* undocumentedかつstack overflowとかにも一切情報がなく辛かったです
* [RubyXLのソース](https://github.com/weshatheleopard/rubyXL/blob/master/lib/rubyXL/objects/worksheet.rb#L409)と[Officeのフォーマット](http://www.datypic.com/sc/ooxml/e-ssml_customSheetView-1.html)を突きあわせて試行錯誤してたらたまたまできた感しかない
Mac で iTerm2 の端末から外部に ssh 接続した際に、文字化けが発生

# 問題

Mac で iTerm2 の端末から外部のサーバに ssh 接続して操作していたら、文字化けしていた。

```bash
ほげ
```

↑これが

```bash
�~A��~A~R
```

↑こんな感じに。

# 解決策

これで解決した。
ssh した先で、

```bash
$ unset LC_CTYPE
```

場合によっては .bashrc に書くと良いでしょう。

# 原因と解決への道のり

ssh 接続後に、自分とは違うユーザに `sudo su - xxx` で変更してみると、そのユーザでは文字化けは起きなかった。
環境変数に違いがあるのかな？と思い見てみると、文字化け環境のみ、LC_CTYPE というものが設定されていた。

```bash
$ env
...
LC_CTYPE=UTF-8
...
```

これが怪しそう。
とここで、そういえば！と思い出したのだが、ssh 接続するときに以下の warning が出ていた。

```
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
```

ということでこのエラー文で検索したら↓の記事に出会った。
https://k-sasaki.net/2017/02/8/

これで解決できる！と思ったのだが、ssh する前の自分の環境を汚したくなかった。
ので、解決策のとおり LC_CTYPE の設定を無くしてみたら、文字化けがなくなった。
LC_CTYPE が何を意味するのか等は調べて切れていないが、とりあえず文字化けは解消されたのでよしとした。。
エンジニアの三大美徳  良い短気 議論を早めに終わらせる

# 長引く議論

- スタンドアップミーティングなどで
- 時間、エネルギーを使いすぎてしまう
- 感情面、頭脳面でも消耗しがち

# 時間を変えたほうが良い

- 提案する
- 「そうしましょう」
- そうする。

# 良い短気は人のためになる

- 短気なのでHRTを実践する
- 短気なので心理的安全性を作る
- 短気と両立することの多さ

# 良い短気の見つけかた

- 「短気になろう」と考えずに「これが良い短気では？」と気づくパターンを逆に見つける

# Hello another world

- [yumainaura 三大美徳 - Google Search](https://www.google.co.jp/search?ei=BeL0W7z2Fomx8QW46ZLgBA&q=yumainaura+%E4%B8%89%E5%A4%A7%E7%BE%8E%E5%BE%B3&oq=yumainaura+%E4%B8%89%E5%A4%A7%E7%BE%8E%E5%BE%B3&gs_l=psy-ab.3...3243.4454..4681...0.0..1.318.1693.5j8j0j1......0....1..gws-wiz.......0i71.N89dZD8_XMA)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
PostgreSQL 9.5 以降で UPSERT構文 を使用する

# この記事の目的
- PostgreSQLで、UPSERT構文(データINSERT中に制約エラーが発生した場合、UPDATE操作を行う)を使えるようになります。

- ネット上の記事で9.5以降を扱っている記事が少なかったので、備忘録として。

- PostgreSQLは、バージョンによって構文が異なります。

- ネット上の記事を参考にする場合は、特に注意しましょう。


# 環境
- PostgreSQL 9.5 以降

# 構文
カラム①を、Primary key に設定している場合

```
$ INSERT into テーブル名 VALUES ('カラム①に入れたい値', 'カラム②に入れたい値') 
  on CONFLICT (カラム①) DO UPDATE set カラム①=値,カラム②=値;  
```


# その他の注意点
値をダブルクォーテーションで囲むと、エラーになってしまいます。

# 参考記事
https://jp.alibabacloud.com/help/doc-detail/52951.htm
フレキシブルデザイン　と　アダプティブデザイン

#　フレキシブルデザイン

例
https://www.bizcom.training/
幅を縮めても横スクロールが出ない
＝幅を縮めたら、その幅なりのデザインになる

ブレイクポイント
変更してデザインが変わる場所がいくつかある




# アダプティブデザイン

例
https://islands-journey.com/hawaiilovers/
幅を縮めたら、横スクロールが出る



★両者とも、デバイスに合わせるフレキシブルデザイン

★違い
工程数が異なるので、受注金額が異なってくる
工程数が多ければ、それだけUp

例でいうと、
前者でブレイクポイントが3つあれば、3パターンのCSSを書かなくてはいけない
後者のアダプティブデザインならば、PCとスマホの2パターンで済む
iOSのボタンが角丸グラデーションになるのをリセット





https://www.webdlab.com/labs/ios-button/　のサイトを参考にした

```HTML
HTML
<input type="submit" value="demo1">
```

```CSS
CSS
input[type="submit"] {
-webkit-appearance: none;
border-radius: 0;
}
```
にすると、iOS で　角丸がとれる。

ここで、　CSSの先頭につけた
-webkit　は、以下参考
http://www.htmq.com/csskihon/603.shtml

なので、-webkit　の1行はなくても大丈夫
フォームデザイン

http://codedoit.com/2017/01/19/%E3%82%B3%E3%83%94%E3%83%9A%E3%81%A7%E5%8F%82%E7%85%A7%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%8A%E3%81%97%E3%82%83%E3%82%8C%E3%81%AA%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B310/
kubectlでpod名のみの一覧を取得する方法

pod名のみを取得したいときに、 `kubectl get pods`では過分な情報を含むので、jsonpathでフィルターをする。


これを

```
$ kubectl get pods
NAME                                     READY   STATUS      RESTARTS   AGE
hoge-788cf54966-mdk2p                   1/1     Running     0          1h
fuga-788cf54966-ngh5w                   1/1     Running     0          2h
```

こう

```
$ kubectl get pods -o=jsonpath={.items[*].metadata.name}
hoge-788cf54966-mdk2p fuga-788cf54966-ngh5w
```

順番にshellで処理したいときはそのままforを使う

```bash
#!/bin/bash

for name in $(kubectl get pods -o=jsonpath={.items[*].metadata.name}); do
  echo ${name}
done
```
Phaser2 + Three.js + .glb でゲームアセットを3Dで表現する

#はじめに

今年のはじめに、どうやら3Dをfaceobookに投稿できるようになっているようで、、、

<img width="384" alt="スクリーンショット 2018-11-16 16.01.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/02e78e0b-7f19-ce2b-1b1f-c7b339b23645.png">

.glbを使うことで、グリグリ動かせるコンテンツが作れるそうです。

https://developers.facebook.com/docs/sharing/3d-posts/glb-tutorials/

今回は、ゲームのアイテムなどをglbで作成して、Phaserで作成しつつ、データをfacebookに投稿できるような仕組みを作ってみます.


#.glbの作り方

Metasequoia4では.glbの書き出しが行えるので、Metasequoiaを使うのが便利そうです。

<img width="438" alt="スクリーンショット 2018-11-21 13.14.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/cd421928-b592-d528-59ee-d911d5433f27.png">

自身は、あまりMetasequoiaのモデリングの要領がわかっておらず、下記のように、
3dsMaxで作ったモデルをMetasequoiaで読み込むような流れを作りました。

3dStudioMax --(.3DMAX)--->Metasequoia---(.glb)---->


#Phaserで使うには...
3dデータをそのまま表示する場合は、Three.jsで十分そうでしたが、
今回は、ボタンやUIなど諸々作成したかったので、Phaser2から読み込んでみることにしました。

ゲーム内で、3Dのオブジェクトを作る場合、色々やり方はありそうでしたが、
今回はPhaser内の一つのSpriteとして、Three.jsのテクステャを貼り付けるような方法をとりました。


```javascript

function add3dSprite(posX, posY) {
    //シーンを作成
    var scene = new THREE.Scene();
    // 座標軸を表示
    var axes = new THREE.AxisHelper(25);
    //scene.add(axes);
    //カメラ
    var camera = new THREE.PerspectiveCamera(50, 1.5, 0.1, 1000);
    camera.position.set(30, 15, 30);
    //camera.lookAt({x:0, y:0, z:0 });
    camera.lookAt(scene.position);
    //コントロール制御(したくない場合はここを外す)
    var controls = new THREE.OrbitControls(camera);
    controls.enableZoom = false;
    //ライト
    var directionalLight2 = new THREE.DirectionalLight(0xffeedd);
    directionalLight2.position.set(100, 100, 100);
    scene.add(directionalLight2);
    //オブジェクト
    //GLTFLoaderを使った読み込み
    var loader = new THREE.GLTFLoader();
    var url = "http://localhost:3000/planet_005.glb";
    var object;
    loader.load(url, function (data) {
        var gltf = data;
        object = gltf.scene;
        object.scale.set(50, 50, 50);
        var animations = gltf.animations;
        if (animations && animations.length) {
            mixer = new THREE.AnimationMixer(object);
            for (var i = 0; i < animations.length; i++) {
                var animation = animations[i];
                mixer.clipAction(animation).play();
            }
        }
        scene.add(object);
    });
    // ThreeのRenderer作成
    renderer = new THREE.WebGLRenderer({
        antialias: true,
        alpha: false
    });
    //renderer.setClearColor("#cccccc");
    renderer.setClearColor(0x000000, 1.0);
    // サイズを指定
    renderer.setSize(480, 320);
    // Canvasを取得
    var canvas = renderer.domElement;
    // CanvasからTextureを作成
    baseTexture = new PIXI.BaseTexture(canvas);
    texture = new PIXI.Texture(baseTexture);
    textureFrame = new Phaser.Frame(0, 0, 0, 480, 320, 'hoge');
    // Textureをスプライトとして追加(x:0,y:100でset)
    var sprite = game.add.sprite(posX, posY, texture, textureFrame);
    sprite.anchor.x = 0.5;
    sprite.anchor.y = 0.5;
    animate();

    function animate() {
        requestAnimationFrame(animate);
        if (mixer) mixer.update(clock.getDelta());
        render();
    }

    function render() {
        renderer.render(scene, camera);
    }
}
```



#作ったもの
githubのリンク：
Docker + CentOSでpowershell実行環境簡単構築

DockerにCentOS入れて、CentOS上にPowerShell for Linux をインストールして、Linux上でpowershellが使用できるようにしていきます。

## 環境
Mac 10.13.6
Docker version 18.06.0-ce, build 0ffa825
docker-compose version 1.22.0, build f46880f
PSVersion      6.1.1

## 構成
構成は非常にシンプルです。

.
├── docker
│　　　└── powershell
│　　　　　　　└── Dockerfile
└── docker-compose.yml

## 構築
#### docker-dompose.yml
シンプルにcentos用のコンテナのみ構築する想定です。
※ tty=trueにしておかないとdockerが起動し続けてくれないので注意

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

services:
  app:
    container_name: powershell
    build: ./docker/powershell
    tty: true
```

#### Dockerfile
centOS7の公式イメージを取得します。そして、PowerShell for Linuxをインストールします。

```Dockerfile:Dockerfile
FROM centos:7

RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/microsoft.repo
RUN yum -y install powershell
```


## コマンド
docker起動

```bash
docker-compose up -d
```

コンテナに入る

```bash
docker-compose exec app /bin/bash
```

powershell起動

```bash
pwsh
```

powershellコマンドレット一覧表示

```
Get-Command
```

powershellコマンドレット一覧表示

```powershell
$PSVersionTable
```

powershell終了

```powershell
exit 
```

コンテナから出る

```bash
exit
```

## 最後に
ふと思いたち、とても簡単にできました。。。が、これ需要あります？(笑)

## 参考サイト
https://www.server-world.info/query?os=CentOS_7&p=powershell
メモ sense hat導入でつまった

エラー出た

```
$ python
>>> from sense_hat import SenseHat

ImportError:
Importing the multiarray numpy extension module failed.  Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try `git clean -xdf` (removes all
files not under version control).  Otherwise reinstall numpy.

Original error was: libf77blas.so.3: cannot open shared object file: No such file or directory
```
ググった

```
$ sudo apt install libatlas-base-dev
```
別のエラーがでた

```
ImportError: No module named 'RTIMU'
```
またググった

```
$ pip install rtimulib
```
動いた
iOSアプリにFacebookのシェアを組み込む

アプリにFacebookのシェア機能を導入した時の導入メモです。
大雑把に以下の工程で、簡単にシェア機能を導入できるようです。

1. FacebookDeveloperサイトでユーザ登録
2. アプリをDeceloperサイトに設定
3. CocoaPodsでライブラリを導入
4. info.plistにライブラリの設定を記載
5. 画面上にボタンを設置
6. ボタンに対して、シェアしたい内容を設定



※ 下記サイトに記載されている内容の焼き増しです。
[iOS用Facebook SDKスタートガイド](https://developers.facebook.com/docs/ios/getting-started/?translation)
[iOSでのシェア](https://developers.facebook.com/docs/sharing/ios)



## FacebookでDeveloper登録

https://developers.facebook.com

## Developerサイトで作成するアプリを設定

この後の工程で、アプリIDとアプリ名を使用するので、取得しておく

## FacebookSDKをcocoaPodsでインストール

https://developers.facebook.com/docs/ios/componentsdks

### インストールするライブラリを指定

```
pod 'FBSDKShareKit'
```

### インストール

```
pod install
```

## info.plistにFacebookDeveloperで設定した内容を設定

- {your-app-id}にアプリID
- {your-app-name}にアプリ名

を設定

 
```
<plist version="1.0">
  <dict>
    <key>FacebookAppID</key>
    <string>{your-app-id}</string>
    <key>FacebookDisplayName</key>
    <string>{your-app-name}</string>
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>fb{your-app-id}</string>
      </array>
      </dict>
    </array>
  </dict>
</plist>
```

## シェアボタンを画面に貼り付け

シェア機能をユーザに提供する方法は、シェアボタン、送信ボタン、シェアダイアログ、メッセージダイアログといろいろなシェア方法を使用できます。
ここでは、シェアボタンを使用してます。

```objc
FBSDKShareButton *shareButton = [FBSDKShareButton new];
shareButton.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:shareButton];

// 適当にautolayoutを指定しておく
[shareButton.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor constant:8.0f].active = YES;
[shareButton.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor constant:8.0f].active = YES;
[shareButton.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:-8.0f].active = YES;
[shareButton.heightAnchor constraintEqualToConstant:44.0f].active = YES;
    
/** この後に、ここへシェアしたい内容をコードで設定 */

```

## シェアしたい内容をシェアボタンに設定

リンク、写真、動画、マルチメディア（写真と動画）をシェアできます。
ここでは、リンクと写真のシェアについて、記載します。

### リンクをシェア

リンクとコメントを投稿できる。
投稿画面は、ライブラリを組み込んだアプリ内でモーダル表示される。


```objc
FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://google.com"];
shareButton.shareContent = content;
```

### 写真をシェア

写真とコメントをシェアできる。
シェア画面は、Facebookアプリがインストールされている時は、Facebookアプリ内で表示される。
インストールされていない時は、自動的にシェアボタンが押せなくなる。

```objc

UIImage *image = [UIImage imageNamed:@"sample"];
    
FBSDKSharePhoto *photo = [FBSDKSharePhoto new];
photo.image = image;
photo.userGenerated = YES;
    
FBSDKSharePhotoContent *content = [FBSDKSharePhotoContent new];
content.photos = @[photo];
    
shareButton.shareContent = content;
```

## その他

### ハッシュタグを追加

シェアダイアログを使用している時は、ハッシュタグを設定できます。
なぜか、シェアボタンでは設定できない仕様なので、注意が必要です。

```objc
content.hashtag = [FBSDKHashtag hashtagWithString:@"#HogeHoge"];
```


***

以上な感じで、割と手軽にシェア機能を組み込むことができました。
後々、Twitterについても記載していきたいと思います。
GAEで任意の送信元メールアドレスを使う

任意のメールアドレスを送信元にしたかったのだが、どハマりして時間を潰したのでメモしておく。

まずGAEで任意のメールアドレスで送信をしようとするとGAEの設定画面で設定する必要がある。
![スクリーンショット 2018-11-21 12.44.53.png](https://qiita-image-store.s3.amazonaws.com/0/35536/676c2546-b139-4d65-ad00-bab21ddafc52.png)


その時、ログインユーザー以外のメールアドレスを設定した場合か、承認したドメインとメールアドレスが違う場合は以下のようなエラーが出る。

![スクリーンショット 2018-11-21 12.36.00.png](https://qiita-image-store.s3.amazonaws.com/0/35536/f3d33cea-fe28-8768-d886-cb2f6ce62ab6.png)


>次のメールは異なるドメイン上にあるため、追加できませんでした。メールには Google Apps ドメインまたは Google グループを関連付ける必要があります。メールに Google グループが関連付けられている場合は、グループ内の役割をオーナーまたはマネージャーにする必要があります。

うん、エラー分かりづら。

メールアドレスが承認したドメインと違う場合というのは、GAEで使っているサービスのドメインは hoge.comだけど、メールアドレスは hoge@gmail.com とかの場合。ただし、ログインしているユーザー自身のメールアドレスが「hoge@gmail.com」 であれば問題ない。

で、どうすれば良いかというと、使いたいメールアドレス(アカウント)にGCPの「IAM」設定で権限を追加。次に権限を追加したメールアドレス自体でログインしGAEのメールアドレス追加画面で追加を行う。

簡単にいうと、ログインユーザー自身じゃないと承認してないドメインのメールアドレスは追加できない。ということだった。
Python3でlistのように振舞うクラスを書く

初Python3記事です

### 背景

listではなく、わざわざクラスで扱う理由としては、あるタイミングでリスト内の要素の順序がランダムに入れ替わったり、値を返すときに何かしら変化を加える、といった事がしたい。

クラスでlistっぽく振舞うには、ランダムアクセスを行う`__getitem__`、要素数を返す`__len__`、イテレータを返す`__iter__`を最低限書けば良さそう。（抜け漏れがあるかも）


### Demo

https://wandbox.org/permlink/jNtJFugVCYtRQNiB


### Code

必要最小限だと思います。イテレータはジェネレータを使うと簡単にかけますね。

``` py
class SampleObject(object):
    def __init__(self, original_list):
        self.original_list = original_list

    def __getitem__(self, index):
        # ここで返す値をいじってもよい
        return self.original_list[index]

    def __len__(self):
        return len(self.original_list)
        
    def __iter__(self):
        index = 0
        while index < len(self):
            yield self[index]
            index += 1
```

後はメソッドを生やしてlistをshuffleするなり、`__getitem__`の処理を書き換えるなりすれば、やりたいことはできる。イテレータの処理中にshuffleしたら壊れるとか問題はありそうですが。

わざわざ書くまでもない簡単な事では？と思ってたけど、`__iter__`でselfを返すだけにして後は`__next__`で頑張る、という再利用を考慮できてない上にめんどくさそうな実装例を見てしまい、むしゃくしゃして書いた。
fastlaneやcocoapodsのバージョンをプロジェクトごとにチームで同じものを使う方法

# 背景
チームで複数のプロジェクトを開発しているとプロジェクトごとにfastlaneなどのバージョンが違ったりすることがよくある。
`pod install`をすると`Podifle.lock`が更新されてしまったり
人によって挙動が変わったり色々不便。

# 対策
bundlerを使う。


# rbenvのインストール
```
$ brew install rbenv 
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
$ source ~/.bash_profile
```

[rbenvインストール - 公式ドキュメント](https://github.com/rbenv/rbenv#homebrew-on-macos)

## rbenv-binstubsインストール
`bundler`でインストールしたライブラリを`bundle exec`経由しなくても使えるプラグイン

```
$ brew install rbenv-binstubs 
```

# bundlerインストール
※bundlerだけはグローバルにインストールします。

```
$ gem install bundler
```

## bundler初期設定

```
$ cd /プロジェクトのルートディレクトリ
$ bundle init
```

## cocoapodsとfastlaneを追加

```ruby:Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

# 以下を追加
gem "fastlane"
gem "cocoapods"
```

## 実際にインストール

```
$ bundle install --path=vendor/bundle --binstubs=vendor/bin
```

`.bundle/config` に設定が保存されるので、2回目以降は `bundle install` で大丈夫。


# おまけ
## gitignore
ぼくのいるチームでは以下の`.gitignore`を書いてライブラリのアップデートで大量のfilechangeがでないようにしてます。

```:.gitignore
vendor/bundle
vendor/bin
```


# 参考
[Homebrewのインストールとrbenvのインストールまで Mac編](https://qiita.com/is-lab/items/e0443b79da117ed48294#rbenv%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
github.ioのWebページにテーマを反映させてみた

# github.io

- GitHubのレポジトリでWebページを公開したときのURL。
- javascriptが動くhtmlを公開できる。

# 日記

1. GitHubのレポジトリにdocs/index.htmを作る。
2. SettingsのGitHub PagesでSourceの***master branch/docs folder***を選んでSave。
3. ***Theme Chooser***でテーマを選べるのかと思って元々選ばれているCayman themeを選んでみた。
4. github.io でWebページを公開できた:laughing:が、テーマが反映されてない:disappointed_relieved:。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/311399/6193852c-d93f-51ff-3aae-efa7f761a9e5.png)

# テーマが反映されてない！？

```yml

---
layout: default
---
```

HTMLファイルの &lt;body&gt; だけ残して他を削除し、この３行をHTMLファイルの先頭に追加したらテーマが反映された:laughing:。[^1]



# こんなページになった

![githuio.png](https://qiita-image-store.s3.amazonaws.com/0/311399/f2777e54-1d25-01fd-f1af-9ec4679c61f9.png)

```yml:docs/_config.yml
theme: jekyll-theme-cayman
lang: ja-JP
title: タイトルを変更してみた
```

```html:docs/index.htm
---
layout: default
title: タイトルは２つある
description: metaタグで見れる
---
<body>
  <h1>文字の大きさ h1</h1>
  <h2>文字の大きさ h2</h2>
  <h3>文字の大きさ h3</h3>
<pre>
&lt;pre&gt; のテスト
</pre>
<p>
&lt;p&gt; のテスト
</p>

{% highlight javascript %}
const fun=function(){
	console.log("test");
};
{% endhighlight %}
```

テーマの設定をもっと変えたらブログのようになるようだ。


# Markdownで書くこともできた

index2.mdを作ったらindex2.htmlに変換された。

```md:docs/index2.md
---
layout: default
title: トップページ２
---

# ここは h1 に変換される

* ここは ul li に変換される
```

[^1]: 出典はGitHub Community Forum の [Page not showing the theme](https://github.community/t5/GitHub-Pages/Page-not-showing-the-theme/td-p/5545)。
sass-lintを忘れちゃうのでメモ

コマンドをよく忘れるのでメモ
# sass-lint
- `npm run sass-lint`

# 導入
- `npm install sass-lint --save-dev`

あとは`.sass-lint.yml`にごにょごにょ書いてやる
`.sass-lint.yml`はググれば出てくるので今のところは気にしない
初心者|テクスチャセットパッケージとアニメーション変換ツール TextureMergeのチュートリアル(2) BitmapFont


こちらの記事の続き
[初心者|テクスチャセットパッケージとアニメーション変換ツール TextureMergeのチュートリアル(1)](https://qiita.com/motoyasu-yamada/items/c817450615f8174b67cd)

# Texture MergerでBitmap Fontの作成

TextureMerger起動後に表示されるメニューで`Bitmap Font`を選択する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/302078/075aaac0-fdc2-2e0f-c021-91d2bb7a8a68.png)

## ステップ1：インストールされたシステムフォントを使用してビットマップフォントを作成するのに適したシステムフォント。

メニューの「More Characters」を選択する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/302078/6aedc79e-1c75-25d0-054c-743252b563f9.png)

エディターで、フォント化した文字と、レンダリングするためのシステムフォント・サイズ・色・装飾を調整してCinfirmする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/302078/6b8e7e95-307f-e537-4f3c-b68aaea20a62.png)

このようにスプライト化される
![image.png](https://qiita-image-store.s3.amazonaws.com/0/302078/ea27e1bf-a091-4ebf-3117-6818f5637466.png)


## ステップ2：ビットマップフォントを作成する断片的なイメージの一部に合わせて文字を追加します。

0 1 2フォントイメージを選択し、追加の拡張名を削除することを忘れないでください。左の名前と右の画像が対応しているので、名前「0」は画像0を表す。拡張子を追加する場合は、テキストにlabel.text = "0_png"を表示する必要があります。

## 方法3：ビットマップフォントを作成するためにアートによって提供されるグラフィックフォント全体に適したフォントテクスチャセット。

この文字セットに生まれ、よりパーソナライズされたフォントを容易にすることである、芸術はきれいによく描かれた文字を配置することができるが、画像につながる、あなたはインポートツールを使用することができ、ツールが自動的に各文字の領域を特定します、我々あなたがする必要があるのは、下のテキストボックスに対応するテキストを入力することだけです。文字を順番に入力したら、[OK]をクリックします。

## エクスポート

画面上のメニューの「Export」を選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/302078/41ca38e0-e13a-53d1-4a12-f8f489f05267.png)

エクスポート設定画面が表示される
ひとまずスケールは100%のまま「Export」ボタンを押す
![image.png](https://qiita-image-store.s3.amazonaws.com/0/302078/6f78dcce-0d81-b94f-be13-c9d9472d33b5.png)

フォント名を入力
今回は`test`と入力
![image.png](https://qiita-image-store.s3.amazonaws.com/0/302078/4c6fa9c3-5367-04e3-f80a-16a85de6f9eb.png)

`test.fnt`ファイルと`test.png`ファイルがエクスポートされる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/302078/40511484-96d1-da28-e082-eb5eee3f3157.png)

```json:test.fnt
{"file":"test.png","frames":{
"0":{"x":24,"y":1,"w":20,"h":27,"offX":3,"offY":13,"sourceW":23,"sourceH":40},
"1":{"x":46,"y":1,"w":12,"h":27,"offX":4,"offY":13,"sourceW":16,"sourceH":40},
"2":{"x":22,"y":59,"w":19,"h":26,"offX":4,"offY":13,"sourceW":23,"sourceH":39},
"3":{"x":1,"y":29,"w":19,"h":27,"offX":3,"offY":13,"sourceW":22,"sourceH":40},
"4":{"x":1,"y":1,"w":21,"h":26,"offX":2,"offY":14,"sourceW":23,"sourceH":40},
"5":{"x":43,"y":59,"w":19,"h":26,"offX":3,"offY":14,"sourceW":22,"sourceH":40},
"6":{"x":43,"y":30,"w":19,"h":27,"offX":4,"offY":13,"sourceW":23,"sourceH":40},
"7":{"x":1,"y":87,"w":18,"h":26,"offX":4,"offY":14,"sourceW":22,"sourceH":40},
"8":{"x":1,"y":58,"w":19,"h":27,"offX":4,"offY":13,"sourceW":23,"sourceH":40},
"9":{"x":22,"y":30,"w":19,"h":27,"offX":4,"offY":13,"sourceW":23,"sourceH":40}}}
```

## Egretプロジェクトにインポートする
fntおよびpngファイルをEgret Wingのリソースフォルダにいれる

## コード

```ts:main.ts
        const test: egret.BitmapText = new egret.BitmapText();
        test.font = RES.getRes("hello_fnt");
        test.text = "0123";
        this.addChild(test);
```
ログインシェルをbashに戻す

# デフォルトシェルをbashに戻す
bashよりzshやfishのほうが便利とのことで、fishを入れたのですが、
pathの設定とか上手くできず、コマンドが実行できなくなってしまいました。

その時に、デフォルトシェルをbashに戻した際のコマンドとなります。

```
chsh -s /bin/bash
```

fishを入れるだけで、カスタマイズせずに補完とかをしてくれるので設定さえすればとても使いやすそうです。
WSL bashで作成したディレクトリでIIS Expressが404を返す問題の解決方法

# 発生した問題
ローカル環境でWSL bashを普段遣いしているのですが、WSL bashのGitでクローンしたVisual Studio 2017のWEBアプリケーションを動かそうとしたところ、IIS Expressが404エラーを返し正常に動作しない問題が発生しました。

いろいろ調べたところ以下のissueを発見し、これによるとWindows 10 build 17110にて、Bashで作成されたすべての新しいディレクトリが大文字小文字を区別するようになったらしいのですが、この状態となったディレクトリをIIS Expressで参照すると正常に動作しないという問題のようです。
https://github.com/Microsoft/WSL/issues/3212

# 解決方法
WSL Bashの/etc/wsl.confにおけるマウントオプションに対して、下記のようにcase=offと設定を追加し、
再度Gitクローンし直してディレクトリを再作成させることで問題が解決しました。

```plaintext:/etc/wsl.conf
[automount]
options="case=off"
```

ちなみに Insider Build 17704 ではこのオプションが既定でcase=offになっているようです。
JSでログを吐き出すコマンド

#JSでログを吐き出すコマンド

```
console.log("Hello");
```

##オブジェクト内を参照するには
```
var dummyObj = {
 elm: {
   a: 1,
   b: 2
 }
}
console.log('dummyObj.elm.a:' + dummyObj.elm.a);
console.log('dummyObj.elm.b:' + dummyObj.elm.b);
```
など。

###JSONで吐き出すには
```
console.log(JSON.stringify(dummyObj));
```
とする。

```
console.dir(dummyObj);
```
とかも可能。
[GO言語] ライブラリの使用方法

# はじめに

僕は GO言語 初心者なのですが、先日

:link: [？？？「これぐらいの奇蹟…安いもの！！」1種2種混合機の 80% ループで大連荘を生み出せ！](https://qiita.com/azukisiromochi/items/6a389f4dfdfc9fa8f2b3)

という記事を書きました。

手探りでコーディングしていく中で覚えたことをまとめて行きます。

今回はライブラリについてです！



# ライブラリを使う

### ライブラリとは

汎用性の高いプログラムを再利用可能な形でまとめておくものです。

GO言語 の場合はライブラリから必要なパッケージを `import` して利用する形になります。

標準のライブラリですと、フォーマットを扱う `fmt` パッケージや、擬似乱数を扱う `rand` など、様々なものがあります。

また、`GitHub` などに公開されているオープンソースのライブラリも同様に利用することが可能です。



### インポートしよう

例えば、`fmt` パッケージを利用する場合、

```go
package main

import "fmt"

func main() {

	fmt.Println("fmt が利用可能に！")
}
```

このように `import` することで利用可能になります。



複数のライブラリを利用する場合は、

```go
package main

import (
	"fmt"
	"math/rand"
)
```

のように `import ( /* any libraries */ )` 括弧でくくることで複数の指定が可能です。

オープンソースのライブラリも利用してみましょう。

```go
package main

import (
  "fmt"
  "log"
  "os"

  "github.com/urfave/cli"
)

func main() {
  app := cli.NewApp()
  app.Name = "greet"
  app.Usage = "fight the loneliness!"
  app.Action = func(c *cli.Context) error {
    fmt.Println("Hello friend!")
    return nil
  }

  err := app.Run(os.Args)
  if err != nil {
    log.Fatal(err)
  }
}
```

前回も紹介した [urfave/cli](https://github.com/urfave/cli) を利用するサンプルですが、これを実行してみると...

```shell
> go run ./
main.go:8:2: cannot find package "github.com/urfave/cli" in any of:
        C:\Go\src\github.com\urfave\cli (from $GOROOT)
        $GOPATH\src\github.com\urfave\cli (from $GOPATH)
```

`$GOROOT` や `$GOPATH` に該当のライブラリがないと言われてしまいました。



### インポートの前に

外部ライブラリを使用する場合、コード上で `import` するだけでは利用できず、実際にコードがダウンロードされている必要があります。

```shell
> go get github.com/urfave/cli
```

このように `go get` コマンドを実行することで、指定したライブラリを `$GOPATH/src` へダウンロードし、ビルドしてくれます。

ダウンロードできたら再度実行してみましょう！

```shell
> go run ./
Hello friend!
```

バッチリです！



# おわりに

GO言語 には標準でたくさんのライブラリが用意されています。

それ以上に多くのオープンソースのライブラリが存在します。

僕みたいな初心者では出来ないこともライブラリを使えばできてしまう...素敵ですね！

素晴らしいライブラリをどんどん利用しつつ、素敵な Golang Life を送っていきましょう！ :yum:
AWS初心者によるAWS CLIでMFAデバイス再設定

AWSでのログイン時にMFAを設定していたのですが、ケータイが突如壊れてしまい、MFA端末の再設定が必要になりました。

https://dev.classmethod.jp/cloud/aws/disable-iam-user-mfa-with-aws-cli/
こちらを参考に再設定を行ったのですが、初心者(わたし)がつまずいたポイントをフォローしました。
(間違い等ありましたらぜひご指摘ください！)



##まず一つ目のつまずき。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/265137/f73c8b15-d4d9-ea6b-f72b-364d95502e61.png)

「Uable to locate credentials. You can configure credentials by runung"aws configure".」
ってなに？です。
これはコマンドプロンプトから操作をする際はAWSのクレデンシャルを登録しなければならない、ということでした。(要はコネクトができてないよってことだと思います。)

https://www.task-notes.com/entry/20141026/1414322858
この「設定コマンド(configure)を使う」の項をみて設定することで解決しました。



##2つ目のつまずき。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/265137/6322d0c9-ca8e-a0ad-402f-ec5bfe6b8bbf.png)
これでMFAをDeactivateするコマンドが打てると思ったのですが、
今度はシリアルナンバーがおかしいとのこと。この時点で正しいシリアルナンバーが分かっていなかったので、シリアルナンバーを調べることに。

https://dev.classmethod.jp/cloud/aws/disable-iam-user-mfa-with-aws-cli/
これの「IAM ユーザーに設定された MFA デバイスを確認」の項でシリアルナンバーを確認しました。

あとは

```
$ aws iam deactivate-mfa-device --user-name ユーザー名 --serial-number シリアルナンバー
```

でコマンド実行。


手順通りで解決しました。
brewでxdebugをインストールする(PHP7.1)

Homebrewでxdebugをインストールできなくなったので、peclで入れる必要がある。

まずはPHP7.1をインストールしておく

```
brew install php@7.1
```

peclコマンドがphp@7.1のものか確認する

```
$ which pecl
/usr/local/opt/php@7.1/bin/pecl
```

xdebugをインストールする

```
pecl install xdebug
```

インストールされたか確認する

```
$ php -m | grep Xdebug
Xdebug
```
Linuxパスワード管理について

Linuxでシングルユーザーモードのログイン方法は、前の記事で述べた。

ログインしてからパスワードを解除する方法を書くよ。

パスワードは、passwdコマンドを使って設定するが、ファイルパスは

/etc/passwd　の中にある。

ユーザー名：パスワード（X）：日付・・：：：：

などの情報が書かれている行があるが、
※これはshadowというパスワードを管理するファイルの情報を**参照**しているだけだよ。

実際パスワードを管理しているのは、

**/etc/shadow**　である。

shadowファイルの　

ユーザー名：暗号化されたパスワード：パスワードの設定された日付・・・：：：

ハッシュ化されたパスワードの文字列を削除すれば、
**パスワード無し！**
の状態になるよ。

これでもう、シングルユーザーモードでブートしなくても普通にパスワード無しでログインできるよ。


---
nuxt.jsにおける「components」ディレクトリの規約（案）


nuxt.jsでは、特殊な事情がない限り３つのディレクトリにコンポーネントファイルが格納されます。[`layouts`](https://ja.nuxtjs.org/guide/views#%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88) [`pages`](https://ja.nuxtjs.org/guide/views#%E3%83%9A%E3%83%BC%E3%82%B8)ディレクトリについては公式ドキュメントを参考にし、残りの`components`ディレクトリについてオリジナルの規約（整理方法)を定めてます。~~後々喧嘩にならならないように~~。

- /layouts
- /pages
- /components <- オリジナルの規約について

## 「components」ディレクトリの規約（案）

規約はいいすぎ？以下は至極基礎的な案なので、みんな仲良く話し合えばいいと思います。


### 格納するファイル

`components`ディレクトリに格納するのは、「再利用可能」もしくは「複数回利用」するコンポーネントと定めます。

- 再利用可能なコンポーネント
    - 他プロジェクトでも流用する可能性がある
    - 他プロジェクトでも必ず作成するから置き場を固定したい
- 複数回利用するコンポーネント
    - UIに関するコンポーネント
    - カテゴリ単位で使い回すコンポーネントなど

### ディレクトリ構成

`components`はシンプルに保つために「layouts」「pages」「ui」の３つに分けます。nuxt.jsの規約に合わせるでこと悩む時間を削減します。

- /components
    - /layouts
        - header・footer要素など、レイアウトに関係するコンポーネント
        - プロジェクトをまたいで再利用されやすい
    - /pages
        - だいたいカテゴリ（ページ）単位で流用するコンポーネント
        - 再利用されないけど、複数回利用されやすい
    - /ui
        - 名前まんまで、ボタンとかuiのコンポーネント
        - プロジェクトをまたいでの再利用もサイト内でも利用もされまくり
        - ~~いうなれば自分たちの資産の塊だから大事にしようね~~

## 呼び出し方法について

「layouts」と「pages」は、個別にコンポーネントを登録しても手間はありません。「ui」は肥大化しがちなので**一括で登録**します。

### 個別登録＆呼び出し（例）

```vue:layouts/default.vue
<template>
  <div class="layouts">
    <header class="layouts__header">
      <l-header />
      <l-nav />
    </header>
    <main class="layouts__main">
      <nuxt />
    </main>
    <footer class="layouts__footer">
      <l-footer />
    </footer>
  </div>
</template>

<script>
import LHeader from '~/components/layouts/header'
import LNav from '~/components/layouts/nav'
import LFooter from '~/components/layouts/footer'

export default {
  components: {
    LlHeader,
    LNav,
    LFooter,
    ...
  },
  ...
}
</script>
```

### 一括登録＆呼び出し（例）

`plugins`経由で登録を行うことで、どこからでも呼び出せるようにします。

１）ui.jsを作成

```javascript:plugins/ui.js
import Vue from 'vue'


import TthTitle from '~/components/ui/TheTitle'
import BaseSection from '~/components/ui/BaseSection'
import BaseHr from '~/components/ui/BaseHr'
import BaseHeading from '~/components/ui/BaseHeading'
import BaseButtonReadmore from '~/components/ui/BaseButtonReadmore'

Vue.mixin({
  components: {
    TheTitle,
    BaseSection,
    BaseHr,
    BaseHeading,
    BaseButtonReadmore
  }
})
```

2)ui.jsをnuxt.confing.jsに登録

```javascript:nuxt.config.js
module.exports = {
  plugins: [
    '~plugins/ui',
    ...
  ],
  ...
}
```

3)呼び出しテスト

```vue:test.vue
<template>
  <div>
    <TheTitle title="規約大好き" sub="love" />
    <BaseSection>
      <BaseHeading title="h２タイトル" sub="h2-hdding" lank="h2" />
      <p>コンテンツ</p>
      <BaseHr />
      <BaseButtonReadmore to="/yourDir/" />
    </BaseSection>
  </div>
</template>
```

---

### おまけ

アトミックデザインは優秀だと思いますが、何でもかんでも~~アトミックボンバー~~…はやりすぎと感じるところです。小規模ならば、少し決め事しておくだけでいいと思います。いろんな案があると思いますので、ご意見お待ちしております。

何はともあれ…

シンプルに生きたいのです。

### 更新履歴

- 2020/2/4　pugをhtml表記に修正しました。文言を少しリライトしました。
- 2020/2/5 コンポーネントの命名規則を[スタイルガイド](https://jp.vuejs.org/v2/style-guide/)に合わせました。
Nextcloud のファイルアクセス制限

#はじめに
Nextcloudでオンラインストレージ環境を構築すれば、どこからでもアクセスができて便利になります。その反面、自由にファイルにアクセスができるので、企業で利用となると、ある程度の制限が必要になります。Nextcloudでは、ファイルアクセス制限機能があり、管理者が細かくルールを設定する事ができます。

#プラグイン
File access controlというプラグインです。有効にします。
![画像105.png](https://qiita-image-store.s3.amazonaws.com/0/308127/d14139f1-af6a-4424-4d71-4842cf93d91e.png)

#設定方法
プラグインが有効になると、管理者設定のメニューに、ファイルアクセス制限が追加されます。
![画像106.png](https://qiita-image-store.s3.amazonaws.com/0/308127/b5dc5f56-e64a-db25-929f-3edebb8f168a.png)

ルールを追加してみます。最初はシンプルに。Androidアプリからのアクセスを禁止してみます。
![画像107.png](https://qiita-image-store.s3.amazonaws.com/0/308127/1f81bad8-b736-3716-f9ff-48d730312af2.png)

Androidアプリで接続すると、フォルダは表示されますが、新規で作成したファイルは表示されません。また、過去にアクセスしたファイルは、一覧表示されますが、ダウンロードがNGとなります。もちろん端末からのアップロードもNGになります。
![画像110.png](https://qiita-image-store.s3.amazonaws.com/0/308127/620605a6-2e29-200d-fe9c-d67e7b87d6cc.png)

色んな組み合わせでルールを設定できます。
![画像108.png](https://qiita-image-store.s3.amazonaws.com/0/308127/a81590bc-f8b7-ad76-bf8a-007bf94744c3.png)

例えば、「営業グループは日中以外はスマフォからアクセス禁止」だとこんな感じですかね。
![画像109.png](https://qiita-image-store.s3.amazonaws.com/0/308127/5dd3ba39-ff10-8d3b-2650-c6b46c712794.png)

#まとめ
今回は、シンプル設定を紹介しましたが、結構細かく設定できるので、きちんとルールを決めて運用すれば、よりセキュアなオンラインストレージ環境となりますね。

この記事は、[スタイルズ社のNextcloudサイト](https://nextcloud.stylez.co.jp/nextcloudblog)にも公開しております。
Amazon Redshiftのカラム属性を変更する場合の手順

Redshiftでカラムの属性を変更する場合、一旦別名で変更後の属性でカラムを作った後、リネームして既存カラムと置き換える必要があります。

下記の例ではtable_nameというテーブルに対して、column_nameというカラムのデフォルト値を変更していますが、デフォルト値以外の変更も基本同じような対応で可能です。

##### column_name_tmpというカラム名で新しいカラムデフォルト値を設定する。

```sql
ALTER TABLE table_name ADD COLUMN column_name_tmp VARCHAR(20) DEFAULT 'new_default_value';
```

##### 既存カラム (column_name) の値を先ほど作成したcolumn_name_tmpにコピーする。

```sql
UPDATE table_name SET column_name_tmp = column_name;
```

##### 既存カラムを削除する。

```sql
ALTER TABLE table_name DROP COLUMN column_name CASCADE;
```

##### 新しく作成したカラムを既存カラム名にリネームする。

```sql
ALTER TABLE table_name RENAME COLUMN column_name_tmp TO column_name;
```

##### 旧のデフォルト値で入っていたデータの更新

```sql
UPDATE table_name SET column_name = 'new_default_value' WHERE column_name = 'old_default_value';
```

##### 権限がリセットされてしまった場合はつけ直す

```sql
-- user_nameに対してtable_nameテーブルの全操作を許可
grant all privileges on table_name TO user_name;
-- 確認
\z
```
vbsの作法 その17


#概要

vbsの作法調べてみた。
2点間の距離と方位角やってみた。

#参考にしたページ

http://hp.vector.co.jp/authors/VA002244/yacht/geo.htm

#サンプルコード

```
Dim pi
PI = 4 * Atn(1)
msgbox PI

Function Atan2(y, x)
	If x = 0 Then
		If y > 0 Then
			Atan2 = PI / 2
		Else
			Atan2 = -PI / 2
		End if
	Else
		Atan2 = Atn(y / x)
		If x < 0 Then
			If y >= 0 Then
				Atan2 = Atan2 + PI
			Else
				Atan2 = Atan2 - PI
			End if
		End if
	End If
	If Atan2 < 0 Then Atan2 = Atan2 + 2 * PI
End Function

Function Dist(i0, k0, i1, k1)
	Rx = 6378137
	E2 = 6.69437999019758E-03
	di = i1 - i0
	dk = k1 - k0
	i = (i0 + i1) / 2
	W = Sqr(1 - E2 * Sin(i * Pi / 180) ^ 2)
	M = Rx * (1 - E2) / W ^ 3
	N = Rx / W
	Dist = Sqr((di * PI / 180 * M) ^ 2 + (dk * PI / 180 * N * Cos(i * PI / 180)) ^ 2)
End Function

Function Dir(i0, k0, i1, k1)
	Rx = 6378137
	E2 = 6.69437999019758E-03
	di = i1 - i0
	dk = k1 - k0
	i = (i0 + i1) / 2
	W = Sqr(1 - E2 * Sin(i * PI / 180) ^ 2)
	M = Rx * (1 - E2) / W ^ 3
	N = Rx / W
	ddi = di * PI / 180 * M
	ddk = dk * PI / 180 * N * Cos(i * PI / 180)
	a = Atan2(ddi, ddk) * 180 / PI + 360
	If (a >= 360) Then a = a - 360
	Dir = a
End Function

msgbox Dist(35.0, 140.0, 36.0, 140.0)
msgbox Dir(35.0, 140.0, 36.0, 140.0)


```
方位角がおかしい。


以上。
singleユーザモードでログイン

パスワードがかかっていてログインできない場合など。

**シングルユーザーモード**で起動することができるよ。

### 手順
①ブート時に（ GRUB スプラッシュ画面）　**Eキー**
②カーネルと書いてあるものを選択（2番目くらい選択肢）**Eキー**
③編集で末尾に `半角スペース + single`　と記入 **Enterキー**
④カーネル選択画面で編集したカーネルのところで　**Bキー**

ログイン完了！
---
adjustに溜まった広告IDの削除方法


# 背景
Adjustの広告SDKのテスト手順として、初期手順で必要な為
備忘録の為に書きました。

# 広告IDデータの確認手順

IDFAを調べるには、こちらのヘルプ画面に記載されていますが、Adjustの純正アプリで確認できます
(https://ja.help.adjust.com/resources/testing-console)

## デバイスの広告IDが確認できるアプリ
以下のアプリで確認できます。
各アプリとも、起動するとIDが確認ができます。

## ◆Adjust純正アプリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252082/97a5b572-754d-4f78-9e30-832828217181.png)

https://itunes.apple.com/us/app/adjust-insights/id1125517808?mt=8

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252082/253327b1-2b94-4d14-a7db-35c811f0c752.png)

https://play.google.com/store/apps/details?id=com.adjust.insights&hl=en

## ◆Adjust以外のアプリ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/252082/12f3404d-4484-280e-1735-a7a6f4af6255.png)
https://itunes.apple.com/jp/app/myidfa/id1099872451?mt=8


# Adjsutサーバにたまったテスト用端末の広告IDデータの削除手順
「２．計測データの削除」を参照
https://docs.adjust.com/ja/testing-console/#part-2

以下事前に確認した該当端末の広告IDを入力するだけで、アトリビューションデータの閲覧やイベントの挙動データの確認、テスト毎のデバイスデータの削除ができます。
※Adjustテストコンソールは、管理者または編集者権限をもつダッシュボードユーザーのみ利用可能。

１．アプリ設定 > (データ管理) テストコンソール
![image.png](https://qiita-image-store.s3.amazonaws.com/0/252082/dc82fb8d-1c56-86aa-0fb3-a6e961373354.png)

２．端末IDを入力し、デバイスデータを表示 にクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/252082/22b504cd-ed86-1f14-c545-53f06955769b.png)

３．デバイスデータを削除
![image.png](https://qiita-image-store.s3.amazonaws.com/0/252082/9a5080d3-ca3c-35e5-d09d-0d133cd2ba82.png)
SQLite3のJSON機能が便利だった2

#前回の内容
[SQLite3のJSON機能が便利だった](https://qiita.com/SoraKumo/items/0e3455684d6f17d36895)

#JSON文字列を挿入してみる

　前回は抽出時に複数のレコードの内容を一つのJSONテキストに変換できるという内容を取り扱った。そもそも記事にしたのはこんなに便利なのにjson_group_objectやjson_group_arrayの具体的な使い方が、検索に全然引っかからなかったためだ。今回はデータを挿入するときに便利なjson_eachについての内容を書いていきたい

##テーブル構造
```SQL
create table json_table(name text primary key,value json)
```

　前回同様、この形でテーブルを作る。nameがprimary keyになっているので、nameによる検索は高速に行うことが出来る。

##データの挿入
　先ほど作ったテーブルにデータを挿入しようと思ったら以下のようになる。今回も上書き挿入を前提とするのでreplaceを使う。

```SQL
replace into json_table values('a','{"c":789}');
replace into json_table values('b','456')
```

　特に便利でも何でも無い。しかしjson_eachを使うと、以下のように書くことが出来る

```SQL
replace into json_table select key,value from json_each('{"a":{"c":789},"b":456}')
```

テーブルの状態

|name|value|
|:---|:---|
|a|{"c":789}|
|b|456|


　json_eachの中にJSON文字列を突っ込むだけで、一度の処理で複数レコードの挿入が可能になるのだ。JSONと相性が良い開発言語ならJSONにパースするメソッドを間に挟むだけで、変数のデータを一気に流し込むことが可能だ。しかもnameに関してはindexが効いているので、高速に取り出すことが出来る。


#まとめ

　これだけ便利なのに、具体的な使い方が検索に引っかからない残念な状態となっている。他にも使い道を覚えれば便利に活用できる機能が埋もれている可能性があるので、引き続き色々と試していきたい。
centos7【epelからxrdpがインストールできない】

#centos7でxrdpのインストールエラー

```
# yum install epel-release
# yum install xrdp
```

でいつもはインストールできるのだが、どうやらxrdpのバージョンアップのタイミングか何かでインストール時にエラーを吐いて止まってしまう。
数日待っていればそのうち解決しそうだが、急ぎの時は最新がcr(continuous release)レポジトリに上がっているようなのでそちらを使うとよいよう。

```
# yum install xrdp --enablerepo=cr
```

参考
https://unix.stackexchange.com/questions/482502/cant-install-xrdp-on-centos-7-5/483087#483087?s=8224e589344642aca605260ca842d77e
超初心者でもDeepLab v3+でオリジナルデータをセグメンテーションできるようになる記事

#！この記事は未完成です！
[2018/11/21]
ゆっくり書いていきます。
「需要は多くはないが、1人1人の悩みが比較的深い」という分野だと思うので、views数とコメントに応じて記事作成速度を加速。

# 作業環境
[マシン]
Ubuntu 16.04
GTX1080Ti
メモリ32GB

[ツール]
CUDA 9.0
nvidia-driver 410.73
Docker version 18.06.1-ce, build e68fc7a

# 大まかな手順
1. PYTHONPATHを通す。
2. ディレクトリ構造を作る。（download_and_convert_voc2012.shでできる構造を使えば良い）
3. 教師データを作成して配置する。
4. build_vooc2012_data.pyを編集するか、tfrecordへの変換用スクリプトを作成する。
5. 教師データをtfrecordに変換する。
6. train.pyで学習させる。
7. vis.pyで可視化する。
Go言語の環境構築 Hello Worldまで

# Go言語の環境構築

思い立ったが吉日で，Go言語の開発環境を整えることにした．環境はMacで行った．基本的にコマンドラインからコマンド叩くだけで終わったATOMでよく開発をしているのでその周りもやっていった．

* Homebrew が入っている前提とします

### Goのインストール
`brew install go`
でgoのパッケージを取得

### コマンドのパスを通す
```bash:bash
mkdir ~/Go
export GOPATH=$HOME/Go
export PATH=$PATH:$GOPATH/bin
```
これでホーム直下のGoにパスが通る．
試しにHello Worldを書いて見る

```shell:bash
cd ~/Go
atom Hello.go
```
でHello.goを開く

Hello.goはこんな感じ

```go:Hello.go
package main

import "fmt"

func main(){
  fmt.Printf("Hello World\n");
}

```
これで実行する

`go run Hello.go`
でHello Worldが出力される

## ATOMでの開発環境設定
他の記事を見ていたら実行できないコマンドあったけれど最新はこれで全部入るはず

```bash:bash
go get golang.org/x/tools/cmd/goimports
go get github.com/nsf/gocode
go get github.com/rogpeppe/godef

go get -u github.com/derekparker/delve/cmd/dlv
```

でATOM側が必要としているパッケージが揃う
最後のコマンドを実行して`dlv`がインストールできた

## ATOM側のパッケージインストール
```bash:bash
apm install go-plus
apm install godef
```
で完了

参考記事
https://qiita.com/m0a/items/b7b27254a43d50b7aba2
Windowsローカルフォルダにリモートリポジトリを作る方法(git version 2.12.2.windows.1)

# 動機
- 研究用途で1人コーディング中
- インターネットつながってない状態
- サーバーを使えない
- リモートリポジトリを使いたい

# この記事の位置づけ
[この記事](https://qiita.com/le_skamba/items/4c5491e59c4ae967ba6b)を参考にしたが、下記のような状態になり上手くいかなかったので、
いろいろ調整しつつ出来上がった備忘録

- push はエラーでずに上手くいった
- 別の場所に試しにクローンしたら空っぽだった
 - ※空のリポジトリをクローンしようとしているというwarningが出た

# 環境
- Windows7 Pro 64bit
- git-gui (version 0.21.GITGUI)
- git version 2.12.2.windows.1

# 作業開始時点の状況
- ローカルリポジトリはある（すでにコミット済み）
- リモートリポジトリは登録すらしてない

# 手順
## 1. リモートリポジトリのフォルダ作成
- リモートリポジトリの役割を果たすフォルダを作成する
- 今回は`E:\repo`とする

## 2. リモートリポジトリの初期化
- <font color=red>※3.で`GitGUIでやる場合`を選択するとこの手順は不要</font>

```
$ cd E:\repo
$ git init --bare --shared=true
```

## 3. ローカルリポジトリでリモートの登録
### Git Bash でやる場合
```
$ git remote add origin "E:\repo"
$ git remote -v
origin E:\repo (fetch)
origin E:\repo (push)
```
- URL部分をダブルクオーテーションで囲むことが重要
- これではまってしまった
- ダブルクォーテーションで囲まない場合.git

### Git GUI でやる場合
- <font color=red>※この場合2の手順は不要</font>
- ソース管理しているフォルダで右クリック
 - コンテキストメニューから `Git GUI Here`
- Window上部で `[Remote] -> [Add]` を選択
- __Add Remote__ ダイアログが開く
- __Name:__ に任意の文字列入力（後のことを考えて `origin` を入力）
- __Location:__ にリモートリポジトリにするフォルダパス`E:\repo` を入力
- __Further Action__ で `Initialize Remote Repository and Push` を選択してAdd
- 処理結果がダイアログに出力される（緑のハイライトでsuccessが出たらOK）

## 4. リモートリポジトリをクローンしてみる
- pushできているか確認するために別のフォルダにクローンしてみる
- 適当なフォルダを作りクローンする

### GUIでやる場合
- 適当なフォルダ( __CloneTest__ )を作る
- CloneTestフォルダ上で右クリック
- コンテキストメニューから `Git Clone` を選択
- __URL:__ クローン元のリモートリポジトリを入力
- __Directory:__ クローン先のフォルダパスを入力
- `OK`を押下

### Git Bashでやる場合
- リモートリポジトリ登録時と同様 __ダブルクォーテーションで囲む__ こと

```
$ mkdir CloneTest
$ cd CloneTest
$ git clone "E:\repo"
```

# 参考
- https://eng-entrance.com/git-remote
- https://qiita.com/le_skamba/items/4c5491e59c4ae967ba6b
VPS + docker でdjangoの立ち上げまでで詰まったからメモ

### 対象者
> VPS + Docker + Djangoの環境構築で詰まった人

### 環境
> Ubuntu 18.04(ConohaVPS) 

### 前提 
> docker & docker-compose が使用可能

### したいこと
docker で ポンっできましたくらいの勢いで、
Djangoのロケットが飛んでる画像がブラウザで見れるとこ作りたい.

### 詰まったところ
Django のALLOWED_HOST の設定がミスってた。

解決策
=> 立ち上げと同時に書き変えるようにbashfileに設定

### 構成
以下のような構成になってます。

```
Django/
　├ Dockerfile
　├ docker-compose.yml
　├ startup.sh
　└ requirements.txt

```

### 各fileの中身
```Dockerfile:Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED 1

RUN apt-get update
RUN mkdir /test
ADD requirements.txt /test/
WORKDIR /test
RUN pip install -r requirements.txt
RUN apt-get install -y vim
RUN django-admin startproject mysite
RUN cd mysite

COPY startup.sh /startup.sh
RUN chmod 744 /startup.sh
CMD ["/startup.sh"]
```

```docker-compose.yml:docker-compose.yml

version: '2'
services:
  web:
    build: .
    container_name: 'django'
    ports:
      - "8080:8000"

```
 
```sh:startup.sh
#!/usr/bin/env bash
pwd
cd mysite/mysite
pwd

ls

sed -i -e "s/ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = \[\'ここに使用するIPアドレス or ドメイン or *\'\]/p" ./settings.py

ls
cat settings.py
cd ..
pwd
python3 manage.py runserver 0.0.0.0:8000
```

```:requirements.txt
Django>=2.1
PyMySQL
```

### 終わりに
startup .sh 内にsed でsetting.pyの中身を変更したことで解決しました。
startup.sh のpwdはコンテナのlog を確かめるために書いてたやつです。

ちょっと立ち上げたかっただけなので、他に開発環境などは作っていません。今後,がっつり開発に使うならDBなどの設定も考えて行きたいと思います。
Kibanaのフィルタ

Kibana初心者です。fluentd - Elasticsearch - Kibana を連携して、とりあえずapacheのログを見れるようになったはいいものの、使い方をよくわかってないためグラフ(Visualize)したら除外したいcssやらpngが混じってる...

## filter機能

### 標準機能 Search filter values

filter機能とやらがあるそうなので、それを試して見ます。
<img width="600" alt="Search filter values" src="https://qiita-image-store.s3.amazonaws.com/0/51116/6ed1051a-85d0-cd42-121b-e87cccaa192c.png">
むむ！正規表現とかできないの？
いちいちstyle.cssとかを指定しないとダメなのか〜

### Query DSL

Edit Query DSLというとこをクリックすると簡易版ではなくてフィルタクエリが指定できるようです。

<img width="601" alt="Edit Query DSL" src="https://qiita-image-store.s3.amazonaws.com/0/51116/40c5604e-e55d-60d4-afba-3ba58f36052b.png">

DSLはデジタル加入者線の略じゃなくてDomain Specific Languageってやつですね、専用のクエリー言語です。
いろいろ調べてこんな感じに書いてみました。png,css,ico,jsonを除外します。

```json
{
  "query": {
    "bool": {
      "must_not": [
        {
          "wildcard": {
            "path": "*.png"
          }
        },
        {
          "wildcard": {
            "path": "*.css"
          }
        },
        {
          "wildcard": {
            "path": "*.ico"
          }
        },
        {
          "wildcard": {
            "path": "*.json"
          }
        }
      ]
    }
  }
}
```
DSLの解説は、[Elasticsearch Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl.html)を参考にしました。


## Uses lucene query syntax

[Uses lucene query syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-query-string-query.html#query-string-syntax)のところでも指定できますね。
上のとは構文が違って、下記のようになります。

```
NOT (path:*.png | path:*.ico | path:*.css | path:*.json )
```

うむ、まだよくわからん...
小技 アカウント名を別名Aliasをつける

参考にしたURL https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/console_account-alias.html

AWS管理コンソールにログインする時の`Account ID or Alias`に該当する部分の話です。
![スクリーンショット 2018-11-20 14.36.54.png](https://qiita-image-store.s3.amazonaws.com/0/158076/36f1e313-a759-7433-345b-0457b24420a1.png)


AWSアカウントにIAMユーザーでログインする時に、上のイメージの`greenyellowred`のようにアカウントID以外の覚えやすい識別子(例えば会社名やプロジェクト名)にしたい場合、以下の手順で変更できます。

まず、ルートアカウント並に権限を持ったIAMユーザーでログインします。

###IAMを選択
![スクリーンショット 2018-11-20 14.45.54.png](https://qiita-image-store.s3.amazonaws.com/0/158076/9772aac5-7b10-caf8-0992-e9f247e08493.png)

### Aliasを設定

`IAM users sign-in link` の右側の`Customize`をクリック
好きなAliasを設定することができます。
![スクリーンショット 2018-11-20 14.47.56.png](https://qiita-image-store.s3.amazonaws.com/0/158076/bec1072a-c71e-7e91-df69-ace10188852a.png)

以上です。簡単でしたね。
【Unity(C#)】GameObjectをスクリプトで生成する

　　
　　
　　

この記事は

**『プログラミング完全未経験からUnityでの開発現場に迎え入れてもらえた世界一の幸せ者』**

の記事です。そのつもりでお読みください。


##GameObjectをスクリプトで生成する
今回は例としてキャンバスを作ります。


```C#
GameObject canvas_G = new GameObject("Dynamic_Gene_Canvas");
canvas_G.AddComponent<Canvas>();
canvas_G.AddComponent<CanvasScaler>();
canvas_G.AddComponent<GraphicRaycaster>();

```
`GameObject 変数名 = new GameObject("オブジェクト名");`
　　↑　この処理でHierarchyに空のオブジェクトが作られます。オブジェクトの名前はカッコ内で定義できます。

`変数名.AddComponent<コンポーネントの名前>();`　　
　　↑　この処理でコンポーネントを追加することができます。
PostgreSQLでビューをもとにテーブルを作成する

## ビューを定義する

```
CREATE VIEW public.v_tasks AS
 SELECT * from <テーブル名>　～
```

## ビューをもとにテーブルを作成する
PostgreSQLの create table asは、テーブルだけでなく、ビューを指定することも可能です。

```
create table <作成したいテーブル名> as select * from <ビュー名>;
```

## 参考
- CREATE TABLE AS — 問い合わせの結果によって新しいテーブルを定義する
    - https://www.postgresql.jp/document/10/html/sql-createtableas.html
[CentOS7] Nginx サーバーで PHP-FPM を使って PHP を実行させるための設定

#環境

CentOS: 7.4
PHP: 7.2
Nginx: 1.14

#やりたいこと

Nginx サーバーの環境下で PHP を実行できるように設定を行います。

ルートディレクトリは `/home/user_name/projects` として設定します。
（ここは自分の好きなディレクトリを設定して問題ありません。）

#前提条件

以下のインストールが完了していることを前提に設定を行います。

- PHP
- Nginx
- PHP-FPM（NginxでPHPを実行するために必要）

インストール方法については[【CentOS】PHP、PHP-FPM、NginX のインストール][link_1]をご確認ください。

[link_1]:https://qiita.com/u-dai/items/8a8c34a5de8d7bf72a19

#Nginx の設定

##ポートの設定

`/etc/nginx/conf.d/default.conf` の設定ファイルを編集します。

Apache と同時起動したいので、Apach で指定しているポートは使用できません。
今回は Apache で 80 番を指定しているため、Nginx では 8080 番を利用します。

```/etc/nginx/conf.d/default.conf
server {
    listen       8080;
    server_name  localhost;
    ...
```

##PHP関連の設定

次に、Nginx で PHP が実行できるようにするための設定を行います。
設定するファイルは同じく `/etc/nginx/conf.d/default.conf` です。

初期設定では `location ~ \.php$ {...}` の全体がコメントアウトされているため外します。
また、`root` と `fastcgi_param` の部分にルートディレクトリを設定します。

```/etc/nginx/conf.d/default.conf
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    location ~ \.php$ {
        root           /home/user_name/projects;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /home/user_name/projects$fastcgi_script_name;
        include        fastcgi_params;
    }
```

##設定を反映させる

Nginx を起動（再起動）します。
ターミナルから以下のコマンドを入力して実行します。

```
$ sudo systemctl restart nginx
```

#PHP-FPM の設定

user と group を nginx に変更します。
初期設定では apache となっているので、コメントアウト（もしくは削除）します。

```/etc/php-fpm.d/www.conf
;user = apache
user = nginx

;group = apache
group = nginx
```

##設定を反映させる

PHP-FPM を再起動します。
ターミナルから以下のコマンドを入力して実行します。

```
$ sudo systemctl restart nginx
```

#Nginx で PHP を実行させる

##実行用ファイルの作成

ルートディレクトリに `index.php` を作成します。
正しく設定できていれば、ルートディレクトリにアクセスしたとき Nginx が `index.php` を実行します。

```/home/user_name/projects/index.php
<?php phpinfo(); ?>
```

##PHP の実行

ブラウザのURLに `localhost:8080` と入力して、以下の画面が表示されれば成功です（8080 は自分が設定した Nginx のポート番号）。
これはルートディレクトリ（`/home/user_name/projects`）の `index.php` が実行された結果です。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/238891/9917baa7-0123-847f-336e-2b599bd61060.png)