OmniAICreator/Qiita-1.07M huggingface dataset:
MBA勉強ノート


グロービス経営大学院の「MBAマネジメント・ブック」を読みながらメモをまとめてみた。

※MBAとは：Master of Business Administrationの略称で、経営学修士号を意味

# 経営戦略

## 経営理念
企業の存在意義や使命を、普遍的な形で表した基本価値観

## ビジョン
経営理念で規定された経営姿勢や存在意義に基づき、ある時点までに「こうなっていたい」と考える到達点、つまり自社が目指す中期的なイメージを、投資家や従業員や社会全体に向けて示したもの

## 戦略レベル
- 全社戦略 ： どの事業領域（事業ドメイン）で戦い、何を競争力の源泉とし、どのような事業の組み合わせ（事業ポートフォリオ）を持ち、どのように経営資源を各事業に配分するか決定する
- 事業戦略 ： 個別の事業分野において競争に勝ち抜くための戦略を考える
- 機能戦略 ： 事業戦略を実現させるための施策を機能別に落とし込み、機能別の視点から戦略をいかに実施していくか考える

---

### 全社戦略
1. ドメイン
2. コア・コンピタンス
3. 資源配分

`1`どこで戦うのか「戦う土俵」を決め、`2`そこで他社より優位に立てる能力を発揮し、`3`その優位性を維持・発展できるように経営資源を配分すること

#### コア・コンピタンス
1. 模倣可能性
2. 移転可能性
3. 代替可能性
4. 希少性
5. 耐久性

#### 事業ライフサイクル
1. 導入期
2. 成長期
3. 成熟期
4. 衰退期

#### ポートフォリオ・マトリクス
- プロダクト・ポートフォリオ・マネジメント（PPM）：事業を、市場成長率、相対マーケットシェアから「花形」「問題児」「金のなる木」「負け犬」に分ける
- ビジネス・スクリーン（GHのポートフォリオ）：事業地位、業界の魅力度から高・中・低に分ける

#### アンゾフの事業拡大マトリクス
市場浸透後
　└ 新製品投入（製品開発）
　└ 市場拡大（市場開発）
　└ 新市場における新製品の投入（多角化）

---

### 事業戦略

##### 競争優位を築くための基本戦略
1. コストリーダーシップ戦略：競合他社より低いコストで実現
2. 差別化戦略：業界の中でユニークだと見られる何かを創造
3. 集中戦略：特定の顧客層、製品、市場に経営資源を集中させること

---

### 外部環境分析
#### マクロ環境分析
- 政治 (Politics)
- 経済 (Economy)
- 社会 (Society)
- 技術 (Technology)

⇒PESTと呼ばれる

#### 3C分析
- 市場（顧客） (Customer)
- 競合 (Competitor)
- 自社 (Company)

#### SWOT分析
##### 内部環境分析
- 強み
- 弱み

##### 外部環境分析
- 機会
- 脅威

#### 業界分析、業界構造と「5つの力」
1. 新規参入の脅威
2. 代替品の脅威
3. 買い手の交渉力
4. 売り手の交渉力
5. 業界内の協業他社

#### 4つの事業タイプ
1. 特化型事業：やり方により儲かる
2. 規模型事業：大きないと儲からない
3. 分散型事業：大きくなれない
4. 手づまり型事業： 誰も儲からない

#### バリューチェーン（価値連鎖）
- 支援活動：人事、経理、技術開発などの間接部門
- 主活動：購買物流、製造、出荷物流、販売・マーケティング、アフターサービス

#### 競争上の地位
- リーダー
- チャレンジャー
- ニッチャー
- フォロワー

---

### CSR（Corporate Social Responsibilty)
企業は、広く社会全体に対しても「社会的責任」果たという考えが広まっている。

- 法令遵守（コンプライアンス）
- 環境対策
- 障害者雇用
- 貧困撲滅支援


# マーケティング
## マーケティング・プロセス
1. 環境分析と市場機会の発見
2. セグメンテーション（市場細分化）
3. ターゲティング（標的市場の選定）
4. ポジショニング
5. マーケティング・ミックス（4P）  
Prodcut（製品）、　Price（価格）、Place（流通）、Promotion（コミュニケーション）
6. 施策の実行と評価

## 顧客タイプ
1. イノベーター（革新者）
2. アーリー・アダブター（初期採用者）
3. フォロワー（初期大衆）
4. レイト・フォロワー（後期大衆）
5. ラガード（採用遅滞者）

## AIDAモデル
- 注意（Attention）
- 興味（Interest）
- 欲求（Desire）
- 行動（Action）

## レピュテーション（評判）



# アカウンティング
## アカウンティングの目的
### 財務会計
- ステークホルダー向け
- 経営成績、財務状態、その他感心事

### 管理会計
- 経営者向け
- 予算、原価計算

### 税務会計
- 税務当局向け
- 納税申告書

## 財務諸表
- 損益計算書（P/L）：利益を段階的に表したもの
- 貸借対照表（バランスシート）：決算期時点で資産内容を明らかにしたもの
- キャッシュ・フロー計算書：現金の増減を整理したもの

## 5段階の利益
1. 売上総利益（売上高 - 売上原価）※別名：粗利益
2. 営業利益（`1` - 販売費および一般管理費）  
営業担当者の人件費や広告費や、販管費を差し引いた利益
3. 経常利益（`2` + 営業外収益 - 営業外費用）
4. 税金等調整前当期純利益（`3` 特別利益 - 特別損失）
5. 当期純利益（`4` - 法人税・住民税および事業税 - 少数株主利益）

## 総合分析力：ROA・ROE
### ROA(Return On Assets：総資産利益率)
`利益 ÷ 総資産`

- 総資産から利益をどれだけ出しているのかを分析。
- 企業の総合的な事業活動の利益率を示す

#### 売上高当期純利益率
`当期純利益 ÷ 売上高`

#### 総資産回転率
`売上高 ÷ 総資産`
総資産を使ってどれだけ売上を達成したか

### ROE(Return On Equity：自己資本利益率)
`当期純利益 ÷ 自己資本`

- 投下資本に対する利益率
- 株主の投資がどの程度リターンを生み出したか

#### 財務レバレッジ
`総資産 ÷ 自己資本`



# 別編
## 組織行動学と人的資材管理
### 組織行動学（OB）
個人の取り組みで動かす

1. 個人、集団、組織
2. 認識、行動

### 人的資源管理（HRM）
企業の仕組みで動かす

1. ヒューマンリソースポリシー
2. 組織構造
3. ヒューマンリソースシステム（人員配置、報酬、評価、能力開発）
4. 組織文化
Start HDFS and YARN on Mac

# Hadoopをインストール

[ここ](http://www.apache.org/dyn/closer.cgi/hadoop/common/)からHadoop Commonをダウンロード。ビルド済なのでmacでも動く。設定などは全て/etc/hadoopの中に含まれている。(2.xであれば)
こいつを擬似分散モードで動かします。
コマンドなどのバイナリはbinとsbinに含まれているのでここにPATHを通しておくといい。あとJAVA_HOMEが適切に設定されていることも確認する。自分はzshrcにこんな風に書いた。

```sh
export JAVA_HOME=`/usr/libexec/java_home`
export HADOOP_INSTALL=/Users/kaisasak/hadoop-2.4.1
export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin 
```

確認

```
$ hadoop version
```

# 設定ファイルの編集
このままでもスタンドアローンモードでは起動するけれど、折角なので擬似分散モードで起動させてみる。
そのためには２つの設定ファイルを書く必要がある。

* core-site.xml(Hadoop Commonの設定ファイル)
* hdfs-site.xml(HDFSの設定ファイル)
* mapred-site.xml(MapReduceの設定ファイル)
* yarn-site.xml(YARNの設定ファイル)

```core-site.xml
<?xml version="1.0"?>
<!-- core-site.xml -->
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost/</value>
  </property>
</configuration>
```

```hdfs-site.xml
<?xml version="1.0"?>
<!-- hdfs-site.xml -->
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>  <!-- Blockのレプリケーション数 -->
  </property>
</configuration>
```

```mapred-site.xml
<?xml version="1.0"?>
<!-- mapred-site.xml -->
<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:8021</value>
  </property>
</configuration>
```

今回はYARNも使うのでyarn-site.xmlも書く。

```yarn-site.xml
<?xml version="1.0"?>
<!-- yarn-site.xml -->
<configuration>
  <property>
    <name>yarn.resoucemanager.address</name>
    <value>localhost:8032</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce.shuffle</value>
  </property>
</configuration>
```

# SSHの設定
擬似分散モードではデーモンをSSHで起動するのでSSHでlocalhostのmacのログインできるようになっていたといけない。`System Preference`から`Sharing`を選んでRemote loginを許可する

![Screen Shot 2014-08-17 at 16.05.32.png](https://qiita-image-store.s3.amazonaws.com/0/7129/d5541081-eee1-49fa-a1f4-2d9eb0647701.png)

ログインを許可するユーザに自分を追加する。(この画像ではAdministratorsだけになってる)

![Screen Shot 2014-08-17 at 16.05.54.png](https://qiita-image-store.s3.amazonaws.com/0/7129/1e4d3142-2341-99b2-7662-5e146c21d7f3.png)

これでsshでlocalhostのMacにログインできるようになる。

# HDFSのフォーマット

```
$ hadoop namenode -format
```

# デーモンの起動

```
$ start-dfs.sh
$ start-yarn.sh
```

これで起動完了。
node.jsのnpm（package.json）にGitHubを指定する：更新の止まったモジュールを勝手に改修して使う


# package.jsonにGitHubのURLを指定する

```package.json
{
  "dependencies": {
    "hoge": "zaru/hoge"
  }
}
```

これだけでOK。`https://github.com/zaru/hoge`を示しています。http://から記載するとうまいこと反映されなかったので、短縮形にしてみたら動いた。

# すでに登録されているnpmモジュールをforkして使おう

node.jsの良いところは、欲しいなーと思った機能がたいていnpmのモジュールにあって、package.jsonにモジュール名書いて`npm install`ってやれば、サクッとインストールされるところなんだけど（そんなのRubyもPerlもPHPもあるだろって感じだけど…）、時々更新が止まっていて、そのままだと動かないモジュールとかあったりします。

Pull Requestを投げて対応してくれれば良いんですが、もう1年以上Pull Requestが放置されていたり、そもそも「メンテ変わってくれ！」っていう人もいたりします。

というわけで、上記のような`package.json`にforkした自分のGitHubリポジトリを指定してあげれば、普段通りの`npm install`で入れられるので楽ちんというわけです。
MongoDBインストール ～ PHPで使うまで

## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)１．環境

さくらVPS（CentOS release 6.5 Final）
上記サーバーにyumでMongoDBを入れたあと、PHPから使えるように設定します。

## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)２．MongoDBをyumコマンドでインストール

【1】yumリポジトリ追加

```
# vi /etc/yum.repos.d/10gen.repo
--------------------------------
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=0
```

【2】MongoDBインストール

```
# yum install mongo-10gen mongo-10gen-server --enablerepo=10gen
```

【3】mongod サービスを起動

```
# /etc/init.d/mongod start
```

【4】コマンドラインで起動確認

```
# mongo
```

MongoDBのバージョンが表示されればOKです。exit で抜けられます。


## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)３．PHPから使えるようにする

前提：peclコマンドでPHP用mongoモジュールをインストールしますので、環境にphp-pearが無い場合は次の手順で入れて下さい。

【0】（まだ無い場合）php-pearをインストール

```
yum install php-pear
pear upgrade --force Archive_Tar
pear upgrade --force Console_Getopt
pear upgrade PEAR
```

【1】PHP用mongoモジュールをインストール

```
pecl install mongo
```

> ### エラーが出る場合
> pecl install mongo で「ERROR: `phpize' failed」が出た場合、php-develパッケージをインストールするとphpizeがついて来るので、次のコマンドで入れたあと、再挑戦。
> 
> ```
> yum install php-devel
> ```


【2】php.iniを編集してApache再起動

```
# vi /etc/php.ini
-----------------
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
extension=json.so
extension=mongo.so
---------------

# service httpd restart
```

> ### 補足
> json.so については任意ですが、後の手順でPHPとの連携がうまくいかない場合があるため、あらかじめ記載しておきます。（逆に、不要な場合は消して下さい）
> 
> ▼参考URL
> http://stackoverflow.com/questions/22952994/mongo-so-undefined-symbol-php-json-encode-in-unknown-on-line-0-after-instal

## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg)４．そしてPHPからDB接続

こんな感じで INSERT や SELECT ができます。（PHPファイルの文字コードはUTF-8）

```
<?php
// DBへ接続
$mongo = new Mongo();
// データベースを指定
$db = $mongo->selectDB("db_test");
// コレクションを指定
$coll = $db->selectCollection("coll_test");
$coll->update(
	array('user_id' => '123'), // WHERE句に相当
	array('$set' => array('user_name' => '南方 熊楠')), // SET句に相当
	array('upsert' => true) // UPDATE or INSERT（無ければ挿入）
);

// コレクションのドキュメントを全件取得
$docs = $coll->find();
// 表示 ※MongoCursorオブジェクトが取得されるのでforeachで回す
foreach ($docs as $id => $obj) {
	print "<pre>";
	print var_dump($obj);
	print "</pre><hr>";
}
?>
```

DBやテーブル（コレクション）は事前にCREATEする必要はありません。存在しなければ自動的に作られます。すわ！便利。より詳しいDB操作については下記ページを参考にして下さい。

▼SQL から Mongo への対応表
http://www.php.net/manual/ja/mongo.sqltomongo.php


## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg) 参考URL

mongodbをインストールして、phpでアクセス
http://m-shige1979.hatenablog.com/entry/2013/09/16/233024

MongoDB｜PHP公式
http://jp.php.net/mongo

また、MongoDBのWEB管理ツールとしては RockMongo をオススメします。

RockMongoインストール
http://qiita.com/yasumodev/items/e782ca81ab85726d9771

(･o･ゞ いじょー。
パスからディレクトリ名/ファイル名を取り出す

## ディレクトリ名


```bash

$ dirname /path/to/hoge
/path/to

```

## ファイル名

```bash

$ basename /path/to/hoge
hoge

```

## どういうときに使ってる？
- 雑にPATHを通したいとき

### ex. SwiftコマンドにPATHを通す


```bash

$ export PATH=$PATH:`find /Applications/Xcode6-Beta*.app -name swift|grep bin|xargs -I{} dirname {}`


```
Swiftをコマンドライン(CLI)で実行する

# これは何？
慣れたエディタでサクッとSwiftのコードを書いて試せるように、Swiftをコマンドラインで実行できるようにしましたメモ。

# 事前準備
## Xcode & Swiftのインストール
2014/08/17時点ではXcode 6 betaをインストールすればOK。
XCode 6にSwiftも含まれています。

ここ(↓)から入手できます。#要開発者アカウント登録(無償)

[Xcode 6 beta including Swift](https://developer.apple.com/xcode/downloads/)


## SwiftコマンドにPATHを通す
コマンドラインでSwiftコマンドが使えるように、PATHを通します。


```bash


$ export PATH=$PATH:`find /Applications/Xcode6-Beta*.app -name swift|grep bin|xargs -I{} dirname {}`

   ## Swift入りのXCodeはまだBeta版なので、find先を/Applications/Xcode6-Beta*.appとしています。
   ## Betaが取れたら、適宜書き換えてください。たぶんXCodeでOK

```


ターミナルを開く度にPAHTを通すのが面倒なら、 ~/.bash_profileあたりに追記してしまいましょう


```bash:~/.bash_profile

export PATH=$PATH:`find /Applications/Xcode6-Beta*.app -name swift|grep bin|xargs -I{} dirname {}`

or

export PATH=$PATH:/path/to/swift_dir
                  ~~~~~~~~~~~~~~~~~~
                    ↑↑↑
   ## find /Applications/Xcode6-Beta*.app -name swift|grep bin|xargs -I{} dirname {}
   ## の結果を書けばOK

```

## 確認

```bash

$ swift -h

でhelpが表示されればOK

```

# 試しにHelloWorldしてみる

vi hello.swift

```bash:hello.swift

var str = "Hello Swift World!!"
println(str)

```

```bash:実行してみる

$ swift hello.swift
Hello Swift World!!

```

お手軽ですね。
CentOS 6.5でHBaseのスタンドアロンモードを動かす


# はじめに

『7つのデータベース7つの世界』でインストールしないといけなかったので、メモしておきます。

## 環境
* CentOS 6.5 64bit
* Java 1.7.0
* HBase 0.98.5

# HBaseインストール

## Javaインストール
HBaseはHadoop上で動作するので、Javaが必要になります。

対応するJavaのバージョンはこちらにあります。

> http://hbase.apache.org/book/configuration.html#java

とりあえずJDK7いれとけば問題ないようです。

ダウンロードページからダウンロードして、さくっとインストールしてしまいましょう。

> http://www.oracle.com/technetwork/jp/java/javase/downloads/jdk7-downloads-1880260.html

```bash
$ sudo rpm -ivh jdk-7u67-linux.x64.rpm
$ java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
```

また、環境変数`JAVA_HOME`を設定する必要があります。

```bash
$ echo "export JAVA_HOME=/usr/java/default" >> ~/.bash_profile
$ source ~/.bash_profile
```


## HBaseダウンロード
ミラーサイトからビルド済みのものをダウンロードして、展開します。

```bash
$ wget http://ftp.riken.jp/net/apache/hbase/stable/hbase-0.98.5-hadoop2-bin.tar.gz
$ tar zxvf hbase-0.98.5-hadoop2-bin.tar.gz
```

## 設定ファイル編集
設定ファイルを編集します。
ここでは、HBaseが使用するデータディレクトリのみ指定します。
デフォルトでは`/tmp`以下になっています。

```bash
$ cd hbase-0.98.5-hadoop2
$ vi conf/hbase-site.xml
```

```xml:conf/hbase-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///home/nownabe/hbase</value>
  </property>
</configuration>
```

## 起動
以上で準備はできたので、コマンドを使って起動します。

```bash
$ bin/start-hbase.sh
starting master, logging to /home/nownabe/7db/hbase/hbase-0.98.5-hadoop2/bin/../logs/hbase-nownabe-master-7dbs.nownabe.local.out
```

## 確認
HBaseには標準でWebの管理画面が付属しています。
HBaseを起動したマシンのポート`60010`番にアクセスしてみて、管理画面が表示されればOKです。

![スクリーンショット 2014-08-17 15.13.55.png](https://qiita-image-store.s3.amazonaws.com/0/43208/96f1fb4c-c106-dcd9-70dc-e85f13437b75.png "スクリーンショット 2014-08-17 15.13.55.png")

# 使ってみる
HBaseにはJRubyベースの対話シェルが用意されているので、それを使ってみます。
次のコマンドで起動できます。

```bash
$ bin/hbase shell
2014-08-17 15:15:23,351 INFO  [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.98.5-hadoop2, rUnknown, Mon Aug  4 23:58:06 PDT 2014

hbase(main):001:0>
```

irbですねw
とりあえず`version`とか`help`をやってみます。

```ruby:hbase_shell
> version
0.98.5-hadoop2, rUnknown, Mon Aug  4 23:58:06 PDT 2014
> help
HBase Shell, version 0.98.5-hadoop2, rUnknown, Mon Aug  4 23:58:06 PDT 2014
Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command.
Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group.

...
```

いっぱいでてきます。

`status`でサーバの状態を確認できるみたいです。

```ruby:hbase_shell
> status
2014-08-17 15:22:19,939 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
1 servers, 0 dead, 2.0000 average load
```

## おわりに
以上です。
スタンドアロンで動かすのは意外とさくっとできました。

Hadoopでは完全分散に苦労した覚えがあるんですが、こいつはどうなんでしょうか。
HomebrewでVimをインストール

neocomplete入れて、Vim立ち上げようとしたら、
これが出てきたので、バージョンアップを。

```
neocomplete does not work this version of Vim.
It requires "if_lua" enabled Vim(7.3.885 or above).
```

# homebrewでインストール

```
$ brew install lua
$ brew install vim --with-lua
```

もし以下のエラーが出てきた場合は、

```
Warning: vim-7.4.335 already installed
```

これで。

```
$ brew reinstall vim --with-lua
```

# PATHを変える

今入れたVimは`/usr/local/bin/vim`に入っていて
PATHを変えないと使えないようなので…
まずは何処のを読んでいるのか確認。

```
$ which vim
/usr/bin/vim
```

`~/.bashrc`に以下を追加

```
export PATH=/usr/local/bin:/usr/bin
```

ターミナルで設定を読み込む。

```
$ source ~/.bashrc
$ which vim
/usr/local/bin/vim
```

これで使えるようになりました。

参考

[homebrewで最新のvim7.4をインストールする方法](http://qiita.com/peroon/items/57bf22c0e32236752c5d)
iPhoneアプリ開発で基本的に実装するもの

|		|	役割	|	使用ライブラリ	|	参考URL	|
|	:----------- 	|	:-----------	|	:-----------	|	:-----------	|
|	イントロビュー	|	アプリの目的や価値を伝える	|	[EAIntroView](https://github.com/ealeksandrov/EAIntroView)	|		|
|	コーチマーク	|	使用方法を説明する	|	[WSCoachMarksView](https://github.com/workshirt/WSCoachMarksView)	|		|
|	通知	|	アプリが忘れ去られないように思い出してもらう	|		|	[UILocalNotificationを使った通知の設定について](https://ios-practice.readthedocs.org/en/latest/docs/notification/)	|
|	更新情報	|	更新情報やnewアプリのリリース情報等をユーザに知らせる	|		|		|
|	アプリ内メーラー	|	アプリの内容を投稿するのに必要（アプリ内で動く）	|	[objc-mf-mail-compose-view-controller](https://github.com/masakihirokawa/objc-mf-mail-compose-view-controller)	|		|
|	アプリ内SNS	|	アプリの内容を投稿するのに必要（アプリ内で動く）	|	Social.framework	|		|
|	アプリ内iTunse	|	アプリ内で他のアプリを紹介するのに必要（アプリ内で動く）	|	StoreKit.framework	|		|
|	レビュー依頼	|	レビューをお願いする	|	[appirater](https://github.com/arashpayan/appirater)	|		|
|	ネットワーク	|	サーバへの連携	|	[AFNetworking](https://github.com/AFNetworking/AFNetworking)	|		|
TypeScriptのimportはどこに書くことができるか

TypeScript HandbookのModuleのところを読んでいたら、こんなコードが出てきた。

http://www.typescriptlang.org/Handbook#modules

内部モジュール

```ts:Test.ts
/// <reference path="Validation.ts" />
/// <reference path="LettersOnlyValidator.ts" />
/// <reference path="ZipCodeValidator.ts" />
...
var validators: { [s: string]: Validation.StringValidator; } = {};
validators['ZIP code'] = new Validation.ZipCodeValidator();
validators['Letters only'] = new Validation.LettersOnlyValidator();
```

外部モジュール

```ts:Test.ts
import validation = require('./Validation');
import zip = require('./ZipCodeValidator');
import letters = require('./LettersOnlyValidator');
...
var validators: { [s: string]: validation.StringValidator; } = {};
validators['ZIP code'] = new zip.ZipCodeValidator();
validators['Letters only'] = new letters.LettersOnlyValidator();
```

内部モジュールの時は、`Validation.ZipCodeValidator`だったのが、外部モジュールの時は`zip.ZipCodeValidator`として参照している。わかるんだけどこれどうにかまとめられないのかなと思って考えてみた。

```ts:Validation.ts
export interface StringValidator {
    isAcceptable(s: string): boolean;
}
// 以下追記
import zip = require("./ZipCodeValidator");
import letters = require("./LettersOnlyValidator");
export import ZipCodeValidator = zip.ZipCodeValidator;
export import LettersOnlyValidator = letters.LettersOnlyValidator;
```

importしてからのexport。これならTest.ts側で`validation.ZipCodeValidator`として参照できる。

あるいはこうも書けそうだ。

```ts:Validation.ts
import zip = require("./ZipCodeValidator");
import letters = require("./LettersOnlyValidator");
module Validator {
    export interface StringValidator {
        isAcceptable(s: string): boolean;
    }
    export import ZipCodeValidator = zip.ZipCodeValidator;
    export import LettersOnlyValidator = letters.LettersOnlyValidator;
}
export = Validator;
```

外部モジュールのimportはファイルのトップレベルにしか書けないが、Aliasとしてのimportはモジュール内にも書くことができる。
eclipseで開発したAndroidアプリを実機で確認したい

Eclipseで開発したAndroidアプリを実機で確認する方法を実践したので、まとめてみました。実機はドコモ MEDIAS ES N-05Dを使用。

###1.PCに実機のドライバをインストール
・PCに実機のドライバをインストールする。
　※この方法は機種によって異なる。
　※詳しいインストール方法はメーカーのサイトなどを参考にする。
　※ドコモ MEDIAS ES N-05Dは以下のサイトからインストールを実施。
　　http://www.n-keitai.com/guide/download/n05d/usb/

###2.実機の設定
・[設定]から[セキュリティ]を開き、「提供元不明のアプリ」をチェックする。
・[設定]から[開発者向けオプション]を開き、「USBデバッグ」をチェックする。
　※[設定]内のメニュー名はAndroidのバージョンによって異なる。

###3.PCと実機をUSBケーブルで接続
・eclipseでデバイスビューを表示し、正しく接続されたことを確認する。
　※正しく接続されている場合は、デバイスビューへ接続したデバイスが表示される。
　※デバイスビューの表示方法は以下の手順。
　　eclipseのメニューバーからウィンドウ]-「ビューの表示」-「その他…」-[Android]-[デバイス]を選択して「OK」を押す。

###4.開発したアプリを実機で起動
・eclipseのパッケージ・エクスプローラから起動したいアプリを選択し、メニューバーから[実行]-[実行]を選択する。
・「実行中のAndroidデバイスを選択する」をチェックし、接続したデバイスを選択して「OK」を押す。
・これでアプリが実機にインストールされ、実行される。
　※エミュレータを使用していた場合、以上の手順のまま実行しても実機で起動されない。
　※[実行]-[実行構成]から対象のAndroidアプリケーションを選択し、[ターゲット]タブで選択されているAndroid仮想デバイスのチェックを外した状態で「実行」する。
Swiftで定義されているoperator一覧


```swift
infix operator + {
    associativity left
    precedence 140
}

infix operator ... {
    associativity none
    precedence 135
}

infix operator != {
    associativity none
    precedence 130
}

infix operator > {
    associativity none
    precedence 130
}

infix operator -= {
    associativity right
    precedence 90
    assignment
}

infix operator ~> {
    associativity left
    precedence 255
}

infix operator < {
    associativity none
    precedence 130
}

infix operator | {
    associativity left
    precedence 140
}

infix operator >> {
    associativity none
    precedence 160
}

infix operator ~= {
    associativity none
    precedence 130
}

infix operator >= {
    associativity none
    precedence 130
}

infix operator !== {
    associativity none
    precedence 130
}

infix operator &% {
    associativity left
    precedence 150
}

infix operator /= {
    associativity right
    precedence 90
    assignment
}

infix operator >>= {
    associativity right
    precedence 90
    assignment
}

infix operator |= {
    associativity right
    precedence 90
    assignment
}

infix operator <= {
    associativity none
    precedence 130
}

infix operator || {
    associativity left
    precedence 110
}

infix operator << {
    associativity none
    precedence 160
}

infix operator && {
    associativity left
    precedence 120
}

infix operator %= {
    associativity right
    precedence 90
    assignment
}

infix operator <<= {
    associativity right
    precedence 90
    assignment
}

infix operator / {
    associativity left
    precedence 150
}

infix operator - {
    associativity left
    precedence 140
}

infix operator &* {
    associativity left
    precedence 150
}

infix operator += {
    associativity right
    precedence 90
    assignment
}

infix operator &+ {
    associativity left
    precedence 140
}

infix operator * {
    associativity left
    precedence 150
}

infix operator *= {
    associativity right
    precedence 90
    assignment
}

infix operator & {
    associativity left
    precedence 150
}

infix operator % {
    associativity left
    precedence 150
}

infix operator &= {
    associativity right
    precedence 90
    assignment
}

infix operator &- {
    associativity left
    precedence 140
}

infix operator ?? {
    associativity right
    precedence 110
}

infix operator ^ {
    associativity left
    precedence 140
}

infix operator ^= {
    associativity right
    precedence 90
    assignment
}

infix operator == {
    associativity none
    precedence 130
}

infix operator ..< {
    associativity none
    precedence 135
}

infix operator === {
    associativity none
    precedence 130
}

infix operator &/ {
    associativity left
    precedence 150
}

prefix operator ! {
}

prefix operator + {
}

prefix operator - {
}

prefix operator ++ {
}

prefix operator -- {
}

prefix operator ~ {
}

postfix operator ++ {
}

postfix operator -- {
}
```
debian squeeze に 最新ぽい nginx をインストール

## debian に最新のnginx をインストール

```bash
wget "http://nginx.org/keys/nginx_signing.key"
sudo apt-key add nginx_signing.key
sudo vi /etc/apt/sources.list
```

## sources.listを書く
```
deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx
```

## インストール
```
sudo apt-get update
sudo apt-get install nginx
```

## バージョン見る
```
$ /usr/sbin/nginx -v
nginx version: nginx/1.6.1
```

## アクセスしてみる
![スクリーンショット 2014-08-17 14.54.39.png](https://qiita-image-store.s3.amazonaws.com/0/30708/96065a71-8185-b7ec-0ddd-105af88a3514.png)

はっぴー
cabal-install(version 1.20.0.3)のOSX10.8.5へのインストール


http://www.haskell.org/cabal/download.html
からsourceをダウンロード。（今回の場合、cabal-install-1.20.0.3.tar.gz）

1. boostrap.shの27行めにローカルインストールフォルダを指定する。

2. ghcをインストールするのにgcc-mp-4.8を用いたので、cabalもそれでコンパイルする。boostrap.shに
CC="/opt/local/bin/gcc-mp-4.8"
を指定してやる。

3. その後./boostrap.shを走らせてインストールする。
Unityでメインカメラとサブカメラを同時に画面表示

###概要
Unityでカメラを２つ用意して、それぞれのカメラに
写っているものを画面に表示するメモ

ゲームだとメイン画面とサブマップ画面みたいな使い方ができるかなと

###サンプル
やり方は簡単で
・CameraObjectを２つ用意
・CameraObjectの"ViewportRect"の値を調整
例）
 MainCameraは　X:0 Y:0 W:1 H:1
 SubCameraは　X:0.8 Y:0.8 W:0.2 H:0.2
とすると、MainCameraは全画面に、SubCameraは右上に表示される

SubCameraを上から俯瞰視点にすれば、ミニマップのような表示を
簡単にできるので、カメラ位置を調整すると色々できそう

MainCamera
![MainCamera.png](https://qiita-image-store.s3.amazonaws.com/0/49072/9e8af300-be54-6948-2959-e84ef7f06beb.png)

SubCamera
![SubCamera.png](https://qiita-image-store.s3.amazonaws.com/0/49072/ef32d26c-8e1e-f579-90cc-0a205e3da58a.png)

###画面結果
![Result.png](https://qiita-image-store.s3.amazonaws.com/0/49072/7e7714f8-5c81-7b29-814d-b2a8fa32d9e0.png)
Ubuntuでnvm使っている場合のatomインストール

毎度忘れるのでメモ

# 現象
`script/build`はうまくいくのに、`sudo script/grunt install`で「/usr/bin/env: node: そのようなファイルやディレクトリはありません」とかそういう類のエラーが出てしまう。

# 原因
当たり前といえばそれまでなんだけど、sudoしてるので、nvmで管理しているnodeにパスが通っていないだけ。

# 対策
先にnodeにパスを通してから`sudo script/grunt install`してやればよい。
具体的には`source /home/ユーザ名/.nvm/nvm.sh`する。
通して書くと、

```
script/build
sudo su
source /home/ユーザ名/.nvm/nvm.sh
script/grunt install
```

となる。
ghc-7.8.3のOSX10.8.5へのインストール


1. http://www.haskell.org/ghc/からMac OS用のバイナリファイルを持ってくる。
2. その後ファイルを解凍して、ghc-7.8.3のディレクトリで
./configure --prefix=/aa/aa --with-gcc=/opt/local/bin/gcc-mp-4.8
などとして、gcc4.8のコンパイラを用いる。
でないと、

```zsh
cc1: error: unrecognized command line option "-Wno-invalid-pp-token"
cc1: error: unrecognized command line option "-Wno-unicode"
のようなエラーが出てしまうので注意。
```
Swiftのテキストを英語（原文）で学んでみる。


##理由
- まだ日本語の情報が不足している
- 日本語のテキストが出るのを待てない
- ネット上の情報に推測や間違った情報が多い
- 本家Appleの情報が一番信頼できる
- 英語を訳して日本語で覚えるのが二度手間
- Swiftが言葉（英語）として読みやすい仕様になってる
- 比較的英語が得意
- 英語力をもっとアップさせたい
- 最新の情報をできるだき早く得たい
- Swiftを深く理解したい
- Swiftを完全にマスターしたい


## テキスト
###基本的な情報は
Apple Developer のサイト(US)から

web:
[The Swift Programming Language]
(https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/)

iBooks:
[The Swift Programming Language (iBooks)]
(https://itunes.apple.com/us/book/the-swift-programming-language/id881256329?mt=11&ls=1)

###その他の補足、最新情報は

同じく Apple Developer の Swift サイトから

[Swift](https://developer.apple.com/swift/)

##辞書
MacOS標準辞書を使用（単語を3本指でタップ）

選択してる辞書は：

- New Oxford American Dictionary
- ウィズダム英和辞典 / ウィズダム和英辞典
- （スーパー大樹林）
- Apple Dictionary
- Wikipedia


##学ぶために心がけたこと
・とにかく英文を読み、慣れる。
・日本語に訳さない
・英文のまま理解する
・意味が推測できる単語は調べない
・何度も出てくる単語は覚える

##学習の流れ
1. わからない単語があっても意味を推測し一段落読む
2. 理解に欠かせない単語、気になる単語（何度も出てくる単語）を探す
3. 発音があってるか確認する（MacOS「テキスト読み上げ」を使用）
3. 英英辞書で意味を確認
4. 理解に自信がないときは英和辞書で確認
5. 辞書に語源がある場合確認
6. 例文を読み理解を深める
7. テキストに戻り正しい発音と理解で読みなおす

特に覚えるために時間をさいていませんが、同じ単語が何度も出てくる場合は忘れる前に思い出すので記憶が定着します。
問題はそう頻繁に出てこない（であろう）単語は何度も調べてしまうことになってしまいます。。

##今後の課題
なかなか覚えられない単語をどう覚えるか、です。
単語をコピペして、覚えれるまで何度も見れるように、などと考えてたりしますが。。何か良いアイデアがあれば教えてください。

##感想
今回初投稿なのですが、、思うがままに記述しましたが、どうなんでしょう？？
自分の考えをまとめるためと、同じようなことを考えてる方の参考になればと思い投稿してみましたが、少しでも実りあるものになれば幸です。
まぁ初心者ならではの怖いものしらずってことで、どんどん当たって砕けちりたいと思います。よろしくお願いしまっす。
次期Re:VIEW parserに関するメモ:実装編

# Test

## ブロックのテスト

###旧parserのテスト

```rb
  def test_headline_level1
    @builder.headline(1,"test","this is test.")
    assert_equal %Q|<h1 id="test"><a id="h1"></a>第1章　this is test.</h1>\n|, @builder.raw_result
  end
```

Builder#raw_resultで結果を取得している。

###新parserの挙動

```rb
  def test_headline_level1
    result = @builder.headline(1,"test","this is test.")
    assert_equal %Q|<h1 id="test"><a id="h1"></a>第1章　this is test.</h1>\n|, result
  end
```

raw_resultがなくなる。変換結果はBuilder#headline等のハンドラの戻り値になる。

このため旧parser用のテストが動かない。

なお、インラインについては新parserの挙動と同様のため、変更しなくても動く（はず）。

###新テスト

compile_block()みたいなtest用のhelperを用意して、それを使うようにする。

```rb
  def test_headline_level1
    result = compile_block("={test} this is test.\n")
    assert_equal %Q|<h1 id="test"><a id="h1"></a>第1章　this is test.</h1>\n|, result
  end
```

### 対応方法

* 旧parserのテストにテスト用ヘルパーメソッドを追加して、それで動くようにする
* 新parserのテストもそれに合わせる
[Swift]switch文のcaseやdefault節で何も処理しない場合はbreakが必要

# 概要
* **Swiftのswitch文では、各case節やdefault節に何か1行以上処理が書いてないと文法エラーになります。**
* コメントは不可です。Objective-Cではdefault節に`// do nothing`等のコメントだけ書くことも多かったと思いますが、swiftでは文法エラーになります。
* 処理は`break`や`println`、`return`などなんでもOK。とくに必要な処理がない場合は、`break`を記述すると処理を変えず文法エラーを回避することができます。
* ~~Swiftではswitch文のdefault節が必須になりました。~~
* **→取りうるすべての値をカバーしていれば、default節は必須ではありません。**
* mono0926さんからいただいたご指摘をもとに、誤りを修正しました。どうもありがとうございます!  2014/08/17

# 解決法

* 処理がない場合は、明示的に`break`を書けばOK

```swift:sample.swift
var ret = 0
switch section {
  case 0:
    ret = array1.count
  case 1:
    ret = array2.count
  default:
    break // do nothing
}
```

# 文法エラーの例

### 問題点
* default節に処理がない

### エラーメッセージ
* 'default' label in a 'switch' should have at least one executable statement

```swift:error2.swift
var ret = 0
switch section {
  case 0:
    ret = array1.count
  case 1:
    ret = array2.count
  default:
    // do nothing
}
```
# まとめ
* 何も処理がない場合は`break`を書けばOK
* 気になる点がありましたら気軽にコメントください！
2014年8月のWindows Updateでブルースクリーンが起きる可能性あり

取り急ぎ情報共有。
※書いてある内容は「筆者のPCでは何とかなった」という話なので、実際にやる場合は自己責任でお願いします…
　書いてある内容を実行して何かあっても、申し訳ありませんが責任は負えません…


# 事象
8/14ごろにWindows Updateで配布されたプログラムの中に、Windowsが起動しなくなる事象が発生している模様です。


http://www.infoworld.com/t/microsoft-windows/blue-screen-stop-0x050-error-reported-systems-installing-kb2976897-kb2982791-and-kb2970228-248363

# 事前回避方法
ブルースクリーンになる前に気付いた方は、この手順で回避が出来そうです。
PCはWindows 8です。

## 更新プログラムのアンインストール
1. [ファイル名を指定して実行]より、[Appwiz.cpl]と入力してOK
1. [プログラムのアンインストールと変更] が表示されたら、左側にある[インストールされた更新プログラムを表示]をクリック
1. [更新プログラムのアンインストール]画面が表示されたら、[Microsoft Windows]の下にある該当のKBを探す
1. 該当のKBを右クリック→[アンインストール]をする※このとき「再起動しますか？」と聞かれるが、このタイミングでは行わない
2. (覚悟を決めて)再起動をする
3. 一度起動したら、もう一度(覚悟を決めて)再起動をしてみる

該当のKBとは、[このサイト](http://www.infoworld.com/t/microsoft-windows/blue-screen-stop-0x050-error-reported-systems-installing-kb2976897-kb2982791-and-kb2970228-248363) に記載されている下記3つです。

* KB2976897 
* KB2982791 
* KB2970228 

また、2度再起動をしているのは、「更新プログラムをインストール後、再起動をして有効になった後、もいちど再起動したら動かなくなった」という情報があったため、念のため起動するかどうか確かめたかったため。


## 更新プログラムの自動インストールをやめる
せっかくアンインストールしても、再度同じ更新プログラムをインストールしてしまっては意味がありません。
更新プログラムの不具合が直るまでは、自動インストールはやめておいたほうが無難だと私は思います。

やっていることは、下記サイトの内容です。
ただ、Windows8用に少し書き換えています。
http://news.mynavi.jp/articles/2014/08/16/windows81update/

1. タイル画面からチャームを開き、[設定]→[PC設定の変更]（一番下にあります）をクリック
2. [PC設定]画面が表示されたら、左側にある[保守と管理]（一番下かと）をクリック
3. [Windows Update]が表示されたら、右側画面の[更新プログラムのインストール方法を選択する]をクリック
4. [更新プログラムのインストール方法を選択する]画面が表示されたら、[重要な更新プログラム]のプルダウンを[更新プログラムを自動的にインストールする(推奨)]**以外**にして[適用]をクリック


# 起動しなくなったPCを復活させる方法
これはやっていないのでわかりませんが…
このサイトが参考になるのでは？と思います。
事前に「復元ポイント」を作成していないとうまくいかず、再インストール以外に手がなくなるみたいですが…
http://news.mynavi.jp/articles/2014/08/16/windows81update/


# 今後
Microsoftの正式情報が出てくるのを待ちましょう…
それまでのつなぎということで…
たぶんここが更新されるはず？：http://support.microsoft.com/kb/2982791

復元ポイント、ちゃんと作っておこうっと。
作っていなかったらしいし…(´・ω・｀)
DockerでさくっとMunin masterをつくる

今のお仕事は「お試しでいいから○○が動くクラスタを作って」みたいな話をぽこぽこいただいて作業をする感じなのですが、数台～十数台程度の小さな規模のクラスタ用途としてはMuninが手間がかからずいいのかなと思っているわけです。

で、クラスタを作ると、そのたびにDockerでMunin masterコンテナを作って動かしていたのですが、設定ファイルが異なる、パッケージのバージョンが異なるなど色々なバージョンのMunin masterができてしまって、管理するのが面倒になるというパターンに。そんな中でひとつやり方を見いだせた感じがするのでメモ。

# 使い方

Dockerfileは https://github.com/yacchin1205/docker-munin とか https://registry.hub.docker.com/u/yacchin1205/docker-munin/ を参照。Docker Hubでビルドずみ。

以下のような構成のmunin masterをポート8081で起動する場合の例。

* 監視対象サーバ
  * node1.testcluster  192.168.11.5
  * node2.testcluster  192.168.11.6

```
$ sudo docker pull yacchin1205/docker-munin
$ sudo docker run -d -p 8081:80 -e NODES="node1.testcluster:192.168.11.5 node2.testcluster:192.168.11.6" -v /etc/localtime:/etc/localtime:ro -v /home/yacchin1205/data/munin:/var/lib/munin yacchin1205/docker-munin
```
このあと数分後(Munin masterのUpdateが走ったのち)、 http://ホストのIP:8081/ にブラウザでアクセスすると、Munin masterの画面を確認することができる。

なお、コンテナの/var/lib/muninに対応づけたホストの/home/yacchin1205/data/muninに対しては、コンテナ内でmuninユーザから書き込まれることになるので、パーミッションを適切に設定することを忘れないようにする。

# 考え方

Immutable Infrastructure的な構成をどう実現するかという中で、設定をどうパラメータ化するかという点が考えどころ。いろいろアプローチはあるようだけれども、今回は以下のようにしてみた。

## 環境変数(-e)を使う

Fork元の https://github.com/arcus-io/docker-munin を見てああなるほどと思ったのが、ノード一覧を環境変数NODESで渡させて、これをコンテナ起動時に /etc/munin/munin.conf に定義として書き出しているところ。

コンテナ中に用途固有の設定が記述されると、用途ごとにコンテナが増えてしまい、メンテナンスのコストが上がるのが悩みどころだったので、用途により変化する部分は環境変数で渡せるようにするというのは一つの解かなと。

たとえば今回の例では、ノードが増えても、既存コンテナをつぶしてNODES変数に渡すセットを増やしたうえで新規コンテナを作ればマシン一覧を増やすことができる（データはホスト側のディレクトリに維持されるので）。ベースとなるコンテナが更新された場合なども、環境変数とデータのディレクトリ設定を同じように与えてあげれば、更新前と同じ設定をもったサービスを再起動することができる。（バージョン間でデータに互換性があることが前提になるが）

## Shared Filesystems(-v)をReadOnlyで使う

コンテナを作ってよくやらかすのが「TimeZoneがJSTじゃないじゃん」。これは-vオプションで、ホストの/etc/localtimeをコンテナの/etc/localtimeとしてReadOnlyで見せてあげることで対応。こうすればコンテナに環境固有の設定が記述されることを防げる。

-vは、コンテナ内（だけ）にデータを持たせないためにも使えるし、イメージにない情報をコンテナに与えるのにも使えるのだなあ、と。

# まとめ

コンテナをぽこぽこ作っていると亜種みたいなのが山ほどできてきて、どこかで汎化というか、パラメータ化して共通化みたいなことをやって管理の手間を減らしたくなってくる。こんなときのコンテナとホストのインタフェースとして、環境変数、ReadOnlyでShared Filesystemsが活用できそう。

あと、DockerでよくハマるのがJVMのメモリサイズのような、プロセスに対してリソース量を教えてあげなければならないようなシチュエーション。これについても何かやり方を見出したい・・・
apacheのDocumentRootをユーザディレクトリのシンボリックリンクに

#概要
CentOS7にapacheを入れた際、いつも/var/www/htmlのDocumentRootのディレクトリをシンボリックリンクにしています。
これまでCnetOS6ではあまり気にすることなくDocumentRootをシンボリックリンクにしていましたが、今回のCentOS7でつまずいたのでメモ。

#原因
Selinuxの設定でCentOS6ではなかった部分が追加されたのか、、、ある項目のせいで下記エラーが出てアクセスできない。

```bash
PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on
```

#解決方法

Selinuxの項目は下記の項目を*on*にする必要がある

```bash
#現在の設定確認
root> getsebool -a | grep  "httpd_enable_homedirs\|httpd_read_user_content"
root> httpd_enable_homedirs --> on
root> httpd_read_user_content --> on

#設定変更
root> setsebool -P httpd_enable_homedirs on
root> setsebool -P httpd_read_user_content on
```

例のごとくラベルも設定する。
この部分はいつもどおり下記の通り設定する。

```bash
#ホームディレクトリの中の場合、ユーザディレクトリのパーミッションを701に
#シンボリックリンク作成
ln -s /home/[target directory]/ /var/www/html

#ラベル貼り替え
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"

#ラベル有効化
restorecon -R -v /var/www/
```
rm -fr / を実行してみた


OSインストールし直す前にちょっとどうなるかやってみた。

```
# rm -fr /
rm: it is dangerous to operate recursively on ‘/’
rm: use --no-preserve-root to override this failsafe
```

オプションつけないと実行できないみたい。
ちゃんとガードかかってるんだと感心。

オプションつけて逝ってみる。

```
# rm -fr --no-preserve-root /
...
```

実行できた。
iPhone 資料

|		|	iPhone 5s	|	iPhone 5c/5	|	iPhone 4s/4	|
|	:-----------	|	:----------:	|	:----------:	|	:----------:	|
|	通信	|	3G/LTE	|	3G/LTE	|	3G	|
|	論理ピクセル<br />width	|	320	|	320	|	320	|
|	論理ピクセル<br />height	|	568	|	568	|	480	|
|	デバイスピクセル<br />width	|	640	|	640	|	640	|
|	デバイスピクセル<br />height	|	1176	|	1176	|	960	|
|	Retina	|	○	|	○	|	○	|
|	コンパス	|	○	|	○	|	○	|
|	近接センサー	|	○	|	○	|	○	|
|	観光センサー	|	○	|	○	|	○	|
|	AirDrop	|	○	|	○	|	×	|
|	モーションセンサー	|	○	|	×	|	×	|
|	スローモーション撮影	|	○	|	×	|	×	|

#iPod
|	　	|	 iPod touch 第５世代	|	 iPod touch 第４世代	|				
|	:-----------	|	:----------:	|	:----------:	|				
|	論理ピクセル<br />width	|	320	|	320	|				
|	論理ピクセル<br />height	|	568	|	480	|				
|	デバイスピクセル<br />width	|	640	|	640	|				
|	デバイスピクセル<br />height	|	1176	|	960	|				
|	Retina	|	 ○	|	 ○	|				
|	コンパス	|	 ×	|	 ×	|				
|	近接センサー	|	 ×	|	 ×	|				
|	観光センサー	|	 ×	|	 ○	|				
|	AirDrop	|	 ○	|	 -	|				
|	モーションセンサー	|	 ×	|	 -	|				
|	スローモーション撮影	|	 ×	|	 -	|	

#iPad
|	　	|	 iPad Air	|	 iPad mini with Retina	|	 iPad mini	|	 iPad 2	|
|	:-----------	|	:----------:	|	:----------:	|	:----------:	|	:----------:	|
|	通信	|	 -	|	 3G/LTE	|	 -	|	 3G	|
|	論理ピクセル<br />width	|	768	|	768	|	768	|	768	|
|	論理ピクセル<br />height	|	1024	|	1024	|	1024	|	1024	|
|	デバイスピクセル<br />width	|	1536	|	1536	|	768	|	768	|
|	デバイスピクセル<br />height	|	2048	|	2048	|	1024	|	1024	|
|	Retina	|	 ○	|	 ○	|	 ×	|	 ×	|
|	コンパス	|	 ○（セルラー×）	|	 ○（セルラー×）	|	 ○（セルラー×）	|	 ○（セルラー×）	|
|	近接センサー	|	 ×	|	 ×	|	 ×	|	 ×	|
|	観光センサー	|	 ○	|	 ○	|	 ○	|	 ○	|
|	AirDrop	|	 ○	|	 ○	|	 ○	|	 ×	|
|	モーションセンサー	|	 ×	|	 ×	|	 ×	|	 ×	|
|	スローモーション撮影	|	 ×	|	 ×	|	 ×	|	 ×	|
xcode6全てで確認済み！SwiftでHello World

<br>
### １・xcode6 Beta4のインストール

以下のURLからxcode 6 Beta4のdmpをダウンロードします。
[Swift](https://developer.apple.com/swift/resources/)

![qiita_1.png](https://qiita-image-store.s3.amazonaws.com/0/15812/623c8883-a79b-a574-ef37-ce0e096a3184.png)

<br>

### ２・swiftのセットアップ

新規にプロジェクトを作成する際は今までのobjective-Cを起動する方法と

言語を指定する以外

は全く変わらずに行うことができました。

![qiita_2.png](https://qiita-image-store.s3.amazonaws.com/0/15812/cf8aa31d-04b0-b8e8-18b6-828f5a3d46d8.png)

![qiita_3.png](https://qiita-image-store.s3.amazonaws.com/0/15812/c703c473-1f58-6a17-3942-6d61965f68a8.png)

![qiita_4.png](https://qiita-image-store.s3.amazonaws.com/0/15812/e83c8c0f-69e7-474f-1343-5e4e1bdde78c.png)

![qiita_5.png](https://qiita-image-store.s3.amazonaws.com/0/15812/785678b8-e916-edb6-a4d7-f603621b40fd.png)
<br>

### ３・Swiftでhello world
そしてhello worldのために
「ViewController.swift」ファイル内の
override func viewDidLoad() メソッド内に

```shell-session
    println("Hello World");
```

を記述します。
すると、コンソール画面にHello worldと表示されます。

![qiita_6.png](https://qiita-image-store.s3.amazonaws.com/0/15812/bff3668d-b35b-66da-17e4-9c5a27c6777e.png)

<br>

### 余談ですが。。。

```shell-session
    NSLog("Hello World");
```

でも、問題なくコンソール画面に表示されます。
<br>
Qt5.3を用いて押された checkboxにより処理を振り分ける


Qt初心者です　10年以上昔に出版された Qt3の書籍 (Qtプログラミング24時間集中講座)を見ながら格闘しています　何しろ入手できる資料が少く困っています
[自分のブログ](http://www.kamakuraheart.org/wordpress/?p=2564)にも掲載しました

## sender()の使用

```C++:mymainwindow.h
#ifndef MYMAINWINDOW_H
#define MYMAINWINDOW_H

#include <QMainWindow>
#include <QtGui>
#include <QtWidgets>

class MyMainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MyMainWindow(QWidget *parent = 0);
    ~MyMainWindow();
    QCheckBox *chk[4];
public slots:
    void dispatch();
};

#endif // MYMAINWINDOW_H
```

```C++:mymainwindow.cpp
#include "mymainwindow.h"

MyMainWindow::MyMainWindow(QWidget *parent): QMainWindow(parent)
{
    this->resize(400,200);
    QVBoxLayout *layout = new QVBoxLayout();
    QVBoxLayout *layout1 = new QVBoxLayout();
    QGroupBox *group = new QGroupBox(this);
    group->resize(400,200);
    group->setLayout(layout);
    group->setAlignment(Qt::AlignHCenter);
    group->setCheckable(true);
    QButtonGroup *bg = new QButtonGroup(this);
    chk[1] = new QCheckBox("CAG", this);
    chk[2] = new QCheckBox("PCI", this);
    chk[3] = new QCheckBox("TAVI", this);
    group->setTitle("Cardiology");
    layout1->addWidget(group);
    for (int i=1; i<4; i++) {
        bg->addButton(chk[i]);
        layout->addWidget(chk[i]);
    }
    group->setStyleSheet("*{background-color:rgb(0, 0, 255); padding: 7px ; color:red;}");
    this->setStyleSheet("*{background-color:rgb(150,147,88); padding: 7px ; color:brown}");
    for (int i=1; i<4; i++) {
        connect(chk[i], SIGNAL(clicked()), this, SLOT(dispatch()));
    }
}

MyMainWindow::~MyMainWindow()
{

}

void MyMainWindow::dispatch() {
    QCheckBox *checkbox = static_cast<QCheckBox *>(sender());
    QString msg = checkbox->text();
    msg += " was pushed!";
    QMessageBox mbox;
    mbox.setText(msg);
    mbox.setIcon(QMessageBox::Warning);
    mbox.setDetailedText("This message was automatically dispatched.");
    mbox.exec();
}
```


**結果**
これにより、ボタンを押せば、それぞれのボタンテキストがメッセージボックスに表示されます
もっとスマートな解説が英語ですが、[ここ](http://doc.qt.digia.com/qq/qq10-signalmapper.html)にあるのですが、初心者の自分には難しくて　こんな姑息的な手段を取りました
[.NET][C#] XML 配列内配列構造をデシリアライズ

XMLで配列内に配列を持つ構造をデシリアライズします。

* XML File
* C# code

を示します。


```xml:Stores.xml
<?xml version="1.0" encoding="utf-8"?>
<Stores>
  <Store>
    <Name>name1</Name>
    <Area>
      <description>name1 desc</description>
    </Area>
    <Area>
      <description>name1 desc2</description>
    </Area>
  </Store>
  <Store>
    <Name>name2</Name>
    <Area>
      <description>name2 desc</description>
    </Area>
    <Area>
      <description>name2 desc2</description>
    </Area>
  </Store>
  <Store>
    <Name>name3</Name>
    <Area>
      <description>name3 desc</description>
    </Area>
    <Area>
      <description>name3 desc3</description>
    </Area>
  </Store>
  <Store>
    <Name>name4</Name>
    <Area>
      <description>name4 desc</description>
    </Area>
    <Area>
      <description>name4 desc2</description>
    </Area>
  </Store>
</Stores>
```


```C#:Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;     // add

namespace testDeserializeXml
{
    class Program
    {
        static void Main(string[] args)
        {
            StoresXmlRead();
            Console.ReadKey();
        }

        static private void StoresXmlRead()
        {
            using (System.IO.StreamReader reader = new System.IO.StreamReader(@"Stores.xml"))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(Stores));
                var value = (Stores)serializer.Deserialize(reader);
                Console.WriteLine(string.Format("NumOfStore = {0}.", value.store.Length));
                foreach (Store s in value.store)
                {
                    Console.WriteLine(string.Format("Name = {0}", s.Name));
                    foreach (Area a in s.area)
                    {
                        Console.WriteLine(string.Format("description = {0}", a.description));
                    }
                }
            }
        }
    }

    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public class Stores
    {
        [System.Xml.Serialization.XmlElementAttribute("Store")]
        public Store[] store { get; set; }
    }

    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public class Store
    {
        public string Name { get; set; }

        [System.Xml.Serialization.XmlElementAttribute("Area")]
        public Area[] area { get; set; }
    }

    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public class Area
    {
        public string description { get; set; }
    }
}
```
SwiftのFunctionタイプもextensionしてみたい...


いろんなタイプをextensionしまくって味をしめてしまうと，関数タイプも，と欲が止まりません．
気分としては，こんな感じで．

```swift
extension (Int) -> Int {
    funtionHook($0)  // フックして色々チェックとか．
    return self($0)  // 本来のボディーを起動． 
}
```
とか，

```swift
extension (Int) -> Int {
    return posingFunction($0)  // さりげなく関数を差し替える
}
```
とか．
できると面白いと思うのですが，コンパイラ様は，
"Non-nominal type '(Int) -> Int' cannot be extended"とご立腹です．

2番目のは危ないのでダメとしても，1番目のは言語機能として認めて欲しいところです．
Project Eulerをhaskellで練習していく日記: Problem 6

#問題
最初の１０個の自然数の平方和は
1^2 + 2^2 + ... + 10^2 = 385
であり、和の平方は
(1 + 2 + ... + 10)^2 = 55^2 = 3025
であり、両者の差は、
3025 − 385 = 2640
である。

同様に、最初の１００個の自然数についても両者の差を求めよ。
#回答
```hs
dif a = (sum a)^2 - (sum $ map (^2) a)

main = do
     print $ dif [1..100]
```
#感想
素直な実装。これ以上何か工夫の余地はあるだろうか。。。
Project Eulerをhaskellで練習していく日記: Problem 5

#問題
数1〜10の最小公倍数は2520である。
数1〜20の最小公倍数を求めよ。

#回答
```hs
-- ユークリッド互除法
euc m 0 = m
euc m n = euc n $ m `mod` n

-- 最小公倍数を求める
lcm2 a b = a*b `div` (euc a b)

-- 複数の数の最小公倍数を求める
multilcm2 = foldl1 lcm2

main = do
     print $ multilcm2 [1..20]
```

#感想
二つの数a,bの最小公倍数はa*b/最大公約数。
（最大公約数はユークリッド互除法で求める。）

Ｎ個の数a1,a2,..,aNの最小公倍数は、
a1とa2の最小公倍数,a3,a4,...aNの最小公倍数。
という理屈を使う。
コマンドラインから簡単にGIFアニメーション画像を作成する方法



##ttyrec,ttygif

`ttyrec`は、動画キャプチャを開始するためのコマンドで、`exit`で終了します。`ttygif`は、`ttyrec`で作成されたファイルを使って、`.png`を作ります。`convert`コマンドは、`ImageMagick`の画像変換を行います。

###インストール

```bash:
$ brew install ttyrec

$ git clone https://github.com/icholy/ttygif.git

$ cd ttygif

$ make
```

###使い方

```bash:
$ ttyrec

$ echo command.

$ exit

$ ./ttygif ttyrecord

$ gm convert *.png output.gif && rm *.png

$ qlmanage -p output.gif
```

`gm`は`ImageMagick`の改良版みたいなものです。これは、私が個人的に使ってるだけのものですので気にしないでください。

ちなみに、`.gif`への変換は、`ttygif`の`./concat_osx.sh`が使えます。
Synthでpm2などのデプロイツールを使用可能にする


自分の中で今とても熱いnode.js製のフレームワークです。
自分の中でしか熱くないみたいなのでqiitaのストック数も全然伸びません。

# 問題点
Synthなのですが、`$ synth server`コマンドでしか開始することができないんですよね。
それではpm2やforever等のツールを使用することができません。
公式では以下のような解決策を提示していました。

```CoffeeScript:app.coffee
app = require "./back/back-app"
port = process.env.PORT || 3000
app.listen port, ->
  console.log "Synth is now listening on port #{port}"
```

Synthのバックエンドはexpressをラップしているため、このように実は簡単に実行することができます。
しかし、それではコマンド版の機能として提供されているGulpのWatch等が使えないのです！あぁ、コーヒーの神よ！我に御加護を。

# 解決策
## コマンドが叩けないならライブラリの該当メソッドを直接叩けば良いじゃない
(マリー・アントワネット風に)

## How to?

```CoffeeScript:app.coffee
commands = require("./back/node_modules/synth/lib/commands")
port = process.env.PORT || 3000

# if you use production, NODE_ENV = "production"
mode = process.env.NODE_ENV || "development"
commands.startServer mode, port
```

これを`back`とか`front`ディレクトリがある所に置けば良いです。
後は`$ coffee app.coffee`するなり`$ pm2 start app.coffee -i max`すれば完璧です。
JavaScriptで書いている人はまぁ頑張って書きなおして下さい(すっとぼけ)

これでpm2のデプロイも動いたため、特に問題はないと思います。
リリース時にはproductionモードにすると色々と便利な機能が動いたり動かなかったりします。
(ソースコードを見る限り、gulpのwatch機能が無効化されるくらい？)
そこら辺気づいたらバンバン作者にissueを投げましょう。
OmniAuthでrequest specを書く(rspec)


ちょっとハマったのでメモ。

## omniauth-identityの場合

``` ruby:sessions_controller.rb
class SessionsController < ApplicationController
  def create
    user = User.find(env["omniauth.auth"]["uid"])
    session[:user_id] = user.id
    redirect_to expenses_url, notice: "Signed in!"
  end
end
```

``` ruby:spec_helper.rb
OmniAuth.config.test_mode = true
```

``` ruby:login_helper.rb
def login(user, password)
  OmniAuth.config.mock_auth[:identity] = { 'provider' => 'identity', 'uid' => user.id }
  post '/auth/identity/callback', screen_name: user.screen_name, password: password
end
```

あとは各specから`before { login(user, password) }`とかするだけ。

twitterとかの認証も同じ感じでできるはず。


## 参考
https://github.com/intridea/omniauth/wiki/Integration-Testing
PostgreSQLを初回起動しようとすると起動しない

CentOS環境でPostgreSQLを起動しようとしたら失敗しました。

```
sudo /etc/init.d/postgresql start

/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
                                                           [失敗]
```
これはメッセージにあるようにservice postgresql initdbを実行すればいいようです。

```
sudo service postgresql initdb
Initializing database:                                     [  OK  ]
```
dbを初期化したということでしょうか。

```
sudo /etc/init.d/postgresql start
postgresql サービスを開始中:                               [  OK  ]
```
PostgreSQLが起動しました。
超簡単に Mac のオーディオ入出力を切り替える方法




[switchaudio-osx](https://github.com/deweller/switchaudio-osx) -github

[switchaudio-osx](https://code.google.com/p/switchaudio-osx/downloads/list) -download


```bash:
$ SwitchAudioSource -a
  PLT_BBTGO (input)
  Built-in Microphone (input)
  PLT_BBTGO (output)
  Built-in Output (output)

$ SwitchAudioSource -t input -s PLT_BBTGO
```

現在設定されているものは、`-c`で取得します。使用するものが決まっている場合、これを元に、Switchするスクリプト書いても良いかもですね。ただし、デバイス名は、スペース開いてる場合、`"`とかで囲います。

####pecoを使った入力デバイスの切り替え例

```bash:
$ SwitchAudioSource -a | grep input | cut -d '(' -f 1 | peco | xargs -J % SwitchAudioSource -t input -s %
```

####pecoを使った出力デバイスの切り替え例

```bash:スペース開いてる場合
$ SwitchAudioSource -a | grep output | cut -d '(' -f 1 | sed -e 's/ *$//' -e 's/$/"/g' -e 's/^/"/g' | peco | xargs -J % SwitchAudioSource -s %
```

####zshでの切り替え例

`au`コマンドに設定しました。キーは、`^^`です。入力デバイスは、`au -i`です。

```bash:~/.zshrc
function au(){
case $1 in
    -o|*)
        SwitchAudioSource -a | grep output | cut -d '(' -f 1 | sed -e 's/ *$//' -e 's/$/"/g' -e 's/^/"/g' | peco | xargs -J % SwitchAudioSource -s %
    ;;
    -i)
        SwitchAudioSource -a | grep input | cut -d '(' -f 1 | sed -e 's/ *$//' -e 's/$/"/g' -e 's/^/"/g' | peco | xargs -J % SwitchAudioSource -t input -s %
    ;;
esac
}
zle -N au
bindkey '\^^' au
```

出力必要ない場合は、`zle reset-prompt`とか設定してください。 > bindkey




[めちゃ簡単に Mac のオーディオ入出力を切り替える方法](http://qiita.com/katzueno/items/96435ca6a7dfd802de56) -元ネタ
bundle install で nokogiri をインストールしろと言われる解決方法

Vagrant内にrbenvでインストールしたRuby環境を使っています。

ある日突然、bundle installが失敗し、nokogiriをインストールしろというメッセージが表示される現象が発生しました。

# bundle install でエラーがでて失敗
bundle installを実行しようとしました。

```bash:インストールコマンドを実行
bundle install --path vendor/bundle
```

エラーがでます。

```bash:インストールコマンドでエラー
bundle install --path vendor/bundle

略

************************************************************************
IMPORTANT!  Nokogiri builds and uses a packaged version of libxml2.

If this is a concern for you and you want to use the system library
instead, abort this installation process and reinstall nokogiri as
follows:

    gem install nokogiri -- --use-system-libraries

If you are using Bundler, tell it to use the option:

    bundle config build.nokogiri --use-system-libraries
    bundle install

However, note that nokogiri does not necessarily support all versions
of libxml2.

For example, libxml2-2.9.0 and higher are currently known to be broken
and thus unsupported by nokogiri, due to compatibility problems and
XPath optimization bugs.
************************************************************************
略
An error occurred while installing nokogiri (1.6.3.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.3.1'` succeeds before bundling.
```
先にnokogiriを入れろと言われます。

しかし、ここで単にgem install nokogiriをしてもbundle installはまた失敗します。むしろ、libxmlやnokogiriは既にインストールされている状態なので、なぜnokogiriがインストールできないのか疑問でした。

# --use-system-librariesオプションをつける
Bundlerを利用しているので、エラーで出力された説明にあるとおり、--use-system-librariesをつけます。

```bash:オプションをつける
bundle config build.nokogiri --use-system-libraries
```
bundle config で --use-system-librariesオプションを指定してからbundle installを実行します。

```bash:再度インストール
bundle install --path vendor/bundle
```

今度はbundle installがうまくいきました☆（ゝω・）vｷｬﾋﾟ
QGISインストール失敗 on Mac

![1ce2bdec-fce7-11e3-8ae0-07e09097c09d.png](https://qiita-image-store.s3.amazonaws.com/0/42872/67c3e6c8-aa9f-bb2e-d85c-93a7346ae305.png)
https://github.com/hanxue/qgis-digitizing-map-guide/issues/2

これと同じエラーでMacにQGISをインストールできなかったのを解決できたのでメモ。

Mac OS: 10.9.4
QGIS: 2.4.0

ふつうに```brew install gdal```としても改善しなかったけど、brew-caskでのインストールでうまくいった。

#1. brew-caskインストール
```
brew tap phinze/homebrew-cask
brew install brew-cask
```
http://qiita.com/ryurock/items/1432578d364985f6cb06

#2. gdalとMatplotlibをbrew-caskでインストール
```
brew cask install gdal-framework
brew cask install matplotlib
```
https://github.com/hanxue/qgis-digitizing-map-guide/issues/2

#3. QGISもbrew-caskでインストール
```brew cask install qgis```
上記ページにコマンドが載っていたのでQGISもbrew-caskでインストールした。
インストーラからでもエラーは解消していた。

#4. バージョンが古かったのでdmgからインストール
brew-caskのQGISバージョンは2.2で、ダウンロード済みのインストーラは2.4だったのでインストーラから再度インストールした。どちらも正常に起動できた。