OmniAICreator/Qiita-1.07M huggingface dataset:
Umbraco as a Service(Uaas)についての概要

# Umbracoとは?
.NETで作られたCMS (http://umbraco.com/)

非常に柔軟なコンテンツ管理と、複雑なカスタマイズにこたえる拡張性がある

# Uaasとは
Umbraco as a Service

Microsoft Azure上に構築されたUmbracoを月額や年額契約で利用できるサービス

インストールやデプロイよりも、クリエイティブで楽しい体験にフォーカスするためのソリューション。

以下を含む
- チーム管理
- 自動アップデート
- ワークフロー管理を含む

## スタンダードプラン
時間のかかるタスクを自動化し、チームの生産性を向上したいWeb管理者のためのプラン

- 1つのUmbracoプロジェクト
- 開発環境と本番環境
- 自動アップデート
- ベースラインプロジェクト
- チーム管理
- 無限のストレージと帯域

€89(だいたい12,000円/月くらい 2015/12/15)

## サポートプラン
サポートと、ステージング環境を含むプラン

- 1つのUmbracoプロジェクト
- 開発環境と本番環境、あとステージング環境
- 自動アップデート
- ベースラインプロジェクト
- チーム管理
- 無限のストレージと帯域
- サポート

€359(だいたい48,000円/月くらい 2015/12/15)

# 内容
### 発行ワークフロー

すべてのサイトへ新しいコード、コンテンツ、メディアを展開する

ローカル開発環境から自動チェックを経て本番環境へ直接デプロイできる

開発環境からのデプロイ中でもコンテンツ編集者は、そのままUmbracoのコンテンツ管理を続けることができる

### 自動アップデート
Umbracoの最新パッチリリースを自動的に適用する

もちろん何か問題が起きた場合はロールバックもできる

### ストレージとアクセスは無限
高解像度の画像をそのままアップロードできる

### チームマネジメント
プロジェクトにメンバーを追加できる

期間限定メンバーも追加できる

### ベースラインプロジェクト
元のサイトのクローンを使用して新しいプロジェクトを作れる

ベースラインプロジェクトを更新するたびにイメージも更新される
パッケージインストール、コード修正、ドキュメントタイプ作成、テンプレート作成時にイメージが更新される

更新したイメージをすべてのクローンにプッシュすることができる

### 開発環境と本番環境
安全に本番環境に反映するために開発環境が分かれています
プランによってはステージングも使える

### 環境カスタマイズ
環境設定のためのフルアクセス権限がもらえる

- IPホワイトリストの登録
- SSL証明書の追加
- カスタムドメイン

Umbraco as a Serviceポータルからアクセスできる

### Gitリポジトリ
ワークフローを使って、Gitリポジトリから自動デプロイが可能

### Azure
Azure上に構築されている

### SQL Serverインスタンス
権限がもらえカスタムテーブルの追加も可能


http://velstand.info/jp/blog/2015/12/uaas/
Ruby | attr_accessor + initialize でアクセサ変数に代入できない時

# 問題

initialize の中で `accessor = [value]` って書くと。
Ruby にはローカル変数への代入だと思われる。


```rb
class Book
  attr_accessor :price

  def initialize
    price = 1080
  end
end
```

アクセサを呼び出しても。
初期値として代入したはずの `price = 1080` が出てこない。

```rb
book = Book.new
p book.price

# => nil
```

# 解決

`price = xxxx` ではなく
`self.price = xxxx` って書くこと。

```rb
class Book
  attr_accessor :price

  def initialize
    self.price = 1080
  end
end
```

```rb
book = Book.new
p book.price

# => 1080
```

これでオーケー。

# 環境

- ruby 2.0.0



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
Facterを単体で使う

Puppet advent calendar 14日目のようです。いつの間にか折り返していました。まだまだ先は長いのじゃ...

今回はFacterの話。

## Facterとは

そのノードに関する様々な情報を取得する仕組みです。ChefでいうOhaiです（ここで読者の8割が「あ〜ね」って言う）。

Puppetの依存で入ってくるツールですが、単体でもインストールできます。

```bash
$ gem install facter
```

早速 `facter` コマンドで使えます。 **`factor` と間違えないこと！**

```console
$ facter hostname
web001
$ facter fqdn
web001.example.com
```

この `hostname` だの `fqdn` だのは、Puppetのコードの中ではトップレベルの変数名に対応してくれます。なので、以下のようにいきなり参照できます。

```puppet
if $::hostname == 'web001' {
  #...
}
```

利用できるfacterの一覧は単に `facter` と打てば出てきます。

```console
$ facter | head
architecture => x86_64
augeasversion => 1.1.0
blockdevice_sr0_model => QEMU DVD-ROM
blockdevice_sr0_size => 432128
blockdevice_sr0_vendor => QEMU
blockdevice_vda_size => 85899345920
blockdevice_vda_vendor => 0x1af4
blockdevices => sr0,vda
domain => example.com
facterversion => 2.4.4
```

## JSONなどのフォーマットで取得する

`--json` というオプションを渡すと出力がJSONフォーマットとなります。ほかに、 `--yaml` もあるみたいです。また、以下のように複数の値も取れます。

```console
$ facter hostname fqdn ipaddress --json
{
  "hostname": "puppetserver001",
  "fqdn": "puppetserver001.example.com",
  "ipaddress": "192.0.2.1"
}
```

外部アプリケーション（Fluentdとか）との連携に便利でしょう。

## 拡張Facterを直接使う

[明日から使えるかもしれないカスタムfacter5選](http://buty4649.hatenablog.com/entry/2015/12/12/000011) の通り、Facterは拡張して上書きしたり、自分で定義できるのですが、結構テストがめんどくさいものだったりもします。

この場を借りて、実際のサーバーで値を確認する方法を説明します。

例えば以下のような、AWSのインスタンスのタグからDBのロール（masterかslaveか）を取得するようなCustom Facterをテストしたいとします。

```ruby
require 'puppet'
require 'json'

Facter.add(:db_role) do
  setcode do
    begin
      json = Facter::Core::Execution.exec('/usr/bin/aws ec2 describe-instances --instance-id $( cat /var/lib/cloud/data/instance-id )')
      if !json or json.empty?
        Puppet.notice "Faild to getting db role: maybe instance is not on AWS. skipping."
        'error'
      else
        data = JSON.parse(json)
        current_instance = data["Reservations"][0]["Instances"][0]
        if db_info = current_instance["Tags"].find{|t| t["Key"] =~ /^db_role$/i }
          db_info["Value"]
        else
          'unknown'
        end
      end
    rescue => e
      Puppet.err "Error on getting db role: #{e.class}, #{e.message}. skipping."
      'error'
    end
  end
end
```

このファイルを、どこでもいいんですが `/usr/local/lib/facter/db_role.rb` とかに置いておきます。そうすると、 `FACTERLIB` という環境変数でFacterのロードパスを追加できるので、それで参照可能になります。
（`FACTERLIB` は絶対パスじゃないとダメのようです。要注意）

```console
$ FACTERLIB=/usr/local/lib/facter facter db_role  
slave
```

なお、Puppet4に付属するFacter 3.1では、 `--custom-dir` というオプションでも指定可能なようですが、ここではFacter 2.4.x でも互換の挙動を紹介しておきます。

詳細な作り方は[公式ドキュメント](https://docs.puppetlabs.com/facter/3.1/custom_facts.html)を。

----

ということで明日は（明日も...） @kijibato さんです。ご支援感謝。
Install bcrypt

Install bcrypt
---
- install visual studio 2013 communuty
http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx

- install visual c++ 2008 redistrubutables
http://slproweb.com/products/win32openSSL.html

- install openSSL FULL
http://slproweb.com/products/win32openSSL.html

- install Node-gyp
`npm install -g node-gyp`

- you may need to do this
`npm install bcrypt --msvs_version_2013`
AWSのLinuxにMongoDBをインストール

AWSで借りたサーバーにmongoDBが入っていなかったのでインストールした手順

yumの設定

パッケージ管理システムであるyumにmongoDB用の設定を追加する

①. `$ sudo vim /etc/yum.repos.d/mongodb.repo`

下記のコードをコピー&ペーストして保存する

```ini
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
```

これでyumにmongoDBのリポジトリが追加される

mongoDBのインストール

今回は何も考えず最新のバージョンをインストールするので以下のコマンドで実行する

②. `$ sudo yum install mongodb-org`

読み込んだプラグイン:priorities, update-motd, upgrade-helper

```
インストール中:
 mongodb-org                                              x86_64                                       2.6.6-1                                          mongodb                                       4.9 k
依存性関連でのインストールをします:
 mongodb-org-mongos                                       x86_64                                       2.6.6-1                                          mongodb                                       6.8 M
 mongodb-org-server                                       x86_64                                       2.6.6-1                                          mongodb                                       9.0 M
 mongodb-org-shell                                        x86_64                                       2.6.6-1                                          mongodb                                       4.3 M
 mongodb-org-tools                                        x86_64                                       2.6.6-1                                          mongodb                                        90 M

トランザクションの要約


インストール  1 パッケージ (+4 個の依存関係のパッケージ)

総ダウンロード容量: 110 M
インストール容量: 277 M
Is this ok [y/d/N]: y
Downloading packages:
...

完了しました!
```

確認

③. `$ mongo --version`
MongoDB shell version: 2.6.6

インストール完了
NGUIでUIGridの中央にあるオブジェクトを取得


前回の記事ではスクロールビュー以下のGridに含まれる要素を取得しました。
[NGUIでUIGrid直下のUIWidgetオブジェクトを取得](http://qiita.com/yosizo@github/items/03704a05796b288dcf99)

スクロールの最中にGridの中央にあるオブジェクトを調べたいことってありますよね？俺はありました。
いわゆるカルーセルみたいな機能を実現するために必要になったので、スクロールの中央を調べる方法を紹介します。
***
```csharp
using UnityEngine;
using System.Collections;
using System.Linq;

public class CenteringGrid : MonoBehaviour {
    public UIScrollView scrollView;

    private UICenterOnChild mCenter;
    private string mCurrentItemName;
    private int mCuurentItemIdx;
    private UIWidget[] mScrollObjs;

    public void Start() {
    // UIScrollViewの子であるUIGridを取得
        UIGrid grid = scrollView.GetComponentInChildren<UIGrid>();

        // UIGridにUICenterOnChildコンポーネントが設定されている前提
        mCenter = grid.GetComponent<UICenterOnChild>();
        mCenter.onFinished = OnGridMoveFinished;
        mCenter.onCenter = OnGridCenter;

        // Grid直下のWidgetのみを取得
        mScrollObjs = grid.GetComponentsInChildren<UIWidget> ().Where(obj => obj.transform.parent == grid.transform).ToArray();
    }

    public void OnGridCenter(GameObject obj){
        updatePageNavi (obj.name);
    }

    public void OnGridMoveFinished(){
        updatePageNavi (mCenter.centeredObject.name);
    }

    private void updatePageNavi(string name){
        // 中央にいるオブジェクトの名称と比較、変化していれば処理
        if (name != mCurrentItemName) {
            mCurrentItemName = name;

            // Gridに設定されたオブジェクトから中心オブジェクトと一致するものを探してインデックスを取得
            foreach (var item in mScrollObjs.Select((val,idx)=> new {val,idx})) {
                if(item.val.name.Equals(name) ) {
                    mCuurentItemIdx = item.idx;
                    break;
                }
            }
            Debug.Log("Current idx="+mCuurentItemIdx);
        }
    }
}
```
***


※ちなみに以下の部分は、LINQのSelectを使うことでforeachで回しながら値とインデックスを同時に取得しています。

> foreach (var item in mScrollObjs.Select((val,idx)=> new {val,idx}))

インデックスのカウント用に変数を用意しなくていいので便利ですよね。LINQ楽しいです！
     
以上です
[python] 同じ要素を考慮した順列の生成

#同じ要素を含む順列の生成
itertools.permutationsだと、同じ要素のとき、余分に生成される。
同じ数字、同じ文字、同順、等扱うとき使います。
前に[ジェネレータの使い方](http://qiita.com/Kodaira_/items/32b1ef860f59df80eedb)で紹介したが、自分が探しにくかったので単体で紹介。
github source: [permutation.py](https://github.com/KodairaTomonori/Qiita/blob/master/default_module/syntax/permutation.py) 

#
```permutation.py
def permutations(iterable, permutation=[]):
    if not iterable: 
        yield permutation
        pass
    for i in [iterable.index(i) for i in set(iterable)]:
        yield from permutations(iterable[:i] + iterable[i+1:], permutation + [iterable[i]])
```

yield from は再帰的？に、yieldを遠くから返してくれます。
毎回setして、同じ要素の重複を防いでいます。

スライスでくっつけるの若干遅そうなので、うまいやり方あれば教えて欲しいです。
ObjectMapperで入れ子やString→NSURLの変換に対応する

若干手間取ったのでメモ。


```swift
import ObjectMapper

class Person: Mappable {
    // 入れ子になるやつもMappableプロトコルに適合したclassかstructをつくる
    struct ImageUrl: Mappable {
        var raw: NSURL?
        var large: NSURL?
        var icon: NSURL?

        init?(_ map: Map) {
            mapping(map)
        }

        mutating func mapping(map: Map) {
            // JSONにはStringで入っているので、NSURLに変換する
            let urlTransform = TransformOf<NSURL, String>(fromJSON: { (value: String?) -> NSURL? in
                if let value = value { return NSURL(string: value) } else { return nil }
            }, toJSON: { (value: NSURL?) -> String? in
                return value?.absoluteString
            })
            raw <- (map["raw"], urlTransform)
            large <- (map["large"], urlTransform)
            icon <- (map["icon"], urlTransform)
        }
    }

    var name: String?
    var imageUrl: ImageUrl?

    init?(_ map: Map) {
        mapping(map)
    }

    func mapping(map: Map) {
        name <- map["name"]
        imageUrl <- map["imageUrl"]
    }
}
```

### ポイント
- 入れ子になるやつもMappableプロトコルに適合したclassかstructをつくっておくと、勝手にマッピングしてくれる
- TransformOfで変換のロジックを書いて、`raw <- (map["raw"], urlTransform)`のようにタプルで渡す

参考：[Hearst-DD/ObjectMapper](https://github.com/Hearst-DD/ObjectMapper)
Fluent なインタフェースのオブジェクトを Mockito で mock する

## TL;DR

- `Mockito.mock(Class, Answer)`でデフォルトの返り値を設定しよう。

## Fluent Interface についてざっくり復習

最近は Fluent なインタフェースを取り入れたものが多くなってきています。
例えば、以下のようなインタフェースは Fluent なインタフェースと呼ばれます。

```java:SomethingFluent.java

public interface SomethingFluent {
  SomethingFluent foo();
  SomethingFluent bar();
  SomethingFluent baz();
}
```

これを使うコードを見てみると、メソッドの呼び出しを数珠つなぎにすることで、オブジェクトにどのような状態の変化が起こるかがひと目で理解できるようになっていることがわかると思います。

```java

SomethingFluent o1 = new ConcreteSomethingFluent().foo().bar(); // foo と bar を呼んだ状態の SomethingFluent
SomethingFluent o2 = new ConcreteSomethingFluent().baz().bar(); // baz と bar を呼んだ状態の SomethingFluent
SomethingFluent o3 = new ConcreteSomethingFluent().foo().bar().baz(); // 全てを呼んだ状態の SomethingFluent
```

## Fluent Interface をモックする

ここで、この`SomethingFluent`に依存したクラス`TestTarget`のテストを考えます。

```java:TestTarget.java

public class TestTarget {
  SomethingFluent fluent;

  public TestTarget(SomethingFluent fluent) {
    this.fluent = fluent;
  }

  public method1() {
    fluent.foo();
  }

  public method2() {
    fluent.foo().bar();
  }
}
```

コンストラクタ経由で`SomethingFluent`の依存を注入できるので、ここで`SomethingFluent`のモックを流し込みます。
Mockito を使えば簡単ですね。もし Mockito を使わないのであれば、自分でモック実装を作ることになります。

```java:TestTargetTest.java

public class TestTargetTest {
  private SomethingFluent dependency;
  private TestTarget target;

  @Before
  public void setUp() {
    dependency = mock(SomethingFluent.class);
    target = new TestTarget(dependency);
  }

  @Test
  public void test_method1() {
    target.method1();
    verify(dependency).foo();
    verify(dependency, never()).bar();
  }

  @Test
  public void test_method2() {
    target.method2(); // causing NullPointerException
    verify(dependency).foo();
    verify(dependency).bar();
  }
}
```

`Mockito.mock(Class)`を使う場合、モックオブジェクトが持つ各メソッドの返り値は、`void`でない限り`null`か各型のデフォルト値になります。つまり、`SomethingFluent`の場合は、全てのメソッドが`SomethingFluent`型のオブジェクトを返しますので、モックしたメソッドを呼び出すと常に`null`が返ってくることになります。

すると、`TestTarget#method1()`は困ったことは起こりませんが、`TestTarget#method2()`では困ったことが起こります。
なぜなら、メソッド呼び出しを数珠つなぎにしてしまっているので、`SomethingFluent#foo()`を呼んだ返り値が`null`となり、`bar()`の呼び出しで`NullPointerException`となるからです。

## デフォルトの返り値を設定する

愚直には、Mockito で各メソッドの返り値をそれぞれごとに設定できるようになっているため、それを全てのメソッドに対して行うことになりますが、いかんせんそれは非常に面倒です。そして大抵そのことが忘れ去られ、新しいメソッドを追加したときに無駄にテストがこけてしまいます。

そこで登場するのが、`Mockito.mock(Class, Answer)`です。

第二引数の`Answer`は、各モックメソッドがデフォルトで返す返り値を設定するものです。この`Answer`を適切に設定することで、`null`以外の、任意のオブジェクトが個別に設定しなくても返ってくるようになります。

今回は、Fluent なインタフェースですから、自分自身を返す必要があります。そこで、以下のようにモックメソッドの呼び出しによってモックオブジェクトを返すようにします。

```java:TestTargetTest.java

public class TestTargetTest {
  private SomethingFluent dependency;
  private TestTarget target;

  @Before
  public void setUp() {
    dependency = mock(SomethingFluent.class, (Answer) invocation -> dependency);
    target = new TestTarget(dependency);
  }

  @Test
  public void test_method1() {
    target.method1();
    verify(dependency).foo();
    verify(dependency, never()).bar();
  }

  @Test
  public void test_method2() {
    target.method2(); // no problem!
    verify(dependency).foo();
    verify(dependency).bar();
  }
}
```

これで、Fluent なインタフェースの返り値が無事設定できました。
Android StudioのAVD Managerで「Failed to load」


# 環境

OSX Yosemite 10.10.5
Android Studio 1.4

# 症状

Android Studioをインストールしてデバイスを追加した際に、AVD Managerで「Failed to load」とエラーが表示され、エミュレータが起動できませんでした。

![avd_manager_error1.png](https://qiita-image-store.s3.amazonaws.com/0/38775/0a1e116b-6c94-ce3f-aee1-ffce70069e14.png "avd_manager_error1.png")

ドロップダウンリストでDetailを見ると、

> Name: Nexus_5_API_23
> 
> CPU/ABI: Google APIs Intel Atom (x86_64)
> 
> Path: /Users/username/.android/avd/Nexus_5_API_23.avd
> 
> Error: Unknown target 'Google Inc.:Google APIs:23' in /Users/username/.android/avd/Nexus_5_API_23.ini

と表示されました。


# 解決方法

1. 一度アプリを実行する → 普通に起動する。
2. Android Studioを再起動する。

これ以後、AVD Managerを起動すると正常と表示されます。

![avd_manager_error2.png](https://qiita-image-store.s3.amazonaws.com/0/38775/b5a67d0a-a9c5-ebb4-28ed-2a7e5549a7e2.png "avd_manager_error2.png")

原因はわかりませんでしたが、共有でした。
Safariのエラーコンソールを等幅フォントにする


【対象】
Safari 9.0.1 (10601.2.7.2)
OSX Yosemite 10.10.5

Safariのエラーコンソールがなぜか等幅フォントじゃない。
その他の要素ビューとかは等幅なのにこれはなぜなのか。

![スクリーンショット 2015-12-15 11.47.37.png](https://qiita-image-store.s3.amazonaws.com/0/18973/abb62059-271b-3a89-361c-9a290a0de84e.png "スクリーンショット 2015-12-15 11.47.37.png")

設定画面などないので、このインスペクタのスタイリングをしているcssファイルを直接弄る。Safariのバージョンによって変わるが、今回は`/System/Library/StagedFrameworks/Safari/WebInspectorUI.framework/Versions/Current/Resources/Main.css`にある。ちなみにここ以外にもいくつかMain.cssのある場所があるが、変更しても反映されない。おそらくStagedFrameworksの下にあるMain.cssというのがポイントだと思う。

中を見てみると下の箇所がどこかにあるはず。

```css:Main.css
...
.console-messages {
    display: flex;
    flex-direction: column;
    word-wrap: break-word;
    font-family: -webkit-system-font, sans-serif;
    font-size: 12px;
    min-height: 100%;
    outline: none
}
...
```
このクラスのフォント周りをちょちょっといじる。

```css:Main.css
...
    font-family: Menlo, monospace;
    font-size: 10px;
...
```

Tada!君は等幅フォントを手に入れた！
![スクリーンショット 2015-12-15 11.50.43.png](https://qiita-image-store.s3.amazonaws.com/0/18973/6092ae29-2803-7f0a-45ae-420355a1e60f.png "スクリーンショット 2015-12-15 11.50.43.png")

【参考】
http://stackoverflow.com/questions/27912919/how-do-i-change-the-web-inspector-font-for-safari-8
NGUIでUIGrid直下のUIWidgetオブジェクトを取得

NGUIでスクロールビューを作成するとき、Gridを使ってオブジェクトを整列したりしますよね。
その際、Gridに含まれているオブジェクトを動的に取得してゴニョゴニョしたい事があります。
子オブジェクトの習得自体は、GetComponentsInChildren&lt;UIWdget&gt; などとすればよいのですが、これだとGrid以下の”全ての”オブジェクトが習得されてしまい、扱いに困る事があります。

そういう時にLINQを使うことで簡単にGrid直下のオブジェクトだけを取得できますので、方法を紹介します。
***
```csharp
// 検索元のスクロールビューをエディターから設定(もちろん自分で取得しても良い）
public UIScrollView scview;

void hoge() {
// UIScrollViewの子であるUIGridを取得
UIGrid grid = scview.GetComponentInChildren<UIGrid>();

// Grid直下のWidgetのみを取得
UIWidget[] mScrollObjs = grid.GetComponentsInChildren<UIWidget> ().Where(obj => obj.transform.parent == grid.transform).ToArray();
}
```
***
やってる事は単純で、where句でtransformを比較してるだけです。
また、ToArray()を使うことで結果を配列として取得しています。

以上です。
2015-12-15 c++ builder XE4, 10.2 Tokyo > Forms > 細い横線を表示する > TShape使用 | PenとBrush

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

細い横線を表示したい。

参考 [SO](http://stackoverflow.com/questions/10234836/delphi-line-component)のTShapeというキーワードをもとにやってみた。

### 準備

1. TColorBoxを追加
2. TEditを追加. 線の太さを指定する. E_lineWidth
3. Buttonを追加
4. TShapeを追加
5. TEditを追加. TShapeとの比較として. Edit1

### コード

```Unit1.cpp
static int calcHeight(int lineWidth)
{
	return lineWidth * 2 + 1;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Shape1->Brush->Color = ColorBox1->Selected;
	Edit1->Color = ColorBox1->Selected;

	int height = calcHeight( E_lineWidth->Text.ToInt() );

	if (height > 0) {
		Shape1->Height = height;
		Edit1->Height = height;
	}
}
void __fastcall TForm1::FormShow(TObject *Sender)
{
	Shape1->Pen->Style = psClear; // 枠線を消す
}
```

### 結果

線の太さ1
右上はTShapeで右下はTEdit。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/95e2923a-73c2-d119-41ba-9c58ba0e2dfa.png)


線の太さ2
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/204115fa-eb36-d1f3-b687-cd5aae3eb107.png)


線の太さ3
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/05dd61f2-c4bc-0c31-28e5-a50a02973be5.png)


### まとめ

- 枠線を消したTShapeでやるのがよさそう
- TEditは太さを変えた時にBevelの表示・非表示が変わるので扱いにくい

よく使うTEdit（や他のよく使うコンポーネント）でやろうとするより、素直にTShapeを使うのがよさそうだった。

### PenとBrush
(追記 2019-06-21)

- PenはTShapeの外側の線
- BrushはTShapeの内側の塗りつぶし

として覚えると記憶に残るかもしれない。
Vagrant(VirtualBox)を使っていたらPCのスリープ復帰後、ネットワークに繋がらなくなった件について

詳細な原因は不明です。。。

# 環境情報

Windows8
VirtualBox 4.3.30
Vagrant 1.7.4

# 現象

Vagrant（VirtualBox）で仮想サーバ立ち上げて、
そのままスリープさせ、半日ぐらい放置。
スリープから復帰させると、メインのネットワーク接続（イーサネット）がまったくできない！
（ネットに繋がらない状態 and ipアドレスがDHCPから割り振られていない）
（ipはPC起動時にDHCPにより割り当てられる）
長時間放置してるとちょくちょくなってしまう。。。。

# 噂

スリープ復帰後のDHCPがうまくいってないのかなんなのか。
仮想サーバ立ち上げてるときにこの現象が起きるので
vagrantとの関係性もいまいちわかりませんが。。。

# 解決

解決策だけわかったので、ひとまずこれでOK.

![upload_1.png](https://qiita-image-store.s3.amazonaws.com/0/18060/9e9fa857-2249-0532-3fee-f41b410d6b37.png)

ネットワーク接続の設定で、
メインのイーサネットネットワークを無効にして、また有効にする。

これだけで直った。

IPアドレスが再度割り当てられたみたい。

根本原因はなんだろう・・・・
nodejsからHTTPサーバへ通信する場合はConnectionPoolを使おう


はじめに
========

最近ちらほらnodejsを使っているのですが、
下図の(※１)のようにnodejsのWebサーバが外部のAPIサーバにHTTPでアクセスするときに ConnectionPool を有効にするとレイテンシーやスループットが改善するので検討してみると良いですよ、という話です。この方法はnodejsに限らず有効なのですが、nodejsだととても簡単にできます(たぶん)。

![プレゼンテーション1.png](https://qiita-image-store.s3.amazonaws.com/0/11124/c185e2e8-32b4-9f66-a709-853ffcd3c3cb.png "プレゼンテーション1.png")


Version
-----------

* nodejs: v4.2.3
* npm
	* request: 2.67.0
    * request-promise: 1.0.2


ConnectionPoolの方法
=========

方法はいくつかあるようです。

1. [request](https://www.npmjs.com/package/request#request-options-callback) NPM の forever を利用する
2. nodejsの [http](https://nodejs.org/docs/v4.2.2/api/http.html#http_http_globalagent)モジュールに備わっている機能を利用する

request NPM の forever を利用する
--------------------
`request` NPM を利用した [request-promise](https://www.npmjs.com/package/request-promise) というNPMがあります。

例えば、expressで以下のような感じで使います。 これは `GET /spike` で `https://example.com/`にアクセスしてその内容を返すというものです。

```javascript:app.js
rp = require('request-promise');

app.get('/spike', (req, res) => {
  rp({url: 'https://example.com', forever: true}).then((body) => res.send(body));
});
```

例えばこれに ab などでベンチマークを取ると、 `forever: true` を付けるのと付けないのでかなりパフォーマンスが変わります。（注意：実際に example.com に高負荷アクセスするのは迷惑なのでやめましょう）

### ConnectionPool されているかどう確認するか

```
netstat -nt | grep -c <target ip>:<443 or 80>
```

などでtarget ipとのTCP接続の状況(数)が見ることができます。
ConnectionPool されてないときは、これが時間とともに増加していきます。また、 `TIME_WAIT`という接続終了したConnectionが大量に表示されます。

ConnectionPool されているときはおよそ並列数程度で収まります。 `ESTABLISHED`という接続中であるConnectionが見て取れます。

### どれくらい効果があるか
あくまで参考ですが、200 request/sec くらいから 900 request/sec くらいになりました。
これは新規にConnectionを張るコストがどれくらい高いかによって変わってきます。


nodejsの httpモジュールに備わっている機能を利用する
-------------------
結論からいうとちゃんと試していません。

request npm でも デフォルトでこのOptionを使うと書いてあるのですが、私が試した時は効果がありませんでした。

自前で httpモジュールを直接使うとちゃんと機能するのかもしれません。
こんな感じで使っていくようです。

https://nodejs.org/docs/v4.2.2/api/http.html#http_new_agent_options

```javascript
var http = require('http');
var keepAliveAgent = new http.Agent({ keepAlive: true });
options.agent = keepAliveAgent;
http.request(options, onResponseCallback);
```

さいごに
=========

最近、Micro Service的にこういう連携が増えてきています。
APIサーバ側のkeep-aliveやConnection Poolingを調整すると性能的に改善することはよくあるので、検討すると良いと思います。
css3でレスポンシブな正方形を作る

#完成イメージ
以下に作成したので確認してみてください。
[cssでレスポンシブな正方形](http://jsdo.it/bgn_nakazato/s8jh)



#css
css3で演算が出来るcalc()と、viewportの値を示す[vw,vh,vmin,vmax]を使います。

```css:code
.squareBox {
	width: calc(100vmin - 60px);
	height: calc(100vmin - 60px);
	position: fixed;
	top: 0;
	bottom: 0;
	left: 0;
	right: 0;
	margin: auto;
}
```



#解説
要素の縦横に　```100vmin```　を付与し、幅と高さの値の小さい方を指定します。
例えば、ウィンドウサイズが{ 幅:800px, 横:600px }であれば
width、heightは600pxになります。

そこからcalc()を使用して　```-60px```　としています。
これは、左右、または上下に常に30pxの余白を取るためです。

　```position```　から下は要素を中央に配置するための指定になります。



#参考
以下の資料を参考にさせていただきました。
[HTML6 でも CSS4 でもない Web 技術のゆくえ](https://havelog.ayumusato.com/news/e688-wcan_2015_winter.html)



この技術を見ていてもたってもいられなくなり、作ってしまいました。
偉大な先輩方に感謝です。
[XCode] XCodeをアップデートしたらシミュレーターが起動しなくなった

##XCodeをアップデートしたら以下のようなエラーでシミュレーターが起動しなくなった

###An error was encountered while running (Domain = FBSOpenApplicationErrorDomain, Code = 4)

##解決方法
iOS Simulator -> Reset Contents and Settings
するとなおった
[電子工作]意外と深いLEDの世界

先日は「スイッチ」についてまとめました「[[電子工作]意外と深いスイッチの世界](http://qiita.com/umi_kappa/items/7abe6ad7c2fa3e72e8f5)」。
今回は電子工作のお約束Lチカで使うLEDについてまとめます。今や白熱電球を見ないことはあっても、LEDを見ない日なんてないと言っても過言ではないでしょう。

# 単色LED
![I-01267.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/5472a64e-242e-df15-5d0b-4a4ccc7342b8.jpeg)
[高輝度５ｍｍ青色ＬＥＤ　ＯＳＵＢ５１１１Ａ　１５度　（２個入）：秋月電気通商](http://akizukidenshi.com/catalog/g/gI-01267/)
みなさんお馴染みの1色の光が点灯するLEDです。アノードからカソードへ電流が流れることで発光します。緑・赤は昔からあり、青色の出現によりLEDで光の3原色が実用でいるようになり世界が変わりました。この間中国に旅行に行った時、そこら中の電光掲示板が赤色LEDで驚きました。

# フルカラーLED
![I-02476.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/8bfc57e5-55d2-8363-7a3b-1ff2a867e242.jpeg)
[ＲＧＢフルカラーＬＥＤ　５ｍｍ４本足　ＯＳＴＡ５１３１Ａ　カソードコモン：秋月電気通商](http://akizukidenshi.com/catalog/g/gI-02476/)
名前の通りフルカラーを表現できるLEDです。単色LEDと比べると端子が4本あることが特徴です。RGBごとに対応した端子に流す電流値をコントロールすることにより色を調整できます。

# 赤外線LED
![I-03261.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/8e00075a-7bd0-9ca5-f53a-44a53971d74c.jpeg)
[５ｍｍ赤外線ＬＥＤ　ＯＳＩ５ＦＵ５１１１Ｃ－４０　（５個入）：秋月電気通商](http://akizukidenshi.com/catalog/g/gI-03261/)
赤外線を発するLEDです。超人でないかぎり直接肉眼で店頭を確認することはできません。カメラを通すとカメラのフレームレートの影響で店頭を確認することができます。特定のパータンを高速にON/OFFすることでリモコンの信号送出ように用いられます。
この肉眼で見ることができないという特徴をうまく使い、インスタレーションなどで物体の場所を特定する手段として使われることもあります。

# 7セグメントLED
![I-00639.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/b3cfb540-e2ec-3844-42be-03e94eb34dcf.jpeg)
[超高輝度赤色７セグメントＬＥＤ表示器　１文字アノードコモン　ボディ黒　Ａ－５５１ＳＲＤ：秋月電気通商](http://akizukidenshi.com/catalog/g/gI-00639/)
ドットを含めて8つの信号で各LEDを点灯させ数字のように表示させるLEDです。スパイ映画などで時限爆弾のタイマーとしてよく見かけますね。1桁ならただ単にLEDのON/OFFで数字を切り替えることができるのですが、7セグメントLEDを複数組み合わせて複数桁を表現したい場合、[ダイナミック点灯](http://homepage3.nifty.com/mitt/pic/pic5_16.html)という高速でLEDの表示を切り替えて擬似的に数字が切り替わっているように見せる手法が必要になります。

# 16セグメントLED
![I-04440.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/a0401075-9832-4ef4-2443-b984194ee863.jpeg)
[超大型赤色１６セグメントＬＥＤ表示器　アノードコモン　アノード共通接続　Ａ－２３０８ＳＲ：秋月電気通商](http://akizukidenshi.com/catalog/g/gI-04440/)
7セグメントLEDより更に細かい表現ができるLEDです。文字の表示を工夫すると数字はもちろん、大文字小文字のアルファベットを表示させることができます。
数年前ですが、この16セグメントLEDを16個使ってサウンドビジュアライザーを作成しました。
[音に反応する光の箱16×16 HIKARIの紹介：アットトリップ](http://attrip.jp/35544/)

# ドットマトリックスLED
![I-05163.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/ed68372a-e642-3128-1cda-c413222fb195.jpeg)
[赤色ドットマトリクスＬＥＤ　８ｘ８ドット　ＯＳＬ６４１５０１－ＡＲＡ：秋月電気通商](http://akizukidenshi.com/catalog/g/gI-05163/)
縦8・横8の計64個のLEDが並んでいます。さまざまなパターンを表現できるので、電光掲示板として電子工作に用いる方が多いです。

# バーLED
![I-04290.JPG](https://qiita-image-store.s3.amazonaws.com/0/55103/d46e87f8-71ff-caa6-a164-8611bce712eb.jpeg)
[高輝度１０ポイント赤色バーＬＥＤアレイＯＳＸ１０２０１－Ｒ：秋月電気通商](http://akizukidenshi.com/catalog/g/gI-04290/)
ゲームの体力ゲージのように縦にLEDが並んでいます。

# まだまだたくさんありますが、、、
今回はここまでとさせてください！
LEDは抵抗を挟めば基本的に電流のON/OFFで手軽に扱え、点灯するというわかりやすいアウトプットをしてくれるので電子工作でも大人気のモジュールです。電子パーツのお店に行くとついつい買ってしまうんですよね(笑)
tcpdumpでicmpをフィルタする

以下のフィルタで、Echo MessageとEcho Reply Messageのみをキャプチャできる。

<pre>
tcpdump icmp[icmptype] == 0 or icmp[icmptype] == 8
</pre>

以下参考
https://forum.ivorde.com/tcpdump-how-to-to-capture-only-icmp-ping-echo-requests-t15191.html


2015/12/16 追記

icmp[icmptype]という表記は、icmp[0]と同じ。
[]で指定している内容は、icmpヘッダの中身の、
何バイト目のデータか、ということ。

icmpヘッダの先頭から1バイトが、icmp typeなので、
この値が0x00か0x08を指定すれば、
Echo MessageとEcho Reply Messageのみをフィルタできる。

ちなみに、icmpヘッダの6バイト目から2バイト分を見れば、
シーケンス番号でフィルタも出きる（需要があるかは知らないが）

<pre>
[root@test1 ~]# tcpdump '( icmp[0] == 0x00 or icmp[0] == 0x08 ) and icmp[6:2] == 0x0001'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:21:49.658584 IP test1.localhost.localdomain > test2.localhost.localdomain: ICMP echo request, id 15404, seq 1, length 64
09:21:49.658765 IP test2.localhost.localdomain > test1.localhost.localdomain: ICMP echo reply, id 15404, seq 1, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel
[root@test1 ~]#

※この結果の中の、ホスト名等々はいじってます。

</pre>


動作見ながら、こんな感じだと思いますが、
勘違い等あれば、突っ込みください。
Kaspersky Internet Securityが原因でGoogleスプレッドシートが編集できない問題

環境: Windows10 + Kaspersky Internet Security 2016 + GoogleChrome 47.0.2526.80m

# 現象
GoogleChromeでGoogleスプレッドシートを編集しようとすると、
「接続を試みています。オフラインでの編集を行うには、再接続に成功したときにオフライン同期をオンにしてください。」
とエラーメッセージが表示され、セルの編集ができない。
カスペルスキーの保護機能をすべてオフにし、再起動すると解決するが…。

# 解決策
[カスペルスキーインターネットセキュリティ:設定]→[詳細]→[ネットワーク]→[暗号化された接続のスキャン]　を
[暗号化された接続をスキャンしない]　にチェックを入れる。

<img width="579" alt="1.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/21201/252c67cb-ab05-873e-8f42-4ebd909277c8.png">

<img width="579" alt="2.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/21201/14b83fd5-8320-2b96-5430-e0bfa178d36b.png">

暗号化された通信を、Kaspersky Internet Securityがゴニョゴニョしているらしい。(MITM的な?)
そのため、GoogleChrome側が何らかの異常を検知したようだ。
vagrant halt で "sudo: sorry, you must have a tty to run sudo" って言われた


まちがって sudo パッケージ削除して yum で入れなおしたら上記のようなエラーが出るようになってしまった。

そんなときは `sudo visudo` で `/etc/sudoers` を編集

```
Defaults    requiretty
Defaults:vagrant !requiretty
```

のように `requiretty` の後に `vagrant`ユーザだけは requiretty を除外する設定を入れたら解決。

## 参考

* [vagrant up したらエラー「sudo: sorry, you must have a tty to run sudo」が出たときの対処 - 彼女からは、おいちゃんと呼ばれています](http://blog.inouetakuya.info/entry/20130831/1377957334)
* [Ansible - rootだけtty無しのsudoを許可 - Qiita](http://qiita.com/ryo0301/items/4daf5a6d22f16193410f)
PEPPER タブレット( javascript )でqimessaging2を使う


# PEPPERのタブレットでqimessaging2を使って開発する。

## 概要

* ずっと使っていたqimessagingが気づいたらdeprecatedのログが出るようになっていたので2に移行する。

## 変更点

### ・参照先

* qimessaging 1.0

```html
<script src="/libs/qimessaging/1.0/qimessaging.js"></script>
```

* qimessaging 2

```html
<script src="/libs/qimessaging/2/qimessaging.js"></script>
```

ちなみにjqueryはここ

```html
<script src="/lib/jquery/jquery.min.js"></script>
```

### ・QiSessionの仕様変更

QiSession -> メソッドに変更、QiSession.socket().onを内包
doneメソッド -> thenメソッドに変更

* 変更前

```js
// 接続
var session = new QiSession(host);
session.socket().on("connect", function() {
    // サービス取得
    session.service("ALMemory").done(function(m) {
        // APIコール
        m.raiseEvent("Hoge/Event", "foo").done(function() {
            // コールバック
            console.log("Raised event.");
        });
    });
});
```

* 変更後

```js
// 接続
var _session = null;
QiSession(function( session ) {
    _session = session;
    // サービス取得
    _session.service("ALMemory").then(function(m) {
        // APIコール
        m.raiseEvent("Hoge/Event", "foo").then(function() {
            // コールバック
            console.log("Raised event.");
        });
    });
}, null, host);
```


以上。
jQueryでshow/hide, addClass/removeClass, disabledの切り替えを一行で書く

例えば、`表示する`とかいうチェックボックスがあったとして

```js
    $("#checkbox").on("click", function() {
        if ($(this).prop("checked")) {
            $('#div').show();
            $('#div').addClass("show");
            $('#div input').prop("disabled", false);
        } else {
            $('#div').hide();
            $('#div').removeClass("show");
            $('#div input').prop("disabled", true);
        }
    }
```

チェックするとこんな動きをするとしよう

- DIVを表示
- DIVに特定のクラスをつける
- DIV内のinput要素のdisabledを解除する

チェックを外した場合は、上記の逆の処理
こんな処理たちをひたすら一行で書く

### show / hide

```js
    if ($(this).prop("checked")) {
        $('#div').show();
    } else {
        $('#div').hide();
    }
```

```js
    $('#div').toggle($(this).prop("checked"));
```

### addClass / removeClass

```js
    if ($(this).prop("checked")) {
        $('#div').addClass("show");
    } else {
        $('#div').removeClass("show");
    }
```

```js
    $('#div').toggleClass("show", $(this).prop("checked"));
```

#### add or removeするクラスが二つの場合（おまけ）

http://qiita.com/nmta/items/5ba589cb8991d93bd5bb

### disabled

```js
    if ($(this).prop("checked")) {
        $('#div input').prop("disabled", false);
    } else {
        $('#div input').prop("disabled", true);
    }
```

```js
    $('#div input').prop("disabled", !$(this).prop("checked"));
```

`!`を忘れずに

### まとめて

```js
    $("#checkbox").on("click", function() {
        $('#div').toggle($(this).prop("checked"));
        $('#div').toggleClass("show", $(this).prop("checked"));
        $('#div input').prop("disabled", !$(this).prop("checked"));
    });
```

```js
    $("#checkbox").on("click", function() {
        var checked = $(this).prop("checked");
        $('#div').toggle(checked).toggleClass("show", checked)
                 .find("input").prop("disabled", !checked);
    });
```
OS X El CapitanにChefをオムニバスインストーラで入れた時の問題

El CapitanにChefをオムニバスインストーラでインストールしたところ、

```console:オムニバスインストーラでインストール
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
```

インストールの最後で `/usr/bin` 配下にシンボリックを作成しようとしてインストールが失敗した。

`/opt/chef` 配下にインストールはされていたので、 `/usr/local/bin` に手動でリンクを貼った。

```console:シンボリックリンク作成
$ cd /opt/chef/bin
$ sudo ln -s /usr/local/bin/chef-apply chef-apply
$ sudo ln -s /opt/chef/bin/chef-client chef-client
$ sudo ln -s /opt/chef/bin/chef-shell chef-shell
$ sudo ln -s /opt/chef/bin/chef-solo chef-solo
```
MORIO年表

#はじめに
<img width="50%" height="50%" src="https://qiita-image-store.s3.amazonaws.com/0/102687/2c2a941a-66b6-aa56-d122-251393419c15.png" alt="IDCFcloud_logo_rgb_06.png" >
こんにちは、MORIOの中の人です。

2014年10月15日にリリース、そして先日1周年を迎えたIDCFクラウド
と同時に1歳を迎えたMORIO

今回はそんなMORIOの1年間の軌跡を
当時の出来事(筆者お独断と偏見でチョイス)とともにお送りします。
卒業アルバムの最後のほうに載ってる年表みたいなイメージでご覧ください。


#そもそもMORIOって何
MORIOはIDCFクラウドのロゴマークです。
MORIOという名前は、最近ついたのですが([MORIO誕生の瞬間](http://fy.idcf.jp/post/126318769854/morio))
MORIOは、MORIOである以前からMORIOでした。
IDCFクラウドのパワフル感、クラウドの雲のイメージを取り入れた
力こぶ(右腕か左腕かはご想像にお任せしますが、MORIOは腕ではなくMORIOです)のようなマークです。


#MORIO年表
では、MORIOの成長が垣間見えた2015年2月から現在までを当時話題となっていた出来事(筆者の独断と偏見によるチョイス)とともに振り返りましょう。

|年月日|<div style="center"> MORIO</div> |[ニュース](http://news.yahoo.co.jp/)|中の人|
|:-----------|------------:|:------------:|:------------:|
|2月|![10432986_839128852791934_3242872917341992484_n.png](https://qiita-image-store.s3.amazonaws.com/0/102687/5b88d361-6a38-684c-118c-d06b77e9d7b6.png)|[サッカー アギーレ監督会解任](http://headlines.yahoo.co.jp/hl?a=20150203-00000001-wordleafs-socc)|節分にちなんで鬼になる。アギーレ監督の解任もあってかどこか寂しげ。
|2月|![10980703_839519409419545_3432546218341713192_n.png](https://qiita-image-store.s3.amazonaws.com/0/102687/a5a4f49e-efe8-4666-aa5b-7c091a34d238.png)|[太眉ブーム復活](http://news.yahoo.co.jp/pickup/6148438)|2月は節分のほかにバレンタインも。あげる側とあげる物の2つになりきる。|
|5月|![11239621_892785514092934_4511327911880500321_n.png](https://qiita-image-store.s3.amazonaws.com/0/102687/575fabb7-9f96-d9ec-f504-dc08cba3f15d.png)|[DAIGO 24時間ランナーに決定](http://news.yahoo.co.jp/pickup/6161374)|MORIOも暑さには勝てない様子。そろそろSCB(スーパークールビズ)|
|6月|![11393262_901789716525847_5540231488837415368_n.png](https://qiita-image-store.s3.amazonaws.com/0/102687/261d8478-a924-efb9-c399-be840fc420f0.png)|[サカナクション・草刈が出産](http://news.yahoo.co.jp/pickup/6163287)|すみません。完全に趣味丸出しトピックスです。雲が傘をさすという常識を超えた存在、MORIO。|
|8月|![11232072_933670726671079_6423474014332877329_n.png](https://qiita-image-store.s3.amazonaws.com/0/102687/5e9299c5-1612-4440-97fc-8d94432571a8.png)|[ザキヤマ結婚](http://news.yahoo.co.jp/pickup/6171173)|あのザキヤマが結婚してもブレずにMORIOです。ヘタまでMORIOです。|
|9月|![11986515_943903688981116_2306645293449684872_n.png](https://qiita-image-store.s3.amazonaws.com/0/102687/a20ad355-eeb1-137f-137b-a1a137c60763.png)|[iPhone6s、6s plus発表](http://news.yahoo.co.jp/pickup/6173867)|この頃からMORIOは一歩引くことを覚えます。そして新しいiphoneの大きな画面でMORIOを見ることができるようになります。|
|10月|![12079131_959444364093715_6027311496883543228_n.png](https://qiita-image-store.s3.amazonaws.com/0/102687/16fa7c73-9f41-3827-3666-b39086aa2e42.png)|[ラグビー日本代表W杯へ記者会見](http://news.yahoo.co.jp/pickup/6177516)|日本ラグビーが盛り上がったのは、1歳になったMORIOのパワフルさのおかげもあるかもしれません…。|
|10月|![11049532_965004953537656_5233108741723741595_n.png](https://qiita-image-store.s3.amazonaws.com/0/102687/ea8494f5-463a-4fe8-9866-a70bc680dad2.png)|[新卒の32%、3年以内に離職](http://news.yahoo.co.jp/pickup/6179251)|このようなデータが出ていましたが、MORIOは着々と仲間を増やしていました。|
|12月|![12341147_978772868827531_2361323349134631375_n.png](https://qiita-image-store.s3.amazonaws.com/0/102687/5391efdf-6988-2e50-ce2f-8ac65ffe897a.png)|[マイナンバー配達開始](http://news.yahoo.co.jp/pickup/6182732)|マイナンバーがなかなか届かない中、MORIOサンタは皆さんに夢を届けています。|


#さいごに
いがかでしたでしょうか。
今後もMORIOも皆さんでMORIOの成長を見守っていっていただけたらと思います。
いつかMORIOが教科書に載るその日まで。
nodistでnode.jsのバージョン管理を行う(Windows)

環境

Windows10 Home(32bit)

nodist 0.7.1インストール → 0.7.2にアップデート

## nodistをインストールする
ファイルを配置してパスを通してもうまく動かなかったので素直にインストーラを使った

https://github.com/marcelklehr/nodist

> Installing with the official installer
>
>    1. Download the installer here
>    2. Run the installer and follow the install wizard

上記の箇所の[here]を押すとインストーラをダウンロードできる

## powershellの$PROFILEでパスを設定する
環境変数永続的に変えてもいいけどpowershellでしか使わないので、プロファイル($PROFILE)に設定することにした

以下の設定をプロファイルに追記。インストール先などは適宜置き換えて下さい
(Visual Studioで入れたTypescriptより優先したいので前に追加します)

``` ps1:$PROFILE
$Env:Path = "C:\Program Files (x86)\Nodist\bin;.\node_modules\.bin;" + $Env:Path
```

`node_modules/.bin`も入れておくとnpmでグローバルインストールしなくて済むので便利

## nodistを利用する
nodistと依存関係のアップデートを行う

``` ps1
nodist selfupdate
```

インストールできるバージョンの一覧を見る

``` ps1
nodist ds
```

ほしいバージョンを指定してグローバルインストール&利用

``` ps1
nodist global 5.2.0
```

ディレクトリ内のみでバージョンを適用する
(.node-versionが作られる)

``` ps1
nodist local 5.2.0
```

インストールされているバージョンの一覧を見る

``` ps1
nodist ls
```

困ったときのヘルプ

``` ps1
nodist --help
```
自己分析

こんにちは。 
[CYBIRDエンジニア Advent Calendar](http://qiita.com/advent-calendar/2015/cybird) 15日目を担当します @UsuiYasuhikoです。
昨日は@yyama2さんの[「Unity5.3のあの機能に触ってみた（アプリ内課金編）」](http://qiita.com/yyama2/items/6e711e2495eb6ea6b09c)でした。
僕自身もUnity開発経験があり課金機能が追加されたという事で、とてもタメになる記事でした！
機能がどんどん追加され、以前よりもUnity開発が楽に（楽しく）なってきてるのを
感じるので実際に触れて何か作ろうと思います。

# はじめに
何を書こうか色々と考えたのですが（技術的な事？開発的な事？・・・etc）
ここ最近、採用や育成といった事に関わる機会が増え、そういった場面で
自分の事を本当に理解しているだろうか？　自己分析できているのだろうか？
と思う場面が多々あったので、今回は「自己分析」について書いてみたいと思います。
「自己分析」と言っても、内容や分析のやり方は様々だと思いますので
普段実践しているやり方を書いていこうと思います。

# なぜ「自己分析」をするのか？
自分自身を知る事で、

* 性格
* 出来る事、出来ない事
* 足りないもの、足りてるもの
* 好き、嫌い
* etc

といった事が知れ、成長や自己管理（モチベーション維持、体調管理）に繋げられたり
他の人に自分を知ってもらう機会にも役に立てる事ができます。
（就活している人は、自己PRにも使えると思います。）

# どうやって「自己分析」をするのか？
まずは、自分に関する項目をざっくりと洗い出してみます。
こんな感じで！！

* ゲームが好き
* 人と話すのが苦手
* おいしものを食べるのが好き
* 映画が好き
* お酒が好き
* 運動するのは嫌い
* 飽き性
* etc

# 項目を更に掘り下げてみる
ここではより具体的な内容に落とし込んでいきます。
（何故好き、嫌いなのか？　どういう内容が？　どういう状況で？　どういう場所で？　等々）

* ゲームが好き
 * アクションゲームは爽快感があって好き
 * 共闘プレイや人と対戦すると楽しいから好き
 * ゲーム要素があるものならとりあえず遊んでみたくなる

* 人と話すのが苦手
 * 話す話題がなく、会話がすぐに途切れてしまう
 * 緊張してうまく話せないから、そもそも話をしない（特に異性と話す事とか）
 * 話すと疲れる

* おいしいものを食べるのが好き
 * 甘いものが好き、特にケーキが好き
 * 食べるとストレス発散できる
 * 食べ歩きが好き（知らない土地だとよりテンションがあがる） 

* etc

# 掘り下げた内容を整理してみる
複数の要素を組み合わせてみたり、関連する要素をだしてみる。

* お酒やゲームを一緒にする事で、話をする事ができる！仲良くなれる！
* モベーションが下がったら、甘いものを食べればモチベーションが上がる
* 食べ歩きが好きだから、もしかしたら散歩も好きかもしれない？！
* 食べ歩き＋ゲーム要素＋お酒の組み合わせが一番テンションが上がる？
　(そういう仕事なら頑張れる？！）
* etc

# まとめ
項目を掘り下げる事で内容がより明確になり、自分自身の事が知れる形になりました。
ただ、ここではあくまで、項目を掘り下げて見えてきた一面なので、
実際に「あてはまるのか？あてはまらないのか？」は試してみないとわかりません。
是非、検証してみて自分の事をより深く知ってみましょう！

さらに、とある項目にフォーカスし、改善する為には？　達成する為には？　
という視点で、項目を掘り下げていくと、具体的な行動が見えてきて、実際に行動する事で
成長につなげる事もできます。
（自分のなりたい像、やりたい事といった項目を掘り下げる事で、今の自分に出来る事にも気づけます）

また、「自己分析」とは内容が違いますが、自分を知った際によく出てくる項目として
ネガティブ、説明下手、話下手というのがよくあがるので改善する為の取り組みとして

* ネガティブワードをポジティブワードに変換してみる
 * 「出来ない」　→　「出来る」
 * 「（〜してもらって）すみません」　→　「ありがとうございます」
 * 「辛い、疲れた」　→　「楽しい」

* とある物に対して、魅力的なプレゼンをしてみる
 * 凄いつまらないゲームを、凄い面白いゲームとしてプレゼンしてみる
 * 凄い使いにくい物を、凄い使いやすい物としてプレゼンしてみる
 * 凄い不味い料理を、凄い美味しい料理としてプレゼンしてみる

というのをやってみるとポジティブで説明上手、話し上手になれるかもしれません。
やってみると案外楽しいので、気軽に身近な人や気の合う仲間とやってみてください。
（他の人の事を知れるいい機会にもなりますよ。）

# 最後に
今回は「自己分析」のやり方の１つとして書いてみましたが、
自分の事を知るというのが目的なので、知る為のやり方を色々と模索してみてください。
「自己分析」をして、自身の成長や自己管理（モチベーション維持、体調管理）に繋げ
素敵な毎日をおくりましょう！

さて、明日の[CYBIRD エンジニア Advent Calendar](http://qiita.com/advent-calendar/2015/cybird)の担当は、
@yuichi_komatsuさんの「EmbulkとBigQueryが黄金コンビすぎる話」です。
どんな内容になるのか楽しみですね！
Feathersのドキュメントについて

## この文章について
この記事は[Flash Advent Calendarの14日目の記事です。

Feathersのドキュメントを翻訳します、という告知です。
こちらのリポジトリで、来年の上半期ぐらいを目処に作業を進めていくつもりです。
https://github.com/gyohk/feathers

## Feathersとは

http://feathersui.com/

Adobe AIRでアプリケーション制作をしている開発者にはいわずと知れた、
UIライブラリです。
UIコンポーネントの他、レイアウトやシーン管理の機能も持っており、
とりあえずAIR開発を行う際は、Starling + Feathersという組み合わせが鉄板のようです。

## きっかけ
AIR3.0でGPUを活用した高速なプログラミングを行うことが可能になり、Starling や Feathersなどのライブラリが登場したのは確か2011年～2012年頃です。それからずいぶん経ちましたが、なかなか日本語で読めるドキュメントが増えていない感覚があります。iOSアプリの開発が活発になり、StackOverflow が登場してから特に顕著になった気がするのですが、ちょっと込み入ったライブラリのドキュメントは英語しかないことが当たり前になり、大半の開発者はそれでも不自由していないのかもしれません。

しかし、大きなライブラリを覚えるときはやっぱり日本語ドキュメントが欲しいです。個人的な実感としては、Starlingも[ヒム・カンパニーさんの訳](http://www.himco.jp/articles/pdf/IntroducingStarling.pdf)がなかったら覚えられなかったかも... という気がしますし、パッと機能を調べたいときなどもやはり日本語のほうが速いです。会社で同僚や後輩にライブラリを覚えてもらいたいときなども、日本語ドキュメントの有無によってだいぶ手間が変わってきます。英語のドキュメントしかないと、あまりFlash界隈に詳しくない人から「何よくわからないライブラリ使ってるんだ」的な、よけいなツッコミを受ける可能性だって否定できないわけです。

昔からお世話になっているFlashコミュニティに何か貢献したいな、という気分もあり、ちょっと頑張ってみるかと思い立ちました。

## おわりに
本来、翻訳が進んでから報告をするのがカッコいいと思うのですが...。
とりあえずAdvent Calendar に参加したかったので、告知だけになってしまいごめんなさい。
もし、既にFeathersのドキュメント翻訳が存在するようでしたら、教えていただければ幸いです。
VB:暗黙の行連結

https://msdn.microsoft.com/ja-jp/library/865x40k4.aspx

1. コンマ (,) の後。

1. 左かっこ (() の後、または右かっこ ()) の前。

1. 左中かっこ ({) の後、または右中かっこ (}) の前。

1. XML リテラル内の埋め込み式の開始記号 (<%=) の後、または埋め込み式の終了記号 (%>) の前。

1. 連結演算子 (&) の後。

1. 代入演算子 (=、&=、:=、+=、-=、*=、/=、\=、^=、<<=、>>=) の後。

1. 式内の二項演算子 (+、-、/、*、Mod、<>、<、>、<=、>=、^、>>、<<、And、AndAlso、Or、OrElse、Like、Xor) の後。

1. Is 演算子および IsNot 演算子の後。

1. メンバーの修飾子文字 (.) の後、メンバー名の前。ただし、With ステートメントを使用する場合や型の初期化リストの値を指定する場合は、メンバーの修飾子文字の後に行連結文字 (_) を含める必要があります。 With ステートメントやオブジェクト初期化リストを使用する場合は、代入演算子 (= など) の後で改行することをお勧めします。

1. XML 軸プロパティ修飾子 (.、.@、...) の後。ただし、With キーワードを使用する場合は、メンバーの修飾子を指定する際に行連結文字 (_) を含める必要があります。

1. 属性を指定する際の小なり記号 (<) の後、または大なり記号 (>) の前。また、属性を指定する際の大なり記号 (>) の後。ただし、アセンブリ レベルまたはモジュール レベルの属性を指定する場合は、行連結文字 (_) を含める必要があります。
 
1. クエリ演算子 (Aggregate、Distinct、From、Group By、Group Join、Join、Let、Order By、Select、Skip、Skip While、Take、Take While、Where、In、Into、On、Ascending、および Descending) の前後。複数のキーワードで構成されるクエリ演算子 (Order By、Group Join、Take While、および Skip While) のキーワード間で改行することはできません。

1. For Each ステートメントの In キーワードの後。
 
1. コレクション初期化子の From キーワードの後。
raspberry piに、ちっこいものでつなぐ

#概要
ちっこいものでつなぎたくて、「au」の「is01」を買いました。
#使用アプリ
「connect bot」
#写真
![MVC-012S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/a0e502cd-7969-35b6-ca57-a7242890aaaf.jpeg)
#写真
![MVC-010S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/b10bb356-291e-4bef-ffc9-389f339227aa.jpeg)
诊断Java中的内存泄露

原文：https://dzone.com/articles/diagnosing-memory-leaks-in-java

首先，我用下面的命令监视进程：

	
while ( sleep 1 ) ; do ps -p $PID -o %cpu,%mem,rss  ; done

（如果有的话还有New Relic）

如果你看到内存上升很快，可能是因为虚拟机设置。如果你没有明确指定JVM的内存设置，它将设置默认值给他们。要获得默认值，使用以下命令：

	
java -XX:+PrintFlagsFinal -version | grep -i HeapSize

如果这些都不符合你所希望的，那么你就需要指定JVM的内存设置。可以用下面的命令设置最小和最大堆大小：

	
java -Xms128m -Xmx256m
注：Java8开始Permanent取消，改成MetaSapce


尽管你有了合理的内存设置，也可以监控进程，但你仍然可能看到内存随时间增加。为了进一步探究原因，你可以使用下面的命令查看对象实例的直方图：

	
jmap -histo $PID

如果仍然没有足够的信息，那么可以用以下命令进行堆转储：

	
jmap -dump:format=b,file=/tmp/dump1.hprof $PID

通常，我会用两个堆转储，然后使用下面的jhat命令比较它们：

	
jhat -baseline /tmp/dump1.hprof /tmp/dump2.hprof

这个命令会启动一个HTTP服务器，你可以用它来探索这两个堆转储之间的差值。在默认情况下，HTTP服务器启动7000端口，你可以在浏览器中访问该端口。

如果你有防火墙，可以通过SSH访问，那么你可以通过如下命令连接该端口：
インラインイメージに変換するXOOPS用Smarty修飾子 inline_image


コードは[Gist](https://gist.github.com/RyujiAMANO/34d62e77afa0b9281675 )にあげてあります

## 使い方

たぶんテーマだと元はこんな記述

```smarty
<img src="<{$xoops_imageurl}>images/logo.png"/>

```

このURL全体をinline_iamgeモディファイアに渡したいので cat モディファイアでつないでからinlie_iamgeモディファイアへ渡すと下記みたいな感じに。

```smarty
<img src="<{$xoops_imageurl|cat:'images/logo.png'|inline_image}>"/>

```

そうすると出力は

```html
<img src="data:image/png; charset=binary;base64,iVBORw0KGgoAAAANSUhEU...（中略）" />
```

ってなります。

使い処少ないとは思うけどちょっと必要になったもんで作っちゃいました(^^;
outlook 2013 > セーフモードになる > 2015年12月のWindows Updateのせい

```txt:動作環境
Outlook 2013 on Windows 7 pro
```

「Outlookを立ち上げたら、「セーフモード」がついている」という例があった。

以下に対応方法が書いている。
http://windows-sousa.com/2015/12/10/post-1270/

2015年12月のWindows Updateのせいらしい。

> 「Update for Microsoft Outlook 2010 (KB3114409) 32-Bit Edition」を右クリックし、アンインストールをクリックします。

実際に症状があったPCで上記を実行して、セーフモードにならないことを確認した。

<hr>
（追記 2015/12/15)

WSUSを設定している場合は、個々のPCでアンインストールしてもWindows Updateが再度かかって上記がインストールされてしまう。 WSUSの設定を変更する必要あり。
VMware toolsの再インストールに失敗した話

CentOS5.11のカーネルが2.6.18-407.el5に更新された。
カーネルが更新されるとVMware toolsの再インストールが必要になる。
具体的にはファイル共有モジュールの再コンパイルが必要である。

VMware toolsの再インストールを実施すると、以下のように怒られる。
```
Searching for a valid kernel header path...
The path "" is not valid.
```

カーネルのヘッダファイルをインストール。

`#sudo yum install kernel-devel

その後、VMware toolsの再インストールはつつがなく終了。
Swiftで画像をPDFに変換させる


この記事は[学生エンジニア Advent Calendar](http://www.adventar.org/calendars/1158)15日目の記事です。

どこで使うんだよと言われればそれまでですが、以前インターン先で作ったので、共有しときます。

###使用した環境
Xcode 7.2
Swift 2.1
iOS 9.2(実機で確認 *なぜかSimulatorは動かない)

###必要なフレームワーク
- SystemConfiguration.framework
- StoreKit.framework
- Security.framework
- QuartzCore.framework
- MobileCoreServices.framework
- CoreLocation.framework
- CoreGraphics.framework

##全体のコード
```ViewController.swift
import UIKit

class ViewController: UIViewController,UIDocumentInteractionControllerDelegate {

    var pdfData: NSData?
    var docController:UIDocumentInteractionController?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        var sampleImages: Array<UIImage> = []
        
        sampleImages.append(UIImage(named: "g_sample001.jpg")!)
        sampleImages.append(UIImage(named: "g_sample001.jpg")!)
        
        pdfData = self.createPDF(sampleImages)!
        
    }

    @IBAction func showOpenIn(sender: AnyObject) {
        let fileName = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent("tmp_file.pdf")
        let url: NSURL! = NSURL(fileURLWithPath: fileName)
        pdfData!.writeToURL(url, atomically: true)
        
        if url != nil {
            docController = UIDocumentInteractionController(URL: url)
            docController?.delegate = self
            docController?.presentOptionsMenuFromRect(self.view.frame, inView: self.view, animated: true)
        }
       
        if NSFileManager.defaultManager().fileExistsAtPath(fileName) {
            print("existed")
        }
    }
    
    
    //convert all images to a pdf
    func createPDF(images: [UIImage]) -> NSData? {
        //16:9 default image size
        let imageWidth: CGFloat = 1136
        let imageHeight: CGFloat = 640
        
        let pdfData: NSMutableData = NSMutableData()
        let pdfConsumer: CGDataConsumerRef = CGDataConsumerCreateWithCFData(pdfData as CFMutableDataRef)!
        
        var mediaBox: CGRect = CGRectMake(0, 0, imageWidth, imageHeight)
        
        let pdfContext: CGContextRef = CGPDFContextCreate(pdfConsumer, &mediaBox, nil)!
        
        for var index = 0; index < images.count; ++index {
            CGContextBeginPage(pdfContext, &mediaBox)
            CGContextDrawImage(pdfContext, mediaBox, images[index].CGImage)
            CGContextEndPage(pdfContext)
        }
        
        return pdfData
    }
    
}
```

流れとしては
PDFに変換したい画像を配列に入れる
↓
配列に入っている画像をPDFに変換していく
↓
共有ボタン(Share)が押されたら、showOpenInの関数が呼ばれて他のアプリへ共有出来るようにする
<img src="https://qiita-image-store.s3.amazonaws.com/0/73659/8f00b8e6-e144-c86f-45b0-c078a12d81cf.png" alt="2015-12-15 08.03.05.png" height="500" />  <img src="https://qiita-image-store.s3.amazonaws.com/0/73659/0fe03f24-be90-c107-7760-4f46dfdeec65.png" alt="2015-12-15 08.03.13.png" height="500" />

ちなみにGithubにもコード載せています。
https://github.com/satoichiki/ConvertImageToPdf
pythonのabcモジュールの抽象メソッドは、クラスかインスタンスは区別しない。


pythonには抽象クラス、インターフェースがありませんでした。ですが、abc(abstract base class 抽象基底クラスの略）モジュールが追加されて、デコレータを使うことによって実現することが可能になりました。今回は、抽象クラスが実際にエラーを出す条件を知るために実験してみます。

### 抽象クラスはインスタンスを生成する際にエラーを出す

抽象クラスは実装して欲しい機能（メソッド）を強制するものです。pythonでは実装していない場合にエラーを出すのは、実装クラス（正確には未実装クラス）をインスタンス化する時だけです。そのため、抽象メソッドを実装していないクラスでも、クラスメソッドを使うためにアクセスするだけならエラーにはなりません。次の場合だと、抽象クラスとそのサブクラスをインスタンス生成するときだけにエラーが出ています。

```python
from abc import *

class Abstract(object, metaclass=ABCMeta):

    @classmethod
    @abstractmethod
    def hello(cls):
        print("Abstract hello")

class Implement(Abstract):
    pass

Abstract.hello()
# => Abstract hello
Implement.hello()
# => Abstract hello

# Abstract()
# TypeError: Can't instantiate abstract class Abstract with abstract methods hello

# Implement()
# TypeError: Can't instantiate abstract class Implement with abstract methods hello
```

もちろんインスタンス化する際には、抽象メソッドを実装（定義）しないといけません。他のメソッドを作ったとしても、それが実装したとは認められません。言い換えると、抽象クラスの作成者の基準をクリアしたことにはなりません。それを確認してみます。

```python
from abc import *

class Abstract(object, metaclass=ABCMeta):

    @classmethod
    @abstractmethod
    def hello(cls):
        print("Abstract hello")

class Implement(Abstract):
    @classmethod
    def say(cls):
        print("Implement class-method say")

    def yeah(self):
        print("Implement instance-method yeah")

Implement()

# => TypeError: Can't instantiate abstract class Implement with abstract methods hello
```

### 抽象クラスメソッドとインスタンスメソッドの区別はされない

抽象クラスのクラスメソッドを抽象メソッドとして定義します。そのサブクラスで同じ名前のメソッドをインスタンスメソッドとして定義した場合はエラーが起きません。おそらく、pythonは全てがオブジェクトで区別はないため、メソッドの種類ではなく名前だけを判断していると思われます。

```python
from abc import *

class Abstract(object, metaclass=ABCMeta):

    @classmethod
    @abstractmethod
    def hello(cls):
        print("Abstract hello")

class Implement(Abstract):
    def hello(self):
        print("Implement hello")

impl = Implement()
impl.hello()

# => Implement hello
```

抽象クラスメソッドをインスタンスメソッドとして、抽象インスタンスメソッドをクラスメソッドとして定義してみます。今回起きたエラーはクラスメソッドhelloが存在しないことが原因です。サブクラスのhelloはインスタンスであり、親クラスのhelloは抽象メソッドのため、クラスメソッドはhelloは実装されていないのでエラーになります。クラスにアクセスするのは、エラーにならないけど、使えと命令されたメソッドがないからダメだよと言っているわけです。

```python
from abc import *

class Abstract(object, metaclass=ABCMeta):

    @classmethod
    @abstractmethod
    def hello(cls):
        print("Abstract hello")

    def say(self):
        print("Abstract say")

class Implement(Abstract):

    def hello(self):
        print("Implement hello")

    @classmethod
    def say(cls):
        print("Implement say")

impl = Implement()
impl.hello()
impl.say()
# =>
# Implement hello
# Implement say

# Implement.hello()
# hello() missing 1 required positional argument: 'self'

Implement.say()

# =>
# Implement say
```

### どこまで実装を強制できるか

今回の実験で、クラスメソッドとインスタンスメソッドを区別して強制することはできないことがわかりました。エラーを自分で用意したり、abcモジュールのオプションなどで方法が用意されているかもしれません。ですが、通常通りの使い方では同じ名前のメソッドの実装までしか制限できないことを覚えておきましょう。