OmniAICreator/Qiita-1.07M huggingface dataset:
PHPのDataTimeを使って月初と月終を出すだけ

strtotimeを使ったやつばっかり見つかる。
多分ちょっと考えればいいけどすぐ忘れちゃうのでメモ代わり。
注意：時間は現在の時間がとれてしまうので、必要だったら指定してあげてください。

##1.今月の月初、月終とか出すとき

```php:date.php
<?php
    //月初め
    $startDate = new DateTime('first day of this month');
    //月終わり
	$endDate  = new DateTime('last day of this month');
	//出力
	echo $startDate->format('Y-m-d');
	echo $endDate->format('Y-m-d');
?>
```
来月出すなら「this month」を「next month」を変えるとかでいけます。
先月出すなら「this month」を「last month」を変えるとかでいけます。

相対的にとるやつすごくわかりやすいのでつかっていきたい。

##2.先月の月初、月終とか出すとき(失敗)
やってはいけないやつ。

```php:date.php
<?php
    //月初め
    $startDate = new DateTime('first day of -1 month');
    //月終わり
    $endDate  = new DateTime('last day of -1 month');
    //出力
    echo $startDate->format('Y-m-d');
    echo $endDate->format('Y-m-d');
?>
```

一見うまくいくのですが、5月31日とかに動かしたりすると5月の末日をとって4月32日になることもある。
ーーーーそして5月1日へ…

##3.指定の月の月初め、月終とか出すとき

```php:date.php
<?php
    //指定の年月
    $Month = '2016-02';
    //月初め
    $startDate = new DateTime('first day of ' . $Month);
    //月終わり
    $endDate  = new DateTime('last day of ' . $Month);
    //出力
    echo $startDate->format('Y-m-d');
    echo $endDate->format('Y-m-d');
?>
```

YYYYMM形式でうまくいかないかなーって思ったけどうまくいかないので気をつけてあげてください。
と言ったが嘘だった。自分の頭悪いだけだった。申し訳ない。

##4.好きなフォーマットで指定の月の月初め、月終とか出すとき

```php:date.php
<?php
    //指定の年月
    $Month = '201602';
    // 好きなフォーマット
    $format = 'Ymd';
    // 集計テーブルに入れる年月　何も指定しないと現在の年月日時が入ってしまい31日とかに動かすと31日がない月を指定した時に死んでしまいます。（次の月になってしまいます）
    $month = DateTime::createFromFormat($format, $Month . '01');
    //月初め
    $startDate = new DateTime('first day of ' . $month->format('Y-m'));
    //月終わり
    $endDate  = new DateTime('last day of ' . $month->format('Y-m'));
    //出力
    echo $startDate->format('Y-m-d');
    echo $endDate->format('Y-m-d');
?>
```

好きなフォーマットで集計できる！！！！！！！！！！しあわせ！！！！！
トラブルシューティング Wordpress PHPMailer


# トラブルシューティング Wordpress PHPMailer

Wordpressでメールを送信しようとしたら、いつの間にかこんなエラーが発生するようになりました。
*メール送信用のプラグインはWP Mail SMTPを利用しています。

```
Warning:  stream_socket_enable_crypto(): Peer certificate CN=`*.provider.ne.jp' did not match expected CN=`blog.ne.jp' in D:\blog\wp-includes\class-smtp.php on line 344

2016-02-25 09:04:36	SMTP Error: Could not connect to SMTP host.
2016-02-25 09:04:36	CLIENT -> SERVER: QUIT
2016-02-25 09:04:36	SMTP -> get_lines(): $data is ""
2016-02-25 09:04:36	SMTP -> get_lines(): $str is  ""
2016-02-25 09:04:36	SERVER -> CLIENT:
2016-02-25 09:04:36	SMTP ERROR: QUIT command failed:
2016-02-25 09:04:36	Connection: closed
2016-02-25 09:04:36	SMTP Error: Could not connect to SMTP host.
```

どうやらPHPMailerの仕様が変わりデフォルトではSSL証明書を検証してしまうようです。
よって、SMTPOptionsのデフォルト値を以下のように書き換えます。

```
$phpmailer->SMTPOptions = array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true));
```

今回はWP Mail SMTPプラグインを利用するため、wp_mail_smtp.phpの129行目から以下のようにコードを書き換えました。

```
		// If we're sending via SMTP, set the host
		if (get_option('mailer') == "smtp") {
			
			// Set the SMTPSecure value, if set to none, leave this blank
			$phpmailer->SMTPSecure = get_option('smtp_ssl') == 'none' ? '' : get_option('smtp_ssl');
			
			// Set the other options
			$phpmailer->Host = get_option('smtp_host');
			$phpmailer->Port = get_option('smtp_port');
			
			// If we're using smtp auth, set the username & password
			if (get_option('smtp_auth') == "true") {
				$phpmailer->SMTPAuth = TRUE;
				$phpmailer->Username = get_option('smtp_user');
				$phpmailer->Password = get_option('smtp_pass');
				$phpmailer->SMTPOptions = array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true));
				
			}
		}
```
Mac に Eclipse を突っ込む 2016年度版

# 環境

* Mac OS X Yosemite
* Java 1.8.0_25 ( oracleから DL して突っ込んだ )

## Eclipse Download

![スクリーンショット 2016-02-25 17.08.19.png](https://qiita-image-store.s3.amazonaws.com/0/9988/5b8063fd-3e43-789f-27c9-554d87de5ea2.png)


[Eclipse公式 ダウンロードページはこちら](https://eclipse.org/downloads/)

このページをちょっと下までスクロールさせるとダウンロードするEclipseのOSを選択することのできるページへ遷移します


![スクリーンショット 2016-02-25 17.32.07.png](https://qiita-image-store.s3.amazonaws.com/0/9988/f9af9cbc-73cd-3104-d760-a3cd63b46cf7.png)


遷移先はこんな感じのページ。

![スクリーンショット 2016-02-25 17.33.56.png](https://qiita-image-store.s3.amazonaws.com/0/9988/9d3af111-b500-4fac-7c4c-43370ffaabb7.png)


このページでも下までちょっとスクロールすると、`Mac OS X (Cocoa) 64-bit` が実際にダウンロード出来るページへのリンクが（画像下部）


![スクリーンショット 2016-02-25 18.17.38.png](https://qiita-image-store.s3.amazonaws.com/0/9988/d533ec9e-93f4-b22b-cd03-f1a2cbc665bc.png)


これでやっとゴール。

![スクリーンショット 2016-02-25 18.19.40.png](https://qiita-image-store.s3.amazonaws.com/0/9988/300fddcb-75bf-f9a8-0811-f999cb40d757.png)


オレンジ色の DOWNLOAD ボタンをクリックして Eclipse をゲットしちゃいましょう。


## インストール

落とした `eclipse-java-mars-1-macosx-cocoa-x86_64.tar.gz` をダブルクリックで解凍すると `Eclipse.app` 的なものがペロって生まれます。

![スクリーンショット 2016-02-25 18.21.19.png](https://qiita-image-store.s3.amazonaws.com/0/9988/d953caf2-d4f9-5feb-dac5-675205e27877.png)


このコを Application ディレクトリに移動して、Eclipse ゲットは完了です。
[ruby] Macでrbenv使おうとして所望のrubyのバージョンがrbenv install -lで出てこないとき

railsアプリを起動しようとしたらエラーが

```
rbenv: version `2.3.0' is not installed
rbenv: version `2.3.0' is not installed
```

ruby2.3.0が無いと怒られる

```
rbenv install -l
```

で確認するも
2.3.0-dev
しかない

こちらを参考にしたところ
https://github.com/rbenv/ruby-build/issues/861

brewとruby-buildをアップデートすると出るそう。

```
brew update && brew upgrade ruby-build
```

再度
```
rbenv install -l
```
すると、今度は2.3.0がちゃんと出てきた。
Bodyに<link rel=stylesheet>を入れてCSSをロードする未来

https://jakearchibald.com/2016/link-in-body/ の「The future of loading CSS」についての簡単なメモ（抄訳ではない）。詳細はリンクを参照していただきたい。おすすめです。

CSSは普通headで最初の方に読み込ませるんだけど、[Critical Rendering Path を最適化する](https://developers.google.com/web/fundamentals/performance/critical-rendering-path/)ことを考えると、最初に表示される箇所など必要最小限のCSSだけをhead内で読み込んで、あとは遅延読み込みしたりしてレンダリングをブロックさせないようにした方がいい（[そして量が少なければinline CSSにする](https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery)）。でもscriptタグのasync属性のようにCSSを非同期的に読み込む手段がないから、Javascript使ってloadイベント後などに読み込ませるみたいな手間がかかる。そのうえ、閲覧する端末によって最初に表示される領域は違うので、どんな端末でも大丈夫な範囲のCSSを選ぶ必要があって、必要なCSSが過剰になりがち。

だから、スタイルが必要なコンテンツの直前とかに```<link rel="stylesheet">```でスタイルシートを入れて、コンテンツを表示する直前にスタイルシートを読み込んでコンテンツ表示させることができたら素敵。SDPY、HTTP/2においては、細切れのリソースを配信することによるoverheadはほとんどないし、それぞれのリソースを個別にキャッシュできるし。

現状ではブラウザによって対応がまちまちで、詳しくは https://jakearchibald.com/2016/link-in-body/?imm_mid=0e0e86&cmp=em-web-na-na-newsltr_20160224#changes-to-chrome あたり。Chrome & Safari の場合、```<link rel="stylesheet">``` がHTMLの途中にあったら、すべての見つかったstylesheetがロードされるまでレンダリングをストップする。一方 IE/Edgeはparserはstylesheetが読み込まれるまでブロックされるけど、```<link rel="stylesheet">``` より上のコンテンツはブロックしない。

それでChromeは今後IE/Edgeと同じような挙動にするつもりらしい。Firefoxの挙動は微妙なところがあるけど、workaroundがある。

つまり、（数ヶ月後？）ChromeがEdgeと同じ動作になってくれば、headには最初に必要なCSSとかUtility的なものだけを読み込んでおいて、それ以外はコンテンツ/コンポーネントの直前で読み込む、それが一番最適なCSSの読み込み方という未来が見えてくる。

----
あとコメント欄をざっと読みメモ

コンポーネント単位でスタイルシートを読み込むようになったら同じCSSファイルを（1画面内で）複数回参照することがあるかもね。
-&gt; 将来的には ```<link rel="stylesheet" once>```のような仕様ができる可能性があるね。

WebComponentsで複数ファイルを画面をブロックすることなくダウンロードしてCSSをsectionごとに閉じ込めることがすでにできるんじゃないの。
-&gt; Web compomentsは個別にロードされるし、同じようなracingがあるよ（[デモ](https://jakearchibald.com/2016/link-in-body/#youre-restricted-to-two-phases-of-loading)）

linkタグをon demandで読み込んで、コンテンツがブロックされるとスクロールにjankが発生するんじゃ
（コメント長すぎて読み切れないけど、他の方法（web components）でもjankは発生する的な）

componentごとにCSSをロードすることによる複雑性（管理の面倒さとか？）と引き換えにして得られるスピードはどれほどのものか。e-commerce siteの場合ユーザーフローは予測可能だから、CSSのpre-fetchingの方が実用的。

古いIE
-&gt; 古いIEもサポートしてると思う

----

コンポーネントごとにCSSを読み込ませるというやり方は、あまり使われない用途のCSSがどれだけあるかによってくるとは思いますが、大きなアプリケーションではわりと大量にありそうな気がする。あとは管理的な面とかでしょうか。

ちなみにこの話は http://radar.oreilly.com/web-platform のNewsLetterメール経由で知った（このNewsLetterはけっこう有用な情報が届くのでわりとおすすめ）。TwitterでFollowしててもわりと見逃すよね。
リクエストパラメーター/クライアント/サーバー

#リクエストパラメーター
<font color="##ff0000">▪️リクエストパラメーターの取得</font>
**request.setCharacterEncoding("送信元HTMLの文字コード");**
**String xxx = request.getParameter("リクエストパラメーターの名前");**
※指定した名前のリクエストパラメーターがない場合は「null」が返される。
※リクエストパラメーターは大文字と小文字を区別する。

<font color="##ff0000">▪️getParameter(java.lang.String name)</font>
リクエストパラメータの値を String 型のオブジェクトで返しますが、パラメータが存在しない場合は null を返します。 リクエストパラメータというのはリクエストに付けて送られてくる追加情報です。 HTTP Servlet ではパラメータはクエリー文字列か POST された FORM のデータに含まれています。
このメソッドはパラメータに確実に一つの値だけがある場合に限って使用するべきです。 パラメータに複数の値があるかもしれない場合には getParameterValues(java.lang.String) メソッドを使ってください。

#クライアント/サーバー
ITの分野では、他のコンピュータやソフトウェアから機能や情報の提供を受けるコンピュータやソフトウェアのことをクライアントという。提供する側のコンピュータやソフトウェアを「サーバ」（server）と呼び、サーバとクライアントで構成されるシステムを「クライアントサーバシステム」（CSS：Client Server System）という。

[参考になるサイト](http://e-words.jp/w/クライアント.html)
[getParameter()API](https://mergedoc.osdn.jp/tomcat-servletapi-5-ja/javax/servlet/ServletRequest.html#getParameter(java.lang.String))
コンパニオンオブジェクトって何のためにいるの？ for Rubyist


初めてRubyからscalaに来たとき、「なんで特異クラスっぽい? シングルトンパターンっぽい？やつがいっぱいいるの？」と悩みました。なぜならrubyのクラス変数やシングルトンパターンはアンチパターン扱いされるほど嫌われていたからです。

しかし、 ***scalaのコンパニオンオブジェクトとrubyの特異クラスは見かけ上似ていますが、意味が違います。***

この記事ではRubyエンジニア目線で、Scalaのコンパニオンオブジェクトについて解説していきたいと思います。


## コンパニオンオブジェクトとは？

> 「コンパニオンオブジェクト」とは、あるクラスに対して同じスコープ、同じ名前で定義されたシングルトンオブジェクトです。

```scala
class Person
object Person
```

これがコンパニオンオブジェクトです。
が、シングルトンオブジェクトに対して漠然とした不安を感じます。。

## コンパニオンオブジェクトはrubyのintializeみたいなもん

しかし、その不安はすぐに安心に変わります。
なぜなら、scalaのコンパニオンオブジェクトは、Rubyのinitializeみたいなものであり、大抵のクラスにおいて必要な機能だからです。

例えばRubyだとインスタンスを生成する際にこう書きます。

```ruby
class Person
  def initialize(name)
    @id = 1000
    @name = name
  end
end


Person.new("マイケル")

```
  
しかし、scala(静的型付き言語)でRubyのノリで書こうとすると...


```scala
class Person(id: Int, val name: String)

object Main extends App {
  new Person("マイケル")
}
//-> コンパイルエラー
```

型の制約があるので、コンパイルエラーが出てしまいます。
rubyはinitializeだけで、外側からメンバーの値を与えてあげなくても、メンバを持たせることができます。
しかし、静的型付き言語ではクラスに型を定義する必要があるので(Rubyと違うところ)、 ***型を定義されたクラスと、クラスを生成するものが必要となります。それがコンパニオンオブジェクトです。***


scalaではこう書きます。


```scala

class Person(id: Int, name: String)

object Person {
  def apply(name: String):Person = {
    val id = 1000
    new Person(id, name)
  }
}


object Main extends App {
  
  // Person.apply("マイケル")
  // apply関数は省略できる
  Person("マイケル")
}
```

この段階で、コンパニオンオブジェクトの必要性がわかりました。
しかし、このままだとプログラム上まだ問題があります。
それは、複数の方法でインスタンスを生成できてしまうことです。

```scala

object Main extends App {
  val person1 = Person("マイケル")
  val person2 = new Person(2000, "ボブ")
}

```

そこで、Personクラスの引数(コンストラクタ引数)をprivateにして、person2の記法を封印したいと思います。


```scala

// コンストラクタ引数をprivateにした
class Person private (id: Int, name: String)

object Person {
  def apply(name: String):Person = {
    val id = 1000
    new Person(id, name)
  }
}


object Main extends App {  
  val person1 = Person("マイケル")
  val person2 = new Person(2000, "ボブ")
}

// -> person2を生成しようとするとコンパイルエラー
```


Memberクラスのidとnameはprivateなので外からアクセスすることができません。
しかし、 ***コンパニオンオブジェクトのコンテキストではコンパニオンクラスのprivateにアクセスすることができます。***

これがコンパニオンオブジェクトの特徴です。


## classとコンパニオンオブジェクトに定義するべきものはなに？？

簡単に言うと、Rubyでクラスに対して定義していたものは、コンパニオンオブジェクト、Rubyでインスタンスに対して定義していたものはクラスに定義します。

つまり、



```ruby

class Person 
  DEFAULT_ID = 1000
  
  class << self
    def find_by_name(name)
      # do something
    end
  end
  
  def initialize(name)
    @id = DEFAULT_ID
    @name = name
  end
  
  def name_with_sama
    self.name + '様'
  end
end
```


をscalaで書くと...

```scala

class Person(id: Int, name: String){
  val name_with_sama:String = name + "様"
}

object Person {
  val default_id = 1000

  def apply(name):Person = {
    new Person(default_id, name)
  }
  
  def findByName(name):Person = {
    // do something
  }
}

```


## まとめ

- 外から渡したくないメンバをもったクラスを作るときに、コンパニオンオブジェクトを使う。
- コンパニオンオブジェクトのコンテキストではコンパニオンクラスのprivateにアクセスすることができる。
- クラスに対して定義するものはコンパニオンオブジェクト、インスタンスに対して定義するものはクラス。
JavaScriptの非同期処理まとめ::Promise編

# 概要
- 非同期処理に少しつまづいたので、調べたことをまとめてみました。

## 非同期処理
- 同期処理とはソースコードが書かれている順番に実行し、現在の処理が終わるまで次の処理は待機状態にある
- 対して、処理が書かれた順番には依存せず、異なるタイムライン上で実行することを非同期処理という
- サーバとの通信など時間のかかる処理を行う場合にはよく使われる

今回はEcmaScript6で標準化された[Promise](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)を使って非同期処理とはどのような処理か、どう実装すれば良いか紹介します。

# [Promise](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)

```js
new Promise(function(resolve, reject) { ... });
```
- EcmaScript6で実装された非同期処理のためのオブジェクト
- もともとはjqueryやasync.jsなどの方が先で、後から標準化されたらしい

## 仕様
- 初期化時の引数
    - `resolve`: 必須, 成功時に実行する関数
    - `reject`: 省略可能, 失敗時に実行する関数
- 以下の状態を返す
    - `pending`: 未解決（初期値）
    - `fulfilled`: 無事完了
    - `rejected`: 棄却
- 処理の結果によって状態が変わる
   - `resolve`を実行すると`fulfilled`になる
   - `reject`を実行すると`rejected`になる
- 処理が終わったらthenが呼ばれる

```js
promise.then(function() { ... })
```

## 例1: 仕様と処理の実行順序を理解する

```js
var func = new Promise(
  function(resolve, reject) {
    setTimeout(
      function() {
        resolve({"message": "success"});
      }, 3000
    );
  });

console.log("1");
func.then(function(data) {
  console.log(data.message);
}, function(error) {
  console.log(error.message);
});
console.log("2");
```

- Promiseによって実行された処理はグローバルの処理とは並行して実行される
- `console.log`の出力は以下のようになる(`doAsyncProcess`の処理時間によって前後する)

```
"1"
"2"
"success/error"
```

### Promiseオブジェクトの連鎖
- `then`, `catch`メソッドはPromiseを返却するため、メソッドチェーンを作ることができる

```js
doSomething1()
  .then(doSomething2) // doSomething1の結果を受けて実行される
  .then(doSomething3)
  .then(doSomething4);
```

### 複数の非同期処理をまとめて管理
- 複数の非同期処理を並行して実行し、全ての処理が完了したことを前提とした処理を行いたい場合は以下のように`Promise.all`メソッドを用いて実装する

```js
var promises = [
  doSomething1(),
  doSomething2(),
  doSomething3(),
  doSomething4()
];

Promise.all(promises)
  .then(function(results) {
    console.log(results[0]); // doSomething1のresolveに渡された値
    console.log(results[1]); // doSomething2のresolveに渡された値
    console.log(results[2]); // doSomething3のresolveに渡された値
    console.log(results[3]); // doSomething4のresolveに渡された値
  }, function(error) {
    console.log(error); // 最初にrejectに渡された値
  });
```

Promiseの使い方は大体こんな感じです。[jQuery's Deferred](https://api.jquery.com/category/deferred-object/)や[$q](https://github.com/kriskowal/q)はざっと見た感じPromiseと大差ない気がしました。
次回はNode.jsのモジュールとして公開されている[async.js](https://github.com/caolan/async)について触れようと思います。こちらは値の返し方や処理の実行フローについても細かく使い分けられるようで面白いですね。

以上です。

# 非同期処理を実装できるライブラリ・モジュール
- [Promise](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)
- [async.js](https://github.com/caolan/async)
- [jQuery's Deferred](https://api.jquery.com/category/deferred-object/)
- [q](https://github.com/kriskowal/q)
MySQLのバージョンが古くてハマったのでメモ。

ちなみにMySQLのバージョンは5.1.73

# どんな現象にハマったのか
~~トランザクション内でinsertしたレコードは、ありえない条件でselect出来ちゃうケースがある。~~
insertした直後に「auto_incrementカラム is null」という条件で一度だけselect出来てしまう

。。。。

すみません。うまく説明出来ないので実際の現象を紹介します。

たとえばこんなテーブルがあるとします。

```mysql
mysql> desc users;
+-----------------+---------------------+------+-----+---------+----------------+
| Field           | Type                | Null | Key | Default | Extra          |
+-----------------+---------------------+------+-----+---------+----------------+
| id              | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| name            | varchar(255)        | NO   |     | NULL    |                |
| created         | datetime            | NO   |     | NULL    |                |
+-----------------+---------------------+------+-----+---------+----------------+
```

プライマリキーだしauto_incrementだしNullも許可されていないので、以下のようなselect文を実行しても何も取れません。取れるわけないっす。

```mysql
mysql> select * from users where id is null;
Empty set (0.00 sec)
```

しかしトランザクション内でinsertした直後だとどうでしょう。
（すみません。トランザクション内じゃなくても発生しました。）

```mysql
mysql> begin; #トランザクション開始（しなくても発生しました）

mysql> insert into users (`name`, `created`) values ('Kei Sasakure', now()); #レコード追加

mysql> select * from users where id is null;
+--------+--------------+---------------------+
| id     | name         | created             |
+--------+--------------+------+-----+--------+
| 3390   | Kei Sasakure | 2016-02-25 16:18:03 |
+--------+--------------+------+-----+--------+
1 row in set (0.00 sec)

mysql> select * from users where id is null; #2度目は取れない
Empty set (0.00 sec)
```

むむむ！ これはキモい！ いくら commit していないとはいえ id あるのに、、

# なぜ一度だけ取得出来てしまうのか
僕には理解が及びませんでした。
（コメント頂いた情報によると、どうやら仕様でした）

# 気付いた背景
Model系クラスのユニットテストで、トランザクション使って実行中だけテストデータ作るみたいな事すると思うんですけど
その中で「引数(id)がnullならデータ返さない事」という期待値のテストケースを書いたら、何故か取得出来ちゃうもんで気付きました。

# 解決方法
MySQLのバージョンをとりあえず5.5系に上げたら発生しなくなったっす。
@ngyuki さんのコメントを参照してください。バージョン上げる必要ありませんでした。
Macでスクリーンショットを撮る方法と保存先＆形式を変える方法

Macでスクショ撮るショートカットキーと、通常デスクトップにpng形式で保存されるものを後から変更する手順を探したので、両方をまとめてシェア。

# Mac OS X でのスクリーンショット取得するためのショートカットキー

**画面全体：** Command + Shift + 3

**マウス選択の範囲：** Command + Shit + 4
マウスカーソルの形状が変わるのでキャプチャしたい範囲をドラッグで決めます。
ESCでキャンセル。

**選択したウィンドウ：** Commadn + Shift + 4 + スペース ==> 対象ウィンドウをクリック
マウスカーソルがある場所のウインドウのみをキャプチャできます。
スペースキーを押すとキャプチャ対象のウィンドウがグレーアウトされ、アイコンがカメラマークに変わるのでそこで左クリックするとキャプチャされます。

## (2017.02.24追記）保存せずクリップボードコピーもできます！
こっちのが便利かも！ドキュメント貼り付け作業が捗る

**画面全体：** Command + Shift + Control + 3
**マウス選択の範囲：** Command + Shit + Control + 4
**選択したウィンドウ：** Commadn + Shift + Control + 4 + スペース ==> 対象ウィンドウをクリック

要は上記にControlキーを足せばいいだけ。

# 保存形式の変更

通常png形式で保存されているファイル形式を変更できます。変更はコマンドラインから実行し
サービス再起動させます

```
↓この中から変更したいファイル形式を選択して実行
$ defaults write com.apple.screencapture type bmp　←　BMP
$ defaults write com.apple.screencapture type gif　←　GIF　
$ defaults write com.apple.screencapture type jpg　←　JPEG
$ defaults write com.apple.screencapture type pdf　←　PDF
$ defaults write com.apple.screencapture type png　←　PNG(※デフォルト)
$ defaults write com.apple.screencapture type tiff　←　TIFF
↓サービス再起動すると設定が反映されます
$ killall SystemUIServer
```

# 保存場所の変更

デフォルトではデスクトップに保存されますが、任意のディレクトリに移動できます。
保存形式と同様にコマンドラインから設定し、サービス再起動で反映です。

```
↓ここでは~/Pictures/に設定していますが、別のディレクトリももちろん指定できます
$ defaults write com.apple.screencapture location ~/Pictures/　
↓デフォルトに戻す場合はこちら。設定値を削除するイメージです。
$ defaults delete com.apple.screencapture location
↓サービス再起動すると設定が反映されます
$ killall SystemUIServer
```

# 参考にしたサイト

↓Mac-スクリーンショット | 初心者のためのOffice講座
http://hamachan.info/mac/kihon/screen.html
↓Macのスクリーンショットで撮影した画像のファイル形式を変更する方法 - PC設定のカルマ
http://pc-karuma.net/mac-screenshot-file-type-change/
↓Mac - スクリーンショットで撮影した画像の保存場所を変更 - PC設定のカルマ
http://pc-karuma.net/mac-customize-screencapture-location/
記事のクリップをcookieで操作

ものすごく泥臭いですが、素のPHPだけでつくったもの。
jsとかjQuery がうまいこと動かなかったのでやっつけで処理しました。

なんか色々無駄なことをしている自覚はあるけど、どこをどうしたらスマートになるのかわかりません…。
ほんとは2~3行で終わる処理のような気がしますorz
とりあえず動くことを優先させたので、headerの戻り先さえ変えればcookie使える環境ならどこでも動く…はず。

## 仕様
- 上限は10
- 上限を超えると古いものから消えていく
- 有効期限は最後の操作から30日後
- 解除すると空いた部分は繰り上がる
- GETで登録/解除の切り替え


```php:clip.php
$ST  = filter_input(INPUT_GET, "st");  //登録or解除
$pid = filter_input(INPUT_GET, "pid"); //記事ID

if ($ST == 1) {

    # cookieに書き込み
    if (!is_array($_COOKIE['clip'])) {
        setcookie("clip[0]", $pid, time()+60*60*24*30);
    } else {
        $cnt = count($_COOKIE['clip']);
        if (!in_array($pid, $_COOKIE['clip'])) {
            if ($cnt >= 10) {//上限はここで調整
                $arr = $_COOKIE['clip'];
                unset($_COOKIE['clip']);
                array_shift($arr);
                $arr[] = $pid;
                foreach ($arr as $key => $value) {
                    setcookie("clip[$key]", $value, time()+60*60*24*30);
                }
            } else {
                setcookie("clip[$cnt]", $pid, time()+60*60*24*30);
            }
        }
    }
    header("Location: ./detail.php?pid=".$pid);
    
} elseif ($ST == 9) {

    # 指定のcookieを削除
    $clip = array();
    $arr  = $_COOKIE['clip'];
    unset($_COOKIE['clip']);
    foreach ($arr as $key => $value) {
    setcookie("clip[$key]", '');
        if ($value == $pid) {
            unset($value);
        } else {
            $clip[] = $value;
        }
    }
    foreach ($clip as $key => $value) {
        setcookie("clip[$key]", $value, time()+60*60*24*30);
    }
    header("Location: ./detail.php?pid=".$pid);

} else {

    foreach ($_COOKIE['clip'] as $key => $value) {
        setcookie("clip[$key]", '');
    }
    header("Location: ./top.php");

}

```
ファイルの１行を１ファイルに分割するシェルスクリプト

# データを１行ずつ別のファイルに分割するシェルスクリプト

unixの[splitコマンド](http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230888/?rt=nocnt)では、任意の行数でファイルを分割できますが、1,000行のファイルを1行ごとに1,000このファイルに分割させようとしたらできません。
そこでファイルが何行であろうと、１行ごとに分割するスクリプトを作成しました。

##splitコマンドでやってみる。
testfile.datを１行毎に分割して、outで始まるファイルに出力
>split -line 1 testfile.dat out

![image](https://qiita-image-store.s3.amazonaws.com/0/114127/015c9f61-bfcc-8466-6a5e-6d718c8cf311.png)
エラーになりました！

##devide_record.shの使い方

splitコマンドの-line 1 と同じ感じで使います。
>devide_record.sh 入力ファイル　出力ファイル名

##シェルスクリプト　ソース

```sh:devide_record.sh
#!/bin/sh
#INPUTFILEを読み、１行を１ファイルにして出力するスクリプト
#コマンドライン引数1個目　読み込みファイル名
#コマンドライン引数2個目　出力ファイル名の最初の文字列
INPUTFILE=$1
OUTPUTFILE=$2
x=0
while read line;do
# x=$(($x+1))とする
x=$(($x+1))
ofn=$OUTPUTFILE"_"${x}".dat"
echo $line >${ofn}
done < $INPUTFILE
```


##確認する
入力ファイルのレコード数を確認する
>wc -l 入力ファイル

出力ファイルの数を確認する（出力ファイル名の最初の文字列をoutにした場合)

>ls out*.dat | wc -l

##参考にしたページ
[shigemk2さんのページ](http://www.shigemk2.com/entries/2014/05/23)を参考にさせていただきました<(_ _)>

##どんな時にこのスクリプトが役に立つか？
例えばアンケート調査データの自由記述設問をRMeCabで形態素解析する場合の前処理
sassについてあれこれ。part1

2016年1月20日、区切り良い年明けから出来るエンジニアになるべく研修生として勉強を始めた私。
HTMLとcssの記述ができてくるとすこぶる楽しくなり夜中もぽちぽち(タイピング遅い)。
ターミナルコマンドも習い、よく分からんがやってることはかっこいい！そしてぽちぽち。
およそ1ヶ月後・・・sass楽しい！！！みんなもやろう！！！
というわけで本題のsassについてあれこれ説明。
難しいことは置いといて、mac前提で進めます。
#sassとは？

「Syntactically Awesome Style Sheets（構文的に素晴らしいスタイルシート）」
cssメタ言語です！と言われても・・ですよね。私はそうでした。
cssの書き方は一つではなく、[sass](http://sass-lang.com/)、[less](http://less-ja.studiomohawk.com/)、[stylus](http://stylus-lang.com/)などがあります。
さらにsassの中にsass形式(.sass)、scss形式(.scss)とあり、cssと書き方が似ているscssを私は使っています。
ネスト(入れ子)で書けて、変数やmixinというとんでも機能が使えコーディングの効率やメンテナンス性が上がり、とにかく楽しくなる言語です！
>[Sassでよく使う機能まとめ](http://www.rakuin.com/notes/programming/sass/sass-function.html)

とりあえず使ってみましょう！
#インストール

インストールしないと使えないらしいので入れます。
かっこいいターミナルでコマンド打ちましょう！

1.ruby
なぜrubyを？まぁいいじゃないの・・・
Macには標準でインストールされているので、バージョンだけ確認。
`$ ruby -v`
何かエラーでなければOK!

2.sass
`$ sudo gem install sass`
gemは宝石という意味で、ruby=ルビーを使ってインストするよ！ってことらしいです。
途中パスワードを聞かれるので、お使いのmacパスを入れましょう。そして待ち・・・
終わったと思ったら本当に入っているか確認。
`$ sass -v`
でバージョンが表示されればOK!

！エラーが出た・・・
rubyのバージョンが古いとエラーが出てしまう可能性があるので、以下を参考にHomebrewいれたり何なりしてみてください。
>[すぐにできる！Rubyのインストール方法【Mac編】](http://media.tech-salon.com/ruby-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-mac/)

#どうやって使うの？

HTMLにcssを読み込めばいいのです・・・え？

```html
<link rel="stylesheet" href="css/style.css">
```
こんな風に・・・え？
拡張子はcssです。なぜか？.sassや.scssのものは読み込んでくれないからです。
書き方はscss形式にしちゃったよ・・？そうです、つまり**変換(コンパイル)**するのです！

ターミナルで作業中のファイルがあるディレクトリへ移動、
`$ sass style.scss:style.css`
と打つとstyle.scssのファイルがstyle.cssと拡張子を変えて作られます。素晴らしい！
これを上記のようにHTMLに読み込ませて使うというわけです。
でも一回一回コマンド打つの面倒くさい・・・その通り。
そこで出てくるのがコンパイラ。scssを保存すると、その都度自動でcssにコンパイルしてくれるツールがあるんです！

それを次の記事で導入から使うとこまで説明します。
閲覧ありがとうございました。
GalliumOS on Acer Chromebook C720

## ChromebookでLinux

ChromebookにLinuxを入れる方法はいろいろあります。Croutonを使って、UbuntuやXubuntuを入れることに関しては、[Qiitaでもすでにいろいろ紹介されています](http://qiita.com/search?q=crouton&sort=rel)。

しかし、Croutonでは、GalliumOSが使えないので、Chrxを使って、[GalliumOS](https://galliumos.org/)を導入します。

## GalliumOS？

[GalliumOS – A fast and lightweight Linux distro for ChromeOS devices](https://galliumos.org/)

ChromeOSなデバイス向けの早くて軽量なLinuxディストリビューション。そのまんま。対応するハードは、互換リストを参照のこと。

[Hardware Compatibility - GalliumOS Wiki](https://wiki.galliumos.org/Hardware_Compatibility)

デュアルブート可能で、技適マーク付きの機器なんて限られていて、実質的には、Acer Chromebook C720か、Dell Chromebook 11(2014/Haswell)くらい？デュアルブートで実用するなら、SSDを換装できるC720だけど、もう新品で入手するのは困難。

これからGalliumOSを試したいなら、中古のC720を漁るか、SSD換装を諦めてDell Chromebook 11を買うか、~~技適マークを諦めて個人輸入~~(ｱｶﾝ)

## インストール方法

このあたりの記事が参考になります。

+ [Installing - GalliumOS Wiki](https://wiki.galliumos.org/Installing)  
+ [Dell Chromebook11にGalliumOSを入れる - Qiita](http://qiita.com/komatatsu/items/6ec503ef62c7b0a2e012)
+ [ChromebookにGalliumOSをインストールする方法 | Chrome速報](http://chromesoku.com/galliumos-on-chromebook-c720/)

基本的な手順は上記で紹介されている通りですが、Chrxのオプションを見直すともっと捗ります。

#### ★サクっと導入してとりあえず触りたい人向け

```
curl -Os https://chrx.org/go && sh go -d galliumos -v
```

#### ★もうGalliumOSと心中してもいい人向け

```
curl -Os https://chrx.org/go && sh go -d galliumos -H ホスト名 -U ユーザ名 -Z Asia/Tokyo -L ja_JP.UTF-8
```

インストール時にホスト名やらユーザ名やらタイムゾーンや文字コードを指定しておくと、インストール後にする作業が減ります。

オプションで文字コードを指定しておけば、最初から日本語環境でもイケます（ただし、IMEは入っていないので、別途インストールが必要）。

ちなみに、ユーザ名とパスワードは同じなので、初回ログイン後、真っ先に変えましょう。

## パフォーマンス

### メモリ

ガラ空きワロタ（死語）。ちょっとメモリ食うような作業もGalliumOSはイケそうです。

##### GalliumOS

```
$ free -k
             total       used       free     shared    buffers     cached
Mem:       3987656     715216    3272440     112120      27952     307676
-/+ buffers/cache:     379588    3608068
Swap:      5981480          0    5981480
```

##### ChromeOS

```
free -k
             total       used       free     shared    buffers     cached
Mem:       3986200    1255376    2730824      65340      14992     519476
-/+ buffers/cache:     720908    3265292
Swap:      5839160          0    5839160
````

### Octane2.0

さすがに、最適化されているChromeOSのほうがややスコアが良いですが、GalliumOSも遜色ないスコアを叩きだしてくれました。

#### GalliumOS

Octane Score: 12363

#### ChromeOS

Octane Score: 13140

### バッテリーの持ち（体感）

ちゃんとした計測はしていませんが、体感で、GalliumOSのほうが、１〜２時間、バッテリーの減りが早いような気がしています。

ただ、USBメモリやSDカードにCroutonを入れるよりは、やっぱり長持ちします。

当たり前か（笑）。

### 注意事項

+ 先述の通り、C720とGalliumOSは相性がめちゃくちゃ良いのですが、いかんせん、C720が新品で入手することが事実上無理で、中古市場にもあまり流れてきません。
+ Gallium OSは、Ubuntu 15.04(Vivid Vervet)ベース。サポート期限が2016年1月で切れていることは充分にご留意いただきたく。15.10化はよ。
+ 万人にオススメする要素は皆無ですが、好きな人はとことんハマると思います。
+ なお、日本語キーボードモデルの場合、「英数」キーは無変換キーとして、「かな」キーは変換キーとして振る舞います。そのあたりの調整は、以前書いた記事をご参照ください。  
[Mozcでかなキーと英数キーが気に入らない動きをする場合のメモ - Qiita](http://qiita.com/h_kachodairi/items/adb8171b6ed9c8b2a66a)
PowerShellでファイルの一覧をMarkdownに出力

# 概要
0. 未だにOffice系のドキュメント等がいっぱいあるのでGithub等のwikiに載せちゃおう
1. リンク書くのめんどくさ
2. 一覧を生成してしまえ

## スクリプト
```ps1:FileList2Markdown.ps1
param(
    [Parameter(Mandatory=$true)]
    [string]
    $TargetPath,

    [string]
    $OutputPath
)
function Convert-Markdown {
    param(
        [Parameter(ValueFromPipeline=$true)]
        [PSObject]
        $TargetInfo,

        [int]
        $Depth=1,

        [Parameter(Mandatory=$true)]
        [string]
        $Parent
    )
    process {
        $row = "#" * ($Depth+1) + " "
        $row += $TargetInfo.Name
        Write-File $row
        if($TargetInfo.PSIsContainer) {
            Get-ChildItem $TargetInfo.FullName | Convert-Markdown -Depth ($Depth+1) -Parent (Join-Path $Parent $TargetInfo.Name)
        } else {
            Get-FileLink -FileName $TargetInfo.Name -ParentDir $Parent | Write-File
        }
    }
}
function Get-FileLink {
    param(
        [Parameter(Mandatory=$true)]
        [string]
        $FileName,

        [Parameter(Mandatory=$true)]
        [string]
        $ParentDir
    )
    $path = Join-Path $ParentDir $FileName
    "[{0}]{{{1}}}`n" -F $FileName, ($path -replace "\\" , "/")
}
function Write-File {
    param(
        [Parameter(ValueFromPipeline=$true,Mandatory=$true)]
        [string]
        $Body
    )
    Out-File $OutputPath -Encoding UTF8 -Append -InputObject $Body
}

$title = "# Documents"
if(-not (Test-Path $TargetPath)) {
    throw [System.IO.DirectoryNotFoundException] "$TargetPath not found."
}
$TargetDir = Convert-Path $TargetPath

if(-not (Get-Item $TargetDir).PSIsContainer) {
    $TargetDir = Split-Path $TargetDir -Parent
}

if( -not $OutputPath) {
    $OutputPath = (Split-Path $TargetDir -leaf) + ".md"
}

$null = New-Item $OutputPath -Type file -Force
Write-File $title
Get-ChildItem $TargetDir | Convert-Markdown -Parent (Split-Path $TargetDir -leaf)
```

### 構造(INPUT)
```
...\DOC
|   111.txt
|
\---aaa
    |   bbb.txt
    |
    \---ccc
            ddd.txt
```

### Markdown(OUTPUT)
```
# Documents
## aaa
### ccc
#### ddd.txt
[ddd.txt](Doc/aaa/ccc/ddd.txt)

### bbb.txt
[bbb.txt](Doc/aaa/bbb.txt)

## 111.txt
[111.txt](Doc/111.txt)
```

![markdown.png](https://qiita-image-store.s3.amazonaws.com/0/54591/e1a419dd-2566-0a95-c6f1-44b80157c028.png)

### 使い方
```ps1
# .\FileList2Markdown.ps1 -TargetPath {対象ディレクトリ} -OutputPath {出力先}

.\FileList2Markdown.ps1 -TargetPath .\Doc -OutputPath Documents.md
.\FileList2Markdown.ps1 .\Doc # でもOK（Doc.mdに出力される）
```

`pre-commit`フックから読んじゃうのもありかと
golangメモ一覧(自分用まとめ)FrameworkはRevel

#二項比較演算子の関数

- eq : a == b の場合**true**を返す
- ne : a != b の場合**true**を返す
- lt : a < b  の場合**true**を返す
- le : a <= b の場合**true**を返す
- gt : a > b の場合**true**を返す
- ge : a >= b の場合**true**を返す

例：revelでのテンプレートの場合

```
{{if .user.Article.Published eq true}}<b>公開記事</b>{{else}}<b>非公開記事</b>{{end}}
```

#[]の意味
スライス
可変長配列を持たない代わりに実装された型。
配列全体のポインタ(ptr)、配列の長さ(len)、配列の容量(cap)からなるデータ構造を保持している。配列の部分列を簡単に取り出せる。
Go言語では、配列よりもスライスのほうが多く使われる。
**参考サイト**
http://qiita.com/mizukmb/items/b543f88bc37c9a75673f

#Preload
```go
user := models.User{}
if err := DB.Preload("Article").Find(&user, id).Error; err != nil {
	return c.HandleInternalServerError("Record Find Failure")
}
return c.Render(user, id)
```

article id = 1の場合のSQL

```sql
SELECT  * FROM `user`  WHERE (`user`.deleted_at IS NULL OR `user`.deleted_at <= '0001-01-02') AND ((id IN ('1')))

SELECT  * FROM `article`  WHERE (`article`.deleted_at IS NULL OR `article`.deleted_at <= '0001-01-02') AND ((user_id IN ('1')))
```

勉強のための自分メモです。
今後も勉強したものを追加していきます。
間違っている箇所やもっと簡潔に書けたりするコードがありましたら教えてください。

※まだ、勉強途中なので誤情報があるかもしれません。ご了承ください。
また、誤字脱字もご了承ください！
R　大量の変数間の相関行列を求め、有意で相関の高いペアのみ抽出する

#目的
 Rの標準で入っているライブラリlibrary(stats)の関数cor.testを使い、変数間の相関行列を求めます。
Rでは、変数のデータフレームを与えて[一気に変数間の相関行列を出力させる](http://monge.tec.fukuoka-u.ac.jp/r_analysis/descriptive_statistics22.html)ことが可能です。ですが変数が膨大にある場合、相関行列が出力されてもその読みとりは困難です。そこで、相関が強いと判定されたペアのみデータとして出力するスクリプトを作りました。

##想定
「相関が強い」の閾値は、絶対値で0.4としています。
母相関係数の無相関の検定の有意水準は5％です。

##アウトプットイメージ

こんな感じになります（結果はダミーです）。
i列とj列：変数の列番号
cor: 相関係数
p_val : p値

![image](https://qiita-image-store.s3.amazonaws.com/0/114127/bc0ee9b0-539e-e066-64b9-26fe19e6b812.png)





##データ準備
1. 全ての列が量的な変数のデータ。
(factorの変数があれば、あらかじめ除去します）


2. 変数ラベルリスト
データとは別に変数ラベルリストを用意。
下記のvar_no は連番
ファイル名:labelfile.txt
![image](https://qiita-image-store.s3.amazonaws.com/0/114127/0e61b6e3-65cf-6d7f-74e6-f168063301fb.png)



##Rのサンプルコード
```r:corr_pair.R
#-----------------------------------------------------
# cor.testの結果、相関係数絶対値0.4以上のペアのみ出力する
#-----------------------------------------------------
#相関行列を計算するデータを読み込む。
df<-read.table("testdata.dat",header=T,sep="\t")

#変数ラベルを読み込む
var_list<-read.table("labelfile.txt",header=T)

#相関係数を計算する。
#以下の場合のみ、変数ペアの列番号と相関係数、p値を書き出す。
#母集団相関係数の無相関の検定（両側）を行い、「帰無仮説：相関係数は0」が有意水準5%で棄却できるかどうかをp値より判定する。
#相関係数の絶対値0.4以上

#結果を格納するmatrixを準備。
#nn 変数がn個の場合、n×n/2 が計算する最大のペア数。0.4以上しか出力しないので、そこから適当に減らした値を入れています。

nn<-3000
output<-array(0,dim=c(nn,4))
k<-0

#n 準備したデータdfの変数数
n<-ncol(df)

#n×nの組み合わせ全ては計算しない。自分自身の相関も計算しない。
#出力するのは相関係数とp値のみ
#
for(i in 1:(n-1)){
  for(j in (i+1):n){
      res<-cor.test(df[,i],df[,j])
　　　　# estimateオブジェクト　相関係数の値
     　if(abs(res$estimate) >=0.4 ){
      　　#p.valueオブジェクト　p値　0.05以下
      　　　　if(res$p.value <=0.05){
        　　　　k<-k+1
        　　　　output[k,1]<-i　
        　　　　output[k,2]<-j  
        　　　　output[k,3]<-res$estimate
        　　　　output[k,4]<-res$p.value
        　　　}　
      　}
  }
  colnames(output)<-c("i","j","cor","p_val")
}

#相関の高いペアは、結局kこ
#出力用に余計な行を消す
output.2<-output[1:k,]

#相関係数マトリクスと変数ラベルデータフレームを結合する。
#結合キーは、相関係数データでは i 、変数ラベルデータでは、var_no
#相関係数データのiに合わせ、ラベルを結合
soukan<merge(output.2,var_list,by.x="i",by.y="var_no",all.x=TRUE)
head(soukan)
#データの列順を変更　ラベルを変数連番の後に移動
soukan<-soukan[,c("i","label","j","cor","p_val")]

str(soukan)
#変数名(label)をlabel_iにリネームしておく。
colnames(soukan)<-c("i","label_i","j","cor","p_val")

#相関係数抽出データの変数jにラベルを結合する
soukan2<-merge(soukan,var_list,by.x="j",by.y="var_no",all.x=TRUE)

head(soukan2)
#列順を変更する
soukan2<-soukan2[,c("i","lalbel_i","j","label","cor","p_val")]

#列名を変更する
colnames(soukan2)<-c("i","label_i","j","label_j","cor","p_val")

#結果を出力する
#macのExcelでオープンすることを想定。
write.table(soukan2,"相関高いペア抽出.txt",sep="\t",fileEncoding = "CP932",row.names = F)

```

##実行環境

R version 3.2.2 (2015-08-14)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.3 (El Capitan)
△△の一覧データください！　と言われたときのワンライナー（リモートのMySQLでのSELECT実行結果をファイルに保存する）

# △△の一覧データください！　とは
データベースから特定の条件でデータを抽出してファイルに保存し、それを何かしらの方法で渡すことを期待されている状況。
このとき、ファイルはExcelで開ける必要がある。

# リモートのMySQLから特定の条件でデータを抽出してExcelで開ける形式のファイルに保存するワンライナー
```sql
mysql -u db_user -h db_host -p db_name -e "SELECT id, name FROM user WHERE age >= 30" | sed -e 's/\t/,/g' | iconv -f UTF8 -t SJIS > foo.csv
```

これを実行すると、パスワード入力後に
・データベースに接続し
・SQLを実行（この例だと30歳以上のユーザのidと名前の一覧を抽出）し
・整形して
・foo.csvに保存する。

## データベース接続
データベース接続時にユーザ名、ホスト名、データベース名、を指定する。また、-eオプション（execute）で続けて指定するSQL構文を実行して終了を指定できる。

## SQLを実行
-eオプションにより、ステートメントを実行して終了が指定されている。
実行結果は、カラム区切り文字としてタブを使用し、各行が新しい行に出力される。

## 整形
整形は、
1, タブ区切りをカンマ区切りとして、CSV形式に変更する
2, 文字コードをSHIFT-JISに変換する
の2つを行う。
sed -e 's/\t/,/g'
で、タブ区切りをカンマ区切りに置換する。
その結果を
iconv -f UTF8 -t SJIS
でUTF-8からSHIFT-JISに変換をかける。
これらは、保存したファイルがExcelで開けるようにするために行っている。

CSVならば渡した相手がファイルをダブルクリックすればExcelで閲覧できる&
Excelでは、テキストファイルはSHIFT-JISでないと開けないため。

## 保存
結果のテキストをリダイレクションを利用してファイルに書き込む。

# 参考にさせていただいたページ
[MySQLリモートDBの結果をローカルCSVファイルに出力する方法](http://shusatoo.net/db/mysql/mysql-remote-db-result-output-local-csvfile/)
Slackを使っていても不真面目に見えないための画面設定

# あなたサボってない？
Slack、便利ですよね。
様々な機能がストレスなく提供されているのもあり、コミュニケーションツールとしてすぐれているのは使っている人であれば納得がいくことでしょう（日本語周りが微妙なのはまあ置きましょう）。
しかし、しかしです。Slackは発言者にアイコンが表示され、カラフルな絵文字やreactionが文中にも表示することができます。画像もバンバン出てきます。運用している現場にもよりますが、これが傍目にはまじめに仕事しているように見えないことが多いですよね。
手前味噌かつ、ここまでの話と矛盾いたしますが、私は[雑談Slack](http://samezi-but.com/zdnj.html)というSlackを運営しております。そこでは、**仕事をしながら雑談するために**いくらかのルールを制定しました（リンク先にもあります）。
ルールの柱として『職場で閲覧しても問題ない画面を維持すること』があります。また、NSFW（職場閲覧不適切（Not suitable for work））という概念を持ち込みました。つまり、自制を意識しながら雑談せよ、としたわけです。
これは一見うまく動きましたが、新規参加者がそれを飲み込む前にNSFWな画像（まあ、せいぜいアニメイラストとかです）を貼り付けてしまうことがあったりもしました。そのようなこともあり、参加者全員に一貫して徹底させるのは難しいことであると知りました。
そこで、Slackの設定変更で無難な画面とすることで、NSFWな画面になることがないようにする方法をまとめてみました。真面目な画面を作るための参考となれば幸いです。
# 手順
Slackの画面の左上にあるTeam名をクリックし、Preferencesをクリックします。2ペインの設定が出るのでMessages & Mediaをクリックしてください。以下、項目の解説です。自分のメモからの転載ですので口調の非統一についてはご容赦ください。
## Message Display

### Message Theme
Compactにすること（アイコンが見えなくなり、表示がシンプルになる）。

### Display Options
変えなくても問題ない。

### Emoji Style
Noneにしておくと本文中の絵文字が出ない。ただしReactionには効果が及ばない。

### Convert Emoticons
切る。

##Inline Media & Links

### Expand images and files uploaded to slack
画像サムネイルが大きく表示されてしまうため、切る。

### Expand links to images, video and audio from external sources
リンク先のマルチメディアファイルのサムネイルが表示される。切る。

### Expand website links to show a preview of the content, when available
好き好き。リンク先を踏まずに内容を俯瞰できるので入れても良いかもしれない。
NSFWな文字列そのものを表示したくないのであればここではなくURLそのものを出さないようにするべき（注：ここでは方法について解説しません）。

# おわりに
画面内のことなんか気にせず仕事できれば楽なのに。この記事でみんながよいオフィスワークライフを過ごせれば幸いです。
jupyter (ipython) notebook でグラフが出ない時の対応方法

## jupyter notebookのとき

毎回ググってるんで、メモ。

```py
%matplotlib inline
import matplotlib.pyplot as plt
```

ネタ元：[ここ](http://stackoverflow.com/questions/10511024/in-ipython-notebook-pandas-is-not-displying-the-graph-i-try-to-plot)
PEAR：but it is not a valid package archiveとなってしまう時の対処 Ubuntu

ほぼこちらを参考にした。
http://qiita.com/muramount/items/2071d005eb1155a08326

自分の環境はUbuntuからapt-get install php-pearで入れたので、pearのライブラリの場所が違う

# 背景
pearでpackageをインストールしようと思ったらコケた

# 環境
```
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
```

# 結果
アップグレード失敗するpearのArchive/Tar.phpを手動でコピーしたらupgrade、installできた

# やったことの手順

## XML_Parser インストール失敗
```
sudo pear install XML_Parser-1.3.6
```
を入れようと思ったら失敗した。

## pear の更新状況を確認する
```
$ pear list-upgrades

pear.php.net Available Upgrades (stable):
=========================================
Channel      Package          Local           Remote          Size
pear.php.net Archive_Tar      1.3.11 (stable) 1.4.0 (stable)  19.6kB
pear.php.net Console_Getopt   1.3.1 (stable)  1.4.1 (stable)  5.5kB
pear.php.net PEAR             1.9.4 (stable)  1.10.1 (stable) 285kB
pear.php.net Structures_Graph 1.0.4 (stable)  1.1.1 (stable)  12.2kB
pear.php.net XML_Util         1.2.1 (stable)  1.3.0 (stable)  16.8kB
```
## pear upgrade 失敗
```
$ pear upgrade
```

参考サイトによると
Archive/Tar.phpが怪しい

## Archive/Tar.phpの場所を探す

参考サイトと違い　/usr/share/php/Archiveの中に入ってた
```
vagrant@vagrant:/usr/share/php/Archive$ ls
Tar.php
```
## バックアップして最新版をコピー
```
vagrant@vagrant:/usr/share/php/Archive$ mv Tar.php Tar.php.org
vagrant@vagrant:/usr/share/php/Archive$ sudo cp ~/Archive_Tar-1.4.0/Archive/Tar.php ./
```

## 再度update　できた！！
```
vagrant@vagrant:/usr/share/php/Archive$ sudo pear upgrade
WARNING: "pear/Console_Getopt" is deprecated in favor of "pear/Console_GetoptPlus"
downloading Archive_Tar-1.4.0.tgz ...
Starting to download Archive_Tar-1.4.0.tgz (20,234 bytes)
.......done: 20,234 bytes
downloading Structures_Graph-1.1.1.tgz ...
Starting to download Structures_Graph-1.1.1.tgz (12,579 bytes)
...done: 12,579 bytes
downloading XML_Util-1.3.0.tgz ...
Starting to download XML_Util-1.3.0.tgz (17,351 bytes)
...done: 17,351 bytes
downloading Console_Getopt-1.4.1.tgz ...
Starting to download Console_Getopt-1.4.1.tgz (5,672 bytes)
...done: 5,672 bytes
downloading PEAR-1.10.1.tgz ...
Starting to download PEAR-1.10.1.tgz (296,139 bytes)
...done: 296,139 bytes
upgrade ok: channel://pear.php.net/Archive_Tar-1.4.0
upgrade ok: channel://pear.php.net/Structures_Graph-1.1.1
upgrade ok: channel://pear.php.net/XML_Util-1.3.0
upgrade ok: channel://pear.php.net/Console_Getopt-1.4.1
upgrade ok: channel://pear.php.net/PEAR-1.10.1
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)
PEAR: To install optional features use "pear install pear/PEAR#featurename"

```

# XML_Parser-1.3.6も入った
FlashBuilder + flexでrtmpを再生する

なかなかサンプルが見つからなかった挙句、すっごい簡単だった。
videoPlayerのsourceに設定するだけという・・・


```player.mxml
<?xml version="1.0"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   xmlns:s="library://ns.adobe.com/flex/spark">
  <s:VideoPlayer width="300" height="200" source="rtmp://hoge/hoge" />
</s:Application>
```
OSX: solr 5.4+rails4+sunspot2.2.4で日本語全文検索、マルチコア

# 動くrepo

https://github.com/github0013/solr54_sunspot224

- `brew install solr` 最新で5.4が入ります
- clone
- bundle
- migrate
- rails c


```rb
User.create name: "すもももももももものうち"
User.search{fulltext "もも"}.results.count # => 1
```

# どうやって動くsolr_homeを作るのか

repoのcommitログを見ながら下を読んでください。

## solr_homeを用意する
`bundle exec rake sunspot:solr:run`
  をすると現在のRails App内に`solr`フォルダができます。これを元に動く`solr_home`を作っていきます。

`solr_home`内にデフォルトで作られている`default` `development` `test`は置いておいて、`Rails App名_環境名`でフォルダを作ります。

その中に`core.properties`というファイルを作ります。

```
configSet=sunspot # これによってsolr/configsets/sunspot内のファイルが共通で使えるように
name=solr54_sunspot224_development # フォルダ名と合わせる
```

Solrを再起動すると `bundle exec rake sunspot:solr:run` 下のようにコアが増えています。

http://localhost:8983/solr
<img width="213" alt="Screen_Shot_2016-02-25_at_1_45_47_PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/16757/a056b5f8-1bbb-e4f9-ef73-3c671dbe56d1.png">
*増えてないのならどこかが間違っている


## config/sunspot.ymlを作る

pathを書かないとデフォルトのままなので、分かり易いように変更する

```rb
    path: /solr/<%= "#{Rails.root.basename}_#{Rails.env}" %>
```

こうすることで、後々複数のRails Appから同じSolrに対してコアがどんどん作れるようになる

## schema.xmlを変更する

sunspotが作る`solr_home`の設定には日本語全文検索用の設定が書かれていないので、HomeBrewでインストールしたSolrのインストールディレクトリから必要な部分をコピーしてくる。

`/usr/local/Cellar/solr/5.4.0/server/solr/configsets/data_driven_schema_configs/conf/managed-schema`
このファイルから`text_ja`を抜き出してRails App内の`solr_home`の`schema.xml`へ入れる

`/usr/local/Cellar/solr/5.4.0/server/solr/configsets/data_driven_schema_configs/conf/managed-schema/lang/*`
は丸ごとコピーして自分の`solr_home`の同じ位置へ入れる。

Solrを再起動すると `bundle exec rake sunspot:solr:run` 下のようにフィールドタイプが増えています。

http://localhost:8983/solr
<img width="519" alt="Screen_Shot_2016-02-25_at_2_09_06_PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/16757/8ed4932f-91ca-1016-33ca-dce935f73d72.png">
*増えてないのならどこかが間違っている



## モデルにsearchableを追加

```rb
  searchable do
    text :name, as: :name_text_ja  # 日本語の全文検索を使うのでasで名前を変更する
  end
```

## solrconfig.xmlのコミットを変える

デフォルトのままだと大量に文章を入れて、だいぶ後から検索することを前提とした設定？なので、**Railsのように逐次データ追加、検索をする場合は思うタイミングで検索対象が出てこない**。

この為に、`solrconfig.xml`の`autoSoftCommit`を使うように変更する。


## 実行

```rb
User.create name: "すもももももももものうち"
```

このコードを走らせた後、Solrの自分のコアを見てみて`Num Docs`がゼロのままならどこかがまだおかしい。インデックスのコミットが走っていない。

http://localhost:8983/solr
![e1a6fbfd47fa9bdb0aa5d8e60ab34e1b.png](https://qiita-image-store.s3.amazonaws.com/0/16757/a3152831-2faf-a08c-c3c3-78686c419f93.png)


## 最後にbrew側のSolr5.4で動かす

`bundle exec rake sunspot:solr:run` では`sunspot_solr`の中にあるsolrが動いているので、brew側の方で作った`solr_home`を動かすようにする。


`solr start -f -s /path/to/your/solr_home`
*-fはforeground


## 複数のRailsから同じSolrにコアを作り、使う場合

上記のようにできた`solr_home`をアクセス権限がある別のどこかへ移動します。
そしてそれぞれのRails用のコアを上記説明のように追加していきます。

その上でそれぞれのRailsは`sunspot.yml`を変更し、`solr_home`を追加します。この`solr_home`は移動した先のフルパスです。
Yum の Tips

## Yum の Tips
- Yum の使い方のメモです

- &lt;PKG> はパッケージの名前に置き換えて実行します
- &lt;RPM> は RPM のファイル名に置き換えて実行します
- &lt;FILE> はファイル名に置き換えて実行します

- 表記は Yum で良いみたい
 - http://yum.baseurl.org/

### インストール可能なパッケージの一覧の表示
````
# yum list available
````

### インストール済みのパッケージの一覧の表示
````
# yum list installed
````

### 省略されたパッケージグループも含めてグループの一覧を確認する
````
# yum grouplist hidden
````

### インストールするパスを指定する
````
# yum --installroot=/somewhere/else/ install some_package
````

### パッケージに入っているファイルを調べる
````
# repoquery -l <PKG>
````

### あるファイルがどのパッケージ由来かを調べる
````
# yum provides <FILE>
````

### パッケージをダウンロードだけしてインストールしない
- パッケージリポジトリからパッケージのファイルをダウンロードする方法

````
# yumdownloader <PKG>
````

### ダウンロードしたパッケージをインストールする
````
# yum install <PKG>
````

- yum localinstall でも良いかも

### パッケージに含まれているファイルを展開する
````
$ mkdir ~/tmp; mv <RPM> ~/tmp; cd ~/tmp
$ rpm2cpio <RPM> > foo.cpio
$ cpio -diu -I foo.cpio
````

### あるパッケージが依存しているパッケージを調べる
- 既にインストールされているパッケージについては yum deplist で確認できます

````
# yum deplist <PKG>
````

- インストール前の RPM ファイルから依存関係を確認するには rpm --requires を使用する必要があります

````
# rpm -qp --requires <RPM>
````

### 依存パッケージもダウンロードする
````
# yumdownloader --resolve <PKG>
````

### ダウンロードしたパッケージから Yum のリポジトリを作成する
- &lt;PKG> をダウンロードし、myrepo という名前のリポジトリを作成する場合

````
# yum install -y createrepo yum-utils
# mkdir -p ~/yum/myrepo/Packages; cd $_
# yumdownloader --resolve <PKG>
# cd ../..
# createrepo myrepo
````

- 作成したリポジトリは tar などで固めて他のサーバに持っていくことも可能です

### Yum レポジトリのローカルミラーを作成する
- リポジトリ全体をダウンロードしてローカルミラーリポジトリを作成します

````
# yum install -y createrepo
# reposync -nr <REPO>
# createrepo <REPO>
````

- 作成したリポジトリは tar などで固めて他のサーバに持っていくことも可能です

### Yum のリポジトリを登録する
- 作成したローカルリポジトリは /etc/yum.repos.d/&lt;NAME>.repo というファイルを作成して使用可能にします

````
# vi /etc/yum.repos.d/myrepo.repo
[myrepo]
name=MyRepo
baseurl=file:///root/yum/myrepo
enabled=1
gpgcheck=0
# yum clean all
# yum repolist
# yum search <PKG>
````
Minecraft - Mapcrafter導入

#[Mapcrafter](http://mapcrafter.org/index)とは
非同期型マインクラフトマッパーです。
同期型マッパーとして有名な[Dynmap](http://dev.bukkit.org/bukkit-plugins/dynmap/)に近いものです。
###MapcrafterとDynmap
Dynmapはゲーム起動中ずっとワールをの更新を見張り、リアルタイムでWebマップに反映します。
それに対し、Mapcrafterはレンダリングをサーバ側から実行して初めてWebマップに反映します。

Dynmapは見ている人が多いとゲームに影響が発生しますが、Mapcrafterはinstallしたサーバにセーブデータを転送することでゲームサーバに影響を与えず、レンダリングと表示をすることが可能です。

##インストール
###準備
 - Mapcrafter
 - Apache
 - git
 - コンパイル環境いろいろ
 - Minecraftセーブデータ(公式、bukkit、spigot問わず)
 - RedHatサーバ(当ページはCentOS7です)
 - テクスチャ

##インストール
[公式のインストール手順](http://docs.mapcrafter.org/builds/stable/installation.html)を参考にインストールしていきます。

+ `sudo yum install epel-release`
+ `sudo yum install boost-devel libjpeg-devel libpng-devel gcc-c++ make cmake`
+ `sudo yum install git`
+ `git clone https://github.com/mapcrafter/mapcrafter.git`
+ `cd mapcrafter/`
+ `cmake .`
+ `make`
+ `sudo make install`


apcrafter: error while loading shared libraries: libmapcraftercore.so: cannot open shared object file: No such file or directory
と言われた場合以下のようにパスの通ったところに移動する

+ `sudo mv /usr/local/bin/libmapcraftercore.so /usr/lib64/`
+ `sudo ldconfig`
+ `sudo make install`

これでインストール完了
### レンダリングの用意

+ `cd /tmp/`

好きなテクスチャを取得今回は[フォーラム](http://forum.minecraftuser.jp/viewtopic.php?t=15207)から

+ `wget http://ほにゃらら -O textures.zip`
+ `unzip textures.zip`
+ `mv /tmp/ssets/minecraft/textures/* /usr/local/share/mapcrafter/textures/`
+ `cd /var/www/html/`
+ `vim render.conf`

```
output_dir = /var/www/html

[world:myworld]
input_dir = /home/minecraft/bukkit/world

[map:map_myworld]
name = My World
world = myworld
```

設定の詳しい内容は[公式のコンフィグ解説](http://docs.mapcrafter.org/builds/stable/configuration.html)を参照

##レンダリング実行

`/usr/local/bin/mapcrafter -c render.conf -j 6`
-j 6の数字の部分はレンダリングに使用するCPUのコア数

レンダリングには結構時間がかかるので待つ。
レンダリングが終われば公開ディレクトリ（デフォルトではhttp://localhost）に表示されるはずだ
自分用 Macで便利なツールまとめ

##ランチャー
[Alfard](https://www.alfredapp.com)
- 超便利

##Webページをアプリ化
[Fluid](http://fluidapp.com)
- Chatworkを使ってると便利かも(※chatworkは公式アプリ有)
- 最近はchromeでExtension入れたほうが便利だと思ってきた。

##テキストエディタ
[SublimeText](https://www.sublimetext.com)
- コーディングに使ってます。
- PrettyJsonが便利！
- OmniSharpでUnity開発！
[Kobito](https://itunes.apple.com/jp/app/kobito-markdown-memoapuri/id896624060?mt=12)※AppStore
- メモに使ってます。
[CotEditor](https://itunes.apple.com/jp/app/coteditor/id1024640650?mt=12)※AppStore
- プレーンエディタ
[TextWrangler](https://itunes.apple.com/jp/app/textwrangler/id404010395?mt=12)
- diffを見るのに使ってます。

##ターミナルソフト
[iTerm2](https://www.iterm2.com)
- 使い始めだけどとりあえず
[iTerm2の便利機能まとめ](http://orebibou.com/2015/12/これだけは最低限おさえておきたいiterm2の便利な機/)

##画像編集
[FireAlpaca](http://firealpaca.com)
- 使いこなせてないけど、便利
[Skitch](https://itunes.apple.com/jp/app/skitch-cuoru-miaoki-rumu-gong/id425955336?mt=12)※AppStore
- 指示用の画像を作るのに便利
[Image Optim](https://imageoptim.com)
- 画像サイズを下げるのに便利

##アカウント管理
[1Password](https://itunes.apple.com/jp/app/1password/id443987910?mt=12)※AppStore
- 超有能

##ドキュメント検索
[Dash](https://kapeli.com)
- 公式ドキュメント見たいときに便利

##クリップボード拡張
[ClipMenu](http://www.clipmenu.com/ja/)
- 超絶便利。クリップボードの履歴を100件以上保持できる他、テンプレも登録出来る。

[Clipy](http://qiita.com/econa77/items/1848bf3fdfb7127ca9b8)
- ClipMenuがダウンロードできなくなったので、代替。ほぼ同じことできる超便利ツール。

##アプリアンインストール
[AppCleaner](http://freemacsoft.net/appcleaner/)
- アプリの関連ファイルも削除。削除するファイルは任意で選べる

##アプリインストール
[Homebrew](http://brew.sh/index_ja.html)
- 基本

##解凍ツール
[The Unarchiver](https://itunes.apple.com/jp/app/the-unarchiver/id425424353?mt=12)
- 有能ツール

##メンテナンス
[OnyX](http://www.titanium.free.fr)
- 最近知った

##チートシート
[CheatSheet](https://www.mediaatelier.com/CheatSheet/)
- 地味に便利

##ファイル名変更
[Shupapan](http://sunsky3s.s41.xrea.com/shupapan/)
- 結構使ってる

##Dock拡張
[HyperDock](https://bahoom.com/hyperdock/)
- 開いているアプリのプレビューが見れる

##使いたいツール
better touch tool
http://hitoriblog.com/?p=34863

[Medis](https://itunes.apple.com/jp/app/medis-gui-for-redis/id1063631769?mt=12)
RedisのGUIクライアント

##ツール探しでお世話になったサイト
[http://veadardiary.blog29.fc2.com/blog-entry-4000.html](http://veadardiary.blog29.fc2.com/blog-entry-4000.html)
JXAでMacのSafari・Chrome内でJavaScriptを実行する時は関数をtoString()するといいかも

SafariとChromeの操作方法の違いは以下を参照
[JXAでSafari, Chrome, Firefoxを操作する際の違い](http://qiita.com/zakuroishikuro/items/194223d63b0f95ab7a63)

# サンプル

ブラウザのダイアログに「hello.」と表示して「goodbye.」という文字列を得る
最後に評価された式の結果が戻り値になる

```js:Safariの場合
SCRIPT = "alert('hello.'); 'goodbye.'"

app = Application("Safari")
tab = app.windows[0].tabs[0]

app.doJavaScript(SCRIPT, {in: tab}) // "goodbye."
```

```js:Chromeの場合
SCRIPT = "alert('hello.'); 'goodbye.'"

app = Application("Chrome")
tab = app.windows[0].tabs[0]

tab.execute({javascript: SCRIPT}) // "goodbye."
// app.execute(tab, {javascript: SCRIPT})を省略した書き方
```
エラー出た場合はnullが返る

で、文字列で渡さなきゃいけないから複雑なスクリプトを実行したいときに不便
エディタのシンタックスハイライトも補完も効かない
複数行書くのもエスケープもめんどい

そんな時は普通に関数として書いて`.toString()`し、即時実行させればいい

```js:chrome_sample.js
func = function(){
  var message = "ぃぇぁ";
  alert(message);
  return message;
}

func_str = "(" + func.toString() + ")()"

app = Application("Chrome")
tab = app.windows[0].tabs[0]
tab.execute({javascript: func_str})
```

# おまけ

ヒアドキュメントっぽいやつ

```js:here_document.js
var text = (function(){/*
あああ
いいい
ううう
*/}).toString().split(/\r?\n/).slice(1, -1).join("\n")
```
AD2 > 興味がわいた事項 (2016/02/25)

@ AD2 (Analog Discovery 2)のReference Manual

https://reference.digilentinc.com/analog_discovery_2:refmanual

以下がまだよくわからないが興味がわいた事項。

> 16-channel pattern generator (3.3V CMOS, 100Msample/sec)3) 4)

> 16-channel virtual digital I/O including buttons, switches, and LEDs – perfect for logic training applications 5) 6)

> Two input/output digital trigger signals for linking multiple instruments (3.3V CMOS)7)

> Two programmable power supplies (0…+5V , 0…-5V).