OmniAICreator/Qiita-1.07M huggingface dataset:
delegateを使って、別クラスへの切り出し

Railsのリファクタリングの際に、クラスを細かく分ける手段として、Railsの`delegate`を使ってみました。

# 直しづらい、クラスの長さ

プロジェクトにRubocopを入れて、ヤバそうなコードをチェックしているのですが、書式の問題はものによっては自動解決も可能ですし、長すぎるメソッドも、どうにか分けられるものです。

一方で、「長すぎるクラス」というのは、そう簡単に分割できるものではありません。クラスは最終的に1つものとして動作させることになるので、メソッドみたいに「一部切り出す」というのが、あまりスッキリしません。

## `Module`は使える、けど

もちろん、一部を別なモジュールに分けて`include`する、という手段はあります。

Railsのモデルでは`has_many`とか`validates`とか、DSL的なメソッドを多用しますが、これに関しては「クラスに直接書く」あるいは「Concernの`included`で回す」ぐらいの選択肢しかないので、大量のDSLが必要になる巨大なモデルの場合は「リレーションだけ1つのモジュールに書く」ようなことも、仕方なく発生してしまったりします。

とはいえ、それでは単に「ファイルを分けただけ」であって、意味論的に全く切れていない（メソッドの名前空間も共通）ので、もっとくっきり分けたいものです。

# `delegate`とは
具体例に入る前に、`delegate`の説明をしておきます。

詳細は[APIdock](https://apidock.com/rails/Module/delegate)に譲りますが、だいたい以下のような構文を取ります。

```ruby
delegate :foo, :bar, to: :something
```

こう書くことで、`foo`、`bar`メソッドが、それぞれ、`something`メソッドにチェーンした`something.foo`、`something.bar`相当のものとして動くようになります。他にも、`to: :@instance_var`とすればインスタンス変数へ、`to: :CONSTANT`とすれば定数につなげることができます。


# 特殊な処理をする部分だけ、別クラスに
一例として、ブログシステムのユーザー（`User`）について考えてみましょう。ユーザーには読者・編集者・査読者・管理者などいくつか権限が考えられて、それぞれにできることが違ってきます。

自然にやれば、`User#can_edit?`とか`User#can_delete?`のような、権限に関するメソッドを作ることとなりますが、権限まわりはある程度ひとかたまりになるものですし、まとめて処理したいものです。

ということで、権限管理を集中処理する`RoleManager`を作ってみましょう。まずは`User`インスタンスを受け取っておきます。

```app/services/role_manager.rb
class RoleManager
  def initialize(user)
    @user = user
  end
end
```

そして、権限判定に`role_id`が必要という状況ということにして、それを`RoleManager`の中でも使えるようにしておきます。

```rb:RoleManagerの中身
delegate :role_id, to: :@user

# あとの都合もあるので、private化
private :role_id

# 上の行があることで、こんな書き方ができる
def can_create?
  role_id > 200
end

def can_delete?(article)
 # 後略
end
```

このようにして`RoleManager`が出来上がったら、`User`のほうから呼び出します。

```app/models/user.rb
def role_manager
  @role_manager ||= RoleManager.new(self)
end

delegate(*RoleManager.public_instance_methods(false), to: :role_manager)
```

もちろん、1つ1つ指定して`delegate`するのもありですが、`public`メソッドすべてを`delegate`したいのなら、`Module#public_instance_methods`を使って一気に済ませてしまうこともできます（ただし、やりすぎて循環参照を起こさないようには要注意です）。あと、`delegate(*`としていますが、カッコは掛け算と誤認しないようにしている措置です（正しくスペースを入れれば、いちおうなしでも動きますが）。

## クラスを分けるメリット

メソッドの中では全体がローカル変数のスコープとなるように、`private`メソッドやインスタンス変数も、クラスや`include`したモジュール全体がスコープとなります。別にクラスを立てれば、それらのスコープも区切れて、理解するときに一度に把握しないといけない範囲も縮むことになります。

また、1つの意味を1つのクラスで担う、というのもコードを調べる上でわかりやすくなります。
ASP.NET > aspcore2 > HTTP Error 502.5 - Process Failure 


# HTTP Error 502.5 - Process Failure が出る時の対処

デプロイしたら以下のような画面がデた
![image](https://qiita-image-store.s3.amazonaws.com/0/49910/932d6a82-5617-1b34-cb89-005b3b67572b.png)

```
HTTP Error 502.5 - Process Failure 
Common causes of this issue: 
The application process failed to start 
The application process started but then stopped 
The application process started but failed to listen on the configured port 
 
Troubleshooting steps: 
Check the system event log for error messages 
Enable logging the application process' stdout messages 
Attach a debugger to the application process and inspect 
 For more information visit: https://go.microsoft.com/fwlink/?LinkID=808681 
```


イベントログを見ても以下のような感じ

Application 'MACHINE/WEBROOT/APPHOST/DEFAULT WEB SITE/APP' with physical root 'C:\ASP_APP\public_html\' failed to start process with commandline 'dotnet .\app.Web.dll', ErrorCode = '0x80004005 : 8000808c.



https://github.com/aspnet/IISIntegration/issues/406


試しに、コマンドプロンプトで以下を動かしてみた。

dotnet .\app.Web.dll

エラーが表示された！

```
Error:
  An assembly specified in the application dependencies manifest (app.Web.deps.json) was not found:
    package: 'Microsoft.AspNetCore.Antiforgery', version: '2.0.1'
    path: 'lib/netstandard2.0/Microsoft.AspNetCore.Antiforgery.dll'
  This assembly was expected to be in the local runtime store as the application
 was published using the following target manifest files: aspnetcore-store-2.0.3.xml
```

## どうやら一部のDLLが無い模様
というかNugetからcore2のアップデートをしてしまっていた模様
以下から最新のランタイムをダウンロードする
https://github.com/dotnet/core/blob/master/release-notes/download-archive.md
https://github.com/dotnet/core/blob/master/release-notes/download-archives/2.0.3.md

しかし肝心の　がランタイムの中に入っていない模様orz
![image](https://qiita-image-store.s3.amazonaws.com/0/49910/4131aace-1691-4096-f624-a247a3136316.png)

しょうがないのでSDKをインストール
![image](https://qiita-image-store.s3.amazonaws.com/0/49910/b66bc6d8-b954-7b5e-fbe8-84f0bb9f7c74.png)

※サーバーの再起動は不要のようです。

試しにdotnetコマンドを動かしてみます。

```shell-session
C:\ASP_\apps\public_html>dotnet .\app.Web.dll
Hosting environment: Production
Content root path: C:\ASP_\apps\public_html
Now listening on: http://localhost:5000
lication started. Press Ctrl+C to shut down.
lication is shutting down...
```

動いたっぽいです。

実際にブラウザでアクセスしてみると、
表示されました！

![image](https://qiita-image-store.s3.amazonaws.com/0/49910/fb2114db-e254-130c-e54d-554aa315e2c6.png)
any()を使って、list内の特定のdict要素の有無をbool値で返す


```python:
dict_list = [{'name': 'name1', 'value': True}, {'name': 'name2', 'value': True}, {'name': 'name3', 'value': 'hogehoge'}]
```

上記のようなdict要素を持っているlistがあるとして、'name'が'name3'のものがあるかをbool値で返したかったんだけれど、以下のように`any()`でやるのが一番楽っぽい気がする

```python:
any(dict_item['name'] == 'name3' for dict_item in dict_list)
# True

any(dict_item['name'] == 'name4' for dict_item in dict_list)
# False
```

他に楽な方法あるかな

<hr>

ちなみにこういう感じで、dictのkeyが異なるようだと使えないので、listに型が異なるdict要素が入る場合はなんか別の方法でやる必要がある

```python:
dict_list = [{'wwww': 'name1', 'value': True}, {'namefaefe': 'nam2', 'value': True}, {'name': 'name3', 'value': 'hogehoge'}]

any(dict_item['name'] == 'name3' for dict_item in dict_list)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
#  File "<stdin>", line 1, in <genexpr>
# KeyError: 'name'
```

KeyErrorなので、辞書のgetメソッドを使うと大丈夫そうです

```python:
any(dict_item.get('name') == 'name3' for dict_item in dict_list)
# True
```
開発未経験者がWEBエンジニアを目指す-3

#### ぼやき
フロントエンド言語はHTML/CSS
バックエンド言語はPHPしか勉強をしていないが、複数手をつけるより
・今ある教材を全て終わらせてから他の言語に手を付けたほうがよいのか
・PHP以外にもJavaやRuby,Swiftなどがありますが2言語くらいは一気に進めたほうが良いのか、アドバイス頂けると嬉しいです。。

webエンジニアを目指す身として、バックエンドの言語を重点的に行った方が良いと考えているので勉強の比重を高くしてます。
もし複数行うとしたら、今後はすべてスマホで完結してしまう時代も来るかもとどこかで聞いたので、アプリ開発の言語である
**Ruby/Python/JavaScript/Perl/Java/swift/objective-c**(多い!!)のどれかに挑戦してみようかな。。
JavaScriptは以前買った参考書もあり少し手をつけたので良いかも


# 学んだこと
連想配列においての最高金額、合計金額の算出
クラスプロパティ staticの使用
CSS カーソル乗った時の指定 hover
ボタンの角丸 border-radius
text-alignとmargin: 0 autoの違い
[Font Awesome](http://fontawesome.io)の使い方、クラス指定の仕方
opacityとrgbaの違い


## 本日出たエラー内容
'Parse error: syntax error, unexpected …'
⇒PHPスクリプトの入力を間違えてる。行が書かれているが必ずしもその行に原因があるとは限らない

Fatal error: Unsupported operand types in のエラー
⇒phpで型が違う変数同士の加算で起こるエラー

Warning: A non-numeric value encountered in
⇒数値ではない値で演算を行うと警告が表示される
⇒PHP7.1から新たに出たエラーメッセージ

※⬇︎調べると、エラーをクイズ風にして書いた本があるらしい。⬇︎
[PHP直す力養成ドリル] (http://amzn.asia/f3YXLdy)

### その他
・PHPで価格の算出を中心にコードを書いているが、少しずつ感覚が掴めてきた気がする。
・<span class ="fa fa-facebook"></span>
 <span class ="fa fa-twitter"></span>
一行で書けないかな、、、
・エラーの対応は慣れが大事なので、このエラーはこういう対処でいけるなと見当がつけるようになる。
LINEにおけるIDとuserIdとMIDについて

('ω')「お、messagingAPIってのでシステム的にLINE送れるのか」
('ω')「とりあえず自分に送ってみるか」
('ω')「ID入れてPOST・・・エラーやん」
('ω')「え、userIdってIDと違うの？ググってみるか。」
('ω')「ん？midってのもあるの？」
(*´▽｀*)「わかんね」


# ID
・友達を検索できるやつ
・自分で設定可能
・エンドユーザが意識するID

# userId
・システム的に付与されるユニークなID
・とっても長い英数字
・MessagingAPIでpushメッセージを送るときに必要

# MID
・userIdの昔のやつ
・知らない人は知らなくてOK
・知ってる人は忘れてOK

# 感想
・LINEログインも出てきたのでちょっとややこしい
・自分のuserId確認するにはwebhook見るしかないのかな
台風の総数をグラフ化

##概要
気象庁のHPで過去の台風発生数がまとめてあるcsvファイルを見つけたので
総数をグラフで表してみる。

```py:hr.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import csv
import math
import numpy as np
import sys, os
from matplotlib import pyplot

listage = []
listnum = []

with open('generation.csv', 'r',encoding='cp932') as f:
    reader = csv.reader(f)
    header = next(reader)  # ヘッダーを読み飛ばしたい時

    for row in reader:
        listage.append(row[0])
        listnum.append(row[13])
x = listage
y = listnum
pyplot.plot(x, y,)
pyplot.xticks([1960,1970,1980,1990,2000,2010], ["1960","1970","1980","1990","2000","2010"])
pyplot.xlabel("Year")
pyplot.show()
```

##結果
![ダウンロード.png](https://qiita-image-store.s3.amazonaws.com/0/187924/22632f88-4454-228b-eeb9-a8dfa2262be5.png)

よく分からなかった

##参照
[気象庁：台風の発生数](http://www.data.jma.go.jp/fcd/yoho/typhoon/statistics/generation/generation.html)
洋物のAmazon Echo Dotで日本語のスキルは使えるのか

# 目的
アメリカで発売され１年以上が経過し、ようやく日本にもやってきたAmazon EchoとAmazon Echo Dot。
歴史的理由でそんな洋物をお持ちの方も多いのではないでしょうか。
こういう製品は少品種大量生産でコスト削減が基本。
アマゾンが無駄なコストなどかけるはずがなく、世界中どこで買っても同じ製品だから日本語で動作するはず。
これを検証することを目的とします。

# 日本語に変更できるけど…
去年からAlexaを使っている人は管理画面でEchoの言語設定を変更できます。
ここに従来は存在しなかった「日本語」が出現しました。
![arakisan.jpg](https://qiita-image-store.s3.amazonaws.com/0/96018/d6df9a21-5350-577a-2d1d-f7e83332382c.jpeg)
日本語を選択すると、警告が表示されるものの日本語対応になります。

「あれくさ」と日本語読みで発音してもきちんと反応しますし、
「今日の天気は？」と話しかけるときちんと登録住所地の天気を答えてくれます。
しかしです。
「スキル」が使えないんですね。
Alexa管理画面でスキルのページを開くと日本語のスキルが表示されないどころか、言語の問題で使えないよと英語のスキルも弾かれ詰みます。
警告されたのはこのためだったのでした。

# Alexaのアカウントと言語の関係
アカウントの言語とデバイスで利用可能なスキルの言語は紐付いています。
そしてアカウントの選択可能な言語はアカウントを作成したサイトに依存します。

以前から使っているみんなが登録したのは
https://alexa.amazon.com/
ですよね。これはAWSアカウント（つまりアメリカのamazon.com）のアカウントです。

そこに、今回の日本語対応で別のサイトが出現しました。
https://alexa.amazon.co.jp/
文字通り日本のamazon.co.jpが管理しています。
こちらはAWSアカウントとは無関係です。日本のamazon.co.jpで買い物をするアカウントと同じ物で、それがそのまま利用可能です。

- 日本語のスキルは日本のamazon.co.jpアカウントにデバイスを登録しないと使えないのでした

# デバイスを日本のアカウントへ移動
デバイスは１つのアカウントにしか登録できません。
アメリカのアカウントから登録を解除して日本のアカウントへ登録する必要があります。
これはとても簡単です。
アメリカのAlexa管理画面 https://alexa.amazon.com/ を開き、
「設定」から一番上に登録デバイスが並んでいるので解除したいデバイスを選択。
「その他」の欄に「登録解除」というボタンがあります。
これをクリックすれば登録解除されます。

Echoが登録解除され利用不可能になっているはずです。

次に、日本のAlexa管理画面 https://alexa.amazon.co.jp/ へ接続します。
日本のアマゾンで買い物をするときに使用するアカウントでログインできます。
最初のログインでは、登録電子メイルアドレスに認証コードが送られます。
認証コードを入力すると利用可能になります。
あとは新規デバイスとしてEchoを登録するだけです。

# できたかな？
![ArakiSkill.jpg](https://qiita-image-store.s3.amazonaws.com/0/96018/b8787e8d-c553-a077-5eaa-275f3dae1be8.jpeg)

こんな感じに画面が表示されれば成功しています。

# まとめ
最初に立てた仮説が正しかったことが検証されました。
これを何に使うのかとかは興味がありません。そういった記事が書かれることは無いでしょう:-)

今回はAWS re:Inventで配られたAmazon Echo Dotで検証しています。
古いEchoは日本語非対応との話もあり、対応機と非対応機があるようです。
情報お待ちしています。
Python3でHello World

#概要
Python3でHello Worldをしてみる。（"Hello World"と表示すること）
（自分的にはQiitaへ投稿するテストですので、内容の重複は許してくださいm(_ _)m）
#目的
- Qiitaに記事を投稿するテストを行う
- Python3をできるだけ最小限で実行してみる

#環境
os: maxOS Sierra Version 10.12.6
python: Python 3.6.0

#内容
##コマンドラインでHello World
```bash
$ python -c "print('Hello World')"
Hello World
```
Hello Worldと表示された。

#詳細
##コマンドライン(iTerm2もしくはbash)を起動
私の環境では、Alfredがinstallされているので、AlfredからiTermを起動した。
iTermがない場合は、Terminalを起動した。

##Pythonのversionを確認
Pythonのversionを確認した。

```bash
$ python --version
Python 3.6.0
```
Pythonのversionが[Python 3.6.0](https://www.python.org/downloads/release/python-360)であることがわかった。
今回は、異なるversionであった場合も問題なく動くと思われる。

##Hello Worldの実行(コマンドラインでHello World)
```bash
$ python -c "print('Hello World')"
Hello World
```
Hello Worldと表示された。

##コマンドラインの終了
Commandキーとqを同時に押した。

#意義
- Pythonを記述し実行することができた。
- Pythonの機能のうち、標準出力に出力する手法(`print`)を動作させることができた。
- Qiitaで記事を記述し、投稿することができた。
GitHubに草を生やし続けるのは難しい

# GitHubに草を生やし続けるのは難しい。

メインで作ってるプロジェクトに新しい要素を追加するときは、新規プロジェクトで新要素だけを実験する。

この「新規プロジェクトでの新要素の実験」はGitHubへコミットすることはない。なぜなら、特定要素の実験であるし、すでに先人が行なっていることを自ら真似て理解をして実装するためのものだからだ。

**そして、実験は順調に進まないものだ。**

新要素については検索した情報から書いても、すんなり動くことは少ない。Objective-Cで書かれたものやSwiftのバージョン違いが主な理由だった。

しかし、Appleの公式ドキュメントで当該機能を検索すると、同じ機能を2つの言語で表示してくれる。公式ドキュメントが整備され検索性も優れた代物だ。

優れた公式ドキュメントだが、プログラミングについての昨今の実装技術の知識が不足していると十全に活用できない。

今日のつまづいた主な要素

* handle
* selector
* 位置やサイズに関する部分

# 今日の実験

## UIScrollViewとUIImageViewでタップ、パン、ピンチ

実験目的は、Screenサイズより大きい画像を全画面表示し、パンで表示エリアを変更すること、ピンチで拡大や縮小ができること。

ScrollView内にImageViewを配置することで実現してる先人がいるので、コードの意味を解読することで動かすことができそうだ。まだ道半ば。
スマホで撮った写真を Line Message API を利用して Google Cloud Functions から Google Photos へアップする

## 背景

幼い子どもを持つ父親として以下のような課題を抱えており、かねてからなんとかしたいなと考えていました。

- 妻がスマホで撮る子どもたちの写真を Line で送ってくれるが、バックアップが面倒だった。
- 手順としては、一旦ダウンロードして Google Photos[^1] に手動でアップロード[^2]。

[^1]: 以前から Google Photos をスマホで取った写真のバックアップ先にしていました。
[^2]: 子供が勝手にスマホで床や壁、TVを大量に連写するため、Google Photos と同期設定ができません。

手間が掛かるなーと悩んでいたところ、以下の記事を見て、各種サービスの API を叩くだけだから、Google Cloud Functions や AWS Lambda、 Azure Functions などを利用すれば解決できるかもしれないと思い試してみました。

> [結婚式でLINE Message APIを使った写真共有サービスを作った話](http://tomoima525.hatenablog.com/entry/2017/10/16/192325)

## 概要

色々と調査したところ、こんな感じで実現できました。[^3]

[^3]: 図は [PlantUML Editor](https://plantuml-editor.kkeisuke.com/) にて作成しています。

![シーケンス図](https://qiita-image-store.s3.amazonaws.com/0/61513/9493b474-b8db-46fa-d39f-18742df6434e.png)

## 成果物

Google Cloud Functions にアップしているコードは GitHub にあげています。
https://github.com/kkeisuke/line-to-google-photos

これだけのために Google Cloud SDK をインストールするのは面倒だったので、コンソール画面のインラインエディタにコピペできるようにしています。
uglifyjs で、各種サービスのIDやトークンを結合した index.min.js をビルドしています。

## 各種サービス

### Line Message API

Line Message API はこの[ドキュメント](https://developers.line.me/ja/docs/messaging-api/overview/)だけ参照して、管理画面でポチポチしていくだけで使えるところまでの設定が出来ました。ただ、仕様的にはかなり複雑で、用語とか雰囲気でしか理解できてません。。。

[プラン](http://at.line.me/jp/plan)は妻と二人しか使う予定がないので、Developer Trial にしてますが、フリーとの違いはこれもまたよくわかってません。。。

### Google Cloud Functions

#### 選定理由

Google Cloud Functions を選んだのは、「AWS / Azure のアカウントを持ってない」というそれだけの理由です。
あと、Firebase を最初に調べたんですが、[プラン](https://firebase.google.com/pricing/?hl=ja)を見ると制限がきつそうだったので選びませんでした。[^4]

[^4]: Firebase は機会があれば是非使ってみたいです。

Google Cloud Functions の場合、[料金](https://cloud.google.com/functions/pricing?hl=ja)を見ると今回のケースだと負担もなく実現できそうです。[^5]

[^5]: しばらく運用して要確認

[ドキュメント](https://cloud.google.com/functions/docs/?hl=ja)も充実しており、クイックスタートから始めて迷うことはほぼありませんでした。

#### Node.js

Node.js のバージョンは[こちら](https://cloud.google.com/functions/docs/writing/?hl=ja)に記載されています。普段 Node.js を書かない（言い訳）ので、http://node.green/ や https://nodejs.org/docs/latest-v6.x/api/all.html を確認しながらだったんですが、実際に動かしたらバージョン的に対応してないとかが怖かったので、TypeScript[^6] で書いてます。

[^6]: API を順に叩いていくだけなので、async/await が便利でした。

### Google Photos

APIについては以下の記事を参考にしました。

> [Google Photosの無料容量15GBを有効活用！cURLでGoogle Photosへ画像アップロードするには？](https://qiita.com/tamanobi/items/be3eede75c9ede41fce4)

記事の補足として、Picasa Web Albums Data API については[ドキュメント](https://developers.google.com/picasa-web/docs/3.0/developers_guide)も一応確認しました。

また、Picasa ID の確認方法については以下の記事を参考にしました。

> [Google Photosに翻弄された話](https://crafterkina.github.io/log/post/8.html)

## 最後に

Google Photos PC版にはスライドショー機能もあるので、chrome拡張でも作れば、イベント（それこそ結婚式など）でリアルタイムに更新されるスライドショーを投映することもできそうです。

以上です。
初学者がelm-workshopを通じてElmを学ぶ

Elm初心者です。
しかし、初心者という立場だと何を学べばいいかわからなくなりがちです。
自分も、はじめAltJSの一つだと考えて、node向けにビルドしてまずは標準出力に`Hello World`かみたいに考えて初めての一歩を踏み間違えて消耗しました。

そこで、elm-workshopです。

https://github.com/rtfeldman/elm-workshop


これは、ElmHubをいうGitHub APIを使ったのElmのアプリケーションを組み立てていくチュートリアルで、基本的なことを穴埋め形式で学ぶことができます。
自分は見てませんが、8時間に及ぶ動画もあります(有料)

![スクリーンショット 2017-11-15 22.30.46.png](https://qiita-image-store.s3.amazonaws.com/0/15319/569be353-8cb9-3a7e-a474-96c7cdd62aa3.png)



## 準備
readmeのGetting Startedに書いてある通りに環境を用意します。

1. node v6.9.2以上
1. お好みのエディタにElmのパッケージの導入(自分はVSCodeにelmというプラグインを入れました)
1. `elm-format`をインストール(jsでいうところのprettierみたいなもので非常に便利)
1. 依存のインストール`npm install -g elm elm-test elm-css elm-live@2.6.1`(自分はelmはbrewで入れてたので、他のライブラリをyarnで導入しました)


レポジトリのクローン

```
git clone https://github.com/rtfeldman/elm-workshop.git
cd elm-workshop
```

GitHubのSearchAPIを使うために、`github.com/settings/tokens/new`にアクセスして、トークンを取得します。`Token description`と書いてあるところに`Elm Workshop`などのわかりやすい名前を入力し、取得したトークンをプロジェクトのルートに`Auth.elm`として配置します。


Auth.elm

```elm
module Auth exposing (token)


token =
    -- あなたのトークン
    "abcdef1234567890abcdef1234567890abcdef12"
```

依存をインストールして、セットアップが完了してるか確認します。
以下の画面が表示されたら、part1に進みます。

```
elm-package install --yes
elm-live Main.elm --open --pushstate --output=elm.js
```

![](https://cloud.githubusercontent.com/assets/1094080/14227327/db89d3a0-f8af-11e5-8c37-c3e8afaa9d03.png)

## PART 1
自分が書いた回答を一つ一つ貼っていくのが芸がないので、とりあえずPART 1だけ見てみます。
最終的には、PART14まであり、jsとのやりとりの方法やテスト、elm-cssまで一つのアプリケーション構築を通して学べます。

`elm-live`で立ち上げます。
ライブリロードです。

```
$ cd part1
$ elm-package install
$ elm-live Main.elm --open --pushstate --output=elm.js
```


Main.elmを見ると、`TODO`があります。
これを1つ1つクリアして行きながら学ぶ形になります。

```elm
module Main exposing (..)

import Html exposing (..)
import Html.Attributes exposing (..)


main =
    div [ class "content" ]
        [ header []
            [ -- TODO wrap this text in an <h1>
              text "ElmHub"
            , span
                [-- TODO give this span a class="tagline" attribute.
                 --
                 -- HINT: look at how our <div class="content"> does this above.
                ]
                [{- TODO put some text in here that says:
                    "Like GitHub, but for Elm things."
                 -}
                ]
            ]
        ]
```

TODOを穴埋めすると以下のようになります。

```elm
module Main exposing (..)

import Html exposing (..)
import Html.Attributes exposing (..)


main =
    div [ class "content" ]
        [ header []
            [ h1 [] [ text "ElmHub" ]
            , span
                [ class "tagline" ]
                [ text "Like GitHub, but for Elm things." ]
            ]
        ]
```

こんな感じで、このあとにHttp通信などが続きます。
readmeやコメントでヒントやAPIドキュメントへのリンクがあり、非常に親切でした。

## おわりに
いかがだったでしょうか？
個人的には、ある程度実践的なElmのチュートリアルで非常に助かりました。
まず何を書けばいいのという段階から迷うことなく進むことができます。
もし、これからElmを学ぼうと考えている人がいたら、elm workshopをやってみてはいかがでしょうか？

https://github.com/rtfeldman/elm-workshop

なお、11月15日時点でこれを書いています。
チュートリアルの内容が、変わっていたらごめんなさい🙇
ffmpeg-pythonを使ってみた

# 初めに

機械学習で動画関係のデータセット準備に当たって必要な箇所のみの動画に抜き出したりなどの加工をしたかったため書きました
openCVはなぜがffmpegをうまく読み込んでくれないので、ffmpegを直接いじろうとしたところ、[ffmpeg-python](https://github.com/kkroening/ffmpeg-python)というライブラリを見つけたので、そちらを使って見る事にしました

ffmpegはほぼ使った事ない初心者です

# 使用ライブラリ

ffmpeg-pythonを利用します

```bash
pip install ffmpeg-python
```
でインストール

# 動画の一部をクリップする

動画は自分のiphoneの中にあった、うまい棒で某友人釣る動画を`input.MOV`という名前で保存しています
５秒間の動画ですので、2~4秒目を抜き出す事にします

[公式ドキュメント](https://kkroening.github.io/ffmpeg-python/#ffmpeg.trim)を見ると

> ffmpeg.trim(parent_node, **kwargs)
Trim the input so that the output contains one continuous subpart of the input.

と`trim`があったのでこれを使えばできると思い色々試しましたが、これが罠でした

正解は

```python

import ffmpeg

# 入力
stream = ffmpeg.input('input.MOV')


# 出力
stream = ffmpeg.output(stream, 'output.mov',t=2,ss=2)

# 実行
ffmpeg.run(stream)


```

と`ffmpeg.output`の中で指定する事でした

`ss=2`で2秒目から`t=2`で2秒間抜き出すという指定をするだけです

# 動画を画像化する

`input.MOV`の動画を画像化します
`fps`は`5`で画像化するようにします

こちらも`ffmpeg.output`で指定します

```python
import ffmpeg

# 入力
stream = ffmpeg.input('input.MOV')


# 出力

stream = ffmpeg.output(stream, 'images/%05d.jpg',r=5 ,f='image2')

# 実行
ffmpeg.run(stream)

```

`f='image2'`で画像化をするフォーマットを指定し
imagesフォルダーの中に画像を保存したいので、`images/%05d.jpg`と保存するファイル名の前にフォルダを指定しています

画像名は`%05d.jpg`となっているので5桁の整数で(桁が足りない分は0で埋める)連番になっているファイル名を`jpg形式`で保存しています

## 注意点

`ffmpeg-python`ではフォルダーを作ることができないようです
なので、`os.mkdir(フォルダー名)`を使い`ffmpeg.run`を実行する前に事前にフォルダーを作っておきましょう

# 二つの処理を重ねて

もちろん指定した秒数抜き出すのと、画像化する処理は同時にすることができます

```python

import ffmpeg

# 入力
stream = ffmpeg.input('input.MOV')


# 出力
stream = ffmpeg.output(stream, 'images2/%04d.jpg',t=2,ss=2,r=5 ,f='image2')

# 実行
ffmpeg.run(stream)

```
ohai を使って色々取得

``` all.rb
require "rubygems"
require "bundler/setup"
require 'ohai'

oh = Ohai::System.new
oh.all_plugins

YAML.dump(oh.data, File.open('all.yml', 'w'))
```

``` user.rb
require "rubygems"
require "bundler/setup"
require 'ohai'

oh = Ohai::System.new
a = oh.all_plugins("etc")

a[:etc][:passwd].each { | k, v |
  print "#{k},,#{v[:uid]},#{v[:gid]},,#{v[:shell]},#{v[:dir]}\n"
}
```

``` group.rb
require "rubygems"
require "bundler/setup"
require 'ohai'

oh = Ohai::System.new
a = oh.all_plugins("etc")

a[:etc][:group].each { | k, v |
  print "#{k},#{v[:gid]}\n"
}
```
惑星から万有引力を受ける物体をUnity上で実装

#Unityで万有引力って？

[1週間ゲームジャム](https://unityroom.com/unity1weeks)というものに参加しようと思ったのでゲームを作ろうとしたのですがかなり大きな壁にぶつかりました

ちなみに作ろうとおもったゲームは宇宙空間で引力で引っ張られる状態のロケット:rocket:を制御するゲームです
まあワケワカランとは思いますが、リンクを張りましたのでぜひプレイしてみてください

で、このゲームにおいて重要なものがあります
それは
**万有引力！**

ですね
じつはすでに**重力**であればGravityという項目がUnityにはありますので、実装は不要です
しかし、Gravityは以下に示す左の絵の矢印のような感じになります。私がほしいのは右の絵のような感じです。

<img src="https://qiita-image-store.s3.amazonaws.com/0/103256/1205b0ad-6f43-be89-ca5f-116cdb1154a3.png" width=30%>     <img src="https://qiita-image-store.s3.amazonaws.com/0/103256/88782630-4e6c-f7f0-0360-2d5373169694.png" width=30%>



これを実装するにはどうしたら良いでしょうね(・・;)
想像もできませんが、やるしかねぇ！:hugging:

今回のゲームでは、複数の惑星からロケット一つが力を受ける形を考えています
つまり惑星同士が引き合うものではありません

（ちなみにこの記事を書きながらいろいろやった後に気づいたのですが、すでに万有引力に関しては書かれている方がいらっしゃいました:sweat:
以下のリンクがその記事です．私の記事より短くてわかりやすっ！
[[Unity] 惑星に向かって物体が落ちるようにする](http://ftvoid.com/blog/post/738))

##いざ実践！
万有引力を作るためにはその式が必要ですよね(^o^)
万有引力の式は以下で与えられます

![image.png](https://qiita-image-store.s3.amazonaws.com/0/103256/07308806-2872-853f-6f7c-9ccf06450555.png)

これをC#のスクリプトで書いていきます
書いたコードはこちらです

```C#:Universal_gravity.cs
public class UniversalGravitation : MonoBehaviour {
    public static float G = 6.67259f; //万有引力定数の定義
    Rigidbody rocket_body;
    public GameObject rocket; //Unity上でロケットにあたるものをドラッグ＆ドロップ
    Rigidbody planet_body;
    // Use this for initialization
    void Start () {
        rocket_body = rocket.GetComponent<Rigidbody>(); //
        planet_body = this.GetComponent<Rigidbody>();
    }
	// Update is called once per frame
	void Update () {
        Vector3 vec_direction = this.transform.position - rocket.transform.position; //ロケットから見た惑星の位置
        Vector3 Univ_gravity = G * vec_direction.normalized * (planet_body.mass * rocket_body.mass) / (vec_direction.sqrMagnitude); //万有引力の計算
        rocket_body.AddForce(Univ_gravity); //ロケットに万有引力を掛ける
	}
}
```

万有引力の法則の式があるので、あとは惑星から見たロケットの位置をベクトルで表すことができれば、そのベクトルの単位ベクトルと大きさが分かれば案外簡単ですね．

今にして思えば、これは惑星の方にアタッチしたスクリプトですが、もしかしてロケット側に入れたほうが簡単だった？(；´∀｀)
導入したものが以下の動画です

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/4TzL44YO3uc/0.jpg)](http://www.youtube.com/watch?v=4TzL44YO3uc)
(画像クリックで再生します)

ちなみに上記のrocketにしっかりロケットのオブジェクトを関連付けすれば以下の動画のように複数の大きさ、質量の違う惑星の間も動くようになります(^q^)

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/sAblW0iifGI/0.jpg)](http://www.youtube.com/watch?v=sAblW0iifGI)
(画像クリックで再生します)


一応今回の目的は達成ですかね
しかしこの方法は
「惑星が増えたら毎回ロケットの設定がめんどい」
「ロケットが増えたら更にめんどい」などの問題がありますね(´・ω・`)
素直に[こちら](http://ftvoid.com/blog/post/738)のようにロケットに万有引力のスクリプトをアタッチするほうが簡単そうですねぇ・・・

でも万有引力はロケットにかかってるけど、惑星の質量が生み出す力だから惑星にアタッチするのが自然だと思ったんですぐすん(´；ω；｀)

というわけで、幾つかの方法があるとは思いますが私のやりかたはこんなかんじでした
およみくださってありがとうございます！
Slackから，GAS経由でスクレイピングして，株価を取得

Slackから，Yahoo!ファイナンスをスクレイピングするGASを呼び出し，最新株価を取得する方法をメモ


## Slack
OutgoingWebhookを設定．
たとえば自分は，stockをトリガーワードにして，「stock 銘柄コード」と入力すると，その銘柄の名前・最新株価・前日比を取得する機能を実装した．


## GAS
doPostでOutgoingWebhookのHTTP POSTを受け取って，
株価スクレイピングをするfunction stockPrice(code)を実行する．
Slackとの連携には以下記事のライブラリを利用した
https://qiita.com/soundTricker/items/43267609a870fc9c7453


### function doPost(e)
```js
//=======================================================
// doPost: Slack-GASのGateway
//=======================================================
function doPost(e) {
  var verify_token ="TOKEN"; //outgoing-webhooks
  var contents=e.postData.contents;
  
  var channelID = "#"+e.parameter.channel_name;
  var word = e.parameter.trigger_word;
  var message = "";
  // Token確認
  if (verify_token != e.parameter.token || e.parameter.user_name=="slackbot") {
    throw new Error("invalid token.");
  }

  // <<< stock >>>
  if (word == "stock") {
    var text = e.parameter.text.substr(6);　//[stock ][text]
    if (text == "info") {
      stockInfo();
      message = "I sent you a list of stock."
    　　　　　　　　　　　　　　　　　　　　　　　　+ "\n"
    } else {
      stockPrice(text);
      message = addChannelToMessage(e,message,"#asset_management");
    }
  } 
  
  // post Message
  if (e.parameter.channel_name=="test_outbound") {
    var message = "Hi, @" + e.parameter.user_name + " -san"
                + "\n"
                + message
    return postMessage(channelID, message)
  }
}
```


### function stockPrice(code)
```js
//=======================================================
// 株価スクレイピング：
//=======================================================
function stockPrice (code) {
  var url = 'https://stocks.finance.yahoo.co.jp/stocks/detail/?code=' + code;
  var response = UrlFetchApp.fetch(url);
  var html = response.getContentText('UTF-8');
  
  // stock name
  var sTag = 'h1>';
  var eTag = '</h1>';
  stock_name = scraping(sTag,eTag,html);
  
  // stock price
  var sTag = 'td class="stoksPrice">';
  var eTag = '</td>';
  stock_price = scraping(sTag,eTag,html);
  
  // Change from yesterday
  var sTag = 'span class="icoDownRed yjMSt">';
  var eTag = '</span>';
  change = scraping(sTag,eTag,html);
  if (change) {
    change = change;
  } else {
    sTag = 'span class="icoUpGreen yjMSt">';
    change = scraping(sTag,eTag,html);
  }
  // PostMessage
  postMessage("#asset_management",stock_name+"["+code+"]: "+stock_price+"\nChange from yesterday: "+change);
}
```

## 最後に
GASからスクレイピングしてSlackで情報取得が出来ると，情報取得にはかなり便利．
ほかにも色々と応用していきたい
MacOSXにHomebrewを利用してpyenvとanacondaをインストールした話

# はじめに（環境の話とか）
とりあえず備忘メモとして残しておきます。
Homebrewのインストールは前提とします。
後ほど詳しい情報を書いていきます。（多分）

以下の環境で行いました。
MacBook Pro (Retina, 13-inch, Late 2013)
macOS Sierra バージョン10.12.6

以下、ターミナル上での作業

#Homebrewの更新
なんだかよくわかりませんが、おまじないとして更新しておきます。

```bash
 $ brew update
 $ brew upgrade 
```

#pyenvのインストール
pyenvはPythonのバージョン管理を行うものです。
pyenvを利用して、Pythonのバージョンを変更したりします。
ちなみにMacOSXでは、デフォルトでPython バージョン2.7がインストールされています。

bashを利用している場合のpyenvインストール

```bash
 $ brew install pyenv # pyenvのインストール
 $ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
 $ exec $SHELL -l
```
本当にpyenvがインストールされたか確認しときましょう。

```bash
 $ pyenv --version # インストールしたpyenvのバージョンを確認
```

#anacondaのインストール
anacondaをインストールしましょう。
anacondaはデータサイエンス向けのPythonパッケージだそうです。

インストールできるanacondaバージョンを確認しましょう。

```bash
 $ pyenv install -l | grep anaconda
```
```bash:出力結果
 anaconda-1.4.0
 anaconda-1.5.0
 anaconda-1.5.1
 ........(中略)........
 anaconda3-4.3.1
 anaconda3-4.4.0
 anaconda3-5.0.0
```
今回はPython バージョン3.Xかつ、最新のanacondaを利用します。

```bash
 $ pyenv install anaconda3-5.0.0
```
anacondaがインストールできたことを確認します。

```bash
 $ pyenv versions # anacondaのバージョンを確認
```
```bash:出力結果
  system
  anaconda3-5.0.0 (set by /Users/hogehoge/.pyenv/version)
```


インストールしたanacondaを利用します。

```bash
 $ pyenv global anaconda3-5.0.0 # 最新版のanacondaを利用する
```
もう一度anacondaのバージョンを確認してみましょう。

```bash
 $ pyenv versions # anacondaのバージョンを確認
```

```bash:出力結果
  system
* anaconda3-5.0.0 (set by /Users/hogehoge/.pyenv/version)
```
このように、選択したanacondaのバージョンが選択されたことが確認できます。
また、Pythonのバージョンも確認してみましょう。

```bash
 $ python --version # Pythonのバージョンを確認
```
```bash:出力結果
 Python 3.6.2 :: Anaconda, Inc.
```
このように、Pythonのバージョンが変わり、後ろにAnacondaと表示されるとanacondaの利用も可能になっています。

# 参考にしたページ
以下のページを参考にさせていただきました。
投稿者の方には非常に感謝しております。

Macにanacondaをインストールする→ライブラリの追加
https://qiita.com/berry-clione/items/24fb5d97e4c458c0fc28

HomebrewのインストールからpyenvでPythonのAnaconda環境構築までメモ
https://qiita.com/freyja/items/2d066801a7464a676994
Swagger初心者向け勉強会に参加してきたので、知ったことをメモ

社内で行われたSwagger初心者向け勉強会に参加してきたので、知ったことをメモ


# Swaggerとは (https://swagger.io/)
・RESTful APIを使用する上で世界で最も支援してくれるAPIツール
・OSS標準準拠
DESIGN：エディター（http://editor.swagger.io/）
BUILD：コード生成
DOCUMENT：仕様書生成
の3要素でできている
日本ではまだそこまで普及していないが、海外ではデファクトスタンダードであるらしい
なので、ドキュメントは海外のものの方が充実している。

###DESIGN
APIの設計をエディターでパワフルにやってくれる。
YAML形式のエディターを書くとドキュメントがリアルタイムで作成されていく。リアルタイムレンダリング。
コードアシスト機能がついているので、タイプセーフ。
###BUILD
定義ファイルからコードが生成できる
コマンドラインで仕様書をinputにgenerateするとコードが生成される（コマンド叩くだけでコード自動生成）
###DOCUMENT
定義ファイルから仕様書を生成してくれる
コードを直しても仕様書に反映される（アノテーションに合わせた内容になる）ので、常にコードと仕様書の整合性が取れている。
 
##Swaggerのいいところ
Spring、JAX-RS、Servlet(PureJava）に対応
定義ファイルがYAMLなので、YAMLの書き方さえ覚えればどこでも共通に使える（バージョン管理も容易）
コードにアノテーションを付与することで仕様書が研ぎ澄まされていく
Excelで仕様書書いて、コード書いて、コードに修正入ったら仕様書も直してーみたいのがなくなる

##個人的感想
APIのmockとして使えそう。
画面だけ作って、サーバのスタブとして使えそう。

##勉強法は？
公式リファレンスは海外でデファクトスタンダードなので、充実している。
Qiitaにもたくさん投稿があるので参考になる。
日本語の書籍とかはまだなさそう。
SPRING INITIALIZRを使ったSpringBootプロジェクトのひな壇の作り方

# 概要

簡単なWebプロジェクトを作る機会があり、今までは自分で0からプロジェクトを作っていたがせっかく[ **SPRING INITIALIZR** ](https://start.spring.io/)という`SpringBoot`のひな形プロジェクトを作成してくれるWebサービスがあるので、勉強がてら使ってみました。

# SPRING INITIALIZRとは？

前述の通り、Web上で使用するビルドツール(`Maven`/`Gradle`)と言語(`Java`/`Groovy`/`Kotlin`)、SpringBootのバージョンをぽちぽち選択するだけで、プロジェクトひな壇を作成してくれるという、SpringBoot使いにはもってこいの神サービスです。

# 使ってみた

## 前提

今回は

- Gradle
- Java
- 1.5.8
- Web Services(tomcat起動したいため)

でひな壇を作成しました。


## ダウンロード

[ **コチラ** ](https://start.spring.io/)にアクセスし、好みに合わせてアーキテクチャを選択し、下部の **Generate Projectボタン** を押下しましょう。

<img width="1188" alt="screencapture- 2017-11-15 14.53.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/27b5cee0-9c36-46ed-2f89-f3fe4a2adaa6.png">

２、３秒でzipファイルの **ダウンロード** が完了します。

## 展開

ダウンロードしたzipファイルを任意のディレクトリに展開してその中に入ります。

<img width="346" alt="screencapture- 2017-11-15 15.08.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/02dbfd79-3b8c-b61f-fe67-bc87a0df0e75.png">

展開ファイルには **gradlew** と **gradlew.bat** が入っていますので、コマンドを実行します。

```bash:command
./gradlew
```

少し待つとビルドが **完了** します。

<img width="964" alt="screencapture- 2017-11-15 14.40.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/07f929c4-2a7c-d773-f592-92dc968800ed.png">

## 起動

以下コマンドでアプリが **起動** します。


```bash:command
./gradlew bootrun
```

<img width="1181" alt="screencapture- 2017-11-15 14.55.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/e39b039c-c421-ef48-67d8-83b5067077c3.png">

## 確認

http://localhost:8080/ にアクセスすると以下のような **エラー画面** が表示されます。
※Controllerはまだ用意していないので、 **Tomcatの起動** だけ確認出来ればOKです。

<img width="487" alt="screencapture- 2017-11-15 15.11.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/f7e35f53-d113-9b9c-7d9e-e7fbaa69d045.png">

# 終わりに

zipファイルの **ダウンロード** から **Tomcat起動確認** までで **5分** かかりませんでした。

 **しゅごい** 

の一言に尽きますね。

知識が無くてもプロジェクトの作成が出来るので、`SpringBoot`を初めて使う方にもオススメです。

あとは、このプロジェクトをどんどん **肉付け** していけばWebアプリケーションを **実装していくことが可能** です。

皆さんも **新規案件** の際にはぜひ **利用** してみて下さい♪
踏み台経由でのsshショートカット作成

ついでに引数で環境を選択できるようにしておく。
case文書くほどじゃないけど備忘録として書いとく。（引数による条件分岐）
gate_hostを `~/.ssh/.config` に書いとく。

```ssh_shortcut.sh
#!/bin/sh
ENV_VAR='service-stage'
case $1 in
  'test' ) ENV_VAR='env1' ;;
  '' ) ;;
  * ) echo 'invalid parameter.'; exit;;
esac

ssh -t gate_host "cd path/to/; eb use $ENV_VAR; eb ssh"
```

######参考
- [sshで踏み台経由時のショートカット \- Qiita](https://qiita.com/moroku0519/items/62686784a51ad54b6ac7)
- [３分理解！シェルスクリプトでのcaseの使い方](https://eng-entrance.com/linux-shellscript-case)
【メモ】時系列解析（1）：状態空間モデル

#動機
　最近、ディープラーニングや機械学習といった概念に興味を持って、独学でPythonを学んでデータセットを用いて予測をしてみたり、日本の総トラフィック量の予測をしてみたりと色々と趣味の範疇で勉強しています。
　ですが、予測したものに対して根拠が乏しかったりして、一度体系的に勉強しなおしてみたいと思い、独学の記録をここに残していきます。

#時系列解析とは
　そもそも時系列解析とは何でしょうか？
　時系列とともに観測されたデータ、これを分析して将来の予測や仮説の検証に役立てる方法論だといえますね。例えば物体Xが時間t1には座標x1、時間t2には座標x2,時間t3には座標x3...と(時間、座標)のデータも一種の時系列データですね。

#状態空間モデル
##ローカル・レベル・モデル
　数式としては、$t=1,2,...,n$に対して、このように書くそうです。

```math
y_{t}=\mu_{t}+\epsilon_{t}, \ \ \epsilon_{t}\sim NID(0,\sigma^{2}_{\epsilon})
```
```math
\mu_{t+1} = \mu_{t}+\xi_{t}, \ \ \xi_{t} \sim NID(0,\sigma^{2}_{\xi})
```
　上の式は観測方程式、下の式は状態方程式と呼ばれます。
　$y_{t}$が時点$t$における観測値とすると、$\mu_{t}$は時点$t$における状態、$\epsilon_{t}$は観測誤差、$\xi_{t}$はシステム誤差と定義します。うーん、数式だけだとイメージが…。
　前期の状態と今回の状態はノイズという形で毎回変化し、観測された数値も実際の状態から観測時に誤差が出るものとして表現される考え方のようです。
　時系列データの変動をノイズでうまく表現できるモデルと捉えるとしっくりきますが、常に右肩上がり、右肩下がりの傾向を予測するにはノイズだけでは厳しそうですね。その傾向の知識を取り込んだモデルが次に紹介するローカル線形モデルです。

##ローカル線形モデル
　観測方程式はそのままに、傾向を表す状態方程式を追加します。ここで時点$t$の「傾き」を$\nu_{t}$として定義し、数式に傾きの要素を取り入れます。

```math
y_{t}=\mu_{t}+\epsilon_{t}, \ \ \epsilon_{t}\sim NID(0,\sigma^{2}_{\epsilon})
```
```math
\mu_{t+1} = \mu_{t}+\nu_{t} +\xi_{t}, \ \ \xi_{t} \sim NID(0,\sigma^{2}_{\xi})
```
```math
\nu_{t+1} = \nu_{t} + \zeta_{t}, \ \ \zeta_{t} \sim NID(0,\sigma^{2}_{\zeta})
```

　傾き$\nu_{t}$と状態$\mu_{t}$と、それぞれの誤差で時系列データをうまく表現できるモデルのようですね。傾きはほぼ一定の数値となると、このモデルの予測は傾きを持った線形的なものになりますね。

##季節要素のあるローカル線形トレンドモデル
　日本のトラフィック傾向を見ると、平日よりも休日の方が高い傾向にありますよね。休日のほうがインターネットを使える時間ができますし。そういった周期性のような繰り返しパターンを季節効果というようです。
　数式で表現するのは難しいので、時系列データの表現がノイズと傾向に加えて周期性がついたイメージとだけ残しておきます。傾向は線形性で表現されるという前提に注意すれば十分予測でも役立ちですね。

#参考資料
・J.J.F.コマンダー、S.J.クープマン著「状態空間時系列分析入門」CAP出版（2008）
・状態空間 | Logic of Blue
https://logics-of-blue.com/%E7%8A%B6%E6%85%8B%E7%A9%BA%E9%96%93%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%81%AF/
Laravel + heroku の環境を１行でセットアップするスクリプト

毎回Laravel + heroku （+ postgres + Laradock） の環境を構築するのが面倒なので
コマンド一発でセットアップするスクリプトを作りました。

Laraku - quickly setup Laravel + heroku environment.
https://github.com/kamukiriri/Laraku

##動作環境
**必要なもの**
heroku CLI (が使える状態にあること＝インストール、ログイン済み)
PHP(5.6.x or 7.1.x)
composer
git

**Laradockを使用する場合**
Docker

作成及び検証環境はmacOSですがLinuxでもいけるはず...

## インストール

gitから落としてきて実行権限付けるだけです。

`git clone https://github.com/kamukiriri/laraku.git && cd laraku && chmod 755 laraku.sh`

## 使い方

`./laraku.sh larakudemo nginx`
これだけでherokuでアプリが動きます
（`heroku open` で確認できます）

`./laraku.sh larakudemo nginx postgres`
更にheroku postgresを自動で追加できます
（接続情報も反映）

`./laraku.sh larakudemo nginx postgres laradock`
ここまでやればなんとLaradockが起動し、 http://localhost から動作確認できます！
（でもホストマシンのポート設定が全部デフォルトのままなので他と競合するかも）

ただしプロジェクトはlarakuディレクトリ以下に作られるので、適宜移動してください

## 詳細

`./laraku.sh <project name> <webserver type> [<database type>] [<use laradock>]`

#### project name
プロジェクト名
ディレクトリ名、herokuアプリ名、Laradockのコンテナ名に使われます

#### webserver type
Webサーバーの種類
`nginx` または `apache` に対応

#### database type
DBの種類
`postgres` しか対応していません

#### use laradock
Laradockを使用するか
`laradock` と指定されたときだけLaradockの初期化を行います
（きれいな仕様でないですがやっつけなので・・・）

:exclamation:**注意**:exclamation:
*2018/08/02現在、Dockerイメージ及びコンテナ名の名前がプロジェクト毎にユニークにならない現象が発生しています
（原因はLaradockのバージョンアップに追随できていないため）*

## 追記
以下の記事はこのスクリプトの中でやっている設定の解説です
[Laravelアプリをherokuで動かすチュートリアル](https://qiita.com/kamukiriri/items/73ff35fc7f9083ca68c1)
というかまとめ記事を書いている途中で「スクリプト化できるのでは？」となって作られたのがLarakuになります
Proxy内のVagrant環境でdocker pullする方法のメモ

# 目的
Proxy内で立ち上げたVagrant環境でdocker pullに失敗しました。
[vagrant-proxyconf](https://github.com/tmatilai/vagrant-proxyconf) は導入済みの状態でうまくいかなかったため解決法をメモします。

# 使用box
[elastic/centos-7-x86_64](https://app.vagrantup.com/elastic/boxes/centos-7-x86_64)

#結論
以下の設定を入れる。

```:追記内容
  config.vm.provision "shell", inline: <<-SHELL
    mkdir -p /etc/systemd/system/docker.service.d
    echo "[Service]" >> /etc/systemd/system/docker.service.d/https-proxy.conf 
    echo "Environment=HTTP_PROXY=http://proxy.hogehoge.com:8080/ HTTPS_PROXY=https://proxy.hogehoge.com:8080/ NO_PROXY=localhost,127.0.0.1,.hogehoge.com" >> /etc/systemd/system/docker.service.d/https-proxy.conf 
  SHELL
  config.vm.provision "docker"
```

provision で systemd の設定を追加する形です。
「config.vm.provision "docker"」 よりも前に設定ファイルを作らないと少し手間がかかります。

#参考
[公式ドキュメント](https://docs.docker.com/engine/admin/systemd/)
https://qiita.com/jeffi7/items/3e40c59744b5801fd40a
[iOS] TensorFlow Liteのビルド、サンプルアプリの実行

TensorFlow LiteのPreview版がリリースされたので、お試し。

Announcing TensorFlow Lite
https://developers.googleblog.com/2017/11/announcing-tensorflow-lite.html

Introduction to TensorFlow Lite
https://www.tensorflow.org/mobile/tflite/

TensorFlow Lite repository
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite

#環境
- Xcode 9.0
- CocoaPods 1.3.1

# 準備
TensorFlowのビルドに必要なものをインストールする。
多分、以下だけでOKと思うが、クリーンな環境で試していないので、不足があるかも。

```bash
brew install automake
```
```bash
brew install libtool
```
```bash
brew install wget
```

#ダウンロード
TensorFlowのソースコードをダウンロード(git clone)する。

```bash
git clone https://github.com/tensorflow/tensorflow.git
```

#ビルド
iOSでのビルド手順は以下参照。
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/ios.md

##依存関係のあるものをダウンロード
以下のShell Scriptを実行すると`tensorflow/contrib/lite/downloads`に必要な依存か関係のあるlibrayがダウンロードされる。

```bash
tensorflow/contrib/lite/download_dependencies.sh
```

##LibraryのBuild
以下のShell Scriptを実行すると`tensorflow/contrib/lite/gen/lib/libtensorflow-lite.a`にStatic Libraryが生成される。

```bash
tensorflow/contrib/lite/build_ios_universal_lib.sh
```

##サンプルのBuild
CocoaPodsで必要なLibraryをインストールする。

```bash
cd ./tensorflow/contrib/lite/examples/ios/simple
pod install
```

Xcodeで`tensorflow/contrib/lite/examples/ios/simple/simple.xcworkspace`を開いてビルド/実行する。

<img width="375" alt="ScreenShot_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/168061/d593c368-2f83-b367-52de-05d73634b733.png">

Run Modelをタップすると、アプリ内の[リソースで持っている画像](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/examples/ios/simple/data/grace_hopper.jpg)を解析するだけで、カメラロールから任意の画像選べたりはしないようなので、微妙ですね。

<img width="375" alt="ScreenShot_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/168061/0a49ac44-52ac-f368-0d38-eab869226830.png">
alexa-avs-sample-appを日本語に対応させる

(2017/12/21更新)
12/19の更新で、公式に日本語に対応したようです。
https://github.com/alexa/alexa-avs-sample-app/commit/f78290baf141c53604ed3ee79ffd8fb1a74fad37

そのため、この記事は用無しとなりました。

今まで見てくださった1206名の皆様、いいねをくださった10名の皆様、ありがとうございました！


---


本日(11/15)からAmazon Echo購入の招待メールが配信されているようですが、私のところにまだ来ていません。
悔しいので、alexa-avs-sample-appを日本語化してみました。

## 公式サイト

【GitHub】
https://github.com/alexa/alexa-avs-sample-app

【Quick Start Guides】
Raspberry Pi
https://github.com/alexa/alexa-avs-sample-app/wiki/Raspberry-Pi

Windows
https://github.com/alexa/alexa-avs-sample-app/wiki/Windows

## 日本語化の方法

Raspberry piでは以前導入したことがあったので、今回はWindowsに導入しました。
導入手順は、上記Quick Start Guidesのとおりです。

ただ、そのままでは、Javaのアプリ（Alexa Voice Service Sample Java Client）が日本語に対応しておらず、日本語が選べないので、少しだけ細工します。
`mvn install`を実行する前に、変更します。

### 設定ファイル
`samples\javaclient\config.json`

```diff 
-"locale":"en-US",
+"locale":"ja-JP",
```

###  Javaソース
`samples\javaclient\src\main\java\com\amazon\alexa\avs\config\DeviceConfig.java`

```diff
 public class DeviceConfig {
     private static final String DEFAULT_HOST = "https://avs-alexa-na.amazon.com";
     public static final String FILE_NAME = "config.json";
     private static final List<Locale> SUPPORTED_LOCALES = new ArrayList<>();
     static {
         SUPPORTED_LOCALES.add(Locale.US);
         SUPPORTED_LOCALES.add(Locale.UK);
         SUPPORTED_LOCALES.add(Locale.GERMANY);
+        SUPPORTED_LOCALES.add(Locale.JAPAN);
     }
```

こんだけ。
成功すれば、`Locale`が`ja-JP`に設定できるようになります。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/41574/15b7aa10-1162-315d-e092-c873d5e48dc5.png)

## 色々やってみた

Google Playから[Amazon Alexa](https://play.google.com/store/apps/details?id=com.amazon.dee.app&hl=ja)アプリをインストールしてスキルを追加してみました。

* 天気予報
* radiko.jp
* ピカチュウトーク

全部動きました！Echo買わなくても一通りのことができそう！！

## QiitaでAlexa関連のサイト
Skill作って見ようと思います。

Amazon Echo を日本語でセットアップする。
　https://qiita.com/takustaqu/items/10d2fb58dbcbf94b1304
Raspberry Pi2 で Alexaに話してみる
　https://qiita.com/areaz_/items/f181ddbbb2f53d6d98e4
Raspberry pi 2BでAmazon Alexaを動かしてみた
　https://qiita.com/noimi/items/f107df4ff8b754fd0df0
Alexa Skill Kitを触ってみる
　https://qiita.com/Darmuck/items/07dfd996ad4e90e1d605
はじめてのAlexa
　https://qiita.com/kei_0324/items/e97fe52df9e0a91ad5bf
s2s: 型情報による変数の初期化

Flow型情報を利用して変数を初期化します。
テストやstorybookなどで別ファイルで読み込むときに活用できます。

![](https://camo.githubusercontent.com/05881cb8652d615f097557e2abe2a2cd04d2e4dc/68747470733a2f2f692e6779617a6f2e636f6d2f63366465373363376339303434353230666262636139353838316332613932372e676966)

s2sについては、すでにいくつか記事を書いたのでそちらを参照してください。
[さよならボイラープレート。s2sによる高速reduxアプリケーション構築 - Qiita](https://qiita.com/akameco/items/e1489c6bbf3439ec6ca4)

すぐ動作確認できるサンプルがあるので、導入についてそれを見て下さい。

https://github.com/akameco/s2s/tree/master/examples/getting-started

## How to work?
Flowは、エディタなどで利用可能なように、カーソルの位置の型情報がCLIから取得可能です。
`flow type-at-pos --json path/to/file row column`という形でカーソルの位置の型情報がjsonで取得できます。
しかし、jsonといっても、json5です(これに気づかずなぜかパースできなくて悩まされました)

エディタでは型情報の表示に利用しますが、今回はコードの生成に利用します。

s2sのプラグインでは、以下のような手段でコードを生成します。

1. babylonで変数宣言とその型の位置を取得
1. Flowで型情報(JSON)の取得
1. その型のASTを取得するために`type X = 取得したjson`という偽のコードを生成し、それをbabylonでパース
1. ASTをtravaseし`TypeAlias`の右辺を取得
1. それをオブジェクトに変換し、再帰的にそれぞれの型の初期化値に置き換え

何故か異常に複雑になってしまいましたが、要は取得した型を`number`なら`0`、`string`なら`""`、`bool`なら`false`という形で置き換えてるだけです。

## まとめ
何かありましたら、コメント欄またはTwitterで議論しましょう。

https://github.com/akameco/s2s

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">s2sに本当に小さいサンプルを追加した。型情報を使った変数の初期化。設定ファイルは10行以下。とりあえず試すのにオススメ <a href="https://t.co/5rep99nOQn">https://t.co/5rep99nOQn</a> <a href="https://t.co/8aYRmgpRgL">pic.twitter.com/8aYRmgpRgL</a></p>&mdash; あかめ@無職.js (@akameco) <a href="https://twitter.com/akameco/status/925436154190512128?ref_src=twsrc%5Etfw">October 31, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr"><a href="https://t.co/YWMQpeFuqC">https://t.co/YWMQpeFuqC</a> を使って型が異なる場合のみ初期化させる。これで本当に小さくs2sを導入できる <a href="https://t.co/7QBVHS9zOn">pic.twitter.com/7QBVHS9zOn</a></p>&mdash; あかめ@無職.js (@akameco) <a href="https://twitter.com/akameco/status/923247001248022529?ref_src=twsrc%5Etfw">October 25, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">reducer のテストや storybook 書く時に強力でありがたい。type から faker の生成<a href="https://t.co/s9ZGuRfUBw">https://t.co/s9ZGuRfUBw</a></p>&mdash; えるざっぷ (@_elzup_) <a href="https://twitter.com/_elzup_/status/929625930334531584?ref_src=twsrc%5Etfw">November 12, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
python3_文法練習帳

Pythonを学んだ関数やコードをメモしています。
# 参考コード
## 複数行をリストに格納
    import sys
    array = []
    for line in sys.stdin.readlines():
      array.append(line.rstrip())

### 入力回数が決まっている場合
例)入力:

    s_1
    s_2
    s_3

s = [input() for i in range(3)] #3回繰り返し s に値を取得

print (s) #出力:['s_1', 's_2', 's_3']
最初に入力回数(N)が与えられる場合

例)入力:

    N
    s_1
    s_2
    s_3
    ...
    s_N

N = int(input()) #1行目のNを取得
s = [input() for i in range(N)] #N回繰り返し s に値を取得

print (s) #出力:['s_1', 's_2', 's_3',...,'s_N']
複数行でも、入力の値を任意の形に操作しながらの取得が可能です。
その場合は

num = number (数字をいれる)

    s = [int(input()) for i in range(num)] #複数行を数値型で取得
    s = [input().split() for i in range(num)] #複数行の入力を分割して取得

### ソートしたものを改行で出力
    input_lines = int(input())
    list = [int(input()) for i in range(input_lines)]
    list.sort()
    for i in list:
        print(i)

### 半角スペースの入力をリスト化
    input_lines = input().split()
LambdaでPythonを使用してSlack通知を作る（技術調査中）

# 最終目的
現在勤めている会社では、週に１回社員が持ち回りでブログを書いています。
その当番を手動でSlackで通知してましたが、
良い加減自動化したかったので若手を巻き込んでシステム化してみようと思い至りました。
どうせなら使ったことのないものを使ってみようと考え、AWSのLambdaやPythonを使用します。
教育用件備忘録としてQiitaを使用します（これも初めての試みw）

## PythonやAWSで必要なもの調べて試してみる
1. [AWSでPythonを使用したLambdaを作ってみる](https://qiita.com/seisyu1985/items/c5560c5eaea5b5ff9098)
2. [LambdaからWebHookを使用してSlackにメッセージを送信してみる](https://qiita.com/seisyu1985/items/c59dbb8164b5332d5c9e)
3. [Python2.7でPyMySQLを使用してSQLを実行する](https://qiita.com/seisyu1985/items/4148d38a5fcb188a2f65)
4. [PythonでSSH経由のMySQLアクセスをして、WordPressの投稿情報を取得する](https://qiita.com/seisyu1985/items/e910d85b2ca6f30db4f2)
5. [Lambdaの環境変数をKMSで暗号化して、Pythonで複合化する](https://qiita.com/seisyu1985/items/880c5e49e8c8677bc9e3)
6. [CloudWatchで定期的にLambdaを実行して、Slackにメッセージを送信する](https://qiita.com/seisyu1985/items/518b4a899cf91a43b0e4)
7. [AWSのLambdaのタイムゾーンをUTCからJST(東京)に変更](https://qiita.com/seisyu1985/items/2f3af4188a61dccf44b2)
8. [AWSのLambdaからLambdaを呼んで、Slackにメッセージを送信する](https://qiita.com/seisyu1985/items/76a7a10543ea38dd07de)
9. [Lambdaの「invalid ELF header」エラーを解消する - EC2からlambda-uploaderを使用してLambdaにデプロイする方法](https://qiita.com/seisyu1985/items/092228b6e0dc6103a046)


## 上記で調べたものを利用して、定期的なSlack通知をしてみる
**調査中**
少しずつ記載していきます。
YYPHP#15イベントレポート「人生相談、バックエンド、プログラムの裏で巻き起こっていること、GoとPHP、RESTful、Docker」


これは2017年11月15日に開催したPHPerイベント[YYPHP#15]のイベントレポートです。

[YYPHP]は一言で「PHPerの部室」です。PHPについて、雑に、ゆるく、ワイワイ話し合う集いです。毎回お題を決めずに雑談を出発点にいろいろなことを突発的にやります。集まった人でコードリーディングをすることもあれば、一緒に開発ツールを触ってみたり、フレームワークについての情報交換をすることもあります。開催は**毎週**水曜19:00に高田馬場にて。

[YYPHP#15]: https://yyphp.connpass.com/event/70011/
[YYPHP]: https://yyphp.connpass.com/

## 参加者

* 9名
* PHP歴の分布
    * 10年〜: 2名
    * 3年: 1名
    * 1年半: 1名
    * 1年未満: 4名
    * 4日: 1名

## 人生相談、PHPerはどういうエンジニアなのか

* 勉強法がよくわからない。
* どうなりたいか分からない。
* 転職するとき実績が大事。
* GitHubのアカウント大事。

## フロントエンド以外のエンジニアもやってみたい

* Blade
* Vue使いたい [Vue.js](https://jp.vuejs.org/index.html)
* いつフレームワークを使うべきか？
    * WordPressのプラグインはカスタマイズが必要になると大変。
* EC-Cube
* [WooCommerce — WordPress プラグイン](https://ja.wordpress.org/plugins/woocommerce/)
* タスク管理アプリとかをフロントからサーバサイドまで作ってみては？
    * 俺できるくね？ってなったら転職してみるとか。
* バックエンドは覚えることが多い
    * 業務知識、SQL、データベースなどいろいろ覚えることある。

## プログラムの裏で何が起こっているのか？

* 言語の下のレイヤーで何が起こっているのか分かっていないと心配。
* そこをどう学んでいくか？
    * フレームワークのソースコードを読むのが手っ取り早い
    * 読めなくてもにらめっこしていれば何となく分かる
    * 変更してみる
    * 本を読む

## RESTful APIってどうやって設計していくのか？

* [WebAPIについての説明 - Qiita](https://qiita.com/busyoumono99/items/9b5ffd35dd521bafce47)
* 考えるのは難しい
* GraphQL [Introduction to GraphQL | GraphQL](http://graphql.org/learn/)

## GoとPHP

* Goは早い
    * コンパイルすると機械語になる
    * スクリプト言語と比べて30〜100倍くらい違う
* PHPerの学び方
    * 呼び方の違い: class → struct 
    * 参照`&`がある
    * [動的言語だけやってた僕が、38日間Go言語を書いて学んだこと - Qiita](https://qiita.com/suin/items/22662f43b6a6e8728798)も参考になるかも
* ミドルウェアを作る向け
    * HTTPサーバとか

## Docker

* 本番と開発環境のDockerイメージを同じにするか、ビルドするか
* Docker For Mac
* WindowsはVagrant+Dockerを使わないといけない
* Windows10ProはDocker For Windowsが使える

## その他の雑談

* [Dash for macOS - API Documentation Browser, Snippet Manager - Kapeli](https://kapeli.com/dash)
    * ローカルでPHPやフレームワークのドキュメントを見れる。 
* ウェブ系はMacが多いのか？
    * MacはUnixなのでLinuxと似ている
    * これがウェブ開発者にとってはウケが良いのでは
* [Slackで簡単に「日報」ならぬ「分報」をチームで実現する3ステップ〜Problemが10分で解決するチャットを作ろう | | Craftsman Software Inc.](http://c16e.com/1511101558/)
* [Cloud9 - Your development environment, in the cloud](https://c9.io/)
* [意外ととっつきやすいOSS開発参加方法まとめ - Qiita](https://qiita.com/shunsuke227ono/items/94dd6e707d34a1da2617)


## 参加者の感想「今回参加してよかったことは何ですか？」

* 勉強法などわかる！
* 柔らかい雰囲気で知識を吸収できる
* phpの知識や勉強方法など、普段では得られない情報が得られた
* 最新情報の仕入れ方のノウハウを知った
* 言語等のリファレンスビューアーDash、OS等の学習方法、GraphQL等知らなかったことを色々知れた。
* 皆さん優しくてホッとしました(≧▽≦)

### 改善してほしいこと、フィードバック

* もっと話が聞きたいと思ったので、もう少し時間が長かったら嬉しいです。
* １テーマが少し長いかもなーと思いました。けど僕は基本雑談しにきてるので、正直そんなに問題はないです^^
* もくもく会にして、つまづいたところとか分からないところを都度質問出来る、みたいな会があっても面白いかも知れないです^^
* 個人的に遠くて遅い時間なのが…

## YYPHPは毎週やってます

PHPについてワイワイ話したい方は、[YYPHPのイベント情報](https://yyphp.connpass.com/)をチェックしてみて下さい。

以上、YYPHPのレポートでした。次回もワイワイやっていきたいと思います！ では、また来週！
AWSにSSH接続した際のエラー:Bad owner or permissions on

##状況
AWSでRubyOnRails環境を構築中。
[こちらのページ](https://qiita.com/shizuma/items/d4ae7d4374aeb90df648)を参考に、git clone。

`[hoge@fuga rails]$ git clone https://github.com/hoge/fuga.git`

ここで、以下のエラー文。

```
Bad owner or permissions on ~/.ssh/config
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

##解決策
`$ chmod 600 ~/.ssh/config`
configへのアクセス権限がなかったため起きた。
状態遷移図(ステートマシン図)で過去の状態を記憶する


状態遷移図(ステートマシン図)の履歴状態について学んだので、備忘録として残して置く。  

  
# 履歴状態(History)

状態遷移図で過去の状態を保持したい場合には履歴状態(History)を用いる。  


![OK](https://github.com/mknGOD/SerialMessage/blob/master/HistoryOK.png?raw=true)

上の図を用いて、例を示す。
現在、(書き込みモード、入力不可)状態のときに、書き込みモード→閲覧モード→書き込みモードと遷移する場合を考える。
この場合、閲覧モードから遷移した書き込みモードのサブ状態は入力不可状態に遷移する。
これは履歴状態(History)により遷移前の状態を記憶していたからである。
履歴状態を状態遷移図で表現する場合は円の中にHと書かれた記号を用いる。

---

![NG](https://github.com/mknGOD/SerialMessage/blob/master/HistoryNG.png?raw=true)

ちなみに、僕は上の図のような書き方をして先輩に注意を受けた。
この書き方だと、1回目の書き込みモード遷移時、状態の履歴が残っていないのでどこに遷移するか分からないからである。  

---
![PLUS](https://github.com/mknGOD/SerialMessage/blob/master/HistoryPLUS.png?raw=true)

また、履歴状態を用いる遷移と用いない遷移を使い分けることができる。
上の図の場合、書き込みモード⇄閲覧モード間の遷移では履歴状態を用いるが、書き込みモード⇄メニューモード間の遷移では履歴状態を保存しない。  

---
AWSにSSH接続した際のwarning: setlocale: LC_CTYPE: cannot change locale (UTF-8)

##状況
AWSでRubyOnRails環境を構築中。
[こちらのページ](https://qiita.com/shizuma/items/d4ae7d4374aeb90df648)を参考に、作成したユーザでログインを計る。

configを次のように書き換え、

```Qiita:config
Host first_aws
  Hostname 54.64.22.197 #自分の設定に合わせて
  Port 22
  User shizuma #先ほどのユーザー名
  IdentityFile ~/.ssh/first_aws_rsa #秘密鍵の設定
```
SSHログイン。
`[~]$ ssh first_aws`

ここで、以下のエラー文。
`warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory`

##解決策
TerminalのPreferences/Profiles/Advancedにある

- [x] set locale variables automatically

こちらのチェックボックスを外す。再起動後にwarningが消えた。
AppleScriptの2次元リストを行列として、転置行列を取得するAppleScriptハンドラ


* 引数matrixが正しい行列かどうかはチェックしない

```AppleScript:transposeMatrix.scpt
return my transposeMatrix({{"A1", "A2", "A3"}, {"B1", "B2", "B3"}})
--> {{"A1", "B1"}, {"A2", "B2"}, {"A3", "B3"}}

on transposeMatrix(matrix as list)
	set transposedMatrix to {}
	repeat count (item 1 of matrix) times
		set end of transposedMatrix to {}
	end repeat
	repeat with row in matrix
		repeat with i from 1 to count row
			set end of item i of transposedMatrix to item i of row
		end repeat
	end repeat
	return transposedMatrix
end transposeMatrix
```


## 更新履歴

* 2017-11-15: 新規作成