OmniAICreator/Qiita-1.07M huggingface dataset:
PythonでXML(RSS)を生成する

# はじめに
PythonでRSS ver2を出力する必要があったのですが、その際に何度かコケたのでメモ。

Pythonはjsonと親和性が高いですが、XMLは扱いづらいように思います。
以下のようにいくつかライブラリはあるものの何かとやりたいことが実現できず。

* [feedgenerator](https://pypi.python.org/pypi/feedgenerator)  
→ google製で良さげに見えるが、`lastUpdate`など独自仕様のタグを生成できない
* [xml.etree.ElementTree](https://docs.python.jp/3/library/xml.etree.elementtree.html)  
→ タグ要素に日本語を入れると`ExpatError`が発生

# やり方
結局DOMオブジェクトからXMLに変換する方法で落ち着いた。

## 文字列のXMLテンプレートから生成する場合

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

from xml.dom.minidom import parseString

xml_template = "<rss version=\"2.0\">\
        <channel>\
            <title>title</title>\
            <link>link</link>\
            <description>desctiption</description>\
            <language>ja</language>\
        </channel></rss>"
dom = parseString(xml_template)

# channelノードを取得
channel = dom.getElementsByTagName("channel")[0]

# itemノードを生成
item = dom.createElement('item')
# channelノードに追加
channel.appendChild(item)

# サブノードの生成
subnode = dom.createElement('subnode')
subnode.appendChild(dom.createTextNode("日本語もOK"))
# サブノートにattributeとvalueを設定
subnode_attr = dom.createAttribute('key')
subnode_attr.value = 'value'
subnode.setAttributeNode(subnode_attr)
# itemノードにsubnodeノードを追加
item.appendChild(subnode)

# domをxmlに変換して整形
print (dom.toprettyxml())

```

出力

```xml
<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>title</title>
    <link>link</link>
    <description>desctiption</description>
    <language>ja</language>
    <item>
      <subnode key="value">日本語もOK</subnode>
    </item>
  </channel>
</rss>
```


## 1からXMLを生成する場合

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

import xml.dom.minidom

# DOMオブジェクトの生成
dom = xml.dom.minidom.Document()

# rootノードの生成と追加
root = dom.createElement('root')
dom.appendChild(root)

# サブノードの生成
subnode = dom.createElement('subnode')
subnode.appendChild(dom.createTextNode("日本語もOK"))
# サブノートにattributeとvalueを設定
subnode_attr = dom.createAttribute('key')
subnode_attr.value = 'value'
subnode.setAttributeNode(subnode_attr)
# itemノードにsubnodeノードを追加
root.appendChild(subnode)

# domをxmlに変換して整形
print (dom.toprettyxml())
```

出力

```xml
<?xml version="1.0"?>
<root>
  <subnode key="value">日本語もOK</subnode>
</root>
```

# まとめ
json最高

# Reference
* <http://symfoware.blog68.fc2.com/blog-entry-1256.html>
* <https://docs.python.jp/3/library/xml.dom.minidom.html>
* <http://d.hatena.ne.jp/suttanipaata/20110417/1303074257>
カラーコードのランダム生成で注意すること

JavaScriptでカラーコードをランダムに生成して表示するコードを書いたら、なんかやたらと白い。

```js
let r = Math.floor(Math.random() * 255).toString(16);
let g = Math.floor(Math.random() * 255).toString(16);
let b = Math.floor(Math.random() * 255).toString(16);
let color = '#' + r + g + b;
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/115996/3ef5955e-82b4-2b1a-0af9-5cf672f9fa87.png)

よくよく調べてみると、白くなっているところのカラーコードは`#412bf`のようになってました。
16進数に変換した結果が1桁である数値がrgbのいずれかに含まれている場合に、カラーコードの仕様を満たさず、白になってしまっていたようです。

以下のようにして解決。

```js
let r = ('0' + Math.floor(Math.random() * 255).toString(16)).slice(-2);
let g = ('0' + Math.floor(Math.random() * 255).toString(16)).slice(-2);
let b = ('0' + Math.floor(Math.random() * 255).toString(16)).slice(-2);
let color = '#' + r + g + b;
```

rgbの各値に0を頭につけてslice(-2)で後ろ2文字をとることで強制的に2桁にしています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/115996/22ea264b-b4a5-0fe3-0910-baeefc456236.png)

# rgbで書く方法
@yama-t 様からのコメントで以下のようにrgbの形式を使うと、桁揃えしなくてもいいという意見をいただきました(ありがとうございます！)。
テンプレートリテラルも使うとさらにすっきり書けるとのこと。

```js
let r = Math.floor(Math.random() * 255);
let g = Math.floor(Math.random() * 255);
let b = Math.floor(Math.random() * 255);
let color = `rgb(${r},${g},${b})`;
```
浮動小数点数警察24時

下記のような記事を見つけたので「動くな！浮動小数点数警察だ！」と叫んで乗り込んでみます。

- [Python3で巨大な浮動小数計算の結果が変だったので理由を調べてみた - paiza開発日誌](http://paiza.hatenablog.com/entry/2017/08/01/Python3%E3%81%A7%E5%B7%A8%E5%A4%A7%E3%81%AA%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E8%A8%88%E7%AE%97%E3%81%AE%E7%B5%90%E6%9E%9C%E3%81%8C%E5%A4%89%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7%E7%90%86)

とはいえ、そんなに大きなツッコミどころは無いとも思っています。

多くの人の感想の通り、浮動小数点数一般の話題であってPythonに特化した話題ではないとか、巨大だから変といわれると少しもにょる（「2^53を超える巨大な整数を浮動小数点数演算したら変」なら一発で内容がわかる）とか、言い回しがおかしいところはあるんですが、大きく誤解している部分は無いんじゃないかなと思いました。

ただ、一点だけ下記のような記述がありまして、

> 109999999999999995805696 0x1.74b1ca8ab05a8p+76 〜 この間はすべて 0x1.74b1ca8ab05a9p+76 〜 110000000000000012582912 0x1.74b1ca8ab05aap+76
その区間の幅は、2の24乗 で 16777216

このあたりが若干気になりました。この区間の幅を2^24と言っていいんでしょうか？詳しく見てみましょう。

|`.hex()`での浮動小数点数表現    | 同じ表現になる最小の整数       |       同じ表現になる最大の整数 |この区間に含まれる整数の個数|
|:-----------------|------------------:|------------------:|------------------:|
|0x1.74b1ca8ab05a8p+76|109999999999999979028480|109999999999999995805696|16777217|
|0x1.74b1ca8ab05a9p+76|109999999999999995805697|110000000000000012582911|16777215|
|0x1.74b1ca8ab05aap+76|110000000000000012582912|110000000000000029360128|16777217|

このように、同じ浮動小数点数表現になる区間の幅を考えると一定ではないことがわかります。だいたい2^24だからいいんだよ！という理解でもいいんですけど、せっかくここまで調べたんだからもう少しだけ深掘りしてもいいんじゃないでしょうか。

# 偶数丸め

この一見不思議な現象の犯人は浮動小数点数の丸め方式である「偶数丸め」です。これは銀行家丸めなどと呼ばれることもあるのですが、ざっくり言うと「表現できる数のど真ん中だったら偶数に丸める、それ以外は近い方に丸める」というものです。

要するに、0.5を整数に丸めるなら1ではなく0に丸める、1.5を丸めるなら2に丸める、ということになります。

いまは整数しか扱っていないのに「偶数に丸める」と言われても意味がわからないかもしれませんが、浮動小数点数の言葉で言い換えると「表現できる数のど真ん中だったら仮数部の最下位ビットが0である方に丸める」ということです。

109999999999999995805696を浮動小数点数に丸める場合、最近接の浮動小数点数は109999999999999987417088.0 (=0x1.74b1ca8ab05a8p+76)と110000000000000004194304.0 (=0x1.74b1ca8ab05a9p+76)で、どちらも同じ距離になります。この場合、前者が偶数なので、前者に丸められます。

つまり、偶数丸めでは偶数に丸められる整数が本来の区間の幅(?)より1個多くなり、奇数に丸められる整数は1個少なくなるので、上のように区間の幅が交互に増えたり減ったりするというわけです。

# 蛇足

~~多倍長整数警察は他の人にお任せします~~

浮動小数点数の16進表記は仮数部の最下位ビットが0か1か一目でわかって素晴らしいですね。もっと多くの言語で採用して欲しいものです。
cURL のインストール（gitでソースから）

CentOS内のcURLが古かったので新しいバージョンのものをインストールしたのでメモ

## 環境
|OS・ミドルウェア|バージョン|
|:--------------|:--------|
|OS|CentOS Linux release 7.3.1611 (Core)|

## 手順
1. 必要なライブラリをインストール

    ```shell-session
    # yum -y install autoconf automake libtool m4 groff #groffじゃなくてnroffとあったけど、nroffはリポジトリ探してもなかった気がする
    ```

2. git でソースをクローンする

    ```shell-session
    # git clone https://github.com/curl/curl.git
    ```

3. 以下のコマンドを実行する

    ```shell-session
    # ./buildconf
    # ./configure
    # make
    # make install #必要だったような気がする
    ```

## 参考資料
* [curl/GIT-INFO](https://github.com/curl/curl/blob/master/GIT-INFO)
* [how to install curl and libcurl](https://curl.haxx.se/docs/install.html)
初心者のrails環境構築（virtualbox+vagrant+ruby+rails→mac直接）

# この記事の目的

初心者がruby、railsの勉強をするにあたり、環境構築で詰まったログ。railsのバージョンは5。

* dotinstallを見てvirtualbox+vagrant+ruby+railsで構築しようとする
* 共有フォルダの設定で詰まる
* 知り合いのエンジニアに聞いた所そもそもvirtualboxは難易度高いし、できても遅い
* macに直接railsを入れる事に

# dotinstallを見てvirtualbox+vagrant+ruby+railsで構築しようとする

dotinstallを見てvirtualboxでcentOSをたてて共有フォルダを設定することで開発環境を作ろうとする。共有フォルダを設定しようとしたのはローカルでatomエディタで開発をしたいから。vimだと仮想環境で開発できるらしい。

http://dotinstall.com/lessons/basic_localdev_mac_v2/38507

これを元に下記のコマンドを打っていった

```
# OSを最新状態にアップデート（時間かかります）
sudo yum -y update

# スクリプトを入手するためのgitをインストール
sudo yum -y install git

# gitを使ってアプリケーション設定用のスクリプトをダウンロード
git clone https://github.com/dotinstallres/centos6.git

# centos6フォルダができるのでそちらに移動
cd centos6

# スクリプトを実行（時間かかります）
./run.sh

# もろもろの設定を反映
exec $SHELL -l
```

その後

http://qiita.com/SanoHiroshi/items/892a8516f4a6445e1e05

ここを見ながら

* vagrantのインストール
* virtualboxのインストール
* homebrewのインストール
* bundlerのインストール
* rubyのインストール
* railsのインストール

をしていった。

## homebrewの導入

rubyをインストールするにあたってrubyのバージョンを管理するためにhomebrewを導入。これはxcodeが必要でxcodeのバージョンが古かったためxcodeも入れ直し。無事homebrew導入。

## railsの導入にあたって

railsは5を使いたかったのでrubyを2.3.0以上にする必要があったのでこれもバージョンを指定して導入。

# 共有フォルダの設定について

共有フォルダ、つまりホストOSで編集できる共通のフォルダどこかなとかなり探したんですが下記にあった。ここがIPアドレスに設定されていたのでこの下にフォルダを作成。

ホストOS
MyVagrant/MyCentOS/

ゲストOSはvagrantを使用している場合、ユーザがvagrantなのでホームディレクトリとして「/home/vagrant」は始めから存在しています。 「/home/vagrant」フォルダ以下が新しく作成されたものです。

ゲストOS
/home/vagrant

ここで問題が発生してホストOSにアップしたものをブラウザで確認はできたがうまく同期されない。。。色々調べたがうまくいかなかったのとそもそもうまくいっても動作が遅く、開発できたもんじゃないという噂を聞き、方針を変更。

# macに直接開発環境をたてることに

macに入っているrubyは2.0.0ですごく古く、railsは2.3.0以上じゃないと動かないのでアップデート。

# localで開発したものをブラウザで確認する

railsで確認したものをブラウザで見たいときは

* ターミナルで「対象のフォルダ $ bundle exec rails s」をうってサーバを立ち上げる
* localhost:3000をURLにうつとブラウザに表示される。
AWS s3 CLIでlsはワイルドカードを使えない 

[状況]
lsから特定のファイル名パターンだけ取得しようとしたが失敗
`$aws s3 ls *2016*`
こういうのはエラーになる。

[対策]
CLIを使ってるのだからgrepすれば良い
`$aws s3 ls | grep '2016'`

以上解決
set up docker and run httpd in 2 vagrant machines. 4


#Run httpd by Dockerfile
create index.html

```:bash
vi index.html
```

```:html
<html>
Hello docker! docker!
</html>
```

We can run httpd by Dockerfile.

```:Dockerfile
FROM centos
MAINTAINER taro yamada <taro.yamada@bibo.com.ph>
# RUN: It executes when it is built
RUN yum -y install httpd
ADD ./index.html /var/www/html
EXPOSE 80
# CMD: It executes when it is running
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
```

```:bash
sudo docker build -t bibobibo/httpd .
```

You can run docker. host:8080 container:80

```:bash
sudo docker run -p 8080:80 -d bibobibo/httpd
```

You can see it from browser.
![スクリーンショット 2017-08-03 18.41.54.png](https://qiita-image-store.s3.amazonaws.com/0/39073/e3085ba5-2020-4a6f-8778-d90a471872b8.png "スクリーンショット 2017-08-03 18.41.54.png")


###We can push image to docker index.
please create an account here.
https://hub.docker.com/

```:bash
sudo docker login
```

```:shell-session
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:
Password: 
Login Succeeded
```

You can rename image
sudo docker tag "current imagename" "docker repository name"


```:bash
sudo docker tag bibobibo/httpd jojiurano/bibo
```

```:bash
sudo docker push jojiurano/bibo
```

```:shell-session
The push refers to a repository [docker.io/jojiurano/bibo]
b395726bdce1: Pushed 
6302e3c8d93a: Pushed 
99b28d9413e4: Pushed 
latest: digest: sha256:c39795ad32958fc4475f48099c6965b121f0e6833afa806d390fd9dd4732deec size: 948
```

![スクリーンショット 2017-08-02 18.38.30.png](https://qiita-image-store.s3.amazonaws.com/0/39073/b9a07c0c-eb4c-6a9c-b54f-832b8b7cd8cc.png "スクリーンショット 2017-08-02 18.38.30.png")


[前はこちら](http://qiita.com/joji/items/99b798e95f67fe6892e7 "前はこちら")
Hydrogenインストールメモ


少しハマってしまったので覚書しておく。

# Hydrogenとは

AtomでJupyter的なことができるやつ。尊い。

![hydrogen_demo.gif](https://qiita-image-store.s3.amazonaws.com/0/109348/c846ee57-0edf-602a-bcaa-a590e5a12ce6.gif "hydrogen_demo.gif")

# Hydrogenのインストール

ざっくりというと

1. Pythonインストール
2. Jupyterインストール
3. Hydrogenインストール
4. Kernel Specの設定

で普通はいけると思う。

# ハマったところ
## `No module named ipykernel_launcher`エラーが出る

これはHydrogenの設定のKernel Specsの部分、通常は説明に従って`jupyter kernelspec list --json`の出力をコピペすると思うが、その中の次の部分

```json
(前略)
    "python3": {
      (中略)
      "spec": {
        "argv": [
          "python",
(後略)
```

を、

```json
(前略)
    "python3": {
      (中略)
      "spec": {
        "argv": [
          "python3",
(後略)
```

と書き換えたら動くようになった。

## `No kernel for language python found`エラーが出る

別のマシンでやったらまた別のエラーが出た。

これについては[Hydrogen doesnt seem to detect python3 installation · Issue #583 · nteract/hydrogen · GitHub](https://github.com/nteract/hydrogen/issues/583)にあるように

```bash
python3 -m ipykernel install --user
```

で直った。jupyterのインストール自体何かミスってたのかもしれない。
あとからGitでcommitをキレイにするメモ

ライブラリを入れてみたけど、思ったとおりの動作をしなくて結局は別のものを使ったり、仕様が変わってそもそも使わないでもよくなったりとか。
誤字脱字を修正したり、Lintに怒られて動作に関係のない修正したりとか。
そんなどうでもいい履歴がチラホラあって汚いので、PullRequestするときには整えてからpushするためのメモ。
こういう気遣いがレビューを早く回すコツかと思うのです。

## つかうGitコマンド

コミットされていない変更したファイルの一覧を表示できます。

```
$ git status
```

ファイルをインデックスに登録できます。
うしろにファイル名を書けば、ファイル単位で登録できます。

```
$ git add
```

インデックスに追加されたファイルをコミットできます。
"..."のところはコミットコメントを書きます。分かりやすく書きましょう。

```
$ git commit -m "..."
```

コミットのログをファイル名付きで見られます。

```
$ git log --name-only
```

コミットのログをネットワーク図みたいに見られます。

```
$ git log --oneline --graph --decorate
```

コミットの履歴を編集できます。今回の大切なところです。

```
$ git rebase -i
```

コミットの履歴を編集をやめます。
コンフリクトしたら、迷わず使うと事故りません。

```
$ git rebase --abort
```

コミットの履歴を編集し終わったら、次の編集に進みます。
最後の編集だったら、完了まで処理が流れます。

```
$ git rebase --continue
```

## viのつかいかた
以下のことを覚えておけばなんとかなります。

|モード|コマンド|意味|
|:--|:--:|:--|
|コマンドモード|dd|一行切り取り|
|コマンドモード|p|カーソルの右側に貼り付け|
|入力モード|i|コマンドモード→入力モード切り替え|
|入力モード|esc|入力モード→コマンドモード切り替え|

修正が終わったら、 `:wq` で保存して終了。
（もし、保存したくないときは `:q` で終了）

## キレイにする

編集中のファイルとかがない状態にします。
安全のためにも、やり直せるように `git push` しておくといいと思います。
もし、うまく行かなかった場合にはやり直せるので。
そうしたら、以下のコマンドをたたきます。
（HEAD^のうしろの数字はいくつ前のコミットまで遡るかということ。今回の例だと5個前まで遡ります）

```
$ git rebase -i HEAD~5
```

下記のようなコミットメッセージが表示されます。

```
pick e33ef21 api連携を追加
pick 67f8b9d Cssの調整
pick 857067c api連携先の変更
pick cec94cc 画像の追加
pick 44335ac CssLintの対応

# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
```

このときの操作はviです。
コマンドは書いてある通りで、 `pick` だとそのままのコミットということです。
よく使うのは `squash` と `edit` だと思います。（というか自分はほとんどそれしか使わないです）

|コマンド|意味|
|:--|:--|
|s, squash|前のコミットにまとめる|
|e, edit|コミットを編集する|

こんな感じに編集したとする。
並べ替えたり、コミットをまとめたり。

```
pick e33ef21 api連携を追加
s 857067c api連携先の変更
pick 67f8b9d cssの調整
s 44335ac CssLintの対応
e cec94cc Componentと画像の追加
```

そうしたら、 `:wq` します。

コンフリクトしなければ、コミットをまとめるときのコメントをどうするか聞かれます。
ここもviで編集します。
もしコンフリクトしたなら、ヤバいので `git rebase --abort` して一旦落ち着きましょう。

で、 `edit` のところでrebaseが止まります。
ちょっと焦ると思いますが、ここで以下のコマンドをたたきます。

```
$ git reset HEAD^
```

これで、`edit` したところのコミットをなかったことにできます。
あとは `git add` して `git commit -m` をすることで、コミットを分けることができます。
コミットし終わったら `git rebase --continue` で続きをします。

先ほどの例で言うと、こんな感じになります。
こうするとキレイでレビュワーさんにも優しいと思うんです！

```
* d05bec6 api連携を追加
* a94b258 cssの調整
* 549ac93 Componentの追加
* e33ef21 画像の追加
```

で、既に `git push` をしてしまっていたら、 `git push -f` で強制的にリモートにプッシュをすれば、上書きされるので大丈夫です。

## もし、うまくできなかったらリセット！

1.リモートの最新を取ってきておいて・・

```
$ git fetch origin master
```

2.ローカルのmasterを、リモート追跡のmasterに強制的に合わせるだけ！

```
$ git reset --hard origin/master
```

※ 例はブランチ名をmasterにしてますが、そこはrebaseしようとしてたブランチ名に書き換えて使ってください。
wp-cli　コマンド一覧(随時追記)

# 概要

ついつい忘れがちなので自分で使ったことあるコマンドを随時追記していきます。

※全てのコマンドをまとめているわけではないので、当記事に書いていないコマンドについては公式ドキュメントをご覧ください。
[ **公式ドキュメント** ](https://make.wordpress.org/cli/)


# 共通引数

## --path

実行ディレクトリの指定。主にインストール先やインストールディレクトリを指定します。
省略した場合はデフォルトとしてカレント指定となります。

# コマンド

##wp core 

wordpress本体のダウンロードやインストール、アップデート等を行うコマンド

###download

Wordpress本体をインストール及び展開します。
[ **Document** ](https://developer.wordpress.org/cli/commands/core/download/)

|引数|概要|
|:---|:---|
|local|言語指定|
|version|バージョン指定|
|force|上書き|

```bash:command
wp core download \
--locale=ja \
--force　\
--version=4.4 \
--path=/var/www/html/wordpress
```

###config

Wordpressの設定ファイル(wp-config.php)を作成します。

|引数|概要|
|:---|:---|
|dbname|DB名|
|dbuser|DBユーザー|
|dbpass|DBユーザーパスワード|
|dbhost|DBホスト|
|dbprefix|DBテーブル接頭辞|


```bash:command
wp core config \
--dbname=sample_db \
--dbuser=db_user \
--dbpass=1234 \
--dbhost=db_host \
--dbprefix=sample_ \
--path=/var/www/html/wordpress
```

###install

Wordpressの初期設定を行います。
[ **Document** ](https://developer.wordpress.org/cli/commands/core/install/)


|引数|概要|
|:---|:---|
|title|サイト名|
|admin_user|サイト管理ユーザー|
|admin_password|サイト管理ユーザーパスワード|
|admin_email|サイト管理ユーザーメールアドレス|
|url|サイトURL|


```bash:command
wp core install \
--title=サンプルサイト \
--admin_user=wp_admin \
--admin_password=1234 \
--admin_email=admin@example.com \
--url=$http://sample \
--path=/var/www/html/wordpress
```

##wp db 

Databaseを操作するコマンド

###create

wp-config.phpのDB接続情報を元にDBを作成します。
[ **Document** ](https://developer.wordpress.org/cli/commands/db/create/)

```bash:command
wp db create　
```

##wp term

カテゴリ操作関連のコマンド

###create

カテゴリを新規作成します。
[ **Document** ](https://developer.wordpress.org/cli/commands/term/create/)

|引数|概要|
|:---|:---|
|category|カテゴリ名|
|slug|スラッグ|
|description|概要|


```bash:command
wp term create \
category Sample \
--slug=sample \
--description="サンプル" 
```

##wp rewrite

リライト操作関連のコマンド

###structure

パーマリンクの定義を更新します。
[ **Document** ](https://developer.wordpress.org/cli/commands/rewrite/structure/)

```bash:command
wp rewrite structure \
'/%category%/%year%/%monthnum%/%postname%/index.html' 
```

##wp plugin

プラグイン操作関連のコマンド

###install

プラグインをインストールします。
[ **Document** ](https://developer.wordpress.org/cli/commands/plugin/install/)

```bash:command
wp plugin install \
staticpress 
```

###active

プラグインを有効化します。
[ **Document** ](https://developer.wordpress.org/cli/commands/plugin/activate/)

```bash:command
wp plugin activate \
staticpress 
```

##wp theme

テーマ操作関連のコマンド

###install

プラグインをインストールします。
[ **Document** ](https://developer.wordpress.org/cli/commands/theme/install/)

```bash:command
wp theme install \
twentyseventeen.zip
```

###active

プラグインを有効化します。
[ **Document** ](https://developer.wordpress.org/cli/commands/theme/activate/)

```bash:command
wp theme activate \
twentyseventeen 
```
ログが消滅してしまうやってはいけないLog4Netの設定

# 起きたこと

担当しているプロジェクトでLog4Netを使っていたのですが、そこで起きた現象になります。
ある日こんな問い合わせが来ました。

**「ログが10MBを超えると消滅するんですけどこれどうなってるんです？」**

ど、どうなってるんです？って、そんなこと起きるんです…？

調査してみたところ次のようになっていました。

# 原因

まあ当然、設定の問題でした。
必要な箇所だけ抜き出すとこんな感じの設定になっていました。

```XML
<appender name="defaultlog" type="RollingFileAppender">
  <file value=".\Log" />
  <appendToFile value="true" />
  <param name="DatePattern" value='"_"yyyyMM".log"' />
  <param name="RollingStyle" value="Composite" />
  <param name="StaticLogFileName" value="false" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{yyyy-MM-dd,HH:mm:ss.fff},%level,%message%newline" />
  </layout>
</appender>
```

はい。
RollingStyleがCompositeなのに足りないものがありますね。

**MaxFileSize**と**MaxSizeRollBackups**が設定されていませんね。

MaxFileSizeは指定しない場合、デフォルトで**10MB**となります。
MaxSizeRollBackupsは指定しない場合、MaxFileSizeの容量を超えたときに**バックアップを作成せず新規ログファイルで今までのログファイルを上書きします。**

**つまり10MB分のログが消滅します。**

おそらくはデフォルトだと0になっているのだろうなと。
発生するのはRollingStyleがCompositeの場合、つまり日とファイルサイズでログの分割をしていた場合です。
今回はひと月分のログを同じファイルにため続ける設定になっていたので、**半月分のログが消滅しました。**

基本、この辺りは設定すると思うので、まあまず発生しない事柄だとは思いますが、皆様もお気を付けください…。

# 参考にしたドキュメント

https://logging.apache.org/log4net/log4net-1.2.13/release/sdk/log4net.Appender.RollingFileAppender.MaxFileSize.html
https://logging.apache.org/log4net/log4net-1.2.12/release/sdk/log4net.Appender.RollingFileAppender.MaxSizeRollBackups.html
[Pythonによる科学・技術計算] 放物運動のアニメーションを軌跡(locus)付きで描画, matplotlib

#はじめに

matplotlibのArtistAnimationメソッドを用いて，
放物運動を行う物体の運動を軌跡も付けながら表示する。
ここでは**軌跡部分と物体の運動部分の二つの絵を重ねて表示する方法**を用いた。
**誰もが考える単純で簡単な方法であるが，サッと可視化したいときには役に立つかもしれない。。**

***

#内容
**$y$方向への一様な重力場中の角度$\theta$方向への鉛直投げ上げ問題である。**

時刻 $t =0$のとき質点の位置を$(x_0,y_0)$， 初速度の大きさを$V_0$とすると，時刻$t$における質点の$x(t)$および$y(t)$座標は以下の通りになる。この質点の運動は放物線を描く。
$x(t) = x_0 + V_0 \  cos(\theta)$
$y(t)= y_0 + V_0 \ sin(\theta)-0.5\    \ g\  t^2$

本問題では  $V_0 = 100$ m/s, $(x_0, y_0)=(0, 0)$, $\theta=\pi/4$ (=45度)と設定して質点の運動を描画する。


***

#コード
```py3:locus.py
"""
軌跡付きの放物運動のアニメーション
Animation with a locus
"""

import matplotlib.pyplot as plt
%matplotlib nbagg  # Jupyter-notebookでアニメーションを表示する場合に付け加える
from matplotlib.animation import ArtistAnimation # アニメーション作成のためのメソッドをインポート
import numpy as np

fig = plt.figure()

anim = [] #アニメーション用に描くパラパラ図のデータを格納するためのリスト
tt = np.arange(0,15,0.5) # 描画するための時間設定: t=0から15までの0.5刻み。

x_all=[] # 全てのx位置のデータを格納するためのリスト
y_all=[] # 全てのy位置のデータを格納するためのリスト

#初期条件の設定
V0 =100 # 初速度の大きさ: 100 m/s
theta=np.pi/4
x0=0 # 初期位置: x＝０
y0=0 #初期位置: y = 0
g=9.8 # 重力定数 [m/s^2]

for t in tt:
    x= [V0*np.cos(theta)*t+x0]  # x(t)の記述
    y = [-( g/2)*t**2+V0*np.sin(theta)*t+y0] # y(t)の記述
    x_all.append(x[0]) # xの時々刻々データを格納
    y_all.append(y[0]) # yの時々刻々データを格納

    # 時刻tにおける質点と，時刻tに至るまでの運動の軌跡の二つの絵を作成し， アニメーション用のリストに格納する。
    im=plt.plot(x,y,'o', x_all,y_all, '--', color='red',markersize=10, linewidth = 2, aa=True)
    anim.append(im)


anim = ArtistAnimation(fig, anim) # アニメーション作成

# 描画のカスタマイズ
plt.xlabel('X',fontsize=18) # 
plt.ylabel('Y',fontsize=18)
plt.xlim(0, 1100)
plt.ylim(-10,300)
plt.hlines([0], 0, 2000, linestyles="-")  # y=0に線を描く。

fig.show() 
anim.save("t.gif", writer='imagemagick')   #アニメーションをt.gifという名前で保存し，gifアニメーションファイルを作成する。
```

***

#結果


![t.gif](https://qiita-image-store.s3.amazonaws.com/0/192457/8f728b79-3010-b921-63f6-76ca0512e7e6.gif)


斜め45度方向へ初速100m/sで投げた場合の質点の運動のアニメーションを軌跡付きで表示したもの。


***

##修正・変更ログ: 

2017年8月3日: **y(t)中の質量mを削除**した。[T_Shinaji](http://qiita.com/T_Shinaji)さま，ご指摘ありがとうございました！

2017年8月10日: anim.save("t.gif")→ **anim.save("t.gif", writer='imagemagick')**へと変更した。 [yoddy](http://qiita.com/yoddy)さま，ご指摘ありがとうございました！




***

#参考文献

ArtistAnimationについては，
chez_sugi 氏の[matplotlibでアニメーション](http://qiita.com/chez_sugi/items/93ff2efad50f16bc8c37) 
を参考にさせていただきました。
SourceTreeを使ったGitHubの基本的な使い方とGitHub Pagesで静的Webサイトを公開する手順


Gitはいまいち使い方が分からず敬遠していましたたが、GitHub Pages で静的なWebサイトを超簡単に作成できることを知り、思い切って使ってみたところ、簡単にできたので記しておきます。
サイト(コンテンツ)作成時間を除けば、公開するまで本当に約3分でできてしまいました。

<!-- 参考サイト：　 -->

##【前提】
####　　（インストール、アカウントの作成手順についてはここでは割愛）
　　　必要なソフト　　：Git、　SourceTree(Windows版)※1
　　　必要なアカウント：GitHub
　　
　　※1: SouceTreeはGitHubのGUI版クライアントで、今回はこれを使いましたが、
　　　　GitHub Desktop等を使っても似たような手順になります。


##【手順】
１．リモートリポジトリの作成・・・ブラウザ(GitHub)で

２．ローカルにコピー（Clone）
　　URLは、１．で作成したリポジトリのURL。

|  | Clone作成画面 |
|:-----------|:------------|
| 　　　       | ![キャプチャ画像](https://image.prntscr.com/image/dkkr10wDRci-595y-uzamw.jpeg "Clone") |
　　
３．別エディタで通常通りに編集し、保存

４．作業ツリーのファイルをIndexにステージする
　　基本は「全てインデックスに追加」をクリックでOK
　（gitコマンドの git add -u（変更されたファイルを追加する） に相当）
　　参考：[【Git】基本コマンド](http://qiita.com/konweb/items/621722f67fdd8f86a017 "【Git】基本コマンド")

|  | Indexにステージする画面 |
|:-----------|:------------|
| 　　　       | ![キャプチャ画像](https://image.prntscr.com/image/_PTGfeAXSvSi33P_3fLVxw.jpeg "Clone") |

５．コミットする
　　　http://prntscr.com/g3ddt9

６．プッシュする（→リモートリポジトリに反映される）
　　　http://prntscr.com/g3del8
　
７．【Webサイトとして公開したい場合のみ】ブラウザ(GitHub)から、Webサイトとしてホスティングする設定を行う
　　Setting →「GitHub Pages」の「Souce」を「master branch」にして「Save」をクリック
　　設定前の画面：http://prntscr.com/g3mrz3
　　設定後の画面：http://prntscr.com/g3mt63

以上が、
リモートリポジトリを作成し、ローカルリポジトリ(Clone)を作成し更新をコミット・プッシュし、それをGitHub Pagesで公開するまでの手順になります。
HTMLで簡単に折りたたみ表示するには（ただしIE11は除く）


　HTMLで簡単に折り畳み表示するには、Javascriptを使うしかないと思っていたが、HTML5からは detailsタグなるものができていて、それを使うと折りたたみ表示がとても簡単に作れるのでした・・・
（ただし、IE11では未サポートです）


[HTML5タグリファレンス（detailsタグ)](http://www.htmq.com/html5/details.shtml "HTML5タグリファレンス（detailsタグ)")
動画を回転させて保存 Swift3.0 AVfoundation

動画をアプリから端末に保存した時、こういう風に回転させた状態で保存したかったのですが、Swiftは言語がまだまだ新しい上に言語仕様の変更が一々早いのでインターネットによい情報が少なくて中々辛いものがあります。phpやffmpegを使えば簡単に実装できるのに...orz [小视频拍摄swift3.0](http://www.jianshu.com/p/00d25ec6fee1)さんマジありがとうございました、助かりました。

![on.gif](https://qiita-image-store.s3.amazonaws.com/0/135794/fc4f75a6-2e75-a09b-e523-01e72bb5e285.gif)

# 実装

`composition`の中で`preferredTransform`というメソッドを使えば動画を回転させることができました。

```swift

let videoCompositionTrack = comp.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)

```


```swift

do {
                
                try videoCompositionTrack.insertTimeRange(
                    CMTimeRangeMake(CMTimeMakeWithSeconds(Float64(videoStartPoint), 10), CMTimeMakeWithSeconds(Float64(videoEnddPoint), 10)),
                    of: videoAssetSourceTrack,
                    at: kCMTimeZero)

                //これ
                videoCompositionTrack.preferredTransform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2))

```



# ソース

動くソースをGitHubに上げておきます。
[GitHub](https://github.com/Ryosuke-Hujisawa/Video-rotation-swift3)


# 参照

[小视频拍摄swift3.0](http://www.jianshu.com/p/00d25ec6fee1)
ソースコードを読んでいると、三項演算子を短くしたものが出てきた

ソースコードを読んでいると、以下のようなコードにぶち当たりました。

```php
    public function read()
    {
        if ($this->_user !== null) {
            return $this->_user ?: null;
        }

        $this->_user = $this->_session->read($this->_config['key']) ?: false;

        return $this->_user ?: null;
    }
```
"?:　"　　　これってなんでしょう？
どうやら、三項演算子の、真の場合に評価する式が存在しないもののようです。
つまり、

```php
$this->_user ?: null;
```
の場合、"$this->_user"が存在しない場合は、nullを返すようです。
では、存在した場合は何を返すかというと、このコード見ていると、何も返さないように見えないですね。
"$this->_user"の内容を返すように見えます。
では、実験して見ます。
実行環境は、環境用意するのがめんどいので、以下の環境を使いました。

https://paiza.io/?locale=ja-jp

では、以下のようなソースコードを書いて見ます。

```php
<?php
// Here your code !

$flag = "hello";

echo $flag ?: "false";

$falseflag = false;

echo $falseflag ?: "false"

?>
```

実行結果は以下のようになります。

```
hellofalse
```

つまり、

```php
echo $flag ?: "falseです";
```
は、\$flagがfalse,0,"",nullの時は、"falseです"の結果を表示し、それ以外の\$flagに何か入っている時は、\$flagの内容を表示するようです。
三項演算子の変形パターンとして覚えていただければ幸いです。
Haskellで躓いた(躓いてる)ポイントまとめ #Haskell

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">まじTatsuki氏頼んだ<a href="https://t.co/BlT3lr6z0i">https://t.co/BlT3lr6z0i</a><a href="https://twitter.com/ttk_vim">@ttk_vim</a></p>&mdash; あいや は Haskellのコンペチ (@public_ai000ya) <a href="https://twitter.com/public_ai000ya/status/892673560434442240">2017年8月2日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

ということで頼まれたので纏めます.
この記事は

- Haskellで躓いた点
- Haskellで躓いている点
- Haskellで躓きやすいと思った点
- その他文句

辺りを纏めます.
順番も思い付くままに書きますので, 難易度等が前後する事があります.
解決策に関してを書くつもりはありません(一部は自分が理解した際に利用したリンク等を貼るかもしれません).
また, 現在進行系の物も含みますので, どなたか教えて頂けると泣いて喜びます[Twitterはここです](https://twitter.com/ttk_vim).
コメントや編集リクエストは自由に使って頂いて構いません. 是非後続の初心者の方の為に有意義なものに出来ればと思っています.

## 解決済み

- 高階関数が分からない
- 本は1冊終わったけど次やることが分からん
- 何から始めればいいかが分からない
- 部分関数こわい
- モナドって何
- 変数に再代入出来ないとか正気か？
- fold系が分からない
- unfoldがもっと分からない
- 型にIOが付いてしまうと泣きたくなる
- Stateが分からない
- doが怖い
- 関数型プログラミングって何
- ポイントフリースタイルこわい


## 現在進行形


- パーサーが理解し辛い
- GHCが分からない
- stackがもっと分からない
- cabalが更にもっと分からない
- モナドが分かったか分かってないかが分からない
- モナド変換子が分からない
- 「理解は出来てないけど使えるようにはなった」をいつまで放置して良いのか
- 関数をどれぐらい分割すれば良いか分からない
- typeとnewtypeが分からない
- UI関連の情報が少ない
- 特にTUI
- 文字列型が多い
- 結局圏論は必須なのかどうなのか
- インデントスタイルが「これかこれかこれが多いよ」的なのが無い(あったとして、情報が纏まってない)
- 関数の名前付けがネタ切れする
  - [プログラミングで変数名や関数名のネーミングに迷ったときに便利なカンニングペーパーまとめ](https://nelog.jp/programming-words)というものがあるそうです。 [@igrep](https://twitter.com/igrep)さん、ありがとうございます！！
- .と$の違いは分かるけど, いつのタイミングでどっちかの判断がし辛い
- 関数型プログラミングは分かるけど関数型プログラミングが出来てるかが分からん
- 言語拡張怖い
- 逆引き的なの欲しい
- キモいコードが出てきた時にお手上げ
- 見たことない演算子がいっぱい
- その時は理解できても, 次回必要になった時結局使えない
- 結局letは使わないべきなのか
- というか禁じ手一覧が欲しい
- 自分が書いているコードが関数型プログラミングをちゃんと出来ているかが分からない
- 自分のコードが汚くて嫌い
- 他人のコードが難しすぎて理解できず, 結局写経しても理解できない
- どのライブラリが良いのか分からん
- 写経ですら動かないサンプルコードが多い
- cabalで書かれても入れ方分からん
- Lazy IO怖い



以下思い付き次第追記します!

[Haskellで躓いた(躓いてる)ポイントまとめ への自分なりの回答](http://myuon-myon.hatenablog.com/entry/2017/08/03/030939)を書いて頂きました！！
[@myuon_myon](https://twitter.com/myuon_myon)さん、ありがとうございます！！
CentOS7.3 環境(Vagrant)に AWS S3 互換 Minio をインストールしてみる

# Minio って？
go言語で書かれたAWS S3 互換のオブジェクトストレージ。他にS3互換は「Google Cloud Storage, Ceph Object Gateway, Riak CS」とあるらしいけど Minio が導入するのは簡単でいいらしいということでインストールしてみた。　→　結果、簡単だったｗ

> [https://www.minio.io/](https://www.minio.io/)

# サーバとクライアントのインストール
go言語で書かれているのでモジュール１つ配置すれば終わり。って感じ。

## サーバインストール
サーバモジュールと、systemdスクリプトをダウンロードして配置する。

```
$ sudo curl https://dl.minio.io/server/minio/release/linux-amd64/minio -o /usr/local/bin/minio
$ sudo chmod +x /usr/local/bin/minio
$ sudo curl https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service -o /etc/systemd/system/minio.service
$ sudo useradd -s /sbin/nologin minio-user
```

## 保存先ディレクトリの作成

```
$ sudo mkdir -p /var/lib/minio
$ sudo chown minio-user:minio-user /var/lib/minio
```

## 設定ファイルを編集
```MINIO_ACCESS_KEY``` と ```MINIO_SECRET_KEY``` は、適当なセキュアな文字列を作成して設定しておけばok。

```text:/etc/default/minio
# Local export path.
MINIO_VOLUMES="/var/lib/minio/"

# Use if you want to run Minio on a custom port.
MINIO_OPTS="--address :9000"

# Access Key of the server.
MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE

# Secret key of the server.
MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

## Minioサービス定義と起動
起動に失敗した場合は、```/var/log/messages``` を参照すること。
※```sudo systemctl status minio``` コマンドでも確認できます。

```
$ sudo systemctl enable minio
$ sudo systemctl start minio
```

## 起動確認する
```sudo systemctl status minio``` コマンドでも確認できるが簡易Webが起動しているので ```http://127.0.0.1:9000``` で確認してみる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/44540/d25a6b96-470b-bddd-317e-181cf4cd3f7b.png)

okok

# AWS CLI を使う
Minio クライアントを使用してもよいが折角 AWS S3互換なので aws コマンドを使用するようインストールしてみる。

> [【手順】AWS CLIインストール（CentOS7）](http://qiita.com/takahashi-kazuki/items/a0b737a3eaa2c9d6304f)

## AWS CLI をインスト―ル
ちょ簡単やんｗ

```
$ sudo curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ sudo python get-pip.py
$ sudo pip install awscli
```

aws configure で設定

```
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: 
Default output format [None]: 
```

バケットを作成してlsしてみる

```
$ aws --endpoint-url http://localhost:9000 s3 mb s3://miniotest
make_bucket: miniotest
$ aws --endpoint-url http://localhost:9000 s3 ls
2017-08-03 03:46:03 miniotest
```

へえー簡単やん

# 参考にさせて頂いたサイト様

> [AWS S3互換 minioをCentOS7にインストール](http://qiita.com/uehatsu/items/1c00a84347c867b99ea0#minio%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%A8%E3%83%86%E3%82%B9%E3%83%88)
> [オブジェクトストレージ Minioで遊ぶ](http://masawada.hatenablog.jp/entry/2015/12/15/000000)
> [Minio導入手順(Ubuntu 16.04)](http://l-w-i.net/t/minio/0install_001.txt)
> [【手順】AWS CLIインストール（CentOS7）](http://qiita.com/takahashi-kazuki/items/a0b737a3eaa2c9d6304f)
MNISTを認識するニューラルネットワークの画像化

ニューラルネットワークによる手書き数字認識について、各ノードへの元画像の影響を視覚化します。

# アルゴリズム

【注】適当に思い付いたアルゴリズムです。どの程度正確に影響度が測れるかは未検証です。

比較の基準としてピクセルがすべて0のソースで各ノードの値を計算します。

評価対象とする画像を用意します。1ピクセルだけソースに入れて各ノードの値を計算して、すべて0のときと値を比較します。これをすべてのピクセルに対して行ったものを、ノードごとに特定のピクセルが与える影響とします。

これを画像化することで、視覚的に影響を見ることができます。

# 準備

『ゼロから作るDeep Learning』のサンプルを使います。

* https://github.com/oreilly-japan/deep-learning-from-scratch

初回実行時にMNIST（手書き数字のデータ）をダウンロードするようになっているので、MNISTを使用するスクリプトを実行しておきます。

```text
$ cd ch03
$ python neuralnet_mnist.py
Accuracy:0.9352
```

以下の2つのファイルを取り出します。

* dataset/mnist.pkl
* ch03/sample_weight.pkl

以下のスクリプトを実行すると、画像が生成されます。

* [mnist-nn.py](https://bitbucket.org/snippets/7shi/EA5py7)

# 画像例

ニューラルネットワークを計算して、途中のノードを取り出します。`sigmoid` 適用前後で画像はほとんど変化しないため `a1, a2` は捨てます。しかし後で示すように `softmax` 適用前後では大きく変化するため `a3` は拾います。

```py3
def predict(x):
    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    z3 = softmax(a3)
    return z1, z2, a3, z3
```

【追記 2017.08.26】 z1 は影響がピクセルごとに独立しているから良いのですが、z2 以降はピクセル間の影響があり、それを考慮していないことが判明しました。どのように修正するべきか検討中です。進展があれば追記する予定です。

すべて白にした画像を確認します。数値は `softmax` によって算出された確率を表します。

![見出し.png](https://qiita-image-store.s3.amazonaws.com/0/32057/587f516e-d637-ab56-ada2-a59a8a022240.png)
![white.png](https://qiita-image-store.s3.amazonaws.com/0/32057/98e92ec3-aa6c-e11d-3d92-cf669b0f47d3.png)

背景色（灰色）より明るければプラス、暗ければマイナスとなって、総合的にプラスが大きいものが確率が高くなります。プラスとマイナスは相殺するので、必ずしもはっきり形が分かるものが確率が高くなるとは限りません。`softmax` を通すとメリハリがなくなって何が何だか分からなくなります。

数字を確認します。すべて白の画像から数字の形にくり抜かれることが分かります。

![0.png](https://qiita-image-store.s3.amazonaws.com/0/32057/f642a94c-fca8-caf6-74b8-c54cb2291cc1.png)

![1.png](https://qiita-image-store.s3.amazonaws.com/0/32057/d483621e-7f47-9cba-ab7a-4f7d45c6c3ca.png)

![2.png](https://qiita-image-store.s3.amazonaws.com/0/32057/e80b4b9b-c25d-dac8-1087-e6df5bd3a3bb.png)

![3.png](https://qiita-image-store.s3.amazonaws.com/0/32057/22dfb736-5304-2beb-914f-9497fd95227a.png)

![4.png](https://qiita-image-store.s3.amazonaws.com/0/32057/4b0aba79-a178-796a-d1e6-46b41fc66a35.png)

![5.png](https://qiita-image-store.s3.amazonaws.com/0/32057/34533fbb-c7ba-0305-9f40-7e40b516679c.png)

![6.png](https://qiita-image-store.s3.amazonaws.com/0/32057/2e75949b-e701-cc52-3c6e-3d42573a19a1.png)

![7.png](https://qiita-image-store.s3.amazonaws.com/0/32057/e45fc656-e6b4-45bf-519d-82ca6c33549e.png)

![8.png](https://qiita-image-store.s3.amazonaws.com/0/32057/0007429a-6f30-c363-969a-bd4e1862f82d.png)

![9.png](https://qiita-image-store.s3.amazonaws.com/0/32057/90a8dd22-8a30-bc71-d8d1-658c99597e7e.png)

# 参考

Pythonの書き方を参考にさせていただきました。

* [NumPyのarrayとPILの変換 - white wheelsのメモ](http://d.hatena.ne.jp/white_wheels/20100322/p1)
* [Pythonでリストをflattenする方法まとめ - Soleil cou coupé](http://d.hatena.ne.jp/xef/20121027/p2)
C | datetime > ideoneのCで出力したUNIX timeをExcel上でyyyy/mm/dd hh:nn形式にする

http://ideone.com/VfZWIV

```c
#include <stdio.h>
#include <time.h>

time_t getElapsedSecond(int yyyy, int mm, int dd, int hh, int nn, int ss){
    struct tm workdt;
    workdt.tm_isdst = -1; // summer time flag
    workdt.tm_year = yyyy - 1900;
    workdt.tm_mon = mm - 1;
    workdt.tm_mday = dd;
    workdt.tm_hour = hh;
    workdt.tm_min = nn;
    workdt.tm_sec = ss;
    return mktime(&workdt);
}

int main(void) {
	time_t tnow = getElapsedSecond(2017, 8, 2, 18, 29, 00);
	printf("%ld\n", tnow);
	return 0;
}
```

```txt:run
1501698540
```

上記の値をEXCELに貼り、EXCEL timeに変換する。

参考: http://www5d.biglobe.ne.jp/~noocyte/Programming/GregorianAndJulianCalendars.html#UnixTimeToExcelTime

> 協定世界時のシリアル値：ExcelTimeUTC ＝ UnixTime / 86400 + 25569
日本標準時のシリアル値：ExcelTimeJST ＝ (UnixTime + 32400) / 86400 + 25569

使ったのは「協定世界時のシリアル値」の式 (JSTでなく)。

![2017-08-02_18h46_29.png](https://qiita-image-store.s3.amazonaws.com/0/32870/e8096047-ca10-768e-9b36-c0460793fca3.png)

UTCの時刻でなくJSTの時刻になる。

ideoneのロケールでずれが起きているのだろうか（詳細は追わない）。
set up docker and run httpd in 2 vagrant machines. 3


#Create image in container

interactive mode

```:bash
sudo docker run -i -t centos /bin/bash
```

```:bash
touch hello.txt
```

```:bash
exit
```

You can check it

```:bash
sudo docker ps -a
```

Create image 
27663a6f8fe8 is ID

```:bash
sudo docker commit 27663a6f8fe8 bibo/hello
```

You can check images.

```:bash
sudo docker images
```

```shell-session
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
bibo/hello          latest              eb521b0050ad        About a minute ago   193MB
```

You can login it again

```:bash
sudo docker run -i -t bibo/hello /bin/bash
```

check it again

```:bash
ls -la | grep hello
```

###You can use Dockerfile in Vagrant which is for automatic run

```:bash
vi Dockerfile
```

```:Dockerfile
FROM centos
MAINTAINER taro yamada <taro.yamada@bibo.com.ph>
# RUN: It executes when it is built
RUN echo "now building..."
# CMD: It executes when it is running
CMD ["echo", "now running..."]
```

```:bash
sudo docker build -t bibobibo/echo .
```

```shell-session
Sending build context to Docker daemon  8.704kB
Step 1/4 : FROM centos
 ---> 36540f359ca3
Step 2/4 : MAINTAINER taro yamada <taro.yamada@bibo.com.ph>
 ---> Running in 1006acc178a8
 ---> a4edca0b8521
Removing intermediate container 1006acc178a8
Step 3/4 : RUN echo "now building..."
 ---> Running in a697adda2cd7
now building...
 ---> 5fbf0850aedc
Removing intermediate container a697adda2cd7
Step 4/4 : CMD echo now running...
 ---> Running in e96059bd9d52
 ---> 131d7bfb63ed
Removing intermediate container e96059bd9d52
Successfully built 131d7bfb63ed
Successfully tagged bibobibo/echo:latest
```

You can see it.

```:bash
sudo docker images | grep bibobibo
```

You can run it

```:bash
sudo docker run bibobibo/echo
```

[前はこちら](http://qiita.com/joji/items/b544c7a3262de203f4ef "前はこちら") 
[続きはこちら](http://qiita.com/joji/items/30c80a41319abb4b757e "続きはこちら")
iOS端末を展示ディスプレイにするときにやるべき設定

iPadやiPhoneなどiOS端末を、店頭や展示会で動画を流したりアプリを見せたりなど、
展示用のディスプレイとして使うとき、勝手に操作されては困る場合があります。
そんなときのTips

## ホームボタンなどの物理ボタンを無効化する
`設定アプリ > 一般 > アクセシビリティ > アクセスガイド`

### アクセスガイドをONにする
<img src="https://qiita-image-store.s3.amazonaws.com/0/7132/59c94551-6009-701c-bda4-0d33608b3bf7.png" width="320" alt="" />

### パスコードの設定
アクセスガイドをOFFにするためのパスコードを設定します
<img src="https://qiita-image-store.s3.amazonaws.com/0/7132/207d4ac6-a1af-8d1c-3f55-d9445f8ea69f.png" width="320" alt="" />
触ってうっかり解除されないようにTouchIDは設定しないのがおすすめ

### アクセスガイドを実行する
実際に設定したいアプリを開いて、ホームボタンをトリプルクリックする
<img src="https://qiita-image-store.s3.amazonaws.com/0/7132/cd75603a-38a4-22b4-27a6-6e2ccfb88897.png" width="320" alt="" />
こんな画面になります

### オプション
<img src="https://qiita-image-store.s3.amazonaws.com/0/7132/f4a72134-6aae-ab97-534a-742d7dfe8523.png" width="320" alt="" />
これはタッチのみを許可しているところ
ホームボタン、電源ボタン、ボリュームボタンの物理ボタンと回転・キーボードは反応しない。
また、設定すれば画面の一部分のみタッチが反応しない、といった使い方も可能です

設定を反映するとボタンを押してもメッセージが表示されるだけになる
<img src="https://qiita-image-store.s3.amazonaws.com/0/7132/2c62c888-c5d4-53b9-fe19-44412aa2fcca.png" width="320" alt="" />

解除するときは、ホームボタン３回押して、パスコードを入れると解除できる

## スリープさせない設定
`設定アプリ > 画面表示と明るさ > 自動ロック`

### 自動ロックをなしに設定する
<img src="https://qiita-image-store.s3.amazonaws.com/0/7132/ce7d1bd7-d3fd-b89d-c3cf-11ef1a860648.png" width="320" alt="" />

## 通知を隠す
`設定アプリ > おやすみモード`
おやすみモードを設定すると通知が画面には表示されなくなります


## iPhoneを探す
万が一盗難されたときのことを考え、iPhoneを探すを設定します
また、セキュリティー的にもインストールするアプリや同期設定などは最小限にしましょう


## 電源に繋ぐ
電源大事。
Kerasで作ったモデルをCoreMLを使ってiOSで動かす

Keras + CoreMLで.mlmodelを作り、iOSで使ってみた。

とりあえずできた。
また詳細は後日追記していく。(かも)

#Pythonでモデルを作る
Bluetoothの電波強度を入力すると距離を返すモデルをKerasで作成。

#Swiftでアプリを作る
Bluetooth発信機(BLE Nano)と受信機(アプリが動いているiPhone)の距離をリアルタイムに表示。
CoreBluetoothでRSSIを取得してモデルに入力してます。


#デモ

デモ動画では途中でBLE Nanoを手で覆って電波強度を弱めてます。
一応見やすいようにprobabilityをProgressBarで可視化してます。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="pl" dir="ltr">CoreML_(:3」z)_ <a href="https://t.co/lFELCga3lX">pic.twitter.com/lFELCga3lX</a></p>&mdash; eburairu_qiita (@eburairu_qiita) <a href="https://twitter.com/eburairu_qiita/status/892677161651286016">2017年8月2日</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

#今後

単一方向の距離だけじゃなくて位置まで学習させてみたい。
屋内ならフィンガープリンティング的なのでできそう。
屋外でもできたらいいなぁ。
【しずおかアプリ部】活動ログ　第42回

![しずおかアプリ部2.jpg](https://qiita-image-store.s3.amazonaws.com/0/88105/ee800648-fa25-1829-20c3-bad9c2055d35.jpeg)

##■公式サイト##
[http://monolizm.com/shizuoka-app](http://monolizm.com/shizuoka-app)
「Slack」も利用しています。 shizuapp で検索し、ご参加ください。

##◾️参加申し込み##
しずおかアプリ部への参加申し込みは[こちら](https://shizuoka-app.connpass.com/)から

##■タイトル##
第４２回


##■開催日##
２０１７年７月２９日（土）　１６：００～１８：００


##■参加者##
１０名


##■活動内容（概要）##
・最近の話題の技術ニュース、告知
・菅原プレゼン「Unityはじめるよ　～初心者講座～」
・TEA BREAK　



##■活動内容（詳細）##

【実演・プレゼン】

**・最近の話題の技術ニュース、告知**
　・[アタリ、最新ゲーム機「Ataribox」の写真を公開](https://japan.cnet.com/article/35104331/?ref=yj)
　・2020年の小学校でのプログラム必修化の話
<hr>

**・菅原プレゼン「Unityはじめるよ　～初心者講座～」**
　　　プログラムの経験はあるけど、Unityは初心者という方向けの講座を行った。
　　　
　　　前半はUnityの概念と基本的な操作方法
　　　　・各画面の説明
　　　　・シーンビューでの操作方法やショートカットキー
　　　　・プロジェクトについて
　　　　・シーンについて
　　　　・ゲームオブジェクトについて
　　　　・コンポーネントについて


　　　後半はスクリプト中心の内容
　　　　・main関数が無い話
　　　　・スクリプトの実行順の話
　　　　・transformコンポーネントの制御方法
　　　　　移動、拡大縮小、および回転
　　　　　回転はQuaternionからVector3に変換してから制御
　　　　・Time.deltaTimeを使った可変フレームレート対応
　　　　・transform.forwardを使った前進方法

 
　　　時間内にすべて終わらなかったので、残りは資料をご確認ください。

　　　　[第42回_プレゼン資料(～Unity初心者講座～).pdf](http://monolizm.com/sab/pdf/第42回_プレゼン資料(～Unity初心者講座～).pdf)
　　



<hr>





**・TEA BREAK**
　Unityの話を中心に様々な話題が上がりました。

　今回は体験入部の方が４名と多かったですが、Unty初心者講座は如何でしたしょうか。
　プログラムの経験はある方向きだったので、少し難しかったでしょうか。
　初心者講座は需要が合いそうなので、不定期ですが、これからも開催したいと思います。
ELBに証明書をアップロードしたら「Server Certificate not found for the key」とエラーが出た


## TL;DR
掲題のエラーが起きたら一旦キャンセルして既存の証明書を確認してみましょう。


## 現象
[既存の ELB に SSL 証明書を追加しようとすると Server Certificate not found for the key というエラーになる件の解決方法](http://qiita.com/ynii/items/694d60614b98f73f780f)
と同様の現象です。

```
ポートのリスナーを作成できませんでした: 443。 Server Certificate not found for the key:xxxxxxxxxxxxxxxxxxx
```

というエラーが出ます。

## 対応
調べてみるとELBに対する新規SSL証明書の適用は`AWS CLI`からでしかできないという世論が多数でした。しかしCLIからは面倒だったのでもう一度深呼吸して設定項目を見返してみました。
行なったことを以下に記します。
以下の画像では現行のSSL証明書を`certification`,新しく追加する証明書を`new_certification`としています。


1. 一度キャンセルする
2. 再度SSL証明書の欄の変更ボタンを押す。
![スクリーンショット 2017-08-02 17.14.53.png](https://qiita-image-store.s3.amazonaws.com/0/79598/322a6a0c-dbfe-9e65-43f7-f59995e3d0e7.png "スクリーンショット 2017-08-02 17.14.53.png")

3.「AWS Identity and Access Management (IAM) から、既存の証明書を選択する」にチェックを入れる

![スクリーンショット 2017-08-02 17.48.13.png](https://qiita-image-store.s3.amazonaws.com/0/79598/831068dc-6de2-285a-2005-cdec97aedc5f.png "スクリーンショット 2017-08-02 17.48.13.png")

修了書のプルダウンを確認してみると`new_certification`が選択できるようになっていました！

## まとめ
同様の対応で対処できない場合もあると思いますが、一度既存の証明書を確認してみてくださいくコ:彡
codeigniter 日付毎に統計時のSQLの発行の仕方

統計画面等を作る際に、日付毎に何人のユーザーが登録したかを調べたい場合。

下記の様なテーブルがあったとする

table名：user
カラム名：created(ユニックスタイムで時間を保存してる)

```php:model
	$this->db->select("FROM_UNIXTIME(created,'%Y-%m-%d') as date,count(*) as count");
		$this->db->group_by("date");
		 $query = $this->db->get('user')->result_array();
		 return array_column($query,null,"date");

//　
//　date      count
// 2017-07-01  3
// 2017-07-02  1
// 2017-07-04  13
// 2017-07-05  5

```
###FROM_UNIXTIME
`FROM_UNIXTIME(created,'%Y-%m-%d')`ユニックスタイムを第二引数で指定した日付にフォーマとしてくれる。
後は下記の様にしてforeachで回せばOK。

`array_column`でkeyに日付を入れ直してるので使いやすい。


```php:contoller

$user_num = $this->Top_model->user_num();
		$data = [
			'user_num' => $user_num,
		];

		$this->load->view('top/index', $data);

```

```php:vews

<table class="table">
　　<tr>
　　　　<th>日付</th>
　　　　<th>登録人数</th>
　　</tr>
　　<?php
　　foreach ($user_num as $key => $value) {
　　?>
　　　　<tr>
　　　　　　<td><?= $key ?></td>
　　　　　　<td><?= $value['count'] ?></td>
　　　　</tr>
<?php } ?>
</table>
```
python3系で正規表現を使わずに文字列の複数の文字を置き換えたいとき

#python3系で文字列の複数の文字を置き換えたいとき

###使用する命令・関数・メソッド
- dict.fromkeys()
- str.maketrans()
- str.translate()

###サンプル
```py3:sample.py
lst = ['1', '2', '3']
delete_for_str = str.maketrans(dict.fromkeys(lst, "<ok>")) #第1引数: イテレータ, 第2引数: 置換後の文字列
oldstr = '1ho2ge3'
newstr = oldstr.translate(delete_for_str)
print(newstr)
#出力結果:
#<ok>ho<ok>ge<ok>
```
openFrameworks getPixels()の罠

#openFrameworks getPixels()の罠
サンプル動かそうとすると結構な割合でくらったエラー。

v0.8.4までとv0.9.xで、画像や動画のピクセル情報を取得する方法に変更がありました。

**~0.8.4 : getPixels()**
**0.9.x~ : getPixels().getData()**

これまでgetPixels()はunsigned char * を返していましたが、変更後はofPixels &を返します。
サンプルにはかなりの割合でunsigned char *にgetPixels()で取得したデータを突っ込んでるので、画像・動画関係でうまくいかないときは参考にしてください。

参照：[oF0.9.0 変更されたAPI 要点まとめ](http://qiita.com/2bbb/items/13f2e20760ec61e3ec89#getxxx)
Cognos Framework Manager 2つの表間で複数のリレーションが必要な場合の対処方法

##概要
Cognos Framework Managerで、2つの表間に複数のリレーションを張らないといけない場面に出くわす時があります。
具体的には以下のような場合で、ファクト表に「購入顧客」「発送先顧客」「請求先顧客」などの「顧客」のバリエーションを持った列があり、対する顧客表は一個しかない場合です。
同様に「購入日付」「発送日付」「支払い日付」と「日付表」でも起こりますね。
こういう場合に、素直に以下のようにリレーションを3つ張ってしまうと、レポートを実行した時に、間違った結果を出力してしまう原因になります。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/8df7b784-c20e-78ff-32d8-fd942686f814.png)

##対処方法
対処法としては、以下のように「顧客表」のショートカットを3つ作成し、それぞれ用途がわかるように（購入顧客）（発送先顧客）（請求先顧客）の名称をつけ、ファクト表と1本ずつリレーションを張ってください。
これで正常な値が出力されるようになるはずです。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/b00b6012-8e71-8b4b-09a9-9a44fb9e1cb1.png)

知っていれば、さらっと回避できる話なので、複数リレーションに出くわした時に、是非この記事を思い出して頂ければと。
set up docker and run httpd in 2 vagrant machines. 1


#overview
Macに2台のvagrant machineを用意して、１台でhttpdのimageを作成して、もう１台でそれを利用してhttpdを起動させたいと思います。

![docker1.png](https://qiita-image-store.s3.amazonaws.com/0/39073/b0356481-aea7-d34c-a00a-a17b13688186.png "docker1.png")


1. set up docker in vagrant_1
2. docker pull
3. docker run
4. docker push
5. set up vagrant_2
6. set up docker in vagrant_2
7. docker pull
8. docker run

###Set up Vagrant machine and centOS7

in your local Mac.

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

```:bash
mkdir docker_1
```

```:bash
cd docker_1
```

```:bash
vagrant init centos7_2
```

```:bash
vi Vagrantfile
```

Change IP address

```:Vagrantfile
config.vm.network "private_network", ip: "192.168.55.44"
```

```:bash
vagrant up
```

Login to virtual machine

```:bash
vagrant ssh
```

### Set up docker in CentOS7

check linux version

```:bash
cat /etc/redhat-release
#CentOS Linux release 7.2.1511 (Core)
```

yum update

```:bash
sudo yum -y update
```

```:bash
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
```

```:bash
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
```

```:bash
sudo yum-config-manager --enable docker-ce-edge
```

```:bash
sudo yum-config-manager --enable docker-ce-testing
```

```:bash
sudo yum makecache fast
```

```:bash
sudo yum install -y docker-ce
```

```:bash
sudo systemctl start docker
```

```:bash
sudo docker run hello-world
```

```shell-session
b04784fba78d: Pull complete 
Digest: sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
```

[続きはこちら](http://qiita.com/joji/items/b544c7a3262de203f4ef "続きはこちら")
Ruby の Symbol#to_proc に引数を渡す拡張

[ブログ記事](http://secret-garden.hatenablog.com/entry/2016/10/06/000000)からの転載です。

『`[1,2,16].map(&:to_s(16))` みたいにかきたいよねー』というやつ。

```ruby
class Symbol
	def call *args, &block
		proc { |myself|
			myself.send self, *args, &block
		}
	end
end

p [1, 2, 16].map(&:to_s.(16))
# => ["1", "2", "10"]
```

`#call` を定義してこういう風に書くことはできるけどもさて。

## [おまけ]

iolite を使用するとこういう風に書くことは出来ます。

```ruby
require "iolite"

include Iolite::Placeholders

p [1, 2, 16].map(&arg1.to_s(16))
# => ["1", "2", "10"]
```

## [元ネタ]

[このあたり](https://bugs.ruby-lang.org/issues/12115)
ripple関連記事の索引


# アドレス

[rippleのシークレットキーとアドレスを新規に作成する](http://qiita.com/you21979@github/items/ba1f6ccc9fcc3f168e9d)
[rippleのAccountFamilyとは？](http://qiita.com/you21979@github/items/ddcdd4de31fb96c26ad2)
[RippleでBIP44 HDWALLETを作成する](http://qiita.com/you21979@github/items/7ca77dbd6ffe8f001e9c)

# 送金

[rippleでXRPを送金をする](http://qiita.com/you21979@github/items/45b073bf8f22a5ed8a92)

# 入金

[rippleの入金確認手順](http://qiita.com/you21979@github/items/4730e569be0f565f8b67)
[rippleのpartial paymentとは？](http://qiita.com/you21979@github/items/176db26559ab32205079)
[rippleのdestination tagとは？](http://qiita.com/you21979@github/items/63d554dfd5a589e27624)

# その他

[ripple-libからrippledに接続する手順](http://qiita.com/you21979@github/items/2db11167aa952d29ce40)
[rippleのmaster keyとは](http://qiita.com/you21979@github/items/652cfb4772c8bec2fc4e)
[base58とは](http://qiita.com/you21979@github/items/b4c592a5f9110b5d73ce)
[XRP と IOU](http://qiita.com/you21979@github/items/8c97ef1674fed926d208)
[rippledの設置](https://qiita.com/you21979@github/items/21e1ce113573e2f41800)
Android Emulatorのhostsを書き換える方法

昨今Android Emulatorでhostsを書き換える手順メモ。

まず emulator を `-writable-system` で立ち上げる。これをやらないとこのあとに出て来るコマンドをいくら叩いてもできない。 emulator は android sdk内に入っている。

```
emulator -writable-system -netdelay none -netspeed full -avd Nexus_6_API_23
```

次にどのデバイスでsystemが使用されているのか確認。

```
cat /proc/mounts
```

自分の場合は下記のようになってた。 `/dev/block/vda` がデバイス。

```
:
/dev/block/vda /system ext4 ro,seclabel,relatime,data=ordered 0 0
:
```

最後にmountコマンドを実行

```
mount -o rw,remount -t ext4 /dev/block/vda /system
```

これで hostsファイルの書き換え準備が整った。

あとはhostsファイルを書き換えるだけ。

```
adb push (書き換えたhostsファイル)hosts /system/etc/hosts
```
Laravelでcomposer installしようとしたら、intlがないって言われた時

# 問題

macOS にてcomposer installができない！

```
  Problem 1
    - Installation request for jeremykendall/php-domain-parser 3.0.0 -> satisfiable by jeremykendall/php-domain-parser[3.0.0].
    - jeremykendall/php-domain-parser 3.0.0 requires ext-intl * -> the requested PHP extension intl is missing from your system.
  Problem 2
    - Installation request for league/uri 4.1.0 -> satisfiable by league/uri[4.1.0].
    - league/uri 4.1.0 requires ext-intl * -> the requested PHP extension intl is missing from your system.
```

のようなエラーがでてしまう。
確かに `brew install php56-intl` はしていて、入っている。

# 調査 & 解決まで

## phpにintlが入っているのか　
```bash
php -i | grep intl
```

何もでてこない。入ってない。

## pecl install
```
sudo pecl install intl
```

どうやらpeclというコマンドを使っていれるらしいが、これが動かない

## pecl を入れる

Mac OS X El Capitan に pear をインストール
http://qiita.com/applexco/items/f10e87477dc5d41cf751

上記を参考に入れていきます。

## ビルドできない
```
ERROR: `/tmp/pear/temp/intl/configure --with-icu-dir=DEFAULT' failed
```
icuのインストール
http://qiita.com/ms2sato/items/fd76d67fd5d63c3cb4a5

上記を参考に入れていきます。

```
brew install icu4c && brew link icu4c
```

## fatal error: 'php.h' file not found
うごごご。

```
xcode-select --install
...
pecl install intl
...
Build process completed successfully
Installing '/usr/lib/php/extensions/no-debug-non-zts-20131226/intl.so'
```

## php.iniに追記

```php.ini
extension=intl.so
```

# 解決
```
Package operations: 95 installs, 0 updates, 0 removals
  - Installing vlucas/phpdotenv (v1.1.1): Cloning 0cac554ce0 from cache
  ...
```