OmniAICreator/Qiita-1.07M huggingface dataset:
jadでclassをデコンパイル

#jadをインストールしてパスを通す

下記サイトから
http://varaneckas.com/jad/

#1ファイルだけデコンパイル

```console
jad hogehoge.class
```

#まとめて

```console
jad -s java -d src -r hogefolder\**\*.class
```
階層保持されます。

いじょ
anyenv が入っている Dockerfile 書いた


作ってみた。
さくっと入るので anyenv 便利。

```
# DOCKER-VERSION 0.11.1
# VERSION 0.0.1

FROM centos:centos6

MAINTAINER python_spameggs

# sysconfig network
RUN echo "NETWORKING=yes" > /etc/sysconfig/network

RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# yum
RUN yum update -y
RUN yum install -y passwd
RUN yum install -y sudo
RUN yum install -y gcc
RUN yum install -y gcc-c++
RUN yum install -y make
RUN yum install -y vim
RUN yum install -y git
RUN yum install --enablerepo=epel -y mosh
RUN yum install -y openssl-devel
RUN yum install -y zlib-devel
RUN yum install -y readline-devel
RUN yum install -y bzip2-devel
RUN yum install -y libevent-devel
RUN yum install -y openssh
RUN yum install -y openssh-server
RUN yum install -y openssh-clients
RUN yum install -y cmake

# ssh
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config

# user
RUN useradd python_spameggs
RUN echo 'foo' | passwd --stdin python_spameggs

# sudo
RUN echo 'python_spameggs ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/python_spameggs

# timezone
RUN cp -p /usr/share/zoneinfo/Japan /etc/localtime

# sshd
RUN /etc/init.d/sshd start
RUN /etc/init.d/sshd stop

USER python_spameggs
WORKDIR /home/python_spameggs
# anyenv
RUN git clone https://github.com/riywo/anyenv .anyenv
ENV HOME /home/python_spameggs
RUN echo 'export PATH="${HOME}/.anyenv/bin:${PATH}"' >> .bash_profile
RUN echo 'eval "$(anyenv init -)"' >> .bash_profile

# anyenv update
RUN mkdir -p .anyenv/plugins
RUN git clone https://github.com/znz/anyenv-update.git .anyenv/plugins/anyenv-update

EXPOSE 22

USER root
CMD ["/usr/sbin/sshd", "-D"]
```
debuggerステートメント

知らなかったのでメモ✍

# 実行を中断するステートメント
ブレークポイントをコード中に定義できる。

```js

for(var i=1; i<5; i++) {
   console.log(i);
   debugger
}

```

これでうっかり無限ループや再起でブラウザを固めてしまうことが無くなりそうだ。
図解Gitで使われている作図ツール

[図解Git](http://marklodato.github.io/visual-git-guide/) の図が素晴らしいので、どうやって作っているのか調べてみた。

[github](https://github.com/MarkLodato/visual-git-guide) に説明があって、ソースは LaTeX で PGF/TikZ というパッケージ（アドオン）を使って記述してる。 ソースの例: [basic-usage.tex](https://github.com/MarkLodato/visual-git-guide/blob/master/basic-usage.tex)

TikZ のサンプルが、http://www.texample.net/tikz/examples/ にあって、相当強力。

graphviz の dot が配置を決めてくれるのに対して、何らかの形で人間が指定してやらないといけないらしい。http://www.felixl.de/commu.pdf をみると、方眼紙Excelライクにノードを配置することはできる。
テストにパスするbundle exec rspec spec/requests/static_pages_spec.rb

ganshou-no-MacBook-Air:sample_app takako$ bundle exec rspec spec/requests/static_pages_spec.rb

↓

FF

Failures:

  1) Static pages Home page should have the content 'Sample App'
     Failure/Error: visit '/static_pages/home'
     ActionController::RoutingError:
       No route matches [GET] "/static_pages/home"
     # ./spec/requests/static_pages_spec.rb:8:in `block (3 levels) in <top (required)>'

  2) Static pages Help page should have the content 'Help'
     Failure/Error: visit '/static_pages/help'
     ActionController::RoutingError:
       No route matches [GET] "/static_pages/help"
     # ./spec/requests/static_pages_spec.rb:16:in `block (3 levels) in <top (required)>'

Finished in 0.00746 seconds
2 examples, 2 failures

Failed examples:

rspec ./spec/requests/static_pages_spec.rb:7 # Static pages Home page should have the content 'Sample App'
rspec ./spec/requests/static_pages_spec.rb:15 # Static pages Help page should have the content 'Help'

Randomized with seed 54906


ない・・

$ subl config/routes.rb

SampleApp::Application.routes.draw do

end

何も入っていない

以下の2行を追加SampleApp::Application.routes.draw do
  get "static_pages/home"
  get "static_pages/help"
end


$ bundle exec rspec spec/requests/static_pages_spec.rb
..

Finished in 0.04232 seconds
2 examples, 0 failures

Randomized with seed 1420


成功！
Facebook SDK for Androidでログインが失敗するときの対応

アプリにFacebookのログイン機能をつけるとき、Facebook SDKでのログインがうまくできない時の対応方法です。

### 状況：
1.ターミナルより、以下のコマンドでHash keyを取得して、FB developerサイト->設定画面にkeyを登録している

```
keytool -exportcert -alias androiddebugkey -keystore "debug.keystoreまでのパス" | openssl sha1 -binary | openssl base64
```
※"debug.keystoreまでのパス"には、例えば以下のような値が入ります
~/.android/debug.keystore

2.アプリでのログイン時に以下の症状のいずれかがでる
* ログインボタンを押した後にパーミッションを求められ、OKをしたのに元の画面に戻る  

* 以下のようなメッセージがログにでる  
'com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored'  
'..App is Misconfigured for facebook login...''.

3.アプリがパブリックに公開されていることを確認している
FB developer -> Status & Reviewから”Do you want to make this app and all its live features available to the general public?”がYESになっていることを確認する。

アプリがパブリックに公開されていない場合：
Contact Emailを設定することで、public公開が有効になります
SettingsでContact Emailを設定
App detailsでUser Support Emailを設定


### 対策:
アプリケーションのハッシュキーはFB developerに登録する必要がありますが、ターミナルからハッシュキーを取得すると、うまく取得できないケースがあるようです。  
ですので、アプリケーションから直接hash keyを取得します。

* LoginするときのアクティビティのonCreate()に以下を追加します。

```java
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.facebook.samples.loginhowto", 
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
        } catch (NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
        //その他の処理
}
```
* ログに"KeyHash: XXXXXXXXXXX"が表示されるので、その値をFB developerサイトのキーハッシュに登録します。

### 参考：
Facebook developerのトラブルシューティングにも記載があります。
<http://stackoverflow.com/questions/5306009/facebook-android-generate-key-hash>
<https://developers.facebook.com/docs/android/getting-started/>
LabVIEW 文字列表示器のオートスクロール

LabVIEW 文字列表示器のオートスクロール

ログ表示などの用途で、常に一番下が最新になるようにするには、
次のようにText.ScrollPosに-1を設定するだけ。

Text.ScrollPos = -1

![Property_TextScrollPos.jpg](https://qiita-image-store.s3.amazonaws.com/0/43526/b4dec92b-b617-495f-a6ea-b1b4a071a145.jpeg)

このプロパティに負の数値、またスクロールバーの最大値より大きな数値を割り当てると、スクロールボックスはテキストの最後の行までスクロールします。

ログ文字列を追加・更新すると勝手にスクロールするようになります。
WebStormで手軽にJSON/BSONの型ヒント

WebStorm(IntelliJ)のJavaScript静的解析はすごく便利ですね。サポートしているライブラリ/フレームワーク以外にも、TSDでTypeScriptのインターフェースを取り込めたり、自分で書いたコードを読んで推測してくれたり。自分のコードに JSdoc があるとそれがより高精度に。

...でも、それだけではどうしても型ヒントが付かないオブジェクトがあります。外から来たJSONメッセージだったり、MongoDBから読み込んだBSONだったり。存在すると信用していいプロパティなのに、どこにも実装がないがために、ドットでアクセスしたら Unresolved Variable が出ることがあります。

このとき使えるのが JSDoc3 の `@typedef` です。

JSONが間違いなくこういう形をしていたとして、

```json
{
    "url": "http://qiita.com/",
    "rating": 5
}
```

こうすると警告出たりするんですよね。

```js
var siteRating = incomingData.json;  // 外から来た上の形のJSON
tryToUse(siteRating.url); // ここでそんなプロパティないよと警告
```

警告にはならなくても、優先して補完されるワードに `url` と `rating` が出ないのは不便。

でもこう書くと...

```js
/**
 * @typedef {Object} SiteRating
 * @property {string} url
 * @property {number} rating
 */

/** @type {SiteRating} */
var siteRating = incomingData.json;
```

このあとのコードで `siteRating.` まで打つと、なんと `url` や `rating` が補完できます。解析の設定がいくら厳しくても、これでもう警告は出なくなりました。

TypeScriptの文法で別ファイルにインターフェースを定義するまでもなく、ひとつの `*.js` の中だけで、実装がないものに手軽に仮想的な型を作ることができてすごく便利。JSDoc3 と WebStorm いいですね。
ActivityとFragmentの両方で使えるDialogFragmentの書き方

## 概要

Androidアプリでダイアログを実装するには、今はDialogFragmentを使うことがほぼ必須になってます。通知的なダイアログなら実装も楽ですが、だいたいはダイアログに対して何かの情報を渡して何かの情報をもらうようなケースが多いと思います。

加えてダイアログの呼び出し元もActivityだったりFragmentだったりいろんな状況に対応させることが増えてきたので、タイトルにあるようなダイアログをコネコネしてみました。

まとめると以下のような要件になります。

* Activityから呼び出してコールバックを受けられる
* Fragmentから呼び出してコールバックを受けられる
* ダイアログの生成に必要なデータを渡せる

## サンプルコード

```java
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.view.View;

public class CustomDialog extends DialogFragment {

    public interface OnCustomDialogListener {
        public void onCustomDialogClick(int which);
    }

    private OnCustomDialogListener mListener;

    public static CustomDialog newInstance(Bundle bundle) {
        CustomDialog instance = new CustomDialog();
        instance.setArguments(bundle);
        return instance;
    }

    public static CustomDialog newInstance(Bundle bundle, Fragment fragment) {
        CustomDialog instance = new CustomDialog();
        instance.setArguments(bundle);
        instance.setTargetFragment(fragment, 0);
        return instance;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        Fragment targetFragment = this.getTargetFragment();
        try {
            mListener = (targetFragment != null) ? (OnCustomDialogListener) targetFragment : (OnCustomDialogListener) activity;
        }
        catch (ClassCastException e) {
            throw new ClassCastException("Don't implement OnCustomDialogListener.");
        }
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Bundle bundle = this.getArguments();
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_custom, null);

        return new AlertDialog.Builder(getActivity())
            .setTitle("サンプル")
            .setView(view)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int witch) {
                    mListener.onCustomDialogClick(int witch);
                }
            })
            .create();
    }
}
```

## 補足

* `onCreateDialog()`の中は適当です。どういうダイアログにするのかによりますので、適時書き換える箇所になります。
* 呼び出し元のFragmentののインスタンスは、必ず`setTargetFragment`したものを使います。インスタンス変数などに控えたものだと、自動再生成したときなどに正しいインスタンスが取れません。
msbuildコマンドでのビルド時、プリプロセッサマクロの定義を追加する方法

ADDITIONAL というマクロを追加する例。以下のようなファイルを用意して、

```xml:override.props
<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemDefinitionGroup>
    <ClCompile>
      <PreprocessorDefinitions>%(PreprocessorDefinitions);ADDITIONAL</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>

</Project>
```

msbuild実行時にForceImportBeforeCppTargetsプロパティを設定する。
`msbuild demo.vcxproj /p:ForceImportBeforeCppTargets=override.props`

via [Stackoverflow: How to set PreProcessorDefinitions as a task propery for the msbuild task - Stack Overflow](http://stackoverflow.com/questions/15141429/how-to-set-preprocessordefinitions-as-a-task-propery-for-the-msbuild-task/17446623#17446623)
MacPortsでのPEAR設定

# MacPortsでのPEAR設定ファイル ~/.pearrc

下記のファイルを~/.pearrcに書き込む。

```
#PEAR_Config 0.9
a:13:{s:7:"php_dir";s:24:"/opt/local/lib/php/pear/";s:8:"data_dir";s:28:"/opt/local/lib/php/pear/data";s:7:"www_dir";s:27:"/opt/local/lib/php/pear/www";s:7:"cfg_dir";s:27:"/opt/local/lib/php/pear/cfg";s:7:"ext_dir";s:32:"/opt/local/lib/php55/extensions/";s:7:"doc_dir";s:28:"/opt/local/lib/php/pear/docs";s:8:"test_dir";s:29:"/opt/local/lib/php/pear/tests";s:9:"cache_dir";s:29:"/opt/local/lib/php/pear/cache";s:12:"download_dir";s:32:"/opt/local/lib/php/pear/download";s:8:"temp_dir";s:28:"/opt/local/lib/php/pear/temp";s:7:"bin_dir";s:27:"/opt/local/lib/php/pear/bin";s:10:"__channels";a:3:{s:12:"pecl.php.net";a:0:{}s:5:"__uri";a:0:{}s:11:"doc.php.net";a:0:{}}s:7:"php_bin";s:18:"/opt/local/bin/php";}
```
Twitter Bootstrap のボタン要素の色とかを変えた独自のボタンを作る

Twitter Bootstrap だとボタンに hover や active に勝手にスタイルをあててくれたりします。
これでカスタム色を作りたい場合 `.btn .btn-xxxxx` に `backgroud` とかで直接色つけたりなんだりしちゃうと、hover とか active 時のスタイルがよしなな感じになりません。


というわけで拡張してボタンを作りたい場合は、 **`.button-variant()` という mixin が定義されているのでそれを使います**。


引数は、

```
.button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);

つまり

.button-variant(文字色; 背景色; ボーダー色);
```

たとえば Facebook ならこう:

```
@btn-facebook-color: #4c66a4;
.btn-facebook {
  .button-variant(lighten(@btn-facebook-color, 50%); @btn-facebook-color; darken(@btn-facebook-color, 20%));
}
```

そうすると

```
<a class="btn btn-facebook">Facebookでログイン</a>
```

とかで使えます。


(ちょっと文字とか違うけどスクリーンショットはこちら↓)

![スクリーンショット 2014-05-14 11.54.24.png](https://qiita-image-store.s3.amazonaws.com/0/59/3ffb9d36-5a3c-9dc4-1963-374f4605e22e.png)
CoucheBase Lite の CBLManager.h の主要個所の翻訳


```objective-c:CBLManger.h
...

/** トップレベル CouchbaseLite オブジェクト; CouchDB Server やっているように、データベースのコレクション（RDBで言う
	ところのテーブル）をマネージする. GBLManger や CBLManger以下の全てのオブジェクトはシングルスレッドでのみ利用可能.
	他のスレッドでデータベースを扱う時は、対象となる CLBManger のインスタンスを copy してそのコピーを別のスレッドで使う
	ことができる. */
@interface CBLManager : NSObject <NSCopying>

...

/** プロセスごとの共有インスタンスで、メインスレッドで使う 
	CBLManager *manager = [CBLManager sharedInstance]; */
+ (instancetype) sharedInstance;

...

/** 別のスレッドで CBLManger を使いたい時にインスタンスのコピーを生成する
	CBLManger *newManger = [manager copy]; 
	バックグラウンド処理をする時ときとか使うのかな.
	Consistency が気になるところだけど、アプリの挙動にはあまり影響無さげ
	*/
- (instancetype) copy;

/** データーベースリソースを全て解放する
	applicationDidEnterBackground とかで事項すれば良いのかな？　*/
- (void) close;

#pragma mark - DATABASES:

/** CBLDataase インスタンスを返す. 指定した名前のDBがない場合、新しくDBを作成する.
	既に指定した名前のDBがある場合、同じインスタンスを返す. 
	データーベースの名前に使える文字は、小文字[a-z], 数値[0-9], 特殊文字[$_()+-/] */
- (CBLDatabase*) databaseNamed: (NSString*)name
                         error: (NSError**)outError                     __attribute__((nonnull(1)));

/** 指定した名前のDBがあれば、そのインスタンスを返し、なければ、nil を返す。*/
- (CBLDatabase*) existingDatabaseNamed: (NSString*)name
                                 error: (NSError**)outError             __attribute__((nonnull(1)));

...


#pragma mark - CONCURRENCY:

... 非同期処理やバックグラインドの処理関連

#pragma mark - OTHER API:

... CouchbaseLiteListener を使う時につかうAPI

```
shenzhenがDeployGateに対応したので使ってみた

あ…ありのまま 先日 起こった事を話すぜ！
空いた時間を使って[shenzhen](https://github.com/nomad/shenzhen)をforkして[DeployGate](https://deploygate.com/)対応をしようかなーと作業を始めた瞬間、既に[プルリクエスト](https://github.com/nomad/shenzhen/pull/118)が飛んでいて数日後にマージされていた…
今どきの新卒の優秀さの片鱗を 味わったぜ…

というわけで、[へんてこさん](https://twitter.com/bilyakudan)によって、ipaファイル作成/配信サポートツールの[shenzhen](https://github.com/nomad/shenzhen)が[DeployGate](https://deploygate.com/)対応されました。
素晴らしい！
早速使ってみました。

## shenzhenのインストール/ipaファイルの作り方
[こちらを参照](http://qiita.com/k_kinukawa/items/8718aba35060cf838ffa)

## DeployGateで配信する方法

ipaコマンドをオプション無しで実行すると、ヘルプがずらずらーと出てきます。

```bash
$ ipa
  ipa

  Build and distribute iOS apps (.ipa files)

  Commands:
    build                Create a new .ipa file for your app
    distribute:deploygate Distribute an .ipa file over deploygate
    distribute:ftp       Distribute an .ipa file over FTP
    distribute:hockeyapp Distribute an .ipa file over HockeyApp
    distribute:s3        Distribute an .ipa file over Amazon S3
    distribute:testflight Distribute an .ipa file over testflight
    help                 Display global or [command] help documentation.
    info                 Show mobile provisioning information about an .ipa file

  Aliases:
    distribute           distribute:testflight
    distribute:sftp      distribute:ftp --protocol sftp

  Global Options:
    --verbose
    -h, --help           Display help documentation
    -v, --version        Display version information
    -t, --trace          Display backtrace when an error occurs

  Author:
    Mattt Thompson <m@mattt.me>

  Website:
    http://mattt.me
```

distribute:deploygateがありますね。
さらに、distribute:deploygateのヘルプを見てみましょう

```bash
$ ipa distribute:deploygate --help

  distribute:deploygate

  Usage: ipa distribute:deploygate [options]



  Options:
    -f, --file FILE      .ipa file for the build
    -a, --api_token TOKEN API Token. Available at https://deploygate.com/settings
    -u, --user_name USER_NAME User Name. Available at https://deploygate.com/settings
    -m, --message MESSAGE Release message for the build
```

こんな感じです。
では、実際に配信してみましょう。

```bash
$ ipa distribute:deploygate -a xxxxxxxxxxxxxxxxxxxxxxxxxxxxx -u k_kinukawa -f sample.ipa
Build successfully uploaded to DeployGate
```

-a にAPI keyを、-u にユーザー名を指定します。
API keyもユーザー名も、https://deploygate.com/settings から確認できます。
-f でipaファイルを指定します。

ちなみに、オプションを付けずにipa distribute:deploygateをすると、コマンドラインで必要な項目を尋ねられます。

```bash
$ ipa distribute:deploygate
API Token:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
User Name:
k_kinukawa
Build successfully uploaded to DeployGate

```

簡単ですね！！
個人的に、[shenzhen](https://github.com/nomad/shenzhen)は無くてはならないツールなのですが、[DeployGate](https://deploygate.com/)対応されたことによってより離れられない関係になりました。
[shenzhen](https://github.com/nomad/shenzhen)と[DeployGate](https://deploygate.com/)を使って、この夏はお手軽配信環境を構築してエンジョイしてみましょう。
モバイル版Chromeのデータ圧縮機能がプロキシ経由でアクセスしててはまった


モバイル版Chromeにはデータ使用量の節約機能がついてます。
これを使うと、Googleのプロキシを経由して接続します。このため、IP制限のかかっているサイトにアクセスするとアクセスできないことがあります。

https://developer.chrome.com/multidevice/data-compression

`設定＞帯域幅の管理＞データ使用量の節約`をOffにすればこの機能は無効になります。

というわけで、この機能、随分前に試した記憶はあるんですが、すっかり忘れててハマりました。orz

* Android
 * Chrome 34.0.1847.114
 * Nexus 7
 * Android 4.4.2

* iOS
 * Chrome 34.0.1847.18
 * iPad mini
 * iOS 7.1.1
PHPでSQLとhtmlを使う方法のサンプル

自分の備忘録も兼ねて、ひと通りSQLを使うまでの方法をメモしておこうと思います。
環境はMac10.9.2です。
SQLを使う環境を整えると自ずとPHPをローカルで扱う環境も整ったので合わせて共有しようかなと……（世の中に同じような情報は沢山有りますけど）

## MAMPを導入しよう

> http://www.mamp.info/en/

導入は簡単。
とりあえずFree版落として（PRO版も付いてくるけど気にしない）、インストールして起動する。
![Mamp_start.png](https://qiita-image-store.s3.amazonaws.com/0/42310/f8e60653-bfa9-21c1-a69e-bad1d1994084.png)
後はサーバーを起動して、スタートページが開いたら導入完了。簡単親切設計。

## phpMyAdminでちょっと遊ぼう

まずはMAMPでサーバーを起動。サーバーが起動し終わったら、自動で既定のブラウザでスタートページが開くはず。開かなかったら手動で起動しよう。

![Mamp_startup.png](https://qiita-image-store.s3.amazonaws.com/0/42310/eeed8c45-f4bb-8e32-079a-09b38d937b05.png)

こんな画面が出るはず。
そしたらこの画像の丁度左下にphpMyAdminとあるはずですのでClick。

![phpMyAdmin.png](https://qiita-image-store.s3.amazonaws.com/0/42310/9cd0813e-0e04-4a24-176d-826b6d583996.png)

早速遊びましょう。
まずは適当に、新規でデータベースを作ってみよう。
名前はfromWhereとかにしますか。照合順序はutf8_unicode_ciに設定して、作成。

![db_create.png](https://qiita-image-store.s3.amazonaws.com/0/42310/b303af60-0ff8-2f25-7049-4a5376d1c027.png)

次にデータテーブルを作成。なんだっていいですが、名前はwhereFromにしよう。（ネーミングセンス皆無）

![table_create.png](https://qiita-image-store.s3.amazonaws.com/0/42310/5a853f4d-fc54-244d-939e-52aa7448cf44.png)

今回はID,Name,From,Sex
のデータを登録することにしましょうか。

![table_element.png](https://qiita-image-store.s3.amazonaws.com/0/42310/9f39e483-8836-3132-b8b1-831a1ca9d4b8.png)

IDは連番でいいので自動で数字を割り振ってもらって、他のデータはNULLだと困るから、NULLは禁止しよう。
ちゃかちゃかっとデータを6つ位入れて……

![table.png](https://qiita-image-store.s3.amazonaws.com/0/42310/9b65cdcc-772d-8e52-1794-d1d18a5fb537.png)

テスト用のデータベースの完成。

## localでPHPが動作するか見てみよう。

MAMPが動いている時にPHPをローカルで動かす方法は
Application/MAMP/htdocs
にPHPファイルを入れて
http://localhost:8888/
にアクセスするとローカルのPHPのファイルに接続できます。

さて、実際にphpを書いていきましょう。
習うより慣れろということで
Application/MAMP/htdocs/index.php
みたいにファイルを作って以下を書き込んで実行してみましょう。

~~~php
<?php
  //ここにプログラムを書く
  define('DB_HOST','127.0.0.1');//ローカルホストのIP
  define('DB_USER','root');//MAMPのスタートページにいろいろ書いてる
  define('DB_PASSWORD','root');
  define('DB_PORT','8889');
  define('DB_NAME','fromWhere');//データベース名
  $dbhost = "mysql:host=".DB_HOST.";dbname=".DB_NAME.";port=".DB_PORT.";charset=utf8";

  try{
    $pdo = new PDO($dbhost,DB_USER,DB_PASSWORD);

    //whereFromテーブルからすべての情報を取り出すsql文
    $sql = "SELECT
              *
            FROM
              whereFrom
            ";

    //全ての情報を保存
    $statement = $pdo->query($sql);
    //データベースを配列情報に変換して、入れる
    $row = $statement->fetchAll(PDO::FETCH_ASSOC);

    //データベースの接続アウト
    $pdo=null;

  }catch(PDOException $e){
    echo 'Error:'.$e->getMessage();//エラーの内容を吐き出す
  }
?>

  <html>
    <body>
      <table>
        <tr>
          <th>ID</th>
          <th>Name</th>
          <th>From</th>
          <th>Sex</th>
        </tr>
          <?php
          if(isset($row)){
            foreach($row as $r){
              echo '<tr>';
              echo '<td>',$r['ID'],'</td>';
              echo '<td>',$r['Name'],'</td>';
              echo '<td>',$r['From'],'</td>';
              echo '<td>',$r['Sex'],'</td>';
              echo '</tr>';
            }
          }
          ?>
      </table>
    </body>
  </html>
~~~

http://localhost:8888/index.php
に、繋ぐと先ほど登録したデータを表示させることが出来ると思います。

こんな感じでデータベースのデータを引っ張る動的なWebサイトが作れるのですね。
HDDの追加方法(apart)

gpartを使ってHDDを追加する方法のメモと基本的な操作
以下のコマンドはrootで行う事

#現状の確認
`root # gpart show
=>　　　34　41942973　da0　GPT　(20G)
　　　　34　　　 128　　1　freebsd-boot　(64k)
　　　 162　 2097152　　2　freebsd-ufs　(1.0G)
　 2097314　 8388608　　4　freebsd-ufs　(4.0G)
　10485922　16777216　　5　freebsd-ufs　(8.0G)
　27263138　12582784　　6　freebsd-ufs　(6G)
　39845922　 2097084　　3　freebsd-swap　(1G)
　41943006　　　　 1　　　 - free -　(512B)`

#パーテーションスキーマーの作成
/devの配下にあるデバイスを指定
この場合は、da1というデバイスを追加した直後を想定
`root # gpart create -s GPT da1
da1 created`
ちなみに削除は destory 

#作成確認
`=>　　　34　41942973　da0　GPT　(20G)
　　　　34　　　 128　　1　freebsd-boot　(64k)
　　　 162　 2097152　　2　freebsd-ufs　(1.0G)
　 2097314　 8388608　　4　freebsd-ufs　(4.0G)
　10485922　16777216　　5　freebsd-ufs　(8.0G)
　27263138　12582784　　6　freebsd-ufs　(6G)
　39845922　 2097084　　3　freebsd-swap　(1G)
　41943006　　　　 1　　　 - free -　(512B)
=>　　　 34　536870845　da1　GPT　(256G)
　　　　 34　536870845　　　 - free -　(256G)`

da0の下にda1のデバイスが追加されているのを確認
まだパーテーションがないからスライスの所はfreeの状態

#パーテーションの作成
`root@mail:/dev # gpart add -b 34 -s 536870845 -t freebsd-ufs -l data da1
da1p1 added`
サイズの指定を特にしない場合は、最大サイズを取ってくれるのでこの場合は同じ結果になります。
dataはラベル名称です。これがHDDをいろいろ交換するときは非常に便利。

##作成したパーテーションの確認
`root # gpart show -l
=>　　　34　41942973　da0　GPT　(20G)
　　　　34　　　 128　　1　(null)　(64k)
　　　 162　 2097152　　2　root　(1.0G)
　 2097314　 8388608　　4　var　(4.0G)
　10485922　16777216　　5　usr　(8.0G)
　27263138　12582784　　6　home　(6G)
　39845922　 2097084　　3　(null)　(1G)
　41943006　　　　 1　　　 - free -　(512B)
=>　　　 34　536870845　da1　GPT　(256G)
　　　　 34　536870845　　1　data　(256G)`
showに-lオプションを付けるとラベルも見れます

#パーテーションの削除
`root@mail:/dev # gpart delete -i 1 da1
da1p1 deleted`
パーテーションのスライス番号を指定して削除

#仕上げ
`root # newfs -U /dev/da1p1
････････
/dev/da1p1: 262144.0MB (536870840 sectors) block size 32768, fragment size 4096
　　　　　using 419 cylinder groups of 626.09MB, 20035 blks, 80256 inodes.
　　　　　with soft updates`
フォーマットして後はマウントするだけ

##状態の確認
`root # tunefs -p /dev/da1p1
tunefs: POSIX.1e ACLs: (-a)　　　　　　　　　　　　　　　　disabled
tunefs: NFSv4 ACLs: (-N)　　　　　　　　　　　　　　　　　 disabled
tunefs: MAC multilabel: (-l)　　　　　　　　　　　　　　　 disabled
tunefs: soft updates: (-n)　　　　　　　　　　　　　　　　 enabled
tunefs: soft update journaling: (-j)　　　　　　　　　　　 disabled
tunefs: gjournal: (-J)　　　　　　　　　　　　　　　　　　 disabled
tunefs: trim: (-t)　　　　　　　　　　　　　　　　　　　　 disabled
tunefs: maximum blocks per file in a cylinder group: (-e)　4096
tunefs: average file size: (-f)　　　　　　　　　　　　　　16384
tunefs: average number of files in a directory: (-s)　　　 64
tunefs: minimum percentage of free space: (-m)　　　　　　 8%
tunefs: optimization preference: (-o)　　　　　　　　　　　time
tunefs: volume label: (-L)`
以上の様に状態がどうなっているか見ることが出来ます。
SSDの場合は必ずtrimが有効になっているか確認しておくこと！
ESLintについてのメモ

# [ESLint](http://eslint.org/) についてのメモ

> The pluggable linting utility for JavaScript

[JSHint](https://github.com/jshint/jshint/)や[JSLint](https://github.com/douglascrockford/JSLint)はユーザ独自のルールを追加することはできないけれど、[ESLint](http://eslint.org/)は完全に全てのルールがプラガブルになるようデザインされている。

## Install

```zsh
$ npm install -g eslint
```

## Usage

```zsh
$ eslint -h
eslint [options] file.js [file.js] [dir]

Options:
  -h, --help                 Show help.
  -c, --config path::String  Load configuration data from this file.
  --rulesdir path::String    Load additional rules from this directory.
  -f, --format String        Use a specific output format. - default: stylish
  -v, --version              Outputs the version number.
  --reset                    Set all default rules to off.
  --eslintrc                 Enable loading .eslintrc configuration. - default: true
```

## Configure
ルールを設定する方法は２つ。
- JavaScriptファイルに直接コメントで記述
- 設定を記述した`JSON`か`YAML`のファイルを利用する(デフォルトでは`.eslintrc`)

設定できる情報は以下の構成。
- **Environments** : スクリプトの実行環境。Environmentsの設定値に従ってその環境のデフォルトで有効なグローバル変数とルールが設定される。
- **Globals** : 実行時に追加するグローバル変数。
- **Rules** : 有効にされているルールとエラーレベルのルール。

### Environments
設定ファイルでのみ定義できる。使用可能なenvironmentsの値は以下。

- **`browser`** : ブラウザのグローバル変数
- **`node`** : `node`のグローバル変数と`node`特有のルール
- **`amd`** : `define()`と`require()`をグローバル変数として定義
- **`mocha`** : `mocha`のグローバル変数

`env`キーを使って、有効にしたい環境を`true`に設定する。

```json
{
  "env": {
    "browser": true,
    "node": true
  }
}
```

YAML形式であれば

```yaml
---
  env:
    browser: true
    amd: true
```

### Globals
特定のグローバル変数を許可する場合、JSファイルの中にコメントを記述する形でも設定ファイルに記述する形でも、どちらでもよい。

```js
/*global var1, var2*/
```

`false`にすると書き込み禁止（読み取り専用）にもできる。

```js
/*global var1:false, var2:false*/
```

設定ファイルに記述する場合も同様。`globals`キーを使って記述する。

```json
{
    "globals": {
        "var1": true,
        "var2": false
    }
}
```

### Rules
ESLintは、デフォルトで有効なルールとデフォルトで無効なルールとで構成されている。ルールはJSファイルにコメント記述でも設定ファイルに記述でも、変更できる。  
設定するには、ルールのIDに対して
- `0` : 無効にする
- `1` : 有効にする(警告)
- `2` : 有効にする(エラー)

ESLintのルールについては、[公式サイトにドキュメント](http://eslint.org/docs/rules/)がある。
JSファイルにコメントで記述する場合は以下のように記述する。

```js
/*eslint eqeqeq:0, curly: 2*/
```

設定ファイルに記述する場合は、`rules`キーを用いて記述する。

```json
{
    "rules": {
        "eqeqeq": 0,
        "curly": 2,
        "quotes": [2, "double"]
    }
}
```

なお、デフォルト有効のルールはすべて`2`に設定されている。


## Links
- [ESLint](http://eslint.org/)
- [Twitter](https://twitter.com/geteslint)
- [Introducing ESLint | NCZOnline](http://www.nczonline.net/blog/2013/07/16/introducing-eslint/)
- [ESLint 0.1.0がリリースされたので、JSHintとの違いやプラグインの書き方について | Web scratch](http://efcl.info/2013/1104/res3465/)
- [sindresorhus/grunt-eslint](https://github.com/sindresorhus/grunt-eslint)
- [adametry/gulp-eslint](https://github.com/adametry/gulp-eslint)
Qiitaトップページの投稿一覧で開いた投稿を簡単に閉じる

Qiitaのトップページのフィード一覧はクリックすると、collapseされていたのが開いて詳細を見られますね。
しかし、それを閉じるのがめんどくさい。

開いた投稿の一番下に閉じるためのタブがあるんですが、
記事を開いて内容の感じを見てぱっと閉じたい時などは
いちいち投稿の一番下までスクロールしないといけないんですね。

---

と思っていたら、開いた投稿のどこでもダブルクリックすると簡単に閉じることが出来ました。

以下の環境で確認。
Mac OS X 10.9
Google Chrome 34.0.1847.131
[Ruby] 二つの引用符に挟まれた部分を無視して、文字列を分割するメソッド

例えば「,」で分割したいけど、'company,Inc'のように'xxx'の部分は無視したい場合に、使えます。

使用例

```rb
"123,'company,Inc'".split_consider_quote( "," , "'" )
   => ["123","'company,Inc'"]
```

コード

```rb
class String
  # Split with ignoring the @pattern between two @quote_char.
  # For example, if you want to split with "," and ignore the string 
  # inside of '' such as 'company,Inc', this method is good.
  # @params [String] pattern    Pass to String#split directory.
  # @params [String] quote_char Quote charactor.
  # @params [String] limit      Pass to String#split directory.
  # @example
  #   "123,'company,Inc'".split_consider_quote( "," , "'" )
  #   => ["123","'company,Inc'"]
  def split_consider_quote(pattern,quote_char,limit = 0)
    if ! ( quote_char.size == 1 )
      raise "quote_char should be one charactor"
    end
    me = self.clone
    tmp = 5.chr
    org = []
    i = 0
    while i < me.size
      if me[i] == quote_char
        j = i + 1
        while true
          if j >= me.size
            raise "there are odd number quote_chars \"#{quote_char}\""
          elsif me[j] == quote_char
            break
          else
            j += 1
          end
        end
        # replace from the string between two quote-chars into tmp
        org << me[i,( j - i + 1)]
        me[i,( j - i + 1)] = tmp
      end
      i += 1
    end
    result =  me.split(pattern,limit)
    # replace from tmp into original string
    result.map do |token|
      i = 0
      while i < token.size
        if token[i] == tmp
          o = org.shift
          token[i] = o
          i += o.size
        else
          i += 1
        end
      end
      token
    end
    result
  end
end
```

動きとしては、quate_charで挟まれた部分を一旦退避しておいて、splitしてから、戻しています。
メモ：dfコマンドとSNMPで取得されるディスク容量の違い


[Why do SSH Disk Free and SNMP Linux Disk Free show different values for my target Linux system?][1]
[Why The Linux df Command Shows Lesser Free Disk Space?][2](※1)
に記載されている内容を記載しています。

また、「Superblockとは？」として、[Wiki/スーパーブロック (ファイルシステム)][3]を確認しています。


## 何故書いているの？
SNMPで取得している容量と、実際にサーバで`df`コマンドで取得した容量が違うことがあり、
それって何で？となったのが始まり。TIPSの共有で書いています。

## どう違うの？
`df`コマンドの場合：

お使いのファイルシステムで異なりますが、
Linux ext2/ext3などでは、システム起動時に確認される
ファイルシステムのメタ情報を保管する場所(Superblock)がある。
この情報を保管する場所は、OSインストール時に予め設定されており、
`tune2fs -l /dev/mapper/VolGroup00-LogVol00 | grep -e "Reserved block count" -e "Block size"`で確認できる。

※1によると、EXT3のファイルシステムでは5%分確保されているとのこと。

SNMPの場合：
単純に全体の容量と実際に使用している容量、
そして「まだ使用していない容量」を取得します。

## 結論

なので、(推測になりますが)SNMPでは、Superblockで予め確保されている容量を加味していない可能性があります。
（SNMPではまだ空いているな！と思っても、実は残り容量はSuperblockの範囲内であるかも。。。）

余裕のあるディスク容量でサーバを運用して頂きたいですねw

[1]: http://kb.paessler.com/en/topic/43183-why-do-ssh-disk-free-and-snmp-linux-disk-free-show-different-values-for-my-target-linux-system
[2]: http://www.walkernews.net/2011/01/22/why-the-linux-df-command-shows-lesser-free-disk-space/
[3]: http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF_(%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)
IEでアドレスバーを強制表示させる

[[Windows7･IE8] 小ウインドウでのみアドレスバーが表示されない。 - マイクロソフト コミュニティ](http://answers.microsoft.com/ja-jp/ie/forum/ie8-windows_7/windows7ie8/7dbc804e-f76d-49aa-8cbd-002a8bc47065)

![ツールバーを強制表示.png](https://qiita-image-store.s3.amazonaws.com/0/25728/6868d1f2-7609-95a9-808e-0c55c234bcb2.png)
【Unity2D】Animationの速度を変更する方法

![001.png](https://qiita-image-store.s3.amazonaws.com/0/43772/c465b59e-f515-d981-fbc7-e84232fccc8a.png)
変更したいAnimationを選択し、InspectorからOpenをクリックします。

![002.png](https://qiita-image-store.s3.amazonaws.com/0/43772/ef9b2da1-9fbc-72b1-1908-2f2ed424007a.png)
するとAnimatorタブ(Animationレイヤー編集画面)が開かれるので、変更したいアニメーションレイヤーを選択します。

![003.png](https://qiita-image-store.s3.amazonaws.com/0/43772/678ed7fc-fbf2-ad29-33f1-8b362d247949.png)
そしてInspetorビューのspeedを変更することでアニメーション速度が変わります。デフォルトは1で、1より小さくするとゆっくりになります。1より大きくすると速くなります。
Numpyでゼロ要素がある配列のEntropyを計算


配列に0要素がある時は普通にやると値がNanになってしまう。

```python
>>> import numpy as np
>>> a = np.array([0.1,0.3,0,0.05,0.15,0.6,0])
>>> np.log(a)
array([-2.30258509, -1.2039728 ,        -inf, -2.99573227, -1.89711998,
       -0.51082562,        -inf])
>>> a*np.log(a)
array([-0.23025851, -0.36119184,         nan, -0.14978661, -0.284568  ,
       -0.30649537,         nan])
>>> -sum(a*np.log(a))
nan
```

そういう時は[masked arrays](http://docs.scipy.org/doc/numpy/reference/maskedarray.html)を使う。

```python
>>> import numpy as np
>>> a = np.array([0.1,0.3,0,0.05,0.15,0.6,0])
>>> np.ma.log(a)
masked_array(data = [-2.3025850929940455 -1.2039728043259361 -- -2.995732273553991
 -1.8971199848858813 -0.5108256237659907 --],
             mask = [False False  True False False False  True],
       fill_value = 1e+20)

>>> a*np.ma.log(a)
masked_array(data = [-0.23025850929940456 -0.3611918412977808 -- -0.14978661367769955
 -0.28456799773288216 -0.30649537425959444 --],
             mask = [False False  True False False False  True],
       fill_value = 1e+20)

>>> -(a*np.ma.log(a)).sum()
1.3323003362673613
```

ちなみに単純にリスト内包でやる時はこう。

```python
>>> import numpy as np
>>> a = np.array([0.1,0.3,0,0.05,0.15,0.6,0])
>>> -sum([v*math.log(v) if v > 0 else 0 for v in a])
1.3323003362673613
```

どっちがいいんだろ。
ウェブサービスを運用するときにセキュリティ面で考えておくことのメモ

# 攻撃側の視点からできるだけまとめる

弱点が全くないシステムをつくるのは大変です。指摘を受けて、あるいは攻撃を受けて初めて気づくことは普通にあることです。だから、この記事の内容がすべて真実なら mixi の対応は「え、まじですか？」と思う次第です。

mixiの脆弱性報告制度について - Shira's blog - http://goo.gl/9IpTC4

# こうげき

いろんな攻撃を受けますが、サービス継続するにあたって致命的なのは **顧客情報の流出** だと思います。とにかく、顧客情報を適当に扱ってはいけません。運用ルールでも徹底的にやって、余裕があれば定期的に監査して特に人的な穴をつぶすべきです（メンテや調査のためにDBからダンプしたファイルをその辺に放置する輩はマジ死ね。）

**大切にすべき情報**

- 名前
- 連絡先関係（住所、電話番号）
- メールアドレス
- クレジットカード情報 :exclamation: 

会社やサービスに対してダメージを与えようとしたら、DOS攻撃よりも、顧客情報の流出の方が効果があると攻撃者は考えます。DOS攻撃は攻撃側のリソースもかかるので。顧客情報の一発流出を狙います。

## DOS攻撃

いやがらせです。いたずら程度の気持ちで、負荷テストツール等で誰でも簡単にできちゃうのが面倒です。最近は若者の間でSkype相手に嫌がらせするためにDOS攻撃をしあうこともあるそうです。怖い世の中になったものです。

オープンなウェブ系のサービスを運用してたら狙われたらどうしようもない攻撃です。ガチ系の人たちにまじで狙われたらしばらくお手上げです。よほどの恨みを買っていない限り、しばらくすれば沈静化するのでIPやら何やらで手前で落とすようにして様子を見ます。

システム自体に負荷がかかるリクエストがある場合（検索等）は、できるだけのことはしておきます。GETは受け付けないとか。TOKEN使ってリクエストを制限するとか。GETを受け付けると、どこかのサイトで <img> タグを自由にコメントに使えるとか、そんなのがあると、それを経由して攻撃を受ける可能性があって超面倒です。

## 辞書攻撃系（適当な名前がわからん）

個別のユーザー情報を調べるために、パスワードやらメールアドレスやらを

- ログイン画面
- パスワード忘れ画面

を経由して知ろうとします。パスワード忘れ画面で、メールアドレスを入力させて云々の機能がある場合は、そのアドレスが登録されていてもされていなくても同じメッセージを表示するようにするのがまともな実装でしょう。

## XSS 的な（XSRFとか）

有名なので何とか対策してください。

## ミドルウェアの脆弱性をついた攻撃とか

自分でつくっていない部分に脆弱性がある場合、バージョンアップを忘れていたり、パッチをあてていなかったり、サポート期限が切れていたり、この前のStrutsみたいなことだったりと。システム自体が遅くなるとか落ちるとかならましな方で、任意のコマンドが外部から実行できて、バックドアを設置されるようなことがあると後々面倒です。

気をつけましょう。

バックドアを設置されると終わります。アップデート情報の確認とアップデートはきちんとやりましょう。ゼロデイ攻撃はどうしようもないよなーとは思います。

# データベースを狙う話

会社やサービスに致命的なダメージを与えるために、データベースが狙われます。ごっそりデータが取れるので個人情報を個別に抜き出そうとするユーザーアカウントに対するパスワードを辞書攻撃よりも優先されます。データベースに外から直接接続できるようになっていないと思うので、データベースに接続可能なシステムを探します。

- ウェブサーバーやアプリケーションサーバー
- オフィスからのメンテナンス経路（オフィスは結構ざるだよねという話）

## SSHで接続できるか？

サーバーのメンテナンスをSSH経由で行うことが多いと思いますが、ウェブサーバーやアプリケーションサーバーにSSHで接続できるようにしていた場合、ある程度の接続制限をかけていると思います。やってなかったらちゃんとやりましょう。

- IPアドレスで接続制限している場合

接続可能なIPアドレスを持ったシステム（または拠点）に侵入することを検討：オフィスのグローバルIPで接続許可している場合、オフィス内に普通の人がいたらその人を狙います。Wifi 飛んでたら、そこから入って、もろい端末狙ったりやファイルサーバーのファイルを実行形式のファイルに書き換えたりとか。

- 証明書で接続可能なユーザー（端末）を制限している場合

けっこう大変（パスワードは何と手を尽くしてわかる可能性もあるが、証明書を取るのは大変）

## 直接DBに接続できるか？

ときどき、メンテナンス経路で直接DBに接続できるようにしていることがあるらしいです。


----

続きはまた今度書く（疲れた）、あと推敲して読みやすくする

- スマートホンを使った攻撃
- 管理ツール（管理用画面）を狙った攻撃
MT4のヒストリカルデータをRでxts形式に変換する。

はじめまして。

こちらでは主にシステムトレードソフト、MetaTrader4 に関連する話題を書いて行きます。
へなちょこなので、すきま産業的しょぼいネタばかりになると思いますが、よろしくお願いいたします。

さて、初投稿からタイトル通りいきなりすきまに突っ込みます。

MT4 での EA やインジケーター開発、トレードログの分析に R を利用したいという人も多いと思いますが、R で時系列分析を行う場合、xts パッケージを利用すると何かと<a href="http://www.slideshare.net/teramonagi/tokyo-r15-20110702">便利</a>です。
ところが xts 形式にデータを変換するのにはちょこっと手間が掛かります。
そこで MT4 の吐き出した csv 形式のヒストリカルデータを xts に一発変換する関数を作ってみました。
参考にさせていただいたのは日本 R 界の大仏様、teramonagi さんの<a href="http://d.hatena.ne.jp/teramonagi/20100930/1285806175">コチラ</a>です。
私のツイートに対する<a href="http://d.hatena.ne.jp/teramonagi/20140416/1397647882">アンサー記事</a>まで書いていただき、ありがたやありがたや。

MT4 と R の連係の下準備に関しては<a href="http://d.hatena.ne.jp/fai_fx/20110914/1315927124"> fai さん</a>が丁寧に解説しておられますのでそちらをご参照下さい。
なお、MT4/build600以降ではオリジナルの mt4R.dll が使えなくなってしまいましたが、その対応版を<a href="https://github.com/micclly/mt4R/tree/new_mql4_support/MQL4"> micclly さん</a>が提供して下さっています。

では本題です。

```r:R

fun.xts.single <- function(dat){
   
   x.csv <- paste(dat, ".csv", sep="")
   
   x.df <- read.csv(x.csv, header=FALSE,
　　　　　　　　　col.names = c("Date", "Time", "Open", "High", "Low", "Close", "Volume"),
              colClasses = c("character", "character", 
                             "numeric", "numeric", "numeric", "numeric", "integer"))
   x.df$Datetime <- paste(chartr(".", "-", x.df$Date), x.df$Time)
   
   x.xts <- as.xts(zoo(x.df[,3:6], as.POSIXct(x.df$Datetime, "EET")))
   # "EET" = 東ヨーロッパ時間
   
   return(x.xts)
}
```

ファイルパスを指定していないので、読み込みたい csv ファイルを R のワーキングディレクトリに入れておいて下さい。
MT4が吐き出したファイル名の .csv より前の部分を文字列の引数として与え、適当なオブジェクト名に代入するだけです。

```r:R
USDJPY.5min.xts <- fun.xts.single("USDJPY5")
```

as.xts 関数内の引数、"EET" の部分は xts に変換される際の時間帯指定です。
ご使用の業者に合わせて適宜変更して下さい。
省略した場合はローカル（日本なら "JST" ）で読み込まれます。
Volume 値まで読み込みたい場合は、同関数内の [,3:6] を [,3:7] に。

xts に至るまでのポイントは型指定（私は R でここに翻弄されることが多いです）、区切り文字変更、日付と時間の結合あたりでしょうか。
とりあえずこれでつるっと変換できるはずですが、もっと良い書き方があったら教えて下さい。

ところで R での "<-" と "=" の使い分けってなんか明確な作法とかあるんですかね？

次回は複数通貨ペアをべろべろっと一気に変換する関数について書いてみたいと思います。
Windows7 ごく簡単なネットワーク設定スクリプト

# 前提

複数のサブネットを手動で、しかも頻繁に設定して使い分ける必要がある時に便利なスクリプト

* 環境は `Windows7`
* 今回は `PowerShell` は用いない。
    * *.ps1 はデフォルトで有効ではないという衝撃

# スクリプト例

## 外部向け
* 固定IPアドレス
* デフォルトゲートウェイ有り
* DNS 指定有り
* ファイアウォール有効

```cmd:外部ネットワーク.bat
netsh advfirewall set allprofiles state on
netsh interface ip set address "ローカル エリア接続" static 192.168.xxx.xxx 255.255.255.0 192.168.yyy.yyy
netsh interface ip set dns "ローカル エリア接続" static 192.168.aaa.aaa primary validate=no
netsh interface ip set dns "ローカル エリア接続" static 192.168.bbb.bbb validate=no
```

## 内部向け
* 固定IPアドレス
* デフォルトゲートウェイ無し
* DNS 無効
* ファイアウォール無効

```cmd:内部ネットワーク.bat
netsh interface ip set address "ローカル エリア接続" static 192.168.xxx.xxx 255.255.255.0 none
netsh interface ip set dns "ローカル エリア接続" none
netsh advfirewall set allprofiles state off
```

## 変更結果表示
```cmd:変更結果確認.bat
netsh interface ip show address "ローカル エリア接続"
netsh interface ip show dns "ローカル エリア接続"
```

# readme
* `bat` ファイルは管理者アカウントで実行

## 備考
* 実際のスクリプトでは
    * 設定変更の処理をした後には、必ず変更結果表示させています
    * 最後に `pause` してます (エラー・変更結果確認のため)
* "ローカル エリア接続" というのは、コンパネ/ネットワーク から設定できるアダプタ名です。

# あとがき
* 思い出しながら書いてるので、ところどころ怪しいです (という言い訳)
* ちなみに XP 以前では `netsh firewall` コマンドらしい
Goでエスケープシーケンスを使ってコマンドプロンプトに色を出す

# コマンドプロンプトで簡単に色を出したい

Windowsのコマンドプロンプトで色を出したいならコンソールAPIの[SetConsoleTextAttribute](http://msdn.microsoft.com/ja-jp/library/cc429756.aspx)を使えばいいのですがエスケープシーケンスと比べると手間がかかります。
そこで、エスケープシーケンスの一部をパースして色を出すGoのライブラリを作りました。

https://github.com/shiena/ansicolor

## サンプル1

使い方はとても簡単で、`ansicolor.NewAnsiColorWriter(os.Stdout)`で生成したWriterにFprintf系の関数でエスケープシーケンスの文字列を出力するだけです。
またWindows以外では引数のio.Writerに対してWrite関数を呼ぶだけのラッパーなのでOSの違いを意識する必要はありません。

```go:main.go
package main

import (
    "fmt"
    "os"

    "github.com/shiena/ansicolor"
)

func main() {
    w := ansicolor.NewAnsiColorWriter(os.Stdout)
    text := "%sforeground %sbold%s %sbackground%s\n"
    fmt.Fprintf(w, text, "\x1b[31m", "\x1b[1m", "\x1b[22m", "\x1b[41;32m", "\x1b[0m")
    fmt.Fprintf(w, text, "\x1b[32m", "\x1b[1m", "\x1b[22m", "\x1b[42;31m", "\x1b[0m")
    fmt.Fprintf(w, text, "\x1b[33m", "\x1b[1m", "\x1b[22m", "\x1b[43;34m", "\x1b[0m")
    fmt.Fprintf(w, text, "\x1b[34m", "\x1b[1m", "\x1b[22m", "\x1b[44;33m", "\x1b[0m")
    fmt.Fprintf(w, text, "\x1b[35m", "\x1b[1m", "\x1b[22m", "\x1b[45;36m", "\x1b[0m")
    fmt.Fprintf(w, text, "\x1b[36m", "\x1b[1m", "\x1b[22m", "\x1b[46;35m", "\x1b[0m")
    fmt.Fprintf(w, text, "\x1b[37m", "\x1b[1m", "\x1b[22m", "\x1b[47;30m", "\x1b[0m")
}
```

## サンプル2

`github.com/wsxiaoys/terminal/color`と組合せると更に簡単になります。

```go:main.go
package main

import (
	"os"

	"github.com/shiena/ansicolor"
	"github.com/wsxiaoys/terminal/color"
)

func main() {
	w := ansicolor.NewAnsiColorWriter(os.Stdout)
	color.Fprintf(w, "@{r}foreground @{r!}bold@{|} @{gR}background@{|}\n")
	color.Fprintf(w, "@{g}foreground @{g!}bold@{|} @{rG}background@{|}\n")
	color.Fprintf(w, "@{y}foreground @{y!}bold@{|} @{bY}background@{|}\n")
	color.Fprintf(w, "@{b}foreground @{b!}bold@{|} @{yB}background@{|}\n")
	color.Fprintf(w, "@{m}foreground @{m!}bold@{|} @{cM}background@{|}\n")
	color.Fprintf(w, "@{c}foreground @{c!}bold@{|} @{mC}background@{|}\n")
	color.Fprintf(w, "@{w}foreground @{w!}bold@{|} @{kW}background@{|}\n")
}
```

## スクリーンショット

サンプルを実行したスクリーンショットです。

![screenshot](https://gist.githubusercontent.com/shiena/a1bada24b525314a7d5e/raw/c763aa7cda6e4fefaccf831e2617adc40b6151c7/main.png)

## 参考

エスケープシーケンスのパースについてANSICONとwacが参考になりました。

* https://github.com/adoxa/ansicon
* https://github.com/aslakhellesoy/wac

Goから`SetConsoleTextAttribute`やその他のコンソールAPIを呼ぶ方法はgo-colortext packageが参考になりました。

* https://github.com/daviddengcn/go-colortext

これらのソフトウェアがなければ作ることができなかったと思います。

# 2014/05/16追記
## 作成の動機はThe Platinum Searcherのissue

[The Platinum Searcher](https://github.com/monochromegane/the_platinum_searcher)の[issue#23](https://github.com/monochromegane/the_platinum_searcher/issues/23)で他のコマンドで色を出せているから対応してほしいと要望があり、興味が湧いたので調べたのがきっかけでした。
すると参考に挙げた材料が揃ってしまったので作らない訳にはいきません。
そして出来上がったものは汎用的になったので別パッケージに切り出し`ansicolor`パッケージとして、これを組み込んだ[PR](https://github.com/monochromegane/the_platinum_searcher/pull/33)で取り込んでもらえました。
そのおかげで最新版ではWindowsでもカラフルな検索結果を表示できるので皆さんも使いましょう！
データの追加し忘れをコンパイラに教えてもらう

例えば、enum に対して名前をつけて表示するとします。

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

enum {
    NAME_1 = 0,
    NAME_2,
    NAME_3,
    NAME_MAX
};

const char *enum_to_str[NAME_MAX] = {
    "name1",
    "name2",
    "name3",
};

void main()
{
    using namespace std;
    cout << enum_to_str[NAME_1] << endl;
}
```

この時、もし enum に NAME_4 を増やすとなった場合、enum_to_str にも文字列(name4)を追加しなければならなくなるわけですが、ソースコードがこんな風にひと目で分かるようになっているとも限りません。

もしかすると、全然関係のないソースファイルに enum_to_str があるかもしれません。
仮にそんなところにあった場合、文字列の追加を忘れてしまうかもしれません……。

そんな時に便利なのが static assert + sizeof array。

以下のようにすると、もし仮に enum_to_str に名前を追加を忘れたとしても、コンパイル時にエラーを出して教えてくれます。

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

#define STATIC_ASSERT(expr) \
    typedef char STATIC_ASSERT_TYPE[(expr) ? 1 : -1]
    
#define SIZEOF_ARRAY(ary)\
    (sizeof(ary) / sizeof(ary[0]))
    
enum {
    NAME_1 = 0,
    NAME_2,
    NAME_3,
    NAME_MAX
};

const char *enum_to_str[] = {
    "name1",
    "name2",
    "name3",
};
STATIC_ASSERT(SIZEOF_ARRAY(enum_to_str) == NAME_MAX);

int main()
{
    using namespace std;
    cout << enum_to_str[NAME_1] << endl;
    
    return 0;
}
```
まぁ、そもそもコード内にデータを埋め込む事自体云々……という話ではありますが……。
AWSのマウントでハマった時のメモ


エラー&対策をマウントについて調べながら。

##/etc/fstab設定
fstabにデバイス名、マウントポイント、ファイルシステム、オプションを設定

```
vi /etc/fstab
server1:/hoge /hoge nfs rw,hard,intr 0 0
```

・fstabの設定
http://unixlife.jp/linux/system/fstab.html


##mountコマンド
fstabに記述したマウントを設定。が、エラー。。

```
[hoge@hoge]$ mount -a
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
```

>mount.nfs: rpc.statd is not running but is required for remote locking.

rpc.statd が動いてない、リモートをロックするために必要。
>mount.nfs: Either use '-o nolock' to keep locks local, or start statd.

ローカルロックを保つために'-o nolock'を使うか、statdを開始して。
>mount.nfs: an incorrect mount option was specified

誤ったマウントオプションが指定された。

・mount ファイルシステムをマウントする
http://codezine.jp/unixdic/w/mount

##調査
####■rpc
Remote Procedure Call の略称
ネットワークによって接続された他のコンピュータ上でプログラムを呼び出し、実行させるための手法のことである。

http://www.sophia-it.com/content/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%97%E3%83%AD%E3%82%B7%E3%83%BC%E3%82%B8%E3%83%A3%E3%82%B3%E3%83%BC%E3%83%AB
####■statd
NFS 上でロック・サービスのためのクラッシュ機能およびリカバリー機能を提供します。
・statd デーモン
http://publib.boulder.ibm.com/infocenter/aix/v7r1/index.jsp?topic=%2Fcom.ibm.aix.cmds%2Fdoc%2Faixcmds5%2Fstatd.htm

####■'-o nolock'
マウント時にロックをしない。
→リモートをロックしない？固定しない？


・ファイルサーバの構築(nfs)
参考項目:マウント時のエラーについて
http://kajuhome.com/nfs.shtml


####rpcプロセスが動いてない予感！
と思ったら書いてあった。
>クライアント側でポートマッピングサービス「portmap」または「rpcbind」を起動する必要があります。

ということで、起動。

```
[hoge@hoge]$ service rpcbind status
rpcbind は停止しています
[hoge@hoge]$ service rpcbind start
rpcbind を起動中:    
```

##/etc/exports
server1 の/etc/exports が設定していないのに気がつく。

```
vi /etc/exports
/hoge hoge_server_ip/255.255.255.255(rw,async)
```

共有するディレクトリと、そのアクセス許可を設定。

##再度マウント！
```
[hoge@hoge]$ mount -a
mount.nfs: requested NFS version or transport protocol is not supported
```

>requested NFS version or transport protocol is not supported

要求されたNFSバージョンやトランスポートプロトコルがサポートされてない。

明示的に指定してやる必要がありそう。

```
[hoge@hoge]$ mount -t nfs -o proto=tcp,rw,hard,intr server1:/hoge /hoge
```

できた！
mountproto=tcp じゃなくて proto=tcp にするのがハマる。

・NFSを使用した、ボリュームの手動マウント
http://dai_yamashita.bitbucket.org/glusterfs_ja/Manually_Mounting_Volumes_Using_NFS.html

```
[hoge@hoge]$ df -h
```

確認して完了！

##その他参考
・NFSトラブルシュート
http://extstrg.asabiya.net/pukiwiki/index.php?NFS%A5%C8%A5%E9%A5%D6%A5%EB%A5%B7%A5%E5%A1%BC%A5%C8

・GlusterFS
http://gluster.org/community/documentation/index.php/Gluster_3.2:_Manually_Mounting_Volumes_Using_NFS

http://dai_yamashita.bitbucket.org/glusterfs_ja/Manually_Mounting_Volumes_Using_NFS.html
nyaosでシングルクォートを使うときの注意点

nyaosのスクリプトを書く時にこんな感じに書いてうまく動かずハマりました。

```lua
if exist 'Gemfile' then
```

これだと`Gemfile`がカレントディレクトリにあっても真になってくれません。

```lua
if exist "Gemfile" then
```
とダブルクォートを使いましょう。

なんでもコマンドプロンプトはシングルクォートが使えないのでそのためだそうです。まさかシングルクォートが使えない環境があることを想像さえした事もなかったのでびっくりですよ。

## 参考

今回もQA@ITで教えてもらいました。
http://qa.atmarkit.co.jp/q/3665
Go言語で標準出力、標準エラー付きで外部コマンドを実行する


[os/exec](http://golang.org/pkg/os/exec/#example_Command) 見よう。

```go
cmd := exec.Command("milk", "update")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
		
err := cmd.Run()

if err != nil {
	log.Fatal(err)
}
```
gradleでDropwizard

#Gradle Shadow Plugin
[dropwizard](http://dropwizard.readthedocs.org/en/latest/index.html)でfat jarをつくる時のbuild.gradle。
これまでは[こちらの記事](http://qiita.com/mychaelstyle/items/9338f558903ac0c14bc3)を参考にやっていましたが、dropwizard-authでエラーがでたので、mavenのshade pluginと同等の機能をもつshadow pluginでやってみた。
（元の方法でもやれるかもしれないけど。。。）


```lang:build.gradle
//shadow plugin
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:0.8'
    }
}
apply plugin: 'java'
apply plugin: 'shadow'


repositories {
    mavenCentral()
}

dependencies {
   //省略

}

import com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTransformer
shadow {

        exclude 'META-INF/MANIFEST.MF'
        exclude 'META-INF/*.SF'
        exclude 'META-INF/*.DSA'
        exclude 'META-INF/*.RSA'

        transformer(ServiceFileTransformer )
}

jar {
    manifest {
        attributes('Main-Class': 'メインクラス')
    }
}

//buildタスク時にshadowJarタスクを実行するように依存関係設定。
assemble.dependsOn shadowJar

```

shadowJarタスクを実行すれば、ターゲットディレクトリにdistributions/アプリ名-shadow.jarが作成されている。

詳細は本家サイトに。https://github.com/johnrengelman/shadow
andと&&と&&=

タイトルを英語にすると ```and and && and &&=``` という訳のわからないことになります。日本語って便利ですね。

今まで意識して使っていなかった```and``` ```&&``` と、ついでに```&&=``` が、使い分けるとちょっと便利そうという覚書。

たとえば

```rb
a = 1
b = 2 and a and a < b     #=> true
c = 2 && a && a < c       #=> ArgumentError: comparison of Fixnum with nil failed

puts b  #=> 2
(d = 2) && a && a < d   #=> true
puts d  #=> 2
```

という動作からもわかるように```and```って```=```よりも後に解釈されるらしい。ずっと&&と同じものだと思ってました。
[リファレンスを見ると確かにandとorの優先度は一番低い](http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2foperator.html)みたいですね。
上の例だとbとdでは最終的な結果は同じ（変数xに2を代入し、変数aがあるならば大小を比べる）なのですが、bの方が少し見やすい。

他にも例えば

```rb
1..3 && 5   #=> 1..5
1..3 and 5  #=> 5

nil && 2 ? :a : :b   #=> :b
nil and 2 ? :a : :b  #=> nil
```

みたいな違いがあります。

Railsなんかで一つのアクション中で複数のrenderをする場合は、renderの後にreturnを行わないとdouble render errorが発生しますが、

```rb
if sub_acsion = :hoge
  render :hoge_page and return
end

render :nomal_page
```

と書くといいよというのも、Railsの何かのドキュメントに載っていました。```and```を使うことで```render :hoge_page```が解釈されたあとにreturnされています。

ついでに言うと```!```と```not```の優先度もかなり違う……知らないと、稀によく嵌りそうですね

話はかわりますが

```rb
# xが未定義なら初期値を1とする
x ||= 1
```

というように```||=```を使っているソースはよく見かけます。

一方で```&&=```って何に使うんじゃ、と思っていたのですが、最近こんなソースを見かけました。

```rb
def validate_params
  success = true
  success &&= validate_time(param[:time]) if param[:time]
  success &&= validate_date(param[:date]) if param[:date]
  success
end
```

「値が設定されているなら、かつその値の整合性チェックをする」というのを複数の値に対して行いたい時に```&&=```は結構役に立ちそうです。
「PuPHPet」の読み方

# PuPHPetの読み方（発音）

[PuPHPet](https://puphpet.com/)の読み方は「パフェット」のようです。

# 参考にしたページ
https://puphpet.com/help

> How do you pronounce PuPHPet?
> The p is silent.

https://github.com/puphpet/puphpet/issues/391

> @jtreminio Told me somewhen at the start of the project that he would pronounce it like "puffet".
GoInstantのRich Text Editor Widget

GoInstantにRich Text Editor Widgetの機能が新しく追加されたみたいなのでVisualforceページで動かしてみました。

![スクリーンショット 2014-05-14 0.54.19.png](https://qiita-image-store.s3.amazonaws.com/0/8407/6ff52fcd-1fe7-bce6-7992-9af81c1b23d1.png)


動作確認用のコードです。Connect URLの値を自分用のURLに変更すればそのまま動かせると思います。

```
<apex:page showHeader="true" sidebar="false">
 
    <script type="text/javascript" src="https://cdn.goinstant.net/v1/platform.min.js"></script>
    <script type="text/javascript" src="https://cdn.goinstant.net/widgets/rich-text-editor/latest/rich-text-editor.min.js"></script>
    <!-- CSS is optional -->
    <link rel="stylesheet" href="https://cdn.goinstant.net/widgets/rich-text-editor/latest/rich-text-editor.css" />
        
    <script type="text/javascript">
        // Connect URL
        var url = 'https://goinstant.net/YOURACCOUNT/YOURAPP';
        
        // Connect to GoInstant
        goinstant.connect(url, function(err, platformObj, roomObj) {
            if (err) {
                throw err;
            }
 
            // Create a new instance of the Rich Text Editor widget
            var editorWidget = new goinstant.widgets.RichTextEditor({
                room: roomObj,
                containerId: "editor-widget"
            });
 
            // Initialize the Rich Text Editor widget
            editorWidget.initialize(function(err) {
                if (err) {
                    throw err;
                }
                // Now the editor will render in your container and be sync across all
                // other clients in the room
            });
        });
    </script>
    <div id="vf-page">
        <div id="editor-widget"></div>
    </div>
</apex:page>
```

##参考サイト
**Add a Realtime, Collaborative Rich Text Editor to Your App**
https://goinstant.com/blog/add-a-realtime-collaborative-rich-text-editor-to-your-app


**Rich Text Editor**
https://developers.goinstant.com/v1/widgets/rich_text_editor.html