OmniAICreator/Qiita-1.07M huggingface dataset:
外れ値細胞のIDをインタラクティブに見つける

single-cell RNA-Seqで次元圧縮したのちに、外れ値細胞があった場合、それら細胞のIDを取得する方法。

ここでは、100細胞のうち、91〜100番目の細胞が外れ値細胞だと想定。

```r
# PCAの結果だとする
# 91〜100番目に外れ値細胞が入っているけど、本番ではそれがわからないと仮定する
test.data <- data.frame(
				PC1 = c(rnorm(90), rnorm(10, 4)),
				PC2 = c(rnorm(90), rnorm(10, 4)),
				PC3 = c(rnorm(90), rnorm(10, 4))
				)
rownames(test.data) <- paste0("Cell", 1:100)
index.test.data <- c(rep(rgb(0,0,1,0.5), 90), rep(rgb(1,0,0,0.5), 10))
names(index.test.data) <- c(rep("Normal", 90), rep("Outlier", 10))

pairs(test.data, col=index.test.data, pch=16)
```
![6d0a3702-3282-34aa-952d-6bc6cfc85705.png](https://qiita-image-store.s3.amazonaws.com/0/17038/ee0bf4b2-89c8-3b84-6c97-d0f62d6907ba.png)

Rの標準関数（plot, pairsなど）では、点とラベルを同時に見やすく見せることが面倒くさそう。
そこで、幾つか拡張パッケージを試した。



# 方法1 : rglパッケージ
```r
library("rgl")
plot3d(test.data, col=index.test.data)
text3d(test.data, text=rownames(test.data))
```
![df17a08a-076e-5737-87a4-03117d5e238a.png](https://qiita-image-store.s3.amazonaws.com/0/17038/a3bd8dab-ce2b-1e6c-ccb6-d0dc411db978.png)

この方法だと、あらかじめ細胞のIDをデータ点の上に重ねておく。

簡単だがデータ点が多くなるほど、IDが長くなるほど見づらくなるという弱点もある。




# 方法2 : plotlyパッケージ
```r
library("plotly")
plot_ly(test.data, x = PC1, y = PC2, z = PC3,
	type = "scatter3d", mode = "markers",
	text = rownames(test.data),
	group = names(index.test.data)
	)
```
![21070354-64e9-6995-8f35-2ec2e7a0842c.png](https://qiita-image-store.s3.amazonaws.com/0/17038/3798d5b8-e227-c6c9-4282-41bf03747064.png)


plotlyは一度plotlyサーバでアカウント作成、APIキー取得などの手順をふみ、サーバーサイドで描画するので、使いづらかったのだが、最近ローカルでも実行できるようになったみたいで、最近すごく使いやすい。
図のように、カーソルを合わせると、そのデータ点の細胞IDや座標、その他メタ情報が出てくる。

また、二次元の散布図だと、カーソルで選択したエリアだけズームするということもできる（三次元ではできない?）。

```r
plot_ly(test.data[,1:2], x = PC1, y = PC2,
	type = "scatter", mode = "markers",
	text = rownames(test.data),
	group = names(index.test.data)
	)
```


![8e500db8-db72-f39d-53c3-4325b211d2e8.png](https://qiita-image-store.s3.amazonaws.com/0/17038/b753487e-e8cd-7571-15a2-bdf7324ae4e6.png)
![ee52d44a-7941-f3f2-d661-32a091313094.png](https://qiita-image-store.s3.amazonaws.com/0/17038/ff203d62-ba3d-7d2c-4ef8-37985ffe385a.png)


# 方法3 : pairsD3パッケージ
```r
library("pairsD3")
pairsD3(test.data, group=names(index.test.data))

# Shinyでサーバーが立ち上がるが、止め方がわからない => Rを一回閉じることになる?
# shinypairs(test.data, group=names(index.test.data))
```

![6c4a84fc-cf4b-e14a-c2c9-263d057b5021.png](https://qiita-image-store.s3.amazonaws.com/0/17038/5a2b89fe-df30-9eea-cddf-10ea96230498.png)

この方法は、pairs関数をそのままインタラクティブにした感じで、使いやすい。
shinypairs関数でShinyサーバーを立ち上げると、選択したデータのリストが取得できて便利だし、その場でパラメーターをいじることも可能になるのだが、この関数は一度起動すると止められないっぽい。
A/D Converter ADS7828をArduinoから制御する(I2C)

# ADS7828

![ads7828.jpg](https://qiita-image-store.s3.amazonaws.com/0/63450/80736fd3-bbad-96fc-db77-eb9b6cc8f110.jpeg)

[ADS7828 Datasheet](http://www.tij.co.jp/jp/lit/ds/symlink/ads7828.pdf)

## ADS7828でできる事
ADS7828は、I2Cに対応した8CHのAnalog to Digital Converterです。 8CHから12Bit(0〜4095)の値を取得する事が可能です。

<img width="633" alt="ads7828.png" src="https://qiita-image-store.s3.amazonaws.com/0/63450/961706cc-7770-a8d4-0b1a-1942c35a75da.png">

## ADS7828のPINレイアウト

<img width="706" alt="ads7282_002.png" src="https://qiita-image-store.s3.amazonaws.com/0/63450/16a7effc-9219-59d7-bfe4-27729d9fe869.png">

## ADS7828のSlaveアドレス
ADS7828のSlaveアドレスは、A0, A1のHigh/Lowの組み合わせで、4通りの設定ができる。

<img width="564" alt="adc7828_slave.png" src="https://qiita-image-store.s3.amazonaws.com/0/63450/61f3dd8f-d01e-c24f-0f02-2472766560a2.png">

<img width="475" alt="adc7828_slave2.png" src="https://qiita-image-store.s3.amazonaws.com/0/63450/72a3b5fa-745a-a4fc-96f7-050f91ac08e3.png">

## 実装例

<img width="719" alt="ads7828_sample.png" src="https://qiita-image-store.s3.amazonaws.com/0/63450/d63a5bf2-3d9d-bf44-7884-f29f5fdb1ddc.png">

## ADS7828をArduinoから操作

### 各チャンネルの値を取得する

```c:sample_ads7828.pde
#include <Wire.h>

#define DEVICE_ADDR (0x48) // ADS7828のスレーブデバイスのアドレス
#define ADC_CH0 (0x8C) // CH1
#define ADC_CH1 (0xCC) // CH2
#define ADC_CH2 (0x9C) // CH3
#define ADC_CH3 (0xDC) // CH4
#define ADC_CH4 (0xAC) // CH5
#define ADC_CH5 (0xEC) // CH6
#define ADC_CH6 (0xBC) // CH7
#define ADC_CH7 (0xFC) // CH8

// CHの配列
byte ADC_CHS[8] = {ADC_CH0, ADC_CH1, ADC_CH2, ADC_CH3,
                      ADC_CH4, ADC_CH5, ADC_CH6, ADC_CH7};

// 取得した値を格納するバッファ
byte adc_buff[2];

void setup()
{
  Serial.begin(9600); // シリアルの開始デバック用
  Wire.begin();       // I2Cの開始
}

void loop()
{ 
  // CH0-CH7の値を読み込む(0-4095)
  for(int i = 0; i < 8; i++){
    readI2c(ADC_CHS[i], 2, adc_buff);
    int value = (((int)adc_buff[0]) << 8 ) | adc_buff[1];
    Serial.print("ch");
    Serial.print(i);
    Serial.print(":");
    Serial.println(value);
  }
  Serial.println("-------------");
  
  delay(1000);
}

// I2Cへの書き込み
void writeI2c(byte register_addr, byte value) {
  Wire.beginTransmission(DEVICE_ADDR);  
  Wire.write(register_addr);         
  Wire.write(value);                 
  Wire.endTransmission();        
}

// I2Cへの読み込み
void readI2c(byte register_addr, int num, byte buffer[]) {
  Wire.beginTransmission(DEVICE_ADDR); 
  Wire.write(register_addr);           
  Wire.endTransmission();         

  Wire.beginTransmission(DEVICE_ADDR); 
  Wire.requestFrom(DEVICE_ADDR, num);   

  int i = 0;
  while(Wire.available())        
  { 
    buffer[i] = Wire.read();   
    i++;
  }
  Wire.endTransmission();         
}
```

![adc7828_serial.png](https://qiita-image-store.s3.amazonaws.com/0/63450/603d3254-57d1-61df-2d01-2921b34bcf28.png)
RailsでHTML-pipelineを使ったテキスト整形

はじめに
--------

Webアプリに限らず様々な場面で「HTMLタグを無毒化して、URLを`<a>`タグで囲んで...」という共通した処理をする必要があるかと思います。`sanitize` や `gsub` でもいいですけど、emojiを使ったり`@user`や`#hashtag`にもリンクを貼ったりすると、コードが煩雑化するのが目に見えています。

この問題を解決できる[html-pipeline](https://github.com/jch/html-pipeline)というGemがあります。html-pipelineはこれらのフィルタ処理をパイプラインで処理します。またデフォルトで多くのフィルタを使うことができ、独自のフィルタも定義できます。

この記事では、元のテキストを以下の手順でフィルタする方法を紹介します。

1.  &"<> を実体参照に置換
2.  URLを`<a>`タグのリンクで置換

インストール
------------

Gemfileにhtml-pipelineを記述します。今回使うフィルタの依存gemもインストールします。

```ruby
# Gemfile

gem 'html-pipeline'
gem 'rinku'
gem 'escape_utils'
```

Railsアプリに組み込む
---------------------

Railsアプリでhtml-pipelineを使うときは、ヘルパーメソッドでラップするとviewからも呼び出せて便利です。ここでは `ApplicationHelper` にヘルパーメソッドを追加します。

```ruby
# app/helpers/application_helper.rb

module ApplicationHelper
  def html_pipeline(source)
    pipeline = HTML::Pipeline.new [
      HTML::Pipeline::PlainTextInputFilter,
      HTML::Pipeline::AutolinkFilter
    ]
    pipeline.call(source)[:output]
  end
end
```

HTML::Pipelineの`new`に、フィルタクラスをArrayで渡します。`call` を呼び出すと、戻り地のハッシュの `:output` に結果が格納されます。

また次のコードは、ヘルパメソッドのテストとなります。

```ruby
# spec/helpers/application_helper_spec.rb

require 'rails_helper'

RSpec.describe ApplicationHelper, type: :helper do
  describe "#html_pipeline" do
    context "when the text contains HTML tags" do
      subject { html_pipeline("Hello <b>world</b>") }
      it { should match /&lt;b&gt;/ }
    end

    context "when the text contains urls" do
      subject { html_pipeline("Google on https://google.com/") }
      it { should match /href/ }
    end
  end
end
```

おわりに
--------

ヘルパーメソッド呼び出し時に毎回インスタンスが作られてたくない人は、initializersでインスタンスを作れば良いと思います。またhtml-pipelineはRailsアプリに限らず、いろいろなアプリケーションに使えるので、Middlemanやjekyllでも使ってみたいですね。
curl > Fオプション (--form) > multipart/form-data形式でPOSTする

http://qiita.com/kazuph/items/cfdd0eec8ef069f8aa0f
にあるcurlでのslackへの画像uploadで-Fというオプションを使っている。

調べてみた。

http://d.hatena.ne.jp/a666666/20110427/1303838381
> --form (-F)
> multipart/form-data 形式で POST する。 key=value 形式で指定する。
中の人(二次元)になる方法【FaceRig × Live2D × Unity × OBS × AVVoiceChanger × 気合】

こんにちは[GOROman](https://twitter.com/GOROman/)です。


くわしくは[こちら](https://medium.com/@GOROman_1661/%E4%B8%AD%E3%81%AE%E4%BA%BA-%E4%BA%8C%E6%AC%A1%E5%85%83-%E3%81%AB%E3%81%AA%E3%82%8B%E6%96%B9%E6%B3%95-facerig-live2d-unity-obs-avvoicechanger-%E6%B0%97%E5%90%88-d49c3d456ed6#.23dt1lj24)
classLoader基本知識は本当に理解しているのか？

classLoaderは本当に理解しているのか？
下記のコードは某大手IT企業の面接問題みたいです。
出力は正しく書けるのかな。。。。。


public class CalssLoad implements Cloneable {

    public static int k = 0;

    public static CalssLoad t1 = new CalssLoad( "t1" );

    public static CalssLoad t2 = new CalssLoad( "t2" );

    public static int i = print( "i" );

    public static int n = 99;

    public int j = print( "j" );
    {
        print( "構造ブロック" );
    }

    static {
        print( "静的ブロック" );
    }


    public CalssLoad( String str ) {

        System.out.println( ( ++k ) + ":" + str + "    i=" + i + "  n=" + n );
        ++n;
        ++i;
    }


    public static int print( String str ) {

        System.out.println( ( ++k ) + ":" + str + "   i=" + i + "   n=" + n );
        ++n;
        return ++i;
    }


    public static void main( String[] args ) {

        CalssLoad t = new CalssLoad( "init" );
    }
}

出力結果：
　　　　1:j   i=0   n=0
　　　　2:構造ブロック   i=1   n=1
　　　　3:t1    i=2  n=2
　　　　4:j   i=3   n=3
　　　　5:構造ブロック   i=4   n=4
　　　　6:t2    i=5  n=5
　　　　7:i   i=6   n=6
　　　　8:静的ブロック   i=7   n=99
　　　　9:j   i=8   n=100
　　　　10:構造ブロック   i=9   n=101
　　　　11:init    i=10  n=102
composerのautoloadで簡単なプロジェクトを作った際に Fatal error: Class 'App\ClassName' not found


composerのautoloadで、psr-4の簡単なプロジェクトを作った際に `Fatal error: Class 'App\ClassName' not found`が出て嵌まりました。


#結論
ファイル名とクラス名が一致していなかった。  

- autoloadでpsr-0,psr-4を指定する場合は、ファイル名とクラス名と一致していないといけない
- psr-0、psr-4のクラス名仕様

##PSR-0、PSR-4のクラス名仕様
[ComposerでPSR-4仕様のオートロードを設定する | Beaglee技術blog](http://tec-blog.beaglee.com/?p=406)に書いてあるように、
ファイル名は<クラス名>.phpでなければなりません。

#勘違いのもと
以下の公式ドキュメントを見て、namespaceがフォルダでクラス名がファイルみたいなことかと解釈。
そして、namespaceとクラス名でクラスを一意に特定できているから、ファイル名はクラスを特定する関係ないという勘違いの結論。

##PHPの公式ドキュメントから引用
名前空間の概要
(PHP 5 >= 5.3.0, PHP 7)
>名前空間とは何でしょう? 広義の「名前空間」とは、項目をカプセル化するもののことです。
>これは多くの場面で見られる抽象概念です。 たとえば、たいていの OS はディレクトリでファイルをグルー
>プ化します。 この場合、ディレクトリがその中のファイルの名前空間として機能しています。 具体的
>に言うと、foo.txt というファイルは /home/greg と /home/other の両方に存在することが可能です
>が、それらふたつの foo.txt を同じディレクトリに配置することはできません。 さらに、/home/greg
>ディレクトリの外から foo.txt にアクセスするには、ディレクトリ名をファイル名の前につけて
>/home/greg/foo.txt としなければなりません。 プログラミングの世界における名前空間も、この延長線上にあります。

#参考
- [ComposerでPSR-4仕様のオートロードを設定する | Beaglee技術blog](http://tec-blog.beaglee.com/?p=406)
- [PHP: 名前空間の概要 - Manual](http://php.net/manual/ja/language.namespaces.rationale.php)
(個人的メモ) unix 上実行可能スクリプトに拡張子をつけるかつけないか -> コマンドラインから実行するかどうか

NOTE: ただの個人的なメモです。

実行権限と shebang によって実行可能なスクリプトファイルをレポジトリに登録するとき、例えば ruby スクリプトだったら拡張子 (.rb) はほぼ付与されるけれども、 shell script とかになってくると .sh を付与してたりしてなかったりしてコミットされてたとしても、違和感を覚えなかったりした。これは一貫性がないと思ったので、どういう場合に拡張子を付与するべきか、どういう場合に付与しなくてもいいかについて考えてみた。

# 基本: コマンドライン上で、実行される executable には拡張子をつけない

コマンドラインから実行される executable には、拡張子をつけないが一つの基準になると考えた。PATHを通して環境にインストールした際の、実行可能なコマンド群や、直接ユーザーに呼ばれることを想定している実行可能スクリプトは、拡張子を持っていないケースが多い。ように思う。

例:
* だいたいの PATH 経由で実行されるバイナリ
* ./configure

# shebang と拡張子の有無

shebang の目的は、そのスクリプトが executable として取り扱われた時に、どのインタプリタで実行するべきかを指定すること。 executable として扱われないファイルは、shebang は必要ない。

なので、 `.rb` 拡張子で終わっているようなスクリプトファイルがあった場合、そのファイルはコマンドライン実行されない前提だと考えられ、すると shebang はおそらく必要ない。
【パズル３】ほとんどのエンジニアには解けるパズル３

##パズル３を公開
Webエンジニア向けのパズルシリーズの３作目を公開した。プログラム言語を問わず、フロントエンド、バックエンド、iOS、Android、どんな技術を担当しているエンジニアであってもほとんど誰にでも解けるパズルだ。
サイトにアクセスするとHack Me, Baby「ハックしてね、ベイビー」のタイトルとCall my lovely APIs「アタシのラブリーなAPIを呼んで」とあるのみ。分かる人なら数分以内に解けるだろう。

<img width="338" alt="Screen Shot 2016-01-08 at 5.45.23 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/108761/c791d035-30ec-9f96-9092-d436c2e6caa0.png">


毎回最初にパズルを解いてもらうのは職場の同僚アメリカ人エンジニアのAで彼がDarthVaderという名でコメントを入れている。いつもはAのパズルの感想を元に議論をするのだが、今回は新しいスターウォーズの映画の話に始終して終わった。私もスターウォーズ話に興奮したのが悪いのだが、一体Aはこのパズルをどう思ったんだろう。。。

##パズルの目的
このパズルシリーズはとにかく「優秀なエンジニアに楽しんで解いていただけるパズル」を目指して作っている。

楽しいパズルを目指しているにも関わらず、たまにコメントで見受けられるある種のイラつき具合や、たった一言「疲れた」のメッセージなどは作った身としてはちょっとヘコむ。どうすれば解ける人も解けない人も全員に楽しんでもらえるのか、相当に考えた。ちなにみエラーメッセージに詳しいヒントを記載して、できるだけ解けない人が出ないようにする工夫は今回も施した。

私にとってこのパズルシリーズの制作は手を動かしてコードを書いている時間よりも「楽しいパズルとは何か？」を考えている時間の方が長い。
誰かに頼まれた仕事でも無いのにウンウン考えてパズルを作り続けるのは、毎回優秀なエンジニアの方々からいただくコメントに大いに触発されるからだ。もしこうしたコメントが無かったとしたら１作目だけで終えている。正直に言えば、もうアクセスいただいただけでも嬉しいのだ。
なのでわざわざ来ていただいた優秀なエンジニアの方々には楽しんでもらわなければ意味が無い。

##貴重なフィードバック
ぜひ「つまらない」と感じても「面白い」と思ってもその感想をはてなブックマークかパズルのコメント欄にでも入れてください。それらを元にこれからも考え続けるつもりです。

【ほとんどのエンジニアには解けるパズル３】
http://challenge-your-limits3.herokuapp.com/
（herokuの無料プランにデプロイしているので最初の１発目だけ遅いです）

【詳細を書いたブログ】
http://tango-ruby.hatenablog.com/entry/2016/01/10/125615


いつものヒント：まずはcurl使って

```console
$ curl http://challenge-your-limits3.herokuapp.com/something/something
```
とかやればいろいろ出る。
Tokyo ELM Meetup作成したら、参加する方いらしゃいますか？

# Tokyo Elm Meetup

I am sure that there are not many Elm users in Japan yet. Most of the docs are in English and there are no regular meet ups. This group is for people who are interested in ELM, and who also may be in Japan so we can have meetup for learning and sharing.

日本ではELM言語、まだまだ流布し始まってない気がしますが、ELM言語に興味ある方々のMeetup Groupです。Meetupを作成したら参加する方いるかな。

→　ELMの資料は全文英語なので理解しにくいかもしれません。
→　日本のELM経験ある方と素人でHackathonなど。（スキルアップ）
→　Just for fun。
AWS　EC2（Linux系）の接続方法とファイル転送方法

チームメンバでAWSを使う時に、よくどうやって接続するの？ファイルのアップどうしたら良いですか？という質問を頂きますのでまとめておきました。
※2016年1月11日現在の環境です。
#インスタンス（サーバ）に接続する
[Tera Term](https://osdn.jp/projects/ttssh2/)を起動します。
ホスト名はAWS、EC2のコントロールパネルに記載されているパブリックIPを入力します。
サービスはSSHを選択して、OKを選択します。
![2016-01-11_083741.jpg](https://qiita-image-store.s3.amazonaws.com/0/95309/616c1599-61d0-ca69-8758-cce7e200f2d1.jpeg)
設定から、SSH認証を選択します。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/95309/0493672b-604f-64e1-c511-dfb7aa92645e.png)
RSA/DSA/ECDSA/ED25519鍵を使うを選択します。
秘密鍵を選択します。
![2016-01-11_084126.jpg](https://qiita-image-store.s3.amazonaws.com/0/95309/eb3852a4-c94a-68e6-c713-4a086f8bc165.jpeg)
すべてのファイルが表示されるようにします。
インスタンスを作る際に作った秘密鍵を選択します。（拡張子はpem）
開くを選択します。
![2016-01-11_084208.jpg](https://qiita-image-store.s3.amazonaws.com/0/95309/244199af-4753-d125-7c19-372d8c89e83d.jpeg)
ユーザ名に ec2-user と入力します。
RSA/DSA/ECDSA/ED25519鍵を使うが選択されていて、秘密鍵が選択されていることを確認します。
![2016-01-11_084246.jpg](https://qiita-image-store.s3.amazonaws.com/0/95309/5cacdec0-d4ca-63ad-cfa1-e376f174f620.jpeg)
接続できました。
![2016-01-11_084341.jpg](https://qiita-image-store.s3.amazonaws.com/0/95309/2e09c217-49ee-2e31-1a46-1308e3d3dda4.jpeg)
##ユーザ名が違う場合
[AWSのサイト](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)に下記の記載があります。まれにユーザ名がec2-userでは無い時があります。
```ssh コマンドを使って、インスタンスに接続します。秘密キー（.pem）ファイルと user_name@public_dns_name を指定します。Amazon Linux の場合は、デフォルトのユーザー名は ec2-user です。RHEL5 の場合は、ユーザー名は root または ec2-user のどちらかです。Ubuntu の場合は、ユーザー名は ubuntu です。Fedora の場合は、ユーザー名は fedora または ec2-user のどちらかです。SUSE Linux の場合は、ユーザー名は root または ec2-user のどちらかです。それ以外の場合で、ec2-user および root が機能しない場合は、ご利用の AMI プロバイダーに確認してください。
```
###MACの場合
iTermなどのターミナルから、秘密鍵（拡張子がpem）のあるディレクトリに移動します。
その後下記のコマンドを実行します。
$ mv 秘密鍵名.pem ~/.ssh/
例:```$ mv MaiKAWAKAMI.pem~/.ssh/```
$ chmod 600 ~/.ssh/秘密鍵名.pem
例:```$ chmod 600 ~/.ssh/MaiKAWAKAMI.pem```
その後下記のコマンドで接続します。
```$ ssh -i ~/.ssh/秘密鍵名.pem ec2-user@該当インスタンスのパブリックIPアドレス```
例:```$ ssh -i ~/.ssh/MaiKAWAKAMI.pem ec2-user@50.201.20.xxx```
#ファイル転送方法
Tera Termでファイルを選択します。
SSH SCPを選択します。
![111.png](https://qiita-image-store.s3.amazonaws.com/0/95309/d1555db4-5bfc-956f-ce12-020ba252fb2c.png)
転送するファイルを選択します。
![2016-01-11_084602.jpg](https://qiita-image-store.s3.amazonaws.com/0/95309/db3e0911-c7cf-55d2-c5a5-bf63e131fa23.jpeg)
![2016-01-11_084626.jpg](https://qiita-image-store.s3.amazonaws.com/0/95309/bb82d1ca-5697-2b9d-5280-618d2d631a18.jpeg)
Fromの欄に転送するファイルが選択されていることを確認します。
Toの欄に送り先のディレクトリを入力します。
Sendを選択して送ります。
![2016-01-11_084702.jpg](https://qiita-image-store.s3.amazonaws.com/0/95309/5859eb94-4522-1ec9-af9b-7bf685e736b0.jpeg)
###MACの場合
下記のコマンドを実行します。
```$ scp -i 秘密鍵のパス 送信するファイルのパス ユーザ名@該当インスタンスのパブリックIPアドレス:ファイルを配置するパス```
例:```$ scp -i /Desktop/MaiKAWAKAMI.pem ec2-user@50.201.20.xxx:/tmp/work```
ファイルの転送先をtmpにしていますが、他の場所に置くことも可能です。
etcに置いて間違ってもpythonを消して、おっpythonがなくなってしまった等ということがないように注意してください。
![2016-01-11_104134.jpg](https://qiita-image-store.s3.amazonaws.com/0/95309/cd8c9ff9-0db3-738b-c40e-aca8dba60104.jpeg)

![2016-01-11_104134 - コピー.jpg](https://qiita-image-store.s3.amazonaws.com/0/95309/27b0ce5c-ec13-83e0-cd95-6ddee7512efa.jpeg)
naming | API > 考察 > { StringReplace() | IncSecond() } | { SecondsBetween() | SecondSpan() } > まぎらわしい

## StringReplace()とIncSecond()

C++ BuilderでStringReplace()をいつもReplaceString()と思ってしまう。

IncSecond()という関数があり、こちらは[動詞]＋[名詞]の組み合わせ
一方で、StringReplace()は[名詞]+[動詞]の組み合わせ。

本当はReplaceString()という関数名が望ましい。

## SecondsBetween()とSecondSpan()

この２つは

- 片方は複数形 > SecondsBetween()
- もう一方は単数形 > SecondSpan()

入力補完があるので何とかなるが、紛らわしい。

また、上記は[名詞]始まり。[動詞]始まりの関数と異なる命名規則。

## 関数名の考察

自分が実装を進めるものについては上記のようにならないようにルールをきちんとしておくことが望ましい。

APIは特に使い始めると容易に変更できない（ラッパーを作るのも可能だが）ので、きちんとした設計は重要。
c++ builder XE4, 10.2 Tokyo | datetime > 指定のhour, minで日時を書き換える / sec, msecは0にする / 書き換え後の日時が元の日時より古い場合は1日足す

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

### やりたいこと

- ある日時情報を指定のhour, minで書き換える
- sec, msecは0にする
- 書き換えて日時が元の日時より過去の場合は次の日にする


```Unit1.cpp
static TDateTime __fastcall getDateTime_overrideHourMin(TDateTime nowdt, int hour, int min)
{
	Word yyyy, mm, dd, hh, nn, ss;
	Word dmymsec;

	DecodeDateTime(nowdt, yyyy, mm, dd, hh, nn, ss, dmymsec);

	TDateTime resdt;
	resdt = EncodeDateTime(yyyy, mm, dd, hour, min, /* sec=*/0, /* msec=*/0);

	if (resdt < nowdt) {
		resdt = IncDay(resdt, 1);
	}

	return resdt;
}
```

### 備考

- こういう「書き換え」の関数名文字として override でいいのだろうか? Star TrekのCommand overrideなどから思いついた
- StringReplace()があるのでreplaceを使うほうが検索しやすいかもしれない
- 「過去だったら１日足す」という処理は関数内で別の処理をすることになり、関数の再利用性が悪いかもしれない
【CSS】-moz-opacityとfirefox


```css
a {
	-moz-opacity: 0.5;
	opacity: 0.5;
}

```
##環境
firefox 43.0.4

##解説
不透明度を設定するときに、firefoxでは-moz-opacityを使うって認識でいたが、firefoxの開発ツールのwebコンソールでは次のようなメッセージが出る。
[opacity][1]によると-moz-opacityはGecko 1.9.1 (Firefox 3.5) 以降では、-moz-opacity のサポートをやめてしまっているので、opacityを使用せよと書いてあるので、-moz-opacityはもう設定しなくていいみたい。

```text

不明なプロパティ '-moz-opacity' が使用されています。  このスタイル宣言は無視されました。

```

##参考文献
[opacity][1]
[CSSで透明度／透過度（opacity）の指定をする方法][2]

[1]:https://developer.mozilla.org/ja/docs/Web/CSS/opacity
[2]:http://black-flag.net/css/20110513-3045.html
それ本当に並列処理になってる？

# はじめに

PHPからシェルコマンドを利用する際、`&`をつけるだけでは並列実行にならない場合があるのでメモしておきます。

- `exec` `shell_exec` `system`は同じ特徴を持つものとして考えて、`exec`のみを用いて検証します。
- `popen` `proc_open`は同じ特徴を持つものとして考えて、`popen`のみを用いて検証します。
- `>&2` `>/dev/null`は同じ特徴を持つものとして考えて、`>&2`のみを用いて検証します。

今回はOSX環境を用います。Linux環境でもおそらく同様ですが、Windows環境では大きく結果が変わることが予想されるので、環境を用意出来る方は検証していただけると助かります。

# 実験

以下に組み合わせ条件を示します。`for`文の中で3,4回程度繰り返し実行し、かかった合計時間で並列実行されたかを判定します。

- `exec`を使うか？`popen`を使うか？
- `&`をつけるか？つけないか？
- `>&2`をつけるか？つけないか？

# 結果

## 並列実行された

```php:A
exec('php -r "sleep(1);" >&2 &');
```

```php:B
popen('php -r "sleep(1);" &', 'rb');
```

```php:C
popen('php -r "sleep(1);" >&2 &', 'rb');
```

## 並列実行されなかった

```php:D
exec('php -r "sleep(1);"');
```

```php:E
exec('php -r "sleep(1);" &');
```

```php:F
exec('php -r "sleep(1);" >&2');
```

```php:G
popen('php -r "sleep(1);"', 'rb');
```

```php:H
popen('php -r "sleep(1);" >&2', 'rb');
```

# 考察

どうですか？`E`が並列実行されないのは意外じゃないでしょうか？尤も、`E`のようなコードを書いて並列実行を謳っているようなQiita記事を見かけることが何度かあったので、今回の投稿をさせていただいた、というところです。

なお`B`に関しても、バッファが消化されずに溜まり続けるという問題がありそうです。`A`か`C`、しいて言えば`A`が一番無難な書き方でしょう。逆に結果の読み出しが必要になる場合は`B`も有効な選択肢になってくると言えそうです、この場合は`popen`ではなく`proc_open`必須になりますが…
c++ builder XE4, 10.2 Tokyo > datetime > 2つの日時の秒の差分 > SecondsBetween() / SecondSpan() > 両方とも0以上の値になる

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

### やりたいこと

- 2つの日時を比較する (dt1, dt2)
- (dt2 >= dt1) && (dt2 < (dt1 + 10)) の時にフラグを立てる

使う関数として以下の２つを調べた

- SecondsBetween()
- SecondSpan()

### コード

```Unit1.cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{

	TDateTime dt1 = VarToDateTime("2016/01/11 09:00:00");
	TDateTime dt2 = VarToDateTime("2016/01/11 09:00:10");

	// 1.
	__int64 ibtw;

	ibtw = SecondsBetween(dt1, dt2);
	String msg28 = IntToStr((int)ibtw);
	OutputDebugString(msg28.c_str());

	ibtw = SecondsBetween(dt2, dt1);
	String msg31 = IntToStr((int)ibtw);
	OutputDebugString(msg28.c_str());

	// 2.
	double dbtw;

	dbtw = SecondSpan(dt1, dt2);
	String msg37 = FloatToStr(dbtw);
	OutputDebugString(msg37.c_str());

	dbtw = SecondSpan(dt2, dt1);
	String msg44 = FloatToStr(dbtw);
	OutputDebugString(msg44.c_str());
}
```

```txt:結果
デバッグ出力: 10 プロセス Project1.exe (3404)
デバッグ出力: 10 プロセス Project1.exe (3404)
デバッグ出力: 9.99999982304871 プロセス Project1.exe (3404)
デバッグ出力: 9.99999982304871 プロセス Project1.exe (3404)
```

上記関数使用では２つの日時の差分は常に０以上となる。

...

これらの関数を使わずに、IncSecond(dt1, 10)した値で比較するほうがよさそうだ。
MySqlがstartできない

##現象
<img width="666" alt="スクリーンショット 2016-01-11 8.59.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/56423/f3791e28-25b6-807b-2dcf-e087e6c2fe8f.png">
急にMySQLが動かなくて焦ったの備忘録。
※キャプチャを撮り忘れたのですが、ここの
```
warning the user/local/mysql/data directory is not owned by the 'mysql' or '_mysql' user
```
のようなメッセージが表示されていました。

##原因
user/mysql/dataのディレクトリがMySQL userによって所有されていない時の警告。
要はpermission errみたい。なぜこれが急に起きたかは不明。。。

##対応
```
sudo chown -RL root:mysql /usr/local/mysql
sudo chown -RL mysql:mysql /usr/local/mysql/data
sudo /usr/local/mysql/support-files/mysql.server start
```

##参考
http://stackoverflow.com/questions/5527676/warning-the-user-local-mysql-data-directory-is-not-owned-by-the-mysql-user
ありがとうございます。 m( _ _ )m
正しいソースでもコンパイルエラーになるときの対処法

#この記事でお話しすること
1. ソースを正しく書いていてもコンパイルエラーになる原因を説明します。
2. コンパイルエラーさせない方法を説明します。

今回は、私がさっきまで本気で困ったことについてTipsとして残しておきます。なお、私はCygwinを使ってコンパイルしていますので、Cygwin以外のソフトウェアでは挙動が違う可能性があります。

#1. コンパイルエラーになる原因
正しく書いていてもエラーになる原因として、文字コードが挙げられます。gccやg++のデフォルトの文字コードはUTF-8です。そこにSJISなどで作られたソースコードをコンパイルさせようとすると、日本語が入ったプログラムでエラーが発生します。

実際、私もSJISでソースコードを書いていることに気付かずにコンパイラに通し、中括弧閉じ”}”をつけているにも関わらず「つけ忘れてるぞ！」と何回も言われて気が滅入っていました。路頭に迷っている方は、一度文字コードをご確認ください。

#2. コンパイルエラーさせない方法
先ほど述べたように、「コンパイラとソースコードの文字コードが対応していない」ゆえに、コンパイルエラーは発生していました。ですので、これを解消させる方法は次が考えられます。

1. ソースコードの文字コードを変更する
2. コンパイラの文字コードを変更する

1については容易に行えます。たいてい「名前を付けて保存」をするときに文字コードが変更できるようになっているはずです。(画像はサクラエディタ。「文字コードセット」で変更できます)

![tumblr_inline_o02p0ebUCw1t83x5s_1280.png](https://qiita-image-store.s3.amazonaws.com/0/108921/85763b4e-b1c3-b2c4-0190-f2f8b591c692.png)

2は少々面倒です。以下のサイトを参照すればわかるのですが、コンパイルオプションで文字コードを変更することができます。 [MinGW gccでSJIS文字を扱う方法 - はけの徒然日記](http://d.hatena.ne.jp/hake/20120505/p1)

いちいちこのオプションを設定するのは面倒ですし、かといって毎回設定しないように設定するのも面倒です。おとなしくUTF-8でソースコードを書いたほうがいいだろう、というのが私の所感です。

#3. まとめ
1. コードを確認しても間違ってないのにコンパイラから言い掛かりをつけられる → コードの文字コードをいったん確認すべし

2. ソースコードの文字コードを変えるほうがいろいろ楽
文字列をscanf関数で扱うとき

当記事をご覧いただきありがとうございます。
昨年末よりプログラミングを本格的に始めた自分の備忘録的な感じで書きます。少しでも他の人の助けにもなるようわかりやすく記述していきます。間違いがあればぜひコメントお願いします。
***
#この記事でお話しすること 
1. scanfの概要について説明します。
2. scanf関数で、文字列(%s)のときに”&”が不要である理由を説明します。

#1. scanfの概要
scanfとは、C言語を学ぶ上で誰もがはじめに通る重要な関数で、”ユーザーに文字や数値を入力させる関数”になります。基本的な書き方については他のページに任せます。

たとえば、次のコードではユーザーに整数の入力を促し、入力された整数を返します。

```c:scanf_1.c
#include <stdio.h>
int main(void) {
    int n;
    printf("整数nを入力してください\n");
    scanf("%d",&n);

    printf("入力された整数は%dです。\n",n);
    return 0;
}
```

さて、今は整数を扱っているので変換指定が”%d”になっていて、引数nの前に”&”をつけていますね。

文字列を入力させる場合は、変換指定を”%s”にします。しかし、引数nの前に”&”はつけません。これは何故なのでしょうか？

#2. 文字列のscanfで”&”が要らない理由

これを考えるために、まずそもそも”&”の役割とは何なのかを見ていきましょう。

ポインタをご存知の人なら理解している話だと思いますが、”&”はアドレス演算子です。変数の前に”&”をつけることによって、変数の値が格納されているメモリのアドレスを知ることができます。

![tumblr_inline_nzji3wI8W21t83x5s_540.png](https://qiita-image-store.s3.amazonaws.com/0/108921/274a26b3-7933-deb1-4d46-3ae44e7a77a8.png)

たとえば、先ほどのコードで「13」と入力した場合、もちろん変数nには13が格納されます。「では、13が格納されているアドレス(場所)はどこでしょうか？」という問いに答えてくれるのがアドレス演算子、ということになります。(画像のメモリ番地は、簡単にするために3桁の数字にしています)

scanfで値を格納したいときに、変数の名前を知ってもうれしくありません。知りたいのは**格納すべきアドレスの場所**なのです。なので、scanfでは&が必要になるのですね。

では、”%s”のときに”&”がいらない理由を説明します。

文字列は配列の形をしています。これを示すために以下のコードを用意しました。

```c:scanf_2.c
#include <stdio.h>
int main(void) {
    char text[50];
    printf("文字列を入力してください\n");
    scanf("%s",text);
     
    printf("入力された文字列の先頭文字は%cです",text[0]);
    return 0;
}
```

入力した文字列の先頭文字(text[0])を返すコードです。先ほどと同じように対応させましょう。変数text[0]には先頭文字が格納されています。では、これが格納されているアドレスはどう表せばよいでしょうか？

&text[0]でも正解なのですが、実はこの場合は別解があって、しかもそれが非常に重要なのです…。

実は**text[0]のアドレスはtextが指し示している**のです！

…ん？意味わかんないって？つまりこういうことっすよ！

![tumblr_inline_nzji3wdyqQ1t83x5s_540.png](https://qiita-image-store.s3.amazonaws.com/0/108921/3c3e9f4e-ecb2-c85a-fd62-e323d8a144cc.png)

**文字列の配列名は、先頭文字のアドレスを指します。**この性質があるから、”%s”を指定したときは”&”が不要なのですね。また、画像の中でアスタリスクをしれっと使ってますが、これは「**間接演算子**」と呼ばれるもので、アドレスを指定してその中身を変数として使うための演算子です。要は、アドレス演算子の逆です。

この本質を理解していると、次のコードも成立することがわかります。

```c:scanf_3.c
#include <stdio.h>
int main(void) {
    char text[50];
    printf("文字列を入力してください\n");
    scanf("%s",text);
     
    printf("入力された文字列の先頭文字は%cです",*text);
    return 0;
}
```

printfのところで、間接演算子を使用して先頭文字を呼び出しています。これも先ほどのコードと同じ結果が得られます(どちらのコードも日本語を入力するとバグります！)

#3. まとめ
1. scanfではアドレスを渡す必要があるので、通常”&”が必要になる
2. 文字列をscanfで扱う場合、配列名が先頭文字のアドレスを指し示しているので、”&”は不要である

間違い指摘や意見大募集です。それでは。
Zybo > 開発環境 > 案 > 処理が終わったら通知する仕組み

[編集中]

Vivadoを使い始めているが処理が十数分と長く、いつ終わるかわからない処理に対して、処理終了後いかに早く知ることをできるようにするのか。

処理終了後に通知する仕組みがほしいと思う。


```txt:動作環境
- 27インチモニタ 1台 (以下で共用)
  + FPGA開発用PCのモニタとして
  + MacBook Air 13インチの外部モニタとして
- ESP8266
- Raspberry Pi (RPi)
```

MacBook Airの画面を27インチモニタで表示している間はFPGA開発用PCの画面は見えていない。


やりたいこと

- Vivadoの各処理が終わった段階で通知する
  - Automatically Update of project
  - Generate Block Design
  - Run Synthesis
  - Run Implementation
  - Generate Bitstream

- 通知先OS
  - Mac OS X 10.8.5
  - Windows
  - (Androidスマホ)
  - ESP8266 や RPi
  
- 通知先候補
  - mail
  - slack (使ったことない)
  - twitter (未登録)
  - UDP接続の端末 (ESP8266, RPi)
  - 他の何か

twitterを使う場合、完全にFPGA開発用にして他の余計な情報が入らないようにしたい。


- 通知の仕方は以下のいずれがいいのか
  - dropboxの更新通知のように短時間で消えるもの
  - アプリを開くと通知が見えるもの (通知の表示・非表示をユーザが制御)
  - 音や光で知らせる (ESP8266, RPi)
技術英語 > You can rent a bike [on-site] / in-situ

@ LOE > September 28, 2012

http://loe.org/shows/shows.html?programID=12-P13-00039
> You can rent a bike <font color=red>on-site</font>

<hr>
関連して思い出したのは on-site registration

[google画像](https://www.google.co.jp/search?q=on-site+registration&espv=2&biw=1109&bih=944&tbm=isch&tbo=u&source=univ&sa=X&ved=0ahUKEwi-6uD57ZbKAhUMkJQKHUoxArAQsAQIIw&dpr=1)

<hr>
in-situをWikipedia(English)で見ると

> In situ (/ɪn ˈsɪtjuː/ or /ɪn ˈsaɪtʃuː/; often not italicized in English)[1][2][3] is a Latin phrase that translates literally to <font color=red>"on site"</font>[4] or "in position".[5]

in-situとon-siteを同じもの(that translates literally to)として考えたことはなかった。
MacBookと英語

初投稿です。初投稿でプログラムと関係ないことを書きます。

さて、ベーシックな英語は覚えたけど、Hacker Newsなどに掲載されているブログ内の面倒くさい言い回しや単語の意味や発音を効率良く情報収集する方法が自分なりに確率されて良さそうなので紹介します。初学者向けですね。

環境: Mac OS X EL Capitan v10.11.2 
必要なのは**Mac**のみです。他は何も入りません。


```
これを書いている間に、この記事と同等以上の内容が以下の記事で書いてあったのでリンクを置いて起きます。
```
[英語で情報収集するために5年間悪戦苦闘してきた僕の読解手順とオススメWEBサービスやアプリ色々](http://webya.opdsgn.com/gatherinformation/howtoreadenglisharticl/)

# Shortcut Key を設定して Text to Speech 呼び出し

ブログを閲覧していて、しばしば英単語の発音が分からない時があります。
その際今まではテキストをコピーCUI経由でsayコマンドに。。。なんてことをしていたのですが幾分面倒くさい。
理想としてはカーソル選択後ワンアクションで読み上げてもらいたいものです。

![テキスト読み上げ](https://dl.dropboxusercontent.com/spa/ohj2tplmz3dn81a/b9cy54xh.png "テキスト読み上げ")

上はテキスト選択した状態です。この際ワンアクションで読み上げて貰いたい。

![Text To Speech](https://dl.dropboxusercontent.com/spa/ohj2tplmz3dn81a/6pc2rokr.png)

これはワンアクションで読み上げを行う設定内容です。Text to Speechの設定画面から読み上げShortcut Keyを`Cmd + Ctrl + S`に設定しています。
理由は、Mac内蔵辞書呼び出しのShortcut Keyが`Cmd + Ctrl + D`だからです。本当に私は面倒くさがりなんです。

それと、実際に呼び出して貰うと分かるのですが、sayコマンドのwrapperのようです(CUI, GUIどちらがwrapperなのかよくわかっていませんが)

# 分からない単語を辞書検索

これはお馴染みMac内蔵辞書を使います。`Cmd + Ctrl + D`で呼び出します。

![Dictionally](https://dl.dropboxusercontent.com/spa/ohj2tplmz3dn81a/vqhfw34i.png)

# Vocabulary

ボキャブラリーに関しては未だ解決策がない状態です。そもそも全く知らない語彙をテキスト選択する事は難しいのではないのでしょうか。それかページ毎に全テキストを収集+マッチングなんて荒業を誰が許すのでしょうか。
何か良さそうなツールを知っている方がいたら教えてもらいたいです。切実に。

本当に簡単にはなりますが、以上です。
link_to メソッド+ icon のhaml化 - haml化メモ

#link_toメソッド + icon をhaml化してみた
```lang:元のhogehoge.html.erb
<div class="btn-group" style="margin-left:10px; ">
<%= link_to new_user_registration_path, class: "btn btn-dark btn-sm" do %>
    <i class="fa fa-user" style="padding-right: 10px"></i>会員登録
<% end %>
</div>
```
```lang:生成されたhtml.haml
.btn-group{:style => "margin-left:10px; "}
  = link_to new_user_registration_path, class: "btn btn-dark btn-sm" do
    %i.fa.fa-user{:style => "padding-right: 10px"}>
    会員登録
```
***
erb=>hamlは下記を参考にさせていただいています。
http://qiita.com/m_doi/items/1f01fd2b1a52c2c43f1f
リレーションを安全側に倒してみる


現在、自分が関わっているサービスの開発中に試してていることについて簡単に紹介します。
作っているものはユーザーが記事を投稿するいわゆるCMS系のサービスです。

よく見るこんなモデル
---

ユーザーとそのユーザーが書いた記事として以下のようなモデルがあります。

```ruby
 class User < ActiveRecord::Base
   has_many :posts
 end

 class Post < ActiveRecord::Base
   belongs_to :user
 end
```

あるユーザーの記事を表示する際には `@user.posts` でアクセスすることになります。
ここまではよくある話。

記事に公開状態を追加する
---

要件として、記事に公開/非公開状態を持たせるという話が出てきました。

```diff
 class Post < ActiveRecord::Base
   belongs_to :user
+  enum status: { open: 0, close: 1 }
 end
```

この変更により先程の `@user.posts` は公開/非公開の記事が混在するようになります。
公開状態の記事だけを取るためには、以下のようにpostsに対して状態を明示するかopenの記事だけを取得するリレーションを貼るとかが考えられます。

```ruby
@user.posts.open

# または
class User < ActiveRecord::Base
  has_many :posts
  has_many :open_posts, -> { self.open }, class_name: 'Post'
end
```

機能だけで言えばこの対応で十分ではあります。

間違えたときのリスクを考える
---

ここで呼び出しするリレーションを間違えることを考えます。

### postsを呼ぶべき箇所でopen_postsを呼ぶ

postsが呼ばれるのは自分の書いた記事一覧を見る、所謂マイページのような箇所です
ここでopen_postsを呼んでしまうと、 **自分で書いた非公開の記事が見つけられなくなる** ことになります。

### open_postsを呼ぶべき箇所でpostsを呼ぶ

open_postsが呼ばれるのは、たとえばあるユーザーの書いた記事一覧を見たいといった場合です。
ここでpostsを呼んでしまうと **非公開にしたはずの記事が他の人に見られる** という危険性があります。

この2つを考えると避けるべきは確実に後者でしょう。
そして、書き間違えやすいのも圧倒的に後者ではないでしょうか。 

書きやすいほうを安全にする
---

危険な挙動のほうがかきやすいのはいろいろ問題です。
そこで以下のように安全な書き方をしたほうがいいと考え採用しました。

```diff
 class User < ActiveRecord::Base
-   has_many :posts
-   has_many :open_posts, -> { self.open }, class_name: 'Post'
+   has_many :posts, -> { self.open }
+   has_many :all_posts, class_name: 'Post'
end
```

さらにいうと posts は編集画面に至る箇所ではなどでは使わないため、書き込みなどができる必要はありません。そこでreadonlyをつけることにしました。

```diff
 class User < ActiveRecord::Base
-  has_many :posts, -> { self.open }
+  has_many :posts, -> { self.open.readonly }
   has_many :all_posts, class_name: 'Post'
 end
```

ここまでで書きやすいものを安全側に倒すことができました!
正直やりすぎかな?とか逆にわかりづらくなってしまったかな?と思う部分もあるので、こうやったほうがいいよ!みたいなのがあったら教えてください!
Atomでmonokaiテーマ使いたい人向けのおすすめテーマと組み合わせ集（UI Theme + Syntax Theme）

AtomのUI ThemeとSyntax Themeには、数多くのmonokai向けテーマがあります。
その中でも特におすすめのmonokaiテーマおよびその組み合わせをご紹介します。

記事の構成は各項目のタイトルを「UI Theme名 + Syntax Theme名」とし、下にAtomのインストールコマンドを記載しています（もとから入っているものは省略）。

![スクリーンショット 2016-01-11 1.50.53.png](https://qiita-image-store.s3.amazonaws.com/0/90682/7ed9304d-9891-0d5f-9dc6-d78867a71570.png)

## One Dark + Monokai
![スクリーンショット 2016-01-11 1.18.28.png](https://qiita-image-store.s3.amazonaws.com/0/90682/53ffdaab-6181-4d96-f8f8-1eda3f2dcd4f.png)

一般的なMonokaiという感じで、かなりおすすめです。
画像では、One DarkのLayout ModeをCompactにしています。

```
$ apm install monokai
```

## Atom Material + Monokai
![スクリーンショット 2016-01-11 1.23.22.png](https://qiita-image-store.s3.amazonaws.com/0/90682/a86fa36a-398d-1c04-4497-82972104081e.png)

Material UI のUI Themeともわりと相性がいいです。
ただ、個人的にはMaterial UIが主張しすぎている気がするので使用していません。

```
$ apm install atom-material-ui
$ apm install monokai
```

## Seti + Monokai

![スクリーンショット 2016-01-11 1.30.12.png](https://qiita-image-store.s3.amazonaws.com/0/90682/8e605dbb-a86e-e063-8e05-2ef73f4bb918.png)

Seti UI との組み合わせです。コード部分がサイドバーと異なり、やや薄くなっているのが特徴的です。
色みをサイドバーとコード部分で変えたい方は、この組み合わせがおすすめです。


```
$ apm install seti-ui
$ apm install monokai
```

## Spacegray Monokai + Monokai

![スクリーンショット 2016-01-11 1.33.51.png](https://qiita-image-store.s3.amazonaws.com/0/90682/1e6e4ce2-bb23-91a2-9dde-b2cce2ecb431.png)

サイドバーとタブのあたりがうすめのグレーで、シンプルなUIです。
若干タブの境界がわかりにくいかも？

```
$ apm install spacegray-monokai-ui
$ apm install monokai
```

## One Dark + Atom Monokai Dark

![スクリーンショット 2016-01-11 1.40.26.png](https://qiita-image-store.s3.amazonaws.com/0/90682/c3049160-e4c4-8686-f6b3-e344a30cf614.png)

タブがすごい目立ちます。ただそれだけという感じ...

```
$ apm install atom-monokai-dark
```

## One Dark + Dark Monokai Batch

![スクリーンショット 2016-01-11 1.44.29.png](https://qiita-image-store.s3.amazonaws.com/0/90682/0b8949d8-39bd-b624-ab16-e3d4615a5418.png)

Dark Monokai Batchは少しクセのあるMonokaiテーマですが、これはこれで見やすいと思ったので掲載しておきます。
背景色が濃い黒色なのがいい感じです。


```
$ apm install dark-monokai-batch
```

## さいごに

どうでしたか？実は他にもmonokaiテーマはあって、まだ試していないものや組み合わせもあるので今後試していきたいです。

ちなみに自分は「One Dark + Monokai」か「One Dark + Dark Monokai Batch」あたりをメインで使っていこうと思っています。

## 参考

> 
[Atom theme gallery](http://enrmarc.github.io/atom-theme-gallery/)
Rails4 で mysql2 gem を指定してるのに「Gem::LoadError Specified 'mysql2'」とでたら gem バージョンを下げると直るかも

※ 修正更新したが内容は 2016 年のものです。

## Gem::LoadError Specified 'mysql2' for database adapter, but the gem is not loaded.

Rails4 で MySQL を利用するとき
> Gem::LoadError
> Specified 'mysql2' for database adapter, but the gem is not loaded.
> Add `gem 'mysql2'` to your Gemfile

と出る場合 gem mysql2 のバージョンを下げると利用できるらしい。

[Gem::LoadError for mysql2 gem, but it's already in Gemfile | Stack Overflow](http://stackoverflow.com/questions/22932282/gemloaderror-for-mysql2-gem-but-its-already-in-gemfile)

上記回答コメントによると Rails 4.0.x, 4.1.x, 4.2.x で発生し gem mysql2 バージョン 0.3.x を利用すれば解決する。

なおバージョン 0.3 の現在の最新版は以下。
`gem 'mysql2', '~> 0.3.20'`
スクラム周りのリンク (ニャ)：Framework Links around scrum

見つけたら 足してくスタイル
説明的なメモも気が向いた時に書いてくスタイル

## 英語サイト

* [LeSS](http://less.works/less/framework/index.html) ぱっと見は、機械的にスクラムできないからそういうのの対処方法っぽい（最初の何行しか読んでないので正確ではありません）

下記２つの詳細は下記のQiitaのページをご参照ください

* [SAFe](http://www.scaledagileframework.com/)
* [DAD](http://www.disciplinedagiledelivery.com/)

## Qiita

[DAD(Disciplined Agile Delivery)概要](http://qiita.com/kenjihiranabe/items/a59aa4f1a9f9545abcc2) 説明といろいろなリンク（日本語サイト有り）があります
Windows 7上のOpenCV 2.4.11で猫の顔を検出してみた

![cat3.PNG](https://qiita-image-store.s3.amazonaws.com/0/105738/d3b46c2b-df6c-d596-af03-16bb4477191a.png)

#環境
Windows 7 Home 64bit
OpenCV 2.4.11
Visual Studio 2013

#はじめに
顔検出に使用されるCascadeDetectorで猫の正面顔を検出してみた。
OpenCV 2.4系列では、主に人の部位の辞書が提供されていたが、OpenCV 3系列では猫の**正面顔**の辞書が３種類添付されている。

##提供されている猫正面顔の辞書

+ haar特徴量 縦横のみ サイズ 24x24 [haarcascade_frontalcatface.xml]
(https://github.com/Itseez/opencv/blob/3.1.0/data/haarcascades/haarcascade_frontalcatface.xml)
+ haar特徴量 斜めを含む拡張版 サイズ 24x24 [haarcascade_frontalcatface_extended.xml](https://github.com/Itseez/opencv/blob/3.1.0/data/haarcascades/haarcascade_frontalcatface_extended.xml)
+ lbp特徴量 サイズ 24x24 [lbpcascade_frontalcatface.xml](https://github.com/Itseez/opencv/blob/3.1.0/data/lbpcascades/lbpcascade_frontalcatface.xml)

辞書は互換性があるので、3の辞書を2で使用することができる

##テストコード
OpenCV 2.4.11で提供されている[猫の画像](https://github.com/Itseez/opencv/blob/2.4.11/samples/c/cat.jpg)を使用し、３種類の辞書による検出結果を比較してみた。
検出時のデフォルトパラメータでは、誤検出が多かったので、若干調整している。
下記のコードは、haarcascade_frontalcatface.xmを使用する検出部のみである。画像の読み込みや、キー処理などは省略している。

```
	std::vector<cv::Rect> faces;
	cv::CascadeClassifier cascade;
	
	cascade.load("haarcascade_frontalcatface.xml");
	cascade.detectMultiScale(image, faces, 1.1, 4, 0, cv::Size(100, 100));

	cv::Mat disp = image.clone();
	int size = faces.size();
	for (int i = 0; i < size; i++) {
		cv::Rect r = faces.at(i);
		cv::rectangle(disp, r, cv::Scalar(255, 0, 0), 2);
	}
	cv::imshow("haarcascade_frontalcatface", disp);
```

###haarcascade_frontalcatface.xm 辞書での検出結果
![cat1.PNG](https://qiita-image-store.s3.amazonaws.com/0/105738/3a3e9826-ac61-a299-7c37-b16acd1ca7c7.png)

###haarcascade_frontalcatface_extended.xml 辞書での検出結果
![cat2.PNG](https://qiita-image-store.s3.amazonaws.com/0/105738/7d0cd2ea-a0f4-0b9c-66e3-c37d242ee533.png)

###lbpcascade_frontalcatface.xml 辞書での検出結果
冒頭の画像である。

#感想
人の顔の辞書の検出結果と比較すると誤検出が多いので、パラメータの調整をしないと所望の結果は得られない。
ブラーシェーダ作ってみた

UnityのShaderLabでブラーシェーダ作ってみました。

ブラー(Blur)とは霞んで見える、ぼんやりと見えるなどを意味します。遠くのものやフォーカス(焦点)を当てていないオブジェクトの描画等で役立つと思います。

このブラーはエフェクトの基本であり、かなり応用が効く技術だと思っています。
例えば特殊な演出で、ぼんやりとオブジェクトを光らせたりするエフェクトはブラーシェーダと発光シェーダを組み合わせることで実装できます。

## 効果

![noeffect.png](https://qiita-image-store.s3.amazonaws.com/0/108809/8a1c2388-b588-6f15-4c70-6ea2fc3c4906.png)

これが

![effect.png](https://qiita-image-store.s3.amazonaws.com/0/108809/ca3ab176-8697-c7e4-8a46-3c7e8f698b53.png)

こんな感じになります。ブラーの強度はパラメータで指定が可能です。

## 実装

シェーダは以下のようになります。

```:BlurVF.shader
Shader "Custom/BlurVF" {
	Properties{
		_MainTex("Texture", 2D) = "white" {}
		_Diff("Diff", Range(0, 1)) = 0.1
	}

	SubShader{
		Pass{
			CGPROGRAM
			#pragma fragment frag
			#pragma vertex vert_img
			#include "UnityCG.cginc"
			sampler2D _MainTex;
			float _Diff;

			float4 frag(v2f_img i) :COLOR{
				float4 col = tex2D(_MainTex, i.uv - _Diff) + tex2D(_MainTex, i.uv + _Diff);
				return col / 2;
			}
			ENDCG
		}
	}
}
```

この実装では斜め右下方向分ズレるような効果が期待できます。
【Javascript】入れ子とonclickメソッド

```html:001.html

<!DOCTYPE HTML>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <title>入れ子とonclickメソッド</title>
    <style type="text/css">

    </style>
</head>

<body>

    <h3>JavaScript</h3>

    <ul id="menu">
        <li>配列</li>
        <li class="parent_1">関数
            <ul class="child_1">
                <li>Functionオブジェクト</li>
                <li class="parent_2">関数の呼び出し
                    <ul class="child_2">
                        <li><a href="#">メソッド呼び出しパターン</a></li>
                    </ul>
                    </li>
            </ul>
        </li>
    </ul>
    <script type="text/javascript">
        window.onload = function() {

            var element = document.getElementById("menu").getElementsByTagName("ul");
            var nm = 0;

            var show = function(d) {
                console.log("nm=" + nm + ", d=" + d);
                nm += 1;
            }

            for (var i = 0; i < element.length; i += 1) {
                var h = element[i].parentNode;
                h.onclick = show.bind(null, i);
            }

        }
    </script>
</body>

</html>

```

##解説
ulタグの親要素をクリックするとshow関数が実行するコードである。

+ 文字列 「配列」をクリックする
配列をクリックしてもshow関数の実行条件を満たさないので実行されない

+ 文字列「関数」をクリックする
show関数の実行条件を満たすので実行される。

```text:結果

nm=0, d=0

```

+ 文字列「Functionオブジェクト」をクリックする
show関数の実行条件を満たすので実行される。

```text:結果

nm=1, d=0

```

+ 文字列「関数の呼び出し」をクリックする

文字列「関数の呼び出し」はul class="child_1"の親要素でかつul class="child_2"の親要素であるため実行結果は次のようになる。

```text:結果

nm=2, d=1
nm=3, d=0

```

+ 文字列「メソッド呼び出しパターン」をクリックする

文字列「メソッド呼び出しパターン」はul class="child_1"の親要素でかつul class="child_2"の親要素であるため実行結果は次のようになる。

```text:結果

nm=4, d=1
nm=5, d=0

```

## あとがき

htmlのタグをイジる系のコードってタグが入れ子になってるとややこしいと思う。
入れ子に注意しよう。
Promise ラッパーを NPM に登録してみた。

**追記**: ジェネレーターの勉強してる時、[tj/node-thunkify](https://github.com/tj/node-thunkify) を見つけたけど、当然ながら、こっちの方がよっぽど洗練されててまともな実装です。thunkify を激しくお勧めしておきます。余裕できたら、thunkify に寄せてみたい。

世間では [MSIE 8,9,10 の終焉](https://www.microsoft.com/en-us/WindowsForBusiness/End-of-IE-support) で賑わっていますが、最近まで MSIE 6 相当の IEMobile や BlackBerry OS 5 向けの対応などをやっていまして、Promise には大変お世話になりました。

FRP をガリガリやりたいなーと思う反面、どうしても旧世代端末のハナシが出た時は Promise は手堅いので、一段落したところで、モジュール化して npm に登録してみました。

- [プロミス処理のラッパーをつくる。 - Qiita](http://qiita.com/japboy/items/74fa0cb93baa6466e505)
- [非同期の再試行をシンプルに。 - Qiita](http://qiita.com/japboy/items/a9637c020f4a96798a8c)

主に以前書いた上記記事を汎用化したモノで、**Promisr** と命名しました:

- [promisr](https://www.npmjs.com/package/promisr) (npm)
- [japboy/promisr](https://github.com/japboy/promisr) (GitHub)

# tl;dr

[プロミス処理のラッパーをつくる。 - Qiita](http://qiita.com/japboy/items/74fa0cb93baa6466e505) で書いた `promisify` という関数で、jQuery の Deferred オブジェクトをコードのあちこちに書き散らかす状態を脱しました。モジュール化に当たっては、[jQuery Deferred](https://api.jquery.com/category/deferred-object/) だろうが [Q](http://documentup.com/kriskowal/q/) だろうが [ES2015 の Promise](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise) だろうが、同じ `promisify` 関数を元に、Promise の実装をできるようにしました。

```js
var promisr = new Promisr(window.Promise || window.Q || window.jQuery);
var done = promisr.promisify(function (resolve, reject, value) {
  if (value) return resolve(value);
  reject(value);
});
```

基本は上記の通りです。`Promisr` をインスタンス化する時の引数に `Promise`, `Q`, `jQuery` のどれかを渡す事で、指定のライブラリを元に `promisify` 関数をつくります。

あとはこの `promisify` の実装を元に、自分がよく使う Promise 処理のショートハンドをメソッドで生やしています。

詳しくは雑な API ドキュメントに列挙しています:

- [promisr/api.md at master · japboy/promisr](https://github.com/japboy/promisr/blob/master/doc/api.md)

Node.js で使う場合は;

```
npm install --save promisr
```

```js
var Promisr = require('promisr');
```

ブラウザで使う場合は;

```html
<script src="https://npmcdn.com/promisr@0.3.1/dist/promisr.min.js"></script>
```

```js
var Promisr = window.Promisr;
```

みたいな感じで呼び出せます。

これで Promise 必要になった時に、古いソースコード漁らなくてよくなりました! うれしい。

心置きなく FRP の勉強に移行できそう。
slice か判定する

```go
foo.([]interface{})
```
だとうまくキャストできないので.

今のところ reflect を使う以外なさそうにみえる.

```go
import reflect

func mergeStruct(curr, next interface{}) interface{} {
	cVal := reflect.ValueOf(curr)
	nVal := reflect.ValueOf(next)

	if cVal.Kind() == reflect.Slice && nVal.Kind() == reflect.Slice {
		return mergeSlice(cVal, nVal)
	}
}
```

interface{} を interface{} のまま使うなら, reflect.AppendSlice は使えない.

```go
func mergeSlice(curr, next reflect.Value) []interface{} {
	res := make([]interface{}, curr.Len()+next.Len())

	for i := 0; i < curr.Len(); i++ {
		res[i] = curr.Index(i).Interface()
	}

	for i := 0; i < next.Len(); i++ {
		res[i+curr.Len()] = next.Index(i).Interface()
	}

	return res
}
```

参考

https://golang.org/pkg/reflect/
https://code.google.com/p/gorilla/source/browse/exp/schema/flattener.go?r=89399a125333592d8ad1105a3994ee956ee08c63
Varnishを触ってみた時のメモ


# 環境
Centos6.7
Varnish 4

# install

```sh
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/jemalloc-3.6.0-1.el6.x86_64.rpm
rpm -ivh jemalloc-3.6.0-1.el6.x86_64.rpm
rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el6.rpm
yum install varnish
```

# 設定ファイル

## /etc/varnish/default.vcl

キャッシュのルールを記述得するファイル

## cat /etc/sysconfig/varnish

Varnishを起動するportとか記述するファイル

## キャッシュルールのサンプル

```vcl:/etc/varnish/default.vcl

vcl 4.0;

# キャッシュクリア用のリクエストを受け付けるipを列挙
# *のところを適当に環境に合わせて
acl purge {
 "localhost";
 "*.*.*.*"/*;
}

# プロキシするアプリケーションのホストとポート
backend default {
    .host = "127.0.0.1";
    .port = "3000";
}

# BANメソッドでリクエストした際に、URLを正規表現にキャッシュをBANリストに登録することでキャッシュクリアできるようにする
sub vcl_recv {
 if (req.method == "BAN") {
   if (!client.ip ~ purge) {
     return(synth(405,"Not allowed."));
   }
   ban("req.http.host == " + req.http.host + " && req.url ~ " + req.url);
   return(synth(200, "Ban added"));
 }
}

# リクエストをキャッシュする際のハッシュを生成する。
# 今回はURLとHTTPリクエストヘッダー『X-Cache-Key』をもとにキャッシュキーを発行する
sub vcl_hash {
  hash_data(req.url);
  hash_data(req.http.X-Cache-Key);
}

# キャッシュのttlを適当な時間で設定する
# レスポンスヘッダー『X-No-Cache』が設定されている場合はキャッシュさせないようにする
sub vcl_backend_response {
    set beresp.ttl = 3600s;
    if (beresp.http.X-No-Cache) {
        set beresp.uncacheable = true;
        return (deliver);
    }
}

# キャッシュにヒットしたか否かをレスポンスヘッダーに含めるようにする
sub vcl_deliver {
 if (obj.hits > 0) {
  set resp.http.X-Cache = "HIT";
 } else {
  set resp.http.X-Cache = "MISS";
 }
}

```

# サービスの起動・停止・再起動

```
/etc/init.d/varnish start
/etc/init.d/varnish stop
/etc/init.d/varnish restart
```

# 動作確認プログラム

## サーバーアプリケーション

```js:index.js
var express = require('express');
var app = express();

app.get('/', function (req, res) {
  console.log('Hello World!');
  res.send('Hello World!');
});
app.get('/a', function (req, res) {
  console.log('Hello World!');
  res.send('Hello World!');
});
app.get('/b', function (req, res) {
  console.log('Hello World!');
  res.send('Hello World!');
});
app.post('/', function (req, res) {
  console.log('Hello World!');
  res.send('Hello World!');
});
app.get('/no', function (req, res) {
  console.log('Hello World!');
  res.set({'X-No-Cache': 'true'});
  res.send('Hello World!');
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
})
```

## クライアント

```sh
# 2回目以降のリクエストはキャッシュにヒットする
curl -H "X-Cache-Key: hoge" http://localhost -i
curl -H "X-Cache-Key: hoge" http://localhost -i
curl -H "X-Cache-Key: hoge" http://localhost -i
```

```sh
# X-Cache-Keyを別々にしているのでそれぞれ違うキャッシュキーとして扱われる
curl -H "X-Cache-Key: hoge" http://localhost -i
curl -H "X-Cache-Key: fuga" http://localhost -i
curl -H "X-Cache-Key: piyo" http://localhost -i
```

```sh
# POSTはキャッシュされない
curl -X POST http://localhost -i
curl -X POST http://localhost -i
curl -X POST http://localhost -i
```

```sh
# GET /noはキャッシュされないようにアプリケーション側で制御されている
curl http://localhost/no -i
curl http://localhost/no -i
curl http://localhost/no -i
```

```sh
# BAN /* ですべてのキャッシュを削除することができる
curl        http://localhost/a -i
curl        http://localhost/b -i
curl -X BAN http://localhost/*
curl        http://localhost/a -i
curl        http://localhost/b -i
```
underscoreコードリーディング（unzip）


underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##unzipとは


###[underscorejs.orgのunzip](http://underscorejs.org/#unzip)

こんな説明。
>####_.unzip(*arrays) 
>The opposite of zip.
>Given a number of arrays, returns a series of new arrays, the first of which contains all of the first elements in the input arrays, the second of which contains all of the second elements, and so on.
>Use with apply to pass in an array of arrays.

```javascript

_.unzip([['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]])
=> ["moe", 30, true], ["larry", 40, false], ["curly", 50, false]

```
------------- 
zipの反対。

arraysを与えると新しい配列のシリーズを返します。
返される配列は、１つ目の配列はarraysで渡されたすべての配列の1つ目の要素で構成された配列になっていて、2つ目以降も同様です。


配列のまとまった配列を渡して使います。


###[underscore.unzip](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L586)
コード的にはこのあたり。

```javascript
  // Complement of _.zip. Unzip accepts an array of arrays and groups
  // each array's elements on shared indices
  _.unzip = function(array) {
    var length = array && _.max(array, getLength).length || 0;
    var result = Array(length);

    for (var index = 0; index < length; index++) {
      result[index] = _.pluck(array, index);
    }
    return result;
  };
```
arrayを引数に、arrayの中にネスト化されている配列を_.pluckを用いて同じindexのもの同士で分解する。
Flash HTML5 canvas でのライブラリからのインスタンス追加の注意点

# まえがき
ライブラリからのインスタンスの追加はFlashのとっても便利な機能。新しいメニューHTML5canvasでも同じようにお手軽に追加したいと思ったのですが、一癖あったのでまとめます。

# サンプル
## ライブラリ内のインスタンス
containerという名前を用意しました。
![スクリーンショット 2016-01-10 22.36.22.png](https://qiita-image-store.s3.amazonaws.com/0/70116/11715c89-5325-b345-eac9-d572331392bd.png)

## コードスニペット
「ライブラリからインスタンスを追加」を使います
![スクリーンショット 2016-01-10 22.37.47.png](https://qiita-image-store.s3.amazonaws.com/0/70116/cfc2f479-b352-d147-41f2-7c7aeb1025b5.png)

## 記述されるソース
<pre>
/* ライブラリからステージにインスタンスを追加
指定したムービークリップまたはボタンのライブラリシンボルのインスタンスをステージに追加します。

手順 :
Add "LibrarySymbol" as the linkage property of the symbol.
*/

//ライブラリから別のシンボルを追加する場合は、
//上記手順 2 の「クラス」フィールドと以下のコードに、別の名前を入力します。
var fl_MyInstance_3 = new lib.LibrarySymbol();
this.addChild(fl_MyInstance_3);
</pre>
上記のソースが追記されます。
上記のソースのうち手順に沿って以下のようにnewを書き換えます。
「new lib.LibrarySymbol();」→「new lib.container();」
しかし、まだ配置されません。なので、以下のように書き換えました。
「var fl_MyInstance_3」→「this.container1」
「this.addChild(fl_MyInstance_3);」→「this.addChild(this.container1);」
<pre>
this.container1 = new lib.container();
this.addChild(this.container1);
</pre>
ライブラリからインスタンスの追加をする事が出来ました。
![スクリーンショット 2016-01-10 22.44.02.png](https://qiita-image-store.s3.amazonaws.com/0/70116/5407a4aa-97a6-cf4e-aa13-fc5a5a7923d0.png)
addChild();でライブラリ内のインスタンスをそのまま配置。わたしは起点をライブラリに格納したインスタンスで指定するよりも、いろいろな使い方が出来るように起点は左上。デフォルトの状態で使用します。
よって、生成後にsetTransform()でパラメーターを指定します。
<pre>
this.container1 = new lib.container();
this.addChild(this.container1);
this.container1.setTransform(84, 112, 0.35, 0.35, 0, 0, 0, 240, 320);
</pre>
イメージ通りに配置できました。
![スクリーンショット 2016-01-10 23.18.09.png](https://qiita-image-store.s3.amazonaws.com/0/70116/1615f6c5-ab38-c060-d99b-647be488136e.png)

# まとめ
個人的に使い勝手に関して。スクリプトでアニメーションさせたいのでライブラリからインスタンス生成後、setTransformでパラメータをセットしてオブジェクトのパラメータを把握しておけるようにするのが扱いやすくするポイントだと思いました。
また、スニペットと自分の書いたスクリプトが上手く連携できていない時は、バッティングしている可能性や変数名の定義などがおかしい時があるので、パブリッシュで生成されたjavascriptをもう一度確認。

パブリッシュで生成されたjavascriptに全て書かれているので、問題があった時は想定している表示をどのように再現するスクリプトを生成させるかを念頭にflashのほうを修正してゆくのが良いと思います。