OmniAICreator/Qiita-1.07M huggingface dataset:
SQLServerでUnicodeの外字領域文字を確認するテーブルを作成する

Unicodeの外字領域(E000～F8FF)に文字が入っているか確認するサンプルコードです。

## サンプル
```sql:eudc.sql
CREATE TABLE eudc(
  private_use_area nvarchar(4) NOT NULL,
  char_eudc        nvarchar(1) NOT NULL);

DECLARE @EUDC_START INT = 57344; -- E000
DECLARE @EUDC_END   INT = 63743; -- F8FF
DECLARE @EUDC_Char  INT = @EUDC_START;

WHILE (@EUDC_Char <= @EUDC_END)
BEGIN
  
  INSERT INTO eudc(private_use_area,char_eudc)
  VALUES(CONVERT(VARCHAR(4), CAST((@EUDC_Char) AS VARBINARY(2)), 2 ),NCHAR(@EUDC_Char));
 
  SET @EUDC_Char += 1;

END

```

### 参考
[Unicode（私用領域）](http://www.asahi-net.or.jp/~ax2s-kmtn/ref/unicode/private.html)
数量化一類（多変量解析入門Ⅰ　河口至商先生）

```{r}
#数量化1類

data=data.frame(販売率=c(3.0,1.8,1.5,3.3,2.2,2.0,3.5,2.0,1.7,2.3),大都市=c(1,0,0,1,1,1,1,0,1,1),地方都市=c(0,1,1,0,0,0,0,1,0,0),温暖=c(0,1,0,0,0,0,1,1,0,0),普通=c(1,0,1,1,0,0,0,0,0,0),寒冷=c(0,0,0,0,1,1,0,0,1,1))

X=data[,colnames(data)!="温暖"];X=X[,2:ncol(X)]

x=array(0,dim=c(length(colnames(X)),length(colnames(X))))

for(i in 1:ncol(X)){
for(j in 1:ncol(X)){  
  

  x[i,j]=sum(X[,i]*X[,j])
  
    
}
}

xy=array(0,dim=c(ncol(X),1))

for(i in 1:ncol(X)){
  
xy[i]=sum(X[,i]*data$販売率) 
  
}

A=solve(x)%*%xy

y=c()

for(j in 1:nrow(X)){
  
y=c(y,sum(X[j,]*A))  
  
}

h_y=y

ave_h_y=mean(h_y)

ave_x=apply(data[,2:ncol(data)],2,mean)

a1=A[1:2]-sum(A[1:2]*ave_x[1:2])

a2=t(t(c(0,A[3:4])))-sum(t(t(c(0,A[3:4])))*ave_x[3:5])

a=c(a1,a2)

result=data.frame(y=0,data[,2:ncol(data)])

ave_y=mean(data$販売率)

for(j in 1:nrow(result)){
  
result$y[j]=sum(a*data[j,2:ncol(data)])+ave_y
  
}

data=data %>% dplyr::mutate(予測=result$y)

R=sqrt((sum((data$予測-ave_y)^2))/sum((data$販売率-ave_y)^2))

```
VBA学习笔记1

一个SUB里面可以有多行命令语句，每条语句的结束并没有结束符号。
要是想把两条语句写到一行的话，需要在两个语句中间夹上“：”

例如：

```

Sub 方法名()
    Range("A:1").Value = 10 : Range("A:2").Value = 20
    Range("A:3").Value = 30
End Sub
```

还有就是不正确的换行也会导致程序运行错误。

例如：

```

Sub 方法名()
    Range("A:1").Value 
    = 10 
End Sub
```

非要任性的换行的话，可以在行尾添加一个下划线“_”

例如：

```

Sub 方法名()
    Range("A:1").Value _
    = 10 
End Sub
```
擬似要素にbackground-imageを入れて横並び

![bricks_900.jpg](https://qiita-image-store.s3.amazonaws.com/0/20635/6f8bf9b4-d19b-cb23-9a36-89a5fd6565cf.jpeg)

##目的
擬似要素で、background-imageで画像を入れ、横並びにする
<img width="410" alt="スクリーンショット 2018-04-25 10.33.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/20635/76f9df80-7aeb-6e71-3465-f1d258abdc6a.png">

## 過程
1-1、擬似要素に、background-iamgeで画像を入れる
1-2、擬似要素には、content:""; プロパティーが必須。
1-3、画像の幅、高さを指定する場合、セレクタターをblcokまたはinline-blickに変更する
1-4、親要素のwrapperにいつものflexを指定する

```slim:slim
.wrapper
  p ほげほげ
```

```scss:scss
wrapper {
  width: 400px;
  height: 400px;
  margin: 0 auto;
  background-color: #ccc;
  border: 1px solid black;
  display: flex;
  justify-content: center;
  align-items: center;
  &::before {
    content: "";
    display: inline-block;
    background-image: url("tonbo.png");
    background-size: contain;
    background-repeat: no-repeat;
    border: 1px solid #cccc;
    width: 100px;
    height: 100px;
  }
  &::after {
    content: "";
    display: inline-block;
    background-image: url("tonbo.png");
    background-size: contain;
    background-repeat: no-repeat;
    border: 1px solid #cccc;
    width: 100px;
    height: 100px;
  }
}

```
Node.js v10.0.0でnode-ffiを入れるには

npmに登録されているffiは利用しているNANが古いのでv9.x系以降は
対応していない模様。

しかし、githubのリポジトリのマスターはそこそこメンテされており、
ためしたら、リリースされたばかりのv10.0.0でも動いた。

```shell_session
npm i node-ffi/node-ffi
```

これで、```const ffi = require('ffi')``` として使える

# 関連記事

- [node-ffiをGoで入門してElectronを使って応用してみる - non vorrei lavorare](https://abrakatabura.hatenablog.com/entry/2015/12/11/000722)
- [NAPI版のnode-ffi-napiを使ってNode.jsからPythonを動かす - non vorrei lavorare](https://abrakatabura.hatenablog.com/entry/2019/09/30/234848)
Git管理下のプロジェクトで自分用のスクリプトを使いたい

## やりたいこと

- プロジェクトディレクトリ下でのみ有効なコマンドを作りたい
- 自分が使うためのものなので、Git管理下には置きたくない

## 手順
### 方針

- プロジェクトディレクトリに自分専用のフォルダ `tsuemura` を作る 
- `tsuemura/bin`にスクリプトを保存する
- Gitが`tsuemura`を常に無視するように設定する
- プロジェクトフォルダに入った時だけ `tsuemura/bin` にパスを通すようにする

### Gitの設定

MacなどUnix系OSの場合は`$HOME/.config/git/ignore`に下記設定を追加する。

````$HOME/.config/git/ignore
tsuemura
.envrc
```

Windowsの場合は事前にignoreファイルのパスをgitに設定しておかないといけない。PowerShellで以下を実行する。

```powershell
git config --global core.excludesfile "$Env:USERPROFILE\.config\git\ignore"
```

`tsuemura`　は自分用のスクリプトを入れておく場所。
ついでに`.DS_Store`とか`.vscode`とかも書いておくと吉。

`script`や`bin`でなく自分の名前にしてあるのは、プロジェクト内にもともと存在するファイルとの干渉を防ぐ為。

### direnvの設定

Homebrewを利用している場合は↓でOK。

```
$ brew install direnv
```

シェルの設定(bashの場合)

```
$ echo 'eval "$(direnv hook bash)"' >> .bashrc
$ source ~/.bashrc
```

プロジェクトディレクトリに移動して、`.envrc`というファイルにPATHの設定を書く。

```.envrc
export PATH=./tsuemura/bin:$PATH
```

direnvの設定を反映する。

```
$ direnv allow
```

## 確認

`tsuemura/bin`に保存したコマンドが、プロジェクトディレクトリ内では動く。

```bash:hello-world
#!/usr/bin/bash
echo "Hello World!
```

```
$ cd /path/to/your/project
$ hello-world

Hello World!
```

```
$ cd
direnv: unloading

$ hello-world

bash: command not found: hello-world
```
ニフクラ mobile backendをUnityで利用してみた

#はじめに
今回、Unityで利用したニフクラmobile backendについて参考にしたページを備忘録を兼ねて紹介したいと思います。

#動作環境
MacOS : 10.12.6
Unity : 5.6.5
mBaaS : Unity SDK 3.2.0

#準備
僕が環境設定するにあたり[クイックスタート](http://mb.cloud.nifty.com/doc/current/introduction/quickstart_unity.html#/Unity/)を参考にしました。

#データストア
僕が一番利用している機能がデータストアです. こちらも[データストア](http://mb.cloud.nifty.com/doc/current/datastore/basic_usage_unity.html)にサンプルが書き込まれているので、読んでいくと使えるようになっています。
例えば、Unityでスクリプトを新しく作り、

```cs:test.c#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using NCMB;
public class test : MonoBehaviour {
void Start () {
		NCMBObject obj = new NCMBObject ("Book");
		obj.Add ("test", "value");
		obj.SaveAsync ((NCMBException e) => {      
			if (e != null) {
				//エラー処理
			} else {
				//成功時の処理
			}                   
		});
	}
}
}
```
とするだけで、![スクリーンショット 2018-04-25 9.54.37.png](https://qiita-image-store.s3.amazonaws.com/0/246610/6d989dd1-bb69-8e38-a65c-223623031c40.png)

このようにデータが格納されます。

#さいごに
今回紹介したニフクラmobile backendですが、Unity SDK3.2.0からWebGLにも対応しています。僕自身、まだサーバーサイドをよく理解していなかったのですが、Unityからニフクラmobile backendのデータベースにアクセスしてゲームに反映するといったことがweb上から利用することができました。

###参考
[クイックスタート(Unity)](http://mb.cloud.nifty.com/doc/current/introduction/quickstart_unity.html#/Unity/)
[データストア(Unity)](http://mb.cloud.nifty.com/doc/current/datastore/basic_usage_unity.html)
Level 3. Coin Flip（The Ethernaut）

「The Ethernaut by Zeppelin Level 3. Coin Flip」を翻訳してみました（[CryptoZombies](https://cryptozombies.io/)のように？）
## **原文はこちら**
https://ethernaut.zeppelin.solutions
3. Coin Flipをクリック
## **3. Coin Flip**
難易度 3/6
コインフリップゲーム（コインを投げて裏表を当てるゲーム）にて結果を推測し、必勝パターンを構築する必要があるぞ。
このレベルのクリア条件は、予知能力を駆使して10回連続で結果を推測することだ。
（10回連続でコインの裏表を当てよ）
##### **回答の助けになるヒント**
- Solidity Remix IDEについて

## **ソースコード**

```javascript:
pragma solidity ^0.4.18;

contract CoinFlip {
  uint256 public consecutiveWins;
  uint256 lastHash;
  uint256 FACTOR = 57896044618658097711785492504343953926634992332820282019728792003956564819968;
  
  function CoinFlip() public {
    consecutiveWins = 0;
  }

  function flip(bool _guess) public returns (bool) {
    uint256 blockValue = uint256(block.blockhash(block.number-1));
    
    if (lastHash == blockValue) {
      revert();
    }

    lastHash = blockValue;
    uint256 coinFlip = uint256(uint256(blockValue) / FACTOR);
    bool side = coinFlip == 1 ? true : false;
    
    if (side == _guess) {
      consecutiveWins++;
      return true;
    } else {
      consecutiveWins = 0;
      return false;
    }
  }
}
```
2秒でできて生産性が上がるChromeでうっかり⌘ + Qを押しても悲しくならない魔法の設定

`⌘ + tab` を押そうとしてうっかり `⌘ + q` してしまい、悲しくなったchidakiyoです。

## モチベーション

↑に書いた通りですが、普段大量にタブを開いているので `⌘ + q` をうっかり押してしまったときの悲しさは言葉に表せないですよね。。。
再度Chromeを起動してもしばらく待つことになるので生産性が大幅に下がります。

## 生産性があがる魔法の設定

Chromeには標準で `⌘ + q` した時に確認をするというオプションがあります。

<img width="441" alt="スクリーンショット 2018-04-25 9.31.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/d6229423-7bb4-5a05-5d3f-a72c0b275681.png">

ここです。
`終了する前に警告すメッセージを表示する`

これにチェックを入れるだけで生産性が2000%アップしますね。

では、良いChromeライフを！
Level 2. Fallout（The Ethernaut）

「The Ethernaut by Zeppelin Level 2. Fallout」を翻訳してみました（[CryptoZombies](https://cryptozombies.io/)のように？）
## **原文はこちら**
https://ethernaut.zeppelin.solutions
2. Falloutをクリック
## **2. Fallout**
難易度 2/6
下記のコントラクトのオーナーを自分自身のアドレスに変更することがこのレベルのクリア条件だ。
##### **回答の助けになるヒント**
- Solidity Remix IDEについて

## **ソースコード**

```javascript:
pragma solidity ^0.4.18;

import 'zeppelin-solidity/contracts/ownership/Ownable.sol';

contract Fallout is Ownable {

  mapping (address => uint) allocations;

  /* constructor */
  function Fal1out() public payable {
    owner = msg.sender;
    allocations[owner] = msg.value;
  }

  function allocate() public payable {
    allocations[msg.sender] += msg.value;
  }

  function sendAllocation(address allocator) public {
    require(allocations[allocator] > 0);
    allocator.transfer(allocations[allocator]);
  }

  function collectAllocations() public onlyOwner {
    msg.sender.transfer(this.balance);
  }

  function allocatorBalance(address allocator) public view returns (uint) {
    return allocations[allocator];
  }
}
```
【CSS小ネタ】liタグ4行以上を非表示する代わりに「…」を表示する

というのを、JavaScriptを使うのも面倒だなと思い、CSSだけで実現しました。
CSSのコメントで解説書きました～。

```css
/*とりあえず、無条件で3番目の要素の後に…を挿入する*/
ul > li:nth-child(3)::after{
    content: '…';
}

/*最後の要素の後に空文字を挿入する。これにより、要素数が3個の場合は…が空文字へ上書きされる*/
ul > li:last-child::after{
    content: '';
}

/*4行目以降は非表示にする。*/
ul > li:nth-child(n+4){
    display: none;
}

```

```html
<ul>
    <li>パルミジャーノ・レッジャーノ</li>
</ul>

<ul>
    <li>パルミジャーノ・レッジャーノ</li>
    <li>ゴルゴンゾーラ</li>
</ul>

<ul>
    <li>パルミジャーノ・レッジャーノ</li>
    <li>ゴルゴンゾーラ</li>
    <li>タレッジョ</li>
</ul>

<ul>
    <li>パルミジャーノ・レッジャーノ</li>
    <li>ゴルゴンゾーラ</li>
    <li>タレッジョ</li>
    <li>モッツァレラ</li>
</ul>

<ul>
    <li>パルミジャーノ・レッジャーノ</li>
    <li>ゴルゴンゾーラ</li>
    <li>タレッジョ</li>
    <li>モッツァレラ</li>
    <li>カチョカバロ</li>
</ul>
```
<p data-height="265" data-theme-id="0" data-slug-hash="wjGLgR" data-default-tab="html,result" data-user="momosetkn" data-embed-version="2" data-pen-title="4行以上の場合に省略表示する" class="codepen">See the Pen <a href="https://codepen.io/momosetkn/pen/wjGLgR/">4行以上の場合に省略表示する</a> by momosetkn (<a href="https://codepen.io/momosetkn">@momosetkn</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

# 参考資料

[何番目系の便利なCSSまとめ - Qiita](https://qiita.com/ituki_b/items/62a752389385de7ba4a2)
Level 1. Fallback （The Ethernaut）

「The Ethernaut by Zeppelin Level 1. Fallback」を翻訳してみました（[CryptoZombies](https://cryptozombies.io/)のように？）
## **原文はこちら**
https://ethernaut.zeppelin.solutions/level/0x234094aac85628444a82dae0396c680974260be7
1. Fallbackをクリック
## **1. フォールバック** 
難易度 1/6
下記のコントラクトコードをよく見るのだ。
このレベルのクリア条件は
1. スマートコントラクトのオーナーを自分自身のアドレスに変更する
2. コントラクトの残高を0にする
#####**回答の助けになるヒント**
- ABI(Application Binary Interface)とやり取りするときにether を送る方法
- ABIの外部にether を送る方法
- wei/etherとの間で変換する(help()コマンドで参照)
- フォールバックメソッドについて


## **ソースコード**

```javascript:
pragma solidity ^0.4.18;

import 'zeppelin-solidity/contracts/ownership/Ownable.sol';

contract Fallback is Ownable {

  mapping(address => uint) public contributions;

  function Fallback() public {
    contributions[msg.sender] = 1000 * (1 ether);
  }

  function contribute() public payable {
    require(msg.value < 0.001 ether);
    contributions[msg.sender] += msg.value;
    if(contributions[msg.sender] > contributions[owner]) {
      owner = msg.sender;
    }
  }

  function getContribution() public view returns (uint) {
    return contributions[msg.sender];
  }

  function withdraw() public onlyOwner {
    owner.transfer(this.balance);
  }

  function() payable public {
    require(msg.value > 0 && contributions[msg.sender] > 0);
    owner = msg.sender;
  }
}
```
[C#] Mono.Optionsを使ってコマンドライン引数を解析する

# Mono.Optionsを使ってコマンドライン引数を解析する

QiitaでMono.Optionsに関する記事が恐らく見当たらなかったため、Mono.Optionsの使い方を記載する。

## Mono.Optionsの使い方
[Mono.Options](https://www.nuget.org/packages/Mono.Options/)とは、コマンドライン引数を解析するNugetパッケージのライブラリのこと。  
  
今回は、3つの処理をそれぞれ説明する。

- オプションを定義する
- オプションを解析する
- オプションの説明文を出力する

### オプションを定義する
OptionSetインスタンスにて、解析したいオプションを定義する。

```cs

OptionSet p = new OptionSet () {
  { /* オプション名 */, /* オプションの説明文 */, v => { /* 引数の処理方法 */ } },
};

```

__オプション名__
指定するオプション名を記載する。
|を用いて複数の形式でオプションを指定することが可能である。 
同じオプション名を記載するとArgumentExceptionが発生する。    

__オプションの説明文__
オプションの説明文を記載する。
記載するとオプションの説明文を出力する際に用いることが可能になる。
省略可。     

__引数の処理方法__
オプションの引数の処理方法をラムダ式で記載する。
引数はstring型で渡ってくる。
ヘルプのようにオプションの有無だけを確認する場合、引数がnullであるかどうか判断する。     


### オプションを解析する
Parseメソッドにて、定義したオプションに従い解析する。 
オプションで定義しておらず解析できなかったものはstring型のリストに格納され、戻り値として返ってくる。
解析に失敗した場合、OptionExceptionが発生する。  

### オプションの説明文を出力する
WriteOptionDescriptionsメソッドにて、OptionSetインスタンスにて定義したオプションの説明文を出力する。
下記のサンプルコードを実行すると以下のように出力される。

```con

  -v, --value=VALUE          specify a value.
  -n, --number=VALUE         specify a number.
  -h, --help               show help.

```


## サンプルコード

```cs

        static void Main(string[] args)
        {
            string value = "";
            int number = 0;
            bool help = false;

            OptionSet options = new OptionSet()
            {
                // string型の引数を取るオプション
                { "v|value=", "specify a value.", v => value = v },

                // string型以外の引数を取るオプション
                { "n|number=", "specify a number.", (int v) => number = v },

                // 引数を取らないオプション
                { "h|help", "show help.", v => help = v != null },
            };

            List<string> extra;
            try
            {
                extra = options.Parse(args);
                
                if (help)
                {
                    options.WriteOptionDescriptions(Console.Out);
                }
            }
            catch (OptionException e)
            {
                Console.WriteLine(e.Message);
            }
         }

```

## 参考
https://components.xamarin.com/gettingstarted/mono.options?version=5.3.0
https://www.ownway.info/WinDev/mono_options/about
https://opcdiary.net/?p=26847
JavaScriptのinnerHTMLについて

JavaScriptのinnerHTMLについて自分用にメモ。

<h1>innerHTMLとは？</h1>
HTML要素の中身を変更するためのプロパティ。
要素の中身を取得したり変更したりする事ができる。

<h2>HTML要素を取得する方法</h2>
divタグにidを指定してdivタグ内に含まれる文字列を取得する。

```hello.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>innerHTMLについて</title>
</head>
<body>
  <div id="hello">
    <p>Hello, world!</p>
  </div>
  <script>
    var hello = document.getElementById("hello");
    console.log(hello.innerHTML);
  </script>
</body>
</html>
```

consoleの出力

```
<p>Hello, world!</p>
```

<h2>HTML要素の値を変更する方法</h2>
上記のコードでpタグの中身を変更してみる。

```hello.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>innerHTMLについて</title>
</head>
<body>
  <div id="hello">
    <p>Hello, world!</p>
  </div>
  <script>
    var hello = document.getElementById("hello");
    hello.innerHTML = "<p>ハローワールド!</p>";
  </script>
</body>
</html>
```

hello.htmlの出力

```
ハローワールド!
```
ファイルを自動でバックアップする(Windows)

# 概要
Windowsバッチを作成して、スタートアップにセットしておけばWindows起動の度に自動で特定のファイルをバックアップしてくれるバッチ。ファイル名にバックアップした日時を付けて保存する。
意外と使うので備忘録。

# 環境
- Windows

# 方法
## 1.下記バッチを作成する。
```filebackup.bat
@echo off
REM ファイルバックアップバッチ
set dt=%date:~0,4%%date:~5,2%%date:~8,2%
set tm=%time: =0%
set tm=%tm:~0,2%%tm:~3,2%%tm:~6,2%%tm:~9,2%
REM ★任意のファイル名
set fn=ほげほげファイル-%dt%_%tm%.txt
echo %fn%
REM ★任意のコピー元ファイルパス
set pathfrom="\\192.168.xxx.xxx\xxxx\xxxx.txt"
REM ★任意の￥コピー先ファイルパス
set pathto="C:\xxxx\"%fn%
copy /B /Y /Z %pathfrom% %pathto%
exit /b 0
```
## 2.作成したバッチをスタートアップまたは、タイマー起動などで定期的に実行させる。
iPhone画面サイズ早見表（図付き）

xcodeにてlounchimageを設定しようとしたところ、表記と意味がよく分からなかったので、まとめました。
# 図

<img width="974" alt="スクリーンショット 2018-04-25 7.44.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/63060/9752337c-c9c5-3cfe-38b8-5070b83bc788.png">


# 広告
codmonで働いてます。デザイナーさん&エンジニアさん積極採用中。
子育て環境をよりよくしたいかたwanted!
qiita見ました！っと言ってくれるとお祝い金がでるかも。
https://www.wantedly.com/companies/codmon


# 早見表

| インチ | 端末 | 種別 | ポイント | 倍率<br/>(scale) | ピクセル | 解像度 (PPI) |
|--:|:--|:--|:--|--:|:--|:--|
| 3.5 | 1, 3G, 3GS | 1x | 480x320 | 1 | 480x320 | 163 |
| 3.5 | 4, 4s | 2x | 480x320 | 2 | 960x640 | 326 |
| 4.0 | 5, 5s, 5c, SE | Retina 4 | 568x320 | 2 | 1136x640 | 326 |
| 4.7 | 6, 6s, 7, 8, SE2,SE3 | Retina HD 4.7″ | 667x375 | 2 | 1334x750 | 326 |
| 5.4 | 12 mini, 13 mini | Super Retina XDR | 812x375 | 3 | 2340x1080 | 476 |
| 5.5 | 6 Plus, 6s Plus, 7 Plus, 8 Plus | Retina HD 5.5″ | 736x414 | 3 | 2208x1242 | 401 |
| 5.8 | X, XS, 11 Pro | X / XS | 812x375 | 3 | 2436x1125 | 458 |
| 6.1 | XR, 11 | Liquid Retina HD | 896x414 | 2 | 1792x828 | 326 |
| 6.1 | 12, 12Pro, 13, 13Pro, 14, 14Pro | Super Retina XDR | 844x390 | 3 | 2532x1170 | 460 |
| 6.1 | 15, 15Pro, 16 | Super Retina XDR | - | - | 2556x1179 | 460 |
| 6.3 | 16Pro | Super Retina XDR | - | - | 2622x1206 | 460 |
| 6.5 | XS Max, 11 Pro Max | XS Max | 896x414 | 3 | 2688x1242 | 458 |
| 6.7 | 12 Pro Max, 13 Pro Max,14 Plus | Super Retina XDR | 926x428 | 3 | 2778x1284 | 458 |
| 6.7 | 14ProMax, 15Plus,15ProMax,16Plus | Super Retina XDR | - | - | 2796x1290 | 460 |
| 6.9 | 16ProMax | Super Retina XDR | - | - | 2868x1320 | 460 |



- インチ：サイズ表記のこと
- 端末：対応する端末
- 種別：ディスプレイ名
- ポイント：描画座標のこと。論理上の画面サイズ
- 倍率：ポイントを何倍してピクセル表示するか。
- ピクセル：実際に画面に描画されるサイズ


# 参考資料
## xcodeのキャプチャ
<img width="895" alt="スクリーンショット 2019-10-11 14.15.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63060/594920a9-e2d6-d884-ce09-aa934951e72b.png">

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63060/61ae383c-4d54-0efb-47d8-1dc8a0e56673.png">

## アップルストアの資料
![Artboard.png](https://qiita-image-store.s3.amazonaws.com/0/63060/c0d08f27-b830-fc7f-4503-b240c97361d2.png)
![Artboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63060/26368937-7125-f5a4-1bc7-1cac26ee7702.png)
![スクリーンショット 2021-10-12 14.22.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63060/2a6012ab-b6a5-eea9-2440-8e2d08549c07.png)




## 概念図
![スクリーンショット 2019-10-11 14.31.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63060/8f588463-52ff-5e69-eef9-d838444da65c.png)


参考：　https://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions

## sketch資料
グーグルドライブからダウンロードできます。
https://drive.google.com/file/d/1WakoxNaWwGOavcFyf6bmufyKOCH-Sf4u/view?usp=sharing

# おまけ
![スクリーンショット 2021-10-12 14.59.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63060/e2689252-28f1-ff3d-33f0-ba826c49cf33.png)



# 役にたったらいいねお願いします😄✨
GitLab 基本的な管理コマンド

基本的な管理コマンド

#起動、停止、再起動

```
gitlab-ctl start
gitlab-ctl stop
gitlab-ctl restart
```

#設定の再構築

```
gitlab-ctl reconfigure
```

#ログ確認

```
gitlab-ctl tail
```
全プロセスの最新ログを監視する。

ログ自体は下記に出力されるので、ログを特定したら対象ログで原因を分析する。

```
/var/log/gitlab
```

#バックアップ

```
gitlab-rake gitlab:backup:create
```

下記のディレクトリに作成される。

```
/var/opt/gitlab/backups
```
#リストア

```
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl status

gitlab-rake gitlab:backup:restore BACKUP={対象ファイルの日付/時間部分まで}

gitlab-ctl start
gitlab-rake gitlab:check SANITIZE=true
```
Javascriptの連想配列のメンバ数取得方法

こちらの記事を参考にさせていただきました
https://javascript.programmer-reference.com/js-associative-array-length/

Object.keysを使う方法

```js
var len = Object.keys(rensoArr).length;
```

for inを使う方法

```js
var len = 0;
for(var p in rensoArr){
  if(rensoArr.hasOwnProperty(p)){
    len++;
  }
}
```

コードの長さ的には前者だけれど、一度keyを配列にしているということはメモリ的に結構無駄が発生しているのでは？
と思うので後者を関数化して使う方が良い気もします。何をしたいのかもわかりやすくなるし。

######恥ずかしくても書いてみよう
http://d.hatena.ne.jp/shu223/20131209/1386578929

3ヶ月後に恥ずかしくないように
Excel HYPERLINK関数でハッシュ記号#を含んだファイルパスへのリンクを有効にする

# はじめに 
ExcelのHYPERLINK関数でファイルやフォルダへのハイパーリンクを作成する際に，
パスに\#（ハッシュ記号）を含んでいると，\#以降の文字列が無効となってしまい，
リンクが意図した動作をしない問題に対処した際のノートです．マクロは使用しません．

以下のリンク先に，"オフィスドキュメント内のハイパーリンクに#を使用することは認められていない"と書かれています．
"NOTE: The pound sign is a valid character to use in a file name but is not accepted in hyperlinks in Office documents."
[You cannot use a pound character in a file name for a hyperlink in an Office program](https://support.microsoft.com/en-gb/help/202261/you-cannot-use-a-pound-character-in-a-file-name-for-a-hyperlink-in-an)

# 環境
私がテストした環境は以下の通りです．
どちらの環境でも動作を確認できています．

- テスト環境1  
 - Windows 10  
 - Excel 2010  
　
- テスト環境2  
 - Windows 7  
 - Excel 2013  

# 解決策
解決策を以下に示します． 
以下の2つの手順を踏み，パスを変換することで，対策が可能であることを確認しました．
  
### パス変換手順
#### STEP-1. `#` を `%23` に変換する  
- `#` を `%23` に変換する手段（Excel関数）  
 - [SUBSTITUTE 関数](https://support.office.com/ja-jp/article/substitute-%E9%96%A2%E6%95%B0-6434944e-a904-4336-a9b0-1e58df3bc332)  ～ Excel2007以降
 - [ENCODEURL 関数](https://support.office.com/ja-jp/article/encodeurl-%E9%96%A2%E6%95%B0-07c7fb90-7c60-4bff-8687-fac50fe33d0e)  ～ Excel2013以降

※ `%23` は `#` をURLエンコードした際の表記です．
（[パーセントエンコーディング - Wikipedia](https://ja.wikipedia.org/wiki/パーセントエンコーディング)）

#### STEP-2. パスの先頭に"file:///"を付加する．  
※ `file:///` はローカルファイルにアクセスするためのスキームです．
（[URIスキーム（URLスキーム）とは - IT用語辞典](http://e-words.jp/w/URIスキーム.html)）

### パス変換の例  
上述の手順を例で示すと以下の通りになります． 
\#を含むパスの例: `C:\temp\#test.txt` 
STEP-1: `C:\temp\%23test.txt` 
STEP-2: `file:///C:\temp\%23test.txt` 


### STEP1, 2をまとめたHYPERLINK関数の例
```
=HYPERLINK("file:///" & SUBSTITUTE("C:\temp\#test.txt", "#", "%23"))
```
これで，セルをクリックした際に"\#test.txt"というテキストファイルが開けます．

# ちなみに...
`=HYPERLINK("C:\temp\#test.txt")` とそのまま入力すると，\#以下が無効となるため，セルをクリックした際に`C:\temp\` というフォルダが開いてしまいます．

また， `=HYPERLINK("#A1")` などと記述することで，シート内の指定のセル（A1）にジャンプするリンクを作成できます（本来の使い方？）．
Alamofire 4.x 系でtimeoutを設定する

ググったけど古かったりSessionManagerを使う方法だったりしかでてこなかったので、メモ。

```timeout.swift
let url = URL(string: "https://qiita.com")
var urlRequest = URLRequest(url: url)

// ここ↓
urlRequest.timeInterval = 30.0

Alamofire.request(urlRequest).validate().responseJSON { response in
  // ゴニョゴニョ

}
```
Unityで画面をぼかす方法

#はじめに


題名の通り画面をぼや～っとぼかす方法について書きます。

今回はAseetStoreにあるLegacy Image Effectを使います。

#手順
１　Lagacy Image Effectを入手
２　Main Cameraと関連づける



##1　Lagacy Image Effectを入手

①　`Ctrl + 9`　でAseetStoreを開き、"Legacy Image Effect"と検索。


<img width="417" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/253009/5ba623d9-83b8-0ab8-f052-1925db602300.png">


②　Lagacy Image Effect(黒いほうを)ダブルクリックして　`Download　→　Import`の順でクリック。下のような灰色の四角がでてくるのでもう一度`Import`をクリック。

<img width="421" alt="aa.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/253009/659e29f0-449c-7cd3-ed58-6698ea82a179.png">


③　赤丸の部分が追加されていたらOK。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/253009/0cb51438-2090-b34b-269d-7747add581a5.png)



##２　Main Cameraと関連づける

`Standard Assets → Effects → ImageEffects → Scripts`内のBlurを、Main Cameraにドラッグ＆ドロップ。

<img width="949" alt="ll.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/253009/d0c774bb-1770-cbf9-69b3-8fbb24bf44e3.png">

##完成！

<img width="405" alt="2.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/253009/4881ad05-575e-d734-a1c8-0ce28a70481c.png">




#参考

>https://qiita.com/jordan710k/items/c6bf3fec560b39318d59
ReactのContext APIはReduxの代わりとなるのか

Reactのv16.3から新しくContextAPIが正式リリースされました。
ContextAPIは、Reduxのようなstateの一元管理を行うStoreのようなふるまいができる機能です。
今回の記事のタイトルにある"ContextAPIがReduxの代わりとなるか"について、結論を先に言うとReduxの代わりにはなりません。あくまでReduxでのStore部分のみの機能であり、Reducerなどのfunctionは提供されていません。(Reduxについて詳しく知りたい方は[こちら](https://qiita.com/kiita312/items/49a1f03445b19cf407b7)をどうぞ)

この記事では、[公式のドキュメント](https://reactjs.org/docs/context.html)を参考に、Contextで何が出来るのか、Context APIの使い方を紹介します。

# Contextが作られた背景
> Context provides a way to pass data through the component tree without having to pass props down manually at every level.

Reactアプリケーションでは、親子になっているコンポーネント間で値を渡す場合は、propsを経由して渡していました。しかし、コンポーネントのツリーが大きくなりネストが深くなるとpropsでのバケツリレーが面倒になってきます。それを解決するために、Contextを使うとどの階層のコンポーネントからでもContextが保持しているデータにアクセスすることができます。

![スクリーンショット 2018-04-25 0.07.20.png](https://qiita-image-store.s3.amazonaws.com/0/36813/8be08929-e94a-ddb8-950b-3b6d867d8981.png "スクリーンショット 2018-04-25 0.07.20.png")

# Contextをいつ使うか
公式が提唱するContextの利用シーンは、「グローバル」な値として多くのコンポーネントから参照されるデータに適しています。
例えば、

* ログイン中のユーザー情報
* UIテーマ
* 言語設定

などです。

# Contextの使用方法
Contextが提供するAPIで登場するのは主に三つです。

* React.createContext
* Provider
* Consumer

簡単に説明すると、ProviderでContextにvalueを設定し、ConsumerでContextに設定されている値を取り出します。

![スクリーンショット 2018-04-25 0.49.11.png](https://qiita-image-store.s3.amazonaws.com/0/36813/62139460-6ea4-be2f-cb19-7a2f47e226de.png "スクリーンショット 2018-04-25 0.49.11.png")

## createContext
```js
const {Provider, Consumer} = React.createContext(defaultValue);
```
ProviderとConsumerのペアを作成します。
defaultValueにはContextへ設定するvalueの初期値を設定できます。

## Provider
```js
<Provider value={/* some value */}>
```
valueに設定した値をContextに設定します。
Providerで設定した値は、Provider内のConsumerへ渡されます。
valueが変更された際には、変更を検知して再描画されます。

## Consumer
```js
<Consumer>
  {value => /* render something based on the context value */}
</Consumer>
```
親のProviderが設定したvalueを取り出します。
Consumerの中はfunctionである必要がありfunctionの引数にContextから取得したvalueが渡されます。

Providerはネストすることも可能です。Consumerは親のProviderコンポーネントの中で一番近いProviderのcontext valueを取得します。また、Consumerは親にProviderを持たなくても大丈夫です。その場合はcreateContextで設定したdefaultValueを取得します。

![スクリーンショット 2018-04-25 1.03.26.png](https://qiita-image-store.s3.amazonaws.com/0/36813/5b5511b6-5718-7a5a-89f8-c4cae4b5a24b.png "スクリーンショット 2018-04-25 1.03.26.png")

# 個人的な見解
Reduxを使うまでにいかない小規模のアプリケーションで、propsでのバケツリレーがしんどくなるケースはよくあります。そんなときにこのContextを使えば楽になってシンプルになりそうという印象です。
ただ、Contextのvalueを下層コンポーネントから取り出しやすいけれど、値をセットするのは親のProviderで行わないといけず、下層コンポーネントからだと、結局Providerの値変更をするfunctionをpropsでバケツリレーする感じが、痒いところに手が届かない状態。(reduxのようにどこからでもdispatchできない)
なので、Context valueを変更する機会は少ないようなシチュエーション、上記で挙げたグローバルな設定値とかで使うのに留めておくのが良さそうという感想です。

Contextを使い際のTips的なものも[公式のドキュメント](https://reactjs.org/docs/context.html)に載っているので、利用する方は一読するのをオススメします。
Javaサーブレット/JSP Viewの描画

# 転送方法による違い
- <font color="DodgerBlue">**[フォワード](#フォワードによるviewの描画)**</font> ... 転送元と転送先が同じアプリケーションの場合に限り、使用することができます。
- <font color="DodgerBlue">**[リダイレクト](#リダイレクトによるviewの描画)**</font> ... 転送元と転送先が別のアプリケーションを場合に使用する。転送速度が遅いというデメリットがあります。

<!--ここからフォワードを使った転送方法の説明！-->

# フォワードによるViewの描画
<font color="DodgerBlue">**フォワード**</font>を使って、出力処理をJSPファイルに依頼していきます。
`@ RequestDispatcherインスタンスのfoward()メソッドを使用します。`

```java:foward()構文
RequestDispatcher dispatcher = request.getRequestDispatcher("フォワード先");
dispatcher.foward(request, response);
```

# サンプルプログラム
フォワードを使って,サーブレットクラスからJSPファイルを出力します。

```java:ForwardServlet.java
package servlet;

import java.io.IOException;

import javax.sevlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServlet.Request;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ForwardServlet")
public class ForwardServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;

  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    //フォワード
    RequestDispatcher dispatcher = request.getRecestDispatcher("/WEB-INF/jsp/forward.jsp");
    dispatcher.forward(request, response);
  }
}
```

```jsp:forward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>サンプルページ</title>
</head>
<body>
<h1>これはサンプルです</h1>
<p>サンプルページ</p>
</body>
</html>
```

### 結果

```
これはサンプルです
サンプルページ
```

<!--ここからリダイレクトによる転送方法の説明！-->

# リダイレクトによるViewの描画

<font color="DodgerBlue">リダイレクト</font>とは、ブラウザのリクエスト先を変更して処理の転送を行う方法です。転送元と転送先のアプリケーションが違う場合に使用します。
`@ HttpServletResponseインスタンスのsendRedirect()メソッドを使用します。`

```java:リダイレクト構文
response.sendRedirect("リダイレクト先のURL");
```

リダイレクト先はURLか、アプリケーション内の場合は相対パスを使って指定できます。

# サンプルプログラム

```java:RedirectServlet.java
package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/RedirectServlet")
public class RedirectServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;

protected void doGet (HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    
    //リダイレクト
    response.sendRedirect("/sample/SampleServlet");
  }
}
```

<br>[Next：リクエストスコープとは？](https://qiita.com/kent2980/items/144056884fa6bc284e84)
PHP 本文からヘッダー/フッターを呼び出す。

本文側でincludeを使ってヘッダーとフッターのPHPファイルを呼び出している。

```php:header.php
<!DOCTYPE HTML>
<html lang="jp">
<head>
	<title></title>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<meta property="og:title" content="SNS用のページタイトル">
</head>
<body>
```

```php:index.php
<?php include('header.php'); ?>
<h1></h1>
<?php include('footer.php'); ?>
```

```php:footer.php
</body>
</html>
```
Go言語の型変換

GO言語を扱う上では型変換は必須です。
あれ、この型変換どうするんだっけ？ってことはありませんか？

ということで各種変換をgithubにアップしてみました。
https://github.com/soshi8/GoLangTrans

すべて変換前を'aaa'という名称で、変換後を'bbb'という名称で作成しています。
多分それが一番便利かと思います。
正直初心者なので効率的なロジックとも言い難いですが 、あくまでわかりやすさ重視です。
こんなのがとかあったら教えてください。
ApacheでSELinuxに邪魔されて403Forbiddenになった

# はじめに
SELinux稼働中のサーバにてApacheでパパっとファイルの公開をしようとしたらちょっと躓いた。
SELinuxはこれまで思考停止で無効化(Disabled)にしていたのでメモ。

# 環境
* Red Hat Enterprise Linux6.8(RHEL6)
* Apache 2.2.15
* SELinuxはOn(Enforcing)

# 事象
Apacheの設定はほぼほぼ初期設定のままだったので、DocmentRootも/var/www/htmlのまま。
ここに1つディレクトリ(/var/www/html/test)を掘って「http://hoge.co.jp/test 」で以下のように配置したファイル公開をしようとした。

```
# ll
total 28
-rw-r--r--. 1 root root 6949 Apr  2 15:21 file1.txt
-rw-r--r--. 1 root root 7127 Apr  2 15:21 file2.txt
-rw-r--r--. 1 root root 7123 Apr  2 15:19 file3.txt
```
普通だったら、あのよくある画面でファイルが見えるようになるはずなのだが、何も表示されない…
あのよくある画面にはなるのだが、肝心のファイルが全く見えない…

そこで、URLでファイルに直アクセスしたらどうなるのだろうと試した。
ブラウザで「http://hoge.co.jp/test/file1.txt 」としてアクセス。

**403 Forbidden** が表示される。。

# 原因
結論から言うと/var/www/html以下に置いたファイルには適切なラベル付けが必要なのだが(SELinuxのセキュリティポリシー)、それが今回不足していた。
Apacheのerror_logには「Permission Denied」が記録されており、確かに権限不足関連のトラブルっぽい。

説明を端折ってしまっていたが、今回配置した3つのファイルは別サーバからscpコマンドで別ディレクトリへ一旦持ってきてmvで/var/www/html/testディレクトリへ持ってきていた。
それがまずかったらしく(特にmv?)、各ファイルには適切なラベル(httpd_sys_content_t)が付与されていなかった。

例えば/tmpで作ったファイルを/var/www/html/testへ配置し、SELinuxが付与するラベルを表示するとこんな感じになる。

```
# ll -Z
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 hogehoge
```
lsコマンドに-Zオプションをつけることでファイルに付与されたラベルを確認できる。
今回は「user_tmp_t」が付与されている。(←これが今回の原因)

正しくはしれっと記載してあるが「httpd_sys_content_t」というラベルが付与されている必要があるらしい。

# 対処法
大きく2つある。
1. SELinuxを無効化する
2. 正しいラベルに付け替える

1についてはそりゃそうだろという感じなのでここでは2について説明する。

結論としてはrestoreconコマンドを使用して各ファイルのラベルを適切なものに付け替える事が可能なので以下のようにするとよい。

もう1度現在のラベルを確認しておくと

```
# ll -Z
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 hogehoge
```

ここで以下のようにする。

```
# restorecon hogehoge
```

再度ラベルを確かめてみる。

```
# ll -Z
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 hogehoge
```

ラベルが「httpd_sys_content_t」に書き換わっていることが分かる。
この状態であれば、**403 Forbidden**を食らうことなく正しくファイルを閲覧することができる。

# 最後に
Apacheに限らずPermission Denied系のエラーとなりファイルのオーナやパーミッションの設定をどう見直しても改善しない場合はSELinuxによるセキュリティを疑ってみる。
あと、どうやらmvコマンドは元々のラベルを引き継いでしまうのでcpコマンドの方がいいらしい。

「もう思考停止でDisabledにするあの時間は終わって、君もSELinuxと向き合う時なんだ」(今更過ぎる)

# 参考文献
[ApacheでSELinuxが原因で403 Forbiddenエラー](http://totech.hateblo.jp/entry/2015/04/05/223714)
[SELinuxについてのメモ](https://qiita.com/hmuronaka/items/6236d541085efb25a92c#%E3%83%A9%E3%83%99%E3%83%AB%E4%BB%98%E3%81%91%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%AB)
スタイルガイドジェネレータ aigisを試す。

# aigisとは
スタイルガイドを生成します。

**公式**
https://aigis-styleguide.github.io/aigis/
aigisは日本語ドキュメントもあるので導入するにあたり難しいことは特にありません。

## スタイルガイドを作るために必要なポイント

参考まで
[Web制作で困らない！スタイルガイド作成に必要なポイント10個まとめ + 無料テンプレート](http://photoshopvip.net/69456)

## aigisを導入する。
aigisの更新に[Quick Start](https://aigis-styleguide.github.io/aigis/docs/en/category/Guide/Quick-Start/)があります。一旦はQuick Startを利用して構築しつつスタイルガイドは作成にはgulpを利用します。
公式にある[With gulp](https://aigis-styleguide.github.io/aigis/docs/en/category/Usage/gulp/index.html)

```ｓｈ
# ディレクトリを作成
$ mkdir aigis-sandbox && cd aigis-sandbox
```
```sh
# ここは読み飛ばしてもOK
$ gibo node MacOS >> .gitignore
$ nbenv local v8.7.0
```
```sh
# pacage.jsonを作成
$ npm init -y
# 公式を参考に
$ npm install --save-dev node-aigis
# コンフィグファイルとHTMLテンプレート作成
$ ./node_modules/.bin/aigis init
Created the following files and directories:
  aigis_config.yml
  aigis_assets
  aigis_assets/css/highlight/okadia.css
  aigis_assets/css/theme.css
  template_ejs
  template_ejs/components.ejs
  template_ejs/index.ejs
  template_ejs/sidemenu.ejs
```
ここまでできれば準備は完了です。
次にgulpを利用してスタイルガイドを生成してみます。

```sh
# gulpインストール
$ npm install --save-dev gulp gulp-aigis
```
```sh
# エディタを利用してgulpfile.jsを作成してもいいです。
$ echo "var gulp = require('gulp');
var aigis = require('gulp-aigis');

gulp.task('aigis', function() {
  return gulp.src('./aigis_config.yml')
    .pipe(aigis());
});
" > gulpfile.js
```
```sh
gulp aigis
works/aigis-sandbox/gulpfile.js
Starting 'aigis'...
config file: /aigis-sandbox/aigis_config.yml
[Info] Config File: /aigis-sandbox/aigis_config.yml
[Info] Start: Generate Styleguide
[Info] Output: /aigis-sandbox/styleguide
[Info] Finish: Generate Styleguide
[22:56:14] Finished 'aigis' after 2.18 s
```
生成されたスタイルガイドジェネレータ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/30329/6053ebf5-a671-5663-9ee8-89207b72b0bd.png)

これで完成です。
aigisはとてもシンプルなジェネレータです。
aigisの設定は全て`aigis_config.yml`に集約されていますので公式の[config](https://aigis-styleguide.github.io/aigis/docs/en/category/Documentation/Configs/index.html)を確認するといいでしょう。
また、公式のConfigのサンプルもあります。[examples/aigis_config.yml]
(https://github.com/aigis-styleguide/aigis/blob/master/examples/aigis_config.yml)


公式のサンプルを利用しての構築でした。
難しいことはありませんがaigisを利用してスタイルガイドを作成するには[Comment Syntax](https://aigis-styleguide.github.io/aigis/docs/en/category/Documentation/Comment-Syntax/index.html)を理解する必要があります。
【Arduino】一定時間毎にピクピク動いて、PCの画面ロックを防ぐ

## 1. 概要

ArduinoLeonard互換機を使ってUSBマウスとして認識させ、
一定時間毎にピクピク動いて、PCの画面ロックを防いでみました。

### 1-1. 何故こんなことをしなくてはならないのか

普段、`端末A`で設計書やらメールを見ながら、`端末B`でコーディングしています。
なので基本的に`端末B`をずっと触っているのですが、そのせいで操作されない`端末A`が頻繁に**画面ロック**になり、とにかく**解除がめんどくさい**。

[シンクラ]:https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%B3%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88

ロック設定も**変更できない**し、[訳あって][シンクラ]自作アプリケーションも動かせない...
アプリケーションがダメなら**最後は物理**。というわけで作ってみました。

## 2. 作り方

### 2-1. 本体（ArduinoLeonardo互換機）

マウスをエミュレートする以上、HID（Human Interface Device）として認識される必要があるのですが、`ATmega32U4`を積んだArduinoなら簡単にできると書いてあったので、互換機を買ってみました。

<img src="https://qiita-image-store.s3.amazonaws.com/0/227179/db58aec1-4a46-2640-1f50-5df5ffac70c4.jpeg" width="80%" />
（左：ArduinoLeonardo互換機　約1700円 右：併せて買ってしまったdigispark 約250円）

チップは違いますが、今回の用途だとコスパ的にも`digispark`のほうが良さそうですね。

### 2-2. スケッチ

前提条件として、ライブラリマネージャから`Mouse`をインストールしておきます。

コードはほとんどやることないです。最低限こんなもんでどうでしょうか。

```c++:mover.ino
#include <Mouse.h>
#define LEDPIN 13

/** 移動させるピクセル */
const int MOVING_PIXEL = 1;
/** 待機時間(ms) */
const unsigned long WAITING_TIME = 299000; // 4分59秒

/**
 * 起動時処理
 */
void setup() {

  pinMode(LEDPIN, OUTPUT);
  Mouse.begin();

}

/**
 * 常駐処理
 */
void loop() {

  // マウスを移動
  Mouse.move(MOVING_PIXEL, 0, 0);
  delay(1);
  Mouse.move(-MOVING_PIXEL, 0, 0);

  // 必要に応じてLEDで通知
  // notify(100);

  // 待機
  delay(WAITING_TIME);

}

/**
 * 本体LEDで通知する
 * @param notifyingTime 通知時間(ms)
 */
void notify(int notifyingTime) {

  // LED ON
  digitalWrite(LEDPIN, HIGH);
  // 待機
  delay(notifyingTime);
  // LED OFF
  digitalWrite(LEDPIN, LOW);

}
```

現場で使うときはLチカするとまずいので、コメントアウトしておきました。
書き込み時はボードを`Arduino Leonard`としておくだけです。

※マウス・キーボードを操作できる仕様上、フェールセーフな作りにしておくべきだとは思います。今回はフェールセーフ（物理）でなんとかなるレベルなので割愛します。

### Tips. 100均の融着テープが使える

さすがにむき出しだと怪しいので、こんな感じにDAISOの融着テープ使っています。サイズぴったり。

<img src="https://qiita-image-store.s3.amazonaws.com/0/227179/e5465f67-6a8f-2e50-57c4-162000c30b71.jpeg" width="40%" />

あとは挿して使うだけです。

## 3. 参考

DEKOのアヤシイおへや - https://ht-deko.com/arduino/leonardo.html
そうだBashでSensuのbalance動かしてみようぜ

# なにこれ？

![A](https://i.gyazo.com/3ca8cac1f937e670a0fd63dae8010bfc.png)

こんな感じにコマンドライン上で見てやろうぜっていう

Windowsで開発しましたがBashで動かすことを前提に作ったためLinuxでも動くﾊｽﾞ
画像ではGit Bashにて動作させています

# 仕組み
SensuのAPIにてこのBashスクリプトをプラットフォームとして登録してコマンドを実行しています
Jsonとかエンコードとか全部Bash上で~~無理やり~~やってます

意訳：DiscordのBOTのように使えます(雑

# 使い方

## スクリプトを手に入れる
`git clone https://github.com/zinntikumugai/sensuConsole.git`
を実行して取得するか、[sensuConsole](https://github.com/zinntikumugai/sensuConsole)<-からスクリプトを手に入れます

## プラットフォームを追加してAPIキーを手に入れる
次にSensuの管理パネルよりプラットフォームを追加します
![SensuAccount](https://i.gyazo.com/f9236b4876e6017d2ad7eee5c8b3d690.png)
プラットフォーム、プラットフォームの作成より追加します
![SensuAPI](https://i.gyazo.com/abf6e2a8b17cdc598dab92da2df994c2.png)
作成できたら下のようになりますので(APIキーはマスク掛けてます)、APIキーをコピーしておきます
![SensuAPIKey](https://i.gyazo.com/149d945058e2dbbe090295ab6ac41bf0.png)

## 実行ファイルにする
Windowsで開発した関係上、権限周りができなかったので以下のコマンドをsensuConsoleフォルダ内で実行してください
```chmod +x sensuConsole```

## APIを設定する

最後にスクリプトの設定ファイル`sensuConfig`をいじるだけですがコマンドでもできます(誰得

`./sensuConsole setup`と実行します。
![ConsoleSetupMenu](https://i.gyazo.com/e06893833350b9e8d3f65d177e33985d.png)

たった一つしか無いメニューから1のSet API Keyを選択します(1と入力)
先程手に入れたAPIキーを貼り付けます
![ConsoleSetupAPIKey](https://i.gyazo.com/a7ebb5d5074f4923394e3af943ca9eef.png)

これで完了です

# 使おうぜ!

初期段階では認証等されないため、何もできません
linkコマンドでDiscord等と同様にリンクさせてください
```
./sensuConsole link 認証コード
```

以降はDiscord等のSensuBOTを使ったことがある方はわかると思いますが
```
 ./sensuConsole balance zny
```
![ConsoleBalanceZNY](https://i.gyazo.com/66f7cbc1e50db5682f9f04023bca4b01.png)
のように使うことができます

# できることできないこと
## できること
**linkしておくと**残高等の確認ができる

## できないこと
誰かにtipする

APIの仕様上誰かにtipする行為は、プラットフォーム上の識別コード(ダブらない前提のID等)で管理していますのでこのスクリプトではできません

-----

作ってみてだいぶ内部的にはやっつけです(ソース閲覧非推薦)
実際はjq(コマンドラインでJsonをグリグリやれるやつ)とか使ってみたかったのですが__Git Bashでもできる＝大抵のBashでもできる__としたかったためこんな感じになりました

APIといってもTwitterAPIなどよりだいぶ楽にできてますので(curlでぽーいするだけでもいけちゃいます)Sensuを使ってプラットフォーム対応したい！！とかBOT作ってみたいとかの参考程度にもどうぞ(なるかなぁ...)

適当にSensuで投げるとこの記事書いた人喜びます
[![TIP](https://i.gyazo.com/055e2c6a17cc32ffbadd5060d71d2f50.png)](https://shinoharata.github.io/TipSensuWithTwitter/?name=uesitananame55)
[pythonメモ] pythonでテストサーバー起動

Qiita投稿練習も兼ねて、pythonコードのメモ投稿

# pythonでテストサーバー起動

``` python
# -*- coding: utf-8 -*-

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import urlparse
import json


class GetHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        parsed_path = urlparse.urlparse(self.path)
        print(parsed_path)

        # 成功レスポンス(200)を返す
        if parsed_path.path == "/ok-api":
            self.send_response(200)
            self.end_headers()
            self.wfile.write("OK")
            return

        # 失敗レスポンス(403)を返す
        elif parsed_path.path == "/ng-api":
            self.send_error(403, "NG!")
            self.end_headers()
            return

        # クエリパラメータ("left-str", "right-str")を連結した文字列を返す
        # /concat-str?left-str=Hello&right-str=World
        elif parsed_path.path == "/concat-str":
            # クエリパラメータのパース(dictionary型)
            querys = urlparse.parse_qs(parsed_path.query)
            if ("left-str" in querys) and ("right-str" in querys):
                concat_str = querys["left-str"][0] + querys["right-str"][0]
                self.send_response(200)
                self.end_headers()
                self.wfile.write(concat_str)
                
            else:
                #"left-str"と"right-str"のクエリがなかったらエラー
                self.send_error(400, "query NG!")
                self.end_headers()
                return

        # Jsonを返す
        elif parsed_path.path == "/return-json":
            data = [{u"name":u"尾崎豊", u"age":26},
                    {u"name":u"hide", u"age":33}]
            jsonData = json.dumps(data, ensure_ascii=False, encoding='utf-8')

            self.send_response(200)
            self.send_header("Content-type", "application/json")
            self.end_headers()

            self.wfile.write(jsonData.encode("utf-8"))
            return

        else:
            self.send_error(400, "NG!")
            self.end_headers()
            return


    # Bodyを設定して送ると、こちらが呼ばれる
    def do_POST(self):
        
        # request取得
        content_len = int(self.headers.get("content-length"))
        request_body = self.rfile.read(content_len).decode("utf-8")

        try:
            # requestのjson読み込み
            data = json.loads(request_body)

            # 読み込んだ内容出力
            for key in data:
                print("key:{0} value:{1}".format(key, data[key]))

            self.send_response(200)
            self.send_header("Content-type", "application/json")
            self.end_headers()

            # requestと同じjsonを返す
            self.wfile.write(request_body.encode("utf-8"))
            return
        
        except:
            self.send_error(400, "request NG!")
            self.end_headers()
            return

            
if __name__ == "__main__":
    host = "localhost"
    port = 8000

    server = HTTPServer((host, port), GetHandler)
    server.serve_forever()

```
実行後、"http://localhost:8000" にサーバーが立つ


アクセスパスに応じて処理実施
http://localhost:8000/ok-api
とか
http://localhost:8000/concat-str?left-str=Hello&right-str=World
でアクセスする
react-primitivesのTypeScript型定義ファイルをつくる

TypeScriptを採用しているプロジェクトでreact-primitivesを使ってみた。

react-primitivesの型ファイルをinstallしようとしたが、ないと怒られた。

```
(๑•﹏•) < npm install --save-dev @types/react-primitives
npm ERR! code E404
npm ERR! 404 Not Found: @types/react-primitives@latest

npm ERR! A complete log of this run can be found in:
npm ERR!     ごちゃごちゃ
(#°﹏°) <
```

ちなみに@なしでやってもダメって言われた。

```
(๑•﹏•) < npm install --save-dev types/react-primitives
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t ssh://git@github.com/types/react-primitives.git
npm ERR!
npm ERR! ERROR: Repository not found.
npm ERR! fatal: Could not read from remote repository.
npm ERR!
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.
npm ERR!
npm ERR! exited with error code: 128

npm ERR! A complete log of this run can be found in:
npm ERR!     ごちゃごちゃ
(#°﹏°) <
```

## ここから本題

ナイスなissueがあったので、それに従ってみた。 => https://github.com/lelandrichardson/react-primitives/issues/82

`src`配下に以下のようにディレクトリをきって、`index.d.ts`ファイルを作成する

`src/@types/react-primitives/index.d.ts`

```index.d.ts
declare module 'react-primitives' {
  export {
    StyleSheet,
    View,
    Text,
    Image,
    Touchable,
    Animated,
  } from 'react-native'
}
```

ファイル置いておけば自動で認識して解決してくれる。


## 所感

今回はreact-nativeから流用できたから楽だった。

こういうケースは他のライブラリでも多いと思うが、`tsconfig.json`で`"skipLibCheck": true`して無視してしまうのが一般的なんだろうか。どうなんでしょう。


以上、ありがとうございました。
Eclipseから起動したTomcatのWebアプリケーションマネージャにアクセス

## 設定ファイルの編集
以下、二つの設定ファイルに追記する

- tomcat-users.xml

roleとuserを追加

```xml:tomcat-user.xml
<tomcat-users>
  :
 （中略）
  :
  <role rolename="manager-gui"/>
  <user name="任意のユーザ名" password="任意のパスワード" roles="manager-gui"/>

</tomcat-users>

```

- server.xml

Contextを追加

```xml:server.xml
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
  :
 （中略）
  :
  <Context path="/manager" docBase="${catalina.home}/webapps/manager" privileged="true"/>

</Host>

```

## アクセス
Eclipseよりtomcatを起動して以下のURLにアクセス
```http://localhost:8080/manager/html```

Basic認証画面が表示されたらOK!!
tomcat-user.xmlに追加したユーザ・パスワードでアクセス可能
S2Strutsのチュートリアルをやってみよう(#2_180424)

##本日の成果
　・eclipseのtomcat起動成功

##困った点
　★s2strutsチュートリアルプロジェクトをtomcat起動できなかった
　　http://s2struts.seasar.org/ja/1.2/s2struts.html
　　・「クイックスタート」項では、プロジェクト→右クリック→tomcatとある。
　　　実際、tomcatを選択すると、さらに選択肢がある。
　　　![s2struts_不具合_#01.jpg](https://qiita-image-store.s3.amazonaws.com/0/189961/4d6912fa-d4b9-2cc9-c76e-445dde56b01a.jpeg)

　　・Tomcatプロジェクトにチェックを付けてもtomcatの対象モジュールとして挙がらない
　　・動的Webプロジェクトとして再作成したが、やはり認識されない
　　　
##コメント
　　tomcatの対象とするにはどうすればよいか、もう少し調べる。
横並び、横並び in 横並び

![Lego-bricks.jpg](https://qiita-image-store.s3.amazonaws.com/0/20635/418ac12d-fe10-2840-b559-95fc359ed176.jpeg)

#0、目的
BOXの横並びと、BOX in BOXの横並びをよく使用するのでメモとして残す


<img width="387" alt="スクリーンショット 2018-04-25 0.03.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/20635/8059e822-ea14-9c4f-4aca-3c70147f0e46.png">

##1-1、横並び
```slim:slim
.wrapper01
  ul.content
    li.box
      | box
    li.box
      | box
    li.box
      | box
```

```scss:scss
.wrapper01 {
  margin: 0 auto;
  background-color: #ccc;
  width: 400px;
  height: 400px;
  .content {
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    .box {
      width: 100px;
      height: 100px;
      background-color: red;
      margin-right: 8px;
      text-align: center;
      line-height: 100px;
      &:last-of-type {
        margin-right: 0;
      }
    }
  }
}
```

##1-2、横並び in 横並び
<img width="379" alt="スクリーンショット 2018-04-25 0.03.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/20635/7bf10115-efb5-4217-948a-211c56b501f1.png">

```slim:slim
.wrapper02
  ul.content
    .content-box
      li.box
        | box
      li.box
        | box
      li.box
        | box
    .content-box
      li.box
        | box
      li.box
        | box
      li.box
        | box
    .content-box
      li.box
        | box
      li.box
        | box
      li.box
        | box
```

```scss:scss
.wrapper02 {
  width: 400px;
  height: 400px;
  margin: 20px auto;
  background-color: #ccc;
  .content {
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    box-sizing: border-box;
    .content-box {
      width: 100px;
      height: 100px;
      background-color: red;
      margin-right: 6px;
      display: flex;
      justify-content: center;
      align-items: center;
      box-sizing: border-box;
      &:last-of-type {
        margin-right: 0;
      }
      .box {
        width: 25px;
        height: 25px;
        background-color: blue;
        text-align: left;
        font-size: 6px;
        margin: 0 2px;
        line-height: 25px;
        text-align: center;
      }
    }
  }
}
```
AI(機械学習)初心者の自分がよくわからなかった単語の意味をまとめてみた

AI(機械学習)の勉強を開始した。
いろいろな記事を読んでいて単語の意味を理解していないと
まったくついていけなかったので、
少しでも同じ境遇の方の助けになればと思い、
自分がよくわからなかった単語と意味をまとめていく。

# 層
## FC層　フル結合層
## FC層直前
## 畳み込み層
入力と出力の間にある「重み」と「次のパーセプトロンに出力する関数が詰まってる部分」のセットのこと。
## conv層
## 多層パーセプトロン

# 実装時に出てきた単語
## ImageDataGenerator
## flow_from_directory
## 重みを保存　save_weights
## freeze
## epoch
学習を繰り返す数。
何回学習を繰り返させるのか。
同じデータセットで繰り返し学習させる時の回数？
## 損失関数　categorical_crossentropy　binary_crossentropy
## 最適化アルゴリズム　optimizer　SGD　adam

# モデル？
## VGG16
ニューラルネットワークモデルのひとつ。
画像分類に利用しやすいらしい。
### ニューラルネットワーク
人間の脳神経系のニューロンを数理モデル化したものの組み合わせのこと。
重みと評価関数の組み合わせ。
よく見る図で表されてるアレ。
## Sequential 
## Functional API

# 分類
## 多クラス分類
## 2クラス分類

# 分析
## ボトルネック特徴量

# 文章系
## トレーニング用、バリデーションデータを作成するジェネレータ
## 結合させてモデルとする
## 畳み込みブロックの出力をフラット化する
VBA 指定した年　月 の指定した曜日の第5週の日付があれば返す関数

#第5週の日本だけの必要性
第5週というのはオフィスでは無視されています。
 1. 海外では28日を超えると翌月の週にカウントしている
 2. ヨーロッパは月単位ではなく第何週というカウントをしている。
1年は365日...なので72週でカウントする。なに1日に足りないって？たぶんバカンスなのかな。[ヨーロッパで使われるWeekカレンダーとは｜2014年のウィークカレンダー](ヨーロッパで使われるWeekカレンダーとは｜2014年のウィークカレンダー)
 3. アメリカも給料は隔週単位で出る（もちろん月1もあり）ことが少なくないので、やっぱり第5週がいらない。
 4. そんな感じでどこも必要とされないので存在しない

あとはイスラム圏と日本以外のアジア、ロシアあたりですが、あまりなさげ。

#使用方法
##前提条件
まず第5週は29日以降しか存在しません。つまり最大で3日しか存在しません。
2月はうるう年でなければ、第5週は存在しません。
DateSerialであらわすと
DateSerial(iYear, iMonth, 29) 
DateSerial(iYear, iMonth+1, 0)
0というのは翌月の1日から見た前日、つまり常に月末を表します。

##引数、曜日は定数

第5週がありそうな4桁の西暦、月、曜日をいれます。
曜日は1~7ですが、vbMondayなどの定数が使えます。

##エラーチェック
1900年代以前や、月が1~12ではない。曜日が定数の1~7でなければ `00:00:00`が返ります。vbEmpty
また第5週に指定した曜日が存在しなければ`00:00:00`を返します。

```vb
Function Dayof5thWeekday(iYear, iMonth, iWeekday) As Date
Dim Dt As Date
'for MicroSoft Office Suit VBA
'Q11Q From Qiita
'Exsample:Dayof5thWeekday(2018,4,vbMonday) return 2018/4/30
'You can Use vbSunday(=1) to vbSaturday(=7)
'If Error Occur Then Return '00:00:00'
'///// Error Check Block '/////
On Error GoTo Terminator
If iYear < 1900 Then Dayof5thWeekday = vbEmpty: Exit Function
If iMonth < 0 Or iMonth > 13 Then Dayof5thWeekday = vbEmpty: Exit Function
If iWeekday < 1 Or iWeekday > 8 Then Dayof5thWeekday = vbEmpty: Exit Function
'///// Calculation Blocik /////
Dt = DateSerial(iYear, iMonth, 35 - weekday(DateSerial(iYear, iMonth, 0), iWeekday + 1))
If Month(Dt) < iMonth + 1 Then
Dayof5thWeekday = Dt
Exit Function
Else
Dayof5thWeekday = vbEmpty
End If
Exit Function
Terminator:
If Err.Number <> 0 Then Debug.Print Err.Number, Err.Description: Err.Clear
Dayof5thWeekday = vbEmpty: Exit Function
End Function
```
Javaサーブレット/JSP MVCモデルとは

# MVCモデルにおける各要素の役割
それぞれの要素が役割を果たして、１つのアプリケーションが完成します。

|要素|名称|役割|
| --- | --- | --- |
|Javaクラス|Model|処理やデータを格納する|
|JSP|View|画面の表示を担う|
サーブレットクラス|Controller|処理を受け付けて割り振る|

# MVCモデルを作成しよう！
実際に、MVCモデルを作成していきます。
ControllerからModelやViewに指示を受け渡します。

## Controllerの振る舞い
サーブレットクラスから、ModelであるJaveクラスやViewを担うJSPに様々な処理を依頼していきます。

- [**Viewの描画**](https://qiita.com/kent2980/items/8d06369dc6a5474b5292)