OmniAICreator/Qiita-1.07M huggingface dataset:
Railsの逆を行く、デザイナと開発者が協力するためのScala Liftフレームワーク

最近のフレームワーク、っていうとどれもRailsと似たような感じで実装言語が違うだけでしょ？という感じですが、Liftはそんな中完全に逆を行ってます。

その思想は他の言語でも通用するはずなので、ぜひScalaなんぞ知らんという方も読んでいただければと思います。

# Liftの特徴
公式な特徴は[ホームページに記載](http://liftweb.net/)されていますが、個人的にプッシュしたいのは以下点です。これらは、[Templating](http://demo.liftweb.net/templating/)に詳しく書かれています([日本語訳](http://oss.infoscience.co.jp/scala/www.assembla.com/wiki/show/liftweb/View_First.html))。

1 デザイナフレンドリー
2 コントローラーがない
3 速い

## デザイナフレンドリー
自分の手元にあるerbやらjspやらasp(chtml/vbhtml)やらのファイルを見て、これをサーバーサイド側の言語を知らない人間に手渡せるか？と考えたときYesと言える人はどれくらいいるでしょうか。

それらのファイルにはそこそこコードが入り組んでいて、特にRailsの場合顕著ですがHelperが紛れ込んでいる場合その筋の人でもよく分からんということも多いのではと思います。

これは正直開発者の生産性を重要視し続けた結果でもあり、異なるスキルを持つ人との協業を難しくしています。

そこでLiftですが、LiftのViewはhtmlです。変な拡張子ではないですし中身にScalaのコードがしゃしゃり出てくることもありません。DreamWeaverなどのデザインツールにも取り込むことができます。

ただ、その反面Scala側にHTMLが多少混じります。サーバーサイドにHTMLタグが入るということにやっぱり嫌な感じはありますが、それはRubyやらJavaのコードがViewに紛れ込んでいるのと同じことです。

これは完全にトレードオフで、Liftは他のフレームワークとは逆の選択をしたということです。実際、サーバーからレンダリングしないといけないタグは正直大したことない量なので、それほど気になりません。

## コントローラーがない
猫も杓子もMVCでControllerですが、そもそもなんでControllerなんぞないといけないんでしょうか？邪魔だと思ったことはないですか？

大体1Viewに1Controllerが相場(?)ですが、多くのリッチな画面は画面上で複数の処理が走っているのが普通です。Qiitaの投稿画面でも、投稿件数、記事の自動保存といった非同期処理から、記事の投稿、画像のアップロードといった同期処理まで多数の処理が動いています。

これらを1Controllerにまとめるのは正直現実的ではありません。何らかの形で分割はするのでしょうが、それが難しいからこそFat Controllerという問題が起きてきたりJavaScript側のフレームワークがないと手に負えなくなってきたりするのだと思います。

LiftにはControllerなんかありません。投稿件数の表示なら表示、投稿なら投稿、と画面上のアクションに応じて完全にコードを分離できます(これをsnippetと呼びます)。

なんだか怖い気もしますが、でもこれは当然な気もします。
「画面上にある機能を分割し、それに応じてコードが書ける」。多くのフレームワークがMVCにこだわって失った機能の分割という利点を(Controllerを経由しないといけないという性質上、MVCで機能分割が行いにくいのはある意味必然)、Liftは逆を行くことで非常に理にかなったモジュール化を行うことができます。

## 速い
Scalaという静的型言語でしかも非同期に強いということだけでイケてますが、上記のようにControllerを廃してViewの機能分割(snippet化)を可能にしたことで、並列実行による部分View描画が可能になっています。

[こちら](http://demo.liftweb.net/parallel)にサンプルがありますが、これだけ簡単に書けるフレームワークは他にないと思います。

そういう意味では、snippetの思想からしてWebアプリケーションを関数型で記述しているような感がLiftにはあります。


主流に逆らいさまざまなメリットを得たLiftフレームワーク、ぜひ一度お試しあれ。

・・・といっても、情報がかなり少ないので(HelloWorld的なものしかない)、作り方についてまとめました。
[View First で始める Scala Liftフレームワーク](http://qiita.com/icoxfog417/items/f5136a2bae229f45f108)

そして、作っているうちにやっぱりそんなバラ色というわけにもいかないこともわかってきたので、[こちら](http://qiita.com/icoxfog417/items/186f526288addcc2b12b)を追記しました。。。
積み木の水槽　（またもや意地でもリスト操作だけでなんとかする）


（元ネタは http://nabetani.sakura.ne.jp/hena/ord13blocktup/ ）
今回は15分位で書き上がった。傍目には一つ前の記事のぷよぷよの連鎖と同じようなものに見えるのかもしれないが、手持ちの道具がリスト操作だけだとかなり難易度が違う。

```hs:BricksWaters.hs

module Main where
import Control.Applicative
import Data.List
import System.Environment (getArgs)

data Cell = B | W deriving Eq
type Pool = [[Cell]]

-- データ文字列を"0"でスプリットしながら整数リストのリストに
splitdata :: String->[[Int]]
splitdata str = split' str [] []
  where
  	split' [] xs ys = xs:ys
  	split' ('0':ss) xs ys = split' ss [] (xs:ys)
  	split' (s:ss) xs ys = split' ss (read [s]:xs) ys

-- ブリック(B)と水(W)のリスト＆一番高いブリックの高さまで水を満たす
construct :: [Int]->Pool
construct datalist = map pile datalist
  where
  	pile n = take (maximum datalist) $ (take n $ repeat B)++(repeat W)

-- 保持できない水を排水
flush :: Pool->Pool
flush =  map (dropWhile (==W).reverse.dropWhile (==W)) . transpose

countWater :: [Int] -> Int
countWater =  length.filter (==W).concat.flush.construct

solve :: String -> Int
solve = sum.map countWater.splitdata

-- コマンドラインでデータ文字列を受け取って解答を印字
main = solve<$>concat<$>getArgs >>= print

```
倍速音声の mp3 を３倍速にする方法

## 前提
* 元ファイルは、2倍速音声
* 例では、「[７つの習慣](http://www.febe.jp/affiliate/landing/tcT5FfhGQqbeFCUe-1/product/147399)」の mp3 を利用
* 高速化には [SoX](http://sox.sourceforge.net/) を利用
* SoX は c:\opt\sox にインストール。（実際はどこでもいい）

## SoX とは
* 音声処理のスイスアーミーナイフ
* 結合、リミックス、編集など、いろんなことができる。
* 音程（pitch）を維持したまま、倍速化ができる。
 * 音声に特化したオプション ( -s ）がある
 * [WSOLA アルゴリズム](http://www.etro.vub.ac.be/research/dssp/PUB_FILES/int_conf/ICASSP-1993.pdf)による聞き取りやすい自然な倍速音声の生成
* Windows、Linux 、 MacOS X などでも動作する。

## インストール
* SoX の最新版をダウンロードする　( [sourceforge](http://sourceforge.net/projects/sox/files/sox/)
* SoX を c:\opt\sox に展開する。
* 下記の依存ライブラリをダウンロード、コンパイルして c:\opt\sox に配置する
** [libmad.dll](http://www.underbit.com/products/mad)
** [libmp3lame.dll](http://lame.sourceforge.net/)

[SoX の README](http://pigtronix.com/SPLapplication/PC/README.win32.txt) を参照してコンパイルする。

### libmad.dll のコンパイル

```shell-session
$ # edit Makefile, search for "-fforce-mem" and delete it.
$ ./configure --enable-shared --disable-static LDFLAGS="-no-undefined"
$ make
$ cp libmad-0.dll c:/opt/sox/
```

### libmp3lame.dll のコンパイル
```shell-session
$ cd lame-398-2
$ ./configure --disabled-static --enable-shared
$ make
$ cp libmp3lame/.libs/libmp3lame-0.dll c:/opt/sox
```

## sox を実行する。

元が倍速音声なので、1.5 倍にする。

$ sox src.mp3 dst.mp3 tempo -s 1.5 

src.mp3 ・・・ 元からある mp3
dst.mp3 ・・・ 新たに生成する mp3
tempo ・・・ 音程を維持してテンポを速くする
-s ・・・ 話声向けにパラメータを最適化
1.5 ・・・ 元の mp3 を 1.5倍速にする。

```shell-session
$ c:/opt/sox/sox.exe "7つの習慣成功には原則があった！　倍速版.mp3" "7つの習慣成功には原則があった！　３倍速版.mp3" tempo -s 1.5
```

### おわりに
３倍速どころか試してみると案外４倍速でも聞きとることができました。
通勤時の歩いている時間をより効率的に活用できます。
UnityをC#で超入門してみる #4 GUIの章

UnityをC#で超入門してみる #3　計算の章
http://qiita.com/hiroyuki_hon/items/3326206dcedb4e5013d4
の続きです。


#目次　超入門#4 GUIの章

##GUI
　ラベルで文字列を表示しよう
　座標をRectクラスから指定しよう

　GUITextに文字列を代入しよう
　GUITextureを表示しよう
　GUITextureについてのメモ


##シーン遷移
　シーンを移動しよう
　シーン間を移動をするためのボタンを作ろう

##GUI

#ラベルで文字列を表示しよう
UnityのGUIはOnGUI()の中に書くのが基本となります。
OnGUIは毎フレーム描画されている(オーバーロード関数)のだと考えると理解しやすいです。

GUIのラベルにRectで文字列の座標を指定して表示してみます。
Rectクラスは(x,y,width,height)で定義される座標系です。
従って以下の場合だとx = 0, y = 0, width = 100, height = 30　となります。

```csharp
public class label1 : MonoBehaviour {

	void OnGUI() {
	GUI.Label (new Rect (0, 0, 100, 30), "Hello World!");
	}
}
```

これでx = 0,y = 0　にHello World!が表示されます。


#座標をRectクラスから指定しよう
二次元の座標を定義するのはRectクラスを用いると便利です。
Rectクラスの型で変数を作り、座標を決めてみます。

```csharp
	public Rect zahyou = new Rect (0, 0, 100, 50);
	
	void OnGUI()
	{
		GUI.Label ( zahyou, "Hello World!");
	}
//出力: Hello World!
```

同様

```csharp
	public Rect zahyou1 = new Rect (     0,   0, 100, 50);
	public Rect zahyou2 = new Rect (   50,   0, 100, 50);
	public Rect zahyou3 = new Rect ( 100,   0, 100, 50);

	void OnGUI()
	 {
        	GUI.Label ( zahyou1, "SCORE");
        	GUI.Label ( zahyou2, "Time");
        	GUI.Label ( zahyou3, "Cube");
    	}
```

Rectクラスを用いる例。

```cs
//Rectクラスは(x,y,width,height)で定義される座標系。
//従って以下の場合だとx = 0, y = 0, width = 100, height = 50　となる。
public class GUISetRectLabel : MonoBehaviour
{
	    public Rect rectTest = new Rect (0, 0, 100, 50);
    
	    void OnGUI()
	    {
		    GUI.Label ( rectTest, "Hello World!1");
	 //一行でも可能
		    GUI.Label (new Rect (0, 20, 100, 50), "Hello World!2");
	    }
}
```

#GUITextに文字列を代入しよう
タグ名"kazu"で数えて、
GUITextに数値を入れて
表示

```csharp
	public GUIText guitext;
	private GameObject[] gameObjects;
	private string s;
	
	void Update () {

		gameObjects = GameObject.FindGameObjectsWithTag("kazu");
	    	s = gameObjects.Length.ToString();		

 		guitext.text = s;
```

#GUITextureを表示しよう

Create > GUITextureでGUIデクスチャが表示できる。
photoshop等でピクセル単位でテクスチャを生成して
Unityに持ってくれば
同じピクセル数のテクスチャで生成できる。

#GUITextureについてのメモ
カメラの位置からの影響を受けない。
GUITextureの場所はカメラから映る場所に影響を与える。
GuiTextureのTransform　0，0，0　でカメラ画面左下に焦点が合う。
InspectorのPixelInset　0，0　　　でカメラ画面左下に焦点が合う。
W,Hで指定する。カメラ画面にうまく表示されない。実機で確認。

##Nexus7でのテスト例
800,1280ピクセルの画像をGUITextureに入れてW800　H1280として
Nexus7（800、1280）でテストしてみたところ操作パネル部の部分を抜く必要があったので
800,1205ピクセルの画像をW800H1205 で置いてみたところピッタリはまった。



##シーン遷移
#シーンを移動しよう

シーン間を移動するには
Applicationクラスを利用します。
Application.LoadLevel("シーン名");　と書きます。

シーンの移動は、
File > BuildSettings　で
Scenes in Buildの中に移動したいシーンを入れておく必要があります。

例えばコードはこうなります。
scene1とscene2を作成し、scene1に以下のコードを貼り付け、
ビルド画面のScenes in Buildに各シーンを入れて再生を行うと、
シーンが移動します。

```csharp
	void Start () {
		Application.LoadLevel("scene2");
	}
```

#シーン間を移動をするためのボタンを作ろう

```csharp

public class UnitySceneMoveCS : MonoBehaviour 
{
 
	void OnGUI()
	{
		if (GUI.Button(new Rect(10, 20, 100, 200), "Click"))
		{
	        Application.LoadLevel("scene2");
		}
	}
}

```

#つづきます
UnityをC#で超入門してみる #5　時間と入力の章
http://qiita.com/hiroyuki_hon/items/17e573842faf39bb3d21
MacのApacheで127.0.0.1以外のIPアドレスを使用する

#概要
仕事場でのWindows環境では、ローカルのApacheで127.0.0.1~127.0.0.4までが使用できていたが、なぜかMacでは127.0.0.2が使用できなかったため、自分なりに調べた結果をメモします。

#るーぷばっくあどれす？
そもそも、127.0.0.1って何なんでしょう？
調べてみると、これはローカルループバックアドレスというもので、自分自身を表す仮想的なアドレスみたいです。

##IPv4
使用可能なIPアドレスは127.0.0.0~127.255.255.255

127.0.0.0と127.255.255.255はブロードキャストアドレスのため、実質は127.0.0.1~127.255.255.254が使用可能

##IPv6
使用可能なIPアドレスは0:0:0:0:0:0:0:1(::1)
※IPv6では連続する0を"::"で省略することが可能（１アドレス１度のみ）

IPv6では無駄を省くため(?)、指定可能なアドレスは１つのみのようです。

#ifconfig？
IPv4で使用可能なのが127.0.0.1~127.255.255.254なのであれば、127.0.0.2なんて余裕じゃないか！
とか思いました。
ですが、調査していると下記のコマンドを入れるとできるとのこと

```
# ネットワーク環境のlo0に127.0.0.2を関連づける？
sudo ifconfig lo0 alias 127.0.0.2
```
ifconfigにて、lo0（ローカルループバック）というネットワーク環境に127.0.0.2を関連づけています。
これでMacが127.0.0.2を自身のホストとして認識していたんですね・・・。

これを追加することで無事に対応できました。

※永続的に関連付けられるわけではない為、PC起動毎に行う必要があります。

PC起動時に自動的に関連付けさせるには、ログインフックで上記スクリプトを実行すると良いみたいです。
参考：[MacOSXのログインフック設定](http://qiita.com/HanaeKae/items/7ea571590d2fc7d46d6b)

#結論
Macでは基本的には127.0.0.1のみがループバックアドレスとなる。
そのため、その他のIPアドレスを使用したいのなら

```
sudo ifconfig lo0 alias 127.~
```
にてlo0と関連づける必要がある。

そもそも、127.0.0.1以外をループバックアドレスとして設定する必要性はないんですよね。
ApacheのNameVirtualHostで名前指定してあげればいいだけだし。

#宿題
なら、Windowsはなぜ上記操作なしに設定することが可能なのだろうか・・・。

#
Rubyで第N曜日を求める（evalを使う）

```rb
require 'date'

class Date
  %w[monday tuesday wednesday thursday friday saturday sunday].each{ |day|
    eval "def #{day}s ; days { |date| date.#{day}? }; end"
  }
  def days
    firstday = self.firstday
    lastday = self.lastday
    results = []
    firstday.upto(lastday) {|date|
      results << date if yield date
    }
    results
  end
  def firstday
    Date.new(self.year, self.month, 1)
  end
  def lastday
    next_month = self >> 1
    next_month_first_day = next_month.firstday
    next_month_first_day - 1
  end
end
```
macにsh-01dをUSB接続しても認識されない

androidアプリを実機でデバッグするため、sh-01dを購入したのですが、
macにUSB接続しても、sh-01dが充電されるのみで、認識されません。
sh-01とmacの相性が悪いのでしょうか？

設定の開発者向けオプションで「USBデバッグ」をONにする。
android 再起動、
ターミナルで
　adb kill-server
　adb start-server
を行った後、

adb devicesや
system_profiler SPUSBDataTypeで、
USBに接続されているデバイスを確認するのですが、一向に認識されません。

また、ターミナルで
　echo 0x04DD > adb_usb.ini
　/Users/takao/.android/adb_usb.iniを行うとPermission deniedとなります。

ご教授よろしくお願いします。
2013 =3×11×61, 2014 =2×19×53 & 2015 =5×13×31: 3 consecutive years each the product of 3 distinct primes - won't happen again until 2665-7!

Twitterで面白いtweetを見つけたので確かめてみました。
<blockquote class="twitter-tweet" lang="ja"><p>2013 =3×11×61, #2014 =2×19×53 &amp; 2015 =5×13×31: 3 consecutive years each the product of 3 distinct primes - won't happen again until 2665-7!</p>&mdash; Simon Pampena (@mathemaniac) <a href="https://twitter.com/mathemaniac/statuses/417841563180351490">2013, 12月 31</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

```py
def solve2014():
  i = 2
  while i<10000:
    list = [primeFactorize(i), primeFactorize(i+1), primeFactorize(i+2)]
    if len(list[0])==3 and len(list[1])==3 and len(list[2])==3:
      checked = []
      for j in range(3):
        for k in list[j]:
          if not(k in checked):
            checked.append(k)
      if len(checked)==9:
        print("i=",i,primeFactorize(i),primeFactorize(i+1),primeFactorize(i+2))
    i=i+1

def primeFactorize(num):
  list = []
  t = num
  i = 2
  if num <= 1:
    return [0]
  else :
    while i<=t:
      if t%i==0:
        list.append(i)
        t=t/i
      else:
        i=i+1
    return list

if __name__ == "__main__":
  solve2014()
```

実行結果

```
i= 1309 [7, 11, 17] [2, 5, 131] [3, 19, 23]
i= 1885 [5, 13, 29] [2, 23, 41] [3, 17, 37]
i= 2013 [3, 11, 61] [2, 19, 53] [5, 13, 31]
i= 2665 [5, 13, 41] [2, 31, 43] [3, 7, 127]
i= 3729 [3, 11, 113] [2, 5, 373] [7, 13, 41]
i= 5133 [3, 29, 59] [2, 17, 151] [5, 13, 79]
i= 6061 [11, 19, 29] [2, 7, 433] [3, 43, 47]
i= 6213 [3, 19, 109] [2, 13, 239] [5, 11, 113]
i= 6305 [5, 13, 97] [2, 3, 1051] [7, 17, 53]
i= 6477 [3, 17, 127] [2, 41, 79] [11, 19, 31]
i= 6853 [7, 11, 89] [2, 23, 149] [3, 5, 457]
i= 6985 [5, 11, 127] [2, 7, 499] [3, 17, 137]
i= 7257 [3, 41, 59] [2, 19, 191] [7, 17, 61]
i= 7953 [3, 11, 241] [2, 41, 97] [5, 37, 43]
i= 8393 [7, 11, 109] [2, 3, 1399] [5, 23, 73]
i= 8533 [7, 23, 53] [2, 17, 251] [3, 5, 569]
i= 8785 [5, 7, 251] [2, 23, 191] [3, 29, 101]
i= 9213 [3, 37, 83] [2, 17, 271] [5, 19, 97]
i= 9453 [3, 23, 137] [2, 29, 163] [5, 31, 61]
i= 9821 [7, 23, 61] [2, 3, 1637] [11, 19, 47]
i= 9877 [7, 17, 83] [2, 11, 449] [3, 37, 89]
```
Git rebaseした結果を強制的にリモートブランチに書き込みたいとき


以前に何回かrebaseはしたことがあったのですが、いつもやり方を忘れてしまうので、メモ。たぶんそこら中に同じような記事が載っているので私のはあまり参考になりません。ほんとにただのメモです。
今回はrebaseしてコミットログを書き換えたはいいけどもう既にpushしちゃってるんですけどというシナリオ。あるあるですね。

### まずrebase

```
git rebase -i HEAD~4
```

でインタラクティブモードに入って

コミットログを書き換えたいコミットを `pick` から `e` に変更します。
vimを保存して終了。

次は

```
git commit ––amend
```

でコミットログの修正。終わったら保存。これでコミットが修正されます。

で、以下のコマンドで次のコミットに移動

```
git rebase ––continue
```

最後までやったら

```
Successfully rebased and updated refs/heads/master.
```

と出るのでこれで完了。

### リモートブランチにpushする

`––force` オプションで強制的にリモートブランチにpushします。

```
git push ––force
```

**ただし、このやりかたをするならそのリモートブランチが自分以外ほとんどいじる機会がないことを確認してからやるのがいいかもしれません。他の人が頻繁にpush, pullしてるブランチにこれをやったらどうなるかは想像もつきません。**

## 参考文献

- [Overwriting and Pushing a Git Branch - Stack Overflow](http://stackoverflow.com/questions/4740985/overwriting-and-pushing-a-git-branch)
上下中央揃え スマホ専用サイト

```scss
#wrapper {
    background:#efefef;
    @include display-box;
    @include box-pack(center);
    @include box-align(center);
}

#box {
    width:100px;
    height:100px;
    background:green;
}
```

参考：http://tenderfeel.xsrv.jp/css/1247/
スマホのリストビュー風の矢印をCSS3でつくる

```scss
// [親要素]をposition: relative;にしておく。
[親要素]:after {
display: block;
position: absolute;
top: 50%;
right: 10px;
width: 7px;
height: 7px;
margin-top: -4px;
border-top: solid 2px #7f7f7f;
border-right: solid 2px #7f7f7f;
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
content: "";
}
```

引用：http://commte.net/blog/archives/3902 No.13
第9回オフラインリアルタイムどう書くの参考問題をHaskellで書いた

第9回オフラインリアルタイムどう書くの参考問題をHaskellで書きました。

オフラインリアルタイムどう書くの過去問でHaskellスキルアップを目指します。

```hs:makeNumber.hs
import Data.List
import Control.Applicative
import Text.Regex

--先頭が0でない長さ4の順列
permutations' :: [Int] -> [[Int]]
permutations' ns = nub $ filter (\x -> head x /= 0) $ map (take 4) $ permutations ns

--6を9に変換する
convert6To9 :: [Int] -> [[Int]]
convert6To9 [] = [[]]
convert6To9 (n:ns) | n /= 6 = map (n:) $ convert6To9 ns
				   | otherwise = [(n:), (9:)] <*> convert6To9 ns

make4DigitsNumber :: [Int] -> [[Int]]
make4DigitsNumber ns = sort $ concatMap convert6To9 $ permutations' ns

listToString :: [Int] -> String
listToString [] = ""
listToString (n:ns) = show n ++ listToString ns

solve :: Int -> [Int] -> String
solve n ns = let list = make4DigitsNumber ns in
				if length list >= n
				then listToString $ list !! (n - 1)
				else "-"

parseTestData :: String -> [(Int, [Int], String)]
parseTestData str = map parseLine $ lines str
	where
		parseLine :: String -> (Int, [Int], String)
		parseLine line = let [input, output] = words line
		                     (index, numList) = parseInput input
		                 in (index, numList, output)
		parseInput :: String -> (Int, [Int])
		parseInput input = let [index, numList] = splitRegex (mkRegex ":") input
						   in (read index :: Int, parseNumList numList)
		parseNumList :: String -> [Int]
		parseNumList [] = []
		parseNumList (n:ns) = (read (n:[]) :: Int):(parseNumList ns)

main = do
	testData <- parseTestData <$> getContents
	mapM (\(index, numList, output) -> print $ (solve index numList) == output) testData

```
はてなブログに投稿した画像を全てダウンロードする

# はじめに
はてなブログに貼り付ける画像をアップロードすると、はてなフォトライフに保存されます。  
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/9665/060d2348-1b8d-7e54-ff78-6fcbd34bae3b.png)
  
今までブログ記事に貼り付けた画像を全てダウンロードしましょう。  
  
# RSSをダウンロード
まず、はてなフォトライフのRSSをダウンロードします。
URLは [http://f.hatena.ne.jp/はてなID/Hatena%20Blog/rss](http://f.hatena.ne.jp/はてなID/Hatena%20Blog/rss) です。
画像のURLが載っています。
![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/9665/492e7191-948a-b9cd-a891-3e43318a70b2.png)
  
wgetでダウンロード。

```wget
wget http://f.hatena.ne.jp/はてなID/Hatena%20Blog/rss
```


# URL抜き出し
先ほどダウンロードしたRSSから、画像のURLだけgrepで抜き出します。
.pngと.jpgだけ抜き出します。サムネイルのURLも抜き出し。

```grep
grep "http\:\/\/cdn-.*png\|http\:\/\/cdn-.*jpg" -o rss > photo.txt
```

grepの結果をphoto.txtに保存。
photo.txtの中身は、画像のURLだけ。
![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/9665/81314a10-0e3c-cc29-17a7-acf1f06f4cb5.png)

# wgetで全部ダウンロード
あとはwgetで全部ダウンロードするだけです。

```wget
wget -i photo.txt -nc --random-wait
```

# さいごに
wgetを使って、はてなブログに貼り付けた画像(はてなフォトライフに保存)を全てダウンロードしました。
FinderからGo2Shellを使ってiTerm2を開く


開いているFinderからターミナルを開く方法はいろいろあるようですが、私は[Go2Shell](https://itunes.apple.com/jp/app/go2shell/id445770608?mt=12)というアプリを愛用しています。


# 設定方法
## インストール
App StoreからDL後、Applicationフォルダに出来た顔文字のようなアイコンをFinderの上部にドラッグ・アンド・ドロップします。

### 注意
Mavericksの場合はドラッグ・アンド・ドロップ時にCommandキーを押しながらやる必要があるようです。

[OS X Mavericks アプリケーションをFinderのツールバーに登録する方法 | HAPPY*TRAP](http://www.happytrap.jp/blogs/2013/11/29/10927/)

## iTerm2を開くよう設定変更

適当にターミナルから

```
open -a Go2Shell --args config
```

として標準のターミナルからiTerm2を開くように設定変更します。

[How to open Go2Shell preferences in Mac OSX? - Super User](http://superuser.com/questions/434660/how-to-open-go2shell-preferences-in-mac-osx)

以上で設定完了です。
ui-routerを使って入れ子のビューをフレキシブルに構築

AngularJSでは$routeとng-viewディレクティブが結びついていて、ルートに応じて指定したtemplateがng-view内にincludeされる仕組みになっています。しかし、ng-viewを複数置いてそれぞれに別のテンプレートを表示させる、といった複雑な事はできません。ある表示領域の下に別の表示領域を置きたい...事は頻繁にあるので結構困る。

こういった事は、ルーティングフレームワークui-routerを使うと簡単に実現できます
[https://github.com/angular-ui/ui-router](https://github.com/angular-ui/ui-router)

ui-routerを使うと、各々の状態（state）に「名前をつける」「入れ子にする」「並列に表示させる」
事ができ、インターフェースを格段に柔軟に扱うことができます。開発も非常に活発。

ありがちなwebサービスの画面を例として、ネストされたビューの構築手順を紹介します
青い領域が親（=設定を押したら変化する領域）、ピンクの領域が子（=プロフ編集etcを押したら変化する領域）です
サイドバーのリンクをクリックすると、ピンクの領域のみリフレッシュされる状態を目指します。

![スクリーンショット 2014-01-02 6.56.26 PM.png](https://qiita-image-store.s3.amazonaws.com/0/27828/7b5b2955-e264-0ec8-39f2-a988dd272995.png)


#### ビューの配置
setupまでは終わっているものとします

レイアウトファイルに、青い領域を表示させるビューを配置します
ui-routerではビューの表示にはui-viewを使うことに注意（not ng-view）

```html:index.html
<body>
  <h1>This is top level view of app</h1>
  <div class="contents">
    <div ui-view></div> <!-- blue -->
  </div>
</body>
```

このui-viewの中にincludeされる設定画面は以下です。この中に更にui-viewがあり入れ子にさせています。この中に各種設定用のhtmlが読み込まれる形です。

```html:settings.html

<!-- settings -->
<div class="side-bar">
  <a ui-sref="settings.profile">プロフ編集

  <a ui-sref="settings.mail">メール設定

  <a ui-sref="settings.background">背景設定

  <a ui-sref="settings.password">パスワード変更

  <div ui-view></div> <!-- pink -->
<div>

```

```html:settings/profile.html

<h1>profile settings</h1>
<!-- hogehoge -->

```

ui-srefディレクティブは、stateProviderでルーティングした状態名を指定すると、よしなに対応するリンク先を設定してくれます。ルーティング処理を見てみましょう。

```js:app.js
myApp.config (function($stateProvider, $urlRouterProvider) {
  $stateProvider
    .state('settings', {
        url: '/settings',
        controller: 'SettingsCtrl',
        templateUrl: 'settings.html'
    })
    .state('settings.profile', {
        url: '/account',
        controller: 'SettingsCtrl',
        templateUrl: 'settings/profile.html'
    })

});

```

stateの第一引数が状態名で、ui-srefで指定するものと同一にします
ポイントは、入れ子にする時はドットで区切ることです。
settings.profileだとsettingが親で、profileが子になります。
親子関係が構築され、settings.profile内の設定は親の状況を引き継ぎます。
urlは/settings/accountになり、templateUrlのsettings/profile.htmlの挿入先は親の
templateUrl内（=settings.html）のui-viewになります。

これで、サイドバーのリンクをクリックしても、ピンクの領域のみリフレッシュされるようになります

こちらは簡単な例ですが、他にも便利な機能が沢山あるので是非試してみてください
Pro Gitを使ったGitハンズオン勉強会のTips

北海道旭川市で、11月14日に[Git勉強会#1](http://connpass.com/event/3804/)を開催しました。内容は[日本語版Pro Git](http://git-scm.com/book/ja)を使ったハンズオン及びGithubを使った課題を行いました。

勉強会のファシリテーションに関して気をつけた点や気付いた点・反省点などを共有したいと思います。

## 心掛けるたこと

- 混乱を避けるため、あらかじめ`.bash_profile`等を編集して、エイリアス等は無効にしておく。

- 参加者がスクリーンに投影されたコマンドを見やすいように　ターミナルの文字の大きさを大きくする。
パソコンのディスプレイではなく、会場のスクリーンを見ながらコマンドするようにする。また、できれ
ばスクリーンだけでなく、会場側にも顔を向けて話すことも心掛ける。
（僕はターミナルの文字の大きさの調整できることに気づかず、何故かMacの画面ズーム機能をつかっていました・・・orz）

## 内容

### Chapter1 [使い始める](http://git-scm.com/book/ja/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B)

Chapter1では、Subversion・CVS等の他のVCSの昔話・経験談をしました。雑談を交えて、参加者各々のVCS経験有無やレベルなど把握。また、configについては、globalにエディタ・名前・メールアドレスが設定できているかだけ確認して次へ進みました。

### Chapter2 [Git の基本](http://git-scm.com/book/ja/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC)

ハンズオンと共に`add`, `status`, `checkout`, `diff`, `reset`, `commit`等の基本的なコマンドを練習。(`reset`に関しては、この時点では細かく触れずに`reset HEAD`のみ使用）

具体的にファイルを適当に作って練習していきました。ステージされてキャッシュされているファイルと、そうでないファイルの違いは、最初に戸惑う箇所なので、`git diff`, `git diff --cached`, `git reset HEAD`などのコマンドを何度も使い、練習しました。
（例：　変更されたファイルを`git add`でステージした後で更に編集を加える。そうすると`git diff`でステージ後のdiffが見れて、`git diff --cached`でステージした時点でのdiffが見れる。その状態でコミットした場合は後から加えた変更はコミットされない、等など）

コマンドのオプションを一つ一つ細かく見るのは避けましたが、`git commit`の`--amend`オプションなど、便利なオプションについては勉強しました（ハンズオンにもちゃんと載ってる）。

`git add -p`で`e`(edit)を選択した場合の処置について、コツがわからないと難しいので、時間をかける予定でしたが、時間不足のため素早く説明だけして宿題としました。軽くググッてもヒットしなかったので、Youtubeにスクリーンキャストをアップしておきました。（初めての経験なので、色々と不備があります。声が小さい）
<http://www.youtube.com/watch?v=9T82aJCFiIQ>

ここで、[旭川オープンソースコミュニティ](http://asahikawa-oss.org/)のGithub Organizationに作っていおいた課題を始めました。下準備として全員、Githubアカウントを作っていることを確認して、pushする権限を与えます。[お題01](https://github.com/AOSC/git-exercises/tree/master/exercises/01-add-your-name)は、`Readme.md`に自分の名前を追加するという、とても単純な課題です。ただ、全員同じ箇所を編集するのでコンフリクト必至の課題です。出来る人ほど先に上がり、後の人はコンフリクトに苦しみます。以下のログを見ていただければ、カオスな状況をご想像になることができると思います。

```shell
$ git log --oneline --graph
*   2d05679 Merge branch 'master' of https://github.com/AOSC/git-exercises
|\
| *   6f9d8a3 Merge branch 'master' of https://github.com/AOSC/git-exercises
| |\
| | *   21f7ecc add masaru99 #1
| | |\
| | | * 039e884 add asahi #1
| | * | 8a49030 add masaru99
| | |/
| * | c190a81 add ykato #1
| * | ac0d9bb add ykato #1
| |/
* | b33faa3 add
|/
* a239e5c update readme
```

最後は`git log`のオプションについて細かく見てみて、実際のオープンソースプロジェクトのログを見たりしました。

## 気付いた点・反省点

- 僕はHTTPSはreadonlyだと勘違いしていました。色々と参加者の皆様に教えられました・・・。SSHの設定となると
- Chapter3のブランチまで行けると思ったのですが、意外に時間がかかりました。2時間ぐらいのセッションなら最初の2つのChapterで一杯一杯だと思います。お題は２つ用意していましたが、結局１つしかできませんでした。

## まとめ

Pro Gitは、やはり素晴らしいと感じました。僕がPro GitでGitを勉強したのは２年くらい前だったので、内容も以前より充実している気がしました。勉強会の準備を契機に知らなかったことも発見したりもして、本当に勉強になりました。（`git log`の`--since`オプションとか使ったことありませんでした）

## 宣伝

第２回Git勉強会は[１月２０日に開催予定](http://connpass.com/event/4587/)です。`branch`,`rebase`,`merge`などを勉強します。コンフリクトした時の対処法や、`git rebase -i`の使い方などなど、Gitの核となる部分に迫ります！
Rubyのヒアドキュメントを美しく書くにはunindent gemが便利

## Rubyでヒアドキュメント書くとインデント崩れて汚い
```rb
class Foo
  def bar
    puts <<-EOS
hogehoge
blah blah ...
    EOS
  end
end
```
`EOS`の手前の`-`のおかげで`EOS`はインデントできますが、内容にもインデントを加えるとそれが文字列に入ってしまいます。
なのでhogehogeやblah blahはインデントできません。

## 解決案
- [ヒアドキュメントを便利にする String#undent メソッド](http://rhysd.hatenablog.com/entry/20120614/1339697132)
 - 元ネタはhomebrewの[ここ](https://github.com/msmorgan/homebrew/blob/master/Library/Homebrew/extend/string.rb)ですね。先頭行のインデント量を数えて各行の文字を消してます。実装が綺麗です。
 - このブログでは空行でない行のうち最もインデントが少ないもののインデント量を数えて各行の文字を消すように改良しています。

これ自体はいいんですが、この書き方をするたびにStringの拡張のためのソースをどこかに配置しなきゃいけないのは大変です。

## unindent gemを使う
```rb
# Gemfile
gem 'unindent'
```

```rb
require 'unindent'

class Foo
  def bar
    puts <<-EOS.unindent
      hogehoge
      blah blah ...
    EOS
  end
end
```

綺麗ですね。
この`unindent`も[空行以外でインデントが最も少ない行で消すインデント量を取る](https://github.com/mynyml/unindent/blob/master/lib/unindent.rb)ので、１行目を少し低くしてても使えます。

### 追記
ActiveSupportの[strip_heredoc](http://apidock.com/rails/String/strip_heredoc)でも同様のことができるようです！
Bootstrap3でのグリッドでのモバイル対応


Bootstarap3では下記のように、デバイスの画面幅で
グリッドに表示する列を変更できるようになっています。

| モバイル（768px以下） | タブレット（768px以上、992px未満）| デスクトップ（992px以上、1200px未満） |デスクトップ（1200px以上）|
|:-----------|:------------|:------------| :------------|
| .col-xs-    |   .col-sm- | .col-md-  | .col-lg-|

なのでモバイルに対応したい場合はクラスに’.col-xs-‘を使用して列数を指定するとモバイル対応ができます。


```html
<div class="row">
    <div class="col-xs-2”>
		<p>テスト<p>
    </div>
	<div class="col-xs-2”>
		<p>テスト<p>
    </div>
    <div class="col-xs-2”>
		<p>テスト<p>
    </div>
	<div class="col-xs-2”>
		<p>テスト<p>
    </div>
</div>
```

もちろん他のクラスと併用できるので、下記のようにすると、
デバイスの画面サイズごとに、列数を変更できます。

```html
<div class="row">
    <div class="col-xs-2 col-sm-3 col-md-4 col-lg-5”>
		<p>テスト<p>
    </div>
    <div class="col-xs-2 col-sm-3 col-md-4 col-lg-5”>
		<p>テスト<p>
    </div>
    <div class="col-xs-2 col-sm-3 col-md-4 col-lg-5”>
		<p>テスト<p>
    </div>
    <div class="col-xs-2 col-sm-3 col-md-4 col-lg-5”>
		<p>テスト<p>
    </div>
</div>
```
Ruby 2.0.0 で省略不可なキーワード引数ってどうやって定義するの?

### 2014-01-06 追記

@yancya さんよりコメントにて、Ruby 2.1.0 以降では以下のように定義できると教えていただきました。

```rb:kwarg4.rb
def foo(bar:)
end
```

以下はオリジナルの投稿をそのまま残しておきます。

---

Ruby 2.1.0 にはまだ手をだしていません。

例えばこんなコードがあります。

```rb:kwarg1.rb
class Foo
  def foo(bar: 'BAR')
    p bar
  end
end

Foo.new.foo
```

`foo` メソッドを、キーワード引数 `bar` を省略した状態で実行しています。
実行結果は以下のようになります。

```
$ ruby kwarg1.rb
"BAR"
```

デフォルト値である `'BAR'` が出力されます。
デフォルト値が `nil` なら同様にそれが出力されることになります。

これを、省略不可にしたい場合ってどうすればいいんでしょう。

今のところ以下のようにしています。

```rb:kwarg2.rb
class Foo
  def foo(bar: _)
    p bar
  end
end

Foo.new.foo
```

デフォルト値にアンダースコアを指定しています。
これを実行した結果は以下の通り。

```
$ ruby kwarg2.rb
kwarg2.rb:2:in `foo': undefined local variable or method `_' for #<Foo:0x007fcd69b859f0> (NameError)
        from kwarg2.rb:7:in `<main>'
```

`_` をローカル変数、またはメソッドとして探索した結果見つからず、`NameError` になっています。
省略時にエラーになる、という意味では一応の目的を果たせました。

ですが、これはもちろん `_` メソッドが定義されていた場合はエラーになりません。

```rb:kwarg3.rb
class Foo
  def foo(bar: _)
    p bar
  end

  def _
  end
end

Foo.new.foo
```

実行結果は以下の通り。

```
$ ruby kwarg3.rb
nil
```

エラーは起こらず、`_` メソッドの返り値がそのまま出力されてしまいます。

言語として用意されている方法ってないんでしょうか。
AngularJSのfilterでよく使用するパターン


# 部分一致

いずれかの列に、部分一致する行を抽出する。

## コントローラ定義

一覧表示するオブジェクトを定義する。

```js
function TodoCtr($scope){
    $scope.items = [
                    {taskName:"AAA",priority:"Low"},
                    {taskName:"BBB",priority:"High"},
                    {taskName:"CCC",priority:"Middle"}
                  ];}
```

## HTML

検索キーワードを入力するinputのng-modelと、filterへ渡すプロパティ名を一致させる。

```html
<body ng-controller="TodoCtr">
	<label>Search BOX</label> 
	<input type="text" style="width:200px;" ng-model="searchText">
	<table>
	        <thead>
	            <tr><th>Task</th>
	                <th>Priority</th>
	            </tr>
	        </thead>
	        <tbody ng-repeat="item in items | filter:searchText">
	            <tr>
	                <td>{{item.taskName}}</td>
	                <td>{{item.priority}}</td>
	            </tr>
    	    </tbody>
	</table>
</body>
```

## 実行結果

「Task」「Priority」のいずれかに、部分一致する行が抽出される。

http://jsbin.com/ARIHAPE/9

# 部分一致 (特定項目のみ対象とする)

特定の列に、部分一致する行を抽出する。

## HTML

検索キーワードのng-modelに[.検索対象プロパティ名]を付与する。

```html
<input type="text" style="width:200px;" ng-model="searchText.taskName”>
```

## 実行結果

「Task」に部分一致する行が抽出される。

http://jsbin.com/ARIHAPE/16/

# 完全一致

いずれかの列に、完全一致する行を抽出する。

## HTML

filterの２つ目の引数にtrueを渡す。（デフォルトはfalse)

```html
<tbody ng-repeat="item in items | filter:searchText:true">
```

## 実行結果

「Task」「Priority」のいずれかに、完全一致する行が抽出される。

http://jsbin.com/ARIHAPE/10

# 部分一致 (大文字小文字を区別する)

いずれかの列に、「大文字小文字を区別して」部分一致する行を抽出する。

## コントローラ定義

デフォルトで用意されているオプションではできないはずなので、比較ルールをコントローラに実装する。

```js
function TodoCtr($scope){

    $scope.caseSensitive = function(expected, actual){
      // expectedに各項目の値が渡され、actualに入力した検索ワードが渡される。
      // 大文字小文字を揃えずに判定する
      return expected.indexOf(actual) > -1;
    }

	//省略
```

## HTML

filterの２つ目の引数に定義した関数名を渡す。

```html
<tbody ng-repeat="item in items | filter:searchText:caseSensitive">
```

## 実行結果

「Task」「Priority」のいずれかに、「大文字小文字を区別して」部分一致する行が抽出される。

http://jsbin.com/ARIHAPE/15/
びっくりするTypeScriptの推論力

TypeScriptの推論は型を超えている。

このコードを見ていただきたい。

```ts
window.addEventListener('keydown', e => {
  // eはKeyboardEventに自動推論される
});
```

コールバックで返るeの値を決定するのは、第１引数の文字列である。

メソッド定義を見ると以下のようになっている。

```ts
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
```

文字列によって、コールバックの型を決定しているのがわかる。

このような定義ができるのは文字列だけのようで、数値やenumで定義しようとするとエラーとなる。
The beginning of BEAR.Sunday on Ubuntu.



## Install and Hello world.

```console
sudo add-apt-repository ppa:ondrej/php5
sudo aptitude update
sudo aptitude install php5-common php5-dev php5-xdebug php5-sqlite php-apc pkg-php-tools
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo pecl install xhprof-beta
composer create-project bear/package my_package dev-develop
cd apps/Demo/Helloworld/var/www/
php -S 0.0.0.0:8088 index.php
```

![Screen Shot 2013-12-31 at 0.33.14.png](https://qiita-image-store.s3.amazonaws.com/0/4745/d4cacfaf-99e4-4b4c-b50b-64e217dff80e.png "Screen Shot 2013-12-31 at 0.33.14.png")

<kbd>ctrl</kbd> + <kbd>c</kbd>

## Also Sandbox.

```console
cd ../../../Sandbox/var/www
php -S 0.0.0.0:8088 index.php
```

![Screen Shot 2013-12-31 at 0.29.41.png](https://qiita-image-store.s3.amazonaws.com/0/4745/6b75e75b-8007-3ac8-6b0b-7465978843e5.png "Screen Shot 2013-12-31 at 0.29.41.png")

<kbd>ctrl</kbd> + <kbd>c</kbd>


## See also:

* http://bearsunday.github.io/manual/en/install.html
* https://packagist.org/packages/bear/
スワップされて困っちゃうのでswappinessを設定する


Linuxカーネル2.6から採用されたswappiness。こちらの値を変更すると、メモリスワップの度合いを調整できるようだ。

/proc/sys/vm/swappinessというファイルにパラメータが入っている。

```/proc/sys/vm/swappiness
60
```

値は0から100まででデフォルトは60。大きいほどよくスワップする。0にするとRAMを使いきるまでスワップしない。100だとパフォーマンスに悪影響を及ぼすレベルでガンガンスワップする。

/proc/sys/vm/swappinessの値を直接書き換えてると、シャットダウンまでその値が適用される。

```bash:
echo 10 > /proc/sys/vm/swappiness
```

こうでもよい

```
sysctl vm.swappiness=10
```

恒久的に変更したい場合は、/etc/sysctl.confに以下のように追記して設定を適用すれば完了。

```bash:/etc/sysctl.conf
vm.swappiness = 10
```

```bash:再読み込み
sysctl -p
```

ネットで見た限りではvm.swappiness = 0にしてしまう人も多いようだ。

以下を参考にしました。
http://www.itmedia.co.jp/enterprise/articles/0712/10/news011_4.html
https://hiroakis.com/blog/2012/06/13/vm-swappiness0は重要/
wordpress3.8 + jquery2.0

各theme内のfunction.phpにて

```php
add_action( 'wp_enqueue_scripts', function(){
  /*いろいろ*/
  wp_deregister_script( 'jquery' );
  wp_enqueue_script('jquery','http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js');
});
```

IE8以下の救済措置をする場合、下記条件にて読み込みを阻止

```php
if(!mb_ereg("MSIE", getenv("HTTP_USER_AGENT")))
```

以下conditional comementにてブラウザにて読み分けます。

```html
<!--[if lt IE 9]>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<!--<![endif]-->
```
ネット閲覧を高速化 DNS設定をGoogle Public DNSに

プロバイダーのDNS障害が発生したのでメモ。DNSサーバーを
8.8.8.8
8.8.4.4 
に変更するだけ。もしこれまで使っていたDNSがしょぼいと、劇的に改善する可能性あり。
Sprite Kitで矢印を描く

Core Graphicsでの矢印の描き方はこちら：
http://stackoverflow.com/questions/13528898/how-can-i-draw-an-arrow-using-core-graphics

Sprite Kitの場合は、上記を参考に矢印の形の`CGPath`を作り、`SKShapeNode`のインスタンスに割り当てて簡単に描けます。

ただ、この方法だとジャギーが出て不満だったので、一旦ビットマップ画像を作ってそれをテクスチャとする`SKSpriteNode`の子クラスを作りました。
https://github.com/oinariman/RMArrowNode (iOS専用)

また、上記回答のコードの機能に加えて、始点/終点から内側に余白を設けられるようにしました。
下図のhead margin/tail marginがそれです。(marginという英単語は妥当でしょうか。)
![RMArrowNode説明.jpg](https://qiita-image-store.s3.amazonaws.com/0/2503/1ee42f9e-979f-bc98-eca5-fc225e2fe6cf.jpeg)

使い方

```objc
RMArrowNode *node =
[RMArrowNode arrowNodeWithStartPoint:startPoint
                            endPoint:endPoint
                           headWidth:7.0
                          headLength:14.0
                          headMargin:0.0
                           tailWidth:1.0
                          tailMargin:0.0
                               color:[SKColor blackColor]];
[self addChild:node];
```

使用例

![RMArrowNode_Sample.png](https://qiita-image-store.s3.amazonaws.com/0/2503/d3194f2d-5006-8ac0-4ece-828ed3707db4.png)

以上です。
回文基数

http://qiita.com/Nabetani/items/dabe8ec57e0313229552
http://nabetani.sakura.ne.jp/hena/ord17scheherazade/

|Language|Validator C++(Text)|Validator Ruby(HTTP)|
|:--|:--|:--|
|C|0.03s|0.26s|
|Ruby|0.37s|0.60s|

```rb:hena17pre.rb
#!/usr/bin/env ruby
#http://qiita.com/Nabetani/items/dabe8ec57e0313229552
#http://nabetani.sakura.ne.jp/hena/ord17scheherazade/
STDOUT.sync=true
while gets
	n=$_.to_i
	puts n<3 ? '-' : ((2..(n-1)/2).select{|i|
		n0=n
		a=[]
		while n0>0
			a<<n0%i
			n0/=i
		end
		a==a.reverse
	}+[n-1])*','
end
```

```c:hena17pre.c
//http://qiita.com/Nabetani/items/dabe8ec57e0313229552
//http://nabetani.sakura.ne.jp/hena/ord17scheherazade/
#include <stdio.h>
int main(){
	int n,i;
	for(;~scanf("%d",&n);){
		if(n<3)puts("-");
		else{
			for(i=2;i<=(n-1)/2;i++){
				int n0=n;
				int n1=0;
				for(;n0;n0/=i)n1=n1*i+n0%i;
				if(n1==n)printf("%d,",i);
			}
			printf("%d\n",n-1);
		}
		fflush(stdout);
	}
}
```

```cpp:hena17pre_openmp.cpp
//http://qiita.com/Nabetani/items/dabe8ec57e0313229552
//http://nabetani.sakura.ne.jp/hena/ord17scheherazade/
#include <stdio.h>
#include <string.h>
#include <algorithm>
int a[99999];
int main(){
	int n,i,j;
	for(;~scanf("%d",&n);){
		if(n<3)puts("-");
		else{
			j=-1;
#pragma omp parallel for
			for(i=2;i<=(n-1)/2;i++){
				int n0=n;
				int n1=0;
				for(;n0;n0/=i)n1=n1*i+n0%i;
				if(n1==n)a[++j]=i;
			}
			std::sort(a,a+j+1);
			for(i=0;i<=j;i++)printf("%d,",a[i]);
			printf("%d\n",n-1);
		}
		fflush(stdout);
	}
}
```
heroku(Java) に New Relic を導入

herokuの公式ドキュメント読みながらでも詰まったのでメモを残しておきます。
（Mavenを使用しない場合の手順になっています）

公式ドキュメント https://devcenter.heroku.com/articles/newrelic#create-a-new-relic-configuration-file

- heroku dashboardで、アプリにNew Relicのアドオンを追加する。

- アプリのResourcesにNew Relicが追加されているので、クリックしてNew Relicに飛ぶ。

- [Get Started]ボタンを押す

（Get started with Web App Monitoring画面）

- 言語はjavaを選択

- Generate license Keyを押すと、ライセンスキーが生成されるのでコピーしておく。

- java agentをダウンロードし、解凍して出てきた"newrelic"ディレクトリを、アプリのルートディレクトリにコピー

- ルートディレクトリに`newrelic.yml`を作成。中身は、https://docs.newrelic.com/docs/java/java-agent-config-file-template からコピペ

- `newrelic.yml`の`license_key: 'your license key'`の部分に、先ほどコピーしたライセンスキーを入力

- 次のコマンドを実行

```shell-session
$ heroku config:set JAVA_OPTS='-Xmx384m -Xss512k -XX:+UseCompressedOops -javaagent:newrelic/newrelic.jar' NEW_RELIC_APP_NAME="ここにアプリ名を入力"
```

- herokuにpushする。

（Get started with Web App Monitoring画面）

- [Connect to my application]ボタンを押す

- 待機中になった後、うまくいけば再びボタンが表示されるので、押す

- New Relicにアプリが登録された！
VineApi(非公式)のgem

新年明けましても面白いことないからgemを作ってみました！

##vineのAPIについて
vine APIは公式ではないみたいです。下記参照.
  https://gist.github.com/mitukiii/5480316 (これをほとんどパクってます。すいません…)
  http://ottati.hatenablog.com/entry/2013/08/13/193642 (結構詳しく載ってる)
  https://github.com/starlock/vino/wiki/API-Reference (リファレンス 全てを網羅してるわけではない)
  http://arayu.jp/vine-api-php-01.html (記事がまとまってる)

##使い方
```ruby
require ‘vine_api’

@user = VineApi::User.new(‘email’,’password’) # vineの自分のアカウント
@user.profile  # 自分のプロフィール
@user.tag(‘tag名’)
@user.notification(‘user_id’)
@user.timeline(‘user_id’)
@user.popular(‘user_id’)
@user.logout
```


##github
レポジトリはこちらです.
https://github.com/yuuki1224/vine_api
Rubyで第N曜日を求める

対象日を含む月における各曜日の配列を返すメソッドをDateに追加する。

```rb
require 'date'

class Date
  def sundays
    days { |date| date.sunday? }
  end
  def mondays
    days { |date| date.monday? }
  end
  def tuesdays
    days { |date| date.tuesday? }
  end
  def wednesdays
    days { |date| date.wednesday? }
  end
  def thursdays
    days { |date| date.thursday? }
  end
  def fridays
    days { |date| date.friday? }
  end
  def saturdays
    days { |date| date.saturday? }
  end
  def days
    firstday = self.firstday
    lastday = self.lastday
    results = []
    firstday.upto(lastday) {|date|
      results << date if yield date
    }
    results
  end
  def firstday
    Date.new(self.year, self.month, 1)
  end
  def lastday
    next_month = self >> 1
    next_month_first_day = next_month.firstday
    next_month_first_day - 1
  end
end
```

使い方

```rb
d = Date.today
#=>  #<Date: 2014-01-01 ((2456659j,0s,0n),+0s,2299161j)>
p d.mondays
#=> [#<Date: 2014-01-06 ((2456664j,0s,0n),+0s,2299161j)>, #<Date: 2014-01-13 ((2456671j,0s,0n),+0s,2299161j)>, #<Date: 2014-01-20 ((2456678j,0s,0n),+0s,2299161j)>, #<Date: 2014-01-27 ((2456685j,0s,0n),+0s,2299161j)>]

may = Date.new(2014, 5, 1)
mothers_day = may.sundays[1]
#=> #<Date: 2014-05-11 ((2456789j,0s,0n),+0s,2299161j)>
```

sundays .. saturdaysがDRYでないのでなんとかしたいところ。
cocos2dxで、フレーム付きのウィンドウを作る


[フレーム付きのウィンドウをつくる。](http://qiita.com/ota42y/items/b7debeeb367bee44c5c1)
で、cocos2dxで伸縮自在なウィンドウを作るクラスを書きましたが、  
どうやらcocosに元々あったようです(´･_･`)


##該当クラス
CCScale9Spriteがそれです。

http://www.cocos2d-x.org/reference/native-cpp/V2.2/d7/d8b/classcocos2d_1_1extension_1_1_c_c_scale9_sprite.html


##使い方

こんな感じに上下左右四隅と中央の画像を一枚にしたものを用意します。

![frame.png](https://qiita-image-store.s3.amazonaws.com/0/273/8750db78-c4bd-6e9d-b757-287b1dc623cd.png "frame.png")

画像の全体サイズと中央の引き延ばす部分のサイズを指定して作成します。
その後、スプライトのサイズを指定すると、自動的に引き延ばして表示してくれます。


```cpp:ccslace9sprite
    CCScale9Sprite* sprite = CCScale9Sprite::create("frame.png", 
			CCRectMake(0, 0, 30, 30),
			CCRectMake(10, 10, 10, 10));

    sprite->setContentSize(CCSizeMake(100, 100));
    sprite->setPosition(ccp(160, 160));
    addChild(sprite);
```
HTMLの要素を新しく追加する（textarea）を使った方法


<!DOCTYPE html>
\<html lang="ja">
    \<head>
        \<meta charset="utf-8"/>
        \<script>
            window.onload = function(){
                var template = document.getElementById('template-test');
                var container = document.getElementById('container');
                document.getElementById('addBtn').addEventListener('click',
                                                                    function(){
                                                                        var newElement = document.createElement('div');
                                                                        newElement.innerHTML = template.value;
                                                                        container.appendChild(newElement);
                                                                    },false);
            };
        </script>
    </head>
    \<body>
        \<textarea id="template-test" style="display:none;">
            \<div id="test-div">
                \<p>これはテンプレートテキストです。</p>
            \</div>
        \</textarea>
        \<input type="button" id="addBtn" value="要素を追加"/>
        \<div id="container"></div>
    \</body>
\</html>
HTMLの要素を新しく作るjavascript


<!DOCTYPE html>
\<html lang="ja">
    \<head>
        \<meta charset="utf-8"/>
        \<script>
            \window.onload = function(){
                \var cnt = 0;
                \document.getElementById('addBtn').addEventListener('click',
                                                                    function(){
                                                                        
                                                                        var div = document.createElement('div');
                                                                        div.innerHTML = '新しく生成された要素['+ ++cnt +']';
                                                                        div.id = 'new-element-' + cnt;
                                                                        
                                                                        var target = document.getElementById('target');
                                                                        target.appendChild(div);
                                                                    },false);
            };
        </script>
    </head>
    <body>
        <input type="button" id="addBtn" value="要素を追加"/>
        <div id="target"></div>
    </body>
\</html>
XML をパースする

[HTMLからtagを抽出する](http://qiita.com/episteme/items/5bbf8cd38c80b5ac3235) の XML/C++版。
Apache Xerces-C 3.1.1 SAXParser を使って、XMLをパースする。

```cpp
#include <iostream>
#include <string>
#include <locale>
#include <vector>
#include <memory>

#define XERCES_STATIC_LIBRARY 

#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/sax/AttributeList.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/parsers/SAXParser.hpp>
#include <xercesc/framework/MemBufInputSource.hpp>

class ParseHandler : public xercesc::HandlerBase {
public:
  /*
   * 以下の 仮想関数 がcallbackされるので好きに使うがいい。
   * このサンプルでは 
   *   <img> の src  アトリビュート と
   *   <a>   の href アトリビュート
   * を抽出する。
   */
  virtual void characters(const XMLCh* const chars, const XMLSize_t length) {}
  virtual void endDocument() {}
  virtual void endElement(const XMLCh* const name) {}
  virtual void ignorableWhitespace(const XMLCh* const chars, const XMLSize_t length) {}
  virtual void processingInstruction(const XMLCh* const target, const XMLCh* const data) {}
  virtual void resetDocument() {}
  virtual void startDocument() {}
  virtual void startElement(const XMLCh* const name, xercesc::AttributeList& attributes);

  std::vector<std::wstring> urls;
};

void ParseHandler::startElement(const XMLCh* const name, xercesc::AttributeList& attr) {
  std::wstring element(name);
  if ( element == L"a" ) {
    std::wstring value(attr.getValue("href"));
    if ( !value.empty() ) urls.push_back(value);
  } else
  if ( element == L"img" ) {
    std::wstring value(attr.getValue("src"));
    if ( !value.empty() ) urls.push_back(value);
  }
}

using namespace xercesc;
using namespace std;

int main() {
    wstring xhtml =
       L"<?xml version='1.0' ?>" 
       L"<html><body>"
       L"  <a href=\"http://qiita.com/episteme\">επιστημη</a>"
       L"  <img src=\"https://pbs.twimg.com/profile_images/54608127/epi_normal.jpg\"/>"
       L"</body></html>";

    XMLPlatformUtils::Initialize();
    {
        auto parser = make_unique<SAXParser>();
        auto handler = make_unique<ParseHandler>();
        MemBufInputSource source(reinterpret_cast<const XMLByte*>(xhtml.data()), xhtml.size()*sizeof(wchar_t), "xhtml-parse", false);
        parser->setDocumentHandler(handler.get());
        parser->parse(source);    

        // 結果を出力
        wcout.imbue(locale("japanese"));
        for ( const wstring& url : handler->urls ) {
            wcout << url << endl;
        }
    }
    XMLPlatformUtils::Terminate();
}
```
ios7からのGameCenter

ios7以上対応のアプリを作成する際にGameCenterを使用したのでメモ

ios7からなんか変わってしまっていた。
点数を送信する際のメモです

ios6まで

```objc:ios6.m
//最初にアプリ内でGameCenterにログインしておく
GKScore *scoreReporter=[[GKScore alloc] initWithCategory:@"カテゴリのID"];
scoreReporter.value = 100;//点数
[scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
   if (error) { /* エラー処理 */ }
}];
```

ios7

```objc:ios7.m
//最初にアプリ内でGameCenterにログインしておく
GKScore *scoreReporter=[[GKScore alloc] initWithLeaderboardIdentifier:@"カテゴリのID"];
scoreReporter.value = 100;//点数
NSArray *scorearray=[[NSArray alloc]initWithObjects:scoreReporter, nil];//入れたい点数を配列に入れる。
[GKScore reportScores:scorearray withCompletionHandler:^(NSError *error) {
   if (error) { /* エラー処理 */ }
}];
```

簡単に言うと、少しAPIが変わって、１つ１つ送信するのではなく、配列で渡せるようになった。
第17回オフラインリアルタイムどう書くの参考問題


オフラインでリアルタイムに「どう書く」をやるイベント
http://atnd.org/events/46348
をやります。

現時点では、まだまだ空きがありますので是非。
で。

今回の参考問題は「回文基数」という名前で、
http://nabetani.sakura.ne.jp/hena/ord17scheherazade/
です。

当日出す問題の難易度と分量はこれを目安に考えると良いと思います。
とはいえ、これよりは若干簡単にすると思います。

参加予定の方は、何分で解けたとかいう情報を付けてくださると、本番用の問題の参考になりますのでできればお願いします。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。

ちなみに。
本番用の問題はこれから考えます。

それと。先日 CodeIQ に出した問題(最大公約フィボナッチ数(?))も公開されています
　https://codeiq.jp/ace/nabetani_takenori/q649
ので、こちらも是非。
Knockout.jsで日本語入力中テキストの文字数を正しく表示する

Knockout.jsで入力テキストの文字数を表示させるような場合、value bindingのvalueUpdateで入力イベントに連動して表示を更新します。
公式のサンプル通りにafterkeydownを利用して文字数表示を行うと、Firefoxなどでは日本語入力中にkeydownイベントが発生しないため正しく更新することができません。

解決策として、監視するイベントにinputイベントを指定します。

```html
<input data-bind="value: comment, valueUpdate: 'afterinput'">
<span data-bind="text: letterCount"></span>

<script>
function viewModel() {
  var self = this;

  self.comment = ko.observable("");
  self.letterCount = ko.computed(function() {
    return self.comment().length;
  });
};
ko.applyBindings(new viewModel());
</script>
```

inputイベントはinput/textareaの入力内容が変化したタイミングで発生するイベントで、日本語入力中で未確定な状態やコピー＆ペーストで編集した場合でも検出することができます。

主要なブラウザではサポート済み（IE8でも動作確認）ですが、未対応のブラウザまで考慮する必要がある場合には、keydownとinputをどちらも指定することで、少なくともkeydownイベントでは処理を実行させることができるでしょう（input対応時には2回ずつ実行されてしまいますが…）。

inputイベントをブラウザが処理した後に反映されるよう、prefixにはafterを付加します。


####参考
* [input - Web technology reference | MDN](https://developer.mozilla.org/ja/docs/Web/Reference/Events/input)
* [Knockout : The "value" binding](http://knockoutjs.com/documentation/value-binding.html)
Amazon s3でオブジェクトの内容を標準出力に出すスクリプト

Unix系OSのコマンドラインシェルでは，パイプを用いた処理が頻発します．
そのため，s3 で作業をしていても，バケット内のオブジェクトを標準出力に出し，パイプで処理をしたい場合があるかと思います．
aws-cli は，オブジェクトをローカルファイルシステムにコピーするコマンドがありますが，cat コマンドに相当する処理は無いようです．

このような時，AWS SDK を使って，簡単なスクリプトを書いて解決できます．

```rb
require 'inifile'
require 'aws-sdk'

ini = IniFile.load(ENV['HOME'] + "/.aws/config")
section = 'default'

uri = URI.parse(ARGV[0])
raise 'Scheme must be "s3"' if uri.scheme != 's3'

#==============================================================
s3 = AWS::S3.new(
  :access_key_id => ini[section]['aws_access_key_id'],
  :secret_access_key => ini[section]['aws_secret_access_key'],
  :region => ini[section]['region']
)

bucket = s3.buckets[uri.host]
object = bucket.objects[uri.path[1..-1]]

object.read { |chunk|
  print chunk
}
```

上記の例では，認証関係の情報は，aws-cli と同じini形式であることを期待しています．
ARGV[0] には URI 形式でバケットとプレフィックスを指定します．scheme は s3 であることを期待しています．
この辺りは，aws-cli と同じですので，戸惑うことはないと思います．

このような簡単な記述で，catコマンドの基本機能に相当するものを実現できます．

上記ソースコードは，ライセンスを設定するほどのものではありませんが，一応MITライセンスとしました．
最新版ソースコードは，[Bitbucketで保守](https://bitbucket.org/pizzafactory/s3-update-tools) しています．
Debian+Apache+rbenv+gitlab

## 概要
PHP+GitLabのVMを作成したときのメモ

## 環境
* Debian 7 (Wheezy)
* Apache 2.2-debian
* PHP 5.4-debian
* rbenv 0.4
* GitLab 6.4

## aptitudeで入れるもの
* php5
* apache2-mpm-prefork (PHP入れると依存で入る)
* ruby-build

## 順番
* GitLab公式のインストール方法を読む
* aptitudeで色々入れる
* gitユーザ作成
* rbenvとRubyをインストール
* GitLabインストール

## バージョン
* gitlab-shellは安定タグ(git tag -n)のどれかを入れる
* gitlabは安定ブランチ(git branch -r)のどれかを入れる (2014/1時点では6.4-stable)

## アクセスするパスを/gitlabにする
* gitlab/config/gitlab.ymlのrelative_url_rootをコメントアウト
* gitlab/config/unicorn.rbのENV['RAILS_RELATIVE_URL_ROOT']をコメントアウト
* Apacheのmod_proxy_httpを有効にする

```
$ sudo a2enmod proxy_http
```

* Apacheのvirtualhostの設定に以下を追加

```apache
<Location /gitlab>
  ProxyPass        http://localhost:8080/gitlab
  ProxyPassReverse http://localhost:8080/gitlab
</Location>
```

## pushエラーの対処
* bundlerの実行に失敗
* gitlab-shell/hooks/updateの先頭行を以下に書き換える

```bash
#!/home/git/.rbenv/shims/ruby
```

* ruby-local-execはだめだった。しかもdeprecated
* gitlab-shell/bin/以下も同様に書き換える
DBクエリで変数を使用する


生のクエリで変数を入力し、$を:に変える。

```php
$query = "SELECT * FROM users WHERE username = :name"; // 実行したいクエリ
```

execute()を行なう際にbind()で置換してあげる。

```php
// bind the variable and run the query, produces SELECT * FROM users WHERE username = 'John'
$result = DB::query($query)->bind('name', $name)->execute();
```

<a href="http://fuelphp.jp/docs/1.6/classes/database/usage.html" title="Query Builder Select - クラス - FuelPHP ドキュメント">Query Builder Select - クラス - FuelPHP ドキュメント</a>より
wxPythonをMacOSXにインストールする際に「"〜.pkg"は壊れているため開けません。」のメッセージが出たときの対処法

http://www.wxpython.org/download.php
からwxPythonのインストールディスクイメージをダウンロードし.pkgファイルを実行する際に![スクリーンショット 2014-01-01 19.42.52.png](https://qiita-image-store.s3.amazonaws.com/0/32276/0f3e3351-7122-b989-7bf2-590bd62c4963.png)
の画面が表示されてインストールが出来ないときの対処法。

システム環境設定 > セキュリティとプライバシー の一般タブに移動
左下の「変更するにはカギをクリックします。」をクリックして
「ダウンロードしたアプリケーションの実行許可:」を変更可能にする。
![スクリーンショット 2014-01-01 19.48.28.png](https://qiita-image-store.s3.amazonaws.com/0/32276/6d664e80-1328-c5d1-8848-fc3a117ae0dd.png)
画像中の「すべてのアプリケーションを許可」ボタンを押して画面を閉じる。

再びダウンロードしたディスクイメージをマウントし、.pkgファイルを実行できたら完了

wxPythonのインストールが終わったらシステム環境設定の「ダウンロードしたアプリケーションの実行許可:」を元に戻す。
Amazon s3でfindコマンドっぽいことをするスクリプト

s3 で作業をしていて，ファイルをどの位置に置いたのか忘れることがあるかと思います．
Unix系OSのローカルファイルシステム上では，find コマンドを使うことが多いと思うのですが，s3 のバケットの中では，s3fs でマウントするなどしないと find コマンドは使えません．
AWS SDK を使って，簡単なスクリプトを書いて解決できます．

```rb
require 'inifile'
require 'aws-sdk'

ini = IniFile.load(ENV['HOME'] + "/.aws/config")
section = 'default'

uri = URI.parse(ARGV[0])
raise 'Scheme must be "s3"' if uri.scheme != 's3'

siteName = ARGV[1]
#==============================================================
s3 = AWS::S3.new(
  :access_key_id => ini[section]['aws_access_key_id'],
  :secret_access_key => ini[section]['aws_secret_access_key'],
  :region => ini[section]['region']
)

bucket = s3.buckets[uri.host]
prefix = uri.path[1..-1]


bucket.objects.with_prefix(prefix).each do |object|
  puts object.key if object.key =~ /\/#{ARGV[1]}$/
end
```

上記の例では，認証関係の情報は，aws-cli と同じini形式であることを期待しています．
ARGV[0] には URI 形式でバケットとプレフィックスを指定します．scheme は s3 であることを期待しています．
この辺りは，aws-cli と同じですので，戸惑うことはないと思います．

ARGV[1] には，探したいファイル名を指定します．残念ながら，正規表現は使えません．
しかし，s3 上のパス名(キー名)に末尾一致するものを探し出しますので，例えば拡張子で軽く絞り込んでみる，といったようなことはできます．

上記ソースコードは，ライセンスを設定するほどのものではありませんが，一応MITライセンスとしました．
最新版ソースコードは，[Bitbucketで保守](https://bitbucket.org/pizzafactory/s3-update-tools) しています．