OmniAICreator/Qiita-1.07M huggingface dataset:
Swiftでローカルスコープ

これが正解！

```swift
do {
  // スコープ
}
```
---
以下間違い

~~これでとりあえず出来る。~~

```swift
if true {
  // スコープ
}
```

~~こういうのの方がカッコいいけど、~~

```swift
func locally(work: () -> ()) {
    work()
}

locally {
    let g = 42
    println(g)
}
```

~~C++で言う、~~

```cpp
bool hoge() {
  {
    return true
  }
  {
    return false
  }
}
```

~~みたいなのが出来ないのが辛い。~~
~~オプショナルとジェネリックとかで上手いこと出来そうな気もする。~~
VagrantでCentOSにhttpdとphp入れてホストOSからアクセス

備忘録

- 適当にvagrant boxを探す
- `$ vagrant box add "boxname" "URL"`
- `$ vagrant init "boxname"`
- Vagrantfileを編集してポートフォワーディングと共有フォルダの設定

```
config.vm.network "forwarded_port", guest: 80, host: 8080
# config.vm.network "private_network", ip: "192.168.33.10"
# ip の設定でもいける
config.vm.synced_folder "./docroot", "/var/www/html"
```

- `$ vagrant up`
- `$ sudo yum install httpd`
- `$ sudo yum install php`
- `$ sudo service httpd start`
- `$ sudo chkconfig httpd on` マシン起動時にhttpd起動
- `http://localhost:8080/`

---

- php動作テスト
- `<?php phpinfo();`
API GatewayのHTTP ProxyでTestでのみエラーが発生する

# はじめに

前回、[API GatewayからS3のオブジェクトを返す](http://qiita.com/yoshidasts/items/0837abbcc49e7f3f915f) ことをやってみました。
そこで、次はAPI Gatewayから返すS3オブジェクトをメディアコンテンツにして
キャッシュの速度を測定してみようと思ったのですが、
あれこれいじっているうちに、なぜかTestではエラーとなるようになってしまいました。
Deployしてからブラウザで見ると正しく動作しています。

# Testエラーの確認

まず、API GatewayのTestボタンをクリックすると以下のようなエラーログが出ます。

```
                    Execution log for request test-request
Wed Feb 10 07:54:23 UTC 2016 : Starting execution for request: test-invoke-request
Wed Feb 10 07:54:23 UTC 2016 : API Key: test-invoke-api-key
Wed Feb 10 07:54:23 UTC 2016 : Method request path: {}
Wed Feb 10 07:54:23 UTC 2016 : Method request query string: {}
Wed Feb 10 07:54:23 UTC 2016 : Method request headers: {}
Wed Feb 10 07:54:23 UTC 2016 : Method request body before transformations: null
Wed Feb 10 07:54:23 UTC 2016 : Execution failed due to configuration error: Invalid endpoint address
Wed Feb 10 07:54:23 UTC 2016 : Method completed with status: 500
```

しかし、ブラウザから見るとちゃんとS3のオブジェクトが表示されています。

![2016-02-09 (9).png](https://qiita-image-store.s3.amazonaws.com/0/112407/320de914-ff49-dd28-e221-5344c7d2a6f7.png)

# 意外な結論

このままでは正常なテストができません。
何かしらの環境設定が悪いのかとアレコレ設定をいじって見ましたが一向に解決しません。

あれやこれやとネットで調べたら驚きの結末がありました。

http://stackoverflow.com/questions/33954150/aws-api-gateway-method-to-serve-static-content-from-s3-bucket

なんと、API Gatewayと同一のリージョンからS3を呼び出すには制限があるそうです。
ですので、テストで正しく動作させるにはS3を別リージョンに配置する必要があります。

そして、その原因はAWSのバグのようです。早い解決が望まれますね。
しかし新しいサービスにはこういった不具合がつき物ですが、
それを「まだまだの技術」と見るか、「いまの技術」と見るかは価値観が分かれそうですね。
JSP 暗黙オブジェクト

スクリプトレットorスクリプト式の中には
**暗黙オブジェクト**という
宣言せずに利用できる特別なオブジェクトがある
![スクリーンショット 2016-02-10 21.08.05.png](https://qiita-image-store.s3.amazonaws.com/0/95187/7f4b539d-637d-d2dc-94b1-8507c7654635.png)
![スクリーンショット 2016-02-10 21.19.03.png](https://qiita-image-store.s3.amazonaws.com/0/95187/3f04756a-5479-58f6-8599-7019888e739a.png)

##javax.servlet.jsp.JspWriter
オブジェクトの名前:   out

```jsp
	<% String s2 = "Java"; %>
	<% out.print(s2); %>
```

▪️Test06Jsp.jsp

```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8">
<title>JSPでHTMLを出力</title>
</head>
<body>
	<h1>JSPでHTMLを出力</h1>
	JSPでHTMLを出力テスト
	<br> Servletクラスより楽にHTMLを出力する
	<br> HTMLの中にJavaのコードを埋め込む
	<br>
	<font color="#f4a460">HTMLの中にJavaのコードを埋め込む</font>
	<br>
	<%!String s = "Hello";%>
	<%="スクリプト式を使うと"%>
	<br>
	<%="変数やメソッドの戻り値などを出力することが出来る→" + s%>
	<%--コメント--%>
	<!-- コメント -->
	<%
		String s2 = "Java";
	%>
	<%
		out.print(s2);
	%>
</body>
</html>
```

[抜粋ページ](http://wrs.search.yahoo.co.jp/FOR=_RHEBYVV3ijjik6YNj5wGd_vnD43Gz0F7oHkCvEjaRx5FHyqYeLGAsS7WPlGUgRRsQ9W8E2DtY5BituMhZ6s2_TuR0XhDTHjUvmT6UT4AhJF.I2d5pBstPT6GIGkQ9MVlUTnwGX0DGNTy96fkgDgc61jV870Hwa4V3y1aUrHq9LFKW7Yq7z5vmRD.zNSFLxT6JAamgUCYYvOjHds9xR8dNpm4RWK2cLl_h08aeOa7Q3B/_ylt=A7dPKSQhKrtWZS0AmsWDTwx.;_ylu=X3oDMTEydHBjdDBvBHBvcwM1BHNlYwNzcgRzbGsDdGl0bGUEdnRpZANqcDAwMjg-/SIG=124sb5ll7/EXP=1455207393/**http%3A//www.techscore.com/tech/Java/JavaEE/JSP/2/)
[抜粋ページ](http://www.javadrive.jp/servlet/jsp_object/index1.html)
Today's polymer element [paper-button]


第2回目は **paper-button** です。

## What is paper-button

paper-buttonとはマテリアルデザインを取り入れたボタンです。
そのまま使うとflatボタンとして使うことができ、propertyを設定することでraisedボタンとしても使うこともできます。
押下した箇所を起点に波紋(ripple effect)が広がるので押した感があってともいいです。

## Example

### サンプルコード
```html:index.html
<!DOCTYPE html>
<html>
<head>
    <title>paper-button Sample</title>
    <script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
    <link rel="import" href="bower_components/paper-button/paper-button.html">
    <link rel="import" href="bower_components/iron-icons/iron-icons.html">
    <style>
       paper-button.fancy {
           background: green;
           color: yellow;
       }
       paper-button.fancy:hover {
           background: lime;
       }
       paper-button[toggles][active] {
           background: red;
       }
    </style>
</head>

<body>
<div class="contents">
    <paper-button>FLAT</paper-button>
    <paper-button class="fancy">COLOR</paper-button>
    <paper-button raised>RAISED</paper-button>
    <paper-button toggles raised>TOGGLES RAISED</paper-button>
    <paper-button disabled>DISABLED</paper-button>
    <paper-button raised>
        <iron-icon icon="favorite"></iron-icon>
        CUSTOM
    </paper-button>
</div>
</body>
</html>

```

### サンプル結果
![sample.png](https://qiita-image-store.s3.amazonaws.com/0/112299/3eb01b6b-faae-340b-755e-2d659486d90d.png "sample.png")

自分でエフェクトを書かなくていいのでかなり楽できますね。
propertyで細かく設定できますし、toggleなんかも選べて便利です。
propertyの詳細は[API Reference](https://elements.polymer-project.org/elements/paper-button#properties)を見てみてください。

以上です。
次回はpaper-cardを紹介しようと思います。
そして毎日と言いつつ毎営業日です（汗）
基礎MySQL  ~その１~ インストール

# MySQLインストール
CentOS6にRPMでMySQL Community Editionをインストールする方法です。
## リポジトリの登録
下記からリポジトリ登録用RPMを取得
http://dev.mysql.com/downloads/repo/yum/
リポジトリを登録する

```bash
rpm -ivh mysql57-community-release-el6-7.noarch.rpm
```
インストール対象リポジトリをenableにする。
不要なリポジトリはdisableにする。
今回はMySQL5.6のリポジトリを有効化します。

```text:/etc/yum.repos.d/mysql-community.repo
# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
enabled=1 <-ここ
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
```
とりあえずyum cleanしておく

```bash
yum clean all
```

## MySQLインストール
 * バージョン指定しない場合(指定リポジトリの最新版がインストールされる)

  ```bash
  yum install mysql-community-server
  ```
* バージョン指定したい場合  
  依存関係で怒られるため、以下をまとめてインストール。

```bash
yum install \
mysql-community-client-[version] \
mysql-community-devel-[version] \
mysql-community-libs-[version] \
mysql-community-libs-compat-[version] \
mysql-community-server-[version] \
mysql-community-common-[version]
```

## MySQL起動
キドウ

```bash
service mysqld start
```
初回はmysql db, innodb関連ファイルを作成し、起動する。

```
MySQL データベースを初期化中:  
・
・
・
mysqld を起動中:                                           [  OK  ]
```
作成されるファイルはデフォルトで以下に配置される。
※インストール時に配置される/etc/my.cnf内に指定がある。

```bash
ls -l /var/lib/mysql
```
## rootユーザーのパスワード設定
下記コマンド実行後、指示に従い
rootのパスワード設定、不要ユーザー、DB削除を行う

```bash
mysql_secure_installation
```
## MySQLに接続する
rootパスワードを指定して接続

```bash
mysql -uroot -p

Enter password:
```
ここからクエリ実行していきます。

```mysql
mysql> 
```
接続を解除したい場合はexit

```mysql
mysql> exit
```

# どこに何がインストールされたかの確認
```
rpm -ql mysql-community-server
rpm -ql mysql-community-client
```

## 押さえておきたいインストール先

 * mysql-community-server

    ```
    /etc/my.cnf                設定ファイル
    /etc/init.d/mysqld         mysqld起動ファイル
    /user/bin/mysqld_safe      mysqld起動ファイル※/etc/init.d/mysqldから呼ばれる
    /usr/sbin/mysqld           mysqldサーバーのバイナリ実行ファイル
    ```
    [my.cnf オプションファイルの使用](http://dev.mysql.com/doc/refman/5.6/ja/option-files.html)
    [mysql.server — MySQL サーバー起動スクリプト](https://dev.mysql.com/doc/refman/5.6/ja/mysql-server.html)
    [mysqld_safe — MySQL サーバー起動スクリプト](https://dev.mysql.com/doc/refman/5.6/ja/mysqld-safe.html)
    [mysqld — MySQL サーバー](https://dev.mysql.com/doc/refman/5.6/ja/mysqld.html)


 * mysql-community-client

    ```
    /usr/bin/mysql             mysqlクライアント
    /usr/bin/mysqladmin        mysql管理用クライアント
    /usr/bin/mysqldump         mysqlバックアップコマンド
    /usr/bin/mysqlbinlog       mysqlバイナリログユーティリティコマンド
    ```
    [mysql — MySQL コマンド行ツール](https://dev.mysql.com/doc/refman/5.6/ja/mysql.html)
    [mysqladmin — MySQL サーバーの管理を行うクライアント] (https://dev.mysql.com/doc/refman/5.6/ja/mysqladmin.html)
    [mysqldump — データベースバックアッププログラム](https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html)
    [mysqlbinlog — バイナリログファイルを処理するためのユーティリティー](https://dev.mysql.com/doc/refman/5.6/ja/mysqlbinlog.html)
Emscriptenのインストール雑記


環境はMac OS 10.11.3.
http://kripken.github.io/emscripten-site/docs/building_from_source/building_emscripten_from_source_using_the_sdk.html#building-emscripten-from-source-using-the-sdk
に英語で書いてあるがメモ程度に


まずは
http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html#sdk-download-and-install
へ向かい、Mac OS X用である
"Portable Emscripten SDK for Linux and OS X"
をダウンロードして解凍, その後その解凍ディレクトリにて,

```Shell
$ ./emsdk install latest
$ ./emsdk activate latest
```

以上. emsdk_portable/emscripten 以下に実行可能コマンド群が用意されるのであとは煮るなり焼くなりしてどうぞ.


Node.jsを入れていないならば

```Shell
$ brew install node
```

して入れておくこと.
テスト的に書いてみたけれど、kobitoがやたらと固まるのはなぜだろうか.
ネストが深い joins の表記

```rb
class User < ActiveRecord::Base
  has_many :assignments
  has_many :projects, through: :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :user
  belongs_to :project
end

class Project < ActiveRecord::Base
  has_many :assignments
  has_many :users, through: :assignments
  has_many :tasks
end

class Task < ActiveRecord::Base
  belongs_to :project
end
```

![captured.png](https://qiita-image-store.s3.amazonaws.com/0/102400/af63b8e9-5486-d08d-3cdc-b9102653df09.png)

というモデルがある。

ここで、user 指定（id = 1）で task を取り出すには、以下のようになるのだけど、

```rb
Task.joins(project: {assignments: :user}).where(users: {id: 1})
```

「joins の中って、単数？複数？どっち？」みたいなことで悩んでしまった。

もちろん、

```
tasks（多）- project（1）- assignments（多）- user（1） 
```

ということ。

where については、テーブル名指定なので users。
AnimationClipのlegacyオプションの不思議な挙動

AnimationClipをAnimatorControllerの作成なしに3Dモデルに適用して再生したいという要件を満たすために実装してたときの話。

以下のような感じでAnimationClipのデータをインスタンス化して、Animation（旧アニメーションシステム）で動かすのでlegacyオプションをtrueにした上で、GameObjectにアタッチしたAnimationに対して追加、再生を実行すると、Editor上では問題なく再生されました。

```lang:csharp
var clip = Instantiate<AnimationClip>(Resources.Load<AnimationClip>(clipPath));
clip.legacy = true;
clip.wrapMode = WrapMode.Loop;
var animation = go.AddComponent<Animation>();
animation.AddClip(clip, "hoge");
animation.Play("hoge");
```

しかし、**Android実機やエミュレータで確認してみると、アニメーションが再生されません。**
試行錯誤の末、試しに**AnimationClipのデータ自体のlegacyオプションをtrueにすると、同環境でも再生されました。**
どういうことなの…。

となるとインスタンス化したAnimationClipの各種プロパティをScript上から変更しても反映されないってことかな？と思いましたが、上のコードで指定している**WrapModeの変更は反映される**という謎の状況。バグなのか何か間違っているのか。

もろもろの都合上、オリジナルのデータはいじりたくなかったので、諦めてAnimatorControllerをScriptで生成し、これを利用するつくるに変更しました。かなしみ。
PHP5.6でSMTPのhostがsslの場合に注意！

# PHP5.6でSMTPのhostがsslの場合に注意！

## 問題

CakePHP2でシステムを普通に構築して、普通にSMTPでメール送信機能を実装して、リリースしたらメールが飛ばない！と連絡が。。。

ログを見ると

```
Error: [SocketException] stream_socket_client(): SSL operati
on failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify faile
d
stream_socket_client(): Failed to enable crypto
stream_socket_client(): unable to connect to ssl://○○.jp:465 (Unknown error)

```

なんかSSL周りのエラーが・・・。

実は、その直前に同一サーバに乗っている別案件で同じことが起きてて、その案件ではPHPMailerを使用していたので下記記事で対応してました。

http://stackoverflow.com/questions/26827192/phpmailer-ssl3-get-server-certificatecertificate-verify-failed

今回はCakeEmailだったんですが、CakeEmailでは情報があまりなかったので、色々掘り返したところ。。。

## 原因

http://php.net/manual/ja/context.ssl.php

PHP5.6からSSL コンテキストオプションのverify_peerのデフォルト値がtrueになっています。。。

~~開発環境も5.6に合わせていると思ってたら5.5だったよママン・・・~~

このオプション、証明書の認証を必須とするオプションなんですが、ローカルに証明書を持っていないといけないっぽい。。。

SMTP情報を貰う際に証明書とか貰わないよ・・・。

## CakeEmailの場合の対応策

```php

public $smtp = array(
	'transport' => 'Smtp',
	'from' => array('site@○○.jp' => 'My Site'),
	'host' => 'ssl://○○.jp',
	'port' => 465,
	'timeout' => 30,
	'username' => 'user',
	'password' => 'secret',
	'client' => null,
	'log' => false,
	//'charset' => 'utf-8',
	//'headerCharset' => 'utf-8',
	//ここから
	'context' => array(
		'ssl' => array(
			'verify_peer' => false,
			'verify_peer_name' => false,
			'allow_self_signed' => true
		)
    )
	//ここまで
);

```
Cookbookにも情報が見当たらなくて結局ソースから書き方を発掘しました・・・。
Rxで再代入を無くそうとアレコレする

#前置き
再代入は怖いです。
<S>タイトルに入れただけでマサカリ飛んできそうな気がします。</S>

```
int x = 0;
x = 1; // さっき0だって言ったじゃん！ウソつき！
```
単なる変数ならまだいいですが、ユーザー入力とか絡むと最悪です。

そんな(時間)変化とかいうわけわからん物を包むためにRxなるものが現れました。素敵ですね。
カウンタなど入力値から出力値を作るのに副作用があっても、
「`In(t) -> Out(t)`と、
時間の関数を受け取り、時間の関数を返しているのです。ほーら関数的」などと
<S>屁理屈</S> 素晴らしい発送の転換で回避できます。

しかし、私のRx力が足りなくて、せっかくRxを使っているのに再代入を使っちゃってます。
モヤッとします。
`Scan()`でガンガン殺しましょう。
状態変数を宣言せずとも状態を扱ってやりましょう。

なお`Scan()`の内部実装とかは気にしません。いいですね？

#カウンタ

こう書く人はいないと思いますが、
一応基本的なところから。

```csharp
int count = 0; // <- 状態変数(こわい)
var counter = input.Do(x => count += x).Select(_ => count);
```

`Scan()`でこう書けます

```csharp
var counter = input.Scan(0, (a, x) => a + x);
```

状態変数を宣言、再代入せずに、「ひとつ前の状態」を扱うことが出来ます。

#リセット付きカウンタ

学びたての頃はこんな感じで書いちゃってました。

```C#
bool reset; // <- 状態変数(こわい)
var counter = input.Scan((a,x) => reset ? 0 : a + x);
```

リセットしたければ
`reset = true`にして
`input`に値を流して
`reset = false`にします

カッコ悪い。

どうせならリセット入力もストリームとして扱いたいところです。
扱いましょう。
`reset`を特別扱いするからイカンのです。
`input`と`reset`も`Scan()`への入力と考えればいいのです。

```C#
var counter = 
    Observable.Merge(
        input.Select(x => new {Value = x , Reset = false}),
        reset.Select(_ => new {Value = 0 /* <- dummy*/ , Reset = true})
        ).Scan(0, (a, x) => x.Reset ? 0 : a + x.Value);

```
`Either`型みたいなものです。

こんな感じで、`Scan()`の入力と出力の型に複数の情報をもたせると
再代入を使いがちな処理を再代入無しで実装できます。

#SampleLatest的なもの

`source`と`sampler`ストリームがあり、
`sampler`の発行タイミングで、`source`の最終発行値を流してみましょう。

`source.Sample(sampler).CombineLatest(sampler,(x,_)=>x)`
をよく使っていたんですが、なんか動作が怪しいので`Scan()`で作ります。
(これの動作が怪しくないとは言い切れませんが。)

```csharp:sampleLatest

var source = new Subject<int>();
var sampler = new Subject<Unit>();

var sampleLatest
    = Observable.Merge(
        source.Select(x => new { Value = x, Sample = false }),
        sampler.Select(_ => new { Value = 0, Sample = true }))
    .Scan(
        new { Now = 0, Next = 0, Sample = false },
        (a, x) => x.Sample ? new { Now = a.Next, Next = a.Next, Sample = true }
                           : new { Now = a.Now, Next = x.Value, Sample = false })
    .Where(x => x.Sample)
    .Select(x => x.Now);

//てすつ

source.Subscribe(x => Console.WriteLine($"source : {x}"));
sampler.Subscribe(_ => Console.WriteLine("Sample"));
sampleLatest.Subscribe(x => Console.WriteLine($"-- sampled : {x}"));

source.OnNext(1);
source.OnNext(2);
source.OnNext(3);
sampler.OnNext(Unit.Default); // 3
source.OnNext(4);
source.OnNext(5);
sampler.OnNext(Unit.Default); // 5
sampler.OnNext(Unit.Default); // 5
sampler.OnNext(Unit.Default); // 5

```

```:出力
source : 1
source : 2
source : 3
Sample
-- sampled : 3
source : 4
source : 5
Sample
-- sampled : 5
Sample
-- sampled : 5
Sample
-- sampled : 5
```

拡張メソッド化すれば使いまわせてニコニコです。


#まとめ
`Scan()`の入出力に複数の値をもたせたりして、「以前の状態」を上手く扱いましょう。
ただあまりやり過ぎると読みづらくてしょうがないので
関数型言語に持ち込むときやネタとしてどうぞ。
Wayland/Weston on Ubuntu14.04 を動かす

# 初めに

wayland を気軽に動かしてみたかったので、ubuntu 上で動かしてみた。のメモ。

# 環境

Ubuntu 14.04

# 環境構築

https://wayland.freedesktop.org/ubuntu12.04.html
の中をコピって適当なファイル名で shell 化( build.sh 等)。
shell 実行。数十分待つ。

```
$ ./build.sh
```



apt-get で weston をインストール＆実行。


```
$ sudo apt-get install weston
$ weston
```

![Screenshotfrom2016-02-10180717.png](https://qiita-image-store.s3.amazonaws.com/0/35514/2e153d84-2d98-9b7b-8700-f01b41394a2c.png)

上記 Weston Compositor ウインドウが表示される。

# サンプルアプリ

https://hdante.wordpress.com/2014/07/08/the-hello-wayland-tutorial/
このサンプルソースを借用。

https://github.com/hdante/hello_wayland
git clone か zip ダウンロードか、適当にローカルへ。

```
$ cd hello_wayland-master
$ make
$ ./hello_wayland
```

![Screenshotfrom2016-02-10180848.png](https://qiita-image-store.s3.amazonaws.com/0/35514/99f071f9-5b1c-cc97-a6e2-ad0eda3a1d80.png)

サンプルアプリの絵が表示される。


# その他メモ
もしかしたら、 https://wayland.freedesktop.org/ubuntu12.04.html
の作業一式不要かも。
結果作成される weston.ini だけあればよかったかもしれない。

逆に、単に https://wayland.freedesktop.org/ubuntu12.04.html
のコマンドを打たずに、
```
$ sudo apt-get install weston
$ weston
```
するだけでは weston compositor は起動してくれない。
`sudo apt-get install weston` では weston.ini は作られない。


作られる weston.ini はこちら。

```
$ cat ~/.config/weston.ini
[core]
#modules=desktop-shell.so,xwayland.so

[shell]
background-image=/usr/share/backgrounds/gnome/Aqua.jpg
background-color=0xff002244
panel-color=0x90ff0000
locking=true
animation=zoom
#binding-modifier=ctrl
#num-workspaces=6

#lockscreen-icon=/usr/share/icons/gnome/256x256/actions/lock.png
#lockscreen=/usr/share/backgrounds/gnome/Garden.jpg
#homescreen=/usr/share/backgrounds/gnome/Blinds.jpg
#animation=fade

[launcher]
icon=/usr/share/icons/gnome/24x24/apps/utilities-terminal.png
path=/usr/bin/gnome-terminal

[launcher]
icon=/usr/share/icons/gnome/24x24/apps/utilities-terminal.png
path=/usr/bin/weston-terminal

[launcher]
icon=/usr/share/icons/hicolor/24x24/apps/google-chrome.png
path=/usr/bin/google-chrome

[launcher]
icon=/usr/share/icons/gnome/24x24/apps/arts.png
path=./clients/flower

[screensaver]
# Uncomment path to disable screensaver
path=/usr/libexec/weston-screensaver
duration=600

[input-method]
path=/usr/libexec/weston-keyboard

#[output]
#name=LVDS1
#mode=1680x1050
#transform=90

#[output]
#name=VGA1
#modeline=173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
#transform=flipped

#[output]
#name=X1
#mode=1024x768
#transform=flipped-270
```

# 感想
Weston Compositor の左上に chrome アイコンがあるので
クリックして実行してみたが、ホストの ubuntu 側で起動した。
これは chrome は wayland で作られていないためでしょうか。
なぜ chrome をサンプルにしてアイコン載せたんでしょう。。

# その他参考
https://wayland.freedesktop.org/building.html
JSPでHTMLを出力する


▪️Test06Jsp.jsp

```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8">
<title>JSPでHTMLを出力</title>
</head>
<body>
	<h1>JSPでHTMLを出力</h1>
	JSPでHTMLを出力テスト
	<br> Servletクラスより楽にHTMLを出力する
	<br> HTMLの中にJavaのコードを埋め込む
	<br>
	<font color="#f4a460">HTMLの中にJavaのコードを埋め込む</font>
	<br>
	<%
		String s = "Hello";
	%>
	<%="スクリプト式を使うと"%>
	<br>
	<%="変数やメソッドの戻り値などを出力することが出来る→" + s%>
</body>
</html>
```

▪️Test06Jsp.jsp 実行結果
![スクリーンショット 2016-02-10 18.46.10.png](https://qiita-image-store.s3.amazonaws.com/0/95187/d518fa2b-0dba-7daa-66a3-704f1361ce23.png)

##スクリプトレット
JSPファイルにJavaのコードを埋め込むことが出来る
Javaのコードのため、セミコロン(:)を記述する
▪️スクリプトレットの構文

```java
<% Javaのコード; %>
```

##スクリプト式
変数やメソッドの戻り値などを出力することが出来る
スクリプト式ではセミコロン(;)は記述しない
▪️スクリプト式の構文

```java
<%= Javaのコード %>
```

##宣言
宣言では、変数、メソッドを宣言する
宣言、メソッドの宣言の際は必ずセミコロン(;)を記述する
▪️宣言の構文

```java
<%! 宣言文; %>
```

##JSPコメント
▪️JSPコメントの構文

```jsp
<%--コメント--%>
```

##JSPファイルにはHTMLコメントを入れることが出来る
JSPファイルにはHTMLを記述出来るので、HTMLコメントも
入れることが出来る
▪️HTMLコメントの構文

```html
<!--コメント-->
```

<font color="ff0000"><注意></font>
HTMLコメントの場合、ブラウザでソースの表示をすると、
HTMLコメントが見えてしまうので、
<font color="ffa500">重要な内容を書きたい時のコメントは、</font>
なるべくJSPコメントで書くようにしましょう

##pageディレクティブ
pageディレクティブを使うと、JSPファイルに関する
様々な設定をすることが出来る
▪️pageディレクティブの構文

```jsp
<%@ page 属性名="値" %>
```

▪️pageディレクティブ 例

```jsp
<%@ page contentType="text/html; charset=windows-31j" pageEncoding="windows-31j" %>

<%@ page import="java.io.*" %>

<%@ page import="java.util.HashMap" %>
```

▪️Test06Jsp.jsp 例②

```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8">
<title>JSPでHTMLを出力</title>
</head>
<body>
	<h1>JSPでHTMLを出力</h1>
	JSPでHTMLを出力テスト
	<br> Servletクラスより楽にHTMLを出力する
	<br> HTMLの中にJavaのコードを埋め込む
	<br>
	<font color="#f4a460">HTMLの中にJavaのコードを埋め込む</font>
	<br>
	<%!String s = "Hello";%>
	<%="スクリプト式を使うと"%>
	<br>
	<%="変数やメソッドの戻り値などを出力することが出来る→" + s%>
	<%--コメント--%>
	<!-- コメント -->
</body>
</html>
```

▪️Test06Jsp.jsp 例② 実行結果
![スクリーンショット 2016-02-10 20.22.37.png](https://qiita-image-store.s3.amazonaws.com/0/95187/0598ba3a-3909-f494-08b8-4f116d995631.png)



[参考になるページ](http://www.javaroad.jp/servletjsp/sj_jsp3.htm)
サブウィンドウが閉じた時に親ウィンドウでイベントを発火する

# 場面想定
サブウィンドウでは閉じる以外の操作が出来ない（リンク等はない）
イベントは全て親ウィンドウで発火、サブウィンドウからイベントを呼ぶことは出来ない
jQuery使用可能環境

# 処理
```js
$('.link').on('click', function ( e ) {
	e.preventDefault();
	var win = window.open(this.href,'window','width=500,height=500');
	$(win).on('load', function () {
		console.log('開いたよ');
		$(win).on('unload', function () {
			console.log('閉じたよ');
		});
	});
});
```

# 注意点
注意点は```unload```をバインドするタイミングです。
サブウィンドウを開いてすぐにバインドしてしまうと、開いた直後に```unload```が呼ばれてしまいます。
上記対策として```if ( win.closed )```の分岐を入れてみましたが、サブウィンドウを閉じた時の動きが怪しく、うまく動きませんでした。
~~（この原因の調査はしっかりしていません。）~~

なので、サブウィンドウが開いてから```unload```をバインドするようにしています。
これで意図した通りに動きました。

# unloadだけで処理したい場合
```if ( win.closed )```を使用してできました。

```js
$(win).on('unload', function () {
	setTimeout(function () {
		if ( !win.closed ) return;
		console.log('閉じたよ');
	},10);
});
```
サブウィンドウが閉じるまでの時間として、10msの遅延をすれば良さそうです。
遅延が気持ち悪ければ```load```の中で```unload```をバインドすると良いでしょう。
Ghostで画像にclass指定する方法

## はじめに
GhostはMarkdownでブログ記事がかけて非常に楽な反面、スタイル指定が難しいことがあります。
例えばBootstrapを使っているときに、画像に`img-responsive`や`img-fluid`を指定したい場合、うまい設定方法が提供されていないように思われます。

対策として、[stackoverflowの方法](http://stackoverflow.com/a/22683624)をアレンジしてjQueryでclass指定するようにしてみました。

## 仕組み
Ghostで画像を埋め込む際のパラメータとして使えるのはsrc属性ぐらいしかないため、ここにクエリを入れるか、またはフラグメントを入れるぐらいしか方法は無いように思われます。
ここではフラグメントを使うことにします。

Markdown

```
![](src#フラグメント)
```

`#フラグメント`のところに、目的のクラスであるimg-responsiveなどを入れて、jQueryで操作します。

JavaScript（インジェクションか、テーマをいじって入れます）

```
$("[src*='#']").attr("src", function (i, value) {
  var fragment = value.substring(value.indexOf('#')).replace('#', '');
  $(this).addClass(fragment);
});
```

## 出力例
※[Bootstrap v4.0.0-alpha.2](http://v4-alpha.getbootstrap.com/)を使っています。

Markdown

```
<div class="row">
  <div class="col-md-4 m-b-2">
![](https://placekitten.com/400/300?image=1#img-fluid)
  </div>
  <div class="col-md-4 m-b-2">
![](https://placekitten.com/400/300?image=2#img-fluid)
  </div>
  <div class="col-md-4 m-b-2">
![](https://placekitten.com/400/300?image=3#img-fluid)
  </div>
</div>
```

結果
![placekitten.jpg](https://qiita-image-store.s3.amazonaws.com/0/24284/0768aebd-346c-d7af-334a-9645c0b2a25e.jpeg)

## オチ
一旦Markdown記法で画像を入れた後に、ソース上で表示されるパスをコピーして、imgタグに書き換えれば普通にクラス指定ができることに気が付きました。
React.js/redux アプリのステートをローカルストレージとセッションストレージで管理するには

[redux-localstorage v1.0.0-rc4](https://github.com/elgerlambert/redux-localstorage/tree/v0.4.0) と redux-localstorage-filter v0.1.1 で、一部のステートをローカルストレージで管理し、別の一部のステートをセッションストレージで管理するときの設定です。new configureStore() して、Root コンポーネントで store 属性に渡す想定です。mergePersistedState() をどこに書くのかで迷いました。このエントリにとって本質的ではない箇所は、読みやすさを考慮してコメントアウトしてあります。

```.javascript
// import { createStore, applyMiddleware, compose } from 'redux';
// import { reduxReactRouter } from 'redux-router';
// import createHistory from 'history/lib/createBrowserHistory';
// import routes from '../routes';
// import thunk from 'redux-thunk';
// import createLogger from 'redux-logger';
// import rootReducer from '../reducers';

import persistState, { mergePersistedState } from 'redux-localstorage';
import sessionStorageAdapter from 'redux-localstorage/lib/adapters/sessionStorage';
import localStorageAdapter from 'redux-localstorage/lib/adapters/localStorage';
import reduxLocalstorageFilter from 'redux-localstorage-filter';

// const middlewares = [thunk];

const localStorage = compose(
  reduxLocalstorageFilter(['ローカルストレージで保存したい部分ステート名'])
)(localStorageAdapter(window.localStorage));

const sessionStorage = compose(
  reduxLocalstorageFilter(['セッションストレージで保存したい部分ステート名'])
)(sessionStorageAdapter(window.sessionStorage));

const finalCreateStore = compose(
  persistState(localStorage, 'キー名を指定したければそのキー名'),
  persistState(sessionStorage, 'キー名を指定したければそのキー名'),
  // applyMiddleware(...middlewares),
  // reduxReactRouter({ routes, createHistory })
)(createStore);

export default function configureStore(initialState) {
  const reducer = compose(mergePersistedState())(rootReducer);
  return finalCreateStore(reducer, initialState);
}
```
Stretcherで起動時にrandom sleepする

[Stretcher](https://github.com/fujiwara/stretcher) で deploy する対象台数が多い場合、consul event で一斉に起動してしまうと S3 などへのファイル取得もほぼ同時に走るため、負荷により取得失敗の原因になることがありました。

ということで [v0.4.0](https://github.com/fujiwara/stretcher/releases/tag/v0.4.0) で `-random-delay` という起動オプションを追加しました。

```
$ consul watch -type event -name deploy -- stretcher -random-delay 3
```

起動後、manifest取得の前に 0〜指定した秒数だけランダムで sleep するので、適当にタイミングを散らすのに使えるかと思います。

- pre で sleep するコマンドを実行する
  - pre が動作するのは src 取得、展開後なので遅い
- manifestに指定する
  - manifest取得自体は一斉に走ってしまう

という理由でコマンドラインオプションになりました。
google 検索で日付を範囲指定する演算子 daterange:***

---

日付指定検索
---

```
Harry Potter daterange:2004-01-13..2006-01-13
```

これで範囲検索できている。
daterange: がとる型は、上のような ISO8601 形式もしくはユリウス歴である。
人間が日常使用するなら ISO8601 でいいだろう。
たまにロボット検索ですかと聞かれるが仕方ない。

使い方「検索ワード daterange:YYYY-MM-DD..YYYY-MM-DD」


期間の検索に使用できる最も古い日付は 1990 年 1 月 1 日で、最も新しい日付は 2034 年 11 月 9 日です。

（おまけ）日付や数値を含んだワンランク上のメタ検索
---

```
Harry Potter inmeta:modified:2006-01-01..2006-12-31
```

多種多様なメタ検索ができる inmeta 演算子がある。上のようにして検索ページの変更された日時を指定できる。
inmeta の値を modified にし、後ろに ISO8601 値を指定している。

inmeta 検索は上以外に多種多様のメタ属性値を与えることができる。書類に含まれるメタタグの値を指定した検索方法を一例にあげる。

```
Harry Potter inmeta:Enterprise
```

これで、Enterprise 値を持つ検索結果を返す。

```
inmeta:Author~J.K. Rowling
```

これで、Author 値が J.K. Rowling の一部もしくは全部を含む検索結果を返す。

```
inmeta:Author=J.K. Rowling
```

これで、Author 値が J.K. Rowling に一致する検索結果を返す。


こうしたメタタグに用いられる属性値の例として、ワード文章に含まれているものをあげよう。

```
<meta name="Author" content="Polly Hedra"></meta>
<meta name="Keywords" content="Resume"></meta>
<meta name="last saved by" content="Ray Polanco"></meta>
<meta name="revision number" content="1"></meta>
<meta name="last print date" content="5/27/2009 14:03:00"></meta>
<meta name="creation date" content="4/27/2009 13:15:00"></meta>
<meta name="Last Saved Date" content="4/27/2009 13:44:00"></meta>
<meta name="template" content="Taino Parrot Resume Template.dotx"></meta>
<meta name="edit minutes" content="23"></meta>
<meta name="page count" content="3"></meta>
<meta name="word count" content="220"></meta>
<meta name="character count" content="1512"></meta>
<meta name="source" content="Microsoft Office Word"></meta>
<meta name="security" content="0"></meta>
<meta name="Count Lines" content="12"></meta>
<meta name="Count Paragraphs" content="3"></meta>
<meta name="Scale Crop" content="no"></meta>
<meta name="company" content="Coqui Parrot Inc."></meta>
<meta name="links up to date" content="no"></meta>
<meta name="Count Characters with Space" content="1729"></meta>
<meta name="shared doc" content="no"></meta>
<meta name="Links Dirty" content="no"></meta>
<meta name="Application Version" content="12.0000"></meta>
```

属性値だけ抜き出したもの

```
Author
Keywords
last saved by
revision number
last print datemeta>
creation date
Last Saved Datemeta>
templatedotx"></meta>
edit minutes
page count
word count
character count
source
security
Count Lines
Count Paragraphs
Scale Crop
company
links up to date
Count Characters with Space
shared doc
Links Dirty
Application Version
```

下のようにすれば、メタ属性に関して OR 演算子を用いることもできる。

```
apple inmeta:TainoParrot6=244227 OR inmeta:TainoParrot6=244228
```

メタ属性が含まれない場合を考慮するためには、以下のように empty を使う。

```
apple empty OR inmeta:TainoParrot6=244228
```
Spring4でXMLを利用したDIサンプル

# DI方法
SpringでDIするには以下の方法があります。
・「@Autowired」を利用した実装
・「applicationContext.xml」を利用した実装

ここではXMLを利用した実装を紹介します。

### applicationContext.xml
呼び出す側で利用するBeandIdを「b」とします。
メンバー変数の「price」に26000をインジェクションします。

	<?xml version="1.0" encoding="UTF-8"?>
	<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cont	ext="http://www.springframework.org/schema/context"
		xsi:schemaLocation="http://www.springframework.org/schema/beans 	http://www.springframework.org/schema/beans/spring-beans.xsd
			http://www.springframework.org/schema/context http://www	.springframework.org/schema/context/spring-context-4.1.xsd">
		<bean id="b" class="ex.spring.practice.B_ServiceImpl">
			<property name="c">
				<bean class="ex.spring.practice.C_RepositoryImpl	">
					<property name="price" value="26000" />
				</bean>
			</property>
		</bean>
	</beans>

### メインクラス
「b」には「applicationContext.xml」で設定した「B_ServiceImpl」がインジェクションされます。

	public class A_Client {
		public static void main(String[] args) {
	
			// Bean設定ファイルを指定してアプリケーションコンテキス	ト（DIコンテナへの入り口）を得る
			ApplicationContext context = new ClassPathXmlApplication	Context(
					"/META-INF/application-context.xml");
	
			// DIコンテナより"b"という名前のBeanを取得する
			// 実装クラスではなくインタフェースのB_Serviceしか記載は	ない
			B_Service b = (B_Service) context.getBean("b");
	
			// 後は元の処理と同じ
			long total = b.adjustment("PS4", 8);
			System.out.println("合計:￥" + total);
		}
	}

### ビジネスロジック
I/Fクラスは省略します。
「c」には「applicationContext.xml」で設定した「C_RepositoryImpl」がインジェクションされます。

	public class B_ServiceImpl implements B_Service {
	
		// DI対象
		private C_Repository c;
	
		// SpringがIDするのに必要なセッターを作成する
		public void setC(C_Repository c) {
			this.c = c;
		}
	
		@Override
		public long adjustment(String lessonName, int number) {
			System.out.println("PS：" + lessonName + " 台：" +	 number);
			long price = c.checkPrice(lessonName);
			
			return price * number;
		}
	
	}

# リポジトリークラス
I/Fクラスは省略します。
「price」には「applicationContext.xml」で設定した「26000」がインジェクションされます。

	public class C_RepositoryImpl implements C_Repository {
		
		// 単価を表すフィールドを初期値
		private long price;
		
		// price用のセッター（値設定用のメソッド）
		// SpringがDIする際に利用
		public void setPrice(long price) {
			this.price = price;
		}
		
		@Override
		public long checkPrice(String lessonName) {
			return price;
		}
	}
マジかよ、session_start そんな理由でページ遷移でセッションデータ飛ぶんかい(-_-;)

玄人の方から正しい修正が入りましたので**要コメント参照**です
（※ 本人はいたってマジめなシェアのつもりでしたが…）

> #session を使用する中で気をつけるべき点#
> 
> 前述の [stackoverflow](http://stackoverflow.com/questions/17242346/php-session-lost-after-redirect) に書かれていた気をつけるべきポイント（要点）
>  
1. sessin_start() は<?php の直後になくてはならない。空白やタブもあってはならない。
2. header リダイレクト後のスクリプト終了は exit(); で行うべし。session_write_close(); などもあるけど自分は  exit(); で動いている。
3. php.ini の register_globals が off になっていること。phpinfo() を呼んでも設定を確認できる。
4. session を明示的に消したり空白にしていないこと。
5. $_SESSION グローバル変数をどこかで上書きしていないこと
6. リダイレクト先が同じドメインであること。ドメインが異なるとセッションは引き継がれない。aaa.com から aaa.jp へのリダイレクトはセッションが引き継がれない。

引用元：[PHP のセッションが消えちゃう時にチェックすること | 餃子マナー](http://blog.miyadi.net/archives/1585)
vagrantでVCCWを利用する場合のVirtualboxのバージョンの注意

最新の5.0だとエラーが出たので、
下記のバージョンを再インストールで無事起動できた
https://www.virtualbox.org/wiki/Download_Old_Builds_4_3


追記

サーバーをシャットダウンして再起動したらsshを無効にしたらどうなの？
的なエラーが出たので「Vagrantfile」内の記述を
vb.customize ['modifyvm', :id, '--ioapic', 'on']
↓
vb.customize ['modifyvm', :id, '--ioapic', 'off']
にして再起動したらエラーが出ずに起動できた
Github上にある最新のnpm packageをインストールする方法

```
npm install -g deyunanhai/tupai.js#master
```

`#master`のところは任意のブランチ名やタグ名を指定できます。

# グローバルではなくpackage.jsonでローカルにインストールしたい場合

```package.json
{
    "name": "myproject",
    "dependencies": {
        "tupaijs" : "deyunanhai/tupai.js#master"
    }
}
```

see also http://qiita.com/DQNEO/items/28535b17ca263a0d2b71

なお、URLをフルで指定する方法もあります。

`git+https://github.com/deyunanhai/tupai.js#master`
Golangでparserをつくって、SQLを解析してみよう！

Golangで、sqlとか、プログラムとか、DSLのパースってできないのかな、と調べていたら下記を見つけました。

https://blog.gopheracademy.com/advent-2014/parsers-lexers/

2014年時点ですでにできていたんですね。。

上記では、[github.com/benbjohnson/sql-parser](https://github.com/benbjohnson/sql-parser)というリポジトリで説明してくれています。

おおまかな流れは、

1. Token作成
2. Lexer作成
3. Parser作成

といったところです。

で、それらを呼び出す、mainがない。。。ということで、フォークして、`main.go`を実装してみました。

```main.go
package main

import "strings"

func main() {
	query := "select * from my_table"
	println(query)
	r := strings.NewReader(query)

    //parser生成。queryをくわせる。
	parser := NewParser(r)

    //parse実行。SelectStatementのstructが取得できる
	stmt, err := parser.Parse()
	if err != nil {
		println(err.Error())
	}

    //取得結果を標準出力。
	println(stmt.TableName)
	for _, field := range stmt.Fields {
		println(field)
	}
}
```

実行してみると、`parser.go`で定義されたSelectStatementというstcuctが取得し、標準出力してくれます。

ここまでやって、[antlr](http://www.antlr.org/)とかだと、`select_statement`っていったら、grammerファイルに記述されたルールだったような。。となります。

https://github.com/antlr/grammars-v4/blob/master/plsql/plsql.g4#L893:L895

```plsql.g4
select_statement
    : subquery_factoring_clause? subquery (for_update_clause | order_by_clause)*
    ;
```

もやもやっとしたまま記事を進めていくと、なんとinfluxdbの内部でも利用している、とのことでした。

https://github.com/influxdata/influxdb/tree/master/influxql

ここにある、ast.goをみると、にたようなルールが記載されていました。でも長い。。

時間があるときに読み込んでみようと思います。

勉強になりました。
PythonからMeCabを使うときのメモ

PythonからMeCabを使うときの自分用メモ。

```mecab.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import MeCab
m = MeCab.Tagger()

print m.parse("犬も歩けば棒に当たる。")
```

```
$ ./mecab.py
犬	名詞,一般,*,*,*,*,犬,イヌ,イヌ
も	助詞,係助詞,*,*,*,*,も,モ,モ
歩け	動詞,自立,*,*,五段・カ行イ音便,仮定形,歩く,アルケ,アルケ
ば	助詞,接続助詞,*,*,*,*,ば,バ,バ
棒	名詞,一般,*,*,*,*,棒,ボウ,ボー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
当たる	動詞,自立,*,*,五段・ラ行,基本形,当たる,アタル,アタル
。	記号,句点,*,*,*,*,。,。,。
EOS
```

##ファイルから読み込み
```mecab_from_file.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys
param = sys.argv
infile = param[1]

f = open(infile)
line = f.readline() 

import MeCab
m = MeCab.Tagger()

while line:
	res = m.parseToNode(line)

	while res:
		print res.feature
		# 名詞,一般,*,*,*,*,犬,イヌ,イヌ

		res = res.next

	line = f.readline()
```

##ファイルから読み込み品詞頻度をカウント
要素をカウントするときはcollections.defaultdictを使うと楽。

```mecab_class_count.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys
param = sys.argv
infile = param[1]

f = open(infile)
line = f.readline() 

import MeCab
m = MeCab.Tagger()

from collections import defaultdict
frequency = defaultdict(int)

while line:
	res = m.parseToNode(line)

	while res:
		# print res.feature
		# 名詞,一般,*,*,*,*,犬,イヌ,イヌ
		
		arr = res.feature.split(",")
		class_1 = arr[0]
		frequency[class_1] += 1
		
		res = res.next

	line = f.readline()

# print frequency
# defaultdict(<type 'int'>, {'...

for k, v in frequency.iteritems():
    print k, v
```

```
$ ./mecab_morph_count.py input.txt
動詞 4
BOS/EOS 8
名詞 9
助詞 7
助動詞 1
```

##オプション

###辞書を指定

```
# MeCabインスタンス
m = MeCab.Tagger(' -d /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd')
```

###mecabrcを指定

```
m = MeCab.Tagger('-r my_mecabrc')
```
Base64からUIImageを生成する方法

ふと、とある脱獄Tweakを作っている時に独自アイコンをリソースから読み込むのはなんだかなぁーと思っていたところBase64があるじゃないか！と思って調べてみたのでφ(．．)ﾒﾓﾒﾓ

#やり方
ざっとした流れとしては
NSURL→NSData→UIImageという感じです

```objc
NSURL *baseImage = [NSURL URLWithString:@"data:image/png;base64,…"];    
NSData *Imagedata = [NSData dataWithContentsOfURL:baseImage];
UIImage *Image = [UIImage imageWithData:Imagedata];
```
このやり方だと全部のiOSに対応してるはず。
shinyの出力にはoutputのリスト名でidが振られている

タイトルの通りなんですけども、
shinyを使ってレンダリングしているオブジェクトには
どれもidが振られています。
そして、id名はouptut$hogehogeという風に指定した
リストのattribute名がidとして振られます。

試しに、shinyのチュートリアルコードを走らせてみましょう

```r
# こっちがserver.R
library(shiny)

# Define server logic required to draw a histogram
shinyServer(function(input, output) {

  # Expression that generates a histogram. The expression is
  # wrapped in a call to renderPlot to indicate that:
  #
  #  1) It is "reactive" and therefore should re-execute automatically
  #     when inputs change
  #  2) Its output type is a plot

  output$distPlot <- renderPlot({
    x    <- faithful[, 2]  # Old Faithful Geyser data
    bins <- seq(min(x), max(x), length.out = input$bins + 1)

    # draw the histogram with the specified number of bins
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })
})
```


```r
# こっちがUI.R
library(shiny)

# Define UI for application that draws a histogram
shinyUI(fluidPage(

  # Application title
  titlePanel("Hello Shiny!"),

  # Sidebar with a slider input for the number of bins
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30)
    ),

    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("distPlot")
    )
  )
))
```

で、アプリケーションを走らせて、プロットの要素を見てみると

```html
<div id="distPlot" class="shiny-plot-output shiny-bound-output" style="width: 100% ; height: 400px"><img src="data:image/png....." width="610" height="400"></div>
```

みたいに出力されます。
shinyで指定した出力**output$distPlot**が、divのidに同じ名前でついてますね。

ということは、このidに対してCSSでお化粧をさせる事なんかができますね！
あ、勿論 classがshiny-plot-outputとかで出てくるので、
プロットはこういうお化粧、テーブルはこう…という指定もできますが…

bootstrapのまんまなUIじゃヤダ！カスタム開発したBIっぽく魅せたい！という時に効果的ですね。


ちなみに、cssなんかは必ずserver.RとUI.Rが置いてある階層に
wwwという名前のディレクトリをつくっておいて、そこへ放り込めばOKです。
なお、このディレクトリ名はshinyの仕様上、必ずこの名前じゃなきゃダメらしいです。
enum > link > 型は signed int  / unsigned int ? 

http://qiita.com/7of9/items/a96e69e5c6f96dcbc97f
に
> 基底型を省略した場合には int 扱いされます。

という記載がある。

では、そのintというのは signed / unsigned どちらなのかという疑問。

以下を見つけた。
http://stackoverflow.com/questions/159034/are-c-enums-signed-or-unsigned

zvbraの回答に対して、Michael Burrによる回答が

>  (which quotes the standard) actually implies you can rely on it being signed if you define an enum value as negative due to the type being able to "represent all the enumerator values defined in the enumeration".

「enumの中にマイナスがあれば、signed int型になる」と言っているようだ。

ただしこういうのは Windows IDE環境(C++) / マイクロコンピュータのIDE環境(C++ or C?) / etc により変わるかもしれないので、自分が使う環境で調べておくことにはなりそうだ。
MacにSQLServer 2008をインストールする。

Macに直接SQLServerをインストールするのは無理です。
しかし、VagrantをゲストOSのWindowsの上にSQLServerをインストールすることができます。


# 手順

以下のページの指示に従って、`vagrant up`するだけです。
- [fgrehm/vagrant-mssql-express](https://github.com/fgrehm/vagrant-mssql-express)

# 注意

- SQLServer 2008は`activerecord-sqlserver-adapter`のサポート外
 - https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues/382
JavaScript で transition を持つ要素の display を変更する際に気をつけること

# 問題

以下のような HTML があったとき、直観的にはマウスオーバーでふわっと出てきそうなのですが、Webkit 系のブラウザや Firefox では `transition` が効かず `mouseenter` で即表示されてしまいます。 （IE ではこのコードでも `transition` が効きます）

http://jsdo.it/usualoma/8C7c

```html
<div id="marker"></div>
<div id="square"></div>
<style type="text/css">
#marker {
  width: 100px;
  height: 10px;
  background: black; 
}
#square {
  width: 100px;
  height: 100px;
  background: red; 
  display: none;
  opacity: 0;
  transition: all 1s;
}
</style>
<script type="text/javascript">
(function() {
  var marker = document.getElementById("marker");
  var square = document.getElementById("square");
  marker.addEventListener("mouseenter", function() {
    square.style.display = "block";
    square.style.opacity = "1";
  });
  marker.addEventListener("mouseleave", function() {
    square.style.display = "";
    square.style.opacity = "";
  });
})();
</script>
```

# ワークアラウンド

`display: none/block` の代わりに `visibility: hidden/visible` を使うか、`setTimeout` で時間差でプロパティを変化させると、`transition` させることができるようです。

http://jsdo.it/usualoma/Qc5X

```html
<script type="text/javascript">
(function() {
  var marker = document.getElementById("marker");
  var square = document.getElementById("square");
  marker.addEventListener("mouseenter", function() {
    square.style.display = "block";
    setTimeout(function() {
      square.style.opacity = "1";
    }, 10);
  });
  marker.addEventListener("mouseleave", function() {
    square.style.display = "";
    square.style.opacity = "";
  });
})();
</script>
```
SEO対策について外部の会社に頼りきってみる

・会社
デジタルトレンズ

・内部施策
metaタグ設置
　metaタグなどの設置がすべてに行き渡っていないので、行き渡らせる
ツリー構造化
　サイトの下層ページにコンテンツを追加する
　狙ったキーワードに対して、それに関連するコンテンツをのせる
　　ex)「aga」と一緒に検索されそうな他のワードをピックアップして、その着地ページを作る
　　　　「aga 費用」 https://aga-pro.jp/columns/10
　　
・外部施策
非リンク対策（ほかのサイトから流入させる）
　同じジャンルを扱っているサイトにリンクを載せてもらう
　　違うジャンル（agaなのに保険のサイト）に載せてもらっても意味がない
　他のドメインで5~10サイト、それぞれ10記事くらい書いて立ち上げる。そこのサイトパワー（PV/UU）を数値化したものはない
　関係ないサイトにリンクを載せても短期的には順位があがるが、Googleからスパム扱いされていつか落とされるので、そこは気をつける必要がある

・金額
外部と内部合わせて50〜60万。外部20~30万。

・会社としての強み
会社が小さい。スピーディー。金額安い。
webpay-token-androidのサンプルコードコンパイル時に出たエラー



エラー1


Error:(2) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'.
Error:(2) Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.Button.Colored'.




対処方法
buile.gradle(Module.sample)の
android {
    compileSdkVersion 23//rootProject.compileSdkVersion
    buildToolsVersion rootProject.buildToolsVersion
    
    
       compileSdkVersion rootProject.compileSdkVersion
       
       を
          compileSdkVersion 23に変更
          
          
          
 エラー2
 Error:Execution failed for task ':webpay-token:processReleaseResources'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Users/inaodaisuke/Library/Android/sdk/build-tools/21.1.2/aapt'' finished with non-zero exit value 1
 
 
 対処方法
 Androidstudio →　ファイル　→　　Othersetting →　defaultsetting →　Build,Execution,deployment →　BuildTool →　　Compiler →　javacompiler →　Project bytecode versionを1.8に変更
 
 ＊効果があったかわからない
スマホでスクロールするとresizeとみなされてしまう問題


safariではスクロールを感知して上下のバーが最小化することでheightが変更し、resizeとみなされてしまう。
横幅が変わったときのみresizeとみなすようにすれば解決。

```JavaScript
var $windowWidth = $(window).innerWidth();
$(window).on('resize', function(){
	var $ww = $(window).innerWidth();
	if ($windowWidth !== $ww) { //横幅が変わったら
		if($ww < 480){ // ここ$windowWidthと間違えないように注意
			// body...
		}
	}
});
```

しかし背景画像に`background-size:cover;`を使っていると、リサイズの度に画像サイズが変わってしまう。
この問題は`height:100%;`ではなく、最も大きいウィンドウサイズである`screen.height`を高さに設定してあげることで解決。

```JavaScript
var $sh = screen.height,
	$bg = $('.bg');
$bg.css('height', $sh);
```


> 参考
http://appstars.jp/archive/583
隠しテキスト・検索用テキストの設定


画像が多めのサイトに検索用のテキストを忍ばせる

- html

```html
<ul class="secret">
	<li>サンプル</li>
	<li>サンプル</li>
	<li>サンプル</li>
</ul>

<!-- もしくは -->

<p class="txt-hidden">サンプル</p>
```
- css

```css
/* 親要素から消す */
.secret{
	display: none;
}

/* 要素そのものを消す */
.txt-hidden {
    text-indent: -9999px;
    white-space: nowrap;
    overflow: hidden;
}
```
<br>

> 参考：こういうやり方もある
http://ss-complex.com/2013/12/css-cleartext/
エラトステネスの篩 in C++

Project Eulerの素数を扱う問題で必要になったので、エラトステネスの篩を実装してみた。

実装した関数`sieve`は、上限`max`までの数の中で素数であるものを探し、対応する`IsPrime`の要素を`true`にする。

#うろ覚え
とりあえず何も見ずに実装してみたら、違うものになってしまった。

```cpp
std::vector<bool> IsPrime;

void sieve(size_t max){
    if(max+1 > IsPrime.size()){     // resizeで要素数が減らないように
        IsPrime.resize(max+1,true); // IsPrimeに必要な要素数を確保
    } 
    IsPrime[0] = false; // 0は素数ではない
    IsPrime[1] = false; // 1は素数ではない

    for(size_t i=0; i<=max; ++i) // 0からmaxまで全て調べる
        if(IsPrime[i]) // iが素数ならば
            for(size_t j=i+1; j<=max; ++j) //i+1からmaxまで全て調べる
                if(j%i==0) // iの倍数は
                    IsPrime[j] = false; // 素数ではない
}
```

最初はこれが正しいものと思い込んで使っていたが、あまりにも遅いので怪しく思い始めた。
##なぜ遅い?
・外側のループが無駄に回っている
　　合成数を除くためなら`i<=sqrt(max)`(`i*i<=max`)までで十分
　　(合成数$n$は必ず$\sqrt{n}$以下に約数を持つ)
・内側のループが非効率
　　わざわざ全ての数について、`i`の倍数かを調べている
　　最初から`i`の倍数だけを回れば済む話

(思いがけずも)やっていることは素朴な試し割りと同じなので、遅いのも当然。

#ググった
ググってちゃんとした実装を書いた。

```cpp
std::vector<bool> IsPrime;

void sieve(size_t max){
    if(max+1 > IsPrime.size()){     // resizeで要素数が減らないように
        IsPrime.resize(max+1,true); // IsPrimeに必要な要素数を確保
    } 
    IsPrime[0] = false; // 0は素数ではない
    IsPrime[1] = false; // 1は素数ではない

    for(size_t i=2; i*i<=max; ++i) // 0からsqrt(max)まで調べる
        if(IsPrime[i]) // iが素数ならば
            for(size_t j=2; i*j<=max; ++j) // (max以下の)iの倍数は
                IsPrime[i*j] = false;      // 素数ではない
}
```
includeしたメソッドで呼び出す定数のスコープの話

### include

モジュールのメソッドをクラスのメソッドとして取り込める便利なあれですね。

```rb
module M
  def m
    puts "Module M!"
  end
end

class A
  include M
end

A.new.m
#=> Module M!
```

## 定数利用

ところで、取り込まれるクラスの定数を利用したいとします。

```rb
module M
  def m
    puts CONST
  end
end

class A
  CONST = "Class A!"
  include M
end
```

しかし悲しい哉、これは例外を吐きます。

```rb
A.new.m
#=> uninitialized constant M::CONST (NameError)
```

定数を探すスコープがincludeされるモジュールのままなのですね。
これはいけない。

## include先の定数を指定する

`self`を使ってやれば望み通り、includeする側の定数を参照できます。

```rb

module M
  def m
    puts self.class::CONST
  end
end

class A
  CONST = "Class A!"
  include M
end

A.new.m #=> Class A!

class B
  CONST = "Class B!"
  include M
end

B.new.m #=> Class B!
```

### extendでも同様に

`self`が指し示すものがインスタンスではなくクラスそのものである点に注意しましょう。

```rb

module M
  def m
    puts self::CONST
  end
end

class C
  CONST = "Class C!"
  extend M
end

C.m #=> Class C!
```

### includeでもextendでも同じように使いたい

`self`が`Class`か`Module`の時とそれ以外で場合分けする？

```rb
module M
  def m
    puts (self.is_a?(Class) || self.is_a?(Module) ? self : self.class)::CONST
  end
end
```

もうちょっと綺麗な方法がありそうな気もしますが……。
そもそも同じメソッドをインスタンスメソッドとしてもクラスメソッドとしても使いたいという状況があまり無いかも。

## 定数がない場合、事前に警告する

上記のやり方でincludeするクラスの定数を取得する事ができました。
しかしこの方法を取り、間違えて必要な定数の存在しないクラスにincludeしてしまった場合、**そのメソッドが呼び出されるまで例外が飛びません**。

```rb
module M
  def m
    puts self.class::CONST
  end
end

class A
  include M # CONSTが必要なモジュールをincludeしてしまった！
end
# しかしこの段階では異常は起きない。

a = A.new

#
# 何か処理...
#

a.m #=> ここで例外！
```

これはバグの元ですね。
そこでincludedを利用して、クラス定義時にincludeの可否を決定してあげましょう。

```rb
module M
  def self.included(klass)
    klass::CONST
  rescue NameError
    raise "#{klass} is expected const CONST to include module M."
  end

  def m
    self.class::CONST
  end
end
```

これでクラス定義時に、必要な定数が無い場合例外を飛ばすようになりました。

ただし注意してください。
Rubyは極めて自由な言語なので、**後からクラス内に定数を追加する事も可能**です。

```rb
class A
  include M
end

# これは例外を吐く
# A.new.m

class A
  CONST = "Class A!"
end

A.new.m #=> Class A!
```

こうした機能を活用している場合、include時に必要な定数が無いからといって例外を投げるようでは困る事態もあるやもしれません。
Rspecでwarning: toplevel constantが出る現象に対応する

# 注意
下記の記事は暫定的な対応にしかならず、本質的な対応方針ではないことがわかりました。
詳しくはコメント欄のやり取りと、
[こちらの記事](http://qiita.com/jnchito/items/79aaca1c51a0ca20ba6e)を参照ください。

# 現象
railsの開発で、名前空間が別で同じ名称のコントローラを作ることがあると思います。
例えば、hoges_controller.rbとfuga/hoges_controller.rbのような場合です。

ここでそれぞれにcontrollersのspecを書いて、

```
rake spec
```

等で一気に全部テストを実行すると、

```
warning: toplevel constant HogesController referenced by Fuga::HogesController
```

というような警告が出て、クラスがうまく読まれず、単発では通るspecが場合によってはエラーで落ちてしまうこともあります。


# 環境
* ruby 2.2.1
* rails 4.2.3
* rspec 3.4.1

# 対応方法
下記のように設定を追加するとクラスが正しく読み込まれ、解決します。

```spec/spec_helper.rb
Dir[File.expand_path("app/controllers/fuga/*.rb")].each do |file|
  require file
end
```
overflow:auto のスクロールバーの表示/非表示を確認する

overflow:auto のスクロールバーの表示/非表示を確認したい時ありますよね。ありますよね。私はあります。

今回もggれば安定のStackOverFlow

How can I check if a scrollbar is visible?
http://stackoverflow.com/questions/4814398/how-can-i-check-if-a-scrollbar-is-visible


今回も2番目のやり方がベストマッチ。(なぜ？)

```js
jQuery.fn.hasScrollBar = function() {
    return this.get(0) ? this.get(0).scrollHeight > this.innerHeight() : false;
}
```

使い方

```js
if($('#hoge').hasScrollBar()){
    console.log("スクロールバーあるよ")
}
```

ご参考まで。
PHPのmb_convert_encodingを使って、絵文字を表示

PHP5.4からmb_convert_encodingのサポートされる文字エンコーディングに
UTF-8-Mobile#DOCOMO、UTF-8-Mobile#KDDI-A、UTF-8-Mobile#KDDI-B、UTF-8-Mobile#SOFTBANKが加わりました。

[サポートされる文字エンコーディング](http://php.net/manual/ja/mbstring.supported-encodings.php)

これによって、絵文字の変換が楽になりました :smile: 

# DB上から絵文字を取り出し画面に表示する場合

```php:sample.php
$encoding = mb_convert_encoding($source, "UTF-8-Mobile#DOCOMO","UTF-8");
```

# DB上に絵文字を登録する場合

```php:sample.php
$encoding = mb_convert_encoding($source, "UTF-8","UTF-8-Mobile#DOCOMO");
```

※ DB、画面表示ともUTF-8を前提としております。

# ひとつ問題が・・・

以下のプログラムを御覧ください

```php:sample.php
$moji = "123";
echo mb_convert_encoding($moji, "UTF-8-Mobile#DOCOMO","UTF-8");

出力結果
12
```

「123」という文字列を変換したら、「12」と出力され、最後の文字が消える現象が発生しました :scream: 


半角アルファベットやマルチバイトの文字の場合は問題なく、半角数字が末尾にある場合に発生します。（※123⇒12となるが、1234⇒1234と表示されたりと、規則性がわからない状態です）


# 暫定処置

```php:sample.php
$moji = "123"."\0";
echo rtrim(mb_convert_encoding($moji, "UTF-8-Mobile#DOCOMO","UTF-8"));

出力結果
123
```

上記のように、文字列の末尾に「\0」（NULL）をつけてあげると、正しく表示されました。
一応、rtrim()を使って、末尾のNULLを除去するようにしています。

# まとめ
この方法がベストかどうかはわからないのですが、同じようにつまずいている方がいらっしゃれば、参考にしていただければと思います。

もし、これよりも良い方法や、根本的な解決策をご存知の方がいらっしゃれば、ご教授願いたいです。
二本指（Pinchと回転）で拡縮と回転が出来るUILabel作った

iOSでよくある感じなのに実装が難しい操作だと思います。

折角頑張って作ったのでPodにしました。
Swiftで実装したのでCarthageでも使えます。

名前は`PinchableLabel`です。

![Screen Shot](https://raw.githubusercontent.com/malt03/PinchableLabel/master/screen_shot.gif)


##インストール
```ruby:Podfile
pod "PinchableLabel"
```

```ruby:Cartfile
github "malt03/PinchableLabel"
```

##使い方
普通にインスタンス作って`addSubview`するだけです。
オートレイアウトとか考えだすと面倒なので、Interface Builderからは使えません。

```Swift:ViewController.swift
let label = PinchableLabel()
label.text = "Label"
label.sizeToFit()
label.center = view.center
view.addSubview(label)
```

##URL
[GitHub](https://github.com/malt03/PinchableLabel)
[CocoaPods](https://cocoapods.org/pods/PinchableLabel)

##参考
初めてPod作ったのでお世話になりました。
http://qiita.com/makoto_kw/items/edf758a67bd4c2ba5b7a
でも最終的にはやっぱり本家を見た。
https://guides.cocoapods.org/making/using-pod-lib-create.html