OmniAICreator/Qiita-1.07M huggingface dataset:
Postgresでパスワードを忘れた場合の対策

Postgresでパスワードを忘れました。
やばいやばいと思いつつ、アンインストールしなきゃかなぁ...ヽ(´Д｀ヽ)(/´Д｀)/ｲﾔｧ～
とか思っていたら、意外となんとかなりました。

環境は
- Vagrant 1.6.5
- Virtual Box 4.3.16 
- CentOS6.5
- Postgres: psql 8.4.20, server 9.3
です。


# アクセス権限の変更 & パスワードなしでのログインを可能に

## アクセス権限ファイルを修正

まずはpg_hba.confを探して編集します。

```rb:探す
$ sudo find / -name pg_hba.conf
 -> /var/lib/pgsql/9.3/data/pg_hba.conf
```

```rb:編集する
$ sudo vi /var/lib/pgsql/9.3/data/pg_hba.conf
---
host    all         all         127.0.0.1/32          md5
もしくは
host    all         all         127.0.0.1/32          password
こんな感じな行を下の様に
↓↓↓↓

host    all         all         127.0.0.1/32          trust
```

ローカルホスト(127.0.0.1/32)では、パスワード指定なくてもtrustするからログインできますよ。って感じです。

## Postgres を再読み込み

```rb
$ sudo /etc/rc.d/init.d/postgresql-9.3 reload
```

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

PgAdminなりpsqlなりで、postgresユーザーでログイン出来るようになってます。
そしたら、パスワードを変更しちゃえばいいです。

```rb
$ psql -U postgres

postgres=# \password
postgres=# alter role postgres with password 'パスワード文字列';
postgres=# \q
``` 


# パスワードなくてもいいよ設定をもどす

pg_hba.confファイルのtrustをpasswordなりmd5なりに戻して再読み込み。



# References

- http://note.chiebukuro.yahoo.co.jp/detail/n187241
- http://www.workabroad.jp/posts/1079
[AngularJS] ダミーのAPIサーバの用意に便利な ngMockE2E


シチュエーションとしては、APIサーバ側がまだ開発中でその代替を用意したい場合や、デモやモックを Amazon S3 や GitHub Pages 等に載せるために、静的リソースのみでアプリケーションを構成したい場合。

[ngMockE2E](https://docs.angularjs.org/api/ngMockE2E/service/$httpBackend) は本当は E2E テスト用のものっぽいですが、ダミーの API サーバとしても活用できます。

> 個人的には GitHub Pages にデモを載せることが多いので重宝。

※ 執筆時点の AngularJS のバージョンは `1.3.8` です。

## 導入方法

### ① Bower でインストール

```shell:
$ bower install angular-mocks --save
```

> `--save` オブションにより `bower.json` に追記されます。もしくは先に `bower.json` に追記してから `$ bower install` でもいいです。リリースビルドに含めるには `bower.json` 中の `devDependencies` エリアでなく `dependencies` エリアに追記しておく必要があります。

### ② ライブラリの読み込み

```html:index.html等
〜
<script src="../bower_components/angular-mocks/angular-mocks.js"></script>
〜
```

> パスはプロジェクトに合わせてください。Yeoman で作ったプロジェクだと、`$ grunt(or gulp) wiredep` とすると自動で追記されることが多いです。

### ③ AngularJSプロジェクトへの組み込み

`ngMockE2E` を追記します。

```javascript:
angular.module('hogeApp', ['ngTouch', 'ngSanitize', 'ui.router', 'ngMockE2E'])
  .config(function ($stateProvider, $urlRouterProvider) {
〜
```

## 使用例

余分なところも含めて載せちゃいますが、下記の `.run` 以降です。適用を回避したい HTTPリクエストは `.passThrough()` で回避させる必要があります。

HTTPプロトコルは `GET/POST/PUT/DELETE` など主要なものは対応されています。

下記サンプルの `.whenPOST` のところのように、POST メソッドの body も簡単に取得できます。

```javascript:使用例
'use strict';

angular.module('hogeApp', ['ngTouch', 'ngSanitize', 'ui.router', 'ngMockE2E'])
  .config(function ($stateProvider, $urlRouterProvider) {
    $stateProvider
      .state('item', {
        url: '/item',
        templateUrl: 'app/item/item.html',
        controller: 'ItemCtrl'
      });

    $urlRouterProvider.otherwise('/item');
  })
  .run(function ($httpBackend) {
    $httpBackend.whenGET(/^app\//).passThrough();
    $httpBackend.whenGET(/^assets\//).passThrough();
    $httpBackend.whenGET(/^components\//).passThrough();

    var dummy_items = [
      {
        "id": "1",
        "name": "石鹸",
        "price": 230,
        "memo": "石鹸のメモ"
      },
      {
        "id": "2",
        "name": "ボディソープ",
        "price": 550,
        "memo": "ボディソープのメモ"
      },
      {
        "id": "3",
        "name": "ハンドソープ",
        "price": 340,
        "memo": "ハンドソープのメモ"
      }
    ];

    $httpBackend.whenGET(/^\/api\/items/).respond(dummy_items);
    $httpBackend.whenPOST(/^\/api\/items/).respond(function(method, url, data) {
      var res = angular.fromJson(data);
      var obj = {
        "id": "dummy",
        "name": res.name,
        "price": res.price,
        "memo": res.memo
      };
      return [200, obj, {}];
    });
    $httpBackend.whenPUT(/^\/api\/items/).respond({});
    $httpBackend.whenDELETE(/^\/api\/items/).respond({});
  })
;
```

## ほか

使い方の詳細については公式のリファレンスを参照。
⇒ https://docs.angularjs.org/api/ngMockE2E/service/$httpBackend
thunderbirdの左側リストが表示されない時の対処方法

> 使用環境
> Mac OS X 10.7.5
> version 31.3.0
> ThunderbirdをDockから起動

A. Inbox.msf の削除

参考リンク
http://future-ns.com/blog/archives/53

### サーバ設定 - メッセージの保存先より *パスをコピー*

### Finderにて上でコピーしたパスを貼付ける

該当フォルダ内にある *Inbox.msf* を削除
※ただし、自己責任でお願いします

ダメでした＼(^o^)／

B. 「起動時にメッセージペインにスタートページを表示する」のチェックを外す

ダメでした＼(^o^)／

C. Lanchapadからの起動

ダメでした＼(^o^)／

D. mozillaフォーラムより

Mac版 Thunderbird 31.0 で左側リストが表示されない
http://forums.mozillazine.jp/viewtopic.php?f=3&t=14887&sid=83bd06498bae9d7cc9a28a4ac982b629

Cを二回実行した所、正常に表示されました。
gitで特定のステータスの変更のみ取り消す

`git status` で複数のステータスが混ざっているときに、特定のステータスの変更だけ、一括で取り消したいときの方法。

```bash
git status -s | grep '^\sM\s' | awk '{print $2}' | xargs git checkout
```

grepに渡す正規表現部分を変えることで、任意のステータスを対象にできます。

| | ファイルステータス |
|:-----------:|:-----------------|
|M|modified|
|A|added|
|D|deleted|
|R|renamed|
|C|copied|
|U|updated but unmerged|

```bash:例）変更だけ残してファイル追加削除を取り消し
git status -s | grep '^\s[^M]\s' | awk '{print $2}' | xargs git checkout
```
Tomcat 8.0.15 が「127.0.0.1は～認識されていません」で起動に失敗する問題

# 現象
tomcatのzipを展開し、NetBeansで「サーバーの追加」を行いました。
「サービス > サーバー」への登録は成功しましたが、「起動」を実行すると以下の出力とともに失敗します。

```
'127.0.0.1' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```

**環境**

* Windows 8.1
* NetBeans 8.0.2
* Tomcat 8.0.15

# 解決策

stackoverflowに同じ問題の解決策が投稿されていました。
http://stackoverflow.com/questions/26485487/error-starting-tomcat-from-netbeans-127-0-0-1-is-not-recognized-as-an-inter
バージョンは少し違いますが、これと同じ方法で起動できるようになりました。

1. `apache-tomcat-8.0.15\bin\catalina.bat`をテキストエディタで開く
2. 195-196行目、200-201行目にある`JAVA_OPTS`の値から`"`を取り除く

```
:noJuliConfig
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%"
...
:noJuliManager
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%"
```

↓

```
:noJuliConfig
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%
...
:noJuliManager
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%
```
Elastic Beanstalkのcommandで環境変数参照

無理矢理だけどこんな感じで、`get-config environment`を呼んでjsonをparseして取り出す。
引数が`environment`だと`-k`オプションが効かないので仕方ない。

```yaml
packages:
  yum:
    newrelic-sysmond: []
  rpm:
    newrelic: "http://download.newrelic.com/pub/newrelic/el5/i386/newrelic-repo-5-3.noarch.rpm"
commands:
  01_configure_new_relic:
    command: "nrsysmond-config --set license_key=`/opt/elasticbeanstalk/bin/get-config environment | ruby -rjson -e 'print JSON.parse(gets)[:NEWRELIC_LICENSE_KEY.to_s]'`"
  02_start_new_relic:
    command: "/etc/init.d/newrelic-sysmond start"
```
Mac OS X で dnotify, inotify のような機能をお手軽に利用することはできないかしら？


ディレクトリやファイルの監視を、コマンドでやりたい。

Mac OS X
====

こんな感じか。 ∥ [osx - Is there a command like "watch" or "inotifywait" on the Mac? - Stack Overflow](http://stackoverflow.com/questions/1515730/is-there-a-command-like-watch-or-inotifywait-on-the-mac)

fswatch(1) が Homebrew にある。

~~~~console:
$ fswatch -0 /path/to/dir/ | xargs -0 -n 1 /bin/echo d:
~~~~

fswatch(1), xargs(1) ともに、`-0` オプションで NULL による行終端。xargs(1) は `-n 1` で、一単位ごとにコマンド呼び出しをする。

何のシステムコールを用いているかは知らないが、たとえば Kobito のデータが格納されている ~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito/ を watch していても、Kobito 稼働中は何も起きない。Save をしても無反応。Kobito を閉じる際に、データベースや WAL ファイルが close された時点で反応が出る。

これは良いやらどうやらと思ったが、大きなファイルを追記し続けている間に延々と反応されても良くないので、これは妥当なのかも知れない。

Linux では？
====

inotify-tools の inotifywait かな（%e: Event, %w: Watched file or directory, %f: ディレクトリのイベントであればファイル名、さもなければ空文字列）。

~~~~console:
$ inotifywait -m /tmp/hoge
~~~~

`-0` オプションが無いので使いづらいな。ただ、イベントは詳細なので、自分で切り分ければ良い。こんな感じか。

[String contains in bash - Stack Overflow](http://stackoverflow.com/questions/229551/string-contains-in-bash)

~~~~bash:
inotifywait --monitor --recursive --format "%e %w%f" /tmp/hoge |
  while read events path
  do
    case ,$events, in
      *,CLOSE,* )
        echo d: $events $path
        ;;
    esac
  done
~~~~
javascriptで深い階層の確認

# 概要
連想配列で深い階層のキーが存在するか確認します。

ない場合のデフォルトの値も設定できます。

※PHPでは、こんな感じ。

```php
isset($a['a']['b']['c']['d'])
```

# ソース
```js
get = function(val, keys, def){
    var keys = String(keys).split('.');
    for(var i=0;i<keys.length && val;i++){
        val = val[keys[i]];
    }
    return val || val === false ? val : def;
}

```

# 使い方
調べたい変数を第一引数にし、第二引数にキーを`.`区切りで指定します。
第三引数に、見つからなかった場合 ( `null` or `undefined` ) の値を代入します。

```js
a = {a:{b:{c:{d:'見つかりました'}}}};

// 見つかりました
get(a, 'a.b.c.d', '見つかりませんでした');

// 見つかりませんでした
get(a, 'a.aaa', '見つかりませんでした');

```
関数型言語には遅延評価が必要

そんなものは迷信に過ぎない<sup><a href="#ref1">*1</a></sup>。

> Elm is not lazy.
> &mdash; _[Elm FAQ](http://elm-lang.org/learn/FAQ.elm)_

> It is compiled, with eager evaluation.
> &mdash; _[Idris Overview](http://www.idris-lang.org/)_

<blockquote class="twitter-tweet" lang="ja"><p>関係として、「参照透過性を持たない言語だと、評価戦略によって値（結果）が異なってしまう場合があるので、デフォルトの評価戦略（だいたい正格な評価）以外の戦略が取れない」ってのがある。</p>&mdash; Ryusei (@mandel59) <a href="https://twitter.com/mandel59/status/552252052395409408">2015, 1月 5</a></blockquote>

参照透過性を持たない言語では、評価戦略を変更すると、大きな混乱がおこる。具体的には、Haskellで`unsafePerformIO`を使ったような状況に陥るだろう。([本物のプログラマはHaskellを使う 第31回 禁断の機能「unsafePerformIO」の深淵](http://itpro.nikkeibp.co.jp/article/COLUMN/20090512/329783/)) しかし、参照透過性があるからといって評価戦略に遅延評価を採用しなければならないという決まりはない。

<blockquote class="twitter-tweet" lang="ja"><p>参照透明であれば評価戦略によらず値が変わらないから、じゃあ並列で評価するかーとか、色々な戦略が取れるわけど、Haskellは逆に、正格な評価では停止しない場合でも⊥でない場合がある。遅延評価にロックインされていて、評価戦略から完全に自由とは言えない。</p>&mdash; Ryusei (@mandel59) <a href="https://twitter.com/mandel59/status/552254267357003776">2015, 1月 6</a></blockquote>

Haskellは逆に遅延評価に依存しているところがあるので、一般にHaskellで書かれたプログラムを遅延評価以外の戦略で評価することはできない。

<blockquote class="twitter-tweet" lang="ja"><p>Haskellが遅延評価にロックインされているの、Prologがバックトラッキングにロックインされているのを思わせてとてもよい</p>&mdash; Ryusei (@mandel59) <a href="https://twitter.com/mandel59/status/552256757334958081">2015, 1月 6</a></blockquote>

Haskellと同様、Prologも宣言型だと喧伝されることが多いのだけれども、副作用を使った処理を常用する点ではHaskell以上に非宣言的記述を必要とする。

<blockquote class="twitter-tweet" lang="ja"><p>評価戦略を変えたらアルゴリズムのオーダーが変わったり、停止しなくなったりするから難しいね</p>&mdash; Ryusei (@mandel59) <a href="https://twitter.com/mandel59/status/552257189922889728">2015, 1月 6</a></blockquote>

難しいというのは、コンパイラーなどが勝手に評価戦略を変更するのが難しいということ。

こういった話は、評価戦略を変更することでプログラムの意味がどのように変わりうるのかという話なので、意味論を持ち出さないとまともな話はできそうにない。

<a id="ref1">*1</a> [破壊的メソッド名には!をつけなければならない](http://qiita.com/tadsan/items/7baab2605a4d8ac1858e)
cakephpやfuelphpでpostなどした後に元のページへ戻す方法

cakephpやfuelphpに限らずですが、 
リファラーにリダイレクトすることで元のページに戻れます。

Cakephpの場合

```php:cakephp
$this->redirect($this->referer());
```

Fuelphpの場合

```php:fulephp
Response::redirect(Input::referrer());
```

他の言語, 他のフレームワークなどでも同じだと思います。
A Tour of Go Exercise: Slices　#36


誰かソースチェックお願いします。

```go
package main

import "code.google.com/p/go-tour/pic"

func Pic(dx, dy int) [][]uint8 {
    
    ret := make([][]uint8, 0, dy)
     
    for i := 0; i < cap(ret); i++ {
        
        row := make([]uint8, dx)        
        for j := range row { 
            row[j] = uint8(j * i / 10)
        }
        
        ret = append(ret, row) 
    }
    return ret
}

func main() {
    pic.Show(Pic)
}
```

##表示された画像


![スクリーンショット 2015-01-06 9.45.35.png](https://qiita-image-store.s3.amazonaws.com/0/25562/3677020b-b275-a05b-53fa-c38dd0d6f750.png "スクリーンショット 2015-01-06 9.45.35.png")
JenkinsでDeploy


## やりたいこと

gitlab上で開発されているphpのウェブアプリをJenkinsでビルド開始をポチッとすると、最新をpullし、httpサーバにrsyncでデプロイする。

## 構成

- apache2サーバ (Ubuntu 14.04)
- Jenkinsサーバ (CentOS 6.6)
- gitlabサーバ(不明)


## Jenkinsサーバ

### jenkinsをログインできるようにする

※本当はやらないほうがいいんじゃないだろうか？

```
sudo chsh -s /bin/bash jenkins
```

### デプロイ用キー作成

deploykey.pubはコピペで後でapache2のauthorized_keysに書く。

```
sudo su -
ssh-keygen -f deploykey
cat deploykey.pub
mkdir /var/lib/jenkins/.ssh
mv deploykey* /var/lib/jenkins/.ssh
chown -R jenkins:jenkins /var/lib/jenkins/.ssh
chmod -R og-r /var/lib/jenkins/.ssh
```


## apache2サーバ

### www-dataをログインできるようにする

※本当はやらないほうがいいんじゃないだろうか？今回は前もってapache2サーバはjenkinsからしかsshできないようにしてあるので、安全といえば安全だが・・・。

```
sudo su -
chsh -s /bin/bash www-data
```

### jenkinsのデプロイ用キーを書く

```
sudo su -
mkdir /var/www/.ssh
vi /var/www/.ssh/authorized_keys
chown -R www-data:www-data /var/www/.ssh
```

**このあと、jenkinsサーバに戻って `ssh -i deploykey www-data@httpserver`でつなげ、known_hostsをちゃんと更新 & 接続確認すること。私はこれでハマった。**


### アプリ置き場を作る

このあと適当にconfを書く。ここでwww-dataでデプロイすることで、キャッシュディレクトリとかをog+wとかしなくてよいのがよい。

```
sudo su -
mkdir /var/www/app_dir
chown www-data:www-data /var/www/app_dir
```


## jenkins設定

### git & gitプラグイン入れる

加えてCentOS6.6標準のgitだと古くて、jenkinsのgitプラグインからhttpでのアクセス(メールアドレスとパスワードでの認証)がうまく動かないだろう、ので、ソースコードからビルドしてインストール。このパスをjenkinsで設定すること

### ビルドの手順書

プロジェクトの設定から`ビルド手順の追加`して`シェルスクリプト`を選択し、以下のコマンドを実行。

```
rsync -avC --delete -e "ssh -i /var/lib/jenkins/.ssh/deploy_key" $WORKSPACE/ www-data@apache2server:/var/www/app_dir/
```

パスの最後のslashの位置とかハマりどころなので注意。rsyncのCオプションはいまどきらしい、`--help`によると、以下とのことで、`.git`とか`.cvs`とか`.svn`とか無視してくれるらしい。

```
-C, --cvs-exclude           auto-ignore files the same way CVS does
``` 


## あとは

このプロジェクトのボタンを押せば、git pull → rsync までやってくれるはず。前述の通り、一度ターミナルからsshして動作確認しないと、known_hostsにハッシュが無くてコケてた。


# 試してないこと

sshつなげようとして、問い合わせに対してyesを押してknown_hostsを更新する方法

```
ssh-keyscan -H $host >> ~/.ssh/known_hosts
```
Mac OS X で PIC 焼いて Lチカしてみる : その2 開発環境の構築


[ツール・ラボ » 電子工作入門](https://tool-lab.com/category/electronics/electronics_101/page/6/)

こちらを参考にしながら、PICを焼いて、Lチカしてみる

# やること

1. [PICの解説](http://qiita.com/kasei-san/items/0f27b37932d9d0c3095d)
1. **開発環境の構築(今回)**
1. [PICにプログラムを書き込む為の回路を構築](http://qiita.com/kasei-san/items/7c4fc76721b9af5fa4f0)
1. コードを実装、コンパイル、PICに書き込む
1. Lチカ回路の構築、動作確認

# 今回やること

1. PIC 開発用の IDE を取得
2. PIC 用コンパイラを取得

# PIC 開発用の IDE を取得

マイクロチップ・テクノロジー社 の web サイトに PIC 開発用の IDE があるので取得する

→ [MPLAB®X IDE | Microchip Technology Inc.](http://www.microchip.com/pagehandler/en-us/family/mplabx/#downloads)

**2015/01/05現在、上記ページを表示するとブラウザのレスポンスがなくなるので、Firebug 等で ```HEAD /_images/_banners/en/141126-DVTL-BNR-EndoFYear-950x175.jpg HTTP/1.1``` の読み込みを中止する必要あり**

→ [IDEへの直リン](http://www.microchip.com/mplabx-ide-osx-installer)

# PIC 用コンパイラを取得

こちらも、マイクロチップ・テクノロジー社 の web サイトから取得

→ [| Microchip Technology Inc.](http://www.microchip.com/pagehandler/en-us/devtools/mplabxc/)

**こちらも、ブラウザが反応しなくなるので注意**

→ [直リン(XC8)](http://www.microchip.com/mplabxc8osx)
→ [直リン(XC16)](http://www.microchip.com/mplabxc16osx)
→ [直リン(XC32)](http://www.microchip.com/mplabxc32osx)

## XC8、XC16、CX32 の違いって?

- チップの種類の違いでコンパイラが異なる
- 具体的にはデータメモリのビット数の違い
- XC8は8ビット用、XC16は16ビット用

## データメモリって?

- PICは、CPUと違って内部にメモリを持つ
- メモリは以下の2種類
  - プログラムを格納する **プログラムメモリ**
  - データを格納する **データメモリ**
- データメモリには以下の情報が格納されている
  - プログラムで使用する変数
  - PICを動作させる為に必要なデータ

詳しくはこちらを参照 → [2.3 メモリ構成](http://cai.cs.shinshu-u.ac.jp/susi/Lecture/microcomp/d_02-03.html)
[GithubとBacklogの連携] Backlogでissue管理して、Githubへのコミット内容をBacklogにも反映させる様に連携する方法

Backlogでissue管理をしていて、Githubをリポジトリとして使っている場合に、GithubへのcommitをBacklogの各issueに反映させたいこともあるかと思います。

# GithubでWebhook設定

## GithubのリポジトリからSettingsを選択して、Webhooks & Services へ

![Screen Shot 2015-01-06 at 09.14.27.png](https://qiita-image-store.s3.amazonaws.com/0/18705/09b3d8cc-3aaf-26e2-3703-9e5e5723f6bb.png)


## Add Service を押下して、Backlog を選択

![Screen Shot 2015-01-06 at 09.14.40.png](https://qiita-image-store.s3.amazonaws.com/0/18705/ca590076-2644-2fc8-c887-03d112b3690c.png)

## Backlogとの連携設定

![Screen Shot 2015-01-06 at 09.14.49.png](https://qiita-image-store.s3.amazonaws.com/0/18705/c76ea332-8eea-9f24-07ad-be81542fc747.png)

Backlog の Api url ですが、これはお使いのbacklogのurlに XML-RPC という文字列を追加したものになります。

```rb
https://(スペース名).backlog.jp/XML-RPC
```

User, Password は各自ログイン時にお使いのものでいいかと思います。

# コミットメッセージの記載方法

## issue id

Githubにcommitする際に、Backlogのissue id を付与する必要があります。
こんな感じのやつです↓

```rb
PROJECTNAME-111
```

## Backlogのissueのstatusを変更させるタグ

以下のキーワードを入れることで、statusの更新もできます。

```
resolved(処理済): #fix #fixes #fixed　のどれか
closed(完了): #close #closes #closed　のどれか
```

## 注意

なお、日本語をコミットメッセージに日本語を入力すると反映されなくなるようです。


## 例

```rb
PROJECTNAME-111 add function hogehoge #fix
```

## 参考

詳しくは: http://www.backlog.jp/help/usersguide/git/userguide1400.html
Mac OS X で PIC 焼いて Lチカしてみる : その1 PICの解説


[ツール・ラボ » 電子工作入門](https://tool-lab.com/category/electronics/electronics_101/page/6/)

こちらを参考にしながら、PICを焼いて、Lチカしてみる

# やること

1. **PICの解説(今回)**
1. [開発環境の構築](http://qiita.com/kasei-san/items/e5b233c6b06363b85cca)
1. [PICにプログラムを書き込む為の回路を構築](http://qiita.com/kasei-san/items/7c4fc76721b9af5fa4f0)
1. コードを実装、コンパイル、PICに書き込む
1. Lチカ回路の構築、動作確認

# PICって何?

> PIC（ピック）とは、Peripheral Interface Controller（ペリフェラル インターフェイス　コントローラ）の略称であり、マイクロチップ・テクノロジー社（Microchip Technology Inc.）が製造しているマイクロコントローラ（制御用IC）製品群の総称である。

　

> PICにはCPU、メモリ（RAM、ROM）、I/Oなどが1チップに収められており、ROMに書き込まれたプログラムにより制御される。回路構成が容易かつ安価で、インターネット上で情報を得やすく、電子工作愛好家の間で人気がある。

[PIC (コントローラ) - Wikipedia](http://ja.wikipedia.org/wiki/PIC_(%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9))

## 特徴

- C言語(or アセンブラ)で命令が記述できるワンチップマイコン
- 安い : 1個100円そこいらで買える
- 小さい : IC1個
- ユーザが多い : webの情報量が多い
- **秋月での取扱量が多い** : 材料不足に悩まされない

# 他にAVRってのもあるらしいけど?

> Atmel AVR(アトメル AVR)は、Atmel社が製造している、RISCベースの8ビットマイクロコントローラ（制御用IC）製品群の総称である。

　
> PIC同様に回路構成が簡単でCPU、メモリ（RAM、ROM）、I/O、データ記憶用のEEPROM、クロック発振回路、タイマーなどが1チップに収められており、書き込まれたプログラムにより制御される。


[Atmel AVR - Wikipedia](http://ja.wikipedia.org/wiki/Atmel_AVR)

PICと同じくワンチップマイコン。別の会社が作ってる競合製品

## どっちが良いの?

- 開発環境はAVRの方が安く済むらしい
- Arduino は AVRベースなので、Arduino の経験があるなら AVR が良いらしい

色々言われてるけど、まだ自分には宗教論争との区別がつかないので不明。
AVRもいじった後に評価したい
ローカルにWordPress＋FoundationPress環境を構築する

[Varying-Vagrant-Vagrants ver1.2](https://github.com/Varying-Vagrant-Vagrants/VVV) を使ってWordPress開発環境をMacに作って、更にZURBの[FoundationPress ver5.4.7](https://github.com/olefredrik/foundationpress)をインストールするまで。
執筆時点での各バージョンも書いておきます。
#Varying-Vagrant-Vagrantsのインストール
まずは[VirtualBox 4.3.20](https://www.virtualbox.org/wiki/Downloads)をインストール
次は[vagrant 1.6.5](https://www.vagrantup.com/)もインストール

hostsupdaterをインストール

```ruby:
 vagrant plugin install vagrant-hostsupdater
```

でgit cloneします。

```ruby:
 git clone git://github.com/10up/varying-vagrant-vagrants.git vagrant-local
```

で

```ruby:
 cd vagrant-local
 vagrant up
```

WordPress日本語版をダウンロード＆解凍しておいて

![wordpress-default.png](https://qiita-image-store.s3.amazonaws.com/0/46232/f03866b3-7cb3-d851-dc42-802cb01b4a33.png)


この中にドロップしましょう。どうもそのまま日本語化が出来なかったのでこんなスマートではない方法になってしまいました。

[http://local.wordpress.dev/wp-admin](http://local.wordpress.dev/wp-admin)
から入ります。ユーザ　admin
パスワードはpassword

##FoundationPressのインストール
FoundationPressをダウンロードします。
バージョン管理のためにGitHub for Macを立ち上げます。

![Open.png](https://qiita-image-store.s3.amazonaws.com/0/46232/2d9d31bf-5572-7484-dd81-22ee611b1ad1.png)

ここに任意の名前（ここではexample）でリポジトリを作りそこに先ほど解凍しておいたFoundationPressの中をそのままドロップします。

```ruby:
 cd /Users/Desktop/vagrant-local/www/wordpress-default/wp-content/themes/example
 sudo npm install && bower install && grunt build
 grunt
```

これで開発環境が整いました。
あとはグリグリいろんなところをいじくるだけ。

##編集するところ
![style_css_-__Users_satouatsushi_Desktop_vagrant-local_www_wordpress-default_wp-content_themes_nittosha_-_Atom.png](https://qiita-image-store.s3.amazonaws.com/0/46232/ea28ffb8-4232-e300-059e-7c044ba7016c.png)

注意点
_setting.scssを編集すればOKなのですが、topbarナビゲーションのアクティブのところだけ、#272727になってしまいますので注意が必要です。

scss>site>_structure.scssを編集します。

```rb
// A more subtle background color for the active menu item
.top-bar-section li.active:not(.has-form) a:not(.button)  {
    background: #272727;
}
.top-bar-section li.active:not(.has-form) a:hover:not(.button) {
    background: #202020;
}
```

ここの#以下を任意の色に変える必要があります。
Pyramidでリダイレクト

PyramidのViewでリダイレクトする。

```Python
@view_config(route_name="method")
def method(request):

@view_config(route_name="redirect")
def redirect(request):
  return HttpFound(location=request.route_url('method'))
```

単純なメソッドの呼び出しだとリダイレクトにならないので上記のように、HttpFoundクラスを使用する。
[Swift]String、Int、Doubleの型変換をそれぞれまとめてみた。


俺の名はケンヤ。難事件をいくつも迷宮入りさせたニート。しかし ある時謎の組織に入社し薬を飲まされ身体が縮んで **Braian** になっちゃった。

##Int → String

```
var intNum: Int = 37
var str: String = String(intNum)
//"78"
```


##Int → Double

```
var intNum: Int = 37
var doubleNum: Double = Double(intNum)
//37.0
```

##Double → String

```
var doubleNum: Double = 1.234
var str: String = String("\(doubleNum)")
//"1.234"
```

##Double → Int

```
var doubleNum: Double = 1.234
var intNum: Int = Int(doubleNum)
//1
```

##String → Double

```
import = Darwin
var str: String = "10.5"
var doubleNum: Double = atof(str)
//10.5
```

##String → Int

```
var str: String = "37"
var intNum: Int = str.toInt()!
// 37
```


**String型からDouble型への変換では"Darwin"を使用したのですが他にいい方法ってあるのでしょうか？？**


まだまだ勉強が足りませんが、不備やアドバイスなどのコメントを頂けますと幸いです！！！
SSG140リプレース手順

バックアップしたコンフィグを読み込んで代替機の設定を行う手順。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/bece826f-db69-6ef9-e4a3-d3e39318bab4.png)

* http://192.168.1.1/ にアクセス

![2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/181a2c68-3347-db40-aa54-0187ece25c01.png)

* user:pass = netscreen:netscreen

![3.png](https://qiita-image-store.s3.amazonaws.com/0/25728/df6d5900-faf7-895d-08e4-4398eea252f4.png)

![4.png](https://qiita-image-store.s3.amazonaws.com/0/25728/4a4cc8ef-42cd-da44-7710-57bcabc6a02d.png)

![5.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c0efb99e-635f-a0f4-6168-e72995413787.png)

![6.png](https://qiita-image-store.s3.amazonaws.com/0/25728/deea4aa8-4b06-013d-7753-1687ee786a77.png)

![7.png](https://qiita-image-store.s3.amazonaws.com/0/25728/4cf5ee3f-3056-693e-a407-e947ce3933e9.png)

機器がリブートするので2分待つ。

## arp req detected an IP conflict対応

* SSG140以下の機器からインターネットに接続できるが、インターネット側からSSG140以下のhttpdやsshdに接続が出来ない現象を確認。

SSG140のログを見たところ以下有り。

> 2015-01-06 09:27:52	crit	arp req detected an IP conflict (IP 1.2.3.4, MAC abcd12345678) on interface ethernet0/1
> 2015-01-06 09:27:52	crit	arp req detected an IP conflict (IP 1.2.3.254, MAC abcd12345678) on interface ethernet0/1

* 1.2.3.4 は SSG140自身のIPアドレス
* 1.2.3.254 は SSG140のNSRP
* abcd12345678 は上位ネットワーク機器のMACアドレス

上位ネットワーク機器のarp情報がおかしい。
上位ネットワーク機器にpingを打ってもダメだったので、
上位ネットワーク機器を再起動で治った。

上位ネットワーク機器のarp情報クリアコマンドで治ったかも知れない。

ciscoだと`clear arp-cache`

## arp req detected an IP conflict 対応 2

* ScreenOSが古いと遭遇したので更新。
Scalaの小ネタ: 「これ知ってるのはあまりいないでしょ」っていうimportの書き方見つけた

結論から言うと、importに変数が使えるだけのこと。
型名に変数が使えるのは知ってたけど、これはついさっき知った。

```scala
val list = List(1, 2, 3)
import list._
foreach(println)
val x = map(_ * 2)
mkString("-")
```

知ったきっかけは、PlayでSeleniumを使ったテストを書いてたとき。

```scala
// コードはPlayのsamplesから拝借
running(...) { browser =>
  browser.$("#name").text("Bob")
  browser.$("#submit").click()

  browser.$("dl.error").size must equalTo(1)
  browser.$("dl#repeat_field dd.error").first.getText must equalTo("Numeric value expected")
  browser.$("#name").first.getValue must equalTo("Bob")

  browser.$("#repeat").text("xxx")
  browser.$("#submit").click()
}
```

いちいちbrowserと打つのが面倒臭かったので、メソッド名だけで書けないかと思い、変数名でimportしてみたら通ってむっちゃ驚いた。これでテストコードは、jQueryライクの素敵なコードへと変身を遂げた。

```scala
running(...) { browser =>
  import browser._
  $("#name").text("Bob")
  $("#submit").click()

  $("dl.error").size must equalTo(1)
  $("dl#repeat_field dd.error").first.getText must equalTo("Numeric value expected")
  $("#name").first.getValue must equalTo("Bob")

  $("#repeat").text("xxx")
  $("#submit").click()
}
```
Ruunable 覚書（書きかけ）

## runnableなるコード実行サービスをちょっと試してみた。

こんな素敵な紹介記事から行ったのだが、
http://plus.appgiga.jp/masatolan/2014/10/17/54194/

ポピュラーなコードが１～２年前に集中しており、過疎化しているものと思われる・・・
http://runnable.com/?orderBy=popular


###ただ、scalaが実行可能であった。
http://runnable.com/sbt

以上。

### コード実行系サービスって、どうやって流行らせるのかいいのかなぁ。
runnableはgithubと連携してないなど、それ以前のところがアレですが。。
テキストから複数行のセットで配列に格納する

```php
<?php
$text = <<<EOF
a
b
c
d
aa
bb
cc
dd
aaa
bbb
ccc
ddd
EOF;
$indexs = array('CONSUMER_KEY', 'CONSUMER_SECRET', 'ACCESS_TOKEN', 'ACCESS_TOKEN_SCRET');
$values = array_map(function($arr) use ($indexs) {
    return array_combine($indexs, $arr);
}, array_chunk(explode("\n", trim($text)), count($indexs)));
var_dump($values);
```

出力

```shell-session
array(3) {
  [0]=>
  array(4) {
    ["CONSUMER_KEY"]=>
    string(1) "a"
    ["CONSUMER_SECRET"]=>
    string(1) "b"
    ["ACCESS_TOKEN"]=>
    string(1) "c"
    ["ACCESS_TOKEN_SCRET"]=>
    string(1) "d"
  }
  [1]=>
  array(4) {
    ["CONSUMER_KEY"]=>
    string(2) "aa"
    ["CONSUMER_SECRET"]=>
    string(2) "bb"
    ["ACCESS_TOKEN"]=>
    string(2) "cc"
    ["ACCESS_TOKEN_SCRET"]=>
    string(2) "dd"
  }
  [2]=>
  array(4) {
    ["CONSUMER_KEY"]=>
    string(3) "aaa"
    ["CONSUMER_SECRET"]=>
    string(3) "bbb"
    ["ACCESS_TOKEN"]=>
    string(3) "ccc"
    ["ACCESS_TOKEN_SCRET"]=>
    string(3) "ddd"
  }
}
```

データの管理が楽なケースに出くわしたのでメモ
$indexs に key名を初期化しておく
CoffeeScriptでCMSを作成するフレームワーク「code:JS」

[code:JS](https://github.com/digitarhythm/codeJS)
# code:JSとは
CoffeeScriptで記述するviewベースフレームワークです。
コンテンツの設計としては、iOSのUIKitと同じ流れで行います。
UIKitと同じ仕様のクラスが用意してあるので、同じような感じでプログラミングしていくことが出来ます。
フレームワークを使って作ったものは、コンテンツがひとつのディレクトリ内で完結する（サンドボックス）ため、CoffeeScriptがコンパイルしてある状態であれば、PHPとSQLite3が動くサーバーであれば、ディレクトリはhtdocs配下であればどこにあっても動作します。

# viewベースとは
プログラミングの基本は「**JSView**」というクラスを拡張する形になります。
コマンドラインでこれらのクラスを継承したクラスを新規作成できるので、新規作成したクラスにオーバーライドして動きを記述していきます。
この「**JSView**」は極力UIKitの「**UIView**」に似たパラメータを持たせてあります。
JSViewを継承したクラスを作成し、それをrootViewに「**addSubview**」することで画面に表示されます。
「**addSubview**」したviewは親viewの動きに追随するのは、UIViewと同じです。
setConerRadiusや、setBorderWidth、setBackgroundColorなどで見栄えを設定します。

# なぜCoffeeScript？
このフレームワークを作ったきっかけは、iOSのviewベースプログラミングと、HTML+CSS3+Jacascriptでのプログラミングが違いすぎることからブチ切れて作ったので、UIKitと同じようなクラスを定義出来るCoffeeScriptを使用しました。
なので、開発中はCoffeScriptのコンパイル環境(node.js)が必要になります。

後々、使い方を追記していこうと思います。

---

[CoffeeScriptでCMSを作成するフレームワーク「code:JS」チュートリアル（１）](http://qiita.com/digitarhythm/items/b85b8352f36881a9771d)
RailsのAssetでError compiling CSS asset, EOFError: end of file reachedと出た時の対処法


僕の場合テスト回してる時に特定ページのみで発生しました。
ぐぐったらstack overflowで[こんな記事](http://stackoverflow.com/questions/19576352/assetsprecompile-end-of-file-reached)を見つけたのでその共有。

#原因
どうやらassetsのキャッシュが悪さをしているようです
Railsのキャッシュファイルは`#{Rails.root}/tmp/cache/assets`配下に環境ごとにディレクトリが分けられてます

```bash
$ tree -L 2 -d tmp/cache/assets/
tmp/cache/assets/
├── development
│   ├── sass
│   └── sprockets
├── production
│   ├── sass
│   └── sprockets
└── test
    ├── sass
    └── sprockets
```

エラーが出た環境の`sass/`及び`sporckets/`ディレクトリ配下のファイルをすべて削除することでエラーが解消されました。
Cでパケットを受信(監視)する

#概要
Cで対象のインターフェイスから受信フレームを取得する方法を解説します。

###環境構築
CentOSを想定しています。
コンパイラ(gcc)やパケットを取得するためのlibpcapというライブラリを使用します。

```bash
yum -y update
yum install -y gcc vim wget tar flex byacc
wget http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz
tar zxvf libpcap-1.8.1.tar.gz
cd libpcap-1.8.1
./configure
make -j 8
make install
```

###ソースコード
pcap_open_live()で初期設定を行い、
pcap_loop()でパケット取得のループを開始します。
pcap_loop()にコールバック関数を登録するとパケット受信毎に
コールバック関数がコールされます。

```c:get_pkt.c
#include <pcap.h>
#include <stdio.h>
#include <stdlib.h>
#define DPCP_RCV_MAXSIZE   68
#define DPCP_PROMSCS_MODE  1
#define DPCP_RCV_TIMEOUT   1000
#define DPCP_NOLIMIT_LOOP  -1

void start_pktfunc( u_char *,const struct pcap_pkthdr * ,const u_char *);

int main( void ){
  pcap_t *pd = NULL;
  char ebuf[PCAP_ERRBUF_SIZE];

  if( (pd = pcap_open_live( "eth0" ,             // インターフェイス名
                             DPCP_RCV_MAXSIZE ,  // 最大受信サイズ(最初の68byteまで受信する)
                             DPCP_PROMSCS_MODE , // 自分宛以外のパケットも処理の対象にする
                             DPCP_RCV_TIMEOUT ,  // タイムアウト時間(ミリ秒)
                             ebuf )) == NULL ){
    // error
    exit(-1);
  }

  if( pcap_loop( pd ,
                 DPCP_NOLIMIT_LOOP , // エラーが発生するまで取得を続ける
                 start_pktfunc,      // パケット受信した時のCallBack関数
                 NULL                   //  CallBack関数へ渡す引数
               ) < 0 ){
    // error
    exit(-1);
  }
  pcap_close(pd);
  return 0;
}
void start_pktfunc( u_char *user,                  // pcap_loop関数の第4引数
                    const struct pcap_pkthdr *h , // 受信したPacketの補足情報
                    const u_char *p               // 受信したpacketへのポインタ
                  ){
  // packet処理
  printf("receive packet¥n");
}
```

###コンパイル、実行
```c
gcc -Wall -o get_pkt get_pkt.c -lpcap -L/usr/local/lib/
export LD_LIBRARY_PATH=/usr/local/lib/
./libpcap
```

packet処理については、
[C言語でフレーム内容を見る(Etherヘッダ)](http://qiita.com/Ki4mTaria/items/0f3c5d306662e0bdf7cf)
[IPヘッダを理解する](http://qiita.com/Ki4mTaria/items/188df29ca26dbdc7887c)
を参照して頂ければと思います。
webで頑張っている元教え子ちゃんにおくるまとめ＃１　情報基盤、環境構築


#どうやって楽をするか？
究極は書かないの一言。無駄なコードで疲れちゃいかん。
cのヘッダ、ライブラリもそういうことね。
あるものは使いましょう。つまらんオリジナルは不要。
手を抜きましょう。
ここだけは書かなきゃいかんところだけを書いて、上手に接合したらいいのです。

#Github,Qiita

##Github
http://www.atmarkit.co.jp/ait/articles/1407/22/news019.html

##Qiita
エントリしましょう。

#多分最強のエディタ
クロスプラットフォームのエディタです。なんでも書けます。
メジャーな言語、ほぼ網羅してます。
http://www.sublimetext.com/3

#いいのか？　adobe brackets
http://brackets.io/
DWもいいけど、最近のは重すぎる。FWもたるい。
PSDから色々出来てしまうのです。
使い方を研究すると、結構なスピードでマークアップ出来ます。
使わない手はないのです。
PSD形式のテンプレを使うときにはこれですね。
Win環境が無いので、Winで動くかってのはわかりません。

![kobito.1420474277.373085.png](https://qiita-image-store.s3.amazonaws.com/0/33317/4eaf1974-9256-b25e-4fcc-5a0e7bd5f8a2.png "kobito.1420474277.373085.png")
プロキシ設定まとめ

###yum

設定ファイルに追記

```diff
vi /etc/yum.conf
+ proxy=http://proxy_ip:port_num/ # 追記
```

###apt-get
設定ファイルを作成する。

```diff
vi /etc/apt/apt.conf
+ Acquire::http::Proxy "http://proxy_ip:port_num/";
+ Acquire::https::Proxy "http://proxy_ip:port_num/";
+ Acquire::ftp::Proxy "http://proxy_ip:port_num/";
```

###wget

設定ファイルに追記

```diff
vi /etc/wgetrc
+ https_proxy=http://proxy_ip:port_num/ # 追記
+ http_proxy=http://proxy_ip:port_num/ # 追記
+ ftp_proxy=http://proxy_ip:port_num/ # 追記
```

###curl

```bash
curl -x http://proxy_ip:port_num ftp://ftp.aa.bbb
```

または

```diff
vi ~/.curlrc
+ proxy = "http://proxy_ip:port_num"
```


###rpm

rpmコマンド実行時にコマンドオプションでhttpproxyとhttpportを指定する。

```bash
rpm --httpproxy proxy_ip --httpport port_num
```

###git

```bash
git config --global http.proxy http://proxy_ip:port_num/
```

または下記の内容を.gitconfigに追加する。

```diff
+ [http]
+   proxy=http://proxy_ip:port_num/
```

###npm
```
npm -g config set proxy http://proxy_ip:port_num
npm -g config set https-proxy http://proxy_ip:port_num
```

###bundle

```bash
set HTTP_PROXY=http://proxy_ip:port_num
```

###gem

```bash
gem install aaa --http-proxy http://proxy_ip:port_num
```

###pear,pecl

```bash
pear config-set http_proxy http://proxy_ip:port_num
```

###docker

ubuntuの場合

```diff
vi /etc/default/docker
+ export http_proxy=http://proxy_ip:port_num
```

CentOSは[ココ](http://qiita.com/RyotaIshii/items/44061e35966c11296d64)とか。
Doxygen構築

Doxygenはソースコードからドキュメントを生成してくれるツール。
[参考サイト](http://matome.naver.jp/odai/2134893784652705301)

Dockerfile

```bash
FROM centos:centos6
RUN yum -y update
RUN yum -y install doxygen graphviz graphviz-gd
```

コメントの書き方は[ココ](http://qiita.com/inabe49/items/23e615649e8539d857a8)。
そのうちソースをアップするとHTMLが取得可能になるようにツール化したい。
json.RawMessageはいつポインターを使うべき？

## ⚠️注意
この問題は2016年に[修正されたらしい](https://github.com/golang/go/commit/1625da24106b610f89ff7a67a11581df95f8e234)です。Goのバージョンが古かなければ気にしなくて良いです。

# 元記事
**Playground**: http://play.golang.org/p/DvuH_KondU

生JSON扱うのに[便利な型](http://godoc.org/encoding/json#RawMessage)、`json.RawMessage`。よくお世話になるが、ポインター使わないことによってハマることがあります。

## 調査

### NG: `json.RawMessage`

`[]byte`として認識され、Base64エンコードされてしまいます。

```go
import (
	"encoding/json"
	"os"
)

func main() {
	raw := json.RawMessage(`{"hello": "world"}`) // 生JSON
	out := json.NewEncoder(os.Stdout)
	
	
	// NG: そのまま渡して
	out.Encode(raw) // "eyJoZWxsbyI6ICJ3b3JsZCJ9"
}

```


### OK: `*json.RawMessage`
しかし、ポインターを渡すと想像通りに動きます。

```go
// OK: ポインター
out.Encode(&raw) // {"hello":"world"}
```

### OK: `[]json.RawMessage`
sliceはポインターを渡さなくても大丈夫

```go
// OK: slice
slice := []json.RawMessage{raw}
out.Encode(slice)
```

### NG: `map[string]interface{}`の中に`json.RawMessage`
mapはポインターが必要です。

```go
// map[string]interface needs a pointer
msi := map[string]interface{}{
	"NoPointer":   raw,  // NG
	"WithPointer": &raw, // OK
}
out.Encode(&msi) 
// {"NoPointer":"eyJoZWxsbyI6ICJ3b3JsZCJ9","WithPointer":{"hello":"world"}}
```

### NG: `map[string]json.RawMessage`
完全にアウトだ。

```go
whoops := map[string]json.RawMessage{
	"NoPointer": raw,
}
out.Encode(&whoops)
// {"NoPointer":"eyJoZWxsbyI6ICJ3b3JsZCJ9"}
```

### OK: `map[string]*json.RawMessage`
```go
msgmap := map[string]*json.RawMessage{
	"WithPointer": &raw,
}
out.Encode(msgmap)
// {"WithPointer":{"hello":"world"}}
```

### OK: ポインターで渡すstruct
```go
obj := struct {
	NoPointer   json.RawMessage
	WithPointer *json.RawMessage
}{raw, &raw}
out.Encode(&obj)
// {"NoPointer":{"hello":"world"},"WithPointer":{"hello":"world"}}

// これはNG: 
out.Encode(obj) 
// {"NoPointer":"eyJoZWxsbyI6ICJ3b3JsZCJ9","WithPointer":{"hello":"world"}}
```

## 結論
`json.RawMessage`を使うときは要注意です。特に`interface{}`として使ってはダメですよ。`*json.RawMessage`ならうまくいきます。
Rails4.1で『改訂新版　基礎Ruby on Rails』のコードで「ActiveModel::ForbiddenAttributesError」の対処

『改訂新版　基礎Ruby on Rails』の書籍の勉強。

Rails4.1を使っているが、Capter6の新規登録、更新でつまづいたので対処。

つまづいたのは以下の処理。

```rb
  # 会員の新規登録
  def create
    @member = Member.new(params[:member])
    if @member.save
      redirect_to @member, notice: "会員を登録しました。"
    else
      render "new"
    end
  end

  # 会員情報の更新
  def update
    params.permit!
    @member = Member.find(params[:id])
    @member.assign_attributes(params[:member])
    if @member.save
      redirect_to @member, notice: "会員情報を更新しました。"
    else
      render "edit"
    end
  end
```

「ActiveModel::ForbiddenAttributesError」のエラーが出てきて書き込みが出来ない。

Rails4.xではmass assignment対策の方法が変わっているとの事。

mass assignmentについては以下で。
http://nitetsu4.blog.fc2.com/blog-entry-5.html

では、各modelに権限を与えるように以下に設定すれば良いかというとあまりうまく行かず。
http://taku-k.hatenablog.com/entry/2013/09/08/155537

結果として、しょっぱいけど以下のコードで対応。

```rb
  # 会員の新規登録
  def create
    params.permit!
    @member = Member.new(params[:member])
    if @member.save
      redirect_to @member, notice: "会員を登録しました。"
    else
      render "new"
    end
  end

  # 会員情報の更新
  def update
    params.permit!
    @member = Member.find(params[:id])
    @member.assign_attributes(params[:member])
    if @member.save
      redirect_to @member, notice: "会員情報を更新しました。"
    else
      render "edit"
    end
  end
```

Strong Parameters関連の設定なんだろうけど、いまいち設定ができず、上記のような暫定策で設定。


以下は調べているうちに参考になったもの。

★Rails4.0に含まれる strong_parameters について
http://willnet.in/48

★Rails4のMass Assignment脆弱性対策のStrong Parametersについて
http://wada811.blogspot.com/2013/08/strong-parameters-mass-assignment-vulnerability-countermeasure-in-rails4.html

★Rails4 の Strong Parameters でリクエストパラメータを検証する
http://www.techscore.com/blog/2013/01/29/rails4-%E3%81%AE-strong-parameters-%E3%81%A7%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E6%A4%9C%E8%A8%BC%E3%81%99%E3%82%8B/

★改訂新版 基礎Ruby on Railsがようやく終わった
http://yuki3738.net/2014/08/25/post-365/
Android SDKのコマンドラインオプション (android update sdk)

Android StudioのプロジェクトをJenkins対応させるにあたって、JenkinsサーバのAndroid SDKをコマンドラインでアップデートする必要があったのでオプションのおさらい。
どこかにまとまってないかなぁと思っていたのですが、help にきちんとまとまってたんですね。

# コマンド
コマンドラインアップデートで使用する sdk/tools/android コマンドの書式は以下のとおり。

```bash
android [global options] action [action options]
```
global options, actionの一覧は help で確認できる。

```bash
$ android --help
```
アップデート関連で必要な action は、list sdkとupdate sdk。

actionに対して更に詳しい help を確認できる。オプション一覧がまとまってます。

```bash
$ android --help list sdk
$ android --help update sdk
```

# アップデート手順

* リポジトリのパッケージ一覧を表示して、インストールするパッケージを決める。

```bash
$ android list sdk -a
Packages available for installation or update: 124
   1- Android SDK Tools, revision 24.0.2
   2- Android SDK Platform-tools, revision 21
   ...
```

オプションなしの場合は新規インストールやアップデート可能なパッケージのみが表示される。
-a (-all) でインストール済みパッケージや build-tools を含むすべてを表示する。
-e (-extended) でパッケージの詳細情報を表示できる。

```bash
$ android list sdk -a -e
Packages available for installation or update: 124
----------
id: 1 or "tools"
     Type: Tool
     Desc: Android SDK Tools, revision 24.0.2
----------
id: 2 or "platform-tools"
     Type: PlatformTool
     Desc: Android SDK Platform-tools, revision 21
----------
```
* パッケージを指定してアップデートする。

```bash
$ android update sdk -a -u -t 1
```
番号は list sdk で表示される id を指定する。上記の場合、Android SDK Tools がアップデートされる。id の代わりに -e オプションをつけた時に表示される名前 (Android SDK Tools の場合は tools) を指定してもよい。
各オプションの意味は以下のとおり。
-a (-all) : すべてのパッケージを対象にする 
-u (--no-ui) : GUIを使用しない
-t (--filter) : 指定されたパッケージのみを対象にする
Google Apps ScriptだけでSpreadSheetへのPOST APIを持つWebアプリケーションを公開する

## 概要

※公開方法が一番重要なので、うまくいかない時はそれをまず確認してください

個人的にスマフォの通信量が7Gに行くことが多くなったので、小まめに確認して使い過ぎないようにしようと思ってつくりました。

以下のような感じで、POSTすれば表になるので、これをグラフにすれば日々の通信量が視覚化できていいですね！

![image](http://i.gyazo.com/3ada8f62fa12df20ea6ac55baf902870.png)

## script

そもそもどうやってscriptをいじるか知らない人はググってください。Spreadsheetを新規作成して`ツール＞スクリプトエディタ`で開きます。

POST時にシート名と数値データをそれぞれ`sheetName`と`data`で指定している前提です。

```js
function doPost(e){
  var sheetName = e.parameters.sheetName[0];
  var data      = e.parameters.data[0];
  
  addData(sheetName, data);
  
  return ContentService.createTextOutput(JSON.stringify({content:"post ok", sheetName:sheetName, data:data})).setMimeType(ContentService.MimeType.JSON);
}

function addData(sheetName, data){
  Logger.log("addData");
  var sheet = SpreadsheetApp.openById("ABCDEFGHIJKLMN").getSheetByName(sheetName);
  var sheetData  = sheet.getDataRange().getValues();
  sheetData.push([new Date(), data]);
  sheet.getRange(1,1,sheetData.length,2).setValues(sheetData); // getRange(開始行、開始列、行数、列数)
}
```

`openByID`でスプレッドシートを指定しています。このIDは、

```
https://docs.google.com/spreadsheets/d/ABCDEFGHIJKMLN/edit
```

ってURLの場合は`ABCDEFGHIJKMLN`の部分ですね。

## 公開する

これでハマるとスクリプトとか全部良くても、外部からちゃんと叩けないので重要です。

#### １．まずスクリプトエディタ画面の`公開＞ウェブアプリケーションとして導入`をクリック

![1](http://i.gyazo.com/87ffcfc05c6b997862f8576956998555.png)


#### ２．アプリケーションの実行ユーザは「自分」、アクセスできるユーザーを「全員（匿名ユーザーを含む）」にする。これで公開URLゲットです。

![集計くん_-_Vimperator.png](https://qiita-image-store.s3.amazonaws.com/0/4194/85f1843a-f67f-676a-7355-1ba525564a55.png)

実行ユーザを自分以外にすると、各ユーザー毎に認証する必要があるので外部から叩くときにめんどくさいです。そもそも自分以外にすると匿名ユーザーが叩けないので、スクリプトから叩くのが困難になります。

#### ３．承認が必要な関数を実行する。今回は`addData`を選択して`▶`を押して実行。承認ダイアログが出たら承認する。

![image2](http://i.gyazo.com/2f29f5364eb6bbf00af63bdb132aee97.png)

これやってないと、外部ユーザー実行にこける（はず）。

#### ４．スクリプトを変更したら必ずバージョンを更新する！

これ重要で、自分でデバッグするときと外部から叩いたときに出るエラーが違う場合はバージョンを追加してないことが問題です。

バージョンは「版を管理…」から新しいものを追加できるので、スクリプトを更新したら必ずバージョンを進めてから、再度公開処理時にそのバージョンを選択してください。

![4](http://i.gyazo.com/0ca0e369da62fbef5dd094a3b37db23a.png)

これをやらないと外部から叩くときだけ過去のバージョンのスクリプトを使ってしまって意図した通りにいかないことがあります。

めんどくさいですが必ず毎回やりましょう。

## デバッグ

`addData`のところでエラーが出る場合は、POSTの仕方がおかしいかもしれないので、一度`addData`部分をコメントアウトして実行すると、JSONで送ったパラメータが表示されるので、それを使ってデバッグしてください。

## POSTしてみる

`-d`でもできると思ったら成功したのは`-F`だけでした。

```shell-session
$ curl -L https://script.google.com/macros/s/ABCDEFGHIJKLMN/exec -F 'sheetName=通信量' -F "data=4.4"
{"content":"post ok","sheetName":"通信量","data":"1.4"}
```

この要領でRubyやNodeのアプリケーションから公開URLにPOSTすればOKです！
文字列から浮動小数点数値への型変換

String -> Int の型変換はすぐに検索できたが、String ->Double の変換を調べるのに苦労したので、記しておく。


`var str: String = "10.5"
var num: Double = NSString(String: str).doubleValue  //10.5`

上記での記述でキャストできた。

***
ちなみに、
`ver str = "10.5" 
var num = str.toDouble() 
var num = Double(str) 
var num = str.doubleValue() 
var num = str.toFloat()` 

上の５つの方法で試したが、全部うまくいかなかった。
Node.jsでURIエンコードを行う方法

ソースはこちら
[How do I URl encode something in Node.js?](http://stackoverflow.com/questions/6554039/how-do-i-url-encode-something-in-node-js)

# はじめに
　URLに日本語が含まれている場合に環境によってはそのまま日本語を使用した場合に正常なリクエストが生成できない場合があります。
（現に筆者はMacで開発していたNode.jsアプリをWindows Azureにデプロイしたら正常に動かなくなりました）
　安全の為にもURLをエンコーディングしてからリクエストを実行したほうが良さそうです。

# encodeURIComponent
　Node.jsの記事として書いていますが、実はそこまで関係なくて[^1]javascript標準のencodeURIComponentを使えば一発でエンコーディングしてくれます。例えばInstagramのAPIを叩くなら以下のようにAPIのURLが生成できます。

```ts
var apiUrl: string = 'https://api.instagram.com/v1/tags/';
apiUrl += encodeURIComponent('何かしらのタグ名') + '/media/recent?client_id=' + clientId;
```

[^1]: Node.jsとして記事を書いている理由は、筆者が無知で「nodejs uri 日本語 エンコーディング」という感じで検索してもなかなか解決策が見つからなかったからです。
HerokuでSinatraアプリを作るときに調べたこと困ったことまとめ

## Sinatraのプロジェクト構成

一段落した時点での構成は以下のようになった.


```
- webapp-dir
    - .env        // foremanを用いたデバッグ時の環境変数を宣言したファイル
    - Gemfile
    - Procfile
    - Rakefile
    - app     // 自作のスクリプトやスタイルシートはここ、gulp経由でコンパイルしてまとめる
        - script
            - app.coffee
        - stylesheet
            - app.less
    - app.rb      // コントローラー
    - bower.json
    - bower_components
    - config.ru
    - config.sh   // Herokuの環境変数設定用のスクリプト
    - gulpfile.coffee
    - models  
    - node_modules
    - package.json
    - public
    - views
```

aの構成というよりはWebプロジェクトの構成という気がする.
これでいいかどうか確信があるわけではない.

### 参考

- [npm + gulp + bower でビルド自動化](http://int128.hatenablog.com/entry/2014/07/02/004543)

## セッション
`app.rb`に以下を書き足す

```ruby:app.rb
enable :sessions
```

### 使用方法

```ruby
session[:request_token] = request_token
```

## Sinatraの変数スコープ
Sinatraはリクエストごとにインスタンスを立ち上げるので、あるメソッドでインスタンス変数を初期化しても他メソッドでは`Nil`になるといった場合がある.
そのため`helpers`ブロック内でインスタンス変数を持つようにする.

いい例

```ruby
get '/' do
  client.request1
end

get '/request' do
  client.request2 => undefined method `request' for nil:NilClass
end

helpers do
  def client
    @client ||= Client.new
  end
end
```

悪い例

```ruby

get '/' do
  @client = Client.new
  @client.request1
end

get '/request' do
  @client.request2 => undefined method 'request' for nil:NilClass
end
```


### 参考
- [Sinatra のスコープについて](http://www.ownway.info/Ruby/index.php?sinatra%2Fabout%2Fscope)

## URLにおけるスキーム、ホストの補完

`url(/app.js) => 'http://localhost:5000/app.js'`

## サーバ設定の自動更新
`sinatra-contrib`というgemを入れて`app.rb`に以下を書き足す.

```ruby:app.rb
configure :development do
  register Sinatra::Reloader
end
```

### 参考
- [【Sinatra】オートリロードしてほしい](http://qiita.com/izumin5210/items/cd2f9f48fbe1fdcaf628)

## ローカル環境
### foreman
heroku上での実行環境を再現するのに`foreman`というgemを使う

```ruby:Gemfile
group :development do
  gem 'foreman'
end
```

foremanは`.env`というファイルの内容を環境変数として読み込んでくれる.

```sh:.env
ENV_VARIABLE="variable"
```

### Postgresql周り
HerokuでPostgresqlのアドオンを利用したのでローカルでの環境も整える.  

#### Homebrewでインストール.
`brew install postgresql`

#### postgresqlサーバを起動
`postgres -D /usr/local/var/postgres`

#### postgresqlサーバへのアクセス
```ruby
ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'] || 'postgres://localhost/user')
```
RubyMotion / BubbleWrap::HTTP で response.body がnilのとき


# 状況

```ruby:model.rb
uri = "http://www.colr.org/json/color/#{hex}"
BW::HTTP.get(uri) do |response|
  p response.body.to_str
end
```

というコードで、`response.body`が`nil`で`NoMethodError`になることがありました。
`response`のエラーメッセージには`The network connection was lost.`と出ていました。

# 解決策
iOS Simulatorのメニューにある`Reset Content and Settings...`を実行したら解決しました。
`Reset Content and Settings...`はMacのメニューバーのiOS Simulatorの下にあります。
Mac の電源を入れた後に灰色の画面から進まなくなった時

Mac のストレージがほぼ 0 の状態で、Mac を再起動したら、灰色の画面から先に進まなくなった。

以下の様な状態で発生した。

- ストレージが満杯です という、ダイアログが出る
- ```git gc``` をしたら no space エラーが出て、実行できない
  - この状態で、git gc すればするほど空き容量が減っていった
- About This Mac > Storage で見ると free が 0 だった

```git gc``` した後は、ストレージがかなり減ってしまい、再起動しても ```git gc``` 前の状態に戻らなかった。

そんな時は、セーフブートを行う。

[OS X：セーフブート、セーフモードとは？](http://support.apple.com/ja-jp/HT201262)

セーフブートをすると、キャッシュが削除されるため、ストレージ容量が復活する。

セーフブートした後確認したら、6G も空いた。

## セーフブートの仕方
1. 起動ボタンを押して起動
2. すぐに Shift キーを押しっぱなしにする
3. ログインダイアログが出たら、通常通りログインする
4. その後リンゴマークの下に、ローディングバーが出たらセーフブートが成功

再起動すると、通常の起動になる。
Chrome Extensionでpolymerを使う

[polymer](https://www.polymer-project.org/)をChrome Extensionで使う際のTipです。

対象者は以下です。

* Chrome Extensionを作ったことがある、または作ろうとしている
* polymerでCustom Elementを作ることができる

## Content Security Policy(CSP)による制約

https://developer.chrome.com/extensions/contentSecurityPolicy

以下のようにChrome ExtensionではCSP制約が通常のwebページよりも厳しくなっています。

* `eval`や`new Function()`は禁止
* `<script>`タグ内のjavascript、`<button onclick="...">`などのinline scriptは禁止
* Extension外部のスクリプトの読み込み禁止

`manifest.json`で`"content_security_policy"`を定義することにより制約を部分的に緩和することができますが、inline scriptを許可させることはできません。

polymerを素でコーディングするときは`<polymer-element>`内に`<script>`を設置してロジックやViewの振る舞いを記述しますが、これがこの制約に引っかかりうまく行きません。

## vulcanizeによるscriptとhtmlの分離

https://github.com/polymer/vulcanize

polymerにはvulcanizeというコンパイラがあり、これによりinline script侵害を回避できます。

```
> vulcanize --csp target.html
```

必要に応じて`-p`でRootPathを指定してやれば、html、css、jsは依存ファイルも含めて全て`vulcanize.html`と`vulcanize.js`に出力されるので、CSPセーフにロードすることが可能です。


## 所感

polymerもChromeもどちらもGoogle製なのに、vulcanizeで圧縮されたjavascriptでしかデバッグできないのは辛いです。

Extensionのdevelopモードでは`'unsafe-inline'`を許可するか、~~またはClosure Compilerにようにvulcanizeにpretty printオプション機能を追加するか~~(追記：vulcanizeはデフォルトでスクリプト自体の圧縮はしない)してもらえると嬉しいですね。
golangでsymlink判別を実施する

ファイル操作を実施するさいに、ファイルがシンボリックリンクかどうかを判断する時にBIFがないように見えました。

不便だなー、と思いつつ以下のやりとりを発見したので備忘のために残します。

どなたかBIFもしくは、もっといい方法を知っていたらご教示ください。

```go
package main

import (
    "log"
    "os"
)

func check(err error) {
    if err != nil {
        println(err)
    }
}

func main() {
    //hogehogeがシンボリックリンクとする
    path := "/var/www/html/hogehoge"
    info, err := os.Lstat(path)
    check(err)

    //以下で判定処理を実施
    if info.Mode()&os.ModeSymlink == os.ModeSymlink {
        realPath, err := os.Readlink(path)
        check(err)

        log.Printf("シンボリックリンクファイル: %v", realPath)

    } else {
        log.Printf("シンボリックリンクではないファイル: %v", path)
    }
}
```

以下は参考サイトです。

* [google groupで見つけたやりとり](https://groups.google.com/forum/#!topic/golang-nuts/jpsgja5B_Kk)
* [goのosパッケージのFileModeについて](http://golang.org/pkg/os/#FileMode)
memcached-toolメモ

# install
memcached入れたら勝手に入ってる
memcachedの中に入ってるものを人間にわかりやすく教えてくれる

# usage
```
[root@test-fuka01 ~]# memcached-tool
Usage: memcached-tool <host[:port]> [mode]

       memcached-tool 10.0.0.5:11211 display    # shows slabs
       memcached-tool 10.0.0.5:11211            # same.  (default is display)
       memcached-tool 10.0.0.5:11211 stats      # shows general stats
       memcached-tool 10.0.0.5:11211 dump       # dumps keys and values
```

ほんまこのまんまやねんけどね

dumpとか便利
key一覧をtelnetで無理してうんたらくんたらして出す必要がなくなる。

# 使ったことある系

* 対象にサクッと何item入ってるか

```
[root@test-fuka01 mcb]# ./mcb -c set -t 100 -n 100 -l 10 -a test-mem01.kakeru.com -p 11211                             
condition =>
        connect to test-mem01.kakeru.com TCP port 11211
        command = set
        100 threads run
        send 100 commands a thread, total 10000 commands
        average data length = 10
result =>
        interval =  1.074832 [sec]
        performance =  9303.779891 [commands/sec]
        thread info:
          ave. = 0.428156[sec], min = 0.146873[sec], max = 1.072446[sec]

[root@test-fuka01 mcb]# memcached-tool test-mem01.kakeru.com:11211 dump | grep Number
Dumping memcache contents
  Number of buckets: 1
  Number of items  : 1000
Dumping bucket 1 - 1000 total items
```
挿入した順序を保証するMap, Set

http://qiita.com/kurogelee/items/5f1455d2846dbb8e005c のつづき
※array-mapでは順序保証されない件が↑の主な内容

```
[org.flatland/ordered "1.5.2"]
```

を使えば挿入した順序を保証するMapやSetを作れます。

```ordered-sample.clj
(ns sample-ordered
  (:use [flatland.ordered.set :only [ordered-set]]
        [flatland.ordered.map :only [ordered-map]]))

(-> (assoc (ordered-map :a 1 :b 2) :c 3 :d 4)
    (assoc :e 5)
    (#(apply assoc % (range 20)))
    keys)

(-> (ordered-set :a :b :c 1 2)
    (conj :d :e)
    (#(apply conj % (range 20)))
    seq)
```

```:結果
(:a :b :c :d :e 0 2 4 6 8 10 12 14 16 18)

(:a :b :c 1 2 :d :e 0 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19)
```
InternetShortcut(*.url) ファイルをデフォルト・ブラウザに開かせる

※Safari 以外のブラウザについての話です。
Windows で作った InternetShortcut ファイルを Mac OS X で開く場合、デフォルト・アプリケーションが Safari の場合は問題なく開けます。
しかし、Firefox や Google Chrome をデフォルト・アプリケーションに設定すると、むなしくファイル内の URL が表示されるだけです。ドラッグ＆ドロップでは期待どおりに Web ページが表示されるというのに、おかしな話です。
毎回、ブラウザを立ち上げてからドラッグ＆ドロップというのも面倒なので、Automator で簡単なラッパー・アプリケーションを作ってしまいましょう。
##Automator でアプリケーションを作る
![Automator](http://cl.ly/image/422R3s1w2612/Automator_001.png)

1. これから作るアプリケーションをデフォルト・アプリケーションにするので、ワークフローではなくアプリケーションを選択します。
2. アクション「シェルスクリプトを実行」を選び、入力の引き渡し方法を「引数として」にします。
3. sed コマンドを使って InternetShortcut ファイルから URL を抽出するスクリプトを記述します。
4. 抽出した URL をアクション「Web ページを表示」に渡して、デフォルト・ブラウザに開かせるようにします。
5. 作ったアプリケーションを自分の好きな場所に保存します。
6. *.url ファイルを Finder で右クリックし、メニューから「このアプリケーションで開く…」→「その他…」と選び、先ほど保存したアプリケーションを選択します。
7. うまく Web ページが表示されたでしょうか？

##URL を抽出するシェルスクリプト
```
for item in "$@"
do
	/usr/bin/sed -En '/URL=/ s///p' "$item" | /usr/bin/tr -d '\r'
done
```

InternetShortcut ファイルは構造が超簡単なため、"URL=" で始まる行を探して "URL=" を消して出力しているだけです。
ひとつ厄介な点として改行コードが CR+LF になっているため、単純に URL を抽出しただけでは末尾に CR が残ってしまい、ブラウザでエラーになってしまいます。
OS X 標準の BSD 系 sed では \r を CR と解釈してくれず、Automator では ^v で ^m の直接入力もできないので、tr コマンドで削除するようにしています。
OS X のスマート引用符(怨)を止めさせる


OS X の (たぶん)Mavericks からアプリケーションの色々なところでテキストの自動置換が行われるようになりました。
特にスマート引用符には、自分の魂を込めて打ち込んだダブルクォートやシングルクォートをいとも簡単に書き換えられて、文法エラーでカウンター・アッパーカットされてはいかに体力勝負のプログラマでも身が持ちません。
しかも、Automator のアクションでは何回殺しても次に開いたウィンドウでは復活するという、天下無双の強敵です。
ちまたでもさまざまな方がこの問題に取り組んでおられるようですが、スマート引用符の機能自体を完全に殺すことはできていないようです。
[Mac のダブルクォーテーションが勝手に変換される問題の対処法 - 強火で進め](http://d.hatena.ne.jp/nakamura001/20140506/1399363317)
[コーディング時に厄介なMavericksのテキスト自動置換まとめ - 豆腐メンタルは崩れない](http://wbtmiu.hatenablog.com/entry/2014/07/04/223456)

## 柔よく剛を制する

私も積年の恨みが積もるこの難敵をどうにかねじ伏せようと努力してきましたが、圧倒的な実力差の前になすすべもなく打ちのめされる日々でした。
しかし、勝利の糸口は意外なところにあったのです。

![システム環境設定 - キーボード](https://s3.amazonaws.com/f.cl.ly/items/0G223k0X1f3W2g0Y1o2w/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A_001.png)
「このメニューの最下段の項目って、よく見たら……ちっともスマート(怨)じゃないよね？」

なんと、彼は滅ぼされるべき敵ではなく、我々には共存という道があったのです。(感涙)
![Automator](https://s3.amazonaws.com/f.cl.ly/items/0Q1Q3E3Z2f40142X2x3N/Automator_002.png)
しかし、ふつーあんなの見分けがつかないだろう。昔の Mac OS のこだわり方なら、項目名「変換しない」とかになってるはずだろう、常考……