OmniAICreator/Qiita-1.07M huggingface dataset:
dateコマンドをISO8601/RFC2822/RFC3339形式で出力する

# ISO8601
`man date` より抜粋

>-I[TIMESPEC], --iso-8601[=TIMESPEC]
      output  date/time in ISO 8601 format.  TIMESPEC='date' for date only (the default), 'hours', 'minutes', 'seconds', or 'ns' for date and time to
      the indicated precision.


## Sample Script
[Gist](https://gist.github.com/thombashi/8c687deab8e2b3e3e016341df4b08b96)上に同一スクリプト有。

```bash:iso_date.sh
#!/bin/bash


function date_wrapper() {
    command="date --iso-8601=$1"
    echo "$ ${command}"
    echo -e "`${command}`\n"
}


echo -e "date command output with ISO8601 format.\n"

command="date --iso-8601"
echo "$ ${command}"
echo -e "`${command}`\n"


for format in date hours minutes seconds ns
do
    date_wrapper ${format}
done
```

```bash:execution-example
> ./iso_date.sh
date command output with ISO8601 format.

$ date --iso-8601
2017-01-22

$ date --iso-8601=date
2017-01-22

$ date --iso-8601=hours
2017-01-22T14+0900

$ date --iso-8601=minutes
2017-01-22T14:01+0900

$ date --iso-8601=seconds
2017-01-22T14:01:16+0900

$ date --iso-8601=ns
2017-01-22T14:01:16,631109694+0900
```


# RFC2822/RFC3339
`man date` より抜粋

>-R, --rfc-2822
      output date and time in RFC 2822 format.  Example: Mon, 07 Aug 2006 12:34:56 -0600

>--rfc-3339=TIMESPEC
      output date and time in RFC 3339 format.  TIMESPEC='date', 'seconds', or 'ns' for date and time to the indicated precision.  Date and time com-
      ponents are separated by a single space: 2006-08-07 12:34:56-06:00


## Sample Script
[Gist](https://gist.github.com/thombashi/2b8a2c49f8eaf03bb97433cfaa9c5715)上に同一スクリプト有。

```bash:bash.sh
#!/bin/bash


function date_wrapper() {
    command="date --rfc-3339=$1"
    echo "$ ${command}"
    echo -e "`${command}`\n"
}


echo -e "--- date command output with RFC 2822 format ---"
command="date --rfc-2822"
echo "$ ${command}"
echo -e "`${command}`\n"


echo -e "--- date command output with RFC 3399 format ---"
for format in date seconds ns
do
    date_wrapper ${format}
done
```

```bash:execution-example
--- date command output with RFC 2822 format ---
$ date --rfc-2822
Sun, 22 Jan 2017 14:12:25 +0900

--- date command output with RFC 3399 format ---
$ date --rfc-3339=date
2017-01-22

$ date --rfc-3339=seconds
2017-01-22 14:12:25+09:00

$ date --rfc-3339=ns
2017-01-22 14:12:25.698220571+09:00
```
最新Xcode環境(Xcode8)でプラグインを導入する方法

最近Swift3.0の学習を始めた私が、過去Objective-C実装時に利用していたプラグインを利用可能にするまでの備忘録です。
最新のXcode環境下で初めてプラグインを導入したい方または、しばらくXcodeプロジェクトを利用していないユーザーが
実装し易い環境を実現するための助けにでもなればと思い記事を作成しました。

# Xcodeプラグインについて
* Xcode8以前のバージョンでは非公式プラグイン(以下、プラグインに略)を利用していました。
非公式プラグイン用のプラグインマネージャーもあります。 
Xcode8からは`Xcode Source Editor Extension` というSource Editor部分を拡張する機能が追加されました。 
今後はこの機能が非公式プラグインの役割を担っていくと思われます。(現状、非公式プラグインのほうが多機能なものがおおいと個人的に思います)  

* Xcode8の`Xcode Soure Editor Extension`追加に伴い、最新のXcodeではいままで利用できていた非公式プラグインは利用できなくなりましたが、
下記を行うことにより利用することが可能です。

# 最新Xcode(現時点では`Xcode8`)で旧プラグインを利用する

* 下記の手順を実行するまえに、⌘+Rを押しながら電源をオンにしてSIPを無効にしてください。  
SIPを無効にすることで /usr 配下のファイルにアクセスする権限を設定します。

> csrutil status

でSIPの状態を確認を行い、無効にする場合は下記のコマンドを実行後再起動してください。
> csrutil disable

1. Xcode8以降ではプラグインを利用するためには、プラグインごとにUUIDを追加する必要があります。  
UUIDを自動追加を行ってくれるツール[update_xcode_plugins](https://github.com/inket/update_xcode_plugins)を導入します。  
ターミナルを開き  

> $ gem install update_xcode_plugins
$ update_xcode_plugins  

 上記コマンドでupdate_xcode_pluginsのインストールと実行を行います。※Rubyのインストールが必要  
 また、Xcode8.2ではUUIDが追加されても動作しないプラグインが存在します。  
 その場合Xcodeを署名されていない上に変更することで使用可能になる場合もあります。  
 下記のコマンドをを実行してください。  
 > $ update_xcode_plugins --unsign
 
 インストールされているXcodeが表示されるので対象のXcodeをを選択し、`Yes`を選択します。  
`unsign xcodebuild too?:`と聞かれた場合 NOを選択してください。  
 しばらく時間がかかりますが、実行が完了すると` Xcode-unsignes.app`というコピーが作成され、
 ` Xcode-unsignes.app`を利用することでプラグインが動作可能になった、Xcodeを利用することができます。  
 
2. プラグインが動作できる環境が整いましたので、  
プラグインを管理するプラグインマネージャー [Alcatraz](http://alcatraz.io/) をインストールします。  

>対応環境 :
OSX 10.9以降
Xcode 5 ~

 Xcodeは終了した状態で、ターミナルを開き  
> $ curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh

 上記、ワンライナーを一発実行で完了です。
 プラグインインストール完了後、
 Xcodeを起動し、プラグインを読み込むか？質問されるポップアップが表示されるので、`Load BUndle`を選択してプラグインを読み込んでください。
下記の画像の通り`PackageManager`が表示されれば完了です。
![praguin_menu](https://raw.githubusercontent.com/AiRKING-no9/ImageManagement/master/images/installed.png)  

 次回作成記事ではAlcatrazを利用したプラグインのインストールと個人的に利用してるプラグインの紹介記事を作成する予定です。(※公開時期未定)  

## 参考記事
 * [Xcode8で以前のPluginを使う方法](http://qiita.com/ko2ic/items/23b8f5adf90478fc7418)
 * [開発が爆速になるSwift用Xcodeプラグインをまとめてみた](http://qiita.com/tattn/items/238b2b813be16f830bd4)
Angular2のUIライブラリまとめ

2017年1月21日時点で使用可能なAngular2のUIライブラリをまとめました。バージョンや使い心地などは追って更新する予定です。

# Angular-Material2
https://material.angular.io/

# ng2-bootstrap
https://valor-software.com/ng2-bootstrap/#/

# ng-lightning
https://github.com/ng-lightning/ng-lightning

# PrimeNG
http://www.primefaces.org/primeng/

# SemanticUI
https://github.com/vladotesanovic/ngSemantic

# Angular2-polymer
https://vaadin.com/vaadin-documentation-portlet/charts/webcomponents-api/charts-angular2.html
https://github.com/vaadin/angular2-polymer

# OnsenUI
https://ja.onsen.io/v2/docs/guide/angular2/

# Ionic 2
http://ionic.io/2

# Fuel-UI
https://github.com/FuelInteractive/fuel-ui

# Kendo UI for Angular 2
http://www.telerik.com/kendo-angular-ui/
GitHubでsshキーを再登録 Windows7

# 環境
Windows7 64bit

# 現状
Windows7を新たに再インストールしてからGitHubにアクセスしようとするとするけど、GitHubのために色々書いた設定は綺麗サッパリ忘れており、sshキーの公開鍵も秘密鍵も今は無い。

# これからすること。
Githubに公開鍵と秘密鍵を新たに設定し直します。

## 作業開始
私の場合はもう古い公開鍵も秘密鍵も無いのでGithubに登録しておいた公開鍵を消しておきます。

## Github側の作業
GitHubの公開鍵登録場所にアクセス
SSH and GPG keys
https://github.com/settings/keys

公開鍵を削除 「Delete」ボタンを押します。
「I understand, please delete this SSH key」
と出るので押し消しちゃいます。

## Windows側の作業
まずはgitをインストールします。
Git for Windows
https://git-for-windows.github.io/
このサイトからDownloadボタンを押してアプリケーションをダウンロードします。
ダウンロードしたファイルをダブルクリックしてインストールをします。
インストールが完了すると、これでssh-keygenコマンドが使えるようになります。
※ssh-keygenコマンドは公開鍵暗号方式のファイルを作るコマンドです。

## 公開鍵暗号方式の鍵を作る。
Windowsのスタートボタンから「プログラムとファイルの検索」窓を開いて「git」
候補に「Git Bash」が表示されるのでそれを起動します。

（※コマンドプロンプトやPowerShellからではパスが通ってないのでssh-keygenコマンドを受け付けません。）

表示されたWindowに移動して
![MINGW64.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44761/7e2bf398-4efd-3739-18a5-5357b7da14b6.png)

鍵を生成する場所に移動します。
`cd ~/.ssh/`

何かファイルがあったらどこか別の場所に移動します。
私は最初からやり直しなので全部消しました。
（別の場所に移すかなどしてバックアップをとっておくと良いかも）

## キー生成
ssh-keygen -t rsa -C "自分のメール"
例：
``ssh-keygen -t rsa -C "masakinihirota@gmail.com"``
リターンキー3回押します。

すると
id_rsa.pub	#公開鍵
id_rsa		#秘密鍵
の2ファイルが生成されます。

![MINGW64作成後.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44761/569d94bc-11e4-7954-a9ea-b1ea7fc9b945.png)

![公開鍵.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44761/18e83cdb-99d1-81ef-0689-7bf252bf7f16.png)

ファイル名「id_rsa.pub」（ファイルの拡張子「.pub」）が公開鍵です。
誰かに見せても渡しても問題ありません。
ファイル「id_rsa」が秘密鍵です。
誰にも渡してはいけません、見せてもいけません。ネット上で公開してもいけません。
詳しくは「公開鍵暗号」でググってください。

# Githubへ公開鍵を登録
次にこの公開鍵を登録します
SSH and GPG keys
https://github.com/settings/keys
この場所で公開鍵を登録します。

## 登録方法
SSH keysの 「New SSH Key」ボタンを押します。

Titleを付けます。
「公開鍵登録」
とでも適当につけます。

![公開鍵登録.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44761/72264965-6464-2d23-cd52-dd9a1bc3cbde.png)

Keyの場所には、
id_rsa.pubファイルをVSCode等のエディタで開きます。
（中身は単なるテキストファイルです。）
中身をコピー・アンド・ペーストします。

となりますので、確認できたら。
「Add SSH key」を押します。

※ここでGithubのパスワードを要求されます。

アクセス確認
``ssh -T git@github.com``

The authenticity of host 'github.com (***.***.***.***)' can't be established.
RSA key fingerprint is SHA256:nThXXXXXXXXXXXXXXXXXXXXXXXXSY8.
Are you sure you want to continue connecting (yes/no)?

知らない接続先だけどつなげちゃって大丈夫？と聞いてきます。
「yes」
と入力します。

**※ここで「yes」と入力しないと新しい接続先として認められずアクセスが弾かれてしまいます。**
（リターンキーを押しスキップさせてしまい アレ 接続できないぞとハマっちゃいました。）

Are you sure you want to continue connecting (yes/no)? yes
（続き）
Warning: Permanently added 'github.com,***.***.***.***' (RSA) to the list of known hosts.
Hi masakinihirota! You've successfully authenticated, but GitHub does not provide shell access.
と返信が来ます。
「接続に成功したよ、だけどシェルでのアクセスサービスは提供してないよ。」

## 確認作業
成功したかどうか見るため適当なリポジトリをGithubからクローンしてみます。

適当な場所にディレクトリを作る
今回はディスクCに「2020」というディレクトリを作っておく。

cd （リポジトリをダウンロードする場所）
例：
``cd c:2020``

![2020.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44761/d6052eac-f156-ad1a-a4cb-a4aeaa0614b9.png)


クローンコマンド
git clone git@github.com:（GitHubユーザー名）/（リポジトリ名）.git
例：
``git clone git@github.com:masakinihirota/masakinihirota.git``

ローカル側（Windows7側）にリポジトリがダウンロードできたのを確認できたら終了です。
Faradayの使い方

FaradayというHTTPクライアントライブラリがとても良い
後で見返すためにメモ

##Faradayの使い方
Gemfileはこんな感じ

```ruby:Gemfile
  # httpリクエスト
  gem 'faraday'
  # リダイレクトを追う
  gem 'faraday_middleware'
  # クッキーを扱う
  gem 'faraday-cookie_jar'
```

ファイルのアップロードとかする時はmultipartを指定するのかな？
間違ってたらごめんなさい

```ruby:hoge.rb
    conn = Faraday.new(:url => 'https://www.hoge.com/') do |faraday|
      faraday.request :multipart
      faraday.request  :url_encoded
      faraday.adapter :net_http
    end
```

簡単にgetリクエストが出来る

```ruby:hoge.rb
    conn.get do |req|
      req.url '/foge'
    end
```

postしたい場合はPOSTを指定すれば簡単に出来る
下記はcookieを指定して、画像をアップロードする例

```ruby:hoge.rb
    conn.post do |req|
      req.url '/foge'
      req.headers['Cookie'] = cookie
      req.headers['Content-Type'] = 'image'
      req.body = {
        name: "hoge",
        image: Faraday::UploadIO.new('hoge.jpg', 'image/jpeg')
      }
    end
```

キーを付けないでPOST出来ました
下記はaudioを送信する例

```ruby:hoge.rb
    conn.post do |req|
      req.url '/foge'
      req.headers['Cookie'] = cookie
      req.headers['Content-Type'] = 'audio/l16; rate=16000;'
      req.body = File.binread("hoge.wav")
    end
```
qiitapでインクルードするファイルの開始位置と終了位置を指定する

<!---


--->

[qiitap](https://pypi.python.org/pypi/qiitap)にはMarkdown内で他のファイルをインクルードする機能があります。それらの挙動を確認します。

# ファイル全体

記法: `${qiitap.qinclude('./fish.md')}`

出力結果:

```text:ファイル全体
AAAAAAAAAAAAAA
AAAAAAAAAAAAAA
AAAAAAAAAAAAAA
    [START]
    BBBBBBBBBBBBB
    BBBBBBBBBBBBB
       BBBBBBBBBBBBB
       BBBBBBBBBBBBB
    BBBBBBBBBBBBB
    BBBBBBBBBBBBB
    [END]
AAAAAAAAAAAAAA
AAAAAAAAAAAAAA

```

# 開始位置と終了位置を指定

記法: `${qiitap.qinclude('./fish.md', start_at='START', end_at='END')}`

出力結果:

```text:開始位置と終了位置を指定
BBBBBBBBBBBBB
BBBBBBBBBBBBB
   BBBBBBBBBBBBB
   BBBBBBBBBBBBB
BBBBBBBBBBBBB
BBBBBBBBBBBBB

```

# 開始位置のみ指定

記法: `${qiitap.qinclude('./fish.md', start_at='START')}`

出力結果:

```text:開始位置のみ指定
    BBBBBBBBBBBBB
    BBBBBBBBBBBBB
       BBBBBBBBBBBBB
       BBBBBBBBBBBBB
    BBBBBBBBBBBBB
    BBBBBBBBBBBBB
    [END]
AAAAAAAAAAAAAA
AAAAAAAAAAAAAA

```


# 終了位置のみ指定

記法: `${qiitap.qinclude('./fish.md', end_at='END')}`

出力結果:

```text:終了位置のみ指定
AAAAAAAAAAAAAA
AAAAAAAAAAAAAA
AAAAAAAAAAAAAA
    [START]
    BBBBBBBBBBBBB
    BBBBBBBBBBBBB
       BBBBBBBBBBBBB
       BBBBBBBBBBBBB
    BBBBBBBBBBBBB
    BBBBBBBBBBBBB

```

# できる限り左寄せしようとする。

インデントをtruncateできる場合はしようとします。truncateされるのは半角空白とタブのどちらかです。ただしできない場合はそのまま出力されます。
casperjsでの開発をやりやすくするちょっとしたtips

スクレイピングで利用するcasperjs。
Webページからデータ取得する際に役立つライブラリで、自動化に重宝します。
開発の中で使えそうなちょっとしたtipsをまとめておきます。
基本的なことだとは思いますが、これから始める方の助けになればと。

# 動作環境

```
$ casperjs --version
1.1.3
```

環境構築はこちらを参考にさせていただきました。
http://blue1st-tech.hateblo.jp/entry/2016/04/08/005601

# 動作を確認する

何の開発をやるのでも必須なので、まずはここから。

公式のQuickStartだとファイル先頭に下記のように書いてcasperインスタンスを生成しますが、
このままだとログ出力は特にされず、自分で```this.echo('ボタン押す')``` とか書いてログを出したりします。

```js
var casper = require('casper').create();
```

これを

```js
var casper = require('casper').create({
  verbose:true,
  logLevel:"debug"
});
```

このように変えます。
これで動作(遷移URL, 実行されたイベント, ステップ状況)がログ出力されるようになります。
詳しくは http://docs.casperjs.org/en/latest/debugging.html

また、操作時の画面の表示を確認したい場合はcapture機能が役に立ちます。

```js
this.capture('when_ok_button_clicked.png')
```

確認したい処理の後ろで上記を実行すると、画面キャプチャがカレントディレクトリに出力されます。

# ログインする

レポート取得の自動化などを行うときにログイン処理を扱うケースが多いと思います。
ログイン処理を行う際は多くの場合でcookieのonを要求されるので、有効化する必要があります。

```bash
$ casperjs sample.js --cookies-file=cookies.txt
```

実行オプションをつけることでcookie情報を指定ファイルに書き込むことができます。
これでcookieを求められるページでも処理が続行可能になります。

# リクエスト内容を見る

ページ中で送られているリクエストの詳しい状況を知りたい場合。
下記のような形で実現できます。

```js
casper.on('page.resource.requested', function(requestData, request) {
    require('utils').dump(requestData);
  });
```

```casper.on('page.resoure.requested', callback)``` は何かしらのリソースがリクエストされた際にリクエスト内容を引数としてcallbackを実行します。
objectが返って来るので```utils.dump()```を実行することで中身を出力したり、
その情報を使って処理を行ったりすることができます。

# まとめ

ログの出力を詳細にしたり、リクエスト状況を把握できたりすると、開発のスピードが速くなります。
何かの役に立てば幸いです。
Raspberry Piにリモートデスクトップ接続

# <i class="fa fa-television" style="font-size:1em;"></i> はじめに

Windowsのリモートデスクトップを使用し、Raspberry Piのデスクトップ環境にログインする手順について説明します。

# <i class="fa fa-television" style="font-size:1em;"></i> 環境

<i class="fa fa-caret-right" style="font-size:1em;"></i> Hardware : Raspberry Pi 3 Model B
<i class="fa fa-caret-right" style="font-size:1em;"></i> Server OS : RASPBIAN JESSIE WITH PIXEL January 2017 (Kernel version 4.4)
<i class="fa fa-caret-right" style="font-size:1em;"></i> Client OS : Windows 10 Pro

# <i class="fa fa-television" style="font-size:1em;"></i> 前提

<i class="fa fa-caret-right" style="font-size:1em;"></i> 基本的なLinuxコマンドの知識
<i class="fa fa-caret-right" style="font-size:1em;"></i> Raspberry Piがインターネットに接続出来ること

# <i class="fa fa-television" style="font-size:1em;"></i> 参考

<i class="fa fa-caret-right" style="font-size:1em;"></i> [Raspberry Pi 公式サイト](https://www.raspberrypi.org/) <i class="fa fa-external-link" style="font-size:1em;"></i>
<i class="fa fa-caret-right" style="font-size:1em;"></i> [Raspberry Pi に RDP で接続できないときの対処](http://qiita.com/hiroyuki_jp/items/a4b17fa451adfe66d6a9) <i class="fa fa-external-link" style="font-size:1em;"></i>

# <i class="fa fa-television" style="font-size:1em;"></i> 解説

## TightVNCサーバのインストール

* インストール済みの場合は、下記のような表示となります。

```text:Linux
$ sudo apt list tightvncserver
一覧表示... 完了
tightvncserver/stable,now 1.3.9-6.5 armhf [インストール済み]
$
```

* インストールされていない場合は、下記のような表示となります。

```text:Linux
$ sudo apt list tightvncserver
一覧表示... 完了
tightvncserver/stable 1.3.9-6.5 armhf
$
```

* TightVNCサーバがインストールされていない場合、下記コマンドでインストールします。

```text:Linux
$ sudo apt -y install tightvncserver
```

## xrpdのインストール

* インストール済みの場合は、下記のような表示となります。

```text:Linux
$ sudo apt list xrpd
一覧表示... 完了
xrdp/stable,now 0.6.1-2+rpi1 armhf [インストール済み]
N: 追加バージョンが 1 件あります。表示するには '-a' スイッチを付けてください。
$
```

* インストールされていない場合は、下記のような表示となります。

```text:Linux
$ sudo apt list xrpd
一覧表示... 完了
xrpd/stable 1.3.9-6.5 armhf
$
```

* xrpdがインストールされていない場合は、下記コマンドでインストールします。

```text:Linux
$ sudo apt -y install xrpd
```

## リモートデスクトップ接続

* 接続元のWindowsから、リモートデスクトップを起動します。
* 【コンピューター】に接続先 (Raspberry Pi) のIPアドレスを入力し【接続】ボタンをクリックします。

<img src="https://qiita-image-store.s3.amazonaws.com/0/136118/c0c5d668-10a0-73d9-ebd9-3fb26e25b475.png">

* 警告のメッセージが表示されますが、無視して【はい】ボタンをクリックします。

<img src="https://qiita-image-store.s3.amazonaws.com/0/136118/41e56712-4e42-3e75-347f-c90489e99baf.png">

* 【userame】と【password】に、Raspberry Piにログインする際のアカウント情報を入力し【OK】ボタンをクリックします。
 
<img src="https://qiita-image-store.s3.amazonaws.com/0/136118/85855c4b-e728-671d-bc3c-023b3a3f10fc.png">

* ログインできると下記のようなRaspberry Piのデスクトップ画面が表示されます。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/2793fa7a-1ea3-fd41-cd11-b110a7366510.png">

:warning: Raspberry PiにTightVNCサーバがインストールされてなかったら、ログイン時、下記画面が表示されるのでTightVNCサーバをインストールしてください。

<img src="https://qiita-image-store.s3.amazonaws.com/0/136118/cc3dc1e4-2bcb-aa59-eba7-2138875d2766.png">
Dartでも愛が生まれた

## 元ねた
[愛が生まれた - Qiita](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0 "愛が生まれた - Qiita")

## 実装
```dart
main() => print(new String.fromCharCode("生".codeUnitAt(0) & "死".codeUnitAt(0)));
```

## DartPad
[DartPad で実行](https://dartpad.dartlang.org/4152e5032b827f0b43590834a1452a11 "DartPad")

# 感想
流れに完全に乗り遅れているけど、Dartが無いので、[ついカッとなってやった、反省していない](http://dic.nicovideo.jp/a/%E3%81%A4%E3%81%84%E3%82%AB%E3%83%83%E3%81%A8%E3%81%AA%E3%81%A3%E3%81%A6%E3%82%84%E3%81%A3%E3%81%9F "ついカッとなってやったとは (ツイカットナッテヤッタとは) [単語記事] - ニコニコ大百科")。
char型と暗黙型変換がないとこんなもんですね。
何をやっているかを意識して書かないと動かないのはむしろ良いこと。


******
Dart 2.0で若干短くなった。

```dart
main() => print(String.fromCharCode("生".codeUnitAt(0) & "死".codeUnitAt(0)));
```

## DartPad
[DartPad で実行](https://dartpad.dartlang.org/667ddaff5a048cf72e5f15f459925e86 "DartPad")

******
'生'も'死'も'愛'もサロゲートペアで無いのでコードポイント(rune)操作で良いはず。

```dart
main() => print(String.fromCharCode('生'.runes.first & '死'.runes.first));
```
拡張子を判断して画像ダウンロード


昔々書いていたブログにはエクスポート機能がありませんでした。
画像のURL一覧はcurlやgrepで作ったんですがURLが/Img?hogehogeみたいな形式なのでwget -i で保存してもImg0.1とかImg0.2とかになっちゃいました。

よくよく探せばcurlやらwgetでうまいことやるオプションがあるのかもしれませんが探すのも面倒なのでスクリプトを書いてみました。

ファイル名はLast-Modifiedから更新年月日、context-typeから拡張子を取っています。
同じ更新年月日のファイルがあったので通し番号もつけてます。

## 使い方
```
cat url_list.txt | python get-contents.py
```

## スクリプト

```python:get-contents.py
# -*- coding: utf-8 -*-

import sys
import requests
import datetime
import struct

cnt = 0
for line in sys.stdin.readlines():
    r = requests.get(line.strip())
    # print(r.headers)
    ext = (r.headers['Content-Type'].split('/'))[1]
    lm = datetime.datetime.strptime(
        r.headers['Last-Modified'], '%a, %d %b %Y %H:%M:%S GMT')
    fname = lm.strftime('%Y%m%d-%H%M%S') + ('-%03d.' % cnt) + ext
    print(fname)
    with open(fname, "wb") as fout:
        for x in r.content:
            fout.write(struct.pack("B", x))
    cnt = cnt + 1

```
Cloud9にgem popplerをインストールする

Cloud9でgem popplerを使う場合、単に`gem install poppler`をしただけでは下記エラーが出ます。

```
ERROR:  Error installing poppler:
        ERROR: Failed to build gem native extension.
```

gemの前にlinuxでパッケージインストールが必要なので、下記コマンドでインストールします。

```
$ sudo apt-get update
$ sudo apt-get install poppler-utils
```

これで、改めて

```
$ gem install poppler
（中略）
Successfully installed poppler-3.1.0
4 gems installed
```

インストール成功！

ですが、このままだとrequireしただけで怒られます。

```app.rb
require 'poppler'
```

```
$ ruby app.rb
/usr/local/rvm/gems/ruby-2.3.0/gems/gobject-introspection-3.1.0/lib/gobject-introspection/loader.rb:37:in `require': Typelib file for namespace 'GdkPixbuf' (any version) not found (GLib::Error)
（中略）
from app.rb:1:in `<main>'
```

'GdkPixbuf'というのが必要っぽい。
画像処理ライブラリだそうで、これもgemだけでは最初のpopplerと同様のエラーがでるので、先にパッケージをインストールします。
調べるとlibgtk-3-devというパッケージに含まれてるらしいので、

```
$ sudo apt-get install libgtk-3-dev
```

で、gem install。

```
$ gem install gdkpixbuf
```

これで、cloud9の環境でpopplerが使えるようになりました。


##まとめ

Clou9でgem popplerを使うには、下記5行のコマンドを実行すればよいです。

```
$ sudo apt-get update
$ sudo apt-get install poppler-utils
$ gem install poppler
$ sudo apt-get install libgtk-3-dev
$ gem install gdkpixbuf
```
LogstashでIoTHubへoutputするプラグインを作った

無かったので作ってみました．

[tac0x2a/logstash-output-iothub](https://github.com/tac0x2a/logstash-output-iothub)

今のところMQTTだけサポートしてるので，設定には接続文字列指定するだけ．

```ruby:config.conf
output {
  iothub {
    connection_string => "<接続文字列>"
  }
}
```
Redmine ヘルプ日本語化プラグインインストール方法メモ

Redmine ヘルプ日本語化プラグインインストールプラグインのインストール方法に迷ったのでメモ


# 動作環境
redmine 3.2.5

# インストールプラグイン
https://github.com/suer/redmine_japanese_help

# 方法
1. redmineインストールディレクトリへ移動
> cd /var/lib/redmine

2. git のコードをクローン
> git clone git://github.com/suer/redmine_japanese_help.git ./plugins/redmine_japanese_help

3. apache再起動
> systemctl restart httpd
Windows での Docker に関するコマンド

Docker に関するコマンドを記載します。

# 環境
Windows 10 64bit Pro
Docker for Windows

# 実行中のコンテナを調べる
下記コマンドで実行中のコンテナを調べます。

```bat
> docker ps
```

```bat
CONTAINER ID        IMAGE               COMMAND                  CREATED                  STATUS              PORTS                  NAMES
2caa6fac4b61        ubuntu              "bash"                   Less than a second ago   Up 2 hours                                 nervous_brown
beb0dee84683        wordpress:latest    "docker-entrypoint..."   Less than a second ago   Up 4 hours          0.0.0.0:8000->80/tcp   mywordpress_wordpress_1
326633e3e057        mysql:5.7           "docker-entrypoint..."   Less than a second ago   Up 4 hours          3306/tcp               mywordpress_db_1
```

# 実行中のコンテナに入る
コンテナIDを指定してコンテナ内に入ります。

```bat
> docker exec -it beb0dee84683 bash
```

```bash
root@beb0dee84683:/var/www/html#
```

コンテナ名を指定しても入ることができます。

```bat
> docker exec -it mywordpress_wordpress_1 bash
```

```bash
root@beb0dee84683:/var/www/html#
```

# コンテナを起動する

コンテナIDかコンテナ名を指定してコンテナを起動します。

```bat
> docker start mywordpress_wordpress_1
```

# コンテナを停止する

コンテナIDかコンテナ名を指定してコンテナを停止します。

```bat
> docker stop mywordpress_wordpress_1
```

# コンテナを削除する

コンテナIDを指定してコンテナを削除します。
実行中のコンテナは削除できません。

```bat
> docker rm e966d9f4ff0e
```

# Docker イメージを削除する

下記コマンドでイメージIDを調べます。

```bat
> docker images
```

イメージIDを指定して Docker イメージを削除します。

```bat
> docker rmi -f e966d9f4ff0e
```
vim標準機能の折りたたみを駆使して、.vimrcを整理しよう

# はじめに
初めまして。vimを使うようになってまだ2年ほどの若輩者です。
プログラムとかはすべてvimかvimキーバインドプラグインをいれたIDEで書いたり、自分用にvimrcを書いたりする程度にはvimが好きです。

プラグインも必要最低限のものだけ追加するようにしているのですが、色々機能を追加してvimrcが現在250行程度です。
世界のvim愛好家の方には遠く及ばない量ですが、それでもやや量が増えてきてしまい、一度整理する必要があると感じていました。

そこで、vimrcがゴチャゴチャしてしまうのを回避するための設定とかvimのコマンドについてここにメモ書き程度に残しておこうと思います。
使用している機能はvim標準の機能のみのはずなので、プラグインを追加で入れる必要はないはずです。

あと既出の記事でしたらすいません。

# 環境
Windows7
Vim7.4

# 1. 不要な設定を削除する
Webで見つけてとりあえず入れたりした設定で使ってないものは削除します。
プラグインも使ってない気がするものは、バッサリ削除します。
NeoBundleプラグインを入れているなら管理が楽になるのでオススメです。

# 2. 各種設定はグループでまとめる
本題です。似たような設定はグループで固めていきます。
「あの設定どこに書いたっけ？」といった混乱を回避するためです。
検索ジャンプしようにもコマンド名や設定名を忘れてしまったときのためでもあります。

このとき、Vim標準の設定とプラグインによる設定を明確に分離するようにします。
こうしておくと、プラグインをあとから抜いた時に、設定の消し忘れが発生しにくくなります。
私の場合でしたら次のように分離しています。

```vim:.vimrc
" プラグイン設定
" + Plugin1 - プラグインの説明
set hoge

" + Plugin2 - プラグインの説明
set foobar


" デフォルト機能設定
" + UI
colorscheme hoge

" + 保存
set hoge

" + 編集
set hoge
```

# 3. vimrc内でのマーカー折りたたみを有効にする
vimは標準で折りたたみ機能をサポートしています。
下記の設定をvimrc内に追加します。

    au FileType vim setlocal foldmethod=marker

これでvim関連のファイルにのみにマーカーをセットして折りたたむことが可能になります。
マーカーは{{{で始まり、}}}で終わります。これは入れ子構造になっていても機能します。
折りたたみに関連したコマンドで主要なものは次のとおりです。

    zi : 折りたたみの有効無効の切り替え
    zf : 折りたたみの作成(範囲選択の開始行と終了行の末尾にマーカーを追加する)
    za : 折りたたみの開閉
    zA : 折りたたみの再帰的開閉
    zd : 折りたたみの削除
    zR : バッファ内の全ての折りたたみを開く
    zM : バッファ内の全ての折りたたみを閉じる

ただし、これを利用するとテキストファイル内にマーカーテキストが追加されてしまいます。
コメント文として追加されるため、エラーが発生することはありませんが、
気になる方は気になると思います。

またインデントによって自動で折りたたみを生成してくれるオプションもあります。

    foldmethod=indent

これを利用するとメモ書などでのインデント整形で自動で折りたたみを生成してくれて、
なおかつ、テキスト内にマーカーなどが残らないので非常に綺麗です。
テキストファイルにのみ適用する場合は次の設定をvimrcに追加します。

    au FileType text setlocal foldmethod=indent

# 4. マーカーを追加する
自分のvimrcにマーカーを追加していきます。
折りたたみたい範囲をヴィジュアルモードで選択し、zfでマーカーを追加します。
きちんと折りたためるかどうかはzaをタイプして確認します。

マーカーをつけたvimrcは次のようになります。
マーカーの終わりの++という記号は私が階層を把握しやすいようにつけたもので、
自動で追加されるものではありません。

```vim:.vimrc
" プラグイン設定"{{{
" + Plugin1 - プラグインの説明"{{{
set hoge
" + }}}
" + Plugin2 - プラグインの説明"{{{
set foobar
" + }}}
" }}}
" デフォルト機能設定"{{{
" + UI"{{{
colorscheme hoge
" + }}}
" + 保存"{{{
set hoge
" + }}}
" + 編集"{{{
set hoge
" + }}}
" }}}
```

# 5. vimrcを確認する
vimを起動しなおしてvimrcを確認します。
開いたときにきちんと折り畳みが生成されていれば成功です。
私の場合は次のようになるようにvimrcを記述しています。

![image](https://qiita-image-store.s3.amazonaws.com/0/69665/57e4256e-c3b0-557a-787d-352ef4f004f5.png)

とても見やすくなってますね。

プラグイン設定、デフォルト設定まで折りたたむとvimrcを開きなおすたびに
折りたたみを開く必要があるので、この辺は自分の好みに合わせて整理するといいと思います。

# 6. まとめ
vimの標準機能にはテキスト整形やいろんな見やすくする機能がいっぱいあります。
たとえばright, left, centerといったテキストの揃え位置を変更するコマンドや
今回紹介した折りたたみコマンドに、矩形選択などとても便利な機能があります。

こういった機能を知ってからvimのREADME.txtを見てみると
中央揃えや右揃えのテキストはvimの標準機能で書いてたのかな？
とか
シンプルにインデントのみでREADMEを書いているのはもしかしたらインデントで折りたたみを使うためなのかな？
とか
いろいろと新しい発見ができて楽しいものがあります。

まぁそんな感じで、つたない説明でしたが、vimユーザの誰かのお役に立てれば幸いです。

# 参考文献
[Vimテクニックバイブル](https://www.amazon.co.jp/Vimテクニックバイブル-～作業効率をカイゼンする150の技-Vimサポーターズ/dp/4774147958) - プラグイン紹介が大半を占めていますが、標準機能で自分の知らなかった機能や使い方も載っていて参考になります。
iOSでQRコードの作成と検出を簡単にする

# はじめに
iOSでQRコードの作成や検出を行うコードを書く場合、`CoreImage`を使用することが多いと思います。
標準ライブラリで提供されているのは素晴らしいことですが、
以下のような課題が存在します。

- **巨大なライブラリの一部分であるため、パラメータの設定や取得が辞書形式でキーを覚える必要がある。**
- **作成時にレンダリングの設定や画像サイズも考慮しようとした場合、コード量が多くなってしまう。**

そこで、QRコードの作成と検出を簡単に書くことのできるライブラリを作成しました。
GitHubで公開してます。

https://github.com/natpenguin/QRKit

# 使い方
とてもシンプルです。

### QRコードの作成
- QRコードにしたい文字列(abcdefghijklmnopqrstuvwxyz)
- 訂正レベル(H)
- 画像サイズ（縦:150, 横:150）
- レンダリング（CPU）

```
let string = "abcdefghijklmnopqrstuvwxyz"
let image = string.qrcreator?.correction(.h).size(CGSize(width: 150, height: 150)).renderer(.software).image
```

### QRコードに含まれる文字列の検出
- QRコードが含まれている画像
- 認識精度（High）

```
let image: UIImage = // Image containing QR code
let strings = image.qrdetector?.accurary(.high).strings
```

# おまけ
他にもいくつか書いてみました。

### UIImageViewに画像を設定する(画像作成処理をバックグラウンドで実行します)
- `QRCreator`インスタンス
- 任意の`UIImageView`インスタンス

```
let creator: QRCreator
let imageView: UIImageView
imageView.load(of: creator) { (result) in }
```

# おわりに
作成・検出ともにシンプルに書けるのようになったのではないかと思います。
ご指南、ご指摘などございましたら、お気軽にコメントしてください。
プルリクエストも大歓迎です。
VagrantとDockerとCentOS6.5で少しハマったのでメモ

#Post http:///var/run/docker.sock/v1.19/containers/create: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?

CentOS6.5にDocker入れて作業しようとしたら、タイトルのエラーでDockerが動きませんでした。少しググれば解決すると思われますが、一応メモ。

参考までにVagrantにCentOSにDockerをインストールするまでのコマンドも書いておきます。

    $ sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
    $ sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    $ sudo yum -y install docker-io

こんな手順でDockerをインストール完了します。次にsudoしなくてもdockerコマンドを利用できるようにしておきます。このコマンドのあとログインし直します。

    $ sudo groupadd docker
    $ sudo usermod -g docker vagrant

これで準備完了なのですが、

    $ sudo service docker start
    $ sudo chkconfig docker on

としても

    $ sudo service docker status

を確認すると

    docker dead but pid file exists

となってしまっていました。CentOS7ではないからアプリケーションの起動コマンドは`sudo service`で問題はなく、ググっていくつか試していると

    $ sudo yum update device-mapper

のコマンドで解消しました。CentOS7だとこんな問題に遭遇しないのですかね...。
BootstrapのCheckbox/Radioを無効にする方法

Bootstrapでは、ボタンライクなCheckboxとRadioボタンが提供されています。

![image](https://qiita-image-store.s3.amazonaws.com/0/115996/3bb44862-171b-a50b-55ce-9159b24db7e5.png)

これらのボタンの動作を無効にするためには、`disabled`属性をつけるだけでは無効になりません。
そのやり方について書いていきます。

Bootstrapのバージョンは現時点での最新であるv3.3.7です。
一応α版の4.0.0でも試しましたが同じ問題が発生してました。
今後のバージョンアップ(4の正式版とか)で対応してくれないかなあ。

## disabledを付けてみる
とりあえず`input`タグに`disalbed`をつけてみます。


```html
<div class="btn-group" data-toggle="buttons">
    <label class="btn btn-primary active">
        <input type="checkbox" autocomplete="off" checked disabled> Checkbox 1 (pre-checked)
    </label>
    <label class="btn btn-primary">
        <input type="checkbox" autocomplete="off" disabled> Checkbox 2
    </label>
    <label class="btn btn-primary">
        <input type="checkbox" autocomplete="off" disabled> Checkbox 3
    </label>
</div>

<div class="btn-group" data-toggle="buttons">
    <label class="btn btn-primary active">
        <input type="radio" name="options" id="option1" autocomplete="off" checked  disabled> Radio 1 (preselected)
    </label>
    <label class="btn btn-primary">
        <input type="radio" name="options" id="option2" autocomplete="off"  disabled> Radio 2
    </label>
    <label class="btn btn-primary">
        <input type="radio" name="options" id="option3" autocomplete="off" disabled> Radio 3
    </label>
</div>
```

しかし、これで試してみても各ボタンの状態は切り替わります。
開発者ツールで見てみると、`active`属性の切り替えが通常通り動作していることもわかります。
`label`タグに`disabled`クラスを付けると表示だけは無効化された感じになりますが、クリックすると状態が切り替わります。

![image](https://qiita-image-store.s3.amazonaws.com/0/115996/d12a7ee4-bda0-1fef-3c1e-f6805b065a0b.png)

## 無効化する方法
これはBootstrapのほうに`disabled`属性によって切り替えを停止する処理がないためです。
そこで、無効化するためにはクリックイベントを取得し、Bootstrapのほうにイベントが伝播しないように処理を停止してやればよいです。

```js
<script>
	$('.btn-group').on("click", ".disabled", function(event) {
	    return false;
	});
</script>
```

`btn-group`クラスの子要素で`disabled`が付いている要素にクリックイベントを設定します。
そのイベントの中で`return false;`を実行することでそれ以降のイベントの伝播を停止することができます。

これによって、`label`タグのクラスに`disabled`をつけることで表示に合わせて切り替えイベントを停止することができます。

```html
<div class="btn-group" data-toggle="buttons">
    <label class="btn btn-primary disabled active">
        <input type="checkbox" autocomplete="off" checked> Checkbox 1 (pre-checked)
    </label>
    <label class="btn btn-primary disabled">
        <input type="checkbox" autocomplete="off"> Checkbox 2
    </label>
    <label class="btn btn-primary disabled">
        <input type="checkbox" autocomplete="off"> Checkbox 3
    </label>
</div>

<div class="btn-group" data-toggle="buttons">
    <label class="btn btn-primary disabled active">
        <input type="radio" name="options" id="option1" autocomplete="off" checked  disabled> Radio 1 (preselected)
    </label>
    <label class="btn btn-primary disabled">
        <input type="radio" name="options" id="option2" autocomplete="off"  disabled> Radio 2
    </label>
    <label class="btn btn-primary disabled">
        <input type="radio" name="options" id="option3" autocomplete="off" disabled> Radio 3
    </label>
</div>
```

イベント停止に関しては`label`タグではなく、`input`タグにつけても停止しますが表示と合わせたかったのでlabelタグのほうでつけるのがいいかと思います。
生産性を上げる。プログラマによる個人的健康管理術。> 机配置編

参考 http://qiita.com/YumaInaura/items/ffab0ec0b9ef81c9811c

```txt:環境
SketchUp Make v17.1.173
MacOS X El Capitan
```

コーディングの生産性および、その他、勉強の効率を上げるため、環境の再構築を去年の年末から進めている。

現在の検討事項は以下。

- キーボードの配置を机手前から奥に移動する
   - 肩こりの解消を目指す
   - http://sakkora.net/tokuchuupcdesk.html
- ディスプレイの位置を奥に配置
   - 目の疲れを減らすつもり
- 追加ディスプレイを配置可能にする
   - 作業環境の向上

机を奥に配置する例として以下がある。
https://www.flickr.com/photos/didak/477074765/in/photostream/

しかしながら、奥に配置したディスプレイは高い位置にあるため、ドライアイを誘発しそう。

考えた結果、奥の机は「高さを下げる」ということにした。
参考 http://www.eizo.co.jp/eizolibrary/other/itmedia08/#point2

SketchUpで作ってみた。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/13882f09-915a-57fc-4da1-020965508b14.png)

茶色の机は8年もので、愛着があるため、それを使いながら環境を構築する。

机の高さをどれくらいにするかは要検討。　
実際にディスプレイを置いて、高さを変更しながら試行錯誤したいが、実物(奥の机)がないと難しい。
せいぜい、SketchUpでモックを作って、視野を確認するくらいだろうか。

実物のモックアップを作って試験できる人たちがうらやましい。
机のレンタル(3000円程度)で試し置きができればいいのに。

しかしながら、SUICAの13.5度の傾きを決める場合も、モックアップを作ったところで、その性能評価に多大な苦労をされているようだということを思い出した。

> http://lleedd.com/blog/2010/11/25/suica_2/
> 実験は田町の臨時改札口で行うことになりました。二日間の実験でしたが、準備には２ヶ月以上を費やしました。実験なんだから、うまくいかなければやり直せば良いと思うかもしれませんが、実際には、ある程度以上の規模の実験はコストも手間もかかるので、ワンチャンスになることも少なくありません。そう思って、周到に準備することは重要です。
...
> 実験のデータや設計条件から私が決めたアンテナ面の傾斜は13.5度でした。現在、全国に広がりつつあるICカード改札機は、ほとんどがこの角度。

### 余談

疲れた時のリクライニング用(20年使用する)に、清水の舞台から飛びおりるつもりでSIMMONS AVENSIS(27万円！）を買おうとしたら、サイズの検討段階で階段を通らないことが判明した。清水の舞台に立ってなかった。

プロファイリングは大事。

クレーンで釣り上げるにしても、部屋にマッチしなかった場合どうしよう問題が発生する。

50種類くらい見て、ピンときたのがAVENSISだったのだが。。。

### レンタルサービス

以下を見つけた。
http://event21.co.jp/dis_281.htm

高さは65cmにできる。奥行きが58.5cmである。
1週間で3,672円。　試してみようか。。。

### 低い位置のディスプレイ

ディスプレイを高くすると、ドライアイに。
ディスプレイを低くすると、ストレートネックに。

良い高さを探すことになる。

http://www.fujitsu.com/jp/about/businesspolicy/tech/design/ud/vdt/index-page3.html

高さ調整を考えた場合、モニターアームを検討することになるかもしれない。机によっては、周囲に細い(20cmくらいの)フレームがあることで、モニターアームが取り付けできない場合がある (使用中の机がそう)。

## 机購入後
(追記 2017/02/05)

色々検討した結果、以下の机を購入した。

デスク市場 > パソコンデスク(横幅120cm×奥行45cm・スリムタイプ・ホワイト)【大物商品】
http://desk-ichiba.com/products/detail.php?product_id=389&cat=238

決め手は以下。

- 奥行きが長すぎない (追加購入のため)
- モニタアームを付けることができる (フレームの構造上可能)
- 耐荷重30kg
   - (27インチモニタ10kg, アーム5gk程度) x 2

到着後、設置して以下のようになった。

![DSC_0255.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/e3dd4085-f1c7-5d26-dc01-bb68064cf699.jpeg)

とりあえずモニターアームは未購入で27インチモニタを設置。
追加モニタは23インチがあるが、使用はまだ。使用する場合は、モニタアームが必要になる。
モニタとMacBook Air‎が奥に行った分、手前の机の作業スペースが生まれた。

横からの写真。

奥の机の方が若干低い。
モニタの高さを変更できるので、最適な高さを探す。

![DSC_0256.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/5d958376-8148-e515-2d97-1ef8719c0c81.jpeg)

左側にはGeForce GTX 1070搭載のPCが鎮座していて、モニタはそのPCとMacBook Air‎で切替して使う。
VBScript/JScriptを共通部品化する(スクリプトコンポーネント)

# 概要
- [スクリプトコンポーネント][スクリプトコンポーネント - MSDN]は、スクリプト言語で COM コンポーネントを作成できるテクノロジー
- COMのややこしいところをスクリプトコンポーネントランタイム (Scrobj.dll)がやってくれる

- [右クリックでレジストリに登録できる](https://msdn.microsoft.com/ja-jp/library/cc392087.aspx)
- レジストリに登録しなくても「GetObject("Script:" & wscのファイルパス) 」で利用可能(こちらのほうがいい？)

# 動機
VBScriptのクラスとスクリプト言語で COM コンポーネントを作成できるテクノロジー（スクリプトコンポーネント）が使えそうだったを見つけたので使ってみた

- [Windows Script Componentの使用 - Sakura Editor Macro]
- [スクリプトコンポーネント - FSWikiLite]
- [スクリプトコンポーネント - MSDN]

# 例
今回は紹介まで

# 参考
## スクリプトコンポーネント関連
https://msdn.microsoft.com/ja-jp/library/cc392542.aspx
http://windowsitpro.com/scripting/wsh-part-1-file-types

- [スクリプトコンポーネント - MSDN]
- [Windows Script Componentの使用 - Sakura Editor Macro]
- [スクリプトコンポーネント - FSWikiLite]
- [CABファイルの中身を直接取り出すスクリプトコンポーネント - Windows Script Programming]
http://openmya.hacker.jp/hasegawa/public/20070609/admintech.html
66/85 コンポーネント化

https://msdn.microsoft.com/ja-jp/library/ms974602.aspx

[Windows Script Componentsとは何か- Windows Script Host Laboratory]:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/techinfo.htm#Windows%20Scripting%20Component%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B?

[PCオタク虎の巻 VBSとJavaScriptを連携させる]:http://pccribnotes.blog.shinobi.jp/vbs/vbs%E3%81%A8javascript%E3%82%92%E9%80%A3%E6%90%BA%E3%81%95%E3%81%9B%E3%82%8B

http://pccribnotes.blog.shinobi.jp/vbs/wsc%E3%82%92%E7%B7%A8%E9%9B%86%E3%81%99%E3%82%8B#ps_text
[JScriptAndVBScript.WSC - Vector]:http://www.vector.co.jp/soft/win95/prog/se405269.html

## クラス関連

- [Class ステートメント - MSDN]
- [VBSのクラスオブジェクト - FSWikiLite]

[CABファイルの中身を直接取り出すスクリプトコンポーネント - Windows Script Programming]:http://scripting.cocolog-nifty.com/blog/2006/09/cab_d894.html

[WSCでの記述方法 - Script Paradigm ]:http://seoi.net/wsh/base_wsc.shtml
[スクリプトコンポーネント - MSDN]:https://msdn.microsoft.com/ja-jp/library/cc392140.aspx
[COMのややこしいところをスクリプト コンポーネント ランタイム (Scrobj.dll)がやってくれる]:https://msdn.microsoft.com/ja-jp/library/cc392058.aspx
http://www.atmarkit.co.jp/fwin2k/win2ktips/475scriptlet/scriptlet.html
[Windows Script Componentの使用 - Sakura Editor Macro]:http://sakura.qp.land.to/SakuraMacro/usage/wsc.html
[Windows スクリプト ファイル (.wsf) を使用する - MSDN]:https://msdn.microsoft.com/ja-jp/library/cc392507.aspx

[スクリプトコンポーネント - FSWikiLite]:http://tuka.s12.xrea.com/index.xcg?p=%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8

[Class ステートメント - MSDN]:https://msdn.microsoft.com/ja-jp/library/cc392441.aspx

[VBSのクラスオブジェクト - FSWikiLite]:http://tuka.s12.xrea.com/index.xcg?p=VBS%A4%CE%A5%AF%A5%E9%A5%B9%A5%AA%A5%D6%A5%B8%A5%A7%A5%AF%A5%C8
Emacs で TAB 文字を可視化すると表示がずれる場合がある

# 現象
EmacsWikiでも言及されている現象です。Emacs で TAB 文字を可視化すると表示がずれる場合があります。
https://www.emacswiki.org/emacs/WhiteSpace#toc9


<img width="146" alt="スクリーンショット 2017-01-22 8.49.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/160444/604a1ac1-fef3-1c0c-b893-226543e446f9.png">



上図の 4行目。
4 TABの場合だとちょうど4文字目がTAB文字になると、4文字分余計に右にずれて表示されてしまいます。

# 確認環境

* macOS Sierra 10.12.2
* Emacs 25.1

# 対処

ちゃんとした解決策は見つけることができませんでした。

苦肉の策ですが、私はtab-markを使わず、TAB文字に下線を引いて可視化するようにしました。

```init.el
;; タブの色
(set-face-foreground 'whitespace-tab "DarkRed")
(set-face-underline  'whitespace-tab t)
(set-face-background 'whitespace-tab nil)
```
<img width="92" alt="スクリーンショット 2017-01-22 9.00.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/160444/0040e7f1-7f8c-a6fd-a26e-84776bbf39a1.png">


TABとスペースが混ざったソースコードをコミットしたくないのでTABは可視化したいですが、インデントがずれるのも見辛くて嫌だったので。

もっと良い解決策あれば教えてください。
Raspberry Piを無線LAN接続

# <i class="fa fa-television" style="font-size:1em;"></i> はじめに

Raspberry Piを無線LANに接続する手順について説明します。

# <i class="fa fa-television" style="font-size:1em;"></i> 環境

<i class="fa fa-caret-right" style="font-size:1em;"></i> Hardware : Raspberry Pi 3 Model B
<i class="fa fa-caret-right" style="font-size:1em;"></i> OS : RASPBIAN JESSIE WITH PIXEL January 2017 (Kernel version 4.4)

# <i class="fa fa-television" style="font-size:1em;"></i> 前提

<i class="fa fa-caret-right" style="font-size:1em;"></i> 基本的なLinuxコマンドの知識

# <i class="fa fa-television" style="font-size:1em;"></i> 参考

<i class="fa fa-caret-right" style="font-size:1em;"></i> [Raspberry Pi 公式サイト](https://www.raspberrypi.org/) <i class="fa fa-external-link" style="font-size:1em;"></i>

# <i class="fa fa-television" style="font-size:1em;"></i> 解説

## インターフェースの確認

* 下記コマンドを実行し、wlan0というインタフェースが表示されていれば、無線LANは認識されていることになります。

```text:Linux
$ sudo ifconfig
```

## 無線LANの設定

* 下記コマンドを実行し、SSID と パスフレーズを登録します。<br>
<font color="red">※SSIDとPASSPHRASEには、実際の値を入力してください。</font>

```text:Linux
$ sudo sh -c 'wpa_passphrase SSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf'
```

* 下記コマンドを入力すると、上記で設定したファイルの内容を参照できます。

```text:Linux
$ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf
country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="XXXXXXXXXX"
        #psk="XXXXXXXXXX"
        psk=XXXXXXXXXX.......10d6e7a9be6ff44801fca6f47cee71d0927971a
}
$
```

* 下記コマンドを入力しOSを再起動します。<br>
  OSの再起動が終了すると自動的に登録した無線LANに接続されます。

```text:Linux
$ sudo shutdown -r now
```
技術英語 > The % character [has multiple uses] in Python. / useとusage

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 644 / 12833)

> The % character **<font color=red>has multiple uses</font>** in Python.

https://www.merriam-webster.com/dictionary/use
> 2. a (1) :  habitual or customary usage (2) :  an individual habit or group custom

などの例が上記リンクにある。

<hr>
useとusageの違い

https://oshiete.goo.ne.jp/qa/4560065.html

8年前に質問した時から成長してない。。。
面白い記憶方法を見つけねば。
key must be 32 bytes

rails 5.0.0.1を使ってアプリ作って、localhostにアクセスしたらなんかいきなりエラーが出た

ArgumentError in WelcomeController#index
key must be 32 bytes

```
Extracted source (around line #72):
70 cipher = new_cipher
71 cipher.encrypt
72 cipher.key = @secret
73
74 # Rely on OpenSSL for the initialization vector
75 iv = cipher.random_iv
```

原因はここに書いてあった

[New app: "key must be 32 bits". #25185](https://github.com/rails/rails/issues/25185)
どうやらRailsのバージョンが悪いらしい

そんなわけでGemfileに記載しているRailsのバージョンを5.0.0.1→5.0.1に変更してbundle update

すると無事にindex.htmlが表示されました

# 追記

Railsのバージョンが5.0.1でも同じ現象が起こる方は、Rubyのversionを2.3.1にさげるとうまく行く場合があるとのこと
複数人で GitHub を使うときの設定とか(Unity)

# これは何
GGJに初参加しまして,複数人で開発を初めてやったのですが
GitHubでプロジェクトを共有するのにちょっとハマったのでメモ。
使用したのはUnityです。

# GitHub側の設定
repository にコラボレーターを追加してあげる必要がある。
settings からコラボレーターを追加する。
ユーザー名やメールアドレスで検索可能。
まずこの時点で結構ハマってました。どうやっても複数人で見られなくて（恥）

# Unity 側の設定
[ここ](http://qiita.com/hkomo746/items/a6dfa76442a474dfdf3a)を参考にさせていただきました。
メタファイルが見えなくて数十分ハマってました（恥）

# 後は、アレコレする
GitHub Desktop なりで管理。

# 終わりに
初めてGitHub というか Git を使う人がいたこともあり,ハマりポイントが（個人的には）多かったです。
ちなみにこの記事はGGJ精華町会場からお送りしております。
首が痛い。
rails generate controllerできない

# rails generate controllerしようとしたら、何故かできなかった

## ひとまず、コンソールエラー

```
rails generate controller hoges
/Users/hogehoge/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thread_safe-0.3.5/lib/thread_safe/cache.rb:155: warning: constant ::Fixnum is deprecated
/Users/hogehoge/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thread_safe-0.3.5/lib/thread_safe/cache.rb:155: warning: constant ::Fixnum is deprecated
/Users/hogehoge/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-4.2.5/lib/active_support/core_ext/numeric/conversions.rb:121: warning: constant ::Fixnum is deprecated

/Users/hogehoge/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-4.2.5/lib/active_support/core_ext/numeric/conversions.rb:121: warning: constant ::Bignum is deprecated
````

## 結論
railsとrubyのバージョンが不一致？？

## 以下、やったこと

### そもそもログにもWarningしか出てないじゃん...
こまった...
ちな、このwarningは
[サンプルコードでわかる！Ruby 2.4の新機能と変更点](http://qiita.com/jnchito/items/9f9d45581816f121af07#fixnum%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A8bignum%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%8Cinteger%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%95%E3%82%8C%E3%81%9F)で詳細？を確認しました。

そこで、conrollerができなくなるまでにやったことを振り返る

- Gemfileの更新 →よく使ってきたgemを追加しただけなので多分違う
- Editorの設定の変更 → 論外
- rubyのバージョンアップ →　これかな？？

### railsのバージョンを上げてみる
#### Rails 4.2　→　Rails 5.0.0.1に上げてみた

```
gem install rails -v '5.0.0.1' --no-rdoc --no-ri
Successfully installed rails-5.0.0.1
1 gem installed
KTakataMacBookAir:workspace project$ rails -v
Rails 5.0.0.1
```

#### Gemfileの更新

```` ruby:Gemfile
gem 'rails', '5.0.0.1' # 元は4.2.5
```

`bundle update`する

#### 再度、rails g contorllerの実行

```
KTakataMacBookAir:workspace project$ rails generate controller hoges
/Users/hogehoge/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.0.1/lib/active_support/xml_mini.rb:51: warning: constant ::Fixnum is deprecated
/Users/hogehoge/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.0.1/lib/active_support/xml_mini.rb:52: warning: constant ::Bignum is deprecated
/Users/hogehoge/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.0.1/lib/active_support/core_ext/numeric/conversions.rb:138: warning: constant ::Fixnum is deprecated
Expected string default value for '--jbuilder'; got true (boolean)
Expected string default value for '--helper'; got true (boolean)
Expected string default value for '--assets'; got true (boolean)
      create  app/controllers/skills_controller.rb
      invoke  erb
      create    app/views/skills
      invoke  rspec
      create    spec/controllers/skills_controller_spec.rb
      invoke  helper
      create    app/helpers/skills_helper.rb
      invoke    rspec
      create      spec/helpers/skills_helper_spec.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/skills.coffee
      invoke    scss
      create      app/assets/stylesheets/skills.scss
```

おお、出来た
windows10でpipが使えるようになるまで(python3.6)

#windows10でpython3.6をインストールしました。
下記にある状況と同じ状況で困った人がいたら見てください。
参考にしたページを一番下に貼っておきます。
過程に興味ない人は「結局」「追記」を読んでください。

ちなみに centos なら
`$ sudo yum -y install python-pip`
##状況
python3.6をインストールした。( [公式ダウンロードページ](https://www.python.org/downloads/) )

+ numpy を使いたい
+ numpy を入れようとして `$ pip install numpy` を実行 -> エラー
+ `easy install`, `pip` は最初に入れるべきらしい
+ `easy install`, `pip` を入れるために `$ ez_setup.py` を実行 -> エラー
+ `SyntaxError: invalid syntax` ってなんやねん ←イマココ

##では最初から
python を使ってみようと思って python を `https://www.python.org/downloads/` からダウンロードしてインストールしました。
この時点で python に対する知識は欠片もなかったので一番新しそうな3.6を入れたんですね。
その後 `pip` が何なのか調べつつ、色んなサイトを見たところ `easy_install` と `pip` っていうのがどうも最初に入れた方がいいらしい。そして `$ ez_setup.py` を実行するだけで `easy_install` が入れれるらしい。早速実行。と、

```shell-session:コマンドプロンプト
$ python ez_setup.py
File "ez_setup.py", line 1
   \<DOCTYPE html>
     ^
SyntaxError: invalid syntax
```

？？
調べてみると`SyntaxError: invalid syntax`ってのは構文が違うよって意味らしい。
自分で書いたものじゃないしみんな使ってるものだし間違ってるわけないじゃん！！！
結局わからんかった(調べてない)んですが、きっと3.6だと間違いなんですね（笑）

で、次に調べたのが「pip windows10」。
「`$ ez_setup.py`の前にpathを通しておきましょう」だって。
なるほど、わからん。環境変数でpathを追加？すればいいそうです。
[環境変数Pathの設定](http://www.pythonweb.jp/install/setup/index1.html )
この人は

```
C:\pg\Python35\
```

ってしてますけどここは人によって違います。
python がどこにあるかわからないときは `path.py` っていうファイルを新しく作って実行するとわかります。( `$ where python` でわかるよってコメントくれたので皆さんこっち使いましょう。)

```py:path.py
import datetime
print(datetime.__file__)
```
```shell-session:コマンドプロンプト
$ where python
C:\Users\***\AppData\Local\Programs\Python\Python37-32\python.exe
```
##結局
python3.6 をインストールした時点で `easy_install` も `pip` も入ってる(3.4かららしい)。
しかし python への path が通っていない。
ので、pathを通せばいい。

```
\Python\Python36-32
\Python\Python36-32\Scripts
```

を環境変数の Path に追加すれば `pip` が使えるようになる。

###コメント
古い情報に踊らされないように気を付けてください。(この記事もすぐ古くなる)
こんな初歩的なこと書いて怒られたりしないだろうか。
もっと読みやすく記事をかける人間になりたいね

###追記
・この記事を読んでくれた方が「インスト時にチェックボックスあるよ」ってコメントくれてるので自分でパス追加するのわからない人は一回消してインストからやり直したらいいと思います。
その際はインスト後に再起動しないといくら console で `pip -V` とか叩いてもなんも反応してくれないので気を付けてください(笑)
・別端末で python3.7 をインストールしたところ、直後に入っていた pip の version が 10.0.1 だったのですが、そのまま使用したところ `python -m pip install --upgrade pip` しろと警告出たのでしたら 18.0 にアップデートされました。最初から最新入れてくれよ...(2018/07/24)

###参考にしたページ
[pythonダウンロード](http://pineplanter.moo.jp/non-it-salaryman/2016/04/09/windows10-path/)
[Life With Python](http://www.lifewithpython.com/2012/11/Python-package-setuptools-pip.html)
[pipとは](http://www.task-notes.com/entry/20150810/1439175600)
[pythonパッケージ管理技術まとめ](http://www.yunabe.jp/docs/python_package_management.html)
[windowsでeasy_installとpip](https://mimumimu.net/blog/2014/05/09/windows-%E3%81%A7-easy_install-%E3%81%A8-pip/)
[環境変数Pathの設定](http://www.pythonweb.jp/install/setup/index1.html )
JXAでメニューバーアプリ

ウェブビューを仕込んだメニューバーアプリのサンプルです。

```js:YouTubeApp
ObjC.import('Cocoa')
ObjC.import('WebKit')

var webViewRect = $.NSMakeRect(0, 0, 1024, 560)
var webViewConf = $.WKWebViewConfiguration.alloc.init
webViewConf.preferences.plugInsEnabled = true
var webView = $.WKWebView.alloc.initWithFrameConfiguration(webViewRect, webViewConf)

var url = $.NSURL.URLWithString('http://www.youtube.com/')
var req = $.NSURLRequest.requestWithURL(url)
webView.loadRequest(req)

var webViewItem = $.NSMenuItem.alloc.init
webViewItem.view = webView

var reloadItem = $.NSMenuItem.alloc.init
reloadItem.title = 'Reload'

var quitItem = $.NSMenuItem.alloc.init
quitItem.title = 'Quit'

var statusMenu = $.NSMenu.alloc.init
statusMenu.addItem(webViewItem)
statusMenu.addItem($.NSMenuItem.separatorItem)
statusMenu.addItem(reloadItem)
statusMenu.addItem($.NSMenuItem.separatorItem)
statusMenu.addItem(quitItem)

ObjC.registerSubclass({
	name: 'ActivateStatusItemAction',
	methods: {
		'popUpMenu:': {
			types: ['void', ['id']],
			implementation: function(sender) {
				if ($.NSApplication.sharedApplication.active) {
					statusItem.highlightMode = true
					statusItem.popUpStatusItemMenu(statusMenu)
					statusItem.highlightMode = false
				} else {
					$.NSApplication.sharedApplication.activateIgnoringOtherApps(true)
				}
			}
		},
		'becomeActive:': {
			types: ['void', ['id']],
			implementation: function(sender) {
				statusItem.button.performClick(this)
			}
		},
	}
})

var statusAction = $.ActivateStatusItemAction.alloc.init
var statusItem = $.NSStatusBar.systemStatusBar.statusItemWithLength($.NSVariableStatusItemLength)
statusItem.title = '📺'
statusItem.target = statusAction
statusItem.action = 'popUpMenu:'
statusItem.highlightMode = false

$.NSNotificationCenter.defaultCenter.addObserverSelectorNameObject(statusAction, 'becomeActive:', $.NSApplicationDidBecomeActiveNotification, $.NSApp)

ObjC.registerSubclass({
	name: 'Action',
	methods: {
		'reload:': {
			types: ['void', ['id']],
			implementation: function(sender) {
				webView.reloadFromOrigin
			}
		},
		'quit:': {
			types: ['void', ['id']],
			implementation: function(sender) {
				$.NSNotificationCenter.defaultCenter.removeObserver(statusAction)
				$.NSApp.terminate($())
			}
		},
	}
})

var action = $.Action.alloc.init

reloadItem.target = action
reloadItem.action = 'reload:'

quitItem.target = action
quitItem.action = 'quit:'
```

ポイントはオブザーバーを使ってクリックのタイミングでアプリを最前面に持ってくるところ。そうしないとウェブビューはキーボード入力を受け付けないので。
Wndows Server 2012 R2評価版インストール

# <i class="fa fa-television" style="font-size:1em;"></i> はじめに

Wndows Server 2012 R2（評価版）をインストールする手順について説明します。

# <i class="fa fa-television" style="font-size:1em;"></i> 環境

<i class="fa fa-caret-right" style="font-size:1em;"></i> OS : Windows 10 Pro
<i class="fa fa-caret-right" style="font-size:1em;"></i> 仮想環境 : Hyper-V マネージャー 10.0.14393.0

# <i class="fa fa-television" style="font-size:1em;"></i> 前提
なし

# <i class="fa fa-television" style="font-size:1em;"></i> 参考

<i class="fa fa-caret-right" style="font-size:1em;"></i> [Windows Server 2012 R2 評価版ソフトウェア](https://www.microsoft.com/ja-jp/evalcenter/evaluate-windows-server-2012-r2) <i class="fa fa-external-link" style="font-size:1em;"></i>

# <i class="fa fa-television" style="font-size:1em;"></i> 解説

* Hyper-Vで仮想マシンを作成後、OSのisoイメージファイルから起動します。その後、下記画面が表示されるので、【次へ】ボタンをクリックします。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/9d88e5be-4721-44d6-438a-6b52270083c9.png">

* 【今すぐインストール】ボタンをクリックします。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/5cf351ef-9841-d567-148c-283c20235291.png">

* 【Windows Server 2012 R2 Standard 評価版 (GUI使用サーバ)】を選択し【次へ】ボタンをクリックします。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/2dddac6a-a2c8-b6a2-4ec4-a84c744ce389.png">

* 【同意します】をチェック後、【次へ】ボタンをクリックします。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/db593525-819e-80ae-687a-28938997c9c8.png">

* 【カスタム：Windows のみをインストールする (詳細設定)】をクリックします。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/ea129e5a-84cb-008d-d547-5f64ad6939a8.png">

* インストールするドライブを選択し【次へ】ボタンをクリックします。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/22abba8b-14d4-6358-8eba-49a03ebc52ab.png">

* Windows Server 2012 R2のインストールが開始されます。仮想環境スペックにより待ち時間が変わりますが、インストールが完了するまで待ちます。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/24c9a7e7-ea7a-cc9c-35fc-24b372de2a13.png">

* インストールが完了すると再起動を促す画面が表示されるので、10秒間待つか【今すぐ再起動】ボタンをクリックします。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/7ac47916-a996-dc37-c105-0f70ff2ac345.png">

* マシンが再起動され下記画面が表示されます。その後、再度マシンが再起動されます。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/7ee498fe-12a6-f078-6078-29546d7afde9.png">

* マシン再起動後、下記画面が表示されるので、Administoratorアカウントのパスワードを入力後、【完了】ボタンをクリックします。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/ac8ade5d-732f-20ec-5fbd-3b9c613fcdb0.png">

* Hyper-Vマネージャーのメニューから、【操作】-【Ctrl+Alt+Del】 をクリックします。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/30ea4412-af5c-0da3-114d-4a5606277ee4.png">

* 下記画面が表示されるので、Administratorアカウントのパスワードを入力し【Enter】キーを押下すると Windows Server 2012 R2にログインします。

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/136118/29bed28d-e231-4db3-d2b1-c2810f67add6.png">