OmniAICreator/Qiita-1.07M huggingface dataset:
node.js + expressで簡単なwebサイト作ってみた時のまとめ

# 最初に
node.js+expressでを１ヶ月くらい触っていたので軽く基本をまとめました。
今回はejsとルーティングについて軽くまとめました。
環境構築は割愛！！
## プロジェクトの作成
最初にプロジェクトを作成します。

```
express プロジェクト名 -v ejs
```
今回はviewを書くときにejsを使うのでejsを指定しています。
ejsについては後ほど軽く説明します。

```
npm install 
```

```
npm start
```
これでlocalhostが立ち上がります。

## view
viewは先ほど指定したejsを使います。ejsはざっくり説明するとjsが埋め込めるHTMLみたいな感じです。
例としてindex.ejsに下のように追加すると

```index.ejs
<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <!-- 追加部分 -->
    <% let content = ["あ","い","う","え","お"]; %>
    <% for(let i in content) { %>
      <h2>
        <%= content[i] %>
      </h2>
    <% } %>
  </body>
</html>
```
**実際の画面**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/255216/8f955272-8c4d-91ae-ef59-8c639ab53693.png)
このようにjsで書かれたfor文がしっかり反映されています。
今回は説明のためにしょうがなくejs上で配列を宣言してますがおそらくこの使い方はよくないと思います。僕がwebサイト作ってた時はデータベースから持ってきたデータを埋め込んだりするときに使ってました。
個人的にはrubyを埋め込めるerbファイルのjs版的な認識です
## ルーティング
ルーティングはindex.jsなど、routerフォルダ内にあるjsファイルに書く。そのファイルをapp.jsで読み込むという形。

```index.js
/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});
```
このように書くことでgetリクエストを設定することができる。{}の中にリクエストされた時の処理を書く。今回はres.renderでindex.jsをレンダリングしている。また{title: 'Express'}の部分はviewに値を渡している。今回の場合view側で

```
<%= title %>
```
と書くことでExpressを表示することができる。
GETリクエスト以外にもPOSTリクエストなども似たような感じで送ることができる。今回は割愛。
次はapp.jsだ。

```
let express = require('モジュール名');
```
こんな感じでモジュールを読み込み可能。
デフォルトでは

```app.js
let indexRouter = require('./routes/index');
app.use('/', indexRouter);
```
こんな感じのものが書かれている。
1行目は単純に./routes/indexを読み込んでいる。
2行目はlocalhost3000/でindex.jsにリクエストが飛ぶように設定している。

それではこれらのことを踏まえて、helloページでも追加していく。
まずapp.jsに

```app.js
let helloRouter = require('./routes/hello');
app.use('/hello', helloRouter);
```
と記載する。
次にroutesフォルダーにhello.jsファイルを追加し

```hello.js
var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  res.render('hello', { content: 'Hello' });
});

module.exports = router;

```
こう書くことでgetリクエストでhello.ejsがレンダリングできるようになる。
あとはviewsファイルにhello.ejsを追加して完成。

```hello.ejs
<!DOCTYPE html>
<html>
  <head>
    <title><%= content %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>
        <%= content %>
    </h1>
  </body>
</html>
```
これで２ページ目の完成。
**実際の画面**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/255216/6e4f5158-9271-6e6f-7186-e98b6c7739f2.png)

## まとめ
今回は本当に基本的なことだけ触れました。データベースとのやりとりなどまだ触れていないことがたくさんありますが一旦ここで終わります。また今度sqlとか使ってデータベースとやりとりする部分とか書くかもしれないです。
SELinux Type Enforcement Lookupの紹介

# SELinux Type Enforcement Lookupの紹介

株式会社 日立製作所　能登上総

本日はSELinuxの調査を簡単にするツールをご紹介したいと思います。
ツールの名前はSELinux Type Enforcement Lookup。
[GitHub](https://github.com/Hitachi/selinux-te-lookup)上で公開されています。

# ツールの使いどころ

例えばhttpdプロセスが乗っ取られた場合などに備えて、
httpdプロセスがreadパーミッションを持つファイルを調査したいといったケースです。

手作業でやると大変です。
どう大変かは、ここでは説明を省きますので気になる人は[Think IT](https://thinkit.co.jp/article/13343)をチェックしてください。

# ツールを使ってみよう

では実際にhttpdプロセスがreadパーミッションを持つファイルを、
ツールを使って調査してみましょう。
今回は/etcディレクトリについて調査します。
実行するコマンドは以下です。（インストールなどは省きますのでGitHubのReadMEを見てください）

```
#python selinux-te-lookup.py httpd_t --root /etc --stdout --perm read --class file
```

では引数を見ていきましょう。

* httpd_t
  * 調査するプロセスのドメインです。今回はhttpdプロセスを調査するので、そのドメインhttpd_tを指定します。
* -root /etc
  * 調査するディレクトリを指定します。今回は/etcディレクトリを指定します。
* --stdout
  * 標準出力に結果を出力するオプションです。デフォルトではファイルに出力されます。
* --perm
  * 調査するパーミッションを指定します。今回はreadパーミッションを指定します。
* --class file
  * 調査対象のファイルの種類を指定します。今回は通常ファイルなのでfileを指定します。

これを実行するとCSV形式の出力が得られます。まずは1行目のヘッダーを見てみましょう。

```
File-Context-Pattern,File-Context-Target-Type,File-Context-Label,Matched-File-Path,File-Type,File-Label,SAME-SELinux-Type
```

それぞれのカラムは以下を示します。

* File-Context-Pattern
  * ファイルコンテキストのファイルパスに対するマッチングパターンです。
* File-Context-Target-Type
  * パターンがマッチするファイル種別（ファイル、ディレクトリなど）です。
* File-Context-Label
  * パターンがマッチした際に設定されるラベルです。
* Matched-File-Path
  * 実際にパターンにマッチしたファイルパスです。
* File-Type
  * マッチしたファイルのファイル種別です。
* File-Label
  * マッチしたファイルの実際のSELinuxラベルです。
* SAME-SELinux-Type
  * ファイルコンテキストと実際のSELinuxラベルが一致するか示します。
  * この情報はファイルコンテキストと実際の値に不整合がないかをチェックする際に用います。
  * この値がNGだとファイルコンテキストと異なるタイプが割り当てられているため、実際にはパーミッションがない状態になっています。

では2行目以降の出力結果を見ていきましょう。

```
/etc/.*,all files,system_u:object_r:etc_t:s0,/etc/fstab,f,system_u:object_r:etc_t:s0,OK
/etc/.*,all files,system_u:object_r:etc_t:s0,/etc/crypttab,f,system_u:object_r:etc_t:s0,OK
/etc/resolv\.conf.*,all files,system_u:object_r:net_conf_t:s0,/etc/resolv.conf,f,system_u:object_r:net_conf_t:s0,OK
（以下省略）
```

* /etc/.*
  * ファイルコンテキストのマッチングパターンが/etc以下の全ファイルであることを示します。
* all files
  * ファイル種別関係なく全てのファイルにマッチすることを示します。
* system_u:object_r:etc_t:s0
  * 設定されるSELinuxラベルです。
* /etc/fstab
  * 検出されたhttpdプロセスがreadパーミッションをもつファイルになります。
* f
  * 検出されたファイルのファイル種別がファイルであることを示します。
* system_u:object_r:etc_t:s0
  * 検出されたファイルに設定されているSELinuxラベルです。
* OK
  * ファイルコンテキストと実際のSELinuxラベルが一致したことを示します。

調査目的のhttpdプロセスがreadパーミッションを持つ/etc以下のファイルに戻ると、
/etc/fstab、/etc/crypttab、/etc/resolv.confなどに対して、httpdプロセスはreadパーミッションを
もつことがわかりました。
このように特定のプロセスが乗っ取られた場合の影響範囲を簡単に調査することができます。ぜひ使ってみてください。

以上でツールの紹介を終わりにします。
GoogleアカウントでSalesforceにログイン

# はじめに
SalesforceにGoogleアカウントを使ってログインする方法を設定してみました。
設定については、いくつか方法がありますが、今回、比較的簡単な手順で設定できる、Salesforce認証プロバイダを使用しました。

Salesforce認証プロバイダの設定を行うことで、Googleをはじめとする様々なアカウントでのシングルサインオン(SSO)が可能になります。

# 手順１：Google アプリケーションの設定
- まずは Google アプリケーションの設定を行います。 
    1. Googleアカウントにログイン
    2. Google Developer Consoleを開く
    3. Google Developer Console から新しいプロジェクトを作成
![WS000036.JPG](https://qiita-image-store.s3.amazonaws.com/0/311972/861f3bb0-01bc-9038-14fa-69e2c921e475.jpeg)
    4. プロジェクト作成後、認証情報から、新しいクライアントIDを作成
![WS000037.JPG](https://qiita-image-store.s3.amazonaws.com/0/311972/c84c6b27-bff6-15e1-c4df-acd38396d191.jpeg)

# 手順２：Salesforce 組織の認証プロバイダ設定
- 続いて、Salesforce側での設定です。
    1. Salesforce 組織の [設定] から、[セキュリティのコントロール] > [認証プロバイダ] を選択
    2. [新規] ボタンをクリックして認証プロバイダを作成
![WS000038.JPG](https://qiita-image-store.s3.amazonaws.com/0/311972/86cc26c6-9867-4ec1-ed8e-95cfa3959fa4.jpeg)
        - プロバイダタイプ：Google を選択
        - 名前：任意名を設定
        - URL 接尾辞：生成されるURL の末尾になる部分
        - コンシューマ鍵：Google で生成したクライアントID
        - コンシューマの秘密：Google で生成されたクライアントシークレット
        - 登録ハンドラ：[登録ハンドラテンプレートを自動生成]をクリック 
        - 他のアカウントで登録を実行：登録ハンドラの Apexクラスを実行するユーザを指定

# 手順３：Goole アプリケーションのリダイレクトURI設定
1. Salesforceで生成されたリダイレクトURIをGoogleのクライアントIDに設定

![WS000039.JPG](https://qiita-image-store.s3.amazonaws.com/0/311972/a2e4fe78-2728-f613-b950-4933be864201.jpeg)

# 手順４：既存ユーザのリンク
- 最後に、既存のSalesforce ユーザと Google アカウントの紐付けを行います
    1. リンクするユーザで Salesforce にログイン
    2. [既存ユーザをリンクする URL] をブラウザで開く
    3. アカウントのリンクを確認画面で、[許可] をクリック

# 最後に
- 簡単な設定でログインできたかと思います。システム間のログイン情報を統合することは、運用面でも有効ですので、是非活用できればと思います。
Progate「PHP.Ⅱ」の学習をまとめてみた

#はじめに
PHPの理解がほとんど進まず、先週の目標を達成できませんでした。
原因は二つ考えられます。
「情報源の検索に時間がかかりすぎている」
「アウトプット不足」
の二つです。
この記事では、PHP.Ⅱで学んだことのアウトプットをしていきます。

#今回学んだこと
-オブジェクト指向の概念
-オブジェクト指向の書き方

#オブジェクト指向の解釈
僕の解釈の視点から説明させていただきます。
オブジェクト指向とは、「現代の人が道具を使うことをプログラミングに落とし込んだもの」だと理解しました。
例えば、今使っているパソコンだってオブジェクトの一種です。
内部の構造や、どういう原理で動くかを知らなくても、どうやって「使う」かを理解するだけで、その「オブジェクト」は入力に対して期待通りの出力を行います。

#PHPでオブジェクト指向を導入するには？
まずは「クラス」を作り、「インスタンス（実体）」を生成する作業を行います。
次に、インスタンスの説明である「プロパティ」を書きます。
最後に、オブジェクトのふるまいを決める「メソッド」を書けば導入完了です。
具体的には下のようなコードになります。


```
<?php
//インスタンスを生成する

$変数名 = new クラス名();



class クラス名
{
　　//　プロパティを定義する
    public $インスタンス名;    
    
    //メソッドを定義する
    public function getName()
    {
        return $インスタンス名->プロパティ名;
    }    
}
?>

```

#まとめ
オブジェクト指向については、まだ理解が及んでいない領域があるので、引き続き学習を進めます。
社内でキーボードつくる会を企画した話

この記事はオイシックス・ラ・大地株式会社（以下オイラ大地） [アドベントカレンダー](https://adventar.org/calendars/3112)の16日目の記事です。
15日目は川上さんの[Spring BootによるマイクロサービスのJUnitテスト手法を考える](https://adventar.org/calendars/3112#list-2018-12-15)でした。

#自己紹介

はじめましてyo.heyといいます。
2018年10月にオイラ大地に入社し、2か月半が過ぎました。
世に言う一人情シスからフルスタックECマネージャを経て、現在はPMをやっています。
これまではエンジニアが少ない会社に長くいたので、高い技術を持ったエンジニア達が周りにたくさんいるだけで、毎日楽しいです。


#「キーボードつくる会」を企画した経緯
オイラ大地では、入社すると全社共有ドキュメントに自己紹介を書くのですが、
多くのエンジニアがいるここでならいけると思い、書いたのがこの一行。

「最近はキーボードを作っています。」

とりあえず書いてみるもんですね。
飲みの席で「僕、mint60買おうと思ってるんですよ」、さらにもう一人「買ったけど作ってないのがあって」と声をかけてもらえました。これはもう、やるしかない。

ひとまずスケジュールに入れて、おそるおそるSlackへ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/288550/22732e81-c99e-eda7-86ab-dc26d984472b.png)

すると、参加者が6人に!
それぞれ、以下のキーボードを作ることになりました。
- mint60
- Helix(ただし片方)
- fortitude60
- 未定（これから買う）
- FK138579（わたしはコレ）


##「キーボードをつくる会」が出来なかった
さてここからはその模様を、と思っていましたが、師走は忙しいですね。
みなさまにおせちをお届けするほうが大切なので、ひとまず延期に。
年始にリスケになった「キーボードをつくる会をやりましたの話」は、改めて会社のブログにまとめたいと思います。


#FK138579
書くことがなくなってしまったので、ここからは、そのわたしが作ろうと思っていたキーボードの話を。
FK138579はFKB8579-USB[*1]の代わりを探しているうちに、作ればいいじゃないかと思い作ったクローンです。

##FKB8579-USB の話
FKB8579-USBは、まだ秋葉原の店舗があったころの「ぷらっとホーム[*2]」で販売されていました。
発売当時はHHKBキラーと呼ばれていましたが[*3]、HHKBとキータッチは全然異なり、またカーソルキーがあるのが特徴です。
[*1]:https://online.plathome.co.jp/item/detail/11650157/PLAT'HOME/FKB8579-USB/N860-8579-T501-S1
[*2]:https://akiba-pc.watch.impress.co.jp/hotline/20051112/etc_plathome.html
[*3]:https://akiba-pc.watch.impress.co.jp/hotline/991225/etc_fkb8579.html


このカーソルキーの有無が個人的にはポイントで、「小指の付け根で→キーを押す」、「Fnキーも同時に押してEnd」、「さらにCtrlキーも同時に押してCtrl+End」という動きに慣れきってしまいました。
この動きができるキーボードになかなか出会えず、キーキャップが外れたりするようになっても、別のキーボードもなかなか見つけられず。
だましだまし使い続けていたところ、どうもがんばれば作れそうな（時代になった）ことに気づきました。


## 試作機を作った
ひとまずProMicroと空中配線で試作機を作り、仕事に使おうにもケース作るのが面倒で家に眠ってたのですが、この職場なら許されると思い、先日から業務で使うことにしました。


これがFKB8579で
![image.png](https://qiita-image-store.s3.amazonaws.com/0/288550/b702a257-f3b7-da65-ba11-2270acc8adcb.png)



これが持ってきた試作機
![image.png](https://qiita-image-store.s3.amazonaws.com/0/288550/404e4769-76d3-ded8-4bbb-d5893dfc6737.png)



使う前からわかってましたが、さすがに耐久性に欠けるので、年明けのキーボードを作る会を目指して、PCBとケースを作成中です。その辺の話は、また別の機会に。

まじめな技術的な話はもちろん、エンジニア以外のメンバーも参加しているのが弊社のいいところだと思いますので、[Oisix ra daichi Inc. Advent Calendar 2018](https://adventar.org/calendars/3112)もぜひご覧ください。
Cognos Analytics 11.1 レポートでのスタイルの再利用機能

#Cognos Analytics 11.1 レポートでのスタイルの再利用機能
Cognos Analytics 11.1からの、レポートの機能でのスタイルの再利用機能をご紹介します。

平たく言うと、レポート内のオブジェクトに指定したフォントや色とかサイズなどのスタイルを保存しておいて、別のレポートで別のオブジェクトに対して再利用適用できる、というものです。

#手順
とりあえずリストで試してみます。
Report01を作成し、適当なアイテムを置いて、リストを作成します。
![001.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/fda422f5-ff02-ec5a-f47e-063957976898.jpeg)

実行するとこんな表示です。
![002.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/a94ce7d7-405b-2a1c-780b-b4019fec8d2e.jpeg)

レポートに戻り、リストを選択すると上部に表示されるツールバーの中から、赤枠の「現在のスタイルの選択」アイコンを選択します。
![003.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/454fd359-4ee5-2bab-27fe-dd9c8b48ef77.jpeg)

「テキスト」タブで、フォントや色、横配置を変更してみました。
![004.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/21781c79-004c-2b32-1a7b-4aa6e0df98dd.jpeg)

「サイズと位置」タブで、要素として「リスト」全体を選択し、幅を指定してみました。
ここで、列のタイトルとか本文とか、個別の要素も指定可能です。
![005.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/b14daccb-4c62-f63a-bdf0-f182c0643a9d.jpeg)

「背景」タブで、「列タイトル」に対して「背景色」を変更してみました。
![006.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/d18d3b6e-9ff5-fafd-c0c3-8d784ca563c4.jpeg)

「ボックス」タブで、「列の本文」に対して、境界線の「色」を変更してみました。
ここで「スタイル名」に名前を「Style01」と入れ、「適用」と「スタイルの保存」を選択しました。
![008.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/edcb5d9d-d89c-ac2b-85ca-d512d2e08640.jpeg)

レポートを実行してみると、こんなイメージです。色々指定したスタイルが反映されていますね。
![009.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/ea02d727-3f92-4e4b-6b2e-c6b15555cc2c.jpeg)

スタイルの再利用という事で、別のレポートの別のリストでも、このスタイルが再利用できるのを試してみます。
Report02を作成し、適当にリストを作成します。
![010.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/8ad75436-85c4-8b98-0ebf-b125203bea64.jpeg)

そのまま実行すると、デフォルトのスタイルでの表示です。
![011.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/a0684d3f-989d-958e-76dc-63ad7476bae0.jpeg)

リストを選択し、「現在のスタイルの選択」アイコンから「Style01」を選択し「適用」。
![012.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/42f53903-a0d1-1820-afdd-7dcff92beaef.jpeg)

もうそれっぽくなりましたね。
![013.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/a1b16b93-37b0-0b9f-42a7-8d85b65cb404.jpeg)

レポートを実行すると、しっかりとスタイルが再利用されているのが確認できます。
![014.JPG](https://qiita-image-store.s3.amazonaws.com/0/147246/8fe25a05-e995-f7ca-4927-a2b146769fb8.jpeg)

このスタイルの再利用は、基本的に同一のユーザーでのみ可能で、スタイルを保存するとユーザープロファイルの中に情報が保存されるようです。

Cognosのレポート機能のリッチな機能は保持しつつ、より使い易さにこだわった、というのが11.1でのレポートの機能の改善と言えそうですね。
SF 設定

#### CreatedDateなどのシステム管理項目をAPI経由で設定できるようにする

[設定]-[ユーザインターフェース] で権限を設定する。

"レコードの作成時に監査項目を設定」および「無効な所有者のレコードを更新」ユーザ権限を有効化 "をONにする。

<img width="616" alt="Screen Shot 2018-12-17 at 11.04.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/161463/59bfa7dd-125f-4181-29ad-37a3fe243523.png">

プロファイルのシステム管理者権限で「レコード作成時に監査項目を設定」をONにする。システム管理者プロファイル自体ではこの項目は編集できないため、権限セットを準備するのがお勧め。
<img width="948" alt="Screen Shot 2018-12-17 at 11.01.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/161463/7d440479-fb95-9e3a-1700-dee548c58118.png">

####無効化されたユーザーを所有者に設定

プロファイルのシステム権限 "無効な所有者のレコードを更新"を与えることで、無効化されているユーザーを所有者として設定することができます。事前に[設定]-[ユーザーインターフェース]の設定が必要↑です。

<img width="837" alt="Screen Shot 2019-05-27 at 14.58.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161463/b06180bc-1d6b-fd16-be20-c04c66a5b9c4.png">

#### Apex でのレコードのロックおよびロック解除を有効化

Apexからレコードのロック（承認プロセスによるロック）を行いたい場合は、[設定]-[プロセスの自動化]-[プロセスの自動化設定] で"Apex でのレコードのロックおよびロック解除を有効化"をONにする。

<img width="623" alt="Screen Shot 2019-02-19 at 21.32.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/161463/f1e10e55-3c26-6340-27ce-20f580f00b14.png">


#### 行動オブジェクトの"被招集者"をユーザーのみに絞る

デフォルトではユーザーに加えてクライアントとリードも追加可能。
SFにケースを上げて対応する。

https://help.salesforce.com/articleView?id=000003283&language=ja&type=1

<img width="610" alt="Screen Shot 2019-03-28 at 12.49.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/161463/92a98404-c3be-f971-fe88-7b1f550486a2.png">

#### 行動の関連先ユーザー（名前）に複数の取引先責任者を追加できるようにする

<img width="606" alt="Screen Shot 2019-03-28 at 12.50.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/161463/bf528247-bb3f-20b5-dfb6-aacec7a57e87.png">
[活動設定]の”ユーザーが複数取引先責任者をToDoと行動に関連付けられるようにする"をチェックする
<img width="556" alt="Screen Shot 2019-03-28 at 12.52.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/161463/0be7dc84-935a-48fc-fccb-b320b8fe7aa9.png">

#### すべてのファイル（ContentDocument）を参照する
デフォルトでは、システム管理者であってもSOQL経由ではすべてのファイル（ContentDocument）を参照することはできない（明示的にアクセス権を持っているファイルのみが結果に含まれる。ただし画面から表示したり、WHERE句でIDを直接指定した場合はアクセス可能）。

プロファイルのアプリケーション権限 "すべてのファイルをクエリ"を与えることで、すべてのファイル（ContentDocument、ContentVersion等）をクエリできるようになる。

<img width="406" alt="Screen Shot 2019-05-27 at 14.55.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161463/39a658b6-3cbd-3652-2280-2880821576b7.png">

#### メール承認の有効化

メールを使って承認プロセスの承認/却下が行えるようにする設定。
<プロセスの自動化設定>の"メール承認の有効化"をONにする。

<img width="1004" alt="Screen Shot 2019-05-31 at 17.12.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161463/39963283-89ea-0e04-0723-0451e5b0cf11.png">
PythonのMatplotlib のpyplot.scatterを使って散布図を書いてみた

散布図を書いてみたので、超基本的なところのまとめ

#環境
- Windows10
- Anaconda3-5.2.0
- Python 3.6.5
- JupyterNotebook

#データセット（2018.csv）の一部

|順位|チーム|試合|打率|打点|平均|安打|
|:-----------|:------------|:------------|:------------|:------------|:------------|:------------|
|1|レッドソックス|162|0.268|876|5.41|1509|
|2|カブス|162|0.259|760|4.69|1450|
|3|インディアンズ|162|0.259|818|5.05|1448|

用いたデータセットは2018年のMLBのチーム打撃成績です。実際は30チーム分のデータセットがあります。

#必要なライブラリのインポート

```python

import pandas as pd #pandasのimport
import matplotlib.pyplot as plt #matplotlibのimport
```

#散布図を書いてみる

「順位」と「安打」のカラムを用いて散布図を書いてみます。

```python

m18 = pd.read_csv("2018.csv") #pandasを使ってcsvを取り込む（上記のデータセット）
plt.scatter(m18["順位"],m18["安打"]) #plt.scatter(m_18["x座標のカラム"],m_18["y座標のカラム"]) 
```

散布図は `matplotlib` の `pyplot.scatter` メソッドを利用して描く。基本的に、x 座標と y 座標を代入するだけ作成できる。

###実行結果
![1.png](https://qiita-image-store.s3.amazonaws.com/0/326771/f8b8db65-2ffd-a0b5-fcfd-8389781f82ee.png)


#x軸とy軸のラベルを付ける
```python
plt.scatter(m18["順位"],m18["安打"])
plt.ylabel("hit") #y軸のラベルを付ける
plt.xlabel("rank") #x軸のラベルを付ける
```
###実行結果
![2.png](https://qiita-image-store.s3.amazonaws.com/0/326771/34f32d72-127e-56c5-f8e0-31502280b2b4.png)
MACで、SVNコマンドでcheckoutできないとき

MACで、subversion上のファイルをCheckOutしようとすると失敗

```
$svn co svn+ssh://svn.xxx.com/var/svn/productA/branches/asp
svn: E000009: Can't write to stream: Bad file descriptor
```
subversionのversionが新しいと失敗する場合があり（文字コードの問題？）。
以下でsubversionをダウングレード（1.10.0→1.8.19）

```
$svn --version
svn, version 1.10.0 (r1827917)
$brew install subversion18
$echo 'export PATH="/usr/local/opt/subversion@1.8/bin:$PATH"' >>
$. ~/.bash_profile
$svn --version
svn, version 1.8.19 (r1800620)
```

正常にCheckOutできるようになる
PHPカンファレンス2018に行ってきました

## はじめに

この記事は[PHP Advent Calendar 2018](https://qiita.com/advent-calendar/2018/php)の14日目の記事です。
空いてたので埋めます。
[PHPカンファレンス2018](http://phpcon.php.gr.jp/2018/)に行ってきたので感想などを書こうかなと思います（開催が12/15なのに12/14のアドカレに感想が載る不思議）
あくまで自分が見た講演だけの話です。

## PHPカンファレンスとは

> すべてのPHPerの学びの場として 
> すべてのPHPerの表現の場として 
> すべてのPHPerの出会いの場として 

ざっくりいうとPHPer向けのお祭りです。
日々PHPと向き合っている技術者向けの交流会のようなものです。
存在は知っていましたが僕は今回初めて参加しました。

## 当日の流れ

Openingトラックが10時だったのでそれに間に合うように起きるところが1番の難関です。
皆さん頑張って起きましょう。
知人と駅で合流し会場入り。
Openingセッションは全員で聞いてました。

### PHPのいまとこれから(10:10~10:50)

資料はこちら
https://www.slideshare.net/hirokawa/php-now-and-then-2018-wordpress-special-edition-114725181

* PHP5系のサポートが今年で切れる
* シェア的に8割以上の人がサポート対象外に取り残されてしまう
* 会場でのアンケートでは7系を使ってる人が6~7割ほどだった（結構意外だった）
* PHP7.3の紹介、事前に情報を追っていたがやはり良さそうな感じだった

### マイグレーションアンチパターン(11:00~12:00)

ここから各講演が始まったので一緒に行った知人とバラけて各自で見たいものを見るスタイルになりました。
このセッションは配信もアーカイブもありませんでした。

* ジョインして3ヶ月のプロダクトのマイグレーションを行うことになった時の話
* 工数無視で納期だけ決まっているプロジェクトは基本的に危険（これはマジ）
* 「検証」って難しいよね、何をもって「正しい」とするか
* マイグレーションする範囲がでかい時ほど「ついでのリファクタリング」などを行わない方が良い
    * これに関しては異論あり。ボーイスカウト精神で直せる部分は直したい…
* 関係各所とコミュニケーションをしっかりとって1つ1つ確認しながらこなしていくと齟齬が少なく炎上しにくいよねっていう結論

### お昼

僕はランチセッションは参加せず外でお昼をとりました。
ランチセッションに行けば先着でお弁当がもらえた？みたいです。

### VOYAGEのエンジニア評価制度ってどんな感じなのか25分で再演(13:00~13:25)

資料はこちら
https://speakerdeck.com/yukimine/show-voyage-group-tech-assessment

* VOYAGEがどんな評価制度で評価しているのか、評価資料とそれのアピール・評価者とのやりとりを実際に再演し解説するスタイルでした
* 「ここで解説です」っていうのが合間に入って笑いが起きてました
* 成果物だけでは見えにくい部分もアピールすることで評価してもらえるような制度でした
* 「やらない」と判断したことも評価になる、というのがとても良いなと思いました
* 「地味な仕事でも技術力は評価される！」とても良い言葉だしそうあるべきだと感じました

### PHPは本当に遅いのか(13:35~14:00)

資料はこちら
https://slide.seike460.com/slides/phpcon2018#/

* 僕もPHPは遅いと聞いていたので実際どうなのか気になって見に行った講演
* 結論だけ見るとGoの方が速くて草
* ただPHPも昔ほど遅くなく、ほぼ遜色なく使えるレベルであることは間違いない
* みんなPHP使おうぜ

### 安全なwebアプリケーションの作り方2018(14:10~14:40)

資料はこちら
https://www.slideshare.net/ockeghem/wasbook2018

* かの有名な徳丸先生の講演
* 次の講演の都合上前半30分しか見ることができなかった…アーカイブで補完
* `XXE`という脆弱性を突いた攻撃をその場で実演
* `xml`で変数展開するような構文があり、そこにスクリプトなどを仕込むことで攻撃できる模様（知らなかった…）
* 何百人の前でさらっと実演する手際などみて、さすがの徳丸先生という感じでした

### レビューで初心者インターンを一人前に育てた話(14:45~15:10)

資料はこちら
https://speakerdeck.com/nagaakihoshi/rebiyude-chu-xin-zhe-intanwo-ren-qian-niyu-tetahua

* レビューの心得「良薬は口に苦し」
* 日報や1on1を行っている模様（これに関してはうちもやっているので方向性は合ってるなという再確認になった）
* slackにググったキーワードをそのまま貼るという文化があるらしい（何で困っているか大体分かるから結構有用らしい）
* とにかくコミュニケーション大事、心理的安全性を担保した関係ならばネガティブなフィードバックもポジティブなサイクルに持っていける
* 個人的に普段意識してやっていることも多く、自分の方針も間違ってないなと再確認
* ちなみにPHPカンファレンスだけどPHPの話は一切なかった

### Webサービスを育てるための組織作りと文化作り(15:20~15:55)

資料はこちら
https://speakerdeck.com/soudai/proper-problem

* こちらもPHPカンファレンスだけどPHPの話は一切なし
* ただ今回の中で1番面白かったかもしれない
* スピーカーの方のスピーチと質問に対する受け答えが的確すぎて聞いてて気持ちよかった
* 「プレイヤーの本質は問題解決」「マネージャーの本質は問題提供」→これがめちゃくちゃしっくりきた
* 適切な問題が提供されると自然をそれを解決する人が出てくる→確かになーと過去を思い返してました
* 自分は今プレイヤーなのでまずは自分に適切な問題を解決して成長していこう
* そして適切な問題に分割して提供できるような存在になろう、と感じました

### LT大会、懇親会

このあとはLT大会と懇親会でしたが僕はここで離脱しました。

##　まとめ

新しい発見ははっきり言うと少なかったです。
ですが今自分が取り組んでいること、意識していることが間違っていないんだと再認識・再確認できるとても良い場でした。
意識が高まり身が引き締まりました。
やはりエンジニアは定期的に外に出ないとダメですね。
皆さんもカンファレンスや勉強会、定期的に外に出ましょう:smile:
julia 事始め

# 経緯
飽きたので、何か新しいものをと。
今までやってみたことをJuliaに置き換えられたりしないかを試行錯誤しよう。

# 準備
## ドキュメント
### 英語
https://docs.julialang.org/en/v1/manual/variables/
### 日本語
https://hshindo.github.io/julia-doc-ja-v0.6/manual/variables.html

## 実行ファイル
以下でインストール　
  
```  
choco install julia -y  
```  
現在、1.0.2がインストールされる。

## IDE設定
vscodeが好きなので、以下をインストール。

https://marketplace.visualstudio.com/items?itemName=julialang.language-julia

実行ファイルをインストールしたときのパスを`julia.executablePath`に指定。

# Hello world

```hello.jl
println("Hello World")
```

ターミナルで

```
julia hello.jl
Hello World
```
PowerShellからSQLPLUSに引数を渡してCSVを出力する

タイトル通りの備忘録

例）oracleに格納されている、ある月の売上を職員の人数分CSVファイルで出力したい。

```powershell
#集計対象年月をキーボード入力させる
$Input = Read-Host "集計年月を入力："
$Output = $Input
$array = @("職員1","職員2","職員3","職員4")

#職員の人数分ループさせる
$array | ForEach-Object -Process 
{
#SQLファイルを読み込む場合は「`」が必要
#arrayから引数を渡す場合は「$_」
SQLPLUS hoge/hoge@hoge `@集計.sql $Output,$_
}

#sqlファイル内で拡張子をcsvとしたが、lstファイルが出力されるため、csvに変換
Get-ChildItem -Name | Rename-Item -NewName { $_ -replace "\.lst$", ".csv" }
```
Node-REDを使ってみよう！～プログラミング授業からIoTシステム開発まで～


株式会社 日立製作所　泉 勝

# はじめに
IDCなどのメディアや経済産業省の発表では、将来的なIT人材の不足が予想されており、誰もが開発者となれるようなローコード／ノーコードツールに注目が集まっています。
本稿では、ブラウザ上で図形を操作してプログラムを作成する[Node-RED](https://nodered.org/)を紹介します。Node-REDはコーディングしなくてもプログラムを作成できるため、高校生を対象とした[「プログラミング授業」](https://www.hitachi-ia.co.jp/company/profil/csr/cs_prog1804.html)などでも活用されています。

# コーディングしなくてもプログラムが作れる
次がNode-REDのエディタの実際の画面です。目的に合わせてノードを組み合わせることでコーディングなしに高機能なプログラムを作ることができます。

![図1.png](https://qiita-image-store.s3.amazonaws.com/0/322195/45f76a78-27fb-ec2c-54c8-9709e172fcc1.png)

1. 画面左の「**パレット**」に、利用できる「**ノード**」が格納されています。ノードは、「Webサイトから情報を取ってくる」「メールを送信する」といった**”特定の機能”**を備えます。

1. 選択したノードを画面中央の「**ワークスペース**」にドラッグ＆ドロップで配置します。

1. 連携させたい機能のノードと「**ワイヤー**」で繋げます。このノードを線で繋げた処理の流れを「**フロー**」と呼び、フローを作成するだけでプログラムが作成できます。

1. **デプロイボタン**をクリックすると、すぐにフローのプログラムを実行します。

# Node-REDの特徴 －「迅速」「標準」「オープン」
Node-REDの特徴は、迅速、標準、オープンの3つのキーワードで表すことができます。

### 迅速な開発を実現するフローベースのプログラミング
ノードをワイヤーで結ぶプログラム表現は直感的であり、現場の技術者やスタッフなどプログラミングに精通していないユーザーでもIoTアプリケーションの作成や改変を迅速に行うことができます。フローベースプログラミングには、Node-REDの他にも[Apache NiFi](https://nifi.apache.org/)や[NoFlo](https://noflojs.org/)などがあります。

### IoT向けの標準技術を提供
Node-REDは、REST APIやMQTTプロトコル、WebSocketプロトコルなど、IoTに必要とされる標準的な技術をサポートしています。
Node.jsが動く環境であれば利用できるため、Raspberry PiなどのエッジデバイスにNode-REDを搭載することができます。またクラウド環境では、[IBM Cloud](https://www.ibm.com/cloud/)や筆者が関わる[Lumada](http://www.hitachi.co.jp/products/it/lumada/)でNode-REDをサポートしています。これらエッジデバイスとクラウド環境で同じ手法でアプリケーションを開発することができます。

### オープンソースコミュニティ
Node-REDは、[Linux Foundation](https://www.linuxfoundation.org/) ([JS Foundation](https://js.foundation/))に属するOSSです。Node-REDコミュニティでは2018年12月10日時点で[1774個のノード](https://flows.nodered.org/?type=node&num_pages=1)が公開されています。センサー入力、通信、画像解析、SNS連携、データ分析、可視化など多種多様なノードを自由に活用できます。

# Node-REDによるIoTシステムの実現
IoTシステムでは一般に、1) データ取得と一時加工、2) データ集約、3) フィードバック、4) 可視化、5) データ蓄積、6) システム間連携、7) サービス連携の7つの機能が必要とされます。Node-REDはこれらをサポートする機能を備えており、IoTシステムの開発を容易に進めることができます。

![図2.png](https://qiita-image-store.s3.amazonaws.com/0/322195/8ab09b49-293b-93ad-82be-05badb61b73d.png)

###### (1) センサーデータ取得と一次加工処理
<dd>Raspberry PiなどのエッジデバイスにGPIO(General-Purpose Input/Output)やシリアルポートを介して接続された様々なセンサーから、データを取得するノードやデータを加工するノードがNode-REDには標準で用意されており、簡単にデータを取得できます。</dd>

###### (2) エッジからクラウドへのデータ集約
<dd>Node-REDには「MQTT」や「WebSocket」といった標準的な通信プロトコルに対応したノードが用意されており、エッジデバイスで収集したデータを転送できます。</dd>

###### (3) エッジデバイスへのフィードバック
<dd>MQTTやWebSocketを用いて、エッジデバイスを制御することもできます。</dd>

###### (4) ダッシュボードによるデータの可視化
<dd>チャート、ボタンなど標準的な部品を備えたダッシュボード機能を用いることで、データレイクに蓄積したデータを容易に可視化できます。</dd>

###### (5) データレイクへのデータ蓄積
<dd>主要なデータベースやオブジェクトストレージなどとの連携ノードが提供されており、エッジから転送されたデータを簡単に蓄積／参照できます。</dd>

###### (6) 既存システムとの連携
<dd>RESTでアクセスするためのノードが提供されており、REST APIを用いて企業内の既存システムとの連携を実現することができます。</dd>

###### (7) 外部サービス連携
<dd>外部のサービスと連携するためのノードも提供されています。例えばRSSノードを用いてニュースデータの更新を契機に処理を開始したり、e-mailノードを用いてセンサデータの異常をメール通知することができます。</dd>

#おわりに
本稿ではNode-REDが備える機能やその活用方法について紹介しました。着実に進化を続けるNode-REDを是非お試しください。
⚠ 伊藤 淳一さんに学ぶRuby on Rails 「Arel.sqlを付けるだけじゃダメ、警告対策」ハイライト抜粋学習

[Arel.sqlを付けるだけじゃダメ!? Railsで"Dangerous query method …”の警告が出たときの対応方法 - Qiita](https://qiita.com/jnchito/items/5f2f00c93c0ba68e4d31)

# Ralsユーザーへの警告

>「そうか、警告が出たらArel.sqlで囲めばいいんだな」と考えて機械的に適用していくのは とても危険 です。

伊藤さんのありがたきWARNING!

# 危険度チェックリスト

>- SQLインジェクションが何かを理解しているか？
>- 警告メッセージの内容をちゃんと理解しているか？
>- Rails 5.2から上記の警告が入るようになった背景や目的を理解しているか？
>- 上記の警告が出た場合、1つずつ警告が出たコードを確認しながら修正しているか？（機械的、盲目的に修正していないか？）

どれかひとつはNOに引っかかるでしょう！90%以上の人は。多分。

# 衝撃の事実

`Dangerous query method` は「自分で付ける安全マーク」だった！ 

>そもそも、"Dangerous query method ..."の警告は「その呼び出し方は古いから新しい書き方に直せ」と言っているのではありません。
>
>そうではなく、「その値が安全かどうかを確認した上で、安全なら（＝つまり、既知の安全な値なら）、Arel.sqlで囲め」と言っているのです。








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
任意のイベントデータを含んだメッセージを作る方法とBrowser.Domについて

こんにちは、うじまるです。

Elmアドベントカレンダー２ 18日目の記事です

この記事はElm歴1年ちょいの人が書いたものです。

## MouseEventの情報がほしい！！
SVGエディタやCanvasを使ったDrawアプリを作ってるとマウスの座標情報が欲しくなるときがあります。
しかし、ElmのMouseEventの`onClick`や`onMouseMove`などは`onClick : msg -> Attribute msg`なので座標情報が入っていません。
そんなときは、`on : String -> Decoder msg -> Attribute msg`を使いましょう。

これを使うとこんな感じのものが作れます。
[DEMO](https://ellie-app.com/4c2t4bbDhqGa1)

## マウスがクリックされた位置を取ってくる
さっそくクリックされた座標を取得できる`onClickWithPoint : (Int -> Int -> msg) -> Attribute msg`を作ってみましょう。

まずは、デコーダーを作ります。
`Json.Decoder`を作るには`elm/json`が必要なのでインストールしましょう。
`on`関数に必要なデコーダーの型としては、`Decoder (Int -> Int -> msg)`なのですが汎用的に使えるように`mousePointDecoder : (Int -> Int -> msg) -> Decoder msg`という関数にします。
実際に書くとこんな感じ

```elm
import Json.Decode as JD

mousePointDecoder : (Int -> Int -> msg) -> Decoder msg
mousePointDecoder msg = 
    JD.map2 msg
        (JD.field "clientX" JD.int)
        (JD.field "clientY" JD.int)
```

察しが良い人は気づきますが（良くなくても気づくか）、`on`関数のDecoderでDecodeされるJSONはMouseEventの引数に渡ってくるオブジェクトです。
なので、`altKey`や`shiftKey`などのキーが押されながらクリックされたかなども取得できます。

さて、Decoderが完成したので次は`onClickWithPoint`関数本体を作りましょう。

```elm
onClickWithPoint : (Int -> Int -> msg) -> Attribute msg
onClickWithPoint msg =
    on "click" <|
        mousePointDecoder msg
```

はい、これだけです。簡単ですね。
あとは普通のMouseEventのように使えます。

## Browser.Dom.getViewportOf
これで座標も取ってこれたし、SVGエディタでもDrawアプリでもなんでも作れるぜ！！って思うかもしれません

が、なぜかこれだとグローバルな座標になってしまう（何故か分かる人、対処法が分かる人、コメントください🙏）のでDOM自身の座標が必要になります。

そこで使うのが0.19から追加された、`Browser.Dom.getViewportOf : String -> Task Error Element`です。
この関数は、指定したIDのDOMを取得し座標や幅、高さを取得できるものです。
この関数を使って手に入れた座標をマウスイベントで取得した座標から引けば描画したい位置に描画できそうです。

実際に使うには、`Task.attempt`を使って`Cmd`にして使いましょう。

```elm
import Task
import Browser.Dom as Dom

type Msg
    = GetCanvasSize (Result Error Element)

update msg model =
  case msg of
    Hoge ->
      (model
      , Dom.getViewportOf "canvas"
          |> Task.attempt GetCanvasSize
      )
```

みたいな感じです。

## まとめ
- 任意のイベントデータを取得するには`on`関数を使いましょう
- DOMの座標等を取って来るには`Browser.Dom.getViewportOf`を使いましょう
- `Browser.Dom.getViewportOf`は存在しないIDを指定すると`Err Error`になってしまうので気をつけてください

## さいごに
1年半やってるとElmがめちゃくちゃ使いやすくて最高になってるのですが、インターンの面接で「Elmやってます！」って言うと「ふーん」って感じなので「Vue.jsとか使ってみるかー」って思っても、「Elmでいいやんけ・・・」ってなるのでElmみんなで使いましょう！！最高なので！！

以上がポエムでした。
【10分でできる】Digdagのチュートリアルまとめ

digdagのチュートリアルをまとめてみました。
誤りがあればコメントくださいm(_ _)m

```bash
# 1. Install Digdag on your Mac
# cf. https://docs.digdag.io/getting_started.html#downloading-the-latest-version
$ curl -o ~/bin/digdag --create-dirs -L "https://dl.digdag.io/digdag-latest"
$ chmod +x ~/bin/digdag
$ echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc

# 2. 初期化
$ digdag init <project name>

# 3.ワークフローを実行してみる
$ cd <project name>
$ digdag run <procject name>.dig

# 4. digdag server起動
$ digdag server --memory

# 5.1. digdag serverに、projectをpush 
$ digdag push <project name>

# 5.2. セッションを開始
$ digdag start <project name> --session now

# 5.3. 2018年01月01日から10日分のセッションを開始
$ digdag backfill <project name> <workflow name> --from '2018-01-01' --count 10

# FYI <project name>および<workflow name>の確認コマンド
# * digdag push後に実行すること
$ digdag workflow
project name
  workflow name 1
  workflow name 2
  ...
```
AWS ML University の Deep Learning についてのコンテンツを訳してみた

# はじめに
この記事は株式会社ナレッジコミュニケーションが運営する [Amazon AI by ナレコム Advent Calendar 2018](https://qiita.com/advent-calendar/2018/knowcom-amazonai) の17日目の記事になります。

Amazon.comのエンジニアが人工知能に関する技術を学ぶ際に利用している映像コンテンツが「 AWS ML University 」として無料で公開されています。この記事ではその中の DeepLearning についての記事をざっくりと訳してご紹介していこうと思います。

コンテンツへのアクセス方法は[こちら](https://qiita.com/Yoshiyuki03/items/bfbf416ab47ef5121927)に記載しています。

# 「 What is Deep Learning 」

## In This Video
今回紹介する動画の主な内容は、以下の構成となります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321349/d6582581-4f5a-72e7-3872-e4119a7a5a71.png)

- Deep Learning とは？
- Deep Learning の概念
- AWSで提供される Deep Learning
- 事例

## Deep Learning とは？

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321349/48af9edf-1efe-c578-92b9-b886e426c5f9.png)

Deep Learning は Machine Learning 技術の一部かつ、人工知能（AI）技術の一部に属します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321349/a6224c2f-0be6-f491-6e58-8269e79f5fab.png)

Deep Learning の構造は人間の脳のようにニューラルネットワークが多数折り重なったものになっています。ニューラルネットワークの各層は非線形構造によって成り立っており、与えられたデータの解析を異なる方法で実行します。

## Deep Learning の概念

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321349/e2756c21-6576-e9b3-24d7-ee33e2b28c41.png)

ニューラルネットワークとは複雑な構造を正確に学習するためにトレーニングされた数学的構造の塊です。学習に利用するデータが多いほど、より正確な結果を出すことが可能となります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321349/502327b6-b5db-5f58-2525-510867b0f03e.png)

ニューラルネットワークは主に3つの層に分かれています。インプット層・隠れ層・アウトプット層の3層です。そして、それぞれの層はニューロン（=ノード）というものが複数集まって形成されています。この左側のノードの集まりであるインプット層に情報がインプットされていき、隠れ層を通しアウトプット層から結果を出力するといった流れです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321349/8a5524ba-c7a7-bf21-7316-8ce77e056415.png)

ニューロンは、ノードとも呼ばれます。ノードはインプットされた情報を統合したあとの傾向を元に情報に修正します。これら全ての段階を踏んだ後にノードはアウトプットを行います。これらがノードのライフサイクルとなります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321349/6cccfda1-1afb-3203-f610-543f1f279d87.png)

ディープ・ラーニングには様々な場面で利用をされていますが、テキスト・データやログ・音声・画像などの大量にデータがある領域での解析や分析で活躍します。

## AWSサービスで使用できるDL

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321349/c2986ebd-569a-8270-1e4b-fe4ce5e52d47.png)

AWSでは3つのマネージドサービスで Deep Learning を提供しています。

- Amazon Lex
    - 対話型インターフェイス(チャットボット)を作成できるサービスです
- Amazon Polly
    - 入力したテキストを人が話したかのような音声に変換します。Text to Speech
- Amazon Rekognition
    - 画像ファイルに対しメタ情報の取得を行うサービスです、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321349/2b24dfdd-9a86-147f-e5ba-19c06e44d87b.png)

AWSではAMIにて Deep Lerning のパッケージを提供しております。これらを利用するメリットは図にある3点です。

- セットアップが簡単であること
- モジュール導入などの面倒な手間がかからない
- 利用した分だけの従量課金

## 事例

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321349/21bcd6d6-b2b6-4995-0401-24084d1b9281.png)

[顧客名]
C-SPAN : アメリカ合衆国議会を中心に、政治を専門とするケーブルチャンネル

[実施内容] 
8箇所からの動画解析を解析する上で Amazon Rekognitionを 導入。
2時間以内に97,000枚もの分析した画像アップロードが可能となりました。
これにより編集したビデオの量が年間3500時間から7500時間に変わりました。
1時間のビデオに対する編集が約20分になった。
このソリューション開発は Amazon Rekognition を使うことで約3週間で出来た。

# まとめ
今回は「What Is Deep Learning」の動画をざっくり訳でご紹介していきました。

AI及び機械学習と記事にしていきましたが人工知能についての基本的な概念がシンプルに説明されている印象です。これらは入門向けの動画になるため、更に深掘りした内容も AWS ML University で公開されています。

これをキッカケに気になったコンテンツをチェックして頂ければ幸いです。
AWS EC2上でhttpdとphpの設定手順忘備録

#Appach&php on AWS EC2 設定
##準備
- EC2 VPC+InternetGWの中につくる

##ホスト名の設定：リモートログイン
- sshでログイン `ssh -i ***.pem ec2-usr@xxx.xxx.xxx.xxx` (パブリックIPでログイン)
- ホスト名を設定する(1) `sudo nano /etc/sysconfig/network`

```network 
NETWORKING=yes
HOSTNAME=xxxxx-xxxxxx-aws-web-1a
NOZEROCONF=yes
```

- ホスト名を設定する(2) `sudo nano /etc/hosts`

```hosts
127.0.0.1   xxxxxx-xxxxxxx-aws-web-1a localhost localhost.localdomain localhost4 $
::1         localhost6 localhost6.localdomain6
```

- ここで一旦、リブート　`sudo reboot`

##言語・日時の設定：再度リモートログイン
- ssh -i ***.pem ec2-usr@xxx.xxx.xxx.xxx (パブリックIP)
    - ログインするとプロンプトに設定したホスト名が表示される
- 日本語の設定 `sudo nano /etc/sysconfig/i18n`

```i18n
LANG=ja_JP.UTF-8
```

- 時間の設定(1) `sudo cp /usr/share/zoneinfo/Japan /etc/localtime`
- 時間の設定(2) ` sudo nano /etc/sysconfig/clock`

```clock
ZONE="Asia/Tokyo"
UTC=true
```

- 日時合わせの確認 `date`

##ミドルウェアの設定
- システムのアップデート `sudo yum update -y`
- appachのインストール `sudo yum install -y httpd24`
- php70関係のインストール `sudo yum install -y php70 php70-mbstring php70-pdo php70-mysqlnd`
- MySQLのインストール `sudo yum install -y mysql`
- Gitのインストール `sudo yum install -y git`

##Appachの設定
- 設定ファイルの編集 `sudo nano /etc/httpd/conf/httpd.conf` 
    - DirectoryIndexに index.phpを最優先で追加
    - ServerNameにxxxxxx-xxxxxxx-aws-web-1aを設定

- 設定ファイルの確認 `sudo /etc/init.d/httpd configtest`
- 自動起動の設定 `sudo chkconfig httpd on`
- Appachの起動 ` sudo service httpd start`

##ｐｈｐの設定
- 設定ファイルの編集 `sudo nano /etc/php.ini`
- Dynamic extensionとmbstringの部分に追記
    - `extension=mbstring`
    - `mbstring.language = Japanese`
    - `mbstring.internal_encoding = UTF-8`
ポリモーフィズムをScalaで説明してみる


最近、Scalaの勉強を初めて、改めて書籍を読み進めているのだが、その際にオブジェクト思向の概念の1つである、ポリモーフィズムについてのテーマがあり、もう一度概念を抑えておきたく思い、ここに記す事にした。
ちなみにScalaは、オブジェクト指向型であり、関数型でもある、マルチパラダイムな言語である。

##ポリモーフィズムとは
ポリモーフィズムとは、継承したサブクラスによって異なる動作を実装する仕組み。複数のインスタンスで同じメソッドを呼び出し、それぞれに合った実装を呼び出す事ができる。

##実際にポリモーフィズムをコードで説明してみる

今回、例として、「図形」、「三角形」、「四角形」を表すクラスを表現する事を考えてみる。drawメソッドを呼び出す事で、
その図形の形を出力してくれるものとする。

```scala
abstract class shape {
  def draw(): Unit = {
    println('不明な図形')
  }
}

class Triangle extends shape {
  override def draw():Unit = {
    println('三角形')  
  }
}

class Rectangle extends shape {
  override def draw():Unit = {
    println('四角形')
  }
}
```

最初に抽象クラスであり、スーパークラスである、shapeを定義している。これに対して、Triangleクラスと、Rectangleクラスを定義した。extendsを使って、スーパークラスである、shapeクラスのサブクラスとして、定義している。また、各々2つのサブクラス内のメソッド定義時に、overrideする事で、スーパークラスのメソッドをオーバーライドしている。

```scala
var shape:Shape = new Triangle 
shape.draw() //三角形

var shape:Shape = new Rectangle
shape.draw() //四角形
```

##ポリモーフィズムの何が便利か
ポリモーフィズムを実現する事により、オブジェクト思向における再利用性が高まるのと同時に、サブクラスのメソッドを同じ方法で呼び出す事ができる。

ポリモーフィズムを使わない実装をすると、TriangleクラスとRectangleクラス各々で、新たに別のメソッドを新規に作成する事になってしまう。
これらを踏まえて冗長なコーディングがないように心がけたい。
[Unity]"Can't add script behavior XXXX.The script needs to derive from MonoBehaviour"の改善方法4つ

# 背景

3年弱ぶりにUnityを触った初心者です。
間違いがあったらご指摘いただければありがたいです。

# 事象

オブジェクトに対してスクリプトをアタッチしようとしたときに、下記のメッセージがポップアップで表示されることがあります。

![error_message.png](https://qiita-image-store.s3.amazonaws.com/0/233011/8b588e92-7c5a-1a12-a91f-854b397a0a7c.png)


# 環境
- Windows 10
- Unity 2018.2.19

# 1. ファイル名とクラス名が一致していない

これが一番起こりやすい事象です。
下記イメージでは、命名を誤ってしまい「Shooter.cs.cs」というファイル名で、クラス名は「Shooter」としています。

![scripts.png](https://qiita-image-store.s3.amazonaws.com/0/233011/67fb4a16-b1c9-e2a6-d1c7-27a7dfc5bd01.png)

この場合、ファイル名「Shooter.cs」に変更することで、アタッチすることが出来るようになります。

# 2. コードの中に全角スペースがある

スクリプトファイルのコード内に全角スペースがあると、発生することがあります。
全角スペースがないか確認し、存在する場合は半角スペースに置換しましょう。

# 3. Reimport Allする

ファイル名とクラスが一致している、コード内に全角スペースがないにもかかわらず、
正常にアタッチできない場合は、Reimport Allを試してみましょう。
Projectから右クリックして、下から5番目くらいにあります。

![reimport.png](https://qiita-image-store.s3.amazonaws.com/0/233011/7822fbad-9ae7-124d-56fe-d66cd4b073ed.png)

言葉の通り、プロジェクトを1からインポートしてくれます。

# 4. Unityのバージョンを変更する

[Unity Issue Tracker - [2018.1] &#39;Can&#39;t add script behaviour VisualContainerAsset&#39; error when adding script to GO with mismatched file and class name](https://issuetracker.unity3d.com/issues/2018-dot-1-cant-add-script-behaviour-visualcontainerasset-error-when-adding-script-to-go-with-mismatched-file-and-class-name)
のように、もしかしたらUnityのバグかもしれません。

最新バージョンを使用していない場合は、アップデートをしてみましょう。

# 終わりに（雑記）

学生時代に触って以来、Unityを触りました。
当時はUnity 4系を使っていました。
uGUIが追加されて、「なにこれすごい」って1人テンション上がっていたことを思い出します。

3年くらいたって、ちょっと知らない設定とか増えていましたが、UIは当時のままで安心しました。
当時は、UnityとVisual Studioでたまに固まってしまっていましたが、今はかなりサクサクでした。
（自分のPCスペックが上がった影響なだけかもしれませんが…）

あと、昔Unity 4系で作ったProjectをImportしたら、エラー吐きまくって悲しくなりました。
AWSのBig Data and Analyticsのレポート

　2018年12月7日にAWSのBig Data and Analyticsに参加しましたので、その内容をアウトプットしたいと思います。

## 今後のビッグデータはデータレイクが必要になる

### 発端となった出来事
　PentahoのCTOであるJames Dixon氏が[HaddoopWorld](https://jamesdixon.wordpress.com/2010/10/14/pentaho-hadoop-and-data-lakes/)で以下のことを提唱。

- データはRDBでは技術的、経済的には扱うのが難しくなるほどの規模で増え続けている
- どのような分析を行うかを分析する前に完璧に把握することはできない
    - できる限りデータは貯めておきたい
- データ活用時に必要な構造で取り出したい

### ビッグデータ分析の問題点
　クラウドで実現するビッグデータ基盤として、AWSでは収集・加工、蓄積、分析、可視化の4つの基盤で実現していますが、この蓄積が以下の3点で困難になっています。

- ストレージコスト増加
- セキュリティの懸念
- 社内データ探索の負荷大

　この問題に対して、データレイクを構築すると以下の理由で解決できます。　

- データ連携の重複防止
- 一貫したアクセス制御　
- 明確なデータの配置と検索
- 直接読み込み、コピー連携

## データレイクアーキテクチャ
### データレイクに求められる要件
　解決したい問題がストレージコスト増加、セキュリティの懸念、社内データ探索の負荷大であることから、以下の6点が要件となります。これらの要件はAWSのサービスであるS3とGlueで解決できます。

S3で解決
- エクサバイトクラスのデータ容量を安全に格納
- 低コスト
- アクセス制御可能
- 高速高性能

Glueで解決
- 統制が取れていること
- 該当オブジェクトを容易に探索・再利用

#### S3
　容量無制限のネットワークオブジェクトストレージです。AWSサービスの中核的な位置付けで、強固なセキュリティ、安定した性能、高信頼性を実現しています。
　さらに、新機能としてオブジェクトロック、インテリジェントティアリングが追加され、データレイクの要件を満たすことができます。

#### Glue
　Glueはデータカタログの作成、ジョブの作成と実行、ジョブの開発をすることができます。
　データカタログはクラウド内のデータ情報の全体図のことです。このおかげで、データベースの接続情報やDBの種類、データの形式、更新情報を確認することができます。これにより、データレイクをゴミ溜めになってしまうのを防ぐことができます。
　ジョブはデータカタログに登録したデータを加工・移動するための機能です。

### データレイクの活用
　このデータレイクを実際に分析を行うのが、Athena、Redshift、EMRです。

#### Athena
　Athenaは大規模なデータでも高速なクエリを実行することができますのでデータレイクを扱うことができます。Athenaで取得したデータをRedshiftで分析をします。

#### Redshift
　Redshiftは最大2PBまで拡張ができ、超並列、カラム型DBエンジンで高速SQl処理を行うことができます。

#### EMR
　EMRはHadoop/Sparkなどで、大規模な分散処理環境を数クリックで構築できます。これらのサービスを使うことで、データレイクのような大規模なデータを容易で高速に分析ができます。

## データレイクの可視化
　データレイクの可視化はQuickSightで実現されます。これにより、棒グラフや円グラフ、表などでデータを確認でき、また、ブラウザやモバイルなどどこからでもアクセスができます。

## まとめ
　ビッグデータは多くの企業が新しい領域への挑戦として取り組んでいますが、一方でデータの蓄積が容易ではなくなってしまいました。そこでデータレイクを構築することで大規模なデータを扱うことができます。このデータレイクのおかげで、大量のデータを蓄積し、高速で扱いやすく、かつ安全に取り扱うことができるようになります。今後のビッグデータで、重要なファクターになるのではないかと思いました。
【備忘録】開発環境の構築


買い換えるたびにMacの環境構築何してたかな〜っと忘れてることが多いので、ほぼ自分用の備忘録
(何かの参考になったら嬉しい限りです)

## ゴール

- チーム間コミュニケーションがとれる
- Githubと連携できる
- 担当の開発が出来る

## 構築編
優先度順(DL時間等の問題)で記載していきます。(最低限のものです)

--- 

### セキュリティソフト
- Avira  
とりあえず、セキュリティソフトをまず入れる！  
ノーガードでいろいろ入れると、偶にグーパン喰らう(´・ω・｀)  
https://www.avira.com/ja/download/product/avira-free-antivirus-for-mac

--- 

### 開発ツール
設定やDLにすごく時間がかかるので、先に行う。

#### AndroidStudio
DLサイト : https://developer.android.com/studio/?hl=ja

DLしてほのぼの待つだけ。

--- 

### ブラウザ

私は`Chrome`派なので・・・  
DLサイト : https://www.google.com/intl/ja_ALL/chrome/

---

### ターミナル
#### iTerm2
https://www.iterm2.com/

#### Git  

- configの設定 
参考サイト : https://note.nkmk.me/git-config-setting/ 

- GitHub連携(SSH接続設定)  
https://qiita.com/shizuma/items/2b2f873a0034839e47ce

#### HomeBrew
やってもやらなくても好きな方でいいんですが、大抵なにかするときにこいつ出てくるのでいれておく   
https://qiita.com/balius_1064/items/ac7dff5ef10eaf69996f

#### adb連携

AndroidStudioは基本的にadbコマンド(端末に対してのコマンド操作)が出来るのですが、ターミナルでちゃちゃっとやりたい時があるので・・・

https://qiita.com/furusin_oriver/items/f956848788c7a63922bd  

#### slack
コミュニケーションツール。  

https://slack.com/intl/ja-jp/downloads/osx

---   

### サポートアプリ  

#### alfred

Spotlightを拡張したようなMacアプリ。
カスタマイズしたら色々できるのと、便利で癖になっちゃってずっといれてます。  

DLサイト : https://www.alfredapp.com/

#### Sublime Text  

好きなエディタです。いろんな言語保管されてて、pluginも充実してるので重宝してます。  

DLサイト : https://www.sublimetext.com/3

### AppleScript

#### FinderからTerminalを開く  
ターミナルからの `cd`がめんどくさい・・・
参考サイト: https://qiita.com/paulownia@github/items/2c3d841684e38d353713

## 終了
もっとたくさん入れたいけど、これで最低限開発はできるので
使ってみよう！Qt for Python

# はじめに
Qtは、C++を使ったクロスプラットフォームって事を前面に押し出した開発フレームワークだったりしてますが、さまざまな言語バインディングされているのをご存知ですか？
現状では、

 * Ruby - QtRuby    
 * Perl- PerlQt    
 * Python - PyQt、PySide、Qt for Python(PySide2)

などなどが、バインディングされて提供されています。
本記事では、Python で使用できる Qt for Python について説明します。

# Qt for Pythonとは
Pythonのバインディングとして、PyQt、PySideがあげられますが、

 * PyQt - 開発元：Riverbank Computing社
 * PySide - 開発元：The Qt Company

が中心となって開発を進めています。
PySideは、Qt開発元から提供されているバインディングであるものの、QtのメジャーバージョンであるQt5シリーズのサポートされておらず、長く開発が止まったままでした。
2016/4月頃にようやく、Qt CompanyのCTOである、Lars Knollからメーリングリストにて
[ボチボチやってこまい](https://groups.google.com/forum/#!topic/pyside-dev/pqwzngAGLWE)
って事で徐々に開発が進められ、"Qt for Python"という名前で、Qt5シリーズをサポートする最初のリリースとして2018年6月に発表されました。
"Qt for Python"は、Qt5.11のバージョン以降をサポートしており、現状で[サポートされているQt5モジュールリスト](https://doc.qt.io/qtforpython/)を見る限り、ほとんどのモジュールをサポートしています。

# サポートするPythonバージョン
サポートするPythonのバージョンは、

 * Python 3.5+ and Python 2.7

となってはいますが、WindowsではPython 2.7の公式バイナリパッケージがサポートされていない事から注意が必要です。

# 使い方
PyPI(Python Package Index)で登録されており、Pythonの環境が入っている方であれば、
次のコマンドにて簡単にQt for PythonをInstallする事が可能です。

```cmd
$ pip install PySide2
```

現状(2018/12/15)では、Qt5.12はリリースされているものの、PyPI登録が5.11.2のままだったりしていますが、もう少し待ってはきっと5.12へupdateされると思います。

# Qt for Pythonを使ってみよう。
[Qtでタスクトレイ常駐アプリをつくろう](https://qiita.com/sazus/items/88daf4949cac06529f88)で使用したQt WidgetをベースにPythonでCodeを実装してみましょう。

```python:main.py
import sys
from PySide2.QtWidgets import QApplication, QSystemTrayIcon, QMenu
from PySide2.QtGui import QIcon


# TrayWidgetクラスは、QSystemTrayIconを継承して作成
class TrayWidget(QSystemTrayIcon):
    def __init__(self, parent=None):
        QSystemTrayIcon.__init__(self, parent)

        # タスクトレイアイコン クリックメニュー登録
        menu = QMenu(parent)
        qt_action = menu.addAction("Qtちゃん")
        qt_action.triggered.connect(self.Message)
        menu.addSeparator()
        quit_action = menu.addAction("&Quit")
        quit_action.triggered.connect(self.Quit)

        # タスクトレイアイコン クリックメニュー設定
        self.setContextMenu(menu)

        # 初期アイコン設定
        self.setIcon(QIcon('QtChanBack.png'))


    # "Qtちゃん"メニューでメッセージ表示
    def Message(self):
        self.showMessage("ゆるキャラ", "Qtちゃんだよ", QIcon('QtChan.png'), 5000 );

    # "Quit"にて、タスクトレイアイコンアプリを閉じる
    def Quit(self):
        QApplication.quit()


def main():
    app = QApplication([])
    tray = TrayWidget()
    # タスクトレイに表示
    tray.show()

    ret = app.exec_()
    sys.exit(ret)


if __name__ == '__main__':
    main()
```

ほぼ、C++のCodeと同じようなCodeでPythonでも記述することができましたね！


# さいごに
Qtでの、Pythonバインディングが公式でサポートされ始めたので是非使ってみてください！
出勤予定時間管理システム（RFP）

#はじめに
　クリスマスまであと１週間！サンタクロースにプレゼントをおねだりするみたいに私が開発を要望したいアプリをリクエストしたいと思います。
　アドベントカレンダーで毎日蓄積されたスキルやこれまでの知識を活かしたい！そんな開発系サンタクロースに是非読んでもらいたいです。

#自己紹介
　「まさか私がＩＴ部門へ異動？！」周囲の人のみならず、自分自身もびっくりしたのが今から４年前。人材サービス会社に入社して１５年目に訪れた転機でした。
ずっと営業職で人並みにパソコンは操作できるけど、人材派遣の依頼内容でもっとも苦手だったのが「ＩＴ人材」の依頼。ＩＴ用語まったくわからない、「ジャバ」って風呂掃除用？
人生何が起こるかわからないとはまさにこのことです。
　ＩＴ部門は営業やその他の間接部門とは仕事のやり方も、人種も違う。最初は違和感ありましたが、今はそれも「味」だなって思っています。

##みんなの出勤予定時間を簡単に確認できるアプリがほしい

#今のこと
　当社の就業時間は「スーパーフレックス制」となっていて、コアタイムなしのフレックス制。自分の仕事のペースにあわせて就業時間を決められるけど、自分以外の人にその時間を伝えている。義務じゃないけど、ルールもないけど、やっぱりチームで仕事しているからＩＴ部内で就業時間を報告しあっています。報告方法は「ＩＴ部：勤怠連絡」というチャットグループで、各々が「明日は○時出勤です」とか「今週の予定は・・」とか形式も様々です。

![勤怠報告チャットグループ.jpg](https://qiita-image-store.s3.amazonaws.com/0/312671/d8a781b9-e86b-1735-cdea-5aa4fb961161.jpeg)

#困っていること
　書き込み形式なので、すぐに知りたい情報に辿り着けない。
よくあるシチュエーションは社内外からの電話があった時。
「○○さんいらっしゃいますか？」と聞かれて
「少々お待ちください」と電話を保留にし、まずは目視でその人が探し、いなかったら「ＩＴ部：勤怠連絡」のチャットを開いてずらっと書き込まれた報告の中から該当の人を探す。
所要時間としては１分未満かもしれないけど、待たされる側や対応する側の感覚はもっと長く感じているかもしれません。

#叶えたいこと
　（１）報告方法
　①簡単に書き込めること
　②ＩＴメンバー全員に周知できること
　（２）確認方法
　①簡単に検索できること
　②一定時間で勤務している報告不要の人はデフォルト値設定がされていること
　（３）必要な情報
　①出勤予定や退勤予定時間
　②休暇
　③勤務先（他の支店や出張先）

#おわりに
　開発系サンタクロースの皆さん、いかがでしょうか？
もう既にアイディアが沸いているのでは？！
クリスマスの朝、目覚めると素敵なプレゼン（ト）が届いていることを願って待っています。

![サンタ.jpg](https://qiita-image-store.s3.amazonaws.com/0/312671/71fc1ae5-3d08-4367-b8fd-b095b854e492.jpeg)
How to fix Right click on Start button - Windows 8.1 / WinX

## How to fix right click on start button Winddows 8.1 - WinX


### Symptom
 - Right Click on Start button does nothing ... no menus


### Copy WinX/Group? -> User

```
xcopy %SystemDrive%\Users\Default\AppData\Local\Microsoft\Windows\WinX %userprofile%\AppData\Local\Microsoft\Windows\WinX /e /y
```

### Reference
https://answers.microsoft.com/en-us/windows/forum/windows8_1-desktop/right-click-81-start-button-does-nothing/50f95136-32bd-4581-9241-f2321bc440dd?auth=1
SQLの基本構文

SQLの基本構文をまとめます！


#SELECT
取得したいカラム名を書きます

#FROM
取得したいテーブル名を書きます

#例
###カラム一つを抽出したいとき

```
SELECT
  カラム名
FROM
  テーブル名 
```


###複数のカラムを抽出したいとき

```
SELECT　
  カラム名1,
  カラム名2,
  カラム名3,
  カラム名4
FROM
  テーブル名 
```

###すべてのカラムを抽出したいとき

```
SELECT　
  *
FROM
  テーブル名 
```
お手軽firebaseプッシュ通知証明書作成メモ

従来のp12ファイルの対応ではなく、p8ファイル１つで、複数アプリ分対応できてしまうp8ファイルで対応するメモです。
（アプリ側には事前にfirebaseSDKの[Messaging](https://firebase.google.com/docs/cloud-messaging/ios/client?hl=ja)を導入しておく必要があります。）

### p8ファイルの作成が必要なのは最初だけなので、
ルーティンで新規アプリのプッシュ通知の設定をする場合は、
firebaseに

* p8ファイルをアップロード
* キーIDに「固定のID」
* チームIDに「固定のID」と入力するだけ。

めちゃ楽ちん


## 最初はp8ファイルの作成が必要なので、用意しておく

### 1. 認証キーを用意する(p8) 
※ p8ファイル：１つの証明キーで、複数のアプリに対応できる

#### 下記管理画面で作成
https://developer.apple.com/account/ios/authkey/
※admin権限のメンバーでないと閲覧＆作成できません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/eda48938-74d3-c830-7f26-0938c84d5c9c.png)

* Key Description　の入力
* Apple Push Notifications service (APNs) にチェック


![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/621d56b5-3b89-86e0-dcc1-af11bcb86342.png)

* 次にp8ファイルをダウンロード、大切に保管しておきます。
* Key IDをメモします。

> 注意！：一度ダウンロードすると２回目以降Downloadできなくなります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/094f3db8-587a-cc1d-d54a-122549b02139.png)

#### Team IDを取得

https://developer.apple.com/account/#/membership/

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/42a7abfe-af90-ad30-52ff-b08fb5459ba0.png)

* Team IDをメモる

#### あとはfirebaseに設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/9ac88493-1951-bdef-41ca-d290bfa65ab6.png)

プロジェクト設定から、クラウドメッセージング タブを選択し、

対象のiOSアプリを選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/83e19f4d-cf2b-725a-8e18-351a0dccd803.png)

あとは、ここに先程用意した下記情報を設定し、
* p8ファイル
* Key ID
* Team ID

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/b143eb7e-2b45-ff58-721b-78e8bf4e4b78.png)

アップロード！

#### プッシュ通知のテスト！

あとは、Cloud Messaging メニューから、対象のアプリや、テストバージョン等を指定して、
プッシュ通知のテストするだけ！！！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/effd7fc5-5470-0d4c-4ed7-406ad9e47060.png)

以上おつかれさまでした！
firebaseのおかげで色々チーム開発等もしやすくなって万々歳
baserCMS 5で導入予定のCakePHP 3系は2系からどう変わった？

*この記事は[baserCMS Advent Calendar 2018](https://adventar.org/calendars/3481) 17日目の記事です。*

こんにちは！[baserCMS](https://basercms.net/)リリースマネージャーの永冨隆之 (@tommy6073) です。

先日、島根にて、[baserCMS 5の開発方針指針を決めるミーティング](https://basercms.net/news/archives/575)が行われました。
現在baserCMSはCakePHP 2系をベースとしていますが、次のメジャーバージョンであるbaserCMS 5ではCakePHP 3系（リリースされていれば4系の可能性も）をベースとすることが決まりました。

私自身はCakePHPは2系しか触ったことがなく（3系はチュートリアルをやったぐらい）、どういった変更が行われたのか知るいい機会だと考えたので、今更ではありますがCakePHP 2系から3系での変更点を改めてまとめてみたいと思います。

# はじめに
まず見るべきページとしてCakePHP公式の移行ガイドがあります：
[3.0 移行ガイド - 3.7](https://book.cakephp.org/3.0/ja/appendices/3-0-migration-guide.html)	

2.xから3.0の変更点がひととおり網羅されていますが、どれが重要かといった順序付けがされていません。
この記事では特に重要だと思われる変更についてピックアップして書いていこうと思います。

# モデルの変更
一番の変更点と言えるのがモデルの変更です。互換性のないこの大きな変更の影響で、3系へのバージョンアップが進まなかったということもあるそうです。

こちらに関しては公式でも重要と捉えているようで、移行ガイドとは別にページが用意されています：
[新 ORM アップグレードガイド - 3.7](https://book.cakephp.org/3.0/ja/appendices/orm-migration.html)

「偽」ORMと言えるものだった2系のORMが真にORMになる変更となっています。

詳しくは公式ガイドなどを参照していただくとして、以下の2点が特に大きな変更点ではないかと思います：

* Modelクラスがテーブル単位の操作を担う[Table](https://book.cakephp.org/3.0/ja/orm/table-objects.html)、レコード単位の操作を担う[Entity](https://book.cakephp.org/3.0/ja/orm/entities.html)といったクラスに分割された
* ORMのクエリー結果が配列ではなくオブジェクトで返ってくるようになった。

参考記事：
[CakePHP3のORMの中核を担う「Entity」とは何か 〜CakePHP2ユーザー向けに〜 - コネヒト開発者ブログ](http://tech.connehito.com/entry/cakephp3-orm-entity)

# Composerと名前空間の利用
Composerの利用が標準になり、CakePHPプロジェクトの作成自身もComposerにより行うように変更されました。

また、2系ではAppクラスを利用した独自のパス管理やローディングを行っていましたが、3系からはPSR-4に基づいた名前空間を利用するようになっています。
併せて[フォルダ構成](https://book.cakephp.org/3.0/ja/intro/cakephp-folder-structure.html)もPSR-4に基づいたものに変更されています。

# その他
## パフォーマンスの向上
ブートストラップ、ルーティング、ヘルパーテンプレートの作成などにおいて改善が行われ、パフォーマンスが向上しています。

## セッション管理の改善
2系までは静的クラスによりセッションを管理していましたが、3系からはリクエストオブジェクトを`$this->getRequest()->getSession()`のように取得して管理できるようになりました。これによりテストがしやすくなり、CakePHPがPHPUnit 4.xを利用できるようになりました。

## ビューセルの追加
ミニコントローラーとも言える[ビューセル](https://book.cakephp.org/3.0/ja/views/cells.html)が追加されています。
ナビゲーションバーのような小さな部品に適用することが可能です。

## TestShellの廃止
`TestShell`は廃止され、全て`phpunit`を介してテストを行うよう変更されています。

# まとめ
以上、CakePHP 2系から3系への主な変更点をまとめてみました。

モデルの変更を中心に、様々な改善が行われており、正にメジャーアップデートと言えるものになっているな、という感想を抱きました。

なお、baserCMSではバージョン5の開発も含め、[プロジェクトに貢献](https://medium.com/its-okay-to-be-weird/basercms%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E8%B2%A2%E7%8C%AE%E3%81%99%E3%82%8B%E8%89%B2%E3%80%85%E3%81%AA%E6%96%B9%E6%B3%95-63057b53b3e4)していただける方を募集しています。この機会にCakePHP 3系のプロジェクトに関わりたいという方がいたら是非ご参加ください。
悪のシステムエンジニア

- 短気なので一瞬で報連相して、短気なので一瞬で引き下がり、相手にコストもかけない爆速さ
- 傲慢なので自分のアイディアをチームやプロジェクトにばらまく自信過剰さ
- 怠惰なので人に仕事をできる限り丸投げして他の人を成長させる無責任さ
- これらのクオリティを上げていきたいだけの人生だった
- プログラマ三大美徳に学ぼう、的な日本人的な賢さや謙虚さだけではやりきれない
- 悪になる、悪いエンジニアになるという圧倒的なメンタルモデル、イメージを持ってニヒヒと笑う悪代官になるのだ

全然ジャンル関係ないけどイメージはこんな感じ、コンビニで見かけた文庫本

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/f5733733-232d-87e7-5603-1076c6909abc.png)



https://youtu.be/lJ08ucNdJ14 








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->