OmniAICreator/Qiita-1.07M huggingface dataset:
Java大好きな人が作ったCeylon言語ってどんなもの？

#Ceylon言語
って聞いたことありますか？
2013/11/12にバージョン1.0.0がレッドハット社からリリースされました。

[Ceylon公式ページ](http://ceylon-lang.org)

Javaに非常に影響を受けて作られている言語で
ほぼJavaに近い感覚で書くことが出来ます。
JVM上で動く言語です。
その他にJavaScriptで出力し、
JavaScriptエンジン上（Node.js上など）で動かすことが出来ます。

読みはセイロンだと思われます。
（セイロンティーとかのセイロンだと思います。
　ジャワティー JAVA Teaインスパイアかなと想像)

Javaキラーとも呼ばれているようですがCeylon言語の開発者は
Javaが大好きなようで、そのJavaの問題を解決しつつも
最近流行のScalaの言語仕様の複雑さを出来るだけ押さえたいと言う方針のようです。


最近の関数型言語の中でJavaと相性のいいScalaが流行ってきていますが
個人的にJavaが大好きな自分として
記述方式やコードの感触がよりJavaに近いCeylonが流行ってくれたらなぁと感じたので
自分が勉強するついでに今回紹介して行こうと思ってます。

##実は・・・
ちなみに1.0.0がリリースされるよりもっと前の２年くらい前に日本でも一瞬話題になったようで
日本語記事を検索すると出てくるのですが
少しずつ仕様が変わっている箇所があるようなので動かないコードだったりするときもあるので注意。

##なんと！公式ページも・・・
現在は公式ページのリファレンスもコード記述が古いものがあり
最新の1.0.0では読み替えながら書かないと動かないところもあり！(2013/12/1 現在)
気をつけてー。


#どんな特徴なのか？
・静的型付けである
・型推論がある
・デフォルトで変数のnull禁止
・ジェネリクスがある
・デフォルトで変数に再代入できない
・基本的にキャスト禁止（型チェックのスコープが厳密）
・Javaの影響を受けていて書式が非常に似ている
・高階関数のサポート

などなど、他にも色々ありますが、
気がついたら追加しようと思います。

次回以降でどんな風に記述してチェックされるか具体的に書こうと思います。
（[Ceylonの良いとこ説明コードその１](http://qiita.com/newta/items/41d5bc6f25b0ba8d9cc6)）

Javaでの型の厳しさを持ちつつ
Javaの記述方式を大きく変えずJavaエンジニアが移行しやすい印象。
それでいながら、Javaで問題となってきたnullの存在や副作用の問題。
型の厳密さを破壊しエラーとなるキャストなどに言語側で制限を設定することで
より見通しのよいコードになることが考えられている言語に感じます。

#簡単な実行形式の例

```ceylon:hello.ceylon
void hellowWorld() { 
    String[] names = [ "World", "Ceylon", "Project" ];
    for (String name in names) {
        print("Hello, ``name ``!");
    }
}
````

Javaエンジニアの人であれば
少しコードを見ればスッと理解出来ると思います。
さらにJavaのクラスも利用することが出来ます。
（その場合、おそらくJavaScriptエンジン上で動作出来なくなります）
[記事：CeylonでJavaのクラスを利用してみる](http://qiita.com/newta/items/4220874649ec3e92bdb0)

scalaからも影響を受けているようで
nullや再代入、副作用などについてチェックし表現する機能が言語に組み込まれています。


開発環境のIDEはEclipseを使うことが出来、Eclipseプラグインが提供されています。



[次回](http://qiita.com/newta/items/d84200874645fa5cef26) に、開発環境の設定を説明していこうかなと思います。
UILabelに意図しないborderが付いてしまう場合の対処 【iOS 7?】

# 症状

* UILabel のframeと思しき枠に、意図しない1pxくらいの線が入る
* 自分の場合、iOS 7 on iPhone4Sで起きた
*  [Extremely Weird Thing with UILabel which displays abnormally | stack overflow](http://stackoverflow.com/questions/12452654/extremely-weird-thing-with-uilabel-which-displays-abnormally) これっぽい

# 原因

* ↑のstack overflowにも書いてあるけど、 label.frameに浮動小数点が入ってると表示がおかしくなる様子

以下一部引用

>Check that you have **only integer non-fractional dimensions** (42.000 or 1337.000, not 42.500 or 1337.1234). This can be the source of your display problem.

# 結論

NSInteger にキャストすると直った
ansibleで  to use the 'ssh' connection type with passwords, you must install the sshpass  のエラー

ansible-playbook で-k でsshパスワードを入れようとすると、以下のエラーが出た


```bash
fatal: [xxx.xxx.xxx.xxx] => to use the 'ssh' connection type with passwords, you must install the sshpass program 
```

sshpassというパッケージを入れるとよい。

```bash
sudo aptitude install sshpass
```
UILabelにcontentInsetsを追加する

contentInsetsに対応したLabelクラスを作っておくといろいろ捗ります。

```
@interface PPLabel : MyLabel
@property UIEdgeInsets contentInsets;
@end

@implementation MyLabel{
    UIEdgeInsets _contentInsets;
}

- (void)drawTextInRect:(CGRect)rect
{
    return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.contentInsets)];
}

- (UIEdgeInsets)contentInsets
{
    return _contentInsets;
}

- (void)setContentInsets:(UIEdgeInsets)contentInsets
{
    _contentInsets = contentInsets;
    [self setNeedsDisplay];
}

- (CGSize)sizeThatFits:(CGSize)size
{
    CGSize contentSize = size;
    CGFloat hOffset = self.contentInsets.left + self.contentInsets.right;
    CGFloat vOffset = self.contentInsets.top + self.contentInsets.bottom;
    
    contentSize.width -= hOffset;
    contentSize.height -= vOffset;
    
    CGSize baseSize = [super sizeThatFits:contentSize];
    baseSize.width += hOffset;
    baseSize.height += vOffset;
    return baseSize;
}

@end
```

これとattributedStringを組み合わせると、UITableViewのSection HeaderとかLabelだけでだいたいいけます。
Vagrant upした際にこける


vagrant up した際に下記のようなエラーでこける。

```
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["hostonlyif", "create"]

Stderr: 0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Failed to create the host-only adapter
VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory

VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterface, interface IHostNetworkInterface
VBoxManage: error: Context: "int handleCreate(HandlerArg*, int, int*)" at line 68 of file VBoxManageHostonly.cpp
```

下記コマンド実行後、再度`vagrnt up`したら起動した。

```
sudo /Library/StartupItems/VirtualBox/VirtualBox restart
```

参考サイト
[Mac OS X Mavericks で Vagrant がこける時の対処法](http://firegoby.jp/archives/5182)
公式ガイドの「Dialogs and Sidebars in Google Apps」を制覇する！（その１）

この記事は、Google Apps Script Advent Calendar 2013の2日目の記事です。

内容は、公式ドキュメントの「Menus and User Interfaces」の中にある、
「Dialogs and Sidebars in Google Apps」の内容を噛み砕いた感じを書いています。
が、いろいろあって、何回かに分けて書かせていただきます。今回は第1弾です。

## 機能の紹介
Google Docs、Spreadsheet、Formにboundされた（Container-boundな）Scriptには、Dialogと、Sidebarを表示させることができます。Container-boundというのは、Spreadsheetのメニューからツール→スクリプトエディタを選んで作成したApps Scriptのことをいいます。

DialogやSidebarはHTMLServiceやUIServiceを使って、表示内容を制御するようになっています。

## AlertDialogを表示する。
### Google Document編
```js:コード.gs
// 事前にUiオブジェクトを取得しておく
var ui = DocumentApp.getUi();

function onOpen(e) {
  ui.createMenu("テストメニュー")
  .addItem("AlertDialog表示", 'showAlertDialog')
  .addToUi();
}

// ※この処理は文字を追加するので、初回実行時は承認が必要です。
function showAlertDialog() {
  var result = ui.alert("AlertDialogサンプル", "表示されましたか？", ui.ButtonSet.YES_NO);
  
  if(result == ui.Button.YES) {
    // Yes
    DocumentApp.getActiveDocument().getBody().appendParagraph("表示された！");
  } else {
    // No
    DocumentApp.getActiveDocument().getBody().appendParagraph("表示されないよ！");
  }
}
```
### Spreadsheet編
は、Browser.Msgbox()で表示されます。これについては、私の著書を参照していただければ…。

### Form編
```js:コード.gs
var ui = FormApp.getUi();

function onOpen(e) {
  ui.createMenu("テストメニュー")
  .addItem("AlertDialog表示", 'showAlertDialog')
  .addToUi();
}


function showAlertDialog() {
  var result = ui.alert("AlertDialogサンプル", "表示されましたか？", ui.ButtonSet.YES_NO);
  
  if(result == ui.Button.YES) {
    // Yes
    FormApp.getActiveForm().addTextItem().setTitle("表示された！");
  } else {
    // No
    FormApp.getActiveForm().addTextItem().setTitle("表示されないよ！");    
  }
}
```

## まとめ
AlertDialogを使うことで、対話型のGASを作ることができる。
（次回はPromptを作ってみたいと思います…となると全部で4回かな？）
プルリクエストを自動補完してcheckoutする

## 問題

プルリクエストのレビュー、動作確認をするためにローカルでcheckoutしたいが、ブランチ名を調べて入力するのが面倒くさい。[別名をつけてcheckoutできるようにする方法](http://qiita.com/kenbeese@github/items/a5410b9a4f322b38ac3b)があるが、プルリクエストの番号を調べる必要があってそれも面倒。

もっと簡単にcheckoutしたい!!!

## 解決策

プルリクエストの一覧からブランチを選択してcheckoutできるようにしました。

![BIjYohy0TtY.gif](https://qiita-image-store.s3.amazonaws.com/0/153/25902299-4b50-1670-efe1-04a6e45f661b.gif)

### 1. プルリクエスト一覧を取得する

まずプルリクエスト一覧を取得します。そのために[prfetch](https://github.com/yuku-t/dotfiles/blob/master/bin/prfetch)というスクリプトを書きました。
手っ取り早く下記でインストールできます。

```bash
wget https://raw.githubusercontent.com/yuku-t/dotfiles/master/bin/prfetch
chmod +x prfetch
mv prfetch ~/bin  # ~/bin はPATHに入っているとする
```

prfetchは[ruby-git](https://github.com/schacon/ruby-git), [octokit.rb](https://github.com/octokit/octokit.rb), [netrc](https://github.com/geemus/netrc)に依存しているので、それらもインストールします。（必要に応じて `sudo ` をつけてください）

```bash
gem install git octokit netrc
```

このnetrcというのはoctokitがGitHub APIを叩く際の認証情報を記述するためのもので `~/.netrc` に次のようなファイルを設置します。`パスワードorアプリケーショントークン`となっているところには、ログインパスワードか、GitHubの[Application Setting](https://github.com/settings/applications)のPersonal Access Tokensで新しく作ったトークンを入力します。

```text:~/.netrc
machine api.github.com
  login GitHubユーザ名
  password パスワードorアプリケーショントークン
```

パスワードとかを書いているのでファイルの権限には気をつけてください。

```bash
chmod 600 ~/.netrc
```

インストールできていればoriginがGitHubに向いているようなgitリポジトリでprfetchコマンドを叩くと、プルリクエスト一覧が標準出力されます。

![Screen Shot 2013-12-01 at 11.59.01 PM.png](https://qiita-image-store.s3.amazonaws.com/0/153/9f55fe8c-dedc-4d1d-e882-e8267992ae20.png)

### 2. percolを使って絞り込む

プルリクエストの絞り込みには[percol](https://github.com/mooz/percol)を使います。これは複数行にまたがる標準入力からインタラクティブに一行を選択し、それを標準出力できるようにしてくれるコマンドです。

上のgifで途中ピンクの行が上下に動いていましたが、あの部分がpercolです。

下記でpercolをインストールします。（これも必要に応じて `sudo` をつけてください）

```bash
easy_install percol
```

### 3. 選択されたプルリクエストをcheckout

最後に選択されたものをcheckoutすれば完了です。percolで選択された行のブランチ名を取り出してcheckoutします。全てを合わせるとこれで完了。

```bash
prfetch | percol | cut -f3 | xargs git checkout
```

## おわりに

今回声を大にして申し上げたいのは **percol最高** ということなのであります。
加えて開発者の @mooz@github 氏はなかなかのナイスガイであると、付け加えさせていただきます。
yumでサードパーティのリポジトリを有効にする

## サードパーティのリポジトリを追加
```
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -ivh http://download1.rpmfusion.org/free/el/updates/6/x86_64/rpmfusion-free-release-6-1.noarch.rpm
```

## GPGをインポート
```
rpm --import http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
```

## リポジトリを最新にする
```
yum -y update rpmforge-release remi-release epel-release rpmfusion-free-release
```

## リポジトリを有効にしてインストール
```
yum --enablerepo=epel,remi,rpmforge,rpmfusion-free-updates install monit
```

## まとめ
- 基本リポジトリにはない最新のパッケージが結構あります。
- サードパーティなので、あくまで自己責任で
ボールカウント:野球(2012.8.8の過去問)

1日1個 @nabetani さんの作った問題を解く、どう書くAdventCalendarの2日目です。

今日の問題は http://qiita.com/Nabetani/items/ebd8a56b41711ba459f9 にあります。

```hs
module Doukaku.Baseball (solve) where

import Data.List (intercalate)

solve :: String -> String
solve input = intercalate "," . map showBoard . tail $ boards
  where
    boards :: [Board]
    boards = scanl ((normarize .) . play) (0, 0, 0) input

type Board = (Int, Int, Int)

play :: Board -> Char -> Board
play (o, s, b) 's' = (o, s + 1, b)
play (o, s, b) 'b' = (o, s, b + 1)
play (o, s, b) 'f' | s <= 1    = (o, s + 1, b)
                   | otherwise = (o, s, b)
play (o, _, _) 'h' = (o, 0, 0)
play (o, _, _) 'p' = (o + 1, 0, 0)

normarize :: Board -> Board
normarize (o, s, b) | s >= 3 = normarize (o + 1, 0, b)
                    | b >= 4 = normarize (o, 0, 0)
                    | o >= 3 = normarize (0, 0, 0)
                    | otherwise = (o, s, b)

showBoard :: Board -> String
showBoard (o, s, b) = show o ++ show s ++ show b
```

入力される各文字をパターンマッチさせて`play`関数としてルールを記述。4ボールや3アウトの処理は冗長にならないように`normarize`関数に分けてあります。`(normarize .) . play`と合成すれば目的の遷移関数が簡単に作れます。end morphismなので`Monoid`にする手もあったのですが、すべての結果を回収しなきゃいけないのでやめました。

問題ページに他の方の回答もありますので、見ると参考になるでしょう。
PhpStormをVimキーマップで使う


![Preferences.png](https://qiita-image-store.s3.amazonaws.com/0/20074/de07b74d-8025-3171-8923-05151b1eb3f5.png "Preferences.png")

PhpStormは各エディタからの乗り換えユーザの敷居を下げるためにEmacsやVisual Studio、Eclipse、NetBeansなどのキーマップがデフォルトで用意されています。

Vimはモード切り替えなどがあり挙動が変わるためか、デフォルトでは用意されていません。が、プラグインがあるのでそちらで設定出来ます。

[IdeaVim](http://plugins.jetbrains.com/plugin/164)

プラグインのインストール方法はこちらがわかりやすいです。
[IntelliJ IDEAでプラグイン更新(追加)を行う際のメモ](http://d.hatena.ne.jp/absj31/20120418/1334685536)

### メリット
- 普段慣れているキーマップにだいぶ近い形での操作が出来る
- デフォルトでは出来ない挙動をいくつか出来るようになる
- Vimmerの勧誘文句に使える

### デメリット
- デフォルトのキーマップと結構な割合でコンフリクトするため、カスタマイズ必須
- いくつかの機能はエミュレートされていない
  - タグ内を選択[vit]などは動かない。カッコ内を選択]vi[ / vi(]とかはちゃんと動く。

例えばカッコ内で[vi(]を入力すると以下のような選択状態になります。デフォルトのPhpStormでは出来ない選択の仕方なので、地味に便利です。
![KeywordFetchShell.php_-_screeme_-____Dropbox_100_Programming_php_screeme_.png](https://qiita-image-store.s3.amazonaws.com/0/20074/361d48eb-602b-cec9-3e26-86e850d6becc.png "KeywordFetchShell.php_-_screeme_-____Dropbox_100_Programming_php_screeme_.png")

以下のような<span>タグ内の文字列選択[vit]はエミュレートされていないので出来ないです。PhpStorm内の[Select Word at Caret]で似たようなことが出来るので、そちらを使いましょう。

```html
<span>この文字列を選択</span>
```


また、デフォルトで割り当てられているキーマップとかなりコンフリクトするので、動かない機能については個別でキーマップ再割当てをすることになります。
なので、細かなカスタマイズが面倒くさい人やデフォルトのキーマップから極力変えたくないという人にはあまりオススメ出来ません。

Vimにある程度慣れていて かつ エディタはカスタマイズしていくもの、と思っている人にはうってつけのプラグインです。
Rails とかで HTMLタグを外してテキストだけ表示するアレ

よく、記事のサマリー表示とかで使いたくなるアレ
```strip_tags``` だった
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags

```rb
strip_tags(article.summary)
```
Middlemanでも使えるよ :dog:
WordPressプラグインを題材にGettextでの翻訳方法を紹介

## はじめに

WordPressのプラグインはGettextの仕組みを使って国際化を実現しています。簡単なサンプルは以下のようなコードになります。

* https://github.com/iwaim/doc-ja-sample

### 翻訳前の表示
![docja-001.png](https://qiita-image-store.s3.amazonaws.com/0/16964/61d83c97-991f-eb2c-a04f-8711328cce61.png)

## Gettextのpotファイル、poファイル、moファイル

Gettextを使った国際化では以下のようなファイルが存在します。

* potファイル - https://github.com/iwaim/doc-ja-sample/blob/master/languages/doc-ja-sample.pot
* poファイル - https://github.com/iwaim/doc-ja-sample/blob/master/languages/doc-ja-sample-ja.po
* moファイル - テキストファイルではないのでURLは割愛

簡単にいえば、それぞれは次のようなファイルとなっています。

* potファイル：プログラム等から国際化対応の文字列を抜き出したファイル
* poファイル：国際化対応の文字列と、その文字列をある言語に翻訳したときの対応を示したファイル

今回のサンプルプラグインのpoファイルから1箇所だけ抜き出します。

```:doc-ja-sample-ja.po
#: ../doc-ja-sample.php:33
msgid "Hello!"
msgstr "こんにちは！"
```

これをみれば想像がつくとは思いますが、プログラム内に記述された文字列「Hello!」に対応する日本語翻訳が文字列「こんにちは！」ということを示しています。大雑把に言えば「msgid」の部分が翻訳前の文字列であり、「msgstr」の部分が翻訳後の文字列となるのです。

このようにそれぞれの文字列を翻訳し、最後にpoファイルからmoファイルを生成して適切な場所に配置すれば翻訳結果が反映されることとなります。

つまり、Gettextを使ったアプリケーションの日本語翻訳の作業は、poファイルの中にある「msgstr」が空のもの（もしくは間違っているもの）を適切な日本語に翻訳する作業となります。

### 日本語翻訳した後の表示
![docja-002.png](https://qiita-image-store.s3.amazonaws.com/0/16964/ee05fcfd-0d23-4a1d-0e05-62f599142df5.png)

## まとめ

* Gettextを使ったアプリケーションの国際化はpotファイル、poファイル、moファイルで実現されている
* Gettextを使ったアプリケーションの国際化の場合、poファイル内の文字列が翻訳対象である

Doc-ja Advent Calendar 2013の3日目は[smellmanさん](http://qiita.com/smellman)です。transifexの使い方などを書いてくださるようです。楽しみですね。
git blameで編集してないはずなのにNot Commited Yetが出る時


改行コードとか空白の設定の可能性.

```
$ git blame -w path/to/file.txt
```

と`-w`をつければok.

ref: [msysgit - Git blame showing no history - Stack Overflow](http://stackoverflow.com/questions/4638500/git-blame-showing-no-history)
clj-webdriverの紹介

◆ 以下の記事は古くなっています．記事中では v0.6.0 を使っていますが，v0.7.x 以降は Selenium-WebDriver を別途 dependencies に加えないと動きません ◆

[clj-webdriver](http://semperos.github.io/clj-webdriver/) の紹介をします. clj-webdriverは[Selenium-WebDriver](http://www.seleniumhq.org/projects/webdriver/)のフロントエンドで, Clojure流のAPIを使ってブラウザを操作することが出来ます.
Rubyで言えば[Mechanize](http://mechanize.rubyforge.org/)と同じことが出来ると考えてよい(たぶん)ので, スクレイピングしていろいろごにょごにょするのに使えます.


```
$ lein new webdriver-test
```

project.cljにclj-webdriverを加えます.

```diff:project.clj
(defproject webdriver-test "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
-  :dependencies [[org.clojure/clojure "1.5.1"]])
+  :dependencies [[org.clojure/clojure "1.5.1"]
+                 [clj-webdriver "0.6.0"]])
```

```
$ lein deps
```

clj-webdriverでは, taxiというハイレベルAPIを使ってブラウジング出来ます. replの上でやるか, エディタの対話的評価機能（例: [vim-fireplace](https://github.com/tpope/vim-fireplace)）を駆使して手元で動かすとかなり試行錯誤がラクです.


```clj
(ns webdriver-test.core
  (:use [clj-webdriver.taxi]))

;; Qiitaトップページにアクセス
(set-driver! {:browser :firefox} "https://qiita.com")
```

これでFirefoxが起動してQiitaのトップページを開きます.

![2013-12-02 at 1.28 AM.png](https://qiita-image-store.s3.amazonaws.com/0/682/27f01879-575a-0de8-ee47-b0ee435a8b19.png "2013-12-02 at 1.28 AM.png")

Twitter経由でログインさせたいので, hashmapでtagやattributesの情報を渡して`find-element`(候補をすべて返す時は`find-elements`)で絞り込み, `click`します.

```clj
;; Twitter経由でQiitaにログイン
(click (find-element {:tag :a, :data-provider "Twitter"}))
```

フォーム入力は`quick-fill-submit`が便利です. CSSセレクタで`#idhoge`と書いて, その後にvalueを入れ, 最後にsubmitします.


```clj
;; TwitterにログインしてQiitaのアクセスを許可
(quick-fill-submit {"#username_or_email" "T_Hash"}
                   {"#password" "weiwei"}
                   {"#allow" submit})
```

これでQiitaにログインできました. 自分のストックからclojureタグの付いた投稿を検索してみます.

![2013-12-02 at 1.42 AM.png](https://qiita-image-store.s3.amazonaws.com/0/682/a52ee241-f35d-0367-004c-9a9d979a4998.png "2013-12-02 at 1.42 AM.png")


```clj
;; 自分のストックを表示してclojureタグで検索
(click (find-element {:tag :a, :href "/stock"}))
(quick-fill-submit {"*[name=q]" "tag:clojure"
                    "button[type=submit]" submit})
```

![2013-12-02 at 2.02 AM.png](https://qiita-image-store.s3.amazonaws.com/0/682/9da1beea-0f4c-378c-d6be-0adb16b82a9e.png "2013-12-02 at 2.02 AM.png")



```clj
;; スクリーンショットも取れます
(take-screenshot :file "./screenshot.png")

;; 結果articleをすべて抜き出して加工するところまで書きたかったけど時間足りなくなった
;; (find-elements {:tag :article})

(quit)
```

スクリーンショットも取れるので(これはSelenium自体の機能ですが), 単純作業の自動化にも使えます.
Add mail setting with ghost.

Ghostのmailの設定を追加した。
自前のSMTP Serverを利用したかったため、nodemailerのwellknown.jsへ
SMTP Serverをサービスとして追加した上で、config.jsへ設定を追加した。

GhostのInstallは[こっち](http://qiita.com/rask33/items/a07a5701abe52c089f44)。

基本的に作業はGhostのinstall directory以下で実施する。
- Ghostのinstall directory: /srv/http/ghost

### wellknown.jsにSMTPサーバを追加する

```bash
cd /srv/http/ghost
cd node_modules/nodemailer/lib/
vi wellknown.js
```
module.exports = { のセクションに以下の行を追加する。

```vim:wellknown.js
    "mySMTP":{
        transport: "SMTP",
        host: "YOUR SMTP Server",
        secureConnection: true,
        port: 465,
        requiresAuth: true,
        domains: ["rYOUR DOMAIN"]
    },
```

### config.jsにmailの設定を追加する

```bash
vi config.js
```

```vim:config.js
        mail: {
        transport: 'SMTP',
        fromaddress: 'FROM E-MAIL ADDRESS',
        options: {
            host: 'YOUR SMTP Server', // Not required, but error occured when I hadn't add.
            service: 'mySMTP',
            auth: {
                user: 'USER NAME',
                pass: 'YOUR PASSWORD'
                }
            }
        },
```

### ghostを再起動
```bash
pm2 restart all
```
AngularJSのTutorialのstep-6よりイメージの出力の方法

AngularJSのTutorialのstep-6を実施したレポート

正直なところ、最初のうちはなぜこのTutorialがあるのかわからなかった。
ngSrcのAPIの説明を読んでようやく分かったが、ngSrcを使わずにｓｒｃ属性に直接ハッシュを使った記述を試みるとブラウザに誤認識される。Inspectorを使って、接続履歴を見るとわかるが、コンパイルされる前のURLにアクセスを試みて404になっている。

こういうところは、JavaScriptなのでブラウザで一度読み込まれないと動作できないところの悲しいところですね。
サーバ側であれば、何考えずにｓｒｃ={{hash}}と書けるのに。


#### テンプレート

今回の注目点は下記の<img>タグの書き方。

```html
            <a href="#/phones/{{phone.id}}" class="thumb"><img ng-src="{{phone.imageUrl}}"></a>
```

使い方によっては、プロフィール画像の画像がなかった時のシステムデフォルト画像の切り替えに使えたりできる？


> >  we used the now-familiar double-curly brace binding in the href attribute values.
> 
> 上記の訳し方がわかららず。href属性に関しては、何を利用したことを言っているのかわかっていない

#### テスト

e2eテストは、ブラウザの遷移先を確認している。

```js
    it('should render phone specific links', function() {
      input('query').enter('nexus');
      element('.phones li a').click();
      expect(browser().location().url()).toBe('/phones/nexus-s');
    });
```

1. inputで、nexusと検索して、データを絞り込み
1. elementで一番上？の画像を取得して、クリックイベントを呼び出す
1. expectで、遷移後のURLをチェックしている。

下記の記事で、こちらの仕組みに関わるセキュリティ面の記事が投稿されているため、貼り付けます。

[AngularJSのStrict Contextual Escapingって何だ？](http://qiita.com/zoetro/items/0b01fda20f8000e485cf)
【基礎】CodeIgniterでライブラリを作成する

この記事は[CodeIgniter Advent Calendar 2013](http://qiita.com/advent-calendar/2013/codeigniter) の 2 日目の記事です。

先日に続いて2記事目（さて、これが何回続くか。。

まだまだCodeIgniter Advent Calendar は募集中ですよ！


さて、今回の内容ですが、先日はコアクラスの拡張だったので、本日はライブラリの作成方法でも紹介しましょう。

[Creating Libraries](http://codeigniter.jp/user_guide_ja/general/creating_libraries.html)

もちろん、公式に書いてあります！！！


## ライブラリの作成

### ライブラリって？

ある機能を追加したい場合にユーザーが機能を作成・拡張し、それをCodeIgniterでロードできるものです。

ライブラリはCodeIgniter自身が最初から定義しているシステムのライブラリと、ユーザーが作成・拡張を行う事もできます。

今回は、ユーザーがライブラリを作成する方法を紹介します。（ライブラリの話で数日保つんじゃ・・・？）


### ユーザーのライブラリ作成方法

さて、ユーザーがライブラリの作成を行う方法ですが、これまた非常に簡単です。

applicationフォルダにある libraries にあるルールでファイルを作るだけです。

これだけ！

ルールも非常に簡単で、

1. ファイル名は先頭が大文字
2. クラス名はファイル名と同じ

※作成したライブラリは先頭を小文字でロードすることになります。


では、Basic認証機能を備えたライブラリの作成順序を述べますと

1. ./application/libraries/ の中にBasic_auth.php を作成する
2. クラス名をBasic_auth とする
3. ロードしたいところで $this->load->library('basic_auth'); のコードを挿入
4. 以後、$this->basic_auth->foo(); のように使用可能

That's it.

文字じゃなくてコードの方がいいですよね。わかります。

```php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Basic_auth {

	private $_default_user = 'admin';
	private $_default_password = '';

	private $_admin_user;
	private $_admin_password;

	private $_logged_in_key = 'logged_in';

	public function __construct()
	{
		$config =& get_config();
		$this->_admin_user = (isset($config['admin_user']))? $config['admin_user'] : $this->_default_user;
		$this->_admin_password = (isset($config['admin_password'])) ? $config['admin_password'] : $this->_default_password;
	}

	public function login()
	{
		$CI =& get_instance();
		$logged_in = $CI->session->userdata($this->_logged_in_key);
		if ($logged_in !== TRUE)
		{
			if ($this->headers_401())
			{
				$CI->session->set_userdata(array(
					$this->_logged_in_key => TRUE
				));
			}
			else
			{
				die("Please enter a valid username and password");
			}
		}
	}

	private function headers_401()
	{
		$CI =& get_instance();
		$user = $this->_admin_user;
		$password = $this->_admin_password;
		if (!$CI->input->server('PHP_AUTH_USER'))
		{
			header('WWW-Authenticate: Basic realm="SMF Studios"');
			header('HTTP/1.0 401 Unauthorized');
		}
		else
		{
			if (($CI->input->server('PHP_AUTH_USER') === $user) && ($CI->input->server('PHP_AUTH_PW') === $password))
			{
				return TRUE;
			}
		}
		return FALSE;
	}

}

/* End of file Basic_auth.php */
/* Location: ./application/libraries/Basic_auth.php */
```

上記な感じで./application/libraries/Basic_auth.php を作成します。

これを、例えば./application/controllers/admin.php などで使用するときは

```php
class Admin extends MY_Controller {

	public function __construct()
	{
		parent::__construct();
		$this->load->library('basic_auth');
		$this->basic_auth->login();
	}

}
```

このような感じで使用できます。

めっちゃ簡単ですね。


## 終わり

作成したライブラリによくわからん`get_instance` とかあるので、明日はこれを紹介しましょうかね。


### 次回のCodeIgniter Advent Calendar2013

誰もいないので、すごくざあああああああっとしか書いてないです。
しかし、こんな機会でしかブログっぽいの書かないので良い事でしょう。
FMX でカメラの画角を変える方法

![TrueCamera.png](https://qiita-image-store.s3.amazonaws.com/0/31414/68643093-7da8-c948-ee4c-25b7269ce56a.png)

・[カメラの画角を変える方法](http://www.luxidea.net/delphi-lab/aov/) @ [LUXIDEA institute](http://www.luxidea.net/)
EclipseからローカルのCloud FoundryにWebアプリをデプロイ

[前回の記事](http://qiita.com/us10096698/items/83c980b1b7678876f568)で作成したWebアプリケーションを[こちらの記事](http://qiita.com/us10096698/items/8e1e995d7bbb591368a6)で作成したローカルのCloud Foundry v2上にデプロイして動かしてみます。

## 参考サイト
+ [Cloud Foundry Eclipse Plugin](http://docs.cloudfoundry.com/docs/using/managing-apps/ide/sts.html)

## 準備
Cloud Foundry v2のVMが起動していない場合、以下の手順でVMを立ち上げ、Cloud Foundryプロセスを起動します。

```
$ cd path/to/cf-vagrant-installer
$ vagrant up
$ vagrant ssh

vagrant@cf:~$ cd /vagrant
vagrant@cf:/vagrant$ sh ./start.sh
```

ログインしておきます。

```
vagrant@cf:/vagrant$ cf login
target: http://api.192.168.12.34.xip.io:8181

Email> admin

Password> ********

Authenticating... OK
1: my-org-name
2: myorg
Organization> 2

Switching to organization myorg... OK
```

デフォルトの場合、 __Email__ は"admin"、 __Password__ は"password"で入れます。

## Cloud Foundryプラグインのインストール
__Eclipse Marketplace__ で「cloud foundry」と入力して検索し、 __Cloud Foundry Integration for Eclipse__ をインストールします。

1. `Manage Cloud`をクリックします。
1. `Add` をクリックします。
1. __Name__ には適当な名前を(今回は`local-vagrant-cf`にしました)、 __URL__ にはCloud Foundryのtarget URLを入力します。上記で`$ cf login`を打った時に出てくるtargetを指定します。
1. `OK`をクリックします。
1. __Email__ に"admin"、 __Password__ に"password"を入力し、`Validate Account`ボタンをクリックします。
1. 問題なければ、「Account information is valid.」と出ます。今回はdefaultスペースを使うのでそのまま`Finish`ボタンをクリックします。
1.  __Servers__ タブに追加したCloud Foundryサーバプロファイルが追加されれば完了です。

## Java Webアプリケーションをデプロイ
前回作ったサンプルのWebアプリをデプロイしてみます。

1.  先ほど作成したサーバプロファイルを右クリックし、 __Add and Remove__ をクリックします。
1.  __Available__ リストに前回作成したWebアプリ(webappsample)があると思います。選択して、`Add >` ボタンクリックで  __Configured__ リストに移動します。
1. `Finish`をクリックします。 __Application details__ ウインドウが開きます。
1.  __Name__ を適当に入力(デフォルトでWebアプリプロジェクト名が入っているので、問題なければそのままでOKです)します。外部のBuildpackは使ってないので __Buildpack URL (optional)__ 欄には何も入力しません。
1. `Finish`ボタンをクリックします。ステージングプロセスが走り、しばらくするとアプリがデプロイされます。自動的にJavaのBuildpackやTomcatがダウンロードされている様子がコンソールで確認できます。
1. ここで、 __Servers__ タブ内のCloud Foundryサーバプロファイルをダブルクリックして開いてみます。 __Applications and Services__ タブに移動すると、 __Applications__ 欄に先ほどのアプリが追加されていることが確認出来ると思いますので、選択してみます。
1. 画面右側にアプリケーションのコンフィギュレーション情報が出ます。 __Mapped URLs__ にデプロイ先URLのリンクが表示されています。このリンクをクリックするとEclipseの内蔵ブラウザでプレビューできます。前回同様の画面が出ていればデプロイ完了です。

念のためCloud Foundry VMからも確認してみます。

```
vagrant@cf:/vagrant$ cf apps          
Getting applications in myspace... OK

name           status    usage      url                              
webappsample   running   1 x 256M   webappsample.192.168.12.34.xip.io
```

## まとめ
前回の記事と合わせて、次世代Java Webアプリ(?)を開発するためのツールチェインの簡単な使い方を勉強しました。

1. MavenでWebアプリを自動ビルドできる環境を整える
1. WebアプリはCloud Foundry PaaS上にデプロイ、スケーラブルなWebアプリとして実行する
1. プロジェクトのソースはGit(今回はGithub)で管理

アジャイル開発といった流行りのキーワードがどういうツールチェインで実現しているのかを実際に体感すると本で読む以上の面白さを感じますね。

それでは今回はこの辺で。
web2pyメモ：ハローワールド

## まずはインストール ##
http://www.web2py.com/init/default/download

## その後は ##
```
python web2py.py -a 'password' -i 127.0.0.1 -p 8000
```
## アプリケーション作成 ##
```
python web2py.py -S appName
```
appName/views/default/index.html　とかが作られる

## ハローワールドする：appName/controllers/default.py ##
```py
def index():
   return "Hello,World!"
```
サーバーを起動してチェックすると確かにできてる（URIは.../index）

### テンプレートに組み込んで表示するには ###
```py
def index():
   return dict(message="Hello!")
```

## テンプレート内にスクリプトを組み込む ##
```html
<body>
   {{for i in range(3):}}
      {{=message}}<br/>       <!-- {{=値}}で値をHTMLに出力 -->
   {{pass}}                   <!-- コントローラー関数で渡した辞書要素は変数として利用可 -->
</body>
```
gettext使ってみた(続き)

gettext使ってみた(続き)
前回の続きです。

hello.potをコピーしたところから。
コピー先フォルダに移動

```
$ cd <ベースディレクトリ>/en_US/LC_MESSAGES/
```

フォーマットを変更

```
$ msgfmt -o hello.mo hello.po
```

ここまでできたところで一旦<ベースディレクトリ>に戻ります。

```
$ cd <ベースディレクトリ>
```

そしてhello.phpを編集

```php:hello.php
<?php

// 英語の環境変数の値をロケールに設定
setlocale(LC_ALL, "en_US");

// "hello" という「ドメイン」のリソース用のベースディレクトリを指定
bindtextdomain("hello", ".");
// "hello" 「ドメイン」のリソースを使用する
textdomain("hello");

printf(_("こんにちは"));
?>
```

実行してみます

```
$php hello.php
```

結果は

```
こんにちは
```

変わってない／(^o^)＼
なぜだあああああああ
と言うことで再び四苦八苦すること2,3時間
この間php.iniをいじってみたりしてみましたが全く効果無し。
またもぼーっとした頭でとりあえずgettext関連のウェブページを見ていると以下のブログを発見
http://d.hatena.ne.jp/ao3/20080328/1206673266
見ていくと目から鱗な情報が！
以下引用

```
で、本題の翻訳についてです。
つぎのように、msgid と、msgstr が対になっています。

msgid "hello world"
msgstr ""
```

…ん？
さきほどのhello.poに加えた変更を確認してみる
hello.po

```
msgid "hello"
```

…／(^o^)＼ミス再び。
翻訳元になる文字列をhelloに変えてしまっていた／(^o^)＼ｱﾎﾔ
修正

hello.po

```
msgid "こんにちは"
msgstr "hello"
```

.moファイルを作り直し

```
$ msgfmt -o hello.mo hello.po
```

リベンジ！

```
$php hello.php
```

…
…
できた＼(^o^)／
無事

```
hello
```

と翻訳された出力を確認しました。

以上、get textを使ってみた。でした。
自分を疑うことの大切さを嫌というほど味わいました。終わり。
mruby-redisでランキングを実装

1. はじめに
今回は[mruby-redis](https://github.com/matsumoto-r/mruby-redis)でランキングを実装します。RedisはKVS(キーバリューストア)のインメモリーデータベースです。キーは文字列で、値には様々な型を保存することができます

2. 値の型
値の型にはString,Hash,List,Set, Sorted Setの5種類が使用出来ます
• String 文字列
• Hash 連想配列。複数の要素を格納出来、文字列のキーに対して、値を設定できます
• List 複数の要素が格納でき、順序があります
• Set ユニークな値のみ格納できる集合です
• Sorted Set    ユニークな値のみ格納し、与えられたスコアによってソートされます

3. mruby-redisでランキングを実装
mruby-redisはmrubyからRedisにアクセスするMGEMです。今回はSorted Setを使用してランキングを実装します

4. mruby-redisのインストール
    まず、mrubyをダウンロードします

    ```text
    $ git clone https://github.com/mruby/mruby
    ```
    build_config.rbに以下を追加します

    ```ruby
    MRuby::Build.new do |conf|

      # ...(省略)...

      conf.gem :git => 'https://github.com/matsumoto-r/mruby-redis.git'
    end
    ```

   ビルドします

    ```text
    $ rake
    ```

5. redis-serverを起動
redis-serverをローカルにインストールし、起動してください

6. ランキング
ユーザーID, スコアを追加すると、スコアが高い順にソートして表示します。ランキングを実装した`ranking.rb`は以下の通りになります

    ```ruby:ranking.rb
    host     = "127.0.0.1"
    port     = 6379
    database = 0

    redis = Redis.new(host, port)
    redis.select(database)

    # データの挿入/更新
    #redis.zadd(high-score", score, user_id)
    redis.zadd("high-score", 400, "lion")
    redis.zadd("high-score", 650, "cat")
    redis.zadd("high-score", 800, "dog")
    redis.zadd("high-score", 700, "bug")

    # データの順位を返す
    high_score_list = redis.zrevrange("high-score", 0, -1)
    puts "rank name score"
    puts "---------------------"
    high_score_list.each do |name|
      puts "#{redis.zrevrank("high-score", name) + 1}: #{name} #{redis.zscore("high-score", name)}"
    end

    redis.close
```

    実行結果は以下の通りになります

    ```text
    $ mruby ranking.rb
    rank name score
    ---------------------
    1: dog 800
    2: bug 700
    3: cat 650
    4: lion 400
    ```

7. mruby-redisのメソッド解説
• `Redis#select(データベース)`は0から15あるデータベースを選びます。ここでは0を選んでいます
• `Redis#zadd(キー名, スコア, ユーザーID)`でキー名のSorted SetにスコアとユーザーIDを対で追加します
• `Redis#zrevrange(キー名, 開始インデックス, 終了インデックス)` はスコアにしたがって、降順にSorted Setを返します。返す範囲を開始インデックと終了インデックスで指定します。開始インデックスが0から始まります。また、末尾からは-1,-2となります。　`redis.zrevrange("high-score", 0, -1)`はスコアの降順にすべての要素を返すことになりますちなみに昇順は`Redis#zrange(キー名, 開始インデックス, 終了インデックス) `となります
• `Redis#zrevrank(キー名, ユーザーID)`は降順のランクを返します。ランクのはじめは0です。ちなみに昇順のランクは`Redis#zrank(キー名, ユーザーID)`となります
• `Redis#zscore(キー名, ユーザーID)`でスコアを返します

8. おわりに
RedisでSorted Setを使用して、ランキングを実装してみました。Sorted Setは、`Redis#zadd`するたびにソートされますので、リアルタイムランキングに有用です
テキストファイルから指定した文字列を含む行を出力する

「テキストファイルから指定した文字列を含む行を出力する」スクリプトです。

私の場合、Pythonスクリプトはテキストファイルを加工する時によく記述します。

まず、ひな形としてこのスクリプトで書いて、後から処理を追加して行きます。
\# そのため、このスクリプトは「手が勝手に動く」レベルで記述できます(^^;)

grepコマンドやエディター機能がない時などに、意外と重宝しますよ！

```py
# -*- coding: utf-8 -*-

ld = open("テキストファイル.txt")
lines = ld.readlines()
ld.close()

for line in lines:
    if line.find("検索文字") >= 0:
        print(line[:-1])
```
gettext使ってみた

gettext使ってみた

こちらの記事
海外でも通用するエンジニアになる: i18nしてますか？（gettext+PHPその1）
http://el.jibun.atmarkit.co.jp/kaigaiengineer/2010/08/i18ngettextphp-.html
を参考にget textをさくらVPSで使ってみました。
その過程で躓いたところをメモ

まずは記事の通りに翻訳元となるphpファイルを作成

```php:hello.php
<?php

printf(_(こんにちは));

?>
```

んで持って
下記コマンドを実行

```
$xgettext -k"_" --from-code=UTF-8 -o hello.pot hello.php
```

このあたりはサクサク行きたいところ。これでhello.potが作成されているはずなので

```
$ls
```

で確認
…
できてない／(^o^)＼
なんでだろ？と思ってちょっとググってみる
すると以下の記事を発見
PHPでGettext拡張を使ってみた - 趣味プログラマの外部記憶
http://d.hatena.ne.jp/ao3/20080328/1206673266
なるほど、インストールが必要なのね
さらにググると公式サイト？を発見
http://www.gnu.org/software/gettext/

と、いうことで早速インストール
以下のディレクトリに移動して

```
$cd /usr/local/src
wget
$wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.3.1.tar.gz
```

からの解凍

```
$tar zxvf gettext-0.18.3.1 tar.gz
```

解凍したディレクトリに移動して…

```
$cd gettext-0.18.3.1
$./configure
```

makeしてmake install

```
$make
$make install
```

これでインストールは完了！
行けるはず！再度以下を実行

```
$ xgettext -k"_" --from-code=UTF-8 -o hello.pot hello.php
$ls
```

…
…
できてない＼(^o^)／なぜだああああ
2,3時間ほど色々と調べた挙句何もわからず疲れ果てました
そこでふと思いついて先ほど作ったphpファイル自体を実行してみることに

```
$php hello.php
```

すると以下のようなエラーが。

```
PHP Notice:  Use of undefined constant こんにちは - assumed 'こんにちは' in <ベースディレクトリ>/test_repo/hello.php on line 3
```

…ん？
回ってない頭でとりあえずファイルの三行目を見てみる

```php
printf(_(こんにちは));
```

…
…
文字列囲んでねえ／(^o^)＼
他人を疑う前にまず自分を疑え
プログラミングの鉄則を今一度心に刻んだ瞬間。でもこれ、中々できないんですよね未だに(-_-;)
今回は自分の休みの時間の内のほんの3時間(泣)を失っただけだ！
…と無理矢理切り替えていきましょう！
といいたいところですがこうなってくるとそもそもgettextのインストール自体必要だったのかどうかも正直怪しい(-_-;)スイマセン
とりあえず""で文字列を囲んで再度の実行

```
$ xgettext -k"_" --from-code=UTF-8 -o hello.pot hello.php
$ls
```

で確認すると…
あった＼(^o^)／
ありました。hello.pot
これを新たに作成した
<ベースディレクトリ>/en_US/LC_MESSAGES/
にコピー

```
$ mkdir -p <ベースディレクトリ>/en_US/LC_MESSAGES
$ cp hello.pot <ベースディレクトリ>/en_US/LC_MESSAGES/hello.po
```

そっから
hello.pot内の以下を変更

```
msgid "こんにちは" → msgid "hello"
```

長くなりそうなので参考にさせていただいたブログにならってここまでで一旦区切ります
UbuntuでTwitter bootstrap 3をコンパイルするまでの長い道のり

bootstrap3のコンパイルって大変なんだね・・・

とりあえずgitでbootstrap落としてきます。
git が無い場合は`apt-get install git`してください。

```bash:
$ git clone https://github.com/twitter/bootstrap.git
```

きっと正しくは`git checkout v3.???`みたいなのでバージョン指定するべきなのかもしれませんが、
今回はこのままmasterと戦います。

なんかbootstrapは3からgruntってやつでコンパイルされるらしく、Grunt.jsが設定ファイルらしいです。
gruntはnode.jsで動くらしいので、とりあえずnode.jsのバージョン管理ができるらしいnvmを入れます。

```bash
$ cd ~
$ git clone https://github.com/creationix/nvm.git .nvm
$ echo ". ~/.nvm/nvm.sh" >> .bashrc
$ . .bashrc
```

`nvm ls-remote`でインストール可能なバージョン一覧が出るらしいので、適当に最新っぽいのをインストール。
どうやら2番目の数値が奇数の場合開発版らしいので、できるだけ偶数を選べばいいらしい。

```bash
$ nvm install v0.10.22
$ nvm use 0.10.22
```

node.jsが入ったと思われるので、gruntをインストール。

```bash
$ npm install -g grunt-cli
```

bootstrapをクローンしたディレクトリーに移動して、以下を実行。

```bash
$ npm install
$ grunt dist
```

これで完了！dist/ディレクトリーの下にcss/, js/, fonts/ができているはずです。
ちなみに、`dist`って付けずに実行するとテストとかも実行するみたいなのですが、
これをやろうとするとjekyllが無いって怒られました。

がんばってrbenv入れてjekyll入れてみたのに変わらない・・・なんで？
まあルービーはわからない事だらけなので諦めましょう。誰かが優しく教えてくれるまで。
anzu.elの紹介

この記事は. [emacs Advent Calendar 2013](http://qiita.com/advent-calendar/2013/dot-emacs)の二日目です。

拙作の anzu.elについて紹介します.


## 概要
manga_osyoさんの [vim-anzu](https://github.com/osyo-manga/vim-anzu)を Emacs向けに portしたもので,
Google Chromeの検索のように, 検索文字列が現在のバッファでいくつマッチするのか
という情報と現在の位置をモードラインに表示するマイナーモードを提供します.


以下にイメージを示します.


![anzu-gif1](https://raw.github.com/syohex/emacs-anzu/master/image/anzu.gif)


モードラインの左端に注目してください. 検索文字列に応じて, 現在の位置,
全体のマッチ数が変化していることがわかります.


知らないソースを見て検索をするときに, 今の検索文字列が適切かどうかを
すぐに判断することができ, 非常に重宝しています.


## インストール方法
MELPA, Marmaladeに登録されているので, package.elでインストールできます.

```
M-x package-install anzu
```

また el-getのレシピとしても登録されているので, el-getを使っている方も
手軽にインストールすることができます.

## リポジトリ
https://github.com/syohex/emacs-anzu


## 設定
常に有効にしたい方は以下のように global-anzu-modeを有効にしてください

```cl
(global-anzu-mode +1)
```

### カスタマイズ
カスタマイズの詳細については [README](https://github.com/syohex/emacs-anzu)を見ていただくと
してここではいくつかのおすすめの設定を示します.

```cl
(custom-set-variables
 '(anzu-mode-lighter "")
 '(anzu-deactivate-region t)
 '(anzu-search-threshold 1000))
```

`anzu-mode-ligter`はモードラインに表示されるマイナーモード名です. 常に anzu-modeを
有効にするのであれば空文字列で良いでしょう.

`anzu-deactivate-region`は後述の置換コマンドをリージョン指定で行ったときに,
コマンド実行直後リージョンのハイライトを無効にするかどうかの設定です.
色がついたまま置換を行うと, インタラクティブに挿入される文字列が見づらいので
置換コマンドを使うのであればこの変数を `t`にすることを推奨します.

`anzu-search-threshold`は全体のマッチ数を数えるときに, この数以上は数えない
ようにするというものです. 巨大なバッファで検索文字列と一致するものが数万,
数十万となったとき, 検索が非常に遅くなってしまいます. きっちり全体数を知りたい
という場合は別ですが, 多くの場合は「たくさんマッチする」という情報を知れれば
十分です. この変数に自分が多いと感じる数を設定しておくことで, 検索に余計な
時間を使うことを回避できます.


migemoユーザは `anzu-use-migemo`を `t`にすることで, 日本語検索にも
対応できます. (私は migemoを使っていないので `nil`にしています)


##置換コマンド
anzu.elは置換コマンドも提供します. 置換コマンドでは, 被置換文字列のハイライト,
置換文字列の挿入をインタラクティブに行います. `anzu-query-replace`が `query-replace`の
anzu版, `anzu-query-replace-regexp`が `query-replace-regexp`の anzu版となっています.


以下に正規表現置換のイメージを示します.

![anzu-replace](https://raw.github.com/syohex/emacs-anzu/master/image/anzu-replace-demo.gif)


### anzu-query-replace-at-cursor-thing
その他の置換コマンドでおすすめなのが`anzu-query-replace-at-cursor-thing`です.
これは特定の範囲内(デフォルトでは関数内)の文字列を置換するコマンドでデフォルトの
被置換文字列はカーソル下の文字列(厳密にはシンボル)です. リファクタリングでとても
重宝します. 以下にイメージを示します.

![anzu-query-thing.gif](https://qiita-image-store.s3.amazonaws.com/0/12235/dbe747b9-bfb1-69d8-a932-3b64d51fae63.gif)

`o`という名前がいまいちだなと思って名前を変更する例です.
正規表現としては `\\<o\\>`という指定をするので, `o`を含むだけの
文字列にマッチするということはありません. 


### visual-regexp
置換コマンドについては[visual-regexp](https://github.com/benma/visual-regexp.el)も同等の機能を提供しています. むしろ highlightは
そちらの方がおしゃれですなので, 通常の置換コマンドだけ使うのであれば, `visual-regexp`で
良いと思います.


### 置換コマンドの良いところ
visual-regexpや anzuの置換コマンドで良いところは、置換する文字列が何かがすぐに
わかることです. これは特に正規表現置換のときに助かります. Emacsの正規表現が
あまり使われないのは正規表現置換が使いづらいからと私は考えます. せっかく入力
したのに何もマッチしなくて入力の苦労はなんだったんだとなってしまい, 正規表現
置換を使わなくなったという人は少なくないと思います. visual-regexpや anzuが
提供する置換コマンドで正規表現がどのようにマッチするかを把握しながら使う
ことでるので 正規表現力をアップさせるのにもってこいです. この利点から私は
標準の正規表現コマンドをそれらのコマンドに置き換えることを推奨します.


## おわりに
anzu.elの紹介をしました. 機能のすべてについては述べられなかったので,
詳細を知りたい方は [ドキュメント](https://github.com/syohex/emacs-anzu/)を参照してみてください.
わからないことがあれば [twitter](https://twitter.com/syohex)等で遠慮無く聞いてください.


機能拡張, 問題等ありましたら [github issues](https://github.com/syohex/emacs-anzu/issues)までお願いします.

明日の担当は @shiba_yu36さんです. お楽しみに.
ゲーム制作計画7日目！

#れっつJavaScript
本日は、JavaScriptの練習を行いました。
初心者のためのJavaScript講座(http://www.pori2.net/js/)を読みながら、
実行しつつ読みつつで、
他の言語とあまり変わらなそうな部分を流し読みしました。
htmlもほとんどやったことがないので、
同時進行でお勉強中です。
おそらく一から勉強する時間はないので、
基礎の基礎の基礎くらいを覚えたら、
やりたいことをその都度調べながら開発を進めるという形になると思います。

#ゲーム案
ゲームの案ですが、ぱっとしないアイデアはたくさん集まったのですが、
これといった確定の企画が思いつきません。
また、だんだん思考が
一捻りしてやったゲームにしてやろう
的な方に傾いていて余計に思いつかなくなっている気がします。
もう少し考えてだめそうならば、
スネークゲームとかはどうかなと思います。
自分が好き&システムが単純なので。
しかも以前授業で作ったことがあるので、アルゴリズムはなんとなくできています。
しかし、スネークゲームにするにしてもなんのことにするかにセンスが出ますね。
スネークゲームでそのまま絵も蛇で設定も蛇だとひねりが足りない気がします。
自分らしさを出したいところではあります。

おもいっきりネタを狙って考えたのが
きんぎょすくわれないげーむとか
金魚すくいで金魚が救われないようにうまく誘導するゲーム！
どうすれば面白くプレイできるか全く思いつくません。

#言い訳
最近ネット切れる間際に書き込んでいるので、
キータに書き込むのが走り書きレベルになっています。
誤字脱字散文だらけだと思いますがご容赦を。
cocos2d-xでのJSON利用方法

最近はネットを使ったゲームも多く、JSONでやり取りしているゲームも多いと思いますので、cocos2d-x 2.2.1 でのJSONの利用方法について書きます。

cocos2d-xでのJSONパーサーといえば、下記の清水様のブログの記事にありますspine/Json.hが有名で、cocos2d-xの本体に付属しているという事で自分も使っています。
<a href="http://tks2.net/memo/?p=401">cocos2d-xにおけるJSONパーサー</a>

今回はこちらを使用する際の注意点と、付け加えておくと便利なメソッドを紹介します。
※2013/12/07 t-model 様のご指摘があり、後半のbool値取得の部分の文章を変更させていただきました。

まずはじめに注意点です。
こちらのパーサーではcppの67行目にありますparse_numberメソッドの中を見ていただくとわかる通り、JSONに書かれています数値はfloat値でパースしており、それをvaluefloatにはfloat値のままで、valueintにはint値にキャストしたものが保存されます。
<pre>68行目
float n = 0, sign = 1, scale = 0;
95、96行目
item->valuefloat = n;
item->valueint = (int)n;</pre>
※整数で掛かれた数値を整数値のまま取り出したければ改良が必要です。

またJson_getIntでint値を取り出そうとした場合は、valuefloatをintにキャストして取り出しています。
<pre>370行目
int Json_getInt (Json* value, const char* name, int defaultValue) {
	value = Json_getItem(value, name);
	return value ? (int)value->valuefloat : defaultValue;
}</pre>
※valueintに保存された値を取り出したい時にはJson_getItemを利用して、自力でvalueintを取ってこないといけません。

何故にJson_getIntで素直にvalueintを返さないんでしょうか？
入れる時にintでキャストをしているから問題は無いと思うのですが…
知っている人がいたら教えといて下さい。

次に付け加えておくと便利なメソッドを紹介します。

現行のまま使用しますとJSONにboolがある時はJson_getItemを利用しないといけません。
例えば、"abc":false、"def":true"などの時、このパーサーではtypeにJson_FalseかJson_Trueを入れ、Json_Trueの場合はvaluintに1を入れてくれるのですが一発で取り出せるメソッドが無く、Json_getItemを利用しないとbool判定ができないのです。

なので下記のようなメソッドを作っておくと楽です。
下記のメソッドでは入力されたjsonが存在していて、かつパースした結果のtypeがJson_True かJson_Falseであればtrueかfalseを返し、それ以外はdefaultValueを返す事を期待しています。

<pre>spine/Json.h
bool Json_getBool (Json* json, const char *name, bool defaultValue);</pre>
<pre>spine/Json.cpp
bool Json_getBool (Json* value, const char* name, bool defaultValue) {
    value = Json_getItem(value, name);
    return value && (value->type  == Json_True || value->type == Json_False) ? value->type == Json_True: defaultValue;
}</pre>

次回はCCDictionaryからJSONを作ったりするやり方や、実際の通信（httpclientやwebsocket）への応用などを書ければと思っています。
VB5で作ったラテン語アプリを発掘

初めまして、@7shiと申します。印欧祖語を目指してラテン語を勉強するため(?)、[ラテン語の読書会](http://connpass.com/series/372/)を開催しています。その会はプログラマの方が多いため、技術系の話題でAdvent Calendarが書けないかと思い付いたのがこのラテン語Advent Calendarです。

大学生時代にヨーロッパ言語の学習をソフトで補助できないかということに興味を持って、Visual Basicでアプリを作ることにハマっていました。

メインマシンのハードディスクがクラッシュしたため当時作っていたアプリの大半は散逸しましたが、ホームページ（既に閉鎖）で公開していたものだけはいくつか残っています。ソースを公開していたのが幸いでした。当時はまだオープンソースという言葉がありませんでしたが、みんなでプログラミングするためにはソースを融通し合うべきであると独自に考えていたような気がします。

使い始めた当初のVBはバージョン2でしたが、2→4→5とアップデートしていきました（3が欠番なのは日本で販売されなかったため）。それ以降はFreeBSDに乗り換えてC++を使い始めたため、今でも根強く使われているVB6は使いませんでした。Windowsでは本格的にC++を使うことはなかったため、MFCも覚えず仕舞いでした。

# 実行できない！

その中にラテン語の活用形を検索するアプリがあります。VB5でビルドしたEXEが残っています。しかしVB5のランタイムがないと実行できません。VB5のCD-ROMがどこかに行ってしまったため、リビルドすることもできません（捨てていないので探せばあるはずですが）。

当時はリビルドすれば良いと軽く考えていたためインストーラを作りませんでしたが（インストーラには自動でランタイムが含まれます）、こういう事態になるのならインストーラ付きで残しておけば良かったと後悔しました。VBのランタイムが後付けだというのがこんな所で効いてきます。

検索するとVB5のランタイムは簡単に見付かります。

* [Visual Basic 5.0(SP3) ランタイム](http://www.vector.co.jp/soft/win95/util/se081909.html)

それをインストールしても「'COMCTL32.OCX' が適切に登録されていません」というエラーです。オプションのコンポーネントを使っているため、それを含むランタイムでないと実行できないという罠です。

さらに探すと、それだけを含むランタイムが見付かりました。

* [Visula Basic 5.0(SP3) 用ComCtl32.OCX](http://www.vector.co.jp/soft/win95/util/se104893.html)

期待しつつ実行すると今度はDAO（データベース関係のコンポーネント）がないというエラーです。ラテン語のデータをMDBファイル（Accessのデータベース）に入れていたので、それを処理するために必要でした。

DAOを検索してインストールします。

* [Vb5ランタイム(DAOパック)](http://www.vector.co.jp/soft/win95/util/se092417.html)

これでようやくソフトが起動しました！

![latinapp.png](https://qiita-image-store.s3.amazonaws.com/0/32057/a4c314e2-2ea8-697a-edb5-69e0fe47b772.png)

当時は意識していませんでしたが、結構オプションのコンポーネントを使っていたようです。ランタイム地獄になってしまいました。

この続きはまた後日改めて書きます。
Go言語でExcelファイル開く時の注意点[xslx]

本来なら触りたくないExcelだけど、中身のチェックを頼まれて、
人間の目でやるのはちょっと面倒だなと思ったので
自動化してみた時に出会った問題。

使ったライブラリは↓
https://github.com/tealeg/xlsx

ワークシート１枚のテストファイルは通ったけど、
本番のファイルがランタイムエラーになって焦った。

どうもこのライブラリは、シートの読み込みに
workbook.xml.relsを参照せずに決め打ちしているっぽい。
なので、このライブラリ使うときにはシート１枚にして開きましょう。
(シートのIDがちゃんと連番になってるものは複数シートでも開ける)

それっぽいところを直ししたのが↓
https://github.com/kokardy/xlsx
一応、pull request送ってみたけど、採用されるかな。

20131204追記
pull requestは割とあっさりマージされた。
なので、もとのライブラリでももう大丈夫なはず。
macにruby2.0+rails4.0入れた際のメモ

ここを参考にやった

http://railsapps.github.io/installrubyonrails-mac.html

途中gccで詰まったので、いかにまとめた
http://qiita.com/shiratsu/items/76c2ab26282e76cd9aa1

railsはこの辺参考
http://t.nzk.me/entry/2013/05/16/144817
今年のCoronaSDKの振返り

こんばんは。
CoronaSDK Ambassadorの小野です。

今年も残すところ１ヶ月となりましたね。
今年は（も？）、Unityが大きなイベントをやったりCocos2D-Xがかなり広まったり
他にもいっぱいあるんですが、多すぎるのでごめんなさい。。。

競合クロスプラットフォームな開発ツールが成長しているなか、
若干肩身の狭い？CoronaSDK。。。ではありますが、
今年は超ビッグニュースがありましたね！覚えてますか？！
覚えてないですか？そうですか。。。＾＾；

今までトライアルは無料で、リリースするには
ライセンスの購入が必要だったのですが、何と無料ユーザー
（CoronaLabsのサイトではStarterと表現されます。）でも
アプリのリリースが可能になったんですよ！

ちょっと、奥さんスゴいでしょ？コレ！
しかも！アプリ起動時にCoronaSDKのロゴを表示するとか
全然しなくてOKだよん♪と、何とまぁ太っ腹！！
Ambassadorに１円も払わないくせにね＞＜

てなわけで、CoronaSDKは無料でもリリース出来ちゃう
クロスプラットフォームな開発環境になったんだよ！というお話でした。

つづく
Railsのコンソールをより便利にするpry-rails gem

rubyを使っている人なら皆使っていると思われる[pry](http://pryrepl.org/)ですが(pryについては[Ruby - ググるよりもまずはpry - Qiita [キータ]](http://qiita.com/Kokudori/items/2b36068cdf2e40e75c2d)などを参考に)，そのpryをrails console代わりに使うときに便利ユーティリティを提供してくれる[pry-rails gem](https://github.com/rweng/pry-rails)について紹介します．

## pry-railsが提供するコマンド
- show-middleware
- show-model
- show-models
- show-routes
- recognize-path

## show-middleware
名前の通り，そのアプリケーションで利用しているミドルウェアの一覧を表示する．(名前はshow-middlewaresの方が良い気がする)
デフォルトでもこんなミドルウェアが利用されてるんだなーと眺めるのによい

```
[1] pry(main)> show-middleware
use Raven::Rack
use ActionDispatch::Static
use Rack::Lock
use ActiveSupport::Cache::Strategy::LocalCache
...
```

## show-model
`show-model Item`で，`Item`モデルのカラムの型&名前やリレーションを表示してくれる．モデルを俯瞰したいときに便利．

```
[2] pry(main)> show-model Item
Item
  id: integer
  created_at: datetime
  updated_at: datetime
  ...
  belongs_to :user
  has_many :comments
  ...
```

## show-models
全てのモデルに対して`show-model`する．`--grep`オプションと組み合わせると便利かも．

## show-routes
`rake routes`の結果を表示してくれる．`show-routes --grep items`などgrepオプションも使えて便利．
(他に高速に`rake routes`を見る方法として，Railsサーバーが立ち上がっている状態で http://localhost:3000/rails/info へアクセスするという方法もある．)

## recognize-path
[Rails - Routingのテストをする - Qiita [キータ]](http://qiita.com/yaotti/items/cd26993283d2efa3ab52)で紹介したような，`Qiita::Application.routes.recognize_path`を実行する．`-m post`のようにリクエストメソッドを指定もできる．

```
[1] pry(main)> recognize-path '/advent-calendar/2013'
{:action=>"index", :controller=>"advent_calendars", :year=>"2013"}
```
Cross Platform MIDI Tools Advent Calendar #1: クロスプラットフォームMIDIプレイヤーを作る

もう4年ほど前になるが、かつて、X68000時代に存在していた美しい音楽プレイヤーを再現するという目的で、MLDSPというプロジェクトを作った。MLDSPは、つい最近まで存在していたMicrosoft Silverlightという技術を、MonoチームがLinuxで実現するために作った、MoonlightというGUI基盤の上に作られていた。Silverlightはブラウザプラグインとしてのみ存在したが、Moonlightはデスクトップ上でも実行できるGUIを構築できるよう、Moonlight Desktop (Gtk.Moonlight)というGUIフレームワークも開発していたのである。
その後、Moonlightがdisconになり、MLDSPはその巻き添えを食らう形で動かせなくなった。その後、筆者の興味がこの方面に戻ってくるまで、この音楽プレイヤーのプロジェクトは死んだままだった。それが2013年になって、Web MIDIやYamaha eVY1といったかたちで、MIDI音源が再び遊ばれるようになったので、それならMLDSPを別の実装のかたちで復活させよう、と思ったのだった。

今日は書き始めなので、簡単にこのプロジェクトの経緯についてだけまとめる。今後何日間かは、当日書いたコードや、それぞれの日の進捗について書くのではなく、これまで調べたことなどを中心に書くと思う。

今日はとりあえずスクリーンショットを載せておこう。実のところ、既にSMFファイルを選択して演奏させながらキーボードで演奏状態をリアルタイムに楽しむことはできる。今後は、このAdvent Calendarを書きながら、このプレイヤーや周辺ツールを改善していくことになると思う（筆者のやる気次第で）。

![Initial screenshot](https://dl.dropboxusercontent.com/u/493047/2013/xmdsp-r2-sshot.png) 

基本的な目標として、筆者は日常的にUbuntu Linuxを使っていて、この環境で使えるMIDIツールがほしいので、今回書くコードは全て最低でも筆者の環境で動作することを目的としている。開発言語・環境は今のところC#とMonoとなっている（C#でなくても良いのだが、とりあえずは使用したい自作のMIDIライブラリがC#なので、今はC#を使っている）。また、筆者の手元には、主に使う予定のMIDI音源として、20世紀に発売されたRoland SC-8820とYamaha eVY1というUSB MIDI楽器がある（他にもあるが割愛）。さらに、ソフトウェアMIDI音源としてtimidityとfluidsynthを使うこともあるし、今後はfluidsynthを中心に使うことも考えている。

これらの一部でも動作対象外とする環境は、筆者が支持し使用するところではない。たとえばWeb MIDI APIは、その実装においてLinuxが対象外であったり、ソフトウェア音源を積極的に排除するものだから、まともな仕様になってまともな実装が実現するまでは、支持しないので使わない。

また、当座はデスクトップ環境を中心に構築していくつもりでいる。モバイル環境はオーサリング環境としては未整備な部分が多すぎて、作業環境とするには厳しいので、今は対象としない（おもちゃとしてはアリだけど）。実のところAndroidの習作としてMLDSPのようなものを作ったこともあるが、手持ちの端末のない頃に作ったもので、全く利用していない。その辺りは作るとしても今ではない。

初日にあまりいろいろ書くと今後全くもたなくなるので、今日はここまでとしたい。
mac os x marvericksでGCCが行方不明

gcc打ったら

```
server:~ shiratsu$ gcc
clang: error: no input files
```

うーん、なぜ
ってことでググったら、ここに行き着いた。

http://ochiailab.blogspot.jp/2013/10/osx-mavericks-gdb-gcc.html
http://easyramble.com/install-gcc-with-homebrew.html
syslog

### 概要
コンピュータのログをルーティングするプログラム。設定ファイル(/etc/syslog.conf)により出力内容や出力先を制御できる。

### syslog.conf
どの種類のログをどこへ出力するかを規定するファイル。大きく分けて、ファシリティ・プラオリティ・出力先からなる。ファシリティは要はログの出力元でカーネルだったり認証のシステムだったりする。プライオリティはログの優先度というか内容で危機的なものからデバッグ情報までいろいろ設定できる。

### ログの出力先
ファイル名を指定したり、ユーザの端末に表示させることができる。ファイル名で代表的なものは

- /var/log/messages
- /var/log/secure

がある。

### ログの内容
時間 ホスト名 出力元 メッセージ
からなる

### loggerコマンド
ログメッセージを生成するコマンド。syslog.confの確認に使ったりできる。
以下のコマンドでファシリティ「syslog」、プライオリティ「info」でtestというタグを付けて、「test msg」というログを記録できる
```shell-session
$ logger -p syslog.info -t test "test msg"
```
MiddlemanのSlimで複数のyieldを使おう


Nodeなら鉄板のjadeですが、jadeでできる複数編集領域をSlimでも使いたい！

## やりかた

1. config.rbに設定入れる
2. layoutのほうに  `== yield_content :sidebar` をほりこむ
3. 継承するほうに `- content_for :sidebar do` をほりこむ


### config.rbに設定入れる 

``` config.rb
Slim::Engine.set_default_options :streaming => false
```
[参考: content_for and yield · Issue #176 · slim-template/slim](https://github.com/slim-template/slim/issues/176)

### slim側

``` layout/layout.slim
doctype 5
html
  head
    meta charset="utf-8"
    title unko

  body class="#{page_classes}"
    #wrap
      h1 yeild 第一弾
      == yield
      h2 yeild第二弾↓
      #sidebar
        == yield_content :sidebar
```

```
.hoge
  |   ここが第一弾のブロックに置き換わる

- content_for :sidebar do
  .test ここに第二弾
```

# これでおk！

sidebarみたいなでっかいブロック以外はヘルパー使うべし。だそうで。例えばタイトルタグみたいなのはヘルパーのほうがいいと、どこかに書いてあった。
AndroidDriverのポートフォワーディング設定でcannot bind to socketがでたら

AndroidDriverに限らずだけれど、ポートフォワーディング設定とか、サーバたちあげたりする時にエラーが出たときは、設定しようとするポート番号が使用されていないかをチェックする。

```bash
adb -s (device serial id) forward tcp:8080 tcp:8080
```

`cannot bind to socket`と言われたら、ポート番号を変えてみる。

```bash
adb -s (device serial id) forward tcp:9002 tcp:8080
```

たとえば、8080とかだとJenkins先生のデフォルトと被ったりだとか、何かと被りやすいので、別のポート番号を使用するといいかもしれない。

AndroidDriverに限らず！念押し！。。。(よくやる)
最小構成で始めるLaravel

[Laravel Advent Calendar 2013](http://qiita.com/advent-calendar/2013/laravel) 2日目を担当します [@localdisk](https://twitter.com/localdisk)です。よろしくお願いします。

はい、今日は「Laravel に興味を持ってるんだけどまだ試していない」人を対象に、なるべく少ない手数で試せる手順をご紹介します。

# 必要なもの
* PHP (5.4+)
** php_mcrypt
** pdo_sqlite
* Composer
以上だ！ Apache や nginx 等の Webサーバや MySQL 等の DB も必要ありません。試しに動かすなり、プロトタイプの作成程度だと上記で十分です。

# 手順
必要なものは揃いましたか？では、ターミナル(Windowsの人はコマンドプロンプト)を起動してください。そして、下のコマンドをコピペしてEnter!

```sh
composer create-project laravel/laravel qiita
```

するとこんな感じに出力されてると思います。

```sh
Installing laravel/laravel (v4.0.9)
  - Installing laravel/laravel (v4.0.9)
    Downloading: 100%

Created project in qiita
Loading composer repositories with package information
Installing dependencies (including require-dev)

(以下略)
```


このコマンドでカレントディレクトリに "qiita" というディレクトリが作成されて、Laravel とそれに依存するモジュールがダウンロードされます。
この処理には少し時間がかかるので、各自パスタを茹でる等して時間を潰してください。

…終わりましたか？それでは再びターミナルに戻って下のコマンドをコピペしてください

```sh
cd qiita
```
で、Enter

```sh
php artisan serve
```
で、Enter.
そうするとターミナルに

```sh
Laravel development server started on http://localhost:8000
```
と出力されますのでブラウザで

http://localhost:8000

にアクセスしてみてください。

![Laravel_PHP_Framework.png](https://qiita-image-store.s3.amazonaws.com/0/25478/978675a2-ff65-510f-9db0-f89ea1403eb5.png)

こんなのが表示されましたか？されれば成功です。ね？簡単でしょ？

# 設定
これでインストールは終了しました。ここまで来たら DB にも繋いでみたいところですね。
それでは app/config/database.php の29行目あたりの

```php:app/config/database.php
'default' => 'mysql',
```

を

```php:app/config/database.php
'default' => 'sqlite',
```
に変更しましょう。この変更で DB を sqlite を使用する設定になりました。これで PHP に組み込まれている SQLite が使用されるようになります。
あとはあなたの思うがままに開発していきましょう。

# まとめ
今日はなるべく少ない手数で Laravel を試す方法を紹介しました。Laravelにかぎらず「やったことがないことをやる」というのは、やはりめんどくさいものです。なので手軽に試せるというのは、とてもよいことだと思います。
さて、3日目に書くのは…俺だわ。つれーわー。2日連続とかまじつれーわー（棒）

# 番外.NetBeans で開発するよ
番外に僕イチオシの IDE である NetBeans での開発方法です。
インストールが終了した段階で、プロジェクトビューを右クリックして「新規プロジェクト」-> 「PHP」-> 「既存のソースを使用するPHPアプリケーションを選択」。設定し終わったら「次へ」ボタンをクリック。

![新規プロジェクト_と_NetBeans_IDE_7.4.png](https://qiita-image-store.s3.amazonaws.com/0/25478/55f19c9e-9806-e1b2-18a7-100c5d8c632c.png)

で、「ソースフォルダ」に先ほどインストールしたディレクトリを指定。「PHPのバージョンは」5.4 を指定する。設定し終わったら「次へ」ボタンをクリック。

![新規_既存のソースを使用するPHPプロジェクト_と_NetBeans_IDE_7.4.png](https://qiita-image-store.s3.amazonaws.com/0/25478/5a88d702-7a3e-edd3-1a14-f7319a82adeb.png)

次は実行構成の設定。「実行方法」は「PHP組み込みWebサーバー」を選択。「ルータースクリプト」は "public/index.php" を入力します。設定し終わったら「終了」ボタンをクリック。お疲れ様でした。

![新規_既存のソースを使用するPHPプロジェクト_と_NetBeans_IDE_7.4_2.png](https://qiita-image-store.s3.amazonaws.com/0/25478/1cea67b8-d061-0082-673b-4e898b85abb0.png)

あとはツールバーの「実行」ボタンをクリックすればサーバーが起動します。 php artisan serve がいらない子に！

![Menubar_と_qiita_-_NetBeans_IDE_7.4.png](https://qiita-image-store.s3.amazonaws.com/0/25478/c5c5fd04-39f2-ea1f-0d8f-afda3608dcc7.png)

というわけで、開発が楽になるので NetBeans オススメ。