OmniAICreator/Qiita-1.07M huggingface dataset:
可換環論における種々の反例

これは [Mathematics Advent Calendar 2013](http://www.adventar.org/calendars/170) 18日目の記事です.

定理の証明とかやりません. 可換環論やってて個人的に良いと思った例と反例を紹介します.
思ったより集められなかったので反省. 出展は[復刊 可換環論](http://www.amazon.co.jp/%E5%BE%A9%E5%88%8A-%E5%8F%AF%E6%8F%9B%E7%92%B0%E8%AB%96-%E6%9D%BE%E6%9D%91-%E8%8B%B1%E4%B9%8B/dp/4320016580)とか[Mathematics Stack Exchange](http://math.stackexchange.com/)とか[MathOverflow](http://mathoverflow.net/)とかです.

(愚痴: こういう反例とかをただ集めただけのサイトなり本なりが欲しい)

環・ネーター環・アルティン環
---

- Fact: アルティン環 $\iff$ ネーター環かつ次元0
- $\mathbb{Z}$はネーター環だがアルティン環でない($\because (2) \supset (2^2) \supset \cdots$)
- $\mathbb{Z}(p)$はネーター環でもアルティン環でもない($\because (1/p) \subset (1/p^2) \subset \cdots$)
- $\mathbb{Z}[X_1, X_2, \cdots]$はネーター環でもアルティン環でもない

素元・既約元
---

- Fact: 整域上素元ならば既約元である. (UFD上なら逆も成り立つ.)
- $2 \in \mathbb{Z}[\sqrt{-5}]$ は既約元だが素元でない($\because 2 \cdot 3=(1-\sqrt{-5})(1+\sqrt{-5})$)
- $2 \in \mathbb{Z}/6\mathbb{Z}$ は素元だが既約元でない($\because 2 = 2 \cdot 4$, $2$は単元でない)

イデアル
---

- Fact: 2つの極大イデアルの共通部分は素イデアルでない($\because p \in P \backslash Q, q \in Q\backslash P$に対して$pq \in P \cap Q$だが$p,q \not\in P \cap Q$)
- $(X) = \cap_n (X, Y+n) \subset k[X,Y]$ ($n \in k$) はj-素イデアル
- $p\mathbb{Z}[X] + f(X)\mathbb{Z}[X] \subset \mathbb{Z}[X]$ (ただし$p$は素数, $f(X)$は既約) は極大イデアル
- $(2, 1-\sqrt{-5}) \subset \mathbb{Z}[\sqrt{-5}]$ は極大イデアル

局所化
---

- $R=\mathbb{Z}/6\mathbb{Z}$は整域でないが素イデアルによる局所化で整域になる. ($\because$ 素イデアル $p=2\mathbb{Z}/6\mathbb{Z}$による局所化を行なうと$R_p$は(極大イデアルが0になって)体になる. $R$が整域でないことは明らか.)

自由加群・射影加群・平坦加群
---

- Fact: 自由加群 $\Rightarrow$ 射影加群 $\Rightarrow$ 平坦加群
(cf. [free⇒projective⇒flat⇒torsion-free](http://en.wikipedia.org/wiki/File:Module_properties_in_commutative_algebra.svg) )
- Fact: 自由加群 $\Rightarrow$ 忠実平坦加群 $\Rightarrow$ 平坦加群
- $\mathbb{Z}/2\mathbb{Z}$は$\mathbb{Z}/6\mathbb{Z}$加群として自由でない射影的な平坦加群 ($\because \mathbb{Z}/6\mathbb{Z} \simeq \mathbb{Z}/2\mathbb{Z} \oplus \mathbb{Z}/3\mathbb{Z}$)
- $(5, 2+\sqrt{-21}) \subset \mathbb{Z}[\sqrt{-21}]$は自由でない射影加群
- $\mathbb{Z}/m\mathbb{Z}$は$\mathbb{Z}$加群として __平坦でない__ 加群 ($\because$ $0 \rightarrow m \mathbb{Z} \rightarrow \mathbb{Z} \rightarrow \mathbb{Z}/m\mathbb{Z} \rightarrow 0$に対して$\mathbb{Z}/m\mathbb{Z}$とのテンソル積をとる.)
- $\mathbb{Q}$は$\mathbb{Z}$加群として射影的でない平坦加群
- $A=k[X^2,X^3], B=k[X]$に対して$B$は$A$上平坦でない($\because (X^2 A\cap X^3 A)B=X^5 B \neq X^3 B = X^2 B \cap X^3 B$)

なにかあれば [@t_iru](https://twitter.com/t_iru) まで.
Tick-Tack-Toe(2012.7.6の過去問)

1日1個 @nabetani さんの作った問題を解くAdventCalendarの18日目です。

今日の問題は http://nabetani.sakura.ne.jp/hena/1/ にあります。

```hs
{-# LANGUAGE TupleSections #-}
module Doukaku.Gobang (solve) where
import Data.Char (intToDigit)

data Player = O | X deriving (Eq, Show)
type Gobang = [[(Char, Maybe Player)]]

solve :: String -> String
solve = go O X gobang
  where
    go _  _  _ [] = "Draw game."
    go p1 p2 g (h:hs) = case turn p1 h g of
      Nothing -> "Foul : " ++ toChar p2 : " won."
      Just g' | settled p1 g' -> toChar p1 : " won."
              | filled g'     -> "Draw game."
              | otherwise     -> go p2 p1 g' hs

toChar :: Player -> Char
toChar O = 'o'
toChar X = 'x'

gobang :: Gobang
gobang = map (line [0, 1, 2]) [1, 4, 7] ++
         map (line [0, 3, 6]) [1, 2, 3] ++
         map (line [0, 4, 8]) [1] ++
         map (line [0, 2, 4]) [3]
  where
    line :: [Int] -> Int -> [(Char, Maybe Player)]
    line xs x = map ((, Nothing) . intToDigit . (+ x)) $ xs

turn :: Player -> Char -> Gobang -> Maybe Gobang
turn p h = sequence . map (sequence . map (put p h))
  where
    put :: Player -> Char -> (Char, Maybe Player) -> Maybe (Char, Maybe Player)
    put p' h' x@(k, Nothing) | h' == k   = Just (k, Just p')
                             | otherwise = Just x
    put _ h' x@(k, _) | h' == k   = Nothing
                      | otherwise = Just x

settled :: Player -> Gobang -> Bool
settled p = any (all ((== Just p) . snd))

filled :: Gobang -> Bool
filled = all (all ((/= Nothing) . snd))
```

URLからもわかるように、記念すべき第一回目の問題です。最初三目並べのルールを間違えるというまさかの大失態をしまして、これは改めて実装し直したものです。3×3の面ではなく、ライン8個分を`gobang`に持たせています。この持ち方は同じマスが複数のラインに入るので非常に冗長ですが、ラインが揃ったという判定が楽になるという利点もあります。

`filled`はものすごく非効率なので実装したくなかったのですが、最初に`tail 9`やるというad-hocな解決方法よりはマシかなということで採用しました。
Javadocの基礎知識

## Javadocとは？

javadocとは，「ドキュメントを作るのが面倒なので，プログラム中に特定のルールに従って付けたコメントを抽出してドキュメントを作っちゃう」考え方に沿って，Java言語のソースコードからドキュメントを生成する仕組みです．これにより，ドキュメントファイルを紛失することも無くなります．

## インストール方法

特にインストールしなくても，jdkに付属しています．

## 書式

以下のルールに則って，コメントとして記述する．

1. 基本的にはJava言語のコメントの中に記述する．通常，Java言語のコメントは「/\*」で始まり「\*/」で終わるが，javadocでは「/\*\*」で始まり「\*/」で終わる．

2. 複数行にまたがることも可能だし，1行で書くこともできる．

    3. 「@」は特殊な記号として扱われる．例えば「@‌author」はプログラム製作者を表し，「@‌version」はバージョンを表すタグである．「@‌param」はメソッドのパラメータを表し，「@‌return」はメソッドの返り値を表す．その他にもさまざまなタグが存在する．

4. 「/\*\*」から「\*/」の間の行頭には「\*」を入れておく．（無くても良いが，揃えておくほうが見やすい）

5. 複数行にまたがる場合は，ピリオドまでが概要説明でそれ以降が詳細説明である．詳細説明が複数行にまたがってもよいが，改行されない．改行したい場合は「<br>」を入れること．コマンドラインパラメータに何を与えればよいか？や，使用例などもここに記述すること．

以下に，与えられた数値の遇奇を判断するis_evenメソッドと，is_evenメソッドを含むMethod8クラスを記す．

通常，クラス宣言の前やメソッド宣言の前に挿入する．

1行目から始まる部分は，クラス全体に対するコメントであり，この場合は作者が「Suda」でバージョンが「1.0」であることを示す．

is_evenメソッドの前に4行のコメントが付いているが，先頭からメソッドの名称，詳しい説明，パラメータ，返り値について記述されている．

```java
/**
 * @author Suda
 * @version 1.0
 */
public class Method8 {
	/**
	 * is_evenメソッド
	 * パラメータが偶数ならtrueを返し，奇数ならfalseを返す.
	 * @param number 数値
	 * @return 数値が偶数ならtrue
	 */
	public static boolean is_even( int number ) {
		return( number % 2 == 0 );
	}
}
```

## ドキュメントの作成方法

javadocコマンドを用いて上記のソースコードからドキュメントを作成する場合，以下のように実行すれば良い．これにより，コメント内の情報を拾い上げて，HTML形式のドキュメントが作成される．

```bash
$ javadoc -d html Method8.java
```

うまく実行できていれば，htmlという名前のディレクトリが作成され，ドキュメントがその下に作られる．とりあえず「index.html」をWebブラウザで開いて内容を確認して欲しい．

また，複数のソースコードをまとめてjavadoc化したい場合は，ファイル名を列挙するかワイルドカードを使えば良い．

```bash
$ javadoc -d html Test1.java Test2.java Test3.java
　または
$ javadoc -d html *.java
```
ナベアツ

リハビリがてら。
3の倍数と3がつく数字のときだけahoになります。

```php
<?php
for ($i = 1; $i <= 40; $i++) {
	if ($i % 3 == 0 || strchr($i, '3')) echo 'aho';
	else echo $i;
	echo ' ';
}
```

違う書き方で

```php
<?php
echo implode(' ',
	array_map(function($i) {
		return $i % 3 == 0 || strchr($i, '3') ? 'aho' : $i;
	}, range(1, 40))
);
```
Circle CIで複数Rubyバージョンを平行してテストする



ちまたで話題のCircle CI https://circleci.com/ 。
やってみようと、あるRubyGemsのプロジエクトをCircle CIに突っ込みました。

とりあえず回したところ、テスト用のRubyバージョンは`circle.yml`によって1つを指定するタイプだった。

Travis CIはこんな感じで複数のRubyバージョンを指定できるんですよねー。

```yaml:.travis.yml
rvm:
- 2.0.0
- 1.9.3 
```

早速サポートに聞いてみました。

> We don't have very good support for build matrices at the moment. If you set up a build with 2x parallelization, you might be able to do something like:
circle.yml


と、すぐに案内してくれたワークアラウンドがこちら。

```yaml:circle.yml
dependencies:
  pre:
    - case $CIRCLE_NODE_INDEX in 0) rvm use 2.0.0 --default ;; 1) rvm use 1.9.3 --default ;; esac
test:
  override:
    - ruby -v ; bundle exec rspec: {parallel: true}
```

うおお。。そうきたか。
ちなみに、ここで外部シェルを呼ぶのはアカン模様。
テストの`ruby -v`部分は私が確認のため追加しました。なくてもOK。


> (中略)
> The {parallel: true} modifier at the end tells us to run the command on every node.
> Let me know if you need any help with that, and sorry about the hacky workaround.


『正直ハックですまんかった』とサポートの弁ですが、いやいや十分じゃあないですか。


## やってみた

コンテナをパラレルで起動して、コンテナ番号によってバージョンが別れる様子をレポート。


複数のコンテナを同時に起動するには、`Project Setting` > `Parallelism` の設定を変更します。


![Edit_settings_-_giraffi_ruby-orchestrate_io_-_CircleCI-3.png](https://qiita-image-store.s3.amazonaws.com/0/7454/e48a225d-72c1-c499-a63e-a430467de75c.png "Edit_settings_-_giraffi_ruby-orchestrate_io_-_CircleCI-3.png")


これでビルドすると。


![_33_-_giraffi_ruby-orchestrate_io_-_CircleCI.png](https://qiita-image-store.s3.amazonaws.com/0/7454/828a5842-cb84-4fed-15fd-7483f4bbc8f7.png "_33_-_giraffi_ruby-orchestrate_io_-_CircleCI.png")


おー、2コンテナで起動しました。

テストも別々の表示で、平行に進みます。

![_34_-_giraffi_ruby-orchestrate_io_-_CircleCI-4.png](https://qiita-image-store.s3.amazonaws.com/0/7454/3eef26c9-2d9e-e3b2-ac02-5f0dcd93aa7a.png "_34_-_giraffi_ruby-orchestrate_io_-_CircleCI-4.png")


コンテナ(0)はRuby2.0.0, コンテナ(1) はRuby1.9.3でテストが走りました！

![_34_-_giraffi_ruby-orchestrate_io_-_CircleCI-6.png](https://qiita-image-store.s3.amazonaws.com/0/7454/9c7927d8-c50a-9529-e7cb-bfbbb47d884c.png "_34_-_giraffi_ruby-orchestrate_io_-_CircleCI-6.png")




Rcovによるカバレッジも、ファイル名の後にコンテナ番号がついで別々に収集。


![_33_-_giraffi_ruby-orchestrate_io_-_CircleCI-2.png](https://qiita-image-store.s3.amazonaws.com/0/7454/1dae4e61-4d14-8a02-38f5-83f340c27396.png "_33_-_giraffi_ruby-orchestrate_io_-_CircleCI-2.png")


無事、複数RubyでやってくれというDevの要望に答えることができました。



コンテナIDで処理を分けるやり方は、他にも面白いことができそうですね。
Go言語: SJISのCSVを読み込みながら1行毎に処理を実行する



# この記事のゴール

* SJISのCSVを読み込みながら1行毎に処理を実行できるようになる

# 1行毎に処理したい理由

大きなCSVを処理するときに、全行読み込んでスライスにためるとメモリをたくさん使うため、1行ごとに処理を行うようにする

# コード

前回の「[Go言語:SJISのCSVファイルを読み込む!](http://qiita.com/suin/items/23b2c2e7cb7c80ca857e)」でSJISのCSVを読み込む方法を説明した。そこで紹介したコードをベースに、1行ごとに逐次処理できるようにCSV読み込み処理を関数にする。

実装方法はいろいろあるが、コールバック関数を渡して、1行毎にそのコールバック関数を呼ぶような実装にした:


```go:main.go
package main

import (
	"encoding/csv"
	iconv "github.com/djimenez/iconv-go"
	"io"
	"log"
	"os"
)

func failOnError(err error) {
	if err != nil {
		log.Fatal("Error:", err)
	}
}

func main() {
	filename := "/tmp/chibashi-sjis.csv"
	callbak := func(record []string) {
		log.Println("ここで逐次処理")
		log.Printf("%#v", record)
	}

	err := ReadCsv(filename, callbak)
	failOnError(err)
}

func ReadCsv(filename string, callback func(record []string)) error {
	file, err := os.Open(filename)
	if err != nil {
		return err
	}
	defer file.Close()

	converter, err := iconv.NewReader(file, "sjis", "utf-8")
	if err != nil {
		return err
	}

	reader := csv.NewReader(converter)

	for {
		record, err := reader.Read() // 1行読み出す
		if err == io.EOF {
			break
		} else if err != nil {
			return err
		}

		callback(record)
	}

	return nil
}

```

実行結果

```go
2013/12/18 19:14:56 ここで逐次処理
2013/12/18 19:14:56 []string{"区", "男性人口", "女性人口"}
2013/12/18 19:14:56 ここで逐次処理
2013/12/18 19:14:56 []string{"中央区", "202,213", "102,080"}
2013/12/18 19:14:56 ここで逐次処理
2013/12/18 19:14:56 []string{"花見川区", "179,698", "89,369"}
2013/12/18 19:14:56 ここで逐次処理
2013/12/18 19:14:56 []string{"稲毛区", "156,612", "78,199"}
2013/12/18 19:14:56 ここで逐次処理
2013/12/18 19:14:56 []string{"若葉区", "151,165", "76,159"}
2013/12/18 19:14:56 ここで逐次処理
2013/12/18 19:14:56 []string{"緑区", "125,956", "62,042"}
2013/12/18 19:14:56 ここで逐次処理
2013/12/18 19:14:56 []string{"美浜区", "148,951", "72,806"}
```
AppCodeがVMware FusionのゲストのMac OS Xで動作しないとお嘆きの貴兄に

## iOSのレガシーコードのメンテナンスは修羅の道。
IntelliJ IDEAで有名な[jetBrains](http://www.jetbrains.com/)さんには、Objective-C用のIDEであるAppCodeという製品もあります。
iOSのレガシーコードをメンテナンスしていると色々なバージョンのXcodeを使用する必要がありますが、バージョン毎にインターフェースが大幅に変わっているので操作を覚えるのが大変面倒です。
そんなときに、AppCodeがあると全て同じインターフェースで作業できるのでとても幸せなわけです。
Xcodeも最新のバージョンではリファクタリング機能など随分良くなっていると聞きますが、昔のやつはいつまでたっても改善は望めませんからね。
ところで、最近レガシーな開発環境をMac OS X 10.9(Mavericks)+VMware Fusion 6の仮想環境に移行しようとしたのですが、ゲストにMac OS X 10.7(Lion)、及び、10.8(Mountain Lion)をインストールした環境では、AppCodeがまともに動作しないことが判明。ダイアログの中身が表示されない。キーをまともに受け付けないなど残念な状態になってしまいます。

というわけで、今回はその解決方法です。

### 解決方法1
[こちら](http://sourceforge.net/projects/vmsvga2/)で、VMware FusionのゲストのMac OS X用にオープンソースのディスプレイドライバが公開されています。
ダウンロードしてインストールしましょう。
インストール＆再起動後、環境設定のディスプレイから画面サイズを手動で選択してください。

### 解決方法2
素直に[Parallels Desktop 9 for Mac](http://www.parallels.com/jp/products/desktop/)を買いましょう。
VMwareに比べて若干不安定ですが、ディスプレイドライバなどがチューニングされているようで動作も速くオススメです。たまに固まるのでこまめなCommitは忘れずに。
尚、いまならAmazonで乗り換え版が安く売られています。

ではまた。

追伸
Parallels Desktop 9 for Macのパッケージ版を買った場合は必ず最新版にアップデートしてから使用しましょう。
初期版には、ゲストがMac OS Xの場合、ディスクの「再利用」を実行するとパーティションテーブルが破壊されるという困ったバグがあります。
【PHP】配列の中身をすべて出力する

こんにちは。
いざというときに配列の中身が取り出せなくて困るもの。
>
print_r()関数

こちらをやってみたら何番目の要素に、何が入っているか。
が表示された。

でもデバッグ用に使うらしい。
やはり、ループは切っても切り離せないですね。

```php
$test_array = array("a","b","c","d") ;

for($i = 0 ; $i < count($test_array); $i++){
    echo $test_array[$i] ;
}
```

*****
以下、JSの確認もこめて

昔は理解していなかった気がするが、どうやらJavaScriptを勉強して
少しはfor文とか、要素数すべて表示とか理解できてきているみたいです。
(count関数を使った記憶がなく、.lengthってすごい！って思ったくらいですし･･･)

JavaScriptで書くとこうなりますかね。

```js
var test_array = [
    "a",
    "b",
    "c",
    "d"
] ;

for(var i = 0 ; i < test_array.length ; i++){
    document.write(test_array[i]) ;
}

```

>
PHPは「count($変数)」で要素の数だけ取り出す。
JavaScriptは「変数.length」で要素の数だけ取り出す。


PHPの学習も進めていくかもしれないので、
うまくこんがらないよう、双方ともに理解していきます。
むしろ頭の体操にも、確認にもなり良いかもしれません。

それではこれからもよろしくお願いいたします。
Gentoo LinuxでMySQLインストール後にやること

Gentoo LinuxにMySQLを入れたとき、初期設定のやり方をよく忘れるのでメモ。

こんな感じでMySQLがインストールされているとして、

```zsh
[root@MySQL-Clotho] # emerge -pv mysql

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ~] dev-db/mysql-5.5.32  USE="community ssl -cluster -debug -embedded -extraengine -jemalloc -latin1 -max-idx-128 -minimal -perl -profiling (-selinux) -static -systemtap -tcmalloc {-test}" 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

 * IMPORTANT: 8 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.
```

`emerge --config` して、MySQLデーモンを起動して`mysql_secure_installation`すると簡単にMySQLがセットアップできる。

```zsh
[root@MySQL-Clotho] # emerge --config mysql
[root@MySQL-Clotho] # /etc/init.d/mysql start
[root@MySQL-Clotho] # mysql_secure_installation
```
Corona SDK 向けのアイコン画像、スプラッシュ画像サイズ一覧


* [Corona Docs: guide > distribution > buildSettings](http://docs.coronalabs.com/guide/distribution/buildSettings/index.html#appicons)

## iOS アイコンサイズ一覧

| アイコン種別 | ファイル名称 | サイズ |
|:--|:--|:-:|
| アプリアイコン | Icon.png | 57 x 57 |
| アプリアイコン | Icon@2x.png | 114 x 114 |
| アプリアイコン | Icon-60.png | 60 x 60 |
| アプリアイコン | Icon-60@2x.png | 120 x 120 |
| アプリアイコン | Icon-72.png | 72 x 72 |
| アプリアイコン | Icon-72@2x.png | 144 x 144 |
| アプリアイコン | Icon-76.png | 76 x 76 |
| アプリアイコン | Icon-76@2x.png | 152 x 152 |
| 設定 / Spotlight アイコン | Icon-Small.png | 29 x 29 |
| 設定 / Spotlight アイコン | Icon-Small@2x.png | 58 x 58 |
| 設定 / Spotlight アイコン | Icon-Small-40.png | 40 x 40 |
| 設定 / Spotlight アイコン | Icon-Small-40@2x.png | 80 x 80 |
| 設定 / Spotlight アイコン | Icon-Small-50.png | 50 x 50 |
| 設定 / Spotlight アイコン | Icon-Small-50@2x.png | 100 x 100 |
| App Store アイコン | iTunesArtwork | 512 x 512 |
| App Store アイコン | iTunesArtwork@2x | 1024 x 1024 |

## iOS スプラッシュ画像サイズ一覧

| ファイル名称 | サイズ |
|:--|:--|:-:|
| Default.png | 320 x 480 |
| Default@2x.png | 640 x 960 |
| Default-568h@2x.png | 640 x 1136 |
| Default-Portrait.png | 768 x 1024 |
| Default-Portrait@2x.png | 1536 x 2048 |
| Default-Landscape.png | 1024 x 768 |
| Default-Landscape@2x.png | 2048 x 1536 |

## Android アイコンサイズ一覧

| アイコン種別 | ファイル名称 | サイズ |
|:--|:--|:-:|
| アプリアイコン | Icon-ldpi.png | 36 x 36 |
| アプリアイコン | Icon-mdpi.png | 48 x 48 |
| アプリアイコン | Icon-hdpi.png | 72 x 72 |
| アプリアイコン | Icon-xhdpi.png | 96 x 96 |
| アプリアイコン | Icon-xxhdpi.png | 144 x 144 |
| 通知アイコン | IconNotificationDefault-ldpi.png | 18 x 18 |
| 通知アイコン | IconNotificationDefault-ldpi-v9.png | 18 x 18 |
| 通知アイコン | IconNotificationDefault-ldpi-v11.png | 18 x 18 |
| 通知アイコン | IconNotificationDefault-mdpi.png | 24 x 24 |
| 通知アイコン | IconNotificationDefault-mdpi-v9.png | 24 x 24 |
| 通知アイコン | IconNotificationDefault-mdpi-v11.png | 24 x 24 |
| 通知アイコン | IconNotificationDefault-hdpi.png | 36 x 36 |
| 通知アイコン | IconNotificationDefault-hdpi-v9.png | 36 x 36 |
| 通知アイコン | IconNotificationDefault-hdpi-v11.png | 36 x 36 |
| 通知アイコン | IconNotificationDefault-xhdpi.png | 48 x 48 |
| 通知アイコン | IconNotificationDefault-xhdpi-v9.png | 48 x 48 |
| 通知アイコン | IconNotificationDefault-xhdpi-v11.png | 48 x 48 |

* `-v11` のアイコンは、Android 3.0 以上で、透明色と白色で構成される。
* `-v9` のアイコンは、Android 2.3 で、透明色と灰色で構成される。
* `-v` 無しのアイコンは、Android 2.2 で、透明色と黒色、白色などで構成される。
dylibを含むframeworkを作る

# 目的
libUSB-1.0.0.dylibを使用する cocoa frameworkを作りたい。
frameworkはそれを使用するアプリケーションの中に組み込みたい。

# 手順
* frameworkを作る
* frameworkをアプリケーションに組み込む

## 1. frameworkを作る

フレームワークの作成は以前書いた「[Cocoaアプリケーションに dylibをバンドルする](http://qiita.com/Nunocky/items/a913e8217f8aa6b87aec)」とほぼ同じ。スクリプトの NEWLIBPATHの値だけ変更する。

### libUSBの用意
libusb-1.0.0.dylibをプロジェクトに追加

### Copy File
Build Phaseの Compile Sourceの下に "Add Copy File Build Phase"で libUSB-1.0.0.dylibを追加。Destinationは Shared Support。

### Run Script
さらにその下に "Add Run Script Build Phase"で以下を実行させるフェーズを追加。

```
TARGETS=(libusb-1.0.0.dylib)

EXECFILE=${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}
LIBPATH=${BUILT_PRODUCTS_DIR}/${SHARED_SUPPORT_FOLDER_PATH}
NEWLIBPATH=@executable_path/../Frameworks/${TARGET_NAME}.framework/Resources

for TARGET in ${TARGETS[@]} ; do
  LIBFILE=${LIBPATH}/${TARGET}
  TARGETID=`otool -DX "${LIBPATH}/$TARGET"`
  NEWTARGETID=${NEWLIBPATH}/${TARGET}
  install_name_tool -id "${NEWTARGETID}" "${LIBFILE}"
  install_name_tool -change ${TARGETID} ${NEWTARGETID} "${EXECFILE}"
done
```

### Link Binary With Librariesの変更
libusb-1.0.0.dylibを追加、依存関係にある IOKIT.frameworkも追加。

### build
これでビルドすれば frameworkは完成

## 2. frameworkをアプリケーションに組み込む
適当なアプリケーションを作って frameworkをコピー。(※この時点で "Link Binary With Libraries"にこのフレームワークは追加されるはず)

Build Phaseの Compile Sourcesの下に "Copy Files"を追加、Destinationを "Framework"として フレームワークを追加。
AngularJSで加速度センサーにアクセスする。

### AngularJSで加速度センサーにアクセスする。
先日、AngularJSで加速度センサーのDeviceMotionEventを拾うコードを作ったけど、
結局使わなくなってしまったのですが、そのまま捨てるのはもったいないので、ここに書き残しておきます。

ポイントは$window.addEventListenerです。これが、window.addEventListenerと同じ意味になります。

```js:sample.js
function SampleCtrl($scope, $window) {
	var ratio = 0.9;
	$scope.preAccelerate = {x: 0, y: 0, z: 0};
	$scope.v1 = {x: 0, y: 0, z: 0};
	$scope.preEventTime = new Date().getTime();
	$window.addEventListener('devicemotion', function(e) {
		var currentTime = new Date().getTime();
		var time = (currentTime - $scope.preEventTime) / 1000;		// 秒
		$scope.preEventTime = currentTime;

		// 重力加速度を取得
//		$scope.accelerate = e.accelerationIncludingGravity;
		$scope.accelerate = e.acceleration;

		// ローパスフィルタ
		$scope.preAccelerate.x = ($scope.preAccelerate.x * ratio) + ($scope.accelerate.x * (1 - ratio));
		$scope.preAccelerate.y = ($scope.preAccelerate.y * ratio) + ($scope.accelerate.y * (1 - ratio));
		$scope.preAccelerate.z = ($scope.preAccelerate.z * ratio) + ($scope.accelerate.z * (1 - ratio));

		// V2 = V1 + atより。（a = m/s^2、t=s、V1、V2=m/s）
		$scope.v1.x = $scope.v1.x + myRound($scope.accelerate.x - $scope.preAccelerate.x, 1) * time;
		$scope.v1.y = $scope.v1.y + myRound($scope.accelerate.y - $scope.preAccelerate.y, 1) * time;
		$scope.v1.z = $scope.v1.z + myRound($scope.accelerate.z - $scope.preAccelerate.z, 1) * time;

		// km/hで表示させたい！
		$scope.x = Math.abs(myRound($scope.v1.x / 1000 * 3600, 1));
		$scope.y = Math.abs(myRound($scope.v1.y / 1000 * 3600, 1));
		$scope.z = Math.abs(myRound($scope.v1.z / 1000 * 3600, 1));

		$scope.$apply();
	});
}

function myRound(value, place) {
	var param = Math.pow(10, place);
	return Math.round(value * param) / param;
}
```
Dynamic Inventoryを使ってみる


ansibleは、インベントリファイルに記載されているホストを認識するのですが、実はInventoryファイルは静的なテキストファイル以外に、実行可能なスクリプトファイルを指定できます。

やり方
--------

[Dynamic Inventory](http://docs.ansible.com/ansible/intro_dynamic_inventory.html)
に詳しく記載されていますが、以下のようなjsonを返すスクリプトファイルを用意し、実行権限を付けて保存したファイルを ansible-playbookコマンド等の　-iオプションに渡せば良いだけです。

```yaml:
{
    "databases"   : {
        "hosts"   : [ "host1.example.com", "host2.example.com" ],
        "vars"    : {
            "a"   : true
        }
    },
    "webservers"  : [ "host2.example.com", "host3.example.com" ],
    "atlanta"     : {
        "hosts"   : [ "host1.example.com", "host4.example.com", "host5.example.com" ],
        "vars"    : {
            "b"   : false
        },
        "children": [ "marietta", "5points" ],
    },
    "marietta"    : [ "host6.example.com" ],
    "5points"     : [ "host7.example.com" ]
}
```

ansibleは、インベントリファイルに実行権限が付いていなければ、通常のインベントリファイルとして読み込み、実行権限が付いていれば実行した結果帰ってくるjsonを読み込むという処理をしているようです。

これで何が嬉しいのか
----------------------------

構築済みのシステム等では既にmuninやnagios,zabbix等の監視ソフトなどでサーバーの一覧やグループ化をされていると思います。
ansibleからはそちらのデータをマスターとして扱い、直接参照するような簡単なスクリプトを用意する方が効率的だと思われます。
また、inventoryスクリプトはmoduleと同じく言語は問わずjsonを標準出力で返せれば何でもOKなようなので、作成の閾は低いですね。

既に用意されているスクリプト
---------------------------------------

Dynamic Inventory用のスクリプトは既にいくつか用意されています。
https://github.com/ansible/ansible/tree/devel/plugins/inventory
EC2やvagrant、zabbixもすでにありましたね。
Tengを使いたくて

この記事内容の、納得いかない部分の修正案を考えました。
この記事をそのまま使うと変なんなっちゃうので、下記も読んでみてください。
[続、Tengを使いたくて（今回はDB周りの話はありません）](http://qiita.com/otaka/items/c9639c6501ba3c7b2992)


## Tengって？

分類すると、ORマッパーっていうものだそうです。
何ができるのかというと、データベースを軽いタッチで使えるようになるとのこと。
今まで（未だに？）素のDBIでデータベース操作していましたが、以前からDBICとかDBIx::Skinnyとかに興味ありながらも<del>新しいものを避けてきた</del>なかなか触る機会がなかったのでした。
でもやっぱり早く作れたほうがいいよね、ということで、思い切ってやってみようと思ったのでした。


単純に使う場合は、情報がネット上に割とあるので困らないのですが。
複数のテーブルがある場合は操作も複雑になるし、その場合はサブルーチンが増えるので、ファイル1枚じゃつらいよね、ということで試行錯誤しました。



## 複数のファイルに処理を分けたい

いまだにPerl初級者の域を全く出ない私なので、なかなか手こずりました。
メインになるファイルの下層に、処理を内容ごとに切り分けた関数群のファイルを置いて、そこからエクスポートして、メイン側のファイルでインポートする、とか。何やら名前空間がぐちゃぐちゃになりそうな。
結局うまくいかなかったんですが。



## 自分流、現時点での結論

正直言ってベストかどうか大いに疑問を感じているので、真似しないほうがいいと思います。

ファイル構成は、

```
	/lib/MyApp
	
	/lib/MyApp/Model.pm				----- Model本体
	/lib/MyApp/Model/Table1.pm		----- Table1の処理用
	/lib/MyApp/Model/Table2.pm		----- Table2の処理用

	/lib/MyApp/Model/DB/MySQL.pm		----- Teng読み込み用
	/lib/MyApp/Model/DB/MySQL/Schema.pm	----- Tengのスキーマ
```

```perl:/lib/MyApp/Model/DB/MySQL.pm
package MyApp::Model::DB::MySQL;
use strict;
use warnings;
use utf8;
use parent 'Teng';

1;
```

これだけ。。。
万が一自前のメソッド足したいときはここに。


```perl:/lib/MyApp/Model.pm
package MyApp::Model;

use strict;
use warnings;
use utf8;
use DBI;
use MyApp::Model::DB::MySQL;

sub new {
	my $pkg = shift;
	my $teng = MyApp::Model::DB::MySQL->new({
		connect_info => ['DBI:mysql:database=db_name;host=localhost;', 'db_user', 'db_pass', {mysql_enable_utf8=>1}]
	});
	
	bless {
		'TENG'	=> $teng
	}, $pkg;
}

1;
```

ここもこれだけ。
共通で使いそうな処理はこの`MyApp::Model`に書く。


```perl:/lib/MyApp/Model/Table1.pm
package MyApp::Model::Table1;
use strict;
use warnings;
use utf8;
use parent 'MyApp::Model';

sub get_data{
	my $self = shift;
	
	#処理
	#my $row = $self->{'TENG'}->single(......);  的な
	
	return { 'data' => 'data' };
}
1;
```

という感じにしました。
`perent`を使ったので、`MyApp::Model`で`new`した内容が引き継がれるので、全部のファイルにDBの接続用のヤツを書かなくて済むのでよかった、みたいな雰囲気です。
きっともっとスマートな方法があるんでしょうね。


## なんでMyApp::Model::DB::MySQLを分けたの？

なんとなく自分的に、Modelは「データを出し入れする担当」、Controllerは「リクエストを捌いたり、レスポンス内容をViewに渡す担当」というイメージがあって、データベース関連以外にもデータを扱うのはModelにやってほしいな、と感じています。
たとえば天気予報のデータをどこかのサイトから持ってきて整形してController側に渡す、とか。

なので、DBだけではないので、混ざっちゃうとゴチャゴチャしちゃうじゃん、という単純な発想でした。
DBにしても、MySQL以外のものを合わせて使う場合もあるでしょうし。MongoDBとか。


ひとまず、今回はこの構成で進めて行こうと思っています。
Compass Sprite用のmixin

Compassでスプライトを使うときのmixin。

`$device-pixel-ratio`をいじればRetina対応でもそうでないやつでもいける感じです。

```scss
// $name: sprite file name
// $sprites: sprite-map
// $block: display type
// $device-pixel-ratio: if use Retina-image, it should 2 and original-image-size is x2.
// $sprites-image: sprite-url($sprite) ;for optimize compile

@mixin sprite-bg-size($name, $sprites, $device-pixel-ratio: 2) {
    $_w: image-width(sprite-file($sprites, $name)) / $device-pixel-ratio;
    $_h: image-height(sprite-file($sprites, $name)) / $device-pixel-ratio;
    width: $_w;
    height: $_h;
    background-size: $_w auto;
}

@mixin sprite-bg-position($name, $sprites, $device-pixel-ratio: 2) {
    $_pos: sprite-position($sprites, $name);
    $_x: round(nth($_pos, 1) / $device-pixel-ratio);
    $_y: round(nth($_pos, 2) / $device-pixel-ratio);
    background-position: $_x $_y;
}

@mixin sprite-bg-image($sprites, $sprites-image, $display: block) {
  display: $display;
  background-image: $sprites-image;
  background-repeat: no-repeat;
}

// manager
@mixin sprite-bg($name, $sprites, $sprites-image, $display: block, $device-pixel-ratio: 2) {
  @include sprite-bg-image($sprites, $sprites-image, $display);
  @include sprite-bg-position($name, $sprites, $device-pixel-ratio);
  @include sprite-bg-size($name, $sprites, $device-pixel-ratio);
}

@mixin sprite-bg-base($name, $sprites, $sprites-image, $display: block, $device-pixel-ratio: 2) {
    @include sprite-bg-image($sprites, $sprites-image, $display);
    @include sprite-bg-size($name, $sprites, $device-pixel-ratio);
}
```

#### 使うとき

```scss
$sprites: sprite-map("hoge/fuga/*.png", $layout: smart);
$spritesImage: sprite-url($sprites);
// hoge/fuga/以下に default.pngとon.pngがあると想定して
.piyo {
    @include sprite-bg-base('default', $sprites, $spritesImage);
    @include sprite-bg-position('default', $sprites);
    &:hover {
        @include sprite-bg-position('on', $sprites);
    }
}

```
Struts2-tiles3-plugins を用いたアクション

さくっとくんでみた。

## 設定ファイル等

* [pom.xml](http://qiita.com/asahina_dev/private/115ac4cf9317f3709d4f)
* [src/main/web/WEB-INF/web.xml](http://qiita.com/asahina_dev/private/e395396f27fe4d308bf2)
* [src/main/web/WEB-INF/tiles.xml](http://qiita.com/asahina_dev/private/06f8578f12a87c5d6e6c)

## IndexAction 

```java
package action;

import java.util.Map;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

@Namespace("/")
@ParentPackage("tiles-default")
@Action("index")
@Results({
		@Result(name = "success", location = "index_jsp", type = "tiles"),
		@Result(name = "input", location = "index_jsp", type = "tiles"),
		@Result(name = "error", location = "index_jsp", type = "tiles")
})
public class IndexAction extends ActionSupport implements SessionAware, SessionKey {

	protected Map<String, Object> session;

	@Override
	public String execute() throws Exception {

		return SUCCESS;
	}

	public void setSession(Map<String, Object> session) {
		this.session = session;
	}

}
```

## index.jsp

```jsp
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@ taglib prefix="tilesx" uri="http://tiles.apache.org/tags-tiles-extras"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<html>
	<head>
		<s:head />
		<title>
			<tiles:insertAttribute name="TITLE" />
		</title>
	</head>
	<body>
		<h2>
			<tiles:insertAttribute name="TITLE"/>
		</h2>
	</body>
</html>
```
Bashで処理時間（時分秒）を記録するためのスクリプト

#概要
簡単に秒単位で処理時間を測りたかったんです。

何番煎じかわかりませんね、、、

tmie(COMMUND)でもいいんですがファイルに書き出すことが出来ないので、ちゃんとechoで吐き出せてファイルに記録できるものが欲しかったです。
（私はtwitterAPIとかを併用して、大きな処理の端々にこのスクリプトを仕込んでなんの処理がいつ始まって何時間かかったのかなどを監視してたりしてます。見れば検討がつくとは思いますが、一度setStarttimeを呼べば、何度でもgetEndtimeでそれまでの時間が取得できます。ただ入れ子はダメです・・・。その場合は別スクリプトにしてしまうなどで対処して下さい。）

#コード
以下がコードです。
処理時間を測りたいスクリプトで、読み込んでから実行することを想定しています。
（私の場合、runtimeを~/bin/に入れて利用しています）

```bash:runtime(.sh)
#!/bin/bash

function setStarttime() {
        start_time=`date +%s`
}

function getEndtime() {
        end_time=`date +%s`

        SS=`expr ${end_time} - ${start_time}`

        HH=`expr ${SS} / 3600`
        SS=`expr ${SS} % 3600`
        MM=`expr ${SS} / 60`
        SS=`expr ${SS} % 60`

        echo "${HH}:${MM}:${SS}"
}
```

使うには、処理時間を測りたいスクリプト内で以下のように予め読み込んでおいて、setStarttime, getEndtimeを実行させます。

```bash:test.sh
#/bin/bash

. runtime

setStarttime

# 処理
sleep 3

getEndtime
```

##実行結果

```bash
> ./tset.sh
> 0:0:3
```
XcodeとMac OS XのVersionの組み合わせごとのSDKとSimulatorの比較

## iOSのレガシーコードのメンテナンスは修羅の道。
というわけで、過去の開発、及び、テスト環境を再現するために必要なのでまとめてみた。
Apple Developer Centerや歴代のXcodeのRelease Noteを見てもよくわからなかったので、実際に仮想環境のMac OS XにXcodeをインストールして確認しています。
ただし、さすがに古すぎるものや非公式の組み合わせは調査していません。
例えば、iOS 4.3のSimulatorが必要なら、Mac OS X 10.7(Lion)とXcode 4.6.3が最新の組み合わせと言うことになります。

### Versions compare table of Xcode and Mac OS X
|Runs on versions of Mac OS X|Version of Xcode|OS X SDK(s)|Min OS X Deployment Target|iOS SDK|Min iOS Deployment Target|iOS simulator(s)|iOS arm supported|
|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
|10.10|6.1.0|10.10,10.9|10.4|8.1|4.3|8.1,7.1|64,v7s,v7|
|10.9|6.1.0|10.10,10.9|10.4|8.1|4.3|8.1,7.1,7.0|64,v7s,v7|
|10.9|6.0.1|10.9|10.4|8.0|4.3|8.0,7.1,7.0|64,v7s,v7|
|10.9|5.1.1|10.9,10.8|10.4|7.1|4.3|7.1,6.1|64,v7s,v7|
|10.9|5.0.2|10.9,10.8|10.4|7.0|4.3|7.0,6.1,6.0|64,v7s,v7|
|10.8|5.1.1|10.9,10.8|10.4|7.1|4.3|7.1,6.1,6.0|64,v7s,v7|
|10.8|5.0.2|10.9,10.8|10.4|7.0|4.3|7.0,6.1,6.0,5.1,5.0|64,v7s,v7|
|10.8|4.6.3|10.8,10.7|10.4|6.1|4.3|6.1,6.0,5.1,5.0|v7s,v7|
|10.8|4.5.2|10.8,10.7|10.4|6.0|4.3|6.0,5.1,5.0|v7s,v7|
|10.8|4.4.1|10.8,10.7|10.4|5.1|3.0|5.1,5.0|v7,v6|
|10.7|4.6.3|10.8,10.7|10.4|6.1|4.3|6.1,6.0,5.1,5.0,4.3|v7s,v7|
|10.7|4.5.2|10.8,10.7|10.4|6.0|4.3|6.0,5.1,5.0,4.3|v7s,v7|
|10.7|4.4.1|10.8,10.7|10.4|5.1|3.0|5.1,5.0,4.3|v7,v6|
|10.7|4.3.3|10.7,10.6|10.4|5.1|3.0|5.1,5.0,4.3|v7,v6|
|10.7|4.2.1|10.7,10.6|10.4|5.0|3.0|5.0,4.3|v7,v6|
|10.7|4.1.0|10.7,10.6|10.4|4.3|3.0|4.3|v7,v6|
|10.6|4.2.0|10.6|10.4|5.0|3.0|iPad 5.0,4.3,4.2,3.2 iPhone 5.0,4.3,4.2,4.1,4.0|v7,v6|
|10.6|4.1.0|10.6|10.4|4.3|3.0|iPad 4.3,4.2,3.2 iPhone 4.3,4.2,4.1,4.0|v7,v6|
|10.6|4.0.2|10.6,10.5|10.4|4.3|3.0|iPad 4.3,4.2,3.2 iPhone 4.3,4.2,4.1,4.0|v7,v6|
|10.6|3.2.6|10.6,10.5|10.1|4.3|3.0|iPad 4.3,4.2,3.2 iPhone 4.3,4.2,4.1,4.0|v7,v6|
スマートクオートにお気を付けを

コードを Kobito に貼り付けたら、直線型の引用符「' "」が曲線型の「‘ “」に変換され、コードが実行できなくなり困りました。

実は Mac OS X の「スマートクオート」（smart quotes）という機能が原因なんです。

その機能が必要ないであれば、下記の図のように「System Preferences > Keyboard > Text」から無効にすることができます。

![mac-keyboard-text-smart-quotes-with-annotations.png](https://qiita-image-store.s3.amazonaws.com/0/11906/583a5113-47e7-4dff-3542-55bad1f66f29.png)
UINavigationBarのUTF-8-MACをUTF-8で比較する

だいぶハマった

```rb
ならば /^タイトルが"([^\"]*)"であること$/ do |title|
    actual = find(:xpath, "navigationBar")[:name]
    actual = actual.chomp.encode("UTF8-MAC").encode("UTF-8")
    actual.should == title
end
```
FlashAirの制御画像の状態を変更する(UWSC)

# まえおき
Flash Air というSDカードをご存じでしょうか？
SDカードに無線LANを内蔵しており、カメラで撮影した写真にスマートフォンやPCから直接アクセス出来るという便利なカードです。
同種の機能を提供しているEye-Fiカードと違い、単純なWi-Fi機能と専用のクライアントだけの提供であるため、割と簡単に使えるのが特徴なのかな と(Eye-Fiのほうもちゃんと使えば簡単な使い方も出来るんだと思いますが)。

で、このFlash Air、PCのSDカードとして使ってみても意外と使えます。SDカードをPCに接続しておくと、SDカードの無線LANがONになり、外部から中のファイルにアクセス出来るようになりますので、簡単な公開フォルダとして使えます。

## PCでFlash Airを使う
さてこのFlash Air、無線LANの起動モードというものがあります。

初期設定の「自動起動モード」では、機器の電源を入れたか、SDカードを挿入してから5分間、無線LANが起動します。ただ、PCの場合は機器の電源を入れた＝PCの起動になってしまうので、あまり使いやすいものではありません。

「手動起動モード」の場合、最初からSDカードに入っている制御画像のプロテクト設定(PCの場合読み取り専用設定に相当)が無線LANの起動スイッチになります(読み取り専用ON:無線LANOFF、読み取り専用OFF:無線LANON)。ただ、Windowsの場合読み取り専用設定を切り替えるには、制御画像のプロパティを開いてチェックボックスを操作する必要があり、結構めんどくさい。

# 制御画像の読み取り専用設定を切り替えるスクリプトを作った

前置きが長くなりました。とりあえずなら、制御画像の読み取り専用設定をスイッチするスクリプトを書けば良い。ということで、UWSCを使って制御スクリプトを書いてみました。

```uwsc:FlashAirStateChanger.uws
dim fso = CREATEOLEOBJ("Scripting.FileSystemObject")
for i = 0 to GETOLEITEM(fso.Drives) - 1
  // ドライブの検索(リムーバブルかつ、制御用画像が存在するか？)
  dim d = ALL_OLE_ITEM[i]
  PRINT d.DriveLetter + ": Type " + d.DriveType 
  IFB d.DriveType = 1 THEN
    PRINT "found " + d.path
    dim path = fso.buildPath(fso.buildPath(fso.buildPath(d.path, "DCIM"), "100__TSB"), "FA000001.JPG")
    PRINT "path " + path
    IFB fso.FileExists(path) THEN
      PRINT "file found"
      // 制御用画像のプロテクト判定
      dim file = fso.GetFile(path)
      IFB file.attributes AND $1 = $1 THEN
        // プロテクトON＝無線OFF
        SELECT SLCTBOX( SLCT_BTN, 0, "無線はOFFのようです", "ONにする", "OFFのまま(再設定)")
          CASE SLCT_1
            file.attributes = file.attributes XOR $1
            BALLOON("Flash Airの無線をONにしました", 0, 20, 20, 24, "MS ゴシック", $00FF00, $FFFFFF)
            SLEEP(3)
            BALLOON()
            PRINT "Wi-Fi ON"
          CASE SLCT_2
            // いったんONにしてOFFにし直す
            file.attributes = file.attributes XOR $1
            SLEEP(1)
            file.attributes = file.attributes OR $1
            PRINT "Wi-Fi Reset"
        SELEND
      ELSE
        // プロテクトOFF＝無線ON
        SELECT SLCTBOX( SLCT_BTN, 0, "無線はONのようです", "OFFにする", "ONのまま(再設定)")
          CASE SLCT_1
            file.attributes = file.attributes OR $1
            BALLOON("Flash Airの無線をOFFにしました", 0, 20, 20, 24, "MS ゴシック", $00FF00, $FFFFFF)
            SLEEP(3)
            BALLOON()
            PRINT "Wi-Fi OFF"
          CASE SLCT_2
            // いったんOFFにしてONにし直す
            file.attributes = file.attributes OR $1
            SLEEP(1)
            file.attributes = file.attributes XOR $1
            PRINT "Wi-Fi Reset"
        SELEND
      ENDIF
      // FlashAir二枚差しには非対応です
      EXIT
    ELSE
      PRINT "file not found"
    ENDIF
  ENDIF
next
```
Flash Airを接続したPCでこのスクリプトを実行すると、現在の無線LANの設定によって、「無線はONのようです」または「無線はOFFのようです」というダイアログが表示されます(「ようです」というのは、資料を読んだ限り状態によってはこの設定がアンマッチになることがあるということなので)。
![スクリーンショット 2013-12-18 15.18.42.png](https://qiita-image-store.s3.amazonaws.com/0/14499/8519ffba-b194-befe-f946-5bb539ded6b5.png)

ここで、ボタンを選択すると、制御画像の読み取り専用設定が切り替わり、無線LANの状態が変わります(状態リセットのため、現在と同じ状態を選択しても、読み取り専用設定を切り替えます)。

とりあえずこれで、PDFやらExcelシートやら、PCから簡単に公開することが出来ますね。他にも使い道がありそうなので、もう少しいじってみようかな と。
yumで最新のMySQLをインストールする

* 何もしない状態でyumでMySQLを入れようとしたところバージョンが古かったのでその対応をメモっておく

## 環境
* Amazon EC2上の CentoOS6.4 64bit

## やったこと
* MySQL公式yumリポジトリの追加
 * http://dev.mysql.com/downloads/repo/

>\# バージョンのところは適宜変更すること
 $ sudo yum install -y http://repo.mysql.com/mysql-community-release-el6-4.noarch.rpm

* これで最新のMySQLがyumで入れられるようになる

>$ sudo yum list | grep mysql-community
mysql-community-release.noarch el6-4            @/mysql-community-release-el6-4.noarch
mysql-community-client.x86_64  5.6.14-3.el6     mysql-community
mysql-community-common.i686    5.6.14-3.el6     mysql-community
mysql-community-common.x86_64  5.6.14-3.el6     mysql-community
mysql-community-devel.i686     5.6.14-3.el6     mysql-community
mysql-community-devel.x86_64   5.6.14-3.el6     mysql-community
mysql-community-embedded.i686  5.6.14-3.el6     mysql-community
mysql-community-embedded.x86_64
                              5.6.14-3.el6     mysql-community
mysql-community-embedded-devel.i686
                              5.6.14-3.el6     mysql-community
mysql-community-embedded-devel.x86_64
                              5.6.14-3.el6     mysql-community
mysql-community-libs.i686      5.6.14-3.el6     mysql-community
mysql-community-libs.x86_64    5.6.14-3.el6     mysql-community
mysql-community-libs-compat.i686
                               5.6.14-3.el6     mysql-community
mysql-community-libs-compat.x86_64
                               5.6.14-3.el6     mysql-community
mysql-community-release.noarch el6-5            mysql-community
mysql-community-server.x86_64  5.6.14-3.el6     mysql-community
mysql-community-test.x86_64    5.6.14-3.el6     mysql-community
mysql-connector-odbc.x86_64    5.2.6-1.el6      mysql-community
                               6.0.8-1.el6      mysql-community
Jenkinsでビルド実行時に実行確認をさせたい


本番リリース用とかで、ビルドの時に実行可否の確認をさせたい場合、
[ビルドのパラメータ化]を入れてやると良いらしい。

ビルドの設定画面で、ビルドのパラメータ化にチェックをいれて、
パラメータの追加で`真偽値`を選択する。

![ビルド設定](https://qiita-image-store.s3.amazonaws.com/0/27566/5014802b-bb1b-3999-d433-f4c219631be7.png "ビルド設定")

名前の項目が環境変数になるらしいので、環境変数の中身をチェックして、
falseの場合は実行させないようにすれば良い。

shellの場合

```
if [ ${confirm} = false ]; then
	exit 1 #0にすると正常終了になる
fi
```

***
参考サイト

* [邪道jenkinsを検証してみたよ](http://netmark.jp/2012/12/jenkins.html)
* [システムエンジニアのスキルアップ](http://itref.fc2web.com/technology/jenkins.html)
【毎回忘れる】ファイルの中身をクリップボードにコピー、出力

MacOSXを使っていて、ファイルの中身をクリップボードにコピーしたいときなんか、いつもコマンドを忘れてしまうので、備忘メモです。

# pbcopy

```shell-session:pbcopy
% pbcopy < hoge
# もしくは
% cat hoge | pbcopy
````

これで Command + v で出力が出来ます！

![スクリーンショット 2013-12-18 3.19.41 pm.png](https://qiita-image-store.s3.amazonaws.com/0/18705/3bedfe5e-3406-54f9-e9b7-8533a22b18c5.png)


またこんな使い方も出来ます。（本来の使い方はこっちなのかな）

```shell-session:pbcopy
% ls -la | pbcopy #上のcatのコマンドと同じ感じです。
````

すると
![スクリーンショット 2013-12-18 3.18.50 pm.png](https://qiita-image-store.s3.amazonaws.com/0/18705/12d4df1c-e50e-8e18-ffea-7d0de4ed7593.png)

# 出力

コピーした内容を出力するにはこんな感じ。

```shell-session:pbpaste
% pbpaste > text.txt # クリップボードのデータをtext.txtに出力します
% cat text.txt # これで中身が見れます
```
今週のアルゴリズム：10進数の回文

問題：https://codeiq.jp/ace/thisweek_masuipeo/q575

「日付の2進数変換」を1回目にO(n)で提出した時、そのフィードバックで、効率的に実装できると指摘を受け、2回目はO(√n)で提出することが出来ました。<u>感謝しています</u>。
今回の問題も似ているので、解答例の計算量はO(√n)なのだろうなと期待していましたが、O(n)だったことが <del>少々残念でした…</del> 。ですので私のO(√n)な答案を公開させていただきます。585の次の項も数秒で見つけることができます。

```rb:codeiq575.rb
#!/usr/bin/ruby
#coding:utf-8
def check(n)
	[10,8].all?{|e|
		s=n.to_s(e)
		s==s.reverse
	}
end
puts [0,1] #自明(0.to_s(2)で空文字列ではなく'0'が返ってくるためloop中でこれらを引き出すことは不可能)
start=1
digit=1
loop{
	start.step(start*2-1){|i|
		s=i.to_s(2)
		n=(s+s.reverse).to_i(2)
		p n if check(n)
	}
	start.step(start*2-1){|i|
		s=i.to_s(2)
		['0','1'].each{|mid|
			n=(s+mid+s.reverse).to_i(2)
			p n if check(n)
		}
	}
	start*=2
	digit+=2
	STDERR.puts '[*] '+('1'*digit).to_i(2).to_s
}
#[*]で始まる行は進捗表示
__END__
0
1
3
5
7
[*] 7
9
[*] 31
[*] 127
[*] 511
585
[*] 2047
[*] 8191
[*] 32767
[*] 131071
[*] 524287
[*] 2097151
[*] 8388607
[*] 33554431
[*] 134217727
[*] 536870911
719848917
[*] 2147483647
[*] 8589934591
[*] 34359738367
[*] 137438953471
[*] 549755813887
[*] 2199023255551
[*] 8796093022207
[*] 35184372088831
[*] 140737488355327
[*] 562949953421311
[*] 2251799813685247
```
今週のアルゴリズム：平方根の数字

問題：https://codeiq.jp/ace/thisweek_masuipeo/q591

フィードバックに書かれていた解答では、sqrtのto_sを使っていたのですが、それだと誤差が心配な気がしました。
私はbigdecimalを使うことで誤差を回避しました。

```rb:codeiq591.rb
#!/usr/bin/ruby
require 'bigdecimal'
$M=99
def pan(n,f)
	r=0
	h={}
	sqrt=BigDecimal(n.to_s).sqrt(99).split
	sqrt[1][(f ? 0 : sqrt[3])..99].each_char{|c|
		r+=1
		h[c.to_i]=true
		return r if (0..9).all?{|e|h.has_key?(e)}
	}
	nil
end

(1..1/0.0).each{|i|
	next if Math.sqrt(i).to_i**2==i
	if pan(i,true)==10
		puts '整数部分を含む場合:'+i.to_s
		break
	end
}
(1..1/0.0).each{|i|
	next if Math.sqrt(i).to_i**2==i
	if pan(i,false)==10
		puts '小数部分のみの場合:'+i.to_s
		break
	end
}
```
数字だけの配列を文字列に＆その逆

```js
var arr = array[1, 2, 3, 5];

/*
 * "1-3,5"という文字列に変える
 */
function arr2str(arr) {
    var str = '';
    var len = null;
    var cnt = 0;

    arr.sort(function(a, b) { return a - b; });

    for (var n = 0; n < arr.length; n++) {
        if (arr[n] + 1 == arr[n + 1]) {
            if (len == null) {
                ren = arr[n];
            }
            ++cnt;
            continue;
        }
        if (str) {
            str += ',';
        }
        if (len != null) {
            str += len + ((cnt == 1) ? ',' : '-');
            len = null;
            cnt = 0;
        }
        str += arr[n];
    }
    return str;
}

/*
 * "1-3,5"を1,2,3,5の配列に変える
 */
function str2arr(str) {
    var tmp = str.split(",");
    arr = Array();

    for (var n = 0; n < tmp.length; n++) {
        if (tmp[n].indexOf("-", 0) != -1) {
            rng = tmp[n].split("-");
            if (rng.length != 2) {
                return false;
            }
            if (rng[0] == '' || rng[1] == '') {
                return false;
            }
            st = Number(rng[0]);
            ed = Number(rng[1]);
            for (var i = st; i <= ed; i++) {
                arr.push(i);
            }
        } else {
            if (tmp[n] == '') {
                return false;
            }
            arr.push(Number(tmp[n]));
        }
    }
    arr = uniqArray(arr);
    return arr;
}
```
1分でアニメgifを活用する

今12月18日ですが、<a href="http://qiita.com/advent-calendar/2013/one-minute">1分で実現できる有用な技術 Advent Calendar 2013 - Qiita [キータ]</a>の17日目の記事です。


アップロードが遅れて大変もうしわけございませんでした！！
![すまそ](https://qiita-image-store.s3.amazonaws.com/0/16389/d6cd4257-72aa-d3e9-204a-527f66a3e110.gif)


近年ますますアニメgifの需要が高まっていると思います。
たとえばpull requestを送る時に、<a href="http://tiqav.com/">tiqav.com</a>などで画像を探して投稿する人も多いでしょう。
せっかくmacbookにはカメラがついているのだから、もっと気軽にアニメgifを作ってpull requestに使ったりしたらどうでしょうか？


![1387327589.gif](https://qiita-image-store.s3.amazonaws.com/0/16389/d05da7c0-4f75-59b6-1fdb-e428cd00857a.gif)


1分でできます。
![よろしく](http://gyazo.com/24404b44789fda4921720f45faba928c.gif)


# gifsnap

[gifsnap](https://gist.github.com/shokai/6821474)というものを作りました。
ただのshellscriptなので適当にパスの通っている場所に置きます。

    % wget https://gist.github.com/shokai/6821474/raw/gifsnap
    % cp gifsnap /usr/bin/

imagemagickとimagesnapをHomebrewでインストールします。imagesnapはMacのiSightを使って撮影するアプリです。

    % brew install imagemagick imagesnap

## 撮影

    % gifsnap hoge.gif

アニメgifができます。

![できた](https://qiita-image-store.s3.amazonaws.com/0/16389/c7487a98-e6da-ecd3-9d28-d686e354c685.gif)


# gifのアップロード先
qiitaの投稿には画像を添付できますが、githubのpull requestでは画像をどこかにアップロードして、そのURLをimgタグで貼り付ける必要があります。

最近アニメgifに対応した[Gyazo](https://gyazo.com/ja)のAPIを使うと簡単です。
gyazoのrubygemに付属している`gyazo`というコマンドに、`-raw`オプションを付けるとアニメgifをそのままアップロードできます。

    % gem install gyazo
    % gyazo -raw hoge.gif
    http://gyazo.com/420166414dc6ee6fe4e48de75d5a84f6

アップロードできました http://gyazo.com/420166414dc6ee6fe4e48de75d5a84f6


# 次
![りんご](https://qiita-image-store.s3.amazonaws.com/0/16389/9d4de362-bcb4-584f-c2de-4b77c5e78313.gif)
次の人というか今日の人は @toriimiyukki です


以上Gyazo GIFのステマでした。
【CSS】floatを使い、2つの箱(divとか)を横並べにする方法

こんにちは。

今回は少しCSSを。
どうもfloatで回り込んで画像を入れたり、
HPみたく、main_contentsやsub_menuを作るさい
見栄え上きれいにいかないことがあるので、メモ。

```css
overflow: hidden;
```

どうやらこの ``` overflow : hidden ```　を
floatさせたい1つうえの属性に付与してあげると、型崩れが抑えられる模様。

ちなみに僕は

```html
<div class="contents">
  <div class="sub_menu">
  </div>
  <div class="main_menu">
  </div>
</div>

```
```css

.contents{
  width:950px;
  overflow: hidden; 
}

.sub_menu{
  float : left ;
  width: 300px ;
}

.main_menu{
  float : left ;
  width : 600px ;
}
```
で横並べにして、全体のサイズ指定とmargin,paddingで幅を調整していくんですが
これは綺麗なやりかたなのでしょうか。

なんか float:left を2回って上手くない気がします。

それでは、これからもよろしくお願いいたします。
Eclipseのフォーマッタをコマンドラインで実施


例) カレントディレクトリ配下の*.javaに対して適用

```sh
-> % /Applications/eclipse/eclipse -nosplash -application org.eclipse.jdt.core.JavaCodeFormatter -verbose -config xxxxxxx/.settings/org.eclipse.jdt.core.prefs `find $(pwd) -name '*.java'`
```
フォーマット対象ファイルはフルパスじゃないとダメみたいです。
あと、対象外ファイルは`grep -v`とかで除けるかと。

## 使用方法
```
Usage: eclipse -application org.eclipse.jdt.core.JavaCodeFormatter [ OPTIONS ] -config <configFile> <files>

   <files>   Java source files and/or directories to format.
             Only files ending with .java will be formatted in the given directory.
   -config <configFile> Use the formatting style from the specified properties file.
                        Refer to the help documentation to find out how to generate this file.

 OPTIONS:

   -help                Display this message.
   -quiet               Only print error messages.
   -verbose             Be verbose about the formatting job.
```
# 参考
* [Can the Eclipse Java formatter be used stand-alone - Stack Overflow](http://stackoverflow.com/questions/384101/can-the-eclipse-java-formatter-be-used-stand-alone)
* [Using Eclipse's source code formatter from the command line](http://blogs.operationaldynamics.com/andrew/software/java-gnome/eclipse-code-format-from-command-line)
Delphiでドラッグ＆ドロップを受け付ける方法

テスト投稿を兼ねて。

1.usesの追加

```
uses
  ShellAPI, ActnList;
```

2.FormCreateなどで受け付け

```
procedure Sample.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle, true);
end;
```

3.ドラッグ＆ドロップ用メソッドの実装

```
procedure Sample.WMDropFiles(var msg: TWMDROPFILES);
var
  DropCount: Integer;
  DropFile: Integer;
  pFileName: PChar;
begin
  try
    DropCount := DragQueryFile(msg.Drop, $ffffffff, nil, 0);
    if DropCount  <> 1 then begin
      MessageDlg('ファイルは1つずつドラッグしてください。', mtWarning, [mbOk], 0);
      end;
    end;
    //ドロップされたファイル名のサイズを取得
    DropFile:= DragQueryFile(msg.Drop, 0, nil, 0) + 1;
    //pFilenameに上で得たサイズ分のメモリを確保
    pFileName := AllocMem(DropFile);
    try
      //pFilenameにファイル名を取得
      DragQueryFile(msg.Drop, 0, pFilename, DropFile);
      //後はファイル名を使って読み込むなりなんなり
      LoadCSV(pFileName);
    finally
      //メモリ開放
      FreeMem(pFilename);
    end;
  finally
    //処理の終了をOSに通知
    DragFinish(msg.Drop);
  end;
end;
```

上記はファイルを1つだけドラッグ＆ドロップする場合だが、

```
for idx := 0 to DropCount-1 do begin
  DropFile:= DragQueryFile(msg.Drop, idx, nil, 0) + 1;
  DragQueryFile(msg.Drop, idx, pFilename, DropFile);
end;
```

とすれば複数ファイルも受け付けられる。
JSHintでfor文内の無名関数を使った時のエラーを回避


イベントのコールバックで引数渡すときなどどうしても必要な場合があるかなと思うので、
JSHintの設定から回避する。

SublimeLinterのエラー回避の説明になるけど、
JSHint本体でも同じオプションが使えるはず。

![スクリーンショット_2013-12-18_13_18_10-4.png](https://qiita-image-store.s3.amazonaws.com/0/5472/324d2a68-9560-84cb-fe60-c6ecf12ee265.png "スクリーンショット_2013-12-18_13_18_10-4.png")

jshint_optionsの欄に
“boss”: true, を追記

![__Library_Application_Support_Sublime_Text_2_Packages_SublimeLinter_SublimeLinter_sublime-settings-4.png](https://qiita-image-store.s3.amazonaws.com/0/5472/36b26427-6ef0-8375-0dc2-f2e3e49dbebc.png "__Library_Application_Support_Sublime_Text_2_Packages_SublimeLinter_SublimeLinter_sublime-settings-4.png")


bossの説明については下記参照。

// ----------------- 参考URL
http://www.htmlhifive.com/conts/web/view/library/JSLint_JSHint
ユーザーの sudo 権限の剥奪

てっきり ` /etc/sudoers ` ファイルを編集すればいいのかと考えていたが...

<pre>
vigr 
vigr -s
</pre>

上記のコマンドで sudo のところにあるユーザーを削除(= Unixのsudoグループからユーザーを外す)でOK.
※ 二つともしないといけない

gpasswd コマンドか何か他の方法もありそう...
DJangoメモ：はじめから（URLConfの単純化と分割）


**これまでは一つのURLConfで全てのアプリケーションの設定をおこなってきたが、本当はアプリケーションごとに設定したほうが分かりやすくなる。**
なので、次のようにpollsアプリ用のURLConfを改めて作成する。

###### polls/urls.py（新規） ######

```py
# polls/urls.py
from django.conf.urls import patterns, include, url

urlpatterns = patterns('polls.views',
    url(r'^$', 'index'),
    url(r'^(?P<poll_id>\d+)/$', 'detail'),
    url(r'^(?P<poll_id>\d+)/results/$', 'results'),
    url(r'^(?P<poll_id>\d+)/vote/$', 'vote')
)
```

これまではpatternsの一つめに入っている文字列は空だったが、ここでさりげなくpolls.viewsが追加されている。こうすることで、今まではいちいちpolls.views.detailとかpolls.views.resultsなどと書いていたのをスマートにできる。

そして、以下のような感じでプロジェクト本体のURLConfにpollsのそれを紐づける。

###### mysite/urls.py ######

```py
# mysite/urls.py
from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', include(admin.site.urls))
)
```

これでOK。

## 次からはチュートリアル４、最後の項目に入ります ##
[objective-c][unit test] class method をmockする

#概要
Unit test書いてる時、util classとか結構使うので、そして問題。 class methodをどうやってmockするの???
Kiwiインスタンスに対してしかmockできないため、別の方法考えないと行けない。

#自分が思いついた簡単なやり方
 そのclass methodを使うところを一つのmethodにラップし、test projectの方にテストしたいclassのcategroyを作って、そのmethodを上書きすればいい。

#サンプル
例えばIn app purchaseアイテム購入する前にネットワーク繋いでるかの検証が必要で、ネットワークが繋いでないときのテストが書きたい。

### MyTarget
```objc:InAppPurchaseManager.h
- (void)purchaseProductWithProduct:(SKProduct *)product success:(void (^)(SKPaymentTransaction *transaction))success failure:(void (^)(NSError *error))failure {
     //ネットワークonline判定
    if(![self p_isNetworkOnline]){
        failure([NetworkError networkOfflineError]);
        return;
    }
    _purchaseSuccess = success;
    _purchaseFailure = failure;
 
   // item購入
    SKPayment *payment = [SKPayment paymentWithProduct:product];
    [_paymentQueue addPayment:payment];
}

// ネットワーク検証をprivate methodに
-(BOOL)p_isNetworkOnline{
    return [NetworkUtil networkOnline];
}
```

### MyTestTarget
InAppPurchaseManagerクラスのcategory作成

```objc:InAppPurchaseManager+Injection.h
//mock networkStatus設定
- (void)setNetworkStatus:(BOOL)status;
```

```objc:InAppPurchaseManager+Injection.m
- (void)setNetworkStatus:(BOOL)status {
  // category内にインスタンス変数使えないため
    objc_setAssociatedObject(self, @"networkStatus",[NSNumber numberWithBool:status],OBJC_ASSOCIATION_ASSIGN);
}

//private methodを上書き
-(BOOL)p_isNetworkOnline{
    id status = objc_getAssociatedObject(self, @"networkStatus");
    return [status boolValue];
}
```
テストコード:

```objc:InAppPurchaseManagerSpec.m
context(@"when device offline", ^{
                beforeEach(^{
                    // offlineの状態を設定
                    [_inAppPurchaseManager setNetworkStatus:NO];
                    [_inAppPurchaseManager purchaseProductWithProduct:_validProduct success:emptySuccessBlock failure:emptyFailureBlock];
                });
                it(@"should never call success block", ^{
                    [[theValue(_successCalled) should] equal:theValue(NO)];
                });

                it(@"should call failure block", ^{
                    [[theValue(_failureCalled) should] equal:theValue(YES)];
                });
                it(@"should return offline error", ^{
                    [[_error shouldNot] beNil];
                    [[expectFutureValue(_error.domain) should] equal:NetworkErrorDomain];
                    [[expectFutureValue(theValue(_error.code)) should] equal:theValue(NetworkErrorOffline)];
                });
            });
```
注：テストフレームワークはkiwiを使ってます

#h2　追記
OCMock class methodのmockはサポートしているらしい。検証次第追記します