OmniAICreator/Qiita-1.07M huggingface dataset:
Python3/Twitter Application-only authenticationでツイート取得

### はじめに

ラッパーはtweepyを使っています。python-twitterではApplication-only authenticationが[v3.3](https://github.com/bear/python-twitter/commit/f2dd2d35a18428407017c6bbc1fe986c94e86fd0
)で追加されたようですが、試したところ自分の環境ではうまく動きませんでした。

#### 動作確認環境

 - Tweepy 3.5.0
 - Python 3.5
 - Amazon Linux AMI release 2017.03
 

### サンプルコード

```py3
#!/usr/bin/env python3.5
# -*- coding: utf-8 -*-

import tweepy

# App-Onlyなのでcustomer key と secretは不要
consumer_key = '<consumer key>'
consumer_secret = '<consumer secret>'
auth = tweepy.AppAuthHandler(consumer_key, consumer_secret)
api = tweepy.API(auth)

keyword = 'ウンベラータ'

for tweet in api.search(q=keyword, count=100):
    print(tweet.text)
```

### 検索結果で次ページ以降も取得する場合

Tweepyのカーソルを利用すると過去分の遡りがラク。
上記コードのfor部分を以下のように変更。

```py3
for tweet in tweepy.Cursor(api.search, q=keyword, count=100).items():
    print(tweet.text)
```

### 出力結果をJSON形式でファイルに吐き出す例

JSON serialise用の _json variableを利用
参考：https://stackoverflow.com/questions/27900451/convert-tweepy-status-object-into-json

```py3
#!/usr/bin/env python3.5
# -*- coding: utf-8 -*-

import tweepy

consumer_key = '<consumer key>'
consumer_secret = '<consumer secret>'
auth = tweepy.AppAuthHandler(consumer_key, consumer_secret)
api = tweepy.API(auth)

keyword = 'ウンベラータ'

tweet_list = []
for tweet in tweepy.Cursor(api.search, q=keyword, count=100).items():
    tweet_list.append(tweet._json)

import json
f = open("output.tweepy.json", "w")
json.dump(tweet_list, f, ensure_ascii=False)
```
2017年1月～3月におけるセキュリティソフトの評価

#はじめに
パソコンやスマートフォンを守るために、必要なセキュリティソフト。
新しく買った際には、必ず導入しますよね？
そんな時、皆さんはセキュリティソフトをしっかりと選んだ上で、導入しているでしょうか？

恐らく大多数の人は比較サイトを元に「これでいいかな」で選んでしまっていることと思います。
本当にそのような判断でご自身の大切な機器は守られているのでしょうか？

ここでは、信頼の出来る評価基準として、
世界的権威のある第三者機関「[SE Labs](https://selabs.uk/)」による[調査](https://selabs.uk/download/consumers/jan-mar-2017-consumer.pdf)を採用し、
その調査において好成績を収めているセキュリティソフトをご紹介していきたいと思います。

##SE Labsとは
攻撃や侵入から保護するために設計された製品やサービスを評価することにより、情報セキュリティの向上を目的とした機関である。以前は、Dennis Technology Labという名称だった。
調査結果を公開しており、その調査内容と精度から、世界的に高い信頼度を持っている。そのため、この機関からの評価を付加価値としている企業もある。
同じようにセキュリティソフトの調査をしている機関に、[ICSA Labs](https://www.icsalabs.com/)、[AV-Comparatives](https://www.av-comparatives.org/)、[AV-TEST](https://www.av-test.org/en/)、[MRG Effitas](https://www.mrg-effitas.com/)などがある。


#第1位 「[Kaspersky](http://home.kaspersky.co.jp/store/kasperjp/ja_JP/pd/productID.5064647600/ThemeID.37143200/?icid=jp_co-topkstext_pro_ona_oth__onl_b2c__lnk_______)」
イギリスの情報セキュリティ製品の開発・販売・サポートを行っている企業が開発したセキュリティ製品。SE Labsだけでなく、様々な第三者機関から高い評価を得ている。2016年度に関しては、各機関の調査において、トップ3に入った確率が90%以上でかなり信頼できる製品であると言えるだろう。この調査では、全ての項目において満点という成績を誇っている。
日本国内でも、官公庁、公共・教育機関などにも導入されている。

#第2位 「[ESET](https://eset-info.canon-its.jp/home/family/)」
スロバキアのESET社が1980年代から開発を行っている歴史の深いセキュリティ製品である。世界的に良いセキュリティ製品としてだけでなく、企業としても高評価を得ている。
この調査では脆弱性において若干の減点があったようだが、満点に近い点数を誇っている。

#第3位 「[Norton](https://jp.norton.com/norton-security-for-three-devices)」
アメリカのシマンテック社が開発している製品で、様々な第三者機関から高パフォーマンスの評価を得ている。ソフトウェアにリスクが潜んでいる場合、インストール前に警告するノートン特有の機能がある。
この調査では、一部が安全なものまで危険であると判断されるとして、若干の減点があった。

#第4位 「[Bitdefender](https://www.bitdefender.com/solutions/internet-security.html)」
ルーマニアのSOFTWIN社が開発しているセキュリティ製品で、負荷が少なく、使い勝手が良いとして、世界で個人・企業合わせて5億以上のユーザーを抱えている。
この調査では、それぞれの項目で若干の減点を貰い、この順位となっている。

#第5位 「[Trend Micro](http://safe.trendmicro.jp/products/vb.aspx)」
トレンドマイクロ社が開発しているセキュリティ製品で、日本では一番売れており、日本特有の脅威への対応も売りとしている。複数の第三者機関でも高評価を得ている。
この調査では、それぞれの項目で若干の減点を貰い、この順位となっている。

#第6位 「[Microsoft](https://www.microsoft.com/ja-JP/download/details.aspx?id=5201)」
Windowsを開発しているMicrosoft社が開発しているセキュリティ製品で、上の5つと違い無料で使用することが出来る。但し、サポートOSがWindows 7,Windows Vistaのみのである。
この調査では、保護機能に若干の不安があるとして、減点を貰っている。

#第7位 「[AVG](http://www.avg.co.jp/)」
オランダのAVG Technologies社が開発しているセキュリティ製品で、無料版と有料版がある。チューニングを行うのに必要な操作が少なく、高性能である。世界中で2億人以上のユーザーを抱えている。
この調査では、リスクの発見の正当性は高評価だが、保護機能において減点を貰っている。

#第8位 「[Avast](https://www.avast.co.jp/index)」
チェコのAvast Software社が開発しているセキュリティ製品で、無料版と有料版がある。動作中のゲームに配慮したつくりになっている。世界中で4億台のデバイスを抱えている。
この調査では、保護機能と一部が安全なものまで危険であると判断されるとして、この順位となっている。
[swift][warning]Comma spacing violation: コンマ間隔違反



##Comma spacing violation:
There should be no space before and one after any comma.(comma)

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/

#スポンサー募集
iTunes Connectの段階的リリースについて細かすぎてわからないことをAppleに聞いて来た


WWDC2017で発表があり、iOSアプリを段階的リリースできるようになりました。ちょっと嬉しい。
気になることがいくつかあったので、iTunes Connectのラボで細かいことを質問しました。

2017年6月時点の情報です。

## 段階的リリースの概要

段階的リリースは、自動アップデートを有効にしている端末に対して、７日間に渡って一定の割合で徐々にリリースする機能です。
1日目に1%、2日目に2%、3日目に5%と、公開されていき、7日目に100%になります。割合は変更できません。

段階的リリースの途中で、致命的なバグを見つけたら、最大30日まで中断することもできますし、そのバージョンのアプリを破棄することもできます。
もちろん、途中で「全ての端末に公開」へ切り替えることもできます。

[段階的リリースのヘルプページ](https://help.apple.com/itunes-connect/developer/#/dev3d65fcee1 "バージョンアップデートの段階的リリース（iOS、watchOS）")


## 気になった細かいこと

### Q: 段階的リリースを中断したまま30日経過したらどうなるの？公開されちゃったりするの？
A: いきなり公開はされません。31日目から段階的リリースが続き、止められなくなるだけです。
ヘルプページよく読めばそう捉えることもできるんですけど、ラボの担当者の方は即答ではなく、確認してました。


### Q: 段階的リリースでは、公開対象になっていない端末でも手動でアップデートできます。そのとき、App Storeアプリに通知バッジは表示されますか？
A: バッジは表示されます。
通知バッジを表示しないなんて無理そうだと思ったけど聞きました。
こっそりと段階的リリースはできません。

### Q: 例えば段階的リリースで最初の1%まで公開した時点で、致命的なバグが分かり、そのバージョンのリリースを破棄します。次の新しいバージョンで段階的リリースすると、前の段階的リリースで割り当てられた1%の端末と同じ端末に割り当てられるのでしょうか？

A: いいえ。毎回ランダムに端末を選びます。
バグによりますけど、1%で段階的リリースを止めちゃったときに、次に段階的リリースすると、そのバグを抱えた1%の端末は最悪の場合リリースして７日間はバグが解消されません。
今の仕組みでは、致命的だったら通常通り全公開でしょうか。

### 要望の受付先
最後に要望があったらhttps://bugreporter.apple.com からどんどん連絡をくれと言っていました。
menuを追加したいとき

menuをあとから追加したくなったとき

res/menuの中にmain.xmlを作る (menuフォルダがない場合はフォルダも作る)

```main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_settings"
        android:showAsAction="never"
        android:title="Settings"
        tools:ignore="AppCompatResource" />
    <item
        android:id="@+id/menu_help"
        android:showAsAction="never"
        android:title="Help"
        tools:ignore="AppCompatResource" />
</menu>

```


menuを追加したい画面で以下のコードを書く

```test.java
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
            case R.id.menu_settings:
                Log.d("test", "Settings Selected.");
                Intent intent = new Intent(this,robotSettingActivity.class);
                startActivity(intent);
                break;
            case R.id.menu_help:
                Log.d("test", "Help selected.");
                break;
        }
        return true;
    }
```
ソフトマックス関数実装したヅラ

#ソフトマックス関数とは
分類問題等でよく使われる活性化関数
なぜなら、正解ラベルへの推論を確率で割り振ってくれるため。
例）
mnistで手書きの8に対してのソフトマックス
`[0.05, 0.01, 0.04, 0.1, 0.02, 0.05, 0.2, 0.03, 0.4, 0.1] `

左の要素から数字の0,1,2,....9の予測確率に対応（4割の確率で8だと予測している)
すべての要素を足すと1になる。

#実装
```python:softmax.py
# coding: UTF-8
import numpy as np

# ソフトマックス関数
def softmax(a):
    # 一番大きい値を取得
    c = np.max(a)
    # 各要素から一番大きな値を引く（オーバーフロー対策）
    exp_a = np.exp(a - c)
    sum_exp_a = np.sum(exp_a)
    # 要素の値/全体の要素の合計
    y = exp_a / sum_exp_a

    return y 


a = [23.0, 0.94, 5.46]
print (softmax(a))
# [  9.99999976e-01   2.62702205e-10   2.41254141e-08]
```
参考文献
[ゼロから作るDeep Learning](https://www.oreilly.co.jp/books/9784873117584/)
ASKfmから会話データをスクレイピングしてみたヅラ

#ASKfmからテキストをスクレイピングする
※本記事は直接DeepLearningとは関係ありません

最近DeepLearningの学習をしており、TensorFlowのチュートリアルのseq2seqをいじり、会話応答できるものを実装してみました。
ただ、日本語の会話データなんてどこにもないよ。。。となり、スクレイピングして集めることにしました。

##実装してみる
実際のソースコードは下記にあります。
https://github.com/ryosuke1217/askfm_q-a_scraper/blob/master/askfm.py

seleniumを使ってChromeからスクレイピングします。

```python:askfm.py
driver = webdriver.Chrome()

driver.get("https://ask.fm/" + word)
```
wordには取得したいURLの「ask.fm/」以降をコマンドラインから渡してあげます。

```python:askfm.py
while True:
    scroll_h = driver.execute_script("var h = window.pageYOffset; return h")
    judge = driver.execute_script("var m = window.pageYOffset; return m")
    previous_h = driver.execute_script("var h = window.pageYOffset; return h")
    #スクロール
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    sleep(3)
    after_h = driver.execute_script("var h = window.pageYOffset; return h")
    if previous_h == after_h:
        break
print('load complete')
```
スクロールしながら画面の高さを取得し、変化がなくなるまで続けることで、
最下層までスクロールできます。

```python:askfm.py
questions = driver.find_elements_by_class_name("streamItemContent-question")
answers = driver.find_elements_by_class_name("answerWrapper")

qas = [(q.find_element_by_tag_name('h2').text, a.find_element_by_tag_name('p').text) for q, a in zip(questions, answers)]
```
画面のHTMLソースのから質問と回答の部分を集めます。

```python:askfm.py
with codecs.open('data/askfm_data_' + word + '.txt', 'w', 'utf-8') as f:
    for q, a in qas:
        if q == '' or a == '' or 'http' in q or 'http' in a:
            continue
        q = q.replace('\n', '')
        a = a.replace('\n', '')
        f.write(q)
        f.write('\n')
        f.write(a)
        f.write('\n')
        f.write('\n')

driver.quit()
```
あとはデータを必要な形に整理し、ファイルに書き出して終了です。

###実行してみた
```askfm_data_partyhike.txt
若いときの浜崎あゆみはリア充オーラが 大嫌いでしたが 最近の浜崎あゆみはむしろブルースを感じるんですよね
ブルースじゃなくて、デブースじゃないの？

就職活動つかれました。何かアドバイスください、、
この時期の頑張りが残りの人生の90%を決めるんだから、多少無理をしても諦めずに走り続けた方がいいよ。たかだか数か月で、残りの数十年が決まると考えれば頑張れるはずだよ。

たまに飲みのゆる募されていますが、毎回大体何人くらいの方が参加されますか？
男女問わず差しでしか飲まないよ。複数でやると盗撮したり2ちゃんねるに個人情報を書いたりとかする輩が混じるからね。あと毎回5～10人DMを貰うけど、信用できそうな人からはあまり来ないから成立しないことの方が多いよ。

駆け落ちしてみたいと思いませんか？
思わないね。

唇と唇目と目と手と手神様は何も禁止なんかしてない？
愛してる～×3

おじさんは通勤電車で痴漢冤罪対策をなにかされていますか？
僕は出社が遅いから満員電車に乗ることはほぼないんだけど、たまに乗ったら両手でつり革につかまって完全防御するよ。
・
・
以下膨大なので省略
```

会話というよりは質問と回答のテキストですが、
うまいこと使おうと思うのでよしとします。

以上、見ていただいてありがとうございました。
Sublimetext  | 複数行を真横にコピー&ペーストする ( 同じ行数を選ぶ )

# コピー元

- コピーしたいテキストを選択する
- `Command+Shift+L` で複数行選択モードに切り替える
- `Command+C` でクリップボードにコピーする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/6e3bb04e-fca3-2634-1b48-4ccbac97e8c5.png)

# コピー先

- コピー元で選んだ行数と、まったく同じ行数を選択する (この例では3行)
- `Command+Shift+L` で複数行選択モードに切り替える
- `Command+V` でペーストする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/adec8f57-4473-57e1-9ab3-73613addf97e.png)

## 成功

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/9ee39434-4e00-2362-782d-7321cdc4247b.png)

# 失敗例

コピー元とコピー先で同じ行数を選ばないと、複数行に対して複数行がペーストされてしまう。

(コピー先で4行選んだ場合)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/a3a394a0-dc5d-2656-c181-eee64793a824.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/edf58ff1-8dd9-8598-771d-c6bdde1bfd94.png)

# 環境

- Mac OS Sierra 10.12.4
- Sublimetext3 ( stable build 3126 )

# 参考

- [Insert a column of text with sublime text 3 - Super User](https://superuser.com/questions/702065/insert-a-column-of-text-with-sublime-text-3)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
ライフゲーム的なもの作ったヅラ

# ライフゲームとは
[![動画](http://img.youtube.com/vi/Y_hG3kCsaYo/0.jpg)](https://www.youtube.com/watch?v=Y_hG3kCsaYo)
***youtubeより拝借***

こんな感じのやつ？
実際のライフゲームとはちょっと違うのかな？
侵略ゲームとも呼ばれてるみたいです。

[Wikipedia ライフゲーム](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0)
実際の定義はこちら。多分僕が作りたいものはライフゲームとは違うっぽい。

# 作ってみよう
普段はpythonを書くことが多いので今回もpythonを採用
python楽です(^q^)

[コードはこちら](https://github.com/miumiu0917/LifeGame)
動作確認はUbuntu14.04+Python3.5でしております。

# ちょっとした解説
Pythonは関数型で書きやすいのでfor文とかif文が減らせて本当に書きやすい
最初はオブジェクト指向で書こうと思ったけど、
リスト内包表記と関数組み合わせるだけでけっこうイケそうだったので、
今回はクラスは作りませんでした。

```python:main.py
def next_state(f, i, j):
  s = f[i][j]
  e = environment(f, i, j)
  if all(map(lambda x: x == s, e)):
    return s
  else:
    num_friend = len(list(filter(lambda x: x == s, e)))
    num_enemy = len(list(filter(lambda x: x != s, e)))
    prob = 50 + (num_friend - num_enemy) * 6
    alive = random.randint(0, 100) < prob
    if alive:
      return FRIEND if s == FRIEND else ENEMY
    else:
      return ENEMY if s == FRIEND else FRIEND
```
メインのロジックがこちら
一つのセルの周り8セル分の現在の環境を取得し、次ステップの状態を決めています。
周りに味方が多いほど生き残りやすく、敵が多いほど死にやすくなってます。
lambdaを使えばらくちんらくちん(^q^)


# 画像に出力
最終的にはGIF動画で戦いの様子を出力します。

```python:main.py
def output_field(f, step):
  f = list(filter(lambda x: not all(list(map(lambda e: e == '*', x))) , f))
  f = list(map(lambda x: list(filter(lambda e: e != '*', x)), f))
  f = list(map(lambda x: list(map(object2color ,x)) ,f))
  arr = np.array(f, dtype=np.int8)
  image = Image.fromarray(arr.astype('uint8'))
  image.save('./tmp/' + '%07d.png' % step) 
```
このコードで2次元配列をRGB値に変換し、tmpディレクトリに出力しています。
最終的にはImageMagickでGIFに変換し、outputディレクトリに出力しております。
2次元配列を扱っているので、lambdaが二重になっています。
lambdaがあればらくちんらくちん(^q^)

# 試しに遊んでみた
![movie.gif](https://qiita-image-store.s3.amazonaws.com/0/183295/82bbd0a4-f1e3-a499-cb5d-4646dabff1bb.gif)
おお、いい感じですね。
パラメータとか工夫しないと一定の状態で収束してしまいますね。
司令官セルを作って周り○マスの勝率に補正をかけたりするとかおもしろいかも。
Wikipediaのルールとは少し違う、オリジナルの実装なので、ライフゲームとは言えないかもしれませんが、個人的には満足してます。

# 感想
Lispで最近遊んでいたおかげで、lambdaが使いやすくなった(というより使おうとすることが増えた)
lambdaがあればらくちんらくちん(^q^)
アスペクト比を保ちながら画像の縮小を行うアルゴリズム

## 概要

ユーザから画像の投稿を受け付ける仕組みがある
ウェブサービスやスマートフォンアプリを作成するとき、
大きすぎる画像を圧縮する１つの考え方を記述します。

## 結論

アスペクト比を保ちながら、
画像のファイルサイズを1MB以下に抑えるためには、
以下のようなリサイズを行えば良い。

### 1. 圧縮係数Cを計算する。

w：画像の幅
h：画像の高さ

```math
C = \frac{1024}{\sqrt{3wh}}
```

### 2. 元の画像の幅と高さに圧縮係数Cを掛ける。（任意）

```math
h_{new} = h \times C \\
w_{new} = w \times C
```

### 例

#### 問題

640 x 853 の Bmp画像を1MB以下にリサイズしたい。

#### 解法1

```math
C = \frac{1024}{\sqrt{3wh}} = \frac{1024}{\sqrt{3 \times 640 \times 853}} \approx 0.80
```

圧縮率80%の画像リサイズを行えば良い。

#### 解法2

```math
h_{new} = h \times 0.80 = 512\\
w_{new} = w \times 0.80 = 682
```

幅512, 高さ682となるようリサイズすると良い。

## 考え方

通常であれば、圧縮係数を計算してリサイズした後、
jpg、png、gifなどの形式に圧縮されることはあっても、
画像サイズが増えるようなことはないでしょう。
したがって、以上の計算式で
**1MB以下の画像サイズ**という制約を守ることができると考えています。

### ビットマップ形式の画像

ビットマップ形式は、各ピクセル、各RGB色ごとに256段階の色を指定する画像形式である。
各色は1バイト（8ビット）なので、ピクセルごとに3バイト（24ビット）必要になる。

つまり、フルカラーのビットマップ形式の画像は、
高さと幅が決まれば、以下の計算式で算出することができる。

```math
Filesize = w \times h \times 3
```

#### 例

640 x 853 のフルカラービットマップ形式のファイル容量は、

```math
Filesize = w \times h \times 3 = 1,637,760Byte = 1637760 \div 2^{20} = 1.561MByte
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/95786/551d6b03-aabb-f722-d47a-f129fd6dca8f.png)


### 圧縮係数Cの導出

ファイル容量が1MBになるとき、以下の計算式が成り立つ。


```math
Cw \times Ch \times 3 = 2^{20} \\
C^2 = \frac{2^{20}}{3wh} \\
C = \frac{1024}{\sqrt{3wh}}
```

#### 例

640 x 853 のフルカラービットマップ形式のファイル容量を1MB以下にリサイズする。

```math
C = \frac{1024}{\sqrt{3 \times 640 \times 853}} \approx 0.80
```

リサイズ後の幅と高さを計算する。

```math
h_{new} = h \times 0.80 = 512 \\
w_{new} = w \times 0.80 = 682
```

検算をする。（参考）

```math
Filesize_{new} = 512 \times 682 \times 3 = 1,047,552Byte \approx 1MByte 
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/95786/8bbf972b-1261-2a53-7911-362ceb912538.png)


## 画像のサイズ縮小アルゴリズム

実用する場合は、jpgやpng、gifの画像を受け取って、
今回の計算でリサイズをすると思います。

### 1MB以上のファイルはリサイズするアルゴリズム

1. アップロードされた画像のファイル形式を保存。
2. ファイルサイズが1MB以上かどうかを判断。1MB以上の場合以下を実行。
3. 画像の高さと幅から、圧縮係数Cを計算。
4. リサイズ。
symfony1.4でjobeetの警告【PHP5.5以降】ソースコード変更箇所

#概要

php5.5以降の環境でsymfony1.4でjobeetを始めると警告がでる・・・

`Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in lib/vendor/symfony/…`

symfony1.4がPHP5.5と互換性がないのが原因です。

ソースコードを手動で変更して対応させる方法を海外の記事で紹介していたので紹介します！！

###リンク
+ [jobeet](http://symfony.com/legacy/doc/jobeet/1_2/ja?orm=Doctrine)
+ [参考記事：Symfony 1.4 over PHP 5.5 | Hasheado Blog](http://www.hasheado.com/symfony-1-4-over-php-5-5/)

##変更箇所
####変更点1
```php:ib/vendor/symfony/lib/command/sfCommandManager.class.php
else if (!is_array($arguments))
     {
       // hack to split arguments with spaces : --test="with some spaces"
-      $arguments = preg_replace('/(\'|")(.+?)\\1/e', "str_replace(' ', '=PLACEHOLDER=', '\\2')", $arguments);
+      $arguments = preg_replace_callback('/(\'|")(.+?)\\1/', function($matches) {
+         return str_replace(' ', '=PLACEHOLDER=', $matches[2]);
+     }, $arguments);
       $arguments = preg_split('/\s+/', $arguments);
       $arguments = str_replace('=PLACEHOLDER=', ' ', $arguments);
     }
```
####変更点2
```php:lib/vendor/symfony/lib/form/addon/sfFormObject.class.php
   protected function camelize($text)
   {
-    return preg_replace(array('#/(.?)#e', '/(^|_|-)+(.)/e'), array("'::'.strtoupper('\\1')", "strtoupper('\\2')"), $text);
+    return sfToolkit::camelize($text);
   }
```
####変更点3
```php:lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/form/sfFormFilterDoctrine.class.php
   protected function camelize($text)
   {
-    return sfToolkit::pregtr($text, array('#/(.?)#e' => "'::'.strtoupper('\\1')", '/(^|_|-)+(.)/e' => "strtoupper('\\2')"));
+    return sfToolkit::camelize($text);
   }
```
####変更点4
```php:lib/vendor/symfony/lib/plugins/sfPropelPlugin/lib/form/sfFormFilterPropel.class.php
   protected function camelize($text)
   {
-    return sfToolkit::pregtr($text, array('#/(.?)#e' => "'::'.strtoupper('\\1')", '/(^|_|-)+(.)/e' => "strtoupper('\\2')"));
+       return sfToolkit::camelize($text);
   }
 }
```
####変更点5
```php:lib/vendor/symfony/lib/response/sfWebResponse.class.php
   protected function normalizeHeaderName($name)
   {
-    return preg_replace('/\-(.)/e', "'-'.strtoupper('\\1')", strtr(ucfirst(strtolower($name)), '_', '-'));
+    return preg_replace_callback('/\-(.)/', function ($matches) { return '-'.strtoupper($matches[1]); }, strtr(ucfirst(strtolower($name)), '_', '-'));
   }
```
####変更点6
```php:lib/vendor/symfony/lib/util/sfInflector.class.php
   public static function camelize($lower_case_and_underscored_word)
   {
     $tmp = $lower_case_and_underscored_word;
-    $tmp = sfToolkit::pregtr($tmp, array('#/(.?)#e'    => "'::'.strtoupper('\\1')",
-                                         '/(^|_|-)+(.)/e' => "strtoupper('\\2')"));
-
-    return $tmp;
+    return sfToolkit::camelize($tmp);;
   }
```
####変更点7
```php:lib/vendor/symfony/lib/util/sfToolkit.class.php
     return set_include_path(join(PATH_SEPARATOR, $paths));
   }
+
+   public static function camelize($text)
+   {
+       return strtr(ucwords(strtr($text, array('/' => ':: ', '_' => ' ', '-' => ' '))), array(' ' => ''));
+   }
 }
```
[swift] configureHOGECell

##設定セルの作成
~~~swift
    public func configureHOGECell(_  cell: SSHOGETableViewCell, hogeResult: SSHOGEResult) {
        
        cell.delegate = self
        cell.image.sd_setImage(with: URL(string: hogeResult.imageUrl))
        cell.setBodyText(hogeResult.text)
        cell.labelDate.text = String (format: "%@", arguments: [hogeResult.date])
        cell.hogeIdentifier = hogeResult.hogeIdentifier
        cell.hogeNo = hogeResult.hogeNo
        cell.labelHOGEName.setText(String (format: "@", arguments: [UQLocalizedString(key: "hoge_text_key")]), forcingNumberOfLine: 2)
    }
~~~

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

* 地域情報 THEメディア
https://the.themedia.jp/
(THE メディア ボランティア編集ライター募集中！!)

* 自己表現としての演劇ワークショップ
https://workshop.themedia.jp/

###協力事業

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

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

## 関連記事

【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/

#スポンサー募集
機械学習論文読みメモ_73


[Stability revisited: new generalisation bounds for the Leave-one-Out](https://arxiv.org/abs/1608.06412)
本論ではleave-one-out(LoO)手法を広いクラスのアルゴリズムに適用した際において、一般的に適用可能な非漸近的な理論保証を与える。
これはこの保証はLoOによる予測と実際の推論誤差との間の乖離に対する上界を与える。
この理論は、L^q stabilityとmomentum inequalityを用いて導出される。
L^q stabilityは従来のhypothesis stabilityを拡張しており、一方でuniform stabilityよりは弱いstability表現になっている。
この理論は緩い条件下のもとleave-one-outに対する新たなPAC exponential generalization boundを導く。
サンプルのboundednessのもとuniform stableなアルゴリズムに対して、上記PACは成り立つ。

[Why does deep and cheap learning work so well?](https://arxiv.org/abs/1608.08225)
本論ではdeep learningの成功が数学だけでなく、物理にも支えられている事を示す。
一般的な理論として、数学的にneural networkは全ての関数を近似できる事が証明されている事は知られている。
しかし実際のネットワークは、一般的なネットワークと比較して指数的に少ない数のパラメータで構成できるよりcheapな構造で対象を近似可能である。
これは対象が結局よりシンプルな物理法則に支配されている事に起因する。
このシンプル化に寄与している具体的な法則としては、symmety, locality, compositionality, およびpolynomial log-probabilityである。
本論ではこれら法則がどのような形でシンプルなニューラルネットワークへ取り入れられていくのかを分析した。
特に、データ生成プロセスが物理と機械学習双方に関係が深い階層的プロセスであった場合、そのdeep learningモデルの構造がもはやshallow networkのものよりも簡素化される。
本論ではこれらの主張を、情報理論の観点から議論し、特にrenormalization groupと関連付ける。
またいくつかのno-flattening theoremを導出し、つまり線形活性化関数で成り立っているニューラルネットワークであれどもそのshallow networkへの近似は高コストである事、あるいは多項式関数を利用した場合は指数的にコストが増大する事を示した。

[“Why Should I Trust You?” Explaining the Predictions of Any Classifier](http://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf)
機械学習モデルはブラックボックスなものが多く、その予測に対する説明は難しい。
しかし予測を説明する事は、そのモデルを採用するための判断や、モデルに対する洞察を与えるに際して重要である。
本論では、LIMEと呼ばれる、任意の分類モデルに対して適用可能な予測説明手法を提案する。
これは予測値周辺における理解可能なローカルモデルを学習する事で実現される。
また本論ではある予測に対する表現とそれに対する説明を無駄のない形で実現する手法を提案する。
この手法は劣モジュラ最適化問題として定式化される。
機械学習論文読みメモ_72


[Computational and Statistical Tradeoffs in Learning to Rank](https://arxiv.org/abs/1608.06203)
大規模かつ異質なデータが与えられた場合、限られたリソースを用いた推論の精度に保証を与える事は重要である。
本論では順位の学習において、データに対するスケッチを用いた複雑性予測を行う事で、階層的なrank breaking手法を適用する。
Rank breakingでは、異質データをより簡単な部分的データに切り分け、その部分における順位情報をそれぞれ別々に利用して総合的な順位を予測する。
この手法は、データ点の取得量と計算リソースを対比させ、かつ精度に対するトレードオフを与える事を可能にした。

[Katyusha: The First Direct Acceleration of Stochastic Gradient Methods](https://arxiv.org/abs/1603.05953)
Katyushaと名付けられた、直接的、主問題のみ利用のstochastic gradient descend手法を提案する。
この手法は凸最適化問題を高速化できる事が証明出来ている。
従来手法は例えばdual coordinate descentなどであり、これは制約が大きいか、あるいは確率的である特徴を覆い隠してしまうようなouter-inner loopに頼る部分が大きい。
本手法は、初めて直接的に確率的最適化に対して高速化を適用可能にした。
本手法は従来手法と異なり、最適な収束レートを持つ。
本手法はさらにproximial update、non-Euclidian norm smoothness、non-uniform sampling、mini-batch samplingにも対応している。
本手法の鍵となる要素としては、Katyusha momentumと呼ばれる、通常のmomentumの上へさらに新たなnegative momentumを加える事にある。
これは従来提案されてきているvariance reduction手法と合わせて利用可能で、それらを高速化する事が可能である。

[DENSELY CONNECTED CONVOLUTIONAL NETWORKS](https://arxiv.org/abs/1608.06993)
最近の研究によりCNNはより深い構造を獲得する事が可能になってきた。
こうしたネットワークは各層が前後の層に接続するような構造を持っている。
本論ではこれに対して、各層は他の全ての層へ直接的につながっているような構造としてDenseNetを提案する。
各層から出力された特徴は、それぞれ全て別々の入力として別の１つの層へ入力される。
この構造を利用する事で、vanishing gradientを軽減し、特徴情報を伝播を強化する事ができる。
層間の接続数は相対的に増加するが、特徴の再利用などの効果を発揮でき、結果的にモデルサイズが小さくでき、一般化する能力が高まる。
機械学習論文読みメモ_71


[Viewpoint and Topic Modeling of Current Events](https://arxiv.org/abs/1608.04089)
すべての物語にはその見方によって複数の側面がある。
従来のトピックモデルにはこの事を考慮に入れたモデルはない。
本論ではそれを可能にしたモデルを提案し、また得られた各側面のトピックを理解可能な形で提示可能にした。
これらは教師なし学習によって実現できる。
提案モデルはトピックと視点との間の関係を学習し、同じ視点によって構成されるグループを構築する。

[Outlier Detection on Mixed-Type Data: An Energy-based Approach](https://arxiv.org/abs/1608.04830)
従来の異常検知手法は連続値と離散値が混合しているようなデータを扱う事は難しい。
本論ではこうしたmixed dataに対しても異常検知を適用可能な手法としてmixed variate rbm (mvrbm)を提案する。
このモデルではfree energyに基づいた異常検知指標を利用する。
また学習や推論において高速な計算を可能にし、大規模データに対しても対応可能である。

[Anytime algorithm for frequent pattern outlier detection](https://link.springer.com/article/10.1007/s41060-016-0019-9)
従来の異常検知手法は頻度に基づいた指標に基づいて異常度を算出してきた。
だがこの手法を用いるには全ての事象に対する頻度を知る必要があり、計算コストが高くなりがちである。
本論では、それに対し、ユーザーが任意のタイミングで異常度を計算する事ができる指標としてFPOFを提案する。
FPOFはパターンのサンプリングをしていく事で、そのパターンの外れ値を検出していく。
またFPOFの予測誤差の最大値を導出する事が可能である。
機械学習論文読みメモ_70


[Learning Structured Sparsity in Deep Neural Networks](https://arxiv.org/abs/1608.03665), NIPS2016
Structured sparsity正則化を利用した効率的なdeep learningの最適化手法を提案する。
この正則化を利用する事でよりコンパクトなモデル構造を実現可能である。
また得られるstructured sparsityはhardware-friendlyであり、計算の高速化が可能になる。
最後に判別性能を向上させる事も可能になる。

[Anomaly detection and classification for streaming data using partial differential equations](https://arxiv.org/abs/1608.04348)
Nondeterministic sorting, またの名をpareto depth analysis(PDA)は多目的最適化のための手法として使われるが、最近は複数criteriaを利用した異常検知においても重要になっている。
PDAはdominance、つまりある解が他の解に対して目的関数がより良い、が各解、各目的関数に関してどのような関係があるかを解析し、dominaceの優劣で順序化し、解を選択する。
この手法は異常検知指標を用いて異常検知に用いる事も可能になっている。
本論ではこの異常検知手法に関して偏微分方程式のcontinuum limitisの理論を応用する事でストリームデータに対するオンラインの適用を可能にした。

[Design of Efficient Convolutional Layers using Single Intra-channel Convolution, Topological Subdivisioning and Spatial “Bottleneck” Structure](https://arxiv.org/abs/1608.04337)
CNNの計算複雑性を改善するための手法を３つ提案する。
まず３Dの畳み込み処理は空間的に、チャンネルを含めてチャンネル間で交差可能な線形写像を行っていると考える事ができる。
この構造を分解し、また空間的に逐次的な畳み込みを行う事で、新たに計算コストの微小なチャンネル間畳み込みと、線形畳み込みをそれぞれ提案する事ができる。
またbottleneck構造を提案し、これはconvolution, projection, deconvolutionのセットで成り立ち、隣接ピクセルを活用するための構造として用いる事ができる。
これらの畳み込み構造を用いる事で従来手法と比較して性能を改善する事が可能になる。
天気データの提供サービスを調査しました

# **過去** の天気データを提供しているサービスを調査しました

## 調査の概要

### 目的

**天気データ** とその他の時系列データを紐付けて、分析すると何か新しいことがわかるかも？  
ということで **天気データ** を提供しているサービスと特徴を調査しました。

**注意点** )

* 天気 **<span style="color:red">予報</span>** データは今回欲していない
* **<span style="color:red">過去</span>** の天気データがほしい


### 調査項目

* サービス名
* 利用料金（初期費用）
* 利用料金
* 通信方式
* データ・フォーマット
* 利用制限
    * 最大アクセス回数
    * 通信速度
    * データ容量
* *その他*



## 調査の結果


### [日本気象株式会社](https://n-kishou.com/corp/ya)

#### 利用料金（初期費用）

0円

#### 利用料金

| 利用データ名             | 金額           |
|--------------------------|----------------|
| 日本気象オリジナルデータ | 月額38,000円～ |
| 気象庁データ             | 月額15,000円～ |

#### 通信方式

FTP
（契約者側にデータ受信用FTPサーバが必要。）

#### データ・フォーマット

不明

#### 利用制限

* 最大アクセス回数  ：要問合せ
* 通信速度          ：要問合せ
* データ容量        ：要問合せ



### [天気予報API｜天気予報、指数情報をAPIで提供](http://tenkiapi.jp/index.html)

*「天気予報APIサービス」は、原則として法人、団体向けに有料で提供されるサービスとなります。*

#### 利用料金（初期費用）

100,000円

#### 利用料金

| 項目                   | 基本情報利用費 |
|------------------------|---------------:|
| 25万/月リクエスト未満  |       60,000円 |
| 50万/月リクエスト未満  |       80,000円 |
| 100万/月リクエスト未満 |      105,000円 |
| 200万/月リクエスト未満 |      130,000円 |
| 200万/月リクエスト以上 |       要見積り |

#### 通信方式

* REST

#### データ・フォーマット

* XML
* JSON

#### 利用制限

**利用料金を参照**



### [Weather Hacks - livedoor 天気情報](http://weather.livedoor.com/weather_hacks/)

天気 **<span style="color:red">予報</span>** データの取得しか無い

#### 利用料金（初期費用）

0円

#### 利用料金

0円

#### 通信方式

* REST

#### データ・フォーマット

* XML
* JSON

#### 利用制限

**無し**



### [Weather Hacks - livedoor 天気情報](http://weather.livedoor.com/weather_hacks/)

天気 **予報** データの取得しか無い

#### 利用料金（初期費用）

0円

#### 利用料金

0円

#### 通信方式

* REST

#### データ・フォーマット

* XML
* JSON

#### 利用制限

**無し**
ActiveDirectory:[GPO・制限されたグループ]指定したユーザのみ権限を与える　or　指定したユーザ+もとのユーザにも権限を残す


#はじめに

以前こちらの記事でご紹介した、ADアカウントにローカル管理権限を設定する方法について新たなことがわかったので、情報更新です。

[[ActiveDirectory]ADアカウントユーザにデフォルトでローカルユーザの管理権限を設定する方法](http://qiita.com/ai-2723/items/3d4ed7dc583622e76551)
※前回の記事にも簡単に修正を加えています。

#前回のさらっとまとめ

前回の記事では、ADアカウントが初回ログイン時からデフォルトでローカルの管理権限をもつ、すなわちAdministratorsに所属するように設定する方法をご紹介していました。

例)DomainUsersをAdministratorsに所属させる。
[制限されたグループ]の設定では、以下２パターンの設定方法があります。
①
Administratorsのメンバーシップ構成に**このグループのメンバー**として、DomainUsersを追加する方法
![GPO06.png](https://qiita-image-store.s3.amazonaws.com/0/174392/59a0c6fb-9d5c-e642-170c-78dd6c0ca2cf.png)


②
DmainUsersのメンバーシップ構成に**このグループの所属**として、Administratorsを追加する方法
![GPO07.png](https://qiita-image-store.s3.amazonaws.com/0/174392/207fc68a-3296-cee0-0b90-3ae528b92b42.png)

前回アップした記事では①、②両方向からメンバーへ所属させる方法をとっていました。
が、その後調べているとドメイン参加後のローカルAdministratorsグループをどのようにしたいか、によって設定の仕方が異なることがわかりました。

#指定したユーザのみ権限を与える　or　指定したユーザ+もとのユーザにも権限を残す

①
Administratorsのメンバーシップ構成に**このグループのメンバー**として、DomainUsersを追加する方法
![指定のユーザだけに権限を与える.png](https://qiita-image-store.s3.amazonaws.com/0/174392/cc1d859c-5411-dc94-4606-da6a7c82fdd7.png)

上記の設定を行った場合、
ここで設定したユーザのみ、このキャプチャでいうDomainUsersと黒塗りしているグループの２つのグループのユーザだけに管理権限が与えられる。
そのため、もともとAdministratorsに所属していたメンバーは全て権限から外れてしまいます。
ただしAdministratorの管理権限はそのまま残ります。

![パターン1.png](https://qiita-image-store.s3.amazonaws.com/0/174392/5bee2fb9-c2b4-5501-92ab-d37f10c646a7.png)

ローカルでAdministratorsに所属していたメンバーは除外されてしまいました。


②
DmainUsersのメンバーシップ構成に**このグループの所属**として、Administratorsを追加する方法
![指定したユーザも追加する.png](https://qiita-image-store.s3.amazonaws.com/0/174392/4855b1cc-43c2-0d9b-a942-5e710e025cef.png)
こちらの場合は、DomainUesrsの他にもともと設定されていたローカルユーザはそのまま残ります。DomainUsersが新たに追加される状態です。

ローカルのAdministratorsのグループ構成を確認してみます。

![パターン２.png](https://qiita-image-store.s3.amazonaws.com/0/174392/172dce8d-e59d-348d-3db0-d16a57743191.png)

既存ユーザと新たに追加したドメインユーザグループの両方がAdministratorsに入っています。

#想定する利用方法に応じて使い分けが必要

ADユーザに対してデフォルトでローカルの管理権限を追加する方法は①もしくは②どちらの方法でも実現可能ですが、
ローカルユーザの管理権限をどうするのか？
によって設定の仕方が変わってきます。

ローカルユーザに管理権限を残すか残さないか、今一度確認の上設定を行うことをおすすめします。

ちなみに前回の記事で両方向から設定を行った際は、既存のローカルユーザの権限はなくなってしまいました。
おそらく①で設定した内容が優先して？反映されていた、ということになります。

今回はローカルユーザの権限を残す形でドメインユーザグループの追加を行いたかったので、パターン②の方法で設定を修正しました。
コンパイルエラーでUE4プロジェクトが開けない場合の対処法

# 現象
他の人から譲渡されたUE4のプロジェクトを開こうとすると、コンパイルエラーが出て開けない現象が起きていました。

具体的な現象は以下です。

.uprojectファイルをダブルクリックするなどして、UE4で開く操作をします。
すると、以下のダイアログが出ます。

![ss_ue4_dialog1.png](https://qiita-image-store.s3.amazonaws.com/0/83524/94527492-0b12-f364-7566-3f639f990432.png)

> The following modules are missing or built with a different engine version:
UE4Editor-[パッケージ名].dll
Would you like to rebuild them now?

「UE4Editor-[パッケージ名].dll がないか、現在インストールされているUE4のバージョンとの互換性がない」と言われています。
再度ビルドするかという問いに「はい」を選択します。

ビルドが始まりますが、最終的に以下のエラーダイアログが出てビルドに失敗します。

![ss_ue4_dialog2.png](https://qiita-image-store.s3.amazonaws.com/0/83524/5be72533-d3b2-42a5-aefa-db7c40a6ab78.png)

> [パッケージ名] could not be compiled. Try rebuilding from source manually.

「コンパイルに失敗したから手動でソースコードをビルドし直せ」と言ってきています。

# 対処法
### 1. UE4プロジェクトから.sln(Visual Studio ソリューション)を生成する
エクスプローラーで.uproject ファイルを右クリックします。

![ss_ue4_right.png](https://qiita-image-store.s3.amazonaws.com/0/83524/fc4dd77b-5b5a-5638-35b8-70f294147638.png)

Generate Visual Studio Project Files を選択します。

![ss_ue4_vs.png](https://qiita-image-store.s3.amazonaws.com/0/83524/ead6b080-d695-dda8-7eb4-b1e26c2d6b1b.png)

.sln ファイル (Visual Studio ソリューション) が生成されます。

### 2. 生成したソリューションをVisual Studioで開いて編集する
生成したソリューションをVisual Studioで開いてビルドを実行してみると、コンパイルエラーになりました。
ソリューションの中のソースファイルなどを編集し、コンパイルエラーを解消します。
(私の場合、`#include` で指定していた外部ライブラリのソースファイルが一部消えていたのが原因でした)

### 3. 再度UE4プロジェクトを開く
コンパイルエラーが解消され、Visual Studioでビルドが成功するようになったら、再度UE4プロジェクトを開いてみましょう。
ダイアログが出ることなくUE4が立ち上がり、プロジェクトが無事に開きました。

# 備考
Visual Studio がインストールされていない環境での対処は私は試していません。
IDEがなくてもUE4プロジェクトフォルダより下にあるC++のソースファイルを全て見ていけば解決できると思われます。
ver4以降のMiddlemanでjqueryを使う


最近、静的サイトを作るタスクがあったので周りも使っていたMiddlemanで作ろうと思いました。

`Middleman JQuery`でググったら`gem 'jquery-middleman'`とか出て簡単と思ってました。
ただ、現実は違いました。

公式サイトより
https://middlemanapp.com/jp/advanced/external-pipeline/

> 私たちはフロントエンド言語とツールの爆発的増加のただ中にいます。 開発が始まって以来, Middleman はフロントエンドの依存関係の管理とコンパイルに 対するソリューションとして Rails のアセットパイプライン機能を備えていました。

> ここ数年で, コミュニティは Rails から離れ NPM のタスクランナー (gulp, Grunt) や依存管理 (Browserify, webpack), 公式ツール (EmberCLI, React Native) やトランスパイラ(ClojureScript, Elm) に焦点を 合わせるようになりました。

依存管理に関しては、脱Railsと言うことか。。。
（後述しますが、無理やり使うgemがあります。）

環境
---

* middleman 4.2.1
* npm 5.0.0
* node 8.0.0

JQueryをWebpack経由で入れる。
---

本題です。公式でも紹介されている通りwebpackを用いてJQueryを入れてみます。
~~JQueryくらいファイルぶちこめばいいじゃん~~

ここからの作業は全て、middlemanのルートディレクトリで行っています。


### 1. 今回使いjsのパッケージをnpm経由でダウンロードする。

package.json

```
{
  "name": "my_packages",
  "version": "0.0.0",
  "description": "",
  "author": "RyujiKawazoe",
  "dependencies": {
    "jquery": "^3.2.1"
  },
  "devDependencies": {
    "webpack": "^2.6.1"
  }
}
```

下記のコマンドを実行する。

```
npm install
```

そうすると、jqueryとwebpackが`node_modules`というディレクトリの中にインストールされます。

### 2. webpackの設定ファイルを用意

webpackは`webpack.config.js`というファイルをデフォルト設定ファイルとしてみているらしいです。

webpack.config.js

```
module.exports = {
    entry: {
        site: './source/javascripts/site.js'
    },
    output: {
        path: __dirname + '/.tmp/dist',
        filename: 'javascripts/[name].js'
    }
};
```

これは、`./source/javascripts/site.js`での記述内容を`.tmp/dist/javascripts/site.js`に書き出すという意味になります。

### 3. site.jsにjqueryをロードするコードを書く。

先ほどの`./source/javascripts/site.js`に書く内容です。

site.js

```
var $ = require('jquery');
alert($.fn.jquery);
```


### 4. webpackの挙動の確認

```
./node_modules/webpack/bin/webpack.js --bail
```

上記のコマンドを打つと

`.tmp/dist/javascripts/site.js`が出来上がっていると思います。
中を見てみるとJqueryのコードがありますね。

### 5. config.rbで外部パイプラインを使って、build/以下に配置する

middleman 4.xから追加された`external_pipeline`を使って、配置を行う

config.rbに下記の行を追加

config.rb

```
activate :external_pipeline,
         name: :webpack,
         command: build? ? './node_modules/webpack/bin/webpack.js --bail' : './node_modules/webpack/bin/webpack.js --watch -d',
         source: ".tmp/dist",
         latency: 1
```

おなじみの下記のコマンドを叩くと、build/javascrpitsいかにjQueryが展開される


```
middleman build
```



【無理やり編】3.xで使ってたsprocketsを使う
---

**webpackに行き着くまでに一度試したくらいの内容なので、正しい情報じゃない可能性があります。**
https://github.com/middleman/middleman-sprockets


Gemfile

```
gem 'middleman-sprockets'
```

config.rb

```
activate :sprockets
```




気をつけたほうがいいこと
---

* npmやnodejsのバージョンは確認しましょう。webpackがエラー起きる可能性があるので。





参考にしたサイト
---

http://qiita.com/mm36/items/59632e6cfad208b52ad2
https://github.com/Instrument/middleman-template/tree/master/template
https://rossta.net/blog/using-webpack-with-middleman.html
Kusanagiのsshの設定


自分用メモ。書き途中。


kusanagiは、CentOS 7ベースっぽい。

## kusanagiコマンド

sshのユーザを決めて、鍵生成はできない?
kusanagi init時に作成する

かなり扱いにくい。


## ssh用ユーザ作成


* つくる!
* wheelに追加


## sshd_configの設定

* ポート変更
/etc/ssh/sshd_config

```
#Port 22
Port 55555

#Protocol 2
Protocol 2

#PermitRootLogin yes
PermitRootLogin no

#PubkeyAuthentication yes
PubkeyAuthentication yes

PasswordAuthentication yes
PasswordAuthentication no
```

sshdの再起動

```
systemctl restart sshd.service
```


## firewallのポート開ける、閉じる


port 55555を通す

```
# firewall-cmd --add-port=55555/tcp
success
# firewall-cmd --permanent --add-port=55555/tcp
success
```


port 22を閉じる

```
# firewall-cmd --remove-service=ssh
success
# firewall-cmd --permanent --zone=public --remove-service=ssh
success
```

参考
[KUSANAGIにSSHでつなぐためにセキュリティを強化する | 有限工房](https://ygkb.jp/2397/)
[SSH のポートを変更する - ConoHa で KUSANAGI その3 - IMPOV::In My Point Of View](http://impov.hatenablog.com/entry/2016/05/30/174948)
2つのアプリの間で、共通項を結びつけ、入力の手間を省く

![wfc20161109001.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/5055370e-e146-218d-c1bb-333aea06c19f.jpeg)

SaaSForceで2つのアプリケーションを作って、その共通項を結びつけることで、同じ物を2度入力する手間を省くために「テーブル関係定義」と言う機能を使います。

そのため、まず、一例として2つのテーブルをSaaSForceに格納されているテンプレート･テーブルから選び出します。

今回は「M_学生テーブル」と「M_学校テーブル」を選んでみます。

両方を｢テーブル項目定義」を作成する要領で作るのですが、「M_学校テーブル｣で少々設定を改変します。

「学校ID」の｢編集｣をクリックしてこのような画面をポップアップさせます。

![wfc20161109002.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/16264cca-0cf1-0345-7e29-f5060fec0e4b.jpeg)

そして、「デフォルト表示形式｣のリストから「1.Dropdownlist」を選択して｢確定｣ボタンを押します。

次に、保存をします。

両方のテーブルを完成させて保存したあとに、「画面項目定義」を開き、｢検索条件｣、「新規」をクリックして次の画面を開きます。

![wfc20161109004.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/aa5f730c-fa90-8cf1-4b42-c9615e54e1b8.jpeg)

次に、左側にある｢編集情報」の「g」と「m」の「選択」にチェックを入れ、右側に生成された画面項目の｢選択｣にチェックを入れ、さらに、「g」の項目にはグリッドのところを一つ一つチェックを入れます。

そして、「グリッド名」に適当な英数字を半角で入れます。

![wfc20161109005.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/d3582c08-2be0-1c34-6b26-2021fd051999.jpeg)

あとは「画面項目定義」の作成のやり型どおりにテストサーバーに登録してから保存します。

![wfc20161109006.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/59c73be3-be82-a6bf-b14a-8d916c4f2641.jpeg)

画面レイアウト設計のページを開いて、画面デザイン画面を開き、最終的な設定をします。


グリッドのパーツの上のほうで右クリックすると、編集するリストが出てくるのでそのなかから「Grid定義」を選びます。

![wfc20161109008.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/6cdd5576-e183-e137-a7d7-71f2d229fee4.jpeg)

「スタイル設定｣をクリックして、「フッター表示｣、｢縦スクロール表示」、そして、｢フッター位置｣にチェックを入れます。

｢フッター位置｣ですが、下では多くの人が見つけにくいので上を選択することを推奨しています。

![wfc20161109010.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/f898a7d2-5ca4-e432-4c3e-100a786c771c.jpeg)

次に、同じくグリッドのパーツの｢学校ID」のところで右クリックをして｢列定義」を選択します。

![wfc20161109011.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/22e99361-15da-a24a-ff81-05447957dc6a.jpeg)

そうすると次のような画面がポップアップします。

![wfc20161109012.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/6d3c9533-4c02-e5ba-aadb-80fc17a32124.jpeg)

「リスト｣から「テーブルから」を選び、｢リスト編集情報｣から「ｍ（～ここに何か入る可能性があります～）」を選び、｢リスト項目」から｢学校ID」を選び、保存します。

そして、この画面自体を保存してから、一度開発環境からログアウトして、それから今度はテストサーバーのIDとパスワードでログインをします。

![wfc20161109014.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/6c79de7e-2933-c6df-b0f3-d33220471e13.jpeg)

アプリを起動して、適当な情報を入力します。

ここで、共通項目である｢学校ID」をはじめ必須項目を上のアプリで入力して、一度保存します。

![wfc20161109015.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/e9cd3967-a1b9-e058-4964-ebb3c52536f9.jpeg)

それから下のアプリの「+」を押すと入力するスペースが出て、｢学校ID」の部分がドロップダウンリストになって表示されるので、そこから上のアプリに入力した学校IDを選びます。

これで、同じ項目を2度入力する手間が省けるわけです。

なお、今回は省きましたが、それぞれのテーブルからそれぞれのアプリを作っておくと、それぞれの情報は個々のアプリで表示されます。
Selenium　リンクを順にクリックして個別ページの要素を取得する

#一覧ページのリンクを一つづつクリックして個別ページの要素を取得する

前回はSeleniumを使って一覧ページの要素を全取得してページ送り、というのをやりました。今回は

１．一覧ページのリンクをクリック
２．個別ページを開いて要素取得
３．一覧に戻って次のリンクをクリック
４．個別ページを開いて要素取得

をやりました。

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

DRIVER_PATH = os.path.join(os.path.dirname(__file__), 'chromedriver')
browser = webdriver.Chrome(DRIVER_PATH)
url = 'https://wwwXXXX'
browser.get(url)
time.sleep(5)
for i in range(3):
    try:
        name_list = []

        path_front = '//*[@id="main"]/ul/li['
        count = 1
        path_end = ']/div[1]/a'

        for _ in range(5):
            path = path_front + str(count) + path_end
            for l in browser.find_elements_by_xpath(path):
                l.click()
                for t in browser.find_elements_by_xpath('//*[@id="main"]/div[1]/h1'):
                    name_list.append(t.text)
                    browser.back()
                    count += 1


        for name_title in zip(name_list):
            print (name_title, "\n+++++++++++++++++++++++++++++++++++++++++++++++++++")

        link_elem = browser.find_element_by_class_name('nextpostslink')
        link_elem.click()

        time.sleep(5)
    except:
        print ('not found!')

browser.close()
```

処理周りが全く美しくないのですが、結局のところリンクをliの何番目、というのを追加して行っている感じになりました。とはいえ、これでほぼ目的が達成できたので終了です。
シェルスクリプトで大量にechoすると遅い

1〜500000を出力するプログラムを、bashとrubyで比較してみました。
bashとrubyのバージョンはそれぞれ 4.3.48 と 2.4.0 です。

```shell-session
$ time for i in {1..500000}; do echo $i > /dev/null; done

real	0m5.426s
user	0m4.212s
sys	0m1.168s
$ time ruby -e '1.upto(500000) {|i| puts i}' > /dev/null

real	0m0.537s
user	0m0.496s
sys	0m0.004s
```

10倍もの差がつきました。

`echo`を50万回起動するのが遅いんでしょうかね？
あるいはrubyは出力をバッファリングしているはずですが、bashはしていないから？

繰り返しの回数をいろいろ変えてみたところ、1000回程度の繰り返しなら外部コマンド起動のオーバーヘッドのほうが大きいようで、for+echoが早いですが、10000回で同じくらいの実行時間になりました。

数万回の繰り返しになってくると、echoをforで回すのはやめたほうが良さそうです。
【JavaScript】EventLockerでイベントを止めよう

# イベント処理を一時的に止めたい事ってありませんか？

submitボタンの連打を防止したり、ajax中に処理が終わるまで、
他のイベント処理をさせたくなっかたりすることありませんか？

その度にフラグを使ったり、画面を覆うようなDIVを作成したりしていませんか？

# EventLockerでイベントを止めちゃいましょう！

そんな時に役立つのが今回ご紹介するEventLocker!
EventLockerを使うと、いつでもイベントをロック(止める)することができます。
もちろんそのイベントのロックの解除も行うことができます。

# EventLockerの使い方
使い方は簡単！
ロックしたいイベント名を指定して、EventLockerをnewして、lockするだけ。
解除するときはunlockしてください。
jQueryにも依存してないから使いやすいし、特定のイベントだけロックできるから安心ですね。
理屈としては、デリゲーターのキャプチャフェーズでイベントの伝播を止めています。

```js
new Eventlocker({ delegator: obj, events: ['click'] });
```
のようにデリゲーターも指定できます。

delegatorのデフォルト値はdocumentです。
eventsのデフォルト値は`['click', 'dblclick', 'mousemove', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave', 'wheel', 'keydown', 'keypress', 'keyup' ]`です。

# サンプルプログラム

<a href="https://github.com/pgman/eventLocker">こちら</a>からEventLockerライブラリとサンプルプログラムをダウンロードできます。
RailsのRoutingの省略まじでおこ

## これはなに？
[RailsのRoutingに慣れ始めた話](http://qiita.com/makua/items/86f20ee3eddd39b4c351)はしましたが、まだ慣れ始めなので省略に慣れていないのです。
そこでdocumentとかを調べたのですが、調べきれなくて人に聞いたRoutesに関する話をつらつらと書きます。

## 省略、好きだよね
どこの世界の人も、基本的に省略から逃れられない。だっていちいち全部(それこそステートレスに)話していたら疲れる。なんだって省略したほうが、その省略が聞く世界では最速になる。

## 初めてなの
しょうがない部分があるとは思いつつ、初めての仕様だったりして、しかもググっても出てこない系は本当にこまる。ググりょくが足りないのはわかる。

## で？
問題はこれ

```
   Prefix Verb   URI Pattern                 Controller#Action
     user PUT    /users/:id/update(.:format) users#update
    users GET    /users(.:format)            users#index
          POST   /users(.:format)            users#create
 new_user GET    /users/new(.:format)        users#new
edit_user GET    /users/:id/edit(.:format)   users#edit
          GET    /users/:id(.:format)        users#show
          PATCH  /users/:id(.:format)        users#update
          PUT    /users/:id(.:format)        users#update
          DELETE /users/:id(.:format)        users#destroy
```
`rails routes`をすると出る結果で、prefix + "_path"で相対パス(つまり/hogehoge/higehige)ができるという一覧。(ちなみにver 5.0以前は`rake routes`だったはず。)
これの読み方がわかっていなかったのです。

## どこが省略されているか？
prefixに穴がいっぱいあるのですが、それを叩きたくなりました。
そのとき上記の表を見て、"Prefix無いじゃん！"となったのがことの始まりです。(例えばpatch /users/:id叩きたいけど無いぞ・・・・みたいな)


## 結論。
結論から言うと、**Prefixが省略されているのです**。
[こちら](http://qiita.com/makua/items/86f20ee3eddd39b4c351)でも書いたとおり、**RailsはHTTPのメソッドとURLの組み合わせでルーティングします。** 要するに、method + prefix_pathで叩けばいいんだよと。
そこで上の表を見ると、混乱するわけですが、下記のようにかけば初心者には優しいと思います。

```
   Prefix Verb   URI Pattern                 Controller#Action
    users GET    /users(.:format)            users#index
    users POST   /users(.:format)            users#create
 new_user GET    /users/new(.:format)        users#new
edit_user GET    /users/:id/edit(.:format)   users#edit
     user GET    /users/:id(.:format)        users#show
     user PATCH  /users/:id(.:format)        users#update
     user PUT    /users/:id(.:format)        users#update
     user DELETE /users/:id(.:format)        users#destroy
```

## まあ
書かないほうがきれいだし、知っていればわかりやすいけどそれどっかに書いといてくれ。

## 参考
http://railsdoc.com/routes

## 追記
わりと適当なこと書いてました。routesとprefixの対応直していただきましたありがとうございます。。。。
TensorFlowで今日の気温を予測するヅラ

# 今日の気温予測
TensorFlowの勉強したいけど、何を作ればいいかわからず、先輩に相談。

ワイ「先輩、TensorFlow使って機械学習の勉強したいんですけど、なんかいい題材ないすか？」
先輩「うるさい。忙しいから後にして。」
ワイ「…」

東京の気温でも予測しよう。。。(´・ω・｀)


# 入力データセット
気象庁が過去の色んなデータを公開しているので、ここからcsvをダウンロード
http://www.data.jma.go.jp/gmd/risk/obsdl/index.php

教師データは大阪と東京の2005年から2015年の10年間分の平均、最高、最低気温
テストデータは直近1年の平均、最高、最低気温

```
11.7,16.8,7.1
13.5,18.5,8.6
12.7,18.3,9
9.2,14.5,6.5
12,18.4,4.4
16.2,23.2,9
```

こんな感じで10年分

# 実装してみた
[こちらが実際のコード](https://github.com/shohei-ojs/Prediction--temperature)

入力データは
[batch_size, 3, 9]のshapeで、平均気温、最高気温、最低気温の順で、大阪の1週間分、東京の前々日、前日分で長さ9のTensorを用意

単純な4層パーセプトロンで実装

flatten→FullConnect→activation→(繰り返し)→(平均気温、最高気温、最低気温)で出力
後からDropoutとかL2lossとかも追加してみた

# 結果

matplotlibで実際の気温と予測結果をプロットしました

![average.png](https://qiita-image-store.s3.amazonaws.com/0/186153/0c27bfbe-bba4-e771-273c-752f47309eb3.png)
![max.png](https://qiita-image-store.s3.amazonaws.com/0/186153/2bf1cb9a-9302-02d9-4131-866d17e3fc62.png)
![min.png](https://qiita-image-store.s3.amazonaws.com/0/186153/666d61d1-e436-20d5-8706-c0cd289a923f.png)

大したネットワークでもないので、学習はCPUで十分。
ユニット数も少なめで十分だったので、一瞬で学習終わります。

んー最高気温の予測が結構難しい。。
まあ、入力データの次元が相当少ないのでこれが限界なのかなーと。
パラメータ増やしても性能上がらなかったので、ほかの気象データを入力に加えない限りこれ以上の精度は望めないと判断し、終了。

# 感想
tf.layers系のAPI使いやすい
明日の気温はGoogleさんに聞こう
思いついたら改善してみる

どなたか優しい方、アドバイスいただけると嬉しいです！！！
Amazon LinuxでLibre Officeをつかう

## 概要

AWS上で Libre office をつかえるようにしたときのメモ

基本的にドキュメントの通りにおこなった
[Installing LibreOffice on Linux](https://wiki.documentfoundation.org/Documentation/Install/Linux#First_time_installing_LibreOffice_on_GNU.2FLinux.3F)


## ダウンロード
ダウンロードしたいディレクトリに移動してダウンロード

```
$ wget http://donate.libreoffice.org/home/dl/rpm-x86/5.3.3/ja/LibreOffice_5.3.3_Linux_x86_rpm.tar.gz
```

## インストール
```
$ tar xvzf LibreOffice_5.3.3_Linux_x86_rpm.tar.gz
```

```
$ rpm -ivh LibreOffice_5.3.3_Linux_x86_rpm/RPMS/*.rpm
```

## 動かしてみた
これで動くはずなので試してみる

```
$ /opt/libreoffice5.2/program/soffice.bin --help
```

すると、以下のようなエラー

```
/opt/libreoffice5.2/program/soffice.bin: error while loading shared libraries: libcairo.so.2: cannot open shared object file: No such file or directory
```


そこで、`libcairo.so.2`がふくまれているyumパッケージを`whatprovides`をつかって探してみた


[RPM依存ライブラリ不足の問題はYUMに聞こう！](http://www.geek.sc/archives/620)
というサイトを参考にした


```
$ yum whatprovides libcairo.so.2
cairo-1.12.14-6.8.amzn1.i686 : A 2D graphics library
Repo        : amzn-main
Matched from:
Provides    : libcairo.so.2


cairo-1.12.14-6.8.amzn1.i686 : A 2D graphics library
Repo        : @amzn-main
Matched from:
Provides    : libcairo.so.2
```

`cairo`が`libcairo.so.2`を含んでいるようなのでインストールしてみた


```
$ yum install cairo
```

そして再度

```
$ /opt/libreoffice5.2/program/soffice.bin --help
```

としてうごかしてみると、しっかりオプションなどがみれて使えるようになった。


## 参考サイト

whatprovidesについては以下のサイトなどを参考にした

- [YUM WHATPROVIDESのすすめ
](http://qiita.com/cvusk/items/07fbbcc35a69a1431738)

- [Locate RPM packages which contain a certain file](https://major.io/2010/12/08/locate-rpm-packages-which-contain-a-certain-file/)

- [これだけは押さえておきたいyumの使い方](http://daretoku-unix.blogspot.jp/2010/09/yum.html)
Node.jsのインストール

Node.jsはバージョンによる誤差が多いので、nodebrewを使ってバージョンを切り替えられるようにすると幸せです。


# Homebrewのインストール
ターミナルに下記のコマンドを実行する

```
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

下記のコマンドを実行してエラーが出ていないか確認

```
$ brew doctor
```

https://brew.sh/index_ja.html
※xcodeが入っていない場合は先に入れましょう。

# Nodebrewをインストール
Homebrewを使ってNodebrewをインストールする
最初に下記のコマンドを実行する

```
$ brew install nodebrew
```

次にセットアップコマンドを実行する

```
$ nodebrew setup
```
パスを通す

```
$ echo "export PATH=\$HOME/.nodebrew/current/bin:\$PATH" >> ~/.bash_profile
```
設定を再読み込み

```
$ source ~/.bash_profile
```

# Node.jsのインストール
安定番をバイナリデータからインストールする

```
$ nodebrew install-binary stable
```
使えるようにする

```
$ nodebrew use stable
```

# 確認

```
$ node -v
```

```
$ npm -v
```

こんな感じでうまくいきました。
【Visual Studio Code】 日本語のメニュー画面で使う方法

皆さん、こんにちは。戸倉彩です。

Visual Studio Code を日本語のOS環境でインストールした場合には、とくに何も設定しなくても日本語表示で使うことができますが、英語表示だった場合や、別言語から日本語を指定したい場合の手順をご紹介いたします。
#Visual Studio Code 表示言語の設定方法
1. Visual Studio Code を起動する
2. 「View(表示)」メニュー→「Command Palette(コマンドパレット)」を選択する   
    ※ショートカットキーは[Ctrl]+[Shift]+[P]を同時に押す
3. コマンドパレットで「configure」を入力する
4. 「Configure Language(言語を構成する)」を選択する
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/d4740602-93dd-c573-9037-5a6ffcd3f62c.png" width="500">　
5. 「locale.json」ファイルが表示される
6. **locale** の指定を **ja** に変更する  
<img src="https://qiita-image-store.s3.amazonaws.com/0/146388/f763361b-6aae-f642-4096-366302ebf4c3.png" width="500">　
7. 上書き保存する
8. Visual Studio Codeを再起動する

## サンプル

```json:locale.json
{	
   // VSCode の表示言語を定義します。
   // サポートされている言語の一覧については https://go.microsoft.com/fwlink/?LinkId=761051 をご覧ください。
   // VSCode の再起動に必要な値を変更します。
	
"locale":"ja"
}

```
## 対応している言語
| 表示される言語 | Locale     |
|:-------------|:-----------:|
| 英語          | en          |
| 日本語        | ja          |
| 簡体字中国語  | zh-CN       |
| 繁体字中国語  | zh-TW       |
| 韓国語        | ko          |
| スペイン語    | es          |
| フランス語    | fr          |
| ドイツ語      | de          |
| イタリア語    | it          |
| ロシア語      | ru          |

## 参考文献
* [Visual Studio Code - Display Language](https://code.visualstudio.com/docs/getstarted/locales)

## Have a nice Geek Life♪
※Twitterで最新情報発信中 @ayatokura