OmniAICreator/Qiita-1.07M huggingface dataset:
RedmineのView Customize pluginでカレンダーに祝日表示

### 環境
Redmine 3.1.1、3.2.2
redmine-view-customize
https://github.com/onozaty/redmine-view-customize



### スクリプトで祝日定義
カレンダー以外にも使いたかったので全ページに読み込ませています。

Path pattern: 	/
Type: 	JavaScript
Code:

```js
HOLIDAYS = {};
HOLIDAYS["2016"] = {
  "01-01":"元日",
  "01-11":"成人の日" ,
  "02-11":"建国記念の日",
  "03-20":"春分の日",
  "03-21":"振替休日",
  "04-29":"昭和の日",
  "05-03":"憲法記念日",
  "05-04":"みどりの日",
  "05-05":"こどもの日",
  "07-18":"海の日",
  "08-11":"山の日",
  "09-19":"敬老の日",
  "09-22":"秋分の日",
  "10-10":"体育の日",
  "11-03":"文化の日",
  "11-23":"勤労感謝の日",
  "12-23":"天皇誕生日",
};
HOLIDAYS["2017"] = {
  "01-01":"元日",
  "01-02":"振替休日",
  "01-09":"成人の日",
  "02-11":"建国記念の日",
  "03-20":"春分の日",
  "04-29":"昭和の日",
  "05-03":"憲法記念日",
  "05-04":"みどりの日",
  "05-05":"こどもの日",
  "07-17":"海の日",
  "08-11":"山の日",
  "09-18":"敬老の日",
  "09-23":"秋分の日",
  "10-09":"体育の日",
  "11-03":"文化の日",
  "11-23":"勤労感謝の日",
  "12-23":"天皇誕生日",
};
```


### スクリプトで祝日のtdへholidayクラスを追加

Path pattern: 	/calendar
Type: 	JavaScript
Code:

```js
$(function () {
  var year = $("#year").val();
  var month = $("#month").val();
  $("table.cal").find("td").each(function () {
    var $td = $(this);
    if ($td.hasClass("week-number") || $td.hasClass("odd")) {
      return true;
    }
    var day_num = $td.find("p.day-num").text();
    var dateKey = ("0" + month).slice(-2) + "-" + ("0" +day_num).slice(-2);
    if (dateKey in HOLIDAYS[year]) {
      $td.addClass("holiday")
      .find("p.day-num").attr("title", HOLIDAYS[year][dateKey]);
    }
  });
});
```


### スタイルシートで祝日、土日の表示を調整

週の初めが日曜日の場合の設定になります。

Path pattern: 	/calendar
Type: 	StyleSheet
Code:

```css
/* 土曜日の文字色 */
table.cal th:last-child ,
table.cal td:last-child:not(.odd) p.day-num {
  color:blue;
}
/* 日曜、祝日の文字色*/
table.cal th:nth-child(2) ,
table.cal td:nth-child(2):not(.odd) p.day-num,
table.cal td.holiday p.day-num{
  color:red;
}

/* 祝日、土日の背景色 */
table.cal td:nth-child(2),
table.cal td:last-child,
table.cal td.holiday {
  background-color:#f6f7f8;
}
/* 前月の日付、翌月の日付のtdの背景色 */
table.cal td.odd {
  background-color:#efefef;
}
```

### カレンダーポップアップ(jQuery ui Datepicker)も対応

Path pattern: 	/
Type: 	JavaScript
Code:

```js
$(function (){
  if (window.datepickerOptions) {
    datepickerOptions.beforeShowDay = function (day) {
      var year = "" + day.getFullYear();
      var dateKey = ("0" + (day.getMonth() + 1)).slice(-2) 
                   + "-" + ("0" + day.getDate()).slice(-2);
      if (HOLIDAYS[year] && HOLIDAYS[year][dateKey]) {
        return [true, "holiday"];
      }
      return [true, ""];
    };
  }
});
```

Path pattern: 	/
Type: 	StyleSheet
Code:

```css+lasso
.ui-datepicker-calendar th:nth-child(2) span {
  color:red;
}
.ui-datepicker-calendar th:last-child span {
  color:blue;
}

.ui-datepicker-calendar td:nth-child(2) a,
.ui-datepicker-calendar td.holiday a {
  color:red; 
}
.ui-datepicker-calendar td:last-child a{
  color: blue;
}
```



### 参考画像

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/95613/a85569c4-b1f1-5a3e-74bd-08db7ad0ce7e.png)!

![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/95613/76c34882-0a5b-9c3d-3808-1bcc2ea408e6.png)
TypeScript1.8 入門③ (インタフェース)


# 概要

[前回](http://qiita.com/gcfuji/items/eb2800378d2d46fdf43d)の続き。


# TypeScriptの機能

## インタフェース
インタフェースは色々な場面で利用されます。
主に2つの役割があります。

**1. オブジェクトの型に名前を付ける。**
**2. クラスの中でメンバの実装を約束させる。**

インタフェースはざっくりゆうと、宣言を約束させる為の機能です。

①の例としては

```js:sample.ts
let getTotal = (result: {a: number, b: number}): number => {
  return result.a + result.b;
};

let result = {
  a: 43,
  b: 84
};

console.log(getTotal(result));
```

上の様なコードがあった場合、getTotal関数の引数であるresultがオブジェクトであるとします。
引数のresultオブジェクトの中身の型を指定する場合は、上記の様に少し冗長になってしまいます。

そこで登場するのが**インタフェース**です。

```js:sample.ts

interface Result {
  a: number;
  b: number;
}

let getTotal = (result: Result): number => {
  return result.a + result.b;
};

let result = {
  a: 43,
  b: 84
};

console.log(getTotal(result));
```

インタフェースを定義し、予めオブジェクトの型を定義する事で、オブジェクトの型に名前を付ける事が可能になります。
getTotalの引数部分が非常にすっきりしましたね。

### 構造的部分型
少し難しい概念にはなるのですが、TypeScriptではある型のプロパティさえ持っていればその型とみなすという考え方です。
今回であれば、resultオブジェクトにcというプロパティを持っていても、Result型とみなしてくれます。
そのおかげで、新しいResult型(cプロパティを持ったResult型)を定義しなくても、そのままResult型を柔軟に使い回す事が可能です。

> 逆を言えば、インタフェースで定義されている型を持っていないとエラーになります。

### 継承

クラスと同じ様にインタフェースも継承が可能です。
クラスの継承と違う点は、クラスは1つのクラスからしか継承できませんが、インタフェースは複数のインタフェースから継承可能です。

```js:sample.ts

interface SpringResult {
  spring: number;
}
interface FallResult {
  fall: number;
}
interface FinalResult extends SpringResult, FallResult {
  final?: number;
}

let getTotal = (result: FinalResult): number => {
  if (result.final) {
    return result.spring + result.fall + result.final;
  }
  return result.a + result.b;
};

let result = {
  spring: 38,
  fall: 95,
  final: 45
};

console.log(getTotal(result));
```

#### extendsキーワード

extendsキーワードを使えば、インタフェースを継承していく事が可能です。
インタフェースの継承は複数可能です。

#### オプション可能

インタフェースのプロパティに[?]を付ける事で、オプションプロパティにする事が可能です。
[前回](http://qiita.com/gcfuji/items/eb2800378d2d46fdf43d)の関数宣言でも出てきましたね。

これを利用する事で、柔軟に設計する事が可能になります。

> getTotalで処理の分岐を入れる必要はあります。

最終的には、SpringResultとFallResultを継承したFinalResultがgetTotalのオブジェクト引数の型になっています。

### インタフェースとクラスの組み合わせ

インタフェースとクラスを組み合わせる事で、インタフェースの実装を約束したクラスを作成する事が可能です。
例えば、

```js:sample.ts

interface GameUser {
  score: number;
  showScore(): void;
}

class User implements GameUser {
  score: number = 0;
  constructor(protected _name: string) {
  }
  sayHi(): void {
    console.log(`Hi! i am ${this._name}`);
  }
  showScore(): void {
    console.log(`score: ${this.score}`);
  }
}

```

上のコードで言えば、GameUserのプロパティの実装を約束した、Userクラスを作成する事ができます。

#### implementsキーワード

インタフェースからインタフェースを継承する際は、extendsキーワードを利用しましたが、クラスからインタフェースを継承する際はimplementsキーワードを利用します。
implementsキーワードを使えば、複数のインタフェースをクラスに継承させる事が可能になります。

また実装自体は、クラス内部で行う為、インタフェース内ではシグネチャを記載するだけでOKです。


# 終わり

インタフェースを使えば、大規模開発の設計もしっかりできるのではないかと思います。
インタフェースをしっかり定義し、インタフェースの継承を約束したクラスを作成したり、オブジェクトの型として引数の必須性を約束したり様々な場面で活躍するのではないでしょうか。

次回は、「ジェネリクス」について、解説したいと思います。

続きは次回。
【PHP】pthreadsでマルチスレッド

##インストール(Windows)

参考：[インストール手順](http://php.net/manual/ja/pthreads.installation.php)

1.phpinfo()で「PHP Extension Build」でVCを確認する。

※VCはコンパイルしたソフトのバージョン
VC6：Visual Studio 6
VC9：Visual Studio 2008
VC10：Visual Studio 2010
VC11：Visual Studio 2012
VC12：Visual Studio 2013
参考：[php関連でのvc9とvc11の違い](https://webgoto.net/347/)

※TSはThread Safe=マルチスレッド対応。NTSはNon Thread Safe=スレッド非対応。
参考:[PHP のNon Thread Safe とThread Safe の違い](http://gete.blog.shinobi.jp/Entry/41/)

2.該当するバイナリをDLする。

ダウンロード先：http://windows.php.net/downloads/pecl/releases/pthreads/

※バージョン3.0以上はPHP7対応
※PHP5.6.19をいれていたが、バージョンが古いと以下のエラー。バージョン2.0.9で動いた。

```
PHP Warning:  PHP Startup: pthreads: Unable to initialize module
Module compiled with module API=20121212
PHP    compiled with module API=20131226
These options need to match
 in Unknown on line 0
```

3.DLしたzipを展開して、各ディレクトリへ移動。
①php_pthreads.dll
→エクステンションディレクトリへ
例）C:\xampp\php\ext

②pthreadVC2.dll
→php.exeと同じディレクトリへ
例）C:\xampp\php

4.php.iniに追加
※場所はどこでもOK
extension=php_pthreads.dll


##書き方

```
<?php
 class TestThread extends Thread{
    /**
    * @Overide
    * startしたときに呼ばれる
    */
    public function run(){

    }
}

$testThread1 = new TestThread();
$testThread1->start();
```
Photoshopのスタンプツールを使いこなすKarabinerサンプル

#コピーソースパネルで使えるショートカットキー

![スクリーンショット 2016-07-03 15.12.23.png](https://qiita-image-store.s3.amazonaws.com/0/35477/de875e39-31f4-a96a-9e61-be2cf761e435.png)

スタンプをちょっとだけ回したり、拡大縮小したり、位置を微調整したいときのためにコピーソースパネルがあるわけですが、こいつらいろいろショートカットキーを持ってます。

拡大縮小：　Option+Shift+[ ]
回転：　Option+Shift+ < >
オフセットを動かす： Option+Shift+ドラッグ

（ブラシサイズ、硬さはブラシHUD操作と同じ）

またパネルの「W:」「H:」や角度アイコンを左右にドラッグしたり、入力欄にカーソルを立てて上下スクロールで数値が動きます。

リセットするには、角度入力欄隣のアイコンをクリックするか、パネルメニューから初期化を選びます。

#Karabinerでモデファイ＋カーソルムーブをショートカットキー入力にする


```xml

<item>
<name>Photoshop_Modifier+Cursormove to clonesorce</name>
<identifier>private_photoshop_clonesource</identifier>
<only>PHOTOSHOP</only>
<autogen>
__PointingRelativeToKey__
ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L  | ModifierFlag::COMMAND_L,

PointingRelative::RIGHT,KeyCode::DOT,ModifierFlag::OPTION_L,ModifierFlag::SHIFT_L,
PointingRelative::LEFT,KeyCode::COMMA,ModifierFlag::OPTION_L,ModifierFlag::SHIFT_L,
PointingRelative::DOWN,KeyCode::RawValue::0x1e,ModifierFlag::OPTION_L,ModifierFlag::SHIFT_L,
PointingRelative::UP,KeyCode::RawValue::0x2a,ModifierFlag::OPTION_L,ModifierFlag::SHIFT_L,
</autogen>
</item>
```

Cmd+Opt+Shift+カーソル上下で拡大縮小、左右で角度を変えます。
Javascript等で直接入力する手段がないので、ショートカットキーを送っています。
大きく動かしたい時はパネルを操作し、微調整をこれで行ってください。
オフラインリアルタイムどう書くE05「どきどきトロッコ」をRubyで解きました

# 問題

どきどきトロッコ 横へな2016.7.2 問題
http://nabetani.sakura.ne.jp/hena/orde05dokitruck/

> あなたはトロッコに乗っています。 
> 目の前には分かれ道が！ 
> 生き残るためにはどの道に行けばよいでしょうか？

オフラインどう書くでは、失敗すなわち死である。

# アイディア

## 第一印象

あみだくじ問題は順走するか逆走するかが第一に考えるポイント。
今回の場合は逆走のほうがシンプルに考えることができるだろうと判断した。
３回目にして初の時間内にクリアできそうな予感！

## 解き方

コースを逆走して、走行可能なレールのidxを計算し、逆走しきったときのidxを走行可能なスタートポジションとして解答する。

# コード

``` rb
require 'minitest/autorun'

# Ruby on Rails とは関係ない
# 各レールパーツごとの各レールの遷移先を保持した配列
RAILS = [
  [
    [0],
    [0, 1],
    [1, 2],
  ],
  [
    [0],
    [1, 2],
    [0, 2],
  ],
  [
    [0, 1],
    [1],
    [0, 2],
  ],
  [
    [0, 1],
    [1, 2],
    [2],
  ],
  [
    [0, 2],
    [1],
    [1, 2],
  ],
  [
    [0, 2],
    [0, 1],
    [2],
  ],
  [
    [0],
    [],
    [2],
  ],[
    [],
    [1],
    [2],
  ],
  [
    [0],
    [1],
    []
  ]
]

def parser input
  input.split("").map{|s| s.to_i - 1}
end

def encode ary
  return "-" if ary.empty?
  ary.sort.map{|i| %w(a b c)[i] }.join("")
end

def main input
  rail_ids = parser input
  reverse_rail_ids = rail_ids.reverse

  alive = [0, 1, 2]
  reverse_rail_ids.each do |id|
    alive = alive.map{ |i| RAILS[id][i] }.flatten.uniq.compact
  end
  encode alive
end

class TestDokidokiTruck < Minitest::Test
  def test_dokidoki_truck
    assert_equal(main("1728398"), "bc" )
    assert_equal(main("789"), "-" )
    assert_equal(main("274"), "ac" )
    assert_equal(main("185"), "abc" )
    assert_equal(main("396"), "ab" )
    assert_equal(main("1278"), "abc" )
    assert_equal(main("7659832"), "a" )
    assert_equal(main("178"), "bc" )
    assert_equal(main("189"), "ab" )
    assert_equal(main("197"), "a" )
    assert_equal(main("278"), "ac" )
    assert_equal(main("289"), "bc" )
    assert_equal(main("297"), "a" )
    assert_equal(main("378"), "ac" )
    assert_equal(main("389"), "b" )
    assert_equal(main("397"), "ab" )
    assert_equal(main("478"), "c" )
    assert_equal(main("489"), "bc" )
    assert_equal(main("497"), "ab" )
    assert_equal(main("578"), "bc" )
    assert_equal(main("589"), "b" )
    assert_equal(main("597"), "ac" )
    assert_equal(main("678"), "c" )
    assert_equal(main("689"), "ab" )
    assert_equal(main("697"), "ac" )
    assert_equal(main("899"), "b" )
    assert_equal(main("7172"), "ac" )
    assert_equal(main("54787"), "bc" )
    assert_equal(main("83713"), "bc" )
    assert_equal(main("149978"), "-" )
    assert_equal(main("159735"), "abc" )
    assert_equal(main("1449467"), "abc" )
    assert_equal(main("9862916"), "b" )
    assert_equal(main("96112873"), "ab" )
    assert_equal(main("311536789"), "-" )
    assert_equal(main("281787212994"), "abc" )
    assert_equal(main("697535114542"), "ac" )
  end
end
```

```
% ruby dokidoki_truck.rb
Run options: --seed 63120

# Running:

.

Finished in 0.009959s, 100.4142 runs/s, 3715.3250 assertions/s.

1 runs, 37 assertions, 0 failures, 0 errors, 0 skips
```

# 感想

今回は参加できなかったので自宅でもくもく解きました。
３０〜３５分くらいで解けたので、初の時間内クリア！
８月は会場で生死を賭けた戦いを勝ち抜きたい。
phpbrew installでビルド関係のエラーが出るとき

phpbrewをインストールした後

```
$ phpbrew install php-7.0.8 +default
```
を実行すると、phpのビルド関係のエラーが続出
(結論としてはphpのビルドに必要なツールが足りなかっただけ)

##そもそもcコンパイラない

```
Error: Configure failed:
The last 5 lines in the log file:
checking for cc... no

checking for gcc... no

configure: error: in `/root/.phpbrew/build/php-7.0.8':

configure: error: no acceptable C compiler found in $PATH
```
gccインストール

```
$ yum install gcc
```

##libxml2ないっす
```
Error: Configure failed:
The last 5 lines in the log file:
checking for strftime... (cached) yes

checking whether to enable LIBXML support... yes

checking libxml2 install dir... no

checking for xml2-config path... 

configure: error: xml2-config not found. Please check your libxml2 installation.
```

libxml2インストール

```
$ yum install libxml2-devel
```

##BZip2ねーよ
```
Error: Configure failed:
The last 5 lines in the log file:
checking for gzgets in -lz... yes

checking whether to enable bc style precision math functions... yes

checking for BZip2 support... yes

checking for BZip2 in default path... not found

configure: error: Please reinstall the BZip2 distribution
```

BZip2インストール

```
$ yum install bzip2-devel
```

##mcryptのヘッダーが見つからないってさ
```
Error: Configure failed:
The last 5 lines in the log file:
checking for alloca... (cached) yes

checking for working memcmp... yes

checking for stdarg.h... (cached) yes

checking for mcrypt support... yes

configure: error: mcrypt.h not found. Please reinstall libmcrypt.
```

libmcryptインストール

```
$ yum install libmcrypt-devel
```

##readlineのへっだーないっす
```
Error: Configure failed:
The last 5 lines in the log file:
checking for utsname.domainname... yes

checking for PSPELL support... no

checking for libedit readline replacement... no

checking for readline support... yes

configure: error: Please reinstall readline - I cannot find readline.h
```

readlineインストール

```
$ yum install readline-devel
```

##まとめ
phpのビルドに必要なツールを事前にインストールしておきましょうというお話だった。
phpbrew install するとバイナリ版のダウンロードではなく、
ソースのダウンロードとビルドが行われるんですね...
Locale Dir Setting

# Default Locale Setting

```rb
# config/applicaiton.rb
  class Application < Rails::Application
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
  end
```

```bash
config/locales
├── en.yml
├── ja.yml
└── ja_model.yml
└── ja_recapcha.yml
```

In default setting, Rails only includes 'rb' file, or 'yml' file located in 'config/locale'. This is kind of inconvenient.

# My setting

```rb
# config/applicaiton.rb
  class Application < Rails::Application
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
  end
```

My locales is placed like:

```bash
config/locales
├── en.yml
├── gem
│   └── recaptcha.yml
├── ja.yml
└── models
    ├── user.yml
    └── profile.yml
```
Timexのlocal timezoneの扱いでハマったこと


## 状況

JSTの現在時刻を取得しようとして、`Timex.DateTime.local/0`を実行したところ、AmazonLinuxでは動作するのに手元のCentOSでは動作しない・・という事象が発生。このバグの調査過程でTimexのlocal timezoneの取得処理を調べたのでまとめる。

## 環境

Elixir 1.3.0
Timex  2.1.6

## 原因

TimexではTZ環境変数を再優先で利用するが、`JST-9`の書式は利用できず、`Asia/Tokyo`の形式しか利用できない。
今回の環境では、CentOS側にのみ`TZ=JST-9`が設定されていたのが原因だった。

## 概要

[ドキュメント](https://hexdocs.pm/timex/Timex.Timezone.Local.html)にある通り、Linuxでのtimezoneは以下の順に取得していき、取得できたらそれを利用する。

1. TZ環境変数
1. /etc/timezone
1. /etc/sysconfig/clock
1. /etc/conf.d/clock
1. /etc/localtime
1. /usr/local/etc/localtime

今回問題になったのがTZ環境変数に`JST-9`と設定してあると、Timex上では `Asia/Tokyo` の書式しか利用できないためにエラーになるということだった。
これは、[Tzdata](https://github.com/lau/tzdata)を利用して、timezoneを判定しているため。

呼び出しの流れは以下のとおり。

1. Timex.DateTime.local/0
1. Timex.Timezone.local/1
1. Timex.Timezone.get/2
1. Timex.Timezone.name_of/1
1. Tzdata.zone_exists?/1
1. Timex.Timezone.lookup_posix/1

`Tzdata.zone_exists?/1`で、falseが返された後に `Timex.Timezone.lookup_posix/1`で全てのTzdataからチェックをかけているが、`JST-9`の書式は判定できないので、`{:error, {:invalid_timezone, tz}}`が返される。

## まとめ

日付処理は面倒な処理が多いのでTimexを多用するものの、ちょっとしたことで結構ハマる。なので、Timexあるあるがもっと増えると嬉しいと思った。
また、1.3で導入された`Calendar module`も試して、導入を検討していきたい。
Matplotlib をダウンロードする道のり

#Matplotlibをダウンロードするのがめんどいのでちょっとメモメモ
##動作環境
Release:	Ubuntu: 16.04
##本題
```bash
#Virtualenvをダウンドードと起動
virtualenv env
. env/bin/activate
#matplotlibをダウン
ドード
```

matplotlibをダウンロードした際エラーが出たら、いろいろダウンロードしてみましょ。

freetypeがない場合は

```bash
sudo apt-get install libfreetype6-dev
```

 error trying to exec 'cc1plus': execvp: No such file or directory
上記のエラーが出た場合はこれを、、 

```bash
sudo apt-get install g++
```
How to setup spring

# Spring
Spring is a Rails application preloader. It speeds up development by keeping your application running in the background so you don't need to boot it every time you run a test, rake task or migration.
(from https://github.com/rails/spring)
# How to setup Spring

```bash
bundle exec spring binstub rspec
# then
bundle exec rails s -p 3001
```
# Check if it's working

```bash
$ bundle exec spring status
Spring is running:

 2780 spring server | AppName | started 1 min ago
```

Enjoy.
Google Chrome | ショートカット | Ctrl+Y で「進め」ないなら Ctrl+Shift+Z を使えばいいじゃない。

# 問題

テキストを編集している時。

`Ctrl(Command)+Z` で「戻」ったあと。
`Ctrl(Command)+Y` で「進」もうとすると。。。

# な、なんじゃこりゃー！

Chrome の履歴画面が開いてしまう。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/838110b0-1bf1-d7ee-ea34-de9fdfd7a5f8.png)

# 解決

`Ctrl(Command)+Shift+Z` でOK。

# 環境

- Mac OSX El Capitan
- Google Chrome 50.0.2661.102 (64-bit)

# 参考

- http://webapps.stackexchange.com/questions/44355/how-do-i-do-a-redo-after-undo-ctrlz-in-twitters-tweet-compose-box








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Express✕jade テンプレートからnode.jsのメソッドを呼ぶ方法


jadeで日付をフォーマットしたくなって少し調べたのでメモ

まずは単純に読んでみた

```index.jade
~省略

div #{moment().format('YYYY-MM-DD')}

省略~
```

はい、そうね、怒られるよね。

```
[ERROR] error - { TypeError: ~/index.jade:10
     8|
     9|
  > 10|    #{moment().format('YYYY-MM-DD')}
    11|
    12|
    13|

moment is not a function
```

答えはここに
http://stackoverflow.com/questions/12419396/how-do-i-display-todays-date-in-node-js-jade

`express`の`locals`に任意の名前で生やしてあげればよいとのこと。
	
```app.ts
import express = require('express')
import moment = require('moment')

let app = express()
app.locals.moment = moment
```


解決。
Meteorのあんちょこ꒰｡･ω･`;꒱ CoffeeScript

# 目的

- Meteorを他のスクリプト言語でも書けるかな？と思ってトライ。
- CoffeeScriptが古いっていうのは置いといてください。
- がんがん、CoffeeScriptで書く気負いもありません。

# 参考
- [JavaScriptのみ！Meteorで作る簡単リアルタイムWebアプリ](http://kray.jp/blog/meteor-googlemaps-chat/)

# パッケージの追加

```bash:console
$ meteor add coffeescript
```
 - .meteor/packagesにcoffee scriptが追加される。
 - 下記を見てるとEcmascriptで書くのが良さそう。

```text:packages
# Meteor packages used by this project, one per line.
# Check this file (and the other files in this directory) into your repository.
#
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.

meteor-base             # Packages every Meteor app needs to have
mobile-experience       # Packages for a great mobile UX
mongo                   # The database Meteor supports right now
blaze-html-templates    # Compile .html files into Meteor Blaze views
reactive-var            # Reactive variable for tracker
jquery                  # Helpful client-side library
tracker                 # Meteor's client-side reactive programming library

standard-minifier-css   # CSS minifier run for production mode
standard-minifier-js    # JS minifier run for production mode
es5-shim                # ECMAScript 5 compatibility for older browsers.
ecmascript              # Enable ECMAScript2015+ syntax in app code

autopublish             # Publish all data to the clients (for prototyping)
insecure                # Allow all DB writes from clients (for prototyping)
coffeescript
```

# JavascriptからCoffeeScriptに変換

```coffeescript:server/main.coffee
`import { Meteor } from 'meteor/meteor';`

Meteor.startup ->
  console.log "code to run on server at startup"
```

```coffeescript:client/main.coffee
`import { Template } from 'meteor/templating'`
`import { ReactiveVar } from 'meteor/reactive-var'`
`import './main.html'`

Template.hello.events "click button": ->
	console.log "You pressed the button"  if typeof console isnt "undefined"
	return
```

---- 

# チャットアプリを作成してみる
MVNOに乗り換えたときのメモ

# 格安SIMに切り替えるまで
即日受渡カウンターを利用せずにWebのみで切り替えたので、こうしておけばよかったという反省も踏まえてメモ

## 必要なもの
- SIMフリースマホ
- クレジットカード
- 身分を証明できるもの（免許証、保険証、住民票のどれか）

## 理想的なタイムテーブル
| 日 | ... | 18 | 19 | 20 | 21 | 22 | 23 | 24 | ... | 31 | 1 |
| :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
| SIMフリースマホ購入 | <- | -- | -- | -> |  |  |  |  |  |  |  |
| 申込パッケージ購入 | <- | -- | -- | -> |  |  |  |  |  |  |  |
| MNP転出番号取得 |  |  |  | <> |  |  |  |  |  |  |  |
| 契約申込 |  |  |  | <> |  |  |  |  |  |  |  |
| SIMカード宅配受取 |  |  |  |  |  | <- | -- | -> |  |  |  |
| 利用開始（開通）申請 |  |  |  |  |  | <- | -- | -- | -- | -> |  |
| キャリアメール利用可 | <- | -- | -- | -- | -- | -- | -- | -- | -- | -> |  |  |

#### 1. SIMフリースマホ購入（契約申込くらいまで）
- iPhoneSEを[Apple Store](http://www.apple.com/jp/shop/buy-iphone/iphone-se)で購入
- 利用開始ギリギリまでに用意すれば大丈夫だけど、契約申込するころには用意できていると気が楽

#### 2. 申込パッケージ購入（契約申込前まで）
- 音声SIM申込パッケージを[Amazon](https://www.amazon.co.jp/dp/B00PRVWMU8)で購入
  - **契約プラン**（3Gとか5Gとか）と、**SIMサイズ**はまだ気にしなくてよい

#### 3. MNP転出番号取得（契約申込直前）
- auの場合は、電話連絡して取得しなければならない
  - 口頭で教えてもらうことになるのでメモ必須
  - 転出番号と、有効期間（期限切れ日）を必ずメモすること

#### 4. 契約申込
- 申込パッケージに記載されているURLから登録フォームへ
  - **契約プラン**と、**SIMサイズ**はこのタイミングで必要
  - 本人確認書類の登録は、スマホで写真をとってアップロードするのが楽
  - 本人確認書類等に問題がある場合は、登録した電話番号に連絡がくることがあるので間違えないように
- 申込と同時に、キャリアメールの代わりに新しく使うメールアドレスを連絡し始めるとよい

#### 5. SIMカード宅配受取
- 問題なければ、申込から一週間いないくらいで届くはず
- SIMカードに記載されている端末製造番号（バーコードの数字部分）は、付随サービスなどで使うことがあるので写真をとっておくと便利

#### 6. 利用開始（開通）申請（月末まで）
- SIMフリースマホに、新しいSIMを差す
- 開通手続き書類に記載されているURLから登録フォームへ
  - 開通にするまでに1,2時間かかるので、新旧スマホを持っておくこと
  - 旧スマホが圏外表示やLTEに繋がらなくなったら、切り替え完了

### QA
#### なぜ契約申込が20日なのか？
- 解約するキャリア料金、新規契約するMVNO料金の支払いで1番損が少なそうなタイミングだからです
- キャリアの月額料金設定では1日になったら、日割りのないプランはまるっとお金を取られます
- 例えばOCNモバイルは、契約日から10日後の月が契約月になるためです

#### MNP転出番号は、契約申込より前に取得してはいけないのか？
- 転出番号には有効期間があります
- かつ、契約申込では期限切れまでの日数が短い場合は申込できないことがあります

#### キャリアメール利用可って？
- 解約するキャリアのメールアドレスを使える期間です
- 正確には月末までではなく、利用開始（開通）申請を出すタイミングまで利用可能です

#### 申込パッケージ購入って？
- OCNモバイルONEに契約申込するとき必要になるシリアルコードが記載されています
- IIJmioとかはしりません

#### 契約プランはなにがいいの？
- キャリアの利用料金確認ページで、月ごとの使用容量実績は確認できるはずです
- 自宅で固定回線のwifi利用等をしていれば、5Gで十分だと思います
  - 私自身は、[110MB/日コース](http://service.ocn.ne.jp/mobile/one/voice/charge02/?link_id=in_mobileone_navi_0003)にしました（仮に速度制限されても翌日には元に戻るし）

#### SIMサイズはどうすればいいの？
- iPhoneSEは**nano-SIM**です
- 購入したスマホの仕様を確認すれば載っているはずです
Scala SkinnyをEclipseにインポートするまで


## Skinnyのインストール
[公式](http://skinny-framework.org/)にもあるが、Macはbrewでインストールできる。

```bash
$ brew update
$ brew install skinny

# Create sample app 
$ skinny new skinny-blank-app
$ cd skinny-blank-app
$ skinny run
```

これで、http://localhost:8080にアクセスするとHello World!している。

## Eclipseにインポート
```
$ skinny eclipse
```

## ideaはこう
```
$ skinny idea
```

## 参考
[Skinny Frameworkで作ったアプリをEclipseでインポートする。](http://sohatach.hatenablog.jp/entry/2014/05/01/005141)
NASに繋がらない時

まぁた繋がらなくなった…。

```
「PC起動直後はネットワーク上で一瞬だけ見える!（そして消える…。）」
「消える前に、ログイン画面を表示させることが出来た!が、リクエストを送っても、レスポンスはなし…。」
「ファイヤーウォール落としても繋がらない!」
「しかし、pingは通る。」
「別のPCからはログインも出来る!!」
```

情けない話なのだが…。

単に、 **NAS側のIP制限がかかっていた** というオチでした。

***
 
遠因としては、ルーターの設定が飛んでIPの割り当てが変わってしまい、
偶然同じIPが振られていたPCは相変わらず繋がっていて、そうでないPCが繋がらなかった。
gmailで未読メールを検索

```
is:unread
```
で検索。

ラベルと合わせて検索の場合。

```
is:unread label:SPAM
```

実際は、SPAMの未読なんて見ないですけれどね。

処理的には、以下の方が早いのかも?

```
label:SPAM is:unread
```
gmailで複数ワードをフィルタにする時。（保存出来ない時）

複数ワードをフィルタするには、

**or**を使う。

以下、その図。

![スクリーンショット 2016-06-28 11.28.42.jpg](https://qiita-image-store.s3.amazonaws.com/0/32839/d8d94038-37a0-004b-fa77-703a59b69642.jpeg)

で、注意して欲しいのが、この図の左下。
これ**検索ボタン**なんですよね。
(これで変更が反映されたと思うと、ハマるので要注意。)

更新したいときは、右下のリンク「この検索条件でフィルタを作成」に進んで、
以下の図の「フィルタを更新」ボタンを押さないと更新されない。

![スクリーンショット 2016-06-28 11.26.57.jpg](https://qiita-image-store.s3.amazonaws.com/0/32839/aa14ac65-3f91-6c9f-0ae0-1b8f90ef368f.jpeg)

ので注意。

# まとめ

1ページ目にあるのは検索ボタン、保存は2ページ目。
なんか2アクションあって、調子悪い。
「保存出来ない!保存出来ない!!」と取り乱し注意
Elastic Netをglm関数のようにformulaで入力し、なおかつパラメータを自動でチューニングする関数を作ってみた

初投稿です。プログラムと統計を趣味で始めた初心者です。



Rでは、lm関数やglm関数で簡単に重回帰分析ができますが、未知データの予測性能を上げるにはテクニックが必要らしいです。

未知データの予測性能を上げるため、正則化回帰を行うElastic Netがあります。
glmnetパッケージはElastic Netが計算できますが、formulaで入力できず、説明変数をmatrixで入力する必要があります。

また、Elastic Netはチューニングパラメータとして、αとλがあります。
λはcv.glmnet関数でクロスバリデーションできますが、αのチューニングは自動化されてません。

そこで、Elastic Netをglm関数のようにformulaで入力し、なおかつパラメータを自動でチューニングする関数を作りました。


まず、glmnetをインストールします。

```r
install.packages("glmnet")
library(glmnet)
```

インストールできたら、以下をRのコンソールにコピー＆ペーストします。

```r
elasticnet <- function(
  formula,  family="gaussian",
  data=NULL,  offset=NULL,  by=0.05,  nfolds=10,  seed=0
){
x <- model.matrix(formula,data=data)
y <- model.frame(formula,data=data)[,1]
df <- data.frame()
for(a in seq(0,1,by=by)){
  set.seed(seed)
  df <- rbind(df,
              data.frame(alpha=a,
                         cvm=min(
                           cv.glmnet(x=x,y=y,offset=offset,
                               family=family,nfolds=nfolds,alpha=a)$cvm
               )))
}

result <- cv.glmnet(x=x,y=y,offset=offset,family=family,nfolds=nfolds,
                    alpha=df[which.min(df[,2]),1])
result$formula <- formula
result$alpha_cvm <- df
return(result)
}


predict.en <- function(result,data){
  x <- model.matrix(result$formula,data=data)
  predict(result,x)
}
```

irisの場合、以下でモデル作成できます。

```r
result <- elasticnet(Sepal.Length~Sepal.Width+Petal.Length,data=iris)
```

glm関数のように、familyやoffsetが使用できます。
byでαを探すステップ、nfoldsでクロスバリデーションの分割数、seedで乱数種を設定できます。

予測は、predict関数のように以下で行えます。

```r
result <- predict.en(result,data=iris)
```


係数はcoef関数で計算できます。

```r
coef(result)
```


なお、上記関数は大規模な計算には不向きです。
Angular2 , Google CLOUD ENDPOINTS

I had a problem "avoid 'cannot read property ****** of undefined' errors ..." .

```maybe.service.ts
function getPerson:  Promise<FooBarResponse>(){
  var arg:ArgFooBarPeople = new ArgFooBarPeople();
  return new Promise<FooBarResponse>(
            (resolve,reject) =>
            { gapi.client["foobarapi"]["person"].all(arg).execute(
                    (response:any)=>{
                        resolve(response);
                    });
            }
        );
}
```

``` maybe.component.ts
function load(){
    this._foobarService.getPerson()then(
             (response:FooBarResponse):void =>{
                    console.log(response);
                    this.fooBarResponse = response;
        }).catch( (error)=>{this.error="error !!"});
}
```
【windows7】Windowsのcmdでtelnetクライアントを使う方法


参考：[Windows 7 で telnet コマンドを使う](http://blog.heiichi.com/?eid=805729)

有効化すれば、cmdでtelnetクライアントが使える。
「コントールパネル」-「プログラム」-「Windowsの機能の有効化または無効化」

![image.png](https://qiita-image-store.s3.amazonaws.com/0/34560/c5208ed9-5a13-3de4-1609-84106fada4f2.png)


###サーバの疎通確認などに使う

```
#telnet IPアドレス ポート番号(省略時は23番ポート)
telnet 127.0.0.1 8080
```
ng2-bootstrap #1 404 GET /moment



```systemjs.config.js
(function(global) {
  // map tells the System loader where to look for things
  var map = {
    'app':                        'app', // 'dist',
    '@angular':                   'node_modules/@angular',
    'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
    'rxjs':                       'node_modules/rxjs',
    'ng2-bootstrap/ng2-bootstrap':               'node_modules/ng2-bootstrap/ng2-bootstrap',
/////////////////////////////////////
 'moment' : 'node_modules/moment/moment.js',  // ADD THIS LINE 
/////////////////////////////////////
};
(omitted)
```


"typescript": "^1.8.10",
"ng2-bootstrap": "^1.0.17",
"@angular/common": "2.0.0-rc.3",
RailsでRakeタスクの作成

会社で初めてrakeファイルを触って珍紛漢紛だったので...
すこし調べてみました！！

#1.Rakeタスクファイルを生成

```ruby
$ rails g task task_sample
```

task_sampleは任意で分かりやすい名前が良いと思います！

すると`lib/tasks/task_sample.rake`が生成されるのでこのファイルに書いていきます！

```task_sample.rake
namespace :task_sample do
end
```

#2.タスクに処理を実装
ブロック内に処理を追加します

```lib/tasks/task_sample.rake
namespace :task_sample do
  desc "実行処理の説明"
  task :sample do
    puts "Hello World"
  end
end
```

#3.作ったRakeファイルを確認
```:command
$ rake -vT

#出力結果がズラ〜と並びます

...
rake task_sample:sample                    # 実行処理の説明
...
```

#4.実行する
```:command
$ rake task_sample:sample
Hello World
```

#5.DBに接続する場合
```lib/tasks/task_sample.rake
#モデルにアクセスする場合は :environment　を指定します

namespace :task_sample do
  desc "task_sample_use_model"
  task :task_model => :environment do
    puts User.first().to_yaml  #Userモデルを参照する！
  end
end
```

実行すると

```:command
$ rake task_sample:task_model
--- !ruby/object:User
attributes:
  id: 1
  name: 鈴木
  age: 21
  day: 2001-01-01
  created_at: 2014-01-12 07:09:56.000000000 Z
  updated_at: 2014-01-12 07:09:56.000000000 Z

```

定期的なメンテナンスなどする際はrakeが便利そうなので使ってみたいと思います
夜な夜な夜なべしてサーバレスアーキテクチャにTRY!!

自己満足度★×∞
JavaScript＋S3のWebホスティング機能でSPA
→AWS API Gatewayで外部公開
→AWS Lambda＋DynamoDBでマイクロサービスを作成
http://blog.serverworks.co.jp/tech/2016/06/06/what_is_serverless/

#1. AWS Lambda事始め
http://qiita.com/Keisuke69/items/fc39a2f464d14480a432
Mavenプロジェクトを整備してLambdaサンプルを作成：勿論Java!!(!?)...コンパイル言語のJavaだとLambdaのインラインエディタが使えないのね。

#2. API Gatewayに登録
ここで少々嵌る。API GatewayとLambdaのマッピングがうまくいっていない...一度作成したAPIを削除してLambdaから登録し直したらOK
http://qiita.com/r7kamura/items/6420538789da95cd2f47

#3. CSVからDynamoDBへのデータロード
Data Pipelineを使おうとしたが断念...ErrorsやWarningsなんてそう簡単に消えない。
https://docs.aws.amazon.com/ja_jp/datapipeline/latest/DeveloperGuide/dp-importexport-ddb-part1.html

#3’【方針変換】CSVからDynamoDBへデータロードするJavaアプリを実装！
AWS DynamoDB SDK for Javaを駆使。
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/AppendixSampleDataCodeJava.html
MavenにDynamoDB SDKを追加。
https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-dynamodb/1.9.0
Java8のStream/ラムダ式コーディングをやってみたよ。
http://acro-engineer.hatenablog.com/entry/2014/03/12/112402

#4. 接続先DynnamoDBのRegion変更方法
ここで少々嵌る。DynamoDB Java SDKの接続先Regionがどうしてもus-east-1(デフォルト)になる(日本でなく太平洋を渡ってしまう)...AmazonDynamoDBClilentの接続先Regionを変更する方法を突き止めた！
https://java.awsblog.com/post/Tx2IHRMVOFHSUO1/Working-with-Different-AWS-Regions

#5. High-Level API: DynameDBMapperもチェキ。
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBMapper.html

#6. LambdaアプリへのDynamoDB SDKの組み込み
これは造作もない...はずだった。
Lambdaサーバ上でAWS Credentialsを指定するにはどーすんだ？？？
→LambdaにDynamoDBアクセスロールを付与すればOK
。。。最終的には、Lambdaに割り当てていたメモリサイズ(128MB)が小さすぎてAbortしていた、という結論...(Lambda初回読み出しは高負荷)

#7. API GatewayのCORS(Cross-Origin Resource Sharing)制限に引っかかる...
この頁↓がネ申っている。
http://qiita.com/naomichi-y/items/999328ad910e5ab9589d

#8. AjaxでPOST通信するワザ
SPA(Single Page Application)の真髄、
http://codaholic.org/?p=716

#9. Web APIはとうとう完成だ。ﾊｶｾ,ｵﾒﾃﾞﾄｳｺﾞｻﾞｲﾏｽ!!
クライアント側をJavaScript/jQueryで実装中、ここでも嵌まる。JSONレスポンスがパースできない...まさか、送信時だけでなく、受信時にも「JSON.stringify()」が必要だったとは...orz
http://qiita.com/kazu56/items/56c717d98e29c6b72967

#10. SPAクライアントHTML/JavaScriptを、S3(Webホスティング機能ON)に置いて、サーバレスアーキテクチャの完成ですっ！☆☆★

。。。ここまでやって本当は、薄々気づいている。Java、要らなかったんぢゃね？
「DynamoDBへの接続も、Lambdaアプリの実装も、JavaScriptでできる（Javaの必然性はない）。
　JavaScript(コンパイル不要)なら、AWS画面上のインラインエディタで開発できる。しかも画面周りはどうせJavaScriptぢゃないか」

でも、それでも、なんといわれようと、自分はJava派なのです。。。
よく使うansibleモジュール


ansibleのタスクでは各種モジュールを利用して個別のタスクを実行します。
そこで、よく利用するモジュールについて整理します。

とはいっても経験が浅いので順次追加していく予定。

# 主要なモジュール

|モジュール名|内容|
|---|---|
|apt|Debian系のLinuxディストリビューションでapt-getコマンドを発行する|
|copy|ローカルマシンからリモートサーバにファイルを転送する|
|file|ファイル(ファイル,リンク, ディレクトリ)を作成|
|template|テンプレートファイルをパースしてリモートサーバに転送する|
|service| 特定のサービスを指定した状態にする|
|yum|RHEL系のLinuxディストリビューションでyumコマンドを発行する|

# モジュールの使用例
## apt

```yaml:aptモジュールの使用例
- name: Install vim
  apt: name=vim update_cache=yes
```
ここではvimのパッケージインストールをキャッシュのアップデートを
行ったうえで実行するという形になっている。

|パラメータ名|意味|記法例|
|---|---|---|
|name|パッケージ名|name=vim|
|update_cache|事前にapt-get updateを実行するか否か|update_cache=yes|

詳細は、
http://docs.ansible.com/ansible/apt_module.html

## copy

```yaml:copyモジュールの使用例
- name: Copy .vimrc
  apt: src=files/vimrc dest=~/.vimrc
```

|パラメータ名|意味|記法例|
|---|---|---|
|src|コピー元ファイル名|src=files/vimrc|
|dest|コピー先ファイル名|dest=~/.vimrc|


## file

```yaml
- name: Create ~/.ssh
  file: >
  path=~/sample.file
  state=file
```
stateで指定する内容に応じて他のパラメータが変化する。

- stateで指定できる内容
    - file
        - ファイルを取り扱う
    - link
        - シンボリックリンクを取り扱う
    - directory
        - ディレクトリを取り扱う


ほかにもtouch, hard, absentがあるが割愛



## template

Jinja2テンプレートエンジンを使ってsrcに指定したファイルをパースし、
destに指定したリモートサーバのディレクトリに出力する。

``` yaml:templateモジュールの使用例
　- name: Create my.cnf
    template: src=templates/my.cnf.j2 dest=/etc/my.cnf mode=0644
```

## service
RHEL系ディストリビューションでいうserviceコマンド,systemctlコマンドを実行する??

``` yaml: serviceコマンドの使用例
  - name: Restart MySQL
    service: name=mysql state=restarted
```
## yum
yumコマンドを実行する

``` yaml:yumコマンドの使用例
  - name: Install vim
    yum: name=vim state=latest
```

# 参考情報
http://docs.ansible.com/ansible/modules_by_category.html
スマホwebサイトのクリック遅延を簡単解消！

# 要旨
最近はもっぱらスマホでWebを見るほうが多くなってきました。
にも関わらず、スマホの**Clickイベントの遅延**対策が行われていないwebサイトが結構多いです。
これはイライラの原因です。

これを解消する優れたライブラリが存在していて
使い方も非常に簡単なので(数行コピペするだけ)
ぜひ皆さん使って世界から
Clickイベント遅延を駆逐しましょう！

# どうすればいいの？

１. FastClick.jsの読み込み

以下を `<head>` 以下に入れる

```
<script type='application/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.min.js'></script>
```


２. FastClick.jsの初期化

以下コードを **さっき入れたコードよりも後に**差し込む 

```
<script>
if ('addEventListener' in document) {
    document.addEventListener('DOMContentLoaded', function() {
        FastClick.attach(document.body);
    }, false);
}
</script>
```

これだけです。
スマホでaタグ等をクリックすると一瞬で読み込みが始まっているのがわかるかと思います。

# どれくらい遅延するの？

|OS     |遅延|
|:--    |:--|
|iOS    | **350ms**|
|Android| **300ms**|
この表のとおりです。

### 体感してみる
- [遅延しているのがよくわかるGoogleの動画](https://www.youtube.com/watch?v=AjUpiwvIa5A)
- [自作デモ](https://still-meadow-29630.herokuapp.com/) fastClickのデモを参考に。

# なぜ遅れるの？
ダブルタップによるズームイン/ズームアウトを検知するため。
１回タップした後、２回目のタップがされるかどうかを待っている。

# 発展

### なぜFastClick.jsなの？
JSを使わずに、遅延を解消する方法はいくつかありますが、すべてのブラウザに対応するにはJSを使うしかありません。ならば、たくさんの人が使い、テストされ尽くしたライブラリを使ったほうが安全です。いくつかライブラリがありますが、Clickイベントの遅延だけにフォーカスされているライブラリでは現状FastClick一択だと思われます。

>  I highly recommend fastclick.js. It’s heavily tested, widely used and works great on many devices.
> 拙訳： 私はFastclick.jsを強く勧める。これは非常によくテストされ、広く使われており、たくさんのデバイスでうまく機能してくれる。
> Ionic co-creator Adam Bradley
> 出展: http://blog.ionic.io/hybrid-apps-and-the-curse-of-the-300ms-delay/


### 副作用は？
- ダブルタップによるズームイン/ズームアウトが効かなくなります。

### viewportにwidth=device-width入れればいいんじゃないの？
- 一部のブラウザだけしかうまくいきません。
[参考になるページ](https://patrickhlauke.github.io/touch/tests/results/#suppressing-300ms-delay)

# 参考文献
- [Githubページ](https://github.com/ftlabs/fastclick)
- [Googleのページ ー 300ms tap delay, gone away](https://developers.google.com/web/updates/2013/12/300ms-tap-delay-gone-away)
- [Suppressing 300ms delay for touchscreen interactions](https://patrickhlauke.github.io/touch/tests/results/#suppressing-300ms-delay)
- [Hybrid Apps and the Curse of the 300ms Delay](http://blog.ionic.io/hybrid-apps-and-the-curse-of-the-300ms-delay/)
絶対パスを取得


久々にシェルスクリプト書いたらハマった。
`readlink -f` は環境依存。 `GNU corelist` 入れとけ

## ハマり

```
readlink -f PATH
```

これ。相対パスを絶対パスにしてくれるけど、万能じゃないんだな。

```
$ pwd
/home/bunzaemon/foo
$ ls
$ readlink -f ./
/home/bunzaemon/foo
$ readlink -f ./bar
/home/bunzaemon/foo/bar
$ readlink -f ./bar/baz
$
```

>-f, --canonicalize
>              canonicalize  by  following  every symlink in every component of the given name recur‐
>              sively; **all but the last component must exist**
> GNU corelist, readlink man ページより

「任意のパスを引数にさせて、 `mkdir -p`  」がコケる訳だ

## 解決？

一番確実なのは、

```
$ realpath -m ./bar/baz
/home/bunzaemon/foo/bar/baz
$ realpath -mL ./bar/baz../
/home/bunzaemon/foo/bar
```

文頭とは別の意味で、`GNU corelist` 入れとけ、、、って結論

つか、かなり昔に調べてた。コードにコメントが残ってたわ、、、
Windows の Vim で Mercurial を使う


プラグインの [ludovicchabant/vim-lawrencium](https://github.com/ludovicchabant/vim-lawrencium) を使いますが、Vim で ```set encoding=utf-8 ``` を設定していると文字化けしたりコミットできなかったりします。Windows で Mercurial を使うと、文字コードが常に cp932 になるためです。

MSYS2 を入れて、```env.exe``` を使えるようにしたうえで、
```let g:lawrencium_hg_executable='env HGENCODING=utf-8 hg'```
を設定しておくと、Windows でも utf-8 で Mercurial が動いてくれます。

---

参考: [なんだ、Windowsでも環境変数設定してコマンド実行できるんじゃん！ - Qiita](http://qiita.com/nocd5/items/ba8502de8ad9a48a38a1)
シェルのコメントをPODで書いてMarkdownにする。


シェルの複数行コメントは、 `<<EOF`

## pod2markdown のインストール

```
$ cpanm install Pod::Markdown
```

## 実行
```
$ cat test.sh
:<<'COMMENTS'

=pod

=encoding utf8

=head1 NAME

test.sh

=head1 SYNOPSIS

    $ bash test.sh

=head1 DESCRIPTION

これはテスト

=head1 FUNCTION

=head2 LIST1

    - list
    - list
    - list

=head2 LIST2

    1. list
    2. list
    3. list

=head2 TABLE

    | key | val |
    | :-- | :-- |
    | foo | bar |

=cut

COMMENTS

（略）
$ pod2markdown test.sh > test.md
```

## memo

- 実際には、
```
$ pod2markdown test.sh | perl -lpe 's/^#/##/  ; s/^\s+(\* |- |\d\. |\|)/$1/ ; ' > test.md
```
程度はして見栄えを整える。
- シェルのヒアドキュメントを `:` に喰わしているのは、`:` なしだと`source` した時に標準出力に出力されたりするから。
- もちろん `perldoc test.sh` も可能[^1]

[^1]: 日本語の設定をしっかりしてれば、問題無く表示される。
自分で次回の `wake` スケジュールを登録するシェルスクリプト


スリープ解除が必要なスクリプトを書くとき用の備忘。

Mac のみ

`bunzaemon` は適宜変更

テスト実行用に 10分毎のスクリプト作成

## script

```test.sh
next_time=$( /bin/date -r $(expr 600 + $(/bin/date "+%s") - 30 ) "+%m/%d/%y %H:%M:%S" )
/usr/bin/pmset schedule wake "${next_time}"
/usr/bin/pmset -g sched >> /Users/bunzaemon/Downloads/sched.txt

# メインの処理を書く
```

これだけ。 600 の所が、今回のインターバル 10 分を意味する。
単に次回の処理を `date` コマンドで算出させて、素直に、 `pmset` してるだけ。

## .plist


```jp.bunzaemon.wake.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>jp.bunzaemon.wake</string>
	<key>ProgramArguments</key>
	<array>
		<string>bash</string>
		<string>/Users/bunzaemon/Downloads/test.sh</string>
	</array>
	<key>StartInterval</key>
	<integer>600</integer>
	<key>StandardOutPath</key>
    <string>/var/tmp/jp.bunzaemon_wake_stdout.log</string>
    <key>StandardErrorPath</key>
    <string>/var/tmp/jp.bunzaemon_wake_stderr.log</string>
</dict>
</plist>
```


- 長引く処理なら `/usr/bin/caffeinate` で、スリープさせない様に
- `StartCalendarInterval` で指定した方が便利な場合は当然そっち
- `UserName` は、使用しない。 `pmset schedule` が、ルート権限での実行を要求する。
- `StandardOutPath` とかは、最初だけは確認するため。


## 動かしかた



```
$ ls ~/Downloads
test.sh jp.bunzaemon.wake.plist
$ sudo mv jp.bunzaemon.wake.plist /Library/LaunchDaemons
$ sudo chmod 644 /Library/LaunchDaemons/jp.bunzaemon.wake.plist
$ sudo chown root /Library/LaunchDaemons/jp.bunzaemon.wake.plist
$ sudo launchctl load /Library/LaunchDaemons/jp.bunzaemon.wake.plist
# 止める時
# sudo launchctl unload /Library/LaunchDaemons/jp.bunzaemon.wake.plist

```

これで、10分おきに、次回コマンド実行の 30秒前に mac が起きる様になる[^2]。

10分後、`sched.txt` の中身を確認して、きちんと時刻指定が追加されているのを確認。


後は、ちょこちょこ改造して、1ヶ月おきとか、1週間おきとか、二日おきとか平日とかにする。

[^2]: もちろん微妙なタイムラグはあるのだけれど。
Firebase Crash ReportingをiOS(Swift)で試してみた。#Firebase #Swift #iOS

#Firebase Crash Reportingとは？
Firebase Crash Reportingは、アプリ内での問題の情報を収集しFirebaseのダッシュボーへ正確に表示します。
ダッシュボードではアプリの状態をモニタリングしており、発生頻度の高い問題や最近の履歴を確認することができます。



#Firebase Crash Reportingの特徴
類似した問題をグループ化し、影響が大きい順に表示される。
どの問題から対応していけば良いのか一目で判断することができる。
また、スタックトレースや端末情報などの重要な情報も確認可能。
例えば端末のキャリア、メモリやストレージ、位置情報なども収集することができる。



#Firebase Crash Reportingの導入
予めFirebaseのプロジェクトとXcodeのプロジェクトをリンクさせておく必要があります。
今回は割愛させていただきます。
ライブラリの導入にはCocoaPodsを使用する。

```:Podfile
use_frameworks!
platform :ios, 'Xcode 7.0 or later'

pod 'Firebase/Crash'

target 'Your Project' do
end
```



#実装
```:ViewController.swift
//今回はサンプルを参考にボタンをクリックするとエラーを投げるようにしました。

@IBAction func didPressCrash(sender: AnyObject) {
    FIRCrashMessage("Cause Crash button clicked")
    fatalError()
}
```

#ダッシュボードに反映されました！
<img width="1181" alt="Screen Shot 2016-07-03 at 11.14.23 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/114922/94af203f-8f2b-1caf-ac55-514dc5049bca.png">

<img width="1140" alt="Screen Shot 2016-07-03 at 11.14.44 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/114922/744b6aea-30f6-ee0d-1822-8f9405eca355.png">

#注意点
シュミレーターやデバックモードだと、ダッシュボードにクラッシュレポートが上手く反映されないみたいです。実機に直接インストールし、インストール後はデバック停止ボタンを押し完全にXcodeと切断してから行ってください。
反映には時間がかかるみたいです、私の場合ですと20分以上かかりました。



#まとめ
簡単にクラッシュレポートをFirebaseに送信することができました。
現在Firebase Crash ReportingはAndroid iOSに提供されており、共にβ版です。
これからの飛躍を期待し、ぜひ既存のプロジェクトに導入してみてはいかがでしょうか。

#参考資料
[stackoverflow](http://stackoverflow.com/questions/31646853/remove-fired-location-based-notification-when-user-exits-region　"stackoverflow")
Docker コンテナが tcp6 にしか bind しないときの対処(CoreOS)

CoreOS に限らないかもしれない。

Docker コンテナに与えたポートが IPv6 にしかバインドされない(ことがある?)。docker デーモンのオプションをいろいろ弄ったけれども効果なし。

> `-p 0.0.0.0:{port}:{port}` って設定すれば良いよ(意訳)

[という情報もググると見られる](https://github.com/docker/docker/issues/2174)のだけれども、鮮度が古いらしくこれでは効かない。

解法
------

```
$ sudo sysctl net.ipv6.conf.all.forwarding=1
```

永続的に有効にするには、`/etc/sysctl.d/40-ipv6.conf` 辺りに下記の通り一行だけ記述しておくと良いはず。

```
net.ipv6.conf.all.forwarding=1
```

環境
-----

```shell-session
$ cat /etc/lsb-release
DISTRIB_ID=CoreOS
DISTRIB_RELEASE=1010.6.0
DISTRIB_CODENAME="MoreOS"
DISTRIB_DESCRIPTION="CoreOS 1010.6.0 (MoreOS)"

$ docker version
Client:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   8acee1b
 Built:
 OS/Arch:      linux/amd64

Server:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   8acee1b
 Built:
 OS/Arch:      linux/amd64
```
rubyzipを使ってS3のファイルをZIPダウンロードする


`S3` にあるファイルを一括でダウンロードする機能を作ったときのメモ。
`ruby` のZIPファイルを扱う方法は色々あるけど `rubyzip` を使ってる人が多い印象。


### `rubyzip` をインストールする

```
gem install rubyzip
```

### コントローラー

```
zip_file_name = "SampleZip-#{Time.now.strftime('%Y%m%d%H%M%S')}.zip"
zip_file = Tempfile.new(zip_file_name)

Zip::OutputStream.open(zip_file.path) do |zip|
  @targets.each do |target|
    #ファイル名を指定してエントリを作成する
    zip.put_next_entry("#{target.filename}.pdf")
    
    #S3にあるファイルのURLにアクセスしてGETしたものをZIPエントリに追加
    zip.print Net::HTTP.get URI.parse(target.url)
  end
  
  #ZIPファイルをダウンロード
  send_file(zip_file.path,{:type => 'application/zip',
                                    :disposition => 'attachment',
                                    :filename => zip_file_name})
  #temp fileを削除する                                  
  zip_file.close
end      
```

わかりやすいようにエラー処理等は省略しているのでコピペ注意
Julialangからの文字列を受け取るには

数値型だとunboxする旨の説明があったが、文字列は、どうするのか、
ググって、Githubのコードから編み出した。

```c
jl_value_t *ret = jl_eval_string(juliaScript);
if(jl_is_byte_string(ret)) {
  nullTerminatedString = (char*)jl_bytestring_ptr(ret);
}
```

jl_is_byte_stringはどうも、見つけたコードによると、
0.5から変更になるっぽい。

# 関連記事

- [Windows(MSVC)でmrubyからGPU対応のTensorflowを動かせた - non vorrei lavorare](https://abrakatabura.hatenablog.com/entry/2017/01/28/125353)
Julialangをアプリに組み込むには

# OSXでJulialangを組み込んでみて分かった

[本家のページ](http://docs.julialang.org/en/release-0.4/manual/embedding/)で書いてあるがLinuxの例で書かれているようで、OSXはPATHの設定が必要。また、いざ、アプリに組み込むとなると、ちょっと面倒だった。

# pkg-config風のツールをOSXで動かす

Julialangにもpkg-config風のツールが提供されており、これを使うことで、CFLAGSや、lIBS系のパラメータを埋めることができる。

## .jlなスクリプトとして提供されている

julia本体のPATHを設定すれば、

```bash
/Applications/Julia-0.4.6.app/Contents/Resources/julia/share/julia/julia-config.jl
```

として.jlのスクリプトを直接動かせる。また、PATHの設定をしなくとも

```bash
/Applications/Julia-0.4.6.app/Contents/Resources/julia/bin/julia /Applications/Julia-0.4.6.app/Contents/Resources/julia/share/julia/julia-config.jl --ldflags --ldlibs
```

とフルパスでjulia本体を指定し、引数に.jlスクリプトをしてすることで動かすことが出来た。

##

本家の最初のコードだと、環境変数の

```
JULIA_HOME
```

が設定されていないと動かないコードとなってします。

```c
jl_init(JULIA_INIT_DIR);
```

として、julia-config.jlで--cflagsを指定した値を使うことで、

```
DJULIA_INIT_DIR
```

が定義されるので、この制限がなくなる。

# OSX固有の注意点

julia-config.jlで--ldlibsの値を使っていれば問題ないが、-Lだけ指定
Linuxでは問題にならないが、rpathの設定をしないと、OSXでは実行時に
ライブラリの参照エラーとなる。

# Rakeファイルでこれらの情報の実践例

- https://github.com/kjunichi/mruby-julia/blob/master/mrbgem.rake

# Windowsの場合

v0.6ではひと手間必要でした。

- [アプリに組み込んだJuliaを0.6に対応するには - Qiita](https://qiita.com/kjunichi/items/4a41cb84de48f2714d27)

# 関連記事

- [mruby-juliaでPythonもmrubyから呼び出せるようになった](https://abrakatabura.hatenablog.com/entry/2016/07/02/183532)
- [Windows(MSVC)でmrubyからGPU対応のTensorflowを動かせた](https://abrakatabura.hatenablog.com/entry/2017/01/28/125353)
- [Nが現れる素数をJuliaでやってみた](https://abrakatabura.hatenablog.com/entry/2017/12/01/073641)
【Android】AndroidStudio2.1.2 ViewPagerIndicator導入メモ

1.File/Project Structureを選択
![1.png](https://qiita-image-store.s3.amazonaws.com/0/132142/a580b18f-24c8-7312-0d92-ccb887f17242.png)

2.appのDependenciesタブで、Library dependencyを選択
![2.png](https://qiita-image-store.s3.amazonaws.com/0/132142/544b2537-eedd-45ab-fe75-8ae50cf7562b.png)

3.「com.viewpagerindicator:library:2.4.1」とか「fr.avianey.com.viewpagerindicator」で検索かけるとViewPagerIndicatorのやつが出てくるのでどっちか選んだのちOK。２つの違いがよくわからんので、上手くいくほうを選ぶべし。
![3.png](https://qiita-image-store.s3.amazonaws.com/0/132142/d2db4274-78cd-ab1b-d405-d20dde200769.png)

これで上手くいかないのであればここから.aarのライブラリ落としてきてぶっこんだらいけるのでは。
https://bintray.com/populov/maven/com.viewpagerindicator:library#
Overleaf+platexでフォントを埋め込む

Overleafで正しくフォントが埋め込まれていないせいで、Google Docsとかにアップロードすると、プレビューで正しく表示されない。
フォントは埋め込もう。

例えばipaのフォントを埋め込むなら、`dvipdfmx`に`-f ptex-ipaex.map`を渡せば良い。

[Overleafでplatexを使う方法](http://3846masa.hatenablog.jp/entry/2016/02/15/003843)と、先日の[投稿](http://qiita.com/o_nishy/items/92e3b94802c6a34f08d3)を合わせて、僕のlatexmkrcファイルはこんな感じになっている。

```bash:latexmkrc
$latex = "find . -type f -name '*.tex' -print0 | xargs -0 sed -i '' -e 's/、/，/g' -e 's/。/．/g'; platex";
$bibtex = 'pbibtex';
$dvipdf = 'dvipdfmx -f ptex-ipaex.map %O -o %D %S';
$makeindex = 'mendex -U %O -o %D %S';
$pdf_mode = 3;
```
RubyでHexを数値ではなく文字列として扱う

# Stringクラスにあるhex
```irb
"34D6411230".hex
=> 226932888112
```
これはただ数値に変換されてしまう

# 自分がやりたいのはこっち
"34D6411230" => "4\xD6A\x120"
OpenSSL::Cipherで復号化したいときに、バイナリ(hex)を直接扱いづらい。
文字コードになっているものは文字を表示させて、表示できないものはエスケープしといてほしい。

# やりかた
```irb
"34D6411230".scan(/../).map(&:hex).map(&:chr).join
=> "4\xD6A\x120"
```
javascriptテストフレームワーク「jasmine（ジャスミン）」をダウンロードしてみた

# jasminとは
JasmineはJavascriptコードをテストするための振舞い駆動開発フレームワークです。 他のJavascriptフレームワークに依存しませんし、DOMも必要としません。 簡単にテストを書くことができるように、きれいで分かりやすい構文を持っています。
公式ページ（http://mitsuruog.github.io/jasmine/1.3/introduction.html）より。

- 公式ページ：http://mitsuruog.github.io/jasmine/
- 日本語化されているドキュメント：1.3
- 最新版ドキュメント：2.0

# 今回ダウンロードしたverison
- 2.4.1
- ダウンロード元：https://github.com/jasmine/jasmine/releases
    - 2.4.1 > Downloads > jasmine-standalone-2.4.1.zip をダウンロード
    - 適当なディレクトリに解凍

# ファイル構成
- 全体
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/23404/9c087c73-e8f2-bb0e-638e-1f09c8a96229.jpeg)

- lib配下
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/23404/1092015a-3209-6265-45a8-c5b27dab0823.jpeg)

- spec配下
![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/23404/a8450b6b-b114-55da-772a-860508bc5de9.jpeg)

- src配下
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/23404/1d93bc4c-5f89-4dd9-cae9-6f6c61ce4a41.jpeg)

# 各ファイルの意味（たぶん）
- SpecRunner.htmlがテストランナー？
- src配下にテストしたいスクリプトファイル
- spec配下にテストケースのスクリプトファイル
    - PlayerSpec.jsがテストケースをきったスクリプトファイル
    - SpecHelper.jsがPlayerSpec.jsで呼ばれるヘルプスクリプトファイル
- lib配下にテストに必要なスクリプトファイル

# 使えるメソッド的なもの/チュートリアル的な
- 日本語（1.3）：http://mitsuruog.github.io/jasmine/1.3/introduction.html
- 英語（2.4）：http://mitsuruog.github.io/jasmine/2.2/introduction.html
Laravelでmail送信に失敗する場合

laravelで下記のようなエラーが発生する場合の参考です。

>Swift_TransportException in AbstractSmtpTransport.php line 383:
>Expected response code 250 but got code "530", with message "530 5.7.0 Must issue a STARTTLS command first. h8sm146259pfh.49 - gsmtp
"

幾つか英語の解説があります。
http://stackoverflow.com/questions/29100877/trying-to-get-laravel-5-email-to-work


が、自分の場合はうまく行きませんでした。（エラーが変わらない）

で、参考になったのがこちらのページ
https://laravel10.wordpress.com/2015/02/22/%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A/
そのままペタっとでもいけます。

```php:.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=your_address@gmail.com
MAIL_FROM_NAME=your_name
MAIL_USERNAME=your_address@gmail.com
MAIL_PASSWORD=your_password
MAIL_PRETEND=false
```

```php:.mail.php
<?php
 
return [
    // Mail Driver
    'driver' => env('MAIL_DRIVER', 'smtp'),
 
    // SMTP Host Address
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
 
    // SMTP Host Port
    'port' => env('MAIL_PORT', 587),
 
    // Global "From" Address
    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', null),
        'name' => env('MAIL_FROM_NAME', null)
    ],
 
    // E-Mail Encryption Protocol
    'encryption' => env('MAIL_ENCRYPTION', null),
 
    // SMTP Server Username
    'username' => env('MAIL_USERNAME', null),
 
    // SMTP Server Password
    'password' => env('MAIL_PASSWORD', null),
 
    // Sendmail System Path
    'sendmail' => '/usr/sbin/sendmail -bs',
 
    // Mail "Pretend"
    'pretend' => env('MAIL_PRETEND', false),
];
```


＝＝＝＝＝＝＝＝＝
.envやmail.phpに設定が正しくされていない場合に発生。
変更後キャッシュクリアをしたほうが良い
'php artisan cache:clear'

Artisanコマンドで全ての設定ファイルを一つにまとめることができます。
'php artisan config:cache'
傾斜計 > Link > MPU-9250のCalibration > MPU-6050用オフセット調整コード

```txt:動作環境
ESP-WROOM-02
MPU-9250 https://strawberry-linux.com/catalog/items?code=12250
ライブラリ https://github.com/jrowberg/i2cdevlib/
```

MPU-9250はライブラリの関数 setXAccelOffset(), setXGyroOffset()などを使ってオフセットの調整をする。
では、そのオフセット値をどのように取得すればいいのだろうか。

以下にMPU-6050のオフセット調整のコードがあげられている。
http://www.i2cdevlib.com/forums/topic/96-arduino-sketch-to-automatically-calculate-mpu6050-offsets/

このコードをMPU-9250用に変更する必要がある。

ジャイロと加速度のオフセット調整なので、コンパスのオフセットは未消化。

実際に動かしてみたが、収束しない。