OmniAICreator/Qiita-1.07M huggingface dataset:
IntelliJ IDEAのProjectウィンドウからモジュールのパスを消すプラグイン

IntelliJ IDEAのProjectウィンドウは、デフォルトの状態ではモジュールのパスが表示されます。
こんな感じです。

<img width="218" alt="419b3d98-54c8-5754-e8e2-f2cbc53bc15a.png" src="https://qiita-image-store.s3.amazonaws.com/0/58650/f9828661-c4cc-a9ab-e959-2c45dc521d27.png">

このパスを消す方法は、どうやらIntelliJ IDEA自体には無いようです。
しかし、[Path hide for IntelliJ IDEA](https://plugins.jetbrains.com/idea/plugin/8378-path-hide)というプラグインをインストールすると、このパスが表示されなくなります。
手元ではIntelliJ IDEAでしか試せていないのですが、上記Webサイトには「Compatible with all products except MPS」と書かれていますので、WebStormなど他のJetBrains製IDEでも動作するはずです。

検索するときは、「path hide」で検索してみてください。

<img width="936" alt="0d95a107-341d-4fb8-d1bd-73409a981f8f.png" src="https://qiita-image-store.s3.amazonaws.com/0/58650/04ec703e-5ad7-2af7-606d-147931d196d4.png">

このプラグインをインストール後、IntelliJ IDEAを再起動して、プロジェクトを開いてみると・・・

<img width="266" alt="8bf7b0bc-4e7a-62cc-ea09-091c90cfeb7b.png" src="https://qiita-image-store.s3.amazonaws.com/0/58650/51f1ca38-a032-a515-4f13-d23a2c1d0d41.png">


モジュールのパスが表示されないようになっていますね！

# 参考URL
https://intellij-support.jetbrains.com/hc/en-us/community/posts/206810205-Hiding-module-path-in-Project-view
https://youtrack.jetbrains.com/issue/IDEA-126014
構造体が持つメソッド名を列挙する

# 構造体が持つメソッド名の列挙
メモついでに φ(..)

## 環境

   | バージョン 
---+---
macOS | 10.12.2
Go   | 1.7.3

## コード
```golang
package main

import (
	"fmt"
	"reflect"
)

// 構造体 その1
type Hoge struct {
	hoge string
}

func (h *Hoge) MethodHoge1() {
	fmt.Println(h.hoge)
}

func (h *Hoge) MethodHoge2(a int, b int) int {
	return a + b
}

// 構造体 その2
type Fuga struct {
	fuga string
}

func (f *Fuga) MethodFuga1() {
	fmt.Println(f.fuga)
}

func (f *Fuga) MethodFuga2(a int, b int) int {
	return a * b
}

func (f *Fuga) MethodFuga3(str string) (string, int) {
	f.fuga += str
	return f.fuga, len(f.fuga)
}

// 構造体が持つメソッド名を表示
func PrintMethodName(inf interface{}) {
	it := reflect.TypeOf(inf)

	for i := 0; i < it.NumMethod(); i++ {
		fmt.Println(it.Method(i).Name)
	}
}

func main() {
	var hoge Hoge
	var fuga Fuga

	PrintMethodName(&hoge)
	PrintMethodName(&fuga)
}
```

## 出力
> MethodHoge1
> MethodHoge2
> MethodFuga1
> MethodFuga2
> MethodFuga3
iOSで画像のファイルサイズを取得する

### 経緯

iOSで[Photos Framework](https://developer.apple.com/reference/photos)経由で写真を取得する際にサイズを計算したいことがあったのですが、実際のサイズとだいぶズレていたので正しいサイズを取得できた経緯を残したいと思います。

### 動いたコード

Objective-Cですが、Swiftでも変わらず使えると思います。

```
[asset requestContentEditingInputWithOptions:[[PHContentEditingInputRequestOptions alloc] init] completionHandler:^(PHContentEditingInput * _Nullable contentEditingInput, NSDictionary * _Nonnull info) {
        
        NSError *error = nil;
        NSString *url = contentEditingInput.fullSizeImageURL.path;
        
        NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:url error:&error];
        if (!error) {
            NSInteger size = [[attributes objectForKey:NSFileSize] integerValue];
        } else {
            // error !
        }
    }];
```

結論としては、 `NSFileManager` の `attributesOfItemAtPath:` で渡ってくるDictionaryの中の `NSFileSize` というKeyにbytesでデータが入っていました。
これを1024で割っていけば、 KB, MB, GB, ... と変換することができます。

### 試したコードたち

まずは UIImage → NSData に変換をかけて `length` プロパティでサイズを計算しようとしました。
確かにサイズは取得できたように思えたのですが、実際のサイズよりもかなり大きくなってしまいました。
これは `PNG` や `JPEG` などが、このデータに対して圧縮をかけているのが原因だと思います。なので、他の拡張子などに対しては有効かもしれません (未検証)

```
UIImageJPEGRepresentation(image, 1.0f).length;
// or UIImagePNGRepresentation(image).length;
```

---

次に、 UIImage.size をつかって計算しようと思いました。結果は上と同じになります。 `width`, `height` はピクセル数を意味しているので当たり前といえば当たり前ですが...

```
// imageのwidth, height の計算
CGFloat w = image.size.width;
CGFloat h = image.size.height;

// 表現データに応じて、なにかしらをかけてあげる (4byteなのかとか色々ね)
CGFloat size = (w * h) * α;
```

---

次に、 `sizeof` を使ってデータを計算しようと思いました。 `sizeof` は確保メモリ領域の取得なので今回の話とはそもそも違うことだったので早々に諦めました。
$el.data('xxxx') と $el.attr('data-xxxx') の違いでハマりがちなこと

わかったつもりで地味にハマったメモです。

概要としては、 
`jQuery.fn.data` で値をセットすること と HTML要素に `data-xxxx`が付与されること
は **イコールではない** ということです。

## `jQuery.fn.data` の基本的な使い方

```
<p data-hoge="fuga"></p>
```

先にHTMLがあり、　これの `futa` を jQueryで取得する場合、次のようにすると取得できる。

```
var hoge = $('p').data('hoge');
console.log(hoge); // => 'fuga'
```

で、データを更新したいときはセッターとして次の用にすればいい。

```
$('p').data('fuga', 'bar');
```

## 問題になるケース

```
<p></p>
```

```
$('p').data('hoge', 'bar');
...
var hoge = $('p').data('hoge');
console.log(hoge); // => 'fuga'
```

しかし、このあとでセレクタによる取得をしようとすると、

```
$('p[data-hoge=fuga]').text('bar');
// => できない
```

という事が起こります。

## まとめ

`jQuery.fn.data` は対象の要素にエキストラなデータを保持させることができ、HTMLの属性値でマッチするものがあればそちらを利用できるように作られています。
しかし、 `$hoge.data('fuga', 'bar')` Key・Valueを付与することが `data-fuga="bar"` のようにHTMLの属性を追加する処理ではないという勘違いがあったという話です。

このためDOMの属性値を介して処理をおこなうようなつくりにする場合は注意が必要です。
次のようにHTML側に値をもたせるようにすればOKとなります。

```
$('p').attr('data-hoge', 'bar');

var hoge = $('p').data('hoge');
console.log(hoge); // => 'fuga'
$('p[data-hoge=fuga]').text('bar');
// => できる
```

※この手の設計がエレガントかどうかは別問題ですが。
元号改正に伴う西暦-和暦変換の動作をPowerShellで試す

※正式な元号に

# Windowsでの元号の取り扱いに関する話？

2017/10/20 追記： 元号に関係する話は西暦-和暦変換だけではなく、様々な事項を考慮せねばならない場合があります。詳細については下記URLのマイクロソフト社のブログ記事もご覧ください。

https://blogs.technet.microsoft.com/jperablog/


さて、MSDNのページに日本の元号に関する話が出ておりました。
https://msdn.microsoft.com/en-us/library/windows/desktop/ee923790.aspx?f=255&MSPPError=-2147217396

要するにレジストリで改元日を設定できるのだから、この設定してを変更した場合の西暦-和暦の変換動作を PowerShell で試してみることにする。

# レジストリ設定

こんなふうにレジストリに設定すれば、2019年1月1日以降は新しい元号ということになる。

```registry
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras]
"2019 05 01"="令和_令_Reiwa_R"
```

さらに https://support.microsoft.com/ja-jp/help/4469068/summary-of-new-japanese-era-updates-kb4469068 で紹介されているアクティブ元号移行テストとして2018年5月1日に架空の別の元号を差し込んでもよいだろう。

```
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras] - "2018 05 01"="新元号_新_TestEra_E"
```

# PowerShell での実行内容

こんなカンジに実行すれば、レジストリの内容を確認しつつ西暦和暦変換をテストできる。試験は独立した作業環境で行ったほうがよいだろう。

```ps1
PS C:\> $path = "HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras"
PS C:\> Get-ItemProperty $path
1868 01 01   : 明治_明_Meiji_M
1912 07 30   : 大正_大_Taisho_T
1926 12 25   : 昭和_昭_Showa_S
1989 01 08   : 平成_平_Heisei_H
2018 05 01   : 新元号_新_TestEra_E
2019 05 01   : 令和_令_Reiwa_R
PSPath       :
 Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras
PSParentPath :
 Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese
PSChildName  : Eras
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

PS C:\> $CultureInfo = New-Object system.Globalization.CultureInfo("ja-JP");
PS C:\> $CultureInfo.DateTimeFormat.Calendar = New-Object System.Globalization.JapaneseCalendar
PS C:\> $CurrentDate = Get-Date
PS C:\> $CurrentDate.ToString("ggyy年MM月dd日",$CultureInfo)
新元号01年04月01日

PS C:\> $CurrentDate = [DateTime]"2019/05/01"
PS C:\> $CurrentDate.ToString("ggyy年MM月dd日",$CultureInfo)
令和01年05月01日

PS C:\>
```

上記の方法は現在の日付と指定した日付を変換させています。

PowerShell でのテストはこんなもんだが、必要に応じて個別のアプリの挙動を確認するとよいでしょう。

そしてテストが終わったらレジストリから設定を消すことをお忘れなく。

# その他の注意事項

Windowsで西暦-和暦を扱う処理は他にもいろいろありますが、上記レジストリを見ないAPIもあるようです。和暦を扱う処理については個々のシステムやアプリの内容に合わせた検証が必要ですね。
サクッと始める MXNet チュートリアル

MXNet、Anaconda などで簡単にインストールできないのが地味にハードルが高い。コンパイルに必要なライブラリもまあまあ複雑。手元の環境を汚したくないとなるとやはり Docker。

# チュートリアルの進め方

## 1. Docker コンテナの起動

（本家の [Docker イメージ](https://hub.docker.com/r/dmlc/mxnet/) はちょっと古い & Jupyter が入っていなかったので作りました。自分でイメージをビルドしたい方は[こちら](https://github.com/pottava/docker-dl-framework/blob/master/mxnet/versions/0.x/Dockerfile)を参考にどうぞ）

```sh:コマンド
docker run --rm -it -p 80:8888 pottava/mxnet:0.9 sh
```

## 2. コンテナ内で Jupyter を起動

以下、コンテナの中でこのチュートリアルを進めるのに必要なライブラリの追加、Jupyter の起動などをしていきます。

```sh:コマンド
# チュートリアルを取得
apt-get update
apt-get install -y git
git clone https://github.com/dmlc/mxnet-notebooks.git

# チュートリアルに必要なパッケージの追加
pip install matplotlib

# Jupyter を起動
cd mxnet-notebooks/
jupyter notebook --no-browser --port=8888 --ip=0.0.0.0
```

```sh:結果（例）
[I 06:12:34.720 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 06:12:34.735 NotebookApp] Serving notebooks from local directory: /root/notebook/mxnet-notebooks
[I 06:12:34.736 NotebookApp] 0 active kernels
[I 06:12:34.736 NotebookApp] The Jupyter Notebook is running at: http://0.0.0.0:8888/?token=627f63e7852e6a9cb99efa8f1be495948da80ade36c190c1
[I 06:12:34.736 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 06:12:34.737 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://0.0.0.0:8888/?token=xxxxx
```

## 3. ブラウザでアクセス

2 の結果の最終行を見ると、Jupyter はコンテナ内では `http://0.0.0.0:8888/?token=xxxxx` として起動しているようなので、Docker ホスト上での URL に脳内変換して接続します。（例えば Docker for Mac ならホストは `localhost`）

http://localhost/?token=xxxxx

にアクセス。

## 4. 目的の .ipynb を開く

例として、2 つのチュートリアルに取り組んでみます。

### 4.1. MNIST の手書き推論

python、tutorials とフォルダを選択していき `mnist.ipynb` を選びます。上から順に、チュートリアルを読みつつ実行していきましょう。

利用している Docker イメージは GPU ドライバに対応していない版なので、最後のステップでは `mx.gpu(0)` を `mx.cpu()` に書き換えて実行する必要があります。
CPU、さすがに時間かかりますね・・

### 4.2. CNN によるテキスト分類

python、moved-from-mxnet の下にある `cnn-text-classification.ipynb` を選びます。（ちなみにこの moved-from-mxnet フォルダ以下のチュートリアル、彼らの移動のさせ方が悪かったようで、一部このままでは動きません。残念）

こちらもステップ [7] で gpu をコメントアウト、cpu をアンコメントしないとエラーになるので注意です。

　
最後まで完走できましたか？
マージコンフリクトをチェックする git alias

複数のブランチを同時に編集するとき、マージするとコンフリクトが大量に出て、resetしないといけなくなることが多い。

そのチェックために`try-merge`と`dontmerge`のaliasを作りました。

一緒に使うgit commandは以下です:

- `try-merge`: コードをマージしようする、ただしcommit作らない
- `dontmerge`: `try-merge`した状態から戻す (work treeをcleanに)
- `commit`: `try-merge`した状態から進んでcommitを作る

[ソース](https://github.com/jokester/dotted/blob/master/DOTgitconfig#L34-L36)
Windows > { デスクトップのtで始まるexeファイルをキー入力で実行する > t入力 | Enter } | {firefoxアイコンを特定して起動 > fire入力 | Enter }

```txt:動作確認
Windows 8.1 pro (64bit)
Windows 7 pro (32bit)
```

VMwareにてWindows 8.1で作業しながら、CentOSでWRFの処理をしようとしてキー入力したら、Windows側にフォーカスが移っていて、そちらでキー入力が認識された。

その時に見つけたこと。
以下の手順で、デスクトップにあるフォルダを開いたり、exeファイルを実行できたりする。

1. キー入力 (例: t)
   - tで始まるアイコンにフォーカスが移る
   - 続けてtを入力すると、tで始まる別のアイコンにフォーカスが移る
2. Enter入力
   - exeの場合、exeが実行される
   - フォルダの場合、フォルダが開かれる

デスクトップのフォーカスがある時に、マウスを使わずにプログラムを実行できる。

~~漢字のアイコンは非対応。~~
アルファベットの代わりに漢字入力すれば同じことができる。

フォーカスがおかしくなった時はEscを押せばよい。

<hr>

@mt08 さんにコメントでアイコンの特定方法を教えていただきました。
http://qiita.com/7of9/items/392d77f401f2921a383b/#comment-48c904e4b5d4ad40ca4a
[iOS][Objective-C]デバイスの操作時にpostされるNotificationのobserver登録

###デバイスの横のボリュームボタンを押下された時に呼び出される処理について

iOSで開発している最中にデバイスの操作を扱う時がある。
その際によく使うものを書いていこうと思いました。
他にもお勧めがあれば教えてください。

SampleViewController.m
target : iOS 8.0

~~~Objective-C

@property (nonatomic,weak) IBOutlet UISlider *systemVolumeSlider;

~~~

~~~Objective-C
- (void)viewDidLoad {

// 他の処理

// デバイス横のボリュームボタンを押下時にpostされるNotificationの、observer登録
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(systemVolumeDidChangeNotification:)
                                                 name:@"AVSystemController_SystemVolumeDidChangeNotification"
                                               object:nil];
// 他の処理

}
~~~


~~~Objective-C
// デバイス音量が変更されたときに呼ばれる
- (void)systemVolumeDidChangeNotification:(NSNotification *)notification
{
    // 画面側スライダーを更新
    float volume = [[[notification userInfo] objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue];
    self.systemVolumeSlider.value = volume;
}
~~~~

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
mapplyで二重ループを回避してみた

Rのapply系の中でも異彩を放っているmapplyの使い方の例を書いてみました。以下の図のような、
1. 50m×50mの中に2000個の点が散らばっている。
2. それぞれの点について、半径5m以内にいる他の点の数を数える。
という例で考えてみます。

<img width="400" alt="data.png" src="https://qiita-image-store.s3.amazonaws.com/0/152374/55fadcca-73f3-3133-e003-cd10b06031b7.png">

```R:データの準備
library(dplyr)
set.seed(4)
n <- 2000
gx <- runif(n, min=0, max=50)
gy <- runif(n, min=0, max=50)
samp_dat <- data_frame(ID = paste("ID", 1:n, sep = "_"), gx, gy) 
```

このデータから下のような結果がほしい。

|ID|周りの数|
|----|----|
|ID_1|65|
|ID_2|37|
|ID_3|43|
|...|...|
|ID_2000|79|


## 普通にループを使う 
- ループ1：対象の点と回りの点の距離を比べる。
- ループ2：ループ1を全部の点に行う。

```R:ループのみ
countR <- function(gx, gy, r){
 n_length <- length(gx)
 res <- numeric(n_length)
 for (i in 1:n_length){
  temp <- numeric(n_length)
   for (j in 1:n_length){
        if ((gx[i]-gx[j])^2 + (gy[i]-gy[j])^2 <= r^2) temp[j] <- 1
      }
      res[i] <- sum(temp)
      temp <- numeric(n_length)
    }
  res - 1
}

> system.time(res <- countR(samp_dat$gx, samp_dat$gy, r = 5))
   user  system elapsed
  6.989   0.027   7.015
> str(res)
 num [1:2000] 65 37 43 65 57 59 58 52 52 65 ...
```

## mapplyを使う
- １つ目のループをベクトル化。
- ２つ目のループにmapplyを使う。

```R:mapply 
r <- 5
countR2 <- function(n){
    temp <- (gx[n] - gx)^2 + (gy[n] - gy)^2 # gx[n]-gxでベクトル化
    temp[temp <= r^2] %>% length - 1
}

> system.time(res2 <- mapply(countR2, n = 1:n))
   user  system elapsed
  0.170   0.012   0.181

> str(res2)
 num [1:2000] 65 37 43 65 57 59 58 52 52 65 ...
```
短く書けたし、40倍くらい速くなりました。
SuperDirtの音声出力を変更して、演奏内容を録音する


とりあえずメモ程度。

1. OSXをつかっていてSoundflowerが導入されていることが前提(それ以外でも同じようなソフトなら同じ方法が使える気はします)。

2. SuperColliderでSuperDirtを起動する前にServerOptionで下記のように指定して実行すると出力が設定されます。

	```
	ServerOptions.new.outDevice = "Soundflower (2ch)";

	```

3. OSXの環境設定から入力を Soundflower (2ch) にしてTidalcyclesでなにか音を鳴らせば入力が確認できます。
4. QuickTime Playerを起動して、ファイルから新規のオーディオ録音を開く。
5. OSXの環境設定から出力を出力したいデバイスにする。
6. QuickTime Playerで作成したオーディオ録音の出力を上げる。

これで録音をしながら出力が出来るはずです。
ServerOptionの出力先をオーディオインターフェースにすれば、DAWにそのままつっこむこともできるんじゃないかな(まだやってない)。
NFSサーバが落ちているときの umount

NFS マウントしているとき、NFS サーバが落ちてしまうと通常の umount ではコマンドが返ってこない。
そのようなときは、「-l」オプション（lazy umount）を付けるとよい。古い Linux のときは「-f」で強制 umount。
Cognos でシングルサインオン(SSO)を実装する際のModify Headers使用の勧め

Cognosでシングルサインオンを実装する際に、簡易テストで良く使う便利なTipsです。

##Cognosのシングルサインオン
Cognosでのシングルサインオン（SSO）には、大きく分けて2種類あります。
・Windows統合認証やKerberos認証と言われるもので、Active DirectoryのドメインにCognosノードもクライアントPCも所属している場合に、PCにログインしたIDとパスワードでそのままCognosにも認証なしで入れる方式です。
・統合認証S/W(Tivoli Access ManagerやIcewallなど）の認証画面で認証を行い、そこからCognosにリダイレクトされアクセスする際には、再度のID・パスワードの入力なしでログインできる方式です。

今回のTipsは後者の統合認証S/Wとの連携の場合です。

##内容
統合認証S/WとCognosは基本的に、HTTP Headerの変数に仕込まれたユーザーIDを連携して行います。

今回は、統合認証S/Wで認証時に、HTTP HeaderのREMOTE_USER変数にユーザーID(cogadmin)が仕込まれる想定です。

Cognos側はこのように、Cognos Configurationの認証ネームスペースの外部IDマッピングの中で、REMOTE_USER変数を指定しています。※TAMであればiv-userなど、変更が可能です。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/93bfc84e-d08e-9b0f-c94b-ed47facd6b6b.png)

大概どのプロジェクトでも、統合認証S/W担当とCognos担当は別なので、Cognos側のセットアップ完了後、統合認証担当に実装をお願いしますが、その前に、Cognos側だけででもう少しSSOの確認ができます。

それがFirefoxブラウザのModify Headersです。
アドオンとしてFirefoxに追加して、有効化して下さい。
アドオンを追加すると、ツールバーに赤枠の様な顔型のアイコンが追加されます。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/b4ea8d6d-2b5d-c7c0-3089-ab9e63e23734.png)

何もしない状態で普通にCognosにアクセスすると、以下のようにユーザーID・パスワードが求められます。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/99dbfd58-47d9-75d9-1730-efd441d5b970.png)

Modify Headersはつまり、先にご説明した統合認証S/Wが仕込んでくるHTTP HeaderのREMOTE_USER変数をブラウザで偽装するアドオンです。
アイコンから、Open ModifyHeadersを選択します。
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/15dd1a5f-00c1-367f-b16f-7b466a1a9c83.png)

Select actionから「Add」を選択します。
![005.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f143bc14-d012-91d9-c52d-73adfaafd239.png)

変数：REMOTE_USERと、ユーザーID：cogadmin、を記載し、Addを選択します。
![006.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f6c585ea-008d-0727-8136-7595e50e8c92.png)

以下のようにエントリーが追加されますので、ステータスが緑信号になっている事を確認し、OKを選択します。
赤の場合、Enable/Disableボタンでステータス変更できます。
![007.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/703943e6-1876-7e4a-25a5-50220196be2a.png)

アイコンから、Startを選択します。
![008.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/806a589a-96c1-6b31-0d85-148fbc3af259.png)

アイコンが赤く表示されます。
![009.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/be913a5c-c561-f07d-e151-26e9015e0698.png)

あとは普通にURLを入力し、Cognosにアクセスします。
![010.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/fd963c82-92c7-d57e-dde7-d5a9e4e20649.png)

この様に、ログイン画面が表示される事なく、いきなりポータルが表示されればOKです。
![011.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/16440b6f-43d3-bb18-0e86-a92f6a2e7ebf.png)

統合認証の担当に、「Cognos側のセットアップはできた」と言う前に、ここまで確認しておけると少し安心して「できた」と言えると思いますので、是非活用して頂ければと思います。
scpでホスト名を必須にする

誰もが一度は、scpで次のようなミスをしたことがあるかと思います。

![1.gif](https://qiita-image-store.s3.amazonaws.com/0/102667/a74af854-2a11-b91e-bac4-55cfc4b535ec.gif)

リモートホストにscpしようとしたが、 `:` を付け忘れて、ホスト名のファイルがローカルに出来上がってしまいました。このミスを防ぐために、`.bashrc` や `.zshrc` に、次のような関数を定義します。

```sh
scp() {
  (
    while test $# != 0; do
      case "$1" in
        -c|-F|-i|-l|-o|-P|-S) shift  ;;
        *:*)                  exit 0 ;;
      esac
      shift;
    done
    exit 1;
  )
  if [ $? = 0 ]; then
    command scp "$@"
  else
    echo >&2 "scp: No host name"
  fi
}
```

`scp` シェル関数を定義して、関数側で引数にホスト名 `%s:%s` が含まれるかチェックします。ホスト名が引数に含まれるなら `scp` コマンドを呼び出し、含まれないならエラーを表示します。これでうっかりローカル同士のコピーをしてしまうストレスを回避できます。

![2.gif](https://qiita-image-store.s3.amazonaws.com/0/102667/a62cf87f-278b-6b04-4a74-c2d2da7bfa06.gif)
すべてがWebKitになる

## Q. 以下のHTMLをFirefox 50で表示した場合、赤い図形はどのような形になるだろうか？
```html
<style>
  #target {
    background-color: red;
    height: 200px;
    width: 200px;
    border-radius: 0; /* 正方形 */
    -webkit-border-radius: 100px; /* 円形 */
    -moz-border-radius: 20px; /* 角丸四角 */
  }
</style>
<div id="target"></div>
```

順当に考えれば「正方形」か「角丸四角」に絞り込まれるはずだ。
詳しい人であれば、ベンダープレフィックスの廃止を問う問題だと考えるかもしれない。

「border-radius」は主要なブラウザにおいてベンダープレフィックス無しで実装されており、
「-moz-border-radius」は2012年にリリースされたFirefox 13から廃止されている。
https://developer.mozilla.org/ja/docs/Web/CSS/border-radius#Gecko_notes
よって、解答は「正方形」になる……と思いたい。

<br><br><br><br><br><br><br>

さて、実際に表示した結果が、以下のスクリーンショットである。

![firefox.png](https://qiita-image-store.s3.amazonaws.com/0/83758/4ebd8141-e14b-7ad7-ea4b-32d47130cb16.png)





「円形」だ。「円形」なのだ。

今となっては希少な、UserAgentにWebKitが含まれないブラウザであるFirefoxは、よりにもよって「-webkit-border-radius」を解釈するのである。


種を明かすと、about:configにて「layout.css.prefixes.webkit」がtrueだと、webkitプレフィックスの付いた一部のプロパティを解釈する。
これはFirefox49からデフォルト有効化された機能で、リリースノートにも「既存のコンテンツとの互換性を高めるため」として記載されている。
https://developer.mozilla.org/ja/Firefox/Releases/49#Compatibility

<br>

----

<br>

さて、これで終わりあればよかったのだが、本項のタイトルは「すべてがWebKitになる」である。

OperaがWebKitの軍門に下った今、WebKitに属さない勢力といえば、Firefox以外にMicrosoftが挙げられる。
では、Microsoft Edgeで同じHTMLを表示した場合、どうなるだろうか。

<br><br><br>

実際に表示した結果が、以下のスクリーンショットである。

![edge.png](https://qiita-image-store.s3.amazonaws.com/0/83758/70a9da2c-7a53-aecc-4365-841e75e270ec.png)


「円形」だ。「円形」なのだ。

[UserAgentでMozillaを名乗り、WebKitを名乗り、Chromeを名乗り、Safariを名乗るブラウザMicrosoft Edge](http://qiita.com/tonkotsuboy_com/items/7b36bdfc3a9a0970d23b)は、当然のように「-webkit-border-radius」を解釈するのである。

WebKitを名乗ってはいるが、Edgeは独自のレンダリングエンジンを採用している。
webkitプレフィックスの解釈は「互換性を高めるために」意図的に実装されているのである。
https://msdn.microsoft.com/ja-jp/library/mt270097

----

Webの標準化は果たして何処へと向かっているのだろうか。
無料で公衆WiFiを使うOpenVPNの設定

公衆無線LANは53/UDPを開けてることがおおく、これを抜けて自前のOpenVPNに接続することでタダノリできる。

# openvpnの設定を変える場合
```
port 53
proto udp
```

以上。

# ポートフォワードをする場合
同じサーバーでDNSキャッシュサーバーとかを動かしている場合は、53はダブって使えない。その場合はポートフォワードで解決。

OpenVPNの設定は以下を仮定。
```
port 1194
proto udp
```


## iptables
iptables -t nat -A PREROUTING -p udp -i ens3 -d 45.32.21.100 --dport 53 -j REDIRECT --to-port 443


## 永続化
iptablesは一時的なものなのでファイルに書き込んでおく。ここではufwを使っていると仮定する。
/etc/ufw/before.rules ならば、natテーブルにPREROUTINGチェインで53→1194に転送。

```
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
#-A POSTROUTING -s 10.8.0.0/24 -o tun0 -j MASQUERADE # 他のVPNにつないでるtunとか

# 53 -> 443
-A PREROUTING -p udp -i ens3 -d 45.32.21.100 --dport 53 -j REDIRECT --to-port 1194
COMMIT
```
sls deploy 時の--profile

sls deploy 時は、aws configを見てくれない問題

とりあえずならこう

```
$ AWS_PROFILE={profile} sls {deploy/remove} -s {stage}
```

ymlで対応したいなら

```
custom:
  defaultProfile: default
  defaultStage: test

provider:
  name: aws
  runtime: nodejs4.3
  profile: ${opt:profile, self:custom.defaultProfile}
  stage: ${opt:stage, self:custom.defaultStage}
  region: ap-northeast-1
  # deploymentBucketは、事前にS3バケットを作成しておく必要があります。
  deploymentBucket: ${self:service}-deployment
```

らしいけど、こんなエラーが出る
同じ様に設定ファイルを書いているのに上手くいくプロジェクトとこのエラーになるプロジェクトがある
どこかに記憶されてしまうのか？わからんので、前述のが明確なのかなぁ

```
  Error --------------------------------------------------
 
     ServerlessError: ServerlessError: '/20170118/us-east-1/cloudformation/aws4_request'
     not a valid key=value pair (missing equal-sign) in Authorization
     header: 'AWS4-HMAC-SHA256 Credential= /20170118/us-east-1/cloudformation/aws4_request,
     SignedHeaders=host;x-amz-content-sha256;x-amz-date,
     Signature=799833078703b49fb86f9131f025574d1deda0d5181b61f80975e79bf0585016'.
 
     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.
 
  Stack Trace --------------------------------------------
 
Error: ServerlessError: ServerlessError: '/20170118/us-east-1/cloudformation/aws4_request' not a valid key=value pair (missing equal-sign) in Authorization header: 'AWS4-HMAC-SHA256 Credential= /20170118/us-east-1/cloudformation/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=799833078703b49fb86f9131f025574d1deda0d5181b61f80975e79bf0585016'.
```

追記

問題は２点あることがわかった

1. aws credentialが参照できていない→AWS_PROFILEなどで解決
2. The specified bucket does not exist

2の問題は、
①deploymentBucketが全世界でユニークにならなければならないこと
②${self:service}-deploymentをS3に用意しておかないといけないこと
命名規約：Bucket name contains invalid characters, [a-z.0-9-]

```
  # deploymentBucketは、事前にS3バケットを作成しておく必要があります。
  deploymentBucket: ${self:service}-deployment
```

ではユニークにならない状況だったので

```
  # deploymentBucketは、事前にS3バケットを作成しておく必要があります。
  deploymentBucket: ${self:service}.${self:provider.stage}.deployment
```

こうする
jQueryで自分以外の兄弟要素を取得する方法

## ことの背景
とある構築で、クリックされた要素以外の要素を取得する必要があり、かなり使いやすい実装があったのでメモ代わりにここに記す。

まずはHTMLファイルから

```index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>jqueryで自分以外の兄弟要素を取得する</title>
    <style>
        .red {
            background: red;
        }

        .blue {
            background: blue;
        }

        .Brother
        {
            display: flex;
        }

        .child1,
        .child2,
        .child3,
        .child4
        {
            display: block;
            width: 200px;
            height: 200px;
            line-height: 200px;
            text-align: center;
            border: 1px solid #ccc;
            margin: 10px;
        }
    </style>
</head>
<body>
<div class="Wrapper">
    <div class="Container">
        <div class="Contents">
            <ul class="Brother">
                <li class="child1">Child1</li>
                <li class="child2">Child2</li>
                <li class="child3">Child3</li>
                <li class="child4">Child4</li>
            </ul>
        </div>
    </div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="app.js"></script>
</body>
</html>
```

注目ポイントは以下の箇所。

```html
<ul class="Brother">
                <li class="child1">Child1</li>
                <li class="child2">Child2</li>
                <li class="child3">Child3</li>
                <li class="child4">Child4</li>
            </ul>
```

このBrotherを親に持つliのどれかの要素がクリックされた際に、自分以外の要素を取得する。
child1クラスをもつ`<li>`をクリックしたら、child2,child3,child4クラスの`<li>`を取得してくる。
その処理は以下。

```app.js
$(function () {

    $('li').on('click', function () {
        $(this).siblings().css('background','red');
    });
});
```

注目は`<$(this).siblings().css('background','red');`>の記述。
siblings()関数は、各要素の兄弟要素を全て返してくれるので、クリックした要素の兄弟要素を返してくれた。

## 参考
[siblings(expr) - jQuery 日本語リファレンス](http://semooh.jp/jquery/api/traversing/siblings/expr/)
GeoPDFからデータを抜き出す

GeoPDFは、地理情報を交換するためのPDF拡張である。
主にアメリカの一般向け官製地図に使用されていて、以下のサイトからダウンロードできる。

https://viewer.nationalmap.gov/basic/?basemap=b1&category=ustopo&title=US%20Topo%20Download

この形式は、一般的なPDFビューアーで表示できるように、基本的な部分はPDFである。
従って、情報を抜き取る際には、PDFの仕様を元に、座標情報を取得し、拡張部分に記載されている投影法や変換パラメータを使って実際の座標に変換すれば良い。

PDFの仕様については、以下を
http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf

また、GeoPDF特有の投影法や測地系などの内容については、Open Geospatial Consortiumの以下を。
http://portal.opengeospatial.org/files/?artifact_id=33332

その情報がどういった地物なのかは、レイヤー情報として入っているので、どのレイヤーかによって一応の判別ができる。

ところが同じレイヤーに含まれていても、異なった表現がされている情報が多々ある。
![no1.png](https://qiita-image-store.s3.amazonaws.com/0/159700/4ca9bf0a-71cc-bc2d-6c53-199bc90e750b.png)

Structures部分を例にとると、郵便局、警察、病院等が実際には区別されている。
点情報については選択可能なので、Acrobatの編集機能で確認すると、ESRI Default Markerという謎のフォントを使った文字列が設定されている。

![no2.png](https://qiita-image-store.s3.amazonaws.com/0/159700/f1a1ed89-bafe-ea2f-d746-f131ab90ecf1.png)


どうやら、点情報については、文字列に対して特殊なフォントを指定して表示させているようだ。
ちなみに消防署(F)や病院(H)は通常のフォントを使っている。

ここまで分かれば、後は文字列と記号のマッピングだけである。

| 内容 |文字コード |
|:-:|:-:|
| 墓地  | 0x232122  |
| 郵便局  | 0x253f253f4f50  |
| 警察  | 0x5c5e  |
| 学校  | 0x253f6e  |
| 消防署  | 0x46  |
| 病院  | 0x48  |

さてこれで終了。

と、一筋縄で行かないのがアメリカ。
多分と思って別のファイルで検証すると、同じ地物に違った文字列を当てている。

| 内容 |文字コード |
|:-:|:-:|
| 墓地  | 0x2122  |
| 郵便局  | 0x26504f  |
| 警察  | 0x5e  |
| 学校  | 0x253f3f356e, 0x253f3f353f3f405454, 0x253f3f353f40054, 0x253f3f356e  |
| 消防署  | 0x0046  |
| 病院  | 0x0048  |

しかも文字列の途中に'\0'が入っていたりとかなり曲者。

という訳で、今後もどんなものが出てくるか分からないので、理解不能な文字列をトラップできるようにしておかなければならない。
Python > multiline stringsの内容表示の違い > print / automatic echoing done by the interactive interpreter

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6
```

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 802 / 12833)


`"""`や`'''`を使ったmultiline stringsの場合の内容表示について、以下の違いが記載されている。

1. print()
2. automatic echoing done by the interactive interpreter:

適当な文章で試してみた。

```
>>> poem='''She sells seashells at the seashore.
...         Mirror mirror on the wall who is the fairest of them all?
...         A lie is a lie is a lie, no matter how white, how small,
...         how incorporating of a smidgen of truth there be in it.'''
```

```
>>> print(poem)
She sells seashells at the seashore.
        Mirror mirror on the wall who is the fairest of them all?
        A lie is a lie is a lie, no matter how white, how small,
        how incorporating of a smidgen of truth there be in it.
```

```
>>> poem
'She sells seashells at the seashore.\n        Mirror mirror on the wall who is the fairest of them all?\n        A lie is a lie is a lie, no matter how white, how small,\n        how incorporating of a smidgen of truth there be in it.'
````

automatic echoing時は内容の前後に"'(シングルクォーテーション)"が付き、改行記号も`\n`として表示される。
色彩検定1級 勉強方法

## 色彩検定とは
- 文部科学省後援の検定試験で、「理論に裏付けられた色彩の実践的活用能力」を身につけることのできる資格です(参考：https://www.aft.or.jp)
- 1級～3級まであり、夏期と冬期に検定試験があります
    - 但し、1級に関しては冬期のみになります

## 色彩検定1級について
- 2級、3級は知識ベースの出題ですが、1級からは二次試験で実技の能力も問われます
- 合格率もがくりと下がり、色に関するより詳細な知識と色を認識する力を求められます

## 一次試験対策
- 出題形式
    - 大問が15ほどあり、最後の1つだけ記述、他はマークシート
- 勉強方法
    - 公式テキストを繰り返し読む（HP：https://www.aft-kikaku.co.jp/doc/lineup.html ）
    - 知識量が膨大なので、何回も読んで、単語⇒意味、説明⇒単語が一致するように訓練する
    - 1次試験は基本的に公式テキストを丸暗記しておけば合格できるような出題内容になっている

## 二次試験対策
- 出題形式
    - 大問が4つほど
    - マークシートではなく、基本的に記述
    - 適切なカラーカードを所定のサイズに切り貼りする問題の出題
- 勉強方法
    - 用語や数値はひたすら紙に書いて覚える
    - いつも目のつくところに色相環やトーンの絵を印刷したものを貼っておく
    - 配色をまとめた本を一冊は持っておき、配色の感覚を養う
    - 色を測定してくれるスマホアプリで日常にある色をかたっぱしから数値化して、物と紐づけて、色を覚える
        - おすすめ！「色彩ヘルパー」というアプリ

- 暗記項目
    - マンセル表色系 色番号と色の組み合わせ覚える
    - PCCS表色系
        - 色番号と色の組み合わせ覚える
        - 明度と彩度のスケールを覚える
    - トーン
        - トーン名を覚える
        - トーンをイメージする形容詞を覚える
    - 配色名を覚える
    - マンセルとPCCSの対応を覚える
    - 配色を表す用語を覚える
        - 同一、隣接、ルイジ、中差、対照、補色
    - 一般的な色の分類を覚える
        - 暖色、寒色
        - 中性色
        - 色料3原色
        - 色光3原色
        - 心理4原色
- 訓練項目
    - 慣用色名をできるだけ多く覚える
    - 色を見分けられるようにする
ApplicationControllerとかのテストはRspecのAnonymousControllerが便利

認証機能をApplicationControllerとかBaseControllerに実装したあと,いざテストを書こうとしてもそもそもApplicationControllerとかリクエストを受けるためのメソッドないしどうしようってなったので共有します.

# そんなときはRspecのAnonymousController
https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs/anonymous-controller

```ruby:base_controller_spec.rb
require 'rails_helper'

RSpec.describe BaseController, type: :controller do
  controller(BaseController) do
    def index
      render nothing: true
    end
  end

  describe '#some_method' do
    it 'should return 200' do
      get :index
      expect(response.status).to eq(200)
    end
  end
end

```

controller ブロックに適当なメソッドを定義するだけでそこに対してリクエストが送れるようになる. すごい. ちなみにcontrollerの引数を省略するとdescribeされているcontrollerになるらしいです.
Node.jsで捕捉されなかったPromise内の例外をスタックトレースで表示する

現在のNode.js(9.x)においてデフォルトでは、Promise内の捕捉されなかった例外については次のように警告を出してくれますが詳細なスタックトレースは見せてくれません。

```
(node:5212) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): TypeError: Cannot read property '_id' of null
(node:5212) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
```

どこかしらに次のハンドラを書くことで...

```javascript
process.on('unhandledRejection', console.dir);
```

詳細な情報が見れます:

```
TypeError: Cannot read property '_id' of null
    at _callee2$ (C:/Users/syuilo/Desktop/misskey/built/api/serializers/post.js:98:34)
    at tryCatch (C:\Users\syuilo\Desktop\misskey\node_modules\regenerator-runtime\runtime.js:64:40)
    at Generator.invoke [as _invoke] (C:\Users\syuilo\Desktop\misskey\node_modules\regenerator-runtime\runtime.js:355:22)
    at fulfilled (C:/Users/syuilo/Desktop/misskey/built/api/serializers/post.js:7:32)
    at process._tickCallback (internal/process/next_tick.js:103:7)
```

---

もしくは、[loud-rejection](https://github.com/sindresorhus/loud-rejection)ライブラリを利用するのも良い手だと思います。
コマンドだけでAmazon Dash ButtonのMACアドレスを調べる

# Amazon Dash ButtonのMACアドレスを調べる

次のコマンドでDash Buttonから送信されるDHCPのメッセージをキャプチャして、Dash ButtonのMACアドレスを調べます。

```shell-session
$ sudo tcpdump port bootps
```

こちらの環境では、以下の様な結果になりました。
<img width="1271" alt="Screen_Shot_2017-01-19_at_7_30_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/123970/d5a6a4f9-4b99-2887-eb92-997d8237069f.png">
Dash Buttonを押して３秒くらい経つと、Dash Buttonが送ったパケットがキャプチャされます。
こちらが持っているDash Buttonは　一番最初にキャプチャされた68:54:dfから始まるMACアドレスでした。

たくさん表示されて、どれがDash Buttonかわからない人は、MACアドレスの[ベンダー](https://mac.uic.jp/)を調べると良いかもしれません。
実際に68:54:fdは「Amazon Technologies Inc.」で登録されています。
技術英語 > Division is a little more interesting, because it [comes in two flavors]:

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 602 / 12833)

Division is a little more interesting, because it <font color=red>comes in two flavors</font>:

- `/` carries out floating-point (decimal) division
- `//` performs integer (truncating) division

http://ejje.weblio.jp/sentence/content/flavors
> 2つの種類がある - 研究社 英和コンピューター用語辞典
スマホゲーム開発者のための公式情報Feedについて

例えばiOSのATS対応やAndroidのサポート対応、ゲームエンジンの次回バージョンの情報など
公式情報のみを取得したい場合どうすればよいかということになったのでメモ。
一旦クライアントのみ。他にもあるかもしれない。

# OS

#### Apple Developer News and Updates
Site: https://developer.apple.com/news/
Feed: feed://developer.apple.com/news/rss/news.rss

* appleの他サービスのrss一覧もある→http://www.apple.com/jp/rss/

#### Android Developer Blog
Site: http://android-developers.blogspot.com/
Feed: http://android-developers.blogspot.com/atom.xml

* https://developer.android.com/ の"Get news & tip"も登録しておくと良さげ

# GameEngine

#### Unity Devloper Blog (jp)
Site: https://blogs.unity3d.com/jp/
Feed: https://blogs.unity3d.com/jp/feed/

* Unityに関する機能紹介や各種サービスなど幅広い情報の取得に
* UnityはFeed周りが充実しているので下に続く

#### Unity Roadmap
Site: https://unity3d.com/jp/unity/roadmap/
Feed: https://unity3d.com/jp/unity/roadmap.rss

* 次回バージョンやその次のバージョンの更新時期や機能などが分かる

#### Unity Beta
Site: https://unity3d.com/jp/unity/beta
Feed: https://unity3d.com/jp/unity/beta/latest.xml

 * ベータ版がバージョンアップされたときに更新される

#### Cocos2d-x Developer Blog (announcement)
Site: http://blog.cocos2d-x.org/category/announcement
Feed: http://blog.cocos2d-x.org/category/announcement/feed/

 * 事例紹介などが多いため、announcementカテゴリで更新情報のみ取得可能にするのがおすすめ
 * 現在日本の公式サイトはNOT FOUNDになっている→http://jp.cocos2d-x.org/

#### Unreal Engine (jp)
Site: https://www.unrealengine.com/ja/news/
Feed: https://www.unrealengine.com/ja/rss

* ロードマップはtrelloで管理している → [Unreal Engine/ロードマップ](https://trello.com/b/gHooNW9I/ue4-roadmap)
Raspberry Pi 3 + Cirrus Logic Audio Card + RuneAudio でハマったのでメモ。

会社でみんなで音楽流せる仕組みを作りたい＋天井につけたくて、ラズパイ＋RuneAudio の仕組みを作りました。
ハマったのでやり方を書いておきます。

![C2dERVFUQAITEwR.jpg](https://qiita-image-store.s3.amazonaws.com/0/59912/ad2cbb4d-2263-b4f1-ef15-7cd44e758fb4.jpeg)


#もの
・Raspebrry Pi 3 

・Cirrus Logic Audio Card
DAC。千石で売っていました。探して少なかったので、店頭で買いたい場合 DAC 選択肢少なそうな印象。
https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4UN8

・RuneAudio
ブラウザから操作できる。ラズパイがネットワークオーディオ環境になる。
http://www.runeaudio.com/

#やりかた
一番役に立ったのがこれ。
http://www.runeaudio.com/forum/raspberry-pi2-3-with-cirrus-logic-audio-card-t3837.html

###１、オフィシャルの runeaudio の img を起動。（やり方は省略）

ここでは Cirrus を抜いてからやる、と言ってるが効果は不明。僕もそうした。

###２、必要なら RuneAudio のページから wifi をつないでおく

僕はやらなかった

###３、Cirrus をサポートした ArchLinux のカーネルに差し替える。やり方はこちら http://headless.audio/。

ここで、「Enable and configure Cirrus Logic/Wolfson card in /boot/options.txt file.」とあるけど「/boot/options.txt」ではなく、「/boot/configs.txt」に書くことに注意！
つまり、「dtoverlay=rpi-cirrus-wm5102」と「/boot/options.txt」に追記

###４、シャットダウンして、Cirrus を刺して起動
###５、ブラウザから MPD 設定に行くと、Cirrus が認識されてる

#ハマりどころ
Cirrus Logic Audio Card は認識してもらうためにカーネルを差し換えないといけなくて、主にその周辺です。
最初は volumio でやりたかったんだけど、
http://www.horus.com/~hias/cirrus-driver.html
これとかでカーネルを書き換えるとブートしなくなる。panic になる。
あとは、上の手順の、/boot/config.txt ではなく /boot/options.txt にすること！

#感想
便利だしいい感じなので、おすすめ！
音質いい！！！
js FizzBuzz

##お題
FizzBuzz
・1からn(引数)までの数字を含む配列を返す
・3の倍数の場合、数字の代わりに"Fizz"を返す
・5の倍数の場合、数字の代わりに"Buzz"を返す
・3と5の倍数の場合、数字の代わりに"FizzBuzz"を返す
・n>0とする

```js
function fizzbuzz(n){
//write your code.
}
```


##出力結果　例
1~30

```js
1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz", 11, "Fizz", 13, 14, "FizzBuzz", 16, 17, "Fizz", 19, "Buzz", "Fizz", 22, 23, "Fizz", "Buzz", 26, "Fizz", 28, 29, "FizzBuzz"
```

##つかったもの
while文
if文
push()

##考え方
・while文でnまで処理を繰り返す
・`%`を使って3と5で割り切れるか判定する
・割り切れた数字は変数にいれる
・if文で用意した配列に`Fizz`　`Buzz`　数字を入れる条件を設定する。
・配列を返しておわり


```js
function fizzbuzz(n)
{
  var i = 1, arr = [];
  while(i <= n) {
    var fizz = (i % 3 === 0);
    var buzz = (i % 5 === 0);
    if(fizz || buzz) {
      arr.push((fizz?"Fizz":"") + (buzz?"Buzz":""));
    }
    else {
      arr.push(i);
    }
    i++;
  }
  return arr;
}
```

##ES6

```js

const fizzbuzz = () => {
    const fizz = 'fizz';
    const buzz = 'buzz';
    for (let i = 1; i < 100; i++) {
        if(i % 3 === 0 && i % 5 === 0){
            console.log(fizz + buzz);
        }else if(i % 5 === 0){
            console.log(fizz);
        }else if(i % 3 === 0){
            console.log(buzz);
        }else{
            console.log(i);
        }
    }
}

fizzbuzz();
```


##その他のコード

```js
function fizzbuzz(n){
  return Array.apply(null, new Array(n)).map(function(e, i){
    return (++i % 3 ? '' : 'Fizz' ) + (i % 5 ? '' : 'Buzz') || i;
  }); 
}

fizzbuzz(12);//[1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz", 11, "Fizz"]
```

###他にもコードが浮かんだ方、コメントお待ちしております。
MicrosoftのContent Moderator APIを試す

# MicrosoftのContent Moderator APIとは
MicrosoftのContent Moderator APIは、画像に対して、a(アダルト), r(きわどい)をタギングするサービス。
完全アウトか、ギリギリか、ということでしょうか？
不適切な画像を判定することができます。

# 試し方
以下のサイトから、MSアカウントでSign upできます。
https://contentmoderator.cognitive.microsoft.com

Try から ファイルを最大5つまでアップロードできます。

Review > Image から認識結果を見ることができます。

![image](https://qiita-image-store.s3.amazonaws.com/0/21799/583305c9-fc6b-284f-d180-f9b136c45364.png)

メバルが a, rがついてしまいましたが、水着の女性は r で正解な気がします。

a, rを押すと、有効、無効を切り替えることができ、誤判定を訂正することができます。
これによってサービスによってアウトなのかどうなのかチューニングできるのかな?

http://qiita.com/kosfuji/items/621cbedfad0eb68b2f5d
Computer Vision APIでも adult や　racy が返ってくる。
こちらは微調整できないということかな？
AngularJS Full-stack generator開発環境でGulpするまで

*Windows版*
gulp serveでブラウザ表示ができるまでやります。

1. Gitを導入 
http://qiita.com/miyachin/private/4108888cc665cce9c58b

3. 好きなところでリポジトリ作成。 リポジトリのpathに日本語が含まれている人はどこかで苦労する。

4. Node 6.9.1をインストール 
https://nodejs.org/en/blog/release/v6.9.1/

5. MongoDB 3.2をインストール 
https://www.mongodb.com/download-center#community

6. mongoの環境変数を追加。 
http://qiita.com/SHOSI/items/c0774c0de4419230c5e9

7. Visual C++ Build Toolsをインストール。node-gypを怒らせないため。 
http://go.microsoft.com/fwlink/?LinkId=691126

8. python 2.7をインストール。node-gypを怒らせないため。 
https://www.python.org/downloads/

9. 下記参照。5-6のインストール先を教えてあげ、npm install とnpm install -gを実行。 
http://qiita.com/AkihiroTakamura/items/25ba516f8ec624e66ee7


11. gulpを実行。失敗したら、npm buildとかnode-gyp rebuidとかnpm chache cleanとかしてみてください。


以上、足りないところがあったら報告お願いします。
Fabric でタスク実行前後にタスクの内容を通知する

Fabric 使っていて、自分の用途が結構タスク量多かったので、タスク実行前と完了時に何のタスクを行うのか、行ったのかを出力してほしいなと思い CustomTask クラス作った。

```report.py
# -*- coding: utf-8 -*-

import logging
import time

from fabric.tasks import Task
from fabric.operations import *
from fabric.colors import *

class ReportStatus(Task):
    """
    タスク実行前後にそのタスクをこれから実行する旨と実行終えた旨を伝える CustomTask クラス

    @task(task_class=ReportStatus, task_name="実行前後表示テスト")
    def something_task():
        print green("タスク実行")
    """
    def __init__(self, func, task_name, *args, **kwargs):
        super(ReportStatus, self).__init__(*args, **kwargs)
        self.func = func
        self.task_name = task_name

        if hasattr(func, '__doc__') and func.__doc__:
            self.__doc__ = func.__doc__
        else:
            self.__doc__ = task_name

        if hasattr(callable, '__module__'):
            self.__module__ = callable.__module__

    def run(self, *args, **kwargs):
        print cyan("[%s] [%s] を実行します" % (self.task_name, self.func.__name__))
        logging.info("[%s][%s] executing" % (self.func.__name__, self.task_name))

        result = self.func(*args, **kwargs)

        print green("[%s] [%s] を完了しました" % (self.task_name, self.func.__name__), bold=True)
        logging.info("[%s][%s] done" % (self.func.__name__, self.task_name))
        print "\n"

        return result

    def __call__(self, *args, **kwargs):
        return self.run(*args, **kwargs)

    def __getattr__(self, k):
        return getattr(self.func, k)

    def __details__(self):
        return get_task_details(self.func)

```

logging 使って log も吐くようにしてるので適宜設定してあげるとログ出力もする

```fabfile.py
# -*- coding: utf-8 -*-

import datetime
import logging
from fabric.colors import *
from fabric.api import *

from report import ReportStatus

log_file_name = "%s.log" % (datetime.datetime.today().strftime("%Y%m%d"))
logging.basicConfig(
    format='[%(asctime)s][%(levelname)s] %(message)s',
    filename=log_file_name, datefmt='%Y/%m/%d %I:%M:%S',
    level=logging.INFO
)

@task(task_class=ReportStatus, task_name="実行前後表示テスト")
def something_task():
    print green("タスク実行")
```

実行するとこんな感じ。

<img width="376" alt="Screen Shot 2017-01-19 at 01.21.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/15768/0825f73d-370e-e2fa-60d2-c77cf2a5fc90.png">

log は指定したフォーマットで出力される

```
[2017/01/19 01:20:18][INFO] [something_task][実行前後表示テスト] executing
[2017/01/19 01:20:18][INFO] [something_task][実行前後表示テスト] done
```
Android Thingsでシリアル通信（UART）する（PL2303HX内蔵USBシリアル変換ケーブルを使用）

# UARTとは？
https://ja.wikipedia.org/wiki/UART

# USBシリアル変換ケーブル
![PL2303HX内蔵USBシリアル変換ケーブル](https://qiita-image-store.s3.amazonaws.com/0/129712/03d0f6e1-9828-2c37-af3b-af440a9f90ee.jpeg)
Amazonなどで購入できます

# 線の意味
| 色 | 意味 |
|:-:|:-:|
| 赤  | 5V PWR  |
| 黒  | GND  |
| 白  | UART0 TX  |
| 緑  | UART0 RX  |

# 配線図
![rpi3_schematics.png](https://qiita-image-store.s3.amazonaws.com/0/129712/d28d91b2-865a-8270-d51f-045c6fd4124b.png)

# Macから接続

```
$ ls /dev/tty.*
```
で接続しているデバイスを確認

```
$ screen /dev/tty.usbserial 115200
```
で接続する（**/dev/tty.usbserial**は上で確認したデバイスを指定）

# 実行結果
上のscreenコマンドを実行するとデフォルトでは以下のように表示され、コンソールに入ることが出来ます。
あとは**adb shell**で接続した場合と同様にコマンドを実行することが出来ます。

```
rpi3:/ $
```

# 切断方法
Control +　a を押してから a だけ離して k を押します。

> Really kill this window [y/n]

というメッセージが表示されるので、yを押すと切断されます。

# シリアルポートの設定変更
Raspberry Pi 3の初期設定では、シリアルポートはコンソールにログインするようになっています。これを無効化し、プログラムから利用できるように設定します。

1. microSDを取り出し、PCにマウントします
2. **RPIBOOT/cmdline.txt** を開き、以下の部分を削除します

> console=serial0,115200

**これを行うことで、プログラムからUARTでシリアル通信を行うことができるようになります**


# サンプルコードの取得
Googleがサンプルコードを提供しているので今回はそれを利用します。

```
git clone https://github.com/androidthings/sample-uartloopback.git
```

# サンプルコードの実行
そのまま実行するとシリアル接続して入力した文字列がそのまま表示されます。

このままだと正しく動作しているのかわかりにくいので、LoopbackActivity.javaの165行目を

> mLoopbackDevice.write(buffer, read);
> mLoopbackDevice.write(buffer, read);

のように2行にしてみます。そうすると、入力した文字が2回表示されている事が確認できます。
【Unity】 Perspectiveカメラからの距離が変化しても見た目の大きさは変わらないオブジェクトを作る

#はじめに
オブジェクトの見た目の大きさは変えずにカメラからの距離だけ変えたい、という状況に出くわしたので考え方の整理もかねて記事にしてみました。

ちなみに、gifアニメーションはProcessingを使って作っています。

# 考え方
##Perspectiveカメラ(透視投影)
近くのものは大きく、遠くのものは小さく見えるように視錐台を使って画面上へ投影する手法
![export.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/52688918-e083-82bd-7573-858494067919.gif)

## カメラから離れても見かけ上の大きさが変化しない立方体
問題を簡単にするため、立方体を使って考えます。
立方体とカメラの距離が1の場合の立方体の1辺の長さを```L```としたとき、
カメラからの距離が```d```の場合の辺の長さを```d * L```にすると画面上の像が同じ大きさになります。(相似)
![export.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/73ab5495-5b76-f4d4-8427-9ac7de5d3609.gif)

以上を踏まえてスクリプトに落とし込んでいきます。

## 見かけ上の大きさを一定にするスクリプト
```NewBehaviourScript.cs
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // カメラからの距離が1のときのスケール値
    Vector3 baseScale;

    void Start()
    {
        // カメラからの距離が1のときのスケール値を算出
        this.baseScale = this.transform.localScale / this.GetDistance();
    }

    void Update()
    {
        this.transform.localScale = this.baseScale * this.GetDistance();
    }

    // カメラからの距離を取得
    float GetDistance()
    {
        return (this.transform.position- Camera.main.transform.position).magnitude;
    }
}
```

## 実行してみる
上記のスクリプトを立方体にアタッチして動かしてみます。
![scale.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/f8c390ff-d024-776d-8f7b-1ce045accd36.gif)

立方体を動かしてもカメラから見た立方体の大きさは変わっていないことが見て取れますね。(完
Raspbian Jessi Lite にCMakeをインストール


# 概要
Raspberry Pi Model 3　を自宅サーバ化すべくMariaDBをインストールする準備として、
CMakeをインストールします。



# 準備
### ソースファイルのダウンロード

ダウンロードしてきたファイルをRaspberryPiに転送
```
scp ~/downloads/cmake-3.7.2.tar pi@rapberrypi:/home/pi/
```

### CMakeインストール
GUIは使う予定が一切ないので除外する。

```
$ tar xf cmake-3.7.2.tar
$ cd cmake-3.7.2
$ ./configure --no-qt-gui
$ make
$ sudo porg -lD make install
```

以上、簡単ですがこれだけです。
PowerShellコンソール上で上下キーで選択可能なその場に現れるメニュー

PowerShell で、上下キーで選択できるメニューを作りたいと思ったので、作りました。

:page_facing_up: [menu.psm1 (Gist)](https://gist.github.com/voidproc/44b199160141f264da192807795f1dfb)

文字列配列を渡して、文字列かインデックスで結果を受け取ることができるだけの、単純なコマンドです。

逐一画面をクリアして描画するのではなく、その場に現れて、選択したら消える感じになってます。…うまく表現できませんが、画像を見ていただいて、伝わるでしょうか。

・動いている様子
![GIF.gif](https://qiita-image-store.s3.amazonaws.com/0/35599/36f3e1be-23fe-d822-29bd-f73f2cf95200.gif)

・ファイル名一覧をパイプで受け取って表示してみる
![1.png](https://qiita-image-store.s3.amazonaws.com/0/35599/98bf741a-a295-5a19-5da9-ccb87784abd4.png)

・メニューの位置、幅を指定
![2.png](https://qiita-image-store.s3.amazonaws.com/0/35599/da691512-4fa3-7164-bf88-58133dc6f3d8.png)

・任意のカーソルを左に表示できる
![3.png](https://qiita-image-store.s3.amazonaws.com/0/35599/9da869da-fe43-fbf6-bc73-8a9fec11a8fc.png)

・日本語が途切れても大丈夫（と思う）
![4.png](https://qiita-image-store.s3.amazonaws.com/0/35599/3fe3c0ea-999e-ef65-b955-82c6723abd88.png)


# 使い方

* `menu` (`Show-Menu`のエイリアス) に対し引数またはパイプで文字列配列を渡します
* 上下キーで選択し、Enter キーで決定すると、結果が文字列で返ります。Esc キーでキャンセルすると、結果は null です

```PowerShell
menu 1,2,3,4,5
```

```PowerShell
"foo","bar","baz" | menu
```

```PowerShell
$selected = "A","B","C","D" | menu  # 結果を変数へ
```

```PowerShell
cd (ls -Directory | %{ $_.Name } | menu)  # 移動先フォルダを選ぶ
```

```PowerShell
notepad (ls -File *.txt | menu)  # メモ帳でテキストファイルをどれか開く
```


<br>

* `-Index` オプションを指定すると、結果は文字列でなく数値（選択した項目のインデックス）になります

```PowerShell
"foo","bar","baz" | menu -Index  # 数値が返る (0～2)
```

<br>

* `-X`、`-Y`、`-W` オプションで、メニューを表示する位置、メニューの幅を指定できます

```PowerShell
ls | menu -X 2 -Y 1 -W 30
```

<br>

* `-Cursor` オプションに指定した文字列を使って、選択項目にカーソルを表示できます

```PowerShell
ls | menu -Cursor " > "
```

<br>

* プロファイル等からグローバルスコープで `$MenuPreference` 変数を以下のように定義しておくと、メニューの色を設定できます

```PowerShell
$MenuPreference = @{
    ForegroundColor = "Gray"               #非選択項目の文字色
    BackgroundColor = "Black"              #非選択項目の背景色
    SelectionForegroundColor = "DarkGray"  #選択項目の文字色
    SelectionBackgroundColor = "White"     #選択項目の背景色
}
```


# 仕組み

* カーソルがウィンドウの下の方にあるとき、メニューが下方にはみ出るかもしれないので、コマンド実行した時点のカーソル位置からメニュー項目分だけ改行してスクロール
* 最初に一度だけメニュー全体を出力
* ↓↓↓ 以降キー入力待ちのループ ↓↓↓
* 選択されている項目を描画する行にカーソルを設定して `Write-Host` で出力 
* 前回選択されていた項目は元の色で上書き
* 選択項目が決定されたらメニューの範囲をウィンドウ背景色でクリアして、カーソルを元の位置に設定


# 参考にした記事

* [PowerShell で peco (インタラクティブ・フィルタリングツール)っぽいものを作った](http://qiita.com/yumura_s/items/a068329769c6338471dd)
* [オセロゲームを作ろう（１）](http://d.hatena.ne.jp/newpops/20080511)
* [PSHostRawUserInterface Class (System.Management.Automation.Host)](https://msdn.microsoft.com/en-us/library/system.management.automation.host.pshostrawuserinterface(v=vs.85).aspx)
* [PowerShellで関数の戻りがおかしい件 - フミオトーサン](http://whome.typepad.jp/blog/2011/01/powershell%E3%81%A7%E9%96%A2%E6%95%B0%E3%81%AE%E6%88%BB%E3%82%8A%E3%81%8C%E3%81%8A%E3%81%8B%E3%81%97%E3%81%84%E4%BB%B6.html)


# 問題点とか気になっている点

* ウィンドウの行数よりも項目数が多いと、上の方にはみ出してしまって見えなくなってしまう（カーソル選択自体は正常にできている）
    * スクロール処理面倒くさそう
* 画面バッファの行数よりも項目数が多いとエラーになってしまう
    * しょうがないかなと思う