OmniAICreator/Qiita-1.07M huggingface dataset:
dots.の特定のタグを非表示にするユーザースクリプト

# <i class="fa fa-cubes"></i> 概要

私は、超非効率なのですが、[dots.]で数日に一度、大阪の新着イベントを確認しています。[^1]
[大阪府のIT勉強会・セミナー・イベント情報 - dots. ドッツ]

ただ、イベントの中には「**精力的に活動してらっしゃるが、おそらく今後もご縁はないだろうな**」という登録がちらほらあります。[^2]
しかし、[dots.]のイベント検索は、自分が知る限り、非ログインではマイナス検索できません。
不要なものは選別作業や目滑りなどが発生するので、できるだけ見たくありませんでした。
なので、非表示にしました。

# <i class="fa fa-cogs"></i> 動作確認環境

* `Windows7`
* `Firefox49`
* `Greasemonkey`
* [dots.]非ログイン

# <i class="fa fa-code"></i> コード

昔作ったものなのでES6を少し。`Chrome`ではそのまま使えないかもしれません。

[dots._Hide_specific\_tag.user.js]

```js:dots._Hide_specific_tag.user.js

// ==UserScript==
// @name        Hide specific tag
// @namespace   khsk
// @description 特定のタグを持つイベントを非表示にする
// @include     http://eventdots.jp/event/search*
// @version     1
// @grant       none
// ==/UserScript==

var ignoreTags = ['非表示にしたいタグ']

var isHideTag = nodes => {
  var hide = false
  Array.prototype.forEach.call(nodes.children, tag => {
    if (hide) {
      // breeakはできないので、一度trueになったら早期continue
      // ↓のifに!hide && でもいいけど(今の形は意味がうすそう)
      return;
    }
    if (ignoreTags.indexOf(tag.innerText) !== -1) {
      hide = true
    }

  })
  return hide
}

var getEvetnsConsiderOffset = className => {
  events = document.getElementsByClassName(className)
  // 既存のイベントまで取得するので、返すのは常に最後の15件=追加読み込み分(Arrayになる)
  return Array.prototype.slice.call(events, -15)
}

var hideEvents = events => {
  Array.prototype.forEach.call(events, event => { 
    // タグなしイベントに対応
    if (event.style.display !== 'none' && !!event.getElementsByClassName('tags')[0] && isHideTag(event.getElementsByClassName('tags')[0])) {
      event.style.display = 'none'
    }
   })
}

var mo = new MutationObserver((data1, data2) => {
  var events = getEvetnsConsiderOffset('eventlist clearFix')
  hideEvents(events)
})
var list = document.getElementsByClassName('col-full')[0]
mo.observe(list, {childList: true, subtree:true})

// 初期表示分に適用
var events = getEvetnsConsiderOffset('eventlist clearFix')
hideEvents(events)



```



[dots.]:http://eventdots.jp/
[大阪府のIT勉強会・セミナー・イベント情報 - dots. ドッツ]:http://eventdots.jp/event/search?keyword=&pref=27&from=&to=&sort=created_desc
[dots._Hide_specific\_tag.user.js]:https://gist.github.com/khsk/09eb0841ca55b4d198cae7ac85f37689/raw/c87e8ca7fbd1e239e96000546f2267824716d753/dots._Hide_specific_tag.user.js

[^1]: 最近、トップから都道府県を選択できなくなり悲しいですが。
[^2]: 理由は開催地だったり興味だったり有料だったりいろいろなのです。
Pokémon GOのライセンス表記を調べてみた

## [Google Cardboard](https://vr.google.com/cardboard/)
今のところ使われていない様子ですが、
将来的にVRに対応するのかも…？

## [Android](https://www.android.com/)
言わずと知れたモバイルOSです。

## [SharpZipLib](https://icsharpcode.github.io/SharpZipLib/)
C#でzip圧縮や展開などを行うライブラリです。
AssetBundleの展開などに使っていると思います。

## [TouchScript](https://github.com/TouchScript/TouchScript)
Unityでマルチタッチやフリックなどを検知するためのライブラリです。
モンスターボールを投げる実装などに、これが使われていると思います。

## [Zenject](https://www.assetstore.unity3d.com/jp/#!/content/17758)
Unity用のDIフレームワークです。

## [LeanTween](https://www.assetstore.unity3d.com/jp/#!/content/3595)
Tweenアニメーションを簡単に実装できるライブラリです。

## [Lunar Unity Mobile Console](https://www.assetstore.unity3d.com/jp/#!/content/43800)
実機上でコンソール画面を表示して、デバッグログを表示することができるアセットです。
下記の動画が分かりやすいです。
https://youtu.be/oRVruGU93Ts

## [Newtonsoft JSON](http://www.newtonsoft.com/json)
C#でJSONを扱うためのライブラリです。

### シリアライズ
```csharp
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Sizes = new string[] { "Small" };

string json = JsonConvert.SerializeObject(product);
// {
//   "Name": "Apple",
//   "Expiry": "2008-12-28T00:00:00",
//   "Sizes": [
//     "Small"
//   ]
// }
```

### デシリアライズ
```csharp
string json = @"{
  'Name': 'Bad Boys',
  'ReleaseDate': '1995-4-7T00:00:00',
  'Genres': [
    'Action',
    'Comedy'
  ]
}";

Movie m = JsonConvert.DeserializeObject<Movie>(json);

string name = m.Name;
// Bad Boys
```
[Capistrano] assets:precompile をローカルでして, リモートに上げる方法

# [Capistrano] assets:precompile をローカルでして, リモートに上げる方法

## 環境
1. Rails 4.2.4
2. Ruby 2.3.0
3. capistrano 3.5.0

最近デプロイ時に異常にassets:precompileで時間がかかるようになったので,
デプロイの高速化を図ろうと思い実装してみました。

今回はassets:precompileの部分を切り出して紹介します。


## Capfile編集
```Rails:Capfile
#　他省略

#require 'capistrano/rails'を以下のように修正

require 'capistrano/bundler'
require 'capistrano/rails/migrations'

# 他省略
```

``` require 'capistrano/rails' ``` では, 以下の３つをrequireしてしまうため, precompileを抜いた状態にします。
1. require 'capistrano/bundler'
2. require 'capistrano/rails/assets'
3. require 'capistrano/rails/migrations'


## deploy.rb編集 --ポート22の場合

```rails:config/deploy.rb

# 他省略
set :user, 'ユーザ名'

namespace :deploy do
  # 他省略
  after :updated, "assets:precompile" # 追加
  # 他省略
end


namespace :assets do
  desc "Precompile assets locally and then rsync to web servers"
  task :precompile do
    on roles(:web) do
      rsync_host = host.to_s
      run_locally do
        with rails_env: fetch(:stage) do
          execute "rake assets:precompile"
        end

        execute 'rsync -av --delete public/assets/ #{fetch(:user)}@#{rsync_host}:#{shared_path}/public/assets/'
        execute "rm -rf public/assets"
      end

    end
  end
end
```


## deploy.rb編集 --別のポートに変更している場合

上記の以下のコードだとデフォルトのポート番号が22なので，他のポート番号で設定している方は,
次のように変更してください

```diff
-execute 'rsync -av --delete public/assets/ #{fetch(:user)}@#{rsync_host}:#{shared_path}/public/assets/'

+execute 'rsync --rsh="ssh -p ポート番号" -av --delete public/assets/ #{fetch(:user)}@#{rsync_host}:#{shared_path}/public/assets/' 
```

※このように設定すると,rsyncで同期する際に,いちいちパスワードを聞かれます。
もし,パスワードを聞かれたくない方は次のように鍵を設定してあげると聞かれないようになります。

## deploy.rb編集 --別のポートに変更している場合　＋ 公開鍵設定

1. 鍵作成

```
ssh-keygen -t rsa

### 対話形式
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/?????/.ssh/id_rsa):hogehoge <= (ファイル名(デフォルト: id_rsa))
Enter passphrase (empty for no passphrase):　　　　　　<= パスワード(指定しないのであればEnter)
Enter same passphrase again:     　<= パスワード確認(パスワードを指定しないのであればEnter)
Your identification has been saved in hogehoge.
Your public key has been saved in hogehoge.pub.
The key fingerprint is:

```

 2.サーバーでの設定

```
# 先ほど作成した公開鍵をサーバーにアップする
scp  ~/.ssh/hogehoge.pub ユーザ名@ホスト名:/home/ユーザ名/.ssh

# サーバーにログイン
ssh ホスト名

# authorized_keysに公開鍵を設定
cat /home/ユーザ名/.ssh/hogehoge.pub >> /home/ユーザ名/.ssh/authorized_keys
```

3.deploy.rbの編集


```diff:config/deploy.rb

-execute 'rsync --rsh="ssh -p ポート番号" -av --delete public/assets/ #{fetch(:user)}@#{rsync_host}:#{shared_path}/public/assets/' 

+execute 'rsync --rsh="ssh -i ~/.ssh/hogehoge -p ポート番号" -av --delete public/assets/ #{fetch(:user)}@#{rsync_host}:#{shared_path}/public/assets/' 

```
注意: execute ' ...-rsh="" ' の '' と "" を逆にすると,
なぜか相対パスが聞かなくなりました。

以上でパスワードが聞かれることがなくなります。


ご清聴ありがとうございました。
もっといい方法とか簡単にできる方法とかあったら
教えていただけるといただけると嬉しいです。
awkでcsvを縦に斬る


# やりたいこと
サイズが大きいcsvは読みこむだけでも一苦労。だったら分割してやればいいと思ったわけですが、splitを使うと2ファイル目以降がヘッダ行が無くなって分からなくなってしまう。
そもそも、カラム数が多いcsvを頑張って開いて横スクロールすることに限界を感じたので、だったら横じゃなくて縦に斬ってやろう。

# サンプル
* large.csvは15カラム目までがユニークなデータカラム、それ以降のカラムは51x51の繰り返しという、いかにもデータですというCSVです。
* 今回はこれをユニークなデータカラム、51x26のデータカラム51x25という具合に分割します(51x25も十分デカイですが...)
* それではサンプルのスクリプトです。

```bash:awkでcsvを縦に斬る
  cat large.csv | awk -F"," 'BEGIN{OFS=","}{ret=""}{for(i=1;i<=NF;i++){if(i<16){if(ret==""){ret=$(i)}else{ret=ret","$(i)}}}}{print ret}' > small_1.csv
  cat large.csv | awk -F"," 'BEGIN{OFS=","}{ret=""}{for(i=1;i<=NF;i++){if(i>15 && i < 51*26+16){if(ret==""){ret=$(i)}else{ret=ret","$(i)}}}}{print ret}' > small_2.csv
  cat large.csv | awk -F"," 'BEGIN{OFS=","}{ret=""}{for(i=1;i<=NF;i++){if(i>51*26+15){if(ret==""){ret=$(i)}else{ret=ret","$(i)}}}}{print ret}' > small_03.csv
```

## 軽く説明
* まず`cat`で該当のCSVを読み込みパイプで`awk`に流します
* `awk`は`-F","`でカンマを区切り文字にしています
* ~~`BEGIN`の最初の`{OFS=","}`は意味をなしていませんが、CSVで出力したいという意思表示です。~~
* for文で1～NF(awkの結果の取る値すべて)を回し、ifの条件の中で取り出したい範囲でを指定しretに格納します
* retに格納する際はretが空文字であれば$(i)を、retが空文字でなければカンマ区切りで結合
* 最後に`print ret`で出力して完了です。

# 課題
* パフォーマンスの問題
  1. まとめてて思ったのですが、for文ですべて回して、ifで範囲指定は無駄ですね。for文の中で範囲絞ったほうが速い。
  1. 3つに分割するのに3回ファイルを読み込むのは勿体無い。1回のループで3つの変数に格納して1つのファイルに出力して、splitで3分割するほうが速いのかもしれない。

# 結論　
awkを使えばコマンドライン上でテキスト操作ができるので、使いこなせると便利。
~~そもそもこんなデカイCSVなんかつくらないでくれよ~~

# 追記
cutのほうが速いかもしれない、というコメントを頂きました。（ご指摘ありがとうございます。）
実際コマンドとしてはこんな感じですね

```bash:cutでCSVを縦に斬る
cut large.csv -f 1-15 -d ,
cut large.csv -f 16-1341 -d ,
cut large.csv -f 1342- -d ,
```

あとはこれをファイルに書きだしてやればOK、こちらのほうがコマンドがシンプルで使いやすいですね！！
あえてawkの利点をいうのであれば、csvのカラム数をNFで取得できるので、動的に分割するカラムを指定するスクリプトがかけるというところでしょうか。
Cassandraメモ: パーティション・キーとPartitioner

https://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archPartitionerAbout.html
上記Cassandraについてv3.0のドキュメント読んで調べたことをメモします。
実際に動かして確認しているわけではないので、間違いがあるかもしれません。お気づきの点はご指摘ください。

## コンシステント・ハッシュ法とパーティション・キー

Cassandraはデータの分散にコンシステント・ハッシュ法を使っています。[こちらのスライド](http://www.slideshare.net/paulowniaceae/consistent-hash)で簡潔に説明されています。データ中の特定の部分（キー）をハッシュ関数にかけ、そのハッシュ値によってどのノードにデータを配置するかを決定します。
この方法を用いると、ノードの追加・削除時のデータ移動を少なく済ませられることが多いです。
コンシステント・ハッシュ法はデータを多数のノードに一様分散させる際の定番手法かと思います。

Cassandraにおいて、ハッシュにかけられるキーをパーティション・キー（partition key）と呼びます。設定によって変えられるようですが、基本的（デフォルト？）にはテーブルのプライマリー・キーがパーティション・キーになるようです。
Cassandraでは`CREATE TABLE`時に[プライマリー・キーの指定が必須](https://docs.datastax.com/en/cql/3.3/cql/cql_reference/create_table_r.html)です。
テーブルのプライマリー・キーは、[こちら](http://gihyo.jp/dev/serial/01/cassandra/0003?page=2)で説明されているCassandraのデータモデルにおける、「ロウ」につける「キー」であると思われます。

## Partitioner

さて、ここでパーティション・キーをハッシュにかける役割を担っているのがPartitionerです。「Murmur3Partitioner」「RandomPartitioner」「ByteOrderedPartitioner」の3つがあり、それぞれが異なるハッシュ関数をパーティション・キーに適用します。

### Murmur3Partitioner

バージョン3.0でのデフォルトのPartitionerです。後述のRandomPartitionerが暗号化アルゴリズムを利用しているのに対し、こちらはより軽量なアルゴリズムを利用しているため、3～5倍高速にハッシュ値を算出できるようです。どちらを使った場合でも、ノード間のデータの分散は一様になります。

### RandomPartitioner

Cassandra 1.2以前のデフォルトのPartitionerです。過去バージョンの互換性のために残されています。MD5ハッシュ関数を利用します。

### ByteOrderedPartitioner

こちらも過去バージョンの互換性のために残されています。パーティション・キーの値そのものをハッシュ値として扱います。


Partitionerを一度決定してデータを格納すると、容易に他のPartitionerへの変更はできないようです。過去バージョンのデータを引き継ぐのでなければ、基本的にはバージョン3.0のデフォルトであるMurmur3Partitionerを使っておけば問題ないようです。
円は正n角形である。n = ?

#背景
周りの人に『円は正?角形』と聞いたら、『意味が分からない』と『ゼロ角形』と答える人は、ほぼ全員だ。本日、やっと『infinity』と答えてくれる人が出てきた。

#正n角形
![正n角形.png](https://qiita-image-store.s3.amazonaws.com/0/114190/4077adb0-2147-06f6-1b46-fceb2ec10b79.png)

答えは、『円は正$\infty$角形』


#コード

```r
plot.new()
plot.window( xlim = c(-1,1), ylim = c(-1,1) )

# 正三角形
x3 <- seq( -pi * 1.5, pi * 0.5, length = 4 )
# 正四角形
x4 <- seq( -pi * 1.5, pi * 0.5, length = 5 )
# 正五角形
x5 <- seq( -pi * 1.5, pi * 0.5, length = 6 )
# 正六角形
x6 <- seq( -pi * 1.5, pi * 0.5, length = 7 )
# 正八角形
x8 <- seq( -pi * 1.5, pi * 0.5, length = 9 )
# 正十六角形
x16 <- seq( -pi * 1.5, pi * 0.5, length = 17 )
# 正三十二角形
x32 <- seq( -pi * 1.5, pi * 0.5, length = 33 )
# 正六十四角形
x64 <- seq( -pi * 1.5, pi * 0.5, length = 65 )
# 正n角形
n <- 2^10 # 任意な数字
xn <- seq( -pi * 1.5, pi * 0.5, length = n+1 )

fname　<- paste( "正n角形", ".png", sep="" )
png( file = fname, height = 800, width = 800 )
par( mfrow = c(3,3) )
plot( cos(x3), sin(x3), type = "l", xlab = "3", ylab = "" )
plot( cos(x4), sin(x4), type = "l", xlab = "4", ylab = "" )
plot( cos(x5), sin(x5), type = "l", xlab = "5", ylab = "" )
plot( cos(x6), sin(x6), type = "l", xlab = "6", ylab = "" )
plot( cos(x8), sin(x8), type = "l", xlab = "8", ylab = "" )
plot( cos(x16), sin(x16), type = "l", xlab = "16", ylab = "" )
plot( cos(x32), sin(x32), type = "l", xlab = "32", ylab = "" )
plot( cos(x64), sin(x64), type = "l", xlab = "64", ylab = "" )
plot( cos(xn), sin(xn), type = "l", xlab = "n", ylab = "" )
dev.off()
```
docker vm コンテナ のイメージのメモ

dockerあたりのイメージのメモ

      コンテナ1 | コンテナ2 | …         　← 環境ごとにコンテナを準備
---------------------------------------
                Docker                  ← CoreOSに最初から入っている(将来dockerとcoreosの関係でなくなるかも)
---------------------------------------
                CoreOS                  ← Vagrantでセットアップ可能
---------------------------------------
                VirtualBox
---------------------------------------
                MacOSX (windows)
ASCII文字コード表

# ASCIIコード対応表（Dec、Hex）

## 制御文字

|文字|10進|16進|文字|10進|16進|文字|10進|16進|文字|10進|16進|
|:---:|:-------:|:-------:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|**NUL**|0|0|**DLE**|16|10|**SP**|32|20|**0**|48|30|
|**SOH**|1|1|**DC1**|17|11|**!**|33|21|**1**|49|31|
|**STX**|2|2|**DC2**|18|12|**"**|34|22|**2**|50|32|
|**ETX**|3|3|**DC3**|19|13|**#**|35|23|**3**|51|33|
|**EOT**|4|4|**DC4**|20|14|**$**|36|24|**4**|52|34|
|**ENQ**|5|5|**NAK**|21|15|**%**|37|25|**5**|53|35|
|**ACK**|6|6|**SYN**|22|16|**&**|38|26|**6**|54|36|
|**BEL**|7|7|**ETB**|23|17|**'**|39|27|**7**|55|37|
|**BS**|8|8|**CAN**|24|18|**(**|40|28|**8**|56|38|
|**HT**|9|9|**EM**|25|19|**)**|41|29|**9**|57|39|
|**LF**|10|0a|**SUB**|26|1a|*****|42|2a|**:**|58|3a|
|**VT**|11|0b|**ESC**|27|1b|**+**|43|2b|**;**|59|3b|
|**FF**|12|0c|**FS**|28|1c|**,**|44|2c|**<**|60|3c|
|**CR**|13|0d|**GS**|29|1d|**-**|45|2d|**=**|61|3d|
|**SO**|14|0e|**RS**|30|1e|**.**|46|2e|**>**|62|3e|
|**SI**|15|0f|**US**|31|1f|**/**|47|2f|**?**|63|3f|

## 文字

|文字|10進|16進|文字|10進|16進|文字|10進|16進|文字|10進|16進|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|**@**|64|40|**P**|80|50|**`**|96|60|**p**|112|70|
|**A**|65|41|**Q**|81|51|**a**|97|61|**q**|113|71|
|**B**|66|42|**R**|82|52|**b**|98|62|**r**|114|72|
|**C**|67|43|**S**|83|53|**c**|99|63|**s**|115|73|
|**D**|68|44|**T**|84|54|**d**|100|64|**t**|116|74|
|**E**|69|45|**U**|85|55|**e**|101|65|**u**|117|75|
|**F**|70|46|**V**|86|56|**f**|102|66|**v**|118|76|
|**G**|71|47|**W**|87|57|**g**|103|67|**w**|119|77|
|**H**|72|48|**X**|88|58|**h**|104|68|**x**|120|78|
|**I**|73|49|**Y**|89|59|**i**|105|69|**y**|121|79|
|**J**|74|4a|**Z**|90|5a|**j**|106|6a|**z**|122|7a|
|**K**|75|4b|**[**|91|5b|**k**|107|6b|**{**|123|7b|
|**L**|76|4c|**\¥**|92|5c|**l**|108|6c|**|**|124|7c|
|**M**|77|4d|**]**|93|5d|**m**|109|6d|**}**|125|7d|
|**N**|78|4e|**^**|94|5e|**n**|110|6e|**~**|126|7e|
|**O**|79|4f|**_**|95|5f|**o**|111|6f|**DEL**|127|7f|
スマフォをラジコンに乗せて,WebRTCですごく遠くから操縦できるモノ作ってみた。(セルラードローンの自作）

一年以上ほったらかしにしてしまいましたが、これをちょこっと紹介する機会があり、分かりにくいところを直したので、2017年11月にQiitaも更新してみました。
https://qiita.com/i386koba/items/873869926bde7614b128
を見ていただければ、よりわかりやすいかと思います。

---

本業はプログラムとはあまり縁がないプリント基板関係なのですが、題名のアイデアを思いついてから、個人的に暇を見つけてコードを書き、2年余りかかりました。
とりあえず、少々の知識とお金(3万円～）があればDIYして実験してもらえるかな？のレベルになりましたので投稿してみます。

#### 2017，11，11現在、うまくいてません。
自身のIDではうまくいっていますが、新規のIDでは、UserRecoverableAuthIOExceptionでcom.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException が出てしまいます。


#動作の様子 
2016.05.05 撮影
[![](http://img.youtube.com/vi/YdYnNappXGU/0.jpg)](https://youtu.be/YdYnNappXGU?t=55s)

>https://youtu.be/YdYnNappXGU?t=55s

本来、携帯電話網を使って地球の裏側からでも操縦できる風景が撮りたいのですが、ほとんどラジコンと同じくらいの距離で操作している、なんのアピール感もない動画ですみません。
まだ動作中に思いがけない不具合がでるかもで、遠方までテストできませんでした。
そろそろ新たなバージョンを撮影しに行きます。

#仕組み
格安スマートフォンをラジコン（RC）模型にのせて、スマートフォンのカメラ映像とGPS、センサ情報をWebRTC（SkyWay)により携帯電話ネットワーク（LTE）を通じてインターネットにつながったPCやタブレットのWeb画面上からカメラや位置を確認しながら、Web画面の操縦をWebRTCでスマフォのBluetoothでRC模型に送信し、RCを遠隔操作することができます。

#似たような仕組みと違い
* Sky Drone FPV　https://www.indiegogo.com/projects/sky-drone-fpv#/
>携帯電話通信用USBモデムをマイコンにつなぎマルチコプターをFPV操縦しています。携帯電話網を使うところは一緒ですが、スマフォの機能をマイコンに実装しているためハードウェアが複雑そう。空をとぶのは憧れます。

* Unlimited Range FPV RC Car　http://ramicaza.com/project.php?project=rover　
>携帯電話通信用USBモデムでRCカーをFPV操縦しています。携帯電話網を使うところは一緒ですが、こちらもスマフォの機能をマイコンに実装しているためハードウェアが複雑。

* Double Robotics http://www.doublerobotics.com/
>上部のハードウェアはタブレット端末なんでしょうか？詳細は知りませんが、テレビで見ました。

* Segway: 移動時以外はヒト型ロボットとして使用可能な新型セグウェーを発表
http://business.newsln.jp/news/201601071310250000.html
>Segwayに専用ハードウェアを付けているようです。携帯電話網を使うかはわかりませんが、ネットには繋がるようです。3Dカメラが乗っている専用ハードウェア部分はスマフォにすればいいかと思います。

* PhoneDrone　
https://www.kickstarter.com/projects/137596013/phonedrone-let-your-smartphone-be-your-personal-dr
>スマフォをマルチコプターにのせる構想。携帯電話網で操作できるかは不明です。

まだあるかもしれませんが、全く同じ仕組は見かけていません。いつ同じものが発表されてしまうかひやひやしています。
さて、上記のようにマイコンに携帯電話通信用USBモデムというアイデアはありますが、スマフォにはカメラ、GPS,加速度センサーなど、FPVや操縦に必要な装置が一式乗っています。
マルチコプターなんかは、加速度センサ情報をAndroidでPIDして姿勢制御できれば、マルチコプターコントローラーの代わりになるかもしれないので挑戦したいところです。

#題名のソース一式
ドロイドローン(仮)プロジェクトとしてまとめており[Droidrone（GitHub)](https://github.com/i386koba/Droidrone)　にあります。
最近本業が忙しくほとんど手がつけれていない状態です。
なんとかドキュメントを充実させていきます。

#格安携帯
フリーテルのFTJ152Aつかいました。ヨドバシで13500円。
Android 4.0.3以上、GPS,磁気センサー、Bluetoothのある端末なら使えます。
スマフォを買い替えた時の古いAndroidがSIMフリーなら、格安SIMを積んで使えるかと思います。

#開発環境
* AndroidアプリはAndroid StudioでJava。
* WebRTCはSkyWayを利用しています。
* Web画面はNetbeansでHTML5とJavascript。
* マイコンのスケッチはArduinoIDEでC/C++。
* 特殊なものはありません。

**_Web画面（カメラ映像、位置情報、遠隔操作パネル_**
![droidron-web](https://docs.google.com/drawings/d/1tfNAgZHt-G7MHcqaaKIOEHds42f-10lBw6iP6iE5cHY/pub?w=800)

![droidron-android and web](https://docs.google.com/drawings/d/1giRTWenody6n84mDfXV95NfzBg9yP9hrAihFpyME_qc/pub?w=800)

**_スマートフォンを載せたタミヤのバギー型 RC模型とDridroneシステムの概念図_**
![image](https://docs.google.com/drawings/d/1daXMF05XgUGCy8scaGVKXU24igiqGjfQ_ZVNeVRyCrE/pub?w=800)
上図もいまいちですいません。
2016-07-15 WRF > NCLのインストール > CentOS6.8 (64bit) 

```txt:動作環境
CentOS 6.8 (64bit) + bash
```

関連 http://qiita.com/7of9/items/962d6d8066394e28189a

WRF (Weather Research and Forecasting Model)という気象モデルのインストールに関連して、以下に記載の方法ではNCLのインストールが別途必要とある。

http://forum.wrfforum.com/viewtopic.php?f=5&t=7093
> Note: The only thing that won't work from distro packages is ncl. The distro package version is 6.0.x but 6.1+ is required. So do not try yum install ncl ncl-common ncl-devel ncl-examples
I got ncl 6.3 for Centos 6.x from here https://www.earthsystemgrid.org/dataset/ncl.html instead.

## NCLのファイル

NCLのインストールに関しては以下に記載されている。
http://www.ncl.ucar.edu/Download/linux.shtml

OS, ビット数, gccのバージョンなどが対応している必要があるとのこと。

CnetOS6.8でgccのバージョンを見ると4.4.7だった。

https://www.earthsystemgrid.org/dataset/ncl.630.0/file.html
にある
ncl_ncarg-6.3.0.Linux_RHEL6.4_x86_64_gcc447.tar.gz
が同じgccのバージョンだ。

RHEL6.4(CentOS6.4)のものをCentOS6.8上で動かして問題ないかは実際に試してみる。

## NCLインストール

手順は以下に記載されている。
https://www.ncl.ucar.edu/Download/install.shtml

上記の手順にしたがいセットアップをして以下を実行したところ、サンプルのウィンドウが表示された。

```
ng4ex gsun01n -clean
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/64b319d4-b885-69b3-b889-f45cf89e68ce.png)

## .bashrcファイル

.bashrcファイルに以下を追記することでNCLが使える。
以下の設定では`/usr/local/ncl-6.3.0`にNCLファイルを解凍した場合。

```.bashrc
# 2016/07/14 for NCL (used for WRF)
export NCARG_ROOT=/usr/local/ncl-6.3.0
export PATH=$NCARG_ROOT/bin:$PATH
export DISPLAY=:0.0
```
Xfce4 ターミナルのドロップダウン化

最近 [Guake Terminal](http://guake.org/)を使っていてショートカットキーでターミナル
がドロップダウン出来るのは非常に便利だったのだけれど、横幅の調整と水平位置の調整がどうも
気に食わなかったので他にドロップダウンが出来るターミナルを探してみた。
Xfce4 のターミナルがデフォルトで対応していましたという話。

# Xfce4 ターミナルのオプション

```shell-session
xfce4-terminal --help
使用法:
  xfce4-terminal [オプション...]

一般オプション:
  -h, --help; -V, --version; --disable-server; --color-table;
  --default-display=ディスプレイ; --default-working-directory=ディレクトリ

ウィンドウまたはタブセパレーター:
  --tab; --window

タブオプション:
  -x, --execute; -e, --command=コマンド; -T, --title=タイトル;
  --working-directory=ディレクトリ; -H, --hold

ウィンドウオプション:
  --display=ディスプレイ; --geometry=ジオメトリ; --role=ロール; --drop-down;
  --startup-id=文字列; -I, --icon=アイコン; --fullscreen; --maximize;
  --show-menubar, --hide-menubar; --show-borders, --hide-borders;
  --show-toolbar, --hide-toolbar

上記オプションの詳しい説明は man xfce4-terminal でご覧ください。
```

今つかっているバージョン 0.6.3 では `--drop-down` オプションが存在している。

# Xfce4 のショートカットに登録する
設定 -> キーボード -> アプリケーションショートカットキー で
好きなキーに `xfce4-terminal --drop-down`を割り当てる。

# ドロップダウンの設定
`--drop-down` を付けて起動した場合、ターミナルの設定ダイアログにドロップダウンの
タグが増える。

* 幅
* 高さ
* 不透明度
* 水平配置位置

などが設定できる。個人的には `フォーカスが他へ移動してもウィンドウを開いたままにする` は
チェックしておきたい。

# 使ってみて気になった点
右上半分にドロップダウンで表示とか結構、位置や高さの調整が便利。
ただ、その調整がダイアログを開かなければ出来ない点が惜しい感じがする。
さくらのクラウドのWindowsから自身のサーバIDを取得してみた

さくらのクラウドで動いているサーバから自身のリソースIDを取得できる機能がリリースされていました。
[コマンドでサーバIDを取得できるようになりました | さくらのクラウドニュース](http://cloud-news.sakura.ad.jp/2016/06/28/smbios/)

> さくらのクラウドでは、このたびサーバ上でコマンドを実行することで自身のサーバIDを取得できるようになりました。下記コマンドで確認可能です。

しかしながらサンプルで公開されているのはLinux向けですが、Windowsでも同様のやり方で取得できました。


## コマンドプロンプトを立ち上げてコマンドを投入するだけ。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/100935/43e0d4da-f23e-5989-19df-3cd0d641f39c.png)


```DOS
wmic path win32_computersystemproduct get IdentifyingNumber
```

IdentifyingNumber として表示される12桁の数字がサーバのリソースIDとなります。

試した環境はWindows Server 2012 R2のパブリックアーカイブから作成したサーバです。
特に何か追加でインストールを行うことなく実行できました。

Linux環境に比べて嬉しいシチュエーションは少ないかもしれませんが、サーバのプラン変更時のリソースIDが変わってしまう場合には何かしらで活用できるかもしれないです。

>※2016/6/1以降に起動されたサーバが対象となります。
※サーバの電源OFF→ONを行うことで反映されます。

最初試して動かなかったんですが、こういうことでした。
Thymeleafのユーティリティメソッド活用サンプルコード


リストや集約の使い方を調べたので、メモがてらに投稿しておく。

# 集約 #aggregates
## sum
```html
<div class="totalPrice" th:text="|${#aggregates.sum(productList.![price])}円（+税）|">
    1110円（+税）
    productListのprice項目を合計する　※springの場合の記法！
    Thymeleaf チュートリアルではxxx.{yyy * zzz}の形式で書かれている
</div>
```

# 文字列 #strings
## listJoin
```html
<div class="Contents" th:text="${#strings.listJoin(productList.![id],',')}">
    productListのid項目を「,」で区切って並べる
    例) productList[x].id -> 「100」「150」「200」
        text="100,150,200"
</div>
```
## isEmpty
```html
<th:block th:if="${#strings.isEmpty(str)}">
    strが空、nullの場合にtrueになる。事前にtrim()されるので空白もtrue。
    th:blockは、thymeleafの処理だけしたい時に便利なタグ
</th:block>
```

# リスト #lists
## isEmpty
```html
<div class="Contents" th:if="${#lists.isEmpty(productList)}">
    productListオブジェクトが空の場合に有効
</div>
<div class="Contents" th:if="!${#lists.isEmpty(productList)}">
    productListオブジェクトが空じゃない場合に有効
</div>
```
## size
```html
<th:block th:if="${#lists.size(productList)}>1" >
    productListオブジェクトが1個より多い時だけ有効
    
</th:block>
```
Tcl / Tk for Dlang : getting started in Windows

There is a working [Tcl/Tk binding for D](https://github.com/nomad-software/tkd), but getting it to work in windows is a little tricky. 

If you are familiar with tkinter in Python, tkd is very easy to start with, since while D is under the family of C-style languages, the syntax is very similar to Python (basically imagine python with braces and semicolons).

Make sure DUB is available.

1. `dub init {project-name} tkd`
2. Add the following to your `dub.json`.  

```
"lflags":["-L/exet:nt/su:windows"],
"postGenerateCommands-windows-x86": [   
    "copy $TCLTK_PACKAGE_DIR\\dist\\x86\\tcl86t.dll build\\tcl86t.dll /y",   
    "copy $TCLTK_PACKAGE_DIR\\dist\\x86\\tk86t.dll build\\tk86t.dll /y",    
    "xcopy $TCLTK_PACKAGE_DIR\\dist\\library build\\library /i /e /y",   
],
```
Note that I'm using `"targetPath":"./build",`

The additional linker flags is to prevent the console window from popping up when you start the program.

If done correctly you should have the following folder structure.

```
build
├── app.exe
├── tcl86t.dll
├── tk86t.dll
└── library
    └── *.tcl files
```

A sample program can be found below.

```d

import tkd.tkdapplication;                               // Import Tkd.

class Application : TkdApplication                       // Extend TkdApplication.
{
    private void exitCommand(CommandArgs args)           // Create a callback.
    {
        this.exit();                                     // Exit the application.
    }

    override protected void initInterface()              // Initialise user interface.
    {
        auto frame = new Frame(2, ReliefStyle.groove)    // Create a frame.
            .pack(10);                                   // Place the frame.

        auto label = new Label(frame, "Hello World!")    // Create a label.
            .pack(10);                                   // Place the label.

        auto exitButton = new Button(frame, "Exit")      // Create a button.
            .setCommand(&this.exitCommand)               // Use the callback.
            .pack(10);                                   // Place the button.
    }
}

void main(string[] args)
{
    auto app = new Application();                        // Create the application.
    app.run();                                           // Run the application.
}
```

You should see this:
![](http://i.imgur.com/XyPCDCS.png)

without the console window.
MacPortsのPATH設定

#PATH設定がおかしい
普段使ってるMacProのX11がおかしくなったので，PATH設定を確認したら，なんだかへんてこなPATH設定が。

```bash
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin
```

何回/opt/local/binを読みこめば気が済むのか。/opt以下はMacPorts関連のものしかないので，MacPortsが設定してるけど最初わからずにハマりました。

#原因は~/.profile
普段PATH設定はホームの.bashrcにしか書かないので，.bashrcを見ても，/opt/local/binの設定は書いてませんでした。どこに書いてあるのやらと思ったら，MacPortsはホームの.profileに設定の書くみたいです。

でホームの.profileみたら，新しいバージョンのMacPortsをパッケージでインストールするたびにPATH設定を追記してました。.profileも毎度バックアップされてました。

```bash
# MacPorts Installer addition on 2011-11-22_at_14:22:18: adding an appropriate PATH variable for use with MacPorts.
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
# Finished adapting your PATH environment variable for use with MacPorts.


##
# Your previous /Users/hoge/.profile file was backed up as /Users/hoge/.profile.macports-saved_2012-07-13_at_19:43:08
##

# MacPorts Installer addition on 2012-07-13_at_19:43:08: adding an appropriate PATH variable for use with MacPorts.
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
# Finished adapting your PATH environment variable for use with MacPorts.
以下省略
```

わんさか/opt/local以下にPATHを通してくれてる必要ないので，.profileを編集して，一回だけ/opt以下にPATHを通すようにしました。

#MacのPATH設定って意外に難しい
PATH設定で七転八倒してる間にMacのPATH設定がなかなかややこしいの知りました。

+ /etc/profile, /etc/bashrcが基本
+ /usr/libexec/path_helperというやつもPATH設定している。その設定は/etc/paths, /etc/path.d以下にある。自前でやるのはこのへんに設定する。
+ /Library/LaunchAgents/　以下のplistでもPATH設定できる。ソフトの起動スクリプトも書けたりする。
<Swift> MKLocalSearchでプレイス検索

# TL;DR
iOS標準Mapkitには、実は、自然言語（例：コンビニ 新宿）でプレイス検索ができるMKLocalSearchが存在します！
Google Places APIほどの精度はありませんが、クレカ登録などの面倒な手続きを踏まずに利用できる便利なAPIです。
その実装方法を紹介します。Swift 4.2です。

# 更新
* 2019/02/14 コードの整理とSwift 4.2対応

# 準備
まずMKPlacemarkを拡張します。

MKPlacemarkは、都道府県、市区町村、番地などのプロパティを持っていますが、
「東京都渋谷区千駄ヶ谷1-2-3」のような出力をするには、これらひとつひとつ連結しなくてはなりません。

そこでaddressというComputed Propertyを持たせます。

```swift
import MapKit
```

```swift
extension MKPlacemark {
    var address: String {
        let components = [self.administrativeArea, self.locality, self.thoroughfare, self.subThoroughfare]
        return components.compactMap { $0 }.joined(separator: "")
    }
}
```

英語の場合は、↓の表記ですね。

```swift
return components.reversed().compactMap{ $0 }.joined(separator: ",")
```


# 検索メソッド
ここで用意した引数は2つです。
queryには自然言語（例：コンビニ　新宿）を渡し、regionにはMKCoordinateRegionを渡すとヒントとして利用され、検索精度の向上が見込めます（任意）。

```swift
struct Map {
    enum Result<T> {
        case success(T)
        case failure(Error)
    }
    
    static func search(query: String, region: MKCoordinateRegion? = nil, completionHandler: @escaping (Result<[MKMapItem]>) -> Void) {
        let request = MKLocalSearch.Request()
        request.naturalLanguageQuery = query
        
        if let region = region {
            request.region = region
        }
        
        MKLocalSearch(request: request).start { (response, error) in
            if let error = error {
                completionHandler(.failure(error))
                return
            }
            completionHandler(.success(response?.mapItems ?? []))
        }
    }
}

```

# 基準となるRegionを渡し、検索実行！
検索には、座標と検索範囲のregionを設定します。

```swift
let coordinate = CLLocationCoordinate2DMake(35.6598051, 139.7036661) // 渋谷ヒカリエ
let region = MKCoordinateRegion(center: coordinate, latitudinalMeters: 1000.0, longitudinalMeters: 1000.0) // 1km * 1km

Map.search(query: "コンビニ", region: region) { (result) in
    switch result {
    case .success(let mapItems):
        for map in mapItems {
            print("name: \(map.name ?? "no name")")
            print("coordinate: \(map.placemark.coordinate.latitude) \(map.placemark.coordinate.latitude)")
            print("address \(map.placemark.address)")
        }
    case .failure(let error):
        print("error \(error.localizedDescription)")
    }
}
```

# 結果
`[MKMapItem]`が検索結果として返ってきます

```
#map name: ローソン渋谷三丁目店
#map coordinate: 35.6560398 35.6560398
#map address 東京都渋谷区渋谷3丁目28番8号
#map name: ファミリーマート麹町二丁目店
#map coordinate: 35.6834507 35.6834507
#map address 東京都千代田区麹町2丁目5番4号
#map name: ナチュラルローソン＆フードクルック 神宮外苑西店
#map coordinate: 35.671825 35.671825
#map address 東京都渋谷区神宮前3丁目35番8号
```

あとは、Mapにannotationを立てるなり、Cellに表示するなりしてください！
WIndows + Lキーで画面ロック（Ubuntu + LXDE）

Windowsでは[WIndows] + [L]キーで画面ロックができます。覚えておくとPCから離れる時に便利なのでよく使うんですが、Linuxでの設定をすぐ忘れてしまうのでメモで書いておきます。

環境はUbuntu12と14 + [LXDE](https://ja.wikipedia.org/wiki/LXDE)です。

##スクリーンセーバーのインストール
`xscreensaver-command`のオプションに`-lock`オプションがありますので、それを使って実現しようと思います。`xscreensaver`がインストールされていない場合は、以下のコマンドでインストールし起動します。`xscreensaver -no-splash`は起動時に実行されるように設定されるようですので、次回からは自分で実行する必要はありません。

（追記）2018/10 LXDEベースのLubuntu16で調べたみたところ `dm-tool lock` と `lxsession-default lock` が使えました。このコマンドを使えば画面ロックのためだけにインストールする必要はなさそうです。

```console
$ sudo apt-get -y install xscreensaver
$ xscreensaver -no-splash &
```

以下のコマンドで画面のロックできる事を確認します。

```console
$ xscreensaver-command -lock
```

##LXDE設定ファイルの編集
`.config/openbox/lxde-rc.xml`ファイルを編集します。[Windows] + [L] のキーバインドは`W-l`となりますので、`<keyboard>`と`</keyboard>`の間に以下の行を追加します。

```text:.config/openbox/lxde-rc.xml
    <keybind key="W-l">
      <action name="Execute">
        <command>xscreensaver-command -lock</command>
      </action>
    </keybind>
```

##試してみる
再起動するか`sudo pkill X`でウィンドウシステムを終了させ、再度ログインして[Windows] + [L]を試してみます。

私のとのろの設定では[Windows]キーを押すとスタートメニューが表示されるようになっているため、[Windows]キーを押すとスタートメニューが表示されてしまい、本当に同時に[Windows]キーと[L]キーを押さないとロック画面になってくれません。
仕方ないので[Windows]キーを無効にしてしまいます。[Windows]キーのキーバインドは`Super_L`みたいですので、以下の行を削除します。

```text:.config/openbox/lxde-rc.xml
    <keybind key="Super_L">
      <action name="Execute">
        <command>lxpanelctl menu</command>
      </action>
    </keybind>
```

再起動します。
[Windows]キーでスタートメニューが表示されなくなってしまいましたが、[WIndows] + [L]キーが使えるようになりました。スタートメニューは[Ctrl] + [Esc]キーでも表示できますので、それで良しとします。
puredataでzundoko

#概要
puredataでzundokoやってみた。
#写真
![pd2.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/76896849-d153-1025-04dc-f01a7d856a29.jpeg)

#サンプルコード
```
#N canvas 327 67 574 555 12;
#X obj 42 -5 random 2;
#X floatatom 95 109 5 0 0 0 - - -;
#X msg 42 69 1;
#X obj 42 109 +;
#X msg 95 69 0;
#X obj 95 144 == 4;
#X floatatom 95 207 5 0 0 0 - - -;
#X obj 95 175 +;
#X obj 46 286 +;
#X msg 46 249 1;
#X obj 46 323 select 2;
#X msg -7 165 0;
#X obj 42 30 select 1;
#X obj 131 430 print;
#X obj -53 -64 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X msg 187 115 zun;
#X msg 251 115 doko;
#X msg 46 389 ki.yo.si!!;
#X obj 46 359 delay 100;
#X obj 42 -41 metro 300;
#X connect 0 0 12 0;
#X connect 1 0 3 1;
#X connect 1 0 5 0;
#X connect 2 0 3 0;
#X connect 3 0 1 0;
#X connect 4 0 1 0;
#X connect 4 0 9 0;
#X connect 5 0 7 0;
#X connect 6 0 7 1;
#X connect 6 0 8 1;
#X connect 7 0 6 0;
#X connect 8 0 10 0;
#X connect 9 0 8 0;
#X connect 10 0 11 0;
#X connect 10 0 18 0;
#X connect 11 0 19 0;
#X connect 12 0 2 0;
#X connect 12 0 15 0;
#X connect 12 1 4 0;
#X connect 12 1 16 0;
#X connect 14 0 19 0;
#X connect 15 0 13 0;
#X connect 16 0 13 0;
#X connect 17 0 13 0;
#X connect 18 0 17 0;
#X connect 19 0 0 0;

```
技術英語 > this administration has put in place – stop is [upside down] / inside out / head over heels / left and right reversed

@ LOE > June 27, 2003
http://www.loe.org/shows/shows.html?programID=03-P13-00026
>  this administration has put in place – stop is <font color=red>upside down</font>

<hr>
関連して思い出したのは

http://ejje.weblio.jp/content/inside-out
> 裏返しに、引っくり返して、裏の裏まで、すっかり

<hr>
関連して思い出したのは

http://ejje.weblio.jp/content/head+over+heels
> まっさかさまに

heelsの上にheadが来ているのに「真っ逆さま」なのは未消化。

<hr>
「左右反対」はどう言うかというと

http://lang-8.com/184560/journals/826702
> 
左右反対 "left and right reversed" or for pictures "mirrored"
"You've got your left and right shoes mixed up."
"Your shoes are on the wrong feet."

「leftside right」とは言わないようだ。
http://forum.wordreference.com/threads/leftside-right.3121383/
Codenvy (Next-Generation Beta) を使ってみた

http://beta.codenvy.com/ を使ってみた

1. codenvy はクラウドの開発環境

# まずは様子見

1. Dashboard　から +
![Screen Shot 2016-07-15 at 03.34.17.png](https://qiita-image-store.s3.amazonaws.com/0/131106/fbe55859-7f72-ef95-23a9-b04e417b55c7.png)

2. New Project で Java を選択
  ![Screen Shot 2016-07-15 at 03.43.19.png](https://qiita-image-store.s3.amazonaws.com/0/131106/f270e72f-8b36-44c9-ea22-bcba23e38aa9.png)
  ![Screen Shot 2016-07-15 at 03.43.29.png](https://qiita-image-store.s3.amazonaws.com/0/131106/3cdb9a25-ef02-e690-981f-386b97533894.png)

  1. READY-TO-GO STACKS はみんな Ubuntu
      1. Android もある
  2. STACK LIBRARY には CentOS もある
    ![Screen Shot 2016-07-15 at 03.45.07.png](https://qiita-image-store.s3.amazonaws.com/0/131106/e85d1398-5610-9137-4ce0-cc1456a94854.png)
      1. .NET もある

  1. Java (Java, JDK, Maven, Tomcat, Subversion, Ubuntu, Git)　と console-java-simple を選んでみた

3. 20 秒強でプロジェクト作成完了
![Screen Shot 2016-07-15 at 03.54.26.png](https://qiita-image-store.s3.amazonaws.com/0/131106/622c5b46-8d18-ce4a-612a-92b31bd20ac2.png)

  1. Ubuntu 16.04 LTS
  1. java 1.8.0_45 (JDK も入ってる）
  1. sudo apt-get update しても何も更新されない

4. Terminal を使った感じ cloud9 より反応が悪い
  1. CTRL-C を使える
  2. CTRL-A, CTRL-E で行頭, 行末へ移動**できない**
  1. 矢印キーでコマンド履歴が使える
  1. Mac: Command+C, Command+V でコピペできる
  1. Mac: Command+K でスクリーンをクリア**できない**
  2. vi が入ってない
    3. ```sudo apt-get install vim``` でインストールできた

5. 右上のアイコンをクリックして Servers タブを選ぶと、アクセス方法が表示される
![Screen Shot 2016-07-15 at 04.08.49.png](https://qiita-image-store.s3.amazonaws.com/0/131106/358ec27e-7c25-0c32-7bb7-9ca54e524577.png)

  1. Profile メニューから Preferences で SSH キーをアップロードできる
![Screen Shot 2016-07-15 at 04.10.05.png](https://qiita-image-store.s3.amazonaws.com/0/131106/9f6fa61e-83b5-45d6-2bec-450539fe393a.png)
    1. 何故か ssh で Public Key 認証が成功しない
    2. ~/.ssh/authorized_keys を配置したら ssh できた

			$ ssh -p 44264 user@node2.beta.codenvy.com
			Welcome to Ubuntu 16.04 LTS (GNU/Linux 3.10.0-327.4.5.el7.x86_64 x86_64)

			 * Documentation:  https://help.ubuntu.com/
			Last login: Thu Jul 14 19:18:39 2016 from 160.1.1.1
			user@9254b379f023:~$
curlを使ってface++のREST API叩いて人物画像の類似度算出

これを画像を変更して2回発行し、レスポンス中のface_idを記録。ファイルはローカルのものをアップロードしている。
curl -v -X POST "https://apius.faceplusplus.com/v2/detection/detect?api_secret=YOUR_API_SECRET&api_key=YOUR_API_KEY" -F 'img=@japanese_bijin.png'

上で得たface_idを2つ指定。
curl -v -X GET "https://apius.faceplusplus.com/v2/recognition/compare?api_secret=YOUR_API_SECRET&api_key=YOUR_API_KEY&face_id1=11a1e91ec584d76266d4e3905bad7847&face_id2=7d2e5d0dbafbc0fb557a99b23decde7d"
個人の趣味で開発している無料アプリで8万円強もWeb広告打ってしまった話

個人で作ってるし、無広告無課金なので何の儲けにもならないのに8万円強ほど広告を打ってしまいました。
（ま、まあ、いつもあまりお金使わないし、そろそろボーナスだからいい...よね？）

そのおかげもあって2015/12/7時点で1182ダウンロードを達成することができました。
パチパチパチ（真顔）


で、個人でこういうことやる奇特な人ってあまりいないし、広告のパフォーマンスとかもあまり晒されていないので晒してみることにしました。


アプリはコチラ↓
「顔面偏差値スカウター」
https://play.google.com/store/apps/details?id=com.ganmen


Facebookページはこちら（是非いいねしてね♪）↓
https://www.facebook.com/ganmenscouter


ダウンロード数の推移は↓のような感じ。
https://gyazo.com/9ee609c6548aea5baacd0124d1d5564d


ターゲットは、学生間での口コミを狙って、女子中高生（および大学生）としました。
口コミ効果を高めるために、あえて手元の写真を対象に測定する機能は実装していません。
これは、友達を撮って測定→撮られた方もアプリを入れてみる、という行動を期待しているためです。


11月半ばにリリースして半月ほどは1日500円～1000円程度、Adwordsでリスティング広告を主とした広告出稿してました。
その結果、広告の効果がいかほどかは不明ですが、毎日25ダウンロード程度を安定して獲得していました。
なお、トータルでのパフォーマンスはこちら→https://gyazo.com/0f5e13ae0666a47a37ee448dfd23bbe9
キーワードとしては「顔面偏差値」というキーワードのパフォーマンスが特に良く、CTRが5%超え、平均クリック単価33円とかでした。
他には、「美人」とか「カワイイ」とかに出してましたが、全然クリックされませんでした..
で、Adwordsですが、複数キーワードを設定してもいかんせんさほどボリュームが稼げませんでした（設定した予算を消化しきれない）。
CPIはトータルで使用した額とダウンロード増加数の関係や、Developer Consoleで見られる、アプリページ閲覧した中でのインストール率から推定するに、80円強程度と思われます。


そんなこんなで、続いてFacebook広告を出稿しました。
結果は→ https://www.dropbox.com/s/fpb58a9i2631h55/FB_ad_performance.xls?dl=0
CPIは、上記と同様のロジックで推定し100円程度と思われます。
Adwordsと比べると良い数字ではないですが、お金を投下すればするだけボリュームは稼げたのでそういう意味では、好評価です。
また、性別、年齢、デバイス(OSとそのバージョンまで指定化)、趣味・嗜好でターゲティング可能だったのは、Adwodsと比べて良いなと思いました。


あと、謎なのは自然流入がどれぐらいだったのか。
エンタメカテゴリの新着無料ランキングで最高10位、同カテゴリの急上昇ランキングで最高2位を記録しましたが、そこらへんからの自然流入はそれなりにあったのではないかと思っています。
あとは、普通にストアで検索してやってくる人。
推測ですが、自然流入で200ダウンロード強程度を獲得したとすると、上記のCPIと辻褄があうのかなという感じです。


以上、簡単ですがどなたかの参考になれば。


ちなみに、今回のCPIって相場と比べるとどうなんでしょうね？
個人的には結構良い数字なのではないかと思っているのですが、そうでもないのかな。


【似たような記事（私が書いたやつじゃない）】
アプリインストール型広告(CPI広告)は実際のところ、どうなのか？収益を公開してみる。
http://blog.mokosoft.com/entry/2013/12/30/115632
SpineランタイムバージョンとSpineツールバージョン

先日、SpineツールのVersin3.4がリリースされました。
今回(正確には次回)から、新バージョン（ランタイム＋ツール）リリースについての方針が変わるようなので、ツール新機能の紹介などをする前にここについてまとめておきます。ここはエンジニアの情報サイトですからりランタイム情報の方がサイトの趣旨にあっていますね。（あんまり気にしてないけど。）

新機能および、この記事の内容について、詳しくは公式のブログポストにあります。
http://ja.esotericsoftware.com/blog/Spine-3-4-released

#今までのリリース方針と問題
ツールのバージョンが上がって新機能が搭載されても、ベースとなるlibgdxランタイム以外、各言語のランタイム対応はまちまち。画像や動画の書き出し以外は、なかなか実際に使える状態になりませんでした。ツールの設定で自動更新がONになっていると、ツールバージョンが容易にあげられるため、なんとなく新しいバージョンのツールでアニメーションデータを作ってしまい、自分の使っているランタイムで動かすことができないデータが作られてしまう、という事がありました。（実際に自分も前回の記事のポスト時にこれをやってしまい、データを最初から作り直すハメになりました。。）１人開発なら良いですが、作業者(会社)がデータ作成担当とエンジニアリング担当で分かれていたりすると、ちょっとした問題になる事もありそうです。

#今後の方針
今後は全ての言語のランタイムがでそろうまで、ツールのバージョンは上げない、という方針に変わるとの事です。まずlibgdxのランタイムライブラリが作られるのは変わりませんが、各言語のランタイムがそろっていない状態でのツールは機能先取りのβ版Spineという形で提供されるようです。といっても特に登録制のβプログラムなどは存在せず、ツール上から新機能β版に簡単に切り替えられる様子なので、注意が必要なのは変わらないのですが、正式には最新バージョンが上がっていないのがポイントです。 "β版ではない最新のツールを使ってくださいね"というようなコミニュケーションが作業者間で取れるので、つまらない伝達ミスは減りそうです。

<img width="599" alt="スクリーンショット 2016-07-15 1.48.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/8302/668b5b6f-f902-ec12-1566-ef3de7c71c67.png">
_最新版を使っているとβ版提供の通知も受け取る事ができそう_

#所感
各言語のランタイム開発のスピードを大幅に向上させる見通しが立ったということが、今回の指針変更の背景にあるように感じます。とりあえずVersin3.4にはすでに[Spine-Unity](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-unity)や[Spine-C#](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-csharp)のランタイムが最新バージョンのデータに対応していて、他言語も２週間程度で対応が終わるとのことです。自分が使っているSpine-Starlingも[開発ブランチ](https://github.com/EsotericSoftware/spine-runtimes/tree/as3-update-3.3.0/spine-starling)では Starling2.xとSpine3.3(なぜ3.4でないのか？)の対応が進んでおり、前バージョンよりきちんと作られているようにもみえ、楽しみです。

なお、JavascriptのランタイムライブラリについてはTypeScriptベースでの開発を予定していているとの事で（[オフィシャルではないTypeScriptランタイム](https://github.com/flyover/spine.ts)はすでに存在するようですが、公式にTypeScriptランタイムが配布されるのではなく、オフィシャルなJavascriptランタイムがTypeScriptソースから書き出されるという事です。）、個人的にもTypeScriptは好きな言語なので、こちらも楽しみです。

それでは。
Rustで数値計算：Newton法

Rustで数値計算を行う練習として、とりあえず一次元のNewton法を実装してみよう：

```math
f(x) = 0
```

を解くために次のイテレーションを行う：

```math
x_{n+1} = x_n - \frac{f(x_n)}{f^\prime(x_n)}
```

これを実装するには関数fを与える必要がある。
関数を関数にわたす部分は[Closures](https://doc.rust-lang.org/book/closures.html)の章に書いてある。

```rust
fn newton<T1, T2>(f: T1, df: T2, mut x: f64, eps: f64) -> f64
    where T1: Fn(f64) -> f64,
          T2: Fn(f64) -> f64
{
    let mut y = f(x);
    while y.abs() > eps {
        x -= y / df(x);
        y = f(x);
    }
    x
}
```

2つのclosureは別の型になるのでT1,T2は別のキーワードにする必要がある。
関数のポインタでなく、コンパイル時に型が決まっている。

とりえあず微分は自分で解析的にやるとして使ってみよう：

```rust
fn main() {
    let mut x = -5.0;
    let f = |x| x * (x - 1.0);
    let df = |x| 2.0*x - 1.0;
    let eps = 1e-6;
    x = newton(&f, &df, x, eps);
    println!("Result = {:e}", x);
}
```

```
Result = -7.324879859764758e-11
```

最近ASTを解析して自動的に微分演算を実装する自動微分が流行ってるらしいが（要出展）、
そんな高度な事できないので、数値微分してみよう：

```rust
fn main() {
    let mut x = -5.0;
    let dx = 1e-7;
    let f = |x| x * (x - 1.0);
    let df = |x| (f(x+dx)-f(x))/dx;
    let eps = 1e-6;
    x = newton(&f, &df, x, eps);
    println!("Result = {:e}", x);
}
```

```
Result = -7.238726858155113e-11
```

## 課題

```rust
let df = |x| (f(x+dx)-f(x))/dx;
```

の部分を

```rust
let df = num_diff(&f, dx);
```

のように書きたいのだが、`num_diff`の定義の方法がわからなかった。
ラムダ式では型を書かなくて良いので定義できたが、別個の関数にする場合の型がわからない。
Haskellっぽく簡単に書けないのかな？

```hs
num_diff :: (Float -> Float) -> Float -> (Float -> Float)
```

[Closures](https://doc.rust-lang.org/book/closures.html)には戻り値に使う場合は`Box`使えって書いているので、`std::rc::Rc`使えば

```rust
use std::rc::Rc;
fn num_diff(f: Rc<Fn(f64) -> f64>, dx: f64) -> Rc<Fn(f64) -> f64> {
    Rc::new(move |x| (f(x + dx) - f(x)) / dx)
}

fn main() {
    let mut x = -5.0;
    let f = Rc::new(|x| x * (x - 1.0));
    let df = num_diff(f.clone(), 1e-7);
    let eps = 1e-6;
    x = newton(&*f, &*df, x, eps);
    println!("Result = {:e}", x);
}
```

って書けるけど、これでいいのかな。。。。。
プロジェクトの終了前にやるべきこと

リリース、ローンチ、納品、プロジェクトの終わりにはいろいろな形があります。

プロジェクトを終了する前にやるべきことのまとめです。


・ふりかえり
　KPT　をやるといいです。
　　Keep     続けたいこと＝成功要因
　　Problem  問題点
　　Try      改善策など
　
　これらを整理することで、次のプロジェクトを成功させるためのノウハウを引き出すことができます。

・打ち上げ
　終わりを共有することは、次の開始をスムーズにします。
　ここで活躍してくれたメンバーを労って、次のプロジェクトにも参加してもらいましょう。

・ナレッジの整理
　受け入れテストなどの納品チェック期間中は、臨戦態勢での待機期間です。
　この期間に、予想外にハマったところを中心に手順や方法をまとめておきましょう。
CentOS7  LC_CTYPE: cannot change locale (UTF-8): No such file or directory

CentOS 7



＊i18nのファイルを作るみたいなことが書いてあるサイトがたくさんあって試してみたが、できなかった、自分のはそれは関係なかった。
ので
http://stackoverflow.com/questions/22430747/locale-error-in-centos
ここを参考にしたら直りました。
以下日本語訳です。


CentOSを立ち上げると、いつも

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

というのがでたり、
`locale`コマンドをすると、

```
$ locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
```
この二つがいつもでるので直したかった。

```
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
```

#直す

viコマンドでenvironmentファイルを新規に作成する。

`sudo vi /etc/environment`

その中にこの２行を書くだけ。

`a`を押して挿入モードに。

```
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
```

escキー（コマンドモードに）　　→`:wq`　　　　　で保存

```
[root@localhost ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.utf-8"     ←ここが最初と変わっている。
LC_NUMERIC="en_US.utf-8"
LC_TIME="en_US.utf-8"
LC_COLLATE="en_US.utf-8"
LC_MONETARY="en_US.utf-8"
LC_MESSAGES="en_US.utf-8"
LC_PAPER="en_US.utf-8"
LC_NAME="en_US.utf-8"
LC_ADDRESS="en_US.utf-8"
LC_TELEPHONE="en_US.utf-8"
LC_MEASUREMENT="en_US.utf-8"
LC_IDENTIFICATION="en_US.utf-8"
LC_ALL=en_US.utf-8
[root@localhost ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.utf-8"
LC_NUMERIC="en_US.utf-8"
LC_TIME="en_US.utf-8"
LC_COLLATE="en_US.utf-8"
LC_MONETARY="en_US.utf-8"
LC_MESSAGES="en_US.utf-8"
LC_PAPER="en_US.utf-8"
LC_NAME="en_US.utf-8"
LC_ADDRESS="en_US.utf-8"
LC_TELEPHONE="en_US.utf-8"
LC_MEASUREMENT="en_US.utf-8"
LC_IDENTIFICATION="en_US.utf-8"
LC_ALL=en_US.utf-8
```

これでもうログインしたり、localeを見た時にエラーは出なくなる。


日本語の場合は`en_US`のところを`ja_JP`に変えれば大丈夫だと思います。
プロジェクトを成功させるコツ。

備忘。
プロジェクトを成功させるコツ。　随時更新予定。


##キックオフをやる。
　メンバーを集めて、目的と目標を明確にする。共有する。

##各自の締め切りを厳守する。
　リリース前日の１日とプロジェクト初日の１日は同じ１日。
　明日でいいや　は、　自分たちの首を絞めることになる。

##相手の期限を伸ばすのであれば、締め切りも伸ばす。
　バッファーは常に無いものとして、厳格に見積もり、実行する。

##常にQCDのバランスを意識する。
　QCDは、相対的なもの　という原則を忘れず運用する。
　
##Qを合意してから、CとDの話をする。
　合意されていない品質の物は、ないのと同じ。
こんなプロジェクトは炎上する。

所感です。

#他のプロジェクトの見積もりを参考に見積もりを出す。
　炎上する理由：
　見積もりはあくまで見積もり。実績をもとに見積もりを出すのであれば、根拠になる。
　見積もり＝想定をもとに　新たな見積もりを出すと、　想定をもとに想定を出すことになるため、
　不確実性が高まるため、炎上しやすい。

#WF(ウォーターフォール)なのに計画段階で、すでに重複フェーズがある。
　炎上する理由：
　プロジェクトを進めると、想定外のことが出てくる。
　計画段階で、無理をする想定だと、想定外のことがあったときに、無理がきかず炎上する。

#要件定義書に　「現行踏襲」が多い。
　炎上する理由：
　現行がわかっていれば、現行の内容を書く。
　現行がわかっていないから、こんな記述になる。
　結局、現行って何？　っていう調査が、後工程に先送りされるだけなので、
　しわ寄せを解消しきれず、炎上する。

#工程の前半で、気合とか言っている。
　炎上する理由：
　気合が後半まで続くほど、人は強くない。

#テスト計画がない。
　炎上する理由：
　計画がない＝場当たり的　という前提の話。
　場当たり的にテストしても、漏れが出る。
　漏れが出るということは、不具合がなおらないで、次工程に繰り越される。
　後工程で見つかる不具合ほど、改修にかかる工数が増えるのはもちろんのこと、
　その不安を解消するために、多くの再テストをすることになる。
　不安の連鎖を打ち消すために大量の工数を投入するため炎上状態になる。

「これもあるよ。」は、コメントください。
AWSって種類が多すぎてわからないので、調べてみた


AWSを使ってみようと思ったが、種類が多いのでちょっと調べてみたことをメモメモ。。

#AWSとは
まずAWSとは、Amazon Web Services（アマゾンウェブサービス‎）の略で、Amazonがインフラ系クラウドサービスを指す。
[ここ](http://aws.amazon.com/jp/products/)にサービス一覧が書かれている。
用途別にサービスが分かれているが、今回は基本かつ主に自分が使いそうなものをいかに記述する。
##[Amazon EC2](http://aws.amazon.com/jp/ec2/)
Amazon EC2は仮想化されたサーバーが利用できる。
自由にスペックを選べ、インスタンス数、起動時間によって料金が変わる従量課金制のサービスになる。
webサーバ、DBサーバ、キャッシュサーバなど好きな用途に使える。

##[Amazon S3](http://aws.amazon.com/jp/s3/)
Amazon S3は従量課金制のデータストレージサービス。
コンテンツのストレージや配信する際に利用する。
静的ファイルをS3内に設置して利用する。
htmlファイル、jsファイル、画像ファイルをS3に設置して、EC2などのwebサーバ側から利用する。

##[Amazon RDS](http://aws.amazon.com/jp/rds/)
amazon RDSはデータベースとして使用することができる。
元々がデータベース用として用意されているので、設定などが楽に行える。

##その他
分析、IoT、モバイル開発用など様々な用途に使えるサービスが用意されている。
[ここ](http://aws.amazon.com/jp/products/)から確認できる。

自分がとりあえず使いそうなものだけ調べたので、今後利用したり使ったりして用途が詳細にわかったら改めて記載する。
プロジェクト体制提案のコツ

### 備忘：提案依頼（RFP）に対する、提案のコツです。

流れは以下の通り。

0. 提案書のフォーマットをよく読み込む
<BR><BR>
1. ヒアリングする
  * RFPの背景、目的、を深掘りして聞く。
  * 相手の体制　特に、決裁権者とそれに関わる関係者を確認する。　
<BR>　
2. 提案書を作る（想定版）<BR>
  目次は以下の通り。
  * 目的
  * 背景
  * 問題/課題
  * 解決策
  * フェーズとそのゴール
  * スケジュール
  * 体制
  * 役割分担<BR><BR>
　**※ 随時追加予定。今後、重要度を設定する予定です。**
<BR><BR>
3. 追加のヒアリングをする
想定番の提案書を見せながら、担当者と認識合わせをする。<BR>
ポイントは、**提案して欲しい内容になっているかどうか**を確認する。
<BR>

4. 提案書を提出する
製本して、送付する。
Git入門（個人用）

#概要
gitの基本的なコマンドの使い方とGitHubなどを使用する際の手順などを説明する．
##gitの基本コマンド
ここでは（個人的に）よく使うコマンドを記載する．
詳しいオプションなどは書かないこととしています．

|コマンド|意味|使用例|
|:-----------|:-----------|:-----------|
|git init|リポジトリを初期化する|git init|
|git status|リポジトリの状態を確認する|git status|
|git commit -m "コメント"|リポジトリをコメントをつけてセーブする|git commit -m "first commit"|
|git add --all|リポジトリ内の変更されたファイルをステージに追加する|git add --all|
|git branch|現在のブランチを確認する|git branch|
|git branch [ブランチ名]|ブランチ名に指定したブランチを作る|git branch test|
|git checkout [ブランチ名]|ブランチを移動する|git checkout test|
|git push [リモートブランチ名]|リモートリポジトリへの送信|git push origin master|
|git pull|リモートのマスターブランチのデータを受信する|git pull|
|git clone [リモートリポジトリ名]|リモートリポジトリを取得する|git clone https://github.com/makky0620/Test|

##gitの手順
ここでは以下の手順で説明する．
1. リモートリポジトリを取得する
2. ファイルを追加/変更し，送信の準備をする
3. リモートリポジトリへ送信する

###リモートリポジトリを取得する
GitHub上からリポジトリのアドレス（URL）をコピーしておく

![newrepo.PNG](https://qiita-image-store.s3.amazonaws.com/0/49447/d52e8068-8c14-4fc0-899b-e31e8386fa7e.png)

そうしたら以下のコマンドで完了

```
user@username: git clone https://github.com/makky0620/Test.git
```

###ファイルを追加/変更し，送信の準備をする
ここではブランチを切り，テキストファイルを追加し，リモートリポジトリへ送信できる状態にする．

まず初めに適当にブランチを作り，移動する

```
user@username: git branch test
user@username: git checkout test
```
作られたリポジトリ内に何らかのテキストファイスを作る（ここではtext.txtとする）

作成後以下のstatusコマンドを打ち，現在の状態を確認すると以下のようになっているはず．

```
user@username: git status
On branch test
Untracked files:
 (use "git add <file>..." to include in what will be committed)

   test.txt

nothing added to commit but untracked files present (use "git add" to track)
```

新しいファイルがありますが，送信できる状態じゃないですよっていうことです．なので以下のコマンドで送信できる状態にして，また状態を確認してみます．

```
user@username: git add --all
user@username: git status
On branch test
Changes to be committed
 (use "git reset HEAD <file>..." to unstage)

   new file: test.txt

```
これで送信できる状態になっています．



###リモートリポジトリへ送信する
ここではリモートリポジトリへ送信をします．
今までの工程を終えて，最後にどのような変更を加えたのかを以下のコマンドを使用して書く

```
user@username: git commit -m "add test.txt"
```

そうしたら最後にリモートリポジトリへ以下のコマンドで送信する．

```
user@username: git push origin test
```

ここでGitHubのユーザ名とパスワードが聞かれるが，正しく打てば，送信ができる．
ちなみに最後のコマンドはGitHub上（リモート）にtestってブランチを作って，変更したデータを送信するよって意味です．
GitHubを見てみるとtestというブランチが追加されているはず．
プロジェクト計画の手順

開発プロジェクトを計画する上で、最低限必要なことの備忘録です。

プロジェクト計画＝提案の手順は、以下の通り。


・目的、背景の整理。
・スコープの明確化

・作業の工数見積もり
　・作業一覧の作成　WBS　（２〜３レイヤ分必要）
　・作業ごとの期間見積もり　＝　工数見積もり

・体制構築
　・動かせるメンバーの一覧を作る。
　・作業一覧にメンバーをプロットする。

・スケジュール作成
　・期限を決める。
　・作業の順番を決める。
　・並行可能な作業に印をつける。
　・作業者を割り当てる。

・QCDを調整する。

・関係者と合意する。
　・チームメンバーとの合意
　・依頼者との合意
XCodeのCopyrightやCreated byが日本語でダサいので英語にする

XCodeでアプリ開発しようと思ったら、CopyrightやCreated byがダサすぎる。
以下の様なものがで対応する方法を見かけます。
・システム言語を英語にする
・Xcodeのソースコードテンプレート

ただ、手間がかかったり、システム言語設定を英語にするのは嫌な方もいると思いますので、
こちらの方法をおすすめします。

```code:iterm
$ defaults write com.apple.dt.Xcode AppleLocale en_US
```