OmniAICreator/Qiita-1.07M huggingface dataset:
『Q02 数列の四則演算』プログラマ脳を鍛える数学パズル

総当たりでやってみた。
当てはまらない条件を追加していき、範囲を狭めていく方針。

#1000~9999を、各桁の間に最低一回加減乗除を入れて計算する。できた数が元の数の逆順になる数を求めよ。（引用：プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問）

例）1234 -> 1+2*3-4 = 3
　　9876 -> 9*87+6 = 789

3桁の場合
　　351 -> 3*51=153   =>  "351"=="153".reverse
　　621 -> 6*21=126   =>  "621"=="126".reverse
　　886 -> 8*86=688   =>  "886"=="688".reverse


もっといけてる書き方がありそうだが、とりあえず

```q2.rb
(1000..9999).each do |i|
  a=["", "*", "/", "+", "-"]
  b=[]
  b=i.to_s.split("")

  (0..4).each do |j|
    (0..4).each do |k|
      (0..4).each do |l|
        c=a[j]+a[k]+a[l]
        next if c==""  # 少なくとも一つ加減乗除                                                                    
        t = b[0]+a[j]+b[1]+a[k]+b[2]+a[l]+b[3]

        next if(/[^0-9]0[0-9]/=~t)||(/[^0-9][0-9]00/=~t)
        next if /[0-9]\/0/=~t # 0で割るとき                                                                        

        if t =~ /([0-9]+?)\/([0-9]+?)/
          next if $1.to_i%$2.to_i !=0 # 割り算の箇所について、余りが0以外ならば、整数でない                        
        end

        next if eval(t)<=0 # 計算結果がマイナス、0のとき                                                           
        puts i if b==eval(t).to_s.split("").reverse
      end
    end
  end
end
```

~/workspace > time ruby q2.rb

5931

real	0m18.761s
user	0m18.634s
sys	0m0.094s
safariの場合textareaのplaceholder改行問題

# 概要
safariで複数行入力フィールドtextareaのプレースホルダに改行がうまく表示されない問題に対しての調査結果と対策をメモします。

```html
<textarea placeholder='a\nb\nc'/>
```

## textareaのplaceholder改行コードについての仕様
textareaのプレースホルダの文言に改行コードが含まれる場合、表示する際に改行として扱わなければなりません。

- Mozillaドキュメント
[textarea 要素](https://developer.mozilla.org/ja/docs/Web/HTML/Element/textarea)
> placeholder
    コントロールに何を入力できるかに関する、ユーザーへの助言です。プレースホルダーのテキスト内にあるキャリッジリターンやラインフィードは、表示する際に改行として扱わなければなりません。

- W3C標準
ブラウザの標準仕様上でも、レンダリングする時に改行をしなければなりません。
[html5 textarea-placeholder仕様](https://www.w3.org/TR/html5/forms.html#attr-textarea-placeholder)
> All U+000D CARRIAGE RETURN U+000A LINE FEED character pairs (CRLF) in the hint, as well as all other "CR" (U+000D) and "LF" (U+000A) characters in the hint, must be treated as line breaks when rendering the hint. 

- Safariの動き
~~ChromeとFirefoxがOKですが、safariの場合、改行コードがうまく表示されません。~~
そもそも、プレースホルダが簡潔なヒントなので、html5仕様にも複数行を許可するものでもありません。
DOMにplaceholderの改行コードが半角スペースに置換されてしまいます。

# 対応方法
下記理由で、プログラミングで必要によってvalue属性にplaceholderの内容を設定したら、解決になります。

- placeholderが入力値がないかつフォーカスになっている状態の場合しか表示されないものです。
- value属性に含まれる改行コードが改行としてうまくレンダリングしてくれます。

次はreact+reduxの場合を具体的な例として説明します。

- componentのstateにフラグを立てます。

```js
constructor(props) {
  super(props);
  this.state = { focused: false }; // textareaにフォーカスになっているかどうかを定義
}
```

- 未入力かつフォーカスになってない場合、placeholderの内容をvalue属性に設定します。onblurとonfocusによってフラグの値を変更します。

```js
<textarea
  value={
    (!this.state.focused && this.props.myState.form.content.length ===0)
      ? 'a\nb\nc'
      : this.props.myState.form.content
  }
  onfocus={() => this.setState({focused: true})}
  onblur={() => this.setState({focused: false})}
/>
```

react+redux一方向でのデータ流れの恩恵を受けて、上記のように簡単に実現できました。

## 参考記事
- [textarea 要素内の placeholder 属性で改行するには](http://neos21.hatenablog.com/entry/2016/05/11/002151)

- [html5 textarea仕様](https://www.w3.org/TR/html5/forms.html#attr-textarea-placeholder)
certbotのhttps証明書をsystemdで自動更新

証明書は90日間有効で、期限切れまで30日以内になると証明書が再発行出来るようになります。
証明書が再発行出来るかを毎日確認して、再発行できれば発行するように設定します。
自分のOSはUbuntu16.04です

`--agree-tos`は自動で利用規約に同意するフラグです
再発行が成功すればwebサーバーをリロードします。失敗すればリロードしません。

```
sudo vi /etc/systemd/system/certbot.service
 
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --agree-tos
ExecStartPost=/bin/systemctl reload apache2
```

Type=simple
>デフォルトの値です。ExecStart で起動するプロセスはサービスのメインプロセスです。
forking – ExecStart で起動するプロセスは、サービスのメインプロセスになる子プロセスを起動します。親プロセスは、このプロセスが完了すると終了します。

Type=oneshot
>このタイプは simple と同様ですが、プロセスは、結果として生じるユニットを起動する前に終了します。

ExecStart
>ユニットの起動時に実行されるコマンドまたはスクリプトを指定します。ExecStartPre および ExecStartPost は、ExecStart の前後に実行されるカスタムコマンドを指定します。Type=oneshot は、順次に実行される複数のカスタムコマンドの指定を可能にします。
```

毎日certbot.serviceを実行するタイマーです

```
sudo vi /etc/systemd/system/certbot.timer
 
[Timer]
OnCalendar=daily
RandomizedDelaySec=1day
Persistent=true
 
[Install]
WantedBy=timers.target
```

タイマーを有効化して実行します

``` 
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
```

ログを見るには

```
sudo journalctl -u certbot.service
```


#参考サイト
- https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Unit_Files.html
- https://www.freedesktop.org/software/systemd/man/systemd.service.html
AtCoder Regular Contest 072

2017年4月22日のAtCoderの記録。言語はRubyです。

問題はこちら：[AtCoder Regular Contest 072](http://arc072.contest.atcoder.jp/)
私の回答一覧はこちら：[自分の結果](http://arc072.contest.atcoder.jp/submissions/all?user_screen_name=Linus)
制限時間100分で、30分でD、90分経過でCを正解して2問完答。
もしABCだったらAとBの問題も解かなきゃいけなかったから、Dまで全問正解できなかったと思うとあんまり良くない。まぁ、レートが伸びたから良いとしよう。

#C問題
何で手間取ったかというと「何かDPっぽい」と直感で考えてしまい、DPに囚われてしまったからである。正解は……これ、何になるんだろう。「貪欲法」って書いてた人を見かけたけど、貪欲で良いのかな。

「DPかなぁ」と
問題の例で言うと、「1 -3 1」は2回の操作で「1 -2 2」にできる。初項から第i項までの和は1, -1, 1で条件を満たす。
1つ増えて「1 -3 1 0」となった場合、まず2回の操作で「1 -2 2 0」とすると3つ目まではOK。あとは2回の操作で4つ目を-2にすれば全体が条件を満たす。めでたしめでたし……
一見上手く行くようだが、それは間違いである。「1 -3 1」の末尾に100を付け加えて「1 -3 1 100」となった場合、第4項を100から-2にするためには102回の操作をしなければいけない。この場合は、符号を逆にして「-1 2 -2 100」とすれば条件を満たし、操作は2+5+3 = 10回で済むのだ。ここで問題は、この「-1 2 -2 100」という列を考えるときに、改めて最初から考え直さなきゃいけないこと。

DPの表を埋めていく際に、1つのマスに入る値を求めるときに少し前の値をいくつか参照して計算すれば良い。そういう局所的な関係だけで解けるからDPなのだ。**最後の一つのせいで最初からもう一度再計算しなきゃいけないような場合は、DPになり得ない**ということに気づけば早めにDPを捨てられたのに。

あとは**単に「DPかな?」じゃなくて「どういう条件でDPテーブルを作れば良いか?」まで突っ込んで考えるべきだった。** DP[i][j]というような表を作るとして、「最後の1つを除いたときの操作回数がi、最後の値がj」か?いやそれが無理なのは前述のとおりだ。では……と考えると、上手いDPテーブルの作り方がないとわかり、DPの線を捨てられる。

一応、書いたコードも載せておく。arr2には全体を-1倍した配列を入れておいて、前半と同じように考えている。

```ruby
N = gets.to_i
arr = gets.split(" ").map{ |v|
	v.to_i
}

ans1 = 0
sum = 0
0.upto(N-1){ |i|
	sum = sum + arr[i]
	if i % 2 == 0 and sum <= 0 then
		ans1 += (1 - sum)
		sum = 1
	elsif i % 2 == 1 and sum >= 0 then
		ans1 += (sum - (-1))
		sum = -1
	end
}

arr2 = arr.map{ |v|
	-v
}

ans2 = 0
sum = 0
0.upto(N-1){ |i|
	sum = sum + arr2[i]
	if i % 2 == 0 and sum <= 0 then
		ans2 += (1 - sum)
		sum = 1
	elsif i % 2 == 1 and sum >= 0 then
		ans2 += (sum - (-1))
		sum = -1
	end
	
}

puts [ans1 ans2].min
```

#D問題
糸口がつかめなかったので、まず小さな数に対して勝ち負けを求めていった。
しばらく見ても条件がわからなかったが、「2-1だと負けパターンなのに、3-1と4-1と5-1だと全て勝ちパターン……ということは、2つの数の差が大きいと勝ちパターンなのか?」という点に気づき、2つの差を取ってみた。すると

- 2つの数の差が1以下だと負けパターン
- 2つの数の差が2以上だと勝ちパターン

という予想が立った。上記が実際に勝ちパターン／負けパターンであることを実際に示すには、以下の2つが示せれば良い。

- 「2つの数の差が1以下」の場合、どんな手を選んでもその結果は「2つの数の差が2以上」になってしまう
- 「2つの数の差が2以上」の場合。うまい手を選べば「2つの数の差が1以下」の負けパターンで相手の番にすることができる

略証：1回の操作は、「片方の山から2個減らし、逆の山を1個増やす」を何回か繰り返している。従って、石の個数をX,Yとしたとき、操作の前と後でX-Yは3の倍数だけ変化する。「2つの数の差が1以下」と「X-Yが-1, 0, 1のいずれか」が同値。|X-Y|が2以上ならば、適切に操作してX-Yがこの3つのいずれかになるようにできる。逆に、何らかの操作をすればX-Yが3以上増減するから、「X-Yが-1, 0, 1のいずれか」ならば、操作後のX-Yは必ずこの範囲外になる。

というわけで、コードは滅多にないほど簡単で済む。

```ruby
a,b = gets.split(" ").map{ |v|
	v.to_i
}
puts (a-b).abs <= 1 ? "Brown" : "Alice"
```

パフォーマンスは過去最高の1779、レートは1226→1306(+80)。
デザインパターン入門（導入）

※2017/05/20追記
デザインパターンの紹介順序を一部変更しました。
前提知識やパターンごとの依存関係を考慮して並び替えました。

入社一年目前後の時に「将来役に立つから」と先輩から勧められ、苦痛だったがデザインパターンを勉強しました。それから数年経って、改めてデザインパターンを勉強し直しています。私は最初デザインパターンの書籍を読んだ時、難しい単語が並んでいてどのように利用するのかわからず、自分の言葉に落とし込むことが凄く難しかったです。。復習の意味も込めてデザインパターンをもう一度熟読して、1パターンごとに実装をJava言語で再現したいと思います。

## GoFデザインパターン
[Iterator](http://qiita.com/kaikusakari/items/c388e64820bb22588c93)
[Composite](http://qiita.com/kaikusakari/items/60310c5a5003b1714896)
[Builder](http://qiita.com/kaikusakari/items/05c17b29f0324733876c)
[Factory Method](http://qiita.com/kaikusakari/items/7c35cfc1451cf23bdf46)
[Abstract Factory](http://qiita.com/kaikusakari/items/8943247246cb243b8fd6)
[Strategy](http://qiita.com/kaikusakari/items/fa1acc52dac1c08b708d)
[Flyweight](http://qiita.com/kaikusakari/items/7d6b0e403e96b4c1bd69)
Singleton
Prototype
Adapter
Decorator
Proxy
Bridge
Facade
Mediator
Chain of Responsibility
Command
Interpreter
Memento
Observer
State
Template Method
Visitor

まずはGoFのパターンを進めます。GoFを終えられることができれば、マルチスレッド、JavaEEと続く・・かもしれません。
デザインパターン入門（Abstract Factory）

この記事ではAbstract Factoryについてまとめます。
wikipediaによると「関連する一連のインスタンスを状況に応じて、適切に生成する方法を提供する。」とあります。
参考：[デザインパターン（ソフトウェア）](https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2))

以下の記事を参考にさせていただきました。
[沈思黙考：デザインパターン(Abstract Factory パターン)](http://qiita.com/morimotof/items/67a9e2a8d7e15ea321d2)
[GoFのデザインパターンをJavaで実装して理解する Abstract Factory編](https://www.xmisao.com/2013/12/11/gof-designpattern-java-abstractfactory.html)

1つのクラスから他クラスのメソッドを利用する場合、staticクラスを除いて「new クラス名()」というインスタンス化が必要です。このデザインパターンでは呼び出し元クラスにnewしていたものを、Factoryというクラス群にインスタンス生成部分を移動して、Factoryクラスが保持するメソッド経由で利用したいクラスのインスタンスを取得します。

## 実装例
ガソリンスタンドでハイオクとレギュラーを給油するケースをAbstract Factoryで表現します。

|NO|ファイル名|クラス内容|
|:--|:--|:----|
|1|AbstractFactory.java|ガソリンを給油することを定義した抽象クラス|
|2|ConcreteHighFactory.java|ハイオクを給油する具象クラス|
|3|ConcreteRegularFactory.java|レギュラーを給油する具象クラス|
|4|AbstractRefueling.java|給油抽象クラス|
|5|ConcreteHighRefueling.java|ハイオク給油具象クラス|
|6|ConcreteRegularRefueling.java|レギュラー給油具象クラス|
|7|Main.java|実行するクラス|

**Java**

```java:AbstractFactory.java
public abstract AbstractFactory {
    abstract AbstractRefueling getAbstractRefueling();
}
```

```java:ConcreteHighFactory.java
public class ConcreteHighFactory extends AbstractFactory {
    @Override
    public AbstractRefueling getAbstractRefueling();
        return new ConcreteHighRefueling();
    }
}
```

```java:ConcreteRegularFactory.java
public class ConcreteRegularFactory extends AbstractFactory {
    @Override
    public AbstractRefueling getAbstractRefueling();
        return new ConcreteRegularRefueling();
    }
}
```

```java:AbstractRefueling.java
public abstract class AbstractRefueling {
    abstract payment();
    abstract refueling();
}
```

```java:ConcreteHighRefueling.java
public class ConcreteHighRefueling extends AbstractRefueling {
    @Override
    public payment() {};
    @Override
    public refueling() {};
}
```

```java:ConcreteRegularRefueling.java
public class ConcreteRegularRefueling extends AbstractRefueling {
    @Override
    public payment() {};
    @Override
    public refueling() {};
}
```

```java:Main.java
public class Main {
    public static void main(String... args) {
        Factory fa = exec("High");
        AbstractRefueling ab = fa.getAbstractRefueling();
    }
    private static Factory exec(String env) {
        if (env == "high") {
                return new ConcreteHighFactory();
        } else if (env == "regular") {
                return new ConcreteRegularFactory();
        }
    }
}
```

以上のように、Mainメソッド上でハイオクガソリンを入れることを想定して、ハイオクガソリンを給油するクラスを受け取っています。必要であれば、Main.java内のexecメソッドにあるConclete〜Factoryを書き換えることでFactoryクラスで定義した他の機能に差し替えることができます。また今回のケースではハイオク、レギュラーの2種類を実装しましたが、軽油など処理の種類を追加する必要が出た場合は、抽象化できているため単純にクラスを追加するのみで済み、既存のハイオクやレギュラーのクラスに影響が少ないと言えます。しかし、クラスの追加には柔軟に対応できますが部品を追加する場合（この例では給油メソッドに加えて窓拭きメソッドを追加するなど）、影響範囲が全てのFactoryクラスに広がります。

[デザインパターン一覧](http://qiita.com/kaikusakari/items/7c4e01692e852cc27b49)
Spanでグラフ作ってみた。

# まずはじめに、こんな事してみたい
![スクリーンショット 2017-05-11 3.17.16.png](https://qiita-image-store.s3.amazonaws.com/0/12007/87cb52b8-ccb6-d8ac-fc8b-bbfa61872d92.png)
こーんな感じのグラフ作ってみたい。(※実際に完成したグラフの画像です)

## 考察
個人だけでやるなら、グラフに特化したプラグインとか導入すれば簡単なんだろうけど...自作でできないか、まずは考える。
（※外部ライブラリーは、jQueryのみ使用）

それでは、デザインより最良の構造化を考えてみる。

1. なるべく画像は使い回す。
2. 読み込みのスピードを重視する。(表示相手はモバイルが対象なので)
3. メンテナンスが楽になるように考える。
4. 外部ライブラリは極力避ける。
5. テーブルは、リキッド対応にする。(FOXDIE...じゃない)
6. 数値は、各個別に設定も可能なようにする。
7. また、グラフは一方方向ではなく、逆方向へも伸びるように設計する。
8. リキッドなので、グラフもそれに合わせて、可動域内で動けるようにする。
9. バーの長さは、実際のデザインと変わらない長さにする。
10. 面倒なことは、プログラムに任せる。(※本音)

### ■コードと解説
コード

```javascript:index.js
var getNum = function (elm) {
	var elmt = elm;
	// 四捨五入
 	var rqpas = Math.round($(elmt).data("num")*100);
	return rqpas;
};


$(window).on('load',function () {
	var elm = $('span');
	for (var i=0; i < elm.length; i++) {
	var pas = "";
	if (getNum(elm[i])==1) {
		pas += "1px";
	}else{
		pas += getNum(elm[i]) + "%";
	}

	if($(elm[i]).data("code")=="m"){
	var pos = getNum(elm[i]);
		$(elm[i]).css('margin-left', -pos+"%");
	}else{
	};
		$(elm[i]).css('width',pas);
	}

    // ....アコーディオン用コード....
});

```
実際の動作 >>> [Codo.pen][link01]

解説
まずは、オブジェクト化されたデータを受け取る為に、`getNum `を作る。
データを引き渡すそこで計算された値を引き出し、cssを書き換えを繰り返す。

これにより各それぞれを別の画像として通信し、表示させるよりも速く表示させることができます。モバイル通信に優しい設計です。

値は、各spanのdata-setより受け取る`<span aria-label="bar" class="reveal" data-num="0.07" data-code="p" style="width: 7%;"></span>`とすることでデータを外部から読み込むよりも速いし、データの節約にもなる。特に気にしない場合は、json形式にして処理すれば、データだけで、グラフを操作できる。
また、テーブルが伸びてもグラフも合わせれるように%で指定してあげる。

###### 改良ポイント
もっと色々な用途に使えるように、改良の余地はあると思います。
一応、コード自体は短くしてみたけど、もっとスマートにできそう。

最後に改良ポイントとして、今回は説明もサンプルも出してないけど、`data-code`に`m`を挿入することで、反対に伸びる仕様となっている。

<!-- Links -->
[link01]:https://codepen.io/jacklow/full/wdyNva
インスタントプロセッシング

# Webブラウザで完結するProcessing環境
学習用という位置付けのプログラミング言語としては結構しっかり作ってある「Processing」。
これを使うにはJavaアプレットの実行環境が必要になっている。
しかし、使い始めるまでにアプレットをダウンロードしたり、JREが入っていなかったらインストールしたりと、思ったよりも面倒臭い。

そこで、Processingの作者がJavaScriptで動作するように移植した「Processing.js」というものがある。
これをWebサーバーに仕掛ければブラウザでProcessingを使う事が出来るが、これも事前に準備しておかなければいけなかったりして、あと一歩な感じが否めない。

なので、ブラウザだけで完結させ、ログインとかも無しにして、使い捨てな感じで使えるようなWebアプリケーションを作ってみた。
作ったソースはブラウザのローカルストレージに保存することが出来る。

※Instant Processing 改め、InstaProc用のドメイン取りました。
https://processing.fun/

サイトを開くといきなりWebアプリケーションが起動する。
上に並んでるボタンを左から説明すると、

0. 「normal/vim」：エディターモード。ノーマルと、vimのトグル。
0. 「新規プログラム」：新しいプロジェクトを開く。単一ファイル限定なので、ソースがまっさらになるので注意。
0. 「プログラム一覧」：ローカルストレージに保存されているプログラム一覧を表示。選択すると読み込み・編集・実行出来る。
0. 「プログラム保存」：現在編集中のプログラムをローカルストレージに名前をつけて保存する。
0. 「プログラム実行」：実行。編集しているソースを実行させる。

ソースの保存はブラウザのローカルストレージなので、パソコンが変わったりブラウザが変わると同じソースにアクセス出来ないので注意。
Java String バイト文字列切り捨て 文字化け対応

Java で String をバイト数制限があるAPI連携だとバイト数で切り捨てる必要がある
日本語は Charaset で 2バイト, 3バイト... と文字の途中で切り捨てると文字変になりそう
ちょっと考えたので備忘録としてコード記載
動かしてないけどたぶん大丈夫かと...

```java:Sample.java
public static String truncateByte(String s, int length, Charset charset) {
    if (StringUtils.isEmpty(s) || length <= 0) {
    	return s == null ? null : "";
    }
    if (s.getBytes(charset).length <= length) {
    	return s;
    }
    String r = new String(s.getBytes(charset), 0, length, charset);
    while (r.length() >= 0 && !s.startsWith(r)) {
    	r = r.substring(0, r.length() - 1);
    }
    return r;
}
```

1. 最初に空になるパターンはじく
2. バイト数以内はそのまま
3. バイト数切り捨てた文字を取得
4. 元の文字が切り捨てた文字で始まるまで切り捨て文字を1文字ずつ切っていく
5. 切った文字を返す
KaTeX による数式の表示

Web 上で　$\rm{\LaTeX}$ の書式で数式を表示するための数式組版ライブラリとしては、[MathJax](https://www.mathjax.org/) が定番。[Qiita でも使っているので](http://qiita.com/PlanetMeron/items/63ac58898541cbe81ada)

$$ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} $$

のように数式を手軽に書くことができる。GitHub Pages 上での MathJax の使い方については[以前記した](https://sekika.github.io/2015/10/10/equation-on-jekyll/)。

最近は、[KateX](https://khan.github.io/KaTeX/) という数式組版ライブラリが「描画が速くて良い」という噂を聞くので、ためしに GitHub Pages に組み込んでみた。

方法については[こちらの記事](https://sekika.github.io/2017/05/01/katex-equation/)に書いたが、簡単にまとめると、jQuery を使える状態でヘッダに

~~~
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/contrib/auto-render.min.js"></script>
<script>$(document).ready(function(){renderMathInElement(document.body,{delimiters: [{left: "[[", right: "]]", display: true},{left: "$", right: "$", display: false}]})});</script>
~~~

の行を加えれば良い。そうすると、[[ と ]] で囲まれた部分は display モード（独立した行で中央揃え）、$で囲まれた部分は非displayモード（行内の数式）で表示をするようになる。

ためしに書いて見た文書を2つほど。

- [積と商の微分公式](https://sekika.github.io/2017/05/02/derivative/)
- [指数と対数関数の微分](https://sekika.github.io/2017/05/06/derivative-exp-log/)

ストレスなく表示される。

これらの記事を書いてみて感じたのは、MathJax の方が数式を書きやすい。$\rm{\LaTeX}$ で作成した数式をそのままコピーすれば、だいたい動く感じ。KaTeX だと、一発ではうまく動かなくていろいろと試行錯誤をした。その結果、たとえば

- バックスラッシュは2個重ねる。重ねないでもうまくいくときもあれば、重ねないとだめなときもある。
- array 環境の上下間隔が標準ではつまりすぎるので、``\\cr`` を2個重ねる。

のような知見を得た。KaTeX は数式を書くのが大変、だけど書いてしまえば読む方はストレスがない、といったところだろうか。
シェイプレイヤーの塗り（fill）設定

#やりたい事
シェイプレイヤーの塗りを変更する

```js
function createLay(){
    //シェイプ　追加
    var adLay=comp.layers.addShape();
    adLay.name=("layer name")
    //パス１　追加
    adLay.property("ADBE Root Vectors Group").addProperty("ADBE Vector Shape - Group").property("ADBE Vector Shape")
    //シェイプ形状
    var myShape = new Shape();
    myShape.vertices = [[-cw/2,0], [cw/2,-100], [cw/2,100]];
    myShape.closed = true;
    //形状を適用
    var targetShape=adLay.property("ADBE Root Vectors Group").property("ADBE Vector Shape - Group").property("ADBE Vector Shape");
    targetShape.setValue(myShape);
    var myFill=adLay.property("ADBE Root Vectors Group").addProperty("ADBE Vector Graphic - Fill").property("ADBE Vector Fill Color").setValue([0, 0, 0, 0]);
}
```

何故か解決に時間がかかってしまったので、メモです。
mkdirとcdを連続して行うalias

## 手順

.bashrcに以下を追記し、`source ~/.bashrc`する

```bash:.bashrc
mkcd() {
  \mkdir $* && cd $_
}
alias mkcd="mkcd"
```

## 使い方
こんな感じに使う。

```
$ mkcd hoge
$ mkcd -p huga/bar/foo
```

mkdirのオプションをpしか使わないなら

```bash:.bashrc
mkcd() {
  \mkdir -p $* && cd $_
}
alias mkcd="mkcd"
```
としてもいいかもしれない。

## 参考
- http://blog.tstylestudio.com/2013/06/26/mkdirとcdを同時に実行したい時/
- http://kazmax.zpp.jp/cmd/b/bash.1.html#ah_12
SlackにHubotを追加してみよう

#SlackにHubotを追加してみよう

####・SlackにHubotを追加
https://slack.com/apps
![c988426f-0070-467d-98be-24ecf32a71f0.png](https://qiita-image-store.s3.amazonaws.com/0/180742/18dbea82-494c-2f0a-4e33-b5100cb12a72.png)
上記のリンクに飛び、「Hubot」と入力しエンターをクリック

そうすると
![2016-07-01_3.png](https://qiita-image-store.s3.amazonaws.com/0/180742/b2b05503-b978-7fc8-a6d6-db45f50b5c00.png)
に飛びますので「Install」をクリック

次にHubotの名前を入力する所に飛ぶので名前をつけてあげましょう。![2016-07-01_4-2.png](https://qiita-image-store.s3.amazonaws.com/0/180742/62f6f2d2-27e5-8fd7-3894-ea75e89039a6.png)

「Add Hubot Integration」をクリックします。

クリックすると次のような画面が出てきます。
![2016-07-01_5.png](https://qiita-image-store.s3.amazonaws.com/0/180742/56e241ca-34f9-e77a-8c12-070aca1337a0.png)
①　外部サービスとHubotを繋ぐ際に使うAPIトークン
②　Hubotのアイコンの変更
③　 Slack内に登録されている絵文字ライブラリから画像を選択してHubotのイメージに適用
④　Slackのメンバーに表示した際に表示される名前
⑤　Hubotを説明を記入する欄

以上で完了です。
Hubotを使うにはこの操作に対しSlackのメンバーに入れる必要があるのですが
今回のテーマが追加なのでこれで終わりにしたいと思います。
apex:pageBlockTable内で、Javascriptで足し算

結構よくやるパターンだと思いますが、これまた毎回実装方法を調べ直してる気がするので、メモがてら。

`<apex:pageBlockTable>`や、`<apex:repeat>`なんかで動的に作られる要素をjavascriptでどうやって操作するかというお話。

やり方は色々あると思いますが、今回は`$Component`を使う方法で実装してみました。

```html
<apex:page standardController="Opportunity" extensions="EX_DataTableJsCalcController">
    <apex:form id="form">
        <apex:pageBlock title="商談商品" mode="edit">
            <apex:pageBlockSection>
                <apex:pageBlockTable value="{!opportunities}" var="item" id="table">
                    <apex:column >
                        <apex:facet name="header">{!$ObjectType.OpportunityLineItem.fields.UnitPrice.Label}</apex:facet>
                        <apex:inputField value="{!item.UnitPrice}" id="inputField1" onblur="sum(
                            '{!$Component.inputField1}', '{!$Component.inputField2}', '{!$Component.inputField3}'
                        );"/>
                    </apex:column>
                    <apex:column>
                        <apex:facet name="header">{!$ObjectType.OpportunityLineItem.fields.Quantity.Label}</apex:facet>
                        <apex:inputField value="{!item.Quantity}" id="inputField2" onblur="sum(
                            '{!$Component.inputField1}', '{!$Component.inputField2}', '{!$Component.inputField3}'
                        );"/>
                    </apex:column>
                    <apex:column>
                        <apex:facet name="header">{!$ObjectType.OpportunityLineItem.fields.TotalPrice.Label}</apex:facet>
                        <apex:inputField value="{!item.TotalPrice}" id="inputField3"/>
                    </apex:column>
                </apex:pageBlockTable>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>

    <script type="text/javascript">
        function sum (sumFieldId1, sumFieldId2, totalFieldId) {
            document.getElementById(totalFieldId).value =
              +document.getElementById(sumFieldId1).value + +document.getElementById(sumFieldId2).value;
        }
    </script>
</apex:page>
```

`$Component.～～`は、宣言した位置を基準として、子要素を取得する場合はそこまでのすべての要素のIDを辿らなくてはなりませんが、自身の兄弟や親に関しては単にそのタグのID指定のみで行けるので、今回のようにColumnの中で使っている分には、その兄弟要素である別のColumnを取得するにはID指定のみでいけます。
厳密に言うと`<apex:column>`の下の`<apex:inputField>`内で宣言してるため、他の`<apex:column>`の下の`<apex:inputField>`は兄弟ではなく親の兄弟の子なので、仕様から行くと取得できなさそうなのですが、何故かコレでいけました。`<apex:column>`ならではの動きなのかもしれません。
Unity2017.1b4のタイムラインでScriptを動かす

雑メモです。

噂のTimelineをUnity2017.1のベータ4で触ってみたんですが、なんかどんどん仕様が変わってるようで、ダウンロードしたサンプルコードが動かなかったり、ネット上に正しい情報も見つからないので、雑な作業メモを残しておきます。（が、もう2017.1b5が出ていたので、すでに仕様が変わっているかもしれない。）

以下、色々やってみて動いたタイムライン上からscriptを動かすやり方。

1) TimeLineアセットを作成。
2) PlayableDirectorコンポーネントを、適当なゲームオブジェクトに適用。TimeLineアセットを紐づける。
3) PlayableBehaviourを継承したHogePlayableBehaviourを作ってタイムラインからのイベントを処理するコードを書く。
4) PlayableAssetを継承したHogePlayableAssetを作る。インスペクタで設定したいパラメータがあればExposedReferenceで宣言する。HogePlayableBehaviourをインスタンス化する。パラメータを受けわたすコードを書く。ScriptPlayableを作成して返す。
5) TimeLineにPlayableTrackを追加。
6) PlayableTrackにHogePlayableBehaviourを配置する。HogePlayableBehaviourのインスペクタでのパラメータがあれば設定する。

```HogePlayableAsset.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]
public class HogePlayableAsset : PlayableAsset
{
    public ExposedReference<UnityEngine.UI.Text> textField; // テキストフィールドを受け渡してみる
    public override Playable CreatePlayable(PlayableGraph graph, GameObject go)
    {
        var b = new HogePlayableBehaviour();
        b.textField = textField.Resolve(graph.GetResolver());
        return ScriptPlayable<HogePlayableBehaviour>.Create(graph, b);
    }
}
```

```HogePlayableBehaviour.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

public class HogePlayableBehaviour : PlayableBehaviour
{
    public UnityEngine.UI.Text textField;

    public HogePlayableBehaviour()
    {
    }

    public override void OnGraphStart(Playable playable) {
    }

    public override void OnGraphStop(Playable playable) {
    }

    public override void OnBehaviourPlay(Playable playable, FrameData info) {
    }

    public override void OnBehaviourPause(Playable playable, FrameData info) {
    }

    public override void PrepareFrame(Playable playable, FrameData info) {
        if(textField) textField.text = "deltaTime : " + info.deltaTime;
    }
}
```

タイムライン自体は良い感じのですが、どうも使うまでの手順が面倒ですねえ。元Flasherからすると、シーンに置いたオブジェクトが自動でタイムラインに乗っちゃう勢いでも構わないんですが。（そう言うエディタ拡張を作れと言う話？）
処理レコード数のガバナ制限について

2017年5月現在、1トランザクションでDML ステートメント、Approval.process、または database.emptyRecycleBin の結果として処理されるレコードの合計数は、最大10000件となっています。

ちょっとトリガの挙動を確認するために、開発者コンソールから10000レコード突っ込んで、その後ロールバックするという処理を実行した所、何故かガバナ制限でエラーとなってしまいました。

なぜ、エラーとなったか確認するため、以下のコードを実行してみました。

``` java
System.debug('Point1. DML Rows:' + Limits.getDMLRows());
Savepoint sp = Database.setSavepoint();
System.debug('Point2. DML Rows:' + Limits.getDMLRows());
List<Account> accounts = new List<Account>();
for(Integer i = 0 ; i < 1000 ; i++) {
	accounts.add(new Account(Name = String.valueOf(i).leftPad(5).replace(' ', '0')));
}
insert accounts;
System.debug('Point3. DML Rows:' + Limits.getDMLRows());
Database.rollback(sp);
System.debug('Point4. DML Rows:' + Limits.getDMLRows());
```

実行結果は以下のようになりました。

```java 
09:40:44:002 USER_DEBUG [1]|DEBUG|Point1. DML Rows:0
09:40:44:002 USER_DEBUG [3]|DEBUG|Point2. DML Rows:1
09:40:55:643 USER_DEBUG [9]|DEBUG|Point3. DML Rows:1001
09:40:56:371 USER_DEBUG [11]|DEBUG|Point4. DML Rows:1002
````

Database.setSavepoint、Database.rollbackの実行でも、1回につき1レコードの処理として加算されるようです。
プログラミング初心者、WordPress始めます！その１

はじめまして！

私はプログラミングとは全く関係ない業種で働いていたはずなのですが、いつの間にかExcelVBAにハマり前任者が作った会社のプログラムを運営することを任された、いわば“にわかプログラマー”です。
つまり、かなりのプログラミング初心者です。
そうこうする内にプログラミングにハマり、気付けば30代半ば…　いい歳してプログラマーを目指したいと思い始めてしまったわけです。
そんな僕がつまづいたり勉強になったものを少しずつ皆様と共有できれば幸いだと思い投稿をさせて頂くことにします！
使用PCは主にWindowsになります。
　　

## プログラミング経験言語は…
HTML少々、CSS少々、JavaScript少々、PHP少々。と、どれも少々です。
そんな私ですが、とりあえずものにしたいと思い手を付けたのが**WordPress**

そんな僕が自分のお勉強の記録にちょこちょこと記事をアップしていきます。
プログラミング超初心者なのでプログラミングを理解している方たちが説明しているサイトの説明の理解に苦しむことがありますｗ
僕と同じように超初心者の方が始めるときにほんの少しだけでも参考になれば幸いです。
お勉強のメインはドットインストールさんの動画を基点にネット検索などで行っていこうかと思っております。
超々初心者なので間違った情報等ありましたら優しく教えていただけると嬉しいです。    
　　

## WordPressとは…
簡単に言うとブログシステムの事。
ブログシステムとは言いますが実際のWEBサイトでもWordPressを使用したサイトも多数存在する様です。
つまり、うまいこと編集できれば普通にHTMLやらCSSを駆使するよりもお手軽に立派なWEBサイトが出来てしまうみたいです。
基本的にPHPとMySQLで動作するようなのでローカル開発環境か実際にサーバーにアップしつつ作りあげていくしかないようです。
私は先日やっとの思いでローカルサーバーの立ち上げに成功したのでローカル開発環境(XAMPP)で作り上げていきたいと思います。    
　　

## MySQLのデータベースを作成しましょう
私の場合はXAMPPなので
![2.png](https://qiita-image-store.s3.amazonaws.com/0/155272/880ac8f5-4997-bf75-945a-75797fa5add7.png)

ここからPHPMyAdminにアクセス
![3.png](https://qiita-image-store.s3.amazonaws.com/0/155272/21cb4ec9-b3b1-595b-3a33-ed38a837bd5a.png)

画面左側の一番上の
**NEW**から新しいデータベースを作成します。
今回は**wp**というデータベース名にしております。    
　　

## WordPressをインストールしよう！
[日本語版公式サイト](https://ja.wordpress.org/)
こちらのサイトからインストールします。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/155272/175daee5-756a-7bc9-39ff-5507650a42bd.png)

インストールしてきたらフォルダを丸ごと実際に動作させる環境(今回はC\XAMPP\htdocs)にコピーしましょう。    
　　

## wp-configの編集
先程丸ごとコピーしたフォルダの中に**wp-config-sample.php**というファイルがあります。
一応バックアップとしてこのファイルは残し、このファイルのコピーを作り名前を**wp-config.php**という名前にします。
![4.png](https://qiita-image-store.s3.amazonaws.com/0/155272/55efe9d6-3276-01a4-43e5-30c24e6e4ed9.png)

今回僕が作ったデータベース名は**wp**なので24行目あたり

```php
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wp');
```
とします。

ユーザー名やらパスワードやらは全部**root**にしましたので

```php
/** MySQL データベースのユーザー名 */
define('DB_USER', 'root');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'root');
```
と変更します。

続いて55行目あたりからのセキュリティキーの編集を行います。
セキュリティキーの生成は
![5.png](https://qiita-image-store.s3.amazonaws.com/0/155272/d3cedd80-a307-e553-0634-ce2fbeef7a48.png)

この画像の赤い四角部分のURLからできるようです。そのURLにアクセスして表示された文字列をまるっとまるまる画像の箇所に貼り付けます。

ここまでで概ね初期設定は終了しましたので次回からは実際の処理内容を書いていこうと思います。
  

次回！？と思われた方もいらっしゃるかもしれませんが…
はい、そうです。続きます。
最後まで読んで頂いた方ありがとうございます。
次回更新時も読んで頂けると幸いです。

[プログラミング初心者、WordPress始めます！その２>>](http://qiita.com/ukkari_ukachan/items/c614bba949844516e759)
【Java入門】変数の宣言・型について

１年目の駆け出しプログラマです。復習を兼ねて、自分用メモを整理して公開したものです。
間違っている可能性も高いのでお気を付け下さい。

## 変数の宣言

```java
int number;     // int型の変数numberを宣言
String str;     // String型の変数strを宣言
int[] list;     // int型の配列listの宣言
ArrayList<String> arrList;     // ArrayList<String>クラスの変数arrListを宣言
```
- 型　変数という順序で宣言する

## 初期化・インスタンス化

```java
int number = 27;     // 変数の初期化（初めて値を代入すること）
String str = "hello";     // String型の初期化、文字列は""（ダブルクオーテーション）でくくる
int[] list = new int[3]     // 配列の作成
List<String> arrList = new ArrayList<String>();     // ArrayListクラスのインスタンス化
```
- 初期化しない場合、intやdoubleなどの数値の型は0、boolean型はfalse、参照型の場合はnullが初期値として設定される
- インスタンスが何かについては後で学習する

## 定数の宣言

```java
final int NUMBER = 5;
```

- finalをつけると定数になり値を代入しようとするとエラーが発生するようになる。
- 慣例で定数は大文字にすることが多い。

## 型の種類
１．プリミティブ型：8種類

|プリミティブ型|内容|サイズ|範囲|
|:-:|:-:|:-:|:-:|
|long|大きい数値|64bit|-9223372036854775808　～　9223372036854775807|
|int|通常の数値|32bit|-2147483648　～　2147483647|
|shot|小さい数値|16bit|-32768　～　32767|
|byte|とても小さい数値|8bit|-128　～　127|
|double|小数|64bit|約(-)3.40282347E+38（約6～7桁の精度）|
|float|比較的精度の低い小数|32bit|(-)1.79769313486231570E+388（15桁の精度）|
|boolean|真か偽か|16bit|true または false|
|char|1文字のUnicode文字|1bit|\u0000　～　\uFFFF|


２．リファレンス型（参照型）：クラス

- 代表例はStringクラス、プリミティブ型でなければリファレンス型

参考）
[Javaのプリミティブ型と参照型について](http://promamo.com/?p=2818)

## キャスト

```java
System.out.print((int)3.2);     //結果は3
```
- 型の変換を明示的に行うことで、強制的に型の変換を行う
- データが欠損するためあまり使用しない（らしい）

## 文字列⇔数値の型変換
- 文字列→数値

```java
Integer.parseInt(str)
Integer.valueOf(str)
```
など

- 数値→文字列

```java
number.toString()
String.valueOf(number)
```
など

## アドバイス
色々書いてみたものの[Javaの道](http://www.javaroad.jp/index.htm)見た方がいいと思った。
なのでこっちを見ましょう（丸投げ）。

- [変数](http://www.javaroad.jp/java_variable.htm)
- [基本型の型変換とキャスト](http://www.javaroad.jp/java_variable2.htm)
Railsしかできない奴はいつまで経ってもRailsしかできない

[あと5年もすれば「Railsしかできない奴はいつまで経ってもRailsしかできない」て言われるようになるよ - ledsun のコメント / はてなブックマーク](http://b.hatena.ne.jp/entry/336463336/comment/ledsun)

5年と言わず、今すぐ言おう。

1. 流行りだと言われてRailsをやってみることにする。
2. Railsチュートリアルを一通りやる。
3. それなりの物ができる。
4. チュートリアルに毛が生えた程度はできる。
5. 他のフレームワークに挑戦してみる。
6. Sinatraやってみたけど、Rubyの基礎がわかってないから、挫折する。RailsがあればSinatraなど不要と言って、Sinatraを貶す。なお、RailsとSinatraの違いはわかってない。
7. いっそ、他の言語に挑戦してみる。
8. Javaやってみたけど、オブジェクト指向の基礎がわかってないから、挫折する。Smalltalkこそがオブジェクト指向の本流であり、C++風のオブジェクト指向は似非と言って、Javaを貶す。もちろん、自分で言っている意味はわかってない。
9. C#やってみたけど、やっぱりオブジェクト指向の基礎がわかってないから、挫折する。Windowsでしか役に立たないと言って、C#を貶す。ただし、本人はWindows以外を触ったことがない。Monoとか.NET Coreとか知っているはずがない。
10. Perlやってみたけど、全く似ていないから、挫折する。時代遅れと言って、Perlを貶す。Perl6はそもそも知らない。
11. Pythonやってみたけど、プログラミング言語の基礎がわかってないから、挫折する。日本ではRubyより流行ってないと言って、Pythonを貶す。なんかカッコイイと言う理由でディープラーニングに手を出そうとしたらしい。
12. PHPやってみたけど、ERBっぽいと思ったらそんな書き方は今時誰もしないよって言われて、挫折する。PHPはdisられていると言って、PHPを貶す。disの内容は全く理解できていないのに、まるで自分が考えたかのようにdisる。
13. JavaScriptやってみたけど、プロトタイプベース以前にクラスベースのオブジェクト指向もわかってないから、挫折する。jQueryがあればJavaScriptはいらないと言って、JavaScriptを貶す。jQueryはJavaScriptの対極にある一つの言語だと思っている。
14. C/C++あたりは難しそうだと言って、最初から手を付けない。なお、「C/C++」という一つの言語だと思っている可能性が高い。
15. Delphiは有料だから手を出さない。無料になったことは知らない。
16. Haskellとか知らない。
17. Erlangなんてもっと知らない。ElixirはHPとMPが全回復するものだと思っている。ラストがつくと全員全回復。
18. LISPは名前だけ聞いたことがある。なんか古い言語でしょ。
19. Objective-C、D、Go、Rust、VB(.NETの方だが、VB6と区別はついていない)、F#、Scala、Kotlin、Clojure、TypeScript、R、OCaml、Fortran、なでしこ、Brainfuck、Lazy K、Befunge、Prolog、あと、何があったかな、まぁ、いろいろ。
20. CoffeeScriptは聞いたことがあるぞ、Railsの付属品だろ？
21. MacもiPadもiPhoneも持っていないのにSwiftには興味があるらしい。
22. そして、Railsしかできない。正確に言うとRailsすらできていない。
23. 1.に戻る。

結論: Railsチュートリアルが悪い。
GASでサイトの死活監視をするスクリプト[改良版]

サイトの死活監視に、Cronを使えるサーバを用意しなくても、GAS[Google Apps Script]だけでいけるとのことで、下記のページを見つけました。

[サイトの死活監視用Google Apps Script - Qiita](http://qiita.com/nightyknite/items/c3d893ffb4097d58feb1)

このページの方法では、実際の利用にあたり下記のような問題点がありました。

- サイトアクセスできないときのみ通知メールが送信され、復旧した時に通知メールがない。
- 長時間サイトが死んでいると、トリガー発生のたびに通知メールが送られてしまう。

そこで、機能変更/追加したスクリプトを考えてみました。

[GASのスクリプトプロパティ](https://developers.google.com/apps-script/guides/properties)にサイトの死活状態を保存しておくことで、[OK] -> [NG]または[NG] -> [OK]と状態が変化したときのみ、メールを送信するようにしてみました。

サイトの死活は、監視URLをフェッチして、そのレスポンスコードが200かで判定しています。


```js

var siteURL = "http://監視するURL";
var mailto = "通知先メールアドレス";
var STAT_OK = "OK";
var STAT_NG = "NG";

function myFunction() {

  try {

    // URLをフェッチ - muteHttpExceptions:trueの場合、HTTPエラーの際に例外をスローしない
    var response = UrlFetchApp.fetch(siteURL, { muteHttpExceptions:true });
    // レスポンスコード
    var code = response.getResponseCode();

    // スクリプトプロパティ
    var scriptProperties = PropertiesService.getScriptProperties();
    // スクリプトプロパティからサイトの死活状態を取得
    var siteStat =  scriptProperties.getProperty('SITE_STAT');

    // レスポンスコード 200をチェックする
    if(code == 200) {
      if(siteStat != STAT_OK )　{
        // サイト状況OKをスクリプトプロパティにセット
        setSiteStat(STAT_OK);
        // 通知メール送信
        sendNoticeMail( "access OK\n" + "code: " + code + "\n");
      } else {
        // do nothing
      }
    } else {
      if(siteStat != STAT_NG )　{
        // サイト状況NGをスクリプトプロパティにセット
        setSiteStat(STAT_NG);
        // 通知メール送信
        sendNoticeMail( "access NG \n" + "code: " + code + "\n");
      } else {
        // do nothing     
      }
    }

  } catch(err) {
    // catch : DNSエラーなどでURLをfetch出来ないとき

    // サイト状況NGをスクリプトプロパティにセット
    setSiteStat(STAT_NG);
    // 通知メール送信
    sendNoticeMail( "access NG \n" + err  + "\n");
  }

}

// 通知メール送信
function sendNoticeMail(txtBody){

  var subject = "[死活監視] " + siteURL ;
  var body = siteURL + "\n" + txtBody;

  MailApp.sendEmail(
    mailto, 
    subject, 
    body
  )

}

// スクリプトプロパティに死活状態をセット
// bStat - OK / NG
function setSiteStat(bStat){

  // スクリプトプロパティをセット
  var scriptProperties = PropertiesService.getScriptProperties();
  scriptProperties.setProperty('SITE_STAT', bStat);

}

```

ちょっとした値を保存しておく際に、[GASのスクリプトプロパティ](https://developers.google.com/apps-script/guides/properties)は簡単で便利ですね。GAS編集画面のメニューから、[ファイル]-[プロジェクトのプロパティ]-[スクリプトのプロパティ]とたどると、保存されている値を確認できます。

![screenshot-script.google.com 2017-05-11 23-55-27.png](https://qiita-image-store.s3.amazonaws.com/0/11198/202aae3c-7c6a-f69c-b1d5-b83ba72f6188.png)
OFFICE VBA Splitで長すぎる配列のデータをどうやって改行して代入するか

##できない例

```vbnet
Sub test_failed()
Dim ar
Dim i
ar = Split(" _
"A," _
"B", _
"C", _
, ",")
For i = LBound(ar) To UBound(ar)
Debug.Print ar(i), Len(CStr(ar(i)))
Next
End Sub
```


たとえばこのデータ（改行 vbCrlf含む)を配列に入れるのはどうすればいいでしょうか？
VBEditorには1行の字数制限があります。したがって配列変数を代入するとき長すぎると改行する必要があります。しかし上の例はうまくいきません。
しかもこれはどこに書いてあるのかよくわからないので一応成功したのでメモします。

## &の使用
```vbnet
Sub test()
Dim ar
Dim i
ar = _
Split( _
"AbC" & _
"DEF," & _
"GH," & _
"II," & vbCrLf & _
"JJ," & _
"シャア専用," & _
"KK," & _
"LL," & _
"オールリセット," & _
"集計 ", ", ")

For i = LBound(ar) To UBound(ar)
Debug.Print ar(i), Len(CStr(ar(i)))
Next
End Sub
```
AbCDEF,GH,II,
JJ,シャア専用,KK,LL,オールリセット,集計        41 
これでなんとたった一つの配列の要素になっています。
ポイントは
"集計 ", ***", ")***
区切り文字の部分です。
通常区切り文字の指定にスペースを入れないのですが、半角の空白を入力します。
これでひとつながりになります。
しかし区切り文字のスペースを削除するとバラバラになります。
空白のあるなしで随分違います。もっと明確にコントロールできるか。次のようになっていきます。


##改行しながら複数の要素を入れる実験
```vbnet
Sub test()
Dim ar
Dim i
ar = _
Split( _
"A," & _
"B" & _
",", "," _
)
For i = LBound(ar) To UBound(ar)
Debug.Print ar(i)
Next
End Sub
```
これを出力すると
    : ar(0) : "A" : String
    : ar(1) : "B" : String
    : ar(2) : "" : String
となります。ということは
",", "," _
は　"コンマ空の要素",区切り文字空白アンダーバー
となっているようです

##多数の要素を入れる完成形
```vbnet
Sub test()
Dim ar
Dim i
ar = _
Split( _
"A," & _
"B," & _
"C", _
",")
For i = LBound(ar) To UBound(ar)
Debug.Print ar(i), Len(CStr(ar(i)))
Next
End Sub
```
出力
A         1 
B         1 
C         1

```vbnet
Sub test()
Dim ar
Dim i
ar = _
Split( _
"A," & _
"B" & _
"C", _
",")
For i = LBound(ar) To UBound(ar)
Debug.Print ar(i), Len(CStr(ar(i)))
Next
End Sub
```
出力
A         1 
BC         2 
Bの後ろにコンマがないので切れないでCにつながりました。
もしエラーになる場合には最後の要素（上記はC）で無理に折れずに
ar = _
Split( _
"A," & _
"B" & _
"C",",")
としてください。この方が安定します。
このように多数の要素で、しかも途中で中折れしても、このように代入ができます。
【Java入門】Javaプログラムの書き方

１年目の駆け出しプログラマです。復習を兼ねて、自分用メモを整理して公開したものです。
間違っている可能性も高いのでお気を付け下さい。

## Hello World!

```java
public class Main{
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}
```
- 「Hello World!」という文字列を出力しただけ。「世界一有名なプログラム」と呼ばれている。
- 最初は、こう言う風に書くものだと覚えておけばいい。


## Javaプログラムの基本構造

```java
public class Main{
	public static void main(String[] args){
		// ここに実行する処理を書く
	}
}
```

- 外側にあるのがクラス、内側にあるのがメソッドという構造になっている
- 基本的に外側から内側へと順に書いていく


## コメントの書き方

```java
// ここにコメント

/*
   ここにコメント
*/

```

- //の後ろはコメントとして認識され、プログラムとして処理されない
- /\*と\*/で囲まれた部分もコメントとして認識される（複数行も可）


## メソッドの中身

メソッドの中身はざっくり言うと以下の４つ。

1. 変数を宣言する文
2. 計算を行う文
3. 命令を実行する文
4. 制御文（if文、for文など）

```java
public void sample(){
	// 宣言する
	String message = "";
	int numberA = 1;
	int numberB = 3;
	int bumberC = 0;

	// 計算する
	numberC = numberA + numberB; 
	
	// どういう処理を行うか制御する
	if( numberC > 2 ){
		// 代入する（計算の一種）
		message = "numberCは2より大きい";;
	}
	
	// 命令を実行する
	System.out.println(message);
}
```
プロジェクト内で利用しているuserDefinedRuntimeAttributeの一覧を出力するコマンド

## 概要
Xcodeプロジェクト内で利用しているuserDefinedRuntimeAttributeの一覧を取得する方法です。

![スクリーンショット 2017-05-11 23.04.31.png](https://qiita-image-store.s3.amazonaws.com/0/113553/f18200a0-01c3-c54e-2292-1206d4b21f42.png)

## コマンド

以下のコマンドをコピペしてターミナルで実行することで取得できます。

```bash:プロジェクトのディレクトリで実行
$ find . -name "*.xib" -o -name "*.storyboard" \
| xargs grep "<userDefinedRuntimeAttribute type" \
| grep "keyPath"  \
| sed -e "s/.*keyPath=\"//g" \
| sed -e "s/\".*>//g" \
| sort \
| uniq
```
## 実行結果(例)
userDefinedRuntimeAttributeの一覧がソートされ、出力されます。

```bash:
borderColor
borderWidth
bottomBorderWidth
clipsToBounds
cornerRadius
〜略〜
```
## コマンド解説


```bash:実行フォルダ配下の拡張子がxibもしくはstoryboardのファイルを検索
$ find . -name "*.xib" -o -name "*.storyboard" \
```
```bash:userDefinedRuntimeAttributeタグを含む行を抽出
| xargs grep "<userDefinedRuntimeAttribute type" \
```
```bash:keyPath属性を含む行を抽出
| grep "keyPath"  \
```
```bash:keyPath属性の値のみを置換で抽出
| sed -e "s/.*keyPath=\"//g" \
| sed -e "s/\".*>//g" \
```
```bash:属性値をソート
| sort \
```
```bash:重複した行を削除
| uniq
```
Visual Studio for Mac で Unity デバッグ！ Mac でも ブレークポイントで止まるよ！

Visual Studio for Mac 正式リリースされました。
無料の IDE である Visual Studio Community でも Unity で debug が出来ます！
これでさらに個人でゲーム作りがしすくなりますね。

# Visual Studio for Mac
ダウンロードはこちらから
Community Edition には制限があるので、企業で使用するには注意です。
https://www.visualstudio.com/ja/vs/community/

# Unity
デバッグ機能を有効にするには Unity 5.6.1f1 (2017/5/11 リリース)以上が必要になります。
ダウンロードはこちらから
https://unity3d.com/jp/get-unity/download/archive
パッチリリース (筆記時点ではまだリリースされていません）
https://unity3d.com/jp/unity/qa/patch-releases?version=5.6

# 設定
Unity を起動したらメニューから Preferences... を開きます。

![スクリーンショット 2017-05-11 19.42.10.png](https://qiita-image-store.s3.amazonaws.com/0/40866/f7e80fc3-37c9-5662-64f9-22afd266dc1e.png)

次に External Tools タブの External Script Editor から Visual Studio を指定します。

![スクリーンショット 2017-05-11 19.43.27.png](https://qiita-image-store.s3.amazonaws.com/0/40866/c775161e-163a-5988-b181-a6cf6f906f24.png)

![スクリーンショット 2017-05-11 19.45.04.png](https://qiita-image-store.s3.amazonaws.com/0/40866/d2ba2746-a3eb-0a4a-f67b-3f08e4cca9a8.png)

Unity からスクリプトファイルをダブルクリックして Visual Studio を起動させます。

![スクリーンショット 2017-05-11 20.00.36.png](https://qiita-image-store.s3.amazonaws.com/0/40866/e039c940-056e-f766-19e1-f1d306e67747.png)

以上で設定は終了となります。

# デバッグ
ブレークポイントを置いて、Visual Studio 上で Command + Enter を押して Unity Editor にアタッチすれば、設定したブレークポイントで止まります！

![スクリーンショット 2017-05-11 22.23.26.png](https://qiita-image-store.s3.amazonaws.com/0/40866/c84ccc1a-eaf4-6d85-d4f3-a4cf8446011c.png)

ローカル変数やインスタンス変数が参照できました。

# 補足
Visual Studio Tools for Unity が自動でインストールされてました。

![スクリーンショット 2017-05-11 21.40.46.png](https://qiita-image-store.s3.amazonaws.com/0/40866/57aeb07e-e228-4666-beae-c64b681eb53a.png)
ヘッダーが1列目にあるテーブルを作る方法

通常htmlでテーブルを作ると以下のような形になる。
<コード>

```html:table.html
<table>
  <thead>
    <tr>
     <th>ヘッダーその①</th>
     <th>ヘッダーその②</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>あ</td>
      <td>い</td>
    </tr>
    <tr>
      <td>う</td>
      <td>え</td>
    </tr>
  </tbody>
</table>
```
<表示>

<table>
   <thead >
      <tr>
        <th>ヘッダーその①</th>
        <th>ヘッダーその②</th>
	    </tr>
   </thead>
   <tbody >
      <tr>
        <td>あ</td>
        <td>い</td>
      </tr>
      <tr>
        <td>う</td>
        <td>え</td>
      </tr>
   </tbody>
</table>

でもヘッダーを1行目ではなくこんな感じで1列目にしたい事はわりとあると思う。

<table>
      <tr>
        <th>ヘッダーその①</th>
        <td>あ</td>
        <td>い</td>
      </tr>
      <tr>
        <th>ヘッダーその②</th>
        <td>う</td>
        <td>え</td>
      </tr>
</table>

それを素直にやろうとすると以下のようなコードになる

```html:table2.html
<table>
  <tr>
    <th>ヘッダーその①</th>
    <td>あ</td>
    <td>い</td>
  </tr>
  <tr>
    <th>ヘッダーその②</th>
    <td>う</td>
    <td>え</td>
  </tr>
</table>
```
これでも良いのだけど、
個人的にすごい見づらいなぁと思ったので、htmlはそのままにCSSでどうにか出来ないかと考えた。
で、こねこねした結果がこちら。

```html:table3.html
<!-- これはそのまま -->
<table>
  <thead>
    <tr>
      <th>ヘッダーその①</th>
      <th>ヘッダーその②</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>あ</td>
      <td>い</td>
    </tr>
    <tr>
      <td>あ</td>
      <td>い</td>
    </tr>
  </tbody>
</table>
```

```CSS:table.css
thead  {
  float: left;
}
tbody  {
  display: inline-block;
}
thead th  {
  display: block;
}
tbody td  {
  display: block;
}
tbody tr{
  display: inline-block;
}
```
するとこんな感じになる。
https://jsfiddle.net/85eqhjn6/

一応出来たが、もっと上手い方法がある気がする。
CSS苦手なので頑張る。

以上
tensorflow+bonanzaことはじめ

pc (vaio/vista) を買い替えてomen/10にした。
新しいことを始められるようgpgpu(GeForce1050)込み。
最終目標はtensorflow+bonanza当たり。

まずはbonanzaをダウウンロードしてpatchを手動で当てて
vs2017でコンパイルしたらエラーが発生。


"#if" が必要。こんな感じ 
--- ここから ---

```
#if defined(TLP)
	  pdata->ptree->tlp_id = 0;		
#endif
```
--- ここまで ---
d3.json() 関数を拡張（ gzip圧縮された JSON ファイル読込み）

こんにちは。
```d3.json(file, callback)``` は、gzip圧縮された JSON ファイル読込みへ対応しないので、代わりの関数を作ってみました（下記の```d3_json(file, callback)```）。これは「[gzip圧縮されたローカルファイル読み込み](http://qiita.com/kkdd/items/0c6a777bcda031ea9f39)」（```gzipd()```）の応用です。

```d3_json.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>d3_json</title>
</head>
<body>
<div id="data"></div>
</body>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pako/1.0.11/pako.min.js"></script>
<script src="./getSuffix.js"></script>
<script>
d3_json('employees.json.gz', callback);

function gzipd(xhr) {
    return JSON.parse(pako.inflate(xhr.response, {to: 'string'}));
}

// loading external compressed content
function d3_json(file, callback) { 
    if (getSuffix(file, 'gz')['compression']) {
        d3.request(file).responseType("arraybuffer")
		.response(gzipd).get(callback);
    } else {
        d3.json(file, callback);
    }
}
//  d3.v3: d3.xhr(file)
//  d3.v4: d3.request(file)

function callback(error, data) {
    d3.select('#data')
   .append('div')
   .selectAll()
   .data(data)
   .enter()
   .append('div')
   .text(function (col) {
        return `${col['name']} : ${col['title']} : ${col['age']}`; });
   };
</script>
</html>
```
```getSuffix.js
// extract suffixes from a file name
// e.g., getSuffix('example.json.gz', ['gz', 'bz2']) => {'extension': 'json', 'compression': 'gz'}
function getSuffix(filename, extCompression) {
    var suf = [], fnameSplit = filename.split(".");
    if (fnameSplit.length >= 2) {
        suf.unshift(fnameSplit.pop());
        if (_includes(extCompression, suf[0])) {
           suf.unshift(fnameSplit.pop());
        }
    }
    return {'extension': suf[0], 'compression': suf[1]};
}

function _includes(array, elem) {
    if (!(array instanceof Array)) {array = [array];}
    return array.indexOf(elem) >= 0;
}
```

```console
$ gzcat employees.json.gz
[
 {"name":"Andy Hunt",
  "title":"Big Boss",
  "age": 68
 },
 {"name":"Charles Mack",
  "title":"Jr Dev",
  "age":24
 }
]
```
suica利用記録, nfcpy

suicaの利用履歴を取るコードのテストの自分用の記録. 

この方々
http://raspberry.mcoapps.com/archives/128
https://github.com/m2wasabi/nfcpy-suica-sample
のをそのまま実行しただけなので, 本記事に価値はなく, 参照元を読むべきです. 

gitの中のsuica_read.pyを実行してみると

```suica_read.pyの実行結果例
Type3Tag ID=0000000000000000 PMM=FFFFFFFFFFFFFFFF SYS=0003
=== 00 ===
端末種: 改札機
処理: 運賃支払
日付: 17-05-11
入線区: 東京地下鉄-9号線千代田
入駅順: 明治神宮前
出線区: 東京地下鉄-11号線半蔵門
出駅順: 渋谷
残高: 777
BIN: 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

.
.
.

=== 18 ===
端末種: 自販機
処理: 物販
日付: 17-05-02
入線区: 西日本旅客鉄道-北陸本
入駅順: 芦原温泉
出線区: None-None
出駅順: None
残高: 991
BIN: 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
=== 19 ===
端末種: None
処理: 物販
日付: 17-05-01
入線区: None-None
入駅順: None
出線区: None-None
出駅順: None
残高: 1441
BIN: 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
```
となって, 20件の利用履歴がでました. 
(一部ダミーにしてます. BINはダミーにしなくてもよかったかもですが)

運賃支払は正しく出ますが, 物販は謎の入線区, 入駅順になってることが一部ありました. 
おそらく, 物販なので本来は駅という概念がないはずなのに, StationCode.csvを呼んでるんでしょうね. 

動画: 
https://www.youtube.com/watch?v=b1v5ftCKywc

あと, suica以外のfelica cardでやると

```
$ sudo python suica_read.py 
Type3Tag 'FeliCa Standard (RC-S915)' ID=0000000000000000 PMM=FFFFFFFFFFFFFFFF SYS=87F1
error: invalid service code number or attribute
```

みたいな感じでちゃんとエラーがでます. 

# refs
suica readの解説をされている
http://raspberry.mcoapps.com/archives/128

suica readの元々のzip
https://github.com/m2wasabi/nfcpy-suica-sample

unzip
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230922/?rt=nocnt
AzureポータルのBashにGitを設定する

Azure Portal上で Cloud Shell (Bash) が使えるようになりましたので、
早速Gitの設定を行いました。

Gitコマンドのタブ補完とステータス表示です。

ここから開きます。
![image](https://qiita-image-store.s3.amazonaws.com/0/120192/07d2c6b8-33e1-37a8-0022-2410a4c22e6a.png)

.bashrc に以下を追加します。

- Gitコマンドのタブ補完
 
```
source /usr/share/bash-completion/completions/git
```

- ブランチ名とステータス表示

```
source /etc/bash_completion.d/git-prompt
```

PS1を以下に書き換えます。お好みに合わせて変更して下さい。

```
PS1='\[\033[32m\]\u@Azure \[\033[33m\]\w\[\033[36m\]$(__git_ps1 " (%s)")\[\033[0m\]\n$ '
```

以下を追加します。
Modify, Untracked, Stash, originより進んでいる遅れている状態の表示を有効にします。

```
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM=auto
```

詳しくはgit-promptでググって下さい。
railsのjbuilderでPOSTでjsonデータを取り込む


### routeの設定
api/todo/にPOSTしたときに、createアクションが実行されるようにroutes.rbを設定します。

```ruby:config/routes.rb
  namespace :api do
    namespace :todo do
      get '/', action: 'index'
      post '/', action: 'create'
    end
  end
```

### コントローラーの記述
jsonのデータを取り込んで、DBへ保存するようcreateアクションを記述します。

```ruby:app/controllers/api/todo_controller.rb
  def create
    @todo = Todo.new(todo_params)
    respond_to do |format|
      if @todo.save
        format.json { render json: 'ok!', status: :created }
      else
        format.json { render json: 'ng!', status: :unprocessable_entity }
      end
    end
  end

  private

  def todo_params
    params.require(:todo).permit(:title, :done)
  end
```


### POST確認
```
$ curl -X POST -H "Content-Type: application/json" -d '{"todo": {"title": "TESTTITLE", "done": false }}' http://localhost:3000/api/todo
```

doneはデフォルトでfalseです。


```
{
  "todo":[
    {"title":"test投稿todo","done":false},
    {"title":"test投稿2","done":true},
    {"title":"TESTTITLE","done":false}
  ]
}
```
Zabbix3.0.9バグ:  SSHチェックで数値型を理解してくれない…

ゴールデンウィーク中に入れたZabbixで、SSH_check機能を使った検証しているとバグに出くわしました。
既にZabbix本家ではバグ報告されていたのですが、あまりにも致命的だったので記事にしてみました。
SSH_check機能を使ってる方は3.0.9にアップグレードしないほうが良いです。
実機で確認していませんが、3.2や3.4も対象のようです。

# 環境
CentOS7
Zabbix3.0.9   (Zabbixオフィシャルのrepository使用(2017/05/11時点で最新))

# 事象
タイプ「SSHエージェント」を使用した「アイテム」にて、データ型を「数値」にすると、数値だと認識してくれない。


# 実際のバグ発生例
## Zabbixで、アイテム作成

* 実行するスクリプト＝戻り値が数値  (この例では、httpdのプロセス数)
* データ型＝数値（整数）
* データの形式＝10進数

![image](https://qiita-image-store.s3.amazonaws.com/0/82244/bef594de-c7be-ed04-206d-ce1e6e78c6a3.png)

## 事象のキャプチャ

エラー"Received value [6] is not suitable for value type [Numeric (unsigned)] and data type [Decimal]"
![image](https://qiita-image-store.s3.amazonaws.com/0/82244/3c3e7030-4426-7ff5-bc2e-81fc46acfd7b.png)
6って数字じゃなかったっけ？とゴールデンウィーク呆けの貧弱な頭で設定見直すも誤りを見つけられなかった。
Zabbixのバグだとは思わず、型やスクリプト変えたりと2時間ほど時間を潰してしまった。

# 結局
やっぱりgoogleは神様だった、違...Zabbixのバグ(PriorityはBlocker)でした
https://support.zabbix.com/browse/ZBX-12100

# 対処
既に3.0.10rc1でFIX済ですが…残念ながら私はRPM手抜き組です。
RPMとしては3.0.10はオフィシャルrepositoryには出ておりません。
とことん手抜きで、yumのダウングレード(ひとつ前の3.0.8-2)してみました。
以下がダウングレードの実施ログですが、簡単すぎでしょ(w)。
ダウングレード後、対象アイテムのエラーは無事消え、検証作業に戻れました。

* 当たり前なのでしょうが、ダウングレード前後でZabbixDBのテーブル定義の差分はありませんでした。

## ダウングレード

```ruby:zabbix-server停止
[root@sv ~]# systemctl stop zabbix-server
```
```ruby:ダウングレード前のZabbix系rpm一覧
[root@sv ~]# rpm -qa | egrep zabbix
zabbix-release-3.0-1.el7.noarch
zabbix-web-3.0.9-1.el7.noarch
zabbix-get-3.0.9-1.el7.x86_64
zabbix-sender-3.0.9-1.el7.x86_64
zabbix-web-mysql-3.0.9-1.el7.noarch
zabbix-agent-3.0.9-1.el7.x86_64
zabbix-server-mysql-3.0.9-1.el7.x86_64
zabbix-web-japanese-3.0.9-1.el7.noarch
```

```ruby:ダウングレード手順
[root@sv ~]# yum downgrade  zabbix-web-3.0.8-2.el7.noarch zabbix-get-3.0.8-2.el7.x86_64 zabbix-sender-3.0.8-2.el7.x86_64 zabbix-web-mysql-3.0.8-2.el7.noarch zabbix-agent-3.0.8-2.el7.x86_64 zabbix-server-mysql-3.0.8-2.el7.x86_64 zabbix-web-japanese-3.0.8-2.el7.noarch
...(略)...
Removed:
  zabbix-agent.x86_64 0:3.0.9-1.el7    zabbix-get.x86_64 0:3.0.9-1.el7             zabbix-sender.x86_64 0:3.0.9-1.el7       zabbix-server-mysql.x86_64 0:3.0.9-1.el7
  zabbix-web.noarch 0:3.0.9-1.el7      zabbix-web-japanese.noarch 0:3.0.9-1.el7    zabbix-web-mysql.noarch 0:3.0.9-1.el7

Installed:
  zabbix-agent.x86_64 0:3.0.8-2.el7    zabbix-get.x86_64 0:3.0.8-2.el7             zabbix-sender.x86_64 0:3.0.8-2.el7       zabbix-server-mysql.x86_64 0:3.0.8-2.el7
  zabbix-web.noarch 0:3.0.8-2.el7      zabbix-web-japanese.noarch 0:3.0.8-2.el7    zabbix-web-mysql.noarch 0:3.0.8-2.el7

Complete!
```

```ruby:ダウングレード後のZabbix系rpm一覧
[root@sv ~]# rpm -qa | egrep zabbix
zabbix-release-3.0-1.el7.noarch
zabbix-agent-3.0.8-2.el7.x86_64
zabbix-web-3.0.8-2.el7.noarch
zabbix-web-japanese-3.0.8-2.el7.noarch
zabbix-web-mysql-3.0.8-2.el7.noarch
zabbix-sender-3.0.8-2.el7.x86_64
zabbix-get-3.0.8-2.el7.x86_64
zabbix-server-mysql-3.0.8-2.el7.x86_64
```
```ruby:zabbix-server開始
[root@sv ~]# systemctl start zabbix-server
```