OmniAICreator/Qiita-1.07M huggingface dataset:
独自ドメイン取得後ロリポップをメールサーバーだけに使いたい

# 独自ドメイン取得後ロリポップをメールサーバーだけに使いたい

+ すごい単純ですが、自分用のメモとして書いときます

## 経緯
+ 独自ドメインを取得後、メールサーバーを運用したい
+ ドメインはお名前.comとかその辺のサービス
+ お名前.comとかでドメインを購入すると無料でDNSが付いてくるのでその無料DNSを使いたい
+ 自宅のYahooのルーターはop25b制限だったので、なおさら
+ なぜかロリポップには、書いてくれてない(ネームサーバーウチのつかえ！しか書いてない)

## ZONE設定

|ホスト名|タイプ|データー|
|:--|:--|:--|
||MX|10 mx01.lolipop.jp.|
|ooo.com.|MX|10 mx01.lolipop.jp.|

## 最後に
+ DNSの仕組みが分かっていれば全然問題ないのだが少しハマってしまった。もっと勉強せねば。
stringに数字を追加する(C++)

##sstreamをincludeしてostringstreamを使うのがはやい。
大切なのは、この3行。

```cpp
	ostringstream ss;
	ss << a;
	str = str + ss.str();
```

aがint型、strがstring型。つまり、strに数値aを文字列として追加してる。

以下、str(t)とa(5)を足しているコード。

```cpp
#include <string>
#include <sstream>
#include <iostream>
using namespace std;

int main()
{
	string str;
	str.push_back('t');
	int a = 5;
	ostringstream ss;
	ss << a;
	str = str + ss.str();
	std::cout << str << std::endl;
}

```
t5が結果としてでてくる。
React + OnsenUI for Reactの基本コンポーネント③ (Row・Col編)

# 概要

* [前回](http://qiita.com/gcfuji/items/d8a0b1a787b70c02da2f)に引き続き、OnsenUI for Reactの基本コンポーネントについて解説していきます。

* \<Page>内で利用できる\<Row>コンポーネントと\<Col>コンポーネントについて解説します。

* \<Row>と\<Col>は**Grid**というコンポーネント群にまとめられています。

# Component

## Row Component

各ページの「行」を表現するコンポーネントです。
BootstrapやMaterialize.cssなどを利用した事がある人なら馴染みのあるコンポーネントだと思います。
使い方は非常に簡単で、\<Row>を記述し、その子要素が１行になります。
大抵の場合、\<Row>と\<Col>はセットで利用します。

### Props

|Props|Description|
|-----|-----------|
|verticalAlign|行の垂直状態を指定する。(bottom, top, center)|


## Col Component

次はColコンポーネントです。

このコンポーネントは、\<Row>コンポーネントの子要素として利用し、\<Row>の列の状態を表現します。
Bootstrapなどでは、classとして、[col-sm-3]とか[col-md-4]とか指定しますが、OnsenUIではColの分だけいい感じにRowの列を分割してくれます。
Rowを指定して分割したい場合は、width Propsでwidthを指定する事も可能です。

### Props

|Props|Description|
|-----|-----------|
|verticalAlign|列の垂直状態を指定する。(bottom, top, center)|
|width|列の幅をしていします。(50%や50などで表現)|

# 終わり

Gridシステムを利用した各種CSSフレームワークを利用した事がある方なら簡単に使えると思います。
中身まで見ると、Gridはflexを利用して行や列を表現していました。

自分でアプリを作る時には、必須なコンポーネントだと思うので、どんどん使いましょう。

続きは次回。


# リンク

* [【本家】Onsen UI for React](https://onsen.io/v2/docs/guide/react/index.html)
* [【本家】Row](https://onsen.io/v2/docs/react/Row.html)
* [【本家】Col](https://onsen.io/v2/docs/react/Col.html)
osxでpo4aをインストールする手順(texinfoを翻訳したい場合)

po4aインストール手順のメモです。

# gettextとtexinfoを入れる
brew install texinfo
brew link --force texinfo
brew install gettext
brew link --force gettext

# perlとcpanmを入れる
brew install perl
brew install cpanm

# po4aのソースを展開してインストールする
wget https://alioth.debian.org/frs/download.php/file/4176/po4a-0.48.tar.gz
tar zxvf po4a-0.48.tar.gz
cd po4a-0.48
cpanm Module::Build 
perl Build.PL
./Build installdeps
./Build 
./Build install                                                                                                                                                                                
brew link --force perl
paiza　恋するハッカソン　カチューシャ取得のために初心者が気合で書いたコード ruby

とりあえず力で押し切った感のあるコードです
汚くて申し訳ないです

```ruby:カチューシャ.rb
n , p = gets.split.map(&:to_i)
m , q = gets.split.map(&:to_i)
# nはファンの人数
# pは色紙一枚の費用
# mペン一本でかけるサインの枚数
# qはペン一本の費用
paper = p * n# 色紙代　=　一枚分の費用　*　ファンの人数
vet = n / m
#vetは特に変数が思いつかなかったので
num = n % m
  if num == 0
    pen = q * vet
  else
    vet = vet + 1
    pen = q * vet
  end

puts paper + pen
【Myナレッジ】自作OSウイルス？？考慮不足によるOSファイルの誤削除


昨日職場のPCで発生した予期せぬアクシデントについてメモ...
## 環境
OS　　　　　：Windows7 32bit
メーカー　　：Fujitsu
リカバリ領域：有

## アクシデント内容
**考慮不足によるOSファイルの誤削除が発生**

## あらすじ
現場で、本番機のログをローカル端末に落として集計、調査をする機会がある。
本番ログの為、ローカル端末ではあまり保持しておきたくないし、削除漏れで漏洩ってことがないように
端末起動時に本番機のログ削除バッチを仕掛けている。

▼下記がそのバッチの内容

```bat:init.cmd
@echo off
echo ##############################
echo #    本番機ログ削除処理
echo ##############################

rem 本番機ログ設置ディレクトリに移動
cd C:\work\本番機ログ設置場所

rem 本番機ログをすべて削除
rmdir /S /Q .


rem こんな感じに書いてましたと。＊＊

```
上記バッチをWindowsのStartupに設置して毎日起動時に動かしてログ削除を実行してました。
特段問題なく動作して、本番機のログはこのディレクトリに設置するようにしていたので、
端末に放置されることもなく運用出来てました。

## ある日
端末のフォルダ整理をしようと思い、「本番機ログ設置ディレクトリ」を移動することにしました。
▼移動先ディレクトリ
C:\050_集計\本番機ログ設置ディレクトリ

さてさて移動も終わって特に何も考えることなく翌日を迎えました。。。



## 翌日
昨日、ディレクトリを移動したことも忘れて、いつもの様に端末を立ち上げて
仕事を始めようと思った時です。。
黒い窓から、どんぶらこ、どんぶらことエラーメッセージが流れてキました。

何事かと、思いつつ、削除バッチが動いているんだなと思っていたが
画面を見ているとなんだか様子がおかしい。。

```黒い画面.内容
******.dllは削除出来ませんでした。
******.dllは削除出来ませんでした。
******.dllは削除出来ませんでした。
******.dllは削除出来ませんでした。
..........

```

終いには、画面上に、
「Windowsは不正にインストールされた可能性があります...」
「Windowsは正規品ではありません」

画面右下を見ると、
「このWindowsのコピーは正規品ではありません。」
と、書かれてあったり。。

とりあえず黒い画面を止めて、過去の自分を振り返って見る。と、
原因はディレクトリ移動したことだとわかった。。。

ディレクトリ移動で前述のcdコマンドが落ちて
カレントディレクトリが[C:\WINDOWS\system32]
のまま remdir /S /Q .  コマンドを実行してしまった為、WindowsOSの大事なファイルも削除しまくってしまったらしい。

やばいことになったので、とりあえず再起動と思って再起動した
が、OSが破損して再起動できなくなった。。。
ShibouFlag = true;　状態。

この後、Windowsの回復領域を使用して、修復を実行し、一命を取り留めた。
どうやらこうゆうときは

**コントロール パネル\すべてのコントロール パネル項目\回復**
より、システムの復元をするとOSの大事なとこは取り戻せるみたい！

でも「このWindowsのコピーは正規品ではありません。」

というエラ－を解消することは出来なくて、リカバリを余儀なくされました。。
ファット端末だったんでかなり焦りましたが無事、データを他の端末に一旦移して、OSのリカバリ対応出来ました。


## ここで解説・振り返り

なんで私がバッチを
-------- [1]
①rmdirコマンドで本番機ログ設置場所を直接削除
rmdir /S /Q C:\work\本番機ログ設置場所\.

ではなく！

-------- [2]
①cdコマンドで本番機のログ設置場所に移動
cd C:\work\本番機ログ設置場所

②rmdirコマンドでカレントディレクトリ全部削除
rmdir /S /Q .

の手順にしたのかと言いますと、[1]の方法だと、

workディレクトリ直下も削除されてしまうからです。。。
これではもともこもないです。

## 一番いい方法は...
敗因はなにか？
＊エラー処理してない
＊/Q　オプション(削除時に対話無で実行)は余計だろ

ということで下記で対応しようと思ってます。。


```bat:init.cmd
@echo off
echo ##############################
echo #    本番機ログ削除処理
echo ##############################

rem 本番機ログ設置ディレクトリに移動
cd C:\work\本番機ログ設置場所

if not %errorlevel% == 0 (
    echo .
    echo ## 対象ディレクトリが存在しません！処理を終了します ##
    echo .
    pause
    exit
)

pause
rem 本番機ログをすべて削除
rmdir /S .

```

これで円満なリスク管理ができる。。はず。


この記事が誰かの力となり、余計なリカバリ作業の削減につながれば幸いです。
個人的にハッカソンとかで使う簡易WebAPIクラス

ちょいと前に[似たようなの](http://qiita.com/usopyon/items/6e7fb2c33269ac9a4af6)を書いて、その二番煎じで、WebAPIを叩く最低限のスニペットを置いておきます。ハッカソンといえど認証キーを漏洩させるわけにはいかないので、

- 作る時点で認証キーは外部ファイル化する
- その外部ファイルが、うっかり公開されないよう最初の時点でhtaccessとgitignoreも用意する

という仕様にしています。素材はSlackです。

```php:webapi.php
<?php

class WebAPI{

    public $ini;

    function __construct(){
        $this->ini = parse_ini_file("api.ini",true)["slack"];
    }

    function sendMessage($text){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_URL, $this->ini["hook"]);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($curl, CURLOPT_HTTPHEADER, [
            "Accept: application/json",
            "Content-type: application/json"
        ]);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode([
            'text'=>$text
        ]));
        return curl_exec($curl);
    }
}

$api = new WebAPI();
$response = $api->sendMessage("Hello");
var_dump($response);
```

外部ファイルは、こう書いておく。

```ini
[slack]
hook="https://hooks.slack.com/services/xxxx/xxxx"
```

これは、オマケ。

```
<Files ~ "\.(ini)$">
    deny from all
</Files>
```
Apache2.4+Tomcat8をAJPプロトコルで連携してJSPを表示

作業メモです。

# 環境

+ Amazon Linux AMI 2016.03.2 (HVM)
+ Apache2.4
+ Tomcat8

# Apache2.4

```bash
$sudo yum install httpd24 -y
$sudo service httpd start

# 確認
$curl http://localhsot/
```

# Tomcat8

今回はサンプルアプリ用のwarファイルをTomcatのページよりダウンロードして使っています

[Sample Application](https://tomcat.apache.org/tomcat-8.0-doc/appdev/sample/)


```bash
$sudo yum install tomcat8 -y
$sudo su
$cd /usr/share/tomcat8/webapps/
$wget https://tomcat.apache.org/tomcat-8.0-doc/appdev/sample/sample.war
$service tomcat8 start

# 確認
$curl http://localhost:8080/sample/
```

# AJPを使ってApachとTomcatを連携

[Apache2.4とTomcat8を連携させる](http://normalse.hatenablog.jp/entry/2015/03/13/200755)

初めにTomcat側の設定でAJP ConnectorがLISTENになっていることを確認

```bash
#Connector port 確認
$grep  AJP  /etc/tomcat8/server.xml
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

# 8009ポートでLISTENしていることを確認
$sudo netstat -lanput |grep 8009
   tcp        0      0 :::8009                     :::*                        LISTEN      3310/java
```

次にApache側の確認

モジュール読み込みの確認

```bash
# mod_proxy.so 及び mod_proxy_ajp.so の読み込み確認
$httpd -M |grep proxy
 proxy_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_connect_module (shared)
 proxy_express_module (shared)
 proxy_fcgi_module (shared)
 proxy_fdpass_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_scgi_module (shared)
 proxy_wstunnel_module (shared)
```

ProxyPass を記述して、Pathが /sample/ となっているのはAJPプロトコルを利用して8009ポートへ通信をする。

```/etc/httpd/conf.modules.d/httpd-proxy.conf

ProxyPass /sample/ ajp://localhost:8009/sample/
```

以下で先ほど http://localhost:8080/sample/ で表示された内容が確認できればOK

```bash
$curl http://localhost/sample/
```

上記が表示できればローカルマシンからも http://[domain or IP]/sample/　でアクセスすれば表示される

<img width="1122" alt="スクリーンショット 2016-06-25 19.43.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/20193/fbf2e2f3-15a9-a84e-8267-55eb4f4deb14.png">

あとはサンプルを色々変えていけばOK
Electronのクイックスタートで 「 Unable to find Electron app at ...」と出てしまう

Electronを始めようと思い、例のごとく Hello World をしようと思ったところ
以下のようにクイックスタートしようとするとタイトルの通りのエラーがでて
アプリが動かない

```
$ electron プロジェクトのフォルダパス
``` 

原因は極めて簡単なことで、
npmのpackage.jsonの記述でした。

Hello World を表示させるプログラムのJSファイルを

```
main.js
```

にしていたのですが、package.jsonの中には

```
"main": "index.js",
```

との記述が...

これを以下のように修正

```
"main": "main.js",
```

これで動きました。

以上。
SwiftでCのchar **をうまく扱う

CとSwift両方大好きな皆様こんにちは。本稿では、Swiftで`char **`をうまく扱う方法について考えてみます。

# 確かにSwiftでのchar *の取り扱いは悪くない

先駆者の方々の指摘通り、Swiftの`String`型とCの`char *`型との相互変換はそれなりに整備されていると言えそうです。

- [Swift - UnsafePointerと上手に付き合う - Qiita](http://qiita.com/dankogai/items/2d19b8352183cca3461f)
- [SwiftのPOSIX APIでcat(1)を書く - Qiita](http://qiita.com/gfx/items/faa2f97f3a59fd4daa00)

`String#withCString`と`String#fromCString`あたりを知っていればSwiftからCのシステムコール・ライブラリコールを便利に利用できるはずです。

# ところでchar **は…？

ところで、Cのシステムコール・ライブラリコールには`char **`を引数に取るものがあり、Swiftからも利用できます。たとえばSwiftの`posix_spawn`の第5引数`argv`の型は次のようなものです。

```
UnsafePointer<UnsafeMutablePointer<Int8>>>
```

これはCで言うと`char *const *`に対応しますが、これを`[Stirng]`とを相互変換したいときにどうすればいいのか、というのはあまり議論されていないように思います。途方に暮れた末、筆者はGistに落ちていた`CStringArray`クラスを改造して使うことにしました。

# CStringArray

今回利用したCStringArrayクラスはCocoa Touch Frameworkとして作成しており、Carthageでインストールすることができます。

- https://github.com/hnw/CStringArray

CStringArrayはコンストラクタ引数に`[String?]`を取り、メンバ変数`pointers`で`char *const *`が取り出せます。下記は使用例です。

```swift
let argv = CStringArray(["/bin/ls", "-la" , "/", nil])
posix_spawn(&pid, argv.pointers[0], &action, nil, argv.pointers, nil)
```

`pointers`は`UnsafeMutablePointer<CChar>`の配列なので、必要であれば`count`で個数も取り出せます。

`&argv.pointers`とすれば`char **`と互換になりますが、実装上`pointers`を書き換えられるとメモリリークしてしまうので`char *const *`で取り扱うのが無難だと思います。

# 参考URL

- 今回の実装: https://github.com/hnw/CStringArray/blob/master/CStringArray/CStringArray.swift
- 元の実装: https://gist.github.com/neilpa/b430d148d1c5f4ae5ddd

# ご意見募集

実はこんなゴテゴテしたクラスを作らなくても綺麗に解決できるのかもしれません。Swift初心者なので、プロの方のご意見をお待ちしております。
パスワードなしでSSHログイン

```
local$ ssh-keygen -t dsa
```

出力するファイル名、パスフレーズの入力を求められますが
何も入力せずに全てEnteyキーを押下して下さい。

```
local$ scp ~/.ssh/id_dsa.pub name@remort.host:
local$ ssh name@remort.host
remote$ cd .ssh/
remote$ cat id_dsa.pub >> authorized_keys
remote$ chmod 600 authorized_keys
remote$ rm id_dsa.pub
```

# 参考
* http://qiita.com/Tanaaaaan/items/50c3f0ddc15c40b750d2
* http://www.turbolinux.com/support/document/knowledge/152.html
* `authorized_keys`で検索すればいっぱいひっかかる
4050円で作るIoT温湿度・気圧センサモジュール

自作で遠隔監視ができる温度湿度気圧センサモジュールが簡単に、安く、作れるようになりました。感激したので投稿します。温度センサだけなら3000円切るのも可能です。
# 完成品イメージ
ボードはこんな感じ。マイクロUSBケーブルで電源供給します。
![IMG_2782[1].JPG](https://qiita-image-store.s3.amazonaws.com/0/68563/622691a5-e57a-9268-6e94-0b35cbb085a3.jpeg)

この小さいブレッドボード一個で温度と湿度、気圧を取得しWiFi経由でWebサーバへ送信できます。 
画面に表示する温度と湿度、気圧はこんな感じ。
![image](https://qiita-image-store.s3.amazonaws.com/0/68563/3aa00cc2-f7c0-fad4-6775-e0e2b728daa2.png)

#必要なもの
* ESPr Developer（ESP-WROOM-02開発ボード）:1個  
https://www.switch-science.com/catalog/2500/  
現在2160円 
* BME280搭載　温湿度・気圧センサモジュール:1個  
https://www.switch-science.com/catalog/2236/  
現在1620円
* ブレッドボード:1個  
https://www.switch-science.com/catalog/313/  
現在270円
* ピンヘッダ10ピン:2本
* ピンヘッダ6ピン:1本
* ジャンパワイヤ(オス～オス)  :7本
* 10kΩ抵抗:2個
* USBケーブル:1本
* WiFi環境:1環境
* ArduinoIDEが動くPC:1台

抵抗やジャンパワイヤ等は手元にあったので新規購入4050円で済みました。 
これまでArduinoとWifiシールドだけで8000円ぐらいしていたのが 
ESPr Developerのおかげで半額以下で済みます。驚き！

# システム概要
やりたいことはこんな感じです。
![システム概要.png](https://qiita-image-store.s3.amazonaws.com/0/68563/55b2700c-4f03-ccb3-8fce-71b8e9430334.png)

1. BME280からArduino(ESPr developer)へI2Cで温度と湿度、気圧を送る
2. ArduinoからMQTTつかって温度と湿度、気圧をmilkcocoaへ送る
3. 作ったhtmlをローカルでブラウザ閲覧しmilkcocoaに格納されている温度と湿度、気圧を見る

ローカルのhtmlで見ているのはmilkcocoaのapp_idをweb公開したくないためです。app_idを公開すると誰でもデータ詰め放題、出し放題になってしまいます。注意しましょう。

# サンプルソースコード
センサ値を取得する部分はスイッチサイエンスさんのソースを参考にしています。 
http://mag.switch-science.com/2016/05/13/esp-wroom-02-wifi-logger-1/  
MQTTで送信するとこからHTMLで表示するところはmilkcocoaさんのソースを参考にしてます。
http://blog.mlkcca.com/iot/milkcocoa-arduino/ 
http://blog.mlkcca.com/iot/realtime-data-visualization-with-raspberry-pi-3/
ですので、完全にコピペの産物となっております。 
# ソースコード on Arduino(ESPr Developer)
https://github.com/quallo-japan/ESPrDeveloper_BME280/tree/master/VinylHouseIoT 

Wifiの接続先とmilkcocoaのapp_id等を入力し 
ArduinoIDEでESPrDeveloperへ書き込むだけで使えるようになるはずです。

ESPr DeveloperをArduinoIDEで開発する方法はスイッチサイエンスさんの下記記事を参照ください。
http://trac.switch-science.com/wiki/esp_dev_arduino_ide
# ソースコード viewer
https://github.com/quallo-japan/ESPrDeveloper_BME280/tree/master/viewer

app_id等を入力してindex.htmlをブラウザで開けば先述のようなチャートが表示されるはずです。

# まとめ
ビニールハウスに複数台置いたら、すぐ使えるなぁと思ってます。結露の対策を考えないといけないですね。

サンプルソースを公開していただいたスイッチサイエンスさんとミルクココアさんには心から感謝します。
Windows Power Shell 4.0 を Windows7 にインストールする手順

# やりたいこと

* Windows Power Shell 4.0 を Windows7 にインストールする。

# 前提環境

* OS: Microsoft Windows 7 Professional 6.1.7601 Service Pack 1 (SP1) ビルド 7601 x64
* .NET Framework 4.5 以上 ([.NET Framework 4.6.1 を Windows7 にインストールする手順](http://qiita.com/bu-son/items/acb54f852962426eb2ed))

# インストールするソフトウェア

* Windows Management Framework 4.0

# 手順

## インストーラをダウンロード

[Windows Management Framework 4.0](https://www.microsoft.com/ja-jp/download/details.aspx?id=40855) で **ダウンロード** を選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/27a469d4-e039-e358-124e-d381b8b45a1a.png)

1. **Windows6.1-KB2819745-x64-MultiPkg** を選択
2. **次へ** を選択しインストーラをダウンロードします。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/71c39fea-ee9a-72b3-ef53-d71c97f0130e.png)

## インストーラを実行

ダウンロードされたインストーラ **Windows6.1-KB2819745-x64-MultiPkg.msu** を実行

**はい** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/a03d8092-bebc-0915-88fa-b41b1364afa6.png)

**同意します** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/e65dd8a3-2001-d0f1-243d-95a9952de166.png)

**今すぐ再起動** を選択して、PCを再起動。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/07115a06-836a-48a7-b023-9921e17c454a.png)

1. PowerSheel を起動。`%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe`
2. PowerShell のバージョンを確認

```ps1:コマンド
PS C:\> $PSVersionTable
```

```ps1:出力結果
Name                           Value
----                           -----
PSVersion                      4.0  # <== Versionが更新されました
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2
```

# 完了

# 参考文献

- [PowerShell/Windows7にPowerShell4.0をインストールする手順](http://win.just4fun.biz/PowerShell/Windows7%E3%81%ABPowerShell4.0%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86.html)
Windows Power Shell 3.0 を Windows7 にインストールする手順

# やりたいこと

* Windows Power Shell 3.0 を Windows7 にインストールする。

# 前提環境

* OS: Microsoft Windows 7 Professional 6.1.7601 Service Pack 1 (SP1) ビルド 7601 x64
* .NET Framework 4 以上 ([.NET Framework 4.6.1 を Windows7 にインストールする手順](http://qiita.com/bu-son/items/acb54f852962426eb2ed))

# インストールするソフトウェア

* Windows Management Frameork 3.0

# 手順

## インストーラをダウンロード

[Windows Management Framework 3.0](https://www.microsoft.com/en-us/download/details.aspx?id=34595) で **Download** を選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/ede383ad-25b0-fb3d-1a51-d9b0c5a31ff5.png)


1. **Windows6.1-KB2506143-x64.msu** を選択
2. **Next** を選択しインストーラをダウンロードします。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/2fcc83fd-9c0a-8cca-e464-72940d00ba0d.png)

## インストーラを実行

ダウンロードされたインストーラ **Windows6.1-KB2506143-x64.msu.exe** を実行します。

**はい** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/ce6c5df7-be8b-38c7-c8f7-b0488a665e2e.png)

**同意します** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/076f4693-a29d-850b-8d45-9081a7fdc2b6.png)

**今すぐ再起動** を選択して、PCを再起動。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/560be5ef-8a35-97f4-efe1-f4240f2ef955.png)

1. PowerSheel を起動。`%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe`
2. PowerShell のバージョンを確認

```ps1:コマンド
PS C:\> $PSVersionTable
```

```ps1:出力結果
Name                           Value
----                           -----
PSVersion                      3.0  # <== Versionが更新されました
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.2.9200.16398
PSCompatibleVersions           {1.0, 2.0, 3.0}
PSRemotingProtocolVersion      2.2
```

# 完了

# 参考文献

- [PowerShell/Windows7にPowerShell3.0をインストールする手順](http://win.just4fun.biz/PowerShell/Windows7%E3%81%ABPowerShell3.0%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86.html)
UbuntuでGitを使い始める話

#環境
Ubuntu 16.04 LTS

#目的
gitのダウンロードと設定

#方法

- gitのダウンロード

```bash
sudo apt-get update
sudo apt-get install git
```
- gitの設定

```bash
user.name=Your Name
user.email=youremail@domain.com
```
form外のボタンから値送信したい時


phpでforeach ~~で大量のcheckboxを生み出して、submitボタンだけ一つにしたかった時に、ハマったのでメモ。

```
<fieldset form="chk">
   <input name="sth[]" value="something" type="checkbox" />
</fieldset>
```

```
<form id="chk" action="hogehoge.php" method="post">
   <button type="submit" name="submit">Check</button>
</form>
``` 

結論、こういう感じです。fieldsetっていうタグを使います。
fieldsetのオプションのformを、form="submit部分のid"とすると、綺麗にわけられます。

formタグの中にformタグが入るとエラーもなく内側のタグが消えるんですね、、ハマった、、
webpackでPostCSSを使ってSassをコンパイルする設定

# 概要
　ベンダープレフィックスをつけてくれるAutoprefixerを使いたかったところ、PostCSSが必要でsass-loaderからの移行メモ。

# インストール
```bash
sudo npm i --save-dev postcss-loader sugarss precss autoprefixer
```

- postcss-loader
    - PostCSS本体
- sugarss
    - Sass記述をCSSに変換
- precss
    - $を使った変数の変換
- autoprefixer
    - '-webkit-'や'-moz-'などのブラウザ独自拡張の識別子を自動で付与する

# 設定
　使用するプラグインは読み込みます。

```js
import autoprefixer from 'autoprefixer';
import precss from 'precss';
```
　sugarssはpostcssのloaderにパラメータとして付与し、autoprefixerとprecssはpostcssをkeyに配列で定義します。
　autoprefixerには、ブラウザのバージョンを引数に渡すことで対応したプレフィックスを付与します。

```js
{
  module: {
    loaders: [
      {
        test: /\.sass$/,
        loaders: ['style', 'css', 'postcss?parser=sugarss'],
      },
    ],
  },
  postcss: [autoprefixer({ browsers: ['IE 9', 'IE 10', 'IE 11', 'last 2 versions'] }), precss],
}
```

# 参考文献
- [2016年から始めるCSS~環境構築編~](http://qiita.com/rglay/items/2a04a5310ab933c03fb2)
勉強会メモ: 広告機械学習最前線 (第54回 #TokyoWebmining )

# 広告機械学習最前線

[第54回 データマイニング+WEB ＠東京( #TokyoWebmining 54th ) ー深層学習・機械学習 祭りー](https://tokyowebmining54.eventbrite.com) のセッション「広告機械学習最前線」のメモです。
(後で詳しく調べるようにメモしているので、内容はちょっと雑になっています)

Masa_s3 さんによる発表資料は [**こちら**](http://www.slideshare.net/masakazusano75/sano-tokyowebmining-201625v04)。



## 概要

- 入札ロジックの話がメインになる
    - CTR / CVR 予測モデル
    - 予算消化コントローラ
    - 入札価格決定関数

- 今回の発表は [Real Time Bid Optimization with Smooth Budget Delivery in Online Advertising](https://arxiv.org/pdf/1305.3011.pdf) を基にしている
    - CTR / CVR 予測器や入札金額調整がどのように DSP に組み込まれるのか、そのフレームワークを提案している

<img alt="Screen Shot 2016-06-25 at 17.44.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/11734/ecc1c762-ed6e-cca4-88c3-d007dd7a3167.png">


# DSP の内部の話

## アドリクエストの処理

1. アドリクエストを受ける
2. CTR 予測
3. 入札価格を決定する 8(pacing)
4. 入札する (レスポンス)

## データ構造

- Advertiser
    - Campaign 
        - Ad group
- Campaign では、一日の予算上限を管理する
- Ad group では、入札価格を管理する

## 広告 (キャンペーン) を選ぶ

- 選ぶ基準
    - 予測 CTR、予測 CVR が高いか？
    - 予算消化状況はどうか？

## 入札金額を決定する

- 入札金額
    - 予測 CTR、CVR、消化状況、CPA を総合評価して決定する
    - 他社の入札に負けないようにしなければならない
    - 複雑なロジックを使って高精度な計算をしたいが、時間の制約 (50ms or die) がある


# CTR / CVR 予測モデル

- クリックやコンバージョンしてくれるユーザを予測する
- 歴史的に、ロジスティック回帰 (とその派生) がよく使われている
- より高精度な予測をするならば、Factorization Machines (FM) + Follow the regularized leader (FTRL) などがある
    - FTRL は [Ad Click Prediction: a View from the Trenches](http://research.google.com/pubs/pub41159.html) の論文が詳しい
- 特徴ベクトルの次元
    - CTR 予測での特徴ベクトルは典型的には 2^24 次元、次元削減しないと 2^27 次元になるので、交互作用を考えるのは辛い
    - FM であれば、そんなに辛くない


# 予算消化コントローラ

- 広告主としては、
    - なるべく安く「獲得」したい
    - なるべく滑らかに (各時間帯にまんべんなく) 配信したい
- 素朴な配信スムージング
    - [AdWords and Generalized On-line Matching](http://web.stanford.edu/~saberi/adwords.pdf)
    - AdWords problem (online matching) の問題としてスムージングを実現する
- 紹介するロジック
    - [Smart Pacing for Effective Online Ad Campaign Optimization](http://arxiv.org/pdf/1506.05851.pdf)
    - キャンペーンごとに「レイヤ」という概念を定義する
        - レイヤごとにペーシングレートを計算する
        - このペーシングレートが高いものほど出やすくなる
    - リクエストの品質 (CVR とか) ごとに、「レイヤ」を決める


# 入札価格決定関数

- [Bid Optimizing and Inventory Scoring in Targeted Online Advertising](http://www0.cs.ucl.ac.uk/staff/w.zhang/rtb-papers/lin-bid.pdf)
    - 平均予測 CTR より高いリクエストには高めに入札する
    - 逆に予測 CTR が低い場合は入札を控える
        - 0.8, 1.0, 1.2 みたいな係数をかける
    - CVR 向上には効くが、CPA 最適化はあんまり期待できない
gensimで文章をベクトルに変換する

From Strings to Vectorsの章をやってみました。


stoplistの部分で必要のない単語を除外しています。


ストップワードとは
あまりにたくさん検索にかかりすぎるので、検索精度の向上のためには検索対象から除外せざるを得ない語。助詞や助動詞などの機能語(日本語ならば「は」「の」「です」「ます」など、英語ならば「the」「of」「is」など)は、殆んどの場合これに該当する。
※はてな参照




```py:sample.py

import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

from gensim import corpora, models, similarities

documents = ["Human machine interface for lab abc computer applications",
          "A survey of user opinion of computer system response time",
          "The EPS user interface management system",
          "System and human system engineering testing of EPS",
          "Relation of user perceived response time to error measurement",
          "The generation of random binary unordered trees",
          "The intersection graph of paths in trees",
          "Graph minors IV Widths of trees and well quasi ordering",
          "Graph minors A survey"]

          
# remove common words and tokenize
stoplist = set('for a of the and to in'.split())
texts = [[word for word in document.lower().split() if word not in stoplist]
  for document in documents]

# remove words that appear only once
from collections import defaultdict
frequency = defaultdict(int)

# print(texts)

for text in texts:
	for token in text:
 		frequency[token] += 1

texts = [[token for token in text if frequency[token] > 1]
for text in texts]

# from pprint import pprint   # pretty-printer
# pprint(texts)

dictionary = corpora.Dictionary(texts)
# print(dictionary)

#id付きで出力
# print(dictionary.token2id)

#文章ベクトルへ変換
corpus = [dictionary.doc2bow(text) for text in texts]
print(corpus)


```





公式チュートリアル
https://radimrehurek.com/gensim/tut1.html
macにgcc5.3をインストール

競技プログラミング等でよく使われている `#include <bits/stdc++.h>`を使ってみようとしたが、mac標準のllvmでは使えない。
以下のエラーが出る。

```
fatal error: 'bits/stdc++.h' file not found
#include <bits/stdc++.h>
         ^
1 error generated.
```

そこで、gcc5.3をインストールする。
homebrewからインストールし、シンボリックリンクを貼ればいい。

```
brew tap homebrew/versions
brew install gcc5
ln -s /usr/local/bin/gcc-5 /usr/local/bin/gcc
ln -s /usr/local/bin/g++-5 /usr/local/bin/g++
```
CSSだけでaタグのリンク先プレビューを表示する


## 解説
cssの`after`擬似要素に`content`プロパティで値`attr(href)`を指定し、`hover`時に表示する感じです。

必要に応じて見た目の装飾をしてあげて下さい。

なお、`a`タグには`position: relative`を指定したほうが良いかもしれません。

## デモ
https://codepen.io/tdkn/full/dXNZKW/

## コード

```html:html
<a href="http://io.tedokon.com">ここ！</a>
```

```css:css
a:after {
  position: absolute;
  content: attr(href);
  display: none;
}

a:hover:after {
  display: block;
}
```
phpのマジック定数一覧

\_\_LINE__
ファイル上の現在の行番号。

\_\_FILE__
ファイルのフルパスとファイル名 (シンボリックリンクを解決した後のもの)。 インクルードされるファイルの中で使用された場合、インクルードされるファイルの名前が返されます。

\_\_DIR__
そのファイルの存在するディレクトリ。include の中で使用すると、 インクルードされるファイルの存在するディレクトリを返します。 つまり、これは dirname(\_\_FILE\_\_) と同じ意味です。 ルートディレクトリである場合を除き、ディレクトリ名の末尾にスラッシュはつきません。

\_\_FUNCTION__
関数名。

\_\_CLASS__
クラス名。 クラス名には、そのクラスが宣言されている名前空間も含みます (例 Foo\Bar)。 PHP 5.4 以降では、\_\_CLASS\_\_ がトレイトでも使えることに注意しましょう。トレイトのメソッド内で \_\_CLASS\_\_ を使うと、そのトレイトを use しているクラスの名前を返します。

\_\_TRAIT__
トレイト名 トレイト名には、宣言された名前空間も含みます (例 Foo\Bar)。

\_\_METHOD__
クラスのメソッド名。

\_\_NAMESPACE__
現在の名前空間の名前。
jspコンパイルでThe type java.io.ObjectInputStream cannot be resolved. が発生

最近、eclipseでjspコンパイル時に「The type java.io.ObjectInputStream cannot be resolved.」というエラーで落ちる事象が発生しました。でプログラムの何がいけないんだろうということで調べてみたのですが問題なく、どうやらjdkで使ってるバージョンに起因するものらしいので共有します。なお、Tomcat以外にもGAEで使ってるjettyでも発生するようです。（私はjettyではまりました）

## 発生条件
　jdk1.8.0_91もしくはjdk1.8.0_92を使用している。
## 対処方法(2016年6月時点)
　jdk1.8.0_77までダウングレードする。
## 参考URL
　【Stack Overflow 】
　　　http://stackoverflow.com/questions/36963248/the-type-java-io-objectinputstream-cannot-be-resolved-it-is-indirectly-referenc

　【Googleグループ】
　　　https://groups.google.com/forum/#!topic/alluxio-users/H1mcoZY77F8
よく使用するPHPスクリプト

```
<?php

print_r(get_defined_constants());
//定義済みの定数すべてをわかりやすく出力する

print_r(get_loaded_extensions());
//PHPインタプリタにコンパイル、 ロードされている全てのモジュールの名前を返す

print_r(get_defined_functions());
//定義済みの関数すべてをわかりやすく出力する

print_r(get_declared_classes());
//定義済みのクラス名をわかりやすく出力する

register_shutdown_function();
//スクリプト終了時に実行する関数を登録できる

$a = "hoge"
var_dump($a);
//コード中に埋め込み、出力元のファイル場所、データ型、値を出力する

?>
```
※今後調べるたびに追記していきます。
ruby partial download

http://stackoverflow.com/questions/2301009/get-file-size-before-downloading-counting-how-much-already-downloaded-httpru?rq=1

https://www.google.com/search?q=ruby+http+byte+range+download&oq=ruby+&aqs=chrome.0.69i59j69i60l5.1573j0j4&sourceid=chrome&ie=UTF-8
CSVファイルから特定の列を取り出す自作関数

シェルで作業している時に、スペース区切りやTSVファイルから特定の列を取り出したいことがある。

`cut`コマンドは便利だが、区切り文字に単一の文字しか使えない、デフォルトではスペースではなくタブ、など少し使いにくい。

で、結局`awk`コマンドを使うことになるが、`cut`よりも小指が疲れる上、タイプ量が増えてしまう。

```sh
cat <<EOF > test.txt
a b c
d e f
EOF

# cutを使う場合
cat test.txt | cut -d ' ' -f 1,3
#=> a c
#=> d f

# awkで同じことをする
cat test.txt | awk '{print $1, $3}'
#=> a c
#=> d f
```

そこで、極力少ないタイプ量で処理できる自作関数`colprint`を作った。

```sh
colprint(){
    options=''
    while getopts F: OPT; do
        options="$options -$OPT $OPTARG"
    done

    shift $((OPTIND - 1))

    command=''
    for str in $@; do
        command=`echo $command '$'$str, `
    done

    awk $options "{print `echo $command | sed 's/,$//g'`}"
}
```

使い方はこんな感じだ。

```sh
cat <<EOF | colprint 1 3
a b c
d e f
EOF
#=> a c
#=> d f

cat <<EOF | colprint -F ,, 1 3
a,,b,,c
d,,e,,f
EOF
#=> a c
#=> d f
```

参考URL http://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
Bash で PROMPT_COMMAND を使わずに PS1 を動的に変更

## はじめに

### PROMPT_COMMAND とは

PROMPT_COMMAND に関数やコマンドがセットされていると、Bash でプロンプトを表示する直前に、毎回それが実行されます。

この機能を利用して PS1 を動的に書き換える例を見かけることがあります。

### PS1 内でコマンドの出力を表示する

しかし、PS1 内でも関数やコマンドを実行して、結果の文字列を表示することができます。[^1]

ただ、うろ覚えでこの辺りの設定をしていたところ、少々ハマってしまったので、実際に自分が間違えた例と合わせて、正しい設定方法を記しておきます。

よく使われる [git-completion](https://github.com/git/git/tree/master/contrib/completion) を題材に用います。
※以降の例で、`git-prompt.sh` 相当のものは読み込み済みとします。

## 間違い例1

```bash
# ~/.bashrc
__my_ps1() {
  local branch=$(__git_ps1)
  [[ $branch ]] && branch="\[\e[0;35m\]$branch\[\e[0m\] "
  echo "[${branch}\u@\h:\W] "
}

PS1="$(__my_ps1)"
```

一見ちゃんと動きそうで、実際動きはするのですが、PS1 の文字列は最初にこのスクリプトを評価したときのままで、ディレクトリを移動しても、`__my_ps1` 関数が再評価されることはありません。

実行例:

```bash
[me@localhost:~] cd path/to/gitrepo
[me@localhost:gitrepo] # branch は表示されない
[me@localhost:gitrepo] . ~/.bashrc # 再読み込み
[ (master) me@localhost:gitrepo] # 表示される
[ (master) me@localhost:gitrepo] cd
[ (master) me@localhost:~] # 非gitディレクトリでも表示されてしまう
```

（例では、カラーコードは反映されていません。）

## 間違い例2

```bash
# ~/.bashrc
__my_ps1() {
  local branch=$(__git_ps1)
  [[ $branch ]] && branch="\[\e[0;35m\]$branch\[\e[0m\] "
  echo "[${branch}\u@\h:\W] "
}

PS1='$(__my_ps1)'
```

この場合、`__my_ps1` 関数は毎回実行・評価されてくれるのですが、エスケープシーケンスが評価されず、文字列としてそのまま表示されてしまいます。

実行例:

```bash
[\u@\h:\W] cd path/to/gitrepo
[\[\e[0;35m\] (master)\[\e[0m\] \u@\h:\W] # branch は表示される
[\[\e[0;35m\] (master)\[\e[0m\] \u@\h:\W] cd
[\u@\h:\W] # branch は表示されない
```

なんとも残念な見た目ですorz

## 正しい例

正しくは、下のように `PS1` 内で `$(関数 or コマンド)` をシングルクォートで記述します。

```bash
# ~/.bashrc
PS1='[\[\e[0;35m\]$(__git_ps1)\[\e[0m\] \u@\h:\W] '
```

ダブルクォートで括りたい場合は、 `"\$(__git_ps1)"` のようにエスケープすれば OK です。

実行例:

```bash
[me@localhost:~] cd path/to/gitrepo
[ (master) me@localhost:gitrepo] # branch は表示されない
```

以上です。

参考になれば幸いです。

## 参考

- [Bash Reference Manual#Controlling-the-Prompt](https://www.gnu.org/software/bash/manual/bash.html#Controlling-the-Prompt)
- [PS1とPROMPT_COMMAND, GNU screenでの活用も](http://rcmdnk.github.io/blog/2013/03/21/prompt-command/)
- [「Git補完をしらない」「git statusを1日100回は使う」そんなあなたに朗報【git-completionとgit-prompt】 - Qiita](http://qiita.com/varmil/items/9b0aeafa85975474e9b6)

[^1]: 余談ですが、筆者は PROMPT_COMMAND で PS1 を書き換えて先輩に注意を受けたことがあります。
自前のgitlabにpushできなくなった( pre-receive hook declined )

DockerでGitlabコンテナを作ってごちゃごちゃしていたら、pushできなくなったときの話。

```
 ! [remote rejected] master -> master (pre-receive hook declined)
```

こんなんがでてpushできない。。

調べるとこれは権限周辺の問題らしい。

Gitlabのデフォルトの設定なのかどうかはわからないが、指定したURLでないとpushをうけつけない(?)制限が付いていた。

実は、この症状が起きるちょっと前にGitlabのURLを変えてたんですよね。

そこで、触ったことのないファイルの存在が発覚。

```
/home/git/gitlab-shell/config.yml
```
ファイルの場所は、あくまでも僕が使用しているDockerイメージ内の場所なので参考にならんかもです。

このgitlab-shell の設定ファイルに内に
```
gitlab_url: "localhost:8080"
```
なる項目が。

こいつがまだ変わっていませんでした。

ここを新しいURLに変えて、gitlabをリスタートさせるとpushできました！

以上。
RailsのURLヘルパーをJSからrequireできるようにする

RailsでJavaScriptをふんだんに使ったアプリケーションを書いていると、JavaScriptでURLを組み立てる必要がでてくることがあります。しかし、文字列でハードコーディングしてしまうと万が一将来的にパスが変わったときに追従が大変。

最近だと [browserify-rails](https://github.com/browserify-rails/browserify-rails) を使っていることも多いので、JavaScriptから必要な関数だけを `require` できるようにしたいです。

## js_rails_routes

というわけでそこら辺の問題を解決する [yuku-t/js_rails_routes](https://github.com/yuku-t/js_rails_routes) を作りました。

### インストール

```rb:Gemfile
gem 'js_rails_routes', group: :development
```

### 使い方

gemを追加したら自動的に "js:routes" というRakeタスクが追加されるのでそれを実行するだけです。

```bash
rake js:routes
```

すると "app/assets/javascripts/rails-routes.js" というファイルが作られます。

### 例

```rb:config/routes.rb
# == Route Map
#
#       Prefix Verb   URI Pattern                  Controller#Action
#     articles GET    /articles(.:format)          articles#index
#              POST   /articles(.:format)          articles#create
#  new_article GET    /articles/new(.:format)      articles#new
# edit_article GET    /articles/:id/edit(.:format) articles#edit
#      article GET    /articles/:id(.:format)      articles#show
#              PATCH  /articles/:id(.:format)      articles#update
#              PUT    /articles/:id(.:format)      articles#update
#              DELETE /articles/:id(.:format)      articles#destroy
Rails.application.routes.draw do
  resources :articles
end
```

このようなルーティングを持っている場合、こんなファイルが生成されます。

```js:app/assets/javascripts/rails-routes.js
// Don't edit manually. `rake js:routes` generates this file.
export function article_path(params) { return '/articles/' + params.id + ''; }
export function articles_path(params) { return '/articles'; }
export function edit_article_path(params) { return '/articles/' + params.id + '/edit'; }
export function new_article_path(params) { return '/articles/new'; }
```

あとはいつものように `require` するだけですね。

## 参考

- [railsware/js-routes](https://github.com/railsware/js-routes)

    同じ問題を解決するgemですが、sprocketsを使うことを前提としており、出力されたルーティング関数をグローバルに定義された `Routes` オブジェクトのプロパティになります。

- [mtrpcic/js-routes](https://github.com/mtrpcic/js-routes)

    sprockets非依存でファイルを書き出すrakeタスク。これもグローバル経由になる。最初 @mizchi がこれを雑に改造して `require` 可能にしたものを、いろいろと整備して拡張してrubygemsに公開したのが js_rails_routes
Windows10でTeX環境を作る

新しくWindows10のPCを購入したので、TeX作成環境を作った時のメモです。

# 本体のインストール
これだけインストールすればほぼOK。圧倒的感謝。
http://www.math.sci.hokudai.ac.jp/~abenori/soft/abtexinst.html

失敗する場合は、接続先URLを変更し、あきらめずに繰り返しインストールすると、いつかは成功する。（この環境では３回くらい繰り返した・・・）

# epsコンバータのインストール
Windows環境でTeXを書いている、ということは、おそらく図表はExcelやPowerPoint。

そんなときには、「metafile to eps converter」
http://wiki.lyx.org/Windows/MetafileToEPSConverter

Windows8以降からは、wmf2epsやemf2epsはプリンタドライバがうまく動作しないようで、使えなくなっています。

フォントは埋め込んだほうがいろいろ便利です。

詳しくは、こちらをご参照。
http://qiita.com/tubo28/items/1f8672fb164aafa9ab31

# pdf作成

インストール直後は、pdfplatexで変換される。
このままでは、epsがpdfに変換できないので、xelatexあたりを使うと、epsがpdfに取り込まれる。
PhoenixFrameworkでレイアウトを無効にする方法


## 状況

RSS,AMP,Instant Articles対応している時に、既存のレイアウトを適用しないテンプレートを作成したかった。

## 環境

Elixir 1.3.0
Phoenix Framework 1.1.6

## 解決方法

`Phoenix.Controller.put_layout/2` に `false` を設定する

Controller全体に適用したい場合

```
defmodule App.HogeController do
  plug :put_layout, false
end
```

特定のレンダリングにのみ適用したい場合

```
defmodule App.HogeController do
  def index(conn, _params) do
    conn
    |> put_layout(false)
    |> render("index.html")
   end
end
```
Dockerの個人メモ


WordPressの環境を手元に落とす

```bash
$ docker pull <name>
```


<name>にはsay0213/wp-dev-pluginとかすると良い。
https://hub.docker.com/r/say0213/wp-dev-plugin/


# Dockerがうまく動かない時に再起動　

```bash
$ docker-machine restart
```

DockerのIPアドレスなどを記載し直す必要あり

```bash
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/yousan/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
```

これを.zshrcなどに追記。


# 起動

```bash
$ docker run -ti <options> '/bin/bash'

```

| オプション| 引数の例 | 備考　 |
|--------|-------|---|
| -p | 80:80 | ポートのマッピング。左がDocker内、右が*VirtualBoxの仮想マシンのポート* |
| --name | 'add-page-from-template'| 名前は`--name='hoge'`のように繋げる |
| -v | `/local/path:/docker/path` | 対応付けるディレクトリ | 

# Hostsファイルに書く内容

```bash
192.168.99.100  dockerhost
```

IPアドレスは`docker-machine ip`で確認されるVirtualBoxのIPアドレス。


# Dockerのシェルに入る

```bash
$ docker attach wp-dev-plugin
```
Automator入門

## Automatorとは

---

### 公式の説明
 
> Automator は、簡単に作業を効率化できるパーソナル自動化アシスタントです。Automator を使えば、単純なドラッグアンドドロップ操作で「自動化レシピ」を作成し、実行できます。自動化レシピは、単純なタスクも複雑なタスクも、必要なときに必要な場所で実行してくれます。

[Mac 101：Automator - Apple サポート](https://support.apple.com/ja-jp/HT2488) より引用

---

### Automartorとは

3行で説明すると

- Macに標準で入っている
- （割に知名度が低い）
- 定型作業を自動化してくれるツール

---

### Automatorのよいところ

- ドラッグアンドドロップで作れる
- コマンドラインだと（多分）面倒なことも簡単にできる
  - 画像の処理
  - PDFの処理
  - とかとか

---

### Automatorのいまいちなところ

- できることに限界がある
- かえってめんどくさいこともある

---

### Automatorの使用例

- フォルダに投げ込んだ画像を縮小する
- PDFを回転しつつ、偶数ページを削除する
- WindowsみたいにCommand+Lで画面をロックする

---

## Automatorで考えること

Automatorで考えることは以下の2つ

- ドキュメントの種類
- アクション

---

## ドキュメントの種類

Automatorのドキュメントの種類は以下の8つ

- ワークフロー
- アプリケーション
- サービス
- プリントプラグイン
- フォルダアクション
- カレンダーアラーム
- イメージキャプチャ・プラグイン
- 音声入力コマンド

---

## アクション

Automatorのアクションはいっぱいあるので割愛

---

## 最後の手段、スクリプトの実行

アクションとしてスクリプトの実行もできる

- Shell Script
- AppleScript
- JavaScript

（だったら最初からスクリプト書くよ、ってツッコミはなしの方向で）

---

## Example

- Retina対応の画像を作る
- ショートカットキーで画面をロックする

---

## Retina対応の画像を用意する

---

### やりたいこと

- 元画像がhoge.pngのときに
- 倍角のhoge@2x.pngという画像を用意する

---

### 大雑把な手順

- 画像を拡大するとボケるので、最初から倍角画像を作る
- 用意した画像に対して
  - 元画像は@2xという文字を名前の末尾につける
  - 元の名前のまま半分に縮小した画像を作る

---

### 細かい手順

ワークフローにするとこんな感じ

1. @2xフォルダにファイルをコピーする
2. 名前の末尾に@2xをつける
3. @1xフォルダにファイルをコピーする
4. 名前の末尾の@2xを消す
5. 画像を縮小する

---

## ショートカットキーで画面をロックする

---

### やりたいこと

- WindowsみたいにCommand+Option+Shift+Lで画面をロックする

---

### 大雑把な流れ

- スクリーンセーバー起動時に画面をロックする設定にする
- スクリーンセーバーをショートカットキーで起動する

---

### 細かい手順

1. 「サービス」でAutomatorのドキュメントを作る
2. 「入力なし」で「スクリーンセーバーを起動」するだけのフローを作る
3. 適当な名前で保存する
4. システム環境設定 > キーボード > ショートカットを開く
5. サービスの中に作ったサービスがあるのでショートカットキーを割り当てる

---

## 最後に

- Automator便利だよ！
- Qiitaのスライドモードいいよ！
- Macはいいぞ
Realtek Ameba に 豊四季タイニーBASICを移植


Realtek Ameba で UARTの送受信ができるようになったので、豊四季タイニーBASICを移植しました。

# 準備
豊四季タイニーBASICの本を購入して一読しました。
本によると移植元としてオススメだと書いてあった[arudino版の豊四季タイニーBASICの]()を移植のベースにしました

# 移植作業
* 本にも書いてありますが、c_putch()とc_getch()とc_kbhit()とrandom()の4つの関数を移植すれば良いです。

## c_putch()
* UART１文字出力
* ROMに内蔵されている関数を使って実装

```c
void c_putch(char c) {
  HalSerialPutcRtl8195a((u8) c);
}
```

## c_getch()
* UART１文字入力
* ROMに内蔵されている関数を使って実装

```c
char c_getch(void) {
  return (char) HalSerialGetcRtl8195a(1);
}
```

## c_kbhit()
* UARTの受信バッファにデータがあるかの確認
* 悩んだのですが、いろいろ調べた結果 UARTのレジスタを見れば実現できると分かった。レジスタマップは公開されていないので、サンプルコードを見たり、逆アセンブルを見たりした。 
 * AmebaのUARTはsysnopsys 社 dw_apb_uart を使用している。
 * 0x14のレジスタがLINE STATUSです。
 * このレジスタのLSBが1なら受信バッファにデータがあるので、そこを判定すればよい。
 * レジスタの仕様が分かったあと、そのものずばりのコードがSDKのserial_api.cのserial_readable()にもあることが判明。

```c
char c_kbhit(void) {
  return (HAL_UART_READ8(UART_LINE_STATUS_REG_OFF) & 0x01);
}
```

## random()
* 乱数を生成
* 本によるとADコンバータを使うと良いとのことです。
* ADコンバーターから値を読むようにする。
* 現時点ではシードを設定するsrandom()を実装を省いて、ADコンバータの値をそのまま返しています。
* ADコンバータの関数はlib_platform.aに含まれていたので、それを使いました。

```
short random(short value)
{
  analogin_t   adc;
  unsigned short adcdat;

  analogin_init(&adc, AD_2);
  adcdat = analogin_read_u16(&adc);
  return (short) (adcdat % value);
}
```

上記の移植が終わったら、main()からbasic()を呼ぶようにすれば移植は終了です。

# 動作例

```
TOYOSHIKI TINY BASIC
AMEBA EDITION

OK
>10 PRINT "TEST"
>20 FOR I=0 TO 5
>30 PRINT I
>40 NEXT I
>list
10 PRINT "TEST"
20 FOR I=0 TO 5
30 PRINT I
40 NEXT I

OK
>run
TEST
0
1
2
3
4
5

OK
>
```

* 後でソースをgithubに置く予定 
* RTL8710が届いたら動かしてみる予定。
arcpyでベクタフォーマット操作＆変換

Open Source GISしか使ったことなくて、転職して初めてArcGISの洗礼を受けたkochizufanです。
クソ高いらしいけど同じ処理操作しようと思ったらやっぱArcの方が大分速いね！まあ高いだけで取り柄なかったら誰も選ばんだろうから当然だとは思うけど...。

で、ベクタ地図フォーマット（例：Shapeファイル）からデータを読み取って、各属性をいろいろ加工して、他のフォーマット（例：FGDB）に吐き出すような要件があって、それをarcpy（ArcGISのpython環境）でごにょごにょする方法がわかったので、ちょっとノウハウを書いてみます。
※ 本記事では、吐き出し先のスキーマファイルは空ですでに作られているものとして、それへの行追加を想定しています。ゼロからスキーマファイルを作るところは私もまだ調べていません。

### なぜ苦労したか

正直、調べるのかなり苦労しました。なんでかって言うと、だいたいのarcpy記事、最初に

```py
import arcpy

# Set the workspace environment to local file geodatabase
arcpy.env.workspace = "C:/data/base.gdb"
```

とか書いてあって、ここからこの下のスキーマをリストアップしたりできるのだけど、このworkspace属性にDBフォルダを指定する処理を、「DBを開く処理」だと勘違いしちゃって。
それで、「インスタンスも作らずに、開くDB指定するの？複数開いて読んで突っ込んでとかしたい時はどうなるの？」とか思って混乱しちゃって。
実際には記事数はガクンと減るけど、普通にCursorクラスのインスタンスを作るようなインタフェースもありました。
俺だけかもしれないけど、同じ沼にはまる人もいるかもしれないので、はまったところを前もって共有。


### 開いて突っ込む処理サンプル

で、実際に開いて処理して突っ込むコードのサンプル。

```py:arcpyサンプル
import arcpy
from arcpy import env
import datetime
 
# 元のShapeファイル
sFClass = "D:/Data/SampleShape/SampleScheme.shp"
# 元ファイルの定義オブジェクトを読み込み
sDesc   = arcpy.Describe(sFClass)
# フィールド定義リストを読み込み
sFields = sDesc.fields
# フィールド定義リストからフィールド名リストを作成
sKeys   = [field.name for field in sFields]
# 自動付番のシステムID的フィールドを削除(Shapeの場合)
sKey.remove('FID')
# ジオメトリフィールドであるShapeフィールドを削除
# （デフォルトのShapeフィールドだと、代表点の点情報しか出ないため）
# ジオメトリをWKBで抜き出すためのフィールドを追加
sKey.remove('Shape')
sKey.append('Shape@WKB')
 
# 書込み先のFGDBファイル
fFClass = "D:/Data/Sample_FGDB.gdb/SAMPLE_SCHEME"
# 先ファイルの定義オブジェクトを読み込み
fDesc   = arcpy.Describe(fFClass)
# フィールド定義リストを読み込み
fFields = fDesc.fields
# フィールド定義リストからフィールド名リストを作成
fKeys   = [field.name for field in fFields]
# 自動付番のシステムID的フィールドを削除(FGDBの場合)
fKey.remove('OBJECTID')
# ジオメトリフィールドであるShapeフィールドを削除
# （デフォルトのShapeフィールドだと、代表点の点情報しか書き込めないため）
# ジオメトリをWKBで書き込むためのフィールドを追加
fKey.remove('Shape')
fKey.append('Shape@WKB')
 
# 元ファイルを読み込みでCursor開く（検索結果はsKeysの並びで出てくる）
# なお、arcpy.daはArcGIS 10.1以降かららしいので、それ以前だと動かないらしい...
# 同僚のPCは10.0だったので動かなかった
sCur = arcpy.da.SearchCursor(sFClass, sKeys)
# 先ファイルを追記でCursor開く(書込みはfKeysの並びのリストで行う)
fCur = arcpy.da.InsertCursor(fFClass, fKeys)
# 1行ずつ読み込み
for sRow in sCur:
    # sRow はsKeys並びのリストで来るので、zipして辞書オブジェクトにする
    sDic = dict(zip(sKeys,sRow))
    # 書込みデータを辞書で作成（以下のマッピングは適当）
    fDic = {
        "CODE"          : "ID_" + sDic["ID"],
        "Shape@WKB"     : sDic["Shape@WKB"],
        "CUSTOMER_NAME" : sDic["FIRST_NM"] + " " + sDic["LAST_NM"],
        "Importance"    : sDic["Priority"],
        "Even_Or_Odd"   : sDic["NUMBER"] % 2
    }
    # 書込みデータ辞書をfKeys順のリストに展開（注：この書き方だと全fKeysに対応する値がないとエラー）
    fRow = [fDic[key] for key in fKey]
    # FGDBに値挿入
    fCur.insertRow(fRow)

del fCur
del sCur
```

こんな感じで、簡単に元ベクタ地図ファイルと異なるスキーマ、異なるフォーマットを持つベクタ地図ファイルを、arcpyで簡単に作ることができます。

### ゆるぼ

FOSS4G版誰か書いて
【TechShop Tokyo】樹脂用CNCの材料 ケミカルウッドのまとめ

# TechShop TokyoのCNC
TechShop Tokyoには、ローダンドディーシー製の[MDX-540](http://www.rolanddg.co.jp/product/3d/3d/mdx-540/)が2台置かれている。1台が樹脂用、1台が金属用となっている。

![mdx540.jpg](https://qiita-image-store.s3.amazonaws.com/0/63450/54a0efb9-56c4-1022-100e-798997949d61.jpeg)

# ケミカルウッド
ケミカルウッドは、ポリウレタンを原料に、木材のような性質をもったNC加工がしやすい素材。合成木材、人工木材とも呼ばれる。樹脂用のMDX-540の材料として使用することができる。

MDX-540で、真空成形の型を切り出した例)
![IMG_0719.JPG](https://qiita-image-store.s3.amazonaws.com/0/63450/78fb9248-46b0-fa1e-ec6d-5ce0c51d96ee.jpeg)

## RAKU-TOOL

RAKU-TOOLは、ドイツに本社がある[RAMPF](http://www.rampf-group.jp/jp/products-solutions/)の合成木材。

## サンモジュール
サンモジュールは、[三洋化学](http://www.sanyo-chemical.co.jp/products/pickup/pickup1/top.html)の合成木材。

## サイコウッド
サイコウッドは、[JX日鉱日石トレーディング](http://www.notc.co.jp/)の合成木材。

# ケミカルウッドへのレーザー彫刻の例

[ケミカルウッド（合成木材）にレーザー彫刻](http://www.laserworks.jp/blog/blog-engraving/post-70.html)(LaserWorks)

# ケミカルウッドの購入
[DIY支援Web](http://shop.yoshikawa-kigata.co.jp/index.php?%E3%82%B1%E3%83%9F%E3%82%AB%E3%83%AB%E3%82%A6%E3%83%83%E3%83%89%E5%90%84%E7%A8%AE)
WebStorm で Sails プロジェクトを作成する方法

![Screen Shot 2016-06-25 at 01.22.48.png](https://qiita-image-store.s3.amazonaws.com/0/67627/efa61466-4433-b403-c2b9-bcf3f90514ad.png)

JetBrains 社製品に依存しまくってるので、最近はじめた Sails の開発も WebStorm でやりたい。でも Sails プロジェクトを作成するウィザードは用意されていない。とういうことで WebStorm の Empty Project から Sails プロジェクトを作成する方法をメモっとく。

# 前提条件 #

本稿は下記のパッケージとバージョンを前提にする。なお Node.js のバージョンは nodenv で管理している。

* Node.js 4.4.5
* npm 2.15.5
* Sails 0.12.3

# WebStorm で Empty Project を作成する #

WebStorm を起動して Create New Project をクリックする。

![Screen Shot 2016-06-25 at 01.02.38.png](https://qiita-image-store.s3.amazonaws.com/0/67627/84ddef94-f7e6-761a-c762-199ac35eeb04.png)

Empty Project を選択し、プロジェクトのディレクトリを指定して、Create をクリックする。ここで指定するディレクトリ名が Sails プロジェクト名になる。Sails プロジェクトは JavaScript らしく lowerCamelCase で名前をつけるみたい。

![Screen Shot 2016-06-25 at 01.03.04.png](https://qiita-image-store.s3.amazonaws.com/0/67627/99183cf5-41ab-82dd-4303-08df0229490c.png)

# Sails プロジェクトを作成する #

プロジェクトが作成されたら、プロジェクトがインデックスされるのを待って、Terminal ウィンドウを開こう。

![Screen Shot 2016-06-25 at 01.03.58.png](https://qiita-image-store.s3.amazonaws.com/0/67627/5d15b22b-67c6-8d43-505d-47e90f7f672c.png)

Sails プロジェクトは空のディレクトリにしか作成できない。しかし現在のプロジェクトディレクトリには .idea ディレクトリがある。ということで下記の手順で Sails プロジェクトを作成する。

1. .idea ディレクトリを退避する
2. Sails プロジェクトを作成する
3. .idea ディレクトリを元に戻す

コマンドだと下記のとおり。

```shell-session
$ mv .idea ..
$ sails new .
$ mv ../.idea .
```

![Screen Shot 2016-06-25 at 01.06.20.png](https://qiita-image-store.s3.amazonaws.com/0/67627/4103e604-3c25-484b-fec2-3728c4c5dbeb.png)

これで Sails プロジェクトが作成された。プロジェクトがインデックスされるのを待てば、WebStorm でソースコードを縦横無尽に飛び回れる。

# Run/Debug Configurations を設定する #

`sails lift` も WebStorm から行いたいので、Run/Debug Configurations を設定しよう。まずはメニューバーの Run にある Edit Configurations... をクリックする。

![Screen Shot 2016-06-25 at 01.13.50.png](https://qiita-image-store.s3.amazonaws.com/0/67627/9ee1e607-cede-50a8-6596-4c15614c9e85.png)

Run/Debug Configrations ウィンドウのツールバーの + ボタンをクリックする。

![Screen Shot 2016-06-25 at 01.14.39.png](https://qiita-image-store.s3.amazonaws.com/0/67627/d5c183fc-ccf1-a339-4871-85ed5eb824a4.png)

Add New Configuration メニューにある Node.js をクリックする。

![Screen Shot 2016-06-25 at 01.14.45.png](https://qiita-image-store.s3.amazonaws.com/0/67627/37c31121-95f4-65a0-d582-920f980fe31d.png)

Name を指定し Configurations タブの内容を下記のように設定する。ここで Name は RubyMine での Rails プロジェクトを真似して Development: &lt;projectName> にしている。

* Node interpreter: ~/.nodenv/versions/4.4.5/bin/node
* JavaScript file: node_modules/sails/bin/sails.js
* Application parameters: lift

![Screen Shot 2016-06-25 at 12.49.45.png](https://qiita-image-store.s3.amazonaws.com/0/67627/b187956f-463f-8bb1-a174-ac8b2f0abe3c.png)

ツールバーやメニューバーから Development: &lt;projectName> を実行すると `sails lift` が実行される。また Development: &lt;projectName> をデバッグするときちんとデバッガーが動作する。

---

それでは WebStorm でよい Sails ライフを！

# 参考文献 #

https://www.lookami.com/how-to-set-up-sails-js-on-webstorm/
【HTML5+CSS】Checkboxを美しいボタンにする方法 【js不使用】

#チェックボックスってデザインがあまり良くない！
###現状
<label><input type="checkbox">項目１</label>

###こんな感じにしたい！
![1466828487196.jpg](https://qiita-image-store.s3.amazonaws.com/0/69647/767b33c3-fdd0-1621-8231-67b7fde28c13.jpeg)


#これで出来る！
##CSSをこうして
```css 
label{
  cursor: pointer;
  padding:5px;
  border: 1px solid #434343;
  border-radius: 5px;
}
input{
  display: none;
}
.check_box:checked + .label {
  background-color: orange;
}
```
CSSざっくり解説
`.check_box:checked + .label {}`
この部分でチェックボックスがチェックされた時のlabelのデザインを指定している。
##HTMLをこう！
```html
<input type="checkbox" class="check_box" id="hoge1" />
<label class="label" for="hoge1">HOGE！だよ！</label>
```

注意：ちゃんとinputタグのidとlabelのforをあわせましょう！

２つ以上チェックボックスを作るならこう！

```html
<input type="checkbox" class="check_box" id="hoge1" />
<label class="label" for="hoge1">HOGE！だよ！</label>
<input type="checkbox" class="check_box" id="hoge2" />
<label class="label" for="hoge2">HOGE２だよ！</label>
<input type="checkbox" class="check_box" id="hoge3" />
<label class="label" for="hoge3">HOGE３だよ！</label>
```

#チェックボックスを綺麗にデザイン
簡単にざっくりと解説しているサイトが無かったので書きました。
誰かの参考になればと思います
[小ネタ]電源プラン [省電力] と [高パフォーマンス] を一発で切り替える

#ノートＰＣでカンファレンスに行くと

ああ！もう電池が切れる！！
省電力プランに切り替えないと…えーとタスクバーの通知エリアの電源アイコンを右クリックして電源オプションを開いて省電力、っと、あとはスライダーで輝度を調整してっと…
…って長いわ！！！！

一発で切り替わったらいいのになあ…

#作りました

##省電力・高パフォーマンス切り替え
まずは省電力に変更するバッチファイル

```bat:PowerMin.bat
powercfg.exe -setactive SCHEME_MAX
```

次に、高パフォーマンスに変更するバッチファイル

```bat:PowerMax.bat
powercfg.exe -setactive SCHEME_MIN
```

注意して欲しいのは、省電力は [SCHEME_MAX] で、高パフォーマンスが [SCHEME_MIN] なところ。
心情的には逆な感じしますが、

- 最大限電力を消費しない＝省電力
- 最小限の省電力しかしない＝高パフォーマンス

ということです。

##輝度変更

輝度変更は少々めんどくさいです。
輝度を変更する電力プランの GUID を取得しなければいけません。
GUID を調べるのは 

```bat
powercfg list
```

と打ちます。
すると、こんな風にリストが表示されるので目的の GUID をコピーしておきます。

```text
C:\Windows\system32>powercfg list

既存の電源設定 (* アクティブ)
-----------------------------------
電源設定の GUID: 11111111-2222-3333-4444-555555555555  (バランス)
電源設定の GUID: 66666666-7777-8888-9999-aaaaaaaaaaaa  (高パフォーマンス)
電源設定の GUID: bbbbbbbb-cccc-dddd-eeee-ffffffffffff  (省電力) *
電源設定の GUID: 00000000-1111-2222-3333-444444444444  (ECO)
```
※GUID は架空のもの

この GUID を使って次のようなバッチファイルを作ります。

```bat:Brightness.bat
@echo off

rem ↓ここを設定
set GUID=bbbbbbbb-cccc-dddd-eeee-ffffffffffff

set POWER=7516b95f-f776-4464-8c53-06167f40cc99
set BRIGHT=aded5e82-b909-4619-9949-f5d71dac0bcb

powercfg -setdcvalueindex %GUID% %POWER% %BRIGHT% %1
powercfg -setactive %GUID%
```

これに引数で 1～100 を指定します。
たとえば、次の例では輝度が半分になります。

```text
C:\Windows\system32>Brightness 50
```

で、これらをランチャに設定したりタスクバーにピン止めしておくと超便利になるわけです。

![bar.png](https://qiita-image-store.s3.amazonaws.com/0/12977/ade8556d-cdae-bcf6-350c-dc3335f6babf.png)

##ていうか

新しい電源プランを作って、

- 電源ケーブル切断時：省電力プランと同じ設定
- 電源ケーブル接続時：高パフォーマンスプランと同じ設定

にすればいいんですけどね…


#まとめ
Bash が来ようという時代に、バッチファイルの記事を書いた（２回目）。
[小ネタ]パスを取得するバッチファイル

#開発者はパスを欲しがる
例えば

* ライブラリのパスを設定するとき
* コンパイラの検索パスを設定するとき
* SDK のパスを設定するとき

などなど

こんな時、エクスプローラからパスをコピーして、ファイル名をコピーして、とかやりますよね。
正直、**メンドイ**

右クリック SendTo に、パスをクリップボードに入れてくれるアプリがあればいいのに！

#作りました
そもそもは Delphi で作って長年使ってました。
でも、よくよく考えたらバッチファイルでできんじゃね！？
となって、バッチファイルで作ってみました。

```bat:path2clip.bat
if /i "%~x1"==".lnk" (for /f "delims=" %%f in ('type "%~f1" ^| find "\" ^| find "."') do set /p<NUL="%%f" | clip) else set /p<NUL="%~f1" | clip
```

なんか複雑に見えるけど、複雑なのはショートカットの実体を取り出すところで、そんな事しなくて良いのなら、もっと単純になります。

```bat:path2clip.bat
 set /p<NUL="%~f0" | clip
```

上記のどちらかのバッチファイルを SendTo に作ります。

![send.png](https://qiita-image-store.s3.amazonaws.com/0/12977/a05672f0-2fcc-9aa6-aad4-5515da40fed5.png)


（SendTo はデフォルトであれば C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\SendTo\ ）

すると

![send2.png](https://qiita-image-store.s3.amazonaws.com/0/12977/d0b0a37b-009e-585f-ff9e-d4f645e99237.png)

こんな感じで登録されて、クリックするとクリップボードにパスがコピーされる仕組みです。

なお、バッチファイルは別の場所に保存しておいて、ショートカットを SendTo に入れればアイコンや名前を変更できます。

![a.png](https://qiita-image-store.s3.amazonaws.com/0/12977/148183a6-fe68-5c8f-bf3e-6e2e6dd61625.png)

うーん、便利。

#解説
##clip
clip コマンドが全ての肝です。
clip コマンドはパイプかリダイレクトで受け取ったデータをクリップボードにコピーしてくれます。

##ショートカットの実体探し
for /f %%var in (CMD) do コマンドを使うと、CMD の実行結果を %%var に入れてくれるという、どう考えても**クレイジー**な仕様があり、それを使ってます。
また、.lnk ファイルの実体をちゃんと探すためには WSH を使う必要があったので、[ここに載ってたズルイ方法（type で中身を出力して取得）](http://www.computerhope.com/forum/index.php/topic,80659.msg531843.html#msg531843)でやってます。

##改行無し出力
当初

```bat
echo "%~f1" | clip
```

としていました。

が！
コレだと**改行コードが含まれてしまう**のでした（パイプの前にある空白も）。

そこでググったところ[ set /p による技を発見](http://ptech.g.hatena.ne.jp/noromanba/20120717/1342635168)

それを参考に、echo から set に置き換えました。
具体的な仕組みはリンク先のブログをご覧下さい！

#おまけ

```bat:OpenPath.bat
if /i "%~x1"==".lnk" (for /f "delims=" %%f in ('type "%~f1" ^| find "\" ^| find "."') do explorer "%%~dpf") else explorer "%%~dp1"
```

これを SendTo に登録しておくと、ショートカットのフォルダを開いてくれます！これまた便利！

#まとめ
Bash が来ようという時代に、バッチファイルの記事を書いた。

#追記
キーボードに手を伸ばすのが面倒でなければ、Shift + 右クリックで「パスのコピー」ができるとのご指摘！
そういえばあったけど、Windows95 の時代から SendTo に登録してたので忘れてた…。
ご指摘ありがとうございます。