OmniAICreator/Qiita-1.07M huggingface dataset:
プレゼン資料やアイコンやLGTMに、漫画・アニメを無許可で使うと日本では著作権侵害です

記事の内容はこちらを参照してください。
https://mishimay.github.io/b44cdefa5d2f95521fc8/
<!--

プレゼン資料に漫画のコマを使ったりアイコンがアニメのキャラクターだったりLGTMのgifがアニメのワンシーンだったりするのをよく目にしますが、法律的にどうなのか調べてみました。

※ 以下は2016年12月1日時点での情報です


# 日本では
以下のいずれかを満たしていれば著作物を使うことができます [^1] [^2] 。

  - 日本で保護されていない
    - ただし、外国の著作物であっても条約を結んでいれば日本が保護する義務を持つ
    - 日本は世界の大半の国と保護関係がある [^9] ので、外国の著作物であっても自由に使えると考えてはいけない
  - 保護期間を過ぎている
    - 著作者の死後50年
  - 法律で定められた、例外的に無断で使える条件を満たしている
    - 法令、通達、判決などの権利の目的とならない著作物
    - 私的利用
    - 教育機関における複製
    - 引用
    - 他多くの例外あり [^7]
  - 著作権者から許可をもらう

したがって以上を満たさない漫画・アニメの使用は違法です。

## スライドでの漫画のコマ使用は引用とは言えない
漫画のコマをスライドに挟んで感情を表現する場合、それは引用と言えるのでしょうか？

引用には『引用部分とそれ以外の部分の「主従関係」が明確であること』や「引用を行う必然性があること」 [^8] などが求められます。

漫画の批評を行うためにコマを引用するのは合法ですが、ただ単に自分の言いたいことをキャラクターに代弁させるためだけに漫画のコマを使うことは、たとえ出典をきちんと書いていても違法と言えると思います。


# アメリカでは
アメリカには **フェアユース** という考え方があり、日本の法律よりもより寛大に著作物の利用が認められています。

これは『他者の著作物であっても、非営利や利用する部分が少ないなど一定の条件下で使う場合、「フェアユース」（公正な利用）として著作権の侵害に当たらない』 [^3] とする規定です 。

よってアメリカでは漫画のコマやアニメのキャラクターを資料やアイコンに使っても問題ありません。

シリコンバレーのエンジニアが著作物を使って楽しそうにgifを作ったりLGTM画像を作ったりいろいろやっていても、残念ながら日本で同じようなことができるとは限りません。

## アメリカのサービスを日本で使う場合
例えばTwitterには著作物から作られたGIF画像を検索・投稿できる機能が実装されていますが、これを日本で使った場合どうなるのでしょうか。

この場合「他国のWebサービスでも国内での利用は国内法を適用するという解釈が自然」であるため日本で著作権を侵害するようなGIF画像を投稿してしまうと違法になってしまいます [^3] 。


# 訴えられなくても著作権侵害は犯罪です
著作権侵害は親告罪なので、著作権者から告訴されるまで罪に問われることはありません。

しかし、訴えられなかったとしても著作権を侵害すればそれは犯罪です [^4] [^5] 。

例えば強姦罪は親告罪ですが、訴えられない限り犯罪ではないと言えるでしょうか？


# 社内だけでの利用でも著作権侵害です
著作権法では私的利用であれば無断で著作物を使用できますが、私的利用とは「個人的に又は家庭内その他これに準ずる限られた範囲内」と規定されているため、会社での利用は私的利用にあたらないと考えられます [^6] 。

よって社内だけに公開する資料・アイコンだからと言って許可なく著作物を使うと違法になります。


# 雑感
インターネットの発展と著作権との関係は微妙なところがありますが、現状の法律がどのようになっているか知ることは大切だと思います。
個人的にはアメリカのフェアユースのような緩やかな規定を望みます。


---

[^1]: [著作権の基礎](http://www.furutani.co.jp/kiso/tyosaku1.html)
[^2]: [④著作物を使うには？｜学ぼう著作権｜KIDS CRIC](http://kids.cric.or.jp/intro/04.html)
[^3]: [TwitterのGIFアニメ添付機能、ユーザーが「著作権侵害」に問われる可能性は？――福井弁護士に聞く \(1/2\) \- ITmedia ニュース](http://www.itmedia.co.jp/news/articles/1602/29/news077.html)
[^4]: [著作物を無断で使うと？ \| 著作権って何？ \| 著作権Q&A \| 公益社団法人著作権情報センター　CRIC](http://www.cric.or.jp/qa/hajime/hajime8.html)
[^5]: [非親告罪化ってナニ？それでどうなるの？　桑野雄一郎｜コラム｜骨董通り法律事務所 For the Arts](http://www.kottolaw.com/column/001073.html)
[^6]: [職場の内部資料には有名キャラクターのイラストを自由に使える？？～私的使用にまつわる話｜知らなかったでは済まされない著作権の話](http://www.innovations-i.com/column/bon-gout/4.html)
[^7]: [著作物が自由に使える場合は？ \| 著作権って何？ \| 著作権Q&A \| 公益社団法人著作権情報センター　CRIC](http://www.cric.or.jp/qa/hajime/hajime7.html)
[^8]: [著作権なるほど質問箱](http://chosakuken.bunka.go.jp/naruhodo/answer.asp?Q_ID=0000581)
[^9]: [外国の著作物の保護は？ \| 著作権って何？ \| 著作権Q&A \| 公益社団法人著作権情報センター　CRIC](http://www.cric.or.jp/qa/hajime/hajime5.html)




-->
2016年アドベントカレンダーのネタがない君に贈る〜君のネタは〜

はじめまして。masahixixi といいます。さて、こちらは3枚目の記事です。
単刀直入に言いますとネタが切れました。限界でした。本当に申し訳なかったと思っています。

しかし、昔からピンチはチャンスと言いますし、人が1番成長するのは逆境と向き合った時だと言われています。ここで弱音を吐く私ではありません。それでは3枚目も宜しくどうぞ。

# 僕のネタは
前述の通りです。ありません。そこで思いつきました。ネタがないというネタにしようと。自分で自分のことを天才だと思ったのは生まれて初めてです。

# ネタジェネレーター
誰かがネタを作ってくれたら楽だとは思いませんか？僕が欲しかったのはまさにコレだ感あります。
では、内容を詰めていくとしましょう。

## 要件定義
Qiita のタグを無作為に3つ抜き出して、その3つ全てを使った記事を書く。で良いでしょう。

ruby, perl, java になったらどうするんでしょうね。
vim, emacs, atom だと1人宗教戦争でしょうか。

新しい着想を得ることがこのシステムの目的ですから、気にしないことにします。

## 実装

```ruby
require 'qiita'
require 'json'

client = Qiita::Client.new(access_token: "今年のクリスマスは有馬記念だよ！")

(1..100).each do |i|
  page = client.list_tags({"page":"#{i}", "per_page":100}).body
  page.each do |item|
    File.open("tag_list", "a") do |f|
      f.puts(item["id"])
    end
  end
end
```

```ruby
tag_list = []

File.open("tag_list", "r") do |f|
  f.each_line do |line|
    tag_list << line
  end
end

puts tag_list.shuffle[0..2]
```

## 君のネタは
```
$ ruby neta_generate.rb
lens
InMobi
Hopper

$ ruby neta_generate.rb
cssアニメーション
Immutable
transfrom

$ ruby neta_generate.rb
Tethering
回帰分析
#8.5エラーページの作成

$ ruby neta_generate.rb
password変更
vegan
go-cve-dictionary
```

ご覧の通り酷い有様です。しかし、これで良いのです。しつこいようですが新しい着想を得ることが目的ですから。

# さいごに

いかがでしたか。ネタが思いついてないんだけどアドベントカレンダーに参加してしまった。。。どうしよう。。。という方に新しい視点を与えることが出来たとするならこんな幸せなことはありません。

本記事を今年大ヒットのあの映画のキャッチコピーで〆たいと思います。

【まだ会ったことのないネタを、探している】

それでは皆様良い12月を。
マッスルエンジニアリングの提唱

はじめまして。リブセンスアドベントカレンダー1日目を担当させて頂きます masahixixi です。
早いもので弊社アドベントカレンダーも3年目を迎えることができ枚数も毎年1枚ずつ増えており大変順調に推移しております。それでは宜しくお願い致します。

# 2016年12月1日をマッスルエンジニアリング元年とする
<img width="400" alt="Screen Shot 2016-11-30 at 11.29.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/18359/0d619ec0-2203-c933-df4d-b13efc6ddb1d.png">

こちらの画像は、2016年11月30日にマッスルエンジニアリングで検索を行った際の結果です。
1年後どうなっているか今から非常に楽しみです。

以下より本題です。

# マッスルエンジニアリングとは
私達が普段行っている、開発や運用にマッスルを用いることで開発効率を上げたり、より良い運用に貢献していくことを指します。一個体が持つ筋量を最大化することによって今まで実現できていなかった機能の実装や可用性向上に寄与していくものと考えています。

# マッスルはいつもあなたのそばに
あなたはこんなことを思ったことがありますか？私はよく思います。

* 重たいクエリは筋肉で通せる気がする
* 真摯に筋トレをしていればバグが減ると思っている
* 今学んでいるこの技術の定着が遅いのは筋肉が足りないからだ
    * だから一旦ジムに行く
* プロテインを飲めば生産性が上がると思っている

もし、どれか1つでも該当する方がいるならその方はマッスルエンジニアリング実践者です。

# マッスル視点で業務を覗く
あなたにもこのような経験があるのではないでしょうか？

* いつもより実装が進まない
* 何故か不具合が多い
* 差し込み業務が多い
* ガント通りにプロジェクトが進まない

こんなときは以下を疑ってみてください。

* 筋トレをしていない
    * テストステロンが十分ではないので上記のようなことが発生しがちです。筋トレをしてください。
* その筋トレは十分だったか？
    * 追い込んでなんぼです。
* プロテインは飲みましたか？
    * 筋肉のゴールデンタイムは死守です。(筋トレ後30分以内を指す)

# 今日から出来るマッスルエンジニアリング

* テスト完了までスクワットあるいはアームカール
* pull request が否認されたら腕立て伏せ(レビュワーの数 * 10回)
* 1機能の実装が終わればソイプロテインで乾杯
* 大きなリリースが終わればホエイプロテインで乾杯
* 会議が長い時は空気椅子(寝落ち防止にもなるよ！)
    * (なお、真に筋トレに取り組むものはジムへ行く時間を1番大切にするのでそもそも長い会議には出席しない傾向にあります)

などなど各組織やチームでのマイルールを策定し、より良い筋肉を身に着けていきましょう。

# ペアマッスルプログラミング
ペアプログラミングはすっかり市民権を得ているようなのでこれからの時代はペアマッスルプログラミングが来ると睨んでいます。具体的には以下のように開発を行います。

* 書く人は空気椅子
* 見る人はスクワット

以上です。サボらないように相互監視と掛け声も付けてください。プログラミングに締まりが出ます。
1機能の開発が終わったころには翌日の筋肉痛が約束されます。

# さいごに
いかがでしょうか。今回はマッスルエンジニアリングの片鱗を少しでも感じて頂けたなら幸いです。健全な身体に健全な精神が宿り、健全な精神こそがより良いプロダクト開発へと繋がると信じて止みません。全エンジニアの敵、肩こり/腰痛にも効きますし各企業で2017年流行っていくこと間違い無しと思いを馳せております。

私の未来予想図では3年後を目処に、ベンチプレス100kgをクリア出来る人はCTO面接確約等の切符が払い出される企業が出て来ると確信しております。

マッスルエンジニアリング界隈が賑わってきた際に、マッスルエンジニアリングカンファレンスを行うことが私のエンジニアとしての夢でもあります。

それでは、最後に皆さんにこの言葉を贈りたいと思います。

筋肉、それは人類が見た光。
筋トレを行う全てのものへ、幸あれ。

(なお、これは記事投稿の数日前まで気づかなかったのですが、 http://qiita.com/advent-calendar/2016/muscle このようなカレンダーもあるようです。同じ志を持ったマッスルエンジニアリングの信奉者がこれだけいることを嬉しく思います。私の今年1番の悔いはこのカレンダーに参加できなかったこととなるでしょう。)
企業アドベントカレンダー開始前に行っておきたい2つのこと

リブセンスアドベントカレンダー1日目を担当させて頂きます masahixixi です。
弊社は今年アドベントカレンダーを3枚作成したのですが、初日はすべて私です。あまり気にしないでください。

しかし1年は早いですね、去年インフラエンジニアだった私は今アプリケーションエンジニアのひよこをやっています。気分は新卒です。実力は新卒の10分の1くらいです。すいません、盛りました。100分の1です。

というわけで今年も始まります。リブセンスの1ヶ月を何卒宜しくお願い致します。

# リブセンスアドベントカレンダーの社内拡散運動
小話を少し。
毎年、運営が私1人です。なのでただひたすら頼んで回ります。11月の仕事の半分はアドベントカレンダーの依頼で終わります。今年は初の試みとして、私が一度断られた人たちに女性経由で頼んでもらうという技も会得し、ようやくアドベントカレンダー運営初段の座を手中に収めました。ここまでの道が過酷であったことは言うまでもありません。

注：手段を選ばずに目的を達成しようとするのはほどほどにしましょう。

みんなの反応はこんな感じです。

私「みんな、書いて！」
Aさん「書く！」
Bさん「えー・・・書く。」
Cさん「書かせてください！」
Dさん「嫌です。。。そこまでいうなら・・・書く。」
Eさん「私には無理です。。。書きます。」
Fさん「ネタがありませんが書きます。」
Gさん「仕事が立て込んでいて。。。書きます。」
Hさん「自分だけ書くのアレだから、周りも道連れにする。」
Kさん「A面/B面/C面」
Mさん「控えめに2枚で・・・」

と、こんな感じです。今年も勢いで3枚作ったことは反省していないのですが、新しい取り組みとしていくつか仕組み化しておこうと思いました。なんたって私はエンジニアですからね。それに来年は4枚になりますし。

# 自動通知
さすがにカレンダーも3年目になり3枚に増えたのですべての投稿に社内のエンジニアが目を通すかというとなかなかに怪しいものがあります。過去2年は私による心温まる手動対応によるものでした。

ということで、自動化の機運です。

弊社には全エンジニアが居る(はず)のエンジニア部屋なるものが hipchat に作成されています。通知はここで良いでしょう。

調べてみたところ色々と方法はあるようでしたが、今回はせっかくアプリケーションエンジニアのひよこになったわけですし、おもむろにクソコードを生成してみました。

hipchat の RSSフィードアドオンに逃げなかったボクエライ（棒
(例は2015年)

```ruby
require 'feedjira'
require 'hipchat'

url_list = [
            'http://qiita.com/advent-calendar/2015/livesense_1/feed',
            'http://qiita.com/advent-calendar/2015/livesense_2/feed'
           ]
HIPCHAT_TOKEN = "有馬記念予想 ◎サウンズオブアース".freeze

def hipchat_notify(url, file_name)
  old_count = File.open(file_name).read.to_i
  feed = Feedjira::Feed.fetch_and_parse url

  if feed.entries.count > old_count
    client = HipChat::Client.new(HIPCHAT_TOKEN, :api_version => 'v2')
    client['test'].send('アドベント神様',  "@all #{feed.entries.first.title}, #{feed.entries.first.url}", :color => 'green', :message_format => 'text')
  end

  File.open(file_name, 'w') do |f|
    f.puts("#{feed.entries.count}")
  end
end

url_list.each_with_index do |url, index|
  hipchat_notify(url, "livesense_#{index + 1}")
end
```

例外処理がないって？はい、ありません。考慮漏れじゃありません。時間切れです。許せ同志たちよ。

あとは cron でまわしとけばいっか。

参考は下記。

* http://feedjira.com/
* https://github.com/hipchat/hipchat-rb

# 集計機能
参加人数も相当なものになってきました。コンテンツが多くなると集計したくなりますよね。最終日に発表すると楽しそうです。軽い打ち上げもいいですね。クリスマスですしスパークリングワインで完走に乾杯なんてなかなかおしゃれなもんです。

さて、どうやって集計機能を作ろうかなと思っていたらこんなものがあるじゃないですか。

* http://qiita.com/ktmg/items/d53440c913e20f8bb34c

どれどれ。この人、どこかで見たことありますね。ほう、弊社ですか。去年アドベントカレンダーを作成したのは誰だったかな？おや、私ですか。さすがです。去年アドベントカレンダーを開催した価値があったというもんです。ありがたく先人の知恵を借りるとしましょう。去年の自分は優秀だった模様です。

エンジニアならコードを書け？苦しい道と楽な道があったときに迷わず楽な道を選べと道徳の時間に習いませんでしたか？習ってませんか、そうですか。

もう丸パクりでいいや。むしろスプレッドシート用意するのが面倒なので丸ごともらうとしましょう。

# さいごに
いかがでしたか。社内でもアドベントカレンダーってなんだかんだ盛り上がりますよね。その盛り上げのスパイスとなれば幸いです。それでは、これから25日まで盛り上げていきましょう！
nginx+unicorn_railsでurl生成系ヘルパーがhttp://unicorn/...を返す問題

タイトル通り。
image_url等が http://unicorn/assets/... というURLを返してしまう。

##### 原因
* request.hostに"unicorn"が入ってしまう為

##### 対処
* nginxにproxy_set_headerを追加

```diff:app.conf
    location / {
+       proxy_set_header Host $http_host;
        proxy_pass http://unicorn;
    }
```
Serverless / AWS Lambdaの環境変数を使ってみる

# はじめに
久しぶりにServerless触ってみるかと思って、SlackのBOTを作ってみようとしたのですけど、WebhookのURLをコードに直書きしたくないなと。そしたら環境変数使えるんですね。下の記事を見ると最近サポートされたのでしょうか。

https://aws.amazon.com/blogs/aws/new-for-aws-lambda-environment-variables-and-serverless-application-model/

以下、ほぼ作業ログみたいな感じなのであしからず。

# 準備
まず、新規にserviceを作成。

```bash
$ sls create -t aws-nodejs -n env-sample
Serverless: Generating boilerplate...
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.2.1
 -------'

Serverless: Successfully generated boilerplate for template: "aws-nodejs"
```

テンプレ。

```handler.js
'use strict';

module.exports.hello = (event, context, callback) => {
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless v1.0! Your function executed successfully!',
      input: event,
    }),
  };

  callback(null, response);

  // Use this code if you don't use the http event with the LAMBDA-PROXY integration
  // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};

```

今回はサクッと下記で。

```handler.js
'use strict';

module.exports.hello = (event, context, callback) => {
  // Use this code if you don't use the http event with the LAMBDA-PROXY integration
  callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};

```


```bash
$ sls deploy -v
$ sls invoke -f hello
{
    "message": "Go Serverless v1.0! Your function executed successfully!",
    "event": {}
}
```

楽チンですね。

# 管理画面から環境変数設定
というわけで、環境変数を使ってみる。

```handler.js
'use strict';

module.exports.hello = (event, context, callback) => {
  // Use this code if you don't use the http event with the LAMBDA-PROXY integration
  callback(null, { message: process.env.MESSAGE, event });
};

```

handler.jsを修正して再度デプロイ。
ひとまず管理画面上から設定してみる。

![Screen Shot 2016-11-30 at 22.51.18.png](https://qiita-image-store.s3.amazonaws.com/0/9059/47efc761-9c37-9d73-9c9d-23057b970e63.png)

saveしたら警告出たけどとりあえず無視。

![lambda_save_env.png](https://qiita-image-store.s3.amazonaws.com/0/9059/749af362-e45f-7a31-5e0d-5ee5c9ca540f.png)

コンソールから実行。

```
$ sls invoke -f hello
{
    "message": "hoge",
    "event": {}
}
```

環境変数を参照できてる。

# serverless.ymlで環境変数
次にserverlessを使っているのでserverless.ymlに記述する方法も試してみます。

```serverless.yml
# you can define service wide environment variables here
  environment:
    MESSAGE: hello

```

これをデプロイして実行すると

```
$ sls invoke -f hello
{
    "message": "hello",
    "event": {}
}
```

serverless.ymlで設定した値に変わりました。
管理画面を見てみると、

![Screen Shot 2016-11-30 at 23.24.15.png](https://qiita-image-store.s3.amazonaws.com/0/9059/1535c5f8-edaf-7456-1194-6aa20cc2f2df.png)

こっちも変わってますね。


# その他

* 環境変数の数に制限はない
* でもトータルのサイズは4KBまで(KMS使ってるから)

# 参考サイト
https://serverlesscode.com/post/env-vars-support-lambda/
並列処理・MPIの第一歩

#はじめに

皆さま、はじめまして。某HPC会社に勤めている者です。
このたび、Advent Calender High Performance Computing (HPC)を思いつきで発案しました。非常にエッジな分野で少数派ですが、HPCに関係することならば、なんでも投稿してください。

#アーキテクチャーについて

##並列処理以前のおはなし

###1プロセッサー1コア
近年、計算機周辺の性能が向上してきました。メモリーの容量・バンド幅、ストレージの容量・インターフェース、ノード間の通信が進化してきているところです。
CPUについて市販のCPUでいえば、Pentium 4以前のアーキテクチャーですと1CPUに1コアです。(場合によってはハイパースレッディングもありますが、有効にするとマルチコアに似ています。)
クロック周波数がムーアの法則にある程度従って進化して、そのまま性能につながりました。それができた背景には、半導体でできているLSIの製造技術の向上があります。

##並列処理へ

###マルチコアへの進化

ただ、クロック周波数の向上には限界が見えてきました。そこで1CPUあたりのコア数を増やす方向性に舵を切りました。市販のCPUでいえば、2006年のCore 2 Duoあたりからの話になります。このように1筐体に複数個の処理を同時に実行できるようになりました。1筐体に、共有して使えるメモリー、複数のコア(あるいはスレッド)があり、共有メモリーをおのおののコアが使用します。このしくみの計算機を「共有メモリ型並列計算機」といいます。
実際に複数のコアを制御して共同作業(要するに計算)を行うための具体的な実装として、スレッド並列を記述するOpenMPなどがあります。(勉強して書く時間ができれば書きたいと思います。)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147319/8509c57b-ac4a-262a-5e57-b40f8f9cb0a3.png)


###ネットワーク接続によるクラスター

一方、1筐体の計算機だけではなく、複数の共有メモリ型並列計算機をネットワーク接続して、互いに通信をしあいながら協調して計算を行う方法もあります。大きな大学の研究室や研究所、民間企業で大規模計算を必要とする人のために、「クラスター」とも呼ばれる「分散メモリー型並列計算機」があります。計算機1台1台のことを「ノード」と呼びます。日本で有名な「分散メモリー型並列計算機」として、神戸にある「京」などがありますが、数台のPCをネットワーク接続しても立派なクラスターです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147319/582256c2-3ab7-dcc5-086c-6a2e1cd17019.png)
実際に複数のノードを制御して共同作業(要するに計算)を行うための具体的な実装として、Message Passing Interface (MPI)があります。MPIはクラスターだけではなく、単体の共有メモリ型並列計算機でも使用が可能です。

#MPI
##MPIについて
分散メモリー型並列計算機間のメッセージ通信の規格で、実装としてMPICH ( http://www.mpich.org ) やOpenMPI ( http://www.open-mpi.org )があります。市販のMPIとして、Intel社によるIntel MPIなどがあります。
###良い点
    - プログラマーが細かなチューニングが行える
###悪い点
    - 明示的に手続きを記述する必要がある
といえます。

##MPIの関数の紹介
MPI関数は数百種類ありますが、すべてを覚える必要はありません。まずは取っ掛かりとして必要最低限の関数を紹介します。
###システム関数
    - MPI_Init
    - MPI_Comm_rank
    - MPI_Comm_size
    - MPI_Finalize
###1対1通信関数
    - MPI_Send
    - MPI_Recv;
###通信の同期
    - MPI_Barrier

###時間計測関数
    - MPI_Wtime

が挙げられます。
詳細につきましては、以前に某勉強会でお話しした資料をご覧ください。
http://www.slideshare.net/seiichitanabetanabu/jawsug-hpc-2-lt-mpi

#最後に
HPC・大規模科学技術計算のためには並列化が必須であり、特にメモリ分散型計算機(クラスター)を使います。
メモリ分散型計算機で並列計算を行うためにはMPIによる実装が(今のところ)必須です。
MPIのサブルーチンの数は多いですが、少数の基礎的なもので入門可能です。送受信、同期、時間計測についてしか述べておりませんが、取っ掛かりとなればと思います。
##参考文献・サイト
- スパコンプログラミング入門: 並列処理とMPIの学習 (片桐 孝洋 著、東京大学出版会)
    - 他にも、OpenMPなどに着目した著書などもあります。
- 並列プログラミング虎の巻MPI版 (青山 幸也 著、高度情報科学技術研究機構)
    - OpenMP、チューニングのテキストもあります。http://www.hpci-office.jp/pages/seminar_text
- MPICHサイト
    - https://www.mpich.org/
- OpenMPIサイト
    - http://www.open-mpi.org/
- サンプルプログラムは、Githubにあります
    - https://github.com/sittncs/hpcstudy/
macOS SierraでKarabinerを用いてHHKB Professional JPを利用する

MacBook Proを新型に買い替え、強制的にmacOS Sierraになってしまった。
Sierraでは従来のKarabinerが対応していないため、[Karabiner-Elements](https://github.com/tekezo/Karabiner-Elements)を用いる。

HHKB Professional JPは公式ドライバでも十分利用できるが、CapsLockの置き換えや音量調整等の位置替えを行いたいため、Karabinerを用いてキーの入れ替えを行う。

あくまでも、自分用の設定メモであるため、設定が合うとは限らない。

#環境
・macOS Sierra 10.12.1
・Karabiner-Elements ver : 0.90.67
・HHKB Professional JP（キーボード）

#設定内容
<img width="799" alt="" src="https://qiita-image-store.s3.amazonaws.com/0/136855/ce5694ce-8644-51b4-d0d3-fd39d4c7f2b4.png">

HHKB Professional JPはJIS配列であるため、Keyboard TypeをDefaultからJISに変更した。
変更しないと、USキーボードとして認識されてしまう。


<img width="795" alt="スクリーンショット 2016-11-30 23.03.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/136855/3d97e812-0c87-827b-d968-9c1eac39ff4d.png">

自分のキー置き換えは今まで使っていた通りにした。
具体的には、
・JIS配列のまま
・スペースキーの左のキーで英数、右のキーでかな
・音量調整等はKarabinerのデフォルトのまま（例：Fn+F10でミュート）
・CapsLockをCommandに置き換え
・右OptionをCommandに置き換え
という設定とした。

HHKBキー（キーボードの左下にある）は、公式ドライバであればCapsLockとして機能する。
しかし、Karabiner-Elementsを入れた後はCapsLockではなく、グレイヴ・アクセントが入力されることが分かった。
よって、grave_accent_and_tilde(`)をCommandキーに置き換えた。
他の変更は、画像の通りである。

以上の設定により、MacBook Pro本体のキーボードのような配列に変更できた。
設定は個人によって使いやすさが変わるため、参考程度ということで。


2016.12.6追記
Mac本体のキーボードがJISのとき、DevicesでApple Internal Keyboard〜のKeyboard TypeをJISに変更しないとUSキーボードとして認識されてしまう。
【Yahoo!リアルタイム検索】任意の期間を指定して検索する方法

[Yahoo!リアルタイム検索](http://realtime.search.yahoo.co.jp/search?p=Qiita&rkf=1&ei=UTF-8&lts=1480440600&uts=1480453200&gd=1&gm=d&guts=1480511700)で情報収集をしようとして、「えっ30日間しか遡れないの？:sob:10ヶ月前の◯月◯日〜◯月□日のことを調べたいのに:sob:」と、もどかしくなったので解決策をメモします。
* * *
<br><img width="301" alt="スクリーンショット 2016-11-30 22.12.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/95943/cc11c49c-4d5f-03e2-1a6e-76f6cd8bc9cd.png">


:kobito: 11/30の2:30 - 6:00に絞り込んだときの検索URLに注目。
`http://realtime.search.yahoo.co.jp/search?p=Qiita&rkf=1&ei=UTF-8&lts=1480440600&uts=1480453200&gd=1&gm=d&guts=1480511700`

| パラメータ | 説明 |
|:-:|:-:|
| q | 検索キーワード |
| <font color="deeppink">lts</font> | 検索開始日時 |
| <font color="deeppink">uts</font> | 検索終了日時  |
| guts | 現在の日時  |


11/30 2:30が1480440600で6:00が1480453200......

| 数字 | 示す(表示される)日時  |
|:-:|:-:|
| 1480440600 | 11/30 2:30  |
| 1480440601 | 11/30 2:30  |
| 1480440659  |  11/30 2:30 |
| 1480440660  |  11/30 2:31 |

:santa_tone2::santa_tone2: 単位は秒...!!!:santa_tone2::santa_tone2:


n時間前の検索をするには`3600n`
m日前を検索するためには、`86400m`
を引けば求められる...

検索したい期間が何日前なのか[日数計算](http://www.aichi-iic.or.jp/co/otaya-jouzou/tv01/ya01d.html)で調べて...

3600をかけて...

現在の数字から引いて...

...
Visual Studio 2015 Community 日本語版

Visual Studio 2015 CommunityやExpressの日本語版は、日本語用のインストーラでインストールするのが手っ取り早い。

[ここ](http://landinghub.visualstudio.com/visual-studio-installer-support?campaign=ct!!217276FE25BC401E8189A7386C36A8CD) の下部のセレクトボックスから日本語を選択して、ダウンロード＆インストールすること。
potatotips #35 で発表してきた

potatotips#35 に iOS Tips発表枠で参加してきました。
当日の発表資料などを置いておきます。

# 概要

- MVVMで試行錯誤した箇所: ViewModel での Data Formatting
  - ViewModel 同士でロジックが重複してしまう
- Protocol Extension でロジックの重複を共通化を図る

# 発表資料

> MVVMでProtocol Oriented をやってみた話
> https://speakerdeck.com/kumapo/mvvmdeprotocol-oriented-woyatutemitahua

# サンプルコード

- https://github.com/kumapo/ProtocolOrientedMVVM

# 参考資料

- [Introduction to Protocol-Oriented MVVM](https://realm.io/news/doios-natasha-murashev-protocol-oriented-mvvm/)
GitLab って何?

# GitLab って何?
今日から [GitLab Advent Calendar 2016](http://qiita.com/advent-calendar/2016/gitlab) が始まります。初日は軽く [GitLab](https://about.gitlab.com/) の紹介をしたいと思います。

![gitlab.png](https://qiita-image-store.s3.amazonaws.com/0/103982/439e8285-7053-e635-0a29-a58733abb205.png)


## GitLab
GitLab は [GitHub](https://github.com/) にインスパイアされて作られた Git リポジトリをホスティングをするソフトウェアです。以前は GitHub と比べると見劣りしていましたが、今は遜色ありません。強いていえば、日本語の情報が少ないところが問題でしょうか...

> GitLab unifies issues, code review, CI and CD into a single UI

公式ホームページにあるとおり、Issue (課題) の管理、コードレビュー、CI と CD (継続的デリバリ) をひとつの画面で行うための統一的な機能を提供しています。

GitHub と同様にソースコードを見たり、Issue (課題) 管理を行ったり、Wiki を書いたり、おおよそ開発に必要な機能が含まれています。これらの機能をウェブブラウザーで利用することができますので、お手軽に使うことができます。

GitHub で有名な Pull Request にあたる Merge Request もありますのでご安心を!

どういった機能があるかは [GitLab Advent Calendar](http://qiita.com/advent-calendar/2016/gitlab) で誰かが書くと思いますので、そちらを見てください!


## 製品
### GitLab CE/EE
GitLab にはオープンソース版の [GitLab Community Edition (GitLab CE)](https://gitlab.com/gitlab-org/gitlab-ce) と機能が強化された有償の GitLab Enterprise Edition (GitLab EE) の二種類のソフトウェアがあります。

こちらは自前でサーバーを用意してインストールする事になります。ソースコードだけでなく、rpm/deb パッケージ、Docker、AMI などでも配布されており、簡単にインストールすることができます。

一般的な使い方をしている限り、GitLab CE と EE にそれほど大きな違いはありません。サポートが必要だったり、ミラーリングやマルチ LDAP などの大規模で使う場合を除けば GitLab CE で十分でしょう。


### それ以外の製品
GitLab には Slack ライクなチャット [GitLab Mattermost](https://gitlab.com/gitlab-org/gitlab-mattermost) も用意されています。こちらもオープンソースで無償で使うことができます。

それ以外にも、CI/CD 機能の GitLab CI 及び GitLab CD、Docker Image のホスティング機能の Container Registry があります。

GitLab CI/CD と Container Registry は GitLab CE に完全に統合されており、シームレスに使うことができて大変便利です。


### サービス版
GitLab 社は GitLab CE/EE のサービス版も提供しています。

ひとつは GitLab のサービス版である [GitLab.com](https://about.gitlab.com/) です。こちらなんとプライベートプロジェクトまで無償で作ることができます。更に GitLab CI/CD の利用もプライベートプロジェクトでも無償です。使わない手はないと思います!

もうひとつが、自社専用の GitLab が欲しいけどサーバー運用はしたくないという人向けの有償ホスティングサービスの [GitHost.io](https://about.gitlab.com/githost-io/) です。バックアップやアップデートもサービスに含まれています。


## まとめ
| 製品名 | 料金 | 説明
| ---- | ---- | ----
| GitLab Community Edition (CE) | 無償 | オープンソースでサーバーにインストールして使います。
| GitLab Enterprise Edition (EE) | 有償 | CE の機能強化版。同じくサーバーにインストールして使います。
| GitLab Mattermost | 無償 | Slack ライクなオープンソースのチャット。インストールして使います。
| GitLab CI/CD | 無償 | CI や CD を行います。GitLab CE に統合されています。
| [GitLab.com](https://about.gitlab.com/) | 無償 | GitLab 社が手掛ける GitLab EE のサービス版。インストールせずにすぐに使えます。プライベープロジェクトも CI/CD まで含めて無償で使えます。
| [GitHost.io](https://about.gitlab.com/githost-io/) | 有償 | GitLab 社が手掛ける GitLab CE/EE の有償のホスティングサービス。

とりあえず使いたい人は GitLab.com を、社内で使いたい人は GitLab CE (や GitLab Mattermost) を導入するとよいでしょう。

特に [GitLab.com](https://about.gitlab.com/) はプライベートプロジェクトが CI/CD 込みで無償で使えますので、安価なプライベートリポジトリのホスティングサービスを探している人にはうってつけです。
Cordaのデモのセットアップ方法


R3でおなじみCordaのコードが、2016年11月30日にリリースされました。



## 公式サイト

* 公式サイト: [Corda - an open-source distributed ledger platform](https://www.corda.net/)
* GitHub: https://github.com/corda/corda
* 公式ドキュメント: [Welcome to the Corda documentation! — R3 Corda latest documentation](https://docs.corda.r3cev.com/index.html)




## トレード・デモのインストール方法

CLIとIDE(IntelliJ)でのインストール方法がある様子。

macOSでCLIの場合

### 1. git cloneして、cd

```
git clone https://github.com/corda/corda.git
cd corda
```

### 2. samples以下にデモ用設定を作成 (gradleとかも自動インストール?)

```
./gradlew samples:trader-demo:deployNodes
```

### 3. 3つのノード用の3つの新しいターミナルを開く

```
./samples/trader-demo/build/nodes/runnodes
```

### 4. 自分で発行したお金を持つ購入者のノードをセットアップ

```
 ./gradlew samples:trader-demo:runBuyer
```

### 5. トランザクションを実行

```
./gradlew samples:trader-demo:runSeller
```


デモを動かすための参考ドキュメント
[Running the demos — R3 Corda latest documentation](https://docs.corda.r3cev.com/running-the-demos.html)



## 所感

他にもいくつかデモあるから、試してみるといいかも!

* 今までのブロックチェーン実装の中で最もデモセットアップが楽
* リリースからちゃんとドキュメントがある。そしてわかりやすい。
* 開発者視点では、非常に好印象


## 関連用語

* R3
* Linux Foundationの Hyperledger プロジェクト
* blockchain、ブロックチェーンではなく、分散台帳(DTL)
起動するStoryboardを変更する

##Storyboardを追加する
1. 任意のグループを右クリックし、New Fileを選択
2. User InterfaceのStoryBoardを選択し、Nextをクリックし名前をつけて保存する<img width="727" alt="スクリーンショット 2016-11-30 21.43.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/46743/1e0e8a59-eaa3-097b-f145-65ebfae991d0.png">
3. 新しいStoryboardにViewControllerを追加する

これで、新しいStoryboardの準備が整いました。
##起動するStoryboardを切り替える
1. プロジェクトファイルの設定のGeneralタブを選択する
2. Development InfoのMain Interfaceのドロップダウンをクリックし、上記で追加したStoryboardを選択する
<img width="491" alt="スクリーンショット 2016-11-30 21.51.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/46743/98e53e1b-f94c-bf4b-bf86-358634f3787b.png">

これで起動するStoryboardを切り替えられました。
さて、実行してみます。
<img width="319" alt="スクリーンショット 2016-11-30 21.53.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/46743/ae807581-6b45-107d-7750-1c258a450fb8.png">

画面が真っ黒になってしまいました。

調べてみると、警告がでておりEntry Pointが設定されていないと書かれていました。

EntryPointを設定するには、StroyboardのViewControllerを選択し、右のパネルから「is initial　View Controller」のチェックをオンにします
<img width="251" alt="スクリーンショット 2016-11-30 21.57.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/46743/654d230c-4937-dfc5-b668-5bcdc74668c7.png">


実行してみると、、
<img width="321" alt="スクリーンショット 2016-11-30 21.59.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/46743/ab3a50f7-0a64-1380-c394-d047c854f639.png">

Viewが表示されました。
【Laravel】Blade拡張の使い方(メモ)

# この記事について
laravelを最近使い始めた者です。
laravelのBlade拡張の使い方について備忘録を兼ねて投稿します。この記事では
・foreachなどの使い方
・関数の使い方
を書きます。
(※Qiita初投稿です。何か間違っている箇所があった場合はご指摘いただけると幸いです。)

#Blade拡張について
ドキュメントは[こちら](https://readouble.com/laravel/5.3/ja/blade.html)
要するに@ifや@foreachなどのようなものを自分で作れるらしい。Blade内に自作の関数を作れたりするようで、便利そうなので色々試してみました。

#foreachなどを使う場合
例えばある配列をforeachを使って処理することを試みました。最初に書いたのが以下のようなもの

```AppServiceProvider.php
public function boot()
{
    Blade::directive('sample', function($array) {
        foreach($array as $value) {
            '何らかの処理'
        }
        return "<?php var_dump($array); ?>";
    });
}
```

しかし、これでは以下のようなエラーが出てしまいました。

Invalid argument supplied for foreach()

##解決法
returnの中にforeach文を書けば出来ました。

```AppServiceProvider.php
public function boot()
{
    Blade::directive('sample', function($array) {
        return "<?php foreach($array as $value) { '何らかの処理' } var_dump($array); ?>";
    });
}
```

ただ長い処理を書くとすごいわかりにくくなってしまうかも…。
何か他にやり方がある場合は教えてくださいm(_ _)m

#関数を使いたい場合
自作の関数を作って使いたいと思った場合も
躓きました。
これもすべて<?php ?>の中に書いてしまい、先に関数を宣言することで解決しました。例えば以下のような形で実装しました。

```AppServiceProvider.php
public function boot()
{
    Blade::directive('sampleFnc', function($array) {
        return "<?php function sampleFnc($i) { $result = $i * 2; return $result; } ?>";
    });

    Blade::directive('sample', function($array) {
        return "<?php $test = 2; $test = sampleFnc($test); echo $test; ?>";
    });
}
```

```index.blade.php
//関数を宣言
@sampleFnc
//実行
@sample
```

こんな感じで実装したら出来ました。

#まとめ
Blade拡張を使った例がドキュメントのような例しかなく、関数やforeach、if文などを使いたいときにどうすればいいのか分からず悩んだので忘れないように記事にしてみました。
上記のような形で実装できたけど、これが正しいやり方なのかはわからないので、何かご指摘があればコメントしていただけると嬉しいです。
以上、Qiita初投稿でした。
MSAについて色々

この記事はAltPlus Advent Calendar 2016の1日目の記事です。軽いジャブくらいの気持ちで読んでください。初日の挨拶は[こちら](http://techblog.altplus.co.jp/entry/2016/11/30/193102)です。

# はじめに

そもそもこの記事を書こうと思ったきっかけは次の通りです。友人が「MSAってよく言うしなんとなくわかるけど、じゃあ作れと言われた時よくわからないよな」のようなことを言っていて、実にその通りだと感じとりあえずやってみようと思いたったのが初めです。

そのためこの記事はマイクロサービスアーキテクチャについてものすごく深掘りするわけではなく、わかりきってることをちょっと確かめてみようという程度のものです。感想文です。過度な期待は禁物ですよ。

# そもそもMSAって

マイクロサービスアーキテクチャ、いいですね。もう語感からしてかっこいいです。

教えてGoogle先生！　を行うと情報が山のようです。いいですね、このミーハーな感じ。バズワードってやつです。

きっかけとなったらしいファウラーさんの[ブログ](http://martinfowler.com/articles/microservices.html)には以下のようにあります。

>The term "Microservice Architecture" has sprung up over the last few years to describe a particular way of designing software applications as suites of independently deployable services.
この「マイクロサービスアーキテクチャ」という用語は、ソフトウェアアプリケーションを個別に展開可能なサービスのスイートとして設計する特定の方法を説明するために、ここ数年に誕生しました。

つまり、一つのアプリケーションを細かく分解し、それぞれ別のアプリケーションとして展開し、それが一つのサービスとなる設計のこと、でしょう（適当な要約）。

# 考えてみる

取りあえず簡単に作ってみよう。

## 作りたいもの

艦これの情報をdiscord（チャット）に流したい。

## 構成

* サービス1: 艦これについての記事をクローリングする（今回は公式Twitterのみから情報を取得）
* サービス2: それをdiscordに流す
* サービス1とサービス2はAPIで連携する

![スクリーンショット 2016-11-30 16.26.31.png](https://qiita-image-store.s3.amazonaws.com/0/19043/0ff90fd6-70a8-cb79-071b-f60a2f4ada9e.png "スクリーンショット 2016-11-30 16.26.31.png")
こんな感じ？

## 作ってみると

作ってみた過程、詳細などはカット。特別なことは何もしていませんし、これらの情報はwebに溢れています。だいたい上記の通りです（今度別記事としてあげることにしました）。

さて、マイクロサービスマイクロサービスと連呼され続けていますが、作ってみた感想を並べ立てていこうと思います。

### 正直面倒臭い？
今回簡単に、至極簡単に作ってみましたが、それでも結構めんどい。

サービスを細かくして増やせば増やすほど、準備することや考えることが増えていきます。それぞれにDBが必要でしょうしAPIは都度必要に応じて作らなければなりません。

ですが、これは一人で開発した時の話で、複数人で開発するときは逆にやりやすいのではないかなと思います。環境や作業状況を他人に左右されにくいというのは非常に大きい。各々好きな技術を使うこともできます。ただ、あまりに好き勝手やっていった結果、最新の技術ばかり使われ、後々メンテできる人がいなくなった、なんてことにはならないよう気をつけなければなりませんね。

### 運用しやすそう
適当に作っても、機能追加や障害対応などもやりやすそうなイメージがあります（サービス同士の依存性が高くなければ）。どうしようもならなくなった時、特定のサービスのみをリプレースするというのもやりやすそう。

というのはおそらく今回が非常に小規模なものであるからでしょう。サービスが大きくなり、比例してサービスの数が増えて行った時、障害の特定や解決などは大変だという話をよく聞きます。

機能追加する場合も、既存のサービスに追加するか、新しくサービスを追加するかはちゃんと考える必要があるでしょう。あれこれ適当にして行ったのでは収集つかなくなりそう。

### 委託しやすそう

このサービスだけを頼みたいな〜、なんて考えた時やりやすそうだなと思いました。多くのサービスの中の、一部の簡単なサービスの運用保守ならどこかに任せてもいい気がします。

### トランザクションが大変そう

今回はトランザクションが問題にならない構成でしたが、依存性が高くサービス間のトランザクションが必要になってくることもあるかと思います。これは始める前から思っていたのですが、調べてみるとそんな話がいっぱい出てきます。解決法としては、依存性が高くなってしまうものはなるべく一つのサービスとしてまとめる、ローカルでトランザクションを貼る->ローカルの更新処理を全て行う->更新系のAPI->成功したらコミット、などがあるようです。私の経験的には、似たようなものを作る時、何かの更新のたびAPIを叩いて通知した記憶があります。

こういうことも考慮に含めてシステムを構成する必要があるのでしょう。

# 終わりに
ミーハーな感じに済ませてしまいましたが、読み返してみれば当たり前のことしか言ってませんね。

マイクロサービスマイクロサービスと言われ続けて、なんかすげえ！　という気分になってきますがコンパクトに作ってしまえば、非常に理解がしやすいです。それほど特別なことではありません。

ある程度大きなものを他者と共同で作ろうとした時、多かれ少なかれ似たようなことはこれまでもあったと思います。SIer的には認証基盤を別に設けたり、溜め込んだデータを解析したり・・・、なんてことを下請けに発注して、みたいな闇の話。それはともかく、今までもあったシステムの作り方を、さらに細かくして、名前をつけたのが、つまるところマイクロサービスアーキテクチャと呼ばれるものだと思います。

まあ実際にやろうとした時、構成はどんどん複雑になってくるのでしょうけれども。。。

ということでAltPlus Advent Calendar 2016 1日目の記事でした。

2日目はcimadaiさんです。よろしくお願いします！
NativeScriptでプッシュ通知を実装

([元記事](http://blog.mmmcorp.co.jp/blog/2016/11/24/NativeScriptPushNotification/))

[NativeScript](http://blog.mmmcorp.co.jp/blog/2016/04/08/hybrid-app/)でプッシュ通知を実装したので、大まかな流れだけ書いてみようと思う。なお、BaaSには、[Repro](https://repro.io/apps/xd9rgjdw/dashboard)というサービスを使用した。

## iOS

### 実装の流れ

1. CSRファイルの作成
2. 開発用証明書(.cer)の作成
3. AppIDの作成
4. 端末の登録
5. プロビショニングプロファイルの作成
6. APNs用証明書(.cer)の作成
7. APNs用証明書(.p12)の作成、Reproへのアップロード
8. Reproのネイティブライブラリを使うため、[NativeScript Plugin](https://docs.nativescript.org/plugins/plugins)を作成
9. NativeScript Plugin側で、Repro SDK(CocoaPods)と`*.framework`の依存関係を記述
10. Reproのネイティブ実装をJavaScriptで実装(APNsへの端末の登録・デバイストークンの設定)

1-5は、既存のものがあればそれを利用してよく、6,7でプッシュ通知用の証明書をつくることが重要である。こうしてみると、1-7はネイティブアプリのフローと全く変わらないことがわかる。また、8以降もObjective-C=>JavaScriptの変換だけなので、慣れればそこまで大変ではない。実際、(僕の場合)時間がかかったのは、経験の少ない、1-7の証明書関連だった。

他に注意点としては以下がある。

* 開発用証明書と同じCSRファイルでAPNs用証明書を作成すること
* プッシュ通知はiOS Simulatorでは動かないので、実機で検証する必要がある
* AdHoc版ではプッシュ通知が送信できない？時があるので、それ用の証明書をつくるほうがよい

### 参考

* [プッシュ通知（iOS）— Repro ドキュメント](http://docs.repro.io/ja/dev/sdk/push-notification/ios.html)
* [iOSでプッシュ通知を実装する方法の超詳細まとめ(前編) | Lancork](https://www.lancork.net/2013/08/how-to-ios-push-first/)
* [プッシュ通知に必要な証明書の作り方2016 - Qiita](http://qiita.com/natsumo/items/d5cc1d0be427ca3af1cb)
* [【ios】AdHoc（デプロイゲートでの）版プッシュ通知が遅れなくてハマったときのメモ - とりあえずphpとか](http://kimagureneet.hatenablog.com/entry/2015/10/14/020016)
* [APNSで通知が飛ばない場合に考えられる問題 - Qiita](http://qiita.com/0x0c@github/items/811fb70d0d2523968e50)
* [Xcode 8 の新しい Signing 機能について ｜ Developers.IO](http://dev.classmethod.jp/smartphone/xcode-8-signing/)

## Android

### 実装の流れ

1. [Firebase Console](https://console.firebase.google.com/?hl=ja)でプロジェクトを作成
2. クラウドメッセージングのAPIキーを生成
3. APIキーをReproに登録
4. 端末にGoogel Palyストアをインストール(エミュレーターなどで、未インストールの場合がある)
5. Reproのネイティブライブラリを使うため、[NativeScript Plugin](https://docs.nativescript.org/plugins/plugins)を作成
6. NativeScript Plugin側で、Repro SDKの依存関係を記述
7. NativeScript Plugin側で、AndroidManifest.xmlの設定を記述
8. Reproのネイティブ実装をJavaScriptで実装(カスタムアクティビティでデバイストークンの登録)

こちらもiOSと同様で、1-4はネイティブと同じフローとなる。4をもう少し早く切り分けられると良かったと思う...。ネイティブの実装をしっかり認識しておくことはいずれにせよ必要だなと感じた。

### 参考

* [プッシュ通知（Android）— Repro ドキュメント](http://docs.repro.io/ja/dev/sdk/push-notification/android.html)
* [Androidで使えるO2O技術まとめ解説（終）：AndroidビームとPush通知で最強のO2Oアプリを作る (1/3) - ＠IT](http://www.atmarkit.co.jp/ait/articles/1302/12/news029.html)
* [GenymotionにGoogle Playストアをインストールする方法。](http://androidlover.net/genymotion-install-google-play)

## おわり

以上、NativeScriptでのプッシュ通知実装についてまとめてみました。参考になれば幸いです。
UIStackViewを使ってViewを等間隔に並べる

##UIStackViewの子Viewの並べ方に関する設定項目

* Axis
	* 並べる方向
		* Vertical
		* Horizontal
* Alignment
	* Viewの揃え方
		* Fill
		* Top
		* Center
		* Bottom
		* First Baseline
		* Last Baseline 
* Distribution
	* 並べる方向に対するViewの並べ方
		* Fill
		* Fill Equally
		* Fill Proportionally
		* Equal Spacing
		* Equal Centaring
* Spacing
	* 子View同士の間隔

##実際に並べてみる
UIStackViewにButtonを２つ、StackViewを２等分するように配置するには以下のように設定する

Axis：Horizontal
Alignment：Fill
Distribution：Fill Equally 
Spacing：0


<img width="247" alt="スクリーンショット 2016-11-30 21.02.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/46743/eee8681e-ebb9-3a34-8597-831409f0a9c8.png"><img width="319" alt="スクリーンショット 2016-11-30 20.56.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/46743/4aef8865-5299-bec3-b1fb-f7cf08196993.png">
Atomic Host でロケールに関するエラーが表示される場合の対処法

## 環境
```bash
$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
```

## 問題
ISO を使って CentOS Atomic Host をインストールする際、言語に「日本語」を選択していると、インストール後のログイン時に次のような警告が表示される。

```
-bash: warning: setlocale: LC_CTYPE: cannot change locale (ja_JP.UTF-8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (ja_JP.UTF-8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (ja_JP.UTF-8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (ja_JP.UTF-8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (ja_JP.UTF-8): No such file or directory
```

また、コンソールからの利用時に日本語キーボードを使っている場合でも、英字キーボードとして扱われる。

## 原因
Atomic Host には日本語ロケールがインストールされていないため。

```bash
$ locale -a
C
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
POSIX
```

## 対処
今のところ Atomic Host において**インストール後にロケールを追加する方法はない**。そのため `ja_JP.UTF-8` という設定自体が無効である。大人しくロケールを `en_US.utf8` に変更する。

```bash
# 変更前
$ cat /etc/locale.conf
LANG="ja_JP.UTF-8"

# 変更後
$ cat /etc/locale.conf
LANG="en_US.utf8"
```

再度ログインすると、先程の警告は表示されなくなっている。

## 英字キーボード問題
上記の対応を行ったとしても日本語キーボードが使えるようになるわけではない……が、SSH経由でログインする場合は問題なく日本語キーボードが利用できる。どうしてもコンソールから直接操作する場合は、諦めて英字キーボードを接続する。
エクセルの次はとりあえず、jupyter notebook

このブログは[jupyter notebook Advent Calendar 2016](http://qiita.com/advent-calendar/2016/jupyter)の1日目のエントリーです。

最初にすみません。体調不良につき、まともな記事かけません。中途はんばですが、勘弁おねがいします。

### この記事の趣旨

jupyter notebook (試行錯誤できるプログラミング環境)　を多くの人に使ってもらいたいため

### この記事の想定読者

1. エクセルを使ってのデータ分析は限界だなと感じている人
2. 大きなデータ（CSV）は提供してもらえる
3. プログラミングの勉強もしないと行けないと思っているが、何を勉強していいか、悩んでいる
4. Web からデータを取得したい（スクレイピング）


## 1.エクセルを使ってのデータ分析は限界だなと感じている人

この記事　[ビジネスデータ分析をEXCELからPython中心に変更してわかった多くのメリット](http://kkumagai.github.io/why_python/) を読みましょう。python と書いてありますが、事実上 jupyter notebook のことでしょう。

上記記事では、データ分析をPythonで行うメリットを４つあげています

1.Excelではそもそもできないデータ分析が可能に
2.誤操作によるヒューマンエラーが激減
3.ロジックの可視化によるチームレベルの底上げとコードの再利用率の向上
4.より優秀な人を獲得できるように

自分の感触ですが、2.誤操作によるヒューマンエラーが激減　のメリットが大きいと思われます。
ミスが多発しやすい作業を,jupyter notebook 化するのは結構メリットありです。

## さて、もとの項目の2,3,4 ですが
jupyter notebook おすすめですと簡単に紹介します。

※インストールは、[windows用](http://qiita.com/zanjibar/items/6c33693474390db31e34) をご覧ください。

※例はこれ、[出入国管理のデータを取得 ](https://github.com/zanjibar/data4nihon/blob/master/estat/immigration-simple.ipynb)
このまま使えます。政府統計をもってきて手元で使いたい方は、ぜひ改造してください。
SDKMANでLeiningenをインストールする

　sbtやGradle、Mavenと同じように[Leiningen](https://leiningen.org/)のインストールが[SDKMAN](http://sdkman.io/)からもできるようになっていました。SDKMANを使うとJVM言語はまとめてバージョン管理できるので便利です。

## Debian JessieにOracle JDK 8をインストール

　ClojureはJava 8で動作するといろいろと便利ですが、Debian JessieにJava 8をセットアップするのは一手間です。Ubuntu Preciseの[PPA](https://launchpad.net/~nilarimogard/+archive/ubuntu/webupd8)を使えば簡単なのですが何か気持ち悪いので[make-jpkg](https://wiki.debian.org/JavaPackage)してdebパッケージを作ります。

　まず依存するパッケージをインストールします。

```bash
$ sudo apt-get update
$ sudo apt-get install -y libgl1-mesa-glx libxslt1.1 libxtst6 libxxf86vm1 libgtk2.0-0
```

　Oracle JDKは[ここ](http://www.oracle.com/technetwork/java/javase/downloads)からダウンロードします。今回はCUI環境を使っているのでwgetで省略します。

```bash
$ wget --no-check-certificate --no-cookies \
     --header "Cookie: oraclelicense=accept-securebackup-cookie" \
     http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.tar.gz
```

　ダウンロードしたtarballはmake-jpkgコマンドを使いdebパッケージを作成します。

```bash
$ make-jpkg jdk-8u111-linux-x64.tar.gz
...
The Debian package has been created in the current directory.
You can install the package as root with:

    dpkg -i oracle-java8-jdk_8u111_amd64.deb


Removing temporary directory: done
```

　説明通りにdebパッケージをインストールします。

```bash
$ sudo dpkg -i oracle-java8-jdk_8u111_amd64.deb
```

　ログにも出ていますがupdate-alternativesも実行されているのでOracle Java 8がすぐに使える状態になっています。

```bash
$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
```

　環境変数JAVA_HOMEを設定してOracle JDK 8のインストールは終了です。

```bash
$ echo 'export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-x64' >> ~/.bashrc
$ source ~/.bashrc
```

## SDKMANのインストール

　JDKがインストールされていれば[SDKMAN](http://sdkman.io/)のインストールはワンライナーで簡単です。

```bash
$ curl -s get.sdkman.io | /bin/bash
```

　すでにSDKMANをインストールしている場合はselfupdateして最新にしてください。[2016年9月](https://github.com/technomancy/leiningen/issues/2204)以降にLeiningenをサポートしたようです。

```bash
$ sdk selfupdate
$ sdk version
==== BROADCAST =================================================================
* 23/11/16: Gradle 3.2.1 released on SDKMAN! #gradle
* 22/11/16: Ceylon 1.3.1 released on SDKMAN! #ceylonlang
* 15/11/16: Kotlin 1.0.5-2 released on SDKMAN! #kotlin
================================================================================
SDKMAN 5.1.7+91
```

## Leiningenのインストール

　SDKMANを使ってLeiningenをインストールします。2016-11-30の時点で2.7.1がインストールされます。

```bash
$ sdk install leiningen
...
Setting leiningen 2.7.1 as default.
```

　Clojureのバージョンは1.8.0です。

```bash
$ lein repl
...
user=> (clojure-version)
"1.8.0"
```
iOS Simulator上で作成したCoreDataの格納場所

iOS Simulator を使用していて、 CoreData の中身が確認したくなったのですが、格納場所が分からず困ってしまったので、調べた結果を残しておきます。

## 格納場所
```
~/Library/Developer/CoreSimulator/Devices/<Device ID>/data/Containers/Data/Application/<App UUID>/Documents/
```

`Device ID` には、シミュレータごとのIDが入ります。
Xcode の Windows > Devices > Identifire で確認することができます。

`App UUID` には、アプリのUUIDが入ります。
これを確認する方法は見当たらなかったので、なんとか総当たりで確認しました。

## .sqlite
SQLite のファイルは、[DB Browser for SQLite](https://sourceforge.net/projects/sqlitebrowser/) などの専用のビューワなどで確認することができます。
Qiita で使えそうな Font Awesome Icons --Qiita をよりオシャレに書くために--


下記の記事を参考に、どのアイコンをどういう用途で使うのかリストにしてみました。
http://qiita.com/tbpgr/items/361d8aaa38fb57d75216

## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要

```
## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
```

上記の記事にもありますが、四角を**項目**に見立てて使うことができます。
項目が複数集まっていることで**概要**を表します。

## <i class="fa fa-cube" style="font-size:1em;"></i> 項目

```
## <i class="fa fa-cube" style="font-size:1em;"></i> 項目
```

同上

## <i class="fa fa-list" style="font-size:1em;"></i> 目次

```
## <i class="fa fa-list" style="font-size:1em;"></i> 目次
```
リストのアイコンを使うことで**目次**を表します。


## <i class="fa fa-angle-double-right" style="font-size:1em;"></i> 見出し

```
## <i class="fa fa-angle-double-right" style="font-size:1em;"></i> 見出し
```
やじるしアイコンは、汎用的に見出しとして使えます。


## <i class="fa fa-check-square-o" style="font-size:1em;"></i> チェックボックス

```
## <i class="fa fa-check-square-o" style="font-size:1em;"></i> チェックボックス
```

チェックボックスアイコンは**項目**や**確認事項**に使うこともできますね。

## <i class="fa fa-thumb-tack" style="font-size:1em;"></i> ピン

```
## <i class="fa fa-thumb-tack" style="font-size:1em;"></i> ピン
```
ピンアイコンも、**注意事項**や**補足事項**など、読者に是非注目して覚えてほしいことなどに使えそうです。


## <i class="fa fa-info-circle" style="font-size:1em;"></i> 情報

```
## <i class="fa fa-info-circle" style="font-size:1em;"></i> 情報
```
情報アイコンは**追加情報**に使えそうです。

## <i class="fa fa-search" style="font-size:1em;"></i> 探す

```
## <i class="fa fa-search" style="font-size:1em;"></i> 探す
```
虫眼鏡アイコンは、**調査結果**などを載せるのにいいかもしれません。

## <i class="fa fa-terminal" style="font-size:1em;"></i> ターミナル

```
## <i class="fa fa-terminal" style="font-size:1em;"></i> ターミナル
```
ターミナルアイコンは**汎用性が高そう**ですね。
実行コマンドを載せるときなどに使えます。

## <i class="fa fa-cloud-download" style="font-size:1em;"></i> ダウンロード

```
## <i class="fa fa-cloud-download" style="font-size:1em;"></i> ダウンロード
```
ダウンロードアイコンは **Github** にコードを載せる場合などに使えそうです。


## <i class="fa fa-sliders" style="font-size:1em;"></i> 設定

```
## <i class="fa fa-sliders" style="font-size:1em;"></i> 設定
```
設定アイコンは、その名の通り、**設定項目**を載せる時に最適です。
ミドルウェアの設定項目などに使えそうです。


## <i class="fa fa-book" style="font-size:1em;"></i> 参考資料

```
## <i class="fa fa-book" style="font-size:1em;"></i> 参考資料
```

本のアイコンは、**参考資料**、**追加資料**的な用途に使うことができます。
イケてるcrontabのいじり方

# crontab -eはだめ。
* ミスりやすい。
* 間違ってcrontab -rしようものなら・・・(全部消えます)。
* crontabってコマンドを叩くだけで震えが止まりません。
* 元に戻すのが変更量によっては大変なこともある。

# イケてるcrontabのいじり方
## 作業ディレクトリの作成
1. 場所はどこでもかいまいませんが、作業ユーザーのホームディレクトリで大丈夫でしょう。
2. 年で一旦ディレクトリを切って月日でディレクトリを作っていますが、これも好みで自由に設定して大丈夫です。
3. 大事なのは作業者が変わっても同じルールで運用することです。

```bash
[hoge@hogeserver ~]$ WORK_DIR=~/work/$(date +%Y)/$(date +%m%d)_crontab
[hoge@hogeserver ~]$ mkdir -p ${WORK_DIR}
[hoge@hogeserver ~]$ cd $_
```
## 今のcrontabを取得する
```bash
[hoge@hogeserver ~]$ crontab -l > crontab.old
[hoge@hogeserver ~]$ cp crontab.old crontab.new
```

## 修正する
1. 好きなエディタで修正してください。

```bash
[hoge@hogeserver ~]$ vi crontab.new
```

## 変更差分のチェック
1. diffコマンドの-yオプションで2列横に並べて表示、--suppress-common-linesオプションで同じ行は表示しない
2. もちろんvimdiffでも大丈夫ですし、その他diff toolでも。

```bash
[hoge@hogeserver ~]$ diff -y --suppress-common-lines crontab.old crontab.new
```

## 実際にcrontabに反映する
```bash
[hoge@hogeserver ~]$ crontab crontab.new
```
## 反映されているかチェック
1. crontab.newとは差分が**ない**ことを確認する
2. crontab.oldとは差分が**ある**ことを確認する

```bash
[hoge@hogeserver ~]$ crontab -l | diff - crontab.new # 差異がないこと
[hoge@hogeserver ~]$ crontab -l | diff - crontab.old # 差異があること
```

## 元に戻す時は
1. もともとのファイルを食わしてあげるだけ。
2. 心配性なあなたはdiffももう一度実行すると良いかもしれません。

```bash
[hoge@hogeserver ~]$ crontab crontab.old
```

# crontab tips
## 変数が実は使えます
1. crontabエントリーは長くなりがちですが、変数を上手に使うと折り返しなく表示できてストレス軽減できます。
2. crontabのバージョンやLinuxディストリビューションでできるできないがあるので実運用前にはテストをしてください。
3. これを利用するとと下記のように書くことが可能です。

```bash
MAILTO=""
BATCH_DIR="/path/to/batch"

0 5 * * * /bin/bash ${BATCH_DIR}/hoge.sh
```
## 変数が使えるなら・・・
1. (もしかしたら試すディストリビューション、cronバージョンが少ないかもしれませんが)
2. こういう書き方は出来ないようです

```bash
MAILTO=""
BATCH_DIR="/path/to/batch"

# ↓これはできないようです
LOG_DIR="${BATCH_DIR}/log"
0 5 * * * /bin/bash ${BATCH_DIR}/hoge.sh >>${LOG_DIR}/hoge.log 2>&1
```

## ログファイル名には日付を入れましょう
1. 運用ポリシーにもよりますが、ずっと同じファイルにログを書き続けるとパフォーマンスが良くないです。
2. 障害発生時にログを開くのにイライラしたり探すのに時間がかかったりします。
3. dateコマンドで今日の日付を入れてあげると日毎のログファイルに分割されます。

```bash
MAILTO=""
BATCH_DIR="/path/to/batch"
LOG_DIR="/path/to/batch/log"

0 5 * * * /bin/bash ${BATCH_DIR}/hoge.sh　>>${LOG_DIR}/hoge.$(date +\%Y\%m\%d).log 2>&1
```

## dateコマンドのエスケープは適切に
1. エスケープ忘れると他のエンジニアに笑われるログファイルが出来上がります。
2. ちょっと恥ずかしいので、出来てしまったらmvコマンドですぐ隠蔽しましょう。

```bash
MAILTO=""
BATCH_DIR="/path/to/batch"
LOG_DIR="/path/to/batch/log"

0 5 * * * /bin/bash ${BATCH_DIR}/hoge.sh　>>${LOG_DIR}/hoge.$(date +%Y%m%d).log 2>&1
```
## /dev/nullにはできるだけ出力しないようにしましょう
1. そもそも何が起こってるかわからなくなる
2. アプリケーションで別にログを出力してる場合は大丈夫

## 標準出力と標準エラーは分けましょう
1. 障害発生時の対応が早くなります。
2. エラーは指定したファイルに出力されるので、障害の監視もしやすくなる。
3. 場合によってはエラーのディレクトリをつくってそこに格納しても良いかもしれませんね。

```bash
MAILTO=""
BATCH_DIR="/path/to/batch"
LOG_DIR="/path/to/batch/log"

0 5 * * * /bin/bash ${BATCH_DIR}/hoge.sh　1>>${LOG_DIR}/hoge.$(date +\%Y\%m\%d).log 2>>${LOG_DIR}/hoge.$(date +\%Y\%m\%d).error.log
```
ラノベやコミックの新刊情報を Slack に通知する方法

## <i class="fa fa-angle-double-right" style="font-size:1em;"></i> 一行で説明
[ベルアラート](https://alert.shop-bell.com/) と [IFTTT](https://ifttt.com) と Gmail を使って実現します。

## <i class="fa fa-angle-double-right" style="font-size:1em;"></i> 手順

### 1. ベルアラートに登録

[ベルアラート](https://alert.shop-bell.com/)にアクセスし、メールアドレスを登録します。
ここで登録するメールアドレスを Gmail にします。
Gmail にするのは、IFTTT で Slack と連携するためです。

### 2. ベルアラートで新刊をチェックしたいラノベやコミックを選択

タイトルや作者でのアラート設定が可能です。また、kindle版か書籍版かの選択や、予約開始日、販売開始日のどちらに（もしくはどちらも）アラートするかなども選べます。
いち早く読みたい作品や作者をガンガン登録しましょう。
これで、先程登録したメールアドレスに新刊通知が来るようになりました。

### 3. IFTTT でアプレットを登録
[IFTTT](https://ifttt.com) で Gmail と Slack の連携をします。

1. Triger として Gmail の "New email in inbox from" を選択
1. `alert@shop-bell.com` からのメールを対象に設定
1. 連携先として Slack を設定
1. 通知したい Slack のチャンネルを選択

## <i class="fa fa-angle-double-right" style="font-size:1em;"></i> おわりに
以上でベルアラートを用いて Slack の任意のチャンネルに新刊通知を送る設定ができました。
また、今回作ったアプレットを公開しようと思ったのですが、[現在 IFTTT ではアプレットの公開設定ができないようです...](https://productforums.google.com/forum/#!topic/googlehome/oqy7IuxsbrE)
公開できるようになればこの記事に追加したいと思います。
CentOS 6.x で EPEL リポジトリを利用する

## 実現したいこと

CentOS 6.x で EPEL リポジトリを利用できるように設定する

## 実現方法および解決方法

EPEL リポジトリを利用するための証明書のインポートと設定ファイルを記述する

## 実行コマンド

```
# 設定ファイルのインストール
sudo yum install epel-release

# 設定ファイルの修正
# yumコマンドでenablerepoオプションでリポジトリを指定しないと
# EPRL リポジトリをインストールできないようにする
$ sudo sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/epel.repo

$ yum --enablerepo=epel list
```


## 参考情報

* https://fedoraproject.org/wiki/EPEL/ja
* https://getfedora.org/keys/
* 本記事のコメント:a_suganoさん thanks!
  * http://qiita.com/UmedaTakefumi/items/bda7b572a4a2c21ab000#comment-abb786296a7cc16a1ef1
kintone プラグインを活用したアプリ作成例

#kintone プラグインを活用したアプリ作成例

今回は、rex0220 stores の中で、人気の高い下記プラグインを使ったカスタマイズ例をご紹介します。
それぞれプラグイン個別の紹介例はありますが、複数のプラグインを活用した例がありませんでした。

- [rex0220 タブ表示プラグイン](http://qiita.com/rex0220/items/893de4edaa45e7b2e295)
- [rex0220 ルックアップ先更新プラグイン](http://qiita.com/rex0220/items/573c462117ad4104c2cd)
- [rex0220 ルックアップ自動取得プラグイン](http://qiita.com/rex0220/items/7a1984b75644b00cb508)
- [rex0220 ルックアップ選択条件プラグイン](http://qiita.com/rex0220/items/6d40f02069e2d386f336)


#営業管理アプリの構成

顧客情報アプリ、施設情報アプリ、営業管理アプリからなる構成とします。
それぞれのアプリは、ルックアップで関連付けられます。
施設情報アプリと営業管理アプリには、顧客情報アプリの項目がルックアップ設定でコピーされます。

![アプリ構成1.png](https://qiita-image-store.s3.amazonaws.com/0/100572/e79c88a1-36e9-2e77-d7f5-70b9cf2a08a9.png)


#[タブ表示プラグイン](http://qiita.com/rex0220/items/893de4edaa45e7b2e295)

項目が多いと縦長になりがちですので、タブ表示プラグインで表示項目を切替えます。
顧客情報アプリのタブ表示例です。

![タブ表示1.png](https://qiita-image-store.s3.amazonaws.com/0/100572/dc1d2440-b799-c720-5172-f80e553d5ab1.png)



タブ表示設定は、タブ名と表示する行数（１行・グループ・テーブル単位）を指定するだけです。

![タブ表示設定1.png](https://qiita-image-store.s3.amazonaws.com/0/100572/8cb0020b-be4b-94ec-b7bb-289f8edad835.png)



#ルックアップの親子孫問題

ルックアップ機能には、ルックアップ元（親）の情報が変更されても、ルックアップ先（子）にコピーされた情報が更新されない問題があります。

このルックアップ問題の対策として、ルックアップ先更新プラグインを使います。
ルックアップ先更新プラグインは、ルックアップ先を自動更新してくれます。

しかし、下記の顧客情報アプリと営業管理アプリのようにルックアップの情報が３階層（親子孫）まで連携すると、ルックアップ先更新プラグインでも対応できません。
JavaScript カスタマイズでも３階層だと処理が複雑です。


![ルックアップ関連1.png](https://qiita-image-store.s3.amazonaws.com/0/100572/8d983bbe-c3ee-8825-bae5-a0077dd705b1.png)

対策としては、営業管理アプリで、大元の顧客情報をルックアップを設定することにより、すべて親子関係にします。
顧客情報アプリでルックアップ先更新プラグインを設定すると、顧客情報を更新時に施設情報アプリと営業管理アプリが自動更新されます。

#ルックアップ先更新プラグインの設定と更新実行画面

設定は、ルックアップ項目の一覧から更新対象を選択するだけです。

![ルックアップ先更新設定1.png](https://qiita-image-store.s3.amazonaws.com/0/100572/2ecc11cc-9a78-a6cc-c0ae-7b5a00f65cea.png)

レコード更新を行うと、ルックアップ先更新プラグインの更新状況が表示されます。

![ルックアップ先更新1.png](https://qiita-image-store.s3.amazonaws.com/0/100572/4ab4386c-804c-364d-0936-fe1fd98b0472.png)



#アクション機能によるレコード登録と[ルックアップ自動取得](http://qiita.com/rex0220/items/7a1984b75644b00cb508)

アクション機能で、レコード登録を行う場合、ルックアップを手動で取得しなければなりません。
ルックアップ自動取得プラグインを使うと、自動でルックアップを取得してくれます。

ルックアップ数が多いアプリでは、登録効率に影響します。

![施設登録1.png](https://qiita-image-store.s3.amazonaws.com/0/100572/be13602d-bdd6-44b2-fa91-88d0ae76bcc2.png)

#新規レコード登録と[ルックアップ選択条件プラグイン](http://qiita.com/rex0220/items/6d40f02069e2d386f336)

標準のルックアップ機能では、「顧客番号で指定された顧客の施設レコードのみ表示する」などの他項目の値による絞り込みが出来ません。

ルックアップ選択プラグインによって、簡単に他項目によるデータ選択が出来ます。

![ルックアップ選択1.png](https://qiita-image-store.s3.amazonaws.com/0/100572/268d7dac-14ac-d138-2b08-348ce28fc66e.png)


#最後に

プラグインを使うと、高度なカスタマイズが容易にできます。
用途に合わせて、いろいろなプラグインが各社から公開されていますので、ぜひお試しください。
C++ Builder > IDE > [ファイル]-[使用するユニット]でincludeする位置をコントロールする > #ifdef使用

```txt:動作確認
C++ Builder XE4
```

IDEの標準機能として、メニューの[ファイル]-[使用するユニット]を使うことで、ソースもしくはヘッダファイルに#include "Unit2.h"などを追加できる。

### 通常の追加

```Unit1.cpp
#include "Unit1.h"
#include "Unit2.h"
```

[ファイル]-[使用するユニット]にてUnit3.hを追加すると以下となる。

```Unit1.cpp
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
```

### 追加場所のコントロール

こちらは、IDEを使っている中で偶然見つけた機能。

```Unit1.cpp
#include "Unit1.h"

#define DEBUG_XXX
#ifdef DEBUG_XXX
#include "Unit2.h"
#endif
```

[ファイル]-[使用するユニット]にてUnit3.hを追加すると以下となる。

```Unit1.cpp
#include "Unit1.h"
#include "Unit3.h"

#define DEBUG_XXX
#ifdef DEBUG_XXX
#include "Unit2.h"
#endif
```

どうも#ifdefで囲われたincludeは最後尾とみなさないようだ。

### 使いどころ

Productionとしての#includeと一時的な#includeを並べた時に、[ファイル]-[使用するユニット]ではProductionコード側にincludeするようにする、などに使えるかもしれない。

```Unit1.cpp
// Production code
#include "ScreenUtil.h"
#include "UdpUtil.h"
#include "Unit1.h"
//    <<--- ここに追加される

#define DEBUG_XXX
#ifdef DEBUG_XXX
#include "DebugScreen.h"
#include "DebugUdpComm.h"
#endif
```

開発を進める中で、デバッグ用includeが並んだ後にProduction用includeが間に並んでしまい、出荷前に整理する、というのを何回が実施してきた経緯がある。

`#ifdef`の記載の意図が分かりやすいかどうかの問題はある。


### 気づいた事項 (2016/12/04)

- 誤: `#ifdef`で囲った部分は無視される
- 正: `#ifdef`の行以降は無視される

何が違うかというと、後者の場合、`#ifdef ...#endif`の後にincludeしたものがあったとしても、「その下に追加されず、#ifdefの前に追加される」ことになる。