OmniAICreator/Qiita-1.07M huggingface dataset:
创建ActionBar －Android



##官方文档 －－> xml 创建
 [链接] (file:///Users/Yun/Library/Application%20Support/Dash/DocSets/Android/Android.docset/Contents/Resources/Documents/docs/guide/topics/ui/actionbar.html#Adding)
 
* 创建xml
    xml：
        
        <menu xmlns:android="http://schemas.android.com/apk/res/android" 
        >
        <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          yourapp:showAsAction="ifRoom" />
        <item android:id="@+id/action_compose"
          android:icon="@drawable/ic_action_compose"
          android:title="@string/action_compose" />
        </menu>
        
* 加载xml布局
    
    java：
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_activity_actions, menu);
        return super.onCreateOptionsMenu(menu);
        }
        
* 监听事件

   java：
   
       @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle presses on the action bar items
        switch (item.getItemId()) {
            case R.id.action_search:
                openSearch();
                return true;
            case R.id.action_compose:
                composeMessage();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    
    
    
##不使用布局文件创建

 * 添加按钮
 
   java：
   
       private void addMenuButton(Menu menu) {
		MenuItem item = menu.add(0, 0, 0, "编辑");

		{
			item.setIcon(R.drawable.ic_setting);
			item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
		}
		item.setOnMenuItemClickListener(this);

	}
	

* 加载布局

java：
    
    @Override
	public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
		addMenuButton(menu);
		super.onCreateOptionsMenu(menu, inflater);
	}
	
* 监听事件

    实现OnMenuItemClickListener接口
    java：
        
        @Override
	    public boolean onMenuItemClick(MenuItem item) {
		    switch (item.getItemId()) {
		    case 0:
			    T.showShort(mainActivity, "Demo");
			    break;

		    default:
		   	    break;
	        }
		    return false;
	    }
 > Fragment中需要在onCreate状态下 设置 setHasOptionsMenu(true);
Hello world


    public class Zhu{
        public static void mian(String[] args){
            System.out.printf("Hello world");
        }


<!-- create time: 2014-08-19 01:50:21  -->

Java:
-----

    public class Zhu{
        public static void mian(String[] args){
            System.out.printf("Hello world");
        }

   
C:
-----
    #include <stdio.h>
    int main(void){
        printf("Hello world!");
        return 0;
    }
    
    
C++:
-------
    #include<iostream>
    int mian(){
        cout<<"Hello,world!"<<endl;
        return 0;
    }
    
Objective-C:
-------------------------------------
    #import <Foundation/Foundation.h>
    int main(int argc, const char * argv[]){
        @autoreleasepool {
            NSLog(@"Hello, World!");
        }
        return 0;
    }
    
Python：
-------------------------
    print("Hello,World!");
    
Swfit:
---------
    println("Hello,world");
限制 EditText 最大输入字符数 --&gt; Android



## 方法一：

在 xml 文件中设置文本编辑框属性作字符数限制

> 如：android:maxLength="10" 即限制最大输入字符个数为10


## 方法二：

在代码中使用InputFilter 进行过滤


```java

 	public class TextEditActivity extends Activity {
   
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        
            EditText editText = (EditText)findViewById(R.id.entry);
            editText.setFilters(new InputFilter[]{new 
            InputFilter.LengthFilter(20)});
            }
        }
        
        
 	editText.setFilters(new InputFilter[]{new 
	InputFilter.LengthFilter(20)}); 即限定最大输入字符数为20
```


## 方法三：


利用 TextWatcher 进行监听


自定义TextWatcher

```java   
    /*
     * 监听输入内容是否超出最大长度，并设置光标位置
     * */
    public class MaxLengthWatcher implements TextWatcher {

	    private int maxLen = 0;
	    private EditText editText = null;
	
	
	    public MaxLengthWatcher(int maxLen, EditText editText) {
		    this.maxLen = maxLen;
		    this.editText = editText;
	    }

	    public void afterTextChanged(Editable arg0) {
		    // TODO Auto-generated method stub
		
	    }

	    public void beforeTextChanged(CharSequence arg0, int arg1, int     
	        arg2,int arg3) {
		    // TODO Auto-generated method stub
		
	    }

	    public void onTextChanged(CharSequence arg0, int arg1, int     
	    arg2, int arg3) {
		    // TODO Auto-generated method stub
		    Editable editable = editText.getText();
		    int len = editable.length();
		
		    if(len > maxLen){
			    int selEndIndex = Selection.getSelectionEnd(editable);
			    String str = editable.toString();
			    //截取新字符串
			    String newStr = str.substring(0,maxLen);
			    editText.setText(newStr);
			    editable = editText.getText();
			
			    //新字符串的长度
			    int newLen = editable.length();
			    //旧光标位置超过字符串长度
			    if(selEndIndex > newLen){
				    selEndIndex = editable.length();
			    }
			    //设置新光标所在的位置
			    Selection.setSelection(editable, selEndIndex);
			
		    }
	    }

    }
```


调用自定义TextWatcher

   
```java
    public class TextEditActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

		    EditText editText = (EditText) findViewById(R.id.entry);
		    editText.addTextChangedListener(new MaxLengthWatcher(10, 
		    editText));

        }
    }
    
```
キーボードを閉じる動作の実装


以下の2つの動作に合わせてキーボードを閉じるというシナリオを想定している。

1. テキストフィールド(UITextField)での入力中にEnterを押した場合
2. テキストフィールドでの入力中にキーボード以外の場所をタップした場合

## StoryBoardメインで実装する場合

Enterを押した際の挙動は、UITextFieldの"Did End On Exit"イベントをバインドしたメソッド(以下の図では`onReturn:`)で制御する。

![onEnter_storyboard.png](https://qiita-image-store.s3.amazonaws.com/0/1835/34c5a663-67ce-45ac-2520-b2c7651f0f30.png "onEnter_storyboard.png")

`onReturn:`の実装は以下の通り。

```objectivec:Enter押下時にキーボードを閉じる処理
- (IBAction)onReturn:(UITextField *)sender {
    [sender resignFirstResponder];
}
```

`resignFirstResponder`を呼び出すことで、現在イベントを最初に受け取る状態になっている(=ファーストレスポンダになっている)のを解除することができる。
`UITextField`であれば、ファーストレスポンダ=キーボードが表示されている状態、と考えてよいのだろうか。(まだ正確な理解には至らず)

一方、キーボード以外の場所をタップした場合の挙動は、`TapGestureRecognizer`を使って実装する。
XCodeの右下のパレットから`Tap Gesture Recognizer`を選択し、該当するビュー(キーボードを表示する際に下にあるビュー)にドラッグ&ドロップする。

![スクリーンショット_2014-08-25_1_34_31.png](https://qiita-image-store.s3.amazonaws.com/0/1835/000047fd-974a-46ab-cdef-192c3b2ce49f.png "スクリーンショット_2014-08-25_1_34_31.png")

その後、`Tap Gesture Recognizer`をメソッド(以下の図では`onSingleTap:`)にバインドする。

![スクリーンショット_2014-08-25_1_32_17.png](https://qiita-image-store.s3.amazonaws.com/0/1835/13bbb632-678f-0da7-9a00-b03c07ce5ec9.png "スクリーンショット_2014-08-25_1_32_17.png")

`onSingleTap:`の実装は以下の通り。

```
- (IBAction)onSingleTap:(UITapGestureRecognizer *)sender {
    [self.view endEditing:YES];
}
```

`UIView`の`endEditing:`を呼ぶと、自身のサブビューがファーストレスポンダであった場合にそれを解除してくれるようだ。
ファーストレスポンダとなるものが複数存在する場合(etc. テキストフィールドが複数)でも問題なく処理できるため、こちらを使った方がいろいろと楽なのかもしれない。

## コードメインで実装する場合

Enterを押した際の挙動は、`UITextFieldDelegate`の`textFieldShouldReturn:`メソッドで定義する。
delegateをセットする必要があるため、テキストフィールドをOutletとしてバインドする。

![スクリーンショット 2014-08-25 1.57.37.png](https://qiita-image-store.s3.amazonaws.com/0/1835/b4955172-65ce-819d-234b-7cf9eee458e5.png "スクリーンショット 2014-08-25 1.57.37.png")

`viewDidLoad`内でテキストフィールドのdelegateをセットする。
`textFieldShouldReturn:`の実装は、StoryBoardの場合と殆ど変わらないが戻り値を要求されるためそこだけ変更する。

![スクリーンショット 2014-08-25 1.58.54.png](https://qiita-image-store.s3.amazonaws.com/0/1835/60871512-a98d-e759-43e5-aa0a7dc5021c.png "スクリーンショット 2014-08-25 1.58.54.png")

キーボード以外の場所をタップした場合の挙動は、`UITapGestureRecognizer`を自前でセットすることで実装できる。

UITapGestureRecognizerインスタンス生成時に、タップ時に呼ばれるメソッド(以下の図では`onSingleTap:`)とレシーバ(以下の図では`self`)を指定する。
生成したUITapGestureRecognizerインスタンスは、`addGestureRecognizer:`メソッドで、ViewController配下のビュー(=キーボードを表示する際に下にあるビュー)に追加する。
`onSingleTap:`の実装は、StoryBoardの場合と変わらない。

![スクリーンショット 2014-08-25 2.08.49.png](https://qiita-image-store.s3.amazonaws.com/0/1835/b8909612-ffb3-b962-3edd-03a6b1059f5e.png "スクリーンショット 2014-08-25 2.08.49.png")

## 追記

書いたあとに同内容の記事があることに気付くorz
こちらの記事の方が簡潔にまとまっています。
http://qiita.com/qt6hy/items/88fdd6c2c1485200ba97
C++ のソースに twenty one と書いたら 21 になるようにする

http://qiita.com/whch/items/90f2dddbf4fb3b13eeaf

が面白かったので書いてみた。

目的は、

* `one` や `twenty one` をソースコードに直接書けるようにすること。
* `twenty one / three` を `21/3` と解釈すること。

辺り。

念の為に書いておくと、何の役にも立たない。

# version 1 -- `operator()`

```cpp:c++
#include <iostream>

struct numbase
{
  int m;
  numbase( int m_ ): m(m_){}
  int value() const {  return m;  }
  virtual ~numbase(){}
};

struct num : public numbase
{
  num( int m_ ): numbase(m_){}
};

struct ten : public numbase
{
  ten( int m_ ): numbase(m_){}
  num operator()( num const & n ) const {  return num( m+n.value() ); }
};

std::ostream &
operator<<( std::ostream & o, numbase const & x )
{
  return o<<x.value();
}

int operator/( numbase const & a,  numbase const & b )
{
  return a.value() / b.value();
}

#define one (num(1))
#define two (num(2))
#define four (num(4))
#define twenty (ten(20))
#define fourty (ten(40))

int main()
{
  std::cout << one << std::endl;
  std::cout << fourty / two << std::endl;
  std::cout << fourty four / two << std::endl;
  std::cout << fourty four / twenty two << std::endl;
}
```

こんな感じ。

* 演算子を定義すれば、四則演算可能。
* `fourty` も `fourty four` もOK。
* `one hundred twenty four` とかも行けそうだけど、面倒なので書いていない。
* `printf` には対応していない。

特に、printf に対応するのはすごく難しいと思う。
別の printfを用意して、マクロでそちらに回してしまうという作戦なら可能だけど。

# version 2 -- `operator""`

合法的に printf に渡したいと考えていて、別の案を思いついた。
こちらのほうがシンプル。

```cpp:c++
// clang++ -std=c++11 -Wall
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <typeinfo>

inline int
operator"" _eng(char const* s, std::size_t size) {
  int sum=0;
  for( auto it = s ; it != s+size ; ++it ){
    if ( it==s || it[-1]==',' ){
      sum+=atoi(it);
    }
  }
  return sum;
}

#define one "1"_eng
#define two "2"_eng
#define three "3"_eng
#define four "4"_eng
#define twenty "20,"_eng
#define thirty "30,"_eng
#define fourty "40,"_eng
#define hundred "00,"_eng

int main()
{
  std::printf( "%d %d %d %d\n", one, fourty, fourty four, fourty four / twenty two );
  std::cout << one << std::endl;
  std::cout << fourty / two << std::endl;
  std::cout << fourty four / two << std::endl;
  std::cout << fourty four / twenty two << std::endl;
  std::cout << four hundred << std::endl;
  std::cout << two hundred one << std::endl;
  std::cout << one hundred twenty two << std::endl;
  std::cout << ( typeid( fourty four )==typeid(int) ? "int" : "NOT int" ) << std::endl; // => int 
}
```

最初からこうすればよかった。

* 演算子を定義すれば、四則演算可能。
* `fourty` も `fourty four` もOK。
* `one hundred twenty four` もOK。
* `printf` にも合法的に対応。

ユーザー定義リテラルにも文字列の連接が使えることを利用した。
初めてのcontrollerの追加


Sencha Touchのコントローラを使う初歩の初歩のメモ。

過去のアプリケーションを再利用し、そのアプリケーションを起動時にメッセージボックスを表示するコントローラを追加する。

_過去のアプリケーション_
* [caroucelコンポーネントの使い方](http://qiita.com/uchikoshi22/items/78803a68a9d44eff20a2)
* [storeのデータをcaroucelコンポーネントに表示](http://qiita.com/uchikoshi22/items/0891de5f53c37131cbf7)


Sencha CMDでControllerを自動作成する。

`sencha generate controller Players`

今回はアプリケーション起動するときのイベントを追加するだけなのでviewは扱わず、app.jsとapp/controller/Players.jsだけを修正する。

まずはapp.jsにコントローラを追加する。

`controllers: ['Players'],`

次にapp/controller/Players.jsを以下のように編集する。

```javascript:app/controller/Players.js
Ext.define('CarouselTest.controller.Players', {
    extend: 'Ext.app.Controller',
    
    config: {
        refs: {
        },
        control: {
            'main': {
                initialize: 'sayGreeting'
            }         
        }
    },

    sayGreeting: function(){
        Ext.Msg.alert('Hello Sencha');
    },
    
    launch: function(app) {
        
    }
});
```

* 6行目のcontrolオプションが各コンポーネントのイベントハンドラを設定
* 7行目にcontrolオプションのキーとして、イベントハンドラを設定したいコンポーネントのxtypeを指定
* 8行目ではmainコンポーネントのinitializeイベントに対してコントローラのsayGreetingメソッドを紐付け。

この状態で保存して、carouseltestフォルダに移動して

`python -m SimpleHTTPServer`

とするとブラウザで [http://0.0.0.0:8000](http://0.0.0.0:8000) にアクセすることで以下の描画を行うアプリケーションを実行できます。


![CarouselTest_and_初めてのcontrollerの追加_and_Kobito_and_caroucelコンポーネントの使い方.png](https://qiita-image-store.s3.amazonaws.com/0/19083/35edd788-f1b3-99c8-1ca2-432dc84fb92f.png "CarouselTest_and_初めてのcontrollerの追加_and_Kobito_and_caroucelコンポーネントの使い方.png")

ちなみに、フリックして新しい画面（コンポーネント）を表示させたいときは、app.controller.Players.jsのcontrolオプションに追記して以下のようにする。

```javascript:app/controller.Players.js(controlオプションのみ）
control: {
            'main': {
                initialize: 'sayGreeting'
            },
            'viewposition': {
                activate: 'sayGreeting'
            }         
        }
```

これで、Main.js(xtypeがmain)のCarouselコンポーネントに追加されているViewpositionクラス（Ext.dataview.listを継承。xtypeはviewposition）が表示された（activateイベントが発火した）時にsayGreetingメソッドが実行されるようになる。
PhpStormでcomposerを使う


# PhpStormのPHP Composer設定

PhpStorm PreferenceのComposerで「Path to composer.phar」にcomposerのパスを設定します。

```
% which composer
/usr/local/bin/composer
```

本PCは``/usr/local/bin/composer``にcomposerをインストールしているので次のようになります。

## 設定画面

![kobito.1408894445.124909.png](https://qiita-image-store.s3.amazonaws.com/0/18212/66920723-d9f2-0bec-30bb-f0a7909430c6.png "kobito.1408894445.124909.png")

## composer.jsonの作成

メニューの「Tools - Composer - Init Composer...」でプロジェクトのルートにcomposer.jsonのひな形が作成されます。

![kobito.1408894749.341102.png](https://qiita-image-store.s3.amazonaws.com/0/18212/8db68b34-a0e9-c665-789c-90cf753bd44a.png "kobito.1408894749.341102.png")

## パッケージの追加

メニューの「Tools - Composer - Add Dependency...」

![kobito.1408895042.415228.png](https://qiita-image-store.s3.amazonaws.com/0/18212/bee80592-c511-6c9a-475e-560cdcce3ea8.png "kobito.1408895042.415228.png")

パッケージとバージョンを選んでInstallボタンを押すとcomposer.jsonにパッケージが追加され、かつcomposer updateも実行されてダウンロードが始まります。
PhpStormの多機能っぷりがすごい。

![kobito.1408895217.302661.png](https://qiita-image-store.s3.amazonaws.com/0/18212/6cbecc81-6ae3-93f5-fe64-a070ff03d1a2.png "kobito.1408895217.302661.png")
iOSでポップアップビューを実装する(with Storyboard)


[昨日の記事の「iOSでポップアップビューを実装する」](http://qiita.com/g-1/items/bbf785e32bdfb66eb714)ではうまく実現できなかったStoryboardを使ったポップアップビューの実装ですが、[mono0926](http://qiita.com/mono0926)さんのアドバイスを受けて、再度Storyboardを使ってポップアップビューを実現してみました。

# modalTransitionStyleを設定する。

今回はiOS7での対応を試してみます。(iOS8版は後日）

```objc:ViewController.m

- (void)viewDidLoad
{
  [super viewDidLoad];
  
  self.modalPresentationStyle = UIModalPresentationCurrentContext;
  
}

```

呼び出し側のViewControllerのmodalPresentationStyleを設定することでPopupViewControllerがモーダルで表示されたときも、下にあるビューは存在しているので透過して上に乗っているように見えます。

# アニメーション設定

modalPresentationStyleを設定することで、入りのアニメーションが固定化されてしまいました。
呼び出される側のPopupViewControllerのmodalTransitionStyleを変更しても入りアニメーションは同じでした。
こちらはおそらくsegueをcustom指定することでアニメーションを調整できると思いますが、今回はとりあえずこれでOKとします。
しかし、dismiss時のアニメーションはmodalTransitionStyleで指定したとおりになるので、入りアニメーションに比較的近いアニメーションということでUIModalTransitionStyleCrossDissolveを指定してます。

```objc:PopupViewController.m

- (void)viewDidLoad
{
  [super viewDidLoad];
  // Do any additional setup after loading the view from its nib.
  self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
}

```

# サンプルコード

https://github.com/g-1/PopupViewController/tree/storyboard

# 次回

今回はテストしなかったポップアップ時のアニメーションについて検証してみます。
Linux上でNode.jsを常駐化する方法

> この記事は、[How to start a node.js server as daemon process on linux - by Kohei Shingai](http://codepen.io/koheishingai/blog/how-to-start-a-node-js-server-as-daemon-process-on-linux)の日本語訳です。

***
既にご存知かとは思いますが、
[Node.js](http://nodejs.org/)サーバーはお手軽でとても便利です。

しかし、[AWS](), Azureといったのクラウド環境上で実稼働させる場合、
永続化において予期せぬ苦労を強いられる場合があります。
***
今回、Linuxサーバー上でとても簡単にNode.jsを永続化させる方法を紹介します。
***
###使用するもの
* Linux OS
* Terminal
* [Node.js](http://nodejs.org/)
* [forever.js](https://github.com/nodejitsu/forever)　
　

###事前準備
お使いのLinux端末に、Node.jsを予めインストールさせてください。
　

###はじめてみましょう
* ローカル端末から、ターミナルでリモートのLinux環境にssh接続します。

```shell-session:Terminal
 $ ssh [ユーザー名]@[ホスト名]
```
![node-forever01](https://raw.githubusercontent.com/koheishingai/gif-strage/master/nodaemon01.gif)
　　

* 接続したLinux端末上で[forever.js](https://github.com/nodejitsu/forever)を
インストールします。

```shell-session:Terminal
 $ sudo npm -g install forever
```
![node-forever01](https://raw.githubusercontent.com/koheishingai/gif-strage/master/nodaemon02.gif)
　　

* プロジェクトのソースを[forever.js](https://github.com/nodejitsu/forever)から起動します。

```shell-session:Terminal
 $ sudo forever start [起動ファイル名]
```
![node-forever01](https://raw.githubusercontent.com/koheishingai/gif-strage/master/nodaemon03.gif)
　　

* 停止の場合は以下のコマンド

```shell-session:Terminal
 $ sudo forever stop [停止ファイル名]
```
![node-forever01](https://raw.githubusercontent.com/koheishingai/gif-strage/master/nodaemon04.gif)
***
ご不明な点は、コメント欄でご質問下さい。
快適なNode.js開発環境を！
【PHP】<?= ?>で出力する

php5.3で<?= =>を有効にするには、/etc/php.iniでshort_open_tagの設定をOnにする必要がある。

/etc/php.iniの設定を変更して、apache再起動。

```php:php.ini
short_open_tag = On
```

php5.4では、short_open_tag が廃止され、ショートタグが常時ONになった。

## <?= ?>の非推奨について
php5.3では、 <?xmlをPHPとして扱ってエラーになるという問題がある。
php5.4では、上記のエラーは発生しない。

※ちなみに、自分の環境では、php5.3だけど、html5を使っているため<?xml問題は発生しない。
node-webkitのパッケージングで注意することメモ

# exe単体で配布するにはツールが必要

## exe単体で実行できないじゃないか...
私は元々以下の手順でパッケージングしていたのですが、この方法でできたexeファイルは、単体で実行できるものと思っていました。
そんな噂を聞いていました。
しかし、実行できない...
あれ～

フォルダ構成はこんな感じで(v0.10.4)
> node-webkit\
>   ┣ app\
>   ┃ ┣ index.html
>   ┃ ┗ package.json
>   ┣locales\
>   ┣ffmpegsumo.dll
>   ┣libEGL.dll
>   ┣libGLESv2.dll
>   ┣nw.exe
>   ┣nw.pak
>   ┗icudtl.dat

1. index.htmlとpackage.jsonをまとめてzipに。
1. 拡張子を.nwに変える(zippedAppFiles.nw)
1. コマンドプロンプト↓な感じでnw.exeとくっつける。

```
cd ～\node-webkit  
copy /b nw.exe+app\zippedAppFiles.nw test.exe
```

## nw.pakとicudtl.datが必須なんですね

上記の方法でexeを作る場合、少なくともnw.pakとicudtl.datはセットで配布しなければいけないらしいです。

GitHubのwiki見るとそのまんま書いてある。
https://github.com/rogerwang/node-webkit/wiki/How-to-package-and-distribute-your-apps#windows-2

test.exeと同じフォルダに、nw.pakとicudtl.datを置いたらちゃんと動きました。

## Enigma Virtual Boxを使えば単体で実行できるようになる

  でもやっぱ単体の方がなんかスマートな感じしていいよね。
  というときは、Enigma Virtual Boxなるツールを使えば実現できるそうです。
  へー
  https://github.com/rogerwang/node-webkit/wiki/How-to-package-and-distribute-your-apps#an-alternative-way-to-make-an-executable-file-in-windows

全部GitHubのwikiに書いてあることそのままですね笑
Swift での #ifdef DEBUG のやり方

これまで Objective-C で開発をしていたとき、デバッグ時のみ実行したいコードは以下のように記述していました。

```objective-c:
#ifdef DEBUG
    // ...
#endif
```

しかし Swift では同じ記述ができません。
Apple のドキュメントによると、代わりに以下のように記述できるとあります。

```swift:
#if build_configuration
    // ...
#elseif build_configuration
    // ...
#else
    // ...
#endif
```

試しに `#if DEBUG ...` と書いてみましたが期待した動作をしません。
Apple のドキュメントをよく読むと以下のように書いてあります。

> Swift code and Objective-C code are conditionally compiled in different ways. Swift code can be conditionally compiled based on the evaluation of build configurations. Build configurations include the literal true and false values, command line flags, and the platform-testing functions listed in the table below. You can specify command line flags using -D <#flag#>.

どうやらコンパイル時のオプションで `-D flag` と指定するようですね。
Xcode の Build Settings を見てみると、Swift Compiler - Custom Flags に Other Swift Flags という項目があります。
ここに `-D DEBUG` という定義を追加してみたところ、先ほどのコードは無事動作しました。
<del>(まだ Xcode 6 は GM なのでスクリーンショットを貼り付けられないのが残念)</del>

<ins>
[追記 2014.09.21] Xcode 6 が正式にリリースされたのでスクリーンショットを貼り付けました。
</ins>
![swift_compiler-custom_flags-xcode601.png](https://qiita-image-store.s3.amazonaws.com/0/36383/4531e06e-1ad3-174a-e719-8736211a6abf.png "swift_compiler-custom_flags-xcode601.png")

プロジェクトを新規作成すると Preprocessor Macros にはこれまで通り `DEBUG=1` の定義がされているのですが、Other Swift Flags は空っぽです。
Xcode 6 リリース時には最初から `-D DEBUG` が定義済みとなっていると良いですね。

<ins>[追記 2014.09.21] Xcode 6 が正式リリースされたので確認しましたが、残念ながら beta、GM のときと同様空っぽでした。残念。</ins>


## 参考

- [Using Swift with Cocoa with Objective-C - Interacting with C APIs](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-XID_23)
- [ios - #ifdef replacement in swift language - Stack Overflow](http://stackoverflow.com/questions/24003291/ifdef-replacement-in-swift-language)
レイヤーを使うサンプルコード（Cocos Code IDE, Lua言語）


Cocos Code IDEを使ってLua言語でレイヤーを使う基本をまとめました。

|実行環境、IDE|Cocos2d-xバージョン|言語|
|:--|:--|:--|
|Cocos Code IDE Mac OS X 1.0.0-RC2|Cocos2d-x V3.2|Lua言語|

## サンプルコード

プロジェクトの新規作成で作成されるGameScene.luaのGameScene.create()を書き換えます。

レイヤーを作成してシーンへ追加します

```lua:GameScene.lua/GameScene.create
function GameScene.create()
    local scene = GameScene.new()

    local layer = cc.Layer:create()
    scene:addChild(layer)

    return scene
end
```

透明なので実行しても見た目は何も変化がありません。

## 色をつけたレイヤー
LayerColorを使います。

```lua:
local layer = cc.LayerColor:create(cc.c4b(0, 0, 255, 255)) -- 色は青、不透明
scene:addChild(layer)
```

## 四角を描く

LayerColorを使ってサイズと位置を指定してあげます。

```lua:
local layer = cc.LayerColor:create(cc.c4b(255, 0, 0, 255), 80, 80) -- 色は赤、サイズ80x80
layer:setPosition(50, 50)    
scene:addChild(layer)
```


## グラデーションのレイヤー

LayerGradientを使います。

```lua:
local layer = cc.LayerGradient:create(cc.c4b(0, 255, 0, 255), cc.c4b(0, 0, 255, 255))
scene:addChild(layer)
```

この例では、上から下に向けて緑から青へ変化するグラデーションになります。

## レイヤーをシーンから削除する


```lua:
layer:removeFromParent()
```

## レイヤーに名前やタグを設定する

```lua:
layer:setName("name")
layer:setTag(100)
```

## 名前のついたレイヤーを取得する

```lua:
local layerNamed = scene:getChildByName("name")
```

タグで探したい時はgetChildByTag(int)を使います。
IE7でoverflow:hiddenが効かなかった話


2014年にもなってIE7ネタを書くのも気がひけたんですが、同じ症状で詰まっている人に2,3人はいるだろう・・と思ったので書いてみました。ちなみに、既出ネタです。

##今回取り上げるネタ

「overflow:hiddenを指定した親要素内にposition:relativeを指定した子要素を配置すると、IE7ではoverflow:hiddenが機能せずに子要素がはみ出る」というものです。

## 対処法

結論から先に書きますが、この現象は「 **親要素にposition:relativeを指定する** 」で解決できます。

## サンプル

現象を再現可能な簡単なHTMLを書くと、以下のようになります。

```index.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>doesn't work overflow hidden</title>
	<link rel="stylesheet" href="overflow.css">
</head>
<body>
	<div id="container">
		<p class="normal"></p>
		<p class="hidden"></p>
	</div>
</body>
</html>

```

```overflow.css
#container {
	width: 400px;
	height: 400px;
	background: #eeeeee;
	overflow: hidden;
}

p {
	height: 100px;
	position: relative;
}

.normal {
	width: 100px;
	background: #aaaaaa;
}

.hidden {
	width: 600px;
	background: #aaaaaa;
}
```

比較的新しいIE、モダンブラウザだと何の問題もないのですが、IE7で上記のHTMLを表示すると子要素の2つ目のpタグが盛大に飛び出してしまいます。興味がある人は[modern.IE](https://www.modern.ie/ja-jp)あたりで確認してみるといいかもしれません。

このサンプルの場合は、親要素のdivにposition:relativeを設定してやればIE7でも子要素がはみ出すことは無くなります。

##余談

なんでこれで上手くいくのかを調べてみたんですが、結局よくわからず（さじ投げ）。
[SMACSSの作者の方が7年前に書かれていた記事](http://snook.ca/archives/html_and_css/position_relative_overflow_ie)のコメントを一通りみたところ「バグじゃね？？」みたいな流れになっていたので、この辺りで調べるのを諦めました。

おしまい
スプライトを使うサンプルコード（Cocos Code IDE, Lua言語）


Cocos Code IDEを使ってLua言語でスプライトを使う方法をまとめました。

|実行環境、IDE|Cocos2d-xバージョン|言語|
|:--|:--|:--|
|Cocos Code IDE Mac OS X 1.0.0-RC2|Cocos2d-x V3.2|Lua言語|


## サンプルコード

プロジェクトの新規作成で作成されるGameScene.luaのGameScene.create()を書き換えます。

画像ファイルからスプライトを作成して位置を指定、シーンに追加して表示します。

```lua:
function GameScene.create()
    local scene = GameScene.new()

    local sprite = cc.Sprite:create("image.png")
    sprite:setPosition(100, 100)
    scene:addChild(sprite)

    return scene
end
```

画像ファイル名をimage.pngとしています。resディレクトリにimage.pngを置いておきます。

## テクスチャから作成

```lua:
local texture = cc.Director:getInstance():getTextureCache():addImage("texture.png")
local sprite = cc.Sprite:createWithTexture(texture, cc.rect(0, 0, 64, 64))
```

## スプライトフレームから作成

```lua:
local texture = cc.Director:getInstance():getTextureCache():addImage("texture.png")
local spriteFrame = cc.SpriteFrame:createWithTexture(texture, cc.rect(0, 0, 64, 64))
local sprite = cc.Sprite:createWithSpriteFrame(spriteFrame)    
```

## スプライトを画面の中央に表示したい

```lua:
local visibleSize = cc.Director:getInstance():getVisibleSize()
sprite:setPosition(visibleSize.width / 2, visibleSize.height / 2)
```

## スプライトのサイズを取得

```lua:
local size = sprite:getContentSize()
-- size.widthで幅、size.heightで高さがわかる
```

## スプライトの位置を取得

```lua:
local x = sprite:getPositionX()
local y = sprite:getPositionY()
-- または、
local pos = cc.p(sprite:getPosition()) -- pos.xとpos.yでX座標、Y座標がわかります。
-- または、
local x, y = sprite:getPosition()
```


## 拡大・縮小・回転・反転

```lua:
-- 2倍に拡大
sprite:setScale(2.0)
-- X方向に半分に縮小
sprite:setScaleX(0.5)
-- 時計回りに45度回転
sprite:setRotation(45)
-- X方向に反転
sprite:setFlippedX(true)
```

## シーンへ追加、削除

```lua:
-- Zオーダーを指定してレイヤへ追加
scene:addChild(sprite, 10)
-- レイヤから削除
sprite:removeFromParent()
```
実際はレイヤーを作成してその上に配置することが多いでしょうが、レイヤーの場合でも同じです。

## 名前をつける

```lua:
-- 名前をつける
sprite:setName("name1")
-- 名前をつけたスプライトを取得する
local name1Sprite = scene:getChildByName("name1")
```

## タグをつける

```lua:
-- タグをつける
sprite:setTag(10)
-- タグを指定してスプライトを取得する
local name1Sprite = scene:getChildByTag(10)
```

## Z座標を指定する

```lua:
sprite:setPositionZ(1)
```

## 表示・非表示

```lua:
sprite:setVisible(true)
```
falseで非表示

## 透明度

```lua:
-- 半透明
sprite:setOpacity(255/2)
-- 透明
sprite:setOpacity(0)
```

## アンカーポイントの変更

```lua:
-- 中央（デフォルト）
sprite:setAnchorPoint(0.5, 0.5)
-- 左上
sprite:setAnchorPoint(0, 1)
```

## スプライト同士の交差を調べる

```lua:
local result = cc.rectIntersectsRect(sprite1:getBoundingBox(), sprite2:getBoundingBox())
```
交差しているとtrueが返ります。

## 点がスプライトに含まれるかを調べる
```lua:
local position = cc.p(100, 100)
local result = cc.rectContainsPoint(sprite:getBoundingBox(), position)
```

点がスプライトのバウンディングボックス内にあるとtrueが返ります。

## スプライトに独自のデータを設定する

サンプルのソースを見ると、sprite.isPaused = falseなどとしていたので、適当にピリオドのあとにユーザー変数を作れるのだと思います。

## パラパラ漫画のアニメーション

長くなるので別記事で ~~投稿予定~~ です。
投稿しました。[パラパラアニメーション基本（Cocos Code IDE, Lua言語）](http://qiita.com/senchan05/items/b4929484448cf354293d)を参照してください。
線や円を描く（Cocos Code IDE, Lua言語）


Cocos Code IDEを使ってLua言語で、DrawNodeを使った線や円の描き方をまとめました。

|実行環境、IDE|Cocos2d-xバージョン|言語|
|:--|:--|:--|
|Cocos Code IDE Mac OS X 1.0.0-RC1|Cocos2d-x V3.2|Lua言語|

## サンプルコード

プロジェクトの新規作成で作成されるGameScene.luaのGameScene.create()を書き換えます。

```lua:GameScene.lua/GameScene.create
function GameScene.create()
    local scene = GameScene.new()
    
    local node = cc.DrawNode:create()
    node:drawSegment(cc.p(100, 100), cc.p(200, 250), 2, cc.c4f(0, 0, 1, 1))
    scene:addChild(node)
    
    return scene
end
```
実行すると(100, 100)から(200, 250)へ幅2の青い線が描かれます。

## 線を描く

`node:drawSegment(cc.p(100, 100), cc.p(200, 250), 2, cc.c4f(0, 0, 1, 1))`
始点、終点、線幅、色を指定します。
この例では(100, 100)から(200, 250)へ幅2の青い線が描かれます。

## 塗りつぶした円を描く

`node:drawDot(cc.p(100, 100), 50, cc.c4f(1, 0, 0, 1))`
中心、半径、色を指定します。
この例では(100,100)に半径50の赤い円を描きます

## 三角形を描く

`node:drawTriangle(cc.p(100, 100), cc.p(200, 100), cc.p(150, 150), cc.c4f(0, 0, 1, 1))`
3点と色を指定します。

## ポリゴンを描く

```lua
local points = {cc.p(100, 170),cc.p(220, 190),cc.p(220, 250), cc.p(150, 270)}
node:drawPolygon(points, table.getn(points), cc.c4f(0,0,1,1), 4, cc.c4f(0,1,0,1))
```

点の配列、配列のサイズ、塗りつぶしの色、線幅、線の色を指定します。
終点と始点はつながれます。

## ベジェ曲線

`node:drawQuadraticBezier(cc.p(100, 100), cc.p(200, 100), cc.p(150, 150), 10, cc.c4f(1, 0, 1, 1))`
3点、構成する線の本数、色を指定して2次ベジェ曲線を塗りつぶして描きます。

`node:drawCubicBezier(cc.p(100, 170),cc.p(220, 190),cc.p(220, 250), cc.p(150, 270), 10, cc.c4f(1, 0, 1, 1))`
4点、構成する線の本数、色を指定して2次ベジェ曲線を塗りつぶして描きます。

構成する線の本数を増やすと滑らかな曲線になります。

## 画像を消す

`node:clear()`
ruby で標準エラー出力に pp する


こんにちは，久しぶりにバッチを書いている [@isseium](http://twitter.com/isseium) です．

とあるバッチを作っていて標準エラー出力にppしたくなりました．
調べたらこんな感じでした．

```ruby
PP.pp("出力したいメッセージ", STDERR)
```

もっとクールな方法があれば教えてほしいです．


## ついでに
[ppのドキュメント](http://docs.ruby-lang.org/ja/2.1.0/method/PP/s/pp.html)を読むと第三引数で表示幅も変えられるっぽいですね．

```
pp(obj, out = $>, width = 79) -> object
```

# 参考
http://docs.ruby-lang.org/ja/2.1.0/class/PP.html
c++ファイルのダイナミックライブラリdylibの作り方


#1.はじめに
ダイナミックライブラリといえば、WindowsはDLL、Linuxだとsoという拡張子ですが、MacOSではdylibがそれにあたります。さて、今回なぜこのダイナミックライブラリについて記述したかというと、実は、UnityでC++のコードを呼び出したいと考えており、UnityでC#のスクリプトからC++を呼び出すにはC++をダイナミックライブラリに変換して呼び出すという形をとらないといけないらしく、そのために今回調べたのでここでまとめておきたいと思っています。

#2.まずはdylib化するC++のコード
今回はdylib化するのが目的なので、C++のコードで実行する内容は『Hello,World!』と出力するプログラムを作成したいと思います。

```cpp:hello.cpp
#include<iostream>
#include<stdio.h>

using namespace std;

int hello(){
   cout<<"Hello,World!"<<endl;
}
```
***
####ちょっと雑談。
実は、最近Pythonでばっかりコードを書いていたので、今回久しぶりにC++のコードを書いたら`using namespace std;`のところを書いていなかったり、書いてもスペルミスしたり、セミコロンを忘れたりして、今までなら時間を全くとられなかったところで時間をとられてしまいました...
いや、コードはできるだけ毎日書かないといけないっと感じました(^^:)
はい、くだらない話は置いといて次ぎにいきたいと思います←
***

#3.コンパイル
実は、今回このコンパイルをするのにすごく時間をとられてしまいました。『[[mac]Macでsoじゃなくてdylibだった](http://d.hatena.ne.jp/h_primula/20090731/p1)』というブログでC++のファイルを
`gcc -dynamiclib -o test.dylib ./test.cpp`
でdylib化できたと書いてあったので、実行したのが戦いの幕開けでした。
結果は、大量のErrorが返ってくるという...
`gcc`のバージョンが悪いのかと思ってアップグレードしたり、アンインストールして再度インストールしたりしたのですができなくて悩みに悩んでたら、cppのファイルは`gcc`ではなく、`g++`で行うという記事がいくつかヒット...
だけど、`gcc`でできるはず！っと何故か意固地になって実行し続けて数時間後、あきらめて`g++`で実行したら今までの苦労が嘘かのようにささっとできてしまいました(^^:)

そのコマンドはこちら↓
<pre>$ g++ -dynamiclib -o hello.dylib ./hello.cpp</pre>

#4.備考
『#1.はじめに』のところで書いたのですが、UnityでC++を実行するにはまだ道のりがあるのですが、それはまた次の投稿で書きたいと思います。
コーディング規約

# 概要
開発する上でコーディング規約に則って開発を行う。
規約を決めるとソースコードに統一性を持たせ、可読性・保守性を高める。

+ PHPファイルの書式
+ コーディングスタイル

## PHPファイルの書式
##### ◆全般
「PHPコードのみのファイル」は終了タグ（"?>"）を含めてはいけない。終了タグを省略することで、ファイルの最後にある空白文字が出力に影響することを防ぐ。

```php
<?php
echo "Hello";
```

##### ◆字下げ
字下げは空白４文字で行う。タブ文字を利用してはいけない。
##### ◆１行の長さ
１行の長さは８０文字までにすることを目指す。最大でも１２０文字までにする。
##### ◆行末
行末はラインフィード（LF）のみにしなければならない。

## コーディングスタイル
##### ◆変数名
変数名は英数字からなる単語をアンダースコアで区切ったスタイルで記述する。

```php
$string, $base_url
```

##### ◆関数名
関数名は英数字からなる単語をアンダースコアで区切ったスタイルで記述する。英字は全て小文字にする。

```php
delete_null_byte(), is_admin()
```

##### ◆クラス名
クラス名は単語の１文字目を大文字、それ以外を小文字にして連結したスタイル（アッパーキャメルケース）で記述する。

```php
AccountController, ClassLoader
```

##### ◆メソッド名
メソッド名は先頭以外の単語の１文字目を大文字、それ以外を小文字にして連結したスタイル（ローワーキャメルケース）で記述する。

```php
runAction(), getRequest()
```

##### ◆関数/クラス/メソッド定義の波括弧
関数/クラス/メソッド定義の波括弧は、それぞれ独立した行に記述する。

##### ◆文字列

```php
// 文字列リテラル
$a = "文字列";
// 変数の展開
$greeting = "こんにちは $name さん。";
// 文字列の連結
$str = "abc"."def";
```

##### ◆配列

```php
// 数値添字の配列
$sampleArray = array(1, 2, 3, "abc", "def");
// 連想配列
$sampleArray = array(
    "firstKey" => "firstValue",
    "secondKey" => "secondValue",
);
```

##### ◆クラス
+ 開始波括弧は常にクラス名の下に書かなければならない。
+ PHPDocumentorの標準形式のドキュメントブロックが必要。
+ クラス内のコードは、全て空白4文字で字下げする。

```php
/**
 * ドキュメントブロック
 */
class SampleClass
{
    // 空白4文字の字下げを使用
}
```

##### ◆関数およびメソッド
+ メソッド宣言に private, protected, public のいずれかの修飾子を用いてアクセス範囲を指定する。
+ 波括弧は関数名の次の行に書く。関数名と引数定義用の開始括弧の間にスペースを入れてはいけない。

```php
/**
 * ドキュメントブロック
 */
class Foo
{
    /**
     * ドキュメントブロック
     */
    public function bar()
    {
        // 空白4文字の字下げを使用
    }
}
```

##### ◆制御構造
+ if および elseif 系の制御構造は、条件を指定するカッコの前に空白を一つ入れる。
+ 条件指定の括弧を閉じた後も空白をひとつ入れる。

```php
if ($a != 2) {
    $a = 2;
} elseif ($a == 3) {
    $a = 4;
} else {
    $a = 7;
}
```

***
**＜参照＞**
http://framework.zend.com/manual/1.12/ja/coding-standard.html
EXEファイルのバージョン情報を表示(IronPython)

すまん、PowerShell はサポート範囲外なんだ。それゆえ、バッチ＋IronPython で：

```python:showver.cmd
@ipy -x "%~f0" %1 %2 %3 %4 %5 %6 %7 %8 %9 & exit /b

import System
import sys

for path1 in sys.argv[1:]:
    vi = System.Diagnostics.FileVersionInfo.GetVersionInfo(path1)
    if vi is None:
        continue
    print vi.FileVersion,vi.ProductVersion

# vim:set ft=python:
```

実行結果：

```
<MARKEDONE:~/bin>
✏ showver lua52.dll
5.2.3 5.2.3
```
開放閉鎖原則と expression problem

[ソフトウェア原則[1] - OCP(Open-Close Principle)](http://qiita.com/kenjihiranabe/items/f69af3154c1fc01b661c) と云ふ記事に「(引用者註: プログラムをオブジェクト指向で書き直すことによって) 修正の論理を、追加の論理に変換している」と書いてあったのですがそれは公平なものの見方ではないと思ったのでここに記しておきます。

# 開かれてゐると云ふことの真実

元記事にある C++ で書かれた例では、 Shape 親クラスに Circle 子クラスを追加しても既存の Point 子クラスや Line 子クラスの実装を修正する必要はないことが示されてゐます。つまり、Shape クラスは新たな図形の種類を表す子クラスの追加に対して開かれてゐるといふことですね。

しかしこの C++ の例は、図形に対する操作の追加に対しては開かれてゐません。例へば、既にある draw (描画する) といふ操作に加へて translate (平行移動する) といふ操作を足したいと思ったとします。そのためには、Shape 親クラスに `virtual void translate(int x, int y) = 0;` の様なメソッドを足す必要がありませう。そして、Point や Line など全ての子クラスでこのメソッドの実装を追加しなくてはいけません。機能を追加するために既存のコードを修正しなければならなくなってゐるので、これは開放閉鎖原則を満たしてゐるとは言へません。

一方、元記事にある C で書かれた例では、操作を足すのは簡単です。 `void translate(Shape* shape);` の様な関数を足せば済みます。この時、既存の Shape 型や draw 関数を修正する必要はありません。つまり、C の例は新たな操作の追加に対して開かれてゐます。

要するに、ここでは「追加に対して開かれてゐる」ことの方向性が二種類あるのです。

- 図形の種類の追加に対して開かれてゐる
- 図形に対する操作の追加に対して開かれてゐる

元記事の C の例は、前者を満たしてゐませんが後者を満たしてゐます。逆に C++ の例は、前者を満たしてゐますが後者は満たしてゐません。

果たしてこれで「オブジェクト指向万歳」と手放しで喜んでいいのでせうか。

# より開かれた定義

では図形の種類の追加に対しても操作の追加に対しても開かれてゐるプログラムは書けないのでせうか。そのためには、各図形の定義と操作の定義をばらす必要があります。先づ、各図形を単純な構造体として定義します。

```cpp
struct Point {
  int x, y;
};
struct Line {
  Point p1, p2;
};
```

操作の追加に対して開かれてゐる様にするために、各図形が持つ座標等の値は private ではなく public にしておく必要があります。(インスタンス変数そのものを public にする代はりに、インスタンス変数への参照を返す public なゲッターメソッドを用意するのでも構ひません。本質的には同じことです。)

図形に対する操作は、Shape の場合と同様に抽象メソッドと子クラスでのオーバーライドによって定義できます。ただし、Point や Line クラスにメソッドを追加するのではなくて、新しい子クラスとして実装します。

```cpp
class Drawable {
public:
  virtual void draw() = 0;
};

class DrawablePoint : public Drawable, public Point {
public:
  void draw() { /* draw point... */ }
};

class DrawableLine : public Drawable, public Line {
public:
  void draw() { /* draw line... */ }
};
```

(ここでは多重継承を使ひましたが、継承ではなく合成を使ったり、あるいは値そのものではなく参照やポインタを持つ様な設計もあり得ます。)

これで、Point や Line の定義を修正することなく draw といふ操作を追加することができました。さらに translate を追加するのも同様にできます。Point や Line が操作の追加に対して開かれてゐるといふことですね。

そして Point や Line は新しい図形の種類の追加に対しても開かれてゐます。例へば Circle クラスや DrawableCircle クラスを足せばよいのです。既存の Point や DrawableLine を修正することなくできます。

ここでのポイントは、図形(が持つ座標などの値)の定義と操作の定義を別のクラスに分けたことでした。これは残念ながらオブジェクト指向の「値とそれに関連する操作の定義を一つのクラスにカプセル化する」といふ思想とは正反対のやり方です。カプセル化によって値と操作を閉ぢ籠めたことが逆に仇となってしまったのです。

# Expression problem

既存の実装を弄らずに機能を追加する方法論は [expression problem](http://ja.wikipedia.org/wiki/Expression_problem) と呼ばれる様です (とても分かりにくい名前ですね。残念ながら定訳は無い様です)。Haskell で同様の問題に取り組む例が [The Expression Problem - maoeのブログ](http://maoe.hatenadiary.jp/entry/20101214/1292337923) と云ふ記事にあります。

この記事を読むとわかりますが、関数型プログラミングならば expression problem が容易に解決できると言ふわけではありません。元記事の C の例では構造体と共用体によって図形の型を定義してゐましたが、これは関数型プログラミングで一般的に使はれる代数的データ型に相当します。従って、代数的データ型を使って普通に関数型プログラミングをすると C の例と同じく図形の種類の追加に対して開いてゐないプログラムになります。

# 余談

元記事には "open-close principle" と書かれてゐるのですが正しくは "open/closed principle" です。
[Swift]Xcode6.1で確認済み！で確認済み！Hello Worldの次に試したい！超簡単にtext Fieldからキーボードを消す方法

### ！まだSwiftでHello Worldをされていない方は以下の記事を参考に！

[参考サイト](http://qiita.com/g08m11/items/1086995737a446a42411)

## 1・新規ProjectをSingleViewで作成する

ここではtextSampleというプロジェクト名で作成しています。


![スクリーンショット 2014-09-13 21.03.41.png](https://qiita-image-store.s3.amazonaws.com/0/15812/f465388b-4d91-9cc2-1b85-5cf3a611b5ef.png)


![スクリーンショット 2014-09-13 21.03.49.png](https://qiita-image-store.s3.amazonaws.com/0/15812/50370433-da6c-d7a7-c8f8-e672d2c22271.png)


![スクリーンショット 2014-09-13 21.04.06.png](https://qiita-image-store.s3.amazonaws.com/0/15812/468548fa-0f53-c90f-6657-55338ec0203a.png)


![スクリーンショット 2014-09-13 21.04.41.png](https://qiita-image-store.s3.amazonaws.com/0/15812/7e10104e-f69f-fcb6-0ab0-25da89e27bfe.png)



## ２・Main.storyboardを選択する。そしてユーティリティエリアかText Fieldを選び、viewControllerへText FieldをDrag & Dropで貼付ける


![スクリーンショット 2014-09-13 21.05.35.png](https://qiita-image-store.s3.amazonaws.com/0/15812/126bbff0-d723-d741-9c34-953c9d92d702.png)


![スクリーンショット 2014-09-13 21.05.47.png](https://qiita-image-store.s3.amazonaws.com/0/15812/768afeb2-cbf3-e4db-8df9-734694023577.png)


![スクリーンショット 2014-09-13 21.06.11.png](https://qiita-image-store.s3.amazonaws.com/0/15812/b1a20868-c90c-fa96-5031-08b3fef66ea3.png)


## ３・貼付けたText Fieldをctrlキーを押しっぱなしでDragし、view Controllerにくっつけ、delgateを追加する

![スクリーンショット 2014-08-19 0.11.37.png](https://qiita-image-store.s3.amazonaws.com/0/15812/7e4ea95b-bb50-5f6e-dcc5-94d070d4714a.png)

## ４・Text FieldからCtrlを押しっぱなしでViewController.swiftにctrlキーを押しっぱなしでDragし、Outletを追加する

![スクリーンショット 2014-09-13 21.07.24.png](https://qiita-image-store.s3.amazonaws.com/0/15812/fa7985c9-f652-1478-3c16-75fcd25a11c8.png)

![スクリーンショット 2014-09-13 21.07.37.png](https://qiita-image-store.s3.amazonaws.com/0/15812/79f98498-8e74-f41f-fe45-414d4a8a105e.png)



## ５・view Controllerを以下のように修正する。

```swift
//
//  ViewController.swift
//  textSample
//
//  Created by g08m11 on 2014/09/13.
//  Copyright (c) 2014年 Bloc. All rights reserved.
//

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

  @IBOutlet var textLabel: UITextField!
  
  override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
  self.textLabel.delegate = self
  
  
  }

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

  func textFieldShouldReturn(textField: UITextField!) -> Bool{
    
    self.view.endEditing(true)
    println(self.textLabel.text)
    return false
  }


}

```

pointはDelegateを利用するためにデフォルトのclass定義から「class ViewController: UIViewController, UITextFieldDelegate {」に修正している点です。

## ６・Text Fieldに入力、キーボードが消えたら成功

なぜか改行でキーボードが消える。。。
ただ、入力完了後に不要な改行(¥n)などは入っていないので問題なく使えるかと思います。


![text_sample_1.gif](https://qiita-image-store.s3.amazonaws.com/0/15812/a1cda355-d822-185b-f87a-31d80899603e.gif)




<br>
【プログラミング48(/2 -1)手】Command


## ポイント
Commandパターン。
あるオブジェクトに対してコマンドを送ることで
そのオブジェクトのメソッドを呼び出すことができるパターン。

## サンプルコード
以下サイトを参照。
http://morizyun.github.io/blog/ruby-design-pattern-06-command/


## 所感
* ここの命令をオブジェクトにしてしまうことで、  
  実際の呼び出すときにまとめてやったり、実行情報を中央管理して巻き戻したりできるということ。  
  このまとめてということろを除けば、Builderに近い。


## 参考
http://morizyun.github.io/blog/ruby-design-pattern-06-command/
http://www.ie.u-ryukyu.ac.jp/~e085739/java.it.16.html
pecoでgit向けの汎用的なフィルターを2つ作成してみた

## 背景
pecoを導入してからgit向けのフィルターを作成しようと考えていたのですが、gitには多くのコマンドが存在するためにそれぞれのフィルターを作成すると覚えることが大変になったり、ショートカットやグローバルエイリアスを食いつぶしてしまうという問題がありました。


そこで**この2つさえあればgitを便利に使うことができる！**というフィルターを作成してみました。


## コミットやブランチのハッシュをフィルターする
gitを使っていると特定のコミットを指定したくなることが多くあります。
`git reset`,`git rebase`,`git log`,`git show`,`git diff`,`git cherry-pick`などなど

このときに`HEAD`やその1つ前なら`HEAD~`などで対応できますが、多く遡る場合は`git log`をしてからハッシュをコピーして貼り付けるという手間がかかることをしていました。

そこでこれを改善するためにpecoを用いて`git log`からコミットのハッシュを容易に絞り込めるフィルターを作成しました。
入力する際はコミットログで絞り込むこともできますし、ブランチ名からも絞り込むことができます。

```zsh
 function git-hash(){                                    
   git log --oneline --branches | peco | awk '{print $1}'
 }                                                       
```

またグローバルエイリアスかショートカットとして登録するとより便利に使うことができます。
グローバルエイリアスの例

```zsh
alias -g H='$(git-hash)'
```

### 使用例
以下のコマンドを実行するとpecoのフィルターが実行されます。

`git diff`のように複数のハッシュを選択する必要がある場合にはpecoのフィルタリング画面で`C-SPC`を押すことにより複数選択が可能です。

```zsh
$ git diff H
```


## 編集されたファイルをフィルターする
主に`git add`のために使いますが、もちろん`git checkout`やその他のコマンドの`--`とも使うことができます。

```zsh
function git-changed-files(){                 
  git status --short | peco | awk '{print $2}'
}                                             
```
先ほどと同様にグローバルエイリアスかショートカットとして登録するとより便利に使うことができます。
グローバルエイリアスの例

```zsh
alias -g F='$(git-changed-files)'
```

### 使用例
以下のコマンドを実行するとpecoのフィルターが実行されます。
`git add`も先ほどと同様に`C-SPC`複数ファイルをadd可能です。

```zsh
$ git add F
```


## その他参考
上記ではグローバルエイリアスに登録して利用する方法を紹介しましたが、他にもショートカットとして登録するなど別の使い方があるので自分にあった方法を探してみてください。

ショートカットの登録方法などは以下参照
[pecoの基礎の応用](http://qiita.com/sona-tar/items/47800e52f972b17f73bb)
pecoの基礎の応用

こちらで[pecoの基礎の基礎](http://qiita.com/xtetsuji/items/05f6f4c1b17854cdd75b)が紹介されており、またQiitaの[pecoタグ](http://qiita.com/search?utf8=%E2%9C%93&sort=rel&q=tag%3Apeco)には多くの応用例が紹介されています。

今回はこれらの間に位置する**pecoの基礎の応用**として、 よりpecoを活かすための**フィルタした結果の利用方法**をいくつか紹介したいと思います。


こちらはzshを前提にしています。

### フィルタ結果を標準出力
一番基本的な使い方です。実際このような使い方は少ないですね。

```zsh
$ ls
bin/  config/  elpa/  etc/  init.el*  package.d/  README.md  recipes/
```
```zsh
$ ls | peco
```
```zsh
# ここからpeco
QUERY> read 
README.md
# ここまでpeco
README.md
```

### パイプに渡す
xargsを使ってパイプで渡すこともできます。

```zsh
$ ls
bin/  config/  elpa/  etc/  init.el*  package.d/  README.md  recipes/
```
```zsh
$ ls | peco | xargs ls -l
```
```zsh
# ここからpeco
QUERY> read 
README.md
# ここまでpeco
-rw-rw-r--  1 sona sona  797 Aug 30 00:29 README.md
```

### 変数に代入して再利用する
$()で囲むと実行結果が返されるため、それを変数に代入して再利用することができます。

```zsh
$ ls
bin/  config/  elpa/  etc/  init.el*  package.d/  README.md  recipes/
```
```zsh
$ README=$(ls | peco)
```
```zsh
# ここからpeco
QUERY> read 
README.md
# ここまでpeco
ls -l $README
-rw-rw-r--  1 sona sona  797 Aug 30 00:29 README.md
```


### pecoを組み合わせたオリジナルの関数を作成してコマンドとして実行
これによりパイプでpecoに出力結果を渡す処理をコマンドに入力せずにpecoが利用できるようになります。

zshに以下の設定を追加します。

```zsh
function ls-peco() {
  FILTERD_LS=$(ls | peco)
  echo $FILTERD_LS
}
```
```zsh
$ ls
bin/  config/  elpa/  etc/  init.el*  package.d/  README.md  recipes/
```
作成した関数をコマンドとして実行

```zsh
$ ls-peco
```
```zsh
# ここからpeco
QUERY> read 
README.md
# ここまでpeco
-rw-rw-r--  1 sona sona  797 Aug 30 00:29 README.md
```

### 作成した関数をグローバルエイリアスに登録
zshには[グローバルエイリアス](http://qiita.com/hatchinee/items/5f4c815285c0a1464288)という便利な機能があります。
これにより1文字入力するだけでpecoを組み合わせた機能を呼び出すことができます。

zshに以下の設定を追加します。

```zsh
function ls-peco() {
  FILTERD_LS=$(ls | peco)
  echo $FILTERD_LS
}
alias -g L='$(ls-peco)'
```
```zsh
$ ls
bin/  config/  elpa/  etc/  init.el*  package.d/  README.md  recipes/
```
```zsh
$ ls -l L
```
```zsh
# ここからpeco
QUERY> read 
README.md
# ここまでpeco
-rw-rw-r--  1 sona sona  797 Aug 30 00:29 README.md
```


### 作成した関数をショートカットに登録
こちらもショートカット1発でpecoの機能が呼び出せるようになります。上記のグローバルエイリアスとは異なり、コマンドの実行は行われずコマンドの編集を継続することができます。

zshに以下の設定を追加します。

```zsh
function ls-peco() {
  FILTERD_LS=$(ls | peco)
  BUFFER=${BUFFER}${FILTERD_LS}
  CURSOR=$#BUFFER
}
zle -N ls-peco
bindkey "^q" ls-peco
```
```zsh
$ ls
bin/  config/  elpa/  etc/  init.el*  package.d/  README.md  recipes/
```
```zsh
$ ls -l ここでCtrl-qを入力
```
```zsh
# ここからpeco
QUERY> read 
README.md
# ここまでpeco
$ ls -l README.md
```

## pecoの基礎の応用の応用
あとは[Bash - pecoの基礎の基礎 - Qiita](http://qiita.com/xtetsuji/items/05f6f4c1b17854cdd75b)にも書いてありますが、みんなの応用例を[pecoタグ](http://qiita.com/search?utf8=%E2%9C%93&sort=rel&q=tag%3Apeco)から探して上記の中で自分に適した入力方法にカスタマイズするとよりpecoを活かせると思います。

Git向けの応用例です。
[pecoでgit向けの汎用的なフィルターを2つ作成してみた](http://qiita.com/sona-tar/items/fe401c597e8e51d4e243)
eclipse opengl

自動生成されたソースを編集し、GLUTなプログラムに書き換える。

ビルドを行う前に、プロジェクトのプロパティを開きます。(作成したプロジェクトを右クリックして「プロパティ」をクリック)
「C/C++ビルド」→「設定」を開き、「GCC C Linker」の「ライブラリー」に
glut
GLU
GL
を追加します。
これで、GLUTプログラムのビルド・実行ができます。
Xamarinで遊ぶ(5): ダミーデータの表示


[←前](http://qiita.com/paming/items/7317ea756a250143912e)

元々やっていた、「サンプルコードのTaskyを自作する」から寄り道してしまっているので、本題に戻っていきます。
今日は、Taskモデルと管理しているManagerクラスを作ってダミーデータを表示するまでです。



```csharp:MyTask.cs
using System;

namespace MyTasky.Core
{
	public class MyTask
	{
		public MyTask ()
		{
		}
		public int ID{get;set;}
		public string Name{ get; set; }
		public string Notes{get;set;}
		public bool Done{ get; set; }
	}
}
```

```csharp:MyTaskManager

namespace MyTasky.Core
{
	// ADOを使うのは後回し。
	public static class MyTaskManager
	{
		private static IList<MyTask> tasks;
		static  MyTaskManager ()
		{
			tasks = new List<MyTask>();
		}
		public static IList<MyTask> getTasks(){
			return tasks;
		}
		public static void saveTask(MyTask task){
			tasks.Add (task);
		}
	}
}
```

サンプルコードはADOを使っているけど、まずはメンバ変数に持たせるだけにしました。 インタフェースを意識して書くのはJavaっぽいですね。C#の世界では関数名の頭は「大文字始まり」が作法のようですが、こればっかりはなんとも慣れず、小文字で書き始める事が多いです。
Objective-Cの世界の「先頭大文字は大体クラスの宣言、他は小文字始まり」に慣れてるから、なのですが。


```csharp:HomeViewController.cs

namespace MyTasky.Screens
{

	public partial class HomeViewController : DialogViewController
	{
		IList<MyTask> tasks;
		public HomeViewController () : base (UITableViewStyle.Grouped, null)
		{
			this.Initialize ();
		}
		public void Initialize(){
			// MyTaskManagerにダミーデータを投入
			foreach (int i in Enumerable.Range(0,100)) {
				MyTask task = new MyTask ();
				task.ID = i;
				task.Name = ""+i;   // 文字列の+演算子を使って、数字を文字にいている。
				MyTaskManager.saveTask (task);
			}
		}

		public override void ViewWillAppear(bool animated ){
			base.ViewWillAppear (animated);
			this.PopulatedTable ();
		}

		private void PopulatedTable(){
			this.tasks = MyTaskManager.getTasks ();
			var rows = from t in this.tasks
			           select new StringElement (t.Name, t.Notes);
			var s = new Section ();
			// var s = new Section (){rows}; という書き方も出来たけどwarningが出た。
			s.AddAll (rows);
			this.Root = new RootElement ("MyTasky"){ s };
		}
	}
}
```

Listを使おうとしたらSystem.CollectionsやGenericをusingで宣言しておく必要があります。また対応するアセンブリがプロジェクトの「参照」に入っていなければ、これも追加する必要があります。この辺もJavaっぽいです。

文字列の扱いは、+演算子での連結が出来るので、とても楽に作れます。
また、"0〜10までの数字の列挙"は、``Enumerable.Range(0,10)``で生成できます。

DialogViewControllerはUITableViewControllerを継承しているので、各タイミングで呼ばれるメソッド viewWillAppear等はそのままoverrideして書き換える事が出来ます。
大きく違うのは、表示するセクションやセルの情報を、Rootというメンバ変数に格納している点。なので、UITableViewControllerのように、"何行あるのか"とか"そのセルの高さは"とか"UITableViewCellのインスタンスを返す"とか、細かな処理(UITableViewDatasourceインタフェースのメソッドで提供していた事)をさっくり省略する事が出来るので、ソースがかなりすっきり出来るのが良いところです。設定画面やモック作成等では大活躍しそうです。
ただし、表示するデータの量（行数）が多いほど、この仕組みはパフォーマンスに影響が出てくると思います。なので、行数が増えたりUIを凝ったりしてパフォーマンスが悪化した時には、DialogViewControllerではなくUITableViewController等に書き換える時が来るかもしれません。



[ここまでのソース](https://github.com/taktamur/MyTasky/tree/v3)
Ruby 各インストールコマンド高速(並列)化まとめ


個人用にまとめてみました。
Ansibleで作って壊したりして試しているとこの辺りで時間がかかるので。。

# rbenv
## やりかた
```
MAKE_OPTS="-j 4" rbenv install 2.0.0-p481
```

## ご参考
[rbenv で Ruby 2.0.0 をインストールするときに並列コンパイルする](http://qiita.com/yoshiori/items/89a3807bc394d6bbb7be)


# bundle install
##やりかた
bundlerはv1.5以上であること。

```
bundle install --jobs=4
```

or

```
bundle install -j4
```

予め設定しておくと、指定しなくてよい。

```
bundle config --global --jobs 4
bundle install
```

## ご参考
[Bundlerで並列処理？？bundle installを爆速で処理する方法。](http://qiita.com/camelmasa/items/5ca27ab398f105f86c76)

# rvm
最近使ってなくて未確認だけど、一応。
## やりかた
```
rvm install 1.9.3 -j 3
```
## ご参考
[cheat sheets. rvm](http://cheat.errtheblog.com/s/rvm)
サウンド再生の基本（Cocos Code IDE, Lua言語）


Cocos Code IDEを使ってLua言語でサウンドを再生する基本をまとめました。

プロジェクトの新規作成で作られるサンプルプログラムから、サウンドに関する内容をまとめました。そのままではなく、若干の修正をしています。

|実行環境、IDE|Cocos2d-xバージョン|言語|
|:--|:--|:--|
|Cocos Code IDE Mac OS X 1.0.0-RC1|Cocos2d-x V3.2|Lua言語|

## BGM

### BGMの再生

```lua:
local bgmPath = cc.FileUtils:getInstance():fullPathForFilename("background.mp3") 
cc.SimpleAudioEngine:getInstance():playMusic(bgmPath, true)
```

trueをfalseにするとループしません。事前読み込みは`cc.SimpleAudioEngine:getInstance():preloadMusic(bgmPath)`で行います。

### BGMの停止

```lua:
cc.SimpleAudioEngine:getInstance():stopMusic()
```


### その他

一時停止はpauseMusic()、再開はresumeMusic()、巻き戻しはrewindMusic()を使います。
isMusicPlaying()で再生中かどうかを判別。
setMusicVolume(float)で0.0から1.0でボリュームを設定。

## 効果音

### 効果音の事前読み込み
効果音は事前に読み込まないで使用すると、再生までに若干の遅れが出て違和感を感じることがあります。

```lua:
local effectPath = cc.FileUtils:getInstance():fullPathForFilename("effect.wav")
cc.SimpleAudioEngine:getInstance():preloadEffect(effectPath)
```

### 効果音の再生

```lua:
local effectID = cc.SimpleAudioEngine:getInstance():playEffect(effectPath)
```

effectIDは再生を停止する時に使います。

### 効果音の停止

```lua:
cc.SimpleAudioEngine:getInstance():stopEffect(effectID)
```
【プログラミング48(/2 -1)手】Proxy


## ポイント
Proxyパターン。
処理負荷を軽減させるために、間に処理をはさむパターン。


## サンプルコード
以下サイトと同じコード。
http://morizyun.github.io/blog/ruby-design-pattern-08-proxy/

```ruby:Proxy.rb
require 'etc'

class BankAccount
  attr_accessor :balance

  def initialize(balance)
    @balance = balance
  end

  def deposit(amount)
    @balance += amount
  end

  def withdraw(amount)
    @balance -= amount
  end
end

class BankAccountProxy
  def initialize(real_object, owner_name)
    @real_object = real_object
    @owner_name = owner_name
  end

  def balance(amount)
    check_access
    @real_object.balance(amount)
  end

  def deposit(amount)
    check_access
    @real_object.deposit(amount)
  end

  def withdraw(amount)
    check_access
    @real_object.withdraw(amount)
  end

  def check_access
    if (Etc.getlogin != @owner_name)
      raise "Illegal access: #{@owner_name} cannot access account."
    end
  end
end

account = BankAccount.new(100)
proxy = BankAccountProxy.new(account, "onody")
puts proxy.deposit(50)
puts proxy.withdraw(100)

```

## 所感
* 要はラッパー。Decorator、Adapterとの違いは目的。

## 参考
http://morizyun.github.io/blog/ruby-design-pattern-08-proxy/