OmniAICreator/Qiita-1.07M huggingface dataset:
PC不要！スマートフォンから始めるProlog

# PC不要！スマートフォンからはじめるProlog

いよいよ今年も始まりました Prolog Advent Calnder 2014。

今年のAdvent Calender初回は、お手持ちのスマートフォンなどから、すぐにでも [Prolog] を試す方法をご紹介したいと思います。

[Prolog] というプログラミング言語に馴染みがない方もこれを機会に触れられてみてはと思います。

## オンラインで試すなら Ideone.com がオススメ

あなたがもしインターネットにつなぐことが出来るならば、まずは [Ideone.com] を試してみるのがよいでしょう。

![prolog_ideone-on-android01-half.png](https://qiita-image-store.s3.amazonaws.com/0/42096/7302a73a-c899-e061-19b5-6860244f6017.png)

## さっそく試してみましょう

下をみると「Java」などとと書かれた面妖なボタンがあるので、それを押し……

![prolog_ideone-on-android03-half.png](https://qiita-image-store.s3.amazonaws.com/0/42096/33a5da15-5ef4-76e6-8fba-138b9e605fa3.png)


おもむろに「Prolog(swi)」を押します。

![prolog_ideone-on-android04-half.png](https://qiita-image-store.s3.amazonaws.com/0/42096/b9885dc2-1abc-0448-f46b-b2f38a3ec2d3.png)

あとは、あなたは下記のように `/* your code goes here */` 上下付近にPrologのソースコードを書いていけばよいのです。

![prolog_ideone-on-android05-half.png](https://qiita-image-store.s3.amazonaws.com/0/42096/4f92b884-56c1-498f-12a5-41137b6b5988.png)

書き終わったら、「Run」という機械なボタンを押しましょう！

![prolog_ideone-on-android06-half.png](https://qiita-image-store.s3.amazonaws.com/0/42096/0f980760-34b9-47d2-6e34-176708ddbecc.png)

やりました！

画面が変わり、下記のように `stdout` というところに謎の文字列が現れれば成功です！

![prolog_ideone-on-android07-half.png](https://qiita-image-store.s3.amazonaws.com/0/42096/69b69ff7-0824-c618-ed47-d2c07af3b7e2.png)


これであなたも Prolog プログラマーの仲間入りです。

友達に「ぼくは Prolog のプログラムを組んだことがあるよ」と言った時の相手の顔を想像してみるのもよいかもしれませんね。

> :memo: *実行結果だけを見てみたいあなたのために、上記で作った小さなプログラムを [Ideone にアップロードしておきました](http://ideone.com/1LBpFc)*

この方法は、iOS(iPhone) や Android 、パソコンでもインターネットさえ繋がっていれば、試すことができます。便利なサービスですね。

## :warning: 注意してください

ただし、上記の方法では、インターネットや書籍にて見かける「対話的な」コードをそのまま実行しにくいので、少し工夫が入ります。

例えば、以下のように対話的に入力する例が合った場合、 

    ?- 人間(X).

[Ideone.com] では以下のようにかく必要があります。

    /* your code goes here */
    人間(X), writeln(X), fail; 
    true.

もしくは、以下でも大丈夫でしょう。

    :- 人間(X), writeln(X), fail; true.

## :tea: 【余談】 Android では

Android限定ですが、 [Jekejeke Prolog] というアプリを発見しました。
これならばインターネットに接続していない環境でも利用できるかもしれません。

また、対話的に入力することもできるようです。

# そもそも Prolog とは何なのか

[Prolog] とは何なのか？宇宙とは？そして我々の存在意義とは？
そう思われたのは、あなただけではありません。
わたしもです。安心してください。

あなたがもし禅問答を避けたいのであれば、[Wikipedia の Prologの項目][Prolog] が役に立つとわたしは確信しています。

論理型言語としてのPrologの立場、そしてその歴史、人類の未来などの話題は [Wikipedia][Prolog] に任せ、ここは次に進めたいと思います。

> :memo: *驚くべきことに、この充実した [Wikipedia の記事][Prolog] は、 [Prolog歴30年を超える方](https://twitter.com/TakaoOzaki/) によって [8割方書かれているという噂](https://twitter.com/toby_net/status/530893217516883968) があります。
> 本当でしょうか？*

それではこの辺で失礼します。

また、次回の Advent Calender でお会いしましょう。

[Prolog]: http://ja.wikipedia.org/wiki/Prolog
[Ideone.com]: http://ideone.com/ "Ideone.com - Online Compiler and IDE"
[Jekejeke Prolog]: https://play.google.com/store/apps/details?id=jekpro.platform.headless
windowsでDNSサフィックスが勝手につくのを抑止

DNSサフィックスが自動補完されるのが邪魔な場合がある。
その場合、以下画像の様にDNSサフィックスに`.`を追加すればよい。

![スクリーンショット 2014-12-01 7.04.51.png](https://qiita-image-store.s3.amazonaws.com/0/25728/516398c8-639e-5845-498d-3889e244a536.png)
[Swift] 画像のサムネイル生成（縮小＆切り抜き）

Swiftで固定サイズのサムネイルを生成するサンプル。画像を縮小し、中心から切り取る（Resize and crop）。
PHPでいうところの、Imagick::cropThumbnailImage()の処理。

* 2017-1-1 Swift3のコードに変更しました。

## コード

```Swift
    func cropThumbnailImage(image :UIImage, w:Int, h:Int) ->UIImage
    {
        // リサイズ処理
        let origRef    = image.cgImage
        let origWidth  = Int(origRef!.width)
        let origHeight = Int(origRef!.height)
        var resizeWidth:Int = 0, resizeHeight:Int = 0
        
        if (origWidth < origHeight) {
            resizeWidth = w
            resizeHeight = origHeight * resizeWidth / origWidth
        } else {
            resizeHeight = h
            resizeWidth = origWidth * resizeHeight / origHeight
        }
        
        let resizeSize = CGSize.init(width: CGFloat(resizeWidth), height: CGFloat(resizeHeight))
            
        UIGraphicsBeginImageContext(resizeSize)
        
        image.draw(in: CGRect.init(x: 0, y: 0, width: CGFloat(resizeWidth), height: CGFloat(resizeHeight)))
        
        let resizeImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        // 切り抜き処理
        
        let cropRect  = CGRect.init(x: CGFloat((resizeWidth - w) / 2), y: CGFloat((resizeHeight - h) / 2), width: CGFloat(w), height: CGFloat(h))
        let cropRef   = resizeImage!.cgImage!.cropping(to: cropRect)
        let cropImage = UIImage(cgImage: cropRef!)
        
        return cropImage
    }
```

## 実行結果

入力画像
![スクリーンショット 2014-11-30 22.00.06.png](https://qiita-image-store.s3.amazonaws.com/0/40146/18b93269-b6b2-50a7-f598-eaf8a5c845dc.png "スクリーンショット 2014-11-30 22.00.06.png")


出力画像(300x300)
![スクリーンショット 2014-11-30 22.01.06.png](https://qiita-image-store.s3.amazonaws.com/0/40146/f464b371-bd36-e2c4-94f4-1df55301e093.png "スクリーンショット 2014-11-30 22.01.06.png")


## 参考

* [[iPhone] 画像をリサイズする](http://blog.syuhari.jp/archives/1184)
* [How to crop the image in objective c?](http://stackoverflow.com/questions/18205672/how-to-crop-the-image-in-objective-c)
VCCW + StaticPress + Disqus + Github Pages で WordPress を無料ホスティングする


世間の流行りは Octopress + Github Pages で無料ブログホスティングらしいけど、あえて WordPress を使ってみる。
多少だけど WordPress に慣れてしまっているので。

## 方針

1. VCCW でローカルに WordPress を建てる
2. StaticPress プラグインを導入して、ブログを静的コンテンツに変換する
3. Github Pages にコミットする
4. そのままだとコメントを受け取れないので、Disqus を導入する

ぶっちゃけこれで終わりなんだけど、備忘録的な意味も込めて。

### 1. VCCW でローカルに WordPress を建てる

[公式](http://vccw.cc/)を参考にしてください。以上。
……というのはさすがにあれなので、Windows 環境の場合は、手前味噌ですが[こちらの記事](http://qiita.com/y-moriya/items/be85fe9e82c12a1d18d0)も参考にしてください。

### 2. StaticPress プラグインを導入して、ブログを静的コンテンツに変換する

[StaticPress](http://ja.staticpress.net/)は、WordPress サイトを静的 HTML に変換するためのプラグインです。（公式より引用）
つまりこのプラグインを使って、WordPress を静的HTMLやらなんやらに変換してやって、Github Pages でホスティングする、という流れ。

StaticPress のインストールはこれも[公式](http://ja.staticpress.net/static-setting/)を参考にすればすぐだと思います。
また、StaticPress は静的コンテンツの出力先ディレクトリを指定出来るので、次に Github にコミットすることになるリポジトリのディレクトリを Vagrant で sync_folder しておいて、そこに静的コンテンツを吐き出すようにしておくと、コミットが非常に楽になります。
まあホストからコミットせず、VCCWのゲストの中からコミットするなら、どこに吐いても変わりませんが。

### 3. Github Pages にコミットする

これはググればいくらでも出てくると思うので、省略。
簡潔に書くと、(username).github.io というリポジトリを Github で作成して、そこに2.で生成した静的コンテンツを push してやればOK。

### 4. そのままだとコメントを受け取れないので、Disqus を導入する

StaticPress の出力も Github Pages もあくまで静的コンテンツなので、そのままではブログへのコメントが受けられない。
Disqus を使えば、WordPress の外側（まあつまり Disqus 上）にデータを保持出来るので、コメントを受け取れるようになります。
WordPress への導入の仕方は「Disqus + WordPress」とかでググると出てくる。きっと。

### (補足) 5. ブログコンテンツの更新

記事を書いたりテーマを変えたりしたいときは、ローカルのVCCWで記事を投稿→StaticPressで再構築→コミット、の流れとなる。

## 結果

[こんな感じ](http://y-moriya.github.io/)のブログが出来上がった。
コード（StaticPressで静的に変換したもの）は[ここ](https://github.com/y-moriya/y-moriya.github.io)に置いてある。（見てもしょうがないだろうけど）

ローカルの WordPress をいじって記事を書くことになるので、常に同一マシンを手元に持っていないと、気軽にブログの更新が出来ないのが難点。（これを嫌がる場合はAWSのmicro instanceでも借りて、そこにWordPressを立てればよいと思う）
ただ、完全に無料で自分好みの WordPress を建てられるのは、結構メリットがあるんじゃないかな。

Octopress はイヤだとか、WordPress に慣れきってしまったけどサーバを借りるとかの費用は抑えたい……という人にはおすすめ。

欲を言えば StaticPress みたいな WordPress プラグインから直接静的出力→コミットまでワンボタンで出来て、かつVCCWにそれが最初から搭載されていれば最高なんだけど、誰かそういうプラグインとVCCWのブランチ作ってくれませんかね。
シナリオからteratermマクロを作りたい



`/*シナリオファイル名入力*/
regexoption "SJIS"
inputbox "input scenario file name" "scenario file name"
sce_file = inputstr
strmatch sce_file '\S.*\.scenario$'
if result = 1 then
	messagebox sce_file "scenario filename accepted"
else
	messagebox "bye!" "scenario filename denied"
endif`

`/*TTLファイル名決定*/
ttl_file = sce_file
strreplace ttl_file 1 '.scenario$' '.ttl'
messagebox ttl_file "scenario filename denied"`

`/*シナリオファイルオープン、TTLファイル作成*/
fileopen HDL_sce sce_file 0
filecreate HDL_ttl ttl_file`

`/*タグ定義*/
keyword_logwrite = 'logwrite'
keyword_sendln = 'sendln'
keyword_notouch = 'notouch'
TAG_NUM = 0`

`/*主処理*/`

`while 1
/*ファイル最後ならbreak*/
	filereadln HDL_sce line
	if result = 1 then
		break
	endif
/*TAG決定*/
	strmatch line keyword_logwrite
	if result=1 TAG_NUM=1
	strmatch line keyword_sendln
	if result=1 TAG_NUM=2
/*ファイル書き込み処理*/
	if TAG_NUM=0 then
		strmatch line keyword_notouch
		if result=1 then
			strreplace line 1 keyword_notouch ""
			filewriteln HDL_ttl line
		else
			filewriteln HDL_ttl line
		endif
	elseif TAG_NUM=1 then
		strmatch line keyword_notouch
		if result=1 then
			strreplace line 1 keyword_notouch ""
			filewriteln HDL_ttl line
		else
			strmatch line keyword_logwrite
			if result=1 filewriteln HDL_ttl "#13#10"
			newline = "logwrite "#39
			strconcat newline line
			strconcat newline #39
			strconcat newline "#13#10
			filewriteln HDL_ttl newline
		endif
	elseif TAG_NUM=2 then
		strmatch line keyword_notouch
		if result=1 then
			strreplace line 1 keyword_notouch ""
			filewriteln HDL_ttl line
		else
			strmatch line keyword_sendln
			if result=1 then
				newline = "logwrite "#39
				strconcat newline line
				strconcat newline #39
				strconcat newline "#13#10"
				filewriteln HDL_ttl newline
				filewriteln HDL_ttl "sendln "#39#39
			else
				filewriteln HDL_ttl "pause 1"
				newline = "sendln "#39
				strconcat newline line
				strconcat newline #39
				filewriteln HDL_ttl newline
			endif
		endif
	endif
endwhile`

`/*ファイルクローズ、終了*/
fileclose HDL_sce
fileclose HDL_ttl 
end`
[Swift] 画像とテキストを合成


Swiftで画像とテキストを合成するサンプルコード

## コード

```
func drawText(image :UIImage) ->UIImage
{
    let text = "Some text.."

    let font = UIFont.boldSystemFontOfSize(32)
    let imageRect = CGRectMake(0,0,image.size.width,image.size.height)
        
    UIGraphicsBeginImageContext(image.size);
        
    image.drawInRect(imageRect)

    let textRect  = CGRectMake(5, 5, image.size.width - 5, image.size.height - 5)
    let textStyle = NSMutableParagraphStyle.defaultParagraphStyle().mutableCopy() as NSMutableParagraphStyle
    let textFontAttributes = [
        NSFontAttributeName: font,
        NSForegroundColorAttributeName: UIColor.whiteColor(),
        NSParagraphStyleAttributeName: textStyle
    ]
    text.drawInRect(textRect, withAttributes: textFontAttributes)
        
    let newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext()

    return newImage
}
    
```

## 実行結果


![スクリーンショット 2014-11-30 18.45.17.png](https://qiita-image-store.s3.amazonaws.com/0/40146/4ebf1146-0e23-198a-74ba-08423cecb3f1.png "スクリーンショット 2014-11-30 18.45.17.png")

## 参考リンク

* [How to write text on image in objective-c iPhone?](http://stackoverflow.com/questions/6992830/how-to-write-text-on-image-in-objective-c-iphone)
* [Swift - Drawing text with drawInRect:withAttributes:](http://stackoverflow.com/questions/26201844/swift-drawing-text-with-drawinrectwithattributes)
railsでtypescriptとPhaser使うにはnodeが必要なのね


typescript-railsを使おうとしたら案外詰まったので書いとく

```
# Gemfile
gem "typescript-rails"
```

```
bundle
```

うごかねぇぇぇぇぇぇぇぇえええええええ

```
typescript-node requires node command, but it's not found. Please install it. Set TS_NODE environmental variable If you want to use node command in non-standard path.
```

node入れろってさ。
いや入ってるんだけど。うごかねぇ。

.bash_profileでパス通したら動いた。

で、Phaser使うにはどうしたら良いの？

```
git clone https://github.com/photonstorm/phaser
```

中のbuild/phaser.d.tsとbuild/phaser.jsをassets/javasctipt以下に移動して

```
# application.js.ts
///<reference path="phaser.d.ts"/>
//= require phaser
```

で動いた。
Yii2がきたぞ！ヤァヤァヤァ！



##Yii2って？
[yii2](https://github.com/yiisoft/yii2) とはPHPフレームワークYiiの最新バージョンで、Yiiの高速な動作、拡張性をそのままにモダンなPHPを取り入れた最新のウェブアプリケーションフレームワークです。

Yiiという名前は、「イー」と発音します。中国語の「シンプル」「発展」という単語を由来とし、また、「Yes! It Is」の頭文字も兼ねています。（このフレームワークはセキュアなの？ちゃんと使えるの？といった質問に対しての答えだそうです）

## Yii2の特徴
* PHP5.4以上のモダンなPHP環境で動作します
* オーソドックスなフルスタックMVCフレームワークです。様々なフレームワークやCMSに影響を受けていますが、基本的なコードはRubyOnRailsによく似ています
* DBやキャッシュを幅広くサポートしています。RDBとNoSQLの両方を標準
でサポートしています。
* IDEでの開発に最適化されています

## 他のフレームワークから乗り換えるメリットはあるの？

昨今、モダンPHPフレームワークはYiiだけにとどまりません。Laravel4やPhalcon、CakePHP3もまもなくリリースされようとしています。
そんなPHPフレームワーク群雄割拠時代においてYii2を選ぶべき理由というのは…多分ありません。どのフレームワークも志向が異なりますし、そのフレームワークでなければ作れないシステムなんてこともそうそうあり得ません。究極的には好みなのですが、フレームワークを採用する場合、往々にしてそのフレームワークと心中する覚悟が問われます。（極論）ですので、できるならば、(将来性等あるにせよ)自分の思想と相性の良いフレームワークを選びたいとこですね。


## Yii2を選ぶときに見たい所
しかしあとはお前の好きにしろよというのもあんまりなので、Yii2の機能からいくつか見所をピックアップしてみます

### ミドルウェアのサポート
Yii2は標準で多くのDB・キャッシュをサポートしています。

####DB

* MSSQL
* MySQL
* Oracle
* PostgreSQL
* SQLite
* mongodb<sup>*</sup>

####Cache
* MemCache
* WinCache
* XCache
* ZendDataCache
* Redis<sup>*</sup>

<sup>*</sup>標準で内蔵はしておらずyiisoft公式のエクステンションで提供

なんだかぜんぜん知らないのもありますね。どれだけ有用かはちょっとわからないですけど。それでもRDBを幅広くサポートしているのは環境を選ばないですし。mongodbでも同じActiveRecordが利用できるというのはポイント高いです

### RESTコントローラ
Laravelにもあった気がしますが、YiiもREST専用コントローラがあります

```php:controller
namespace app\controllers;

use yii\rest\ActiveController;

class UserController extends ActiveController
{
    public $modelClass = 'app\models\User';
}
```

と書くだけでRESTっぽい各種メソッドが利用できます。REST実装もしっかりしていて、PUTとPATCHはどちらでも使えますし、HEADやOPTIONSといったメソッドもサポートしています。HATEOASもサポート。

mongodbのフロントになるAPIとか秒速で実装出来ますね！

### IDEフレンドリー
Yii2はIDEで補完がしやすいような作りになっています。Cake3もこのへんはとても気を遣っているようです。
IDEではなくテキストエディタで開発している人も多いと思いますが、PHPは動的言語の中でも一際IDEの恩恵が大きい言語です。PHPはrubyにくらべ非常に不自由な言語であると言われたりしますが、rubyほど自由すぎない文法は静的解析の結果がrubyのそれに比べて非常に正確になるという特徴があります。

それでもって静的解析の何が良いって、補完が効くことです。メトリクスの測定なんてどうでもいいんです！IDEでコーディングしながら適切な候補が補完されることが重要なんです！(※個人の感想です)

複数人開発でのその効能は顕著で、クラス名とメソッド名と引数名が適切で補完候補が十分に絞れればドキュメントを読まずともスイスイコーディングできます(※個人の感想であり、効果には個人差があります)

補完ができるということは定義へジャンプができるということなので(マジックメソッドとかを駆使してなければ)実装を追いかける際もとても捗ります。

IDEで開発する際はぜひ意識したい点です。

### Railsっぽい感じ
yiiとcake2はコンパチRailsみたいな感じがありましたが、cake3がよりPHPらしい方向へシフトしてYii2はPHPフレームワークのなかでも非常にRailsに近しいようなフレームワークになったと思います。

PHPを書く羽目になっていまにも絶望の果てに魔女に身を落としそうなRubyistの皆様にはご一考の価値が有るのではないでしょうか


### 豊富っぽい拡張
海外では結構人気あるので[拡張機能](http://www.yiiframework.com/extensions/?tag=yii2)が続々開発されています。 
無印の頃から即物的な拡張が多くて数が多けりゃ使えるかと言われるとそんなことはない


### 英語
現時点で日本語ソースはあんまり無いためその辺は覚悟が必要です。ただし公式ドキュメントは猛烈に[翻訳](https://github.com/yiisoft/yii2/tree/master/docs/guide-ja)されているので安心です



Yii2AdventCalendarの1日目ということでYii2の駆け足気味な紹介でした！
TableViewをPullして値を更新する方法(Pull to Refresh)


Twitterなどにある、TableViewを下に引っ張るとクルクル回り、更新をしてくれる処理が[Add Pull to Refresh to Table View in iOS8 with Swift](http://www.ioscreator.com/tutorials/add-pull-to-refresh-table-view-ios8-swift?utm_content=buffer45bac&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer)にありましたので、それをStoryBoardを使わずに実装しました。この例では配列の値を逆順にすることをしています。


##環境 
OX 10.10
Xcode 6.1 (6A1046a)

##コード
```swift:ViewController.swift
import UIKit

class ViewController: UITableViewController {
    var alphabet = ["A","B","C","D","E","F","G","H","I"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView = UITableView()
        self.tableView.frame = CGRect(x: 0.0, y: 0.0, width: self.view.bounds.width, height: self.view.bounds.height)
        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
        
        var refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: Selector("sortArray"), forControlEvents: UIControlEvents.ValueChanged)
        self.refreshControl = refreshControl
    }
    
    // alphabetを逆順にする。
    func sortArray() {
        var sortedAlphabet = alphabet.reverse()
        
        for (index, element) in enumerate(sortedAlphabet) {
            alphabet[index] = element
        }
        
        self.tableView.reloadData()
        self.refreshControl?.endRefreshing()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // Return the number of sections.
        return 1
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // Return the number of rows in the section.
        return alphabet.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
        
        // Configure the cell...
        cell.textLabel?.text = alphabet[indexPath.row]
        return cell
    }
}
```

UITableViewControllerを使わずに,UIViewControllerとUITableViewで初めは実装をした(参考: http://qiita.com/ktsujichan/items/5d69c6ac1c4ddb109247) のですが、うまくいかなかったので今回はこの書き方で。
Mac版 Cocos Studio 2で作成したGUI(.csb)ファイルをcocos2d-xへ読込み、ButtonとSliderにイベントを追加し利用する。

#Headerファイル
```lang:Scene.cpp
#include "cocostudio/CocoStudio.h"
#include "cocosGUI.h"
```
*cocostudioって名前間違えやすいから注意

#.csbファイルの読込

```lang:Scene.cpp

//3.3以降は、createNode   
auto node = CSLoader::getInstance()->createNodeFromProtocolBuffers("Scene.csb");

node->setName("NODE");
this->addChild(node);
```
*Scene.csbをCocos Studio 2でつくっておく。後述するButtonとSliderも追加しておく。名前はそれぞれ"BTN"と"SLD"とした。
*nodoの名前を"NODE"と付けておいて、別の場所で参照できるようにしてある。

#Buttonにイベントを追加
```lang:Scene.cpp

auto* btn = dynamic_cast<Button*>(this->getChildByName("NODE")->getChildByName("BTN"));
btn->addTouchEventListener([this](Ref* pSender, ui::Widget::TouchEventType type){
        
    //touch
    if (type == ui::Widget::TouchEventType::ENDED) {
        //好きな処理
    }
});
```
*Cocos Studio 2の方でつくったボタンの名前を"Button"と付けてある
*イベントリスナーは、ラムダ式で書いている。thisをキャプチャしておかないと、クラス内の別の関数が呼べない。

#Sliderにイベント追加

```lang:Scene.cpp
Slider* slider = dynamic_cast<Slider*>(this->getChildByName("NODE")->getChildByName("SLD"));
slider->addEventListener([this](Ref *pSender, Slider::EventType type){
        
    if (type == Slider::EventType::ON_PERCENTAGE_CHANGED)
    {
        Slider* slider = dynamic_cast<Slider*>(pSender);
        int percent = slider->getPercent();
        CCLOG("percent:%d",percent);
    }
});
```
*Sliderのイベントは、ボタンのTouchEventと違うので注意する。
gem 'restful_error' をリリースしました

シングルページアプリケーションを書く時にいっつも似たようなコードを書いていたので、勢い余って gem にしました。
# 使い方

```ruby:Gemfile
gem 'restful_error'
```
以上。

そうすると、

```ruby
def show
  @post = Post.find(param[:id])
end
```
みたいなアクションがあったとして、 ```GET /posts/10.json``` すると

```
{ status_code: 404, response_message: "要求されたリソースが存在しません"}
```
みたいに json がちゃんと返ってくる。(もちろん status code は404)
他のステータスも自由に raise できる。

```ruby
class PostsController < ApplicationController
  before_action do
    raise RestfulError[401] unless current_user
    # or
    raise RestfulError::Unauthorized unless current_user
  end
end
```

自分でエラーを定義する時は、継承するか

```ruby
class ::NoSession < RestfulError[404]; end
# or
class ::NoSession < RestfulError::NotFound; end
```

http_status メソッドを定義して Helper を include する

```ruby
class OAuthController < ApplicationController

  # all you need is status_code
  class RequireTwitterLogin < StandardError
    include RestfulError::Helper
    def http_status = :unauthorized # or 401 
  end
end
```

## response のカスタマイズ
デフォルトで、 html, json, xml に応答する。
response_message のとこは

```yml:config/locales/restful_error.yml
ja:
  restful_error:
    active_record/record_not_found: 要求されたリソースが存在しません
    not_found: ページが存在しません
```
で設定可能。
```active_record/record_not_found``` は ```ActiveRecord::RecordNotFound``` 専用、 ```not_found``` は 404 エラー汎用となる。

response_message は `include Helper` で追加されるが、メソッド定義を上書きするか、 `@response_message` に値を入れれば優先される 。

```ruby
class RequireLogin < StandardError
  def initialize(provider = 'Unknown')
    @provider = provider
  end
  def http_status
    :unauthorized
  end
  def response_message
    I18n.t('restful_errors.require_login', provider: provider)
  end
end
```

以下のいずれかを置いておけば、レスポンスを柔軟にカスタマイズ出来る。

- ```views/restful_error/show.html.erb```
- ```views/restful_error/show.json.jbuilder```
- ```views/restful_error/show.xml.erb```

(もちろん haml でも rabl でもそこはご自由に)

# 中身の話

```ActiveRecord::RecordNotFound``` が raise された時にステータスコードがちゃんと 404 になる仕組みが Rails にもともとあって、これは ```config/application.rb``` とかで

```ruby
config.action_dispatch.rescue_responses.merge!(
  'MyGreatError'   => :not_found,
```
としておくと、 ```raise MyGreatError``` で 404 を返してくれる。
resutful_error は `http_status` がなくてもここからステータスを取っており、
```ActiveRecord::RecordNotFound``` ではちゃんと 404 になるし、 ```ActiveRecord::RecordInvalid``` ではちゃんと 422 になる。

ステータスコードのリストみたいなのどっかにないかなーと思ったら `Rack::Util` にあったのでそれを使ってます。
全てのステータスコードにシンボルが対応していて、数字でもシンボルでもどっちでも使えるようになっている。便利。

例外には message メソッドがあるのだけどこれは i18n に対応していないので使用しない。クラス名、 reason phrase (404 なら not_found みたいなやつ) の順に i18n のキーを検索して適用することにしている。

# FAQ
## どこがrestfulやねん
すいません、誇大広告です。
いちおう気持ちとしては、'RESTってhttpのURLとかメソッドとかを、ちゃんと本来の意味で使おうね' っていう運動だと理解しており、適切なステータスコードで結果を返すのもその方向性だろうと思って、この名前にしています。 

# ツッコミをお待ちしております
https://github.com/kuboon/restful_error
Lambdaからhttpリクエスト

#Lambdaからhttpリクエスト
この記事は[AWS Lambda Advent Calendar 2014](http://qiita.com/advent-calendar/2014/lambda/about)へのエントリー記事です。

Lambdaでは、node.js標準のモジュールが利用可能です。これを利用してhttpリクエスト[\[1\]][link-1]を実行してみました。

http://aws.amazon.com/lambda/faqs/
Q: What languages does AWS Lambda support?
At launch AWS Lambda supports code written in Node.js (JavaScript). Your code can include existing Node.js libraries, even native ones.

## Function
```lang:
var http = require ('http');
exports.handler = function(event, context) {
    console.log('value1 = ' + event.key1);
    http.get("http://www.google.com/index.html", function(res) {
        console.log("Got response: " + res.statusCode);
        
        res.on("data", function(chunk) {
            context.done(null, chunk);
        });
    }).on('error', function(e) {
        context.done('error', e);
    });
};
```

## 出力
```
Logs
----
START RequestId: 8e2c889c-74a0-11e4-b6d0-73063f569a63
2014-11-25T12:42:57.815Z	8e2c889c-74a0-11e4-b6d0-73063f569a63	value1 = value1
2014-11-25T12:42:57.968Z	8e2c889c-74a0-11e4-b6d0-73063f569a63	Got response: 200
END RequestId: 8e2c889c-74a0-11e4-b6d0-73063f569a63
REPORT RequestId: 8e2c889c-74a0-11e4-b6d0-73063f569a63	Duration: 221.39 ms	Billed Duration: 300 ms 	Memory Size: 128 MB	Max Memory Used: 10 MB	

Message
-------
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head><meta content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly 
...
```

## 終わりに
コールバックに初挑戦しました。動くものができるまで、様々な紆余曲折がありました。

## 参考文献
\[1\] http://nodejs.org/api/http.html#http_http_get_options_callback
[link-1]: http://nodejs.org/api/http.html#http_http_get_options_callback
さくらVPSのDebian環境にRails環境を構築した時のメモと、その後のRailsアップデート作業について


こんにちは。何気にQiita初投稿のジャックです。後輩からはよくカズさんと呼ばれています。

さて、今回の記事は、タイトルそのままなんです。
最近、後輩の <a href="http://qiita.com/n0bisuke">@n0bisuke</a> と <a href="http://qiita.com/otukutun">@otukutun</a> と開発をしておりまして、その時のサーバ環境構築メモを残しておきます。


## まずは、RubyとRailsをインストールしよう

これ実は以前、はてなブログに書いた時のメモなんです。
去年の記事ですねｗ ごめんなさいｗ
http://kazuhiko.hateblo.jp/entry/2013/12/05/220717

一応、再掲します。基本的に下記コマンドを入力すればインストールできます。

```
$ sudo apt-get install build-essential
$ sudo apt-get install git
$ sudo apt-get install libssl-dev
$ sudo apt-get install libsqlite3-dev
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ source .bashrc
$ rbenv install 2.0.0-p353
$ rbenv global 2.0.0-p353
$ gem install rails
$ rbenv rehash
```

だがしかし、こちら去年の記事なんですよね。
さすがにRailsのバージョンが上がっている訳でして、、
現行サーバにインストールされているRailsはバージョンが3系なのですが、
今回開発に利用するバージョンは4系を使います。
つまり、Railsのアップデート作業が必要になります。

## Railsのバージョンをアップデートしてみる

下記コマンドを入力して、アップデート作業を開始。

```
$ gem update --system # gemを最新にしつつ
$ gem install rails --no-ri --no-rdoc -V # Railsインストールしてからの
$ rbenv rehash # 反映します
$ rails -v # 最後にバージョンを確認して終了
```

## 使い方（ざっくり）
### Railsプロジェクトを作成
```
$ rails new sample
```
### Gemfileを変更
```
$ cd sample
$ vi Gemfile
```

Gemfileを開いて下記のようにtherubyracerのコメントアウトを外します。

```
# gem 'therubyracer', platforms: :ruby
gem 'therubyracer', platforms: :ruby
```

その後下記コマンドでbundleをインストールする。

```
$ bundle install
```

### Railsサーバ起動
最後にRailsサーバを起動して動作確認して終了です。

```
$ rails server
```

これできっと幸せになれると思います。
ファイルを保存するたびに自動でテストを実行する


# はじめに
[前回](http://qiita.com/135yshr/items/0e14082cf3a8e654964c)、GO言語のソースファイルを保存したときに自動的にテストしてくれるツールがあったので、使い方を書きました。
使用したツールは[guard-go](https://github.com/victorcoder/guard-go)でしたが、全体でいくつ実行して、いくつ失敗したのか分からないといちいちコンソールを見て想定通りになっているか確認しなければならず、ちょっと不便に思えたので、guardのプラグインを作成しました。リポジトリは[こちら](https://github.com/135yshr/guard-gospel)

# どんなプラグインなのか？
[guard-go](https://github.com/victorcoder/guard-go)同様、保存するたびに自動で go test を実行し、成功すれば success を表示します。失敗したときは、実行したテストの総数と失敗したテストの数を返します。

## 成功したときに表示されるメッセージ
![success.png](https://qiita-image-store.s3.amazonaws.com/0/29968/a7ecbe9b-3045-5eb2-c9c4-4179de170a18.png "success.png")


## 失敗したときに表示されるメッセージ
![fail.png](https://qiita-image-store.s3.amazonaws.com/0/29968/b020eb7a-84e8-1c09-5e41-63eedad90559.png "fail.png")

## 注意点
作成したプラグインは、goのテスティングフレームワーク Gospel にのみ対応しています。

# 使用するツール

* Sublime Text 3:テキストエディタ
* GoSublime:Sublime Text 3 のプラグイン
* gospel:Rspec風のテスティングフレームワーク
* bundler：Rubyのgemパッケージ管理ツール
* rake：Rubyのビルドツール
* guard-go:ファイル監視ツール

# 前提条件

既に下記のツールや実行環境がインストール済みであることを前提とします。

1. [Sublime Text 3](http://www.sublimetext.com/3)
2. [GoSublime](https://github.com/DisposaBoy/GoSublime)
3. [gospel](http://r7kamura.hatenablog.com/entry/2013/10/06/231236)
4. [Ruby](https://www.ruby-lang.org/ja/)

# guard-gospel のセットアップ
## インストール

```
git clone https://github.com/135yshr/guard-gospel.git
cd guard-gospel
sudo rake install
```

## 初期化

```
bundle exec guard init gospel
```

## サンプルコード
```helloworld_test.go
package go_gospel

import (
	. "github.com/r7kamura/gospel"
	"testing"
)

func TestSpec(t *testing.T) {
	Describe(t, "Hello World を取得するクラス", func() {
		Context("Hello Worldを取得する", func() {
			It("関数を呼び出しHello World!をが取得できる", func() {
				sut := &HelloWorld{}
				Expect(sut.say()).To(Equal, "Hello World!")
			})
		})
	})
}
```

```helloworld.go
package go_gospel

type HelloWorld struct{}

func (self *HelloWorld) say() string {
	return "Hello World!"
}
```
knifeのzオプションについて



```
$ knife data bag create passwords

ERROR: Your private key could not be loaded from /etc/chef/client.pem
Check your configuration file and ensure that your private key is readable
```

data bagをいじっていて、鍵の場所があっていないと怒られた。

ググってみると、-zというオプションを使うといいらしい。
とりあえず、knifeのhelpを参照する。

```
$ knife -h

Usage: knife sub-command (options)
    -s, --server-url URL             Chef Server URL
        --chef-zero-host HOST        Host to start chef-zero on
        --chef-zero-port PORT        Port to start chef-zero on
    -k, --key KEY                    API Client Key
        --[no-]color                 Use colored output, defaults to false on Windows, true otherwise
    -c, --config CONFIG              The configuration file to use
        --defaults                   Accept default values for all questions
    -d, --disable-editing            Do not open EDITOR, just accept the data as is
    -e, --editor EDITOR              Set the editor to use for interactive commands
    -E, --environment ENVIRONMENT    Set the Chef environment (except for in searches, where this will be flagrantly ignored)
    -F, --format FORMAT              Which format to use for output
    -z, --local-mode                 Point knife commands at local repository instead of server
    -u, --user USER                  API Client Username
        --print-after                Show the data after a destructive operation
    -V, --verbose                    More verbose output. Use twice for max verbosity
    -v, --version                    Show chef version
    -y, --yes                        Say yes to all prompts for confirmation
    -h, --help                       Show this message
```

-zはknifeコマンドをサーバではなく、ローカルのレポジトリ参照してくれるようだ。

```
$ knife data bag create passwords -z

Created data_bag[passwords]
```

これで、/etc/chef/client.pemではなくchef-repo内の鍵を使ってくれたみたいだ。

↑でもこれは、鍵がchef-repoの中に入ってるから、あまり健全じゃないかも。
【Oracle Bronze（1Z0-017J SQL基礎Ⅰ）】備忘録01〜RDB〜


##SQLの種類

###DML（データ操作文）
表に対して、新しい行の追加、既存の行の更新や削除、データの検索を行う。

| SQL |内容|
|:-----------|:------------|
| INSERT | 行新規挿入 | 
| UPDATE | 値の更新 | 
| DELETE | 行の削除 | 
| MERGE | 行のマージ | 
| SELECT | データの検索（Query） | 


###DDL（データ定義文）
オブジェクトを作成、変更、削除する。


| SQL |内容|
|:-----------|:------------|
| CREATE | オブジェクトの作成 | 
| ALTER | オブジェクトの変更 | 
| DROP | オブジェクトの削除 | 
| RENAME | オブジェクトの名の変更 | 
| TRUNCATE | 表の切り捨て | 



###DCL（データ制御文）

データベースに対するアクセス権限を付与削除


| SQL |内容|
|:-----------|:------------|
| GRANT | 権限付与 | 
| REVOKE | 権限削除 | 


###トランザクション制御

データベースに対するアクセス権限を付与削除

| SQL |内容|
|:-----------|:------------|
| COMMIT | 更新の確定 | 
| ROLLBACK | 更新の取り消し | 
| SAVEPOINT | セーブポイントの設定 | 



##ポイント

- SQLは、ANSI、ISO、JISなどで標準化されている構造化問合言語
- SQLは、DML、DDL、DCL、トランザクション制御の4種類に分類出来る

##Oracleダウンロード先
https://blogs.oracle.com/oracle4engineer/entry/column_xe_11g1
http://www.indonesia-japan.com/oracle/
https://www.youtube.com/watch?v=0NLsJQCvKXY
このRパッケージがすごい2014

2014年に使用したRパッケージのなかで、個人的に**これはすごい**と思ったパッケージを５つ厳選しました。順序不同で紹介します。

各パッケージの紹介記事をRPubsに公開しましたので、こちらからご覧ください。

* [`magrittr`](http://rpubs.com/uri-sy/demo_magrittr)
* [`dplyr`](http://rpubs.com/uri-sy/demo_dplyr)
* [`stringr`](http://rpubs.com/uri-sy/demo_stringr)
* [`ggplot2`](http://rpubs.com/uri-sy/demo_ggplot2)
* [`knitrBootstrap`](http://rpubs.com/uri-sy/demo_kinitBootstrap)

先日の統計数理研究所で開催された[R研究集会](http://prcs.ism.ac.jp/useRjp/hiki.cgi?2014%C7%AF%C5%D9+%A5%C7%A1%BC%A5%BF%B2%F2%C0%CF%B4%C4%B6%ADR%A4%CE%C0%B0%C8%F7%A4%C8%CD%F8%CD%D1)にて石田さんの発表にもありましたが、やはりpipe演算子の登場は大きなインパクトでした。また、RStudioの開発が進み、アウトプット方法に多様性がもたらされ、充実してきています。

個人的な点では羽鳥教へ入信したことがRの上達につながった2014年でした。

## あなたの「このパッケージがすごい」は？

便利なパッケージがあればぜひ教えてください。

海外の方の記事 -> [[ŷhat | 10 R packages I wish I knew about earlier](http://blog.yhathq.com/posts/10-R-packages-I-wish-I-knew-about-earlier.html)](http://blog.yhathq.com/posts/10-R-packages-I-wish-I-knew-about-earlier.html)

こちらもどうぞ -> [Top 100 R packages for 2013 (Jan-May)! | R-statistics blog](http://www.r-statistics.com/2013/06/top-100-r-packages-for-2013-jan-may/)

## ちらしのうら

QiitaにR Advent Calendarがない！と思って作ってしまいましたが、Atndに[R Advent Calendar](https://atnd.org/events/58648)がありました。こちらのほうが充実しています！！
Ligntningコンポーネントをデプロイする


開発者コンソールで開発するようにLightning Components Developer's Guideに書いてあるが、LightningコンポーネントもAntからデプロイできるようになっている。

### ソースコードを準備する
```bash:ソースコード
src
 |--sampleCmp
    |--sampleCmp.cmp
    |--sampleCmp.css
    |--sampleCmpController.js
    |--sampleCmpHelper.js
````

### package.xmlを準備する
```xml:src/package.xml
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>sampleCmp</members>
        <name>AuraDefinitionBundle</name>
    </types>
    <version>32.0</version>
</Package>
```

### Salesforce移行ツールでデプロイする
```xml:build.xml
<project name="LightningSample" default="deploy" basedir="." xmlns:sf="antlib:com.salesforce">
  <property file="build.properties"/>
  <property environment="env"/>

  <target name="deploy">
    <sf:deploy username="(ユーザID)" password="(パスワード)" serverurl="https://login.salesforce.com" deployRoot="src"/>
  </target>
</project>
```

```bash
> ant deploy
```

## 注意ポイント
- Developers ConsoleだとSave時にエラーになるソースコードでもデプロイできてしまう
- ApplicationとComponentのような排他的なファイルも同じディレクトリに置けてしまう（デプロイできるのは片方のみ）

## 参考URL
* [Metadata API Developer's Guide
Reference>Metadata Types>AuraDefinitionBundle](https://www.salesforce.com/us/developer/docs/api_meta/index_Left.htm#CSHID=meta_auradefinitionbundle.htm|StartTopic=Content%2Fmeta_auradefinitionbundle.htm|SkinName=webhelp)
ワイルドカード自己証明書の作成


# 概要

重要な情報をWebサイト経由でやりとりする場合、
SSL通信(https)で暗号化したいと思う時がある。

これにはSSL証明書が必要で、
SSLサーバ証明書屋からサーバ証明書を購入するのが普通です。

しかし、会社内や特定のメンバー内だけで利用するサーバであれば、
必ずしも証明書屋から証明書を購入する必要はない。
証明書屋から買わずに自前で証明書屋を作って自前で証明書を発行すればOK。

そこで、無料で作成できるワイルドカード自己証明書の作成手順を紹介する。
※ワイルドカード自己証明書にすることでサブドメインでも新たに自己証明書を作成する必要がなくなる


## そもそもSSLサーバ証明書とは？
ウェブサイトの所有者の情報、送信情報の暗号化に必要な鍵、発行者の署名データを持った電子証明書のこと。 SSLサーバ証明書には主に下記二つの役割がある。
1. 証明書に表示されたドメイン（サーバ）の所有者であることの証明
2. ブラウザとウェブサーバ間でのSSL暗号化通信の実現

これによりサイトの訪問者は『情報の送信先』や『送信する情報が暗号化されること』を確認することができ安心して情報を送ることができる。

## ワイルドカード自己証明書作成手順

### ポイント

* CSRでワイルドカードを指定する
* この手順で有効なサブドメインはwww.example.comやmail.example.comで、ドットが入ったwww.test.example.comなんかには対応していない

### 手順

以下の3つのコマンドで作成可能。(カレントディレクトリに作成)

<pre>
$ openssl genrsa -out server.key 1024
</pre>
<pre>
実行例
Generating RSA private key, 1024 bit long modulus
......++++++
......................................................++++++
e is 65537 (0x10001)
</pre>

<pre>
$ openssl req -new -key server.key -out server.pem -sha1
</pre>
<pre>
実行例
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code)[AU]:　【JP:国名】
State or Province Name (full name)[Some-State]:【Tokyo:都道府県名】
Locality Name (eg, city)[]:【Chofu-shi:市区町村】
Organization Name(eg, company)[Internet Widgits Pty Ltd]:【bnote:組織名(法人名)】
Organization Unit Name (eg, section)[]:【System:部署名】
Common Name (eg, your name or your server's hostname)[]:*.example.com【サーバのホスト名(FQDN)だが、今回はワイルドカードにする】
Email Address []:【master@sample.jp:メールアドレス】

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:【適当なパスフレーズ】
An optional company name []:【パスフレーズの確認】
</pre>

<pre>
$ openssl x509 -in server.pem -out server.crt -req -signkey server.key -days 365 -sha1
</pre>
<pre>
実行例
Signature ok
subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd
Getting Private key
</pre>

作成完了！
Dartをはじめよう

この記事は[Dartアドベントカレンダー](http://qiita.com/advent-calendar/2014/dart)の1日目として書かれたものです。

----

こんにちは、らこです。Dartアドベントカレンダー初日ということでまずは「Dart興味あるけど何から始めたらいいの？」っていう方向けに、開発環境の作り方をおさらいしようと思います。

# DartEditorを使う
今までにWeb開発をしたこともなく、手元に何の開発環境もない！という方は、まずDart公式に配布されているDartEditorを使ってみるのがオススメです。

DartEditorはDartSDKと一緒にダウンロードできます。

インストール方法は以下

1. [公式サイト](https://www.dartlang.org/tools/download.html)からOSに合わせたDart + Editorをダウンロードする
2. 好きなところに展開する(Linuxなら`~/dart`になるよう置くといいと思う)

簡単ですね。

ダウンロードしたアーカイブにはDartSDKと、DartEditorと、Dartiumが含まれています。DartiumというのはDartをネイティブに実行できる用にカスタマイズされたChromiumで、開発時に使うためのテスト・デバッグ用ブラウザです。

DartEditorを起動するには`.../dart/DartEditor`(Windowsなら`DartEditor.exe`)を実行します。
![image](https://qiita-image-store.s3.amazonaws.com/0/20253/809166e4-ad15-23b0-296c-f8bd22ce42b7.png)

DartEditorはJava用IDEであるEclipseを元に作られたIDEですが、似ているのは見た目だけで機能は結構違います。まだ未熟な部分も多く、正直言ってエディタとしてはなかなか使いづらいですが、Dartの静的解析においては現状DartEditor以上に正しく解析できるエディタはありません。新規プロジェクトのテンプレートも充実しており、PolymerDartを使ったWebアプリやChromeAppの開発、モバイルでのデバッグすら可能です。

初めて起動した時はHello World用のプロジェクトがすでに開かれていると思うので、実行してみましょう。プロジェクト中のsample.htmlを右クリックして、「Run in Dartium」をクリックしましょう。Dartiumが立ち上がり、サンプルアプリケーションが動くはずです。

![image](https://qiita-image-store.s3.amazonaws.com/0/20253/80961e54-aaa7-071b-68c0-a891c5d0ee9e.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/20253/6d07fe47-3354-bbdd-fc48-2fac5575890a.png)

# ChromeDevEditorを使う
ChromeDevEditor(CDE)は、DartチームがDartiumとは別に開発している新しいJavaScriptとDartの為のエディタです。その名の通りChromeAppとしてインストールするので、今話題のChromebookでも使用することが出来ます(というかChromebookでDart書きたいが為に生み出されたエディタ)。CDEはそのエディタ自体もDartで書かれており、[GitHub](https://github.com/dart-lang/chromedeveditor)でオープンソースソフトウェアとして公開されています。

導入は[Chromeストア](https://chrome.google.com/webstore/detail/chrome-dev-editor-develop/pnoffddplpippgcfjdhbmhkofpnaalpg)からインストールするだけです。

未だdeveloper previewで、不安定だったりバグがあったり使いにくかったりしますが、割と活発に開発は進んでいるようなのでDartEditorが使いにくいなと思った方は試してみてください。DartEditor以上に充実したプロジェクトテンプレートで、あっという間に簡単なアプリが作れます。

ちなみにCDEはWindowsで`pub get`が出来ないので、今はWindowsではDart開発できません。マルチプラットフォームを目指しているのでいつか改善されると思います。

![image](https://qiita-image-store.s3.amazonaws.com/0/20253/859595cb-979e-ad66-268c-a1cc01441fc5.png)

# WebStormを使う
もしあなたがWebStormを使っているのであれば、現状では最高の開発環境でDartを書くことが出来ます。WebStormはバージョン8からDartのWebアプリ開発が公式サポートされ、最新のバージョン9では新たにコンソールアプリの開発もサポートされました。JetBrainsIDEの強力なエディタ機能や入力補完でDartを書けばもうDartEditorには戻れません。私もずっとDartはWebStormで書いています。

WebStormの公式サポートとはいえDartチーム謹製ではないので、静的解析についてはDartEditorやCDEには未だ及びません。上記2つは`dartanalyzer`というこれまたDartで書かれたDart静的解析ツールを使っていますが、WebStormはプラグイン独自の静的解析を行っているので、「実際には動くのにWebStorm上では警告が出ている」ということもしばしばあります。今後の改善に期待しましょう。

# その他のエディタ
他にもDartを書けるエディタは増えてきています。Dart公式ブログの[こちらの記事](http://news.dartlang.org/2013/02/using-dart-with-sublime-text.html)ではSublime Text2のDartプラグインを紹介しています。公式エディタがDartEditorとCDEの2つあることからも、Dartは言語とエディタが切り離されたいわばポータブルな言語なので、入力補助等の機能を除けば、どんなエディタであっても出来ることは同じです。使い慣れたもので書くのが一番かもしれません。

----
以上、「Dartをはじめよう」でした。明日はnyamadandanさんの「Dart + WebGL」です。
WebStorm概論

こんにちは、らこです。
[WebStorm/PhpStormアドベントカレンダー](http://qiita.com/advent-calendar/2014/webstorm)の1日目は、「The smartest JavaScript IDE」と謳われる[WebStorm](https://www.jetbrains.com/webstorm/)の概要を説明し、今すぐWebStormを使いたくなっておもらおうと思います。

# 何が書けるの？
WebStormは「The smartest JavaScript IDE」の通り、JavaScriptによるクライアントサイドの開発と、Node.jsによるサーバーサイドの開発を主軸においています。もちろんHTMLやCSSも快適に記述できますがそれだけではなく、バージョンアップのたびに新しい言語やフレームワークを次々にサポートし続けています。最近のトレンドで言えば

- CoffeeScript
- CSS3
- Dart
- HTML5
- LESS / SASS / SCSS
- TypeScript
- JSX Harmony

等に対応しており、これからもどんどん増えていきます。WebStorm1つあればWeb開発はなんでも出来ます。

# 何がすごいの？
## とにかく補完がすごい
JetBrains製のIDEはとにかく補完がすごいです。JavaScriptでは標準APIの他、各種ブラウザごとのAPI、さらにプロジェクト中の自分のスクリプトの関数までもが補完候補に現れます。npnやbowerでインストールしたライブラリもすぐに補完候補に現れます。

![completion](https://www.jetbrains.com/webstorm/features/screenshots/new/js_completion.png)

## 静的解析がすごい
ソースコード中のおかしな点や修正すべき点はすぐにエディタ上に表示され、カーソルを合わせて「Alt-Enter」を押すだけで修正方法まで教えてくれます。例えば`node`というオブジェクトが見当たらない場合は、パラメータに追加するか、ローカル変数を作るか、名前を変えるかの選択肢を出してくれて、クリックすると自動で直してくれます。

![inspection](https://www.jetbrains.com/webstorm/features/screenshots/new/js_quickfix.png)

## ナビゲーションがすごい
WebStormは定義元の参照が強力です。たとえばAngularJSの依存性注入では、コード上は文字列であっても、解析して定義元を参照することができます。

![navi](https://www.jetbrains.com/webstorm/features/screenshots/new/js_gotodeclaration.png)

また、検索機能が充実しており、「Shiftキー2回」で開くSearch Everywhereを使うと、ファイルであろうと関数であろうとクラスであろうとWebStormの機能であろうと、なんでも検索して開くことが出来ます。しかも速いです。

![search](https://www.jetbrains.com/webstorm/features/screenshots/new/searcheverywhere.png)

# 動いてるところがみたい
[WebStorm 8: Mastering AngularJS, spy-js, Grunt, and Multi-Selection Workflows](https://www.youtube.com/watch?v=M1t4-rSG5Ts)

これはWebStorm 8の新機能を説明している動画です。これを見ると本当にWebStormを使いたくなってしまうので財布がピンチな方は見ないほうがいいかもしれません。

# 早く使いたい！
## 体験版
WebStormを早く始めたいという方もまずは30日の無料体験版で実際に使ってみることをおすすめします。体験版は[こちら](https://www.jetbrains.com/webstorm/download/)からダウンロードできます。体験版が気に入ったら、そのままライセンスキーを入力して製品版として使い続けることもできます。

## ライセンスを買う
お金を払ってもいいと思えた方はライセンスを購入しましょう。6000円以下でとってもお得、コストパフォーマンスは最高です。公式サイトから購入してもいいですが、日本で買う場合はJetBrainsの代理店である[サムライズム](http://samuraism.com/products/jetbrains/webstorm)さんから買うことをおすすめします。手続きも日本語で簡単ですし、為替の関係でちょっぴりお得に買えたりすることもあるかもしれません。個人の方は下の「パーソナルライセンス」の「新規」を選びましょう。ちなみに継続だと結構安いです。

----

以上WebStorm概論でした。この記事を読んでWebStormユーザーが増えたら嬉しいです。

明日はcrifffさんの「PhpStorm!」です。
WebGLでリアルタイム画像処理

#WebGLでリアルタイム画像処理

WebGL Advent Calender 1日目。
初投稿です、よろしくお願いします。
WebGLで画像処理やってみます。

今回施すのは以下のような画像の変換です。

 * セピア
 * ネガポジ
 * 色相の変更

![image_effect.jpg](https://qiita-image-store.s3.amazonaws.com/0/5907/03410ba3-09c0-1455-8d86-71b61c77f4cd.jpeg)
https://dl.dropboxusercontent.com/u/27815754/movie_effect/image_effect.html

WebGLは画像中の画素に対して並列演算を行うことに長けているので3Dだけでなくこういった応用ができます。

ソースコードはここに書き捨てていますので参考にしてみてください。
https://github.com/nyamadan/color_texture

## 仕組み

画素はR, G, Bの３成分を持ちます。

これをR', G', B'に変換します。
```f(R, G, B) -> R', G', B'```
(あまり詳しくありませんが、単射という関係になっているはず)

具体的な変換ですがR, G, Bを３次元ベクトルであると捉え、３次元テクスチャから画素をフェッチする方法をとります。
３次元テクスチャというのは聞きなれない言葉かもしれません。
通常私たちが使用しているテクスチャは２次元テクスチャです。
関係は以下のようにあらわせます。
```f(x, y) -> R, G, B```

一方で３次元テクスチャは以下の関係を持ちます。
```f(x, y, z) -> R, G, B```

得られる結果はどちらもRGBの３色の画素ですが、引数の数が異なっています。
キューブ状のテクスチャを想像していただければと思います。

さて、ここまで書いておいてあれですが、この３次元テクスチャはWebGL 2.0の機能です。
つまり現行仕様では使えない機能です。
そこで２次元テクスチャを横に並べることでキューブを作成し、対応させることにしました。
![default.png](https://qiita-image-store.s3.amazonaws.com/0/5907/f3868392-ec5d-0dd0-6e4f-86362e49a657.png)
基本となるのはこのテクスチャです。
正方形の上のほうが緑成分が強く、右のほうが赤成分が強いです。
そして右へいけばいくほど青成分が強くなっています。

たとえばセピア調の画像を作りたい場合はこの画像をPhotoShopなどでセピア調に変換すれば簡単にセピア調画像を作成することができます。
![sepia.png](https://qiita-image-store.s3.amazonaws.com/0/5907/6aba6883-6d6e-cd61-c58b-a257eb7e2ddc.png)
他にもグレースケールや明るさの変更などもテクスチャを作成すれば対応できます。

さて、シェーダを書くときの注意なのですが、前述したとおりWebGLはまだ3Dテクスチャに対応していません。
なのでXY方向の補間はともかく、Z方向の補間は自分でやる必要があります。
https://github.com/nyamadan/color_texture/blob/master/web/image_effect.dart#L76-L81

この手法のメリットですが、アルゴリズムを変更させずとも、
テクスチャを変更させるだけで様々な画像効果を表現することができます。
数式で表現が難しい変換でもこの手法であれば実現できます。

尚、この手法はGoogle IO/2011にて詳しく解説されています。
画像が不足している分はぜひこちらでご確認ください。
http://webos-goodies.jp/archives/webgl_session_at_google_io_2011.html

## テクスチャ画像

さて、もう一つ面白いことにお気づきになられたかと思います。
今回テクスチャに動画を使用しています。

テクスチャには`<video>, <img>, <canvas>`が使用できます。
つまり動画であってもテクスチャにすることができます。

ですが、幅と高さが2のn乗である動画なんて基本的にありえないので、一度Canvasに書き出してから使うのが便利です。
この場合、別ドメインの動画を使用した場合、Canvasが汚染された状態になり、テクスチャとして使用できなくなってしまうことがあるので注意が必要です。

https://developer.mozilla.org/ja/docs/Web/HTML/CORS_enabled_image

応用としてカメラ画像もテクスチャにすることができます。
これができるといろいろ夢が広がりますね。
![camera_effect.jpg](https://qiita-image-store.s3.amazonaws.com/0/5907/0eeabec6-06d2-4acf-8abe-07049c30b0af.jpeg)
https://dl.dropboxusercontent.com/u/27815754/camera_effect/image_effect.html
oO(なんかアスペクト比おかしい･･･)

## 終わりに

そういえば最近Dartにはまっております、ソースコードも全部Dartですね。
Dart Advent CalendarではなんでDart使ってるのかって理由書きたいと思っています、興味があればぜひご覧ください。

明日は @sakusan393 ですね。よろしくお願いします！

## 使用素材
動画はBig Buck Bunnyのトレイラーを使ってます
https://peach.blender.org/
http://creativecommons.org/licenses/by/3.0/
zshで初回起動したときに対話的にzshrcを作成する

zshを初回起動したときに、こんな画面が出てきたのを見たことある人も多いと思う。

![zsh_20141201.png](https://qiita-image-store.s3.amazonaws.com/0/204/3fb4b48c-b3ff-0890-e1d9-572c1229677d.png)

これはzshを初めて使うユーザのために、おすすめ設定を行うための画面だ。zsh-newuser-installというzshのシェルスクリプトでこの画面を表示してる。以下、この記事では「zsh-newuser-install画面」と呼ぶことにする。zshを使おうっていう人が最初に見ることになる画面なんだけど、けっこう分かりにくいのでここで解説する。

## どうやったらこの画面になるのか
zsh-newuser-install画面はzshの起動ファイルをまだ作成していないときに表示される。起動ファイルというのは、具体的には次の4つ。

- ~/.zshenv
- ~/.zprofile
- ~/.zshrc
- ~/.zlogin

この4種類のファイルが1つもないときにzshを起動するとzsh-newuser-install画面が表示される。逆に4つのうちどれか1つでもあったら表示されない。

## 選択肢の意味
zsh-newuser-install画面には次の4つの選択肢がある。

- q
- 0
- 1
- 2

このうち好きなやつを選ぶ。ここから、それぞれの選択肢の意味を解説する。

### qを選んだ場合
何もしない。~/.zshrcも作成されない。次回zshを起動したときも同じようにzsh-newuser-install画面が表示される。

### 0を選んだ場合
コメントだけを含む~/.zshrcを作成する。作成される~/.zshrcの例は以下の通り。

```zsh
# Created by newuser for 5.0.5
```

ほんとに単にコメントが1行あるだけ。自分で一から~/.zshrcを書きたい人向け。

### 1を選んだ場合
メインメニューに進む。このあとzshの個別の設定についてどうするか質問されるので、それに答えていって、その結果を元に~/.zshrcを作ってくれる。なんか操作しにくいし、はっきりいって面倒。

### 2を選んだ場合
おすすめの~/.zshrcを作成する。おすすめの~/.zshrcというのは/etc/zsh/newuser.zshrc.recommendedに書いてあるので、要するに`cp /etc/zsh/newuser.zshrc.recommended ~/.zshrc`してくれる。

けっこう妥当な設定が書いてあるので、これをそのまま使うのもそんなに悪くないと思う。たぶん内容はディストリビューションとかによって微妙に違うと思う。僕のUbuntu 14.04の場合の例は以下。

```zsh
# Set up the prompt

autoload -Uz promptinit
promptinit
prompt adam1

setopt histignorealldups sharehistory

# Use emacs keybindings even if our EDITOR is set to vi
bindkey -e

# Keep 1000 lines of history within the shell and save it to ~/.zsh_history:
HISTSIZE=1000
SAVEHIST=1000
HISTFILE=~/.zsh_history

# Use modern completion system
autoload -Uz compinit
compinit

zstyle ':completion:*' auto-description 'specify: %d'
zstyle ':completion:*' completer _expand _complete _correct _approximate
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' menu select=2
eval "$(dircolors -b)"
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' list-colors ''
zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
zstyle ':completion:*' menu select=long
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
zstyle ':completion:*' use-compctl false
zstyle ':completion:*' verbose true

zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'
```

これを元に自分なりに改造していくのもあり。

## まとめ
結局4つの選択肢のうちどれを選べばよいかをまとめると、

- 自分で全部設定したい人とか、コピペ用の~/.zshrcを使うつもりの人は0
- 設定とかよく分からないし、とりあえず無難な設定でzshを使ってみたい人は2

という感じになると思う。

最初に起動したときにいきなり聞かれて意味が分かりにくいけど、これを参考に選んでみるとよいと思う。
岩手を感じるWebサイトを紹介


こんにちは！Iwate Developers Advent Calendar 2014の初日を担当させていただく [@otukutun](https://twitter.com/otukutun) です。よろしくお願いします。

岩手と聞いて具体的に何か想像できる方も少ないと思います。そこで、今日は岩手を知れるWebサイトを３つ紹介します。

## いわてスイッチ

![いわてスイッチ.png](https://qiita-image-store.s3.amazonaws.com/0/14066/269ca0e2-8a57-dce5-c85b-5a5893ba5cac.png "いわてスイッチ.png")

[いわてスイッチ](http://iwate-switch.o-bit.biz/)

はじめに紹介するのが「いわてスイッチ」です。このサイトは、いわての絶景風景を見ることができます。遊び感覚でスイッチを押して、岩手を感じて見てください！


## 盛岡さんぽ


![盛岡のレストラン、カフェ、観光のブログサイト___盛岡さんぽ_and_岩手を感じるWebサイトを紹介.png](https://qiita-image-store.s3.amazonaws.com/0/14066/08183225-ce74-78f2-ef0c-020ee6c58734.png "盛岡のレストラン、カフェ、観光のブログサイト___盛岡さんぽ_and_岩手を感じるWebサイトを紹介.png")

[盛岡さんぽ](http://moriokasanpo.net/)

次は「盛岡さんぽ」です。このサイトは神戸生まれ東京育ち、盛岡歴2年のAkiさんが公開されているWebサイトになります。岩手の県庁所在地である盛岡の美味しいお店、きれいな場所、物を知ることができます。写真とサイトのデザインが落ち着いてて、盛岡の雰囲気を感じれます。

なんと、このサイトは本になって、BASE上で販売されているのでサイトを気になった方は購入を健闘してみてはいかがでしょうか。

[盛岡さんぽ購入ページ](http://moriokasanpo.base.ec/items/910135)


## 絶景スイッチ

![絶景スイッチ_小岩井農場_.png](https://qiita-image-store.s3.amazonaws.com/0/14066/9dd9d0b6-09a8-5342-2833-8e34a4f9dbe8.png "絶景スイッチ_小岩井農場_.png")

[絶景スイッチ](http://zekkei-switch.herokuapp.com)

最後は「絶景スイッチ」です。このサイトは岩手のみならず、日本全国の絶景ポイントの写真を見れるサイトです。開発者に要望を言えば、写真を集めてくれるとのことなので、こんな岩手の風景がみたい！という要望をぜひ伝えて頂ければと思います。


## おわりに
駆け足ではありましたが、岩手を知れるサイトを3つ紹介させていただきました。他にもこんなサイトあるんだという意見などありましたら、私までお伝え頂ければと思います＼(^o^)／

Let's Develop Iwate!!
CMake言語の基本構造

## はじめに

みなさん、こんにちは。CMake は、いろいろ使われているにもかかわらず、なぜか日本語の情報が少ないので、この Advent Clendar で言語仕様や Tips などを書いていこうかと思います。なお、対象となる CMake のバージョンは、基本的に現時点での最新の安定版、3.0.2 となります。


## CMake言語の基本構造

まず、CMakeの言語仕様を知るために、公式ドキュメントの [cmake-language](http://www.cmake.org/cmake/help/v3.0/manual/cmake-language.7.html) という言語仕様について書いてあるページを見てみました。

すると、CMake言語は以下のような構造になっていることがわかりました。

>     file         ::=  file_element*
>     file_element ::=  command_invocation line_ending |
>                       (bracket_comment|space)* line_ending
>     line_ending  ::=  line_comment? newline
>     space        ::=  <match '[ \t]+'>
>     newline      ::=  <match '\n'>
> 
> <cite>[cmake-language(7) — CMake 3.0.2 Documentation, Source Files](http://www.cmake.org/cmake/help/v3.0/manual/cmake-language.7.html#source-files)</cite>

<!-- -->

>     command_invocation  ::=  space* identifier space* '(' arguments ')'
>     identifier          ::=  <match '[A-Za-z_][A-Za-z0-9_]*'>
>     arguments           ::=  argument? separated_arguments*
>     separated_arguments ::=  separation+ argument? |
>                              separation* '(' arguments ')'
>     separation          ::=  space | line_ending
> 
> <cite>[cmake-language(7) — CMake 3.0.2 Documentation, Command Invocations](http://www.cmake.org/cmake/help/v3.0/manual/cmake-language.7.html#command-invocations)</cite>

これを見るとCMake言語は、すべてがコマンド呼び出しであることがわかります。これは、`if()`や`foreach()`といった制御構文も同様です。`endif()`や`endforeach()`についていた不自然な括弧は、この言語仕様のためだったのです。

## コマンドの特徴

さて、CMake言語がコマンド呼び出しの羅列であることがわかったので、その中核のコマンドがどのような特徴を持っているのかにいて述べます。

### コマンドに渡す引数の区切り文字は空白文字

コマンドに渡す引数の区切りは、空白文字となっていてカンマ`,`ではありません。

```cmake
command(arg1 arg2 arg3) # OK
command(arg1,arg2,arg3) # NG; arg1,arg2,arg3 という一つの引数と解釈される
```

### コマンド名は大文字小文字を区別しない

コマンド名は、大文字小文字を区別しません。以下はすべて同じコマンドを呼び出します。

```cmake
message(arg)
MESSAGE(arg)
Message(arg)
```

### コマンド名に使える文字は英数字とアンダースコア

`function()`コマンドと`macro()`コマンドを使って独自のコマンドを定義することができますが、コマンド名に使えるのは英数字とアンダースコア(`_`)のみとなります。ただし、数字で始めることはできません(呼び出すときにエラーになります)。

```cmake
# OK
function(my_command1)
  message(my_command1)
endfunction()
my_command1()

# OK
function(_my_command2)
  message(_my_command2)
endfunction()
_my_command2()

# NG
function(3_my_command)
  message(3_my_command)
endfunction()
3_my_command() # エラー
```

### コマンドは戻り値がない

CMakeのコマンドには戻り値という概念がありません。なんらかの情報を呼び出し元に返したい場合は、格納する変数をコマンドの引数として渡すことになります。

```cmake
string(TOUPPER hoge output_variable) # 文字列をすべて大文字にするコマンド
message(${output_variable}) # HOGE
```

## おわりに

以上、CMake言語の基本構造とその中核であるコマンドについてでした。

明日は、mrk_21 さんの『CMake: コマンド引数の種類』です。
Carrot2で遊んでみた

# Carrot2
オープンソースの検索結果クラスタリングエンジンです。
ちょっと遊んでみたので紹介まで。。

<dl>
  <dt>公式サイト</dt>
  <dd><a href="http://project.carrot2.org/">http://project.carrot2.org/</a></dd>
  <dt>デモ</dt>
  <dd><a href="http://search.carrot2.org/stable/search">http://search.carrot2.org/stable/search</a></dd>
</dl>

# 「Scala」を検索してみた結果
![scala_folders.png](https://qiita-image-store.s3.amazonaws.com/0/55201/bb0fc7c4-ab61-3b8d-cd3c-81790bcbf616.png)

![scala_circles.png](https://qiita-image-store.s3.amazonaws.com/0/55201/4b54cbea-3068-2ddd-5343-98ff5af4ce52.png)

![scala_foamtree.png](https://qiita-image-store.s3.amazonaws.com/0/55201/5b75f8a1-a4cc-b68a-d440-44037d840467.png)

# 「AWS」だとこんな感じ
![aws_folders.png](https://qiita-image-store.s3.amazonaws.com/0/55201/915c6fa3-3f90-9255-aad9-db74ee86b659.png)

![aws_circles.png](https://qiita-image-store.s3.amazonaws.com/0/55201/1e53a19e-6ab8-1c96-2d4d-7ccbe469ce74.png)

![aws_foamtree.png](https://qiita-image-store.s3.amazonaws.com/0/55201/b263dd7f-0df5-c573-128e-4e655ab94c8e.png)