OmniAICreator/Qiita-1.07M huggingface dataset:
VisualStudioでもbits/stdc++.hでC++のヘッダファイルを一括インクルードしたい！

gccでは以下のように記述するとすべてのヘッダファイルがインクルードされます。

```cpp
#include <bits/stdc++.h>
```

競技プログラミング等では非常に便利なので重宝している方も多いと思いますが、今回はこれをVisualStudio(VC++)でもできるようにします。

といってもやり方は簡単で、ソースファイルのあるディレクトリにbitsという名前のディレクトリを作成し、その中に自作のstdc++.hを配置するだけです。

例えば自分の環境ではContestというプロジェクトで作業しているので、以下のようになりました。
`Visual Studio 2013\Projects\Contest\Contest\bits\stdc++.h`

インクルードするときは山括弧ではなく引用符で囲みます。

```cpp
#include "bits/stdc++.h"
```

stdc++.hの中身は https://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/api/a01040_source.html を参考にすると良いでしょう。

自分の環境では `#include <atomic>` と `#include <future>` があるとコンパイルエラーになったので、とりあえず競技プログラミングで使うことも無いので削除しました。
また、 `#ifdef` `#endif` はすべて削除してしまって良いでしょう。

以上です。
windows カレンダーガジェット

ガジェットが廃止なったようですが、windows 7はしばらく使用する予定なので作ってみました。

元記事：
http://web.loft-net.co.jp/lofttecs/windows_gadget_calendar/

webページを作る感じで出来るので試しにシンプルなカレンダーを作ってみました。

ソース（GitHub）：
https://github.com/lofttecs/simple-calendar-gadget

祝日の判定にosamu_takeuchi様のソースを使用させていただきました。

日本の休日を求める（休日判定）：
http://qiita.com/osamu_takeuchi/items/0623c8aceda43b57914c

ディレクトリを下記に入れると使用できます。

%USERPROFILE%\AppData\Local\Microsoft\Windows Sidebar\Gadgets
ファイルサーバ上に置いてある古くて大きいファイルを見つける（バッチとPowerShellでの比較）

#きっかけ
日次で古くて大きめなファイルをリストアップしたいと思い、はじめはバッチで書いていたのですが、
1. 作成したコードがけっこうな長さになってしまう
2. バッチの実行スピードが思ったよりも速くない

ということで比較のためにPowerShellでも同じ処理を書いてみました。

なかなか面白い結果が出たので内容を以下にまとめてみます。

#処理の概要
指定したディレクトリ（例ではN:\share配下）の中から、ファイルサイズが１０メガバイト以上かつ更新日が２年以上前のものをリストアップし、結果をテキストファイルに出力する[^1]

[^1]: さらにその背景を記述すると、ファイルサーバ上に今後はほぼ使わなさそうなファイル（過去のバグ調査で使ったデバッグログとか）を置いているグループの人たちに、自動で注意を出して、何日か経過すると自動的にzip圧縮するような仕組みを考えていました


#環境
Windows Server 2008R2
PowerShellのバージョンは2.0
処理対象のディレクトリはファイルサーバー上にあり、約1,000個のファイルが格納されています

#コード
```bat:listup.bat
@echo off

rem カッコ内でsetを遅延反映させるためのオプション
setlocal  ENABLEDELAYEDEXPANSION

rem 以降、遅延反映させたい変数には$hoge$のかわりに!hoge!と記述

set target_folder=N:\share

set YYYY=%date:~-10,4%
set MM=%date:~-5,2%
set DD=%date:~-2,2%
set /a YYYY=YYYY-2

rem 出力ファイル名（固定名＋現在日時.lst）
set output=%~dp0\files_bat_%time:~-11,2%%time:~-8,2%%time:~-5,2%.lst

FOR /F "usebackq delims=" %%F in (`dir /B /S %target_folder%\*.*`) do if %%~zF GTR 10000000 (

  set upd_time=%%~tF
  set minutes=!upd_time:~-5,2!
  set seconds=!upd_time:~-2,2!

  rem 更新日付の比較
  if "!upd_time!" GTR "%YYYY%/%MM%/%DD% !minutes!:!seconds!" (
    rem 新しいファイル
  ) else (
    rem 古いファイル
    echo %%F>> %output%
  )
)

```

```ps1:listup.ps1
$targetPath = "N:\share"

$scriptPath = Split-Path $script:myInvocation.MyCommand.path -parent

$output = $scriptPath\files_ps1_$time.lst

$time = Get-Date -Format "HHmmss"

$a = Get-ChildItem -recurse $targetPath
foreach($x in $a)
    {
        $y = ((Get-Date) - $x.LastWriteTime).Days
        if ($y -gt 730 -and $x.PsISContainer -ne $True -and $x.Length -gt 10000000)
            {echo $x.fullname | Out-File -filePath $output -Append -encoding Default}
    }

```

※ 厳密にいうと2年前（バッチの処理）と730日前（PowerShellの処理）は違うんじゃないすかと言われそうですが、はい、そのとおりです。。。ざっくり２年間前以前を抽出したかったのでこのようになっています。


#処理時間計測結果

||バッチ|PowerShell|
|:---:|:---:|:---:|
|一回目|15.95秒|2.02秒|
|二回目|15.85秒|2.04秒|
|三回目|16.20秒|2.06秒|


#考察
なぜこれほど実行時間に差が出たのか気になりました。
I/Oがバッチの方が多いのかな？？？と思ってtaskmgr.exeから調べてみましたが

||バッチ|PowerShell|
|:---:|:---:|:---:|
|I/O Read|953,600 byte|987,525 byte|
|I/O Write|13,802 byte|21,918 byte|

とほぼ同じくらい・・・
ふむ。

バッチの処理をあらためて見ると、変数に格納したり計算したりしているのでここらが足をひっぱっているのではないかと推測します。冗長なコード⇒それに伴う演算処理量アップな気がします。

とは言え、今回の場合は「ファイルサイズが大きくて古いファイルを見つけるコマンド」にピンポイントで該当するものがなく、「dirコマンド」結果を一個一個「for」の中で処理していますので、どストライクなコマンドがあれば、処理時間はあまり変わらないのではないかとも思います。


#今回の結論

| バッチ | PowerShell |
|:----:|:----:|
|コードがやや冗長|コードは簡素|
|処理が遅い|処理はまあまあ速い[^2]|

[^2]: PowerShellがver.1のときは最初の起動がくっそ遅かったので隔世の感があります
Processingでプレビュー画面が出ない

ProcessingのMacアプリをダウンロードしてRunしてもプレビュー画面が出てこない。

##processing-javaがない
processingのアプリでは普通のjavaではなくprocessing-javaを使っているらしい。
processing-javaがMacにインストールされているかターミナルから確認

```
$ which processing-java

```
やっぱりない

##processing-javaインストール
####Processingからインストール
`Processing > Tooles > Install "processing-java"`
####インストールされたか確認
```
$ which processing-java
/usr/bin/processing-java
```
インストールされているのを確認

####Processingアプリ再起動
Runすると無事プレビュー画面起動
javascriptでmvcでreactiveなコードを外部ライブラリ使わずガチ組みしてみた

#という訳でTypeScriptでReactiveなコード書いてみました。

細かい実装は下記を見ていただければと
https://github.com/ts020/reactive_template
詳しくは、readme.htmlをご覧ください。
ちなみに、仮想DOMは実装しんどかったので今回は見送りました。

##下記を重視して作ってみました
. Modelの値が変更されたときにviewに通知される事
. 通知にあわせて、自動的に再描画される事
. 値が変更されているプロパティに関係する対象だけが再描画される事
. Canvasやwebglでも使える事

##MVCです
###Controller
```lang:typescript
///<reference path="Model.ts" />
///<reference path="View.ts" />
module app {
    export class Controller {
        view:View;
        model:Model;

        constructor(initialData:any=null) {
            this.model = new Model(initialData);
            this.view = new View(this.model);
        }

        showName(label:string):void {
            this.model.setName(label);
        }
    }
}
```
###Model
setPropertyを実行すると、値に変更が有った場合に[change]イベントが16ミリ秒後実行されます。
遅延実行している理由は、描画とロジック処理負荷を分けるためデス。
また、[change]イベント送出までは、プロパティをどれだけいじっても変更通知される事はないです。

```lang:Typescript
///<reference path="olib/reactive/ModelBase.ts" />
module app {
    export class Model extends olib.reactive.ModelBase {
        protected init(initialData:any = null):void {
            this.name = initialData ? initialData.name || "" : "";
        }

        setName(label:string):void {
            this.name = label;
        }

        set name(value:string) {
            this.setProperty("name",value);
        }

        get name():string {
            return this.getProperty("name");
        }

    }
}
```
###View
model値が変更されるとview.updateが実行されます。
updateの中に描画処理をまとめる事で描画負荷のコントロールを行いやすくします。
bindでプロパティに変更が有るときだけ処理が実行されます。
差分のみの変更をするとこで描画負荷を下げます。

```lang:Typescript
///<reference path="olib/reactive/ViewBase.ts" />
///<reference path="Model.ts" />
module app {
    export class View extends olib.reactive.ViewBase<Model> {
        nameLabel:HTMLElement;
        protected init():void {
            this.nameLabel = <HTMLElement>document.querySelector("#nameLabel");
            this.update();
        }

        update():void {
            this.bind("name", (value)=>{
                this.nameLabel.innerHTML = value;
            });
        }
    }
}
```



###HTML
```lang:html
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <link href='http://fonts.googleapis.com/css?family=Open+Sans+Condensed:700,300' rel='stylesheet' type='text/css'>
    <link rel="stylesheet" type="text/css" href="resource/style.css">
</head>
<body>
<h1>SPA REACTIVE MVC TEMPLATE</h1>
    <div id="nameLabel"></div>
    <input type="text" id="nameInput" onkeyup="controller.showName(this.value)" />
</div>
</body>
<script type="text/javascript" src="resource/App.js"></script>
<script type="text/javascript">
    var controller = new app.Controller({
        name : "Hello World"
    });
</script>
</html>
```
こんな感じです。
テキストを入力すると、文字がかわります


##サンプルにおけるリアクティブな流れ。
![スクリーンショット 2015-01-27 20.01.14.png](https://qiita-image-store.s3.amazonaws.com/0/44028/cfbb994b-f12c-8d1f-41b2-84a61595eced.png)
Raspberry Pi上で音声認識環境を作ってみた

# はじめに

最近は音声認識による家電操作などがCMでも流れている。
自分でもとりあえず音声認識してWebが操作できるものが作りたい！
と思い立ち、作ってみた。
とはいえ、先人の人が既に作り方を公開していらっしゃるので
そちらを参考に気が付いた点だけ補足していきます。

# 用意したもの

今回用意したものは以下のとおり

+ RaspberryPi(Model A)
+ SDカード(32GB)
+ PLANEX GW-USNano2
+ Logitech, Inc. QuickCam Pro 4000
+ スピーカー
+ microUSBケーブル
+ USB AC電源アダプター
+ miniUSBケーブル
+ Web表示用PC

# 音声入力（USBマイク設定）

認識させるための音声を拾うために音声入力の設定をします。
こちらが参考になります。

+ [Raspberry Piで音声認識 - 猫ぱーんち！](http://d.hatena.ne.jp/penkoba/20130928/1380351297)  
+ [Devel/電子工作/RaspberryPi/日本語音声認識/](http://cubic9.com/Devel/%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C/RaspberryPi/%E6%97%A5%E6%9C%AC%E8%AA%9E%E9%9F%B3%E5%A3%B0%E8%AA%8D%E8%AD%98/)  

pulseaudioの起動時にエラーとなっても特に問題は無いようです。

# 音声出力（OpenJTalk）

認識ついでに応答してもらうために、喋ってもらう用意をします。 
こちらを参考にしました。

+ [ORBIT SPACE](http://www.orsx.net/blog/archives/4938)

## スピーカー、マイクの調節

> $alsamixer

上記コマンドで設定画面を開きます。
※以下のような画面でMasterが出力(スピーカ音量)、Captureが入力(マイク感度)

![alamixer.png](https://qiita-image-store.s3.amazonaws.com/0/66708/dce2f09b-180e-01f5-9b43-ce86d38eecf3.png)

マイク、スピーカ共に50%程度が適量です。この状態でマイクに対して2～30cm離れた距離から
普通の音量で発声することで、期待した結果が最大限に発揮されるようです。

# 音声認識環境の構築（Juliusのインストール）

Juliusのインストール、設定は今までのリンクに方法が記載されています。

# 音声認識辞書の作成

認識させる言葉を予め登録しておくことにより、音声認識ができます。
辞書の作成は以下のサイトを参考にしました。

+ [Raspberry Piで音声認識 - uramonk's blog](http://uramonk.hatenablog.com/entry/2014/04/15/225130)

とりあえず、上記までで環境の構築はできました。

# 音声認識でのコントロール

後はJuliusで認識した言葉を命令にして実行するpythonなどを用意する。
音声応答を返す、WebSocketなりでPCのブラウザに飛ばし画面遷移を実現する。
デバイスを動かす等、いろいろなことができます。
以下のサイトを参考にしました。

+ [Devel/電子工作/irMagician/赤外線学習リモコンR2-D2/](http://cubic9.com/Devel/電子工作/irMagician/赤外線学習リモコンR2-D2/)

# まとめと課題

実際に動くことを確認できたのでいきなり誘われたHTML5カンファレンスに出展しました。
某音声認識ソフトをもじって「Chiriちゃん」by D.F.Mac(命名)

朝、設定しているときは動くことを確認できたんですが…
想定を大きく超えて、**周りうるさ過ぎ！**
雑音というより騒音で、ほとんど認識できませんでした… orz
音声認識では雑音対策が必要となる場合があります。（家庭で使う分には十分ですが）

デフォルトの環境ではノイズ対策がされていないため、次はノイズ対策に取り組みたいと思います。
CoreOS で CloudStorage 上のスタートアップスクリプトを利用する

# 概要
[Google Compute Engine](https://cloud.google.com/compute/) にて，インスタンスの OS に CoreOS を選んだ場合，なぜか CloudStorage からスタートアップスクリプトを読み込めない．CloudStorage にアクセスするためのパッケージを準備するスクリプトを別サーバからダウンロードして対応する．

# スタートアップスクリプト
Google Compute Engine ではインスタンス起動時に実行する [スタートアップスクリプト](https://cloud.google.com/compute/docs/startupscript) を指定できる．[ドキュメント](https://cloud.google.com/compute/docs/startupscript#googlecloudstorage) には CloudStorage に置いたファイルをスタートアップスクリプトに指定できると書かれているが，OS が CoreOS の場合，URL スキーム `gs` を扱うコマンドがスタートアップスクリプト実行時点では用意されていないようだ．`http` や `https` にはアクセスできるため，`gs` を扱い本当のスタートアップスクリプトを取得，実行するスクリプトを別に用意して対処する．

そのスクリプトは，下記の通りで [gist](https://gist.github.com/jkawamoto/8c8ea77840a564bbd2f5) に置いてある．

```bash
#!/bin/bash
URL=$(curl http://metadata/computeMetadata/v1/instance/attributes/startup -H "Metadata-Flavor: Google")

docker pull google/cloud-sdk

cd /tmp
docker run -t --rm google/cloud-sdk /google-cloud-sdk/bin/gsutil cat $URL | tr -d "\r" > startup.sh
chmod a+x startup.sh
./startup.sh
```

使用する場合，メタデータとして，

  - startup-script-url: https://gist.githubusercontent.com/jkawamoto/8c8ea77840a564bbd2f5/raw/d14f18573a6ea6f8284aa422ac73b76111c639fe/gistfile1.txt
  - startup: `<本来のスタートアップスクリプトのURL>`

を設定すれば良い．
aws sdk でアップロードしようとしたら、RequestTimeTooSkewedというエラーが出た場合の対処方法

# 環境

Vagrant
VirtualBox
CentOS 6.5
Rails 4.1
Carrierwave

# こんなエラーがでました。

```rb
Excon::Errors::Forbidden - Expected(200) <=> Actual(403 Forbidden)
excon.error.response
  :body          => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>RequestTimeTooSkewed</Code><Message>The difference between the request time and the current time is too large.</Message><RequestTime>20150127T094834Z</RequestTime><ServerTime>2015-01-27T10:05:26Z</ServerTime>
```

注目すべきは

```html
<RequestTime>20150127T094834Z</RequestTime>

<ServerTime>2015-01-27T10:05:26Z</ServerTime>
```

ズレがすごい

# awsと開発サーバー間で時間のズレが大きいらしい

なので、ntpを開発サーバー側にちゃんと設定すればうまくいくはず。


## install

```rb
$ sudo yum -y install ntp
```

## configure

```rb
$ sudo vi /etc/ntp.conf
----

# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
↓コメントアウトをとる
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.rhel.pool.ntp.org
server 1.rhel.pool.ntp.org
server 2.rhel.pool.ntp.org

↓　時刻同期先NTPサーバーを変更

server ntp.nict.jp
server ntp.jst.mfeed.ad.jp

```

## adjust

```rb
$ sudo ntpdate ntp.nict.jp
```

## setup

```rb:centos7
$ sudo systemctl start ntpd
$ sudo systemctl enable ntpd
```

```rb:centos5,6
$ sudo /etc/rc.d/init.d/ntpd start
ntpd を起動中:                                             [  OK  ]

$ sudo chkconfig ntpd on
```

# 結果

うまくいきました。

# reference

http://centossrv.com/ntp.shtml
Xcodeでブレークポイントがthread log内で止まるようになった時の対処法


通常ブレークポイントを設定すると、設定したコードのところで止まるはずですが、なぜかthread logが表示されるようになってしまいました。 
下記コマンドでXcodeの設定をリセットして解決。

```Terminalで下記を実行
// Xcodeの設定（カラースキームとかプロジェクトとか）がリセットされるので注意。
defaults delete com.apple.dt.Xcode.LSSharedFileList
defaults delete com.apple.dt.Xcode
```

* 元記事  
http://stackoverflow.com/questions/10323481/thread-1-stopped-at-breakpoint-1
UIAppearanceが設定されているとNSAttributedStringが正しく反映されない


## 問題点
`UIAppearance`が設定されていると`NSAttributedString`で設定した一部項目が反映されない現象
※検証用プロジェクトを作っている最中に気付いたのですが、IBで置いたビューだと上記問題が発生するようです。

## 再現コード

```swift:AppDelegate.swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        UILabel.appearance().textColor = UIColor.orangeColor()
        return true
    }
}
```

```swift:ViewController.swift
class ViewController: UIViewController {
    
    @IBOutlet weak var ibLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let baseAttr = [
            NSForegroundColorAttributeName: UIColor.lightGrayColor(),
            NSFontAttributeName: UIFont.systemFontOfSize(10),
        ]
        
        
        let linkAttr = [
            NSForegroundColorAttributeName: UIColor.blueColor(),
            NSFontAttributeName: UIFont.italicSystemFontOfSize(10),
        ]
        
        let texts = ["message", "http://qiita.com", "message"]
        let attributedText = NSMutableAttributedString()
        attributedText.appendAttributedString(NSAttributedString(string: texts[0], attributes: baseAttr))
        attributedText.appendAttributedString(NSAttributedString(string: texts[1], attributes: linkAttr))
        attributedText.appendAttributedString(NSAttributedString(string: texts[2], attributes: baseAttr))
        
        
//        self.ibLabel.textColor = nil	// コメントアウトするとUIAppearanceの設定が優先される
        self.ibLabel.attributedText = attributedText
        self.ibLabel.sizeToFit()
    }
}
```


## 対応策

対応としては以下の2点が考えられます。

1. `NSAttributedString`を設定する直前で`UIAppearance`で指定したプロパティに`nil`を代入する
1. `UIAppearance`に指定するビュークラスを被らないようカスタムクラスにする

基本的には`1.`の方法で、`nil`を代入する処理を差し込みづらい？とき場合は、`2.`の方法で対応する流れでいいと思います。
今回は`1.`の方法で解決しました。
__FILE__を利用したサンプルコードの作成

サンプルコードも実行したいけど、ライブラリとしても利用したいときなどで使えるTIPS。

rubyでは実行中のファイル名は、

``` ruby
puts __FILE__
```

で得られる。
似ているものに$0というのもある。しかし、ぜんぜん違う。
$0は実行する時に指定したファイルを指す。
実行するプログラムが1つの場合は

``` ruby
__FILE__ == $0
```

になる。

なので、この2つを利用して、

``` ruby
def A
 メソッドA
end

def B
 メソッドB
end

if __FILE__ == $0
  # サンプルコード
end
```
こんな感じにするとライブラリとして読み込む際はサンプルコードの部分は実行されないので、メソッド類を使い回しできる。
Go by Examples


ここでは[Go by Example](https://gobyexample.com/)を翻訳したものを載せていきます。

[Go](http://golang.org/)は、簡潔に速く信頼できるソフトウェアを作るためにデザインされたオープンソースのプログラミング言語です。


[Hello World](http://qiita.com/giwa@github/items/02a3a0eb01800bda62ee)
[Values](http://qiita.com/giwa@github/items/42453354159eb4638df3)
[Variables](http://qiita.com/giwa@github/items/4892e30aaae81cc45e8c)
[Constants](http://qiita.com/giwa@github/items/2b5793bae8e7ba83ab3f)
[For](http://qiita.com/giwa@github/items/7237183f7ee3873e8a96)
[If/Else](http://qiita.com/giwa@github/items/7a1b01daf0c7ff773315)
[Switch](http://qiita.com/giwa@github/items/bc908b2d39ed24799d20)
[Arrays](http://qiita.com/giwa@github/items/111ab1828ea5a72988a3)
[Slices](http://qiita.com/giwa@github/items/9a4d7b202bd71213fa6a)
[Maps](http://qiita.com/giwa@github/items/96d0929bf1c906a398cb)
[Rnage](http://qiita.com/giwa@github/items/53f807036c104c4ca009)
[Functions](http://qiita.com/giwa@github/items/ee64dac57509dbdd7d01)
[Multiple Return Values](http://qiita.com/giwa/items/2789d0ddf86bffb37f9f)
[Variadic Functions](http://qiita.com/giwa/items/49b122c2f9397b6d9a23)
[Closures](http://qiita.com/giwa/items/39ce036a8ae46369e653)
[Recursion](http://qiita.com/giwa/items/aa5e9e89c8a525555f8a)
[Pointers](http://qiita.com/giwa/items/0b72dc6f6d90a7ce4022)
[Struct](http://qiita.com/giwa/items/5abb5e4b621628d4b83d)
[Methods](http://qiita.com/giwa/items/8ddcd4a76eca9a4ed01f)
[Interfaces](http://qiita.com/giwa/items/81154eca31694e849b3b)
Go by Examples: Functions


(この記事は [Go by Example: Functions](https://gobyexample.com/functions) を翻訳したものです。)

関数はGoの中でも中心的なものである。少し違った例で関数を学んでいきます。

```go
package main

import "fmt"

// 2つのintを取りその合計を返す関数です。
func plus(a int, b int) int {

	// Goは明示的なreturnが必要です。
	// 例えば、最後の値を自動的に返すことはありません。
    return a + b
}

func main() {
	// 関数を呼ぶのは予測通り、name(args)で呼ぶことができます。
    res := plus(1, 2)
    fmt.Println("1+2 =", res)
}

```

```
$ go run functions.go 
1+2 = 3
```

Goの関数では、ほかのさまざまな機能があります。一つは次で見る複数の戻り値です。
シーンを遷移してもBGMを継続して再生する方法

Unityでサウンドを再生する簡単な方法は、Audio SourceゲームオブジェクトにPlay On AwakeプロパティとLoopプロパティをオンにすればいい。

しかしSceneからSceneへ遷移する場合とBGMのゲームオブジェクトが消えてしまうため、この方法ではBGMを継続して再生されません。

この問題を解決するには、BGMのゲームオブジェクトがシーンに遷移しても消えないようにする必要があります。

そこでObjectクラス（MonoBehaviourの基底クラス）のDontDestroyOnLoad関数で実現できます。

## BGM用オブジェクトを作成
BGM用オブジェクトを作成するためにまずはじめに空のゲームオブジェクトを作成します。オブジェクト名は「MainSoundObject」にしておきます。

![unity2015-01-27_16_17_58.png](https://qiita-image-store.s3.amazonaws.com/0/67320/bddb2a6c-df90-b70d-9865-c622d28c2db5.png)

## 音楽ファイルをBGM用オブジェクトに追加
音楽ファイルをBGM用オブジェクトに追加します。
AssetからBGMにしたいWAVファイルを、
MainSoundObjectにドラッグして追加します。

## Scriptを追加する
MainSoundObjectにScriptを追加します。
Script名は「MainSoundScript」で言語はC#とします。

![unity2015-01-27_12_01_53.png](https://qiita-image-store.s3.amazonaws.com/0/67320/6c0d4cbc-c07e-ca4a-8f03-88cc8a97e910.png)

## BGM用Scriptを記述する
BGM用ScriptにDontDestroyOnLoad関数を追加して、Sceneが遷移してもオブジェクトが消えないようにします。

```
using UnityEngine;
using System.Collections;

public class MainSoundScript : MonoBehaviour {
	public bool DontDestroyEnabled = true;

	// Use this for initialization
	void Start () {
		if (DontDestroyEnabled) {
			// Sceneを遷移してもオブジェクトが消えないようにする
			DontDestroyOnLoad (this);
		}
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
```

## 遷移処理を書く
遷移してもBGMが鳴ることを確認するためにキーを押すと、Sceneを遷移するように処理を追加します。
ここでは「A」を押すと遷移するようにします。

```
if ( Input.GetKeyDown(KeyCode.A) == true ) {
	Debug.Log("Now scene is " + Application.loadedLevelName);
	// Aキーを押すとシーンが遷移する
	Application.LoadLevel("Scene2");
}
```

## 最後に
Sceneを移動しても、BGMが鳴っていることが確認できました。


## 参考文献
[Unityではじめる2Dゲーム作り徹底ガイド スマートフォンでも遊べる本格ゲーム開発に挑戦 Chapter13](http://www.amazon.co.jp/gp/product/4797376708/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797376708&linkCode=as2&tag=boki0c-22)
![](http://ir-jp.amazon-adsystem.com/e/ir?t=boki0c-22&l=as2&o=9&a=4797376708)

[Unity - Scripting API: Object.DontDestroyOnLoad](http://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html)
【C++】error C2633: 'identifier' : 'inline' のみがコンストラクターの正しいストレージ クラスです。

#何か昔同じタイトルの記事を見たことあるって人へ
この記事は昔やってたブログの記事の移植です。
昔の内容で有用そうなものをQiitaに少し修正を加えて移植してます(現在進行形で)。

#概要
```c2633.cpp
class C
{
  virtual C(); // error C2633
};

C()
{
}
```

#詳細
ようはコンストラクタに[ virtual ]を間違えて付けてしまうとC2633になって死ぬ思いする死ぬ思いしためっちゃ死ぬ思いしたMSDNが何の役にも立たないめっちゃ役に立たない・・・
Swiftでジェスチャーの追加

2014年に行われたWWDCで発表されて以来、話題になっているSwift言語を勉強してみたい！iOSアプリを開発してみたい！という方は増えてきていると思います。なので、Swift言語を使ったiOS開発をしてみたいという人向けに参考になる記事を書いていこうと思います！


今回は、iOSアプリ開発の中でも最も使われる基本的なものの一つジェスチャーについて解説していきます。

こちらも参考に


* [iOSアプリ初心者が覚えておきたい10のUIクラス](http://creatorhiro.com/archives/609)
* [売れるiOSアプリが作れるようになるおすすめの本８選](http://creatorhiro.com/archives/525)
* [SwiftでViewを操作する](http://qiita.com/web_chiro/items/7485cee8b73849f0c847)
* [SwiftでViewControllerを使う](http://qiita.com/h_nagami/items/66dc637463f98716bfa5)
* [Swiftでアニメーション[CoreAnimation編]](http://qiita.com/h_nagami/items/0ad8f8ef5bc23de21e1e)

##ジェスチャーとは？
ジェスチャーとはスマートフォンで画像を拡大したり、ゲームでアイテムをタップするときの指の動きのことです。それぞれの指の動きに対して、対応するジェスチャーがありそれぞれに対応する処理を設定することでUIをリッチな動きにすることができます。

##ジェスチャーの種類
iOSには対応するジェスチャーにいくつか種類があります。それぞれのジェスチャーを使い分けることで、様々な処理やアニメーションを表現することができます。

>
- *Tap*
- *Pan*
- *Pinch*
- *Rotate*
- *Swipe*
- *LongPress*


##ジェスチャーの生成
ビューをジェスチャーで操作するためには、ジェスチャーを生成しビューに追加する必要があります。例として、タップジェスチャーを生成します。

> ジェスチャー生成
> - *var tapGestureRecognizer = UITapGestureRecognizer(target: aTarget, action: aSelector)*


####ジェスチャー処理

ジェスチャーによって何か処理を行いたい場合、その処理はメソッドとして定義する必要があります。定義したメソッドは対応するジェスチャーにセットすることで、ジェスチャーイベントが発生した時に処理されるようになります。

ここでは、*"tapGesture"*というメソッドを定義します。

```swift
func tapGesture(gestureRecognizer: UITapGestureRecognizer){
    // タップviewの色を変える (Red <=> Blue)
    if(view.backgroundColor  == .redColor()) {
         view.backgroundColor == .blueColor()
    }
    else {
         view.backgroundColor == .redColor()
    }
}
```

メソッドを定義したらSelectorクラスを使って呼び出すメソッドを指定し、ジェスチャー生成時に設定します。

```swift
var aSelector = Selector("tapGesture:")
var tapGestureRecognizer = UITapGestureRecognizer(target: self, action: aSelector)
```

##ジェスチャーの追加・削除
ジェスチャーを利用するためには、ジェスチャー判定したいビューに対してRecognizerを追加してあげます。追加するためのメソッドは次の通りです。逆に、ジェスチャーイベントが不要になった際には削除することも可能です。


追加・削除をするには次のメソッドを使用します。

> ジェスチャーの追加：*view.addGestureRecognizer(gestureRecognizer)*
> ジェスチャーの削除：*view.removeGestureRecognizer(gestureRecognizer)*

全体的にこうなります。

```swift:ViewController.swift
override func viewDidLoad() {
    super.viewDidLoad()
        
    self.view.backgroundColor = .whiteColor()
        
    // ジェスチャーの生成
    var aSelector = Selector("tapGesture:")
    var tapGestureRecognizer = UITapGestureRecognizer(target: self, action: aSelector))
    
    // ビューの生成
    var view1 = UIView(frame: CGRectMake(30, 30, 100, 100))
    view1.backgroundColor = .redColor()
    // ジェスチャーの追加
    view1.addGestureRecognizer(tapGestureRecognizer) 
    self.view.addSubview(view1)
}
    
// ジェスチャーイベント処理
func tapGesture(gestureRecognizer: UITapGestureRecognizer){
    // タップviewの色を変える (Red <=> Blue)
    if(view.backgroundColor  == .redColor()) {
         view.backgroundColor == .blueColor()
    }
    else {
         view.backgroundColor == .redColor()
    }
}
```
JavaScriptで、今日から1ヶ月前を計算する3つのポイント

JavaScriptを使って、今日の日付から1ヶ月前を計算するコードを、変数を使う方法とそうでない方法の2つを紹介します。この2つは、コードの書き方に違いがあるので注意が必要です。なお、数字、符号を変えることで、2ヶ月前、1ヶ月後に対応することができます。まず、全体のコードを紹介してから、順をおって説明していきます。

*リクエストがあり、考え直したところ、僕のやり方は単純に月を前後させる方法になりことがわかりました。細かいところまで計算をすることを考えてませんでした。勉強になりました。<br>

##仕様の確認
前提として「1ヶ月前」「1ヶ月後」の意味を定義します。
2015年1月31日の1ヶ月後を何月何日としましょう。2015年2月の同日にしたいのですが、同日に当たる日がない場合…

1. 月の最終日: 2015年2月28日
2. 翌月の一日: 2015年3月1日
3. 月の最終日から、余った日数だけ進めた日: 2015年3月3日

ここでは、3. の **月の最終日から、余った日数だけ進めた日: 2015年3月3日** を同日に当たる日がない場合の「nヶ月後」と定義します（これは、JavaScriptの日付計算の仕様にそのまま沿った仕様です。これ以外の仕様が要求されている場合、独自の補正処理を自前で書く必要があります）。

##3つのポイント

```javascrip:hizuke_keisan
var dt = new Date();
	var month = dt.getMonth()+1;
	var day = dt.getDate();
 
	//1ヶ月前
      var lastMonth = dt.setMonth(month -2);
	var lastmonth = dt.getMonth()+1;//変数の場合は、+1

	/*var lastMonth = dt.setMonth(dt.getMonth() -1);
	var lastmonth = dt.getMonth()+1;変数なしの場合は、引いた数と同数を指定。*/
	
      //2ヶ月前
      var twoMonth = dt.setMonth(month -3);
	var twomonth = dt.getMonth()+1;

	/*var twoMonth = dt.setMonth(dt.getMonth() -2);
	var twomonth = dt.getMonth()+2;*/
     
　   document.write = (lastmonth + "月" + day + "日～"+ month + "月" + day + "日　");//変数と文字列結合
			
```

**1. new dateから、今日の日付を抜き出す。**
new dateには、年　月　日にち　場所など多くの情報が含まれています。そこから、計算に必要な月と日にちを変数に指定して抜き出します。<br>

```javascript:hizuke_nukidasu
var dt = new Date();
	var month = dt.getMonth() +1;
	var day = dt.getDate();//日にち
```

- 月は、1を足す。
JavaScriptで日付を取得すると、月は0～11月で取得されます。そこで、`var month = dt.getMonth()+1;`とすれば1～12月で表示することができます。

**2. 1ヶ月前を計算する**
1ヶ月前を計算するには、getMonthとsetMonthの異なる2つを使います。

- getMonth・・・newdateの月を取得します。
- setMonth・・・任意の月を表示させます。基本的な使い方として`var lastMonth = dt.setMonth()`があり、`var lastMonth = dt.setMonth(6);`で7月を表示します。<br>

しかし、これでは毎月の変化に対応することができません。そこで、次のように組み合わせて書くことで、何月になっても必ず1つ前の月を表示することができます。

_変数を使わない方法_

```
var lastMonth = dt.setMonth(dt.getMonth() -1);
```


_変数を使った方法_
変数`var month = dt.getMonth() +1;`を使って次のように書くことも出来ます。

```var lastMonth = dt.setMonth(month -2);
```

変数を使わない方法では、元々の0～11月の並びを-1することで先月を計算しました。変数は、+1されているので1＋X＝-1にする必要があります。右辺と左辺と移行して、X=-2となります。


**3.最後に、var lastmonth = dt.getMonth()+X;を書く**
しかし、上記のコードの書き方では、数字の羅列で表示されてしまいました。これは、setMonthでXヶ月前を計算するコードのあとに、`var lastmonth = dt.getMonth()+X `と書くことで解決しました。_なお、変数を使った計算の場合は、getMonthのあとはXヶ月前にかかわらず+1で問題ありませんでした。_
＊このコードをなぜ書かないといけないのかは、あとで調べてみます<br>

```javascript:hizuke_tyuui
    var lastMonth = dt.setMonth(dt.getMonth() -1);
	var lastmonth = dt.getMonth()+1;//-1をしたら、+1
	
	var twoMonth = dt.setMonth(dt.getMonth() -2);
	var twomonth = dt.getMonth()+2;//-2をしたら+2

```
あとは、それぞれの変数を文字列結合で結合していくと、テキストで表示することができます。
リストのセンタリング


floatのメニューとかで使うやつ。

```html+css

<style>
.menuA {
  overflow: hidden;
  position: relative;
}
.menuA ul {
  float: left;
  position: relative;
  left: 50%;/* リストの全体(ul)をdivに対して右へ50%ずらして*/
}
.menuA ul li {
  float: left;
  position: relative;
  left: -50%;/* リストの要素(li)をulに対して左へ50%ずらしてセンタリング*/
}
</style>

<div class="menuA">
  <ul>
    <li>メニュー1</li>
    <li>メニュー2</li>
    <li>メニュー3</li>
  </ul>
</div>

```
![スクリーンショット 2015-01-27 17.28.09.png](https://qiita-image-store.s3.amazonaws.com/0/32839/36d90f37-470e-6eac-ef2e-266bbd79af68.png "スクリーンショット 2015-01-27 17.28.09.png")



### おまけ
div幅が固定であれば。
(divがセンタリングされているので、リストのセンタリングとはちょいと違う。)

```html+css
<style>
.menuB {
	width: 18em; /*この幅分がセンタリングされる。*/
	margin: 0px auto;/* こいつがdivに対してセンタリングをさせてる */
}
.menuB ul li{
	float:left;
}
</style>

<div class="menuB">
	<ul>
		<li>メニュー1</li>
		<li>メニュー2</li>
		<li>メニュー3</li>
	</ul>
</div>
```
KCFinder(v3.12)でupload_dirにシンボリックリンクを含むパスを指定してエラーとなりました。

KCFinder(v3.12)でupload_dirにシンボリックリンクを含むパスを指定すると、ファイルアップロード、ダウンロード、更新などほとんどの処理で「原因不明のエラーです」となってはまりました。画像の場合、ファイル名のみでサムネイルは表示されない状態となります。原因の切り分けにかなりの時間をかけてしまいました。。
mobile backendでinstallationの任意の項目名を更新する方法

mobile backendでinstallationの任意の項目名を更新する方法

```objective-c:xxx.m
NCMBInstallation *currentInstallation = [NCMBInstallation currentInstallation];
[currentInstallation setObject:@"値" forKey:@"任意の項目名"];
[currentInstallation save:nil];
```
対ガラパゴスAndroidのTips


## 概要

メーカーが独自の仕様を盛っているAndroidにはどこかしらに謎の仕様や不具合が存在します
残念ながらAndroidアプリ開発者はこの事実を受け入れて開発を行わないといけません
本ページには避けなければいけないそれらの謎をまとめています

<b>発見、もしくは思い出したらドンドン追記していきます
編集リクエストもお待ちしております</b>

## 昔のXperia

### bottomRightRadiusとbottomLeftRadiusが逆になっている

昔のXperiaでは android:bottomRightRadius と android:bottomLeftRadius が逆になっています
つまり四つ角の左上・左下にRadiusを設定しようとすると、左上・右下にRadiusが設定されるということです
もちろんその他の端末では正常に左上・左下とRadiusが設定されます

## ごく一部のSHARP端末

### CharSequenceをStringにCastしようとすると落ちる

ごく一部のSHARP端末ではCharSequenceをStringにCastしようとすると <b>ClassCastException</b> が発生します
<b>toString()</b> でコンバートするようにチームで徹底すると幸せになれます

## Galaxy

### EditTextが9000文字までしか入れられない

ソース：http://pandora.sblo.jp/article/44144389.html

GalaxySはすべてのViewに自動で9000文字をmaxに設定しています
android:maxLengthをInteger#MAX_VALUEにするか、@nullを入れると無制限にできます

### SharedPreferencesが読めなくなる状況が生まれる

アプリのプロセスのユーザIDは使いまわされることと、GalaxySではSharedPreferencesのファイルの実体が通常とは別のところに保存されること、そしてアプリのアンインストール時にそのファイルが削除されないことの合わせ技で、再インストール後に残骸ファイルを作ったユーザIDとアクセスしているアプリのユーザIDが異なる状況が生まれ、ファイルににアクセスができなくなり、結果SharedPreferencesが読み書きできなくなります

### WebViewでSIGSEGVする

絵文字関連でバグが有るらしい（ということまではメモリダンプから分かりましたがどうしたら良いか等不明…）。バグを踏むとSIGSEGVでアプリが静かに落ちます

## HTC

### Gsonが使えない

ソース：https://code.google.com/p/google-gson/issues/detail?id=255

アプリでGsonを使うと、アプリ起動時にクラスローダ上に何故か2つのGsonがロードされ、片方（アプリ側）がVerifyErrorになり、結果Gsonに依存するクラスを使用した時点でクラッシュします
Gsonのパッケージを無理やり変えてやる必要があります

## 低解像度の端末

### View, Drawableにおいてサイズを0.7dp未満に指定すると描画されない

低解像度の端末において View や Drawable で0.7dp未満にサイズを指定すると描画されない端末がある
GitHub Issueはテンプレート化で、綺麗に書かせる！

# まず、クリックしてみてください

### [Issue作成はこちら](https://github.com/yoshimikeisui/test/issues/new?labels=bug&title=%5B%E4%BE%9D%E9%A0%BC%5D&body=%23%20%E5%95%8F%E9%A1%8C%E3%81%AE%E8%83%8C%E6%99%AF%0A%0A%23%20%E4%BD%95%E3%81%8C%E5%95%8F%E9%A1%8C%E3%81%AA%E3%81%AE%E3%81%8B%0A%0A%23%20%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95%EF%BC%88%E3%81%82%E3%82%8C%E3%81%B0%EF%BC%89&assignee=yoshimikeisui)

![スクリーンショット 2015-01-27 16.22.05.png](https://qiita-image-store.s3.amazonaws.com/0/41657/366384b7-7b66-71c9-9a70-f0dbb66fa498.png)

-------------

GitHubのIssueは、URLにparamsを渡すことで、デフォルトのvalueが入れられます。
※paramsの渡し方は、`/issues/new?title=test&body=content`のようにします。

[バグ報告はこちら](https://github.com/yoshimikeisui/test/issues/new?labels=bug&title=%5BFor Correction%5D&body=%23%20Context%0A%0A%23%20Problem%0A%0A%23%20Solution&assignee=yoshimikeisui)とか[アイディア投稿](https://github.com/yoshimikeisui/test/issues/new?labels=idea&title=%5BIdea%5D&body=%23%20内容%0A%0A%23%20目的%0A%0A%23%20実装イメージ&assignee=yoshimikeisui)などのリンクをREADMEなどに置き、みんなそれに従ってIssueを作成してもらいましょう。

# 指定できるparams
指定できるパラメーターは以下です。

### params一覧

* title
- body
- assignee
- labels
- milestone

※ラベル、マイルストーンはcontributorsのみ使用可能


### 文字列のエスケープ
URLに入力するので、改行コードなどをエスケープする必要があります。

|文字|エスケープ後|
|---|---|
|空白|%20|
|改行|%0A|
|#|%23|
|*|%2a|
|-|%2d|
|[|%5B|
|]|%5D|
詳しくは、URLの文字列エスケープを調べてみてください。

# コマンドラインから、フォーマットを使用したPull Requestを作成する

[hubコマンド](http://qiita.com/yaotti/items/a4a7f3f9a38d7d3415e3)を使用すれば、コマンドラインから一発でフォーマットに沿ったPRを作成できます。

これは、現在のブランチからフォーマットに沿ったPRを作成するためのエイリアスです。

```bash:.gitconfig
[alias]
  pr = !hub browse -- compare/$(git symbolic-ref --short HEAD)'?'expand=1'&'body=%23%23%20%E7%9B%AE%E7%9A%84%0A%0A%23%23%20%E5%A4%89%E6%9B%B4%E5%86%85%E5%AE%B9
```
※パラメーターを複数渡す場合は`&`をクオーテーションで囲まないと別で走ってしまいます


# 参考にしたい、美しいIssueとPull Requestの作り方

Github「完璧なプルリクの書き方を教えるぜ」
http://qiita.com/umanoda/items/93aec41213f8e3ce14c8

How We Write Github Issues
http://wiredcraft.com/posts/2014/01/08/how-we-write-our-github-issues.html


見通しの悪いIssueやPull Requestを増やす前に、テンプレート使用して一気に見やすくしましょう！
ActiveAdminのアソシエーション項目のプルダウンの表示内容がおかしい場合の対処法

[ActiveAdmin](https://github.com/activeadmin/activeadmin) では検索条件に対象モデルのアソシエーションモデルを使用できます。
通常これはプルダウン（ドロップダウン）で表示されますが、この内容が `#<ModelName:0x007f89845f8f88>` のように表示されてしまうことがあります。
この原因は ActiveAdmin の仕様によるものです。

下記の記述内容に従って表示名の取得を行っているので、これに該当するプロパティを持っていないモデルの場合、このような残念な表示になってしまいます。

```rb:lib/active_admin/application.rb

    # Active Admin makes educated guesses when displaying objects, this is
    # the list of methods it tries calling in order
    setting :display_name_methods, [ :display_name,
                                      :full_name,
                                      :name,
                                      :username,
                                      :login,
                                      :title,
                                      :email,
                                      :to_s ]
```

手を尽くして調べたところ、下記のように記述すれば設定を上書きできるよ！という情報もあったのですが。。。

```rb:config/initializers/active_admin.rb
    config.display_name_methods = [ :active_admin_name,
                                      :display_name,
                                      :full_name,
                                      :name,
                                      :username,
                                      :login,
                                      :title,
                                      :email,
                                      :to_s ]
```

残念ながら私の環境では上書きできませんでした。
厳密には反映されているようにみえるけれど、プルダウンの表示には影響せず。
他にも修正する必要があるのか、やり方が悪いのか、ソースを追うものの追いきれず諦めた感じです。

仕方がないので以下のように対処しています。

```rb:app/model/user.rb

# for active admin
# label というプロパティを表示に利用したい
def display_name
  self.label
end

# ユーザのプロパティに氏名を持っているので、display_name
# じゃなくて fullnameにしてみる（上かこちらかどちらかだけ追加）
def fullname
  "#{first_name} #{last_name}"
end

```

要は `[:display_name, :full_name, :name, :username, :login, :title, :email]` のいずれかがモデルにあれば良いので、他で問題になりにくいものをメソッドとして追加してあげれば良い訳です。
config で追加して反映できれば一番なのですけどね。。。
公式でも config で変えられるよって書いてあるので、何かの間違いでうまくいかなかっただけかもしれません。

参考にしたのはこの辺り。
[Rails + Active Admin: Display name | Stack Overflow](http://stackoverflow.com/questions/16255991/rails-active-admin-display-name)
[rails activeadmin drop down menu on new and edit forms [duplicate] | Stack Overflow](http://stackoverflow.com/questions/8578819/rails-activeadmin-drop-down-menu-on-new-and-edit-forms)
[Filter select show object instead of object name #728](https://github.com/activeadmin/activeadmin/issues/728)
超初心者のUnity入門メモ

``` コメントは自分用＆超ざっくり＆ほぼ愚痴レベルなのであまり信用しないで ```

* プリプロセッサの話
 * http://akisute.com/2012/11/unity-35.html
 * #DEFINEはここに書け
 * ただしコンパイルしなおせ！
* PostProcessBuildの話
 * http://www.slideshare.net/monry84/20140314-unity-postprocessbuild-32183738
 * ex) #ios の場合sdkをimportするためpbxprojに一行を足すスクリプトがあってファイルをcloseし忘れとか、正規表現で ``` /* Begin PBXBuildFile section */ ``` を探してるけど他にスクリプトに消されるとか、くそみたいな話が結構あるので要注意。
Javascriptのconstructorを比較するときは文字列じゃない!


```javascript
var a = new Array;
if (a.constructor == "Array") {
	console.log("Array だよ");
} else {
	console.log("Array じゃないよ");
}
/*
出力結果
Array じゃないよ
*/
```

的なのに、激ハマリしたのでなんとなくまとめてみた。
正しくは、クォートを外して。

```javascript
var a = new Array;
if (a.constructor == Array) {
	console.log("Array だよ");
} else {
	console.log("Array じゃないよ");
}
/*
出力結果
Array だよ
*/
```

typeofと混同注意ということですね。
以下、適当にまとめてみた。


```javascript
function Animal(name){
	this.name = name;
}

var dog = new Animal("dog");

console.log(dog);
/*
出力結果 関数のコードが出力される。
function Animal(name){
	this.name = name;
}
*/

//けど…組み込み系はこーなる
var ary = new Array();
console.log(ary);

/*
function Array() { [native code] }
*/

//クラスの判定に使える
if (dog.constructor === Animal) { //クォートとかいらないマジイラナイ!!
	console.log("dog is Animal");
}

/* 他に instanceofを使用 */
if (dog instanceof Animal) { //これもクォートいらない
    console.log("dog is Animal");
}

//dogのconstructor Animalで作成
var bird = new dog.constructor("bird");

//クラス名を表示
console.log(dog.constructor.name);

```
PuTTY＋A5M2でMySQLへ多段SSH接続（トンネル接続）する方法

PuTTY＋A5M2でMySQLへ多段SSH接続（トンネル接続）する方法

＜システム構成＞

 クライアント → サーバーA → サーバーB → サーバーC(MySQL)

＜PuTTY設定＞

【基本設定】
ホスト名：ユーザー名@サーバーA　ポート：22
![putty1.png](https://qiita-image-store.s3.amazonaws.com/0/48625/87e633c4-5b41-0d7b-9f62-93014b77a890.png)

【トンネル設定】
源ポート：5001　送り先：サーバーB:22
![putty1-tonnel.png](https://qiita-image-store.s3.amazonaws.com/0/48625/9e5e778c-998a-e430-3a55-04db30e9035b.png)

秘密鍵を設定する

＜A5M2設定＞

【基本設定】
ホスト名：サーバーC(MySQL)　ポート：3306
ユーザーID：username
![a5m2.png](https://qiita-image-store.s3.amazonaws.com/0/48625/8f579046-d19c-74c7-a223-6d5de1348d5e.png)

【SSH2トンネル設定】
SSH2ホスト名：localhost　ポート番号：5001
ユーザーID：username　秘密鍵ファイルを指定する
![a5m2_ssh.png](https://qiita-image-store.s3.amazonaws.com/0/48625/5e3fb337-6c30-02d0-1765-8f30d296603d.png)
Software Collections (SCL) を CentOS に入れてみた

## Software Collections(以下 SCL) ってなんなの？
Red Hat が提供する最新アプリケーション（安定版）のパッケージを提供、yumの旧パッケージと共存できる、サポートは３年間、とかとかの CentOS版です。
ようするに、yum でのインストールしようとしたけど古いのしか無い場合、自分でコンパイルしたりごにょごにょしないといけないので、そういう面倒から解放されます。

## SCLのパッケージ構成
SCLから提供されるパッケージは下記のとおり（2015/1/27)。
[RHSCL1.2で提供される](http://www.slideshare.net/moriwaka/red-hat-software-collections)パッケージより少ないみたい。

| ソフトウェア | scl | パッケージ名 |
|:-----------|:----------|:----------|
|Ruby        |1.9.3 |ruby193 | 
|PHP         |5.4.16 |php54
|Apache      |2.4.6 |httpd24  |
|MariaDB     |5.5.40  |mariadb55 |
|MySQL       |5.5.40  |mysql55 |
|Node.js     |0.10    |node010 |
|Perl        |5.1.6.3  |perl516 |
|PostqreSQL  |9.2.8   |postgresql92 | 
|Python      |2.7.5   |python27 |
|Python      |3.3.2   |python33 |

## 導入してみる
### リポジトリの追加
yumでリポジトリを追加します。```/etc/yum.repos.d/CentOS-SCL.repo``` が追加されます。

```
# yum install centos-release-SCL
```

### パッケージのインストール
SCL のパッケージは、yum でインストールします。ここすこしだけ？？って思ったの所なのが、通常のyumパッケージと SCL パッケージではインストールするパッケージ名が事なる点なのです。
SCL の perl をインストールする場合は、 ```yum install perl516```

### SCL パッケージの有効化
SCL パッケージではインストールされる場所は、 ```/opt/rh``` 以下となります。そこで scl コマンドで有効化します。
※ちなみに、scl コマンドは SCL パッケージを１つでも導入しないと使えません

下記は、シェル(bash)を起動する方法

```
$ perl -v
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi

$ scl enable perl516 bash
$ perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
```

### 直接実行する

```
$ /opt/rh/perl516/root/usr/bin/perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
```

### SCL パッケージ内容

```
$ yum list | grep centos.alt
```

## 参考にさせて頂いたサイト
> [Software Collections for CentOS 6を使おう！](http://www.idcf.jp/blog/cloud/software-collections-for-centos-6/)
> [The Software Collections ( SCL ) Repository](http://wiki.centos.org/AdditionalResources/Repositories/SCL)
> [【Ruby】RailsをCentOS6.5へ。苦労した..](http://www.fwoabw.info/entry/2015/01/19/155833)
【iOS】アプリバージョンのチェック処理

サーバーから受け取ったバージョンとアプリ内のバージョンをチェックする

バージョンチェック処理を実装する度に検索していたのでメモ

```objective-c:APPDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if([self verCheck:@"1.0.1" clientVersion:@"1.0.0"]) {
        // ストアへ遷移
    }
}

- (Boolean)verCheck:(NSString *)serverVersion clientVersion:(NSString *)clientVersion
{
    NSArray *serverVersions = [serverVersion componentsSeparatedByString:@"."];
    NSArray *clientVersions = [clientVersion componentsSeparatedByString:@"."];

    if([serverVersions count] != 3 || [clientVersions count] != 3) {
        return true;
    }

    // 数値チェック
    NSCharacterSet *digitCharacterSet = [NSCharacterSet decimalDigitCharacterSet];

    for(NSString *str in serverVersions) {
        NSCharacterSet *stringCharacterSet = [NSCharacterSet characterSetWithCharactersInString:str];

        if(![digitCharacterSet isSupersetOfSet:stringCharacterSet]) {
            return true;
        }
    }

    for(NSString *str in clientVersions) {
        NSCharacterSet *stringCharacterSet = [NSCharacterSet characterSetWithCharactersInString:str];

        if(![digitCharacterSet isSupersetOfSet:stringCharacterSet]) {
            return true;
        }
    }

    if([[serverVersions objectAtIndex:0] intValue] > [[clientVersions objectAtIndex:0] intValue]) {
        return true;
    }

    if([[serverVersions objectAtIndex:1] intValue] > [[clientVersions objectAtIndex:1] intValue]) {
        return true;
    }

    if([[serverVersions objectAtIndex:2] intValue] > [[clientVersions objectAtIndex:2] intValue]) {
        return true;
    }

    return false;
}
```
Ruby で素数判定をする


急に、自分が素数判定のプログラムを書けるのか気になったので書いた。

書けたんだけど、アルゴリズムの質が低い。3 以上の整数 n に対して、2 から n-1 までの数との剰余を算出して、それがすべて 0 でなければ素数、であると判定しているため計算回数が入力数に応じて尋常ではなくなる。

その反省を込めて、ベンチマークを取ってる。おそらく素数判定なんてもはや枯れていて、ちょっと検索すれば良いアルゴリズムが掲載されていると思う。

暇で気が向いた時が来れば、それらを採用して追記する。

## 追記

エラトステネスのふるいを書いた。100まででも実行速度がけっこう違っている。

```prime_number.rb
require 'benchmark'

def prime_number?(n)
  if n < 2
    return false
  elsif n == 2
    return true
  end

  (2..n-1).each do |x|
    return false if n % x == 0
  end

  return true
end

result = Benchmark.realtime do
  limit = ARGV[0].to_i

  (2..limit).each do |n|
    p n if prime_number?(n)
  end
end

puts "処理時間： #{result}s"

def generate_prime_numbers(n)
  numbers = (2..n).to_a
  limit = Math.sqrt(n)
  prime_numbers = []

  while numbers[0] < limit
    prime_numbers << numbers.shift

    numbers.each do |i|
      numbers.delete(i) if i % prime_numbers.last == 0
    end
  end

  prime_numbers.concat(numbers)

  prime_numbers
end

n = 100
result = Benchmark.realtime do
  prime_numbers = generate_prime_numbers(n)
  p prime_numbers
end

puts "処理時間： #{result}s"
```

```shell
$ ruby app.rb 100
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
処理時間： 0.00035941600799560547s
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
処理時間： 0.0002646080101840198s
```