OmniAICreator/Qiita-1.07M huggingface dataset:
ここまでのまとめ

#更新予定リスト

* ステージを作る
* キャラクター作成
* システム向上（対戦、通信）
 * アニメーション 
 * HP、攻撃方法の追加
 * キャラクターセレクト
 * photonを使って遠隔通信をできるようにする。
 * その他システムの改善

#感想

さっき書いた事をできるだけできるようにしたいです。
Lambdaでマップ型のデータをリスト化しDynamoDBへPOSTする

AWS Lambda(Node.js)を使用してDynamoDBにマップ型のデータをリスト化し、DBへ保存する。

```sample.js
"use strict";
let AWS = require('aws-sdk');

AWS.config.apiVersions = {
    dynamodb: '2012-08-10'
};

let dynamo = new AWS.DynamoDB();


exports.handler = function(event, context) {

  var param ={
   TableName: "Playlist",
  Item:{
    "sample": { 
         L:[{
              M:{"Test" : {S : event["body-json"].sample["0"].Test}}
        }]}
      },
    };

 dynamo.putItem(param, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

};

```
.sample["0"]でsampleアイテムのリスト型の0番目の要素を指定し、その中のTestというキーを.Testで指定しています。
【Mac】プロンプトの変更

コマンドラインの`$`の前に表示される文字の変更方法
`$`の前に出力される文字は設定ファイルの**`PS1`**で設定しています。
→ **`PS1`**の値を変更すれば`$`の前に出力される文字を変更できます。

## bashプロンプト設定用の特殊文字列 (`PS1`に設定する値)

| 特殊文字列 | 意味 |
|:-:|:-:|
| `\w`  | 作業ディレクトリを表示  |
| `\W`  | ホームディレクトリを `~` で示した作業ディレクトリ  |
| `\!`  | コマンド履歴  |
| `\H`  | 完全なホスト名  |
| `\h`  | 最初のピリオド記号のまでのホスト名  |
| `\@`  | 12時間 (a.m./p.m.) 表示形式の時刻  |
| `\A`  | 24時間表示形式の時刻  |
| `\u`  | ユーザ名  |
| `\$`  | ユーザ識別番号が0でスーパーユーザなら`#`記号。<br>それ以外は`$`記号  |

## コマンド編

ホームディレクトリで以下のコマンドを実行。

```sh:~/
PS1="$ "
```
![Screen Shot 2016-09-11 at 15.19.18.png](https://qiita-image-store.s3.amazonaws.com/0/140455/5c032bc2-1ebb-9b00-a3b6-156cc01ba28c.png)
となる。

### "作業ディレクトリ"、"コマンド履歴"、"$"を表示する場合

ホームディレクトリで以下のコマンドを実行。

```sh:~/
PS1="\w \! \$ "
```

![Screen Shot 2016-09-11 at 15.35.04.png](https://qiita-image-store.s3.amazonaws.com/0/140455/8d481c17-2d07-6a6b-99b1-e6b76c465351.png)
となる。

## 手動編

bashシェルの環境設定ファイルを直接編集。設定ファイルは`$HOME/.bash_profile`。
### "$"マークだけ表示したい場合

`export PS1="$ "`を設定ファイルの末尾に追加。

![Screen Shot 2016-09-11 at 15.19.18.png](https://qiita-image-store.s3.amazonaws.com/0/140455/5c032bc2-1ebb-9b00-a3b6-156cc01ba28c.png)
となる。

*--Note--*
ターミナルが読み込む設定ファイルのうち、
システム全体で共有される設定ファイルは
"***/etc/profile***"と"***/etc/bashrc***"
Your app uses or references the following non-public APIs: nextStartIndex でiOSアプリがリジェクトされる件

# Your app uses or references the following non-public APIs: nextStartIndex
### 発生状況
iOSアプリをswiftで開発中、FireBase/Auth '3.0.4' をCocoaPodsでインストールし審査に出したところ表題の件でリジェクトを食らった。

### 原因：nextStartIndexという変数名が非公式なライブラリで用いられている

以下google-api-objectivec-clientのgithub_issueでも同様の議論がなされています。
https://github.com/google/google-api-objectivec-client/issues/203

今回についてはFireBase/Authと依存性があり、pod installした際一緒にインストールされているGoogleParsingUtilitiesというライブラリで上記issueと同様の問題が発生しているようです。


# 解決方法

###1.Podsを全て削除
一旦インストールされているPodsを全て削除しましょう。
プロジェクト以下Podsディレクトリ及びPodfile.lockを削除します。

###2.FireBase/Authの依存ライブラリからGoogleParsingUtilitiesを削除
CocoaPodsのライブラリ間の依存性は下記ディレクトリに記載されています。
~/.cocoapods/repos/master/Specs/[ライブラリ名]
今回の場合は
.cocoapods/repos/master/Specs/FirebaseAuth/3.0.4/FirebaseAuth.podspec.jsonを参照する。

```json:FirebaseAuth.podspec.json
{
  "name": "FirebaseAuth",
  "version": "3.0.4",
  "summary": "The official iOS client for Firebase Authentication",
  "description": "Firebase Authentication allows you to manage your own account system without any backend code. It supports email and password accounts, as well as several 3rd party authentication mechanisms.",
  "homepage": "https://www.firebase.com/docs/ios/guide/user-auth.html",
  "license": {
    "type": "Copyright",
    "text": "Copyright 2016 Google"
  },
  "authors": "Google, Inc.",
  "platforms": {
    "ios": "7.0"
  },
  "source": {
    "http": "https://www.gstatic.com/cpdc/aed21d1eaa5e6168/FirebaseAuth-3.0.4.tar.gz"
  },
  "vendored_frameworks": [
    "Frameworks/frameworks/FirebaseAuth.framework"
  ],
  "preserve_paths": [
    "CHANGELOG.md",
    "README.md"
  ],
  "frameworks": [
    "Security"
  ],
  "dependencies": {
    "FirebaseAnalytics": "~> 3.2",
    "GoogleUtilities": "~> 1.2",
    "GoogleParsingUtilities": "~> 1.1.0",
    "GoogleNetworkingUtilities": "~> 1.2"
  }
}
```

dependenciesの部分にあるGoogleParsingUtilitiesを削除。

### 3.pod install
以上手順を踏んだ上でpod installを行うと問題となっていたライブラリはインストールされなくなると思います。
GoogleParsingUtilitiesをインストールしていなくてもFireBase/Authは動作するはずです。
背面にある要素のクリックイベントを発火させる方法

#はじめに
「カーソルにオリジナルの画像を入れたいけど`.cur`の画像使えない！」
みたいなことがありまして、JS使ってカーソルに画像がついてくるようにしたんですが、、、

クリックが効かない！！！！

#原因
カーソルの直下に画像のレイヤーが来てしまっているので、どこをクリックしてもその画像をClickしていることになってしまうんですね。

#最新のやりかた
こういう時は画像のクリックイベントを無効にしてあげればいいわけで、CSS3だと下記のような指定をすれば良いわけです。
 
```
.cursor_img { pointer-events: none; }
```

#しかし今回は、、、
大人の事情により
「IE9に対応してないんでそれはなしで」
ということになりました。

Oh...

そこでいろいろと検索したところ、こんなページにたどり着きました。

[JS/CSS] 背面にある要素のマウスイベントを発火する
http://nbnote.jp/blog/2012/04/mouse-enabled/
Forwarding Mouse Events Through Layers
http://www.vinylfox.com/forwarding-mouse-events-through-layers/

##詳細
下記のような感じで処理をしています。

クリック後一時的に上のレイヤーを非表示にする
↓
クリックイベントが発火した場所の座標を取得
↓
その座標にある要素を取得
↓
その要素のクリックイベントを発火
↓
上のレイヤーを表示させる

`document.elementFromPoint`を使うとその座標にある要素を取得できるようです。
【参考】document.elementFromPoint - MDN
https://developer.mozilla.org/ja/docs/Web/API/Document/elementFromPoint

JSはこんな感じです。
今回は特定のクラスを持ったレイヤーのクリックイベントを発火させたかったので、そのクラスを持ったレイヤーが出てくるまで親要素を遡るようにしています。

```js
$cursor = $('.cursor_img');
$cursor.on( 'click', function( e ) {
  $cursor.css( { display: 'none' } );
  let elem = document.elementFromPoint( e.clientX, e.clientY );

  let dig = ($node)=> {
    if($node.hasClass('link')) return $node;
    return dig($node.parent());
  }
  let $parent = dig($(elem));
  $parent.trigger('click');

  $cursor.css( { display: 'inline' } );
} );
```

参考元では

```
document.elementFromPoint( e.pageX, e.pageY );
```

としていますが、僕のところではうまくいかなかったので`clientX`と`clientY`を使いました。
homebrewでprotobufを最新版(3.0.0)にアップグレードする

私の環境では、旧バージョンのprotobufがインストールされていたので、最新版にアップグレードしました。

```bash
$ brew update     # formula を更新
$ brew upgrade    # 更新があるパッケージを再ビルドする
$ brew upgrade protobuf # protobufをアップグレード

$ protoc --version
libprotoc 3.0.0
```
n次のテイラー展開と同精度のsin関数の近似を得るためにはn点の訓練データがあれば良いか？

ある関数を機械学習するのに必要十分な訓練データセットは何かという問題があります。sin関数のようなテイラー展開できる関数を考えた場合に、$n$次のテイラー展開と同精度を得るには、$n$点の訓練データがあれば必要十分と言えたらきれいだなと思い実験してみました。

実際に試してみると、色々勘違いしていたことがわかりました。まずsin関数を近似しようとすると線形回帰では無理で、多項式フィッティングを行う必要があります。

$n$次のテイラー展開と同様にということで、$n$次までの多項式を基底関数とした$n$次元の特徴ベクトルで線形回帰を行うわけですが、$n$個の基底関数に対する重みを求めるには$n$個の訓練データがあれば良いという訳で、最初に考えたことは当たり前の結果でした。

また実際に試してみると$n$次のテイラー展開と多項式フィッティングの結果は一致せず、多項式フィッティングの方がずっと精度が良いようでした。これはテイラー展開の係数は$n\rightarrow\infty$の極限で適切な値となっているためではないかと思います。

![approx_sin.png](https://qiita-image-store.s3.amazonaws.com/0/114365/56432727-4b1c-7ad4-0e90-8e1a412fa9e5.png)

上図は$n=1, 3, \dots ,15$でのsin関数のテイラー展開と多項式フィッティングの結果です。多項式フィッティングは与えられた次数の元で誤差が最小になるように係数を最適化しますから、テイラー展開より誤差が小さくなって当然かなと思います。

![approx_sin_mse.png](https://qiita-image-store.s3.amazonaws.com/0/114365/251cb6ff-3c15-6b7e-169e-3016b4beba00.png)

上図は$n=1, 3, \dots ,15$でのsin関数と、テイラー展開、多項式フィッティングによる近似の平均二乗誤差になります。多項式フィッティングの誤差が$n=15$で増えているのがちょっと気になりますが、多項式フィッティングの方がテイラー展開よりずっと誤差が少ないです。

[Jupyter notebookへのリンク](https://github.com/kibo35/idea/blob/master/sin.ipynb)
laraveler向け Phpstormからsublimetext3に戻る人のための設定ガイド

目次
1, なんでこんな事を考えるのか
2, package installでそろえるもの
3, デフォルトで設定するもの
4, 使ってみてどう?

## 1,なんでこんな事を考えるのか
最近、Phpstormの学生アカウントがきれまして お家のパソコンでPhpstormが使えなくなりますた、、、

macの容量食うし なんだか処理重いし(それはお前がyoutube聞くせいだろ?)

なんだかんだあったので (ライセンス切れただけ)
sublimetext3を再ダウンロードした次第なんですが、自分はlaravel使うんですけど
何これ何もしてくれない(涙)

やはりphpstormの自動でuseしてくれたり、goto declearetionとか懐かしくなりますね

そういうわけなのでsublimetextでlaravelを使うための設定をまるっとまとめました。

## 2,package installでそろえるもの

とりあえずpackage installで以下のパッケージを入れて
laravel用

view周りでbladeを使用する場合は
`Blade Snippets`
を
twigに置き換えている場合は
`twig`
を使用すればいいんじゃないかなと思います。

laravelでファイルの自動生成を使っている方はこちらを
`laravel5 artisan`
`php Companion`
を入れるとuseしてくれます
phper向けなのですが
`Abacus`
を入れると整列とかしてくれて意外に助かります。



## 3, デフォルトで設定するもの
	
	{
	"color_scheme": "Packages/User/SublimeLinter/Monokai (SL).tmTheme",
	"draw_white_space": "all",
	"font_size": 14,
	"ignored_packages":
	[
		"vintage"
	],
	"tab_size": 4,
	"theme": "Flatland Dark.sublime-theme",
	"translate_tabs_to_spaces": true
	}

	
key binding userはとりあえす以下に設定しています。

	[
	  { "keys": ["f6"], "command": "expand_fqcn" },
	  { "keys": ["shift+f6"], "command": "expand_fqcn", "args": {"leading_separator": true} },
	  { "keys": ["ctrl+u"], "command": "find_use" },
	  { "keys": ["f4"], "command": "import_namespace" },
	  { "keys": ["f3"], "command": "implement" },
	  { "keys": ["shift+f12"], "command": "goto_definition_scope" },
	  { "keys": ["f7"], "command": "insert_php_constructor_property" },
	  {  
	        "keys": ["alt+r"], "command": "abacus"  
	  }
          {
           "keys": ["alt+shift+0"],
           "command": "set_layout",
           "args":
           {
           "rows": [0.0, 0.5, 1.0], //列方向の分割位置
           "cols": [0.0, 0.7, 1.0], //行方向の分割位置
           "cells": [[0,0,1,1], [1,0,2,2], [0,1,1,2]] //画面の構成
           }
          }
	]



にしています。
一度に全て書ききれないのでアップデートしていきます。

## 4, 使ってみてどう?

useはなんとかしてくれるし割りとはかどっています。

おすすめのプラグインあればコメントして教えていただけると幸いです。
Horizon.jsのinitは引数なしで実行可能

小ネタ。

Horizonでアプリケーションを作る際、```$ hz init AppName```で必要なディレクトリ・ファイルが自動生成されます。

```$ hz init hoge``` の結果、生成される内容はこのとおり。

<img width="176" alt="Screen Shot 2016-09-11 at 3.07.07 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/77614/3df58ac9-223c-e60a-154a-b8b2290e5771.png">

一方で、

```
$ hz init 
```

だと以下のファイルだけが生成されます。

<img width="207" alt="Screen Shot 2016-09-11 at 3.02.59 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/77614/5505344c-616b-5e2d-1b3a-55079dfe78a9.png">

コンフィグ系のファイルが生成されました。
ちなみに、```.hz```がない状態で```hz serve --dev```（ローカル開発サーバの起動）をしようとすると、以下のエラーが出ます。

```
this directory doesn't contain an .hz directory
```

すでにアプリケーションを作成してしまっていて、追加でローカル開発サーバのための設定ファイルだけがほしい場合、```$ hz init``` だけで良さそうです。
R > データセットを減らす > newx<-x[1:5]

```txt:動作環境
RStudio @ rollapp
R version 3.3.0
```

Excelのデータと自分が計算で求めた結果を比較したい。
Rではデータセット数が異なるものでplot(x,y)するとエラーになる。
データ数が同じになるようにサブセットを作る必要がある。

データセットからサブデータセットを得る方法は以下に見つけた。
http://www.statmethods.net/management/subset.html

```R
> x<-1:10
> newx<-x[1:5]
> newx
[1] 1 2 3 4 5
```

「1から10の値」から「1から5のサブセット」を取得できた。

http://ideone.com/aFOsIE
rvestでwebページのリンクをたどる

####やること

みん株のトヨタのページから隣の日野自動車のページへ移動。
戻ってきて、四季報の業績のページへ移動して、業績のテーブルを取得する。

```r
library(rvest)

session <- html_session('http://minkabu.jp/stock/7203')

#まず '【7203】　トヨタ自動車'を取得
name <- session %>%
  html_node('div.md_stockBoard_stockName.fll') %>%
  html_text()
#> name
#[1] "\n        【7203】トヨタ自動車\n      "

#隣のページへ移動
session <- session %>%
  follow_link(css = 'a.next.box')
#同様に'【7205】 日野自動車' を取得
name2 <- session %>%
  html_node('div.md_stockBoard_stockName.fll') %>%
  html_text()
#> name2
#[1] "\n        【7205】日野自動車\n      "

#戻ってきて、今度は四季報のページへ移動
session <- session %>%
  back() %>%
  follow_link(css='a.mr15')
#四季報のページで業績のテーブルを取得し、データフレームへ
syuyou_table <- session %>%
  html_node('table.syuyou') %>%
  html_table()

str(syuyou_table)

```

参考
https://github.com/hadley/rvest
https://cran.r-project.org/web/packages/rvest/rvest.pdf
Amazon EC2 の Postfix から Gmail でメールを送信する

## Gmail の2段階認証を有効にする
1. https://myaccount.google.com/security#signin から「２段階認証プロセス」のリンクを辿り、２段階認証を有効にする
2. https://myaccount.google.com/security#signin から「アプリ パスワード」のリンクを辿り、アプリ用のパスワードを取得する

## ソフトウェアのインストール
```shell-session
$ sudo yum install -y postfix mailx cyrus-sasl-plain cyrus-sasl-md5
```

## Postfix の設定変更
```shell-session
$ sudo vi /etc/postfix/main.cf
```
以下の行を変更 / 追加する。

```text
# 変更
#inet_protocols = all
inet_protocols = ipv4     # all -> ipv4 に変更、IPv6 を無効化

# 追加
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
```

## パスワードの設定
ファイルを新規に作成する。

```shell-session
$ sudo vi /etc/postfix/sasl_password
```
以下の行を記述する。

```text
［smtp.gmail.com]:587 ユーザ名@gmail.com:アプリ用パスワード
```

```shell-session
$ sudo chown root:root /etc/postfix/sasl_password
$ sudo chmod 600 /etc/postfix/sasl_password
$ sudo postmap /etc/postfix/sasl_password
$ sudo service postfix restart
```

## 動作確認
```shell-session
$ echo "test" | mail -s "test" 送信先メールアドレス
```
2016年度版エクセルスクショ取得ツール

# はじめに
SI 業界で度々話題になる[Excelスクショ問題](http://www.jmuto.info/2014/08/excel-screen-shot-problem.html)について、今年も新人さんが言及し始めたようなので、知見を残そうと思います。2016 年度版です。

# 対処例

2016 年現在、さすがにエクセルスクショ職人のパソコンも Windows7 が主流かと思います。ただしフリーソフトの導入は厳禁かと思います。

では対処例を。

Excel といえば VBA ですが、今回は Powershell を使います。
とりあえず以下の様なスクリプトを用意しました。`Create-ExcelEvidence.ps1` など適当な名前で保存してください。

※最新のソースコードは [github](https://github.com/asterisk9101/Create-ExcelEvidence) から取得してください。

```ps1:Create-ExcelEvidence.ps1
param($Path)

function logger($msg) {
    $msg = (Get-Date -Format "u") + "`t" + $msg
    Write-Host $msg
}

logger "Processing..."
Add-Type -AssemblyName System.Windows.Forms

$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $true
logger "Connected to Excel."
if ($path) {
    try {
        $Excel.Workbooks.Open($Path) > $null
        logger "Open $Path"
    } catch {
        logger "File Open Failed. => $Path"
        $Excel.Quit()
        return;
    }
} else {
    $Excel.Workbooks.Add() > $null
}

# qiita bug?
# [System.Windows.Forms.Clipboard]::SetDataObject("")
# logger "Clear Clipboard."

while($true){
    if ([system.windows.forms.Clipboard]::ContainsImage()) {
        $Excel.ActiveCell.Value2 = Get-Date -Format "\'yyyy/MM/dd HH:mm:ss"
        $Excel.ActiveCell.Offset(1, 0).Select() > $null
        $Excel.ActiveSheet.Paste()
        $Graphic = $Excel.Selection
        $Offset = $Excel.ActiveCell.Top + $Graphic.Height
        measure-command {
            $Caption = $Excel.Caption
            $Excel.Caption = "Pasting..."
            $cell = $Excel.ActiveCell
            while ($cell.Top -lt $Offset) {
                $cell = $cell.Offset(5,0) # speed up
            }
            while ($cell.Top -gt $Offset) {
                $cell = $cell.Offset(-1,0) # rewind...
            }
            $cell.Offset(2,0).Select() > $null
            $Excel.Caption = $Caption
        } | % { logger $_.TotalMilliseconds.toString("#####.000ms").padleft(10) }
        [System.Windows.Forms.Clipboard]::SetDataObject("")
    }
    if ($Excel.Visible -eq $False) {
        logger "Excel Closed."
        break
    }
    Start-Sleep -Milliseconds 100
}
logger "Terminating..."
```

`Powershell` はデフォルトでスクリプト実行が制限されていますので、使い方にはコツが必要です。
コマンドプロンプトで以下のように。

```console
C:> PowerShell -sta -ExecutionPolicy Bypass .\Create-ExcelEvidence.ps1
```

長いコマンドにアレルギーがある人でなければ、上記の方法で問題ないはずです。

ただ、外部から操作しているせいか内側のループがやたら遅いです。スクショ貼るごとに 1~2 秒は CPU 1 コアを占有しているようです。スペックの低いパソコンだと問題になるかもしれません。

# おわりに

知見を残すだけのつもりが、普通に使えそうなスクリプトができてしまった。
【備忘録】初めてのUnityとCI

#UnityでJenkinsを使ってみる
## 環境
- mac
- Unity：5.3.5f1
- Jenkins：2.21

## 以下を参考にして詰まった

[Unity3dBuilder Pluginを使ってJenkinsでUnityのビルドを自動化。Androidのapkを作ってみた。](http://qiita.com/unsoluble_sugar/items/a268b6c38d9603d871da)

### 単純にこの通りにやったら下記のエラー

```
Couldn't set project path to: /Users/****
```

## 解決策
- そもそものJenkinsのプロジェクト設定ミス
 - プロジェクトの「設定」＞General＞高度な設定...＞カスタムワークスペースを使用にチェック
 - テキストフィールドに対象となるUnityのプロジェクトディレクトリを指定して「保存」
オンラインで書いたプログラムをブログに埋め込む

オンラインでプログラムを書いて実行できるサービスもいろいろと増えてきました。

[オンラインでプログラミングして実行できるサイト - Qiita](http://qiita.com/tttamaki/items/2b009aa957cfa4895d50)

これらのサービスの中には、書いたプログラムをブログなどに埋め込むことができるものもあります。実際、どのように埋め込まれるかを調査しました。

## 調査対象

埋め込みが可能っぽい**無料**のオンラインプログラミング環境

+ [![paiza.io](https://qiita-image-store.s3.amazonaws.com/0/82307/93f635c6-379e-c3a8-554c-69846fb6f869.png)](https://paiza.io/)
+ [![Ideone.com](https://qiita-image-store.s3.amazonaws.com/0/82307/1bb36e44-6687-007d-540e-4278e45fb84d.png)
](https://ideone.com/)
+ [![repl.it](https://qiita-image-store.s3.amazonaws.com/0/82307/d0a7e0ad-8b43-cad0-598f-faa8be3fbae2.png)
](https://repl.it/)
+ [![JDOODLE](https://qiita-image-store.s3.amazonaws.com/0/82307/accfc73b-126a-4aa2-f175-44d10b69bdb9.png)
](https://www.jdoodle.com/)

※他にご存知であればコメントでご指摘いただけますと助かります

## 調査方法

+ tumblrに埋め込んでみる / [埋め込んだ結果](http://kscf.tumblr.com/tagged/embed-test)

## paiza.io

![paiza.png](https://qiita-image-store.s3.amazonaws.com/0/82307/e0018d6c-4191-8bd2-d906-a5bb47403210.png)

+ pros
  + 入力を指定して実行できる
  + 実行して出力結果も見られる
+ cons
  + コードを貼って公開したい目的に対しては高機能すぎる
  + 色が目立つので、サイトの配色とあわないとツラいかも

## Ideone.com

![ideone.png](https://qiita-image-store.s3.amazonaws.com/0/82307/c704c764-6803-8693-d6c7-cf35bd874053.png)

+ pros
  + ソースを公開するという目的では必要最低限
+ cons
  + 実行できないのがさみしいといえばさみしい

## repl.it

![repl.png](https://qiita-image-store.s3.amazonaws.com/0/82307/1204a215-b3cc-d432-e172-50fc2a73511d.png)

+ pros
  + ぱっと見た感じ、ソースコードだけの表示だけど、実行すると、実行結果もちゃんと出る
+ cons
  + paizaとは違い、標準入力は指定できない
  + `<?php //code ?>`を省かずにrunボタンを押すと実行エラーになる
  + コードが0行目から始まっている

## JDOODLE

![JDOODLE.png](https://qiita-image-store.s3.amazonaws.com/0/82307/01cde973-3a0d-bdbe-0087-c2ab5cfd8cb8.png)

+ pros
  + 入力を指定して実行できる
  + 実行して出力結果も見られる
+ cons
  + [埋め込みコードを生成してくれるわけではない](http://blog.nutpan.com/2016/07/run-programs-directly-from-your-blog-or.html)ため、めんどくさい
  + paizaよりも表示領域がデカい

## まとめ

個人的には「Ideone.com」が気に入りました。ですが、埋め込むサイトのデザインや、公開目的でどれが良いかは変わると思うので、状況次第で使い分けたほうが良いかも知れません。

+ paiza.io ：無難
+ Ideone.com ：公開するだけなら
+ repl.it ：機能美なのは認める
+ JDOODLE ：めんどくさいのは嫌だ

## 番外編

repl.it → Gistに共有 → Gistの埋め込み
※なんだかんだでこれが一番良いかも（ぉぃ）
Android StudioでBuild APKした時に、Error Missing Translationでビルドが止まる場合の対処法

試した環境：Android Studio 2.1.3

#対処法
モジュール(Module: appなど)のbuild.gradleに、
lintOptions「disable 'MissingTranslation'」を設定する。

例：
　buildTypes {
　　release {
　　　minifyEnabled true
　　　proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
　　　lintOptions {
　　　　disable 'MissingTranslation'
　　　}
　　}
　}
※注意：必要なのは、lintOptions {}の部分です。
該当部分のみでは分かりにくいので、前後の部分も掲載してあります。
(proguardの設定は、デフォルト値から変えてあるので、設定が異なる場合は上書き注意。)

##補足1　abortOnErrorをfalseに設定するのはやめておきましょう。
現行バージョンで試した場合、abortOnErrorをfalseに設定した場合も、MissingTranslationのエラーで止まります。
逆に、abortOnErrorをtrueに(明示的に)設定した場合も、
disable 'MissingTranslation'が設定してあれば、ビルドが通ります。

##補足2　Android StudioのInspectionsの設定では、エラーを回避できません。
[設定項目]
File/ Settings...
　Editor/ Inspections
　　"Android > Lint > Correctness > Messages"
Incomplete translation (available for ～)
Severity デフォルト：Error

SeverityをWarningにする。または、チェックボックスを外しても、Error Missing Translationでビルド(Build APK)が止まります。

##補足3
disable 'MissingTranslation'の「disable」を他の(lintのオプションには無い)単語にしてもビルドが通ることも・・・
おそらく、ただのバグ。(深刻なバグな気もしますが。)

##原因
ビルド(Build APK)時に、
Error: ～ is not translated in ～ [MissingTranslation]
などが出力され、lintVitalReleaseタスクが通らないため。

※エラーは、Gradle Consoleに表示されます。
(Messagesにもエラーが表示されますが、出力がかなり省略されているので、原因が分かりにくいです)

※Gradle Consoleに表示される対処法は、lintVitalReleaseタスク用のものなので注意。

##参考
[Android Studio Project Site - Suppressing Lint Warnings]
In Build File: With Gradle Configuration
http://tools.android.com/tips/lint/suppressing-lint-warnings

[Improve Your Code with Lint]
https://developer.android.com/studio/write/lint.html
※Android Studio Project Siteの方が、情報量が多いと思う。

※対処法の参考リンク
[Stackoverflow - How to sign APK on Android Studio even with non-translated strings?]
http://stackoverflow.com/questions/27472282/how-to-sign-apk-on-android-studio-even-with-non-translated-strings

※原因の参考リンク
[Android Open Source Project - Issue Tracker]
Issue 71343: 	Can't run project with missing translations (release build variant)
https://code.google.com/p/android/issues/detail?id=71343
　・・・The fact that the build output includes the word "Error:" causes the output parser to believe there are errors・・・
R > 行連結文字 + > 数式の途中でEnterすると勝手に行連結文字が追加される?

```txt:実行環境
RStudio @ rollapp
R version 3.3.0
```

参考 Rで学ぶデータ・プログラミング入門 by 石田基広さん

行連結文字として+を使う、という記載を見つけた。

```R
> x <- 7 - 1 - 1 -
+ 1
> x
[1] 4
```

`+1`の+は行連結文字。算術の+ではない。

上記の入力としては
`x <- 7 - 1 - 1 -`を入力してEnterを押すとRStudioの方で自動的に行連結文字(+)が追加された。
その後に1を入力した。

関連 [行連結 > C, C++ / bash / Fortran(固定形式) / Fortran(自由形式)](http://qiita.com/7of9/items/021bb0fa9443c2efc44b)
ERROR! The server quit without updating PID file → /usr/local/var/mysql/hogehoge.pidを消してmysql起動

まず、おなじみのCan't connect to local MySQL server through socket '/tmp/mysql.sock' (2)が出現。

[mysqlが起動できなくなった（Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)）
](http://qiita.com/carotene512/items/e00076fe3990b9178cc0)

↑を参考にしたら、エラー内容が変化。

```
$ mysql -u root
```
の結果、```ERROR! The server quit without updating PID file (/usr/local/var/mysql/hogehoge.pid).```というエラーが出るように。

updatingに失敗してるとのことなので、

```
$ rm /usr/local/var/mysql/hogehoge.pid
```

すると、

```
$ mysql.server start
Starting MySQL
. SUCCESS!
```

参考までに。各自、自己責任でお願いします。
onlineTool > RStudio @ rollapp

RStudioのオンライン実行環境を見つけた。
https://www.rollapp.com/app/rstudio

これを使うことによる問題は何かあるだろうか。

登録しない場合はTestDriveで使う。

実行の様子(コード)をCtrl+Cでコピーしようとしたができなかった。
メニューにあるEdit->Copyも無効だった。
Android Studioでndkを使う


久しぶりにndk触ろうと思ったら設定方法とか変わってたのでメモ. experimentalなプラグインを使うと便利. でもexperimentalなのでproductionに使う場合は注意.

# 環境
* Mac OS X EI Capitan (10.11.6)
* Android Studio 2.1.3

# Android NDKのインストール
1. Cmd+;で「Project Structure」画面を開き, 左のリストから一番上の「SDK Location」を選択.
2. 「Android NDK Location」の「Download」を選択
3. 10分ほどでインストール完了. 結構長い.

# プロジェクトの設定を変更

### gradle-wrapper.propertiesを変更
gradle-2.10を使うようにする. 2.10より新しくてもダメっぽい.

```gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
```

### build.gradle(Project)を変更
変更前

```build.gradle
classpath 'com.android.tools.build:gradle:2.1.3'
```

変更後

```build.gradle
classpath 'com.android.tools.build:gradle-experimental:0.7.0'
```

### build.gradle (Module)を変更

以下のように書き換える. pluginが変わって書き方がだいぶ変更されている. `minSdkVersion`や`targetSdk`、`proguardFiles`の記述方法も地味にも変わっている. 
モジュール名`hello`でndkの設定も足しています.

```build.gradle
apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion 23
        buildToolsVersion "24.0.1"

        defaultConfig {
            applicationId "com.yourdomain.appname"
            minSdkVersion.apiLevel = 19
            targetSdkVersion.apiLevel = 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles.add(file('proguard-android.txt'))
            }
        }
        ndk {
            moduleName = "hello"
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
}
```

# Java/Cのコードを書く
MainActivityに以下のコードを追加.

```java:MainActivity.java
    static {
        System.loadLibrary("hello");
    }

    public native String getMessage();
```

この時点ではnativeに`getMessage()`がないのでエラーが出ています. `getMessage()`にカーソルを合わせ`alt`-`Enter`を押し「create function...」を選ぶとnativeコードの雛形を生成してくれます. 生成されたコードが下記. ちょー便利！！！

```c:hello.c
#include <jni.h>

JNIEXPORT jstring JNICALL
Java_com_yourdomain_appname_MainActivity_getMessage(JNIEnv *env, jobject instance) {
    // TODO
    return (*env)->NewStringUTF(env, returnValue);
}
```

`returnValue`が未実装でエラーが出ているので`"hello world"`と入れておきます.

```c:hello.c
#include <jni.h>

JNIEXPORT jstring JNICALL
Java_com_yourdomain_appname_MainActivity_getMessage(JNIEnv *env, jobject instance) {
    return (*env)->NewStringUTF(env, "hello world");
}
```

これで、`MainActivity`で`getMessage()`が使えるようになりました！
logmon-goで簡単ログ監視

#概要

logmonというファイルを監視し、正規表現で指定した文字パターンが現われると、指定したコマンドが実行できるツールがあります。
設定が簡単で、100行ちょっとのスクリプトという手軽さなので、いろいろなサーバ上でエラーを検出するとその内容をメールで通知するツールとして使っていました。

ただ使っている内に下記の問題点がありました。

1. パターンに一致した行しかコマンドに送ることができないため、エラー行の後にスタックトレースが表示されるようなログの場合は、スタックトレースをコマンドに渡せない。
2. 指定したパターンに一致してても、コマンド実行の対象外としたい文字列があった場合に、除外指定ができない。

そこで新たにGo言語で実装し、上記も対応できるよう実装しました。
go getできるサーバが1台あれば、同じOS環境のマシンに対してバイナリを置くだけで簡単にインストールすることが可能です。

# 実行
## foregroundで実行

1.go getでインストール

```
go get github.com/takeshy/logmon-go
```

2.実行(設定ファイルについては後述)

```
#設定の確認のみ
logmon-go -f 設定ファイルのパス -c
#実行
logmon-go -f 設定ファイルのパス
```

## デーモンとして実行

1.実行ファイルを各サーバの/usr/local/binに配置

```
scp $GOPATH/bin/logmon-go サーバ:/usr/local/bin
```

2.起動スクリプトを記述

```
touch /etc/init.d/logmon
chmod +x /etc/init.d/logmon
vi /etc/init.d/logmon
```

```bash:/etc/init.d/logmon
#!/bin/sh
LOGMON_CONF=/etc/logmon/logmon.conf
LOGMON_BIN=/usr/local/bin/logmon-go

logmon_opts="-f $LOGMON_CONF"

check_start() {
    $0 status > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "Success."
        exit 0
    fi
    echo "Failed."
    exit 1
}

case "$1" in
    start)
        $0 status > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            echo "logmon is alredy running."
            exit 1
        fi
        echo -n $"Starting logmon: "
        $LOGMON_BIN $logmon_opts >/dev/null 2>&1 &
        sleep 1
        check_start
        ;;
    stop)
        echo -n "Stopping logmon: "
        pkill -TERM -of $LOGMON_BIN
        echo Done.
        ;;
    restart)
        $0 stop
        sleep 1
        $0 start
        ;;
    check)
        $LOGMON_BIN -c $logmon_opts
        ;;
    status)
        pid=`pgrep -of $LOGMON_BIN`
        if [ -n "$pid" ]; then
            echo "logmon (pid $pid) is running..."
            exit 0
        fi
        echo "logmon is stopped"
        exit 3
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status|check}"
        exit 1
esac
```


3.設定ファイルを記述(設定ファイルについては後述)

```
vi /etc/logmon/logmon.conf
```

4.実行

```
/etc/init.d/logmon start
```

# 設定ファイルについて

logmonの設定ファイルの設定に監視対象除外Regexpと待機ミリ秒の設定を追加したもの。監視対象除外Regexpと待機ミリ秒の設定はオプションのため、既存のlogmonの設定がそのまま使えるはず。

```nginx:/etc/logmon/logmon.conf
#監視ファイルパス :を先頭につける必要
:/var/log/nginx/error.log
#監視対象のRegexp ()で囲む必要
(ERROR|Error)
#監視対象除外Regexp []で囲む必要。指定しなくてもよい
[SSL_BYTES_TO_CIPHER_LIST]
#この指定ミリ秒数の間、一致行に続く出力文字列をつけ加える。{}で囲む必要。指定しなくてもよい　
{1000}
#監視対象Regexpにマッチかつ監視対象外Regexpにマッチしなかった場合に実行されるコマンド. 
#<%%%%>は一致した文字列に置き換えられる。
#<%%%%>を含む箇所は意図せぬ展開を防ぐため'(シングルクォート)で囲む
echo '<%%%%>' | mail -s "nginx error" takeshy
#複数監視ファイルがある場合は上記を繰り替えす
:/var/www/app/shared/log/unicorn.log
(ERROR|FATAL)
echo '<%%%%>' | mail -s "unicorn error" takeshy
```

# 参照
・[logmon-go](https://github.com/takeshy/logmon-go)
・[logmon でかんたんにログ監視](http://qiita.com/inouet/items/cc1eacef237f2328e98f)
c > Link > 関数のようなマクロの定義

http://stackoverflow.com/questions/3215171/function-like-macro-definition-in-c

>answered Jul 9 '10 at 20:16
>Vanni Totaro

による実装が参考になる。

CUDAの本に出てきた実装が色々な箇所で有用ではないかと思っている。
一方でマクロを使うとソース・リーディング時に読みにくいだろうかとも思う。
連番の数字の配列を作成（es2015 ver)

## tl;dr （追記）

```js
// 0始まりでよいなら・・・
const minitues = [...Array(60).keys()]
// => [0, 1, 2, 3,....,59]

// 1始まりにしたい、etc.なら・・・・
const minitues = [...Array(60).keys()].map(i => ++i)
// => [1, 2, 3, 4,....,60]
```
- コメント欄で教えてもらったやつ。
- コメント主が退会して表示されなくなったため転記

---
例えば 0,1,...,59と続く配列がほしいなら

```js
const minitues = Array.from(new Array(60)).map((v,i) => i)
// [0, 1, 2, 3,....,59]
```

- `(new Array(60)).map(...)`だとうまくいかない

1から始めたいなら

```js
const minitues = Array.from(new Array(60)).map((v,i)=> i + 1)
```


## coffeescriptだと。。。

```coffeescript
minitues = [0...60]
```
ある型を別の型へ代入する事が可能か調べる方法(IsAssignableFromの使い方)

## System.Type.IsAssignableFromメソッドが便利なのですが、よく使い方を忘れるのでメモ

### 構文

``` VB.NET
Public Overridable Function IsAssignableFrom(c As System.Type) As Boolean
```
すなわち、型インスタンスCを型インスタンスTに割り当てる事が可能か[^1]どうか調べたいときには次のように書きます[^2]。（私はよくどっちがどっちだったか混乱して「CとTを逆に書く」ミスをよくやってしまいます。）

``` VB.NET
If T.IsAssignableFrom(C) ...
```

### 使用例
実際の使い方を説明します。想定する状況は以下の通り。

* MaskedTextBox型の変数hogeMaskedTextBoxがある
* hogeMaskedTextBoxがTextBox型変数に代入できるか調べたい

hogeMaskedTextBoxがTextBoxかどうか調べるんだから･･･こうかな！？
#### コード1 (間違ってる例)

``` VB.NET
TextBox.IsAssignableFrom(hogeMaskedTextBox)
```

イミディエイトウィンドウで試しに実行すると･･･ダメです。怒られました。
![IsAssignableFrom160911_01.png](https://qiita-image-store.s3.amazonaws.com/0/81499/c917f44c-4bab-600d-faa6-d1b766df0f5d.png)

そりゃそうですね。IsAssignableFromはSystem.Typeクラスのメソッドであり、TextBoxクラスのメンバじゃないのでエラーになって当然です。･･･じゃあこうでしょ！GetType **演算子** を使ってTypeオブジェクトに変換！


#### コード2 (まだ間違ってる例)

``` VB.NET
GetType(TextBox).IsAssignableFrom(hogeMaskedTextBox)
```

もう一回試すと･･･またエラーです！
![IsAssignableFrom160911_02.png](https://qiita-image-store.s3.amazonaws.com/0/81499/16b8915a-84a8-e7b0-dbbe-6c8964fa53c9.png)


あ、そっか！ISAssignableFromの引数は型だから、ここは「hogeMaskedTextBoxという **オブジェクト** 」ではなく「hogeMaskedTextBoxオブジェクトの **型** 」を渡してやる必要があります。その方法は？今度はGetType **メソッド** でType型オブジェクトを取得してやらないといけないのです。[^3]

#### コード3 (正しい例)

``` VB.NET
GetType(TextBox).IsAssignableFrom(hogeMaskedTextBox.GetType)
```

実行すると･･･今度はエラーになりません！よかった！
![IsAssignableFrom160911_03.PNG](https://qiita-image-store.s3.amazonaws.com/0/81499/fcc7df6d-524b-344b-85ff-55ef57256c0c.png)

返ってきている値がFalseなので、MaskedTextBoxとTextBoxは継承関係にない事が分かりました。[^4]

### 結論

IsAssignableFromを呼び出す型と、引数に入れる型を逆にしないように気をつける事と、GetType演算子、GetTypeメソッドの使い方に注意して使おう。

[^1]: 「割り当てる事が可能かどうか」なんてふんわりした表現で逃げちゃいましたが、IsAssignableFromがTrueになる厳密な条件を知っておきたい人はMSDNを参照してください。（丸投げ）[https://msdn.microsoft.com/ja-jp/library/system.type.isassignablefrom(v=vs.110).aspx](https://msdn.microsoft.com/ja-jp/library/system.type.isassignablefrom(v=vs.110).aspx)

[^2]: 実際に代入してみてエラー発生するか試してもいいんですが、イミディエイトウィンドウに１行コード打ち込んで確認できた方が「あの型ってあの型に代入できたっけ･･･」って調べたいときにすぐ結果が分かって便利じゃないですか！

[^3]: ややこしいですが、コード例2におけるGetType(TextBox)は **型名を引数にとる演算子** です。それに対し、コード例3におけるhogeMaskedTextBox.GetTypeはObjectクラスに定義された **メソッド** です。違うものが同じ名前で呼ばれるもんだから混乱してしまう･･･

[^4]: ちなみに、MaskedTextBoxとTextBoxは継承関係にはありませんが、共通の継承元を持っています。TextBoxBaseです。だから、下記の通りに実行するとTrueが結果として返ってきます。![IsAssignableFrom160911_04.PNG](https://qiita-image-store.s3.amazonaws.com/0/81499/249981e0-d330-d7ba-b7a7-e83e535f3dc5.png)
ElmのprogramWithFlags

#Elmアプリケーションの初期値をJS側から渡す。

Elmをコンパイルして出来たJSを、ElmランタイムとかElmアプリケーションと呼ぶとして、その「初期値」をJS側から設定することができます。その時に使うのがHtml.AppモジュールのprogramWithFlags関数です。

例えば、JS側から渡されたリストデータをElmで画面に表示したりとか、サーバーがElmを含んだHTMLを返すときにサーバーの値を設定しておく、といったことが出来ます。


Elm側

Elm側ではまずprogramWithFlagsを使います。
するとinit関数の引数で、JS側の値をとることができます。

```
module Main exposing (..)     --モジュールに名前を付ける

import Html.App exposing (programWithFlags)

main =
  programWithFlags {init = init , update = update , view = view ,subscriptions = subscriptions}

init : SList -> (Model,Cmd a)     ---JS側から渡される値が引数に。型を書く必要がある。
init list = {data = list } ! []
```


JS側

JS側では、Elmを起動する際にJSオブジェクトを渡します。

```
..
<script type="text/javascript", src="javascripts/App.js">   //ElmをJSコンパイルして出来たJSを読み込む。
..

var app = Elm.Main.fullscreen({.....});   ---Elm.モジュール名.起動モード(データ)
```

fullscreen以外のモードの場合では、`embed(node,データ)`、`worker(データ)`とすることで渡すことが出来ます。


##ElmとJSの型の対応

Elm側では、initには型を書かないといけないと書きました。port構文などJSとやりとりする部分には、型を書く必要があります。

ElmとJSの型の対応は以下のようになっています。

| Elm | Javascript |
|------------|-----|
|Bool  | Bool |
|String | String |
| Int Float | Number |
| List | array |
| Arrays | array |
| Tuples | array(固定長、複数の型)
| Records | object|
| Maybe (Nothing) | null|
| Maybe (Just 42) |  42 |
| Json.Encode.Value | JSON |



##サーバー側のテンプレートエンジンと一緒に使う。

最後にサーバー側といっしょに使ってみます。サーバー側の値をElmアプリケーション初期値にしてみます。


以下はNode、Express、テンプレート言語jadeの例です。

index.js

```js
var value = [{hoge:"aaaa", huga:"bbbb"}]   //サーバー側の値

router.get('/', function(req, res, next) {
  res.render('index', {test:value});         //testという変数でJSオブジェクトを設定しています
});
```

index.jade

```jade
extends layout

block content
  script.
    var app = Elm.Main.fullscreen( !{JSON.stringify(test).replace(/</g, '&lt;').replace(/>/g, '&gt;')} ); //-ここでtest変数をHTMLにレンダリング。

```

Elmに渡したいサーバー側の値をJSON文字列にして、それをそのままの形でHTMLに書くことでJS化する必要がありました。


上記のExpress+jadeの例では、Elmに渡したいデータをJSON.stringifyでJSON文字列にします。そのあと、文字列データ内にタグなどがあるとまずいのでreplace関数で置き換えています。そしてjadeでは`!{変数}`という構文でエスケープせずに文字列をHTMLに書き込みます。

上記のjadeのやり方はセキュリティ的にどこまで安全なのかわからないですけど一番使われているみたいです。テンプレートエンジンによってHTML内のJSに渡すやり方があると思います。

以上programWithFlagsについて見ていきました。
はてなブログ Android ライブラリ調査

v1.3.3

# 著作権情報記載OSS

- [Gauva](https://github.com/google/guava)
- [OkHttp](https://github.com/square/okhttp)
- [Otto](https://github.com/square/otto)
- [Picasso](https://github.com/square/picasso)
- [Volley](https://github.com/mcxiaoke/android-volley) (未使用？)

# その他のOSS

- [Retrofit](https://github.com/square/retrofit)
- [RxJava](https://github.com/ReactiveX/RxJava)
- [Realm](https://realm.io/)
- [TinyMCE](https://www.tinymce.com/)
- [Fabric/Crashlytics](https://get.fabric.io/?locale=ja)

# 気になった点

- ログイン処理のみSSL通信のようです。すべてSSL化されてるとより良いと思います。

# 総括

個人的にはシンプルなアプリで、とても好印象でした。
変な動きも見られませんでした。
Mercari Android ライブラリ調査

v3.45

[Google Play](https://play.google.com/store/apps/details?id=com.kouzoh.mercari&amp;hl=ja)

[ライセンスページ](https://guide.mercariapp.com/jp/contents/3)

# OSS

- [Fabric/Crashlytics](https://fabric.io/)
- [Repro](https://repro.io/)
- [Credit card Scanning](https://www.card.io/)
- [RxJava](https://github.com/ReactiveX/RxJava)
- [RxLifecycle](https://github.com/trello/RxLifecycle)
- [EventBus](https://github.com/greenrobot/EventBus)
- [Okio](https://github.com/square/okio)
- [OkHttp3](https://github.com/square/okhttp)
- [sephiroth74/RxBroadcast](https://github.com/sephiroth74/RxBroadcast)
- [sephiroth74/ImageZoom](https://github.com/sephiroth74/ImageViewZoom)
- [sephiroth74/Picasso](https://github.com/sephiroth74/picasso)
- [sephiroth74/Android Tooltip](https://github.com/sephiroth74/android-target-tooltip)
- [sephiroth74/Android-Exif-Extended](https://github.com/sephiroth74/Android-Exif-Extended)
- [sephiroth74/ABTest](https://github.com/sephiroth74/ABTest)
- [AdjustSDK](https://www.adjust.com/)
- [Aviary](https://www.aviary.com/)
- [AlertDialogPro](https://github.com/fengdai/AlertDialogPro) **Deprecated**
- [Cookpad/Puree](https://github.com/cookpad/puree-android)
- [FacebookSDK](https://developers.facebook.com/docs/android?locale=ja_JP)
- [Gson](https://github.com/google/gson)
- [Localitics](https://github.com/localytics)
- [Android Priority JobQueue](https://github.com/path/android-priority-jobqueue) **[こちらに移動したようです](https://github.com/yigit/android-priority-jobqueue)**

# 総括

Reproを使っていますが、ユーザー操作の動画アップロードはしていませんでした。

ライセンス表記と実際に使ってるライブラリの差異はありましたが、
怪しい動きや通信は無く健全です。
安心して利用しましょう。
Android Studioで正規表現のチェックをする方法

Alt-Enterを押下(または、Other/ Show Intention Actions に設定したショートカットキー)
Check RegExpを選択する。

参考
[Regular Expression Syntax Reference]
Tips and Tricks
https://www.jetbrains.com/help/idea/2016.2/regular-expression-syntax-reference.html#d1540635e834
Laravel5.3 NotificationsでSlackに通知してみる

# 概要
Laravel5.3から[Notifications - Laravel - The PHP Framework For Web Artisans](https://laravel.com/docs/5.3/notifications) が追加され、ユーザ通知機能がたいへん簡単に実装できるようになりました。

今回は`http://localhost:8000`にアクセスされたらSlackにメッセージを飛ばすという簡単な機能を実装します。

# Laravel5.3のインストール
* GithubのリポジトリからDL
  * https://github.com/laravel/laravel

* DL後、`composer update`を実行
  * PHP5.6以降じゃないとcomposer updateできないので注意

# Guzzleを追加する
* Guzzleとは
  * PHPのHTTPクライアントライブラリ
* DLしたLaravelのディレクトリの直下で下記のコマンドを実行し、パッケージを追加する

```
$ composer require guzzlehttp/guzzle
```

# Notificationクラスの作成
* artisanコマンドでNotificationクラスを生成する
 * app/Notifications/SlackPosted.php

```
$ php artisan make:notification SlackPosted    
Notification created successfully.
```

# Notificationクラスの修正
## 通知するサービスの追加
* viaメソッドを編集する
* 通知するサービス名にslackを追加する

```php:app/Notifications/SlackPosted.php
<?php
class SlackPosted extends Notification
{
    public function via($notifiable)
    {
        return ['slack'];
    }
}
```

## Slackに通知するメッセージの作成

```php:app/Notifications/SlackPosted.php
use Illuminate\Notifications\Messages\SlackMessage;
public function toSlack($notifiable)
{
    return (new SlackMessage)
        ->success()
        ->content('問題が発生しました')
        ->attachment(function ($attachment) {
            $attachment->title('weeklyランキングが生成されませんでした。')
                ->content('エラーログ。。。');
        });
}
```

上記の記述で実際にSlackに通知されるメッセージはこんな感じ。

![スクリーンショット 2016-09-03 16.31.04.png](https://qiita-image-store.s3.amazonaws.com/0/42852/04c8386f-8052-2039-d532-7f3254d6f84b.png)


# routeNotificationForSlackメソッドの追加
* SlackのWebHook URLを返すrouteNotificationForSlackメソッドを追加する
* routeNotificationForXXX
  * XXXの部分書かれたサービス名をもとに、Laravelが自動的にドライバ情報を読み込んでくれる

```php:app/User.php
public function routeNotificationForSlack()
{
        return 'https://hooks.slack.com/services/xxxx/xxxx/xxxx';
}
```

# ルーティングの修正
* `/`にアクセスがあった時にnotifyメソッドでユーザに通知する
* notifyメソッドはNotificationクラスのインスタンスを受け取り、通知する

```php:routes/web.php
Route::get('/', function () {
    $user = new App\User;
    $user->notify(new \App\Notifications\SlackPosted);
});
```

あとは`php artisan serve`で起動し、`http://localhost:8000`にアクセスするとSlackにメッセージが届くはずです！


# 参考記事
リリース直前! Laravel 5.3 の変更点（新機能編）
http://tech.innovator.jp.net/entry/2016/08/17/115629

Send Slack Notifications With Laravel in Minutes
https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/11

Notifications - Laravel - The PHP Framework For Web Artisans
https://laravel.com/docs/5.3/notifications
flowtypeを使う前に素のjavascriptに戻すための緊急脱出コマンドを調べておく


flowtypeがぼちぼち良い感じになりつつあるので使ってみたいが
心配症なので、転ばぬ先の杖として使う前に退路も準備しておきたいと思った。

---

# 緊急脱出コマンド

ざっくりこう。
（既にbabel利用されている環境を前提にしているので悪しからず）

```
% npm i babel-cli

# out-dirをsourceと同じにしているので注意！
% $(npm bin)/babel src --no-babelrc --plugins transform-flow-strip-types --out-dir src/
```

## 解説など

`bable-cli`と`transform-flow-strip-types`をベースにして、flowの型処理だけをする。
`babel-cli`はコード結合とかするものではないので、ソースコードの変換したいみたいな目的にも使える。
`--no-babelrc`もつけて、通常利用しているような変換は行ないようにする。
これをやらないとソースコードが変換されて望まない結果になりがち。

また、上記コマンドは`src`からそのまま`src`に吐くので、事前にgitの差分が無い状態で実行すること。
dry-run的に別ディレクトリに吐き出したいなら、`--out-dir`を任意に変更すると良い。

## 構文エラーとかで怒られる場合

jsxなどbabelのみが認識するような構文を扱っている場合は、それぞれに構文に対応する[`syntax`](https://babeljs.io/docs/plugins/#syntax-plugins)をpluginとして追加する必要もある。
`transform`ではなく`syntax`を利用するので、パースはするがコードが変換されることはない。

自分の場合は`syntax-object-rest-spread`, `syntax-jsx`を追加すればよさそうだった。

```
% $(npm bin)/babel src \
  --no-babelrc \
  --plugins=transform-flow-strip-types,syntax-object-rest-spread,syntax-jsx \
  --compact=false \
  --out-dir=src/
```

syntaxだけをまとめた[babel-preset-syntax-from-presets](https://www.npmjs.com/package/babel-preset-syntax-from-presets)というのもあるらしい（未検証）

## 微妙に変わっている部分を`eslint --fix`でなるべく戻す

`babel-cli`を通しても大きくコードは変更されないとはいえ、インデントやら改行周りやらセミコロンなど、細々した構文が変わる。
全部戻そうとするとかなり労力かかるが、`eslint`でそれなりに戻すことが出来る。
なのでdiff小さく保ちたければ、事前、事後でeslintを利用して、`--fix`をかけると良い。

このあたりが使われそうなルールだった。

* arrow-parens
* space-before-blocks
* keyword-spacing
* semi
* jsx-wrap-multilines (eslint-plugin-react)
* jsx-curly-spacing (eslint-plugin-react)

## 雑感

* TypeScriptも検討したが、このぐらいのコマンド程度で素のJavascriptに戻せるflow悪くなさそう。
* 「OCamlで書かれている！」という触れ込みにビビっていたが、OCaml使ってる部分は`flow-bin`の型チェックする部分のみっぽい。
  * ビルド時に作用するのはbabel(=Javascriptオンリー)なので、「ビルド時にOCamlがうまくいかなくて詰んだ」みたいなのはそんなに無いはず。
  * 逆に、ビルド時にチェックしてくれないと困る！というユースケースには一工夫いりそうな予感
* 初期段階ではテスト`@JSDoc`的な奴、ぐらいなゆるいつきあい方をしていくほうがいいのかもなーと思ったりしている。
  * TODO: [babel-plugin-typecheck](https://github.com/codemix/babel-plugin-typecheck) とかは良いかもしれないので調べる
  * 参考: http://qiita.com/mizchi/items/30a5f9560e86e0d5ab31
Android Studioで、ラインコメント(//)を行頭ではなくコードの開始位置に入れる方法

この方法で設定できるのは、Javaファイルのみです。
同様のタブ/設定項目が存在しない言語は、(おそらく)設定できません。
例：xmlファイルなど。

##編集時(ショートカットキーの押下時)の設定
[設定箇所]
File/ Setting...
　Editor/ Code Style/ Java
　　Code Generationタブ
　　　Comment Codeセクション
Line comment at first columnをオフにする。
(必要に応じて、Block comment～もオフにする。)

##コードフォーマット時の設定
[設定箇所]
File/ Setting...
　Editor/ Code Style/ Java
　　Wrapping and Bracesタブ
　　　Keep when reformattingセクション
Comment at first columnをオフにする。

##参考
[Commenting and Uncommenting Blocks of Code]
Configuring commenting behavior
https://www.jetbrains.com/help/idea/2016.2/commenting-and-uncommenting-blocks-of-code.html#d1681359e22

[Stackoverflow - correct indentation in intellij]
http://stackoverflow.com/questions/9044472/correct-indentation-in-intellij
Alpine LinuxでPHP5のxdebugを使う方法

# 前提

現状のAlpine Linuxのパッケージのリポジトリには、`php5-xdebug`が存在していません。

本日は、Alpine Linux上で php5-xdebugをインストールする方法を紹介いたします。

ただし、今回紹介する方法は2016/9/11現在、apkのリポジトリのバージョンが3.4の頃の話しで、3.4以降は不要になる可能性があります。

# 方法

```
$ echo "http://dl-3.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
$ apk update
$ apk add php5 php5-xdebug
```

以上でxdebugを利用できるようになるはずです。

確認

```
$ php -v
PHP 5.6.25 (cli) (built: Aug 23 2016 14:36:49)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
```


# TIPS

今回の方法はxdebug以外にも利用できるはずです

https://pkgs.alpinelinux.org/packages

上記のページで自分が利用したいパッケージを探し、BranchとRepositoryを見ます。

今回のphp5-xdebugは、 edgeブランチのcommunityリポジトリに入っていると書かれています。

なので、http://dl-3.alpinelinux.org/alpine/ このページから必要なパッケージがある、ブランチとリポジトリのURLを`/etc/apk/repositories`に記載して、`apk update`をかけると、インストールが可能になるはずです。
GomobileからShared libraryを出力してみた


前回書いた「[Gomobileで作ったAARをばらしてShared LibraryだけをUnityで動かしてみた](http://qiita.com/otmb/items/e4bb761e4f75c0730095)」では関数のコールが長くて気持ち悪かった。
「[golang/mobile/cmd/gomobile/bind_test.go](https://github.com/golang/mobile/blob/80e11ad07468005aecc250c69e7f8be51675185c/cmd/gomobile/bind_test.go)」を参考にビルドコマンドを調べてみた。

抜粋したビルドコマンドはこんなの

```
GOMOBILE=$GOPATH/pkg/gomobile \
GOOS=android \
GOARCH=arm \
NDK=ndk-r12b \
CC=$GOMOBILE/android-${NDK}/arm/bin/arm-linux-androideabi-clang \
CXX=$GOMOBILE/android-${NDK}/arm/bin/arm-linux-androideabi-clang++ \
CGO_CFLAGS="-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-${NDK}/arm/sysroot" \
CGO_CPPFLAGS="-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-${NDK}/arm/sysroot" \
CGO_LDFLAGS="-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-${NDK}/arm/sysroot" \
CGO_ENABLED=1 GOARM=7 go build -pkgdir=$GOMOBILE/pkg_android_arm \
-tags="" -x -buildmode=c-shared \
-o=./hoge/libhoge.so \
hoge.go
```


コードは[Command cgo](https://golang.org/cmd/cgo/)にあるようにexportつけておけば良いようだ。

```go:hoge.go
package main

import "C"

//export MyFunction
func MyFunction() int {
  return 10
}

func main() {
}
```

実行すると`./hoge/libhoge.so``./hoge/libhoge.h`が出力される
`libhoge.so`をUnityの環境に配置し、クリックで加算する処理で実行した。

```csharp:ButtonTest.cs
using UnityEngine;
using System.Runtime.InteropServices;

public class ButtonTest : MonoBehaviour {

	int gnum = 0;

	[DllImport("hoge")]
	private static extern int MyFunction();

	public void TestClick()
	{
		int num = MyFunction();
		Debug.Log(num);
		gnum += num;
	}

	void OnGUI(){
		GUI.Label (new Rect (0, 0, 100, 30), gnum.ToString());
	}
}
```

無事に、短い関数名でコールできるようになりました。

## nm data section

参考までに nm data section

```
% nm -D libhoge.so | grep -i MyFunction
0006d548 T MyFunction
00012000 T _cgoexp_df1f512bfd60_MyFunction
```

## その他

x86のビルドコマンドはどこにあるのだろう？

[mobile/cmd/gomobile/env.go](https://github.com/golang/mobile/blob/80e11ad07468005aecc250c69e7f8be51675185c/cmd/gomobile/env.go)を参考にすると下記が書いてあるんだが。。

```
"386": {
	arch:       "x86",
	abi:        "x86",
	platform:   "android-15",
	gcc:        "x86-4.9",
	toolPrefix: "i686-linux-android",
	minGoVer:   go1_6,
},
```

また今度探してみよう。
c++ builder > debug > ファイルから読込んだ構造体の内容をテストデータに使う

```txt:動作環境
C++ Builder XE4
```

### やりたいこと

- 階層になっている構造体 MEAS_DATA_t型があるとする
- MEAS_DATA_t型のデータdstDataがあるとする
- dstDataの内容をファイルから読込んで計算処理ができる状態にある
- テスト用関数を追加したい
  - テスト用関数ではファイル読込み処理は除外したい
     - ファイル読込みがあると依存関係が生まれるため
     
`dstData`の内容を括弧({)で囲った定義をしてテスト用関数を作りたい。

どうするか。

### 手順

- プログラムの実行にてdstDataの値が格納された後にブレークポイントで止める
- Ctrl + F7を押す
   - 評価/変更 ウィンドウが開く
- そのウィンドウで「評価する式(E)」に「dstData」を入力する
- 結果をCtrl+C
- その結果をコードに埋め込む (下記の例)

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/f866b3ce-8dad-230f-aac6-37f271887bb7.png)

埋め込み例 (スペーシング未調整)

```
	MEAS_DATA_t measData = 
	{ 0, 20160414, 91037, 42474.382373, 866.2, -7.39, 
		{ 700, -167, 1632, -48, 824, -240, 86, -487, 76, -401, 802, 
			467, -832, -310, 235, -952, 1545, 251, -643, -1361, 446, 
			-927, -721, -86, 580, -289, 364, 1900, 3, -173, -152, 
			-303, 1020, -279, 73, 222, -34, -348, -592, -132, -107, 
			-481, -254, -367, 686, 319, -19, -763, -138, -1303, 577, 
//以下略
```

以上でファイル読込みせずともテスト用関数を走らせることができるようになる。

### 注意点

評価/変更で表示される文字数には上限があるようで、最後の部分が`100,...`のように省略される。そのあたりは実際の値をインスペクタで確認しながら追記することになる。
社内向けDNSサーバにはdnsmasqが良いと思いました

従来、DNSサーバと言えばBINDしか知りませんでした。社内だけでいい場合もBINDを使っていた（しかもプロジェクトが終わると捨てててました）のですが、私にとって設定が大変というかよく解らずに使っていました。

この度、dnsmasqというDNSサーバがあることを知りました。設定がとても簡単（数行）。名前リストは、dnsmasqをインストールしたサーバの/etc/hostsを使うというハイセンス。一目で気に入りました。

## 参考

- [Dnsmasq 軽量 DNS サーバ構築（内部向け)](http://server.etutsplus.com/dnsmasq-setup-internal-dns/)
Azure AppServiceのPHPで大きなファイルをアップロードできるようにする

# 概要
Azure AppServiceでPHP Empty WebAppをつかってWebアプリをデプロイした場合に、ファイルのアップロードサイズに制限がある。
以下ではその回避方法について解説するが、こちらを参考にしている。
[Uploading Large Files to Azure Web Apps](https://blogs.msdn.microsoft.com/azureossds/2016/06/15/uploading-large-files-to-azure-web-apps/)

# 作業
## IISの設定ファイルをwwwrootに置く

以下の内容の```web.config```ファイルを作成する。
\<valueInBytes>は最大アップロードサイズをbyteで入力する。
(50MB = 50*1024*1024 = 52428800)

```xml:web.config
<configuration>
   <system.webServer>
      <security>
         <requestFiltering>
            <requestLimits maxAllowedContentLength="<valueInBytes>"/>
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>
```
このファイルをwwwrootに置く。
初期状態では、```D:\home\site\wwwroot\```に置くことになる。

## PHP.iniの設定をオーバーライドする

以下の内容の```php_overrides.ini```を作成する。
最大アップロードサイズを50MBにする場合は以下のように記述する。

```ini:php_overrides.ini
[php]
post_max_size=50M
upload_max_filesize=50M
```

このファイルを```D:\home\site\ini\```に置くことになる。

## WebAppを再起動する

設定が反映される。

# 参考

ファイルのアップロードや編集はKuduが便利です。
使い方はこちらを参考にするとよいでしょう。
[Kuduを使ってWebサイトのデータをアップロードしてみました。](http://zuvuyalink.net/nrjlog/archives/2518)

以上。
Android Studioで、build.gradleの表示色を変えたい時

File/　Settings...
Editor/ Colors & Fonts/ Groovy
に設定があります。
※Android Studioの設定は、バージョンによって場所が変わる事があるので、適宜読み替えて下さい。

参考
http://stackoverflow.com/questions/37941933/android-studio-how-to-edit-this-font-colors-in-build-gradle
Unityで文字の3Dモデルを作る（VTextアセット編）

※以下で説明する通り、現状Dynamic Batchingを切らないとエラーになるようです。アプリ全体のパフォーマンスに影響があるため利用が難しそうですが、それはそれで情報としてあった方が良いと思うので公開します。

---
文字を3Dモデルとして扱う事で、巨大な文字を積み上げたり転がしたりしたいと思い、試してみました。

#VTextについて
Asset Storeで公開されている有料アセットです。
**VText**
https://www.assetstore.unity3d.com/jp/#!/content/24768

※クリックでYouTubeの説明動画に飛びます
[![VText説明動画](https://img.youtube.com/vi/ArtOMx7oTdo/0.jpg)](https://youtu.be/ArtOMx7oTdo)

> Unity 4.6.0 以降のバージョンが必要
> VText is a Unity Package which generates dynamic 2d and 3D text at runtime, using an intuitive user interface. VText supports Unity Pro 4 and Unity 5(Personal Edition & Enterprise Solutions)

価格は $60 です（2016年9月8日時点）

#確認環境
- Unity v5.4.0f3
- Xcode v7.3.1
- MacBook Pro (OS X 10.11.5)
- iPhone 6s

#デモを動かす
##(1)初期設定〜Unityエディタ上で動かすまで
よくあるインポート→デモシーンを開いて実行、では動かないので注意して下さい。
この手順はアセットに含まれるドキュメント（[Web上にもあります](http://www.virtence.com/download/VText.pdf)）に沿っています。

0. VTextアセットをインポート（全てチェックでOK）
0. UnityのWindowメニュー -> Virtence -> **VText Setup** を実行。VTextSetupというウィンドウが開く。
0. **Check**をクリック
0. **Create StreamingAssets Folder**をクリック。このボタンは、既にStreamingAssetsディレクトリがある場合出現しない。
0. **Create StreamingAssets/Fonts Folder**をクリック。同上。
0. **Install all provided fonts**をクリック。これによりStreamingAssets/Fontsに幾つかのフォントファイル（.otf）が置かれる。デモシーンで使われているのでここで入れたが、自分で作る際には必要なフォントのみを置く。なおこのフォントファイルはビルドにそのまま入るため、サイズや著作権に注意。
0. Unityを再起動してプロジェクトを開き直す
0. Assets/Virtence/VText/_DemoScene/StartScene を開いて実行する

Unityエディタ上はこれで動くのですが、確認した環境では以下の問題が出ました。

##Dynamic Batchingのエラーが大量に出力される
新規プロジェクトを作り、上記の手順でデモをそのまま動かすと "Dynamic batching: index buffer source is NULL (first IB byte 0 count 0 first vertex 0 offset 226)" といったエラーがConsoleに大量に出力されます。クラッシュはしませんが気持ち悪い状態です。こちらについてはAsset提供元から報告があり、バグトラッカーにも登録されています。
[VText提供元の発言](http://forum.unity3d.com/threads/thousands-of-errors-srcib.395447/#post-2710949)
[Unityのバグトラッカー](https://issuetracker.unity3d.com/issues/multiple-dynamic-batching-index-buffer-source-is-null-errors-because-of-procedurally-generated-mesh)

##(2)iOSで動作させるための対応
上記の通り、Unityエディタ上だとエラーログは出るものの動いていました。が、iOSプロジェクトをビルドしてXCodeから実機で実行しようとすると、起動時にUnityGfxDeviceWorkerでbad accessが出てクラッシュしてしまいます。

提供元が書いているくらいなので使い方の問題ではなく（環境依存はあるかもしれませんが）、Dymanic Batching周りだろうということで外してみたところ、クラッシュせず無事動作しました。
具体的には、iOSプラットフォームにswitchした状態でUnityの Build Settings -> Player Settings -> Other Settings -> Dynamic Batching のチェックボックスを外します。

しかしこの方法はアプリ全体のパフォーマンスに影響があるため、他の回避手段が見つかるか、上記のIssueが修正されないと私の用途では利用が難しく、いったんこのアセットの利用は断念しました（IssueにVoteしました）。

もう1つ同じ用途で使えそうな別のアセットがあるため、次はそちらを試す予定です。
→（2016/09/13追記）試しました。非常に良いです。
[Unityで文字の3Dモデルを作る（FlyingText3Dアセット編） - Qiita](http://qiita.com/arumani/items/fc7211287678deb75277)

#デモの範囲での覚書
- 日本語（日本語フォント＋日本語文字列指定）は、問題なく表示されました
- ドキュメントにもありますが、文字モデル生成時の負荷が結構高い印象です。クォリティ設定を落とす（ポリ数を小さくする）事で軽くはなりますが、用途次第では厳しいかもしれません
- 装飾はかなりバリエーションがあり、クォリティを上げるとかなり綺麗なので、動的生成ではない用途であれば有用そうだと感じました
R > 代入と表示 > ( ) でくくる > (x <- 1:10)

```
R on ideone
```

参考 Rで学ぶデータ・プログラミング入門 by 石田基広さん

変数への値代入に加えて表示(print)するには以下のように書くようだ。


http://ideone.com/tKr9y1

```R
(x <- 1:10)
```

```txt:結果
[1]  1  2  3  4  5  6  7  8  9 10
```