OmniAICreator/Qiita-1.07M huggingface dataset:
Wisp : Quick Start

Installation
----------------

`npm install wisp -g`

That's it. A single line.
Of course, if you don't have npm, go download [Node](https://nodejs.org/download/). It's included in it.
Wisp is **#JustAnotherNodeModule** that you can download from npm and then call it from your shell.
Of course, since we're also interested in merging multiple Wisp files into one JavaScript file in-browser through **namespaces**, a la ClojureScript, so we'll just have to [browserify](http://browserify.org/) it.

`npm install browserify -g`


Using Wisp
----------------

Open your editor and type this:

`(console.log "hello world")`

and save as **main.wisp**.
Now, to run it locally, just `cd` to your working directory and type

`wisp main.wisp`

The line "hello world" will be printed on the console. Next will be the JavaScript output.
Go to the console again. This time, use the command,

`wisp -c main.wisp`

Voila! The compiled Javascript, `console.log("hello world")`, among other things is printed on the console. 
Unfortunately, the binary does not have direct file creation yet, so we'll just to move our lazy fingers and do this if we want the JavaScript file.

`wisp -c main.wisp > main.js`

If you're not using namespaces, then you could just `cat` them together before using the wisp binary to compile them into your target javascript file.
Example from the wisp github repo:

`cat in.wisp | wisp > out.js`
セキュリティグループとネットワークACLで塞げないもの


セキュリティグループやネットワークACLのOutboundで許可していないにも関わらず、フィルタされないトラフィックがあるらしい。
と、VPCのドキュメントに書いてあったのに知らなかった…
Lambdaは例外ぽい(後述)。

> Amazon セキュリティグループとネットワーク ACL では、リンクローカルアドレス（169.254.0.0/16）との間のトラフィック、または AWS 予約済みアドレス（各サブネットの最初の 4 つの IP アドレスと最後の 1 つのアドレス）との間のトラフィックをフィルタしません。
> [VPC のセキュリティ](http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_Security.html)

具体的には下記のサービスがそれにあたる。
これらのトラフィックはVPCフローログにもでない。

* DNS (AmazonProvidedDNS)
* DHCP
* Amazon EC2 インスタンスメタデータ
* KMS (Windowsインスタンスのライセンス管理)
* サブネットでのルーティング

# Lambdaの場合

ただし、LambdaからVPC内のAmazonProvidedDNSで名前解決しようとするとリジェクトされた。
また、リジェクトされたトラフィックがVPCフローログに残るようだった。

LambdaからAmazonProvidedDNSを使って名前解決したい時は、Lambdaに設定したセキュリティグループのOutboundで明示的にDNSの設定を追加してやる必要がある。
Wisp : An Introduction 

[Wisp](https://github.com/Gozala/wisp) is an [homoiconic](https://en.wikipedia.org/wiki/Homoiconicity) JavaScript Dialect with Clojure syntax, compiled down to pure JavaScript, with a self-hosting compiler. 

Which basically means you can do this with Jquery loaded:

```clj

(.click ($ document) 
  (fn [] (alert "hello")))
```

and not get yourself in flames for not obeying some Java god because it compiles down to this:

```js
$(document).click(function () {
    return alert('hello');
});
```

The idea is in using Clojure for the modernised syntax, but reusing as much as possible what Javascript already has. Wisp does not use Clojure's immutable data structures, among other things, so that it can be compiled down to javascript with minimal effort. 

The next chapter will be quick start on using Wisp.
Capybara、phantomjsを使ったテスト

## JavascriptによるDOM操作に依存する総合テスト


Jsのテスト環境構築をメモ

通常の Rspec/Capybara のテストとは分離します。
理由：Js関連と分けることで、テストの実行にかかる時間を短縮
場所： `jspec/features` ディレクトリを作成


#### 準備 (Mac)

<pre>
$ cd ~
$ mkdir -p src
$ cd src
$ git clone git://github.com/ariya/phantomjs.git
$ cd phantomjs
$ git checkout 1.9
$ ./build.sh
$ sudo cp bin/phantomjs /usr/local/bin/
$ brew install phantomjs192
</pre>

※ buildには20分程かかります。

Gemfile
Capybara から PhantomJS を使うには poltergeist を使います。
<pre>
group :test do
  gem 'rspec-rails'
  gem 'capybara'
  gem 'poltergeist', git: 'git@github.com:teampoltergeist/poltergeist.git'
  gem 'launchy'
end
</pre>

spec_helper.rb
1, `inspector: true` Poltergeistが提供しているデバッグ機能
https://github.com/teampoltergeist/poltergeist#remote-debugging-experimental
2, poltergeistを使う指定

<pre>
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'capybara/poltergeist'

Capybara.register_driver :poltergeist do |app|
  options = { inspector: true }
  Capybara::Poltergeist::Driver.new(app, options)
end

Capybara.javascript_driver = :poltergeist
Capybara.always_include_port = true

Dir[Rails.root.join("jspec/support/**/*.rb")].each { |f| require f }
</pre>

テスト実行には下記のコマンドを使用します。

<pre>
$ bin/rspec --default-path=jspec jspec/
</pre>

これで、Jsを含んだ機能のテストができます。
R便利帳

##データフレームの分割
5分割したい場合
　`分割後のリスト名 <-　split(データフレーム名,リストのインデックス)`
* 分割したデータフレームへのアクセス
　`リスト名[[インデックス]]`
####文字列の結合
　`paste(a,b)`
Play2.4のDIベースなアプリのテスト実行について

# はじめに
以下のような依存関係のあるアプリがあって、ApplicationにはMyServiceが、MyServiceにはMyRepositoryが注入されているとする。

> Application(Controller) -> MyService -> MyRepository

この時、MyServiceのテストをしたいと思った時、Applicationは不要なわけで、となるとさて、どうやってテスト対象のMyServiceを得るんだっけ？となったのが今回のポストのきっかけ。

※なお、実行環境によって本番用モジュールとテスト用モジュールを切り替えてテストする方法については以下にまとめています。
[Play2.4のDIについて動作確認（Guiceの使い方）](http://qiita.com/mtoyoshi/items/768a1a8ece5a9be7254e) 

# 動作確認
## ベースプログラム
まず、今回使うプログラム群を示す。
ControllerであるApplication.scalaは ```activator new``` で生成できるテンプレのやつをベースにして、 ```service.run()``` を実行する。

```scala:Application.scala
@Singleton
class Application @Inject() (service: MyService) extends Controller {
  def index = Action {
    println(service.run())
    Ok(views.html.index("Your new application is ready."))
  }
}
```

MyServiceは

```scala:MyService.scala
@ImplementedBy(classOf[MyServiceForProduction])
trait MyService {
  def run(): String
}

@Singleton
class MyServiceForProduction @Inject() (@Named("production-rep") repository: MyRepository) extends MyService {
  def run() = "production: " + repository.findAll().size
}

@Singleton
class MyServiceForTest @Inject() (@Named("test-rep") repository: MyRepository) extends MyService {
  def run() = "test: " + repository.findAll().size
}
```

MyRepository#findAllの戻り値型はちょっとサボってます。。

```scala:MyRepository.scala
trait MyRepository {
  def findAll(): Seq[Int]
}

@Singleton
class MyRepositoryForProduction extends MyRepository {
  def findAll() = Seq(1,2,3,4,5)
}

@Singleton
class MyRepositoryForTest extends MyRepository {
  def findAll() = Seq(-1)
}
```


```scala:MyRepositoryModule.scala
class MyRepositoryModule extends AbstractModule {
  override def configure(): Unit = {
    bind(classOf[MyRepository])
      .annotatedWith(Names.named("production-rep"))
      .to(classOf[MyRepositoryForProduction])
    
    bind(classOf[MyRepository])
      .annotatedWith(Names.named("test-rep"))
      .to(classOf[MyRepositoryForTest])
  }
}
```

最後にModule定義を追加。

```:application.conf
play.modules.enabled += "modules.MyRepositoryModule"
```

```http://localhost:9000/``` にアクセスすれば、コンソールに ```production: 5``` と表示される。
無事、本番用のモジュール群が注入されていることが確認できた。

## MyServiceをテストしたい
Controllerからじゃなくて途中のServiceからテストしたい、とした場合誰がMyServiceForTestの方をnewしてしかも依存性の注入まで行うのか、というのが当初よく分からなかった。
Guiceのマニュアルを読んでInjectorを使って生成する事を知った。以下、テストコード。

```scala:MyServiceSpec.scala
class MyServiceSpec extends FlatSpec with Matchers {

  "MyService" should "be MyServiceForTest" in {
    val injector = Guice.createInjector(
      new AbstractModule(){
        override def configure(): Unit = bind(classOf[MyService]).to(classOf[MyServiceForTest])
      },
      new MyRepositoryModule())

    val service = injector.getInstance(classOf[MyService])

    service.run() should be ("test: 1")
  }
}
```

これで無事、Controllerからじゃなくても途中のモジュールをテストできる事が分かった。
linux メモリキャッシュクリア

```
# sync; echo 3 > /proc/sys/vm/drop_caches
```

1 は ページキャッシュのクリア
2 は dentry, inode のクリア
3 は ページキャッシュ, dentry, inode のクリア (1 | 2)

sysctl -w だとこんな感じ。

```
# sync; sysctl -w vm.drop_caches=3
```

(昔はおまじないのように sync; sync; sync してたなぁ・・・)
Maven antrunプラグインを利用して、テスト時にリソースファイルをコピーする。

# 概略

テスト実行前に``myproject.properties``ファイルを``myproject.ja_JP.properties``へコピーします。

# なんでこんなことしているのか？

ユニットテスト時に、どうしても各国語リソースが欲しい。
↓
とりあえず元ファイルをコピーしてしのぐ。
↓
元ファイルを変更すると、それを各国語へ反映しなくちゃいけない。
↓
面倒すぎる。 :disappointed: 
↓
テスト時に元ファイルをコピーすればいいんじゃね？ ＜ イマココ！

# antrunプラグインを使って、ファイルをコピーする

resourcesプラグインには特定ファイルを複製する機能がないのです。 :disappointed_relieved: 

antrunプラグインを[resourcesプラグインのライフサイクルフェイズであるprocess-test-resources](http://maven.apache.org/plugins/maven-resources-plugin/testResources-mojo.html)フェイズで実行しています。

テスト時のリソースコピー先は``${project.build.testOutputDirectory}``に入っているので、それをantのプロパティとして使えるようにしています。


```xml:pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!-- (略)-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <phase>process-test-resources</phase>
                        <configuration>
                            <target>
                                <property name="output_dir" value="${project.build.testOutputDirectory}"/>
                                <copy file="${output_dir}/myproject.properties"
                                      tofile="${output_dir}/myproject.ja_JP.properties" />
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
```

これで、test-compileフェイズ実行時にリソースファイルがコピーされるようになりました。 :smile:
TableSorter( jQuery plug-in)で簡単に表のソートを実装する。

#概要
- クライアント側で表の基本的なソートを簡単に実装したい。
- TableSorter(jQuery plug-in)を使用。
- CSSに関しては、ドキュメンテーションが参考にならなかったので、試行錯誤の結果です。

![Screenshot 2015-07-22 20.00.14.png](https://qiita-image-store.s3.amazonaws.com/0/82804/d3e7bcfc-33b8-7842-f818-b36fd022aa61.png)

#環境
Ruby 2.2.1
Rails 4.2.2

#やり方

## 準備
ドキュメンテーションに従い、TableSorterを対象のアプリケーションに追加してください。

## View
HAMLで書きました。基本的なHTMLのtableです。ポイントは２つです。
1. jQueryが表を探すためのIDをtableタグにつけておきます。
2. 後にCSSにより三角印のアイコンを挿入する目的で、空spanタグを予め書いておきます。

```haml
%table#myTable
  %thead
    %tr
      %th
        %span.arrow
          / <=ここにアイコンを挿入する。
      %th
        %span.arrow
          / <=ここにアイコンを挿入する。
      %th{ span: "2" }
  %tbody
    %tr
      %td 列１データ１
      %td 列１データ２
      %td ...
      %td ...
    %tr
      %td 列２データ１
      %td 列２データ２
      %td ...
      %td ...
    ...
```

## jQuery
CoffeeScriptで書きました。対象の表に対して、TableSorterを呼び出します。これで表にソート機能が追加されます。

```coffeescript
$(document).ready ->
  $("#myTable").tablesorter()
```

## CSS（オプション）

CSSを何も設定しなくてもソートは既に実装されていますが、お好みで見た目を変更したい場合はCSSを操作します。
僕の場合は、下記の通りになりました。ヘッダーをクリックするとソートの状態を示すCSSクラスが自動的に追加されます。この振る舞いを利用して、ソートの状態に応じて見た目を変更します。

```css
/* ヘッダーをクリックすると勝手にハイライトされるので、それを除去する。 */

th:focus { outline: 0 none; }

/* 三角印アイコンをヘッダーに追加する */

th.tablesorter-headerUnSorted span.arrow,
th.tablesorter-headerAsc span.arrow,
th.tablesorter-headerDesc span.arrow {
  position: relative;
}

th.tablesorter-headerUnSorted span.arrow:before {
  content: "\f0dc";
  font-family: FontAwesome;
  font-style: normal;
  font-weight: normal;
  text-decoration: inherit;
  color: #ABC;
}

th.tablesorter-headerAsc span.arrow:before {
  content: "\f0de";
  font-family: FontAwesome;
  font-style: normal;
  font-weight: normal;
  text-decoration: inherit;
}

th.tablesorter-headerDesc span.arrow:before {
  content: "\f0dd";
  font-family: FontAwesome;
  font-style: normal;
  font-weight: normal;
  text-decoration: inherit;
}
```

# 参考文献
- http://tablesorter.com/docs/
- http://astronautweb.co/snippet/font-awesome/
簡単！Swiftでファイル操作・データの永続化

Swiftでファイル操作をするには`NSFileManager`を利用するのが一般的です。iOSでデータを永続化する方法は、`NSUserDefaults`やCoreDataがありますが、一時的に/tmpや/Library/Cachesに保存する場合、アプリ内領域に保存するためにはNSFileManagerを使います。

## NSFileManagerによるデータの永続化
[iOS Storage Guidline](https://developer.apple.com/icloud/documentation/data-storage/index.html)によると、
>Only documents and other data that is user-generated, or that cannot otherwise be recreated by your application, should be stored in the <Application_Home>/Documents directory and will be automatically backed up by iCloud.
>Data that can be downloaded again or regenerated should be stored in the <Application_Home>/Library/Caches directory. Examples of files you should put in the Caches directory include database cache files and downloadable content, such as that used by magazine, newspaper, and map applications.
Data that is used only temporarily should be stored in the <Application_Home>/tmp directory. Although these files are not backed up to iCloud, remember to delete those files when you are done with them so that they do not continue to consume space on the user’s device.

と書いてあります。つまり、
- ユーザが生成したデータで、ダウンロードなどで再取得できないものはDocumentsディレクトリに保存する。そうすれば自動でiCloudにもバックアップされる。
- 再取得可能なもの（例：マガジン、ダウンロード可能なコンテンツ、マップなど）は、/Library/Cachesに、一時的なものは/tmpに保存する。

といったところでしょうか。

## ファイル操作

### 移動
```swift
let manager = NSFileManager()
manager.moveItemAtPath(filePath, toPath: toPath, error: nil)
```

### コピー
```swift
let manager = NSFileManager()
let manager.copyItemAtPath(srcPath, toPath: toPath, error: nil)
```

### 削除
```swift
let manager = NSFileManager()
manager.removeItemAtPath(filePath, error: nil)
```

### ファイルの存在
```swift
let manager = NSFileManager()
manager.fileExistsAtPath(path)
```

ファイルへの書き込みや読み込みを考えると少しめんどくさいので、ディレクトリ・ファイルIOを含めて簡単に操作できるライブラリをつくりました。
[Filer](https://github.com/yoavlt/Filer)
Filerを利用すると、プログラマがよく知っている`ls`、`rm`、`mv`、`cp`、`test`、`cat`などのAPIでファイル操作をすることができます。
Photoshop CC 2015のJPEG画像は書き出し方によってファイルサイズが全然違う

Photoshop CC 2015のJPEG画像は、書き出し方によってファイルサイズが大きく違ってきます。

以下の記事で詳しく検証していますが、品質と効率の面から見て従来の「Web用に保存」はもう使うべきではないでしょう。

参考記事「[Web用保存は古い!? JPEG画質が改善したPhotoshop CC 2015の新方式の画像保存機能まとめ - ICS MEDIA](https://ics.media/entry/7689)」
HTTPS 時の証明書関連エラーを防ぐための .wgetrc 設定

## 導入
wget を実行するときに下記のような証明書関連のエラーによく出くわします。

```shell-session
$ wget -O - https://www.ana.co.jp/
--2015-07-21 21:27:18--  https://www.ana.co.jp/
www.ana.co.jp (www.ana.co.jp) をDNSに問いあわせています... 23.34.96.213
www.ana.co.jp (www.ana.co.jp)|23.34.96.213|:443 に接続しています... 接続しました。
エラー: www.ana.co.jp の証明書(発行者: `/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 EV SSL CA - G2')の検証に失敗しました:
  発行者の権限を検証できませんでした。
www.ana.co.jp に安全の確認をしないで接続するには、`--no-check-certificate' を使ってください。
```

（ロケールが英語の場合）

```shell-session
$ LANG=C wget -O - https://www.ana.co.jp/
--2015-07-21 21:30:03--  https://www.ana.co.jp/
Resolving www.ana.co.jp (www.ana.co.jp)... 23.34.96.213
Connecting to www.ana.co.jp (www.ana.co.jp)|23.34.96.213|:443... connected.
ERROR: cannot verify www.ana.co.jp's certificate, issued by '/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 EV SSL CA - G2':
  Unable to locally verify the issuer's authority.
To connect to www.ana.co.jp insecurely, use `--no-check-certificate'.
```

ここで

```shell-session
$ wget -O - https://www.ana.co.jp/ --no-check-certificate
```

とするのは、ダサいです。
HTTPS なんだから、ちゃんと発行者を検証したいですよね。

そもそも一度怒られてからなんとかするのは、二度手間です。イライラします。

## 対応方法

下記の手順で対応しました。
実行した環境は CentOS7 前提ですが、ほかの環境でも似たような手順で解決できると思います。
それっぽい CA 情報をごった煮させた上で、 wget のデフォルト設定に加えるというアプローチです。もっといい方法があればだれか教えてください。

### Curl の CA 情報を取得
```shell-session
$ wget -q -O $HOME/.cacert.pem http://curl.haxx.se/ca/cacert.pem 
```

### Firefox の CA 情報を追加

Curl の CA 情報は Firefox の情報を元に変換しているので、おそらく内容重複している？？？
この手順は不要？？？

```shell-session
$  rpm -ql ca-certificates | fgrep .pem | xargs cat >> $HOME/.cacert.pem 
```

### Rubygems の CA 情報を追加

```shell-session
$ rpm -ql rubygems | fgrep .pem | xargs cat >> $HOME/.cacert.pem 
```

### 手元のローカルの Firefox の DB を抽出
さらにダメ元で、ローカルの Firefox の証明書情報を抽出。
一部の HTTPS サイトはこの手順を経ないとダメだった。

```shell-session
$  for db in ~/.mozilla/firefox/*.default*/; do
     certutil -L -h "Buildin Object Token" -d $db | \
     awk -F "  " '!/^Certificate Nickname/{print $1}' | \
     xargs -l -inickname certutil -d  $db -L -n nickname -a ;
   done >> $HOME/.cacert.pem
```

### .wgetrc を修正
```shell-session
echo ca-certificate = $HOME/.cacert.pem >> $HOME/.wgetrc
```

### wget を実行
```shell-session
$ wget https://www.ana.co.jp/ ### 証明書のエラーなく正しく実行できる
```
Nodeのインストールされている特定のパッケージを確認する方法

Nodeでインストールされているパッケージを確認するにはどうしたらいいのでしょうか。

```
npm ls -g | grep パッケージ名
```
上記ですか？？

実際に指定するとこんな感じ

```
npm ls -g | grep json2yaml
```
確認できました(☝ ՞ਊ ՞)
unity > stringからbyte[]への変換 > byte[] data = System.Text.Encoding.ASCII.GetBytes(text);


ASCII形式からの変換。

```
byte[] data = System.Text.Encoding.ASCII.GetBytes(text);
```

こちらが参考になった。
http://www.ipentec.com/document/document.aspx?page=csharp-string-to-bytearray
unity > udp > echo server > client.Client.Blocking = false;

UnityでUDPのclientを使った文字列の受信

#code.01 (OnGUIが実行されなくなる)
参考にしたのは
http://forum.unity3d.com/threads/simple-udp-implementation-send-read-via-mono-c.15900/
にて la1nさんの Apr 6, 2008の投稿の UDPReceive.cs

そこから必要最低限のもの以外色々削ぎ落とした。

```csharp:NG.cs
using UnityEngine;
using System.Collections;

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class udpEchoServer : MonoBehaviour {
	Thread rcvThr;
	UdpClient client;
	public int port = 6000;

	public string lastRcvd;
	private bool stopThr = false;

	void Start () {
		init ();
	}

	void OnGUI() {
		Rect rectObj=new Rect(40,10,200,100);
		GUI.Box (rectObj, "rcvd: \n" + lastRcvd);

		if (GUI.Button (new Rect (10, 250, 100, 40), "Quit")) {
			Application.Quit ();
		} 
	}

	void init() {
		rcvThr = new Thread( new ThreadStart(FuncRcvData));
		rcvThr.Start ();
	}

	void OnApplicationQuit() {
		stopThr = true;
		rcvThr.Abort ();
	}

	private void FuncRcvData()
	{
		client = new UdpClient (port);
		client.Client.ReceiveTimeout = 300; // msec
		while (stopThr == false) {
			try {
				IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
				byte[] data = client.Receive(ref anyIP);
				string text = Encoding.ASCII.GetString(data);
				lastRcvd = text;

				client.Send(data, data.Length, anyIP); // echo
			}
			catch (Exception err)
			{
//				print(err.ToString());
			}
		}
	}
}
```
受信した文字列をそのまま返信している。

問題としては、受信したあとの文字の表示更新はOnGUIで行っているが、これがマウスクリックしないと実行されないこと。

OnGUIあたりの動作はこれから勉強しないといけない。

<hr>

UDP clientについては、こちらも参考になりそう。
http://dobon.net/vb/dotnet/internet/udpclient.html

<hr>
#code.02 (OnGUI()の実行は正常)

code.01でOnGUI()が実行されなくなるのを修正したバージョン。
違いは`client.Client.Blocking = false;`を入れたこと。

```csharp:OK.cs
using UnityEngine;
using System.Collections;

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class udpEchoServer : MonoBehaviour {
	Thread rcvThr;
	UdpClient client;
	public int port = 6000;
	
	public string lastRcvd;
	private bool stopThr = false;
	
	void Start () {
		init ();
	}
	
	void OnGUI() {
		Rect rectObj=new Rect(40,10,200,100);
		GUI.Box (rectObj, "rcvd: \n" + lastRcvd);
		
		if (GUI.Button (new Rect (10, 250, 100, 40), "Quit")) {
			Application.Quit ();
		} 
	}
	
	void init() {
		Debug.Log ("init");
		rcvThr = new Thread( new ThreadStart(FuncRcvData));
		rcvThr.Start ();
	}
	
	void OnApplicationQuit() {
		stopThr = true;
		rcvThr.Abort ();
	}
	
	private void FuncRcvData()
	{
		client = new UdpClient (port);
		client.Client.ReceiveTimeout = 300; // msec
		client.Client.Blocking = false; //<---------------------------------
		while (stopThr == false) {
			try {
				IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
				byte[] data = client.Receive(ref anyIP);
				string text = Encoding.ASCII.GetString(data);
				lastRcvd = text;

				if (lastRcvd.Length > 0) {
					client.Send(data, data.Length, anyIP); // echo
				}
			}
			catch (Exception err)
			{
				//              print(err.ToString());
			}
		}
	}
}
```

<hr>
(追記 2015/09/03)

上記をもとにuGUIを使ったecho serverにしたものは[github](https://github.com/yasokada/unity-150829-udpEcho)にあります。
技術英語 > My conjecture is that ...

マクロや関数の呼び出し「invoke」関連で調べていて

http://english.stackexchange.com/questions/37706/invoke-and-invocation

> My conjecture is that "invoce" was deemed easily confused in pronunciation (Invose?) as it is followed by an "e", and so, to reaffirm its "k" sound, they wrote it as "invoke" instead of "invoce". 

「私の推測としては」invoceはInvoseと発音上間違いやすい（なぜならeが続くから）。そのため、"k"の音を明らかにするため、invoceでなくinvokeと書くようになったのだろう。

<hr>
conjectureで思い出したのは Poincare conjecture（ポアンカレ予想）. 「100年の難問は何故解けたのか」というドキュメンタリーが実に面白かった。

<hr>
railsのマイグレーションステータス'NO FILE'を削除する

# 状況
マイグレーションステータスにNO FILEが存在しているので、消したい。

```
$ bundle exec rake db:migrate:status

database: ***/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20150708134153  ********** NO FILE **********
  down    20150722185435  Devise create users
  down    20150722190233  Add columns to users
```

[railsのrakeのmigrationファイルを削除しNO FILEとstatusに出た時の対処](http://joppot.info/2014/10/16/2104)を参考に対応する。

# マイグレーションファイルを復活させる
上記のstatusコマンドで確認したIDを元に、以下のファイルを作成する。

```
$ vim db/migrate/(migration_file_id)_tmp.rb
class Tmp < ActiveRecord::Migration
  def change
  end
end
```

statusコマンドを再確認し、NO FILEが消えていることを確認する。

```
$ bundle exec rake db:migrate:status

database: ***/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20150708134153  Tmp
  down    20150722185435  Devise create users
  down    20150722190233  Add columns to users
```

# マイグレーションファイルをdown statusに変更する

downに変更

```
$ bundle exec rake db:migrate:down VERSION=(migration_file_id)
```

ステータスがdownになっていることを確認する

```
$ bundle exec rake db:migrate:status

database: ***/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
  down    20150708134153  Tmp
  down    20150722185435  Devise create users
  down    20150722190233  Add columns to users
```

# マイグレーションファイルを削除する
削除

```
$ rm -rf db/migrate/20150708134153_tmp.rb 
```

ステータスを確認

```
$ bundle exec rake db:migrate:status

database: ***/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
  down    20150722185435  Devise create users
  down    20150722190233  Add columns to users
```
履歴が消えた！
富豪実装なJavaScriptジオコーダーを作ってみた


住所から緯度経度を割り出すことを「ジオコーディング」って言うんですね、という程度の地図系初心者ですが、表題のものを思いつきで作ってみました。名前は「[tokoro](https://github.com/cognitom/tokoro)」としました。適当ですみません。フロントエンドとNode/io.js上のどちらでも動くライブラリです。

![tokoro.png](https://qiita-image-store.s3.amazonaws.com/0/1858/a159aec7-af41-9407-3121-e050d5673cec.png)

## 使い方

まずは、[tokoro](https://github.com/cognitom/tokoro)をインストール。

```bash
$ npm install --save tokoro
```

※ npmを使わず、[スクリプト](http://cognitom.github.io/tokoro/dist/tokoro.min.js)と[データ](http://cognitom.github.io/tokoro/dist/data.zip)を直接ダウンロードすることもできます。

Nodeでの利用は、こんな感じ。OSCでよくお世話になる、明星大学のキャンパスの緯度経度を出してみます。

```javascript
var tokoro = require('tokoro')

tokoro('東京都日野市程久保2-1-1', function(code) {
  if (code) {
    console.log('緯度', code[0]) // 35.64564
    console.log('経度', code[1]) // 139.40688
  } else {
    console.log('見つからないよ!')
  }
})
```

同じように、フロントエンドのJavaScriptからも使えます。Nodeの場合と違い、データの格納場所を変更できます。デフォルトは `node_modules/tokoro/data`ですが、任意の場所に置いて構いません。なお、`tokoro()`にオブジェクトを渡すとオプション設定になります。

```html
<script src="dist/tokoro.js"></script>
<script>
  tokoro({ data: 'data' }) // データの格納ディリクトリを指定
  tokoro('東京都日野市程久保2-1-1', function(code) {
    if (code) {
      console.log('緯度', code[0]) // 35.64564
      console.log('経度', code[1]) // 139.40688
    } else {
      console.log('見つからないよ!')
    }
  })
</script>
```

そのほか、使い方については[README](https://github.com/cognitom/tokoro)にも書いてあるのでそちらをどうぞ。

## 何が嬉しいの?

「Google MapsのAPIでいいじゃん?」と言われそうですが、クエリー数のリミットがあったり、非公開のサービスで使うには、有償版の必要があったりと、気軽に使えるシーンは案外限られてきます。(業務系だと特に)

一方で、OpenStreetMapも徐々に充実してきて、いろいろな場面で使えそうです。国土交通省が公開している[街区レベル位置参照データ](http://nlftp.mlit.go.jp/isj/)もあるので、これをデーベースに突っ込めば良さそうですね。

...なんですが、全国のデータをダウンロードすると1.4GB近くあり、ちょっと「気軽」じゃない感じになってきます。データベース必須だと、フロントエンドのプロジェクトだと一気にハードルが上がるし、`npm install`だけで使えないなんてめんどくさ過ぎます。

というわけで、郵便検索ライブラリくらいの気軽さで導入できるようにしたのが「tokoro」です。

## ハッシュハッシュハッシュ

元データが1.4GBあるんですが、ここから不要なデータを除いて、ハッシュにしたりで、最終的には200MBを切るところまで小さくしました。まあ、このくらいならギリギリ許容できる...はず。

クライアントサイドからも使えると書きましたが、200MBを利用者にダウンロードさせるわけにはいかないので、2000ファイルに分割しています。

```
東京都日野市程久保二丁目1 35.64564 139.40688
```

みたいなデータが約1千万件あるのですが、このままだとかなり重たいです。住所部分を数値ハッシュ化してしまいましょう。

```
2843349453 35.64564 139.40688
```

さらにASCII文字をフルで使って94進数で置き換えます。

```
EH>MJ %<Gu 1jd3
```

だいぶ短くなりました。これなら5000件でもだいたい100KBに収まります。cf. [処理の詳細はこちら](https://github.com/cognitom/tokoro/blob/master/task/geocode.coffee)

> 追記・v0.2.0からは、32ビット整数としてバイナリ保存する形式に変更しました。結果、全体で200MB→137MBにダイエット成功。

## 住所ってめんどくさい...

元々のデータは、都道府県、市区町村で分かれていますが、地域によって名前付けルールはまちまちです。本来であれば、同一地域ごとにデータをまとめてキャッシュ性能を上げたいところですが、そのためには住所データベースを別途持つ必要が出てきそうです。しかし、それでは容量が1GBくらい必要になってしまいます...

そこで、単純に数値ハッシュの下3桁(正確には3.2桁)を使って、ファイルを分割する方法をとりました。実際、90KB〜104KBと、比較的分布も均等です。そのためハッシュの衝突も最小限に抑えられています。(現在のところまだ完璧ではないですが...)

> 追記・v0.2.0では、各ファイル63〜74KB程度に改善しています。

## 1検索ごとに、100KBダウンロード..?

この100KBのファイルをどうするかというと、

- フロントエンドからダウンロードして
- JavaScriptで検索

します。もう富豪プログラミングです。動的なサーバを用意するより、この方がコストが安いんだからいいんです。(開き直り)

10年前なら本気で悲鳴が聞こえそうですが、2015年の今ならありなんじゃないかな...と。実際やってみたら、かなり速いです。ダウンロード + フロントエンドでの検索でも「ほぼ一瞬」です。


## まとめ

業務システムほか、地図がちょっと使いたいシーンで、ライセンス料が見合わず諦めていたケースは多いと思います。tokoroとOpenStreetMapを組み合わせると、コストかけずに実現できることが結構ありそう。いろいろ遊んでみてください。

表記揺れ、正規化、ハッシュ関数など、改善の余地ありなので、ツッコミ歓迎です。気軽にIssueやPRを上げてもらえたら嬉しいです。扱うデータが国内限定なので、日本語でどぞ。
サイコロ

Twitter で見かけた以下の投稿を関数ぽく書きなおしてみました。

.bat（バッチファイル）でダイスを振るだけ
http://qiita.com/sawa_tsuka/items/5787d969aed9e3440289

```bat:dice.bat
@echo off

set SELF=%~n0
set TEST=0

setlocal enabledelayedexpansion
  if %TEST% equ 1 (
    :BOL-#0
      call :dice "%~1" e || exit /b -1
      echo.
      echo 合計は !e! です。
      call :Q "継続しますか？ (Y/N) " || exit /b !e!
    goto BOL-#0
  ) else (
    call :dice "%~1" e || exit /b -1
    echo.
    echo 合計は !e! です。
    exit /b !e!
  )
endlocal
goto :EOF

:usage
setlocal
  >&2 echo Usage: %SELF% [#_OF_DICE]
endlocal
goto :EOF

:error
setlocal
  set s=%~1
  if "%s%" == "" set s=one or more error^(s^) has been occurred
  >&2 echo %SELF%: %s%
endlocal
goto :EOF

:isnumeric
setlocal
  (echo %~1) | findstr /r "[0-9]" > NUL
endlocal
goto :EOF

:Q
setlocal
  :BOL-#1
    echo.
    set /p A=%~1
    if /i "%A%" == "Y" exit /b 0
    if /i "%A%" == "N" exit /b 1
  goto BOL-#1
endlocal
goto :EOF

:randomize
setlocal
  set /a r=%RANDOM%%%6+1
endlocal & set %~1=%r%
goto :EOF

:dice
setlocal enabledelayedexpansion
  :: argument #1
  if "%~1" == "" (set n=2) else (set n=%~1)
  call :isnumeric "%n%" || (call :usage & exit /b -1)
  if %n% lss 1 (call :error "illegal value: use 1-" & exit /b -1)
  :: argument #2
  if "%~2" == "" (call :error "insufficient arguments: #2" & exit /b -1)
  
  set /a i=1,s=0
  :BOL-#2
    call :randomize r
    call :dice-#%r% %i% || exit /b -1
    set /a s+=r,i+=1
  if %i% leq %n% goto BOL-#2
  
  if %TEST% equ 1 cls
  for /l %%i in (0,1,4) do (
    for /l %%j in (1,1,%n%) do (
      < NUL set /p t=!d[%%j][%%i]!
    )
    echo.
  )
endlocal & (set %~2=%s%) & exit /b 0
goto :EOF

:dice-#1
  call :isnumeric "%~1" || exit /b 1
  set d[%~1][0]=┌―――┐
  set d[%~1][1]=｜　　　｜
  set d[%~1][2]=｜　●　｜
  set d[%~1][3]=｜　　　｜
  set d[%~1][4]=└―――┘
  exit /b 0
goto :EOF

:dice-#2
  call :isnumeric "%~1" || exit /b 1
  set d[%~1][0]=┌―――┐
  set d[%~1][1]=｜●　　｜
  set d[%~1][2]=｜　　　｜
  set d[%~1][3]=｜　　●｜
  set d[%~1][4]=└―――┘
  exit /b 0
goto :EOF

:dice-#3
  call :isnumeric "%~1" || exit /b 1
  set d[%~1][0]=┌―――┐
  set d[%~1][1]=｜●　　｜
  set d[%~1][2]=｜　●　｜
  set d[%~1][3]=｜　　●｜
  set d[%~1][4]=└―――┘
  exit /b 0
goto :EOF

:dice-#4
  call :isnumeric "%~1" || exit /b 1
  set d[%~1][0]=┌―――┐
  set d[%~1][1]=｜●　●｜
  set d[%~1][2]=｜　　　｜
  set d[%~1][3]=｜●　●｜
  set d[%~1][4]=└―――┘
  exit /b 0
goto :EOF

:dice-#5
  call :isnumeric "%~1" || exit /b 1
  set d[%~1][0]=┌―――┐
  set d[%~1][1]=｜●　●｜
  set d[%~1][2]=｜　●　｜
  set d[%~1][3]=｜●　●｜
  set d[%~1][4]=└―――┘
  exit /b 0
goto :EOF

:dice-#6
  call :isnumeric "%~1" || exit /b 1
  set d[%~1][0]=┌―――┐
  set d[%~1][1]=｜●　●｜
  set d[%~1][2]=｜●　●｜
  set d[%~1][3]=｜●　●｜
  set d[%~1][4]=└―――┘
  exit /b 0
goto :EOF
```

位置パラメーターの指定や実行結果は以下をご覧ください。

![dice.png](https://qiita-image-store.s3.amazonaws.com/0/29814/e34aacdc-5bcf-9be8-13be-bd3722dd04eb.png)

おもな変更点は以下のとおりです。

* ラベル，setlocal ... endlocal，goto :EOF などを利用して関数的な表現に変更
* 位置パラメーターを指定することでサイコロの数を変更可能
* 終了ステータス（環境変数 ERRORLEVEL の値）からも合計値を参照可能
* 擬似乱数の取得方法を変更（変更前と後とで精度に変化なし）
* エラー処理を追加
* 対話モードを実装（バッチ変数 TEST の値を 1 に変更して実行）
sinatraをcentosコンテナで - その1


空っぽのcentosコンテナにsinatraを入れるまで。

## まとめ


```bash:rancher-os上でcentosをとりあえず動かす
docker run -i -t -d --name=sinatra-dev -p 8888:8888 centos
docker attach sinatra-dev
```

CentOS Linux release 7.1.1503 (Core)


```bash:上から順番に
# パッケージ類
yum install -y net-tools vim ruby ruby-devel
# グローバルにいれちゃうgem
gem install pry bundle # --no-ri --no-rdoc

# 操作用ユーザー作成
useradd rubyman
su rubyman
cd

# ディレクトリ作成
mkdir myapp
cd myapp
bundle init

# sinatraを使います
echo -e "\ngem \"sinatra\"" >> Gemfile

# sinatraをインストール
bundle install

# 動作確認なのでクラシックスタイルでいいです
echo -e "# encoding: utf-8\nrequire 'sinatra'\nget '/' do\n  \"Hello Sinatra :D\\\n\"\nend" > myapp.rb

# とにかく起動
ruby myapp.rb -p 8888 > myapp.log 2>&1 &

# ちょっとまってから確認
sleep 3s
curl http://localhost:8888

# 終了
kill %1


```

こうでれば成功

```
Hello Sinatra :D
```

## 次は

- webrickで動いてるので別のものにしたい。
- 書いたものはgithubへ

## 過程メモ

何も考えずcentosをrun

```bash:初心者のdockerコマンド
docker run -i -t -d centos
```

まずは端末へ

```bash:コンテナへ接続
docker ps # idを確認
docker attach d2f6ef3dd7d9 # idでコンテナを指定
```

yum で ruby、ruby-devel、vim、net-tools
gem で pry、bundleをインストール...


開発用のユーザーを作成、
プロジェクト用ディレクトリを作成、

```bash:
bundle init
```

Gemfileは以下のとおり

```Gemfile:
source "https://rubygems.org"

gem "sinatra"
```

インストール

```
bundle install
```

起動してアクセスできました。
[C++]static const

```cpp:header
class MyClass{
public:
    static const int x;
    static const int y;
}
```
```cpp:cpp
#include "header"
const int MyClass::x = 10;
const int MyClass::y = Func();
```

MyClassを無名名前空間にブチ込むと未解決だって言われちまうんだ
***
※ Visual Studio 2013
macにemacs24.5をinlineパッチ付けてインストール


取りあえず、成功したので、メモ。

```zsh
% EMACS_VER=24.5
% curl -O http://ftp.gnu.org/pub/gnu/emacs/emacs-${EMACS_VER}.tar.gz
% git clone git@gist.github.com:1d91107b311b63b57529.git
% mv 1d91107b311b63b57529 inline
% tar xvfz emacs-${EMACS_VER}.tar.gz
% cd emacs-${EMACS_VER}
% patch -p1 < ../inline/emacs-24.5-inline.patch
% ./configure --with-ns --without-x
% make bootstrap
% make install
% open nextstep/
```

Emacs.appを/Applicationに移した方が色々楽。

上記のついでに、CaskからEl-getに乗換中・・・
ブラウザで歩数計【Javascript】

ブラウザの機能で歩数計を作ってみました。

- 加速度センサーの値だけで歩数を計測
- 重力加速度ベクトルの大きさの変動を使用

```js
// 重力加速度のしきい値
var GRAVITY_MIN = 9.8;
var GRAVITY_MAX = 12.00;
// 歩数
var _step = 0;
// 現在歩いているかどうか
var _isStep = false;

function initialize() {
	// デバイスの加速度センサーの情報を取得します
	window.addEventListener('devicemotion', onDeviceMotion);
}

function onDeviceMotion(e) {
	e.preventDefault();
	// 重力加速度を取得
	var ag = e.accelerationIncludingGravity;
	// 重力加速度ベクトルの大きさを取得
	var acc = Math.sqrt(ag.x*ag.x + ag.y*ag.y + ag.z*ag.z);
	// 
	if (_isStep) {
		// 歩行中にしきい値よりも低ければ一歩とみなす
		if (acc < GRAVITY_MIN) {
			_step++;
			_isStep = false;
		}
	} else {
		// しきい値よりも大きければ歩いているとみなす
		if (acc > GRAVITY_MAX) {
			_isStep = true;
		}
	}
	console.log(_step + "歩");
}
```
Toolchains on Visual Studio 2015


## Languages
- C/C++ (cl)
  - C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
  - (Host) x86/amd64 (Target) x86/amd64/arm
  - arm is used for Windows Phone?
- C#(csc)/VB.Net(vbc) (Roslyn)
  - C:\Program Files (x86)\MSBuild\14.0\Bin
- JScript(jsc)
  - (Use one in C:\Windows\Microsoft.Net)
- F# (fsc/fsi)
  - C:\Program Files (x86)\Microsoft SDKs\F#\4.0\Framework\4.0
- TypeScript (tsc)
  - C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.5
- Java (Java7 Update55)
  - C:\Program Files (x86)\Java\jdk1.7.0_55
- JavaScript (Node.js 0.12.2)
  - C:\Program Files (x86)\nodejs
- Python
  - **not bundled**

## Platforms
- Linux
  - .NET Core must be used. C/C++ are not supported.
- Android
  - SDK C:\Program Files (x86)\Android\android-sdk
  - NDK R10e C:\ProgramData\Microsoft\AndroidNDK\android-ndk-r10e
- iOS
  - **requires remote OSX machine**
IISのFTPサーバで中間証明書を渡す

はまったのでメモ。

Windowsサーバの「ローカルコンピュータ」アカウントの証明書ストアに中間証明書を入れた**あと**に、IISにサーバ証明書をインポートすることで、FTP over SSLがサーバ証明書と一緒に中間証明書を渡してくれるようになる。
順序が逆だとサーバ証明書しか渡してくれないので、各クライアントが中間証明書を別のところから調達しないといけない。


とはいえ……。　Windowsクライアントの証明書ストア「信頼されたルート証明機関」を使った証明書の検証をやってくれるFTPクライアントのいいのが見つからない。 WinSCP、FileZilla, FFFTP を試したのだけれど。

そこで。
```
openssl s_client -showcerts -starttls ftp -connect ftpserver:21 -CAfile root.cer
```
と接続してみて、 サーバ証明書-中間証明書-ルート証明書 がつながれば OK ってでてくるので、これで確認できるかな。

Internet Explorer はサーバ証明書に記載された中間証明書URLに接続して持ってくるとか、
WindowsOSはWindowsUpdateにあるルート証明書は、削除しても必要に応じて補っちゃうなど、
動作確認はいろいろ暗黙の仕様があって面倒でした。
Windows環境でMySQL

## サーバー側
### インストール
MySQL Community Server 5.6 をインストールする。

1. http://dev.mysql.com/downloads/mysql/ から「Windows (x86, 32-bit), MSI Installer」をダウンロード (64bitも含まれる)
1. mysql-installer-community-5.6.*.msi を実行
1. Choosing a Setup Type
  - Custom を選択
1. Select Products and Features
  - 左から右の「Product/Features To Be Installed」へ「MySQL Server 5.6.* - X64」を移動
  - 右に移った「MySQL Server 5.6.* - X64」を選択すると、右下に「Advanced Option」が現れるのでクリックしてPathを設定
    - Install Directory: `D:\MySQL\MySQL Server 5.6`
    - Data Directory: `D:\MySQL\MySQL Server 5.6`
1. Installation
  - Execute
1. Type and Networking
  - Config Type: 今回は「Development Machine」を選択
1. Account and Roles
  - パスワードを設定
1. Windows Service
  - 「Configure MySQL Server as a Windows Service」にチェックを入れたまま
  - 「Standard System Account」を選択したまま
1. Apply Server Configuration
  - Execute
  - Finish

### 権限追加
外部からデータベース「test」にユーザー「user1」で接続できるようにする

1. 「MySQL 5.6 Command Line Client」を起動
1. インストール時に設定したパスワードを入力
1. 下記通り権限設定

```
mysql> grant select,insert,update,delete on test.* to user1@"%" identified by '<パスワード>';
```

### 権限削除

```
mysql> delete from mysql.user where user = 'user1';
```

### 設定の確認

```
mysql> select Host, User from mysql.user;
```

### アンインストール

1. コントロールパネルから、 管理ツール > サービス > MySQL56 を停止
1. コマンドプロンプトを管理者権限で起動
1. `cd /d "D:\MySQL\MySQL Server 5.6\bin"`
1. `mysqld -remove MySQL56`
  - Service successfully removed. と表示される
1. コントロールパネルのプログラムと機能から
  - MySQL Server 5.6 をアンインストール
  - MySQL Installer - Community をアンインストール
1. 必要に応じて `D:\MySQL\MySQL Server 5.6` を削除

## クライアント側

1. Visual Studio でプロジェクトを作成
  - テンプレート: C#/Windowsフォームアプリケーション
  - プロジェクト名: MySQLTest
- パッケージマネージャコンソールで以下を実行
  - `Install-Package MySql.Data`
  - `Install-Package Dapper`
- Form1 にボタンを追加して、クリックするとサーバ側の現在時を取得するようにする

```csharp
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using Dapper;

namespace MySQLTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DateTime resultDate;
            using (var conn = new MySqlConnection("Server=<サーバー名>;Database=test;Uid=test1;Pwd=<パスワード>"))
            {
                conn.Open();
                resultDate = conn.Query<DateTime>("SELECT NOW();").Single();
            }

            MessageBox.Show(resultDate.ToString());
        }
    }
}
```
VisualSutdio2015でWebアプリケーションプロジェクトが読み込めない

~~プロジェクトのプロパティ
**すべてのユーザーにサーバー設定を適用(プロジェクトファイルに格納)**
を有効にしてあるWebアプリケーションプロジェクトをVisualStudio2015で開こうとすると~~    [^*]

> エラー Web サイト 'http://example.com/' を作成できません。サーバー名に "localhost" を指定する必要があります。

と表示されてプロジェクトが読み込まれない。

***
**ソリューションルート/.vs/config/applicationhost.config**
にアプリケーションの設定が必要。

プロジェクトを読み込むときに.vsフォルダのapplicathionHost.configにアプリケーションの設定がVisualStudioによって追加される。**プロジェクトのURL**が"localhost"でない場合には、追加できなくてエラーになるようだ。

プロジェクト読み込み時点でapplicationHost.configに設定があれば"localhost"以外でもエラーにはならない。

***
VisualStudio2015によって.vsフォルダへapplicationhost.configが作られている。~~**すべてのユーザーに...**の設定が有効の場合は~~[^*]VisualStudioからIISExpressを起動するときに使用される。

プロジェクトファイルに
`<UseGlobalApplicationHostFile />`
が追加されるが、効果は不明。
<UseGlobalApplicationHostFile />の有無に関わらず.vs/config/applicathionHost.config
を使用するようだ。
`<UseGlobalApplicationHostFile>true</UseGlobalApplicationHostFile>`
としても.vsフォルダのapplicationHost.configが使用された。

[^*]: エラーとすべてのユーザーにサーバー設定を適用(プロジェクトファイルに格納)は関係なかった。
UIImageのシルエット化

なにげによく使うのに、使おうとすると思い出せないのでメモ



```objc
UIImage *displayImage = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
```

これで、displayImageをシルエット化可能。


tintColor をいじることで塗りつぶす色の選択も可能。


-----------------

例


元画像
![test.png](https://qiita-image-store.s3.amazonaws.com/0/37053/38130e15-bb06-4c93-c7f7-dcebdc86c9b5.png)

シルエット化
![スクリーンショット 2015-07-22 20.59.22.png](https://qiita-image-store.s3.amazonaws.com/0/37053/94ce2f22-9bde-f1d4-fc22-6037013b85a0.png)
うるう年判定をビット演算で行う

うるう年判定は、4の倍数を判定するのでビット演算が使えますね。

```java
(year & 3) == 0 && year % 100 != 0 || year % 400 == 0
```
`(year & 3) == 0`の部分がビット演算での4の倍数判定です。
javaのGregorianCalendarの中の人も使ってます。

で、なんとなく調べてみたら

```java
(year & 3) == 0 && ((year % 25) != 0 || (year & 15) == 0)
```

ってのが出てきて、意味わからんΣ(ﾟдﾟ;)ってなったので調べてみようと思いました。
（タグはjavaにしてますけどC系でも一緒だと思います）
参考：
http://stackoverflow.com/questions/1021324/java-code-for-calculating-leap-year
http://stackoverflow.com/questions/3220163/how-to-find-leap-year-programatically-in-c/11595914#11595914
（2個目の参考ページにも説明がある雰囲気ですが、英語なのも相まって僕には理解不能でした。）

#各判定要素の意味
それぞれ判定要素の意味は下記です。

|判定要素|意味|補足|
|:--|:--|:--|
|(year & 3) == 0|4の倍数|ビットで下2桁が0の場合は4の倍数|
|(year % 25) != 0|25の倍数以外|*|
|(year & 15) == 0|16の倍数|ビットで下4桁が0の場合は16の倍数|

#4と25の最小公倍数が100
次に始めの判定式のorがわかりづらいので分配法則で書き換えます。

```java
((year & 3) == 0 && (year % 25) != 0) || ((year & 3) == 0 && (year & 15) == 0)
```

つまり

```java
((year & 3) == 0 && (year % 25) != 0) || (year & 15) == 0
```

になるので、まとめると下記のようになります。

|判定|意味|言い換え|補足|
|:--|:--|:--|:--|
|(year & 3) == 0 && (year % 25) != 0|4の倍数で25の倍数でない|4の倍数で100の倍数でない|4と25の最小公倍数が100みたいです|
|(year & 15) == 0|16の倍数|*|*|

#25と16の最小公倍数が400
あとは16の倍数がわかりづらいですが、これは書き換え前の元の状態で考えた方がわかりやすかったです。
`((year % 25) != 0 || (year & 15) == 0)`
の部分です。

これは、
1つ目の条件でほとんどの25の倍数がfalseになります。
2つ目の条件は16の倍数でtrueなるので、
合わせると25と16の最小公倍数が400のため
25の倍数の中でtrueになるのは400の倍数の時だけになります。

#まとめ
簡単にまとめると
4と25の最小公倍数が100で
25と16の最小公倍数が400なので
うまくいくということでしょうか（？）

最小公倍数は下記で調べました。
http://www.calc-site.com/divisors/lcm_two

---
結果わかったような余計わからなくなったような。
世の中には効率的な演算をこだわって考える人がいるんだなって思いました。
Electronでファイルのドラッグ＆ドロップを実装する

# Electronでファイルのドラッグ＆ドロップを実装する
デスクトップアプリでファイルを扱うときは、たいていの場合にドラッグ＆ドロップでファイルを指定できるUIがあります。

Electronアプリに対して、[クイックスタート](https://github.com/atom/electron/blob/master/docs/tutorial/quick-start-jp.md)の素のアプリの状態で、ファイルをドラッグ＆ドロップすると、アプリのHTML部分が通常のブラウザと同様にただのファイルビューワーとしての表示に変わってしまいます。

Electronの動作を知らないひとが使ったときに戸惑いのもとになりますので、ドラッグ&ドロップでファイルが差し替わらないようにすると良いでしょう。

## ドラッグ&ドロップの動作を阻止する

+ index.html ( もしくは外部jsでも可 ) 

``` 
  <script>
    /** documentにドラッグされた場合 / ドロップされた場合 */
    document.ondragover = document.ondrop = function(e) {
      e.preventDefault(); // イベントの伝搬を止めて、アプリケーションのHTMLとファイルが差し替わらないようにする
      return false;
    };
  </script>
```
documentに対してのドラッグとドロップ処理がキャンセルされました。

## ファイルをドラッグ&ドロップしたときに認識する

+ index.html

```
  <div id="holder">
    ここにドラッグ&ドロップできる
  </div>

  <script>
    var holder = document.getElementById('holder');
    /** hoverエリアにドラッグされた場合 */
    holder.ondragover = function () {
      return false;
    };
    /** hoverエリアから外れた or ドラッグが終了した */
    holder.ondragleave = holder.ondragend = function () {
      return false;
    };
    /** hoverエリアにドロップされた */
    holder.ondrop = function (e) {
      e.preventDefault(); // イベントの伝搬を止めて、アプリケーションのHTMLとファイルが差し替わらないようにする

      var file = e.dataTransfer.files[0];
      holder.innerText = file.name;
      console.log(file.path);

      return false;
    };
  </script>
```
# まとめ
HTML5でファイルのドラッグ&ドロップUIを実装するときと同じコードで行けました。簡単でしたね。

## 参考
Electron本体 ( electronコマンドに引数を渡さずに叩いた時に出るUI ) のメニューから[View]⇢[Toggle Developer Tools]で出てくるソースコード

※こんなところにいい参考アプリがあると気が付かず「HTML5 ドラッグ ドロップ ファイル」でググり、electronコマンドで実行しようとしたところで気が付きました。本家のやり方を参考にするのが一番ですね。
Servlet3.0から@WebServlet(urlPatterns={"hoge"})を使えばweb.xmlにURLマッピング定義が要らない

今更感あるのですが、さっき知ってこれは便利だと思ったのでメモを残しておきます。

Servlet3.0からweb.xmlに記載しなくても `@WebServlet(urlPatterns={"hoge"})` でURLマッピングができるようになったそうです。

今までのやり方だと、

```xml:web.xml
<web-app>
    <servlet>
        <servlet-name>LoginForm</servlet-name>
        <servlet-class>com.github.nikuyoshi.form.LoginForm</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginForm</servlet-name>
        <url-pattern>/LoginForm</url-pattern>
    </servlet-mapping>
</web-app>
```

でしたが、今後は、

```java:LoginForm.java
@WebServlet(urlPatterns={"/LoginForm"})
public class LoginForm extends HttpServlet{ 
  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response){
  }
}
```

のように簡単に記述できます。 WAFを使用していればこんなことしなくても済みますが、サーブレット単体でURLマッピングをしていた方には朗報だと思います。
SwiftでQiitaのAPIを使う


Swiftの勉強にQiitaAPIのSwiftインターフェースを作ってみました

## [QiitaKit](https://github.com/sora0077/QiitaKit)

+ 通信には [Alamofire](https://github.com/Alamofire/Alamofire) を利用
+ Generics を用いて各リクエストレスポンスは対応したエンティティにマッピング
+ リクエストは [Future](https://github.com/Thomvis/BrightFutures) でラップされたエンティティを返す
	+ 例）`GetItem` -> `Future<Item>`

# 使い方

```swift
import QiitaKit

let Qiita = QiitaSession(
    baseURL: "https://qiita.com",
    clientId: "*****",
    clientSecret: "*****"
)

// アクセストークンの取得
Qiita.oauthAuthorize([.ReadQiita, .WriteQiita], scheme: "callback url scheme")
	.onSuccess { accessToken in
		println(accessToken)
	}


//条件にマッチする投稿リストの取得
let listItems = ListItems(page: "1", per_page: "20", query: "qiita user:yaotti")
Qiita.request(listItems)
	.onSuccess { items, meta in
		println(items)
	}
	.onFailure {
		println($0)
	}

//flatMapを使った例
Qiita.request(listItems)
	.flatMap {
		Qiita.request(GetItem(item_id:$0[0].id))
	}
	.flatMap {
	    ...
	}

```

## API定義の例

```swift:Endpoint/Item/ListItems.swift
import Foundation
import APIKit

/**
*  投稿の一覧を作成日時の降順で返します。
*/
public struct ListItems {
    /// ページ番号 (1から100まで)
    /// example: 1
    /// ^[0-9]+$
    public let page: String

    /// 1ページあたりに含まれる要素数 (1から100まで)
    /// example: 20
    /// ^[0-9]+$
    public let per_page: String

    /// 検索クエリ
    /// example: qiita user:yaotti
    /// 
    public let query: String

    public init(page: String, per_page: String, query: String) {
        self.page = page
        self.per_page = per_page
        self.query = query
    }
}

extension ListItems: RequestToken {
    
    public typealias Response = ([Item], LinkMeta<ListItems>)
    public typealias SerializedType = [[String: AnyObject]]

    public var method: HTTPMethod {
        return .GET
    }

    public var URL: String {
        return "/api/v2/items"
    }

    public var headers: [String: AnyObject]? {
        return nil
    }

    public var parameters: [String: AnyObject]? {
        return [
            "page": page,
            "per_page": per_page,
            "query": query,
        ]
    }

    public var encoding: RequestEncoding {
        return .URL
    }

    public var resonseEncoding: ResponseEncoding {
        return .JSON(.AllowFragments)
    }
}

extension ListItems {
    
    public static func transform(request: NSURLRequest, response: NSHTTPURLResponse?, object: SerializedType) -> Result<Response> {
        
        return Result(_Items(object), LinkMeta<ListItems>(dict: response!.allHeaderFields))
    }
}
```

# インストール

## Carthage

**非推奨**

Cartfile に以下を追加し生成される Framework をプロジェクトに追加

```
github "sora0077/QiitaKit"
```

## CocoaPods

Podfile に以下を追加し `pod install` を実行する


```
source 'https://github.com/sora0077/PodSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'

pod 'QiitaKit', :git => 'https://github.com/sora0077/QiitaKit.git', :tag => "swift-2.0"
```
メモ　Rails Tutorial 3rd - 12.2.1 Sample following data

あんまり意味ないかも｡

#Listing 12.14: Adding following/follower relationships to the sample data.

```rb:db/seeds.rb

# Following relationships
users = User.all
user  = users.first
following = users[2..50]
followers = users[3..40]
following.each { |followed| user.follow(followed) }
followers.each { |follower| follower.follow(user) }
```
*一番初めのユーザーが全部をフォロー
*他のユーザー全部が一番初めをフォロー

というSeed｡

#つまんないので全部が全部をフォローする｡というのを作ってみた｡
こんな余計なことやってるからいつまでたっても終わらねーんだよ｡と自分に突っ込みつつキーを叩く

```
@user_all = User.all

@user_all.each_with_index do |each_user, ind|
  user_index_arr = (0..51).to_a
  user_index_arr.delete_at(ind)
  user_index_arr.each do |elm|
    each_user.follow(@user_all[elm])
  end
end
```

多分これでいいと思うが････?

#反省

1. 実行にやたらと時間がかかる  
当然といえば当然ですが｡  
migrationやり直し→Seedしなおし　が結構時間がかかる｡
とりあえず適当にやってあとでPryで直せばいいやー､は通用しない｡  
rails console のsandbox使って､コンソール上から色々やってみればいいんですね｡

2. Arrayなのかそうじゃないのか問題  

```
@user_all = User.all  
```

とやるとCollection Proxy(だっけ?)がオブジェクトを返してくる  

```
@user_all[0] => 帰ってくる  
@user_all.delete_at(0)　=>　エラー  
```

ArrayっぽいけどArrayじゃないというのを忘れてた｡
アップデートされたChromeのアバターメニューを消す（Mac版）


# Google Chromeのアバターメニューとは？
Google Chrome 44.0.2403.89 (64bit)から、アバターメニューが復活しました。以前はアドレスバーで `chrome://flags#enable-new-avatar-menu` に設定項目があり、これを無効化することでアバターメニューを削除することができましたが、今回のアップデートで設定項目が抹殺されてしまいました。

![Screen Shot 2015-07-22 at 22.01.02.png](https://qiita-image-store.s3.amazonaws.com/0/58698/9c74890e-1463-8873-9990-e855fcf863a8.png "Screen Shot 2015-07-22 at 22.01.02.png")

複数のアカウントを運用している人にとっては便利ですが、アカウントを１つしか持っていない人にとっては、まったくもって不必要な機能です。

# アバターメニューを削除するには？
`--disable-new-avatar-menu` オプションを付加して起動すれば良いです。Windows版 Google Chrome を使用している人は、Google Chrome のショートカットアイコンを右クリックしてプロパティから設定することができますが、Macにはそのような設定はありません。

# Macでもアバターメニューを削除したい！！

```zsh:ターミナル
open -a Google\ Chrome --args --disable-new-avatar-menu
```

ターミナルコマンドで上のように叩けばアバターを削除することができます。

**しかし！！** 
いちいち、ターミナルでコマンドを打つのはめんどくさいですよね。

Automatorを使う方法があります。

## １．Automatorの起動
まずは、Automatorを起動してください。spotlight や alfred で検索すると速いでしょう。

## ２．Application（アプリケーション）をクリック！
![Screen Shot 2015-07-22 at 22.15.41.png](https://qiita-image-store.s3.amazonaws.com/0/58698/b84e9296-28da-6ca6-7a22-22143d0ca8b8.png "Screen Shot 2015-07-22 at 22.15.41.png")

## ３．Run Shell Script（シェルスクリプトを実行）をドラッグアンドドロップ！
![Screen Shot 2015-07-22 at 22.16.02.png](https://qiita-image-store.s3.amazonaws.com/0/58698/7ffdd99d-dfa8-e659-0e87-2f9a64b25e96.png "Screen Shot 2015-07-22 at 22.16.02.png")

## ４．先ほどの Google Chrome 起動コマンドを入力
![Screen Shot 2015-07-22 at 22.25.21.png](https://qiita-image-store.s3.amazonaws.com/0/58698/d5ba95fd-a7ad-ed22-cfde-3ac67e386d4f.png "Screen Shot 2015-07-22 at 22.25.21.png")

```zsh:起動コマンド
open -a Google\ Chrome --args --disable-new-avatar-menu
```

## ５．Ctrl + S で保存！
![Screen Shot 2015-07-22 at 22.30.55.png](https://qiita-image-store.s3.amazonaws.com/0/58698/49e19a2b-270d-da5a-700e-fd9ca9c1e5fd.png "Screen Shot 2015-07-22 at 22.30.55.png")
> 注意
「Google Chrome.app」以外の名前にしましょう。この名前をつけると、本物と見分けがつかなくなり open コマンドはどちらを起動すればいいのか分からなくなります。

# アイコンがださいのでChromeアイコンにしよう
本物の Google ChromeとAutomatorで作成したアプリを右クリックして Get Info（情報を見る）をクリックします。

次に以下のように順番に作業
![Screen Shot 2015-07-22 at 22.19.41.png](https://qiita-image-store.s3.amazonaws.com/0/58698/72a4e3a7-8468-f5bf-4e5e-edf48090b37c.png "Screen Shot 2015-07-22 at 22.19.41.png")
アイコンが、Google Chrome用になります。

>注意
名前がおなじになってますが、起動しないというのを経験済みです。もしも同じ名前ならば、違う名前に変えましょう

# 起動
![Screen Shot 2015-07-22 at 22.54.05.png](https://qiita-image-store.s3.amazonaws.com/0/58698/643b6b62-ae6e-46fb-5698-07ce0e52a987.png "Screen Shot 2015-07-22 at 22.54.05.png")
あとはいつもどおり、alfred 等で起動してやれば
**アバターメニューを消した Google Chrome が起動！**

私はDropBox上に置きました。こうすることで、使用している全てのMac上で同じことができるね (*´ｪ｀*)ﾎﾟｯ
ただ、アイコンは、環境が異なればOSごとに初期化されるので、別途指定が必要です。

#追記：alfred 有料版をお使いの方は automator を使わなくても実現できてしまいます。
![Screen Shot 2015-07-24 at 13.20.41.png](https://qiita-image-store.s3.amazonaws.com/0/58698/406ff02d-fba9-cb6a-85fb-41037a50f0cf.png)
このようにつないでやればOKかと！
Could not build module 'FBSDKCoreKit'と言われる解決方法

XcodeでiOSアプリをビルドしようとしたところ失敗しました。

# ビルドが失敗
ビルドしようとしたところ赤くエラーがでてしまいました。

```
Could not build module 'FBSDKCoreKit'
```
FBSDKCoreKitが無いみたいです。

# Facebook SDK for iOSをインストールする
以下のページからSDKをダウンロードしてインストールします。
https://developers.facebook.com/docs/ios

## Facebook SDK のインストールパス
MacでのデフォルトのインストールPathは以下になるようです。

```
/Users/ユーザ名/Documents/FacebookSDK
```

このPathをXcodeのBild Settingsから`Framework Search Paths`に指定してください。

# 再度ビルド
エラーがでなくなりました。

# 参考
http://stackoverflow.com/questions/29466683/could-not-build-module-fbsdkcorekit-for-facebooksdk-4