OmniAICreator/Qiita-1.07M huggingface dataset:
EC2上でgsutilを使用してアカウントが異なるバケットにアクセスしたい



gsutil をwgetを使ってダウンロードします。

```
$ wget https://storage.googleapis.com/pub/gsutil.tar.gz
```

ダウンロードしたファイルをホームディレクトリへ展開。

```
$ tar xfz gsutil.tar.gz -C $HOME
```

環境変数に追加。（１回限りの場合は追加必要ないです）
```
export PATH=${PATH}:$HOME/gsutil
```
（必要に応じて、.bash_profileに追加）

gsutil の環境を構築
```
$ gsutil config
```


以下のように、URLが表示されるため接続したいバケットにアクセスできるGoogleアカウントでログインした状態でジャンプします。
Please navigate your browser to the following URL:
https://accounts.google.com/o/oauth2/auth?scope=httXXXXXX
承認ボタンを押して、表示されたコードをコンソール画面へ貼付け。

projectidを入力
What is your project-id?
以下のページからプロジェクトは作成可能
https://cloud.google.com/console#/project

これで、gsutilが使えるようになりますが、異なるアカウントで接続したい場合は、 .botoファイルを切り換える必要があります。

現在の .botoファイルを退避する
```
$ cp -p $HOME/.boto $HOME/.boto_account1
```

この状態で、もう一度、gsutil config を実行する
```
$ gsutil config
```

設定手順は上部の方に記載しているものと同様です。

今回も同じように.botoファイルを退避しておきます。
```
$ cp -p $HOME/.boto $HOME/.boto_account2
```


gsutil を使用してバケットへアクセスするタイミングで以下のように .botoファイルを置き換えると異なるアカウントのバケットにも簡単
にアクセスできるようになります。
```
$ cp -p $HOME/.boto_account2 $HOME/.boto 
```
パーミッション変更をミスってEC2に入れなくなった時の対処方法


EC2で /（ルート） のパーミッションを変更した（700等）場合、ec2-userによるログインができなくなります。
さらに、
「Permission denied (publickey) 」というエラーになってしまい結構原因が気づきにくいです。

以下、/（ルート） のパーミッションを変更したときの動きです。

まずは、ssh でログイン
```
$ ssh -i ./keys/key_001.pem ec2-user@54.152.XXX.XXX
```

ログイン成功すると↓

```
Last login: Wed Mar 18 09:01:15 2015 from　XXXXXXXXXXXXXXXXXXXXX

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

[ec2-user@ip-172-31-5-XXX ~]
```


そして、問題のコマンドを実行！
```
$ sudo chmod 700 /
```

【注意】この状態で、セッションが切れると後戻りできなくなります！ 
=======



さて、この状態でどうなるか別コンソールを立ち上げてログインしてみましょう。

```
$ ssh -i ./keys/key_001.pem ec2-user@54.152.XXX.XXX
Permission denied (publickey).
```

パーミッションエラーになりましたね

***


それでは、ここから間違えて/（ルート）のパーミッションを変更してしまってコンソールに入れなかったときにどうすれば良いか記載します。



AWSコンソールにログインします。
EC2インスタンスの管理画面で適当なマイクロインスタンスを新規で立ち上げます。
![スクリーンショット 2015-03-31 19.12.18.png](https://qiita-image-store.s3.amazonaws.com/0/73861/ce5ca131-98bb-0ddf-59d4-6d58a359249c.png "スクリーンショット 2015-03-31 19.12.18.png")
　

入れなくなったEC2インスタンスを停止して、アッタッチされている vol-06328c4c　をデタッチします。
（Actions →　Detach Volueme）

![スクリーンショット 2015-03-31 19.16.19.png](https://qiita-image-store.s3.amazonaws.com/0/73861/dbe1676c-4885-ac48-5cdc-76dd0439e5ba.png "スクリーンショット 2015-03-31 19.16.19.png")
　　
　　

デタッチが完了した後、新規で立ち上げたマイクロインスタンスに
vol-06328c4c　を アタッチします。
（Actions →　Atatach Volueme）
![スクリーンショット 2015-03-31 19.21.11.png](https://qiita-image-store.s3.amazonaws.com/0/73861/51fe2af2-c9c0-a4d9-698a-31a3e6f30e00.png "スクリーンショット 2015-03-31 19.21.11.png")


***



新しいインスタンスを立ち上げログインします。
```$ ssh -i ./keys/key_001.pem ec2-user@54.155.XXX.XXX
```

アタッチしたボリュームをマウントします。
```$ sudo mkdir /mnt/recovery_ec2
$ sudo mount /dev/xvdf1 /mnt/recovery_ec2
```

マウントしたディレクトリのパーミッションを変更します。
```$ sudo chmod 555 /mnt/recovery_ec2/
```

続いて、新しく作ったマイクロインスタンスを停止して、vol-06328c4cをデタッチ。そして、元のEC2インスタンス（復元したいインスタンス）にvol-06328c4cをアタッチします。


インスタンスを立ち上げログインすると・・・

```
Last login: Wed Mar 18 09:01:15 2015 from　XXXXXXXXXXXXXXXXXXXXX

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

[ec2-user@ip-172-31-5-XXX ~]

```

**無事にログインできるようになりました！！**

***


ちなみに、今回は、 `chmod 700 /` という普通ではやらないようなことを意図的にしましたが、以下のようなシェルを書いてしまった場合同様のことが発生してしまいます。

```ダメなパターン
#!/bin/sh
dir=${test_dir}
file_name=${test_filename}

hoge hoge (←適当な処理）
hoge hoge (←適当な処理）

sudo chmod 700 ${dir}/{file_name}
echo "AAAAA" >> ${dir}/{file_name}
```

${test_dir} と ${test_filename} が NULL になるようなパターンが存在した場合
`sudo chmod 700 ${dir}/{file_name}`
↓
`sudo chmod 700 /`
となり、上記と同じ現象が発生してしまいます。

シェルは結構お手軽に作ってしまうこともあり、NULLチェック等忘れがちで思わぬところで最悪の事態が発生してしまうかもしれません。
update-alternativesの使い方


システムで使われるプログラムのバージョン管理を行うためのupdate-alternativesの使い方。

# 確認

	# update-alternatives --display java
	java - manual mode
	  link currently points to /usr/lib/jvm/default-java/bin/java
	/usr/lib/jvm/default-java/bin/java - priority 1
	/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java - priority 1061
	  slave java.1.gz: /usr/lib/jvm/java-6-openjdk-amd64/jre/man/man1/java.1.gz
	/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java - priority 1051
	  slave java.1.gz: /usr/lib/jvm/java-7-openjdk-amd64/jre/man/man1/java.1.gz
	/usr/lib/jvm/java-8-oracle/jre/bin/java - priority 1062
	  slave java.1.gz: /usr/lib/jvm/java-8-oracle/man/man1/java.1.gz
	Current 'best' version is '/usr/lib/jvm/java-8-oracle/jre/bin/java'.



# 変更

	# update-alternatives --config java
	There are 4 choices for the alternative java (providing /usr/bin/java).
	
	  Selection    Path                                            Priority   Status
	------------------------------------------------------------
	  0            /usr/lib/jvm/java-8-oracle/jre/bin/java          1062      auto mode
	* 1            /usr/lib/jvm/default-java/bin/java               1         manual mode
	  2            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      manual mode
	  3            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1051      manual mode
	  4            /usr/lib/jvm/java-8-oracle/jre/bin/java          1062      manual mode
	
	Press enter to keep the current choice[*], or type selection number: 1


# autoモード

プライオリティ値で自動的に使うものを選択するautoモードへの切り替え

    # update-alternatives --auto vi

まずマニュアルで2番を選択してみる

	# update-alternatives --config vi
	There are 2 choices for the alternative vi (providing /usr/bin/vi).
	
	  Selection    Path                Priority   Status
	------------------------------------------------------------
	  0            /usr/bin/vim.basic   30        auto mode
	  1            /usr/bin/vim.basic   30        manual mode
	* 2            /usr/bin/vim.tiny    10        manual mode
	
	Press enter to keep the current choice[*], or type selection number: 
	root@stg-jenkins-n01:/usr/bin# update-alternatives --auto vi
	update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode.



その後autoモードにすると、priortyで選ばれているのがわかる

	# update-alternatives --config vi
	There are 2 choices for the alternative vi (providing /usr/bin/vi).
	
	  Selection    Path                Priority   Status
	------------------------------------------------------------
	* 0            /usr/bin/vim.basic   30        auto mode
	  1            /usr/bin/vim.basic   30        manual mode
	  2            /usr/bin/vim.tiny    10        manual mode
Logger のログファイルへの出力を標準出力にも出力したい

# <i class="fa fa-star fa-fw"></i>概要

Rails プロジェクトでバッチ処理を実装していた際に、ログファイルへの出力を標準出力にも出力したいというケースがありました。例えば、開発中に `rails runner` コマンドを利用してバッチ処理を手動でキックする際は、ログに出力する内容をコンソール上にも出力したいですよね。

この場合、

```ruby
error_message = '逝ってしまったわ、円環の理に導かれて…'

puts(error_message)
logger.error(error_message)
```

と書くのはあまりスマートではありませんね。
そこでもっと良い解決策がないか、調べてみました。

# <i class="fa fa-lightbulb-o fa-fw"></i>解決策

[ActiveSupport::Logger.broadcast](https://github.com/rails/rails/blob/v4.2.1/activesupport/lib/active_support/logger.rb) メソッドで実現できます。

このメソッドを使って、実際に以下のようなバッチ処理専用 Logger を実装してみました。

```ruby
module MamiLogger
  # MamiLogger (Module) クラスのオブジェクトの特異メソッド (モジュールメソッド) として定義する。
  class << self
    delegate(
      :debug,
      :info,
      :warn,
      :error,
      :fatal,
      to: :logger
    )

    def logger
      @logger ||= begin
        # (1) 専用のログファイル出力用の Logger オブジェクトを作成する。
        logger = ActiveSupport::Logger.new(Rails.root.join('log', "mami_#{Rails.env}.log", 'monthly')
        logger.formatter = Logger::Formatter.new
        logger.datetime_format = '%Y-%m-%d %H:%M:%S'

        # (2) 標準出力用の Logger オブジェクトを作成する。
        srdout_logger = ActiveSupport::Logger.new(STDOUT)
        # (3) 複数のログを出力する機能を備えた Module オブジェクトを作成する。
        multiple_loggers =
         ActiveSupport::Logger.broadcast(srdout_logger)
        # (4) (3) で作成した Module オブジェクトを (1) に extend する。
        logger.extend(multiple_loggers)

        logger
      end
    end
  end
end
```

上記のコードのように、2 つ目の Logger オブジェクトを作成して、それを `ActiveSupport::Logger.broadcast` メソッドの引数に渡したものを 1 つ目の Logger オブジェクトに `extend` します。
そうすることで、複数の出力先に出力する Logger オブジェクトを作成することができます。

```ruby
MamiLogger.info('ξ(✿＞◡❛)ξ もう何も怖くない')
```

```console:console
'ξ(✿＞◡❛)ξ もう何も怖くない'
```

```log/mami_development.log
I, [2015-03-31T18:47:22.344851 #65728]  INFO -- : ξ(✿＞◡❛)ξ もう何も怖くない
```

# <i class="fa fa-book fa-fw"></i>参考

* [Railsで、複数の出力先にlogを出力する](http://blog.takady.net/blog/2014/11/21/rails-logger-broadcast/)
  * 「エラーログだけ 2 箇所に出力したい場合」の方法も記載されています。
[Photoshop Script] 元からあるスクリプトを改変して./outputディレクトを作りそこへ出力するようにする

環境
----
* Windows 8.1 Pro
* Adobe Photoshop CS6

目標
----
出力時にactiveDocumentのディレクトリの中にoutputディレクトを作り、そこがデフォルトの出力先になるようにするコードを追加する。
追加対象は、例えば Export Layers To Files.jsx がある。

トラップ
---
何も考えないで次のコードを加えると

```js
var outputDirPath = activeDocument.path + "/output";
````

パスに日本語を含むとき、`dlgMain.etDestination.text`で当該部分が化ける（パーセントエンコーディング？）。

修正
----
ググると出てくるのは`path.fsName`を利用する方法である。
筆者はWindows/MacOSに両対応(?)させたかったので、パスを作った後**Folderオブジェクトを作り**、正しいパスを得る(`fsName`)。

```js
var outputDirPath = activeDocument.path + "/output";
var outputDir = Folder(outputDirPath);
var fsOutputDirPath = outputDir.fsName.toString();
dlgMain.etDestination.text = fsOutputDirPath;
//Check if it exist, if not create it.
if(!outputDir.exists) outputDir.create(); 
```

問題
----
Mac版でうまくいくかは未検証 :sweat_drops:
Unityで見えない壁を設置する


## 概要

ゲームを作る際に大人の都合で、それ以上進行して欲しくない時が多々あります。

進行してほしくない所が、画面内であれば、適当にオブジェクトを設置してしまえば良いのですが、

それが画面が見きれた場所である場合、一々Sprite等を設置するのは冗長です。

その際は、見えない壁を設置しちゃいましょう。
(※ここに書いてあるのはUnity2D前提で書いています。)


## Create Emptyで空のゲームオブジェクトを生成する

Create -> Create Empty

![20150331183904.png](https://qiita-image-store.s3.amazonaws.com/0/64588/3fa0a967-9b49-9589-78bc-43f588ef9ad4.png "20150331183904.png")

これにBox Collider2Dのコンポーネントを追加します

![20150331184245.png](https://qiita-image-store.s3.amazonaws.com/0/64588/a0bf4818-4725-91d1-96cf-fbc9f0a9a368.png "20150331184245.png")

やることはこれだけ、後は、同じBox Collider2Dのオブジェクトをぶつければ、衝突判定が発生して、それ以上進行できなくなります。
rubyやるなら、rbenv入れるべし

前回nokogiri問題ですったもんだしたが、結論から言うと、rbenvを使え、ってことになった。
rbenvっていうのはいろいろなバージョンrubyをインストールして、しかもそれを切り替えて使える、という便利なものだ。
まあ、自分の場合はもともとのOSXのデフォルトで入っていたrubyがなんかどっか調子が悪くなってしまったんだろう。
rbenvで別のrubyをまっさらな状態で入れれば問題はなくなるに違いない、というわらをもつかむ思いでやってみたということである。

とりあえずこちらを参考にしながら。

[Ruby on Rails チュートリアルって長いのでサマリー(1章)〜環境構築〜](http://qiita.com/itagakishintaro/items/ebf8041b23cc278a19ff)

```
brew install rbenv ruby-build
```

うまく入ったら、

```
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
echo 'export PATH="$HOME/.rbenv/shims:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
```

rbenvのバージョンを表示。

```
rbenv --version
```

どういうrubyのバージョンがあるか。

```
rbenv install -l
```

その中で2.2.1を選んでインストール。

```
rbenv install 2.2.1
```

今インストールされているバージョンを表示

```
rbenv versions
```

出力

```
  system
  2.0.0-p643
  2.2.0
* 2.2.1 (set by /Users/macuser/.rbenv/version)
```

バージョン2.2.0を使うことにする場合。

```
rbenv global 2.2.0
rbenv rehash
```

今設定されているバージョンの確認

```bash
rbenv version
```

出力

```
2.2.0 (set by /Users/macuser/.rbenv/version)
```


こういう状態で

```
gem list
```

とやると


```
*** LOCAL GEMS ***

bigdecimal (1.2.0)
io-console (0.4.2)
json (1.7.7)
minitest (4.3.2)
psych (2.0.0)
rake (0.9.6)
rdoc (4.0.0)
test-unit (2.0.0.0)
```

gemが数えるほどしか出てこない(^^;

一応、ここで

```
bundle list
```

もやってみた方がいいかもしれない。ここでまだなにも入れてないのにリストが出たりすると、バージョン別のパスが読まれていない可能性がある。



あとはバンドラーいれて


```
gem install bundler
```

Gemfile作って

```
bundle init
vim Gemfile
```

インストールするだけ。

```
bundle install --path vendor/bundle/
```

もうOSXのもともとのrubyは使わんね。
C++からMySQLに簡単に接続するラッパークラス

# 目的

なんらかの理由でC++から接続できたら便利な場合、特定のDBアクセスに対してだけパフォーマンス出したい場合に使う。

ソース
https://github.com/0xfffffff7/MySQLWrapper

# 依存
libmysqlclient

# サンプル

```
#include	"mysqlwrapper.h" 


// MYSQL TABLE EXAMPLE 
//　 CREATE TABLE book 
//    ( 
//    id INT(11) NOT NULL AUTO_INCREMENT, 
//    title VARCHAR(64), 
//    author_name VARCHAR(32), 
//    detail TEXT, 
//    PRIMARY KEY (id) 
//    ); 


int main(int argc, char* argv[]) 
{ 
	const char *server = "localhost"; 
 	const char *user = "root"; 
 	const char *password = "password"; 
 	const char *database = "myapp"; 

	MySqlWrapper sql; 

 	sql.init(); 
 	 
    // 接続
 	if(sql.connect(server, user, password, database) == false){ 
 		printf("error %s\n", sql.getError()); 
 		return 0; 
 	} 
 
     // クエリを投げる
 	if( sql.query("DELETE FROM book;") == false){ 
 		printf("error %s\n", sql.getError()); 
 		return 0; 
 	} 
 	sql.clear(); 

     // クエリを投げる
 	if( sql.query("INSERT INTO book (title, author_name) VALUES ('book_A', 'auth_A');") == false){ 
 		printf("error %s\n", sql.getError()); 
 		return 0; 
 	} 
 	sql.clear(); 
 	if( sql.query("INSERT INTO book (title, author_name) VALUES ('book_B', 'auth_B');") == false){ 
 		printf("error %s\n", sql.getError()); 
 		return 0; 
 	} 
 	sql.clear(); 

     // クエリを投げる
 	if( sql.query("SELECT * FROM book;") == false){ 
 		printf("error %s\n", sql.getError()); 
 		return 0; 
 	} 
 
    // 結果を取得
 	long long nRows = sql.getRowCount(); 


 	MYSQL_ROW row; 
 	while( (row = sql.getRow()) != NULL ){		 
 		printf("%s %s %s\n", row[0], row[1], row[2]); 
 	} 
 	sql.clear(); 

 	sql.close(); 

	return 0; 
}
```
ExcelVBA IE操作サンプル

# 概要
　ExcelVBAを利用した、IE操作用のサンプル。
　セルの値をIE側へ転記したい時などに利用。

# VBAサンプル

```lang:表示済みのIEを捕まえる 
    Dim ie As Object    'IEを格納する変数（オブジェクト型）
    Dim sh As Object    '起動中のShellWindow一式を格納する変数
    Dim win As Object   'ShellWindowを格納する変数
    Dim document_title As String  'ドキュメントタイトルの一時格納変数
    '起動中のShellWindow一式を変数winsに格納
    Set sh = CreateObject("Shell.Application")
    'ShellWindowから1つずつ取得して処理
    For Each win In sh.windows
        'ドキュメントタイトル取得失敗を無視（処理継続）
        On Error Resume Next
        document_title = ""
        document_title = win.Document.Title
        On Error GoTo 0
        'タイトルバーに"取得したいタイトル"が含まれるかチェック
        If InStr(document_title, "取得したいタイトル") > 0 Then
            '変数ieに取得したwinを格納
            Set ie = win
            'ループを抜ける
            Exit For
        End If
    Next
```
```lang:Excel内のセル値を、IE側へ転記する
　ie.Document.getElementsByName(InStrStartH)(0).Value = 変数
```
High DPI 時のSublimetext3のインライン入力

4Kモニタを購入して、DPIを標準から変更して使ってます。ドットバイドットの場合は問題ないのですが、WindowsではDPIを変更するとまま問題が発生します。Windows8.1～はそれでもよくなった気がするのですが。

Sublimetext3もHgih DPI（高DPIともいう）で使うと、タブの日本語が化けたりと微妙に問題が発生するのですが、なにより問題なのがIMESupport プラグインのインライン展開部分がズレることです。

![2015-03-31 17_25_59-ABCEFG • (Workspace) - Sublime Text (UNREGISTERED).png](https://qiita-image-store.s3.amazonaws.com/0/50166/4f3e939f-9f2b-031c-6d8f-d3987eecc603.png)

多分、High DPI対応していないのが問題かなぁと思って、手っ取り早くクイックハックしてみました。本来ならマニフェストファイル等でHigh DPI対応を宣言するのですが、この方法ではうまくいかなかったので、SetProcessDPIAware関数をざっくり呼び出します。推奨された関数ではなさそうなのですが。（ちゃんとVSでプロジェクト作ってやればいいのかもしれないですが）

SetProcessDPIAware function
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms633543%28v=vs.85%29.aspx

以下、手元の環境が64bit版なので、それのDiffです。

```
index 33574a7..deb40d6 100644
--- a/hook/imesupport_hook.c
+++ b/hook/imesupport_hook.c
@@ -21,6 +21,7 @@ BOOL WINAPI DllMain(HINSTANCE hModuleDLL, DWORD fdwReason, LPVOID lpvReserved)
 {
        hModule = hModuleDLL;

+       SetProcessDPIAware();
        switch (fdwReason) {
        case DLL_PROCESS_ATTACH:
                break;
```

コンパイルはMakefileがありましたが、VS2013のコマンドプロンプトからさくっと以下を実行すればDLLが作成されます。

```
cl /wd4996 /LD /Feimesupport_hook_x64.dll imesupport_hook.c imm32.lib user32.lib
```

あとは、%appdata%\Roaming\Sublime Text 3\Packages\IMESupport あたりにパッケージが入っていると思われるので該当DLLを置換すればOKでしょう。いったんサインアウトしないと誰かがDLLをつかんでいて置換できないかもしれません。

以下、置き換え後です。

![2015-03-31 17_53_29-ABC • (Workspace) - Sublime Text (UNREGISTERED).png](https://qiita-image-store.s3.amazonaws.com/0/50166/06b1eeb8-5c0a-a948-a54e-687c4ccf5069.png)


とりあえず、見られる位置になりました。しばらく使ってみたいと思います。
AtomエディタのEmmetで、PHPファイルでもHTMLスニペットを使う

[Atom](https://atom.io/) で [Emmetプラグイン](https://atom.io/packages/emmet) を使っているけど、デフォルトだとPHPファイル内でうまく動いてくれない。
例えば `html:5` が `<html:5></html:5>` になってしまう。ので、設定メモ。

**[:arrow_down: 追記の方がおすすめ](#%E8%BF%BD%E8%A8%98)**

設定ファイルの場所は以下。
（Atomの設定画面から「Open Config Folder」を開くのがラク）

```txt
[ユーザーディレクトリ]/.atom/packages/emmet/node_modules/emmet/lib/snippets.json
```

設定ついでに以下の部分も日本語にしておくと良いかも。

```json:snippets.json
{
	"variables": {
		"lang": "ja",
		"locale": "ja-JP",
		"charset": "utf-8",
		"indentation": "\t",
		"newline": "\n"
	}

	/////ここからいろんな設定/////
}
```

本題のPHP対応は、設定ファイルの最後に以下を追記するだけ。

```json:snippets.json
{
	/////ここまでいろんな設定/////

	,"php": {
		"extends": "html"
	}
}
```

はじめのカンマは、前の行にカンマがない時用です。
以上メモでした。


## 追記

もっと簡単な方法があったので追記。
Emmetはどうやら[ユーザー拡張ができる](http://docs.emmet.io/customization/)ようなので、その方法を。

拡張用のディレクトリを作成し、そこに各設定ファイルを入れる。
ディレクトリはデフォルトで `~/emmet` になっている。（画像はAtomのEmmet設定画面）
![2015-05-13_100218.png](https://qiita-image-store.s3.amazonaws.com/0/37122/53dbb128-7eef-3acc-3800-2b1eee0c5b94.png)

ここに **snippets.json** という名前のファイルを作り、拡張したい項目のみ記述する。
今回拡張したいのはPHPでの動作と日本語圏対応なので、以下のみ。

```json:~/emmet/snippets.json
{
	"variables": {
		"lang": "ja",
		"locale": "ja-JP"
	},
	"php": {
		"extends": "html"
	}
}
```

これで動作した。
最初の方法だとAtomのEmmetアップデートのたびにリセットされてしまうので、こっちの方が良い。
ruby + win32oleでofficeファイルを印刷する


ruby + Win32ole + officeを使用して、officeファイルを印刷する
（Word, Excel, PowerPointでそれぞれ、メソッド名が違うのはOffice仕様。。。）

## 試した環境

* Windows2008
* Office2010 standard
* ruby2.0.0

## Word
```rb
# -*- coding: utf-8 -*-
require 'win32ole'

wd = WIN32OLE.new('Word.Application')
wd.DisplayAlerts = false

# Wordファイルを開く
doc = wd.Documents.Open(:FileName => "C:\\hoge.doc")
wd.Options.PrintBackground = false

# プリンタ設定
wd.WordBASIC.FilePrintSetup(:Printer => "Printer1", :DoNotSetAsSysDefault => 1)

# 印刷
doc.PrintOut

# ファイルclose
doc.Close(false)
wd.Quit
```

## Excel

```rb
# -*- coding: utf-8 -*-
require 'win32ole'

xl = WIN32OLE.new('Excel.Application')
xl.DisplayAlerts = false

# Excelファイルを開く
book = xl.Workbooks.Open(:Filename => "C:\\hoge.xls")

# 印刷
book.ActiveSheet.PrintOut(:ActivePrinter => "Printer1")

# ファイルclose
book.Close
xl.Workbooks.Close
xl.Quit
```

## PowerPoint

```rb
# -*- coding: utf-8 -*-
require 'win32ole'

pp = WIN32OLE.new('PowerPoint.Application')
pp.Visible = true
pp.DisplayAlerts = false

# PowerPointファイルを開く
prs = pp.Presentations.Open(:FileName => "C:\\hoge.ppt", :WithWindow => false)
prs.PrintOptions.PrintInBackground = false

# プリンタ設定
prs.PrintOptions.ActivePrinter = "Printer1"

# 印刷
prs.PrintOut

# ファイルclose
prs.close
pp.Quit

```

## 注意点

* 途中でエラーとかになり、close処理が行われないと、officeプロセス(WORD.exe, EXCEL.exe, POWERPNT.exe)が残る
* ファイルを開く・印刷途中でエラー or 確認ダイアログが出たりすると、そこで処理が止まる（誰もボタンを押せないので）。また、`DisplayAlerts = false`にしても、完全にメッセージの抑止はできない
さようなら tail -f 。こんにちは less +F


元記事は http://www.brianstorti.com/stop-using-tail/ です。

前世紀よりtail -f を愛用してきましたが、とうとうさようならする時がしました。less +F です。

+Fオプションはtail -f のように動きますが、コマンド操作が可能です。

実行してみます。

``` shell
$ less +F ./README
```

こんなかんじでtail -f のように動きます。

``` shell
Hi
This is sample text.

Waiting for data... (interrupt to abort)

```

Ctrl+Cを入力すると、通常のlessになります。そこでF(大文字のf)を入力するとまたtailモードになってくれます。これが便利。

Macos,Amazon Linux,CentOSでつかえることを確認しました。

元ブログでは複数ファイルをtailしたい場合はtail -f じゃないと出きないということが書いてありましたが、そのような使い方はしたことがないので、less +Fで十分です。 tail -f 今までありがとう。

あとmanは定期的によみなおしがほうがいいのかもしれないと思いました。
socket.ioで書いてもすぐ消える落書きアプリを作ってみた

socket.ioを最近勉強していて、こないだは簡単な[チャットアプリを作ってみた](http://qiita.com/mito_log/items/a6207d2b43189687d750)ので、今度は落書き共有アプリを作ってみました。perlin noiseも勉強してみたかったので、1次のperlin noiseで線を描くようにしてみました。使い方あってるか怪しいですが...。

# こんな感じ
![gif](https://dl.dropboxusercontent.com/u/91774212/awkwardLineShare.gif)

# ソース
https://github.com/mitolog/AwkwardLineShare
※ SIOSocket.m/.hも少し改変したので、pod install後、個別に上書きしたら動くと思います

# アプリの機能
 - perlin noiseでいびつな線を描ける
 - 線は一定期間で消える
 - 描いた線をsocketをつないでいる各端末と共有できる

# アプリの大まかな仕組み
 - View ControllerのviewDidLoad()でソケット通信開始、及びタイマーでdrawRectを一定間隔で再描画するように各サブビューにsetNeedsDisplayを送る
 - owner(自身)とmember(他端末)用のUIViewサブビュー(AwkwardLineView)を用意
 - ownerの場合は、touchイベントをオーバーライドしてバッファ用の配列に座標を溜める
 - memberの場合は、socket.ioのコールバックで座標の配列をもらい、バッファ用の配列と差し替える
 - 各サブビューのdrawRectでバッファ配列に溜めた座標を使って描画処理
 
# 引っかかったところ
## drawRectがsetNeedsDisplayで再描画されない！
これについては、[別でまとめた](http://qiita.com/mito_log/items/82b5f974e4b079bda3a6)のでそちらをご参照ください。

## SIOSocketでクライアント側からemitする場合のパラメータは複数取れる

クライアント側ではこのようにemitしています

```objc:ViewController.m
[self.socket emit:@"draw" args:@[points, self.socket.socketId]];
```

pointsの中身は `@[@{x=1,y=0},@{x=1.1,y=0.1}...]` こんな感じで、CGPointのdictionaryの配列となっています。
self.socket.socketIdは、NSString、自身のsocketidになります。

で、これをSIOSocketのメソッドに渡すと、このように展開され、

`objc_socket.emit('draw', [{"X":186.2593,"Y":82.25927}], 'KEW30FqD9rNAjdahAABL')`

'draw'っていう名前のイベントとして、2つのパラメータを持ってサーバ側に送られます。

利用しているAPIは公式ドキュメントでいくとこれかなと。
[Socket#emit(name:String[, …]):Socket](http://socket.io/docs/server-api/#socket#emit(name:string[,-…]):socket)

で、サーバ側では、こんな感じでキャッチできます。

```js:awkwardLineShareServer.js
    socket.on('draw', function (data,socketId) {
        io.emit('update', [data, socketId]);
    });
});
```

つまり何がいいたいかというと、今まで、1つのパラメータしか取れないと思っていたんですね。。そのパラメータをjsonとかにして。でも複数とれるんだ、ということが今回分かりました。

## サーバ側からemitする場合のパラメータは複数取れない？

ただ、サーバ側からemitする場合は、`io.emit('update', [data, socketId]);`こんな感じで配列として渡さないとエラーになってしまいましたので、そこもご注意を。

SIOSocketで受け取る際は、

```objc:ViewController.m
[self.socket on: @"update" callback: ^(SIOParameterArray *args)
{
    // Update draw line data
    [self updateDrawLineWithAry:args[0]];
}];
```

こんなふうに、args(配列)でラップされて渡ってきます。おそらくここもパラメータを複数取れるように配慮されて配列なんだと思いますが、なぜかサーバ側で1つしかパラメータをとれなかったので、`args[0]`として1番目の要素に `@[@[CGPointsのDictionary], 'ソケットid']` こういう感じの配列が渡ってくると思いますのでご注意を。

※ もしかしたらやり方がまずいだけで、サーバ側も複数のパラメータをとれるかもしれません。正しいやり方が分かる方いらっしゃればおしえてください！

# 参考
 - perlin noiseに関しては、[Perlinノイズ(Perlin Noise)](http://www.technotype.net/hugo.elias/models/m_perlin.html)の**1次元Perlinノイズの擬似コード**っていう部分を参考にしました。

 - iOSでwebソケット通信する部分は、[SIOSocket](https://github.com/MegaBits/SIOSocket)というライブラリを利用しました。

 - サーバ側の構築は[前回のチャットアプリを作る記事](http://qiita.com/mito_log/items/a6207d2b43189687d750)を参考に
<html:text>タグの位置調整をするには

現在Java、Seasar2(SAStrats/S2JDBC)、JSP、PostgreSQLで
DBを使ったWebアプリケーションを作っています。

Bootstrap3で画面の再構築しているのですが、質問があります。

結論から言うと

**&lt;html:text>タグの位置（高さ）調整をするにはどうしたらいいでしょうか？**
<br>
現在Bootstrap3を使ってナビゲーションを作成し、検索バーを追加したのですが、位置のバランスが悪く調整したいと思っています。

![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/60528/7625ec4e-a703-0213-33fe-4543dd609f2e.jpeg)

もう少し高さを下げて、中間あたりにしたいです。「キーワード」の文字が「名前検索」の横にくるような。

&lt;html:text>タグでテキストボックスを表示させているのですが、調べてもなかなか方法を見つけることができません。

```r:jsp
<!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav navbar-right">
                    <li class="hidden">
                        <a href="#page-top"></a>
                    </li>
                    <li class="page-scroll">
                        <s:link href="diary">Practice</s:link>
                    </li>
                    <li class="page-scroll">
                        <s:link href="login/menu">Menu</s:link>
                    </li>
                    <li class="page-scroll">
                    <p class="navbar-text">名前検索</p>
                    </li>
                    <li class="page-scroll">
                    <s:form action="paging/search/1">
                    </li>
                    <li class="page-scroll">
                    <html:text styleId="hoge" property="searchName" styleClass="form-control" style="width:150px;"/>
                    </li>
                    <li class="page-scroll">
                    <html:submit value="検索" styleClass="btn btn-info"/>
                    </s:form>
                    </li>
                </ul>
            </div>
```


下記のようなことを試しました。
CSSでセレクタをつくりvertical-align:middle;を持たせ、それを
・spanタグのclass属性
・divタグのclass属性
・&lt;html:text>タグのclass属性、styleId属性
を使ってテキストボックスの位置を下げようとしたのですがうまくいきませんでした。

もしわかる方や情報を提供して下さる方がいらっしゃればよろしくお願いします。
[Ruby] コードを短くする為の論理和と論理積（と排他的論理和）のおさらい

なんとなく覚えてるし特に気にしなかった論理和や論理積の演算。
おさらいしてみました。

```rb
def check
  true if hoge.present? && fuga.present?
end
```

↑とかやりがちでしたが、短くできそうです。

```rb
def check
   hoge.present? && fuga.present?
end
```

# 以下おさらいです。

```rb
def hoge

  # 論理積 AND
  false && false #=> false
  false && true #=> false
  true && false #=> false
  true && true #=> true

  # 論理和 OR
  false || false #=> false
  false || true #=> true
  true || false #=> true
  true || true #=> true

  # 排他的論理和 XOR ^
  false ^ false #=> false
  false ^ true #=> true
  true ^ false #=> true
  true ^ true #=> false


end
```

![FEH14S_8_a1.gif](https://qiita-image-store.s3.amazonaws.com/0/18705/bf60297d-c3df-d35e-e4e2-0fbce273f3c2.gif)
引用: (http://mt-net.vis.ne.jp/images/489/FEH14S_8_a1.gif)


## 論理積 AND &&

![59.1.PNG](https://qiita-image-store.s3.amazonaws.com/0/18705/81258a02-0562-cfeb-db64-dc5037eb5b68.png)
引用(http://www.wisdomsoft.jp/images/59.1.PNG)

## 論理和 OR ||


![59.3.PNG](https://qiita-image-store.s3.amazonaws.com/0/18705/49ec651e-a587-35bb-753c-3e0c1558df1f.png)
引用（http://www.wisdomsoft.jp/images/59.3.PNG）

# 注意

rubyのandやorはtrue, falseだけを返すわけではなく、式の結果がtrueかfalseか決定した段階での項の値が返る。

```rb
a = nil
b = 10

a || b # 10

a && b # nil
```


## 排他的論理和 XOR


![59.5.PNG](https://qiita-image-store.s3.amazonaws.com/0/18705/4b32a1db-2392-c6b1-91b1-37155eda07b4.png)
引用（http://www.wisdomsoft.jp/images/59.5.PNG）

# References

- http://hydrocul.github.io/wiki/programming_languages_diff/boolean/operator.html

- http://docs.ruby-lang.org/ja/2.0.0/doc/symref.html
Xcode6 プロジェクト名変更方法

プロジェクト名の変更でハマったので、メモ。


##「BeforApp」→「AfterApp」へプロジェクト名を変更する。

![スクリーンショット 2015-03-31 15.58.57.png](https://qiita-image-store.s3.amazonaws.com/0/47052/c1e6d439-6df9-5437-eb9e-8d85743f65d9.png)
Identity and TypeにあるNameを変更

![スクリーンショット 2015-03-31 15.59.57.png](https://qiita-image-store.s3.amazonaws.com/0/47052/c832072e-455f-6057-2b6c-8dc1ca4ab15d.png)
Renamaをクリック

ビルドすると、
![スクリーンショット 2015-03-31 16.01.04.png](https://qiita-image-store.s3.amazonaws.com/0/47052/85ffa2c7-785a-0d5a-fb91-5dab619759df.png)
エラーが...（うわー...あんま見たくないやつ...どうしよう...）

で、ググってみたらやっぱりありました。

[Xcode 6でプロジェクト名を変更する：「Manage Schemes」](http://kurushimimogakusora.blogspot.jp/2014/12/xcode-6manage-schemas.html)

どうやら、Manage Schemes なるものをイジるらしい。

（以下同内容になりますm(_ _)m）
![スクリーンショット 2015-03-31 16.02.35.png](https://qiita-image-store.s3.amazonaws.com/0/47052/79397462-0678-f301-3dfe-8066a99712cd.png)
Product → Scheme → Manage Schemes を選択
 
![スクリーンショット 2015-03-31 16.02.54.png](https://qiita-image-store.s3.amazonaws.com/0/47052/4f6e61ca-00e2-82d9-d1c6-358c00b30b80.png)

左下の「+」を押して、変更後の名前を追加
![スクリーンショット 2015-03-31 16.03.15.png](https://qiita-image-store.s3.amazonaws.com/0/47052/d6ff4105-b027-aeaf-5427-1bdd611e5396.png)
Closeを押す

![スクリーンショット 2015-03-31 16.08.30.png](https://qiita-image-store.s3.amazonaws.com/0/47052/ddb51c11-4f13-ab7c-6812-a69ab27fadac.png)
できた！
Objective-C の NSClassFromString で Swift のクラスを生成する


# 問題点

Swift で NSObject の派生クラスを定義すると、自動的に `<プロジェクト名>-Swift.h` に Objective-C と互換性を保つためのクラスの宣言が自動で書き込まれる。
NSObject を継承させない場合はクラスの宣言の前に `@objc` を付ければ上記のヘッダファイルに書き込まれる。
ただし、 `SWIFT_CLASS(...)` の中の文字列が `"_TtC<プロジェクト名の文字数><プロジェクト名><クラス名の文字数><クラス名>"` などという複雑な構造をしている。

例えば、MyProject というプロジェクト内の

```swift:MyClass.swift
@objc class MyClass {
...
}
```

の場合は `MyProject-Swift.h` 内に `SWIFT_CLASS("_TtC9MyProject7MyClass")` というクラス名として宣言されてしまい、Objective-C 側で
`NSClassFromString(@"MyClass")` としても `nil` が返ってきてしまう。

# 対処法

Swift のクラスの宣言時に、

```swift:MyClass.swift
@objc(MyClass)
class MyClass {
...
}
```

という風に `@objc(<クラス名>)` を付ければ、 `SWIFT_CLASS("MyClass")` と宣言されるので `NSClassFromString(@"MyClass")` で使えるようになる。

# 参考サイト

[ios - Swift language NSClassFromString - Stack Overflow](http://stackoverflow.com/questions/24030814/swift-language-nsclassfromstring)
DDTでのSource Coloring設定

EclipseのD言語プラグイン「DDT」のソースコード色付け設定について。

Window->Preferences
DDT->Editor->Source Coloring

以下は自分好みの設定。
I love Sublime-Text theme :D

・Default
216, 216, 216

・Keywords
255, 0, 127

・Keywords - Basic Types
82, 227, 246

・Keywords - Literals
・Character Literals
196, 140, 255

・Strings
・Delimited String
236, 228, 126

・Annotations
・Comment
・Doc Comment
255, 255, 255
FragmentのpopBackStackまとめ

##### 一つ前の状態に戻す

[popBackStack()](http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack())

```java
getFragmentManager().popBackStack();
```

##### 指定したIDの状態に戻す

[getBackStackEntryAt(int index)](http://developer.android.com/reference/android/app/FragmentManager.html#getBackStackEntryAt(int))
[popBackStack(int id, int flags)](http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack(int,%20int))

```java
FragmentManager fm = getFragmentManager();
BackStackEntry entry = fm.getBackStackEntryAt(0);
int id = entry.getId();
fm.popBackStack(id, 0)
```

※Stack に何もない場合は getBackStackEntry(0) が null になる

##### 指定したIDの状態の一つ前に戻す

###### 指定したタグの状態に戻す

[popBackStack(String name, int flags)](http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack(java.lang.String,%20int))

```java
// 事前に下記のような操作を行う
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace({id}, {Fragment});
ft.addToBackStack("TAG");
ft.commit();
```

```java
// TAG まで戻る
FragmentManager fm = getFragmentManager();
fm.popBackStack("TAG", 0)
```

###### 指定したタグの状態の一つ前に戻す

```java
// 事前に下記のような操作を行う
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace({id}, {Fragment});
ft.addToBackStack("TAG");
ft.commit();
```

```java
// TAG の前まで戻る
FragmentManager fm = getFragmentManager();
fm.popBackStack("TAG", FragmentManager.POP_BACK_STACK_INCLUSIVE)
```

下記のメソッドはそれぞれ上記メソッドと同じ内容が同期的に行われる

[FragmentManager.popBackStackImmediate()](http://developer.android.com/reference/android/app/FragmentManager.html#popBackStackImmediate())

[FragmentManager.popBackStackImmediate(int id, int flags)](http://developer.android.com/reference/android/app/FragmentManager.html#popBackStackImmediate(int,%20int))

[FragmentManager.popBackStackImmediate(String name, int flags)](http://developer.android.com/reference/android/app/FragmentManager.html#popBackStackImmediate(java.lang.String,%20int))
Amazon LinuxにPHP5.6入れたらcannot find php_pdo_driver.hが発生する時の対処

## 対処に至るまでの流れ

* Amazon LinuxにPHP5.6を入れたい(PHP5.4以降の機能が使いたいから)

* こちらを参考に`sudo yum -y install php56 php-pdo php-common`みたいな感じでインストール
CentOS 5, 6 / Amazon Linux で PHP をパッケージインストールする方法まとめ - Shin x blog http://www.1x1.jp/blog/2013/12/how-to-install-php-rpm-on-centos-5-and-6-amazone-linux.html

* PDOを使っている箇所で、`cannot find php_pdo_driver.h`エラーが発生

* ググると、PHPのパスが通っていないとかPHPのMySQLドライバをソースコンパイルして直接して入れろとか色々出てくる

* どちらもピンとせず、一度以下を参考にPHPをアンインストール
CentOS6にPHP5.6をインストール - inexio（アイネクシオ）inexio（アイネクシオ） https://inexio.jp/20140624-323

* PHP5.3で`sudo yum -y install php php-pdo php-common`してみる
* うまく動作するようになった

* ただし、5.4以降の機能が使いたいのでこれだと意味が無い
* RemiリポジトリでPHP5.6を入れることに。

* 色々参考に、Remiリポジトリを有効にして`sudo yum -y install php56 php-pdo php-common`してみる
* なぜか、php5.3がインストールされてしまう。。
* こちらを参考にRemiを最優先にしたら、インストール完了。
Amazon LinuxにPHP + memcached + Redisをインストール | ワンダープラネットエンジニア Blog http://wonderpla.net/blog/engineer/PHP-memcached-Redis/
* 無事エラーも解消されました。

## 結論
* Amazon LinuxでPHP+PDO使いたい場合は、Remiからインストールしよう。
NamespaceのあるModelのヘルパーの作り方


https://github.com/barryvdh/laravel-ide-helper で EloquentのModelをコメントでメソッド名補完とかそんなので、Modelが \App 以外とか別のNamespaceにあるときの方法

```shell
> php artisan ide-helper:models 'MyService\Model\User' 'MyService\Model\OAuth'
```

こんな感じ
でも、某からMac OS X(Yosemite)環境に入って、Xcodeでプログラムを作りたいんだよ!

* [先生! Mac OS Xを持ってないけど、hdiutil が必要なんです!!]
(http://qiita.com/makoto1899/items/d937bc3a4cf7d9df980a)
* [そうだ!自前で仮想環境があれば良いんだ!(ぴし]
(http://qiita.com/makoto1899/items/96c6ab6095eefb66a403)

の続きです。[vmOSX](http://virtualmacosx.com/index.php/dedicated-plans)の"Fractional Dedicated Server 2 GB/2 CPU"は、ありえない位遅い...やっぱり、海外サーバは遅いのかな!?あと、リソースが少ないよね。Yosemite で2GBメモリって言うのも辛そうだし。まあ、hdiutil が使えただけ良かった。1ヶ月で解約っと。

ごほごほして、自前のMac OS X(Yosemite)環境を作ろうと思ったんだけど、どうも敷居が高いようだ。それなら、["新"Macbook](http://dq10.h7i.jp/entry/2015/03/10/000000)を買うよ～

でも、[3年戦える!? ThinkPad X1 Carbon Japan Limited Edition 2015 Gen 3 を買いました](http://qiita.com/makoto1899/items/4e166af9baaad7e282cc) だし、資金も心許ないよ。おまけに、2台のノートパソコンを持ち運ぶのは、どんだけ愛があっても物理的に無理。

## でも、某からMac OS X(Yosemite)環境に入って、Xcodeでプログラムを作りたいんだよ!

どうも、仮想化で提供されるMac OS X環境には限界があるようだ。[ Mac Mini Vault](http://www.macminivault.com/)が最後の望むか!? ちなみに、自宅には、ほぼ使っていない [Mac mini (Late 2012) ](https://support.apple.com/kb/SP659?locale=ja_JP&viewlocale=ja_JP) のクアッドコア+16GB+1TB Fusion Driveがあるよ!これを、[ Mac Mini Vault](http://www.macminivault.com/)に送りつけて、設置してもらう。すると、初期費用0で、3200円/月程度。ありかも!クロネコヤマトの海外発送で、Mac miniクラスならアメリカ宛で￥8,850らしい。そんなに気にならない金額だなー。おお!現実味が!

ただ、海外データセンターなので、速度が気になる。[Mac Mini Vault](http://www.macminivault.com/)には、「Demo機を用意して!お願い!」って依頼しているから、そのうち実験出来るだろう。

## ただ、ここまで考えて

「自宅にMac miniがあるなら、Bフレッツなりで、ポートをあけて、アクセスすれば良いじゃん」という発想に行き着く。まあ、自宅サーバはありだけど、電気代やら落雷対策の無停電源装置(UPS)など、逆に出費が痛い。実家だと、NURO光があるから、"そこに置く"という手もあるんだけどね。前に、自宅サーバを運用していたけど、いろいろ面倒だったので、パスかな。

## [Mac Mini Vault](http://www.macminivault.com/)に、ただMac miniを置くのは、なんか面白みがないなー

ドラクエ10 3DS版の「cloudサーバ」もどきで、iPhoneからドラクエ10は出来ないかな～。フルスペックのMac OS Xがあるわけだから、VirtualBoxなりVMware FusionなりParallels Desktopなりで、仮想化Win8を動かせば、ドラクエ10も可能だな。
だが、これってありがち。つまらない。そういえば、VMware ESXi5.5で、Mac OS X(Yosemite)が動くんだっけ!? Mac mini+ESXi5.5ならライセンスの問題は無いよ!調べてみる。ちなみに、俺のMac miniは、`Macmini6,2`っていうらしい。

* [How to build custom ESXi ISO for Apple Mac Mini?](http://www.virtuallyghetto.com/2014/09/how-to-build-custom-esxi-iso-for-apple-mac-mini.html)
* [ESXi Support for 2014 Apple Mac Mini 7,1](http://www.virtuallyghetto.com/2014/10/esxi-support-for-2014-apple-mac-mini-71.html)

なんか、いけそう。4core+16GBメモリといえば、結構高性能なサーバになるよ。Mac OS X(Yosemite)に8GB,Win 8に4GB,Ubuntu 14.04LTSに3GBでも十分運用出来そう。おお!さくらのVPS 4GBを解約出来るか!?

とりあえず、[Mac Mini Vault](http://www.macminivault.com/)のお試し待ちだな。(続く)

## 比較!?

http://macminicolocomparison.com/ を見ると、Mac Mini Vault 一択っぽいよ!?
キミは伝説の「slコマンド」を見た事があるか!

Linux/BSD系/Solaris/Mac OS X では、ファイルリストを表示する時
`ls`
と打つ。ただ、Typoする事もたまにある。
そう、それが「**sl**」

![sl.gif](https://qiita-image-store.s3.amazonaws.com/0/35295/95fb77fd-fb66-1f9a-4e9e-1495d41d7f2f.gif)

Ubuntu/Debian GNU/Linux は、**sl** コマンドが用意されているのだ!
`aptitude install sl`

で、面白いので是非! こういう遊び心が楽しいですね。
GIMPでiTunes申請用画像を作成する

申請用PNG画像を作成していたが万策尽きた。

「レイヤー→透明部分→アルファチャンネルの削除」を全てのレイヤーに行っても、
エクスポート時に「背景色の保存」「解像度を保存」「作成日時を保存」「透明ピクセルの色の価を保存」とすべてのチェックを外してみても、iTunesでのスクリーンショット登録時に

```
イメージにアルファチャンネルや透過を含めることはできません
```

というメッセージが出る。

回避する方法としては次のあたり。

1. JPEGで保存
JPEG形式では透過がないので問題はなくなる。

2. Macのプレビューでアルファチャンネルを削除する
Macのプレビューで開いて「ファイル→書き出す」で、「アルファ」のチェックボックスを外して保存しなおす。

3. 他のツールを使う
Photoshopとかならできると思うが手元にないのでわからないです。
アンダーバー(_)をハイフン(-)にお引越し


別ドメインにお引越しするついでに、アンダーバーをハイフンにしたいケース。引越し前がApacheというのは、まだよくある話だと思うのでメモ。`.htaccess`にこんな感じで書けばOK。

```
<IfModule mod_rewrite.c>
RewriteEngine On
 
RewriteRule (.*)_(.*) $1-$2 [N=10]
RewriteRule (.*) http://somewhere.dom/$1 [R=301]
</IfModule>
```

- RewriteRule 1行目: 一つ目の`_`を`-`に置換し、`_`が無くなるまで繰り返す
- RewriteRule 2行目: 新しいドメインに転送

## [N]フラグ

[公式サイトの例](http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_n)だとこんな感じ。パスに含まれる`A`をすべて`B`に変えます。

```
RewriteRule (.*)A(.*) $1B$2 [N]
```

ただし、ドキュメントにも

> Use with extreme caution

と書かれているように、設定を失敗すると無限ループするので注意が必要です。バージョン2.4.8以降であれば、`[N=10]`のようにして繰り返し回数を制限できます。

## [DPI]フラグ

最初の例だとうまく動かない場合、[[DPI]](http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_dpi)フラグをつけて、`PATH_INFO`を削除すると解決することも。レンタルサーバとかの`.htaccess`は謎が多い...

```
<IfModule mod_rewrite.c>
RewriteEngine On
 
RewriteRule (.*)_(.*) $1-$2 [N=10,DPI]
RewriteRule (.*) http://somewhere.dom/$1 [R=301]
</IfModule>
```
HSPでメッセージだけアプリ

##概要
メッセージを表示するだけのアプリ

##コード
```lang:HSP
#packopt hide 1
dialog "メッセージ"
end
```

1行目をいれることで、メインウインドウを非表示にできます。
`screen`命令で非表示ウインドウ指定もできますが、それだと一瞬画面が出てしまいます。
回転方向が右向きか左向きか判別する処理

自分用覚書
Unity以外でも使える
というかUnityならAnimatorとか使えば、特に考える必要なし？ ﾜｶﾝﾈ

# 例
例えばキャラクターが30度の方向を向いていて
300度の位置にゆっくり振り向かせたいとする

```lang:Main.cs
private Vector3 _next;

void Start()
{
    // キャラクターY軸 30度
    // キャラクターにゆっくり向いてほしい角度 300度
    character.rotation = Quaternion.Euler(new Vector3(0f, 30f, 0f));
    _next              = new Vetor3(0f, 300f, 0f);
}

private void _update()
{
    // 差分角度   = 現在の角度 - 振り向かせたい角度;
    // 現在の角度 = 現在の角度 - (差分角度 * イージング調整);
    Vector3 diff       = character.rotation.eulerAngles - _next;
    character.rotation = Quaternion.Euler(
        character.rotation.eulerAngles - diff*0.9f
    );
}
```

これだとぐるっと遠回りな回転をしてしまう
明らかに違和感がある
こういう時は左回転させたい 反時計回りに60度回転してほしい
でもよくﾜｶﾝﾈ
どうしよう？

# コード
とりあえずキャラクターをどっちに回転させるか判別するところから始める

```lang:Util.cs
/// <summary>
/// 回転方向左右判別
/// </summary>
/// <param name="current">現時点での角度</param>
/// <param name="target">最終的な角度</param>
/// <returns>true:時計回り false:反時計周り</returns>
private bool _checkClockwise(float current, float target)
{
    return target>current ? !( target  - current > 180f)
                          :    current - target  > 180f;
}
```

なんかこれで右回転のほうが目的の角度に近いかどうかがわかる
頭痛いんでもう考えたくない
引数はUnityなら
`_checkClockwise(character.rotation.eulerAngles.y, _next.y)`
になる
UnityはrotationにQuaternionの値が入ってる
Quaternionの取り扱いとかｼﾗﾈ eulerつかえ euler
あとはこの判別した値を元に、更新するときに値をちょい直す

```lang:Main.cs
private bool _isClockwize; // _checkClockwise の結果を保存しておく

private void _update()
{
    // 差分角度 = 現在の角度 - 振り向かせたい角度;
    Vector3 diff = character.rotation.eulerAngles - _next;

    // 正規化（今回はY軸のみでいい）
    // 例で挙げた値を当てはめると、 diff.y は -300 になる
    // その時は360度足すと、60度になり、反時計周り60度になる
    // %360 は、例えば480度とかの値を120度に直すための処理
    diff.y = (diff.y+(_isClockwise?-360f:360f))%360f;

    // 現在の角度 = 現在の角度 - (差分角度 * イージング調整);
    character.rotation = Quaternion.Euler(
        character.rotation.eulerAngles - diff*0.9f
    );
}
```

あとはアナログスティック動かした時とかに当てはめてればいいんでないかと思う
LDRizeをGreasemonkey2.3以降で動くように修正した


Greasemonkey2.2まで動いてたLDRizeがGreasemonkey2.3以降動かなくなったので2.2を使い続けてたんですがいい加減Greasemonkeyメジャーバージョンが3に上がってたので対応しました。

## 対応
- minibuffer.user.jsとldrize.user.jsを1ファイルに結合
- 結合したminibuffer.user.jsのsharedObjectがundefinedでエラーを吐いていたのでスクリプトの先頭で `var sharedObject = {}` を宣言

これだけでとりあえず動くようになりました。原因特定がちょっと面倒だったけど修正は簡単だった。

今動いてるスクリプト
[Greasemonkey/minibuffer.user.js at master · tigberd/Greasemonkey](https://github.com/tigberd/Greasemonkey/blob/master/Minibuffer/minibuffer.user.js)
簡単なvimセットアップ

### basic
下記のconfigファイルを`~/.vimrc`として保存する
http://amix.dk/vim/vimrc.html

### package manager

https://github.com/tpope/vim-pathogen

```bash
$ mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
```

`~/.vimrc`に下記の一行を追加する
`execute pathogen#infect()`

### install nerdtree

https://github.com/scrooloose/nerdtree

```bash
cd ~/.vim/bundle
git clone https://github.com/scrooloose/nerdtree.git
```

### install minibufexpl.vim

https://github.com/fholgado/minibufexpl.vim.git

```bash
cd ~/.vim/bundle
git clone https://github.com/fholgado/minibufexpl.vim.git
```

### install ctrlp.vim

https://github.com/kien/ctrlp.vim

```bash
cd ~/.vim/bundle
git clone https://github.com/kien/ctrlp.vim
```
A Tour of Go 英語版と日本語版の違い

（追記 2015-12-05）最近日本語版が英語版に追従したようですね。素晴らしいことです。このページも用済みというわけです。

A Tour of Go の[英語版](https://tour.golang.org/)と[日本語版](http://go-tour-jp.appspot.com/)とで差分が出ているようです。気付いた違いをリストアップします（2015-03-31現在）。

# A Tour of Go 英語版にしか無いページ

前から辿っていった順です。

- [Zero values](https://tour.golang.org/basics/12)
- [Type conversions](https://tour.golang.org/basics/13)
- [Type inference](https://tour.golang.org/basics/14)
- [Defer](https://tour.golang.org/flowcontrol/12)
- [Stacking defers](https://tour.golang.org/flowcontrol/13)
- [Pointers](https://tour.golang.org/moretypes/1)
- [Arrays](https://tour.golang.org/moretypes/6)
- [Adding elements to a slice](https://tour.golang.org/moretypes/11)
- [Stringers](https://tour.golang.org/methods/6)
- [Exercise: Stringers](https://tour.golang.org/methods/7)
- [Readers](https://tour.golang.org/methods/10)
- [Exercise: Readers](https://tour.golang.org/methods/11)

他にも、一部ページの出現順序が入れ替わったりもしています。

# A Tour of Go 日本語版にしか無いページ

- [Advanced Exercise: Complex cube roots](http://go-tour-jp.appspot.com/#48)

唐突に三乗根を求めさせる問題という印象でしたが、英語版では消されたっぽいですね…。
【自習記録】プログラミングHaskell 第４章

# 関数定義
・関数定義の最も簡単な方法は既存の関数を組合せること

例.数字文字であるか検査する

`isDegit c = c => '0' && c =< '9'`

>実行結果
*Main> isDegit 'a'
False
*Main> isDegit '3'
True

# 条件式
・文法は`if` 条件 `then` Trueの時の処理 `else` Falseの時の処理
・Haskellは必ずelse部を持つ必要がある

例.絶対値を取得する
⇒引数が負値の場合、値を括弧で括らなければエラーとなる（引っかかった）

`abs_org n = if n >= 0 then n else -n`

>実行結果
*Main> abs_org 1
1
*Main> abs_org (-11)
11

# ガード付きの等式
・関数は条件式を使う代わりに、ガード付きの等式を使って定義することもできる
・ガードと呼ばれる論理式の中から、最初にTrueとなるガードの結果が採用される
・otherwiseは必ずTrueとなるため、「他のすべての場合」を処理する場合に便利
・条件式に比べ、条件が多くなった場合に読みやすい

例.絶対値を取得する(ガードを使った場合)

```lang:Haskell
abs_guard n | n >= 0 = n 
            | otherwise = -n
```

>実行結果
*Main> abs_guard 4
4
*Main> abs_guard (-4)
4

# パターンマッチ
・列挙された同じ型のパターンの中から、最初に合致した結果が利用される。
・すべての値に合致するワイルドカードはアンダースコア「_」
・１つの等式において、２つ以上の引数が同じ名前を持つ事は許されない。

例.論理積(&&)を実装

```lang:Haskell
and_org True True = True
and_org _ _ = False
```
>実行結果
*Main> True \`and_org\` False
False
*Main> True \`and_org\` True
True
*Main> False \`and_org\` False
False
*Main> False \`and_org\` True
False

次のコードはNG

```lang:Haskell
-- bの引数名が重複している
b `and_org2` b = b
_ `and_org2` _ = False
```

２つの引数が同等か確かめる必要があるということであれば、ガードを用いる

```lang:Haskell
b `and_org2` c | b == c = b
               | otherwise = False
```

# タプル・パターン、リスト・パターン
・タプルやリストもパターンマッチに用いることができる。
・Haskellのリストは合成されたデータ。リストは空のリスト[]に対し、演算子：を使って
　要素を１つずつ増やしていくことで生成される
　⇒リストは先頭と先頭以外に分離できる
・演算子：は「作成する」(construct)を意味する「cons演算子」と呼ばれる
・リストは次のように分解できる

>
[1,2,3]
↓
1:[2,3]
↓
1:(2:[3])
↓
1:(2:(3:[]))

今日はここまで
Macのターミナルでプロンプト変数を変更（ホスト名などの$のところの表示）

```
host:~ name$ 
```

となっているのを

```
name:~$ 
```

と短くするやり方の紹介です。


まずは`echo $PS1`を実行します。

```
$ echo $PS1
\h:\W \u\$
```

と、表示されるかと思います。
`\h:\W \u\$`の意味は、


| 値 |          意味         |
|:---:|:--------------------|
| \h | ホスト名  　　　　　　 |
| :  | ':'の表示             |
| \W | 現在のディレクトリ名   |
| \u | ユーザー名            |
| \$ | '$'の表示             |

ということです。

そこで、PS1を変更していきます。

```
$ PS1='\u:\W\$' 
```

これで変更完了です！


しかし、再起動をすると設定が消えてしいます……。
そこで、設定を`~/.bashrc`に保存していきます。

`.bashrc`に`PS1='\u:\W\$'`を書いていきます。

`.bashrc`を読み込むには、

```
source ~/.bashrc
```

`.bashrc`が再起動毎に読み込まれない場合は、
`~/.bash_profile`に以下を追記します。

```
if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi
```

これで無事に設定完了です。
iTunesConnectへの申請用アイコンとかスクリーンショットをなるべく自動生成する

# iTunesConnectへの申請用アイコンとかスクリーンショットをなるべく自動生成する
* それなりのデザインでアイコンやスクリーンショットを早く作りたい！という人向けの手法をまとめました
* Keynoteで作るのはオートグリッドが使えたり、テキスト挿入が楽、画像編集がしやすいのでとってもおすすめです

# KeynoteでCoolなアイコンを作成
* 1024x1024pxのキャンバスサイズ（背景）に設定する
* [Keynote] スライドのサイズを変更する方法。縦長も作れます | あなたのスイッチを押すブログ
* http://bamka.info/keynote-slide-size
* イメージの書き出しでPNGを選択
 ファイル＞書き出し＞イメージ＞任意のスライドを選択＞PNG書き出し
* PNGはアルファで書き出されているので「プレビュー.app」で開いて再度書き出してアルファ無しのPNGにする
* アイコンを自動生成！
* Makeappicon - Generate app icons of all sizes with a click!
http://makeappicon.com/

# KeynoteでCoolなスクリーンショットを作成
* 5.5inchのキャンバスサイズ（背景）に設定する
* [Keynote] スライドのサイズを変更する方法。縦長も作れます | あなたのスイッチを押すブログ
* http://bamka.info/keynote-slide-size
* イメージの書き出しでPNGを選択
 ファイル＞書き出し＞イメージ＞任意のスライドを選択＞PNG書き出し
* PNGはアルファで書き出されているので「プレビュー.app」で開いて再度書き出してアルファ無しのPNGにする

# AppStoreScreenShotMakerで複数サイズのスクショを自動生成

* Command Line Toolsをインストール
* http://qiita.com/tanakahisateru/items/c0eaa25dbde669b282cb

* ImageMagickをインストール
* OSX に、brewを使ってImageMagickのインストール | k_miya@ぐるぐるじゃぱん
http://kmiya.grgrjapan.com/archives/1492.html

* シェルスクリプトをエディタで編集
* 新iTunes Connect用のスクリーンショット作成の苦行をなんとかする | blog.haranicle.net
* http://blog.haranicle.net/itunes-connect-screenshot/
* シェルで自動生成！

# 3.5inch,iPad用のスクリーンショットも同じ方法で作成
* これらは自動生成できないので、Keynoteで作成しましょう

# おまけ
* まだやったことないですが、iPhone画面のフレームが表示されるテンプレートを自動生成するサイト
* Screenshot Builder - Create gorgeous images for your App Store page in minutes. | LaunchKit
https://launchkit.io/screenshots
Rでオブジェクト指向っぽくクラスを使ってみる（R6メソッド）

# はじめに

あまり有名ではない事実かもしれませんが、Rでもパッケージを専用の使えばオブジェクト指向っぽい使い方ができます。
特にここではR6というパッケージを使ったオブジェクト指向プログラミングを研究してみます。
他にも、似たようなパッケージでS3,S4(Google社内のコード規約ではこれが推奨されている)、RCメソッドなどがあります。
が、R6が最も普通にOO言語っぽい書き方ができると聞きました。とりま下記は普通にできるようです。

・クラスとインスタンスの作成
・メンバ変数とクラスメソッドの 作成
・インスタンス作成時のコンストラクタの発動
・プライベートメソッドとパブリックメソッド（または変数）の使い分け
・継承（私の方ではまだ未検証）
・ などなど

# 参考資料
TokyoRで発表された実にまとまっているSlideShareの資料
http://www.slideshare.net/__nakamichi__/r6-upload?ref=
ここでいうフィールドっていうのは要はメンバ変数のことらしい
フィールドとメソッドは、PublicにすることもPrivateにすることもできる

ただし、Pythonのように変数やメソッドごとにPublicとPrivateを指定するのではなく、 
PublicとPrivateに入れるものはまとめて定義する 
http://www.slideshare.net/hiroki84/r6-classes-42764598
http://qiita.com/hoxo_m/items/23b10243b6ffbea33a80


# サンプルコード

まずクラスを作ります

```r

# R6パッケージをインストールする
install.packages("R6")
library(R6)
 
 
Person <-
# 「Person」というクラスを作ってみます。
  R6Class("Person",
 
 
      public = list(
     # クラスの外から呼べるメンバは、public = list()の中にlist形式で記述します
     # メンバ変数もクラスメソッドも、このListの中にザクザク書いていけばOK
     # プライベート変数、プライベートメソッドは private = list()で
     # 別途定義する必要があります(後述)
 
        name = NA, # メンバ変数、デフォルト値なし
        hair = "black",  # メンバ変数、デフォルト値有り
         
        initialize = function(name, hair){ 
        #コンストラクタは、"initialize"という名前の関数が該当します。（
        #メンバ変数はself$で記述 
          self$name <- name  
          self$hair <- hair
        },
         
        #メソッドを定義
        set_hair = function(hair) self$hair = hair,
        greet    = function(greet) print(paste(greet," I am ",self$name))
      )
)

```

注意すべき点は、


```r

public = list( 

        name = NA, 
        hair = "black", 
```

のように、クラス内に登場するメンバ変数のデフォルト値を設定しておかなければ
いけないということ。 

そうでないと次のようなエラーが吐かれます。
  cannot add bindings to a locked environment

また、ここで指定したデフォルト値がメンバ変数の型となります。
デフォルト値で数値型を代入していると、のちのコンストラクタやメソッドで
文字列型などを代入することができなくなります。



インスタンスを作成し、操作してみます

```r
# インスタンスは、ClassName$new(arg)で作ります。
# 赤髪の山田さんというPersonインスタンスを作ってみます。
Yamama_Person <- Person$new("yamada","red")
 
print Yamama_Person # print文で普通にメンバの一覧が見れる
 
 
 # クラスメソッドの"greet"を使って挨拶をさせてみます。
Yamama_Person$greet("hello")
Yamama_Person$greet("good morning")
 
 
 # 髪の色を操作
Yamama_Person$hair #メンバ変数 "hair"の初期値を確認
[1] "red"
 
Yamama_Person$set_hair("blue") #メンバ変数 "hair"を変更する"set"メソッドを行使
Yamama_Person$hair #再確認
[1] "blue"
```


プライベートメソッドの使い方はこちら

```r

Person <-
  R6Class("Person",
     
    private = list(
     # プライベートのメンバはprivate = list()の中にlist形式で記述します
     # Publicとは別のList内に記述していきます
 
      age = NA,
      get_age = function()private$age  #プライベート変数を呼び場合は、self$でなく、private$で呼び出す
      ),
     
    public = list(
     # クラスの外から呼べるメンバは、public = list()の中にlist形式で記述します
     # メンバ変数もクラスメソッドも、このListの中にザクザク書いていけばOK
     # プライベート変数、プライベートメソッドは private = list()で別途定義する必要があります(後述)
 
      name = NA,
      hair = "black",
      initialize = function(name, hair, age){
        self$name <- name
        self$hair <- hair
        private$age <- age  #プライベートメソッドを呼び場合は、self$でなく、private$で呼び出す
      },
       
      set_hair = function(hair) self$hair = hair,
      greet    = function(greet) print(paste(greet," I am ",self$name)),
      show_age = function() private$get_age() -5
    )
     
  )
```
SourceTreeでRebase,cherryPickなど

#Rebase

## シンプルにrebase

右のブランチメニューからマージしたい側のブランチを選択（checkout）します。

リベースしたいブランチの履歴を選択して右クリックをします。

![スクリーンショット 2015-03-31 12.00.10.png](https://qiita-image-store.s3.amazonaws.com/0/5565/edd47c67-09b0-b5f9-e853-4738fcefe1f4.png)

リベースを選択します。

本当に現在の変更を'branchName'にリベースしてもよろしいでしょうか？

というメッセージが表示されます。
日本語がおかしいです。

英語版では

Are you sure you want to rebase your current changes on to 'branchName'?

なので、branchNameにむかって変更しても本当にいいかね？と聞いてます。

このSourceTreeの翻訳が相当お馬鹿です。最初は英語版使った方がいいと思います。

文句いってないでFBすべきなんですけど。

### cherryPick

![スクリーンショット 2015-03-31 12.00.10.png](https://qiita-image-store.s3.amazonaws.com/0/5565/edd47c67-09b0-b5f9-e853-4738fcefe1f4.png)

ここでチェリーピックを選択するだけです。


## pull時にmergeではなくrebaseする。

環境設定->Gitで設定します。

日本版だと

mergeのかわりにrebaseを使います。

英語版だと

Use rebase instead of merge by ...

をチェックをいれます。

pull時に選択も可能です。

#subModuleはどうするの？

右クリックして追加します。
追加するとpullのタイミングでサブモジュールの更新が走ります。

![スクリーンショット 2015-03-31 12.13.49.png](https://qiita-image-store.s3.amazonaws.com/0/5565/76301ac9-3c30-f631-471d-fa928b95b496.png)

サブモジュールは更新したくないケースもなくないのですが、
その場合はどうするのでしょうかね。

#git revert

メニューから"コミット前に戻す"を選択します。


#git reset

![スクリーンショット 2015-03-31 12.20.56.png](https://qiita-image-store.s3.amazonaws.com/0/5565/c3688bbc-62e7-18a1-422c-dfe94f48228d.png)

メニューあるresetで実行してください。

#git stash

同じくメニューです。


#そのほか

書けばきりがないので、あとはメニューみたらわかるかなぁーと思います。

あとGit Flowも簡単につかえるので運用で使いたい場合はすごくおすすめです。
これもメニューにあってすぐわかると思います。

SourceTreeは内部的にはCUIコマンドを実行しているだけなのでCUIをわかっている人なら
ログみればだいたい解決できます。


SubversionをCUIで使う人は少ないですが、Gitに関してはなぜかCUI人口が高い気がします。
CUIが優秀なんだと思いますが。

オープンソースの世界ではGitがあたりまえですが、現場ではまだまだそうでもない気がします。
やっぱりGUIが普及しないとだれでもGitっていうのは難しいと思います。

サービス作成はエンジニアだけでやるものではないので全員で使えるツールを選択したいですよね。