OmniAICreator/Qiita-1.07M huggingface dataset:
IPythonでクリクリできる図を作ろう


IPythonでクリクリできる図を作る方法を紹介します。一番簡単なのはインタラクティブなUIを自動的に作成する`interact`関数 (`IPython.html.widgets.interact`) を使う方法です。

* 注１）この記事よりもう少し詳しい説明は[Interactの使い方](http://nbviewer.ipython.org/gist/tanemaki/de772cdbea35db2d9a23#)としてnbviewerにまとめておきましたので、興味のある方はそちらもどうぞ。

* 注２）[この記事のIPython Notebook](http://nbviewer.ipython.org/gist/tanemaki/904ffaa754c0e3481741)はそのままnbviewerからダウンロードできます。インタラクティブな描画を手軽に試したい方はどうぞ。

最初に必要となるモジュールを読み込みます。

```python
from __future__ import print_function
from IPython.html.widgets import interact, interactive, fixed
from IPython.html import widgets
```

その上で、まずはインタラクティブに操作したい関数を定義します。

```python
def f(x):
    print(x)
```

次に、`interact`関数の第一引数に操作したい関数を渡し、キーワード引数としてそれっぽい引数（widget abbreviation）を渡します。たったこれだけです。下のコードを実行するとスライダーが現れ、クリクリできて楽しいです。

```python
interact(f, x=(-10, 10, 2));
```

![InteractivePlot01.png](https://qiita-image-store.s3.amazonaws.com/0/16310/7aa4b373-10c2-ab3d-099e-a93a5b8e3dbc.png "InteractivePlot01.png")


んで、上と下はまったく同義。上がwidget abbreviationを渡す方法で、下がwidgetのインスタンスを渡す方法です。

```python
interact(f, x=widgets.IntSliderWidget(min=-10, max=10, step=2, value=0));
```

![InteractivePlot01.png](https://qiita-image-store.s3.amazonaws.com/0/16310/7aa4b373-10c2-ab3d-099e-a93a5b8e3dbc.png "InteractivePlot01.png")

初期値を設定したい場合は`interact`をデコレータとして使います。

```python
@interact(x=(-10, 10, 2))
def g(x=8):
    print(x)
```

![InteractivePlot02.png](https://qiita-image-store.s3.amazonaws.com/0/16310/79ba6bb9-f098-7f1a-33db-e1385eeba900.png "InteractivePlot02.png")


代表的なウィジェットには以下のようなものがあります。`interact`関数のキーワード引数に渡すのは、左側のそれっぽい引数（widget abbreviation）か、右側のwidgetのインスタンスのどちらかです。

| キーワード引数 | ウィジェット |
|:-- |:--|
| `True` or `False` | `CheckboxWidget` |
| `u'こんにちは世界！'` | `TextareaWidget` |
| 整数を用いた `value` or `(min,max)` or `(min,max,step)` | 	 `IntSliderWidget` |
| 実数を用いた `value` or `(min,max)` or `(min,max,step)` |	 `FloatSliderWidget` |
| `('orange','apple')` or `{'one':1,'two':2}`|	`DropdownWidget` |


描画と合わせると、さらにクリクリするのが楽しくなります。以下の図は $y = A\,sin(\omega x + \alpha)$ をダイナミックに描画するデモです。$A \in [0.1, 4.0], \omega \in [0.1, 4.0], \alpha \in [-\pi, \pi]$という３つのパラメータをスライダーで変化させると、それにあわせて図が変化します。こりゃ楽しい！

```python
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
```

```python
@interact(amp=(0.1, 4.0, 0.1), omega=(0.1, 4.0, 0.1), phase=(-np.pi, np.pi, 0.1), 
          fn = {'sin': np.sin, 'cos': np.cos, 'tan': np.tan})
def h(amp=1.0, omega=1.0, phase=0.0, fn=np.sin):
    domain=[-np.pi, np.pi]
    x = np.linspace(domain[0], domain[1], 100)
    y  = amp * fn(omega * x + phase)
    plt.plot(x, y)
    plt.plot(-phase/omega, 0, 'or')
    plt.xlim(domain)
    plt.ylim([-4, 4])
```

![InteractivePlot.png](https://qiita-image-store.s3.amazonaws.com/0/16310/e2a7fbe6-37b1-055f-2e84-a973c5a4933d.png "InteractivePlot.png")
middleman+bowerでfontsが読み込まれないやつ


# （◞‸◟）

bowerでinstallしたpackageをsprocketsでrequireしてたんだけどfontsが読み込まれない〜っていうお約束っぽいやつでハマった。

ググってちょいちょい出てくる「bower_componentsをsprockets.append_pathしてね」みたいなのもやってみたけど解決しなかった。

# 原因

* /stylesheets/all.cssでsprocketsのrequire使ってたけど読み込まれてるのはcssだけだった
* fontsは自力でimport_assetする必要があった

# 解決

fontsファイルをimport_assetしてビルド成果物に追加した

# 例

今回は`bower install ratchet`でratchetの組み込みを試した。


```ディレクトリ構成
.
├── Gemfile
├── Gemfile.lock
├── bower.json
├── config.rb
└── source
    ├── images
    │   ├── background.png
    │   └── middleman.png
    ├── index.html.erb
    ├── javascripts
    │   └── all.js
    ├── layouts
    │   └── layout.erb
    └── stylesheets
        ├── all.css
        └── normalize.css
```

```all.css
/**
 *= require ratchet
 */
```

```config.rb
...

# config.rbのどっか適当なとこに
after_configuration do
  # bower_componentsのディレクトリパスをsprocketsの参照パスに追加
  sprockets.append_path File.join(root, "bower_components")
end

...
```


これだとcssは当たるけど、fontsファイルがないのでicon画像とかが上手く表示されない。
append_pathは飽くまでsprocketsのrequire構文で参照出来るファイルのパスを追加するだけっぽい。

ファイル実体をbuild成果物に含めたい場合は`sprockets.import_asset`を使う必要があるっぽい。

```config.rb
after_configuration do
  bower_dir = "bower_components" #.bowerrcでインストール先変更してる人は適宜読み換えて下さい

  sprockets.append_path File.join(root, bower_dir)

  # bower_components内のfontsディレクトリにあるファイルを捜査
  Dir.glob(File.join("#{root}", bower_dir, "*", "fonts", "*")) do |file|
    asset_path = Pathname.new(file).relative_path_from(Pathname.new(File.join(root, bower_dir)))

    # import_assetの引数はsprockets.append_pathしたpathに対する相対パスなので注意
    sprockets.import_asset asset_path do |path|
      org_path = Pathname.new(path)
      # そのままだと"ratchet/fonts/*"にファイルが出力されてしまい、
      # cssとの相対パスがずれるので出力先pathを"fonts/*"に変更
      "fonts/#{org_path.basename}"
    end
  end
end
```

これで`build/fonts/*`にfontsファイルが出力されるようになり、無事アイコンが表示されるようになった。
(画像ファイルが読み込まれない場合も多分同じ原因なので適宜globを書き換えたら直るはず)

append_path使わずcssもjsも全部import_assetで`lib/ratchet/*`とかに吐いてstylesheet_link_tag等で読み込んだ方がスッキリする気がする。
Railsを学習する人のためにサンプルアプリを作りました、テストコード付き(rspec, capybara, turnip)。

## 記事作成中...

とりあえずソースはひと通りできたけど記事はまだ作成中。

## はじめに

### 概要

見た映画や動画のレビューを投稿できるサービス。

今回はテストコードまで作成しています(rspec, capybara, turnip, factory_girl)。

### リンク

github:
https://github.com/yoshioota/dogalog

heroku:
https://dogalog.herokuapp.com/
【UniRx】ObserveEveryValueChangedでフレーム間での値の変動を監視する

**UniRxについての記事のまとめは[こちら](http://qiita.com/toRisouP/items/48b9fa25df64d3c6a392)**

---
先日投稿した「[未来のプログラミング技術をUnityで -UniRx-](http://www.slideshare.net/torisoup/unity-unirx)」において、値の変動を監視をUniRxで行う方法を紹介しました。
ですが、[UniRxの3/22の更新分](https://github.com/neuecc/UniRx/commit/3a60365eae48f216d91fae397315038c0194dea7)で「ObserveEveryValueChanged」という機能が修正され、値の変動の監視がとても簡単にできるようになったので使い方を紹介したいと思います。

#ObserveEveryValueChanged()

ObserveEveryValueChangedは全クラスに対する拡張メソッドとして定義されており、以下の様な特徴があります。

* 任意のクラスオブジェクトに対して使用できる（~~ただしUnityEngine.Object以外に適用するのは安全ではない~~）
* 対象のインスタンスオブジェクトのプロパティ値(プロパティに限らずに値を返すものなら何でも)が前フレームと比較して変化していた際にその値をOnNextに流す
* **1フレーム内で発生した複数回の変動は検知できず、前フレームと今フレームの変化のみ検知できる**
* メッセージが流れるタイミングは厳密にはUpdate()ではなくコルーチンの実行タイミングとなる([参考](http://docs.unity3d.com/Manual/ExecutionOrder.html))
* 対象がUnityEngine.Objectの派生オブジェクトだった場合、Destroy時にOnCompletedが飛ぶ
* MonoBehaviour以外の場所でも使用することができる

##使用例)CharacterController.isGroundedを監視する
####ObserveEveryValueChangedを使った例
```csharp
//キャラクタが着地した瞬間の検知
characterController
    .ObserveEveryValueChanged(x => x.isGrounded)
    .Where(x => x)
    .Subscribe(_ => Debug.Log("OnGrounded!"));
```

#####比較)ObserveEveryValueChangedを使わない例（ObservableMonoBehaviourを継承している場合）
```csharp
UpdateAsObservable()
    .Select(_ => characterController.isGrounded)
    .DistinctUntilChanged()
    .Where(x => x)
    .Subscribe(_ => Debug.Log("OnGrounded!"));
```

UpdateAsObservable().Select(_ => characterController.isGrounded).DistinctUntilChanged()　の部分がなくなり、スッキリ書くことができました。

#まとめ
ObserveEveryValueChanged()を使うことで「毎フレーム値の変動を監視して何かしたい」といったことがより簡潔に記述できるようになりました。
ただし、~~UnityEngine.Object以外のclassオブジェクトに対してObserveEveryValueChangedを使用すると手動でオブジェクト破棄時にSubscribeのDisposeを行う必要が出てくるので注意が必要です。~~
（追記：3/23に修正されてPOCOなインスタンスオブジェクトについても破棄時に勝手にOnCompletedが飛ぶようになったようです！）
【AndroidStudio】EclipseユーザーもストレスフリーなAndroid Studio生活！～設定編～

Eclipseを使用していたのですが、Android Studioを使うことにしました。
Android Studioで最初によく設定するだろうことをまとめました。

###IDEの基本テーマを変更する
File > Settings > Appearance
Themeのタブで変更可能(白とか黒にできる)

###行番号表示
File > Settings > Editor > Appearance
「Show line numbers」にチェックを入れる

###スペースの表示
File > Settings > Editor > Appearance
「Show whitespaces」にチェックを入れる

###フォント
File > Settings > Colors & Font
Font　Scheme name の 「Save as...」 ボタンをクリックしオリジナルの Scheme を作る
Font

* Primary font:プルダウンでフォントを選べる
* Size:フォントサイズ
* Line spacing:行間

###Javaの文字色の変更
File > Settings > Colors & Font
それぞれの項目でinherit attributesのチェックをはずすと変更できるようになる

###Logcatをみやすくする
File > Settings > Editor  > Colors & Font
Android Logcat　
Foreground にチェックを入れるとフォント色を変更できる
Backgroundで背景色も変更可能

###ショートカットキーの変更
File > Settings > Keymap

* keymaps：ショートカットキーのタイプを選択できる(Eclipse形式もある)

ショートカットキー一覧をみることができる
ショートカットキーをダブルクリックで編集可能

###開いているファイルのタブ色を変更する
File > Settings > File Colors
ファイルの種類ごとにタブの色を選択可能
プロジェクト内のファイル、プロジェクト外のファイル、テストファイル、変更したファイル・・・

###プロキシ
File > Settings > HTTP Proxy
Manual proxy configurationでプロキシを設定
Check connectionで適当なアドレス(googleとかyahooとか)をいれて疎通確認できる

### マウスオーバーでドキュメントを表示する
File > Settings > Editor > Other
「Show quick doc on mouse move 」にチェックを入れる
関数の引数の型定義 in python

pythonで型を定義したいときがあったので、とりあえず関数のデコレータ書きました
cython使えばいいと言われたら元も子もありませんが・・・

```lang:type_definiton.py
from inspect import getargspec, getcallargs


def type_definition(*types):
    def type_checker(func):
        argspec = getargspec(func)

        arg_length = len(argspec.args)

        kwargs_index = -1 if argspec.keywords else 0
        vargs_index = -1 + kwargs_index if argspec.varargs else 0

        arg_type = zip(argspec.args, types[:arg_length])
        vargs_type = types[vargs_index] if vargs_index else None
        kwargs_type = types[kwargs_index] if kwargs_index else None

        def new_func(*args, **kwargs):
            argdetail = getcallargs(func, *args, **kwargs)

            # check type of args
            for name, _type in arg_type:
                if name in argdetail:
                    if not type(argdetail[name]) == _type:
                        raise ValueError(
                           "Invalid Type: " + name + " is not " + str(_type)
                            )

            if vargs_type:
                for value in argdetail[argspec.varargs]:
                    if not type(value) == vargs_type:
                        raise ValueError(
                           "Invalid Type: " + argspec.varargs \
                             + " is not " + str(vargs_type)
                           )

            if kwargs_type:
                for value in argdetail[argspec.keywords].values():
                    if not type(value) == kwargs_type:
                        raise ValueError(
                           "Invalid Type: " + argspec.keywords \
                             + " is not " + str(kwargs_type)
                           )

            # do func
            return func(*args, **kwargs)

        return new_func
    return type_checker
```

使用例書いておきます

```lang:example.py
@type_definition(int, int, str)
def foo(a, b, c=0):
    return a + b + int(c)

foo(1, 1)
# -> 2
foo(1, 1, 1)
# ValueError: Invalid Type: c is not <type 'str'>
foo(1, 1, "1")
# -> 3
擬人化オブジェクト指向 - 第2話「名前」

![](http://lorempixel.com/640/396/business/?1)
フレームワーク「協力して仕事しましょう」
八百屋「はい」
肉屋「はい」
弁当屋「はい」

----
![](http://lorempixel.com/640/396/food/?2)
フレームワーク「100人分の昼食が必要です。弁当屋さんお願いします」
弁当屋「はい。では八百屋さんは野菜を、肉屋さんは肉を用意してください」
八百屋「はい」
肉屋「はい」

----
![](http://lorempixel.com/640/396/business/?3)
フレームワーク「協力して仕事しましょう」
田中「はい」
吉田「はい」
江川「はい」

----
![](http://lorempixel.com/640/396/people/?4)
フレームワーク「100人分の昼食が必要です。江川さんお願いします」
江川「はい。では田中さんは野菜を、吉田さんは肉を用意してください」
田中さん「はい」
吉田さん「私は歯医者です」

----

→ [擬人化オブジェクト指向 - 第3話「継承と委譲」 - Qiita](http://qiita.com/progre/items/6d0ec8f634322e64c899)
特定のファイルのみベーシック認証をかけたい場合の.htaccess

特定ファイルのみベーシック認証をかけたい場合。

```php
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
AuthUserFile /home/hoge/html/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
order deny,allow
<Files test.html>
require valid-user
</Files>

```
参考にディレクトリ単位のものも。
後半のFilesがいりません。

```php
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
AuthUserFile /home/hoge/html/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
order deny,allow
require valid-user
Yeomanを使うならまずはじめに覚えておきたいコマンド1選


```
$ yo doctor
```

以上。
これでしあわせにYeomanと付き合っていけるはずだ。 

## 重要だと思うようになったキッカケ
確かあれはMBAをクリーンインストールしたときのこと。Yeomanをいつも通りインストールした。generatorもインストールした。
そして ``` $yo angular-fullstack ``` と入力した。
割といつも通りの対話形式のインストールの画面で事件が発生した。    
**Enter以外のキーボード操作が効かない**  
つまり  
**なぜかEnterだけ効くから環境選択が1択**  
なんだこれ？って感じ。それでその場でいろいろ聞いたりしたけど解決はせず。
ちなみに、そのときはNodebrew使ってるからじゃない？って、危うくNodebrewのせいにされそうになった。バージョン管理ツールに罪はない。

困ったのでGitHubのページ[yeoman/yo](https://github.com/yeoman/yo)を見たらあるじゃない。  

```
$ yo doctor
```  

エラー出てました。再インストールしました。問題なく動作しました。  

ちなみに最近また別の人にも似たようなエラーが出て、Doctorコマンド教えたらインストールの段階でミスってるっぽいことに気付けすぐに解決しました。

## 総括的な
+ Doctorコマンドは便利。Homebrewしかり。
+ バージョン管理ツールのせいかもって思ったらだいたいそうじゃない。
+ インストールでコケてもYeomanをキライにならないでください。

![Kobito.BdlC1b.png](https://qiita-image-store.s3.amazonaws.com/0/58800/af6d1316-0e07-509b-1ff2-081e5db8b006.png "Kobito.BdlC1b.png")


いじょ。
注文検索API　データ取得と403Forbidden

お世話になります。

現在yahooショッピングAPIを使った開発をしております。
注文に関連するAPIの申請をし3月の頭に証明書の発行がすんでおります。

ストア運営をサポートするAPIでYahooID連携を使用するAPIへの接続
は問題なくできるのですが注文に関連する「注文検索API」に認証書によるリクエスト方法事例を
参考に以下のようなソースにて接続をしましたところ
404 Forbiddenのページに「You don't have permission to access this URL on this server.」
と表示されています。
証明書のパスに間違いはなく、このままソースを修正し注文に関するAPI以外のストア運営をサポートするAPIは
問題なくデータを取得できます。問題なく注文に関するAPIのデータ取得をするにはどのように
したらよろしいでしょうか？

![404.jpg](https://qiita-image-store.s3.amazonaws.com/0/55479/e8f52aaa-9cd5-de81-7637-803144a9a0b5.jpeg)

```
<?PHP
$key = './XXXXXXXX.key';
$crt = './SHP-XXXXXXXX.crt';
session_start();
$access_token = $_SESSION['access_token'];

$conn = curl_init();


$url = 'https://circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderCount?sellerId=xxxxxxxx';
curl_setopt($conn, CURLOPT_URL, $url);

curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($conn, CURLOPT_SSLCERT, $crt);
curl_setopt($conn, CURLOPT_SSLKEY, $key);
curl_setopt($conn, CURLOPT_HTTPHEADER,
	array(
	 'Authorization: Bearer ' . $access_token
		)
);
$response = curl_exec($conn);
var_dump($response);
curl_close($conn);
?>
HHVMをビルドする手順

HHVMをビルドするのにどんな準備が必要なのか紹介します。

# ビルドが簡単だとわかっているLinux環境を用意する

HHVMは依存するライブラリが多く、ハマるとなかなか大変なので確実にビルドできる環境を準備した方が結果的に楽だと思います。

その意味で、「[Building and Installing HHVM · facebook/hhvm Wiki](https://github.com/facebook/hhvm/wiki/Building-and-Installing-HHVM)」のリストはあてになりません。このページにMacOSXでのビルド手順が書いてあるんですが、僕は見事に挫折しました。

ですから、あてになるのは口コミ情報くらいでしょう。僕が言えるのは、少なくともUbuntu 14.04 LTSなら簡単だったよ、ということです。

# 必要なもの

* 64bit CPUを持ったPC
* 64bit Linux（MacOSXは茨の道だと思うので、VM上に環境構築した方がいいと思います）
* メモリ：1GB以上
* HDD：空き容量4GB以上
* コンパイル時間：15分から3時間ほど

# 実際のビルド例

6年前のハイエンドPCです。最近のデスクトップ機ならもう少し速くビルドできるでしょう。

* Core i7-920(2.66GHz、4コア8スレッド）
* Ubuntu 14.04 LTS (64bit)
* メモリ：6GB
* HDD：3TB（7200rpm、SATA 3Gbps接続）
* コンパイル時間：25分（make -j8）

ちなみにVM環境だとビルド時間が長くなる傾向があります。MacBookAir(13インチ、Mid 2012)のVirtualBox上のUbuntu環境でビルドしたときは3時間ほどかかりました。

# Ubuntu 14.04 LTS上での手順

「[Building and installing HHVM on Ubuntu 14.04 · facebook/hhvm Wiki](https://github.com/facebook/hhvm/wiki/Building-and-installing-HHVM-on-Ubuntu-14.04)」に従ってビルドしてください。

ただ、現時点で最新のmasterをビルドする際、以下の1パッケージを追加インストールしないとcmakeで怒られました。

```
$ sudo apt-get install mysql-server-5.6
```
ReactiveCocoa (RAC3.0) by Swift


## はじめに
最近流行りのリアクティブプログラミング。`ReactKit` や`Bond`などある中、ようやく老舗である`ReactiveCocoa`の仕様が固まりそうです。まだmasterリポジトリにはマージされていませんが、ひっそりと[プレリリース](https://github.com/ReactiveCocoa/ReactiveCocoa/releases)されています。  

## 試すには
Carthageからインストールするのが簡単でオススメです。ただし、Swift1.2対応のため`xcode-select`により使用する`xcodebuild`を変更してやる必要があります。  
参考) [CarthageでSwift 1.2に対応したライブラリをビルド](http://blog.ishkawa.org/2015/03/06/1425625466/)  

また、試すのであれば`swift-development`ブランチが最新であり良いと思います。`Cartfile`に`github "ReactiveCocoa/ReactiveCocoa" "swift-development"`のように書き、`carthage update`でOK。Mac用が必要なければ別途`--platform iOS`も追記してください。

## Signal/Producer
簡単な例として、「UITextFieldに文字が入力されていたらボタンを有効にする」というのをRAC3.0使って書いてみます。  

```Swift:ViewController.swift

@IBOutlet weak var textField: UITextField!
@IBOutlet weak var button: UIButton!
    
lazy var dynamicProperty: DynamicProperty! = DynamicProperty(object: self.button, keyPath: "enabled")

override func viewDidLoad() {
    super.viewDidLoad()
    
    dynamicProperty <~ textField.rac_textSignal().toSignalProducer()
        |> catch{ error in
            return SignalProducer<AnyObject?, NoError>(value: "")
        }
        |> map{ value in
            let str = value as! NSString
            let can: Bool = str.length > 0
            return can as AnyObject?
        }
}
```

見ての通り、若干コード量が多く回りくどい印象があります。  
[ReactiveCocoa を Swift から使ってみた(2) KVO編](http://akisute.com/2015/01/reactivecocoa-swift-2-kvo.html)でおっしゃっているように、`rac_valuesForKeyPath()`を使う事でKVOできるようになります。それを実現するため提供されているのが`DynamicProperty`と`<~`です。`<~`は左辺に変更したいオブジェクトを配置し、右辺に変更起因となるシグナルを配置します。この例では右辺に`SignalProducer<T, NSError>`を配置しています。つまり、`SignalProducer<T, NSError>`からシグナルが発動するとそれが`DynamicProperty (object.keyPath)`に変更を加えるという流れです。  
ちなみに`SignalProducer`は`RACSignal (cold signal)`に相当し、`Signal`が`RACSignal (hot signal)`に相当します。  

また、気づいた方いらっしゃるかもしれませんが、ここでは`rac_textSignal()`を使っています。これはobjective-Cで実装された`RACSignal`を返す関数です。つまり、UIKitとやりとりを行う場合には`RACSignal`を介す必要があります。

## 修正
###### ●2015/3/22  
コード中に`catch`を追加しました。`NSError`を`NoError`にキャストすると同時にシグナルのエラーをキャッチしてます。(`catch`を挟まないとバインディングできないのも不思議な感じですが)  
###### ●2015/3/23  
[ikesyoさん](http://qiita.com/ikesyo)指摘の通り、`catch`部修正しました


## 最後に
最初にも書きましたが、まだプレリリースです。仕様は変わるかもしれません。ご注意ください。
月額サーバーで最初の月の日割り計算の例

SoftLayerでは、月額課金のサーバーが存在します。
月の途中でオーダーした場合、次のアニバーサリービリングデート(ABD)までの日数分が日割り計算で初回の利用料金となります。課金についての詳細は下記を参照ください。
http://www.slideshare.net/kkitase/softlayer-basic-billing

月額サーバーで、最初の月が日割りになっている具体例は以下のようになります。

・2015年2月5日に月額サーバーを1台オーダーしました。
・そのサーバーの2月利用分の請求書は下記のように計算されます。
・2月は28日間あり、そのうち2/5～2/28までの24日間稼動していた事になります。
・CPUは月額\$60のところ、\$60×24/28≒51.43
・サーチャージやOSライセンスも日割り計算となっています。
　- サーチャージはシンガポールで\$20のところ、\$20×24/28≒17.14
　- RHELライセンスは\$45×24/28≒38.57

![Billing01.png](https://qiita-image-store.s3.amazonaws.com/0/59627/55b74710-6fc2-4e69-83bc-545b139e063e.png)
![Billing02.png](https://qiita-image-store.s3.amazonaws.com/0/59627/9a938911-13e2-ce75-729f-de7defaceb65.png)

3月以降は、通常の1ヶ月分の料金となります。
Android縦画面固定

Androidで縦画面固定にする場合は、下記いずれかの方法で可能です。
　１）AndroidManifest.xmlで
　２）Activityで
ただし、いずれの場合も全画面において個別に設定する必要があります。

## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg) １）AndroidManifest.xmlで行う場合


Activityに下記の属性を追加

```xml:AndroidManifest.xml
<!-- activityに追記 -->
android:screenOrientation="portrait"
```

> 横画面は以下を指定
`"landscape"`


## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg) ２）Activityで行う場合

```java:xxxActivity.java
// onCreate()とかで
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
```

> 横画面は以下を指定
`ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE`


(･o･ゞ いじょー。
PlayFrameworkでプロジェクトを分割する

はじめまして。Qiita初投稿の t_hirohata です。
よろしくお願いいたします。

弊社ではScalaで開発しており、最近ではDDDで設計しようという動きになっています。
新しくプロジェクトを作る際DDDの各レイヤ毎にプロジェクトを分割したので、その方法をご紹介させていただきます。

# 方針

今回作成するプロジェクトはレイヤードアーキテクチャで設計したため、以下の様な構造に分割します。

```
projectRoot
  ├─ application
  ├─ domain
  └─ infrastructure
```

また、

- アプリケーション層はPlayアプリケーションでいいけど、ドメイン層・インフラストラクチャ層はPlayに依存させたくない・・
- 上層から下層は呼び出せるけど、下層から上層は呼び出せないようにしたい・・

としたかったため、以下の方法で実現しました。

# プロジェクト分割

```scala:build.sbt
// このプロジェクトはapplication、domain、infrastructureの集合である
lazy val root = (
  project in file(".")
).aggregate(
  application,
  domain,
  infrastructure
)

// アプリケーション層
// アプリケーション層はドメイン層・インフラ層に依存し、Playアプリケーションである
lazy val application = Project(
  id = "application",
  base = file("application")
).dependsOn(
  domain,
  infrastructure
).enablePlugins(
  PlayScala
)

// ドメイン層
// ドメイン層はインフラ層に依存
lazy val domain = Project(
  id = "domain",
  base = file("domain")
).dependsOn(
  infrastructure
).settings(
  scalaSource in Compile := baseDirectory.value / "src" / "main" / "scala",
  scalaSource in Test := baseDirectory.value / "src" / "test" / "scala"
)

// インフラ層
lazy val infrastructure = Project(
  id = "infrastructure",
  base = file("infrastructure")
).settings(
  scalaSource in Compile := baseDirectory.value / "src" / "main" / "scala",
  scalaSource in Test := baseDirectory.value / "src" / "test" / "scala"
)
```

これでビルドしてみると以下の様な構造になります。（もともとあったものを除く）

```
projectRoot
  ├─ application
  │     ├─ app/
  │     ├─ conf/
  │     ├─ public/
  │     └─ target/
  ├─ domain
  │     ├─ src/
  │     └─ target/
  ├─ infrastructure
  │     ├─ src/
  │     └─ target/
  ├─ project/
  ├─ target/
  ├─ activator
  └─ build.sbt
```

これで今回作成したかったものを実現できました。

実行方法は以下の通りです。

```bash
$ ./activator "project application" run # ./activator "application/run" でも可
```

上記は、下記と同じです。

```bash
$ ./activator
[projectRoot] project application
[application] run
```

# UI層について

あれ？UI層が分離できていないじゃん。と思う方もいらっしゃるかもしれません。
今回作成したもののアプリケーション層はPlayアプリケーションとなっており、ControllerとViewが分かれていますので、それで妥協しております。
妥協せずにやるのでしたら、アプリケーション層はただJSONを返すだけのRESTfulなAPIサーバとして実装し、UI層をPlayのViewではなく別で実装する方法が良いと思います。
そうすることによって、Android、iOS、WebなどのUIを別々に作ることができ、ドメインを使いまわせることになります。

# 最後に

長々と書いてしまいましたが、Playでプロジェクトの分割、ついでに依存関係の強制の方法についてご紹介させていただきました。
まだまだペーペーのエンジニアなので至らぬ点があるかもしれません。
ご意見・ご指摘等ございましたら、お気軽にコメントお願い致します。
PEヘッダの静的解析

PEヘッダを書き換える必要があって、初めてPEを静的に読みました。
LoadLibraryなんかで読み込んだPEヘッダをたぐるのと勝手が全然違ったのでメモメモします。

RVAを作成するときにセクションのVirtualAddressやデータディレクトリのVirtualAddressを足したり引いたりするところは数字が合うようにPEviewを見ながら書いたので何でこうなるのかさっぱり分かりません。どこかに資料が落ちてるといいんですが、ファイルのままのPEを詳しく解説したものは見つかりませんでした・・。

エラー処理は全て省いてあり、コマンドラインに適切なPE形式(PE or PE+)のファイルのフルパスが渡される前提です。エクスポートされている関数の名前を列挙します。

```
#include <cstdint>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>

#include <Windows.h>

struct module
{
  union
  {
    std::uintptr_t base_addr;
    PIMAGE_DOS_HEADER pIDH;
    void* pointer;
  };
  module( std::uintptr_t base_addr ) : base_addr( base_addr ) {}
  module( void* pointer ) : pointer( pointer ) {}
  template < class Ty > // convert RelativeVirtualAddress to AbsoluteRealAddress
  Ty to_ara( DWORD rva ) const { return reinterpret_cast < Ty >( rva + base_addr ); }
};

int main( int argc, char** argv )
{
  std::cout << std::hex;

  std::ifstream fileDll( argv[1], std::ios::in | std::ios::binary );
  std::vector < char > binaryDll;

  for( ;;)
  { // load file into buffer
    char buffer;
    fileDll.read( &buffer, sizeof( buffer ) * 1 );
    if( fileDll.eof() ) { break; } // eof
    binaryDll.push_back( buffer );
  }
  module moduleDll( binaryDll.data() );
  PIMAGE_NT_HEADERS pINH = moduleDll.to_ara < PIMAGE_NT_HEADERS >( moduleDll.pIDH->e_lfanew );
  PIMAGE_OPTIONAL_HEADER pIOH = &pINH->OptionalHeader;
  PIMAGE_DATA_DIRECTORY pIDD = &pIOH->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
  //
  // PIMAGE_EXPORT_DIRECTORY pIED = moduleDll.to_ara < PIMAGE_EXPORT_DIRECTORY >( pIDD->VirtualAddress );
  // 通常はこれでエクスポート情報が利用できるが、これは
  // LoadLibrary等で読み込み、ローダがごにょごにょしてくれないと使えない
  //

  // セクションヘッダを列挙し、エクスポート情報(IMAGE_EXPORT_DIRECTORY)を探す
  PIMAGE_FILE_HEADER pIFH = &pINH->FileHeader;
  // セクションヘッダはNTヘッダのお尻についている
  PIMAGE_SECTION_HEADER pISH = reinterpret_cast < PIMAGE_SECTION_HEADER > ( pINH + 1 );
  PIMAGE_EXPORT_DIRECTORY pIED = nullptr;
  std::uintptr_t rva_to_ied = 0;

  // ここからよく分からない
  for( int i = 0; i < pIFH->NumberOfSections; ++i )
  {
    if( pISH[i].VirtualAddress + pISH[i].SizeOfRawData > pIDD->VirtualAddress )
    { // IEDが含まれたセクションを発見
      std::cout << "SECTION: " << pISH[i].Name << std::endl;
      // IEDへのRVAを作る
      rva_to_ied = pIDD->VirtualAddress - pISH[i].VirtualAddress + pISH[i].PointerToRawData;
      pIED = moduleDll.to_ara < PIMAGE_EXPORT_DIRECTORY >( rva_to_ied );
      break;
    }
  }
  // rva to name pointer table
  std::uintptr_t rva_to_npt = rva_to_ied + pIED->AddressOfNames - pIDD->VirtualAddress;
  DWORD* table_names = moduleDll.to_ara < DWORD* >( rva_to_npt );

  std::cout << std::endl << "** enum export functions **" << std::endl;
  for( DWORD i = 0; i < pIED->NumberOfNames; ++i )
  {
    std::uintptr_t rva_to_name = table_names[i];
    char* name = moduleDll.to_ara < char* >( rva_to_name - pIDD->VirtualAddress + rva_to_ied );
    std::cout << "NAME: " << name << std::endl;
  }
}
```
クラスの追加と削除を遅らせるちょっとしたメソッド


##delayAddClass delayRemoveClass

addClassをするタイミングをずらしたいので、簡単にdelayAddClassというメソッドを考えてみた。
これら一連のキューをリピートするメソッドって作れないのかな？

```
(function($){
    $.fn.delayAddClass = function(className,delay){
        return $(this).delay(delay).queue(function(next){
            $(this).addClass(className);
            next();
        });
    };
    $.fn.delayRemoveClass = function(className,delay){
        return $(this).delay(delay).queue(function(next){
            $(this).removeClass(className);
            next();
        });
    }
})(jQuery);
```

##使い方

```
<style>
.test{
	position: fixed;
	top: 0;
	left: 0;
	-webkit-transition: all .3s ease-in-out;
	   -moz-transition: all .3s ease-in-out;
	    -ms-transition: all .3s ease-in-out;
	     -o-transition: all .3s ease-in-out;
	        transition: all .3s ease-in-out;
}
.test.state1{
	top: 0;
	left: 50px;
}
.test.state2{
	top: 50px;
	left: 50px;
}
.test.state3{
	top:50px;
	left: 0;
}
</style>
<script>
$(".test")
.delayAddClass("state1",300)
.delayAddClass("state2",300)
.delayAddClass("state3",300)
.delayRemoveClass("state1 state2 state3",300);
</script>
```
Ansible - Sudoが使えない時


Ansibleを触っていて困ったのは、既存のサーバ群のセキュリティが強固な時でした。
強固というか、sudoersに各シェル（sh,bash)を使わせない設定になっていたので
Ansibleの挙動的に、指定されたシェルを使ってrootにスイッチ？かsudoを叩いていたのですが
どうやらそれにひっかかっていた模様・・・

Ansibleの設定でどうこう、では無く力技で回避させたので備忘録で残しておきます。


```lang:usesudo.sh
#!/bin/sh
### 引数にsudoで実行したいコマンドを引き渡す

password=yourpassword

expect -c "

spawn sudo $*
set timeout 30
expect password:
send $password
"
```

```lang:executewithsudo.yml
 - hosts: sample
   user: user
   sudo: no

   tasks:
    - name: copy "usesudo.sh"
      copy: src=/tmp/usesudo.sh dest=/tmp/usesudo.sh
    - name: chmod
      command: chmod +x /tmp/usesudo.sh
    - name: execute command
      command: /tmp/usesudo.sh "yum update bash -y"
    - name: remove dangerous file
      file: path=/tmp/usesudo.sh state=absent
```

しかしshも使わせない設計とは・・・
Go で Windows の ini を読む

老害乙です、こんにちは！ 退屈しのぎに、件のコードを書いてみました。

```getprivateprofilestring.go
package kernel32ini

import (
	"syscall"
	"unsafe"
)

var kernel32 = syscall.NewLazyDLL("kernel32")
var getPrivateProfileString = kernel32.NewProc("GetPrivateProfileStringW")

func GetPrivateProfileString(path, section, keyname, defaultValue string) (string, error) {
	var buffer [2048]uint16

	sec16, secErr := syscall.UTF16PtrFromString(section)
	if secErr != nil {
		return "", secErr
	}
	key16, keyErr := syscall.UTF16PtrFromString(keyname)
	if keyErr != nil {
		return "", keyErr
	}
	default16, defaultErr := syscall.UTF16PtrFromString(defaultValue)
	if defaultErr != nil {
		return "", defaultErr
	}
	path16, pathErr := syscall.UTF16PtrFromString(path)
	if pathErr != nil {
		return "", pathErr
	}
	result, _, err := getPrivateProfileString.Call(
		uintptr(unsafe.Pointer(sec16)),
		uintptr(unsafe.Pointer(key16)),
		uintptr(unsafe.Pointer(default16)),
		uintptr(unsafe.Pointer(&buffer[0])),
		uintptr(len(buffer)),
		uintptr(unsafe.Pointer(path16)))

	if result <= 0 {
		return "", err
	}
	return syscall.UTF16ToString(buffer[0:result]), nil
}
```

テストコード：

```getprivateprofilestring_test.go
package kernel32ini

import (
	"fmt"
	"os"
	"path"
	"testing"
)

const (
	INIPATH = "getprivateprofilestring.ini"
	SECTION = "section1"
	KEY     = "key1"
	DEFAULT = ""
)

func TestGetPrivateProfileString(t *testing.T) {
	wd, err := os.Getwd()
	if err != nil {
		fmt.Println(err.Error())
		t.Fail()
		return
	}
	iniPath := path.Join(wd, INIPATH)
	value, err := GetPrivateProfileString(iniPath, SECTION, KEY, DEFAULT)
	if err != nil {
		fmt.Println(err.Error())
		t.Fail()
		return
	}
	fmt.Printf("%s[%s]%s=%s\n", iniPath, SECTION, KEY, value)
}
```

P.S. 良い子は [TOML](http://qiita.com/futoase/items/fd697a708fcbcee104de) 使った方がいいと思います！
LeapMotionでToolが検知しないときの話



openFrameworksでLeapMotion使って道具の検知をしたかったのですが、Documentどうりにやっても検知されず。何故何故？とヒィヒィ言ってると見つけたのがこの記事

[LeapMotionがTool(道具)を認識しなかった話](http://peliphilo.moo.jp/archives/522)

こんなことで時間取られてたとか私恥ずかしい...。
お手軽に ES6 の機能を gulp-babel で watch しながら試してみる


## 用意するファイル

- package.json
- gulpfile.js
- index.html
- es6/
  - main.js (最初は取りあえず空で)


```pakage.json
{
  "devDependencies": {
    "babel": "^4.7.16",
    "gulp": "^3.8.11",
    "gulp-babel": "^4.0.0"
  },
  "scripts": {
    "watch": "gulp watch"
  }
}
```

```gulpfile.js
var gulp = require('gulp');
var babel = require('gulp-babel');
var src_dir = './es6/**/*.js'
gulp.task('default', function () {
  return gulp.src(src_dir)
    .pipe(babel())
    .pipe(gulp.dest('js'));
});
gulp.task('watch', function(){
    gulp.watch(src_dir, ['default']);
});
```

```index.html
<!doctype html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>babel-sample</title>
    </head>
    <body id="content">
        <script src="js/main.js"></script>
    </body>
</html>
```

## 動かす手順

1. `$ npm install`
2. `$ npm run watch`
3. `index.html` を web ブラウザで表示

まだ `js/main.js` が無いので `es6/main.js` に適当に ES6 の機能をいれて書いてみる。
watch で監視されていれば js/ ディレクトリにファイル作成されるはず。

```es6/main.js
let foo = 'world';
let el = document.getElementById('content');
el.textContent = `Hello, ${foo}!`;
```

で web ブラウザで確認すると表示されるはず。

## 振り返り

- jishint を使ってるとワーニングとエラーが出まくるから eslint の導入検討したい。いつかの日か、たぶんそのうち。

## 参考

- [Babel](http://babeljs.io/)
- [Getting ES6 modules working thanks to Browserify, Babel, and Gulp](http://advantcomp.com/blog/ES6Modules/)
Angular 2 の Viewport Directive 文法の謎


（Angular 2 の alpha.13 に基づいた内容です。）

昨日 [ng-japan](http://ngjapan.org/) に参加した際に [Angular 2 に触ってみた](https://github.com/shuhei/angular2-todo)のですが、`If` とか `Foreach` の書き方が謎だったので調べてみました。

ちなみに Viewport Directive というのは、以前 Template Directive と呼ばれていた Angular 2 の 3 種類の Directive のうちの一つで、HTML に新しい DOM を挿入するものです。`If`, `Foreach` はこれに当たります。

## 書き方のバリエーション

`If` は、以下のどれでもいいそうです。

```html
<template [if]="foo">
  <p>Show me!</p>
</template>

<p template="if: foo">Show me!</p>

<p *if="foo">Show me!</p>
```

`Foreach` も、以下のどれでもいいそうです。

```html
<template foreach #foo [in]="foos">
  <li>{{foo.text}}</li>
</template>

<li template="foreach #foo in foos">{{foo.text}}</li>

<li *foreach="#foo in foos">{{foo.text}}</li>
```

え、なにそれ、どういうこと？

## `<template></template>` への正規化と microsyntax

If, Foreach などの実装は https://github.com/angular/angular/tree/2.0.0-alpha.13/modules/angular2/src/directives にあるので読んでみました。

If は `if` という属性があるかとその値しか見ていないし、Foreach も（概ね） `foreach` と `in` という属性があるかと `in` の値しか見てません。ということは、Directive がテンプレートの処理を開始する前に、一番上の `<template></template>` の形式に正規化されているということです。

[ViewSplitter](https://github.com/angular/angular/blob/2.0.0-alpha.13/modules/angular2/src/core/compiler/pipeline/view_splitter.js) なるもので、以下の変換をしているようです。

1. `*` から始まる属性値を template 属性に。例えば `*foreach="#foo in foos"` -> `template="foreach #foo in foos"`
2. `template=""` の属性値（microsyntax）をパースし、`<template></template>` を作ってその属性を設定。例えば `template="foreach #foo in foos"` -> `<template foreach #foo [in]="foos"></template>`

なので、上の例だと下のものから順に上に変換されているイメージです。

2 の microsyntax のパースの部分は、[ドキュメント](https://github.com/angular/angular/blob/2.0.0-alpha.13/modules/angular2/docs/core/01_templates.md#template-microsyntax)だけ読むとよく意味がわかりませんが、[コード](https://github.com/angular/angular/blob/2.0.0-alpha.13/modules/angular2/src/change_detection/parser/parser.js#L495)や[テスト](https://github.com/angular/angular/blob/2.0.0-alpha.13/modules/angular2/test/change_detection/parser/parser_spec.js#L369)を読んだところ、結局一定のルールに従って `<template></template>` に設定するための複数の属性を取り出すよ、ということのようです。

## Viewport Directive の仕組み

`<template></template>` の書き方の面白いところは、ただの属性なので順番はどうでもいいという点です。以下のどれでもいいわけですね。

```html
<template foreach #foo [in]="foos"></template>
<template foreach #foo [in]="foos"></template>
<template #foo foreach [in]="foos"></template>
<template #foo [in]="foos" foreach></template>
<template [in]="foos" foreach #foo></template>
<template [in]="foos" #foo foreach></template>
```

ちなみに `#foo` は implicit variable というらしく、Directive の方では `\$implicit` という名前の local を設定すればそこに値を渡せる模様。

## 結論

他人の書いた Viewport Directive を使うときは安心して `*foreach=""` のような形式が使えます。要素が複数の時は `<template></template>` で囲む必要がありますが。

自分で Viewport Directive を作るときは、例の microsyntax でいい感じに書けるように、使う属性をうまく決める、という感じでしょうか。

とりあえずすっきり。
[PHP] preg_replace の処理速度検証

## 検証

半角空白と全角空白(UTF8)を削除する正規表現について、二通りの式を試した。

```php:A
$result = preg_replace('/\x20|\xE3\x80\x80/', "", $_string);
```

```php:B
$result = preg_replace(array('/\x20/', '/\xE3\x80\x80/', array("", ""), $_string);
```

## 結果
``A``のほうが、1.25倍くらい速かった。
予想通り。

## 環境

```sh:環境
$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 4
model name      : Intel(R) Xeon(TM) CPU 3.60GHz
stepping        : 1
microcode       : 23
cpu MHz         : 3600.000
cache size      : 1024 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc pebs bts pni dtes64 monitor ds_cpl est tm2 cid cx16 xtpr
bogomips        : 7200.38
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 15
model           : 4
model name      : Intel(R) Xeon(TM) CPU 3.60GHz
stepping        : 1
microcode       : 23
cpu MHz         : 3600.000
cache size      : 1024 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc pebs bts pni dtes64 monitor ds_cpl est tm2 cid cx16 xtpr
bogomips        : 7200.38
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:


$ cat /etc/redhat-release
CentOS release 6.6 (Final)

$ php -v
PHP 5.6.6 (cli) (built: Feb 19 2015 10:30:11)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies

```



## 余談
最初、

```php:A
$result = preg_replace('/(\x20|\xE3\x80\x80)/', "", $_string);
```

というふうに、``A``のほうでグルーピングした正規表現を使っていて
``B``のほうが、1.2倍くらい速い結果となってしまった。

これはたぶん、マッチした文字列をどこかに一時保存する処理が働いたからだと推察してます。
経過時間を表示する

ゲーム開始から終了までの経過時間を取得してみます。
よりスマートな方法、指摘などあればコメントいただけると幸いです。

**※2015/3/23 追記**
文字列として表示する場合、NSDateFormatterを使用した方がよいとアドバイスいただきました。
上記について追記修正しました。

## イメージ
![time.png](https://qiita-image-store.s3.amazonaws.com/0/70446/30e7f2d1-7aa7-8ad5-99ad-f0715ae1aa9e.png)

## 実装方法
```swift:GameScene.swift
var startDate = NSDate() // ゲーム開始時の時刻を取得

time = NSDate().timeIntervalSinceDate(startDate) // 現在時刻と開始時刻の差
var hh = Int(time / 3600)
var mm = Int((time - Double(hh * 3600)) / 60)
var ss = Int(time - Double(hh * 3600 + mm * 60))
var date_String = String(format: "%02d:%02d:%02d", hh, mm, ss)

println(date_String)
```

```swift:GameScene.swift
var startDate = NSDate() // ゲーム開始時の時刻を取得

time = NSDate().timeIntervalSinceDate(startDate) // 現在時刻と開始時刻の差
var date_String = NSDate(timeIntervalSince1970: time) 

let dateFormatter = NSDateFormatter()
dateFormatter.timeZone = NSTimeZone(name: "GMT")
dateFormatter.dateFormat = "HH:mm:ss"
        
println(dateFormatter.stringFromDate(date_String))
```

## 参考
[NSDateで日付を管理する - Swiftサラリーマン](http://swift-salaryman.com/nsdate.php)
[Swiftで日時文字列とUNIX時間を相互に変換する方法](http://qiita.com/alpha22jp/items/676dca97ad54b86645e7)
[NSDateFormatter Class Reference](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/index.html#//apple_ref/occ/cl/NSDateFormatter)
node-ffiの公式版をAtom Shellやio.jsで使うには

# 2015/03/23 追記

先ほど、npmにあげたと案内が来たので、

```bash
npm install ffi で
```

でインストールできるようになった模様です。

追記ここまて

# node-ffiとは

JavaScriptだけで、.soや.dylibなファイルの主にC言語ベースの
APIを叩くことを可能にするライブラリ。

例えば、頑張ればOpenCVをnode.jsからC言語を一切書かずに、扱うことが
出来る。

- [Node.jsでFaceTime HDカメラを使う: misc](http://kjunichi.cocolog-nifty.com/misc/2014/11/nodejsfacetime-.html)

# 成り行きでパッチがマージされてしまったので

まだ、npmだとエラーになる

```bash
git clone https://github.com/node-ffi/node-ffi.git
cd node-ffi
npm install
cd ..
mv node-ffi ffi
```

### Atom Shellで使うには

Atom Shellはこの後、専用のバイナリをリビルドする。

```bash
find . -name binding.gyp
```

出て来た、test以外のディレクトリに片っ端から行って、

```bash
HOME=~/.atom-shell-gyp node-gyp rebuild --target=0.22.1 --arch=x64 --dist-url=https://gh-contractor-zcbenz.s3.amazonaws.com/atom-shell/dist
```

を実行。

# 英語がもう少しできれば

英語がもう少しできれば、Winな方に作業を押し付けられたのにｗｗ

- https://github.com/node-ffi/node-ffi/issues/187
Yieldを使ってrubyのイテレートメソッドを実装

##find

```rb

def find(ary)
  ary.each do |x|
    return x if yield x
  end
  false
end

```

##inject(畳み込み)

```rb

def inject(ary, int)
  ans = int
  ary.each do |val|
    ans = yield(val, ans)
  end
  ans
end

```

##map(写像)

```rb

def map(ary)
  ans = []
  ary.each do |val|
    ans << (yield val)
  end
  ans
end

```

##select

```rb

def select(ary)
  ans = []
  ary.each do |val|
    ans << val if yield val
  end
  ans
end

```

##reject

```rb

def reject(ary)
  ans = []
  ary.each do |val|
    ans << val unless yield val
  end
  ans
end

```

##count

```rb

def count(ary)
  ans = 0
  ary.each do |val|
    ans += 1 if yield val
  end
  ans
end

```
Chromebook developer modeにするメモ

マシン　HP chromebook 11 (古いやつ)

注意点として初期化されるのでオフラインのデータはバックアップをとっておきましょう。

僕はGoogleアカウントに紐付いてるのだけでいいのでバックアップ作業は省きました。

# リカバリモードで起動する

esc + F3(もしくはリフレッシュボタン)を押しながら電源を付ける

# モードを切り替える
リカバリーモードの画面でCtrl-DをしてEnterボタンを押して３０秒たったら初期化がはじまります。

# まとめ

croshでshellコマンドが使えるようになり色々できるようになります。

でも僕が持ってるHP Chromebook 11では[chromebrew](http://skycocker.github.io/chromebrew/)とか使えなかったのでやる意味がなかったorz

chromebrewをarm7lに対応させられるか試してみるか

新しいChromebookを買うか...

# 参考

[Developer Mode - Chrome OS Wiki](https://sites.google.com/site/chromeoswikisite/home/what-s-new-in-dev-and-beta/developer-mode)
[Libgdx]当たり判定で使えそうなクラス

#まえがき
ゲームで衝突の検出しようと思った時、自作するのはバグとか怖いなぁっと。
libgdxはゲームライブラリだから、衝突系の検出ライブラリーがあるはずだと思って、探した次第でございます。
もちろんStageのhitを使えば、画像サイズの四角はできるけど、例えば弾のような円の当たり判定はできないと思う。（知らないだけかも？）
衝突系のライブラリだけまとまったクラスを発見！！！
自分用メモにqiitaに書いておこう。

#Intersector
実際のメソッドで何かあるか、なんの引数を渡すかはドキュメントを参照。
Intersectorでできることを記述。
全部staticです。
##衝突系
- boolean isPointInTriangle (Vector3 point, Vector3 t1, Vector3 t2, Vector3 t3)  : 点と三角形の当たり判定
- int pointLineSide(Vector2 linePoint1, Vector2 linePoint2, Vector2 point) : 点と線のどちら側にあるか(-1:左,0:右)
- boolean isPointInPolygon(Array<Vector2> polygon, Vector2 point)  : 点と多角形の当たり判定
- boolean intersectSegmentCircle(Vector2 start, Vector2 end, Vector2 center, float squareRadius)  : 線と円の当たり判定
-  boolean intersectLines (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 intersection) : 線と線の当たり判定(intersectionを渡すと交点座標が入る）
-  boolean intersectLinePolygon (Vector2 p1, Vector2 p2, Polygon polygon) : 線とポリゴンの当たり判定
-  boolean intersectRectangles (Rectangle rectangle1, Rectangle rectangle2, Rectangle intersection) : 四角と四角の当たり判定(intersectionに重なった範囲がセットされる)
- boolean intersectSegments (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 intersection): Segment通しの当たり判定(あたった部分はintersectionにセットされる)

## overlapシリーズ
衝突系のわかりやすく、直感的に扱える。intersectionがないので、重なったエリアがほしい場合は不向き。
- boolean overlaps (Circle c1, Circle c2) : 円と円の当たり判定
- boolean overlaps (Rectangle r1, Rectangle r2) :　四角と四角の当たり判定
- boolean overlaps (Circle c, Rectangle r) :　円と四角
- boolean overlapConvexPolygons (Polygon p1, Polygon p2) : ポリゴンとポリゴン

##処理系
- float distanceLinePoint(float startX, float startY, float endX, float endY, float pointX, float pointY)  : 点と線との距離
- float distanceSegmentPoint(Vector2 start, Vector2 end, Vector2 point)  : 点とSegmentとの距離
- Vector2 nearestSegmentPoint (Vector2 start, Vector2 end, Vector2 point, Vector2 nearest) : 点にもっと近い四角形(原文:Segment)の頂点座標
- boolean intersectSegmentPolygon(Vector2 p1, Vector2 p2, Polygon polygon):四角(原文Segment)とポリゴンの当たり判定
- float det (float a, float b, float c, float d):行列式
- double detd (double a, double b, double c, double d) :detのdouble版

##訳せなかったコメントのメソッド
- Ray系
- void splitTriangle (float[] triangle, Plane plane, SplitTriangle split) 

#ドキュメント
[Intersector (libgdx API)](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html)
[Intersectorコード](https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/math/Intersector.java)
Python 省メモリ化のためにやったこと

# 背景
4CPU メモリ4Gの小規模サーバで数日掛かる処理を複数立ち上げて
CPU100% x 4を維持して計算していたら、数時間でメモリ不足が発生して
CPU使用率が激減した。どうやらメモリ不足に陥っていたようだ。

# 起きていた事
処理時間の増加ニトモナイ、プロセスのメモリ使用量が増加
→メモリ枯渇
→メモリswap発生
→メモリアクセス速度が大幅劣化
→メモリ待ちCPU使用率が1%以下
→いつまでたっても終わらない(性能大幅劣化)

# 対策0. お金で解決
たいていの場合、サーバ台数増やしたり、サーバの性能アップさせたら解決します。
個人のPJだったので選択しませんでしたが、メモリ32Gくらいのサーバに乗り換えたら
それだけで解決したんだろうなぁ。


# 対策1. 処理の垂直分割
pythonのメモリ管理は基本VM任せの全自動。メモリリークの根本解決はプロセス殺すしかない
処理にベキ等性もたせて、1つのコマンドで8種類のカテゴリの処理を行っていた箇所を分割した

### 改善前

```py
class Category(Enum):
    A = 1
    B = 2
    C = 3

for category in Category:
  benchmark(category)
```

### 改善後

```py
category = manage.get_category_by_priority()
benchmark(category)
```

# 対策2. supervisorを導入した
改善1のコードは8回にわけて実行する必要があったので、プロセスが停止したら
再度立ち上げる処理を各必要があった。そんなときsupervisor使うと便利

```lang:shell
easy_install supervisor
echo_supervisord_conf > /etc/supervisord.conf
supervisord
supervisord status
alias sc='supervisorctl'
sc restart
sc reread
sc stop all
sc status
sc restart all
```

# 対策3. 手動GCに手を染めた
pythonのGCは詳しくないので副作用があるかも。
いまのところメモリリーク解消して安定していますが
黒魔術の可能性あるなので、あまりオススメできません。

クラスキャッシュを多用していると、python2系だとメモリリークが頻発して
消費メモリ量がどんどん増えていく問題は、python3にすると解消するのだろうか

```py
class Category(Enum):
    A = 1
    B = 2
    C = 3

for category in Category:
  benchmark(category)

def benchmark(category):
  bulk = []
  tmp_data = Tmp.get_all()
  for _tmp in tmp_data:
    bulk.append(calc(_tmp))
  DBTable.bulk_create(bulk)  # バルク!

  # メモリ解放
  import gc
  del tmp_data
  del bulk
  gc.collect()
```

参考: gc — ガベージコレクタインターフェース
http://docs.python.jp/2/library/gc.html
Vagrantで、ゲストOSからホストのIPを取得する方法

http://stackoverflow.com/questions/19917148/tell-vagrant-the-ip-of-the-host-machine
を参考にすると下記。

```bash
netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
```

あとは記事のようにrubyでやるなら下記とか。

```rb
development:
  host: <%= `netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10` %>
```

【追記】これで取れるアドレスには終端に改行が含まれるかもしれない。その場合には`strip!`とか使う。
iOS8でAction付きのPush通知を表示する

iOS8からプッシュ通知を受けた際にボタンを表示させてアプリケーションに特定の操作を行うことができるようになりました。

参照：
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/NotificationCenter.html

大まかに流れをいうと、
1. Actionを作成し、カテゴリに登録
2. 通知を登録する際にカテゴリを設定
3. 通知を表示する際にカテゴリを指定

# 問題
## って感じなんですが、、いくら通知を表示させてもうまくでてこない！

iOS8のサンプルで有名な
https://github.com/shu223/iOS8-Sampler
も試してみたのですが、キャプチャにあるような通知画面にならずに、普通の通知のまま。

Xcode6.2でiOS8.2実機、シミュレータ共にだめ。

先日から、どハマり中です。
サンプルコードは下記にアップしてあり、、絶賛悩み中です。
https://github.com/nmisawa/PushNotificationTest

試したサンプルコード
1. https://github.com/ShinobiControls/iOS8-day-by-day
2. https://github.com/ariok/TB_InteractiveNotifications

# 解決

コードには問題がなく、通知の表示をすっかり勘違いしてました。
通知が表示された時にはボタンが表示されていなくて、

![notificationtest_1.png](https://qiita-image-store.s3.amazonaws.com/0/4664/0dd9e70f-a89e-10f7-60ca-1194ecbe555e.png "notificationtest_1.png")

なんで出てこないんだと思っていたのですが、ふと、通知メニューをズリッと広げてみると、、、、

![notificationtest_2.png](https://qiita-image-store.s3.amazonaws.com/0/4664/b1842ecc-6003-a798-7408-bc200f15ced9.png "notificationtest_2.png")

なんか出てきた！
そうか、、リサイズもしくはスワイプしないと選択肢が出てこないんだ！

激しく脱力感にかられました。

![notificationtest_3.png](https://qiita-image-store.s3.amazonaws.com/0/4664/baff8d90-8409-beb7-a3b5-453b8ef625e8.png "notificationtest_3.png")

コードにも恥ずかしい間違いがあったので合わせて更新しておきました。
忘れやすい .htaccess 備忘録


# pushState 用リダイレクト

存在しないファイルやディレクトリへのアクセスは `index.html` へリダイレクトさせる場合:

```.htaccess
<ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !index
    RewriteRule (.*) index.html [L]
</ifModule>
```

# 指定日時までリダイレクト

公開日時まではアクセスがあっても別パスでリダイレクトさせる。この場合は 2015  年 3 月 23 日 20:50:59 秒までは `/teaser` 以下にリダイレクトさせる例:

```.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{TIME} <20150323205059
    RewriteRule ^(.*)$ teaser/ [R=302,L]
    RewriteBase /
</IfModule>
```

# UA 判定による自動リダイレクト

スマートフォンからのアクセスであった場合に `/sp` 配下の同階層にリダイレクトさせる場合:

```.htaccess
<ifModule mod_rewrite.c>
    RewriteEngine On
    
    RewriteCond %{REQUEST_URI} !/sp/
    RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
    RewriteRule ^(.*)$ sp/$1 [R]
    RewriteBase /
    
    RewriteCond %{REQUEST_URI} /sp/
    RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|iPad|Android|Windows\ Phone)
    RewriteRule ^sp/(.*)$ /$1 [R]
    RewriteBase /
</ifModule>
```

- `RewriteBase` は `RewriteRule` の **リダイレクト先の** ベースになるパスを指定する。

# Android 標準ブラウザを足切りするリダイレクト

Android で標準ブラウザが搭載された最終バージョン 4.4 未満の標準ブラウザは、足切りページへリダイレクトさせる場合:

```.htaccess
<ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !/sorry.html
    RewriteCond %{HTTP_USER_AGENT} (Android\ 4\.3|Android\ 4\.2|Android\ 4\.1|Android\ 4\.0|Android\ 3|Android\ 2|Android\ 1)
    RewriteCond %{HTTP_USER_AGENT} !(Chrome)
    RewriteRule ^(.*)$ sorry.html [R]
    RewriteBase /
</ifModule>
```
gitの改行コード自動変換でハマッた話（WindowsでもLFでチェックアウトする方法）

この記事は移行しました！[最新の内容はこちら](https://naoqoo2.github.io/blog/git%E3%81%AE%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89%E8%87%AA%E5%8B%95%E5%A4%89%E6%8F%9B%E3%81%A7%E3%83%8F%E3%83%9E%E3%83%83%E3%81%9F%E8%A9%B1-Windows%E3%81%A7%E3%82%82LF%E3%81%A7%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%A2%E3%82%A6%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)をご覧ください😀

わたくし、
gitの改行コード自動変換（Windows環境ならCRLFにする）というのが嫌いで
リポジトリにコミットされてる改行コードのままクローンされるよう下記設定をいれてます。
>core.autocrlf=false（改行コード変換しない）


ある日、
とあるリポジトリをクローンしたところ
改行コードがCRLFになってる。。

てっきりCRLFでコミットされてしまってるんだなと思ったのですが、
実は下記ファイルが原因でした。


```text:.gitattributes
* text=auto
```

>これはGitがテキストであると考えているすべてのファイルがリポジトリに>（LF）改行コードを正規化していることが保証されます。
>　引用（翻訳版）：http://git-scm.com/docs/gitattributes


ということで、リポジトリ上は全てLFで問題なかったのです。

が、このファイルがコミットされていると、
core.autocrlfの設定を無視してCRLFに変換してくれるようです。

ややこしや。
時代ですかね。

## 追記（2019/8/29）

どうしてもWindowsでもLFで管理したい！と思い久々に調べました。

すると[こんなstack overflow](https://stackoverflow.com/questions/2517190/how-do-i-force-git-to-use-lf-instead-of-crlf-under-windows/33424884#33424884)が！

```
git config --global core.eol lf
git config --global core.autocrlf input
```

この設定で自動変換されずLFでチェックアウトできました！
`* text=auto`の設定があっても問題なし！

既にチェックアウト済みの既存のレポジトリは下記コマンドで修正できるぜ！

```
git rm -rf --cached .
git reset --hard HEAD
```

的なことが書いてあったのですが、残念ながらCRLFのままでした。でもまぁcloneし直して解決！

これでモヤモヤとサヨナラです。ありがとうGit！
sudo: timestamp too far in the future

## 参考

* ["sudo:timestamp too far in the future" - ubuntu日記](http://d.hatena.ne.jp/elsal/20061102/1162399581)
* [ＯＲＣＡよくある質問・回答集: sudoを実行すると「sudo: timestamp too far in the future」](http://www.sky.sh/orca/mt/archives/2008/05/sudooaoeeeoesud.html)

## 現象

```bash:sudo出来ない
$ sudo reboot
sudo: timestamp too far in the future: Mar 22 20:06:26 2015
```

## 方法1: rootになる

```bash:suすればよい。
$ su
パスワード:
# reboot

Broadcast message from root (pts/0) (Sun Mar 22 12:13:13 2015):

The system is going down for reboot NOW!
```

## 方法2: sudo -Kを2回実行

```bash:
sudo -K
sudo -K
```

## 方法3: 

```bash:フォルダ削除
rm -rf /var/run/sudo/ユーザ名/
```