OmniAICreator/Qiita-1.07M huggingface dataset:
Backbone.MarionetteアプリをWebpackでバンドルする


## Webpack

今まで、Browserlifyを利用していましたが、Webpackに切り替えました。Webpackの方が使い方も簡単で、これからモジュールバンドルを利用される方は、Webpackを使う方がいいのではないでしょうか。

https://webpack.github.io/

なんでもjsへ変換してくれます。

## バンドルサンプル

バンドルの例として以下のようなモジュールを利用するWebアプリのバンドル方法を示します。全体はGithubに置いてあります。

[https://github.com/notice/backbone-marionette](https://github.com/notice/backbone-marionette)

* backbone
* backbone.marionette
* jade
* lodash
* jquery

### Backbone.Marionette

最近では、少し古く感じてしまうBackboneですが、Marionetteの方はv3（現時点最新はv2.4）へ向けて開発が進められています。

v3ではMarionetteのモジュールは廃止されるようです。Marionetteのモジュール管理用クラスだったのですが、今後はAMD/CommonJS/ES6のモジュールを使ってくれということです。

commonJS準拠のモジュール管理をしないときは、非常に便利だったのですが、このサンプルでも先取りして、marionetteのモジュールは使っていません。

### テンプレートエンジン

テンプレートエンジンは、jadeを使う想定です。以前はhandlebarsだったのですが、jadeの方が記述量が少ないので好みです。

## タスクランナー

タスクランナーはgulpを使っていますが、webpackだけでも十分使えます。

jsのビルドはwebpackのwebpack.configで行って、それ以外はgulpfileでタスクを記述という感じで使い分けています。

このサンプルでは、index.jadeからindex.htmlにトランスパイルするときは、gulpタスクで行っています。

```ruby:gulpfile.coffee
gulp.task 'index.html', ->
  gulp.src './components/dashboard.jade'
    .pipe jade {pretty: true}
    .pipe rename 'index.html'
    .pipe gulp.dest './public/'
```

私はどちらの定義ファイルもCoffeeScriptで記述しています。とてもすっきり書けます。

## webpackローダ

webpackはローダが充実しているので、以下のような定義で簡単にトランスパイルできます。

```ruby:webpack.config.coffee
module:
　loaders: [
  　{ test: /\.coffee$/, loader: 'coffee' }
    { test: /\.jade$/, loader: 'jade' }
  ]
```

## webpackのエイリアス

underscoreの代わりにlodashを利用します。webpackだとalias定義で、簡単に置換することができます。

```ruby:webpack.config.coffee
resolve:
  alias:
    'underscore': 'lodash'
```

## スクリプト

サンプルはCoffeeScriptで書いています。例としてES6で書いたものも含めています。babelを使ってトランスパイルしています。

ほとんどES6の特徴的な機能は使っておらず、単に置き換えたレベルです。

個人的にはCoffeeScriptが好みですが、主流はES6へという流れでしょうか。node.jsもio.jsとの統合版4.0.0がリリースされましたね。

## 開発Webサーバ

なお、このサンプルはバンドルを目的としていますので、Webサーバは各自で用意してください。

webpackには、webpack-dev-serverというモジュールがあります。HMR(Hot Module Replacement)という動的にモジュールを入れ替える機能なども実装されています。

reduxを使うときは、HMRが簡単に利用できて便利です。タスクランナーでwatchする必要もなくなります。
Xcode 7 GMで、3D Touchによる、アプリホームアイコンからのクイックアクション起動が可能になりました

本記事は、3D Touchのドキュメント未公開時に、API探しながら書きましたが、その後公開されました。
[Adopting 3D Touch on iPhone: 3D Touch APIs](https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/3DTouchAPIs.html#//apple_ref/doc/uid/TP40016543-CH4-SW1)

---

これのことですヽ(・ω・｀）

![Screen Shot 2015-09-10 at 2.13.34 PM.png](https://qiita-image-store.s3.amazonaws.com/0/19398/c9ddb1fc-8f92-97bd-b0f4-d202a1e0f47a.png)
(http://www.apple.com/jp/iphone-6s/3d-touch/ から拝借)

今朝の発表を見ていたら、お馴染みのやつですヽ(・ω・｀）

詳しくは、 [iPhone 6s - 3D Touch - Apple（日本）](http://www.apple.com/jp/iphone-6s/3d-touch/)のクイックアクションの項など、ご覧下さい。
3D Touch周り、面白そうですね(　´･‿･｀)
ビデオ観るとよりイメージ湧きます: http://www.apple.com/jp/iphone-6s/3d-touch/

これも今日から使えるようになってそうという天の声が聞こえてきたので、簡単に調べてみました。

## このあたりの記述に従って登録

- [Creating a Home Screen Dynamic Quick Action - UIApplicationShortcutItem Class Reference](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplicationShortcutItem_class/index.html#//apple_ref/doc/uid/TP40016501-CH1-SW8)
- [UIApplicationShortcutItem Class Reference](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplicationShortcutItem_class/index.html)

## アプリ起動時の実装

https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:performActionForShortcutItem:completionHandler: のあたりに載っています。

プッシュ通知・URLスキーム起動・ハンドオフでの起動などと似たようなdelegateメソッドで、適当にハンドリングします。

```swift
optional func application(_ application: UIApplication,
performActionForShortcutItem shortcutItem: UIApplicationShortcutItem,
           completionHandler completionHandler: (Bool) -> Void)
```

---

というわけで、サクッと実装出来そうですね。
しかし、確認する術があるのでしょうか(　´･‿･｀)

6sシミュレーターでこの設定にして地図アプリプレスしてみましたが、プルプルするだけでした😡


![Screen Shot 2015-09-10 at 2.01.15 PM.png](https://qiita-image-store.s3.amazonaws.com/0/19398/3d459d66-0a5a-673b-253f-83f6cad96ea9.png "Screen Shot 2015-09-10 at 2.01.15 PM.png")


## 関連

- [iOS 9からForce Touch(3D Touch) API解禁(iOS 9.1ではさらにリッチに) - Qiita](http://qiita.com/mono0926/items/39911a5c7d22a8b7b39d)
現在の天気を取得する

#現在の天気を取得する

最近こんなことやってます。

![slack.png](https://qiita-image-store.s3.amazonaws.com/0/54588/0c4d85ed-49c8-9ad2-dd5e-21e2f374bde4.png)


##やってること
http://openweathermap.org/api

このAPIを使っています。

```
<?php
//緯度経度以外にも都市名などでも取得が可能なようです
$json_data = file_get_contents('http://api.openweathermap.org/data/2.5/weather?lat=33.593505&lon=130.400995');
$data = json_decode($json_data);

$text .= '\r\n|なお天気は「' . $data->weather[0]->description  . '」らしいです。';

```

因みに日本語訳は[こちら](http://milanista224.blogspot.jp/2014/10/flatwc-app-suport-jp.html#num4)にありましたが、微妙に足りてないみたいです。

ちなみにアイコン画像は
```
<img src="http://openweathermap.org/img/w/<?php echo $data->weather[0]->icon;?>.png" />
```
で取得ができます。

また、試してはないですが予報とかをとるAPIも準備されてるみたいです。

いま世の中何でもAPIがあってすごいですね・・・。
PHPExcel でAutoFilterを設定する

ほぼ備忘録
日本ではAutofilterを有効にする、という設定までで、条件の指定など、どうもこの手の情報が見つからず。

出来ない英語を、グーグル先生を頼りにやりましたが…最後で挫折。（未検証）
もうね、世界標準言語、日本語になれ💢って感じっすよ＝＞[参照](https://github.com/PHPOffice/PHPExcel/tree/develop/Documentation/markdown/Features/Autofilters) 


フィルターを実行させるには１アクションではなくレコードごとに表示非表示の指定をしなきゃいけんのか、面倒くさくてヤメ
途中でやめて実証もできていないので参照程度に。あとは偉い人( ｀・∀・´)ﾉﾖﾛｼｸ

```php
//オートフィルターの設定
$objPHPExcel->getActiveSheet()->setAutoFilter('A1:Z100');
//$objPHPExcel->getActiveSheet()->setAutoFilter(); これで全範囲になるはずだが実現せず

//カラム単位におけるオートフィルタの条件を設定
$autoFilter   = $objPHPExcel->getActiveSheet()->getAutoFilter();
$columnFilter = $autoFilter->getColumn('I');                      //I:対象のカラム

//$columnFilter -> setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_FILTER);
$columnFilter -> setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER);
$columnFilter->createRule()
  ->setRule(
    //PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
    PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_NOTEQUAL,
    ''  // 条件 !=''　みたいな
  )
  ->setRuleType(
    PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER
  ); //単純フィルタじゃない場合、setRuleTypeが必要らしい


//フィルタ実行するにもメソッドが必要みたいだが、ここもわからない。

//全部フィルタリングされる->NG
//$autoFilter = $objPHPExcel->getActiveSheet()->getAutoFilter();
//$autoFilter->showHideRows();

//こんな感じで書くらしいが疲れたので放棄、終わり
foreach ($objPHPExcel->getActiveSheet()->getRowIterator() as $row) {
    if ($objPHPExcel->getActiveSheet()->getRowDimension($row->getRowIndex())->getVisible()) {
        echo '    Row number - ' , $row->getRowIndex() , ' ';
        echo $objPHPExcel->getActiveSheet()->getCell(
            'C'.$row->getRowIndex()
        )->getValue(), ' ';
        echo $objPHPExcel->getActiveSheet()->getCell(
            'D'.$row->getRowIndex()
        )->getFormattedValue(), ' ';
        echo EOL;
    }
}
```
Media Queriesをemで分岐させるMixin


#pxベースでの分岐は限界
Media Queriesの分岐といえばpxベースがポピュラーですが、
2K/4K,iPhone4/5/6/plus,iPad mini/Air/Pro,Android 以下略と、
カオスな状態になりそれぞれ指定するのが手間すぎるため、
pxベースでの指定は限界な気がします。

そこで、emで分岐するMixinをオススメします。


##Sass
```
@mixin breakpoint($point) {
   @if $point == desktop {
        @media (min-width: 90.063em) { @content ; }
    }
    @else if $point == laptop {
        @media (min-width: 64.063em) and (max-width: 90em) { @content ; }
    }
    @else if $point == tablet {
        @media (min-width: 40.063em) and (max-width: 64em) { @content ; }
    }
    @else if $point == mobileonly {
        @media (max-width: 40em)  { @content ; }
    }
}
```

##CSS
```
div{
	@include breakpoint(mobileonly) {
		margin: 8px;
	}
	@include breakpoint(tablet) {
		margin: 16px;
	}
	@include breakpoint(laptop) {
		margin: 24px;
	}
	@include breakpoint(desktop) {
		margin: 32px;
	}
}
```

laptopはWXGAデバイスで適応されます。

2016/06/30 追記
ベースのフォントサイズを16pxとしています
AnimationCurveで何かできないかな

AnimationCurveがScriptから作れることを知った。
今までScriptでつくろうだなんて思わなかっただけだけれど

```csharp
public AnimationCurve curve;
void Awake()
	{
		Keyframe keyFrame1 = new Keyframe(0, 0, 0f, 0f);
		Keyframe keyFrame2 = new Keyframe(1, 1, 0f, 0);
		curve = new AnimationCurve(keyFrame1, keyFrame2);
	}
```
Keyframeの引数はtime,value,inTangent,outTangent
AnimationCurveの引数はKeyFrameの配列

<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/0d574550-9f6d-49c9-8d52-4d6428c3892c.png" width="200px"><img src="https://qiita-image-store.s3.amazonaws.com/0/46444/d9559cee-4bb0-1fa4-f398-8f05f3b84495.png" width="200px"><img src="https://qiita-image-store.s3.amazonaws.com/0/46444/7e7685a9-c84c-8daa-44ba-29d05241bc7b.png" width="200px">
左が(0, 0, 0, 1) (1, 1, 1, 0) 
真ん中(0, 0, 0, 0) (1, 1, 0, 0) 
右(0, 0, 0, -1) (1, 1, -1, 0) 


こんな感じでScriptからアニメーションカーブを作れる・・・・あまり必要はないかもだけれど・・・。
publicにしてインスペクタで好きにカーブを作った方があきらかに手っ取り早いし・・・。

ちなみに値を取得するときは

```csharp

float value = curve2.Evaluate(time);  // timeは秒数
```
で取得できる

###AnimationCurve使いどころとしては・・・
iTweenとかのeaseTypeにないアニメーションをしたい場合や
iTweenを使わないあるいは使えない箇所(TimeScaleが0の時のアニメーションとか)

TimeScaleが0とのきはUpdate内で、Time.deltaTimeではなくて
Time.realtimeSinceStartupをつかってカーブの値を取得すればたとえTimeScaleが0でも
curveの通りに動作できます。
NGUIのTweenはそういう機能があるんだけどな〜。
uGUIでドラッグドロップ

シンプルなドラッグドロップを勉強がてら
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/69a31ad0-c1de-bd26-bbb2-07da39e743ce.gif" width="400px">

###ドラッグのScript

```csharp 
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
	
[RequireComponent(typeof(Image))]
public class DragObject : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
	private Transform canvasTran;
	private GameObject draggingObject;

	void Awake()
	{
		canvasTran = transform.parent.parent;
	}	

	public void OnBeginDrag(PointerEventData pointerEventData)
	{
		CreateDragObject();
		draggingObject.transform.position = pointerEventData.position;
	}

	public void OnDrag(PointerEventData pointerEventData)
	{
		draggingObject.transform.position = pointerEventData.position;
	}

	public void OnEndDrag(PointerEventData pointerEventData)
	{
		gameObject.GetComponent<Image>().color = Vector4.one;
		Destroy(draggingObject);
	}

	// ドラッグオブジェクト作成
	private void CreateDragObject()
	{
		draggingObject = new GameObject("Dragging Object");
		draggingObject.transform.SetParent(canvasTran);
		draggingObject.transform.SetAsLastSibling();
		draggingObject.transform.localScale = Vector3.one;
		
		// レイキャストがブロックされないように
		CanvasGroup canvasGroup = draggingObject.AddComponent<CanvasGroup>();
		canvasGroup.blocksRaycasts = false;
		
		Image draggingImage = draggingObject.AddComponent<Image>();
		Image sourceImage = GetComponent<Image>();
		
		draggingImage.sprite = sourceImage.sprite;
		draggingImage.rectTransform.sizeDelta = sourceImage.rectTransform.sizeDelta;
		draggingImage.color = sourceImage.color;
		draggingImage.material = sourceImage.material;
		
		gameObject.GetComponent<Image>().color = Vector4.one * 0.6f;
	}
}

```

###ドロップのほうのScript

```csharp
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class DropObject : MonoBehaviour, IDropHandler, IPointerEnterHandler, IPointerExitHandler
{
	public Image iconImage;
	private Sprite nowSprite;
	
	void Start()
	{
		nowSprite = null;
	}

	public void OnPointerEnter(PointerEventData pointerEventData)
	{
		if(pointerEventData.pointerDrag == null) return;
		Image droppedImage = pointerEventData.pointerDrag.GetComponent<Image>();
		iconImage.sprite = droppedImage.sprite;
		iconImage.color = Vector4.one * 0.6f;
	}

	public void OnPointerExit(PointerEventData pointerEventData)
	{
		if(pointerEventData.pointerDrag == null) return;
		iconImage.sprite = nowSprite;
		if(nowSprite == null)
			iconImage.color = Vector4.zero;
		else
			iconImage.color = Vector4.one;
	}
	public void OnDrop(PointerEventData pointerEventData)
	{
		Image droppedImage = pointerEventData.pointerDrag.GetComponent<Image>();
		iconImage.sprite = droppedImage.sprite;
		nowSprite = droppedImage.sprite;
		iconImage.color = Vector4.one;
	}
}

```

DragするImageのついたオブジェクトにDragObject.csをアタッチ
ドラッグされるほうのオブジェクトにDropObject.csをアタッチで完了
[Elixir]マップを引数で使う時のパターンマッチの応用

#Goal
関数の引数でマップを使う時、パターンマッチを利用する。

#Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.5

#Wait a minute
関数の引数でマップを使った時のパターンマッチの応用。
ただのTipsです。

#Index
Application of pattern matching
|> Example code
|> Let's run!

##Example code
サンプルのソースコードを作成します。

####Example:

```elixir
defmodule PatternMatchSample do
  def test(%{__struct__: s} = data) do
    IO.inspect s
    IO.inspect data
  end
end
```

##Let's run!
iexから実行してみましょう。

####Result:

```elixir
iex> import PatternMatchSample
nil
```

まずは、普通にマップを作成して渡す。

```elixir
iex> hoge = %{hoge: "hoge"}
%{hoge: "hoge"}
iex> test(hoge)
** (FunctionClauseError) no function clause matching in PatternMatchSample.test/1
    iex:4: PatternMatchSample.test(%{hoge: "hoge"})
```

関数にマッチしないと怒られてますね。

次、引数の形に合わせてマップを作って渡す。

```elixir
iex> hoge = %{__struct__: "hoge"}
%{__struct__: "hoge"}
iex> test(hoge)
"hoge"
%{__struct__: "hoge"}
%{__struct__: "hoge"}
```

動作しますね。

蛇足ですが、マップの内容が複数であった場合。

```elixir
iex> hoge = %{__struct__: "hoge", huge: "huge"}
%{__struct__: "hoge", huge: "huge"}
iex> test(hoge)
"hoge"
%{__struct__: "hoge", huge: "huge"}
%{__struct__: "hoge", huge: "huge"}
```

#Speaking to oneself
これで何ができるのか？っと言ったところですが、
これは、マップ内で特定のキーを持ったマップの引数にのみ合致してくれます。

そして、そのキーの値を抽出してくれます。
なおかつ、マップそのものも引数として取得しています。
(一挙両独?もしくは一石二鳥?)

単体だとあまり、効果が感じられないと思いますが、
組み合わせていくことによって引数の制限を二つの意味で掛けることができますね。

#Bibliography
[github - Ecto - ecto/lib/ecto/model/callbacks.ex](https://github.com/elixir-lang/ecto/blob/v1.0.2/lib/ecto/model/callbacks.ex)
縦持ちデータからSQLでAND条件抽出

# やりたいこと
組み合わせで縦持ちしているテーブルがあると思います。
権限管理やグループ管理とかでよく使うやつかと。

| userid | groupid |
|:--|:--|
| u01| g01 |
| u01| g02 |
| u01| g03 |
| u02| g02 |
| u02| g03 |
| u03| g01 |
| u04| g01 |
| u04| g02 |
| u05| g02 |

ここから、「g01とg02の両方に属している(AND)useridを抽出」したいのです。

ぱっと思いつかず調べてみると、
「横持ちに変換する」ソリューションがよくヒットしましたが、
groupidが運用によって増えていくような状況だと、あまり適しません。

# 思いついた
当然他でもやっている方はいらっしゃるでしょうが、あまり見かけなかったので紹介します。

`select userid, count(1) from table where groupid in ('g01','g02') group by userid having count(1) = 2`

| userid | count(1) |
|:--|:--|
| u01| 2 |
| u04| 2 |

in句に入る個数をhaving句にも入れる感じです。
'g01','g02','g03' なら having count(1) = 3
querySelectorAll()の戻り値はArrayじゃないよ

```js
var divList = document.querySelectorAll('div');
var a = divList[0];// 1つ目の要素
var b = divList[1];// 2つ目の要素
```
divListは一見Arrayのように見えるが…

```js
console.log(divList instanceof Array);// false
divList.forEach(function(v, i) { console.log(i); });// エラー
```
Arrayじゃない。
forEachとかmapとか使えない。
気をつけろ。

## じゃあquerySelectorAll()の戻り値は何なんだ
答えはNodeList。
これで確認できる。

```js
console.log(toString.call(divList));
```
## forEachとか使いたい時はどうする？
Arrayからメソッド取ってくる
参考：[mozillaのNodeListのworkaround ](https://developer.mozilla.org/ja/docs/Web/API/NodeList)

```js
function mixinArray(target) {
  var arrayMethods = Object.getOwnPropertyNames(Array.prototype);
  arrayMethods.forEach(attachArrayMethodsToNodeList);
  function attachArrayMethodsToNodeList(methodName) {
    if(methodName !== "length") {
      target[methodName] = Array.prototype[methodName];
    }
  };
}

mixinArray(NodeList.prototype);
```

NodeListレベルで変更するのは影響範囲が広くてヤダ！
ってときはインスタンスに対して適用すればイイ。

```js
mixinArray(divList);
```
Storyboard で、Single view でプロジェクト作成後後からNavigation Controller 追加

画面遷移がやりたかったためSingle view で新規プロジェクト作成後、後からNavigation ControllerをStoryboardに追加したら

`Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - 
 perhaps the designated entry point is not set?`

というエラーが発生。Root view controller を起動するポイントが無いということなんだろうと色々xcode触っていたらNavigation ControllerのShow the Attributes inspectorの設定でView Controller の Is initial View Controller のチェックボックスをチェックするだけで解決。
foxx-manager は proxy をサポートしない（今のところ）

arangosh や foxx-manager は https_proxy をサポートしていないため、coporate proxy があるところでは基本的に foxx app を動かすことはできません。

- [`foxx-manager update` fails inside corporate proxy environment - stackoverflow](http://stackoverflow.com/questions/32469466/foxx-manager-update-fails-inside-corporate-proxy-environment)
- [Add support for http-proxies to the simple http client - github](https://github.com/arangodb/arangodb/issues/1477)

[microservice](http://martinfowler.com/articles/microservices.html) の実装にぴったりの foxx が使えないようでは、ArangoDB を使う魅力は半減もいいところなのですが、致し方ない。

当面の間は、transparent proxy で逃げるしかないようです。
Twilioはじめの一歩


Twilioを始めようと思う。まずはその取っ掛かりから。

## Twilioとは？
[公式サイトのTwilioツアー](http://twilio.kddi-web.com/solutions/)を見てみると、最初に
> 「電話」とインターネットをつなぐ

と出てくる。一言で言うとコレ。

ここであんまり色々書いてもイメージが湧かないと思うので、
とりあえずはじめの一歩を踏み出してみる。

## とりあえずやってみる
※ https://jp.twilio.com/try-twilio/kddi-web からアカウントを作っておく。最初は無料のトライアルモードで始められる（メールアドレスと電話が必要）。

まずは、以下のファイルを用意する。

```test.xml
<Response>
  <Say voice="alice" language="ja-JP">東京特許許可局</Say>
</Response>
```

これを、どこかインターネットからアクセスできる場所に置く。
ブラウザでアクセスして、xmlが表示される状態であればOK。
（今回はAmazonS3に置いてみた。）

次に、Twilioにログインして、一番上のメニューから「電話番号」を選択し、左側の赤く表示されている電話番号をクリック。
![スクリーンショット 2015-01-18 0.10.08.png](https://qiita-image-store.s3.amazonaws.com/0/39565/7e11b7ed-1de1-f051-f641-74c6225d9a87.png "スクリーンショット 2015-01-18 0.10.08.png")

「音声通話」の項目があるので、そこに先ほどのXMLのURLを入れ、メソッドを`HTTP GET`にする。
![スクリーンショット 2015-01-18 0.19.24.png](https://qiita-image-store.s3.amazonaws.com/0/39565/e41e9fa4-8bd0-f2b7-c233-c4cf1f8731aa.png "スクリーンショット 2015-01-18 0.19.24.png")

そして設定を保存し、自分の電話から、twilioの番号に電話をかける。
うまくいっていれば、どこかぎこちない自動音声が流れるはず。
※トライアルモードの場合は、最初にトライアルモードである旨の案内が流れます。

## 何が起こっているのか？
この時点で、すでに電話とインターネットを繋げることに成功している。

動きを追っていくと、次のようなイメージになるかと思う。

* 自分の電話からTwilio電話番号に向けて電話をかける
* Twilioは、かかってきたTwilio電話番号に設定されている「音声通話」のリクエストURLに対してリクエストを行う
* Twilioは、リクエストの結果として`test.xml`の内容を取得する
* このXMLは、Twilioに対してSayタグの中身を読み上げさせる命令になっているので（TwiML:後述）、Twilioは着信元の電話に対して「東京特許許可局」と音声を流す

つまり、電話からTwilio経由でインターネット上の情報(test.xml)をリクエストし、その内容を(Twilioに音声に変換してもらって）取得している、ということになる。

自分の電話=ブラウザ、Twilio電話番号=URL、Twilio=Webサーバと考えれば、イメージしやすいかも？
Twilio電話番号は、普通の電話番号と違って、電話機に紐付けられているわけではない。あくまでTwilioの機能にアクセスするためのインターフェース。なので、先ほどの例でも複数の電話からTwilio電話番号にかけても、通話中にならずに全て受け付けらる。…という考え方でいいはず。

## TwiMLって？
今回アップロードしたXMLは、TwiMLと呼ばれるもので、Twilioに対して動作の指定を行う。
Twilioでアプリケーションを作る際の要となる。

今回使ったテキストの読み上げのほかにも、mp3ファイルを再生したり、通話を転送したり、通話を録音したり、番号のプッシュを受け付けたり、いろいろなことができる。
詳細は[公式リファレンス](https://jp.twilio.com/docs/api/twiml)を参照。

もちろん、インターネット上にあるTwiMLファイルをそのまま使わずとも、WebアプリからTwiMLを生成して渡してもよい。
ということは、時間帯によって動作を変えたり、着信番号によって動作を変えたり(リクエスト中のパラメータに着信番号等の通話情報が含まれる)といったことができる！
いろいろなことができる気がしてこないだろうか…？

## ほかにはどんなことができる？
今回は電話からTwilioに向けて発信したが、Twilioから電話に向けて発信することもできる。
また、音声を送受信する端末としてブラウザも使えるので、電話<->ブラウザ間の通話や、ブラウザ同士での通話も可能。普通の電話と違って1対1の通話ではないので、複数の端末が同時に通話に参加することも可能となる。
さらにSMSも扱えるらしい（けどこれはよく知らない…）。

Webアプリを作るとしても、主要な言語に対してライブラリが用意されているので安心。

## まとめ
なんだかTwilioの回し者みたいになってしまったけど、Twilio楽しい！
ThymeleafでJavascriptを使う方法

基本的には、
[ThymeleafでJavaScriptのちょっとした注意点をメモ](http://bufferings.hatenablog.com/entry/2013/11/23/101731)にある通り。

個人的にハマった（というか勘違いでちょっと無駄した）箇所を追記。

``` <noscript> ``` で同じようにThymeleafの値を設定したい場合、最初

``` html
<noscript th:inline="javascript">
/*<![CDATA[*/
  <iframe src="http://hogehoge.com/?p=/**[[${param}]]**/param"></iframe>
/*]]>*/
</noscript>
```
とやっていたけどうまくいかず、よくよく考えたら ``` noscript ``` はただのHTMLなので

``` html
<noscript th:inline="javascript">
  <iframe src="http://hogehoge.com/?p=param" th:src="'http://hogehoge.com/?p=' + ${param}"></iframe>
</noscript>
```

でいけた。

Google Analyticsのタグのように、環境毎に変わるのがキーだけで他が変わらないものを、

``` html
<div th:if="${@environment.acceptsProfiles('product')}" th:remove="tag">
  <noscript>
  ...
  </noscript>
  <script>
  ...
  </script>
</div>
<div th:if="${@environment.acceptsProfiles('develop')}" th:remove="tag">
  <noscript>
  ...
  </noscript>
  <script>
  ...
  </script>
</div>
```

のように繰り返して書くとメンテナンス性に欠けるので、一部だけ置き換えることができるのはかなり便利。
もっと！Promiseと仲良くなるためにスニペットを用意する

よく叩くわりに長いフレーズはスニペットに入れておくと捗ります。
![promise.gif](https://qiita-image-store.s3.amazonaws.com/0/3790/30419de6-36cc-2d26-82f3-5120de9563da.gif)

エディタ別のスニペットを用意しました。
今日から貴方も more Promise ライフ！

Sublime Text
====

Toolsメニュー→New Snippets...
promise.**sublime-snippet** の名前で保存します。

```XML:SublimeText
<snippet>
    <content><![CDATA[
new Promise(function (resolve, reject) {
	$1
});
]]></content>
    <tabTrigger>promise</tabTrigger>
    <scope>source.js</scope>
</snippet>
```

Visual Studio Code
====

(2015/11/23 追記)
Visual Studio Marketplaceで公開しましたので、簡単に導入できます。 [Promise snippets - Visual Studio Marketplace](https://marketplace.visualstudio.com/items/progre.promise-snippets)

Ctrl(Cmd)+Shift+P → [install] → [promise]

自分で作る場合は↓
Ctrl(Cmd)+Shift+P → [Snippets] → [JavaScript]

```json:VisualStudioCode
{
	"Promise": {
		"prefix": "promise",
		"body": [
			"new Promise(function (resolve, reject) {\n\t$1\n});"
		]
	}
}
```

Atom
====

Ctrl(Cmd)+Shift+P → [Open Your Snippets]

```cson:Atom
'.source.js':
  'Promise':
    'prefix': 'promise'
    'body': 'new Promise(function (resolve, reject) {\n\t$1\n});'
```
[Android] datePickerでsetMaxDateやsetMinDateで日付範囲を指定するときに気をつけること

```
Fatal Exception: java.lang.IllegalArgumentException
Time not between Wed Sep 09 19:07:07 JST 2015 and Wed Jun 01 19:07:07 JST 2016
```
こんなクラッシュレポートが発生していました。
datePicker.setMaxDateとdatePicker.setMinDateでの範囲に誤りがある。

調べてみると、Calendarクラスで日付だけセットしても時分秒ミリ秒でズレが残ってました。
なので、日付の指定の他にMinDateには0時0分0秒00、MaxDateには23時59分59秒99というような範囲を設定する必要があります。

```java

//MaxDateの設定
Calendar maxCal = Calendar.getInstance();
maxCal.add(Calendar.MONTH, 6); //6ヶ月後

maxCal.set(Calendar.HOUR_OF_DAY, maxCal.getMaximum(Calendar.HOUR_OF_DAY));
maxCal.set(Calendar.MINUTE, maxCal.getMaximum(Calendar.MINUTE));
maxCal.set(Calendar.SECOND, maxCal.getMaximum(Calendar.SECOND));
maxCal.set(Calendar.MILLISECOND, maxCal.getMaximum(Calendar.MILLISECOND));

datePicker().setMaxDate(maxCal.getTimeInMillis());

//MinDateの設定
Calendar minCal = Calendar.getInstance(); // 本日

minCal.set(Calendar.HOUR_OF_DAY, minCal.getMinimum(Calendar.HOUR_OF_DAY));
minCal.set(Calendar.MINUTE, minCal.getMinimum(Calendar.MINUTE));
minCal.set(Calendar.SECOND, minCal.getMinimum(Calendar.SECOND));
minCal.set(Calendar.MILLISECOND, minCal.getMinimum(Calendar.MILLISECOND));
datePicker().setMinDate(minCal.getTimeInMillis());
```
在 Rails 安裝 simple_form 、並搭配 Bootstrap 樣式


![](https://farm6.staticflickr.com/5766/21268245021_d0beaab260_o.png)

[simple_form](https://github.com/plataformatec/simple_form) 是讓 Rails application 製作表單更加容易的套件。這篇會說明怎麼安裝進 Rails 的專案中，並建立 Bootstrap 樣式的 simple_form 元件。

## 前置作業

在需要使用 Bootstrap 樣式的元件的時，也必須要確認有將 Bootstrap 的資源放入專案中。安裝的方式可以參考 "[在 Rails 專案加入 Bootstrap 套件](http://qiita.com/vc7/items/3250415f5ec1aa332a0a)" (同步發布：[熊屋](http://blog.kumaya.co/2015/09/08/rails-with-bootstrap/)) 這篇文章。

### 版本

- rails 4.2
- simple_form [3.1.1](https://rubygems.org/gems/simple_form/versions/3.1.1)

## 加入 Gemfile

要使用這個 gem, 當然要先加入 Gemfile 裡面，請確保在不同的部署, development/production/... ,都可以使用到。

``` ruby:Gemfile
gem 'simple_form'
```

存擋後，執行

``` bash
bundle install
```

完成安裝

## 產生 simple_form 的相關元件

如果沒有用任何的 UI framework ，可以在專案的根目錄下，直接執行以下指令產生必要的檔案：

``` bash
rails g simple_form:install
```

### 如果你有用 Bootstrap

就執行以下指令

``` bash
rails g simple_form:install --bootstrap
```

這樣就安裝完成了

## 重啟 Rails server

完成後，需要重啟 rails server 

``` bash
rails s
```

## 其他資源

- [simple_form - GitHub](https://github.com/plataformatec/simple_form)
- [bootstrap-sass - GitHub](https://github.com/twbs/bootstrap-sass)
c++ builder > TEdit > パスワード入力

```txt:動作確認
C++ Builder XE4
```

パスワードを入力するTEditが欲しい。でもカスタムなどで作りこむのは面倒。

欲しい機能としては

1. 入力中は入力した単語を非表示に
2. 入力しているという情報があれば親切
3. 処理後はCtrl+Cで取得されないこと
4. パスワード入力のまま離席した時の対応 > パスワード自動削除


実装した。以下の番号は上記番号に対応する。

1. TEditのFont->Colorをフォームデザインで clWindow にする
2. 上記1により"|" (caret?) の位置が変わるので、入力しているのがわかる
3. Buttonを押した時にTEditの中身を消す
4. さらに念のため、Timer1で5秒などのインターバルののち削除する

4のTimer1を動かすタイミングは要検討。キーの入力が終了してからTimer1を起動する？？？

TODO: TEditをコピー不可にする
Rails: ActiveModel の table_for を i18nに対応させる 

table_for に直接 i18n を指定して、モデルオブジェクトを渡す。

```rb:/app/admin/human.rb
table_for humans, i18n: Human do
  column :name
  column :gender { |result| result.gender }
end
```

モデルでは ActiveModel を include するだけで良い。

```rb:/app/models/human.rb
class Human
  include ActiveModel::Model
end
```

locales ファイルを設定する。（記述場所は activerecord: の下ではないので注意）

```yaml:/config/locales/ja.yml
ja:
  activemodel:
    attributes:
      human:
        name: 名前
        gender: 性別
```





<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
VHDLで下位ブロックを呼び出す2つの方法

## 階層構造の記述方法

VHDL では他の回路をインスタンスとして呼び出して階層構造を構築することが出来ます。
ここではその記述の例を、次のような回路を呼び出す場合で、紹介します。

````VHDL:sub.vhd
library ieee;
use     ieee.std_logic_1164.all;
entity  sub is
    generic (
        W : integer
    );
    port(
        I : in  std_logic_vector(W-1 downto 0);
        O : out std_logic_vector(W-1 downto 0)
    );
end sub;
````

### component 宣言を使う方法

インスタンスとして呼び出す前に component 宣言しておきます。

````VHDL:main1.vhd
library ieee;
use     ieee.std_logic_1164.all;
entity  main is
end     main;
architecture model of main is
    signal i : std_logic_vector(9 downto 0);
    signal o : std_logic_vector(9 downto 0);
    component sub
        generic (
            W : integer
        );
        port(
            I : in  std_logic_vector(W-1 downto 0);
            O : out std_logic_vector(W-1 downto 0)
        );
    end component;
begin
    u: sub generic map(W => 10) port map (I => i,O => o);
end model;
````

### entity を使う方法

次のように entity を使って呼び出します。library名.entity名で指定する必要があります。

````VHDL:main2.vhd
library ieee;
use     ieee.std_logic_1164.all;
entity  main is
end     main;
architecture model of main is
    signal i : std_logic_vector(9 downto 0);
    signal o : std_logic_vector(9 downto 0);
begin
    u: entity work.sub generic map(W => 10) port map (I => i,O => o);
end model;
````

## それぞれの方法の特長

### entity を使う方法の利点と注意点

entity を使う方法では、いちいち component 宣言をしなくても良いという利点があります。

ですが、entity を使う方法は処理系によってはファイルを読み込む順番に注意が必要な場合があります。
と言うのも、インスタンスとして呼び出す"前"に、対象となる entity 宣言をライブラリに取り込んでおく必要があるのです。
例えば、ghdl の場合、いきなり main2.vhd を読み込むと次のようなエラーが出ます。

````shell
$ ghdl -a --work=work main2.vhd
main2.vhd:9:20: primary unit "sub" not found in library "work"
````

エラーが出ないようにするには、sub.vhd を読み込んでから main2.vhd を読み込みます。

````shell
$ ghdl -a --work=work sub.vhd
$ ghdl -a --work=work main2.vhd
````

このように、entity を使うにはファイルを読み込む順番に気を使う必要があります。
同様の注意が必要な処理系には Mentor Graphics社の modelsim があります。

一方、このような注意が必要の無い処理系には、Xilinx 社の Vivado があります。
Vivado はプロジェクトにVHDLファイルを登録する際、軽くアナライズをして階層構造を認識します。
そのおかげか、適当な順番でファイルを登録しても、ちゃんとアナライズできます。

さらに、処理系の組み合わせにも注意が必要です。
例えば、プロジェクトは Vivado で作り、シミュレーションだけは modelsim を使うような場合です。
Vivado から modelsim を使う場合、Vivado は modelsim 用のスクリプトファイルを生成して modelsim にファイルを読み込ませます。
その際、そのファイルを読み込む順番によっては読み込み時にエラーが出ることがあります（経験談）。

### component 宣言を使う方法の利点と欠点

component 宣言を使う場合は、entity を使う方法と違って、ファイルを読み込む順番に気を使う必要がありません。
ソースファイルが多くなればなるほど、ソースファイルを矛盾無く順番に読み込むのが難しくなります。
特にたくさんのチームでの大規模な開発やオープンソースなど外部のライブラリを使用する時は、component 宣言を使った方が良い場合があります。

component 宣言を使う方法の欠点は、何と言っても、いちいち component 宣言を記述しておく必要があることでしょう。
記述量が増えるばかりか、entity 宣言と component 宣言の２箇所でインターフェースを管理しなければならず、たいへん面倒です。
高速にApache Kafkaを試す


[Apache kafkaに入門した](http://deeeet.com/writing/2015/09/01/apache-kafka/)

最近[Apache kafka](http://kafka.apache.org/)を探求している．触ることも多くなったのでローカルで簡単に試せる環境をちゃんと整えた．JVMだし動かすの大変そうと思われがちだがDockerを使えばコマンド1発で起動できる．以下では実際にBrokerを立ててsyslogの配信/購読をやってみる．

バージョンは _0.8.2_ を対象に書いている．

まずKafka（Broker）を動かす．Dockerイメージ[tcnksm/single-kafka](https://github.com/tcnksm/dockerfile-single-kafka)を準備した．以下のように起動する．オプションはすべてDockerホスト外からBrokerにアクセスするための設定．

 ```bash
 $ docker run --rm -it \
     --name kafka \
     --publish 9092:9092 \
     --env ADVERTISED_HOST=${DOCKER_HOST} \
     --env ADVERTISED_PORT=9092 \
     tcnksm/single-kafka
 ```


実際にsyslogの配信（Produce）と購読（Consume）をしてみる．logstashやfluentdを使っても良いが[kafkacat](https://github.com/edenhill/kafkacat)を使うのがお手軽．バイナリで配布されているのでOSXだとHomeBrewでインストールできる．

```bash
$ brew install kafkacat
```

まず配信は以下．パイプで`tail`の出力を受け取る．トピック名は`syslog`としKafka（Broker）はDocker上で動いているので`${DOCKER_HOST}:9092`を指定する．

```bash
$ tail -f /var/log/system.log | kafkacat -P -t syslog -b ${DOCKER_HOST}:9092
```

次に購読は以下のようにする．トピック名`syslog`を指定するだけ．

```bash
$ kafkacat -C -t syslog -b ${DOCKER_HOST}:9092
```

## まとめ

サードパーティのConsumer/Producerを試す，もしくは自分で書いたConsumerやProducerのテストにも使えるのでぜひ使ってください．
プログラム内でデータベースを作成する

ウェブアプリのインストーラでデータベース自体を作成してくれるものはあまり見ないので、プログラム内でデータベースを作成することは出来ないのかと思ってたら、全然そんなことは無かったです。

以下のような記述のみでデータベースが作成されます。（MySQLのみ、ID:root PW:なし）

```php
<?php
$db = new PDO('mysql:', 'root');
$db->exec('CREATE DATABASE IF NOT EXISTS dbtest');
```

DSNにはDB名を指定しなければいけないものだと思い込んでました…
[ansible]remote_user 指定の優先順位について

# 結論
* 以下の通り（左項で設定した値が優先される）。
__playbook > コマンドパラメータ > ansible.cfg__ <br><br>

* ansible-playbookコマンドで -u ("remote_user"を指定するオプション) が効かなかったため、コードリーディングしたところ気がついた[^1]。公式ドキュメントをよく読めば書いてあるかもしれない。
* playbookとコマンドパラメータどちらでも指定可能なその他の値についても、同様の動作をするはず。

# 動作確認
## バージョン情報
```
$ ansible-playbook --version
ansible-playbook 1.9.3
```

## 確認手順
* ansible.cfg及びplaybookにて、remote_user->root を指定

``` shell:ansible.cfg
$ grep remote_user /etc/ansible/ansible.cfg
remote_user = root
```

```yaml:playbook(before)
$ head -5 test.yml
---
- hosts: all
  vars:
  remote_user: root
  sudo: yes
```
<br>

* ansible-playbookコマンドを実行すると、-u オプションで指定したユーザではなく、rootユーザでssh接続しようとして失敗する（キーペアの不一致）

```
$ sudo ansible-playbook test.yml -l xxx.xxx.xxx.xxx -u ansibleuser --private-key="xxx.id_rsa" -vvv

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
<xxx.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: root ★
<xxx.xxx.xxx.xxx> REMOTE_MODULE setup
<xxx.xxx.xxx.xxx> EXEC ssh -C -tt -v -o ControlMaster=auto -o ControlPersist=60s -o ControlPath= ...
　　　　　　　　：
fatal: [xxx.xxx.xxx.xxx] => SSH Error: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
　　　　　　　　：
xxx.xxx.xxx.xxx            : ok=0    changed=0    unreachable=1    failed=0
```
<br>

* playbookにて、remote_user行をコメントアウト

```yaml:playbook(after)
$ head -5 test.yml
---
- hosts: all
  vars:
# remote_user: root
  sudo: yes
```
<br>

* あらためてansible-playbookコマンドを実行すると、-u オプションで指定したユーザでssh接続に成功する

```
$ sudo ansible-playbook test.yml -l xxx.xxx.xxx.xxx -u ansibleuser --private-key="xxx.id_rsa" -vvv

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
<xxx.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: ansibleuser ★
<xxx.xxx.xxx.xxx> REMOTE_MODULE setup
<xxx.xxx.xxx.xxx> EXEC ssh -C -tt -v -o ControlMaster=auto -o ControlPersist=60s -o ControlPath= ...
　　　　　　　　：
ok: [xxx.xxx.xxx.xxx]
　　　　　　　　：
xxx.xxx.xxx.xxx            : ok=1    changed=0    unreachable=0    failed=0
```

# 所感
* roleにまとめてうまいことやってくれという設計思想かもしれないが、ちょっとしたオペレーションをansibleで書きたい、既存環境がぐちゃぐちゃ、等の理由により、適宜コマンドパラメータで"remote_user"を指定したい場面はあると思う。
* そのため、ちょっとしたplaybookには"remote_user"を指定しないほうが融通がきいていいかなと思った。

---

[^1]: "remote_user"については[こちら](http://docs.ansible.com/ansible/intro_configuration.html#remote-user)
【Win7】VirtualBoxでHostOnlyネットワークを有効にしたらIEが繋がらなくなった時の対処法

# 概要

HostOnlyネットワークを有効にすると、IEとChromがネットに接続できなくなってしまった。
Firefoxはなぜか普通に接続できる。
HostOnlyネットワークを無効にするとIEでも接続できる。

どうやらプロキシとかが影響してそう、

# 対象法

## ローカルエリア接続(ワイヤレスネットワーク接続)の設定
1. コントロールパネル → ネットワークとインターネット → ネットワークと共有センターを開く
2. ローカルエリア接続、またはワイヤレスネットワーク接続(使っているほう)を選択し、右クリックしてプロパティを開く
3. 共有タブを開き、「ネットワークの他のユーザーにこのコンピュータのインターネット接続を通して接続を許可する」をチェック
4. ホームネットワーク接続に、VirtualBoxのHostOnlyネットワークを指定

## HostOnlyネットワークの設定
1. HostOnlyネットワークを右クリックしプロパティを開く
2. IPv6のチェックをはずす
3. IPv4をクリックし、プロパティを開く
4. IPアドレスを自動的に取得するにチェック
5. DNSサーバーを自動的に取得するにチェック

以上の設定で自分の環境では接続できるようになりました。
iOS 9からForce Touch(3D Touch) API解禁(iOS 9.1ではさらにリッチに)

本記事は、3D Touchのドキュメント未公開時に、API探しながら書きましたが、その後公開されました。
[Adopting 3D Touch on iPhone: 3D Touch APIs](https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/3DTouchAPIs.html#//apple_ref/doc/uid/TP40016543-CH4-SW1)

---

[Pre Release用のUITouchのドキュメント](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UITouch_Class/)に、Force Touchについての記載がありました。
(普通の[UITouch Class Reference](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITouch_Class/) にはない)

[UIForceTouchCapability - UITraitCollection Class Reference](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UITraitCollection_ClassReference/#//apple_ref/c/tdef/UIForceTouchCapability)にもけっこう記載があります。

> 3D Touch and Trait Collections
Starting in iOS 9, you can use this class to check whether the device on which your app is running supports 3D Touch. Read the value of the forceTouchCapability property on the trait collection for any object in your app with a trait environment. 

`forceTouchCapability`にてチェックするようで、iPhone 6sシミュレーターでも`Available`じゃ無かったです(´・︵・｀)

僕がチェックしていた限りは、これまでAPIとしては公開されていなくて、今朝のGM版リリースのタイミングで公開された気がします。
とにかくこれで、Force Touch機能を自分のアプリでも使えるようになりますね。
~~シミュレーターではForce Touchを再現出来るメニューが見当たらず~~、iPhone 6sリリース(25日)・シミュレーターの対応待ちという感じでしょうか（´-ω-｀）
→ Apple Watchと同様、メニュー自体はありました。

[ViewControllerPreviews: Using the UIViewController previewing APIs](https://developer.apple.com/library/prerelease/ios/samplecode/ViewControllerPreviews/Introduction/Intro.html#//apple_ref/doc/uid/TP40016546)のサンプルなどで使われています。

それぞれの詳しい内容はドキュメント見た方が良いと思いますが、目diffかけてみましたʕ ·ᴥ·ʔ

## iOS 9で増えるもの

- Getting Touch Attributes
	- force
	- maximumPossibleForce
- Constants
	- UIForceTouchCapability
	- UITouchType
	- UITouchProperties



## iOS 9.1で増えるもの

iPad Proのスタイラス周りのAPIに関係しそうなものが多い印象(　´･‿･｀)

- Getting the Location of a Touch
	- preciseLocationInView:
	- precisePreviousLocationInView:
- Getting Touch Attributes
	- altitudeAngle
	- azimuthAngleInView:
	- azimuthUnitVectorInView:
	- estimatedProperties
	- updatedProperties
	- estimationUpdateIndex

## 関連

- [iOS9 - Xcode 7 GMで、3D Touchによる、アプリホームアイコンからのクイックアクション起動が可能になりました - Qiita](http://qiita.com/mono0926/items/847a44388bba33ed7d2b)
jQuery .css　まとめ

.cssときたら書式は３つ。

###.css(name)
最初の要素が持つstyle属性の値を返します。
```ex : 
var color = $(this).css("background-color");
$("#result").html("That div is <span style='color:" +
                   color + ";'>" + color + "</span>.");```

###.css(propaties)
スタイルのキーと値を持つハッシュを渡して、全ての要素のstyle属性を設定します。
`ex :  $(this).css({ backgroundColor:"yellow", fontWeight:"bolder" });`

=>最も多用する

###.css(name, values)
キーと値を渡して全ての要素のstyle属性を設定します。
`ex : $(this).css("color","red");`

参考：
http://semooh.jp/jquery/api/css/
http://js.studio-kingdom.com/jquery/css/css
Jupyter Nootbookをwindowsで動かす

## pipで使うコンパイラのインストール

matplotlibとかpipで入れようと思うとMicrosoft Visual C++ Compiler for Python 2.7が必要みたいなので、以下からダウンロードしてmsiからインストール

http://www.microsoft.com/en-us/download/details.aspx?id=44266

これをインストールしていないと、 `pip install matplotlib` を実行した際に以下のエラーが出る

```
C:\Python27\Lib\distutils\dist.py:267: UserWarning: Unknown distribution option: 'define_macros'
  warnings.warn(msg)
error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
```

## インストール方法

pythonとpipが入っている前提

``` command
pip install ipython jupyter matplotlib
```

もしかしたらipythonはいらないかも

## 起動

コマンドを実行すると、コマンドを実行したフォルダをルートにしてjupyterが起動し、ブラウザで表示される。
ローカルだけで使うのであればこれだけで問題ない。

```
jupyter notebook
```

これで、markdownもTeXもmatplotlibでの図の描画もブラウザ上でできちゃいます。

![スクリーンショット_091015_092040_AM.jpg](https://qiita-image-store.s3.amazonaws.com/0/16612/db621fa3-2c7f-fc26-cf88-c1be5f88e810.jpeg)


## 設定ファイルのあるフォルダの確認

jupyterの設定をどこに置くか書くにする [参考](http://jupyter.readthedocs.org/en/latest/system.html#the-jupyter-command)

``` command
> jupyter --config-dir
C:\Users\<USERNAME>\.jupyter
```
[iOS]特急審査を二回以上行った場合どうなるのか

## iOS特急審査を二回以上行った場合どうなるのか

iOSの申請でどうしても緊急でリリースしたい、しかし一度特急審査はやってしまったし...といったことが発生してしまった。特急で申請する必要が出てきた。といったケース。

結論としては、同一アプリで特急審査が２回通ったのであくまで参考に。
※体験談となります

以下、1度目の特急審査の受付メール

```
Hello Name ,

Thank you for contacting App Store Review to request an expedited review. We have made a one-time exception and will proceed with an expedited review of XXXXXXXX.

We understand that situations can arise which require more immediate attention and have developed the Expedited Review Process for such situations. We want to remind you that expedited reviews cannot be guaranteed and are provided on a limited basis. Therefore, we may not be able to accommodate additional requests in the future.

If your app is rejected during this review, it is not necessary to request another Expedited Review when you resubmit. Once you revise and resubmit your binary (or metadata, in the case of a Metadata Rejection), your app will be automatically returned to the expedite queue.

Best Regards,

App Store Review
```

これが二度目

```
Hello Name

Thank you for contacting App Store Review.

We understand that situations arise which require an exceptional response, however, we have received multiple expedite requests from  Name within a short period of time.

We have made an additional exception for your app and will proceed with an expedited review. We wanted to remind you, however, that expedited reviews are provided on a limited basis, otherwise the process itself becomes ineffective. Please keep in mind that we may not be able to accommodate additional requests in the future.

If your app is rejected during this review, it is not necessary to request another Expedited Review when you resubmit. Once you revise and resubmit your binary (or metadata, in the case of a Metadata Rejection), your app will be automatically returned to the expedite queue.

Best Regards,

App Store Review
```

やはり複数特急審査を出すのはAppleにとって負担であるらしく、特に急いでいない状況であれば通常申請で行うべき。特急審査をしてもらうに正当な理由があれば、その限りではないですよ、ということだろう。ちなみにこちらの特急審査は、このメールが来てから３時間後にIn Reviewとなり、それから２時間後にリリースされました。
SublimeREPLにstackのサポートを追加する

[SublimeREPL](https://github.com/wuub/SublimeREPL)はSublime Textにインタプリタを設定するプラグインです。GHCiをエディタ上に呼び出し、編集中のモジュールを手軽にデバッグ/テストできるようにします。このプラグインは現時点で[stack](https://www.stackage.org/)をサポートしていませんが、非公式にとりあえず設定できたので紹介します。

デフォルトではGHCiは`ghci`コマンドで呼ばれるよう設定されています(`Packages\SublimeREPL\config\Haskell\Main.sublime-menu`)。

    "command": "repl_open", 
    "caption": "Haskell",
    "id": "repl_haskell",
    "mnemonic": "h",
    "args":
    {
        "type": "sublime_haskell",
        "encoding": "utf8",
        "cmd": ["ghci"],  ← ここやで
        "cwd": "$file_path",
        "external_id": "haskell",
        "syntax": "Packages/Haskell/Haskell.tmLanguage"
    }

stackパッケージ内で全てのモジュール/依存パッケージをロードしつつGHCiを呼び出すには、このコマンドを`stack ghci`に変更します。パッケージされていないモジュールの場合は`stack exec ghci`に変更します。手動で変更するのは面倒なので、Haskellの項目を分割し、エディタ上で選択できるようにしました。

    [
         {
            "id": "tools",
            "children":
            [{
                "caption": "SublimeREPL",
                "mnemonic": "r",
                "id": "SublimeREPL",
                "children":
                [{
                    "caption": "Haskell",
                    "id": "Haskell",
                    "children":
                    [
                        {
                            "command": "repl_open", 
                            "caption": "Haskell",
                            "id": "repl_haskell",
                            "mnemonic": "h",
                            "args":
                            {
                                "type": "sublime_haskell",
                                "encoding": "utf8",
                                "cmd": ["stack", "exec", "ghci"],
                                "cwd": "$file_path",
                                "external_id": "haskell",
                                "syntax": "Packages/Haskell/Haskell.tmLanguage"
                            }
                        },
                        {
                            "command": "repl_open", 
                            "caption": "Haskell - project",
                            "id": "repl_haskell",
                            "mnemonic": "h",
                            "args":
                            {
                                "type": "sublime_haskell",
                                "encoding": "utf8",
                                "cmd": ["stack", "ghci"],
                                "cwd": "$file_path",
                                "external_id": "haskell",
                                "syntax": "Packages/Haskell/Haskell.tmLanguage"
                            }
                        }
                    ]
                }]
            }]
        }
    ]

設定ファイルをこの内容で上書きすれば、メニューで`haskell`と`haskell - project`が選べるようになります。前者では`stack exec ghci`が、後者では`stack ghci`が呼ばれます。

ちなみに[FluentREPL](https://github.com/zaneli/FluentREPL)というプラグインは、選択中のモジュールが保存されるたびにインタプリタにそれをロードし直させる機能をSublimeREPLに追加します。非常に便利です。
技術英語 > Key features / Key benefits

リニア・レギュレータのProductsのページ

http://ams.com/eng/Products/Power-Management/LDOs/AS1376

> Key Feasures
- Less internal voltage losses and minimized self-heating.
- ...

> Key Benefits
- Ultra-low dropout voltage: < 120mV @ 1A load
- ...

<hr>
http://ejje.weblio.jp/content/key+feature

>《英》キーフィーチャー((パッケージ商品（packageed product）について商品の特徴を簡明に記した説明文書．当該商品の販売・勧誘時に交付が義務付けられている))

<hr>
http://ejje.weblio.jp/content/main+feature

> おもな特徴

Main featureよりはKey featureの方が製品説明に適切なのだろうか。
Error: Not a HASH reference at /usr/share/perl5/PVE/RESTHandler.pm line 568. (500)対応

* proxmox 4.0 betaにて apt-get upgrade、再起動したところ発生。
* Network箇所が空白
  * ネットワークの疎通は取れる。IPも付与されている。

![mox.png](https://qiita-image-store.s3.amazonaws.com/0/25728/d9268d28-5d59-4bbb-cf86-f0478309503f.png)

## 確認

* [[SOLVED] PVE4: no network bridges/interfaces in network (Not a HASH reference?)](http://forum.proxmox.com/threads/23104-PVE4-no-network-bridges-interfaces-in-network-%28Not-a-HASH-reference-%29)

pve-managerを更新する必要がある様子。

```diff:
 # apt-get upgrade
 Reading package lists... Done
 Building dependency tree       
 Reading state information... Done
 Calculating upgrade... Done
+The following packages have been kept back:
+  proxmox-ve pve-manager
 0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
```

* [apt - "The following packages have been kept back:" Why and how do I solve it? - Ask Ubuntu](http://askubuntu.com/questions/601/the-following-packages-have-been-kept-back-why-and-how-do-i-solve-it)

## 対処

```bash:
apt-get install -y pve-manager proxmox-ve
reboot
```

* Network箇所が復活した。

![cc.png](https://qiita-image-store.s3.amazonaws.com/0/25728/a86421b6-2e78-42f1-84c2-96720239371c.png)

合わせてkernel `3.19.8-1-pve` から `4.1.3-1-pve`に更新された。
Safari がサポートしている Audio と Video フォーマットを確認する


Safari がサポートしている Audio と Video フォーマットを確認する方法について説明します。

WebKit のコードを追っかけると...

- [MediaPlayer::getSupportedTypes](https://github.com/WebKit/webkit/blob/8989f93c3007579a295bf4593ec06575cc0c393a/Source/WebCore/platform/graphics/MediaPlayer.cpp#L833)
  - [installedMediaEngines](https://github.com/WebKit/webkit/blob/8989f93c3007579a295bf4593ec06575cc0c393a/Source/WebCore/platform/graphics/MediaPlayer.cpp#L204)
    - [buildMediaEnginesVector](https://github.com/WebKit/webkit/blob/8989f93c3007579a295bf4593ec06575cc0c393a/Source/WebCore/platform/graphics/MediaPlayer.cpp#L177)
      - [MediaPlayerPrivateAVFoundationObjC::registerMediaEngine](https://github.com/WebKit/webkit/blob/8989f93c3007579a295bf4593ec06575cc0c393a/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm#L449)
        - [getSupportedTypes](
https://github.com/WebKit/webkit/blob/8989f93c3007579a295bf4593ec06575cc0c393a/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm#L1588)
          - [avfMIMETypes](https://github.com/WebKit/webkit/blob/8989f93c3007579a295bf4593ec06575cc0c393a/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm#L1550)

と来て、最終的に [AVURLAsset audiovisualMIMETypes](https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVURLAsset_Class/index.html#//apple_ref/occ/clm/AVURLAsset/audiovisualMIMETypes) に辿り着きます。

AVURLAsset::audiovisualMIMETypes を OS X 10.9.5 で実行した結果がこちらになります。

```swift
import UIKit
import AVFoundation

var mimeTypes = AVURLAsset.audiovisualMIMETypes()

for mime in mimeTypes {
    println(mime)
}
```

```
audio/aacp
video/3gpp2
audio/mpeg3
audio/mp3
audio/x-caf
audio/mpeg
video/quicktime
audio/x-mpeg3
video/mp4
audio/wav
video/avi
audio/scpls
audio/mp4
audio/x-mpg
video/x-m4v
audio/x-wav
audio/x-aiff
application/vnd.apple.mpegurl
video/3gpp
text/vtt
audio/x-mpeg
audio/wave
audio/x-m4r
audio/x-mp3
audio/AMR
audio/aiff
audio/3gpp2
audio/aac
audio/mpg
audio/mpegurl
audio/x-m4b
application/mp4
audio/x-m4p
audio/x-scpls
audio/x-mpegurl
audio/x-aac
audio/3gpp
audio/basic
audio/x-m4a
application/x-mpegurl
```

![](https://gyazo.com/a607b129927a8781957e072d3a64f4dd.png)


特殊な MIME TYPE `application/vnd.apple.mpegurl` や `application/x-mpegurl` は HLS 用です。詳しくは [Apple の HLS の資料](https://developer.apple.com/jp/documentation/StreamingMediaGuide.pdf)に詳しく記載があります。
nginx、50x系のレスポンス用のhtmlはあるけど403,4系のやつってどこから返してるの

という些細な疑問。適当にどっかから撮ってきてるのかと思って探したら案外無くてムキになって探してしまった。↓みたいなやつのことです。

![image](https://i.gyazo.com/367ec6562c8fc9cca17eae90f9d0e24a.png)

A: nginx/src/http/ngx_http_special_response.c内でハードコーディングされてた。

```ngx_http_special_response.c
static char ngx_http_error_403_page[] =
"<html>" CRLF
"<head><title>403 Forbidden</title></head>" CRLF
"<body bgcolor=\"white\">" CRLF
"<center><h1>403 Forbidden</h1></center>" CRLF
;


static char ngx_http_error_404_page[] =
"<html>" CRLF
"<head><title>404 Not Found</title></head>" CRLF
"<body bgcolor=\"white\">" CRLF
"<center><h1>404 Not Found</h1></center>" CRLF
;
```

https://github.com/nginx/nginx/blob/release-1.9.4/src/http/ngx_http_special_response.c#L109-L122

こういうのが`ngx_http_send_special_response`とかいう関数で呼ばれてるらしい（C-fで流し読んだ並感）とりあえず出処がわかってなるほど、と落ち着いたが案外こういう疑問の掘り下げでソースコード・リーディング進めたほうがいいのかもなあと少し。漫然に読むって言ってもダレること多いしね。
オブジェクトのインスタンスメソッドを調べる

## RubyのことはRubyに聞け
```ruby:
class Object
  def tell_me_methods
    self.class.instance_methods(false).map{|m|
      res = begin
        send(m)
      rescue=>e
        e.message
      end

      [ m, res ]
    }.sort_by{|k,v| v.class.to_s }.to_h
  end
end

1.tell_me_methods
```

```ruby:

{:even?=>false,
 :zero?=>false,
 :size=>8,
 :succ=>2,
 :bit_length=>1,
 :-@=>-1,
 :magnitude=>1,
 :~=>-2,
 :abs=>1,
 :to_f=>1.0,
 :>=>"wrong number of arguments (0 for 1)",
 :fdiv=>"wrong number of arguments (0 for 1)",
 :**=>"wrong number of arguments (0 for 1)",
 :modulo=>"wrong number of arguments (0 for 1)",
 :%=>"wrong number of arguments (0 for 1)",
 :===>"wrong number of arguments (0 for 1)",
 :====>"wrong number of arguments (0 for 1)",
 :<=>=>"wrong number of arguments (0 for 1)",
 :divmod=>"wrong number of arguments (0 for 1)",
 :>==>"wrong number of arguments (0 for 1)",
 :<=>"wrong number of arguments (0 for 1)",
 :<==>"wrong number of arguments (0 for 1)",
 :div=>"wrong number of arguments (0 for 1)",
 :inspect=>"1",
 :|=>"wrong number of arguments (0 for 1)",
 :^=>"wrong number of arguments (0 for 1)",
 :[]=>"wrong number of arguments (0 for 1)",
 :<<=>"wrong number of arguments (0 for 1)",
 :>>=>"wrong number of arguments (0 for 1)",
 :/=>"wrong number of arguments (0 for 1)",
 :*=>"wrong number of arguments (0 for 1)",
 :-=>"wrong number of arguments (0 for 1)",
 :+=>"wrong number of arguments (0 for 1)",
 :to_s=>"1",
 :&=>"wrong number of arguments (0 for 1)",
 :odd?=>true}
```

`wrong number of arguments`は自分で叩くしかない（汗