OmniAICreator/Qiita-1.07M huggingface dataset:
DXFことはじめ #2


　[以前の投稿](http://qiita.com/kazhida@github/items/8a5fa68e8fa135614d5d)で、DXFはコンス・セルの集まりであることと、もっとも大きなデータのくくりがセクションであることを説明しました。

　ここでは、DXFの先頭にあるセクション（HEADERセクション）について説明します。

　DXFの2行で一つのペアになっていて、それをコンス・セルと呼ぶ（他の呼び方もあるけど、筆者はこれが好み）ことを踏まえて、ここでは、

```
 0 
SECTION
 2 
HEADER
```

を、

```Lisp
(  0 . SECTION)
(  2 . HEADER)
```

と表記して説明します。

### HEADERセクション

　DXFのはじめにあるセクションです。中身は、こんな感じになっています。

```Lisp
(  0 . SECTION)
(  2 . HEADER)
(  9 . $ACADVER)
(  1 . AC1015)
(  9 . $ACADMAINTVER)
( 70 .    18)
(  9 . $DWGCODEPAGE)
(  3 . ANSI_932)
(  9 . $INSBASE)
( 10 . 0.0)
( 20 . 0.0)
( 30 . 0.0)
  ;
(  0 . ENDSEC)
```

　はじめの2つはセクションの開始のしるしとセクションの名前なので、省いて見てみると、

```Lisp
(  9 . $ACADVER)
(  1 . AC1015)
(  9 . $ACADMAINTVER)
( 70 .    18)
(  9 . $DWGCODEPAGE)
(  3 . ANSI_932)
(  9 . $INSBASE)
( 10 . 0.0)
( 20 . 0.0)
( 30 . 0.0)
  ;
(  0 . ENDSEC)
```

一回おきに、グループコードが9のコンスセルになっているようです。そして、その値は$から始まる識別子みたいですね。ってゆうか、そういうことなんですけど。

　HEADERセクションは、基本的には、2つのコンスセルが一組のkey-valueペアになっています。おそらく、これはAutoCAD内で使っている設定を吐き出したものと考えて間違いないでしょう。こんな感じ、

```Lisp
((  9 . $ACADVER)      . (  1 . AC1015))
((  9 . $ACADMAINTVER) . ( 70 .    18))
((  9 . $DWGCODEPAGE)  . (  3 . ANSI_932))
((  9 . $INSBASE)      . (( 10 . 0.0) ( 20 . 0.0) ( 30 . 0.0))
  :
(  0 . ENDSEC)
```

で、考えると、わかりやすいと思います。

　さりげなく流しましたが、上記の4つめのペアは、2つのコンスセルの組ではなく10, 20, 30のグループコードのセルをまとめて扱っています。これらのグループコードは、3つで一つの3次元座標あるいは3次元ベクトルを表します。

　というわけで、上記の部分を口語訳すると、使用したAutoCADのバージョン($ACADVER)は、文字列表記で”AC1015″、数値で表す($ACADMAINTVER)と、バージョン18、使用している文字列エンコーディング($DWGCODEPAGE)はANSI_932、挿入基点($INSBASE)が座標(0, 0, 0)であることを意味しています。

　DXFを扱う用途によって違いはありますが、実際にはほとんどが必要のないデータです。リファレンス・マニュアルから自分が必要なデータを拾い出し、それ以外は、無視してしまいましょう(^-^)。
任意のメンバ関数でrange-based-forをする



巷ではSwiftが話題ですが、C++の記事を投稿するのちょっと気がひけます...

さて、本題。
C++11から入ったrange-based-forは従来のイテレータを自分で回すのに
くらべforの中身、さらに参照外しをする必要がなくなったため
非常に便利になりました。
また、自作のクラスに対してもbegin,endを実装していれば
range-based-forを使うことができます。
しかし、begin,endしか対応していないのでたとえば
2通りのまわしたいものがあった時一方を犠牲にしなくてはなりません。
それはふべんだなーってことで、任意の名前のイテレータの開始と
終わりを示す関数を指定してrange-based-forを使えるようなアダプタを書いてみました。
といってもこれだとメンバ関数を指定する必要があるので、
完全にrange-based-forの恩恵を受けられるわけではありませんが...

ということでコード。
このサンプルではstd::vectorを降順、昇順でまわしています。

```cpp
#include<iostream>
#include<vector>

template<typename T, typename U>
class Adopter{
    public:

        Adopter(T& obj, U (T::*obj_begin)(),U (T::*obj_end)()):
            obj(obj),
            obj_begin(obj_begin),
            obj_end(obj_end){}


        auto begin(){
            return (obj.*obj_begin)();  
        }

        auto end(){
            return (obj.*obj_end)();  
        }

    private:
        T& obj;
        U (T::*obj_begin)();
        U (T::*obj_end)();

};

template<typename T, typename U>
auto make_adopter(T& obj, U (T::*begin)(),U (T::*end)()){
    return Adopter<T,U>(obj,begin,end);
}

int main(){

    std::vector<int> Array = {1,2,3,4,5};

    for(auto elem : make_adopter(Array, &decltype(Array)::rbegin, &decltype(Array)::rend)){
        std::cout << elem << std::endl; 
    }

    for(auto elem : make_adopter(Array, &decltype(Array)::begin, &decltype(Array)::end)){
        std::cout << elem << std::endl; 
    }

    return 0;
}
```

していることとしてはbegin,endを提供する本体はAdopterクラス、
それに渡す型を推論し決定するためのmake_adopter関数で構成されています。
型はメンバ関数ポインタを使っているので非常に気持ち悪いことになっていますが、
それを受け取ってbegin,endメンバに移譲して使っているみたいな感じです。
また、型をいちいち書き下すのは面倒なのでC++14から入った戻り値の推論機能で
推論させています。
Swiftで斬新な難読化をしてみた。


var ( Ծ‿‿Ծ )="フフフッ"
println(( Ծ‿‿Ծ ))

フフフッ・・・これで分かるまい・・・・

変数名がUnicodeが使えるっぽいのでやってみましたw
新しい言語についテンション上がってやってしまいました。。。


ごめんなさいw
FuelPHPのクエリビルダのメモまとめ


複雑なクエリを書こうとするほどDB::query()に頼りがちになる罠。
仕事中に書いていたクエリビルダの個人的なメモをまとめます。

## Select
as_array()は好みの問題。個人的には便利なので使用しています。

```php
// 基本形
DB::select()->from('hoge')->execute()->as_array();

// join
DB::select()->from('hoge')
->join('moge','left')->on('hoge.moge_id','=','moge.id')
->execute()->as_array();

// order by
DB::select()->from('hoge')
->order_by('hoge.pub_date','desc')
->execute()->as_array();

// group_by
DB::select()->from('hoge')->group_by('hoge.moge_id')
->execute()->as_array();

// sumを取りたい
DB::select(DB::expr('sum(hoge.visitor)'))->from('hoge')->execute()->as_array();
```

### DB::expr()

select()内に文字を書くと、例えば`DB::select('hoge')->...`はselect hoge from ~ではなく、select 'hoge' from ~の形に変換されます。
ここに素のままで`DB::select('sum(hoge)')->...`と記述してしまうと、select 'sum(hoge)' from ~になってしまい、「sum(hoge)なんてカラムはないよ」、というエラーが発生してしまいます。
この厄介なクォーテーションを付けさせないのがexpr()関数です。

公式リファレンスはこちら：[FuelPHP公式リファレンス](http://fuelphp.jp/docs/1.7/classes/database/db.html)
見つけねえよこんなの。

## Insert

```php
// 基本形
$res=DB::insert('hoge')->set(array('name'=>'仙臺四郎','age'=>28))->execute();

/*
 * $res[0]=insertしたレコードのID
 */
```

insert()の戻り値マジ便利。
【私的メモ】background実行

リモートの計算機にジョブを流したけど、ssh切りたい！
でも切ったらジョブ止まっちゃう！
大丈夫！バックグラウンド実行を使えばsshが切れても後ろで動いていてくれるんです！

ところで、このへんのコマンドの正確な動作原理は非常に面倒くさい。
シグナルハンドラとか言い始めたら正直やってらんない。
とりあえずここでは、生まれて初めてUnix/Linux系OSを触る迷える子羊向けの「なんかよくわからんけどとりあえずこうしとけばいいのね」情報の集まりを作っておく。

#nohup + コマンド名の後ろに&

とりあえずコマンド名の後ろに&を付けとけばバックグラウンドに行く。

```
$ very_long_job &
```

`nohup`もつけとくとより安心。

```
$ nohup very_long_job &
```

#ジョブをバックグラウンドに移す

いっけねうっかりbackgroundに移さずに長いジョブ流しちゃったぞ☆

```
$ very_long_job
```

大丈夫！そんなときは`Ctrl + z`で一時中断からの

```
$ bg
```

コマンドだ！
Swiftで書いたクラスをNSStringFromClassで見てみると…

```swift
import UIKit
class MyView : UIView {
}
```

というクラスを作ってObjective-Cのコードから見てみると

```objc
NSLog(@"name = %@", NSStringFromClass([MyView class]));
```

```console
_TtC11SwiftSample14MyView
```

というクラス名になっていた。(`SwiftSample`はプロジェクト名)

Cellの`identifier`に`NSStringFromClass`をした値を使っていたから`Swift`に書き換えたらうまく動かなくなってしまった…。
Eclipse Android SDK Manager が起動できない時 (Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3550 or swt-pi-gtk in swt.library.path, java.library.path or the jar file)

## error 内容
<pre>
Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3550 or swt-pi-gtk in swt.library.path, java.library.path or the jar file
</pre>

## 解決策
<pre>
$ sudo apt-get install ia32-libs
</pre>

## 回避策
sdk tools コマンドで sdk をアップデート
<pre>$ android update sdk --no-ui</pre>
curlメモ（自分用）

#基本構文
```curl [オプション] url```

#例
```
curl -s -f -L https://raw2.github.com/concrete5/concrete5/master/cli/install-concrete5.php -O
```

#オプション
-s サイレントモード
-f failした時でも、サイレント
-L リダイレクト先をダウンロードする
-O URLのファイル名で保存する

#参考
CurlでGithubを扱う10の方法 | しのぶら!!!
http://shinobra.com/2012/04/sawanoboly/curl_on_github
Delphi PopupMenu で 区切り線を出したい

小ネタなんですが、というか、[ヘルプにも書いてある](http://docwiki.embarcadero.com/Libraries/XE2/ja/Vcl.Menus.TMenuItem.Caption)ことではあるんですが。微妙にぐぐっても出てこないので・・（せめてMenuItemのヘルプのトップに書いて欲しい・・）。

![Popup.png](https://qiita-image-store.s3.amazonaws.com/0/33684/47cff04a-ab48-523f-c0d9-9c558c8fe403.png)


MenuItemのCaptionにハイフン（-）を一文字入れましょう！
FireMonkeyの場合はTextプロパティです。


以上、Qiita内のDelphiタグ量を増やしてやろうという画策でした。
tap 面白いよ tap

# 既出ネタだけどがんばる。

> [tap かわいいよ tap](http://d.hatena.ne.jp/rubikitch/20080502/tap)

> [[Qiita]tap](
http://qiita.com/annyamonnya/items/04078bc38c57059e5dd2)

etc..


# Object # tap
Objectクラスに定義されているので、どのクラス（いかなるオブジェクト）でも使用できる！はず...。
[リファレンス](https://docs.ruby-lang.org/ja/latest/method/Object/i/tap.html)

# キホン
`{ }`ブロック内で処理を実行し、処理結果に関わらずレシーバ自身を返すメソッドです。
以下3点が解れば大丈夫かと。

```ruby:①空処理
self.tap{} 
# => self
```

```ruby:②内部処理サンプル
self.tap{ puts "hoge" } 
# => self
# `hoge`が標準出力される
```

```ruby:③戻り値が欲しい時
self.tap{ break :hoge } 
# => :hoge
```

# 何に使うの？
`{ }`ブロック内の処理結果に関わらず、レシーバ自身を返すので
デバッグ等の処理を行いながらメソッドチェーンできる。

```ruby:ruby
( 1 .. 5 )
  .tap{|obj| puts obj.class}
  .to_a.tap{|obj| puts obj.class}
#=> [1, 2, 3, 4, 5]
```

```shell-session:出力結果
Range
Array
```

# デバッグ用
途中途中で出力するのも面白い

```ruby
object
  .tap{|obj| p obj }
  .method1.tap{|obj| p obj }
  .method2.tap{|obj| p obj }
```

> これに関しては tapp っていうのを見つけた。
> [ソースコード＠Github](https://github.com/esminc/tapp)
> [つかいかた＠Fc2](http://namakesugi.blog42.fc2.com/blog-entry-108.html)



# これはひどい

```ruby:１行FizzBuzz
1.upto( 100 ){| num |
  text = ''
  num
    .tap{|n| text += 'fizz' if ( n%3==0 )}
    .tap{|n| text += 'buzz' if ( n%5==0 )}
    .tap{|n| text += n.to_s if text.empty? }
    .tap{ puts text }
}
```
> 考え方は一緒だった・・・。
> [[Qiita]TapでFizzBuzz](http://qiita.com/merborne/items/8aa8df7d80d863eb36c7 "Qiita")

# 個人的な使い方とか
気が向いたら追加する予定……

## その1
```ruby
s = 'a'
s.tap{|t| t.sub!( 'a', 'b' )}
# => 'b'
```

当然だけど、変数`s`の中身は`'b'`に書き変わるよ。
`sub!`は破壊的メソッドだからね！←

## その2
```ruby
n = rand( 10 )
1 / n.tap{|t| break 1 if t.zero? }
```
`0`で除算するとモチロン`ZeroDivisionError`が発生するよ！
エラーを防ぐために`tap`で無理矢理`0`を`1`に書き換えちゃえ←


# 最後に一言

この記事、何番煎じ？^q^
SwiftでUIViewController


Swiftを早速いじってみました。感想としてはすっごくRubyMotionみたいだな...という感じ。リファレンスひきながらでも言語仕様はどこかでみたことある系なので数日あれば慣れるような気がします。

ObjectiveCは基本なところがめんどくさいんだよね...と思ってRubyMotionを好んで使っている自分にはなかなか魅力的です。

## ViewController.swift　

StoryboardにUILableとUIButtonを貼り付けて、アシスタントエディタをつなげたら下記のようなコードになりました。

接続に@IBOutlet、アクションには@IBAction func....と書くのですね。sender:id が sender : AnyObjectになっているくらいですかね。

![スクリーンショット_2014-10-23_18_37_49.jpg](https://qiita-image-store.s3.amazonaws.com/0/14768/8c2efee9-6d01-49a3-acad-fb53d723cfde.jpeg "スクリーンショット_2014-10-23_18_37_49.jpg")

UIButtonを押すたびに1.2.3.4とカウントアップしていくだけのコードです。

```swift:ViewController.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    var countNum = 1
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func actionButton(sender: AnyObject) {
        label.text = String(countNum)
        countNum++
    }

}
```

という事でここまでは簡単です。



##追記

意外にストックされているので、最新のXcode6.1のコードに書き換えました(2014/10/23)
URL毎にエラードキュメントを設定する

サイトで設定しているエラードキュメントとは別に、URL毎にエラードキュメントを設定する方法。
バックエンドの障害発生時にapi特有のエラー内容を記述したxmlを返したい場合に利用中。

```
ErrorDocument 503 /errordocument/error_503.html
<LocationMatch "/api/aaa">
    ErrorDocument 503 /errordocuments/error_503_aaa.xml
</LocationMatch>
```
SwiftからObjective-Cのライブラリを使ってみる


よさ気なSwiftをこれから使ってみたいけど、今あるライブラリとかも使えないと困るってことで試してみました。

詳しくはAppleのドキュメントに書いてあります。
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/Migration.html


とりあえず試しにMRProgressをCocoaPodsでインストールして使います。

``` Podfile
platform :ios, '7.0'

pod 'MRProgress'
```

次にSwiftからObjective-Cのコードを呼び出すたびに、Objective-CのヘッダーをXCodeに指定します。
複数の指定とか面倒なので、objc-header.hというファイルを作り、その中で利用するライブラリのヘッダーファイルをimportします。

``` objc-headers.h
#import "MRProgress.h"
```

次にXcodeのターゲットアプリケーションのBuild Settingsで"Objective-C Bridging Header"に先ほどのobjc-header.hを指定してやります。

これでSwiftのコードから使用するライブラリを呼ぶことが出来ます。
MRProgressならこんな感じです。

``` ViewController.swift
MRProgressOverlayView.showOverlayAddedTo(self.view, animated: true);
```

![スクリーンショット 2014-06-03 13.40.43.png](https://qiita-image-store.s3.amazonaws.com/0/8932/ad3999c7-ae52-afe0-9b03-028884b04e4c.png "スクリーンショット 2014-06-03 13.40.43.png")

ちゃんとプログレスが出てますね！
ドキュメントよく読まずに試してたので、やりかた間違ってるかもしれないのであしからず。
vagrant + virtualboxで作ったRuby環境を他のPCに環境移行する方法

環境
移行元：iMac os marvericks,vagrant最新,virtualbox(centOS64bit,ruby,sqlite,rails)
移行先：MacbookAir marvericks,vagrant,virtualbox

今回はデスクトップで環境構築した内容をそのままノートPCに移行しました。
今までは外出先ではObjective-cしか弄ってなかったんですが、Rubyも弄りたくなりまして…w

参考にしたのはコチラ
http://qiita.com/kon_yu/items/ac7fb2c5af1cc0844225

移行元と移行先でやることを分けてメモっておきます。

<h2>移行元でやること</h2>
<h3>○package.boxのエクスポート</h3>
# vagrant package
しばし、待たれよ…w
その間に移行先にvagrantやvirtualboxインストールしちゃってもいいかもです。
最後の一文にpackage.boxの保存先が書かれていますよ♪
僕の場合は…/Users/owner/localdev/package.box　ってところでした。

localdevフォルダにvagrantfileとpackage.boxが入っている状態です。

<h3>○移行先へファイルを転送</h3>
AirDropでさくっと送信して…、移行元での作業は終了です。
localdevフォルダごと移行先PCに送っちゃいましょう、vagrantfileも一緒に送った方が後々に便利です。

<h2>移行先でやること</h2>
<h3>○エクスポートしたファイルを任意のディレクトリに移動</h3>
AirDropでファイル転送するとダウロードフォルダに入るので、任意のディレクトリに移動させましょう。
僕はユーザー直下に置きました。初心者なのでわかりやすいように移行元と全く同じところに…w

<h3>○vagrantのインストール</h3>
http://www.vagrantup.com/
ココからダウンロードするなりよ。

<h3>○virtualboxのインストール</h3>
https://www.virtualbox.org/
ココからダウンロードするなりよ。

<h3>○エクスポートしたboxをvagrantに追加</h3>
# vagrant box add BOX_NAME ./package.box
※BOX_NAMEには好きな名前を付けるよろし。　僕はlocaldevにしてあります。
念のためboxがあるか確認しましょう。
# vagrant box list
localdev (virtualbox)って表示されます。（僕のボックス名はlocaldevです。）

<h3>○vagrantfileを編集</h3>
先ほど任意の場所に追加したフォルダ（AirDropで転送したフォルダ）に移動します。
僕の場合はユーザ直下なので、そのまま下のコマンドを打ちます。
# cd localdev
そして、vagrantfileを編集します。
# vi vagrantfile
編集モードに切り替えるのをお忘れなく…。しばらく格闘した経験あり…。何度も言いますがわたくしは初心者です。

そしてvagrantfileの下の部分の「BOX_NAME」を自分の設定したbox名に変更して保存します。
#config.vm.box = "BOX_NAME"
僕の場合は　config.vm.box = "localdev" です。

これで移行元PCにも同じ環境が構築されたはずです！！

# vagrant up
# vagrant ssh

完了。

追記：
vagrant内のディレクトリをmacのFinderで表示する為のあれこれはコチラに書いてあります。
http://qiita.com/htk_jp/items/ec140f2492cab8e959d9

一度vagrantを落とすとマウントも解除されちゃうので、都度やる必要があります。
これどうにかならんかな〜。わかる人いたらお願いしますww
自己証明書の作成


##手順概要
1. 秘密鍵作成
2. CSR作成
3. サーバ証明書作成

<実行コマンド サマリー>

```bash:command
$ openssl genrsa -des3 -rand file1:file2:file3 2048 > server.key
$ openssl rsa -in server.key -out server.key.nopass
```

```bash:command
$ openssl req -new -key server.key -out server.csr -sha1
```

```bash:command
$ openssl x509 -in server.csr -out server.crt -req -signkey server.key.nopass -days 3650
```

##手順詳細
###1. 秘密鍵作成

```bash:command
$ openssl genrsa -des3 -rand file1:file2:file3 2048 > server.key
```
```bash:結果
0 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
.............................+++
.......................................................+++
e is 65537 (0x10001)
Enter pass phrase:                    #←秘密鍵のパスワード（すぐ後で解除するので一時的なもの）
Verifying - Enter pass phrase:        #←再入力
```

<秘密鍵の作成結果>

```bash:command
$ ls -l
```
```bash:秘密鍵の作成結果
total 4
-rw-r--r-- 1 root root 1743 Nov  5 12:24 server.key
```

※このまま秘密鍵を利用すると、Apacheを再起動する度にPWを聞かれるため、あらかじめ秘密鍵のパスワードを解除しておく。

```bash:command
$ openssl rsa -in server.key -out server.key.nopass
Enter pass phrase for server.key:     #←先ほど入力した秘密鍵のパスワード
writing RSA key
```


###2. CSR作成

```bash:command
$ openssl req -new -key server.key -out server.csr -sha1
```

(実行結果参考)

```bash:結果
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
（以下対話式で証明書のサブジェクトの情報を入力）
Country Name (2 letter code) [XX]:                        ←（国名(JP)）
State or Province Name (full name) []:                    ←（都道府県(Tokyoなど)）
Locality Name (eg, city) [Default City]:                  ←（所在地(～区など)）
Organization Name (eg, company) [Default Company Ltd]:    ←（会社名）
Organizational Unit Name (eg, section) []:                ←（組織名）
Common Name (eg, your name or your server's hostname) []: ←（コモンネーム(ドメイン名)）
Email Address []:                                         ←（Emailアドレス(空欄でもOK)）

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:                                  ←空欄Enter
An optional company name []:                              ←   〃
```

(CSR作成完了後)

```bash:command
$ ls -l

total 12
-rw-r--r-- 1 root root 1041 Nov  5 14:34 server.csr
-rw-r--r-- 1 root root 1743 Nov  5 12:24 server.key
-rw-r--r-- 1 root root 1675 Nov  5 14:26 server.key.nopass
```

###3. サーバ証明書作成

```bash:command
$ openssl x509 -in server.csr -out server.crt -req -signkey server.key.nopass -days 3650
Signature ok
subject=/C=JP/ST=Tokyo/L=xxxxxxx/O=xxxxxxxxxxxxxx/OU=xxxxxxxxxxxx/CN=xxx.xxx.jp
Getting Private key
```

```bash:command
$ ls -l

total 16
-rw-r--r-- 1 root root 1281 Nov  5 14:37 server.crt
-rw-r--r-- 1 root root 1041 Nov  5 14:34 server.csr
-rw-r--r-- 1 root root 1743 Nov  5 12:24 server.key
-rw-r--r-- 1 root root 1675 Nov  5 14:26 server.key.nopass
```
レンダリングに関するブラウザ比較［簡素なDOMのappendChild］

##はじめに
本筋としては[「setAttributeは遅い」](http://azumaxlife.smile-systems.com/archives/992)の内容について細かい調査していたのですが、
余韻でつけたappendChildで面白い結果が出たので話が膨らめばと。

##単純なものは速く　vs　レンダリングまでの速度を速く

手元にある下記のブラウザで試しました。

* Chrome 37.0.2017.2 dev-m
* IE 11.0.9　（画像のOtherです）
* Firefox 24.5.0

テストケース：http://jsperf.com/set-attribute
手元で実行したものの特徴としては、

* Chromeはattribute処理まではそこまで速くないが、appendChildまでいれると圧倒的
* 他ブラウザは単純な処理は速いが、レンダリングはものすごく遅い

となりました。数字は実行回数なので、大きいほど速いということです。
![20140603-130552.jpg](https://qiita-image-store.s3.amazonaws.com/0/44982/1053036e-d405-cb02-cc4f-64728635ad02.jpeg)

##感想
他のレンダリング方法（innerHTMLなど）を試していないので、まったくダメかはわからないですね。
余裕があれば試してみます。

そもそも、いくらリッチクライアントで開発できるからと言って、
動的にガチャガチャしすぎは悪いと思います。
Xcode 6 Betaを入れて、titaniumアプリがビルドできなくなった話


## 経緯
XCode 6 Beta出た！
Swift試すぞ！

って言って喜び勇んでXCode 6入れたら、titaniumで開発中のアプリがビルドできなくなった。


## 環境
* Mac OS X 10.9.3
* iOS SDKは7.1と8.0をインストール済み
* titaniumはcliで使っている

## 原因

titaniumが自動的に最新のiOS SDKを使おうとするのが原因でした。

## 解決方法
`titanium build`のオプションにiOS SDKのバージョン指定を足しました。
`-I`でiOS SDKのバージョン指定ができるらしいです。

```
$ titanium build -p ios -S 7.1 -C "iPhone Retina (4 inch)" -I 7.1
```

動いた。良かった。
Windows 7, 8 のログオフ・シャットダウンを無効化するOS設定

[Building Public Kiosk Workstations with Windows 7 and Windows8](http://blogs.technet.com/b/keithmayer/archive/2012/08/03/building-public-kiosk-stations-with-windows-7-and-windows8-itpro.aspx#.UugnG53n_PT) の設定項目に関する部分を簡単に翻訳（意訳）しました。ログオフの無効化・禁止といったキーワードでよく出てくる内容ですが、実態としては非表示と言ったほうが正しいのかもしれません（未検証）。

グループポリシーについては、[Group Policy Settings Reference](http://www.microsoft.com/en-us/download/details.aspx?id=25250) から他の Windows OS に該当するグループポリシーがあるかどうかを確認できます。Windows Vista でもおおむね変わらないみたいです。

ドメイン環境下の Windows PC の場合
--------------------------------

PC が Active Directory ドメインに所属している場合、Active Directory グループポリシーを利用して適切な設定をデプロイすることができます。ユーザーアカウント及びワークステーションのグループポリシーに下記の設定を含めるようにしてください。グループポリシーの作成後、`gpupdate /force` を実行して PC を再起動することでテストできます。

- ユーザーの構成
   - 管理用テンプレート
      - タスク バーと [スタート] メニュー
         - [スタート] メニューの電源ボタンを変更する (有効) - 「ロック」に設定（ログオフ動作を無効化するため）。
             - ※Vista の場合、「コンピュータが商用電源に接続されている場合の、［スタート］メニューの［電源ボタン］を押したときの動作の選択」のように若干エントリ構成が異なるようです。
         - [スタート] メニューの [ログオフ] を削除する (有効)
         - シャットダウン、再起動、スリープ、休止コマンドを削除してアクセスできないようにする (有効)
      - システム
         - Ctrl + Alt + Del オプション
            - コンピューターのロックを削除する (有効)
            - ログオフを削除する (有効)
- コンピューターの構成
   - 管理用テンプレート
      - システム
         - ログオン
             - ユーザーの簡易切り替えのエントリポイントを非表示にする (有効)

ドメイン環境下にない Windows PC の場合
--------------------------------

PC が Active Directory ドメインに所属していない場合、下記の変更を手動で各 PC に行う必要があります。ただし、OS イメージングツールや必須のユーザープロファイルを使用することで、これらの変更は自動化できます。

1. 各 PC に設定対象のユーザーでログインする。
2. Windows レジストリ エディター (REGEDIT.EXE) を起動してレジストリに下記の変更を行います（既にユーザーアカウントが非常に制限されている場合、一時的にローカルの管理者権限を与える必要があるかもしれないことをご承知ください）
    - HKEY_CURRENT_USER
        - SOFTWARE\Microsoft\Windows\CurrentVersion\Policies
            - Explorer
                - NoClose (REG_DWORD) = 1
                - NoLogoff (REG_DWORD) = 1
                - StartMenuLogOff (REG_DWORD) = 1
            - System
                - DisableLockWorkstation (REG_DWORD) = 1
    - HKEY_LOCAL_MACHINE
        - SOFTWARE\Microsoft\Windows\CurrentVersion\Policies
            - System
                - HideFastUserSwitching (REG_DWORD) = 1
3. **重要!** Windows 7 PC では、これらの変更を行った後、デフォルトのスタートメニューの「電源ボタン」設定を変更し、シャットダウンとログオフを無効にする必要があります。これを行うには、タスクバーで右クリックし、「プロパティ」を選択して「[スタート] メニュー」タブを開き、「電源ボタンの動作」を「ロック」に設定します。
4. シャットダウンと再スタート。再ログイン後、対話型のシャットダウン、ログオフ、ロック及びユーザーの切り替えはすべて無効化されているはずです。シャットダウンが必要な場合、コマンドプロンプトを起動して手動で「SHUTDOWN.EXE」を実行することで行えます。
CreateJS基礎1

#サンプル
CreateJSで描画してみる

[サンプル](http://jsdo.it/matsui_q/xfh8)

#名前空間用におまじない
CreateJSのクラスは、原則として名前空間createjsを頭につけないと
アクセスできないので、下記のおまじないを追加。

```js
<script>
var createjs = window;
</script>
<script src="ライブラリの読み込み"></script>
```

#描画

```js
var stage;
initialize();
function initialize() {
    var canvasElement = document.getElementById("myCanvas");
    stage = new Stage(canvasElement);
    //Shapeオブジェクトを作成
    var myShape = new Shape();
    //インスタンスを表示リストに追加
    stage.addChild(myShape);
    myShape.x = 50;
    myShape.y = 50;
    draw(myShape);
}
function draw(myShape){
    //Graphicsオブジェクトを作成
    var myGraphics = myShape.graphics;
    //線を描く
    myGraphics.beginStroke("#0000FF");
    //色を塗る
    myGraphics.beginFill("#00FFFF");
    //円を描く
    myGraphics.drawCircle(0, 0, 40);
    //Canvasの再描画
    stage.update();
}
```

| 書き方 | 内容 |
|:-----------|:------------|
| new Shape()     |  Shapeオブジェクトを作成 |
| 親オブジェクト.addChild(子オブジェクト）    |  インスタンスを表示リストに追加 |
| Shapeオブジェクト.graphics    | Graphicsオブジェクトを作成 |
| Graphics.beginStroke(color)     |  線を描く |
| Graphics.beginFill(color)     |  色を塗る |
| Graphics.drawCircle(x, y, radius) |  円を描く |
| Stage.update() |  Canvasの再描画 |


#ちょっと書き方を変えてみる。

Shape()コンストラクタとGraphicsクラスの描画メソッドについて、
呼び出し方を変えてみる。
ついでにメソッドをつなげて書いてみる。

```js
var stage;
initialize();
function initialize() {
	var canvasElement = document.getElementById("myCanvas");
	stage = new Stage(canvasElement);
	// var myShape = new Shape();
	//Graphicsインスタンスを作って、Shape()コンストラクタに渡す
	var myGraphics = new Graphics();
	var myShape = new Shape(myGraphics);
	stage.addChild(myShape);
	myShape.x = 50;
	myShape.y = 50;
	// draw(myShape);
	draw(myGraphics);
}

//function draw(myShape){
function draw(myGraphics){
    //var myGraphics = myShape.graphics;
    myGraphics.beginStroke("#0000FF").beginFill("#00FFFF").drawCircle(0, 0, 40);
    stage.update();
}
```
HaskellでMergeSortを実装してみた

```hs
myMergeSort :: Ord a => [a] -> [a]
myMergeSort xs = merge (map (:[]) xs) []
  where merge [] [] = []
        merge [] [l] = l
        merge [] ls = merge ls []
        merge [l] ret = merge [] (listMerge l [] [] : ret)
        merge (l:ls:lss) ret = merge lss (listMerge l ls [] : ret)

listMerge :: Ord a => [a] -> [a] -> [a] -> [a]
listMerge [] [] ret = reverse ret
listMerge [] (y:ys) ret = listMerge [] ys (y:ret)
listMerge (x:xs) [] ret = listMerge xs [] (x:ret)
listMerge (x:xs) (y:ys) ret | x < y = listMerge xs (y:ys) (x:ret)
                            | otherwise = listMerge (x:xs) ys (y:ret)
```

もう少し簡潔に書けるといいけど・・・。
連絡先メールアドレスに指定ドメインを一括追加

## Docomo から Google への連絡先の移行

先日、Docomo の電話帳から Google の連絡先へデータを移行しました。

Docomo 携帯でメール送信する場合には、宛先のメールアドレスの "@docomo.ne.jp" を省略しても送信できていたので、電話帳にも "@docomo.ne.jp" を省略して登録してしまってました。（これがそもそも良くなかった...）

## メールアドレスの一括変更

Google の連絡先に移行したデータについて、"@" が含まれていないメールアドレスについては、"@docomo.ne.jp" を追加するスクリプトを作成しました。

```js
function addDomain() {
  var contacts = ContactsApp.getContacts()
  for (var i = 0; i < contacts.length; i++) {
    var emails = contacts[i].getEmails();
    for (var j = 0; j < emails.length; j++) {
      var email = emails[j];
      var email_addr = email.getAddress();
      if (email_addr.indexOf("@") == -1) {
        email.setAddress(email_addr + "@docomo.ne.jp");
        Logger.log(email_addr);
      }
    }
  }
}
```

たったこれだけで、「ドコモでしか使えないアドレス帳が ドコでも使える」ようになりました。

こういうタスクをサラリとこなす GAS には、本当にいろいろと可能性を感じますね。
Swift言語のドキュメントを読んでみての所感


# 印象

* Goに似てる
* クロージャや高階関数がある
* Genericsがある
* varとletがある。Scalaのvarとvalみたい
* extensionsというScalaのImplicit classみたいなものがある
* ScalaとかPythonみたいにパラメータ名つけてパラメータ渡せる
* 可変長引数は…と書くだけ
* class構文がある
* Objective-Cよりも早い
* 同名の別言語がある… http://swift-lang.org/ 
* CとObjective-Cのライブラリが使える
* パターンマッチングがある
* playgroundsというEclipseのWorksheetsみたいなのもある
* 配列定義するの簡単だなぁ [1, 2, 3]
* switch構文はfallthroughがデフォルトOff(すばらしい)
* enumがScalaより書きやすそう
* mapが書きやすそう `numbers.map({ number in 3 * number })`


# 疑問

* 並列処理の仕組みはあるんだろうか? coroutine? Actor? Thread-lock? future?
* エラー処理の仕組みは何か? try-catch? Goみたいなタプル返し? エラーモナド?
* クラスのプロパティの可視性はあるのか? privateとかprotectedとか。


# マニュアルはこちら

Swift言語の詳細についてはドキュメントが公開されてるので詳しく知りたい方は読んでみてください:

* [Welcome to Swift](https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/LandingPage/index.html)
* [The Swift Programming Language: The Basics](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-XID_399)


# サンプルコードはこちら

* [Open Playground](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.playground.zip)
FuelPHPをインストールし、ビルトインサーバで動作させる



# 概要

なるべく簡単にポータブルな感じでFuelPHPを始めたい。
PHPはphpenvでインストールし、
Apacheなどは使用せずに、
PHP5.4から入ったビルトインサーバでFuelPHPを動かくまでの作業メモ。


# PHPのインストール

以下を参考にphpenvでPHPをインストールする。
http://qiita.com/uchiko/items/5f1843d3d848de619fdf

Xdebugなどもインストールしてくれるので便利。
今回は5.5.12をインストールした。

# FuelPHPのインストール

手動でインストールする。

以下のURLからFuelPHPをダウンロードしてくる。
http://fuelphp.jp/docs/1.7/installation/download.html


```shell
$ wget http://fuelphp.com/files/download/25
$ unzip 25
$ cd fuelphp-1.7
$ phpenv local 5.5.12
```

# FuelPHPの設定ファイルを編集

fuel/app/config/config.php の以下の項目を設定した。

```php:fuel/app/config/config.php
'language'           => 'ja'
'encoding'  => 'UTF-8',
'default_timezone'   => 'Asia/Tokyo',
'log_threshold'    => Fuel::L_ALL,
```

また、HTTPレスポンスヘッダに文字コードを指定させるために、
以下のコードを最初の方に追記した。

```php:fuel/app/config/config.php
// set default charset
ini_set('default_charset', 'UTF-8');
```


# Composerの実行

Composerの以下のコマンドを実行してアップデートし、
FuelPHPのコンポーネントをインストール。

```shell
$ php composer.phar self-update
$ php composer.phar update
```


# oilの実行

パーミッションを設定するために、以下のコマンドを実行。

```shell
$ php oil refine install
```

# ビルトインサーバを起動

以下のコマンドでビルトインサーバを起動する。
IPは環境によって変更する。

```shell
$ php -S 192.168.33.10:3000 -t public
```

ブラウザで「http://192.168.33.10:3000/ 」にアクセスすると、
FuelPHPの最初の画面が表示される。



# 参考

インストール方法
http://fuelphp.jp/docs/1.7/installation/instructions.html

はじめてのフレームワークとしてのFuelPHP
http://tatsu-zine.com/books/fuelphp1st
docker runコマンドライン MariaDB Galera Cluster 5.5 (kudotty/mariadb-galeracluster-5.5)


## MariaDB Galera Cluster 5.5 (kudotty/mariadb-galeracluster-5.5)

* 鍵・証明書関係は、以下のtrustyブランチでBOOTモード起動すれば自動生成してくれる (が、それより先でtrustyブランチは起動にコケる)
https://github.com/nsasikumar/mariadb55/tree/trusty
* 2014/5現在では、trustyブランチで鍵・証明書関係を作り、masterブランチというかDocker Indexからのもので運用
* fishで以下のように定義済み
````~/.config/fish/config.fish
alias dl "docker ps -l -q"
alias dlip "docker inspect (dl) | grep IPAddress | cut -d '\"' -f 4"
````

* zsh,bashでは(dl)ではなく\`dl\`、(hostname -f)ではなく\`hostname -f\`  

* クラスタ内全ノードで、空の状態からの最初のBOOTモード起動 (初期DBを整えてくれたりする)
`docker run --name mariadbgalera_boot -v /srv/mariadbgalera/data:/var/lib/mysql -v /srv/mariadbgalera/ssl:/etc/ssl/mysql -p 3306:3306 -e CLUSTER=BOOT -d kudotty/mariadb-galeracluster-5.5 mariadb-start`

* クラスタ内全ノードで、BOOTモードでの起動をstop
`docker stop (dl)`

* クラスタ初期ノードでのみ、INITモードで起動
`docker run --name mariadbgalera_init -v /srv/mariadbgalera/data:/var/lib/mysql -v /srv/mariadbgalera/ssl:/etc/ssl/mysql -p 3306:3306 -p 4567:4567 -p 4444:4444 -e CLUSTER=INIT -e NODE_ADDR=(hostname -f) -d kudotty/mariadb-galeracluster-5.5 mariadb-start`

* 初期ノード以外の全てのノードで、CLUSTERモードで起動
`docker run --name mariadbgalera_clustered -v /srv/mariadbgalera/data:/var/lib/mysql -v /srv/mariadbgalera/ssl:/etc/ssl/mysql -p 3306:3306 -p 4567:4567 -p 4444:4444 -e CLUSTER=ノード1のFQDN,ノード2のFQDN,ノード3のFQDN -e NODE=(date --universal +%Y%m%d%H%M%S%) -e NODE_ADDR=(hostname -f) -d kudotty/mariadb-galeracluster-5.5 mariadb-start`

* 初期ノードでINITモードをstopさせ、他のノードと同じくCLUSTERモードで起動 (クラスタ全体で3ノード以上ないとこれは出来ない。だから最低3ノード必要)
`docker stop (dl)`
`docker run --name mariadbgalera_clustered -v /srv/mariadbgalera/data:/var/lib/mysql -v /srv/mariadbgalera/ssl:/etc/ssl/mysql -p 3306:3306 -p 4567:4567 -p 4444:4444 -e CLUSTER=ノード1のFQDN,ノード2のFQDN,ノード3のFQDN -e NODE=(date --universal +%Y%m%d%H%M%S%) -e NODE_ADDR=(hostname -f) -d kudotty/mariadb-galeracluster-5.5 mariadb-start`

* 確認は
`mysql -h (dlip) -u adminuser --ssl-ca=/srv/mariadbgalera/ssl/ca.pem --ssl-cert=/srv/mariadbgalera/ssl/client-cert.pem --ssl-key=/srv/mariadbgalera/ssl/client-key.pem`
`MariaDB> show status like 'wsrep_%';`
* Dockerホスト再起動時のDockerコンテナの再起動は、Upstart設定ファイルで。
http://docs.docker.io/use/host_integration/
その際、コンテナ名mariadbgalera_clusteredを起動するようにするとBOOTモード・INITモードが誤起動せず、通常運用のCLUSTERモードで起動する。コンテナ名を起動モードによって使い分けるのがポイント
Swift のヘッダーファイル？

今朝から話題のSwift
仕事しながら片手間で少しずつ調べているのですが
どうしても謎な点があり調べてみました。

Swift のプロジェクト内で import している
Cocoa touch フレームワークの定義を開くと
謎のファイルが開かれるんです。
ファイルのヘッダ部にあるコメントを見ると
 ???.h
ってヘッダーファイルっぽいのですが、
中身はSwiftなんです。
しかもこのファイルの本体が見つからないのです...

で調べた結果、
Framework が持っている Objective-C 用のヘッダーファイル(*.h)を
Swift用に都度変換しているだけっぽいです。

スッキリしました！
brew caskのappどもをupgradeする

追記: 公式に`brew cask upgrade`コマンドが[実装されました](https://github.com/caskroom/homebrew-cask/blob/master/USAGE.md#updatingupgrading-casks)。こちらを使いましょう。

---

`brew upgrade`ではhomebrew-caskでインストールしたapp達は更新されないので、次のfunctionで。

```bash
brew-cask-upgrade(){ for app in $(brew cask list); do local latest="$(brew cask info "${app}" | awk 'NR==1{print $2}')"; local versions=($(ls -1 "/usr/local/Caskroom/${app}/.metadata/")); local current=$(echo ${versions} | awk '{print $NF}'); if [[ "${latest}" = "latest" ]]; then echo "[!] ${app}: ${current} == ${latest}"; [[ "$1" = "-f" ]] && brew cask install "${app}" --force; continue; elif [[ "${current}" = "${latest}" ]]; then continue; fi; echo "[+] ${app}: ${current} -> ${latest}"; brew cask uninstall "${app}" --force; brew cask install "${app}"; done; }
```

bash, zshで動作確認済です。
更新のあったパッケージはアンインストール→インストールします。
`brew-cask-upgrade -f`とするとバージョンが`latest`で固まっているパッケージも強制上書きします。
Python 3.4 Windows7-64bit 環境を作る (金融時系列解析向け)

## Python 本体のインストール
https://www.python.org/downloads/ に行くと、目立つところに **Download the latest version for Windows** とあるが、これは **32 bit 版**という罠。 **Looking for a specific release?** から欲しいバージョンのページへ飛び、そのページの下の方にある **Download** の項に **download page** へのリンクがあるので、ここへ飛ぶ。直リンクだと、https://www.python.org/downloads/release/python-341/ 。

このページから **Windows x86-64 MSI installer** を入手し、インストール。

## 各種パッケージのインストール
Windows 64bit 版 Python 3.4 向けのパッケージは、公式なものが有ったり無かったりする。pip で入れようとしても Visual Studio 12.0 ではだめなのか、ビルドに失敗するものがちらほら。
仕方ないので、非公式に作って配布している [Unofficial Windows Binaries for Python Extension Packages](http://www.lfd.uci.edu/~gohlke/pythonlibs/) から入手。

### インストールするパッケージ
* NumPy
* SciPy
* Pandas
* Pytz
* QuantLib
* Six
* Python-Dateutil
* Pyparsing
* Matplotlib
* Patsy
* Statsmodels
* PyZMQ
* Jinja2
* MarkupSafe
* Tornado
* IPython

まだ実用に供していないので、これで十分かどうかは未だ不明。
ログイン時locale設定


vmでcentosをよく作成するけど、sshログイン時に毎回locale設定のエラーが一文出力される。
なんだったっけとネットの海を彷徨って毎度Yak shaving:(

```
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
```

該当ファイルをみる

```
$ cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
```

変更

```/etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
```

【追記】
Ubuntuの場合

`$ sudo vi /etc/default/locale`

```
...
LC_CTYPE="ja_JP.UTF-8"
```
[Eclipse] Mac Mavericks(10.9) に Eclipse Kepler(4.3.2) を入れて、見た目を Sublime Text っぽくしたり、いい感じにする方法

# 前置き

私は Eclipse デフォルトの白画面がどうしても苦手だったので、MacでAndroid開発をEclipseで始めると同時に、いろいろやってみました。

![Screen Shot 2014-06-03 at 11.01.31.png](https://qiita-image-store.s3.amazonaws.com/0/18705/68e49e75-cf22-71f7-992d-fb2011d16f70.png)


# before

![Screen Shot 2014-06-03 at 11.37.17.png](https://qiita-image-store.s3.amazonaws.com/0/18705/bd8ce2f2-034d-17e0-65cd-de1f6d88f0d2.png)

(((( ´,,_ゝ｀)))) 

# after

![Screen Shot 2014-06-03 at 11.39.03.png](https://qiita-image-store.s3.amazonaws.com/0/18705/44f96c99-3b29-0d0d-541d-f82eec871643.png)

（＾－＾）いい感じですねー

# Eclipse Marketplace のインストール

[Eclipseのダウンロードサイト](http://www.eclipse.org/mpc/)から「Marketplace Client」をダウンロードして、インストール。


# Eclipse Color Theme のインストール

Help > Eclipse Marketplace　から検索ウィンドウで「Eclipse Color Theme」と入力。
ライセンスに同意し、Eclipse Color Themeをインストール。

![Screen Shot 2014-06-03 at 10.36.52.png](https://qiita-image-store.s3.amazonaws.com/0/18705/c0db1567-77f3-0fa1-4f6c-f1429e405c9e.png)

![Screen Shot 2014-06-03 at 11.00.12.png](https://qiita-image-store.s3.amazonaws.com/0/18705/3306bfff-89f4-e98b-d81e-70e4193b63d4.png)

再起動が必要になります。

再起動後、Preferences > General > Appearance から color theme の欄が登場します。

![Screen Shot 2014-06-03 at 11.02.11.png](https://qiita-image-store.s3.amazonaws.com/0/18705/d47e9747-2eb2-e17d-9a91-c96b40994b9a.png)

この段階で color theme に sublime text を選択できます。

でもまだ物足りなかったので、続きます。

# UIテーマの Moonrise をインストール

Help > Eclipse Marketplace から検索ウィンドウで「Moonrise」と入力。
ライセンスに同意し、Eclipse Moonrise UI Themeをインストール。

![Screen Shot 2014-06-03 at 10.37.21.png](https://qiita-image-store.s3.amazonaws.com/0/18705/aee1b4a0-9f82-8884-c8a0-24bfd1b8f085.png)

再起動します。

Preferences > General > Appearance　にて　Theme を MoonRise に変更します。

![Screen Shot 2014-06-03 at 11.49.05.png](https://qiita-image-store.s3.amazonaws.com/0/18705/128a48fe-2549-4964-1d75-e1f27739edaa.png)

するとテーマが変更されます。

![Screen Shot 2014-06-03 at 11.53.28.png](https://qiita-image-store.s3.amazonaws.com/0/18705/e21f02f2-10ac-eed0-d851-86a3aa352e57.png)

だいぶいい感じなりました。
これに、もうちょっと加えます。

# カラーテーマの RainbowDrops をインストール

[ここから](http://eclipsecolorthemes.org/?view=theme&id=24587) RainDrops の xml を落とします。

Preferences > General > Appearance > Color Theme > Import a theme…を選択。
ダウンロードしてきた xml をインポートします。

![Screen Shot 2014-06-03 at 12.00.43.png](https://qiita-image-store.s3.amazonaws.com/0/18705/56626bba-dceb-8227-d56a-1d750d0ddc17.png)

適用されると以下の様な感じになります。

![Screen Shot 2014-06-03 at 11.53.28.png](https://qiita-image-store.s3.amazonaws.com/0/18705/206e7d5c-093e-2895-cea6-0970f4007af6.png)



# 参考

http://d.hatena.ne.jp/As_hsp/20111218/1324229011
http://lab.adn-mobasia.net/?p=3195
http://futurismo.biz/archives/2152
プログラムの回答を載せる場合は、問題のリンクがほしい件

Qiitaへの投稿のいくつかに「ソースコードをペタっと貼って感想を書いて終わり」というものがいくつかみられます。
そうするとその投稿を見た人が「この投稿から何を学べというのだろう？」と思うと思います。
ですので「この問題を解きました」というリンクか「こういう問題でした」という概要のどちらかを合わせて投稿してもらえると嬉しいなと思います。

という要望を書いて誰が見てくれるのだろうかとも思うけど、 [Go言語の記事は`Go`タグを付け欲しい件](http://qiita.com/tenntenn/items/a16a25bb3228dbe0b954) という投稿もあるのでアリなはず
Storyboardを使用した場合の細かな設定(角丸)とか

Storyboardって画面遷移がひと目でわかったり、画面の設計がらくになっていいなと思ってたんだけど、細かな所で直接コード書かなきゃ行けなかったりするのが面倒。
特にUIVIewのLayer周りの設定がIDE上には表示されてないんだよね。。。。

角丸(cornerRadius)とかおもいっきしデザインに必要な項目なのに、表示されてないとかどうなのよ？

まあ、View自体のカラーを変更して、角を丸くする動作ってのは処理的に重くなるのもわかるし、角のマルイ画像をバックグラウンドに設定したほうが良いのもわかるけどね。

で、storyboard上でそのクラスが保持しているメンバをいじるには下記を使う。


![ss4.png](https://qiita-image-store.s3.amazonaws.com/0/44441/04c5bfb9-9075-6d75-c3a7-b73b131ed75c.png "ss4.png")

上記は例だけど、この方法でTableViewとかの角丸もできる。
「システムプログラムの問題が見つかりました」のダイアログの消し方

なぜか毎回起動するたびにこいつ↓が出てくる用になったので出なくする方法
![XWSS013025-s.jpg](https://qiita-image-store.s3.amazonaws.com/0/42913/752a5360-d612-68a4-a36b-12744eabeab4.jpeg)


端末で以下を入力

```sh
$ sudo rm /var/crash/*
$ sudo sed -i 's/enabled=1/enabled=0/g' /etc/default/apport
```

参考にしたサイト
http://pc.casey.jp/archives/153902330
MySQLにData::Generator::FromDDLで大量のダミーデータを入れる方法


## 経緯
MySQLのチューニングのため、大量のデータを入れてパフォーマンスを計測する作業が必要となった。

Data::Generator::FromDDLというPerlライブラリがあるので、それを使ってダミーデータを入れることにした。 https://github.com/addsict/Data-Generator-FromDDL

## 手順
MySQLのmydbデータベースに、すでにcreate tableされているとする。まず、MySQLに付属している[mysqldump](http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html)というツールを使って、すでにmydbに作られたテーブルを再現してcreate tableするだけのSQL文であるDDLを取得する。

```
$ mysqldump -u katryo -p --no-data mydb > dump.sql
```

で、dump.sqlというDDLを生成する。

で、Data::Generator::FromDDLをシェルから扱える[datagen_from_ddl](http://addsict.hatenablog.com/entry/2014/05/03/103818)を使って、

```
$ datagen_from_ddl --num=100000 dump.sql | mysql -u katryo -p mydb 
```

すると、MySQL内のmydbの各テーブルに、100000レコード/1テーブル のデータが入る。

8GBのMacBookAirで、26テーブルで100000レコードで実行すると30秒かかった。

## Data::Generator::FromDDLの素晴らしさ

Data::Generator::FromDDLは、DDLをパースして自動的にダミーデータのinsert文を出力してくれる。
 さきほどの例を、3レコード/1テーブルで行ってみよう。出力を見やすくするために **--pretty** のオプションもつけてみる。

```
$ datagen_from_ddl --num=3 --pretty dump.sql
```

をすると、以下のような文が出力される。ちなみに、レシピサイトを作っているとする。

```sql
INSERT IGNORE INTO `foodstuffs` (`foodstuff_id`,`name`,`created_at`) VALUES (1,'name1',-1429218243),(2,'name2',99576727),(3,'name3',-1565718941);
INSERT IGNORE INTO `request_ids` (`request_id`) VALUES (1),(2),(3);
INSERT IGNORE INTO `tags` (`tag_id`,`name`,`created_at`) VALUES (1,'name1',2542618628),(2,'name2',3291009850),(3,'name3',1095817358);
INSERT IGNORE INTO `users` (`user_id`,`nickname`,`family_name`,`given_name`,`email`,`salt_hashed_password`,`gender`,`created_at`,`updated_at`) VALUES (1,'nickname1','family_name1','given_name1','email1','salt_hashed_password1',-22,2261241673,2135291890),(2,'nickname2','family_name2','given_name2','email2','salt_hashed_password2',114,2162413120,440265079),

...(以下略)
```

こんな風に、create table文から、適当な値を入れてinsert文を作ってくれる。テーブル同士の関係、制約を守りながら大量のデータを入れるのに便利。

## テーブルごとに入れるレコードの数を変えるとき

現実のアプリケーションでは、テーブルごとにレコード数はかなり異なる。なので、ダミーデータもテーブルごとの目的にあわせて、その量を変えるべきだ。Data::Generator::FromDDLにはその仕組みがある。

コマンドラインツールのdatagen_from_ddlではそこまで複雑な仕事をさせられないので、自分でスクリプトを書くといい。

```perl:dummy_into_mysql.pl
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use autodie;
use Data::Dumper;
use Data::Generator::FromDDL;

open my $fh, '<', $ARGV[0] or die "Could not open ddl: $!";
my $ddl = '';
foreach my $line (<$fh>) {
    $ddl .= $line;
}
close $fh;

my $generator = Data::Generator::FromDDL->new(
    {   ddl    => $ddl,
        parser => 'mysql',
    }
);

my $num = {
    all    => 1000000,
    tables => {
        followings => 5000000,
        likes => 20000000,
    }
};
$generator->generate($num);
```

こんな感じに、$ARGV[0]でddlファイル（mysqldump --no-dataで作ったもの）を指定するようなスクリプトを書いて、

```
$ perl dummy_into_mysql.pl dump.sql | mysql -u katryo -p mydb 
```

とすると、followingsには5000000件、likesには20000000件、それ以外には1000000件のレコードが入る。
主にDevOpsで利用検討中のWebサイト・アプリリンク置き場


## Webサービス
* https://www.cloudflare.com/
* https://stackexchange.com/
* https://flynn.io/
* http://dotinstall.com/
* https://mailtrap.io/
* https://slack.com/
* https://www.heroku.com/

## Web制作
* http://getbootstrap.com/
* http://gitit.net/
* https://developers.google.com/speed/pagespeed/insights/?hl=ja
* http://jp.padrinorb.com/
* https://plus.google.com/authorship
* http://www.slideshare.net/kazufumiotani/hubotbot
* http://minnano-domain.com/
* http://fc2video.info/

## サーバ管理
* http://www.hashicorp.com/blog/consul.html

## Mac
* http://kapeli.com/dash
* https://www.passwordbox.com/ja
* https://www.dashlane.com/
* http://ntk.me/2012/09/07/os-x-on-os-x/

## Chromebook / ChromeOS
* http://skycocker.github.io/chromebrew/
* https://www.youtube.com/watch?v=Ppv5peNDqM0

## Firefox
* https://addons.mozilla.org/ja/firefox/addon/yslow/

## OS
* http://www.freenas.org/

## ニュースサイト
* http://www.infoq.com/jp/
* https://news.ycombinator.com/

## VPS
* https://backupsy.com/
Erlangの andalso は第2引数が boolean() じゃなくても良い

# 概要

> Erlangの短絡評価 `andalso` 、 `orelse` は第2引数が `boolean()` でなくても良い。
> ここで「第2引数」とは「演算子の右の値」のことである。
> ex. `Expr1 andalso Expr2` の「第2引数」は `Expr2` のこと。

`andalso` と `orelse` は次のような挙動を取る。

```erlang
1> true andalso false.
false
2> true andalso ok.
ok
3> false orelse true.
true
4> false orelse ok.
ok
```

# 検証

さて、問題はこれが仕様かどうかである。

## 1. 公式ドキュメント

> From R13A, Expr2 is no longer required to evaluate to a boolean value.

boolean valueである必要はないそうです。

参考URL: [Erlang -- Expressions # 8.14  Short-Circuit Expressions](http://erlang.org/doc/reference_manual/expressions.html#id79612)

## 2. 一般的な短絡評価について

今まであまり気にしたことはなかったが、色々調べていると、この仕様はErlangだけではないみたいだ。

![短絡評価.png](https://qiita-image-store.s3.amazonaws.com/0/25009/0ec35ad3-54ae-59b4-4fc7-87aaf2d58bbc.png)

参考URL: [短絡評価 - Wikipedia](http://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B5%A1%E8%A9%95%E4%BE%A1)

JavaScript、Perl、Ruby、Lisp等で似たような挙動があるみたいである。

また、内容は割愛するが、他にも以下のようなページに似たような内容のことがまとめられていた。

### 参考ページURL
* 短絡評価 - Wikipedia
    * http://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B5%A1%E8%A9%95%E4%BE%A1
* JavaScript の論理演算子と短絡評価の話。 - C#でプログラミングあれこれ
    * http://d.hatena.ne.jp/fkmt5/20130421/1366561399
* 論理演算子（&amp;&amp; と ||）を応用する - てっく煮ブログ
    * http://tech.nitoyon.com/ja/blog/2007/12/27/cmpop/

以上より、 `Expr1 andalso Expr2` や `Expr1 orelse Expr2` の `Expr2` は `boolean()` じゃなくて良いということである。

# 何ができるか

こんな際どい仕様を見つけて、何ができるのだろうか。

例えば、 `defined_list() = [{Key::atom(), Value::any()}] | undefined` からある `Key` に一致する `Value` を取り出すとしよう。
一般的には次のように書ける。

```erlang:sample_code1.erl
get_value(_Key, undefined) ->
    {error, not_match}; %% NOT_MATCH_PROCESS
get_value(Key, DefiendList) ->
    case proplists:get_value(Key, DefinedList) of
        {Key, Value} -> {ok, Value};
        _            -> {error, not_match} %% NOT_MATCH_PROCESS
    end.
```

しかし、 `orelse` の第2引数が `boolean()` でなくてもよいことを使うと、もう少し短くコードを書くことができる。

```erlang:sample_code.erl
get_value(Key, DefinedList) ->
    case DefinedList =:= undefined orelse proplists:get_value(Key, DefinedList) of
        {Key, Value} -> {ok, Value};
        _            -> {error, not_match} %% NOT_MATCH_PROCESS
    end.
```

※上記コードは説明で使うことを考え簡単に書いてあるため、そのままでは使えないと思われる。（エラー処理等）

このコードでは値がない場合の処理が短いのでそんなに得をした感じはしないが、値がない場合の処理(NOT_MATCH_PROCESS) `{error, not_match}` の部分の処理が長くなった場合、後者のように共通化しておいた方が、メンテコストは下がると思われる。

# まとめ

> Erlangの短絡評価 `andalso` 、 `orelse` は第2引数が `boolean()` でなくても良い。

ただ、可読性等もあるので、場所を選んで使って行きたい。

***

# ちなみに…

上の8.14 Short-Circuit Expressionsの引用部分の後には次の様に続いている。

> As a consequence, andalso and orelse are now tail-recursive. For instance, the following function is tail-recursive in R13A and later:
>
> ```erlang
> all(Pred, [Hd|Tail]) ->
>     Pred(Hd) andalso all(Pred, Tail);
> all(_, []) ->
>     true.
> ```

僕は今はまだ短絡評価を末尾再帰で使った覚えはないが、使えるところがあれば使っていきたい。
Xcode6 betaを落としてSwiftを少し触ってみた

NDAの制約があるので細かい事までは書けないし、
この中にも問題のある部分があれば指摘して頂きたいと思います。

AppleからSwiftの言語情報が発表されたのでまずはそちらをご紹介。
<a href="https://itunes.apple.com/us/book/the-swift-programming-language/id881256329?mt=11" title="The Swift Programming Language (iBooks Store) " target="_blank">The Swift Programming Language (iBooks Store)</a>

Xcode6 betaを落として簡単に触ってみたので軽くご紹介したいと思います。

AppDelegateの拡張子はswiftとなっています。
今回RootViewController.swiftを作成してUIWindowのrootViewControllerを設定して、
UILabelでテキストを表示してみました。

```AppDelegate.swift
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        
        let rootViewController = RootViewController();
        self.window!.rootViewController = rootViewController;
        
        self.window!.backgroundColor = UIColor.whiteColor()
        self.window!.makeKeyAndVisible()
        return true
    }
}
```

```RootViewController.swift
import UIKit

class RootViewController : UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad();
        
        let label = UILabel();
        label.frame = CGRect(x: 30.0, y: 30.0, width:200.0, height:200.0);
        label.text = "TEST";
        
        self.view.addSubview(label);
    }
}
```

結果はこちら
![スクリーンショット 2014-06-03 10.07.39.png](https://qiita-image-store.s3.amazonaws.com/0/2846/b5b1d09a-1985-1d53-bf5e-0a4a01ab65fa.png)


まだ詳しくみてないけどUIKitの概念自体は大きく変わる事は無さそうです。
感覚的にはRuby motionに似てる？かな？
細かい事だけどファイル毎にimportが無くなった様に見えるけどこれはnamespaceのお陰かな。

まだまだ分からない事だらけだけどこれから触るのが楽しみです！
EnumMapの使い方メモ

EnumMapの使い方メモです。

名前と値を対応付けるのにわかりやすそうです。

```java:Month.java
package enum_test;

import java.util.EnumMap;

public enum Month {
    JANUARY, FEBRUARY, MARCH, APRIL,
    MAY, JUNE, JULY, AUGUST,
    SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;

    private final static EnumMap<Month, Integer> monthMap;

    static{
        monthMap = new EnumMap<Month, Integer>(Month.class);
        monthMap.put(Month.JANUARY, 1);
        monthMap.put(Month.FEBRUARY, 2);
        monthMap.put(Month.MARCH, 3);
        monthMap.put(Month.APRIL, 4);
        monthMap.put(Month.MAY, 5);
        monthMap.put(Month.JUNE, 6);
        monthMap.put(Month.JULY, 7);
        monthMap.put(Month.AUGUST, 8);
        monthMap.put(Month.SEPTEMBER, 9);
        monthMap.put(Month.OCTOBER, 10);
        monthMap.put(Month.NOVEMBER, 11);
        monthMap.put(Month.DECEMBER, 12);
    }

//    public int toInteger(){
//        return monthMap.get(this);
//    }

    public static int toInteger(Month month){
        return monthMap.get(month);
    }

//    public static Month fromInteger(int value){
//        for(Month month: Month.values()){
//            if(monthMap.get(month) == value){
//                return month;
//            }
//        }
//        throw new IllegalArgumentException(); //範囲外。
//    }
}
```

逆変換は使うことはないでしょうという想定。
おまけで作った余計なコードはコメントアウトしておきます(^^;
scalaのインストール

homebrewを利用してscalaをインストールする。

> brew install scala

動作確認
scalaインタプリタを起動。
> scala
Welcome to Scala version 2.11.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.

```
scala> println("Hello, world!")
Hello, world!
```
Scala2.11でimplicit マクロ

公式ドキュメントのImplicit Macrosにはサンプルが載っているものの、肝心のところが...で省略されており記述されていない。

http://docs.scala-lang.org/overviews/macros/implicits.html
http://docs.scala-lang.org/ja/overviews/macros/implicits.html

```scala
trait Showable[T] { def show(x: T): String }
object Showable {
  implicit def materializeShowable[T]: Showable[T] = macro ...
}
```

マクロはScala2.10以降で追加された機能のため、現在出版されている書籍などではまだScala2.10に対応しているものは無い（はず）ため、マクロに関する情報をまとまった形で得にくい。
そのため、学習者にとっては公式ドキュメントの存在はありがたいものの、ここを...にされると少し、、いや結構困る。
というわけで出来てしまえば何てことはなかったが、実際はなかなか苦労したので残しておくこととする。

```Main.scala
object Main extends App {

  def show[T](x: T)(implicit s: Showable[T]) = s.show(x)

  class C(val x: Int)
  class D(val x: Int)

  println(show(new C(2)))
  println(show(new D(3)))
}
```

次にMacros.scala

```Macros.scala
import scala.language.experimental.macros
import scala.reflect.macros.blackbox.Context

trait Showable[T] { def show(x: T): String }
object Showable {
  implicit def materializeShowable[T]: Showable[T] = macro Macros.impl[T]
}

object Macros {

  def impl[T: c.WeakTypeTag](c: Context): c.Expr[Showable[T]] = {
    import c.universe._
    import definitions._

    val tpe = weakTypeOf[T]

    c.Expr[Showable[T]] {
      q"""
        new Showable[$tpe] {
          def show(x: $tpe) = ${tpe.toString} + "(" + x.x + ")"
        }
      """
    }
  }

}
```

少しだけ解説。

- import scala.language.experimental.macrosはまだマクロが本機能として取り込まれていないため現時点ではexperimentalという実験的なものだということをimport文の形で宣言しておく必要がある。
- Contextは2.11からblackbox.Contextとwhite box.Contextに分かれることとなった。2.12以降blackbox.Contextになるとのことなので基本的にはこちらで。
- qの部分は準クォートと呼ばれるもので、ASTを直接実装しなくとも簡単に書け、しかもreifyでは今回のような動的な型を変数として扱うということが出来ないシーンにおいてとても役立つ書き方である。

なお、ASTで書くとどんな風になるか見たい時は次のようにする。

```
  val s = q"""
    new Showable[$tpe] {
     def show(x: $tpe) = ${tpe.toString} + "(" + x.x + ")"
    }
  """
  println(showRaw(s))
```

これによりコンパイル時に、以下をコンソール上で確認出来る。

```
Block(List(ClassDef(Modifiers(FINAL), TypeName("$anon"), List(), Template(List(AppliedTypeTree(Ident(TypeName("Showable")), List(TypeTree()))), noSelfType, List(DefDef(Modifiers(), termNames.CONSTRUCTOR, List(), List(List()), TypeTree(), Block(List(pendingSuperCall), Literal(Constant(())))), DefDef(Modifiers(), TermName("show"), List(), List(List(ValDef(Modifiers(PARAM), TermName("x"), TypeTree(), EmptyTree))), TypeTree(), Apply(Select(Apply(Select(Apply(Select(Literal(Constant("Main.$anon.Main.D")), TermName("$plus")), List(Literal(Constant("(")))), TermName("$plus")), List(Select(Ident(TermName("x")), TermName("x")))), TermName("$plus")), List(Literal(Constant(")"))))))))), Apply(Select(New(Ident(TypeName("$anon"))), termNames.CONSTRUCTOR), List()))
```

これはDクラスに関するimplicit macroが動いた時のキャプチャなので、実際のDに関する情報が入っており例の準クォートと完全に同義ではないことに注意して欲しい。