OmniAICreator/Qiita-1.07M huggingface dataset:
Keynoteで最悪な3D円グラフを作る


# はじめに
みなさんは3D円グラフ、好きですか？私は好きじゃないです。
最悪な3D円グラフを作ることに成功したので、共有します。

# やりかた

この視認性に優れた2D円グラフを、最悪な3D円グラフにしてみましょう。

## 2D円グラフを3D円グラフに変更する

![おはようのとりかた.001.png](https://qiita-image-store.s3.amazonaws.com/0/15182/e1b52acf-f050-74a2-ab5a-702ff36b6517.png "おはようのとりかた.001.png")

Keynoteの右側にあるフォーマットからグラフのタイプを変更します。

![keynote_right.png](https://qiita-image-store.s3.amazonaws.com/0/15182/fbc1fc00-83d5-d27b-cfd6-dde26e1d6203.png "keynote_right.png")

![keynote_graph_type.png](https://qiita-image-store.s3.amazonaws.com/0/15182/3eb79a9b-369b-b8b4-7448-421c86dfd545.png "keynote_graph_type.png")

3D 円グラフ を選択します。

![スクリーンショット 2014-08-19 14.46.49.png](https://qiita-image-store.s3.amazonaws.com/0/15182/57ab4dfe-1fd0-8c57-5907-05b409a322e7.png "スクリーンショット 2014-08-19 14.46.49.png")

好きな3D円グラフのスタイルを選びましょう。

![スクリーンショット 2014-08-19 14.49.20.png](https://qiita-image-store.s3.amazonaws.com/0/15182/9e05087b-601e-f7dd-a5c1-099fd82237dc.png "スクリーンショット 2014-08-19 14.49.20.png")

3D円グラフにすることはできました。これだけではちょっと物足りなさを感じます。

## 3D円グラフに奥行きをつける

![おはようのとりかた.001.png](https://qiita-image-store.s3.amazonaws.com/0/15182/163b4d2e-4bba-f3fe-7f2d-f2d6d5756748.png "おはようのとりかた.001.png")

そういうときは、これ。
3Dシーンを開きます。

![keynote_3d_scene.png](https://qiita-image-store.s3.amazonaws.com/0/15182/5a0a251c-7d73-b830-8e44-eb0cce4ae8ff.png "keynote_3d_scene.png")

グラフの奥行というオプションがあります。なんだか面白そうです。

![スクリーンショット 2014-08-19 14.51.20.png](https://qiita-image-store.s3.amazonaws.com/0/15182/fd0e1a72-baa2-fe55-3e18-7bf76d795e88.png "スクリーンショット 2014-08-19 14.51.20.png")

思い切って、スライダーを右に動かします。

![スクリーンショット 2014-08-19 14.53.56.png](https://qiita-image-store.s3.amazonaws.com/0/15182/563d7848-3fb2-0d20-97c3-958836d088f7.png "スクリーンショット 2014-08-19 14.53.56.png")

邪悪な感じになりました。

![おはようのとりかた.001.png](https://qiita-image-store.s3.amazonaws.com/0/15182/cba1afed-5d55-810e-c169-e2ec59f155b0.png "おはようのとりかた.001.png")

## 3D円グラフをとにかく回す

スライド中の3D円グラフをクリックすると、中央にボタンがあります。

![スクリーンショット 2014-08-19 14.56.13.png](https://qiita-image-store.s3.amazonaws.com/0/15182/697accc7-c66d-1304-0a00-39ff146c6577.png "スクリーンショット 2014-08-19 14.56.13.png")

押すと色がかわるので、押したままの状態でドラッグしましょう。いい感じになったらドロップします。
![スクリーンショット 2014-08-19 14.56.59.png](https://qiita-image-store.s3.amazonaws.com/0/15182/97d449ed-f138-270a-bb26-23304f6f971f.png "スクリーンショット 2014-08-19 14.56.59.png")

どうでしょうか。あんなに見やすかった2D円グラフを、こんなに邪悪で最悪な感じの3D円グラフにすることができました。

![おはようのとりかた.001.png](https://qiita-image-store.s3.amazonaws.com/0/15182/07a2c714-7385-ab41-50b1-95a40e2b2fd7.png "おはようのとりかた.001.png")

# 最後に

世界でたった一つしかないオリジナルの3D円グラフを作りましょう！！！

そして、皆さんもあいさつをして、おはようを言いましょう。
rpm パッケージを大量に効率良くインストール

諸事情によりオフラインな環境へのパッケージインストールをする際、インストールしたい対象パッケージの依存によりしこたま rpm パッケージを入れるような recipe を書くことありませんか？
色々と試してみた結果、現在はこちらのコードで落ち着いておりますので、ご参考になれば。

### 使用ファイル
* files / default / _インストール対象パッケージ郡_
* attribute 設定ファイル
* recipes / _recipe ファイル_

##### インストール対象パッケージ郡
files/default へ配置

##### attribute 設定ファイル
rpm パッケージ転送時の破損を発見出来るよう、sha256 による checksum も事前に取得し、設定しておきます。 
( 上から順にインストールされていきますので、依存関係を意識した順序で。 )

```ruby:attributes/default.rb
default['imagemagick']['rpms'] = [
  { rpm_package_name:     "libjpeg-6b-38.x86_64.rpm",
    rpm_package_checksum: "8fcc4d30ebb3819a8c29a907e489baf8a6ec6a31cd63a6114c39a53aa64f9838",
  },
  { rpm_package_name:     "libpng-1.2.10-17.el5_8.x86_64.rpm",
    rpm_package_checksum: "335caf1909cbe0876dd037a7df702faf1c989ccac5414a39bbdc2762ee6714ac",
  },
  { rpm_package_name:     "libtiff-3.8.2-19.el5_10.x86_64.rpm",
    rpm_package_checksum: "6b512ce51b796f98aa0e0c012a4ea6a7999f1726c0f5432e604042de32e87a29",
  },
  { rpm_package_name:     "ImageMagick-6.4.4-9.el5.x86_64.rpm",
    rpm_package_checksum: "ca5aca99fabbd057c93a8096b6c65e4ad2caa97178853f12bb7ffa2fb8364b87",
  }
]
```

##### recipe ファイル

```ruby:recipes/default.rb
# cookbook_file リソースで対象サーバの /tmp にパッケージ郡を転送 (+ファイル破損チェック)
node['imagemagick']['rpms'].each do |rpms|
  cookbook_file "/tmp/#{rpms['rpm_package_name']}" do
    source   rpms['rpm_package_name']
    checksum rpms['rpm_package_checksum']
  end
end

# package リソースで attribute 設定した順にインストールされていきます
node['imagemagick']['rpms'].each do |rpms|
  package rpms['rpm_package_name'] do
    action   :install
    provider Chef::Provider::Package::Rpm
    source   "/tmp/#{rpms['rpm_package_name']}"
  end
end
```

僕がクックブックを作成する際は、依存関係が全く無いピンのパッケージでもこちらのコードを使っています。

ツッコミ大歓迎です。孤独な Chef 使い (もろアンチパターン) より。
ファイルの特定行を読む

CSVファイルをプログラムで処理している時 `hoge.csv の 146 行目でエラー` とか表示されることがよくあります。そういう時に hoge.csv の 146 行目を読むには下のようなコマンドを使うとすばやく中身を確認できます。

``` sh
sed -n "146p" hoge.csv              # hoge.csv の 146 行目を表示
sed -n "140,150p" hoge.csv          # hoge.csv の 140 ~ 150 行目を表示
nl hoge.csv | sed -n "140,150p"     # 上と同じ（行番号付き）
```

エラーが複数行で発生した場合は下のようにすると便利ですね。

``` sh
sed -n "146p; 190p; 220p"           # 146行目、190行目、220行目のみを表示
```

他の方法としては、 `head` と `tail` の合わせ技や `awk` を使った方法があるようです。

``` sh
awk "NR == 140, NR == 150" hoge.csv
head -n 150 hoge.csv | tail -n 10
```

30万行くらいあるファイルで試してみましたが、どれも一秒以下で終わるので、好きなものを使っていいと思います。
また、特定行 **以外** を出力する場合は下記のようにします。

``` sh
sed "146d; 190d; 220d" test.csv > result.csv          # 146行目、190行目、220行目以外を出力
```
ウェブスクレイピング

Polymer.dart の transformer のソースコード見てみたら、ふと思いついたのでメモ。

スクレイピングには html5lib を使う。これは dart:html （クライアントサイド dart）と似た API を持ち、使い慣れた感じでスクレイピングできる。

こんな感じで書ける
===========

http://comic-walker.com/ をスクレイピングしてみる:

```dart
main() {
  final url = 'http://comic-walker.com/';

  getHtml(url).then((document) {
    // ページタイトル
    print(document.querySelector('title').text);

    // 新着コミックタイトル一覧
    document.querySelectorAll('#bookList > li').forEach((e) {
      print(e.querySelector('.list_bookName').text);
    });
  });
}
```

実装
====

html5lib には HTML 取得部分までは実装されていないので `getHtml` はちょっとした実装が必要。

```dart
import 'dart:io';
import 'dart:async';
import 'package:html5lib/parser.dart';
import 'package:html5lib/dom.dart';

/// [url] で指定された HTML を取得しパースする
Future<Document> getHtml(String url) =>
    new HttpClient()
      .getUrl(Uri.parse(url))
      .then((req) => req.close())
      .then((res) => res
          .asyncExpand((bytes) => new Stream.fromIterable(bytes))
          .toList())
      .then((bytes) => parse(bytes, sourceUrl: url));
```

これだけ。

実際はタイムアウト、Content-Type チェック、文字エンコーディングの明示的な指定、みたいなのもあったほうが良さそう。

html5lib は Polymer.dart の tramsformer の重要な部分を担っているので、開発止まった詰んだ。。。みたいなことはしばらく起きなさそう。

クライアントサイドで動く言語は、それを基準としたスクレイピング API が扱いやすく向いていると思うし、Node, Dart は相性よいのかも。
ターミナルで SJIS の文字化けを避ける

# 手短に言うと

`cat 'hoge.csv'` で文字化けするならば下記のコマンドを試す。

```.sh
iconv -f SJIS 'hoge.csv'
```

「位置 **** で不正な入力シーケンスがありました」が出るならば windows の拡張文字コードセットになっていることがあるので、下記を試す。

```.sh
iconv -f cp932 'hoge.csv'
```

~/.bashrc 等のシェル起動時のスクリプトの中にエイリアスを定義しておくと楽できる。

```.sh
alias sjis="iconv -f cp932"
```

# 長々と話すと

CSV ファイルの様子を見るときに `head` とか `tail` とか `cat` とかしていると、 SJIS のファイルが文字化けして吐きそうになることがあります。そういう時には `nkf` か `iconv` を使うとなんとかなることが多いです。

`nkf` は Network Kanji Filter の略だそうです。大昔に日本語のメールを送る時に変換するために生まれたコマンドらしいです。こちらは、インストールされてないことが多いので下の `iconv` が良いかもしれません。たぶん `nkf hoge.csv` のように引数なしでも動くはずです。引数を設定すれば好きな文字コード・改行コードに変換できます。詳細はヘルプを見たほうが良いです。

`iconv` は International Codeset Conversion Library の略で、わりと一般的な文字コード変換ライブラリのようです。I convert で覚えるといいかもしれません。あるいは、アイコンブとか。 `iconv -f SJIS hoge.csv` のようにして使います。`nkf` と同じく、他の文字コードにも変換できます。ヘルプを見ればわかりますが `iconv -l` で扱うことの出来るすべての文字コードが出てきます。

ある Shift JIS のファイルを `iconv -f SJIS` で読んだ場合に「位置 **** で不正な入力シーケンスがありました」というようなメッセージが出ました。確認してみると「﨑」の文字で「たつさき」とか呼ばれている文字でした。どうやら windows でこの文字を使用した場合、通常の Shift JIS の枠から外れ CP932 と呼ばれる windows 独自の文字コードセットになるようです。なので `iconv -f CP932` で読んでみると、うまく表示できました。

ちなみに csv ファイルを直接 `cat` や `less` で見ると形が崩れて見づらいので、

```
column -s, -t hoge.csv | less -S
```

のようにすると、見やすく表示することが出来ます。
先頭が -(ハイフン) なファイルの使い道を考えてみた

#概要
個人的に linux や Unix を触り初めて一通りのファイル操作ができるようになってきた段階で遭遇する、-(ハイフン)が先頭のファイル問題について思うところをまとめてみました。

#-(ハイフン)が先頭のファイルの操作について
##環境
* MacOS10.9

##操作
* -(ハイフン)が先頭にあるファイルを作成して確認

```
$ touch -- -hoge.txt
$ ls -- -hoge.txt
-hoge.txt
$ ls -la ./-hoge.txt
-rw-r--r--  1 hoge  hoge Users  0  8 19 14:21 ./-hoge.txt
$ ls -la -- -hoge.txt
-rw-r--r--  1 hoge  hoge Users  0  8 19 14:21 -hoge.txt
```

要は ```--``` で打ち消すんですね。

## man bash
```man bash``` の ``--`` の項目を以下に引用しておきます。

> A  --  signals the end of options and disables further option
                 processing.  Any arguments after the -- are treated as  file-
                 names and arguments.  An argument of - is equivalent to --.

オプションの終わりを示し、さらにオプションを無効にする。
```--``` の後の引数は ```-```ファイルとして扱われる。


#使い所を考えてみる
##その1
* タイミングを間違えて実行するとマズイことになるスクリプト郡には ``-`` を先頭につけてスクリプト化しておくという運用方法にしてみる
* 明示的に ```--``` を付けないと怒られるので有効か??
* ```./``` でオペレーションをする文化だった場合あまり効果なし??
* タブ補完等で流れで作業してオペレーションミスが起こすということは防げそう
* (そもそもそんな危険な作業はできるだけ減らしていくことが重要なのでは...

##その2
* 新入社員に配布するPCや開発環境に予め仕込んで地味な洗礼を与える
* あっさりと消されてしまうか、少しだけ悶絶してもらえるかの2択

#所感
* いい勉強になりました。
Zabbix Agent の導入（AWS AutoScale無理やり対応）

#はじめに
Zabbix-Agentの自動登録の際に、アクティブチェックが出来ないってことが分かりました。
（過去の投稿をご覧ください）
そこで、サービス起動時に自ホスト名を設定しちゃおう！ってことで検証しました。

#Zabbix-Agentのインストール

`# sudo rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm`

`# sudo yum install zabbix-agent`

#設定
##通常の設定

１．設定ファイルの修正
`$ sudo vi /etc/zabbix/zabbix_agentd.conf`

◆ホスト名固定の場合
```～修正箇所のみ記述～
Server = 【ZabbixサーバIP】
ServerActive = 【ZabbixサーバIP】
hostname = 【ホスト名】
HostMetadata = 【任意】
AllowRoot=1
```

◆ホスト名を取得して自動登録
※アクティブチェックはできません
```～修正箇所のみ記述～
Server = 【ZabbixサーバIP】
ServerActive = 【ZabbixサーバIP】
HostnameItem = system.hostname
HostMetadata = 【任意】
AllowRoot=1
```

２．サービスの自動起動
自動設定
`$ sudo chkconfig zabbix-agent on`

サービスの起動
`$ sudo service zabbix-agent start`

##AutoScale対応
１．設定ファイルの修正
`$ sudo vi /etc/zabbix/zabbix_agentd.conf`

```
～修正箇所のみ記述～
Server = 【ZabbixサーバIP】
ServerActive = 【ZabbixサーバIP】
hostname = strReplaceHost　← 後でスクリプトで置き換えます　
HostMetadata = 【任意】
AllowRoot=1
```

２．起動ファイルの作成

ファイルを生成
`$ sudo touch /etc/init.d/zabbix-control`

実行権を付与
`$ sudo chmod a+x /etc/init.d/zabbix-control`

ファイル編集
`$ sudo vi /etc/init.d/zabbix-control`

```
#!/bin/sh
# chkconfig: 2345 80 0
# description: Zabbix Up/Down
# processname: zabbix-control

#上記はchkconfig addするときの記述となります。

start()
{
strHost=`hostname`
strFilePath="/etc/zabbix/zabbix_agentd.conf"

sed -i -e "s/strReplaceHost/$strHost/" $strFilePath
service zabbix-agent start
}

stop()
{
service zabbix-agent stop
}

restart()
{
stop
start
}

case "$1" in
    start|stop|restart)
        $1
        ;;
    force-reload)
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|force-reload}"
        exit 2
        ;;
esac
```

サービスの登録
`$ sudo chkconfig --add zabbix-control`

サービスの確認
`$ sudo chkconfig --list zabbix-control`

サービスの起動確認
`$ sudo service zabbix-control start`

サービスの停止確認
`$ sudo service zabbix-control stop`
group by 節のカラムを省略する

postgres 9.1 から group by 節のキー以外のカラムを省略できるようになったそうです。

> **GROUP BY が MySQL 風に緩めに**
GROUP BY にプライマリキーが指定されていれば、それ以外の列は GROUP BY に指定しなくても、SELECT 句に書けるようになりました。具体的には
CREATE TABLE tbl (pk integer PRIMARY KEY, t text, i integer);
SELECT pk, t, sum(i) FROM tbl GROUP BY pk;
は、9.0 以前ではエラーになりましたが、9.1 では受け付けられます。 9.0 以前では、t 列も GROUP BY に書く必要があります。
標準SQLでは関数従属性を加味した、このような省略が許されており、9.1 ではその部分的な実装 (プライマリキーのみ) が実装されました。キーの一意性がチェックされるため、省略した列がランダムに選択されることはありません。 MySQLではさらに制限が緩く、なんでも許されてしまうため、「なぜ PostgreSQL では受け付けないのか？」という質問が良くありました。ある程度の互換性が向上したと思われます。

この機能を知らず知らず使っていました。そのせいで postgres 9.3 では成功しているのに、postgres 9.0 ではエラーになるコードを書いてしまいました。超はまりました。自分が管理していない共用データベースなどを使う場合は注意が必要だと思います。

その他 9.1 で更新された機能の解説
http://lets.postgresql.jp/documents/technical/9.1/1
自然改行されたペンネームを次行に送る

※公開しているソースではエラー処理とか省略してます
※使用は自己責任でねー
※このスクリプトの動作確認はInDesign CS5.5 でやりました

今回は「右インデントで揃えたい文字が行幅の関係で折り返されていたら改行する」という処理。あー、文章では非常に伝わりにくいですね。とまあ、編集後記とか編集後記とか編集後記とかによくある（これしか思いつかなかった）形のあれです。ペンネームを「段落の最後に右揃え」でっていう形式ね。

![right.png](https://qiita-image-store.s3.amazonaws.com/0/4000/5eac201d-c102-eb39-2121-dee86720745b.png)

「ライターさんの名前が行幅の関係で自然改行されちゃってたら改行して奇麗に揃えたい」をスクリプトで自動的に処理しようという試みです。今回は、
「右インデント」が最終行にない場合、右インデントの前に改行をいれます。

それではレッツトライ。

ちょっと解説
--
・右インデントの判定には「SpecialCharacters.RIGHT_INDENT_TAB」を使いました。コントロールコードでチェックしてたら最初は動作してたのに途中で動かなくなる変な現象に、まあよくわからんのですがこっちのほうが動作は安定。

・改行の追加部分ですがここは強引に Character の contents に文字を突っ込む方法をとります。たけうちさんのスクリプトでも紹介されていましたがCharacterのcontentsに文字をくっつけると、該当箇所にそのCharacterと同じ設定の文字が追加されてしまうのです（＠＿＠；　これ始めて気がついた時は驚愕しました。いやー、お手軽で素晴らしい。ちなみに contents への右インデントの入れこみですが判定時に利用した「SpecialCharacters.RIGHT_INDENT_TAB」ではうまくいかなかったのでここでは直接 String.fromCharCode(8) で入れています。

```javascript:
//各段落の最終行をCheck
function LAST_LINE_Check() {
	var myDoc = app.activeDocument;
	var myPage= null;
	var myItems = null;
	var myParagraphs = null;
	var myParagraph = null;
	var myCharacters = null;
	var myCharacter = null;
	var myBox = "";
	
	//ページのループ
	for (var p=0; p<myDoc.pages.length; p++) {
		myPage = myDoc.pages.item(p);
		myItems = myPage.allPageItems;
		//ページアイテムのループ
		for (var i=0;i<=myItems.length-1;i++) {
			if (myItems[i].constructor.name !== "TextFrame") {
				continue;
			}
			myBox = myItems[i];
			myParagraphs = myBox.paragraphs;
			//段落のループ
			for (var j = 0;j<=myParagraphs.length-1;j++) {
				myParagraph = myParagraphs[j];
				myCharacters = myParagraph.characters;
				//文字列のループ
				for (var t=myCharacters.length-1;t>=0;t--) {
					myCharacter = myCharacters[t];
					//右インデントのチェック
					if (myCharacter.contents === SpecialCharacters.RIGHT_INDENT_TAB) {
						//右インデントの位置が最終行かどうか判定
						if (No_LastLine(myParagraph,t)) {
							//conntentsに強引に複数文字を割り当てると
							//該当箇所に文字が追加されます
							myCharacter.contents = "\015" + String.fromCharCode(8);
						}
						break;
					}
				}
			}
		}
	}
}

//段落の最終行か否かのチェック
function No_LastLine(NowParagraph,NowIndex) {
	var myLines = NowParagraph.lines;
	var total = 0;
	var myPosition = NowIndex;
	//最終行の文字を除いた文字数を計算
	for (var i = 0;i<myLines.length-1;i++) {
			total = total + myLines[i].characters.length;
	}

	//境目の文字がトータルより小さい＝最終行では無いので改行が必要
	if (total > myPosition) {
		return true
	} else {
		return false
	}
}

LAST_LINE_Check();
```
[Swift]CocoaPodsを導入しようとして発生したエラー内容&amp;対処方法(xcode6 beta4)

swiftでも使えて、
iOS開発ではほぼ必須である「CocoaPods」

[CocoaPods](http://cocoapods.org/)
http://cocoapods.org/

<b>実施したrubyのバージョン</b>

```
ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13]
```
<br>

<b>前提条件</b>

- 新規プロジェクトを作成済みであること

- 新規プロジェクト直下にPodfileを作成済みであること(拡張子なし、vimで作成すること推奨)


### エラー発生までの流れ

#### gemのインストール

```
gem install cocoapods
```

ここは何とかスムーズに行けた。
<br>
#### podのセットアップ

```
pod setup
```

ここも何とかうまく行けた。
<br>
### Podfileの反映

ここでエラー

```
pod install
```

<b>実施後</b>
![qi1.png](https://qiita-image-store.s3.amazonaws.com/0/15812/50622848-180d-b53b-5641-7c555411b39a.png)

### 原因
元々あったCocoaPodsと新しく入れようとしたCocoaPodsが何らかの理由で不具合となっていた。
<br>

swiftが悪いのかCocoaPodsのバージョンが悪かったのかXcode6 Beta4が
悪かったのかは不明。

### 対処方法

```
sudo rm -fr ~/.cocoapods/repos/master

pod setup
pod install
```

以下の画面がターミナルで表示されると成功。

![q2.png](https://qiita-image-store.s3.amazonaws.com/0/15812/ab2cc81d-7fb0-0eaa-40ff-119dc7f8d5b4.png)


上記の対応でも事象が解決されない場合は

####「Macの再起動」

で事象が解決される場合がありますので、上記対応後も事象が解決されない場合は

「Macの再起動」を試みてください。


エラー内容にgit repo masterなどのキーワードが出た際には
お気をつけください！
C#でリモートサーバー上のExeを起動し、戻り値を取得する


とあるサーバー上にあるExeを起動しなければいけなかったので

```csharp

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Security;
using System.Configuration;
using System.IO;

/// <summary>
/// PowerShell経由でリモートの.exeを起動し、戻り値を取得する
/// </summary>
public class RPSSample
{
    /// <summary>
    /// RemotePS実行
    /// </summary>
    /// <param name="targetdir"></param>
    public void Invoke(string targetdir)
    {
        var useSSL = false;
        var serverName = "ServerName";
        var port = 5985; // port no PowerShell remoting uses. 5985 on noSSL, 5986 on SSL 
        var appName = "/wsman"; // 呪文
        var shellUri = "http://schemas.microsoft.com/powershell/Microsoft.PowerShell"; // 呪文
        // PasswordをSecureStringに変換する
        var remoteCredential = new PSCredential("UserName",
            "Password".Aggregate(new SecureString(), (s, c) =>
            {
                s.AppendChar(c);
                return s;
            }));

        var connInfo = new WSManConnectionInfo(useSSL, serverName, port, appName, shellUri, remoteCredential);

        int exitcode;
        using (var rs = RunspaceFactory.CreateRunspace(connInfo))
        {
            try
            {
                rs.Open();

                var command = @"$p = Start-Process 実行したいExe.exe -ArgumentList '引数', 'ON' -PassThru -Wait";
                var pipe1 = rs.CreatePipeline(command);
                var result1 = pipe1.Invoke();

                var pipe2 = rs.CreatePipeline(@"$p.ExitCode");
                var result2 = pipe2.Invoke();
                exitcode = int.Parse(result2.First().BaseObject.ToString());

                var pipe3 = rs.CreatePipeline(@"$p.Close()");
                var result3 = pipe3.Invoke();
            }
            catch
            {
                throw;　//例外処理
            }
        }
    }
}

```

*追記*

winrmのバージョンによって使われるportが異なるようなので、相手先のwinrmバージョン(とwinrm有効かどうか
確認しておく必要がある

* http://blogs.technet.com/b/jpilmblg/archive/2010/10/27/winrm-winrs-wmi.aspx

*参考*

* http://com2kid.wordpress.com/2011/09/22/remotely-executing-commands-in-powershell-using-c/
* http://tech.tanaka733.net/entry/2013/12/10/powershell-from-csharp
* http://msdn.microsoft.com/en-us/library/dd978670%28v=VS.9%29.aspx
* http://www.codeproject.com/Tips/549109/Working-with-SecureString
* http://blogs.msdn.com/b/wmi/archive/2009/07/22/new-default-ports-for-ws-management-and-powershell-remoting.aspx
実行遅延まとめ

# dispatch_afterを利用してスレッド遅延

```objc:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    // 処理内容
});
```

# セレクタを指定して実行

```objc:
[self performSelector:@selector(selector) withObject:nil afterDelay:1.0f];
```

# おまけ

```objc:スリープ
[NSThread sleepForTimeInterval:1.0f];
```
Xamarin.Macでウィンドウを閉じる前に確認する

##Problem
たとえばAppDelegate.cs で以下のように記述すると，最後のウィンドウが閉じた瞬間にアプリケーションを落とすことができます。

```csharp:AppDelegate.cs
public override bool ApplicationShouldTerminateAfterLastWindowClosed(NSApplication sender)
{
	return true;
}
```

ここに確認をはさみたいとき。
上記のようにApplicationShouldTerminateをオーバーライドしないときももちろん有効。

##Solution
NSWindowDelegateを継承したクラスを作成し，これをWindowのDelegateに設定します。MainWindowControllerのInitializeあたりで設定すればよいでしょう。

作成したデリゲートでWindowShouldCloseをオーバーライドして，確認ダイアログをはさみます。falseを返せば閉じられるのをキャンセルできます。

```csharp:MainWindowDelegate.cs
using System;
using MonoMac.AppKit;

namespace Qiita.Sample.XamMac.Notify
{
    public class MainWindowDelegate : NSWindowDelegate
    {
        public MainWindowDelegate()
        {
        }

        public override bool WindowShouldClose(MonoMac.Foundation.NSObject sender)
        {
            using (var alert = new NSAlert())
            {
                alert.AlertStyle = NSAlertStyle.Informational;
                alert.MessageText = "ほんと？";
                alert.InformativeText = "ほんとに閉じていいですか？";
                alert.AddButton("はい");
                alert.AddButton("いいえ");
                var ret = alert.RunSheetModal(sender as NSWindow);
                return (ret == (int)NSAlertButtonReturn.First);
            }
        }
    }
}
```
senderがnullになっても，普通のダイアログとして表示されるだけなので大丈夫です（そもそもならないはず）。

##Conclusion
デリゲート地獄。
Github for Mac をInstallしていると brew での Git が入らない

titleの通り。ハマってた。

Homebrew user は Github for Mac をInstallしてはならない(嘘)
ただアレはデザイナーさんとかがGithubを使いやすくなると思うので、連携したりするのには良いツールだと思う(思う)

AppCleaner等を用いて、Github for Macを削除、
後、
`sudo brew prune` 
`brew install git`
後、
`sudo emacs /etc/paths` (editorは適当にどうぞ)
で `usr/local/bin` を一番上に持って行き、
`source ~/.zshrc` をする。

参考
http://stackoverflow.com/questions/20648235/error-linking-git-to-homebrew
ようやくリリースのXcode6 Beta6は不安定？！


ようやくダウンロードできるようなったBeta6ですが、Beta5よりも動作が不安定な感じがします。悲しい。

Beta6はリリース直後に一度取り下げられて、８時間後ぐらいに再度リリースされています。 [Xcode6 Beta6 がダウンロードできなかった](http://qiita.com/susieyy/items/37f3850ad63a1c83c20d)


## シンタックスハイライトが。。。

Swiftのコードがまったくハイライトされなくなりました。入力補完ももちろん効きません。ObjCはハイライトされています。Beta1、Beta2のころもシンタックスハイライトは不安定でしたが、まったくハイライトされないことはありませんでした。

![WTDOuterShadowView_swift.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/bc5a20a5-663c-57cc-dcfa-ae4209d2f952.jpeg "WTDOuterShadowView_swift.jpg")

## 1回目はなぜか起動しない

インストール後、Xcode6 Beta6 を起動しようとすると、ドックでアイコンがしばらくの間バウンスしたあと、音沙汰がありません。もう一度起動すると立ち上がりました。

## まったく起動しない人もいるご様子

![Twitter___検索_-_lang_ja_xcode6_beta6.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/6abddd28-1254-e38b-c7d6-38623a6ee3bb.jpeg "Twitter___検索_-_lang_ja_xcode6_beta6.jpg")

こんなエラーの場合も。

![_takayama_iPhoneDevさんはTwitterを利用しています.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/3fd2d625-3ba4-e23b-217d-1cbecf4ab76e.jpeg "_takayama_iPhoneDevさんはTwitterを利用しています.jpg")


## Beta5に戻そうかな。。。。
IntraにDocker Registryを立てたときはNO_PROXYも忘れずに


社内LANにDocker Registryを立てていたのですが、NO_PROXYを設定し忘れててはまりました。

# DockerデーモンのProxy設定

CoreOSはこんな感じ。試していませんが同じくsystemdを採用したCentOS 7も同様でしょう。
ExecStartの前で環境変数を設定するのがポイントです。

```
# /etc/systemd/system/docker.service
...
[Service]
...
Environment="HTTP_PROXY=YOUR.PROXY.HOST:PORT"
Environment="NO_PROXY=NO.PROXY.HOST1,NO.PROXY.HOST2"
ExecStart=/usr/bin/docker -d -s=btrfs -r=false -H fd://
...

```

CentOS 6はこちら。

```
# /etc/sysconfig/docker
other_args="--exec-driver=lxc --selinux-enabled"
export HTTP_PROXY=YOUR.PROXY.HOST:PORT
export NO_PROXY=NO.PROXY.HOST1,NO.PROXY.HOST2
```

# 参考
https://coreos.com/docs/launching-containers/building/customizing-docker/
Ruby on Rails request.refererとrequest.referrer

Rails初心者です。Railsの中で遷移元URLを取得する方法を調べていて、request.refererを呼び出すべし、これでHTTPヘッダの中にあるHTTPリファラを参照出来る。という情報を見つけました。
早速試してみようとしたのですが、そこで気づきました。

![スクリーンショット 2014-08-19 10.00.46.png](https://qiita-image-store.s3.amazonaws.com/0/47644/4738bd27-c7fb-6c68-0701-66705684a5b9.png)

refererだけでなく、request.referrerというのがあるのです。
滅茶苦茶紛らわしいじゃねーか！　何が違うんだ、何が！

で、request.rbの中を覗いてみると、

![スクリーンショット 2014-08-19 10.09.34.png](https://qiita-image-store.s3.amazonaws.com/0/47644/a50f3b1d-f98e-e45e-6f48-4456b25f07e3.png)

alias=別名でした。つまり全く同じものを指しています。何も違わないわけですね・・・
じゃあ、何のためにこんなもの存在するんだ、スペルミスする人のために親切心で気を利かせてくれているのか？ また疑問なので調べてみたところ、

httpのヘッダ項目を指すときはreferer、英単語として正しいのはreferrer、

が正解なんですって。何でも元々HTTPの仕様を策定していたときに、その中のキーパーソン的な人がミススペルをしたのがそのまま通ってしまい、refererが定着してしまったそうです。
つまり、RFC2616を正とするかMerriam-Websterを正にするかによって答えは変わってくるということでしょうか。その辺の判断は個々のプログラマーに任せますというのは、なかなかRails寛大で良い感じがします。
WindowsにおけるCUI環境

2015-06現在、公式サイトから最新版ダウンロードするとDLLのエラーが出るので、以下よりダウンロードする

https://github.com/bliker/cmder/releases/tag/v1.1.4.1
↓
issue
https://github.com/bliker/cmder/issues/501

[colinux](http://www.colinux.org/)とか
[cygwin](https://www.cygwin.com/)とか
[mingw](http://www.mingw.org/wiki/MSYS)とか
色々使ってきたけど

今のところ
[cmder](http://bliker.github.io/cmder/)一択

シャレオツ
![cmd.jpg](https://qiita-image-store.s3.amazonaws.com/0/6201/8463d76c-c9aa-c5ac-06b7-9574433e007c.jpeg)


fullバージョンの方で...
![dl.jpg](https://qiita-image-store.s3.amazonaws.com/0/6201/003944ed-2053-5990-b39b-cac2f1d19c5e.jpeg)


後はvagrantでvmにlinux構築してsshログインすればよさそう

Windowsサーバーとかにもフォルダごと持っていって便利に使っています
CakePHP(2.x) のindexアクションのルーティングとパラメータ受け取り

#デフォルトの動作を見てみる

例としてドメインを`http://cakephp.dev`とします。

### `http://cakephp.dev/hoges/index/1` へのアクセス

デフォルトでは、hogesコントローラーのindexアクションが実行されます。

###パラメータの受け取り方
末尾のパラメータ**1**は、下記のように受け取ることが出来ます。

```php:HogesController.php
// http://cakephp.dev/hoges/index/1 へアクセス
public function index($id) {
	if($id && is_numeric($id)) {
		echo "パラメータ $id を受け取りました";	// 「パラメータ 1 を受け取りました」が出力される
	}
}
```


### `http://cakephp.dev/hoges/1` へのアクセス

”index”を省略しただけですが、デフォルトでは末尾の”1”がアクションとして解釈されてしまい、エラーになってしまいます。

>Missing Method in HogesController
>Error: The action **1** is not defined in controller HogesController

#indexアクションのルーティングをしよう

/app/Config/routes.phpにルーティング設定を記述してやると、
indexを省略した際もindexメソッドが実行できるようになります。

###routes.php の編集
```php:routes.php
Router::connect("/:controller/:id",
	array("action" => "index", "method" => "GET"),
	array("id"=>"[0-9]+")
);
```

パラメータを”id”と名付け、正規表現で数字のみの制約をかけています。
これで、`http://cakephp.dev/hoges/1` へのアクセスでも、indexアクションにルーティングされるようになりました。


###パラメータの受け取り方
$this->request->params['パラメータ名']での受け取りになります。

```php:HogesController.php
// http://cakephp.dev/hoges/1 へアクセス
public function index() {
	if ($this->request->params['id']) {
		$id = $this->request->params['id'];
		echo "パラメータ $id を受け取りました";	// 「パラメータ 1 を受け取りました」が出力される
	}
}
```

#パラメータの受け取り方が二通り…？

無事にindex省略時のルーティングができるようになりました。
ただし、このままでは同じindexアクションに、パラメータの受け取り方が二通りあることになってしまいます。

面倒なので、ルーティングをもう一つ記述します。

```php:routes.php
Router::connect("/:controller/index/:id",
	array("action" => "index", "method" => "GET"),
	array("id"=>"[0-9]+")
);
```

index付きのURLでアクセスした際も、パラメータを *$this->request->params['id']* にセットしてやります。

これで`http://cakephp.dev/hoges/index/1` でも、`http://cakephp.dev/hoges/1` でも、
同じ *$this->request->params['id']* にてパラメータを受け取れるようになりました。



#ちなみに…
条件に一致しない際は（この例ではid≠数字）、変更前と同じようにメソッド呼び出しになります。

### `http://cakephp.dev/hoges/fuga` へのアクセス
>Missing Method in HogesController
>Error: The action **fuga** is not defined in controller HogesController
C#におけるtar.gz

##メモ

[SharpZipLib](https://github.com/icsharpcode/SharpZipLib)使った
[SharpCompress](https://github.com/adamhathcock/sharpcompress)と迷ったが、SharpZipLibの方が利用されてそうだったので。
最近更新されてないようなので不安はあるが...

##課題
.gzファイル作る時にファイルの更新日時保持しないようなのでどうしようか悩んでいる

##gzip作成
```csharp
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Tar;

public void CreateGz(string outputFilePath, string inputFilePath)
{
    using (FileStream infs = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read))
    using (FileStream outfs = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write, FileShare.None))
    using (GZipOutputStream gzipStream = new GZipOutputStream(outfs))
    {
        gzipStream.SetLevel(1);// 圧縮レベル: デフォルト6で遅いので強制的に1にセット
        try
        {
            infs.CopyTo(gzipStream);
        }
        catch
        {
            throw;// 例外処理
        }
    }
}

```

##tar.gz作成
```csharp
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Tar;

public void CreateTarGz(string outputTarFilePath, string sourceDirectory)
{
    using (FileStream fs = new FileStream(outputTarFilePath, FileMode.Create, FileAccess.Write, FileShare.None))
    using (GZipOutputStream gzipStream = new GZipOutputStream(fs))
    {
        gzipStream.SetLevel(1);
        using (TarArchive tarArchive = TarArchive.CreateOutputTarArchive(gzipStream))
        {
            try
            {
                Directory.EnumerateFiles(sourceDirectory)
                    .ToList()
                    .ForEach(x =>
                    {
                        var tarEntry = TarEntry.CreateEntryFromFile(x);
                        tarEntry.Name = Path.GetFileName(x);
                        tarArchive.WriteEntry(tarEntry, false);
                    });
            }
            catch
            {
                throw;
            }
        }
    }
}

```
Xcode6 Beta6 がダウンロードできなかった


### 追記　ここから

８月１９日 １０時ごろ

Xcode6 Beta6はダウンロードできるようになりました。
iOS8 Beta6はまだダウンロードできないようです。

### 追記　ここまで

![Swift_-_Resources_-_Apple_Developer.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/dfa5897f-2c7d-3412-e70b-b834cd021112.jpeg "Swift_-_Resources_-_Apple_Developer.jpg")


日本時間の昨夜遅くにXcode6 Beta6がリリースされたようなので、朝早速ダウンロードしようと思いましたが、Beta6のリンクが見当たらないです。悲しい。

この記事は８月１９日 ９時４０分時点に記述しています。

## Yosemite Preview 6 はあるのに

![iOS_Dev_Center_-_Apple_Developer.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/21af9513-7dcc-be97-3e43-2e0a8f551226.jpeg "iOS_Dev_Center_-_Apple_Developer.jpg")


## ダウンロードしたDMGファイルが壊れていた？

ファイルが開けなかったようです。

![Twitter___検索_-_xcode6_beta6.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/ddf9af99-cfc8-1e89-c587-746e419aa3de.jpeg "Twitter___検索_-_xcode6_beta6.jpg")

![Twitter___検索_-_xcode6_beta6.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/19d1d9b9-5205-5656-e8cb-8560988cc3b2.jpeg "Twitter___検索_-_xcode6_beta6.jpg")

## リリースノートも見れません。
 
![Access_Denied.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/ab771a3a-e0e2-f371-d06d-d28399943b25.jpeg "Access_Denied.jpg")


## 悲しみの声

![Twitter___検索_-_lang_ja_xcode6_beta6.jpg](https://qiita-image-store.s3.amazonaws.com/0/4943/3ba514da-5649-e91b-c555-ee15129e167e.jpeg "Twitter___検索_-_lang_ja_xcode6_beta6.jpg")


## SwiftBeta6の変更点

[@dankogai](http://qiita.com/dankogai)さんが、Swiftの変更点をまとめてくださっています。ありがたや。

[Swift - Xcode 6 Beta 6 における変更点](http://qiita.com/dankogai/items/9058a8d4209cf59580db)


## 再リリースを待ちましょう
プラットフォーム別ネイティブ機能


##概要
Unityの機能として、マルチプラットフォーム対応という長所があります。

現状のマルチプラットフォームだけでは、一度書いたコードをそれぞれに「ビルドできる」って機能は有り難い上この上ないですが、実は書くプラットフォームに向けた機能「課金、ゲームセンター(ソーシャル)」はそれぞれのプラットフォームに向けた「Plugin」の書き方をしなくてはいけません。

##ネイティブコードの苦労
勿論、ネイティブのコードを書けるなら「そもそもUnity使うの？」って所から始まり、書けない前提があった時に、学習コストの規模は想像したくもないでしょう。
たったひとつの機能を追加したいがために、何十時間の時間を費やす事はしないでしょう。

おまけに勉強したはいいけど、実装以降その言語を使う事も無ければ、潰しも聞かないとなると厄介です。

例を挙げるならば、
Android ⇒ Java or C++(JNI)
iOS ⇒ C or C++ or Obj-C
となるでしょう。

C系の言語であればスキルの幅として下地を固められるかもしれませんが、C++で、かつ2Dのゲームであれば、そもそもUnityである必要があるのかと考える事もあるかと思われます。

Javaに至っては、「よしUnityだ！」と、ゲームの世界に飛び込んだWindowsプログラマーの皆さんはC#としての互換性は期待できるかもしれません。
ただ諸手を上げて向合いたいかは別ですが…

そこで、AssetStoreから、以下の２点のAssetをご紹介したいと思います。

##Native Plugin
Android、iOSの各プラットフォームに向けたAssetがStans' Assetさんから販売されています。以下の2点です。

Android Native Plugin
http://u3d.as/5rZ

iOS Native
http://u3d.as/4vF

このStan'sAssetさんですが、何がいいってメールサポートのレスポンスがとにかく早い！
自分も助けていただきましたが、こういった所がユーザー心理として有り難いですね。

##このAssetでやれる事
課金〜ソーシャル、ポップアップ、アプリレビューなど、パッと思いつく標準の機能はほぼ実装されています。おまけに、iOSなどはビルドした時のフレームワークの追加なども自動で行なってくれます。
つまりは、Assetの仕様を理解する事で、ネイティブコードには触らずに全て実装できるという事です！

##注意点
Androidのビルドに関して、Androidマニフェストと言われる設定ファイルがあるのですが、メディアとしての広告追加、広告出稿時の効果測定のSDKなどを、他のプラグインを埋め込む際に気をつけなくてはなりません。
設定によってはどちらかが機能しなかったり、アプリが急に落ちたりなどの可能性があります。
Git add できない場合の対処法

# 事象

既にGitに追加していたつもりのファイルが、Gitサーバ側に存在せず、
ローカル環境で再度git addを行っても追加できない。 git pushをしてもGitサーバーにpushされない。

# 原因らしきもの

Gitのローカル環境ではファイルが追加されていたけど、サーバー側へはPushされないため、いくらローカル環境でaddしても追加できなかった。...なぜPushされない?

# 対処

応急処置ですが、ローカル環境の対象ファイルを一旦削除したところ、追加できるようになりました。

```bash
mv 対象ファイル ../ # addしたいファイルをどこかに避難させる
git commit # これでファイルが削除される。
mv ../対象ファイル . # 元の位置に戻す
git add 対象ファイル
git push # これでサーバーに反映された。
```

# 余談

リリース間近にこの罠は焦りました... .
安心してGitを利用するためにも、Gitの操作について、もっと学ぶ必要がありそうです。
Ruby で 24 時超えの時間を楽ちんにパースする方法

# はじめに

みなさん、`2014-08-14 26:00` みたいな時間を扱おうとして困ってませんか？
文字として保存するだけならまだしも、これを元に現在時刻と比較して・・・とかやろうとすると色々大変です。

この記事ではそんな24時間超えの時間を楽ちんに扱うことができる [Chronic](https://github.com/mojombo/chronic) という gem を紹介します。

# そもそも何が困るのか

Ruby の time ライブラリには大変便利な `Time.parse` メソッドがあります。
が、困ったことにこいつは `26:00` みたいな時間は理解してくれません。
irb で実行してみると以下の様なエラーがでます。

`>> Time.parse('2014-08-14 26:00')
ArgumentError: argument out of range`

日付は 2014-02-31 とかでも良きに計らってくれるのに、時間はすごくきっちりしています。
`24:00:00` までは通してくれますが、`24:00:01` になるとエラーになります。
つまり、24時超えの時間を扱おうと思ったら「24時を過ぎていたら日付を一日進めて時間からは24引いて・・・」とかやったりしないといけないわけですね。
なんとめんどくさい！

でもご安心ください、世の中には便利な gem が存在してます。

# Chronic で快適パース生活

24時超えの時間を扱いたい、けど自分で頑張って色々処理をするのはめんどくさい。
そんなあなたに [Chronic](https://github.com/mojombo/chronic) ！

`>> Chronic.parse('2014-08-14 26:00')
Fri, 15 Aug 2014 02:00:00 JST +09:00`

この通り良きに計らってくれます、素敵ですね！
これ以外にも自然言語的な記述も良きに計らってくれて、以下の様な文字列もパースできます。

`>> Chronic.parse('friday 13:00')
Fri, 15 Aug 2014 13:00:00 JST +09:00`

これはすごい！
詳しくは Chronic のドキュメントの御覧ください、びっくりするくらい色々なフォーマットに対応しています。

参考：https://github.com/mojombo/chronic#examples

# Rails と組み合わせて使うには

[Chronic](https://github.com/mojombo/chronic) はデフォルトだと `ruby` の `Time` クラスを使って時間を生成します。
つまり、Rails の `Time.zone` を利用してくれません。

そんな時でも大丈夫！
[Chronic](https://github.com/mojombo/chronic) は時間を生成する際に利用するクラスを指定できるようになってます。

`initializer` で以下の様なコードを記述しておけば、`Time.zone` 経由で時間を作ってくれるようになります。

```rb:chronic.rb
Chronic.time_class = Time.zone
```

これでシステム時刻のタイムゾーンと Rails のタイムゾーンが合ってない、とかいう場合も安心です。

# まとめ

Ruby や Rails で 24 時超えの時間を扱いたい場合は [Chronic](https://github.com/mojombo/chronic) を利用するととても簡単にパースすることができます。
また、Railsとの組み合わせも容易にできるので、使い勝手もいいですね。

日付周りのパースで困ってる方は、ぜひお試しを。
vertx-gradle-templateとGroovyでHello, world!

Vert.xを利用したプロジェクト管理をgradleでやりたかったので、インストールから `Hello, world!` の表示までまとめ

### vertx-gradle-template のクローン
vertx-gradle-template を GitHub からクローンする。
Gradle Wrapper が付属しているため gradle を別途にインストールする必要はない。

```$ git clone https://github.com/vert-x/vertx-gradle-template.git hello-vertx```

このままだとリモートリポジトリが vertx-gradle-template のままなので変更する必要があるが、ここでは省略する。変更方法は[こちら](http://qiita.com/kon_yu/items/f564d9be5f3717f66f91)を参照。

### Verticle の作成
`hello-vertx/src/main/groovy/com/example/HelloWorldVerticle.groovy` を作成、編集する。

```lang:HelloWorldVerticle.groovy
package com.example

import org.vertx.groovy.platform.Verticle

class HelloWorldVerticle extends Verticle {
  def start() {
    vertx.createHttpServer().requestHandler { request ->
      request.response.putHeader("Content-Type", "text/plain")
      request.response.end("Hello World!")
    }.listen(8080)
  }
}
```

### 起動 verticle の設定
`hello-vertx/src/main/resources/mod.json` を編集する。
**main** に .groovy ファイルを指定することでスクリプトから起動することも可能。
今回はコンパイルした Groovy クラスを指定する。

```lang:mod.json
  // "main":"com.mycompany.myproject.PingVerticle",
  "main": "groovy:com.example.HelloWorldVerticle",
```

### モジュールの作成と起動
モジュールを作成し、起動する。

```
$ gradlew copyMod
$ gradlew runMod
```

ブラウザで `http://localhost:8080/` にアクセスすると `Hello World!` が表示される。
redhat-upgrade-tool - warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 ...

CentOS6.5 to 7.0 へのアップグレード時、
redhat-upgrade-tool 実行にて発生した Warning のメモ。


### redhat-upgrade-tool 実行

```
# redhat-upgrade-tool --network 7.0  --instrepo http://ftp.iij.ad.jp/pub/linux/centos/7/os/x86_64/ --force
```

結果に下記のWarningが出た

```
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
```

### 対処: RPM-GPG-KEY を import

※ urlは環境に合わせること

```
# rpm --import http://ftp.iij.ad.jp/pub/linux/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
```

---

### 結果

再び redhat-upgrade-tool を実行

```
# redhat-upgrade-tool --network 7.0  --instrepo http://ftp.iij.ad.jp/pub/linux/centos/7/os/x86_64/ --force

...

setting up system for upgrade
Finished. Reboot to start upgrade.
```

リブート後、無事成功。

```
# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
```
【Androidアプリ】開発アプリを実機で実行する方法

#開発したアプリを実機で実行してみる
開発したアプリを実機で実行しようとした時に、躓い
た箇所と解決方法を備忘録として記載します。

##アプリを実機で実行するための準備
アプリケーションの実行構成を開き、[ターゲット]タブで、「デバイスを選択するときに常に<br>プロンプトを表示」選択します。
その後、[適用] > [実行]の順でボタンをクリックします。
![TargetSDK_02.jpg](https://qiita-image-store.s3.amazonaws.com/0/49322/eb956c90-5bb7-871c-4603-8424ed438c56.jpeg)

自分はこの設定をを自動選択にしていたため、アプリを実行すると、実機ではなく常に<br>エミュレーターで実行されてしまっていました。

##アプリを実機で実行
上記の設定を行うと、アプリ実行時に、デバイスの選択画面が開くので、実機で<br>実行する場合は、「実行中のAndroidデバイスを選択する」にチェックを入れ、実機を選択し、<br>[OK]をクリックします。
![select_device.jpg](https://qiita-image-store.s3.amazonaws.com/0/49322/3a4355ff-ac6b-87ff-f79d-7cfa4ebc56f4.jpeg)

##実行結果
実機に開発したアプリをインストールでき、実行できました。
![success_02.jpg](https://qiita-image-store.s3.amazonaws.com/0/49322/d2f594c3-e9e2-348d-df27-9f974a0b0bda.jpeg)
Marker radius search

https://www.mapbox.com/mapbox.js/example/v1.0.0/marker-radius-search/
マウスカーソルがまるでスポットライトのように働く。マルチタッチデバイスでは不可能な効果のように思われるが、コードに書かれたロジックが直感的であるのが、leafletの素直なところだと思う。
gulpfileに書かれているタスク一覧を取得する


`gulp`コマンドを実行する際に`--tasks`オプションをつける。

```
$ gulp --tasks
```


```
$ gulp --tasks
[05:48:35] Using gulpfile /path/to/gulpfile.js
[05:48:35] Tasks for /path/to/gulpfile.js
[05:48:35] ├── clean
[05:48:35] ├── hexo-reload
[05:48:35] ├── hexo-server
[05:48:35] ├── hexo-generate
[05:48:35] ├── copy
[05:48:35] ├─┬ serve:dist
[05:48:35] │ ├── clean
[05:48:35] │ └── hexo-generate
[05:48:35] ├── publish
[05:48:35] ├── atom
[05:48:35] └─┬ default
[05:48:35]   ├── hexo-reload
[05:48:35]   └── atom
```

ツリーでタスクの内容が表示される。

## タスク名だけほしい

タスク名だけを取得したい場合には`--tasks-simple`オプションをつける。


```
$ gulp --tasks-simple
```

```
$ gulp --tasks-simple
clean
hexo-reload
hexo-server
hexo-generate
copy
serve:dist
publish
atom
default
```

`--tasks-simple`はgulpと連携するような外部ツールを作るときに役にたちそう。
IE自動操作コード一覧（ExcelVBA / VBScript）

#前提条件
###ExcelVBA
参照設定をする。
 * Microsoft HTML Object Library
 * Microsoft Internet Controls
###VBScript
特になし。

#コード

##IEを開く
InternetExplorerを開く。
###ExcelVBA

```
Dim ie As New InternetExplorer
ie.Visible = True
```

###VBScript

```
Dim ie 
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
```

##IEを閉じる
InternetExplorerを閉じる。
###ExcelVBA / VBScript

```
ie.Quit
Set ie = Nothing
```

##待機する
プログラムを「%0」秒待機する。
###ExcelVBA

```
Dim ymdTo As Date
ymdTo = DateAdd("s", %0, Now)
While Now < ymdTo
   DoEvents
Wend
```

###VBScript

```
WScript.Sleep(%0 * 1000)
```

##IEを最大表示する
InternetExplorerを最大表示にする。
###ExcelVBA / VBScript

```
ie.FullScreen = True
```

##遷移する
URL「%0」のWebページを開く。
###ExcelVBA

```
ie.Navigate %0
Do While ie.Busy = True Or ie.readyState <> 4
    DoEvents
Loop
```

###VBScript

```
ie.Navigate %0
Do While ie.Busy = True Or ie.readyState <> 4
Loop
```

##要素を取得する（ID指定）
指定ID「%0」の要素を取得する。
###ExcelVBA

```
Dim elm as Object
Set elm = ie.document.getElementById( %0 )
```

###VBScript

```
Dim elm
Set elm = ie.document.getElementById( %0 )
```

##要素を取得する（Name指定）
指定Name「%0」の要素群を取得する。
###ExcelVBA

```
Dim elms As Variant
elms = ie.document.getElementsByName( %0 )
```

###VBScript

```
Dim elms
elms = ie.document.getElementsByName( %0 )
```

##要素を取得する（ClassName指定）
指定ClassName「%0」の要素群を取得する。
###ExcelVBA

```
Dim elms As Variant
elms = ie.document.getElementsByClassName( %0 )
```

###VBScript

```
Dim elms
elms = ie.document.getElementsByClassName( %0 )
```

##要素を取得する（TagName指定）
指定TagName「%0」の要素群を取得する。
###ExcelVBA

```
Dim elms As Variant
elms = ie.document.getElementsByTagName( %0 )
```

###VBScript

```
Dim elms
elms = ie.document.getElementsByTagName( %0 )
```

##要素にフォーカスを当てる
取得した要素にフォーカスを当てる。
###ExcelVBA / VBScript

```
elm.Focus

```

##要素に値を入力する
取得した要素に値を入力する。
###ExcelVBA / VBScript

```
elm.Value = "x"

```

##要素の候補を選択する
取得した要素の候補をインデックス「%0」で選択する
###ExcelVBA / VBScript

```
elm.selectedIndex = %0
```

##要素をクリックする
取得した要素をクリックする
###ExcelVBA / VBScript

```
elm.Click
```

#関連記事
##スクリーンショットを取る
###ExcelVBA
[・ExcelVBAでスクリーンショットを取る方法 - Qiita](http://qiita.com/nezuq/items/95cad79d9a9dd920d30e)
###VBScript
[・【WSH】VBScriptでPrintscreen・Alt+Printscreenしてみた - くんすとの備忘録](http://kunst1080.hatenablog.com/entry/2013/03/07/002239)
##キー入力を再現する
###ExcelVBA
[・Office TANAKA - Excel VBAステートメント[SendKeysステートメント]](http://officetanaka.net/excel/vba/statement/SendKeys.htm)
###VBScript
[・IEへのキー入力をVBScriptで再現する。 - Qiita](http://qiita.com/nezuq/items/113d01ba407df5e45cb6)
BitbucketでprivateなMavenリポジトリを作ってGradleから参照する

Bitbucketを使って、無料かつ簡単にprivateなMavenリポジトリが作れます。

http://activeintelligence.org/blog/archive/hosting-maven-repository-for-third-party-jars-on-git-bitbucketgithub/

ここに書いてあったことをそのままやるだけですが、
1. Bitbucketにprivateリポジトリ作成
2. git clone
3. Mavenリポジトリの構造に従って、jarやpomを配置
4. commit, push

BitbucketのREST APIでこのリポジトリにアクセスできます。
```https://api.bitbucket.org/1.0/repositories/[アカウント名]/[リポジトリ名]/raw/master/```
上記URLに載ってるURLは古いので注意です。BitbucketのREST APIはv2.0が最新のようですが、現時点では2.0ではrawに対応していないようです。

これをGradleから参照するには、build.gradleに

```groovy:build.gradle
repositories {
    maven {
        credentials {
            username myMavenRepoUsername
            password myMavenRepoPassword
        }
        url '上記のREST API URL'
    }
}
```

と記述し、$HOME/.gradle/gradle.properties に

```properties:gradle.properties
myMavenRepoUsername=Bitbucketのユーザ名
myMavenRepoPassword=Bitbucketのパスワード
```

とアカウント設定を書けば出来ます。
tmuxのウィンドウ名をsshで繋いでるときは接続先ホストにする

ssh接続しているときはtmuxのウィンドウ名が接続先になっているとわかりやすそうだったので、雑なfunctionを書いた。
以下のfunctionをzshが読める設定ファイルに記載すればOK。僕は`.zshenv`に書いてます。
sshから戻ると、ウィンドウ名はもちろん元に戻ります。

```zsh
function ssh() {
  if [[ -n $(printenv TMUX) ]]
  then
    local window_name=$(tmux display -p '#{window_name}')
    tmux rename-window -- "$@[-1]" # zsh specified
    # tmux rename-window -- "${!#}" # for bash
    command ssh $@
    tmux rename-window $window_name
  else
    command ssh $@
  fi
}
```

`ssh`でコマンドを実行するだけのケースの場合`e.g.) ssh bar@example ls -l`、最後の`-l`をウィンドウ名に設定しちゃうけど、その場合はインタラクティブシェルじゃないからまあよしとする。

### 参考

* http://qiita.com/catatsuy/items/631d1d5d0b357082ba74
* http://qiita.com/yuku_t/items/4ffaa516914e7426419a

### 説明

`ssh_config`に設定を書くのは避けたいなと思いました。以下、その理由。

* `ssh_config`に書く場合は、`Host *`に書けないので記述が重複する
* 2番目のリンクのケースでは`ssh_config`と`zsh`のconfigで設定が分散する

sshの`LocalCommand`なら、`%n`で接続先ホスト名とれるから便利なんだけどね。
Swift - Xcode 6 Beta 6 における変更点

[Xcode6 Beta5]からまだ2週間ですが、[Xcode6 Beta6]が登場しています。この調子で二週間ごとにベータ版出すのかなApple...

[Xcode6 Beta5]: http://qiita.com/dankogai/items/39ba636dae3cfe097fbc
[Xcode6 Beta6]: https://developer.apple.com/swift/resources/

というわけで前回に引き続き、ダウンロード待ちの手慰みに。

* [Xcode 6 beta 6 Release Notes] 

[Xcode 6 beta 6 Release Notes]: http://adcdownload.apple.com//Developer_Tools/xcode_6_beta_6_o48bpy/xcode_6_beta_6_release_notes.pdf

## Optional型に関するさらなる改良

Foundation APIにおけるOptional型の見直しがさらに進んでいます。`T!`の多くが、`nil`を取りうる場合は`T?`、そうでない場合は`T`へと変更されています。間違いを見つけた方は、“#IUO”をSubjectに含めた上でRadarでご報告ください。なお、`T!`のまま据え置かれているものに関しては報告不要です。Appleでも把握しています。

`T?`であるべきところが`T`となっている場合、以下のように明示的にOptional型を指定して代入したのち直ちにアンラップすることで回避できます。

````swift
var fooOpt: NSFoo? = object.reallyMightReturnNil()
if let foo = fooOpt { ... }
````

このバグを見つけたら、忘れずにご報告を。

## `??`の改良

`??`演算子に、以下のオーバーロードが追加されました。

````swift
 public func ?? <T> (optional: T?, defaultValue: @autoclosure () -> T?) -> T? {
     switch optional {
     case .Some(let value):
       return value
     case .None:
       return defaultValue()
     }
}
````

これにより、`x = optional1 ?? optional2 ?? defaultValue`のふるまいが期待どおりのものとなり、以下の事例が修正されます。

````swift
let a: Int? = nil
let b: Int? = 5
a ?? b // was nil; is now .Some(5)
````

## `RawOptionSetType`における`BitwiseOperationsType`の実装

`RawOptionSetType`は`BitwiseOperationsType`として実装されました。これにより`import`された`NS_OPTIONS`でも`|=`、 `&=`および`^=`が利用可能となりました。

## `String`と`Character`の首尾一貫性

`String`と`Character`のふるまいが`Array`と同様になりました。つまり`+`は必ず結合を意味し、要素追加には使えなくなったということです。`String` + `Character`は今後エラーとなります。`Character` + `Character`　や `String` + `String` は引き続き有効です。

## `void*` -> `UnsafePointer<Void>`

Cの`void*`を`import`する際、`()`ではなく`Void`タイプエイリアスが用いられるようになりました。たとえば以前`UnsafeMutablePointer<()>`だったものは`UnsafeMutablePointer<Void>`となります。ただし意味論的には以前と同様です。

## 所感

今回は少なめかな…

Dan.the.Swift.Newbie
パーミッションが777でもファイルが読み込めない時はSELinuxのせいかも！？

#パーミッションが777でもファイルが読み込めない時はSELinuxが怪しい

##Twitter Bootstrapをインストールして早速使うおうと思ったら、CSSファイル等が403でエラー
勿論、権限を変えて試したが、また403、、、、 :sob: 
```ls -l```
でファイルを見たところ、
最後に.を発見。
drwxrwxrwx.
最後の.を調べたところ
.はSELinux有効化で作られたファイル・フォルダであるという事を示していると :sweat: 

試しにSELinuxを無効化したら無事、CSSファイル等が読み込めました。
とりあえずは原因が分かった。

### SELinuxをちゃんと使えるようになりたい！！！
【Node.js】IntelliJでNode.js（Express）アプリの「リモート」デバッグ【IntelliJ】


# 想定環境
* 「リモート」デバッグというところがポイント
* 仮想開発環境（Linux）に、ホストOS上のIntelliJからデバッグできることがゴール
* 実験環境
	* ホストOS　Mac OSX 10.9
	* ゲストOS　CentOS 6.4 (Vagrant VirtualBox)
		* node.js 0.10.29
		* express 4.2.0

# 準備

## IntelliJ プラグインインストール

Node.jsプラグイン入れて下さい（13.1 Ultimateで試しています）

## node-inspector

[コレ](https://github.com/node-inspector/node-inspector)です。

```shell
$ sudo npm install -g node-inspector
```

（sudo でやらないとエラーになったので）

expressアプリを、npm startじゃなく、nodeコマンドで立ち上げる。

```shell
$ node --debug ./bin/www
debugger listening on port 5858
```

listening ~ とか言われればOK。

## sshポートフォワーディング

ホストOSから、ゲストOSのデバッグポートに直接繋げないので（localhostからの接続しか許可されていないっぽい）、
sshポートフォワーディングで外からつなぎます。

[このへん](http://qiita.com/mechamogera/items/b1bb9130273deb9426f5)を参考に、以下のようにホストOSからゲストOSへSSH接続します。

```shell
$ ssh f -N -L 5858:localhost:5858 [ゲストOS]
```

※ホストOSのポート5858番を、ゲストOSのポート5858番へ転送しています。


## IntelliJ デバッグ設定作成

![IntelliJ_IDEA__Cardea__IU-135_1019.jpg](https://qiita-image-store.s3.amazonaws.com/0/34165/9e22018c-e789-a71e-3cff-7a65933c2fc7.jpeg "IntelliJ_IDEA__Cardea__IU-135_1019.jpg")


![Run_Debug_Configurations.jpg](https://qiita-image-store.s3.amazonaws.com/0/34165/cf0eb4ab-8340-cae6-dc63-a82987f91c54.jpeg "Run_Debug_Configurations.jpg")

![Run_Debug_Configurations.jpg](https://qiita-image-store.s3.amazonaws.com/0/34165/b50e7e4a-ba57-8b0b-9642-20e573f4a84e.jpeg "Run_Debug_Configurations.jpg")

あとは適当にブレークポイントを貼っておいて下さい。

# デバッグしてみる

## ゲストOSでアプリ起動

```shell
$ node --debug ./bin/www
debugger listening on port 5858
```

## ホストOSからデバッガ接続

![IntelliJ_IDEA__Cardea__IU-135_1019.jpg](https://qiita-image-store.s3.amazonaws.com/0/34165/7309202c-7a1c-fecc-0e74-efe00930c26f.jpeg "IntelliJ_IDEA__Cardea__IU-135_1019.jpg")

## ブラウザからアクセス

うまくいけば以下のようにちゃんとブレークポイントで止まるはずです。

![IntelliJ_IDEA__Cardea__IU-135_1019.jpg](https://qiita-image-store.s3.amazonaws.com/0/34165/30f98677-d4c7-adea-ffe3-496046e36594.jpeg "IntelliJ_IDEA__Cardea__IU-135_1019.jpg")

# ハマったところ

## ホストOSからゲストOSへデバッガが接続できない。

IntelliJで虫アイコンからリモートデバッグ開始した時に、デバッグコンソールが立ち上がると思うんですが、
そこで「Connected to localhost:5858」って出てないと、接続できてないことになります。
その場合、sshポートフォワーディングなどをもう一度見なおしてみてください。

# 参考

基本的にはIntelliJの[マニュアル](http://www.jetbrains.com/idea/webhelp/running-and-debugging-node-js.html#d394678e410)（英語）にちゃんと書いてあります。
英語が苦手なので飛ばし飛ばし読んでたら、みごとにポートフォワーディングの箇所をすっ飛ばして読んでました。反省。

![Running_and_Debugging_Node_js.jpg](https://qiita-image-store.s3.amazonaws.com/0/34165/71d05961-40d8-2f0e-6e1e-8e3d5b236608.jpeg "Running_and_Debugging_Node_js.jpg")
[Swift]Xcode6.1で確認済み！Hello Worldの次に試したい！超簡単にwebViewを表示してみる

### ！まだSwiftでHello Worldをされていない方は以下の記事を参考に！

[参考サイト](http://qiita.com/g08m11/items/1086995737a446a42411)

## 1・新規ProjectをSingleViewで作成する

ここではwebViewSampleというプロジェクト名で作成しています。

![スクリーンショット 2014-08-19 0.09.13.png](https://qiita-image-store.s3.amazonaws.com/0/15812/e1d847b5-91d9-b109-b9d1-595f86addbdb.png)


![スクリーンショット 2014-08-19 0.09.46.png](https://qiita-image-store.s3.amazonaws.com/0/15812/133215d6-8b8d-9cc3-5f76-654b7df6d0d4.png)


![スクリーンショット 2014-08-19 0.10.16.png](https://qiita-image-store.s3.amazonaws.com/0/15812/d747d6bc-03d0-6d6b-d14c-54b803bf50d8.png)


## ２・Main.storyboardを選択する。そしてユーティリティエリアからwebviewを選び、viewControllerへwebviewを貼付ける。そしてauto layautoを設定する。

![スクリーンショット 2014-08-19 0.11.03.png](https://qiita-image-store.s3.amazonaws.com/0/15812/a6e585a1-2c7e-cc9f-4fe7-fdce62414ada.png)

次に画面表示の最適化を行うためにauto layautoを設定していきます。
画面にぴったり合わせます。
そしてMain.storyboardの右下の「△」を押し、「Add Missing Constraints」を押して、
設定していきます。

![スクリーンショット 2014-10-29 20.53.04.png](https://qiita-image-store.s3.amazonaws.com/0/15812/68735839-f81f-9939-7543-f7d10402be38.png)

![スクリーンショット 2014-10-29 20.53.25.png](https://qiita-image-store.s3.amazonaws.com/0/15812/d32eacb4-f11e-1a29-5941-db4a34c58a34.png)


## ３・貼付けたwebviewをドラッグしてview Controllerにくっつけ、delgateを追加する

![スクリーンショット 2014-08-19 0.11.37.png](https://qiita-image-store.s3.amazonaws.com/0/15812/7e4ea95b-bb50-5f6e-dcc5-94d070d4714a.png)

## ４・webViewからCtrlを押しっぱなしでViewController.swiftにドラッグして、アウトレットを追加する。

![スクリーンショット 2014-08-19 0.12.29.png](https://qiita-image-store.s3.amazonaws.com/0/15812/f5c3cbbc-9258-8192-f351-01eba9ded2fe.png)


## ５・view Controllerを以下のように修正する。

```swift
//
//  ViewController.swift
//  webViewSample
//
//  Created by g08m11 on 2014/08/19.
//  Copyright (c) 2014年 Bloc. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
                            
  @IBOutlet var webView: UIWebView!

  //表示したいURLを設定(初期化)
  var targetURL = "http://rakutenqute.herokuapp.com/"

  
  override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    
    // webviewの表示を行うメソッドを呼び出す
    loadAddressURL()

  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }

  func loadAddressURL(){
    
    // 初期化したURLを読み込む
    let requestURL = NSURL(string: targetURL)
    
    // 読み込んだURLの実行結果を取得する
    let req = NSURLRequest(URL:requestURL!)
    
    // webvieにデータをロードする
    webView.loadRequest(req)
    webView.scalesPageToFit = true
    
  }

}

```

## ６・指定したURLが表示されれば成功

白い画面が数秒表示されますが、慌てずに待ちましょう。


![スクリーンショット 2014-08-29 0.29.06.png](https://qiita-image-store.s3.amazonaws.com/0/15812/ceb92b55-e8a6-8ad7-db87-f9f8cb26cde5.png)


![swift_2.gif](https://qiita-image-store.s3.amazonaws.com/0/15812/a06135aa-1dcb-167e-49ec-d99ed4cffbe5.gif)



<br>
### 備考
表示しているURLは[Rakuten Qute!](http://rakutenqute.me/)というwebアプリです。

[Rakuten Qute!](http://rakutenqute.herokuapp.com/)
<br>
### ご質問
なぜかScales Page To Fitをチェックしてもサイズが調整されません。。。
swiftでwebview内のページを調整する方法をご存知の方おりましたら
コメントのほど、宜しくお願いします :smile: 

### 追記
画像を更新しました！
超やっつけでネットワーク経由でなんかのメッセージを送る


[PHPのこの記事](http://qiita.com/ngyuki/items/9bf1cb6d57022d01d4ac)のパクりです。

ncでリッスンします。

```
nc -lk 9999
```

メッセージを送ります。

```scala
import java.net.{ServerSocket, Socket}
import java.io._

object main {
  def main(args : Array[String]) : Unit = {
    trace("hello")
  }

  def trace(message: String):Unit = {
    scala.util.control.Exception.ignoring(classOf[Throwable]) {
      val connection = new Socket("localhost", 9999)
      val outStream  = connection.getOutputStream
      val out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outStream)))
      val inStream = new InputStreamReader(connection.getInputStream)
      val in = new BufferedReader(inStream)
      out.println(message)
      out.flush()
    }
  }
}
```

おくってみます。

```
scala hello.scala
```

とどきます。

```
nc -lk 9999
hello
```

もしかしたら便利なときがあるかもしれない。