OmniAICreator/Qiita-1.07M huggingface dataset:
GitHubのリポジトリを別のOwnerに引き渡す


## 概要

GitHubのリポジトリを別のOwnerもしくはOrganizationに引き渡す機能があったので試してみた。以下では権限移譲と呼びます。

## 特徴

* リポジトリの管理者・所属organizationを移行するGitHubの機能
* GitHub上のみの作業でOK
* GitHubの全機能を移行することが出来る
(コミット、ブランチ、PR、issue、マイルストーン、wiki等。移行先にメンバーが所属している場合のみassigneeも可)
* 移譲条件「移譲元の管理者であり、かつ移譲先の管理者であることが条件」
* 当然リポジトリのURLが変わってしまうので、クライアントやデプロイ用ツールのURLを変更する必要がある

参考：https://help.github.com/articles/transferring-a-repository/

## 作業手順

本手順だとaccount→organizationですが、organization→organizationでも移譲できることを確認しました。特に手順は変わりません。

### 事前準備
* 権限移譲元リポジトリの管理者であること
* 権限移譲先organizationの管理者であること

アカウント名やorganization名などは黒く塗りつぶしています。

### 1.リポジトリホームのページでSettingをクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/55783/e72f0540-4fad-1aae-1e09-24ba22e669e8.png)


### 2.ページ下部のTransferをクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/55783/85efe94f-22b2-60df-d2c5-8d36942b8a0f.png)


### 3.出現したダイアログに以下を入力し、実行ボタンをクリック
・移行するリポジトリ名
・移行先のorganization名
![image](https://qiita-image-store.s3.amazonaws.com/0/55783/d43b609f-0a7c-20de-3165-c0a887e24736.png)


### 4.リポジトリのアクセス権限を選択し、実行ボタンをクリック
※アクセス権限を選択しなくても良い

![image](https://qiita-image-store.s3.amazonaws.com/0/55783/98f20d93-9c4d-3f0b-3ca5-686a9dfc3218.png)

おしまい

## まとめ

* 作業が本当に簡単
* ただ、管理者（もしくはOwner）に設定しなくてはいけないため、状況によっては準備が面倒かも
* issueやPRが大量に存在してもすべて移行できるので非常に助かります
AWS CLIのインストールから初期設定メモ


AWSをWebの管理画面からやっと使えるようになってきました。

> 参考 http://blog.serverfrog.jp/setup-aws-cli/

たぶん後で別記事書くのですが、現状ではCloudFrontでSSLを対応させようと思ったときにWebから証明書情報をアップロード出来ず...(ELBなら出来るんですけど)

そんな感じでAWS CLI経由でSSL証明書アップロードをするんですけどその準備です。

## CLIのインストール

Macを使う想定です。homebrewで一発ですね。

```
$ brew install aws-cli
```

これでインストールできました。

`awsコマンド`が使えるようになります。

```
$ aws
usage: aws [options] <command> <subcommand> [parameters]
aws: error: too few arguments
```

## AWS CLIにAWSのアカウント情報を紐付ける

コマンドラインからAWSにアクセス出来るようにアクセスキーなどの設定をします。

### アクセスキーIDとシークレットアクセスキーの確認

AWSアカウントの`アクセスキーID`と`シークレットアクセスキー`を確認します。

[Your Security Credentialsのページ](https://console.aws.amazon.com/iam/home?#security_credential)にアクセスしましょう。

* **1. "セキュリティ認証情報に進む"** を選択します。
![](http://i.gyazo.com/7a6b08b3f67ad821a03aa57b60e83d95.png)

* **2. "アクセスキー(アクセスキーIDとシークレットアクセスキー)"** を選択します。

![](http://i.gyazo.com/a31b4ee5988edfbb9887f235b865af6b.png)

* **3. "新しいアクセスキーの作成"** を選択します。

![](http://i.gyazo.com/2ed0d102be4487419610a732267d60b2.png)

* **4. "アクセスキーを表示"** を選択し、アクセスキーIDとシークレットアクセスキーを確認します。

![](http://i.gyazo.com/2a754b702537a2902f063062ac09b9f4.png)


**ここまでの手順でアクセスキーIDとシークレットアクセスキーを確認出来ました。**

今回はアクセスキーIDが`AKIAJTIZR5H5K4RKYGGGQ`、シークレットアクセスキーが`6C0a4PETdsmOdjzxpORDM27uvS40zemBtllJu5Co`でした。

## AWS CLIのセットアップ
インストールが完了しているはずなので、`aws configure`コマンドを使って設定します。

```
$ aws configure

AWS Access Key ID [None]: AKIAJTIZR5H5K4RKYGGGQ
AWS Secret Access Key [None]: 6C0a4PETdsmOdjzxpORDM27uvS40zemBtllJu5Co
Default region name [None]: ap-northeast-1
Default output format [None]: text
```

各項目の意味合い

* AWS Access Key ID [None]: "アクセスキーID"をコピペ
* AWS Secret Access Key [None]: "シークレットアクセスキー"をコピペ
* Default region name [None]: "ap-northeast-1"を入力(これがTokyoリージョンらしいので日本国内ならこれ)
* Default output format [None]: "text","JSON","table"のどれかを指定(とりあえずtextで指定しました。)

これで設定完了です。

## 確認

S3を利用している場合は `aws s3 ls`コマンドで契約しているs3情報が確認できます。

```
$ aws s3 ls

2015-07-13 22:56:57 huga.hoge.jp
```

確認できました！

設定がうまくいっているみたいですね。

EC2を利用している場合は `aws ec2 describe-instances`で確認出来ます。

```
$ aws ec2 describe-instances
・
・
(省略)
・
・
TAGS	aws:autoscaling:groupName	n0bisuke_0716
TAGS	Name	n0bisuke_web_autoscale
```

## おまけメモ

アクセスキー周りの情報設定がミスってるとこんなエラーが出ます。

```
A client error (InvalidAccessKeyId) occurred when calling the ListBuckets operation: The AWS Access Key Id you provided does not exist in our records.
```
このなかにabsoluteなflexをするとwidthが取得できないブラウザがいます〜

ライブデモはこう https://jsfiddle.net/hskuych3/

HTMLがこうで、

```html
<div class="flex">
    <div>LOREM</div>
    <div>IPSUM</div>
</div>
```

CSSはこう。

```css
.flex{
    position:absolute;
    display:flex;
    width:100%;
}
.flex>div{
    flex:1;
    border:1px solid red;
}
```

IE11だけflexがwidthを見失ってます。`absolute`じゃなければうまくいくみたいだし、ChromeやFirefoxは問題ない。IE11で見た時にグシャーなっててびっくり。

解決法は、`absolute`な`flex`に、`width:100%`と`width`を明記するだけでした。

https://jsfiddle.net/hskuych3/1/
条件を反転させる

高度なシェルスクリプトを書こうとすれば、条件文は必須となりますが、シェルスクリプト特有の癖も強いです。

# 条件文
シェルスクリプトの条件文は、

```bash:cond.sh
if 条件
then
  #真の場合
else
  # 偽の場合
fi
```
のようになっています。なお、`if 条件 ; then`と1行にされることもよくあります。どちらも「条件」をコマンドとして実行して、正常終了かどうか（終了コードが0なら正常）で判定します。

# 条件自体を複雑にする場合
条件自体を複雑に指定したい場合は、`test`コマンド、あるいは略記法の`[`コマンドの出番です。`if test 条件`あるいは`if [ 条件 ]`のように書いて、ファイルの存在確認や数値の大小比較、空文字列の判定なども行えます。

# 条件判定を逆にしたい場合
さて、条件判定を逆にしたい場合はどうすればいいのでしょうか。はじめ、これには`test`コマンドが必要と早とちりして、

```bash:冗長.sh
条件
if [ ! $? ] ;then
  # 実行
fi
```
のように書いていたのですが、**これを書こうとして**改めて調べていたら、実は`if`だけでも逆転できると気づきました。

```bash:これでOK.sh
if ! 条件 ;then
  # 実行
fi
```

やっぱり、こういう思考を整理する場があることの貴重さを思った一幕でした。
Javaの基礎知識を定期的に補いたいなら｢Javarevisited｣をオススメする

定期的にJavaの基礎知識を復習したいという方、｢Javarevisited｣というサイトをオススメします。
2〜3ヶ月程定期購読しているのですが、どれもああこれ重要だよねと感じるエントリーを残してくれています。 
短いコードサンプルも豊富に載せられていて理解が促されます。

Blog, Twitter, Google+等複数の媒体で提供されているので、自分に合う形式で購読すると良いと思います。

| コンテンツ | URL |
|:--|:--|
| Blog | http://javarevisited.blogspot.jp/ |
| Twitter(著者のアカウント) | https://twitter.com/javinpaul |
| Google+ | https://plus.google.com/u/0/103515296667914706982/posts |
| FeedBurner | http://feeds.feedburner.com/Javarevisited |
Apple Watch はタイムマシンである

# 時間に意味をつける

一般的な腕時計が示す時刻には数字あるいは針の角度という情報しかありませんが、Apple Watch が示す時間には意味があります。

> Apple Watchは、あなたのカレンダーや連絡先と連係するので、ただ時間を知らせるだけでなく、その時間があなたにとってどのような意味があるのかを把握しています。
引用： http://www.apple.com/jp/watch/timekeeping/

Apple Watch では、それが示す時刻に関連する情報も含めて「時間」と定義されます。

# タイムマシン

![3974555d-fdca-509e-ec23-b092b169b9ac.jpeg](https://qiita-image-store.s3.amazonaws.com/0/3603/1bdcc1c6-26d2-7d4d-ab87-2dc5a48d5b88.jpeg)

watchOS 2で解禁された機能に Complications（コンプリケーション）というものがあります。ざっくりいうと、時間に合わせて文字盤に何らかの情報を表示できる機構です。Complications に表示すべき情報は時計の針が指す時刻と連動したものでなければなりません。WWDC15のセッションビデオを見るとその本質が見えてくるのですが、まず時間軸があって、竜頭でその時間軸を移動して、針が示すその瞬間に関連する情報を表示する、というものです。例えばスポーツであればその瞬間の試合の得点状況、株式であればその瞬間の株価を表示するという使い方ができるでしょう。

![complications.png](https://qiita-image-store.s3.amazonaws.com/0/3603/4b5a6c29-58a6-1c82-582b-e4b3d7323980.png)


今までの時計というのはあくまでも時刻を示す、あるいは時を計るための機械でした。腕時計の竜頭は狂ってしまった針を正しい位置に戻すための機構でした。なので時間を操作するという概念はありませんでした。
一方 Apple Watch の竜頭は時間軸上の座標を操作するためのタイムマシンのようなものです。このタイムマシンを使うと時間軸に沿って情報を遡ったりすることができます。あるいは先の情報があれば未来の情報も参照することができます（明日の予定など）。そしてこれらの情報は Apple Watch を日常的に使うほどに価値が生まれます。情報が蓄えられるのは過去の情報ですが、将来的には機械学習によってある程度の予測もできるようになるのかもしれません。

Apple Watch の価値のひとつは、日常的に使用して情報を蓄え、意図的に時間を操作することでその情報に意味付けをするというところにあるのかもしれません。
【Mac】通知センターの天気の関して、位置情報がおかしい時の対処法

# Macの通知センターで天気の位置情報がおかしい

4月に引っ越しをしたが、Macの通知センターに表示される天気情報の位置情報がなぜか前の住所のままだった。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/85825/bd12d72c-b512-b384-4b20-75ab7cb1122f.png)
(これは問題を解消したあとのスクショ。前の住所は苫小牧市だった。)

# 結論

1. [設定]
2. [セキュリティとプライバシー]
3. [プライバシー]タブ
4. [位置情報サービス]
5. [天気]をオフに
6. 再起動
7. 再度オンに

# 詳しい説明

[設定]から[セキュリティとプライバシー]。

![02.png](https://qiita-image-store.s3.amazonaws.com/0/85825/4e6a5e18-008e-56b0-0faf-db2c406e5c61.png)

[プライバシー]タブを選択して左のカラムから[位置情報サービス]。

![03.png](https://qiita-image-store.s3.amazonaws.com/0/85825/31211ecf-e300-29e3-24c9-4fdd422335ea.png)

[天気]をオフにする。

![04.png](https://qiita-image-store.s3.amazonaws.com/0/85825/c0203e97-c9b4-d8e6-918b-a4cb6e3ee10b.png)

再起動してオンにし直したら、ちゃんとした位置情報が取れるようになった。
連続するアルファベットの文字列を折り返す方法

```
<p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p>

```

区切りのない連続したアルファベットによってレイアウトが崩れることがまれにあります。
それを改行させて解決する方法です。

```
p {
   word-wrap: break-word;
   width: 100px; /* レイアウトにあった任意に幅を指定 */
}
```

#参照

http://xirasaya.com/?m=detail&hid=104
チャットワークを楽しくするChrome Extension

#　はじめに

チャットワークを楽しくするChrome Extensionを作ってみました。 :smile: 

それは　**Chat++ (Chat Plus Plus)**　というものです。:blush: 

#　インストール
- [ホームページ](http://chatpp.thangtd.com/)
- [Chrome Web Store](https://chrome.google.com/webstore/detail/chat%20%20-for-chatwork/amhfnpimdfcdcpnchjionbddjjbmofnl/reviews) 

#　Chat++　を利用するとこんなことが出来ます
**Chat++**は様々な機能を提供しています。詳細はエクステンションのホームページやエクステンション内のドキュメントなどまで参考して頂けると幸いです。 :blush: 

簡単に説明すると、こんなことが出来ちゃいます。:satisfied: 

### エモーティコン
チャットワークのデフォルトエモーティコン以外も使えるとのことです。
![Emoticons](http://i.imgur.com/orJ0C1a.png)

### Mention
FacebookやTwitterやGithubなどのようにTOできます。
![Mention](http://i.imgur.com/8ebsCOs.png)

### 便利なショートカット
色々なショートカットがあって、マウスを使わなくても色々なことが出来ます。
![Shortcuts](http://i.imgur.com/m4ob6Ix.png)

### 画像のサムネイル表示とコードハイライト
画像リンクの下に小さなサムネイルが表示されます。
![Image Thumbnail](http://i.imgur.com/9Pfm12B.png)

コードがハイライトされます。
![Highlight Code](http://i.imgur.com/4LcA7lv.png)


<hr>
**Chat++**はチャットワークをよりもっと楽に使えるために作られました。 
上記の機能以外にも色々なことが出来ます。お気楽にお使いください。 :relaxed: 

そして、アイデアやご意見がありましたら、ご連絡頂けると幸いです:grinning:
kiwi.js入門: 背景画像を表示、クリック回数を描画

## 参考

* [Kiwi.JS Examples](http://examples.kiwijs.org/)

## 必要なファイル

* [kiwi.js](https://github.com/gamelab/kiwi.js/blob/master/build/kiwi.js)
* bg.png : 適当な画像をご用意ください。 
* index.html : これから作ります。
* gettingStarted.js : これから作ります。

## 出来上がるもの

* 背景画像(bg.png)の表示
* 背景画像をクリックしたらクリック回数が表示されます。

![スクリーンショット 2015-07-22 21.02.23.png](https://qiita-image-store.s3.amazonaws.com/0/25728/0c2d87d9-5a3c-5a07-8683-deba91082db9.png)


## 作成

* [Clicking a sprite](http://examples.kiwijs.org/view.html?category=basics&index=0&title=Clicking%20a%20sprite)を参考。

```html:index.html
<meta charset=utf-8 />
<script type="text/javascript" src="kiwi.js"></script>
<script type="text/javascript" src="gettingStarted.js"></script>
```

```js:gettingStarted.js
//描画サイズ
var gameOptions = {
    width: 768,
    height: 512
};

// stateをPlayにセット
var state = new Kiwi.State('Play');

//spaceにbg.pngを割当て。以降spaceという名前で参照できる
state.preload = function () {
    this.addImage('space', 'bg.png');
};

// 即時関数。実行内容を定義
state.create = function () {
    //背景の定義
    this.space = new Kiwi.GameObjects.Sprite(this, this.textures.space);
    //文字の定義
    this.textField = new Kiwi.GameObjects.Textfield(this, '');
    this.textField.x = this.game.stage.width / 2;
    this.textField.y = 10;
    this.textField.color = '#FFFFFF';
    this.textField.fontFamily = 'Roboto, sans-serif';
    this.textField.textAlign = Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER;
    //文字用のカウンター。クリックした回数用
    this.counter = 0;
    //背景を有効にする
    this.addChild(this.space);
    //文字を有効にする
    this.addChild(this.textField);
    //イベントハンドラ(背景をクリックするとstate.clickedの処理を行う)
    this.space.input.onUp.add(this.clicked, this);
};

//背景をクリックするとstate.clickedの処理を行う
state.clicked = function(){
    this.counter++;
    this.textField.text = this.counter + ' 回クリックしました。';
};

var game = new Kiwi.Game('game-container', 'LoadingAnImage', state, gameOptions);
```

## 起動

```bash:
python -m SimpleHTTPServer
```

* http://localhost:8000/ にアクセスし動作することを確認。

## 今回使わなかったが、スプライト画像を頂いておく。

* [enchant.jsでHTML5＋JavaScriptゲーム開発入門（3）：enchant.jsで重要なスプライトとシーンを使うには (2/4) - ＠IT](http://www.atmarkit.co.jp/ait/articles/1304/01/news034_2.html)から[スプライト画像](http://image.itmedia.co.jp/ait/articles/1304/01/enchant3_8.png)を拝借。
'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:' エラーの対処

(主観的には)何もしていないのに急に下記エラーが出てきて開発が少し止まった。
解決策を備忘録的に記す。


*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'



このエラーは、TableView が正常なtableView:cellForRowAtIndexPath メソッドを見つけられていないことに起因する。

* 問題となっているクラスの中のtableView:cellForRowAtIndexPath メソッドの名前が意図せず書き換わっている
* TableViewとDatasource のつなぎ込みが解除されている。

などの問題があると考えられる。

特に、「何もしていないのに急にこのエラーが出て動かなくなった」なんて時はミスタイプなどで名前が書き換わっている可能性が非常に高い。
bash覚書

自分用のメモ。

## if

testコマンドと組み合わせる。
testコマンドは`[ 1 -eq 1 ]`とも書ける。ただし、空白忘れるとエラーになるので注意。

### 数値

|オプション|使用例|数式|
|:--|:--|:--|:--|
|-eq|test num1 -eq num2|num1=num2|
|-ne|test num1 -ne num2|num1≠num2|
|-lt|test num1 -lt num2|num1<num2|
|-le|test num1 -le num2|num1≦num2|
|-gt|test num1 -gt num2|num1>num2|
|-ge|test num1 -ge num2|num1≧num2|

例) 数値の比較

```bash
if test 1 -eq 1; then
 echo true
else
 echo false
fi
```

### 文字列

`=`と`!=`

例) 文字列の比較

```bash
if test "hoge" = "hoge"; then
 echo true
else
 echo false
fi
```

## scp

```
scp -i ~/.ssh/secret.pem -r user@host:hoge /local/path
```

秘密key使う時は`-i`

ディレクトリの時は`-r`

ああ、以下にいろんな事が詳しく書いてあった。
http://bi.biopapyrus.net/linux/bash.html
PHP 7 から IIFE で、クロージャや無名クラスが即時実行できる


PHP 7 から、JavaScript の IIFE（Immediately-invoked function expression）のような書き方で、クロージャや無名クラス（これも PHP 7 から）を即時実行できるようになります。

クロージャの場合

```php
<?php

(function (string $message) {
    var_dump($message);
})('Hello!');

```

無名クラスの場合

```php
<?php

(new class {
    public function say(string $message)
    {
        var_dump($message);
    }
})->say('Hello!');
```

実行したコード
http://3v4l.org/mK8W2

いやあ、便利。
[Yahoo! ID連携][商品一括更新API]一括更新後のフロント反映をどうするのが良いか

Yahooショッピングの「商品一括更新API」では、フロント反映は行われません。
フロント反映を行うのは、「商品個別反映API」かと思いますが、これは１個ずつの反映です。

複数の商品を更新した場合、フロント反映もAPIから行いたい場合は、１個ずつ「商品個別反映API」を
利用するしかないのでしょうか。

一括更新を実現されてらっしゃる方のお知恵をお借りできればと思っております。

よろしくお願いいたします。
AFNetworkingでダウンロード/アップロード時にNSProgressの値が上手く取得できないとき

AFNetworkingには、uploadTask、downloadTaskのメソッドが用意されていて、このパラメータに含まれている```NSProgress```を利用することでそれぞれの進捗を取得することができます。

AFNetworkingのREADME.mdを読みながら実装すれば問題なく作成できるんですが、個人的によくうっかり間違えるポイントがあるので覚書的に残しておきます。

◆ [AFNetworking](https://github.com/AFNetworking/AFNetworking)
*Creating an Upload Task for a Multi-Part Request, with Progress* を参考にすると実装しやすいです。



## NSProgressはnilで渡す
呼び出しの際に、NSProgressを参照渡しする必要がありますが、必ずnilで渡す必要があります。
間違えて```NSProgress* progress = [NSProgress new]```などと宣言したものを渡すと、fractionCompletedが常に0で返ってきてしまいます。


## コントロールの更新はメインスレッドで行う
当たり前なんですけどね。例えば以下のようにKVOを追加した場合。

```objc
self.progress = progress;
[progress addObserver:self
           forKeyPath:@"fractionCompleted"
              options:NSKeyValueObservingOptionNew
              context:NULL];
```

以下のような形で、dispatch_asyncを書くかperformSelectorOnMainThreadなんかでメインスレッドで実行しないとリアルタイムに見た目の更新ができないので注意。

```objc
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"fractionCompleted"]) {
        // ここはメインスレッドではないので、コントロールの更新は
        // main_queueで行うように実装する
        dispatch_async(dispatch_get_main_queue(), ^{
            // ここにコントロールの更新処理
            // 例えば進捗を%表示するなら、
            // (int)(((NSProgress *)object).fractionCompleted * 100)％を表示
        });
    } else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}
```
UnityでJsonをパース

## はじめに
Unity初心者なので、とりあえずJson周りをいろいろとまとめてみた
## Unityでよく使われている手法
- [MiniJson](https://gist.github.com/darktable/1411710) (MITライセンス)
- [JsonNode(MiniJsonの拡張)](https://gist.github.com/asus4/7f7b5912d703f44c2711) (ライセンス不明)
- [JsonFx](http://www.jsonfx.net) (MITライセンス)
- [LitJSON](http://wiki.unity3d.com/index.php?title=UnityLitJSON) (パブリックドメイン)
- [JSONObject](http://wiki.unity3d.com/index.php?title=JSONObject) (LGPL2.1?)
- [NGUIJson](http://naochang.me/?p=193) (ほぼ有料)
- [SimpleJson](http://wiki.unity3d.com/index.php/SimpleJSON)
 
## C#でよく使われる手法
- [Json.NET] (http://www.newtonsoft.com/json) (MITライセンス)
- [DynamicJson] (https://dynamicjson.codeplex.com) (Ms-PLライセンス)
- [.NET Frameworkの標準クラス](https://msdn.microsoft.com/ja-jp/library/system.runtime.serialization.json(v=vs.110).aspx)

## まとめ
- 一番手軽に使えるのはMiniJson。
- パース後にデシリアライズまでやってくれるJsonFxも非常に便利
- LitJsonの実装例も多そうです。

こっちのほうが使いやすいとかいろいろ意見をもらえると助かります＞＜


### 参考
- [C#でJsonシリアライズについてのメモ](http://d.hatena.ne.jp/pidekazu/20140820/1408527317)
- [UnityでJsonを扱う](http://naochang.me/?p=158)
- [[Unity] MiniJSON 使って json 読み込み](http://qiita.com/phi/items/914bc839b543988fc0ec)
- [[Unity] MiniJsonをちょっと楽にするスクリプト](http://qiita.com/asus4/items/bac121c34cd3169116c0)
- [.NETのJSONシリアライザの速度比較](http://qiita.com/t_takahari/items/6855dfe78071bb5eaef6)
- [C#でJsonシリアライズについてのメモ](http://d.hatena.ne.jp/pidekazu/20140820/1408527317)
[matlab] cyclicな数字を返す

# はじめに
cyclicに数字をずらしていく操作が必要になったので
実装しました。色々使いようがあると思うのでどうぞ。

# 実装

下記が、実装となります。
実行できると思うので試してみてください。

```matlab
function vec = cyclic(v)
  %% cyclic
  % cyclic(1:3)
  % => 1 2 3 2 3 1 3 1 2
  if length(v) == size(v, 2)
    vec = zeros(1, length(v).^2);
  else
    vec = zeros(length(v).^2, 1);
  end
  for i = 1:length(v)
    cnt = i;
    for j = 1:length(v)
      vec((i-1)*length(v)+j) = v(cnt);
      cnt = cnt + 1;
      if cnt > length(v), cnt = 1; end
    end
  end
end
```
nginxのproxy_passでハマった



`/api/`ではじまるURLをすべて`localhost:8080`で処理したい。

```
location /api/ {
    proxy_pass http://localhost:8080/;
}
```

`http://localhost/api/hoge/`にアクセスするも404。
`http://localhost:8080/api/hoge/`ではちゃんと結果が返ってくる。

[ググった結果](http://www.xmisao.com/2014/05/09/nginx-proxy-pass.html)解決。

`proxy_pass http://localhost:8080/;`
と設定した場合、
`http://localhost:8080/hoge/`とアクセスされるようだ。`/api/`の部分が省略されてしまう。

`proxy_pass http://localhost:8080;`
とすると（最後のスラッシュを消しただけ）、
`http://localhost:8080/api/hoge/`に正しくアクセスされた。

軽くハマったのでメモ。
How to using UniWebView2 (UniWebView2の使用方法)


* http://uniwebview.onevcat.com/manual.html
* http://every-studio.com/wordpress/2015/04/01/unity5%E3%81%A7webview%E3%82%92%E4%BD%BF%E3%81%86%EF%BC%81/
* https://twitter.com/onevcat/status/532176093822722048

```csharp

using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour {

	private UniWebView _webView;
	private string _errorMessage;

	// Use this for initialization
	void Start () {
		Debug.Log (this._errorMessage);

		_webView = GetComponent<UniWebView>();
		if (_webView == null) {

			//	User agent masquerade.
			UniWebView.SetUserAgent ("Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A365 Safari/600.1.4");

			_webView = gameObject.AddComponent<UniWebView>();
			_webView.OnReceivedMessage += OnReceivedMessage;
			_webView.OnLoadComplete += OnLoadComplete;
			_webView.OnWebViewShouldClose += OnWebViewShouldClose;
			_webView.OnEvalJavaScriptFinished += OnEvalJavaScriptFinished;
			_webView.InsetsForScreenOreitation += InsetsForScreenOreitation;
		}
		_webView.url = "https://uqunie.com/useragent";
		_webView.Load();
		_webView.Show ();
		_errorMessage = null;
	}

	void OnLoadComplete(UniWebView webView, bool success, string errorMessage) {
		if (success) {
			webView.Show();
		} else {
			Debug.Log("Something wrong in webview loading: " + errorMessage);
			_errorMessage = errorMessage;
		}
	}

	bool OnWebViewShouldClose(UniWebView webView) {
		if (webView == _webView) {
			_webView = null;
			return true;
		}
		return false;
	}

	void OnReceivedMessage(UniWebView webView, UniWebViewMessage message) {
		/**
		 * From WebView's message.
		 * 
		 * Ex:
		 * uniwebview://command?foo=true&bar=false&num=1
		 */
		Debug.Log(message.rawMessage);
		Debug.Log(message.path); // command
		Debug.Log(message.args["foo"]); // true  (string)
		Debug.Log(message.args["bar"]); // false (string)
		Debug.Log(message.args["num"]); // 1     (string)
	}

	void OnEvalJavaScriptFinished(UniWebView webView, string result) {
		Debug.Log("js result: " + result);
	//	tipTextMesh.text = "<color=#000000>" + result + "</color>";
	}

	UniWebViewEdgeInsets InsetsForScreenOreitation(UniWebView webView, UniWebViewOrientation orientation) {
		/*
		int bottomInset = (int)(UniWebViewHelper.screenHeight * 0.1f);

		if (orientation == UniWebViewOrientation.Portrait) {
			return new UniWebViewEdgeInsets(5,5,bottomInset,5);
		} else {
			return new UniWebViewEdgeInsets(5,5,bottomInset,5);
		}
		*/
		return new UniWebViewEdgeInsets(0, 0, 0, 0);
	}

	// Update is called once per frame
	void Update () {
	
	}
}

```

Call from html.

```html
<a href="uniwebview://command?foo=bar">button</a>
```

Call from javascript.

```js
location.href = "uniwebview://command?foo=bar";
```
オフライン環境でのアプリ起動Tips（for 2.0.5）

Pepperを使って人前で発表したいときなど、あらかじめアプリをインストールしておいて、Choregrapheで接続しなくても再生できると便利ですよね。そんなときに使えそうなTipsです。

## 前提
このTipsはどちらかというとデベロッパーモデルの2.0.5のPepper向けです。2.3.xのPepperではインストールしたアプリはタブレットのアプリ一覧に表示されるので、このTipsを使わなくてもアプリ起動が可能です。

## 概要
[Interactiveアクティビティの作成](http://qiita.com/Atelier-Akihabara/items/01c9203aed68efa1bd70)の内容をベースにトリガー条件を調整することで、意図的にアプリを再生できるようにします。

# アプリ起動Tips
上記のサンプルでは、Zone2に人が5秒以上いた場合というトリガー条件になっています。これでは人が多くいる現場で意図的にアプリを始めたいときなどに不都合です。

これを例えば「右手を1秒以上タッチしたらアプリを再生する」に置き換えることができます。
トリガー条件を以下のように書き換えます。
`('HandRightBackTouched' == 1) ~ 1`

![スクリーンショット 2015-07-22 17.53.02.png](https://qiita-image-store.s3.amazonaws.com/0/67647/0cce4158-8420-9ee9-5e44-329d4445dd17.png)

これでインストールしておけば、Pepperを起動したあとChoregraphe接続しなくても、タッチでアプリを再生することができると思います。簡単ですね。


### 補足事項１
このTipsでは、Interactiveアクティビティによってアプリを再生させるため、他のInteractiveアクティビティを実行しているときは反応しません。

参考：[オートノマスライフの考え方](http://qiita.com/Atelier-Akihabara/items/555989ab1d7d7e63e520)

他のInteractiveアクティビティ（デベロッパーモデルのデフォルトには人が前に立つと始まる「対話（run_dialog）」アプリが入っていると思います）に干渉されたくない場合は、あらかじめ削除しておきましょう。
※対話アプリは削除すると、トリガーセンテンスという、キーワードからのアプリ起動ができなくなります
※デフォルトのアプリは削除しても設定画面から再インストールできるはず、です。

### 補足事項２
Interactiveアクティビティからアプリを起動する場合、起動するまでにローディングレスポンスという場つなぎの言葉をPepperがしゃべります。狙いに合わせてここも工夫するといいと思います。

![スクリーンショット 2015-07-22 18.22.12.png](https://qiita-image-store.s3.amazonaws.com/0/67647/792cbec1-683b-09de-611b-171b2bb7b2b7.png)

### 補足事項３
Interactiveアクティビティによるアプリ再生は、Choregrapheのように遠隔でアプリ終了ができないため、必ずアプリの中で、終了までたどり着けるようにした方がよいと思います。

### 補足事項４
オートノマスライフの状態からそのままアプリに遷移するので、BasicAwarenessを切る処理など、適宜アプリ側に入れる必要が有ります。

### 補足事項５
ローディングレスポンスが発生しないSolitaryアクティビティでは基本的に[Launch trigger conditions](http://doc.aldebaran.com/2-1/naoqi/core/triggerconditions.html#launchtriggerconditions)に記載されているイベントしか使えないようで、Solitaryアクティビティのトリガー条件にタッチイベントなどを入れてインストールするとエラーが出ると思います。ただ、アプリ内に仕込んだRaiseイベントを監視して、Solitaryアクティビティを発生させるという手法で、他のイベントを条件にすることも可能なようです（調査中）。

## まとめ
Interactiveアクティビティのトリガー条件をカスタマイズして、発表とかを乗り切ろう！
スマートフォンのブラウザでスクロール時に発生するresizeイベント（そしてウィンドウの縦幅に要素の高さをあわせた場合の問題）に関するメモ

スマートフォンのブラウザではスクロールするとアドレスバー等が自動で隠れるという動作が一般的ですが、これによってウィンドウの縦幅が変化することがあるので、それについて簡単にメモしておきます。
色々と調査できる余地があるのですが、いったん現時点でわかっていることを記録しておきます。後日加筆するかもしれません。
なお、マイナーバージョンや端末などの違いによって以下とは異なる結果になる可能性もあります。

# 1．ブラウザによってイベントが発生することもあればしないこともある

iOS（確認バージョンは8.3）のSafari、Android（確認バージョンは4.4.4。端末はSO-02G）の標準ブラウザ＆Chromeでは、**ページを下にスクロールしてアドレスバー等のナビゲーション表示が消えるときに resize イベントが発生しました**。
ただし、上記3つのブラウザのうち、 Android の Chrome だけ、スクロール完了時（手を離し、慣性による移動も完了したあと）にイベントが発生しました。残りの2つは、スクロール中手を離していなくてもイベントが発生しました。これは、ブラウザのアドレスバー等が消えるタイミングの違いによるものだと思います。いずれも、アドレスバー等が消えた瞬間にイベントが発生するのは共通のようです。
一方、**iOSのChromeでは resize イベントは発生しませんでした**。
ちなみに、読み込み時に resize イベントが発生するかとか、画面回転時に resize イベントが発生するかとか、orientationchangeとどちらが先に実行されるのかとか、resizeイベントの発生タイミングについては、他にも色々と違いがあるようですが……このあたりは略します。

# 2．イベントは発生してもサイズが変化しているとは限らない？

まずiOSですが、Safari＆Chromeで、jQuery を使って $(window).height() を取得すると、iOSのSafariではアドレスバー（あと下のナビゲーションバー）がある状態での表示領域（viewport: width=320pxの場合460px）が常に返ってきました。
つまり、アドレスバー等が非表示のときは、**JavaScript で取得できるウィンドウ縦幅よりも実際に表示されているウィンドウ縦幅のほうが大きい**ことになります。へえ、そういうこともあるんですね……。ただし、縦幅を取得する方法はいくつかあるので、もしかしたら本当の縦幅を知る方法もあるかもしれません。
一方、Androidでは、標準ブラウザでもChromeでも、**アドレスバー等の有無によって返ってくるウィンドウ縦幅が変化しました**。

# 3．CSSでも同様

このウィンドウ縦幅に関する動作は JavaScript だけではなく、CSSでも同様のようです。具体的には、たとえば**ウィンドウ縦幅に要素の高さをあわせる**というとき、方法として、よく知られているのが以下のやり方。

``` css:CSS
html, body, #hoge {
	height: 100%;
}
```
``` html:HTML
<div id="hoge">高さをウィンドウ縦幅と同じにしたい要素</div>
```

このCSSにおける100%の基準は、上で書いた JavaScript で取得できるウィンドウ縦幅と同じになります。
重要なのが、**Androidでは、100%がスクロールによって変化する**ということ。
たとえば「ファーストビュー全体にドーンと写真を載せたい」といったとき、PCやiOSなら上記の方法で特に問題ありませんが、Androidだとスクロール途中で高さが変わるので、アドレスバー等が消える瞬間に要素の縦幅が急に変わり、違和感のある動きとなってしまいます。
これに対応するひとつの解決策は、**常にアドレスバー等が出るようにすること**です。具体的には、[skrollr](http://prinzhorn.github.io/skrollr/) のような JavaScript で擬似スクロールを行うライブラリを使用すれば、常にアドレスバー等が表示されるようにはなります。
しかしこの場合、表示領域が狭くなってしまうというデメリットもあります（パララックスっぽい効果を加えたいならスマートフォンでは上記のようなライブラリは必須なので、一石二鳥かもしれませんが……）。

何かスマートな解決法を募集中。
C++11で正規表現（std::regex）を使う

# C++11で正規表現（std::regex）を使う


## string型文字列に正規表現を適用する場合

### 正規表現

（例）「int」「double」「char[20]」などの文字列に対して、
(int)、(double)、(char)[(20)]のように、型名と配列数をサブグループとして取り出す正規表現

```
"(int|double|char)(\\[(\\d+)\\])?"
```
ややこしいのは"\\\\["、"\\\\d+"、"\\\\]"の部分。
C/C++の文字列でバックスラッシュ一文字を表現すると"\\\\"になり、
正規表現のメタ文字である'['をエスケープするためにこれを前に付けて
"\\\\["となっている。その他も同様。

C++11で追加された生文字列リテラル「R"(〜)"」を使うと次のようにも書ける。
https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#raw.string.literal

```
 R"((int|double|char)(\[(\d+)\])?)"
```

### サンプルコード

```
#include <regex>
#include <iostream>

using std::string;
using std::cout;
using std::endl;

int
main(){
  string str[3] = {"int", "double[4]", "char[32]"}; // 対象文字列
  std::regex re("(int|double|char)(\\[(\\d+)\\])?"); // 正規表現
  std::smatch match; // string型の文字列に対するマッチング結果を格納するのがstd::smatch型
  
  for( int i = 0; i < 3; ++i ){
    if(regex_match(str[i], match, re)){ // regex_match()は正規表現にマッチすると1を返す
      cout << "matched: " ;
      for ( int j = 0; j < match.size(); ++j ){ // match.size()はサブグループの数+1を返す
        std::cout << match[j] << ":";
      }
      cout << endl;
    }
  }
  return 0;
}
```

コンパイル時は-std=c++11を忘れずに。


### 実行結果

```
matched: int:int:::
matched: double[4]:double:[4]:4:
matched: char[32]:char:[32]:32:
```

## char *型文字列やワイド型文字列への正規表現の適用

以下のリンクが参考になる。
http://codezine.jp/article/detail/7716
phpbrew のよく使うコマンドのメモ

# インストールできる PHP のバージョン一覧を表示する

```
$ phpbrew known
```

# PHP をインストールする

## PHP 5.5.24 をインストールする場合

```
$ phpbrew install 5.5.24 +default
```

## 補足説明

`+default` をつけないと `mbstring` が利用できないので、特にこだわりがない場合は `+default` をつけておくのが無難。

# PHP のバージョンを切り替える

## PHP 5.5.24 に切り替える場合

```
$ phpbrew switch 5.5.24
```

## 現在の shell のみで PHP 5.5.24 に切り替える場合

```
$ phpbrew use 5.5.24
```
【Excel】Tips：入力規則

#Excelの入力規則についてのメモ
全角のみ：　A1=JIS(A1) or LEN(A1)*2 = LENB(A1)
半角のみ：　LEN(A1) = LENB(A1)
字数制限：　LEN(A1)>100、LEN(A1)<=100

複数の条件設定は、AND関数を利用する。OR関数も利用可能（なはず）。
例：=AND(条件1,条件2,条件3･･･）

その他入力制限は、
データの入力規則→日本語入力タブのプルダウンから可能。
例：全角英数、半角英数、ひらがな、全角カナ、半角カナ　等


ただし、直接入力には効くが、セルコピペには全くの無力・・・
お手軽なzshからfish shellへの移行手順

みなさん、[fish shell](http://fishshell.com/)をお使いでしょうか。

![sc1.png](https://qiita-image-store.s3.amazonaws.com/0/2382/fc84a247-4469-21a3-44f9-687034b5e29e.png)

綺麗なシンタクスハイライト、ワイルドカードの使えるls、綺麗なサジェスト、履歴管理、WebUIによる設定などとにかく便利なものが多いですね。

何よりすごいのは、デフォルト設定でかなり使えるということです。詳しくできることは[こちら](http://qiita.com/mtwtk_man/items/dde92d0a6024bc61fa58)の記事を参考に。

数年zshを使い続けて来ましたが、設定のしやすさ、デフォルトの使いやすさ、インストールのしやすさでfish shellが完勝でした。

というわけで、zsh環境からfish shell環境に移行する時にやっている手順を健忘録的に以下にまとめます。

# 移行手順
1. http://fishshell.com/ のプラットフォームに合わせたやり方でインストール
2. `cp $HOME/.zshrc $HOME/.config/fish/config.fish`で設定をコピる
3. `vim $HOME/.config/fish/config.fish`でzsh依存の処理の行を削除
4. PATHの設定を`%s/export /set -x /gc`、`%s/PATH=/PATH /gc`、`$s/:/ /gc`という置換コマンドで確認しつつ置換
5. `chsh -s /usr/local/bin/fish` でシェルを変更
6. シェルを立ち上げ直した後、`fish_config`を実行してブラウザで見た目設定

以上

手順4は、
`export PATH=$HOME/activator/activator-1.2.12/:$PATH` 
の表記を
`set -x PATH $HOME/activator/activator-1.2.12 $PATH`
にして`export`コマンドをfish shellの`set -x`形式に置き換えることをしています。無論bashからの移行も`.zshrc`を`.bashrc`に変えるだけで良いかと思います。

ちなみに自分は、サジェストを`Ctrl+f`で保管できる、`Ctrl+p`や`Ctrl+n`でデフォルトで履歴が見れるのが便利で多用しています。zshだといろいろ設定して使えるようにしなきゃいけない機能でした。

なお、お気に入りのレイアウトはこれですね。

![fish shell configuration.png](https://qiita-image-store.s3.amazonaws.com/0/2382/847350ee-a42e-4c6f-5f2c-6a438e4b9bf1.png)

では、良いfish shellライフを！
[NDK] Try to use ndk in android studio(v1.3 RC)

Today I found that android stdio supported the ndk.
So I try to write some code to test it.

First add the `jni` folder from File->New->Folder->JNI Folder.

Then create a class called `HelloWorld` in the jni folder.
Write some code like this:

```cpp:HelloWorld.h
#ifndef MY_APPLICATION_HELLOWORLD_H
#define MY_APPLICATION_HELLOWORLD_H

#include <string.h>
#include <jni.h>


class HelloWorld {
public:
    void say();
};

extern "C" {
jstring Java_jp_myapplication_MainActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {
    HelloWorld *hello_world = new HelloWorld();
    hello_world->say();
    delete  hello_world;
    return env->NewStringUTF("Hello from native code!");
}
}

#endif //MY_APPLICATION_HELLOWORLD_
```

```cpp:HelloWorld.cpp
#include "HelloWorld.h"
#include <cstdio>

void HelloWorld::say() {
    printf("Hello world!");
}
```

Then in the MainActivity load the library and call the native method.

```java:MainActivity.java

public class MainActivity extends AppCompatActivity {
    static {
        System.loadLibrary("app");
    }

    private native String invokeNativeFunction();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String hello = invokeNativeFunction();

        new AlertDialog.Builder(this).setMessage(hello).show();
    }
}
```
CentOS7.xでuserminのSSLのセキュリティ対策

改訂(2018/1/24) CentOS7.1からCentOS7.4用に改訂。

#はじめに
CentOS7.4にusermin-1.730を導入してみたのですが、

> usermin
> http://www.webmin.com/rpm.html

SSLのセキュリティ対策を行ってみました。

補足：SSL-labの検査のために一時的に外部公開サーバとして設定しましたが、userminで取り扱う事ができる情報は機密性が高いと思われますので、常時外部公開はおすすめできません。極力内部ネットワークでの利用をお勧めします。

#プロトコルの制限
SSLv2,SSLv3, TLS1.0はセキュリティ上の問題が指摘されています。

色々ググってみたのですが、ソースコードを読んだほうが早かったようです。

> /usr/libexec/usermin/miniserv.pl

ソースを読むと、no_ssl3,no_ssl2,no_tls1という命令がありました。

#暗号化方式
userminが対応している暗号化方式はApacheなどと比べて少ないようです。

暗号化方式をすべて有効(ssl_cipher_list=ALL)にして検査すると

> https://www.ssllabs.com/ssltest/index.html
> SSL Server Test

すべての暗号化方式にWEAK/INSECUREという判断になります。うぐぐ。

そのため、妥協が必要のようです。

いろいろ試しましたが、WEAKが残りますが、以下で妥協しました。

(ssl_cipher_listの所は各自環境に合わせて修正下さい。なお!RSAを指定すると通信できなくなりました。すべての暗号化方式がつぶされたのかな??)

```
/etc/usermin/miniserv.conf
---------------------
# add 2018.1.24
# ref: Source Code: /usr/libexec/usermin/miniserv.pl
no_ssl3=1
no_ssl2=1
no_tls1=1
ssl_cipher_list=HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!RC4:!3DES
#EOF
```

上記修正により、sslv2, sslv3, TLS1.0が無効になりました。


以上。
RPMがインストールされていなければyumする関数

# 目的
Vagrantのprovisioningスクリプトで毎回毎回yumを走らせるのは微妙だと思ったのでrpmを挟んで確認することにした。

# 定義

```
install_unless_installed() {
  if rpm -qa $1 | grep -q $1; then
    true
  else
    yum install -y $1
  fi
}
```

# 使い方

```
$ install_unless_installed python-setuptools
```
空のファイルを作る２つの方法


何かと作成する必要のある空のファイル。touchコマンドとechoコマンドを使って作成することができます。

# touch コマンドを使う

```
$ touch null_file
```

# echo コマンドを使う

```
$ echo -n > null_file
```

echoの出力はデフォルトで最後に改行が加えられます。

これを回避するために、オプションで-nを指定し改行コードを含まないようにしています。

オプションを指定しなければ、改行コードのみの１バイトのファイルができてしまうので気をつけましょう。
[GPS]Pythonでkmlファイルを作成する

# 概要
Pythonを使って、三次元地理空間情報である**kmlファイル**を作成し、Google Earthで表示する

## 事前準備
simplekmlが必要なので、OSに合わせてsimplekmlのライブラリをインストールする

## 目的
緯度、経度、高度をまとめたcsvファイルからkmlファイルを作成することに。xmlベースなので、ElementTreeでも良かったんだが、調べてみたらkmlを作れるsimplekmlがあるので、simplekmlを使ってkmlファイルを作成する。
  
## ソース
※csv読み込みの部分はサンプル用配列に置き換えました。

```py:gpsdata_to_kml.py
#!/usr/bin/python2.7
#-*- coding: utf-8 -*-
import simplekml

# ポイント形式で表示
## [場所名, 経度, 緯度]
sample_points = [["東京駅", 139.766389, 35.681340],
                 ["有楽町駅", 139.763360, 35.675056],
                 ["新宿駅", 139.700432, 35.690938],
                 ["池袋駅", 139.711570, 35.730235],
                 ["秋葉原駅", 139.774091, 35.698704],
                 ["上野駅", 139.777195, 35.713714]]


kml = simplekml.Kml()
for point in sample_points:
    kml.newpoint(name=unicode(point[0], 'utf-8'), coords=[(point[1], point[2])])

kml.save('yamanote_line.kml')

# 高度を含めてLINESTRING形式で表示
## [物体名, 経度, 緯度, 高度, 色]
sample_linestrings = [["スカイツリー", 139.810657, 35.710089, 634.000000, simplekml.Color.grey],
                      ["○ンダム", 139.810557, 35.710089, 18.000000 , simplekml.Color.white],
                      ["○ルトラマン", 139.810657, 35.709989, 40.000000, simplekml.Color.red],
                      ["○イターン３", 139.810757, 35.710089, 120.000000, simplekml.Color.yellow],
                      ["○ンバスター", 139.810657, 35.710189, 200.000000, simplekml.Color.black]]

kml = simplekml.Kml()

for linestring in sample_linestrings:
    ls = kml.newlinestring(name=unicode(linestring[0], 'utf-8'))
    ls.style.linestyle.color = linestring[4]
    ls.style.linestyle.width = 8
    ls.extrude = 1
    ls.altitudemode = simplekml.AltitudeMode.absolute
    ls.coords = [(float(linestring[1]), float(linestring[2]), float(linestring[3]))]

kml.save('skytree.kml')
```
## Google Earthで出力
### ポイント形式で表示
![img_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/55766/4bb74fac-9c53-72ba-f4ed-0d378475a6f3.jpeg)
### LINESTRING形式で表示
![img_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/55766/34ffe7f5-9d48-c1f1-97be-8a727218794f.jpeg)
LocomotiveCMSのメールが改行されるようにする。

# 前提条件

本番環境の`/var/www/your_cms`にlocomotivecmsのRailsアプリが配置されていること

* 参考: [engine in production](http://doc.locomotivecms.com/get-started/engine-in-production)

# 作業
## new_content_entry.html.hamlを作成する

new_content_entry.html.hamlを作成すると、新規データを作成したときのメール送信時に、このテンプレートを使うようになります。

```
cd /var/www/your_cms
mkdir app/views/locomotive/notifications/
vim app/views/locomotive/notifications/new_content_entry.html.haml
```

```
# new_content_entry.html.haml:

%p= t('.title', name: @account.name, domain: @domain, date: I18n.l(Time.now.in_time_zone), locale: @account.locale).html_safe

%p
  %b= t('.type', type: @type.name, locale: @account.locale)
  %br
  %i= @type.description

%hr

%ul
  - @type.ordered_entries_custom_fields.each do |field|
    - value = @entry.send(field.name)
    %li
      %strong= field.label
      &nbsp;-&nbsp;
      %i
        - case field.type.to_s
        - when 'file'
          - url = value.guess_url
          - url = url =~ /^http/ ? url : URI.join("http://#{@domain}", url).to_s # Amazon S3 (http/https) or local files ?
          = link_to File.basename(url), url
        - when 'select'
          = value
        - when 'belongs_to'
          = value.try(:_label)
        - when 'has_many', 'many_to_many'
          = value.map(&:_label).join(', ')
        - when 'tags'
          = value.join(', ')
        - when 'text'
          = raw(value.gsub(/(\r\n|\r|\n)/, "<br />"))
        - else
          = value
~~~

## unicornを再起動して、変更を反映する

~~~
sudo kill -QUIT `cat /tmp/your_cms.pid`
cd /var/www/your_cms
bundle exec unicorn_rails -E production -c config/unicorn.rb -D
~~~
play + jolokia + hawtio

play java のモニタリングをしたくて、ぱっと組み合わせてできたもの。
何もないよりはマシというレベルで、zabbixで監視する余裕がないとか客先の環境に手軽にさっといれたいとか、そういう状況向け。

Jolokiaとhawtioを組み合わせます。（どちらももっと適した使い方がある気がしてならない・・・）

* https://jolokia.org/index.html
* http://hawt.io/


## Jolokiaの設定

### agentのダウンロード

公式サイトより、jolokia-jvm-x.x.x-agent.jarを入手。
https://jolokia.org/download.html

### playの起動スクリプトにjavaagentの設定追加

playのビルドで作られたアプリのスクリプトの中に、オプションの渡し方についてのコメントが下記のようにあります。

```
  # jvm options and output control
  JAVA_OPTS          environment variable, if unset uses "$java_opts"
  -Dkey=val          pass -Dkey=val directly to the java runtime
  -J-X               pass option -X directly to the java runtime
                     (-J is stripped)
```

`-J` をつけて渡すと、それを除いたのがjavaコマンドの引数として渡せるようです。

jmxのポートとホストをjolokiaのagentに設定したものを、下記のようにして渡す。

```
JOLOKIA="-J-javaagent:${AGENT_PATH}/jolokia-jvm-x.x.x-agent.jar=port=3333,host=localhost"
./bin/[APP_NAME] $JOLOKIA
```

## hawtioの設定

### hawtio-appをダウンロード

公式サイトより、hawtio-app-x.x.x.jarをダウンロード。
http://hawt.io/getstarted/index.html

### hawtioの起動

下記でポート番号を指定しての起動になる。

`java -jar hawtio-app-x.x.x.jar --port 8888`

http://localhost:8888/hawtio からアクセス可能

### 監視対象の接続

playに設定したjolokiaをhawtioから接続。Connect＞Remoteから、接続の設定を追加。


![image](https://qiita-image-store.s3.amazonaws.com/0/9880/26ebd238-7865-1342-e667-9e40109cc583.png)

### 閲覧

Containerに、上で設定した接続先名があるので、そこから辿れる。
DashBoadに、Heapメモリの使用率などのグラフが表示される。jvisualvmと同程度の情報を見られる模様。

## まとめ

とりあえず何かしらを見るにはいいが、リアルタイムの変化しか見られない…
これならjvisualvmの方が手っ取り早い気もする。
bundle installでnokogumboのインストールが失敗する場合の解決方法

# 解決方法

~~~shell
$ bundle config build.nokogumbo --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2

$ bundle install
~~~

# 参考

* [bundle installでnokogiriのインストールが失敗する場合の解決方法](http://qiita.com/k-yamada@github/items/2bfa57cb3386b6d51e69)
Homebrew 環境で MeCab の Java バインディングを構築

Homebrew で環境作った Mac OSX Yosemite に MeCab の Java バインディングを構築するのにいろいろやることあったのでメモ。

## Homebrew と MeCab と Java をインストール
```bash

# Homebrew をいれる
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# MeCab をいれる
brew install mecab mecab-ipadic

# Java をいれる
brew tap phinze/homebrew-cask
brew install brew-cask
brew tap caskroom/versions

brew cask install java
export JAVA_HOME=`/usr/libexec/java_home`

# Mac の sed 使いにくいから GNU sed いれる
brew install gnu-sed
```

## MeCabのJavaバインディング構築

```bash

# MeCab ソースの取得
git clone --depth 1 https://github.com/taku910/mecab.git
cd mecab/mecab/java/

# Makefile の編集
gsed -i '6c\INCLUDE=${JAVA_HOME}/include/' Makefile
gsed -i '7c\INCLUDE2=${JAVA_HOME}/include/darwin/' Makefile
gsed -i '10c\LIBS=-arch x86_64 `mecab-config --libs`' Makefile
gsed -i '11c\INC=-arch x86_64 `mecab-config --cflags` -I$(INCLUDE) -I$(INCLUDE2)' Makefile
gsed -i '15c\\t$(CXX) -dynamiclib $(TARGET)_wrap.o -o lib$(TARGET).dylib $(LIBS)' Makefile

make
```

ここまでやって↓こんな感じになればOK

```console
$ ls
Makefile       MeCab_wrap.cxx README         org            test.java
MeCab.jar      MeCab_wrap.o   libMeCab.dylib test.class

$ make test
env LD_LIBRARY_PATH=. java test
0.996
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

...(省略)
```

## 参考
- http://tseiya.hatenablog.com/entry/2012/02/14/154150
- http://blog.kenkov.jp/2013/04/04/mecab_scala.html
テーブルの列情報・キー情報を取得する

キーやら型やらぱぱっと確認したいときに。

* 列情報の取得

```sample1.sql
USE database
GO
EXEC sp_columns @table_name = N'table'
```

* プライマルキーの取得

```sample2.sql
USE database
GO
EXEC sp_pkeys @table_name = N'table'
```
詳しくは[このあたり](https://msdn.microsoft.com/ja-jp/library/ms182764(v=sql.120).aspx)を。
ElasticBeansTalkへのクライアントからの認証がえくすぱいあされる

# 問題
ElasticBeansTalkにEBCLIからアクセスする際に認証がはじかれました。
`ERROR: Operation Denied. Signature expired:以下略`とのこと。

# 原因と対策
コマンドを発行した端末の時刻がずれていたことが原因のようです。
時刻が5分以上ずれていると認証がはじかれるみたいです。
JavascriptとStylesheet（ついでにMarkdown)だけでモックを作れるWebサーバー MockSwitch.go


デモ用にD3.jsでいろいろな種類のグラフを作成する必要が出てきたので、JSとCSSを適当に配置すればこれまた適当にHTMLを作ってくれるWebサーバーをGolangで作ってみた。

→ [ソースはこちら](https://gist.github.com/nobuhito/894b359d26e3bce9c404)

## Usage

```bash
go build MockSwitch.go
mkdir hoge
echo "document.body.appendChild(document.createTextNode('Hello MockSwitch'));" > hoge/hoge.js
./MockSwitch
```

Browse http://localhost:8000/hoge

## 構成

バイナリと同じ場所に新しいフォルダを作成してファイルを配置した後に起動させればHTMLが出力される。

### 空のHTML
以下のように空フォルダを用意してから `http://localhost:8000/hoge` にアクセスすると空のHTMLが表示される。

```text
MockSwitch
 └ hoge
```

### JSのみ
例えば上記のUsageのようにJSファイルだけを用意してから `http://localhost:8000/hoge` にアクセスすると「Hello MockSwitch」が表示される。

```text
MockSwitch
 └ hoge
   └ hoge.js
```

### MDの扱い
 `.md` ファイルに関してはGitHubのパーサーを利用してHTMLにフォーマットするので、 `.md` ファイルの簡易ビューワーとしても使える。

```text
MockSwitch
 └ hoge
   └ hoge.md
```


### 複数ファイル
複数のファイルを突っ込んだ場合は拡張子に従ってHTMLの適切な場所に展開される。もし同じ拡張子が複数ある場合は辞書順に表示されるので頭に数字などを付け加えて制御する。

```text
MockSwitch
 └ hoge
   └ 0-util.css
   └ hoge.css
   └ hoge.js
   └ hoge.md
```

### 共通ファイル
jQueryやBootstrap、D3.jsなどの共通ファイルについては「dist」フォルダを作成してその中に突っ込んでおくと自動的に拾って表示する。

```text
MockSwitch
 └ dist
 │ └ d3.js
 └ hoge
   └ 0-util.css
   └ hoge.css
   └ hoge.js
   └ hoge.md
```

### おすすめ

新しいページを作るたびにHTML5のテンプレート探してコピペしてローカルにWebサーバー準備してって人なのに複数のJSを書いて動作比較のデモしなきゃいけないっていうニッチな用途におすすめです(稀)。
MacのTerminalで特定ファイルをまとめてコピーする

#Macで特定ファイルをまとめてコピーする

Unixコマンド弱いマンのメモ。
大量データのコピーをcpコマンド単体では引数過多でダメになるらしいので
xargsでfindの検索結果をcpに引き渡す方法でやってみます。
微妙にUnix環境とTerminalでxargsの扱いが違ったので。
MaxOSのTerminal環境でのメモになります。

## 1. まずfindコマンド+正規表現で対象ファイルが引っ掛かるかチェック

```
find . -name '*.png'
```

## 2. おまけ：maxdepthを使うとカレントディレクトリのみ指定出来る

```
find . maxdepth 1 -name '*.png'
```

## 3. xargs使ってfindの検索結果をcpに流し込む

```
find . -maxdepth 1 -name '*.png' | xargs -J % cp % ./コピー先フォルダ名
```
AFNetworkingでPOST bodyに直接バイナリデータを設定する


## 発行したいリクエスト

- POST bodyがバイナリデータで始まる（!= multipart/form-data）
- Content-Typeは`application/octet-stream`

```HTTPリクエスト（一部抜粋）
POST /storage/files/XXX/upload HTTP/1.1
Host: hoge.example.com
Content-Type: application/octet-stream
Content-Length: 1601207
FileName: test.jpg

(ここにバイナリデータ)
```

[こちら](https://muzammilazmi.wordpress.com/2013/04/20/afnetworking-how-to-post-data-nsdata-on-server/)に記載されていることを参考にしました。

```objective-c:実装
+ (void)uploadFile:(NSData *)fileData fileName:(NSString *)fileName callback:(RequestCallback)callback {
    NSString *folderId = @"XXX";
    NSString *url = [NSString stringWithFormat:@"%@/storage/files/%@/upload", @"https://hoge.example.com", folderId];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
    request.HTTPMethod = @"POST";
    [request setValue:@"application/octet-stream" forHTTPHeaderField:@"Content-Type"];
    [request setValue:fileName forHTTPHeaderField:@"FileName"];
    [request setHTTPBody:fileData];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"responseObject = %@", responseObject);
        callback();
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        callback();
    }];
    [operation start];
}
```

Callback周りは、てきとーです。


## ちなみにAndroidでは

Retrofitを使えば、簡単です。

```java:
@Headers("Content-Type: application/octet-stream")
@POST("/storage/files/{folderId}/upload")
void uploadFile(@Header("FileName") String fileName, @Path("folderId") String folderId, @Body TypedFile file, MyCallback<UploadedFileInfo> callback);
```
`@Body`アノテーションを、`TypedFile`につけたら、すんなりバイナリを直接送れました。
AWSに設置したBitnamiRedmineにFTP接続する


＜＜追記＞＞
全くセキュアではない、ただのFTP接続です。
[こちら](http://qiita.com/SYABU555/items/c8c5f18ae6108b04f691)にセキュアにFTP接続（SFTP接続）する方法を記事にしましたので
ぜひご利用ください。

この記事は一応残しておきます。。

----
---

無理やりできたので手順を残しておきます。
セキュリティ上どうなのと言われたら多分ダメですのでご注意ください。
セキュアな接続方法は後で調べよう…かな…

またこの記事は、AWS上にRedmineを入れており、SSH通信が可能なことが前提になっています。
前提条件から入る方は[こちら](http://qiita.com/SYABU555/items/916d27313e6d82041f6b)を参考にしてください。

##1. vsftpdの設定ファイルをいじる
参考サイトは[こちら](http://blog.genies.jp/2011/07/amazon-ec2-amazon-linux-vsftpd.html)。

下記コマンドからvsftpdの設定ファイルをいじります。
なお、前提条件のようにAWS MarketplaceからbitnamiのRedmineをインストールしていれば、
vsftpdは既にインストールされている状態です。

>バックアップをとってから編集しておく
>$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf_BAK
>$ sudo vi /etc/vsftpd.conf

| 分類	      |内容     	  |意味          |
|:----------:|:-----------|:------------|
| 修正        |anonymous_enable=NO	|匿名ユーザーのログインは許可しない。|
|修正	|dirmessage_enable=NO	|ユーザが新しいディレクトリに初めて移動したとしてもメッセージは表示しない。|
|修正	|ascii_upload_enable=YES	|アスキーモードのアップロードを有効にする。|
|修正	|ascii_download_enable=YES	|アスキーモードのダウンロードを有効にする。|
|修正	|chroot_local_user=YES	|ローカルユーザーのルートを各自のホームに変更する。|
|修正	|chroot_list_enable=YES	|chroot_listを有効にする。ファイルはデフォルト（chroot_list_file=/etc/vsftpd.chroot_list）になる。|
|修正	|tcp_wrappers=NO	|ホストへのアクセスを制御しない。（EC2のSecurity Groupsで設定する方がよい）|
|修正	|connect_from_port_20=NO	|ActiveFTPを無効にする。|
|修正	|xferlog_std_format=NO	|wu-ftpdではなく，vsftpdログ形式でログを記録する。|
|追加	|pasv_enable=YES	|PASV FTPを有効にする。|
|追加	|pasv_addr_resolve=YES	|PASVモード接続先IPアドレスをホスト名から取得する。|
|追加	|pasv_address=固定IP	|Elestic IPを設定する。（インスタンスのPublic DNSを指定するとPASVモードでの接続はできない。バージョン2.0.4以降であれば、IPが固定でなくても pasv_addressにDDNSを書くことで動的なIPに対応できる。）|
|追加	|pasv_min_port=60001	|PASVモード接続時の最小ポート番号を設定する。（確認した空きポートの範囲で設定）|
|追加	|pasv_max_port=60010	|PASVモード接続時の最大ポート番号を設定する。（確認した空きポートの範囲で設定）|
|追加	|use_localtime=YES	|ローカルタイムを使用する。（デフォルトはGMT）|
|追加	|force_dot_files=YES	|.（ドット）で始まるファイルを隠さない。|

加えて、すでに加筆されているbitnamiの設定も少しいじる必要があります。
[bitnamiのForum](https://community.bitnami.com/t/unable-to-login-to-ftp/25765)に同じことで悩んでる人がいたので拝借。

| 分類	      |内容     	  |意味          |
|:----------:|:-----------|:------------|
|修正	|listen_address=0.0.0.0	|すみません、よくわかっていません…|

これで設定は完了です。
最後に再起動しておきましょう。
> $ sudo service vsftpd restart

sudoしないとエラーを吐くのでご注意を。

##2.空のvsftpd.chroot_listを作成する
なくても良いのかもしれませんが、私は作成しました。
参考にしたのは[こちら](http://network.station.ez-net.jp/server/ftp/vsftpd/chroot.asp)。
>$ sudo touch /etc/vsftpd.chroot_list
>$ sudo chmod 600 /etc/vsftpd.chroot_list


##3.bitnamiftpユーザのパスワードを変更する
bitnamiftpとしてログインするので、パスワードを任意のものに変更しておきます。
>$ sudo passwd bitnamiftp

##4.作業フォルダを作成する
これは念のための対策です。
接続するとRedmineなどの重要なデータが入っているので扱いに注意が必要です。
bitnamiftpの他にユーザを作るなら別ですが、私は面倒なので作業用のフォルダを作ってそこで作業することにしました。

>$ cd ~/apps/
>$ sudo mkdir workDir
>$ sudo chmod 755 workDir
>$ sudo chown bitnami:bitnami workDir

##5.インスタンスのSecurity Groupsのポート設定

21番ポートと、60000-60010番ポートをカスタムTCPルールで開けます。
> AWSのEC2メニュー > セキュリティグループ選択 > 対象インスタンスが利用しているセキュリティグループを選択 > インバウンドタグから編集
こんな感じになればOKです
![スクリーンショット 2015-07-23 12.20.35.png](https://qiita-image-store.s3.amazonaws.com/0/85214/8d9170c1-a920-9c33-8a17-1ddc4c1977f2.png "スクリーンショット 2015-07-23 12.20.35.png")



あとはbitnamiftpユーザとしてFFFTPやCyberduckなどのツールでFTP接続すればOKです。
open-vm-toolsとな？


VMware vSphere上の仮想マシンに当たり前のように入れていたVMware Toolsが、
VMware社よりESXiにバンドルされているVMware Toolsではなく各Linuxディストリビューションが提供しているopen-vm-toolsの利用を推奨している。

CentOSの場合はこれで行けた

```
yum -y install open-vm-tools
```


VMware による open-vm-tools のサポート (2074713)
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2074713

知らなかったぜ。
区切り線で区切られたプルダウンの作成

下記のようにプルダウンの項目を区切り線で区切ってグルーピングしたい時、grouped_options_for_select　でプルダウン内の選択項目を作成することで「opt group label」を使用したグルーピングが実現できます。 
`-------`
　AAAA
　BBBB
`-------`
　ああああ
　いいいい

実際のviewで記述されるコードは下記のようになります。
```ruby:
= select :page, :subject, grouped_options_for_select([['AAAA','BBBB'],['ああああ','いいいい']], nil, divider: '-------')
```
Node.jsでFizzBuzz

# FizzBuzz問題
`3の倍数の時にFizz、5の倍数の時Buzzと表示されるプログラムを作れ`
プログラマーの初歩的な問題として出される有名な問題なアレです

参加者がそれなりにできる場合は
時間制限を設けたり、
実行速度を競ったり、
どれだけ少ないバイト数で実現できるか
などなど制限プレイがオススメなアレです。


**そんなわけで！
Node.jsで目指せ！最短コードォー！**

## 普通に書いたコード:219 Bytes
まずはここから。

```Js:fizzbuzz.js
  for(var i=1;i<101;i++){
    var s = "";
    if(!(i % 3)){ s += "Fizz"; }
    if(!(i % 5)){ s += "Buzz"; }
    console.log("%d: %s", i, s);
  }
```


## 個人的最短コード:81 Bytes
もうちょい短くできそうな気もしますがこんな感じ。

```Js:fizzbuzz.js
for(i=1;i<101;i++){console.log("%d: %s%s",i,!(i%3)?'Fizz':'',!(i%5)?'Buzz':'');}
```

## 某所で見つけた最短コード:63 Bytes
```Js:fizzbuzz.js
for(i=0;i++<101;console.log(i%5?a||i:a+"Buzz"))a=i%3?"":"Fizz"
```

あったよありましたよ。もうちょいどこじゃねぇええええ！
出直してきます...

# 参考

[Cozy Ozy](http://d.hatena.ne.jp/Ozy/20070225)
TypeScript + Browserify で特定ライブラリが出力されない時の対処

TypeScriptとBrowserifyを使ったPJで、`require()`や本体コードが出力されないライブラリやフレームワークがあり、ハマってしまったのでメモを残しておきます。



## 原因

型定義ファイルの記述が正しくない場合は、出力されません。

```ts:foobar.d.ts
interface FooBar {
    xxx:string;
    yyy:number;
}
declare var foobar:FooBar;
declare module "foobar" {
    export = FooBar; // NG
}
```

```ts:index.ts
/// <reference path="../typings/tsd.d.ts"/>
import _ = require('lodash');
import foobar = require('foobar');

console.log(_);
console.log(foobar);
```

```js:index.js
var _ = require('lodash');

console.log(_);
console.log(foobar); // JavaScript Error
```



## 対処

下記のように正しく記述すれば、出力されるようになります。
大文字小文字を間違えないように注意。

```ts:foobar.d.ts
interface FooBar {
    xxx:string;
    yyy:number;
}
declare var foobar:FooBar;
declare module "foobar" {
    export = foobar; // OK
}
```
「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム（PowerShell）

#PowerShellでワンライナー

```ps1
do{"進捗","どう","です","か"|Get-Random|%{$res+=$_}}while(!$res.EndsWith("進捗どうですか"))Write-Host $res "???`r`n" $res.Length"文字で煽られました。"
```

気づいたらのっかってる人が増殖してる。

- [「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるClojure](http://qiita.com/esehara@github/items/c57cafa57aa92dc1e3c2)
- [「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム](http://elephnote.com/blog/archives/936) C++
- [「進捗・どう・です・か」をHaskellで書いてみた](http://qiita.com/lotz/items/b47913cb27052cf9e127)
- [golang の進捗どうですか](http://qiita.com/mattn/items/4b4ce89396d660a155a9)
- [Elixir - 進捗どうですか？](http://qiita.com/A-gen/items/6a8974d4dc7e3f4695f7)
- [進捗どうですかブーム?にrubyでのっかってみる](http://qiita.com/kataware/items/edc8d0f02a16a21c47dc)
- [進捗どうですかブーム??にPythonでのりかかってみる](http://qiita.com/hisatoshi/items/0ccca55168d58a940661)
- [進捗どうですかブーム???にShellScriptで挑むフリしてExpectに逃げる]
(http://qiita.com/mpyw/items/e5a93e7195d8a8284a1f)
- [進捗どうですかブーム???に Perl でのりかかる](http://qiita.com/b_wind/items/06c56c898a988c2463fe)
- [「進捗・どう・です・か」をPHPで書いてみた](http://qiita.com/kiimiiis/items/2f98e19d00616d95d0ce)
- [bat - 「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるバッチ](http://qiita.com/sawa_tsuka/items/d8d43d4b1f8e7865ad5c)
- [「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム（C#で挑戦）](http://qiita.com/moto_pipedo/items/e7f924585c762b0da4a7)
- [「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム（C#/LINQ）](http://qiita.com/shoooo/items/ec84418c37f08ecf7576)

- [真夏の夜の淫夢 - 1145148101919ブームにShellScriptで普通に挑む](http://qiita.com/844196/items/51b5c2cf5449310909f1)
- [危険シェル芸 - 激しい進捗確認の嵐でマシンリソースを高速に喰いつぶすワンライナー](http://qiita.com/neunetneucom/items/dc1f62d22927350e45fe)
- [「進捗どうですか」プログラムにおける形態素解析エンジンMeCabの適用](http://qiita.com/giiko_/items/c233a93a26fec79b1710)
- [「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるReactコンポーネント](http://qiita.com/suin/items/af3e770784be87377077)