OmniAICreator/Qiita-1.07M huggingface dataset:
Qiita APIのNode.jsクライアントで記事一覧を取得してみる。



前回の続きです。http://qiita.com/n0bisuke/items/4587f42dce3218960730

記事一覧を取得してみます。

`list_user_items()`というメソッドを使ってみます。

list_user_items(ユーザー名,オプション)という使い方みたいです。ユーザー名指定だけでも使えます。

##とりあえず使ってみる

```qiita.js
// require in commonjs env
var Qiita = require('qiita-js');

// set your token
Qiita.setToken('your access token');

// fetch resources!
Qiita.Resources.Item.list_user_items('n0bisuke').then(function(item){
	console.log(item);
});
```

実行してみる

```
$ node qiita.js

{ rendered_body: '<p><a href="/mizchi" class="user-mention" title="mizchi">@mizchi</a>さんの記事を元に触ってみました。</p>\n\n<p><a href="http://blog.qiita.com/post/104032109599/qiita-api-v2-js-client">http://blog.qiita.com/post/104032109599/qiita-api-v2-js-client</a></p>\n\n<h2>\n<span id="アクセストークンの取得" class="fragment"></span><a href="#%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E5%8F%96%E5%BE%97"><i class="fa fa-link"></i></a>アクセストークンの取得</h2>\n\n<p><a href="https://qiita.com/settings/applications">ここから</a>取得します。</p>\n\n<p>個人用アクセストークン　＞　新しいトークンを発行する<br>\n<img src="http://i.gyazo.com/f9c39e0110dd64a9c923f57c4272b298.png" alt=""></p>\n\n<p>とりあえず色々試したいのでスコープは全てチェックしました。<br>\n<img src="http://i.gyazo.com/dce4c415282a4d80d74fcaf116dc1942.png" alt=""></p>\n\n<p><strong>発行される文字列をコピーしておきます。二度と表示されないので注意しましょう。</strong></p>\n\n<h2>\n<span id="インストール" class="fragment"></span><a href="#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB"><i class="fa fa-link"></i></a>インストール</h2>\n\n<div class="code-frame" data-lang="text"><div class="highlight"><pre>$ npm i qiita-js\n</pre></div></div>\n\n<blockquote>\n<p>関係ないけ
・
・
・
```

色々とデータ取れますね。

##件数の指定

投稿の件数を指定して取得してみます。
[ここら辺](http://qiita.com/api/v2/docs#投稿)をみるとオプションにpageやper_pageがあるのが分かります。このあたりのパラメータで操作するみたいですね。

↑のように指定無しだとデフォルトで最新20件を取得するみたいです。

per_pageは1ページに含まれる件数を指定できます。最大で100件みたいです。

```qiita.js
// require in commonjs env
var Qiita = require('qiita-js');

// set your token
Qiita.setToken('your access token');

// fetch resources!
Qiita.Resources.Item.list_user_items('n0bisuke',{per_page:100}).then(function(item){
    item.forEach(function(contents){
        console.log(contents.title, contents.created_at);
    });
});
```

###今月の投稿数

Queryのパラメータ使えばうまく取得できるのかな。。。これだと一ヶ月に100件以上投稿してた場合は厳しいですね。

```qiita.js
/*
*省略
*/

var count = 1;
Qiita.Resources.Item.list_user_items('n0bisuke',{per_page:100}).then(function(item){
    item.forEach(function(contents){
        var date = contents.created_at.split('-');
        if(date[1] === '12') {
            console.log(contents.title, contents.created_at);
            console.log(count++);
        }
    });
});
```


```
$ node qiita.js
Qiita APIをNode.jsから触ってみる 2014-12-31T14:42:50+09:00
1
pm2で管理しているNode.jsプロセスを、Node.jsからpm2を起動して管理する。 2014-12-23T18:36:06+09:00
2
CoffeeScriptでNode.js+Expressを今更ながら始めて見た。 2014-12-23T16:05:42+09:00
・
・
・
26
StreamingAPIで取得したツイートをGoogleSpreadSheetにリアルタイムに書き込んでみました。 2014-12-01T23:18:43+09:00
27
Milkcocoa iOSテスト版を使ってiOSとWebサイトを連動させてみるミニマム構成〜IoTっぽいことをする入門 2014-12-01T01:02:41+09:00
28
```

なるほど今月は今の所28件ですね。もう少し書こう
1枚の画像からAndroidアプリ提出に必要なサイズを自動生成！with ImageMagick（シェル使いかた説明アリ）

※Masanori Fukuiさんの記事の応用です。
　iOSのアイコンは、Fukuiさんのシェルで無事作りました。ありがとうございます。
<a href="http://qiita.com/Masaminr/items/62a37b7886215e7f8b55" target="_blank">iOSアプリ提出に必要なアイコン作成に使える「ImageMagickを用いたシェルスクリプト」</a>
↑先にこちらをお読みになって、ImageMagickインストールまでは行なっておいてください。

　さて。私の作成している"ICF inputter"なのですが…
　
　<a href="https://itunes.apple.com/jp/app/icf-inputter-free/id952433628?mt=8">iOS版</a>だけでなく、<a href="https://play.google.com/store/apps/details?id=com.kaorys.icfinputter.icfinputter" target="_blank">Android版</a>も存在しているのです…。
　Androidも、「無償にしました！」アピールをしたいので"free"という文字が入ったアイコンに張り替えたいというのもあります。
　Android版のアイコンはiOS版とサイズが違うので、Fukuiさんの記事のshellの数値を変えてやってみたいと思い…<a href ="http://blog.livedoor.jp/elss/archives/23375717.html">
androidアプリ開発備忘録さんの記事</a>を参考に、サイズを調べました。ありがとうございます。
　ちなみに、私は情けないことにシェルの使いかたがわからず往生したので、そちらについても解説を書いておきます…スミマセン初心者で。。。

#（１）元の画像を用意する
　Fukuiさんのところで、960x960.jpgという画像を作って臨んだのでそれを使います。

#（２）シェルの作成
<div class="code-frame" data-lang="she'll">
<div class="code-lang"><span class="bold">AndroidIconMaker.sh</span></div>
<div class="highlight"><pre>#!/bin/sh
convert -geometry 36x36! 960x960.jpg 36x36.png
convert -geometry 48x48! 960x960.jpg 48x48.png
convert -geometry 72x72! 960x960.jpg 72x72.png
convert -geometry 96x96! 960x960.jpg 96x96.png
convert -geometry 144x144! 960x960.jpg 144x144.png
convert -geometry 512x512! 960x960.jpg 512x512.png
</pre></div>
</div>
↑の文章をテキストエディタなどで保存
512x512は、Google Playに掲載するときに必須のサイズなのでこれも自動生成させることに。![store.jpg](https://qiita-image-store.s3.amazonaws.com/0/58253/c5254d10-f633-9c43-311f-efd73cd954e1.jpeg)

 　保存はこんな感じで。
![shell.jpg](https://qiita-image-store.s3.amazonaws.com/0/58253/d3dd2f70-beb3-8543-2af5-1e28f359be90.jpeg)

![hozon.jpg](https://qiita-image-store.s3.amazonaws.com/0/58253/fd390455-128d-3460-330f-4e06c81f8bc9.jpeg)

　デスクトップに960x960.jpgと一緒に置いておきます。あとでシェルを動かすとき、同じディレクトリにないと動かないので。。。

#（３）（Macの方へ）ターミナルからシェルを動かす
　初心者の私は、ここで苦労しました。どうやって使うのか全然わからなかったので。。。なので書いておきます。後の自分のためにも…。
　ターミナルをたちあげて
![NYE2013_—_bash_—_80×24.jpg](https://qiita-image-store.s3.amazonaws.com/0/58253/c832c604-21c5-a0b0-b42f-f684d19db9a5.jpeg)
　デスクトップに移動
　cd Desktop
 ↑＄の後ろに、このままコピペしてreturnを押してください。　
![Desktop_—_bash_—_80×24.jpg](https://qiita-image-store.s3.amazonaws.com/0/58253/1aeb2ed0-03eb-2bbf-cc8e-17b94161c1ab.jpeg)
そうするとデスクトップの上のファイルをいじることができるようになるので
![Desktop_—_bash_—_80×241.jpg](https://qiita-image-store.s3.amazonaws.com/0/58253/1c283ab8-5016-167e-8a6a-b8556173b14b.jpeg)
sh ./AndroidIconMaker.sh
 ↑＄の後ろに、このままコピペしてください。
手打ちする方は、最初のshの後に半角スペースとピリオドがあるので注意！
※こんなことすらわからなかったのです…初心者ですみません…。
画像が自動生成されていきます。しばらく時間がかかるのでご注意を。

![asyouloke.jpg](https://qiita-image-store.s3.amazonaws.com/0/58253/3c90d6d2-7286-8930-24e2-8ff8ce307ffb.jpeg)

こんな感じでできるので、後はご活用ください！
【既存知識を】Androidの復習します！ - sharedPreferences編 - 【自分なりに纏める④】


# 概略

相も変わらず初心者エンジニア続けています。
そんな私が一月Android開発に挑んだので
そのときの知識を備忘録と言うか、
まぁなんかそんな感じです。

四回目はとりあえず知っておくと便利な
sharedPreferencesについて書いておこうと思います。

#超簡単に作るsharedPreferences！

##sharedPreferences？？

sharedPreferencesて何よってのを三行で説明すると

アプリケーション内で保持して
アプリが閉じられた後もデータを保存しておくことの出来る
ローカルにデータを保存しておく便利な仕組み。

です。詳しくはググればすぐですよ！

## 完成図

はいこれで完成です☆

```
public class sharedPreferencesClass {

    private Context mContext;
    private SharedPreferences pref;
    public sharedPreferencesClass(Context context) {
        mContext = context;
        pref = mContext.getSharedPreferences("user_data", Context.MODE_PRIVATE);
    }

    public void setLoginFlag(boolean loginFlag){
        // プリファレンスに書き込むためのEditorオブジェクト取得
        SharedPreferences.Editor editor = pref.edit();
        editor.putBoolean("login_flag", loginFlag);
        editor.commit();
    }

    public boolean getLoginFlag(){
        //デフォルトでログインしていないがリターンされる。
        return pref.getBoolean("login_flag", false);
    }
}
```

これはログインしているかどうかの状態を
アプリ内で保存するためのsharedPreferencesClassです。

>pref = mContext.getSharedPreferences("user_data", Context.MODE_PRIVATE);

これが基本的にsharedPreferencesに当たる部分です。

- user_data というファイルに保存する
- MODE_PRIVATEでこのアプリだけが使用できる

ということにしております。

あとはセッターゲッターで「user_data」というファイルにアクセスして書き込み読み込みを行っています。

簡単ですね。
Qiita APIをNode.jsから触ってみる



@mizchiさんの記事を元に触ってみました。

http://blog.qiita.com/post/104032109599/qiita-api-v2-js-client

##アクセストークンの取得

[ここから](https://qiita.com/settings/applications)取得します。

個人用アクセストークン　＞　新しいトークンを発行する
![](http://i.gyazo.com/f9c39e0110dd64a9c923f57c4272b298.png)

とりあえず色々試したいのでスコープは全てチェックしました。
![](http://i.gyazo.com/dce4c415282a4d80d74fcaf116dc1942.png)

**発行される文字列をコピーしておきます。二度と表示されないので注意しましょう。**

##インストール

```
$ npm i qiita-js
```

>関係ないけど
>[【エラー】Refusing to install as a dependency of itself](http://qiita.com/kaznmb/items/047c1560edda683a63f4)にひっかかりました汗

##サンプルコードを書いてみる

```index.js
// require in commonjs env
var Qiita = require('qiita-js');

// set your token
Qiita.setToken('<your token>');

// fetch resources!
Qiita.Resources.User.get_user('n0bisuke').then(function(user){
    console.log(user);
});
```

実行してみる。

```
$ node index.js

{ description: '@のびすけです。\r\n\r\nhttp://liginc.co.jp/author/nobisuke\r\nhttps://www.wantedly.com/users/49472\r\nhttp://offsidenow.phpapps.jp/',
  facebook_id: 'sugawara.ryousuke',
  followers_count: 69,
  followees_count: 23,
  github_login_name: 'n0bisuke',
  id: 'n0bisuke',
  items_count: 103,
  linkedin_id: '',
  location: '岩手 <-> 上野',
  name: 'Sugawara Ryousuke',
  organization: 'http://liginc.co.jp',
  profile_image_url: 'https://gravatar.com/avatar/dae1d4cc4599a65a5da6e1a1f9d96f05?d=https%3A%2F%2Fidenticons.github.com%2F9a034197db94d3fa733e5079c6eb313a.png&r=x',
  twitter_screen_name: 'n0bisuke',
  website_url: 'http://liginc.co.jp/member/member_detail?user=nobisuke' }
```

指定したユーザーの情報を取得できました。


思った以上に簡単ですね！


もっと色々と試してみたいので[APIドキュメント](http://qiita.com/api/v2/docs)や[Qiita-jsのソースコード](https://github.com/increments/qiita-js)を眺めてみたいと思います。
PowershellでGitコメンドのエイリアス

- 以前はMacでzshを使っていたがWin機に変えてしまった
- oh my zshのエイリアスや自分で書いたエイリアスに慣れてしまった
- PowerShellでも同意のエイリアスを書こうと思った時にハマったので自分用にメモ

# エイリアスは出来るけど、スペースが入るときって？
- まず $PROFILEでパスが通っているファイルを開く
- `set-alias g git`と同じように`set-alias ga git add`と設定してみる
- `git`と`add`の間にスペースが入っているためエラーになってしまう

## 解決策
### functionにしてしまう
- `function ga(){ git add $args }`という感じ
- `-u`や`-A`のオプションも問題ない

# gc(git commit)が出来ない？

- 順調にGitコマンドをエイリアス化していったが`gc`と打つとPowerShellのビルトインのgc(GetContent)が上書きされ、`git commit`が出来ない！
- `git add`ならまだしもエイリアスになれてしまった体では`git commit`はあまりにも長過ぎる


## 解決策
### ビルトインのエイリアスを消す
- 実に単純だ、消してしまう
- `remove-item alias:gc -force`という感じ

蓋を開ければ簡単なことだったがはまってしまった(;_;)
Androidの自動テストのレポートがどんな感じか

## はじめに

[前回](http://qiita.com/cattaka/items/f929ed002670c5c726e3)のAndroidでJUnitがどんな感じで動くのかに続き、今回はコードカバレッジがどのようなレポートが作成されるのかをご紹介します。

## サンプルアプリ

前回と同じく、使用しているアプリは次のURLで公開しています。

- https://github.com/cattaka/FastCheckList

ソースコードの取得には次の様にgitコマンドを使用して取得してください。

```bash
$ git clone https://github.com/cattaka/FastCheckList.git
```

## レポートの作成方法

[前回](http://qiita.com/cattaka/items/f929ed002670c5c726e3)に紹介した、自動テストの実行を行なうと一緒に作成されます。
コンソールから実行するときはプロジェクトのルートディレクトリで次のコマンドを実行します。

```bash
$ ./gradlew connectedAndroidTest
```

このコマンドを実行するとAPKの作成とテストの実行までを一挙に行なってくれます。ただし、実機を接続していなかったり、エミュレーターを起動していない場合は"No connected devices!"というエラーがでますのでご注意ください。

なお、build.gralde内でBuild Flavorを指定している場合は若干コマンドが変わりますので、その場合は

```bash
$ ./gradlew tasks
```

でコマンドを確認するようにしてください。


## レポートの出力先

作成されたレポートは"app/build/outputs/reports/androidTests/connected"以下にhtml形式で作成されます。作成されたhtmlファイルを開くと、成功したテストの数や失敗したテストの数のサマリーが表示されます。リンクをクリックしていくとそれぞれ詳細が表示されます。

![image](https://qiita-image-store.s3.amazonaws.com/0/55138/fae7df73-4df2-a8c2-0b60-2213ad66b975.png)


## レポートのサンプル

[サンプルアプリのテストレポートはこちら](http://www.cattaka.net/wercker/fastchecklist/outputs/reports/androidTests/connected/)


## おわりに

簡単にですがAndroid SDKが標準で出力する自動テストのレポートを紹介しました。雰囲気は伝わりましたでしょうか。

次回は自動テストからコードカバレッジを測定し、そのレポートがどのように見えるのかをご紹介します。
Custom tableViewCellの作り方

#目的:
　CustomでtableViewCellをStoryboardと協調して作成する際の自分なりの方法を説明する
#環境:
　Xcode Version 6.1.1
#実装方針:
　Debugのしやすさや見た目でのバランスを確認しながら実装したいので、私はStoryboardを使用しています。tableViewCellを配置してそこに以下のもののをのっけってTagナンバー付けています。

| Tag Number | UI          | 目的          |
|:----------:|:-----------:|:------------:|
| 1          |   imageView | itemのimage表示
| 2          |   textLabel | itemの名前表示 |
| 3          |    textView | itemの詳細説明用|

tableViewのDelegate内では以下のようにcellを渡すとします。

```sample.swift
func tableView(
	tableView: UITableView, 
	cellForRowAtIndexPath 
	indexPath: NSIndexPath) -> UITableViewCell {

	var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell
	let shop = self.shops[indexPath.row]
	ShopTableViewCell(cell: cell, cellDataSource: shop)
        
	return cell
}
```

事前にcellに表示したい情報等をshops配列に準備しています。それをcellDataSourceとして
自作したShopTableViewCellに渡しています。そのあとはShopTableViewCellないで表示等の処理をしています。

#ソースコードと詳細説明
　具体的にShopTableViewCellの中身を示します。

```ShopTableViewCell.swift
import UIKit


class ShopTableViewCell: UITableViewCell {
    // --- Properties ---
    // MARK: Properties
    private var cell:UITableViewCell!
    private var shop:Shop!
    
    // --- Initializer ---
    // MARK: Initializer
    override init() {
        super.init()
    }
    init(cell name:UITableViewCell, cellDataSource:Shop){
        super.init()
        self.cell = name
        self.shop = cellDataSource
        self.setupTableCell()
    }
	// required initializer
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }
    
    // --- methods ---
    // MARK: methods
    private func setupTableCell(){
        var image = self.cell.viewWithTag(1) as UIImageView
        var shopname = self.cell.viewWithTag(2) as UILabel
        var comment = self.cell.viewWithTag(3) as UITextView
        
        // --- setup shopname
        shopname.text = self.shop.name
        
        // --- setup cell imageView
        var q_global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
        var q_main = dispatch_get_main_queue()
        
        dispatch_async(q_global, { () -> Void in
            let url = self.shop.imageURLs[0]
            let data = NSData(contentsOfURL: NSURL(string: url)!)
            let imageData = UIImage(data: data!)
            
            dispatch_async(q_main, { () -> Void in
                image.contentMode = UIViewContentMode.ScaleAspectFit
                image.image = imageData!
            })
        })
    }
}
```
swiftから導入されたinitで、propertyの初期化だけでなくcellのsetupまでを実施しています。cellのsetupは別途setupTableCell()を定義しています。setupTableCell()内では事前につけていたtagを識別子として変数を作っています。
>self.cell.viewWithTag(1) as UIImageView

のあたりです。
あと今回使用した特徴はinit内でMethodを呼ぶようにしたポイントです。objectが生成された時点ですべてのsetupが終了します。
とってもイケてるWebテンプレート Rubix with ReactJS


React.jsのサンプルを探していたら、とってもクールなテンプレートを発見したのでご紹介します。すごくイケてるのでワクワクしますね笑

[Rubix](http://wrapbootstrap.com/preview/WB09498FH)はダッシュボードや、メール、チャート、タイムラインなどてんこ盛りのテンプレートで、最近のWebで見るいろいろなデザインがたくさんあります。

有料（$20）です。

[LivePreviewはこちら](http://rubix.sketchpixy.com/ltr/#/app/docs/rubix/rubix-jsx)から見られます。


一部機能をご紹介します。他にもたくさんコンポーネントがあるので、是非[LivePreview](http://rubix.sketchpixy.com/ltr/#/app/docs/rubix/rubix-jsx)でご覧ください。

# ダッシュボード

![Rubix_WebApp____Admin_Template.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/ad0f5a8d-86c2-03e0-2f05-fb6811b90916.jpeg "Rubix_WebApp____Admin_Template.jpg")


# メール

## Inbox


![Rubix_WebApp____Admin_Template.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/96dcd8c2-a2aa-ac81-30de-2f9ba7041b34.jpeg "Rubix_WebApp____Admin_Template.jpg")

## Mail


![Rubix_WebApp____Admin_Template.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/e3716b36-7f9f-6ff5-3e0f-9c4d39d62814.jpeg "Rubix_WebApp____Admin_Template.jpg")


# ギャラリー

![Rubix_WebApp____Admin_Template.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/ae3393f0-f28a-a0fb-6b86-c78c60e7553e.jpeg "Rubix_WebApp____Admin_Template.jpg")

# ソーシャル 

![Rubix_WebApp____Admin_Template.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/2f37b41c-8b42-2348-75b4-d358b4c78920.jpeg "Rubix_WebApp____Admin_Template.jpg")

# ブログ

![Rubix_WebApp____Admin_Template.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/81c437e9-0586-4aef-97bb-66bdc7369875.jpeg "Rubix_WebApp____Admin_Template.jpg")


# タイムライン

![Rubix_WebApp____Admin_Template.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/ba08d3b6-7f5e-91c4-3e7b-c5fe5fa99069.jpeg "Rubix_WebApp____Admin_Template.jpg")
【ご質問】絞り込み検索において範囲を持つ条件について件数を出したい（angular.js）

angular.jsでAmazonにあるような絞り込み検索を実装しています。

# 実装仕様
- サンプルURL: http://www.openvista.jp/testcase/20141231/
  - お芋を扱うECサイトの想定
  - 商品を各種条件（価格、重量、有機栽培可否）から絞り込める
  - 条件の中には「価格：1000円-1999円」のような範囲を持つ条件があり、この絞り込みはコントローラ内のメソッドで処理している

# ご質問
1. 価格や重量について、該当件数を（カッコ内に）表示したいがどうすればよいのかわからない
2. 該当件数の表示が不自然なのでなんとかしたい。例えば「非有機栽培」農家は初期状態（＝無チェック）では2件だが、「有機栽培」農家条件をチェックすると、0件になる。本来はこの条件だと何件になるか出したいので2件であってほしい。
    - 言い換えると、「有機栽培」農家条件にチェックしたとしても、「非有機栽培」農家の件数はそのことを加味しないほうがよい・・がどうすればよいのか？
3. そもそもこの要件を実装するのに、この実装方法が妥当なのか自身が持てていないので、よく利用される方はコメントいただけると助かります

# コード
- [html](http://www.openvista.jp/testcase/20141231/viewsource.php?type=html)
- [javascript](http://www.openvista.jp/testcase/20141231/viewsource.php?type=js)
CentOS 6をインストールして最初にしたことまとめ

## 環境
- CentOS 6.6(64bit)
- さくらのVPSの標準のやつ


## sshd設定

### ポート変更

/etc/ssh/sshd_config

```
#Port 22
↓
Port 22222
```
sshd再起動

```
# service sshd restart
```

### rootでのログインを禁止

/etc/ssh/sshd_config

```
#PermitRootLogin yes
↓
PermitRootLogin no
```

sshd再起動

```
# service sshd restart
```

### GSSAPI認証を無効

/etc/ssh/sshd_config

```
#GSSAPIAuthentication no
GSSAPIAuthentication yes
↓
GSSAPIAuthentication no
#GSSAPIAuthentication yes
```

sshd再起動

```
# service sshd restart
```

SSHでのログインが遅いことへの対処だが、GSSSAPI自体は何なのか調べてもいまいちよくわからない。必要なさそうではあるが。




## アカウントまわり

### 一般アカウント作成してroot権限付与

```
# useradd hogeuser
# passwd hogeuser
(パスワード入力)

# visudo
```

以下を入力

```
hogeuser   ALL=(ALL)       ALL
```


### 一般アカウントの`.bash_profile`に以下を追記

この辺は趣味の問題かもしれない。。

```
export LANG="en_US.UTF-8"    # 文字コードをen_US.UTF-8にする
HISTSIZE=10000               # ヒストリーの保存を10000にする
```




## ACL

### hosts.allow, hosts.deny

/etc/hosts.allow に以下を記載

```
sshd : .foo.hogehoge.com .bar.hogehoge.com
```

アクセス元が可変IPなので、ある程度の範囲でプロバイダのホスト名を記載した(２つ)。`sshd`のポート変更と合わせることで個人的にはセキュリティ面は大丈夫かなと考えているが、心配な人はお勧めしない。

/etc/hosts.deny に以下を記載

```
sshd : ALL
```


## ネットワークまわり

### IPv6無効

```
# sysctl -w net.ipv6.conf.all.disable_ipv6=1
# sysctl -w net.ipv6.conf.default.disable_ipv6=1
```

/etc/sysctl.conf に以下を記載

```
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
```

[CentOS公式](http://wiki.centos.org/FAQ/CentOS6#head-d47139912868bcb9d754441ecb6a8a10d41781df)にてIPv6無効の方法が書いてあった

あと`ip6tables`をoffる

```
# chkconfig ip6tables off
```

IPv6使わないので`hosts`を以下のように変更

/etc/hosts

```
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
↓
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
```





## アプリケーション

### cron

```
# yum -y install crontabs
```
`cron`入ってないとは。



## その他
随時更新予定
Atmel AVR ATmega88 系 MCU の比較

　Atmel AVR の仕様がすぐにわからなくなってしまうので，Atmel のサイトやデータシートからめぼしい情報を抽出。

<table>
<tr>
  <th colspan="2" rowspan="2">MCU</th>
  <th colspan="2"><a href="http://www.atmel.com/devices/ATMEGA88.aspx">mega88</a></th>
  <th rowspan="2"><a href="http://www.atmel.com/devices/ATMEGA88A.aspx">mega88A</a></th>
  <th colspan="2"><a href="http://www.atmel.com/devices/ATMEGA88P.aspx">mega88P</a></th>
  <th rowspan="2"><a href="http://www.atmel.com/devices/ATMEGA88PA.aspx">mega88PA</a></th>
</tr>
<tr>
  <th>mega88</th><th>mega88V</th><th>mega88P</th><th>mega88PV</th>
</tr>
<tr><td colspan="2">Flash (kB)</td><td colspan="6" style="text-align:center">8</td></tr>
<tr><td colspan="2">SRAM (kB)</td><td colspan="6" style="text-align:center">1</td></tr>
<tr><td colspan="2">EEPROM (bytes)</td><td colspan="6" style="text-align:center">512</td></tr>
<tr><td colspan="2">Max I/O Pins</td><td colspan="6" style="text-align:center">23</td></tr>
<tr>
  <td colspan="2">Operation Voltage (Vcc)</td>
  <td colspan="1" style="text-align:center">2.7 to 5.5</td>
  <td colspan="2" style="text-align:center">1.8 to 5.5</td>
  <td colspan="1" style="text-align:center">2.7 to 5.5</td>
  <td colspan="2" style="text-align:center">1.8 to 5.5</td>
</tr>
<tr>
  <td rowspan="3">Max Operating<br>Freq. (MHz)</td>
  <td>@ 4.5 - 5.5 Vcc</td>
    <td style="text-align:center">20</td>
    <td style="text-align:center">10</td>
    <td style="text-align:center">20</td>
    <td style="text-align:center">20</td>
    <td style="text-align:center">10</td>
    <td style="text-align:center">20</td>
</tr>
<tr>
  <td>@ 2.7 - 5.5 Vcc</td>
    <td style="text-align:center" colspan="6">10</td>
</tr>
<tr>
  <td>@ 1.8 - 5.5 Vcc</td>
    <td style="text-align:center">-</td>
    <td style="text-align:center">4</td>
    <td style="text-align:center">4</td>
    <td style="text-align:center">-</td>
    <td style="text-align:center">4</td>
    <td style="text-align:center">4</td>
</tr>
<tr><td colspan="2">picoPower</td><td colspan="3" style="text-align:center">No</td><td colspan="3" style="text-align:center">Yes</td></tr>
<tr><td colspan="2">Temp. Sensor</td><td colspan="2" style="text-align:center">No</td><td colspan="4" style="text-align:center">Yes</td></tr>
<tr><td colspan="2">Temp. Range (deg C)</td><td colspan="5" style="text-align:center">-40 to 85</td><td style="text-align:center">-40 to 85<br>-40 to 105</td></tr>
</table>

※ぶっちゃけ 88PA を選んでおけば間違いない。 ただし，最終的にはデータシート要確認です。
`rails new`した時にProcfileを作成する


作成したばかりのRailsアプリケーションをherokuにpushすると

```
###### WARNING:
remote:        No Procfile detected, using the default web server (webrick)
remote:        https://devcenter.heroku.com/articles/ruby-default-web-server
```

と出ていて`Procfile`がないと警告がでてしまう。

なんとなく警告が出ていると嫌だし、毎回作成するのも面倒なので`rails new`した時に`Procfile`を自動生成することにした。

これはRails Application Templateを利用すると目的が達成できます。

まずは`~/.rails_app_template.rb` を作成する。ファイル名は本当はなんでも良い。中身は以下のようにする。

```ruby
create_file 'Procfile', 'web: bundle exec rails server -p $PORT'
```

あとはプロジェクトを作成する際には以下のコマンドを実行する。

```コマンド
rails new -m ~/.rails_app_template.rb プロジェクト名
```

`-m`を指定するのがめんどくさい場合は`~/.railsrc`ファイルを記述しておくとよい。こちらのファイル名は`.railsrc`にしないといけない。

```~/.railsrc
rails new -m ~/.rails_app_template.rb プロジェクト名
```

この`.railsrc`を無効にしたい場合は

```コマンド
rails new --no-rc プロジェクト名
```

とすればよい。


# もっと詳しく

より詳細は下記の記事を参考にすると良いです。

* [RailsのApplication templateを使って開発の初速をあげよう！ - Qiita](http://qiita.com/tachiba/items/26b2e9dc271bd8e6907d)

Application TemplateやGeneratorでファイルを作るには`Thor::Actions#create_file`メソッドが利用できます。

https://github.com/erikhuda/thor/blob/v0.19.1/lib/thor/actions/create_file.rb#L5-L27

[Thor](https://github.com/erikhuda/thor)はコマンドラインツールを作成支援ライブラリで、Rails GeneratorやRails ApplicationはThorを拡張して作成されています。

`create_file`のような命令の一覧は下記に記載されています。

* [Creating and Customizing Rails Generators & Templates — Ruby on Rails Guides](http://guides.rubyonrails.org/generators.html#application-templates)
* http://rdoc.info/github/wycats/thor/master/Thor/Actions


# 参考文献

* [Process Types and the Procfile | Heroku Dev Center](https://devcenter.heroku.com/articles/procfile#process-types-as-templates)
vim-refを使う


###1. vim-refとは
vimで辞書をみるプラグイン

###2.準備
####1. テキストブラウザ
テキストブラウザの種類はいろいろあるけど、今回は`lynx`をインストール。

```
$ brew install lynx
```

設定はファイルを変更。

```lynx.cfg
#CHARACTER_SET:iso-8859-1
　　　　↓ 変更
CHARACTER_SET:utf-8

#PREFERRED_LANGUAGE:en
　　　　↓ 変更
PREFERRED_LANGUAGE:ja
```

####2. マニュアル
とりあえずRubyとPHPのマニュアルを入れてみる。

__Ruby__

```
$ gem install refe2 #refeをインストール
$ bitclust setup #refeのセットアップ
```

`.vimrc`に以下を追記。

```.vimrc
let g:ref_refe_cmd = $HOME.'/.rbenv/shims/refe' "refeコマンドのパス
```

__PHP__

[PHP: Download documentation](http://jp.php.net/download-docs.php 'PHP')のMany HTML filesを任意のディレクトリにDL。

`.vimrc`に以下を追記。

```.vimrc
let g:ref_phpmanual_path = $HOME . '/.vim/ref/php-chunked-xhtml' "マニュアルをDLしたディレクトリを指定
```

###3. vim-refのインストール

`.vimrc`に以下を追記して、`:NeoBundleInstall`

```.vimrc
NeoBundle 'thinca/vim-ref'
```

###4. 使い方

`:Ref refe puts`とか`:Ref phpmanual echo`とかやるとvimからRubyやPHPのマニュアルが見られるようになる。
または、`Shift-k`で、カーソル上の単語を検索できる。


## 参照
* [vim-refを導入する [2012年版] ](www.karakaram.com/20120726-vim-ref 'karakaram-blog')
* [ref.vimでRubyのリファレンスを見る](http://chulip.org/entry/20110814/1313331345 'chulip.org')
IAM Policyの表記を綺麗にする

2014年ももうすぐ終わりですが、いかがお過ごしでしょうか？年末になると家や開発環境・PCなどの大掃除をする方も多いと思います。
そんな中、IAM Policyに関する機能追加がありましたので簡単にご紹介します。IAM Policyの表記を文法準拠に記述する手助けをするツールです。IAM PolicyはAWSリソースなどへのアクセス権限を柔軟に適用でき、活用することでAWSの各リソースへのアクセスを安全に行えるように出来ます。
しかし、記法が若干複雑で幾つかの書き方が出来るのですが、今回リリースされた機能を使ってIAM Policyの記述を文法準拠にしましょう。(**どういう変更を自分が行っているかはちゃんと理解しておきましょう**)

# IAM Policyを文法準拠に
[This release of AWS Identity and Access Management (IAM) provides a tool in the IAM console to identify policies that do not comply with the IAM policy grammar and helps you to edit these policies.](http://aws.amazon.com/releasenotes/9265590286309055)というリリースが本日ありました。こちらは何かと言うと、今までIAM Policyの記述は複数の書き方が出来ました、しかしリファレンスとなる記述文法は[AWS IAM Policy Reference](http://docs.aws.amazon.com/IAM/latest/UserGuide/policy-reference.html)にまとめられていました。
今回のリリースでは、既にIAM Policyとして登録されている記述がこちらのリファレンスに準拠していない場合は警告が表示され、修正するためのエディタが登場しました。
ドキュメントは[こちら](http://docs.aws.amazon.com/IAM/latest/UserGuide/policies-policy-validator.html)です。

## なぜこのようなツールが？
リリース文章にも以下のように書かれている通り

```
Starting in March 2015, you cannot save any new or updated policies that do not comply with the policy grammar. Although existing policies with these errors continue to function as they did, you cannot edit and save them without fixing any errors in the syntax.
```
**2015年3月からグラマーポリシーに準拠していない記述は保存・編集ができなくなるということです。既に保存されているポリシーに関しては動作は継続しますが、編集・保存が文法の修正を行うまで出来なくなる**ため、このようなツールが出たということです。今までもポリシーの文法チェックはありましたが、厳格化したという感じですね。

よくある間違いは[Back to School: Understanding the IAM Policy Grammar](http://blogs.aws.amazon.com/security/post/Tx1LYOT2FQML4UG/Back-to-School-Understanding-the-IAM-Policy-Grammar)で確認出来ます。

## 使ってみる
もし、既に文法準拠では無いIAM Policyが存在する場合は、Managemenet ConsoleのIAMのページTOPに上方に以下の様な警告文が表示されます。
![iam_mc_top](https://qiita-image-store.s3.amazonaws.com/0/4769/66f9666f-9c45-8cea-2458-6083682b2298.png)

こちらの`Fix Syntax`をクリックすると以下の様な画面が表示されます
![iam_edit_top](https://qiita-image-store.s3.amazonaws.com/0/4769/45595e80-e4fd-7781-46d3-af709382f245.png)
こちらの画面には現在記述ポリシーにそぐわないポリシーがこちらの一覧に表示されます。
この画面から編集をしたいポリシーを選択して編集画面を表示します。

![iam_edit](https://qiita-image-store.s3.amazonaws.com/0/4769/613ed14c-3e20-e55f-134b-954f54b09221.png)
この画面では、上段がおすすめ記述、下段が現在の記述です。今回の例では`Resource`の箇所が配列表記になっていない点を指摘されています。おすすめ記述で問題無い場合は`Apply Changes`をクリックします。もし、任意の状態に編集したい場合は上段を編集して`Validate`をクリックします。問題なければ`Apply Changes`がクリックできますが、まだ問題がある場合はクリック出来ないので、更に修正を行います。

# まとめ
簡単にIAM Policyのバリデーションまわりの新機能をまとめました。
地味なアップデートですが、記述を統一出来るため見通しが良くなるかと思います。是非活用して、綺麗にして、2015年3月のIAM Policyの記述厳格化に備えましょう！

Security Blogは[Coming March 2015: Upgrades to IAM Policy Validation](http://blogs.aws.amazon.com/security/post/Tx2718VHAGDHG09/Coming-March-2015-Upgrades-to-IAM-Policy-Validation)です。

こちらは個人の意見で会社とは関係ありません。お約束です。
ruboty-calendar作った

最近会社でruboty使い始めました。
当然plugin作りたくなるわけで、とりあえず練習がてらカレンダーを表示するだけのplugin作ってみました。

## ruboty-calendar

[https://rubygems.org/gems/ruboty-calendar](https://rubygems.org/gems/ruboty-calendar)
[https://github.com/youyo/ruboty-calendar](https://github.com/youyo/ruboty-calendar)

`ruboty calendar`で今月のカレンダーを表示するだけです。

```
youyo [11:41 AM]
ruboty: calendar

ruboty [11:41 AM]
December 2014
Su Mo Tu We Th Fr Sa
   1  2  3  4  5  6
7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
```

## display-calendar

`ruboty-calendar`を作成するにあたって、まずはカレンダーを表示するgemを作成しました。

[https://rubygems.org/gems/display-calendar](https://rubygems.org/gems/display-calendar)
[https://github.com/youyo/display-calendar](https://github.com/youyo/display-calendar)

```
require 'display/calendar'

cal = Display::Calendar.new
puts cal.calendar(12,2014)
```

要は`cal`コマンドだし、rubyにももうあるだろうけど、これも勉強がてら作りました。

## まとめ

pluginの作り方はわかったのでこれからは役に立つものを作っていきたいです！
Xojoでグレムリンを退治する方法

Xojoでコードを書いていると、たまに謎のSyntax Errorになることがあります。

![gremlin1.png](https://qiita-image-store.s3.amazonaws.com/0/27806/4ffd83ab-7ca0-e063-b159-07cea1be3ba5.png)


どこも間違っていないのにエラーになる。
これはグレムリンの仕業です。
> gremlin
> 【名】
> コンピューターや機械の中に住み着いて悪さをする小悪魔、故障［異常］を起こすえたいの知れない原因
> http://eow.alc.co.jp/search?q=gremlin&ref=sa

こいつを退治するには、

1. 該当行をトリプルクリックで選択（またはコードを全選択）
2. そのままカット＆ペースト

そうすると次のようなダイアログが表示され、

![gremlin2.png](https://qiita-image-store.s3.amazonaws.com/0/27806/327d1ed3-fab6-42f3-9062-81d2175bc530.png)

OKボタンを押すと、グレムリンがビュレットに置換されます。

![gremlin3.png](https://qiita-image-store.s3.amazonaws.com/0/27806/ed64835a-f6ad-289c-599d-f7be1247b6fd.png)

グレムリンの正体は、制御文字です（上記の例ではU+0008でした）。
どうしてこんな文字が混入するのか、原因はまだ分からないのですが、どう見ても構文に間違いがないときは、グレムリンを退治してみましょう。
【既存知識を】Androidの復習します！ - Activity編 - 【自分なりに纏める③】


# 概略

相も変わらず初心者エンジニア続けています。
そんな私が一月Android開発に挑んだので
そのときの知識を備忘録と言うか、
まぁなんかそんな感じです。

この記事ではActivityについて
僕が学んだことを色々紹介します。

#Activityってなんなの。

MVCでいうCに当たると僕は理解しています。
Controllerですね。

AndroidManifestで起動した時に最初に起動するActivityを選択しますよね。
あれはindex.htmlを何処にするか設定しているという理解でOKです。

html 的に言うと

AndroidManifest - header
Activity - javascript
xml - body

見たいな感覚です。

#ライフサイクル

まずは此方をどうぞ。

[アクティビティのライフサイクル](http://www.javadrive.jp/android/activity/index2.html)

ナンノコッチャとなるかもしれませんが、ここを理解しておくと
後がグッと楽になりますので是非一読しましょう。

##時間がないから三行で

いいから三行で説明しろという方には

Androidには状態が変化するタイミングにそれぞれ名前がついています。
その状態がくるくる回る様子を一般的にライフサイクルって言っていて
ぶっちゃけるとそのタイミングで動くメソッドがあるのを知っておいてね。

てことです。

![p2-1.png](https://qiita-image-store.s3.amazonaws.com/0/42310/0b3aaeb9-ce49-0f46-0a6c-4701c6265413.png "p2-1.png")

>アクティビティのライフサイクルの記事様より引用

( ﾟдﾟ)ﾎﾟｶｰﾝ
って人。
更に下を見るとわかるかもしれません。


##Activity雛形

```java

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onStart(){
        super.onStart();
    }

    @Override
    public void onResume(){
        super.onResume();
    }

    @Override
    public void onPause(){
        super.onPause();
    }

    @Override
    public void onStop(){
        super.onStop();
    }

    @Override
    public void onRestart(){
        super.onRestart();
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
    }

}
```

ライフサイクルと難しく考えるからあれなんですが、
ともかく状態が切り替わるときに、対応したメソッドが動くんです。
それに合わせて色々機能作っていきましょうね。
っていうのがAndroidのライフサイクルなんだと理解しておけば、もう怖くもないですよね。

#intentってなんなの？

[intent](http://ejje.weblio.jp/content/intent)

これってなんなんですかね？
未だに僕もよくわかってないです。
ので、これを気に少し勉強してみました。

intentには2種類あるみたいで

明示的インテント
[Intentで画面遷移する(明示的Intent)/Getting started](http://techbooster.org/android/application/8346/)
黙秘的インテント
[Intentで画面遷移する(暗黙的Intent)/Getting started](techbooster.org/android/application/8835/)

それぞれ参考になりそうな記事を見つけましたので是非そちらを...
このサイト様から引用いたしますと
>
    Activityをクラス名で指定して呼び出す方法＝明示的Intent
    動作(振る舞い)で呼び出し、Activityを指定しない方法＝暗黙的Intent

ということらしいのですが、まだよくわからないです。
何が明示的で黙秘的なのか、僕なりに噛み砕いてみました。

Androidはiosのように、ブラウザならSafari！
みたいな決まったものがなく、多くのブラウザアプリケーションが有り、多くのカメラアプリケーションがあったりします。

明示的intentはその多くのアプリケーションの中から「Chrome」で起動する！と決めていたり、このアプリケーションの次の画面はこれ！と、決まった処理（決まっている事柄）をする際に使われるIntentのことを明示的Intentと言うようです。

逆に黙秘的intentというのは「カメラで撮影する」「ブラウザで開く」のような動作に対して、対応できるアプリケーションをAndroid側から提案し、ユーザーがアプリケーションを選択する事で連携を取るように使われるIntentの事を黙秘的Intentと言うようですね。
Leiningenのプラグイン開発ページを翻訳した

この冬休みに、Leiningenのプラグインを作ってみようと考えていたので、まずは手始めにプラグイン開発についてのドキュメントを翻訳してみました。
本家にPull Requestを送る前に、査読して頂ける方はいらっしゃいますでしょうか。

https://github.com/k2n/leiningen/blob/plugin_ja_translate/doc/ja/PLUGINS_ja.md

読みやすさを優先して、意味の変わらない範囲で主述関係や接続を崩し、逐語訳にはしないようにしました。もし事実関係が間違っているようでしたら、GithubのコメントやPull Requestでご指摘いただけると助かります。
qiita-markdownを含んだGemfileをHerokuにpushするには


[エンジニアがプロフィールやキャリアを書けるCMSを作ったがHerokuで動かなかった話 | Kwappa研究開発室](http://randd.kwappa.net/2014/12/25/641) の続き。年末の休みをいくらかつぶした結果、 `git push heroku master` できるようになった。

# TL;DR

## 前提条件

* heroku toolbelt はインストールと設定が済んでいる
* heroku app は作成済み

## buildpack-multiを`BUILDPACK_URL`に指定

```
% heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-multi.git
```

## `.buildpacks` に必要なbuildpacksを指定

* charlock_holmes : frederick/heroku-buildpack-ruby
* rugged : cmake

```.buildpacks
https://github.com/rcaught/heroku-buildpack-cmake
https://codon-buildpacks.s3.amazonaws.com/buildpacks/frederick/heroku-buildpack-ruby.tgz
```

# 情報源

* [Steve Tooke - Using charklock_holmes on Heroku](http://tooky.co.uk/using-charklock_holmes-on-heroku/)
	* ちょっと前まで有効だった解決法。
	* `heroku-buildpack-apt` で `apt-get install` できるようにする
	* `Aptfile` で `libicu-dev` をインストールする
	* `heroku-bundle-config` で、heroku専用のbundlerオプションを指定できるようにする
	* `.heroku-bundle/config` に `BUNDLE_BUILD__CHARLOCK_HOLMES` を指定する
	* 結果 : 動かない
* [Heroku Support · Issue #76 · brianmario/charlock_holmes](https://github.com/brianmario/charlock_holmes/issues/76)
	* 「herokuはicu4cのバージョンが古くてビルドできないでござる」というissue
	* 「余裕があったら対応するけど約束はできないよ」というお答え（さもありなん）
	* 結果 : 動かない
* [ruby on rails 4 - How to install charlock_holmes dependency libicu-dev on Heroku - Stack Overflow](http://stackoverflow.com/questions/18926574/how-to-install-charlock-holmes-dependency-libicu-dev-on-heroku)
	* `charlock_holmes` が入らないよ〜のスレ
	* Steve Tookeさんの記事の元ネタ
	* frederickさんが作った `buildpack-ruby` が有用だ、という[情報](http://stackoverflow.com/a/20507705)がある 
	* [herokuでホストしているbuildpacks](https://buildkits.heroku.com/)
	* `[tgz]` のリンクを `.buildpacks` に書くとよしなに使ってくれる
	* これを入れると `charlock_holmes` がビルドできる
* [rcaught/heroku-buildpack-cmake](https://github.com/rcaught/heroku-buildpack-cmake)
	* `cmake` を入れてくれるbuildpack
	* これを入れると `rugged` がビルドできる
世界三大覚えてられないけど有用な知識 [3] Herokuに `master` 以外のbranchをpushするには `git push heroku my_branch:master`


タイトルがすべてな上に、gitの基本操作でもあるのだが、`git push`は（めっちゃ省略すると）以下の書式になっている。

```
git push #{remote_name} #{local_branch}:#{remote_branch}
```

herokuがリモート `heroku` で登録してあり、ローカルブランチ `my_branch` を `push` したいなら

```
git push heroku my_branch:master
```

となる。


`local_branch == remote_branch` の場合は省略可能なので、普段は `git push origin master` などと書くわけですね。

* see also: 
	* [gitのローカルブランチを別名のリモートブランチにpushする方法 - sessanの日記](http://sessan.hatenablog.com/entry/2012/07/06/181712)
Code for GIFU 一年の振返り

Code for GIFUの國枝です。
一応、代表らしいです。というわけで、２０１４年を振返ってみます。

っていうか、２２日に書くんじゃなかったんかーい！
という突っ込みは

じゃんじゃんください。

さて、４月に開催したのは、大垣ミニマッピング。

後述の５月のイベントを控えていたので、運営サイドで、まずはミニマムで開催してみようってな感じで開催しました。私の地元である岐阜県大垣市で、運営２名と、一般参加者４名で、ふらふらと、まちあるきしました。

![IMG_1217.png](https://qiita-image-store.s3.amazonaws.com/0/61362/bd56661e-ba80-1adc-df74-6eb02bdf59d2.png)

ちょうど、街中を流れる川を下るイベントが開催されており、私たちも、川に沿って、歩いて行きました。普段、車で流してしまっている風景に、史跡であったり、著名人のお墓を見つけたりと、まちあるきの意義を確認することが出来ました。

そして、５月には輪之内町マッピングパーティーです。
Japan代表の関さんや、OpenStreetMapの早川さんをお招きして開催しました。

詳しい内容は、[こちら](http://localwiki.jp/輪之内マッピングパーティ_2014.5.17)（え？

手を抜き過ぎと言うなかれ。半年以上も前のことですよ。ほとんどわす・・・げっほげっほ。

さ、さて、６月はとんで、７月には、イベントは２つ。

Code for TOKAI主催のオープンデータハッカソンと、大垣市で毎年２回ほど開催しているODD(Ogaki debeloper day)で、小判×ITハッカソンを開催しました。

オープンデータハッカソンでは、６チームに分かれて、教育や、福祉、防災などをテーマに、独自のアイディアを出して、活発な意見交流が行われていました。

![IMG_1614.png](https://qiita-image-store.s3.amazonaws.com/0/61362/eb360a2f-584b-9c50-953f-71b252adff20.png)

小判×ITハッカソンは、Code for GIFUの代表さんが、「女中さんを回すと小判が飛び散る」というアプリを作ってました。本人曰く、ばかばかしくて面白いとのことでしたが、モラル的にはどーなんだ？

８月は暑いので、室内で勉強会を開催です。
[オープンデータ・カフェin大垣　〜松下圭一から探る市民自治とオープンデータ（導入編）](https://www.facebook.com/events/359492457536091/?ref_dashboard_filter=calendar)

この勉強会では、松下圭一さんの本を元に進めたのですが、気付かされたことが多くありました。一度、ご一読されると勉強になります。たぶん。

そして、運命の９月です。
何が運命って、階段でこけて、代表が骨折ったんですよ。バッカダネー

以降、２ヶ月ほど、Code for GIFUは闇に潜ります・・・
（イベント開催用のアプリ作ったりしましたけどね）

そして、１２月は、税金はどこへ行ったの勉強会を開催しました。

昨年の経験を生かして、OpenSpendingの更新とかやろうと思ったんですが・・・

あれ？

うまくいかない・・・

結局、時間内に終わることが出来ず、来年に持ち越すことに。orz

ということで、来年も頑張ります(^。^)b
【MQTT学習】JSONRPCをMQTT Brokerを使って実行するデモgem書いた

# MQTT学習

なんとなく気になっていたので、[JSONRPC](http://www.jsonrpc.org/specification)をMQTT Broker経由して
Publish/Subribeできないかな、ってためのデモgemを書いた。

[json_rpc_over_mqtt_example](https://github.com/futoase/json_rpc_over_mqtt_example)

名前が地味である。

# インストール

```
> gem install json_rpc_over_mqtt_example
```

# Publish/Subcribeを試す

有名なMQTT Brokerである[mosquitto](http://mosquitto.org/)をインストールし、mosquitto_sub/mosquitto_pub 各コマンドを利用することにした。

## Mac OS Xでのインストール/起動

homebrewで一発

```
> brew install mosquitto
> launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mosquitto.plist
```

## JSONRPCテスト用サーバの起動

```
> json_rpc_over_mqtt_server
```

## Subscriberの起動

json_rpc_over_mqtt_serverでデフォルトで設定してある**client**というTOPICでメッセージ受信待ちをするために、[mosquitto_sub](http://mosquitto.org/man/mosquitto_sub-1.html)を使う

```
> mosquitto_sub -h localhost -t client
```

# PublisherによるJSONRPC メッセージ送信によるメソッド実行

[mosquitto_pub](http://mosquitto.org/man/mosquitto_pub-1.html)を使い、JSON形式のメッセージを流して、
JSONRPC Over MQTT Exampleで用意してあるメソッドを叩いてみる。

[用意してあるメソッド一覧はこちら](https://github.com/futoase/json_rpc_over_mqtt_example/tree/master/lib/json_rpc_over_mqtt_example/functions)

今回は時間を聞いてみることにした。

- Publisher

```
> mosquitto_pub -h localhost  -t server -m '{"jsonrpc": "2.0", "id": 1000, "method": "what_time_is_it?"}'
```

- Subscriber(mosquitto_sub)

```
> {"jsonrpc":"2.0","id":1000,"result":"2014-12-31T10:03:25+09:00"}
```

- json_rpc_over_mqtt_server

```
> I, [2014-12-31T10:03:25.099352 #88576]  INFO -- : TOPIC: server MESSAGE:{"jsonrpc": "2.0", "id": 1000, "method": "what_time_is_it?"}
```

うむ、うまく行っている。

# やってみて

まあ、いいんじゃない？って思った。地味な感じ。
知り合いからJSONRPCがいいと思ってるんですよ、とか聞いてたり、
過去にJSONRPCをRedisのPub/Sub使ってサービスに実装してたな、とか思い出したのでMQTTの学習の一環として書いてみた。
MQTT Brokerの使い方の練習になってる感じだけど。

こういう記事もあるし。REST以外の手段は、と...
[RESTの代替は必要か](http://www.infoq.com/jp/news/2014/01/rest-alternatives)

RubyのMQTT client([ruby-mqtt](https://github.com/njh/ruby-mqtt))はQOS 0のみサポートという点と、
MQTT Brokerへの再接続はしないとのことだ。

他の言語によるMQTTライブラリを使うと、実行の信頼性の高いJSONRPC実行環境を作れるのかな。
Railsチームビルディング参考記事

# 技術戦略

# 開発プロセス

# 文化作り

# 組織構造最適化

# ノウハウ
* [ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習](http://qiita.com/hirokidaichi/items/27c757d92b6915e8ecf7)

# 命名
* [モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう](http://qiita.com/jnchito/items/459d58ba652bf4763820)

# 技術書
* リーダブルコード
* Clean Code
* エンタープライズアーキテクチャパターン
* エンタープライズRails

# 総論
* [CTOの役割と組織における技術的ポートフォリオの組み方](http://developer.hatenastaff.com/entry/technical-portfolio)
* [エンジニアの生存戦略](http://gihyo.jp/lifestyle/serial/01/survival_strategy_engineer)
* [開発組織のマネジメント](https://speakerdeck.com/naoya/kai-fa-zu-zhi-falsemanezimento)
CasperJSでJSONデータをPOSTする


requestのbodyにJSONを入れてPOSTする必要のあるAPIが最近よくありますが、そのAPIのE2Eテストをcasperjsでする時に意外とやり方が見つからなかったので短いですがメモ。

coffee scriptなのでJSな人は適当に読み替えてください。

```coffeescript
casper.thenOpen "http://localhost:8080/xxxx",
  method: "post"
  data: JSON.stringify({
    title:"title1"
    content: "foobar"
    })
  headers:
    "Content-Type": "application/json; charset=utf-8"
, ->
  @echo "POST request has been sent."
  test.assertHttpStatus 201

```
サーバー側の仕様にもよると思いますが、Content-Typeヘッダーを付けるのと、単にJSON.stringifyしてあげるという話でした。いまいちググってもやり方が見つからず、試行錯誤した結果こうでした。
【既存知識を】Androidの復習します！ - AndrodiManifest他編 - 【自分なりに纏める②】


# 概略

相も変わらず初心者エンジニア続けています。
そんな私が一月Android開発に挑んだので
そのときの知識を備忘録と言うか、
まぁなんかそんな感じです。

開発環境はAndroidStudio1.0です。
ディレクトリ構造を見る時色々切り替えられるので、
試し試し出来るのでいいのかも、しれません。

※書きかけの物が多いですがご了承下さい

# AndroidStudioにおけるAndroidManifestとbuild.gradle編

##バージョン管理

いつもなら

```
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hogehoge.appli"
android:versionCode="1"
android:versionName="1.0.0"
/>
```

みたいな感じでAndroidManifestに記載すると思うのですが、
AndroidStudioではbuild.gradleの方に記載が有ります。
そちらが優先して利用されるので、気を付けて下さい！

大したことない情報ですが、
気づかないと意外とハマります。

##モジュールとかライブラリをインポートする時

基本的にモジュールとかサポートライブラリの追加をdependenciesに記載するわけなんですが、AndroidStudioでは

File > ProjectStrcuture　から追加することで自動でdependenciesに記載してもらう方法もあります。記法とか最初のうちはわからないと思うのでこの編を利用するといいと思います。

モジュールの追加などもそこで設定できます。


# コーディング規約（？）編

絶対守れ！っていう、立派なものじゃないですけど

**ここは絶対こうしておいた方がいい**

というポイントを（僕の備忘録的にも）幾つかご紹介できればと思います。
（ここは作りかけです。自分が今後も作っていく中で気をつけるポイントが有れば足していきます。）

##xmlの数値に関して

xmlを書いていく時に
数値や文字列を直接打ち込むことが出来ると思いますが

基本的にそれは避けたほうが良いみたいです。
サンプルとかはすぐに実行できるように記述してありますが、
サンプルで後悔しない限りは

res > values　の中に数値関係のものを纏めて記載するようにしましょう。


#小ネタ

僕が制作していく中で感動した技を紹介します。
(周知の物だったら恥ずかしいですね...)

何かまた見つけたら都度書き加えていきたいです。

##ディレクトリをきちんと分ける。

javaファイルとか作っている時に
きちんとディレクトリで分けて整理したいなぁ。
と、思う方。絶対いますよね？

AndroidStudioではJavaよろしく、
ピリオドでファイル階層を表しています。

例えばjava.sample.appの中で

「activity.NewActivity」

みたいな感じで新規作成すると

activity
└　NewActivity.java

のように作成されます。
Alfredを起動するショートカットは⌘キー2回押しで

Mac用の驚異的に素晴らしいランチャー [Alfred](http://www.alfredapp.com/) の有償Powerpackをついに購入。Workflowのあまりの素晴らしさに虜になる。くやしいけど、AlfredはPowerpackを買わないと意味がないと言い切ってしまう。

後は、インクリメンタル検索に[migemo](http://0xcc.net/migemo/)が使えるようになってさえくれればもう何も言うことはないのだけど。

## Alfredを起動するショートカット

Alfredの記事はQiitaなどにいくらでもあるので、ここではAlfredを起動するためのショートカットについて。デフォルトはOption+スペースになっているけど、ここは断然「⌘キー2回押し」にすることをお勧めする。

この設定にしておいて、左右の⌘キーを同時に押すだけ。

この一発起動感はやみつきになる。

## 次世代のシェル

以下余談。
Alfredはまぎれもなく次世代のシェルのひとつの姿だと思う。[peco](http://mattn.kaoriya.net/software/peco.htm)もAlfredと同様、シェル操作のありかたを変えた。
その意味で、Windowsは完全に進化の方向を間違えたと思う。モバイルなどに色目を使ったのが命取り。

Alfredやpeco的なインターフェイスを徹底的に中心においたGUIシェルを、Mac/Win/Linux問わずどのプラットフォームでも使えるようになって欲しい。
C言語でsqlite

# WAL (Write-Ahead Logging)

ほとんど使ったことのないsqlite3ですが、バージョン3.7から WAL(Write-Ahead Logging)が使用できるので試してみました。
WALは説明は https://www.postgresql.jp/document/8.0/html/wal.html を参照。

```c:my_create_table.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>

#define DBNAME  "test.db"

const char *family[][2] = {
    {"Sazae", "24"},
    {"Namihei", "54"},
    {"Fune", "50"},
    {"Masuo", "28"},
    {"Katsuo", "11"},
    {"Wakame", "9"},
    {"Tarao", "3"},
    {"Tama", "1"},
};

int main(int argc, char* argv[])
{
   sqlite3 *db;
   int rc, i, num;
   char *sql;
   char *msg = 0;

   /* Open database */
   rc = sqlite3_open(DBNAME, &db);
   if( rc ){
      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
      exit(1);
   }

   /* Create SQL statement */
   sql = sqlite3_mprintf("create table if not exists family(name text not null, age int not null)");
   /* Execute SQL statement */
   rc = sqlite3_exec(db, sql, NULL, NULL, NULL);

   /* Write Ahead Logging */
   sqlite3_exec(db, "PRAGMA journal_mode = WAL;", NULL, NULL, NULL);

   /* transaction */
   sqlite3_exec(db, "begin", NULL, NULL, NULL);

   num = (sizeof(family) / sizeof(family[0]));
   for(i = 0; i < num; i++) {
       sql = sqlite3_mprintf(
            "insert into family (name, age) values ('%s', %d)",
            family[i][0],
            atoi(family[i][1])
       );

       /* Execute SQL statement */
       //rc = sqlite3_exec(db, sql, callback, 0, &msg);
       rc = sqlite3_exec(db, sql, 0, 0, &msg);
       if( rc != SQLITE_OK ){
          fprintf(stderr, "SQL error: %s\n", msg);
          sqlite3_free(msg);
       }else{
          fprintf(stdout, "Records created successfully\n");
       }
    }
    sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
    sqlite3_close(db);
    return 0;
}
```
Xcodeで英語大文字・小文字変換ショートカット

# はじめに
Xcodeのエディタに大文字・小文字変換のショートカットキーを登録します。

私は環境再設定が面倒なのであまりツールの初期設定を変えないのですが、これは使う機会が多いので無感情で最初に登録しています。

# 登録
Xcode > Preferences から「Key Bindings」を開きます。
検索ボックスに「make」と入力します。

Transformations ▶ Make Upper Case(Edit Menu)のKey部分をダブルタップし
controlとuを同時に押下し、ショートカットキーを追加します。

同様に
Transformations ▶ Make Lower Case(Edit Menu)のKey部分をダブルタップし
controlとshiftとuを押下します。

![スクリーンショット 2014-12-31 6.45.09.png](https://qiita-image-store.s3.amazonaws.com/0/63205/bc34507c-00bf-b43a-b489-e0a456804c21.png)

# 使い方
エディタ内で任意の文字列を選択し、control + u で大文字に変換します。
shiftを押しながらだと小文字に変換。

# おわりに
矩形選択(altを押しながらドラッグ選択)とよく組み合わせて使っています。
何かの参考になりましたら幸いです。
LuaとNginxとRedisについて

# NginxでLuaを使う

## LuaJITのインストール
### 本体インストール
こんな感じ。

```
wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz
tar vxzf LuaJIT-2.0.2.tar.gz
cd LuaJIT-2.0.2
make;sudo make install;
```

### LuaRocksインストール
cpanmみたいな感じの物。

```
sudo apt-get install zip
cd /usr/local/src
wget https://nodeload.github.com/keplerproject/luarocks/zip/master
mv master master.zip
cd luarocks-master
# 適当に環境変数は設定する
./configure --with-lua=/usr/local/bin/luajit --with-lua-lib=/usr/local/lib/ --with-lua-include=/usr/local/include/luajit-2.0
make
sudo make install
# LuaRocks内のShebangが正しくLuaJITを参照しないので置換する
sudo perl -pi -e 's|/usr/local/bin/luajit/bin/lua|/usr/local/bin/luajit|' /usr/local/bin/luarocks
```

## Nginxのインストール
モジュールを落としてきて関連づけさせてインストールする。

```
git clone https://github.com/chaoslawful/lua-nginx-module.git
# 適当に環境変数でLuaJITの位置を指定してあげる
# 適当なNginxのソースに対してconfigureを実行する
# UbuntuだとZlibとかPCREが要求されるので適当に入れておくなり、指定するなり…
LUAJIT_INC=/usr/local/include/luajit-2.0 LUAJIT_LIB=/usr/local/lib/ ./configure --add-module=/usr/local/src/lua-nginx-module
make; sudo make install 
```

## LuaからRedisを使うにあたって
### インストール
Redisはインストールされているとします。
LuaRedisのモジュールを使用する。
LuaRocksは入っているのでインストール出来る。

```
# 適宜sudoする必要があるかも
luarocks install redis-lua
```
### 確認する
LuaJITのreplから入ってる事の確認をする。

```
r=require("redis");
c=r.connect("localhost" , 6379);
c:set("hoge" , 1);
print(c:get("hoge"));
-- 1
```
Unityでラムダ式を遅延実行する

```csharp

	public void DelayFunc(int frame, Action action){
		StartCoroutine(_DelayFunc(frame, action));
	}

	private IEnumerator _DelayFunc(int frame, Action act){
		for (int i = 0; i < frame; ++i) yield return null;
		action();
	}

```

使い道があるような、ないような。

あんまり良い使い道が思いつきませんが、

```csharp
		for (int i = 0; i < 10;++i){
			int cnt = i;
			DelayFunc(i * 30, () => Debug.Log(cnt * 30 + "フレーム後の時間：" + Time.time));
		}
```

なんてやれば、0～300フレームまでの30フレーム刻みの時間が表示されたりします。
ちなみに、無駄そうに見える

```csharp
int cnt = i;
```
は無駄じゃありませんのであしからず。
Caveman2でHTTPS

##動機とか##
Caveman2でLMSっぽいものを作るにあたって，HTTPS使わないと駄目だろうと思って調べたものの，ドキュメントにそれっぽい記述を見つけられませんでした。

Clackの[hunchentootのhandler](https://github.com/fukamachi/clack/blob/master/src/core/handler/hunchentoot.lisp)の`run`とかを見ると`ssl`を使えそうなので試してみました。

##準備##
###環境###
Mac OSX 10.10.1
Clozure Common Lisp 1.10
quicklisp 2014-12-17
OpenSSL 0.9.8za 5 Jun 2014
サーバはHunchentootです。 (tootとwookieでも同様かも？)

###証明書作成###
最近はOpenSSLから派生したLibreSSLとかGoogleのとかもあるんですね。
とりあえずOpenSSLを使います。
`$ openssl genrsa 2048 > oreore.key`
`$ openssl req -new -key oreore.key > oreore.csr`
生成されたcsrファイルを認証局に署名してもらいます。
今回は動けば良いのでオレオレします。
`$ openssl x509 -days 3652 -req -signkey oreore.key < oreore.csr > oreore.crt`

生成したkeyファイルとcrtファイルはプロジェクト直下に`ssl`ディレクトリ作って放り込みました。

##アプリケーション側の設定##
main.lispあたりにファイルパスを書いておきます。

```cl:
(defvar *ssl-key-file*
  (merge-pathnames "ssl/oreore.key" myapp.config:*application-root*))

(defvar *ssl-cert-file*
  (merge-pathnames "ssl/oreore.crt" myapp.config:*application-root*))
```
これだけ。あとは

```cl:
>(start :port 5000 :ssl t :ssl-key-file *ssl-key-file* :ssl-cert-file *ssl-cert-file*)
```
すれば動くはずです。
（password設定した場合は`:ssl-key-password "password"`を追加します。）
これで`https://localhost:5000/`にアクセスすると，
見事にブラウザに怒られて，

```
[2014-12-31 01:48:01 [ERROR]] Error while processing connection: A failure in the SSL library occurred on handle #<A Foreign Pointer #x626B60> (return code: 1). SSL error queue:
error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca
```
なんて言われます。オレオレなので我慢します。
ブラウザで例外を許可すればサイトを見れます。
（Chromeだとこの段階で証明書の中まで見れるんですね。）

ちなみに`:port 443`を指定すると

```
Error #<USOCKET:OPERATION-NOT-PERMITTED-ERROR #x302003EFD40D>
   [Condition of type USOCKET:OPERATION-NOT-PERMITTED-ERROR]
```
ですって。めんどくさそうなのでport 5000で使う事にします。


##おわりに##
とりあえず動いたので満足です。
本番では証明書はちゃんと買う予定です。

当初は自分でコード書かないと駄目だろうと思っておっかなびっくりソース読んでたのですが，
結局１行も書かずに済みました。

これで安心してフォーム認証ができます。
PowerShellを始める前に知っておくと良いかも知れない知識

#PowerShellとは何か
PowerShellは、コマンドプロンプトの高機能版ですが、LinuxのShellのような使い勝手の進化が主眼ではありません。
PowerShellは、.Net Frameworkの基板の上に構築されておりスクリプトで.Net Frameworkのライブラリがそのまま使えます。
コマンドプロンプトを.Net Frameworkで再実装して、使い勝手を良くしたのでは無く、.Netのインフラストラクチャを自在に使えるスクリプト言語実行環境が、PowerShellです。
今どきの言語実行環境なので、コマンドプロンプトと違いPowerShellスクリプトは、セキュリティに気を配られて設計されています。

##リモート接続という魔物
PowerShellには、リモート接続という機能があります。
高機能なShellは、telnetに似ているためリモートログインできるかのように勘違いしてしまいますが、PowerShellにリモートログインの機能はありません。
冷静に考えてみれば当たり前のことで、WindowsにはCUIログインの機能はありません。
Linuxのように、リモートでログインできる筈は無いのです。
では、リモート接続とは何かというと２つのPC間にセキュアな通信路を構築する機能です。名前のままですね。
接続先のPCへスクリプトを送って実行させ結果を受け取ることができます。
telnetのリモートログインは、あくまでもログイン先で実行されるため結果として返ってくるのは、コマンドライン上の文字データだけです。
それに対して、PowerShellはリモートで実行させたスクリプトの結果は、.Netのオブジェクトとして返ってきます。
私はなまじtelnetを知っていたため、この考え方が理解できるまで少し時間が必要でした。
接続するには、サーバーとクライアントのどちらにも設定が必要です。

##PowerShell のバージョン確認方法

```ps1
$PSVersionTable
```
browserifyでgulp-plumberが効かない時の対処方法



gulpでwatch中に、何かしらエラーが発生した場合、通常watchもろともgulpが終了してしまい、もう一度watchをしなくてはならなくなってしまいます。
これが何度もあると非常にストレスが溜まって体に良くない。

ここで便利なのが、gulp-plumber。こいつを用いることによってエラーをした後もwatchが止まらないで済みます。gulp-notifyというやつを入れると通知が出てさらに便利になります。

しかし、browserifyでjsをがっちゃんこさせるときに、jsがおかしいとplumberでもエラーを制御することが出来ませんでした。

![kobito.1419958737.324460.png](https://qiita-image-store.s3.amazonaws.com/0/39134/7cb5fbed-343a-1e13-0c69-138820082319.png "kobito.1419958737.324460.png")

## gulp-starterで解決


<a href="https://github.com/greypants/gulp-starter" target="_blank">gulp-starter</a>

上記ファイル内の、

<a href="https://github.com/greypants/gulp-starter/blob/master/gulp/util/handleErrors.js" target="_blank">gulp/util/handleErrors.js</a>

```js
var notify = require("gulp-notify");

module.exports = function() {

  var args = Array.prototype.slice.call(arguments);

  // Send error to notification center with gulp-notify
  notify.onError({
    title: "Compile Error",
    message: "<%= error %>"
  }).apply(this, args);

  // Keep gulp from hanging on this task
  this.emit('end');
};

```

上記ファイルを、gulpfileでhandleErrorsという名前でrequireしてあげることでうまくいきます。

```js
gulp.task('script', function () {
  return browserify("./app/js/main.js")
    .bundle()
    .on('error', handleErrors)
    // .pipe($.plumber())
    .pipe(source("main.js")) 
    .pipe(gulp.dest("dist/js/"));
});
```

![Banners_and_Alerts.jpg](https://qiita-image-store.s3.amazonaws.com/0/39134/4ad10348-bb51-e684-4c5d-e0810526d7e6.jpeg "Banners_and_Alerts.jpg")

通知が出ました。これでwatchで停止せずに、browserifyの恩恵に預かることが出来ます。
今までgulpfileにタスクを全て詰め込んできましたが、gulp-starterなどを見て、最近はファイルを分割するのもいいもんだなと感じました。