OmniAICreator/Qiita-1.07M huggingface dataset:
ActiveAdminを使っていてInvalid route nameが出たときの対処法

# TL;DR
ActiveAdminを使っていたら`Invalid route name`と言われてサーバーが起動しなくなったが、namespaceを文字列からシンボルにしたらとりあえずは動いた。

# 症状
ActiveAdminを導入するにあたって、いたって単純な管理画面を作ろうとしたら、サーバー起動時に

```console
$ bundle exec rails s
(略)lib/ruby/gems/2.2.0/gems/actionpack-4.2.5/lib/action_dispatch/routing/route_set.rb:549:in `add_route': Invalid route name, already in use: 'hogehoge_admin_root'  (ArgumentError)
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: 
```

などと言われて困惑。さっきまでは動いてたのに！（よくある話）

```hogehoge_admin/user.rb
ActiveAdmin.register User, namespace: "hogehoge_admin" do
 
  # See permitted parameters documentation:
  # https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters
  #
  # permit_params :list, :of, :attributes, :on, :model
  #
  # or
  #
  # permit_params do
  #   permitted = [:permitted, :attributes]
  #   permitted << :other if resource.something?
  #   permitted
  # end
   
end
```

hogeoge_admin以下に書いてあったのはこれだけ。
他にやったことといえば、以下のようにinitializer内でrootの変更をしたくらい。

```config/initializers/active_admin.rb
config.namespace :hogehoge_admin do |hogehoge_admin|
  hogehoge_admin.root_to = 'users#index'
end
```

#確認したこと
- `routes.rb`に重複する名前のルーティングはないか
なかった。`as:`オプションで記述しているところもなし。

- `routes.rb`に`ActiveAdmin.routes(self)`が２度書いていないか
http://stackoverflow.com/questions/20307766/invalid-route-name-already-in-use-admin-root-argumenterror-failed-active
ここ読んだらそんなことが書いてあったので確認してみたがなかった。

- spring止めてみた
ダメもとでやってみて当然効果なし。

#解決策
上にあるリンクでは再インストールしろと言われていて、嫌だなぁと思っていたところに、「namespaceをシンボルに変えてみて」と言われてのでやってみたら解決した。

```hogehoge_admin/user.rb
ActiveAdmin.register User, namespace: :hogehoge_admin do
 
  (略)
   
end
```

#原因
正直よくわかってない。
一回`hogehoge_admin/user.rb`内で`as:`オプション使って、やっぱり消したりしたんだけどそれが原因だったりするんだろうか。さすがになんか違う気がするけど……。
文字列をシンボルに変えて動いたっていうことは、ルーティング自体は複数回定義されていて、シンボルだと構造的に重複が許されないだけ(？)な可能性はあるような気がしていて、後々問題が顕在化しそうな予感がして気持ちが悪い。
何かご存知の方いらっしゃいましたら教えていただけると幸いです。
Java Servletでリクエストパラメータの存在確認

Servletのリクエストパラメータの存在確認のメモです。

指定したキーのパラメータが存在しなければエラーを返す、というFWを使えば用意されてそうな機能を実現するスニペットです。
keysのキーが存在しなければretにエラーメッセージを返します。

Java1.5以上で動作です。

詳しく知らないのですが、
Java8だともっと簡単できるんじゃないかとか思っています。

```java
String [] keys = {"u","email"};
String ret = checkKeys(request,keys);
```

リクエストの内容をまわして存在しないキーをみつける処理

```java
	/**
	 * キー一覧を渡して存在しないキーがあればListにいれてかえす。
	 * @param req
	 * @param keys
     * @return
     */
	public static List<String> getNotExistKeys(HttpServletRequest req,String keys[]){
		

		List<String> notExistKeys = new ArrayList<String>();
		boolean notExit;
		for(int i=0;i<keys.length;i++){
			notExit = true;

                        Enumeration<String> parameterNames = req.getParameterNames();
			while (parameterNames.hasMoreElements()) {

				String paramName = parameterNames.nextElement();
				if (keys[i].equals(paramName)){
					String paramValues = req.getParameter(paramName);
					if (!paramValues.isEmpty()) notExit = false;
				}
			}
			if (notExit == true) notExistKeys.add(keys[i]);
		}

		return notExistKeys;
	}
```

存在しないキーがあればメッセージをかえす。

```java
	/**
	 * checkKeys
	 * @param req
	 * @param keys
     * @return
     */
	public static String checkKeys(HttpServletRequest req,String keys[]){
		List<String> emptyParams = getNotExistKeys(req,keys);
		String callback = req.getParameter("callback");

		if (emptyParams.size()>0){
			return emptyParams.toString()+"が存在しません。";
		}else{
			return "OK";
		}

	}

```
もてるJMeter -インストール編-

※　作業中なので随時更新していきます

サイトに負荷テストをする想定で、
JMeter初心者がもてるJMeter使いになる為に解説

## そもそもJMeterって何？
JMeterのREADMEを超絶意訳すると、
100%Javaで作られたパフォーマンスを測定する為のツール

## まずはJMeterインストール

### 1. JMeterを以下のリンクからダウンロード
http://jmeter.apache.org/download_jmeter.cgi
![スクリーンショット 2016-01-22 11.10.41.png](https://qiita-image-store.s3.amazonaws.com/0/24013/41970ba6-13b0-0c5c-08a9-88e1c7f16266.png "スクリーンショット 2016-01-22 11.10.41.png")

#### ダウンロードしたもの
apache-jmeter-2.13

### 2. プラグインを以下のリンクからダウンロード
Stepping Theread Groupが使えるようになるプラグイン

http://jmeter-plugins.org
![スクリーンショット 2016-01-22 10.55.10.png](https://qiita-image-store.s3.amazonaws.com/0/24013/d871884b-1e2c-9443-9a1e-296ba410e508.png "スクリーンショット 2016-01-22 10.55.10.png")

#### 必要なのは以下のjar
JMeterPlugins-Standard-1/lib/ext/JMeterPlugins-Standard.jar

### 3. プラグインをJMeterにインストール
1.でダウンロードしたJMeterのディレクトリに
2.でダウンロードしたプラグインを配置する
↓
apache-jmeter-2.13/lib/ext
にJMeterPlugins-Standard-1/lib/ext/JMeterPlugins-Standard.jarを配置

### JMeter起動
以下のjarをダブルクリックして起動
apache-jmeter-2.13/bin/ApacheJMeter.jar

#### プラグインがインストールされているか確認
jp@gc - Stepping Thread Groupが確認できればok

![test.gif](https://qiita-image-store.s3.amazonaws.com/0/24013/8f43974e-2514-44ec-3668-3840b3f18a04.gif "test.gif")
SELECT文の結果に連番を振りたい時は@num などを使う

SELECT文の結果に　No.　（1,2,3,4,・・・)のような連番を振りたい時は、

以下のようなプログラムを組むとできる。

<pre>
$this->db->query("set @num:= 0");

$sql ="
       SELECT
            @num:= @num + 1 AS No,
            area_id
       ・・・・
　　　";

$this->db->query($sql);
</pre>
ChakraCoreをC#から呼び出す


[JsRT API](https://msdn.microsoft.com/ja-jp/library/dn249552.aspx)を使うと、C#からChakraCoreが呼び出せます。

[公式サンプル](https://github.com/Microsoft/Chakra-Samples/tree/master/ChakraCore%20Samples/Hello%20World/C%23/HelloWorld)を動かしてみます。
このサンプルには`ChakraCore.dll`が含まれていません。ソースコードからビルドします。

# ChakraCore.dllのビルド
[ChakraCoreをビルドする - Qiita](http://qiita.com/ledsun/items/a3bd7691b86389073c7a)に従ってビルドします。
`ChakraCore\Build\VcBuild\bin\x86_release`に`ChakraCore.dll`ができます。
x86向けビルドを使います。

# 動かす

## git clone

```
git clone git@github.com:Microsoft/Chakra-Samples.git
```

## ソリューションを開く
`Chakra-Samples\ChakraCore Samples\Hello World\C#\HelloWorld.sln`を開きます。

## ChakraCoreをプロジェクトに追加
ビルドした`ChakraCore.dll`をプロジェクトに追加します。

![スクリーンショット 2016-01-22 10.32.04.png](https://qiita-image-store.s3.amazonaws.com/0/15964/8a317d8f-34bf-1e4d-c7b7-70c139bd0b76.png "スクリーンショット 2016-01-22 10.32.04.png")

`ChakraCore.dll`のプロパティの`出力ディレクトリにコピー`を`常にコピーする`に変更します。

![スクリーンショット 2016-01-22 10.31.29.png](https://qiita-image-store.s3.amazonaws.com/0/15964/fad56d22-edec-3a8b-4c55-c48f1e2e41dc.png "スクリーンショット 2016-01-22 10.31.29.png")

## 実行
`Hello world!`が表示されます。パチパチ:sushi:
![スクリーンショット 2016-01-22 10.39.47.png](https://qiita-image-store.s3.amazonaws.com/0/15964/dc95e7dc-82d9-12dd-d3c5-5ce30c64231c.png "スクリーンショット 2016-01-22 10.39.47.png")


# 参考

ChakraCoreのインターフェースやC#のソースコードの解説は [ChakraCoreをビルドしてC#から使うはじめの一歩 - ぷろじぇくと、みすじら。 - Misuzilla.org](http://www.misuzilla.org/Blog/2016/01/14/GettingStartedWithChakraCoreFromCSharp) が参考になります。
JINS MEMEを利用したiosアプリの審査の通し方

先日、JINS MEMEというハードウェアと連携したアプリを審査に出し、何度かリジェクトされたものの無事審査を通過したのでその過程を記載します！

JINS MEMEやその他のハードウェアを買いアプリ連携をしていざ審査に出そうとしてリジェクトされた時の対処法が書いてありますので、もしハードウェア連携アプリでリジェクトされたかたがいましたらご参考にしてください！


<h1>1.特に何もせずアプリを審査に出すとリジェクトされる</h1>

最初、特に何もせず通常のアプリ同様に審査にだしたらリジェクトされました。
リジェクト内容は下記のような内容でした。

・ハードウェアが無いと審査できないアプリだよ。
・ハードウェアを宛先まで送ってね。
・宛先に送った後はこうしてね。


ハードウェアを審査の現地であるカルフォルニアまで送ってくださいという案内と共にリジェクトされます。
審査のためにJINS MEMEをもう一本、、、
カルフォルニアまで、、、

Σ(ﾟДﾟ)

さすがにもう一台ハードを審査のためだけに買うのは予算的に厳しい、、、

そこで審査用に新しくハードウェアを買わずに審査できないかを試していきました。


<h1>2.アプリを使用した動画を撮って送るのでそれを参考に審査してもらえないか？</h1>

審査のためにハードウェアをもう一台かうのは難しいが動画を撮って送ることなら簡単に出来たので、アプリの全体的な機能を手持ちのiphoneで録画しituneConnectの返事に添付して返事をしました。

返事の内容は下記のような内容にしました。
・ハードウェアは高価です。
・なので再度購入してカルフォルニアまで発送するのは難しいです。
・動画で許してください。
・動画をアップロードしたファイルサーバーのurl


これで審査が通れば！！！
と思っていたのですが、そう簡単にはいかず、、、
レビューチームからは下記のような返事がきました。

<h1>3.ハードウェアがないと審査できないよ</h1>

2回目の審査チームからの内容は下記のような内容でした。

・ハードウェアが無いと審査できないアプリだよ。
・早くハードウェア送ってね☆ミ

＼(^o^)／

やはり審査の方々はハードウェアをご所望のようです、、、
もう一個ハードウェアを買わないとダメならもうアプリのリリースを諦めようかなーと考えていたのですが、そいえばJINSさんが公式アプリだしてるならハードウェアも送ってるんじゃない？と思ったのでそのあたりを聞いてみることにしました！！

<h1>4.このアプリと同じハードウェア使ってるからカルフォルニアに同じハードウェアがあると思うのでそれを使って審査してもらえないか？</h1>

思い立ったが吉日、早速ダメ元で聞いてみることに、、、

返事の内容は下記のような内容にしました。
・ハードウェアは高価です。
・なので再度購入してカルフォルニアまで発送するのは難しいです。
・JINさんが既に同じハードウェアと連携したアプリをリリースしているみたいです。
・JINSさんがハードウェアを既に送っているかもしれません。
・同じハードウェアなのでもしあったらそれを使って審査してもらえませんか？
・同じハードウェアが使用されていてAppSoterに既に公開されてるアプリのurlを添付

今までの経験上「他の人ができてるならこっちもいいでしょ！」という言い分は審査チームには通用しないのがわかっているので、今回はあくまで同じハードウェアを既に持っていたらそれを使って審査してくれないか？という返事にしました。

すると奇跡的に突破口が！

<h1>5.バックグラウンドモードの部分も動画をとってね</h1>

ダメ元で送った結果の3回目の審査チームからの内容は下記のような内容でした。

・このアプリはバックグランドモードが使用されているよ。
・バックグラウンドモードで使用している動画も撮って送ってね。

(・∀・)

これはもしかしたら、、、と思い早速バックグランドモードの動画をiphoneで撮り、前回と同じように添付して返事をしました！！

<h1>6.バックグランドモードの動画とったよ！！</h1>

返事の内容は下記のような内容にしました。
・バックグランドモードの動画をとりました。
・動画のurlの添付

すると、数日後にinReviewになり、その日のうちにReady for Salesに！！！！

結果、ハードウェアを送らずにAppStoreにアプリをリリースすることができました！！

どうやらハードウェア連携アプリの審査は動画でも大丈夫だけどバックグラウンドモードとかに注意しないとリジェクト回数が多くなる模様です。

審査を出す際には審査提出と共に動画を添付することが最速リリースへの近道かもしれませんね！！

以下今回審査に出したアプリです。
https://itunes.apple.com/jp/app/zi-shichekku-for-jinsmeme/id1072264813?mt=8
【Slack】今更だけどメンションの種類をおさらい

# Slack
みなさんご存じのSlack。グイグイ流行っているチャットアプリです。
![slack_rgb.png](https://qiita-image-store.s3.amazonaws.com/0/55103/2a88165e-2905-622e-c472-b3cdaf8e4936.png)

# メンションって？
Twitterでいう「@umi_kappa」です。@をつけてコメントすることでそのユーザーやグループに対して呼びかけることができます。メンションで呼びかけられたユーザー側には通知が来るので、見落とすことがありません。Slackにも用意されていて、いくつか用意されているのでこれを期にまとめてみました。

# ＠ユーザー名
特定のユーザーに対して呼びかけます。

```
@umi_kappa: 焼酎飲みに行こう
```

# ＠here
コメントするチャンネル内に属しているメンバーの中で、オンラインになっているユーザーに呼びかけます。

```
＠here: 帰りに1杯焼酎飲みに行こう
```

# ＠channel
コメントするチャンネル内に属しているメンバー全てに呼びかけます。

```
＠channel: フットサル後に焼酎飲みに行こう
```

# ＠everyone
\#generalチャンネルの中で使います。参加している全てのユーザーに呼びかけます。

```
＠everyone: 今年の旅行は鹿児島へ焼酎飲みに行こう
```

# 乱用はよくない
LINEのグループでよくありますが、寝ているときに話が活発になるとスマホが終始ブルブル言ってテンション下がりますよね。特にSlackを業務で使う場合、やたらとメンションをつけてしまうとコメントを見落とす原因になります。重要な情報にはメリハリが大事です。

# 参考リンク
[Making announcements – Slack Help Center](https://get.slack.help/hc/en-us/articles/202009646-Making-announcements)
firefox，chrome，safariを強制終了させる、スマホーを再起動させる１２行のJavaScriptコード

 TwitterアカウントCybersecurityにより、公開したコードです。
 history.pushStateは任意URLをブラウザ閲覧履歴に追加するHTML5のAPIです。
 大量に追加したら、メモリ不足エラーが発生し、ブラウザが強制終了したりするようです。

    <html>
    <body>
    <script>
    var total="";
    for (var i=0;i<1000000;i++)
    {   
     total= total+i.toString();  
    history.pushState(0,0,total);
    }
    </script>
    </body>
    </html>

 
 テストURL： http://www.eison.xyz/demo.htm 　
　**実際にアクセスすると、ブラウザが強制終了していないが、かなりメモリーが食っているので、手動でプロセスを終了しました。アクセスするとき、ご注意ください。**
difference > alarm / alert > alarmの方が深刻のようだ

alarmとalertの違いが気になった。

http://www.proz.com/kudoz/English/other/174289-alert_vs_alarm.html

John Kinory
Local time: 01:45
> In current usage, an alert is usually less serious than an alarm.

TBQGS
> alert - watchful and prompt to meet danger or emergency, quick to perceive and act.

Chris Rowson
> Alert = make aware
Alarm = signal danger

色々意見があるが、alarmの方がseriousなのだろう。
Bluemix libertyアプリ用のmaven構成 （ローカルにwas-libertyがない場合）

自動生成されるアプリにeclipseプロジェクト構成も含まれるが（JavaEE5になってるっぽい…）、サーバーランタイムが無いのではunboundになっている。
ローカルのWAS liberty profileなどbluemix以外にテストサーバーを構成していない場合、サーバー・ランタイムがないのでeclipseとかでビルドすると怒られる。

pom.xmlに以下を追加してやれば、mavenがWAS liberty profileで依存しているjarをライブラリに追加してくれるので、JavaEE7構成でビルドしても怒られない。
（2016年1月現在）


```xml:pom.xml
<project>
	<repositories>
		<!-- Configure WASdev repository -->
		<repository>
			<id>WASdev</id>
			<name>WASdev Repository</name>
			<url>http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/maven/repository/</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
			<releases>
				<enabled>true</enabled>
			</releases>
		</repository>
	</repositories>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.ibm.tools.target</groupId>
			<artifactId>was-liberty</artifactId>
			<version>8.5.x.5</version>
			<type>pom</type>
			<scope>provided</scope>
		</dependency>
	</dependencies>
</project>
```
【FullCalendar】GoogleCalendarの同期について


[kotazi](http://kotazi.com)です。

[FullCalendar](http://fullcalendar.io/)のGoogleCalendar同期について。

- [Google Calendar](http://fullcalendar.io/docs/google_calendar/)

<hr>

### Google Calendar

FullCalendarではGoogle Calendarのイベントを表示することができます。
GoogleCalendarはバックエンド側で管理・保持しているイベントデータを提供することができます。
(FullCalendarにはない機能)

<hr>

### Before you code...

**GoogleCalendarのAPIキーが必要です**

1. [Google Developer Console](https://console.developers.google.com/)から新しいプロジェクトを作成してください
2. そのプロジェクトのサイドバーから、「APIs & auth > APIs」と移動します
3. "Calendar API"をオンにしてください。
4. サイドバーから「APIs & auth > Credentials」と移動します
5. "Public API access"セクション内の"Create new Key"をクリックします
6. "Browser Key"を選択します
7. カレンダーをホストするドメインが分かれば入力してください。いつでも変更できるので分からなければそのままで大丈夫です
8. 新しいAPIキーが現れます。

<hr>

**Googleを公開する**

1. GoogleCalendarのインターフェイスで、左側にある"My calendars"へ
2. カレンダーにカーソルを当て、矢印をクリックします
3. メニューが表示されるので"Share this Calendar"をクリックします
4.  "Make this calendar public"にチェックします
5. "Share only my free/busy information"にチェックが入っていないことを確認してください
6. 保存します

<hr>

**GoogleCalendarのIDを取得する**

1. GoogleCalendarのインターフェイスで、左側にある"My calendars"へ
2. カレンダーにカーソルを当て、矢印をクリックします
3. メニューが表示されるので"Calendar settings"をクリックします
4. "Calendar Address"セクションのCalendarIDを見てください。 "abcd1234@group.calendar.google.com"のようなものです。

<hr>

### Dependencies

続いて、必要なJS/CSSを追加します。標準的なファイルに加え、`gcal.js`も追加します。

```
<script type='text/javascript' src='fullcalendar/gcal.js'></script>
```

<hr>

### Writing the code

JSでカレンダーを初期化する準備が整いました。これが最小のサンプルになります。

```
<script type='text/javascript'>

$(document).ready(function() {
    $('#calendar').fullCalendar({
        googleCalendarApiKey: '<YOUR API KEY>',
        events: {
            googleCalendarId: 'abcd1234@group.calendar.google.com'
        }
    });
});

</script>
```

特定の[Event Source](http://fullcalendar.io/docs/event_data/Event_Source_Object/)オプションを追加したければ、`events`オブジェクトに含めることができます。

```
<script type='text/javascript'>

$(document).ready(function() {
    $('#calendar').fullCalendar({
        googleCalendarApiKey: '<YOUR API KEY>',
        events: {
            googleCalendarId: 'abcd1234@group.calendar.google.com',
            className: 'gcal-event' // an option!
        }
    });
});

</script>
```
<hr>

### Timezones

GoogleCalendarのプラグインでは[timezone](http://fullcalendar.io/docs/timezone/timezone/)をリスペクトしています。
`false`(デフォルト)にしておくと、GoogleCalendarのタイムゾーン設定が使用されます。特定のものを指定していれば、これらは無視されます。

<Hr>
### Multiple Google Calendars

`eventSources`オプションを利用すれば複数のGoogleCalendarを利用することができます。

```
<script type='text/javascript'>

$(document).ready(function() {
    $('#calendar').fullCalendar({
        googleCalendarApiKey: '<YOUR API KEY>',
        eventSources: [
            {
                googleCalendarId: 'abcd1234@group.calendar.google.com'
            },
            {
                googleCalendarId: 'efgh5678@group.calendar.google.com',
                className: 'nice-event'
            }
        ]
    });
});

</script>
```
<Hr>
### Advanced

カレンダーごとに異なるAPIキーを利用する場合、`googleCalendarApiKey`をセットするには個々の[EventSource]を用います。

GoogleAPIのエラーを検知する必要がある場合、jQueryのAJAZエラーハンドリングには方法がありません。FullCalendarの`googleCalendarError`を使います。
【FullCalendar】基本的な使い方



[kotazi](http://kotazi.com)です。

[FullCalendar](http://fullcalendar.io/)の基本的な使い方です。

- [Basic Usage](http://fullcalendar.io/docs/usage/)

<hr>

### Basic Usage

Webページにカレンダーを組み込む最初のステップは、正しいJSとCSSファイルを用意することです。
FullCalendarのスタイルシート、FullCalendar、jQuery、Momentファイルを`<head>`に含めたことを確認してください。

```
<link rel='stylesheet' href='fullcalendar/fullcalendar.css' />
<script src='lib/jquery.min.js'></script>
<script src='lib/moment.min.js'></script>
<script src='fullcalendar/fullcalendar.js'></script>
```

jQueryとMomentは必ずFullCalendarのJSファイルより先に読み込んでください。

もしドラッグやリサイズをするのであれば、追加する必要のあるライブラリがあるかもしれないので、[こちら](http://fullcalendar.io/docs/event_ui/Requirements/)を見てください。

依存関係を書き終えたら、カレンダーを初期化するためのスクリプトを記述します。
このコードはページの初期化後に実行される必要があります。最も良い方法はjQueryの`$(document).ready`あたりを使うことです。

```
$(document).ready(function() {

    // page is now ready, initialize the calendar...

    $('#calendar').fullCalendar({
        // put your options and callbacks here
    })

});
```

上記のコードは`<script>`タグで囲んでください。
ページ内のID`calendar`要素の中にカレンダーを生成します。

```
<div id='calendar'></div>
```

これで空っぽの月カレンダーが表示されると思います。
イベントの表示方法について学ぶには[Google Calendar](http://fullcalendar.io/docs/google_calendar/)もしくは[Event Data](http://fullcalendar.io/docs/event_data/)のセクションを参考にしてください。

<hr>

### Options

FullCalendarのドキュメントの大半は、オプションの影響や振る舞いについてです。
オプションはこのように、たいていカレンダーの初期化時にセットされます。

```
$('#calendar').fullCalendar({
    weekends: false // will hide Saturdays and Sundays
});
```

<hr>

### Callbacks

コールバックはオプションのように並べられますが、これらの関数は特別なことが起こらなければ呼ばれません。
下記のサンプルでは、ユーザーが日にちをクリックするとアラートが表示されるものです。

```
$('#calendar').fullCalendar({
    dayClick: function() {
        alert('a day has been clicked!');
    }
});
```
<hr>

### Methods

メソッドは様々な方法を提供します。
メソッドは既に初期化されたカレンダーのjQueryオブジェクトに対し、`fullCalendar`コマンドを買います。

```
$('#calendar').fullCalendar('next');
```

これは`next`メソッドです。カレンダーを次に進めるためのメソッドです。
XephyrでXサーバーネストする

[Xephyr](http://www.freedesktop.org/wiki/Software/Xephyr/)を使うと、今のXセッションに新たにネストしたXサーバーを立てることができます。Xephyrの目的の一つに、古くからある[Xnest](http://www.x.org/archive/X11R7.5/doc/man/man1/Xnest.1.html)の置き換えがあり、Xephyrの方がモダンです。Window Managerの開発に役立ちそうです。

![xephyr.png](https://qiita-image-store.s3.amazonaws.com/0/102667/5faa9ced-24b6-bbc4-4b11-67b2d74cd805.png)

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

多くのディストリビューションでは `******-xephyr` という名前のパッケージ名で登録されています。

```sh
# Ubuntu
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install xserver-xephyr
```

```sh
# Archlinux
pacman -S xorg-server-xephyr
```

起動
----

`Xephyr` コマンドで起動します。起動時に、ディスプレイ番号を指定します。

```bash
Xephyr -ac -br -screen 640x480  :1 &
# -ac    disable access control restrictions
# -br    create root window with black background
```

この状態では、真っ黒なウィンドウが表示されるだけですが、すでにXサーバーは起動しています。`DISPLAY` 変数にXephyr起動時に指定したディスプレイをセットしてXのアプリケーションを起動すると、Xephyr内でXアプリケーションが表示されます。

```bash
DISPLAY=:1 xterm &
```
UI > Link > Mail設定画面

Mail設定画面のUIについて検索

`1. こちらはSMTPについて網羅されているようだ。POP before SMTPはないようだ。
http://www.cloudaccess.net/joomla-knowledgebase/89-joomla-2-5/global-configuration/194-joomla-smtp-mail-settings.html


`2. http://mdaemon.dutaint.co.id/9.0/POPBeforeSMTP.html
POP Before SMTP。自分が探しているものとはちょっと違う。

`3 [Ricoh](http://faq.ricoh.jp/app/answers/detail/a_id/1802/~/%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3-to-e-mail-%E3%81%AE-pop-before-smtp-%E8%AA%8D%E8%A8%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-(imagio-mp-c%2Fmp,-web-%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%BC))
画面は小さいが、項目「8」においてPOP before SMTPの入力例がある。

`4 [iodata](http://www.iodata.jp/lib/manual/raidmonitor/htm/change_mail.htm)
項目「４」。
比較的見やすい気がする。
OSX GlobalProtect トラブル時のコマンド

## GlobalProtect とは
Paloalto networks の NGFW についてくるSSL-VPNクライアントのこと

## GPのトラブル

* ウェブプロクシを設定している場合、SSL-VPNクライアントがプロクシ経由のソケットをつかんだまま離さないことがある。
    * プロセスがつかんでいるポートを調べる

```
sudo lsof -i -P
```

* モバイルなどでプロファイルを変更したにもかかわらず、すでにいないウェブプロクシをつかんでいる場合は殺すしかない。
    * プロセスを殺すと自動で再起動してくる。うまくいけば再接続出来る。

```
pgrep 'GlobalProtect|PanGPS'
sudo pkill 'GlobalProtect|PanGPS'
```

* 最終手段、アンインストール
    * プロセスを殺しても殺しても古いソケットをつかんだままの時もある、再インストールするのが最も有効な回避策になる。

```
sudo /Applications/GlobalProtect.app/Contents/Resources/uninstall_gp.sh
```

というわけで、GPのトラブルはよく遭遇するので、GlobalProtectポータルのアドレスとGP用のid/パスワードを覚えておけば、再インストールでの最終回避が取れる。
EXCEL > あるセルの値が他のどのセルで使われているかわからない > [数式]-[参照先のトレース]というのがあると教えていただいた。

```txt:動作確認
EXCEL 2013 on Windows 8.1 pro (64bit)
```

膨大な計算式から構成されるEXCELシートを渡されてそれを検証する時に困るのが、あるセルの値が他のどのセルで使われているかすぐにわからないこと。
反対に、あるセル（数式のセル）をクリックすると、式の項として使われているセルが色つきで表示される機能はある。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/45c4672e-b8b7-63ff-283e-66152a8465f3.png)

欲しい機能は、C3セルをクリックした時に、C8などの使用している場所が分かる機能。

自分のEXCELの知識(ほとんどない）では、各セル(C8など)をクリックしてそれに表示される式を順番に見ていくだけ。でも非常に探しにくく時間が無駄にかかる。

VBAなど組んで検索するのがいいのだろうか。
Elixir+Phoenix+reactでjsxで書いたところがUnexpected tokenになった時の対処メモ

react導入して、試しにapp.jsに以下を追加したところ、jsxで書いた部分がUnexpected tokenになったので、対処法をメモっておきます。

app.jsの内容はこんな感じです。

```javascript:web/static/js/app.js
// 最下部に追加
import React from 'react';
import ReactDOM from 'react-dom';

let HelloWorld = React.createClass({
  render: function() {
    return (
      <h1 className="jumbotron">Hello World!</h1>;
    );
  }
});

ReactDOM.render(
  <HelloWorld />,
  document.getElementById('hello');
);
```

一応htmlも

```web/templates/page/index.html.eex
<div id="hello"></div>
```

この状態でサーバ起動するとこんな感じで怒られてしまいました。

```zsh
$ mix phoenix.server
[info] Running Tutorial.Endpoint with Cowboy using http on port 4000
[BABEL] Note: The code generator has deoptimised the styling of "bower_components/jquery/dist/jquery.js" as it exceeds the max of "100KB".
[BABEL] Note: The code generator has deoptimised the styling of "bower_components/react/react.js" as it exceeds the max of "100KB".
22 Jan 01:03:22 - info: compiling...
22 Jan 01:03:23 - error: Compiling of web/static/js/app.js failed. web/static/js/app.js: Unexpected token (28:16)
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
```

どうやらReactDOM.renderの()内でエラーしていて、jsxをそもそもコンパイルしてくれてないっぽい。

必要そうなパッケージは入ってるはず、、、

```json:package.json
"dependencies": {
  "babel-preset-react": "^6.3.13",
  "react": "^0.14.6",
  "react-dom": "^0.14.6"
}
```

この辺のものは一通り入っているのに動かない、、、

なぜ？
ってなってたんですが、brunch-config.js
のpluginsを以下のようにしたら無事動きました！

```js:brunch-config.js
exports.config = {
  // 省略
  plugins: {
    babel: {
      // presets追加
      presets: ["es2015", "react"],
      ignore: [/web\/static\/vendor/]
    }
  },
}
```

## 結果

```bash
$ mix phoenix.server
[info] Running Tutorial.Endpoint with Cowboy using http on port 4000
[BABEL] Note: The code generator has deoptimised the styling of "bower_components/jquery/dist/jquery.js" as it exceeds the max of "100KB".
22 Jan 01:07:10 - info: [BABEL] Note: The code generator has deoptimised the styling of "bower_components/react/react.js" as it exceeds the max of "100KB".
22 Jan 01:07:15 - info: compiled 8 files into 2 files, copied 3 in 11.6 sec
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
```
2016-01-22 c++ builder XE4, 10.2 Tokyo > TeeChart > 折れ線グラフにてデータがないところの線を切る (+ データ欠損処理)

```txt:動作環境
C++ builder XE4
    TeeChart Lite v2013.08.130414
RAD Studio 10.2 Tokyo Update 2 (追記 2018/01/10)
    TeeChart v2016.17.160129 32bit VCL
```

折れ線グラフでデータがない線分を切る方法はいくつかあるようだ。
http://stackoverflow.com/questions/24311851/line-pieces-in-tee-chart-lite-xe5

null pointsを使ってみた。手順は以下。

1. 初期化で`Series1->TreatNulls = tnDontPaint;` を実行する
2. `Series1->AddNullXY(dx, dy);`を切りたい場所で実行する


```Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <DateUtils.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
	Chart1->Series[0]->XValues->DateTime = true;
	Chart1->BottomAxis->DateTimeFormat = L"nn:ss";

	TDateTime dt;

	Series1->TreatNulls = tnDontPaint; /*1*/

	double dx, dy;
	dt = Now();
	for (int idx=0; idx < 20; idx++) {
		dy = random(1000);
		dx = (double)dt;
		Series1->AddXY(dx, dy, "", clRed);

		if ((idx % 5) == 0) {
			Series1->AddNullXY(dx, dy);  /*2*/
		}

		dt = IncSecond(dt, 1);
	}
}
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/92090c64-9cd0-d903-62c7-1dde2a0c7669.png)


### データ欠損処理
(追記 2018/10/24)

- [c++ builder XE4, 10.2 Tokyo > TeeChart > seriesの最後のX値を取得する > Series1->XValues->Last();](https://qiita.com/7of9/items/607f9d0a1fa19d731abe)

「直前のデータの日時」と「追加するデータの日時」が離れている場合、欠損期間として線を引かない
というような実装が考えられる。


### 検索用キーワード
(2019-09-11追加)

- 切断
-
EditorWindowSample

```lang:LogEditorWindow
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;

class LogEditorWindow : EditorWindow {
	[MenuItem ("Window/Log")]

	public static void  ShowWindow () {
		EditorWindow.GetWindow(typeof(LogEditorWindow));
	}

	Vector2 scrl = Vector2.zero;
	List<string> logs = new List<string>();
	void OnGUI () {
		scrl = GUILayout.BeginScrollView (scrl, "box");
		GUILayout.BeginVertical ();
		foreach (string log in logs)
			GUILayout.TextArea (log);
		GUILayout.EndVertical();
		GUILayout.EndScrollView ();

		if (GUILayout.Button ("clear"))
			logs.Clear ();
	}
}
```
Rust 1.6 がリリースされました

Rust 1.6 がリリースされています。Rust は、安全性、スピード、並列プログラミングにフォーカスした、システムプログラミング向けの言語です。

- オフィシャルブログの [リリースアナウンス](http://blog.rust-lang.org/2016/01/21/Rust-1.6.html)
- [リリースノート](https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-160-2016-01-21)（GitHubリリースページ）

（この記事はリリースアナウンスの抄訳です）

## 1.6 安定版の内容

### libcore の安定化

[`libcore`](http://doc.rust-lang.org/nightly/core/) が stable になりました！　Rust の標準ライブラリーは２層構成になっており、コンパクトなコアライブラリーの `libcore` と、その上に構築されたフル機能の標準ライブラリー `libstd` があります。`libcore` はプラットフォーム非依存で、一握りの外部シンボル定義しか必要としません。`libstd` は `libcore` の上に構築され、メモリー割り当て、I/O、並列プログラミングなどの機能を提供します。組み込みアプリケーションや、オペレーティングシステムの開発者は、`libstd` に頼らず、`libcore` だけを使う傾向にあります。

`libcore` が安定化されたことは、最も低いレイヤーのソフトウェアの開発に安定版の Rust を用いるための、大きな一歩となります。とはいえ、まだ作業は残っています。`libcore` を使ったライブラリーエコシステムの開発は可能になりましたが、アプリケーションはまだ完全にはサポートされていません。これについては、今後のリリースでお知らせできるでしょう。


### ライブラリーの安定化

1.6 では約 30 の関数とメソッドが安定化されました。特筆すべき改良点を挙げましょう。

Collections の `drain()` 関連のメソッド。これらのメソッドは、割り当て済みメモリーを保ったまま、コレクションから要素を外すもので、特定の条件では割り当てメモリーを減少できます。

主に、整数や浮動小数点型に対する `From` 実装。`From` は標準ライブラリーのある型から別の型への変換に使われます。

`Vec::extend_from_slice()` は以前は `push_all()` として知られていました。このメソッドでは、より汎用的な `extend()` よりも、ずっと高速な実装が採用されています。

詳細については、[リリースノート](https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-160-2016-01-21) を参照してください。


### Crates.io でワイルドカードが使用不可に

Crates.io では、今後、dependencies のワイルドカード指定（`*`）を受け付けなくなります。特定のバージョン、もしくは、バージョン範囲を指定してください。

ワイルドカードで指定するということは、どのバージョンとでも動くという意味になりますが、ほとんどの場合はそうなっていません。依存関係に関する余計なトラブルの元になりますので、今後は、そのような指定を受け付けなくなります。
いつの間にかYouTubeが公式にリピート機能をサポートしてた

スクリーンショットのように動画上にマウスをフォーカスし、右クリックするとLoopという項目が出てくるのでクリックするとリピート再生ができる。

![youtube.png](https://qiita-image-store.s3.amazonaws.com/0/6595/8a3502fa-edb9-2330-b74b-e60898a89e82.png)
[小ネタ]RubyでTSVを読み込む

個人メモ。
TSVをRubyで読み込んでごにょごにょした時のメモ。

以下のようなコードを書いた。

```rb
#! /usr/bin/env ruby

require 'csv'

def check_args
  file = ARGV[0]

  if file.nil? 
    puts "Usage: ./tsv.rb [FILE]"
    exit 1
  end

  unless File.exist?(file)
    puts "[ERROR] Can't read file. File path = #{file}"
    exit 1
  end
end

# main
check_args
file = ARGV[0]

csvDatas = CSV.read(file, col_sep: "\t", headers: false)
csvDatas.each do  |row|
  puts row[0]
  puts row[1]
  # ...
end
```

# はまったポイント1

`CSV.read(file, col_sep: "\t", headers: false)`で　`'\t'`　と書いてしまい、タブ区切りで文字が読み込めなかった。

Rubyではシングルクオートで囲むと\tや\nという感じでエスケープシーケンスが使えため。

[[Ruby]シングル/ダブルクォーテーションの差異](http://nasa.rejec.net/wp/blog/2012/12/22/ruby%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%80%E3%83%96%E3%83%AB%E3%82%AF%E3%82%A9%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%B7%AE%E7%95%B0/)

# はまったポイント2

自分のRubyの環境(2.1)では問題なかったが、1.8を使っている人がエラーに。。。

以下に書いてあるようにCSVクラスの使い方が違ったようである。

[RubyでTSVファイルを読み込む方法](http://altarf.net/computer/ruby/1414)

>(1.8の人は)第3引数に区切り文字の”\t”を指定する。
>(2.0以上の人は)　:col_sepオプションで \t を指定する

まあとはいえ、2016年1月22日現在1.x系はサポートされていないので、素直にバージョンアップしてくださいという話ではある。。。
AutoLayout でレイアウトした コンテナ ViewController 内の ViewController をアニメーションして入れ替える 

そもそも Container View Controlloer を設定する方法は下記を参考に。
[カスタムContainer View Controllerを作る](http://qiita.com/edo_m18/items/8b6b457f82b185ab1f6a)

下記は AutoLayout で実行した例。ただしアニメーション開始位置だけは簡便のため frame を使っている。

```swift
    func transientToViewController(newMainVC : UIViewController ){
        let currentVC = self.currentVC // この例ではインスタンス変数で保持しています。もしくは引数で渡したりしてください。
        currentVC.willMoveToParentViewController(nil)
        self.addChildViewController(newMainVC)
        self.view.addSubview(newMainVC.view)
  
        // アニメーション開始前の初期位置を設定 ここでは上部からスライドするように設定
        let width = currentVC.view.bounds.size.width
        let height = currentVC.view.bounds.size.height
        newMainVC.view.frame = CGRectMake(0 , -height ,width,height)
        
        self.transitionFromViewController(
            currentVC,
            toViewController: newMainVC,
            duration: 0.25,
            options: [ UIViewAnimationOptions.TransitionNone ], // ここのオプションを変えると紙をめくるようなエフェクトになったりする
            animations: {
                self.rebuildConstraints() // 最終的なレイアウトを行う
                self.view.layoutIfNeeded() // **これ重要** これがないとアニメーションしない
            },
            completion: { (success : Bool) in
                currentVC.view.removeFromSuperview()
                currentVC.removeFromParentViewController()
                self.prevViewController = currentVC
                
        })
        
    }

```

AutoLayout で やるには ``animations`` の中で ``layoutIfNeeded`` を呼び出さないとアニメーションしないことに気がつかなくて結構はまった。
技術英語 > Sounds like you need a pilot? / Know anyone [who's qualified]? / You're more than qualified.

@ Star Trek Voyager > NON SEQUITUR

あるパラレルワールドでの状況にて

> Sounds like you need a pilot?

と聞いていくるトム・パリスに対してキムが

> Know anyone <font color=red>who's qualified</font>?

上記の訳としては以下の様なもの
トム・パリス「パイロットが必要のようだな」
キム「誰かいい人を知ってるか？」

パラレルワールドでない場面では、トム・パリスが一級のパイロットとして活躍している。そのトムに対してキムが上記のような質問をしているのが面白い。

<hr>
関連して思い出したのは

http://eow.alc.co.jp/search?q=more+than+qualified&ref=sa

Voyagerの別のエピソードで出てきた。Tuvokがクルー(Neelix?)に対して以下のように言っていた。

> You're more than qualified.

こちらもあった。
http://qiita.com/7of9/items/a429cc104edc12bde164
ssh-addで記憶した鍵を登録削除したい場合

* 席立つときやcronで`ssh-add -D`するのも良いですね。

## ssh-add

```bash:usage
usage: ssh-add [options] [file ...]
Options:
  -l          List fingerprints of all identities.
  -E hash     Specify hash algorithm used for fingerprints.
  -L          List public key parameters of all identities.
  -k          Load only keys and not certificates.
  -c          Require confirmation to sign using identities
  -t life     Set lifetime (in seconds) when adding identities.
  -d          Delete identity.
  -D          Delete all identities.
  -x          Lock agent.
  -X          Unlock agent.
  -s pkcs11   Add keys from PKCS#11 provider.
  -e pkcs11   Remove keys provided by PKCS#11 provider.
```

### -t

* 記憶する時間（秒）を指定

### -l

* 記憶した鍵の登録一覧表示
* `-L`詳細に表示

### -D

* 記憶した秘密鍵の登録を削除
* `-d`で個別に削除できる

### -x

* パスワードを入力
* `-X`するまでssh-addしたものを使用しない。
* `-X`し`-x`時に設定したパスワードと一致するとssh-addしたもの使う。
Javaのコレクションクラスについて

配列とコレクションの違いについてまとめようと思います。

配列は複数のデータをひとつにまとめておく方法。
![array01.png](https://qiita-image-store.s3.amazonaws.com/0/33329/7f295d1e-948e-c51c-ded4-4a8a55a5ff7d.png)
**※事前に配列のサイズを決める必要がある**
また連続したデータとなります。

画像 参照：http://www.mlab.im.dendai.ac.jp/programming/basic/02/#%281%29

![ collection.jpg](https://qiita-image-store.s3.amazonaws.com/0/33329/26c68459-965d-b31d-7a9b-74965d881f1d.jpeg)
(図はinkscapeを使用して自作)

##配列とコレクションの違い

**配列を使ったコード**

```java:Hairetu.java
　//配列を確保
　String[] names = new String[3];
  
  //3人追加
  names[0]="田中";
  names[1]="鈴木";
  names[2]="斎藤";

  System.out.println(names[1]);
```

ArrayLIst(コレクション)を使ったコード

```java:ArrayList.java
  import java.util.ArrayList;
  
  //ArrayListを確保
  ArrayList<String>names = new ArrayList<String>();
  //3人を追加
  names.add("田中");
  names.add("鈴木");
  names.add("斎藤");

  System.out.println(names.get(1));
```

配列とArrayListの使い方は似ていますが、**以下の三つが特に異なります。**

###1、import文を記述する
ArrayListをはじめとするコレクションリストはjava.utilクラスに属するため、通常はimport文を用いることが一般的です。

###2、不等号のカッコを使用し格納するものの方を使用する
**配列ではString[]**でしたがArrayListではArrayList\<String>のように記述します。
またArrayList\<String>の部分はArrayList\<HogeHoge>のように好きなオブジェクトを格納することができます。

###３、確保（宣言時）の時にサイズを指定せず、要素は随時追加が可能！
配列は宣言する時にサイズが幾つ必要か記述し、後からサイズを増やすことはできません。
一方ArrayListをはじめとするコレクションリストクラスは、宣言の際に要素のサイズを指定しません。**なぜならば、データを追加しようとした時に、随時自動的に追加されていくからです。**

デメリットもあります。それはメモリ効率が配列の方がいいことや点数などのintの値をそのまま入れないことです。
ArrayList\<int>と書くことはできず、ArrayList\<Integer>のようにインスタンスに変換してあげなければなりません。つまりインスタンスは全て格納可能です。

##ArrayListの使いかた

ArrayListはこれで宣言することができる。
ArrayList\<String> sakana = new ArrayList\<String>();

以下ArrayListを用いたSampleコードを示す

```java:ArrayTest.java
import java.util.ArrayList;

class ArrayTest{
  public static void main(String args[]){
    //ArrayListを確保
    ArrayList<String> sakana = new ArrayList<String>();
    sakana.add("金魚");
    sakana.add("出目金");
    sakana.add("アンコウ");
    sakana.add("サバ");
    //格納した情報を全て表示
    for(int i=0;i < sakana.size();i++){
      System.out.println(sakana.get(i));
    }
    //指定した場所の値を上書きする
    //1は実際には2番目の値ということになる
    //この場合は出目金→うなぎ
    sakana.set(1,"うなぎ");
    //空行をはさむ
    System.out.println();
    //格納した情報を全て表示
    for(int i=0;i < sakana.size();i++){
      System.out.println(sakana.get(i));
    }
  }
}
```

```asa:実行結果
金魚
出目金
アンコウ
サバ

金魚
うなぎ
アンコウ
サバ
```

今まで配列を使ってきた自分からは新鮮なものに感じました。おわり。

>引用
スッキリわかるJava入門　実践編　第二版
著者　中山清喬
>

とてもわかりやすく入門編も実践編も共にオススメの書籍です。
[JAWS-UG HPC] CfnCluster ハンズオン 事前準備 Amazon Linux

# Amazon Linuxの起動からログインまで
cfnclusterでクラスター作成する(http://qiita.com/daikumatan/items/23b36199fc6872c78dc0) ために、ひとつAmazon Linuxを起動させます。
## Amazon Linux起動
- Go to AWS Console : https://console.aws.amazon.com/
- Tokyoリージョン選択して、EC2を選択
![image](https://qiita-image-store.s3.amazonaws.com/0/93823/eb342364-bf15-0753-a606-84bad1063b97.png)

- Instances -> Launch Instance
- [Step1] Amazon Linuxを選択
- [Step2] Instance typeの選択、t2.microでOK
- [Step3] Network設定、Default VPC + Public IP Enable
- [Step4] Storage 8GBのデフォルトでOK
- [Step5] Tagは適当につけてOK
- [Step6] SSH #22portだけ空けときましょう
- [Step7] これまでの設定チェック

- EC2の起動手順の最後に作成 or 選択したpem keyをつかってAmazon Linuxにアクセスします。
<img width="350" alt="スクリーンショット_012216_032722_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/97e6c15d-29b6-f09f-3699-d8f0a2076c27.jpeg">

- アクセス時に必要なものは
-- Public IP or Public DNS (EC2 Consoleから確認しましょう)
-- User name = ec2-user (Amazon Linuxの場合)
-- 準備したpem key

## Windowsの場合
- TeraTermだとpem keyそのまま使えるので楽です
- https://ttssh2.osdn.jp/
<br>
<img width="368" alt="スクリーンショット_012216_033931_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/7af73aed-1698-8bc9-1309-5044c7b9c792.jpeg">
<img width="354" alt="スクリーンショット_012216_033655_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/bdc7c2cd-3db6-6090-6c87-c42dfb72e2c5.jpeg">

--どうしてもputty使いたい場合はこちら参照
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/putty.html


## Mac or Linuxの場合
- 普通にsshコマンド叩きましょう
- ssh -i {path/to/key/XXXX.pem} {ec2-user} {public IP/Public DNS}
Sequelizeのerror(),success()はもう死んでいる

# はじめに
[こちら](http://qiita.com/hiro93n/items/da62f07c1d3b67ad8e79)でも言及されていますが，Sequelizeでは最新のVersionではerror()，successといった関数は死んでいます．

# 最新の記述方法

例えば，UserというModelのIdに一致するレコードを取得したい場合は，
expressを利用していると以下のようなコードに成ります．

```js
 User.findOne({where:{id:req.params.id}})
            .then(function(user){
                res.json(user);
            })
            .catch(function(err) {
                if(err)
                    res.json(err);
            });
```

**thenは従来のsuccess(),catchが従来のerror()**に対応しています．
古い文献のコードをコピペしても動きません．ご注意ください．
[JAWS-UG HPC] CfnCluster ハンズオン 事前準備 IAM編

# IAMの設定
CfnClusterを使ってクラスターを構築するとき(http://qiita.com/daikumatan/items/23b36199fc6872c78dc0) のために、ひとつIAMユーザを準備します。

- AWSマネージメントコンソールからIdentity & Access Management(略してIAM)を選択
<img width="207" alt="スクリーンショット_012216_022058_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/e725dfbf-4564-cd52-95f3-d0479d70c18c.jpeg">


## Userの作成
- Users -> Create New Users
<img width="380" alt="スクリーンショット_012216_022607_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/0ba81e4c-fe4a-4c89-b377-a92d523af63d.jpeg">


- ユーザ名を入力し、Createをクリック
<img width="160" alt="スクリーンショット_012216_022819_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/32b70ba3-8f66-3e98-7412-6d6286adaca1.jpeg">


- 作成したユーザのクレデンシャルを確認、
- Access Key IDとSecret Access Keyの値をメモるかダウンロードする
<img width="466" alt="スクリーンショット_012216_023256_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/e09c0b78-72e8-0ed1-3afa-4dec2cc515c5.jpeg">


## Groupの作成
- Groups -> Create New Group
<img width="419" alt="スクリーンショット_012216_023609_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/f45f617c-3d7c-fa85-3d39-bc2274ab4dda.jpeg">

- Group名を入力
<img width="476" alt="スクリーンショット_012216_023759_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/ab3aab00-8c39-3efa-d2e5-9f19541363c8.jpeg">

- Groupに権限を定義
- cfnclsuetrは裏でいろんなサービスが動いているのでまじめに権限設定すると面倒くさいので、ここではフル権限のAdministratorAccess <br>
<img width="694" alt="スクリーンショット_012216_024137_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/f4c14d09-9785-b998-bfdc-bbda98734338.jpeg">

- 内容確認して、Create Groupをクリック
<img width="526" alt="スクリーンショット_012216_024327_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/cb3ea064-7957-0aab-ab00-794e3db7da6e.jpeg">

## Userに権限付与
- 作成したUserを、作成したGroupに加える <br>
<img width="418" alt="スクリーンショット_012216_024842_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/339a8f75-019c-447a-49e5-948243d38135.jpeg">
<img width="408" alt="スクリーンショット_012216_025020_AM.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93823/58802298-519c-2603-7c00-f15b7b973c68.jpeg">

## 終わり
- 以上でIAMユーザの作成と権限設定は完了です。メモ or ダウンロードしたクレデンシャルは無くさないように保管してください。
テンプレートの推論された型をお手軽確認

#テンプレートを書いていて、推論された型を確認したい
テンプレートを記述していると
「この引数を与えたときには、`T`がどう推論されるのか？」
なんて思うことは良くありますよね？

嗚呼、そんなとき、どーしたらよいのでしょーか？

たとえば

```cpp
template < typename T >
void f(T&&){}

void g(int const&){};

int main(){
    f(g);
}
```

この場合の`T`がどう推論されるのか知りたい！
と思ったとき、どうしますか？


1. 諦める
2. IDEに頼る
3. typeid.name()を使う
4. Boost.Typeindexを使う
5. Attributeを使う（C++14）

#IDEに頼る
フォーカスすると情報が表示されるのを利用する
IDEを使っている場合は概ねこれで事足りる
![ET.png](https://qiita-image-store.s3.amazonaws.com/0/100319/0a9cdff9-86a6-bded-f12b-c865e4d783b0.png)

#typeid.name()を使う
<typeinfo>ヘッダをインクルードして
この方法では実行時までわからない型情報を表示することができるので
`RTTI(Run Time Type Identifier)`と呼ばれている

```cpp
#include <iostream>
#include <typeinfo>
using namespace std;

template < typename T >
void f(T&&){ cout << typeid(T).name() << endl;}

void g(int const&){};

int main(){
    f(g);
}
```

実行結果
>FvRKiE

めでたしめでたし...

いやまて、何だこの文字列は！！

typeidで取得できる型名はそのままではマングルされていて
容易に読むことはできないのである(Microsoft コンパイラは読める文字列を返す)
デマングルするには次のようにする

```cpp
#include <iostream>
#include <typeinfo>
#include <cxxabi.h>
using namespace std;

template < typename T >
void f(T&&){
    const type_info& id = typeid(T);
    int stat;
    char *name = abi::__cxa_demangle(id.name(),0,0,&stat);
    if( name!=NULL ) {
        if( stat==0 ) {    // ステータスが0なら成功
            printf("T = %s",name);
        }
        free(name);        // freeする必要がある
    }
}

void g(int const&){};

int main(){
    f(g);
}
```


#Boost.Typeindex

Boost.Typeindexを使えば環境によってマングルされていたり
されていなかったりすることはないと思われる

```cpp
#include <iostream>
#include <boost/type_index.hpp>
using namespace std;

template < typename T >
void f(T&&){ cout << boost::typeindex::type_id_with_cvr<T>().pretty_name() << endl;}

void g(int const&){};

int main(){
    f(g);
}
```

実行結果
>void (&)(int const&)

めでたしめでたし...

しかし、ちょっと待てよ
これは面倒ではないか？

もっと手軽な方法がC++14には存在する

#Attribute [[deprecated]]

`[[deprecated]]`指定してしまうのだ！
そうすれば非推奨された関数が使用されたことを悟ったコンパイラは
警告文を出す
そう、引数の型名も同時に表示してくれる！

```cpp
template < typename T >
[[deprecated]] void f(T&&){}

void g(int const&){};

int main(){
    f(g);
}
```

警告文

```
prog.cc: In function 'int main()':
prog.cc:8:8: warning: 'void f(T&&) [with T = void (&)(const int&)]' is deprecated [-Wdeprecated-declarations]
     f(g);
        ^

>prog.cc:3:21: note: declared here
 [[deprecated]] void f(T&&){}
                     ^
```

この方法ではヘッダをインクルードすることも
デバッグ出力を書くことも
もはや必要が無い！！
QiitaにNode.jsから記事投稿


過去に[Qiita APIのNode.jsクライアントで限定公開記事を投稿してみる。](http://qiita.com/n0bisuke/items/336be188fb37b69f6112)という記事を書いたのですが、今回は別のパッケージを使って同様のことをやってみます。

## Qiitaというパッケージ

これです。 (非公式なはず)
https://github.com/sakatam/node-qiita

```bash
npm i qiita
```

で入ります。


### ちなみに公式はこっち

https://github.com/increments/qiita-js

```bash
npm i qiita-js
```

で入ります。 

公式のよりも非公式なパッケージの方が`qiita`って名前を取ってたんですね。

## サンプル

npmのページにあるサンプルはCoffeScriptな書き方になっていたのでES2015に書き換えました。
https://www.npmjs.com/package/qiita

```bash
$ node -v
v5.3.0
```

```qiita.js
'use strict';

let Qiita = require('qiita');
let q = new Qiita({token:'xxxxxxxxxxxxxxxxxxxxxxxx'});

let postdata = {
  title: '吾輩は猫である',
  body: '吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当が.....',
  private: true,
  tags: [{name: '小説'}]
};

q.items.post(postdata, (err, res, body) => {
  if(err) return;
  console.log('successfully posted to Qiita.');
});
```

>xxxxxxxxxxxxxxxxxxxxxxxxはアクセストークンです。 Qiitaのユーザー設定のあたりから取得できます。

これで実行すると

![](https://i.gyazo.com/4afd177e30686f43aab1f0f4530fdf16.png)

こんな感じで限定公開記事ができます。


`postdata`のオブジェクトに何を突っ込むかは公式ドキュメントを読みましょう。
http://qiita.com/api/v2/docs#投稿
gitのインストール

Gitのインストール

Gitサイト（http://git-scm.com/）から以下の手順でインストーラーをダウンロードしてインストール

1. Downloadsをクリック
2. 利用しているOSのリンクをクリック
3. git-2.2.1-intel-universal-mavericks.dmgみたいなファイルがダウンロードされるので、箱のアイコンをクリックして実行。（エラーダイアログが表示される場合、右クリックで「開く」を選ぶと何故か開けます。）

インストールは以上で完了です。

Gitがインストールされたか確認してみましょう。

以下のコマンドをターミナルで入力。

git --version

gitのバージョンが表示されたらOKです。

gitがインストールされた場所は以下のコマンドで確認できます。

which git
【Java】バブルソートの実装

# 動機
・処理速度を意識しながらコードをかけるようにとのことで、プログラムのアルゴリズムの復習もかねて、まずはバブルソートを実装を行った。

# バブルソート
隣合う要素の大小を比較しながら、整列させること。計算時間が遅いが、アルゴリズムが単純で実装が容易なことと並列処理との親和性が高いことからしばしば用いられる安定な内部ソートのこと。

##### バブルソート実装コード

```BubbleSortTest.java
public class BubbleSortTest {

    static void bubble_sort(int[] d) {
        // iはi回目の交換する回数
        for (int i = d.length-1; i > 0; i-- ) {
            // j は交換する箇所の前からの番号を示している
            for (int j = 0; j < i; j++) {
                if(d[j]>d[j+1]){
                  //降順にしたい場合は不等号を逆に
                  int box = d[j];
                  d[j] = d[j+1];
                  d[j+1] = box;
                  System.out.println(d[j] + ":" +d[j+1]);
                } else{
                  //そのまま
                }
            }
        }
    }
    static void print_data(int[] d) {
        for(int i = 0; i < d.length; i++) System.out.print(d[i] + " ");
    }
    public static void main(String[] args) {
        int[] data = {5, 10, 3, 7, 8, 1, 9};
        print_data(data);
        bubble_sort(data);
        print_data(data);
    }
}

```

以下のコマンドでコンパイルして実行

```
$ javac BubbleSortTest.java
$ java BubbleSortTest
```

# 実行結果

```
5 10 3 7 8 1 9 3:10
　　　↓　// ここは記載していないが。。。
1 3 5 7 8 9 10 
```
HexoのサイトをさくらVPSにデプロイしてみた

Hexoの読み方が未だによくわかりません。
ヘキソ？

##はじめに

思い込みって怖い。
サーバーはド素人なのに、VPSにHexoのサイトを置こうと思ってnodeやらnvmやらmp2やら入れて稼働もできたけど、必要無かったお話。
node.jsの勉強にはなってよかった。

##目指す所

ローカル（Mac）で作ったHexoのサイトを、さくらVPSにデプロイする。
サイトが見れれば良いので、Hexoそのものはサーバーで動かさない。
Hexoはgenelateしたファイルを全部publicフォルダに入れるので、このファイル群をHexoからデプロイできれば良い。


##ウェブサーバーの設定

apatchでもいいですが、借りっぱなしのVPS、勉強がてらnginxで設定してみました。

###nginxのインストール

ルート権限で、yumからnginxをインストール。

```bash
sudo yum update
sudo yum install nginx
```

インストールしたら、設定ファイルをVimで編集。

```
sudo vim /etc/nginx/conf.d/default.conf
```

バーチャルホストの設定を追加。
複数サイトを追加したいときは、`server {}`をコピーして必要な箇所を書き換えればとりあえず増やせます。
`hogehoge.com`を各自の設定に変更してもらえれば使えると思います。

```lang:default.conf
server {
    listen       80;
    server_name  hogehoge.com;

    charset utf-8;

    access_log  /var/log/nginx/hogehoge.com.access.log  main;

    location / {
        root   /usr/share/nginx/html/hogehoge.com/public;
        index  index.html index.htm;
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html/hogehoge.com/public;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html/hogehoge.com/public;
    }
}
```

###デプロイ先のディレクトリの権限をユーザーに変更

公開用のディレクトリ内をユーザー権限で操作できるようにしておくのが必要なはずなのでやっておく。
`<username>`は書き換えて下さい。

```bash
$ sudo chown -R <username>:<username> /usr/share/nginx/html/hogehoge.com
```
サーバー側の設定はこれで終わり。


##ローカル環境で記事を作成

nodeとnpmをインストールしてあれば、作れます。
他の紹介記事がたくさんあるので詳細は割愛。

```bash
#npmでhexoをインストール
$ npm install hexo-cli -g

#サイトを構築したいディレクトリで設定
$ hexo init
$ npm install

#記事編集したら書き出し
$ hexo g

#vpsへデプロイ
$ hexo deploy

#デプロイ時にgenelateすることも出来る
$ heco deploy -g
```

##デプロイはRsyncで

GitHub Pagesはgitでやりますが、vpsなので、rsyncでpublicディレクトリを同期する事にします。
Hexoのdeploy typeにも用意されているので、initしたディレクトリにある`_config.yml`に設定を記述します。
ターミナルからsshでサーバーにログインするときの情報を入れれば良いかと。

```_config.yml
#deployの設定のところだけ抜粋
deploy:
  type: rsync
  host: <your site ip>
  user: <user name>
  root: /usr/share/nginx/html/hogehoge.com/public
  port: <port number>
  delete: true
  verbose: true
  ignore_errors: false
```

Rsyncが許可されている必要があるみたいですが、さくらVPSの初期設定の状態ではデプロイできました。
ただ、設置に満足して更新しなさそうなのがたまにキズ。

以上、現場からお伝えしました。
docker依存性確認

あくまで自分用の備忘録です。。。

```
# yum deplist docker
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * epel: ftp.riken.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
パッケージ    : docker.x86_64 1.8.2-10.el7.centos
  依存性      : /bin/bash
   provider: bash.x86_64 4.2.46-19.el7
  依存性      : /bin/sh
   provider: bash.x86_64 4.2.46-19.el7
  依存性      : device-mapper-libs >= 7:1.02.90-1
   provider: device-mapper-libs.x86_64 7:1.02.107-5.el7
   provider: device-mapper-libs.i686 7:1.02.107-5.el7
  依存性      : docker-selinux >= 1.8.2-10.el7.centos
   provider: docker-selinux.x86_64 1.8.2-10.el7.centos
  依存性      : libc.so.6(GLIBC_2.9)(64bit)
   provider: glibc.x86_64 2.17-106.el7_2.1
  依存性      : libdevmapper.so.1.02()(64bit)
   provider: device-mapper-libs.x86_64 7:1.02.107-5.el7
  依存性      : libdevmapper.so.1.02(Base)(64bit)
   provider: device-mapper-libs.x86_64 7:1.02.107-5.el7
  依存性      : libdevmapper.so.1.02(DM_1_02_97)(64bit)
   provider: device-mapper-libs.x86_64 7:1.02.107-5.el7
  依存性      : libpthread.so.0()(64bit)
   provider: glibc.x86_64 2.17-106.el7_2.1
  依存性      : libpthread.so.0(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-106.el7_2.1
  依存性      : libsqlite3.so.0()(64bit)
   provider: sqlite.x86_64 3.7.17-8.el7
  依存性      : lvm2 >= 2.02.112
   provider: lvm2.x86_64 7:2.02.130-5.el7
  依存性      : rtld(GNU_HASH)
   provider: glibc.x86_64 2.17-106.el7_2.1
   provider: glibc.i686 2.17-106.el7_2.1
  依存性      : selinux-policy >= 3.13.1-23
   provider: selinux-policy.noarch 3.13.1-60.el7
  依存性      : systemd
   provider: systemd.x86_64 219-19.el7
  依存性      : xfsprogs
   provider: xfsprogs.x86_64 3.2.2-2.el7
   provider: xfsprogs.i686 3.2.2-2.el7
  依存性      : xz
   provider: xz.x86_64 5.1.2-12alpha.el7
```
bundle install と bundle updateの違いについて


Rails初心者あるあるで、「bundle install と bundle updateの違いが、分からない」というものがあります。かくいう私も、良く分からないまま過ごしてきてしまったので、ここで一旦調べてみました。

# 事前知識

```bundle install```と```bundle update```の違いについて、理解するためには、まずgemfile と gemfile.lock の違いについて、そしてBundlerについて学ぶ必要があります。

### Bundlerについて
Bundlerはgemを管理するためのgemです。Bundlerを使用することで```bundle install```や```bundle update```コマンドを使用することができるようになります。

https://github.com/bundler/bundler


### gemfileについて
gemfileはgemをインストールするための「設計図」のようなものです。私たちは、基本この「設計図」に、自分のアプリケーションに必要なgemを記述します。

### gemfile.lockについて
gemfile.lockは、実際にgemをインストールした後の、「結果図」のようなものです。gem同士は関連し合っていることが多いので、gemfileに書いてあるgemの他にも必要なgemが生じます。Bundlerは、それらを自動でインストールし、gemfile.lockに記述します。

### なぜgemfile.lockが必要なのか
gemfileは設計図です。インストールするgemしか記述されていません（gemのバージョン指定することはできます）。また、gemfileには、gemに関連するgemも記述されていません。
この状態だと、本番環境と開発環境でインストールされるgem,gemのバージョンを統一することができません。gemをインストールした時期によってバージョンが変わってしまうからです。しかし、gemfile.lockを使用することで、どの環境でも同じgem、gemのバージョンを使用することができるようになります。

これで、必要な事前知識は終わりです


# bundle install と bundle updateについて


bundle コマンドを学ぶためにの事前知識を得ることができたので、本題に移りましょう。

### bundle install
```bundle install```を実行すると、railsは、gemfile.lockを元にgemのインストールを行います。この時、gemfile.lockに記述されていない、且つgemfileに記述されているgemがある場合、そのgemとそのgemに関連するgemをインストール後、gemfile.lockを更新します。

### bundle update
```bundle update```を実行すると、Bundlerは、gemfileを元にgemのインストールを行います。その後、gemfile.lockを更新します。

# これら２つのコマンドの使い分けについて

```bundle update```は文字通り、gemのバージョンを更新する時に使用します。これは、```bundle install```コマンドはgemfile.lockにあるgemについては、更新しないためです。但し、```bundle update```は、本番環境で安易に実行しないでください。gemのバージョンのズレが起こり、クラッシュする可能性があります。```bundle update```は、必ず、ローカル環境で実行してください。
```bundle install```は、新しい環境や、gemfileに新しくgemを記述した時に使用します。

# まとめ
 
今回は、初心者がつまづきやすい、bundle コマンドについて記述しました。
もっと深く知りたいという方は以下の文献等を参考にしてみると良いんじゃないでしょうか。

http://saj-kz.hatenablog.com/entry/2014/04/21/005845


http://qiita.com/YusukeHigaki/items/0314e2ec1d13cc5d4c99