OmniAICreator/Qiita-1.07M huggingface dataset:
scriptでキーフレームを打つ時の計算式（時間で設定する）

混乱する時があるのでメモ用ですみません・・・

目標の時間/コンポジションフレームレート*100
ただし1秒になった場合1秒は0.30になる。
もし１秒20の場所なら
0.50になる。

他の方法を知っている方、教えてください。

```js
//初期設定
var total=100;
var fc=2.3;
var fl=30;//frame rate
var adComp=app.project.items.addComp("test",1920,1080,1.0,fc,fl);

//textLayer
var text=adComp.layers.addText("alive");

//scall_null_object
var scall_Null=adComp.layers.addNull();

//平面レイヤー作成（optical Flares）
var optical=adComp.layers.addSolid([1,0,0], "opticalFlares", adComp.width,adComp.height,adComp.pixelAspect);
optical.property("ADBE Effect Parade").addProperty("VIDEOCOPILOT OpticalFlares");

//調整レイヤー作成（controll）
var controlLayer = adComp.layers.addSolid([1,1,1],'control', adComp.width,adComp.height,adComp.pixelAspect);
controlLayer.adjustmentLayer = true;
controlLayer.property("ADBE Effect Parade").addProperty("tc Shine");
controlLayer.property("ADBE Effect Parade").addProperty("ADBE Turbulent Displace");

//Shine
    var shine=controlLayer.property("ADBE Effect Parade").property("tc Shine");
    //Ray Length
    var RayLength=shine.property("tc Shine-0002");
    RayLength.addKey(0);
    RayLength.addKey(0.10/fl*100);
    RayLength.addKey(0.20/fl*100);
    RayLength.setValueAtKey(1,80);
    RayLength.setValueAtKey(2,2.2);
    RayLength.setValueAtKey(3,0.4);
    //Boost Light
    var BoostLight=shine.property("tc Shine-0003").setValue(15.6);

//Turbulent Displace
var turbD=controlLayer.property("ADBE Effect Parade").property("ADBE Turbulent Displace");
//amount (量)
var tdAmount=turbD.property("ADBE Turbulent Displace-0002");
tdAmount.addKey(0);
tdAmount.addKey(0.15/fl*100);
tdAmount.addKey(0.20/fl*100);
```
[Xcode][warning] Trailing Semicolon Violation:セミコロンの違反

##Trailing Semicolon Violation:
Lines should not have trailing semicolons.
Trailing Semicolon (trailing_semicolon):

※ ##数字

SwiftLintを用いるとこちらのエラーが出てきます。

##直訳する
セミコロンの違反:
線は、引いているセミコロンを持っていてはいけません。
引いているセミコロン（trailing_semicolon）：


##つまり
セミコロン使うなということですね

プログラミングといえばセミコロンの概念があった分よくやっちゃいます。

関連ワード
・[XCode warning](http://qiita.com/drafts/af298e03286732343439) - XCode 警告
・[SwiftLint](http://qiita.com/ushisantoasobu/items/b494c9cf7d78a968b373) — Swift コードの品質チェックツール

・ライブラリー関数

随時、変更記事、体裁を整えていきます。

---

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
Vagrant Shareが重すぎるのですが解決策はありませんか？

これは「コードを書いていて困ったときに、suinがチャットで質問に答えたり相談に乗る[suinのプログラミング相談室(仮)](https://help.suin.io/)」で頂いた質問と僕の回答の要約です。

## 質問

Vagrantで構築したローカル環境をVagrant Shareでデモしたいのですが、読み込みが遅く接続が切れます。解決策があれば教えてください。

※Vagrant Shareとは、インターネット経由でVagrantのローカル開発環境へのHTTP接続やSSH接続をできるようにする機能。構築中のサイトのデモをインターネット越しに行うときに便利。

* [Vagrant Share - Vagrant by HashiCorp](https://www.vagrantup.com/docs/share/)
* [Vagrant ShareでVagrant環境をインターネット上へ公開する - Qiita](http://qiita.com/mmmm/items/1f70e7c9d8771f0d939a)
* [Vagrant Share が便利すぎる話 - Qiita](http://qiita.com/DesignChips/items/6f06e51efd8a2fe9acc9)

## suinの回答

Vagrant Shareを使った経験がないのと、英語圏の情報も調べてみましたが、問題を解決する方法は分かりませんでした。

代替策として、ngrokを使ってみてはどうでしょうか？ ngrokはVagrant Shareと似たもので、ローカル環境のWebサーバをインターネット越しで公開できる無料でも使えるツールです。

* [ngrokを使用してローカル環境を外部に公開する - Qiita](http://qiita.com/kitaro729/items/44214f9f81d3ebda58bd)
* [テストサーバーへのアップが面倒なときはngrokでローカル環境を外部公開してみよう | 株式会社LIG](https://liginc.co.jp/web/programming/156484)

## 回答に対しての反応

ngrokは初めて知りました。ngrokでやりたいことができました。大変助かりました！調査もありがとうございました。
WordPressのテスト環境をローカルに作る

本番環境などで動作済みのサイトのテスト環境をローカルに作る方法（Mac）

# 必要ソフト
MAMP
https://www.mamp.info/en/

# 手順
## 本番環境からファイルをダウンロードする
下記のファイルをダウンロードする
・FTPよりサーバーに上がっているファイル一式をダウンロードする
・PhpMyAdminよりDB一式をエクスポートする
（DBダウンロードは「DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER コマンドを追加する」の項目にチェックを入れる。）


## MAMPを設定する
1.MAMPをダウンロードし、インストールする。
2.次にセキュリティを高めるため、「MAMP＞conf>apache>httpd.conf」ファイルの下記の部分を変更する

変更前

```
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
```
変更後

```
# Controls who can get stuff from this server.
#
# Order allow,deny
# Allow from all
#
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from localhost
Allow from 192.168
```

3.アプリを起動し、画面内の「Preferences...＞Ports」で「Set Web & MySQL Ports to 80 &3306」をクリックしPortsを変更する

## DBのインポート
1.MAMPのPhpMyAdminにエクスポートした名称と同じDBを作成する
http://localhost/phpmyadmin/

2.作成したDBにエクスポートしたDBをインポートする
3.作成したDB内のoptionテーブルを検索し、以前のURL（http://xxxxx.xxx）をhttp://localhost/に変更する

## ローカルファイルの参照先をローカルのDBに変更
ダウンロードしたwordpress内のwp-config.phpの記述を下記のように変更する

```
/** MySQL データベースのユーザー名 */
define('DB_USER', 'root');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'root');

/** MySQL のホスト名 */
define('DB_HOST', 'localhost');

/** データベースのテーブルを作成する際のデータベースの文字セット */
define('DB_CHARSET', 'utf8mb4');

/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', '');
```

## サーバーを立ち上げる

1.アプリを起動し、画面内の「Preferences...＞Web Server」で「Document Root」をLocalのWordPressのフォルダに設定する
2.Localhostを立ち上げる
http://localhost/

以上
Google スプレッドシートからTwitter投稿 botの作り方


## 実装準備
### スプレッドシートとスクリプトエディタの作成
1. 新規スプレッドシートを作成します。
2. [ツール]→[スクリプト エディタ ...]からスクリプト エディタを起動して、新規gsファイルを作成します。
3. スクリプト エディタのURL `https://script.google.com/macros/d/ {PROJECT KEY}`の PROJECT KEYを控えておきます。
            URLの/edit?以降は含めません。


![スクリーンショット 2017-06-08 10.37.49.png](https://qiita-image-store.s3.amazonaws.com/0/168714/5bdb8497-a196-c042-7873-b4340e992ddb.png)
![スクリーンショット 2017-06-08 10.42.21.png](https://qiita-image-store.s3.amazonaws.com/0/168714/cd020ad6-945c-6597-c945-9f9580549689.png)


### Twitter Developers 登録
1. [My apps]を選択して、Twitter Developersから新規アプリケーションを登録します。
![スクリーンショット 2017-06-08 10.53.53.png](https://qiita-image-store.s3.amazonaws.com/0/168714/27e08c16-b412-a951-897d-da5bc3b46865.png)
2. [Create New App]を選択し、各項目を入力して[Create your Twitter application]を選択します。
    1. Name：アプリケーションの名前（取り敢えず適当で良い）
    2. Description：アプリケーションの説明（取り敢えず適当で良い）
    3. Website：アプリケーションを動作させるWebサイトのURL
    4. CallbackURL： ` https://script.google.com/macros/d/ {PROJECT KEY} /usercallback ` を入力します。

![スクリーンショット 2017-06-08 10.56.07.png](https://qiita-image-store.s3.amazonaws.com/0/168714/79e74d0a-5920-0773-67e6-df1b427b9132.png)
3. 以下が表示されたら、Twitterアプリの作成が成功です。
![スクリーンショット 2017-06-08 11.06.51.png](https://qiita-image-store.s3.amazonaws.com/0/168714/28eab132-d7be-342c-c588-b3bf40103348.png)
4. 上メニューの[Keys and Access Tokens]を選択し、下の方にアクセストークンの箇所がある
           デフォルトでアクセストークンが設定されていないため、[Create my access token]を選択して作成する
5. 上メニューの[Permissions]で権限を変更出来ます。今回はtwitterと連携してTweetするだけなので、[Read and Write]を選択します(デフォルトで指定されている)。
![スクリーンショット 2017-06-08 11.16.33.png](https://qiita-image-store.s3.amazonaws.com/0/168714/ac849e25-7fa5-8a42-26d9-cae5f484e408.png)


### ライブラリ追加
1. スクリプト エディタに戻り、[リソース]→[ライブラリ...]からライブラリに `Mb2Vpd5nfD3Pz-_a-39Q4VfxhMjh3Sh48` を追加します。
2. バージョンを指定して保存します。

![スクリーンショット 2017-06-08 12.00.58.png](https://qiita-image-store.s3.amazonaws.com/0/168714/7a7bf6c2-b3e5-2f6c-8969-9b3ade9f4b81.png)

## コード実装
1. [参照ページ](https://kijtra.com/article/twitter-api-for-google-apps-script-without-oauthconfig/)のコードをエディタに記入して、以下の部分を自分のKeyに変更します。

    1.Project Key はスクリプトエディタの[ファイル]→[プロジェクトのプロパティ]を選択し、プロジェクトキーをコピーします。
    2.consumer Keyと consumer Secret はtwitterのApplication Managementの[Keys and Access Tokens]からそれぞれコピーします。
 

![スクリーンショット 2017-06-08 12.09.08.png](https://qiita-image-store.s3.amazonaws.com/0/168714/23702bf5-4d7c-468a-1a8a-0b8441cd5536.png)
2.  [実行]→[twitterAuthorizeUrl]でtwitterAuthorizeUrl関数を実行して認証を行います。
3.  [表示]→[ログ]から認証用URLが表示されるので、ブラウザでURLを開きます。
    以下の画面が出てきたら[連携アプリを認証]を選択する。authCallback処理が行われ、タイムラインの取得やツイートの投稿が可能になります。

![スクリーンショット 2017-06-08 11.33.19.png](https://qiita-image-store.s3.amazonaws.com/0/168714/77fe2bb3-b197-e1c6-834b-1559dc13b637.png)
4. [参考ページ](http://excel-ubara.com/apps_script2/GAS202.html)のツイートのテストやbotの作成を実施してみましょう。

以上でスプレッドシートのデータを定期的に発信出来るtwitterのbotを作成することが出来ます。


## 参考
http://yoshiyuki-hirano.hatenablog.jp/entry/2015/10/13/010317
http://wplogs.com/twitter-apps/
https://kijtra.com/article/twitter-api-for-google-apps-script-without-oauthconfig/
公式ドキュメント
https://developers.google.com/apps-script/reference/calendar/
JavaScriptでISO8601→UNIXタイムスタンプ

こんなかんじで

```js
new Date(ISO_TIME).getTime() / 1000
```

## 確認環境
```
>node -v
v7.4.0
```


## Node.js のサンプル

```js:ISOtoUNIX.js
'use strict'

let iso = '2017-06-08T02:09:54Z';
console.log('isotime: ' + iso);

let ts =  new Date(iso).getTime() / 1000;
console.log('unixts: ' + ts);
```

## 実行結果

```
>node ISOtoUNIX.js.js
isotime: 2017-06-08T02:09:54Z
unixts: 1496887794
```
parsec の開発環境の作り方

# parsec の開発の仕方

[parsec - Access Galaxy at the speed of light with automatically generated BioBlend wrappers](https://github.com/galaxy-iuc/parsec)

git clone
make


以下の内容をつくる

```python:parsecmain.py
#!/usr/local/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from parsec.cli import parsec

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(parsec())
```

起動

```
python parsecmain.py
```
この記事には問題があります

「Qiitaごみだらけだ」というタイトルだったのですが「あんたの記事はゴミ」に変更しました[^purpose]。
[^purpose]: この記事からゴミ記事にリンクすることで、「あんたの記事はゴミ からリンクされています」と表示されることを狙います。

「あんたの記事はゴミ」というタイトルだったのですが「この記事には問題があります」に変更しました[^staff]。
[^staff]: 「"あんたの記事はゴミ"は不適切な内容が含まれていたため、スタッフにより限定共有化されました。 利用規約をご確認の上、 内容を修正して公開していただきますようお願いいたします。」でスタッフ曰く、「他者の人格を攻撃する内容が含まれていると判断し」。「タイトルの「あんたの記事はゴミ」という表現が該当するものと考えております」とのこと。

# あんたの記事はゴミ

:shit::shit::shit::shit::shit: :-1: ゴミそうじしたい。うんこはちゃんと流そう。
どこがゴミなのか。
価値を生んでいないものは価値がないのである[^value]。 検索でノイズが引っかかって迷惑なのである。
以下に該当してるでしょ。リストアップしてくよ。みんなも編集リクエストつけてね。

[^value]: なにいってんだこいつ

### マニュアルの劣化コピー

それ本家のマニュアルに書いてあるまんまじゃない? せめて限定共有にしてくれ。せめて新規記事じゃなくて「つくれぽ」にしてくれ。
「自分用メモ」っていうタグを作って、それを検索に引っかからないようにすればいいのに(と思ったらすでにそのタグがあったのでそこはさすがだ)[^tagSynonyms]。
[^tagSynonyms]: しかし…… 「個人用メモ」「個人的なメモ」「個人メモ」「自分用メモ」うわあぁぁ。「タグシノニム」の実装が求められる。

他の人がタグつけることってできないもんかな。編集リクエストするしかないか[^tagGather]?
[^tagGather]: タグの名寄せってできないものか? 「関連するタグ」とかでグルーピングするとか。 はっこれはもしや特許的アイデアかも

### 別の記事と内容が重複してる

 OpenSSL あたりに多く観測している。「お勧めツール」とかも単発の記事が多め。

 - [仕事でつかっているツール群（Windows）](http://qiita.com/matobaa/items/8e41a91473aa8a9c6089): 単発の記事じゃなくて、他の記事と有機的につながっていれば価値がでると思う

### 内容が間違ってる
 
WELQ事件で学んでないのですか。逆SEOしてるなら、まあ許容範囲か。

 - [Qiitaで何があったのか](https://anond.hatelabo.jp/20150127003906): 関数型言語界隈で起こっていたこと。

### S/Nが低い

ほかのページへのリンクだけだったり。それGoogle検索から来た人に価値を提供できてる?
 - [Markdown記法　チートシート集](https://qiita.com/spe_hari/items/6a67e17e12e8874ee202)

### 時間の無駄


 - [「ゴミ記事が多すぎる問題」に対する私見](https://qiita.com/akira_/items/c8881dcde93d4cb035c7): 私見とかQiitaに要らないから
 - [この記事には問題があります](http://qiita.com/matobaa/items/243792c01db32b77ada6): 私見とかQiitaに要らないから

### おすすめできない

 - [新卒エンジニアでもできる！コメントアウトで同期に差をつける裏技](http://qiita.com/Bong/items/436a09e65717c7ded744): どうみてもバッドノウハウです
 - ~~[あっと驚かせるJavaプログラミング](x-http://qiita.com/tatesuke/items/36924274f043f37a391f): 皮肉だったらそう明示しないと~~ 明示していただきました。ありがとうございます。

## マナー違反
 - そのときの流行りとかに無理に乗っかってる
 - [うんこうんこ言ってる記事](http://qiita.com/matobaa/items/243792c01db32b77ada6): 内容がない模様。[Qiita利用規約 第8条(禁止事項)](http://qiita.com/terms)「侮辱行為」「低俗、有害、下品な行為、他人に嫌悪感を与える」「迷惑行為」に抵触している可能性がある。

## もう何も言えない
 - ~~http://qiita.com/UWControl/items/d53814cdbf344f0c58ea
負のオーラしかない~~ 見えなくなった。運営に限定共有にされたか!? あるいは自ら削除したか?

# いい記事ってどんなの
(そんな記事があったような気がするので見つけたら編集リクエストください)

 - [よくないね](http://qiita.com/mzyy94/items/1c06b4239412894753da): きちんと主張がある内容は、消しちゃいけないと思うんだ。

# じゃあどうすればいいの

1. 書き直す。
2. 消す
3. 隠す
4. (ほかには?)

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">なるほど、Qiitaにdownvoteがないのは「編集リクエストで記事を育てていって欲しい」という理由なのか <a href="https://twitter.com/hashtag/workq?src=hash">#workq</a></p>&mdash; Yohei Yasukawa (@yasulab) <a href="https://twitter.com/yasulab/status/879306479529992192">2017年6月26日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

----
kerasのpad_sequencesを使うときはdtypeを指定しなければいけない理由

## kerasのpad_sequencesとは

各ベクトルの長さが揃っていないとき、0をつけたすorカットすることで同じ長さに揃えるためのメソッドです。

例えば・・・

```
>>> from keras.preprocessing import sequence
>>> import numpy as np
>>> data = [np.array([[1,2,3],[4,5,6]]),
...         np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]])]
>>> data
[array([[1, 2, 3],
       [4, 5, 6]]), array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12],
       [13, 14, 15]])]
>>> #長さを4に揃える。
>>> data = sequence.pad_sequences(data, maxlen=4,padding="post", truncating="post")
>>> data
array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 0,  0,  0],
        [ 0,  0,  0]],

       [[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9],
        [10, 11, 12]]], dtype=int32)
```

## dtypeを指定しなければいけない理由

dtypeを指定しない場合、デフォルトではint32の値が返ってきます。

そうすると、**もとのdataに浮動小数点があった場合、強制的にint32に変換されてしまいます**。

例えば0.1は0になってしまいます。

↓dtypeを指定しなかった場合

```
>>> from keras.preprocessing import sequence
>>> import numpy as np
>>> # float混じりのdata
>>> data = [np.array([[0.1,0.2,0.3],[0.4,0.5,0.6]]),
...         np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]])]
>>> data
[array([[0.1, 0.2, 0.3],
       [0.4, 0.5, 0.6]]), array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12],
       [13, 14, 15]])]
>>> # 長さを4に揃える。
>>> data = sequence.pad_sequences(data, maxlen=4,padding="post", truncating="post")
>>> # floatだった値がint32に自動でcastされ、0になってしまう
>>> data
array([[[ 0,  0,  0],
        [ 0,  0,  0],
        [ 0,  0,  0],
        [ 0,  0,  0]],

       [[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9],
        [10, 11, 12]]], dtype=int32)
```

## 結論

pad_sequencesを使うときはdtypeを指定しましょう。

```
sequence.pad_sequences(data, maxlen=4, padding="post", 
truncating="post", dtype=float32)
```
[Xcode][warning] Vertical Whitespace Violation:循環的複雑度の違反

##Vertical Whitespace Violation:
Limit vertical whitespace to a single empty line. Currently ##. (vertical_whitespace)

SwiftLintを用いるとこちらのエラーが出てきます。

##直訳する
縦空白文字の違反:
垂直空白文字を一つの空の線に制限してください。
現在##。(縦空白文字)

##つまり
無駄な行を増やすなってことですね。

## 関連ワード
・[XCode warning](http://qiita.com/drafts/af298e03286732343439) - XCode 警告
・[SwiftLint](http://qiita.com/ushisantoasobu/items/b494c9cf7d78a968b373) — Swift コードの品質チェックツール

・ライブラリー関数

随時、変更記事、体裁を整えていきます。

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
埋め込まれたStructのプロパティの扱い

golangには継承ではなく、埋め込み（embed）という概念がある
PHPで言うと、プロパティに他のクラスを持つようなイメージ、決して`trait`や`extends`ではない。

それがよく分かるのが、埋め込まれたStructのプロパティの扱い方である
Structを生成する時に、埋め込まれたStructのプロパティに値を代入したい場合、埋め込まれたStructを指定して代入しなければならない。

``` go
type (
    SalesPerson struct {
        Person // embedded struct
        PhoneNumber int
    }

    Person struct {
        Name string
    }
)

func main() {
    s := SalesPerson{
        Person: Person{Name: "山田　太郎"},
    }
    fmt.Println(s.Name)

}
```

下記はエラーとなる

``` go
func main() {
    // Error: unknown field 'Name'
    s := SalesPerson{
        Name: "山田　太郎",
    }
    fmt.Println(s.Name)
}
```
Webサーバ構築メモ(arch linux)

# WebサーバにPHPの設定
apacheを使用
`$ apachectl -v
Server version: Apache/2.4.25 (Unix)`

必要なパッケージ
<ul><li>php</li><li>php-apache</li></ul>

設定
<ul> <li>httpd.conf
以下の行を追加
`LoadModule php7_module modules/libphp7.so
Include conf/extra/php7_module.conf`
以下の行をコメントアウト
`\#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
\#LoadModule mpm_event_module modules/mod_mpm_event.so`</li></ul>
[Xcode][warning][error]まとめ

#Xcode [warning] / [error] まとめ

##A
##B
##C
[Comma spacing violation:](http://qiita.com/sunstripe/items/18602840c8e1b39aba28) - コンマ間隔違反 
[Cyclomatic Complexity Violation:](http://qiita.com/sunstripe/items/4e2f671d4cce391cd447) - 循環的複雑度の違反
Call can throw, but it is not marked with 'try' and the error is not handled

##D
### [Development Team in the build settings editor warning:]

warning: Capabilities for 'ProjectFile' may not function correctly because its entitlements use a placeholder team ID. To resolve this, select a development team in the build settings editor. (in target 'ProjectFile')

Build Settingsの画面で、右上で検索が可能
「team」で検索すると「Development Team」が表示されるので、何か入力するとコンパイル時の警告表示は消えます。

##E
##F
##G
##H
##I
##J
##K
--
##L
##M
##N
##O
##P
##Q
##R

##S
### [SWIFT_VERSION '3.0' is unsupported error:]
error: SWIFT_VERSION '3.0' is unsupported, supported versions are: 4.0, 4.2, 5.0. (in target 'Class Name')
--
'Class Name' クラスが SWIFT_VERSION '3.0' に対応してません

##T
[Trailing Semicolon Violation:](http://qiita.com/sunstripe/items/848f0174332f081a167e) - セミコロンの違反
##U
##V
[Vertical Whitespace Violation:](http://qiita.com/sunstripe/items/589c0e3e5c948dc216f4) - 縦空白文字違反
##W
##X
##Y
##Z


関連ワード
・XCode error - XCode エラー
・[XCode warning](http://qiita.com/drafts/af298e03286732343439) - XCode 警告

随時、変更記事、体裁を整えていきます。

---

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
[Xcode][warning] Cyclomatic Complexity Violation:循環的複雑度の違反

##Cyclomatic Complexity Violation:
Function should have complexity 10 or less: currently complexity equals ## (cyclomatic_complexity)
※ ##数字

SwiftLintを用いるとこちらのエラーが出てきます。

##直訳する
循環的複雑度の違反:
機能は、複雑さ10以下を持たなければなりません：
現在、複雑さは##に等しいです。

Cyclomatic complexity
循環的複雑度（英: Cyclomatic complexity）とは、ソフトウェア測定法の一種である。

##つまり
コード長いから整理しろというエラー。

関連ワード
・[XCode warning](http://qiita.com/drafts/af298e03286732343439) - XCode 警告
・[SwiftLint](http://qiita.com/ushisantoasobu/items/b494c9cf7d78a968b373) — Swift コードの品質チェックツール

・ライブラリー関数

随時、変更記事、体裁を整えていきます。
---

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
Doma利用時にエラー[DOMA4019]が発生したときの対処法

EclipseでDoma利用時に以下のエラーが出る事があります。
少しハマったので対処法を共有します。

## エラー内容
```
[DOMA4019] ファイル[META-INF/jp/.../selectById.sql]がクラスパスから見つかりませんでした。
```
上記エラーはビルドパスにSQLファイルが含まれていないために発生します。
Mavanプロジェクトのデフォルト設定のままだと、除外する設定になっているようです。

## 対処法：ビルドパスを修正してSQLファイルを含める
デフォルトのビルドパス設定ではSQLファイルが除外対象になっています。
{project}/src/main/resourcesのExcludedを選択し、Editボタンを押下します。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f34313536392f33343830306434332d306464322d386339342d353065312d3534646165343364396239382e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/41569/97c73171-cbed-a3c5-82cc-868833f50613.png)

Exclusion Patternsから ** を選択し、Removeボタンを押下。
![Inclusion_and_Exclusion_Patterns.png](https://qiita-image-store.s3.amazonaws.com/0/41569/ec7b95c7-0a2a-1a79-8ed6-c36644bc0453.png)
OpenSSLでよく使うコマンド

# 概要
## 前提条件
- SSLサーバ証明書の発行にあたり、必要なコマンドをまとめます。
- 作成した内容が正しいか等、要所要所で確認を行うためのコマンドをまとめます。
- SSLサーバ証明書は外部のCA局(Certificate Authority)で発行してもらうこととします。自己署名証明書（≒オレオレ証明書）は利用しません。
- 「SSLサーバ証明書」という語で、Internet上で公開するWebサーバにインストールするX.509準拠の証明書、を指すこととします。プロトコルとしてのSSLは既に利用されていませんが、慣習上からこう呼ぶことにします。
- 「SSLサーバ証明書」を、単に「証明書」と記述することもあります。

## 重要な知識
- CSR(Certificate Signing Request)は大きく二つの要素、「サーバの公開鍵」及び「サーバ運営者の情報」で構成されています。
- SSLサーバ証明書とは、CSRに対してCA局の電子署名を付与したものとなります。
- 原則、CA局の秘密鍵が分からない限り、SSLサーバ証明書の内容を改ざんすることは出来ません。
- 鍵ペアという観点から見ると、秘密鍵は秘密鍵ファイルに、公開鍵はCSRファイル／証明書ファイルに記録されます。
- ファイルに保存する際の形式・拡張子については下記記事がとても参考になります。この内容は必ず押さえておきましょう。
- http://qiita.com/kunichiko/items/12cbccaadcbf41c72735
- Modulusとは、簡単に言うと公開鍵・秘密鍵の積です。

## 想定するフロー
下記のフローに則る形で、OpenSSLの各コマンドを記述します。

1. 秘密鍵とCSRを作成します。
2. CSRの内容を確認します。
3. 鍵の対称性を確認します。
4. 秘密鍵が破損していないことを確認します。
5. CA局に発行してもらったSSLサーバ証明書の内容を確認します。


# OpenSSLコマンド
## CSR・秘密鍵新規作成
```
$ openssl req -newkey rsa:2048 -keyout encrypted_privkey.pem -rand file:/dev/urandom
```
秘密鍵を併せて新規に作成し、「encrypted_privkey.pem」として保存します。
ランダムシードとして、「/dev/urandom」を利用します。
作成されたCSRは、標準出力に出力されます。


## CSR内容確認
```
$ openssl req -in csr_filename.pem -text -noout
```
作成したCSRが正しいかどうかを確認します。通常は下記の項目を確認します。
これは、Webサーバにアクセスしてきたクライアントにて、当該サーバ証明書が妥当なものかどうかをチェックする情報となります。
具体的には、アクセス先のドメイン名とSSLサーバ証明書のドメイン名が一致しているかを確認するための情報となります。
- Subject: CN=example.com
- X509v3 extensions: X509v3 Subject Alternative Name: DNS:example.com


## 秘密鍵パスフレーズ解除
```
$ openssl rsa -in encrypted_privatekey.pem > decrypted_privatekey.pem
```
通常は、秘密鍵をWebサーバにインストールする場合、秘密鍵ファイルのパスフレーズは解除しておきます。
パスフレーズが分からない場合、Webサーバは秘密鍵の内容を取得できないためです。


## CSR／証明書と秘密鍵の対称性確認(Modulusの確認)
公開鍵となるCSR／証明書と、秘密鍵が一致しているかどうかは、Modulusという値を確認することで判断することが出来ます。
CSR／証明書と、秘密鍵のModulusが一致すれば、その両者はペアであるということが言えます。

### CSRのModulusを確認
```
$ openssl req -in csr_filename.pem -modulus -noout
```

### SSLサーバ証明書のModulusを確認
```
$ openssl x509 -in cert_filename.pem -modulus -noout
```

### 秘密鍵のModulusを確認
```
$ openssl rsa -in decrypted_privatekey.pem -modulus -noout
```


## 秘密鍵が破損していないことの確認
```
$ openssl rsa -in decrypted_privatekey.pem -check -noout
```


## SSL証明書内容確認
```
$ openssl x509 -in cert_filename.pem -text -noout
```
これもCSRと同様、まずは下記の項目を確認します。
クライアントとなるWebブラウザにて、アクセスしたドメイン名と一致しているかどうかの確認に利用されます。

- Subject: CN=example.com
- X509v3 extensions: X509v3 Subject Alternative Name: DNS:example.com


また、Subjectは基本的にはWebサーバの運営者情報となります。
これはアクセスしたユーザ（＝人間）が必要に応じて参照し、信頼できる組織がWebサーバを運営しているかどうかを判断するための情報となります。
EV SSL証明書の場合、アドレスバーの横に運営組織名が表示されますが、これは「O」の内容が利用されます。

- Subject: C=JP, ST=Tokyo, L=Taito-ku, OU=Business Innovation Center, O=Tech Fun corp., CN=example.com
Mac / Alfred | クリップボードからスニペットに直接登録する ( Command + S )

# クリップボードを開いて

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/b00086ac-ee70-108d-68ff-b6f0f6772bb8.png)

# 好きなものを選んで `Command + S`

スニペット登録モードになる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/e56de014-5047-8947-1cd8-759aa8b0d60f.png)

# `Command+S` で保存

# 結果

登録された。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/b30dd624-ccf5-12e7-586b-48c4d8e7b851.png)

# 参考

- [Clipboard History - Alfred Help and Support](https://www.alfredapp.com/help/features/clipboard/#snippets)

# 環境

- Alfred 3
- Mac OS Sierra 10.12.4








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Railsのモデル検索の理解を深める

#概要
データベースからのデータを引っ張って来るところで理解が足りていなかったので、色々読み物をしてみる

#メモ

- find

Primarykeyで検索する。

```
User.find(1)
=> SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
```

複数を検索することも可能

```
User.find([1,2,3]) 
=> SELECT `users`.* FROM `users` WHERE `users`.`id` IN (1, 2, 3)
```

- find_by
条件に会ったレコードの中から1件だけ取得してくる。
id指定

```
User.find_by(id: 1)
=> SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
```

```
User.find_by(name: "hoge")
=> SELECT `users`.* FROM `users` WHERE `users`.`name` = 'hoge' LIMIT 1

Record.where(timein: Time.zone.now.all_day)
```

- where
条件にあったレコード全てを取得してくる。

```
User.where(name: "hoge")
=> SELECT `users`.* FROM `users` WHERE `users`.`name` = 'hoge'
```

AND検索
whereを並べる感じ。

```
User.where(name: "hoge").where(id: 1)
=> SELECT `users`.* FROM `users` WHERE `users`.`name` = 'hoge' AND `users`.`id` = 1
```

OR検索
~~下記の例をみると、んー。。。って感じなので実際にwhereのOR検索を使いたくなった時にもう少し調べようと思う。~~

```
#Rails4

id1 = 1
id2 = 2
User.where("id IN (?) OR id IN (?) " , id1, id2)
=> SELECT `users`.* FROM `users` WHERE (id IN (1) OR id IN (2));
```

指摘をいただいたので修正。Rails5ではOR検索は下記のように記述する。

```
#Rails5

User.where(id: 1).or(User.where(id: 2))
```

#参考資料
[Railsのモデル検索あれこれ](http://qiita.com/tono0123/items/576a4a4659b51860f304)
[今から知っておきたいRails 5の新機能・変更点](http://qiita.com/ryohashimoto/items/09724ad4dddcda01bce3)
PythonでWebサーバのログから一日分の毎秒ヒット数を集計

# 作った理由
とある日の一日分の毎秒アクセス数を知りたいが「uniq -c」などではアクセスがない秒は、抜けてしまっていたのでナントカしようと思った。

```hits.py
#!/usr/bin/env python
import sys

def main():
	
	dict = {}
	
	#init dict
	for hour in range(24):
		for min in range(60):
			for sec in range(60):
				hhmmdd = '%02d:%02d:%02d' % (hour, min, sec,)
				dict[hhmmdd] = 0
	
	
	#read stdin
	for line in sys.stdin:
		text = line.rstrip('\n')
		dict[text] = dict[text] + 1
	
	
	#print hit/s
	for hour in range(24):
		for min in range(60):
			for sec in range(60):
				hhmmdd = '%02d:%02d:%02d' % (hour, min, sec,)
				print '%s %d' % (hhmmdd, dict[hhmmdd])
	
	
if __name__ == '__main__':
	main()
```

# 使い方
Webサーバのログの時分秒の部分を渡す

```
$ cat /var/log/httpd/access_log | cut -d" " -f4 | cut -d":" -f2- | python hits.py
```

# 雑談
SSDの整理をしていたら、その昔ちょこちょこと作ったインチキスクリプトが出てきたのでQiitaに乗せてみました。
Apacheのログから秒間アクセス数を知りたいので「uniq -c」コマンドで集計をしたいたが、よくよく考えるとアクセスがない秒は"0"ではなく抜けてしまっていた。凄く当たり前の事だ・・・
(一日分の秒間アクセス数を集計したのに「あれ？86400行ないぞ」って気が付いたのが始まり)

というわけで、適当に作ったのが以下のスクリプトです。
なかなか雑だけど、スグできたのを思い出した。
PHP 都道府県 漁船登録番号連想配列データ

## はじめに
日本地図をシンボルフォントで扱うことができる[Prefectly](http://deform.jp/prefectly/)では、
各都道府県のクラスが[漁船登録番号](https://ja.wikipedia.org/wiki/%E6%BC%81%E8%88%B9#.E6.BC.81.E8.88.B9.E7.99.BB.E9.8C.B2.E7.95.AA.E5.8F.B7)となっている。


コピペできる都道府県番号と都道府県名の連想配列はWEB上にたくさん転がっているが、
漁船登録番号が値となっているものは見つからなかったので置いておく。

ちなみに[Prefectly](http://deform.jp/prefectly/)は都道府県をフォントとして扱うため、
D3.jsあたりと比較して非常に簡単にデータビジュアライズできるのでオススメ。

## 都道府県番号と漁船登録番号の連想配列

```php
[
    1 => 'hk',
    2 => 'am',
    3 => 'it',
    4 => 'mg',
    5 => 'at',
    6 => 'ym',
    7 => 'fs',
    8 => 'ig',
    9 => 'tg',
    10 => 'gm',
    11 => 'st',
    12 => 'cb',
    13 => 'tk',
    14 => 'kn',
    15 => 'ng',
    16 => 'ty',
    17 => 'ik',
    18 => 'fk',
    19 => 'yn',
    20 => 'nn',
    21 => 'gf',
    22 => 'so',
    23 => 'ac',
    24 => 'me',
    25 => 'sg',
    26 => 'kt',
    27 => 'os',
    28 => 'hg',
    29 => 'nr',
    30 => 'wk',
    31 => 'tt',
    32 => 'sn',
    33 => 'oy',
    34 => 'hs',
    35 => 'yg',
    36 => 'to',
    37 => 'ka',
    38 => 'eh',
    39 => 'ko',
    40 => 'fo',
    41 => 'sa',
    42 => 'ns',
    43 => 'km',
    44 => 'ot',
    45 => 'mz',
    46 => 'kg',
    47 => 'on',
],
```

## 都道府県番号と都道府県名の連想配列
n番煎じではあるが、こちらも貼っておく。

```php
[
    1 => '北海道',
    2 => '青森県',
    3 => '岩手県',
    4 => '宮城県',
    5 => '秋田県',
    6 => '山形県',
    7 => '福島県',
    8 => '茨城県',
    9 => '栃木県',
    10 => '群馬県',
    11 => '埼玉県',
    12 => '千葉県',
    13 => '東京都',
    14 => '神奈川県',
    15 => '新潟県',
    16 => '富山県',
    17 => '石川県',
    18 => '福井県',
    19 => '山梨県',
    20 => '長野県',
    21 => '岐阜県',
    22 => '静岡県',
    23 => '愛知県',
    24 => '三重県',
    25 => '滋賀県',
    26 => '京都府',
    27 => '大阪府',
    28 => '兵庫県',
    29 => '奈良県',
    30 => '和歌山県',
    31 => '鳥取県',
    32 => '島根県',
    33 => '岡山県',
    34 => '広島県',
    35 => '山口県',
    36 => '徳島県',
    37 => '香川県',
    38 => '愛媛県',
    39 => '高知県',
    40 => '福岡県',
    41 => '佐賀県',
    42 => '長崎県',
    43 => '熊本県',
    44 => '大分県',
    45 => '宮崎県',
    46 => '鹿児島県',
    47 => '沖縄県',
]
```
MAMP ログ

あんまりMAMPって使わないけど、使った時に探したからメモ

MAMP - エラーログファイルの場所（フルパス）

・Apache
　Apacheのエラーログファイルの場所です。
```/Applications/MAMP/logs/apache_error.log 
```

・MySQL
　MySQLのエラーログファイルの場所です。
```/Applications/MAMP/logs/mysql_error_log.err 
```
・PHP
PHPのエラーログファイルの場所です。
```/Applications/MAMP/logs/php_error.log 
```

こちらのサイトに載ってました。
https://pc-karuma.net/mamp-error-file-log-full-path/
誰でもできる！ 素人がWebサイト制作時に差をつけるちょっとしたポイント

素人エンジニアの投稿です。

# 概要
- 気をつけてないと意外とやらない。
- おざなりになりやすいからこそ、他の人との差になる。
- 習慣づければ簡単にできる。
 - 自動フォーマットで出来ることはごく一部。

# 基本
- 属性値は""で囲う。
 - `width=100` → `width="100"`
- 要素名、属性名は小文字で書く。
 - `<P CLASS="SAMPLE">` → `<p class="sample">`
- 終了タグを省略できる要素も、省略せずに記述する。
 - Hamlなどを使う場合は、インデントで階層構造を作る仕様のため閉じタグは不要。 

```html:HTML
<!-- bad -->
<ul>
  <li>テキスト
  <li>テキスト
</ul>

<!-- good -->
<ul>
  <li>テキスト</li>
  <li>テキスト</li>
</ul>
```
  
- 空要素につける「/」は不要。
 - XHTMLでは文法上必須だったが、どちらでもいいことになった。
 - つけるかつけないか、どちらかに揃えるべき。

```html:HTML
<!-- この記述でも問題はない -->
<meta />
<link />
<img />
<input />
<br/>
<br />

<!-- しかし、HTML5では不要 -->
<meta>
<link>
<img>
<input>
<br>

```

# マークアップ
- h1などの見出し要素を適切に使う。
- `strong`の多用を避ける。見た目を単に太字にしたいだけならCSSで設定すれば良い。
- 見出しがマークアップできる箇所は`<section>`や`<article>`で囲う。
- 基本的に`<br>`を使わない。強制改行の必要がないマークアップにすれば良いため。
- 項目の列挙や箇条書き、一覧のようなコンテンツには`<ul>`, `<ol>`を使う。
 - 項目の順序に意味があるものはolを使う（手順など）
 - 並べ替えても読み物として成り立つものにはulを使う（買い物リストなど）
- 項目名 - 説明 の関係が連続で並ぶ箇所には`<dl>`,`<dt>`,`<dd>`を使う。
- 面倒だと思っても、body内にあるすべての要素にクラスを命名する。
 - ある要素をピンポイントで指定できることは後々にかけて便利である。 
- JSの要素取得用のクラスとCSS用のクラスを分ける。
 - JSの要素取得用クラスにはCSS設定を何も設定しない。 

# 画像表示
```html
<img src="image.png" width="100" height="30" alt="Qiita">
```

- altを入れる。
- width, heightを設定する。その際、`width="100"`のようにpxを記述しない。
 - 画像ロード前に表示領域を確保できるため、レンダリング時に起こる画面のズレが低減する。 


# CSS
- 原則としてクラスセレクタを使用する。
- idセレクタを使わない。絶対に使わない。 
- 要素セレクタ（タグセレクタ）を使わない。
- クラスセレクタの単独指定を基本とする。
 - `ul > li > a`のような指定をしない。
 - ネストした指定は状態の上書きなど、必要最低限のケースにする。
- できるだけ複雑な指定を使わない。
 - 偶数番目・奇数番目を指定する程度。 
- クラスの使い回しを避け、違うモジュールに同じ設定がある場合は、カンマ区切りで並列に書く。

```css
.module-sample,
.module-test {
  color: #FFFFFF;
  background-color: #CCCCCC;
}
``` 

- `!important`を使わない。
 - クラス単独で指定する限り、CSS設定の上書きは容易にできる。
- 要素を部分的に切り出しても、デザイン設定が適切に当たるような指定にする。
 - 移植が簡単になる。 
- 隣接セレクタ、間接セレクタを活用する。
 - リスト要素の間に罫線を引く、要素間の余白を設定する、など

```html

<ul class="list">
  <li class="item"></li>
  <li class="item"></li>
</ul>

<dl class="sample-list">
  <dt class="sample-head"></dt>
  <dd class="sample-desc"></dd>
  <dt class="sample-head"></dt>
  <dd class="sample-desc"></dd>
</dl>
```

```css
.item + .item {
  border: solid 1px #CCCCCC;
} 

.sample-head ~ .sample-head {
  margin-top: 10px;
}
```
Ansible 勉強メモ (CentOS7セットアップ #3)

Ansible 勉強メモ (CentOS7セットアップ #3)
=========================================


設定ファイルの内容を Ansible サーバ上で実行する
---------------------------------------------------
playbook を実行する前に、構築対象サーバを Ansible の hosts に追加します。

```
echo "10.210.104.24" >> /etc/ansible/hosts
```

疎通も確認しておきます。

```
ansible -m ping 10.210.104.24
```

では実際に playbook を実行したいと思います。
"ansible-playbook" コマンドに "setup_CentOS7.yaml" を渡すことで、実行できますが
今回、"setup_CentOS7.yaml" の "hosts" 宣言の箇所を、変数 "{{ hosts }}" として記載し
実行時コマンドラインから、対象ホストを渡すようにしました。

以下コマンドを Ansible サーバ上で実行し、構築をスタートします。

``` 
ansible-playbook /etc/ansible/roles/setup_CentOS7.yaml --extra-vars="hosts=10.210.104.24"
```



Ansible が 構築対象サーバへ ssh 接続を繰り返し設定ファイルの内容の操作を順次行う
------------------------------------------------------------------------------------
playbook を実行すると、以下のように設定したタスクが実行されていきます。

```
PLAY [10.210.104.24] ***********************************************************

TASK [setup] *******************************************************************
ok: [10.210.104.24]

TASK [Change hostname] *********************************************************
ok: [10.210.104.24]

TASK [Change TimeZone to Asia/Tokyo] *******************************************
changed: [10.210.104.24]

...
..
.

PLAY RECAP *********************************************************************
10.210.104.24              : ok=99   changed=87   unreachable=0    failed=0
```
(長いので以省略)

どうやら無事終了したようです。


おわりに
------------
なんとか動かせたという所までですが、行えることの自由度が高いわりに
bash スクリプトよりは秩序があり、結構いいものではないかと思いました。

コマンドレベルの手順書に落としこめている作業であれば、構築作業でなくとも
人力から置き換えられるのではないでしょうか。

ssh 許可が必要なので、Ansible サーバの配置場所は要検討ですが、
対象の環境に何かをインストールするわけではないので
要件にマッチしなくなれば、使うのをやめれば良いだけなので、気軽に始められそうな気もします。
git の status をプロンプトに出す準備

以下をコピペで実行すればよい。

プロンプトに `__git_ps1` を追加する。

```sh
wget -q -O ~/.git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
wget -q -O ~/.git-prompt.sh https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
echo '. ~/.git-prompt.sh' >> ~/.bashrc
echo '. ~/.git-completion.bash' >> ~/.bashrc
echo 'RED="\[\033[0;31m\]"' >> ~/.bashrc
echo 'LRED="\[\033[1;31m\]"' >> ~/.bashrc
echo 'BLUE="\[\033[0;34m\]"' >> ~/.bashrc
echo 'GRA="\[\033[0;37m\]"' >> ~/.bashrc
echo 'GRE="\[\033[1;32m\]"' >> ~/.bashrc
echo 'WHITE="\[\033[1;37m\]"' >> ~/.bashrc
echo 'CLEAR="\[\e[m\]"' >> ~/.bashrc
echo 'PS1="${GRE}\h$GRA@$GRE\u$GRA:\w$GRE\$(__git_ps1)$GRA\$ $WHITE"' >> ~/.bashrc
. ~/.bashrc

```
UnityでGameObject(Cube)に文字を貼り付けて一緒に動くようにする方法

#はじめに
　unity経験者にとっては簡単なことかもしれませんが、
　unity初心者であった僕にとってはQiita記事に詳しく載っておらず苦戦したので載せます。

#開発環境
　unity5.5
　unity5.6

#手順(4ステップ)
①HierarchyビューからCubeを作成<img width="1430" alt="スクリーンショット 2017-06-07 16.00.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/168759/8bd084b1-1ff3-5d04-a383-b99e882b9bf0.png">



②同じくHierarchyビューからTextを作成
<img width="1434" alt="スクリーンショット 2017-06-07 16.01.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/168759/46551101-6c31-accf-1169-68a9090e6612.png">

③CanvasのInspectorから、Render ModeをWorld Spaceに変更(←**ここがポイント**)
<img width="1434" alt="スクリーンショット 2017-06-07 16.02.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/168759/17b30237-53d2-ed11-5101-5e77cdc10380.png">

④大きさを整えてCubeの文字がくっついているように見えるポジションへとテキストを調整(←*ここで少し時間かかるかも*)し、親子関係(親：Cubeに、子：Canvasをドラッグ＆ドロップ)にすれば完成！<img width="1552" alt="スクリーンショット 2017-06-08 11.10.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/168759/fa4ab927-9e62-6fa8-871a-b32fcaeba633.png">
NoSQL(FirebaseRDB)を設計するための勉強ノート

## 設計について
今まで使っていたRDB(リレーショナル)と同じ感覚で設計するとコケたのでNoSQLについて調べることにしました。

* [Firebase Realtime DBを実践投入するにあたって考えたこと](http://qiita.com/1amageek/items/64bf85ec2cf1613cf507)

### そもそも NoSQL(Firebase Realtime DB) とは
[Qiita: Firebase Realtime Databaseとはなんなのか？](http://qiita.com/1amageek/items/b350ee5ef0c9b2406583)

要約すると

* NoSQLとはリレーショナルDBと本質が異なる
* RDB = デスクトップアプリケーション向け、NoSQL = モバイルアプリケーション向け（双方で使えないわけではない）
* RDBは厳格な一貫性（ACID）を保つことに重点を置いている
* RDBは古い昔にデザインされたデスクトップ向けの設計で、現代のモバイルアプリケーションに適していない
* ACID = Atomicity:原子性、Consistency:一貫性、Isolation:独立性、Durability:永続性
* NoSQLは可用性を重視している
* モバイルの所以は途中でネットワークが切断されても対応できるところにある
* ローカルDBとリモートDBを自動同期し続けるため、途中でオフラインになっても利用し続けられる（高可用性）
* DB全体で一時的に一貫性のない状態が発生するが、一定時間後に修復する特性を持つ（結果整合性: Eventually Consistent）
* CAP定理は場合によって `CA 分断耐性+可用性` or `AP 可用性+一貫性` の優先度（ECにおけるカートとチェックアウトなど）で切り替えていく
* CAP定理 = Consistency:一貫性、Availability:可用性、Partition Tolerance:ネットワーク分断耐性
* [CAP定理と著名サービス](http://portaltan.hatenablog.com/entry/2015/10/13/140331)
* [CAP定理の誤解](http://www.publickey1.jp/blog/13/capcap32.html)
* CAP定理を特にモバイルに最適化した結果、BASEとなる。
* BASE = Basically Available:高可用性、Soft-State:緩やかな状態、Eventually Consistent:緩やかな一貫性
* FirebaseRealtimeDB = NoSQL
* _一級市民とは？_ → [第一級オブジェクト](https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88)

### モデリング

* [NoSQLデータモデリング技法](https://gist.github.com/matope/2396234)

### 設計してみる
ポイント

* キー名は転送速度に直結するため可読性を犠牲にしてキー名を短くするなどする (name -> nm など)
* `非正規化` を意識する
iOSでPDFを表示(PDFKit)

iPhone 6をiOS11にしてみたのですが、目玉機能に非対応...
かわりに、PDFKitを使ってみました。
オリジナルのPDFビューアも作れたりするみたいですが、今回はとりあえずPDFを表示してみます。
PDFを表示するためにWebViewを使う必要がなくなります。

# 環境
* Xcode 9.0 beta (9M136h)
* iOS 11.0 (15A5278f) 

# コード

東京メトロの路線図のPDFを表示してみます。

```swift:ViewController.swift
import UIKit
import PDFKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let pdfView = PDFView(frame: view.frame)

        // Web上のPDFの場合
        let pdfURL = URL(string: "http://www.tokyometro.jp/station/common/pdf/network1.pdf")!
        // ローカルのPDFの場合
        let pdfURL = URL(fileURLWithPath: Bundle.main.path(forResource: "metronetwork", ofType: "pdf")!)

        let document = PDFDocument(url: pdfURL)
        pdfView.document = document
        pdfView.backgroundColor = .lightGray

        // PDFの拡大率を調整する
        pdfView.autoScales = true
        // 表示モード
        pdfView.displayMode = .singlePageContinuous

        view.addSubview(pdfView)
    }
}
```

autoScalesをtrueにすると、PDFのサイズを自動で調整してくれます。
デフォルトはfalseです。

PDFの表示モード(PDFDisplayMode)は4種類あります。
デフォルトはsinglePageContinuousです。

```swift:PDFDisplayMode
public enum PDFDisplayMode : Int {
    // 1ページずつ表示される
    case singlePage
    // すべてのページが連続表示される
    case singlePageContinuous
    // 見開きで表示される
    case twoUp
    // 見開きですべてのページが連続表示される
    case twoUpContinuous
}
```
# 実行結果

<img width="375" alt="IMG_AEA8FF7BB3FC-1.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/66520/b046ed1f-b32d-e0b5-938f-b46f7cd454a9.jpeg">

拡大・縮小・複数ページあればスクロールもできます。
Intel Euclid Development Kit 開封と起動まで

#Intel Euclid Development Kitとは
Intelのサイトの説明によると、インテル® RealSense™テクノロジーインテル® euclid™開発キットの機能、 モーションカメラは、インテル Atom® x7-z8700 プロセッサーで、コンパクトなコンピューターとデプスカメラです。 インテル euclid 開発キットは、すぐに操作することができ、プレインストールされているソフトウェアとは、 Ubuntu* オペレーティング・システムです。 
とのことです。バッテリーを付けれるので、Wi-FiやBluetoothも内蔵なので、単体で深度情報やRGBカメラ情報などを取得しつつ、なんかしら処理ができる素敵ガジェット？
[引用元](http://www.intel.co.jp/content/www/jp/ja/support/emerging-technologies/intel-euclid-development-kit/000024177.html)
#開封
![euclidset.jpg](https://qiita-image-store.s3.amazonaws.com/0/49845/6bce67bc-8a11-22b8-f63f-13bd905495dd.jpeg)
内容物はこんな感じです。ユーザーズガイドに各パーツの説明が詳しく書いてあります。本体の後ろに、バッテリーか、電源プレートのどちらかを取り付けて使う感じです。電源プレートに繋げるUSBの線だけ手作り感があります。
#ユーザーズガイドとマニュアル
Intelの[販売サイト](https://click.intel.com/intelr-euclidtm-development-kit.html)にアクセスして、**support**タブを選び、
UsersGuideの「Intel® Euclid™ Development Kit User Guide(Japanese)」から、
日本語のユーザーガイドを**PDF**でダウンロードできます。
同じページにマニュアルもありますが、こちらは英語のみです。Operating Manualから**PDF**をダウンロードできます。
#起動
![euclidsetup.jpg](https://qiita-image-store.s3.amazonaws.com/0/49845/518a718c-06b3-d2cb-abef-b80b43000b9a.jpeg)
本体にバッテリーをくっ付けて、MicroHDMI経由で[Sharpの小型ディスプレイ](http://akizukidenshi.com/catalog/g/gM-11969/)に繋ぎ、USBから無線のキーボードを繋げて起動しました。
本体の右から出ているケーブルがMicroHDMI、その下がUSB、左から出ているケーブルはMicroUSB3.0で、こちらはコンセントのUSBで、バッテリーの充電もしています。PCのUSBから繋いで起動してみたところ、電気が足りないのか、起動はするけど、ディスプレイがちらついてしまいましたので、コンセントからの充電が必要だと思います。
電源ボタンを押すと、自動ログインされて、この画面まできます。
付属のMicroUSB3.0ケーブルやMicroHDMIケーブルは結構太くて硬いので、本体が思ったところにいてくれなかったりします。
まあケーブルをたくさん使うのは最初だけなので良いかもですが、気になる方はL字とか、細めで柔らかいケーブルを使うと扱いやすいかも。
#初期ユーザ名とパスワード
少し時間を置くとスクリーンセーバになってしまい、再度画面を操作するには、ログインが必要になります。初期ユーザ名とパスワードは、どちらも「**euclid**」でログインできます。
#チュートリアル
[コミュニティサイト](http://www.euclidcommunity.intel.com/)のLearnに様々な使い方が掲載されています。
Visual Studio / WPF > ObjectDataProvider > インデックス付き乱数のListBox表示 | IEnumerable | yield return 

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

http://gushwell.ldblog.jp/archives/52333267.html
を参考にObjectDataProvider を用いて作成クラスの関数を使う例を勉強中。

インデックスをつけてみた。

```MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace _170606_t1333_ObjectDataProvider
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
    public class NumberUtil
    {
        public IEnumerable<int> GetRandomNumbers()
        {
            var rnd = new Random();
            for (int idx=0; idx<12; idx++)
            {
                yield return rnd.Next(100, 1000);
            }
        }
        public IEnumerable<int> GetIndexNumbers()
        {
            for (int idx = 0; idx < 12; idx++)
            {
                yield return idx;
            }
        }
    }
}
```

```MainWindow.xaml
<Window x:Class="_170606_t1333_ObjectDataProvider.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170606_t1333_ObjectDataProvider"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ObjectDataProvider ObjectType="{x:Type local:NumberUtil}"
                            MethodName="GetRandomNumbers" x:Key="RandomNum"/>
        <ObjectDataProvider ObjectType="{x:Type local:NumberUtil}"
                            MethodName="GetIndexNumbers" x:Key="IndexNum"/>
    </Window.Resources>
    <Grid>
        <StackPanel Orientation="Horizontal">
            <ListBox Height="300"
                 ItemsSource="{Binding Mode=OneWay, Source={StaticResource IndexNum}}"/>
            <ListBox Height="300" Margin="5"
                 ItemsSource="{Binding Mode=OneWay, Source={StaticResource RandomNum}}"/>
        </StackPanel>
    </Grid>
</Window>
```


![2017-06-08_10h30_00.png](https://qiita-image-store.s3.amazonaws.com/0/32870/fd865d46-f885-1ff8-1010-e3e9700e88f6.png)
Seleniumを使ってみる

#Selenium初体験

動的な要素を持つサイトをスクレイピングしなければいけなくなったので、仕方なくSeleniumを学び始めました。

```shell-session
pip install selenium
```

ブラウザはChromeを使用したいのでChromeDriverをダウンロードして仮想環境下に移動させます。
私は /bin　へ移動しました。

https://sites.google.com/a/chromium.org/chromedriver/downloads

早速動くかどうかやってみます。検証はYahoo!をURLとして。

```test.py
import os
import time
from selenium import webdriver

DRIVER_PATH = os.path.join(os.path.dirname(__file__), 'chromedriver')
browser = webdriver.Chrome(DRIVER_PATH)
browser.get('https://www.yahoo.co.jp')

try:
    elem_1 = browser.find_element_by_class_name('emphasis')
    print ('<{}>発見！'.format(elem_1.text))
    time.sleep(3)
except:
    print ('ないよ')
```


```shell-session
(flaskworks) $ python test.py
<GDP 年1.0%増に下方修正
加計問題 首相答弁に矛盾写真NEW
英テロ容疑者おじ 怒りの証言写真
群馬に富士山? 誤解招く駅名写真NEW
元アイドル バーテンダーNo.1写真
田中は言語覚えろ 解説者謝罪写真NEW
本田 試合直後に受動喫煙語る写真
山崎アナ おばたと交際認める写真NEW>発見！
```

無事動くことを確認。
ページ送りも試してみます。

```test.py
import os
import time
from selenium import webdriver

DRIVER_PATH = os.path.join(os.path.dirname(__file__), 'chromedriver')
browser = webdriver.Chrome(DRIVER_PATH)
browser.get('https://www.yahoo.co.jp')

try:
    link_elem = browser.find_element_by_link_text('もっと見る')
    link_elem.click()
    text_elem = browser.find_element_by_class_name('ttl')
    print (text_elem.text)
    time.sleep(3)
except:
    print ('ないよ')
```

```shell-session
(flaskworks)$ python test.py
北朝鮮が未詳の発射体を発射
```

あれ？　1件しか取得出来ないですね。

```
link_elem = browser.find_element_by_class_name('list')
```

書き換えると、

```shell-session
(flaskworks) $ python test.py
北朝鮮が未詳の発射体を発射
国際
6/8(木) 7:42
錦織敗退 悔いはタイブレイク
スポーツ
6/8(木) 5:10
錦織逆転負け 全仏4強ならず
スポーツ
6/8(木) 2:12
北朝鮮 弾道ミサイル発射兆候
国際
....以下省略
```

なるほど。もしかするとこれBeautifulSoupより楽なんじゃないですかね。

#複数ページを自動巡回するカスタム

ざっくりページパラメータを足していくだけのやつです。結局次へ、をクリックしているので処理としては美しくないですね。もっといいやり方があると思うんですが、初めたばかりなのでこれが限界。

```test.py
import os
import time
from selenium import webdriver

DRIVER_PATH = os.path.join(os.path.dirname(__file__), 'chromedriver')
browser = webdriver.Chrome(DRIVER_PATH)
url = 'https://news.yahoo.co.jp/list/?c=domestic&p='

a = 0
i = 1
while a < 5:
    a += 1
    try:
        browser.get(url)
        link_elem = browser.find_element_by_link_text('次へ')
        link_elem.click()
        text_elem = browser.find_element_by_css_selector('.list')
        print (text_elem.text)
        time.sleep(3)
        i += 1
        url = 'https://news.yahoo.co.jp/list/?c=domestic&p=' + str(i)
    except:
        print ('ないよ')
```
axios で ファイルをPOSTする

# axios で ファイルを POST する

## Ajax で　ファイルをポストしたい

Ajax を使って `multipart/form-data` ファイルをポストしたい場合のやり方はこちら

- HTML

```html
<input type="file" name="file">
``` 

- Javascript

```js
var params = new FormData();
var fileSelectDom = $('[name=\`file\`]')[0];

params.append('file', fileSelectDom.files[0]);
axios.post(url, params)
      .then(function(response) {
        // 成功時
      })
      .catch(function(error) {
        // エラー時
      });
```

これで後はサーバサイドで、普通にFormからPostされたように受ければOK
jsdoでconvnetjs その14

#概要
convnetjsの、凄いデモ、見つけたのでjsdoに移植した。


#凄いデモ
http://45deg.github.io/neural-network_v2/

#写真
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/46c89316-95d1-b7af-6579-86ffbe31885e.jpeg)
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/2ffdd3f9-c331-378d-333d-7d609a7f6750.jpeg)
![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/25b1bcac-d135-fad6-8b36-0c875f8fc09d.jpeg)


#成果物
http://jsdo.it/ohisama1/6kyO
[VIM] Share Mac Clipboard with Vim

## Confirm Vim Version

First confirm the version of your vim is support +clipboard with 

```
vim --version
```

If not install the recent version of vim.

```
brew install vim
```

## Setup .vimrc

Add this line to your ~/.vimrc.

```vim
set clipboard=unnamed
```

## Try

In the vim, with yank command `y`, the selection will be copied to the mac clipboard.
globalとは別のauthorでgit initしてくれるスクリプトを書いた。

社用のパソコンなどで個人で開発下のものを個人用のgithubアカウントに送りたくなることが多々ある。
ところが、社用のパソコンの場合、デフォルトでは社内用のgitの設定をしているとそのまま個人用なのに会社で使っているauthorのままプッシュしてしまうことがある。
こうなってしまうと、後からauthor設定に修正したりするのが非常に面倒である。

なので、個人アカウントのauthor設定をinitと同時にしてしまうスクリプトを書いた。

まずは.bashrcなどに必要な個人用authorを環境変数として登録しておく。

```bash:.bashrc
export GITHUB_USER_NAME=github_author
export GITHUB_USER_EMAIL=github_author@mail.com
```

スクリプトの本体はこちら

```bash:githubinit
#! /usr/bin/env bash

git init
git config --local user.name $GITHUB_USER_NAME
git config --local user.email $GITHUB_USER_EMAIL
```

これをgit initの代わりに利用する。

```bash
$ mkdir test
$ cd test
$ touch text
$ githubinit
$ git add . && git commit -m "initial commit"
$ git log
commit -----
Author: github_author <github_author@mail.com>
Date:   Thu Jun 8 09:46:46 2017 +0900

    initital commit
```