OmniAICreator/Qiita-1.07M huggingface dataset:
IEだけgoogleMapが表示されない時にやったこと

###googleMapAPIを使用して開発をした時に困ったことのメモ。

##googleMapの表示要件
-初期表示は、map1個だけ表示
　　![gmap_0001.png](https://qiita-image-store.s3.amazonaws.com/0/115791/a1f60251-4205-1516-10e7-88489b809043.png)
　　![gmap_0002.png](https://qiita-image-store.s3.amazonaws.com/0/115791/80b08fec-49cd-4592-f9a5-4366e382d7ab.png)

-ラジオボタン「集合場所と異なる」選択時（2つめのmap現れる）
　　![gmap_0001.png](https://qiita-image-store.s3.amazonaws.com/0/115791/a1f60251-4205-1516-10e7-88489b809043.png)
　　![gmap_0003.png](https://qiita-image-store.s3.amazonaws.com/0/115791/0581962a-a93c-1ce5-4800-d7212091883a.png)

##実装内容
最初は、画面表示時にmapを2つとも呼び出していました。
（2つめは呼び出した上でdisableにしていた。）

```lang:viewヘッダ
    <script>
        $(document).ready(function(){
            creategooglemap("1");
            creategooglemap("2");
        });
    </script>
```

が、なぜかIEだけ2つめの表示がうまくいかない。。。（グレーになる。）

ググると、IEとgoogleMapの相性が良くないのか？困っている人多数。
ネットで調べていろいろとやってみましたが、解消せず。

-IEの互換表示設定を解除
-ヘッダーに以下記載

```lang:viewヘッダ
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Expires" content="Thu, 01 Dec 1994 16:00:00 GMT">
```
等。。。

試行錯誤の結果、2つめのmapの表示処理を、画面ロード時ではなく、
ラジオボタンを押下時に移動したところ、無事表示できるようになりました！

```lang:viewヘッダ
    <script type="text/javascript">
            function changeDisabled() {
                if ( document.event["radio"][1].checked ) {
                        creategooglemap("2");
                }
            }
    </script>
```

##結論
2つのmap別々の箇所にマーカーがドロップされている状態の場合は、表示できるので、
同じタイミングで2つ開こうとすると、同じものとみなしてしまうようです。
2つめのmapは最初から表示しなくてもいいよ、という場合には試してみてはどうでしょうか？
x64用のdllファイルからインポートライブラリ(.lib)を生成

# 概要

dllをvcのdumpbinを使い関数名を取得
その関数名からdefファイルを作成してvcのlibを使いインポートライブラリ化を行います。

# 使い方

VisualStudio2013が必要です。2012とか2015の方はmakelib.batのVS_BIN辺りを書き換えればいけるはずです。
下のコードをコピペってbatとshファイル作成
makelib.batに対して 第一引数にdllがあるフォルダ、第二引数にlibの出力先を指定して実行すればlibの出力先に指定したパスにlibが生成されます。

```bat:makelib.bat
@echo off

rem ------------------------------------
rem infomation
rem batの説明を記載

rem ------------------------------------
rem setting
rem 各種設定
set CurDir=%~dp0
set VS_BIN=%VS120COMNTOOLS%..\..\VC\bin\
set DUMPBIN_EXE="%VS_BIN%dumpbin.exe"
set LIB_EXE="%VS_BIN%lib.exe"
set MAKEDEF_SH=%CurDir%makedef.sh

set InputDir=%1
set OutputDir=%2

call :CLEAR_SCREEN

echo %InputDir%
echo %OutputDir%

rem ------------------------------------
rem 実装部
:EXEC
for /f "usebackq" %%f in (`dir /b /s %InputDir%\*.dll`) do (
   echo MakeLib [%%f,%%~nf.lib]
  
   rem dumpファイル作成
   %DUMPBIN_EXE% /EXPORTS %%f > %%~nf.txt
   rem dumpファイルからdefファイルを作成
   bash %MAKEDEF_SH% %%~nf.txt
   rem defファイルからlibファイルを生成
   %LIB_EXE% /DEF:%%~nf.def /MACHINE:X64 /out:%OutputDir%\%%~nf.lib
   
   rem 不必要になったゴミの削除
   del %%~nf.txt
   del %%~nf.def
   del %OutputDir%\*.exp
)

rem ------------------------------------
rem 終了処理
:END


:: /B 呼び出し元へ戻る
exit /B

rem ------------------------------------
rem ログ消去
:CLEAR_SCREEN

cls
exit /B

rem ------------------------------------
rem EOF
```

```shell-session:makelib.sh
#! /bin/sh

# -----------------------------------------------------------------------------
# infomation
# 渡されたファイルを元にdefファイルを作成します
#   グローバル変数    :全部大文字
#   ローカル変数      :LCC (hoge,foo,hogeRoot,fooDir)
#   終端/             :Root
#   終端              :Dir
#   関数              :先頭f (fPoo)

# -----------------------------------------------------------------------------
# setting

CurDir=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd)
TempDir=$(mktemp -d)

# -----------------------------------------------------------------------------
# [function] 画面消去
function fClearScreen() {
    # cygwin
    cmd /c cls
    
    # linux
    # clear
}

# -----------------------------------------------------------------------------
# exec
#set -eux
OutputFile=${1%.*}.def
echo EXPORTS > $OutputFile

isExport=0
while read line ; do
    # 比較しやすいようにスペースを取り除いたものを用意する
    t=`echo $line | sed -e "s/\s//g"`
    
    if [ $isExport -eq 1 ] ; then
        if [ "$line" = "Summary" ]; then
            isExport=0
        else
            val=`echo $line | sed -e "s/.*\s\(.*\)$/\1/g"`
            if [ -n "$val" ]; then
                echo " $val" >> $OutputFile
            fi
        fi
    fi
    if [ "$t" = "ordinalhintRVAname" ] ; then
        isExport=1
    fi
done < $1

#set +eux
# -----------------------------------------------------------------------------
# trap
trap "rm -fd $TempDir" 0

# -----------------------------------------------------------------------------
# end

echo "Finished"

# EOF

```
memo:Beatsを試してみる

# やりたいこと
 * Beatsをサクッと試してみたい
 * Logstashはいらない
 * データの永続化も気にしない
 * Topbeatが動けばいい

# 環境
 * Windows7
 * Vagrant＋Docker

# VMの準備
 * Kibanaのポート(`5601`)を`56011`マッピングしておく
 * Dockerがインストールされていなければ入れておく

# メモ

## Topbeatのインストール～Kibanaの起動

```
curl -L -O https://download.elastic.co/beats/topbeat/topbeat-1.2.1-x86_64.rpm
sudo rpm -vi topbeat-1.2.1-x86_64.rpm
sudo service docker start
sudo docker run --name elasticsearch -it -d -p 9200:9200 elasticsearch
sudo /etc/init.d/topbeat start
sudo docker run --name kibana --link elasticsearch:elasticsearch -p 5601:5601 -d kibana
```

## Beats用のダッシュボードを適用する
```
curl -L -O http://download.elastic.co/beats/dashboards/beats-dashboards-1.2.1.zip
unzip beats-dashboards-1.2.1.zip
cd beats-dashboards-1.2.1/
./load.sh
```

## 確認
* ブラウザで`http://localhost:56011`にアクセス
* `index`に`topbeat-*`を指定する

## おわり
一枚のNICに大量のIPアドレスを割り当てる

#ミッション
1000台分の接続テストがしたい。

#シェルスクリプト
```sh:sample.sh
#!/bin/sh

loop=1
for adr3 in $(seq 30 39)
do
  for adr4 in $(seq 0 99)  
  do
    echo $loop $adr3 $adr4
    ifconfig eth0:$loop 172.21.$adr3.$adr4 netmask 255.255.0.0 up
    loop=`expr $loop + 1`
  done
done
```

#確認

```
$ ip address show
：
：
    inet 172.21.30.0/16 brd 172.21.255.255 scope global eth0:1
    inet 172.21.30.1/16 brd 172.21.255.255 scope global secondary eth0:2
    inet 172.21.30.2/16 brd 172.21.255.255 scope global secondary eth0:3
    inet 172.21.30.3/16 brd 172.21.255.255 scope global secondary eth0:4
    inet 172.21.30.4/16 brd 172.21.255.255 scope global secondary eth0:5
    inet 172.21.30.5/16 brd 172.21.255.255 scope global secondary eth0:6
    inet 172.21.30.6/16 brd 172.21.255.255 scope global secondary eth0:7
    inet 172.21.30.7/16 brd 172.21.255.255 scope global secondary eth0:8
    inet 172.21.30.8/16 brd 172.21.255.255 scope global secondary eth0:9
    inet 172.21.30.9/16 brd 172.21.255.255 scope global secondary eth0:10
    inet 172.21.30.10/16 brd 172.21.255.255 scope global secondary eth0:11
    inet 172.21.30.11/16 brd 172.21.255.255 scope global secondary eth0:12
    inet 172.21.30.12/16 brd 172.21.255.255 scope global secondary eth0:13
：
：
```
sphinx_rtd_themeのIEドキュメントモードをEdgeにする

とある環境でIE 11が前提なんだけど、互換表示設定やドキュメントモードが設定されていると、sphinx_rtd_themeの見た目がおかしくなる現象に出会った。

そこで、X-UA-Compatibleを設定して、常にEdgeモードで表示させるためにやったこと。

まず、単にmetaタグを追加するには、簡単にやるならreSTのmetaディレクティブが使える。

```rst
.. meta::
  :http-equiv=X-UA-Compatible: IE=Edge
```

ただ、これだと単ページにしか適用されないので、IEのドキュメントモードを全ページにという用途だと使えない。
そこで、テンプレートカスタマイズの方法を取る。

まず、conf.pyに以下を書いて、

```py
templates_path = ['_templates']
```

_templates/layout.htmlに以下を書く

```
{% extends "!layout.html" %}
{% block htmltitle %}
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    {{ super() }}
{% endblock %}
```

\<head\>の\<title\>を出力しているブロックだけど、ここの前に出さないと他にタイミングが見つからなかったのでここへ。
Hoverすると横回転する３Dのようなボタンの実装（CSS）

##説明
hoverすると下のボタンがぐるっと回転してくれます
![hoverbutton.png](https://qiita-image-store.s3.amazonaws.com/0/111862/eef47f8a-6769-87a9-a215-7459fb457b76.png)

##コード
```html:html
<a class="button rotation_cube_Y" href="#"><span>Hover</span><span>Button</span></a>
```
```css:css3
    *{
        font-size: 18px;
        margin: 0;
        padding: 0;
        font-weight: bold;
    }
    .button {
        display: inline-block;
        width: 200px;
        height: 54px;
        text-align: center;
        text-decoration: none;
        line-height: 54px;
        outline: none;
        animation-name:colorChange;
        position: absolute;
        top:300px;
        left: 40%;
    }
    .button::before,
    .button::after {
        position: absolute;
        z-index: -1;
        display: block;
        content: '';
    }
    .button,
    .button::before,
    .button::after {
        -webkit-box-sizing: border-box;
        -moz-box-sizing: border-box;
        box-sizing: border-box;
        -webkit-transition: all .3s;
        transition: all .3s;
    }
    .rotation_cube_Y {
        position: relative;
        -webkit-perspective: 300px;/*奥行き指定*/
        perspective: 300px;/*奥行き指定*/
    }
    .rotation_cube_Y span {
        display: block;
        position: absolute;
        width: 200px;
        height: 60px;
        border: 2px solid #00f;
        text-align: center;
        line-height: 56px;
        -webkit-box-sizing: border-box;
        -moz-box-sizing: border-box;
        box-sizing: border-box;
        -webkit-transition: all .3s;
        transition: all .3s;
        pointer-events: none;
    }
    .rotation_cube_Y span:nth-child(1) {
        background-color: #00f;
        color: #fff;
        -webkit-transform: rotateY(90deg);
        -moz-transform: rotateY(90deg);
        transform: rotateY(90deg);
        -webkit-transform-origin: 50% 50% -100px;
        -moz-transform-origin: 50% 50% -100px;
        transform-origin: 50% 50% -100px;
    }
    .rotation_cube_Y span:nth-child(2) {
        background-color: #fff;
        color: #00f;
        -webkit-transform: rotateY(0deg);
        -moz-transform: rotateY(0deg);
        transform: rotateY(0deg);
        -webkit-transform-origin: 50% 50% -100px;
        -moz-transform-origin: 50% 50% -100px;
        transform-origin: 50% 50% -100px;
    }
    .rotation_cube_Y:hover span:nth-child(1) {
        -webkit-transform: rotateY(0deg);
        -moz-transform: rotateY(0deg);
        transform: rotateY(0deg);
    }
    .rotation_cube_Y:hover span:nth-child(2) {
        background-color: #00f;
        -webkit-transform: rotateY(-90deg);
        -moz-transform: rotateY(-90deg);
        transform: rotateY(-90deg);
    }
```
kaminariのpage_entries_info はデフォルトだと英語環境でしか使えないので対応

# 概要

Rails上で「全体1000件中100件ずつ、合計10ページに分けて表示する」みたいなページング処理するときの定番gemの[kaminari](https://github.com/amatsuda/kaminari)ですが、英語環境以外だと問題が発生します。

## page_entries_info が使えない

「今3ページ目で、201件目から300件目まで表示している」みたいな表示がしたい時に`<%= page_entries_info @posts %>`のように記述するとできるようですが、言語環境が`en`（英語）以外だと動作しません！！

```ruby:config/application.rb　言語設定の抜粋
    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
    # config.i18n.default_locale = :de
    config.i18n.default_locale = :ja
```

どうしよう・・・。


## 環境（参考までに）

- rails (4.2.6)
- kaminari (0.16.3)


# 解法１：強引にページング処理を実装する（非推奨）

車輪の再発明的な行為です。

```rb:コントローラの改修例
  def index
    @per_page = 50
    @offices = Office.page(params[:page]).per(@per_page)
    @total_records = Office.count
    # 最初のページの場合　params[:page]}　が存在しないので　1ページ目とする。

    params[:page].blank? ? @current_page = 1 :  @current_page  = params[:page].to_i
    if @current_page == 0 then @current_page += 1 end

    @current_start = @per_page * (@current_page - 1 ) + 1
    @current_end   = @current_start + @per_page - 1
  end
```

```erb:ビューに表示項目を追加
<p>
合計 <%= @total_records %> 現在 <%= @current_page %> 頁目で
<%= @current_start %> 件目から　<%= @current_end %> 件目まで表示中
</p>
```

すごく・・・強引です。

# 解法２　ロケールが日本語の場合に読み込む設定を用意する

Ruby on Railsにおいては、特に何も設定しないとロケールが英語`(en)`になります。
日本語以外の言語を使おうとすると、対応する設定を用意します。

[Railsでkaminariを使ってページネーションを実現する](http://ruby-rails.hatenadiary.com/entry/20141113/1415874683)
の記述によると、「最初のページを表示する」などに相当する文言はymlファイルで管理しているようだ。

githubによると・・・確かにそうだ。英語しかない。
[ソースを確認](https://github.com/amatsuda/kaminari/blob/master/config/locales/kaminari.yml)

## ロケールファイルに追記

実際のところは、ロケールファイルに日本語の設定がなかったことが原因。こんな感じのロケールファイルを用意する。

```yams:viewの記述
  views:
    pagination:
      first:    "最初のページ"
      last:     "最後のページ"
      previous: "&lsaquo;"
      next:     "&rsaquo;"
      truncate: "（中略）"
```

```yaml:helperの記述
    page_entries_info:
      one_page:
        display_entries:
          zero: "%{entry_name} が存在しません"
          one:  "%{entry_name}  <b>all %{count}</b>　1ページ目のみ"
          other: "全体で <b> %{count}</b> 件　%{entry_name}"
      more_pages:
        display_entries: " %{entry_name} <b>%{first}&nbsp;-&nbsp;%{last}</b> までを表示中　全体で <b>%{total}</b> 件"
```

上記のような設定を　`configure/ja.yml`などに追記するのですが、
微妙にズレてエラーになることが多いので注意。
Elastic Beanstalk で過去にその環境にデプロイしたバージョンが何だったか調べる

マネージメントコンソールで対象の環境（Environment）を選んで、画面左のログを選んで、「ログのリクエスト」から「最新の100行」を選ぶと、インスタンスログを取得できる。取得したログの中から `/var/log/eb-version-deployment.log` を探すと（一番上にあるかも）、デプロイのログが書かれている。

```
-------------------------------------
/var/log/eb-version-deployment.log
-------------------------------------
...
2016-04-28 03:53:31,074 [INFO] Version manifest file name already known. The latest version manifest file key is resources/environments/e-xxxxxxxx/_runtime/versions/manifest_1461815386988
2016-04-28 03:53:31,146 [INFO] Downloaded the manifest file to /tmp/version_file_manifest
2016-04-28 03:53:32,483 [INFO] Downloaded version label YOUR-APP-VERSION from s3 key <Key: elasticbeanstalk-ap-northeast-1-xxxxxxxxxxxx,resources/environments/e-xxxxxxxxxx/_runtime/_versions/YOUR-APP-NAME/YOUR-APP-VERSION>
...
```

だいたいこんな形で出力されていて、`YOUR-APP-VERSION` がその時デプロイされたバージョン。

このログファイルは、デプロイ1回につき3行しか出力されていないようなので、そうすぐには流れてしまわないと思います。もし流れてしまっていたら、最新の100行ではなく、フルログを取得してみてください。

参考リンク:

 - [インスタンスログ - AWS Elastic Beanstalk](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.logging.html)
GoogleAppScriptでスプレットシートからデータを取得


スプレットシートに
こんなデータがあった時に、
google app scriptでこのデータを取得する方法です。

![member_list.png](https://qiita-image-store.s3.amazonaws.com/0/52774/bba1d60a-0096-12c6-14e9-c15b10aa9941.png)


### 実装

Sheet.urlの部分はスプレットシートのurlを入れてください。

```js

var Sheet    = new Object();
Sheet.url    = 'https://docs.google.com/spreadsheets/d/**spreadsheets_url**'
Sheet.data   = SpreadsheetApp.openByUrl(Sheet.url)

//　memberのシートを取得
Sheet.member = Sheet.data.getSheetByName('member')

//スプレットシートの行数の情報
//自分のスプレットシートに合わせて修正してください。
var member_cell = {}
cell_info = {
  labelRow: 1,
  labelCol: 3,
  startRow: 2,
  startCol: 1,
  lastRow:  Sheet.member.getLastRow(),
  lastCol:  Sheet.member.getLastColumn(),
}

var member_data = Sheet.member.getSheetValues( member_cell.startRow, member_cell.startCol, member_cell.lastRow, member_cell.lastCol);

//debug用      
Browser.msgBox(JSON.stringify(member_data));
```

実行すると、
こんな感じで取得できたことがわかります。
![msgbox.png](https://qiita-image-store.s3.amazonaws.com/0/52774/fa335063-f2d6-de56-8bba-ae8b9db87f36.png)

### 参考
https://developers.google.com/apps-script/guides/sheets#reading_data
HTML,CSS勉強メモ #21' ～`dropdown`が上手く動かない件～

やっと判明しました。

問題はBootstrapのJSが読み込まれていなかったことでした。
コピペしたテンプレートを変更していなかったため、JSを保存してある場所が見つからなかったようです。
ちゃんと指定したところキチンと動きました。
以前に相対パスの話ししてなかったら思いつかなかったかも・・・
Atomになんか引数がない的なこと言われたのもこのせいですね。
以後Errorは出なくなりました。

本当にちょっとしたことでも全然動かなくなっちゃうから、隅々まで注意しないとダメですね。
MAMP ＆ Laravel 5.2環境で「Laravel 5.1 基本のタスクリスト 」をやってみた。

初の投稿です。
--------------------------------------------
先日より、Laravelフレームワークにチャレンジしようと思い
いろいろと勉強をしておりましたが、基本のタスクリストなるものが掲載されたサイトを発見し
実践していたところ見事にハマってしまったので解決方法を覚書しようというしだいでございます。

とりあず自分のPCの環境とかをつらつらと
> OS      : OSX Yosemite 10.10.5
> MAMP    : 3.0.7.3 (3.0.7.3)
> PHP     : 5.6.2
> Laravel : 5.2
> 参考サイト: [Laravel 5.1 基本のタスクリスト](http://readouble.com/laravel/5/1/ja/quickstart.html "Laravel 5.1 基本のタスクリスト")

実際にやってみる
--------------------------------------------
参考サイトを読んでみると完成版のソースが公開されている模様、、
サイトのインストール項を参照してGitリポジトリーをクローンしてきました。
※わたしはMAMPのhtdocs配下に配置してApache経由でアクセス出来るようにしました。

クローンしたら手順通り
「composer install」で足りないlaravelのモジュールをインストール
バージョン確認してみたら5.2が、、まぁ勉強になるカナとそのまま進める。。
> PC:quickstart USER$ pwd
> /Applications/MAMP/htdocs/quickstart
> PC:quickstart USER$ composer install
> 
> PC:quickstart USER$ php artisan --version
> Laravel Framework version 5.2.20

下記コマンドもDBの設定だけやってペペっと
> composer install
> php artisan migrate

mysql使ってます。
最初は多分こんなに簡単にはいかないので調べながらやってください。

で　き　た　！
--------------------------------------------
これだけでチュートリアルできた〜！って気になれますね。

![image](https://qiita-image-store.s3.amazonaws.com/0/123487/648fc6ba-0006-b308-c194-8e102cac15e6.png)
※なんとなくiPhoneのシュミレータでやってますけど特に意味は無いです。

あれ？？
--------------------------------------------
あらら...
デリートボタンを押すとこんなことに（涙）
![image](https://qiita-image-store.s3.amazonaws.com/0/123487/8aab0b40-8198-82d6-243f-4a2a62c359bc.png)

なぜなのか...
サーフィンして調べたけど見つけられなかった...
仕方が無いのでソースを見てみることに。
多分ルーティングとかがおかしいんじゃ無いかなぁと思ってroutes.phpとかをいじってみたけどダメ
初心者の私にはソースを読んだところで解らないということがわかった。

いやいやここで引き下がるわけにはいかない。
--------------------------------------------
何かとっかかりを見つけなければ。
あれ、よく見てみるとアクセスしてるURLがおかしいような気が・・・
![image](https://qiita-image-store.s3.amazonaws.com/0/123487/a36d9e52-430a-076d-31de-54caebdabdef.png)
formタグのアクションが変のかな〜って思って出力されたHTMLソースを見に行ってみる

おお〜これだ〜！見つけました。

- デリートのフォーム

```html
          <!-- Task Delete Button -->
          <td>
           <form action="/task/4" method="POST">
```

- インサートのフォーム

```html
    <!-- New Task Form -->
     <form action="http://localhost/quickstart/public/task" method="POST" class="form-horizontal">
```

デリートのフォーム要素にあるアクション属性がアレですね。
Apacheのドキュメントルート変えれば動くような気がしてなりませんが
~~面倒くさいので~~勉強としてtasks.blade.phpの下記部分を書き換えてみます。

```php:tasks.blade.php
<!-- Task Delete Button -->
<td>
    <form action="/task/{{ $task->id }}" method="POST">
        {{ csrf_field() }}
        {{ method_field('DELETE') }}

        <button type="submit" class="btn btn-danger">
            <i class="fa fa-btn fa-trash"></i>Delete
        </button>
    </form>
</td>
```

これ↑をこう↓

```php:tasks.blade.php
<!-- Task Delete Button -->
<td>
    <form action="{{ url('task')}}/{{ $task->id }}" method="POST">
        {{ csrf_field() }}
        {{ method_field('DELETE') }}

        <button type="submit" class="btn btn-danger">
            <i class="fa fa-btn fa-trash"></i>Delete
        </button>
    </form>
</td>
```
##するとすると
デリート成功！
![image](https://qiita-image-store.s3.amazonaws.com/0/123487/6d1d5078-a79e-8dbb-4b2b-497a7cc3e51a.png)
__無事動くようになりました！！！__
ホントはhttpd.confとかでエイリアスを貼ったほうが良いと思います。
tutorialspoint.comでgitを使う

事実上のonline Linux環境とも言えるサイトが有ります。もちろんC++11も使えます。

http://www.tutorialspoint.com/compile_cpp11_online.php

しかもSIMDも使えるらしい。~~SIMD使えるオンラインコンパイラほかにあったっけ？~~(追記: Wandboxで[AVXまで使えるようになりました](http://qiita.com/yumetodo/items/ef24708900b0535aa28c#%E3%81%BE%E3%81%9A%E3%81%AF%E3%81%A9%E3%82%93%E3%81%AA%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AA%E3%81%AE%E3%81%8B%E8%A6%8B%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86))

[A free online C++ IDE with SIMD capability and more | 舶来ゴミ置き場](http://mavericktse.mooo.com/wordpress/archives/2330)

wgetなんかもできるけど、調子に乗ってffmpegとか落とさないように。


# git cloneできない
で、こいつがなかなかに優秀なのですが

```
git clone https://github.com/YSRKEN/Shioi.git
```

みたいなことをすると

```
fatal: unable to look up current user in the passwd file: no such user 
```

と怒られてしまいます。

かと言って権限的に```git config --global``は使えません。どうするか。

# 解決策

わりと簡単です。globalにconfigできないならlocalにconfigすればいいですね。

```
mkdir Shioi
cd Shioi
git init 
git config user.name "なまえ"
git config user.email "めるあど"
git remote add origin https://github.com/YSRKEN/Shioi.git
git fetch
git merge origin/master
```

やったぜ。
iOS 開発で使いたいライブラリまとめ(2016/04)


定期的に確認していきたい。（前回のはこちら：[iOS 開発で使いたいライブラリまとめ(2016/02)](http://qiita.com/takecian/items/32fc0628c73bcfa594e7)）

# メディア間連

## GPUImage2

動画や画像を扱う人にはメジャーな GPUImage ですが、Swift で書き換えられたようです。
https://github.com/BradLarson/GPUImage2

## EZAudio
 
オーディオの波形表示や再生ができる。もちろん録音も。

https://github.com/syedhali/EZAudio

![](https://cloud.githubusercontent.com/assets/1275640/8516597/f27240ea-236a-11e5-8ecd-68cf05b7ce40.gif)

## SwiftyGif

Gif の表示に使えるライブラリ。

https://github.com/kirualex/SwiftyGif

![](https://camo.githubusercontent.com/88fed5707eeb7e555f2ac9a3ae26d25991fea7d8/687474703a2f2f692e696d6775722e636f6d2f703841366a4a682e676966)

# デバッグ用

デバッグに使えるライブラリはビルドの手間が省けることが多いので積極的に使っていきたい。

## Tweaks

https://github.com/facebook/Tweaks

アプリ実行中にサイズなどのパラメータを変更できるライブラリ。便利そう。

詳しくはこちら：[どのようにして高速に iOS アプリの UI を作り上げるか：動作モックの活用と実装時の UI 作りこみ](http://techlife.cookpad.com/entry/2016/04/20/194000)

## FLEX

https://github.com/Flipboard/FLEX

実行中のUIのサイズなどのプロパティが確認できたりログが読めたり、NSUserDefaults の値が確認できて変更もできたりするライブラリ。

![](https://camo.githubusercontent.com/950a2612b1dc796bc5cc3fd9909ed465166afc5b/687474703a2f2f656e67696e656572696e672e666c6970626f6172642e636f6d2f6173736574732f666c65782f616476616e6365642d766965772d65646974696e672e676966)

# 機械学習

## Swift-AI

Swift で書かれた機械学習ライブラリ。３層までのニューラルネットワークが構築できるらしい（詳しくわかってない）。

https://github.com/collinhundley/Swift-AI

# Purchase

## SwiftyStoreKit

Store での決済はこれで。

https://github.com/bizz84/SwiftyStoreKit

# UI

## LTNavigationBar

NavigationBar をオシャレに。

https://github.com/ltebean/LTNavigationBar

![](https://raw.githubusercontent.com/ltebean/LTNavigationBar/master/images/demo.gif)

## UIView-Shake

View を震わせることができるライブラリ。

https://github.com/andreamazz/UIView-Shake

![](https://raw.githubusercontent.com/andreamazz/UIView-Shake/master/assets/screenshot.gif)

## CDFlipView

画像のフリップで変更できるライブラリ。

https://github.com/jibeex/CDFlipView

## SMPageControl

独自ページコントロール。

https://github.com/Spaceman-Labs/SMPageControl

![](https://camo.githubusercontent.com/36e0995020b462bf37e2b39860ca8c8c462ff4c3/687474703a2f2f73706163656d616e6c6162732e636f6d2f6769746875622f534d50616765436f6e74726f6c2d342e706e67)

# アニメーション

## Spring

アニメーションが簡単に書けるライブラリ。

https://github.com/MengTo/Spring
Rack::TempfileReaper でファイルアップロード時にできたテンポラリファイルを即削除

Rack は、ファイルアップロードなど、multipart なコンテントタイプのリクエストを処理するときに、送られてきたデータをテンポラリファイルとして保存する。

https://github.com/rack/rack/blob/1.6.4/lib/rack/multipart/parser.rb#L21-L22
https://github.com/rack/rack/blob/1.6.4/lib/rack/multipart/parser.rb#L135

ruby の Tempfile クラスを使ってテンポラリファイルを作っている。Tempfile は `#close!`（または `#close(true)`）したらテンポラリファイルも削除するが、そうでないと GC されるかアプリケーションが終了するまで残り続けてしまう。

https://github.com/ruby/ruby/blob/v2_2_0/lib/tempfile.rb#L180-L183
https://github.com/ruby/ruby/blob/v2_2_0/lib/tempfile.rb#L131

すぐに close! してくれないかなー、と Rack を眺めていたら、[Rack::TempfileReaper](https://github.com/rack/rack/blob/1.6.4/lib/rack/tempfile_reaper.rb) というものがあった。[Eliminate dependency on garbage collection for cleanup of Tempfiles created by Rack for multipart form data](https://github.com/rack/rack/pull/671) という PR で入ったらしい。

config/application.rb あたりに `config.middleware.use Rack::TempfileReaper` と書いてこいつを使うようにしておけば、リクエストで使った Tempfile を close! してくれる。結果テンポラリファイルもすぐに消える :smile:
【イベントレポート】GLOCOM/ブロックチェーン経済研究ラボ

[GLOCOMブロックチェーン経済研究ラボ第1回セミナー「ブロックチェーンの概要と発展可能性」【公開コロキウム】](http://www.glocom.ac.jp/events/1622)に参加してきましたので、気になったポイントを纏めました。

冒頭に、国際大学GLOCOM高木氏からブロックチェーンの仕組みについて丁寧に解説があった。ブロックチェーンはBitcoinだけでなく**次世代のコンピューティングの基盤技術**として期待されているわけであり、それこそが現在マーケットで一挙に期待が寄せされている要因。インターネットは**情報、主にドキュメントのネットワーク**であるのに対して、ブロックチェーンは**主体とモノのネットワーク**である。つまり情報流通だけでなく、ブロックチェーンは主体に紐付いた取引データ、資産データが連携、凝縮されたものである。さらに、P2P技術に共通する前提条件でもある**悪意のあるノードも参加している**という事にも気を配る必要があり、セキュリティ、安全性担保の大前提はこれまでのシステムとは大きく異なる。

また、ビットコインのマイニングをめぐる経済性について、本来であれば新貨幣発行による持分希薄化によりビットコインは減価されていくはずであるのに、貨幣としての需要増加が大いに期待されており、現在も減価どころか増価しているのが現状。ビットコインブロックチェーンの大きな特徴であり、Proof of Work（マイニング）により参加者自らがプラットフォームの経済圏に積極的に関与している事であり、ブロックチェーンをスマートコントラクトなど非貨幣領域に使うとなった場合、このインセンティブの価値をどう整理して価値創出するかがポイントである。

NEM、Ethereumなどのブロックチェーンの特色の整理があったが、ここは後に資料が公開されるらしいので、そちらを参照されたい。

NEMの開発者として知られるソラミツ株式会社武宮氏。８年前に来日し、NECでインターンを経験後京都で研究活動を行い、現在起業家の立場にある。高木氏に解説を受け、独自の視点でもコメント。
Rippleはひとつの通貨だけでなく、IoU（独自通貨）を自由発行できるので様々な通貨に対応できるようになったのがブレイクスルー。NEM、Bitcon、Ethereumの比較すると、NUMが優れている点としては、P2P Time Serviceがある（20台のサーバーに問い合わせ、精度アップにより計算機能）、②サーバー評判（サーバーが嘘の取引をした場合にその情報を共有してブラックリストを作成）、取引スパムフィルタ機能など。また、自信の研究開発の体験からも、**ビットコインを使っている色々使いにくい事が多く、やはりマイニング自体を無くしたかった。さらに、新規通貨の発行はしたくない為、デジタルアセットの機能を実装した**と解説。

また、[API実装](http://bob.nem.ninja/docs)及びリファレンス整備にも自信があり、Proof of Stake (自分の残高によってブロック管理の優先度を決める）、Proof of Importance（武宮氏が提案、グラフィカルに可視化した取引状況から、重要な取引きをしたユーザーを優先させる）も有効。

NTTサービスエボリューション研究所　大橋氏。スマートプロパティ向けの研究について解説。現在、ビットコインの堅牢性にみんなが気がついてきた段階であると考えられ、それによってスマートプロパティへの適用にも注目が集まっている。ただ、ブロックチェーンならではのキラーサービスはまだ出ていないのが現状であり、NTTとしてはそのサービスのひとつとしてデジタルアセット管理に注目している。今後の社会は一般消費者がどんどんコンテンツを発信する時代になると考えられ、受け身型サービスのComsumerが情報発信する**Civil Caster**へと変化している。

Ethereumに代表されるように、プログラムコードを埋め込めるブロックチェーンの登場により、任意の処理を実行させらえるという新しい概念が生まれた事が、可能性を広げている。スマートプロパティの場合は仮想通貨と異なり、紐づく対象がブロックチェーン外にあり、プロパティによっては多重複製が有効であるのも特徴的。

利用者は権利者を知らなくともブロックチェーンを介して許諾要求を行う事が出来、権利者は利用者からの許諾要求に対して直接ライセンス発行ができる。これはCivil Casterの時代に一意に中央集権型モデルではなく、新しいシステムアーキテクチャを提唱しているのではないか、と指摘していた。

最後のQ&Aでは「研究開発と実ビジネス部隊の連携はきちんとされているのか？」「冗長性を担保したRDBと何が違うのか」など様々な質問が出ていたが、ユースケースによっても大きく回答は異なると感じられた。また、現在の様々なブロックチェーンPoCが行なわれているが、現段階では「設計通りに動くかどうか」の確認がメインであり**これから商用に向けてはどうのスケールで実装すれば経済性が働くか**などが実証される必要があると提言されていた。
「middleman-ogp」gemインストールできない 

## 備忘録


# middleman-ogp を gemfile に追加、bundle install
```
# 特定（4.1.7）のバージョンをインストール
gem 'middleman', '4.1.7'

gem 'middleman-core'

gem 'middleman-livereload'

# 4.0.0以上
gem 'middleman-compass', '>= 4.0.0'

# 後ろに何もつけてない時は、最新のものという意味
gem 'middleman-ogp'

gem "slim"

# ↓ 動かなくなったのでコメントアウト
# gem 'middleman-deploy'

# 使っていないのでコメントアウト
# gem "middleman-blog"

gem "builder"

# 3.3.6でマイナーなアップグレードを行う
# 4以上？にはアップグレードされない
gem 'bootstrap-sass', '~> 3.3.6'
```



# で、インストール
```
bundle install
```


## エラー
```          
Fetching gem metadata from https://rubygems.org/.............
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies...
Bundler could not find compatible versions for gem "middleman-core":
  In snapshot (Gemfile.lock):
    middleman-core (= 4.1.7)

  In Gemfile:
    middleman (= 4.1.7) was resolved to 4.1.7, which depends on
      middleman-core (= 4.1.7)

    middleman-compass (>= 4.0.0) was resolved to 4.0.1, which depends on
      middleman-core (>= 4.0.0)

    middleman-livereload (= 3.4.6) was resolved to 3.4.6, which depends on
      middleman-core (>= 3.3)

    middleman-ogp (= 1.0.0) was resolved to 1.0.0, which depends on
      middleman-core (~> 3.2)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
```


# ogpは、自分で設定するか、何か他のものを探す
middleman-coreのバージョンを下げるしか対応策がないので、
使わないことにしました。
WEBrick と rack-reverse-proxy でサクっと https リバースプロキシ


こちらの記事を参考に
http://qiita.com/hiroshi3110/items/af7b6c4f7824539d7a53

# WEBrick でやってみる

```rb:webrick_https_reverse_proxy.ru
require 'rack/reverse_proxy'

# monkey patching
module AddXForwardedProtoHeader
    def set_forwarded_headers
        super
        return unless options[:x_forwarded_headers]
        target_request_headers["X-Forwarded-Proto"] = source_request.scheme
    end
end
RackReverseProxy::RoundTrip.prepend AddXForwardedProtoHeader

require 'rack/builder'
app = Rack::Builder.new {
    target = ENV["TO"] || "http://localhost:9292"
    use Rack::ReverseProxy do
        reverse_proxy '/', target
    end

    run Proc.new {}
}

require 'webrick'
# これが無いと curl: (35) Unknown SSL protocol error in connection to とかになる
require 'webrick/https'

# その場でオレオレ証明書を作成
# :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE を指定してるので要らないけど。
cn = [[ "CN", WEBrick::Utils::getservername]]
comment = "Generated by Ruby/OpenSSL"
cert, rsa = WEBrick::Utils::create_self_signed_cert(2048, cn, comment)

require 'rack/handler/webrick'
Rack::Handler::WEBrick.run app, {
    :Port => 443,
    :BindAddress => "0.0.0.0",
    :SSLEnable => true,
    :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
    :SSLPrivateKey => OpenSSL::PKey::RSA.new(rsa.to_s),
    :SSLCertificate => OpenSSL::X509::Certificate.new(cert.to_s),
    :SSLCertName => cn
}
```

思ったほどサクっとしてなかった。

```text:起動
sudo rackup webrick_https_reverse_proxy.ru
```

## 余談

`rack/reverse_proxy` の gem が `X-Forwarded-Proto` のヘッダ付けてくれないので、とりあえずモンキーパッチで対応。
追加してプルリク送っといた。

## 追記

毎回証明書作りなおすと起動するたびにブラウザに注意されるので、
一度オレオレ証明書作ってそれを使ったほうが良さげな感じ。

参考：http://d.hatena.ne.jp/ozuma/20130511/1368284304

```rb:snip
    webrick_opt = {
        :Port => 443,
        :BindAddress => "0.0.0.0",
        :SSLEnable => true,
        :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
        :SSLPrivateKey => OpenSSL::PKey::RSA.new(File.open(File.dirname(__FILE__) + "/server.key")),
        :SSLCertificate => OpenSSL::X509::Certificate.new(File.open(File.dirname(__FILE__) + "/server.crt")),
    }
```
MSP430 > Link > math.h | メモリ消費

MSP430でmath.hを使う場合、IAR Embedded Workbenchだとコンパイルオプション(-lm)はいらないようだ。

https://www.embeddedrelated.com/showthread/msp430/33066-1.php

> When you are using IAR Embedded Workbench, you don't need to do anything special to use it.


math.hを加えることで、メモリ消費がどれくらい増えるかは懸念事項。


## メモリ消費

コードに以下を追加してみた。

```
#include <math.h>

double d0;

d0 = sqrt(3.1415);
```

### 変更前

| size | type |
|:-:|:-:|
|  38 724 | CODE |
| 6 213 | DATA |
| 1 461 | CONST |

### 変更後

| size | type |
|:-:|:-:|
|  38 974 | CODE |
| 6 213 | DATA |
| 1 461 | CONST |
Cocoapodsでリンクバージョンの警告が出た場合

# 警告

Cocoapods でインストールしたプロジェクトをビルドすると、以下の警告が消えないことがあった。

```
ld: warning: object file (/Users/xxx/Library/Developer/Xcode/DerivedData/Xxx-hhefmjxrjvsejsacrjohhympzhla/Build/Products/Debug-iphonesimulator/libCocoaLumberjack.a(CocoaLumberjack-dummy.o)) was built for newer iOS version (9.3) than being linked (8.0)
```
# 解消方法

配備ターゲットを 8.0 にする場合

* Podfile の   platform :ios, '8.0'
* アプリ側のプロジェクト PROJECT > {Project} > Info タブ > Deployment Target > iOS Deployment Target を 8.0
* アプリ側のプロジェクト TARGETS > {Project} > General タブ > Deployment Info > Deployment Target を 8.0

上記の３箇所を合わせると、警告が解消される。

Pods側の以下の２箇所は、Podfile で指定したバージョンになっていた

* PROJECT > Pods > Info タブ > Deployment Target > iOS Deployment Target 
* PROJECT > Pods > Bild Settings タブ > Deployment > iOS Deployment Target
Travis CIのMac OS Xでテストする

> この記事の内容は2016年4月に確認したもので、今後仕様が変更される可能性があります。

Travis CIは標準ではLinux（Ubuntu 12.04.5 LTS）上でテストを行います。
Objective-Cのプロジェクトでは自動的にMac OS Xが使われますが、それ以外の言語でもOS Xを指定して実行することが可能です。

## OS Xでテストする
**.travis.yml**に`os`キーを設定すると、OS Xでテストを実行することができます。

```yaml
os: osx
```

以前は`os`の指定だけではダメで、`language: objective-c`を設定しないと反映されなかったりしたのですが、今はドキュメント通り動くようです。

詳細 : [Testing Your Project on Multiple Operating Systems - Travis CI](https://docs.travis-ci.com/user/multi-os/)

## OS Xのバージョンを指定する
`sw_vers`コマンドで確認したところ、OS XのバージョンはMavericks（10.9.5）でした。追加で`osx_image`を指定し、OSのバージョンを変更することができます。

```yaml
os: osx
osx_image: xcode7.3
```

この設定でEl Capitan（10.11.1）になりました。
イメージ名とバージョンの対応表は下記ドキュメントに記載されています。

詳細 : [Building an Objective-C Project - Travis CI](https://docs.travis-ci.com/user/languages/objective-c)

## 複数のOS, バージョンで実行する
[Multi OS Build Matrix](https://docs.travis-ci.com/user/multi-os/#Example-Multi-OS-Build-Matrix)を使い、複数のOS, バージョンで実行することもできます。

```yaml
matrix:
  include:
    - os: linux
    - os: osx
      osx_image: xcode7.3
    - os: osx
      osx_image: xcode7.1
```

この場合、これら3つの環境で実行されます。

- Linux（Ubuntu 12.04.5 LTS）
- OS X - EL Capitan
- OS X - Yosemite

## 参考
- [Travis CIでのOS X環境について(+Linux環境についても)](http://rcmdnk.github.io/blog/2016/02/14/computer-mac-travisci/)
昔のiphoneをもう一度使える状態にするために。

#　昔のiphoneをもう一度使える状態にするための旅路

昔のiphone。
思い出の詰まったiphoneをもう一度使える状態にして、夢に2アカウント。
いつか誰でも通るかもしれない道と思い備忘録です。

## 対象
- iphone5s
- au
- 既に契約はなし

## はまり点1 パスワードを忘れた。

そもそも昔のiphone。
IT業界では

> 「パスワードを忘れるなんてIT戦士の風上にもおけな(ry)」

となるけど、忘れたものはもうどうしようもない。

パスワードを復帰する方法、は、実は「ない」

## はまり点2 iphoneを探す

パスワードを忘れた。仕方ない。こうなれば、

「初期化」だ。

しかし、なんとそう甘くない。

[iphoneを探す]のONは、紛失したiphoneのデータを勝手に抜かれない目的もある強力な機能。
自分のiphoneなのに、過去の自分からシャットアウトを食らうこの感覚。

これは実はiCloud上から無効化できる。
iCloudにログインして、登録端末を削除すればいい。

しかし、、、、

## はまり点3 しかしwifiすらつながらない

端末が既にwifiにつながらない状態。
iCloudからのデータの初期化も、おそらく削除の設定も、今一度ネットワークにiphoneがつながったときに発動するものである。

どうあがいても、ログイン画面からではwifiは接続できない。

あれ？万事休す？

## はまり点4 しかたないリカバリだ。

リカバリモードで起動することで、iphoneを工場出荷時状態に戻す。

## はまり点5 アクティベーション

リカバリモードで、最新iOSの

> 「hello」

が表示されて安心してはいけない。

工場出荷時とは、まさにiphoneを買ったときの状態。
思い出してほしい、auで買ったとき、何をしたか。

そう、アクティベーション。

すなわち、

> 「SIMカード」がないとiphoneのリカバリは出来ない

はい、これが結論。
SIMカードなしでは門前払いも甚だしく、打つ手がない

[SIMカード@amazon](http://www.amazon.co.jp/iPhone5-%E7%B4%94%E6%AD%A3Nano-sim%E3%82%AB%E3%83%BC%E3%83%89-0-68mm-%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%80%93%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%99%E3%83%BC%E3%83%88%E3%82%AB%E3%83%BC%E3%83%89activation/dp/B00BR6ZVGO?ie=UTF8&psc=1&redirect=true&ref_=oh_aui_detailpage_o00_s00)

157円。

これが決め手。

## はまり点6 SIMカード入れられる？

SIMカードを入れるところをあけるには、実はiphoneについてくるあけるキットが一番。
しかしそんなの残っているわけがない。

小さなクリップをいい感じに折り曲げて、代用。

そう、小さいクリップが必要。(100円均一)

you tube で動画もあがっているので、参考に。


そして夢の2アカウントを達成した。

でも手は４本には増えない。
jquery.validationを入れるとイベントが消えてしまう件


## 起きた事象

* 元々、Webフォームがあり、selectボックスの `change`イベント発火時に、一部のフォームを書き換えるというAjax処理を書いていた
* 今回の改修で、`jquery.step`を使い、Webフォームをウィザード形式に変更することになった
* `jquery.step`は`jquery.validation`と相性が良いみたいなので入れてみた
* ウィザード形式になりvalidationも動作するが、元々あったAjax処理が動かなくなった


## 結論

* changeイベントの付与を、旧live形式にしたら動くようになりました
   - before

   ```
   $('#some_select_id').on('change', function() {
     hogehoge;
   });
   ```
   - after

   ```
   $(document).on('change', '#some_select_id' function() {
     hogehoge;
   });
   ```

* おそらくvalidationをした際に、HTMLを書き直したりしているので、一度付与したイベントが削除された後、要素だけ復活してる感じになってるんでしょうね


## 考えていたこと

* `jquery.validation`はよく使われていそうなプラグインの割に、同じ事象が見当たらなかった
* イベントを付与し直してくれると助かるのになぁ
highchartsで発生するイベントを調べる方法

# 概要
API仕様書を見ても、さっぱりわからないので実際に動作させて確認する方法を考えました。

# 手順
1. `hichart.src.js`を開く
2. `fireEvent = function`を検索
3. `console.log(type);`を埋め込む
4. デバッグにイベント名が表示される

```js:highchart.src.js
    /**
     * Fire an event on a custom object
     */
    fireEvent = function (el, type, eventArguments, defaultFunction) {
        console.log(type);
        // ...
    }
```

# 以前に調べたイベント一覧
http://qiita.com/YamasakiKenta/items/103fbf5f10a1c6519510
cocos2d-JSに新しく.jsファイルを追加したときに実行するシェルスクリプト

cocos2d-jsでは、新しくsrc/*.jsを追加すると project.json を書き換える必要があるので、
自動生成スクリプト。

```lang:sh
#!/bin/sh

cd `dirname $0`

jslist=$(find ./src -name "*.js")
jslist=$(echo $jslist | sed -e "s/ /,/g")
jslist=$(echo $jslist | sed -e "s/.\/src/\"src/g")
jslist=$(echo $jslist | sed -e "s/.js/.js\"/g")

str="{\n\
	\"project_type\": \"javascript\",\n\
\n\
    \"debugMode\" : 1,\n\
    \"showFPS\" : true,\n\
    \"frameRate\" : 60,\n\
    \"noCache\" : false,\n\
    \"id\" : \"gameCanvas\",\n\
    \"renderMode\" : 0,\n\
    \"engineDir\":\"frameworks/cocos2d-html5\",\n\
\n\
    \"modules\" : [\"cocos2d\", \"cocostudio\"],\n\
\n\
    \"jsList\" : [${jslist}]\n\
}"
echo ${str} > `dirname $0`/project.json
```

Macではこのシェルスクリプトを .commandというファイルにしておくとダブルクリックで実行されます。
GITよく使うコマンド一覧メモ

新人時代昔にメモしていたものがあったので、
再確認がてらに、投稿します。
（間違っている説明もあると思うので、それは発覚しだい修正するよてい）

| コマンド | オプション | 説明 |
|:------------:|:------------:|:------------|
| status || statusの表示|
|add||変更点をaddする|
|reset||gitレポジトリの状態を前に戻す|
|commit||addした変更点をcommit|
||--amend|コミットをやり直す|
|push||commitしたものをpushする|
||-f|強制push|
|pull||リモートからデータを取得してマージを行う|
||--rebase|リモートからデータを取得してrebaseを行う|
|fetch||リモートからデータを取得する(取得するだけ)|
||--prune|fetch時にリモートとの同期をとる(pullでも有効)|
|branch||ブランチを作成する|
||-d|ブランチを削除する|
|checkout||オプションによって動作がことなる|
||HEAD (ディレクトリ名)|ディレクトリ配下を変更前に戻す|
||(ブランチ名)|(ブランチ名)のブランチに移動する|
|stash||変更点を一時退避させる|
||list|退避させた変更点の一覧を見る|
||clear|stashしたものをすべて削除する|
||drop|stash に保存されている特定の状態を削除する|
||pop|退避させた変更点を元に戻す|
|merge||2つ以上の開発コミットを統合する|
||--no-ff|merge commitの作成|
|rebase||rebaseする|
||--continue|rebase続行|
||--abort|rebase中断|
|cherry-pick||ブランチ間でコミットを移動させる(一つずつ)|
|blame||変更者と変更コミットオブジェクト名を表示|


たまに使うコマンド

| コマンド | オプション | 説明 |
|:------------:|:------------:|:------------|
|merge|--squash|マージ後一つのコミットにまとめる|
|rebase|--onto|ブランチの元ブランチを変更する|
|stash|apply|stash に保存されている状態を適用するが、stash から削除はしない|
||show|stashとの差分を見る|
| reset |  --hard コミットID| 対象のコミットIDまで戻す |

git rebase についてrebaseするだけではわかりにくいと思い別記事にまとめてみました。
[git rebase についてまとめてみた](http://qiita.com/KTakata/items/d33185fc0457c08654a5)
Unityの役立つサイトメモ

随時更新していく予定です。

# Unity公式
Unityのダウンロード、アップデートなど
http://japan.unity3d.com/

## Unity マニュアル
困ったら最後はこれを見る。
http://docs.unity3d.com/ja/current/Manual/index.html

## Unityチュートリアル

現時点でのUnityチュートリアルサイトの最適解だと思ってます。
日本語でGif動画を絡めてわかりやすく解説してくれています。
[はじめてのUnity](https://github.com/unity3d-jp/FirstTutorial/wiki)

## Unity Tips

画面下のトピックがオススメ、初心者用が多いですが中級者も参考になる知識も
基本動画なのでわかりやすいです。**英語なので、字幕の日本語を付けるのがオススメです。**
https://unity3d.com/jp/learn/tutorials
![image](https://qiita-image-store.s3.amazonaws.com/0/96970/2f97d191-61cb-c916-b450-b6232daba54e.png)


## Unityちゃん

無料で3D人間型のデータが使えるのはありがたい。(しかも可愛い)
公式
http://unity-chan.com/

SDユニティちゃんのダウンロードはこちら 個人的にはこっちの方が好きです。
http://unity-chan.com/contents/guideline/?id=SDUnityChan

# UI

アンカーが感覚的によくわかるページ
http://docs.unity3d.com/ja/current/Manual/UIBasicLayout.html

# 通信対戦
手軽にやるにはPhotonがオススメです。
「Photon Unity」で検索すると色々でてきます。
[photonの基本的な流れ【Unity】【photon】](http://kan-kikuchi.hatenablog.com/entry/photonBasic)

# Shader
オブジェクトの見た目やグラフィックに興味ある人はShaderというのを学びましょう。
僕はまだ足を踏み入れてないので代わりに、友人が推奨していたサイトを紹介します。
[Unity Shader まとめ](http://unitech.hatenablog.com/entry/2015/03/11/001953)

### Unityちゃんライセンス
© UTJ/UCL
今流行りの(?)背景ぼかしメニューのCSS実装例

## 概要

最近良く見る、下図のような、背面にあるものをボカした表現のあるモーダルメニューの実装例です。
実際に動くデモはこちら
https://s.codepen.io/skwbr/debug/eZPZZj/yPkJjGEWbvqk

![sample.jpg](https://qiita-image-store.s3.amazonaws.com/0/48396/c91cedcc-b104-2ede-9ec6-8bae4e7d0bd8.jpeg "sample.jpg")


## コード解説

下記ボカしメニューの実装部分だけ抜粋しています。
全コードを観たい場合は codepen 参照ください。
http://codepen.io/skwbr/pen/eZPZZj

### HTML

```html:HTML

<body>
  <div id="content">
    <!-- メインコンテンツをここに全部入れる -->
  </div>
  <div id="modal-menu">
    <!-- モーダルメニュー -->
  </div>
</body>

```

* 背面に表示されるメインコンテンツをすべて `#content` の中に入れ込んでいます。

### JS

```js:JS(jQuery)
var $body = $('body');

$('.menu-open-btn').on('click', function(){
  $body.addClass('is-menu-open');
  return false;
});

$('.menu-close-btn').on('click', function(){
  $body.removeClass('is-menu-open');
  return false;
});
```

* メニューボタンの押下で `body` に `is-menu-open` classがつくように、またモーダル上の閉じるボタンの押下でそのclassが外れるようにしています。


### CSS

```css:CSS
/* モーダルメニュー */
#modal-menu {
  position: fixed;
  width: 100%;
  height: 100%;
  background-color: rgba(50, 47, 45, 0.9);
  top: 0;
  left: 0;
  opacity: 0;
  transition: opacity .2s ease-out;
  pointer-events: none;  /* 透明状態でもクリックを拾ってしまうので */
}


/* bodyにis-menu-openクラスが付いたらモーダル表示 */
body.is-menu-open #modal-menu {
  opacity: 1;
  pointer-events: auto;
}

/* bodyにis-menu-openクラスが付いたら#contentをぼかしフィルター付与 */
body.is-menu-open #content {
  pointer-events: none;
  transition: all .2s ease-out;
  -webkit-filter: blur(8px);
     -moz-filter: blur(8px);
      -ms-filter: blur(8px);
          filter: blur(8px);
}

```

* 要は モーダルメニュー(#modal-menu)を透明(opacity:0)+非クリッカブルの状態で置いておいて、bodyのクラスにしたがってopacityを1にしてフェードインさせる、というもの。
* 同時に、背面にあるメインコンテンツ(#content)に対し、CSS3のフィルターの `blur` を使用して、ぼかし効果を与える、というもの。


## 補足

JSを使うのが嫌な場合は、メニューボタンをチェックボックスにして、
隣接セレクタを使えば CSSだけで上手いことできそうです。

応用でグレースケールなどのfilterを使った効果をすることもできそうですね。
CSS3フィルターが使用できるブラウザは下記参照。必要に応じベンダープレフィックスを補ってください。
http://caniuse.com/#search=filter
SublimeTextでのsass・compass自動コンパイル

先日、OS X 10.11 El CapitanのMac Book Proをもらった。
Win→Mac　への移行でちらほら覚え書き。

ズボラなので、SublimeTextでの自動コンパイルMacに導入。
⌘＋Sで上書き保存すると勝手にsass→cssでコンパイルしてくれるんだ！

＜１＞
SublimeText3をダウンロード
https://www.sublimetext.com

＜２＞
Package Control機能をつける
(↑いろいろダウンロードするための機能をつける)
http://futago-life.com/sublime-text3-wiki/first-step/install/package-control
※わかりやすい参考サイト

＜３＞
Shift＋⌘＋Pでテキストボックスが出てくるので`Install Package`を入力して以下のパッケージをDL
・Sass
・SASS Build
・SCSS
・Compass

最後に保存したらコンパイルするパッケージを入れる
・SublimeOnSaveBuild

すると、自動でコンパイルされるように・・・・！なるはずが、ならなかった。
自動コンパイルはされてるんだけど、どうにもcompassのconfigを読んでない様子。
sassでコンパイルされてるみたい。

調べたら、Macでcompass自動コンパイルを有効にするにはコンパイル(ビルド)の設定をちょっと書き換えないとならないらしい。

`Shift＋⌘＋P`でlist Packages→compass(クリックでフォルダ開く)→Compass.sublime-buildに↓を追加

```lang:filename
"osx": {
    "path": "/usr/local/bin:/Users/USERNAME/.rbenv/shims:$PATH"
  },
```


私のビルドファイルの設定↓

```lang:filename
{
  "osx": {
    "path": "/usr/local/bin:/Users/matsupome/.rbenv/shims:$PATH"
  },	
	"cmd": "sh '${packages}/Compass/build.sh' '${file_path}' '${project_path:${folder}}'",
	"working_dir": "$packages/Compass",
	"selector": "source.sass, source.scss",
	"shell": "true",
	"windows":
	{
		"cmd": "build.cmd \"${file_path}\" \"${project_path:${folder}}\""
	}
}
```


ビルドファイルを書き換えるとcompassでの自動コンパイルがされるようになる。
ターミナル立ち上げる必要もなく、koalaみたいなコンパイルソフト立ち上げる必要もなく、上書き保存するだけでコンパイルされる！
すっごい快適！
Struts2のDMI(Dynamic Method Invocation)とは何か

リモートコマンド実行のセキュリティ脆弱性が発見され一気に名前があがったDMI(Dynamic Method Invocation)という機能がStruts2にあります。

このDMI、昨今のバージョンではデフォルトで機能しなくなりましたが、下位互換性のため有効にする設定もあります。

# DMIの機能

Struts2のActionクラスは通常、execute()メソッドにActionクラスで実行する処理を書きます。
例えばSampleActionクラスが`/sample.action`のURLで呼び出されると設定してあるとすると、Actionクラスの実装は次のようになります。

```java
import com.opensymphony.xwork2.ActionSupport;

public class SampleAction extends ActionSupport {
  @Override
  public String execute() throws Exception {
    // 実装内容
    // 
    return ActionSupport.SUCCESS;
  }
}
```

DMIを有効にすると、このActionクラスのexecuteメソッド以外を呼び出すことが可能です。つまり1つのActionクラスに対して、複数の実装が可能になり、類似する処理や機能を1つのActionクラスにまとめることができる設計になります。

```java
public class SampleAction extends ActionSupport {
  @Override
  public String execute() throws Exception {
    return ActionSupport.SUCCESS;
  }

  public String search() throws Exception {
    // 一覧検索結果の画面を出力
    return "search";
  }

  public String detail() throws Exception {
    // 検索結果の1件を出力
    return "detail";
  }
}
```

このようなActionクラスを作ります。
`execute()`を実行するのは`/sample.action`でした。DMIを有効にすると、`search()`や`detail()`を次のURLで呼び出すことができます。呼び出し方には**いくつか用意されています。**

## Bang記法

URLの末尾に !(Bang)をつけ、その後にメソッド名を記載します。

|リクエストURL|起動するメソッド|
|:---|:---|
|/sample.action|execute()|
|/sample!search.action|search()|
|/sample!detail.action|detail()|

## クエリ文字列記法

クエリ文字列に起動するメソッド名を記載します。

|リクエストURL|起動するメソッド|
|:---|:---|
|/sample.action?method:search=foo|search()|

**method:起動するメソッド名=任意の値** で設定します。任意の値に設定した内容は破棄されます。

## POSTパラメータ記法

```
<s:hidden name="method:search" value="foo" />
```

Struts2用のタグでPOSTパラメータに、接頭辞 `method:` をつけることで接頭辞以降の文字列で呼び出すメソッドを決めます。これもvalueの値は破棄されます。

## DMIの問題点

まずActionクラスに複数のURLからリクエスト受けるようになりますが、これにより次の弊害があります。

* Actionクラスに対する入力チェック(Validation)が同じものを使ってしまう
* 入力チェックエラー時の遷移先が同じになってしまう
* 任意のメソッドを実行できる

Actionクラスに対する入力チェック(Validation)も同じものが使われてしまうため、Actionクラスの実装やハンドリングが難しくなります。特に入力チェックエラー時の遷移先は、Struts2標準ではinputで定義した遷移先に自動遷移してしまいます。複数のActionや画面で入力チェックエラーのときは同じ画面へ遷移する画面…でしたら問題はないのですが、果たしてそういう画面がそんなにたくさんあるでしょうか…。

他にもActionクラスはリクエストパラメータの内容をActionクラスのフィールドに格納し、JSPなどに出力する際の値も格納します。全く同じ変数の組み合わせを複数の画面で使い回すとなると、とある画面では渡しても表示しない、ある画面では使う、といったことになり、不具合の温床にもなりそうです。

最後にセキュリティ的な問題です。POST時のパラメータだけでなく、クエリ文字列にmethod:とつけたパラメータの後に指定した内容はOGNLによって実行されます。これが今回の脆弱性の引き金で、既に攻撃用コードも公開されていますのでここには書きませんが、method:以降の記述でJavaのオブジェクトを生成できますので、ProcessBuilderも作れます。

## それでもDMI使いたい！場合

Struts2.3からStrict DMIという新機能(?)がサポートされています。
URLで指定できるActionクラスのメソッドを struts.xmlのActionクラス設定に`<allowed-methods></allowed-methods>`で指定しなければ動作しません。

なお、Struts2.5では、StrictDMIあらため、Strict Method Invocation(SMI)が採用されるそうです。

## まとめ

DMIの採用はアプリケーションの設計的に見ても決して良くないので、**使用はやめましょう**

## 参考記事

[Struts2公式ドキュメント：DynamicMethodInvocation](http://struts.apache.org/docs/action-configuration.html#ActionConfiguration-DynamicMethodInvocation)
GCE(Google Compute Engine)を使ってみたい！〜htmlファイルを公開する編〜


ついに！htmlファイルを公開します。
と思ったらすごーーく簡単に公開できてしまいました。

# 手順

1. google cloud consoleの左のタブから、 `ストレージのStrage` を選択。
2. バケットを作成
3. ローカルで作成したhtmlファイルをドラック＆ドロップでアップロード。
4. アップロードしたhtmlファイルの一番右のタブ、 `一般公開で共有する` にチェックを入れる。
![testupl____バケット_-_welcomex59th.png](https://qiita-image-store.s3.amazonaws.com/0/80399/4ca2f35d-330e-1cad-3ccc-777d4da81237.png "testupl____バケット_-_welcomex59th.png")
5. 4をすると `公開リンク` と出てくる。こちらをクリックすると、別タブで自分が書いたhtmlが公開されています。

# 疑問

* このために必要だと思ってやった、[ubuntuでnginxを入れる](http://qiita.com/haradahirokikiki/items/e0bf65f96067a5bdfabd)などはなんだったのか？これを設定しなくてもStrageにアップロードして公開できそうな感じがしましたが、そんなことはない...??
* nginxをちゃんと使うようにしよう！


もっとGCPの機能を調べます！！
[Swift] Rangeを逆順にする

Swift2.2です。
0~5とかを生成するRangeというのがありますよね。

```swift
0...5 //0,1,2,3,4,5
0..<5 //0,1,2,3,4
```

5~0にしたい時、逆に書いても動きません。なのでこうかきます。

```swift
(0...5).reverse() //5,4,3,2,1,0
(0..<5).reverse() //4,3,2,1,0
```
NIPS2015読みたい論文


* Logarithmic Time Online Multiclass prediction
* Space-Time Local Embeddings
* A fast, universal algorithm to learn parametric nonlinear embeddings
* Active Learning from Weak and Strong Labelers
* Locally Non-linear Embeddings for Extreme Multi-label Learning
* Scalable Semi-Supervised Aggregation of Classifiers
* Teaching Machines to Read and Comprehend
* Community Detection via Measure Space Embedding
* Learnability of Influence in Networks
* Large-Scale Bayesian Multi-Label Learning via Positive Labels Only
* A class of network models recoverable by spectral clustering
* From random walks to distances on unweighted graphs
* Semi-supervised Learning with Ladder Network
* Embedding Inference for Structured Multilabel Prediction
さくらのレンタルサーバのディレクトリ構造

qiita よりもはてなブログとかの方が向いているような話ですが、
さくらのレンタルサーバのディレクトリ構造への言及。

# 公式で調べる

https://help.sakura.ad.jp/app/answers/detail/a_id/2105/~/【さくらのレンタルサーバ】基本仕様

FTPクライアントで接続すると・・・

/home/ にアクセスすると、同居人が見えてしまう（もちろんアクセス不可）
/home/アカウント名/ （ユーザごとのホームディレクトリ）にアクセスすると、wwwやlogなどのディレクトリが存在する。

/home/アカウント名/www が公開ディレクトリ。

したがって。　アカウント名.sakura.ne.jp で、公開ディレクトリのルートに接続する。

# バックアップデータを転送するような処理では

/home/アカウント名/backup　などの、Web上に公開していない領域に保存する。

BackWpupなどでのディレクトリ指定も同様。
gitでローカルのブランチが追跡しているリモートブランチを確認する方法

gitでローカルのブランチが追跡しているリモートブランチの確認する方法がわからなくて調べたのでメモ。


下記コマンドで調べられる。

```shell-session
$ git branch -vv
```

結果として以下のような情報が得られる。

```shell-session
ブランチ名 コミット番号 [追跡ブランチ名] コミットメッセージ
```


ちなみに、追跡するリモートブランチを設定する際は

```shell-session
$ git branch --set-upstream-to=origin/[ブランチ名]

# 省略形
$ git branch -u origin/[ブランチ名]
```

もしくは

```shell-session
git push -u origin　[ブランチ名]
```

参考にさせていただいたサイト様
http://dackdive.hateblo.jp/entry/2014/02/02/235439
decoratorをviewで使っているのにno method errorになる・・・

モデルにメソッドを用意したものの、どう考えてもView専用だったのでdecoratorに移動しよう
ってことでdecoratorに移動させたらNoMethodErrorになった

ここでは仮にfuga_decoratorのdeco_nameメソッドとして

```_show.html.slim
= hoge.fuga.deco_name
```

```
undefined method `deco_name' for #<Fuga:0x007f8ef2ae23a0>
```

解決策としては

```_show.html.slim
- foo = ActiveDecorator::Decorator.instance.decorate(hoge.fuga)
= foo.deco_name
```

こんな感じでクリア

あとで試してみたらこれでもいいらしい

```_show.html.slim
- ActiveDecorator::Decorator.instance.decorate(hoge.fuga)
= hoge.fuga.deco_name
```

これでなんでOKなのかよくわからないけど、うまいことやってくれてるんだろうなw
（ソース読めよ！！）

で、エラーになった原因だけど、decoratorはどうやらcontrollerからviewに渡す際にdecorateしてるみたいで、
controller内で宣言した変数とかには使えるけど、has_oneとかbelongs_toとかみたいな関連要素に関しては、
controller内で宣言されてないので明示的にdecorateしてあげる必要があるみたい。

今回の場合だったら

```hoges_controller.rb
def show
  ・・・
  @fuga = hoge.fuga
end
```

```_show.html.slim
= @fuga.deco_name
```

みたいにすればviewでdecorateしなくても使えるみたい。

あとはpartialに渡す時もdecorateしてくれるそうなので、うまくrenderを利用すればdecorateを書く必要はないっぽい。

また少し賢くなった

#参考
[メソッドをhelperからdecoratorに移動すると undefined method `term' のエラーが発生する](http://ja.stackoverflow.com/questions/23216/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92helper%E3%81%8B%E3%82%89decorator%E3%81%AB%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B%E3%81%A8-undefined-method-term-%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B)
Xamarin Workbooks とかいうやつ

[Xamarin Evolve 2016](https://evolve.xamarin.com/) が 2016年４月24–28日に開催されておりました。

build での予告どおり、Xamarin.Android/iOS などがついにオープンソースになった、などのエキサイティングな発表のまとめは

* [【速報】Evolve 2016 で発表されたエキサイティング情報まとめ - Xamarin 日本語情報](http://ytabuchi.hatenablog.com/entry/evolve2016)

その Keynote でデモされていた Xamarin Workbooks というツールがなかなかすごいので紹介。

## なにこれ？

ひとことでいうと、

**Xcode の Playground みたいなやつ + Markdown**

まだ意味わかんないですね？

こういうことです。

![](http://blog.amay077.net/assets/images/posts/xamarin_workbooks_01.png)
![](http://blog.amay077.net/assets/images/posts/xamarin_workbooks_02.gif)

* Markdown でドキュメントが書ける(このツール自体はリッチなエディタである)
* \`\`\`csharp〜\`\`\` で囲まれたコードブロックは、そのまま iOSシミュレータなどでインタラクティブに、Instant に実行できる。

上記の Workbook の実ファイルは、これ↓です。

* [Xamarin Workbooks を使ってみるテスト。 HowToUseMapKit.workbook で保存して Xamarin Inspector で File->Open してね。](https://gist.github.com/amay077/793b5df4aad0098ffe6d9c12a491ee9a)

みてわかる通りまんま Markdown ですね。

## Let's try!

しかも iOS だけじゃなく、Android, Mac, Windows(WPF) に全対応！
Mac でも Windows でも試せるみたいです。

* [Xamarin Workbooks - Xamarin](https://developer.xamarin.com/guides/cross-platform/workbooks/)

スタンドアロンなアプリとして実行可能なようなので、サクッと使ってみよう！
ディレクトリ内のソースを全部コンパイルしてテストするMakefile


大量の*.cファイルがある場合，それらを全部コンパイルして，実行テストする．

以下のMakefileファイルをつくる．

```mf:Makefile

# C files
SRCS = $(wildcard *.c)
# executables
EXES = $(patsubst %.c,%,$(SRCS))
# test result files
TESTS = $(patsubst %.c,%.test,$(SRCS))

# perform EXES and TESTS
all: $(EXES) $(TESTS)

# complie all C files (%.c) and generate executables (%)
# ($< is *.c and $@ is executable)
%: %.c
	$(CC) $(CFLAGS) -o $@ $<

# compile all C files and test 
# ($< is *.c, $@ is *.test, ${@:.test=} is *.test but delete ".test")
#%.test: %.c
#	$(CC) $(CFLAGS) -o ${@:.test=} $<
#	./${@:.test=} > $@

# run all executables (%) and generate result files (%.test)
# ($< is executables, $@ is *.test)
%.test: %
	./$< | head > $@

# delete all executables and result files
clean: 
	rm -f $(EXES) $(TESTS)

```

そして

```bash:実行！
$ make
```

でOK．テスト結果が*.testに保存される
（上記サンプルでは単にheadしているだけ）