OmniAICreator/Qiita-1.07M huggingface dataset:
アプリ内でマイクの利用を許可しても認識しないぞ、困った


iOS8以降は下記のようにすれば現在のマイクの許可がどうなっているか確認することが出来ます。

マイクを必須にしているので、AppDelegateの下記の中でチェックするようにしています。

```AppDelegate.m
- (void)applicationDidBecomeActive:(UIApplication *)application
{
	AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
}
```

そして、許可されていない場合はUIAlertViewControllerを表示し、iOS8から設定を呼び出すのが復活したので、

```
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root"]];
```


でアプリから設定を呼ぶことが出来ます。
そして、設定から許可をし、アプリに戻ってきて再度チェックしてみると（デバッガで見てるとアプリが一度終了してる）、あいかわらず、

```
AVAuthorizationStatusDenied
```	
	
とされてしまいます。

さて、弱った。

が、これはデバッグ時だけで、普通に実行すればこんな挙動にはなりませんでした。ちょっと気持ち悪いですが、そういうものということにします。
JavaScript on Rails


## 前提
* 小さめのプロダクト
* スピード大事
* 対象のチーム
    * クライアントサイド専属の人がいない
    * JavaScriptに詳しいひとがいない
    * JavaScript界隈の流行を過度に追わない判断をした

## Railに乗ろう
* Rails公式としては「控えめなJavaScript」を推奨している
    * cf. [Rails ガイド](http://railsguides.jp/working_with_javascript_in_rails.html)
* 公式のは控えめすぎるので「クックパッドモデル」を採用する
    * ECMAScript6 (ES6, ES2015) のシンタックスを使う
    * モジュールの依存解決にCommonJS Modules (もしくはES6 Modules) を使う
    * フロントエンドのライブラリ管理にnpmを使う
* クックパッドモデルの最小構成
    * cf. [hokaccha/browserify-rails-example](https://github.com/hokaccha/browserify-rails-example)
    * Railsの既存の仕組みを壊さずに babel
    * いいかjs、君はあくまで app/assets/javascript な存在なんだ！

## Web & Native Apps
* クックパッドモデルはGoogleのクローラにもやさしいのでメディア系のサービスに向いている
* ネイティブアプリ向けにionicを使う場合、うまく CommonJS Module 化すればコードベースの共有ができる
* Basecamp謹製のハイブリットアプリフレームワークが公開されている
    * [turbolinks/turbolinks\-ios at v1\.0\.2](https://github.com/turbolinks/turbolinks-ios/tree/v1.0.2)
    * [turbolinks/turbolinks\-android at 1\.0\.3](https://github.com/turbolinks/turbolinks-android/tree/1.0.3)

## テスト
* テストがなくても問題ないくらいJavaScriptは薄しておく
    * Non Single Page Application
    * ページ遷移しろ
    * そもそもフルスタックのjsフレームワークが必要な事態が異常やったんや
* でもテストはかけるようにしておく
    * Unitテストを走らせるならNodeで
    * 大事なところはPhantomJSから固めにいく

## 学習コスト
* AltJSやクライアントサイドフレームワークに比べると前提知識が少ない
* ES2015なら完全な後方互換性があるのでES5の知識は生きる
* ES5そんなに知らない人もES2015は未来の標準なので知っておいて損はない
    * そのうちプリコンパイラをかませなくてもそのままブラウザで動くようになるんやで

## 開発ツール
* IDEの恩恵にガンガンあずかっていく
    * IntelliJ
    * 共通の EditorConfig, lint

## 所感
* バイバイ CoffeeScript
    * 感慨深い
    * ES2015に受け継がれてる部分も多いので寂しくなんかないよ
    * 雑にテストを書くときには依然重宝するのでこれからもお世話になります
* Turbolinksが扱いやすい
    * 正しい指針があるのは説明コストが低くてよい
    * もちろん雑に書く人は予期せぬ挙動に悩まされることになる
* ES2015のテンプレートリテラルは薄いjsにも有用
    * cf. [TemplateStrings.md](https://gist.github.com/kuu/b7eb679a3ad48d980ed3)
* ES5の変態js文化から開放される
    * モジュールある
    * クロージャ乱用しなくて済む

## 参考文献
* [モダンJavaScript開発環境 on Rails - クックパッド開発者ブログ](http://techlife.cookpad.com/entry/2015/12/14/130041)
* [JavaScript - テストがないJS環境にモダンなテスト環境を導入していく - Qiita](http://qiita.com/mizchi/items/bdf84f0b1c11c2870290)
* [Javascriptを使うのをやめろ：Railsの時代遅れ云々についての結論 - Qiita](http://qiita.com/kaiinui/items/dad6180f1910c6a4bfd5)
    * js分かってない人が書いてるわけじゃないのがポイント
PaaS, IaaS, SaaSのステータスページとRSS/AtomのURLまとめ


随時更新の予定ですが、編集リクエストで追加頂けると大変嬉しいです。

# PaaS

## Heroku

### スターテスページ
https://status.heroku.com/

### RSS
https://status.heroku.com/feed



# IaaS

## AWS

### ステータスページ
http://status.aws.amazon.com/

### RSS
http://status.aws.amazon.com/rss/all.rss

※Reasion毎、Service毎のフィードも用意されている

## GCP

### ステータスページ
https://status.cloud.google.com/

### RSS
https://status.cloud.google.com/feed.atom



# SaaS

## GitHub

### ステータスページ
https://status.github.com/

### RSS
https://status.github.com/messages.rss


## TresureData

### ステータスページ
http://status.treasuredata.com/

### RSS
http://status.treasuredata.com/history.rss

### Atom
http://status.treasuredata.com/history.atom

## mackerel

### ステータスページ
http://status.mackerel.io/

### RSS
http://status.mackerel.io/pages/5344e2be5cf8a32665000009/rss



## CircleCI

### ステータスページ
http://status.circleci.com/

### RSS
http://status.circleci.com/history.rss

### Atom
http://status.circleci.com/history.atom


## TraviceCI

### ステータスページ
https://www.traviscistatus.com/

### RSS
https://www.traviscistatus.com/history.rss

### Atom
https://www.traviscistatus.com/history.atom


## Shippable

### ステータスページ
http://status.shippable.com/

### RSS
http://status.shippable.com/history.rss

### Atom
http://status.shippable.com/history.atom


## wercker

### ステータスページ
http://status.wercker.com/



## NewRelic

### ステータスページ
https://status.newrelic.com/

### RSS
https://status.newrelic.com/history.rss

### Atom
https://status.newrelic.com/history.atom


## Datadog

### ステータスページ
http://status.datadoghq.com/

### RSS
http://status.datadoghq.com/history.atom

### Atom
http://status.datadoghq.com/history.atom


## Bugsnag

## ステータスページ
https://bugsnag.statuspage.io/

### RSS
https://bugsnag.statuspage.io/history.rss

### Atom
https://bugsnag.statuspage.io/history.atom



# 所感
[StatusPage.io](https://www.statuspage.io/)を利用しているSaaS多し。
sed の長めのスクリプトをごりごり書いたときのメモ

sed は、perl などと同じように、(割と長めの)スクリプトとして記述できる。その際に、どういう考え方でスクリプトを記述するべきか。

* パターンスペースとホールドスペースをうまく操作する
* ホールドスペースに対して行える操作はすごく限定的
 * パターンスペースとの入れ替え
 * パターンスペースの内容をパターンスペースへ移動ないし追記
 * パターンスペースへホールドスペースの内容を移動ないし追記
* 文字列の編集だったり、パターン一致による条件判定は、すべてパターンスペースに対してのみ行うことができる
 * z コマンドでパターンスペースを空にできる('s/.*//'と同じ効果)
* サイクルの基本的な流れ:
 * stdin から1行読み込んでそれをパターンスペースに配置
 * スクリプトを上から順に実行する
 * パターンスペースの内容を出力(`-n`オプションで抑制可能)
* スクリプト中で b コマンドによって jump ができる。複合コマンドの中だろうが、b コマンドから後ろの方だろうが、どこにでも jump できる。C 言語の jumpto が一番近い。jump した後にはいつもと同じようにそこから実行が平然と再会される。
Java で gRPC

[Go はできたけど](http://qiita.com/y-okubo/items/e20f24962b935dc46c0b)、めげずに Java も頑張りたい。

# メモ
* Homebrew でインストールできる protobuf は古いのでアンインストール
* [こちら](https://github.com/google/protobuf/releases)で Java 版を落としてインストール
* 手順は README を読む
  * 頑張って make しよう
* [grpc-java](https://github.com/grpc/grpc-java)をビルド
  * [手順はこちら](https://github.com/grpc/grpc-java/tree/master/compiler)
  * [詰まったらここ](https://github.com/grpc/grpc-java/issues/581)
  * なんとなく `cp build/exe/java_plugin/protoc-gen-grpc-java /usr/local/bin/` でコピー
* 以下のコマンドをそれぞれ実行（一発でできる方法があるはず）
  * `protoc --java_out=java/src/main/java awesome_service.proto`
  * `protoc --plugin=protoc-gen-grpc-java=/usr/local/bin/protoc-gen-grpc-java --grpc-java_out=java/src/main/java  awesome_service.proto`

# 成果物
* https://github.com/y-okubo/grpc-test/tree/master/java
  * NetBeans でお試し下さい

# 感想など
* Java 大変
* Maven 面倒
  * 半日もかかっちゃったよ
ハッカーにしか解けないパズル?


ハッカーにしか解けないパズル的なものを作ってみました。

![](https://raw.githubusercontent.com/mba-hack/images/master/terminal.jquery.png)

https://syui.github.io/terminal

## ヒント

使用しているOSがArch Linuxでなくても解けるようになっています。


## これを作った経緯

[【パズル１】ほとんどのエンジニアには解けるが、下位10％のダメなエンジニアにだけ解けないパズル?](http://tango-ruby.hatenablog.com/entry/2015/11/30/122814)

これをやってみて、自分もこういうの作ってみたいなーと思ったのがきっかけ。

内容的にネットワーク関連ぽいので、エンジニアではなく、ハッカーとしましたが、別にタイトルはなんでも良かったです。それぽい雰囲気が出てれば。

## 難易度

特に難易度の設定はしていないのですが、作った本人から言わせれば簡単に解けるようになってると思ってます。


したがって、「ほとんどのエンジニアには解けるが、下位10％のダメなエンジニアにだけ解けないパズル?」的な難易度に相当するかと。

しかし、この点に関しては、作った本人の意見などはあまりあてにならないのでしょう。

不備や欠陥、分かりにくさから解答に辿りつけない可能性もありますので、その場合、難易度は相当高くなるかもしれません。俗に言う罠。

## 感想

問題は簡単に解けそうだけど、作るのが面倒くさかったです。

むしろ、判定パズルとして機能してなくて、それぽい雰囲気を味わうだけのもののような気も...。

解いてもらえれば嬉しいですが、「こういうの作ってみたいなー」と思い、とりあえず実行できたのでよかった。(ほっ

あと、遊び or 陽動で無関係なコマンドとかもあります(全部が正解に直結するわけではない)。

## 変更点

- エラーが出る場合、ヒントを出すようにしました(ヒント : ブラウザのjavascript,cookie,addon の設定によってエラーが出る場合があります)

- ソースコードを少し複雑に変更にしてみました

- 404ページをカスタマイズしました

- 正解者をトップに表示するようにしました
GNU Octave で逆行列を計算する方法

[GNU Octave](http://www.gnu.org/software/octave/) で逆行列を計算する手順について書いていきます。Octave 本体は既にインストールされていると仮定します。

## 逆行列

行列 $A$ が存在するとき、 $AA^{-1} = I$ かつ $A^{-1}A = I$ を満たす $A^{-1}$ を「$A$ の逆行列」と言います。ここでの $I$ は単位行列です。

## 具体的な例

次のような $A$ があるとします。

```math
A = \left(
  \begin{array}{cc}
    3 & 4 \\
    2 & 16 \\
  \end{array}
\right)
```

これの逆行列を Octave で計算していきます。

```
(行列 A を宣言する)
octave:1> A = [3 4; 2 16]
A =

    3    4
    2   16


(pinv() 関数で逆行列を求める)
octave:2> pinv(A)
ans =

   0.400000  -0.100000
  -0.050000   0.075000


(逆行列を inverseOfA という変数に代入する)
octave:3> inverseOfA = pinv(A)
inverseOfA =

   0.400000  -0.100000
  -0.050000   0.075000


(A と A の逆行列の積をとり、単位行列になることを確認する)
octave:4> A * inverseOfA
ans =

   1.00000   0.00000
  -0.00000   1.00000


(A の逆行列と A の積をとり、単位行列になることを確認する: 浮動小数点数の計算誤差が出る)
octave:5> inverseOfA * A
ans =

   1.0000e+00  -4.4409e-16
   2.7756e-17   1.0000e+00
```

`pinv()` で計算し、$A$ の逆行列は次のように求まることが分かります。

```math
A^{-1} = \left(
  \begin{array}{cc}
    0.4 & -0.1 \\
    -0.05 & 0.075 \\
  \end{array}
\right)
```
UITextFieldに入力文字数を表示する


# これはなに？
- タイトルどおり
- 検索しても同じようなのを見かけなかったので投稿してみた
- サンプルでは11文字以上になると赤字になるようにした

# やり方

## 1.UITextField作る

```objc:ViewController.m
    self.textField = [[UITextField alloc] initWithFrame:CGRectMake(14, 0, self.view.frame.size.width - 14, 44)];
    self.textField.placeholder = @"何か入力してください。";
    self.textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    self.textField.textAlignment = NSTextAlignmentLeft;
    self.textField.backgroundColor = [UIColor clearColor];
    self.textField.delegate = self;
    [self.textField addTarget:self
                       action:@selector(textFieldEditing:)
             forControlEvents:UIControlEventEditingChanged];
```

## 2.文字数を表示するUILabel

```objc:ViewController.m
	self.currentLengthLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.view.frame.size.width-50, 2, 30, 10)];
    self.currentLengthLabel.font = [UIFont systemFontOfSize:10];
    self.currentLengthLabel.hidden = YES;
    self.currentLengthLabel.textAlignment = NSTextAlignmentRight;
    [self changeCurrentLengthText:0];
    [self.textField addSubview:self.currentLengthLabel];
```

## 3.文字数の取得

```objc:ViewController.m
#pragma mark - 文字数カウント
- (void)changeCurrentLengthText:(NSInteger)currentLength
{
    self.currentLengthLabel.text = [NSString stringWithFormat:@"%ld/%ld", (long)currentLength, (long)MAXTITLE];
    
    if (currentLength > MAXTITLE) {
        self.currentLengthLabel.textColor = [UIColor redColor];
    } else {
        self.currentLengthLabel.textColor = [UIColor lightGrayColor];
    }
}
```

## 4.UITextFieldDelegateで文字数の表示の調整

```objc:ViewController.m
#pragma mark - <UITextFieldDelegate>
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    self.currentLengthLabel.hidden = NO;
    [self changeCurrentLengthText:textField.text.length];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    self.currentLengthLabel.hidden = YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [self.textField resignFirstResponder];
    return YES;
}

- (BOOL)textFieldShouldClear:(UITextField *)textField
{
    [self changeCurrentLengthText:0];
    return YES;
}

- (void)textFieldEditing:(UITextField*)textField
{
    [self changeCurrentLengthText:textField.text.length];
}
```
Zybo / Zynq > link > youtube > ZYNQ @ Microelectronic Systems Design Research Group


[ZYNQ @ Microelectronic Systems Design Research Group](https://www.youtube.com/playlist?list=PL4D6H9w4Ihdp0YRExoQXfbVMRL1GgEPCm)

ゆっくりしゃべっているので時間がかかる。
youtubeの1.5倍速で見るのでいい。リスニングしにくいことはない。
今さら聞けない！環境変数とシェル変数の違いと定義方法

Linuxでの環境変数の定義方法を調べていたら、環境変数に似たシェル変数というものを知りました。どうやら、指定方法も違ければ、利用できるスコープも違うとのこと。知らなかったよ。。。ということで、環境変数とシェル変数の違いについてまとめてみました。

# 環境変数とシェル変数の違い

> シェル変数は現在実行中のシェルだけで有効な変数ですが，環境変数はシェルから実行したコマンドにも引き継がれる変数です。
> 再入門　体で覚えるLinuxの基本：ITpro http://itpro.nikkeibp.co.jp/article/COLUMN/20060620/241337/

# 環境変数とシェル変数の定義方法

## シェル変数

* `$ HOGE=aiueo`  
このプロセス内で有効
* `$ HOGE=aiueo command`  
command実行中のみ有効。commandの前にセミコロンがないことに注意

## 環境変数

シェル変数に export をつけることで、環境変数となり、子プロセスでも利用できるようになる（変数はターミナルからログアウトもしくはexitするまで保持）

* `$ export HOGE=aiueo`  
なお `$ HOGE=aiueo; export HOGE` でも同じ。  
使用例）`export LANG=ja_JP.eucJP`

永続的に変数の値を設定変更したいのであれば、
> 環境変数をログインする度に手で入力することはありません。~/.bashrc や ~/.bash_profile といったファイルで export 文を上のように書いておけば良いのです。
> 引用元：https://linuxshugendo.wordpress.com/2013/12/26/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%A3%E3%81%A6%E4%BD%95%E3%81%AA%E3%81%AE%E3%81%95%EF%BC%9F/

また、Apache プロセスが利用する環境変数は、 SetEnv ディレクティブで設定できたりする。
http://httpd.apache.org/docs/2.0/ja/mod/mod_env.html#setenv

# 参考サイト

勉強になりました。ありがとうございました。

* [Linux 環境変数有効範囲 - Qiita](http://qiita.com/medaka5/items/9fbd751e20f8a026211b)
* [シェル変数と環境変数の違いをコマンドラインで確認する - Qiita]
(http://qiita.com/kure/items/f76d8242b97280a247a1)
Redmineを、GIt、SVNホスティング付きですぐに使えるdockerイメージ作った

職場ではRedmineを使ってタスク管理をしている。このRedmineの構築に結構苦労するので、この度Dockerコンテナ化することにした。

* https://hub.docker.com/r/74th/redmine-all-in-one/
* https://github.com/74th/docker-redmine-all-in-one

特徴は以下のとおり。

* 1コンテナで、すべてできている（DB、Redmine本体、Git、SVNホスティング含む）
* SVNのホスティングが付いている。http://dockerhost/svn/reponame
* Gitのホスティングが付いている。http://dockerhost/git/reponame
* Backlogs、SCMCreator、Code Reviewなどのプラグインが同梱しているため、すぐ使える
* JP、ENタグには、すぐに使えるように、初期データをロード済み。

使うためには、[dockerをインストール](https://docs.docker.com/)して、以下のコマンドを実行する。

```
docker run -d -p 80:80 --name redmine --restart=unless-stopped 74th/redmine-all-in-one:JP
```

上記コマンドは、自動起動させる`--restart=unless-stopped`が含まれている。終了させるには`docker stop redmine`とする必要がある。また、コンテナ名、ポート番号を変えれば、いくつでもRedmineを立てることができる。

## ノート

ALMiniumというとてもいい感じのRedmineを自動構築してくれるプロダクトがあったが、最近の更新はないため、dockerで作ることにした。しかし、ALMiniumのレベルに持っていくのは私にはできない。

Redmineの更新に追従している[sameersbn/redmine](https://hub.docker.com/r/sameersbn/redmine/)があり、プラグイン追加機能もあり素晴らしい。しかし、Git、SVNのホスティングは付属できない。

## 2016/5/5追記

このコンテナのMySQLにALMiniumのMySQLdumpを食わせて、dbmigradeを実行したところ、移行できました。
MySQL ユーザー作成・権限付与・削除・表示

# 作成 兼 権限付与
```
GRANT ALL ON データベース.* TO 'ユーザー名'@'%' IDENTIFIED BY 'パスワード';
FLUSH PRIVILEGES;
```


# 削除
```
DROP USER 'ユーザー名'@'%';
```

# 表示
```
SELECT User, Host FROM mysql.user;
```
シェルスクリプトでgetoptsを使う時に参考にする記事メモ

shell scriptでのgetoptsの使い方メモ - Qiita http://qiita.com/edo_m18/items/ccd49cc330cbc1b3ff61
　→サンプルが非常に分かりやすい

bash によるオプション解析 - Qiita http://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
　→詳細

case 文の使用方法 - UNIX & Linux コマンド・シェルスクリプト リファレンス http://shellscript.sunone.me/case.html
　→caseについて
Karabinerでカーソル移動をh、j、k、lにする（備忘録）

# private.xmlに以下を追記
Fnキーを押してh、j、k、lを押すとカーソル移動イベントになる

    <item>
        <name>Fn vim</name>
        <identifier>private.fnvim</identifier>
        <autogen>
            __KeyToKey__
            KeyCode::K, ModifierFlag::FN,
            KeyCode::CURSOR_UP
        </autogen>
        <autogen>
            __KeyToKey__
            KeyCode::J, ModifierFlag::FN,
            KeyCode::CURSOR_DOWN
        </autogen>
        <autogen>
            __KeyToKey__
            KeyCode::H, ModifierFlag::FN,
            KeyCode::CURSOR_LEFT
        </autogen>
        <autogen>
            __KeyToKey__
            KeyCode::L, ModifierFlag::FN,
            KeyCode::CURSOR_RIGHT
        </autogen>
    </item>
Zybo > led4_axi_lite_slave.c > 4つのレジスタ > Counter Load Register

http://qiita.com/7of9/items/918514285b04c9b7935a
の続き

```led4_axi_lite_slave.c
			case '1' : // Show all registers
				val = (int)Xil_In32((u32)XPAR_LED4_AXI_LITE_SLAVE_0_BASEADDR);
				printf("Command Register is %x\r\n", val);
				val = (int)Xil_In32((u32)(XPAR_LED4_AXI_LITE_SLAVE_0_BASEADDR+4));
				printf("LED Counter Load Register is %x\r\n", val);
				val = (int)Xil_In32((u32)(XPAR_LED4_AXI_LITE_SLAVE_0_BASEADDR+8));
				printf("LED Monitor Register is %x\r\n", val);
				val = (int)Xil_In32((u32)(XPAR_LED4_AXI_LITE_SLAVE_0_BASEADDR+0xc));
				printf("LED Interval Register is %d (decimal)\r\n", val);
...
```

上記の情報より以下の４つのレジスターがあるようだ

- Command Register
- LED Counter Load Register
- LED Monitor Register
- LED Interval Register


### Counter Load Register

Counter Load Registerの使い方だけわからない。
blogも見ているがどうもわからない。

4ビットでhexadecimalということは`0..F`を入れるということのようだが。

どうも0..Fを入力した時に、4ビットでLED4つのON, OFFをするようだ。

ただし、それがうまく機能しない時がある。LEDが4つ点灯状態で3と入力しても4つ全部が点灯している時がある。

メニューの2を選択した後に、3を入力して4ビットに対する16進数を入力すると成功しやすい気がする。

2のメニューでインターバル動作のON, OFFをするようだ。OFFの時にはCounter Load Registerのセットができる、という仕組みのようだ。
Zybo > XSDKコード > XPAR_LED4_AXI_LITE_BASEADDR > xparameters.hで定義

http://qiita.com/7of9/items/918514285b04c9b7935a
の続き

XSDKでのサンプルコード `led4_axi_lite_slave.c`において以下のような記載がある。

```.c
		switch(inbyte_in) {
			case '1' : // Show all registers
			val = (int) Xil_In32((u32) XPAR_LED4_AXI_LITE_SLAVE_0_BASEADDR);
				printf("Command Register is %x\r\n", val);
				val = (int)Xil_In32((u32)(XPAR_LED4_AXI_LITE_SLAVE_0_BASEADDR+4));
				printf("LED Counter Load Register is %x\r\n", val);
				val = (int)Xil_In32((u32)(XPAR_LED4_AXI_LITE_SLAVE_0_BASEADDR+8));
				printf("LED Monitor Register is %x\r\n", val);
				val = (int)Xil_In32((u32)(XPAR_LED4_AXI_LITE_SLAVE_0_BASEADDR+0xc));
				printf("LED Interval Register is %d (decimal)\r\n", val);
				break;
			case '2' : // Set LED4 Enable or Disable(Toggle, Command Register)
....
```

XPAR_LED4_AXI_LITE_SLAVE_0_BASEADDR
に実際にどういう値が入っているか調べていた。

xparameters.hにあるようだ。

```xparameters.h
/* Definitions for peripheral LED4_AXI_LITE_SLAVE_0 */
#define XPAR_LED4_AXI_LITE_SLAVE_0_BASEADDR 0x40000000
#define XPAR_LED4_AXI_LITE_SLAVE_0_HIGHADDR 0x7FFFFFFF
```

上記がVivado上でどのように設置されているかはまだ分からない。
ListViewにAnimationを設定する方法

今回は、AndroidでListViewにアニメーションを付与する方法を載せます。

まずはじめに、アニメーション動作を作成しましょう。

アニメーション動作の定義は、res/animフォルダ 下に作成したxmlに行います。
プロジェクト作成時にはanimフォルダが無いと思いますので、マニュアルで作成してください。
animフォルダ内に、item_motion.xmlを作成します。


```item_motion.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="-100%"
        android:fromYDelta="50%"
        android:toXDelta="0"
        android:toYDelta="0"
        android:duration="700"  />
</set>
```

fromXDelta、toXDeltaで横の動きを、fromXDelta、toXDeltaで縦の動きを定義できます。
durationで、動作時間を設定できます。


次に、このアニメーションをListViewに追加したいと思います。

ArrayAdapterを継承した中で、アニメーションを付けたいlayoutをinflateしたViewオブジェクトに対して、下記のようにAnimation オブジェクトを作成したものをstartAnimationで与えます。


```lang:filename
// create a new view
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.message_item, viewGroup, false);

//Animation objectを作成
Animation anim = AnimationUtils.loadAnimation(viewGroup.getContext(), R.anim.item_motion);


v.startAnimation(anim);

```



以上です。
Powershell > 再帰的grep > dir -Recurse | Select-String -Pattern "XPAR_LED4"

```txt:動作環境
Windows 8.1 pro (64bit)
Vivado 2015.4
```

VivadoとXSDKで勉強中。XPAR_LED4_という文字列を使っているところをgrepしたい。

```
> dir -Recurse | Select-String -Pattern "XPAR_LED4"
```

というのでいいようだ。

参考 http://www.jamescoyle.net/how-to/1205-how-to-use-powershell-to-recursively-search-for-text-within-files-on-windows

.hファイルだけの場合は以下のようにする。

```
> dir *.h -Recurse | Select-String -Pattern "XPAR_LED4"
```
ラズベリーパイに固定IPアドレスを設定する

### ラズベリーパイに固定IPアドレスを設定する
(2016.01.30 NOOBS v1.5.0)

NOOBS v1.4.1 あたりから固定IPアドレスの設定方法が変更になったらしく、
以下の方法を参考にさせていただきました

http://v7.com/raspi3/?page=3
http://sizious.com/2015/08/28/setting-a-static-ip-on-raspberry-pi-on-raspbian-20150505/

___/etc/dhcpcd.conf の編集___

`ifconfig` とターミナルで入力して、ラズベリーパイのネットワークアドレス（例えば、192.168.1）を調べ、
`sudo vi /etc/dhcpcd.conf` として、以下のような感じの記述を追記しました

```
interface eth0
static ip_address=192.168.1.x
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
```

static ip_address に設定したいラズベリーパイの IPアドレス、
static routers にルーターの IPアドレス、
static domain_name_servers に DNSサーバーの IPアドレス を記入するそうです

___設定の反映___

```
sudo service dhcpcd reload
```

___チェック１: ifconfig___

`ifconfig` とラズベリーパイのターミナルで入力して、
`inetアドレス` が、指定した IPアドレスになっているかチェック

___チェック２: SSH login from 他のパソコン___

ラズベリーパイのユーザー、パスワードをデフォルトのまま変更していなければ、
LAN内の他のパソコンのターミナルで `ssh pi@192.168.1.x` と入力して、`raspberry` とパスワードを入力してログインできる
(指定した固定 IPアドレスが、他の PCと競合したりすると、ログインできないことがある？？)

___無線の場合___

無線の場合も基本的には、同様にして設定できましたが、
`sudo service dhcpcd reload` では設定が変更されず、再起動が必要でした

前回、[ラズベリーパイで、WN-AC433UK を使用する](http://qiita.com/NariseT/items/e75688831ce13e2b6a4b) で設定した無線LANインタフェース ra0 に固定 IPアドレスを割り振りました
有線の時と同様に、`sudo vi /etc/dhcpcd.conf` として、以下のような感じの記述を追記しました

```
interface ra0
static ip_address=192.168.1.xx
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
```

`sudo reboot` として再起動し、`ifconfig` で 設定した IPアドレスになっていることをチェックしました
ISBNコードをAmazonのURIに変換（JavaScript)

##Amazonの商品ページリンクの構成
Amazonの商品URIは「Amazon共通のURI」+「ASINコード」です。
このうち、書籍（紙の本）のASINコードは「『10桁の』ISBNコード」と等価です。

##ISBNコードについて
ISBNコードはかつて10桁でしたが、2007年1月1日より13桁に変更されました。
よって、最近の販売されている本は全て13桁となっています。
このことから、13桁を10桁に変更する必要があります。
###ISBNコードの構成
####13桁（現行規格）
（上位3桁：接頭記号）+（9桁：書籍）＋（1桁：チェックデジット）
####10桁（旧規格）
（9桁：書籍）＋（1桁：チェックデジット）
9桁部分は、実際の規格ではグループ記号だとか色々と分かれていますが、旧規格・現行規格ともに共通です（洋書はよくわからない）。
但し、チェックデジットは異なります。
つまり「接頭記号を外してチェックデジットを再計算して入れ替える」ことで13桁から10桁に変換できます。
###チェックデジットの計算方法
####10桁（モジュラス11 ウェイト10-2）
左から計9桁で操作。

- 左の桁から順に10,9,8,と掛けていき総和を取る。
- 総和を11で割り、出た余りを11から引く。
- 出た答えが10ならX、11なら0、それ以外はそのままでチェックデジット。

####13桁（モジュラス10 ウェイト3・1）
左から計12桁で操作。

- 奇数桁、偶数桁を各々で総和をとる。
- 偶数桁の総和に対し、偶数桁に3を掛けた値を加える。
- 得られた値を10で割り、出た余りを10から引く。
- 出た答えが10なら0、それ以外はそのままでチェックデジット。


##コード

- 下記のコードは13桁の誤りをチェックした上で10桁に変換しています。
- 誤りがある場合、falseを返します。
- リンク生成用に呼び出す関数として書いています。
- id は 13桁のISBNコード。

```javascript:JavaScript

BOOK.isbn = function (id) {
'use strict';
  var a, b, c, i;
  if (id.length === 13) {
    a = 0;
    b = 0;
    for (i = 0; i < 6; i = i + 1) {
      a += Number(id.charAt(i * 2));
      b += Number(id.charAt(i * 2 + 1));
    }
    c = (a + b * 3) % 10;
    if (c === 10) {
      c = 0;
    }
    if (c === Number(id.charAt(12))) {
      c = 0;
      id = id.slice(3, 12);
      for (i = 0; i < 10; i = i + 1) {
        c += Number(id.charAt(i)) * (10 - i);
      }
      c = 11 - c % 11;
      if (c === 10) {
        c = 'X';
      } else {
        if (c === 11) {
          c = 0;
        } 
      }
      id = id + String(c);
      return String('http://www.amazon.co.jp/dp/' + id + '/');
    }
    return false;
  }
  return false;
};
```
Erlang始めました（1 - 準備編）

# 始まりはこの言葉から
>「プログラミング言語は複数習得すべき」

（*- プログラマが知るべき97のこと -*）
それも、今使っている言語とは違うパラダイムの言語を（ちょっと文章変えました）。

# なぜErlang？
業務ではpythonを使っているので、関数型言語を習得しようと思いました。
自分が知っている関数型言語はscalaとErlang。
で、Erlangは弊社のアプリで使用事例があるので、Erlangを選択、という単純な理由です。
深く考えてなくてすみません。

# 今回の教科書
**すごいErlang ゆかいに学ぼう！**（ *- オーム社 -*）

# Erlangのインストール開始
使用マシンはMacです。
homebrewでerlangをインストールし、まずはErlangシェルなるものを起動するところから！
ってことで、下記を実行。

```
brew install erlang
```

10分くらいかな（？）結構時間が経過した後で表示されたのが下記の画面。
![スクリーンショット 2016-01-30 11.16.39.png](https://qiita-image-store.s3.amazonaws.com/0/98381/156817c8-d58e-d25f-dc03-a17eda26c129.png)

**MacOS10.7はもう古かった！！**

確かに自宅のMac、購入したの4年以上前だよな〜・・・ってことでOSを最新にバージョンアップ（10.11へ！）

# Erlangシェル起動への道 - もうちょっと続くんじゃよ
バージョンアップが終わり、Erlangのインストールを続行（OSのバージョンアップでMacの起動に時間がかかるようになったのはマシンスペックのせい、と思うことにしよう。実際メモリ4Gしかないし）。

```
brew install erlang
```
![5G46N.jpeg](https://qiita-image-store.s3.amazonaws.com/0/98381/3fcc26da-493c-9d87-a797-01613d0755ba.jpeg)

![スクリーンショット 2016-01-30 12.01.02.png](https://qiita-image-store.s3.amazonaws.com/0/98381/ed80ad63-718a-98cf-b668-437e3a919b0a.png)

**orz**

まだ足らんかったぁ・・・
```
brew link autoconf automake libtool
```
（ッターン！）
```
brew install erlang
```
（ッターン！）

![スクリーンショット 2016-01-30 11.29.57.png](https://qiita-image-store.s3.amazonaws.com/0/98381/4f5c02d4-0bb7-dc9b-9db2-84511360729f.png)

やっとインストール開始した！！
・・・その後インストールは無事終了しました。

# お待ちかね、Erlangシェル起動
すべてはこの起動から始まる・・・ということで

```
erl
```

![スクリーンショット 2016-01-30 12.05.42.png](https://qiita-image-store.s3.amazonaws.com/0/98381/606e7e86-7ae2-64f0-1a57-5399fed3deb1.png)
お・・・

![スクリーンショット 2016-01-30 12.06.54.png](https://qiita-image-store.s3.amazonaws.com/0/98381/8a500231-92f0-4c63-7d72-ba6092f8bbc1.png)
おお・・・

![スクリーンショット 2016-01-30 12.08.40.png](https://qiita-image-store.s3.amazonaws.com/0/98381/abd13d57-09de-d5f3-2610-294c81ec9070.png)
おおお！（くどい）

準備が整いましたので、次回から「すごいErlang ゆかいに学ぼう！」に沿って学習していきます。
超初歩的なところから始まりますが、お付き合いのほど、よろしくお願いします。
Go で interface {} の中身がポインタならその参照先を取得する

文字列を渡しても文字列へのポインタを渡しても、文字列を得る方法。

例えば関数の引数として interface {} な変数を受け取ったとして、
その中身が文字列 "abc" ならその値を、中身が文字列 "abc" へのポインタならその参照先である "abc" を取得する。

```go
func dereferenceIfPtr(value interface{}) interface{} {
	return reflect.Indirect(reflect.ValueOf(value)).Interface()
}
```

実行例は以下の場所にあります。
https://play.golang.org/p/U6_5C16O-rI


# 以前書いていたモノ

```go
func dereferenceIfPtr(value interface{}) interface{} {
	if reflect.TypeOf(value).Kind() == reflect.Ptr {
		return reflect.ValueOf(value).Elem().Interface()
		//return *value
		//=> invalid indirect of value (type interface {})
	} else {
		return value
	}
}
```

実行例は以下の場所にあります。
https://play.golang.org/p/1vFSqzDmA0
【Python＋heroku】Python入れてない状態からherokuで何か表示するまで（前編）

#これはなに？
heroku入門系の記事で、
OSXでrubyでとかnode.jsでとかはよく見かけるんですけど
そうじゃない切り口で。

- Pythonで
- Win7で
- herokuにアカウント登録はしている
- （gitとはまだ仲良しじゃない）

こんなところからスタートしてみます。
ゴールとしては、アプリとかそういうとこまでは行きません。なんか表示するまで。

heroku公式のPython導入ドキュメント
https://devcenter.heroku.com/articles/getting-started-with-python
の体験メモでもあります（ただし自分の要りそうなとこだけつまみ食い）。

***

こちらでの掲載は終了し、
現在はzennに移っております。

前編
https://zenn.dev/it_ks/articles/ba346db1fec156

後編
https://zenn.dev/it_ks/articles/ae1e3db51fda7b
Pythonでヤマト運輸の荷物追跡

Pythonを用いてヤマト運輸の荷物を追跡します。
使用しているmoduleは
requests : http://docs.python-requests.org/en/latest/
のみです。

このコードは下記APIを利用しています。提供者さんありがとうございます。
http://nanoappli.com/blog/archives/603

因みにこのコードはお問い合わせ番号を整数型であることを前提としています。string型などがでるとType-errorか何か出ると思います()

```py:ヤマト運輸荷物追跡.py
#coding: utf-8

import requests

def GET_status(number):
    URL_JSON = 'http://nanoappli.com/tracking/api/%d.json' % number
    r = requests.get(URL_JSON)
    j = r.json()
    status = j['status']
    itemType = j['itemType']
    slipNo = j['slipNo']
    statusList = j['statusList']
    for status_ in statusList:
        date = status_['date']
        time = status_['time']
        placeName = status_['placeName']
        placeCode = status_['placeCode'];
        data_ =  u"""[最新状況]: %s
[配送物種別]: %s
[配送物伝票番号]: %s
[現在位置]: %s %s ([時刻] %s %s )
""" % (status, itemType, slipNo, placeName, placeCode, date, time)
        return data_

if __name__ == '__main__':
    number = input("> ")
    i = GET_status(number)
    print i
```
Vagrant + Chefを使っている自分が、Dockerを使ってみる前の下調べ

# Dockerは何を解決するのか？
Dockerとはオープンソースの次世代仮想化技術で、アプリケーションを「コンテナ」にパッケージングして、デプロイ、実行できます。
Go言語で書かれていてLinuxカーネルのみに依存する

## ポイント
* コンテナにアプリをパッケージングして、デプロイ、実行までできる
* 1度ビルドすればどこでも動く
* Dockefileさえあれば、いつでも再現可能
* Go言語で書かれている

### つまり
DockerfileにOSのスクラッチイメージからライブラリ、環境変数などのパッケージングするものを書きます。それをビルドして実行してテストしてデプロイするだけで、手元で動いていたものをプロダクション環境にそのまま持って行って動かすことができる

端的に言うと、

```
デプロイの作業が簡単になる
```

```
Docerfileによってインフラをコード化。（この点はVagnrantと類似している。）
```

```
Dockerはコンテナ型仮想化
```

```
仮想化なのでプラットフォームやハードウェアからは隔離された環境
```

```
すべてのコンテナには固有のIDがあります。
```

```
Dockerfileの1行ごとにコンテナとコンテナIDが作られ、コンテナは親からの差分を保存していく。例えば一番ベースとなるコンテナからapt-getなどをすると、その差分だけを保存することになります。何かに失敗したらgitのように失敗する前に戻すことが可能
```

| Docker | Vagrant |
|:-----------|:------------|
| コンテナ型仮想化       |     ホスト型仮想化     |
|物理マシンのLinuxカーネルは共有して、別々のユーザー空間を作り出すというアプローチ|物理マシンの上の仮想空間に独自のLinuxカーネルやOSなどを作成（インストール）する|
|ビルドもデプロイも高速、オーバーヘッドも少ないので動作が軽い|逆に重い（左記に比べて）|

# サーバ側の設定
DBインストールとかもろもろのアプリのインストール、サーバー側の設定については以下のとおり。

| Docker | Vagrant |
|:-----------|:------------|
| Dockerfile |  シェル or Chef in Vagrantfile  |

※Dockerでコンテナをして、Chefでサーバー設定も可能だが、Dockerfile自体がサーバーの設定を記述して自動化する機能を提供しているためあまり意味がない。

| Docker | Vagrant with Chef |
|:-----------|:------------|
| プロセス内でその仮想環境が構築され、そのプロセスを消すと仮想環境自体もなくなるため基本的には毎回一からDockerfileを使って仮想環境を構築する |  chefのメリットのひとつに冪等性があるが、それはすでにサーバーの設定が入っているところに何度も実行しても環境が同じであることを保証したいするため  |


# VM（仮想マシン）とコンテナの違い
![dockerkiso06.jpg](https://qiita-image-store.s3.amazonaws.com/0/64537/8ef81a92-341c-bc7c-71da-f2a186b5e5b8.jpeg)


VMではVMごとにゲストOSがあって、その上にライブラリとアプリが乗っている。
コンテナではホストOSのうえにDockerエンジンがいて、そこに各種ライブラリがいる。
要は、コンテナが同じライブラリを共有しているので少ディスクスペースかつ少メモリ、それでいて隔離されている環境を実現できる。


上記を踏まえてDockerでまずは環境構築をしてみる。
PythonでWIFIスポットスキャン

## 前書き
このスプリクトの実行環境はOSXであることを前提にしています。

Macでwifiスポットをスキャンする場合は、コマンド
```
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s
```
を使えばいいようです。
参考URL
http://yukisakamoto.hatenablog.com/entry/2013/09/24/014540

それをPythonで実行し結果をreturnさせるのは案外簡単なようで
わずか数行でできてしまうそう

```py:filename
#coding: utf-8

import commands

def main():
    cmm = "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s"
    try:
        check = commands.getoutput(cmm)
    except Exception, e:
    	print e

if __name__ == '__main__':
	main()

```
raspberry piでSG-90サーボモータを動かす

# やりたいこと

ちょっとしたボタンをサーボで押したい

2016/03/08 これでも動くことは動きますが、電流不足で動いたり動かなかったりするのでお試しでちょっと動かす以外の用途にはおすすめしません。ドハマリしました(≧ヘ≦)。別記事で整理します。

# 買ってきたもの

- SG-90 秋月電子
- ジャンパ オスーメス

# コード

```py
from RPIO import PWM
import time

servo = PWM.Servo()
SERVO_X = 23

# 0
servo.set_servo(SERVO_X, 1500)
time.sleep(1)

# -90
servo.set_servo(SERVO_X, 400)
time.sleep(1)

# 0
servo.set_servo(SERVO_X, 1500)
time.sleep(1)

servo.stop_servo(SERVO_X)
```

# できたこと

どうもサーボモータというのは仕様通りにやってるつもりでも、0°、90°、-90°にきっちり動かない気がする。そもそもどこが0°なのかもよくわからないし、サーボモータってそういうもんなのだろうか。

電流的に大丈夫かな、と思ったけど特に問題なし。

![push_button-compressor.gif](https://qiita-image-store.s3.amazonaws.com/0/54356/06432d2a-44ab-b612-a245-0baef4e5db7e.gif)
Zybo > Link > The MicroZed Chronicles - Using the Zynq 101 (English Edition) [Kindle版]

Zybo関連の資料として以下をamazonで見つけた。linkとしてはあえて張らないので、興味がある方はamazonで検索されたし。

The MicroZed Chronicles - Using the Zynq 101 (English Edition) [Kindle版]

Adam Taylor’s MicroZed Chronicles
のまとめらしい。購入した。

元ブログは以下のような記事があったりするが、トップへの行き方がわからない。
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-98-SDSoC-In-depth-Example/ba-p/651906

### 購入してみたが...

実際に見たところ、以下の点が良くない  (動作環境 > iPad mini4)

- 目次のテキストがぐちゃぐちゃ (e.g. ` First________Stage_______Boot________Loader____`など)
- 表示、ページ切替が重い
- コードが数ページにわたって記載されていてソースリーディングしにくい

それでも得るものは(900円分は)あるはず。
Railsで「多言語データベース付き掲示板」を開発した際に利用したgemを紹介

# 開発したサービス
Topics（トピックス）- 多言語データベース付き掲示板
http://www.topics.global/ja

# バージョン
Ruby 2.2.4
Rails 4.2.5

# gemの紹介

##デザイン
- [materialize-sass](https://github.com/mkhairi/materialize-sass)  ( [Materialize](http://materializecss.com/) )

マテリアルデザインのフレームワーク。


##テンプレートエンジン
- [slim-rails](https://github.com/slim-template/slim-rails)

##コメント
- [acts_as_commentable_with_threading](https://github.com/elight/acts_as_commentable_with_threading)

##コメントへの投票
- [acts_as_votable](https://github.com/ryanto/acts_as_votable)

##Twiiterへの投稿
- [twitter](https://github.com/sferik/twitter) 

##フォロー、お気に入り
- [acts_as_follower](https://github.com/tcocca/acts_as_follower)

本サービスの場合、モデルによって「フォロー」か「お気に入り」のどちらか一方しか利用ないのでこれ一つで。

色々な状況に対応したいならこれがいいかも。

- [acts_in_relation](https://github.com/kami-zh/acts_in_relation)  ( [Railsでフォロー機能などを簡単に実装できるGemを公開しました](http://kami30k.com/posts/2/) )

##多言語関連
- [rails-i18n](https://github.com/svenfuchs/rails-i18n)
- [i18n-js](https://github.com/fnando/i18n-js)
- [globalize](https://github.com/globalize/globalize)
- [globalize-accessors](https://github.com/globalize/globalize-accessors)

##ユーザー管理・認証
- [devise](https://github.com/plataformatec/devise) 
- [omniauth](https://github.com/intridea/omniauth) 
- [omniauth-twitter](https://github.com/arunagw/omniauth-twitter) 

##検索
- [ransack](https://github.com/activerecord-hackery/ransack) 

##ページネーション(Ajax）
- [kaminari](https://github.com/amatsuda/kaminari) 

##管理画面
- [activeadmin](https://github.com/activeadmin/activeadmin) 

一時的に利用。

##ランダム文字列
- [saikoro](https://github.com/ttanimichi/saikoro) (
[ランダムな文字列を生成するgemを作った](http://qiita.com/ttanimichi/items/7e0d660e8f5984d3556a))

SecureRandomは微妙に違うって時に。

##エラーぺージ
- [rexception](https://github.com/kami-zh/rexception) (
[Railsで動的にエラーページを表示するGemを公開しました](http://kami30k.com/posts/3/))

一時的に利用。シンプルで使いやすい。

##エラー通知(Slack）
- [exception_notification](https://github.com/smartinez87/exception_notification) 
- [slack-notifier](https://github.com/stevenosloan/slack-notifier) 

##パフォーマンス監視
- [newrelic_rpm](https://github.com/newrelic/rpm)   (
http://newrelic.com/ )

##試したけど使わなかったgem
- [markable](https://github.com/chrome/markable) 
- [impressionist](https://github.com/charlotte-ruby/impressionist) 
- その他
［Android初心者用🔰］R.javaが消えた時、リソースidを指定してエラーがでた時の対処法

まず、初めに 現在EclipseでAndroidアプリ開発をしている方は、Android Studioへの移行を強く推奨します。
(http://android-developers.blogspot.jp/2015/06/an-update-on-eclipse-android-developer.html?m=1)

この記事は悪魔でも、Androidアプリ開発初心者の私が同じ初心者のためにエラー対処法を書きます。




久しぶりにAndroidアプリを作ってみようと思った時にこのエラーに遭遇したので、メモしておきます。

下記は、今回、私がしたエラー対処なので、その他にも対処法は色々とありますが、まず一例として、

［対処法1］
リソースidの指定でスペルミスをしていないか、確認する。

［対処法2］
R.javaが生成されない時、とりあえず
最低限APIレベルを14に変えてみる。

［対処法3］
R.javaが消えてしまった時、AndroidManifest.xml以外のxmlのエラーを治して、クリーンを行う。

［対処法4］
R.javaがちゃんと生成されていて、それでも
エラーが消えない時、
src内の.javaの
import android.R;を削除

の4つを私はしました。



是非、行ってみて下さい！
Mac でコマンドからスクリーンショットを実行する


## ショートカットからの実行

Mac でスクリーンショットを実行したい場合、下記のようなショートカットが用意されています。

画面全体 : command + shift + 3
画面の一部 : command + shift + 4（スペースキー押下で範囲選択からウィンドウ選択に変更可能）

[Mac でスクリーンショットを撮る方法](https://support.apple.com/ja-jp/HT201361)

ただ、あまりスクリーンショットを日常的に撮らない場合、
上記のショートカットを忘れてしまうこともあるかと思います。

## アプリからの実行

また、Mac には Grab というアプリも用意されています。
場所は `/Applications/Utilities/Grab.app` です。
このアプリでスクリーンショットを撮影することが可能ですが、
ウィンドウをキャプチャする際に都度キャプチャするか否かのダイアログが表示されたり、
画像の保存時には拡張子がtiffとなったりします。

## コマンドからの実行

最後に、本題のコマンドからのスクリーンショットの撮影ですが、
Mac には `screencapture` というコマンドが用意されています。
例えば、

`alias camera='screencapture -i $HOME/Desktop/$(date +%s).png'`

を `.bashrc` に登録しておくと、`camera` コマンドとして
画面の一部を選択する形式で `$HOME/Desktop/` に unixtimestamp + 拡張子名の形式でファイルの保存ができるようになります。

※ `screencapture` コマンドの細かいオプションは `man screencapture` で確認できます。

スクリーンキャプチャ機能を使うときにショートカットを都度検索してしまうような場合に便利な `alias` だと思います。

## コマンドからの実行の応用

`screencapture` コマンドを使って、Electron アプリを作成しました。
https://github.com/blp1526/cammy
メニューバーから気軽にスクリーンキャプチャをすることができます。
Illustratorのレイヤーごとのオブジェクトの数をテキストに書き出すJavaScriptを書いた


ソースコードはこちら。
[LayerObjectCount.jsx](https://gist.github.com/macneko-ayu/dd619c38c097ef1bf853)

久しぶりにExtendScript Toolkit使ったけど、やっぱこの子は使いづらい。
「Materialize」（マテリアルデザインのフレームワーク）でサービスを作ってみた

# 開発したサービス
Topics（トピックス）- 多言語データベース付き掲示板
http://www.topics.global/ja

# バージョン
Materialize v0.97.5
http://materializecss.com/

# Materializeを採用した理由
総合力ではBootstrap系の方が優れているが、デフォルトの色彩調節がとても簡単だったから。
http://materializecss.com/color.html
Windows Console でUDPの送受信

#minGW を使った、UDPの送受信関数
windows 7 のDOS窓で動作する関数です。
###送信側

```c:udpsend.c
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <winsock2.h>

int main(int argc, char** argv)
{
	int sd;
	struct sockaddr_in addr;
	WSADATA wsaData;

	// winsock2の初期化
	WSAStartup(MAKEWORD(2,0), &wsaData);
  
	//socketシステムコール
	//ディスクリプタsdを取得する
	//SOCK_DGRAM <- UDP, SOCK_STREAM<- TCP
	if((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
		perror("socket");
		printf("error:%d\n",WSAGetLastError());
		return -1;
	}
 
	// 送信先アドレスとポート番号を設定する
	memset(&addr,0,sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(12345);	// ポート番号(htons)でネットワークバイトオーダーに変換
	addr.sin_addr.s_addr = inet_addr("127.0.0.1");	//IPアドレスを格納したin_addr構造体
 
    // パケットをUDPで送信
    if(sendto(sd, "I am send process", 17, 0, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
		perror("sendto");
		printf("error:%d\n",WSAGetLastError());
		return -1;
    }

	printf("send end\n");

	// 接続を切断する
    closesocket(sd);
	WSACleanup();

    return 0;
}
```
送信側コンパイル
> gcc udpsend.c libws2_32.lib

### 送信側で、送信元のポート番号が欲しい場合、以下を追加
```c:udpsend.c
	//送信元のポート番号が欲しい場合
	struct sockaddr_in sin;
	int addrlen = sizeof(sin);
	if(getsockname(sd, (struct sockaddr *)&sin, &addrlen) == 0 &&
		sin.sin_family == AF_INET && addrlen == sizeof(sin))
	{
		int local_port = ntohs(sin.sin_port);
		printf("send port %s:%d\n",inet_ntoa(sin.sin_addr),local_port);
	}
```

###受信側

```c:udprecv.c
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <winsock.h>
#include <winsock2.h>

int main() 
{
	WSADATA wsaData;
	SOCKET sockfd, new_sockfd;
	int writer_len, recv_len, on;
	struct sockaddr_in reader_addr, writer_addr;
	struct ip_mreq mreq;
	char buf[1024];

	// winsock2の初期化
	WSAStartup(MAKEWORD(1,1), &wsaData);

	//socketシステムコール
	//ディスクリプタsdを取得する
	//SOCK_DGRAM <- UDP, SOCK_STREAM<- TCP
	if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
		perror("socket");
		printf("error:%d\n",WSAGetLastError());
		return -1;
	}

	/* ファイルディスクリプターで参照されるソケットにオプションの設定 */
	/* SOL_SOCKET : ソケット API 層 */
	/* SO_REUSEADDR : bindが失敗するのを回避 */
	on = 1;
 	if (setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on) ) == SOCKET_ERROR)
    {
		perror("setsockopt");
		printf("error:%d\n",WSAGetLastError());
		return -1;
    }

	// 受信元アドレスとポート番号を設定する
	memset((char *)&reader_addr, 0, sizeof(reader_addr));
	reader_addr.sin_family = AF_INET;
	reader_addr.sin_addr.s_addr = htonl(INADDR_ANY);	//IPアドレスを格納したin_addr構造体
	reader_addr.sin_port = htons(12345);		// ポート番号(htons)でネットワークバイトオーダーに変換

	// ソケットに名前（ポート番号 & IPアドレス）を付ける
	if (bind(sockfd, (struct sockaddr *)&reader_addr, sizeof(reader_addr)) < 0) {
		perror("bind");
		printf("error:%d\n",WSAGetLastError());
		closesocket(sockfd);
		return -1;
	}

	while(1) {
		//パケットをUDPで受信
		recv_len=recv(sockfd, buf, 1024, 0);
		if(recv_len>0){
			printf("%s\n",buf);
			break;
		}
	}

	// 接続を切断する
	closesocket(sockfd);
	WSACleanup();
}
```
受信側コンパイル

> gcc udpread.c libws2_32.lib
Redisのソート済みセット型を使ってRailsで簡単ランキングを作る

# Redisって何？ランキング簡単なの？

Redisにはソート済みセット型という型が用意されており、これを使うとアクセスランキングみたいなモノがお手軽に作れたのでRailsでの実装方法をメモ。

ソート済みセット型についての解説はこちらのブログがとても分かり易いです。
[Redisでアクセスランキングを実装](https://siguniang.wordpress.com/2014/09/15/access-ranking-with-redis-sorted-sets/)

# 環境設定等

まずは[redisのインストール](http://qiita.com/checkpoint/items/58b9b0193c0c46400eeb)

Gemfileを忘れずに

```rb
gem 'redis'
```

続いてRailsのconfig/environmentsにエンドポイントを記述して環境変数にセット

```rb
ENV["REDIS"] = "http://localhost:6379"
```

Railsのconfig/initializersにて環境変数からRedisオブジェクトを生成

```rb
require 'redis'

uri = URI.parse(ENV["REDIS"])
REDIS = Redis.new(host: uri.host, port: uri.port)
```

これで準備はおｋです


# ランキングデータの保存と呼び出し

例えばカテゴリ別の記事アクセスランキング何かを作る場合、アクセス時にこんな感じでランキングデータをセット

```rb
REDIS.zincrby "ranking/#{category.id}/#{Date.today.to_s}", 1, "#{article.id}"
```

週間ランキングの上位20カテゴリを呼び出すならkeyをマージしてこんな感じ

```rb
(7.days.ago.to_date..Date.today).each do |date|
  keys << "ranking/#{category.id}/#{date.to_s}"
end
REDIS.zunionstore("ranking/#{category.id}/weekly", keys)
REDIS.zrevrange "ranking/#{category.id}/weekly", 0, 19

```

スコア付きで欲しいならオプションを指定

```rb
REDIS.zrevrange "ranking/#{category.id}/monthly", 0, 19, withscores: true
```

いずれも配列形式で返って来ます

# Redisすげー！
この手のランキングは勿論リレーショナルデータベース＋バッチ処理とかで作れますが、早晩破綻してしまうという経験は業界あるあるなのではないでしょうか。
ソート済みセット型はランキング以外だと何に使えるのかまだ見つけておりませんが、Redisの高速データセットを使うおかげでバッチが悲鳴を上げてしまう事態を避けられるのは嬉しい限りです。

# 参考にした資料
[MacにRedisをインストールする](http://qiita.com/checkpoint/items/58b9b0193c0c46400eeb)
[Redisでアクセスランキングを実装](https://siguniang.wordpress.com/2014/09/15/access-ranking-with-redis-sorted-sets/)
[Ruby Doc](http://www.rubydoc.info/github/redis/redis-rb/Redis)

# サービスへの実装
こんなところで使ってみました

[麻布十番駅の賃貸物件人気ランキング お部屋探しのノマド](https://nomad-a.jp/prefectures/tokyo/stations/azabujyuuban/building_ranking/weekly)
Zybo / Verilog HDL > Link > Verilog HDL デザイン・テンプレート

ZyboやZynqを今後主に使うとして、Verilog HDLとVHDLどちらに時間をかけるべきかは迷っている。

ふと思い出した資料へのリンクを記載しておく。

[Verilog HDL デザイン・テンプレート by 植木うてなさん](http://p.booklog.jp/book/20242)

2014年3月16日に見つけた。当時の僕にあってそうな資料だった。
今の僕もVerilog HDLの知識は増えてないので、あってそうだ。


### 2020-08-14 

以下のリンクがつながりやすい。

https://puboo.jp/book/20242
CentOS 7.2 に docker をインストールする手順


# 環境

* OSX の VirtualBox 上のゲスト
* CentOS 7.2

# 手順

yum レポジトリの設定。/etc/yum.repo.d/docker.repo を作成し、以下を記載する。

```/etc/yum.repo.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
```
docker engine を yum でインストール

```
# yum install docker-engine
```

docker サービスを start する。

```
# systemctl start docker
```

ちなみに、再起動後も docker サービスが立ち上がるようにするには、以下で docker サービスを有効にしておく。

```
# systemctl enable docker
```

docker run hello-world を実施して、docker が無事に動いていることを確認。以下が出力されたら docker が動作して、hello-world コンテナが作成されている。

```
# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b901d36b6f2f: Pull complete 
0a6ba66e537a: Pull complete 
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest

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

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/

# 
```

hello-world コンテナはもういらないので、削除する。

hello-world コンテナの CONTAINER ID を docker ps -a で確認。以下は CONTAINER ID が c5414be974b8。

```
# docker ps -a
CONTAINER ID        IMAGE                  COMMAND               CREATED             STATUS                         PORTS                    NAMES

c5414be974b8        hello-world            "/hello"              About an hour ago   Exited (0) About an hour ago                            angry_brahmagupta
# 
```

docker rm で CONTAINER ID c5414be974b8 の hello-world コンテナを削除。

```
# docker rm c5414be974b8
c5414be974b8
# 
```

hello-world コンテナが削除されていることを確認。

```
# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
# 
```

参考資料
https://docs.docker.com/engine/installation/centos/
Powershell > Start-Job ... / Get-Job / Remove-Job -id 2

```txt:動作確認
Windows 8.1 pro (64bit)
```

powershellのjob関連のコマンドを忘れてしまうのでこちらにメモ。

### Start-Job

jobの開始。...には実行スクリプトとパラメータを書く
`Start-Job -ScriptBlock { ... }`

### Get-Job

現在のjobをリスト表示する

`Get-Job`

### Remove-Job

指定のjobを終了させる

`Remove-Job -id 2`
Electronアプリのテンプレート作成コマンドを作ってみた

# はじめに
最近、Electronアプリを作る機会があり、[Quramy](http://qiita.com/Quramy)さんの「[Electronでアプリケーションを作ってみよう](http://qiita.com/Quramy/items/a4be32769366cfe55778)」を参考にして作っていたんですが、2つ目を作ったあたりから、同じmain.jsやディレクトリ構成を作るのが面倒になってきました。
electronのオプションや、express的なテンプレート作成コマンドが（軽く探した限り）見当たらなかったので、コマンドを自作してみました。
 # もし既にあるなら教えてください<(_ _)>

# インストール
インストールは下記コマンドから。

```bash
$ npm -g install electron-template
```

# 利用方法
実行のコマンドはこちら。

```bash
$ electron-template <applicationName>
```
\<applilcationName\>はお好きな名前を。

実行後は、カレントディレクトリ配下に、下記構成のファイル／ディレクトリが作成されます。

```
<appicationName>
    ├ main.js
    ├ package.json
    └ renderer
        ├ html
        │   └ index.html
        ├ js
        └ css
```
RenderProcess用のファイルは、rendererディレクトリ以下に置くことを想定しています。
ただし本コマンドで作っているのは、main.jsから読み込まれるhtml/index.htmlだけで、js, cssディレクトリは空です。
お好みでファイルを追加してください。

この状態で、

```bash
$ electron <applicationName>
```
または

```bash
$ cd <applicationName>
$ electron .
```
を実行すると、アプリが立ち上がります。

 # あ、当然electron-prebuiltを入れておいてください。
 # これがないと、このコマンドで作ったテンプレートは動きません。

```bash
$ npm -g install electron-prebuilt
```

#### 2016/02/12追記：
自作のテンプレートがある人は、このコマンドで作られるテンプレートが使いづらいかもしれません（各種ライブラリを入れておきたい、とか）。
なので、そういったものを"template"ディレクトリに保存しておけば、コマンド実行時に"template"ディレクトリからコピーするようにしてみました（package.json以外）。

逆に"template"ディレクトリになにかしらファイルがあれば、単にそれをコピーするだけです。

"template"ディレクトリの場所は、

```bash
$ electron-template -t
```
で表示されます。

またMac OS Xの場合は、ターミナルから

```bash
$ open `electron-template -t`
```
で、Finderで"template"ディレクトリが開き、
Windowsの場合は、コマンドプロンプトで、

```bash
Z:¥> for /f %A in ('electron-template -t') do explorer %A
```
で、Explorerで開きます。
 # が、なんか冗長だなぁ。。。パイプ/リダイレクトではうまくいかなかった。。。

Linuxは、、、手元に環境がないので動作確認してません:sweat_smile:。
Pythonでツイート収集

pythonでツイートを収集します。
主に、機械学習する際に〇〇botなどから情報を得たい時に使用します。(私の場合は)
〇〇botなどは非常に内容が偏っており、
例えばツンデレbotなどではツンデレに関するツイートが多いと言えます。
これはこのアカウントをツンデレのセリフ集であり、全てがツンデレセリフであると認識でき、わかりやすく言えば、「スパムであるかそうでないか」つまりツンデレかツンデレでないかという分類のツンデレであるのモデルに使用できます。

前置きが長くなりましたが、ツイート取得するコードがほんの数行です。
LibraryはTweepyを使用していますのでインストールしていない場合は

```shell-session:コマンド
pip install tweepy
or
sudo easy_install tweepy
```
でインストールできます。

実際に動かすにはCK, CS, AK, ATを取得する必要があります。
下記URLから新しいAppを作成してTokenを取得してください
https://apps.twitter.com/
get_timeline()にはそれぞれ
取得したいアカウントの(id),
取得するツイートの数(cout)
を当てはめます。

```py:get_timeline
#coding: utf-8
import tweepy

CK = ""
CS = ""
AK = ""
AT = ""

def get_twitter_api(CK, CS, AK, AT):
	auth = tweepy.OAuthHandler(CK, CS)
	auth.set_access_token(AK, AT)
	api = tweepy.API(auth)
	return api

def get_timeline(id, count=100):
	API = get_twitter_api(CK, CS, AK, AT)
	i = API.user_timeline(id=id, count=count)
	with open("", "w") as f:
		for k in i:
			encode = k.text+'\n'
			f.write(encode.encode('utf-8'))

if __name__ == '__main__':
	get_timeline(id="", count=100)
```
diff-pdf を Mac で試した


## はじめに

[diff-pdf - PDFファイルの差分を表示 MOONGIFT](http://www.moongift.jp/2016/01/diff-pdf-pdf%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e5%b7%ae%e5%88%86%e3%82%92%e8%a1%a8%e7%a4%ba/)

上の記事を読んだ際に、論文などを添削してもらってるいる時に役立つ時が来るかも？と思い使ってみた。

## インストール

[vslavik/diff-pdf - C++](https://github.com/vslavik/diff-pdf)

### Install dependencies for Mac

```
wget http://ftpmirror.gnu.org/autoconf/autoconf-latest.tar.gz
tar -xzf autoconf-latest.tar.gz 
cd autoconf-2.69
./configure
make
make install
```

```
wget http://ftpmirror.gnu.org/automake/automake-1.15.tar.gz
tar -xzf automake-1.15.tar.gz
cd automake-1.15
./configure
make
make install
```

```
brew install cairo
brew install poppler
brew install wxmac
```

```
git clone https://github.com/vslavik/diff-pdf
cd diff-pdf
./configure
make
make install
which diff-pdf
/usr/local/bin/diff-pdf
```

## 使ってみる

```a.tex
...
\chapter{ チャプター１ }

\section{ セクション１ }

最初の内容

\section{ セクション２}

この内容は
...
```

```a.tex
...
\chapter{ チャプター１ }

\section{ セクション１ }

変更した内容

\section{ 追加セクション}

新しい内容

\section{ セクション２}

この内容は
...
```

上記のてふから作ったpdfで差分をみてみる

```
diff-pdf --output-diff=diff.pdf a.pdf b.pdf
open diff.pdf
```

こんな感じ

![スクリーンショット 2016-01-30 9.33.53.png](https://qiita-image-store.s3.amazonaws.com/0/32636/0388b80a-39cd-2d0e-068e-5fd4760097b1.png "スクリーンショット 2016-01-30 9.33.53.png")


## 感想

何を編集したかは見にくいけど、どこを編集したかはわかる。
`git` のコミット指定したらテフからpdf作ってくれて差分のpdf作ってくれて、までやってくれるコマンドがあればいいな。

## 参考

* [osx - Error installing valgrind - Stack Overflow](http://stackoverflow.com/questions/29938524/error-installing-valgrind)
* [pdf2svgをMacにインストール - Qiita](http://qiita.com/tomomomo1217/items/cf4daec0341ec5dcaefc)
* [[ja] Mac OS XのErlang R15B03-1でwxを動かすための方法](https://gist.github.com/jj1bdx/5441077)
* [PDFをPDFのまま差分チェック·DiffPDF MOONGIFT](http://www.moongift.jp/2012/05/20120528-3/)
Powershell > Start-Job > パラメータ付きを実行 > -ScriptBlock { C:\ZyboDev\script.ps1 -scriptDir C:\ZyboDev\ }

```txt:動作確認
Windows 8.1 pro
```

パラメータ付きのジョブをbackgroundで動かす。

参考 [Script Center]( https://social.technet.microsoft.com/Forums/scriptcenter/en-US/ff644fca-1b25-4c8a-9a8a-ce90eb024389/in-powershell-how-do-i-pass-startjob-arguments-to-a-script-using-param-style-arguments?forum=ITCG)

`-ScriptBlock { }`という書き方をするようだ。

```
> Start-Job -ScriptBlock { C:\ZyboDev\powershell\powershell_160115_notifyGeneratedBlockDesign\main.ps1 -scriptDir C:\ZyboDev\powershell\powershell_160115_notifyGeneratedBlockDesign\ }
```

これで一応動いた。