OmniAICreator/Qiita-1.07M huggingface dataset:
ムームードメインで取得したドメインからServersManのサーバへ接続する

あらかじめServersManでLAMP環境を構築し、
httpでIPアドレス直打ちにて接続できることを確認しておく。

ムームードメインにアクセス。ドメインを新規申請して登録する。
ムームードメインの管理画面（コントロールパネル）から
ドメイン情報を表示させ、下記の設定を行なう。

サービス：ムームーDNS　であることを確認する。
「ネームサーバ設定変更」ボタンを押す。
「ムームードメインのネームサーバ（ムームーDNS）を使用する」が選択されていることを確認し、
「ネームサーバ設定変更」ボタンを押す。
画面に「ネームサーバの設定を変更しました」と表示されることを確認する。

左メニューより
ドメイン管理＞ドメイン操作＞ムームーDNS　をクリックする。
設定したいドメインの「変更」ボタンを押す。「カスタム設定」に進む。
「カスタム設定利用中」と表示されることを確認する。「設定２」を見る。
下記の２レコードを追記して「セットアップ情報更新」を押す。

No：1
サブドメイン：空欄
種別：A
内容：サーバのIPアドレス

No：2
サブドメイン：www
種別：A
内容：サーバのIPアドレス

ドメイン名でWebページにアクセスできればOK。
文字列内の空白文字(半角空白)をトリミング

# コトの発端
まずは、何の変哲もない入力フォームについて紹介します。
以下の画面では、植物名の登録を行おうとしています。
![スクリーンショット 2016-09-10 18.48.09.png](https://qiita-image-store.s3.amazonaws.com/0/133774/51cb7fea-f9dc-cf0a-6c6e-6f9d319090ea.png)

でも、手が滑ってしまい、文字列の前に数行ほど空白が...
しかも不幸なことに、勢い余って登録ボタンも押してしまいました。
![スクリーンショット 2016-09-10 18.47.42.png](https://qiita-image-store.s3.amazonaws.com/0/133774/f584c8dc-71aa-2d31-1975-f7edeff46ef0.png)

すると、


結果はこうなりました。
![スクリーンショット 2016-09-10 18.59.06.png](https://qiita-image-store.s3.amazonaws.com/0/133774/7d273ef2-50cf-5398-a08b-64eb00362b9c.png)

本来ならこうであって欲しいと思うのが普通かと...
![スクリーンショット 2016-09-10 18.58.37.png](https://qiita-image-store.s3.amazonaws.com/0/133774/4c2a7fa4-94ea-197f-629f-d06ba7a8fc74.png)
たとえ誤って文字列に空白が含まれていたとしても、
こんなの気持ち悪いですね。

前置きが長くなってすみませんでした。
早速、今回のテーマについてご紹介致します。



# 特定の文字列を取り除きたい

文字列の操作を行うとき、文字列同士の結合などはよく教科書やサイトでも説明がなされていますが、他にも知っておくと便利なものがあります。今回私が紹介したいのは、文字列の中から**特定の文字を取り除たい**場合などに使用できるメソッドについてです。

### NSCharacterSetクラス
これは、Unicodeに準拠した文字セットを提供するクラスです。NSStringオブジェクトやNSScannerオブジェクトで文字を検索するときには、とても心強い味方になります。詳しくは[こちら](http://cocoaapi.hatenablog.com/entry/10010326/NSCharacterSet)を参考にするといいでしょう。

空白を指定する場合には、[NSCharacterSet](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/)（iOS Developer Libraryより）から次のクラスメソットを指定します。

```
+ whitespaceCharacterSet
```
また、空白だけでなく改行も含めたい場合には、

```
+ whitespaceAndNewlineCharacterSet
```
を使えば改行も指定することができます。


### stringByTrimmingCharactersInSetメソッド

これは*NSStringクラス*に所属するインスタンス・メソッドで、第１引数の文字列から第２引数の文字列セットを取り除くという作業を行ってくれます。（[Apple API Reference](https://developer.apple.com/reference/foundation/nsstring/1415462-stringbytrimmingcharactersinset?language=objc)）

```objc:

- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;

```

# 使用例

次のようなメソッドを定義してはどうでしょう。
必要に応じて**空白除去フィルター**として利用できるかと思います。

```objc:

- (NSString *)trimSpaceWithText:(NSString *)text {
    NSCharacterSet *space = [NSCharacterSet whitespaceCharacterSet];
    return [text stringByTrimmingCharactersInSet:space];
}

```


# まとめ

私のアプリでは文字数チェックと合わせて使用しています。
ラベルなどの**差し込み文字列 + 定型文字**など、空白ままを表示させるのに適さない部分では、空白の文字列はなんとかして禁止する必要があるからです。

> （例1） **アサガオ**の記録

> （例2） **アサガオ**の様子


文字なし、空白（Space）のみの場合、登録処理に制限をかけています。

以上です。


他のやり方、もっと良い方法などがありましたら、
是非ご教示頂ければ幸いです。
ServersManのVPSを申し込んでからLAMP環境を立ち上げるまでの手順

ServersManのサイト（MyDTI）から ServersMan@VPS Entry プラン をプラン追加。
データセンターは東京を選択。
OSは、CentOS7(64bit)、テンプレートはシンプルパック。
クレジットカード情報を入力して申し込む。
申し込むとメールが届くので、保存しておく（パスワードなどが書かれている）。
しばらく待つとサーバが稼動してSSH接続ができるようになる。
サーバの稼働状況は、MyDTIから確認できる。だいたい5分～15分ぐらい待てばOK。

サーバの稼動を確認したら、TeraTermなどでSSH接続する。
メールには、接続先のIPアドレスとrootのパスワードが書かれている。
ポート番号に注意（メール参照）。

接続できたら、LAMP環境を構築する。CentOS7(64bit)

    yum update

    yum install epel-release

    rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

    yum install --enablerepo=remi,remi-php56 php php-common php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof

    yum install --enablerepo=remi,remi-php56 -y php-intl

    yum install --enablerepo=remi,remi-php56 -y httpd

    systemctl start httpd

    cd /var/www/html/

    vi index.php

    <?php
      phpinfo();
    ?>

    httpで、サーバのIPアドレスにアクセスして、phpinfoが表示されたらOK。
表示されない場合は、SELinuxを疑う。無効化するには下記コマンドを実行する。

    setenforce 0
    getenforce

permissive または disabled になっていればOK。
それでも表示されない場合は、firewalld を疑う。

    systemctl status firewalld

この結果が

    Active: active (running)

になっていると、ファイアウォールが効いているので、無効化する。

    systemctl stop firewalld

結果が

    firewalld.service - firewalld

になっていれば無効化成功。

    cd /root

    yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

    yum install wget
    
    wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

    rpm -Uvh mysql-community-release-el7-5.noarch.rpm

    yum --enablerepo=mysql56-community install mysql-community-server

    systemctl start mysqld

    mysql -u root

    update mysql.user set password=password('任意のパスワード') where user = 'root';

    flush privileges;
Java8:Streamをひたすら使ってみる


##基本的なStream処理(条件分岐、一括処理、ソート)

```java:java
// rangeメソッドはInt/LongStreamでのみ使用できる。Stream<Integer>では使用できない
IntStream.range(0, 10)
	.filter(i -> i % 2 == 1)
	.map(i -> i *　10)
	.sorted()
	.forEach(System.out::println);

// ソート手段を指定する場合ボクシングが必要。自然順はnaturalOrder
IntStream.range(0, 10)
	.filter(i -> i % 2 == 1)
	.map(i -> i *　10)
	.boxed().sorted(Comparator.reverseOrder())
	.forEach(System.out::println);
```
```
10
30
50
70
90
```
```
90
70
50
30
10
```

##二重のStream処理(map使用/全ての要素に対してFunctionを適用する。)
```java:java
// 行いたい文字列精査のリスト
List<UnaryOperator<String>> vatidators = new ArrayList<>();
vatidators.add(str -> str.length() < 10 ? "" : "strは10文字未満にしてください。");
vatidators.add(str -> str.length() >= 4 ? "" : "strは4文字以上にしてください。");
vatidators.add(str -> !str.contains("×") ? "" : "strに不正な文字が含まれています。");
vatidators.add(str -> str.contains("は") ? "" : "strに必要な文字が含まれていません。");

// 精査対象の文字列リスト	
List<String> strList = Arrays.asList("×", "" , "今日は良い天気");

// 各文字列すべてに対してリスト内の精査を行う
List<List<String>> results = strList.stream()
	.map(str -> vatidators.stream()
		.map(valid -> valid.apply(str))
		.filter(s -> !"".equals(s))
		.collect(Collectors.toList()))
	.collect(Collectors.toList());
// 結果を表示
results.forEach(System.out::println);
```
```
[strは4文字以上にしてください。, strに不正な文字が含まれています。, strに必要な文字が含まれていません。]
[strは4文字以上にしてください。, strに必要な文字が含まれていません。]
[]
```
Swift3での大きな変更点（AnyObject→Any）Dictionary,Arrayなどでの型指定方法まとめ

# Swift3へ移行時に発生する大きな問題点

Swift3になって、APIを使用していてJSONをパースしているようなアプリが特に影響を受ける変更がありました。

###それは、AnyObject型 が Any型 に置き変わったことです！！

これによって、JSONを受け取る際の型の指定などが変わることになります。APIを沢山使っているアプリは影響範囲が広くなると思います。

# Objective-C, Swift2, swift3の型違い対応表

Objective-C         | Swift2                      | Swift3
------------------- | --------------------------- | ------------------------
`id`                | `AnyObject`                 | `Any`
`NSArray *`         | `[AnyObject]`               | `[Any]`
`NSDictionary *`    | `[NSObject: AnyObject]`     | `[AnyHashable: Any]`
`NSSet *`           | `Set<NSObject>`             | `Set<AnyHashable>`

# 具体的なコードで見ていきましょう

## Dictionary（今まで）
```swift:filename.swift

var dictionaryObject: [String: AnyObject] = [
    "key1": "文字列１",
    "key2": 1,
    "key3": true
]
```
## Dictionary（Swift3）
```swift:filename.swift

var dictionaryObject: [String: Any] = [  //AnyObjectがAnyに替わる!
    "key1": "文字列１",
    "key2": 1,
    "key3": true
]
```
## NSDictionary（今まで）
```swift:filename.swift

var nsdictionaryObject: [NSObject: AnyObject] = [
    "key1": "文字列１",
    "key2": 1,
    "key3": true
]
```
## NSDictionary（Swift3）
```swift:filename.swift

var nsdictionaryObject: [AnyHashable: Any] = [  //NSObjectがAnyHashableに、AnyObjectがAnyに替わる!
    "key1": "文字列１",
    "key2": 1,
    "key3": true
]
```
## Array（今まで）
```swift:filename.swift

var arrayObject: [AnyObject] = [
    "文字列１",
    1,
    true
]
```
## Array（Swift3）
```swift:filename.swift

var arrayObject: [Any] = [  //AnyObjectがAnyに替わる!
    "文字列１",
    1,
    true
]
```
## JSONシリアライズ（今まで）
```swift:filename.swift

let object: AnyObject = try JSONSerialization.jsonObject(with: data, options: opt)
```
## JSONシリアライズ（Swift3）
```swift:filename.swift

let object: Any = try JSONSerialization.jsonObject(with: data, options: opt)
```

# 編集後記
Swift3へ移行するときに、多くのアプリはこの改修が必用になると思われます。結構大きな変更ですよね。
AlamofireやSwiftyJSONなど有名なライブラリも同様の修正がプルリクにあがってました。
何か間違っている点などありましたらご指摘ください。

# 参考文献
https://apple.github.io/swift-evolution/
https://www.mail-archive.com/swift-users@swift.org/msg01909.html
http://stackoverflow.com/questions/38963362/xcode-8-beta-6-anyobject-replaced-by-any-where-is-classforcoder
３ヶ月でMVPを作る - Week 2

#進歩

![lp0910.jpg](https://qiita-image-store.s3.amazonaws.com/0/104858/e1a498ce-ee51-92ee-af74-a1aa300d453c.jpeg)
ランディング・ページ（現状）

![Screen Shot 2016-09-09 at 7.21.51 PM.png](https://qiita-image-store.s3.amazonaws.com/0/104858/fd334866-1f19-c7c7-7ebd-faeffdbc1756.png)
deviseのログインページ

![Screen Shot 2016-09-09 at 7.22.48 PM.png](https://qiita-image-store.s3.amazonaws.com/0/104858/6fcf9161-eb2b-874b-87bd-38a206daf455.png)
deviseのプロフィール編集ページ


#やったこと
-devise gemでの認証の設定
-Landing Pageの実装
-AWSのIAM設定でセキュリティ強化
-AWSの基本構成の勉強（EC2, RDS, S3など）
-AWSのCloudWatchの設定


#学び
-これでAWSの基本を網羅
http://dotinstall.com/lessons/basic_aws﻿
-非エンジニア向けのAWS解説
http://dev.classmethod.jp/cloud/aws/aws-overview-for-non-engineers/﻿
-AWS-構成編
http://www.slideshare.net/schoowebcampus/awsamazon-web-services-35784558﻿
-AWS-料金編
http://qiita.com/moiwasaki/items/5bf5cdd7e76eb212a32e﻿
-AWS -セキュリティ編
http://dev.classmethod.jp/cloud/best-practices-for-security-and-compliance-with-aws/﻿
-フロントエンドのフレームークを分けて管理するという考え（英語）
https://www.youtube.com/watch?v=NMXXpqX2yvg﻿

（全ての学びはここに👇）
https://plus.google.com/u/1/107221871269602934448

#これから
-facebookでのログイン機能を追加する
-その時にFBの顔写真もとってくる機能を実装
-ログインした時のdeviseのnotificationの見た目をよくする
-deviseの使い方をもう少し理解する
-ガイドが旅行プランを作る時に埋めるフォームを作成する


#感想
やっぱり個人的にはLanding Pageなど目に見える部分ができてくると、プロジェクトのモチベーションが上がる。なのでモチベーションの低くなった時には、そういったところを集中してやりたい。

あとAWSに慣れておくために１２ヶ月のAWSの無料枠に登録してEC2やRDSのインスタンスを複数立てても無料だろうと勘違いしていたら７０ドルほど請求されました。ただAWSに問い合わせたら、今回限りということでRefundしてもらえました。本当に感謝なのと、これからはCloudWatchなどを設定してしっかり料金を監視しないとなといういい学びになりました！
Goutteを使ってログインしてスクレイピングする

### やること
ログインが必要なサイトにログインして、ログイン後のページでcsvファイルダウンロードを自動で行う。

### 自分について
* スクレイピングといえば、javascriptでやる人
* casperかnode.jsのcheerio-httpcliを使うことがほとんど

### 使うライブラリ
Goutte

### Goutteの準備
[ここ](https://github.com/FriendsOfPHP/Goutte)参照。
composerが使えれば、composerで。
使えない場合、phpのバージョンに合わせてpharファイルをダウンロードしときます。
呼び出しは下記のとおりです。

```php
require_once __DIR__ . "/goutte-v2.0.4.phar"; // pharを使用する場合
// require_once __DIR__ . "/vendor/autoload.php"; // composerを使用する場合
use Goutte\Client;
```

### Goutteが使用している技術とドキュメント
SymfonyのBrowserKit, CssSelector, DomCrawler使用しています。
[DomCrawler](http://symfony.com/doc/current/components/dom_crawler.html?any)
また、Guzzleのhttpクライアントも使用しているのでこの2つのドキュメントを参照してください。
[Guzzle](http://docs.guzzlephp.org/en/latest/)

### Goutteを使用してスクレイピングの流れ
ページの取得はインスタンス化したGuzzleHttp\Clientで対象URLを呼び出します。
まずはログインページを取得します。

```php
$client = new Client();
$login_page = $client->request('GET', 'https://hoge.com/login/');
```

これで$login_pageにhtml情報が入ったDomCrawlerが入ります。
その後、DOM要素の取得ははcssセレクタかxpathが使えます。
書き慣れているので、cssセレクタ記法を採用しました。
次はログインフォームを取得します。

```php
$login_form = $login_page->filter('form')->form();
```

かんたんですね。

で、ログインフォームからログインをします。
さっき取得したフォームに必要な入力情報をinput要素のname属性を設定し、
submit()を呼び出すことでログインが可能です。

```php
$login_form['input_id_name'] = 'your_id';
$login_form['input_password_name'] = 'your_password';
$client->submit($login_form);
```

ログイン後サイト内のページ遷移はrequest()を使用し、
必要なページに遷移しましょう。

ダウンロードはaタグ取得をcssセレクタで、その後取得したaタグからhrefを抽出することで、
ダウンロードリンクが取得できます。

```
$download_hrefs = $after_login_page->filter('a')->extract('href');
```

上記は例になります。
そのまま使用するとページ内のaタグをすべて取得しますので、ページに合わせてcssセレクタを変更してください。

今回はcsvだったので、取得したcsvダウンロードリンクをリクエストした結果を
SplFileObjectでcsvファイルを作成しました。

```php
$count = 0;
foreach ($download_hrefs as $href) {
    $client->request('GET', $href);
    $response_content = $client->getInternalResponse()->getContent();

    $file = new SplFileObject('./'.$count++'.csv', 'w'); // ファイル名は適当
    $file->fwrite($response_content);
    // 連続アクセスしないようにする
    sleep(2);
}
```

今回は使用しなかったのですが、requestのsinkオプションを使用することで、
ダウンロードも可能なようです。
[sinkオプション](http://docs.guzzlephp.org/en/latest/request-options.html#sink)

### 使ってみた感じ

#### 要素がないとエラーが起きて処理が止まる。

```php
PHP Fatal error:  Uncaught exception 'InvalidArgumentException' with message 'The current node list is empty.'
```

セレクタが合っているかを確認した後、
Fatal Errorが心臓に悪いので、count()で要素存在チェックをしましょう。

```php
$hoge = $page->filter('hoge');
if ($hoge->count()) {
    echo($hoge->text());
} else {
    echo 'kara';
}
```

#### 動的ページのスクレイピングは難しそう？
今回は静的ページだったのですが、同期処理のphpで使えるんでしょうか・・・


php縛りだったので、Goutteにしましたが、
使い慣れているjavascriptと比較して特に優位性見つからなかったので、
状況によって使い分けるようにします。
(AVD)No system images installed for this target.が出た時の解決法


## Env
- OSX 10.11.3
- Android SDK Tools 25.1.7

## Problems

![スクリーンショット 2016-09-10 18.15.34.png](https://qiita-image-store.s3.amazonaws.com/0/132627/edbc7ddb-96cb-dd42-9d39-c9372c4f4391.png "スクリーンショット 2016-09-10 18.15.34.png")

## How to solution

```
# インスコするSystem Imageをタスクidを確認する
$ android list sdk -a | grep '\- Intel x86 Atom System Image'
  59- Intel x86 Atom System Image, Android API 24, revision 6
  66- Intel x86 Atom System Image, Android API 23, revision 9
  76- Intel x86 Atom System Image, Android API 22, revision 5
  86- Intel x86 Atom System Image, Android API 21, revision 4
  93- Intel x86 Atom System Image, Android API 19, revision 5
  97- Intel x86 Atom System Image, Android API 18, revision 2
 101- Intel x86 Atom System Image, Android API 17, revision 2
 106- Intel x86 Atom System Image, Android API 16, revision 2
 111- Intel x86 Atom System Image, Android API 15, revision 2
 116- Intel x86 Atom System Image, Android API 10, revision 3
# 今回はAPI22のをインスコ
$ android update sdk -a -u -t 76
...
Do you accept the license 'android-sdk-license-c81a61d9' [y/n]: y
...
Swift 3 の @escaping とは何か

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



以前 [Swiftの @noescape をもっと使おう](http://qiita.com/mishimay/items/a09c0e4a8063bf16e064) という記事を書いたのですが、 Swift 3 からは `@noescape` の挙動がデフォルトに、そして`@noescape` の記述はdeprecatedになり、代わりに `@escaping` が追加されました。

# 使い方
引数で受け取るクロージャに対してattributeとして付与します。

```swift
class A {
    private let storedClosure: () -> ()

    init(closure: @escaping () -> ()) { // ここ
        storedClosure = closure
    }
}
```

# どういうときに必要か
クロージャがスコープから抜けても存在し続けるときに `@escaping` が必要になります。
具体的には以下のような場合です。

  - クロージャがスコープ外で強参照されるとき
  - クロージャを非同期的に実行するとき

よってクロージャをすぐに実行し、どこからも強参照されない場合は `@escaping` は必要ありません。

```swift
class A {
    init(closure: () -> ()) { // ここ
        closure()
    }
}
```

# escapingするとどうなるか
## `self.` が必要
`@escaping` なクロージャ内でselfの変数やメソッドを使用する場合、selfをキャプチャすることを明示するため `self.` を付ける必要があります。

## 循環参照に気をつける
`@escaping` なクロージャはどこかから強参照される可能性があります。その参照元をクロージャ内で強参照すると循環参照になるので気をつけましょう。

特に、selfがプロパティとしてクロージャを保持 (強参照) する場合、クロージャ内で `self` を強参照すると循環参照になるので注意が必要です。

クロージャ内でオブジェクトを弱参照したい場合は、そのオブジェクトに対して `weak` や `unowned` を付けます。

## 良いコード例

以下の例では `[weak self]` を使用することで循環参照を防いでいます。よって最終的に `b` オブジェクトが破棄され `"deinit"` が出力されます。

```swift
class A {
    private let storedClosure: () -> ()

    init(closure: @escaping () -> ()) {
        storedClosure = closure
    }
}

class B {
    private var a: A?
    private var count = 0

    func doSomething() {
        a = A(closure: { [weak self] in // selfを弱参照する
            self?.count += 1
        })
    }

    deinit {
        print("deinit") // 呼ばれる
    }
}

do {
    let b = B()
    b.doSomething()
}
```

## 悪いコード例

以下の例では、このようにして循環参照が発生します。

  1. `b` オブジェクトが `a` オブジェクトを保持 (強参照)
  1. `a` オブジェクトがクロージャを保持 (強参照)
  1. クロージャが `self.` として `b` オブジェクトをキャプチャして強参照

よって `b` オブジェクトは破棄されず `"deinit"` が出力されません。

```swift
class A {
    private let storedClosure: () -> ()

    init(closure: @escaping () -> ()) {
        storedClosure = closure
    }
}

class B {
    private var a: A?
    private var count = 0

    func doSomething() {
        a = A(closure: {
            self.count += 1 // selfを強参照している
        })
    }

    deinit {
        print("deinit") // 呼ばれない
    }
}

do {
    let b = B()
    b.doSomething()
}
```

# 参考
  - [Swiftの @noescape をもっと使おう - Qiita](http://qiita.com/mishimay/items/a09c0e4a8063bf16e064)
  - [xcode - Updating closures to Swift 3 - @escaping - Stack Overflow](http://stackoverflow.com/questions/39063499/updating-closures-to-swift-3-escaping)
  - [The Swift Programming Language (Swift 2.2): About Swift](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/)





-->
コマンドのみでAndroid SDKをインストール


## 環境
- OSX 10.11.3

## Step

### 1. download

後でアップデートするため、
この段階で取得するandroid-sdk-toolsのバージョンはなんでも良い

```
$ wget -P ~/Downloads https://dl.google.com/android/android-sdk_r24.4.1-macosx.zip
```

wgetが見つからない場合は...
`command not found: wget`

wgetをインスコ

```
$ brew install wget
```

### 2. deploy

```
$ unzip android-sdk_r24.4.1-macosx.zip
...
# deployする場所はどこでもおk
$ mkdir ~/Library/Android
$ mv android-sdk-macosx ~/Library/Android/sdk
# ここはログインシェルによる
$ echo "export ANDROID_HOME=\"/Users/${USER}/Library/Android/sdk\"" >> ~/.zshrc
$ echo "export ANDROID_SDK_TOOLS=\"/Users/${USER}/Library/Android/sdk/tools\"" >> ~/.zshrc
$ echo 'export PATH=$PATH:$ANDROID_HOME:$ANDROID_SDK_TOOLS' >> ~/.zshrc
$ . ~/.zshrc
```

### 3. update & install

Android SDK toolsを最新にする

```
$ android update sdk -a -u -t tools,platform-tools
```

Googleのライブラリをインストール

```
$ android update sdk -a -u -t extra
```
PowerShell で扱える変数型備忘録

[ブログからの転載](http://1bed.allright.life/?p=2250)

.NET Framework の CTS (Common Type System) で扱えると何処かでみた(ソース忘れた)ので、まずはそこから調べていたけど、PowerShell.com に判りやすい一覧表があった。

ついでなので、最大値と最小値も調べてみた。

| type | FullName | MinValue | MaxValue| 
| --- | --- | --- | --- |
| [array] | System.Array |  |  |
| [bool] | System.Boolean |  |  |
| [byte] | System.Byte | 0 | 255 |
| [char] | System.Char |  |  |
| [datetime] | System.DateTime | 0001/01/01 0:00:00 | 9999/12/31 23:59:59 |
| [decimal] | System.Decimal | -79228162514264337593543950335 | 79228162514264337593543950335 |
| [double] | System.Double | -1.79769313486232E+308 | 1.79769313486232E+308 |
| [guid] | System.Guid |  |  |
| [hashtable] | System.Collections.Hashtable |  |  |
| [int16] | System.Int16 | -32768 | 32767 |
| [int32], [int] | System.Int32 | -2147483648 | 2147483647 |
| [int64], [long] | System.Int64 | -9223372036854775808 | 9223372036854775807 |
| [nullable] | System.Nullable |  |  |
| [psobject] | System.Management.Automation.PSObject |  |  |
| [regex] | System.Text.RegularExpressions.Regex |  |  |
| [sbyte] | System.SByte | -128 | 127 |
| [scriptblock] | System.Management.Automation.ScriptBlock |  |  |
| [single], [float] | System.Single | -3.402823E+38 | 3.402823E+38 |
| [string] | System.String |  |  |
| [switch] | System.Management.Automation.SwitchParameter |  |  |
| [timespan] | System.TimeSpan | -10675199.02:48:05.4775808 | 10675199.02:48:05.4775807 |
| [type] | System.Type |  |  |
| [uint16] | System.UInt16 | 0 | 65535 |
| [uint32] | System.UInt32 | 0 | 4294967295 |
| [uint64] | System.UInt64 | 0 | 18446744073709551615 |
| [xml] | System.Xml.XmlDocument |  |  |


## 調査のためのサンプルコード

```ps1
$types = @([array], [bool], [byte], [char], [datetime], [decimal], [double], [guid], [hashtable], [int16], [int32], [int], [int64], [long], [nullable], [psobject], [regex], [sbyte], [scriptblock], [single], [float], [string], [switch], [timespan], [type], [uint16], [uint32], [uint64], [xml])

foreach($type in $types){
    Write-Output ("| {0} | {1} | {2} | {3} |" -f $type.Name, $type.FullName, $type::MinValue, $type::MaxValue)
}
```

## 参考

* [System 名前空間 - 構造体](https://msdn.microsoft.com/ja-jp/library/system(v=vs.110).aspx#Anchor_1)
* [Chapter 3. Variables - The Advantages of Specialized Types](http://powershell.com/cs/blogs/ebookv2/archive/2012/02/02/chapter-3-variables.aspx#the-advantages-of-specialized-types)
CUDA > dim3 block(1024) > block.x = 1024 / block.y = 1 / block.z = 1

```txt:動作環境
GeForce GTX 750 Ti
Windows 8.1 pro (64bit)
Visual Studio Community 2013 (以下、VS)
CUDA 7.5
```

CUDAの本(CUDA C プロフェッショナル　プログラミング by John Chengら)を読んでいてひっかかったのがdim3関連。

```
dim3 block(1024);

// block.xを使った配列確保
```

上記を見て「block.xには何が入っているのか?」と思った。


```kernel.cu

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>

__global__ void addKernel(int *c, const int *a, const int *b)
{
	// do nothing
}

int main()
{
	dim3 block(1024);
	printf("1: %d x %d x %d\r\n", block.x, block.y, block.z);

	cudaError_t cudaStatus;	
    cudaStatus = cudaDeviceReset();
    if (cudaStatus != cudaSuccess) {
        fprintf(stderr, "cudaDeviceReset failed!");
        return 1;
    }

    return 0;
}
```

```txt:結果
1: 1024 x 1 x 1
```

### dim3 block(1024)の意味

```
dim3 block(1024);
```

という宣言により以下になるようだ。

```
block.x = 1024;
block.y = 1;
block.z = 1;
```

yやzに初期値を与えるdim3 宣言の仕方は以下を見つけた。
http://d.hatena.ne.jp/yasulib/20100228/1267330063

```
dim3 gridSize(10,10,1), blockSize(10,10,10);
```
git コマンドの備忘録

# 備忘録
自分用に gitコマンドを記しています。

## プル
```
git pull
```

## ステージングへのadd
- **変更すべてをadd**

```
git add .
```

## add(ステージング)の確認
```
git status
```

## コミット
```
git commit -m "This is comment!!"
```

## add(ステージング)の取り消し
- **ファイル、ディレクトリ毎に個別で行う方がいい!!**

```
git rm --cached <FileName>
git rm -r --cached <DirName>
```

## リモートへのプッシュ
```
git push <RemoteRepositoryURL> <BranchName>
```

## commit済  未pushの確認
```
git log origin/<BranchName>..<BranchName>
```

## 変更を元に戻す
```
git checkout .
```

## 直前にしたコミットをやり直す
```
git commit --amend
```

## branchの作成
```
git branch <BranchName>
```

## branchの切り替え
```
git checkout <BranchName>
```

## branchの削除
```
git branch -d <BranchName>
```
OCamlの環境構築[Mac OS X]

# OCamlをOS Xで動かす
OCamlをOS Xで動かそうと思ったら色々詰まったのでメモ

## opamを導入する
opamはocamlのパッケージマネージャー.ocamlのバージョン変更もこれでできる
opamはbrewにあるのでそこから導入

```
$ brew install opam
```

落ちてきたら初期化が必要だが関連pkgがないとエラーがでる

```
$ opam init
Checking for available remotes: rsync and local, git.
  - you won't be able to use mercurial repositories unless you install the hg command on your system.
  - you won't be able to use darcs repositories unless you install the darcs command on your system.
```

なので下記コマンドをいれる

```
brew install hg
brew install darcs
```

再度やれば成功する

```
$ opam init
$ eval `opam config env`
```

## ocamlを使いやすくする
そのままインタプリタを使用すると矢印キーも入力だと受け付けられ使いにくい.
rlwrapを導入し,インタプリタを利用する際はこれから呼ぶ

```
$ brew install rlwrap
$ echo 'alias ocaml="rlwrap ocaml"' >> ~/.bashrc 
```

またOCamlのデフォがEUC-JPで使いにくいのでutf-8に変更

```~/.ocamlinit
let printer ppf = Format.fprintf ppf "\"%s\"";;
#install_printer printer;;
```

実行してみる

```
$ ocaml
        OCaml version 4.03.0

# "hello world!!" ;;
- : string = "hello world!!"
```

## 参考
[『プログラミングの基礎』社内読書会 #0](https://gist.github.com/akanehara/3507ed4bcc94339aa1fb)
[UbuntuにOCamlをインストールする](http://qiita.com/KenjiYamauchi/items/40aaab56b65777950877)
rails 4.2で fonts をvendor/assets/fontsに追加してCSSから読む

#問題

フォントを、`vendor/assets/fonts`または、`app/assets/fonts`の下において、読みたいが、読めない。

# 解決策1
CSSの中で直接URLを指定

```
src: url('http://...')
```

例えば、Bootstrapの場合は、263行目らへんが、v3.3.6では、`..fonts/glyphicons...`となっているので、前のVersionのように、直接URLに変更すると、Productionでも正しく参照できる

```css:bootstrap.css
@font-face {
  src: url('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),
       url('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/fonts/glyphicons-halflings-regular.woff2') format('woff2'),
       url('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/fonts/glyphicons-halflings-regular.woff') format('woff'),
       url('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/fonts/glyphicons-halflings-regular.ttf') format('truetype'),
       url('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');*/       
}
```

## 解決策2

`vendor/assets/fonts`以下または、`app/assets/fonts`以下に置いたものを読む。

###注意点

1. app/assets/stylesheets/application.cssをscssにして、sass-railsのメソッド（`font-path`）を使えるようにする。[https://github.com/rails/sass-rails]
2. `vendor/assets/fonts`を使う場合は、app/initilizers/assets.rbでassets.pathに Pathを追加する。
3. .svg, .eot, .woff, .ttf, .woff2などPrecompileしたいフォントの拡張子をapp/initilizers/assets.rbで追加しておく


### 変更点


```css:bootstrap.css
-@font-face {
-  font-family: 'Glyphicons Halflings';
-
-  src: url('../fonts/glyphicons-halflings-regular.eot');
-  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
```

```scss:application.scss（application.cssから移動）
+// *= require bootstrap
+// その他Requireするもの
+// *= require_tree .
+// *= require_self
+
+@font-face {
+  font-family: 'Glyphicons Halflings';
+  src: url(font-path('glyphicons-halflings-regular.eot'));
+  src: url(font-path('glyphicons-halflings-regular.eot?#iefix')) format('embedded-opentype'),
+       url(font-path('glyphicons-halflings-regular.woff2')) format('woff2'),
+       url(font-path('glyphicons-halflings-regular.woff')) format('woff'),
+       url(font-path('glyphicons-halflings-regular.ttf')) format('truetype'),
+       url(font-path('glyphicons-halflings-regular.svg#glyphicons_halflingsregular')) format('svg');
+}
```

```rb:config/initializers/assets.rb変更点
+Rails.application.config.assets.paths << "#{Rails}/vendor/assets/fonts"
+Rails.application.config.assets.precompile << /\.(?:svg|eot|woff|ttf|woff2)\z/
```

#最後に


注意した点

- config/environments/production.rbで`config.serve_static_files = true`になっているのを確かめる
- 今回はローカルで確かめるために、ローカルで`rake assets:precompile RAIL_ENV=production`と`rails s -e production`でできてるかどうかや、変更によってどれがprecompileされるかなど(Fontsファイル)を確認した。
- またurl(フォント.eot)などが実際にどういうURLになったかも、chromeのDeveloper toolsで確かめると助けになるかもしれない。
unattended-upgrades を TUI を使わずに有効化するには (構成管理ツールなど非インタラクティブな状況とか)

Debian や Ubuntu で、セキュリティ上重要なアップデートを自動でアップグレードを実施してくれる、
unattended-upgrades というとてもありがたいパッケージがあるのだが、インストールしたそのままでは有効化されない。

インストール後に dpkg-reconfigure で設定を行う必要がある。
すると TUI の画面で入力を求められる。

## こんな感じ

```console
$ sudo apt-get install -y unattended-upgrades
$ sudo dpkg-reconfigure -plow unattended-upgrades
```

![このような確認.png](https://qiita-image-store.s3.amazonaws.com/0/25886/9bd50a23-d0e0-baa3-9e02-f51d57673f2b.png)

## やりたいこと

これを `apt-get` の `-y` オプションのように、
人による確認をスキップして、コマンドだけで自動で設定することはできないかと思い、調べた。

それができれば、 Chef や Ansible のような構成管理ツールで unattended-upgrades を有効化するのが簡単になる。

# 答え

```console
$ echo 'unattended-upgrades unattended-upgrades/enable_auto_updates boolean true' \
| sudo debconf-set-selections
$ sudo dpkg-reconfigure -f noninteractive -plow unattended-upgrades
```
のようにすれば OK だった。
`debconf-set-selections` 経由で入力でき、 `-f noninteractive` オプション付きで読み込ませるので TUI が立ち上がらない。

`debconf-set-selections` というコマンドを使って設定するので、もしデフォルトでインストールされていないディストリを使っているら、 `debconf-utils` パッケージをインストールする必要がある。
たいていは最初から使えることが多いが、後述の `debconf-get-selections` コマンドも `debconf-utils` に含まれているので、インストールしてしまうのがスムーズだと思う。

```console
$ sudo apt-get install -y debconf-utils
```

# キーワードの探し方

ところで、こういった debconf 周りで自動で設定をしたい機会は他にもありそうだ。
 `unattended-upgrades/enable_auto_updates` のようなキーワードをどうやって知ればよいだろうか？

やはり `debconf-utils` に含まれている `debconf-get-selections` コマンドを使えば、現在の debconf の設定をすべてテキストで得ることができる。 
ここには

```
{パッケージ名} {パッケージ内の設定項目名} {型} {値}
```

のような形式で記述されているので、そのままパッケージ名で `grep` すれば簡単に検索できる。

```console
$ sudo debconf-get-selections | grep unattended-upgrades
unattended-upgrades    	unattended-upgrades/enable_auto_updates	boolean	true
$ 
```

# 関連

[Debian 系で unattended-upgrades を有効にする場合の追加設定 (メール通知, autoremove, autoclean, 再起動)](http://qiita.com/kitsuyui/items/11b4c0ebb9d1d2181853)
Coq-8.5の実装内にプリンタを加える（メモ）

Coq-8.5pl1でタクティクスを実行する際に呼ばれている関数を判別する為にプリンタを実装内に加えた際の備忘録。

- Coq-8.5pl1のコンパイル時にプリント出力が作動しない様、flagsでデバッグ用フラグを定義。falseに初期化しておく。
  
    ```coq-8.5pl1/lib/flags.mli
      val my_debug : bool ref
    ```

    ```coq-8.5pl1/lib/flags.ml
      let my_debug = ref false
    ```

- 必要な場所に以下の様なフラグでの条件付きプリンタを設置。

    > if !Flags.my_debug then
    > begin
    >     … 
    >    Pp.msg_debug (Pp.str “here we write a message…“);
    >     …
    > end; 

    型によってプリンタが用意されているものがあり、`c: constr` を表示する場合は
    > Pp.msg_debug (Termops.print_constr c);

    `env: env`を表示する場合は
    > Pp.msg_debug (Termops.print_env env);   

     `sigma: evar_map`を表示する場合は
    > Pp.msg_debug (Evd.pr_evar_map None sigma);

    等。

- Coqをコンパイル、そしてインストール。例：
  > make -j3
  > sudo make install 

- 以下のプラグインもどきを任意のディレクトリ（ここでは`my_plugin`）に作成しデバッグ用のフラグを立てる。

    ```my_plugin/dbgprt_plugin.ml4
      DECLARE PLUGIN "dbgprt_plugin"
      Flags.my_debug := true;; 
    ```

- CoqのMakefileを`my_plugin`内に作成し実行
> coq_makefile dbgprt_plugin.ml4 -o Makefile 
> make

- `my_plugin`内で`coqtop`又はProofGeneralを実行。書き出しに以下の宣言を加える。　
  > Declare ML Module "dbgprt_plugin".

- ProofGeneralを使用する場合、emacs設定ファイルのcoq-load-pathに上記の`my_plugin`を加えておく。

以上
AWS EC2のReservationとは何か？

`aws ec2 describe-instances`とかするとjsonのトップレベルに`Reservations`が出てくる。これは何なのか？

```
{
    "Reservations": [
        {
            "OwnerId": "XXXXXXXXXXXX",
            "ReservationId": "r-XXXXXXXX",
            "Groups": [],
            "Instances": [
                {
                    "Monitoring": {
                        "State": "disabled"
:
:
```

`reservation`はインスタンスを起動するアクションのこと。`run-instances`を使って一度に複数のインスタンスを起動すると、（普通は）１個の`reservation`が作られ、複数のインスタンスがそこに属する（ただし場合によっては複数の`reservation`が作られることもあるらしい）。
普通に一度に１個のインスタンスを起動する場合は1 reservation = 1 instance。
`reservation`単位でまとめて停止したりできる。

> From my understanding, a reservation is an act of launching instances. Basically, a reservation is what you do, while an instance is what you get. If you launch multiple instances from one image via run_instances() you make one reservation, but get multiple instances.
> 
> run_instances together with Reservation.stop_all() allows you to run a bunch of instances, wait for them to complete the task and then stop them all at once.
http://stackoverflow.com/a/15619331/5209556
Monaca でローカル開発環境構築 


Monaca CLI というのを使ってローカルで開発環境を構築出来るようです。

https://docs.monaca.io/ja/manual/development/monaca_cli/

## 事前準備

1. Monacaのアカウント取得
2. デバッガーアプリのインストール

アカウントが取得できたら、cliで`monaca login`を叩いてログインしておいてください。

`monaca whoami`コマンドもあったら良いなぁ…

monaca コマンドの利用には`npm install -g monaca` で。

## プロジェクトの作成

`monaca create`コマンドでプロジェクトが作成できる。

````
$ monaca create {APP_DIR}
````

作成したらwebstormなどでコードを開いて、編集可能。

アプリの確認には`monaca debug`コマンドを。 

````
$ monaca debug
````

デバッガーアプリを端末側で起動しておくと、自動でアプリを検出してファイルを転送してくれる。

debug起動中はファイルの変更を感知して転送してくれるので、debugコマンドを何度もたたき直す必要はない。

## アプリケーションのビルド

`monaca remote build`コマンドでアプリケーションのビルドが行える模様

````
$ monaca remote build --browser
````

ファイルの転送が終わると自動でビルド設定画面が開いてWeb経由でビルド出来る模様。

超便利。
Unityインストール(windows)

# Unityをダウンロードする
 <br>https://unity3d.com/jp/get-unity/update</br>
# 最新版をダウンロードする
 バージョンは適宜最新版を選択ください。
![image](https://qiita-image-store.s3.amazonaws.com/0/60734/ed956229-11fb-7d25-a395-3987cd8a0dfe.png)

# UnityDownloadAssistantの起動、インストール
1. UnityDownloadAssistant-{バージョン}.exeがダウンロードされているので、クリックで起動、Nextを選択
![image](https://qiita-image-store.s3.amazonaws.com/0/60734/e38c519c-21fe-9934-2aff-a76befa76239.png)
2. ライセンス条項を確認し、チェックを入れてNextを選択
　![image](https://qiita-image-store.s3.amazonaws.com/0/60734/e5b3e485-a5d5-700e-1985-aa5f23a0840c.png)
3. OSに合わせて64bit,32bitを選択し、Nextを選択
![image](https://qiita-image-store.s3.amazonaws.com/0/60734/940f37dd-b612-a0ff-5e74-1fcafd7ac32f.png)
4. インストールするコンポーネントを選択します。今回はデフォルトのUnity本体、ドキュメント、Standard Assetsに加え、Microsoft Visual Studio Tools for Unity、Android Build Support、iOS Build Supportを選択しました。アプリを実行したいプラットホームに応じて選択してください。
![image](https://qiita-image-store.s3.amazonaws.com/0/60734/83b32fbf-2e40-7b03-87d2-88d2c9eb01c3.png)
5. ダウンロード場所とインストール場所を指定します。特に思いがなければ、そのままNextを選択
![image](https://qiita-image-store.s3.amazonaws.com/0/60734/b7af3069-cdee-485f-d3c7-b0a3c583201d.png)
6. ダウンロード及びインストールが開始されます。

# トラブルシューティング

インストール後に起動した結果画面が真っ暗になった方はこちらを参照してください。
http://qiita.com/icoxfog417/items/45cc3a15107d52c0dcff
【GAS】気象庁のサイトから今日の天気を取得してSlackへ流す

　GAS（ギャス）で気象庁のサイトから東京の降水確率、最低最高気温を取得してSlackへ流してみたいと思います。Slackへ流す部分は[今日の予定をまとめて教えてくれるslackの秘書BOT](http://qiita.com/seya128/items/028274fc014af37f7931)を参考にしています。[@seya128](http://qiita.com/seya128)さん、大変お世話になりました。


　気象庁のサイトのなかの、東京の天気予報のページ
　http://www.jma.go.jp/jp/yoho/319.html

　本来は正規表現を駆使して華麗にピンポイントに抽出するんでしょうが、私の流儀（やり方）はリソースから区切れそうなタグを見つけて絞り込み、さらにそのなかから区切れそうなタグを見つけてを繰り返し、最後は文字列操作で引っこ抜き、微調整を加えます。

```js:コード.gs

function getWeatherData() {

  // データ取得
  var url = "http://www.jma.go.jp/jp/yoho/319.html";
  var response = UrlFetchApp.fetch(url);
  var data = response.getContentText();
    
  // 大雑把に分割＆配列化
  var ary = data.split("<th class=\"weather\">");
    
  // 朝6時から24時までの降水確率
  var ary2 = ary[1].split("%");
  ary2.pop();
  var ary3 = [];
  for (var i in ary2) {
    ary3.push(ary2[i].substr(-2)+"%");
  }
  var str1 = "06-12:"+ary3[1]+"\n12-18:"+ary3[2]+"\n18-24:"+ary3[3];
    
  // 最低最高気温
  var min = ary[1].split("min")[1].substr(2,3);
  // 記録がない場合は「---」に置き換える
  if (min == "</t") min = "---";
  var max = ary[1].split("max")[1].substr(2,3);
  if (max == "</t") max = "---";
  var str2 = "最低気温:"+min+"\n最高気温:"+max;
    
  // Slackへ流す
  var payload = {
  "text" : "今日の天気（気象庁サイト抜粋＆加工）\n" + str1 + "\n" + str2,
  "channel" : "#general",
  "username" : "my秘書",
  "icon_emoji" : ":information_desk_person:"
  }
  var options = {
    "method" : "POST",
    "payload" : JSON.stringify(payload)
  }
  var url = "https://hooks.slack.com/services/取得したWebhookURL";
  var response = UrlFetchApp.fetch(url, options);
  var content = response.getContentText("UTF-8");
    
}
```

　実行結果です。

![スクリーンショット 2016-09-10 15.37.37.png](https://qiita-image-store.s3.amazonaws.com/0/139134/fb1ec423-783a-be66-ccd6-6dbb4a5d20a7.png)


　毎日5時・11時・17時に発表されるようなので、朝6時〜7時ぐらいにスクリプトを実行するように設定（スクリプトエディタの「リソース」→「現在のプロジェクトのトリガー」→以下略）しておけば出かける前にチェックできていいと思います。今日の予定、天気、電車遅延情報など、いろいろまとめて送るようにしておくと便利ですよね。
初心者がherokuのloginにつまづいた話

Herokuのセットアップをして、heroku loginできるようにもなりsshも登録できてheroku create [app_name]もしました。
さっそくPushしようとすると。

`$ git push heroku master`

エラーが出る

    fatal: 'heroku' does not appear to be a git repository
    fatal: Could not read from remote repository.



## 解決方法

これでaddしないといけないらしい

`$ git remote add heroku git@heroku.com:{my-project-name}.git`

そしたら無事に** heroku **にPushできました。

こちらを参考にさせていただきました

[Railsでtwitterサービスをつくる（続きの続き）](http://d.hatena.ne.jp/s-0samu/20110416/1302890751)
VimやEmacsでカーソル下のリンクを開く動作の比較

# はじめに

VimやEmacsでは, カーソル下にあるパスやリンクを開けるキーバインドがあるが,
認識できる文字列は, それぞれで異なる.

# Vim
## gf

http://vim-jp.org/vimdoc-ja/editing.html#gf

- `gf`キーでカーソル下のパスをVim内で開ける.
- 環境変数は, UNIX形式 (`$APPDATA`等) でも, Windows形式 (`%APPDATA%`等) でも展開できる.

## gx

http://vim-jp.org/vimdoc-ja/pi_netrw.html#netrw-gx

- `gx`キーでカーソル下のリンクを開ける. ([start](http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/start.shtml)コマンドや, ダブルクリックする操作に近い.)

- そのため, `gf`と違い, 環境変数は展開できないが, URLを開くときなどに使える.

- Windowsの[`shell`](https://ss64.com/nt/shell.html)スキーム (`shell:AppData`等) は, `gf`では展開できないが, `gx`では展開できる.

# Emacs
## FFAP

https://www.gnu.org/software/emacs/manual/html_node/emacs/FFAP.html

- FFAP (find-file-at-point) が有効であれば,`C-x C-f`や`C-x C-d`で
  カーソル下のパスをEmacs内で開ける. URLも開ける.

- 環境変数は, UNIX形式は展開できるが, Vimと違い, Windows形式が展開できない.
  `shell`スキームも展開できない.


## org-mode, markdown-mode
- [org-mode](https://orgmode.org/manual/Handling-Links.html#index-C_002dc-C_002do)や[markdown-mode](http://jblevins.org/projects/markdown-mode/)では, `C-c C-o`でカーソル下のリンクを開ける.
  URLを開くときなどに使える.

- パスについては, 例えば, 単に`\Users`では開けない.
  orgでは`[[\Users]]`, Markdownでは`[Users](\Users)`
  というように, それぞれのリンク表記にすれば, 開くことができる.
  ただし, 環境変数は展開できない.

- また, `shell:`表記は, org-modeでは, Windowsの`shell`スキームでなく,
  org-modeの`shell`[リンク](https://orgmode.org/manual/External-Links.html)として認識される.
  例えば, `shell:pwd`というテキスト上で`C-c C-o`すると, コマンドが実行される.

# まとめ
上記は一例だが, まとめると, 以下のようになる.

| 表記                | 例               | Vim  | ffap | org-mode | markdown-mode |
|---------------------|------------------|------|------|----------|---------------|
| パス                | `\Users`         | `gf` | :o:  |          |               |
| UNIX形式環境変数    | `$APPDATA`       | `gf` | :o:  |          |               |
| Windows形式環境変数 | `%APPDATA%`      | `gf` |      |          |               |
| shellスキーム       | `shell:AppData`  | `gx` |      | :x:      |               |
| URL                 | http://qiita.com | `gx` | :o:  | :o:      | :o:           |
| httpプロトコル      | `http:qiita.com` | `gx` |      | :o:      |               |
| fileプロトコル      | `file:C:\Users`  | `gx` |      | :o:      | :o:           |
| orgリンク表記       | `[[\Users]]`     |      |      | :o:      |               |
| org shellリンク     | `shell:pwd`      | :x:  |      | :o:      |               |
| Markdownリンク表記  | `[User](\Users)` |      |      |          | :o:           |

## 確認環境
- Windows 7
- Vim 7.4
- Emacs 24.4
- org-version 8.3.4
- markdown-mode 2.1
(個人用)macの中身のお片づけルール

あゆめぐmac PCのお片づけルール

お片づけの際、ファイルの容量食っているものを探すのにこれを使うと便利
<a href="http://pc-karuma.net/mac-disk-inventory/" target="_blank">ディスクの占有率を表示「Disk Inventory X」 - Macアプリ</a>

##1、xcode周り
DerivedDataフォルダ配下がでかくなるので消す。
<a href="http://qiita.com/hirayaCM/items/14dc021d4b27bdbfbb3d" target="_blank">Xcode関連の不要ファイルを削除してディスクスペースを節約</a>

##2、Unityのプロジェクトいらないのは削除。
アセットをインポートしただけのとかちょっと試したやつとか二度と開かないものは削除。
NGUIのExampleは数の暴力になるので削除する。
しばらく開かなそうなものはLibraryフォルダやTmpフォルダなども丸っと削除する

##3、ライブラリフォルダ配下のCashesフォルダの整理
ライブラリフォルダ以下のUnityのGiCasheが以外とでかくなっていたりするのでさよならする。
Unity開いていればUnityのprefarenceからGI Cache Clean Chacheボタンで綺麗にできる。
<img width="377" alt="スクリーンショット 2016-09-10 14.39.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/f6e87d75-eb9e-a158-5804-673db36a6576.png"><img width="300p" src="https://qiita-image-store.s3.amazonaws.com/0/46444/0e5c897c-8aaa-9f72-6222-ac3605137686.jpeg">


##4、unityAssetの整理
4系と5系でAsset Storeのフォルダが分かれるので5でもDLできるものは4のフォルダから消して少しでも少なくする。
配信されなくなった場合にダウンロードできなくなるのでパッケージをむやみに消さないようにすること。
<img width="369" alt="スクリーンショット 2016-09-10 14.53.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/4606c226-73ab-3d5f-c7c8-e99214b814cb.png">

##5、SVNのclean
サーバーに上がっているものは必要なもの以外はローカルにある必要がないので削除。

##6、git管理が必要になくなったプロジェクトのローカル上の.gitフォルダ削除
およびプロジェクト削除。欲しくなったらまた落としてくればいいでしょ。

##7、Unityのバージョン違い削除
案件で使わなくなったUnityのバージョンなど削除する。
個人用で必ず残しておくバージョンはUnity4.7系、個人開発用のバージョン、最新のUnityのバージョン系の3つで十分。
また、Unityはパッチバージョンまでちゃんと名前つけるようにすること。
<img width="147" alt="スクリーンショット 2016-09-10 15.10.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/f8136f72-2617-fcb8-db25-395966fd87c1.png">

##8、ダウンロードフォルダのお片づけ

##9、Dropboxの不要なファイルの整理

##10,ゴミ箱を空にする

##11,PCを再起動する

常に容量に余裕を持った生活を心がけましょう。以上。

追加
アプリケーションフォルダのandroidのsdk系がすごく容量をくってた。20GBあった。
adt-bundle-mac-x86_64-20140702/sdk/system-images
をごっそり削除。ビルドするだけならいらないらしい。
これだけで12GB空いた。
<img width="200" alt="スクリーンショット 2018-05-30 18.16.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/0cb2a326-dc30-d592-a90d-ea64a0205c23.png">

<a href="http://l-s-d.sakura.ne.jp/2016/11/too_heavy_android_sdk/" target="_blank">AndroidSDKの容量が重い・・・だと・・・？</a>
IndexedDBとWebStorage(localStorageとsessionStorage)のざっくりまとめ


## IndexedDB、WebStorageとはざっくりと
### IndexedDB
最近の技術。より大きな容量を扱える。

### localStorage (Web Storage)
永続的に使えるストレージ。
5MBぐらい(ブラウザによる)。


### sessionStorage (Web Storage)
セッションが有効な限り使えるストレージ。
5MBぐらい(ブラウザによる)。

### クッキー (Web Storage)
毎回通信を行うためセキュリティ的に微妙らしい。
4KBぐらい。

Web Storageについては以下が分かりやすいかと思います。localStorageとsessionStorageのサンプルコードも載っています。
 [Web Storage－HTML5のAPI、および、関連仕様](http://www.htmq.com/webstorage/)


## IndexedDBとLocal Storageの違い
IndexedDBを使うモチベーションは以下。
- 大容量
- search API

Local Storageだとkeyによってデータを集めるしかできない。IndexedDBはその辺便利になってるらしい。

[Working With IndexedDB](http://code.tutsplus.com/tutorials/working-with-indexeddb--net-34673) by Envato Tuts+
>Local Storage is also very well supported, but limited in terms of the total amount of storage you can use. Local Storage doesn't provide a true "search" API as data is only retrieved via key values. Local Storage is great for "specific" things you may want to store, for example, preferences, whereas IndexedDB is better suited for Ad Hoc data (much like a database).


## ブラウザのサポート状況
IndexedDBはChrome、Firefoxでは大丈夫っぽい。
http://caniuse.com/#search=indexeddb



![caniuse.com indexedDB](https://qiita-image-store.s3.amazonaws.com/0/94964/76d18ede-8ceb-5659-62dd-8dc51da2cb73.png "Kobito.XatVWG.png")
(2016/09/10でのサポート状況)

localStorageとsessionStorageは問題なく使える。


## 容量について詳しく
2014年1月の記事ですが、詳しく調査されています。
[モダンブラウザのストレージ容量と調査方法まとめ - HTML5 Rocks](http://www.html5rocks.com/ja/tutorials/offline/quota-research/)
ちなみにChromeではこんな感じ。
>LocalStorage, SessionStorage ではそれぞれ 10MB まで保存が可能です。 
IndexedDB は、デフォルトでは 10MB に達した時点でユーザーに許可を求め、ドメインごとに 250MB まで利用可能になっていますが、...

自分の使っているブラウザでの容量制限をテストできるサイト
[Web Storage Support Test](http://dev-test.nemikor.com/web-storage/support-test/)
PEGと同等な表現能力の正規表現

書ける気がするけれども、実際のところはどうなのだろう。

## PEGの定義と正規表現の機能
文脈自由文法（CFG）は、純粋な正規表現では表せない入れ子構造の文字列を表すことができる。だが正規表現の実装によっては、再帰が可能で入れ子構造に対応できるものがある。

CFGと似た感じのParsing Expression Grammar（PEG）についても、定義を見ていたら全て正規表現の機能で再現できるのではないかと思った。

| [PEG](https://ja.wikipedia.org/wiki/Parsing_Expression_Grammar) | 正規表現 ([Ruby](http://docs.ruby-lang.org/ja/latest/doc/spec=2fregexp.html)) |
|:--|:--|
| 終端記号 | 1文字 |
| 非終端記号 | 利用のみ： `/\g'expr'/`<br>定義： `/(?'expr'expression)/` |
| 空文字列 | `//` |
| 連接 $e\_1 e\_2$ | `/\g'e1'\g'e2'/` |
| 選択 $e\_1 / e\_2$ | <code>/(?>\g'e1'&#x7C;\g'e2')/</code> |
| 0回以上 $e*$ | `/\g'expr'*+/` |
| 1回以上 $e+$ | `/\g'expr'++/` |
| 省略可能 $e?$ | `/\g'expr'?+/` |
| 肯定先読み $\\&e$ | `/(?=\g'expr')/` |
| 否定先読み $!e$ | `/(?!\g'expr')/` |

PEGの特徴のひとつは「選択は最初にマッチしたものを結果とする」「繰り返しは常に貪欲」という**バックトラック軽減**なので、**アトミックグループ**や**絶対最大量指定子**を使えば正規表現でも再現できるはず。先読みも正規表現にあるし、部分式呼び出し（再帰）でバッカス・ナウア記法みたいな書き方ができる。

### 非終端記号の定義の書き方
非終端記号の定義 `/(?'expr'expression)/` は必ず同じ正規表現のどこかに書いておかなければならない。ただしこれもマッチの対象になってしまうため、**本文のマッチを邪魔しない書き方**が必要になる。それには以下のような方法がある。

* `/本文(?'expr1'expression1){0}(?'expr2'expression2){0}.../` という風に**空文字列化して連結**しておく。（空文字列を表すパターンは必ずマッチが成功する）
* `/本文|(?!)(?'expr1'expression1)(?'expr2'expression2).../` という風に**絶対にマッチしない選択**を作ってその中に書く。
* 本文中に各定義が1回だけ現れるよう埋め込む。上のどちらかを作ってから変換すると楽。

## 例
文脈自由言語でない例としてよく出る $a^n b^n c^n$（$n \ge 1$）。

```math
\begin{align}
S &\gets \&(A \:\: !b) \:\: a\!\!+ B \:\: !. \\
A &\gets a \:\: A? \:\: b \\
B &\gets b \:\: B? \:\: c
\end{align}
```

ほぼそのまま正規表現で表すことができる。空白を入れられるモードにして書くと読みやすい。

```ruby:anbncn_regexp.rb
# 3つの正規表現は「非終端記号の定義の書き方」が異なるだけで同じ文字列にマッチする
regexp1 = /
	\A (?= \g'A' (?! b)) a++ \g'B' \z
	(?'A' a \g'A'?+ b){0}
	(?'B' b \g'B'?+ c){0}
/x
regexp2 = /
	\A (?= \g'A' (?! b)) a++ \g'B' \z
	|(?!)
	(?'A' a \g'A'?+ b)
	(?'B' b \g'B'?+ c)
/x
regexp3 = /
	\A (?= (?'A' a \g'A'?+ b) (?! b)) a++ (?'B' b \g'B'?+ c) \z
/x

# 1行入力するたびにマッチするかどうかを出力
while (str = gets)
	str.chomp! # 末尾に改行文字があるとマッチしないので削除
	p [regexp1 === str, regexp2 === str, regexp3 === str]
end
```

選択の動作が重要になるマッチに関してはいい例が出てこなかった。アトミックグループによってマッチしなくなる簡単な例を挙げておく。

```ruby:ordered_choice.rb
p "abc".match(/(?:ab|a)c/)   #=> #<MatchData "abc">
p "abc".match(/(?>ab|a)c/)   #=> #<MatchData "abc">

p "abc".match(/(?:a|ab)c/)   #=> #<MatchData "abc">
p "abc".match(/(?>a|ab)c/)   #=> nil
```

## 使い道
PEGを使うべきところを無理に正規表現で代用するのは損するだけだが、正規表現のバックトラック抑制のヒントにはなると思う。

## 参考

- [Parsing Expression Grammar - Wikipedia](https://ja.wikipedia.org/wiki/Parsing_Expression_Grammar)
- [PEG基礎文法最速マスター - kmizuの日記](http://kmizu.hatenablog.com/entry/20100203/1265183754)
- [正規表現 (Ruby 2.0.0)](http://docs.ruby-lang.org/ja/2.0.0/doc/spec=2fregexp.html)
- 正規表現技術入門 最新エンジン実装と理論的背景
Laravel5.3


- Laravelのバージョン確認

```
php artisan --version
```

- プロジェクトの作成

```
php composer.phar create-project --prefer-dist laravel/laravel <プロジェクト名>
```

- データベースの作成

```sql:
create database <データベース名>;
grant all on <データベース名>.* to <DBユーザ名>@localhost identified by '<DBパスワード>';
```

- プロジェクトの初期設定

```php:.env
DB_DATABASE=<データベース名>
DB_USERNAME=<DBユーザ名>
DB_PASSWORD=<DBパスワード>
```

```php:config/app.php
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
```

- テーブルの作成

```
php artisan make:migration create_<テーブル名>_table --create=<テーブル名>
```

```php:database/migrations/create_<テーブル名>_table.php
    public function up()
    {
        Schema::create('<テーブル名>', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }
```

```
php artisan migrate
```

- テーブルにカラムを追加する

```
php artisan make:migration add_<カラム名>_to_<テーブル名>_table --table=<テーブル名>
```

```php:database/migrations/add_<カラム名>_to_<テーブル名>_table.php
    public function up()
    {
        Schema::table('<テーブル名>', function (Blueprint $table) {
            $table->string('<カラム名>');
        });
    }

    public function down()
    {
        Schema::table('<テーブル名>', function (Blueprint $table) {
            $table->dropColumn('<カラム名>');
        });
    }
```

```
php artisan migrate
```

- モデルの作成

```
php artisan make:model <モデル名>
```

```php:app/<モデル名>.php
class <モデル名> extends Model
{
    protected $fillable = ['<カラム名1>', '<カラム名2>'];
}
```

- レコードの追加

```
php artisan tinker

$row = new App\<モデル名>();
$row-><カラム名1> = '<カラム名1> 1';
$row-><カラム名2> = '<カラム名2> 2';
$row->save();

App\<モデル名>::create(['<カラム名1>'=>'<カラム名1> 2', '<カラム名2>'=>'<カラム名2> 2']);
App\<モデル名>::create(['<カラム名1>'=>'<カラム名1> 3', '<カラム名2>'=>'<カラム名2> 3']);

exit
```

- ルートの設定

```php:routes/web.php
Route::get('/', function() {
	return view('test');
});
```

```php:resources/views/test.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>test</title>
</head>
<body>
テストです。
</body>
</html>
```

```
php artisan serve --host 192.168.33.10 --port 8000
```

- スタイルの設定

```php:resources/views/test.blade.php
    <link rel="stylesheet" href="css/styles.css">
```

```css:public/css/styles.css
body {
	margin: 0;
	padding: 0;
	font-size: 16px;
	font-family: Verdata, sans-serif;
}
```
[バグか仕様か?] FreeBSD /bin/shにおける-mオプションの挙動

FreeBSDの/bin/shで、他実装とは違うヘンな挙動を見つけたのでメモ書き。

# まずは、このテストコード（setm_test.sh）を書いてください。

```sh:setm_test.sh
#! /bin/sh

set -m                # ←コレをつけると不可解な動きをする

# 終了時のトラップ設定
exit_trap() {
  trap INT
  echo "EXIT_TRAPPED"
  exit 1;
}
trap 'exit_trap' INT

# メインルーチン（sleepを実行して終了を通知する）
sleep 5 || echo $?
echo "FINISH_SLEEPING"
trap INT
```

冒頭に出てくる`-m`というオプションは、ジョブ制御を有効にするためのものです。具体的には、

* ジョブ完了メッセージ（“`[1] Done`”のようなメッセ^時）が出る。（非対話のシェルスクリプトのデフォルトでは表示されない）
* fgコマンドのような、ジョブ制御コマンドが使えるようになる。（非対話のシェルスクリプトのデフォルトでは、エラーメッセージが出て使えない）

などの効果があります。

# 書いたら実行してみください。

## (1)起動するだけで何もせず、終了を待つ。

```sh:
$ sh setm_test.sh
FINISH_SLEEPING
$ 
```

5秒経過したら`FINISH_SLEEPING`と表示されて終了します。

## (2)起動したら5秒以内に[CTRL]+[C]を押して止める

```sh:CentOS6,Ubuntu14,AIX7.1で試した場合
$ sh setm_test.sh
^CEXIT_TRAPPED
$ 
```

```sh:FreeBSD10で試した場合
$ ./setm_test.sh
^C130
FINISH_SLEEPING
$ 
```

なんとOSによって挙動が変わります。FreeBSD以外だと、シェルが[CTRL]+[C]によるSIGINTを受け取ると、現在実行中のsleepコマンドを中断させ、trap設定してあったexit_trap関数へ制御を移します。

ところが、FreeBSDだと、sleepコマンドを中断させた後、そのままメインルーチンを続行してしまうのです。これっておかしくないでしょうか？

# シェルではなくOSの問題？それとも仕様？

この問題、bashでも起こります。

```sh:FreeBSD10で試した場合
$ bash setm_test.sh
^C130
FINISH_SLEEPING
$ 
```

shだけで起こるならshのバグと思えそうですが、シェルを替えても起こるのでOSのバグなのか、それともFreeBSDの仕様なのか。

どちらなのか、現状では判断がつきません。（Macとかどうかなのかな？）

心当たりの方、是非コメントください。
laravel パスワードのバリエーション

vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php

$plain = $credentials['password'];
 +
 +        if($this->hasher->check($plain, $user->getAuthPassword()) || $user->getAuthPassword() === md5(md5($plain) . $user->getSalt())
 +        ) {
 +            return true;
 +        }
 +            return false;
R > データセットのプロット > y <- c(157.2, 112.5, 108.4, 87.8, 70.0, 64.1, 63.8, 63.7, 64.2, 64.6)

```txt:動作環境
MacOS X El Capitan
R Studio v0.99.903
R　version 3.3.1
```

CUDAで時間計測したデータをグラフ表示してみる。

### 連続値のセット > 1:10

1から10の連続値がセットされる。

```
> x <- 1:10
> x
[1] 1 2 3 4 5 6 7 8 9 10
```

### 測定値のセット > c()を使う

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

> 規則性のない数値の並びをベクトルの要素として指定する場合にはc()関数を使います。

以下は[自分が計測したデータ](http://qiita.com/7of9/items/1feab93a71e102fb3b06#code--gpu%E5%87%A6%E7%90%86%E3%81%AE%E6%99%82%E9%96%93%E8%A8%88%E6%B8%AC)(CUDAの処理時間[msec])。

```
> y <- c(157.2, 112.5, 108.4, 87.8, 70.0, 64.1, 63.8, 63.7, 64.2, 64.6)
> y
 [1] 157.2 112.5 108.4  87.8  70.0  64.1  63.8  63.7  64.2  64.6
```

### plot

```
> plot(x,y)
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/88012967-2fe6-d260-1efa-989d4f4be4c0.png)

GPU処理の時間が徐々に減っていき、ある値で安定するのはキャッシュが効いているのだろうか。