OmniAICreator/Qiita-1.07M huggingface dataset:
iTerm2のテーマをSolarizedに変更する方法 ver3.0.7


Mac
iTerm2 3.0.7

普通のターミナルからiTerm2に変えたので、手始めにテーマを`Solarized`に変えようと思い
[iTerm2のテーマをSolarizedに変更する方法](http://qiita.com/ApricotHoney/items/f83e4aa9c1cd83755c68)を参考にしながら、GithubからSolarizedのファイルをzipダウンロードしてきて、さぁインポートしようと思ったら

`Solarized`はデフォルトのプリセットに既にあった

![OtherViews_と_Preferences_と_1__zsh.png](https://qiita-image-store.s3.amazonaws.com/0/49022/6c1ff092-3246-bc61-4dfd-15f831b89201.png "OtherViews_と_Preferences_と_1__zsh.png")

という話です。

colorの変更は[Preference]→[Profiles]→[Color]。
プリセットの選択は右下のほうにあります。

![Preferences_と_1__zsh_と_iTerm2のテーマをSolarizedに変更する方法_ver3_0_7.png](https://qiita-image-store.s3.amazonaws.com/0/49022/f4c57a62-6ea9-1a26-6ee2-90010fa0f6d0.png "Preferences_と_1__zsh_と_iTerm2のテーマをSolarizedに変更する方法_ver3_0_7.png")

以上です。
オブジェクト != インスタンス

Java言語仕様では オブジェクト(object) と インスタンス(instance) は明確に区別される。

> オブジェクト == インスタンス ∪ 配列

<del>仕様上の殴り合いでもしない限り</del>、普通の解説中で両者を区別する必要はないと思うけど。

---
[The Java® Language Specification, Java SE 8 Edition][jsl] による定義：

- オブジェクト(object)：クラスインスタンス(class instance) または 配列(array) のいずれか。
- クラスインスタンス(class instance)：クラスインスタンス生成式(class instance creation expression)（つまり`new`を使った式）で生成される。

[jsl]: https://docs.oracle.com/javase/specs/jls/se8/html/index.html
Spring BootアプリケーションをHerokuにデプロイする

## はじめに
Spring Bootアプリケーション（Gradle使用）をHerokuにデプロイするまでの手順を整理。

## 手順
### ＜初回のみの手順＞
#### 1.Herokuアカウント作成
https://signup.heroku.com/

#### 2. Heroku Toolbeltインストール
https://toolbelt.heroku.com/

### ＜デプロイ対象アプリの設定＞
以下を追加・変更しておく。

##### ・build.gradle
Jettyを使用するために以下の記述を追加

```text:build.gradle
// 先頭付近にデフォルトタスクの指定を追加
defaultTasks "clean", "build"

- 中略 -

// dependenciesに追加
compile("org.springframework.boot:spring-boot-starter-jetty")
```

##### ・Procfile
JARファイルから起動するための指定

```text:Procfile
web: java -jar build/libs/xxxx-0.0.1-SNAPSHOT.jar --server.port=$PORT （注：xxxxはjarのbaseName）
```

##### ・system.properties
Javaのバージョンを指定

```text:system.properties
java.runtime.version=1.8
```
##### ・.gitignore
不要なファイルをコミットしないように、コミット対象外のものを記述
（gradle wrapperはHeroku上のビルドに必要なので/gradleは記述しないように注意）

```text:.gitignore（例）
.apt_generated
.gradle
.settings
bin
build
lib
log
temp
.classpath
.DS_Store
.factorypath
.project
gradlew.bat
```

### ＜新規デプロイ時の手順＞
#### 1. ソースをGitに保存
```bash:ターミナル
cd xxxx （注：xxxxはアプリのルートフォルダ）
git init
git add .
git commit -m "init" （注：任意のコミットメッセージ）
```

#### 2. Herokuにログイン
```bash:ターミナル
heroku login
```
#### 3. Herokuアプリを作成
```bash:ターミナル
heroku create xxxx （注：xxxxは任意のアプリ名）
```

#### 4. Herokuでgradle wrapperを利用できるように設定
```bash:ターミナル
heroku config:set BUILDPACK_URL=https://github.com/marcoVermeulen/heroku-buildpack-gradlew.git --app xxxx （注：xxxxはアプリ名）
```

#### 5. Herokuにデプロイ
```bash:ターミナル
git push heroku master
```

### 参考
- https://github.com/herokaijp/devcenter/wiki/java
WRF > SST > 0.083degree刻み > 9km刻み

```txt:動作環境
WRF 3.7.1 on CentOS 6.8 (64bit)
```

WRF(Weather Research and Forecasting Model)に関して。

海面温度(SST)のデータは
rtg_sst_grb_hr_0.083.20150910
のような名前を持っている。

0.083は何かというと解像度(degree)のようだ。
http://www.dtcenter.org/wrf-nmm/users/overview/wps_prev_fixes/wps_fixes_v3.2.1.php
> There is a processing error in degribing grib 2 NCEP 1/12 degree SST data (rtg sst 0.083 degree data).

0.083 degreeは何kmかというと 9kmのようだ。
https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=0.083+degree+in+km
> SeaWiFS Global Monthly Mapped 9 km Chlorophyll a
> ...
> Spatial Resolution:	0.083 degrees (Latitude) x 0.083 degrees (Longitude)
Pythonで小数点以下を表示

・Pythonで小数点以下を表示する関数は多分ない。
・2系と3系で多分やり方違う
・これは2系について

```python
Pi = 3.14

print Pi / 1
print Pi //1

print Pi - Pi//1
```

```result
3.14
3.0
0.14
```
tmuxでペインレイアウトを変更する



|コマンド|動作|
|:--|:--|
|Ctrl-b Space|ペインレイアウトの変更（思い通りになるまで連打）|
|Ctrl-b :resize-pane -U 数字| 上部ペインのサイズ変更|
|Ctrl-b :resize-pane -D 数字| 下部ペインのサイズ変更|
|Ctrl-b :resize-pane -L 数字| 左部ペインのサイズ変更|
|Ctrl-b :resize-pane -R 数字| 右部ペインのサイズ変更|
シンボリックリンクをはるときにはまった

~/dotfileにいるときに.vimrcから~/.vimrcにシンボリックリンクをはろうとしたときに

``` 
ln -s .vimrc ~/.vimrc
```

ってやっても上手くいかない。

一つ目の.vimrcってのが、絶対パスになってるらしくて、思った通りに動作しない。

```
ln -s ~/dotfiles/.vimrc ~/.vimrc
```

ってやんないと
C言語で現在実行している関数名、行数を取得する


``` c
const char *kansuumei = __func__;
```

こんな感じでおっけ

同じように


``` c
int gyousuu = __LINE__;
```

で行数を取得できる

注意点

 - 現在実行している関数名を取得する関数とか作っちゃだめだよ。
c言語におけるNULL

```
if(a = malloc(sizeof(int)) = NULL)
```
とかやったら怒られた

実はc言語のデフォルトではNULLは定義されていないらしい。
stdio.hとかで定義されてる。


追記
NULLとか以前にそもそもの式も間違ってました。

正しくはこう

```
if((a = malloc(sizeof(int))) = NULL)
```

いや、正しくないんだけどね。

@jkr_2255 さんありがとうございました。
ブラウザごとの最新バージョン情報

リリースノート、実装状況を参照。

* Firefox
https://www.mozilla.jp/firefox/releases/

* Chrome
「Current Release Information」でchannel=stableを参照。
http://www.chromium.org/developers/calendar

* Safari（apple製品）
https://support.apple.com/ja-jp/HT201222

* Microsoft Edge
公式情報は見つからず。。
https://en.wikipedia.org/wiki/Microsoft_Edge#Release_history
whileのelseブロック

```
a = 0
b = 10
while a!=b:
	print("a!=b")
	a += 1
else:
	print("a==b")
```

pythonではwhile文にelseがくっついてることがある。
elseブロックの中身は、条件判定がfalseになった時（ループを抜ける時）に実行される。
ただし、break文とかで抜けた時は条件判定がfalseになったわけではないのでelseブロックは実行されない。
pythonでwaveを再生するためにPyaudioをインストールする

```
pip install Pyaudio
```

ってやったら怒られた


```
.
.
.

src/_portaudiomodule.c:29:10: fatal error: 'portaudio.h' file not found
  #include "portaudio.h"
           ^
  1 error generated.
  error: command 'gcc' failed with exit status 1

.
.
.

```

どうやらportaudio.hってのが必要らしい。

```
brew install portaudio
```

これでportaudioをインストールしてから再チャレンジ

```
.
.
.

src/_portaudiomodule.c:29:10: fatal error: 'portaudio.h' file not found
  #include "portaudio.h"
           ^
  1 error generated.
  error: command 'gcc' failed with exit status 1

.
.
.

```

あれれれれ

色々調べたらpyaudioはpython3.3までしか対応してないそう。
うちのはpython3.5

うーん。

諦め。


waveを再生するだけなら他のやり方がありそう。

subprocessで外部コマンド(aplay)をよびだして再生とか。
pythonで長くなった式を折り返す

```
str = "hogehogehogehoge" + "uhohohohohohohohoho" + "hugahugahugahugahuga"
```

みたいな超長い式のとき途中で改行して見やすくしたい。

```
str = "hogehogehogehoge" +\
	"uhohohohohohohohoho"+\
	"hugahugahugahugahuga"
```

このように"\"(バックスラッシュ)で挟んでやれば改行しても表示は変わらない。
pythonで日付取得


datetimeモジュールを使う

```
import datetime

datetime.date.today()#今日の日付
datetime.datetime.today()#時間まで

datetime.date.today().year#年
datetime.date.today().day#日

datetime.datetime.today().microsecond#１秒以下も出る

datetime.date.today().isoformat()#フォーマットの指定
datetime.datetime.today().strftime("%Y/%m/%d/%H/%M/%S")#フォーマットの指定
javaで文字列の比較


```java
String str1;
String str2;

if(str1.equals(str2)) //str1とstr2を比較
	System.out.println("一致");
```

#なぜstr1==str2ではダメなのか
"=="は、オブジェクト同士を比較する。
String型は、文字列が保存されているポインタを格納しているため、str1==str2だとうまくいかないのである。

だから当然int1==int2とかなら大丈夫
Fastlyで特定の国からのアクセスをブロック

Fastlyではエッジサーバー上で様々な情報にもとづいて処理を行うことが出来ますが、そのひとつとしてよく使われるものにアクセス元の国によるアクセス制限があります。

この記事では特定の国からのアクセスをFastlyサーバー上でブロックする手順を紹介します。なお、この設定はカスタムVCL機能を利用せずにGUIから設定が可能です。

```
特に記載がない限り本記事の記載内容はデフォルト設定での挙動となります。
Fastlyの正式なサポート情報は以下のサイトでご確認下さい。
https://docs.fastly.com/
```

設定の手順としてはまず503や404などを返却するレスポンス設定を作成し、その設定に条件としてアクセスを拒否する国を設定します。


# アクセス拒否レスポンスの作成


1. FastlyのWebポータルにログインしConfigureをクリックします。
2. Serviceメニューから設定を行いたいServiceを選択して下さい。
3. **Edit Configuration**ボタンをクリックし、**Clone activate**をクリックして下さい。Serviceの新しいversionが表示されます。
4. 左側のメニューから **Content** をクリックして下さい。
5. 右側のコンテンツの一番下にある **SET UP ADVANCED RESPONSE** をクリックして下さい。
<img width="1100" alt="Fastly__Configure__Demo_2019_.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/9f50ee6e-fc68-2e75-2574-5fb0be35f20c.jpeg">次の画面が表示されるので必要な情報を入力して下さい。
<img width="841" alt="Fastly__Configure__Demo_2019_.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/b37ccd0c-9bab-d12b-70d7-7393a20d4171.jpeg">


Name: このレスポンスの名前です。適当な名前を指定して下さい。
Status: ブロックした際に返却するレスポンスのステータスコードを指定します。ブロックしたことを明示的に通知したいのであれば403。ブロックしたことをクライアントに分かられたくないのであれば404や503などが考えられます。
MIME Type: text/html
Response: レスポンス内容を記述して下さい。
6. 必要な情報を入力したら **Create** をクリックして下さい。

**Response** に HTML コードを記入すると、このレスポンスを返却する際に記入したHTMLコードをレスポンスとして返却する事が出来ます。簡単なカスタムエラーページを返却したい場合などに利用することが出来ます。

# アクセス拒否条件の作成と割当
続いて作成したアクセス拒否レスポンスにアクセスを拒否する条件を割り当てます。

1. 作成したアクセス拒否設定の横に表示されている**Attach a condtion**をクリックして下さい。

<img width="1092" alt="Fastly__Configure__Demo_2019_.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/2832af5b-8908-7327-4f95-4bce0c569581.jpeg">

2. Create a new conditionウインドウが表示されるので、以下のように入力して下さい。


<img width="610" alt="Fastly__Configure__Demo_2019_.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/9b8cc4c2-b1d8-e52d-56e2-6f016e78b53e.jpeg">

  - Type: Request
  - Name: 条件を識別するための適当な名前
  - Apply if...： ここでアクセスを拒否する国を指定します。

クライアントのアクセス元の国は`client.geo.country_code`変数で取得できますので、たとえば日本からのアクセスを条件としたい場合はApply ifに
`client.geo.country_code == "JP"`
と指定して下さい。

なお、UIではなくSnippetなどを使ってVCLを自分で書く場合、この条件は以下のようなコードになります。

```vcl:vcl_recv
  if( client.geo.country_code == "JP" ) {
    処理内容
  }
```

複数の国を指定したい場合は
`client.geo.country_code ~ "(JP|US)"`
と指定することが可能です。

地域制限を行いながら特定のIPは制限の対象外としたい場合は
 `client.geo.country_code == "JP" && req.http.Fastly-Client-IP !~ white_acl` 
といったような条件を指定することも可能です。（別途 white_acl を作成する必要があります）

3. 条件を作成したらSaveしてからコンフィグをActivateして下さい。

以上で設定は完了です。新しい設定は通常数秒程度で反映されます。

実際にアクセスを行って期待通りに動作しているかを確認して下さい。


なお、Fastly で利用可能な地域情報の変数については
https://docs.fastly.com/guides/vcl/geoip-related-vcl-features
を参照下さい。










- - -
Laravel Echo でRedisのPUB/SUB使ってみた所管


イベントをブロードキャストする感じのあれ。

CLIやコントローラ上で発生したイベントを、SocketIO経由でブラウザに投げたり、キューに通知したりするときに使える。

## クライアント立てる

WebSocket用のサーバが用意されてる見たいだけど上手く動かなかった。
https://github.com/tlaverdure/laravel-echo-server

のでとりあえずCLIのSUBで試してみる。

以下の内容で`sub.js`を作成し `node sub.js`で実行。チャンネルを立ち上げる。 

````
var subscriber = require('redis').createClient({
    host: "",
    port: "",
    password:"",
});

subscriber.subscribe('orders');
subscriber.on('message', function(channel, message) {
    console.log('channel: ' + channel + ', message: ' + message);
});
````

redisはHerokuとかから引っ張ってくると楽。チャンネル名は適当に。

とりあえずredis cliでチャンネルができている事を確認。

````
$ heroku redis:cli # redis 接続
> pusbub channels
1) orders
````

## Laravel側の用意

config でredisの設定して…`BroadcastServiceProvider`有効化して、envで`BROADCAST_DRIVER`を`redis`にして…

まずは、イベントのクラスを作成。

````
namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class Message implements ShouldBroadcast
{
    public function broadcastOn()
    {
        return new Channel("orders");
    }
}
````

`ShouldBroadcast`を実装する簡単なクラスでOK.

最後にイベントを発行するコマンドを作成する。

````
<?php
namespace App\Console\Commands;
use App\Events\Message;
use Illuminate\Console\Command;

class Hello extends Command
{
    protected $signature = "hello";

    public function handle(){
        event(new Message());
    }
}
````

kernel に登録して `php artisan hello`で完了

立ち上げた `node sub.js`の方にイベントの通知が来るはず。

## 感想

- Websocketとつなげると色々出来そう
- laravel-echo-server動かしたい。
- あとはsocket.ioとredisつなぐだけなのでそんなに難しくはなさそう
- 認証の機能とかもあるけど、必要だろうか…
- 後でLumenで試す。
- PUBはPHPのREST APIで、通知専用のSUBのみNODEというのは運用が楽そう
HTML3.2でできること

諸事情でHTML3.2準拠でコーディングすることになったので自分用にまとめました:innocent:


## 2行でわかるHTML3の歴史

実に20年近く前の仕様です:innocent:

* 1995年3月、HTML3.0ドラフトが公開されるが策定中に破棄され勧告に至らず。IEとNetscapeブラウザ戦争のとばっちりをくらった模様。
* 1997年1月、HTML3.0とはまったく別物としてHTML3.2が勧告される。なおその年末の1997年12月にはHTML4.0が勧告される。

（3.1はどこへいったのだろう…？）

##コーディングにあたり押さえておきたいポイント

### :pencil2: JavaScript は利用不可。CSSは外部化で利用可
 HTML3.2に`<style>` `<script>` 要素は存在していますが、将来のための予約語としての位置づけになっています。
（2016年現在のブラウザであれば実際に記述すれば動作するでしょうが、HTML3.2の仕様的にはNGという認識です。）

CSSは`link`要素で外部ファイルを読み込むことが出来ます。ただしHTML側に`id`属性・ `class`属性が存在しないため、要素セレクタでスタイル指定していくことになります。

なお`style`属性も存在しないため「この一か所だけスタイル変えたい」といったことも当然出来ません。

### :pencil2: 基本的な要素は存在している
現在でも使われている、ごく基本的な要素はHTML3.2でも定義されています。`body`要素内で使える要素は下記の通り。

``` h1-h6 / address / p / pre / div / center / blockquote / hr / a / applet / font / basefont / br```

* フォントスタイル ```tt / i / b / u / strike / big / small / sub / sup ```
* フレーズ ```em / strong / dfn / code / samp / kbd / var / cite ``` （※`span`は無いので注意）
* リスト・定義リスト ```ul / ol / li / dl / dt / dd```
* テーブル ```table / caption / tr / th / td``` （※`thead`と`tbody`は無いので注意）
* フォーム ```form / input / select / textarea / isindex```
* 画像 ```img / map```

廃止されてしまった懐かしい要素もありますね…。
各要素に対して使える属性は仕様を要確認。
参照： [W3Cの仕様](https://www.w3.org/TR/REC-html32)（[非公式日本語訳](http://www.doraneko.org/webauth/html32/19970114/)）


###:pencil2: レイアウトどうする？
外部CSSを使うにしても`id`・`class`セレクタを利用できないため、floatを用いるのは危険な匂いがします。子セレクタを駆使して頑張ればなんとかなるかもしれませんが、要素が増減した時に即死しそう…。

見た目の優先度が高い場合は、セマンティックHTMLを諦め古の技術であるテーブルレイアウトやspacer.gifを用いるのが無難かなと考えます。

##なおCSSを使えない場合はさらに厳しい:innocent:
外部ファイルの利用がNGな状況だと、出来ることはさらに限られます。

（外部CSSを使える場合でも、実際は全体のフォント設定やリスト・テーブルの基本的な見た目調整くらいしか出番は無いかもしれません。ベーシックな「ヘッダー＋左右ナビ＋本文エリア＋フッター」という構成のページでも、要素セレクタだけで各エリアのパーツをスタイリングするのは難しい気がします。）

###:pencil2: 背景色・背景画像の設定は`body`要素のみ
背景画像の表示位置や繰り返し指定は出来ず、一律タイル状に配置されます。

###:pencil2: フォントの設定は？
`font`要素でサイズ、色を設定できます。フォントファミリーの指定はできませんが、`tt`要素で固定幅テキストの実装は可能です。

* フォントサイズは　`<basefont size="n">`と`<font size="m">ほげほげ</font>`で指定。`<font>`の方は-3、+3のような相対指定も可能。
* リンクテキスト色は`body`要素の属性で変更可能。

###:pencil2: 背景色ボックスは無理だけど、枠線ボックスは`table`と画像で実装できる

テーブルを9分割して四辺のセルに色付き画像を配置することで実装可能です。
（ただしIE8～9で画像上下に数pxの余白がついてしまったため、対象ブラウザによって実装有無要検討。）
テーブルを入れ子にして、親テーブルに背景色設定＆cellpadding="1"にすれば…！と思ったのですが、HTML3.2の`table`は`bgcolor`属性を使えなかったのでした。


##結論：画像で頑張る or 諦める
CSSを普通に使えないというのが致命的痛手です。
HTML3で今風な見た目のページを作ろうというのはそもそも無理があるので、リッチにデザインされた画像をペタペタ貼り付けるか、潔く諦めて見た目のレベルを落とすかの二択になりそうです。

ディレクターとデザイナーを交えて何が出来て何が出来ないか、どこまでやる必要があるか事前に会話しておく必要があるでしょう。

Good Luck:innocent::innocent::innocent:

## 参考サイト
 * [HTML 3.2 Reference Specification](https://www.w3.org/TR/REC-html32)
 * [HTML 3.2 リファレンス仕様書](http://www.doraneko.org/webauth/html32/19970114/Overview.html)
 * [HTML3.2でサイト製作してみた話【IE 旧verサポート終了祭】 | NEO ZEST（ネオゼスト） ｜ データ分析を基にしたWEBサイト製作](https://neozest.jp/archives/285)
CakePHP3 Wayな論理削除プラグイン Trash

# CakePHP3 Wayな論理削除プラグイン Trash

（個人感想として）CakePHP3の作法にしたがっていて、コードを読んでみて勉強になった論理削除プラグインを紹介します。

https://github.com/UseMuffin/Trash

## 特徴

よくある論理削除プラグインとほとんど同じですが、特徴としては以下のような感じ。

- 日時のフィールド( `deleted` か `trashed` がデフォルト）を使って論理削除を実現している（フラグはない）
- CASCADE DELETEがCakePHP3の作法にそって綺麗に実装されている
    - リストアもCASCADEで復旧できるメソッドが提供されている
- `Model#delete()` メソッドをそのまま利用できる
    - イベントの `Model.beforeDelete` で処理を実現している
    - ちゃんと `Model.afterDelete`  をディスパッチしているのも良い
- 設定でいろいろ変更可能

実装はとてもシンプルなので、Behavior実装の勉強になるのではないかと思います。

個人的にはCASCADE DELETEがCakePHP3の作法で綺麗に実装されていて勉強になりました。
（Trashプラグインを参考に[別のプラグイン](https://github.com/k1LoW/darumaotoshi)を実装しています）


## 使い方

[README](https://github.com/UseMuffin/Trash) に書かれている内容で十分です。

ソースコードを読むと勉強になりますね。
SEO対策で使う横文字リスト

#SEO対策をしているとよく聞く横文字リスト
SEOコンサルの人がよく使ってくる横文字のメモ
横文字をつかいまくってくる営業と対等に話すためにも意味を抑えたい。

##ハミングバード
Googleが研究していた、会話型検索アルゴリズム。
一番美味しいラーメン屋？という検索で、美味しいらしいラーメン屋を表示するようにすることができると言っている。
これにより従来のSEO対策が2014年かそこらからかなり通用しなくなったらしい。

##ペンギンアップデート
被リンクに関する対策。
意味のない被リンク(SEO対策のために役にもたたないサイトを大量につくったりした)をあつめて順位をあげるという過去にSEO対策会社がやりまくってた対策にメスが入った。
質の高い被リンクが評価されるように（同じ分野の専門性が高いサイトからの言及とか)

##パンダアップデート
サイトの専門性や独自性などを判断するのに、同じ分野のサイトからの被リンクを重視したりしたら、コピーコンテンツが増えたてきなのを潰すためにペネルティを厳しく。

- 無断複製：他のコンテンツのコピーコンテンツとかで増量してると低評価
- 自動生成：特定のキーワードを含むけど、でたらめな段落構成で意味が通らないものにペナルティ
- 誘導ページ：特定のキーワードでくくっただけの品質の低いページに低評価
- 実質のないアフィリエイト対策サイト:アフィカスはダメですよということ。

###スクレイピングコンテンツ(サイト)
他所のコンテンツを切り抜いて、自分たちのコンテンツにしているコンテンツ
やりすぎるとペナルティがかかるように

###シンジケーションコンテンツ
よそのサイトからのコンテンツを寄せ集め、独自性がないサイト。
他所のコンテンツを利用して、まとめサイトとかキュレーションとかやっている人はそうならないように注意。

##Googleダンス

Googleのアルゴリズムが変更されると分散サーバーへ反映されていくあいだに起きる順位の急激な変動。
最近はふれ幅はすくなくなった。

##リッチスニペット
構造化データにより検索結果で視覚的にページの内容をわかりやすくし、ページの選択を補助する機能です。
https://developers.google.com/search/docs/guides/intro-structured-data?rd=1

##ファセットナビゲーション
検索結果を価格帯や色などの属性等で絞り込む仕組み。
重複コンテンツが発生しやすい。
http://googlewebmastercentral-ja.blogspot.jp/2014/03/faceted-navigation-best-and-5-of-worst.html 

##サイテーション
ようするに口コミ

##クロールパジェット
クローラーはHTMLのはじめの方しか読まないのではないか説で、１つのサイトでインデックスの上限が決まっているのではないかという説。
公式に否定されている。

###ページスカルプティング
クロールパジェットを信用して、優先したいページを優先的に設計する考え方。
リンクの集中や、特定のページのみをサイトマップに出すなど。
Googleにより、やらないようにアナウンスされている。ページスカルプティングとみなされた場合ペナルティの可能性がある。

##Query Deserves Diversity(QDD)
１位の検索結果と同様のページを２番目に表示しないような仕組み。
多様性を重視し、似たようなコンテンツのみが検索結果にならぶことをGoogleが避けるようにしているらしい仕組みのこと。

##ドアウェイページ
露骨な誘導ページとみられるとペナルティになるらしい。
https://support.google.com/webmasters/answer/2721311?hl=ja
FreeBSDで作るデーターロガー

MIPSなルーターをデータロガーに仕立ててみました。FreeBSDのビルドは[ZRouter](http://qiita.com/yamori813/items/2fc5b14648029bb4730f)で行っています。

![IMGP0253.JPG](https://qiita-image-store.s3.amazonaws.com/0/104066/eac02ab1-3870-1cc0-a079-7c9907cb5997.jpeg)

---

ZRouterでビルドするFreeBSDのミニマムイメージはたいてい4Mに収まりますが、処理のためのコマンドをいくつか追加するとあふれるので8M以上のFlashが必要です。このイメージをターゲットに焼いておきます。

--- 

ロギングしたデータはSDRAM上のメモリディスク(md)に作成して、flashにコピーして電源が切れても保持できるようにします。

このためhintsに以下を設定してkernelをビルドしてgeom_mapでflash内にデータ保存用の領域を確保します。

```
hint.map.5.at="flash/spi0"
hint.map.5.start="0x007e0000"
hint.map.5.end=0x007fffff
hint.map.5.name="storage"
```

上記の設定では領域(/dev/map/storage)を128K確保しているのですが、なぜか後半の64Kを読み書きするとエラーになるので先頭の64Kだけ使う事にします。何が原因かは調べていません。

---

まずはターゲットの時間を合わせておきます。

```
# ntpdate ntp.nict.jp
```

---

ロギングするデータをファイルに書き込みflashに保存するshスクリプト。[mrubyでスマートメーター](http://qiita.com/yamori813/items/f0dfedf31b2b51e658f9)のスクリプトを修正してスマートメーターの指示数のデータを取得しています。

```sh
#!/bin/sh

VAL=`mruby /tmp/smtest.rb`
DAY=`date "+%Y/%m/%d"`
TIME=`date "+%H:%M:%S"`

echo ${DAY},${TIME},${VAL} >> /tmp/sm.log

xz -c /tmp/sm.log > /tmp/sm.log.xz

dd if=/tmp/sm.log.xz of=/dev/map/storage bs=65536 count=1 conv=sync
```

保存領域のブロックデバイスに直接ファイルをコピーする事はできないので、圧縮してddでコピーしています。

---

これをcronで5分おきに起動します。

```sh
*/5 * * * * /tmp/getmeter.sh
```

---

sm.logのデータはこんな感じになります。

```
2016/08/24,11:45:10,392.1
2016/08/24,11:50:10,392.1
2016/08/24,11:55:10,392.2
2016/08/24,12:00:19,392.2
2016/08/24,12:05:39,392.2
2016/08/24,12:10:10,392.2
2016/08/24,12:15:18,392.3
2016/08/24,12:20:18,392.3
2016/08/24,12:25:19,392.3
2016/08/24,12:30:10,392.4
```

---

flashからデータを読み出すのは下記のようにします。

```
# dd if=/dev/map/storage of=/tmp/last.log.xz bs=65536 count=1
# xz -d /tmp/last.log.xz
```

当初データ取得のスクリプトがハングする事があって、cronから多重起動になりリソースを食い尽くしてしまったのか、pingには反応するが入れなくなりました。このようなシステムでは、データを確実に取る事よりもハングしてリソースを枯渇させない事を注意した方が良いです。

いろいろいじって1ヶ月くらいは無事に動いていましたが、また入れなくなりました。kern.maxprocperuidを小さめにして、スクリプトをnobodyで動かすようにしてみました。

---

10万回の書き込み保証だと、上記のように5分に1回書いていると1年くらいで寿命になってしまいますね。。。I2CのEEPROMだと100万回くらいの書き込みができるようなの、ちょっと長く保証されますがたかだか10倍ですね。

本当に5分に一回の保存が必要なのか考えてみるのが良いのかもしれません。

---

せっかくなのでロギングしたデータをMacのMjoGraphでグラフ化してみました。もちろんクラウドとか使わずに堅実にawkで処理します。

```
sh-3.2$ awk 'BEGIN{FS=",";s=0;i=0}/09\15/{if(i == 0){s=$3} else {print i "," $3-s} i+=5}' sm.log > 0915.csv
```
![meter2.png](https://qiita-image-store.s3.amazonaws.com/0/104066/c1579783-ea25-238a-7e5b-a29844e072ce.png)

---

1kWh/22円で表示するとこんな感じです。

```
sh-3.2$ awk 'BEGIN{FS=",";s=0;i=0}/09\15/{if(i == 0){s=$3} else {print i "," ($3-s)*22} i+=5}' sm.log > 0915yen.csv
```

![meter1.png](https://qiita-image-store.s3.amazonaws.com/0/104066/a564f5ab-fbf7-9646-7817-3c594a2eaa29.png)

就寝中の0時から6時(360min)までで10円くらいになっています。これはほぼほぼ冷蔵庫の消費と考えられます。24時間にすると40円となり全消費の半分近くになってしまっています。15年以上前の古い冷蔵庫を使っているためかもしれません。冷蔵庫の設定は中の弱くらいで、周りはスペースを確保して換気は良くしているのですが。。。
AWS 関連の個人用のメモ(To Be 随時更新)

# Volume detach について

マウントしていない volume は、インスタンスの起動・停止にかかわらず、任意のタイミングでデタッチできる。

console 上で volume を右クリック・デタッチ。
削除する場合には、右クリック・削除。
railsでランダムに複数のレコードを取得する

railsでランダムに複数のレコードを取得するときのアレ。

例えば4つ取ってくるとき

```rails:hoges_controller.rb
@hoges = Hoge.order("RAND()").limit(4)
```


```rails:views/hoges/index.html.erb
<% @hoges.each do |hoge| %>
    任意のコード
<% end %>
```

いくつかググってみたんですけど

コントローラーの方のRAND()の部分が

RANDOM()

↑このように書いてあるやつもあったんですが

mysqlではRAND()にしないとダメっぽいです。
csharp > csv > 1項目にカンマを含むN項目文字列のパース > Regex()を使う実装

関連 http://qiita.com/7of9/items/076cf5aaff7095bb876d
関連 http://qiita.com/7of9/items/fa852a99ccfabc112690

在庫表示システム。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/e118b619-bd14-5703-6e45-27851073288d.png)

About:の項目にカンマを含む文字列を使いたい。

## v0.1 > 失敗

C#でコードを書いてみた。

[@ C# Online Snippet Compiler](http://volatileread.com/utilitylibrary/snippetcompiler?id=73552)

```csharp
using System;
using System.Collections.Generic;
using System.Linq;
			
public class Program
{
  public static void Main()
  {
		string line = "\"AAA,AAA\",BBB,CCC,DDD";
    
    Console.WriteLine(line);
    
   	string [] elements = line.Split(',');
    foreach(string elmnt in elements) {
      Console.WriteLine(elmnt);
    }
  }
}
```

lineはEXCELで1セル内にAAA,AAAと入れたもの(下記)をcsv出力した時の文字列。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/00ed784c-5b5f-6524-1f64-a7a82670e2ef.png)


```txt:結果
"AAA,AAA",BBB,CCC,DDD
"AAA
AAA"
BBB
CCC
DDD
```

やはりパースで失敗して、AAA,AAAが2つの項目となる。

## v0.2 > 成功

[stackoverflow](http://stackoverflow.com/questions/3776458/split-a-comma-separated-string-with-both-quoted-and-unquoted-strings)
にそれらしいコードがあった。

[v0.2](http://volatileread.com/utilitylibrary/snippetcompiler?id=73553)

```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions; // for Regex
			
public class Program
{
  
  public static string[] SplitCSV(string input)
  {
    Regex csvSplit = new Regex("(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)", RegexOptions.Compiled);
    List<string> list = new List<string>();
    string curr = null;
    foreach (Match match in csvSplit.Matches(input))
    {        
      curr = match.Value;
      if (0 == curr.Length)
      {
        list.Add("");
      }

      list.Add(curr.TrimStart(','));
    }

    return list.ToArray<string>();
  }
  
  public static void Main()
  {
		string line = "\"AAA,AAA\",BBB,CCC,DDD";
    
    Console.WriteLine(line);
    
    string [] elements = SplitCSV(line);
        
    foreach(string elmnt in elements) {
      Console.WriteLine(elmnt);
    }
  }
}
```

```txt:結果
"AAA,AAA",BBB,CCC,DDD
"AAA,AAA"
BBB
CCC
DDD
```

成功。

あとは前後のダブルクォーテーションを消せば良さそう。
サーバの有用コマンド

# LINUX
## MYSQL

```sql
nohup mysql -u <username> -p --max_allowed_packet=12000M <db_name> < <file_path> &
```

DBをインポートするため。
nohup：nohupを使って、実行ログはnohup.outファイルに出力します。
&: を付けると、backgroundプロセスになります。
--max_allowed_packet：max_allowed_packetのセット
有用SQL分

#テーブルのサイズを確認

```sql
SELECT 
     table_schema as `Database`, 
     table_name AS `Table`, 
     round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` 
FROM information_schema.TABLES 
ORDER BY (data_length + index_length) DESC;
```

または

```sql
SELECT 
    table_name AS `Table`, 
    round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` 
FROM information_schema.TABLES 
WHERE table_schema = "$DB_NAME"
    AND table_name = "$TABLE_NAME";
```
画像認識用 DeepLearningモデルの実装

# 1. はじめに
この記事ではコンピュータ上で DeepLearningプログラムを実装する方法を示します。
画像認識が目的となるので、実用的な規模の畳み込みニューラルネットワーク（CNN）の実装を行います。 

# 2. マシンの用意
高性能なGPUが不可欠なので、Linuxマシンを推奨します。Linuxマシンの主な選択肢は以下の通りです。 

1. デスクトップPC 
2. 仮想環境（Virtual Box等） 
3. AWS(Amazon Web Service)

上記のいずれかに、 CentOSまたは Ubuntuを入れて活用しましょう。 

# 3. GPUの設定 
GPUを使用するには、CUDAとcuDNNをインストールする必要があります。 
Ubuntu14.04であれば http://qiita.com/shinya_ohtani/items/f374ed0dd51737087369 を参考にします。 

# 4. Pythonのインストール 
Python本体および各種モジュールをまとめた、 Anacondaというディストリビューションを Linuxマシンにインストールします。
手順は http://morimori2008.web.fc2.com/contents/PCprograming/python/pythonAnaconda.html に書かれている通りで概ねOKです。
ただし、ここではローカルユーザにインストールすることにします。

# 5. DeepLearning用ライブラリ
次に、 DeepLearningモデルを構築するためのライブラリを Pythonで使えるようにします。ここでは Theanoを採用しました。
ターミナルから

```bash
$ pip install theano
```

と打ち、 Theanoをインストールします。 

# 6. コードの実装
ターミナルから

```bash
$ jupyter notebook
```

と打つことで、 Pythonの開発環境が立ち上がります。この上でコードの実装を行います。
実装にあたり、http://deeplearning.net/tutorial が参考になります。
こちらのサイトでは CNNのソースコードも公開されており、そのまま画像認識に転用できます。 

# 7. 今後の展望
ここまでで CNNの実装ができました。

あとは実際に用いる入力用データを集め、そのデータに向け入出力フォーマットを整えれば画像認識プログラムが完成します。
SQL Server で項目の属性を SQL Server Manager で変更する（忘備録）

SQL Serer Manager で　テーブルの項目の属性を変更する場合、

「変更の保存が許可されていません」

と警告されることがある。

＃本当は非推奨のやりかたらしいが。。。

そのような場合、「ツール」メニューで「オプション」を選択し、

表示された画面で「デザイナー」を選択し、

「テーブルの再作成を必要とする変更を保存できないようにする」

のチェックを外すと良い。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/122205/55f8e522-1957-eee1-5caf-8abc1a25a182.png)


開発環境では既にそうなっていたのに、本番環境ではそうなっておらず、

設定方法を探したので、ここに記しておきます。
Node.jsでユーザーのホームディレクトリのパスを取得する

Node.jsでホームディレクトリを取得したい場合、特にmoduleのrequireは必要とせず、以下のコードで取得が可能。

```js:main.js
console.log(process.env[process.platform == "win32" ? "USERPROFILE" : "HOME"]);
// /Users/foo/
```

デスクトップやDocumentsを指定したい場合はpathを利用して。

```js:main.js
const path = require("path");
const userHome = process.env[process.platform == "win32" ? "USERPROFILE" : "HOME"];

console.log(path.join(userHome, "Desktop"));
// /Users/foo/Desktop

console.log(path.join(userHome, "Documents"));
// /Users/foo/Documents
```
興味はあったけど手が出せなかった私のためのbrainfack再入門

# brainfuckとは
[wikipedia](https://ja.wikipedia.org/wiki/Brainfuck#Brainfuck.E3.81.AE.E8.A8.80.E8.AA.9E.E4.BB.95.E6.A7.98)

その時whitespaceもやってたからblackfuckと勘違いしてた。プログラムとかプログラミング言語とかでググッても見つからなかったので、あまり情報が出ていないんだろう。
せめてそういう人を救済するために敢えてここでキーワード入れときます。

やれば分かりますけど、職場とか電車など公共機関？人の目がある場所は避けたほうがいいです。

# 難解言語を解読する
とはいえ、多くの方々が翻訳（という名の自説など）をしてくれているので、かなり理解の助けになります。

[brainfuck入門](https://kimiyuki.net/blog/2015/04/09/a-brainfuck-tutorial/)
[Visual Brainf*ck JS](http://quwahara.github.io/VisualBrainfuckJs/index.html)
[Nyarukoのニュース記事を見てBrainfuckまわりでちょっと遊んでみました。](http://tsoft-web.com/sub/brainfuck/)

wiki含め４つぐらいサイト見て何となくトライアンドエラーで分かるようになってきたので、思った以上に難解ではないです。
ポインタ分かってる人には退屈かもしれません。

# asciiコード
[microsoft ASCII 文字コード表 1](https://msdn.microsoft.com/ja-jp/library/60ecse8t(v=vs.80).aspx)
[ASCII 文字コードってなんぞや？って人向けのざっくりした概要](http://ar.aichi-u.ac.jp/lecture/infosys/charcode/asciicode.html)

PHPerしてた時とかも条件判定の比較でお世話になりました。


#最後に
普通にfuckって書いてますけど、気がついた頃合にf*ckとかBFとか置き換えるかもしれません。

# 読了後いいね！をお願いします。
どれだけの方に読んでもらっているか知りたいので、お手数をおかけしますがご協力いただけると嬉しいです。
cakephp 名付きのパラメータ

デフォルトのルーティングを使用した、URL からコントローラへのアクションマッピング：

URL: /monkeys/jump
Mapping: MonkeysController->jump();

URL: /products
Mapping: ProductsController->index();

URL: /tasks/view/45
Mapping: TasksController->view(45);

URL: /donations/view/recent/2001
Mapping: DonationsController->view('recent', '2001');

URL: /contents/view/chapter:models/section:associations
Mapping: ContentsController->view();
$this->passedArgs['chapter'] = 'models';
$this->passedArgs['section'] = 'associations';
gemを作ろうと思ったら、configすら読み込めなくて悲しくなった

いろんなサイトを参考に、まずはgem用のプロジェクトを作った

```
$ bundle gem test_gem -t
```

で、必要部分を修正

``` test_gem.gemspec
  spec.summary       = %q{ output excel }
  spec.description   = %q{ output excel by java }
  spec.homepage      = "https://github.com/aaa/test_gem"
```

挨拶メソッド用意

``` lib/test_gem.rb
require "test_gem/version"

module TestGem
  # Your code goes here...
  def self.greet
    p 'hello'
  end
end
```

実行するには以下のコマンドから確認するらしい

```
$ rake install
$ irb
irb(main):001:0> require 'test_gem'
=> true
irb(main):002:0> TestGem.greet
"hello"
=> "hello"
```

ここまでは完璧！

そしてconfigファイルを作ろうとしたときに事件は起こった
ここでも他のgemを参考に、以下のファイルを作成

``` lib/test_gem/config.rb
require 'active_support/configurable'
module TestGem
  def self.configure(&block)
    yield @config ||= TestGem::Configuration.new
  end

  def self.config
    @config
  end

  class Configuration
    include ActiveSupport::Configurable
    config_accessor :tmp_dir
  end

  configure do |config|
    config.tmp_dir = "tmp/test_gem"
  end
end
```

挨拶メソッドのファイルを更新

``` lib/test_gem.rb
require "test_gem/version"
require "test_gem/config"

module TestGem
  # Your code goes here...
  def self.greet
    p config.tmp_dir
  end
end
```

コマンド実行して確認

```
$ rake install
$ irb
irb(main):001:0> require 'test_gem'
LoadError: cannot load such file -- test_gem/config
	from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/test_gem-0.1.0/lib/json_report_builder.rb:2:in `<top (required)>'
	from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `require'
	from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `rescue in require'
	from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
	from (irb):1
	from /Users/xxxxxxx/.rbenv/versions/2.3.1/bin/irb:11:in `<main>'
```

なんだって！？
タイポかなぁとかいろいろ考えたけど、何をやってもうまくいかず・・・

最終的な解決方法は・・・

```
$ git add .
```

これだけでした

詳しい仕組みは見てないけれども、どうやらgitで管理されているファイルだけが
rake install の対象になるっぽい

``` test_gem.gemspec
  spec.files         = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
```

これが関係しているのかな

とりあえず一度gitの管理にファイルが入れば、そのファイルを更新したらちゃんと更新した内容が反映されます

```
$ rake install
$ irb
irb(main):001:0> require 'test_gem'
=> true
irb(main):002:0> TestGem.greet
"tmp/test_gem"
=> "tmp/test_gem"
```

この状態から出力内容を変更し、

``` lib/test_gem/config.rb
  configure do |config|
    config.tmp_dir = "tmp/test_gem_change"
  end
```

再度実行すると

```
$ rake install
$ irb
irb(main):001:0> require 'test_gem'
=> true
irb(main):002:0> TestGem.greet
"tmp/test_gem_change"
=> "tmp/test_gem_change"
```

となります

無事スタートを切れてよかった・・・


# 追記

実行方法だけど、もっと簡単でさらにgit addしなくてもいいものがありましたw

```
$ bin/console
```

これならわざわざ毎回requireとか書かなくてもいいし、、、
かなり時間を無駄にしたー
Javaだけで、webのフロントとサーバが作れるGWTを始めませんか？　その５(プロジェクト実行）

プロジェクトの実行の記事を追加しました。

http://gwt-japan.dix.asia/GWT_JAPAN

昔のドキュメントの多くが、プロジェクトの実行が変わった事を紹介されていません。
昔は、ブラウザにＧＷＴ用のプラグインをインストールしていましたが、
今は、super dev modeとよばれる方法でブラウザ依存をせずに、実行を行う事ができます。
昔は、ブラウザがバージョンアップすると、プラグインが対応できていなくて、実行できない場合がありましたが、今は、そうでもありません。
FFmpeg 3.xで新しく追加されたAPIの分析。

###2016.09.04
- [この](http://ffmpeg.org/doxygen/3.1/group__lavc__encdec.html)文書を参照しdecoding時のそれぞれの役割のもっと明瞭な説明を追加しました。
- ソースを更新しました。

##Decoding Functions

###[avcodec_send_packet](https://www.ffmpeg.org/doxygen/3.1/group__lavc__decoding.html#ga58bc4bf1e0ac59e27362597e467efff3)
- **引数**
    - AVCodecContext* avctx - デコーダーするコデックのコンテキスト。
    - AVPacket*　avpkt - 解除されたデータを持つべきのコンテーナ。nullの場合はコンテキストのでコーディングデータを全てドーレイン（クリア）します。
- **役割**
    - それぞれのストリームのpacketを**AVCodecContext**の内部バーファ保存します。普通は１フレーム程度の大きさになりそうです。
    - もし、内部バーファが籠った場合、**AVERROR(EAGAIN)**のエラーを返還します。この場合、avcodec_receive_frameでデータを読まなければなりません。
    - stream読みが終わった場合、avpkt引数にNULLを渡って、drain modeを実行させます。
<br/>
- **流れ**
    1. コデックコンテキストが開いているか、またはデコーダー用のコンテキストなのかを検討する。条件に当たらない場合い、この段階でAVERROR(EINVAL)を返還します。
    2. コンテキストがドーレインされてる場合、**AVERROR_EOF**変換します。
    3. avpktがnull、またはavpkt->sizeが0の場合、コンテキストにドレインすることを指示する。コデックのcapabilities(avctx->codec->capabilities)がAV_CODEC_CAP_DELAYである場合、0を返還します。
    4. コンテキストが持つコデックにsend_packet関数がある場合、avpktをsend_packet関数に渡し、結果を返還します。avpktがない場合はそのままnullを渡して結果を返還します。
    5. 普通は4番までの順番で終わりですがコデックが新しいapiを対応してない場合、以前のapiをエミュレーションします。詳細はまあ面倒くさいです。笑。


---
###[avcodec_receive_frame](https://www.ffmpeg.org/doxygen/3.1/group__lavc__decoding.html#ga11e6542c4e66d3028668788a1a74217c)

- **引数**
    - AVCodecContext* avctx - デコーダーするコデックのコンテキスト。
    - AVFrame* frame
- **役割**
    - **AVCodecContext**の内部バーファーのpacketをdecodeして**AVFrame**に渡します。
    - AVERROR(EAGAIN)が変換されるまで、繰り返して、関数を呼び出す必要があります。
    - decodingが終わって、コンテキストがdrain modeに入った場合、AVERROR_EOFが変換されるまでこの関数を呼び出してください。
- **流れ**
    1. **frameの持つデータをクリンします。av_frame_unrefをframeポインターについに使っています。** ***注意する処ですね。***
    2. コデックコンテキストが開いているか、またはデコーダー用のコンテキストなのかを検討する。条件に当たらない場合い、この段階でAVERROR(EINVAL)を返還します。
    3. コンテキストが持つコデックにreceive_frame関数がある場合、コンテキストがドレイン中ならAVERROR_EOFを返還します。その以外は、receive_frameにframeポインターを渡して結果を返還します。
    4. 普通は３番までの順番で終わりですがコデックが新しいapiを対応してない場合、以前のapiをエミュレーションします。


###使用法(出所は[こちら](https://ffmpeg.org/doxygen/trunk/libavformat_2utils_8c_source.html#l02851)から)
```swift
defer {
    avcodec_send_packet(avctx, NULL)
    while true {
        if AVERROR_EOF == avcodec_receive_packet(avctx, frame) {
            break
        }
    }
}
while 0 <= av_read_frame(avctx, packet) {
    // avcodec_decode_video2[audio4](...)を下のコードに変更します。
    // もっと簡単に出来ると思いますが。サイドーイフェックトを避けるためほとんど変更しないままで適用してみました。
    ...
    
    var ret = avcodec_send_packet(avctx, packet)
    // retがAVERROR(EAGAIN)の場合, receive_frameでAVERROR_EOFが返還されるまで、packet繰り返して送ります。
    if 0 > ret && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF {
        if 0 > ret { // error
            break
        }
        continue
    }
　　　ret = avcodec_receive_frame(avctx, frame)
    if 0 > ret && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF {
        if 0 > ret {
            break
        }
    }
    // success to get frame
    ...
}
```
Linux コマンド逆引き

たまに使うコマンドを一々覚えるのが面倒なので、自分用にメモ。

## ファイル系

### ディレクトリごとzip圧縮

```
zip -r [DEST] [SRC_DIR]
```

### tar.gz 圧縮

```
tar -zcvf [DEST] [SRC]
```

### tar.gz 解凍

```
tar -zxvf [SRC]
```

### 空ファイルを作成する

```
touch [FILE_NAME]
```

### シンボリックリンクを作成する。

```
ln -s [TARGET] [LINK_NAME]
```

### シンボリックリンクを削除する。

```
unlink [LINK_NAME]
```

### 属性を維持したままコピー

```
cp -p [SRC] [DEST]
```

### 文字コードを変更してtail

```
tail -f [filename] | nkf -u -w
```

### 文字列置換

```
sed -e 's/[from]/[to]/g' [SRC]
```

### カレントディレクトリ以降の特定の拡張子を持ったファイルを更新日昇順に表示する

```
find . -type f -regextype posix-egrep -regex ".*((\.java)|(\.sql)|(\.jsp))" -exec ls -ltr {} +
```

## ユーザ系

### ユーザを追加する

```
useradd [USER_NAME]
```

### ログイン不可ユーザを追加する

```
useradd -s /sbin/nologin [USER_NAME]
```

### パスワードを変更する

```
passwd [USER_NAME]
```

### ユーザの一覧を表示する

```
cat /etc/passwd
```

### 指定のユーザをsudoできるようにする

```
usermod -aG admin [USER_NAME]
```

> 初回のみ以下を実行し、sudo実行用グループの作成とsudoersの設定をしておく。
> ※全コマンドがパスワードなしでrootを含む全ユーザにて実行可能になる設定のため、注意。
>
> ```
> groupadd admin
> visudo -f /etc/sudoers.d/admin
> ```
>
> viが起動するので、以下を記述し、保存
>
> ```
> %admin ALL=(ALL) NOPASSWD: ALL
> Defaults:%admin !requiretty
> ```

## グループ系

### グループにユーザを追加

```
usermod -aG [GROUP_NAME] [USER_NAME]
```

### ユーザが所属しているグループを確認

```
groups [USER_NAME]
```

### グループに所属するユーザを確認

```
getent group [GROUP_NAME]
```

### グループの一覧を確認

```
getent group
```

## 日付・時刻系

### カレンダを表示

```
cal
```

### 現在時刻を表示

```
date
```

### タイムゾーンをJSTに変更する

```
timedatectl set-timezone Asia/Tokyo
```

## ネットワーク系

### GUIで設定参照・編集

```
nmtui
```
特定の文字列以外にマッチさせたい

備忘
* コメントを頂き、修正しました。ありがとうございます。

##0. 使うもの

- `=~` : rubyの正規表現用比較演算子
- `!~` : 上記演算子の否定形
- `(?!PATTERN)` : 文字列パターン以外を検索する
- `(?:PATTERN)` : 文字列パターンを検索する
- `\A(?:PATTERN)\z`: 文字列の始まりと終わりを指定(改行含まない)。

##1. 使用例メモ

```rb
if /^(?!^eth0$)(?!^eth1$)/ =~ interface
  p "match"
end
```

```rb
if /^(?!\Aeth0\z)(?!\Aeth1\z)/ =~ interface
  p "match"
end
```

インターフェースが`eth0`または`eth1`以外だったら条件にマッチする
ちょっとややこしいかもしれない。

##2. 他の方法(recommended)
こっちのほうが楽ですね。

```rb
if /\A(?:eth0|eth1)\z/ !~ interface
```
nuget逆引きメモ

必要に迫れたnugetの逆引きメモです。

# ローカルキャッシュのクリア
```posh
nuget locals all -clear
```

# パッケージ作成
今回はクラスライブラリ管理のためにNuGetを使い独自のパッケージリソースを参照する形を取りました。

## nuspecファイルの作成
コマンドライン版のNuGetを使ってnuspecファイルを作成します。
nuspecファイルはcsprojが有るディレクトリで下記を実行すると作成されます。

```posh
nuget spec
```

※コマンドライン版のNuGetにはパスを通してます。

## nuspecファイルを確認
licenseUrl、projectUrl、iconUrl、releaseNotes、copyright、tagsは設定してもいいですが削除しても大丈夫なようです。
※デフォルトのままでpackコマンドを実行すると警告が出ます。

## Nugetパッケージの作成
nuspecファイルを作成したら下記のコマンドを実行

```posh
nuget pack test.csproj -Prop Configuration=Release;Platform=x86 -Symbol -OutputDirectory "\\testserver\nugetgallery\test"
```
Dockerがstartしないのを解決


dockerがstartしてくれなくて困っていたのを解決しました。

## 環境
Mac OS X Yosemite 10.10.5 version

## Dockerがstartしてくれない..
DockerをMacに入れて、起動させてみると..

`docker info` をしても

```
Error response from daemon: Bad response from Docker engine
```

他のコマンドを入れてもこのエラーが出る。

![スクリーンショット 2016-08-24 10.20.33.png](https://qiita-image-store.s3.amazonaws.com/0/85603/58414792-d9df-993b-eaa4-fc7974b90cee.png "スクリーンショット 2016-08-24 10.20.33.png")

ずっとstartしない状態が続いていました(´･ω･`)なぜ？

## 解決
簡単に解決しました。

![スクリーンショット 2016-08-24 10.20.33 2.png](https://qiita-image-store.s3.amazonaws.com/0/85603/367ba91a-ae8f-a57c-6a40-73c4e5d7442f.png "スクリーンショット 2016-08-24 10.20.33 2.png")

`Preferences` から

![スクリーンショット 2016-08-24 10.26.52.png](https://qiita-image-store.s3.amazonaws.com/0/85603/810a3dd2-0855-4406-dce7-326c02fb9b5c.png "スクリーンショット 2016-08-24 10.26.52.png")

`Reset` を押すと..

![スクリーンショット 2016-08-24 10.27.40.png](https://qiita-image-store.s3.amazonaws.com/0/85603/204ad061-e574-7830-9ccc-e7a54c5cf733.png "スクリーンショット 2016-08-24 10.27.40.png")


動いた..!!

defaultのresetを押せば解決しました。
JavaScriptにおけるネイティブオブジェクト(前編)

JavaScriptには以下のネイティブオブジェクトがある

・Number()

・String()

・Boolean()

・Object()

・Array()

・Function()

・Data()

・RegExp()

・Error()

それらのうち上から６つを詳しくみていく。（前編ではObject()とFunction()）

リンク：[後編](http://qiita.com/Knbass/items/dcce4415393befeae0b9)

##Object()オブジェクト

###定義方法

```
var sample = {}; //もしくはvar sample new object();
```

###Object()が持つインスタンスプロパティとインスタンスメソッド
・インスタンスプロパティ
constructor・・・どのオブジェクトの種類なのかが格納されているプロパティ


・インスタンスメソッド

hasOwnProperty(V)

isPrototypeOf(V)

propertyIsEnumerable(V)

toLocaleString()

toString()

valueOf()

###オブジェクトリテラルでObject()を生成する

ドット記法でプロパティを追加していくのは行数が多く、効率が悪いので、宣言時にプロパティを追加する場合はオブジェクトリテラルを使う。

```
//ドット記法で追加
var sample = new Object();
sample.a = 1;
sample.b = 2;
sample.c = 3;

//オブジェクトリテラル
var sample = {a;1, b:2, c:3};

```




##Function()オブジェクト

###定義方法

```
//関数宣言
function sample(param1, pram2){
return pram1 + pram2;
}


//関数式
var sample = function(pram1, pram2){
return pram1 + pram2;
};

//関数式(再帰を使う場合に使用)
var sample = function sample(pram1, pram2){
return pram1 + pram2;
};

//匿名（無名）関数
(function(){

})


```


###Function()が持つインスタンスプロパティとインスタンスメソッド

・インスタンスプロパティ

constructor

arguments・・・関数に渡された引数を格納する配列のようなオブジェクト

使用例

```
var add = function(){
	return arguments[0] + arguments[1];
};

console.log(add(4,4)); //出力：8

```

length・・・パラメータの数を返す

使用例

```
var myFunction = function(z, s, d){
	return arguments.length;
};

console.log(myFunction(z, s)); //出力: 2  渡したパラメータの数を出力する（argumentsのサイズ）



var myFunction = function(z, s, d){
	return myFunction.length;
};

console.log(myFunction(z, s)); //出力: 3  関数が期待するパラメータの数を出力する

```

・インスタンスメソッド

apply(thisArg, argArray)・・・thisArgにthisの値を渡し、argArrayに渡された配列を引数リストとして関数を実行する

call(thisArg [, arg1 [, arg2 [, ...]]])・・・thisArgにthisの値を渡し、関数を実行する。第二引数以降の引数が実行関数の第一引数となる

toString()・・・関数を文字列として返す


###関数の即時実行と再帰呼び出し

関数定義の後に()演算子を付与することによって、その場で実行することができる。()の中には引数を与える

```
var add = function(a, b){
   console.log(a + b); //出力: 3
}(1, 2);

```

関数は自身を呼ぶことができる。これを再起呼び出しという。

```
var countDownFrom = function(num){
	console.log(num);
	num--;
	if(num < 0){
		return false;
	}
	countDownFrom(num);
}

countDownFrom(5); //出力: 5,4,3,2,1,0

```


##リファレンス
開眼！JavaScript(３章，４章)
プログラマーあるある

# 前は動いてた！
いえいえ。動いてませんて。
或いは別の何かですって。

# 故障だ！
ハードウェアを疑うのは最後の最後です。

# 息をしてないの！
少し待ってあげてください。
何かボトルネックになって頑張ってるかもしれません。
待ちきれずに次のアクションとかトドメですから。

# バンバン
叩かない。ロシア式。だめ。ぜったい

# 力強くEnter
たぶん意味ないです。

# はじまる前から終わってた
営業さんはお仕事をとるまでがお仕事です。
デスマ確定案件お疲れ様です。

# 未来予想図
キャパは余裕をもって。すぐパンクするよ。

# そんなことすんなよｗ
するんですよ。故意でなくとも。

# 相手はコンピューターです
もしかしたらたまに違う動きも。。。しません。
評価する人間側の問題です。
マルチスレッドだったり非同期であってもそれはそれとして。

# まずは自分を
疑いましょう。恥ずかしい思いをしたくないのなら。

# How much
正確な見積もりは規模に比例して難しくなります。
見積もりに自信がないのなら
見積もれる根拠となるものをデモ的にまずは作りましょう。

# 再発明
欲しいと思ったものは大抵既にあります。

# 互換性
ほどほどにね。コストに見合うところまでがんばろう。

# できねぇ
要件によっては技術的にほんとにできないことも。お断りしましょう。
技量的にできないこともできないことだもんね。胸を張ってエッヘン

# 超ぉ気持ちぃぃ！
あなたが居なくなったら誰もメンテできません。

# 新しい力を手に入れた
すぐ使いたい気持ち。わかる。でもちょっとまって。

# 道具
プロだから。こだわって欲しい。

# テスト
テストしたことにするためのテスト
納品物として必要なだけのテスト
品質って。なんだろうね。
どうせまた跳ね返ってきます。

# できました！
はい。コーディング完ですね。

# やぶれかぶれ
状況が悪化するだけです。傷が深くなるまえに専門家を呼びましょう。

# 頭のなかで
作れないものはコードも書けません。
時間をかけていいので理解を深めましょう。

# どんなにおっきなものも
砕けます。原子レベルで。嘘です。
砕く大きさ、カテゴライズ、なんかがきっと経験です。

# ピコーン
閃きのないまま労働すると結局は。ね。
作るコストよりメンテするコストがうんと高い。

# コード書くなんて新人の仕事
違うよ。ぜんぜん違うよ。

# 増えるワカメ（コード）
余裕のない状況は人を狂わせる。
とりあえず動かすぞ！

# 意味あるんかこのコード消したろｗ
ごめんなさい
Actorで作る有限オートマトン


# 有限オートマトン？

Finite State Machine(FSM)
ざっくり言うとイベントを受け取って状態遷移するステートマシン。
詳しくは[Wikipedia](https://ja.wikipedia.org/wiki/有限オートマトン)参照

# FSMをActorで実装する

まさにそのための`akka.actor.FSM`があるので、これを使って実装する。

## FSMに必要な型を定義する

必要となるのは以下の3つの型

- `State`
  - FSMの状態
- `Data`
  - FSMが内部的に持つ情報
- `Event`
  - FSMの状態遷移をキックするもの

今回は信号をFSMで実装してみる。

```scala:State.scala
sealed trait SignalState
case object Red extends SignalState
case object Green extends SignalState
case object Yellow extends SignalState
```

```scala:Data.scala
sealed trait SignalData

object SignalData {
  sealed case class SignalColor(value: String) extends SignalData
  val RedData = SignalColor("red")
  val YellowData = SignalColor("yellow")
  val GreenData = SignalColor("green")
}
```

```scala:Event.scala
sealed trait SignalEvent
case object ChangeSignal extends SignalEvent
case object RetainSignal extends SignalEvent
```

## FSMを実装する

先ほど用意したState/Data/Eventを利用してFSMを実装する。
FSM自体の実装はDSLだけで完結するため非常に楽。

```scala:SignalActor.scala
class SignalChangeFSMActor extends Actor with FSM[SignalState, SignalData] {
  // 初期状態
  startWith(Red, RedData)

  // Eventを受け取った時の状態遷移
  when(Green) {
    case Event(ChangeSignal, _) => goto(Yellow) using YellowData
    case Event(RetainSignal, _) => stay
  }

  when(Yellow) {
    case Event(ChangeSignal, _) => goto(Red) using RedData
    case Event(RetainSignal, _) => stay
  }

  when(Red) {
    case Event(ChangeSignal, _) => goto(Green) using GreenData
    case Event(RetainSignal, _) => stay
  }

  // 状態遷移中の処理
  onTransition {
    case Green -> Yellow =>
      println(s"WARN! green -> yellow: $stateData")
    case Yellow -> Red =>
      println(s"CAUTION! yellow -> red: $stateData")
    case Red -> Green =>
      println(s"OK! red -> green: $stateData")
  }

  // Actorが終了する際の処理
  onTermination {
    case StopEvent(_, _, _) =>
      println("Shutting down FSM...")
  }

  // 初期化
  initialize()
}
```

FSMの根幹となる状態遷移は、`when`の引数に対する`PartialFunction`で、`goto`か`stay`を返せば良い。
今回のサンプルでは破棄しているが、`Event`の第二引数は現在の状態を表す`stateData`と同じものが入ってくるらしい。

## FSMなActorを使う

通常のActorと同様に生成してメッセージを送信すれば良い。

```scala
object ApplicationMain extends App {
  val system = ActorSystem("MyActorSystem")
  val signalActor = system.actorOf(Props[SignalChangeFSMActor], "fsm-signal")

  signalActor ! ChangeSignal
  signalActor ! RetainSignal
  signalActor ! ChangeSignal
  signalActor ! RetainSignal
  signalActor ! ChangeSignal
  signalActor ! RetainSignal
  signalActor ! ChangeSignal
  signalActor ! RetainSignal

  Thread.sleep(3000)
  system.terminate()
}
```

実行すると以下のように出力される。

```
OK! red -> green: SignalColor(red)
WARN! green -> yellow: SignalColor(green)
CAUTION! yellow -> red: SignalColor(yellow)
OK! red -> green: SignalColor(red)
Shutting down FSM...
```

## 所感

Actorの場合、`context.become`とか`context.unbecome`で状態を切り替えることが可能なため、わざわざ`akka.actor.FSM`を使わなくても同じようなことは実現できる。
`akka.actor.FSM`ならDSLで状態遷移とイベントハンドラを宣言的に記述できるので、やや状態遷移が複雑なものなどはDSLをおぼえてでも使う価値はあるかも知れない。
WRF > land use > MODIS (default) / USGS

```txt:動作環境
WRF 3.7.1 on CentOS 6.8 (64bit)
```

WRF(Weather Research and Forecasting Model)に関して。

参考 http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap3.htm#_Selecting_Between_USGS

### 2種類のモデル

Land Useモデルというのが以下の2種類から選択できる。

- MODIS IGBP 21-category data
  - default
- USGS land-cover classification

[カテゴリのテーブル](http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap3.htm#_Land_Use_and)

### 注意点

> It must be emphasized that the MODIS-based categories should only be used with the Noah land surface model in WRF.

### MODIS / USGSの使用切替

MODIS利用

```
geog_data_res = ‘default’, ‘default’,
```

USGS利用

```
geog_data_res = ‘usgs_30s+default’, ‘usgs_30s+default’,
```

GEOGRID.TBLファイルのサーチが変わるようだ。

### num_land_cat

参考リンクに以下の記載あり。

> When changing from the default 21-class MODIS land-use data, the user must also ensure that the num_land_cat namelist variable is set correctly in &physics namelist record in the WRF namelist.input file. For 24-class USGS data, num_land_cat should be set to 24.

defaultのMODISから変更時には WRF用namelist.input のnum_land_catの設定が必要。
NCAR / UCAR > CISL > Research Data Archive > RDA web / メンテナンス日 / contact

CISL (Computational & Information Systems Lab)の気象データ。

https://www2.cisl.ucar.edu/data-portals/research-data-archive

[RDA web site](http://rda.ucar.edu/)はメンテナンス中のためかつながらない。

### メンテナンス日

http://dailyb.cisl.ucar.edu/
にMAINTENANCE SCHEDULEのテーブルがある。
8月24日はメンテナンス対象日ではないようだ。

### contact

http://dailyb.cisl.ucar.edu/
の最後に以下記載あり。

> Please email cislhelp@ucar.edu for questions.

### 復旧
(追記 2016/08/25)

CISLのヘルプデスクから回答があり、日曜からのメンテナンスでダウンしていたとのこと。

現在は http://rda.ucar.edu/ につながるようになっている。
[Xamarin]ビルド時のThe application XXX needs to be rebuilt due to an inconsistency エラーを解消する方法

Xamarin.Formsのビルド時に発生する「The application XXX needs to be rebuilt due to an inconsistency〜」のエラー解消方法についてのエントリーです。
他にも方法があるかもしれませんが、これが早く解消できる方法のような気がします。

#環境
- Windows10
- Visual Studio 2015
- Xamarin.Forms 2.3.1

#発生タイミングとエラーメッセージ
プロジェクトファイルを実行した際に下記エラーが発生します。
>The application XXX needs to be rebuilt due to an inconsistency between
the connected Mac and the local app. Please rebuild the application and try
again.

![キャプチャ - コピー.PNG](https://qiita-image-store.s3.amazonaws.com/0/136009/d75b6d58-c43e-8e22-af90-428948a8a819.png)

#解消方法
ソリューションを閉じて、ソリューションの各プロジェクトフォルダ内にあるbinとobjフォルダを削除します。
その後、ソリューションを開き、実行するとエラーメッセージは表示されません。

#参考
・Bug Report
 https://bugzilla.xamarin.com/show_bug.cgi?id=36059
ITサービスマネージャー　2012年度　問3

#始めに
ＩＴサービスマネージャーの午後２の論文についてあれこれ書いてみようと思います
対象のシステムは[生命保険会社のシステム](http://qiita.com/triple4649/items/56d2b450f2b8b68bdfe5)をベースにしています

#問題文の解析
![ITサービスマネージャー2012-03.png](https://qiita-image-store.s3.amazonaws.com/0/136860/c11b96d2-5ac0-59ca-289f-44e089b42c36.png)

#更新履歴
-2016年8月29日 問題文の解析を更新
WineHQ インストール方法

#環境
[SparkyLinux](http://sparkylinux.org/)
(Debian ベースの軽量 OS)

WineHQ のインストールを試みてハマったのでメモを残す。

#リポジトリ設定

```bash
wget https://dl.winehq.org/wine-builds/Release.key
sudo apt-key add Release.key
sudo vi /etc/apt/sources.list.d/wine.list
```

```bash:/etc/apt/sources.list.d/wine.list
deb http://dl.winehq.org/wine-builds/debian/ sid main
deb http://ftp.de.debian.org/debian/ oldstable main
```

[公式ページ](https://wiki.winehq.org/Debian)では ``deb https://dl.winehq.org/wine-builds/debian/ DISTRO main``
と書いてあるのだが、 ``https`` だとインストール時にエラーが起きるので
``http`` に書き直す。

``DISTRO`` の部分は下記から選択できる。

* wheezy
* jessie
* stretch
* sid 

SparkyLinux がどれに該当するのか判らないので ``sid`` を選択してみた。

#インストール

```bash
sudo apt-get update
sudo apt-get install winehq-devel cabextract
```

#文字化けの解消

```bash
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
install winetricks /usr/local/bin
winetricks allfonts
```

#EXE ファイルのインストール

```bash
wineboot
wine exe_file_path
```
Inventory / unity > code v0.4 > Inventory.csv読込み / Searchボタン実装

```txt:動作環境
Unity 5.3.5-f1 on MacOS X El Capitan
```

在庫表示システム。

v0.1 http://qiita.com/7of9/items/076cf5aaff7095bb876d

### v0.4

v0.4までにしたこと

- Inventory.csv読込み
  - Assets/Reoucesにcsvファイルを置いた
- 検索クラスDataBaseManager追加
  - http://qiita.com/7of9/items/eaf2fe5c6f7d0ad2fa3a#comment-eb2702b1bf41c9ec7583
  - @KeisukeKudo さんのコードを使わせていただきました
- Webボタン実装
  - Application.OpenURL();


### Inventory.csv

```Inventory.csv
caseNo,row,column,name,about,url,checkDate,,
1,1,1,HC-SR04,Ultrasonic sensor...,https://www.switch-science.com/catalog/1606/,160823,,
1,1,2,2SK4017,東芝電界効果トランジスタ。4V駆動。オン抵抗が低い。,http://akizukidenshi.com/download/ds/toshiba/2SK4017.pdf,160823,,
1,1,3,ESP-WROOM-02,電源電圧 3.0-3.6V。消費電流 平均 80mA。,https://www.switch-science.com/catalog/2346/,160823,,
1,2,1,033CC0,三端子レギュレータ,http://www.tyro-teq.com/ds/pdf/b/0055/BAJ2CC0FP.pdf,160823,,
1,2,2,BST76A,NチャネルMOSFET,http://aitendo3.sakura.ne.jp/aitendo_data/product_img/transisitor/BST76A/BST76A_philips.pdf,160823,,
```

EXCELで作った。
行末に余分な","が入っている。


### 機能

v0.4の機能としては

- 起動時にAssets/Resouces/Inventory.csvファイルを読込み
- Name欄に名前入力、Searchで検索結果を表示
  - 部分一致検索
- Webボタンを押すと、対応するページがブラウザで開く


### code

[v0.4 @ github](https://github.com/yasokada/unity-160820-Inventory-UI/releases/tag/v0.4)

### 2SK4017でSearchした結果

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/e118b619-bd14-5703-6e45-27851073288d.png)

Webボタンを押すと秋月のページがブラウザで開く。

### BST76AでSearchした結果

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/3ef05ac7-26cb-c887-3792-aae4f3ccd241.png)

Webボタンを押すとデータシートのPDFに飛ぶ。