OmniAICreator/Qiita-1.07M huggingface dataset:
C#メモ　処理時間計測

# 概要
C#でStopwatchクラスを使用した処理時間の計測方法。

# コード

```CSharp:使用例
// using System;

// Stopwatchクラス生成
var sw = new System.Diagnostics.Stopwatch();

//-----------------
// 計測開始
sw.Start();

// ★処理A

// 計測停止
sw.Stop();

// 結果表示
Console.WriteLine("■処理Aにかかった時間");
TimeSpan ts = sw.Elapsed;
Console.WriteLine($"　{ts}");
Console.WriteLine($"　{ts.Hours}時間 {ts.Minutes}分 {ts.Seconds}秒 {ts.Milliseconds}ミリ秒");
Console.WriteLine($"　{sw.ElapsedMilliseconds}ミリ秒");

//-----------------
// 経過時間をリセットしてから計測開始
sw.Restart();

// ★処理B

// 計測停止
sw.Stop();

// 結果表示
Console.WriteLine("■処理Bにかかった時間");
ts = sw.Elapsed;
Console.WriteLine($"　{ts}");
Console.WriteLine($"　{ts.Hours}時間 {ts.Minutes}分 {ts.Seconds}秒 {ts.Milliseconds}ミリ秒");
Console.WriteLine($"　{sw.ElapsedMilliseconds}ミリ秒");

//-----------------
// 計測再開
sw.Start();

// ★処理C

// 計測停止
sw.Stop();

// 結果表示
Console.WriteLine("■処理BとCにかかった時間");
ts = sw.Elapsed;
Console.WriteLine($"　{ts}");
Console.WriteLine($"　{ts.Hours}時間 {ts.Minutes}分 {ts.Seconds}秒 {ts.Milliseconds}ミリ秒");
Console.WriteLine($"　{sw.ElapsedMilliseconds}ミリ秒");
```

```Text:実行結果の例
■処理Aにかかった時間
　00:01:03.1235785
　0時間 1分 3秒 123ミリ秒
　63123ミリ秒
■処理Bにかかった時間
　00:00:03.4483858
　0時間 0分 3秒 448ミリ秒
　3448ミリ秒
■処理BとCにかかった時間
　00:00:06.6800882
　0時間 0分 6秒 680ミリ秒
　6680ミリ秒
```

# 参考サイト
[Stopwatch クラス - MSDN](https://msdn.microsoft.com/ja-jp/library/system.diagnostics.stopwatch.aspx)
正規表現メモ（更新随時）

# 数字＋改行を数字＋タブに変更する

```
([0-9]+)\r
↓
$1\t
```

# カンマ区切りの金額の正規表現（増税に伴う修正とかに使えそう）

```
税込(0|([1-9][0-9]{0,2}(,[0-9]{3})*?)|0|([1-9][0-9]{0,2}(,[0-9]{3})*?))円|(0|([1-9][0-9]{0,2}(,[0-9]{3})*?)|0|([1-9][0-9]{0,2}(,[0-9]{3})*?))円（税込）
```

# CSS/SASS関係

## ショートハンド書いたbackground-sizeを通常のものに戻す

### 置換したいCSS

```css
background: url(/img/bg.png) 50% top /100px 50px no-repeat;
```

### 正規表現

```
検索：(.*)\s\/(\d+px\s\d+px)\s(.*);
置換：$1 $3;\nbackground-size: $2;
```

### 置換されたCSS

```css
background: url(/img/bg.png) 50% top no-repeat;
background-size: 100px 50px;
```

## XXpxをSASSで作った関数yyで囲まれたpxなしの数字にしたい（マイナス対応）

```
検索：\s([\-]?[0-9]+?)(px)
置換 yy($1)
```
(Rails)Controller#statusをmodule化するとActionNotFoundが発生する

## 概要

概要というかタイトルそのまま。

Railsの `Controller` で `status` というアクションを使うときは注意が必要。

普通に `Controller` 内で `status` アクションを定義している分には問題ないが、
`status` アクションを `module` にして使おうとすると `ActionNotFound` のエラーが発生する。


## 詳細

例えば以下のような `Controller` がある。

```ruby:app/controllers/sample_controller.rb
class SampleController < ApplicationController
  def index
    # code
  end

  def status
    # code
  end
end
```

これにルーティングを設定しておけば
それぞれのアクションが実行される。

しかしこの `Controller` を以下のように `module` 化して `Controller` に `include` する。

```ruby:app/controllers/sample_controller.rb
class SampleController < ApplicationController
  include SampleModule
end
```

```ruby:app/controllers/concerns/sample_module.rb
module SampleModule
  extend ActiveSupport::Concern

  def index
    # code
  end

  def status
    # code
  end
end
```

こうすると `index` アクションは実行されるが `status` アクションは　`AbstractController::ActionNotFound` が発生する。

怖い。

## 対応策

とりあえず暫定的な対応策は以下の2点

* `status` というアクション名を変更する
* `def status` を `ActiveSupport::Concern` の `included` の `block` で囲む

こんな感じ。

```ruby:app/controllers/concerns/sample_module.rb
module SampleModule
  extend ActiveSupport::Concern

  def index
    # code
  end

  included do
    def status
      # code
    end
  end
end
```

## 原因？

下記の記事を参考

http://stackoverflow.com/questions/24170719/controller-actions-in-module-not-being-found

簡単に説明すると`ActionController` の `module` の中に `Metal` という `class`　が定義されている。

* [ActionController::Metal](https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_controller/metal.rb#L101)

そしてこの中に `status` というメソッドが定義されている。

* [ActionController::Metal#status](https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_controller/metal.rb#L176)

どうやらこいつのせいで上手く `module` の `def status` が実行できなくなってしまっているらしい。

うーん、普通後から `include` された `module#method` が実行されると思うんだけど……。
`Controller` が命名規則で `action` を実行する手順のどっかが悪いのかなと思っている。

## 後書き

とりあえず `status` なんてアクションはよく使う名前だと思うので困った。

`Controller` の `action` を `module` 化するのはやりすぎって意見もあるんでしょうが、 
もっといい解決方法があったら教えてください。
Listコレクション内の要素の削除方法　３題


# 背景
`List<Class>`型のコレクションの要素を削除したいんです。
勿論`list.Remove～`で削除はできます。

でも、コレクションなんだから、嘗め回しながら要らないものを削除する、ってのが普通の対処方法なんじゃないのかなぁ…

で、

```csharp:イメージコード
foreach (Class item in list) {
    if (なんか条件が合致したら)
        list.Remove(item);
}
```

なんてやったら

![image](https://qiita-image-store.s3.amazonaws.com/0/136132/cdaa9be2-da7a-e74f-02a6-bb91b0383a7a.png)

ほーら、怒られた…

# 方法 その①
良くやったのは、一度全体を嘗め回す中で対象を横に退避。
改めて退避リストを参照しながら元リストをメンテナンス。

```csharp:その１のリスト
List<Class> list = new List<Class>();     //    こっちが元リスト
list.Add(new Class(～～));
    ：

List<Class>  save = new List<Class>();    //    こっちは退避リスト

foreach (Class item in list)              //    まず要らないものを洗い出す
    if (要らないものを見つけたら)
        save.Add(item);

foreach (Class item in save)              //    こっちで実際の削除
    list.Remove(item);
```

こんな感じ。
遠回り感が半端ない。

# 方法 その②
`foreach`じゃなくて`index`でアクセスする方式。
ただ、頭から処理することができないので、裏から攻めちゃう。

```csharp:その２のリスト
List<Class> list = new List<Class>();     //    これが元リスト
list.Add(new Class(～～));
    ：

for (int i=list.Count-1; i>=0; i--)
    if (要らないものが見つかったら)
        list.RemoveAt(i);
```

ですね。
何かちょこっと反則技っぽいニオイが…（別に反則じゃないんですけど）

# 方法 その③
その①の拡張版と云うか…
元のコレクションを直接メンテナンスできないのなら、複製を渡せばよいのでは？
と急に何かが下りてきたモノ。

```csharp:その３のリスト
List<Class> list = new List<Class>();     //    これが元リスト
list.Add(new Class(～～));
    ：

foreach (Class item in list.ToArray())    //    エラーにならないんですよー、これが
    if (要らないモンみーつけた)
        list.Remove(item);
```

んー、あっさり。
その①にしたって、結局は複製リストを作成するんだから、③のやり方でもいいよね、きっと。

# 纏め
まぁ、状況によって使い分けるが吉かと…
<br/>
ところで折角なので、`３の倍数と３が付く数字の時だけ自信がなくなるリスト`を作ってみました。
このコレクションから、件の数字を削除してみましょう。

えーと、まずコレクションに格納するクラスです。

```csharp:Nabeatsu.cs
class Nabeatsu {
	public Nabeatsu(int Value) { this.Value = Value; }
	public int Value { get; set; }
	public bool Unconfident { get { return Value % 3 == 0 || Value.ToString().Contains("3"); } }
    public override string ToString() { return string.Format(Unconfident ? "({0,2})" : " {0,2} ", Value); }
}
```

```csharp:Program.csの一部
List<Nabeatsu> NabeList = new List<Nabeatsu>();

for(int i = 1; i <= 100; i++)
	NabeList.Add(new Nabeatsu(i));

foreach(Nabeatsu Nabe in NabeList)
	Console.Write("{0} ", Nabe);
```

実行するとこんな感じ

![image](https://qiita-image-store.s3.amazonaws.com/0/136132/96c4c162-d9ca-cd04-473e-32f4c3b4602e.png)

<br/>
じゃぁ、コレクションの部分削除をやってみましょう。

```csharp:Program.csの一部
List<Nabeatsu> NabeList = new List<Nabeatsu>();

for(int i = 1; i <= 100; i++)
	NabeList.Add(new Nabeatsu(i));

foreach(Nabeatsu Nabe in NabeList.ToArray())        //    これで自信がない処を削除
	if(Nabe.Unconfident)
		NabeList.Remove(Nabe);

foreach(Nabeatsu Nabe in NabeList)
	Console.Write("{0} ", Nabe);
```

![image](https://qiita-image-store.s3.amazonaws.com/0/136132/b45f32e7-5236-0753-accf-36b0036be928.png)

これで、自信が取り戻せました。
ま、根本解決になってない処は目を瞑って頂くと云う事で…
atom-runnerのフォントサイズ変更

[atom-runner](https://github.com/lsegal/atom-runner)の実行画面のフォントサイズが小さかったので，大きくする際のメモ．

#設定方法
メニュー：file(ファイル) -> stylesheet(スタイルシート)
からスタイルシート(styles.less)を開く．

以下を，スタイルシート末尾に追記

```css:styles.less
.atom-runner pre{
    font-size: 14px; /* 好きなフォントサイズ */
}
```
rex0220 第３希望までプラグイン

ドロップダウン項目３個を１組で、第３希望まで入力できるプラグインです。

- 選択済みの値がプライオリティの低いドロップダウン項目で表示されません。
- 選択項目がダブらないように、同じ値が選択された場合は、プライオリティの低い項目がクリアされます。
- 新デザインのみ対応

[rex0220 stores で、販売中です。](https://rex0220.stores.jp/)

![thirdchoice1.gif](https://qiita-image-store.s3.amazonaws.com/0/100572/4b107109-e0b9-353a-f8ff-0e909e4ceb1d.gif)


# フォームのドロップダウン項目設定

- 同じ選択肢を持つドロップダウン項目３個を設定します。
- 本番環境にフォーム変更を反映します。

![第３希望まで01.png](https://qiita-image-store.s3.amazonaws.com/0/100572/34b211eb-3800-5c2d-7873-ea1546cc7feb.png)

# ドロップダウン項目の選択肢

３個のドロップダウン項目の選択肢を同じにします。
項目の複製が便利です。

![第３希望まで02.png](https://qiita-image-store.s3.amazonaws.com/0/100572/cefd48a8-27d5-5e86-2048-08b8c7f12d39.png)

# プラグインの追加

- 「kintone システム管理 > プラグイン」で追加します。
- 「アプリの設定 > プラグイン」で、アプリに追加します。


# プラグインの設定

- プラグイン設定画面において、ドロップダウン項目３個１組で指定します。
- 第１希望、第２希望、第３希望の各セルをクリックすると、指定可能なドロップダウン項目が表示されますので、ドロップダウン項目を選択します。
- 対象名を入力すると、ラベルまたはフィールドコードに対象名が含まれているものに、絞り込めます。

※フォーム変更時は、本番環境にフォーム変更を反映後に、本プラグイン設定を行ってください。

![thirdchoice_setting1.gif](https://qiita-image-store.s3.amazonaws.com/0/100572/9d682cec-24eb-1b19-b4c3-a5e1db329e5e.gif)

# 注意事項
- 既に、JavaScript によるカスタマイズを行っているアプリの場合、処理が競合して、エラーになる場合があります。その場合は、該当するアプリでプラグインの使用を中止してください。
- フォームを変更した場合は、プラグインを再設定してください。
Laravel で開発するならここを見とけっていうサイトまとめ

#はじめに
Laravel での開発をしていく中で、実際に参考になったサイトをまとめる。
僕は Laravel5(.3) で開発をしているので、今回は Laravel5 系の情報を記載しているサイトに絞った。

#ドキュメント
##Laravel.com
https://laravel.com/docs/5.3/
公式リファレンスサイト（英語）
必須。

##ReaDouble
https://readouble.com/
公式リファレンスを日本語訳しているサイト。
日本人なら1番お世話になりそう。
ただ、公式リファレンスの全てを網羅しているわけではないもよう。

#ブログ
##ララ帳
https://laravel10.wordpress.com/
5.1 系の記事がほとんど。
サンプルコードが豊富で解説も丁寧。
インストール方法から載っているので初心者には最適。
しかし、更新が 2015/7 で止まっているので、最新の情報などは手に入らなそう。

##ララジャパン
http://www.larajapan.com/
こちらもサンプルコードが豊富で、記事ごとのクオリティが高い。
個人的にはララ帳よりこっちの方が読みやすい。
今でも更新され続けているので、定期的にチェックすると良い。
SEOに弱いのか、検索してもあまり上位にいない。

#その他
##Stack Overflow
http://stackoverflow.com/questions/tagged/laravel-5.3
`laravel-5.3`のようにタグでセグメントすれば、新しめの情報も見つかる。

##Laravel NEWS
https://laravel-news.com/blog/
最新の動向はこちらでチェック。

##GitHub
https://github.com/laravel/laravel
ソースを読むのが1番早かったりする。

#動画も参考になりそう
今ままで使ったことないけど、参考になりそうなので動画サイトも載せておく。

##Laracasts
https://laracasts.com/
動画チュートリアルサイト。
一部無料。
かなり数があるので、お金をかけても学びたい人には良さそう。

##ドットインストール
http://dotinstall.com/lessons/basic_laravel
こちらも動画。
5.2 系のみ。
一部無料。


#ひとこと
他にも良いサイトを見つけたら随時追記していく。
やりたいことが公式のドキュメントに載っていなかったりするので、実例を紹介しているサイトはとても便利。
WindowsのPython3でGTK+3を使う際にハマったこと

# やりたかったこと
Windows環境のPython3でGTK+3を使いたかった。

# ハマった時の環境
* Windows 10
* Python __3.5.2__

# 何が起きたか
PythonのインストールからPyGObjectの導入まで、何もかも上手く行っていた。
が、しかし。

```python
>>> import gi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'gi'
```

大事なものがimport出来ない…

# 結論
PyGObjectがPython3.5以上に対応してなかった。
一旦全部消してPython3.4をインストールして、PyGObjectを導入し直したら動いた。

ちなみにPython3.4.5のWindows版が見当たらなかったので3.4.4をインストールしました。

# 正しい導入方法
ここからは必要な人以外スルーして大丈夫です。

まず[公式サイト](https://www.python.org/downloads/windows/)からPython3.4.4のインストーラーを落としてくる。
手順に従ってインストールしてください。

パスを通すオプションがデフォルトではオフになっているので、そこだけ直すように。

![pyinst.png](https://qiita-image-store.s3.amazonaws.com/0/77073/3a5ab385-178d-5379-3447-6019027a8b1b.png)

Pythonがインストール出来たら今度はPyGObjectの方をインストールします。
[PyGObjectのページ](https://wiki.gnome.org/Projects/PyGObject)の**Windows installers with Gtk3 support**というリンクからダウンロードページに飛び、最新のpygi-aio-\*setup_\*.exeをダウンロードしてください。

あとはインストーラーに従って、Pythonのパスを選択し、インストールしたいライブラリを選択(ここではGTK+)してそのままインストール完了。

初回はFontconfigのfc-cacheが動くので、真っ黒のコンソール画面がしばらく表示され続けますが、勝手に閉じるのを待ちましょう。

インストール後はPythonのインタプリタを開いて、

```python
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

win = Gtk.Window()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
```

このコードが正常に動作することを確認してください。
単純にウィンドウが表示されるだけです。

あとは[チュートリアル](http://python-gtk-3-tutorial.readthedocs.io/en/latest/)を読みながらコードを書きましょう。

## 参考
[python - gi.repository Windows - Stack Overflow](http://stackoverflow.com/questions/12981137/gi-repository-windows)
[Ansible]Playbook中のタスク一覧を出力する


`--list-tasks` オプションをつけてあげればよい

[「初めてのAnsible」](https://www.oreilly.co.jp/books/9784873117652/)の[GitHubページ](https://github.com/lorin/ansiblebook/blob/master/ch02/playbooks/web-tls.yml)よりサンプルを拝借

```:web-tls.yml
- name : Configure webserver with nginx
  hosts: vagrant
  become: True
  vars:
    key_file: /etc/nginx/ssl/nginx.key
    cert_file: /etc/nginx/ssl/nginx.crt
    conf_file: /etc/nginx/sites-available/default
    server_name: localhost
  tasks:
    - name: install nginx
      apt: name=nginx update_cache=yes cache_valid_time=3600

    - name: create derectories for ssl certificates
      file: path=/etc/nginx/ssl state=directory

    - name: copy TLS key
      copy: src=files/nginx.key dest={{ key_file }} owner=root mode=0600
      notify: restart nginx

    - name: copy TLS certificate
      copy: src=files/nginx.crt dest={{ cert_file }}
      notify: restart nginx

    - name: copy nginx config file
      template: src=templates/nginx.conf.j2 dest={{ conf_file }}
      notify: restart nginx

    - name: enable configuration
      file: dest=/etc/nginx/sites-enabled/default src={{ conf_file }} state=link
      notify: restart nginx

    - name: copy index.html
      template: src=templates/index.html.j2 dest=/usr/shaore/nginx/html/index.html mode=0644

  handlers:
    - name: restart nginx
      service: name=nginx state=restarted
```

上記のplaybookのタスク一覧を出力すると以下のようになる

```
$ ansible-playbook web-tls.yml --list-tasks

  play #1 (vagrant): Configure webserver with nginx	TAGS: []
    tasks:
      install nginx	TAGS: []
      create derectories for ssl certificates	TAGS: []
      copy TLS key	TAGS: []
      copy TLS certificate	TAGS: []
      copy nginx config file	TAGS: []
      enable configuration	TAGS: []
      copy index.html	TAGS: []

```

`name` オプションに付けられたタスク名が出力されていることが分かる

`name` オプションを付けていなかった場合には、そのタスクのモジュール名(`apt`や`file`)が出力される

`ansible-playbook --start-at-task="<task_name>"` で任意のタスクからplaybookを実行できるし、`name`は付けるようにしとこう
grep, nkfコマンドでバッファしないようにする

tail -f のあとに grep や nkf をつけること結構あると思います:relaxed:

その際、grepもnkfも結果をある程度バッファにため込んでから出力するので
リアルタイムに確認することができずにちょっぴり困ってました。

でも、あるんですね、ちゃんと考慮されたオプションが:heart_eyes:

## grepは「--line-buffered」
```
tail -f test.log | grep --line-buffered
```

## nkfは「-u」
```
tail -f test.log | nkf -u
```

これで一行ずつはき出してくれるようになるので、リアルタイムに確認出来ます。
なお、パフォーマンスが落ちると思われますので場合によっては注意が必要です
[Unity]ある特定のゾーンにいるかどうか判断する．(Trigger)


# 状況
今回はボール(移動する物体)とCube(ゾーン)を使う．

# 準備
## 動く側
ボールにはRigidbodyをつけておく
![rigidbody.png](https://qiita-image-store.s3.amazonaws.com/0/113504/8f35d3cb-636b-d546-6fac-8214447441ad.png "rigidbody.png")

## ゾーン
CubeゾーンにはColliderのisTriggerにチェックを入れる．
![trigger.png](https://qiita-image-store.s3.amazonaws.com/0/113504/fb019b48-6b01-c14a-f863-c25c2fe2890a.png "trigger.png")

また，ゾーン側にはタグをつけておく
![スクリーンショット 2016-11-16 20.08.55.png](https://qiita-image-store.s3.amazonaws.com/0/113504/c1d71fea-69b1-3f51-10a2-fc0fd202375b.png "スクリーンショット 2016-11-16 20.08.55.png")


# スクリプト

動く側につける．

```BallTrigger.cs
using UnityEngine;
using System.Collections;

public class BallTrigger : MonoBehaviour {

	private bool isSafe = false;


	void Update(){
		// Aキーを推したら
		if (Input.GetKeyDown (KeyCode.A)) {
			// もしセーフなら
			if (isSafe) {
				Debug.Log ("セーフ！");
			} else {
				Debug.Log ("アウト!");
			}
		}
	}

	// ゾーンに入ったら
	void OnTriggerEnter(Collider other){
		// タグを比較
		if (other.CompareTag ("SafeZone")) {
			// セーフフラグを外す
			isSafe = true;
			Debug.Log ("Enter SafeZone");
		}
	}

	// ゾーンからでたら
	void OnTriggerExit(Collider other){
		// タグを比較
		if (other.CompareTag ("SafeZone")) {
			// セーフフラグを立てる
			isSafe = false;
			Debug.Log ("Exit SafeZone");
		}
	}
}
```
CoreOSでdocker運用

[ここ](http://knowledge.sakura.ad.jp/tech/3390/)を見て、httpdを試してみた。

# dockerを使う手順
- Dockerfileの準備
    - dockerhubなどから持ってくる
- Dockerイメージのビルド 

    ```:console
    sudo docker build -t servicename .
    ```

- イメージをファイルに書き込み

    ```:console
    sudo docker save servicename:latest > servicename.tar
    ```

- ファイルからイメージをロード

    ```:console
    docker load -i servicename.tar
    ```

- サービスの起動

    ```:console
    docker run -t -i -p 80:80 --rm servicename
    ```
-サービスの起動（バックグラウンド）

    ```:console
    docker run -d -p 80:80 --name servicename servicename
    ```
-バックグラウンドで起動したサービスの停止

    ```:console
    docker stop servicename
    ```
-バックグラウンドで起動したサービスの削除

    ```:console
    docker rm servicename
    ```

#TODO
https://blog.misosi.ru/2016/01/28/installing-owncloud/
ここみて、owncloudいれる

#systemctlつかう場合

``` :console
docker run --privileged --name servicename -d -p 8081:80  imagename /sbin/init 
docker exec -ti centos-lamp-owncloud bash
```
動的アイテムに対してeventを発生させる

jQueryでdelegateを効かせないと、動的なアイテムに対してeventを発生させることができない。
引数を2つとるとdelegateが効くらしい。謎。


✕delegate

```js
  $("input, textarea").on('change', function() {
    // 入力内容が更新されている場合は、isChangedフラグをtrueにします。
    isChanged = true;
    console.log('isChanged = true;');
  });
```

◯delegate

```js
  $("body").on('change', 'input, textarea', function() {
    // 入力内容が更新されている場合は、isChangedフラグをtrueにします。
    isChanged = true;
    console.log('isChanged = true;');
  });
```

追記
**[謎について](http://qiita.com/sansaisoba/items/7099e63c4badb3b51b74)**
[Unity]Rigidbodyの速度を表示する．


# ボールの速度が欲しい時のスクリプトの書き方の例(Rigidbody)

```Ball.cs
using UnityEngine;
using System.Collections;

public class Ball : MonoBehaviour {

	private Rigidbody _rigidbody;

	void Start(){
		// 対象の
		_rigidbody = this.GetComponent<Rigidbody> ();
	}

	void Update(){

		// 1. 速度の取得の例
		// Aキーを推したら
		if (Input.GetKeyDown (KeyCode.A)) {
			// 速度ベクトルを表示
			Debug.Log ("速度ベクトル: " + _rigidbody.velocity);

			// 速度を表示
			Debug.Log ("速度: " + _rigidbody.velocity.magnitude);
		}
	}

	//2. 速度の代入の例
	// 一定速度以上になったら動きを止める

	// 物理的な挙動のため，FixedUpdateを使う．
	void FixedUpdate(){
		// もし速度が5以上だったら
		if (_rigidbody.velocity.magnitude > 5f) {
			// 速度を0にする
			_rigidbody.velocity = Vector3.zero;
			// 重力を無効にする
			_rigidbody.useGravity = false;
			//回転を0にする
			_rigidbody.gameObject.transform.rotation = Quaternion.Euler (Vector3.zero);
		}
	}
}
```
Sprite Packer と AssetBundle メモ

・**Resourcesフォルダ**内にあるSpriteには**タグを設定できない。**
　(Resources.Loadはあくまで１つのものを読むための機能みたい、Resources.LoadAllもあるけど共通化とは違うかも)

・Resourcesフォルダ以外のフォルダにTexture等を入れて、Texture Type を Sprite2Dにして、mipmap外し、
　Sprite ModeをSingleに設定し、Packing Tag にまとめる単位の名前をつける。

・PackingするTexture等をResourcesフォルダ以外のフォルダに置くときは、
　おそらくUnity上でファイル移動させる必要がある、そうしないと**metaファイル**内の**GUID**が同じにならない。
　**AssetDatabase.MoveAsset**等を使うか**ドラッグアンドドロップ**？

・Packing Tagを設定した集合に対してアセットバンドル名を１つ付ける必要がある。
　**Packing TagとAsset Bundleは１対１の関係**（なかなかわからなかった）
　こうしないと**Stats**に表示される**SetPath**や**Batcing**の数がPackingされた時と同じにならない。
　例）画像０，１，２，３，４　にPacking Tag をTest　とつけると　
　　　画像０，１，２，３，４　のアセットバンドル名をPacker1　のように１対１の関係にしておく

■手順

　１、Textureを複数選択Texture Type を Sprite2D　にする、SpriteMode　を　Simple　にする。　
　２、Packing Tagを設定
　３、Packing Tagと同じ単位でアセットバンドル名をつける
　４、メニューバーのWindow -> Sprite Packer -> Packing Tagを確認して　Pack　をクリック
Electronでタイトルバーを非表示にしつつウィンドウの操作ボタンを表示する方法

![スクリーンショット 2016-11-15 17.59.49.png](https://qiita-image-store.s3.amazonaws.com/0/75633/65edcec4-a1fb-69e7-6a97-5da3123d179d.png)
要はこうしたい人向け。

## 概要

[Electron](http://electron.atom.io/)を利用するとWebフロントエンドの技術で簡単にネイティブアプリケーションが開発可能で便利な反面、ちょっと野暮ったいタイトルバーがついてきます。

これは、オプションで簡単に削除することが可能なのですが、そうした場合にはOSに付随する閉じる/最大化/最小化といったボタンまで消えてしまいます。

これは不便なので、どうにかボタンのみは残したままフレームレスにしたいところでしたが、探せど探せど国内にこれにあたる情報がなく、ようやく海外の情報で知り得たのでQiitaで共有しておきます。

ちなみに、パッチをあてる複雑な設定が出てきたこともありますが、どうやら今のバージョンですとそこまで複雑なことをする必要もなかったようで、平易な設定で可能なので、はじめから[公式ドキュメント](http://electron.atom.io/docs/)を探したほうがはやそうな結果でした。

## Electronデフォルトのタイトルバーつきウィンドウ

![スクリーンショット 2016-11-15 18.02.40.png](https://qiita-image-store.s3.amazonaws.com/0/75633/48ec784a-2909-d599-4956-630d28d80732.png)

Electronの[Quick Startレポジトリ](https://github.com/electron/electron-quick-start)からクローンしてきて走らせると、このような状態のウィンドウが表示されます（コンテンツの中身は少し変えています）。

普通のアプリケーションについている場合はそこまで気になりませんが、Electronアプリケーションの場合はWebのようなナビゲーションなどがつくことを考えると、少々不格好といえますね。

## 完全に非表示にした状態のウィンドウ

![スクリーンショット 2016-11-15 18.04.54.png](https://qiita-image-store.s3.amazonaws.com/0/75633/c3f3d4ee-c4e7-3a0f-bf32-d64f501c4038.png)

次に、完全にネイティブのコンポーネントを削除した状態のウィンドウです。
こちらは様々なところで紹介されていますが、以下のようにmain.jsを編集することで実現が可能となります。

```diff:main.js
function createWindow () {
  // Create the browser window.
---  mainWindow = new BrowserWindow({width: 800, height: 600})
+++  mainWindow = new BrowserWindow({frame: false, width: 800, height: 600})
```

2016年11月時点でのレポジトリの状況ですと、16行目に存在する`new BrowserWindow()`のパラメータにframeを追加してやることで可能となっています。

## 今回達成したいウィンドウ

![スクリーンショット 2016-11-15 17.59.49.png](https://qiita-image-store.s3.amazonaws.com/0/75633/f923fee3-7e84-21a1-0b6b-0000f4011d63.png)

最後に、今回実現したい形となります。
こちらは、非表示の場合のウィンドウと同様に、16行目の`new BrowserWindow()`へ設定をひとつ追加するだけで実現することが可能となります。具体的には、以下のような形となります。

```diff:main.js
function createWindow () {
  // Create the browser window.
---  mainWindow = new BrowserWindow({width: 800, height: 600})
+++  mainWindow = new BrowserWindow({titleBarStyle: 'hidden',width: 800, height: 600})
```

## まとめ

意外と需要がありそうなわりに、情報が少なかったこともあって、開発者さんたちの助けになればと思います。
Electronはバージョンの違い(とくに1.0以降かそれ以前か)で大きく仕様が変わるため、できる限り公式ドキュメントを参照することをおすすめします。
UITableViewのセルが無い部分は後ろにあるビューにタップを流す

```swift
final class ThroughTableView: UITableView {
  override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    if let _ = indexPathForRow(at: point) {
      return super.hitTest(point, with: event)
    } else {
      return nil
    }
  }
}
```

hitTestでセルがあるか見てあげてあれば普通にhitTest/無ければそのままタップイベントを流す。

ここでselfを返したりするとセルのタップの反応が悪くなったりするので注意
#7 【攻略】RubyWarrior Level7

RubyWarrior Level7の攻略
今回は、独力で考えたスパゲッティコードと、参考サイトからインスパイアしたメソッド利用法を使ったスクリプトの両方を紹介したいと思います。

#概要
今回はwarriorが壁にぶち当たっていて、出口はその反対の後方にあります。feel.wall?で壁の判定をしてからpivot!で回転することで進行方向自体を変更することができます。

そのあとは前回通り。

#スクリプト(独力編)
```ruby
class Player
  def initialize()
    @health = 20
  end
  
  def play_turn(warrior)
    if warrior.feel.wall?
      warrior.pivot!
    else
      if warrior.feel.empty?
        if @health > warrior.health
          if warrior.health < 7
            warrior.walk!(:backward)
          else
            warrior.walk!
          end
        else
          if warrior.health < 16
            warrior.rest!
          else
            warrior.walk!
          end
        end
        
      else
        if warrior.health < 7
          warrior.walk!(:backward)
        else
          warrior.attack!
        end
      end
      @health = warrior.health
    end
  end
end
```

if文が多い(ロジックは組めてるけど...)
共同開発の場だと、まず他の人が読めないし、部分的に変更してと頼まれても自分でも変更しにくいと思うので、次回からは「誰が見てもわかる綺麗なコード」を目指そうと思う。

#スクリプト(インスパイア編)
```ruby
class Player
  def initialize()
    @health = 20
  end
  
  def play_turn(warrior)
    if warrior.feel.wall?
      warrior.pivot!
    else
      if warrior.feel.empty?
        if @health > warrior.health
          if escape?(warrior)
            warrior.walk!(:backward)
          else
            warrior.walk!
          end
        else
          if rest?(warrior)
            warrior.rest!
          else
            warrior.walk!
          end
        end
        
      else
        if escape?(warrior)
          warrior.walk!(:backward)
        else
          warrior.attack!
        end
      end
    end
    
    def escape?(warrior)
      escape_health = 7
      dying = warrior.health < escape_health
      attacked = @health > warrior
      return attacked && dying
    end

    def rest?(warrior)
      health_line = 16
      cheerful = warrior.health > health_line
      attacked = @health > warrior
      return !(cheerful || attacked)
    end
    
    @health = warrior.health
  end
end
```

長くはなったけど、ほんの少しだけ分かりやすくなった...ような気がする。
条件をescape!とrest!に収めたので、そこの条件は他人が見ても分かりやすいし、修正もしやすいと思う。参考にした人は「攻撃されている」という条件もメソッドにしていて、全体的にもリーダブルコードだった。まだまだ自分のコードは改善の余地がありそう。

#解説
壁を向いてる時はpivot!という条件を追加するくらいなのであまり新しい要素はない。
Level6のコードをwarrior.feel.wall?の偽の条件の方に入れてあげるだけ。
Qiitaの新しいContribution算定ロジックを解読してみた

Qiitaが「ストック」重視から「いいね」重視にリニューアルされましたが

Contributionのロジックに何やら計算式が書かれてたので解読してみます

## 引用
投稿記事やコメントに「いいね」できるようになりました（Contributionの算定基準も変わります）
http://blog.qiita.com/post/153200849029/qiita-like-button

<img width="700" alt="スクリーンショット 2016-11-16 18.22.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/49543/8c2b2813-069f-a185-2e8b-214021879326.png">


## 以下3つの合計になります

- 書いた記事についた「いいね」数 
- コメントへ付いた「いいね数」 の半分 
- 編集リクエストを送った記事、コメントに付いた「いいね」数の10分の1。一つの編集リクエストにつき上限10ポイント。  


## だいたいこんな感じ
- ストック数の価値はなくなりました
- 記事の「いいね」は1ポイント換算
- コメントにも「いいね」出来るようになった
    - コメントの「いいね」は0.5ポイント換算
- 編集リクエストを送った記事、コメントの「いいね」に対しては0.1ポイント換算
    - ただし上限10ポイントなので100回「いいね」までポイントが貰えるようです
Webフォントの使い方

> [目的] Webフォントを使い、Web上の文字列のフォントを変更する。

# Webフォントとは

CSS3より利用可能になったWeb上にあるフォントを使う仕組みです。
そのため、クライアントの環境に依存せずにフォントを表示することが可能です。

# Webフォントの利用

## Webフォントを探す

まずは、使いたいフォントを探してきましょう。インターネット上で検索すれば情報はたくさんあります。

* https://fonts.google.com/
* https://googlefonts.github.io/japanese/
* http://typesquare.com/
* https://liginc.co.jp/web/design/font/15639
* etc.

## 実装

Webフォントを利用したいページで以下の実装を行います。

ここでは、以下のページを例として用意し、[さわらび明朝](https://googlefonts.github.io/japanese/#sawarabimincho) を適用します。

```html
<html>
<head>
</head>
<body>
Webフォント 日本語<br>
あいうえお アイウエオ<br>
ABCDEFG abcdefg<br>
1234567890<br>
</body>
</html>
```

適用前のブラウザ上の表示
![image](https://qiita-image-store.s3.amazonaws.com/0/13267/79eedeb6-b52b-3bbd-508a-e148a001af37.png)


### Step1. フォントの読み込み
headタグ内に以下のlinkタグを追加します。

```html
<link href="https://fonts.googleapis.com/earlyaccess/sawarabimincho.css" rel="stylesheet" />
```

### Step2. CSSでフォントを適用
headタグ内にstyleタグを追加し、CSSでフォントを適用したい範囲を指定します。
ここでは、bodyタグ内の全体の文字列に適用します。

```html
<style>
body { font-family: "Sawarabi Mincho"; }
</style>
```

これだけでWebフォントが利用できます。

```html:body内全体に適用
<html>
<head>
<link href="https://fonts.googleapis.com/earlyaccess/sawarabimincho.css" rel="stylesheet" />
<style>
body { font-family: "Sawarabi Mincho"; }
</style>
</head>
<body>
Webフォント 日本語<br>
あいうえお アイウエオ<br>
ABCDEFG abcdefg<br>
1234567890<br>
</body>
</html>
```
![image](https://qiita-image-store.s3.amazonaws.com/0/13267/ec7a5131-6013-3b06-137a-59197e708f75.png)



なお、CSSを利用してWebフォントの適用範囲を調整することもできます。

```html:1行目のみ適用
<html>
<head>
<link href="https://fonts.googleapis.com/earlyaccess/sawarabimincho.css" rel="stylesheet" />
<style>
.wf-sawarabimincho { font-family: "Sawarabi Mincho"; }
</style>
</head>
<body>
<div class="wf-sawarabimincho">Webフォント 日本語</div>
あいうえお アイウエオ<br>
ABCDEFG abcdefg<br>
1234567890<br>
</body>
</html>
```
![image](https://qiita-image-store.s3.amazonaws.com/0/13267/6f7d9431-2387-5a80-c896-52ad66936037.png)
C++Builer Starter Editionでコード補完が効かないという話を検証した⇒補完効きます

[エンバカデロ・テクノロジーズ](https://www.embarcadero.com/jp/)のアプリケーション開発環境である[C++Builder](https://www.embarcadero.com/jp/products/cbuilder)のStarter Edition でコード補完が効かないのってどうよ、というご意見を頂きました。しかし自分の記憶の範囲ではちゃんとコード補完が効いていたはずなので、あらためて確認検証してみました。


## C++Builder 10.1 Berlin Update 2 の場合
とりあえずは C++Builder 10.1 Berlin Update 2 Starter Edition から。これは2016年11月15日にリリースされたバージョンです。インストールは radstudio10_1_upd2_esd.exe を使用。

![licecap.gif](https://qiita-image-store.s3.amazonaws.com/0/149350/23a46ab1-a405-d55b-b9c1-676c6e55a019.gif)

ちゃんとコード補完されているような。。。

## C++Builder 10.1 Berlin Update 1 の場合
もうひとつ行ってみましょう。C++Builder 10.1 Berlin Update 1 Starter Edition です。インストールは radstudio10_1_upd1_esd.exe を使用。バージョンが分かるようにスクリーンショット工夫しました。

![licecap.gif](https://qiita-image-store.s3.amazonaws.com/0/149350/c509af0d-fb06-2d93-0df6-012edf17bc26.gif)

こちらも同じ動作ですね。


というわけで、コード補完は効きました。

## 補足その１

ちなみに std:: とかでないもの（ShowMessaage など）は自動では出ませんけど、ctrl + space の同時押しで補完されます。

## 補足その２

コード補完が上手く動かないぞー、という方は大変お手数ではありますが再インストールしてみてください。再インストールしたらOKだった、という事例を聞きましたんで。
Python & Spark でdashDBからデータを読み込んだメモ

IBM Data Scientist Experience の Python2 with Spark1.6にて実行
(1）クレデンシャル（資格情報）を定義
あらかじめDSXに自分のdashDBを登録しておいたので、"insert to code"をクリックして設定。（ユーザー名とパスワードは伏字にして..ます）
<img width="1273" alt="Screen Shot 2016-11-16 at 17.46.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/149522/5aae0167-7db9-9511-923e-7393ed2e45ff.png">

```
credentials_2 = {
  'port':'50000',
  'db':'BLUDB',
  'username':'dashXXXXX',
  'ssljdbcurl':'jdbc:db2://dashdb-entry-yp-dal09-07.services.dal.bluemix.net:50001/BLUDB:sslConnection=true;',
  'host':'dashdb-entry-yp-dal09-07.services.dal.bluemix.net',
  'https_url':'https://dashdb-entry-yp-dal09-07.services.dal.bluemix.net:8443',
  'dsn':'DATABASE=BLUDB;HOSTNAME=dashdb-entry-yp-dal09-07.services.dal.bluemix.net;PORT=50000;PROTOCOL=TCPIP;UID=dashXXXX;PWD=XXXXXXXXXXX;',
  'hostname':'dashdb-entry-yp-dal09-07.services.dal.bluemix.net',
  'jdbcurl':'jdbc:db2://dashdb-entry-yp-dal09-07.services.dal.bluemix.net:50000/BLUDB',
  'ssldsn':'DATABASE=BLUDB;HOSTNAME=dashdb-entry-yp-dal09-07.services.dal.bluemix.net;PORT=50001;PROTOCOL=TCPIP;UID=dash7836;PWD=82f9d02e61da;Security=SSL;',
  'uri':'db2://dashXXXX:XXXXXXXXXXX@dashdb-entry-yp-dal09-07.services.dal.bluemix.net:50000/BLUDB',
  'password':"""XXXXXXXXXXXXX"""
}
```
(2) データ取得用の関数を定義
参考にしたサイト --->  http://stackoverflow.com/questions/37688993/how-to-use-pandas-on-spark-notebook-data-on-dashdb-in-python

```
def getDashData(credentials,schemaName , tableName):
    from pyspark.sql import SQLContext
    sqlContext = SQLContext(sc)
    props = {}
    props['user'] = credentials['username']
    props['password'] = credentials['password']
    table = schemaName + '.' + tableName     
    return sqlContext.read.jdbc(credentials['jdbcurl'],table,properties=props)
```

(3) dashDBからデータを取り出し& 先頭１０レコードを確認

```
df_dash = getDashData(credentials_2 , 'DASH7836', 'TEST1' )
df_dash.toPandas().head(10)
```
<img width="259" alt="Screen Shot 2016-11-16 at 17.56.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/149522/8ce83066-ebfe-4c0f-8c18-820eb91a293c.png">
レガシープロジェクトを乗りこなす

>`1997/02/12`

コードベースに残された最古のコメント。
まぎれもないレガシープロジェクト。仕様書の類いは無い。
このプロジェクトにアサインしてから実施したいくつかのノウハウを紹介する。

# リセットボタンを用意する

開発環境は以下。

- Windows10
- VisualStudio2015 （統合開発環境）
- TeamFoundationServer （ソース管理）
- Visual C++

TeamFoundationServer（以下、TFS）でバージョン管理をはじめるところがスタート地点。**「なにも加えず、なにも除かれていない状態」**を初期バージョンとしてチェックインする。

これ以降の変更でどんな過ちがあっても、リセットボタンを押せる。


# 「削除」からはじめよ

1. 新機能の追加
2. 機能の拡張
3. デザインの改良

バックログに積まれたタスクはだいたいが`Add`か`Update`に分類されるが、大事なのは`Delete`。徹底して削る。

- 動作要件が更新されたことでサポート外の環境はできていないか
- 使用されていない機能（リソース）は無いか

ソリューション、プロジェクト、ファイル、コード、それぞれの単位で視点を変えながら削っていく。`Delete`作業時は、`Add,Update`のことを考えてはいけない。

## チェックインの粒度

小さいほどよい。

- 不要になったファイル A.cpp,A.h を削除
- B.cpp からinclude文を削除

というケースもあるので、影響範囲を考慮しつつ作業する。
2つのコンテキストを一度に作業するとリセットせざるを得ない状況がツラいので**「粒度は小さく」**が原則。

## チェックイン前のリビルド

IDEにはコンパイル時間の短縮を目的としたプログラムオブジェクトのキャッシュ機能が備わっている。VisualStudioもこの機構のおかげで再コンパイル時間が短縮されるのだが、削除したヘッダーをincludeしているファイルが再コンパイルされずビルドがとおってしまうケースがある。

チェックイン前にはリビルドを実施し、キャッシュを無効化した状態でビルドが通ることを確認する。

# リファクタリング

`fst`、`rmv`、`filenm`、`memorierror`、`r`

一時変数、メソッド、クラス、定数、名前空間。
配列を回したいだけなら`for(int i=0;i<MAX;i++)`でいい。使い捨て感があって逆にいい。

上述している`r`は何を指していたか。

```cpp
RECT r;
view1.GetClientRect(&r);

// view1の矩形に対する処理

view2.GetClientRect(&r);

// view2の矩形に対する処理
```

使いまわすから`名無しのr`？
当時は1997年、でもいまは2016年。これを見過ごしてはいけない。小さな一歩が大きな前進。肝に銘じよう。小さな負債はウシジマくん。これも銘じよう。

リファクタリングを一言で説明するなら、**「挙動は変えず保守性、可読性を高める作業」**

重要なのは、コードブロックが小さく、意味が理解できるのであれば`r`でもOKだということ。長ったらしい名前をつけることがリファクタリングの本質ではない。

自分的リファクタリングの優先順位

1. constの追加
2. ネストの排除
3. スコープの短縮
4. 名前の最適化

`constの追加`は、もっとも間違いが小さく、得られる効果が大きいことを実感している。不変という記号は最高の可読性を担保してくれる。


# 仕様化テスト：コメントを書く時間でテストを書く

コメントを安易に書き込んではいけない。
コメントというものは、書き込んだ時点から古くなる一方、コードがアップデートされ整合性がとれなくてもエラーも吐かない、役立たずに成り果てる可能性があるからだ。私はこれを**「緑の穀潰し」（コメントは緑色にハイライトされる）**と呼び、忌み嫌っている。

じゃあどうする。テストプロジェクトをソリューションに追加した。仕様が明確になっていないファイルを放り込んでテストで囲んだ。ファイル間の依存が強すぎてプロジェクトに追加するのが困難なケースもあった。そんなときはコードの断片だけを切り取ってテストで囲んだ。やらないよりはやったほうがマシ。その断片だけでも動作が明確になったのなら`++`。

仕様化テストのいいところは、プロダクションコードと直結していることだ。クラスの振る舞いが変わればテストが赤くなる。クラスの不具合か、テストの修正が必要なのか。小さな検問をパスするたびにプロダクションコードは洗練されていく。素晴らしい！

# 動いているコードに手を加えることに対する拒否感に対するマインド

私はしばしば、「動いているものを変えないように」と諭されることがあります。もしかすると無鉄砲に無秩序に--ときには破壊的に！--変化をもたらしていた時期もあったかもしれません。

でもこのプログラムを一番よく理解しているのは誰であるべきでしょうか。

将来、コードを保守していく自分たちです。

そこには「祈り」や「推測」は持ち込んではいけない。「責任感」と「当事者意識」をもって取り組むことが大事なのではと思います。

いくつかのレガシープロジェクトと対峙た経験から得た最大のものは「やりきる覚悟」でした。「やりきる覚悟」さえあれば、失敗はもはや成功と同意。みなさん、本日もお疲れ様です。
[Laravel]タスクスケジュール設定Cronインストールから

# cronインストール

## 動作確認

``` bash
/etc/rc.d/init.d/crond status
```

* インストールされているかを確認

## インストール

``` bash
yum install -y crontabs vixie-cron
```

* インストール確認

``` bash
/etc/rc.d/init.d/crond status
```

## cron起動

``` bash
/etc/rc.d/init.d/crond start
```

## 自動起動の確認

``` bash
chkconfig --list crond
```

## サービスを追加

``` bash
chkconfig --add crond
```

## crontabにLaravelのタスクエントリを追加

``` bash
crontab -e
```

``` bash
* * * * * php [プロジェクトのパス]/artisan schedule:run >> /dev/null 2>&1
```

* 以上でcronが起動して毎分Laravelのタスクスケジュールが起動します
* ログを確認する時は「/var/log/cron」から確認できます。

## スケジュール追加

* /app/Console/Kernel.phpを編集

``` php
    protected $commands = [
        \App\Console\Commands\Inspire::class,
        \App\Console\Commands\Hoge::class,  // 追加
    ];


    protected function schedule(Schedule $schedule)
    {
        $schedule->command('inspire')->hourly();
        $schedule->command('hoge')-> everyFiveMinutes();  // 5分毎に実行
    }
```

* /app/Console/Commands/hoge.phpを作成

``` php
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;



class Hoge extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'hoge';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        Storage::disk('local')->put(date("Ymd_His").'.txt', 'message');
    }
}
```

* これで5分毎にログを記録するスケジュールが作成されます
Xcode betaを使っているとpod trunkに失敗する時

pod trunkに失敗する時

`sudo xcode-select -switch /Applications/Xcode81.app`

stable版のxcodeにxcode-selectして切り替える

Xcodeのstable版を立ち上げてビルド一回走らせる

`pod trunk push XXXX.podspec --allow-warnings --verbose`

これでOK

こつはxcode-selectした後にxcodeでビルドすること
Cognos BI でレポート実行時のクエリー発行を並列化する方法

Cognos BIでレポート実行時にクエリーがデータソースに発行されますが、デフォルトではクエリーは一個一個順次発行されます。
これがCognosの仕様上の動作で、変更できないと思われている方が意外と多いので、手順を紹介しておきます。

Report ServiceやBatch Report Serviceの詳細設定に以下を設定します。
※設定された数値は例なので、環境ごとに調整をお願いします。
　RSVP.CONCURRENTQUERY.ENABLEDFORINTERACTIVEOUTPUT = true
　RSVP.CONCURRENTQUERY.NUMHELPERSPERPROCESS = 4
　RSVP.CONCURRENTQUERY.MAXNUMHELPERSPERREPORT = 2

【Technote:How to enable Concurrent Query execution in Cognos 8】
http://www-01.ibm.com/support/docview.wss?uid=swg21342330

こちらも手順がわかりやすいのでご参照下さい。
【Steps to setup concurrent query execution】
http://raulparracognos.blogspot.jp/2014/01/steps-to-setup-concurrent-query.html

・RSVP.CONCURRENTQUERY.NUMHELPERSPERPROCESS について
Report Serviceのプロセス(BIBusTKServerMain)1個あたりに起動するQuery Execution Helperの数を指定します。
Query Execution Helperとは、同時処理用のスレッドのイメージです。
この設定値により、データソースの接続数を考慮した以下のチューニングが必要です。
RSVP.CONCURRENTQUERY.NUMHELPERSPERPROCESS = 4と設定した場合に、Report Serviceプロセス=8、高親和性接続=2、低親和性接続=8、にしていたとすると、
データソースへの接続数は、8プロセス x (2高親和 + 8低親和 + 4Helper) = 112接続となります。


この場合、CQEConfigファイルでのPoolSizeの設定で以下の変更が必要です。
DBConnectionPoolセクションのPoolSize=40 → 112に変更
※ここの考え方が違いました。CQEConfig.xmlの設定は、各プロセスに対する設定なので、1プロセスでの接続数は 2 + 8 + 4 = 14接続となりますので、デフォルトのPoolSize=40のままで大丈夫です。


・RSVP.CONCURRENTQUERY.MAXNUMHELPERSPERREPORTについて
1レポートあたりで使用できる最大Query Execution Helper数のリミット値の設定です。


・RSVP.CONCURRENTQUERY.ENABLEDFORINTERACTIVEOUTPUTについて
同時クエリー発行を許可するための設定です。

・Report Authoring中のクエリーのプロパティ設定
以下のプロパティをConcurrentに設定が必要です。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/6a91bf97-9662-b04b-fdf7-f2239b0865f6.png)
md2googleslidesを使ってMarkdownを簡単にパワーポイントのスライドにする

# TL;DR

https://github.com/googlesamples/md2googleslides :thumbsup:

# Markdownをパワーポイントのスライドにしたい

Markdownをスライドにする場合，次のような方法が思いつきます．

* reveal.jsとかpandocあたりでどうにかする
* ブラウザのAddonでmdを変換表示するという荒業も使えます．
    - [Markdown Preview](https://chrome.google.com/webstore/detail/markdown-preview/jmchmkecamhbiokiopfpnfgbidieafmd)
    - [Markdown Slides](https://chrome.google.com/webstore/detail/markdown-slides/ndpkdbdonkcnidnnmdgphflfcojnhoaa)
* スライド形式に対応したMarkdownエディタで書いて，エクスポートなり印刷する

ただ，いずれにせよHTML，PDFには簡単に変換できるものの，パワーポイントにするのが難しいという課題があります．
なぜかPPT(X)に変換するライブラリ的なものが無い．

# google slideでmd -> PPTX 変換

* google slideはPPTXでエクスポートできる．
* google slideはAPIでスライドをだいたい操作できる
    * cf. [Google Slides APIが公開されたので使ってみた
](http://qiita.com/howdy39/items/be30170f8722c6837ea5)

つまり，Markdownをパースして，google slide APIのリクエストに変換して投げつけるソリューションがあれば，ほぼ目的は達せられます．

そしてついに神は降り立った．[md2googleslides](https://github.com/googlesamples/md2googleslides)

# 使い方

npmが使えることが前提．
[md2googleslides](https://github.com/googlesamples/md2googleslides)のInstallation and usageを読めば分かる．

# 感想

若干記法の融通がきかない部分があるとか，エラーメッセージがバックトレースだけなので，Markdown上で何をミスったのかわからんとか，そっけない部分はありますが，PPTXエクスポート可能なスライドがサクッと得られるのは素晴らしい．

テーマの適用とか，PPTXをエクスポートする部分はまだ手動ですが，コードを10行も書けばなんとかなりそうなヨカン．
Markdown → スライド用Markdown変換スクリプトなどを適当にでっち上げれば，より幸せに慣れそうです．
bash / ps > プロセスが動いている時だけ"ok"をechoする > ps aux | grep wrf | grep -v grep && if [ $? ];then echo "ok";fi / プロセスが存在しない場合は";"を使う > ifは不要 / &&は返り値が0のとき、||は返り値が0以外の時に実行されます。 / watch: コマンドの出力内容が変わったときに終了するオプション

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
```

WRFという気象モデルを稼働していて、設定ミスで途中で処理が終わっていることに気づかない、ということを3回失敗した。

http://qiita.com/7of9/items/65cfb576774e98e5c52b
にて記事にした、mail送信コマンドについて、失敗時の対応も追加すればいいのだろうが、それはそれで見にくいコマンドになっていく。

別途、ps auxの結果から、特定のプロセスが動いているか調べる方法が気になっていたので、試行錯誤してみた。

以下でwrfというプロセスがあれば"ok"をechoしてくれそうだ。

```bash
$ ps aux | grep wrf | grep -v grep && if [ $? ];then echo "ok";fi
user 7992 0.0 0.0 157800 3756 pts/2 Sl+ 16:50 0:00 mpirun -np 6 ./wrf.exe
user 7994 98.9 0.7 648820 236744 pts/2 Rl 16:50 8:56 ./wrf.exe
user 7995 99.8 0.7 645596 231600 pts/2 Rl 16:50 9:01 ./wrf.exe
user 7996 99.9 0.7 664292 253360 pts/2 Rl 16:50 9:01 ./wrf.exe
user 7997 99.9 0.7 665200 255972 pts/2 Rl 16:50 9:01 ./wrf.exe
user 7998 99.9 0.7 646060 231392 pts/2 Rl 16:50 9:01 ./wrf.exe
user 7999 99.8 0.7 647028 232400 pts/2 Rl 16:50 9:01 ./wrf.exe
ok
```

`$?`の条件を反対にすれば、プロセスが停止時にメールを送ることができるかもしれない。

と思って試行錯誤しているが、`&&`を使っているので、プロセスが存在しなくなった時は`&&`以降の処理が実行されない。

### プロセスが存在しない時のために";"を使う

参考 http://jehupc.exblog.jp/15729095/

`&&`の代わりに`;`を使うことでプロセスが存在しない場合の対応ができそうだ。

実際には存在しない`wrfx`というプロセスを対象としてみた。

```bash
$ ps aux | grep wrfx | grep -v grep ; if [ $? -eq 1 ];then echo "non exist" ;fi
non exist
```

`non exist`がechoされたので、意図通りとなった。

### 補足 $?について

参考 http://qiita.com/rsooo/items/ef1d036bcc7282a66d7d#パイプで渡したコマンドの終了ステータスが知りたい
> 通常パイプでコマンドを渡すと、$? では最後に実行したコマンドの終了ステータスしか見ることができない。

上記の記載から「最後に実行したコマンドの終了ステータス」を知ることができる、ことを知った。

以下にも記載がありました。
参考 http://qiita.com/takayuki206/items/f4d0dbb45e5ee2ee698e

情報感謝です。

正常終了は0なので、上の方のコードでは1かどうかのチェックをしている。

`if [ $? -ne 0]`の方が正しい実装かもしれない。

### プロセス終了時にメールを送る

以下のbashスクリプトを用意する。対象プロセスは`wrf`。
送信先メールアドレスは適宜変更する。

```bash:check_wrf_run_exec
ps aux | grep wrf | grep -v grep ; if [ $? -eq 1 ];then echo "non exist" | mail -s "wrf stop" user@software.com ;fi
```

以下のコマンドを実行する。
(60秒置きにチェックして、wrfプロセスが終了していたら、メールを送る)。

```
$ watch -n 60 bash check_wrf_run_exec
```

<font color=red>問題点: プロセス終了後、毎分メールが届く。</font>

真面目に組むとすれば、bashでwhileを回しながらプロセス終了時のチェックをしつつ、実際に終了した時点でメールを送信して、そのスクリプトを終了する。

## 追加で学んだこと (2017/02/18)

@iruseira さんの[コメント](http://qiita.com/7of9/items/8a2cbeda4ea86bb5a115/#comment-3ee876c03a9f032d1c36)にて`&&`の返り値、`||`、watchの終了について、教えていただきました。

情報感謝です。
moment.jsメモ

## moment.jsでfromNow()で26日前が「１ヶ月前」って返される件

26日前が１ヶ月前って表示されちゃう

```
// 25日前
console.log(moment().subtract(25, 'day').fromNow());

// １ヶ月前
console.log(moment().subtract(26, 'day').fromNow());
```

`relativeTimeThreshold()`で閾値を変更することで解決する

```
// 閾値を変更
moment.relativeTimeThreshold('d', 31);

// 26日前
console.log(moment().subtract(26, 'day').fromNow());
```

...と思ったけど２ヶ月目以降やっぱずれはじめる

```
console.log('1',moment().add(-30*1+1,'day').format('YYYY/MM/DD')); // 2017/03/15 １ヶ月前 momentでは3/15から１ヶ月前になる
console.log('2',moment().add(-30*2+1,'day').format('YYYY/MM/DD')); // 2017/02/13 ２ヶ月前 momentでは2/28から２ヶ月前になってしまう
console.log('3',moment().add(-30*3+1,'day').format('YYYY/MM/DD')); // 2017/01/14 ３ヶ月前 momentでは1/29から３ヶ月前になってしまう
```



## 多言語環境下で注意したいformat変換

`moment().format('YYYY/MM')`ってすると普通は`2016/01`みたいな文字列がかえると思うが、ペルシア語環境とか（数値を文字で表す言語環境）だと`۲۰۱۶۱۰`みたいな文字列が返ってくる

```
moment.locale('fa');
moment().format('YYYY/MM'); // ۲۰۱۶۱۰
```

`moment.localeData().preparse()`を使うと期待した文字列に変換できる。

```
moment.locale('fa');
moment.localeData().preparse(moment().format('YYYY/MM')); // 2016/01
```

以下のような関数を定義しておくと良さそう

```javascript
  /**
   * localeを考慮したDateオブジェクトの書式指定の文字列変換を行う
   *
   * ペルシャ語(fa)指定の状態で単純に momentObj.format('YYYY/MM') とすると
   * 「۲۰۱۶۱۰」のような値が返ってくる
   * 「2016/01」のような値が欲しい場合は、この文字列に対し
   *  moment.localeData().preparse('۲۰۱۶۱۰');
   * とすると期待どおりの値が取得できる
   *
   * @params {Date | moment} date
   * @params {string} format
   */
  function formatDateWithoutLocalization = function(date, format){
    date = moment.isMoment(date) ? date : moment(date);
    return moment.localeData().preparse(date.format(format));
  };
```

## １月〜１２月みたいな文字列を配列セットで得る方法

https://github.com/moment/momentjs.com/blob/master/docs/moment/06-i18n/07-listing-months-weekdays.md

`moment.months()`を使う。

```
moment.months();
// -> ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]

moment.locale('en');
moment.months();
// -> ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

moment.locale('fa');
moment.months();
// -> ["ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر]


```
Python1人勉強会：第1回「Pythonの実行〜"Hello world"」

死ぬほどお世話になっている[ドットインストール](http://dotinstall.com)さんで[Python3入門](http://dotinstall.com/lessons/basic_python_v3)が公開されました。超やりたかった言語の一つなのでこれを機に勉強し始めることにしました。

# 実行環境
Cloud9を利用します。以上です。環境構築からはとりあえず逃げることにしました。python_lessonというworkspaceを作ってそこで作業しています。

# pythonの実行
`app.py`というファイルを作り、コマンドラインで実行します。ドットインストールさんではpython3.5系を使っていたので、それに合わせて

```shell-session
$ python3.5 app.py
```

で実行します。

# お約束の"Hello world"

```python:app.py
print("Hello world")
```

簡単ですね。python3.x系ではprintが関数化され、2.x系と扱いが異なるようなのですが、今後必要のない限り3.x系を使っていきたいなと思っているので3.x系の書き方でやっていきます。




今回はここまで！
書き方がシンプルでいいですね。
Rails | rails server > eventmachine.rb:530:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)

# 問題

`bundle exec rails server` しようとすると、表題のエラーが起こる。

# 解決

既に立ち上がっている rails のプロセスを殺したら解決した。

```bash
ps ax | grep rails
kill -9 [rails process id]
```

# 環境

- Rails 4.2.6

# 参考

http://stackoverflow.com/questions/34068538/when-starting-rails-server-uncaught-exception-no-acceptor-port-is-in-use-or-r









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
#6 【攻略】RubyWarrior Level6

RubyWarrior Level4の攻略
参考サイト: https://staceylearnscode.wordpress.com/2015/10/13/ruby-warrior-level-6/
参考にした人のスクリプトがめちゃくちゃ美しかったので、ロジックツリーをインスパイアさせてもらいました。

#概要
今回はcaptiveがwarriorの後ろにいるので、彼を回収してから前進しなければならない。:backwardをうまく使ってwalk!、rescue!、などをうまく使わないとcaptiveを置き去りにしてしまう。

#スクリプト
```
class Player
  def initialize()
    @health = 20
    @saved = 0
  end
  
  def play_turn(warrior)
    if @saved == 0
      if warrior.feel(:backward).empty?
        warrior.walk!(:backward)
      else
        warrior.rescue!(:backward)
        @saved += 1
      end
      
    else
      if warrior.feel.empty?
        if @health > warrior.health
          if warrior.health < 9
            warrior.walk!(:backward)
          else
            warrior.walk!
          end
          
        else 
          if warrior.health < 16
            warrior.rest!
          else
            warrior.walk!
          end
        end
      
      else 
        if warrior.health < 9
          warrior.walk!(:backward)
        else
          warrior.attack!
        end
      end
    end
    @health = warrior.health
  end
end
```
if文だらけで汚いですが、こんな感じになりました。
メソッド作ってそこに条件書いて呼び出し、という形が一番美しいと思うけど最初にその発想が出なかったのでif文でゴリゴリ書きました...
#解説

まず、

```
def initialize()
  @health = 20
  @saved = 0
end
```

ここで体力の値を@healthに、救出したcaptiveの数を@savedに収める。

次に、

```
if @saved == 0
  if warrior.feel(:backward).empty?
    warrior.walk!(:backward)
  else
    warrior.rescue!(:backward)
    @saved += 1
  end
・
・
・
end
```

ここは@saved(救出したcaptive)が0のときのみ実行するスクリプト。
後ろがemptyだったらbackwardに進み、captiveがいたら救出。

救出されたら@saved = 1となるので、以後この条件は使われなくなる。

あとは、前回と同様に逃げつつ攻撃するスクリプトを書く。
Commandパターンで戻り値が欲しい時

# 前置き
Commandパターンを実装していて、戻り値を返したくなった。しかし、CommandパターンのExecute()はvoidなので戻り値を返せない。どうすれば？

# 対処法
[stackoverflow](http://stackoverflow.com/questions/5023159/general-return-type-java) によると、Execute()の戻り値をGeneric型にすれば良いらしい。

```csharp
// 戻り値を返すコマンド
interface Command<T>
{
    T Execute();
}

class ConcreteCommandWithResult : Command<int>
{
    private Receiver _receiver;

    :
    
    public int Execute()
    {
        return _receiver.GetValue();
    }
}
```

これで確かに戻り値は返せるようになったが、戻り値を返さなくて良いコマンドもある場合、
C# のGeneric型は void を指定できないので、 `Command<void>` と `Command<T>` で分ける必要がある。

```csharp
// 戻り値を返すコマンド
interface Command<T>
{
    T Execute();
}

class ConcreteCommandWithResult : Command<int>
{
    private Receiver _receiver;

    :
    
    public int Execute()
    {
        return _receiver.GetValue();
    }
}

// 戻り値を返さないコマンド
interface Command
{
    void Execute();
}

class ConcreteCommand : Command
{
    private Receiver _receiver;

    :
    
    public void Execute()
    {
        return _receiver.Action();
    }
}
```

これでCommandパターンを満たせる。

# おわりに
なんかしっくり来ないんだよねぇ…。

そもそもCommandパターンってCommandを別々に分けていいものなの？的な。
GoFのCommandパターンはCommandインターフェース1つで実現してるのに、上記の解決方法だとCommandインターフェースが2つ必要になってしまう。

そうなると Invoker が Invoker じゃなくて Facade みたいな扱いになるんじゃないかなと。

うーん…わからん。
CoreOSのデバッグに役立つコマンド集

## user-dataの確認

gzip圧縮されたuser-dataを閲覧

使い所

* `systemctl status`で確認したところ、複数のサービスが全く起動してない、というとき
  * そもそもuser-dataの内容にエラーがあるとか、スクリプトのバグで空のuser-dataを渡してしまっている、というような可能性があるとき、これでそもそもuser-dataの内容が期待通りか確認してみる

```
curl http://169.254.169.254/latest/user-data | zcat | less
```

## etcdへの接続確認

使い所

* flanneldが起動しないとき
  * flanneldの前提条件として、etcdと通信できなければならない
  * etcdとそもそも通信が出来ない状態になってしまっている可能性があるときは、これで接続確認してみる

```
ETCDCTL_CA_FILE=/path/to/ca.pem \
ETCDCTL_CERT_FILE=/path/to/etcd-client.pem \
ETCDCTL_KEY_FILE=/path/to/etcd-client-key.pem \
ETCDCTL_ENDPOINT=https://<etcd host>:2379 \
  etcdctl ls
```
HTML5 UP!をひもとく 第0回 HTML5 UP!とは？編

次回:[第1回 30分で目を見張るWebページを作ろう編](http://qiita.com/YoHaRu55/items/b77d5cae1c61b784de35)

# HTML5 UP!とは？
HTML CSS Javascriptが一つになったレスポンシブテンプレートを配布しているサイト。
ライセンスはCC-BY3.0(Creative Commons Attribution 3.0)。
以下の条件を守れば商用・改変・再配布などなんでもOKな太っ腹のライセンス。

>表示 — あなたは 適切なクレジットを表示し、ライセンスへのリンクを提供し、変更があったらその旨を示さなければなりません。あなたはこれらを合理的などのような方法で行っても構いませんが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。
追加的な制約は課せません — あなたは、このライセンスが他の者に許諾することを法的に制限するようないかなる法的規定も技術的手段 も適用してはなりません。

via:[Creative Commons](https://creativecommons.org/licenses/by/3.0/deed.ja)
**要するにブラウザで表示されるようにHTML5 UP!へのリンクが必要**というわけ。
ソース内ではクレジットと見なされません。
また、ライセンス条文は以下をどうぞ。
[Creative Commons](https://creativecommons.org/licenses/by/3.0/legalcode)

# 使い方
1. [HTML5 UP!](https://html5up.net)にアクセス。
2. 好きなテンプレートを選んでダウンロード。
3. 圧縮されているので展開する。
4. htmlファイルを編集する。
5. まるごとアップロードする。

(注)複数のカラムが用意されている場合があるが、好きなものを選べばよい。

# 変更すべき箇所
* jQueryをCDNから読み込むようにする。
Minimaxingの場合254行(編集していない状態)の

```html:index.html
(254:)<script src="assets/js/jquery.min.js"></script>
```
を

```html:index.html
(254:)<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
```
に書き換えよう。
(この場合はGoogleCDNよりバージョン2.24を読み込んでいます。)

* IE8/9のサポートをしない場合は関連ファイルの読み込みをストップさせる。
Minimaxingの場合12/14/258行の

```html:index.html
(12:)<!--[if lte IE 8]><script src="assets/js/ie/html5shiv.js"></script><![endif]-->
(14:)<!--[if lte IE 9]><link rel="stylesheet" href="assets/css/ie9.css" /><![endif]-->
(258:)<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
```
を削除しよう。
そして、サーバーからも削除する。

* 2-6行目のコメント部分を不要なら削除しておこう。
ソースコード上にライセンスは基本的に不要です。

# 注意
## タグについて
以下のタグは一部のテンプレートにおいてクラス`default`が必要です。

* table
* li
* ol

## CSSについて
非常にサイズの大きいファイルです。
gzip圧縮やタブ・改行の削除が必要です。
また、かなり重ためのデザインです。
不要な要素は削除しましょう。
それなりのサーバー環境が必要です。

## サポートブラウザについて
公式には発表はありませんが、おそらく以下の通りです。

* IE8/9/10/11 (html5shiv.js / ie9.css / respond.min.cssを抜くとIE8/9ではデザインが崩れます。)
* Microsoft Edge
* Google Chrome
* Mozilla Firefox
* Opera

要するにモダンブラウザならOK!

---

今回はここまで。
次回からは、各テンプレートについて解説していきます。

# 「HTML5 UP!をひもとく」連載目次
* [第0回 HTML5 UP!とは?編](http://qiita.com/YoHaRu55/items/da293850257f2ebea252)
* [第1回 30分で目を見張るWebページを作ろう編](http://qiita.com/YoHaRu55/items/b77d5cae1c61b784de35)