OmniAICreator/Qiita-1.07M huggingface dataset:
PythonでCのライブラリを使う方法

#Pythonのctypesモジュールについて
##1. ctypesの使い方
　まずはモジュールのインポートの仕方。

```python:howToImport.py
from ctypes import *
```
　次に、Cのライブラリの動的リンクと関数の使い方。

```Python:howToLoadLib.py
msvcrt=CDLL("C\\WINDOWS\\System32\\msvcrt.dll")
str="On Python!!"
msvcrt.printf("Hello World : %s",str)
```

ちなみに、動的リンクのメソッドはいくつかあって、CDLL(),windll(),oledllなどなど。
全くの初心者なので、あてずっぽうだがおそらくOSによって使い分けたりするのかな、、、？

ちなみに、gets()などの入力の関数も普通に使える。あと、動的リンクのところは、

```Python:howToLoad_2.py
msvcrt=cdll.msvcrt
```
でもいけるそうだ。（ていうかむしろこっちの方が一般的なのかな、、、？）

これも詳しくは知らないがおそらくは環境依存で標準のライブラリのディレクトリにある場合に使えるのかな、、、？
こっちなら絶対パスを書かなくても普通にできる。

##2. ctypesではCの型が使える！
　Pythonでは一般的に変数に型を指定しなくてもよいが、C言語だと変数に型を指定しなくてはならない。
　そして、C言語の型はPythonにはないので、ctypesが用意してくれている！
例えば、

```Python:howToHensu.py
str=c_char_p("AAA")
```
```C:hensu.c
char *str="AAA"
```

こんな感じの二つのプログラムはおそらく同じ内容だと思われる。
細かいところは知らないが、たぶんやっていることは同じ。
今のはほんの一例で、char,int,short,long,double,float,void *などなどたくさんある。

ちなみにC言語の参照渡しがしたい場合は、byref()というメソッドを使う。
例えば、関数の引数にポインタを渡したい場合、myfunc(byref(pointer))のように使うことができる。この場合pointerはただの変数。

それと、変数だけでなく、構造体や共用体を使うこともできる。

```Python:howToStruct.py
class Test(Structure):
_fields_=[
("testInt",c_int),
("testChar",c_char),
]
```

こんな感じで構造体も作れる。（共用体は勉強不足で使いどころがまだよくわかっていないため、省きます）

##参考
　ちなみに今回の話は「リバースエンジニアリング～Pythonによるバイナリ解析技法～」という本を買って読み始めたので書いてみました。
　まだまだ読み始めたばかりなので、もう少し読んだらまたアップしてみたいと思います！
URL : [リバースエンジニアリング～Pythonによるバイナリ解析技法～](https://www.oreilly.co.jp/books/9784873114484/)

ちなみに、今回Qiita初めてなので温かい目で見ていただけると嬉しいです、、、ｗ
自分は完全初心者の高校生なので、間違ってるところなど指摘していただけると勉強になるのでとても助かります！
Herokuに独自ドメインのSSL接続を無料で導入できるようになった話（有料Dynoのみ）


2017年3月下旬から、自前で証明書を準備せずに独自ドメインのSSLを導入できるようになりました。
https://devcenter.heroku.com/articles/automated-certificate-management

これまでも[Let's Encrypt](https://letsencrypt.org/)を使えば無料で導入できましたが、証明書の取得や更新は自分で行わなくてはならず、ただアプリを開発して公開したいだけの僕みたいな人（インフラ周りが苦手）にとっては朗報です！！

対象は有料Dynoのみなのでそこだけはお金かかりますが、証明書代とか更新の手間とかがかからないことを考えれば安いので（Hobbyなら月額7ドル）さっさと払いましょう。

以下にその簡単な手順を書きます。

## 前提
* 有料Dynoが立ててある
* 独自ドメインを「abc.com」とする

## ACMの有効化
[Heroku dashboard](https://dashboard.heroku.com)の対象AppのSettingsメニューで`Configure SSL`をクリックして、
`Automatically configure using Automated Certificate Management`
を選択して保存。

## DNSのCNAME設定
ドメインのDNSに、以下のレコードを設定する。

|名前|種類|設定値|
|---|---|---|
|www.abc.com.|CNAME|www.abc.com.herokudns.com.|

## ドメインの設定
HerokuのSettingsメニューの`Add domain`をクリックして、
「www.abc.com」と入力して保存。
DNS Targetが`www.abc.com.herokudns.com`のレコードが追加される。

あとはしばらく放置すれば「https://www.abc.com 」でアクセスできるようになります。
ひとつのポートで gRPC と HTTP を同時に受けるには

# ひとつのポートで gRPC と HTTP を同時に受けるには

次のように grpc っぽいリクエストを grpc.Server.ServeHTTP へ分岐させる http.Handler を書き、 TLS を有効にして Listen させれば良い。([参考][grpc-gateway-example])

[grpc-gateway-example]: https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go#L51-L61

```
func grpcHandlerFunc(grpcServer *grpc.Server, otherHandler http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
                if r.ProtoMajor == 2 && strings.Contains(r.Header.Get("Content-Type"), "application/grpc") {
                        grpcServer.ServeHTTP(w, r)
                } else {
                        otherHandler.ServeHTTP(w, r)
                }
        })
}
```


Listenするコードは次のとおり。

```
func main() {
	opts := []grpc.ServerOption{
		grpc.Creds(credentials.NewClientTLSFromCert(cert.CertPool, "localhost"))}

	g := grpc.NewServer(opts...)
	pb.RegisterSKVSServer(g, &srv{data: map[string]string{}})

	h := http.NewServeMux()
	h.Handle("/", http.HandlerFunc(hello))

	s := &http.Server{
		Addr: ":8080",
		Handler: grpcHandlerFunc(g, h),
		TLSConfig: &tls.Config{
			Certificates: []tls.Certificate{*cert.KeyPair},
			NextProtos: []string{"h2"},
		},
	}

	conn, err := net.Listen("tcp", ":8080")
	if err != nil {
		panic(err)
	}

	log.Println("Listening...")
	s.Serve(tls.NewListener(conn, s.TLSConfig))
}
```

* ここで pb は適当な proto から生成したパッケージである

## 注意点

* この方法は、grpc.Server.Serve() を使う場合よりもパフォーマンスが悪い。いずれ改善されるだろうが、優先度は高くないようだ([参考][grpc-go-issue-586])
    * パフォーマンスが必要な場合、 [cmux][cmux] で振り分けたあと grpc.Serve.Serve() を使うことで改善できそうだが、これはChromeでアクセスしたときにうまく動作しないらしい。 結局パフォーマンスが必要なら http 系とはポートを分けろ、というのが現在の結論のようだ([参考][cockroach])
* TLSを有効にしないと、 http.Server が自身の Handler を呼び出す前にリクエストを弾いてしまうようだ。こちらも将来的にTLSが不要になるよう対処される可能性はあるが、現在のところ優先度は低いようだ([参考][grpc-go-issue-549])


[grpc-go-issue-586]: https://github.com/grpc/grpc-go/issues/586#issuecomment-286261423
[grpc-go-issue-549]: https://github.com/grpc/grpc-go/issues/549#issuecomment-191458335
[cmux]:https://github.com/soheilhy/cmux
[cockroach]:https://www.cockroachlabs.com/blog/a-tale-of-two-ports/
Macのショートカットなど


##画面全体のスクリーンショットを撮る方法

「shift + command (⌘) + 3」キーを押します。
スクリーンショットがデスクトップに .png ファイルとして作成されます。

##画面の選択した部分のスクリーンショットを撮る方法

「shift + command + 4」キーを押します。ポインタが十字型に変わります。
スクリーンショットの撮影範囲の始点となる位置に十字ポインタを移動し、そのままドラッグして範囲を選択します。
「shift」キー、「option」キー、またはスペースバーを押しながらドラッグすると、範囲の選択方法が変わります。
[golang]sliceの容量確保あり／なしの速度比較


# 検証コード

```go
package main

import (
	"fmt"
	"time"
)

func main() {
	// 容量未定義
	s1 := make([]int, 1)
	// 容量定義
	s2 := make([]int, 1, 100000000)

	var (
		start time.Time
		end   time.Time
	)

	// 容量未定義の速度
	start = time.Now()
	for i := 1; i < cap(s2); i++ {
		s1 = append(s1, i)
	}
	end = time.Now()
	fmt.Printf("容量未定義：%fsec\r\n", end.Sub(start).Seconds())

	// 容量定義済みの速度
	start = time.Now()
	for j := 1; j < cap(s2); j++ {
		s2 = append(s2, j)
	}
	end = time.Now()
	fmt.Printf("容量定義済：%fsec\r\n", end.Sub(start).Seconds())
}
```

# 結果（念のため3回）

```bash
容量未定義：1.138697sec
容量定義済：0.381012sec
```

```bash
容量未定義：1.216133sec
容量定義済：0.535423sec
```

```bash
容量未定義：1.184637sec
容量定義済：0.352957sec
```
IT勉強会の勧め

# はじめに
すごくお久しぶりなQiitaです。
今日は、若手エンジニア向けにIT勉強会について紹介しようと思います。
私は女性なので、少しだけ女性目線でも語ろうと思います。

# そもそも勉強会の目的、てなんぞよ
勉強会に顔を出すようになって、まだ1年ぐらいの私ですが、
主に以下の目的があるのかなーと思っています

+ 他社やフリーランスのエンジニアやIT系大学生との交流
+ 最新技術の情報収集
+ すごいエンジニアの話をただただ聞きに行く
+ 自習の場（もくもく会、てみんなは呼んでいる）
+ ハッカソン（集まった人達だけで１からプロダクト開発するイベント）

# どんな人がいるの？
いろんな人がいます。

IT系大学生から、
プログラミングやったことのないけど趣味で始めました！ていう叔父様、
あとは、私と同じ２０代の若手エンジニアさんなどなどです。

男女比率は、8：2、て感じですね。
私が参加した男女どっちとも参加できる勉強会は、
女性が私だけ、てことがほとんどでした。
もちろん、女性専用イベントになると100%女性になるので、
男性の中に１人で入っていく勇気のない方は、女性専用イベントをオススメします。

# 参加方法が知りたい
私が使っているのは、以下です。

+ [dots](https://eventdots.jp/)
  - 私は、dots女子部のイベントを中心に参加しています。
  - dots主催以外の勉強会の日程も知ることができるので重宝しています。
+ [doorkeeper](https://www.doorkeeper.jp/)
  - 私は、あまり使っていないですが、、、
+ [connpass](https://connpass.com/)
  - 勉強会を主催する人にとって使いやすいサイトですよね。<br>こちらも利用しています。

# ちょっと参加するのが怖いんですが・・・
最初は、初心者系イベントや、交流会系、もくもく会系が参加しやすいと思います。
あと、案外同じ悩みを持っている人も参加しているので、
あまり心配しなくても大丈夫だと思います。

# 参加して得られたメリットは？
私の場合は、以下でした。

+ エンジニアの仲間が増えた。
+ 女性エンジニアならではの悩みの共有と、それに対するアドバイスを頂けた。
+ 知識が増えた。
+ 他社のプロジェクトの進め方やその会社独自の文化を知ることができた。
+ 自分の会社を客観視することができるようになった。

今まで自分の会社のやり方が正しいと信じてきたけど、
他のエンジニアと意見交換していくうちに、
「あれ？うちの仕事のやり方、おかしくね？」
とか気づきを得られたのは、本当に良かったと思っています。

色んな生き方があって、色んな考え方があるんだ、てことを知れるのも
勉強会参加の魅力なのではないでしょうか。

# さいごに
無理に参加する必要なんてないですし、
参加しているエンジニアなんてごくごく一部ですが、、、
ちょっと興味あるけど、躊躇しちゃうんだよね！！！て人は、
一歩踏み込むべしですよ。

ご覧頂きありがとうございました^^
ローカルのPythonスクリプトからDjangoを使う

色々Webに転がってる情報試したらちょっと苦労したのでメモ
以下Django1.10, python3.6.0で動作確認

```py3:local.py
import sys
import os
import django

sys.path.append('/Path/to/your/project')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rootdir.settings')  # 自分のsettings.py


def call():
    django.setup()
    from yourapp.models import YourModel

    objects = YourModel.objects.all()
    for obj in objects:
        print(obj)


if __name__ == '__main__':
    call()
```
***
`django.setup()`
を
`from yourapp.models import YourModel`
より先に実行しないと、

```django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.```
と、言われる。

`os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rootdir.settings')`
↑この設定絡みで↓のような事言われた気がしたけど詳細は忘れた。

 
>```django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.```

-

>```django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.```

***
sys.path.appendの中身まではPycharmさんは見に行ってくれないので
Preferences->Project:yourproject->Project Structureの画面の右端にある
Add Content Rootで当該プロジェクトを指定。
Swiftをもう一度勉強してみた#1

# はじめに
趣味でSwiftをもう一度書こうと思い、ブログを書きました。
つまり、ブログの宣伝です。

# ブログ内容
今回は事始めとして**「値について」**をテーマにしています。
**`let`**や**`var`**など基礎部分を説明しています。

# ブログはこちら
[Swiftをもう一度勉強してみた#1](https://fumisite.net/2017/04/15/swift%e3%82%92%e3%82%82%e3%81%86%e4%b8%80%e5%ba%a6%e5%8b%89%e5%bc%b7%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f1/)

# 改定履歴
2017.04.15
**`var`**と表記すべきところを**`val`**と誤って表記していました。
そのため、該当箇所に対して再度見直しを行い修正しました。
(@okuderap さん、ご指摘ありがとうございました！)
動的なタグ生成をするgem「acts-as-taggable-on」を使ってみました

## 環境

* Rails 5.0.2

* ruby 2.2.6p396 (2016-11-15 revision 56800) [x86_64-darwin15]


## 概要

* Railsアプリケーションにタグ管理機能を作成するgem

* 動的なタグ生成を助ける

* `tags`という名称以外にも`skills`などで使用できる

GitHubのURL
<https://github.com/mbleigh/acts-as-taggable-on>


## インストール

Gemfileに以下の記述を追加します。

```
gem 'acts-as-taggable-on'
```

bundle実行。

```
$ bundle install --path vendor/bundle
```

MySqlを使用している場合、以下を追加で実行するする必要があるそうです。

```
$ rake acts_as_taggable_on_engine:tag_names:collate_bin
```

必要なテーブルを生成します。

```
$ rake acts_as_taggable_on_engine:install:migrations
$ rake db:migrate
```


## 使用するための準備

タグをつけたいモデルに以下を追加。

```ruby
# モデルに記述
class User < ActiveRecord::Base
  acts_as_taggable
  acts_as_taggable_on :skills, :interests
end

# コントローラーに記述
class UsersController < ApplicationController
  def user_params
    params.require(:user).permit(:name, :tag_list)
  end
end
```

これらの意味は、`acts_as_taggable`が`acts_as_taggable_on :tags`のエイリアスとなっていて、

`acts_as_taggable_on :skills, :interests`によって`@user.skill_list`などを使用可能にしている

実際は、使用したいタグだけを登録すればよいです。

今回はtagsを使用するため、モデルの部分を以下のように記述します。

```
class User < ActiveRecord::Base
  acts_as_taggable
end
```

## 使用方法

タグの追加と削除の仕方は次のような方法で出来ます。

```
@user = User.new(name: 'poyo')
@user.tag_list.add('awesome')     # タグを追加
@user.tag_list.remove('awesome')  # タグを削除
```

引数を複数指定することで一度に追加削除もできる

```
@user.tag_list.add("awesome", "slick")
@user.tag_list.remove("awesome", "slick")
```

表画面の記述

フォーム作成

```html
# フォームのスタイルにBootstrapを使用
<%= form_for(@user) do |f| %>
  <div class="form-group">
    <%= f.label :user, :name %>
    <%= f.text_field :name, class: "form-control" %>
  </div>
  <div class="form-group">
    <%= f.label :user, :tag_list %>
    <%= f.text_field :tag_list, value: @user.tag_list.join(','), class: "form-control" %>
  </div>
  <div class="pull-right">
    <%= f.submit '登録する', class: "btn btn-info" %>
  </div>
<% end %>
```

これで、コンマ区切りで入力したタグを登録することができるようになります。

<img width="1029" alt="スクリーンショット 2017-04-15 13.35.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/174052/cdd124f5-9a15-cfad-2432-590d5a943f5c.png">

`bootstrap tags input`を使用すると、もっと入力しやすいフォームに変更することも出来ます。
また追記か他の記事で実装して詰まった部分など書くかもしれません。

<img width="1043" alt="スクリーンショット 2017-04-15 13.35.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/174052/7640ba1d-19a2-bc93-1e30-9067369a06a0.png">

## 参考にしたサイト

[Railsでacts-as-taggable-onを使ってタグ管理を行う](http://ruby-rails.hatenadiary.com/entry/20150225/1424858414)

[README](https://github.com/mbleigh/acts-as-taggable-on)
linux

# ssh
- how to check ssh host key finger print

```
[root@localhost ssh]# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
2048 xx:xx:xx:xx:xx /etc/ssh/ssh_host_rsa_key.pub (RSA)
```

# TCP wrapper
- how to check tcp wrapper is used in CentOS 6

```
[root@localhost etc]# ldd /usr/sbin/sshd  | grep -i wrap
	libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fdb92f99000)
```


# awk
- print "line 1" OR "column 3 has 'LINUX' strings".

```
awk 'NR == 1 || $3 ~ /LINUX/'
```
clientの再接続を試みた話

※pythonもソケット通信もあまり詳しくない人が書いてます。
※ほかに良い方法があれば、よろしくお願いします。

ひょんなことから、サーバーとクライアント間の通信を行う必要がありました。
そこで、クライアント側は通信に失敗しても、実行終了することなく、再度接続を試み続けたい！
と思ったのですが、そこで躓きました・・・

ソケット作り直せばいいだろと思い、既にある変数にもう一度代入！じゃできなかった・・・

参考にさせていただいたプログラム[2から抜粋]

```py
import socket

host = "xxx.xxx.xxx.xxx"
port = xxxx

client = socket.socket(socket.AF_INET, 
socket.SOCK_STREAM) #以下、socket.socketと呼ぶ

client.connect((host, port)) #以下、socket.connect と呼ぶ
client.send("from nadechin")
```


#問題
実際にはwhileで回すことが多いんじゃないかと思いますが、サーバーが落ちた時、以下のようなことができない。

```py
client = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
client.connect((host, port))
client.send("from nadechin")

=====ここでサーバーが落ちる=====
client = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
client.connect((host, port))
client.send("from nadechin")
```

ここで、socket.socketをなくした場合やclose, shutdown, timeoutといったsocketの他のメソッドを使っても、うまくいかなかった。

#解決策(?)
当たり前ですけど、一度クライアントを落としてしまえばうまくいきました。
ということで、既に作られたsocketが破棄されれば良いんだなと思い、以下のようなクラスを作ることでこの対策をしました。
(簡単のため、エラー処理は省略-try:)

```py
class client(object):
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        #try:
        self.client.connect((self.host, self.port))

    def send(self):
        #try:
        self.client.send("ok")

    def execute(self):
        while 1:
            self.__init__(self.host, self.port)
            self.send()

client(host, port).execute()
```
      
以上のように書くと、うまくいきました。

下記ではうまくいかなかったのが不思議でした。なぜ・・・

```py
class client(object):
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        #try:
        self.client.connect((self.host, self.port))

    def send(self):
        #try:
        self.client.send("ok")

while 1:
    client(host, port).execute()
```

#他につまずいたこと
・python実行時、ついローカルネットワークにしてしまった
設定されてしまったので、ファイアウォールの設定を見直す羽目に

#サーバー・クライアント作成時に参考にしたページ:
[1]マルチスレッドサーバー
http://stackoverflow.com/questions/23828264/how-to-make-a-simple-multithreaded-socket-server-in-python-that-remembers-client
[2]クライアント
http://qiita.com/nadechin/items/28fc8970d93dbf16e81b
[3]エラー
https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx

大変参考になりました。ありがとうございました。
エラー対策はstack overflowさんで探しても、あまり良いものはありませんでした。
一応、筆者はerror 10053, 10054(一応,10056,10057も)を上記で記述した方法でやっています。
それ以外のエラーはsocket.connectをcontinueで続けています。
※url,勝手に張ってはいけない等のことありましたら、よろしくお願いします。

実装はこちら？（多分あってます）
https://github.com/jackee777/server_and_client/tree/master/simple_server
E2Emailでメール暗号化運用してみる


# 目的/背景
* 顧客とのメールのやり取りで添付ファイルにパスワードを設定する運用は滅びろと思っている

# 方法
* [E2Email](https://github.com/e2email-org)
	* Chromeの拡張機能で、GmailでOpenPGPを利用できる
* Gmail以外での方法は[Pretty Good Privacy[PGP]を使ってみる](http://qiita.com/digitalpeak/items/a6f354f7798877f3c49f)

# [E2Email](https://security.googleblog.com/2017/02/e2email-research-project-has-left-nest_24.html)とは
* *E2EMailは、Chrome拡張機能を使用してOpenPGPをGmailに統合するアプローチの1つで、Googleで開発された実績のあるオープンソースのJavascript暗号ライブラリをベースに構築されています。*
* *インサイダーリスク、強制的なデータ開示要求、またはその他の認識される危険性に関心を持っているかどうかにかかわらず、エンドツーエンドの電子メール暗号化を慎重に使用して信頼するシステムの範囲を制限する人もいます。*
* *E2EMailはGoogle製品ではなく、業界全体の情熱的なセキュリティエンジニアが既にコミュニティに基づいたオープンソースプロジェクトになっています*

# 環境
## アプリケーションをビルドするには、git、python、jdk1.7以上、antが必要
### macOS Sierra 10.12.3
* java version "1.8.0_112"
* javac 1.8.0_112
* Apache Ant(TM) version 1.10.1 compiled on February 2 2017
* Python 2.7.13
* git version 2.7.1

### Ubuntu 14.04.5 LTS
* java version "1.7.0_121"
* OpenJDK Runtime Environment (IcedTea 2.6.8) (7u121-2.6.8-1ubuntu0.14.04.3)
* OpenJDK 64-Bit Server VM (build 24.121-b00, mixed mode)
* javac 1.7.0_121
* Apache Ant(TM) version 1.9.3 compiled on April 8 2014
* Python 2.7.6
* git version 1.9.1

# 設定
`$ git clone https://github.com/e2email-org/e2email;cd e2email `
`$ ./do.sh setup`
`$ ./do.sh build`

* デベロッパーモードを有効にし、build/e2emailを拡張機能から読み込む
![Screenshot from 2017-04-15 12:26:26.png](https://qiita-image-store.s3.amazonaws.com/0/58788/853aaec7-4a05-921b-113b-7a3ef6131c70.png)

* 起動
![Screenshot from 2017-04-15 12:28:48.png](https://qiita-image-store.s3.amazonaws.com/0/58788/38f04a5a-abcb-3222-6b53-1b9e54bee85f.png)

<img width="1440" alt="スクリーンショット 2017-04-12 18.57.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/58788/e288921c-5ad6-4f3e-5e97-09ecc9ba4ffe.png">

<img width="1440" alt="スクリーンショット 2017-04-12 18.59.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/58788/5ae8732d-d98e-dda1-5c6e-95a2cabc9750.png">

<img width="1440" alt="スクリーンショット 2017-04-12 18.59.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/58788/a4a82cb2-d41a-8572-44a5-0b79d47b047a.png">

<img width="1031" alt="スクリーンショット 2017-04-12 19.00.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/58788/390055ea-29be-1d4d-b952-5be5f92e1216.png">

<img width="1440" alt="スクリーンショット 2017-04-12 19.00.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/58788/84555dbc-67a9-a890-41e7-de20461597c5.png">

<img width="1440" alt="スクリーンショット 2017-04-12 19.04.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/58788/24d4286e-a336-d91d-d170-435a802ee784.png">

* Invitation
    * メール受信者宛にこのアプリを使うように通知・招待します
        <img width="1169" alt="スクリーンショット 2017-04-15 12.50.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/58788/ce4ed2d5-495f-0fba-54fa-71a196104980.png">


* 受信メール
![Screenshot from 2017-04-15 12:55:10.png](https://qiita-image-store.s3.amazonaws.com/0/58788/a908925c-9b93-9712-7331-df72d1f5dcf3.png)

以降はこのアプリケーションでメールの送受信を行います。

# 所感
* Gmail&&Chromeを使っており、メールのパスワード設定運用に辟易している方には刺さる製品だと思います。
* README.mdにもありますが、テストフェーズなので、実際の業務での運用はまだ避けたほうがいいかもしれません。
HighVoltageを使ってRailsでmarkdownからページを動的生成


### 参考
+ [Simple Markdown Powered Rails Blog | shubox.io](https://shubox.io/blog/2016/07/25/simple-markdown-powered-rails-blog?utm_source=twitter&utm_medium=social)
+ [How can I automatically render partials using markdown in Rails 3_ - Stack Overflow](http://stackoverflow.com/questions/4163560/how-can-i-automatically-render-partials-using-markdown-in-rails-3/10131299#10131299)


やりたいこと
-----------------------------
+ そこそこ文章量のあるほぼ静的なページで、個別にController作るのだるいし、DBに入れるまでもないようなページ作りたい
+ ルーティング書くのもだるいのでURLから判別してレンダリングして欲しい
+ md内でhelperは使いたい



やり方
-----------------------------
### 下準備
```Gemfile
gem 'high_voltage'
gem 'rdiscount'
```

```config/initializers/high_voltage.rb
HighVoltage.configure do |config|
  config.content_path = 'stashes/'
end
```

```config/initializers/markdown_handler.rb
require 'rdiscount'

module MarkdownHandler
  def self.erb
    @erb ||= ActionView::Template.registered_template_handler(:erb)
  end

  def self.call(template)
    compiled_source = erb.call(template)
    "RDiscount.new(begin;#{compiled_source};end).to_html"
  end
end

ActionView::Template.register_template_handler :md, MarkdownHandler
```


### /blog/:post の場合
```routes.rb
get 'blog/:post', to: 'high_voltage/pages#show', id: 'blog'
```

```app/views/stashes/blog.html.erb
<% post = "#{params[:post].gsub('-', '_')}"  %>

<%= render("stashes/blog/#{post}").html_safe %>
```

```app/views/stashes/blog/_test.md
# TEST

<%= Time.current %>
<%= link_to 'root', root_path %>
```

これで `http://localhost:3000/blog/test` を開くと
現在時刻とルートへのリンクのあるページが表示できる。
違うページは同様に `app/views/stashes/blog/_xxx.md` を追加していけばよい。
TensorFlowの基本的なコマンドについてのメモ

TensorFlowの学習周りのコマンドについて確認

CNNなどのconvolution層やpooling層は詳細な説明がたくさんあります。モデル記述後、損失関数や学習あたりのfunctionをよく把握していないので、その辺りを確認したいと思います。

特に、
- tf.nn.softmax_cross_entropy_with_logits()
- tf.reduce_mean()
- tf.train.AdamOptimizer().minimize()
を確認したいと思います。おおよそ書き尽くされてるので、備忘録用です。

バージョンは```
Python:3.5.3
tensorflow==1.0.1```
です。

# tf.nn.softmax_cross_entropy_with_logits()
[公式](https://www.tensorflow.org/api_docs/python/tf/nn/softmax_cross_entropy_with_logits)にある通り、基本的に推計結果のsoftmax値を計算して、cross entropyを計算します。
#### 主に使う引数

1. logits：最終的な推計値。softmaxはする必要ない
2. labels：教師データ

実装されている式は理解できず。

# tf.reduce_mean()
平均値を出します。上のtf.nn.softmax_cross_entropy_with_logits()に3Dの場合、戻り値が複数になるので、その平均値を取りたいときに使います。

```
logits2 = np.array([[0.4,0.3,0.1] , [0.2, 0.2, 0.8]])
labels2 = np.array([ [1, 0, 0], [0, 0, 1]])
cewl2 = tf.nn.softmax_cross_entropy_with_logits(labels=labels2, logits=logits2)
means = tf.reduce_mean(cewl2)
print(sess.run([means, cewl2]))
```
結果は、```[0.85686192088267488, array([ 0.97291891,  0.74080493])]```になります。

# tf.train.AdamOptimizer().minimize()
学習用ですね。```tf.train.GradientDescentOptimizer().minimize()```との違いは、これから確認します。

内容を確認できるのは、```tf.reduce_mean()```だけですね。他の関数は高機能です。Tensor Flowは便利です。
今更の様にMacにgoの環境を作る

# Macにgoの環境を作る

もう散々いろいろな人が書いている内容なので今更書くような内容ではないのですが、久々にMacに環境を作ったので復習の為にメモを

## まず古いhomebrewを消す

いつ入れたか記憶が定かでは無いhomebrew環境があるのでまずは綺麗にしたいと思います。今回は一切合切リセットしたいのでガッツリ消します。公式サイト(http://docs.brew.sh/FAQ.html) に記載があるように一度homebrewからクリーンナップを。

-> How do I uninstall Homebrew?

> \$ ruby -e "\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

さらに、色々確認してみたところdockerだのdbだの要らなそうなファイルばかりなのでバッサリと他のものも消しちゃいます

> \$ rm -Rf /usr/local

これは自己責任でお願いしますネ！というか、これしちゃうなら上のアンインストール必要ないし！

## homebrewを入れる

こちらも公式サイト(https://brew.sh) の記述をそのままでいきましょう

-> Install Homebrew

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

※コピペすれば問題ないですが、注意点としてはrubyのパスは絶対パスで指定した方が良さそうです。古い環境変数(多分rbenv関連)が残っていた関係と思いますがrubyコマンド名のみにしたらダメでした。

## goを入れる

> \$ brew install golang

よく分からないけど、「brew install go」でも良いのかも？多分同じものが入ります。

## 環境変数の設定

なんか昔に入れたものと微妙にパスが違ったりしていたので設定を全部入れ直します。bashを使っているので「~/.bash_profile」を編集します。

> \$ vim ~/.bash_profile

> \# Golang
> export GOROOT=/usr/local/opt/go/libexec
> export GOPATH=\$HOME/go
> export PATH="\$PATH:\$GOROOT/bin"
> export PATH="\$PATH:\$GOPATH/bin"

※GOPATHは所謂ワークスペースのパスなのでお好きなパスにしましょう。他のものはおまじないと思って。

# あとはお好きにどうぞ

## (例) revel入れるよ

> \$ go get github.com/revel/revel
> \$ go get github.com/revel/cmd/revel
> \$ revel help
指定日時よりも後で追加されたり更新があったテーブルだけをmysqldumpする

タイトルから少し闇を感じますが、こういった機会もあるかと思います。

#方針
show table status で Create_timeとUpdate_timeを指定して一覧を取得
awk で良い感じにファイル出力

#方法
以下のような形で一括で。

```cmd:create_migration_mysqldump.sh
TARGETHOST=(MySQLのホスト)
TARGETUSER=(MySQL接続ユーザー名)
TARGETDATABASE=(DB名を指定する必要あり)
TARGETPW=(パスワードを直接書くのはよくないです。一連の作業が終わったらすべてファイルごと消しましょう。)
TARGETDATETIME="2017-03-01 00:00:00"
EXECUTEEDDATE=`date +"%Y%m%d"`

mysql -u${TARGETUSER} -p${TARGETPW} -h ${TARGETHOST} --execute="show table status from ${TARGETDATABASE} where Create_time >='${TARGETDATETIME}' or Update_time >='${TARGETDATETIME}';" -N | awk  'BEGIN { FS="\t"; } { print "mysqldump -u'"${TARGETUSER}"' -p'"${TARGETPW}"' -h'"${TARGETHOST}"' '"${TARGETDATABASE}"' "$1" > "$1"."'"${EXECUTEEDDATE}"'".dump #-- created_"$12 " updated_" $13  }'
```

実行結果

```
mysqldump -uUSERNAME -pPASSWORD -hTARGETHOST TARGETDATABASE TABLENAME1  > TABLENAME1.20170412.dump #-- created_2017-03-28 21:04:43 updated_2017-03-28 21:24:00
mysqldump -uUSERNAME -pPASSWORD -hTARGETHOST TARGETDATABASE TABLENAME2  > TABLENAME2.20170412.dump #-- created_2017-03-28 21:05:21 updated_NULL
mysqldump -uUSERNAME -pPASSWORD -hTARGETHOST TARGETDATABASE TABLENAME3  > TABLENAME3.20170412.dump #-- created_2017-03-28 21:08:27 updated_NULL
mysqldump -uUSERNAME -pPASSWORD -hTARGETHOST TARGETDATABASE TABLENAME4  > TABLENAME4.20170412.dump #-- created_2017-03-28 21:06:26 updated_NULL
mysqldump -uUSERNAME -pPASSWORD -hTARGETHOST TARGETDATABASE TABLENAME5  > TABLENAME5.20170412.dump #-- created_2017-03-29 18:40:49 updated_NULL
```


※誤解を招く部分があったため、再投稿しております。
[MacOS]VirtualBoxをhomebrewでインストールしたらvagrant upできなかったよ

# 背景
Macの容量がいっぱいになってきたのと，Mac内のファイル整理も兼ねてMacをクリーンインストールしました．
最近Ansibleを触る機会があったので，どうせならとMacのプロビジョニングをAnsibleで行いました．



# 問題
VirtualBoxやVagrantもAnsibleでhomebrewを叩いてインストールをして，いざ`vagrant up`しようとしたらエラーがでました．

```
$ vagrant up
The VirtualBox VM was created with a user that doesn't match the
current user running Vagrant. VirtualBox requires that the same user
be used to manage the VM that was created. Please re-run Vagrant with
that user. This is not a Vagrant issue.

The UID used to create the VM was: 502
Your UID is: 501
```

# 解決方法
簡単に記述すると，virtualboxのUIDは`502`と記述されてますが，あなたのは`501`ですよ
ということらしいです．

従って，以下のコマンドを打って，`502`を`501`に変更したら解決します．

```
vim .vagrant/machines/default/virtualbox/creator_uid
```
Google Apps Scriptを使ってエクセルファイルをスプレッドシートに変換する

# 概要
この記事ではGoogle Apps Script（GAS）を使ってエクセルファイルをスプレッドシートに変換する方法について紹介させていただきます。ここではエクセルファイルの場所は①Google Drive上、あるいは②どこかのサイト上（直リンク可能）にあると想定します。

# エクセルファイルをスプレッドシートに変換
## 準備
下記のサンプルスクリプトはスクリプトエディタへ貼り付けて使用してください。スクリプトを実行する前に次の手順でAPIを使用するための下記２点の設定を行ってください。どちらから行っても問題ありません。

- スクリプトエディタ -> リソース -> Googleの拡張サービス -> [DriveAPI v2](https://developers.google.com/drive/v2/reference/)を有効にする

- スクリプトエディタ -> リソース -> Cloud Platform プロジェクト -> APIコンソールを表示 -> 左側のライブラリを選択 -> Drive APIを検索 -> DriveAPIを有効にする

## 1. エクセルファイルがGoogle Drive上にある場合
このサンプルは、Google Drive上にあるエクセルファイルをスプレッドシートに変換する状況を想定しています。``fileID``, ``folderID``, ``filename``を入力して実行してください。

~~~gas:
var fileID = "#####";
var folderID = "#####";
var filename = "filename";

var res = Drive.Files.insert({
  "mimeType": "application/vnd.google-apps.spreadsheet",
  "parents": [{id: folderID}],
  "title": filename
}, DriveApp.getFileById(fileID).getBlob());
~~~

もしも、ファイルIDが分からない場合は、下記のようなスクリプトでファイル名に対するファイルIDを取得することができます。もしも同一ファイル名が複数ある場合は複数のIDが返されます。

~~~gas:
var filename = "filename";

var res = Drive.Files.list({
  q:      "title=filename and trashed=false",
  fields: "items(id)"
});
~~~

## 2. エクセルファイルがどこかのサイト上にある場合
このサンプルは、どこかのサイト上にエクセルファイルが存在し、そこからダウンロードしてスプレッドシートに変換する状況を想定しています。``fileURL``, ``folderID``, ``filename``を入力して実行してください。このサンプルの動作確認を行った際は、DropBoxへサンプルをアップロードし、直リンクのURLを作成して行いました。

~~~gas:
var fileURL = "https://#####/sample.xlsx";
var folderID = "#####";
var filename = "filename";

var res = Drive.Files.insert({
  "mimeType": "application/vnd.google-apps.spreadsheet",
  "parents": [{id: folderID}],
  "title": filename
}, UrlFetchApp.fetch(fileURL).getBlob());
~~~

``DriveApp.getFileById(fileID)``を``UrlFetchApp.fetch(fileURL)``に変更するだけでOKです。
``mimeType``を変更することで、ワードやパワーポイントのファイルへの対応も可能です。mimeTypeの種類は[こちら](https://developers.google.com/drive/v3/web/mime-types)をご覧ください。
[メモ] UNIXの子プロセスの標準入力にパイプでデータを渡したい

####やりたいこと
UNIXで子プロセスを起動して任意のコマンドをexecで実行したい。
そのコマンドの標準入力に対してパイプでデータを渡したい。


####プログラム例
子プロセスを起動してcatを引数なしで呼ぶ。catは引数なしなので標準入力を待つ。
親プロセスからは"Hello, World."をパイプで流す。

つまり、shellで
``
$ echo "Hello, World" | cat
``
を実行したのと同じ。

### コード

```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
	int     fd[2];

	// pipe を作成する。fd[0]は受信用、fd[1]は送信用
	pipe(fd);

	// プロセス生成
	switch(fork()) {
	case -1:
		perror("fork");
		return 1;
	case 0: // 子プロセス
		{
			close(fd[1]); // 送信用fdを閉じる

			// 受信用fdをstdinのfdに上書きする
			if (dup2(fd[0], STDIN_FILENO)==-1) {
				perror("cannot redirect stdin"); 
				exit(1); 
			}
			close(fd[0]); // 受信用fdは複数いらないので閉じる

			// cat を実行する
			execlp("cat", "cat", NULL) ;

			perror("execlp: failed."); // ここに来たということはexeclpに失敗した
		}
	default:
		{ // 親プロセス
			const char send_str[] = "Hello, World.\n";

			close(fd[0]); // 受信側fdを閉じる
			write(fd[1], send_str, strlen(send_str)+1);
			close(fd[1]); // 送信後は必ず閉じる　★①

			int status;
			wait(&status);
		}
	}

	return (0);
}
```

####はまったこと
"Hello, World"は出力されるが、子プロセスが終了しない。

####原因
親プロセスがwrite()後にfd[1]に対してcloseをしていなかった。（上記ソースの★①）
子プロセス側は標準入力をずっと待っている状態だった。

###参考になったもの
http://stackoverflow.com/questions/22245237/execlp-redirect-stdin-in-c

以上。
多次元配列のフィルタリング

現在、自己学習記録のプログラムを作成中で、わからないことがあります。
教えていただければ幸いです。
下記の画面で入力した値を入力確認画面にてGETで受け取ります。
その際に、各入力値が多次元配列の場合のフィルタリングをしたいのですが、filter_input関数だとうまくいきません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/138225/9fc31caa-9fa3-ea8e-a112-b961f8185e83.png)

↓↓↓↓↓下記がコードになります。※とりあえず$yearのみフィルタリングを行おうとしています。

if (isset($_GET) && $_GET != '') {
    //日付を取得
    if ($_GET['date']['year'] != '' && $_GET['date']['month'] != '' && $_GET['date']['day'] != '' ){

        
        $year = filter_input(INPUT_GET, 'year', FILTER_SANITIZE_SPECIAL_CHARS);
        
        $month = $_GET['date']['month'];
        $day   = $_GET['date']['day'];
        $date =  "20{$year}年{$month}月{$day}日";
    }

入力の仕方がおかしいのは認識しています。
この関数以外を本来は使うべきなのでしょうか。初歩的な質問ですが、よろしくお願いします。
ADDA / Slide > pvec and xvec for checkpoint time 20sec

```txt:Environment
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)
```

Using the code at
http://qiita.com/7of9/items/66919d3aed0e651bc6d7
I checked the pvec (polarization of dipoles) for checkpoint time for 20sec.

`./adda -grid 25 -chp_type normal -chpoint 20s`

<hr>
# trial 1

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/6d9130b0-f5c0-cd32-09df-b28245f147fa.png)

<hr>
# trial 2
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/6eccb2b5-fe68-fd0d-180d-00ac99e209ef.png)

<hr>
# trial 3
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/c75f52c9-0a5d-a367-0db6-2f7aab630d63.png)

<hr>
# trial 4
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/f92db24a-b1c7-370f-525c-543abf42dca2.png)

<hr>
# trial 5
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/62855fa5-3f37-41fe-2afd-1e8b2d168ec9.png)

<hr>
Note (Added on Apr.16, 2017):
According to [reply in this](https://groups.google.com/forum/#!topic/adda-discuss/f3_Cm3HFtkA), above shown pvecs was not truely the dipole polarization, but auxiliary vectors for the iterations.
nkfで文字コード変換(基本)


## 概要
ダウンロードしてきたファイルが文字化けしていて読めなかった。そのときの対応方法で、具体的にはnkfコマンド文字コードを変換する。

## 環境
CentOS 7

## 手順
### nkfインストール
 * CentOS7にはデフォルトでnkfは入っていない。
 * epelから入れる必要がある

```
$ sudo yum repolist          # epelが入っているか確認
$ sudo yum install epel-release   # もし入っていなかったら
$ sudo yum install nkf
```

### 現在の文字コードを確認

```
$ nkf -g /path/to/file
Shift_JIS
```

### 何に変換する？
 * OSの設定に合わせるのがいいと思う

```
$ echo $LANG
ja_JP.UTF-8
```


### ということでUTF-8に変換する

```
$ nkf -w /path/to/file > /path/to/file_utf8
```

 * 結果は標準出力に出るので、適当にリダイレクトするとよい
 * `--overrite`をつけると上書きもしてくれる

## 他にできること
 * JIS, EUC, Shift_JISを扱う
 * 改行コードを変換
 * ひらがな、かたかなの変換

## 参考文献
 * manをどうぞ
アイコンを申請なしで変える(iOS10.3)

# はじめに
アプリのアイコンを季節やイベントごとに変更しているアプリを最近よく見かけますね。
今までは、アプリを申請して変更しなければいけなかったのですが、
iOS10.3からは申請なしで、アプリのアイコンを変更できるようになったようです。

TwitterのアイコンをFacebookのアイコンに変更してみました。

![to.gif](https://qiita-image-store.s3.amazonaws.com/0/71694/de0bfb53-f919-3842-2d2e-b727fde04c57.gif)

## Alternate Icons
UIApplicationのExtensionに追加されたようです。

```swift:UIApplication.h
extension UIApplication {

    // If false, alternate icons are not supported for the current process.
    @available(iOS 10.3, *)
    open var supportsAlternateIcons: Bool { get }

    
    // Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work.
    @available(iOS 10.3, *)
    open func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Swift.Void)? = nil)

    
    // If `nil`, the primary application icon is being used.
    @available(iOS 10.3, *)
    open var alternateIconName: String? { get }
}
```

[setAlternateIconName(_:completionHandler:) - UIApplication | Apple Developer Documentation](https://developer.apple.com/reference/uikit/uiapplication/2806818-setalternateiconname)

また、アイコンの変更はフォアグラウンドの状態に限定され、
変更後はユーザにダイアログで通知されるようです。

## 実装
1. アイコンを登録する
2. Info.plistに必要項目を登録する
3. アイコンを変更する処理を実装する

## 1.アイコンを登録する
アイコンは、アセットカタログを利用するとうまく行きませんでした。
そのため、プロジェクト配下に保存しました。

<img width="256" alt="スクリーンショット 2017-04-15 9.00.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/058b50ff-3513-424c-d087-f4b58b8c7618.png">


## 2. Info.plistに必要項目を登録する

(1) Add Rowで行を追加し、「アイコンファイル（iOS 5）」を選択します。
(2) Primary Icon > Icon files > Item0にデフォルトのアイコン名を入力します。
(3) 入れ替えるアイコン用にCFBundleAlternateIconsを追加します。
(4) CFBundleAlternateIcons > 任意の名前を入力します。 
(5) CFBundleAlternateIcons > 任意の名前 > CFBundleIconFiles > Item0に入れ替えるファイル名を追加します。

今回は、facebook Icon、Instagram Iconとしました。
この値は、ソースコードで利用します。

<img width="490" alt="スクリーンショット 2017-04-15 8.35.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/5521d31c-f448-756b-d494-2a6585346513.png">

## 3. アイコンを変更する処理を実装する
ボタンを押下して、アイコンを変更します。

```swift:ViewController.swift
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func didTapChangeIcon(_ sender: UIButton) {

        // Info.plist で設定した値
        let iconName = "facebook Icon"

        UIApplication.shared.setAlternateIconName(iconName) { error in
            if let error = error {
                print(error.localizedDescription)
            }
            print("Done!")
        }
    }
}
```

# まとめ
時計やカレンダーアプリのような動的な変更はできないようですが、
季節やイベントごとにアイコンを変えたい時に、活用できそうですね。

# 参考
[Swift World: Change your app’s icon programmatically in iOS 10.3](https://medium.com/@NilStack/swift-world-change-your-apps-icon-programmatically-in-ios-10-3-8e706a3206b3)

[iOS アプリのアイコンを申請なしですぐに変更？！ Alternate Icons を試してみた | ギャップロ](https://www.gaprot.jp/pickup/ios10/alternate-icons)
numpy > array > median > return 0.0 > 偶数個の場合は中央値候補二つの平均を返すことを教えていただきました

median()を使ってarrayの中央値を取ろうとしていた。
得た値は0.0だった (arrayには無い要素)。

小さなコードで試してみた。
http://ideone.com/jmkZ6h

```py
import numpy as np
 
aary = np.array([-3, 1, 3])
print(np.median(aary))
bary = np.array([-3, -1, 1, 3])
print(np.median(bary))
```

```txt:run
1.0
0.0
```

medianの対象arrayの要素数が偶数の場合に0.0となる。
~~奇数個でないから「中央値」が求まらず、エラー値として0.0を返しているのかもしれない。~~
(追記 2017/04/21)
@carnage さんの[コメント](http://qiita.com/7of9/items/4428fbe252d1a17cf7e6/#comment-53c68440439c92792a9e)にて中央値候補二つの平均を返していることを教えていただきました。
情報感謝です。

偶数個のarrayの中央値を取ろうとしたのが、そもそもの間違いだろう。

偶数個のarrayに対して、「だいたい中央値」を取りたい方法としては、最小か最大の要素を削除して奇数個の要素でmedian()を取る方法を思い付く。

http://ideone.com/xv2aQp

```py
import numpy as np

aary = np.array([-3, 1, 3])
print(np.median(aary))
bary = np.array([-3, -1, 1, 3])
print(np.median(bary))

cary = np.delete(bary, max(bary))
print(cary)
print(np.median(cary))

```

```txt:run
1.0
0.0
[-3 -1  1]
-1.0
```
Docker for Mac | Mac で docker を始める一番簡単な手順 ( 1分でウェブサーバーを立てる )

# Docker for Mac をインストールしよう

Docker for Macとは、Mac用のネイティブなアプリケーションである。
2017年。これさえあれば良い。無駄だ。他のことは考えるな。

https://docs.docker.com/docker-for-mac/install/#download-docker-for-mac

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/4c7d0ebd-11fa-0e12-9585-653eb8ec5fd0.png)

# インストール完了

Mac 画面の右上に Docker のアイコンが表示されたら、準備はOK。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/e0630a26-110b-b0fa-b2a3-3f94a347ffe7.png)

# ターミナルでdockerコンテナを走らせる

Hello world させてみる。

```bash
$ docker run busybox echo hello world
hello world
```

もう実行できた！

(初回はイメージが自動でダウンロードされるので、標準出力はもう少し長くなる)


# Webサーバーを立ててみる

```
$ docker run -d -p 80:80 --name webserver nginx
```

## 確認

http://localhost/ にアクセスすると...

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/debbbd54-a0f4-6da0-9ff3-f31f0039a62b.png)

もうアクセス出来た！


# 環境確認

必要なものが全部入ってる！

```
$ docker --version
Docker version 17.03.1-ce, build c6d412e

$ docker-compose --version
docker-compose version 1.11.2, build dfed245

$ docker-machine --version
docker-machine version 0.10.0, build 76ed2a6
```

# Docker って

用語がありすぎて、そもそもどこから始めれば良いか分からなかった。
brew とかで色々入れていた。だけど、こんなに簡単だったなんて。

# Docker for mac のおかげで

- docker 本体
- docker machine
- docker toolbox
- virtualbox (VM)

こんな用語や要素全てと、その違いや関連性を覚えなくても、とりあえずdockerを始められる。

## 注意

brewとかでdocker関係のものを既にインストールしている場合は、環境をまっさらにしておいた方が良いかもしれない。

[Docker for Mac vs. Docker Toolbox - Docker Documentation](https://docs.docker.com/docker-for-mac/docker-toolbox/#checking-component-versions)

# 参考

- https://docs.docker.com/docker-for-mac/docker-toolbox/
- https://docs.docker.com/docker-for-mac/








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
windowsでTensorFlow

#概要
windowsにTensorFlow入れてみた。

#環境
windows 7 sp1 64bit

#手順1
Anaconda3を入れる。

#手順2
Python3.6なので仮想環境つくる。
NavigatorのEnviromentsでcreate。
Pythonを3.5にして、create。

#手順3
コンソールに入って、TensorFlowをpipでインストール。
pip install --upgrade tensorflow

#手順4
Python shellで確認。
import tensorflow as tf 

#手順5
tensorboardを確認。
tensorboard --logdir=.\log
自分のMac(El Capitan)にbrew install postgresをしたけどうまくできなかったので備忘録

[こちらを参考にさせていただきまして](https://cncgl.github.io/2015/10/17/El-Capitan-PostgreSQL.html) macにpostgres環境を作ろうとしました。

<h1> $ brew install postgres </h1>

このコマンドでbrewにはインストールできましたが、
インストール中に `Error link`って出てきていたのが気になっては
いましたが、最後までそれ以外エラーがなく入ったので進めようとしていました。


<h2> $ initdb -D /usr/local/var/postgres </h2>

初期化?を先ほどの記事にしたがってしようとしたらどう
$ -bash: initdb: command not found のようなコマンドがない？
これは？？の状態ですすめませんでした。

その後、色々調べているとHomebrewにはインストール済みのものに問題がないか調べてくれる
コマンドあるらしいとわかった

<h2> $ brew doctor </h2>

この実行で以下

```

:
:
those kegs to fail to run properly once built. Run `brew link` on these:
  git
  libpng
  mercurial
  postgresql
:
:
```
`brew link`やっぱりlinkされていない！？
ということがわかった。

そうなれば、この内容でググってみると
[こちらのサイトで説明あったのでしたがってやってみました。](http://qiita.com/fumi_042/items/55be8fb37cc23325b7c2)

<h2> $ brew link postgresql </h2>

linkをさせる？ためのコマンドだと思うのですが、これでどうだ！？っとやると
今度は、

```

Error: Could not symlink share/man/man7/ABORT.7

```

う〜ん、またエラーか。
[さらにこちらで対処法をみつけた](http://qiita.com/jacoyutorius/items/9692434a9afe88a46e80)

<h2> sudo chown -R $USER man7</h2>

以下コマンドで実行権限をつけてあげて進められた

```

cd /usr/local/share/man
sudo chown -R $USER man7
brew link --force postgres

```

これでようやくpostgresがlinkされた！！
さあ次だ！

```

$ initdb -D /usr/local/var/postgres

```

初期化された！さあ!
と進めると
その先のユーザー登録の際

```

$ createuser -P postgres

```

またエラー
<h2> connections on Unix domain socket "/tmp/.s.PGSQL.5432"? 

ここでも謎のエラーだったので検索する
[ここでわかった](http://noshipu.hateblo.jp/entry/2016/02/26/151752)

<h2> fixBrewLionPostgresql.shファイル </h2>

以下コマンドでローカル上でもpostgresがつかえるようになりました！

```

$ cd /usr/local/Cellar/postgresql
$ curl -o fixBrewLionPostgresql.sh http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh
$ chmod 777 fixBrewLionPostgresql.sh
$ ./fixBrewLionPostgresql.sh
$ pg_ctl -D /usr/local/var/postgres start

```

以上、いろいろ苦労したけど　これでpostgres練習できそう。
ただ、どうしてこうなっているのか内容がイマイチ理解不足なので勉強しないと
TensorFlow1.0 で "AttributeError: 'module' object has no attribute" 

#概要
TensorFlow1.0でコピペしたコードが動かん。
APIの互換性がないやつらしい。

#手動でがんばる。

```
tf.VARIABLES -->  tf.GLOBAL_VARIABLES
tf.all_variables -->  tf.global_variables
tf.initialize_all_variables -->  tf.global_variables_initializer
tf.initialize_local_variables -->  tf.local_variables_initializer
tf.initialize_variables -->  tf.variables_initializer
tf.audio_summary -->  tf.summary.audio
tf.contrib.deprecated.histogram_summary -->  tf.summary.histogram
tf.contrib.deprecated.scalar_summary -->  tf.summary.scalar
tf.histogram_summary -->  tf.summary.histogram
tf.image_summary -->  tf.summary.image
tf.merge_all_summaries -->  tf.summary.merge_all
tf.merge_summary -->  tf.summary.merge
tf.scalar_summary -->  tf.summary.scalar
tf.train.SummaryWriter -->  tf.summary.FileWriter
tf.inv -->  tf.reciprocal
tf.list_diff -->  tf.setdiff1d
tf.listdiff -->  tf.setdiff1d
tf.mul -->  tf.multiply
tf.neg -->  tf.negative
tf.select -->  tf.where
tf.sub -->  tf.subtract
tf.batch_band_part -->  tf.band_part
tf.batch_cholesky -->  tf.cholesky
tf.batch_cholesky_solve -->  tf.cholesky_solve
tf.batch_fft -->  tf.fft
tf.batch_fft3d -->  tf.fft3d
tf.batch_ifft -->  tf.ifft
tf.batch_ifft2d -->  tf.ifft2d
tf.batch_ifft3d -->  tf.ifft3d
tf.batch_matmul -->  tf.matmul
tf.batch_matrix_determinant -->  tf.matrix_determinant
tf.batch_matrix_diag -->  tf.matrix_diag
tf.batch_matrix_inverse -->  tf.matrix_inverse
tf.batch_matrix_solve -->  tf.matrix_solve
tf.batch_matrix_solve_ls -->  tf.matrix_solve_ls
tf.batch_matrix_transpose -->  tf.matrix_transpose
tf.batch_matrix_triangular_solve -->  tf.matrix_triangular_solve
tf.batch_self_adjoint_eig -->  tf.self_adjoint_eig
tf.batch_self_adjoint_eigvals -->  tf.self_adjoint_eigvals
tf.batch_set_diag -->  tf.set_diag
tf.batch_svd -->  tf.svd
tf.complex_abs -->  tf.abs
tf.image.per_image_whitening -->  tf.image.per_image_standardization
tf.pack -->  tf.stack
tf.unpack -->  tf.unstack
```
技術英語 > which makes writing hard requirements [up front] almost pointless / before it is cast in stone

@ http://thecodist.com/article/the-six-goals-of-every-programming-project

> which makes writing hard requirements up front almost pointless

https://www.merriam-webster.com/dictionary/up%20front
> 2 :  in advance

地理的な「前に」ではなく、時間的な「in advance」の方。

ソフトウェアのユーザ自身が「自分の望んでいること」を分からないことがあるため、ガチガチの設計を前もってしてしまうのは無意味である、と言っている。

どうするかというのは

> It means you need to be more flexible, to iterate, to prototype, to let people handle something **before it is cast in stone**. 

意訳 (間違っているかもしれない)
「つまり、あなたはもっとフレキシブルでないといけない。ガチガチに仕様を固める前に、イテレートして、プロトタイプを作成し、何かを実際に使ってもらうようにしないといけない。」

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

The shadow is cast on the ...

https://issues.unrealengine.com/issue/UE-39766
> Results: The shadow is cast on the opposite side of the stationary light when using Direct Capsule Shadows enabled.
Macで立てたローカルサーバにスマホからアクセスする

#はじめに
タイトルそのままです

#実行環境
OS X 10.12.4
スマホ（Androidバージョン 5.0.2）

#事前準備
Macでローカルサーバを構築しておいてください。
構築方法がわからない方は[こちら](http://qiita.com/pafu/items/06f78b391d8ae72dfcc5 "一行のコマンドでローカルサーバを構築する【Mac】")で説明しています。
また、Wi-FiにMacとスマホが接続されていることが必要です。

#アクセスまでの手順
1. MacのIPアドレスを調べます。 ```システム環境設定>ネットワーク>Wi-Fi>詳細>TCP/IP``` からIPアドレスをチェック。ターミナルから ```ifconfig``` を用いて調べることもできます。
2. Macから http://localhost:8000 でローカルサーバにあるhtmlファイルにアクセスしていたならば、localhostの部分をMacのIPアドレスに変更してアクセスします。
3. Macでみていたページと同じページが表示されるはずです。

#おわりに
私自身が詳しくないので文章が変かもしれません。
何かありましたらご指摘いただけると嬉しいです。
一行のコマンドでローカルサーバを構築する【Mac】

#はじめに
タイトルそのままです。
他の方々もQiitaに投稿していますが、今後の記事のリンク用に…と思い作成しました。

#実行環境
OS X 10.12.4
Python 3.5.1

#事前準備
pythonがインストールされていればおk

#構築方法
1. ターミナルを開く
2. ```python -m http.server 8000``` を入力（8000はポート番号で変更可能です）
3. ```Serving HTTP on 0.0.0.0 port 8000 ...``` と出力されれば構築完了

#注意点
* python2の方は ``` python -m SimpleHTTPServer 8000``` と入力
* ```python ...```  を実行した際にpython3として実行する設定を行なっていない（python2として処理される）方は ```python3 -m http.server 8000``` と入力

#サンプル
~/Sample に index.htmlを作成。以下のような内容を書いておきます。

```HTML:index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
  </head>
  <body>
    てすと
  </body>
</html>
```

~/Sample内で ```python -m http.server 8000``` を実行しましょう。
ブラウザに ```http://localhost:8000``` を打てば以下のようなページが表示されると思います。

![スクリーンショット 2017-04-15 5.49.44.png](https://qiita-image-store.s3.amazonaws.com/0/150412/b12f48d1-d53d-4157-37c1-372ce35df420.png)

#さいごに
Apacheを使う方法がメジャーだと思うので気になる方はググってみてください。
暇があれば記事にするかもしれないです。
CentOS7に「KVM」とweb管理マネージャー「kimchi」をインストールする手順


web上でKVMを管理するツールはいくつかありますが、以前色々試したとき設定が簡単そう且つインストールに成功したのがこれだったので愛用しています。
自分が初めて設定した当時はkimchidとして単体で動作していたのですが、wokdのプラグインとして動作するようになりそれに伴いインストールの方法も変更されたので、インストール方法をメモ用として残しておきます。

余談ですが、kimchiと名前が付いているものの製作者はブラジル人の女性だそうです。なぜkimchiなのか。

# 注意点
セキュリティ的にかなり雑なので、開発用として割り切って使用してください。
本番環境で使用する場合はoVirtなど別のものを検討されたほうが良いかと思われます。
~~まあそんな人はこんなの見ないと思いますが。~~

# kimchiのできること
kimchiはのできることはそう多くありません。
- ネットワーク管理（ブリッジの作成とか）
- ストレージ管理（ISOアップロードとか）
- テンプレート管理（作成含む）
- ゲスト管理（起動、終了、削除）
上記のように最低限の機能は備わっていますが、例えばゲストのxmlの内容を変更したいとかなった場合kimchiからできません。コンソールでvirsh editする必要があります。

# 環境/前提
- CentOS7（CentOS-7-x86_64-Minimal-1611.iso）インストール
- sudo yum update済み
- SELinuxはpermissiveかdisabledにしておく

# サイト
https://kimchi-project.github.io/kimchi/

# インストール
sudoは適当につけてください。

```
# yum -y install epel-release
# yum -y install http://kimchi-project.github.io/wok/downloads/latest/wok.el7.centos.noarch.rpm
# yum -y install http://kimchi-project.github.io/gingerbase/downloads/latest/ginger-base.el7.centos.noarch.rpm
# yum -y install http://kimchi-project.github.io/kimchi/downloads/latest/kimchi.el7.centos.noarch.rpm
```
これでlibvirtなどKVMの環境がすべてインストールされます。

latestとあるので、バージョンが更新されても恐らくそのままコピペが出来るはずです。
エラーなど起こるのであれば
https://kimchi-project.github.io/wok/downloads/
https://kimchi-project.github.io/gingerbase/downloads/
https://kimchi-project.github.io/kimchi/downloads/
の右側にrpmのリンクがあるので、そこからコピペしてください。
インストールの順番はwok、gingerbase、kimchiじゃないといけません。

```
# firewall-cmd --add-port=8000/tcp
# firewall-cmd --add-port=8000/tcp --permanent
# firewall-cmd --add-port=8001/tcp
# firewall-cmd --add-port=8001/tcp --permanent
# firewall-cmd --add-port=64667/tcp
# firewall-cmd --add-port=64667/tcp --permanent
# systemctl start wokd
# systemctl enable wokd
```
ポート8001はwebアクセス用、64667はnoVNC用、8000はなんだったっけ？
とりあえずこれで
https://[IPアドレス]:8001/
にアクセスすると管理画面が現れます。

# トラブルシューティング
## 管理画面上で[IPアドレス]、Wok、Hostのタブしか出てこない。

```
# lsmod | grep kvm
```
を実行したとき、

```
kvm_intel             170181  0
kvm                   554609  1 kvm_intel
```
など出力されることを確認してください。
実機で何も表示されなければBIOS(UEFI)画面を立ち上げ、Intel VTもしくはAMD-Vの設定を行ってください。
VMwarePlayer上の仮想マシンで何も出力されなければ、仮想マシンの設定内にあるプロセッサの仮想化エンジン項目にある、
`Intel VT-x/EPTまたは AMD-V/RVTを仮想化(V)`
にチェックを入れて起動してください。
~~このチェック入れ忘れのために一日潰しました。~~

## ネットワークタブからネットワークの作成でネットワークタイプをBridgedを選択したけどエラーになる。
NetworkManager止めてください。

```
# systemctl stop NetworkManager
# systemctl disable NetworkManager
```
## ISOをストレージからアップロードしたけどテンプレート作成で選択できない
root所有のパーミッションが600になっているので、コンソールで644にでも変更してください。
ちなみにISOの削除はできるので不具合のような気がします。
## noVNC上のキーボード入力がおかしい
コンソール上で

```
# virsh edit [ゲスト名]
```
して、
`graphics`
上記文字を検索し、出てきたところの項目に
`keymap='ja'`
を追加してください。

# 余談
Debian sidでは管理画面が出ることを確認しました。
Ubuntu16.10ではインストール時にエラーが出ることを確認しています。
たしかlibvirt-binのパッケージが違うパッケージに統合されたとかが原因だったような。
Mastodon の投稿を Twitter に転送する

# エスパー用今北産業

- Mastodon には公開 RSS フィードが存在します
- その URI は ```ドメイン名/@ユーザ名.atom```
- IFTTT で投げます


# 用意するもの

* IFTTT のアカウント
* Twitter のアカウント
* 任意の Mastodon インスタンスのアカウント

# 手順

1. IFTTT で新しい applet を作ります
2. "RSS Feed" を選び、trigger はキーワードでフィルタしたいかどうかに応じて(動機は後述)選び、Feed URL には上の方に書いてあるようにして入力します (例えば ```https://mstdn.jp/@yamadatarou.atom```)
3. "Twitter" を選び、action は "Post a tweet" を選び、Tweet text には ```{{EntryContent}}``` とだけ入力します
4. おしまい

# 問題点

## 全部転送されちゃう

IFTTT の RSS Feed の trigger で filter をかける

## hashtag でうまく filter できない

```
&lt;a href="https://mstdn.io/tags/photography" class="mention hashtag"&gt;#&lt;span&gt;photography&lt;/span&gt;&lt;/a&gt;
``` 
という形で入っているので頑張る(頑張れ)

もしくは諦めて cashtag とか使う

## mention もお構いなしに転送する

@ 部分がエスケープされた ```<a>``` で包まれているので、 filter out ができる RSS Feed 加工サービスとか使ってなんとかする(地獄)

もしくは cashtag とかで filter する

## 公開 RSS Feed を使ってるので Unlisted 以上の公開設定じゃないと転送できない

がんばれ
pugでmixinに複数のblockを渡す方法

正確には、blockではないのだけど。

# 結論
```mixin.pug
mixin Contents()
  block
  ul.Contents
    li.item.item0
      +content0
    li.item.item1
      +content1
    li.item.item2
      +content2
```
```index.pug
html
  head
  body
    +Contents
      mixin content0
        span.index0
          |コンテンツ0
      mixin content1
        span.index1
          |コンテンツ1
      mixin content2
        span.index2
          |コンテンツ2
```
```exported.html
<html>
  <head></head>
  <body>
    <ul class="Contents">
      <li class="item item0">
        <span class="index0">コンテンツ0</span>
      </li>
      <li class="item item1">
        <span class="index1">コンテンツ1</span>
      </li>
      <li class="item item2">
        <span class="index2">コンテンツ2</span>
      </li>
    </ul>
  </body>
</html>
```

# 仕組み
pugでは、mixin呼び出しの時に1つインデントを付けてコードを書くと、その内容をmixin内の``block``の部分に入れてくれる。
そこで、その``block``の中に、``mixin``渡すことで、呼び出されたmixin内で参照ができるようになる。

# 使いどころ
この例のように「3つのリストを表示する」ことが決まっているのにその内容が呼び出し箇所によって異なる場合に必要になる。例えばTabで切り替えるタイプのパネルだ。3画面分のHTMLを渡さなければいけないが、その枠組はmixin側に任せたいときなどに重宝する。


# 関連ページ
[Allow multiple blocks to be defined inside mixins and includes · Issue \#631 · pugjs/pug](https://github.com/pugjs/pug/issues/631)