OmniAICreator/Qiita-1.07M huggingface dataset:
単体でも実行可能で動的リンクも可能な共有ライブラリを作成する

#TL;DR

libcのように実行もできる共有ライブラリを作成する方法まとめ

基本的には共有ライブラリのビルドに `-pie -rdynamic` を付加すれば良い。

```shell-session:libc実行結果例
$ /lib/x86_64-linux-gnu/libc-2.19.so 
GNU C Library (Ubuntu EGLIBC 2.19-0ubuntu6.6) stable release version 2.19, by Roland McGrath et al.
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.8.2.
Compiled on a Linux 3.13.11 system on 2015-02-25.
Available extensions:
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        Native POSIX Threads Library by Ulrich Drepper et al
        BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/eglibc/+bugs>.
```

# 作成方法

実行可能な共有ライブラリを作成する。デフォルトのエントリポイント(`_start`)から呼ばれる関数 `main` を定義する。

```c:excutable_shared_lib.c
#include <stdio.h>

extern int hoge(const char *s) {
    printf("hoge: %s\n", s);
}

int main(int argc, char const* argv[])
{
    printf("in %s %s:%d\n", __func__, __FILE__, __LINE__);
    return hoge("aaa");
}
```

動的リンクでも動作することを確認するようの適当な実行ファイルも作成する

```c:main.c
#include <stdio.h>

int main(int argc, char const* argv[])
{
    printf("in %s %s:%d\n", __func__, __FILE__, __LINE__);
    return hoge("main");
}
```

実行結果は以下のようになる。基本的な共有ライブラリの作成に `-pie -rdynamic` を付加する。

```shell-session:ビルドと実行結果
$ gcc -shared -fPIC -pie -rdynamic excutable_shared_lib.c -o libesl.so
$ ./libesl.so 
in main excutable_shared_lib.c:9
hoge: aaa

$ gcc main.c ./libesl.so
$ ldd a.out 
        linux-vdso.so.1 =>  (0x00007ffcf8a99000)
        ./libesl.so (0x00007f8cb92a1000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8cb8ec0000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f8cb94a5000)
$ ./a.out 
in main main.c:5
hoge: main
```

以上で実行可能な共有ライブラリと、それをリンクした実行バイナリが作成できた。

# 参考
[linux - Why and how are some shared libraries runnable, as though they are executables? - Unix & Linux Stack Exchange](http://unix.stackexchange.com/questions/223385/why-and-how-are-some-shared-libraries-runnable-as-though-they-are-executables)
[c - building a .so that is also an executable - Stack Overflow](http://stackoverflow.com/questions/1449987/building-a-so-that-is-also-an-executable/1451482#1451482)
[Make your own executable shared library on Linux | [Po]lentino's blog](https://polentino911.wordpress.com/2013/08/08/make-your-own-executable-shared-library-on-linux/)
[実行可能な共有ライブラリ - Okiraku Programming](http://d.hatena.ne.jp/NeoCat/20120627)
[PIE (位置独立実行形式) を作成する - bkブログ](http://0xcc.net/blog/archives/000109.html)
JavaScript開発環境

○emmetの便利ページ
- Emmetを始めるのに、とりあえずこれだけ覚えておけば大丈夫
  http://leko.jp/archives/442
- Cheat Sheet
  http://docs.emmet.io/cheat-sheet/

○Atomのインストール
- 今注目のテキストエディタ「Atom」の使い方と便利機能まとめ
https://blog.codecamp.jp/atom_utility
CakePHP開発に役に立つURLまとめ


こちらにCakePHP開発に必要な情報をまとめる。（追記予定）
個人てきなまとめですが、必要な方はどうぞ～～

#環境構築
Windowsでlinux環境を簡単に作れる
##Vagrantダウンロード
https://www.vagrantup.com/
基本使い方
http://techracho.bpsinc.jp/shibachan/2014_07_15/18146

##Composerダウンロード
php開発に必要なプラグインのバージョン管理
https://getcomposer.org/
基本使い方
https://kohkimakimoto.github.io/getcomposer.org_doc_jp/doc/01-basic-usage.html

##VirtualBoxダウンロード

https://www.virtualbox.org/

##VagrantとVirtualBoxを使ってローカル開発環境を構築する方法【初心者向け】
http://techacademy.jp/magazine/6304

##CakePHPダウンロード
日本語のマニュアルが充実している
http://cakephp.jp/
設置方法
http://book.cakephp.org/2.0/ja/installation.html

##git:ソース管理のため必須
ダウンロード
https://git-scm.com/downloads

##GIT入門
http://www.backlog.jp/git-guide/

##Github
https://github.com/
https://www.youtube.com/watch?v=fC_sI9NLYiw

##jenkins
オープンソース継続的インテグレーションツール
https://jenkins.io/
使い方
http://promamo.com/?p=3806

##PHPUnit
https://phpunit.de/manual/current/ja/installation.html

Windows上でVirtualBox+Vagrant+CentOSによる仮想環境構築
http://qiita.com/hiroyasu55/items/11a4c996b0c62450940f

##chef（構成管理）
設置方法及び使い方
http://kimoota.wiki.fc2.com/wiki/Chef%2F%E5%88%9D%E5%BF%83%E8%80%85%E5%90%91%E3%81%91Chef%E5%85%A5%E9%96%80%E8%AC%9B%E5%BA%A7

##Ansible （構成管理）
https://www.ansible.com/

##BehatはPHP製のBDDテストフレームワーク
http://docs.behat.org/en/v3.0/

CakeBehat
http://d.hatena.ne.jp/oppara/20131027/p1


#開発ツール
##PHPStorm
https://www.jetbrains.com/phpstorm/

使い方
http://www.karakaram.com/phpstorm-useful-tips2

Windows/Linux版PhpStormのキーボードショートカット
http://www.karakaram.com/phpstorm-keymap-windows

##Eclipse
https://eclipse.org/pdt/

#phpstorm便利使い方
http://www.karakaram.com/phpstorm-useful-tips2

#開発でphpstormとredmineを使ってる方は以下に連携方法があります
http://www.msng.info/archives/2014/12/phpstorm-tasks.php

#CakePHP開発
検索に使うSearchプラグイン
http://mawatari.jp/archives/introduction-of-cakedc-search-plugin-for-cakephp

#Apache設定
https://centossrv.com/apache.shtml

#MySQL設定
https://centossrv.com/mysql.shtml

#Windows用mysql管理ツール
https://www-jp.mysql.com/products/workbench/

検索の時にカレンダが必要な場合。
https://jqueryui.com/datepicker/
前回リリースしたタグからどれだけの PR をマージしたかのリストが欲しい

release-20160417.000000 タグから origin/master までの間に、origin/master にいくつか PR をマージしたとして、コマンドを実行すると以下の様なリストが出力される、そんな事がしたい。

```
- [#123](https://github.com/koshigoe/git-pr-merged/pull/123) hogehoge
- [#124](https://github.com/koshigoe/git-pr-merged/pull/124) fugafuga
- [#125](https://github.com/koshigoe/git-pr-merged/pull/125) mogumogu
```

[motemen/git-pr-release](https://github.com/motemen/git-pr-release) の事を思い浮かべたけど、PR を作りたいわけではないので用途が違いそう。
丁度良いツールが既にあるはずなんだけど見つけられないので、[motemen/git-pr-release](https://github.com/motemen/git-pr-release) を参考に適当にでっち上げる。
動くものは作れた。
学習教材がてら、勢いだけで Go 言語を使ってみたけど、土地勘なさすぎて泣けてくる。

- [koshigoe/git-pr-merged](https://github.com/koshigoe/git-pr-merged)

```
$ git config --global git-pr-merged.token <GitHub personal access token>
$ git pr-merged -p test-latest -r master
- [#1](https://github.com/koshigoe/git-pr-merged/pull/1) test a
- [#3](https://github.com/koshigoe/git-pr-merged/pull/3) 試験実装 ver 1
- [#4](https://github.com/koshigoe/git-pr-merged/pull/4) Get repository name from `git config remote.origin.url`.
- [#5](https://github.com/koshigoe/git-pr-merged/pull/5) Use cli package.
- [#6](https://github.com/koshigoe/git-pr-merged/pull/6) Get parameter from flag.
- [#7](https://github.com/koshigoe/git-pr-merged/pull/7) Sort by merged_at.
- [#8](https://github.com/koshigoe/git-pr-merged/pull/8) Use tmeplate.
- [#9](https://github.com/koshigoe/git-pr-merged/pull/9) Add option `--skip-remote-update`.
- [#10](https://github.com/koshigoe/git-pr-merged/pull/10) Fix template.
- [#11](https://github.com/koshigoe/git-pr-merged/pull/11) Fix default value of `--previous`.
```

絶対にちゃんとしたツール(方法)が既にあるはずなので、早く見つけ出したい。
自分用のLaTeXテンプレートを晒しておく

学部1年の頃からほそぼそと使い続け，自分のLaTeX環境がだいぶ固まってきたので，再構成して晒しておく([これ](https://www.npmjs.com/package/generator-latex-with-markdown))．もうM2以降で大きくLaTeX環境を変える事はないだろうし．

学部1年生や4年生等，新たにLaTeXを使い始める人の助けになれば．

# 目的
以下の点を考慮してLaTeX環境を構築した．

1. できるだけLaTeXを書かないで済む．
2. LaTeXを書かざるをえない場合にすぐLaTeXを書ける．
3. 諸々のコマンドラインツールを適宜組み込める．
4. 後からコミットごとの差分表示ができる．
5. 表に見えるファイルを汚さない．

の4点．1はLaTeXを描くのが面倒なため，一方でLaTeXの方が早い場面もあるので，2も考慮している．また，3は自分が`graphviz`を使ったり，その場で適当にスクリプトを書くことが多いために考慮した．4は変更箇所を他の人に見せる時に便利なので考慮している．
最後に，5は，`hoge.log`とかTeXが生成するファイルが表に見えるとtemrinal操作等の邪魔になるので，裏に隠したかった．

逆に考慮していないのは，

1. コマンドの自動補完の効きやすさ（基本的にmacroで短くして対処する）
2. 多人数で編集する事（好き放題できないし）
3. Windows/OS Xユーザ（動作確認できる環境がない）

あたり．
また，基本的にテキストエディタでLaTeX等を書く事を想定しているので，ShareLaTeX等使う人には使いづらいと思う．使ったこと無いからわからないけど．

# 概要
## 編集環境
![overview.png](https://qiita-image-store.s3.amazonaws.com/0/111070/8db25998-07fb-2062-0b1c-071e962004f0.png)

編集環境は上図の通り．
原則として，記述にmarkdownを，図にdotとsvgを使用し，この2つはPDFに変換する．また，UIの画像を出す時などはHTMLを`phantomjs`を使ってPDFに変換して使用する．また，LaTeXで書いたほうが早い場面は，LaTeXを直書きしたり(e.g. クラスファイルとか)，markdown内に数式を埋め込んだりする．
編集ツールは，テキストエディタとInkscape等を利用する事を想定している．

## ビルド環境
ビルドには`make`を利用．いくつかのビルドツールを検討したが，慣れとコマンドラインツールの呼び出しやすさを考えると`make`が最適との結論に達した．
ビルド高速化のための`make draft`，1LaTeXファイルにまとめるための`make assemble`，差分をとってpdf化する`pdf-diff.sh`を用意している．

# 使い方
レポジトリの[README](https://github.com/hiroakimikami/generator-latex-with-markdown)参照．
YeomanとPhantomjsを使っているのでNode.js必須．その他pandoc等に依存している．
PINE 64 ベンチマーク

#はじめに
Raspberry PI3ですら仕事が忙しくて触れていないのに、
KickStarterで注文していた事を忘れていたPINE64が届いた。
Raspberry PI3同様とりあえずベンチマークしてみた。

20/4/2016追記
Pine64はまだドライバが未成熟との公式報告がありました。
近々アップデートされるようなのでその後追加ベンチする予定。

#関連リンク(28/9/2016 Update)
[NanoPiNeo ベンチマーク](http://qiita.com/rimria/items/f0e5ca4dce920282a36d)

#Pine64とは
世界初の64bit CPUを載せて$19で提供すると言っていたプロジェクト。
世界初の座はRaspberryPI3に抜かされてしまったが安さでは負けていない。
またGigabitEthernetが付いているなど優秀な点もある。
スペックなどは以下から参照のこと。

Pine64公式
https://www.pine64.com/
今回は$19の1GB版を使用した。2GB版はまた後日届く予定。

Pine64 Wiki (ブートイメージなどはこちらから入手可能)
http://wiki.pine64.org/index.php/Main_Page

#使用環境
RaspberryPI2, 3 : Raspbian 2016-2-26
Pine64 1GB      : Ubuntu 20160403-1 Michael Larson版

#ベンチマーク
いつも通りUnixBench 5.1.3を動作してみる。
結果は以下の通り。
RaspberryPI2,およびRaspberryPI3のスコアは前回記事のものを使用。

| System Benchmarks Index Values   | RPi2 | RPi3 | Pine64 |
|---|---|---|---|
| Dhrystone 2 using register variables     |    1031.4  |   1375.1  | 520.0 |
| Double-Precision Whetstone               |     317.3  |    537.4  | 197.6 |
| Execl Throughput                         |     288.0  |    535.0  |  91.2 |
| File Copy 1024 bufsize 2000 maxblocks    |     295.8  |    600.0  | 264.9 |
| File Copy 256 bufsize 500 maxblocks      |     196.5  |    381.2  | 184.0 |
| File Copy 4096 bufsize 8000 maxblocks    |     545.0  |    987.8  | 469.7 |
| Pipe Throughput                          |     600.1  |    921.8  | 263.5 |
| Pipe-based Context Switching             |     305.2  |    524.4  | 147.3 |
| Process Creation                         |     211.2  |    421.0  |  96.0 |
| Shell Scripts (1 concurrent)             |     618.7  |   1092.5  | 451.5 |
| Shell Scripts (8 concurrent)             |     583.1  |    958.3  | 870.1 |
| System Call Overhead                     |    1111.6  |   1684.9  | 450.9 |
|---|---|---|---|
| System Benchmarks Index Score            |     435.3  |    750.8  | 268.7 |

#総評
・思っていたよりスコアが低い。
・CPUが非常に発熱している(60度程度)
　RaspberryPI3につけていたのと同型のヒートシンクでは冷却性能が足りないかも。
　性能についてはそもそも期待したほど性能がなかったのかもしれないが、
　まだRaspbianと比べてOSがこなれていないのかもしれない。

現状況では情報量等を含めると、やはりRaspberryPI3を購入したほうが良いだろう。
複数のTI SensorTag(BLEデバイス)を同時に使う

概要
----

複数のTI SensorTag(BLEデバイス)を同時に取り扱う方法です

コード全体は[gistにアップ](https://gist.github.com/ma2shita/586b28233e1e4943f4818f17da257c1f)しています。ここでは解説のみです

TI SensorTag([CC2541DK-Sensor](http://www.tij.co.jp/tool/jp/cc2541dk-sensor), [CC2650STK](http://www.tij.co.jp/tool/jp/cc2650stk))と[node-sensortag](https://github.com/sandeepmistry/node-sensortag)で検証しましたが、noble-deviceを使う場合全般において有効な方法だと思われます (未検証)


解説
----

ポイントは１点だけです

[SensorTag.discover](https://github.com/sandeepmistry/node-sensortag#one)で発見できたデバイスの[sensorTag.connectAndSetUp](https://github.com/sandeepmistry/node-sensortag#connect-and-set-up)において、完了時のコールバック内で再度[SensorTag.discover](https://github.com/sandeepmistry/node-sensortag#one)を開始

最小コード

```js
var onDiscover = function(sensorTag) {
  sensorTag.connectAndSetUp(function() {
    SensorTag.discover(onDiscover);
    ...
  });
};
// entrypoint
SensorTag.discover(onDiscover);
```

※[gistのコード](https://gist.github.com/ma2shita/586b28233e1e4943f4818f17da257c1f#file-multiple_sensortag-js-L50)では[async.series](https://github.com/caolan/async#seriestasks-callback)を使っているため若干違いますが、最小コードは上記のようになります

### 注意点 ###

[SensorTag.discoverAll](https://github.com/sandeepmistry/node-sensortag#all)を使ってもうまく行きません
SensorTag.discoverAllで見つかったデバイスは[connectAndSetUp](https://github.com/sandeepmistry/node-sensortag#connect-and-set-up)が動かない(※)ため、[enableIrTemperature](https://github.com/sandeepmistry/node-sensortag#connect-and-set-up)とかが実行できないからです

※原因はちゃんと調べてません、ゴメンナサイ

あとがき
-------

1台のPCでどのくらいBLEデバイスが接続できるか、ちょっと試してみますね
gcloud compute ssh でも tramp したい！

# Tramp Mode について
みなさんリモートマシンのファイルを直接編集したいときは何を使っていますか? 私は [Tramp Mode](https://www.emacswiki.org/emacs/TrampMode) を使っています．いつものEmacsでリモートのファイルが編集できて本当に便利．TrampModeを使い始めてから`emacs: command not found` でヨヨと泣き崩れる……なんてことはなくなりました．Tramp Modeがあって本当に良かった．

# gcloud compute ssh について
話は変わりますが，みなさんはGCEのインスタンスへsshでログインするときはどうしていますか? 私は `gcloud compute ssh <instance name>` を使っています．`<instance name>` だけでログインできて本当に便利．適切に設定されていれば鍵の自動配布もしてくれますから苦労がありません．gcloud コマンドがあって本当に良かった．

# さて
ここからが問題です．GCE で tramp-mode を使いたいときはどうすればいいのでしょうか．`gcloud compute ssh` は `ssh` のラッパコマンドで，裏でインスタンスのドメイン取得や鍵の選択などよしなにやってくれているわけですが，`tramp-mode` を使う時だってその仕組みに乗っかりたいわけです．

`tramp-mode` でファイルを開く際のパスを思い返してみますと， `/ssh:hostname:path` といった入力をすることと思います．となると当然気になるのは先頭の `ssh:` でして，少し調べると他にも `rsync` や `smb` など様々なバックエンドがサポートされていることがわかります．こうなってくると直感的に独自定義の方法が追加できそうですね．`gcloud compute ssh` の場合はそれ自体が `ssh` のラッパですから，ほとんどエイリアスみたいなものでいいはずです．それではやっていきましょう．

tramp-mode の ユーザマニュアル[^1]を開いてみますと，5.10 Using Non-Standard Methods という記述がありますからこれを読みます．すると help を開いて `v` キーを押下し，`tramp-methods` と入力して `RET` をキメろと言われますからその通りにします．

<img width="842" alt="Screen Shot 2016-04-17 at 16.44.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/30016/6bef3b7e-efba-ec0c-5ece-aae7f6ae64b0.png">

なにやら出てきました．良かったですね．適当によみつつスクロールしていきましょう．

<img width="864" alt="Screen Shot 2016-04-17 at 16.44.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/30016/9bf9ba52-2f6f-5bbc-89cd-8320cb03124a.png">


おやおや，なにやら参考になりそうな感じです．恥を忍んで申し上げますと，私はEmacs Lispが書けません．なので余計なことを考えないように意識を殺して適当にinit.elへコピペしてそれらしく編集してみます．

```el
(require 'tramp)
;; for gcloud ssh
(add-to-list 'tramp-methods
  '("gcssh"
    (tramp-login-program        "gcloud compute ssh")
    (tramp-login-args           (("%h")))
    (tramp-async-args           (("-q")))
    (tramp-remote-shell         "/bin/sh")
    (tramp-remote-shell-args    ("-c"))
    (tramp-gw-args              (("-o" "GlobalKnownHostsFile=/dev/null")
                                 ("-o" "UserKnownHostsFile=/dev/null")
                                 ("-o" "StrictHostKeyChecking=no")))
    (tramp-default-port         22)))
```

こんな感じになりました．この後適切な処置[^2]を施し `C-x f /gcssh:<instance name>` と入力するとあら不思議！ インスタンスのファイルを直接編集できるようになります．

# 課題感

default project の default zone ならこれで良いのですが，その辺りを指定する場合，つまり `gcloud compute ssh --project <project id> --zone <zone> <instance name>` みたいな指定で繋ぎたいときはどうしましょうね．どうしたらいいのでしょうか．教えて偉い人．

`config-ssh` を使えばいいのでは? という声もありますが，あれなんか ip 変わったとき追従できない気がしていて，ちゃんと試してないんですけどどういう挙動するのでしょう．気になってます．

[^1]: https://www.gnu.org/software/tramp/#External-methods
[^2]: 設定の再読み込みとか．gcloud コマンドのパスがうまく通ってないってパタンもあるとおもいますから，よしなにやってあげてください．
筋トレ大好きな文系女学生のJava入門_カプセル化の目的＆メリット

#はじめに
数日前から、プロが飲むプロテインを飲んでいるんですけど、プロテインってやっぱり重要 :sunglasses: ！！
アミノモト、、、あ、味の素ですね。のアミノバイタル・アミノプロテイン・レモン味を運動後直後に摂取しているんですが、なんと腹斜筋が成長して縦線綺麗にシャキーンと :star2: 見えてきました :notes: :notes: 

今回から数回に分けてカプセル化についでです。
独学でやってるので、「これはJavaやっていくにあたって役に立つ知識だぞ！！」というのがあれば、コメントして頂けるととても嬉しいです :heart: 


## :sparkling_heart:  :sparkling_heart: カプセル化の目的とメリット :sparkling_heart:  :sparkling_heart: 
Javaのカプセル化とは、フィールドへの読み書きやメソッドの呼び出しを制限する機能。
例えば、「SexyPoseメソッドは、MuscleGirlクラスからは呼び出せるけど、MuscleBoyクラスからは呼び出せない」や「このフィールドの内容は誰でも読めるけど、書き換えることはできない」といったことを実現する :grinning: :grinning:

大切なものに対するアクセスは不自由である方がよいということは、現実世界でも同様 :exclamation: :exclamation: 
例えば、銀行口座やクレジットカードの暗証番号、各国のトップしか入れない施設。
周りには「制限」が行われている例が多くある。
この例のように、情報へのアクセスや動作について、「誰に何を許すのか」を定めて制限することを、***アクセス制御***という。

フィールドやメソッドにアクセス制御をかけることにより、間違ったフィールド・メソッドの利用を防止し、原因箇所を特定しやすくする。それがJavaにおけるカプセル :exclamation: :exclamation: 化 




###アクセス制御されない恐ろしさ :goberserk: :broken_heart: 
では、アクセス制御について学ぶ前に・・・
「アクセス制御されないプログラムがどれほど危険なのか」を、ストーリーゲームの開発プロジェクトを例に考えてみる。
<dl>
<dt>設定</dt>
<dd>筋肉ボーイ :boy: はインスタンス化されるとHPが100になり、workOutでHPが減少</dd>
</dl>

```java
//アクセス制御されないプログラム
1 public class MuscleBoy{
2   int hp;
3   String name;
4   static int money;
5   
6   void run(){
7     System.out.println(this.name + "は、逃げた！");
8    }
9   void drink(){
10    System.out.println(this.name + "は、飲んでいる");
11   }
12  void workOut(){
13    this.hp -= 10;
14    System.out.println(this.name + "は、筋トレをした！");
15    System.out.println("−１０ポイントHPが減った！！");
16   }
17 }
```


では、MuscleBoyクラスを使ったゲームのテスト中に、「workOutを一度もしていないのに、筋肉ボーイのHPがー１００になっている」という大変な事態に遭遇したとする。
数万行もあるプログラムの不具合を徹夜で、調査したところ、Proteinクラスに問題が発覚 :grey_exclamation: :sweat_drops: 

```java
1 public class Protein{
2  void recover(MuscleBoy mb){
3    mb.hp -=  100;   //不具合
4  }
5 }
```

翌日、今度は「筋肉ボーイがworkOutを終了後、なぜか酔っ払ってしまった」という問題が見つかった。
また徹夜で調査したところ、「スポーツトレーナークラス」に不具合があった :triumph: :exclamation: :anger: 

```java

1 public class SportsTrainer{
2   void talk (MuscleBoy mb){
3     System.out.println("おつかれさん！" + mb.name );
4     System.out.println("今回の筋トレ疲れたじゃろ？");
5     System.out.ptintln("プロテイン摂取して、回復しといてな〜。では、次回のトレで会おう！");
6     mb.drunken();   //ここが不具合の原因！酔っ払ってしまった・・。
7  }
8}
```

開発者がうっかり、drink()をdrunken()と聞き間違えてしまったようだ・・。

上記のようなミスは、プログラムに以下のようなアクセス制御を含んでいれば事前に防げたはず。
・MuscleBoyクラス以外からはHPフィールドに値を代入できない
・drinkメソッドを呼べるのはMuscleBoyクラスだけ

カプセル化は、このようなアクセス制御を実現し、バグを未然に防ぐことができるのだ :wink: :v: :star2: :exclamation:
iOS:プロモーションコードで最終確認

Appleが開発者のために提供している仕組みとしてプロモーションコードというものがあります。
（***プロモーションコードの発行、取得方法についてはこの投稿では触れておりません***）
「iTunes Connect デベロッパガイド」
[プロモーションコードの提供](https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide_Jpn/Chapters/ProvidingPromoCodes.html)
こちらを読むと、***100個***のプロモーションコードが発行できるようです。

無料はもちろん、有料アプリにも使えるのでプロモーションコードを発行して特定の人に試してもらうことが可能です。
ただし、
***有効期間は生成日から4週間です。アプリケーションの新バージョンの提供が開始されるか、Appleとの契約が期限切れになると、無効になります。***
このように記載されているので気をつけないといけません。
送った方も気をつけないといけませんが、ずっとは使用できないので貰った方も気をつけないといけませんね。

これをプロモーション活動用に発行する他に別の使い方があるようです。
プロモーションコードの発行できる条件がiTunes Connect上でのバージョン状態
***「Ready for Sale」または「Pending Developer Release」である必要があります。***
と、書いてあります。
***「Ready for Sale」***:すでに配信中
***「Pending Developer Release」***:審査通っているのでリリースはデベロッパに任せる状態。

読み進めると
***プロモーションコードはアプリケーションの特定のバージョンに適用されるため、まだリリースされていないバージョンのプロモーションコードを使用すると、リリース前のバージョンがダウンロードされます。***
考え方を変えるとプロモーション用ではなく配信前に配信されるアプリがテストできます。

開発時にテストをしてリリース申請しているとは思いますが、いざ審査が通って「配信」と思った瞬間
「そういえばあの機能ってちゃんと動いているのかな？」など不安になることがあるかと思います。
そのような不安がある場合プロモーションコードを使って最終確認が行えます。

また、配信しているアプリに対してバージョンアップを行う際に起動などで不安があればその確認もできるかと思います。


私はまだ試してないので何かのタイミングで試してみようと思います。
【jQuery】スライダー系プラグイン slickの使用方法


## 公式サイト
http://kenwheeler.github.io/slick/

## cssとjsの読み込み
```html
<link rel="stylesheet" type="text/css" href="slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="slick/slick-theme.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript" src="slick/slick.min.js"></script>
```
デフォルトのスタイルからカスタマイズしたい場合はslick-theme.cssを入れる。
また、slick.min.jsはbodyの閉じタグの直前で読み込む。

## スライドさせるコンテンツを作成
```html
<div class="your-class">
  <div>コンテンツ1</div>
  <div>コンテンツ2</div>
  <div>コンテンツ3</div>
</div>
```
スライドさせる要素の親要素にclassまたはidを指定。

## スライドさせるスクリプトを記述
```js
$(function(){
  $('.your-class').slick({
    オプション: 値
  });
});
```
先ほど指定したclassまたはidに対してslickメソッドを記述する。
これだけでスライダーが完成。
ただし、デフォルトだと不格好なのでcssやオプションによるカスタマイズは必要。

## オプション
```js

$('.slider').slick({
  // アクセシビリティ。左右ボタンで画像の切り替えをできるかどうか
  accessibility: true,
  // 自動再生。trueで自動再生される。
  autoplay: false,
  // 自動再生で切り替えをする時間
  autoplaySpeed: 3000,
  // 自動再生や左右の矢印でスライドするスピード
  speed: 400,
  // 自動再生時にスライドのエリアにマウスオンで一時停止するかどうか
  pauseOnHover: true,
  // 自動再生時にドットにマウスオンで一時停止するかどうか
  pauseOnDotsHover: true,
  // 切り替えのアニメーション。ease,linear,ease-in,ease-out,ease-in-out
  cssEase: 'ease',
  // 画像下のドット（ページ送り）を表示
  dots: false,
  // ドットのclass名をつける
  dotsClass: 'dot-class',
  // ドラッグができるかどうか
  draggable: true,
  // 切り替え時のフェードイン設定。trueでon
  fade: false,
  // 左右の次へ、前へボタンを表示するかどうか
  arrows: true,
  // 無限スクロールにするかどうか。最後の画像の次は最初の画像が表示される。
  infinite: true,
  // 最初のスライダーの位置
  initialSlide: 0,
  // 画像の遅延表示。‘ondemand’or'progressive'
  lazyLoad: 'ondemand',
  // スライドのエリアにマウスオーバーしている間、自動再生を止めるかどうか。
  pauseOnHover: true
  // スライドのエリアに画像がいくつ表示されるかを指定
  slidesToShow: 4,
  // 一度にスライドする数
  slidesToScroll: 1,
  // タッチスワイプに対応するかどうか
  swipe: true,
  // 縦方向へのスライド
  vertical: false,
  // 表示中の画像を中央へ
  centerMode: true,
  // 中央のpadding
  centerPadding: '160px'
});
```

## 参考URL
[【jQuery】高機能で実装も簡単なスライダー-slick.jsの使い方-再生・停止ボタンも付けてみました](http://blog.mismithportfolio.com/web/20150917slickjs)
vimで特定の範囲を対象に置換

vimで置換をするとき、特定の範囲だけを対象にする場合にはマークを使います。
コマンドモードでmを押してから任意のキーを押すと、マークを付けることが出来ます。

`ma`と`mb` でマークを付けた後、その範囲の先頭に#を入れたい場合は以下のように行います。

```
:'a,'bs/^/#/g
```


現在位置までを対象としたい場合、以下のように`.`として指定します。
ついこちらを忘れて、上のようにやってしまうので、自分用メモもかねて。
```
:'a,.s/^/#/g
```


他の方法としては、対象としたい開始行の先頭で`Ctrl+v`でビジュアルモードに入り、
そのまま下に移動して範囲を選択して、`Shift+i`で挿入モードに変更して`#`を入力し、Escキーを2回押しても
同様のことが出来ます。
Githubを使いやすくする：issue/pull requestに関するヒント


### issueの一覧の下部に表示される `Pro Tip!` を集めてみた
![Issues.png](https://qiita-image-store.s3.amazonaws.com/0/71613/47143922-bef2-7fa1-b377-915f6f55f748.png)


* {{ 指定した日付 }}以内に更新された issue: <b>updated:>{{ 指定した日付 }}</b>

* 自分が作成した issue: <b>author:{{ username }}</b>

* 自分以外が作成した issue: <b>-author:{{ username }}</b>

* issue 上で誰かをメンションする: <b>@{{ username }}</b>

* 誰の担当でもない issue を表示: <b>no:assignee</b>

* ラベルのついてない issue を表示: <b>no:label<b/>

* マイルストーンを無視した結果を表示: <b>no:milestone</b>

* コメントが50以上の issue を表示: <b>>50<b>

* `g` `i` を押すことで、どの issue、pull request にいても issue一覧に戻る

* `g` `p` を押すことで、どの issue、pull request 画面にいても pull request一覧に戻る

※日付の指定は 2016-04-13 のようにハイフンで区切る
C++の定数について

今、画像処理研究などで、OpenCVを使ったりする関係で、C++について勉強をしている。
今回、その学習の過程で、C++で定数についての概念が、知らないことだったので、ここにメモをしておく

# C++の定数について

C++の定数は、２つの書き方がある。

* const
* constexpr(略：constant expression)

である。この、２つは挙動がはっきりと異なる

## const

この記法は、プログラム実行時に 「値を変更しないことを約束します」 という意味である。
よって、コンパイルの時点で不定であってもいい。結局、実行時に変更されなければいいのである。

## constexpr

この記法は、「コンパイルされるときに、評価されます」　という意味である。
言葉の通り、コンパイルされた時に、(a.outが作られる)時にすでに決定している。
また、当然ながら、プログラム実行時には変更できない。

## 例

以上の２つの定数表現についての例を示す

```cpp
#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

double square(double param){
  return param * param;
}

// sumは実引数を変更しない
double sum(const vector<double> &val) {
  return accumulate(val.begin(), val.end(), 0.0);
}

int main(void){
  const int dmv = 17;  // dmvは名前のついた定数
  int var = 17;        // varは定数では無い

  constexpr double max1 = 1.4 * square(dmv);   // square(17) が定数であれば、OK
  //constexpr double max2 = 1.4 * square(var); // エラー: varは定数ではない
  const double max3     = 1.4 * square(var);   //  OK,実行時に評価されることになる。 

  vector<double> v{1.2, 3.4, 5.6};  // vは定数ではない
  const double s1     = sum(v);     // OK,実行時に評価される
  //constexpr double s2 = sum(v);   // エラー： sum(v)は定数ではない
}
```

## constexprを使用するときのポイント

constexpr を関数で使用する場合、以下のように、出来るだけ簡単なものが良い

```cpp
constexpr double square(double param){
  return param * param;
}
```
pythonで print の出力結果を即時表示, 強制表示, フラッシュさせる（主にjupyter）

# 背景
重い処理の進捗確認のため、処理の途中に挟んだprint文がその時点で出力されずに、
処理が終わってからまとめて出てくることがある。

処理速度やらの観点で言えばこの挙動は正しいかもしれないが、
即時出してもらいたいときに、これでは困る。。

##**jupyterだけ？**
下記の例文では、jupyter(IPython notebook)だと起きるので、バッファ等の設定によるかも。
コンソールだとflushが指定なくとも、逐次出力されていた。


#解決方法
1. python3.3以降  ：強制的にprintの出力を吐き出す：flushオプションを使う！
2. python3.3より前と2.X：print後に sys.stdout.flush() を使う。(動作未確認)


##**print関数のオプションにflush=True をつける！(python3.3以降)**

``` python:python3.3以降
print("", flush=True)
```

##**print後に sys.stdout.flush() を使う(動作未確認)**
``` python:python3.3より前(下記コードはpython2系)
import sys
print ""
sys.stdout.flush()
```


**例: python3.4とjupyterにて**

``` python:jupyterで確認（コンソールではflush無しでも逐次出力された・・・）
import time
time.sleep(1)
print("processing A...")# ここでは表示されない・・・
time.sleep(1)
print("finish!")# 上のprintとまとめて出力される。。。

# flush を使うと・・・
time.sleep(1)
print("processing B(flush=True)", flush=True)# すぐに表示される！
time.sleep(1)
print("finish!", flush=True)

```
pwdHolder

現場でのパスワードを管理するために作りましたが、ブラウザにドラッグして使う為にセキュリティがヤバいのでポシャったやつです。自己責任でお使い下さい。てか使わないほうが良いです。


<html>
	<header>
		<title>pwdHolder</title>
	</header>
	<body>

		<table style="font-size:20px;line-height:120%;" border="1" bordercolor="#CEE3F6" rules="none">
			<tr>
				<td>・PC1ﾛｸﾞｲﾝ</td>
			</tr>
			<tr>
				<td>
					　<input type="text" size="14" value="PWD1" accesskey="1" style="color:#FFFFFF;" readonly> PWD
				</td>
			</tr>
			<tr>
				<td>　</td>
			</tr>
						
			<tr>
				<td>・PC2ﾛｸﾞｲﾝ</td>
			</tr>
			<tr>
				<td>
					　<input type="text" size="14" value="PWD2" accesskey="1" style="color:#FFFFFF;" readonly> PWD
				</td>
			</tr>
			<tr>
				<td>　</td>
			</tr>
			
			<tr>
				<td>・サイト1ﾛｸﾞｲﾝ</td>
			</tr>
			<tr>
				<td>
					　<input type="text" size="14" value="ID3" accesskey="1" style="color:#FFFFFF;" readonly> ID
				</td>
			</tr>
			<tr>
				<td>
					　<input type="text" size="14" value="PWD3" accesskey="1" style="color:#FFFFFF;" readonly> PWD
				</td>
			</tr>
			<tr>
				<td>　</td>
			</tr>
			
			<tr>
				<td>・サイト2ﾛｸﾞｲﾝ</td>
			</tr>
			<tr>
				<td>
					　<input type="text" size="14" value="ID4" accesskey="1" style="color:#FFFFFF;" readonly> ID
				</td>
			</tr>
			<tr>
				<td>
					　<input type="text" size="14" value="PWD4" accesskey="1" style="color:#FFFFFF;" readonly> PWD
				</td>
			</tr>
			<tr>
				<td>　</td>
			</tr>

			<tr>
				<td>・対覗き見用避難場所</td>
			</tr>
			<tr>
				<td>
					　<input type="text" size="14" value="志村うしろ！" accesskey="1" style="color:#FFFFFF;" readonly>
				</td>
			</tr><br>
		</table>
		<br>
		<br>

<!-- ---------------------------------------------------------- -->
		<table style="font-size:17px;color:#6E6E6E;" >
				<tr align="left">
					<th>　◆使い方</th>
				</tr>
				<tr align="left">
					<th>　　　●操作</th>
				</tr>
				<tr align="left">
					<td>　　　　　pwdHolder.htmlをダブルクリック。</td>
				</tr>
				<tr align="left">
					<td>　　　　　　＞以下のキー押下毎に枠を移動。</td>
				</tr>
				<tr align="left">
					<td>　　　　　　　　・win：alt+1</td>
				</tr>
				<tr align="left">
					<td>　　　　　　　　・mac：alt+ctrl+1 か tab</td>
				</tr>
				<tr align="left">
					<td>　　　　　　　　　　＞お求めのPWD枠選択時、</td>
				</tr>
				<tr align="left">
					<td>　　　　　　　　　　　＞コピー。</td>
				</tr>
				<tr align="left">
					<td>　　　　　　　　　　　　＞ログインしたいページへ移動し、</td>
				</tr>
				<tr align="left">
					<td>　　　　　　　　　　　　　＞ご希望の入力枠を選択し、</td>
				</tr>
				<tr align="left">
					<td>　　　　　　　　　　　　　　＞ペースト。</td>
				</tr>
		</table>
		<br>
		
		<table style="font-size:17px;color:#6E6E6E;" >
				<tr align="left">
					<th>　　　●データ編集</th>
				</tr>
				<tr align="left">
					<td>　　　　　pwdHolder.htmlをエディターで開く</td>
				</tr>
				<tr align="left">
					<td>　　　　　　＞inputタグのvalue値にご希望のPWDを入力。</td>
				</tr>
				<tr align="left">
					<td>　　　　　　　＞タグ間の文字列や、上下のtdタグ内文字列にご希望の概要名を入力</td>
				</tr>
				<tr align="left">
					<td>　　　　　　　　＞保存。</td>
				</tr>
		</table>
		<br>
	</body>
</html>
GNU ScreenでVimを閉じた後に画面をクリアしたい

## はじめに

最近、GNU Screenを使い始めました。

MacOS Xのデフォルトのscreenは256色に対応していないので、`brew install screen --enable-colors256`などでインストールして使っています。

今回紹介することはちょっとした問題点とその解決策です。

## 問題点と解決策

まず、問題点ですが、仕事でGit操作にVimのプラグインのfugitive.vimを使っているのですが、あれこれ操作した後Vimを閉じるとVimの画面が残ってしまい、毎回、Ctrlとlを押して画面をクリアしていました。

「gnu screen 画面 自動 クリア」などでグーグル検索してもなかなか解決策が見つからず、途方に暮れていました。

解決策は.screenrcにaltscreen onを追加することです。

```~/.screenrc
altscreen on
```

## 設定ファイル

参考になるかわかりませんが、下記のような設定で使っています。

```~/.screenrc
escape ^Tt
startup_message off
hardstatus alwayslastline "%w"
defscrollback 10000
altscreen on
```

## 使い方

ここでは最低限の操作を紹介します。

紹介した設定ファイルが使われていることを前提としています。

ちなみに、^Tはctrlとtを一緒に押すことを意味します。

まず、ターミナルでscreenコマンドを実行して、起動します。

画面がもう一枚欲しくなったら、^Tcを押して画面を追加します。

画面が要らなくなったら、^Tkを押して画面を削除します。

画面を切り替えたくなったら、^Tspace, ^Tp, ^Tnなどで画面を切り替えます。

^T|で画面を縦に分割して、^T^iで一方の画面に移動して、^Tcみたいな使い方もありかもしれません。

コピーしたくなったら、^T[でコピーモードに入り、Vimと同じ感じでカーソルを操作して、目的地に移動します。

テキストの選択の開始はスペースで、テキストの選択の確定もスペースです。

テキストの選択中もVimと同じ感じでカーソルを操作できます。

ペーストは^T]です。

## 参照URL

- [tips for screen -- screenの覚書](http://www.ayu.ics.keio.ac.jp/~mukai/tips/screen.html)
- [gistfile1.diff](https://gist.githubusercontent.com/yujinakayama/4608863/raw/75669072f227b82777df25f99ffd9657bd113847/gistfile1.diff)

以上
【jQuery】モーダル系プラグイン Remodalの使用方法


## 概要
軽量でシンプルなのでかなりカスタマイズしやすい！
今まで調べてきた中では一番おすすめ。
ただし、ギャラリーなどの機能はないので簡単なポップアップのみ使用したい用途で使用する。
また、デフォルトがいい感じなのでそれほど問題ないが、アニメーションのカスタマイズはほぼない。

## 公式サイト
http://vodkabears.github.io/remodal/

## htmlでの読み込み
```
<link rel="stylesheet" href="css/remodal.css">
<link rel="stylesheet" href="css/remodal-default-theme.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="js/remodal.js"></script>
```
remodal.cssはポップアップ時のオーバーレイなどが記述されている。
remodel-default-theme.cssにはアニメーションの処理などが記述されている。

## モーダルコンテンツを作りこむ
### インラインコンテンツの場合
```
<div class="remodal-bg"></div>
<div class="remodal" data-remodal-id="modal">
  <button data-remodal-action="close" class="remodal-close"></button>
  <h1>Remodal</h1>
  <p>
    Responsive, lightweight, fast, synchronized with CSS animations, fully customizable modal window plugin with declarative configuration and hash tracking.
  </p>
  <br>
  <button data-remodal-action="cancel" class="remodal-cancel">Cancel</button>
  <button data-remodal-action="confirm" class="remodal-confirm">OK</button>
</div>
```
### 画像のみの場合（内容としてはインラインコンテンツ）
``` 
<div class="remodal-bg"></div>
<div class="remodal" data-remodal-id="modal">
  <button data-remodal-action="close" class="remodal-close"></button>
  <img src="/images/modal.jpg" alt="">
</div>

```
id属性ではなくdata-remodal-id属性を使用することに注意。

## モーダル表示ボタンにidを紐付ける
```
<a href="#modal">Call the modal with data-remodal-id="modal"</a>
```
href属性にdata-remodal-id属性の値を紐付ける。

```
<a data-remodal-target="modal">Call the modal with data-remodal-id="modal"</a>	
```
またはdata-remodal-target属性でも可。
基本的にはこれでモーダル完成。

## オプション
data-remodal-options属性に設定する。

```
<div class="remodal" data-remodal-id="modal"
  data-remodal-options="hashTracking: false, closeOnOutsideClick: false">
.
.
.
</div>
```

|オプション|デフォルト|説明|
|:--|:--|:--|
|hashTracking|true|モーダルボタンでdata-remodal-target属性がhrefよりも優先になる|
|closeOnConfirm|true|confirmボタンをクリックするとモーダルが閉じる|
|closeOnCancel|true|cancelボタンをクリックするとモーダルが閉じる|
|closeOnEscape|true|escキーを押すとモーダルが閉じる|
|closeOnOutsideClick|true|モーダル外の背景をクリックするとモーダルが閉じる|
|modifier|''|モーダルウィンドウの背景要素に任意のクラス名を追加|

## イベント
```
$(document).on('opening', '.remodal', function () {
  console.log('Modal is opening');
});

$(document).on('opened', '.remodal', function () {
  console.log('Modal is opened');
});

$(document).on('closing', '.remodal', function (e) {

  // Reason: 'confirmation', 'cancellation'
  console.log('Modal is closing' + (e.reason ? ', reason: ' + e.reason : ''));
});

$(document).on('closed', '.remodal', function (e) {

  // Reason: 'confirmation', 'cancellation'
  console.log('Modal is closed' + (e.reason ? ', reason: ' + e.reason : ''));
});

$(document).on('confirmation', '.remodal', function () {
  console.log('Confirmation button is clicked');
});

$(document).on('cancellation', '.remodal', function () {
  console.log('Cancel button is clicked');
});
```
開いた時、閉じた時などにコールバック関数を走らせることが可能。
Facebookの Bots for Messenger の使いどころ

以下のようにrailsで実装してみて何に使えそうかなーと考えてみました。

http://qiita.com/wapa5pow/items/769d319b02c4434a8e6a

# 既存の電話システムの代わり

アマゾンでよく頼むのですが、再配達をお願いするときに、電話案内やWeb案内がおっくうで面倒です。Botのメッセンジャーベースでやれるのならば楽そうです。
例えば、QAコードを読み取ると、そこにIDが埋め込まれていて、メッセンジャーが再配達を案内してくれると手軽になります。

その他にも携帯電話の問い合わせやカスタマーサービスなど電話の自動応答はメッセンジャーのほうが視認性とスピードがよさそうです。

# マスター・ヨーダ
ユーザが何かしたいときに、そのドメインに対して何もしらないときへの手ほどきができそうだなと思いました。
既存のWebサイトだとマジョリティのユーザがやりたいことが、ボタン・リンクとしてWebページに乗っていますが、ボタンがありすぎて、迷ってしまいます。
その点、ボットにしておくと、選択肢を提示しながら徐々にユーザのニーズを明らかにしていき、適切なものが提示できそうです。

アキネーターもある意味似ている気がします。

# EC
Shop Springのデモでもあったように、ECの分野はありかなと思います。
ただ、サイトがあるならボットよりサイトを見たほうが効率がよさそうな気もします（ここらへん商品量に左右されそう）
ボットは集客＋アクティベーション（初期の離脱を防ぐ）目的で使いその後サイトに誘導させる形になりそうです。
その上で、ユーザのメッセージをログにとっておき、統計を取ることで、様々なユーザのニーズが明らかになるかもしれません。

# しゃべり相手

ユーザ専用のAIです。友達みたいな存在です。
Botに日々あったことを話していると、どんどん学習して、そのときどきにあったものをすすめてくれます。
例えば、年齢を知っていて、高校に入学したときには、おすすめの勉強アプリ・塾などをすすめてくれます。
妊娠したときには、月齢によって、さまざまな情報をおすすめしてくれます。
書いてて、これ、なかなかいい気がしてきました。
TypeScript アクセス修飾子

##アクセス修飾子

- public

クラス外からのアクセス可能。

- private

クラス内でのみアクセス可能。

- protected

継承クラス内でのみアクセス可能。

- static

静的なのでクラスで共有。


```TypeScript
//スーパークラス定義
class Super {
    constructor() {
        this.public(); //true
        this.private(); //true
        this.protected(); //true
        this.static(); //コンパイルエラー
    }
    public public(): boolean {
        return true;
    }
    private private(): boolean {
        return true;
    }
    protected protected(): boolean {
        return true;
    }
    static static(): boolean {
        return true;
    }
}

//サブクラス定義
class Sub extends Super {
    constructor() {
        super();
        this.public(); //true
        this.private(); //コンパイルエラー
        this.protected(); //true
        this.static(); //コンパイルエラー
    }
}

//インスタンス
let test = new Sub();
test.public(); //true
test.private(); //コンパイルエラー
test.protected(); //コンパイルエラー
test.static(); //コンパイルエラー

//クラス静的メンバ
Sub.public(); //コンパイルエラー
Sub.private(); //コンパイルエラー
Sub.protected(); //コンパイルエラー
Sub.static(); //true
```
Firefoxアドオンでアイドル検知

Firefoxアドオンでマウスイベントを取得して、5秒アイドル時間があればブラウザを閉じる。

```js:index.js
var system = require("sdk/system");
var { setTimeout, clearTimeout } = require('sdk/timers');

var tabs = require("sdk/tabs");
var pageMod = require("sdk/page-mod");
var data = require("sdk/self").data;
var to;

to = sto();
function sto(){
	return setTimeout(function(){
		system.exit();
	}, 5000);
}

tabs.on('ready',function(tab){
	detect_event(tab);
});

tabs.on('activate', function(tab) {
	detect_event(tab);
});

function detect_event(tab){
	worker = tab.attach({
		contentScriptFile: data.url("content-script.js")
	});
	worker.port.on("event",function(msg){
		console.log(msg);
		clearTimeout(to);
		to = sto();
	});
}
```

```js:content-script.js
//クリックイベントを取得し、アドオン側に通知
window.onclick = function() { 
	self.port.emit("event","click");
}
//ホイールイベントを取得し、アドオン側に通知
document.addEventListener("wheel",function(e){
	self.port.emit("event","wheel");
})
```
c++ builder XE4, 10.2 Tokyo > 0b0001でコンパイルエラー > E2293) が必要

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

ideoneで動作するコード
http://ideone.com/r0lfwl

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

#define ALERT1_CHECK (0b0001)
#define ALERT2_CHECK (0b0010)
#define ALERT3_CHECK (0b0100)
#define ALERT4_CHECK (0b1000)

int main(void) {
	uint8_t ret = 0;
	
	ret |= ALERT1_CHECK;
	ret |= ALERT2_CHECK;
	ret |= ALERT3_CHECK;
	ret |= ALERT4_CHECK;
	
	printf("%x\n", ret);
	return 0;
}
```


これをXE4で実装しようとすると
`ret |= ALERT1_CHECK;`の4行で

> E2293)が必要

となる。

`#define ALERT1_CHECK (0b0001)`
を
`#define ALERT1_CHECK (0x1)`
のように2進表記から16進表記にすると上記のエラーは発生しない。

2進表記の扱いが特殊なのだろうか?

時間がないので調査は保留。

<hr>
(追記 2016/08/17)

E2141 Declaration syntax error
というエラーも出た。
screen使ってみた


最近ようやく `screen` を使うようになりました。
なんとなく使いづらくて避けてたんですが、毎日毎日サーバに接続しなおしたり、
スリーブ状態に入る度にサーバから接続切れたりしてるのが本当に面倒だったのでついに使ってみました。

### 使い方 - 基礎的な部分のみ


* 起動
	* `screen`
* 新しく端末を開く
	* `[ctrl] + a + c`
* 端末一覧表示
	* `[ctrl] + a + w`
* 端末の移動
	* `[ctrl] + a + 数字`
* 端末を閉じる
	* `[ctrl] + a + k`
	* 閉じるときに本当に閉じるか聞かれる
* デタッチする(screenで開いた仮想端末をそのままで、ターミナルに戻る)
	* `[ctrl] + a + d`
* デタッチ状態で動いてる端末一覧を表示する
	* `screen -ls`
* デタッチ状態の仮想端末に戻る(アタッチ)
	* `screen -r PID`
* 開いてる端末に名前をつける
	* `[ctrl] + a + A`
WordPressのアカウント情報を忘れてしまった時の対処法(DBに接続できる場合)


WordPressのテスト環境を作って、適当にWordPressのアカウントを作成することが良くあります。(自分だけかもしれませんが)
そういう時はだいたいメールアドレスも適当な存在しないものを入力するので、パスワードを忘れた時はどうしようもなくなってしまいます。

そんな時はDBから直接パスワードを書き換えてしまいましょう。

- テーブル名: wp_user
- パスワード: user_pass

user_passはmd5関数を噛ませてやる必要があります。

```
UPDATE wp_users set user_pass = md5('your password') where ID = 1
```

下記の例では「12345678」がパスワードになります。
![mysql.png](https://qiita-image-store.s3.amazonaws.com/0/3962/e2cb6dd5-7553-5f73-7817-c80419da5547.png)

パスワードがmd5って危ないじゃん！って思うかもしれませんが、これは一時的なもので、ログインすればセキュアなものに変化しています。(どういう変換をしているかはコードを読んでいないので厳密にはわかりませんが。もし知っている方がいれば教えて下さい)
Reactのアップグレードの注意

客0.13.xバージョンに比べて、客新いReactバージョンはたくさん変更するところがあります。アップグレードの時、注意してください。改善ところはReactを使っているシステムを安定になって、パフォーマンスも高くなります。
#1. 変更するところ
**Render方法を変更する。**
古い：

    var React = require('react');
    React.render(<App />, node);

新しい：

    var ReactDOM = require('react-dom');
    ReactDOM.render(<App />, node);

**Nodeを検査する：**
古い：

    React.findDOMNode();

新しい：

    ReactDOM.findDOMNode();
**Nodeの中にNodeを検査する：**

古い：

    this.getDOMNode();

新しい：

    ReactDOM.findDOMNode(this);
#2. 改善ところ
**nullバリューがない。**
例：

    this.functioin.bind(null)
    return(
    <p>{text}<p>)

**Render方法の中に、InlineCssのルールを守る。**
例：

    margin:0 (X)
    margin:0px(O)

**HTMLのルールを守る。**

    <table>
    <td></td>
    </table>(X)
    
    <table>
    <tbody><td></td></tbody>
    </table>(0)
RuntimeError: CUDA environment is not correctly set up

# Chainer+GPUはMacで動くのだろうか

El CapitanでChainer＋GPUを動かそうとしたら```RuntimeError: CUDA environment is not correctly set up```と出た。

~~~
$ python MLP.py --gpu 0
Traceback (most recent call last):
  File "MLP.py", line 126, in <module>
    x_batch = cuda.to_gpu(x_batch)
  File "/usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/chainer/cuda.py", line 192, in to_gpu
    check_cuda_available()
  File "/usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/chainer/cuda.py", line 82, in check_cuda_available
    raise RuntimeError(msg)
RuntimeError: CUDA environment is not correctly set up
(see https://github.com/pfnet/chainer#installation).dlopen(/usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/cupy/core/core.so, 2): Library not loaded: @rpath/libcublas.7.5.dylib
  Referenced from: /usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/cupy/core/core.so
  Reason: image not found
~~~

## 環境
 - OS X 10.11.4 (El Capitan)
 - NVIDIA GeForce GT 750M
 - python 2.7.11
 - Chainer 1.8.0
 - CUDA 7.5

## 解決。動いた。

- パスを通してターミナル再起動

```~/.bashrc
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/usr/local/cuda/lib:$DYLD_LIBRARY_PATH
~~~

  

- SIP(Macのシステム保護機能)を無効化 

一旦システムを終了させ、```Command + R + 電源ボタン```で起動後、ターミナルで

~~~
$ csrutil disable
~~~
を実行

- Chainerをインストールしなおす

~~~
$ pip uninstall chainer
$ CUDA_PATH=/usr/local/cuda pip install chainer --no-cache-dir
~~~


### 参考
 - http://applech2.com/archives/46435268.html
 - https://github.com/pfnet/chainer/issues/780
Facebookの Bots for Messenger (Messenger Platform) でできることまとめ


いろいろいじっているので、備忘録のために出来る事をまとめます。
heroku + railsで実験してます。

# Bot For Messengerとは

Facebookページでメッセージを送ると、そのメッセージに応じてBotが対応できます。

たとえば、ECで使うなら、以下のように、Botがカテゴリを提示してくれて、ユーザがどのカテゴリか選ぶと、そのカテゴリの商品一覧をだせたりします。

![image](https://qiita-image-store.s3.amazonaws.com/0/30079/e5f6df1e-341b-2dbf-17f9-8b5a6b61454f.png)

# ユーザのボット用メッセンジャーへの動線

Web Pluginsや、Messenger Codesなどでユーザへの動線とできます。

Web PluginsはWebページにボタンを配置する方法です。モバイルユーザなら直接、Messengerアプリに遷移させることができます。

![image](https://qiita-image-store.s3.amazonaws.com/0/30079/3c1f9eac-c1e5-4a63-2a1a-54ca45ff398d.png)

Messenger Codesは以下のようなQRコードのようなものです。これをMessengerで読み込ませて動線としています。

![image](https://qiita-image-store.s3.amazonaws.com/0/30079/563117b7-fab7-7a97-638d-76a21ef2ab50.png)

その他に、IDでもユーザはボット用メッセンジャーを探すことができます。

# Welcome Screen

Bot用メッセンジャーにユーザがログインしたあと、最初のページでウェルカムスクリーン（初期画面）を設定することができます。

Welcome Screenには、通常のテキストメッセージと、Structured Messageというのを設定できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/30079/9f6cbf3f-59a0-4a6b-daf1-591a899930e7.png)

# ユーザからメッセージが来たときの処理

https://developers.facebook.com/docs/messenger-platform/webhook-reference

ユーザからメッセージがきたとき、開発者が設定した、URLにFacebookからwebhookが飛んできます。
Webhookは20秒以内に返答しなければならず、8時間以上、そのwebhookが失敗するばあいは、リクエストがこなくなります。

なお、ユーザのメッセージが複数まとめられて送られてくる可能性もあるので適切に対処しなければいけません。
ジョブキューなどに入れて実装するのがよさそうです。

# ユーザに送れるメッセージの種類

https://developers.facebook.com/docs/messenger-platform/send-api-reference

ユーザからのアクション(テキストを送る、画像を送る、ボタンが押されるなど)をフックとして、以下のメッセージが送れます。

* テキストメッセージ(Text Message)
* イメージ(Image (url), Image (file)): URLかファイルで送ります
* Structured Message - Button Template
* Structured Message - Generic Template

Structured Messageは以下のようになっており、画像とともにボタンが表示できます。
それぞれのボタンがクリックされたときに、Botがどのようなアクションをするかは、ボタンに設定された値をサーバが処理することにより行います。

![image](https://qiita-image-store.s3.amazonaws.com/0/30079/163b6612-622a-0eb9-f127-24b74151c94d.png)

Structured MessageのGeneric Templateを使うと、カルーセルのように、横にスライドさせれる複数のアイテムを並べる事ができます。

![image](https://qiita-image-store.s3.amazonaws.com/0/30079/0cbcac6b-b51c-25e1-48ad-f4ad786a2152.png)

なお、Generic Templateは以下の制限があります。

* タイトル: 45文字
* サブタイトル: 80文字
* ボタンのタイトル: 20文字
* ボタンの数: 最大3つ
* カルーセルのアイテム数: 最大10個
* 画像のアスペクト比: 横1.91 対 縦1

画像は上記の比で用意しないと見切れてしまいます。

# 実装メモ

* 開発していたときに、いちいちwebhookを試すためにデプロイするのは面倒なので、webhookをlocaltunnelでローカルにリクエストを飛ばしながらやるのがいいかなと思いました。


# 参考

* https://developers.facebook.com/docs/messenger-platform/product-overview
* https://developers.facebook.com/blog/post/2016/04/12/bots-for-messenger/
【jQuery】モーダル系プラグイン Magnific Popupの使用方法


## 概要
割とカスタマイズしやすいモーダル系プラグイン。
githubのスター数も多い。

## 公式サイト
http://dimsemenov.com/plugins/magnific-popup/

## htmlでの読み込み
```
<link rel="stylesheet" href="css/magnific-popup.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="js/jquery.magnific-popup.js"></script>
```

## a要素にclass属性を記述
```
<a class="test-popup-link" href="path-to-image.jpg">Open popup</a>
```

## jQueryを記述
```
$('.test-popup-link').magnificPopup({
  type: 'image'
  // other options
});
```
基本的にはこれだけでモーダルが起動するようになる。

### 親要素からデリゲートで指定
```html
<div class="parent-container">
  <a href="path-to-image-1.jpg">Open popup 1</a>
  <a href="path-to-image-2.jpg">Open popup 2</a>
  <a href="path-to-image-3.jpg">Open popup 3</a>
</div>
```

```js
$('.parent-container').magnificPopup({
  delegate: 'a', // child items selector, by clicking on it popup will open
  type: 'image'
  // other options
});
```
a要素ひとつひとつにクラスをつけず、親要素にクラスをつけて記述することも可能。
ギャラリーにしたい場合は`gallery:{enabled:true}`オプションをつける。

## コンテンツタイプ
image、iframe、inline、ajaxの4つのコンテンツタイプがある。
inlineがデフォルト。指定方法は以下の2つ。

### typeオプションで指定
`$('.image-link').magnificPopup({type:'image'})`

### mfp-TYPEというCSSクラスをボタンにつけて指定
```
<a class="mfp-image image-link">Open image</a>

$('.image-link').magnificPopup()
```

## コンテンツソースの指定方法
### href属性で指定
```
<a href="image-for-popup.jpg">Open image</a>
```

### data-mfp-src属性で指定
```
<a href="some-image.jpg" data-mfp-src="image-for-popup.jpg">Open image</a>
```
hrefにも指定がある場合、data-mfp-src属性が優先となる。

### itemsオプションで指定
```
$.magnificPopup.open({
  items: {
    src: 'some-image.jpg'
  },
  type: 'image'
});
```

## オプション
|オプション|デフォルト|説明|
|:--|:--|:--|
|disableOn|null|falseでモーダルが起動しなくなる。function内にwindowの幅でif指定する|
|closeOnContentClick|false|trueでコンテンツをクリックするとモーダルが閉じる|
|closeBtnInside|true|falseでウインドウの右上に閉じるボタンが配置される|
|alignTop|false|trueでモーダルが天地中央でなく上に揃う|
|fixedContentPos|auto|falseでモーダルを開いた後スクロールできる|
|closeMarkup|`<button title="%title%" type="button" class="mfp-close">&#215;</button>`|closeボタンの中身を変更できる。指定する際はダブルクオーテーションにや閉じタグのスラッシュの前にバックスラッシュを入れること。|

### closeMarkupの例
```
closeMarkup:"<button title=\"%title%\" type=\"button\" class=\"mfp-close\"><img src=\"../images/ico_close.png\"><\/button>"
```

## 参考URL
[現場で使えるレスポンシブ対応モーダル・ポップアップjQueryプラグイン「Magnific Popup」](http://mfl.revee.jp/blog/magnific-popup/)
OnsenUIでページ推移時にJSを発動する


Monacaのテンプレート「Onsen UI ナビ付きタブバー」で新規プロジェクトを作成しました。
ページ推移時にJSを発動させる方法です。

	function onDeviceReady() {
    	tabbar.on('postchange', function(e) {
	        //Home
	        myNavigator.on('postpush', function(e) {
	        	console.log('Home')
	        });
	        
	        var page = e.index;
	        if(page==1){
	            console.log('page1');
	            //page1の中でpushPage
	            mySchedule.on('postpush', function(e) {
	                console.log('page1-1');
	            });
	        }else if(page==2){
	            console.log('page2');
	        }
	        
	    });
    
	}//onDeviceReady
	
	var event = typeof cordova === 'undefined' ? 
	                              'DOMContentLoaded' : 'deviceready';
	document.addEventListener(event, onDeviceReady, false);
GHCでコンパイルするプログラムでヒープメモリサイズを制限する

# モチベーション

Haskell(GHC)プログラムで誤った再帰関数を書いて無限ループさせると多くの場合、サンクも無限に発生する。サンクはヒープに積まれ、そしてデフォルトでヒープのサイズ上限はない(ghc 7.10.3時点)ので、あっと言う間にシステムのメモリを食いつぶししてしまい、非常に危険である。


# ヒープメモリサイズに上限を設けるには

RTSオプションを使う。

    $ ghc -rtsopts Main.hs
    $ ./Main +RTS -M64m

あるいは環境変数`GHCRTS`も食ってくれる。

    $ GHCRTS="-M64m" ./Main

注意点:

- `-rtsopts`をつけてリンクしておかないと実行時にRTSオプションを食ってくれない。リンク時にRTSオプションを設定しておくには

        $ ghc -with-rtsopts="-M64m" Main.hs

    とする。

- `runghc`では環境変数`GHCRTS`を使う方法のみが有効らしい http://stackoverflow.com/questions/29339643/how-can-i-pass-rts-options-to-runghc

# 参考

- [debugging - Is there a way to limit the memory, ghci can have? - Stack Overflow](http://stackoverflow.com/questions/3766656/is-there-a-way-to-limit-the-memory-ghci-can-have)
- [4.17. Running a compiled program](https://downloads.haskell.org/~ghc/7.10.1/docs/html/users_guide/runtime-control.html)
秘密鍵(private_key)から公開鍵(public_key)を作成する方法


間違って公開鍵を消してしまうことがよくあるのでメモ
秘密鍵から公開鍵を作成することができます。

※公開鍵から秘密鍵は作成できません

```
# id_rsaが秘密鍵 id_rsa.pubが作成する公開鍵
ssh-keygen -yf id_rsa > id_rsa.pub
```

-f: 出力ファイル名の指定
-y: OpenSSH形式の秘密鍵から公開鍵を標準出力に表示
Atomのpackage-generatorがデフォルトでES6を使っている

#発端

久しぶりにAtomを本格的にエディタとして使おう、自分でパッケージを作ろうと思ってドキュメントを読み込みました。いよいよCoffeeScriptを覚えなきゃな、と思っていた矢先、驚きました。ドキュメント（`http://flight-manual.atom.io`）通りにコマンドパレットからpackage-generatorを呼び出したところ、できたのはES6のテンプレートだったからです。`use babel`してました。

#少し調べてみるがいつからなのか不明
AtomといえばCoffeeScript、というイメージがあったためそれがデフォルトでES6へ、という流れは大きな転換だな、と感じて、どの時点からなんだろうと思って調べてみたのですが、その手のアナウンスが見つからないのです（少なくともForumには頻繁に話題が上がっていたようです）。そもそも公式ドキュメントはすべてCoffeeScriptのままです。めちゃめちゃ最近のことなのかな、などと想像。

#ソースコードの履歴を見た方が早い
ということで、見つけました。2015/11/23に、package-generatorパッケージに仕様が追加され、テンプレート作成時にcoffeescript/javascriptどちらで作成するのかを設定可能になっています。そして現在（ここが大事だと感じるのですが）、デフォルトはjavascriptになっています。
https://github.com/atom/package-generator/commit/aeed190bbf28483bf8811957aba0b726f5c249f1

#これを大きな転換と決めつけるのはまだ早い？
このコミットより以前からパッケージ作成にES6（というかJS）が使えたのかどうか、私は知りませんし、公式なアナウンスも見つかりません（でももう5ヶ月経っていますよね……）。個人的にはES6を書きたいと思っていたところだったので渡りに船なのですが、CoffeeScriptはこのまま少しずつ表舞台からは姿を消すことになるのでしょうか……？？
Unity5ハコスコVR開発 注視点のポインターとGameObjectが重なった時ごにょごにょする (Google Cardboard SDK for Unity) 

最近VR開発を始めまして、その日々を綴ります。
今回は注視点のポインター表示とGameObjectと重なった時に何か処理をする方法メモです。


追記:
良い記事がすでにありました！
Google Cardboard SDK for Unity v0.6の３Dサウンド (Spatial Audio)と視線マーカー
http://qiita.com/yanosen_jp/items/0d23fb3d59673c5aa153



<img width="566" alt="スクリーンショット 2016-04-17 11.44.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/bb95d776-fa57-a48e-9e95-e7f91debf9f4.png">

サンプルを参考に我流なので、
アカンだろというところがあったらコメんとください。
セットアップ編を済ませた状態でお願いします。

セットアップ編はこちら
▫️Unity5ハコスコVR開発 セットアップ編
http://qiita.com/39_isao/items/a4af0b97cb0a95b35d8d

# 方法

1.Main CameraにPhysics Raycasterコンポーネントをアタッチします。

<img width="609" alt="スクリーンショット 2016-04-17 11.54.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/0604648e-9545-9f6f-6b17-e1789d6cdb7c.png">




2.Main Cameraの子オブジェクトとして、空のGameObjectを作ります。名前を「Cardbord Reticle」とでもしときます。
作成したCardbord Reticleに、
MeshRendererコンポーネント、CardbordReticle.cs、Resources/UI/の中にあるCardboardReticleMaterialをアタッチします。完了図⇩

<img width="604" alt="スクリーンショット 2016-04-17 11.55.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/62be9d5d-f70c-af8e-15b2-2ab8de2d4dfa.png">

※CardbordReticleの色を変更してます。

3、EventSystemを追加。Touch Input Moduleコンポーネント、GazeInputMOzule.csをアタッチ。完了図⇩
<img width="898" alt="スクリーンショット 2016-04-17 12.00.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/07318197-0012-e80a-6ba5-68cd25e72b10.png">

次はcubeの方の設定です。

4.cubeに新規スクリプトでHit.csを追加。
OnOver関数でも作っときます。

```lang:Hit.cs
	public void OnOver(){
		Debug.Log("Hit");
	}
```

5.cubeにEventTriggerコンポーネントをアタッチ。
PointEnter時に自分自身のHit.OnOver()を呼び出すように設定。

<img width="607" alt="スクリーンショット 2016-04-17 12.33.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/9f2579b7-0086-fc07-2258-a7404b9c61bd.png">

6.実行

完成です！注視点のポインターをcubeに重ねるとHitというログが出ます。
<img width="566" alt="スクリーンショット 2016-04-17 11.44.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/bb95d776-fa57-a48e-9e95-e7f91debf9f4.png">

<img width="781" alt="スクリーンショット 2016-04-17 12.38.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/4c22063f-70fe-66e7-d1fe-e5d64d9d72df.png">

この仕組みを活用してシューティングゲームもどきのようなものが作れると思います。


![スクリーンショット-2016-04-15-12.34.30.png](https://qiita-image-store.s3.amazonaws.com/0/76843/5efb96be-22b8-ac13-6545-77d108724bdb.png)


ハコスコVR楽しいですね！

続く... かもしれない