OmniAICreator/Qiita-1.07M huggingface dataset:
UIViewを表から裏に回転させるアニメーション

自分の検索の仕方が悪かったのか、UIViewControllerのビュー全体が回転してしまうサンプルしか見つけられなかったため、ビューに追加されたUIButtonやUILabelなどの特定のオブジェクトを回転させるアニメーションを作成してみました。

## 参考にした所

[フリップアニメーションでビューを切り替える](http://qiita.com/edo_m18/items/45fcbc67154eb68ef469)

https://github.com/masakihirokawa/objc-ui-view-animation-transition/tree/master/UIViewAnimationTransition

# 使い方

[GitHub](https://github.com/hmuronaka/FlipAnimationSample)より、ソースをダウンロードし、FlipAnimation.hと.mを利用先のプロジェクトにコピーします。

以下のソースは、表のビューfrontLabelと裏のビュー backLabelを交互に回転させる例です。


```objc
@interface ViewController ()
@property(nonatomic, strong) UILabel* frontLabel;
@property(nonatomic, strong) UILabel* backLabel;
@property(nonatomic, strong) FlipAnimation* flipAnimator;
@property(nonatomic, assign) BOOL isFront;
@end

@implementation ViewController

// コントロールの配置
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.isFront = YES;
    
    CGRect frame = CGRectMake(100, 100, 100, 100);
    self.frontLabel = [[UILabel alloc] initWithFrame:frame];
    [self.frontLabel setTextAlignment:NSTextAlignmentCenter];
    [self.frontLabel setText:@"FRONT"];
    [self.frontLabel setBackgroundColor:[UIColor blueColor]];
    
    self.backLabel = [[UILabel alloc] initWithFrame:frame];
    [self.backLabel setTextAlignment:NSTextAlignmentCenter];
    [self.backLabel setText:@"BACK"];
    [self.backLabel setBackgroundColor:[UIColor yellowColor]];
    
   
    UIButton* flipButton = [[UIButton alloc] initWithFrame:CGRectMake(100, 250, 100, 100)];
    [flipButton setBackgroundColor:[UIColor redColor]];
    [flipButton setTitle:@"Flip" forState:UIControlStateNormal];
    [flipButton addTarget:self action:@selector(pressedFlip:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.view addSubview:self.backLabel];
    [self.view addSubview:self.frontLabel];
    [self.view addSubview:flipButton];
}

// ボタンが押されたら、回転のアニメーションを行う.
// 押されるたびに、表→裏、裏→表に回転します。
-(void)pressedFlip:(id)sender {
    UIView* fromView;
    UIView* toView;
    if( self.isFront) {
        self.isFront = !self.isFront;
        fromView = self.frontLabel;
        toView = self.backLabel;
    } else {
        self.isFront = !self.isFront;
        fromView = self.backLabel;
        toView = self.frontLabel;
    }
    self.flipAnimator = [[FlipAnimation alloc] initWithDuration:1.0 fromView:fromView toView:toView];
    // 裏になったビューを削除する場合はYESにする
    self.flipAnimator.isRemoveFromViewAfterFlipped = NO;
    [self.flipAnimator startAnimation];
}
```

# 注意事項

FlipAnimationクラス内では、一時的なビューcontainerに回転するビューを登録しているので、環境によっては動作しない事もあります。

[GitHub](https://github.com/hmuronaka/FlipAnimationSample)よりサンプルをダウンロードできます。
任意のタイミングで、UITableViewCellのCGRectを取得する


任意のタイミングで位置を取得し、Actionさせたい場面があったので、調べたことをメモ。

```objective-C
NSIndexPath *indexpath = [NSIndexPath indexPathForRow:0 inSection:0];

CGRect rectOfCellInTableView = [tableview rectForRowAtIndexPath:indexpath];
CGRect rectOfCellInSuperview = [tableview convertRect:rectOfCellInTableView toView:[tableview superview]];

CGPoint pointer = CGPointMake(rectOfCellInSuperview.size.width, rectOfCellInSuperview.size.height);
```

上記で、正しい座標を取得出来ます。

[参考サイト stackoverflow](http://stackoverflow.com/questions/6623957/get-cell-position-in-uitableview)
クラウドストレージのクライアントアプリ仕様比較 (Dropbox / Google Drive / Copy) on Mac


## 概要

dotfilesやら各アプリの設定ファイルやらを置くのに適しているクラウドストレージはどれかを調べたかった。

十分に検証してないので間違いがあるかもしれません。

## Specs

### 同期元

MacBook Air 13-inch, Mid 2011; OS X 10.9.4

### 同期先

iMac 20-inch, Early 2008; OS X 10.9.4

### クライアントアプリ

		| バージョン
--------------	|---------------
[Dropbox](https://www.dropbox.com/)	| 2.8.2
[Google Drive](https://drive.google.com/)| 1.16.7009.9618
[Copy](https://www.copy.com/)		| 1.45.0363

## 一覧
								| Dropbox		| Google Drive    | Copy
----------------------------	|-------------	|-----------------|------
同期する対象の選択				| フォルダごと	| トップフォルダごと | ファイルごと
同期選択時、新規フォルダ			| 同期する		| 同期しない        | 同期する
ハードリンク						| 維持しない		| 更新日時が新しい方のみ同期され、一方のファイルは消える？ | 維持しない
シンボリックリンク				| 維持しない(通常ファイル化)| 同期されない | 維持する
通常ファイルのパーミッション(6xx)	| 644固定		| 600固定 | 700固定
実行ファイルのパーミッション(7xx)	| 755固定		| 600固定 | 700固定
競合ファイルの扱い				| 更新日時が古い方は別ファイル化 (xxの競合コピー) | 更新日時が古い方に[競合]と名前をつける | バージョン履歴に残る
競合ファイルの内容				| 更新日時が新しい方の内容になる | 更新日時が新しい方の内容は無くなる？ | 更新日時が新しい方の内容になる

## 評価

### Dropbox

通常ファイルと実行ファイルのパーミッションの違いを区別できるのは3つの中ではDropboxのみでした。

### Google Drive

実行ファイルの実行属性が消えてしまったり、シンボリックリンクのファイルが消えてしまったり、競合ファイルの扱いが変だったりするので、システムファイル等は置かないほうがいいと思います。

### Copy

シンボリックリンクが同期先でもシンボリックリンクのままだったのはCopyだけでした。
ただ、通常ファイルにも実行属性が付くのはなんか嫌です。
競合ファイルを同一ファイルのバージョン履歴に残すので、クライアントアプリかWebインタフェースからしか競合の確認ができません。

## 結論

結局Dropboxがいちばん無難かも。
JavaScriptのモジュールの書き方


モジュールの汎用的な書き方を整理したかったのでPromiseライブラリであるQをお手本に定義の基本的な処理だけを抜粋してみました。

# お手本

https://github.com/kriskowal/q

# 定義の書き方だけを抜粋

## 1.基本

まずは基本構造として、モジュールを定義する関数とエクスポートする関数を分けている。
この時点でかなりわかりやすくてクリーンな感じがします。

```javascript:MyModule.js
(function(definition){// 定義する関数を引数にとり、エクスポート処理を行う関数

	// モジュールのエクスポート
	MyModule = definition();
})(function(){// 実際の定義を行う関数
	'use strict';
	
	var MyModule = function MyModule(){};

	MyModule.prototype = {
		//...
	}

	// 定義したモジュールを返却する
	return MyModule;
});
```

## 2.各モジュールローダーにあわせたエクスポート処理

環境がNode.jsだったりブラウザだったり、モジュールローダーがCommonJSやRequireJSだったりscript要素だったりしても大丈夫。
Qではbootstrapなどにも対応していますが省略しています。

```javascript:MyModule.js
(function(definition){// 定義する関数を引数にとる
	// ロードされた文脈に応じてエクスポート方法を変える

    // CommonJS
    if (typeof exports === "object") {
        module.exports = definition();

    // RequireJS
    } else if (typeof define === "function" && define.amd) {
        define(definition);

    // <script>
    } else {
        MyModule = definition();
    }

})(function(){// 実際の定義を行う関数
	'use strict';
	
	var MyModule = function MyModule(){};

	MyModule.prototype = {
		//...
	}

	// モジュールのエクスポート
	return MyModule;
});
```

# プロジェクトでの利用

## CommonJS


```javascript
var MyModule = require('MyModule.js');
// use MyModule
```


## RequireJS

```javascript
require(['MyModule'], function(MyModule) {
// use MyModule
});
```


## script要素での利用
```html
<script src="MyModule.js"></script>
<script>
// use MyModule
</script>
```

# 関連情報

RequireJSなど用にモジュール化したものを非同期で読ませないで良い感じでパッケージ化するツール。

- [RequireJS等はもう古い。WebPackとは？](http://ameblo.jp/ca-1pixel/entry-11884453208.html)

これで依存関係を管理しながら、開発環境ではモジュールローダーを利用しファイルを分けてデバッグしやすくし、本番環境では1つにビルドしてリリースということができそうです。
goのインターフェイスとポインタって難しいな！

```hoge.go
package main

import "io"
import "os"
import "fmt"

func end(fd *io.Closer){
	fd.Close()
}

func main(){
	fd,_ := os.Create("hoge.txt")
	fmt.Fprintln(fd,"ahahaha")
	end(fd)
}
```

コンパイルすると

```text
[C:gosrc]
$ go run hoge.go
# command-line-arguments
.\hoge.go:8: fd.Close undefined (type *io.Closer has no field or method Close)
.\hoge.go:14: cannot use fd (type *os.File) as type *io.Closer in argument to end:
        *io.Closer is pointer to interface, not interface
[C:gosrc]
$
```

なぜだ、os.File には、Close というメソッドがあるじゃないか。io.Closer の条件になぜ合致しないんだ。コンパイルをあきらめるなよ、もっと熱くなれよ。

ためしに、関数 end の引数の型をポインタではなく、値にすると

```hoge.go
package main

import "io"
import "os"
import "fmt"

func end(fd io.Closer){
	fd.Close()
}

func main(){
	fd,_ := os.Create("hoge.txt")
	fmt.Fprintln(fd,"ahahaha")
	end(fd)
}
```

なんか、うまく動いたっぽい。

```
[C:gosrc]
$ go run hoge.go
[C:gosrc]
$ type hoge.txt
ahahaha
```

エラーメッセージをよく読むと、<b>「*io.Closer はインターフェイスへのポインタであって、インターフェイスそのものちゃうで。<del>あほちゃうか？</del>」</b>と書いてあるなぁ。そうか、インターフェイスのポインタはインターフェイスとみなしてくれないのか。難しいな！

# 追記

[[教えて]Go言語:なぜインターフェイスはポインタにできない?](http://qiita.com/suin/items/68ed7020d21dca047a73)という記事があった。なるほど、インターフェイスのポインタには、インターフェイスとしての機能はないか。
rbenv でインストールした複数の Ruby の gems ディレクトリを共有化する

rbenv でインストールした Ruby の gems ディレクトリは、 Ruby のバージョンごとに分かれている。たとえば、 Ruby 2.1.{1,2} をインストールすると以下のように2つのディレクトリができる：

- `~/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0`
- `~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0`

パスに現れるひとつめのバージョン番号は Ruby 自体のバージョンを表し、ふたつめのバージョン番号は gem の互換性のあるバージョンを表す。いずれも2.1.0になっているのは、 Ruby 2.1.0 向けにビルドされた gem が Ruby 2.1.{1,2} でもロードできるという意味である。

互換バージョンが一致するなら、 gems ディレクトリを共有しても問題はない。分かれているのはディスクスペースの無駄であるし、 Ruby のバージョンを上げるごとに gem をインストールし直す手間もかかる。

rbenv のプラグイン [rbenv-communal-gems](https://github.com/tpope/rbenv-communal-gems) を使うと、 rbenv でインストールされた Ruby の gems ディレクトリを共有化することができる。

```bash
# インストール
mkdir -p ~/.rbenv/plugins
git clone https://github.com/tpope/rbenv-communal-gems ~/.rbenv/plugins/rbenv-communal-gems

# 実行
rbenv communize --all
```

実行すると `~/.rbenv/versions/*/lib/ruby/gems/` が `rm -rf` され、 `~/.rbenv/gems/` へのシンボリックリンクで置き換えられる。

なお、 rbenv-communal-gems を使うと環境変数 `GEM_HOME` が無視されるようになるので注意：[Ruby - rbenv-communal-gems を使うと GEM_HOME が無視される - Qiita](http://qiita.com/uasi/items/86d9751e541d469140da)
SplunkのSDKで自分で定義したfieldを使うためのメモ

# 概要
splunkのruby sdkを使ったツールを作っているんだけど、ドキュメントがわかりづらすぎて、ハマったので、その設定のメモ。

```rb
stmt = "search sourcetype=ssl_access_log-too_small source=*confluence* earliest=-1d@d latest=@d | head 10"
stream = service.create_oneshot(stmt, :output_mode=>"json")
```

上記のような検索をsdkで投げると、きちんとレスポンスが返ってくるが、

```rb
stmt = "search sourcetype=ssl_access_log-too_small source=*confluence* latency>1000 earliest=-1d@d latest=@d | head 10"
```

このようにlatency>1000というのを加えるとレスポンスが帰ってくなくなっていた。ちなみにweb interfaceから検索すると普通に検索が返ってくる。

# 試行錯誤
最初は正規表現周りかと思って、いろいろと調査していたのだが、全然わからなかった。やればやるほどわからなくなっていった。

web interfaceから投げているときに、たまに返ってこないことを発見する。どうやらappの指定をしていないときに返ってきていないらしい。そこで、latencyというfieldは自分で指定したfieldだと思いだした。

[Splunk SDK fields - Splunk Community](http://answers.splunk.com/answers/136754/splunk-sdk-fields)

このへんに載っている、permissionの変更などを試してみたが、効果はなかった。

# namespace
半日ほど試行錯誤した結果、appを指定するためにnamespaceというのを指定する必要があるらしいことがわかった。

[Overview | Splunk SDK for Ruby](http://dev.splunk.com/view/SP-CAAAENQ#namespaces)

appの名前とusernameの組み合わせという断片的な情報はいろんなページにあるが、肝心の指定方法は以下にしか書いてなかった（かなり探した）

[How to connect to Splunk | Splunk SDK for Ruby](http://dev.splunk.com/view/ruby-sdk/SP-CAAAEP6)

```rb
ns = Splunk::namespace(:sharing => "app", :app => "testrubySS")
svc = Splunk::connect(:username => 'admin', :password => 'changed', :namespace => ns)
```

これをつかって、

```rb
ns = Splunk::namespace(:sharing => "app", :app => "myappname")
service = Splunk::Service.new(:host => "localhost",
                              :port => 8089,
                              :username => "username",
                              :password => "password",
                              :namespace => ns).login()
```

こういった感じに書くことで自分で定義したfieldも使うことができた。
rbenvとrubyのインストール方法(メモ)

# Rubyのビルドに必要なもの
```bash
sudo apt-get install git curl g++ zlib1g-dev libssl-dev libreadline-dev libyaml-dev libxml2-dev libxslt-dev libffi-dev bison
```

# rbenvのインストール
```bash
git clone git@github.com:rbenv/rbenv .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
```

# ruby-buildのインストール
```bash
mkdir -p ~/.rbenv/plugins
cd ~/.rbenv/plugins
git clone git@github.com:rbenv/ruby-build
```

# rubyのインストール
```bash
rbenv install --list
rbenv install 2.3.1
```

インストールには時間がかかる

```bash
rbenv rehash
rbenv global 2.3.1
```

# rubyのインストールを確認
```bash
ruby -v
```
独自validate書いてて、l18nに対応させた


あれ、どうすればいいんだ?と一瞬悩んだが、シンプルな話でした。


```ruby:email_validator.rb
            errors.add(:email, I18n.t('errors.messages.notmatch'))
```

```yaml:ja.yml
          messages:
            notmatch: " 確認用メールと一致しません"
CreateJSでcanvasに複数の画像を読み込み表示する方法

CreateJSを用いてcanvasに複数の画像を読み込んで表示する方法です。
※[こちら](http://qiita.com/pikoshimame/items/5a793e5db804ffc4ad2b)の応用編

```js:javascript
window.onload = function(){

	var stage = new createjs.Stage('canvas');
	
	// キューオブジェクトを生成
	var queue = new createjs.LoadQueue();
	
	// 各ファイル読み込み完了時
	queue.addEventListener('fileload', function(e){
		// 画像の場合
		if(e.item.type === createjs.LoadQueue.IMAGE){
			var bitmap = new createjs.Bitmap(e.result);
			stage.addChild(bitmap);
		}
	});
	
	// 全ファイル読み込み完了時
	queue.addEventListener('complete', function(e){
		alert('全ファイル読み込み完了');
	});
	
	// 読み込み実行
	queue.loadManifest([
		{id:'image_1', src:'images/image_1.png'},
		{id:'image_2', src:'images/image_2.png'},
		{id:'image_3', src:'images/image_3.png'},
		{id:'image_4', src:'images/image_4.png'},
		{id:'image_5', src:'images/image_5.png'}
	]);
	
	createjs.Ticker.setFPS(30);
	createjs.Ticker.addEventListener('tick', function(){
		stage.update();
	});

}
```

e.resultで、読み込んだファイルが取得出来る。
e.item.typeで、読み込んだファイルの種類が取得出来る。
e.item.idで、読み込み実行時に設定したidが取得出来る。

また、全ファイルが読み込み終わった際に
queue.getResult(設定したid);
で、読み込んだ各ファイルが取得出来る。
apache で、何がどうあろうと,/に飛ばす設定

何がどうあろうと,/に飛ばす設定。

sorryサーバとかで。
#sorryサーバ、httpd.conf
    RewriteEngine On

    ### Exclude maintenance files
    RewriteCond %{REQUEST_URI} !^\/index\.html
    RewriteCond %{REQUEST_URI} !^\/sorry\.png
    RewriteCond %{REQUEST_URI} !^\/yps\.css
    RewriteCond %{REQUEST_URI} !/css/
    RewriteCond %{REQUEST_URI} !/img/
    RewriteCond %{REQUEST_URI} !^/$


    ### Redirect to maintenance files
    RewriteRule ^/.* / [R=302,L]
    RewriteRule ^/index.html / [R=302,L]
iOS 8 beta インストールメモ

## はじめに

このメモは **iOS 8 beta 3** で確認しています。

## iOS Dev Centerからダウンロード

iOS 8 betaはAppleのiOS Dev Centerよりダウンロードできます。
モデル番号というものはだいたい **iPhoneの背面** に書いてあります。たぶん。

## iPhoneのバックアップ取得

必ず取りましょう、iTunesから取得できます。
復元する際もiTunesからになります。

iCloudではなく **コンピュータ** に **iPhoneバックアップを暗号化** して取得してください。

### バックアップファイルの保存先

* **Mac：~/ライブラリ/Application Support/MobileSync/Backup/**
「~」はユーザのホームフォルダを表します。ホームフォルダに「ライブラリ」が表示されない場合は、「option」キーを押しながら「移動」メニューをクリックします。

* **Windows XP：¥Documents and Settings¥[ユーザー名]¥Application Data¥Apple Computer¥MobileSync¥Backup¥**
「Application Data」フォルダにすばやくアクセスするには、「スタート」をクリックして「ファイル名を指定して実行」を選択します。「%appdata%」と入力し、「OK」をクリックします。

* **Windows Vista、Windows 7 および Windows 8：¥ユーザー¥(ユーザー名)¥AppData¥Roaming¥Apple Computer¥MobileSync¥Backup¥**
「AppData」フォルダにすばやくアクセスするには、「スタート」をクリックします。検索バーで「%appdata%」と入力し、「Return」キーを押します。

>このバックアップファイルを削除してしまうと、最新の状態に戻せなくなるそうです。iTunesのバックアップは上書きされるという仕様になっているそうで、iOS7に戻すまでは注意しましょう。

## iOS8のインストール

iTunesのiPhoneの画面より、アップデートボタンを

* MacならOptionキーを押しながらクリック
* WindowsならShiftキーを押しながらクリック

すると、ファイルを選択する画面が表示されますので、
先ほどダウンロードし解凍したファイルを選択してください。

## 待つ

あとはiTunesさんとiPhoneさんががんばってくれると思います。

* * *

参考：[iOS 8ベータ版をインストールする方法｜携帯総合研究所](http://xenonews.blog50.fc2.com/blog-entry-6300.html)
参考：[iTunes：iOS のバックアップについて](http://support.apple.com/kb/ht4946?viewlocale=ja_JP)
[メモ]PHP5.3 遅延静的束縛


PHP5.3以降から遅延静的束縛と言う機能が追加され調べてみた。

親クラスの静的メソッドを小クラスでオーバーライドする機能。

はじめに下記の事を理解すれば分かり易いかも・・・

|||
|---|:---|
|非転送コール|`C::foo()`や`$c->foo()`といったクラス名（もしくはオブジェクト）を明示した呼び出し|
|転送コール  |`self:: parent:: static::`もしくはクラス階層の中での `forward_static_call()` での呼び出し|
|遅延静的束縛|非転送コール時に、明示されたクラス名（もしくはオブジェクトのクラス名）を保持する機能|

```php:selfの場合
//selfの場合
<?php
	class ParentClass {
		public function sayHello() {
			self::hello();
		}
		
		public static function hello() {
			echo __CLASS__. ' hello!';
		}
	}

	class ChildClass extends ParentClass {
		public static function hello() {
			echo __CLASS__. ' hello!!';
		}
}

$hello = new ChildClass();
$hello->sayHello(); //ParentClass hello!

?>
```
小クラスで`hello`メソッドをオーバーライドさせて
`sayHello`メソッドを継承させれば`self::はChildClass`で
解決すると思いきや、実際は`ParentClass`で解決される！
何故か↓

```PHPマニュアルより
PHPマニュアルより
`self::`あるいは`CLASS`による現在のクラスへの
静的参照は、そのメソッドが属するクラス 
(つまり、そのメソッドが定義されているクラス) に解決されます。
```
らしい。
と言う事は`self::hello()`は`ParentClass::hello()`となる。
（これじゃぁダメぇダメぇ。。。）

```php:staticの場合
//staticの場合
<?php	
	class ParentClass {
		public function sayHello() {
			static::hello();
		}
		
		public static function hello() {
			echo __CLASS__. ' hello!';
		}
	}

	class ChildClass extends ParentClass {
		public static function hello() {
			echo __CLASS__. ' hello!!';
		}
}

$hello = new ChildClass();
$hello->sayHello(); //ChildClass hello!

?>
```

では5.3で用意された遅延静的束縛のstaticで上記のようにすると
思うような結果得られる。

```PHPマニュアルより
PHPマニュアルより
遅延静的束縛は直近の “非転送コール” のクラス名を保存します。
```

今回のサンプルコードはいたって単純で行数が増えてくると？？？になりそうだ。。。

感じとしてはstaticは非転送コール時に、明示されたクラス名（もしくはオブジェクトのクラス名）を保持する機能と言う事とstaticは、静的な変数の定義 や 静的遅延束縛 にも使える。
先ずはここを頭に置いておかないと。。。
Bridgeで選択したファイルをsipsでJPEGにする

最終
--
Bridgeの「app.system」でいけるんじゃん…ｗ
@happyscript さんに教えてもらいましたありがとうございます。
別アプリ無しで、直にsipsに渡してます。

```applescript:Bridge2JPEG(SIPS).scpt
tell application "Adobe Bridge CC"
	do javascript "var myList=app.document.selections;for(var i=0;i<myList.length;i++){app.system('exec sips -s format JPEG -s formatOptions 80 \"'+myList[i].path+'\" --out \"'+myList[i].parent.path+'\" &>/dev/null &');}"
end tell
```
あーらくちん




以下古いモノ
--
スクリプトメニューに登録

```applescript:Bridge2JPEG.scpt
tell application "Adobe Bridge CC"
	do javascript "var myList = app.document.selections;for(var i=0; i<myList.length; i++){    myList[i].openWith('/Applications/2_JPEG.app');}"
end tell

tell application "2_JPEG"
	quit
end tell
```

アプリケーションフォルダに保存（自動的に終了させないアプリとして保存）

```applescript:2_JPEG.app
on open myDrops
	tell application "Finder"
		set myDir to container of (myDrops as alias)
	end tell
	
	do shell script "sips -s format JPEG " & quoted form of (POSIX path of (myDrops as Unicode text)) & " --out " & quoted form of (POSIX path of (myDir as Unicode text)) & "&>/dev/null &"
end open
```

メモ的に。
＃途中で止まってしまう…
ので書き直し。プロセス監視して5回sipsが無ければ終了するように。

実行後終了しないように保存

```applescript:2_JPEG.app
property myFlag : 0
on open myDrops
	tell application "Finder"
		set myDir to container of (myDrops as alias)
	end tell
	
	do shell script "exec sips -s format JPEG -s formatOptions 80 " & quoted form of (POSIX path of (myDrops as Unicode text)) & " --out " & quoted form of (POSIX path of (myDir as Unicode text)) & " &>/dev/null &"
end open
on idle
	try
		do shell script "ps x | grep sips | grep -v grep"
	on error
		set myFlag to myFlag + 1
	end try
	if myFlag > 5 then quit me
	return 1
	
end idle
```


```applescript:Bridge2JPEG.scpt
tell application "Adobe Bridge CC"
	do javascript "var myList = app.document.selections;for(var i=0; i<myList.length; i++){myList[i].openWith('/Applications/2_JPEG.app');}"
end tell
```
Bashワンライナーで、MySQLのSHOW STATUSからmy.cnfのパラメーター参考を生成する

ワンライナーでMySQLのSHOW STATUSからmy.cnfのパラメーター参考を生成
----

sshシェルとか取れない環境などで、参考にコンフィグレーションファイルが欲しいとか思うことがあるわけです。
どういうわけか、つまりはAmazon RDSとかいうわけですが・・・。
まぁ、mysqlを結構使う人にとっては当たり前なのかもしれませんね。

----------

    mysql -u root -p -h 127.0.0.1 -A -NBe 'SHOW VARIABLES' | sed 's,\t,^=,' | column -ts^ | tr "\n" '@' | eval $(echo "sed '" "s,@\("{a..z}"\),\n\n\1,;" "'") | tr '@' "\n" | sed 's,^,,g'

    Enter password: 
	auto_increment_increment                                =1
	
	auto_increment_offset                                   =1
	autocommit                                              =ON
	automatic_sp_privileges                                 =ON
	
	back_log                                                =900
	basedir                                                 =/rdsdbbin/mysql/
	big_tables                                              =OFF
	bind_address                                            =*
	binlog_cache_size                                       =32768
	binlog_checksum                                         =CRC32
	binlog_direct_non_transactional_updates                 =OFF
	binlog_format                                           =STATEMENT
	binlog_max_flush_queue_time                             =0
	binlog_order_commits                                    =ON
	binlog_row_image                                        =FULL
	binlog_rows_query_log_events                            =OFF
	binlog_stmt_cache_size                                  =32768
	block_encryption_mode                                   =aes-128-ecb
	bulk_insert_buffer_size                                 =8388608
	
	character_set_client                                    =utf8
	character_set_connection                                =utf8
	character_set_database                                  =latin1
	character_set_filesystem                                =binary
	character_set_results                                   =utf8
	character_set_server                                    =latin1
	character_set_system                                    =utf8
ArchLinuxでネットワーク設定 (ブリッジ、bonding)

* [netctl (日本語) - ArchWiki](https://wiki.archlinux.org/index.php/Netctl_(%E6%97%A5%E6%9C%AC%E8%AA%9E))
* この設定をしておくことで以下利点がある
  * KVMゲスト<-->ホスト間通信が可能
  * LXC起動のためのデバイス指定(br0)が可能 [ArchLinuxでLXCを動かしてみた - Qiita](http://qiita.com/tukiyo3/items/4946996dbb8b48dca5db)

```bash:パッケージインストール
pacman -S netctl ifenslave
```

## ip_forward設定 (必須)

```bash:ip_forward設定
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-sysctl.conf
```

## DHCPの場合

[netctl](https://wiki.archlinux.org/index.php/Netctl_(%E6%97%A5%E6%9C%AC%E8%AA%9E))

```bash:/etc/netctl/br0
Interface=br0
Connection=bridge
BindsToInterfaces=(enp3s0)

IP=dhcp
```

```bash:登録
netctl enable br0
```

## 固定の場合

```bash:/etc/netctl/br0
Interface=br0
Connection=bridge
BindsToInterfaces=(enp3s0)

IP=static
Address=('192.168.100.61/24' '192.168.11.61/24')
Gateway='192.168.100.1'
DNS=('8.8.8.8' '8.8.4.4')
```

```bash:登録
netctl enable br0
```

## IPコマンドでbr0の表示

```bash:
ip a s br0
```

# bonding

```bash:/etc/netctl/bonding
Description='Bond Interface'
Interface='bond0'
Connection=bond
BindsToInterfaces=(enp4s0 enp0s29f7u1)

IP=static
Address=('192.168.100.61/24')
Gateway='192.168.100.1'
DNS=('8.8.8.8' '8.8.4.4')
```

```bash:/etc/modprobe.d/bonding.conf
options bonding miimon=100
options bonding mode=active-backup
# options bonding primary=enp4s0
```

* `options bonding primary=enp4s0`は常にenp4s0を優先する。
  * enp4s0が抜けた時にもう片方に切り替わる
  * enp4s0をさした時、enp4s0が優先される。
  * 何もしなければ18秒くらい通信復帰にかかる気がする。


* bondingのmode一覧
  * [CentOS/NICの冗長化（bonding設定） - maruko2 Note.](http://www.maruko2.com/mw/CentOS/NIC%E3%81%AE%E5%86%97%E9%95%B7%E5%8C%96%EF%BC%88bonding%E8%A8%AD%E5%AE%9A%EF%BC%89)
  * [日本HP_Linux_技術文書_bondingドライバの違いについて](http://h50146.www5.hp.com/products/software/oe/linux/mainstream/support/doc/option/nic/bonding_diff.html)


```bash:登録
netctl enable bonding
```

再起動し確認

```bash:
cat /proc/net/bonding/bond0
```
Enumメモ

# 目的
最近Java、C#、その他言語でのコーディングが同時進行で頭がぼーんしそうなので
よく使う書き方をメモ。

## とりあえず適当なenumを作成
```csharp:
enum Disney 
{
    MICKEY = 1,
    MINNIE = 2,
    GOOFY = 3,
    DONALD = 4
}
```

## 名前を取得
```csharp:
Enum.GetName(typeof(Disney), Disney.MICKEY);
```

## 値を取得
```csharp:
(int)Disney.MICKEY
```

## 値からEnumを取得
```csharp:
int disneyValue = 1;

//キャスト
Disney disney = (Disney)disneyValue;
//Enum.ToObject
Disney disney2 = (Disney)Enum.ToObject(typeof(Disney), disneyValue);
```

## ループ
```csharp:
foreach (Disney disney in Enum.GetValues(typeof(Disney)))
{
    //繰り返し処理
}
```
## 型指定
```csharp:
//byte、sbyte、short、ushort、int、uint、long、ulongのいずれかが指定可能
enum Disney : int
{
    MICKEY = 1,
    MINNIE = 2,
    GOOFY = 3,
    DONALD = 4
}
```
## 拡張メソッド
もう少し便利に使いたかったら拡張メソッドを実装すればいい。

```csharp:
using System;
namespace EnumSample
{
    enum Disney
    {
        MICKEY = 1,
        MINNIE = 2,
        GOOFY = 3,
        DONALD = 4
    }
    static class DisneyExtension
    {
        /// <summary>
        /// Nameを返します。
        /// <summary>
        public static string GetName(this Disney disney)
        {
            return Enum.GetName(typeof(Disney), disney);
        }

        /// <summary>
        /// Valueを返します。
        /// </summary>
        public static int GetValue(this Disney disney)
        {
            return (int)disney;
        }
    }
}
```
AndroidStudioでmainのディレクトリ構成を使わない方法

既存のプロジェクトをさくっと取り込みたいような場合にAndroidStudio/gradleの標準ディレクトリ構成(src/main/java)に変更するのがめんどくさかったり、無駄だったり、git/svnなどのVCSとの相性が悪かったりすることがあるので、build.gradle でなんとかならないか調べた。

> 今回は twitter-text-java を修正したかったので。

```groovy:build.gradle
apply plugin: 'com.android.library'

android {
    compileSdkVersion 16
    buildToolsVersion "19.1.0"

    defaultConfig {
        applicationId "com.twitter.text"
        versionCode 1
        versionName "1.0"
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }
    }
}
```

上記のように sourceSets.main を記述しておくと、Eclipseのディレクトリ構成でそのまま使える。
外部モジュールはこう記述して逃げるというのもアリかなー。
jQuery、aリンクを無効にする

jQuery、aリンクを無効にする
==========


■about
----------

jQuery、aリンクを無効にする




■code
----------

```JavaScript:JavaScript
$(function(){
	$('a').click(function(){
		return false;
	})
});
```




■reference
----------

aリンクを無効にする方法 – JQuery、javascript、[#]リンク等 – How to disable links | Stronghold
http://zxcvbnmnbvcxz.com/how-to-disable-links/
[Unity]iPhoneなどの画面サイズにあわせて表示するメモ


## アスペクト比

[アスペクト比設定[Unity]](http://tasogare66.blog.fc2.com/blog-entry-12.html)
[Unity そのアスペクト比を固定するぞ・・・っ！](http://hideapp.cocolog-nifty.com/blog/2012/06/unity-1a83.html)

## GUI関係

[[Unity3D]NGUIで作った画面をiPhone5の解像度に手っ取り早く合わせる](http://terasur.blog.fc2.com/blog-entry-285.html)
[カメラ比率に合わせ、GUIの位置を調整する](http://icoc-dev.hatenablog.com/entry/2013/11/19/205108)
rubyのGemfileとbundlerの使い方メモ

rubyで作っているツールを配布しようと思ったんだけど、依存しているgemとか配布するためにGemfileなるものを使わないといけなかったので、そのメモ。

proxy経由でbundlerインストール。

```
$ gem install bundler --http-proxy=http://***:**
```

使いたいツールのディレクトリにいって、bundle initで初期テンプレートをつくる。

```
$ cd /usr/local/path/to/splunk-manager
$ bundle init
Writing new Gemfile to /usr/local/path/to/splunk-manager/Gemfile
```

Gemfileに必要なgemを記入（今回はversion指定しない）

```
$ vi Gemfile

# A sample Gemfile
source "https://rubygems.org"
gem 'splunk-sdk-ruby'
gem 'sqlite3'

# gem "rails"
```

proxyを指定してbundle install

```
$ export http_proxy=http://***:***
$ bundle install
Fetching gem metadata from https://rubygems.org/..........
```

入っていることを確認

```
$ gem list

*** LOCAL GEMS ***

bundler (1.6.3)
minitest (1.6.0)
rake (10.3.2, 0.8.7)
rdoc (2.5.8)
splunk-sdk-ruby (1.0.3)
sqlite3 (1.3.9)
```

このGemfileをgitに上げとけば良いのか
Yo APIを試してみた

# Yo API Keyの登録
http://developer.justyo.co/ こちらから。
API用のアカウントは個人用のアカウントとは別に作ります。
（アプリなどから先に同名のアカウントを作ってしまうと取れない… その場合は消したいアカウントから YODELETE にYoを送って連絡したら削除してもらえました）

Callback URLには、Yoを受信した時にhookとして呼び出すURLを指定できます。
（後からでも変更できます）

# Yo APIでできること
- `POST /yoall/` : Yoしてくれた人（フォロワー？）全員にYoを送る。`link`パラメータでリンク付きで送れる
- `POST /yo/` : `username`パラメータで指定したユーザにYoを送る（1分に1回まで）。`link`パラメータでリンク付きで送れる
- yoを受信したらhookを呼び出してくれる。`username`パラメータで誰から来たか分かる

今のところこれだけ

参考:https://medium.com/@YoAppStatus/yo-developers-api-e7f2f0ec5c3c

# Yoを送ったらYoを返すだけのbotを作ってみた

[ILLYOBACK](http://justyo.co/illyoback) にYo送ってみてね。

```scala
import unfiltered.request._
import unfiltered.response._

class App extends unfiltered.filter.Plan {
  val APIKey = "YOUR_API_KEY_HERE"

  def intent = {
    case GET(Path("/hook")) & Params(p) =>
      p("username").foreach{u =>
        import dispatch._, Defaults._
        val svc = url("http://api.justyo.co/yo/") <<
          Map("api_token" -> APIKey, "username" -> u) <:<
          Map("Content-Type" -> "application/x-www-form-urlencoded")
        val res = Http(svc OK as.String)
      }
      Ok
  }
}
```

Scala(Unfiltered)でちょろっと書いてHerokuにデプロイしてみた。

# ちょっとハマったとこ

- 既存のアカウントでAPIを有効にできるのかと思ったら、API専用アカウントを新しく作らないとダメだった
- apiのURLの最後に / 付け忘れるとダメ
- content-typeは `application/x-www-form-urlencoded` じゃないとダメ

# 思った事

- hookの呼び出し元が本当にYoから来てるのか検証する手段が無い（hookのURLがバレると誰でも呼べちゃう）
- フォローされてないアカウントにもapiでYo送れてしまう！ SPAMできちゃうね

# その他

- 1分に1回以上送ると "Rate limit exceeded. Only one Yo per recipient per minute."
Gradleでアプリのバージョン名とバージョン番号を取得する


# いままで

実行しているアプリのバージョン番号、バージョン名の取得といえばPackageManagerを使う方法が一般的でした。
PackageManagerを使うとNameNotFoundExceptionをthrowします。実行しているアプリなら通常必ず取れるであるので、不要なtry-catch文で囲まないといけません。

```java
String versionName;
try {
    versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
} catch (NameNotFoundException e) {
    versionName = "unknown";
}
```

# イマドキ

Gradleで生成されるBuildConfigを参照することで、定数の参照だけで済むようにできます。

## やり方

今までAndroidManifestで定義されていた部分を消します。

```diff:AndroidManifest.xml
diff --git a/AndroidManifest.xml b/AndroidManifest.xml               
index ec5b988..600ab90 100644                                        
--- a/AndroidManifest.xml                                            
+++ b/AndroidManifest.xml                                            
@@ -1,9 +1,7 @@                                                      
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="jp.itochan.android"                                        
-    android:installLocation="auto"                                  
-    android:versionCode="10"                                        
-    android:versionName="2.0.0">                                    
+    android:installLocation="auto">                                 
```

そのかわり ``build.gradle`` の ``defaultConfig`` ブロックの中で、バージョンを指定します。

```build.gradle
android {
    compileSdkVersion 20
    buildToolsVersion '19.1.0'

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 20
        versionCode 10
        versionName '2.0.0'
    }
}
```

すると ``BuildConfig.java`` に定数が自動生成されます。

```BuildConfig.java
/**
 * Automatically generated file. DO NOT MODIFY
 */
package jp.itochan.android;

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String PACKAGE_NAME = "jp.itochan.android";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 10;
  public static final String VERSION_NAME = "2.0.0";
}
```

PackageManagerを使うとtry-catch文を必要としていたのを ``BuildConfig.VERSION_NAME`` を参照するだけでバージョン名が取れます。

```java
String versionName = BuildConfig.VERSION_NAME;
```

同様にバージョン番号も ``BuildConfig.VERSION_CODE`` で取ることができます。
jQuery、ページ遷移

jQuery、ページ遷移
==========


■about
----------

jQuery、ページ遷移




■code
----------

```JavaScript:JavaScript
$('.btn').on('click', function(){
setTimeout(function(){
	window.location.href = href_val;
}, 500);
```




■reference
----------

jQueryによるページ遷移 | 私的雑録
http://php.o0o0.jp/article/jquery-location
Bootstrap2、Modal（モーダルボックス）を使う

Bootstrap2、Modal（モーダルボックス）を使う
==========


■about
----------

Bootstrap2、Modal（モーダルボックス）を使う方法




■code
----------
```html:必要ファイル
<link rel="stylesheet" href="./bootstrap.css">
<script src="./jquery.min.js"></script>
<script src="./bootstrap-modal.js"></script>
<script src="./bootstrap-transition.js"></script>
```

```html:html
<div class="modal" id="myModal">
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>Modal header</h3>
</div>
<div class="modal-body">
<p>One fine body…</p>
</div>
<div class="modal-footer">
<a href="#" class="btn btn-primary">Save changes</a>
<a href="#" class="btn">Close</a>
</div>
</div>
```

```JavaScript:JavaScript
$('#myModal').modal('show')
```




■reference
----------

Bootstrap でModal（モーダルボックス）を使う方法
http://www.webantena.net/bootstrap/plugin-modal/

Twitter Bootstrap使い方-javascript-v2.0.4
http://php-fan.org/sample_code_demo/bootstrap-js.html#modals

ブログ：図書館合金: BootstrapのModal使う時は data-keyboard="false" にしておく
http://uedatakeshi.blogspot.jp/2014/02/bootstrapmodal-data-keyboardfalse.html
MySQL ・プロシージャでテーブルを一括削除

* システム上に永続配置は危険です。

```mysql:sql
DROP PROCEDURE IF EXISTS dropTables;
DELIMITER ;;
CREATE PROCEDURE dropTables()
BEGIN
	DECLARE T VARCHAR(255);
	DECLARE M BOOLEAN;
	DECLARE D INT DEFAULT 0;
	DECLARE C CURSOR FOR SELECT TABLE_NAME FROM `information_schema`.tables WHERE table_schema = 'dbname' AND table_type = 'BASE TABLE';
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET D=1;

	SET FOREIGN_KEY_CHECKS = 0;
	OPEN C;
	L: LOOP
		FETCH C INTO T;
		IF D THEN
			LEAVE L;
		END IF;

		SET @drop_sql_ref = CONCAT('DROP TABLE IF EXISTS  ' , T );
		PREPARE drop_sql FROM @drop_sql_ref;
		EXECUTE drop_sql ;
	END LOOP;
	CLOSE C;
	SET FOREIGN_KEY_CHECKS = 1;
END;
;;
DELIMITER ;

SHOW TABLES;
CALL dropTables();
SHOW TABLES;

DROP PROCEDURE IF EXISTS dropTables;
```
EthnaのVAR_TYPE_BOOLEANに対するvalidateの挙動

EthnaのActionFormで

```php
'hoge' => array(
	'type' => VAR_TYPE_BOOLEAN,
),
//省略
$this->af->validate();
```

とした時の挙動が思ってたのと違ったのでメモ
`hoge`のvalueをtrueにしたくて

```html
<input type='checkbox' name='hoge' value='true'>
```

としてしまうと、チェックを入れて送信するとvalidateに通らない
どうやら文字列の`'true'`ではBOOLEANとは判定してくれないらしい
`af->set()`でvalidateする値を変更して検証してみた

* `true,false`
	* 通る
* `'true','false'`
	* 通らない
* `0,1`
	* 通る
* `'0','1'`
	* 通る

この中では`'true'`と`'false'`だけvalidateを通過することができなかった
inputのvalueで`true`か`false`を直接送れればいいんだけどvalueは文字列として送信されてしまう
そもそもチェックボックスが選択されていなければ何も送信されないので、どうにかしてtrueであることさえ伝わればいい
今回はvalueに`'1'`を入れて送信することにした

##追記
リファレンスに`VAR_TYPE_BOOLEAN 真偽値(1/0)`って書いてありますね
jQuery、css、border

jQuery、css、border
==========


■about
----------

jQuery、css、border
※
諸々チェック用




■code
----------

```JavaScript:JavaScript
$("#main").css("border", "1px solid #ff0000"); 
```




■reference
----------

プロパティの値を設定 - スタイルシートの操作 - jQueryの使い方
http://www.ajaxtower.jp/jquery/css/index2.html
PHP、文字化けせずにCSVファイルを読み込み

PHP、文字化けせずにCSVファイルを読み込み
==========


■about
----------

PHP、文字化けせずにCSVファイルを読み込み
※
htmlタグが文字化けするのでHTML エンティティに変換
表示する時にHTML エンティティのデコードする




■code
----------

```php:php
//excel csv、文字コード変換
setlocale(LC_ALL, 'ja_JP.UTF-8');
 
$file = $file_neme . ".csv";
$data = file_get_contents($file);
$data = mb_convert_encoding($data, 'UTF-8', 'sjis-win');

$temp = tmpfile();
$csv  = array();
 
fwrite($temp, $data);
rewind($temp);
 
while (($data = fgetcsv($temp, 0, ",")) !== FALSE) {
$data = implode(",", $data);
//htmlタグが文字化けするのでHTML エンティティに変換
//表示する時にHTML エンティティのデコードする
  $csv[] = htmlentities($data);
}
fclose($temp);
//var_dump($csv);
```

```php:php
//表示する時にHTML エンティティのデコードする
echo html_entity_decode($line);
```




■reference
----------

[PHP]文字化けせずにCSVファイルを読み込み、配列に変換する | PHP Archive
http://php-archive.net/php/csv-tsv-array/

PHP: mb_convert_encoding - Manual
http://www.php.net/manual/ja/function.mb-convert-encoding.php

PHP: htmlentities - Manual
http://www.php.net/manual/ja/function.htmlentities.php

PHP: html_entity_decode - Manual
http://www.php.net/manual/ja/function.html-entity-decode.php
JSBでC++のmapをJavascriptのオブジェクトとして返す方法

cocos2d-jsにおいてC++のmap要素をJavaScript（以下js)のオブジェクトとして返したいケースはよくあります。
ネットで検索をかけてもなかなか見つからないので、cocos2d-xのscriptingの中を探って実装方法を探ってみました。
で、見つかったのが`JS_DefineProperty`です。
こちらを使えば、JSObjectにプロパティを追加できます。
jsにおいては変数オブジェクトは連想配列に等しく、プロパティとはまさにキーの役割を果たします。
なので、こちらのメソッドを利用することで、js上でも連想配列を返すことが可能になったと言えます。
スニペットで恐縮ですが、こんな感じでmapの全要素をjsのプロパティに置き換えてやります。

```cpp
JSObject *object = JS_NewObject(_cx, NULL, NULL, NULL );
JSBool result = JS_TRUE;
std::map< std::string, std::string >::const_iterator it = params.begin();
while(it != params.end()){
  CCLOG("%s => %s",it->first.c_str(), it->second.c_str());
  JSString* jsValue = JS_NewStringCopyN(_cx, it->second.c_str(), it->second.length());
  result &= JS_DefineProperty(_cx, object, it->first.c_str(), STRING_TO_JSVAL(jsValue), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT);
   ++it;
}
```

あとはJSObjectをjsval等に変換してやり、渡してやればOKです。
バッテリーの残量を確認する方法

```bash
upower --enumerate
```

を実行すると，例えばうちのノートPC (HP Pavilion dm1-4000) では以下のような出力が得られる．

```text
/org/freedesktop/UPower/devices/line_power_ACAD
/org/freedesktop/UPower/devices/battery_BAT0
```

このうちどちらか片方が正解なのでそれを以下のように指定してやればバッテリーの状態を取得でき出力することが出来る．

```bash
upower -i /org/freedesktop/UPower/devices/battery_BAT0
```

```text
  native-path:          BAT0
  vendor:               Hewlett-Packard
  model:                Primary
  power supply:         yes
  updated:              2014年07月08日 13時11分13秒 (27 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               discharging
    energy:              48.0384 Wh
    energy-empty:        0 Wh
    energy-full:         51.4944 Wh
    energy-full-design:  51.4944 Wh
    energy-rate:         10.4328 W
    voltage:             12.077 V
    time to empty:       4.6 hours
    percentage:          93%
    capacity:            100%
    technology:          lithium-ion
  History (rate):
    1404792673  10.433  discharging
    1404792643  8.791   discharging
    1404792613  8.338   discharging
```

文字通り `energy` が残量そのもの，`time to empty` が残り時間，`percentage` が残量の百分率です．

参考リンクにもあるようにaliasを設定しておくと便利だと思う．

```bash
alias bat='upower -i /org/freedesktop/UPower/devices/battery_BAT0'
```

## それ普通デスクトップに表示されてて確認出来るのでは？

以下のたった一つのシンプルな理由でどうしてもコマンドラインでこの作業をやりたいことがあるのです．

* 外付けキーボードを忘れたので仕方なくノート本体のキーボードを使っていたらタッチパッドの誤タッチがウザく `xinput disable 'SynPS/2 Synaptics TouchPad'` でタッチパッドを無効にしたのは良いがカーソルが動かせなくなってバッテリー残量のところにカーソルが合わせられなくなったため

## References

* [command line - How to check battery status using terminal? - Ask Ubuntu](http://askubuntu.com/questions/69556/how-to-check-battery-status-using-terminal)

## The latest information

最終更新から1年経過しました，と表示されていました．しかし2015年11月9日現在，余裕でこの手法は有効です．

2016年12月22日現在でも余裕でこの手法は有効です．
[Android]アイコンをアニメーションさせる


# 完成イメージ
![button.gif](https://qiita-image-store.s3.amazonaws.com/0/40758/83aee980-6741-32c2-d66d-2cedde38e459.gif "button.gif")


AndroidではViewにアニメGIFを設定してもアニメーションが再生されません（ごめんなさい、試してません）。

そこで、FontAwesomeアイコンをパラパラまんがのように切り替えてアニメーションを実現します。
使える場面がものすごーーーーーく限定的だとは思いますが、参考までに...

それとサンプルではFontAwesomeアイコンを切り替えていますが、FontAwesomeはただの文字なので、同じやり方で文字をアニメーションさせることもできます。用途がまったく思いつきませんが。

#### [参考]
下記サンプルに出てくる `CustomFontButton` は、FontAwesomeを表示できるように拡張したカスタムボタンです。
こちらを参考に。
[Androidで画像を使わずにオシャレなアイコンを簡単に表示する方法](http://qiita.com/AbeHaruhiko/items/a7437027231a373acf2a)

※上のGIFアニメ中のボタンは `CustomFontButton` を更にカスタマイズしてアイコンを右寄せで表示できるようにしています。

`FontAwesome`クラスはこちらを参考にしています。
https://github.com/Bearded-Hen/Android-Bootstrap/blob/master/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesome.java


```java:SampleActivity.javaの抜粋

private Handler mHandler = new Handler();
private ScheduledExecutorService mScheduledExecutor;
private ScheduledFuture<?> mScheduledFuture;
private SampleRunnable mSampleRunnable;
private Map<String, String> mFaMap = FontAwesome.getFaMap();

/**
 * onClickListenerの中身
 */
private void doOnBtnClick(final View view) {

    if (playing) {
        // 再生中なら停止。
        mScheduledFuture.cancel(true);

    } else {
        // 停止中なら再生開始。

        /**
        * newSingleThreadScheduledExecutor()を使うなり、
        * 適宜変更してください。
        */
        mScheduledExecutor = Executors.newScheduledThreadPool(2);

        /*
         * 繰り返し実行したい処理を実装するRunnnable。
         * ここではアイコンの切り替え。
         * このサンプルではインナークラスとして実装。
         */
        mSampleRunnable = new  SampleRunnable(view);


        /**
         * 第一引数: 繰り返し実行したい処理
         * 第二引数: 指定時間後に第一引数の処理を開始
         * 第三引数: 第一引数の処理完了後、指定時間後に再実行
         * 第四引数: 第二、第三引数の単位
         *
         * mSampleRunnableをすぐに（0秒後に）実行し、完了後200ミリ秒ごとに繰り返す。
         */
        mScheduledFuture = mScheduledExecutor.scheduleWithFixedDelay(mSampleRunnable, 0, 200, TimeUnit.MILLISECONDS);
    }
}


class mSampleRunnable implements Runnable {

    private CustomFontButton mClickedButton;

    public mSampleRunnable(CustomFontButton button) {
        this.mClickedButton = button;
    }

    @Override
    public void run() {

        /**
         * Handlerを介してUIスレッドを更新する（postする）
         */
        mHandler.post(new Runnable() {
            public void run() {

                /**
                 * 現時点のアイコン（FontAwesomeのフォント）に応じて
                 * 次に表示するアイコンを決める。
                 */
                String now = mClickedButton.getIcon();
                String next;

                if (now.equals(mFaMap.get("fa-volume-off"))) {
                    next = mFaMap.get("fa-volume-down");
                } else if (now.contains(mFaMap.get("fa-volume-down"))) {
                    next = mFaMap.get("fa-volume-up");
                } else if (now.contains(mFaMap.get("fa-volume-up"))) {
                    next = mFaMap.get("fa-volume-off");
                } else {
                    next = mFaMap.get("fa-volume-off");
                }
                mClickedButton.setRightIcon(next);
            }
        });
    }
}


```

実装の都合でメンバ変数が多くなっていますが、そこは必要に応じて修正してください。
よろしく、お願いします。

画像アップロード上限を増やすために＾＾
な～んてね。

個人＆独学で、暇な時間を見つけてAndroidアプリを作成しています。

昔、私が開発したAndroidアプリを
「パッケージ名」だけ変更してリリース出来る様に改良して見ようと思っています。

シェアして見ようって言う実験企画です。
Backboneでインスタンスごとに設定をコンストラクタに渡したい



```javascript:Index.js
var Index = Backbone.Model.extends({
    defaults: function () {
        return { index: 0 }
    },
    max:0,
    min:0,
    next: function () {
        var index = this.get("index");
        index = Math.min(Math.max(index + 1, this.min), this.max);
        this.set("index", index);
    },
    prev: function () {
        var index = this.get("index");
        index = Math.min(Math.max(index - 1, this.min), this.max);
        this.set("index", index);
    }
});
```

```javascript:usage
var index = new Index({ index:3 });
index.min = 0;
index.max = 100;
```

こういう感じでModelとして管理したい値と、Modelの設定として使いたい値があるとします。

その設定をインスタンスごとに渡す方法がわからなくて強引にプロパティを設定したり、変更しないattributesを使ってどうにかしていたけど、第二引数のoptionsとして渡してあげると Model#initializeにそのまま渡されるのでそこで設定すればよいみたい。


```javascript:Index.js(改)
var Index = Backbone.Model.extends({
    defaults: function () {
       return { index: 0 }
    },
    max:0,
    min:0,
    initialize: function (attr, options) {
        options || (options = {});
        this.max = options.max || 0;
        this.min = options.min || 0;
    },
    next: function () {
        var index = this.get("index");
        index = Math.min(Math.max(index + 1, this.min), this.max);
        this.set("index", index);
    },
    prev: function () {
        var index = this.get("index");
        index = Math.min(Math.max(index - 1, this.min), this.max);
        this.set("index", index);
    }
});
```

```javascript:usage
var index = new Index({index: 3}, {max:100, min:0});
```

またViewでも、model、elといったデフォルトのプロパティ以外にインスタンスごとに値を設定したいことがあります。
それも同じようにインスタンス化するときの第2引数にoptionsとしてObjectを渡せば、それがView#initializeに渡されるようなので、そちらで値をセットするように書けば設定ができます。

```javascipt:SlideView.js
var SlideView = Backbone.View.extends({
    $slides
    initialize: function (options) {
        options || (options = {});
        this.slides = this.$(options.slideClass);

        this.model.on("change:index", this.render, this);
        this.render();
    },
    render: function () {
        this.$slides.removeClass("current");
        this.$slides.eq( this.model.get("index") ).addClass("current");
    }
});
```

```javascript:usage
var index = new Index({
        index: $("ul#slideshow li.current").index()
    },
    {
        max: $("ul#slideshow li").length,
        min:0
    });
var slideshow = new SlideView({
        model: index,
        el: "ul#slideshow",
        slideClass: "li"
    });
```

```html:index.html
<ul id="slideshow">
    <li class="current">Page1</li>
    <li>Page2</li>
    <li>Page3</li>
    <li>Page4</li>
    <li>Page5</li>
</ul>
```

# 追記

intializeの呼び出しは、

`this.initialzie.apply(this, arguments);`

という感じでコンストラクタに投げられた引数を丸投げされるので、optionsがnullでもエラーにならないように注意する必要があるですね。

`options || (options = {}); //optionsが無かったら空のObjetを代入する`

この記事は[2013-06-27の記事の転載](http://yd-niku.hatenablog.com/entries/2013/06/27)です。
GAE/Pでよく使うコマンド


他に便利なやつあったらおしえてください

##ローカルのサーバ起動 DBの初期化なし

dev_appserver.py dispatch.yaml app.yaml worker.yaml

##ローカルのサーバ起動 DBの初期化あり
dev_appserver.py dispatch.yaml app.yaml worker.yaml --clear_datastore=yes

##雑魚yamlの本番反映
appcfg.py update app.yaml worker.yaml 

##dispatch.yamlの本番反映
appcfg.py update_dispatch ./

##index.yamlの本番反映
appcfg.py update_indexes ./
Androidでoverflowした要素をスクロール可能にするjQueryプラグイン

Androidでoverflowするとスクロールできない問題を解決するためにつくりました。

※(追記) [iOSとかではCSSで"-webkit-overflow-scrolling: touch;"にすればよいそうです。](http://www.webantena.net/css/css3-webkit-overflow-scrolling/)

# ソースコード

https://github.com/yosukedoke/JSOverflowScroll

# 使い方

## CSS

    #hoge {
        overflow:auto;//Androidは強制的にhidden的な挙動になる
        width:320px;
        height:400px;
    }

## JS

    $("#hoge"). overflowScroll();


iOSでもoverflowを設定すると慣性スクロールが効かなくなるので有用かもしれませんが、
よほどでなければUAを判定してAndroidだけ適応するほうがいいと思います。

# 仕組み

touchStartで取得したポイントをと現在の指の位置の差分をscrollTopに設定しているだけです。
模式的に書くと次のようなかんじです。

## タッチ開始


    $target.on("touchStart", function(event) {
            event = event.originalEvent;
            var touch = event.touches[0];
            touchStartX = touch.pageX;
            touchStartY = touch.pageY;
    });

## タッチ中(ドラッグ中)

    $target.on("touchMove", function(event) {
            event = event.originalEvent;
            var touch = event.touches[0];
            touchX = touch.pageX;
            touchY = touch.pageY;

            $target.scrollLeft(touchStartX - touchX);
            $target.scrollTop(touchStartY - touchY);
    });

## タッチ完了

    $target.on("touchEnd", function(event) {
            event = event.originalEvent;
            var touch = event.touches[0];
            touchStartX = touch.pageX;
            touchStartY = touch.pageY;

            //何かあれば
            //...
    });

実際にはtouchEndで直前の touchX/touchYとの差分をもとに話した時の指の速度を割り出し
それをもとに慣性スクロールっぽくするよう試みてます。



    $target.on("touchEnd", function(event) {
            event = event.originalEvent;
            var touch = event.changedTouches[0];

            touchSpeedX = (touchX - touch.pageX);
            touchSpeedY = (touchY - touch.pageY);

            intervalID = setInterval(afterMoving, INTERVAL_TO_MOVE);
    });

    function afterMoving() {
            //速度があまりにも小さくなったら止まったことにする。
            if ((Math.abs(touchSpeedX)<LIMIT_TO_STOP && Math.abs(touchSpeedY)<LIMIT_TO_STOP)) {
                clearInterval(intervalID);
                return;
            }

            var oldX = $target.scrollLeft(),
                oldY = $target.scrollTop();

            //摩擦係数をかけて減速
            touchSpeedX *= FRICTION;
            touchSpeedY *= FRICTION;

            $target.scrollLeft(oldX + Math.round(touchSpeedX));
            $target.scrollTop(oldY + Math.round(touchSpeedY));
    }


この記事は[2013-08-19の記事の転載](http://yd-niku.hatenablog.com/entries/2013/08/19)です。
CGRectをオフセットする方法

描画用のCGRectを用意する際に、イラレ的な感覚で矩形をオフセット(ピクセル単位でパスを拡張)したかったのですが、
CGRectOffsetかと思いきや、CGRectInsetを使うと簡単にできました。

> GCRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)


もとのCGRectと、内側に拡張したい数値を入れると新しいCGRectが生成されます。
dx, dyをマイナスにすると外側に広がった矩形が生成できます。

> CGRect rect = CGRectMake(0, 0, 100, 100);
> CGRect insetRect = CGRectInset(rect, 10, 10);
> NSLog(@"CGRectInset %@",NSStringFromCGRect(insetRect));
> //CGRectInset {{10, 10}, {80, 80}}


drawRectメソッドの中などで枠線の幅を考慮した計算が必要になることがありますが
そういう描画用の矩形を生成するときに便利です。

CGRectOffsetはIFが似てますが、始点(rect.origin)を動かしたCGRectを作る関数みたいです。

> GCRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)

> CGRect rect = CGRectMake(0, 0, 100, 100);
> CGRect offsetRect = CGRectOffset(rect, 10, 10);
> NSLog(@"CGRectOffset %@",NSStringFromCGRect(insetRect));
> //CGRectOffset {{10, 10}, {100, 100}}

この記事は[2013-08-23の記事の転載](http://yd-niku.hatenablog.com/entries/2013/08/23)です。
ターミナルでよく使うコマンドなど

## 操作

**`ESC` キーを押してから `.` キーを押下**

直前に利用した、最後の引数を再利用

**例：**

> `ls -al ./test.txt` コマンドを実行した後 `cat ./test.txt` を打とうと思った場合、
`cat` まで入力してから `ESC` キーを押して `.` キーを押すと `./test.txt` を入力してくれます。

## コマンド
Macのターミナルでよく使うコマンドのメモ書きです。

```bash:一つ前のディレクトリに移動
cd -
```

```bash:日時順にファイル一覧を見る
ls -alrt
```

`r` オプションが降順 `t` オプションがタイムスタンプでソート。
降順にしないと最新のファイルが一番上に行って見難いので `r` オプションを利用。
`a` オプションは好み。（ `.` で始まるファイルを表示）

```bash:ファイルの行数確認
wc -l ./textfile.txt
```

```bash:ユニークソート
uniq ./target.txt | sort > ./saved_file.txt
# 行数確認と組み合わせ
uniq ./target.txt | sort | wc -l
```

```bash:メモリ解放
du -sx /
```

```bash:フォルダ内の容量確認
cd /User/
du -d 1 -h ./
```

```bash:SVNフォルダの削除
cd /User/workspace/
find ./ -name ".svn" -print -exec rm -rf {} ";"
```
Bridgeで選択したファイルをPhotoshopでJPEGにする

```applescript:2JPEG.script
tell application "Finder"
	set myPath to parent of (path to me) as alias
	set myP to POSIX path of myPath as Unicode text
end tell
tell application "Adobe Bridge CC"
	do javascript "$.evalFile(File('" & myP & "2JPEG.jsx" & "'));"
end tell
```

```js:2JPEG.jsx
#target bridge
var aTmb = app.document.selections;
for(var i=0; i<aTmb.length;i++){
    myBtalk(aTmb[i].path);
    }

function myBtalk(filename){
    var myScript = 'var myImg = new File("'+filename+'");open(myImg);myJSO= new JPEGSaveOptions();myJSO.quality=8;app.activeDocument.saveAs(myImg, myJSO, true,Extension.LOWERCASE);app.activeDocument.close();'
      var bt=new BridgeTalk;
    bt.body=myScript;
    bt.target="photoshop";
    bt.send();
    }
```

何となく動いてる的なメモ。
＃プロファイル警告をscript側で切らなければ
iOS SafariでドラッグするとrequestAnimationFrameが止まる件


JSでrequestAnimationFrameを使ってアニメーションさせるとき、
ネイティブのスクロールが発生するとスクロール中はrequestAnimationFrameが一時的に止まるらしい。厳密にはする時としないときがあった。

スワイプジェスチャーを実装してドラッグに応じてアニメーションさせようとしていたのですが、
要はブラウザがスクロールするとザ・ワールド！してしまうという感じらしい。
困った。

今回はフルスクリーン想定なのでtouchmoveでe.preventDefault()すればよかったが、
ネイティブのスクロールと併用すると困るパターンが出てきそう。

<blockquote class="twitter-tweet" lang="ja"><p><a href="https://twitter.com/doke">@doke</a> touchstartでpreventDefaultして、ネイティブのスクロール殺せばいけませんでしたっけ</p>&mdash; げこたん (@GeckoTang) <a href="https://twitter.com/GeckoTang/statuses/378086788591386624">2013, 9月 12</a></blockquote>

@GekoTangの言うとおりtouchstartでpreventDefaultでも良いのだけど、それだと子要素のclickイベントも死んでしまうため、touchmoveでスクロール抑止しました。

この記事は[2013-09-12の記事の転載](http://yd-niku.hatenablog.com/entry/2013/09/12/190927)です