OmniAICreator/Qiita-1.07M huggingface dataset:
EB CLI からEC2へキーペアを使った接続

CIサーバー（踏み台サーバー）から[EB CLI](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3.html)でEC2にアプリケーションのデプロイをする運用をしている。

EC2インスタンスに接続する際は、[キーペア](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-key-pairs.html)による認証を行う。
CIサーバーで複数ユーザーを持ち、それぞれでEC2に接続する場合は、キーペア作成時にローカル（ここではCIサーバー）に作成したプライベートキーを配布することで接続できるようになる。

ちなみに各ユーザーごとにキーペアを登録することもできるよう。
[Amazon EC2 のキーペア - Amazon Elastic Compute Cloud](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-key-pairs.html)
→複数ユーザー用のキーペア


キーペアmy-key-pair作成時に、プライベートキーmy-key-pair.pemを、~/.sshに作っておくと、このキーペアでEC2に接続できる。
プライベートキーを保存できるのは、キーペア作成時のみ。
このプライベートキーを、複数ユーザーで使いまわすことで、持っている人がEC2に接続できる。


## キーペア登録とプライベートキー保存のやり方
ciサーバにログイン。
AWS CLIを（設定していない場合は）設定する。

```shell-session
$ aws configure
AWS Access Key ID [None]: ***
AWS Secret Access Key [None]: ***
Default region name [None]: ap-northeast-1
Default output format [None]: text
```
参考
[AWS CLI の設定](http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-getting-started.html)
[AWS CLIのインストールから初期設定メモ - Qiita](https://qiita.com/n0bisuke/items/1ea245318283fa118f4a)

コマンドラインでmy-key-pairキーペアの作成とプライベートキー保存

```
$ aws ec2 create-key-pair --key-name my-key-pair --query 'KeyMaterial' --output text > ~/.ssh/my-key-pair.pem
# ファイルの中身が正しいか確認。
```
参考
[キーペアの使用 - AWS Command Line Interface](http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-ec2-keypairs.html)

パーミッションを400に変更。
他ユーザーに配布する場合は、コピーしてオーナーとグループを変更。
セキュリティ上、プライベートキーをサーバ外部に持ち出さないこと。

AWSのEC2コンソール画面から、該当のEC2のキーペアを変更。
（インスタンスの再起動が走る。）

eb ssh成功！
phpbrewでintl拡張インストールがエラーになる場合の対応方法

久しぶりにCakePHPを使うことになり、ローカルにphpbrewでintl拡張をインストールしようとしたらハマったので、tipsを共有します。

## phpbrew に intl 拡張がインストールできない

`$ phpbrew install 7.1.10 +openssl=$(brew --prefix openssl) +intl` を実行してみたところ、以下のようなエラーになりました。

```
Error: Make failed:
The last 5 lines in the log file:
/usr/local/Cellar/icu4c/59.1/include/unicode/unistr.h:3180:7: error: delegating constructors are permitted only in C++11

      UnicodeString(Char16Ptr(buffer), buffLength, buffCapacity) {}

      ^~~~~~~~~~~~~

2 warnings and 3 errors generated.

make: *** [ext/intl/intl_convertcpp.lo] Error 1
```
## とりあえずググる

以下のようなサイトを見つけました

[PHPBrewに"intl"拡張をインストール - まったり技術ブログ](http://blog.motikan2010.com/entry/2017/09/19/PHPBrewに%22intl%22拡張をインストール)

なるほど、と、思ったのですが、　なんかもっと簡単な解決策ないのか？と思います（よね？）。

## 応援がくる

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">php-build側はhnwさんがこのあたりの対応をされてますね。<a href="https://t.co/kgq8l0duDO">https://t.co/kgq8l0duDO</a></p>&mdash; TAKAHASHI Kunihiko (@kunit) <a href="https://twitter.com/kunit/status/923011452926967809?ref_src=twsrc%5Etfw">2017年10月25日</a></blockquote>

php-build いいな...

## 公式のissueから探す

phpbrew公式のgithub issueから `C++11` で検索してみます。
すると、ありました。

[I cannot install PHP 7.1.9 on macOS 10.11.6 (El Capitan) #899](https://github.com/phpbrew/phpbrew/issues/899)

[patrickjahns](https://github.com/patrickjahns) さんのコメントをみて、これはオプションでいけるんじゃない？と気づきます。

```
This problem is related to icu4c version 59.1.

Install an older version of icu4c (i.e. 58.2) and manually link against it:
--with-icu-dir=/usr/local/Cellar/icu4c/58.2/
```

なるほど、icu4cは何が入っているか調べてみると、　`58.2` もありました。

```
$ ls /usr/local/Cellar/icu4c
57.1	58.2	59.1
```

## オプション付きで拡張を入れてみる

実はすでに phpbrew で 7.1.10 はインストール済みだったので、拡張だけインストールしました。

```
$ phpbrew ext install intl -- --with-icu-dir=/usr/local/Cellar/icu4c/58.2/
===> Installing intl extension...
Log stored at: /.phpbrew/build/php-7.1.10/ext/intl/build.log
Changing directory to /.phpbrew/build/php-7.1.10/ext/intl
===> Phpize...
===> Configuring...
===> Building...
===> Running make all: /usr/bin/make -C '/.phpbrew/build/php-7.1.10/ext/intl' 'all'  >> '/.phpbrew/build/php-7.1.10/ext/intl/build.log' 2>&1
===> Installing...
===> Running make install: /usr/bin/make -C '/.phpbrew/build/php-7.1.10/ext/intl' 'install'  >> '/.phpbrew/build/php-7.1.10/ext/intl/build.log' 2>&1
===> Extension is installed.
===> Creating config file /.phpbrew/php/php-7.1.10/var/db/intl.ini.disabled
===> Enabling extension intl
[*] intl extension is enabled.
Done.
```

おー、インストールできた。

## まとめ

- twitterの愚痴に対して応援があると助かる
- 公式のissueがcloseになっていなくても有益がコメントがある
- なるべく簡単な方法を探そう

今後、phpbrewでintl拡張入れる人の手助けになれば幸いです。
[Python] Exceptionをraiseするモック関数の作り方


ある関数が例外を発生した時に意図した挙動になるかなどテストしたい場合があります。
`side_effect`という属性を使って簡単に実現できます。

```python
mock = Mock()
mock.side_effect = Exception("Mock Exception")

# または
mock = Mock(side_effect=Exception("MockException")
```

テスト関数にパッチを適用すると、モックの戻しが必要なくて楽ちん

```python
@patch("some_function", MagicMock(side_effect=Exception()))
def test_hoge_raise_exception_from_some_function(self): 
    pass # なんかテストする
```

[参考](https://docs.python.jp/3/library/unittest.mock-examples.html#raising-exceptions-with-mocks)
GsuiteのGoogle DriveをDrive File Streamに置き換えてみた

## Drive File Streamとは
ドライブ ファイル ストリームを利用してパソコンで職場や学校のファイルにアクセスする - Google ドライブ ヘルプ
https://support.google.com/drive/answer/7329379


Gsuiteで提供されるGoogle Driveの進化版
ローカルと同期を取るタイプではなく、ドライブとしてマウントされる

**ローカルの容量に影響しない**
**同期不要な為、処理負荷が軽減される**

そしてなにより、パーソナルユースとGsuiteとで別々のアプリが提供された事で、アカウント切替等しなくて良くなる。

しかしまあ、ストリーミングなのでオフライン時に使えないと困るわけです。

### オフラインで利用する
Finderやエクスプローラから開いて、ドライブファイルストリーム

![googleDriveStream.png](https://qiita-image-store.s3.amazonaws.com/0/67717/d7ac969d-288d-2ad9-a1bd-8014f93de551.png "googleDriveStream.png")


これで対応完了。

（こんな感じにマイドライブを全部オフライン利用にしていると、結局ローカルの容量は消費しますので、必要ないのは切るべきですが…）
> 上位フォルダをオフライン使用にして、下位フォルダを切るのは可能


### パーソナルユースは"バックアップと同期"が提供されている
こちらはGoogle Driveの使い方と同様に、ローカルファイルと同期するタイプ
同期するディレクトリを選択するのがやりやすくなった
vagrant で仮想環境を作成


## はじめに
VagrantとVirtualBoxを使ってWindows上に仮想マシンを作成する

** ※どうやらWindowns7だとVagrantのバージョン1.9.6以上ではvagrant upでだんまりになる
** ※IBM　Trusteer Rapport（インターネットバンキング用のセキュリティ対策ソフト）がインストールされていると vagrant upでエラーになる。
　windows10にアップグレードした後でVagrantを導入した時にはまりました。


## 準備するもの
・Virtual Box 5.1.28 （これは最新でも問題ないようです）　
・vagrant 1.9.6 （Windows7だとこのバージョン）
 
## インストール
・Virtual Box
[Downloads – Oracle VM VirtualBox](https://qiita.com/mokuo/items/2b0f47a1de1fdac64204)

・Vagrant
  [旧バージョン　Download - Vagrant by HashiCorp](https://releases.hashicorp.com/vagrant/)
## Boxのダウンロード

```js
vagrant box add CentOS72 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box

```

確認コマンド
` vagrant box list `

これをやると、下記に仮想イメージファイルをダウンロードするっぽい

` C:\Users\t.user\.vagrant.d\boxes\CentOS72\0\virtualbox`

## 仮想マシンの起動
下記に仮想マシン用のフォルダを作成

`C:\Vagrant\CentOS72 `

Vagrantfileを作成する

```js
 cd C:\Vagrant\cntos72
 vagrant init CentOS72
 ```
 
 確認する
 
 ```
 dir
 Vagrantfile
 ```
 
 起動してみる
 ` vagrant up `
 
##Vagrantの使い方
 
 下記が参考になります
 
 https://qiita.com/ozawan/items/160728f7c6b10c73b97e
 
## 他のOSをインストールする場合
 
 centOS7.3のminimalをインストールする
 
 ```
 mkdir C:\Vagrant\CentOS73min & cd C:\Vagrant\CentOS73min 
 vagrant init inviqa/centos-7-minimal
 ```
 
# scpの設定
 sshのユーザ名はvagrantでデフォルトのパスワードはvagrantなのでWinscpで接続するときはこれで
 
# スナップショットの取得
 Vagrant1.8からスナップショットが取得できるようになりましたとさ
 
 ```
#サーバ停止
 vagrant halt　　
#スナップショット作成
vagrant snapshot save 20171206_1600
  # 確認
vagrant snapshot list   
#スナップショット復元
vagrant snapshot restore 20171206_1600　
#スナップショット削除　
vagrant snapshot delete 20171206_1600　　

 ```
 
# Vagrantの環境を複製する
 こちらに詳細が記載されています。
 [Vagrantの環境を複製する](https://qiita.com/murachi1208/items/99daa3ca069d907a7b50)
 
## Vagrant 旧バージョンリスト
VagrantとVirtualBoxの相性があるので。。。
https://releases.hashicorp.com/vagrant/
Apexで様々な型を混ぜたリストを作りたい時は

タイトルはまどろっこしい感じなのですが、ラッパークラスの事です。
初学者すぎてラッパークラスという言葉を知らなかった時に情報にたどり着けなかったのでこんなタイトルにしています。

Apexでデータのリストを作りたいと言う時にはLIST<適当な型>　という形で作ります。
sObjectの場合はLIST<sObject名>で、商談のリストを作る時は LIST<Opportunity>と宣言します。

ある日Visualforceページにおいて、sObject型に別の項目を追加したようなリストを作りたいと思った時に困りました。
sObjectに数字を加えたいだけなのに！これはsObjectではありません。そんな時に使うのはラッパークラスです。

```apex:ラッパークラス
public class wrapperClassName {
        public String name { get; set; }
        public Decimal d1 { get; set; }
        public String s1 { get; set; }
        public Opportunity o1 { get; set; }
        public wrapperClassName(String name,Decimal d1,String s1){
            this.name = name;
            this.d1 = d1;
            this.s1 = s1;
            this.o1 = o1;
        }
    }
```

これで使う時は普通にnewしてやれば使えます

```apex:ApexClass
public List<wrapperClassName> wrapperClassLIST{get;set;}
wrapperClassLIST wlist = new List<wrapperClassName>();
```

これでVisualforceページ側で読み込みできます。
こんなことでよかったのか！！

```Visualforce.page例
<apex:repeat value={!wlist} var="w">
{!w.name}
{!w.o1.Name} <!-- 商談名の取得 -->
</apex:repeat>
```
【A5:SQL】macでwindows専用exeファイルを起動する【EasyWine】

##お願い
macユーザ向けに書いた記事になります。
windowsユーザは[A5:SQL Mk-2インストールページ](http://a5m2.mmatsubara.com/)からインストールすればすぐに使えます。

実際に作業していた時の画面をはっきり覚えていないのでうろ覚えで書いています。
この記事でA5:SQL起動までたどり着いた方は「ここはこういう風に書き換えて」って箇所があればコメントください！！！
すぐ直します。

##参考記事
wineというツールを使えばMacOSでもwindowsのexeファイルを実行できるようになります。
EasyWine.app は OS X で Wine を簡単に使えるようにしたアプリです。
http://mattintosh.hatenablog.com/entry/20140706/1404653173

##ダウンロード・インストールページ
EasyWineインストールページ
https://matome.naver.jp/odai/2140238022377155001
最新版ダウンロードからページが遷移、ダウンロードファイルが４つくらい出てくる。
EasyWine-20171008_wine-2.18.dmgっぽいのだけダウンロード。

A5:SQL Mk-2インストールページ(注：EasyWineが起動できるexeファイルはx86.zip)
http://a5m2.mmatsubara.com/

##実行手順
-手順１
A5:SQL Mk-2のインストール等が終わったら「a5m2_2.12.2_x86」のようなパッケージがあると思うのでその中のexeファイルをインストール済みEasyWineのアイコン上にドラッグ&ドロップで渡すとA5:SQL Mk-2が実行される。

-手順２
EasyWineをクリックし直に起動する。ウィンドウが開くとフォルダ構造が表示されてるのでそこから手順１に書いたような「a5m2_2.12.2_x86」パッケージがあるまで移動し中にあるexeファイルをクリックして起動することができる。

##起動時の警告
警告ができて来た場合は「編集ボタン」を押してスクリプトを一部書き換える。
WINEPREFIX	の箇所の　$HOME/Library/Caches/Wine/prefixes/default　のような表示がされている部分に注目すると文末が default になっていると思うので defaults に変更し、再度同じように実行手順を踏むと起動できる。

警告を突破してさらなる二択を迫られたら「レジストリ」選択しておけばおk

##操作方法・リファレンス
公式を下に少しスクロールするとやりたいことごとにリンクがあるのでそこから操作方法を調べるのが一番いいと思います。
http://a5m2.mmatsubara.com/
Rails 5+ ActionCableで作る！ シンプルなチャットアプリ　ハマった所

Rails 5+ ActionCableで作る！ シンプルなチャットアプリ　ハマった所

[コピペ用](https://qiita.com/tacyan/items/bd046c73ba0ced3a7e7d)

# 環境 

```
ruby 2.4.0
rails 5.14
redis 3.2.9
``` 


#参考
[Rails 5 + ActionCableで作る！シンプルなチャットアプリ（DHH氏のデモ動画より）](https://qiita.com/jnchito/items/aec75fab42804287d71b)


[【Rails5】ActionCableリアルタイムチャットを実装。](http://kansiho.hatenablog.com/entry/2017/07/03/%E3%80%90Rails5%E3%80%91ActionCable%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%92%E5%AE%9F%E8%A3%85%E3%80%82)

[Railsでページ遷移時に何故かJavaScriptが起動しない時](https://qiita.com/kumagi/items/289ccadf344f32613304)

#ハマった点

蛇足だが, jqueryを使っているのでGemfile に　
gem ‘jquery-rails'  
gem 'jquery-turbolinks' 
を追加する必要があります。
追加後にbundle installして下さい。

```
rails db:migrate
bundle install
```


また、application.jsファイルに追加する項目があります。

```app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
```

## Jqueryが必要なスクリプト

```app/assets/javascripts/channels/room.coffee
$(document).on 'keypress', '[data-behavior~=room_speaker]', (event) ->
  if event.keyCode is 13 # return = send
    App.room.speak event.target.value
    event.target.value = ''
    event.preventDefault()
```

ここだけハマりましたが、後はqiitaの記事の中の設定通りにすると
動きます。

## 気になった点

rails new した時のオプションが必要ありませんでした。

```
以前
$ rails _5.0.0.beta1_ new campfire --skip-spring
今
$ rails new campfire
```

javascriptsのデフォルトがcoffeeからjsに変更されています。

```
以前
app/assets/javascripts/cable.coffee

今
app/assets/javascripts/cable.js
```

内容

```app/assets/javascripts/cable.js
(function() {
  this.App || (this.App = {});

  App.cable = ActionCable.createConsumer();

}).call(this);
```


[今回のサンプルアプリのgithubリポジトリ](https://github.com/tacyan/camp)
link > grep > Binary fiile ***.cpp matches > grep -aで実行する

```txt:動作環境
Windows 7 Pro (32bit)
SmartGit Version 17.0.4 #10132
SmartGit付属のMinGW32
grep (GNU grep) 2.24
head (GNU coreutils) 8.25
```

C++ Builderで実装している.cppファイルをMinGW32上でgrepした。

```bash
$ grep kSecond *.cpp
Binary file XXX.cpp matches
```

.cppファイルなので、バイナリファイルではないが、バイナリファイルと認識されてしまう。

対策としては、r_nobuさんの情報が参考になりました。
http://nobuneko.com/blog/archives/2013/04/linux_grep_binary_files_text.html
> →grep対象のファイルをバイナリファイルではなく、テキストファイルとして扱いたい場合は、grepコマンドに「-a」、「--text」、「--binary-files=text」といったオプションを付与すればよい。

情報感謝です。

```bash
$ grep -a kSecond *.cpp
XXX.cpp: static const int kSecond_notify_shutdown = 70;
```

### 予備情報

grepの検索対象を`70`とした場合は、バイナリファイルとして認識されずに内容が表示された。

```bash
$ grep 70 *.cpp
XXX.cpp: static const int kSecond_notify_shutdown = 70;
```
Safariの新機能ITPと広告、Cookieについてのおさらい

先月リリースされたiOS11。
~~未だOSの分布でいうと5%程度のようですが、iOS10と同じ曲線を辿れば半年ほどで8割以上の使用率となるので各事業者は対応を迫られています。~~
すいません、誤表記で5日前で55%に達したらしいです。

https://corriente.top/post-51706/

そんな中でも（特に広告業界にとっては）大きなリリースとなった機能がSafariブラウザのITP対応です。

ITPとは、Intelligent Tracking Preventionの略です。
日本の端末では、**サイトごえトラッキングを防ぐ**と訳されていますが意味としては
一度自動車などに興味があって広告からWebサイトを見た場合に、その後他のサイトでも自動車の広告が出続けるといった**リターゲティング広告**のようなサイトを跨ってユーザーの閲覧履歴が情報として使われることを防止するためにappleが準備した機能になります。

<img width="414" alt="IMG_0752.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/189662/1e739860-16d7-51b4-e6d7-ed6c4555f471.jpeg">


さて、この記事ではITPおよび広告について考えつつ初歩の部分から簡単におさらいしてみたいと思います。

## Cookie？おいしいの？

上記で例にあげたリターゲティング広告を含む、自分のwebブラウザ上での行動を基にした**ターゲティング広告**とはそもそもどのように実現しているのでしょうか。

それは、Cookieと言う**自分がどのページを見たのか、どのような行動をしたのかをブラウザ側に保持するための情報**です。


>HTTP cookie（エイチティーティーピークッキー、単にクッキーとも表記される）は、RFC 6265などで定義されたHTTPにおけるウェブサーバとウェブブラウザ間で状態を管理する通信プロトコル、またそこで用いられるウェブブラウザに保存された情報のことを指す。ユーザ識別やセッション管理を実現する目的などに利用される。
>- ウィキペディアより

身近に使われ方としてはログイン状態の保持のために使われますね。
TwitterやGmailなど1度ブラウザでログインした際に、有効期限のあるCookieがブラウザに付与されます。
すると別タブでTwitterを開いたりブラウザを閉じたあとにGmailを開いたりしてもログインしたままになり、いちいちログインし直さなくてすみます。
ブラウザの設定などでCookieを削除すると再度ログインページが表示されるのがわかると思います。

事業者目線でいえばこのクッキーを1度ユーザーのブラウザに付与することによって、以後ページを見た人物が同一人物であるかどうかを判断することができます。
これによって、Yahooなどのメディアサイトを訪れたユーザーが自動車のWebサイトを好んで訪れているということを広告事業者は把握することができ、自動車の広告を**ターゲティング**して表示させたり、広告をクリックした人が実際にその商品を購入したかという**コンバージョン測定**ができたりします。
Cookieシンクといわれる技術でメディアで発行されたCookieと事業者の所有するCookieを結びつけてユーザーの詳細な情報を事業者側が得るケースもあります。

appleの考えとしては、広告事業者のような第三者組織がユーザーの閲覧情報や個人情報を取得しそれを利用しているのを非常に嫌っています。
たしかに自分がどんなエッチなサイトを見ているかよくわからない企業に知られていたら嫌ですよね・・・。

## ITP機能と3rd Party Cookie

こんな経緯から、appleではiOS7（Safari7）以降第三者組織が付与するCookieについては**1度そのWebサイトを訪れたことのあるユーザーにしか付与することができない**という設定がデフォルトとなっていました。
この第三者組織のCookieは**3rd Party Cookie**と呼ばれ、見ているページが付与する**1st Party Cookie**とは明確に区別されています。
この機能自体はfirefoxなどの他のブラウザでもデフォルト設定になっており、悪質なサイトのCookieを防ぐことができています。

<img width="375" alt="IMG_0431.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/189662/1655a43b-0881-315b-75be-4d4ef7b6fd32.jpeg">

しかし、広告事業者はリダイレクトやWebBeaconといった仕組みを使ってブラウザが1度そのドメインを訪れたことがある状態にしCookieを付与させることできています。
（これについては余り深くしらないので他のサイトを検索してみてネ）

しかし、今回iOS11（Safari11）で追加された機能であるITP機能は**3rd Party Cookieにかんしては問答無用で有効期限を24時間にします。**
つまり広告事業者はiOS11のユーザーに対して見ているユーザーがどの人物かがわからなくなり、ターゲティングすることは難しくなりコンバージョン測定も発行後24時間以内で行わないと出来ない状態になるわけですね。

## GoogleのITP対応

GoogleはこのITP機能に対して、Google Analytics（ユーザー分析ツール）をGoogle Adwards（広告表示ツール）と連携することを促すことで対策しています。

回避できる理由としては、Google Analyticsは1st Party Cookieを取得しているからです。


>GoogleAnalyticsのCookieは、なぜサードパーティCookieではなく、ファーストパーティCookieなのか？
>http://nexal.jp/blogs/2061.html


しかし、Googleのような対応作はメディア側にCookieを発行してもらわなければならないためどのサイトに出るかわからない広告事業者は残念ながら真似することはできません。

## まとめ

今後、appleを中心にさらにWebサイト上での個人情報についての議論や対策が出てくると思われます。

しかし、広告事業者にとってはユーザーの情報は生命線です。広告の価値を高めるためには、ユーザーの分析は必須ですからね。

appleと広告事業者の戦いは今に始まったことではありませんが、ITPでさらに加速していくでしょう。
次に学ぶ言語は何がいいか?

# 次に学ぶ言語は何がいいか?

最近(2017年10月現在)はPythonの人気が特に高いようですね。
新たな言語に挑戦したいけどどれを選んだらいいか検討がつかない方向けに、
自分がオススメしたい言語とその理由をピックアップしてみます。

## Python

トレンドなのはもちろんですが、プログラミング初心者や2つ目の言語修得を目指す方にもオススメと言われていますね。
自分も現在進行形で学習中なので、言語の学習しやすさについてはウェブ上の評価を聴いたままですが、明確なメリットももちろんあります。

* 活用範囲が広い
  * 話題の機械学習
  * 数学
  * Web
  * デスクトップアプリ(GUI)
  * パブリッククラウド(AWSなど)操作

また、Javaの経験がほとんどである自分としては、以下もメリットと思っています。
(もちろんその他の言語でも当てはまる)

* 関数型がある
* タプルがある


## Kotlin

Java経験者にオススメしたいのがKotlinです。
特に推したいメリットは以下の通りです。

* JVM上で動く言語なので、Javaの資産を活用できる
* Javaより短く書ける
* Null安全という考え方
* 関数型のような書き方ができる
* Javaと混ぜることができる

Androidアプリ開発の公式言語に採用されたこともあり、
スマホアプリを作ってみたい方は積極的に選んで良いのではないでしょうか。


## JavaScript(TypeScript)

「将来ほぼ全てのジャンルでJSで開発できるようになる」という説をどこかで読んだ気がしますが、何と言ってもその活用の広さが大きなメリットだと思っています。

* 言わずもがなWebフロントエンド
* Webサーバサイド(nodejs)
* スマホアプリ
* デスクトップアプリ(Electron)
* ブラウザ拡張
* ゲーム
* GoogleSpreadSheetマクロ
* パブリッククラウド操作

などなど。おそらくまだまだあるでしょう。まるで十得ナイフです。
これらはもちろんそれぞれ得意な言語が別に存在しますが、
このように活用範囲が広まってきているのは、
ITの巨人たちがこぞってJavaScriptエンジンを開発し高速化していることが大きな要因かと思います。

ちなみにTypeScriptはJavaScriptの方言のようなものですが、
記述がよりJavaやC#に近く、自分にとってはJavaScriptよりも書きやすく読みやすいと感じました。


## 最後に

いかがでしたでしょうか。
自分はまずPythonを選択し、Webの経験を元にWebフレームワークであるDjangoを学習中です。
現在のスキルやお仕事の事情などもあると思いますが、上記の言語はどれも修得して損はないのではないかなと思います。
Laravelのテストでインスタンスを作成する時はサービスコンテナ使ってmakeメソッドで依存解決すると便利

#課題
Laravelでテストを書く時に、テストメソッドの中でインスタンスを作成したい時があります。

例えばコンストラクタインジェクションで複数インスタンスの依存注入を行っている場合に、ずっと注入するクラスのインスタンスを全て作成してから引数に渡していて、めっちゃめんどいなーと思っていました。

こんな感じです。。><

```php
$repoA = new RepositoryA();
$instanceA = new InstanceA();
$instanceB = new InstanceB($repoA,$instanceA);
```

#解決
サービスコンテナを使って依存解決すると一発

```php
$instanceB = $this->app->make('InstanceB');
```

`$app`にアクセス出来ない場所で使いたい場合は、`resolve`ヘルパメソッドが使える

```php
$instanceB = resolve('InstanceB');
```

もっと早く調べてればよかった><
windows10を無料で使う


# windows10 Enterprise 評価版
90日間無料で使うことができる。
登録が必要だが、以下からISOファイルがダウンロード可能

[ Microsoft Evaluation Center Windows 評価版ソフトウェア](https://www.microsoft.com/ja-jp/evalcenter/evaluate-windows-10-enterprise)
![win10EP_ss.png](https://qiita-image-store.s3.amazonaws.com/0/132956/cc1aef02-3341-5216-f860-b077f2c5eedd.png)
# 使い方
VirtualBoxにインストールするなりして起動する。
メモリは4GBくらい割り当てれば、ややもっさりしているものの使えた。(その分起動中はHOSTのMacが重くなった・・・)
visualstudioとか開発環境整えたら30GBくらい簡単に持ってかれた。ヤベェ。
スナップショットとったらガンガンHDDの容量なくなった。ヤベェ。


# 期間延長
2回の延長が可能。
コマンドプロンプトを立ち上げ、以下コマンドを入力すると何回延長可能かわかる

### 確認
```
slmgr /dlv
```

![slmgr_dlv.png](https://qiita-image-store.s3.amazonaws.com/0/132956/dc5f1138-b4a9-697e-cbd6-0d11902057d4.png)

Windows猶予期限とSKU猶予期限の違いがわからない…



### 延長
延長を行う場合は以下のコマンドを入力する

```
slmgr /rearm
```

### 詳細
以下のサイトが詳しかった

[Windows OS の試用期間を延長する方法](http://www.maruko2.com/mw/Windows_OS_%E3%81%AE%E8%A9%A6%E7%94%A8%E6%9C%9F%E9%96%93%E3%82%92%E5%BB%B6%E9%95%B7%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)

# tips
自分はwindows10のドライバ開発をこの環境で行なっている。
windows10はEV証明書がないとドライバ実行時にブロックされるが、テストモードで起動すればブロックされずにテストできる。
VirtualBoxにインストールして扱う方法であれば、コマンド一発でテストモードになるので楽。

## テストモードコマンド
### 管理者権限でコマンドプロンプトを起動し、以下を入力
```
bcdedit /set TESTSIGNING ON
```
### 元に戻す方法
```
bcdedit /set TESTSIGNING OFF
```
個人的React周りベストプラクティス④ - Lamdaパッケージ編

#前の記事
前回：[個人的React周りベストプラクティス③ - React・Reduxパッケージ・ミドルウェア編](https://qiita.com/enshi/items/3802f48cbcb05d028738)
一番始め：[個人的React周りベストプラクティス① - 構成編](https://qiita.com/enshi/items/e6ad8c91168cfe8a88da)

#serverless-offline
node.jsで書かれたlambda関数をローカル上で動かすためのパッケージ
ローカルでテストしたい時などに使う


ローカルで実行した関数は環境変数`IS_OFFLINE`が`'true'`になるので
`process.env.IS_OFFLINE === 'true'`で判定できる

エラーが出たときにはその内容も表示されるし、console.logで指定した内容も表示されるのでデバッグがしやすい。

↓ *console.log出力例*
![image.png](https://qiita-image-store.s3.amazonaws.com/0/156086/67e3b036-0aa2-c747-cd64-2f871d6ea81f.png)

ただ、serverless.ymlを複数に分けて運用している場合はそれぞれで起動する必要があるので、すごく面倒である。

#lambda-wrapper
lambdaからlambdaを呼び出す処理を実装する際、テストでローカル上から呼び出すときには、ローカルのコードを呼び出してほしい。

それを叶えてくれるパッケージ

***serverless-offline***と組み合わせて、
`process.env.IS_OFFLINE === 'true'`が真のときはローカルのLambda関数、偽のときは本番のlamda関数を呼び出す

#serverless-plugin-split-stacks
serverless.ymlが長くなると、デプロイ時に以下画像のように「200以上のリソースがあるとだめですよ。分割してくださいよ。」と言われる
それを自動的に分割してくれるもの

※ちなみにAWSに問い合わせて上限をあげられるのはスタック数であってリソース数ではない
![image.png](https://qiita-image-store.s3.amazonaws.com/0/156086/fab545c8-3f62-86df-8b25-1bed7b7afa9e.png)


使い方はインストールした後にserverless.ymlのpackageに記述するだけ

*参考：[serverless-plugin-split-stacksで200以上のリソースをServerless Frameworkで管理する](https://api.wp-kyoto.net/serverless-plugin-split-stacks/)*

#次の記事
[個人的React周りベストプラクティス⑤ - Reduxディレクトリ構成編](https://qiita.com/enshi/items/c60bb9055623ae318377)
Restlet Client の使い方

Chrome ブラウザーの アドオン Restlet Client の Post の使い方です。

次の API にアクセスしてみます。
[Web ページから、AWS Lambda の関数に引数付きでアクセスする](https://qiita.com/ekzemplaro/items/62dd9c17255c6145fe63)
これは、３つの整数、aa,bb,cc を与えて合計 sum を計算するプログラムです。

1) METHOD を、POST　にし、URL を与え、BODY に引数をJSON で与えます。

![restlet_oct2501.png](https://qiita-image-store.s3.amazonaws.com/0/179446/d4c30437-ba80-d9c0-c1f1-f7025641249c.png)


２）SEND をクリックして実行します。

![restlet_oct2502.png](https://qiita-image-store.s3.amazonaws.com/0/179446/117b7b96-9999-2806-e145-b78a7bd58833.png)
JavaScript - == vs ===

# `==` will do "implicit type conversion"
```js
var num = 0;
var obj = new String("0");
var str = "0";

console.log(num == num); // true
console.log(obj == obj); // true
console.log(str == str); // true
console.log(num == obj); // true
console.log(num == str); // true
console.log(obj == str); // true
console.log(null == undefined); // true

console.log(obj == null); // false
console.log(obj == undefined); // false
```

# `===` will not do "implicit type conversion"
```js
var num = 0;
var obj = new String("0");
var str = "0";

console.log(num === num); // true
console.log(obj === obj); // true
console.log(str === str); // true

console.log(num === obj); // false
console.log(num === str); // false
console.log(obj === str); // false
console.log(null === undefined); // false
console.log(obj === null); // false
console.log(obj === undefined); // false
```

https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Equality_comparisons_and_sameness
https://dotblogs.com.tw/alantsai/2013/06/27/106134
【Go】EchoでHello Worldを表示する

GoのフレームワークEchoを使ってHello Worldを表示してみる。
echoはインストールされている前提です。

```go
//main.go

package main

import (

    "github.com/labstack/echo"
    "./handler"
)

func main() {
    // Echoのインスタンス作る
    e := echo.New()

    // ルーティング
    e.GET("/hello", handler.MainPage())
    e.GET("/api/hello", handler.ApiHelloGet())

    // サーバー起動
    e.Start(":8080")
}
```


```go
package handler

import (
    "net/http"
    "github.com/labstack/echo"
)

func MainPage() echo.HandlerFunc {
    return func(c echo.Context) error {     
        return c.String(http.StatusOK, "Hello World")
    }
}

func ApiHelloGet() echo.HandlerFunc {
    return func(c echo.Context) error {     
         return c.JSON(http.StatusOK, map[string]interface{}{"hello": "world"})
    }
}
```
/api/helloのルーティングはjsonを返すようにします。

![スクリーンショット 2017-10-18 12.37.23.png](https://qiita-image-store.s3.amazonaws.com/0/208513/e231cea6-2bf1-f431-239f-d5705d57f37c.png)
画面表示。

![スクリーンショット 2017-10-18 12.36.34.png](https://qiita-image-store.s3.amazonaws.com/0/208513/8f67f640-5368-c8ec-998c-c1e98db1837a.png)
curlでjson返却。
Java - StringBuilder vs StringBuffer

# StringBuffer
StringBuffer is synchronized
StringBuffer is thread-safe
StringBuffer is slow
StringBuffer is mutable

# StringBuilder
StringBuilder is not synchronized 
StringBuilder is not thread-safe
StringBuilder performance is better than StringBuffer
StringBuilder is mutable
 
https://stackoverflow.com/questions/355089/difference-between-stringbuilder-and-stringbuffer
http://www.ewdna.com/2009/06/stringbuilderstringbuffer.html
女子大生、画像認識をして4と9の違いに戸惑う

#今回はCNN、Keras入門です



Kerasとは公式によると

”Kerasは，Pythonで書かれた，TensorFlowまたはTheano上で実行可能な高水準のニューラルネットワークライブラリです． Kerasは，迅速な実験を可能にすることに重点を置いて開発されました． 可能な限り遅れなくアイデアから結果に進められることは，良い研究をする上で重要です”
[Keras](https://keras.io/ja/)

らしいです。何かよくわからないですが、機械学習初心者でも比較的に簡単に書けるライブラリで人気のようです。

CNNとは畳み込みニューラル・ネットワークのことです。はい、よくわからないですよね。私が説明するよりこちらのかたが書いた説明の方が読みやすいと思うので張っておきます！ストックストック...
https://qiita.com/icoxfog417/items/5fd55fad152231d706c2


#今回の結果は…

今回はかなり処理に時間がかかりました。3.3の一番下の部分のepochsの数値を変えるといいかもしれません。


下の画像がmisleadingをおこした文字のようです。いや人でも４と９が逆にしか見えませんけど…

![image.png](https://qiita-image-store.s3.amazonaws.com/0/183256/0ec752f3-5583-4281-dd91-0ebdbb66bd82.png)


#機械学習初心者おすすめ書籍

[ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装]
(https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8BDeep-Learning-%E2%80%95Python%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%A3%85-%E6%96%8E%E8%97%A4-%E5%BA%B7%E6%AF%85/dp/4873117585)
Android - permission vs uses-permission

In App A, you will be a sender. And it need declare your custom permission.
```
<permission
　　android:name="AAA.BBB.CCC"
　　android:label="APP_A"
　　android:protectionLevel="signature"
 />
```

In App B, you will be a receiver.
```
<uses-permission android:name="AAA.BBB.CCC" />
...
<receiver 
　　android:name="my.app.BroadcastReceiver"
　　android:permission="AAA.BBB.CCC">
　　<intent-filter>
　　　　<action android:name="my.app.Action" />
　　</intent-filter>
</receiver>
```



https://stackoverflow.com/questions/8816623/how-to-use-custom-permissions-in-android/8817231#8817231
https://stackoverflow.com/questions/11770794/how-to-set-permissions-in-broadcast-sender-and-receiver-in-android
https://stackoverflow.com/questions/14450839/uses-permission-vs-permission-for-android-permissions-in-the-manifest-xml-file
debian9でgym_torcs その2

#概要
debian9でgym_torcsやってみた。
TorcsEnv環境を調査してみた。

#action
４つ

```
steer
accel
brake
gear
```

#observation
１２個

```
focus
speedX
speedY
speedZ
opponents
rpm
track
whellSpinVel
img
angle
trakPos
damege
```

#reward
１つ

```
speedX * angle
ifダメージ有り -1
if終了 -1
```

以上
C++ Builder > link > .resファイルはVCS管理しなくて良い

```txt:動作環境
C++ Builder XE4
```

Does the .res file need to be in source control?
https://stackoverflow.com/questions/24049035/does-the-res-file-need-to-be-in-source-control

上記の回答によると

> answered Aug 27 '14 at 0:55
eselk
C++ Builder 6.0 and later will recreate RES files if deleted. I treat them as other temporary/build files (like OBJ files) and do not put them in version control software. 

再作成されるのでVCSで管理する必要はないとのこと。

### 関連 

[RAD Studio によって生成されるファイルの拡張子](http://docwiki.embarcadero.com/RADStudio/XE4/ja/RAD_Studio_%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%8B%A1%E5%BC%B5%E5%AD%90)