OmniAICreator/Qiita-1.07M huggingface dataset:
C-+とC--で文字サイズの変更をする

普通のエディタのように、`C-+`と`C--`で文字サイズの変更をする方法を偶然に知った。
`C-x C-0`より楽な気がする。

```lisp
(define-key global-map (kbd "C-+") 'text-scale-increase)
(define-key global-map (kbd "C--") 'text-scale-decrease)
```

参考
http://jr0cket.co.uk/2015/08/spacemacs-first-impressions-from-an-emacs-driven-developer.html
Node-REDからMicrosoft Flowをhttps(POST)を使って呼ぶ

# はじめに
　Microsoftから提供されているFlowですが2017/1現在、ドキュメントが少なく使い方がよくわかりませんでした。IFTTTのMaker's channelのような使い方ができるのか？がどうしても気になり試してみました。その時に作ったモノを説明します。

# 概要
　microsoft Flow（以下、Flowと記す）上でフローを作成し、そのフローをHeroku上に構築したNode-REDから、https(POST)にてキックした事例を説明します。
　IFTTTのMaker's channelはhttpsのGETでアクセスできるためWebブラウザのURL入力ボックスからキックできますが、Flowではhttps GETで行う方法がどうしてもわからず、仕方がないのでPOSTでキックするためにNode-REDを使いました。

　作成したモノの機能概要は以下の通りです。
1. Node-REDからhttps POSTメソッドでJSONデータをFlowに送ります。
2. Flowがリクエストを受け取ります。そして、予め設定しておいたJSONスキーマに基づいてパースします。
3. 少々、データを加工したレスポンスを作りNode-REDに返します。

# 1. microsoft Flow設定
　Flowのアカウント取得方法は省きます。
　以下の様に２つのフロー（要求、応答）を定義します。
![s1.PNG](https://qiita-image-store.s3.amazonaws.com/0/155377/f4514e34-82e3-4d16-899e-c9bb3982ab28.png)

　JSONスキーマは以下です。
　しかし、いつの間にJSONスキーマなんていうものができたのか・・・知らなかった・・・

```JSON:JSON-schema
{
  "title": "test",
  "type": "object",
  "properties": {
    "a": {
      "type": "string"
    },
    "b": {
      "type": "integer"
    },
    "c": {
      "type": "integer"
    }
  }
}
```

# 2. Node-REDの設定
　こちらもフローという名称なので、説明がややこしいですが、Node-REDのフローを図のように作成します。作成後、デプロイボタンを押して配備して下さい。
![s2.PNG](https://qiita-image-store.s3.amazonaws.com/0/155377/7ecb87ca-23a1-6a2d-6f5e-025cb2a9a51f.png)
![s3.PNG](https://qiita-image-store.s3.amazonaws.com/0/155377/287ed9c5-1018-b1af-cf78-a447cc3624a6.png)


# 3. Node-REDから実行
　Node-RED画面のinjectノードの左の角丸四角ボタンを押すと実行できます。以下に実行結果を示します。Node-REDから送信したメッセージについてFlow側でJSONメッセージのうちプロパティ名だけ変更して返却されてきています。

![s4.PNG](https://qiita-image-store.s3.amazonaws.com/0/155377/5085cac2-ede1-5418-a721-8a62aceb308d.png)

# 終わりに
　Microsoft Flow 便利！っと思ったんですが、冷静に考えたらNode-REDでいいじゃん、と思いました。素のNode-REDは現在（0.15.2）、機能追加はNode-REDを停止した上でnpmを使ってインストールする必要があります。これをnode store（仮称）機能で一覧表示＆ボタン一発で停止せずインストでき、かつ、色々なnode-flowのパッケージを自由に提供するstoreサーバを用意※できれば、機能的にも分かりやすさや拡張性でもNode-REDの方が（いまのところ）一歩先を行っていると思います。ただ、Office365を契約した上で、power appsを使えるようにしたら、・・・これは侮れない、な・・・

※ということは・・・もうサービスを起こしている誰かがいそうだな、と思って検索したら、Node-REDをホスティングしているプロバイダがすでに複数存在していますね・・・
Java で EXIF 情報を取得


https://github.com/drewnoakes/metadata-extractor/releases


```java
		String fileName = "file/fortest/20160501-103139_IMG_1551.JPG";
		File imageFile = new File(fileName);

		Metadata md = ImageMetadataReader.readMetadata(imageFile);
		System.out.println(md.getFirstDirectoryOfType(ExifDirectoryBase.class).getDate(ExifDirectoryBase.TAG_DATETIME));
```

結果は以下のようになる。

Sun May 01 19:31:39 JST 2016
React "Hello World" 表示方法に絞ってのおぼえがき

##はじめに
JavaScriptフレームワークであるReact.jsにて"Hello World"表示方法に絞って思考の整理を兼ねて記事を書こうと思います。
（訂正箇所ありましたらコメントいただけると幸いです。）

環境構築やツール等の説明は記述してません。
(Qiitaにて他の方の詳細記事がありますのでそちらを参照ください。)

##対象者
ReactでとにかくHello Worldの表示方法を知りたい方。

##表示環境
(既に環境のある方は無視してください)
・[CodePen](https://codepen.io/)を利用した方法
+New Pen　を押した後、JSの設定アイコンから
JavaScript Preprocessor　をBabelに設定。
Add External JavaScript　に下記二つを設定する。
https://fb.me/react-15.1.0.min.js
https://fb.me/react-dom-15.1.0.min.js

![スクリーンショット 2017-01-06 20.47.05.png](https://qiita-image-store.s3.amazonaws.com/0/154186/7af3dde8-ff2e-2b1b-0041-9d752424df76.png)


##コード

```index.html
  <div id="msg"></div>
```

```style.css
#msg{
  padding:5px 10px;
  color:blue;
  border:1px solid lightgray;
}
```

```script.js
var MyComponent = React.createClass({
  displayName:'my component',
  render: function(){
    return (
    <p>Hello world</p>
    );
  }
});

ReactDOM.render(
  <MyComponent/>,
  document.getElementById('msg')
);
```
上記のコードで青文字の　Hello world　がReactのコンポーネントを使って表示されます。
borderで囲まれている部分がコンポーネント部分を表してます。

![スクリーンショット 2017-01-06 20.46.33.png](https://qiita-image-store.s3.amazonaws.com/0/154186/0cf3d121-c0ae-9541-544a-429f18b044e6.png)


##スクリプトの説明
スクリプトは大まかに下記二つの文から成り立っています。

```js
var MyComponent = React.createClass(...);//1
ReactDOM.render(...);//2
```
##ひとつめの文について
変数`MyComponent`には`React.createClass`というクラスを設定しています。
[「クラス」](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Classes)はES6で利用できるオブジェクトを作る方法です。

`createClass`はReactのメソッドで、引数に用意されたオブジェクトを元にコンポーネントのクラスを作成します。

引数としては下記項目が利用できます。


`displayName` コンポーネントの名前。デバッグメッセージとして使われたりする。  
`render` レンダリングされる内容。コードでは関数が値として設定されている。 

###`render`について
renderの関数において、HTMLのテキストをreturnの部分に設定します。
ここは「JSX」によって記述されています。JSXとはHTMLで使われているタグを直接JavaScriptのコードに記述できる技術のことです。実行時にはBabelというコンパイラによってJavaScriptの文に変換されます。

##ふたつめの文について
ここでは　`ReactDOM`オブジェクトの`render`メソッドを実行しています。
`ReactDOM.render`は二つの引数をとります。

・第一引数は**レンダリングする内容**になります。
コードには`<MyComponent/>`と`React.createClass`で作成したコンポーネントのタグが記述してあります。
・第二引数には**レンダリングした結果を表示するDOM**が指定されます。
`document.getElementById('msg')`と記述されることでHTMLのid="msg"に内容が表示されるようになります。


以上でReactを使用して "Hello World"が画面に表示されるようになります。

##おわりに
最後まで読んでいただいてありがとうございました。
本投稿はReactに触れたことがない人が環境設定などの前提部分で煩わしさを感じてやめてしまう前に、Reactでの"Hello World"を体験してもらえればと思い記述しました。
ES6、Babel、仮想DOMなど説明の足りてない部分が多いことは承知してますが、この投稿がこれからReactを触れようとしている人の次のステップへの手助けとなれば幸いです。
Py2appとTkinterでネイティブっぽいGUIアプリを作る

# はじめに
PythonでGUIアプリを作ったことがなかったなと思ったのでトライしてみました。  
また、GUIのスクリプトだけ書くのも面白くないので、そのスクリプトをMacのネイティブアプリ形式で出力、実行できるようにしてみました。

# 使うもの
* Tkinter  
  Pythonに標準搭載されているGUIライブラリ。（正しく言うとTcl/Tkへのインターフェース）
* Py2app  
  作ったPythonプログラムをMacのアプリケーション実行形式(app)に変換するツール。


# コード
tkinterの[公式ドキュメント](https://docs.python.org/2/library/tkinter.html)に記載されていたコードをほぼそのままもってきた。

変更した部分は`say_hi`メソッドが`print`文でメッセージ出力するものだったので、そこをメッセージボックスを出すようにしてみました。

途中、Tkinterのモジュールを全てインポートしているにもかかわらず、tkMessageBoxクラスが見つからないと言われ少しだけ苦戦。（tkMessageBoxクラスがトップレベルのクラスだとは思わなかった。。。）

```Python:tk.py
from Tkinter import *
import tkMessageBox

class Application(Frame):
    def say_hi(self):
        tkMessageBox.showinfo('info', 'hi there, everyone!')

    def createWidgets(self):
        self.QUIT = Button(self)
        self.QUIT["text"] = "QUIT"
        self.QUIT["fg"]   = "red"
        self.QUIT["command"] =  self.quit

        self.QUIT.pack({"side": "left"})

        self.hi_there = Button(self)
        self.hi_there["text"] = "Hello",
        self.hi_there["command"] = self.say_hi

        self.hi_there.pack({"side": "left"})

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

root = Tk()
app = Application(master=root)
app.mainloop()
root.destroy()
```

実行するとこんな感じ。

![main window](https://qiita-image-store.s3.amazonaws.com/0/5804/ef2314bf-87d0-1df6-2b0b-bd8ab4bde4d5.png "main window")

Helloをクリックしてみます。

![info message](https://qiita-image-store.s3.amazonaws.com/0/5804/2ce9ae4b-25c1-6661-8ead-36fd3b31ab34.png "info message")

はい、無事メッセージボックスが出てきました。
結果としてはちょっとさみしいですが、このまま進めます。

# Py2appでつつむ
まずはPy2appをpipで入れちゃいましょう。

```Bash
$ pip install py2app
```

チュートリアルに沿っていくとまずはsetup.pyが必要なようです。`py2applet`という便利コマンドがあるようなので、それを利用しsetup.pyを作成します。

```Bash
$ py2applet --make-setup tk.py
```

そしてsetup.pyを実行し、appを作ります。

```Bash
$ python setup.py py2app
```

**2017/02/09 修正** -Aパラメータをつけるとほかの環境から実行できないので上記コマンドから取り除きました。


完成すると以下のようにdistディレクトリ以下へファイルが配置されます。

![dist](https://qiita-image-store.s3.amazonaws.com/0/5804/ade81dce-68e9-a6e3-6edd-80b7582fab39.png "dist")


そのファイルをダブルクリックすると無事実行されました！かなり簡単ですね。
PythonでGUIアプリを書くのがだいぶハードルが低いことがわかったので、いろいろ試してみたいと思います。

# 参考
* https://docs.python.org/2/library/tkinter.html
* https://pythonhosted.org/py2app/
SQLServerにて、default制約付きの列を削除する


## SQLServerでは、default制約付きの列を削除できない

[ALTER TABLE (Transact-SQL)](https://msdn.microsoft.com/ja-jp/library/ms190273.aspx)に下記の記述があります。

```
次の条件に該当する列は削除できません。
・インデックスで使用されている列
・CHECK、FOREIGN KEY、UNIQUE、または PRIMARY KEY 制約で使用されている列
・DEFAULT キーワードで定義された既定値に関連付けられている列、または既定値のオブジェクトにバインドしている列
・ルールにバインドしている列
```

したがって、下記のようにDEFAULT値が設定された列については、列を削除する前に、DEFAULT制約を削除する必要があります。

```sql
ALTER TABLE <table_name> ADD <column_name> <data_type> NOT NULL DEFAULT <default_value>;
```

DEFAULT制約がある列を削除しようとすると、下記のようなエラーが発生します。

```
The object '<default constraint name>' is dependent on column '<column_name>'. 2) [Code: 4922, SQL State: S1000]  ALTER TABLE DROP COLUMN <column_name> failed because one or more objects access this column.
```

## DEFAULT制約を削除
DEFAULT制約の名称は下記のSQLにて取得することができます。

```sql
SELECT obj.name FROM sys.objects AS obj
JOIN sys.columns AS clm ON obj.object_id = clm.default_object_id
WHERE obj.type = 'D' AND obj.parent_object_id = OBJECT_ID('<table_name>') AND clm.name = '<column_name>'
```

DEFAULT値制約は下記のSQLで削除することができます。

```sql
ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name>;
```

## DEFAULT制約付きの列を削除するSQL
<table_name>と<column_name>の2つの変数により、DEFAULT値制約付きの列を削除することが可能です。

```
DECLARE @ConstraintName nvarchar(200)

SELECT @ConstraintName = obj.name FROM sys.objects AS obj
JOIN sys.columns AS clm ON obj.object_id = clm.default_object_id
WHERE obj.type = 'D' AND obj.parent_object_id = OBJECT_ID('<table_name>') AND clm.name = '<column_name>'

IF @ConstraintName IS NOT NULL
	EXEC('ALTER TABLE <table_name> DROP CONSTRAINT ' + @ConstraintName)
GO

ALTER TABLE <table_name> DROP COLUMN <column_name>;
GO
```
Bot FrameworkでBotの方から話しかける(C#)

## やりたいこと
BotFrameworkでBot開発をするときチャットを開始したらBot側から話しかけれくれるようにしたい。

## 結果
本当はNode.jsで開発したかったが実装方法はわからずじまい・・・。
C#でBotFrameworkテンプレートでソリューションを作りチャットを開始すると、Activity型の引数のTypeがConversationUpdateとなってHandleSystemMessageに来るのでそこでメッセージを生成して送信する。

## コード

```csharp

private async Task<Activity> HandleSystemMessage(Activity message)
{
    if (message.Type == ActivityTypes.ConversationUpdate)
    {
      using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
      {
        var client = scope.Resolve<IConnectorClient>();
        var reply = message.CreateReply();
        reply.Text = $"Welcome!";
        await client.Conversations.ReplyToActivityAsync(reply);                 
      }
    }

    return null;
}

```

##　最後に
例によって試行錯誤したらこのような結果になったという備忘録なので、この方法が正攻法かはわかりません。

2017/08/08追記
Microsoftから正式なやり方がリリースされました！
[https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-proactive-messages](https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-proactive-messages)
Phoenixで作ったアプリでCORSする

# TL;DR
* [cors\_plug](https://github.com/mschae/cors_plug)を入れる
* routingのpipelineに`plug CORSPlug`を追加
* 各routeにOPTIONSを追加

# 動機
phoenixで作ったアプリのAPIをchrome拡張から叩こうとしたらCORSでハマって1時間苦労しました。

そもそもCORSをよく知らなかったのが大きくハマった原因。分かってる人なら「ああ、こうすれば解決するね」ってすぐ分かると思います。

# 環境

* Ubuntu 16.04

サーバ側

* Elixir 1.3.4
* Phoenix 1.2.1
* CORSPlug 1.1.3

クライアント側

* chrome 55
* superagent 3.3.1

# 流れ

## 1. Chromeに怒られる

chrome拡張からapiを叩いたら

`XMLHttpRequest cannot load http://localhost/api/items. Origin null is not allowed by Access-Control-Allow-Origin.`

とか言われる。

phoenixでは[cors\_plug](https://github.com/mschae/cors_plug)を使えばCORSに対応できるらしい。

```mix.exs
  defp deps do
    [
      # ...
      {:cors_plug, "~> 1.2"} # 追加
    ]
  end
```

```bash
$ mix deps.get
```

```web/router.ex
  pipeline :api do
    plug :accepts, ["json"]
    plug CORSPlug # 追加
  end
```

今回は全てのホストに対して許可していますが、特定のホストに対してCORSを許可したい時は、[この辺](https://github.com/mschae/cors_plug#configuration)を読んでください。

[cors\_plugのREADME](https://github.com/mschae/cors_plug)には「`lib/your_app/endpoint.ex`に追加するのを勧める」って書いてあるのですが、`web/router.ex`じゃダメなのでしょうか・・・？

## 2. また怒られる

以上でGETメソッドは叩けるようになったのですが、CREATEメソッドを叩くと今度はまた別のエラーがでました。

```
OPTIONS http://localhost:4000/api/items 404 (Not Found)
XMLHttpRequest cannot load http://localhost:4000/api/items. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'chrome-extension://fjimhgkchedkbdhbohdgabmafmfgcipg' is therefore not allowed access. The response had HTTP status code 404.
```

どうも事前にOPTIONSも叩くようなのでそれ用のルートも追加します。

```web/router.ex
  scope "/", PhoenixApp do
    resources "/items", ItemController
    options "/items", ItemController, :options # 追加
    options "/items/:id", ItemController, :options # 追加
  end
```

コントローラー側に手を加える必要はありません。

これで問題なくCREATEメソッドのapiも叩けるようになりました。

# 関係ない話

production用のDockerイメージを作って、そちらでも動かしたりしているのですが、phoenixアプリをビルドしたDockerイメージに対して`docker-compose.yml`で`volumes: - .:/app`と書いていたせいで`_build`が上書きされ、ソースを書き換える→`docker-compose build`しても挙動が変わらずとても無駄な苦労をしました。

ちなみにDockerfile内で`ADD . /app`しておくとに`_build`のディレクトリが使いまわせるため、phoenixアプリのコンパイル時にライブラリのコンパイルが走らず時間の節約になります。phoenixアプリのコンパイルは再度されるため、上記のような変なことは起こりません。

この辺りの話はまた別の機会に。

# 参考

> [Mithril\.js と Phoenixで作ったAPIを連携 \- Qiita](http://qiita.com/K_ichi/items/71af1ea20ca8c9a17612)

> [CORS in Phoenix \| Leigh Halliday](https://www.leighhalliday.com/cors-in-phoenix)
EAGLE CAD 部品一覧（初心者向け）

[EAGLE CADと基板発注までの流れを見る会](http://matsujirushi.hatenablog.jp/entry/2016/12/29/194251)の後に、
「パーツとかいちいち目で探すとかあほらしい」
とコメントもらって、たしかになるほど納得。

というわけで、わたしがEAGLE CADを使い始めたときに、よく使った部品を一覧にしておきます。
EAGLE CADをやり始めた人に、助けになれば幸いです。

「この部品も一覧に追加したほうがいいよ！」というのがあれば、ぜひコメントください。

#部品一覧

|部品名|Library|Name|シンボル|説明|
|:--|:--|:--|:-:|:--|
|図面枠|frames.lbr|DINA3_L|![image.png](https://qiita-image-store.s3.amazonaws.com/0/109634/e7e99f8e-ee6c-9a3a-da24-f1588a46b1af.png)|
|+5V|supply1.lbr|+5V|![image.png](https://qiita-image-store.s3.amazonaws.com/0/109634/47cb1a6e-c2d6-c521-b503-62ec1607b440.png)|
|GND|supply1.lbr|GND|![image.png](https://qiita-image-store.s3.amazonaws.com/0/109634/4bb651d5-565e-72cf-a581-5d8348e46af2.png)|
|抵抗|rcl.lbr|R-EU_|![image.png](https://qiita-image-store.s3.amazonaws.com/0/109634/64497c8d-a2d9-87c4-fc6d-a2b95fcae8a1.png)|チップ抵抗のサイズは[こちら](http://peripheralpinmap.hatenablog.jp/entry/20091213/1260683406)が参考になります。|
|コンデンサ|rcl.lbr|C-EU|![image.png](https://qiita-image-store.s3.amazonaws.com/0/109634/b8ab1383-254f-a9e5-e214-a6ea2c8b3f91.png)|
|電解コンデンサ|rcl.lbr|CPOL-EU|![image.png](https://qiita-image-store.s3.amazonaws.com/0/109634/fd8b88f4-17c9-d4b2-5dc1-b03590f3b887.png)|
|ピンヘッダ|pinhead.lbr|PINHD-1X2|![image.png](https://qiita-image-store.s3.amazonaws.com/0/109634/740f7225-5eef-15d7-21f0-43eee5500262.png)|
|LED|led.lbr|LED|![image.png](https://qiita-image-store.s3.amazonaws.com/0/109634/08a556ca-5913-8a12-345f-29bf85b08d0b.png)|
|信号チェック用パッド|testpad.lbr|PTR1|![image.png](https://qiita-image-store.s3.amazonaws.com/0/109634/9ca3eb9f-5ba4-fab9-70ab-b92acb01cb41.png)|
|DIP IC|ic-package.lbr|DIL8|![image.png](https://qiita-image-store.s3.amazonaws.com/0/109634/b3d18886-8956-e5c2-eb02-9f324c11ad66.png)|

#環境
EAGLE Version 7.7.0 for Windows (64 bit)です。

![20170106H.png](https://qiita-image-store.s3.amazonaws.com/0/109634/da6e960b-eec4-4159-aa29-0eb278a624c9.png)
python標準ライブラリのお勉強（1）

# batteries included
最近知ったのだが、Pythonはbatteries included（バッテリー同梱）な言語と言われているらしい。
標準ライブラリだけでも充分戦える、というニュアンスらしい。

データ分析からこの言語を知った身としては、numpyやpandas、scikit-learnなどの外部ライブラリに目が行きがち。
でも、batteries includedな言語であれば、まずは標準ライブラリを知っておいても損ないよね、知っておくべきだよね、ということで、学習の過程で知った標準ライブラリについて、忘れないようにメモ。
こちらも、順次追加予定。

## random
文字通り、ランダムデータの生成、操作などに関する機能を持つ。
今回は、「ランダムでシーケンスをシャッフルしたい」と思い、ググった結果引っかかった、以下の２つをメモ。

### random.shuffle(list)
文字通り、listをシャッフルする。

```py3
import random
list = [0,1,2,3,4,5,6,7,8,9]
random.shuffle(list)
list
Out[5]: 
[6, 8, 4, 9, 1, 7, 3, 0, 5, 2]
```

シャッフルしたlistを返すのではなく、listそのものをシャッフルするっぽい。
~~また、シャッフルできるのは数字型だけみたい。~~
数字型以外でも可能なようです（コメント欄参照）

文字列をシャッフルしたくてたどり着いたのは、以下。

### random.sample(list, k)
listから、k回だけランダムに抽出したものを返す。
つまり、文字列の文字数分だけ抽出すれば、文字列自体をシャッフルしたことになる。

```py3
list2 = 'abcdef'
''.join(random.sample(list2, len(list2)))
Out[7]: 
'dbeacf'
```

こちらは、listそのものをいじることはしないっぽい。

```py3
list2
Out[8]: 
'abcdef'
```

ほうほう。
ターミナルから回線速度を計測する方法

大学の図書館などで勉強していると、たまに回線速度が遅くなります。そこでターミナルから回線速度を測る方法を調べてみました。

## 1.インストール

```
$ wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py -O /usr/local/bin/speedtest
$ chmod u+x /usr/local/bin/speedtest
```

## 2.(.bashrcなどに)エイリアスを設定

```
alias speedtest='/usr/local/bin/speedtest'
```

## テスト

```
$ speedtest

Retrieving speedtest.net configuration...
Testing from Nagoya University (!address!)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by gatolabo (Maibara) [58.61 km]: 25.505 ms
Testing download speed................................................................................
Download: 18.74 Mbit/s
Testing upload speed....................................................................................................
Upload: 17.34 Mbit/s
```


## 参考
- [ターミナル上からインターネットスピードを計測する『speedtest_cli.py』](https://orebibou.com/2014/10/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E4%B8%8A%E3%81%8B%E3%82%89%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%82%92%E8%A8%88%E6%B8%AC/)
Lumen、いろいろハマるところ

# はじめに

自分の中ではLaravelの簡易版がLumenという認識なのですが、ちょっと削りすぎて Laravel風がLaravel風味のFrameworkになってる気がします。


## 環境

- Laravel Framework version Lumen (5.3.3) (Laravel Components 5.3.*)

## Lumenのバージョンの確認

```:shell
$ php artisan -V
```

# いろいろハマるところ

## "php artisan key:generate"が できない。APP_KEYを作りたい。

```:shell
$ php -r "require 'vendor/autoload.php'; echo str_random(32).PHP_EOL;"
xygjeOa9lCRD88OFWzZ5tQA8gZHUtR9v
```

生成された文字列を.envのAPP_KEYに書き込む。

参考：[Lumen Micro Framework => php artisan key:generate - Stack Overflow](http://stackoverflow.com/questions/30344141/lumen-micro-framework-php-artisan-keygenerate)



## メール送りたい。

(1) `illuminate\mail`パッケージを入れる

```:shell
$ composer require illuminate\mail
```
(2) `bootstrap/app.php`の下記の行のコメントを外す

```php:bootstrap/app.php
// Create The Application内, 26行目付近
$app->withFacades();

// Register Service Providers内, 81行目付近
$app->register(App\Providers\AppServiceProvider::class);
```

(3) `app/Providers/AppServiceProvider.php`に、書き加える

```php:app/Providers/AppServiceProvider.php
    public function register()
    {
       // ここから
        $this->app->singleton('mailer', function ($app) { 
            $app->configure('services'); 
            return $app->loadComponent('mail', 'Illuminate\Mail\MailServiceProvider', 'mailer'); 
        });
       // ここまで
    }
```

(4) configを書く

Laravelからコピーするか、Laravelのリポジトリ([laravel/mail.php at master · laravel/laravel](https://github.com/laravel/laravel/blob/master/config/mail.php))からコピーする。

※ 素のLumen5.3にはconfigディレクトリがないと思うので、作成する。

```php:config/mail.php
<?php

return [
    'driver' => env('MAIL_DRIVER', 'smtp'),
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
    'port' => env('MAIL_PORT', 587),
    'from' => [
        'address' => 'hello@example.com',
        'name' => 'Example',
    ],
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
    'username' => env('MAIL_USERNAME'),
    'password' => env('MAIL_PASSWORD'),
    'sendmail' => '/usr/sbin/sendmail -bs',
];
```

(5) メールを送る処理を書く。

```php:app/Http/routes.php
use Illuminate\Support\Facades\Mail;

$app->get('/', function () use ($app) {

    Mail::send('emails.notify', [], function ($message)
    {
        $message->from('no-reply@example.com', 'example.com FROM-MAN')
                ->to('to.man@example.com')
                ->subject('mail subject');
    });    

    return $app->version();
});
```

参考：[Sending mail in Lumen via SMTP - Emerico](http://emerico.in/sending-mail-lumen-via-smtp/)

## routes.php はどこ？

```:shell
$ find . -name 'routes.php'
./app/Http/routes.php
```

## config はどこ？

```:shell
$ find . -name 'config'
./vendor/laravel/lumen-framework/config
```

vendor配下なので、基本的に触らない。編集する必要がある場合は、`./config/`ディレクトリを作って、`/vendor/laravel/lumen-framework/config`からファイルをコピーして書き換える。

## sqlite を使いたい。

1. `database/database.sqlite`ファイルを作る。
2. .envを書き換え。`DB_CONNECTION`を`sqlite`にして、あとはコメントアウト。

```:.env
DB_CONNECTION=sqlite
# DB_HOST=localhost
# DB_PORT=3306
# DB_DATABASE=homestead
# DB_USERNAME=homestead
# DB_PASSWORD=secret
```
Google Books API + Movable Type で書籍管理システムを作る

年末年始のお休みに、勉強がてら作ってみました。

## これはなに？

Google Books API と Movable Type を組み合わせて構築した、書籍管理システムです。
ISBNコードを入力すると、Google Books APIからデータを呼び出し、Movable Type に書籍データを保存します。
実際の動作を動画にまとめてみました。

https://www.youtube.com/watch?v=1dcYmssU-xw

(動画中、バーコードリーダーを使っていますが、ISBNを直接入力しても使えます)

## 実際のコード

GitHub に公開しました。
Movable Type にテーマをインストール後、適用して再構築すると使えます。

https://github.com/Nick-smallworld/mt-theme-BookShelf-sample

* Data API (REST)を使って何か作りたい・練習したい
* Java Script の練習したい・勉強したい
* Movable Type のData API の活用例を何か作りたい

などから、作成してみました。

方針として、サーバーサイドスクリプト(php、Perl、Ruby、etc)は使わず、フロントエンドで完結するように実装しています。(html + JavaScript のみで実装)

jQuery+BootStrapで作ってます。


## やっていること

やっていることは単純で、以下のとおりです。

* 入力されたISBNコードを使って、Google Books API へ問い合わせをする
* 返ってきたJSONデータをjQueryでパース
* Movable Type の Data API 経由で記事データとして登録
* Data APIを利用して、一覧・詳細ページを生成する

## Google Books API について

Google が提供するAPIの一つです。世界中の著名な書籍をデータベース化しています。

日本の書籍は登録状況にばらつきがあり、著名なベストセラーでも登録されていないことがよくあります。

制限はありますが、APIキーを使わずにデータを取得することができます。

https://developers.google.com/books/


## Movable Type について

シックス・アパートが開発・提供しているCMSソフトです。Data API と呼ばれるREST APIを実装しています。

https://www.sixapart.jp/movabletype/
http://qiita.com/TakeshiNickOsanai/items/060adba3214dc3bb509c


単純なコードなので、あまり説明の必要もないとは思いますが、追って少し解説を書いていこうと思います。

* [その2:Data API のエンドポイントとJavaScript SDK の使い方](http://qiita.com/TakeshiNickOsanai/items/05120e295ee1aab59017)
* [その3:Data API でユーザー認証を行う](http://qiita.com/TakeshiNickOsanai/items/5508b2df13be72bf4503)
* [その4:Google Books API からJSONデータを取得してjQueryで処理する](http://qiita.com/TakeshiNickOsanai/items/2d9c30cedcba21f36669)
* [その5:JavaScript を利用して Movable Type へデータを登録する](http://qiita.com/TakeshiNickOsanai/items/274c21530f2eb2b72880)

※ 未熟な作者・未熟なコードですので、なにかお気づきの点などありましたら、ご指摘いただけると幸いです。
Amazon Dash ButtonでMacをスリープ

Amazon Dash Buttonはすでに２つ目なんですが、１つ目の「天然水」は嬉しくてフツーに使ってしまったので２つ目の「フルグラ」を使ってnode.jsの勉強と仕事中、離席時に便利かなと思ったので作ってみた！
(本当はiWatchが買えなかった腹癒せに作った)

##やりたいこと

1.Amazon Dash Buttonのボタンをポチッと押す
2.Macがスリープする

これだけ・・・・

##環境
Mac Book Pro2016 OS Sierra 10.12.2
node.js 7.3


##参考にした記事
[押したらパソコンが悲鳴をあげるアマゾンダッシュボタンを作ってみた](http://tytf.jp/2016/12/07/472)
[Amazon Dash ButtonでGet Wild退勤する](http://qiita.com/sanokazuya0306/items/903ccce5c61749915e22)
[クリックするだけで一発スリープ・一発終了・一発再起動](http://mcbrain.jp/4669/)

##準備するもの
Amazon Dush Button
Wifiパスワード
Mac
node.jsとnpmをインストールしておく

##手順
###Dash Button のセットアップを途中でやめる

Amazon アプリで Dash Button のセットアップを行い、WiFiの設定をする。
ただし、注文する商品を選択する手順でセットアップをやめる

1.Amazonアプリの左上ハンバーガーメニューより「アカウントサービス」

2.下部にあるDush端末の「新しい端末をセットアップ」

3.表示される通りDushボタンの電源を入れ、Wifiに接続

4.Wifiに接続完了すると商品を設定する画面が表示されるのでここでやめる。

ここで商品を登録してしまうと、ボタンを押すと発注されてしまうようになるので、間違って登録してしまった場合は、「端末の管理」から一旦削除し、もう一度1よりセットアップを行ってください。

###node-dash-button でボタンをコントロール

node-dash-button を使用するとボタンが押されたことを簡単に検知できます。
ここからはMacのターミナルで作業

1.任意のディレクトリを作成
`$ mkdir appdush`

2.ディレクトリに移動
`$ cd appdush`

4.npm で node-dash-button をインストール
`$ npm install node-dash-button`

5.bin/findbutton を実行して、自分の Dash Button の ID を取得する

`$ sudo node bin/findbutton`

findbuttonを実行してDush Buttonのボタンを押すと、検出したコードが出てくる。unknownと書かれたものがボタンのMACアドレスです。

6.先ほど取得したMacアドレスを控えておく。

###Apple Script でMacをスリープさせる。
[node-applescript](https://github.com/TooTallNate/node-applescript) を使ってボタンを押したら Apple Script でMacをスリープさせる。

1.npm で node-applescript をインストール

`$ npm install applescript`

2.Macをスリープさせる Apple Script を用意する

```script.applescript
tell application "System Events"
	sleep
end tell
```
Apple Scriptはちゃんとスクリプトエディタで書くと失敗がありません。
私は普通のテキストエディタで書いたので最初エラーが出ました。
スクリプトエディタで保存する形式は*.applescriptの拡張子で保存してくださいね

3.ボタンが押されたタイミングで Apple Script を実行するコードをapp.jsで保存

`$ vi app.js`

```app.js
var applescript = require('applescript');
var dash_button = require('node-dash-button');
var fs = require('fs');
//取得したDash ButtonのMacアドレスを設定する
var dash = dash_button("XX:XX:XX:XX:XX:XX", null, null, 'all'); 
//検出時にログファイルに書き込まれるテキスト
dash.on("detected", function (){
    console.log("sleep");
// 別ファイルの Apple Script を読み込んで実行
fs.readFile('./script.applescript', 'utf8', function (err, script) {
        applescript.execString(script, function(err, rtn) {
            if (err) {
                // Error
                console.log(err);
            }
        });
    });
});
```

出来上がり！

##動くかどうかを確かめるには

1.ターミナルでjsファイルを実行
`$ sudo node app.js`

2.Dash Buttonをポチッとな

3.Macがスリープに入ります。

余談ですが、ポチった時にスマホのAmazonアプリが反応して
「フルグラDush Buttonのセットアップが完了していません」
と言うアラートが毎回出る時はAmazonアプリで途中まで設定が入っている為なので設定を解除してください。
ターミナルで git の状態をわかりやすくする


ただの自分用メモ。

## どういう風になる？
git 管理外のディレクトリ等 (カレントディレクトリがルートの場合)
![git_bash.png](https://qiita-image-store.s3.amazonaws.com/0/71497/ee8d955c-ab79-f644-b314-55e93728fd24.png "git_bash.png")

git 管理下のディレクトリで更新(追加)ファイルが存在する場合
![git_bash2.png](https://qiita-image-store.s3.amazonaws.com/0/71497/95501549-612c-2990-af96-5db1be129592.png "git_bash2.png")

git 管理下のディレクトリで更新(追加)ファイルが存在し、 add 下ファイルがある場合
![git_bash3.png](https://qiita-image-store.s3.amazonaws.com/0/71497/740be3a1-ea31-2550-e9bf-9c3018428fff.png "git_bash3.png")

## CentOS の場合
6.5, 6.8, 7.1 で確認。
`vi ~/.bashrc` でエディタを開き、任意の位置(自分は一番下で)に以下のテキストを貼り付けて保存し、 `source ~/.bashrc` を発行する。

git のバージョンやインストール方法によっては `/usr/share/doc/git-1.7.1/contrib/completion/git-completion.bash` のパスが変わるので、 `find` あたりで適当に検索する。

```.bashrc
source /usr/share/doc/git-1.7.1/contrib/completion/git-completion.bash

GIT_PS1_SHOWDIRTYSTATE=true
PS1='[\[\033[40;1;32m\]\u\[\033[2;32m\]@\[\033[0m\]\[\033[40;32m\]\h \[\033[1;36m\]\W \[\033[31m\]$(__git_ps1 "(%s)")\[\033[0m\]\[\033[40;2;37m\]]\$ '
export PS1=$PS1
```

## Mac OSX の場合
10.10, 10.11, 10.12 で確認。
`vi ~/.bashrc` でエディタを開き、任意の位置(自分は一番下で)に以下のテキストを貼り付けて保存し、 `source ~/.bashrc` を発行する。

git のバージョンやインストール方法によっては `/usr/local/etc/bash_completion.d/git-prompt.sh` や `/usr/local/etc/bash_completion.d/git-completion.bash` のパスが変わるので、 `find` あたりで適当に検索する。

```.bashrc
source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/git-completion.bash

GIT_PS1_SHOWDIRTYSTATE=true
PS1='[\[\033[40;1;32m\]\u\[\033[2;32m\]@\[\033[0m\]\[\033[40;32m\]\h \[\033[1;36m\]\W \[\033[31m\]$(__git_ps1 "(%s)")\[\033[0m\]\[\033[40;2;37m\]]\$\033[m '
export PS1=$PS1
```

## 細けぇこたぁいいんだよ
詳しく知りたければ bash の本とかを読んでください。
色の設定も詳しければ好みのものに変更できるので、おためしあれ。
なお、書いた人はそこまえ詳しくない上にデスマーチ中なので、疑問等にはお答えできますん。
Dvorak配列を試してみた（最終的にColemak配列になった）

最近タイピングがしんどくなってきたので、楽に打てると噂のDvorak配列を試してみました。
この記事もDovrak配列で書いています。

##Dvorak配列

英文入力において、QWERTY配列と比べて上段と下段の使用頻度が低くなるように設計している。 そのためQWERTY配列に比べて、英文入力における指の移動距離を短くすることができる。この特徴から、腱鞘炎などの予防に効果がある。（wikipediaより）

##使ったソフト

[DvorakJ](http://blechmusik.xii.jp/dvorakj/)

##手順

ダウンロード
↓
DvorakJ.exe実行
↓
直接入力を選択して
.\data\lang\eng\Dvorak\Dvorak 配列 (英語配列キーボード版).txt
を選ぶ(筆者は英語配列のキーボードなので)<-筆者と同じ場合、101キーにもチェック
↓
日本語入力を選択して
日本語入力用配列を常に使用しない
を選択
↓
新感覚！

##修飾キー関連

ctrl+c などショートカットは前と同じように使いたかったのでそのように設定しました。

修飾キー関連を選択して
↓
修飾キーを押し下げている場合にQWERTY配列を使用する
のチェックボックスにすべてチェックを入れる

これでAltやctrlを押している間は元のQWERTY配列になります。


##所見

覚えるのは意外と早く済んで、30分くらいメモ書きをしてたらほぼ完ぺきに覚えられました。
ただ反射的にQWERTY配列で打ちそうになるのでまだ練習が必要です。
場所が動いていないのがAとMだけなので。Sなんか完全に反対側に行ってしまって非常に混乱しています。
ただ、手の動きは圧倒的に少なくなっているので、ぜひ練習して身に付けたい。たまにうまくはまって打てたときは本当に快感。

練習としては英文と和文を交互に練習すればバランス良く練習できる気がします。あと、キーボードを見ると惑わされるので、見ないほうがいいです。




##参考

[ぼくがどのようにDvorak配列でないと生きていけない体になったのか Dvorak Advent Calendar 2015 19日目](http://tekitoh-memdhoi.info/views/708)

### 【悲報】最終的に筆者はColemak配列になりました。
出来ればその話も書きます。日本語は圧倒的にColemakの方が打ちやすかった…

書きました。[Colemak配列も試してみた](http://qiita.com/kyusque/items/533b66aa4552893c641c)
参考文献リストを表示させずにbibtexを使う

# 参考文献リストを表示させずにbibtexを使う

こんなときにどうぞ．

- 条件付き採録の論文の回答文を作るとき
- 論文などに付随する説明資料で論文中の参考文献を参照するとき



# ソースコード

## styファイル

以下のようなスタイルファイルを作成し，texファイルと同じ階層に置く．
(texの`\usepackage`で読み込めるディレクトリならどこでも可)

```TeX:nobibprint.sty
%% Copyright (C) 2011 by Marco Daniel
\ProvidesPackage{nobibprint}[2011/10/12 v0.1 nobibprint]
\RequirePackage{etoolbox}
\RequirePackage{xkeyval}
\define@boolkey{nobibprint.sty}[nobib@]{hide}{}
\ExecuteOptionsX{hide=true}
\ProcessOptionsX
\newsavebox\nobib@tempbox
\ifnobib@hide
   \AtBeginDocument{%
     \let\nobib@bibliography@orig\bibliography
     \def\bibliography#1{%
        \savebox\nobib@tempbox{%
           \parbox{\linewidth}{%
              \nobib@bibliography@orig{#1}%
            }%
        }%
      }%
   }
\fi
\endinput
```

## 本体での参照

TeXファイル本体に以下の通り記述．

- パッケージ読み込み

```TeX
\usepackage{nobibprint}
```

- bibファイル読み込み

  普通に使う．

```TeX
\bibliographystyle{your_bst_file}
\bibliography{your_library_file}
```

# 参考

- http://tex.stackexchange.com/questions/31373/citations-with-no-bibliography-at-the-end
Rust実行環境構築 in Atom

#　Rustを簡単に試せる環境をAtom上に構築する。

## Rust? 
![Unknown.png](https://qiita-image-store.s3.amazonaws.com/0/21184/1de4217c-3ee4-aeba-4e76-4fdbe838274d.png)
[Rust](https://www.rust-lang.org/en-US/)はオブジェクト指向・関数型・並列型とマルチパラダイムな言語です。
速度・型安全・メモリ安全と使い手にとっても安全安心な言語です。

### atom上で動かしたいコード

Rustのサイトのトップにあるコードを動かす環境を作ってみましょう

```rust
// This code is editable and runnable!
fn main() {
    // A simple integer calculator:
    // `+` or `-` means add or subtract by 1
    // `*` or `/` means multiply or divide by 2

    let program = "+ + * - /";
    let mut accumulator = 0;

    for token in program.chars() {
        match token {
            '+' => accumulator += 1,
            '-' => accumulator -= 1,
            '*' => accumulator *= 2,
            '/' => accumulator /= 2,
            _ => { /* ignore everything else */ }
        }
    }

    println!("The program \"{}\" calculates the value {}",
              program, accumulator);
}


```

### 手順
1.[公式サイト](https://www.rust-lang.org/en-US/)からインストールをおこなってください。

2.atomをインストールしてください

3.atom->環境設定->installから次のパッケージを検索してインストールしてください
> script(https://atom.io/packages/script)
> language-rust(https://atom.io/packages/language-rust/)
(atom-language-rustというのもありますが**それではありません**)

4.hello.rsというファイルを作ってなかに先ほどのコードをコピペしてください
5.そのファイルをAtomで開いて⌘+I(mac)、またはCtrl+Shift+B(Windows)を押してください
<img width="354" alt="スクリーンショット 2017-01-06 19.31.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/21184/a7e2a23a-f497-df80-1e76-ffd78e03d34a.png">
6.実行でけた!

#### できなかった人は以下のパターンが考えられます
1.PATH通ってない -> 再ログインまたは再起動
2.atomのパッケージちゃんとつながってない -> atom再起動
3.ショートカット聞かない ->　⌘+Shift+P(mac)/Ctrl+Shift+P(windows)でパレットを開いてrunと入力してEnter

4. terminal/powershellでrustc 実行したいファイル.rsをやる -> 動かない場合はエラーの対処
5. Windowsの人はVisual C++ Option付きでVisualStudio2015(2013)入ってるか確認

##### 簡単
最近だとWebフロントにも応用できる可能性があるということ、モダンでありながら低級にも対応した柔かい言語を試す環境をatomに作ってどんどん実験していきましょう！
[UX] 畫面中的動畫

在使用者操作的過程，可以透過來動畫來達到輔助、提示等目的

不過動畫還是要適可而止，
要怎麼適可而止呢？

在對 UI 元件加入動畫至少要注意這些事情：

- 是否會破壞視覺動線
- 是否有多餘的動畫，轉移使用者目前的注意力

有些動畫會是在實作時沒有注意到畫面生命週期， 而產生預期之外的動畫效果，
例如 iOS ，有時候會看到一些 app 再開起來的時候，
會有 UI 從 size 0*0 放大到正確的大小歸位的這種情形，
這些在開發端都要多加注意。

總而言之，
就是當使用者在操作某個行為當下，
必須要避免動畫產生干擾使用者執行當下行為。

這樣子，動畫才會達到畫龍點睛的效果。
Pythonでシンプレックス法(単体法)

# はじめに
何らかの事情で線形計画問題を解くためのシンプレックス法(単体法)の既存実装を探しているが、
C/C++でバシっとかかれたOSSのソルバ(COIN-OR CLP, GLPKなど)は読みたくないという軟弱な人向けに、
比較的信用できそうなPython実装はこれですよというメモを書きます。
Nelder-Meadの単体法ではありません。

## scipy.optimize.linprog
https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.linprog.html
scipyはPythonの数値計算のための有名なライブラリで、
割と最近になってPythonによる単体法の実装が追加されています。

LL言語の数値計算パッケージにはたいてい最適化問題を解くためのメソッドが用意されていますが、中身は単なる既存ソルバのバインディングである場合が多いように思います。
ピュアPython実装があるのはうれしいですね。
利用者の多いライブラリで、テストコードもあって、LL言語によるピュア実装となると、多分これくらいだと思います。

## cylp
https://github.com/coin-or/CyLP
こっちはシンプレックス法のPython実装というわけではないんですが、
CLPやCBCというC++で書かれたソルバをPythonでカスタマイズできるようにするライブラリです。
詳細な設計は[この論文](http://link.springer.com/article/10.1007/s12532-015-0094-2)に書かれています。

オレオレピボットルールを実装したいだけなんだという人はこれを使うと計算速度と簡単さを両立出来るかと思います。
ピボット規則はなんでもいいんだけど単体法の反復ごとに呼び出したいコールバック関数があるんだという場合でもcylpで実現できます。

[Dantzigの規則の実装](https://github.com/coin-or/CyLP/blob/master/cylp/py/pivots/DantzigPivot.py)あたりを読んだらきっとわかるかと思いますが、`PivotPythonBase`のインターフェースをいくつか実装すればオレオレピボット規則の単体法を動かすことが出来ます。

あと https://github.com/coin-or/CyLP/blob/master/cylp/py/pivots/ をみるといろいろなピボット規則の実装が載ってるので勉強になります。

自分が確認した時点ではPython3系への移行はまだなのですが、[プルリクエストには来ている](https://github.com/coin-or/CyLP/pull/28)ので、そっちのブランチを使えばPython3でもcylpを使えるかも知れません。
windows 2016 server　RDサービス構築メモ

windows serverはほぼ初心者だったので何がなんやらわからなかった。ましてや2016は触ったことすらなかった。
RDS(Remote Desktop Service)のことをAWSやってたせいかRDSをRelational Database Serviceと思ってしまう始末。。。まったくの別物（笑）

#やったこと
RDブローカーのセッションホスト機能を使ってリモート接続先へ負荷分散


#分かったこと
・ブローカーとは接続先の負荷分散

・全体を管理するサーバーがいる。RDサーバーマネージャー
RDサーバーマネージャーからブローカーやセッションホストの機能をどこのサーバーにいれるか指定して管理する。
同一のドメインに参加させる必要あり（別途ドメインコントローラーのサーバーがあり、すべてのサーバーがドメインの配下にあること）
サーバーマネージャーのコンソールを開きすべてのサーバーからグループを作ってそこに必要なサーバーを登録する。

・ブローカー事体の冗長化（高可用性設定）にデーターベースのSQLExpressを使用を試みて、Microsoftに聞いてみたところExpressではできないということが判明。
（SQLserverが死んだらブローカー全部しぬからSQLの冗長化も必要な気が…）

・mstscで接続する際にセッションホストのサーバーをドメインで指定。DNSサーバーにセッションホストたちをラウンドロビンで登録する必要あり。
流れとしては、セッションホスト（ブローカーGWを参照）→ブローカー（負荷分散先を決定）→セッションホスト
（正直なとこ最初にブローカーにmstscで接続して負荷分散すればいいと思うのだができないらしい。）
【爆速解決】Macのストレージ不足を解決する方法

Macのストレージ容量が不足して、メンテナンスツールの「OnyX」や「MacClean」を使っても解決せずにハマッていたので、聞いて調べていたら爆速で解決したので他にも困っている方のためにここに紹介します。調べること5時間、これを見てやるだけで15分くらいで解決できます。もっと良い方法があったら教えてください。

#Macのストレージ不足を爆速で解決させる方法
まずは自分のMac上のストレージ容量を調べてみる。(2017年1月6日金曜日現在)
![スクリーンショット 2017-01-06 15.27.56.png](https://qiita-image-store.s3.amazonaws.com/0/97880/1adfdc0c-8fbd-5992-e1a1-503c20766929.png)

毎回、毎回Finderから容量の大きいファイルやブラウザのキャッシュなどを消して、ちょこちょこストレージ不足を解消していたのですが、その頻度が多くなってついには0GBまでになり最終的に6.52GBまで回復させました。

これ以上に削除するようなファイルもなく、Macのセーフブートでキャッシュ削除や、メンテナンスツールの「OnyX」や「MacClean」を使いましたがほとんど効果はありません。そこで行き着いたのが[スワップファイル]。

##スワップファイルとは？
>コンピュータのOS（オペレーティングシステム）がハードディスクなどのストレージ（外部記憶装置）に作成するファイルの一つで、使われていないメモリ領域の内容を一時的に保管しておくためのもの。
出典：[スワップファイルとは｜IT用語辞典e-Words](http://e-words.jp/w/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.html)

#見えない不要なファイルを削除する方法

①まずMacに常備されているターミナルを開き、$マーク以降のsudoより下記のコマンドを実行します。

```
ターミナル
$ sudo du -g -x -d 5 / | awk '$1 >= 5{print}'
```
![SATO_YUSUKE_—_-bash_—_98×24.png](https://qiita-image-store.s3.amazonaws.com/0/97880/7c3f5034-d215-5a9f-497d-76daf2da0058.png)

②パスワードを求められるのでPCに設定してあるパスワードを入力し、Enterを実行する。すると2~3
分すると下記のように5GB以上のファイルが表示される。

![SATO_YUSUKE_—_-bash_—_94×24.png](https://qiita-image-store.s3.amazonaws.com/0/97880/57ed4edd-9bb2-bcad-3a72-d022badfb3c5.png)

③①Finderを開き、②Finder>メニュー上の[移動]>③フォルダへ移動をクリック。

![Gyazo_-_f894f8c6ef8f2658f6184629fa1bd34c.png](https://qiita-image-store.s3.amazonaws.com/0/97880/ec2827e4-8117-06ca-d2da-40b93d618d6c.png)

④するとフォルダが開くので、この枠にターミナルで表示されていたスラッシュ以降の部分を入力する。私はブロックチェーンのEthereum(イーサリアム)系やgit系のファイルそしてtmpという一時的なファイルを削除。

ファイルは自分がいらないと思うものを削除してください（自己責任）。安易に全てを消してしまうと必要なファイルまで削除してしまったということにもなります。
![Gyazo_-_f894f8c6ef8f2658f6184629fa1bd34c.png](https://qiita-image-store.s3.amazonaws.com/0/97880/cc15f4ad-eab2-20ea-ec5a-0fa1e3aaea7b.png)

![chaindata.png](https://qiita-image-store.s3.amazonaws.com/0/97880/74ff23bd-d75b-af99-1d57-cbc24820e2c3.png)

こちらで検索するとファイル一覧が出るので、確認して不要だと思うものを削除します。
![tmp_と_SATO_YUSUKE_—_-bash_—_94×24.png](https://qiita-image-store.s3.amazonaws.com/0/97880/8801fccc-322d-4c7e-5228-2c15c162a367.png)

###これでMacのストレージ容量不足が爆速で解決しました。
![スクリーンショット 2017-01-06 18.06.55.png](https://qiita-image-store.s3.amazonaws.com/0/97880/2fb31ef8-841c-4ba8-609a-be226aabee86.png)

##tmpとは、
>一時的なファイルを必要とするプログラムがいつでも使用できるようにしておくこと。
出典：[/tmpと/var/tmpの仁義無き戦い | Qiita](http://qiita.com/kuni-nakaji/items/f29be14be578b5a19d4b)

##参考記事
[Mac の SSD 空き容量がガッツリ減ったのであれこれ対応した話 | note](https://note.mu/akikazutakenaka/n/n362c8c79193b)

[Macの空き容量を増やす | KayaMemo
](http://kayakuguri.github.io/blog/2014/07/24/mac-storage/)

#まとめ
1.まずはFinderより不要なファイルを削除。
2.1で解決しない場合には、メンテナンスツール等を使う。
3.1,2で解決しない場合には、スワップファイルを確認し不要なファイルを削除する。
フロントエンドエンジニアとして心がけていること

# 概要
- 下っ端フロントエンドエンジニアです。
- 思い付きで書き連ねてみる。

# コピペ最高
- コードはコピペするもの。
- バージョン管理もものすごいコピペの一種。
- スニペット登録して貼り付け。
- コード・文言を手で打つよりコピペを活用する。ちゃんと活用すれば打ち間違いも減る。

## ただし
- 他所から持ってきた人のコードをコピペするだけはダメ。
- あくまで自分のコード・自分のプロジェクトのコードのコピペが最高。

# コミット前の差分確認
- 画面確認よし、ですぐコミットしない。
- 差分を見て、それで本当によかったらコミット。
- 余計な編集が入ってないかは逐一見る。
- コードを自動整形しようが何しようが、余計な編集は自動で取り除いてはくれない。

# とりあえず見せる
- 感覚的には見た目は10割、ソースは7割程度の完成度で見せる。
 - 見た目は仕様・デザイン通りにしてないと正しいフィードバックが成立しないため。 
- とりあえず動くものを書く。
- 具体的な方策を練ったり、最適化はその後。
- といっても、後から全部直すのも手間なので、最低限のベースは後から直さなくて良いように書いておいた方が楽。
- 見せるとすごく色々言われるから、見せる前の作業に時間を掛けすぎない。
- その時間を掛けた分の半分くらいは無駄になる。
- 時間を無駄にするぐらいならとりあえず見せて反応を聞いてから頑張る。

# 必要ないコードは捨てる
- 頑張ったり時間を掛けたりしたコードは残しておきたくなったりするが、大事なのは「今必要かどうか」なので、必要なければ潔く捨てる。
- 既存コードを活用しなければならないケースもあれば、完全に捨てて書き直せるケースも有る。そこは使い分け。

# 正規表現を活用する
- コードとして書く以外にも、文字列置換作業を効率的に扱うツールとして活用できる。
- 詳しくは[WebStormの正規表現を使った置換が便利すぎる件](http://tech.leihauoli.com/post/2014/10/11/regex-webstorm.html)参照（他のエディタでも使える）

# 考える
- 考えるだけならいつでもできるので、帰り道や電車の中で必要事項を考える。
- まとまったことを仕事場で使う。
- 手は動かさない。仕事は仕事場で。

# 試す
- 気になったことはコードを書いて試す。
- 説明を聞いたりリファレンスを読んでもわかった気になるだけ。
- 自分でコードを書いて実感を持たないと、いつまでも書けない。

# 暗黙知を形式知にする
- 「知ってて当然、しかしどこにも書いてない」を無くす。
- 「知らなくて当然、調べれば書いてある」にする。

## 知らない事を記事にするのは当たり前。常識的な事こそ取り上げる。
- 未経験の事柄、新発見を記事にするのは当たり前。
- 「自分にとっては解説不要だが、他の人が分かっていない事」を見つけて記事化する。
 - Slackの操作方法、メールの分類方法etc... 

## 記録を残す
- 案件でいろんなコードを書く。そこで得たものを一般化して残す。
- Qiitaの記事とか、共有サービスとかに残す。
- 他の人への共有も簡単にできる。誰かの質問の回答としても使える。

## 共有する
- 話題を流す。
- 自分だけ知ってもあまり意味がない。
- なるべく他の人を巻き込む。
"debug1: SSH2_MSG_KEXINIT sent" というメッセージでSSHがハングする件

#はじめに
sshができなくなってしまって上記のメッセージでハングしてしまうパターンの場合の対処法です
結局理屈はわからなかったので、全ての場合に有効かどうかはわかりませんが、一応メモしておきます

#経緯
あるサーバでSSHができなくなりました
原因を探るためvarboseオプションをつけて

```ssh -v hoge@hogehoge.com```

とやってみると、どうも

```debug1: SSH2_MSG_KEXINIT sent```

というメッセージのあとで反応がなくなってしまうみたいです

エラーメッセージで検索するとXENサーバだけログインできないという人がいました、で確かめてみると、私もAmazon EC2（XENを使ってる）のサーバだけログインできません

しかし、いくつか出て来る解決法はどれもダメでした

openssh-serverを再インストールするとか、ホストキーを変えるとか、ssh_configのGSSAPIAuthenticationをnoにするとか...etc.

#解決
結局MTUを変更したら解決しました

```sudo ifconfig eth0 mtu 1454```

1454に深い意味はありません、ただMTUの変更方法調べたときに[こちら](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/418chkmtu.html)を参照しただけです

そしたらアクセス出来ました！全く理屈がわからん！
ちょうどLANのルーティングを変更したところだったので、ルーティング関係だとばっかり思ったのだが、なぜMTUを変更したら直ったのかさっぱりわからない！
SSHの認証の問題なのになぜMTUが関係あるのか？なぜXENサーバだけなのか？opnesshかXENのバグ？

謎は尽きませんがとりあえず解決しましたというお話
Swiftで小学生の頃ハマった定規でぐるぐるするやつを描く


先日ラーメン屋で子供がお子様セットを頼んだら、おまけでその定規を貰って懐かしくなったので、プログラムで描けないか試してみました。

言葉で説明するのは難しいのでGIFアニメーションを引用します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/31347/780f3050-344f-9080-1080-4f0c5efa70d1.gif" width=300>


（画像の著作権者：MichaelFreyさん、ライセンス：CC BY-SA 3.0、https://ja.wikipedia.org/wiki/スピログラフ ）

スピログラフって言うんですね。
（この定規に世界の鉛筆が何本消費されたのか考えただけでも恐ろしいです。）

大きな円の内側を中を小さい円が自転しながら周り（ただし公転とは逆回転）、小さい円の中心から少し離れた場所を描画地点とすれば良さそうです。


早速Playgroundで書いてみました。

```swift:
import UIKit
import PlaygroundSupport

/// 受け側の半径
let largeRadius = CGFloat(150)

/// ぐるぐる回す方の半径
let smallRadius = CGFloat(65.0)

/// ぐるぐる回す方の穴とセンターとの距離（0度方向）
let smallHoleDistance = CGFloat(48)

/// 回転数
let numberOfRotations = 30

/// １周を何等分するか
let dividing = 100

/// π
let pi = CGFloat(M_PI)

let imageSize = CGSize(width: 350, height: 350)
UIGraphicsBeginImageContextWithOptions(imageSize, false, 0)
let ctx = UIGraphicsGetCurrentContext()!

/// 面倒なので、中心位置が(0, 0)で、Y軸の向きも算数の教科書っぽくしておきます。
ctx.translateBy(x: imageSize.width / 2, y: imageSize.height / 2)
ctx.scaleBy(x: 1, y: -1)

/// 円周を求めます。
func circumference(radius: CGFloat) -> CGFloat {
    return radius * 2 * pi
}

/// 小さい円が１回公転するときに何回自転するかを求めておきます。
let ratio = circumference(radius: largeRadius) / circumference(radius: smallRadius)

ctx.move(to: CGPoint(x: largeRadius - smallRadius + smallHoleDistance, y: 0))
for rot in 0..<numberOfRotations {
    for i in 0..<dividing {
        // 小さい円の中心位置を求めます。
        let angle = 2 * pi / CGFloat(dividing) * CGFloat(i)
        let r = largeRadius - smallRadius
        let x = cos(angle) * r
        let y = sin(angle) * r
        
        // 小さい円がどれぐらい自転しているかを算出します（公転と自転は逆回り）。
        let angle2 = -(angle + CGFloat(rot) * 2 * pi) * ratio
        
        // 鉛筆を刺す穴の位置を求めます
        let x2 = x + cos(angle2) * smallHoleDistance
        let y2 = y + sin(angle2) * smallHoleDistance
        
        ctx.addLine(to: CGPoint(x: x2, y: y2))
    }
}

UIColor.red.setStroke()
ctx.strokePath()

let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

let view = UIImageView(image: img)
view.backgroundColor = .white
PlaygroundPage.current.liveView = view
```

こんな図形が描けました。
![output.png](https://qiita-image-store.s3.amazonaws.com/0/31347/e8ba398c-8be4-c526-c156-c914fbd9d942.png "output.png")

パラメーターをいじると、様々な図形が描けます。

```swift:
/// ぐるぐる回す方の半径
let smallRadius = CGFloat(42.0)

/// ぐるぐる回す方の穴とセンターとの距離（0度方向）
let smallHoleDistance = CGFloat(20)

/// 回転数
let numberOfRotations = 10
```
![output.png](https://qiita-image-store.s3.amazonaws.com/0/31347/b6101c8d-a573-0c6f-d4c1-8ad5b15c3978.png "output.png")

皆さんもいろんな図形を描いてみてください😃
Bing Speech Recognition APIをClojureから使ってみる

サブスクリプションキーの発行は以下を参考にしました。

* [MicrosoftのCognitive Serviceの一つ、Bing Speech APIを使う手順をまとめました](http://magicbullet.hatenablog.jp/entry/CognitiveService_BingSpeechAPI)

音声のサンプルデータは以下から。

* [日本語音声サンプル](http://www.gavo.t.u-tokyo.ac.jp/~mine/B3enshu2000/samples.html)

```clj
(ns bing-speech.core
  (:gen-class)
  (:require [clj-http.client :as http]
            [clojure.data.json :as json]))

(def issue-token-endpoint
  "アクセストークン発行用のエンドポイント"
  "https://api.cognitive.microsoft.com/sts/v1.0/issueToken")

(def recognize-endpoint
  "音声認識用のエンドポイント"
  "https://speech.platform.bing.com/recognize")

(def subscription-key
  "Bing Speechのサブスクリプションキー"
    "abcdefghijklmnopqrstuvwxyz123456")

(defn issue-token [key]
  "アクセストークンを取得する"
  (let [res (http/post issue-token-endpoint
                       {:headers {"Content-Type" "application/x-www-form-urlencoded"
                                  "Ocp-Apim-Subscription-Key" key}})]
    (res :body)))

(defn uuid []
  "UUIDを生成する"
  (str (java.util.UUID/randomUUID)))

(defn recognize [token path]
  "pathにあるWAVファイルを音声認識する"
  (let [scenarios "scenarios=smd"
        appid "appid=D4D52672-91D7-4C74-8AD8-42B1D98141A5"
        locale "locale=ja-JP"
        os "device.os=MacOS"
        version "version=3.0"
        fmt "format=json"
        instanceid (format "instanceid=%s" (uuid))
        requestid (format "requestid=%s" (uuid))
        url (format "%s?%s&%s&%s&%s&%s&%s&%s&%s" recognize-endpoint scenarios appid locale os version fmt
                    instanceid requestid)
        authorization (format "Bearer %s" token)
        content-type "audio/wav; codec=\"audio/pcm\"; samplerate=44100"]
    (http/post url {:headers {"Authorization" authorization "Content-Type" content-type}
                    :body (clojure.java.io/input-stream path)})))

(let [token (issue-token subscription-key)
      result (recognize token "aiueo1.wav")]
  ((((json/read-str (result :body)) "results") 0) "name"))
;=> "あいうえお"
```

この分野は全然知らないので認識率についてはなんとも言えませんが、こんなお手軽にできるのは凄いですね。
画面キャプチャーを素早くslack等に張り付ける方法(macOS)

# 概要
良く使うがボタンが多くて忘れがちなので
自分用の備忘録として投稿

# 良く使う矩形キャプチャーで実施

`control + command + shift + 4`
で矩形選択モードになり選択範囲がキャプチャーとしてクリップボードに保存される。

`control + V`

でslack等に張り付ける。

終わり

# 付録
キーポジションは
`command` -> 左親指
`shift` -> 左人差指
`control` -> 左中指
`4` -> 右人差指

# 追記
windows機で行う場合は標準搭載されている`snipping tool`なるツールを起動させてクリップボードに保存した後、`control + V`で張り付けたらいい感じだ。

# 追記2
windows機で行う場合は`win+shift + S`で矩形ショットモードが始まるので最近はこれを使っている
EclipseのSVNに新規プロジェクトを紐付けする手順

新規作成したプロジェクトをいつでもコミットできるような状態に紐付けするときの手順メモ

・SVN Repository Exploring ウインドウに切り替える
・紐付け先のリポジトリに新規フォルダを作成
・作成したフォルダを右クリックして、CopyURL
・Java ウインドウに切り替える
・紐付けしたいプロジェクトを右クリックして、Team→ShareProject
・SVNを選択→Next
・紐付け先を選択→Next
・URLに先ほどコピーしたURLをペースト→Finish
CSS invalidな 3.3.7

* Bootstrap3(のみ)には `:invalid`なCSSは設定されていない(2時代にはあった模様)
* ブラウザ標準の、input外周が赤くなる:invalidの装飾は、Bootstrapの`box-shadow`スタイルの設定で上書きされて消えている。
* 外周が赤くなったり緑になったりするvalidate statusなクラスは定義されているが、`required`や`pattern`のvalide状態によって、自動的・動的に変化するような属性オプションは無い。自前でJS書けということ？


# <i class="fa fa-cogs"></i> 検証環境

Firefox50
OpenJTalk利用してひたすら入力した文字を読み上げるプログラムをPythonで作成。

即興で合成音声で会話をする事が出来たので組んでみました。
入力欄に「end」を入力すれば終了します。


<pre>
## coding=utf-8
import sys
import subprocess

#jatalkの合成音をwavファイルで出力して、aplayで再生する。
def jtalk(t):
    open_jtalk=['open_jtalk']
    mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic']
    htsvoice=['-m','/usr/share/hts-voice/mei/mei_bashful.htsvoice']
    speed=['-r','1.0']
    outwav=['-ow','open_jtalk.wav']
    cmd=open_jtalk+mech+htsvoice+speed+outwav
    c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
    c.stdin.write(t)
    c.stdin.close()
    c.wait()
    aplay = ['aplay','-q','open_jtalk.wav']
    wr = subprocess.Popen(aplay)

args = sys.argv

a = 0
while a < 1:
  input_line = raw_input('talk:')
  if input_line == "end":　#endを入力すると終了する。
    a = 1
  else:
    jtalk(input_line)
</pre>
Cognito UserPoolsでのメール・SMS認証をスキップする

# 前提とやること
前提は、UserPools・登録ページを作成済みであること。

UserPoolsを使ったユーザ認証では、メールorSMS認証がデフォルトでは必須です。また、2017/01/06現在、コンソール上から認証を解除する方法は見当たりません。そこで今回は、メール・SMS認証無しでユーザ登録が完了し、ログインできる状態にしたいと思います。


# 概要
1. Sign UpのタイミングでLambdaを起動
2. autoConfirmを有効にする

# やりかた
## Lambdaの作成
UserPoolsと同じリージョンに下記処理が書かれたLambdaを作成します。Roleは特に何も必要ありません。

```js
exports.handler = function(event, context, callback) {
    if (event.triggerSource == 'PreSignUp_SignUp') {
        event.response.autoConfirmUser = true;
    }
    callback(null, event);
}
```

## UserPoolsの設定
該当のUserPoolsのTriggersを開きます。Pre sign-upのLambda Functionを上で作成したLambdaにします。これを設定することによって、登録ページで、登録ボタンが押された際に、このLambdaFunctionが呼ばれ、autoConfirmUserが有効に上書きされます。これをすると、ユーザに面倒な認証をして貰う必要がなくなります。

eventの中身はこんな感じです。この辺に応じて、メール・SMS認証をスキップするかどうかを判断してもいいかもしれません。

```json
{
    "version": "1",
    "region": "us-east-1",
    "userPoolId": "us-east-1_xxxxxxxxxx",
    "userName": "xxxxxxxxxxx",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-js-2.4.12",
        "clientId": "xxxxxxxxxxxxxxxxxxx"
    },
    "triggerSource": "PreSignUp_SignUp",
    "request": {
        "userAttributes": {
            "email": "your mail address"
        },
        "validationData": null
    },
    "response": {
        "autoConfirmUser": false,
        "autoVerifyEmail": false,
        "autoVerifyPhone": false
    }
}
```

注意点としては、登録時に認証コードが書かれたメールが送られていましたが、それは送られなくなります。よって、ユーザに登録されたことを通知したければ、別途LambdaFunctionにSES等を使ってメールを送る処理を書いていく必要があります。


おわり。
sassからstylusに移行してみた

stylusでもsassで出来ることは大体できるのと、記述が楽になるのでstylus使いましょうって社内で言ってみたら通ったので、sassからstylusに移行してみた。

変数の書き方が若干異なり、そこで少しハマったのでメモ。

## nib
stylusのライブラリで、これを`@import`しておけばデフォルトで`mixin`が色々使うことができる

## mixin
### cleafix
`nib`のclearfixの書き方が若干古いので書き換える

```styl:mixins.styl
 clearfix()
	+cache('clearfix')
		&:after
			content ''
			display block
			clear both
```

#### usage
```styl
ul.list
	clearfix()
```

### font-size
pxをremに変換するmixin

```styl:mixins.styl
font-size-px{prop, font_size}
	{prop}: unit(font_size, 'px')
	{prop}: unit(font_size / 10, 'rem')
```

#### usage

```styl
font-size-px(font-size, 16)
```

### breakpoint
```styl:mixins.styl
// breakpoint valiables
$screen-xs = 544px
$screen-sm = 768px
$screen-md = 992px
$screen-lg = 1200px

// breakpoint
breakpoint($bpname)
	for $name in $bpName
		if $name == 'xs'
			@media screen and (min-width: $screen-xs)
				{block}
		if $name == 'sm'
			@media screen and (min-width: $screen-sm)
				{block}
		if $name == 'md'
			@media screen and (min-width: $screen-md)
				{block}
		if $name == 'lg'
			@media screen and (min-width: $screen-lg)
				{block}
		if $name == 'xs-up'
			@media screen and (max-width: $screen-xs)
				{block}
		if $name == 'sm-up'
			@media screen and (max-width: $screen-sm)
				{block}
		if $name == 'md-up'
			@media screen and (max-width: $screen-md)
				{block}
		if $name == 'lg-up'
			@media screen and (max-width: $screen-lg)
				{block}
```

#### usage
```styl
.box
	width 100px
	+breakpoint(xs)
		width 150px
	+breakpoint(sm)
		width 200px
	+breakpoint(md)
		width 300px
	+breakpoint(lg)
		width 700px
```
自作したframeworkをimportできるのにクラスを呼び出そうとするとModule has no member

#importはできるのに関数を呼び出そうとするとModule has no member

importは成功するのに、フレームワーク内に定義したクラスを呼び出せないという自分にとっては訳の分からぬ謎の事態になりました。

あれこれ模索してるうちに、解決策が見えてきましたので備忘録がてら書き残しておきます。雑に書いてますが、最新の状況があまり無いですし

自分みたいにXcodeに関して一知半解のまま開発を進めていると、壮大にハマります。

この機会にXcodeの「設定周辺」の知識も深めようと思いました



#時系列

```
1, cocoa touch frameworkでフレームワークを自作

　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　↓

2, single view applicationでプロジェクトを立ち上げる

　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　↓

3,フレームワークをプロジェクトにドロップアンドドラッグ

               ↓

4,ドロップアンドドラッグframework名をimport

               ↓

5,読み込まれる（成功）

               ↓

6,framework内で自作したクラスを呼び出す

               ↓

7,失敗.... orz
```

#原因

私の場合の原因は、Xcodeの設定にありました。私自身、これを書きながら学んでいますので手探りですし分かりやすく説明できず、すみません

下記の画像はcocoa touch frameworkで作成した自作frameworkのプロジェクトですがbuild phaseの設定で、しっかりソースを追加しないと、frameworkを呼び出す側のプロジェクトがソースを見れません。

compile sources や link binary with libraries や copy bundle resources 、自分もまだよくわかってませんが、ここら辺をちゃんとやるべきです

<img width="1020" alt="スクリーンショット 2017-01-06 15.56.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/135794/185fe252-1b8a-32de-4ca3-96576035897e.png">

#成功するとframeworkに定義したクラスを呼び出せる

成功すると、下記画像のようにimportでlampfremeを読み込み、自作したlampfreme内にはクラスが定義されていて、しっかり読み込めます

<img width="929" alt="スクリーンショット 2017-01-06 16.20.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/135794/e19b2c55-d1bf-74e8-c3d4-421219fee605.png">