goqueryでお手軽スクレイピング！

こんにちは、Qiita二回目の投稿です、 [yosuke_furukawa](https://twitter.com/yosuke_furukawa) と申します、Golang勉強中です。


Qiitaの[一回目の投稿もScrapingネタだったのですが、](http://qiita.com/yosuke_furukawa/items/c17c5aac348b6ed29294)二回目もGolang勉強中ということでQiitaのScrapingネタで行きます。

まず、goqueryの説明に行く前に単純なやり方でscrapingしてみます。

Golangで単純なスクレイピングをするためには、以下のモジュールを利用するとできます。
- [net/http](http://golang.org/pkg/net/http/) httpリクエストを送るためのモジュール
- [code.google.com/p/go.net/html](http://godoc.org/code.google.com/p/go.net/html) html解析をするためのモジュール

超シンプルなサンプルとして、該当のurlのaタグのhrefにある値だけ取得する場合は以下の様な感じになるかと思います。

# go.net/htmlで頑張る

```go
package main

import (
     "code.google.com/p/go.net/html"
     "fmt"
     "io"
     "net/http"
)

type Result struct {
     Url string
}

func ParseItem(r io.Reader) []Result {
     results := []Result{}
     doc, err := html.Parse(r)
     if err != nil {
          fmt.Println(err)
     }

     var result Result
     var f func(*html.Node)
     f = func(n *html.Node) {
          // n.Typeでノードの型をチェックできる、ElementNodeでHTMLタグのNode。
          // n.Dataでノートの値をチェックする、aタグをチェックしている
          if n.Type == html.ElementNode && n.Data == "a" {
               // n.Attrで属性を一覧する
               // ここでもう少し頑張るとparseできる
               for _, a := range n.Attr {
                    if a.Key == "href" {
                         result.Url = a.Val
                         results = append(results, result)
                    }
               }
          }
          for c := n.FirstChild; c != nil; c = c.NextSibling {
               f(c)
          }
     }
     f(doc)
     return results
}

func GetPage(url string) []Result {
     //http.GetでGetリクエストを発行する
     res, err := http.Get(url)
     if err != nil {
          fmt.Println(err)
     }
     // deferでやるとReaderを関数の終わりで必ずCloseしてくれる。便利!!
     defer res.Body.Close()
     results := ParseItem(res.Body)
     return results
}

func main() {
     url := "http://qiita.com/advent-calendar/2013/"
     results := GetPage(url)
     for _, result := range results {
          fmt.Println(result.Url)
     }
}
```

# go-html-transformを使う

また、単純にページから情報を抽出する、というよりもDOMの中から不要なものを削ったり、ページを加工するなら[code.google.com/p/go.net/html](http://godoc.org/code.google.com/p/go.net/html)よりも[code.google.com/p/go-html-transform/html/transform](http://godoc.org/code.google.com/p/go-html-transform/html/transform)を使うのがいいかと思います。
CSSセレクタが使えるので、いい感じにfilterを書けます。(ただ名前の通りhtmlの加工目的なので、htmlから必要な情報を抽出するのには向かない気もします。)

```go
package main

import (
     "code.google.com/p/go-html-transform/html/transform"
     "fmt"
     "io"
     "net/http"
)

type Result struct {
     Url string
}

func ParseItem(r io.Reader) {
     // transformのインスタンスを作る
     t, _ := transform.NewFromReader(r)
     // Applyメソッドで自分のDOMに反映する。
     // Applyメソッド内では、TransformFuncを受け付けるようになっており、
     // Replaceの他にもDOMを追加するAppendChildrenやPrependChildrenなどもある。
     // ページを加工するならこっちのが便利。
     // ちなみに以下の処理で不要なページを削っている
     t.Apply(transform.Replace(), "script")
     t.Apply(transform.Replace(), "footer")
     t.Apply(transform.Replace(), "meta")
     t.Apply(transform.Replace(), "ul")
     t.Apply(transform.Replace(), "li")
     t.Apply(transform.Replace(), "link")
     t.Apply(transform.Replace(), "div.day")
     t.Apply(transform.Replace(), "div.advent-calendar-breadcrumb")
     t.Apply(transform.Replace(), "a.post-user-icon")
     fmt.Println(t.String())
}

func GetPage(url string) {
     //http.GetでGetリクエストを発行する
     res, err := http.Get(url)
     if err != nil {
          fmt.Println(err)
     }
     // deferでやるとReaderを関数の終わりで必ずCloseしてくれる。便利!!
     defer res.Body.Close()
     ParseItem(res.Body)
}

func main() {
     url := "http://qiita.com/advent-calendar/2013/"
     GetPage(url)
}

```

# goqueryを使う

と、色々と書きましたが、jQueryライクなセレクタを持ち、httpのリクエストの処理も兼ね備えているgoqueryを使うのがスクレイピングには一番向きます。Golangの勉強ということで、なるべくモジュール組み合わせて、試したかったのです。すいません。

```go
package main

import (
     "fmt"
     "github.com/PuerkitoBio/goquery"
)

func GetPage(url string) {
     doc, _ := goquery.NewDocument(url)
     doc.Find("a").Each(func(_ int, s *goquery.Selection) {
          url, _ := s.Attr("href")
          fmt.Println(url)
     })
}

func main() {
     url := "http://qiita.com/advent-calendar/2013/"
     GetPage(url)
}
```

めちゃくちゃ短くできる!!!!!!!!
しかも直感的!!!!!!!!!

goqueryは既にmattnさんが記事にしてくれてるので、それも参考になると思います。
[Go言語で jQuery ライクな操作が出来る goquery を試した。](http://mattn.kaoriya.net/software/lang/go/20120914184828.htm)

[goquery](https://github.com/PuerkitoBio/goquery )


最後にgoqueryとgoroutine、channelで並列処理でQiitaのこれまでのエントリをscrapingして出力して終わります。コードはコチラ。

```go
package main

import (
	"fmt"
	"github.com/PuerkitoBio/goquery"
	"os"
	"sync"
)

type Result struct {
	CalTitle string
	Title    string
	Url      string
}

func GetPage(url string) []Result {
	results := []Result{}
	doc, _ := goquery.NewDocument(url)
	doc.Find("a.calendar-name").Each(func(_ int, s *goquery.Selection) {
		url, exists := s.Attr("href")
		if exists {
			caltitle := s.Text()
			entryPage, _ := goquery.NewDocument("http://qiita.com" + url)
			entryPage.Find("div.body h1>a").Each(func(_ int, s *goquery.Selection) {
				url, exists := s.Attr("href")
				if exists {
					result := Result{caltitle, s.Text(), url}
					results = append(results, result)
				}
			})
		}
	})
	return results
}

func GoGet(urls []string) <-chan []Result {
	var wg sync.WaitGroup
	ch := make(chan []Result)
	go func() {
		for _, url := range urls {
			wg.Add(1)
			go func(url string) {
				ch <- GetPage(url)
				wg.Done()
			}(url)
		}
		wg.Wait()
		close(ch)
	}()
	return ch
}

func main() {
	args := os.Args
	if len(args) < 2 {
		panic("usage : goquery <url>")
	}

	urls := []string{}
	for index, arg := range args {
		if index != 0 {
			urls = append(urls, arg)
		}
	}

	ch := GoGet(urls)
	for {
		results, ok := <-ch
		if !ok {
			return
		}
		calTitle := ""
		for _, result := range results {
			if calTitle != result.CalTitle {
				fmt.Println("#" + result.CalTitle)
				calTitle = result.CalTitle
			}
			fmt.Println("[" + result.Title + "](" + result.Url + ")")
		}
	}
}

```

リポジトリはコチラ：
[https://github.com/yosuke-furukawa/goquery_sample ](https://github.com/yosuke-furukawa/goquery_sample )

使い方：
```
$ goquery http://qiita.com/advent-calendar/2013 http://qiita.com/advent-calendar/2012
```

# Qiita アドベントカレンダー一覧(2013一覧)：
#1分で実現できる有用な技術
[1分でPAGER環境変数を設定したあとページャーを知る](/tadsan/items/7658038487b7a82778ec)
[1分で実現できるtmuxのTips x3 (ついでにinstall to Mac,CentOS,Debian/Ubuntu)](/nntsugu@github/items/107cbd6cd6db2aa46172)
[1分で実現できるjavascriptにおけるconsoleまわりの有用なテクニック4つ](/puriketu99/items/92b83172268685fceaf2)
#Amazon Web Service
[AWSクレジットの引き換えエラーメッセージまとめ](/kawaz/items/a92a46293f03be4c1c1f)
[AWS CLIの --query オプションが便利。](/kawaz/items/9bccd1d3f51ba46b25a0)
[Cross-Zone Load Balancing を有効にしない理由がない件](/rch850/items/23c0743876ef5ab7bd30)
[AWSを便利に使う為の情報・ツール](/camelmasa/items/9f03c1c04bace41532c3)
#AngularJS Startup
[AngularJSを使ったWebアプリのアーキテクチャ設計](/zoetro/items/46d2a8b57f2645bb5033)
[AngularJSのTutorialのstep-1とstep-2よりData Bindingの仕組みをレポート](/matsuzan/items/d0c8b2948c4ad1ea7d68)
[AngularJSのはじめの一歩(詳細)](/matsuzan/items/1fc80083496951e0406f)
[AngularJSを選択する見解](/matsuzan/items/a37b29fe918ba0441d99)
#Ansible
[Ansibleちょっとしたメモ](/myaaaaa_chan/items/f3473ae27f8e1b2abcac)
[Ansibleの事例とちょっとしたTips](/volanja/items/d38fe0678848bae6902f)
#Ceylon
[Ceylonモジュール作成やクラスなどの基本コード](/newta/items/05150ed45fe99829b3e4)
[Ceylonの良いとこ説明コードその１](/newta/items/41d5bc6f25b0ba8d9cc6)
[Ceylon開発環境セットアップ！](/newta/items/d84200874645fa5cef26)
[Java大好きな人が作ったCeylon言語ってどんなもの？](/newta/items/2ca98051450c4751b4b1)
#Civic Tech
[Open Government Licenceの紹介](/nyampire/items/206559231a45ca884590)
[21世紀型の都市が持つべき7つの戦略とCivic Hackerへのマインドシフト](/eguchishintaro/items/6f043c671b0337dbcd67)
[Beyond Transparency の紹介](/shigeomi/items/db66430be97212924350)
[地域課題解決の新しい形、Civic Tech と Code for Japan](/hal_sk/items/3f78031e7fcd9f9d02ec)
#Clojure
[Clojureで音楽組織プログラミングについて](/nobkz/items/aea2c70a5fb03003f375)
[Clojureを練習するためのオンライン問題集](/esehara@github/items/4183f1dcee9a82ac2c6b)
[clj-webdriverの紹介](/hash/items/30ea7aee76c8179e12e8)
#cocos2d-x
[【まとめ】cocos2d-Xmas Special by #gumistudy〜 Chukong Technologies（coco2d-x開発元）他登壇！](/hatchup/items/ecb3df8570788fa5d198)
[簡単なカスタムボタンの作り方（２）](/fullfool/items/034402b13ce07224a242)
[透過画像に対応したコリジョン判定](/syuhari/items/dbe29dcfb78a1f188645)
[簡単なカスタムボタンの作り方](/t-kashima/items/adb7e823cc2269aed3f4)
[cocos2d-xでのJSON利用方法](/tyama83/items/27d537b502934da3e656)
#CodeIgniter
[自作クラスでCodeIgniterオブジェクトを使用する](/kaneshinth/items/aa60d69eaac6581519ef)
[【基礎】CodeIgniterでライブラリを作成する](/kaneshinth/items/0e99167169c85a361fc8)
[【基礎】CodeIgniterでコアクラスを作成する](/kaneshinth/items/876e20b63f869c5d7335)
#Corona 
[Corona SDK + Parse.com でプッシュ通知をする](/fakestarbaby/items/9b3a7b27f94170e191fb)
[Kwikを買いました。](/CoronaSDK_Ambassador/items/c0c0abd5f795e81c3dd3)
[今年のCoronaSDKの振返り](/CoronaSDK_Ambassador/items/fb09de093ff30e8ef26b)
#Delphi
[カメラの画角を変える方法](/luxidea/items/b36acbbcff904c8b7fd7)
#Doc-ja
[Translate Toolkitで翻訳ツールを作る](/jmatsuzawa/items/eaa40f51aa56f3854a63)
[続・フリーなオフィススィートを翻訳すること](/naru0ga/items/3ec1fb04556277599932)
[WordPressプラグインを題材にGettextでの翻訳方法を紹介](/iwaim@github/items/883e4aeb29085e39581a)
[フリーなオフィススィートを翻訳すること](/naru0ga/items/a456e35c242881287488)
#D言語
[D言語で、コンパイル時単体テスト](/youxkei/items/24aabd5d5b65df0dc2e1)
[DustMiteで、バグ再現最小コードを作る](/youxkei/items/825f0437dfea8101f743)
[D言語 Language Update 2013](/repeatedly/items/643a43b6407732f096e1)
#Elixir
[`mix new`で作られるファイル探索](/yaotti/items/a3b5b2ec4249064ab578)
[elixir on Android](/modalsoul@github/items/4a35e6fe32fd884289a5)
[fluent-logger-elixirのはなし](/mururu/items/8e2683bef8ceb7701838)
#Fluentd
[Fluentd のベンチマークテストに使える dummy_log_generator の紹介](/sonots/items/750da77a18e62852a02f)
#G*(Groovy, Grails ..)
[Cucumber-Groovyでfeatureの書き方を手順を追ってみる](/kyon_mm/items/7ea43a92be9225ae444b)
[Cucumber-groovy設定編](/kyon_mm/items/97f1021432bba7d0a5cd)
#Git
[Gitのコミットログ再考](/esehara@github/items/87f7d227d515dc6fc37e)
[プルリクエストを自動補完してcheckoutする](/yuku_t/items/f53a9d3ea92614b0927d)
#Google Apps Script
[Google Formでクイズして、自動で答え合わせして、メールまで送っちゃうお ](/soundTricker/items/c9f2cfe70bb73a67a3e2)
[公式ガイドの「Dialogs and Sidebars in Google Apps」を制覇する！（その１）](/ttyokoyama/items/21a1938c1e460a9d308b)
[2013年度版 5分で始めるWebアプリケーション(Google Apps Script)](/soundTricker/items/a4878d7e3100082576e4)
#GorillaScript
[GorillaScript簡易ガイドブック](/esehara@github/items/f215d27ac4db7e82ced2)
#Grunt Plugins
[CSSプロパティの重複を解析してくれるgrunt-csscssについて紹介するよ](/t32k/items/ba9e213d0253e369bf2e)
[CSS書く人なら絶対入れとけのgrunt-contrib-csslintについて紹介するよ](/t32k/items/f2de0e934cf5e6d66058)
[タスクが正常に終わったらチャットワークにメッセージを通知する grunt-chatwork を紹介するよ](/astronaughts/items/80b476ad1e592967b926)
[散乱した@mediaをまとめてくれるgrunt-combine-media-queriesを紹介するよ](/hail2u/items/7bf2b830f2536c71666d)
[フロントエンドだけじゃない! サーバサイドの開発も手助けしてくれる grunt-connect-proxy を紹介するよ](/kamiyam/items/7967405632c4527b3d87)
[JSONファイルの管理をちょっとだけ楽にしてくれるgrunt-sync-versionを紹介するよ](/1000ch/items/1fdabd68ec9895c766d7)
[なんでも開ける grunt-open について紹介するよ](/kamiyam/items/9e40f780e029ed35139f)
[イケてるスタイルガイドを簡単に作れるgrunt-kssについて紹介するよ](/t32k/items/9e03e80061de21411765)
[CSSプロパティをソートしてくれるgrunt-csscombについて紹介するよ](/t32k/items/e59cebb51825347689f9)
[高いCSS圧縮率を誇るgrunt-cssoについて紹介するよ](/t32k/items/193c82e04e5383ead38f)
[JSコードの品質チェックをしてくれるgrunt-platoについて紹介するよ](/shoito/items/cca3ae1cc6b0895c9455)
[ページ表示速度の問題チェックをしてくれるgrunt-pagespeedについて紹介するよ](/shoito/items/aed36f56ae9a3e46c215)
[Gitフックを仕込むgrunt-githooksについて紹介するよ](/shoito/items/0cd10e14f437a0cab9a9)
#Haxe
[Haxeの関数値について雑多なこと](/nobkz/items/aea57de73d95d887b329)
[Haxeの文字列](/mandel59/items/0ac1fc6724126734abd0)
[知ってると色々と世界が広がるかもしれないHaxeのコンパイルオプション](/k-motoyan/items/d9c516bba525379d3cda)
#HDL
[Verilog HDLでの数値リテラル（定数）の書き方](/marsee101/items/846ab0f59d99656f0176)
[SFLのstageとNSLのseqを攻略する](/ksmakoto/items/90b38021b98700efd93f)
[[SystemVerilog]即時アサーションでコネクティビティをチェックする。](/tethys_seesaa/items/90c9696a89e2d830aed0)
[[HDL][雑記] 言語トレンドを見てみよう](/Kocha/items/10a1ca38cdcc39924311)
#hubot-scripts
[Hubot-scriptsでサイコロを投げる](/daxanya2/items/45045a2e87a0d7aa3846)
[Hubot-scriptsのmsg.randomを学ぶ](/daxanya2/items/4d7a8c94fa0756c97b5d)
[はじめてのHubot](/kmdsbng/items/fdc069048b5f0d07295e)
[Hubot-scriptsの学びかた](/daxanya2/items/e382b32408f1f9aad641)
#iBeacon
[iBeacon開発ハマリどころポイントまとめ](/himara2/items/1d6c11a4d4839c3027d5)
[iBeacon で忍者が密会する](/usamik26/items/563e94301ca150c3d0c3)
[iBeaconを利用したアプリ開発でチェックしておきたい！良記事・ソースコードまとめ](/hedjirog/items/abd48a55387891cc8503)
[1行もコードを書かずにiBeaconで遊んでみる](/yumu19/items/91f04ccc6c625876b22c)
#IntelliJ IDEA
[IntelliJ IDEA 13がリリースされました！](/todogzm/items/838fdc3a34be789689ed)
[設定、プラグイン導入した後にこれだけはやっとけってやつ](/dvorak__/items/7de6ac29216336f50729)
[IntelliJ IDEAをチームで導入するために私が行ったこと](/todogzm/items/e4332f15c3ec8d137289)
[IntelliJ IDEAをインストールしたら設定してること(Java/Groovy編)](/kyon_mm/items/8e283d3295e7706c51c5)
#Jenkins CI
[ALMiniumをVirtualBox上のCentOSにインストールするのにJenkinsを使ってみたお話](/akiko-pusu/items/8b084107132572e5c73e)
[Jenkinsビルド後の処理でRedmineにチケット登録ができるプラグインを作った話](/Kokawa_Takashi/items/6ffd7f51bdc95549e8ab)
#JSX
[JSX + npm](/shibukawa/items/7836426a7dfaa31cfb89)
[ライブラリからみるJSXの特徴](/gfx/items/ee94661a80bea35d8f84)
#Laravel
[Model で Validation したい? それならば Ardent だ！](/localdisk/items/da4d658a921d11f073e3)
[Laravel の現状と拡張の話（読み物）](/localdisk/items/dba5f9a725af76a9285a)
[最小構成で始めるLaravel](/localdisk/items/b5ad297d3aebf14c00ad)
[日本人に優しいLaravel](/razokulover/items/dd81420dd257e20191ec)
#Lisp
['`'と','](/snmsts@github/items/ef625bd6be7e685843ca)
#Max/MSP/Jitter
[Max/MSPの様々なGUIパーツ](/shu223/items/bd9cb186bd3fcffbd3cf)
[Max/MSPの便利な操作方法](/shu223/items/852e4ef06af4f07e381b)
[Max/MSPの入門レシピいろいろ](/shu223/items/da5eb8602caa3a39fb05)
[Max/MSP/Jitterをはじめるメモ](/shu223/items/38a14ad3efd260faafe0)
#Mojolicious
[Mojoliciousのテンプレートでレイアウトを自在に操る](/yusukebe/items/b1dffe22bd870b128aa9)
[Mojoliciousのセッションの話 2013年年末版](/yusukebe/items/65486fc44b85b4415299)
[Mojoliciousの様々な立ち上げ方](/yusukebe/items/c9fb34096e61976f062f)
#MongoDB
[Mongo shellの裏技色々](/crumbjp/items/eddd379d9bf4bfb3f65b)
[MongoEngineでMongoDBを触ってみる基礎編](/key/items/b3894c64161a02d10649)
[Ruby初心者がRuby on Rails + Mongoidを試してみた](/naru0ga/items/eaa5be47c10800c98656)
[MongoDBとブラウザだけで旅の記録をつけてみるか　その1](/syokenz/items/00b06ac01adeeaebada4)
#mruby
[GUIアプリケーションなどが保持するmrubyのオブジェクトのGC対策](/dycoon/items/fa8c66848bb37dc29454)
[mruby-redisでランキングを実装](/suzukaze/items/b56de22618ba308d3f34)
[mrubyのビルド方法](/masuidrive/items/e516c23b4feab73d139f)
#NEET
[Cryptocurrency Mining、始めてみませんか？](/nyarla/items/10708afd380fb9daa814)
[NEET Advent Calendar作りました](/nyarla/items/ba00d2da3d172b9a046b)
[NEETでGeekな情報収集術](/nyarla/items/a9ed13ed1804cc210206)
[全国のNEET達に送る、プログラミングの始め方。](/nyarla/items/35966109fd10a50c5e0e)
#openFrameworks
[ofxFaceTracker で顔をリアルタイムにトラッキングする](/shu223/items/7846ef33a80a489dff93)
[openFrameworks for iOS のサンプル一覧](/shu223/items/e28110bf729fdf8712e0)
[openFrameworks for iOS ことはじめ](/shu223/items/1bf9c9cc6cafc58969bb)
#OpenStreetMap
[ライセンス表記に注意しよう(自戒の念を込めて)](/k_zoar/items/57414fd66d48a786b3c0)
[ライトマッパーが1年を振り返るよ](/k_zoar/items/e42aca8f478e31568308)
[Surveyorジャケットの日本版作成とか](/nyampire/items/672c984a0e705c12d93f)
#Perl
[普通のデーモンを 1) Server::Starterでホットデプロイ+ 2) slow-restart対応にする](/lestrrat/items/9eee9590d604dd183207)
[Twiggy で応答の遅いサーバーを模倣する](/dayflower/items/e02e3e7a47629d3f210d)
[HTTPクライアントとStream::Bufferedの合わせ技](/kazeburo/items/2f54ba4c39ad013d6e31)
[HTTP::Message::PSGIでPSGIアプリのテストを書く](/hiratara/items/13d8ef65499b151bd79d)
[Log::StringFormatter でログ文字列のフォーマット](/kazeburo/items/af99fb84e525b5788b57)
#PostgreSQL
[PostgreSQLのあまり知られていない型3種](/choplin/items/9d5e2ff8721fb9509bf8)
#Python
[LXCをPythonから操作する](/0xfffffff7/items/9f3e0cc326ec2053a694)
[テキストファイルから指定した文字列を含む行を出力する](/qt-luigi/items/76f7955d68418f967efb)
#Ruby on Rails
[てめえらのRailsはオブジェクト指向じゃねえ！まずはCallbackクラス、Validatorクラスを活用しろ！](/joker1007/items/2a03500017766bdb0234)
[websocket-railsで簡単なPush通知を実装する](/naoty_k/items/3a2b5d8cfc1619e6145b)
[Rails4に対応したgem doorkeeperついて調べてみた。](/camelmasa/items/1c6d06713fc25eb7bddf)
[Railsのコンソールをより便利にするpry-rails gem](/yaotti/items/c6e850010f36acedb0e1)
#RubyMotion
[Parse.com で Push Notification with Rubymotion](/amazedkoumei@github/items/45447b5f44e33c0e5369)
[motion-modeの紹介とruby-modeについて](/ainame/items/e2d2cd3aa29341166211)
[RubyMotionアプリ開発に、motion-mode + Rubocop を導入](/watson1978/items/debafdfc49511fb173e9)
[Rubyist が RubyMotion で iOS アプリの開発を始める方法](/satococoa/items/05bd1be5bf948dba0fdc)
#Rust
[Rust Advent Calendar 12/2分を20分ででっちあげる](/kakkun61/items/f3fae6dfa19837e5f878)
#TDD
[ノーマルにMSTestを使おう](/moonmile/items/269295ad5758fa69d203)
#WebPay
[WebPayLiteを使ってiOSから簡単にクレジットカード決済する](/kyoro353/items/ae41a91ad2b56a829863)
[少しのコードでWebPayを導入する PHP Ver.](/sowawa/items/576930dbb175e8b83ba5)
[少しのコードでWebPayを導入する](/hmsk/items/744f9a7e37638340a992)
#Windows Azure
[Windows Azure Cloud ServiceでPython/Djangoを使おう！](/ishisaka/items/e3700808261e9ed31b4d)
[Windows Azure仮想マシンのディスクをPowerShellでバックアップする ](/k1hash/items/f6553dbbdbfeb4cc9a53)
[私が Windows Azure Web サイトを大好きな 7 つの理由](/shibayan/items/ceb287cab34ac50f614f)
#Windows Store App
[スタート画面っぽくいろんなサイズのタイルを GridView に表示しちゃうやり方](/matatabi/items/158c681b9849102b93b0)
[WinJS.Bindingについて](/iwate/items/aeb077526ffdcf16a471)
[ ストアアプリで手軽に画像を加工しよう](/moonmile/items/b3eea4225d18ff584b40)
[markSupportedForProcessingについて調べたかった](/iwate/items/caaa5581264919cb3c68)
#Xamarin
[Xamarin.iOSでUITableViewの罠 / Xamarinの進化に望む事](/kochizufan/items/78b6b837beabcca7f362)
[XamarinでParse SDKを利用する](/koji_yusa/items/a6878bef10577ee744b5)
[Xamarin(ザマリン) とはなんぞや](/amay077/items/38ee79b3e3e88cf751b9)
#zsh
[zshにオプションや引数を補完できるキーバインドを設定しよう](/PSP_T/items/82b080920a4241e96aed)
["select-word-style bash"の不満を解消する](/syohex/items/ad8a707b4f4280aa4272)
[bundle exec を打たなくて良くなる zsh プラグイン書いた](/Linda_pp/items/cb047fb1fe279f9d0b22)
[zsh で find を使わずに簡単にファイルを絞り込む](/mollifier/items/1c4a4930a89aa75e5ced)
#カーネル/VM
[カーネル/VM Advent Calendar 2013 3日目：LinuxカーネルのlockrefというLock機能を試してみよう](/masami256/items/00449e22cb38bfc3ba76)
[カーネル/VM Advent Calendar 2013 1日目](/katsyoshi/items/1b6b8f94476606cc599f)
#ディストリビューション/パッケージマネージャー
[aptitude検索パターンの紹介](/znz/items/a276db99cbb671e96455)
[debian-goodies](/uwabami/items/77f920448ad73ce12aa2)
[抄訳 games-misc/fortune-mod-gentoo-dev](/hiyuh/items/fa33aac2d7bab3d14009)
[Gentoo Wikiの翻訳](/naota344/items/60709014309880d28475)
#どう書く過去問
[等差数列(2013.5.17の過去問)](/hiratara/items/26ef713ac0182211e8ce)
[ボールカウント:野球(2012.8.8の過去問)](/hiratara/items/6c6ae47037ff6cd22973)
[のんびり座りたい (2013.2.2の過去問)](/hiratara/items/2e8dee9e6e26188e2671)
#ドキュメンテーション
[プロジェクト管理WebアプリBrabio!のガントチャートをプレゼン用に綺麗に出力する](/sky_y/items/7403d44d0abb31605d55)
#マイナー言語
[明日から使えるasm.js - Low Level JavaScript - 「LLJS」 マイナー言語アドベントカレンダー・一日目](/mizchi/items/ccc1429ca6156233bdee)
#みんなでやるRiak
[Riak2を複数ノードで動かしてみる](/saisa6153/items/4efa1a2d0316c136e8aa)
[Riak2にデータを出し入れしてみる](/saisa6153/items/4f1b676a579714f83dfd)
[Riak2をインストールしてみる](/saisa6153/items/82a985bc20f458e8a451)
#ラテン語プログラミング
[あらこんな所にラテン語が。いつも見るあの語が実は・・・](/warabanshi/items/d787a7157e0f8bf7a16d)
[自由に使えるラテン語辞書データ (I)](/kagamiwari/items/2967412e4a7ec9ccfb0e)
[ラテン語文解析プログラムを書くことを目的としたラテン語学習（前編）](/naoya_t/items/438dbad5398d54c57f0f)
[VB5で作ったラテン語アプリを発掘](/7shi/items/7b4b863af14ed2e1fb14)
#全文検索エンジンGroonga
[リポジトリを横断してコミットメッセージを眺めるツールgglogを使ってみた](/kenhys/items/fe2dec314c65526c7a7b)
[GObject Introspectionを使っていろいろな言語からGroongaを使う方法](/groonga/items/71b145b37d77bd160bf2)
#設定ファイル「dotfiles」の作り方
[vim-powerline (lightline.vim)](/PSP_T/items/1e9856599765de233a5c)
[zsh-powerline](/PSP_T/items/8f57eb6f1e8cc11ea8b4)
[tmux-powerline](/PSP_T/items/dc509f208b464838b948)
# iOS Second Stage
[iOS 7でバーコード・QRコードを読み取る方法と生成する方法（おまけもあるよ）](/hkato193/items/c36a940c2929a124e416)
[複数のStoryboardを使ってタブの遷移を作成する](/hedjirog/items/1c074069e56157a4e54b)
[iOSで使える日本語OKな音声読み上げエンジン8種（TTS,音声合成）](/shu223/items/223492e4f061032e652e)
[Xcodeと自動化](/keroxp@github/items/de5b1982345cfb1e2320)
#.emacs
[emacs のリージョンや編集中のバッファを DayOne の Dropbox に保存する拡張をつくった](/mori-dev@github/items/05afe9a0fa5345bdbb7f)
[自分流の .emacs管理](/shiba_yu36/items/5c4f0e72df7b16cd0579)
[anzu.elの紹介](/syohex/items/56cf3b7f7d9943f7a7ba)
[ぼくの.emacs 2013](/tadsan/items/c4a80f46623ea266f5c5)
#Android
[BeagleBone BlackにAndroidをインストールする](/kinneko/items/40865b3714316dddf664)
[Gradleことはじめ](/wasabeef_jp/items/f9436e1c9b74536caaff)
#Go
[Androidでʕ ◔ϖ◔ʔGo~](/Ladicle/items/fc694c726a84f4c3b7ff)
[goyaccを使う](/draftcode/items/c9f2422fca14133c7f6a)
[Go言語で顔認識してみた](/tenntenn/items/63d52c01a6339eb392f0)
#iOS
[XIBからもコードからもカスタムViewインスタンスを生成する方法](/hosokawa0825@github/items/2a650cbca5a087518d57)
[「顔以外」のものを画像認識する](/shu223/items/ffd2202eaf92d342f83d)
[IB/Storyboard使わない派のlayoutSubviewsによるレイアウト調整](/yuch_i/items/b4612fae110254c816f4)
#JavaScript - Client Side -
[BakboneJSだってDOMとModelをBindingしたい！](/itoKami1123/items/e3d50ff40e8578adc732)
[なぜクライアントサイドJavaScriptにはHTML/CSSの知識が必要か？](/YusukeHirao/items/bba3d05dda7f0459a913)
[Ember.jsのコアな機能を学ぶためのサンプルプロジェクト](/puriketu99/items/e88d40d55d2f30e9ba1d)
#Machine Learning
[Random Forest とその派生アルゴリズムの紹介](/kazoo04/items/711142df77fed82d7bc0)
[Dropoutの実装と重みの正則化（MLAC 2013 3日目）](/olanleed/items/c9d04904d46b6bba2ad0)
[たぶん1分くらいでできる形態素解析とtfidf(テストコードつき)](/puriketu99/items/a6d8100165d576443938)
[ベイズ線形回帰（PRML§3.3）の図版再現](/naoya_t/items/80ea108cebc694f5cd63)
#PHP
[PHPの開発に使えるVagrantfileのまとめ](/yando/items/10058ef292233d21f296)
#PhpStorm
[コードフォーマットを使いこなす](/Vexus2/items/7adbf5c00ddd1e570f45)
[PhpStorm EAPを使ってみる](/Vexus2/items/bcd68648f27f4a4b78fb)
[PhpStormをVimキーマップで使う](/Vexus2/items/1d84442f625233dce276)
[PhpStormとは？](/Vexus2/items/f4f0e509a41aa0c547b0)
#Ruby
[websocket-client-simple でPush通信を使ってJenkinsさんと会話](/hayabusa333/items/70bcec06f2b47f0a4d46)
[Ruby 2.1.0-preview2で追加されたException#causeの紹介](/znz/items/db187aec13004a56710c)
[RailsとGrapeで行う最高のWeb API開発](/anoworl/items/756f01cc3d188ebad139)
#Scala
[Lift の RestHelper でサクサクAPI 開発](/shitai246_/items/5fe5b97fe828846ebad3)
[2014年こそScalaを始めよう](/shoma2da/items/b131c53ffa958c9386f7)
#Unity
[Unity　途別2Dアセット](/kame0_0/items/8f8d3c397b314f6a12f4)
[Transform拡張](/MunenaoMiyata/items/24d0675861744c827668)
[MoveAssetToTrashでUndo/Redo](/kyusyukeigo/items/f66e4c1b0f155cb8c956)