OmniAICreator/Qiita-1.07M huggingface dataset:
WPMLでストリング翻訳を使用する

テーマの中では __('English string','theme-text-domain') あるいは _e('English string' ,'theme-text-domain') を使って文字列を書いておく。
後者の e は echo の意。
前者は文字列を変数として扱い、後者は文字列をブラウザに表示する。

「WPML > テーマをプラグインローカライゼーション」画面において「WPMLのString Translationを使用してテーマとプラグインを翻訳する」を選んで保存しておく。

同画面の「テーマ内のストリング」の「ストリング用のテーマをスキャンする」をクリック。
「翻訳が必要なストリングを見る」をクリック
翻訳して、翻訳完了、保存する。

参考:
https://wpdocs.osdn.jp/I18n_for_WordPress_Developers
https://wpml.org/ja/faq/なぜストリング翻訳が表示されないか？/
HMD名ごとに処理分岐させるマクロライブラリを作成

Get HMDDevice NameによってHMDの名前が取れるのですが、これが何の値が取れるのかソースを見ないとわからない上、処理分岐でイチイチデバイス名を書くのも面倒なのでマクロライブラリを作成して公開しました。

GitHubに公開したので、[こちら](https://github.com/YuukiOgino/HmdDviceMacroLibrary)からダウンロードできます。

使い方のサンプルです。
![sample.png](https://qiita-image-store.s3.amazonaws.com/0/104377/9a9f18ff-b0ad-23b3-1c53-a2de6813ce19.png)

#対応バージョン

UE4.14以上

#使い方

1.ダウンロードしたら、使用したいプロジェクトのContentフォルダに、hmdフォルダをコピー＆ペースト
以上です。非常に簡単です。

#中身

列挙型：EHmdDvieceName
マクロライブラリ：HmdDviceNameSequencer

#マクロライブラリ実装内容

![マクロライブラリ.png](https://qiita-image-store.s3.amazonaws.com/0/104377/13e31437-7363-44d0-61bf-d1a51bf8d8da.png)

画像を見てもらえればわかると思います。
現在取得できるHMDの名前から処理を分岐させるだけです。非常に簡単です。

この処理を毎回毎回書くのが面倒なので、このようなライブラリを作りました。
ALBでSSL TerminateしているEC2で稼働するfuelphpをいい感じに動かしていい感じにhttpsで喋らす方法なお俺は喋るのが下手です

俺です。

ちょっとだけハマったピーエッチピーネタです。

ALB/ELB ClassicでSSL Terminateしている環境で動作するFuel PHPなWebページがあったときに、
トップページはhttpsでアクセスできるのに、他のページに遷移しようとするとhttpになっちゃうって現象たまーにありますよね。
そんなときはallow_x_headersでXヘッダを利用できるよう、有効にしておきましょう。

- fuel/app/config/config.php

```
security.allow_x_headers
```

[ドキュメントはこれ](http://fuelphp.jp/docs/1.7/general/configuration.html)

おわり
Meta Slider を管理する権限を変更する

https://www.metaslider.com/documentation/metaslider_capability/

functions.phpに下記のコードを追加

```php:functions.php
/**
 * You can change this to a different capability by pasting the code below into
 * your themes functions.php file.
 *
 * You can use the 'User Role Editor' plugin to add a custom capability to WordPress
 * specifically for Meta Slider users.
 */
function metaslider_change_required_role($capability) {
    return 'metaslider_use'; // this is the ID of a custom capability added using User Role Editor
}
add_filter('metaslider_capability', 'metaslider_change_required_role');
```

User Role Editorをインストール、有効化して「ユーザー > User Role Editor」の画面で「権限の追加」をクリック
権限名 (ID):に metaslider_use を入力して「権限の追加」をクリック
必要な役割を選択して metaslider_use をチェック
Java jreの/lib/calendars.propertiesに設定するミリ秒はUTC

## 「エポックタイム」をセットするのでUTCで入れるべ！

いまいま話題になっている元号の切り替え時期
「平成31年1月1日」
でテストしてみた結果、

当該日「UTC」での開始時刻は、ISO8601形式で、
```2019-01-01T00:00:00+00:00```
で、epochタイム(ミリ秒)では、
```1546300800000```
となりました。

この数値を、JREの
```/lib/calendars.properties```
に設定すると、うまく切り替えできました。というお話です。

※下記記事を参考にさせてもらいました。
Javaで新元号に対応する
http://qiita.com/nishim/items/7d55324b3da315257be5

## 日本時間の区切り時刻をpropertyにセットするのかとおもって、

9時間時差の
```2019-01-01T00:00:00+09:00``` → ```1546268400000```
をセットしてみたところ
次の元号の元旦から、"～～２年１月１日"となったので、死にそうになりました。

Oracle updateをかけられない環境では参考にしてちょうだい

## 作業用のユーティリティ

下記です。
https://github.com/masa-kunikata/japanese_eras_java_property
embulkで入力チェックする

# embulk

http://qiita.com/hiroysato/items/397f36c4838a0a93e352

# embulk 入力チェックでググって出てこなかったから考えた

# 使用したライブラリ

- github
https://github.com/joker1007/embulk-filter-ruby_proc

- 使い方
http://qiita.com/joker1007/items/198bd3b6a1b5acf77fde

# とにかく入力チェックしてダメだったらエラーで落とす作戦

* partial/hoge.yml.liquid

```
- type: ruby_proc
    columns:
      - name: "{{ validate_column }}"
        proc: |
          -> (str, record) do
            return str if str.match(/\A[0-9]*\z/)

            raise "Validation error. invalid_column:{{ validate_column }} / invalid_record:#{record}"
          end
```

*  呼び出し

```
{% include 'partial/hoge', validate_column: 'foo_column' %}
```

# validationエラーで落とさない作戦
何も考えていない
docker start したら device or resource busy エラーで起動できない!?

コンテナIDを指定してdocker start したら device or resource busy エラーで起動できない事象に遭遇。
docker versiton: 1.7.1

```
Cannot start container XXXXXXXXXXXXXX: Error getting container YYYYYYYYYYYY from driver devicemapper: Error mounting '/dev/mapper/docker-8:1-*****-YYYYYYYYYYYY on '/var/lib/docker/devicemapper/mnt/YYYYYYYYYYYY : device or resource busy
2014/06/25 13:39:02 Error: failed to start containers: [XXXXXXXXXXXXXX]
```


考えられる要因としては、docker stopをせずに、dockerをrestartしたためか、ただしく終了できていなかったのかも。

stackoverflowにissueがあり、devicemapperをunmountするとよいとのこと。
https://github.com/docker/docker/issues/5684

```
umount '/var/lib/docker/devicemapper/mnt/YYYYYYYYYYYYYY
```

これで解決できました
ローカルでステージングから POST される情報をみる

# ngrok いれておく

```zsh
$ brew cask install ngrok
# brew install ngrok では入らなかった..
```

# PHPでローカルサーバを起動します

```zsh
$ mkdir ~/workspace
$ touch index.php
$ touch tmp
```

```php:index.php
<?php
$fp = fopen("./tmp", "a");
fputs($fp, serialize($_POST));
fclose($fp);
```

```zsh:起動しておく
$ php -S 0.0.0.0:9999
```

```zsh:ngrokうごかしておく
$ ngrok http 9999
```

下のような表示になるので、

```zsh
ngrok by @inconshreveable                                      (Ctrl+C to quit)

Session Status                online
Version                       2.1.18
Region                        United States (us)
Web Interface                 http://127.0.0.1:4041
Forwarding                    http://8d9b4735.ngrok.io -> localhost:9999
Forwarding                    https://8d9b4735.ngrok.io -> localhost:9999

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00
```

`http://8d9b4735.ngrok.io` これをポスト先のURLとして設定する。

```zsh:別画面でおいかけておく
$ tail -f tmp
```

POST を叩くことで、中身が吐き出される。その文字列を str に格納したあとに 

```zsh
$ php -a
> $str = {コピペでいれる}
> var_dump(unserialize($str));
=> これで POST の中身が見れる
```
CircleCIでRailsアプリをAmazon ECRにpushする

## 概要
railsアプリのテストとECRへのプッシュが目的。

## サンプルコード

```yaml:circle.yml
machine:
  services:
    - docker
  timezone:
    Asia/Tokyo
  environment:
    CIRCLE_ENV: test
dependencies:
  pre:
    - if [[ -e ~/docker/ruby.tar ]]; then docker load --input ~/docker/ruby.tar; fi
    - if [[ -e ~/docker/awesome-app-$CIRCLE_BRANCH.tar ]]; then docker load --input ~/docker/awesome-app-$CIRCLE_BRANCH.tar; fi
    - bundle --path=vendor/bundle
    - bundle exec rake assets:precompile
  cache_directories:
    - "~/docker"
    - "vendor/bundle"
    - "public/assets"
  override:
    - docker info
    - docker build -t $DOCKER_REPOS/awesome-app:$CIRCLE_BRANCH .
    - mkdir -p ~/docker
    - docker save -o ~/docker/ruby.tar ruby
    - docker save -o ~/docker/awesome-app-$CIRCLE_BRANCH.tar $DOCKER_REPOS/awesome-app:$CIRCLE_BRANCH
database:
  override:
    - bundle exec rake db:create db:schema:load db:migrate rake db:seed_fu
test:
  override:
    - bundle exec rubocop
    - bundle exec rspec
deployment:
  hub:
    branch: /^(master|staging)$/
    commands:
      - $(aws ecr get-login --region $AWS_REGION)
      - docker push $DOCKER_REPOS/awesome-app:$CIRCLE_BRANCH
```

## dependencies
CircleCIだと、dockerイメージのキャッシュがされないので、
docker save & loadするっていうハックが一般的みたい。
`~/docker`に逃してるが、将来docker imageがキャッシュされたら再検討。

bundleも忘れずにキャッシュされるようにしておく。

## deployment
deploymentのセクションに関して、
master、stagingブランチの時だけECRにpushしたいという意図がある。
`CIRCLE_BRANCH`には、pushされたブランチ名が入るので、正規表現で切り分ける。

## ENV
事前にCircleCI側にENVを設定する必要あり。
画面遷移: Setting->BUILD SETTINGS->Environment Variables

- AWS_ACCESS_KEY_ID
- AWS_ACCOUNT_ID
- AWS_REGION
- AWS_SECRET_ACCESS_KEY
- DOCKER_REPOS
- SECRET_KEY_BASE
node-google-spreadsheetを使う(超簡易的なテスト)

##参考ページ

Google Apps API Keyの取得
http://www.yoheim.net/blog.php?q=20160411

##取得するシート
https://docs.google.com/spreadsheets/d/1Z2fHUIDDwX_sR6Az3wdfp4wvZNim-0wNzaTzWghchic/edit?usp=sharing

こんな感じ↓
![SnapCrab_NoName_2017-1-20_14-3-51_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/79414/76891423-46d3-0ca6-19b7-bd7ea7e93ba3.png)
※限定共有

##使用したパッケージ

google-spreadsheet
https://www.npmjs.com/package/google-spreadsheet

##Google Apps API Keyの取得

上記リンクを参考に取得しました。

サービスアカウントキーの作成から「App Engin default service account」を選択
最終的に「{Google APIsのプロジェクト名}-{hash}.json」という.jsonファイルが取得できます

##サンプル


```js:index.js
var GoogleSpreadsheet = require('google-spreadsheet');

var test_sheet = new GoogleSpreadsheet('1Z2fHUIDDwX_sR6Az3wdfp4wvZNim-0wNzaTzWghchic');
var credentials = require('./{Google APIsのプロジェクト名}-{hash}.json');

var sheet;
test_sheet.useServiceAccountAuth(credentials, function(err){
    test_sheet.getInfo(function(err, data){
        sheet = data; //あとから使えるように外部スコープに保存
        for(var i in sheet.worksheets) {
            if(sheet.worksheets[i].title === 'sheet1') {
                sheet.worksheets[i].getRows(function(err, rows) {
                    for(var i in rows) {
                        console.log(rows[i].id);
                        console.log(rows[i].name);
                        console.log(rows[i].age);
                    }
                });
            }
        }
    });

});

```

```text:出力
F:\Work\node-spreadsheet>node index.js
0
tanaka
18
1
ishii
20
2
kato
45
3
kitamura
64
4
hosono
3
5
noda
50
```
PageSpeed Insightsで高得点を取るためのTips


[PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/
)は、Webページの表示速度を解析して100点満点で点数をつけてくれるためのサイトです。この記事はPageSpeed Insightで高得点を取るために行った時のTipsです。各項目で具体的にどうゆう対処を行えばいいのか、というのはPageSpeed Insight内でちゃんと書いてくれているので、書かれていないノウハウ部分を共有します。


## 採点方法はどうなっているのか
![スクリーンショット 2017-01-20 13.01.00.png](https://qiita-image-store.s3.amazonaws.com/0/36813/6ef17e78-2b65-bcf3-683f-1df1a2b73603.png "スクリーンショット 2017-01-20 13.01.00.png")

PageSpeedInsightには全体の点数と、修正すべき項目が表示されます。明確な採点方法は明示されていませんが、<b>減点方式</b>で行われています。指摘項目が多ければ、それだけ点数が引かれていきます。

さらに、指摘内容はその数だけ際限なく減点されます。例えば、「画像を最適化する」のみが修正項目になっていて他のルールは合格だったとします。
しかし、「画像を最適化する」で指摘されている画像の数が100個くらいあり削減できるサイズが数十MBとかあったらそれだけでマイナス100点とか受けて合計で0点とかありえます。

## 100点を取るべきなのか
PageSpeed Insightの得点がSEO的に検索順位に直結しているのかはわかりませんが、指標として使うなら高得点をとるに越したことはありあせん。
ただ、以下のシチュエーションで100点をとるのは現実的に難しい面があります。

- GoogleAdなどの広告の配置
- ソーシャルボタンの配置
- 「スクロールせずに見えるコンテンツの...」のルール

### GoogleAdなどの広告の配置
GoogleAdなどの広告を配置すると非同期表示であっても広告内の内容まで評価対象にされてしまいます。そうすると広告内で使われている画像やJavascriptとかで指摘が出てしまいます。

### ソーシャルボタンの配置
ソーシャルボタンは広告の場合と同じです。
ちなみに外部西尾のリソースを指摘項目から外してくれるパラメーターがありませす。
https://developers.google.com/speed/pagespeed/insights/?filter_third_party_resources=true

ただし、jsでスクリプトタグを埋め込んで読み込む形式のものは排除されません。

### 「スクロールせずに見えるコンテンツの...」のルール
![スクリーンショット 2017-01-20 13.45.25.png](https://qiita-image-store.s3.amazonaws.com/0/36813/3b296391-5de6-029d-c54c-e6d9d47ec22e.png "スクリーンショット 2017-01-20 13.45.25.png")

「スクロールせずに見えるコンテンツのレンダリングをブロックしている JavaScript/CSS を排除する」って日本語的に分かりづらいですが、得点表示の右に表示されているページのプレビューのこの部分が「スクロールせずに見えるコンテンツ」。この部分を表示するまではJavaScript/CSSを読み込まないでくださいとのこと。

JavaSctiptはfooter部分に移動させるとか、async属性を付けることでOKになります。

でも、CSSの場合は後で読み込ませるとなると、CSS読み込むまで画面崩れちゃいます。対処方法と挙げられているは、「スクロールせずに見えるコンテンツ」に使うCSSはインラインで書きなさい、とありますがbootstrapのようなCSSフレームワークを使っている場合に切り分けるというのはツラいです。

ここは妥協ポイントだと思います。ただ、CSSは結合して読み込むファイルは1つにして最小限にしておきましょう。

## 「画像を最適化する」でハマるポイント
画像の圧縮はサイズの変更と、ロスレス圧縮するの二つの方法をとります。

### サイズの変更
使う縦横サイズに合わせて画像を縮小するのですが、気になるのは画像の劣化。
いろいろ試したところ、ページで表示する縦横サイズに対して元画像の縦横サイズは1.5倍くらいまでなら許容されるようです。

それでも劣化が目立ってしまう場合は、<img>で表示せずにcssのbackground-imageで表示すると指摘されないで済みます。

### ロスレス圧縮

画像を劣化させないで圧縮するロスレス圧縮をツールを使って行うのですが、JPEG では、jpegtran または jpegoptim、PNG では OptiPNG または PNGOUTが勧められています。

ひとつハマるポイントとして、JPEGでjpegtranやjpegoptimを使って圧縮しても、「圧縮してください」と言われることがあります。

Speed Insightページには、指摘項目の下に最適化された画像をダウンロードできるリンクがあるので、ダウンロードした画像と元画像で比較してみました。
そこで元画像の画像品質が90に対してダウンロードした画像の品質が85になっていたので、品質を85まで下げたらOKになりました。(ロスレスじゃないじゃねーか)
品質85は見た目的には劣化は気にならない程度ですが、やはり気になる人には妥協ポイントではないかと思います。

## さいごに
PageSpeed Insightは100点を取ることにこだわらずに、あくまでも指標として改善できるところの処置を行うくらいがいいのではないでしょうか。
Stream/ParallelStream/Forが複数コア使ってくれるのか気になったので調べてみた

※2017.1.23 もろもろ勘違いして記載していたので大幅書き換え

Forループって複数コア使ってくれるの？ Stream/ParallelStreamは？
とか気になったの簡単に比べてみた。

StreamとParallelStreamの挙動についてはJavaOne2013の[Java 8 Streams: Lambda in Top Gear](https://www.youtube.com/watch?v=UKuFqAhDEN4)のスライドを見るのが良さげ。

一応どの計測も2,3回実行した後に行っています。

## Forループ

```java
public class StreamTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        for (int i = 1; i <= 200000; i++) {
            list.add(String.valueOf(i));
        }

        long start = System.currentTimeMillis();

        String str = "";
        for (String val : list) {
            str += val;
        }
        System.out.println(str);

        long end = System.currentTimeMillis();
        System.out.println((end - start)  + "ms");
    }
}
```

所要時間は42801ms

![for.png](https://qiita-image-store.s3.amazonaws.com/0/31037/c4f7664e-d34c-037d-797b-ae3aa75af6ce.png)

一応4コアとも使っているっぽい。けどコアあたりのCPU使用率は100%にはならず。


## Stream

```java
public class StreamTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        for (int i = 1; i <= 200000; i++) {
            list.add(String.valueOf(i));
        }

        long start = System.currentTimeMillis();

        Optional<String> str = list.stream().reduce((val1, val2) -> val1 + val2);
        System.out.println(str);

        long end = System.currentTimeMillis();
        System.out.println((end - start)  + "ms");
    }
}
```

所要時間は41039ms

![stream.png](https://qiita-image-store.s3.amazonaws.com/0/31037/e5e901c4-bc7d-af7f-fe3f-a5a9e7bec6b7.png)

Forループとほぼ同じ。全体に負荷が少ないかなー、という感じ。

## ParallelStream

```java
public class StreamTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        for (int i = 1; i <= 200000; i++) {
            list.add(String.valueOf(i));
        }

        long start = System.currentTimeMillis();

        Optional<String> str = list.parallelStream().reduce((val1, val2) -> val1 + val2);
        System.out.println(str);

        long end = System.currentTimeMillis();
        System.out.println((end - start)  + "ms");
    }
}
```

所要時間は1937ms

![parallelStream.png](https://qiita-image-store.s3.amazonaws.com/0/31037/4031c77d-6aa4-6063-8006-2079f7f181d6.png)

一瞬全コアが100%になってすぐに終わる。20倍くらい早い。ちなみに要素数を減らすと差は小さくなっていくので、要素数が多ければ多いほど差が出ると思われる。


## まとめ

（~~使える場所では~~ 処理する要素数が多くなる場所では）ParallelStreamを積極的に検討していくべき。

~~For/Streamに関しては複数コアに処理を振り分けてはいるものの、順序を保証するための同期処理でCPU待ちが発生しているように見える。なのでコアあたりの使用率が100%にならず、処理時間も長くかかる。~~

~~その分、ParallelStreamでは同期による待ちがない分、CPUが常に稼働している状態になり使用率が100%まで上がっている様子。~~

~~Forが複数コア利用しているのが予想外だったけど、それ以外は思っていた通りの挙動だったので色々納得。~~

~~ちなみに今回のテストだとParallelStreamでも処理順序が乱れていなかったんだけれど、おそらくループ内の処理時間が一定だったからたまたま順序が維持されたのだと思う。
逆にFor/Streamでも同期チェック時はほぼ必ず次の処理に行ける判定だった（待ち判定はなかった）と思うが、それでもこれだけの速度差が出ているということは、順序保証のオーバーヘッドはだいぶ大きいのかな。~~

処理順序というか、出力結果の順はStreamとParallelStreamの違いには直接関係なかった。で、速度差については純粋な計算量でした。
ParallelStreamについて完全に勘違いしていたよ……[Java 8 Streams: Lambda in Top Gearの45:15あたり](https://youtu.be/UKuFqAhDEN4?t=42m15s)を参照。コメント指摘感謝。
【Vim】環境設定の備忘録

#概要
よくある備忘録です。
環境変わっても全部コピペして同じように使えるように、のつもりで記録しておきます。

ほぼ完全に「[俺の.vimrc](http://blog.livedoor.jp/spyder_5615/archives/25021676.html)」をパク……使わせて頂いてます。

[【Vim】マイコマンド](http://qiita.com/MATO/items/9fdb06e34049bf59ee4d)が続きのような感じです。
こっちは好き放題に設定してる感じのものです。

#コード

```vim:.vimrc

"-------------------------
"基本的な設定
"-------------------------

" 文字コード
set encoding=utf-8
set fileencoding=utf-8

" viとの互換性をとらない
set nocompatible

" 改行コードの自動認識
set fileformats=unix,dos,mac

" ビープ音を鳴らさない
set vb t_vb=

" バックスペースキーで削除できるものを指定
set backspace=indent,eol,start


"-------------------------
"バックアップ関係
"-------------------------

" バックアップをとらない
set nobackup
" ファイルの上書き前にはバックアップを作る
set writebackup

" スワップファイルを1箇所に集めて消しやすくしておく
set directory=/home/SWAP


"-------------------------
"検索関係
"-------------------------

" コマンド、検索パターンを100個まで履歴に残す
set history=100

" 検索の時に大文字小文字を区別しない
set ignorecase

" 最後まで検索したら先頭に戻る
set wrapscan

" インクリメンタルサーチを使わない
set noincsearch


"-------------------------
"表示関係
"-------------------------

" 行番号を表示
set number

" ルーラーを表示
set ruler

" 入力中のコマンドをステータスに表示する
set showcmd

" ステータスラインを常に表示
set laststatus=2

" 括弧入力時の対応する括弧を表示
set showmatch

" シンタックスハイライトを有効にする
syntax on

" 検索結果文字列のハイライトを有効にする
set hlsearch

" コメント文の色を変更
highlight Comment ctermfg=DarkCyan

" コマンドライン補完を拡張モードにする
set wildmenu
 
" 入力されているテキストの最大幅
" (勝手に改行される)を無効にする
set textwidth=0

" ウィンドウの幅より長い行は折り返して、次の行に続けて表示する
set wrap

" ステータスラインに表示する情報の指定
set statusline=%n\:%y%F\ \|%{(&fenc!=''?&fenc:&enc).'\|'.&ff.'\|'}%m%r%=<%l/%L:%p%%>

" ステータスラインの色
highlight StatusLine   term=NONE cterm=NONE ctermfg=black ctermbg=white

"-------------------------
"インデント
"-------------------------

" 1つのTABに対応する空白の数
set tabstop=4
set softtabstop=4

" インデント1つに使われる空白の数
set shiftwidth=4

" タブを挿入する時、代わりに空白を使わない
set noexpandtab


"-------------------------
"その他
"-------------------------

" バッファを切り替えてもundoの効力を失わない
set hidden

" 起動時のメッセージを表示しない
set shortmess+=I

```
Elixirでコマンド実行可能なスクリプトを書きGistで配布する

ErlangVM には，Erlang をコマンド実行可能にする escript という機能がある．

ErlangVM ファミリーの Elixir でも利用可能だ．
さらに Elixir1.4 から [escript を Git やパッケージマネージャーの Hex.pm からインストールできる](http://elixir-lang.org/blog/2017/01/05/elixir-v1-4-0-released/#mix-install-from-scm)ようになった．．

[GistへElixirのプロジェクトを置き，最小限の自己完結した確認可能なコードとして利用する](http://qiita.com/niku/items/c9ca308d3605be627230)と組み合せると

`mix escript.install git https://gist.github.com/niku/9be74fbcdb5d2b9e36b4259fe85e08a8`

という 1 行で実行可能なコマンドを Gist からインストールできるようになる．
今回は my_app というコマンドを実行すると "Hello from MyApp!" と表示する [escript を Gist に準備した](https://gist.github.com/niku/9be74fbcdb5d2b9e36b4259fe85e08a8)．

```zsh
/Users/niku% mix escript
No escripts currently installed.

/Users/niku% mix escript.install git https://gist.github.com/niku/9be74fbcdb5d2b9e36b4259fe85e08a8
* Getting new package (https://gist.github.com/niku/9be74fbcdb5d2b9e36b4259fe85e08a8)
remote: Counting objects: 5, done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 5
Compiling 1 file (.ex)
Generated my_app app
Generated escript my_app with MIX_ENV=prod
Are you sure you want to install escript "my_app"? [Yn]
* creating /Users/niku/.mix/escripts/my_app

/Users/niku% .mix/escripts/my_app
Hello from MyApp!
```

## PATH を通す (optional)

`~/.mix/escripts` を PATH に含めておくと，単に `my_app` と打つだけで実行できる．

```
/Users/niku% my_app
Hello from MyApp!
```
cssのborderで三角を作る

#三角を作る前にborderの作りを理解
```.html
<!DOCTYPE html>
<html>
　<head>
    <meta charset="utf-8">
    <title>arrow</title>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">

    <style type="text/css">
      .arrow {
        width: 100px;
        height: 100px;
        border-top: 14px solid #5bc0de;
        border-left: 14px solid black;
        border-right: 14px solid yellow;
        border-bottom: 14px solid green;
        background-color: red;
      }
    </style>
  </head>
  <body>
    <div class="arrow"></div>
  </body>
</html>
```
上記のコードでできるのが、100x100の赤い四角を囲んだ128x128の四角形
![スクリーンショット 2017-01-20 12.39.27.png](https://qiita-image-store.s3.amazonaws.com/0/65079/59cfc49b-a87f-cc1b-50e4-dee4c87e775a.png)

#borderだけで四角形を作る
上記のコードから
・ width : 0;
・ height : 0;
として、幅と高さを消すと28x28の四角形ができる
この時、三角形４つが合わさってできていることに注目。

![スクリーンショット 2017-01-20 12.42.58.png](https://qiita-image-store.s3.amazonaws.com/0/65079/6668cfef-b5c7-3f98-0ad4-948bd676f07e.png)


#最後にどっち向きの三角形を作りたいかで、borderのtop/left/right/bottomのいずれか３つをtransparent(透明)にして作る
ちなみに、border同士の境界線が斜めになる挙動を利用して三角形を作っているので、隣接しているもの同士を消してしまうと三角形にはならない。(border-left/border-top/border-right など)
※ 対角にある要素のどちらか(border-topとborder-bottomのどちらかなど)は消しても問題なし。


```.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>arrow</title>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <style type="text/css">
      .arrow {
        width: 0;
        height: 0;
        border-top: 14px solid #5bc0de;
        border-left: 14px solid transparent;   /* topと隣接している   */
        border-right: 14px solid transparent;  /* topと隣接している   */
        border-bottom: 14px solid transparent; /* コード自体無くてもok */
      }
    </style>
  </head>
  <body>
    <div class="arrow"></div>
  </body>
</html>
```
![スクリーンショット 2017-01-20 13.07.45.png](https://qiita-image-store.s3.amazonaws.com/0/65079/a58b0fd7-d37e-2b3a-bd57-5d2aeccce182.png)

#くの字を作る方法（超簡単）
・ transform: rotateで角度をつける
・ widthとheightを与える

```.html
<!DOCTYPE html>
<html>
　<head>
    <meta charset="utf-8">
    <title>arrow</title>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <style type="text/css">
      .arrow {
        width: 100px;
        height: 100px;
        border-top: solid 10px #5bc0de;
        border-right: solid 10px #5bc0de;

        /* 角度をつける（45度） */
        -ms-transform: rotate(45deg);
        -webkit-transform: rotate(45deg);
        transform: rotate(45deg);

        background-color: red; /* 色をなくせば水色のくの字になる */
        margin: auto;
      }
    </style>
  </head>
  <body>
    <div class="arrow"></div>
  </body>
</html>
```
![スクリーンショット 2017-01-20 13.43.49.png](https://qiita-image-store.s3.amazonaws.com/0/65079/54c4382d-6523-7e34-a3bb-cbeb6ae71e13.png)

・ `backgorund-color: red;`をなくしたとき
![スクリーンショット 2017-01-20 13.47.06.png](https://qiita-image-store.s3.amazonaws.com/0/65079/c08b7a62-a457-ced8-3150-a005e845bf87.png)
【作業メモ】さくらインターネットの標準CGIサーバでGoをビルド【古典的レンタル鯖】

Sakura Internet の FreeBSD の標準サーバで golang を導入しようとしたが、どういうわけか

```
$ wget https://storage.googleapis.com/golang/go1.7.4.freebsd-md64.tar.gz
$ tar zxvf go1.7.4.freebsd-amd64.tar.gz
$ ./go/bin/go version
-bash: ./go/bin/go: cannot execute binary file: 無効な実行形式です
```

などと怒られてしまう。一応、OSはサポート範囲に入っているのだが、root権限の無い、借り物シェルアカウントなので、いろいろ制約があるのだろう。どうも動的リンクライブラリが見つからない状態になっているように思えた。というわけで、ソースからビルドしてみた。

* 問題のサーバでは Go 1.4.3 はバイナリパッケージでも動作した。この Go 1.4.3 バイナリで Go 1.7.4 ソースをビルドすることにする

* ライブラリのビルド中、`run.bash: line 8: /home/xxxxx/go/bin/go: cannot execute binary file: 無効な実行形式です` などというエラーがビルド中のバイナリ実行中に出た。バイナリパッケージを使った時と同様、どうも動的リンクがうまくいっていない可能性が高い。
    * `export CGO_ENABLED=0` で cgo を使わないような設定にすると、静的リンクを強制できる。それで当エラーは解消した。
    * 個人的には cgo は使わない方針にしているので、これで問題ないが、cgo を使いつつも、静的リンクを強制するオプションもあるらしい（調べていない）
* テスト中、`fork/exec /tmp/go-build289658699/archive/tar/_test/tar.test: permission denied` というエラーが出ることがある。ユーザ権限でビルドしているのだが、/tmp 以下にはファイルは置くことはできても実行はできないらしい。`export TMPDIR=$HOME/tmp` などとして、一時フォルダーを自前のディレクトリに変更すると、エラーは解消した。

一応、以上の操作で、最新の Go 1.7.4 をビルドすることができた。

参考
====

- [RT FreeBSDにGoogleのプログラミング言語Goをインストール - willowletの日記 ](http://d.hatena.ne.jp/willowlet/20091129/1259517856)
- [golangで書いたアプリケーションのstatic link化 - okzkメモ ](http://okzk.hatenablog.com/entry/2016/08/03/234738)
✨安い！！お得！！激安CSS！！✨

激安感を出したい時にお使いください。

![スクリーンショット 2017-01-20 12.31.38.png](https://qiita-image-store.s3.amazonaws.com/0/74551/44753911-d3b7-03e6-a2eb-eb7e4257641c.png "スクリーンショット 2017-01-20 12.31.38.png")
 

```html
<span class='price'>
  <span class='price1'>19</span><span class='price2'>,800</span>
  <span class='yen'>円</span>
</span>
```

```css
@import url(https://fonts.googleapis.com/css?family=Poppins:700);

.price {
  color: #c70506;
  text-shadow: 2px 0 0 #fff, 0 2px 0 #fff, -2px 0 0 #fff, 0 -2px 0 #fff, 5px 4px 3px rgba(0,0,0,0.5);
  font-weight: bold;
  font-family: Poppins;
  letter-spacing: -3px;
}
.price1 {
  font-size: 78px;
  margin-right: -5px;
  font-style: italic;
}
.price2 {
  font-size: 59px;
  margin-right: 10px;
  font-style: italic;
}
.yen {
  font-size: 40px;
}
```
BCM4334チップなWi-FiマシンとUbuntuをAd-Hoc接続する

# やりたいこと

タイトルの通り、BCM4334チップなWi-FiマシンとUbuntuをAd-Hoc接続したいのです

**このエントリーで紹介しているWi-Fi Ad-hocモードは、認証も暗号化もしてませんからご注意を**
あくまでサクっとやるため、アドホックな仕組みです

# TL;DR

SSIDは _ubuntu-ap_ とします

## BCM4334なマシン側

```
# ip link set wlan0 down
# modprobe -r bcm4334x
# modprobe bcm4334x op_mode=2
# ip link set wlan0 up

# iwconfig wlan0 mode ad-hoc
# iwconfig wlan0 essid ubuntu-ap
# ip addr add 10.42.0.2/24 dev wlan0
```

* `ip addr` で設定するIPアドレスは、Ubuntu側のIPを調べて適切にセットしてください

## Ubuntu側


Network Managerから [新しいWi-Fiネットワークを作成(N)...]
![Screenshot from 2017-01-20 11-01-27a.png](https://qiita-image-store.s3.amazonaws.com/0/22754/d39aca96-b304-8bc7-f031-89005552ec06.png)

ネットワーク名(SSID)に _ubuntu-ap_ と入力して作成
![Screenshot from 2017-01-20 10-54-59.png](https://qiita-image-store.s3.amazonaws.com/0/22754/e34aaac5-aa54-afae-3a2d-9cfa94373967.png)

以上で、完了です

### 無効化と再度有効化する場合

無効化：切断します

再度有効化：下図の通り、リストから選択します

![Screenshot from 2017-01-20 11-01-27.png](https://qiita-image-store.s3.amazonaws.com/0/22754/30353363-cb31-283c-913c-82cae4c2eef3.png)

**たまにNetwork Managerが変になり一覧に出てこない場合もあります。その場合はNetwork Managerを再起動しましょう**

```
$ sudo systemctl restart NetworkManager 
```

### そのあとどうする？

Ubuntu上でsshdを動かす、httpdを動かすといったことが考えられます。一番手っ取り早いのは Dockerコンテナを動かすのが良いでしょう

```
$ docker run --rm -it -v $PWD/a:/home/foo -p 2222:22 -e USER=foo -e PASSWORD=bar sjourdan/alpine-sshd
```

# 解説

ほかのPCとアドホックでつなげるためには `iwconfig DEV mode ad-hoc` とします
しかし

```:下記はOpenBlocks_IoT_BX1で実行した結果
# iwconfig wlan0 mode ad-hoc
Error for wireless request "Set Mode" (8B06) :
    Set failed on device wlan0 ; Invalid argument.
```

と、設定に失敗します
_※OpenBlocks IoT BX1/EX1のWi-FiはBCM4334を使ってます_

これは、BCM4334なWi-Fiチップのドライバ `bcm3443x` を modprobeする際の `op_mode` に起因するものです

資料: http://blog.kitaguni.com/hiro_lph/2015/09/intel-edisonbcm43340.html

Ad-hocでつなげるためには _DHD_FLAG_P2P_MODE_ (=2) をop_modeにセットしてファームウェアをロードする (`modprobe bcm4334x op_mode=2`) 必要があるようです※

※なぜ仄聞系なのか：ちゃんと調べてないから。ゴメンナサイ

## 元に戻す

```
# ip addr flush dev wlan0
# iwconfig wlan0 essid off
# iwconfig wlan mode managed
```

# あとがき

こんなことばかり。
Xcode8でappledoc記法のコメントを生成するショートカット

Xcode8未満では、VVDocumenter-Xcodeというプラグインを導入して、
Xcode上で「***///***」を入力すると自動的にappledoc記法のコメントが生成されれていたが、
Xcode8からプラグインが全滅・・・

しかし、GitHubのVVDocumenter-Xcodeのページに行ってみると、

***Xcode8だと最初から使えるよ***

と記載が・・・Σ(゜∀゜ノ)ノ
そこで、記載されている通りのショートカットをやってみると・・・

**ちゃんと出た！**

ということで、Xcode8からは、

「***command+option+/***」

このショートカットで出ます！

（ただ、「///」こっちの入力方法に慣れてたので、ショートカットキーを覚えなきゃいけない・・・
(まぁ今までのXcodeに入っていなかったのが不思議でしたけどね^^;

参考：
https://github.com/onevcat/VVDocumenter-Xcode
【ポエム】 NYAGOSの現在と今後 【2017年版】

[Nihongo Yet Another GOing Shell](https://github.com/zetamatta/nyagos) についての駄文です。関心ある方に読んでいただければと

現在
====

- 4.1.x になって、パイプライン× Lua の組み合わせでのクラッシュ問題は解消した。
    - 原因は複数の goroutine をまたがって、一つの Lua インスタンスを参照していたため
    - goroutine ごとに別途 Lua インスタンスを作ることで解消したが、各インスタンス間でデータを共有するのに「`share[]`」 というLuaテーブルしか使えず、ユーザに不便を強いている
        - 残念ながら、この不便さを解消する方策はない。Luaにインスタンスをクローンするメソッドがあればよいのだが、UNIXだと OS に fork があるので、Windows のためだけに実装される可能性はまずない。
    - 不安定な 4.0.9 がまだ使われているところがあるのが遺憾
- 二重引用符や、% などの処理のせいで、一行 gawk が通らない不具合が予想以上に多かった。
- bash との互換性が無いからといって使わない人は相変わらず多い
    - 目指すところが違うので、これは無視してよい（昔からある話）
- **NYAGOS は「Luaでしかカスタマイズできない」ので、使う敷居が高くなっている**
     - 誰もが Lua でガリガリチューニングしたいわけではなく、単にエイリアスとか環境変数の設定ができれば十分という人も多い
     - NYAOS ではバッチ風設定ファイル(`~/_nya`)と Lua で機能が重複していたため、重複機能を無くす意味でバッチ風設定ファイルは実装しなかったが、間違いだった。
- NYAOS 2.x の頃は「実行ファイル一つ、設定ファイル一つ」で運用できた。NYAOS 3 の途中からファイル数がやたら増えてしまい、運用性が下がった。
- 文字コードで UTF8 と CP932 が混じってしまっているのが頭が痛いが、どうしようもないところがある（たとえば pwd はコンソールに出す分には　UTF16 のAPIにつっこまれるので問題ないが、more を通すと UTF8 が ANSI-API に入ってしまい、文字化けしてしまう）
- ユーザカスタマイズ以外での Lua の採用メリットは減っている。C言語で開発していた NYAOS 3.x では一部のコマンドを Lua で提供するのは開発効率もよかったが、Go言語はC言語に比べてもともと開発効率がよいので、Goで書けるものを Lua で提供する意味は少なくなっている。
- NYAOS 3.x → NYAGOS 4.x みたいに「一から作り直さないとどうしようもない」といった問題は今のところないので、今後 5.x を作る必要性は基本的に無い
   - NYAOS 3.x は Double Byte Character System が大前提だったので、１文字３バイト上が普通にある UTF8 対応はほとんど不可能だった。
- NYAOS 3.x の Lua と NYAGOS 4.x の Lua で互換性がないのが問題になっているケースもあった。これはどう対応するか、まだ検討中（今のところ対応しない方針だが）

今後
===

- 一行gawkがエラーになり気味なのは、問題を確認次第、地道に直してゆく
    - 二重引用符の中に二重引用符を書くときは `gawk "BEGIN{ print substr(""%01"",2) }"`  みたいに二重引用符を二つ連続して書いてください
- バッチ風設定ファイルを復活させる(`~/_nyagos`)
    - IF文などの制御構文は NYAOS 3.x 風ではなく、CMD.EXE の文法に近づける方向で
- `nyagos.d/` などの Luaライブラリなどは go-bindata で EXE 内に内蔵する or Go でカリカリに書くなどして、数を減らす
- lua53.dll がない時、全機能が使えないのは仕方ないにしても、一応、必要最小限の動作くらいは出来るようにする（今は panic になる）
- interface 構文など使って、パッケージの相互依存性などを排してゆく
- もう少し Qiita で発信する

ペースは落ちていますが、本年はまだまだ改良を続けて参りますので、不具合を見つけたり、リクエスト・提案がある方は GitHub へ [issue](https://github.com/zetamatta/nyagos/issues) 立ててください（日本語でも英語でも、どっちゃでもいいです）

以上、よろしくお願いいたします。
【Android】ChromeCustomTabsを閉じたときに任意の処理を実行する

## 概要
ChromeCustomTabsを閉じてアプリに戻ってきたときに何かしらの処理を実行したいときのやり方メモです。

## 簡易まとめ
1. `CustomTabsIntent#launchUrl()`実行前にActivityのインスタンス変数にフラグを立てる
1. ChromeCustomTabsを閉じると`Activity#onResume()`に戻ってくるのでフラグが立っていたら処理実行してフラグを下げる

## コード例
フラグを定義

```java:MainActivity.java
// ChromeCustomTabs用フラグ
private boolean flag = false;
```

`launchUrl（）`するところでフラグを立てる

```java:MainActivity.java
@Override
public void onClick(View v) {
    // launchUrl()前にフラグを立てておく
    flag = true;

    String url = "https://example.com/";
    CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
    CustomTabsIntent customTabsIntent = builder.build();
    customTabsIntent.launchUrl(this, Uri.parse(url));
}
```

ChromeCustomTabsを閉じると`Activity#onResume()`に戻ってくるのでフラグが立っていたら処理実行してフラグを下げる

```java:MainActivity.java
@Override
protected void onResume() {
    super.onResume();

    // CustomTabsを閉じるとActivityのonResume()に戻ってくるのでフラグで判定
    if (flag) {
        // やりたい処理を実行
        doSomething();

        // フラグを下げておく
        flag = false;
    }
}
```

## 参考
- [Chrome Custom Tabs - Google Chrome](https://developer.chrome.com/multidevice/android/customtabs)
Qiita > UI > ストックしたもののタグで絞り込みできるようになった > 異なるタグ (RaspberryPi / Raspberry / Pi / RPi)

```txt:動作確認
Qiita (2017/01/20現在のもの)
```

UI周りが変更されたようだ。以下のブログを見つけた。
http://blog.qiita.com/post/156073949044/new-stock-page

ストックしたものからタグで絞り込みができるようだ。
これまではストックした記事で「どういうタグがついているか」を簡単に把握できなかったため、タグでの絞り込みはしてこなかった。

ストック記事のタグ絞り込み機能により、過去にストックしたものを再訪しやすくなった。
**これは便利!**

そして、ふと見ていて気づいたのが「Raspberry」タグ。「RaspberryPi」タグとは別のRaspberry Pi関連のタグがあり、それらの記事をストックしていたことを忘れていた。そして、今回の機能追加で再度気づいた。

Raspberry Pi関連のタグはどれくらいあるのだろうか。

- RaspberryPi
- Raspberry
- Pi
- RPi

他にもあるかもしれない。

RaspberryをRaspbery(rが足りない)として書かれている記事も時々みて、そういう記事は検索時に見つからない場合がある。
rtfファイルをhtmlに変換する方法

#rtfファイルをhtmlに変換する方法#
普段ちょっとしたメモや一時的な情報などをテキストエディットに書いておくことが多いのですが、
作成したrtfファイルをhtml形式に（することはあまりないですが）変換するコマンドをメモしておきます。

```$ textutil -convert html rtfファイルのパス```


---
別の記事を書いていて、![Payload Too Large]()エラーが出たための初投稿でした。

QiitaでPayload Too Largeが出て画像をupできない人へ - Qiita
http://qiita.com/arakawa_moriyuki/items/6988e6f3cfbbb0f5bd42

![Payload Too Large]()エラーが出たら
http://qiita.com/Takasu3M/items/ce5e200109b638c71cea
webpacker を使って見た感想

	
こんにちわ。[ユニバ](http://uniba.jp/inbrowser/home.html)の MJ です。
今回は rails の上で動くフロントエンド開発で `webpacker` を使って javascript 周りの開発の準備をしたので、その覚書です。
	
## webpacker

[webpacker](https://github.com/rails/webpacker) とは rails の構成上で いい感じに `webpack` でファイルをビルドできるようにしてくれる仕組みを提供してくれる `gem` です。

## 今まで

`webpacker` 以前でも、 rails 案件で `webpack` など Node製のビルドツールを使用している方も多いでしょう。
僕から見た 今までの構成と `webpacker` を使った場合の構成を比較して見ます。

### 今まで通りの webpack を使った構成

* あるフォルダを自分で作って、その中に生成のための必要な素材一式をおく
* development では `dev-server` を立ち上げて rails はそこのソースコードを読みに行く
* production では `webpack-manifest-plugin` などを使って、rails が発行するような hash 値を名前につけて build する

### webpacker

* module は `npm` ではなく `yarn` で管理するため 先にインストールしておくべし `brew install yarn -g` とかで ok 
* `Gemfile` に `gem 'webpacker', github: 'rails/webpacker'` を記述し install
	* `./bin/rails webpacker:install` と叩けば既存のプロジェクトに `webpack` 用の構成が追加される
* 管理用のフォルダは別れる
	* コード類は `/app/javascripts/pack`
	* ビルド環境系は `/config/webpack`
	* モジュール類は `/vendor`
* ソースコードは常に `public/packs/` に生成される

というのが主なところである。

`webpacker` が用意してくれた install コマンドを使えば、細かい設定を除けば すぐに `webpack` がコンパイルしてくれる環境が整うのは非常に便利だし、常に public にビルドしたファイルがやってくるのも便利であると感じた。

面倒と感じたのは、今まで一元的に管理していたフォルダ構成がバラバラになったのと、いちいち module の install を `./bin/yarn add --dev hoge` みたいな感じにしないといけないぐらいである。

つまりは便利。きゃっほー

## webpacker は webpack2.0

あと注意すべきは `webpack2.0` の設定周りであろうか。
`webpacker` が用意してくれる config ファイルがそもそも 2.0 形式で書かれているので大丈夫かとは思うが、
`postcss` 周りの設定が如何せんうまくいかなかった(`webpacker` 関係ないけど)。

そういう人は http://qiita.com/namazu510/items/beb930472a4b76c2fd64 この素晴らしい記事を拝見すると良いかもしれない。

要点としては、`postcss` の plugins のオプションをどうやって渡すかの話に尽きるのだが、


```
plugins: [
	new webpack.LoaderOptionsPlugin({
	  options: {
	    postcss: [
	      require('postcss-cssnext')({
	          autoprefixer: {
	            browsers: [
	              'Explorer >= 11',
	              'Android >= 4.0',
	              'iOS >= 8'                      ]
	          }
	        }
	      )
	    ]
	  }
	})
]
```

`moudle.rules` の中で同じような記述をしても正常に渡せなかった。ので上のように `plugins` の項目で 渡してやると良い。

## 終わりに

これがスタンダードになるんやろか。
development の時には `./bin/webpack-watcher` なるコマンドを叩いて、ファイルの更新を行うのだが。
terminal の画面が一つ埋まるやだな〜。と思っているので、どうにかならんかしら。
foreman 使っても1個減るし。 anvil 経由の pow で立ち上げてるから変わらんか。。。
macOSで画像を一気にリサイズする

# TL; DR

```bash
sips -Z 640 *.jpg
```

## あらまし

Finderで該当フォルダまで行く→Preview.appで画像を開く→サイズ変更→保存。
次の画像をPreview.appでまた開く→サイズ変更→保存。
更に次の画像を...。WRYYYYYY!!!!!めんどくせえ！

――そんなあなたに `sips` のご紹介です :octocat:

## `sips` コマンドで対象の画像を一気にリサイズする

### Terminal.appを開きます

* Spotlight (コマンド＋EnterとかControl＋Enterとかで出てくるはず）を開いて
    * `ターミナル` と入力
* LaunchPadから「その他」→「ターミナル」を選択

### 該当ファイルがあるディレクトリまで移動します

ターミナルを開いたときあなたは `/Users/（あなたのユーザ名）` ディレクトリにいます
例えば「ダウンロード」フォルダに画像があれば

```bash
cd Download
```

と打ちます
ディレクトリの移動についてよくわからない方は [ここ](http://inforati.jp/apple/mac-tips-techniques/system-hints/how-to-use-mac-finder-go-to-folder-command.html) とか参照してみてください

対象ディレクトリにきたら、次のコマンドをたたきます。

```bash
sips -Z 640 *.jpg
```

`640` のところは横解像度、 `*.jpg` のところには対象ファイルや対象条件を入れればOKです。

快適なmacOSライフを！

# 参考

http://lifehacker.com/5962420/batch-resize-images-quickly-in-the-os-x-terminal
[メモ] RaspberryPi3のusb/net boot (2017年1月)


## 概要
- 最近、nextブランチから、masterに取り込まれたっぽい。<br>ので、`rpi-update`で、`BRANCH=next`を入れなくても良いはず。
- https://github.com/raspberrypi/firmware/commits/master

    > `(2017-01-10)[e44f66a] firmware: Add usb/net support from next branch` 
    > `(2017-01-12)[6df93de] firmware: Fix usb/net boot issue`
- とりあえず、すぐできる、USB起動のみ確認。

## 関連

- [らずぱい３で、USBストレージからブート(SDなし)](http://qiita.com/mt08/items/f2e71ebf46f910acb38f)
- [らずぱい３で、ネットワークブート(SDなし)](http://qiita.com/mt08/items/3ea80e51a5e758d8cecd)

## 環境
- Raspberry Pi 3 model B
- Raspbian: `2017-01-11-raspbian-jessie-lite.img`
- microSD カードリーダ


## 手順
-　これ→ ["らずぱい３で、USBストレージからブート(SDなし)"](http://qiita.com/mt08/items/f2e71ebf46f910acb38f) にしたがっていく。

- `sudo rpi-update`<br>のとこだけ変更。
- microSDの`/boot/cmdline.txt`と、`/etc/fstab`を変更

    ```bash:mmcblk=>sdaみたいな
sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /boot/cmdline.txt
sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /etc/fstab
sudo sync
sudo poweroff
```
- ラズパイにささってるmicroSDをUSBカードリーダーにさして、らずぱいのUSBポートに。
- 電源ケーブルを抜き差しして、待つ。<br>=>起動した :-)

## その他

```shell-session:実行例
pi@raspberrypi:~ $ sudo rpi-update 
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12016  100 12016    0     0  75170      0 --:--:-- --:--:-- --:--:-- 75572
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** We're running for the first time
 *** Backing up files (this will take a few minutes)
 *** Backing up firmware
 *** Backing up modules 4.4.34-v7+
This update bumps to rpi-4.4.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=144087
##############################################################
 *** Downloading specific firmware revision (this will take a few minutes)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   168    0   168    0     0    456      0 --:--:-- --:--:-- --:--:--   456
100 51.9M  100 51.9M    0     0   889k      0  0:00:59  0:00:59 --:--:-- 1431k
 *** Updating firmware
 *** Updating kernel modules
 *** depmod 4.4.43-v7+
 *** depmod 4.4.43+
 *** Updating VideoCore libraries
 *** Using HardFP libraries
 *** Updating SDK
 *** Running ldconfig
 *** Storing current firmware revision
 *** Deleting downloaded files
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully updated to a12b699d642096023a2b3009bb88ca82ad0baef4
 *** A reboot is needed to activate the new firmware
pi@raspberrypi:~ $ vcgencmd otp_dump | grep 17:
17:3020000a
pi@raspberrypi:~ $ 
```
Panasonic CATV STBの外付けHDDのファイルシステム修復　おぼえ書き

近年のTVやSTBはUSB端子があって、そこにUSB HDDを接続するとハードディスクレコーダーに早変わり。それはそれで便利なのだが、不正コピー対策が優先でファイルシステム保護がいい加減なため、ファイルシステムの論理エラーが起きるとすぐに、録画し溜めたHDDにアクセスできなくなってしまう。で、「しらないHDDです。フォーマットしますか？」と言われる。

先日パナソニックのCATV STBで果たしてその病気が出た。前々回はあきらめてformatしてしまったのだが今回は粘ってみる。

HDDをノートPCに接続してWindowsが認識するファイルシステムではないことを確認。次にknoppixで調べてみる。残念ながらknoppixが操作できるファイルシステムではなかった（AQUOSのUSB HDD はknppixで操作・修復できたのだが）。ただ、デバイスレベルでは認識したのでボリューム全体を空読みして、物理損傷がないことは確認できた。

次にFreeBSD LiveCDでブートしてみると、めでたく認識。FFSでもUFSでもfsck -n が正常っぽく動いてしまうのでどちらにするか迷ったけどえいやっとFFSだということにしてfsckで修復してSTBにつなぎ戻したら、めでたくとり溜めた番組が復活した。

追記

FreeBSDのバージョンアップで「GPTパーティションテーブルが編だけど、バックアップパーティションテーブルを使うか？」みたいなことを言われたりします。が、YESと答えるともうSTBからはアクセスできなくなります。GPT修復をしなくてもfsckできます。fsckの最初の質問 Journaling使うか？にはnと答える。
[iOS] [Objective-C]NSUserDefaultsでデータを保存する

###やりたいこと
----

画面の切り替えとかで遷移した際にデータの引き継ぎをするのが難しい。
以前の処理を残したい。
そんな時に使えるのが 今回紹介するコード

###環境
----
XCode8.1
Swift 2

###手順
----
1.保存したいデータを作る。

Objective-C

~~~Objective-C
 NSArray *score = @[@0,@0,@0,@0,@0];
~~~

Swift

~~~Swift
 var score = [0,0,0,0,0]
~~~

2.NSUserDefaultsのインスタンスを作る。

Objective-C

~~~Objective-C
 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
~~~

Swift

~~~Swift
 let ud = NSUserDefaults.standardUserDefaults()
~~~

####書き込み
指定するデータを書き込みしたい場所（key）を指定し、書き込む。

Objective-C

~~~Objective-C
 [ud setObject:store forKey:"scoreKey"];
 [ud synchronize];
~~~

Swift

~~~Swift
 ud.setObject(score, forKey: "scoreKey")
 ud.synchronize()
~~~

####読み込む
指定するデータを読み込みしたい場所（key）を指定し、読み込む。

Objective-C

~~~Objective-C
 if ([ud arrayForKey:@"scoreKey"]) {
  score = [ud arrayForKey:@"scoreKey"];
 }
~~~

Swift

~~~Swift
 if ud.objectForKey("scoresKey") != nil {
  score = ud.objectForKey("scoresKey") as! [Int]
 }
~~~

####削除
指定されたデータを削除したい場所（key）を指定し、削除する。

Objective-C

~~~Objective-C
 [ud removeObjectForKey:@"scoreKey"];
~~~

Swift

~~~Swift
 ud.removeObjectForKey("scoresKey")
~~~

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
自分用あんちょこ


現場が変わるなどして、あまり使わなくなり、
便利なコマンドを忘れてしまう・・・
ということが多々あるので、自分用のメモであります。


# Linux
### ディスク書込み性能確認
```
 dd bs=1M count=1000 if=/dev/zero of=/HOGE/disktest oflag=direct
```

### cookieつきwget
```
wget -O [output] --load-cookies="./cookie.txt" [url]
```

### GPU状態参照
```
nvidia-smi
```

### 改行コードいじり
```
perl -p -e 's/\n/\r\n/'
```

### ポート確認 (2017/02/01 追加)
```
lsof -i
lsof -i:[port]
netstat -antu
```

# Python
### cookieを設定してget
```
import requests
cookies = {
    'aaa': '81',
    'bbb': 'xxx'
}
res = requests.get([url], cookies=cookies)
```

### リスト内包表記
[http://qiita.com/y__sama/items/a2c458de97c4aa5a98e7](http://qiita.com/y__sama/items/a2c458de97c4aa5a98e7)


### nan判定
```
math.iznan(xxx)
```

### 改行なしprint
```
print("hello", end="")
```

### 高速for
```
for x in[None]*xxx
for x in[0]*xxx
for x in range(xxx)
```

### date型に変換 (2017/02/01 修正)
```
# pandas を使うと楽
pd.to_datetime('2015/1/1 10:00')
```

### タイムゾーン変更 (2017/02/01 追加)
```
# pandas を使うと楽
pd.to_datetime('2015/1/1 10:00').tz_localize('GMT').tz_convert('Asia/Tokyo')
-> Timestamp('2015-01-01 19:00:00+0900', tz='Asia/Tokyo')
```

### モジュールやクラスを覗く (2017/02/01 追加)
```
def pvars(_class):
    for _key in vars(_class).keys():
        print('[%s] %s' % (_key, vars(_class)[_key]))
```

### DataFrame内の最大値の位置を検索 (2017/03/22 追加)
```
column_name = df.max().argmax()
index_name = df[column_name].argmax()
df.ix[index_name, column_name]
```


# mongodb
### 型で検索
```
db.collection.find(xxx: {$type: 2})
    - 欠損？              0
    - Double             1
    - String             2
    - Object             3
    - Array              4
    - Null              10
    - 32-bit integer    16
    - Timestamp         17
    - 64-bit integer    18
```

### date型の検索
```
db.collection.find({xxx: {$gte:ISODate("2014-11-01T00:00:00Z")}})
```
Azureの勉強メモ①

これを学習したときのメモ
https://mva.microsoft.com/ja/training-courses/-mcp-70-533-microsoft-azure--9014?l=F0wvgBU3_9004984382

# PowerShellインストールと設定
* PowerShellモジュールのダウンロード
`import-Module Azure`　　

* サブスクリプションファイルのインストール
→X509v3証明書でエージェントの認証に使用される
→期限は1年間
`Get-AzurePublishSettingFile`　　

* サブスクリプションのインポート
`import-AzurePublishSettingFile`　　

* サブスクリプションの確認コマンド
`Get-AzureSubscription`
→表示される内容の一部
IsCurrent　現在のサブスクリプション
IsDefault　規定のサブスクリプション

* Subscriptionの設定
使用するSubscriptionの設定
`Select-AzureSubscription -SubscriptionName "MSDN Platforms" (–Current)`
-Cuurentは省略できる  

* 規定のSubscriptionの設定
`Select-AzureSubscription -SubscriptionName "MSDN Platforms" –Default`


# 第一章　仮想ネットワークの実装

## 仮想ネットワークの復習
### 仮想ネットワーク
* 任意のIPv4アドレス空間を作成できる
* サブネット間は自動でルーティングされる
* カスタムDNSの構成が可能
→「_」のLDAPの追加の必要があれば構成する必要がある
→ドメインコントローラーが必要なければ不要
→使わなければMSのデフォルトが使用される

### フロントエンド
* publicIp（VIP）による接続が可能
* SLB（SoftwareLoadBalancer）が使用可能
* APIにACLが設定可能

### バックエンド
* ポイント対サイト  
→専用のソフトを介して
* サイト間接続  
→ルーター

## 仮想ネットワークの作成
* 簡易作成  
* カスタム作成  
* 構成のインポート  
→作成したネットワークは、XML形式でexportできる。  
それをインポートするやり方  
    * DNS登録  
    * ローカルネットワークの追加  

などがある
サポートされる最小サブネットは/29（3台）、最大は/8（16777211台）
使用可能なアドレスは2(32-N)-5
→0,1,2,3,最後の1個は使用できない

* 設定時に表示されるアドレス数は5がひかれていないので注意
→有効化されると、5がひかれる
→表示されたものにだまされないように！

* 前のセグメントで設定したCIDRのサイズよりも大きいものは設定できないので注意
→設定よりも大きなものを追加したい場合
1.subnet3を**空にして（配置されたリソースを削除して）**削除
2.subnet2を**空にして（配置されたリソースを削除して）**サブネットのサイズを大きくする
3.subnet3を拡張して作成する

作成した構成はExport可能
こんな感じ。

```
<LocalNetworkSites>
  <LocalNetworkSite name="localtest">
    <AddressSpace>
      <AddressPrefix>192.168.10.0/16</AddressPrefix>
    </AddressSpace>
    <VPNGatewayAddress>172.16.20.20</VPNGatewayAddress>
  </LocalNetworkSite>
</LocalNetworkSites>
<VirtualNetworkSites>
  <VirtualNetworkSite name="vnet1" Location="Japan West">
    <AddressSpace>
      <AddressPrefix>10.1.0.0/23</AddressPrefix>
    </AddressSpace>
    <Subnets>
      <Subnet name="Subnet-1">
        <AddressPrefix>10.1.0.0/27</AddressPrefix>
      </Subnet>
      <Subnet name="Subnet-2">
        <AddressPrefix>10.1.0.32/29</AddressPrefix>
      </Subnet>
    </Subnets>
  </VirtualNetworkSite>
</VirtualNetworkSites>
```
仮想サーバへのファイル転送エラーの件

vmwareで起動させている仮想サーバへ、
1Gほどのファイルを転送した際、エラーが発生しました。

「〇〇.vmdk」の操作に失敗しました。

他に多くのサーバをあげており、メモリ不足となっていたようです。
他のサーバを停止させたら、解消しました。
Theanoのインストールメモ

##やりたいこと
pyenvでtheano使える環境をつくりたい

OS: Ubuntu 16.04.1 LTS

## つまったところ
pyenv 使って，普通に

```
pyenv install 2.7.6
pyenv shell 2.7.6
pip install Theano
python -c "import theano"
```
ってやったら

```
.pyenv/versions/2.7.10/lib/libpython2.7.a(abstract.o): relocation R_X86_64_32S against `_Py_NotImplementedStruct' can not be used when making a shared object; recompile with -fPIC
.pyenv/versions/2.7.10/lib/libpython2.7.a: error adding symbols: Bad value
```

てエラー．．．

## 原因
stackoverflowで調べたら，

[Error importing Theano](http://stackoverflow.com/questions/21342931/error-importing-theano) - Stack Overflow
ここに，
> You didn't build correctly python. It wasn't compiled with the -fPIC parameter. Look at how to compile python with a shared library.

よくわからなかったがshared libraryがないとか．

## 解決
pythonインストール時に`--enable-shared`ってオプションいれなきゃいけない．
pyenvでのインストール方法は，[Home · yyuu/pyenv Wiki · GitHub](https://github.com/yyuu/pyenv/wiki) の一番下に書いてあった．

> ```
> env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.5.0
> ```

バージョンをインストールしたいのに変えればできる．
これでとりあえず，`python -c "import theano"`は通った．
次に，`python -c "import theano; theano.test()"`
したら，noseとnose_parameterizedっていうモジュールがないと，
公式[Installing Theano - Theano 0.8.2 documentation](http://deeplearning.net/software/theano/install.html) にもテストするときはこの二つを入れてと書いてあった．
`pip install nose nose-parameterized`

とりあえずこれでtestも通った．（warningいろいろ出たけど．）

## まとめ
pyenv使ってtheano入れるときは

```
env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install x.x.x
pyenv shell x.x.x
pip install nose nose_parameterized theano
python -c "import theano; theano.test()
```

でとりあえずは終わり．
GPU関連の確認をまだしてないので，問題が出たら追記します．
Python > int('1e3') > ValueError: invalid literal for int() with base 10: '1e3' / str(1e3) > '1000.0'

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。

```

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic

### int to string

int()を用いる場合、`int('1e3')`のような指数形式の記載でエラーが出ることが上記の本に書かれていた (@ No.733 / 12833)。

試してみた。

```int_func_170120.py
ival1=int('1000')
print(ival1)
ival2=int('1e3')
print(ival2)
```

```txt:結果
$ python int_func_170120.py 
1000
Traceback (most recent call last):
  File "int_func_170120.py", line 3, in <module>
    ival2=int('1e3')
ValueError: invalid literal for int() with base 10: '1e3'
```

### string to int

上記をしていて気になったのは、`1e3`をstr変換した場合はどうか、ということ。

試してみた。

```str_func_170120.py
str1=str(1000)
print(str1)
str2=str(1e3)
print(str2)
```

```txt:結果
1000
1000.0
```

1e3という数値は1000.0に変換された上でstring型になっているようだ。

上記の本の (@ No. 831 / 12833)にも記載があった。
GitkrakenとGitHubとの連携手順

#GitkrakenとGitHubとの連携手順

##はじめに

###▼この記事で分かること
この記事ではGitのGUIクライアントツールであるGitkrakenと
お馴染みのGitHubとの連携を行う手順をまとめています(2017/01/19現在)。

※Gitkraken自体のインストールについては以下の記事に記載しています。
[Gitkrakenのインストール手順](http://qiita.com/electric_Sheep/items/c39675fd372b1075dab4)

##GitHubとの連携手順
Gitkrakenを起動しましょう！

###▼Step1
右上の「ハンバーガー」ボタンをクリックし出てくるメニューから「Preference」を選択してください。
![008.jpg](https://qiita-image-store.s3.amazonaws.com/0/66429/cd2c1ea1-37c9-75e2-5237-b3aa363443a9.jpeg)

遷移先の画面で「Authentication」をクリックし、
そして「GitHub.com」のアイコンをクリックしてください。
すると以下の画像の画像のように表示されていると思います。
![012.jpg](https://qiita-image-store.s3.amazonaws.com/0/66429/b4f018c1-b3e6-99dc-4d34-10dc70328302.jpeg)


###▼Step2
「Connect to GitHub」ボタンをクリックしてください。
GitHubのページが開かれるので、そこでGitkrakenのアプリケーション認証を行います。
「Authorize application」をクリックしましょう。
![013.jpg](https://qiita-image-store.s3.amazonaws.com/0/66429/597a0bac-04dd-46ce-c6c1-e4577d0e52a4.jpeg)


オクトキャットちゃんとくコ:彡がにっこりしてれば連携OKです。
![014.jpg](https://qiita-image-store.s3.amazonaws.com/0/66429/8c2d72a5-53f3-4de5-47f0-4515a7999f65.jpeg)

Gitkraken上では下の画像のように表示されているはずです。
![015.jpg](https://qiita-image-store.s3.amazonaws.com/0/66429/48f4877f-0477-1906-043a-7d05d71790a2.jpeg)


###▼Step3
連携自体は以上ですが、ついでにクローンまでやってしまいましょう。
左上の「ファイル」マークをクリックしてください。
![008.jpg](https://qiita-image-store.s3.amazonaws.com/0/66429/cd2c1ea1-37c9-75e2-5237-b3aa363443a9.jpeg)

遷移先の画面で「Clone」をクリックし、「GitHub.com」のアイコンをクリックしてください。
上から「クローン先」、「リモート元」になっているのでよしなに入力してください。
その後、アクティブになった「Clone the repo!」をクリックすればクローンされます。
![016.jpg](https://qiita-image-store.s3.amazonaws.com/0/66429/63900737-5319-bc23-81ce-76f9fa3bd4e4.jpeg)

上部に「Successfully clone repo '****'」と出るので「OK」しちゃいましょう。
これでクローン完了ですくコ:彡
![017.jpg](https://qiita-image-store.s3.amazonaws.com/0/66429/ae71d243-5560-740c-8b84-6e89fd50c6ed.jpeg)
tmuxのpaneを兄弟だけ均等に並べる

tmuxのpaneは複雑なレイアウトを構成できて便利なのですが、paneを均等に並べるのが横一列とか縦一列、タイリングなどと大雑把な感じで、アクティブなpaneが属するカラム内だけ均等分割したい、みたいなことは実現が難しいです。そこで、これを実現する方法を考えてみましょう。

tmuxのwindowの分割状況、paneの配置などの情報は `tmux display -p "#{window_visible_layout}"` で以下のような文字列として得ることができます。

```
x> tmux display -p "#{window_visible_layout}"
a158,80x64,0,0[81x16,0,0{40x16,0,0,108,40x16,41,0,127},81x15,0,17,126,81x32,0,33{31x32,0,33[31x16,0,33,122,31x15,0,50,128],49x32,32,33,123}]  
```

pane情報につづき、`[` ... `]` で縦分割、`{` ... `}` で横分割という感じの入れ子になってますね。この文字列のparserを作りました。

* [tmux_layout_parser.rb](
https://gist.github.com/genki/5a84deca67d1c03610c8e7108160fa39)

これを使って、

* activeなpaneの兄弟だけ均等分割（同軸方向の均等分割）
* activeなpaneの親の兄弟だけ均等分割（逆軸方向の均等分割）

を実現するスクリプトを作りました。

* [tmux_even_pane](https://gist.github.com/genki/cab6692e08ffc4feb541ac1ef6e234c6)

以下のように `~/.tmux.conf` で `bind` して使います。

```
bind * run-shell "/path/to/tmux_even_pane 0"
bind + run-shell "/path/to/tmux_even_pane 1"
```