OmniAICreator/Qiita-1.07M huggingface dataset:
angularjs $rootScope で他のコントローラーとスコープを共有しない書き方？

# $rootScope の引数の位置を変えてみたら。。

２つのコントローラーで、`$rootScope` の同じ変数を変更すると、最後に指定した値が有効になるはずですが、`function($rootScope, $scope)` このような引数を、逆にすると`function($scope, $rootScope)`、最後に指定した `$rootScope` が反映されないで、それぞれのコントローラー内でのみ変更されます。

##### HTML
scope1 と scope2 にはそれぞれのスコープで定義する test, rootTest が表示される。

```html
<body ng-app="app">
<div ng-controller="scope1">
  <p>{{test}}</p>
  <p>{{rootTest}}</p>
</div>

<div ng-controller="scope2">
  <p>{{test}}</p>
  <p>{{rootTest}}</p>
</div>
</body>
``` 

##### javasctipt
scope1 のスコープは、'\$rootScope'と'\$scope'を function の引数と同じ順番に。
scope2 のスコープは、'\$rootScope'と'\$scope'を function の引数は逆にしてみる。

```js
var app = angular.module('app', []);

app.controller('scope1',['$rootScope','$scope', function($rootScope, $scope){
  $scope.test = 'scope1';
  $rootScope.rootTest = 'rootScope1';
}]);

app.controller('scope2',['$rootScope','$scope', function($scope, $rootScope){
  $scope.test = 'scope2';
  $rootScope.rootTest = 'rootScope2';
}]);
``` 
###### 結果

```html
scope1
rootScope1
scope2
rootScope2
```

### 因みに通常作動
\$scope と \$rootScope の順番が同じなら、違うスコープでも\$rootScope の値は同じになります。

```js
var app = angular.module('app', []);

app.controller('scope1',['$scope','$rootScope', function($scope, $rootScope){
  $scope.test = 'scope1';
  $rootScope.rootTest = 'rootScope1';
}]);
app.controller('scope2',['$scope','$rootScope', function($scope, $rootScope){
  $scope.test = 'scope2';
  $rootScope.rootTest = 'rootScope2';
}]);
```

###### 結果
* controller `scope1` の `rootScope1` は、 scope2 コントローラーの値で上書きされて、 `rootScope2` になります。  

```html
scope1
rootScope2
scope2
rootScope2
```
LXDEのショートカットによるWindows操作

# はじめに
　古くて壊れそうなデスクトップ使っているものですから、いつもLXDEになってしまいます。LDXEは、標準ではショートカットが少ないので、lxde-rc.xmlへ追加する必要があります。今まで、Windows操作のショートカットを追加してなくて、もやもやしていました。今回は次の操作を追加してみました。
　最大、最大解除、右側脇移動、左側脇移動、左半分のサイズ変更のウィンドウズ操作ショートカットです。サイズ変更は数値で入れていますので、変更の必要があると思います。

## リンク
詳しくは、次のリンクにあります。
Help:Actions - Openbox
http://openbox.org/wiki/Help:Actions

## 追加分
lxde-rc.xmlの追加分　Keybindのセクションに追加してください。

```/home/あなたの場所/.config/openbox/lxde-rc.xml

    <keybind key="C-A-1">
        <action name="Maximize"/>
    </keybind>

    <keybind key="C-A-2">
        <action name="Unmaximize"/>
    </keybind>

    <keybind key="C-A-3">
        <action name="MoveToEdge"><direction>west</direction></action>
    </keybind>

    <keybind key="C-A-4">
        <action name="MoveToEdge"><direction>east</direction></action>
    </keybind>

    <keybind key="C-A-5">
        <action name="MoveResizeTo">
        <!-- adjust a window's height -->
            <width client="yes">1/2</width>
            <height>750</height>
            <x>-0</x>
            <y>-0</y>
        </action>
    </keybind>
WordPressのユニットテストでダミーの投稿を放り込んで、それぞれの記事に画像を添付してアイキャッチ画像を設定する


なんか簡単にやる方法ないかなーと思ってWordPressコアのユニットテストのソースをのぞいたらあった。

わらけるぐらい簡単。

```
class Media_Test extends WP_UnitTestCase
{
  public function setUp()
  {
  	parent::setUp();
    $post_ids = $this->factory->post->create_many( 25 );

    foreach ( $post_ids as $post_id ) {
      $attachment_id = $this->factory->attachment->create_object( 'image-'.$post_id.'.jpg', $post_id, array(
        'post_mime_type' => 'image/jpeg',
        'post_type' => 'attachment'
      ) );
      set_post_thumbnail( $post_id, $attachment_id );
    }
  }
}

```

以上のように`setUp()`に書くだけ。

上の例では25件のダミーの記事を`create_many()`で作って、その戻り値の記事のIDの配列をぶんまわして`create_object()`で画像を添付して、`set_post_thumbnail()`でアイキャッチ画像に設定しています。

ファイル名はテストとかでわかりやすいように`image-123.jpg`みたいな感じで記事のIDを数字の部分に放り込みました。

これでアイキャッチ画像をフィードに放り込みたいとかOGPで出したいとかの確認はブラウザでアップロードとかめんどくさいことをしなくてもよくなりました。
Spring Bootでmysqlのコネクションが切断された時に自動的に張りなおす方法

# 概要
Spring Bootで、jpaを使ってmysqlに接続しているときに、10分(600秒)でコネクションが切断されてしまって、DBの接続エラーが発生する事態があったので対応方法をメモ。

# application.yml
すみません、例がmariadbです。

```
spring:
  datasource:
    url: jdbc:mariadb://xxx.xxx.xxx.xxx:3306/testdb
    username: testuser
    password: testpassword
    driverClassName: org.mariadb.jdbc.Driver
    testOnBorrow: true
    validationQuery: SELECT 1
```

`validationQuery`だけでいけるかと思ったけど、`testOnBorrow`の設定が必要でした。

# 参考
http://yyhayashi303.hatenablog.com/entry/20120911/1347322683
http://stackoverflow.com/questions/22684807/spring-boot-jpa-configuring-auto-reconnect

# なぞ
mysqlのコネクションが10分(600秒)で切断されてしまう事象は謎。
8時間(28800秒)で設定されてそうなんだが。

```
mysql> show variables like '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 5        |
| deadlock_timeout_long       | 50000000 |
| deadlock_timeout_short      | 10000    |
| delayed_insert_timeout      | 300      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| slave_net_timeout           | 3600     |
| thread_pool_idle_timeout    | 60       |
| wait_timeout                | 28800    |
+-----------------------------+----------+
14 rows in set (0.37 sec)
```
VirtualBoxでWindowsの入ったストレージをSATAにつなぎかえる

# 要約
* VirtualBoxで、Windowsの入った仮想ストレージ（*.vhd）をSATAコントローラにつなぐと、起動時にブルースクリーンになる場合がある。
* SATAコントローラのドライバがインストールされていないため。（と思う）
* はじめにSATAコントローラを追加して、一度Windowsを起動してドライバをインストールしてから、仮想ストレージを繋ぎ変えたらうまくいった。

# はじめの状態
![Windows 7 - 設定_007.png](https://qiita-image-store.s3.amazonaws.com/0/27531/1c13893d-2368-a9b1-7623-d6944cb42e98.png)

# SATAコントローラを追加
![Windows 7 - 設定_008.png](https://qiita-image-store.s3.amazonaws.com/0/27531/ca6564a9-bfd8-58c2-41d2-61824dd85bf1.png)

# Windowsを起動する
（ドライバがインストールされるまで待つこと）

# ストレージをSTATコントローラに移動する
* IDEコントローラからストレージの割り当てを除去
* SATAコントローラにストレージを割り当て直す
![Windows 7 - 設定_010.png](https://qiita-image-store.s3.amazonaws.com/0/27531/c40eb3d1-fa18-2ee5-a632-01e276814100.png)

# Windowsを起動する
（起動後、もう一度再起動がされるかも。）

# その他
* いまのところ問題は・・・発生していないと思う。ライセンス認証を求められることもなし。
* IDEのままでも良かったような。
* 自己責任で。
メタボール形成アセットをUnityAssetStoreに出しました


Unity Asset Store に Skinned Metaball Builder をリリースしました。
ざっくり言うとメタボール形成のためのアセットです。

この記事ではメタボールについて軽く紹介し、
アセットについて触れ、
それを用いてプールっぽいものを作る方法を説明します。

## メタボールについて
有機的な形状を生成できる手法の一つ、及びそれで作られた形状を指します。
典型的には、複数のボールが融けてつながっているような形をしています。
また、リアルタイムに形状を更新することで、柔らかく変形する物体を表現することが可能です。

### サンプル画像
![20150629121828.png](https://qiita-image-store.s3.amazonaws.com/0/61553/3523d334-be4b-4cb0-519e-7b1f747ca079.png)

### 動画
https://youtu.be/nJBVFrmY9jo

### Wiki
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E3%83%9C%E3%83%BC%E3%83%AB


## アセット情報
### ストア
http://u3d.as/gAE
![smb_published.PNG](https://qiita-image-store.s3.amazonaws.com/0/61553/1afdc30a-5519-80d5-c143-c3dd525e9553.png)


### マニュアル・リファレンス
http://nkdtr.hatenablog.com/entry/2015/06/11/000322

### 機能紹介ムービー
自動スキニングを行えます。アニメーションに適します。（字幕ONで解説が表示されます（英語））
https://www.youtube.com/watch?v=J35LcdCPhKc&feature=youtu.be

メッシュを裏返して洞窟状のものを作れます（これはサンプルシーンとしてアセットに同梱されています）
https://www.youtube.com/watch?v=QQG7rroZOBc

テクスチャマッピングができます（平行投影のみ）
https://www.youtube.com/watch?v=r0-WmAZG6oQ


## リアルタイムに形状を更新する例（2次元プール）

![metapool.PNG](https://qiita-image-store.s3.amazonaws.com/0/61553/a20e31ec-9006-10ef-3184-f38ce01d923f.png)

### 作り方動画（4分くらいです）
https://www.youtube.com/watch?v=P8cH2YSlljw

動画中で使用しているマテリアルは標準の物理シェーダーに適当に色をつけて半透明にしたものです。
また、スクリプトは以下の内容です。
メタボールを毎フレーム更新させるだけのものです。

```
using UnityEngine;
using System.Collections;

public class UpdateMetaball : MonoBehaviour {

    public StaticMetaballSeed metaball;

	// Update is called once per frame
	void Update () {
        metaball.CreateMesh();	
	}
}
```
Sublime Text3をLaracastでJeffが使っているような見た目にする

エディタに限らずツール類のUIは極力カスタマイズしない派です。
Sublime Textも標準テーマで使ってますが、Laravelの学習サイト[Laracast](https://laracasts.com/)で管理人？のJeffが使っている色合いがいいなと思ったので、似せてみます。

とはいっても基本[ここ](https://laracasts.com/discuss/channels/general-discussion/a-smple-guide-to-installing-a-sublime-text-3-with-sidebar-icons?page=1)の通りにするだけ。同じことを思っている人というのはいるものです。

###やりたいこと

標準でこんなのを、

![before](http://www.bluecode.jp/qiita/sublime01.png)

こうします。

![before](http://www.bluecode.jp/qiita/sublime02.png)

###ベースはSeti_UIというやつらしい
まずは、ベースとなっているSeti_UIというのを、Package Controlで普通にインストールします。
そして、まずはSeti_UIにします。

Setting->Userに

```js
"color_scheme": "Packages/Seti_UI/Scheme/Seti.tmTheme",
"theme": "Seti.sublime-theme"
```

を追加して保存します。

ファイルがアイコンになるなど、それなりにカッコはいいのですが、黒過ぎというか、コントラストがありすぎて見づらい。
なので、優しい感じにします。

###Jeffに似せる

やることは２つ。

* Facebookテーマというテーマを適用する
* さらに、Seti_UIの標準設定ファイルをカスタマイズする

####Facebookeテーマの適用

Facebookテーマは、[ここ](https://raw.githubusercontent.com/mbixby/facebook-color-scheme/master/Facebook.tmTheme)からダウンロード。もしくは「リンク先を別名で保存」とかで保存。保存場所はとりあえず、SublimeのPackagesの直下にしました（名前は、Facebook.tmtheme）。

先ほどのSetting->Userの設定を

```js
"color_scheme": "Packages/Facebook.tmtheme",
"theme": "Seti.sublime-theme"
```

とします。すると、コードエディタのテーマはそれっぽくなりますが、全体的には野暮ったい＋サブウインドウが黒過ぎるのはそのままです。

####Seti_UIの設定ファイルをいじる

まず、設定ファイルは、
>SublimeのPackages/Seti_UI/Seti.sublime-theme

というやつです。これをいじります。
いじるといっても、膨大な変更なので、先人の知恵を拝借します。

[ここ](http://pastebin.com/QZb0chBK)の上段の内容をコピーし、先ほどの、Seti.sublime-themeに上書きします。すると、それっぽくなります。Jeffのやつの方がもうちょっとシックで上品な感じがしますが、まあいいでしょう。

###元（標準）に戻す

標準に戻す場合は、Setting->Userに付け加えた行を削除（コメントアウト）します。保存すれば元に戻ります。


###追記

最近のデザインを文字通り模したものが[ここ](https://github.com/christopherburton/Jeffrey-Way-Theme)にあります。
zsh上で環境変数PYTHONPATHを設定する

Macのitermをoh-my-zshにして、どこからでも"import nfc"をできるようにする、ということをした。
書き換えたところは1つ。
~/.zshrcに、
`export PYTHONPATH=/Users/gushimakota/Documents/study/nfcpy`
と書き加えた。

このようにすると、環境変数が設定できる。JAVAとかでも同じことができるのかも。
linq > 独自のWhereの定義 > static IEnumerable<int> Where(...

https://www.youtube.com/watch?v=FupRSJe-cc0&list=PL90AF0EFFEF782D27&index=6
の6:00あたりで紹介されている。

独自の.Whereを実装できるようだ。

```csharp:sample.cs
using System;
using System.Linq;

static class MainClass
{
    static IEnumerable<int> Where(
        this int[] ints, Func<int, bool> gauntlet)
    {
        Console.WriteLine("My Where()");
        foreach(int i in ints)
            if (gauntlet(i))
                yield return i;
    }

    static void Main()
    {
    
        int[] numbers = new [] {3,1,4,1,5,9,2};
        var result = 
            numbers
            .Where(n => n < 3)
            .Select(n => n);
     
        foreach(int idx in result)
            Console.WriteLine(idx);
    }
}
```

```txt:結果
My Where()
1
1
2
```

Enumerable.Where()と記載の場合は独自の実装が使われない、というようなことを言っていた（多分）。

`yield return i;`の理解はまだ。
linq > Enumerable.Where(numbers, ...)

https://www.youtube.com/watch?v=wUhrYbq7t8g&index=5&list=PL90AF0EFFEF782D27
の7:40あたりを参考に。

```csharp:sample.cs
using System;
using System.Linq;

public void Main()
{
    int[] numbers = new [] {3,1,4,1,5,9,2};
    var result = 
        Enumerable.Where(numbers, n => n < 4) //<-------
        .Select(n => n);
    foreach(int idx in result)
        Console.WriteLine(idx);
}
```

```txt:結果
3
1
1
2
```
linq > .Where / .Select

https://www.youtube.com/watch?v=wUhrYbq7t8g&index=5&list=PL90AF0EFFEF782D27
の3:10あたりを参考に。

```csharp:sample.cs
using System;
using System.Linq;

public void Main()
{
    int[] numbers = new [] {3,1,4,1,5,9,2};
    var result = 
        numbers
            .Where(n => n < 4)
            .Select(n => n);
    foreach(int idx in result)
        Console.WriteLine(idx);
}
```

```txt:結果
3
1
1
2
```

http://volatileread.com/utilitylibrary/snippetcompiler?id=22794
新しいブランチを作成してコミットすべき内容を既存のブランチでコミットしてしまった時のgitでの対処方(45秒)


```bash:
$ git log
$ git revert [commit/(ex:5dfbxxx000xx....)]
$ git checkout master
$ git merge [old_branch_name]
$ git checkout -b [new_branch_name]
$ git cherry-pick [commit/(ex:5dfbxxx000xx....)]
$ git log
$ git branch -d [old_branch_name]
```

1. 取り消し対象のコミットを確認
2. コミットを取り消す
3. マスターに一度チェックアウト
4. コミットを正常に戻した元のブランチをマージ
5. 本来作業をコミットしたかったブランチを作成
6. 作成した新しいブランチに取り消したコミットを統合
7. きちんとコミットが反映されていることを確認
8. 不要になった元のブランチを削除

---
ついさっき起きた問題についての解決手法
今のPJはブランチとかPRの綺麗さにはこだわりたかったので。
他によりスマートな方法を御存知の方はぜひご教示頂きたくm(__)m
ミニマムリリースの実装としての60点リリースと40点リリース。

私のチームで使っている、スクラム開発からリーンソフトウェア開発へ移行する過程で取り入れたプラクティス
ゲーム開発に使っているがWeb開発にも使えると思う。

# 60点品質の利点
ミニマムリリースが可能になる。
「絞った」リリースとそれに沿った開発になるため、開発速度が非常に早く、UX品質も高く保てる。
リリース後のユーザー反応を見ながら後出しジャンケンでユーザー要望に基づいた優先度をつけつつ改修できる。


# 問題
「絞った」開発であるので、機能的には完成していても、使ってみると粗があったりバグが見つかったりして全体的に「使いづらい」という感覚を持ちやすい。
これはフィーチャーベースのタスク管理をしているなどの問題もあるが、その「フィーチャーベースでの完成」と「UXベースでの完成」の間を埋めるプラクティスが必要になる。
そこで、継続的デリバリーを一歩進め、40点リリースというプラクティスを導入した。
40点リリースは「フィーチャーベースで完成」したプロダクトを、テストプレイとフィードバックをへて「UXベースでの完成」に近づけるプラクティスである。

# 成果
UXベースでのユーザー反応の値が相当改善された。
テストプレイしていても使いやすいプロダクトに感じる。
優先度をつけたタスク消化をしやすいため、開発速度を落とさずにUXを高く保てた。

# 40点リリース
α版のリリースのこと。
60点リリースの前には必ずプロダクトデザイナーによるユーザー品質の担保を目的としたUXテストを行う。
プロダクトデザイナーによるα版をプレイするためのたたき台。
この40点リリースするためのブランチがmasterないしdevelopになる。すなわち、本流のブランチは常に最低でもα版程度の完成度を有していなくてはならない。

α版であるので当然粗はある。
たとえばフラグ管理がおかしくてイベントを見ていないから開かないはずの扉が開いたり、セリフがおかしかったりする。当然それはITSにタスク起票される。
しかしそれはプロダクトデザイナーにとって最もチェックしたい項目ではない。
プロダクトデザイナーはそれをプレイし、「難易度のおかしさ」「xxパラメータのゲームバランスの問題」「UX的に見てこの情報の出し方は唐突だし見落としやすい」などのフィードバックを行う。
フィードバックには「可及的速やかに直す」ものから「直さずともリリース可能」なものまである。
それを取り込み、プロダクトデザイナがOkを出すと60点リリースが可能になる。

修正者もテストプレイする必要があるが、関心の向き先が狭く、見落としやすい。
また、見落としたものを探すためにだらだらと手動テストを時間をかけて行うのは無駄である。
そこで、効率良く、深く、執念深く探し、高い品質のフィードバックを返す存在としてプロダクトデザイナーが存在する。

# プロダクトデザイナー
役職としてのロールの１つ。アメリカのゲーム業界やWeb業界に多い。
デザイナーを名乗るがWebやゲームでいうデザイナーとは異なり、「設計者」「意匠者」としての性格が強い。
デザイナーとしてのキャリアパスもUIデザイナーなどとは完全に別種であり、UXやユーザー欲求への知識と理解が求められる。

プロダクトを「ユーザー視点」で操作し、ユーザー視点に基づいた報告、提言や改修要望を出す。
100回以上のプレイを行うが、プレイのたびに「不慣れなユーザー」として振舞う。
時には「コーナーケースをつきまくる超上級者としてのプレイ」「説明の半分も読まない粗雑なプレイヤー」などの典型的なある種のロールプレイとして振舞いゲームをプレイする。

# プロダクトデザイナーに要求される能力
深いUXへの知識と理解
プロダクトの方針と哲学、ビジョンへの理解
訴求対象、プレイ対象のユーザー層の分析と理解
高いフィードバック能力
プロダクトと現実の状況とリリース戦略を理解した対応優先度の判断能力

これらの能力を備えた人間でないと単なる「α版をプレイするテスター」に成り下がる。
東プレRealForce > Mac上での使用 / Windows7 on VMWareFusionでの使用

2015年7月のメモ。

```txt:動作環境
MacOSX
Windows7 on VMware Fusion
```

VMware上のWindows7で外付けキーボードを使いたくて東プレRealForce(87UW55)を購入したのはいいが、設定がうまくいかない。

VMWare上のWindows7については101キーボードの設定をするだけで済んだ。
一方でMacOSX上ではCtrlを押してもCommandの代わりにならない。

色々情報を見て以下のサイトに辿り着いた。
http://blog.jnito.com/entry/2013/12/07/173207

KeyRemap4Macbookを導入して設定すると確かにMacOSX側でCtrlをCommandと認識するなどが機能する。しかしながらKeyRemap4Macbookが機能している間は、VMware上のWindows7ではCtrlの扱いが変わってうまく動かなくなっている。

<hr>
KeyRemap4Macbookにて2つめのプロファイルとしてWindows7というものを追加した。Windows7用の設定にして、プロファイルを切替ながら使用している。
MacへMapserverをインストールする際のメモ


## `mapserver`がパッケージとして提供されているかを確認する。

```shell-session
$ brew search mapserver
mapserver 
```

## インストールする`mapserver`のバージョンを念のため確認しておく。

```shell-session
$ brew info mapserver
mapserver: stable 6.2.2 (bottled)
Publish spatial data and interactive
mapping apps to the web
http://mapserver.org/
Not installed
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/mapserver.rb
==> Dependencies
Build: swig ✘
Required: freetype ✘, libpng ✘, giflib ✘, gd ✘, proj ✘, gdal ✘
Optional: geos ✔, cairo ✘
==> Options
--with-cairo
    Build with cairo support
--with-fastcgi
    Build with fastcgi support
--with-geos
    Build support for GEOS spatial operations
--with-php
    Build PHP MapScript module
--with-postgresql
    Build support for PostgreSQL as a data source
==> Caveats
The Mapserver CGI executable is /usr/local/Cellar/mapserver/6.2.2/bin/mapserv

If you built the PHP option:
* Add the following line to php.ini:
extension="/usr/local/Cellar/mapserver/6.2.2/php_mapscript.so"
* Execute "php -m"
* You should see MapScript in the module list
```    

ここで、気に留めておいたほうがよさそうな情報として、
    - 依存関係（Dependencies）で必要なモジュールがインストールされていないので、各種（freetypeとか）インストールされること。
    - PHP Mapscriptをビルドしたときは、`php.ini`に拡張モジュールの設定追加をしておく必要があるということ。

```
If you built the PHP option:
* Add the following line to php.ini:
  extension="/usr/local/Cellar/mapserver/6.2.2/php_mapscript.so"
* Execute "php -m"
* You should see MapScript in the module list
```

## `mapsever`のインストール

```shell-session
$ brew install mapserver --with-cairo --with-fastcgi --with-geos --with-php --with-postgresql
```

今回のインストールでは、すべてのオプションを適用した。

なお、このインストール時に以下のようなエラーが発生した場合は、[ここ](http://qiita.com/Mitsunori_Tsukada/items/667f1a81cac121d01b43)を参考にしてほしい。
他アプリからCharlestonへの放送接続命令


Charlestonは`NSDistributedNotification`というOS Xの仕組みを使って、他ソフトからの通知により、放送に接続することが出来ます。
以下にその具体的な方法を説明します。

##　NSDistibutedNotificationとは？

`NSDistributedNotification`とは、`NSNotification`サービスのOS間共通版で、この通知センターを使う事で、アプリケーションAからアプリケーションBへ通知を投げることが出来ます。

## どうやって使う？

まずは通知に使う定義の一覧です。

```objective-c:CollaborationDefinition.h
//
//  NicoLiveAlertCollaboration.h
//  NicoLiveAlert
//
//  Created by Чайка on 5/20/12.
//  Copyright (c) 2012 iom. All rights reserved.
//

#define NLAApplicationName				@"NicoLiveAlert"
#define NLABroadcastStartNotification	@"NLABroadcastStart"
#define NLABroadcastEndNotification		@"NLABroadcastEnd"

/*!
 @abstract dictionary keys of NLABroadcastStartNotification
 */
/*!
 @define ProgramURL
 @abstract program url by NSString object
 */
#define ProgramURL						@"ProgramURL"
/*!
 @define LiveNumber
 @abstract program number (lv....) by NSString object
 */
#define LiveNumber						@"LiveNumber"
/*!
 @define CommentViewr
 @abstract Wish to Open Comment Viewr by BOOL value of NSNumber object
 */
#define CommentViewer					@"CommentViewer"
/*!
 @define BroadcastStreamer
 @abstract Wish to Open Straming program by BOOL value of NSNumber object
 ex. Flash Media Live Encoder
 */
#define BroadcastStreamer				@"BroadcastStreamer"
/*!
 @define BroadcastKind
 @abstract tell a kind of this program by described enumlation Number 
 by NSNumber object
 */
#define BroadCastKind					@"BroadCastKind"

typedef NSInteger	BroadcastKind;
enum BroadcastKind {
	broadcastKindChannel = -1,
	broadcastKindUser = 0,
	broadcastKindOfficial = 1
};
```

以下にこの定義を使ってCharlestonを放送番号lvxxxxxxxxへ接続するためのメソッド例を書きます。

```objective-c:sample.m
#import "CollaborationDefinition.h"

- (void) kickCharleston:(NSString *)liveNumber
{
		// Charlestonに送る通知内容の辞書を作成
	NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
		// 辞書に内容を設定
			// URLを作成・追加
	NSString *url = [@"http://live.nicovideo.jp/watch/" stringByAppendingString:liveNumber];
	[userInfo setValue:url forKey:ProgramURL];
			// 放送番号を追加
	[userInfo setValue:liveNumber forKey: LiveNumber];
			// コメントビュワー（Charleston)に接続
	[userInfo setValue:[NSNumber numberWithBool:YES] forKey:CommentViewer];
			// ストリーミングツールは何もしない
	[userInfo setValue:[NSNumber numberWithBool:NO] forKey:BroadcastStreamer];
			// 放送の種類（ユーザー放送の場合）
	[userInfo setValue:[NSNumber numberWithInteger:broadcastKindUser] forKey:BroadCastKind];

		// 上記内容を通知
			// 通知センターインスタンスの取得
	NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
			// 通知の発行（放送開始なので、NLABroadcastStartNotification）
	[center postNotificationName:NLABroadcastStartNotification object:@"アプリケーション名" userInfo:userInfo];
}// end - (void) kickCharleston:(NSString *)liveNumber
```

ざっとこんな感じです。
Visual Effect ViewでBlurをつけてモーダル表示すると灰色になる問題の対応(※StoryBoardにてVisualEffectViewを使用)

### 何が起きていたか

Blur効果をつけたViewを持つViewControllerをモーダルで表示すると、
なぜか灰色になってしまう

### Befor

![movie1.gif](https://qiita-image-store.s3.amazonaws.com/0/15875/69d4ccbf-d478-08a9-6e71-029f10def985.gif "movie1.gif")

### AFter

![movie2.gif](https://qiita-image-store.s3.amazonaws.com/0/15875/4e28afb4-e556-c931-0297-143f39831530.gif "movie2.gif")

### 対応方法

モーダル表示時のmodalPresentationStyleをUIModalPresentationOverFullScreenにした。
これだけ

### 参考
http://justabeech.com/2014/10/22/using-uivisualeffectview-in-a-modal-view-controller/
[Objctive-C]alloc省略型イニシャライザの実装

例えば、`People`というモデルを生成する際に`initWithName:`みたいなイニシャライザを作ったとします。
そうすると、生成時は
`People*people = [[People alloc] initWithName:@"Yuki"]`
みたいになります。

ところで、Objective-Cでは段々とこのallocってわざわざ書く必要あんの…？という流れになってきています。
例えば`new`は恐らく内部で

```objc

+ (instancetype)new{
    return [[People alloc] init];
}

```
となっています。
引数を渡す場合も

`People *people = [People peopleWithName:@"Yuri"];`

って書けるといいですよね。
newの例でお分かりかと思いますが、
`+ (instancetype)peopleWithName:(NSString*)name`
というメソッドを作り、内部で`initWithName`を呼べばいいのですね。

```objc
+ (instancetype)peopleWithStatus:(NSString *)name{
    return [[People alloc] initWithName:name];
}
```

いじょ！
eclipseとGitHubの連携

#プロジェクトをGitHubで管理する
eclipseで書いたソースを共有するためにGitHubを使いました。
まずGitをインストールします。
そしてGitHubのページ上で適当にリポジトリを作ります。

##Gitリポジトリーをクローンする
elipseでgitパースペクティブを開きます。
そこから```clone git repository```を選択します。

そしたらURLを求められるので、GitHubのページ上であらかじめ作っておいたリポジトリのURLをコピペします。
あとは、自分のGitHubのユーザIDとパスワードを入力して次へ進みます。
そしたらブランチを選べと言われますが、masterしかないと思うのでそのまま次へ。
そしてクローン先のディレクトリを指定して次へ。
※apacheなどを使う場合は、そのドキュメントルートに合わせてディレクトリを指定することをお勧めします。

これでクローンは完了です。

##ローカルのプロジェクトを同期させる
適当にeclipseでプロジェクトを作ります。
そしたらWindowsならエクスプローラーで、Macならfinderでワークスペース上にあるプロジェクトをコピーして先ほどクローンしたGitリポジトリのある場所に行きます。
そのリポジトリの中にコピーしたプロジェクトを貼り付けます。

ここでGitの出番です。
Gitでクローンしたリポジトリ内のプロジェクトの中のGitHubと関連付けたいディレクトリで以下のコマンドを実行します。

```
$ touch .gitkeep
```

そしたらこのプロジェクトをGitHubと関連付けます。

```
$ git add .
$ git status
$ git commit
$ git push
```

これらを順番に実行します。
git pushでGitHubのユーザIDとパスワードを聞かれるので注意してください。

これで関連付けられたはずです。

##GitHubに関連付けたプロジェクトをeclipseにインポートする
先ほどGitHubに関連付けたeclipseのパッケージエクスプローラ上にあるプロジェクトを削除します。
そしてGitパースペクティブの、最初にクローンしたリポジトリの中にWorking Directoryというディレクトリがあるので、それを右クリックしてImport Projectを選びます。
Import Existing Eclipse projectsを選んで次へ。
ここでeclipsのパッケージエクスプローラ上に同名のプロジェクトが存在するとインポートできないので、もし存在する場合は削除します。
問題なければfinishを押せばプロジェクトがインポートされます。

これでGitHubと関連付けられたプロジェクトをeclipseで操作できるようになります。

eclipse上でコミット及びプッシュ、プルもできるので、とても便利です。

---





ほぼ備忘録に近いので、大分適当に書いてしまったので、分かりにくいかと思います。
質問やご指摘などありましたら書いていただければと思います。
ACCDEで実行されているかどうかを調べる方法

# VBA実行時にACCDEファイルで実行されているかどうかを判定する方法

- CurrentDb.Properties("MDE") で判定する方法
- 拡張子で判定する方法

Access2013で確認済み。

## CurrentDb.Properties("MDE") で判定する方法

ACCDEが作成されるときに
CurrentDb.Propertiesに MDE というPropertyが追加され
値には T が入っているようだ。
その有無でACCDEかどうかが判定できそう。

    Public Function IsAccde() As Boolean
        
        Dim result As Boolean
        
        On Error Resume Next
        result = (CurrentDb.Properties("MDE") = "T")
        On Error GoTo 0
        
        IsAccde = result
        
    End Function

## 拡張子で判定する方法

以下は単純に拡張子が "accde" かどうかで判定している。

    Public Function IsAccde() As Boolean
        
        Dim fso As Object
        Dim myExtension As String
        
        Set fso = CreateObject("Scripting.FileSystemObject")
        myExtension = fso.GetExtensionName(CurrentProject.FullName)
        Set fso = Nothing
    
        IsAccde = (StrConv(myExtension, vbLowerCase) = "accde")
        
    End Function

## 使い方
        If IsAccde Then

            ' ACCDEのときに行う処理とか
            
        End If
.bat(バッチファイル)でダイスを振るだけ。

　本当にただ2d6を振るだけのバッチファイルです。見た目はちょっとそれっぽく。

　いずれポーカーの続編のギャンブルゲームをつくるときはこれを使います()
　丁半とか２分くらいで出来そうですね。

```
@echo off
:top
set d=1
set /a n1=%random%*6/32768+1
call :d%n1%
set d=2
set /a n2=%random%*6/32768+1
call :d%n2%
set /a sum=n1+n2
cls
echo 　―――　　―――
echo %l1[1]%%l2[1]%
echo %l1[2]%%l2[2]%
echo %l1[3]%%l2[3]%
echo 　―――　　―――
echo.
echo 合計：%sum%
pause >nul
goto top

:d1
set l%d%[1]=｜　　　｜
set l%d%[2]=｜　●　｜
set l%d%[3]=｜　　　｜
exit /b

:d2
set l%d%[1]=｜●　　｜
set l%d%[2]=｜　　　｜
set l%d%[3]=｜　　●｜
exit /b

:d3
set l%d%[1]=｜●　　｜
set l%d%[2]=｜　●　｜
set l%d%[3]=｜　　●｜
exit /b

:d4
set l%d%[1]=｜●　●｜
set l%d%[2]=｜　　　｜
set l%d%[3]=｜●　●｜
exit /b

:d5
set l%d%[1]=｜●　●｜
set l%d%[2]=｜　●　｜
set l%d%[3]=｜●　●｜
exit /b

:d6
set l%d%[1]=｜●　●｜
set l%d%[2]=｜●　●｜
set l%d%[3]=｜●　●｜
exit /b
```
Vagrantのデフォルトのsshフォワーディングポートを変える

Vagrantは、デフォルトの2222番ポートが使われていると、別ポートでフォワーディング設定してくれるが、いろいろ困ることがあるので固定化したい。

Vagrantfileの `forwarded_port` の設定に、`id: "ssh"`を付けて書けばよい。

```ruby:Vagrantfile
Vagrant.configure(2) do |config|
  # --- (snip) ---

  config.vm.network "forwarded_port", guest: 22, host: 12222, id: "ssh"

  # --- (snip) ---
end
AffeldtさんのSsreflect練習問題exo4

```coq:logical_example.v
Lemma exo4 : False \/ True.
Proof.
  right. exact I.
Qed.
```

講義資料や、ソースコードはこちら: https://staff.aist.go.jp/reynald.affeldt/ssrcoq/
KotlinAndroid で JUnit4 Testを書く

# 設定

build.gradleにKotlinとAndroidTestの設定を入れる。

```groovy:build.gradle
buildscript {
    ext.kotlin_version = '0.12.613'

    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
```

```groovy:app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "me.mattak.kotlinandroidtestsample"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

    androidTestCompile 'com.android.support.test:runner:0.3'
    androidTestCompile 'com.android.support.test:rules:0.3'
}
```

`testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"` を忘れがちなので注意。

`com.android.support.test` パッケージを使うとJUnit4サポートが簡単。

# Test

```kotlin:ApplicationTest.kt
package me.mattak.kotlinandroidtestsample

import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4
import org.junit
import org.junit.runner.RunWith
import kotlin.test.assertEquals

/**
 * ApplicationTest
 */
RunWith(AndroidJUnit4::class)
public class ApplicationTest {
    junit.Before
    public fun setup() {
        // something setup
    }

    junit.After
    public fun teardown() {
        // something teardown
    }

    junit.Test
    public fun packageName() {
        assertEquals(InstrumentationRegistry.getTargetContext().getPackageName(), "me.mattak.kotlinandroidtestsample")
    }
}
```

`RunWith(AndroidJUnit4::class)` してあげる点と、`junit.Test`のアノテーションをつける点を忘れなければ大丈夫。

`Context` は JUnit4から `InstrumentationRegistry.getTargetContext()` から取るようになったようだ。

# SampleCode

KotlinAndroidTestSample

- https://github.com/mattak/KotlinAndroidTestSample

確認にどうぞ。`./gradlew connectedCheck --info` で実行できます。
nfcカードの仕様について

IDmとPMmは、カードに固有の数値っぽい。
SYSTEMCODEはアプリケーションごとに定義されたコード。Suicaだと0003となっていて、今手持ちの白無地のICカードはFFFFとなっている。

システムコードは、リーダ／ライタがカード（システム）を特定するのに使われている。
リーダ/ライタがカードを認識するためには、Polling コマンドによる不特定多数のカードへのよびかけ を行う必要がありますが、**システムコードは Polling コマンドのパラメータとして指定**され、システム は、アンチコリジョン処理の前段階として**システムコードが一致した場合のみ応答を行います。**1 枚のカ ードがシステム分割されている状態でも、リーダ/ライタからは各システムが 1 枚のカードとして認識 されますので、システム 0~システム n のいずれかのシステムコードを Polling コマンドで指定すること により、リーダ/ライタは目的のシステムを捕捉することが可能です。
参考:http://www.sony.co.jp/Products/felica/business/tech-support/data/card_usersmanual_2.0.pdf

ちなみに、アンリコリジョンとは、
リーダー/ライターが**複数の無線ICタグのデータを同時に読み取る**機能のこと。アンチコリジョンに未対応の場合、複数のICタグと同時に通信しようとすると、ICタグからの通信が衝突（collision）を起こす。この衝突を避けるために、ICタグとリーダーの通信方法を工夫している。
参考:http://itpro.nikkeibp.co.jp/article/Keyword/20070406/267585/

ポーリングとはネットワークに接続された複数の端末に対し，送信要求の有無を，順次問い合わせ，許可をすること。

NFCカードは、ファイル構造を持っている。その階層構造は、システム、エリア、サービス、ブロックとなっている。
僕のUnityあんちょこ

# ここはどこ？
- 自分がハマったりしたunityに関するどうでもよいプチメモを書いて置く場所です。
- 何か書きたいことが出来るたびに更新されると思われます。

# わたしはだあれ？
- unity歴で言うと2年かもしれないけど、実稼働時間でいうと多分１５日にも満たない…というペーパードライバー的Unity初心者
- Unityでゲームを作るというより興味のある事をやるための手段がUnityっていうライトユーザー

# あんちょこ
## transform.parentとSetParentの挙動
- GameObjectで親子関係を作るには、gameObjXXX.transform.parent に親のtransformを入れるだけ
- だけど、そうすると、ワールド空間上での相対的な位置を引き継ぐという余計な機能が働く（エディタ的には素晴らしい機能だけどスクリプト的には余計です）
- Unity4.6から、SetParent(parentGameObj,false)とやるとその機能をKill出来るそうです。
- 情報もとは[コチラ](http://baba-s.hatenablog.com/entry/2014/08/26/100613)です。


#そのほか

## Unityって左手座標系
- 気にして無かったけど…
- DirectX使ってるわけでもないのに右手じゃないんだ…へぇ…無条件で右だと思い込んでた。それでも気にせず扱えるところがUnityか…
- http://mabulous.com/understanding-and-interpreting-the-homogeneous-transformation-matrix-in-3d-space
- 行列から軸を取り出す時とかAtan2の角度扱うときは重要だから間違えないようにしないと。
続・丸の内 MongoDB 勉強会 #22 に行ってきた


丸の内 MongoDB 勉強会 #22 に行ってきたので，内容走り書き．
[前回](http://qiita.com/Mura-Mi/items/e8a0247beed1b18b41c5) は前半のハンズオンについて書いたので，後半のセッションについて．
前回に続き，個人的な興味の濃淡で多少の記述の厚さに差があるのはご容赦ください．

# 勉強会詳細
https://mongonouchi.doorkeeper.jp/events/26940
ハンズオンと最近開催された MongoDB World のサマリーについて．特に MongoDB の特長の話やハンズオンについては，最新の v3.0 についての話あり．

# Part2: MongoDB World 2015 レポート
[鈴木逸平さん](https://twitter.com/cloudnewscenter) が以下のスライドを元に発表．
https://www.evernote.com/l/ABVCk0Cx0O9N64dDScAklBn9jwPvFl9lOyA
https://www.evernote.com/l/ABU3ZSvOqGtPZYFkIlBrupuesFtzkzuvK50
https://www.evernote.com/l/ABXCjbA83XdKn4nYJxlm_KJmlmx8k5ifoyk

話の要点をいくつか．

## CEO 交代
MongoDB 2014 と MongoDB 2015 の一番の違いは Keynote を担当する CEO が変わったこと．新 CEO の Dev Ittycheria が MongoDB にジョインした背景には，会社を "Public" にする目論見があるのでは，という鈴木さんの見解．つまり IPO ということになるが，それは Oracle という牙城を崩すという話ではない．そもそも，MongoDB は RDBMS をすべてリプレイスする製品ではない．

## MongoDB の市民権
DBEngines 誌の発表した「世界で使われているデータベースランキング」では MongoDB は 4 位にランクインしている．上位3データベースが 20 年以上の実績を誇る (Oracle, MySQL, MS SQL Server) ことを考慮すると，MongoDB の急成長ぶりが伺える．
鈴木さんが今回の Keynote から感じた印象のひとつは，MongoDB はスタートアップという立ち位置から安定的な成長へとシフトし始めているということだったそうだ． **同時期に開催された Chef, Docker, Spark などのカンファレンスでは，次々と新しい機能やプロダクトの発表をするド派手な印象を受けたのに対し，MongoDB は既に抱えている多くのユーザーの満足を高めてゆくに加えて，少しずつその規模を大きくしていけば良いという安定した成長をめざすようになっている**とのこと．

## MongoDB 3.0
### WiredTiger
MongoDB 3.0 で追加された WiredTiger ストレージエンジンは，3.2 でデフォルトとする予定．WiredTiger は，IoT (Internet of Things) などの "Write Heavy" なユースケースに非常にマッチしている．この点に関しては，MongoDB がビジネスのトレンドに当てに来ている，MongoDB がビジネスを強く見据えている，という印象を受けた．

### Strage Engine API
MongoDB 3.0 はストレージエンジンを統合できる Pluggable なアーキテクチャになっている．
Facebook は既に自社製の RocksDB を MongoDB に統合して利用している．

### Automation
MongoDB 2.6 までのクラウド環境の MongoDB マネージャである MMS に加えて，オンプレミス環境でのバックアップや監視を担当する OpsManager をリリース．

## MongoDB 3.2
夏後半にベータ版をリリースし，2015年末にリリースする予定．
以下の様な機能拡張を予定している．

### スキーマ管理機能の強化
スキーマレスであることが MongoDB の魅力だが，自由すぎるがゆえの課題が幾つかあった．それを克服する新機能を導入する．

* PartialIndex: コレクションに属するすべてのドキュメントに対してインデックスを張ってしまうと無駄が多い．そのため，インデックス定義時にフィルターを定義して，そのフィルターに合致するドキュメントにのみインデックスを適用することができるようになる．
例えば，ユーザーのうちアクティブユーザーにのみインデックスを張る，といったユースケースが考えられる．
* Validation: コレクションに挿入されるドキュメントはそれぞれスキーマレスであるが，そのスキーマに制限をかけることができるようになる．例えば「person コレクションに挿入されるドキュメントは age キーに対応する値が定義されており 21 以上であるべき」など．
* Scout: コレクションの状況を可視化させる機能．ドキュメントの保持する特定のキーの値のヒストグラムや，キーの有無を可視化．例えば gender キーの有無，その gender キーを持つドキュメント群について分布を棒グラフにする，など．

### Aggregation Framework の強化
MongoDB には強力な Aggregation Framework を実装しているが，使える演算子が拡充される．中でも注目されるのが `$lookup` 演算子．これは SQL の `JOIN` に近い動きをし，集約対象のコレクションに他のドキュメントの情報を外部キー参照で結合させる事ができる．例えば商品カタログのコレクションと注文のコレクションが存在し，注文内容を商品カタログの属性を用いて集約する，など．

### BI Connector
Tableau などの BI ツールとのコラボレーションが容易になる，らしい．そのデモンストレーション
ただし，そのような API を公開する，という話よりも，「ほら，Tableau と簡単に結合できて難しい Aggregation Framework」もグラフィカルに操作できるよ，という宣伝色が強かった，らしい．(ここらへんがどのような話のテイストだったかはよくわからなかったので，後で自分で Keynote の映像を見て確認したい．)
BluemixでInternet of Things Foundationを試してみよう

最近、IBMのクラウド開発環境、Bluemixのコマーシャルを、あちこちで見かける。

体験してみたいけど、時間もないし、プログラムもかけないよって思っていたら、友達が流行のInternet of Things を教えてくれることになった。

Internet of Things（IoT）とは、世の中に存在する様々なモノに通信機能を持たせ、インターネットに接続し相互に通信することである。つまり、モノとモノがITによってつながり、さまざまなサービスを提供する。す、すごい。。。遠隔から電話も家電もつながってしまうんだ。そんな流行のIOTを、5分で体験した。

以前、BluemixのIDは取ってあったから、まずログインしてみる。

ログインしたら、カタログを眺める。四角いボイラープレート（セットメニュー）と丸いランタイム（言語）と六角形のサービス（機能）がずらっと。
![1.JPG](https://qiita-image-store.s3.amazonaws.com/0/86457/137568de-37d3-1f22-4bdb-dadfa92dec9d.jpeg)


初心者の私は、ボイラープレートでいいらしい。IOTを選択して、好きなアプリ名を入れたら、”作成”ボタンを押す。ここで、自分だけのクラウド開発環境ができてしまうから、他の人と名前がかぶならいのにしよう。
![2.JPG](https://qiita-image-store.s3.amazonaws.com/0/86457/594d3e5b-988e-66c0-d098-28ad92afca0e.jpeg)


”作成”おしたら、一瞬画面が暗くなり不安に。。なった瞬間、Bluemixの濃いブルーの画面にもどって、クルクル。待つこと30秒。

あ、なんか終了したようだ。これでできあがり？？？ますます不安になってきた。なにができたか、自分のアプリ名をクリックする。
![3.JPG](https://qiita-image-store.s3.amazonaws.com/0/86457/e9f64614-2bfa-73b8-7c5e-3ff30d42ce4a.jpeg)


Bluemixには、Node-RedというIOT用のフローエディターのが用意されているようだ。Node-Redが立ち上がったら、下にスクロールして赤いボタンをおす。
![5.JPG](https://qiita-image-store.s3.amazonaws.com/0/86457/e8a67bf1-385d-ef3f-ee02-53743fc21849.jpeg)

フローエディターだ。左の部品をひっぱって、白いキャンバスにおいてみる。あ、おもしろい。右上の＋をクリックして、新しいキャンバスをひらく。

左のInput部品の一番したにある、ibmiotを置く。それからOutput部品は一番上にある、Debugger。この2つの部品を線でつなげる。
![7.JPG](https://qiita-image-store.s3.amazonaws.com/0/86457/cd8039e1-5575-817d-70dc-2d1358867231.jpeg)

ibmiot部品をクリックして、最初のタブを”Quick Start"に変更。
![8.JPG](https://qiita-image-store.s3.amazonaws.com/0/86457/a9f5b58f-ad72-a1ea-e7b9-459349cb950c.jpeg)


さて、ここで私のiPhoneを、加速度センサーに見立てるために、”phonesensor.mybluemix.net"に接続。そこに出てくる、Sensor IDを、さっきのibmiotのQuick Startの下にある、IDに入力する。
![10.JPG](https://qiita-image-store.s3.amazonaws.com/0/86457/00be1675-35d0-43b4-0165-dbdee2d4a0a8.jpeg)

Node-Redで作った、このフローをBluemixにDeployために、右上にある赤い”Deploy"ボタンをおす。


さあ、できあがり。

右端のタブを開いて、Debug画面を下にスクロールしてみてみよう。あ、私のiPhoneの傾きがリアルタイムに表示されている～～～～。すごい。
![9.JPG](https://qiita-image-store.s3.amazonaws.com/0/86457/8c0b4eb8-a2f0-1f8a-ecef-db6489e29dfb.jpeg)

たった5分で、アプリ開発したような気分になった。こんな簡単にプログラムできる時代がきたんだ。センサーやウエブカメラとかもつなげられるかな、自宅の猫も留守中いつでも見れるアプリ、私も作れるかも。

私も友達に教えてあげよ。
Proxy経由が必要なWindows8環境でboot2docker 1.7.1を使うためのメモ

Proxy経由で通信が必要な環境下かつ、
Windows8上にboot2dockerをインストールした際に、いろいろとはまったのでメモ。
いろんなサイトを見れば動かせるのですが、サイト渡り歩くのも面倒なので、
ここに一通り手順を書いておきます。
#### 0. 前提条件は以下
1. Proxy経由しないといけない。
2. Windows環境である。
　※Macでも手順は同じと思います。
3. boot2dockerでdockerを使いたい。

#### 1. boot2docker取得
媒体のdownloadは以下のサイトで可能です。
[boot2docker download](http://boot2docker.io/)
※この記事を書いた時点では1.7.1が最新でした。

#### 2. boot2dockerインストール
インストールはダブルクリックのみですが、
以下VirtualBoxとmsysGitのインストールはオプションとなります。
![インストール.png](https://qiita-image-store.s3.amazonaws.com/0/69235/df8a2f4a-7e29-c52d-f21b-c8eb13fc4ebf.png)

私がセットアップした端末はVirtualBoxをすでにinstall済み。
VirtualBoxのVersionが4.3.8で古いのでダメかなと思いつつ、
好奇心もあってVirtualBoxをSkipしてinstallしたのですが、
動きませんでした。(> <)

boot2dockerをインストールできたように見えても、
ログインのパスワードを聞かれてしまのだが、
dockerユーザのpasswordを入力しても、ログインできない。。。
最新のVirtualBoxに更新してあげましょう。

#### 3. Proxy設定
Proxy環境下では、2つのProxy設定を行う必要があります。
1. Hostマシン(ここでいうWindowsマシン)
2. boot2dockerのVMマシン
まずはNo1を設定します。

WindowsでもMacでも以下の3つの環境設定が必要とのことなので、設定しましょう。
`HTTP_PROXY=http://your.proxy.name:8080`
`HTTPS_PROXY=http://your.proxy.name:8080`
`NO_PROXY=xxx.xxx.xxx.xxx,localhost,127.0.0.1`
※xxx.xxx.xxx.xxxはBoot2dockerのIPアドレスを指定するとのこと。
　デフォルトでは192.168.59.103のはず。
![Proxy.png](https://qiita-image-store.s3.amazonaws.com/0/69235/c913d2a7-8b53-be1d-4cd0-814d114f6f94.png)

#### 4. boot2dockerの初期化
デスクトップにあるBoot2Docker Startを起動すればＯＫ。
すでにProxyが通っているため、特にはまらないはず。
※ここでパスワード入力聞かれるようだと、VirtualBoxのVersionが
　古くないか確認した方がよいでしょう。

#### 5. boot2docker VMのProxy設定
boot2dockerのVersionによって変わるようですが、
1.7.1では以下のファイル作成し設定を記載すればよいです。
/var/lib/boot2docker/profile

以下のように記載してくれれば大丈夫です。
`export HTTP_PROXY=http://your.proxy.name:8080`
`export HTTPS_PROXY=http://your.proxy.name:8080`

上記記載後に再起動しましょう。

#### 6. 動作確認
やっと設定は一通り完了です。以下のコマンドを打って、
Proxy設定が正しくできているか確認しましょう。
`docker run hello-world`
![HelloDocker.png](https://qiita-image-store.s3.amazonaws.com/0/69235/99cf198a-4f74-e24a-cc1d-c329f575ea70.png)

上記のように「Hello from Docker.」と表示されればＯＫです。
これでboot2dockerを使う準備は完了です。
※こうして見るとMacとWindowsで変わる部分はほぼないですね。

以上
Haskell開発環境の構築 (Linux編)

## はじめに
この記事では、以下二点を目標に話を進める。

* Linux 上に最低限の Haskell 開発環境を構築する
* vim で ghc-mod による入力補完が使えるようにする

以下の点は扱わない。

* cabal ファイルの書き方
* stack の使い方
* vim プラグインの導入/使い方

## stack 導入
Haskell 環境構築のため、まずは stack を導入する。
stack は最近登場した Haskell のパッケージ管理/ビルドツール[^1]で、色々便利なので入れておく。


* How To Install の項を参考に stack をインストール
    * https://github.com/commercialhaskell/stack

筆者の利用する Arch Linux では yaourt で導入可能。

```bash
yaourt -S haskell-stack
```

## GHC とライブラリの導入
導入は stack が自動でやってくれる。

* 以下コマンドを実行

```bat:
stack setup
```

## プロジェクト作成
stack を使ってプロジェクトを作成する。


```bash
# 作業ディレクトリに移動
cd workspace/sample

# プロジェクトの作成
stack new

# ビルド
stack build

# 実行
stack exec new-template-exe
```

## ghc-mod 導入
Haskell の高度な補完のため、 ghc-mod を導入する。

```bash
stack install cabal-install ghc-mod
```

## ghc-mod のラッパー作成
ghc-mod などのツールは stack exec コマンド経由でのみ実行可能であり、このままでは vim から認識できない。vim から認識させるため、Haskell プラグイン自体を修正してもよいが、今回はラッパースクリプトを用意して対応する。

* 以下のスクリプトをパスの通ったところ(/usr/local/bin など)に配置する。

```bash:ghc-mod
#!/bin/sh

stack exec -- ghc-mod $*
```

```bash:ghc-mod-configure
#!/bin/sh

PATH=$(stack path --bin-path):$PATH cabal configure \
  --package-db=clear \
  --package-db=global \
  --package-db=$(stack path --snapshot-pkg-db) \
  --package-db=$(stack path --local-pkg-db)
```

* プロジェクトの状態を更新する
    * cabal ファイル更新のたびに再実行が必要

```bash
# 作業ディレクトリに移動
cd workspace/sample

# 更新
ghc-mod-configure
```

## vim

neobundle で以下のパッケージをインストールする

* [Shougo/neocomplete]("https://github.com/Shougo/neocomplete.vim")
* [eagletmt/neco-ghc]("https://github.com/eagletmt/neco-ghc")
* [eagletmt/ghcmod-vim]("https://github.com/eagletmt/ghcmod-vim")

設定は適宜

## スクリーンショット
![vim-ghc-mod.png](https://qiita-image-store.s3.amazonaws.com/0/16112/a18c4376-e5df-8337-83c4-4d1863642ac5.png)


## 課題

* cabal ファイル変更時に stack build, ghc-mod-configure の再実行が必要

## 参考/関連

* [Haskell開発環境の構築 (Windows編) - Qiita]("http://qiita.com/td2sk/items/9e4b49a4a31b7138d3ad")
* [Atomのhaskell-ghc-modをstack使用時にも動くようにする - Qiita](http://qiita.com/belliture/items/d2bb5326e427f1e32163)
* [Haskellの単体テスト最前線 - あどけない話](http://d.hatena.ne.jp/kazu-yamamoto/20121205/1354692144)

[^1]: Rubyist 向けにいうと、 stack ≒ rbenv + ruby-install + bundler + rake
max-widthのリセットはautoではなくinitialを使う

レスポンシブデザインなど、画像幅をリキッド(親の幅に準ずる)にするために下記のような設定をよくします。

```css
img {
  max-width: 100%;
}
```

オーバーフローするdivに入れる場合など、個別に「ここは親の幅に関わらず固定幅で表示したい」「でもimgの幅は不確定」という時は `initial` を使ってリセットしないと元に戻りません。(`initial` はCSS3から使える設定値です。)

```css
img {
  max-width: initial; /* 初期状態にリセット */
}
```
`auto` で行けそうな気がしてしまいますが、これは効かないので注意です。

```css
img {
  max-width: auto; /* これは効かない */
}
```



デモはこちら
http://codepen.io/skwbr/pen/XbBZaQ
Apple Watch テキスト入力

## watchOS によるテキスト入力
Apple Watch では、物理キーボードやタッチパネルからのキーボード入力は行うことができません。

そのため、Apple Watch では定型文を用意しユーザーに選んでもらうことで文字を入力します。
また、定型文に存在しない文字も入力したい場合も必ず存在します。
そういった場合は、音声入力機能(Siri)を利用することで自由自在に文章を入力すことが可能です。

## WKTextInputMode
Apple Watch でのテキスト入力方法を決める列挙型 

```
enum WKTextInputMode : Int {
    
    case Plain // text (no emoji) from dictation + suggestions
    case AllowEmoji // text plus non-animated emoji from dictation + suggestions
    case AllowAnimatedEmoji // all text, animated emoji (GIF data)
}
```

* Plain : 音声＋定型文
* AllowEmoji : 絵文字＋音声＋定型文
* AllowAnimatedEmoji : アニメーション絵文字＋音声＋定型文

## presentTextInputControllerWithSuggestions
Apple Watch の標準入力インターフェースを表示させる

```
func presentTextInputControllerWithSuggestions(suggestions: [String]?, allowedInputMode inputMode: WKTextInputMode, completion: ([AnyObject]?) -> Void)
 // results is nil if cancelled
    
```
* suggestions: [String]? : 定型文として表示する文字列を配列で渡す
* inputMode: WKTextInputMode : 入力インターフェイスを設定する
* completion: ([AnyObject]?) -> Void) : ユーザーが入力した値が、配列の中に格納されて呼び出される


## dismissTextInputController
表示されている Apple Watch の標準入力インターフェイスを消す

```
func dismissTextInputController()
```

## 使用例
```
let suggestions: Array<String>! = ["はい、なんでしょう？", "今、向かっています。","わかりました。"]
self.presentTextInputControllerWithSuggestions(suggestions, allowedInputMode: .Plain) { (objects: [AnyObject]?) -> Void in
            // 入力されたテキスト内容を処理する
}

...
self.dismissTextInputController()
```
![IMG_0026.jpg](https://qiita-image-store.s3.amazonaws.com/0/85718/91fc4840-517b-1d76-7f0f-6f446cdbbc79.jpeg "IMG_0026.jpg")
Swift初心者忘備録 : 定数

Swift で定数を宣言するには


```
let 定数名: 型名 = "初期値"
```
**変数とは異なり、定数を使う場合は宣言時に初期値を格納しなければいけない。**

######サンプル： myFirstConst という定数を String 型 で宣言し、文字列 Hello を初期値として格納
```
let myFirstConst: String = "Hello"
```

とする。もしくは、*型推論* を利用して型名指定を省略することもできる。

######サンプル： mySecondConst という定数を宣言する。初期値 1.0 を格納するため型推論が働くので型名表記は省略できる。
```
let mySecondConst = 1.0
```

Swift で 定数を利用するにあたっての注意は、

* 定数名は基本的に英小文字で始まるキャメルケースで表記する。myfirstconst は myFirstConst とする。
* 定数名に日本語や絵文字も使えるが、基本使わない。
* 定数名に利用する記号は _ のみ。my_First_Const のように使える。
* 定数名途中もしくは最後に数字が使える。my1stConst, my2ndConst, my3rdConst...
* 定数は名前のとおり、宣言後は値を変更することができない。もし、値が変わらない状況が想定されているならば、その値格納には定数を使うこと。
Kobitoのデータをバックアップするシェルスクリプト


## はじめに

ドットインストールのシェルスクリプト入門を見たので、せっかくだから勉強がてら何かを書こうと思い、Kobitoのデータをバックアップするシェルスクリプトを書きました。

## 環境

* MacOS X 10.10.4 Yosemite
* Kobito 2.3.2


## 前提
### Kobitoのデータ

Kobitoのデータは、
**~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito**
にある

* **Kobito.db**
* **Kobito.db-shm**
* **Kobito.db-wal**
* Kobito.db.xxxxxxx.bak

の3つ(4つ)。

Kobitoのデータの保存は、

* Kobitoを終了する
* メニュー - アイテム - 保存 を選択する

の2つの時にされるっぽい。


## スクリプト
### コード

```backup_kobito.sh
#!/bin/bash

# データをバックアップするディレクトリ
backup_dir_path=~/Dropbox/project/Kobito
# Kobitoの元データ保存されているディレクトリ
data_dir_path=~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito

# バックアップディレクトリの作成
if [ ! -e $backup_dir_path ]; then
  mkdir -p $backup_dir_path
fi

# バックアップファイルネームの作成
date=`date +"%Y%m%d"`
db_filename=Kobito.db.$date.bak
db_shm_filename=Kobito.db-shm.$date.bak
db_wal_filename=Kobito.db-wal.$date.bak

# バックアップ処理
echo "バックアップディレクトリは $backup_dir_path です"

cp -p $data_dir_path/Kobito.db $backup_dir_path/$db_filename && echo "Kobito.db を $db_filename としてバックアップしました"

cp -p $data_dir_path/Kobito.db-shm $backup_dir_path/$db_shm_filename && echo "Kobito.db-shm を $db_shm_filename としてバックアップしました"

cp -p $data_dir_path/Kobito.db-wal $backup_dir_path/$db_wal_filename && echo "Kobito.db-wal を $db_wal_filename としてバックアップしました"
```


### 説明

#### 4-7行目:ディレクトリの指定
backup_dir_pathにバックアップを作成するディレクトリを指定する。
上のコードは、"~/Dropbox/project/Kobito"ディレクトリを指定している。

#### 9-12行目:バックアップディレクトリの作成
バックアップを作成するディレクトリが存在しなければ作る。

#### 14-18行目:バックアップファイルネームの作成
バックアップファイルネームはそれぞれ、"(元のファイルネーム)YYYYMMDD.bak"。
例えば、Kobito.dbを2015年7月16日にバックアップすると、"Kobito.db.20150716.bak"という名前になる。

#### 20-27行目:バックアップ処理
ファイルのバックアップに成功すると、バックアップした旨を表示する。


## 実行

```
$ chmod 744 backup_kobito.sh
$ ./backup_kobito.sh
Kobito.db を Kobito.db.20150716.bak としてバックアップしました                           
Kobito.db-shm を Kobito.db-shm.20150716.bak としてバックアップしました                   
Kobito.db-wal を Kobito.db-wal.20150716.bak としてバックアップしました
```

```
$ ls ~/Dropbox/project/Kobito                                                                                  Kobito.db-shm.20150716.bak
Kobito.db-wal.20150716.bak
Kobito.db.20150716.bak
```


## 以上

すでに同名バックアップファイルが存在した時の上書き処理があった方がいいんだろうけど、どういう処理がベストなのかよくわからない……
Haskell開発環境の構築 (Windows編)

## はじめに
この記事では、以下二点を目標に話を進める。

* Windows 上に最低限の Haskell 開発環境を構築する
* Atom で ghc-mod による入力補完が使えるようにする

以下の点は扱わない。

* cabal ファイルの書き方
* stack の使い方

## stack 導入
Haskell 環境構築のため、まずは stack を導入する。
stack は最近登場した Haskell のパッケージ管理/ビルドツール[^1]で、色々便利なので入れておく。

* 以下のリンクから最新のバイナリを入手
    * https://github.com/commercialhaskell/stack/releases/
* 入手したバイナリを stack.exe にリネームして、パスの通ったところに配置

## GHC とライブラリの導入
導入は stack が自動でやってくれる。

* 以下コマンドを実行

```bat:
stack setup
```

* 完了すると以下のようなメッセージが表示される。環境変数への追加は行わなくてもよい

```bat
Would add the following to PATH:
 C:\Users\<username>\AppData\Local\Programs\stack\x86_64-windows\ghc-7.8.4\bin;C:\Users\<username>\AppData\Local\Programs\stack\x86_64-windows\ghc-7.8.4\mingw\bin;C:\Users\<username>\AppData\Local\Programs\stack\x86_64-windows\git-2.4.5.1\cmd;C:\Users\<username>\AppData\Local\Programs\stack\x86_64-windows\git-2.4.5.1\usr\bin
```

## プロジェクト作成
stack を使ってプロジェクトを作成する。


```bat
REM 作業ディレクトリに移動
cd workspace\sample

REM プロジェクトの作成
stack new

REM ビルド
stack build

REM 実行
stack exec new-template-exe
```

## ghc-mod 導入
Haskell の高度な補完のため、 ghc-mod を導入する。

```bat
stack install cabal-install ghc-mod
```

## ghc-mod のラッパー作成
ghc-mod などのツールは stack exec コマンド経由でのみ実行可能であり、このままでは Atom から認識できない。Atom から認識させるため、Haskell プラグイン自体を修正してもよいが、今回はラッパースクリプトを用意して対応する。

* 以下のスクリプトをパスの通ったところに配置する。

```bat:ghc-mod.bat
@stack exec -- ghc-mod %*
```

```bat:ghc-mod-configure.bat
@FOR /F "usebackq" %%t IN (`stack path --snapshot-pkg-db`) DO @SET SNAPSHOT_DB=%%t
@FOR /F "usebackq" %%t IN (`stack path --local-pkg-db`) DO @SET LOCAL_DB=%%t
@FOR /F "usebackq" %%t IN (`stack path --bin-path`) DO @SET BIN_PATH=%%t
@SET PATH=%PATH%;%BIN_PATH::C:\=;C:\%
@cabal configure --package-db=clear --package-db=global --package-db=%SNAPSHOT_DB% --package-db=%LOCAL_DB%
```

* プロジェクトの状態を更新する
    * cabal ファイル更新のたびに再実行が必要

```bat
REM 作業ディレクトリに移動
cd workspace\sample

REM 更新
ghc-mod-configure
```


## Atom

以下のパッケージをインストールする

* language-haskell
* autocomplete-haskell
* haskell-ghc-mod

## スクリーンショット
![atom-ghc-mod.png](https://qiita-image-store.s3.amazonaws.com/0/16112/e1629810-bc32-90fa-9e61-12d2faa5205f.png)



## 課題

* cabal ファイル変更時に stack build, ghc-mod-configure の再実行が必要
    * 忘れると Atom 上に大量のエラーが……
    * 自動化できそうだけど Windows のバッチファイル書きたくない

## 参考/関連

* [Haskell開発環境の構築 (Linux編) - Qiita]("http://qiita.com/td2sk/items/378a423bd4324bf99361")
* [Atomのhaskell-ghc-modをstack使用時にも動くようにする - Qiita](http://qiita.com/belliture/items/d2bb5326e427f1e32163)
* [Haskellの単体テスト最前線 - あどけない話](http://d.hatena.ne.jp/kazu-yamamoto/20121205/1354692144)

[^1]: Rubyist 向けにいうと、 stack ≒ rbenv + ruby-install + bundler + rake
Swift初心者忘備録 : 変数

Swift で変数を宣言するには


```
var 変数名: 型名 = "初期値"
```

######サンプル： myFirstVar という変数を String 型 で宣言し、文字列 Hello を初期値として格納
```
var myFirstVar: String = "Hello"
```

とする。もしくは、*型推論* を利用して型名指定を省略することもできる。

######サンプル： mySecondVar という変数を宣言する。初期値 1.0 を格納するため型推論が働くので型名表記は省略できる。
```
var mySecondVar = 1.0
```

Swift では *型*　があるので、変数が持つ型と異なる値は格納できない。

```
var typeTest: String = "文字列を格納"
typeTest = 123 // ←これは型に反する値格納なのでエラーになる
```

Swift で 変数を利用するにあたっての注意は、

* 変数名は基本的に英小文字で始まるキャメルケースで表記する。myfirstvar は myFirstVar とする。
* 変数名に日本語や絵文字も使えるが、基本使わない。
* 変数名に利用する記号は _ のみ。my_First_Var のように使える。
* 変数名途中もしくは最後に数字が使える。my1stVar, my2ndVar, my3rdVar...
* 変数は名前のとおり、宣言後に値を変更することができる。
Kobito for Windows のフォントを変更した

そもそもこんなことやる必要なかったみたい。

http://qiita.com/mizchi/items/c0eb14c8da7709b427f2

---

PC移行に際して、Kobito for Windows をWin8に入れたら、フォントが游ゴシックがメインで指定されているので変えました、という話です。

游ゴシックいいんですけど、ウェイトノーマルだと細すぎませんかね。ちょっとだけ読みづらいのです。まだ慣れないだけかはわかりません。ウェイトいくつかありますけど、ブラウザ通して表現できるのって、light, normal, bold な気がしてて（さらっと dev tool でfwをnumericな値で変更かけてみただけ）、normal だとうっすい印象なのです。

好みなんでしょうけど、asar を展開してcss編集しただけ。

## asar install

```bash
$ npm install -g asar
```

## 展開して編集するファイル

/kobito/resources/app/versions/1.4.0.asar
バージョンは自動アップデートになったからアップデート時に上書きされるかもね。

```bash
$ asar e 1.4.0.asar extract
```

extract というディレクトリができます。
```
css/
  - dark-theme.css
  - default-theme.css
```
っていう2つのテーマのcssがあるのでそちらを編集。

```css
    font-family: "游ゴシック", "Yu Gothic", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "メイリオ", "Meiryo", sans-serif;
```

だったところから `"游ゴシック", "Yu Gothic", `を削除するだけですね。
ただ、編集画面の左ペインでまだ游ゴシック効いてたのはインラインでのfont-family指定されてたので、

```css
.CodeMirror pre {
    font-family: "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "メイリオ", "Meiryo", sans-serif !important;
}
```

を追加して強烈にしてあげる。
cssを上書きしたら、

```bash
$ asar p extract 1.4.0.asar
```

Kobitoを起動したらフォント変わってるはずです。


## 結果

Before:游ゴシック
![kobito_before.PNG](https://qiita-image-store.s3.amazonaws.com/0/37611/12f32a6c-5f6f-3031-b2c0-3d34764205f1.png)

After:メイリオ（メイリオ！？）
![kobito_after.PNG](https://qiita-image-store.s3.amazonaws.com/0/37611/a5d5682f-9e9e-1bce-70c7-39eb8560d5e7.png)

※ version 違うのはキャプチャとるときの横着
※ メイリオのほうが読みやすいと感じるのは私だけでしょうか

---

本日は以上です。
Studying about Web framework


In description....

# What Do I want to do?

## Background

### Media
I use media such as Facebook, Twitter and Web site for communication to many people and for promotion about JID. But, it is difficult to analyse combined each tools because these media are divided. It is expected that the particular feedback of media is studying itself and combined with the other feedback.

### Analytics Tools
I want to integrate some analytics tools such as [Facebook Insight](https://www.facebook.com/help/336893449723054/), [Google Analytics](http://www.google.com/analytics/), [Twitter Analytics](https://analytics.twitter.com/). I do not want to integrate on local because that I should download the value of the each tools whenever I analyse use of the media by combining. So I want to integrate the analysis tools on the web.

### Web framework
The analysis tools are published web APIs. Everyone can use the APIs to use providing their own service, which .
Web framework realizes 

# What's the Requirement?

# What's the Kinds of Web Framework?