OmniAICreator/Qiita-1.07M huggingface dataset:
AWSで開発者ユーザ及び管理者ユーザを作成しsudoの設定をする

## はじめに
AWSに開発環境を作成したのでデプロイユーザを考えていてまとめました。
自分ではnginxを使用していたのでユーザのグループはnginxとします。
（nginxで権限エラーを起こさせないためです。apacheであればグループの部分をapacheに変えればOKかと思います。）

管理者のユーザ名はadminとし管理者にはnginxの起動・再起動・停止及びphp-fpmの起動・再起動・停止をパスワードなしでできるようにします。それ以外についてはパスワード有りで実行可能とします。

開発者のユーザ名はdevelとし開発者にはnginxの起動・再起動及びphp-fpmの起動・再起動をパスワードなしでできるようにします。

## 概要
1. 管理者ユーザの作成
2. 開発者ユーザの作成
3. sudoの割当

## 詳細
----
#### 管理者ユーザの作成

管理者ユーザを作成します。

```shell-session
useradd -g nginx -s /bin/bash admin
```

----
#### 開発者ユーザの作成

開発者ユーザを作成します。

```shell-session
useradd -g nginx -s /bin/bash devel
```

----
#### sudoの割当

最後に使用できるコマンドを割り当てます。

```shell-session

# echo "# admin " > /etc/sudoers.d/admin
# echo "admin ALL=(ALL) ALL" >> /etc/sudoers.d/admin
# echo "admin ALL=NOPASSWD: /sbin/service nginx start" >> /etc/sudoers.d/admin
# echo "admin ALL=NOPASSWD: /sbin/service nginx restart" >> /etc/sudoers.d/admin
# echo "admin ALL=NOPASSWD: /sbin/service nginx stop" >> /etc/sudoers.d/admin
# echo "admin ALL=NOPASSWD: /sbin/service php-fpm-5.6 start" >> /etc/sudoers.d/admin
# echo "admin ALL=NOPASSWD: /sbin/service php-fpm-5.6 restart" >> /etc/sudoers.d/admin
# echo "admin ALL=NOPASSWD: /sbin/service php-fpm-5.6 stop" >> /etc/sudoers.d/admin
# echo "# devel " > /etc/sudoers.d/devel
# echo "devel ALL=NOPASSWD: /sbin/service nginx start" >> /etc/sudoers.d/devel
# echo "devel ALL=NOPASSWD: /sbin/service nginx restart" >> /etc/sudoers.d/devel
# echo "devel ALL=NOPASSWD: /sbin/service php-fpm-5.6 start" >> /etc/sudoers.d/devel
# echo "devel ALL=NOPASSWD: /sbin/service php-fpm-5.6 restart" >> /etc/sudoers.d/devel

```

## あとがき
ユーザ単位でいろいろな権限を上げるのであればユーザ単位で分けて与えとくとわかりやすくて良さそうなきがします。

## その他
参考）
[sudoで一般ユーザでapacheを起動する](http://cimacoppi.exblog.jp/14325911/)
[【AWS】EC2インスタンスにユーザーを作成して公開鍵を登録する](http://www.task-notes.com/entry/20150816/1439694000)

## 履歴
Binutilsを使った逆アセンブルの方法メモ


組込みプログラミングを行っていた時に使ったので，メモとして書きます．

#Binutilsって

BinutilsはGNU Binary Utilitiesの事で，オブジェクトファイルを扱うためのプログラミングツール．
GCC，makeやas,ldなどのコマンドも含んでいる．
この中に含まれている`objdump`コマンドを用いると逆アセンブリを行える．

#objdumpのシンプルな使い方
GCCを用いてコンパイルし，オブジェクトファイルを生成する．
このオブジェクトファイルを`objdump`コマンドを用いることでオブジェクトファイルから逆アセンブルができる．

	#GCCを使ってコンパイル
	gcc -o test.o test.c
	
	#objdumpで逆アセンブル
	objdump -d test.o
	
#余談(タイトルとは異なりますが)
##GCCを用いたアセンブラコードの生成
GCCの`-S`オプションを用いて`test.s`アセンブラコードを生成できる．

	gcc -S test.c

##アセンブル，アセンブラ，アセンブリ．．．
自分で書いていて意味がごちゃごちゃになりかけたので書いておきます．
もしかしたら，間違っているかも．．．
###アセンブリ : Aseembly

名詞．
低級のプログラミング言語の代表例．
~~アセンブリとアセンブリ言語は同じ意味?~~

###アセンブル : Assemble

動詞．
アセンブリで書かれたプログラムを機械語にすること

###アセンブラ : Assembler

名詞．
アセンブルを行うソフトウェア．
JTAG > Link > 各社のピン配置 | ピンソケット(MIL規格) | コンタクトピン

JTAGコネクタを使う時のピン配置へのリンク

http://www2.tokudenkairo.co.jp/jtag/jtagpin.html

- XILINX
- ALTERA
- ルネサステクノロジ
- N-Wire
- MIPS
- PowerPC
- ARM
など

MSP430の場合は以下のリンクがある
http://processors.wiki.ti.com/index.php/JTAG_(MSP430)

14pin JTAGのコネクタの場合のピン番号は以下が参考になる。
https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/410184/1479262

14ピンソケット http://eleshop.jp/shop/g/gB85132/
ソケット用コンタクトピン http://eleshop.jp/shop/g/gB8513G/

圧接型ソケットを使うという手もあるようだ。
S3+ReverseProxy+Basic認証な環境で、S3がAuthorizationエラーを吐いた時の対応。

環境

* S3にHTMLをWebホスト。
* 何かのマシンにApacheを入れて、mod_Proxyを入れてReverseProxyを構築。
* ReverseProxyにてBasic認証を設置。

上記の様な環境。
この環境を作るのであれば、「S3、ReverseProxy ベーシック認証」等でぐぐれば見つかる。

この状態でアクセスすると、S3から

```
InvalidArgument
Unsupported Authorization type
```
みたいなerrorが帰って来る。

よく解らんがクライアントがReverseProxyに投げてるベーシック認証周りのをそのままS3に投げてる感じ。
2016年2月時点で、S3はベーシック認証に非対応なので(というか対応してたらこの作業いらん)エラーが出る。

という事でheaderからauthorizationを間引く必要がある。mod_Headerをインストール、又は有効化した上で次ぎの設定をApacheに加える。

```
<ifModule mod_headers.c>
  RequestHeader unset Authorization
</ifModule>
```

これで行ける。
aws-cli を便利にする

#概要
[A supercharged AWS command line interface (CLI).](https://github.com/donnemartin/saws)

#機能

ドキュメントより

- Syntax and Output Highlighting
- Auto-Completion of Commands, Subcommands, and Options
- Auto-Completion of AWS Resources
- Customizable Shortcuts
- Fuzzy Resource and Shortcut Completion
- Fish-Style Auto-Suggestions
- Executing Shell Commands
- Command History
- Contextual Help
- Contextual Command Line Help
- Contextual Web Docs
- Toolbar Options
- Windows Support

#環境
aws-cli/1.10.1
Python/2.7.10
Linux/4.1.10-17.31.amzn1.x86_64
botocore/1.3.23


#インストール

pip で一発

```
# pip install saws
```

#セットアップ

AWS CLI で credentials を設定する

```bash
$ aws configure
AWS Access Key ID [None]:                  # Access Key 入力
AWS Secret Access Key [None]:              # Secret Access Key 入力
Default region name [ap-northeast-1]:      # region 入力
Default output format [json]:
```

#使ってみる

`saws` コマンド実行

```
$ saws
No resource cache found
Refreshing resources...
  Refreshing instance ids...
  Refreshing instance tag keys...
  Refreshing instance tag values...
  Refreshing bucket names...
  Refreshing bucket uris...
Done refreshing
Version: 0.4.0
Theme: vim
saws>



 [F2] Color: ON  [F3] Fuzzy: ON  [F4] Shortcuts: ON  [F5] Refresh  [F9] Docs  [F10] Exit
```

instance id, tag, S3 Bucket が取得される

saws プロンプトが表示され、`aws` コマンドに対してオプションを自動補完してくれる
![01.png](https://qiita-image-store.s3.amazonaws.com/0/105824/aa3c210b-66a0-fd5e-cc38-c731b9225051.png)


外部コマンドにパイプとか

```
saws> aws ec2 ls | jq '.Reservations[].Instances[] | {InstanceId}'
{
  "InstanceId": "i-xxxxxxxx"
}
```

抜けるときは `F10` で
PaperclipでS3の東京リージョンにアップするための設定


# 環境
- Ruby 2.3.0
- Rails 4.2.0
- paperclip 4.3.2
- aws-sdk 1.66.0
 * paperclip 4.3.2の時点ではaws-sdk2.0を使うとエラーが出ます。paperclip本家により`gem aws-sdk(< 2.0)`の指定があります。

S3のbucket作成方法などについてはここでは割愛します。

# s3の設定
```yml:config/s3.yml
development:
  access_key_id: 'アクセスキーID'
  secret_access_key: 'シークレットアクセスキー'
  bucket: 'dev用bucket名'
  s3_host_name: 's3-ap-northeast-1.amazonaws.com'
test:
  access_key_id: 'アクセスキーID'
  secret_access_key: 'シークレットアクセスキー'
  bucket: 'test用bucket名'
  s3_host_name: 's3-ap-northeast-1.amazonaws.com'
environment:
  access_key_id: 'アクセスキーID'
  secret_access_key: 'シークレットアクセスキー'
  bucket: 'dev用bucket名'
  s3_host_name: 's3-ap-northeast-1.amazonaws.com'
```

# ファイルアップロード用モデルの設定
以下、必要な箇所以外は任意の名前に置き換えてください。

```hoge.rb
has_attached_file :avatar,
                    :styles => { :medium => "160x160#", :thumb => "48x48#" },
                    :storage => :s3,
                    :s3_credentials => "#{Rails.root}/config/s3.yml",
                    :s3_host_name => 's3-ap-northeast-1.amazonaws.com',
                    :path => "/images/:id/:style.:extension",
                    :default_url => ActionController::Base.helpers.image_path("noimage_:style.png")
```

S3の最新のリージョン名やエンドポイントの情報は以下のページのAmazon S3のところに載っています。
http://docs.aws.amazon.com/general/latest/gr/rande.html#opsworks_region

# Herokuでエラーが出る時
上述の設定でHerokuにデプロイしたところ、missing required :bucket optionというエラーが出ました。

production.rbに以下の設定を追加した所、エラーなくファイルアップロードできるようになりました。

```ruby:config/environments/production.rb
  config.paperclip_defaults = {
    :bucket => ENV['S3_BUCKET_NAME']
  }
```
ターミナルで以下を実行して環境変数を設定。
```heroku config:add S3_BUCKET_NAME=bucket名```

以上です。
line monitor > 連続試験 (160215) > 10日の動作 > 改良すべき点

line monitor
http://qiita.com/7of9/items/028556c5a819a6a8de96

```txt:動作確認
Raspberry Pi2 + raspbian
ACアダプタから電源供給
```

実運用で10日ほど連続で動かしたが、安定して動作している。

4800bpsで1秒あたり400文字程度の通信をモニタしている。
4800bpsなのでstart bit, stop bitがある場合8+2, 4800/10 = 480文字程度の通信ができるなかでの400文字。

ログは逐次USBメモリ経由で取得した。

以下は今後改良すべき点である。

- 設定を保持したい
  - 再起動のたびに9600bpsになってしまう
- 1日1ファイルでサイズが大きくなる
  - 今回のケースでは42MBのファイルができて、扱いにくい

数ヶ月間は改良にかける時間の捻出は難しそう。

上記以外の開発にも結構使用しているが、モニタができるのはやはり開発効率が全然違う。
また、モニタ時にPCが不要なため場所をとらないのもいい。
ofxちょっとめんどくさいAddons

先人達のおかげで手軽にインストールできるのが魅力な openFrameworks の Addons ですが、[OFXcodeMenu](https://github.com/openframeworks/OFXcodeMenu) や Project Generator だけでインストールが完了しないちょっとめんどくさい Addons の設定方法をまとめていこうと思います。

# ofxOSC

openFrameworks に同梱されてくる Addon。
`Build Settings > Header Search Path` に以下を追加。

```
../../../addons/ofxOsc/libs
../../../addons/ofxOsc/libs/oscpack
../../../addons/ofxOsc/libs/oscpack/src
../../../addons/ofxOsc/libs/oscpack/src/ip
../../../addons/ofxOsc/libs/oscpack/src/ip/posix
../../../addons/ofxOsc/libs/oscpack/src/ip/win32
../../../addons/ofxOsc/libs/oscpack/src/osc
../../../addons/ofxOsc/src
```

# ofxSyphon

[astellato/ofxSyphon: An OF add-on for using the Syphon framework.](https://github.com/astellato/ofxSyphon)
`Build Settings > Framework Search Path` に以下を追加。

```
../../../addons/ofxSyphon/libs/Syphon/lib/osx
```

[ofxSyphonの導入で | tatami-code](http://tatami-code.com/xcode/ofxsyphon%E3%81%AE%E5%B0%8E%E5%85%A5%E3%81%A7/)
[blog.rettuce.com » ofxSyphon追加時に.frameworkをコピーしてつかう。](http://blog.rettuce.com/en/openframeworks/ofxsyphon_copy_framework/)

【追記】
Project Generator で ofxSyphon 入れたらこれやらずともできた（oF9.0 / Xcode 7.01 / OS10.10.5）。

# ofxEdsdk
[kylemcdonald/ofxEdsdk: Interfacing with Canon cameras from openFrameworks for OSX. An alternative to ofxCanon and CanonCameraWrapper.](https://github.com/kylemcdonald/ofxEdsdk)
`Build Settings > Framework Search Path` に以下を追加。

```
../../../addons/ofxEdsdk/src/EDSDK/Framework
```

# ofxMultiKinectV2

[hanasaan/ofxMultiKinectV2: Connecting multiple Kinect For Windows V2 sensors to one Mac](https://github.com/hanasaan/ofxMultiKinectV2)
![1.png](https://qiita-image-store.s3.amazonaws.com/0/58558/989d3658-3337-3622-2a3e-253fa184ea3b.png)

付属のサンプルを myApps にコピーした状態。`libturbojpeg.dylib` と `usb-1.0.0-superspeed.a` のリンクが外れてしまっている（グレーになっている）。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/58558/2ea402a1-e772-2a54-3a6f-ff080b1adabe.png)

github の README にあるように、`usb-1.0.0-superspeed.a` を `ofxMultiKinectV2/libs/libusb/lib/osx` から、
`libturbojpeg.dylib` を `ofxTurboJpeg/libs/turbo-jpeg/lib/osx` からそれぞれ Finder から `Build Phases > Linked Frameworks and Libraries` にドラッグ&ドロップで追加。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/58558/b24378b7-8e0e-4096-d928-73e559288323.png)

```
error: /Users/***/of_v0.9.0_osx_release/apps/ofxTurboJpeg/libs/turbo-jpeg/lib/osx/libturbojpeg.dylib: No such file or directory
```

この時点でこんな↑エラーが出る。`Build Phases > Copy Files` の `libturbojpeg.dylib` もリンクが外れてしまっているので左のメニューから追加。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/58558/c73506ec-555e-6f41-bebb-34738409281a.png)

`libturbojpeg.dylib` と `usb-1.0.0-superspeed.a` がプロジェクト直下にあるので、サンプルに倣って frameworks にまとめるとかっこいい気がする。

![5.png](https://qiita-image-store.s3.amazonaws.com/0/58558/29ebc8dd-5d39-a96c-52f2-c2de1add84c9.png)

これでビルドできた（oF9.0 / Xcode 7.01 / OS10.10.5）。

思い出したらまた追加していきます。コマンドで出来る方法とかあったら知りたい…。
Raspberry Pi > シリアルナンバーを見る > /proc/cpuinfo > Serial

Adafruit Pi Zero contest 2016の準備においてPiZeroの固有番号を知りたくなった。

http://raspberrypi.stackexchange.com/questions/2086/how-do-i-get-the-serial-number

> The serial number can be found in /proc/cpuinfo; for example,

上記リンクの Serial というのがそれなのだろう。

```
Serial          : 000000000000000d
```

リンクにはpythonコードもある。
複数画面A、Bから呼ばれる画面Cを閉じた時にunwindを使って遷移元に戻す方法

## やりたいこと
複数画面A、Bから呼ばれる画面Cを閉じた時にunwindを使って遷移元に戻す。
遷移元の「@IBAction func unwind(segue: UIStoryboardSegue)」で処理を行いたいので「dismissViewControllerAnimated」は使いたくない。

## 画面
![スクリーンショット 2016-02-15 14.36.10.png](https://qiita-image-store.s3.amazonaws.com/0/85010/5d156509-c610-d1d1-10bb-a5d68148abf5.png)

左上：画面A 右上：画面B 下：画面C

## やり方
単純に「@IBAction func unwind：」の名前を同じにするだけでできた。
ここまで辿り着くのに凄い時間かかったよorz

```lang:画面A
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func unwind(segue: UIStoryboardSegue)
    {
    }

    @IBAction func click(sender: UIButton)
    {
        self.performSegueWithIdentifier("toC", sender: nil)
    }
    
    @IBAction func click2(sender: UIButton)
    {
        self.performSegueWithIdentifier("toB", sender: nil)
    }
}
```

```lang:画面B
class View2Controller: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    @IBAction func unwind(segue: UIStoryboardSegue)
    {
    }
    
    @IBAction func click(sender: UIButton)
    {
        self.performSegueWithIdentifier("toC", sender: nil)
    }
}
```

```lang:画面C
class View3Controller: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
```
[ionic]iOS9でGoogleMapのマーカーが反応しなくなるバグの対応

ionicを利用したwebアプリ内で、Google Mapのマーカが反応しなくなるバグが発生し、バグ対応ではまったのでメモ。

#**現象**
iOS9でionicを利用したアプリ(webも含む)上のGoogle Mapを開き、マップ上のマーカーをタップすると、最初のタップではポップオーバー(情報ウィンドウ)が表示されるが、数回タップすると、マーカーが反応しなくなる。

<img width="613" alt="歴食2.png" src="https://qiita-image-store.s3.amazonaws.com/0/92492/a1326312-81b4-e896-b370-87a270b4b217.png">

利用したgoogle mapのライブラリ
*https://github.com/angular-ui/angular-google-maps*

#**原因**
iOS9の場合のみ、ionic.jsのファンクション"isElementTapDisabled()"でエラーが発生する。
何かしらの原因でisElementTapDisabled内のwhileのループでstuckしてしまう。

#**解決方法**
ionic.jsを以下のように修正する。

```ionic.js
isElementTapDisabled: function(ele) {

    if (ele && ele.nodeType === 1) {
      var element = ele;
      /* ここから追加 */
      if ($(element).parents('[data-tap-disabled]').length) {
        return true;    
      }
      /* ここまで */
      /*
      while (element) {
        if ((element.dataset ? element.dataset.tapDisabled : element.getAttribute('data-tap-disabled')) == 'true') {

          return true;
        }
        element = element.parentElement;
      }*/
    }
    return false;

},
```


*参考*
*https://github.com/driftyco/ionic/issues/4506*
ansibleメモ

要件としてそんなにあるかどうかは分からないけど折角やったのでメモ。

■ansible実行サーバ上にファイルがあればリモートへコピー

    - name: check file
      local_action: stat path=/file/path/yeah
      register: file
      sudo: no
      ignore_errors: True

    - name: if exist deploy
      copy: src=/file/path/yeah dest=/file/path/yeah_remote owner=foo group=foo
      when: file.stat.exists

local_actionはローカルで実行してねーの意
registerはtask実行結果を格納する変数を宣言できる
sudoはtaskごとにも書ける
ignore_errorsはエラー出ても処理続行(存在しないファイル指定してもエラーにはならなかったような気がするけど)

copyはsrcにローカルのファイルパス destにリモートパス
whenは値が真ならこのtask実行

statはansibleのモジュールで色々できるっぽい
iOSバイナリの容量をチェックする

# アプリのサイズは小さく

WiFiなしでダウンロードできるアプリのサイズには、昔は制限がありました。（数年前は、20MBまでしかダウンロードできませんでした…隔世の感がありますね）
~~今ではその制限はとっぱらわれました。~~
今では制限が広がり、150MBまでダウンロードできるようになっています

とはいえもちろん今でも小さいほうがいいです。
でかすぎると、TestflightでもWiFiなしではダウンロードできなくなるなり、開発にも影響が。

というわけで、容量のチェックの方法を。
犯人はほとんどの場合、画像か音声ファイルでしょう。


## 実際の容量は？

iTunes Connectにアップロードしていれば、確認することができます

iTunesConnectで該当のアプリのページを開き、アクティビティ→該当のバージョンを選択すると、以下のような画面に。
![スクリーンショット 2016-02-15 14.22.46.png](https://qiita-image-store.s3.amazonaws.com/0/98954/894e3a0b-ab1c-41e5-3673-7d662bdc4b0d.png)


より正確には、「AppStoreファイルのサイズ」をクリックします。
![スクリーンショット 2016-02-15 14.23.00.png](https://qiita-image-store.s3.amazonaws.com/0/98954/65168d37-3fa6-f408-5b0f-fbf6b3b1c3d7.png)

ここにある「ダウンロードサイズ」というのは、ダウンロード時にネットワークを経由するファイルサイズ、
「インストールサイズ」は、端末内でアプリが容量を占めるサイズです。
（ダウンロードした後、インストールして実行可能な形に展開されるわけなので、インストールサイズの方が大きくなります。）

ちなみにAppStoreで表示されている「サイズ」は「インストールサイズ」の方です。



## もっと細かく

手順を追って、もっと細かく調べてみましょう
（以降のスクショは、前項のアプリとはまた別のものです）

XcodeでWindow→Organizerを選択
![スクリーンショット 2016-02-15 14.20.22.png](https://qiita-image-store.s3.amazonaws.com/0/98954/5f611b3a-27f0-dd07-e555-cd542be19979.png)

すると、今まで作ったアーカイブの一覧が出てきますよね。
ここで右クリック→Show in Finder とすると
![スクリーンショット 2016-02-15 14.20.57.png](https://qiita-image-store.s3.amazonaws.com/0/98954/2678b214-2c69-a7ae-6e4d-7df08b74a164.png)

アーカイブのファイルそのものが見えます。
この時点で203MBとかありますが、慌てちゃいけません。これはdSYMなどが含まれていますので、実際のサイズよりかなり大きくなります。
![スクリーンショット 2016-02-15 14.21.14.png](https://qiita-image-store.s3.amazonaws.com/0/98954/8f81c024-942f-7e74-e783-4492d4f62dc8.png)

で、このファイルを右クリック→「パッケージの内容を表示」を選択
![スクリーンショット 2016-02-15 14.21.31.png](https://qiita-image-store.s3.amazonaws.com/0/98954/3267c923-65e9-b9f7-8e03-8162b84db55b.png)

すると、中はこんな感じ
![スクリーンショット 2016-02-15 14.21.52.png](https://qiita-image-store.s3.amazonaws.com/0/98954/3877fda5-e219-dc47-3060-55907196c842.png)
dSYMsフォルダの中にはdSYMが。今回の場合、これだけで63MBありました。
ですから実際のダウンロードサイズは140MBくらいになるはずです

アプリの実体ともいうべき部分は、Products/Applications/XXXX.app になります。
これをさらに右クリック→「パッケージの内容を表示」した結果がこちら。
![スクリーンショット 2016-02-15 14.22.05.png](https://qiita-image-store.s3.amazonaws.com/0/98954/844713e9-c72d-85b9-d5f0-71a39038cb4a.png)

サイズ順に並べれば一目瞭然ですね。
サイズの大きいファイルから確認していけば、効率的なダイエットができます。
今回の場合、最大の14.6MBとあるのは実行ファイルでした。
実行ファイルはほとんど減らせる見込みはないですから、
2番目以降の画像や音声ファイルを圧縮できないか考えるわけです。

なお、Image assetsや外部フレームワークのファイルなんかも全部ここにあります。
仮素材や、不要になったファイルが残ったままになってた…なんてことに気づくこともあるでしょう。一度チェックすると良いと思います
RDSのVPCの場合のセキュリティグループの設定

## はじめに

RDS（mysql選択）を使用してVPCの場合の同一セキュリティグループにアクセスできるようした時のメモです。

すでにインスタンスは起動されていることを前提とします。

RDSの作成の仕方については前に書きましたのでそこらへんんでも参考にしてください。
[RDS Mysql 作成方法](http://qiita.com/mogetarou/items/a26316625219c6ea4298)

## 概要
1. mysqlのポートの開放
2. RDSにセキュリティグループを適用

## 詳細
----
#### mysqlのポートの開放
EC2のダッシュボードを開きます。
インスタンスに割当されているセキュリティグループを選択します。
下の方にタブで説明、インバウンド、アウトバウンド、タグがありますので、インバウンドを選びます。
編集のボタンを押しルール追加でタイプをmysqlを選択します。送信元に自分のグループ名を設定します。あとは保存でOKです。

----
#### RDSにセキュリティグループを適用
RDSの画面を開きます。起動している場合はインスタンスの操作から変更を行います。新規作成する場合はDBインスタンス起動を選んでください。あとはセキュリティグループを先ほど変更したグループを設定すればOKです。

## あとがき
これで外からアクセスできないRDS(mysql)ができます。mysqlworkbech等使用している方の場合SSH経由でmysqlに接続ができますのでそちらを使用すると良いかと思います。
BootstrapのモーダルでjQueryUIのDatepickerのz-index問題を解消する小技


モーダル中の入力フォームでDatepickerを使う際に、Datepikcerがモーダルの後ろに隠れてしまう問題を解消したい。

この問題の原因はDatepikcerに指定されているz-indexの値がモーダルのz-indexより小さい値で設定されていることが原因。この問題の解消手段は幾つかある。

### 今まではこうだった。

この問題お決まりの解消方法となっているので今更書くべきことではないが、以下の様なCSSを付与して解消する。

```
.ui-datepicker { z-index: xxx(数値) !important; }
```

CSSでz-indexを大きな値で固定する。これで解消可能なら手っ取り早いが、モーダルのz-indexが変化したりすることもあって調整が難しかったりする。

そうだ。z-indexは動的に設定させよう。

### JSを使って動的にz-indexを指定させる処理にする

というわけで動的にする処理をさくっと書く。

```
$('input.datepicker').datepicker({
    beforeShow: function(input, inst){
        setTimeout(function(){
            $('#ui-datepicker-div')
            .css(
                'z-index',
                String(parseInt($(input).parents('.modal').css('z-index'),10) + 1)
            );
        },0);
    }
});
```

何をしているかというと、選択されたinputのz-indexを取得してそれを+1した値をDatepikcerのz-indexとして与えている。いちいちz-indexの値を考えなくても良くなるのでシンプルです。

#### 思う所

setTimeoutにCSSの!importantと同じ役目をさせているのがちょっと気持ち悪いが、cssTextで!importantを設定するとそれまで設定されたスタイルを捨ててしまう。

捨ててしまうスタイルを再設定するのがめんどくさいのでsetTimeoutで回避しているのがちょっとモヤモヤ\_(:3」∠)\_
[Swift] UIGravityBehaviorを使って、重力をつくる

#開発環境
Xcode 7.2.1



#コード
まずCoreMotionをimportします

```swift:ViewController.swift
import UIKit

class ViewController: UIViewController {

    //重力を掛けたいUIViewを@IBOutletで関連付け
    @IBOutlet var balls: [UIView]!
    
//    DynamicAnimatorを変数宣言する
    var dynamicAnimator: UIDynamicAnimator!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.startGame()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func startGame() {
//        UIDynamicAnimatorのクラス群のUIDynamicBehaviorを使う
        let gravityBehavior = UIGravityBehavior(items: self.balls)
        
        dynamicAnimator = UIDynamicAnimator(referenceView: self.view)
        dynamicAnimator.addBehavior(gravityBehavior)
        
//        衝突のシュミレーションのためにUICollisionBehaviorを使う
        let collisionBehavior = UICollisionBehavior(items: self.balls)
        
      
        
        
//        外枠にボールがぶつかれば跳ね返るようにする
        collisionBehavior.translatesReferenceBoundsIntoBoundary = true
        
        
        dynamicAnimator.addBehavior(collisionBehavior)
        
        
        
    }


}
```

#サンプルコード
https://github.com/ShinokiRyosei/testGravityAndCollisioin
まだAppleの中間証明書で消耗してるの？ (2016/02/15 - iOSアプリをAppStoreへ申請できない、ipaが作成できない問題の解決)

### 問題

* 今日(2016/02/15)から突然Appleの開発用証明書の開発元が無効になっており、AppStoreへの申請やipaファイルのExportができなくなっていた

#### 原因

* Apple's WWDR Intermediate Certificateの有効期限が2016/02/15の3:56で切れていた

#### 解決方法

1. Keychain Accessを開く
2. メニューの「表示」→「有効期限の切れた証明書を表示」を選択
3. システムのキーチェーンを開いて、有効期限切れのWWDR Certificateを削除する
4. 新規の[WWDR Certificate](https://developer.apple.com/certificationauthority/AppleWWDRCA.cer)をインストールする

参考: https://www.reddit.com/r/iOSProgramming/comments/45siza/this_certificate_has_an_invalid_issuer/
[Mac OS X][El Capitan] Apple IDにサインインできなくなったら

# はじめに
MacのOSをEl Capitanに上げてから、iTunes, iCloud, App Storeなど、Mac OS XのあらゆるアプリケーションからApple IDにサインインしようとしたら・・・

- インジケーターがクルクル回ってアプリケーションが固まった！
- いつまで経ってもサインインできない！
- 間違ったパスワードを入れてみるとちゃんとメッセージが返ってくる！

こういった現象が、私の周りで私含め何名かの環境で起きました。
本稿では、このような現象が起きたときの対処方法をいくつかご紹介します。
誰かのお役に立てたのでしたら幸いです。

# 1. シリアル番号を確認する

「Appleメニュー」→「このMacについて」から、シリアル番号が確認できます。
Apple IDにサインインできない場合、このシリアル番号が読めなくなっている可能性があります。
Appleでシリアル番号を書き込んでもらうことで解決できるかも知れません。
<img width="698" alt="スクリーンショット 2016-02-15 9.45.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/83524/38cfc29b-364c-bf79-8d4a-48ff3a02db2b.png">


# 2. ライブラリからアカウントの情報を消去する

具体的には、以下の手順で行います。

1. Apple IDにログインしようとしているアプリケーションがある場合、それらを強制終了します。
2. 以下のコマンドを実行します。

> sudo pkill -9 -f Account
> sudo rm $HOME/Library/Accounts/*

これで解決した例を私の周りでも見たので、試してみる価値はあると思います。

# 3. 最終手段：Appleのサポートに電話する
[こちらのコメント](http://qiita.com/chano2/items/027d9b101a2591235125#comment-a39f7fbad25fd3ab1b80)にて情報をいただきました。ありがとうございます。


# 番外編：クリーンインストール
私は2やコメントで教えていただいた3の方法を知らずに、決死の覚悟でこのクリーンインストールをやりました。
やり方は、こちらを参考にしてください。
https://support.apple.com/ja-jp/HT204904

# おわりに

重ねてですが、本稿が誰かのお役に立てたのでしたら幸いです。
他に何かこの現象に関する情報をお持ちの方がいらっしゃいましたら、コメントをお願いします。

また、ディスカッションをチェックすると新しい情報があるかも知れません。
https://discussions.apple.com/thread/7257582
https://discussionsjapan.apple.com/thread/10165928
時々使って忘れるコマンド



## 一括処理

### サブディレクトリを含めたgzファイルを一括解凍

```shell-session
find . -name "*.gz" -print0 | xargs -0 -n1 gunzip
```

## git
### マージ済ブランチを削除（masterとdevelopは除外）
```shell-session
git branch --merged | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d %
```
休職の仕方 (生活編)

[前回の記事](http://qiita.com/kokoron-yami/items/314f06a1b2c95fd8af92)から間がずいぶん空いてしまいました。

## 休職中にやること

### 休息をする

休職中なので当然休息をする事がメインになります。ただ、人によっては何が休息になるのかが難しいでしょう。睡眠時間を増やすというのは手ですが、人間は無限に寝ていられるわけでもありません。メンタルを崩す人間は得てして睡眠が狂ってる場合が多いので、睡眠時間を増やす・睡眠のリズムを整えるのはもちろん重要なのですが。

では、寝る以外には何が休息にあたるのでしょうか。これは精神状態・エネルギーの枯渇度合い・本人の性質次第で全く変わるはずですが、僕の事例を書きますと、アニメを見る、漫画を読む、位までは休息になりました。特に日常系と呼ばれるようなタイプのアニメは視聴しやすいです。ポイントは考え事をしなくて済むという点です。

僕が休職し始めてから二ヶ月は考え事をしだすと、確実に悪い方向に行きました。これでは休息になりません。実はこの点でゲームは休息に向いていません。特にアクションゲームなどの場合流れ作業でプレイできたりすると、ゲームをしながら考え事ができてしまうのです。つまり、考え事をしてしまう余地がなく、かつエネルギーを消費しないものがよいのです。

ぼーっとしていると考え事が捗ってしまうので、強めの安定剤でむしろ頭が働かない位の方がちょうどよいかもしれません。

### 定期的にクリニックに通う

一週間に一度クリニックに通います。状態の確認、薬の調整などが行われます。脳内物質の状態を適切にモニタリングする手段はまだ発明されてないため患者の症状、外的な挙動などから推測して薬を調整します。鬱病を煩って休職するようなタイプの人は強めの薬(SSRIだのSNRIだの)を処方されていると思いますが、睡眠導入剤や安定剤のたぐいも重要になってきます。被害妄想、恐怖感、焦燥感などのたぐいはある程度は安定剤でコントロールができるようです。適切なコントロールの為にも医師に指定されたタイミングで通う必要があります。

ただ、一週間に一度クリニック通うと、それだけで交通費・診療費かかるんですよね。薬代は別に一ヶ月に一度通うのと総計では変わらないわけですが。

### 書類を提出する

休職は、医師の診断書に指定された期間の間行われます。この期間は割と短めに指定される、たとえば一ヶ月ないし二ヶ月だったりするので、頻繁に書類を会社に提出しにいく必要があります。

また、別の理由もあって一ヶ月単位での書類の提出が必要になります。これは健康保険から支払われる傷病休暇の給付金があります。給料の60%が出ますが、これ期間は実質、一ヶ月に一度提出することになります。実質というのは、それ以上の期間を指定してもいいんですが、一ヶ月に一度単位じゃないと色々と面倒です。

### 職場復帰の為に

僕はまだ到底、職場復帰のできる状況ではないですが、それでも職場復帰を考えないわけにはいきません。どうしても生活費の問題なんかが生じてしまうのです。回復状況次第ですが、ある程度は職場復帰に向けて動き出さなければいけません。

休職せざるを得なくなった要因を取り除くというのがおそらく必要になります。そうじゃないと、再度休職という事になりかねません。

僕の場合は主に、人間関係のトラブル、部署間の対立、ワークライフバランスの乱れ、効率の悪い長時間労働、チームの人との圧倒的な考え方の違い、そして何より自分のモチベーションが下がる案件を強要されることが原因でした。これらをどうにかできるのでしょうか。僕の長い冬休みの課題はあまりにも難しいものです。

## こまったこと

休職をしていて困ったことが発生しています。

### お金の問題

カードローン200万円の枠があるんですが、既に130万円強を借金しています。まだ一月・二月分などの給付金が入ってないので、給付金が入ればある程度は回復するんですが、それでもそれなりにピンチになってきています。年金暮らしの父を頼るのは、心労をかける、生活に負担をかけるなどの理由から中々そういう手段をとるわけにもいきません。

### 休息だけしてしまう

昨日から精神状態が悪化していたことと、睡眠状態がおかしくなって夢見が悪かったせいなのか、今日はやけに現実を直視してしまう日になっています。

ただ、気づいたのですが、焦燥感や不安感から現実に引き戻されるのは、現実をないがしろにしすぎているというシグナルなのかもしれません。焦燥感ドリブンで現実について考えるのはあまり健全ではありませんし、僕が休職に陥った遠因の一つでもあるので、ほどほどにしないといけないですが、それでも現実を取り戻せたのは、今回だけ見れば良かったのかもしれません。

職場復帰に向けてどういう風に課題を解決していくか、少しは方向性も見えていて、自分のやりたい案件、モチベーションの上がる案件に食らいつくための技術力を磨くというのは必要だなと考えています。

一番いいのは、何らかの手段で休息と現実と闘うバランスを取れるようになることです。なんとかしないといけません。
arduinoでフィードバック制御

#概要
arduino unoでフィードバック制御をやってみた。

#写真
![MVC-017S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/b13f0e03-9021-6e15-c31c-6381e80b5ea1.jpeg)
#動画
https://www.youtube.com/watch?v=CM772ZaE47s
#回路図
![robo3.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/74fa76e1-7f4e-68c5-3932-db1997674aec.jpeg)
#サンプルコード
```
#include <SPI.h>
#include <L3GD20.h>
#include <PID_v1.h>

unsigned long time;
L3GD20 gyro(10);
float dc_offsetY = 0;
float rateY;
float prev_rateY = 0;
float angleY = 0;
int sampleTime = 10;
double Setpoint = 0;
double Input = 0;
double Output = 0;
int rec[10];
PID robo(&Input, &Output, &Setpoint, 200.0, 50.0, 30.0, REVERSE);
void setup()
{
	int sampleNum = 1024;
	int X, Y, Z;
	float x, y, z;
	Serial.begin(115200);
	pinMode(4, OUTPUT);
	pinMode(7, OUTPUT);
	Setpoint = 250.0;
	robo.SetOutputLimits(-255.0, 255.0);
	robo.SetSampleTime(sampleTime);
	robo.SetMode(AUTOMATIC);
	Serial.print(" start\t");
	gyro.begin();
	Serial.println(" ok!");
	for (int n = 0; n < sampleNum; n++)
	{
		Y = gyro.read(L3GD20_Y_H);
		y = (Y << 8) | gyro.read(L3GD20_Y_L);
		dc_offsetY += y;
	}
	dc_offsetY = dc_offsetY / sampleNum;
	Serial.print(" Y: ");
	Serial.print(dc_offsetY);
	for (int i = 0 ; i < 10 ; i++)
	{
		rec[i] = 0;
	}
}
void loop()
{
	int X, Y, Z;
	float x, y, z;
	int count;
	int i;
	if (millis() - time >= sampleTime)
	{
		time = millis();
		Y = gyro.read(L3GD20_Y_H);
		y = (Y << 8) | gyro.read(L3GD20_Y_L);
		rateY = (y - dc_offsetY) / 100;
		angleY += ((float) (prev_rateY + rateY) * sampleTime) / 2000;
		rec[0] = rateY - prev_rateY;
		prev_rateY = rateY;
		if (angleY < 0)
		{
			angleY += 360;
		}
		else if (angleY >= 360)
		{
			angleY -= 360;
		}
		count = 0;
		for (i = 0; i < 10; i++)
		{
			if (abs(rec[i]) < 1)
			{
				 count++;
			}
		}
		if (count > 9)
		{
			Setpoint = angleY;
			Serial.print(Setpoint);
			Serial.println(" setpoint");
		}
		for (i = 9; i > 0; i--)
		{
			rec[i] = rec[i - 1];
		}
		Input = angleY;
		if (robo.Compute())
		{
		}
		else
		{
			Serial.print(" ng ");
		}
		int speed = Output;
		if (speed > 0)
		{
			digitalWrite(4, HIGH);
			analogWrite(5, 256 - speed);
			analogWrite(6, 256 - speed);
			digitalWrite(7, HIGH);
		}
		else
		{
			digitalWrite(4, LOW);
			analogWrite(5, -speed);
			analogWrite(6, -speed);
			digitalWrite(7, LOW);
		}
	}
}
```
教育資料（テスト問題付き）を作成した時の自分の知見

## 知見

1. 何を理解して欲しいか、が決まるのでテスト問題を先に作成したほうが良い。
1. 長編になると内容に漏れが出るので、最初にマインドマップのような全体を見渡せるもので作成したほうが良い。
    * xmindで作成した。見栄えは良いが印刷時に固まる問題を経験。
1. テスト問題は選択式ではなく、記入させるほうが`カン`で正当するのを防げる。
1. 充分理解している内容でもググって裏を取る。
1. 「〜とは？」の項目については画像検索が大いに役立つ。自分が一から資料を作るより参考にさせて頂くのが吉。

## ツールについて

* Gitbookやredmineなど考えたが、印刷のことを考えるとコレジャナイ感が出た。
* `LibreOffice Writer`をubuntu16.04で使うと画面がピカチューバリにチラついて使い物にならない、保存すると破損するというバグに遭遇した。(libreoffice-writer 5.0.2-0ubuntu7)
* plaintextで記載し`LibreOffice Writer`で開き印刷して渡した。
* 画像は教育時に見せるだけにして後でURLを渡して見てもらうようにした。
    * 後で更新が楽。
[ jq ] keyの値にドット(.)が入っているときはどうするか

jqコマンドは便利です。もっと使いこなしたい。

## 0. 普通の使い方

こういうファイルがあったとする

```json:testfile
{
  "result": {
    "hostname": {
      "testserverlocal": {
        "status": "fail"
      }
    }
  }
}
```

このようにjqコマンドを使うと`status`の値を取り出せる

```bash
cat testfile | jq .result.hostname.testserverlocal.status
=> "fail"

##あるいはrオプションでダブルクォーテーション消す
cat testfile | jq -r .result.hostname.testserverlocal.status
=> fail

```

## 1. keyにドット(.)があるときはどうする？

```json:testfile02
{
  "result": {
    "hostname": {
      "test.server.local": {
        "status": "fail"
      }
    }
  }
}
```

この場合は`cat testfile2 | jq .result.hostname.test.server.local.status`だとうまくいかない。マニュアルを読んでみた。このマニュアル(https://stedolan.github.io/jq/manual/ ) の中にこういう記述がある。

```text
The .foo syntax only works for simply keys i.e. keys that are all alphanumeric characters. 
.[<string>] works with keys that contain special characters such as colons and dots. 
For example .["foo::bar"] and .["foo.bar"] work while .foo::bar and .foo.bar would not.
```

これによれば`cat testfile2 | jq .result.hostname.["test.server.local"].status`とすれば良いのかな？と思うが、やってみると失敗した。。。。その後ググったり試行錯誤をしてみた。結局下記のようにするとうまくいきました。他のやり方あればぜひ教えていただきたいです。。。(と書いたら情報をいただき大変感謝です)。

```bash
cat testfile2 | jq .result.hostname | jq '.["test.server.local"]'.status
=> "fail"

```

- `.["foo.bar"]`ではなく`'.["foo.bar"]'`とする(シングルクォートで囲む)
- ネストされているキーに対してこの手法は使えないのでjqをパイプでつないでみた。


##2. 追記(いろいろな方法)

`jq .result.hostname'["test.server.local"]'.status`と書く。
またはクエリ全体をシングルクォートで囲んで`jq '.result.hostname["test.server.local"].status'`と書く。
要するに`hostname`というキーの要素を指定するときにドット(.)でつなげないで直接つなげる。
下記2種類のクエリ指定でどちらも同じ結果が返った。

```bash
cat testfile2 | jq '.result.hostname["test.server.local"].status'
=> "fail"

cat testfile2 | jq .result.hostname'["test.server.local"]'.status
=> "fail"


```
PHPで出力した表示が文字化けしたとき

# PHPで出力した文字が化けるときの対策
php.ini内にて、default_charsetをUTF-8に指定してあげれば良い。
何も変更していない状態だとコメントアウトされているはずなので、こいつを生かしてやればOK.

```
; PHP's default character set is set to empty.
; http://php.net/default-charset
default_charset = "UTF-8"
```

ファイルの場所はUbuntu14.04の場合、
/etc/php5/apache2/php.ini
にあるかと。


# 別の策
PHPにてheader関数を利用してUTF-8を別途指定する。
スクリプトごとに指定するのは面倒ではあるが、知識としてメモしておく。

```php
<?php
header("Content-Type: text/html; charset=UTF-8");
?>
```
BPSの通信量の話


###ビット/秒
ビット/秒と書いたり、英語の"bits per second"を略してbpsやb/sと書いたりする。
###バイト/秒
バイト/秒と書いたり、bを大文字にしてBpsまたはB/sと書くことによってバイト毎秒として扱われる場合も多い
###変換方法
1biteは8bitなのでバイト/sにする場合は、変換が必要。
8Mbps → 1MBps
10Mbps → 1.25MBps

1.25MBpsの場合

| ファイル容量| 転送時間 |
|:-----------|:------------|
| 12.5M   |10秒|
| 125M|100秒 |
| 1000M(1G)|800秒(14分) |

12Mのファイルを転送するのに、10秒かかる。
100Mだと100秒かかる。
1Gだと14分かかる。

日本はネットワークが速いので、開発者が普段から意識することはないと思いますが、知っているにこしたことはない話です。
Michael Abrash Interview 11

http://qiita.com/7of9/items/9aeed78133d9b65f931e
の続き
Michael Abrash Interview:
https://www.youtube.com/watch?v=a7My8zbDNRI&list=PL_MJualihC5AxdlHgVUROYKbNAaPJ5PE4&index=2)

(4:57-)
Now, that's more true now. <font color=red>XXX1</font> never has been what I am working on. Because for the VR, if hardware doesn't work perfectly with the software, you don't have the experience you wanna have.

(5:06-)
So, it turns out that there are specific things you can do until the hardware enables that would happen. In order to get the hardware <font color=blue>(do?) right thing</font>, software people have to participate in the process.

(5:16-)
I'll give you an example, which is that <font color=blue>realisticly</font> Quake. ,as it came out, could not be existent till the Internet was fully inexistent <font color=red>XXX2</font> persistence servers.


赤文字ははっきり聞き取れない部分。
青文字はそのように聞き取れるが、文法的にしっくりいかない部分。
[ionic][cordova]バイブレーション機能を利用する

バイブレーション機能を利用して、タップした時のフィードバックとして振動させる方法です。

#1.プラグインを取り込む準備をする
```bower.json
{
        :
  "dependencies": {
    "angular-translate": "~2.7.2",
    "angular-translate-handler-log": "~2.7.2",
    "angular-translate-loader-static-files": "~2.7.2",
    "ngCordova": "~0.1.23-alpha"  /* ここを追加 */
  }
        :
}
```

```package.json
{
        :
  "cordovaPlugins": [
    "cordova-plugin-device",
    "cordova-plugin-console",
    "cordova-plugin-whitelist",
    "cordova-plugin-splashscreen",
    "com.ionic.keyboard",
    "cordova-plugin-vibration"  /* ここを追加 */
  ],
        :
}
```

#2.プラグインを取り込み、環境を再構築する
`npm install`
`ionic state restore`

#3.バイブレーション起動用サービスを作成する
ブラウザでテストしている際にエラーにならないように、Android端末でのみバイブレーションが起動するようにします。

```hage-services.js
service.factory('HageService', function ($cordovaVibration) {
  return {
    // Android端末でバイブレーションを使用する
    vibration: function(time) {
      if (navigator.userAgent.match(/Android/i)) {
        $cordovaVibration.vibrate(time);
      }
    }
  }
});
```

#4.バイブレーションを起動する
```hage-ctrl.js
controller.controller('HageCtrl', function ($scope, HageService) {
  $scope.vibration = function(){
    HageService.vibration(50);
  }
}
```

```hage.html
<div ng-click="vibration()">
```
bin/railsを実行するときに、Springを起動しない


`./bin/rake`や`./bin/rails`を実行すると、Spring Serverが自動で立ち上がるが、本番環境などでは、メモリーを食うため、起動したくない。そんなとき`DISABLE_SPRING=1`を追加すると、Springを起動せずに実行できる

```console
$ DISABLE_SPRING=1 RAILS_ENV=production ./bin/rails console
```

# 参考
http://stackoverflow.com/questions/30302021/rails-runner-without-spring
画像リンクにホバーでマウスカーソル(指マーク)を表示

モーダルウィンドウなど、画像クリックで開きたい際
マウスカーソルがデフォルトだとリンクになっているかわからんぞって時
# cursorプロパティを使う

■html

```
<p><a class="modal_open img_link"><img src="img/test.jpg></a></p>
```
■CSS

```  
img_link {
 cursor: pointer;
}
```
## サンプル
![cssなし.jpg](https://qiita-image-store.s3.amazonaws.com/0/109842/8c76ea55-64c1-dac0-10a6-3fe8d1c3f818.jpeg)![cssあり_r2_c1.jpg](https://qiita-image-store.s3.amazonaws.com/0/109842/7e95c35b-7bee-9bb8-ad2a-c3d1ed47cc3e.jpeg)

## cursorプロパティのおまけ
他にもいろんな値(マウスカーソルの種類)があるみたいだ

pointer　指カーソル
crosshair　十字カーソル
move　移動カーソル
text　テキスト編集カーソル
wait　待機・処理中カーソル
ターミナルのマウスポインタが ＋（プラス）になってしまったら

![4ff8d0442d230f8b3bc04b6bf253a0b9.gif](https://qiita-image-store.s3.amazonaws.com/0/30241/900ca80d-429b-248a-faa1-dc22c5513a20.gif)

**⌘ R**

もしくは、

**[表示] - [マウスレポーティングを許可]**

![スクリーンショット 2016-02-15 12.38.15.png](https://qiita-image-store.s3.amazonaws.com/0/30241/a2676793-39dd-6c14-2053-d872bd4b3e0b.png)







いやー焦った
2/15からiOSアプリの Code Sign に失敗する問題

記事の内容はこちらを参照してください。
https://mishimay.github.io/948e858e4cd36ca72146/
<!--

アプリ開発用に作った証明書が2/15から無効になってしまいました。
 ![315b14f6171cf177f1b7913821b35ab9.png](https://qiita-image-store.s3.amazonaws.com/0/23679/6d728b98-b5bf-a767-6a84-d3e66d81f381.png)


開発者向けの中間証明書 (WWDR Intermediate Certificate) の期限が 2016-02-15 03:56:35 (日本時間) に切れてしまったのが原因なので、この中間証明書の更新作業が必要です。

1.  https://developer.apple.com/certificationauthority/AppleWWDRCA.cer をダウンロードし、ダブルクリックしてキーチェーンに入れる
2. キーチェーンの「表示」->「有効期限の切れた証明書を表示」で期限切れの証明書を表示
3. 左下の分類で「証明書」を選択

    ![c90b52083b207aa8a6f9e59d67fc9cf9 2.jpg](https://qiita-image-store.s3.amazonaws.com/0/23679/7502e652-8d40-d061-705d-84cbbbffd90e.jpeg)

 
4. 「ログイン」タブと「システム」タブから期限切れの Apple Worldwide Developer Relations 証明書を削除 

詳しくは以下を参照してください。
https://developer.apple.com/support/certificates/expiration/
https://forums.developer.apple.com/thread/37208


-->
ESP8266 / ESP-WROOM-02 > Link > ESP8266 Hardware Guide @ espressif

[macsbugさん](https://macsbug.wordpress.com/)に教えていただいたリンクが今後もよく見そうなのでこちらに投稿しておく。


ESP8266 Hardware Guide @ espressif
http://bbs.espressif.com/viewtopic.php?f=21&t=412&p=1545#p1545

- ESP8266 System Description
- ESP-WROOM-02 > Schematics and PCB layout design of ESP-WROOM-02

など

ESP-WROOM-01というのもあるようだ。
python3x: select by item number, tuples deconstruction

講義でタプルについて触れたのだが中々面白そうなことができると発見したので備忘録のために。

#Select by item number

例えば以下の様なコードを書いたとする。

```
>>> x = (1, 7, 5)
>>> from operator import getitem
>>> print(getitem(x, 1), getitem(x, 2))
7 5
>>> print(x.__getitem__(1), x.__getitem__(2))
7 5
```

タプルに入っている要素を色んなやり方で取ってこれる。個人的には一番シンプルな`[index]`を使っていたのだが、pythonの`method`という機能を使えば`getitem`を持ってきていじったりすることができると。これは`notation`（`add`, `len`, `==`）とは機能は同じだが実装の仕方が若干異なる。どうやら作った人の自己満でこういうのが生まれたとか聞いたような。

#Select by "unpacking" (=deconstruction of tuples)

ここからが本題。タプルが複数ネストされているコードを見かけた時割りと直感的に要素を取ってくることが出来る。これを_Deconstruction of tuples_と呼ぶらしい。今風に言えばunpacking。

```
>>> x = (1, (2,3), 5)
>>> a,b,c = x
>>> print(b,c)
(2, 3) 5
>>> d, (e,f),g = x
>>> print(e,g)
2 5
>>> x = d, (e,f),g
>>> print(e,g)
2 5
>>> x
(1, (2, 3), 5)
```

タプルの一個目のネストに入ったらその中のタプルは中身を見ずに一つの要素としてみなす、という考え方。だから`a = 1, b = (2, 3), c = 5`になるわけだ。これを使って逆に`x`の中身を新しく用意した変数にアサインさせてコピーを作ることも出来る。素晴らしい。

これを応用すると以下の様な関数を作れるということを発見した。

```
#!/usr/bin/python

# function that returns a tuple
def foo():
    return ('w', 'x', ('y', 'z'))

# function that "deconstructs" a tuple argument
def bar(x, (y, z)):
    assert x == 'd'
    assert y == 'e'
    assert z == 'f'

if __name__ == '__main__':

    # make a nested tuple
    t = ('a', 'b', ('c', 'd'))

    # use tuple assignment
    (m, n, (o, p)) = t
    assert m == 'a'
    assert n == 'b'
    assert o == 'c'
    assert p == 'd'

    # function that returns a tuple
    (m, n, (o, p)) = foo()
    assert m == 'w'
    assert n == 'x'
    assert o == 'y'
    assert p == 'z'

    # function that "deconstructs" a tuple argument
    bar('d', ('e', 'f'))
```

これは関数のreturned valueに予めタプルを入れておいてそれをイジって新しい関数にアサインするという方法だ。`=`ってこんな細かいところにまで手が届いているんだな。

#参考にしたリンク

- [pattern matching and python tuples](http://www.fandev.org/forum/topic/224)
JRubyで中国語形態素解析


# はじめに

FNLP (FudanNLP)は、Javaで書かれた中国語形態素解析器です。これを使ってRuby (JRuby)で中国語形態素解析をやってみます。

# 準備

次のソフトウエアのインストールが必要です。JRubyは、私はrbenv経由で使いました。

* FNLP (「[FNLPで中国語形態素解析](http://qiita.com/xiaotuanzi/items/4c1e0b5e2836a5ff921f)」を参照)
* JRuby
* fnlp-jruby Gem

## fnlp-jrubyのインストール

fnlpをJRubyから使うGemを、bundlerを使ってインストールします。

```rb:Gemfile
gem "fnlp", github: "xiaotuanzi/fnlp-jruby"
```

Gemのインストール

```shell-session
$ jruby -S bundle install
```

# 形態素解析の実行

前もって、FNLPがインストールされているディレクトリを環境変数に設定しておきます。

```shell-session
$ export FNLP_HOME=~/fnlp
```

## Rubyプログラム

```rb:sample.rb
require 'bundler/setup'
require 'fnlp'

# サンプルテキスト
text = <<EOF
妈妈亲了我, 爸爸也亲了我。
我去过好几次北京。
这本书是我借给他的。
你想去哪儿我就去哪儿。
党叫干啥就干啥。
EOF

# 形態素解析器を準備する
fnlp = FNLP::Tokenizer.new

# サンプルテキストを1行毎に形態素解析して結果を表示する
text.each_line do |t|
  puts fnlp.tokenize(t.chomp)
  puts ""
end
```

jrubyで実行します。次のような出力が得られます。単語のうしろに品詞も表示されます。

```shell-session
$ jruby sample.rb
妈妈/名词
亲/动词
了/时态词
我/人称代词
,/标点
爸爸/名词
也/副词
亲/动词
了/时态词
我/人称代词
。/标点

我/人称代词
去/动词
过/时态词
好几/数词
次/量词
北京/地名
。/标点

这/限定词
本/量词
书/名词
是/动词
我/人称代词
借给/动词
他/人称代词
的/语气词
。/标点

你/人称代词
想/情态词
去/动词
哪儿/疑问代词
我/人称代词
就/副词
去/动词
哪儿/疑问代词
。/标点

党叫干/名词
啥/副词
就/副词
干啥/动词
。/标点
```

最後の、「党叫干啥就干啥」以外は、概ね正しいように見えます。
DataBindingおさわりし始めたので自分用メモ



### DataBinding導入

[公式](http://developer.android.com/intl/ja/tools/data-binding/guide.html)によると"DataBindingは`AndroidStudio ver.1.5.0-alpha1`からダヨー"とあり、1.5.0かそれ以前によって変わってくる。

自分用のメモなので、それ以前の部分は省きます。

1.5.0以降であれば、app/build.gradleに以下のように`dataBinding`について記載する。

```groovy:build.gradle
android {
	...
	dataBinding {
		enabled = true
	}
}
```

これだけでDataBindingを使用できるようになる。

### layoutのバインディング

`findViewById()`やそれを置き換えた`ButterKnife`による実装を`DataBinding`による実装に置き換えられる。

まず、レイアウト全体を`<layout></layout>でくくる。

```xml:activity_main.xml
<layout
    ...>
    <android.support.design.widget.CoordinatorLayout
        ...>

    </android.support.design.widget.CoordinatorLayout>
</layout>
```

この`layout`タグの直下に`data`タグを記載する。

```xml:activity_main.xml
<layout
    ...>
    <data>
		<variable name="main"  type="com.tacksman.BindingSample.MainActivity" />
	</data>
    <android.support.design.widget.CoordinatorLayout
        ...>

    </android.support.design.widget.CoordinatorLayout>
</layout>

```

ここまでの手順を行うと、`variable`で定義した`main`より、パラメータやメソッドにアクセスできる。

```xml:activity_main.xml
<TextView android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@{home.viewTitle}"/>
```

ちなみに、ここまでの手順を行っていると、レイアウトファイルのバインディングクラスが作成される。

例: activity_main.xml -> ActivityMainBinding

これを使って、レイアウトの中の要素にアクセスするといったこともできる。
FNLPで中国語形態素解析

# はじめに

オープンソースの中国語形態素解析器FNLPを使ったときの、インストールと実行の方法を、簡単にメモしました。

## FNLPとは

FNLPは、Javaで書かれた、形態素解析器を含む中国語の自然言語処理パッケージです。LGPL 3.0で配布されています。正式にはFudanNLPといいます。

次のところに情報があります。

* [GitHub xpqiu/fnlp](https://github.com/xpqiu/fnlp/) - ソースコード
* [Google Code fudannlp](http://code.google.com/p/fudannlp/) - GitHubへ引っ越す前のリポジトリ

# インストール

ソースコードはJavaで書かれています。GitHubからダウンロードしたソースコードを、Mavenでビルドします。モデルファイルを忘れずにダウンロードしてください。

## 必要なソフトウエア

ビルドには次のソフトウエアが必要です。

* JDK
* Apache Maven

## ダウンロード

GitHubからソースコードをダウンロードします。

```shell-session
$ git clone https://github.com/xpqiu/fnlp.git
```

## ビルド

mavenを使ってビルドします。(下記の例は、maven 3.2.5を使ったものです)

```shell-session
$ cd fnlp
$ mvn install -Dmaven.test.skip=true
$ mvn dependency:copy-dependencies -DoutputDirectory=libs
```

## モデルファイルの配置

https://github.com/xpqiu/fnlp/releases で公開されているモデルファイル(pos.m, seg.m, dep.m)をmodelsディレクトリにコピーします。

```shell-session
$ wget https://github.com/xpqiu/fnlp/releases/download/v2.1/dep.m -O models/dep.m
$ wget https://github.com/xpqiu/fnlp/releases/download/v2.1/pos.m -O models/pos.m
$ wget https://github.com/xpqiu/fnlp/releases/download/v2.1/seg.m -O models/seg.m
```

# 形態素解析の実行

コマンドラインから形態素解析を実行してみます。解析対象の文章「自然语言是人类交流和思维的主要工具，是人类智慧的结晶。」はコマンドラインに書いています。また、この例では、Rubyで出力を簡単に整形しています。

```shell-session
$ java -Xmx1024m -classpath "fnlp-core/target/fnlp-core-2.1-SNAPSHOT.jar:libs/trove4j-3.0.3.jar:libs/commons-cli-1.2.jar" org.fnlp.nlp.cn.tag.POSTagger -s models/seg.m models/pos.m "自然语言是人类交流和思维的主要工具，是人类智慧的结晶。" | ruby -ane 'puts $F'
```

## 実行結果

上記のコマンドを実行すると、下記の表示が得られます。単語の後に品詞も表示されます。

```
自然/副词
语言/名词
是/动词
人类/名词
交流/名词
和/并列连词
思维/名词
的/结构助词
主要/形容词
工具/名词
，/标点
是/动词
人类/名词
智慧/名词
的/结构助词
结晶/名词
。/标点
```
aruduinoのアナログ入力データ ズレる

arduino nanoを利用して
アナログ入力のデータ計測をしております。

テストで安定電圧の2.5V計測を計測しました。
しかし、本来であれば512データが
計測できるはずなのですが、何故か”587”でデータが
返ってきます。

考えられる原因は何でしょうか
グランドが共通じゃないからでしょうか

尚、arduinoの動作電源はPCのUSB
測定する入力電圧は、直流安定電源です。

よろしくお願い致します。
git flow initコマンド prefixの消し方

git-flowコマンドで間違えてprefixを入力してしまって、まっさらな状態(Null)にしたい時のやり方が調べてすぐに出てこなかったので、こちらに記載しておきます。

## 初回導入時

```
$ git flow init
Branch name for production releases: [master]
Branch name for "next release" development: [develop]
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? [] v1
```

↑でversionミスったってなったとき

fオプションをつけて再度git-flow initコマンドを実行

```
$ git flow init -f
Branch name for production releases: [master]
Branch name for "next release" development: [develop]
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? [v1] -
```

`-`を入力するとprefixを削除してくれる
sublime text / 正規表現 > AND/論理積 > GetFileNameとfastcallを含む行を検索する > ^(?=.+GetFileName)(?=.+fastcall)

```txt:動作確認
Sublime Text 2 on Windows 7 pro
```

以下のような実装があるとする。

```
static String __fastcall CPdfMake::GetFileName(TDate procDate, String prefix, String suffix);
```

関数の定義、宣言だけ見つけたい場合は GetFileName と fastcall という文字が同時に成立するものを探すことになる。

## v0.1 

論理積の参考 http://qiita.com/liburari/items/dbcd0b8af3781d221424

上記のリンクを参考にして、Ctrl+Fで表示される Find: に以下のように入力して検索するといいようだ。

```
^(?=.*GetFileName)(?=.*fastcall)
```

もっと簡単な入力方法はないものか。

## v0.2 (1回以上)

`.*`とした時は0回以上のようだ。
1回以上の場合は`.+`とするらしい [参考](http://iblinux.rios.co.jp/PyJdoc/lib-j/node66.html)

以下のようにした。

```
^(?=.+GetFileName)(?=.+fastcall)
```
アプリ内でユーザ辞書登録しようとするとクラッシュするのはBlocksKitのバグだった

アプリ内でテキストを選択すると表示されるメニュー「ユーザ辞書…」を実行するとユーザ辞書登録画面が表示されるが、表示された瞬間にクラッシュした。スタックトレースからBlocksKitのコードでクラッシュが発生している事が分かったので、調査したら以下のページがヒット。

[`NSObject+A2BlockDelegate` might cause crash. · Issue #283 · zwaldowski/BlocksKit](https://github.com/zwaldowski/BlocksKit/issues/283)

まだ修正されていないバグらしい。

UITextField+BlocksKitを利用していなければUITextField+BlocksKit.h/mをプロジェクトから外すことで回避できるらしい。以下のコードをPodfileに追加してpod intsallを行ってアプリを実行したところ、クラッシュが発生しなくなった。

```ruby
pre_install do
    system("sed -i '' '/UITextField/d' Pods/BlocksKit/BlocksKit/BlocksKit+UIKit.h")
    system('rm Pods/BlocksKit/BlocksKit/UIKit/UITextField+BlocksKit.h')
    system('rm Pods/BlocksKit/BlocksKit/UIKit/UITextField+BlocksKit.m')
end
```
複数件のINSERTでON DUPLICATE KEY UPDATE

# とりあえず答えだけ

IDをプライマリキーに設定

```mysql
CREATE TABLE `my_table` (
  `pri_id` int(10) unsigned NOT NULL,
  `update_time` date NOT NULL,
  PRIMARY KEY (`pri_id`)
) ENGINE=InnoDB;
```

INSERTクエリ

```mysql
INSERT INTO `my_table`
(pri_id, update_time) VALUES 
(1, '2016-02-13'),
(2, '2016-02-14')
ON DUPLICATE KEY UPDATE update_time = VALUES(`update_time`);
```

キーポイント

ON DUPLICATE KEY UPDATE update_time = **VALUES(`update_time`)**;

# <i class="fa fa-leanpub"></i>公式リファレンスを読む方はこちら
https://dev.mysql.com/doc/refman/5.6/ja/insert-on-duplicate.html

> UPDATE 句で VALUES(col_name) 関数を使用して、INSERT ... ON DUPLICATE KEY UPDATE ステートメントの INSERT 部分からカラム値を参照できます。つまり、ON DUPLICATE KEY UPDATE 句にある VALUES(col_name) は、重複キーの競合が発生していない場合に挿入される col_name の値を参照します。この関数は、複数の行を挿入する際に特に役立ちます。VALUES() 関数は、INSERT ... UPDATE ステートメントの中でだけ意味を持ち、そうでなければ NULL を返します。
例:
```mysql
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
  ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
```
そのステートメントは、次の 2 つのステートメントと同一です。
```mysql
INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=3;
INSERT INTO table (a,b,c) VALUES (4,5,6)
  ON DUPLICATE KEY UPDATE c=9;
```
root からの sudo だけ syslog を無効にする

とある事情で root からの sudo が頻繁に行われているサーバがあって `/var/log/secure` にたくさんログが記録されていたので、root からの sudo だけ syslog を無効にしたときのメモ。

```sh
visudo -f /etc/sudoers.d/root
```

次のように追記する。

```
Defaults:root !syslog
```

（setuidgid とか gosu とか使っておけばよかったのかもしれない）
VPC Lambdaからs3へアクセスする

## 問題

AWS Lambdaが[VPC対応した](https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/)ので試したところ、そのままではs3へのアクセスが出来なかった。

例えば、こんな感じにタイムアウトする。

```json
{
  "errorMessage": "2016-02-12T17:15:10.898Z 12c18327-ddbc-1e15-ad30-da8934f8a9c3 Task timed out after 30.00 seconds"
}
```

## 原因

[ドキュメント](http://docs.aws.amazon.com/lambda/latest/dg/vpc.html)に書いてあった。

> When you add VPC configuration to a Lambda function, it can only access resources in that VPC. If a Lambda function needs to access both VPC resources and the public Internet, the VPC needs to have a Network Address Translation (NAT) instance inside the VPC.

> AWS Lambda uses the VPC information you provide to set up ENIs that allow your Lambda function to access VPC resources. The ENIs that AWS Lambda creates do not have public Internet access. Therefore, **even if you have an Internet gateway attached to your VPC, your Lambda function will not be able to access the Internet**. If your Lambda function requires Internet access (for example, to access AWS services that don't have VPC endpoints, such as Amazon Kinesis), you can configure a NAT instance inside your VPC or you can use the Amazon VPC NAT gateway. For more information, see NAT Gateways in the Amazon VPC User Guide.



## 解決策

### NATを使う方法

`private subnet`にLambdaを設置し、その`routing table`でインターネット向けの通信(`0.0.0.0/0`)の経路情報ををNAT gateway又はNAT instanceに割り当てる。

Lambda on VPCを使うと、Internet gatewayが割り当てられている`public subnet`を設定しても外部への通信ができないので、Default VPCだろうが敢えて`private subnet`を作成する必要がある。

### VPC Endpointを使う方法

[VPC Endpoint](http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html) for S3を設定する事によって、private network経由の通信が可能になる。但し、Lambdaと同一リージョンのs3 bucketに限定される。

s3以外のインターネット越しの外部リソースにはアクセスできないが、こちらの方が設定がより簡単。
OSX以外のrbenv install -lのリストを更新する


OSXの場合はこちら
[rbenvでインストールできるバージョンリストを最新にする](http://qiita.com/ngtk/items/cc85c0d916ac4bcc2188)

# リストを更新する

```bash
$ cd "$(rbenv root)"/plugins/ruby-build && sudo git pull
```

出力結果

```bash
remote: Counting objects: 1374, done.
remote: Total 1374 (delta 488), reused 488 (delta 488), pack-reused 886
Receiving objects: 100% (1374/1374), 334.92 KiB | 538.00 KiB/s, done.
Resolving deltas: 100% (968/968), completed with 105 local objects.
From https://github.com/sstephenson/ruby-build
 * branch            master     -> FETCH_HEAD
   e9567fc..9e57fb0  master     -> origin/master
Updating e9567fc..9e57fb0
Fast-forward

[以下略]
```
# リスト情報

`$ rbenv install -l`で出力されているリストは、`plugins/ruby-build`で管理されています。


最新のリスト
https://github.com/rbenv/ruby-build/tree/master/share/ruby-build
node-foremanで環境変数をファイルから読み込んでコマンド実行


# 背景
サーバーアプリケーションでパスワード等の秘密情報を使う際に、ソースコード上に書いて公開リポジトリで管理すると秘密情報が暴露します。
代わりに、環境変数に秘密情報を設定し、サーバーアプリケーション内で環境変数を読みとる方法があります。

この方法では、開発環境で起動する際に環境変数で設定するのが面倒です。

## 例
例えば[syamo](https://github.com/luxiar/syamo)と言うアプリケーションは、次のコマンドで起動します。

```
env CHATWORK_TOKEN=XXX GITLAB_URL=YYY GITLAB_TOKEN=ZZZ npm start
```

([fishshellの環境変数の書き方](https://fishshell.com/docs/current/faq.html#faq-single-env)です)

これを毎回実行するのは面倒です。

# node-foremanを使う
[node-foreman](https://github.com/strongloop/node-foreman)を使うと`.env`ファイルから環境変数を読み取って、コマンドを実行できます。

## インストール

```
npm install --save-dev foreman
```

開発環境で使う(ことを`package.json`に保存する)ため`--save-dev`をつけます。

## .envファイルの作成
iniファイルのような形式で書きます。

```
CHATWORK_TOKEN=XXX
GITLAB_URL=YYY
GITLAB_TOKEN=ZZZ
```

リポジトリに追加しないために`.gitignore`に追加します。

```
echo ".env" >> .gitignore
```

## 実行
node-foremanはrunコマンドで、任意のコマンドを実行できます。

```
node_modules/foreman/nf.js run npm start
```

## npm script
`package.json`に起動スクリプトを追加します。

```
"scripts": {
  "start": "babel-node app.js",
  "test": "mocha --require espower-babel/guess -c",
  "watch": "nodemon --exec babel-node -- app.js",
  "dev": "nf run "babel-node app.js"
}
```

`npm run dev`で実行できます。
AndroidStudio2.0をインストールしてみる

# はじめに
Androidアプリ開発の勉強のためAndroidStudioのインストールから
2016/2/15現在でAndroidStudio2.0が最新だということでインストールしてみる

# ダウンロード
[ここ](http://tools.android.com/download/studio/builds/2-0-preview)からダウンロード。
私はWindows7だったので``android-studio-ide-143.2443734-windows.zip``を選択

# インストール
解凍されたフォルダ内の``bin/studio64.exe``を実行するとインストールが開始
なかなかこのファイルが見つからなくて苦戦しました...
てっきりAndroidStudi.exeみたいなファイルのかと思って探したらないんだもん...
<br></br>
あとはNextポチポチしておしまい
意味わからんところで手こずってしまった...