OmniAICreator/Qiita-1.07M huggingface dataset:
知っておくと役に立つCSS

## <i class="fa fa-pencil" aria-hidden="true"></i> スクロール時のカクカクを直す

`overflow: scroll;`はiOS Safariだとスクロールするとカクカクする 
スムーズにスクロールするよう下記CSSもセットで書いてあげる

```css
.element {
  overflow: scroll;
  -webkit-overflow-scrolling: touch;
}
```

## <i class="fa fa-pencil" aria-hidden="true"></i> コピペさせないCSS

user-select：コピー無効化
touch-callout：iOSで文章等を長押しした際に表示されるポップアップメニューを無効化

```css
.element {
  user-select: none;
  -webkit-user-select: none;
  touch-callout: none;
  -webkit-touch-callout: none;
}
```

## <i class="fa fa-pencil" aria-hidden="true"></i> 半透明のぼかしガラスを実装
<strong>Safari / iOS Safariのみサポート中</strong>　　 参考: [Can I use] (http://caniuse.com/#search=backdrop-filter) 

```css
.element {
  backdrop-filter: blur(5px);
  -webkit-backdrop-filter: blur(5px);
}
```

## <i class="fa fa-pencil" aria-hidden="true"></i> フォントを綺麗に見せる
テキストにアンチエイリアスをかけて綺麗に見せる小技。
海外のしゃれたサイトはよく使っている。windowsには全く変化がない。

```css
.element {
  font-smoothing: antialiased;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: antialiased;
}
```

## <i class="fa fa-pencil" aria-hidden="true"></i> ブラウザに優しいアニメーション
 - JavaScriptやCSSで要素をアニメーション(変形)させるCSSに付与する 
 - hoverしたら、このプロパティ変化しますよー！的な感じで使う
  
※ 事前に要素がアニメーションする事をブラウザにお知らせしておくことで、要素の変更・レンダリング処理が速くなり、滑らかなアニメーション処理が行われる。（らしい）

```css
.element {
  will-change: transform;
}

.element:hover {
  transform:  rotate(90deg); 
}

```

## <i class="fa fa-pencil" aria-hidden="true"></i> 形に沿ってテキストを回り込ませる
<strong>IE(Edge), 狐, Opera以外はサポート中</strong>  　参考: [Can I use] (http://caniuse.com/#search=css-shape) 
※未対応ブラウザは円形に回り込まない。


```css
.element-img {
  width: 20em;
  height: 20em;
  float: left;
  border-radius: 25em;
  shape-outside: circle(50%);  // 円形に沿ってテキストを回り込ませる
}
```

## <i class="fa fa-pencil" aria-hidden="true"></i> 背景色と背景画像をブレンドする
このCSSを使うと背景色と背景画像にフィルタ効果をつけて、いい感じにブレンドすることができる。
※ photoshopのレイヤー効果をCSSで付けれる

<strong>IE(Edge), 狐, Opera以外はサポート中</strong>  　参考: [Can I use] (http://caniuse.com/#search=background-blend-mode) 

```CSS
.element-bg {
    background-image: 
    linear-gradient(lightblue 0%, pink 100%), linear-gradient(to right, pink 30%, white 100%), url("背景画像");
    background-blend-mode: hue; // 色相効果でブレンド
}
```

#### background-blend-modeプロパティ一覧
|プロパティ|効果の説明|
|:----:|:----:|
|normal|初期値(ブレンドしない )|
|multiply|乗算|
|screen|スクリーン|
|overlay|オーバーレイ|
|darken|比較(暗)|
|lighten|比較(明)|
|color-dodge|覆い焼き|
|color-burn|焼きこみ|
|hard-light|ハードライト|
|soft-light|ソフトライト|
|difference|差の絶対値|
|exclusion|除外|
|hue|色相|
|saturation|彩度|
|color|カラー|
|luminosity|輝度|

## <i class="fa fa-pencil" aria-hidden="true"></i> CSSの条件分岐
特定ブラウザにしかサポートされていないCSSを使用する場合に用いる。
@supportsを使用して、メディアクエリのようにCSSでif文を書くことができる  

```css

.element-img {
    width: 20em;
    height: 20em;
    float: left;
    margin: 0.25em 2em 1em 0;
}

/* ※shape-outsideがサポートされているブラウザのみ、以下のスタイルが適用される */
@supports (shape-outside: circle()) {
    .element-img {
        shape-outside: circle(50%);
        border-radius: 25em;
    }    
}
```

## <i class="fa fa-pencil" aria-hidden="true"></i> 参考
http://www.lottejackson.com/learning/supports-will-change-your-life
はじめてのDjangoに最適、簡単なテンプレートを表示させてみる

#Djangoに慣れてみるには

そもそもSQLだとか、なんだとかわかりにくすぎるのが問題なんじゃないかと。
いきなりデータベースに接続してアプリケーションウンタラカンタラ・・・。個人的には敷居が高すぎる気がしました。

初歩の初歩はbottleでもやったとおり、まずはテンプレートを作り、HTMLを表示させてみるところからなんじゃないかと思いついたのでやったことをまとめておきます。

#前回からの続き

＞http://qiita.com/Gen6/items/1848f8b4d938807d082e

まずはテンプレートを格納するディレクトリを作りましょう。
mysite/ 直下に　templates というディレクトリを作ります。

わかりやすく画面キャプチャしてみました。

<img width="411" alt="スクリーンショット 2016-10-21 15.19.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/71585/aa079f30-92d7-d8b7-2445-def1462d5c5b.png">

早速基本的な設定をしていきます。

#設定ファイルなどに記述を加えていく

```myapp/urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^template/$', views.index, name='index'), 
]
```

```mysite/settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'),], #ここを加える
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
```

```templates/index.html
<!DOCTYPE html>
<html>
 <head lang="ja">
    <meta charset="UTF-8">
    <title></title>
 </head>
 <body>
  <p>welcome template</p>
 </body>
</html>
```

```myapp/views.py
from django.http.response import HttpResponse
from django.shortcuts import render


def index(request):
    return render(request,'index.html')
```


ここまで出来ればOK。


```
$ cd Djangoproject
$ source virtualenv/bin/activate
$ cd mysite
$ python manage.py runserver
```

http://127.0.0.1:8000/myapp/template/

にindex.htmlが表示されれば完成です。


なお、テンプレートは継承という方法もあるのでその場合は templates ディレクトリに main.htmlを以下のように作成します。

```templates/main.html
<!DOCTYPE html>
<html>
  <head lang="ja">
    <meta charset="UTF-8">
    <title></title>
  </head>
  <body>
    {% block body %}
    {% endblock %}
  </body>
</html>
```

そしてindex.htmlを以下のように書き直し完了。

```templates/index.html
{% extends "main.html" %}
{% block body %}
  <p>welcome template</p>
{% endblock %}
```
VisualStudioCode 上に PlantUML の syntax highlight + リアルタイムプレビュー環境を作る


PlantUML というナイスなツールと、VS Code 及びそのプラグイン(+手修正)でいい感じになった気がしたのでそのメモを残しておく。
調べればすぐ出てくる程度の情報ではあるが、手修正が必要な箇所や、初歩的ではあるけれど嵌りポイントもあるので備忘録的な意味も兼ねて。

## 想定環境
* windows? (恐らくは必須ではないが確認した環境は windows7 professional 64bit)
* JDK 8 
* Graphivz software
* PlantUML
* VisualStudioCode
    * PlantUML Syntax
    * okazuki PlantUML

## 環境構築
使用したバージョンは全て 2016-10-20 時点の最新版。
##### JDK SE Development Kit 8u112
PlantUML は java 環境が必要なので、[jdk-8u112-windows-x64.exe](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) をとりあえず入れた。
特にオプションは変更していない。

##### graphviz 2.38
PlantUML の描画エンジンぽいので、[graphviz-2.38.msi](http://www.graphviz.org/Download_windows.php)を入れる。
こちらもオプションは全てデフォルト。

##### PlantUML (Version 8048)
PlantUML 本体 [plantuml.jar](http://plantuml.com/download) をダウンロードして任意のフォルダ (`D:\plantuml\plantuml.jar`等) に配置。

##### VisualStudioCode
 VisualStudioCode のインストーラ [VSCodeSetup-stable.exe]
(https://code.visualstudio.com/download) を入れる。

##### VisualStudioCode の拡張
VisualStudioCode を起動して、*Ctrl-P* から `ext install plantuml` を入力したりして出てくるリストを利用したりして、

* PlantUML Syntax 0.0.3
* okazuki PlantUML 0.1.5

をインストール。拡張を有効にしたら、一旦 VisualStudioCode を終了して、拡張機能の一部を手修正する。

##### PlnatUML Syntax 0.0.3
[marketplace PlantUML Syntax](https://marketplace.visualstudio.com/items?itemName=qhoekman.language-plantuml) のページの Reviews にもあるように、そのままでは動かない！ので、

```json:%USERPROFILE%\.vscode\extensions\qhoekman.language-plantuml-0.0.3\package.json
    //"main": "./out/src/extension",
```

当該ファイルの17行目(付近)を削除/コメントアウトすると、`Ctrl+Shift+P Mode` コマンド等のファイルモードの変更リストに**PlantUML**が出てくるようになる。また、拡張子を `.pu` 等にすると VisualStudioCode が PlantUML だと認識してくれるようになる。

##### okazuki PlantUML 0.1.5
PlantUML Syntax Mode にすると、こちらの拡張が `plaintext` しか対応していないので、`plantuml` にも無理矢理対応させる。

```javascript:%USERPROFILE%\.vscode\extensions\okazuki.okazukiplantuml-0.1.5\out\src\extension.js　(before)
            if (!(editor.document.languageId === 'plaintext')) {
                return this.errorSnippet("not plaintext");
            }
            return this.extractSnippet();
```

153行目付近の上記部分を以下のような感じにするとPlantUML Syntax Mode でも `Ctrl-Shift-P pl pr` 等でプレビューできるようになる。

```javascript:%USERPROFILE%\.vscode\extensions\okazuki.okazukiplantuml-0.1.5\out\src\extension.js
            switch(editor.document.languageId) {
              case 'plaintext':
              case 'plantuml':
                return this.extractSnippet();
            }
            return this.errorSnippet("mode [" + editor.document.languageId + "] not supported.");
```

あと、環境変数を設定することが必要なのでインストールや配置したものに合わせて、以下のような感じで設定する。

| 環境変数|値 |
|:-----|:-----|
|JAVA_HOME|C:\Program Files\Java\jdk1.8.0_112|
|PLANTUML_HOME|D:\plantuml|

環境構築は以上です。

    Error: write EPIPE

みたいなエラーが出たら、たぶん環境変数のパス指定が間違っているのが主要因だと思われるが、こんなメッセージだけでは意味不明過ぎるので一応メモしておく。

## 動作確認
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/144439/b2432171-42f6-3807-8b7d-b1d805a2d508.png)

編集を続けていれば、自動で再描画されてなかなか良い感じ。Syntax Error とプレビュー表示は独立な方が気分良さそうとか、Syntax もっと頑張ってとかあるけど、満足できるレベルになったので一旦終了。

## その他
ついでに、VisualStudioCode に vimStyle 0.3.13 も入れて更に良い感じになった気がする。
PlantUML Syntax の方は更新されなさそうなので、自前でなんとかするかどうか悩む所である。
httpieで入れ子（ネスト）されたJSONをPOSTする方法

# 方法
```
http post URL Key:='{"key1":"value1", "key2":"value2"}'
```

# 例
以下のようなJSONを送るとする。

```
{
　"Id": "1",
　"json-nest": {
　　　　　　　"name": "N.W.A",
　　　　　　　"from": "Compton"
　　　　　　　}
}
```

この時は以下のように記述する。

```
http post http://... Id=1 json-nest:='{"name":"N.W.A","from":"Compton"}'
```

<br>
---
#### 参考文献
http://qiita.com/yasuno0327/items/b11c2fcefd6b263ab337
https://github.com/jkbrzt/httpie/issues/78
Android実機デバッグ時にWaiting for debuggerが消えずにいつまでたってもデバッグが始まらない

延々ハマっていたが、ようやく解決できたためメモ。
(超初歩的な内容だったのかもしれませんが、、、)

# 環境
- OS:Windows10 Home
- Android Studio 2.2.2
- Zenfone 3 5.5

# 現象
- ビルドは成功して、どうやらUSB経由でアプリはインストールできているものの、実機側で「Waiting for Debugger」と表示されたまま先に進まない
- PC側では、デバッガのログ「Waiting for application to come online」が出力され続けている

# 対応
- AndroidManifest.xmlのapplicationタグに「android:debuggable="true"」を設定する
 - 対応前は最初"false"が設定されていた。
 - 現行SDKだと記述しなくてもよいらしい。
 - というか今のSDKを使うなら記述しない方がよい(必ずデバッグモードに入ってしまうので、消し忘れるとリリース版にwaiting for debaggableが表示されてしまう)
- hostsファイルに「127.0.0.1 localhost」を追記する。 
 - ::1 localhostの記述を消さないといけない？(検証はしていません)
 - デバッグ対象を指定するときに「localhost」を参照している？

# 参考
http://d.hatena.ne.jp/mikkabo/20110302/1299073782
http://greety.sakura.ne.jp/redo/2012/05/do-not-use-debuggable-in-manifest.html
Ubuntuへのdockerインストール

#Ubuntuへのdockerインストール
公式通りにすればいいだけだが一応メモ。
https://docs.docker.com/engine/installation/linux/ubuntulinux/

##手順

```lang:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
```

次のコマンドはOSのバージョンによって異るので注意が必要。
""の中は
https://docs.docker.com/engine/installation/linux/ubuntulinux/
の5に従ってバージョンに適したリポジトリにすること。

```lang:
sudo echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list
```

```lang:
sudo apt-get update
apt-cache policy docker-engine
sudo apt-get update
sudo apt-get install docker-engine
```

##使用したいユーザをdockerグループに入れる
使用したいユーザをdockerグループに入れると都度sudoをつけなくて良くなります。
※あくまでsudoを使えるユーザでないとダメなようです。またグループに加えたあとは再起動が必要。dockerサービスだけの再起動じゃ駄目でした。他に何のサービスを再起動すればいいのかわからなかったのでマシン再起動しました。

```lang:
sudo usermod -aG docker hoge
```
##コンテナを複数管理できるdocker-composeを入れておきます。
下記方法ではかなり古いバージョンになってしまい、version2の書式を使えなかったので変更
~~sudo apt install docker-compose~~

https://docs.docker.com/compose/install/
を参考に。

```lang:
curl -L https://github.com/docker/compose/releases/download/1.9.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
```
PostgreSQLで総件数とページングデータを同時に取得する

RDBからデータを取得する際には

- lmit/offsetをつけてデータ取得のSQLを発行する
- それとは別に同じ条件のcount(*)を発行する

という2ステップが必要とずっと思っていたが、なんとそれを一発でやる方法があるということを今日知った。

``` sql
select *, count(id) over() as full_count from table1 where id < 30 offset 0 limit 10;
```

なんなんだ**over()**って。。。(ググれ)
なかなかの衝撃。
【PHP】fscanfの戻り値【次回予告有】

## PHPマニュアルで定義されているfscanfの戻り値

[PHP: fscanf - Manual](http://php.net/manual/ja/function.fscanf.php)

> 返り値
この関数のパラメータが二つだけの場合、処理された値は配列として返されます。 他方、オプションのパラメータが指定された場合、 この関数は、代入された値の数を返します。 オプション引数は参照渡しとする必要があります。 

これを具体的に整理するのが本記事の目的。

## この関数のパラメータが二つだけの場合

###### 標準入力

```STDIN
1 2
```

###### ソース

``` php
<?php
var_dump(fscanf(STDIN,"%d %d"));
```

###### 戻り値

> 処理された値は配列として返されます。

```STDOUT
array(2) {
  [0]=>
  int(1)
  [1]=>
  int(2)
}
```

定義通りの結果になっています。

## オプションのパラメータが指定された場合

###### 標準入力

```STDIN
1 2
```

###### ソース

``` php
<?php
var_dump(fscanf(STDIN,"%d %d",$a,$b));
```

###### 戻り値

> 代入された値の数を返します

```STDOUT
int(2)
```

こちらも動作は定義通りです。

## パターンマッチしないケースはどうなるの？

先に結論。

|入力|パターン|正常性|オプ無|オプ有|
|----|----|:----:|----|----|
|HKT 48|`"%d %d"`|:x:|`array(null,null)`|`0`|
|48 HKT|`"%d %d"`|:x:|`array(48,null)`|`1`|
|HKT HKT|`"%d %d"`|:x:|`array(null,null)`|`0`|
|48 48|`"%d %d"`|:o:|`array(48,48)`|`2`|
|(空行)|`"%d %d"`|:x:|`null`|`-1`|

`HKT 48`と`48 HKT`の結果の違いが少し気持ち悪い気もしますが、**1つめのパターンに脱落したら、以降のパターンは評価しない**ようです。

###### 標準入力

```
HKT 48
48 HKT
HKT HKT
48 48

```

最後の１行は空行。４行目は正常ケースなのでそれ以外に注目。

#### オプションのパラメータが指定された場合

```php
var_dump(fscanf(STDIN,"%d %d"));
var_dump(fscanf(STDIN,"%d %d"));
var_dump(fscanf(STDIN,"%d %d"));
var_dump(fscanf(STDIN,"%d %d"));
var_dump(fscanf(STDIN,"%d %d"));
```

　:arrow_down:

```
array(2) {
  [0]=>
  NULL
  [1]=>
  NULL
}
array(2) {
  [0]=>
  int(48)
  [1]=>
  NULL
}
array(2) {
  [0]=>
  NULL
  [1]=>
  NULL
}
array(2) {
  [0]=>
  int(48)
  [1]=>
  int(48)
}
NULL
```

#### オプションのパラメータが指定された場合

```php
var_dump(fscanf(STDIN,"%d %d",$a,$b));
var_dump(fscanf(STDIN,"%d %d",$a,$b));
var_dump(fscanf(STDIN,"%d %d",$a,$b));
var_dump(fscanf(STDIN,"%d %d",$a,$b));
var_dump(fscanf(STDIN,"%d %d",$a,$b));
```

　:arrow_down:

```
int(0)
int(1)
int(0)
int(2)
int(-1)
```

## 次回予告

これ、調べているうちに気持ち悪い動きがあったので、近日中に報告します。。。。
Windows共有フォルダ設定（ファイルサーバーって言わなくなったな）

やあ、初心者の見方の僕だよ！(｀･д･´)

まあ共有フォルダを作ってアクセス権を。。なんていうとGUIでささっとやるんですが、コマンドでの設定方法について紹介しています。
初期構築時やたくさんトップフォルダがあったり、リクエストが多い企業さんの運用管理人向けですね。

前提としては、
ドメイングループでコントロールすることを想定しています。
流れとしては、
フォルダを作成する→共有アセクセス権付与→NTFSアクセス権付与。

##続きは以下リンクを参照してください。
http://amachan007.techblog.jp/preview/edit/366176ad992ce84e9d8fb31458e54101

それではさよならさよなら
PHPスクリプト上でMySQLを操作する際に、文字コードを明確に指定する必要があった

# 概要

PHPスクリプト内にて、外部から取得したデータを、加工した上でMySQLのDBに保存しようとしたら・・・全角文字部分が文字化けしてしまった。

原因を調べ、いろいろ試してみたら「接続時に、明確に文字コードを指定したら問題なく動いた。

# 実際にしたこと

古い書き方だけど。


```PHP:接続部分
/*$host,$uid,$passはそれぞれ接続先ホスト、MySQLのユーザ名、同パスワードで、事前に指定されているとする。*/

$connect = mysql_connect($host,$uid,$pass);

/*ここでは、接続に失敗した時の記述は書かない*/
$db = mysql_select_db($db_name,$connect);
mysql_query('SET NAMES utf8',connect);

```

# 参考

http://php.majinak.com/mojibake/
raspberry pi 1 model bで、node-red

#概要
raspberry pi 1 model bに、node-red入れてみた。
#開発環境
raspberry pi 1 model b
raspbian 2016_09_23 jessie lite
#インストール
sudo aptitude install nodered
#起動
node-red-start
#写真
![ras3.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/1e6377c7-bce7-e1a1-45fd-d8407a7c5c5d.jpeg)
88E6060の仕様

昔のルータなどでよく使われていた、Marvellの88E6060というイーサネットスイッチチップの仕様についてのメモです。

![sw_88E6060.jpg](https://qiita-image-store.s3.amazonaws.com/0/104066/279300f6-047c-7868-b767-8fc2fa587fdc.jpeg)


このチップはポートベースのVLANをサポートしています。データシートには以下の例があります。

![スクリーンショット（2016-10-21 14.01.01）.png](https://qiita-image-store.s3.amazonaws.com/0/104066/380d8797-33eb-78b5-5ceb-6118cbcc25b1.png)

この例は内部のWAN,CPUとLAN,CPUの通信を分離しています。この設定はSwitch Port RegistersのPort Based VLAN Map(0x06)でおこない、上記の設定は以下の様な内容になります。

![E6060VLAN.png](https://qiita-image-store.s3.amazonaws.com/0/104066/c8f4bd71-deac-9c02-b4b4-9b18fa09bfbd.png)


ビットフィールドで通信できるポートを示しています。

これでPort5はWANとLANからデータを受け取れますが、どちらからきたかはこれだけではわかりません。

これを判別するために88E6060ではIngress/Engress Trailerという仕組みをサポートしています。

![E6060.png](https://qiita-image-store.s3.amazonaws.com/0/104066/9bf76a4c-d796-4bef-4fd8-11f9cf61266e.png)

Port5のPort Control Register(D:4)のTrailer(14bit)を1にするとEtherパケットに以下のTrailerが入ってきます。

![スクリーンショット（2016-10-21 14.01.32）.png](https://qiita-image-store.s3.amazonaws.com/0/104066/f02e372a-4c2b-6d0c-8d46-78cc16964e84.png)

SPID(Source Port ID)でどのポートからのパケットかが区別できるようになります。

またIngress Mode(8bit)を1にすると送信するパケットにTrailerを挿入して、DPV(Distination Port Vector)で送信先のポートを指定する事ができます。

![スクリーンショット（2016-10-21 14.01.15）.png](https://qiita-image-store.s3.amazonaws.com/0/104066/505b2a10-3b61-6fd5-15bb-d2c584afcf5f.png)

WANポート(Port0)に送る時はDPVが0x01:b00000001となりLANポート(Port0-4)に送る時はDPVが0x1e:b00011110となります。

とりあえずIngress/Engressのサポート無しで[FreeBSDのetherswitch](http://qiita.com/yamori813/items/183bd279fbdfa5b9c70f)用のコードを書いてレビュー出してheadに入れてもらいました。

Ingress/Engressは今更感があるので、結局放置していますが、netgraphベースでサポートコードを書くという方法もあるようです。

e6060ではSW_MODEというピンの設定で、起動時にスイッチの機能を有効にするかを設定ができます。CPU attached modeの場合、スイッチは機能しない状態で起動します。これは不用意にパケットが転送されしまう事を避けるためです。この場合、各ポートのPort Control RegisterのPortStateをForwardingにすることで機能するようになります。

88E6065を使ったルータが手に入ったので、ちょっといじってみた。6065は6060の後継の様でport vlanの仕様は継承して.1Qがつかるようになっています。このためSMIのレジスタはいろいろ変わっています。Switchを普通に機能させるためにはForceMapを1にするか、Egress Floodsを3にする必要があるようです。また.1Qのメンバーは新しく追加されたSwitch Global 1 RegistersのVLAN Translation Unit(VTU)で設定を行います。
オブジェクトのシンボルを調べる

XCodeでのビルドが、何度やってもリンカでシンボルが見つからずエラーに。
シンボルがあるか調べようと思ったけど、久々過ぎてコマンドを忘れていたので、備忘録として。

```
$ nm libParse.a  | grep ParseClient
                 U _OBJC_CLASS_$_ParseClientConfiguration
libParse.a(ParseClientConfiguration.o):
00000000000002b0 t +[ParseClientConfiguration configurationWithBlock:]
```
[UniRx]２つのボタンの片方を押したら両方を無効化する奴を作ってみた

Buttonのenableで制御しても良いけどこんなかんじ


```
Button buttonA;
Button buttonB;

var disporserA = buttonA.ClickAsObservable()
    .Subscribe(_ =>
{
	Debug.Log("Aが押された");
}).AddTo(this);

var disporserB = buttonB.ClickAsObservable()
    .Subscribe(_ =>
{
	Debug.Log("Bが押された");
}).AddTo(this);


buttonA.ClickAsObservable().Merge(buttonB.ClickAsObservable())
    .Subscribe(_ =>
{
    disporserA.Dispose();
    disporserB.Dispose();
}).AddTo(this);
```
もっとも簡単なDjangoをはじめる方法

#Djangoをはじめてみよう

今までずっとbottleばっかり触ってきたのですが、Djangoにも手を付けようと考えとりあえず環境構築だけしてしまおうというやつです。ずっとPython2系ばかりだったので、最新版のDjangoを導入するにあたり様々躓いたのでまとめておきます。

とりあえずPython3をインストールしておいてください。

#仮想環境の構築

仮想環境を作るのが面倒くさい、と思っていたのですが仮想環境を作らないほうが面倒くさいことに気が付きました。皆様におかれましてはソッコーで仮想環境を作ることをオススメいたします。仮想環境作らずにゴニョゴニョやるのは時間的に6時間位無駄です。

Djangoproject　とでも名付けてフォルダを作っておきます。ここにザックリと環境を構築していきます。

```
$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper
```

Djangoprojectディレクトリへ移動して構築していきましょう。

```
$ cd Djangoproject
$ virtualenv --python="`which python3.5`" virtualenv
```

仮想環境を有効化します。

```
$ source virtualenv/bin/activate
```

(virtualenv)~ から始まっていれば成功。

#Djangoをインストールして初期設定をする

Djangoprojectディレクトリで仮想環境を有効にしたまま、Djangoをインストールします。

```
$ sudo pip install django
```

ちゃんと入ったかどうかは pip freeze で確認してください。
多分Django1.10〜が入っているはず。

プロジェクトを作成します。

```
$ django-admin startproject mysite
```

旧Djangoは　django-admin.py うんたらだったのでコマンドが変更になってますね。

mysite/
　　manage.py
　　mysite/
　　　__init__.py
　　　settings.py
　　　urls.py
　　　wsgi.py

上記のようになっていれば成功です。次にアプリケーションを作成しましょう。


```
$ cd mysite
$ python manage.py startapp myapp
```

myapp/
　　__init__.py
　　admin.py
　　apps.py
　　migrations/
　　　　　__init__.py
　　models.py
　　tests.py
　　views.py


上記構成になっていればOKです。

後はチュートリアルどおりに設定していきます。

```myapp/views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world.")

```

注意するのはここ。myapp/ に urls.py を作成します。

```myapp/urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]
```


```mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^myapp/', include('myapp.urls')),
    url(r'^admin/', admin.site.urls),
]
```


```mysite/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp', #　この文言を追加
]
```

ここまで出来れば初期設定は完了です。mysite ディレクトリへ戻り

```
$ python manage.py runserver
```

http://localhost:8000/myapp/

で確認できるはずです。


ここまで出来たら次はDjangoでテンプレートを表示させてみましょう。
http://qiita.com/Gen6/items/a5562c36fc5c67c89916



ざっくりとですが本にまとめました。
https://www.amazon.co.jp/dp/B071S25M33
raspberry pi 1 model bに、FTPサーバー入れてみた。

#概要
raspberry pi 1 model bに、vsftpd入れてみた。
#開発環境
raspberry pi 1 model b
raspbian 2016_09_23 jessie lite
#インストール
sudo aptitude install vsftpd
#設定
/etc/vsftpd.conf
```
write_enable=YES 
```
#写真
![ras4.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/d6f3da3b-3b82-b68a-056f-dcd4fbb1e17b.jpeg)
AngularJSのselectが使いづらいのでちょっとだけ改良したやつ

# AngularJSのselect(ngOptions)が使いづらいの図
https://docs.angularjs.org/api/ng/directive/ngOptions



# 単純なlabelとvalueのセレクトボックスを作るのに

```html
<select ng-model="model" ng-options="option.value as option.label for option in options">
```
いちいちこんなの書くのもなぁ・・・

しかも`options`の構造が複雑すぎりゅ〜

# improved-selectディレクティブ

```html:index.html
<div ng-controller="testCtrl as ctrl">

  <div>model: {{ctrl.model}}</div>

  <div>
    <button type="button" ng-click="ctrl.change(null)">nullにする</button>
    <button type="button" ng-click="ctrl.change(true)">trueにする</button>
    <button type="button" ng-click="ctrl.change(false)">falseにする</button>
    <button type="button" ng-click="ctrl.change('hoge')">hogeにする</button>
  </div>

  <improved-select options="ctrl.options" model="ctrl.model"></improved-select>

</div>
```

```html:template.html
<select ng-model="innerModel" ng-options="o.value as o.label for o in innerOptions" ng-change="onChange()"></select>
```

```js:js
app.controller('testCtrl', function() {
  var ctrl = this;

  // セレクトボックスのoptionsを(label: value)で作る
  ctrl.options = {
    '選択してください': null,
    'tるえ': true,
    'ふぁlせ': false,
    'ほげ': 'hoge'
  };

  // セレクトボックスの初期値
  ctrl.model = null;

  // 親スコープ側からmodel値を変更するスイッチ
  ctrl.change = function(value) {
    ctrl.model = value;
  };
});

app.directive('improvedSelect', function() {
  return {
    restrict: 'E',
    scope: {
      options: '<',
      model: '='
    },
    templateUrl: 'template.html',
    replace: true,
    controller: 'improvedSelectCtrl'
  };
});

app.controller('improvedSelectCtrl', function($scope) {
  $scope.innerOptions = [];

  Object.keys($scope.options).forEach(function(label) {
    $scope.innerOptions.push({value: $scope.options[label], label: label});
  });

  // セレクトボックスで変更されたとき
  $scope.onChange = function() {
    $scope.model = $scope.innerModel;
  };

  // 親スコープ側からの変更監視
  $scope.$watch(function() { return $scope.model; }, function(model) {
    if (angular.isUndefined(model) || $scope.innerModel === model) return;

    $scope.innerModel = $scope.innerOptions.find(function(option) {
      return option.value == model;
    }).value;
  });
});
```

# こんな感じ
<img width="315" alt="スクリーンショット 2016-10-21 13.19.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/84796/0e85c205-7c24-49f8-5653-a771c5ee0f7f.png">

`improved-select`タグにclassとか指定すればそのままselectタグにも反映されますお
raspberry piに、テキストベースのWEBブラウザ、入れてみた。

#概要
raspberry pi 1 model bに、lynx入れてみた。
#開発環境
raspberry pi 1 model b
raspbian 2016_09_23 jessie lite
#インストール
sudo aptitude install lynx
#写真
![ras2.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/4bc21d68-0592-913f-c4e0-0d0b74500186.jpeg)
raspberry pi 1 model bに、webサーバー入れてみた。

#概要
raspberry pi 1 model bを、webサーバーにしてみた。
#開発環境
raspberry pi 1 model b
raspbian 2016_09_23 jessie lite
#インストール
sudo aptitude install apache2 php5
#写真
![ras0.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/59696f52-5eba-46c4-9ce4-1ba955555baa.jpeg)


#写真
![ras1.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/0bf7bede-0e54-1167-b429-52b7a36f8943.jpeg)
30行の単一ファイルでUIPageView

[【決定版】UIPageViewControllerの使い方（Swift） \- Qiita](http://qiita.com/Takeshi_Akutsu/items/dbf54df8e8a50e8ed5be)

で勉強して、作ってみました。

![Main_storyboard.png](https://qiita-image-store.s3.amazonaws.com/0/12939/9e577a81-580d-a5e1-7097-e8def174ba58.png)

**PageViewController.swift**を作って、

![PageViewController_swift.png](https://qiita-image-store.s3.amazonaws.com/0/12939/c5615459-6174-063b-28c5-1008fe696b44.png)

UIPageViewControllerのカスタムビューにセット。

![Main_storyboard3.png](https://qiita-image-store.s3.amazonaws.com/0/12939/6886cb18-5250-2084-8cfe-3eab01d5779b.png)

そのまま2カ所編集します。

![cc37c4c2-626f-0693-c34b-397066a836ed.png](https://qiita-image-store.s3.amazonaws.com/0/12939/78a5feb8-c470-7b98-e2a0-f9fac52b34aa.png)

次の「Use Storyboad ID」を忘れずに。「second」「third」も同様。

![Main_storyboard2.png](https://qiita-image-store.s3.amazonaws.com/0/12939/00facea8-340e-a017-09a5-5e2176543c2b.png)

```swift:PageViewController.swift
import UIKit

class PageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
    
    let pageList = ["first", "second", "third"]

    override func viewDidLoad() {
        super.viewDidLoad()
        dataSource = self  // 忘れがち
        setViewControllers([storyboardId("first") as! UIViewController], direction: .Forward, animated: true, completion: nil)
    }
    
    // 便利
    func storyboardId(strID: String) -> AnyObject! {
        return (storyboard?.instantiateViewControllerWithIdentifier(strID))
    }

    // 1ページ進む
    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
        let index = pageList.indexOf(viewController.restorationIdentifier!)
        if index < (pageList.count - 1) {
            return (storyboardId(pageList[index! + 1]) as! UIViewController)
        } else {
            return nil
        }
    }
    
    // 1ページ戻る
    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
        let index = pageList.indexOf(viewController.restorationIdentifier!)
        if 0 < index {
            return (storyboardId(pageList[index! - 1]) as! UIViewController)
        } else {
            return nil
        }
    }

    // Page Controlを表示する（以下のコードを書いただけで自動で表示されます）
    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
        return pageList.count
    }    
    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
        return 0
    }
}
```

しばしば文句を言いたくなるXcodeですが、いいところもありますね😅

追記：[【Swift】UIPageViewControllerの使い方。PageControlの色を変更する。 \| はじはじアプリ体験記](http://hajihaji-lemon.com/smartphone/swift/uipageviewcontroller/)を見たら良いコードだったので真似させていただきました。
Spinnerでの選択肢の表示をコードからdismissできるようにする


Spinnerでは、spinnerModeの設定によってdialogとdropdownで選択肢を表示できます。それらをコードからdismissしたい場合のメモです。

デフォルトではSpinnerにはdialog、dropdownをdismissするメソッドが用意されていません。そのため`onDetachedFromWindow`が呼ばれるとdialog、dropdownがdismissされることを利用してコードからdismissできるようにします。

具体的には、`Spinner`もしくは`AppCompatSpinner`を継承して以下のようなカスタムViewを作成します。

```java
public class MySpinner extends AppCompatSpinner {

    public MySpinner(Context context) {
        super(context);
    }

    public MySpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MySpinner(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

   public void dimissSpinnerOptions() {
        onDetachedFromWindow();
    }
}
```

使い方は、まずxmlに定義します。

```xml
<MySpinner
    android:id="@+id/my_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:spinnerMode="dropdown" />
```

そして、以下のようにコードから`dimissSpinnerOptions`を実行します。これでコードからdismissできるようになります。

```java
MySpinner mySpinner = (MySpinner) findViewById(R.id.my_spinner);
mySpinner.dimissSpinnerOptions();
```
Pythonでリスト内要素を要素、重複数として重複数でソートして出力

Pythonを使ってリスト内の文字列要素の重複を調べ、その結果を重複数の降順で要素、重複数として出力するためのスクリプトです。
内包表記で表現しています。

```python:
data = ['a', 'b', 'c', 'd', 'b', 'c', 'd', 'b', 'c', 'b']
result = sorted({i: data.count(i) for i in set(data)}.items(), key=lambda x: x[1], reverse=True)
print(result)

>>> [('b', 4), ('c', 3), ('d', 2), ('a', 1)]
```
[node-psvr]psvrの加速度をsocket.ioでhtmlに表示してみた #PSVR

# How to use node-psvr?  
まずはこちらのチュートリアルでPSVRの加速度情報を取得しましょう。
[[node-psvr]Node.jsでPSVRの加速度をとってみた #psvr](http://qiita.com/cdra0624/items/ef3f96be49f996a9db26)

<img width="158" alt="Screen Shot 2016-10-21 at 11.48.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/145134/4f82da5a-826f-94bd-10a4-c8213da81f6a.png">

こんな感じで加速度取れましたか？
次はこの加速度で色々と遊ぶために、socket.ioを使ってブラウザ上に加速度を表示させてみたいと思います。

# Demo  
<blockquote class="twitter-video" data-lang="en"><p lang="nl" dir="ltr">Get psvr acceleration using Node.js!<a href="https://t.co/oOyaL4RCBZ">https://t.co/oOyaL4RCBZ</a><a href="https://twitter.com/hashtag/PSVR?src=hash">#PSVR</a> <a href="https://t.co/lDj0zGcnC8">pic.twitter.com/lDj0zGcnC8</a></p>&mdash; webpsvr (@webpsvr) <a href="https://twitter.com/webpsvr/status/789306095697170432">October 21, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[Youtube link is here](https://www.youtube.com/watch?v=TmsmyO7nm3A)

# Code
```
$ npm install express --save
$ npm install socket.io --save
$ mkdir client
```

```javascript:index.js
"use strict";

//http server
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const server = require("./server");
app.use(express.static(__dirname + '/client'));

server.start(app, http);

var acc = {
  yaw : null, 
  pitch : null
};

//Connect to PSVR
var PSVR = require("psvr");
var device = new PSVR();

io.sockets.on('connection', function(socket) {
  console.log("hello socket");
	device.on("data", function(data) {
	   console.log(data);
	   acc.yaw = data.yaw;
	   acc.pitch = data.pitch;
	   socket.emit('myFitstRecieving', acc);
	});
});
```

```javascript:server.js
var PORT = 7788;

function start(app, http) {

	http.listen(PORT, function(){
	  console.log('Listen on ',PORT);
	});
}

exports.start = start;
```

```html:client/01.debugger/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>psvrDebugger</title>
	<meta name="format-detection" content="telephone=no">
	<script src="/socket.io/socket.io.js"></script>
	<script type="text/javascript" src="receiveAcc.js"></script>
</head>
<body>
<h1>psvr debugger</h1>
 <div id="receive-acc"></div>

</body>
</html>
```
```javascript:receiveAcc.js
var socket = io.connect('localhost:7788');
var yaw = null;
var acc = {
	yaw : null,
	pit : null
};

socket.on('myFitstRecieving', function (data) {
	//console.log(data);
	acc.yaw = data.yaw;
	acc.pit = data.pitch;
	document.getElementById("receive-acc").innerHTML = "yaw : " + acc.yaw + ", pitch : " + acc.pit;
	//console.log(acc.yaw);
});
```
###[GitHub is here](https://github.com/cdra0624/psvr-tutorial)

# Next Step
using three.js and show simple cube sample
あなたのお家をスマートハウスにしてみませんか？　ダウンライト編

今回で2回目となりましたが、皆さんはどうお過ごしでしょうか？
暑い夏も過ぎ、いよいよ読書の秋が近づいてきました。
ところで、皆さんは埋め込み式照明というのはご存知でしょうか？
今回ご紹介するのはTOSHIBA製のダウンライト｢LDF8L-H-GX53/3｣です！
ダウンライトというのは天井に穴を開けて取り付けることで天井と一体したライトのことです。
通常のライトと違い、工事が必要ですが取り付けると天井をフラットにすることができるので、誰でもご自宅をオシャレ空間にデザインすることが出来ます！

#1.ダウンライトを取り付ける際の注意点
前述したとおりダウンライトは埋め込み式なので、ご自宅の天井に穴を開ける工事をしなければならないので工事の際は専門の工務店などにお問い合わせください。
![LDF8LHGX533.jpg](https://qiita-image-store.s3.amazonaws.com/0/130490/760230a0-8d08-725a-4093-fff279128d14.jpeg)
(図1-1)ダウンライトのイメージ図

#2ネットワークとの接続
今回は１回目の空気洗浄機の時と違い、無線LANとの接続はせずにLANケーブルとの接続になります。
下記の図にあるようにユニット本体にLANケーブルを接続すれば、簡単に遠隔操作が可能となります。
![RIMG0018.JPG](https://qiita-image-store.s3.amazonaws.com/0/130490/c7308e34-43e3-2826-2efa-a7a32c2339ba.jpeg)
(図2-1)ユニット部分と無線LANの接続



#3.ダウンライトの設置方法
まずダウンライトは電源ユニットとご家庭の電源ケーブルを接続しなければなりません。
図2-1に示したように電源ケーブルはダウンライトの上に来るように設置し器具には接触しないように注意してください。
次は電源ユニットとケーブルの接続です。
基本的にケーブルは電気を運ぶ電源線とショートを起こさないためのアース線があります。
接続する際に電源線の被覆をはがしてください。すると、2本の細い線が出てくると思います。
その2本を電源線接続穴に接続すれば電源ユニットとケーブルの接続は完了です。
![無題03.png](https://qiita-image-store.s3.amazonaws.com/0/130490/e6cf1090-b047-4df3-fbec-b87bec4a7161.png)
(図3-1)電源ケーブの配置
![無題02.png](https://qiita-image-store.s3.amazonaws.com/0/130490/8a167484-3b73-3ff9-bd24-0b00e9a7d756.png)
(図3-2)電源ユニットとケーブルの接続


次にダウンライトの設置と取り外しですが、設置方法については下記の図に記載しているように取り付けを行ってください。
取り外しの際は反時計にまわすと取り外しできます。
取り付けのコツとしては電源ユニットを先に挿入した後に時計回りにまわすと簡単に取り付けできます。
![RIMG0010.JPG](https://qiita-image-store.s3.amazonaws.com/0/130490/f1d65f86-d7e2-a2f5-7391-5ac1d148575b.jpeg)
(図3-3)ダウンライトの設置方法
![RIMG0021.JPG](https://qiita-image-store.s3.amazonaws.com/0/130490/1206bb50-39be-314c-75ab-cb2be61e1f29.jpeg)
(図3-4)ダウンライト取り付け前
![RIMG0007.JPG](https://qiita-image-store.s3.amazonaws.com/0/130490/f0c03428-edda-d24c-533e-984ae6d16d38.jpeg)
(図3-5)遠隔操作での点灯時

#4.SSNGを用いての遠隔操作
SSNGのダウンロードに関しては下記のページをご覧ください:laughing:
http://qiita.com/sugi05/items/500aa560d3202ebf4530

手順1　図4-1にある赤い資四角に囲まれた部分で操作したい家電のIPアドレスを選択する。
手順2　黄色の枠に囲まれている部分から操作したい家電の種類を選択する。
手順3　緑色の枠に囲まれた部分にコードを入力する。
![無題10.png](https://qiita-image-store.s3.amazonaws.com/0/130490/e3f4b000-8dcc-ef3b-f2e7-0145ee2e9bfc.png)
(図4-1)操作時のSSNG画面
c > link > Damerau–Levenshtein distance > 4つの操作にcostの緩急をつける (sWap, Substitution, insertion, Deletion)

関連 http://qiita.com/mpyw/items/a4495d476ea9ffe54e16
関連 http://qiita.com/7of9/items/ca66015e2933202decc9

CでのDamerau–Levenshtein distanceの実装。

sWap, Substitution, insertion, Deletionの4種類の操作に対してcostの緩急をつける実装例を見つけた。

https://github.com/git/git/blob/master/levenshtein.c

ただし、特定の文字('c'だけとか'r'だけとか)にコストの緩急を付ける実装ではない。

上記のコードをベースとして特定文字へ緩急をつける実装に変えるのが近道だろうか。

しかしながら、よく見ると、`#include "cache.h"`など使っていて、単体で実行するのは面倒そうだ。
MacでFinderとターミナルをいい感じに行ったり来たりする

基本的にはターミナルでファイル操作するけど、GUIアプリやWebアプリにファイルをドラッグアンドドロップしたいからFinderも必要、みたいなことってあると思います。

そんな時はターミナルで

```
$ open .
```

ってすれば現在のディレクトリでFinderが開きます。

でも`open .`って毎回打つのは面倒臭いので、

```bash:.bash_profile
alias lll='open .'
```

って書いておけば、Finder開きたくなったら `lll` ってタイプするだけで開けるようになります。（ちなみに `ll` は `ls -l`で予約済み）

逆に、Finderからターミナルは、ターミナルを立ち上げて `cd ` ってタイプしてファイルをターミナルにドラッグ＆ドロップすればファイルのフルパスが入力されますので、ファイル名の部分だけ消してEnterですかね。ディレクトリをドラッグ＆ドロップならファイル名を消す操作は不要です。

超小ネタですが、よくやる作業なので、チリも積もればなんとやら、ということで。
raspberry pi 1 model bを親機にしてみた。

#概要
raspberry pi 1 model bを、wifi親機にしてみた。
#開発環境
raspberry pi 1 model b
raspbian 2016_09_23 jessie lite
usbトングル buffalo WLI-UC-GNM
#インストール
sudo aptitude install hostapd dnsmasq
#設定１
/etc/network/interfaces
```
iface wlan0 inet manual
\#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
```
#設定２
/etc/dhcpcd.conf
```
interface wlan0
static ip_address=10.0.0.1/24
```
#設定３
/etc/hostapd/hostapd.conf
```
interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=<opi>
country_code=JP
hw_mode=g
channel=2
beacon_int=100
max_num_sta=5
macaddr_acl=0
auth_algs=1
wpa=1
wpa_passphrase=<momimomi>
wpa_key_mgmt=WPA-PSK
```
#設定４
/etc/dnsmasq.conf
```
no-dhcp-interface=eth0
interface=wlan0
dhcp-range=10.0.0.2,10.0.0.125,255.255.255.0,12h
```
Google Clould Platform | bq コマンドでのジョブ履歴から詳細を確認する

# 1.任意のプロジェクトに切り替える。

```bash
gcloud config set project [your_project_id]
```

# 2. 全ジョブの履歴を見る

`-j` を付けるとジョブ履歴閲覧モードになる。
`-a` を付けると自分以外のユーザーのジョブ履歴も見られる。

```bash
bq bq ls -j -a
```

表示行数が足りない場合は `-n [行数]` で大きい数字を指定する。

```bash
bq ls -j -a -n 1000
```

特定のジョブを見つけたい場合は、grep で頑張る。

```bash
bq ls -j -a -n 1000 | grep load | grep FAILURE | grep '18 Oct'
```

ここで調べたい job_id を絞り込む。

# 3. ジョブの詳細情報を見る

```bash
bq show --format=prettyjson -j [job_id]
```


`--format=prettyjson` か `--format=json` オプションを指定しないと、簡単な情報しか表示されないので注意。








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Ruby からの Watson Natural Language Classifier 利用例

Ruby からの Watson Natural Language Classifier 利用例
=====================================================

Ruby用の gem [watson-api-client](https://rubygems.org/gems/watson-api-client)を使って、Watson の[Natural Language Classifier](http://www.ibm.com/watson/developercloud/doc/nl-classifier/index.shtml)の動作を確認してみました。

以下の記述はブログ記事「[2016/09/15 Natural Language Classifier](http://suchowan.at.webry.info/201609/article_15.html)」の転載で、[watson-api-client/examples/NaturalLanguageClassifier/README.md](https://github.com/suchowan/watson-api-client/blob/master/examples/NaturalLanguageClassifier/README.md)の翻訳です。Watson Natural Language Classifier 側の変更により現時点では情報が古くなっている可能性がありますのでご留意ください。

watson-api-client はボランティアで公開していて動作確認での課金発生は最小限にしています。このためテストはなかなか行き届きません。Watson 側の動作の変化などお気づきになられましたら、ご連絡いただけるとありがたいです。

watson-api-client のインストール方法などは https://github.com/suchowan/watson-api-client をご覧ください。watson-api-client の背景については[別記事](http://qiita.com/suchowan/items/61df862f53ff1db7ad55)をおこしました。


1.事前準備
----------

###- VCAP_SERVICES

[VCAP_SERVICES](http://www.ibm.com/watson/developercloud/doc/getting_started/gs-variables.shtml#vcapServices) を設定して username, password が取得できるようにしておきます。

(あるいは examples/NaturalLanguageClassifier 配下のスクリプトの service 生成の際、new メソッドに user と password を指定する引数を加えます)

###- ブログ記事のアーカイブ

ブログ記事のアーカイブ(サンプル)を[こちら](https://www.dropbox.com/sh/h2u6irutgbgvm9r/AAA9GsagC2vYlWPgOIEj-kHZa?dl=0)からダウンロードして、examples/NaturalLanguageClassifier/blog_text 以下に解凍します。


2.トレーニング
--------------

###- classifier オブジェクトの生成

```
(例) $ ruby train.rb 2014 2015
```

この例では blog_text 以下のブログ記事から 2014年と2015年の記事を抽出し、train.csv に書き出します。次に NaturalLanguageClassifier のオブジェクトを生成して、この train.csv で トレーニングします。 2014 や 2015 などの引数がすべて省かれた場合は、すでに存在する train.csv をそのまま用います。(train.csv の生成処理はエレガントでないですが、まあサンプルですからご容赦ください。)

###- classifier オブジェクトの状態確認

```
$ ruby classify.rb
```

classify.rb を引数なしで呼ぶと生成した classifier オブジェクトの状態を読み出します。Status が 'Available' になるまでお待ちください。


3.分類の実行
------------

```
(例) $ ruby classify.rb '2016/08/*'
```

この例では blog_text 以下のブログ記事から 2016年8月の記事を抽出し、その「テーマ」を問い合わせます。例えば[8月11日の「山の日」](http://suchowan.at.webry.info/201608/article_11.html)の記事なら、

```
"top_class"=>"こよみ",
"classes"=>
 [{"class_name"=>"こよみ", "confidence"=>0.4464514057553849},
  {"class_name"=>"雑記", "confidence"=>0.31750749975306036},
  ...
```

というように、一番可能性の高い「テーマ」を top_class で示して、それに続けて、各テーマの一致度を返してくれます。


4.classifier オブジェクトの削除
-------------------------------

```
$ ruby delete.rb
```

名前が“Blog thema”であるオブジェクトをすべて削除します。

引数として classifier_id が指定されていれば、その classifier_id のオブジェクトのみ削除します。


5.問題点
--------

'[Using your own data to train the Natural Language Classifier](http://www.ibm.com/watson/developercloud/doc/nl-classifier/data_format.shtml)'によれば、１データは 1024 文字以内に制限されるとありますが、これは文字数ではなく(若干マージンを見越した)バイト数のようです。バイト数が1200～1300を超えると文字数制限内でも分類の実行時に 'Bad Request' が起こることがありました。
herokuにlaravelとMysqlの環境を構築する

#herokuにデプロイする
herokuアプリを作成

```bash
heroku create [アプリ名] --buildpack https://github.com/heroku/heroku-buildpack-php
git add .
git commit -m ''
git push heroku master
heroku config:set APP_KEY=$(php artisan key:generate --show)
```

確認

```bash
heroku open
```

#Mysql
クレジットカードを登録(vプリカでも可)

```bash
heroku addons:add cleardb
```

```bash
heroku config
```
でCLEARDB_DATABASE_URLを確認

```
CLEARDB_DATABASE_URL: mysql://[DB_USERNAME]:[DB_PASSWORD]@[DB_HOST]/[DB_DATABASE]?reconnect=true
```

から

```bash
heroku config:set DB_USERNAME=[DB_USERNAME]
```
の様に設定していく

```bash
APP_ENV = heroku
LANG = ja_JP.UTF-8
TZ = Asia/Tokyo
```

これで完成
ポートが開いているか確認するのに手グセで nc -vz してたら invalid option って怒られたのでいいかげん少し調べた話

# nc でやる

telnet とか curl でもいいんだけど nc が好き。

# nc -vz hostname port

手グセで nc -vz というオプション付きでやってたけど invalid option って怒られるようになった。

```
 ❯ uname -sr; nc --version
Linux 3.10.0-123.13.2.el7.x86_64
Ncat: Version 6.40 ( http://nmap.org/ncat )

 ❯ nc -vz example.com 80
nc: invalid option -- 'z'
Ncat: Try `--help' or man(1) ncat for more information, usage options and help. QUITTING.
```

どうやら nmap 付属の ncat(nc) に置き換わったので、`-z` オプションがないようです。

ncatの派生版に関しては、こちらのサイトに詳しい。
http://www.intellilink.co.jp/article/column/security-net01.html

# 回避策

man をみたけど、それっぽいオプションがないのでこうする。正解がわからない。
-w でタイムアウトも指定しておく。

```
nc -w 1 -v hostname port < /dev/null
```

成功

```
❯ nc -w 1 -v example.com 80 < /dev/null
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 93.184.216.34:80.
Ncat: 0 bytes sent, 0 bytes received in 0.35 seconds.
```

成功

```
❯ nc -w 1 -v example.com 443 < /dev/null
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 93.184.216.34:443.
Ncat: 0 bytes sent, 0 bytes received in 0.23 seconds.
```

失敗

```
❯ nc -w 1 -v example.com 25 < /dev/null
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connection timed out.
```

# もう１つの方法


ググったらデバイスファイル `/dev/tcp/hostname/port` をつかう方法があったけど bash でしか使えないような。普段は zsh なのでドヤりたい時のために心の片隅に。

```
echo -n > /dev/tcp/hostname/port
```



# 参考サイト

http://www.intellilink.co.jp/article/column/security-net01.html
http://serverfault.com/questions/788934/check-if-remote-host-port-is-open-cant-use-gnu-netcat-nor-nmap-rhel-7


捗れ〜。
ぬるっとページ内移動


デモ：http://codepen.io/mo4_9/pen/rrQbwg


```javascript
const TIME = 1000;
const BUFFER = 0;

$('a[href^="#"]').on('click', function(e) {

    const target = $(this.hash);
    if (!target.length) return ;

    const zm = parseInt( $('body').css('zoom') ) || 1; // zoom対策
    const targetY = $(target).offset().top - BUFFER;
    $('html,body').stop().animate({scrollTop: targetY * zm}, TIME, 'swing');

    // ハッシュ書き換え
    window.history.pushState(null, null, this.hash);

    // デフォルトの処理はキャンセル
    return false;
});
```


## エラー

### aタグ

`'a[href^=#]'`のエラーがでたので、#をダブルクォーテーションで囲う
[jQueryを使った自作スムーススクロールでエラーが出る場合の対処法](http://xov.jp/e/796/)


### css zoom

cssのzoomを使っていると正しいoffsetがとれないことがある
`$(target).offset().top`をnativeのjsで`$(target).get(0).offsetTop`と書いてみたもうまくいかず。。

zoomの倍率だけ微調整してみたもののこれも若干ずれるときがある。
http://gamemaster.jp/archives/785

bodyにzoomはかけないほうがよさげ




> 参考
[jQuery でページ内リンクを全てスムーズスクロールにしよう](http://phiary.me/jquery-page-link-smooth-scroll/)
[イラレ]素人が使うイラストレーターの備忘録[CS2.0]

##### 時々？、イラストレーター（CS2.0）を使うことがあります。
##### 忘れるといけないので、使い方を書き留めておこうと思います。
## 設定
[編集]→[環境設定]→[一般]
　・「日本式トンボを使用」にチェック
[編集]→[環境設定]→[一般]
　・「キー入力」を「0.5」「0.1」等状況において調整（0.1が好み）
## トリムマークレイヤーとガイド枠の作成
①[ファイル]→[新規]
　名前：適当に「幅x高さ」とか
　単位：ピクセルで、幅と高さを指定
　カラーモードはRGB
②長方形ツールを選択し、塗りと線を無しにして、アートボードをクリック。
　長方形のオプションの幅と高さを作成したファイルサイズと同じにして作成。
・移動してファイルに合わせる。
③[フィルタ]→[クリエイト]→[トリムマーク]
・ダイレクト選択ツールで長方形を選択し直す。
④[オブジェクト]→[パス]→[パスのオフセット]
　オフセット：10px
　角の形状：マイター
　角の比率：4
・ダイレクト選択ツールで最初の長方形を選択し直す。
⑤[オブジェクト]→[パス]→[パスのオフセット]
　オフセット：-10px
　角の形状：マイター
　角の比率：4
・ダイレクト選択ツールで３個の長方形をシフトを押しながら選択する。
⑥[表示]→[ガイド]→[ガイドを作成]
・レイヤーをロックし、名前を「トリムマーク」としておく。
## 画像配置
[ファイル]→[配置]
[埋め込み]
## WEB用に保存
[ファイル]→[Web用に保存]
・枠なしはGIF形式で、下記を実行。
　・右下の画像サイズTABを選び、「アートボードサイズでクリップ」にチェックを入れ、「適用」させる。
## アウトライン作成
・すべてのレイヤのロックを解除する。
[選択]→[すべてを選択]
[書式]→[アウトラインを作成]
・別名で保存しておく。
## 四角の一辺を削除
・ダイレクトツールでその辺を囲うと辺だけ選択でき、delキーで削除できる。
## オブジェクトの切り抜き
・型抜き用のオブジェクトを全面に置き、グループ化。
[効果]→[パスファインダー]→[全面のオブジェクトで型抜]
→逆はグループ化せず、[グリッピングマスク]で対応
PhalconのRoutingをymlで管理したい！

# PhalconのRoutingをymlで管理したい！


[Phalconのconfigをymlで管理したい！環境[ENVIRONMENT]も切り分けたい！](http://qiita.com/ienaga/items/87fe509ea365966d6b7b)に引き続き、Routingも配列じゃなくymlで運用したい。

なので、作ってみました。

こちらも、php7+Phalcon3.0.xでしかテストしてませんが
基本、全てのバージョンで動くはず！

# github

[PhalconConfig](https://github.com/ienaga/PhalconConfig)


# routing.yml sample

## min

```yaml
mypage_index: # /mypage/index
```

## max

```yaml
mypage_index:
  module:     frontend # Default null
  method:     [ GET, POST ] # Default GET
  url:        /mypage/{user_id}
  controller: mypage
  action:     index
  namespace:  \ProjectName\Module
```

# app/config/services.php

```php:app/config/services.php
$di->set('router', function () {
    return \PhalconRouter\Yaml::load(
        new \Phalcon\Config\Adapter\Yaml(APP_PATH ."/directory/routing.yml")
    );
}, true);
```
iOS DeployGateコマンドラインで ARCHIVE FAILED Exit status: 65 というエラーが出たら確認すること

Exit status: 65 はとても一般的なエラーなので、これだけで原因が確定できるわけではないが、確認しておいたほうがいいポイントがいくつかある。

## 不要な証明書がキーチェーンの中にないか

keychain accessで、expired/revoked certificatesがあれば削除しておこう。

## Automatic Signing まわりの設定

キーチェーンを削除した後、.xcodeprojの Automatic Signingを一度オフにして、そのあとオンにしよう。
git-svn で特定のリビジョンのみをcloneする方法（shallow)

# git clone の shallow を git-svn　で実現する方法

## -r オプションを使用する

[Git \- git\-svn Documentation](https://git-scm.com/docs/git-svn)

```
-r <n>[:<n>]
--revision=<n>[:<n>]
is supported, non-numeric args are not: HEAD, NEXT, BASE, PREV, etc …​
```

`-r a:b` でa~bのリビジョンをクローンできます。

```
 -r / --revision は数値は対応していますが、[HEAD/NEXT/BASE/PREV等]の数値以外は対応していません。^~も対応していないようです。
```

# 数値しか対応していないと言いながらも

cloneしたいバージョン（リビジョン）を押さえておいた上で、そこからHEADまでをcloneする方法。

```bash
git svn clone -r[リビジョン番号]:HEAD [SVNパス] .
```

HEADが使えるよね…？
Postgressにおけるデフォルト値と環境変数の使用

#1. 接続パラメータ
表1に示す環境変数を用いて、呼出し元で値を設定しない場合に用いられるデフォルト値を接続パラメータに設定可能。

|項目| 概要 |備考|
|:-:|:-:|:-:|
|PGHOST|データベースサーバ名を指定する|デフォルトはTCP/IP。/開始時はUnix Domain Socket
|PGHOSTADDR |IPアドレスを指定する | |
|PGPORT|サーバ通信用のデフォルトのTCPポート番号を指定する|Unix domai socketの場合はファイル拡張子を設定する
|PGDATABASE|データベース名を設定する||
|PGUSER|データベース接続ユーザ名を設定する||
|PGPASSWORD|認証用パスワードを設定する|セキュリティ上から~/.pgpassの使用が推奨|
|PGPASSFILE|パスワードファイルの名前を指定する|デフォルトは ~/.pgpass|
|PGSERVICE|pg_service.conf内で検索されるサービス名を設定する||
|PGREALM|Kerberosのレルムがローカルと異なる際に使用するレルムを設定する|Kerberosの認証が使用されている場合のみ有効|
|PGOPTIONS|サーバ用の付加的な実行時オプションを設定する||
|PGSSLMODE|サーバとのSSL接続用の調整の有無及び重要度を設定する|disable：非SSL / allow：非SSL→失敗時SSL / prefer：SSL→失敗時非SSL / require：SSL
|PGREQUIRESSL|SSL接続が必須か否かを設定する||
|PGKRBSRVNAME|認証にKerberos5使用時、Kerberosのサービス名を指定する||
|PGCONNECT_TIMEOUT|libpqがサーバへの接続確立を待つ時間を指定する(単位：秒)|未設定 or 0を指定時、libpqは永久に待機する|
表1:接続パラメータの指定に使用できる環境変数一覧

対象となるのは下記の3つ。
・PQconnectdb
・PQsetdbLogin
・PQsetdb

#2. セッション毎デフォルト動作

表1に示す環境変数を用いて、PostgreSQLセッション毎のデフォルト動作を指定することが可能。

|項目| 概要 |備考|
|:-:|:-:|:-:|
|PGDATESTYLE|デフォルトの日付/時刻表現形式を設定する|SET datestyle TO ...と等価|
|PGTZ|デフォルトの時間帯を設定する|SET client_encoding TO ...と等価|
|PGCLIENTENCODING|デフォルトのクライアントの文字セット符号化方式を指定する|SET client_encoding TO ...と等価|
|PGGEQO|遺伝的問い合わせオブティマイザのデフォルトのモードを設定する|SET geqo TO ...と等価|
表2:セッション毎デフォルト動作の指定に使用できる環境変数一覧

#3. libpqの内部動作

表3に示す環境変数を用いて、libpqの内部動作を指定可能。

|項目| 概要 |備考|
|:-:|:-:|:-:|
|PGSYSCONFDIR|pg_service.confファイルがあるディレクトリを設定する||
|PGLOCALEDIR|国際化メッセージ用のlocaleファイルがあるディレクトリを設定する||
表３:libpqの内部動作の指定に使用できる環境変数一覧
typescriptから自作のJSコードをimportしたい(PEG.jsで作ったParserとか)

Pegjsの生成コードに合わせて作成します

# tldr

結論としてparser.d.tsを作ります。(parser.jsをpegjsによって生成しimportしたい場合)

# 対応
peg.jsが出力したParserのコードはexport周辺を見てみると

```parser.js
module.exports = /*
 * Generated by PEG.js 0.10.0.
 *
 * http://pegjs.org/
 */
(function() {
  "use strict";
  
  function peg$subclass(child, parent) {
  function ctor() { this.constructor = child; }
    ctor.prototype = parent.prototype;
    child.prototype = new ctor();
  }


  function peg$SyntaxError(message, expected, found, location) {
    this.message  = message;
    this.expected = expected;
    this.found    = found;
    this.location = location;
    this.name     = "SyntaxError";

    if (typeof Error.captureStackTrace === "function") {
      Error.captureStackTrace(this, peg$SyntaxError);
   }
  }

  peg$subclass(peg$SyntaxError, Error);

/*......*/

  return {
    SyntaxError: peg$SyntaxError,
    parse:       peg$parse
  };
})();

```
となっているので``parser.d.ts``を以下のように作成しました


```parser.d.ts
interface ParserOptions {
    startRule?: string;
    tracer: any;
}

/*
      {
				"message":"expect </1> but </2>",
				"expected":null,
				"found":null,
				"location":{"start":{"offset":0,"line":1,"column":1},
				"end":{"offset":13,"line":1,"column":14}},
				"name":"SyntaxError"
			}
*/

export interface Location {
	start:{
		offset: number,
		line: number,
		column: number
	}
	end: {
		offset: number,
		line: number,
		column: number		
	}
}

export declare class SyntaxError extends Error {
  message: string;
  expected: string | null;
  found: string | null;
  location: Location;
  name : 'SyntaxError';
}

export declare function parse(input: string, options?:ParserOptions): 実装に合わせた型;


```
parser.jsのそばにparser.d.tsを置いておくとimportするときにd.tsの方を見てくれるみたいです。ちなみにトランスパイル出力先にもparser.jsを置いておかないとエラーとなります。
Laravel5.3のauthを簡単にカスタマイズしてみる


## usernameでログインしたい
~~vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.phpのemailを変更する~~

### 2016.11.13訂正
app/Http/Controllers/Auth/LoginController.phpに以下を記述。

```php
    public function username()
    {
        return 'username';
    }
```

formの変更も忘れずに・・・

## UserモデルじゃなくてAdminUserを使いたい

config/auth.phpを編集。

```php

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\AdminUser::class,
        ],

```
PHP7でモジュールを追加する


最初からモジュール入れてるのであまり追加することが無いのですが、出来てた方が良いと思ってやってみました
PHPはソースからじゃなくてパッケージでインストールします
今回はmcryptを追加する方法です


## PHP7インストール

以下の方法でPHPをインストールします

Dockerでやって使うイメージは`takashioshikawa/centos6base`です
自分用のCentOS6です


```
# PHPインストール
yum install -y epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

yum install -y --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-opcache php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug
```

バージョン確認

```
php -v

PHP 7.0.12 (cli) (built: Oct 13 2016 18:14:53) ( NTS )
```

モジュール確認

```
php -m | grep mcrypt
```

まだ何も出てきません

## mcryptモジュール追加

ここから使えるようにしていきます
といってもyumで一発なんですが…

```
yum install -y --enablerepo=remi,remi-php70 php70-php-mcrypt
```

モジュール確認

```
php -m | grep mcrypt

mcrypt
```

入ってます…
パッケージでやると簡単、ソースからインストールする方法はやってないので時間あったらやってみます

## 参考
[簡単！CentOS 7.1にPHP7.0をさくっとyum installする方法](http://dqn.sakusakutto.jp/2015/12/centos7_yum_install_php70.html "簡単！CentOS 7.1にPHP7.0をさくっとyum installする方法")