OmniAICreator/Qiita-1.07M huggingface dataset:
暗号化と復号化をできるだけ簡単に詳しく説明してみる。

#■はじめに
暗号化は、クレジットカードの番号やパスワードなどの秘密情報を暗号化し、「jd9w%siew0=oha」みたいな文字列することで、元のデータをわからなくすること。
復号化は、「jd9w%siew0=oha」を元のデータに戻すこと。
というのが、暗号化をよく知らないSEの理解ではないだろうか。と思ったので、出来るだけ簡単に、もうちょっと詳しく、説明してみる。

#■暗号化処理の基本
暗号化は、元のデータ(平文)を暗号化処理(AES、DESなど)で、暗号鍵を指定することで、暗号化文字列を生成する。
復号化は、逆に、暗号化文字列に暗号化処理(AES、DESなど)で、復号鍵を指定すること、元のデータ(平文)を生成する。
暗号化法式は、大きく、秘密鍵暗号方式と公開鍵暗号方式の2種類が存在する。

#■秘密鍵暗号方式(共通鍵暗号方式)
秘密鍵暗号方式は、暗号鍵と復号鍵を同じ鍵を利用する。
一般的なドアと一緒で、ロックするのとロック解除が同じ鍵なのです。
考え方的には、メールの添付ファイルにパスワードをつけて、送るのと同じ考えです。
メール送信者が添付ファイルにパスワード「pass2017」とつけて、送信し、受信者が添付ファイルをパスワード「pass2017」で解凍することで、第三者に添付ファイルが見れないように対策する。

暗号化は基本的に、数学の世界です。デジタルデータは2進数なので、全て、数値として扱うことができます。
なので、暗号化処理は数学者が考えて、作っています。

平文データを「ｘ」とし、今回の例では、「２」とします。「ｘ＝２」
どのように暗号化処理をするかと言うと、「ｙ＝２ｘ＋１」とし、暗号化文字列を「ｙ」を生成します。
ｘ＝２のため、ｙ＝５となります。これが暗号化です。
復号化はこれの逆のため、「ｘ＝（ｙ－１）÷２」となります。
この数式「ｙ＝２ｘ＋１」が暗号化処理(AES、DESなど)です。(実際はもっと難しい式です)
しかし、これでは、暗号化処理が分かれば、数式が分かるため、復号化できてしまうので、「ｙ＝２ｘ＋ａ」とし、「ａ」を暗号処理をする人が値を決めることで復号化できなくします。
今回は「ａ＝３」とします。そうすると、「ｙ＝２ｘ＋３」となるため、「ｘ＝２」は「ｙ＝７」となります。
復号化も「ｘ＝（ｙ－３）÷２」となるため、「ｙ＝７」は「ｘ＝２」に復号化できます。

しかし、秘密鍵暗号方式は大きな問題があります。
鍵を秘密にしなければならないため、
AさんとBさんで暗号化してデータをやり取りする場合、その鍵をCさんには、ばれては、いけませんし、
AさんとCさんで暗号化してデータをやり取りする場合、その鍵をBさんには、ばれては、いけません。
つまり、秘密を共有する２者間で絶対に鍵がばれないようにしなければ、ならないのです。

分かりやすい例でいうと、ショッピングサイトで、クレジットカードを暗号化して、利用者がショッピングサイトに暗号化して送る場合、
利用者Aさんが暗号化して送る際に、利用者Bさんと同じ暗号化鍵だと、利用者Bさんに復号化されてしまうので、誰にも知られないようにAさんにショッピングサイトは暗号化鍵を送らなくてはならない。
郵送なり電話なりで、暗号化鍵を秘密裏に教える必要があり、また、ショッピングサイトも利用者ごとの鍵を管理しなければならず、非常に大変です。

これを解決するのが、「公開鍵暗号方式」です。

#■公開鍵暗号方式(非対象鍵暗号方式)
公開鍵暗号方式は、暗号化鍵と復号化鍵を別の鍵にし、どちらか片方を公開します。
上記のショッピングサイトの例でいえば、ショッピングサイトが暗号化鍵の方を公開し、皆が同じ鍵で暗号化しますが、復号化鍵は秘密にし、復号化は復号化鍵を持っているショッピングサイトしか、できません。
ドアで言うと、ロック用の鍵とロック解除用の鍵が別になります。ドアに鍵穴が２個あり、それぞれに鍵が用意されているイメージです。

数式的に、どうするかというと、簡単な話で暗号化「ｙ＝２ｘ＋ａ」と復号化「ｘ＝（ｙ－２ｂ）÷２」とし、暗号化鍵「ａ」と復号化鍵「ｂ」に「ａ＝２ｂ」という関係性を持たせることで、これを実現します。
つまり、暗号鍵が「ａ＝２」なら復号化鍵は「ｂ＝１」なのです。
しかし、これだと、片方の鍵からもう片方の鍵が分かってしまうため、実際には、一過性関数と言って、ａ→ｂは分かるが、ｂ→ａは分からないような関数を実施します。身近な一過性関数は四捨五入ですね。
秘密鍵から公開鍵を一過性関数で生成します。

#■公開鍵暗号方式のもう一つの顔
上記のようにすることで、「秘密鍵暗号方式」と「公開鍵暗号方式」で、秘密情報をばれないようにできます。
けど、「公開鍵暗号方式」には、もう１つ、重要な用途があります。
それが「デジタル署名(以下、署名)」です。

上記の処理では、暗号化鍵を公開しましたが、デジタル署名は、復号化鍵を公開し、暗号化鍵を秘密にします。

デジタル署名とは、会社Ａからユーザに対して、文書で情報を発信した際に、その文書が会社Ａが書いたものであることを証明するものが署名です。
どのようにやるかと言うと、文書を秘密にした暗号化鍵で、暗号化し、暗号化文字列を文書と一緒に公開します。
ユーザは暗号化文字列を公開されている復号化鍵で復号化し、復号されたデータが文書と一致していることで、会社Ａが書いたものと確認することができます。
実際は、文書全体を暗号化すると、データもでかいし、処理時間もかかるため、文書をダイジェストデータにして(データの１部をかいつまんで)、暗号化しますが、そこは割愛します。
署名を簡単に言うと、文書の暗号化文字列を作れることで、文書の正当性を証明する仕組みです。

ショッピングサイトの例も実際は、この署名の仕組みを利用しています。
ショッピングサイトで暗号化鍵を公開する場合も、公開した暗号化鍵がショッピングサイトのものであることを証明するため、暗号化鍵に署名を付与し、暗号化鍵がショッピングサイトが発行しているものを証明し、暗号化してもらう仕組みになっています。

#■ついでに説明したい「３ＤＥＳ」
共通鍵暗号化処理「ＤＥＳ」を３回かけるのが共通鍵暗号化処理「３ＤＥＳ」です。
たまに勘違いしている人がいますが、３ＤＥＳは３回ＤＥＳの暗号化処理をかけるのではなく、「ＤＥＳ暗号化処理、ＤＥＳ復号化処理、ＤＥＳ暗号化処理」の３つを実施します。
復号化する場合は、逆に、「ＤＥＳ復号化処理、ＤＥＳ暗号化処理、ＤＥＳ復号化処理」を実施します。
数式で言うと、暗号化処理は、鍵「ａ」「ｂ」「ｃ」の３つを用意し、
「ｙ＝２ｘ＋ａ」→「ｘ＝（ｙ－ｂ）÷２」→「ｙ＝２ｘ＋ｃ」を実施します。
つまり、暗号化し、間違った復号化をし、更に、別の暗号化をする。これが３ＤＥＳです。
なので「ａ」と「ｃ」は、同じでもいいですが、「ａ」と「ｂ」は同じではいけませんし、「ｃ」と「ｂ」も同じではいけません。
「ａ」と「ｂ」同じだと、「ｙ＝２ｘ＋ａ」→「ｘ＝（ｙ－ｂ）÷２」の時点で、元の平文に戻ってしまい。
「ｙ＝２ｘ＋ｃ」の暗号化をかけただけの状態、ただのＤＥＳと同じ状態に戻ってしまいます。

;＝ｗ＝）簡単に説明したかったけど、文字だけだと、難しいですね。。。
CentOS 7にMySQLをインストールしてPHP5から使う

# 背景
- CentOS 7環境にサーバを移行したところ…
- Confluence（Wikiエンジン）がmariaDBに対応していないことが判明
- CentOS 7のmariaDBをMySQLに入れ換えることにする

# 作業
## mariaDBの削除
```
$ sudo yum -y remove mariadb-libs
```

## MySQLのインストール
```
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.35-1.el7.x86_64.rpm
# sudo rpm -ihv MySQL-server-5.6.35-1.el7.x86_64.rpm
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.35-1.el7.x86_64.rpm
# sudo rpm -ihv MySQL-client-5.6.35-1.el7.x86_64.rpm
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.35-1.el7.x86_64.rpm
# sudo rpm -ihv MySQL-devel-5.6.35-1.el7.x86_64.rpm
```

## 派生トラブル
- CentOS 7のPHP5.4のmysqlモジュールが使えなくなる。
- MySQL（mariaDBではなく）に対応したPHPに入れ換えなければ。

```
# sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# sudo yum install --disableexcludes=all --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo php-gd php-mysql php-ldap php-xml php-pecl-imagick php-pecl-imagick-devel
```
- 再インストールを
リスト内包表記

# 基準のfor文

```python:sample1.py
num =[]
for i in range(1,6):
    num.append(i)
print(num)
```

```python:sample1.py
[1, 2, 3, 4, 5]
```

# 上記をリスト内包表記にすると、以下のようになる。

```python:sample1.py
num_list = [num for num in range(1,6)]
print(num_list)
```

```python:sample2.py
[1, 2, 3, 4, 5]
```

# リスト内包表記の変数が異なった場合

```python:sample3.py
n = 1
num_list = [n for num in range(1,6)]
print(num_list)
```

```python:sample3.py
[1, 1, 1, 1, 1]
```

# リスト内包表記で同じ変数を使うが、計算を加える

```python:sample4.py
num_list = [num-1 for num in range(1,6)]
print(num_list)
```

```python:sample4.py
[0, 1, 2, 3, 4]
```

# リスト内包表記にif文を加える場合

```python:sample5.py
num_list = [num for num in range(1,6) if num % 2 == 1]
print(num_list)
```

```python:sample5.py
[1, 3, 5]
```
CentOS 7にgraphvizをインストール

## CentOS 7環境にgraphvizをインストールした際のメモ

```
$ wget http://www.graphviz.org/graphviz-rhel.repo
$ sudo cp ./graphviz-rhel.repo /etc/yum.repos.d/
$ sudo yum install graphviz-2.38.0-1.el7
$ sudo yum install graphviz-graphs-2.38.0-1.el7
$ sudo yum install graphviz-gd-2.38.0-1.el7
$ sudo yum install graphviz-devel-2.38.0-1.el7
$ sudo yum install graphviz-lang-python-2.38.0-1.el7
```

参考URL：http://www.graphviz.org/Download_linux_rhel.php
RailsのActiveRecordのインスタンス生成コストを抑止する

RailsのActiveRecordのインスタンス生成は重い。

- 大量のインスタンスを生成すると、性能が劣化しがちになる。
- 参照用データであればJSONに変換してキャッシュに入れるなどの工夫もあるかと思いますが、全部それで対応するのはなかなかしんどい。

インスタンス生成コストをこんな感じで抑えられるよっていうひとつのやり方。
書いててなかなか最低なやり方だなと思ったが、背に腹は代えられない。悪手なので、どうしてもって場合用

# 前提

[Railsガイド](https://railsguides.jp/association_basics.html)にある関連をサンプルにする。環境はRails 4.1.8

```ruby
class Customer < ActiveRecord::Base
  has_many :orders, dependent: :destroy
end

class Order < ActiveRecord::Base
  belongs_to :customer
end
```

# 課題

普通はいろんな条件で絞ると思うが、さらっと

```ruby
customer.orders
```
とかかれていて、ActiveRecordインスタンスが何百個も生成されるような場合、性能劣化の要因になる。


# 対応案

### 1. Modelと同じカラム構造をもつStructを定義する

```ruby
class Order < ActiveRecord::Base
  belongs_to :customer

  ModelStruct = Struct.new(:id, :customer_id, :order_date)
end
```

### 2. データ取得時にpluckで抜き出してStruct型にする

```ruby
orders = cutomer.orders.
           pluck(:id, :customer_id, :order_date).
           map do |id, customer_id, order_date|
             Order:: ModelStruct.new(id, customer_id, order_date)
           end
```

これでActiveRecordインスタンスを生成せずに、擬似的にActiveRecordと同じようにインスタンスを扱える。

```ruby
orders.each do |order|
  order.id
  order.customer_id
  order.order_date
end
```

HashではなくStructにするのは

- ActiveRecordインスタンスと同じ感覚で扱える
- Struct内にメソッドを定義できる
- 存在しないメソッドを指定するとエラーが返る(Hashだとnilになる)

といったメリットがあるため。
Structはメソッドも定義できる。余計カオスになるのでオススメはしません。

```ruby
class Order < ActiveRecord::Base
  belongs_to :customer

  ModelStruct =
    Struct.new(:id, :customer_id, :order_date) do
      attr_accessor :hogehoge

      def method_name
        # method
      end
    end
end
```

# その他
- 保守性/拡張性には欠ける対応なので、使いすぎるのはよろしくないと思います。他にいい案あったら求む。
- [pluck_to_hash](https://github.com/girishso/pluck_to_hash)というgemもあったのですが、試したところ遅かったので使うのをやめました。
pandas 購買データ(id x 商品) のデータフレームを辞書に変更する

# 購買データを辞書に変更してみる。to_dict は使いません

to_dict だとうまくいかない感じだったので、自分でやってみました。
きっかけは、購買データを協調フィルタリングで処理したかったんですが、データフレームだと
うまくいきそうになかったのがきっかけ。
あと、集合知プログラミングにあるようなレコメンドロジックを試してみたいんだけど、
手元にはデータフレームのデータで、なんとか変換して利用したいと思いました。

```  
# coding: utf-8

import pandas as pd
from collections import defaultdict

df = pd.DataFrame({'id':['a','a','b','b','c',], 'shouhin':['x', 'y', 'y','z', 'x']})
``` 


以下のようなデータがあったとします

```
  id shouhin
0  a       x
1  a       y
2  b       y
3  b       z
4  c       x
```
これを下のような辞書に変更するのが目的です。

```
{'a': ['y', 'x'], 'b': ['y', 'z'], 'c': ['x']}
```


まず、defaultdictで辞書を作っておきます。
そして、df.values で各行を取ってきて、要素をネストした辞書を作ります。
(df.values では numpy.array を返しています)

```
tempdic = defaultdict(dict)

for d in df.values:
    
    tempdic[d[0]][d[1]] = 1.0     # 値はなんでも良い
    
```

続いて、以下のようにすればOKです。

```
dic = {k: tempdic[k].keys() for k in tempdic}
```
dic を見ると、想定通りになっています
```{'a': ['y', 'x'], 'c': ['x'], 'b': ['y', 'z']}
```

set を利用すれば共通の商品を取って来れますし、jaccard係数も計算しやすいです。

```set(dic['a']) & set(dic['b'])
{'y'}```


なお、最初の部分はdf.values にしなくても、ループさせてdf.iloc[行番号]で各行の要素を取得しても
可能ですが、その場合速度が格段に遅いです。
購買データの場合だとデータ量もそれなりに多いと思うので、ここが遅いと厳しいです。

また、whileやif を用いて一度にやる方法もあるかと思いますが、ここも速度優先で
そういった方法は用いないようにしています。
高度情報処理試験攻略法

去年、情報セキュリティスペシャリストに合格したので、攻略法をちょっと整理してみる。
データベーススペシャリストやネットワークスペシャリストも同様の攻略法で合格できると思います。

#■最初に一番重要な話
合格するコツは「勉強すること」だけです！
勉強さえすれば、新人SEでも、高校生でも合格できるのが、情報処理試験です。
そして、これが一番難しい。

高度情報処理試験の合格率は「約14％」です。
単純計算すると、7人に1人が合格となるが、これは、応募者の7人に1人が合格ではない。
実際は、応募者の10人に1人しか、合格していない。(約10％無いくらい)
どういうことかと言うと、この合格率は受験者の7人に1人が合格しているというものなのだ。
応募者のうち、66％(3人に2人)しか受験していない。この66％が受験者数となる。
つまり、3人に1人は、試験会場に辿り着けていない。

試験の申込時は「資格取るぞ！」と申し込むが、実際は、やる気が続かず、勉強していなくて、当日にもう諦めて、会場にすら行かない。これが3人に1人。
統計を見ると、10人を簡単に内訳すると、以下のようになります。
・会場に行かない・・・3人
・午前1で不合格・・・2人
・午前2で不合格・・・2人
・午後1で不合格・・・1人
・午後2で不合格・・・1人
・合格・・・1人

正直、午前は完全に足切のため、午前で落ちるのは、勉強不足です。
10人中7人は勉強不足と言わざるを得ない。

何故、そうなってしまうか。
原因は大きく２つ。
「やる気が出ない」か「難しくて、挫折する」からだと、思います。

#■やる気が出ない問題対策
正直、これは、すっごい難しいですが、私が実践した方法をいくつか、記載します。
・場所を変える。自宅はいろいろ誘惑が多い。スマホとか、マンガ、ゲーム、TVなど。
　カフェや図書館、会社など、集中できる場所で勉強する。
・ネットで受験者の体験記を見る。「2か月の勉強で合格した方法」など、成功談、失敗談が記載されているので、他の受験者の体験談を見て、モチベーションを上げる。
・合格後をイメージする。給与のアップや他者の評価をイメージする。
・誰かに合格を宣言する。

#■難しくて、挫折する問題対策
単純に合格するだけなら、以下の順番の勉強法をお勧めします。
１．教科書と問題集を買う。
２．まず、午前２の勉強から始める。問題集の午前２の問題と解答を読む。
　最初に教科書を読む所から始めると、読み終わる前に挫折する可能性があります。
　最初に問題を解こうとすると、解けなくて、挫折する可能性があります。
３．問題集の午前２の問題を解く。何度も繰り返し、答えを覚えるまで。
　ちゃんと、問題を解いて、解答の解説を読んで、よく理解しましょう。
　問題の中で、知らない用語が出たら、調べて覚えましょう。
　教科書は試験範囲全体をカバーしています。重要なところを記載してくれてはいますが、重要な箇所が分かりにくいことが多いです。
　問題集は、問題になっているということは、重要なところであり、より重要な箇所は、複数の問題になっています。
４．一通り、問題集で、重要な箇所の知識が付いたら、教科書を一通り読んで、あまり重要では無い箇所と、すでに知ってることの知識を補強しましょう。
５．そして、ここからが本番。問題集の午後１を解く、何度も、解き理解を深める。問題の傾向を把握する。
６．問題集の午後２を解く、何度も、解き理解を深める。基本的に午後１と午後２は似たようなものです。
７．最後、午前１は免除の人はいいですが、私のように、免除では無い人は、以下のように勉強しましょう。
　過去5年分の応用情報：午前と高度情報：午前１の答えを全問、丸暗記する。
　基本的に、これらの過去問から出されます。計算問題とかも全く同じものが出るので、答えを覚えましょう。
　合格するだけなら、理解しなくてもいいです。答えを覚えましょう。
　私も1問、どう計算するか、一切わからないけど、答えを知ってるから解けた計算問題がありました。

#■その他
・勉強法を工夫する。書籍による勉強だけではなく、ネットの記事を読んだり、YouTubeの動画(情報処理試験関連)を見る。
・午前はスマホのアプリで移動時間などの空き時間に勉強すると、効果的。
・試験前日は、よく寝る。試験当日は、午後２までやると、結構、疲れます。体調は万全に。
・当日の交通手段、時刻表をよく確認し、遅刻しない。
・試験当日のお昼ご飯は朝、買っておく。お昼は、試験会場の近くは混雑するので、朝に買って、会場で食べながら、午後の準備をしましょう。
・午後の解答に使う漢字は１通り、書けるようにしておく。
・最後まで諦めずに、解答を限界まで埋める！諦めない！

＝ｗ＝)ノ　私も、今回のデータベースの試験、頑張ります！！
Webアプリケーションエンジニアがディープラーニングに挑戦する際にやったこと(Coursera Week7)

# Coursera Week7
## はじめに
CourseraのWeek7を実施しましたので、私のメモを公開します。
Courseraってなんだ？という方は[Week1](http://qiita.com/KirariGlock/items/d41bdcc6f5ec5ad255fb)から御覧ください。

# Week7
### Large Margin Classification
サポートベクターマシンのコスト関数。
$$
\min_\theta C \sum_{i=0}^m \left[y^{(i)}cost_1(\theta^Tx^{(i)})+(1-y^{(i)})cost_0\theta^Tx^{(i)} \right]+\frac{1}{2}\sum_{i=0}^n\theta_j^2
$$
これは$y=1$の場合、$\theta^Tx \geq 1$
$y=0$の場合、$\theta^Tx \leq -1$

### Kernel
以下のsimilarity関数を数学的にはカーネル関数と呼ぶ。
カーネルは$k$と表すこともできる。
$$
similarity(x,l^{(i)})=\exp(- \frac{|| x - l^{(i)}||^2}{2\sigma^2}) = \exp(-\frac{\sum_{j=1}^n(x_j-l_j^{(1)})^2}{2\sigma^2})
$$

### Using An SVM
ルートや逆行列を計算する場合、ロジックを1から実装するのではなくライブラリを使うべきである。
ライブラリに全ての計算を任せるが、こちらがやるべきこともある。
1つ目は$C$の値を選ぶこと。($C$の値($\lambda$)を選ぶことで、オーバーフィットやアンダーフィットを調整する。)
2つ目はカーネルを使用するかしないかの選択をする。
カーネルを使用しないことをlinear kernelという。
これは多くのフィーチャ($n$が大きい)く、教師データが小さい場合($m$が小さい)場合、オーバーフィッテングしやすいためカーネルを使わないのが合理的になる。
ガウスカーネルを使用する場合、$\sigma^2$を選択する必要がある。
$\sigma^2$が大きいと低バリアンス、高バイアス(アンダーフィット)
$\sigma^2$が小さいと高バリアンス、低バイアス(オーバーフィット)
カーネルを使用する場合は少ないフィーチャで教師データがたくさんある場合に合理的である。

線形カーネルやガウスカーネル（やその他のカーネル）を使用する場合、何にでも使えるわけではない。
Mercerの定理を満たす必要がある。

ロジステック回帰とSVMのどちらを利用すべきか
$n \geq m$で$n=10000$くらい$m=1000$くらいであれば、ロジスティック回帰か線形カーネルを使用する。
$n$が小さく、$m$が中くらいのときは線形カーネルを選択する。
$n$が小さく、$m$が大きいときにガウスカーネルを使用すると遅いかもしれない。
その時は手動でフィーチャを追加してロジステック回帰にするか、線形カーネルを試す。
[Python] matplotlib: 論文用に図の体裁を整える

理系の論文用に使用する図を matplotlib の pyplotで作るときに使用するコマンドをまとめます。
主に，physical review などの物理系論文の図として使用しましたが，おそらく他の分野でも使えます。
2 columnの論文を想定しており，
図の幅は1 column 分の図で 8 cm，2 column 分の図で16 cm としています。

# モジュールのインポート

```python
import matplotlib.pyplot as plt
```

以前は pylab をインポートしていたが，pylabは numpy と matplotlibの関数の一部をとってきているようで，
numpy は別途インポートしているため，上記を使用しています。

# 全体の設定：rcParams

使用するコード内で rcParams を使用すれば，各図を修正しなくても一括で図のパラメータを変更できます。

```python
plt.rcParams['font.family'] ='sans-serif'#使用するフォント
plt.rcParams['xtick.direction'] = 'in'#x軸の目盛線が内向き('in')か外向き('out')か双方向か('inout')
plt.rcParams['ytick.direction'] = 'in'#y軸の目盛線が内向き('in')か外向き('out')か双方向か('inout')
plt.rcParams['xtick.major.width'] = 1.0#x軸主目盛り線の線幅
plt.rcParams['ytick.major.width'] = 1.0#y軸主目盛り線の線幅
plt.rcParams['font.size'] = 8 #フォントの大きさ
plt.rcParams['axes.linewidth'] = 1.0# 軸の線幅edge linewidth。囲みの太さ
```

フォントの 'sans-serif' は 「ひげ飾り」がない文字のことで，通常論文の図に用いる文字はひげ飾りなしを用いることが多いです。
フォントの大きさが8なのは，キャプションの説明文と同じくらいの文字サイズになるからです。

# 各図の設定

- 図のサイズの設定

```python
plt.figure(figsize=(3.14,3.14))
```
図のサイズはインチで指定され、変数は(幅, 高さ)です。
3.14 インチは約8cm。横幅を変えず高さを調節すると良いです。

- 軸の数値の桁数指定：

```python
plt.gca().yaxis.set_major_formatter(plt.FormatStrFormatter('%.3f'))#y軸小数点以下3桁表示
```

- 軸の数字にオフセット(+1.05e9 など)を使わずに表現する

```python
plt.gca().xaxis.get_major_formatter().set_useOffset(False)
```

- 軸の数字が整数になるようにする

```python
plt.gca().yaxis.set_major_locator(ticker.MaxNLocator(integer=True))
```

- 軸目盛りの個数指定：

```python
plt.locator_params(axis='y',nbins=6)#y軸，6個以内．
```

- 軸目盛りの向きおよび枠のどの位置はありにするかを指定：

```python    
plt.gca().yaxis.set_tick_params(which='both', direction='in',bottom=True, top=True, left=True, right=True)
```

- 図のコマンドの最後で以下を使用する：

```python
plt.tight_layout()#グラフが重ならず，設定した図のサイズ内に収まる。
plt.savefig('figname.pdf', transparent=True)
plt.savefig('figname.png', transparent=True, dpi=300)
```

拡張子を変えることで図のフォーマットが変わります。transparentを指定することで，背景が透明に。dpi はビットマップ画像のドット密度です。
図を保存後、TeXやワードで横幅8cmなどの出力したサイズに指定して使います。

- カラーマップ

```python
plt.contour(X, Y, Z, cmap='viridis') # viridisの配色で等高線を描く
```

配色は、色覚異常の人でも判別しやすいとされる viridis がおすすめです。



[メモ] 随時更新していきます。

# 参考文献
- [matplotlib](http://matplotlib.org/)：  サイト内の[ユーザーガイド]( http://matplotlib.org/users/index.html)が便利です
【WP】tcdテーマの子テーマ

# 子テーマ
テーマのアップデートの際も、変更を保持するために作成するテーマ
#作成プラグイン
ワンクリックで作成できるプラグイン（「One-Click Child Theme」）がある。
https://ja.wordpress.org/plugins/one-click-child-theme/
#tcd販売のテーマでの子テーマの扱い
>仕様上子テーマよりテーマオプションの記述が優先されます。
>例えば、記事タイトルと本文のフォントサイズ設定やカスタムCSSです

→これらは、子テーマではなく、テーマオプションで設定する必要がある
http://design-plus1.com/tcd-w/2016/11/one-click-child-theme.html
HTML の lang 属性が違うと iOS 版の VoiceOver で日本語が読み上げられない問題について

日本語が書かれているページなのに、 <a href="http://www.apple.com/jp/accessibility/iphone/vision/">iOS の VoiceOver</a> だと英語しか読み上げないページがあった。なんとなく Lang 属性の指定が問題なのかな？と思いながら検索したところ、やはりそのようで、 iOS の VoiceOver については HTML の Lang 属性で読み上げる言語を変えるらしい。(2017 年 4 月 23 日追記：テストしたページの文字コードは UTF-8)

以下はそれに関するチェック方法について。

## iOS の VoiceOver での読み上げが Lang 属性に左右されることが書いてあったリソース
- <a href="http://bonpworks.tumblr.com/post/17833038607/voiceover-%E3%81%AF-html-%E3%81%AE-lang-%E5%B1%9E%E6%80%A7%E5%80%A4%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E8%AA%AD%E3%81%BF%E4%B8%8A%E3%81%92%E3%82%8B%E8%A8%80%E8%AA%9E%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B%E3%81%AE%E3%81%8B">VoiceOver は HTML の lang 属性値によって読み上げる言語を切り替えるのか •• connecting dots</a>
- <a href="http://accessibility.mitsue.co.jp/archives/000197.html">【iPhone 3GS使用レポート5】 バージョンアップで向上した読み上げ機能 | アクセシビリティBlog | ミツエーリンクス</a>

<a href="http://www.apple.com/jp/accessibility/mac/vision/">OS X 環境の VoiceOver</a> や <a href="https://play.google.com/store/apps/details?id=com.google.android.marvin.talkback&hl=ja">Android の TalkBack</a> だと日本語を読み上げるので、そっちに揃えてくれればよいのにと思ったり（※良い子は正しい言語を指定しましょう）。
## リモートデバッグについて
Mac のローカルにある HTML であれば HTML のソースを直接書き換えれば良いが、今回は iOS 上の Safari なので、リモートデバッグの機能を使って "lang=en" を "lang=ja" に書き換え、その上で  VoiceOver で日本語が読み上げられるかを確認。

- Safari でのリモートデバッグ設定は <a href="https://developer.apple.com/library/content/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/GettingStarted/GettingStarted.html">Safari Web Inspector Guide (英語)</a> を参照
- Android でのリモートデバッグについては <a href="https://developers.google.com/web/tools/chrome-devtools/remote-debugging/">Android 端末のリモート デバッグを行う  |  Web  |  Google Developers</a> を参照。

## iOS 環境で Lang 属性が変わると読み上げ結果が変わるかどうかの確認方法： 
1. Mac 上で Safariを開き、Web Inspector でリモートデバッグを設定する。
    1. メニューの Safari > 環境設定 > 詳細 から「メニューバーに"開発"メニューを表示」にチェックを入れる
2. iPhone の詳細設定で Web インスペクタを使用することを許可する
    1. 設定 > Safari > 詳細 > Web インスペクタ を ON にする
3. iPhone と Mac を USB ケーブルで Mac と繋いで、 Mac に繋ぐことを許可する 
4. Mac上の Safari で開発 > iPhone から該当の Web サイトを選び、 Web インスペクタを開く
5. 要素タブを開き、lang="en" を lang="ja" に書き換える
6. iOS 上の VoiceOver を起動して、確認したい Web サイトを読み上げる。

## Android 環境で Lang 属性が変わると読み上げ結果が変わるかどうかの確認方法：
1. Android 端末をリモート デバッグ用に設定
    2. 詳細は<a href="https://developer.android.com/studio/run/device.html#developer-device-options">端末開発者向けオプションを有効にする</a>を参照
3. USB ケーブルで Android 端末と Mac を繋ぐ
4. PC 上で Google Chrome のデベロッパーツールを起動してリモートデバッグを指定する
5. Elements パネルを開き、lang="en" を lang="ja" に書き換える
6. Android 端末上で TackBack を起動して、確認したい Web サイトを読み上げる。
    1. TackBack の起動方法については <a href="https://support.google.com/accessibility/android/answer/6007100?hl=ja">Talkback を有効にする - Android Accessibility ヘルプ</a>を参照

## どんなページで起きやすいのか？ (2017 年 4 月 23 日追記)
- 英語圏で作られたテンプレをベースに作成されたページ or コピペページ
- 英語圏のサービスを多言語化したページ

## いやこれ毎回読み上げしなくても事象わかってればソース見ればわかるよね？ (2017 年 4 月 23 日追記)
- 日本語だらけなのに英語しか読み上げない、ということを理解してもらう上では意味があるかと思います（特にクライアント）。

最後のは多分に願望入ってますが。
ダイブ・イントゥ・C++11・フォア・パイソニスタ（Dive into C++11 for Pythonista) 

# 背景
[digiporo#13（札幌C++勉強会共同開催）](https://digiporo.connpass.com/event/52265/)の復習がてら、Nimという言語に一目惚れしたものの、やっぱりC++(11)すげえ、例えるなら、
「隣のお姉さん（当時C++98（更に正確に言うとVisual C++ 6.0））が上京して、自分も上京して会ったら、すごく綺麗な人（C++11）になってた」
と思ったので書いておく。

それと個人的にC++を学ばざるを得なくなってきたので、やっぱりその勉強のまとめがてら書いておく。

なお、タイトル元ネタは[Dive Into Python 3 日本語版](http://diveintopython3-ja.rdy.jp/)です。

# ご容赦ください

復習記事なので、正確ではない情報が多々有ると思います。その時はC++erの皆様はどうぞお手柔らかにマサカリをお投げくださりますようお願い申し上げます。

また、Pythonistaの方々には「おまじない」で済ませてしまう箇所が多々ありますが、@ignis_fatuus さん曰く、
「『おまじない』としておかないと、C++及び計算機科学の深淵に飲まれる（筆者偏見による要約）」
なので、おまじないで済ませてしまう部分が多々ある予定でしたが、そこまで僕はC++を書けないことにこの記事を書いて気づいたので、おまじないなんて出てこない、ただのポエムだ。

もし*おまじない*が気になりましたら、[cpprefjp - C++日本語リファレンス](https://cpprefjp.github.io/)や[C++ Glossary](http://www.kmonos.net/alang/cpp/glossary.html)他をあたることをオススメいたします。

# 初めに「なぜC++なのか」
やはりOSの乗っかったマシンでリソースをフルに使いたい時にはC++の方が優位な事があるし、Unreal EngineなどのゲームエンジンでもC++は現役である。

「OSの乗っかった」と書いたのは、やはり組み込みの世界になるとまだCやアセンブラが優位なところがあるためである。

## C++は怖い？
C++はメモリ管理やその他リソース管理で、最悪「OSを壊すのではないか」と怖がっている人も居ると思う。私もその一人だった。

そこは@ignis_fatuusさん曰く、
「メモリ解放が上手くできなくてOSが不安定になる可能性はあるが、OSが壊れるということはめったに無い」
ので、むしろOSが壊せたらC++をそこまで使いこなせた証だと、
「環境を壊せたらオブジェクトをdigしまくって使いこなせた証」
とSmalltalk思想で行こう。

また、メモリの参照違反などは、OSやコンパイラがしっかりしていればちゃんとOS側やコンパイラが警告を出すので安心してほしい。

そしてここが肝だが、C++11になって*スマートポインタ*や*ユニークポインタ*というものが導入されたので、LL言語を書き慣れた人でも、リソースの解法忘れによるリソースの食いつぶしが回避されるはず（罠は有るらしい。しかし、初心者がその罠にハマるのはもうしばらく先だろう）

## 低レベルが分かると高レベルに活かせる

C++は今となっては低レベル言語である。Pythonのライブラリの一部はC++で書かれていると言ってもいいだろう。

それで、C++を学ぶと何が美味しいかという話なのだが、C++で重い処理を書いたら、Pythonでそれを実装する際に、
「あ、この処理は裏ではああいったことをしているのだな」
とイメージできるため、Pythonで処理がスマートなソースが書けるという話である。

## 別に今はCから初めなくても良い。
言語仕様が結構変わっているらしく、CとC++はもはや別の言事考えても良いとのこと。なのでいきなりC++から始めても良いのだが……なかなかC++から初めてる資料が無い。

# 初めてのC++プログラミング

慣習に従うなら、まずはHello worldを書いてその解説をしてうんざりさせるか、深淵に自分も飲まれながら読者も引きずり込む事になると思う（これはジョークではなく、真面目にである。それだけC++のHello worldは深い）ので、[初めてのPythonプログラム - Dive Into Python 3 日本語版](http://diveintopython3-ja.rdy.jp/your-first-python-program.html)の[humansize.py](http://diveintopython3-ja.rdy.jp/your-first-python-program.html)をC++11で書いてみようと思ったが、筆者が朝5時から昼1時まで頑張ったものの、できなかったため、やっぱり[C言語/C++ プログラミング 入門](http://vivi.dyndns.org/tech/cpp/cpp.html)辺りから頑張ることにする。

@h_hiro_ さんの「[C++のライブラリを簡単に眺めてみよう](https://www.slideshare.net/maraigue/c-73294701)」を真剣にメモした俺なんだったのだろう。

とりあえずコンパイルの通らないソースコードは[gist](https://gist.github.com/manzyun/183df65c808413bca052fc68821aeab7)にぶちあげておくので、サンドバックにしてください。C++チットモデキナイ。

# まとめ（編集後記）

とは書いたものの、C++は2011年、C++11がリリースされ、その標準ライブラリの豊富さや、新しい概念を採り込み、後はC++の文法が分かればPythonistaも比較的書ける言語になったのではないかと思った次第。

というわけで、自分ははよう[urho3d/Urho3D: Cross-platform 2D and 3D game engine](https://github.com/urho3d/Urho3D)でゲーム作れるようになるか、[FocusWriter](https://gottcode.org/focuswriter/)とか[Mixxx](http://www.mixxx.org/)のフォークとかハックできるようになろう……。
機械学習論文読みメモ_54


[Conditional Image Generation with PixelCNN Decoders](https://arxiv.org/pdf/1606.05328.pdf), NIPS2016
PixelCNN構造に基づいた条件付き画像生成モデルを提案する。
このモデルは条件としてラベル情報だけでなく、CNNの特徴空間なども使う事ができる。
結果、ラベル情報による条件付では、其のラベル関する多様な画像生成、特徴空間による条件付けでは、例えば顔画像に対する特徴量を条件としてその顔に関する様々な表情を生成可能である。
この条件付き生成モデルの性質を用いて、PixelCNNをエンコーダとしてだけでなく、デコーダとして利用可能にした。

[Preserving Color in Neural Artistic Style Transfer](https://arxiv.org/pdf/1606.05897.pdf)
従来提案されてきた、neural style transferは入力画像の画風変更を行う事が可能であるが、同時にその色も変えてしまう。
本論では、色を変えずに画風だけを変更するための手法を提案する。
本論では特に、color histogram matching及びluminance-only transfer手法を比較し、その性能について議論する。

[On the expressive power of deep neural networks](https://arxiv.org/pdf/1606.05336.pdf)
学習前後におけるdeep learningモデルの表現力について研究する。
３つの表現力に関する指標がネットワークの深さに対して指数的な相関がある事を示す。
そしてそれら３つの指標はいずれも４つ目の指標であるtrajectory lengthに関係している事が分かった。
この量はネットワークの深さに対して指数的に増加し、よって深さに強く関連がある。
この事実によると、ある層が持つ表現力は、その層以後の層が持つ深さ（trajectory length?)によって決まってくる。
機械学習論文読みメモ_53


[The Curious Robot: Learning Visual Representations via Physical Interactions](https://arxiv.org/pdf/1604.01360.pdf)
従来の視覚表現学習は、画像とそのラベルの対応を用いる事でCNNにより学習が行われてきた。
しかし生物学的には、対象とのインタラクションを通じてそれらは学習されてきた。
これは従来のパッシブな与えられたもののみから学習を行う方法とは異なっている。
本論ではBaxter platform上に構築されたテーブル上の物体に対するインタラクションを行い、そのデータを得る事が可能な
システムを作成した。
これらのインタラクションデータがそのままCNNの教師データとして利用可能である。
これにより物体認識性能が向上可能で、また学習された特徴表現も可視化した。

[A Growing Long-term Episodic & Semantic Memory](https://arxiv.org/pdf/1610.06402.pdf), NIPS2016
ニューラルネットワークなどに基づいた長期記憶のモデルはニューロン間の重みによって特徴づけがなされる。
しかしその重みの数は基本的に固定されており、その記憶容量を増やしていく事が出来ない。
これは長い期間を通して様々なドメインに渡り順々に学習を行っていくようなlifelong learningの文脈においては望ましい事ではない。
本論で提案するシステムは、微分不可だが効率的で各コンテンツにアクセス可能なメモリ構造を持つ。
この構造は長い期間のシーケンシャルな知識や、意味的知識を制限なくたくさんのドメインに対して記憶する事が可能である。
これは新たなドメインに対する転移学習として応用する事も可能である。

[Learning Scalable Deep Kernels with Recurrent Structure](https://arxiv.org/pdf/1610.08936.pdf)
シーケンスデータの構造を通常のカーネル関数を用いて捉える事は難しい。
本論ではガウス過程として適用可能な閉形式のカーネルを新たに提案し、それを用いたモデルとしてGPLSTMを提案する。
このモデルはLSTMネットワークを包含しており、かつノンパラメトリックモデルであるGPのアドバンテージを利用する事が可能である。
ガウス過程の周辺化確率に基づいた最適化によるカーネル関数のパラメータを学習可能で、それはsemi-stochasticな手続きに基づく。
また提案するカーネルのアドバンテージとして高速でスケーラブルな予測が可能である。
Visual Studio 2017でAWS SDK for Node.js開発

Visual Studio 2017でNode.jsを使ってAWS S3へアクセスする手順です。

#環境
Windows 7 Professional SP1 64bit
Visual Studio 2017 Community
Node.js v6.10.0

環境構築やNode.jsプロジェクトの作成はこちらを参考にしてください。
http://qiita.com/akabei/items/8b226e14df0b156bcf2a

#aws-sdkパッケージインストール

プロジェクトのnpmを右クリックして「新しいnpmパッケージのインストール...」を選択します。

![fff.png](https://qiita-image-store.s3.amazonaws.com/0/112075/35553589-763d-9e59-854b-1d133426c909.png)

最初はパッケージリストの読み込みに時間がかかりますが、しばらく待つと以下のダイアログが表示されます。

![ggg.png](https://qiita-image-store.s3.amazonaws.com/0/112075/8de28724-ba8b-c22c-cda5-1b430b5da5eb.png)

パッケージの検索に「aws-sdk」を入力するとリストに作成者がAmazon Web Servicesのものが表示されるので、それを選択してパッケージのインストールを押します。

![ggg.png](https://qiita-image-store.s3.amazonaws.com/0/112075/759414a6-4493-e305-cd0f-2dcc737ddf16.png)

すこししてリストに「ローカルにインストールされました」と表示されたらインストール完了です。

![ggg.png](https://qiita-image-store.s3.amazonaws.com/0/112075/47707a38-e67b-e41f-3f1c-dd3b53cf0e50.png)

ダイアログを閉じるとプロジェクトのnpmにaws-sdkが追加されています。

![hh.png](https://qiita-image-store.s3.amazonaws.com/0/112075/aa2bfbcc-fc84-be28-d0ca-fb9511774e68.png)

#AWS S3アクセス
S3のバケット一覧を表示するプログラムをapp.jsに記述します。
コードはコピペしないで直接入力すると入力補完されることがわかります。すごく便利！
事前にaws configureコマンドで認証情報を設定してあればaws.config.update()は不要です。

```JavaScript:app.js
var aws = require('aws-sdk');

aws.config.update({
    accessKeyId: 'XXXXXXXXXXXXXXXXXX',
    secretAccessKey: 'YYYYYYYYYYYYYYYYYYYYYYYYYYYY',
    region: 'ap-northeast-1'
});

var s3 = new aws.S3();
s3.listBuckets(function(err, data) {
    for (var bucket of data.Buckets) {
        console.log("Bucket: ", bucket.Name, ' : ', bucket.CreationDate);
    }
});
```

実行してバケット一覧が取得できれば完成です。
Python3向けOpenCV3インストール@macOS

macOSにhomebrew経由でPython3用OpenCV3がインストールできないとき、先にnumpyをインストールしておくと上手くいく（かもしれない）。

- macOS Sierra(10.12.3)
- Python 3.6.0
- OpenCV 3.2.0(-dev)

```
$ brew install numpy --with-python3
$ brew tap homebrew/science
$ brew install opencv3 --with-contrib --with-python3 --without-python --HEAD
$ echo "/usr/local/opt/opencv3/lib/python3.6/site-packages/" \
  > /usr/local/lib/python3.6/site-packages/opencv3.pth
```
class methodの並列化

#class methodの並列化とプロセス監視
pythonでは、並列化ライブラリであるmultiprocessingのmultiprocessing.Poolを使って簡単に並列化が実現できるが、class method等の並列化には使えない。この場合、multiprocessing.Processをつかって並列化するしかないが、CPU数ごとにプロセスを走らせるとCPU数以上のプロセスを走らせたときに、早く終わったプロセスのCPUが空いてしまって無駄になってしまう。SGEみたいに終わったCPUから新しいプロセスを走らせられないかと思い、それ用のスクリプトを無理やり作ってみた。
もしかしたら、もっと良いやり方があるのかもしれない。

class Methodを並列化したとき並列プロセス管理のスクリプトの例。 

```py
import multiprocessing as mp
ps = []
for i in range(1000):
    ps.append(mp.Process(target=hoge,args=(i,))) #targetとなる関数もしくはメソッドを1000個生成

finishedList       = []
presentindex       = 0
for p in ps[0:mp.cpu_count()]:
    p.start()
    presentindex += 1

while 1:
    time.sleep(1)#一秒ごとに監視。
    for i, p in enumerate(ps[:presentindex]):
        if p.is_alive() or i in finishedList:#プロセスpの終了判定
            pass
        else:
            finishedList.append(i)#終了したプロセスのindexを保存
            if presentindex < len(ps):
                ps[presentindex].start()
                presentindex += 1
                print(i)

    if len(finishedList) == len(ps):#終了したプロセスと生成したプロセス数が同じだったら終了
        break
```
Go言語でCookieを操作する(設定と取得)

# Go言語でcookieを扱う

## HTTPレスポンスにCookieを設定する
Goで書いたサーバ側で、HTTPレスポンスヘッダのSet-Cookieフィールドを記述する。
コードは以下。

``` go
        // 1
     cookie := &http.Cookie{
          Name: "hoge", // ここにcookieの名前を記述
          Value: "bar", // ここにcookieの値を記述
     }
        // 2
     http.SetCookie(w, cookie)
```

手順は、以下の通り
1. httpパッケージのtype Cookieのフィールドを設定する
2. httpパッケージのsetCookie関数の引数にResponseWriterとCookieを渡す
-> HTTPレスポンスヘッダのSet-CookieにCookieで追加したものが設定される

なお、NameやValue以外にもrfc6265に準拠した様々なフィールドを設定できる
cookieで設定できるフィールドは、以下のhttpパッケージのtype Cookieの限りである(公式より引用)


```
type Cookie struct {
        Name  string
        Value string

        Path       string    // optional
        Domain     string    // optional
        Expires    time.Time // optional
        RawExpires string    // for reading cookies only

        // MaxAge=0 means no 'Max-Age' attribute specified.
        // MaxAge<0 means delete cookie now, equivalently 'Max-Age: 0'
        // MaxAge>0 means Max-Age attribute present and given in seconds
        MaxAge   int
        Secure   bool
        HttpOnly bool
        Raw      string
        Unparsed []string // Raw text of unparsed attribute-value pairs
}
```
(引用元 https://golang.org/pkg/net/http/#Cookie)

## HTTPリクエストからCookieを取得する
Goで書いたサーバ側で、クライアントからのHTTリクエストのヘッダに記述されているSet-Cookieフィールドを取得する。
コードは以下。

``` go
     // 1
     cookie, err := r.Cookie("hoge")

     if err != nil {
          log.Fatal("Cookie: ", err)
     }
        // 2
     v := cookie.Value
        fmt.Println(v)

```

1. httpパッケージのtype RequestのCookieメソッドを使用して、HTTPリクエストからのcookieを取得する
2. 取得したcookieのフィールドにアクセスする


## 実装してみる
実際にGoでcookieの設定と取得を行ってみる。



``` go:main.go
package main

import (
     "net/http"
     "fmt"
     "log"
     "html/template"
)

// cookieの設定を行う
func setCookies(w http.ResponseWriter, r *http.Request) {
     cookie := &http.Cookie{
          Name: "hoge",
          Value: "bar",
     }
     http.SetCookie(w, cookie)

     fmt.Fprintf(w, "Cookieの設定ができたよ")
}

// cookieの取得を行い、htmlを返す
func showCookie(w http.ResponseWriter, r *http.Request) {
     cookie, err := r.Cookie("hoge")

     if err != nil {
          log.Fatal("Cookie: ", err)
     }

     tmpl := template.Must(template.ParseFiles("./cookie.html"))
     tmpl.Execute(w, cookie)

}

// メイン
func main() {
     http.HandleFunc("/", setCookies)
     http.HandleFunc("/cookie", showCookie)

     if err := http.ListenAndServe(":8080", nil); err != nil {
          log.Fatal("ListenAndServe: ", err)
     }
}
```

テンプレートは以下の通り

cookie.html

``` html:cookie.html
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>cookie</title>
</head>

<body>
    <p>cookieの値は</p>
    <p> name: {{.Name}} </p>
    <p> value:{{.Value}} </p>
</body>

</html>
```

## cookieの確認の仕方
蛇足だが、chromeのdeveloper toolsのApplication-> Cookiesでcookieを確認できる


## 参考にさせていただいたサイト
https://golang.org/pkg/net/http/

※ ブログでも同一記事を投稿している
http://www.sekky0905.com/entry/2017/03/20/Go%E8%A8%80%E8%AA%9E%E3%81%A7Cookie%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%28%E8%A8%AD%E5%AE%9A%E3%81%A8%E5%8F%96%E5%BE%97%29
Progressbarの色を変わらない時の対処法

Progressbarの色を変更したいときにちょっとハマったのでまとめておく。

###試したこと
```
android:progressDrawable="@color/primary"
```

```
android:progressTintMode="src_in"
android:progressTint="@color/primary"
```

これらでは色が変わることはなかった。


###解決法
最終的に下記で解決できた。

```
android:indeterminate="true"
android:indeterminateTintMode="src_in"
android:indeterminateTint="@color/primary"
```

java側からなら下記

```
ProgresBar progressBar = (ProgressBar)findViewById(R.id.view_progress);
progressBar.getProgressDrawable().setColorFilter(Color.RED, Mode.SRC_IN);
```

なお、`indeterminate`は`不確定の、不定の、明確でない、漠然とした` などの意味なのだけど、なぜこの名前になっているのかな。。。


###参考

http://stackoverflow.com/questions/31021823/lollipop-progress-bar-tinting
Markdown形式のテーブル作成ツールでgolangデビューする話


Markdown形式のテーブル作成ってめんどくさいです。
で探してたら

CSVテキストをMarkdown形式のテーブルに変換するツールをつくった
http://blog.monochromegane.com/blog/2015/05/17/csv-to-markdown-table/
https://github.com/monochromegane/mdt

最高なツールがあるじゃないかと思ったらgoじゃないですか。
デビューしとくかってことで

#とりあえずmacにgoを入れる

```
brew install go
touch sample.go
```

```:sample.go
package main
import "fmt"

func main(){
    fmt.Printf("Hello, world\n")
}
```

```
$ go version
go version go1.4 darwin/amd64

$ go run sample.go
hello, world
```

パスも通しておきました。

```:.bash_profile
export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

```

```
source ./bash_profile
```

#ツールのインストール

```
git clone https://github.com/monochromegane/mdt
cd mdt
go get github.com/monochromegane/mdt/...
touch sample.csv
mdt < sample.csv > out.txt
```

out.txtに出力されてました。
数字にカンマがあると変なことになるので、置換しました。



#参考
http://qiita.com/megu_ma/items/7208be8de52b712955a0
SalesForceのSOAP APIのJavaクライアントコードを生成

SalesForceのSOAP APIを使用する場合、wsdlファイルからクライアントサイドコードを生成します。
https://developer.salesforce.com/page/Introduction_to_the_Force.com_Web_Services_Connector

ひとつのプログラムで複数のSalesForceインスタンスにSOAP APIでやりとりする場合、インスタンス毎にクライアントサイドコードを生成します。その際に、パッケージ名が重複しないためのやり方の紹介です。

# 事前準備

基本的には [Force.com Web Service Connector (WSC)](https://github.com/forcedotcom/wsc) を参考にするのがよいです。やり方もすこしずつ改善されているので、最新のやり方はここをみるとよいです。

* mvn
* jdk 
* git

# 生成の仕方

1. force-wsc-x.y.z-uber.jarの作成
2. wsdlのダウンロード
3. コード生成

## 1. force-wsc-x.y.z-uber.jarの作成 

まず、wsdlからコードを生成するためのjarを[wsc](https://github.com/forcedotcom/wsc)のソースからビルドします。

```
git clone https://github.com/forcedotcom/wsc.git
mvn clean package -Dgpg.skip -DskipTests
```

gpgの認証やテストが落ちる場合は、上記のようにしてスキップするためのパラメタを渡します。
ビルドが成功したら、target以下に `force-wsc-x.y.z-uber.jar` というjarが生成されます。

## 2. wsdlのダウンロード

SalesForceのインスタンスにログインし、設定>開発>APIの画面に遷移します。
そこに、wsdlのダウンロードリンクがあります。色々種類がありますが、通常のデータのやりとりならEnterprise WSDLにすれば困ることはないでしょう。

![スクリーンショット 2017-03-20 11.43.38.png](https://qiita-image-store.s3.amazonaws.com/0/9880/ef549ffa-4104-fae0-1aac-a29c1882d5b1.png)

## 3. コード生成

[com.sforce.ws.tools.wsdlc.java](https://github.com/forcedotcom/wsc/blob/master/src/main/java/com/sforce/ws/tools/wsdlc.java) のmainメソッドでコードの生成をしています。微調整のためのシステムプロパティに何があるかはここをみるといいです。

パッケージのプレフィックスをつけるには以下のようにします。

`java -Dpackage-prefix=XXX -jar target/force-wsc-x.y.z-uber.jar enterprise.wsdl enterprise-XXX.jar`

com.sforce.soap.enterprise.XXX というような、パッケージ構成になります。
あとは生成されるjar毎に別ライブラリとして参照するようにすれば、複数インスタンスのクライアントサイドコードを扱えます。

# 参考サイト

* http://mauricekremer.dscloud.me/force-com-generating-the-wsc-from-source/
* http://tyoshikawa1106.hatenablog.com/entry/2015/11/12/015013
* http://qiita.com/tyoshikawa1106/items/285b52e20b0514957c0d
Visual Studio 2017でNode.js開発

Visual Studio 2017でNode.js開発する手順です。

#環境
Windows 7 Professional SP1 64bit
Visual Studio 2017 Community
Node.js v6.10.0

#Node.jsインストール
Node.jsをインストールしないと実行でエラーになるので事前にインストールします。

WindowsにNode.jsをインストール
http://qiita.com/akabei/items/43f9d6614d2d6d5b3730

#Node.js開発インストール
Visual Studio 2017のインストーラーからNode.js開発をインストールします。

![bbb.png](https://qiita-image-store.s3.amazonaws.com/0/112075/92ad9fe5-a14f-9a10-f21d-f53e3437e140.png)

#Node.jsプロジェクト作成
Visual StudioからNode.jsの新規プロジェクトを作成します。
今回はコンソールアプリケーションにしました。

![ccc.png](https://qiita-image-store.s3.amazonaws.com/0/112075/04792ac1-67df-7662-977f-d82963643953.png)

プロジェクトが作成されるとHello Worldを表示するプログラムが自動で作成されます。

![eee.png](https://qiita-image-store.s3.amazonaws.com/0/112075/c8bbb60d-6ace-17b6-49a6-68c6fbed16e3.png)


そのまま実行するとHello Worldが表示されます。

![dddd.png](https://qiita-image-store.s3.amazonaws.com/0/112075/069301fb-d834-51b3-b02e-7e4a58ae38da.png)

以上、プロジェクトの作成は完了です。
Keras バックエンドの変更

#Keras バックエンドの変更
以前kerasのバックエンドのデフォルトがtheanoの時に書いた[記事](http://qiita.com/samacoba/items/207f2650ee60fe1de25a)
を分離して残しておきます。

一度jupyter上などで、
```
import keras
```
を実行します。

![keras.PNG](https://qiita-image-store.s3.amazonaws.com/0/109458/874ab3c0-872c-ce90-ba37-d44f02fe9ca5.png)

すると、C:\ユーザ\＊ユーザーネーム＊\\.keras\　などの場所にkeras.jsonファイルが作られます。
これのファイルの中身の"theano"⇒"tensorflow"に書き換えます。[（公式ページ参照）](https://keras.io/ja/backend/)

＜変更前＞

```keras.json
{
    "image_dim_ordering": "tf",
    "backend": "theano",
    "epsilon": 1e-07,
    "floatx": "float32"
```

＜変更後＞

```keras.json
{
    "floatx": "float32",
    "epsilon": 1e-07,
    "backend": "tensorflow",
    "image_dim_ordering": "tf"
}
```
これでバックエンドがtensorflowに切り替わります。
クッキーインジェクションを試したけど再現できなかった (2)

* [クッキーインジェクションを試したけど再現できなかった](http://qiita.com/shibukawa/items/71057495c80e2d5b1ad9)

以前、secureクッキーの上書きに成功したことがある、というタレコミをいただいたので、HTTPSで追試してみました。

実験
====

というわけでHTTPSで実験してみます。適当に証明書をつくっておいてください。

同一URLでのHTTPからHTTPSへの上書きを試みる(secureなし)
----------------------------------------------------

foo.example.com用のサーバー証明書と秘密鍵を作っておいて、それぞれexample.crt、example.keyという名前でローカルに保存しておきます。実験では間違ってexample.com用のを作ってしまって警告が出た（鍵を作る時のオレオレルートCAはキーチェーンに入れていたのだけどCNを間違った)けど、まあ結果には影響はないでしょう。同じハンドラをhttpとhttpsの両方で使います。httpsでつながれた時（プロトコルがHTTP/2かどうかで判定)はsecret、そうじゃないときはevilという値をクッキーに設定します。

```go
package main

import (
	"fmt"
	"net/http"
	"net/http/httputil"
)

func main() {
	var httpServer http.Server
	var httpsServer http.Server
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		dump, err := httputil.DumpRequest(r, true)
		if err != nil {
			http.Error(w, fmt.Sprint(err), http.StatusInternalServerError)
			return
		}
		fmt.Println(string(dump))
		if r.ProtoMajor == 2 {
			http.SetCookie(w, &http.Cookie{Name: "test-cookie", Value: "secret", Path: "/", Domain: "example.com", MaxAge: 1000})
		} else {
			http.SetCookie(w, &http.Cookie{Name: "test-cookie", Value: "evil", Path: "/", Domain: "example.com", MaxAge: 1000})
		}
		fmt.Fprintf(w, "<html><body>hello</body></html>\n")
	})
	fmt.Println("start http listening :80 and :443")
	httpServer.Addr = ":80"
	httpsServer.Addr = ":443"
	go func() {
		fmt.Println(httpsServer.ListenAndServeTLS("example.crt", "example.key"))
	}()
	fmt.Println(httpServer.ListenAndServe())
}
```

期待する動作は次の通り。

* ``https://foo.example.com``にアクセス（test-cookieというキーがsecretになる)
* ``http://foo.example.com``にアクセス（test-cookieというキーがevilになる)
* ``https://foo.example.com``にアクセスしたときに、クッキーの値(httpで設定したevilがサーバーに送信される)

実験してみると、見事にevilになりました！

クロスドメインはダメでしたが、同一URLならHTTPからsecureなしのHTTPSのクッキーの上書きはできました。

同一URLでのHTTPからHTTPSへの上書きを試みる(secureあり)
----------------------------------------------------

実は↑の設定は本来つけるはずのsecureを付け忘れて実験してしまっていたので、secureつきでも実験してみます。

次にクッキー設定のところに ``Secure: true`` を追加するだけです。

```go
http.SetCookie(w, &http.Cookie{Name: "test-cookie", Value: "secret", Path: "/", Domain: "example.com", MaxAge: 1000, Secure: true})
```

期待する動作は次の通り。

* ``https://foo.example.com``にアクセス（test-cookieというキーがsecretになる)
* ``http://foo.example.com``にアクセス（test-cookieというキーがevilになる)
* ``https://foo.example.com``にアクセスしたときに、クッキーの値(httpで設定したevilがサーバーに送信される)

で、動かしてみると、evilにならず。元のクッキーにsecureが付与されていると上書きが無視されるようです。開発者ツールで見てもクッキーの値が変わらず。設定できた上で送信時にフィルタリングされるわけではなく、設定自体が無視されているようなので、httpで何度繋いでも送信したクッキーが返ってこないという。なかなかおもしろいですね。

というわけで、secureさえ付けたらクッキーインジェクションは怖く無さそうです。

**追記(3/21)**: この仕様がRFC化されつつあるらしい。 http://qiita.com/flano_yuki/items/b87b2c28db0b056665ef#deprecate-modification-of-secure-cookies-from-non-secure-origins

まとめ
======

ブラウザベンダーすっごーーい！君はセキュリティが得意なフレンズなんだね！
プロセスと使用ポートの確認、強制終了

```
macOS 10.12.3 で実行したコードを記載しています。
```

# プロセスと使用ポートの確認
プロセス名がjavaの場合

```bash
lsof -i -P | grep java
```

# プロセスの強制終了

```bash
kill -9 <procdess-id>
```
Let's Encrypt+NginxでSSL証明書発行、自動更新の設定方法


### はじめに
[Let's Encrypt](https://letsencrypt.jp/)は無料で利用できて商用利用可能な証明書発行サービスです。https化に必要なSSL証明書が無料で発行されるなんて、良い時代になりましたね。
しかし証明書の有効期限は90日なのでその度に、更新作業は面倒なので、自動化してしまいましょう。

### 導入手順
環境はCentOS、WebサーバはNginxを想定しています。

#### Lets's Encryptの導入

```
git clone https://github.com/certbot/certbot ~/
cd ~/certbot
sudo ./certbot-auto --debug
```

※yumで導入したパッケージが自動でアップデートされるのでご注意ください

#### SSL証明書発行

```
sudo ./certbot-auto certonly
```
指示に従ってすすめていきます。

#### Webサーバ(Ngninx)の設定

```/etc/nginx/nginx.conf
    ssl_certificate      /etc/letsencrypt/live/ドメイン名/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/ドメイン名/privkey.pem;
```
その他のSSLの設定はお使いの環境に合わせて設定してください。

```
sudo service nginx restart
```

#### cronで自動更新の設定

SSL証明書の有効期限が90日なので自動更新の設定をします。

```cron
#毎月1日の1時に強制的に更新をします。
0 1 1 * * root /ホームディレクトリのパス/certbot/certbot-auto renew --force-renewal && service nginx restart
```

これで設定終了です。簡単なのでサクッとやってしまいましょう。
複数のwheel(相当)グループ

#はじめに
Linuxでは (もちろん設定によりますが) su 等の特権を得るコマンドを、特定のグループ ( 通常は wheel ) に限定するという文化があります。
これは、現在ではPAM(Pluggable Authentication Module)のpam_wheelというモジュールで実現されていて、wheelに限らず任意のグループをその「特権を得られる」グループとして指定できますが、複数のグループを指定することはできません。
では、複数グループを指定したくなったらどうするか? というのが今回のお話です。

#おさらい
では先に、pam_wheelの使い方についておさらいです。
以下は、CentOSでの ( pam_wheelを有効にした場合の ) 典型的な /etc/pam.d/su ファイルの内容です。
```
auth            sufficient      pam_rootok.so
auth            required        pam_wheel.so use_uid
auth            include         system-auth
…
```
この場合のsuに関する設定意図としては、

* rootユーザに対しては無条件に許可する ( pam_rootok が sufficient )
* wheelグループ以外を拒否する ( pam_wheel が required )
* その後、system-auth ( CentOSでの共通設定 ) に応じた認証 ( 例えばパスワード等 ) もチェックする

ということになります ( PAMの設定は上から順に評価されていきます )。つまり、2行目の記述が典型的なpam_wheelの設定です。
もしwheel以外のグループを指定したいなら、```pam_wheel.so use_uid group=MYGROUP```のように、group=オプションを使用します。

#複数のグループ指定
ここで、pam_wheelのgroup=オプションには、複数のグループを指定する機能はありません。group=g1,g2 のようにすることはできないのです。
では、複数指定したい場合はどうするかというと、PAM自身の条件分岐の構文を利用します。以下は g1,g2,g3 のグループを指定する例です。

```
…
auth   [success=2,ignore=2,default=ignore] pam_wheel.so use_uid group=g1
auth   [success=1,ignore=1,default=ignore] pam_wheel.so use_uid group=g2
auth   required                            pam_wheel.so use_uid group=g3
auth   include                             system-auth
…
```

さて。PAMの設定では基本 requisite, required, sufficient, optional という制御指定を一般に使用しますが、これは良く使う挙動のプリセットに過ぎず、やろうと思えば「モジュールの戻り値=実行するアクション」という形で記述することで、細かく挙動を制御することができます。
その解説については、例えば[null-i.net - Linux/pam](http://null-i.net/index.html?Linux/pam)が詳しいですが、今回はスキップの機能を使います。スキップについては、例えば[PAMで特定のユーザだけ別の認証をしたい場合](http://qiita.com/knqyf263/items/15b6032a1215e3603d59)に解説があります。

上の設定では、pam_wheelの結果 successとignoreに対し、数字によりスキップを指定しています。多分 success に指定する意味はないのですが、これは気分です。このようにすることで、

* 指定のグループにマッチした場合、pam_wheel の結果が ignore になることで数字で指定した分スキップが発動し、system-authの評価まで飛ぶ
* 指定のグループにマッチしなかった場合、default条件の指定によりそこの評価は無視され、次の行の評価に移る
* 最後 ( g3グループ ) の評価にもマッチしなかった場合、required の指定により認証失敗 ( ただし後続の評価は続ける ) となる

という挙動になります。結果として、g1,g2,g3以外のグループは拒否 ( g1,g2,g3は後続のsystem-authの結果次第 ) という設定を実現することができます。

#おわりに
PAMについては、なかなかまとまった資料がなく、挙動を理解するのが難しい印象がありますが、一度理解してしまえば、ちょっとしたことが設定の調整で色々できるようになり便利です。何かの機会に設定を色々考えてみるのも良いのではないでしょうか。
Jupyter > 行番号を表示する > Esc, l (Lの小文字)

```txt:動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
GNU bash, version 4.3.8(1)-release (x86_64-pc-linux-gnu)
```

Jupyter Notebook(以下、Jupyter)で実装中、PEP8のcoding ruleチェックしながら修正している。

Jupyterではデフォルトで行番号が表示されていない。PEP8で「XXX行を修正するように」と表示されても、その行を探さないといけないのは効率が悪い。

Esc, l(小文字のL)で行番号が表示されるようだ。
参考 http://stackoverflow.com/questions/10979667/showing-line-numbers-in-ipython-jupyter-notebooks
> answered Jan 30 at 4:15
Mo Li
> 1.press esc to enter the command mode 2.perss l(it L in lowcase) to show the line number

<kbd>Ctrl</kbd> - <kbd>M</kbd><kbd>L</kbd>というのは有効ではなかった。

設定ファイルをいじるという方法もあるが、OSが変わった時にその設定方法を探すことになる。保留。
[JAWS-UG CLI] StepFunctions #8 アクティビティの作成 (get-greeting)

前提条件
========


StepFunctionsへの権限
---------------------

StepFunctionsに対してフル権限があること。


AWS CLIのバージョン
-------------------

以下のバージョンで動作確認済

- AWS CLI 1.11.63

```bash:コマンド:
aws --version
```

結果(例):

      aws-cli/1.11.63 Python/2.7.10 Darwin/15.6.0 botocore/1.5.26

バージョンが古い場合は最新版に更新しましょう。

```bash:コマンド:
sudo -H pip install -U awscli
```


0. 準備
=======

まず変数の確認をします。

```bash:変数の確認:
cat << ETX

        AWS_DEFAULT_PROFILE: (0.1) ${AWS_DEFAULT_PROFILE}
        AWS_DEFAULT_REGION:  (0.2) ${AWS_DEFAULT_REGION}

ETX
```

結果(例):

      AWS_DEFAULT_PROFILE: (0.1) stepfunctionsas_full-prjZ-mbp13
      AWS_DEFAULT_REGION:  (0.2) ap-northeast-1

変数が入っていない、適切でない場合は、それぞれの手順番号について作業を
行います。



0.1. プロファイルの指定
-----------------------

プロファイルの一覧を確認します。

```bash:コマンド:
cat ~/.aws/credentials \
       | grep '\[' \
       | sed 's/\[//g' | sed 's/\]//g'
```

結果(例):

      iamFull-prjz-mbpr13
      stepfunctionsas_full-prjZ-mbp13

```bash:変数の設定:
export AWS_DEFAULT_PROFILE='stepfunctionsas_full-prjZ-mbp13'
```


0.2. リージョンの指定
---------------------

```bash:変数の設定:
export AWS_DEFAULT_REGION='ap-northeast-1'
```


1. 事前作業
===========


1.1. アクティビティ名の指定
---------------------------

```bash:変数の設定:
STEPF_ACTIVITY_NAME='get-greeting'
```

同名のアクティビティが存在しないことを確認します。

```bash:コマンド:
aws stepfunctions list-activities \
        --query "activities[?name == \`${STEPF_ACTIVITY_NAME}\`]"
```

結果(例):

      []


2. アクティビティの作成
=======================

```bash:変数の確認:
cat << ETX

        STEPF_ACTIVITY_NAME: ${STEPF_ACTIVITY_NAME}

ETX
```

```bash:コマンド:
aws stepfunctions create-activity \
        --name ${STEPF_ACTIVITY_NAME}
```

結果(例):

      {
        "creationDate": 1489738238.767,
        "activityArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:activity:get-greeting"
      }


3. 事後作業
===========

```bash:コマンド:
STEPF_ACTIVITY_ARN=$(\
        aws stepfunctions list-activities \
          --query "activities[?name == \`${STEPF_ACTIVITY_NAME}\`].activityArn" \
          --output text \
)\
        && echo ${STEPF_ACTIVITY_ARN}
```

結果(例):

      arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:activity:get-greeting

```bash:コマンド:
aws stepfunctions describe-activity \
        --activity-arn ${STEPF_ACTIVITY_ARN}
```

結果(例):

      {
        "creationDate": 1489738238.767,
        "name": "get-greeting",
        "activityArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:activity:get-greeting"
      }


完了
====
Google製の新しい画像品質評価ツール「butteraugli」

https://github.com/google/butteraugli/
画像間の知覚差を測定するためのツール

## インストール
```bash
yum install centos-release-scl-rh {libjpeg-turbo,libpng}-devel
yum install devtoolset-4-{gcc,gcc-c++,binutils}
scl enable devtoolset-4 'bash'
curl -o butteraugli.tar.gz -L https://github.com/google/butteraugli/archive/master.tar.gz
tar xf butteraugli.tar.gz
cd butteraugli-master/butteraugli
make
mv butteraugli /usr/local/bin
```
make 時に jpeglib.h や png.h が要求されるので、 libjpeg と libpng の devel をインストールする必要がある。libjpeg は CentOS 6 以降は libjpeg-turbo を利用する。

また CentOS 7 では gcc のバージョンが 4.8.5 と古いため `‘assume_aligned’ 属性指示が無視されました [-Wattributes]` などのエラーが出る。そのため Red Hat Developer Toolset をインストールして gcc 5.3.1 を利用する。

## 使用方法
```
butteraugli {image1.(png|jpg|jpeg)} {image2.(png|jpg|jpeg)} [heatmap.ppm]
```
技術英語 > Either order gives [the same end result], but / Either is OK. / flowers blooming on [either side of] the walk

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 2804 / 12833)

> Either order gives **the same end result**, but

最終結果は同じ。
過程が変わる。

動作(最終結果)が同じでも読みやすいソースと読みにくいソースがあれば、メンテナンスコストが変わってくる。

<hr>
関連して思い出した

> Either is OK.

https://www.englishforums.com/English/BothEither/vcwml/post.htm
> You could answer "Either", "Either is ok", "Either can be used", "You can use either", etc.


<hr>
関連して見つけた

https://www.merriam-webster.com/dictionary/either
> being the one and the other of two :  each 
> flowers blooming on **either side of** the walk
Execl2016のVBAのMenuBarの扱い

![VBA.PNG](https://qiita-image-store.s3.amazonaws.com/0/60379/e0200027-b1c3-9835-f6b9-7053e2ae0a74.png)
![Error.png](https://qiita-image-store.s3.amazonaws.com/0/60379/656eae56-5a80-c9cc-9e54-cccffcee83bc.png)

OSはWindows10 MS-ExeclはExecl2016で質問します。

Option Explicit
Dim myCB As CommandBar, myCBCtrl As CommandBarControl

一部省略

Set myCB = Application.CommandBars.Add(Name:="販売管理", Position:=msoBarTop, MenuBar:=True)

とコマンドバーを定義していた部分がエラーします。

古いExeclのバージョン(Execl2003あたり）では問題なく動いていました。

MSのサイトで調べた感じでは仕様変更がされていない気がします。
https://msdn.microsoft.com/ja-jp/library/office/ff861773.aspx

新しいOffceの新機能？（リボン）との関係で仕様が変えられているのかもしれないです。
もうCommandbars.Addは使えないのでしょうか？
もしくは、どのようにパラメータが変わっているのでしょう。

Commandbars.Addで同様のエラーが出て、対応した方がいればアドバイスをお願いします。
PHP関数/変数メモ

## はじめに
PHP習得を行うにあたり下記の書籍で勉強を行ったため
関数に関してメモ



## 1. ` $_Session `

Webブラウザを閉じるまで有効。
セッションを使用する際には$_SESSIONという特別な変数を使用する。

PHP内で情報を保持するために必要な変数。

また、すべてのコードで記入せずphp.ini内に記載することで実装する方法もある。

### 使用方法
$_SESSION[セッションデータ名] = データの値

セッションデータ名は任意で設定可能

## 2. ` Require `
ファイルを共通化することができる。

### 使用方法
require('xxx.php');

Mysqlに接続するためのファンクション群。



## 3. ` mysqli_connect `

新規にMysqlサーバーへの接続をオープンする

mysqli_connect(ホスト名, ユーザ名, パスワード, クエリが行われるデフォルトのデータベース)

【参考】 [PHP Labo](http://www.php-labo.net/tutorial/mysql/php.html)


## 4. ` $_POST `
HTTP リクエストで、 HTTP POST メソッドから現在のスクリプトに渡された変数の連想配列。

## `session`と`cookie`の違い
### `session`
管理したい値をサーバ側で保存

### 5. `cookie`
管理したい値をクライアント側に保存


## 6. `post`と`get`の違い

### パラメータ
`get`:URLに表示される

`post`:URLに表示されない

※PHP変数に配列(連想配列)PHP変数というすでにある配列が存在する。

`form`で`method`を定義することで、その配列の中に格納する。

### 使用方法
ex) `$_POST['message']`


## 7. `var_dump`
デバッグの際、使用すると便利な関数

### 使用方法
ex) `<?php var_dump($_REQUEST); ?>`

### 補足
`<pre>`で囲うと変数に格納されている情報を
見やすく表示できる。

ex)
`echo('<pre>');
var_dump($posts);
echo('</pre>');`


## 8. ローカルのエラーログが格納されている場所
/C/xampp/apache/logs
CSS&HTML初心者からWP改修についての質問

初心者ながらブログサイトを作っていますが、
(有識者に作ってもらったものを改修しています)
こちらのサイトについて２点質問があります。

■グローバルナビのメニューフォントサイズをあと1px大きくしたい
■ＳＰ表示時、ハンバーガーメニューを開いたときの表示縦幅を広げたい。
もしくはスクロールバーを出したい

どこをどう、いじればよいでしょう・・・。
初歩的で恐縮ですがどなたか教えていただいたいです。
http://dolphins.blue/
Swift3onlinux　その２

#概要
IBM Swift Sandboxでsocketを叩いて見た。
BlueSocketを使った。結果は、
Error code: -9989(0x-2705), Network is unreachable でした。

#写真

![swift.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/c9a5a3dd-7d21-8825-1b79-bed5ed41d765.jpeg)


#成果物
github
https://github.com/ohisama/examples-for-ibm-swift-sandbox

IBM Swift sandbox
https://swiftlang.ng.bluemix.net/#/repl?gitPackage=https:%2F%2Fgithub.com%2Fohisama%2Fexamples-for-ibm-swift-sandbox.git

#サンプルコード

```
import Glibc
import Socket
import Foundation

class EchoClient {
    let bufferSize = 1024
    let port: Int
    let server: String
    var listenSocket: Socket? = nil
    init(port: Int, server: String) {
        self.port = port
        self.server = server
    }
    deinit {
        listenSocket?.close()
    }
    func start() throws {
      let socket = try Socket.create() 
      listenSocket = socket
      try socket.connect(to: server, port: Int32(port))
      var dataRead = Data(capacity: bufferSize)
      var cont = true
       repeat {
          print("Enter Text:")
          if let entered = readLine(strippingNewline: true) 
　　　　　　{
            try socket.write(from: entered)
            if entered.hasPrefix("quit") {
               cont = false
            }
            let bytesRead = try socket.read(into: &dataRead)
            if bytesRead > 0 
　　　　　　　{
              if let readStr = String(data: dataRead, encoding: .utf8)
　　　　　　　 {
                print("Received: '\(readStr)'")
              }
              dataRead.count = 0
            }
          }
       } while cont
    }　
var echoClient = EchoClient(port: 80, server: "210.169.132.188")
echoClient.start()

```