OmniAICreator/Qiita-1.07M huggingface dataset:
【簡単API作成】SwiftSheetを用いてspreed sheetデータを簡単にAPIに変換しよう(PHP版)

#1,はじめに：SwiftSheetって何？
皆さんこんにちは。
ふくしま はやと（[@MasuraoProg](https://twitter.com/MasuraoProg)）と申します。

普段は営業として仕事をしている、非エンジニアのおじちゃんです。
今はサンデーエンジニアを自称して、興味あるものを作って挑戦しています。

***

さて、この度paizaさんのブログにて
[SwiftSheet](https://swiftsheet.app)というGooleSpreadSheetをAPIに変更できるできるシステムが
紹介されていました。

**めちゃくちゃいいじゃん！**

***

プロダクトを行う際に、まずは簡単に作ってみたいと言うときがあります。
そんなときに、このSwiftSheetはその願いを叶えてくれるサービスになりえます
まさに、[MVP](https://boxil.jp/mag/a3551/)向けです。
また、初学者や非エンジニアにとってもめちゃくちゃとっつきやすくていい感じです。
ということで、利用方法等をまとめました。


***
#2,SwiftSheet利用のための準備
***
##2-1,先にGoogleSpreadSheetに情報を記載

練習用に以下のように、GoogleSpreadSheetに記載しました。
１行目に、項目名を記載して、それぞれ適当に記載しています。
GoogleSpreadSheetに記載した後、CSVにて保存してください。

***
**イメージ**
![000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307585/07c16076-dfc2-0444-265e-06a8ea4a6596.png)
***
##2-2,CSVをSwiftSheetにアップロード
SwiftSheetのWEBページから、アップロードしてください。
なおその際に、
- パスワード
- 有効期限
などを設定することも可能です。

***
**イメージ**
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307585/93a31093-cb28-2da7-af98-7e705c5eca80.png)

***

##2-3,REST　APIが発行される。
発行されたAPIを使用してください。
**イメージ**
![222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307585/71e7d3e1-5e66-7aad-dca3-52416b0cae14.png)

***
##3-1,　自由に使用してください。


例

```php:index.php

<?php
header('Content-Type: text/html; charset=UTF-8');

// WebAPIのURL
$url = "https://swiftsheet.app/api/sheet/（あなたのAPI　URL）";
// URLの内容を取得し、json形式からstdClass形式に変換し取得
$data = json_decode(file_get_contents($url));

echo('<pre>');
var_dump($data);
echo('</pre>');

```

***
object(stdClass)#6 (1) {
  ["data"]=>
  array(5) {
    [0]=>
    object(stdClass)#1 (4) {
      ["会社名"]=>
      string(15) "AAA株式会社"
      ["業種"]=>
      string(6) "商社"
      ["住所"]=>
      string(21) "東京都港区AAA町"
      ["電話"]=>
      string(12) "03-aaaa-aaaa"
    }
    [1]=>
    object(stdClass)#2 (4) {
      ["会社名"]=>
      string(15) "BBB株式会社"
      ["業種"]=>
      string(12) "人材紹介"
      ["住所"]=>
      string(17) "東京都港BB町"
      ["電話"]=>
      string(7) "03-BBBB"
    }
  （以下略）
***


以上です。
簡単なサービス／テストにてAPIが必要な場合は、
パスワード等を設定して、ぜひご利用してみてください！
PHPで複数検索を書くときにbit列に分割して実装した．

# はじめに
最近宮蘭フェリーハッカソンに向けてSNSもどきを作ってるんですが，ジャンルで分類されているDBにフロント側から複数のジャンルで検索をかけたいときにサーバー側はどういう数字を受け取ればいいんだろうということを考えていてbitを使ってみることにしました．

# bit列
今回だと8種類ジャンルがあったので渡された数字が4(=00000100)だと3つめのジャンルで検索かけるというような実装をするようにしました．
# 実装例
```php
$genre_num = 4;//検索をかけたいジャンル
$genre_bit = decbin($genre_num);
$zero = "";
for($i=0;$i<8-strlen($genre_bit);$i++){
  $zero = $zero."0";
}
$genre_bit = $zero.$genre_bit;
$sql = "SELECT * FROM table";
$flag = false;
for($i=7;$i>=0;$i--){
if($genre_bit[$i] == "1"){
  if($flag == false){
    $sql = $sql." WHERE genre=".(7-$i+1)." ";
    $flag = true;
  }
  else{
    $sql = $sql."OR genre=".(7-$i+1)." ";
  }
}
```
\$ genre\_numに検索するための数字が入っているのでdecbin()に渡して二進数の文字列にしています．
次に今回は8種類なので最初の方を0埋めします．そして文字列の後ろから比較していき，1になっている部分でSQL文を追加していきます．そして最後にSQLを実行すれば多分動きます．
$flagは最初のWHERE句を呼ぶために立てているので一度1を見つけたらflagが立ってそこには入らなくなります．
# 終わりに
正直もっといい方法あるんじゃないかってすごく思うんですけど今回自分なりに工夫して実装してみました．意見とかマサカリとかお待ちしております．

# 補足
このプログラムは検索部分のみを切り出してきたものなのでそもそも\$ genre\_numにはおかしな数字が入っていないとします(関数を呼ぶ時点で排除しているので)．
Cron監視ツール「Cronitor」の導入

## はじめに
一定規模のwebサービスを運用していると、処理するジョブの数もそれなりに増えていき、以下のような問題が起こります。

- 特定のジョブに対していつはじまっていつ終わるのか、成功したのか失敗したのかがわからない...。
- すぐにでも既存のすべてのcronjobの監視をしたい

他ツールとしてRundeckやAirflowとかもあるが、そこまではやらずとも簡易的に導入したい。
こういった問題に直面した時におすすめしたいのがCronitor。

お仕事で導入する機会を得られたので、メモとして残しておく。

## Cronitorとは
一言でいうと、Cron監視ツール。他ツールと比較しても小コストでの導入が可能で、導入するだけで既存の全てのCron監視が可能になる。「すぐにでも既存のすべてのcronjobの監視はしたい」といったケースには最適なツールと言える。
公式サイト：https://cronitor.io/

## メリット・デメリット
### メリット
- 小コストで導入可能で記述もシンプル
- crontabに追加するだけ

### デメリット
- ジョブの依存関係の定義などの高機能なことは不可能
- 有料 ($24.95/月〜)一応フリープランもあるが1つのmonitorしか作れないため動作確認程度でしか使えない
- 公式：https://cronitor.io/pricing

## 使い方
使い方は大別して2つあり、まず一つ目はcurlで繋げていくパターン。
各cronjobに一意のidが与えられるので、それを使用して以下のように記述します。
また、idは各モニターで確認でき、モニターの編集画面でスケジュールの設定やアラート通知等の設定ができます。

成功時は&&で繋ぐ。

```
＃mh dom mon dowコマンド

4 5 * * * /invoice-reminders.sh && curl https://cronitor.link/d3x0c1/complete
```
失敗時は||で繋ぐ。

```
＃mh dom mon dowコマンド

4 5 * * * /invoice-reminders.sh || curl https://cronitor.link/d3x0c1/fail
```

auth_keyの設定もこんな感じでできます。

```
＃mh dom mon dowコマンド

4 5 * * * /invoice-reminders.sh || curl https://cronitor.link/d3x0c1/fail?auth_key=your_ping_api_key
```
公式：https://cronitor.io/docs/ping-api#security

もう一つはCronitorCLIを導入するパターン。
CronitorCLIをバッチサーバーにインストールして以下コマンドを叩くとモニターを作成してくれて、スケジュールも自動的に同期してくれる。
数分でセットアップが完了します。

```
worker1:〜$ cronitor discover
```

実行後のcrontabは以下のようになる。

```
25 * * * * cronitor exec aArCdx /invoice-reminders.sh

33 * * * * cronitor exec rHVpx7 cronitor discover --auto
```

```cronitor exec id``` の形で各cronの実行通知、成功通知、失敗通知を適宜してくれる。
最後の行に追加される```cronitor discover --auto```は、新規でCronを追加&変更する場合に1時間ごとにCronitorのタスクが実行され変更を自動検出し、Cronitorモニターに反映してくれる。
公式：https://cronitor.io/docs/integration-guide

## まとめ
以上、ざっくりとCronitorについてまとめてみました。
そのほかに通知周りの設定なども、slackをはじめOpsGenie、PagerDuty、メール通知なども簡単に連携できるので、使い勝手が良いと思います。
ぜひ機会があったら使ってみてください。
openpyxl keyerror 31

ライブラリopenpyxlでエクセルファイルを読み込む時、エラーが発生しました。

```from openpyxl import load_workbook
book = load_workbook("db.xlsx")```

以下のエラーが発生しました。
  ```File "C:\Users\en_pm\PycharmProjects\cunit_tool\venv\lib\site-packages\openpyxl\styles\stylesheet.py", line 166, in _normalise_numbers
    fmt = BUILTIN_FORMATS[style.numFmtId]
KeyError: 31```

ネットで調べますと、セルの日付のフォーマットの原因です。
ユーザー定義のフォーマットがOpenpyxlで解析できないため。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197197/b9206680-14b5-cbf9-6154-9f94978a0934.png)

セルの表示形式に’日付’を設定すると、うまく解決しました。
【GitHub】レビュー時間短縮のために工夫したこと

## はじめに
コードレビューが終わらず困ったことはありませんか？
放置されると、せっかく頑張って開発したのにな～と残念な気持ちになりますよね :crying_cat_face:
この記事ではレビュー時間を短縮するため、自分のチームで工夫したことを紹介します。

## どうしてレビューが遅いのか？
原因は言ってしまえば１つしかないのです。

**＿人人人人人人人人人人人＿**
**＞　レビュワーが忙しい　＜**
**￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y￣** 

KPT大荒れ:surfer_tone2::see_no_evil:

## レビュー時間を少しでも短縮するために
レビュワーの忙しさは大人の事情によりドウシヨウモナイ状況だったので
少しでもレビューしやすくなるよう、開発者側で以下を取り入れました。
（元々のプルリクエスト運用ルールは[こちら](https://qiita.com/sii_gizmo/private/04e1df1982001219f0d1)）

* milestoneを設定し、レビューの優先度を可視化する
* 変更量が多いと後回しになりがちなので、プルリクエストを分割して作成する。


レビュワー側でも以下を心がけました。

* レビュワーはレビューを1つのタスクとして作業時間を確保する

早起きが得意な方は、人から声をかけられない早朝に出社して、
まとまった時間をつくるのがオススメです。
※[弊社](https://tech.zozo.com/recruit/)はフルフレックスを導入しているので、AM5:00から始業可能です:relaxed:

## 最後に
１つのプルリクエストで行う変更をシンプルにすること、
優先順位が一覧から見えることにより、レビュー効率が上がったように感じます。

ただし、プルリクエストを細かくしすぎるとこんな問題も起こるので注意が必要です。

* プルリクエストの全体量にびっくりする（気にせずどんどんいきましょう！）
* レビュー順、マージ順が途中で分からなくなる:innocent:

何事もほどほどが大切ですね。ありがとうございました！


##参考記事
* [プルリクエストを段階的に出してレビューしやすくしよう！](https://qiita.com/abeyuya/items/002f1fd88efb52c06924)
Intl.PluralRules で序数詞表現

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">プログラムで、英語で「3番目の値」「5番目の値」などと出力したい場合、「&quot;the &quot; + n.toString() + &quot;th value&quot;」のように書きますよね。 ただこの場合、「1th」(1stが正しい)、「23th」(23rdが正しい)、のようにおかしいパターンが生じてしまいます。 こういうとき、みなさんならどう解決します？</p>&mdash; くいなちゃん (@kuina_ch) <a href="https://twitter.com/kuina_ch/status/1177869968324485120?ref_src=twsrc%5Etfw">September 28, 2019</a></blockquote>

JavaScript では`Intl.PluralRules`を使うといいかと思います。
`Intl.PluralRules.prototype.select`メソッドは、数値を引数に取り、言語に応じたその数値のカテゴリ（"zero", "one", "two", "few", "many","other"）を返します。たとえば英語では、1は"one"、11は"other"が返ってきます。

「1は"st"だけど11は"th"」のような処理の部分を、「"one"は"st"、"other"は"th"」のように簡略化できます。
[サンプル](https://jsfiddle.net/Lhankor_Mhy/ht3m4cf9/)

```js
const pluralRules = new Intl.PluralRules('en-US', { type: 'ordinal' });
const ordinalRules = { other:'th', one:'st', two:'nd', few:'rd' }
const ordinal = n => n + ordinalRules[ pluralRules.select(n) ];

ordinal(1); //1st
ordinal(2); //2nd
ordinal(3); //3rd
ordinal(4); //4th
ordinal(11); //11th
ordinal(21); //21st
```

参考：
[Intl.PluralRules - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/PluralRules)
[cldr-numbers-full/numbers.json at master · unicode-cldr/cldr-numbers-full · GitHub](https://github.com/unicode-cldr/cldr-numbers-full/blob/master/main/en-US-POSIX/numbers.json)
Configuration example of Logstash syslog input module 



　以下の流れのデータフローを構築するために、本記事ではLogstashのコンフィグレーションの設定方法について述べる。

[Logstash syslog] -> [Kafka] -> [Elasticsearch]


####1. Logstashのインストールについて

Javaをインストールする

```
yum install java-1.8.0-openjdk
yum install java-1.8.0-openjdk-devel
```

鍵を取得する

```
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
```

リポジトリ情報を記述する

```
sudo cat <<EOF >> /etc/yum.repos.d/logstash.repo
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
```
インストールを実行する

```
sudo yum install logstash
```

起動コマンドはこちらから。

```
systemctl start logstash
systemctl status logstash  
systemctl enable logstash
```

以下は、LogstashのInputプラグインの全設定項目である。

```
input {
  syslog {
    ### port[number]
     # The port to listen on. Remember that ports less than 1024
      port => 514
    ### host[string]
     # The address to listen on. Default value is "0.0.0.0"
      # host => 127.0.0.1
    ### facility_labels[array]
     # Labels for facility levels. These are defined in RFC3164.
      # facility_labels => ["kernel", "user-level", "mail", "system", "security/authorization", "syslogd", "line printer", "network news", "UUCP", "clock", "security/authorization", "FTP", "NTP", "log audit", "log alert", "clock", "local0", "local1", "local2", "local3", "local4", "local5", "local6", "local7"]
    ### grok_pattern[string]
     # The default value should read and properly parse syslog lines which are fully compliant with RFC3164.
     # grok_pattern => "<%{POSINT:priority}>%{SYSLOGLINE}"
    ### locale[string]
     # Specify a locale to be used for date parsing using either IETF-BCP47 or POSIX language tag.
     # The locale is mostly necessary to be set for parsing month names (pattern with MMM) and weekday names.
      # locale => en-US
    ### proxy_protocol[boolean]
     # Proxy protocol support, only v1 is supported at this time
      # proxy_protocol => false
    ### severity_labels[array]
     # Labels for severity levels. These are defined in RFC3164.
      # Labels for severity levels. These are defined in RFC3164.
       # severity_labels => ["Emergency", "Alert", "Critical", "Error", "Warning", "Notice", "Informational", "Debug"]
    ### syslog_field[string]
     # Codecs process the data before the rest of the data is parsed.
      # syslog_field => "syslog"
    ### timezone[string]
     # Specify a time zone canonical ID to be used for date parsing. The valid IDs are listed on the [Joda.org available time zones page]
      # timezone => America
    ### use_labels[boolean]
     # Use label parsing for severity and facility levels.
      # use_labels => true
  }
}

```
JavaScript（変数）

##変数
###変数の定義
**let 変数名 = 値**　と定義する。
「右辺を左辺に代入する」イメージ。
`let name = "太郎"`

###変数の使い方

```js
//変数の使い方
let name = "太郎";
console.log(name);
```

```js
//置き換えのイメージ
let name = "太郎";
console.log("太郎");
```

```js
//コンソール
太郎
```

変数にはクォーテーションは使わない。
（クォーテーションで囲むと文字列として認識されてしまう。）↓

```js
//間違いの例
let name = "太郎";
console.log("name");
```

```js
//コンソール
name
```

##変数の更新
変数は、一度代入した値を更新することができる。
（上書きできる。）

更新する際は、「let」はいらない。

```js
//更新するときの変数の書き方（文字列ver.）
let name = "太郎";
console.log(name);
name = "花子";
console.log(name);

//コンソール
太郎
花子

//更新するときの変数の書き方（数値ver.）
let number = 2 ;
console.log(number);
number = number + 3 ;
console.log(number);

//コンソール
2
5
```
SQLの４大命令について

[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしている[箕牧和廣](https://qiita.com/mimaki_kazuhiro)です。
今回はSQLの４大命令について書いていこうと思います。

プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください。

#SQLとは
SQLとはデータベース言語であり、データベースを管理するソフトウェアを操作・制御することが目的です。データベースというのは、集めたデータをプログラムによって整理し、操作できるようにしたものです。データベース言語はデータを管理して、ユーザーが指定した条件に合致するものを見つけ出すためのものです。

#SQLの種類
SQLは、大きく分けて以下の3種類の言語から構成されています。

- データ定義言語(CREATE,DROP,ALTER等)
- データ操作言語(INSERT,UPDATE,DELETE,SELECT)
- データ制御言語(GRANT,REVOKE,SET TRANSACTION,BEGIN,COMMIT,ROLLBACK,SAVEPOINT,LOCK)

今回はデータ操作言語に該当するSQLの４大命令についてまとめてみました。
    
#SQLの４大命令とは

SQLの４大命令とは以下の４種類です。

| 命令       |      　説明 |    文法    |
|:-----------------|------------------:|:------------------:|
| INSERT             |              データを追加する |        INSERT INTO テーブル名 (カラム名1, カラム名2, ...) VALUES (値1, 値2, ...);        |
| SELECT           |            データを取得する |       SELECT カラム名1, カラム名2, ... FROM テーブル名 [WHERE 絞込条件];
       |
| UPGRADE             |              データを更新する |        UPDATE テーブル名 SET カラム名1=値1 [, カラム名2=値2 ...] [WHERE 絞込条件];        |
| DELETE               |                データを削除する |         DELETE FROM テーブル名 [WHERE 絞込条件];
         |


#INSERT
テーブルにデータを追加する

```sql
INSERT INTO テーブル名 (列名1, 列名2, 列名3, ...) VALUES (値1, 値2, )
```

#SELECT
テーブルからデータを取得する

```sql
SELECT 列名... FROM テーブル名 (WHERE 条件式)
```

#UPGRADE
テーブルにデータを追加する

```sql
UPDATE テーブル名 SET 列名=値1, 列名2=値2, ... (WHERE 条件式)
```

※注:WHEREのないUPDATEは全レコードが更新される。

#DELETE
テーブルのデータを削除する

```sql
DELETE FROM テーブル名 (WHERE 条件式)
```

※注:WHEREのないDELETEは全レコードが消去される。
同Directory配下のClassのimportの注意点 

# 概要
久しぶりにPythonでハマったので、備忘録的なあれ。
PythonにてあるProductを作成している際に、Class間で相互にimportする必要が出てきたが、、、、できない！ 
というか、すべきではない

# 対策
互いにimportしたいClassがあるのであれば、同じファイルに記載しましょう
フィリピンIT Coding Boot Camp ６ヶ月コースの4ヶ月目で思うこと

現在、フィリピンのセブでもないマニラでもないどこかの涼しい雨ばかりの街でIT Boot Camp(6ヶ月)に参加した僕が感じていることやIT勉強したい、身に付けたいけど最善の方法って結局学校？それとも働いた方がいい？などの答えのヒントに少しでもなればなぁと思います。（あくまで全て一個人の僕の感想です）
# そもそもIT Boot Campて何？
これは、知らない方もいると思いますが、このIT Boot Campはビリーズブートキャンプの仲間ではなく、アメリカやイギリスなどでも開催されているITの知識を詰め込む集中講座のようなものです！

<font color="Red">IT Boot Campの特徴</font>
 -超短期集中
 -勉強する範囲が6ヶ月コースなどになってくると結構広い。
 -授業は全て英語
 -毎日コード書く生活漬け
 -（他は知りませんが）インターンシップ先を用意してくれる
...こんなところですかね。
とりあえずまとめると、6ヶ月と言う期間でコードを書きWebsiteを作れるように学習し、そしてクライアントを獲得できるまでに成長させよう！
みたいなノリのコースですね。

# 実際、仕事を自分で得れるほどまでに成長するの？
ここが全員気なっているところですよね〜。
結論から言います。（**これもただの僕の意見です**）
**ただ言われてるだけのことをこなして学校が終わり次第家に帰っていたら絶対無理です。**
ただ誤解して欲しくないのは、別にコースを否定している訳ではなく、ただお金をいただいてオンライン上でクライアント様の希望を目に見える形にすると言うのはとても大変と言うことです。6ヶ月のコースでそれが完璧に身につくはずはありません。いくら学校に高い授業料を払っていても、自分で主体的に動かなければ生き残ってはいけません。


# それならいかない方がいい？
そう思いがちですが、ちょっと待ってください。
だからこそIT Boot Campでは、エンジニアとして一番大事なスキルである自分をアップデートする方法を学べるんです。
これは本当に日常生活でも役に立つんですが、まず知らない事をすぐに調べると言う情報の収集の癖がつきますし、
その情報収集の仕方やcオーディングでバグが出た際の解き方など応用がきくテクニックもひたすら教えてくれます。

でも授業では、実際そのやり方を教えてくれるだけで自分のスキルとして落とし込むまでの時間は取ってくれないんですよ。
なので、終わった〜って家に帰ってしますと綺麗さっぱり忘れてまたぐるぐる同じことを学んで時間だけ過ぎて言ってしまいます。
要は、自分で学んだことをしっかりと整理しアウトプットできればそれなりに成果の上がるコースだと言うことです。

# 自分なりのメリットとデメリット
**メリット**
・コーディングの基礎は身につく（HTML、CSS、JavaScriptなど）。
・マネタイズやクライアントの獲得の仕方まで一応体系的に教えてくれる。
・やる気がある人にとってはいいスピード感でどんどん新しい分野や言語を教えてくれる
・仕事上だと何回もきくことに抵抗があるが生徒の立場なら何回も納得がいくまで聞ける。
・授業はほぼどこでも英語なので英語が上達する
・エンジニアになりたいけど、何をどうやって始めたらいいの？って言う方には唯一お勧め！
**デメリット**
・アカデミックな内容も多いので実践で活かせないこともある。
・[前回の記事](https://qiita.com/SodaiHirano/items/2a66ea00b9e44e78bdff)でも書きましたが、やっぱり実際に企業に入ろうとすると現実的にたかだか数ヶ月しかコーディングかじってないと言う現実を痛感するので自分でアンテナをしっかりはってどの言語やどんなスキルが生きるかを模索し続けながら勉強していく必要がある事。
（これに関してはいいきっかけにもなるので、メリットでもありますね！）
・日本の案件は全くカリキュラム内では取ろうとしないので海外案件を狙うというハードルの高さが少しある。
・カルチャーギャップで苦しむ時がある（来てみて感じてみてください笑）

# 最後に
未経験で企業に入っていきなりコーディングを詰め込まれても正直限界がありますが、そのあとの仕事は自分で取らなくても用意されていると言うことになります。
一方、こういったコースを受講しいいご縁にも恵まれ、フリーランスとして活躍できれば自分の仕事を選ベルし嫌なら断れます。
値段だって交渉できます。とにかく規制がありません。自由です。

これは勧誘でもないし、IT Coding Boot Campというシステムへの悪口でもありません。
ただ、実際に足を踏み入れたことがない方や、少しでも興味がある方達がこの記事をみて『やっぱやーめた』とかなったり『背中を押せたり』できればなと思い本音で全て書いてあリます。
なので、なんか言っていることが矛盾していればこのコースのいい側面もあるけど嫌なところや不満も抱えながらコーディングに励んでいたということです笑

以上、僕の体験談でした。
何かありましたらコメントください。
読んでいただきありがとうございました。
Webページ上でaudioを使う時はDOMノードに足さなくてもいい

実際のDOMノードに`<audio>`タグを足さなくても、

``` javascript
const audio = new Audio();
```
という形でjavascript上でHTMLAudioElementを作成するだけで音声は再生できます。
HTMLAudioElementは`<audio>`をjavascriptから操作するためのメソッドを提供するためのインタフェースなので、`<audio>`タグに対し、jsで行うことの出来る操作は一通り実行できますし、イベントハンドラの設定も可能です。

# 当然、見た目には反映されない
`<audio>`タグを使うと基本的にブラウザ標準の音声インタフェースが出ますが、
js上でHTMLAudioElementを作成した場合はDOMツリー上に載らないので全く見た目には影響しません。
元より既存の見た目に頼るつもりがない場合は、こちらの方が取り回しが楽ではないかと個人的には思います。
見た目部分と切り離せますので。
Pythonのargparseでbool型のオプション引数を与えたらハマった話

# やりたいこと
実行時のオプション引数でTrue/Falseを設定したい。

```sh
$ py test.py --hogeFlag False
False
```
みたいな感じでオプション引数からbool値を取って内部で処理を分けたいと思ってました。

## コード
最初はこんな感じのコードでオプション引数を取得していました。
bool以外のオプション引数を使ったスクリプトを組んだことがあったのでその応用でいけるやろと思ってました。

```python
def get_args():
  parser = argparse.ArgumentParser()
  parser.add_argument("--hogeFlag", type=bool, default=True)

  return parser.parse_args()
```

## 結果
```
py test.py --hogeFlag False
True
```
:rolling_eyes::question:

Falseを指定したつもりがTrueになってますね・・・

# 原因
`bool()` でbool値に変換されているのが原因だった。
`type=bool` と指定しているとPythonは、設定された引数を `bool()` に入れてbool型にしてくれるようです。
`type=int` とかにすると `int()` を通してint型にしてくれていたおかげで文字列が入るとエラーが起こっていたんですね。
確かにどの言語でも、コマンドライン引数も最初はstring型として取得されてましたね。

今回のケースでは下記のコマンドで動かしていました。

```sh
$ py test.py --hogeFlag False
```

`type=bool` なので、この場合は `bool('False')` という処理を動かしてbool値に変換しようとします。
この `bool('False')` はどういう結果になるのか。サクッとPythonWinで動かしてみます

```python
>>> print(bool('False'))
True
```

Trueになってるやん・・・

## 理由
pythonの真偽値でFalseと判定されるのは次のものらしいです（[公式ドキュメントより抜粋](https://docs.python.org/ja/3/library/stdtypes.html?#truth-value-testing)）

>偽であると定義されている定数: None と False
数値型におけるゼロ: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
空のシーケンスまたはコレクション: '', (), [], {}, set(), range(0)

コマンドライン引数やオプション引数は、取得時にはstr型として扱われます。
なので3つ目の空のシーケンスまたはコレクションの部分に判定されます。
`''` のような空文字だけがFalseと判定され、それ以外はTrueと判定されるようです。
`bool('False')` がTrueと判定される理由がわかりました。

# 対応
add_argument関数の引数には `type` の他に `action` というのもありました。
今回のケースではこちらを使用します。 [参考](https://docs.python.org/ja/3/library/optparse.html#handling-boolean-flag-options)

## コード

```python
parser.add_argument("--hogeFlag", action='store_true')
```

`action='store_true'` というのが新しいところですね。
動きとしてはこうなります

```sh
$ py test.py --hogeFlag
True

$ py test.py
False
```

`--hogeFlag` を指定した時だけ `True`で、指定しない時は `False` になりました！

余談ですが真逆の `store_false` というのも設定することができます。動きは `store_true` と反対なだけなのでここでは省きます。

# まとめ
オプション引数でbool値を与えたいときは `type=bool` ではなく `action='store_true(またはfalse)'` で設定する！
【自分備忘録】内部SEO施策殴り書き

コーディングするときに自分が気にしてる部分をまとめてみました。

## セマンティックなマークアップ
文書構造的にちゃんと意味のあるマークアップをしましょう、的な感じかな(゜゜)

* header / footer
* main / aside
* article / section
* h1, h2, h3（h4以降はあってもなくてもOK。主要なのはh3まで）
    * h1は1ページに1つ（複数あるとペナルティ）
    * h1とtitleは全く同じにする必要はなし（かと言って、まったく違う内容なのはNG）
* figure
    * そのページ内で、意味のある（それがないと文章読んでも分からないー的な）図表に対してつけるタグ。

…とかまぁ、ここにあげたのは一部なので、他にも色々あるけども。。
divとかspanで組んじゃうところを、別タグで置くことで「ここはarticleだよ！」とか「ここはheaderだよ！」ってのをちゃんと示してあげましょうって感じ。
アクセシビリティ的なところでも、こういうマークアップは大事だそうな。

## meta情報
検索結果表示に関わってくる大事な部分。
### title
**主要キーワードを入れて、MAX30文字前後。**
あんまり長くなりすぎると、検索結果で切れちゃうから、なるべく主要ワードは先頭に入れるほうが良い。
でも基本的には「主要キーワード＞文字数」なので、主要キーワードを入れることが優先。
### keywords
検索では使われることはないらしいが、あってだめなわけではないので、入れとくとよい。
**主要キーワードを含めた、6ワード前後**がベストって言われた。
特に重要度の高いワードは、最初に設定しておくとよい。
### description
ページの説明を書く。Google検索とかで出てきたりする。
多少前後はするけど、**全角110字前後**で書くと。省略されずに表示される。
主要キーワードを、平均的に散りばめて書くとなおよし。
これもtitle同様、「主要キーワード＞文字数」なので、主要キーワードを入れることが優先。

## 構造化データ
これもセマンティックなページを作るために必要になるやつ。
クローラーに「このページはこういうこと書いてるぜー」「このページは誰が書いててこーいうジャンルだよー」ってのを教えてあげることができる。
これをすることで、検索結果にリッチリザルト（通常の検索結果ではない、ちょっと見た目に変化があるやつ）が表示されるようになる。

* パンくずリスト
* サイト内検索
* しごと検索
* How-to（最近、日本のGoogle検索でも表示が開始された）
* FAQ

などなど。。
自分がよく使ってるのは、パンくずリストかな（入れるの簡単だし）。
**※構造化データを入れたからと言って、必ず検索画面にリッチリザルトが表示されるわけではないので注意！**

### パンくずリスト

```html
<!-- https://sample.co.jp/about/のパンくず -->
<!-- 【ホーム > このサイトについて】みたいな感じになってた場合 -->
<script type="application/ld+json">
[
  {
    "@context": "http://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "item": {
          "@id": "https://sample.co.jp/",
          "name": "サンプルサイト"
        }
      },
      {
        "@type": "ListItem",
        "position": 2,
        "item": {
          "@id": "https://sample.co.jp/about/",
          "name": "このサイトについて"
        }
      }
    ]
  }
]
</script>
```

他はGoogle先生が詳細書いてくれているので、気になる方は確認すべし。
* [構造化データ | Google Developers](https://developers.google.com/search/docs/data-types/article?hl=ja)
ashとは？bashじゃないの？Alpine Linuxのコマンド

# ashコマンドってなに？？

超軽量で名高いAlpine Linuxのコマンドです。
dockerの軽量化でよく出てくるやつですね！

参考↓
[超軽量なAlpine Linuxについて調べた](https://qiita.com/ryuichi1208/items/6020cfabc92bd8153654)
[dockerでalpine linux ベースのcontainerに入って、shellを使いたいとき。](https://qiita.com/yutachaos/items/56dd7ea09d7e2b0d9173)
[Alpine Linux入門 -内部構造とapkでパッケージインストール編-](https://blog.stormcat.io/post/entry/alpine-entry-apk/)


## bashじゃなく、ash
今までbashを使っていたものをashに置き換える考えでOKです。

>Alpineにはbashがサポートされていません。
>サポートされているのは、ash(Almquist Shell)です（組み込み系Linuxではashがポピュラー）。
>bashに依存しているものをそのままalpineで動かすことはできません（bashのインストールが必要）

bashを使ってエラーで怒られるのはこういうことらしいです。

>bashではなくashを利用する。
>alpine linuxはbusyboxを元に作られていて、シェルにはashが使われている。
WEBの知識0の私がURLを贈る

##動機
誕生日に手紙を贈るのは普通すぎると思って, ちょっと勉強中のHTMLやらを使ってURLを贈ることにしました.
なんかまずい部分あれば教えていただけると幸いです...

あまりにも酷いコード全貌 : [github](https://github.com/be-m1ya/HBmom_2021)

##どんなものを作ったのか
生年月日いれて, 当人の誕生日に合致していたら次のページ
→ドット絵のGIFがお祝いする

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437676/ef647eaa-dd84-c586-7b2a-a7c7c3fc9425.gif" width=30%>

52thとかいう書き方あってるんかな...

※iphone向けでしか作っていません.

##開発環境
・sublime
・xampp 7.3.9

##web上に公開する
progateというサイトのこちら([自分で作ったWebページをインターネット上に公開しよう！](https://prog-8.com/docs/github-pages))を参考にgithubを用いてHPをweb上に公開しました.

##スマホでの画面を確認する
xamppを用いてlocalhostで作成したHPを確認しながら作成しました.
絶対もっと楽な方法ある...

どのHPでも[F12]キーを押せば,そのHPのソース等が表示される開発者向けページになってくれます.
今すぐ[F12]キーを押せば下画像のような画面が表示されると思います.
このページではスマホで表示した場合の画面を確認することもできます.
しかもiphone6/7/8,Galaxy S5,ipadとか色々選べます(画像左上).

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437676/3a97e761-acba-4da1-71bd-33df78befd48.png)



##ドット絵
[piskel](https://www.piskelapp.com/)というサイトでドット絵作成.ドット絵描くのが非常に楽しかった.

##スマホ用に
[やさしいWebアプリ](https://www.amazon.co.jp/%E3%82%84%E3%81%95%E3%81%97%E3%81%84Web%E3%82%A2%E3%83%97%E3%83%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E3%80%8C%E3%82%84%E3%81%95%E3%81%97%E3%81%84%E3%80%8D%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E9%AB%98%E6%A9%8B-%E9%BA%BB%E5%A5%88/dp/4797369388/ref=cm_cr_arp_d_pdt_img_top?ie=UTF8)
を参考にしました.

````html
	<meta name="viewport" content="initial-scale=1.0">
```
でスマホ向け画面になってくれるみたいです.

画像の表示を横幅に合わせるために CSSで調整.

```css

.gif img{
	width:100%;
}
```

##誕生日を入力してもらうフォーム

誕生月・日のセレクトボタンを作成.

```html
	<form>

		<select name="sel2">
			<option value="#"></option>
			<script type="text/javascript">
			for(var i=1;i<13;i++){
				document.writeln("<option>" +i + "月</option>");
			}
			</script>
		</select>

		<select name="sel3">
			<option value="#"></option>
			<script type="text/javascript">
			for(var i=1;i<32;i++){
				document.writeln("<option>" +i + "日</option>");
			}
			</script>

		</select>
	<input type=button value="決定" onClick="return check(sel2.value,sel3.value)">
		
	</form>
```
**function check()**では当人の誕生日が入力されたら次のページへ
という感じ.
違えばalertでます.

##スマホでの音声出力
audioタグでは, safariやChromeで音楽の自動演奏ができないと知った時にはびっくりしました.
[こちら](https://webty.jp/staffblog/production/post-907/)のサイトを参考に, 画面タップで音楽が流れるような仕様に.

```html
	<audio autoplay loop id="audio">
	<source src="happy_birthday_to_you_unpluged.mp3">
	</audio>

	<script type="text/javascript">	
	document.addEventListener('click', audioPlay);
	function audioPlay() {
  		document.getElementById('audio').play();
  		document.removeEventListener('click', audioPlay);
	}	
	</script>	
```



##おわり
とっても楽しかった！
Golang - Makefileの書き方

# はじめに
Golang開発のタスクランナーとしてMakefileを利用することが多いようなので書き方を整理します。

# サンプル
https://github.com/so-heee/golang_example/tree/master/makefile_example

# タスク

## タスクの実行

```bash:terminal
$ make taskname
```

## タスクの設定

```Makefile:Makefile

.PHONY: taskname
taskname:
    command

# 実行コマンド非表示
.PHONY: taskname
taskname:
    @command

# タスク定義が複数のコマンド
.PHONY: taskname
taskname:
    command1
    command2

# 複数コマンドをワンライナーで実行
.PHONY: taskname
taskname:
    command1 && command2

# 上のケースの別の方法
.PHONY: taskname
taskname:
    command1 ; command2 ;\
    command3

# タスクの前に別のタスクを実行
.PHONY: taskname3
taskname3: taskname1 taskname2
    command

# 自身のMakefileに定義してある別のタスク定義を実行
.PHONY: taskname2
taskname2:
    $(MAKE) taskname1
    command

```

#### .PHONYについて
タスク名と同名のファイルやディレクトリがあるとタスクが実行されません。
.PHONYは省略可能ですが、定義することで上記の条件でも実行が可能になるため
基本的には書いていこうかと思います。

# 変数

```Makefile:Makefile
# 変数名=値
VAR=hello make
.PHONY: taskname
taskname:
    echo $(VAR)

# shell commandの実行結果を変数に格納
NOW=$(shell date)
.PHONY: taskname
taskname:
    echo $(NOW)

# シェルスクリプト変数・環境変数は$$で参照
.PHONY: taskname
taskname:
	VAR=$$GOPATH && echo $$VAR

# タスク実行中に環境変数を書き換えたい場合は、コマンド実行が1行終わるごとに環境変数がmakeコマンド実行時に戻る
.PHONY: taskname
taskname:
	export VAR="この値は消えてしまいます"
	echo VAR=$${VAR}

.PHONY: taskname
taskname:
	export VAR="この値は残ります" ;\
	echo VAR=$${VAR}

# サブディレクトリのMakefileのタスクを実行する
.PHONY: taskname
taskname:
	make -C sub_directory sub_task

# make実行時に変数の値を渡す（make task VAR=XXX）
VAR="これは上書きされる"
.PHONY: taskname
taskname:
    echo $(VAR) $$VAR
```

# OSSプロダクトのMakefileを見てみる

[Docker](https://github.com/docker/cli/blob/master/Makefile)
[kubernetes](https://github.com/kubernetes/kubernetes/blob/master/build/root/Makefile)
[Terraform](https://github.com/hashicorp/terraform/blob/master/Makefile)
[Gobot](https://github.com/hybridgroup/gobot/blob/master/Makefile)
[Gin](https://github.com/gin-gonic/gin/blob/master/Makefile)

## .PHONYは全てのタスクで定義
参考のmakefileでは全てのタスクで.PHONYが定義されていました

```:一括で.PHONYを定義することもできる
.PHONY: bin cover default dev e2etest fmt fmtcheck generate protobuf plugin-dev quickdev test-compile test testacc testrace tools vendor-status website website-test
```

## よく見かけたタスク
以下のタスクをよく見かけました

- fmt
- test
- lint/vet
- clean
- help

## タスクの詳細はshellを用意
複雑なタスクはshellを用意し、Makefileは実行だけするようにしていた箇所がいくつかありました

## ifeqで条件分岐

```Makefile:Makefile
ifeq ($(XXX),y)
taskname:
	command1
else
taskname:
	command2
endif
```



# 参考
[Go言語開発を便利にするMakefileの書き方](https://qiita.com/yoskeoka/items/317a3afab370155b3ae8)
Multivariate Regression with Grossly Corrupted Observations: A Robust Approach and its Applications

abst
この論文は，観測の一部が著しく破損または，欠落している多変量線形回帰の問題を研究し，その原因と解決するためのアプローチを提案している．
アプローチの特徴は，独自のノイズレベルを持つことができること．
アプリケーションでは，SNSでのユーザー行動に基づくパーソナリティの予測と画像データによる手のポーズの推定の2つを行っている．


1. introduction


```math
Y =  XW^* +Z
```
$Y\in \mathbb{R}^{n\times p}$ : 観測値のセット行列
$X\in \mathbb{R}^{n\times d}$ : 各行がサンプルである計画行列
$W\in \mathbb{R}^{d\times p}$ : 回帰係数行列
$Z\in \mathbb{R}^{n\times p}$ : 観測値にノイズを含む行列

<問題>
$X$と$Y$から係数回帰行列$W^*$を推定すること．$Y$のノイズはエネルギーをboundしており、ノイズ行列$Z$に十分に吸収されると仮定するのが一般的．

これは通常，特定のガウス分布に従うようにモデル化されている．

<損失関数>

```math
$W = argmin_W{{\ell(X,Y;W) + \lambda r_W(W)}}$
```

$\ell$ : 損失関数
$\lambda$ : 調整パラメータ
$r_W(W)$ : 正則化項

観測$Y$は通常のエラーよりもかなり大きなエラーによって破損している．例えば，不注意もしくは，悪意のあるユーザーアノテーションによってひどく汚染されている．

ここで，$G^* \in \mathbb{R}^{n\times p}$を考えることでこの問題に対処する．
$G^*\in \mathbb{R}^{n\times p}$ : 非ゼロエントリのⅠが不明で大きさが非常に大きい可能性があるスパース行列．

これにより，次の線形モデルができる．

```math
Y =  XW^*+Z+G^*
```

次の最適化を行う

```math
min_{W,G}{{\ell(X,Y;W,G)+\lambda r_W(W)+\rho r_G(G)}}
```

```math
\rho : トレードオフパラメータ\\
r_G(G)： 正則化項
```

論文の貢献
(1) 多変量回帰の新しいアプローチ
(2) 誘導された非滑らかな最適化問題は、効率的でグローバルに収束することが本稿で示されている．
(3) 実世界の2つのアプリケーションについて実証
(4) オープンソースと再現可能なプラクティスをサポートするために、実装と関連データセットを公開している．


1.1 関連研究

最小二乗損失には2つの欠点がある．
(1) 異なる回帰タスクに含まれるさまざまなノイズレベルは無視される
(2) 有限サンプルのパフォーマンスを改善するには、Zの未知の分散の推定に依存する最適なλを選択することが重要．

この2つの問題に対処した論文がcalibrated multivariate regression (CMR) method(Liu et al, 2014)
→ノイズの影響を受けにくく，ノイズレベルに応じてタスクを調整できる．

この論文のアプローチでは，損知る関数として，L2,1-normを採用する．


2. The Proposed Model


3. Our CMRG ALgrithm
4. Empirical Evaluations
5. Conclusions

一部の出力ラベルが破損または欠落している多変量回帰問題の新しいアプローチを検討した．
総誤差はモデルで明示的に対処されますが、独自のノイズレベルに応じて個別の回帰要素またはタスクを適応させることができる．
さらに、グローバルに収束し効率的な提案された近位ADMMアルゴリズムの収束および実行時特性を提案および分析します。
このモデルと特別に設計されたソルバーを組み合わせることで、さまざまなアプリケーションに取り組むアプローチが可能になります。これは、2つの異なるアプリケーションで実際に実証されています。

つまり、SNSでの行動に基づいて人格を予測し、単一の深度画像から3Dの手のポーズを推定します。

合成データセットと実際のデータセットに関する実証実験により、ラベルノイズが存在する場合のアプローチの適用性が示されました。

futurework
ディープラーニングテクニックと統合して、3Dハンドポーズの推定など、より実用的な問題に対処する．




## 0. 論文
https://arxiv.org/abs/1701.02892
## 1. どんなもの？
出力ラベルが破損または欠落している多変量回帰の問題に対処した論文．

## 2. 先行研究と比べてどこがすごい？
ノイズを考慮してより精度がよい．

## 3. 技術や手法のキモはどこ？
損失関数を変えた？
ノルムを違うやつ使ってる．

## 4. どうやって有効だと検証した？
データ：人口データと実世界のデータ
対戦相手： 
評価指標：
## 5. 議論はある？
提案モデルが完全に理解できていないので，要確認．
実装コードが公開されているのであとで確認する．

## 6. 次に読むべき論文は？
最小二乗損失には2つの欠点に対処した論文Liu et al, 2014)
## 7. メモ
C#

# C# 개발
## 환경설정
### 1. ini파일 쓰기/읽기

```C#
// import
using System.Runtime.InteropServices;

// .ini파일 쓰기함수
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
// .ini파일 읽기함수
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
```
### 2. DB 접속

#### 가상머신 DB
[- 가상 머신에서의 MS-SQL 설치와 운영](https://m.blog.naver.com/PostView.nhn?blogId=shshrka001&logNo=20201235415&proxyReferer=https%3A%2F%2Fwww.google.com%2F)

###### - 방화벽 설정

## 문법
### 1. 델리게이트
[- 강의](https://mrw0119.tistory.com/19)

### 1. Func & Action 델리게이트
[- 강의](https://mrw0119.tistory.com/23)
Synology NAS /dev/md0 100%

#What I did
When I want to change my nas,
I use Hyper backup software to backup my nas,
Copy from my nas to USB device.

But when I run the copy task,
it tells me "Run command fail"

So I reboot the nas,
and then I see "The storage is full, you can't login." message.

Login with SSH,
I see the partation `/dev/md0 100%` used.

I cost a lot time to find the reason,
finally I figure it out.

#Steps
Run `df -h` command you will see something like this,
the `/dev/md0` is 100% used.

    root@SynologyDS416j:/# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/md0        2.3G  1.1G  1.1G  100% /
    none            1.9G     0  1.9G   0% /dev
    /tmp            1.9G  2.3M  1.9G   1% /tmp
    /run            1.9G  4.1M  1.9G   1% /run
    /dev/shm        1.9G  548K  1.9G   1% /dev/shm
    none            4.0K     0  4.0K   0% /sys/fs/cgroup
    cgmfs           100K     0  100K   0% /run/cgmanager/fs
    /dev/vg1000/lv  5.5T  4.3T  1.2T  80% /volume1
    /dev/sdq2       7.3T  4.4T  2.9T  61% /volumeUSB1/usbshare1-2

Now the purpose is to solve this problem.

First, You can see the `/dev/md0` is mounted on `/`,
the root folder.

It means every folder in root may used the space,
You must find it out yourself.

In my case,
the Hyper backup software copy file into `/volumeUSB1` folder,
This is the problem:
the `/volumeUSB1/` folder is under the `/`, not USB device! 
The right USB device folder is `/volumeUSB1/usbshare1-2/` 

So I delete the files under `/volumeUSB1/`,
and reboot nas,
I can login again.

#Summary
1, Find where the `/dev/md0` is mounted.
2, Find which folder used the space.
3, Delete the files.
4, Reboot.
Cygwin環境にfd_cloneをインストールする

この記事は、Cygwin環境に **[FDclone](https://hp.vector.co.jp/authors/VA012337/soft/fd/)** を

ソースコードからビルド（コンパイル）して
インストールする方法について、忘備録としてまとめたものです。


**Cygwin上で起動したFDcloneの画面例**
![Cygwin_FDclone.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262326/59577af0-8cfa-065a-07c6-bfe353bab514.png)


Cygwin環境には、yumやaptなどのインストールコマンドは標準では用意されていないため、
FDcloneのソースコードを取得し、コンパイルしてからインストールしてみることにします。


# 1. Cygwin Setupの再実行

すでに、Cygwinのインストールは終わっているものとします。

FDcloneのコンパイルに必要なパッケージの追加のため、
(Windows が64bit版の場合は) **setup-x86_64.exe** を再実行します。

## 1-1. Cygwin Net Release Setup Program

そのまま「次へ(N)>」をクリックします。

## 1-2. Choose A Download Source

直接ダウンロードする場合は、"Install from Internet"を選択します。

## 1-3. Select Root Install Directory

### Root Directory
Cygwinのインストール済みのディレクトリを選択してださい。
デフォルトでは、**C:\cygwin64** になっています。

### Install For
全ユーザー共通の場合は、"All Users(RECOMMENDED)"を選択します。

## 1-4. Select Local Pacage Directory

ダウンロードするファイルを保存するディレクトリを指定します。

## 1-5. Select Your Internet Connection

インターネット接続の種類を選択します。

## 1-6. Choose A Download Site

任意のダウンロード元サイトを選択してください。

## 1-7. Select Package

下記の４つのパッケージを追加でインストールします。
動作に必要な関連するパッケージも自動で選択されます。

・**wget**(FDCloneのダウンロードに使用）
・**libcurses-devel**（FDcloneがカーソル制御で使用しているライブラリ）
・**make**（makeコマンドの実行い必要）
・**gcc-core**（Cコンパイラなどが含まれる。ソースファイルのコンパイルに必要）

パッケージを選択する際には、Viewのコンボボックスから"Full"を選び、Searchのテキストボックスに、それぞれ"wget", "curses", "make", "gcc-core"を入力し、一覧に表示させると探しやすくなります。

パッケージが見つかったら、[New]の列ををクリックし、最新のバージョンを選択します。

・wgetのパッケージの検索例
![select_wget.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262326/21036a94-66af-8b14-9608-8e6344f687dc.png)


**wget**, **libcurses-devel**, **make**, **gcc-core** の検索とバージョンの選択が終わったら、
「次へ(N)>」をクリックします。

## 1-8. Review and confirm changes

インストールするパッケージの一覧が表示されます。
そのまま「次へ(N)>」をクリックします。

## 1-9. Progress

ダウンロード&インストールが終わるまでしばらく待ちます。

## 1-10. Create Icons

「完了」をクリックします。


# 2. FDcloneソースファイルからのビルド

FDcloneのビルドに必要なパッケージのインストールが終わったら、**Cygwin64 Terminal**を起動します。

FDcloneのソースは「FDcloneなページ」にて公開されています。
https://hp.vector.co.jp/authors/VA012337/soft/fd/

Cygwin上から、wgetコマンドでソースファイルのURLを指定してダウンロードします。

```
$ wget https://hp.vector.co.jp/authors/VA012337/soft/fd/FD-3.01j.tar.gz
```

ダウンロードが終わったら、gzipコマンドで解凍＆展開します。

```
$ tar zxvf FD-3.01j.tar.gz
```

展開が終わったら、展開されたディレクトリに移動します。
lsコマンドで、ファイルの一覧も確認しておきましょう。

```
$ cd FD-3.01j
$ ls -al
...
...

```
インストール方法は、**Install**に記載されていますが、
Cygwin環境では特にビルドオプションを変更しなくてもコンパイルに成功するようです。

**Makefile**も用意されていますので、**make**コマンドを実行すればビルド（コンパイル）が行われます。

```
$ make
```

ビルドに成功すると、**fd (Cygwin環境ではfd.exe)** というコマンドファイルが出来上がっているはずです。
早速実行してみましょう。

```
$ ./fd
```

起動に成功したようでしたら、

**_fdrc** を **~/.fd2rc** にコピーしておきます。
必要に応じてカスタマイズしておいてください。

```
$ cp -p _fdrc ~/.fd2rc
```

**fd**も、必要に応じてPATHが設定されているディレクトリ(**/usr/local/bin**など)にコピーして
配置しておくと良いでしょう。
（もしくは、**make install** を実行してください。）

```
$ cp -p ./fd /usr/local/bin/fd
```
Jinja2でincludeしたファイルに変数を渡す方法

# はじめに
ちょっとした社内・部内向けのツールを作るのに、Python + bottle + jinja2 + SQLiteを使ってる。jinja2でincludeしたファイルに変数、パラメータを渡す方法がわからなかったのであれこれ調べたのでメモ。

# やりかた
```python:sample.py
{% with 変数名 = 渡す変数名 %}
{% include 'インクルードするファイル' %}
{% endwith %}
```
というように、{% with %} ~ {% endwith %} で囲んで、withのパラメータに渡したい変数を書く。
## 例
```jinja:template.html
{% with name = name %} 
{% include 'include.html' %}
{% endwith %}
```
```jinja:include.html
名前：{{ name }}
```

### 複数の変数を渡す場合
```jinja:template.html
{% with name = name, address = address %} 
{% include 'include.html' %}
{% endwith %}
```
「にじさんじ」で学ぶNeo4j


# 解説動画リンク

この記事を解説したものです。
解説動画を作成後リンクを貼ります。

# はじめに

研究でNeo4jを扱う必要が出てきました。
これは問題です。

Neo4jの使い方を僕は知らないのです。

しかし、インターネットの記事は「Kevin」を「Chris」と繋いでどうこうしていて、これはやりたくありません。

そこで、自分の好きなコンテンツである、にじさんじの関係性をNeo4jを使って作りながら学んでいこうと思います。


![Dex1OROV4AY6QaA.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211482/7b04e9ea-4410-5993-c1a1-56ba11b74b3e.jpeg)

卯月、愛してるぞ。


# この記事で扱う内容

この記事で扱う内容は以下のとおりです。

- Neo4jのグラフ・エッジの概念
- 基本操作
- PythonDriver
- Pythonによるスクレイピング
- スクレイピング + Neo4jPythonDriverによるにじさんじネットワークの構築
- 以上の記事内容を解説・実践する動画（Youtubeへのリンク）

# 使用OS・バージョン

使用OSはMacです。
また、Neo4j Desktopのバージョンは「Neo4j Desktop v1.2.1」
Neo4j自体のバージョンは3.5.9を使用しています。

# GraphDB・Neo4jとは

GraphDB・Neo4jの特徴は[グラフデータベースNeo4jハンズオン(インストールからプログラミングまで）](https://qiita.com/awk256/items/dc528a64ecb380eabb5c)で非常に分かりやすく解説されています。

# Neo4jのインストール

Neo4jのインストールは[Neo4j 入門 #1 (インストールおよび起動)](https://qiita.com/flystaslingan40/items/7947286267c299bb9273)のGUIのインストールを参考にしてください。
非常にわかりやすく画像もいっぱいで嬉しいです。

# グラフ・エッジの概念

Now Writing...
macにhdf5をインストールする

# はじめに
2019年10月の時点の情報です。
公式サイトのダウンロードページにmacOS用のファイルがなかったので調べました。
2019年10月現在、最新バージョンは`1.10.5`のようです。
# 環境
- mac OS Mojave 10.14.6
- Homebrew 2.1.11  

# HDF5とは
こちらの記事が詳しいです。
[意外と奥が深い、HDFの世界（Python・h5py入門）](https://qiita.com/simonritchie/items/23db8b4cb5c590924d95)

英語を読める方は公式サイトも参考になります.
[THE HDF5® LIBRARY & FILE FORMAT](https://www.hdfgroup.org/solutions/hdf5/)

# 本題
brewを使います。

```terminal
$ brew install hdf5
```

インストールが完了後ターミナルで以下が表示されれば完了です。

```terminal
$ h5ls -V
h5ls: Version 1.10.5
```

同時にその他のコマンド群もインストールされているはずです。

```terminal
h52gif            (Executable link, 118kB)
h5c++              (Executable link, 12kB)
h5cc               (Executable link, 12kB)
h5clear           (Executable link, 117kB)
h5copy            (Executable link, 122kB)
h5debug            (Executable link, 24kB)
h5diff            (Executable link, 216kB)
h5dump            (Executable link, 199kB)
h5fc               (Executable link, 12kB)
h5format_convert  (Executable link, 117kB)
h5import          (Executable link, 167kB)
h5jam             (Executable link, 118kB)
h5ls              (Executable link, 145kB)
h5mkgrp           (Executable link, 113kB)
h5perf_serial     (Executable link, 144kB)
h5redeploy        (Executable link, 5.8kB)
h5repack          (Executable link, 195kB)
h5repart           (Executable link, 17kB)
h5stat            (Executable link, 134kB)
h5unjam           (Executable link, 118kB)
h5watch           (Executable link, 126kB)
```
AWS Direct ConnectとNTTドコモ固定VPN接続について（覚書）

AWSのDirect Connectを利用してNTTドコモが提供している固定VPN接続サービスとの接続ではまったので記載しておきます。

【環境】
　ＮＴＴドコモの固定VPN接続サービス（UNOタイプL3）
　AWS側は以下のシナリオと同じ環境を構築
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Scenario3.html

【はまった点】
　NTTドコモのプライベートIPアドレス体系
　末端の端末側：１９２．１６８．３．X
　Direct Connect用のVTI：１９２．１６８．４．X

　Direct Connect初心者のため、VTIのIPアドレスを見てVPCに１９２．１６８．０．０を割り当ててしまった。
　AWS側は、インターネット接続用のEC2インスタンス1台とVPN接続用のEC2インスタンス1台を起動して構築したのだが、当初どのようにルーティングしても１９２．１６８．３．Xへの通信（ping）ができなかった。
　原因は、EC2からのパケットは全てインターネットゲートウェイへ流れていたことが判明した。

　対応方法は、１９２．１６８．４．Xを２つのネットワークに分けて、一つは、インターネットゲートウェイ用、もう一つは仮想プライベートゲートウェイ用としてルートテーブルを作ったことで問題が解消された。

※今回、固定VPN接続サービスの申し込みが別会社から行ったことでIPアドレス体系について特に何も考えず割り当てたのではないかと考えています。
※また、特定の会社が提供しているこのようなサービスに対する参考資料がほぼ無いに等しく、サービス提供企業からのサポートも受けられないという点が困ったところです。
※Direct Connectも正しく設定できたのかの確認方法が不明でした。一応、up状態になっていたのでOKとして作業を進めて一応つながったからよかったものの、AWSの設定になるのでサービス提供企業には問い合わせができない状況でした。

乱筆でよくわからない文章ですが、とりあえず私が判ればよいので、今後整理してもう少し詳しく記載しようと思います。
JavaScript （文字列と数値）

#JavaScriptとは
>JavaScriptはWebに特化したプログラミング言語の1つで、動的なWebページの制作などに用いられます。

###console.log()
()に入力された文字をコンソールに出力する。
####文字列
出力させたいテキストをダブルクォーテーション(")で囲む。
`console.log("〇〇");`
文末には必ずセミコロン(;)を付ける。
####コメントアウト
コメントをみなされ、web上には表示されない。
どのような意味を持つコードであるかを記すメモに使われる。
文頭に「//」と書く。

```js
//「こんにちは」と出力する。
console.log("こんにちは");
```

###数値
文字列と違い、クォーテーションで囲まない。
計算することができる。
**+ - * /**　数値と記号はすべて半角で記述する。
（**%**を使うと、割ったときの余りを求められる。）

```js
//文字列を出力
console.log("3+2");
//数値を出力
console.log(3+2);
```

####文字列の連結
「+」記号を用いると、文字列同士を連結することができる。
`「"天然"+"水"」とすると「"天然水"」`という一つの文字列になる。

```js
//文字列の連結
console.log("天然"+"水");
firebase functions のローカル環境を設定する

# firebase functions のローカル環境を設定する

firebaseのローカル環境セットアップメモ

## setup

- nodebrewのインストール
- nodeをインストール(8系の最新をインストールする)

    ```
    brew install nodebrew
    mkdir -p ~/.nodebrew/src
    nodebrew ls-remote
    nodebrew install-binary v8.16.1
    nodebrew use v8.16.1
    echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
    ```
    ※zshの場合はzshrcへ変更

- 依存関係にあるライブラリをインストール

    ```
    cd functions
    yarn install
    ```

- firebaseCLIをインストール

    ```
    npm install -g firebase-tools
    ```

- firebase ログイン（アカウント作成後に）

    ```
    firebase login
    ```

## local testing
- ローカルサーバの起動(functionsのみの起動)

    ```
    firebase serve --only functions
    ```

## deploy 
自分の更新したfunction のみ更新するには以下のようにfunctions:の後にfunction名を記入する

-  指定のfunctionsのみデプロイ

    ```
    firebase deploy --only functions:func1,functions:func2
    ```
基礎的エラーだった　[ Warning ]: array_merge(): Argument #2 is not an array COREPATH/classes/asset.php @ line 116

Warning!

Fuel\Core\PhpErrorException [ Warning ]:
array_merge(): Argument #2 is not an array
COREPATH/classes/asset.php @ line 116

111        {
112            \Errorhandler::notice('Asset with this name exists already, cannot be overwritten.');
113            return $exists;
114        }
115
116        static::$_instances[$name] = new \Asset_Instance(array_merge(static::$default_config, \Config::get('asset'), $config));
117
118        if ($name == 'default')
119        {
120            static::$_instance = static::$_instances[$name];
121        }

---
このエラーは「第二引数が配列で返ってきていないよ」という文。

##原因

URLで指定したアクション先にコントローラーの記述を書いていなかったため。
**（誤って本来viewディレクトリ内で書くべきのHTMLをアクション先のディレクトリ内に記述していたという凡ミス）**
【GitHub】プルリクエストの運用ルール

## Reviewers
レビューを依頼するメンバーを設定する
## Assignees
現在そのPRに対してアクションを行うべきメンバーを設定する
## Labels
プルリクエストのステータスを表すラベルを設定する

| Label       | ステータス |
|:------------|:-------|
| review request | Assigneesにレビューを依頼している|
| merge request  | 必要数のApproveがついてマージしていい状態の時。最後にApproveした人が設定する。|
| question       | Assigneesに対して質問がある時|
| fix request    | レビュワーが修正を依頼している時|
| WIP            | 作業中 |
| stand by       | まだリリースできないのでマージできない時 |
| for discussion | ディスカッション用のPRを作成した時 |

## commits
* 変更点ごとにコミットをまとめ、粒度を小さくする
* コミットメッセージにはemoji prefixを使用する
* マージではなくできるだけリベースを行う
MayaPlugin　C++　シーン読み込み後　その他のタイミング　コールバック

とにかく〇〇した後に実行とかしたい。とかタイミングの取得したい時

この関数をつかってコールバックを登録すると幸せになれます。
MSceneMessage::addCallback(MSceneMessage::kAfterOpen、登録関数);
MSceneMessage::kAfterOpenはシーン開いた後です。
その他のタイミングいっぱいある！
![message.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255687/7540cf42-44e4-f922-0ee8-f3d369fe254d.png)

登録関数はコールバックなのでこういう感じのやつ突っ込んでください。
static void afterExport(void* clientData);

MSceneMessageクラスを使うと良い
Stripeで増税対応する方法

なぜかTwitterでMediumのリンクをツイートしようとするとエラーになる…。
仕方がないのでQiita経由でリンクを貼ります。

本文は以下をご参照ください：
https://medium.com/@inkdrop/how-to-change-tax-rates-on-stripe-598610cf77af

と思ったら、リンク付きツイート自体が今できないっぽい。
cloud9 環境 で rails 5.2.3を初めて設定してみた。

#概要
Rubyを学び始めた初学者です。clou9でruby開発環境を整えるまで2日かかってしまいました。rails6.0.0をインストールしてもrailsサーバーが起動できなかった(yarnインストールができず、諦めました。)ため、rails5.2.3で構築してみましたよ。初投稿。
間違っている所などありましたら、ご指摘頂けると嬉しいです。

#前提条件
amazon web serviceアカウントを持っている方
cloud9環境での開発を考えている方

#環境
ruby 2.6.5
rails 5.2.3
sqlite3 3.7.17

##ruby 2.6.5 のインストール
environmentディレクトリにて、コードの実行をする。

###インストール可能なruby一覧情報
```rvm list know```

###rubyのインストール
```rvm install 2.6.5```

###複数インストールしたrubyから、選択する
```rvm use 2.6.5```

###インストールされているrubyの内、どれが使われているか確認
```rvm list```

###インストールされているrubyを、選択して削除
```rvmsudo rvm remove 2.6.5```

###インストールした複数のrubyから、デフォルトとして設定
```rvm --default use 2.6.5```

##rails 5.2.3のインストール
environmentディレクトリにて、コードの実行をする。
```gem install rails --version="5.2.3"

##railsプロジェクトの作成
『プロジェクト名』のフォルダを作成。
以下、コマンドでディレクトリ移動。

```cd 『プロジェクト名』```

```rails _5.2.3_ new フォルダ名```　を入力。
『フォルダ名』ディレクトリへ移動。
```cd 『フォルダ名』```

##bundleのインストール
```bundle install```

##sqlite3の更新設定
gemfile→の中→9行目あたりの
```sqlite3```の後に```,'~>1.3.6'```と入力

ターミナルにて、
```bundle update```
```rails db:create```と入力

##サーバーの起動
ターミナルにて、
```rails s```と入力

上部タブ『preview』から『preview runnning applecation』を選択
URLを確認。

rails スタートの画面になっていれば成功。
UnityでxR有効時のカメラのFOVが固定されるのを防止する


## 現象
Unity 2018.2.21 で、`XRSettings.showDeviceView = false`を用いて、三人称視点で撮影するカメラを置いたときにFOVが固定されてしまう現象に遭遇。

## 原因
VR-HMDによってFOV値が変わるので、各HMD向けに最適化されたFOV値をカメラに上書きするため。
https://docs.unity3d.com/ja/2018.2/ScriptReference/Camera-fieldOfView.html

## 対策
当該カメラコンポーネントに`RenderTexture`を割り当てれば、FOVを勝手に設定されなくなる。

RenderTextureが割り当てられておらず、Displayへ表示する設定になっているとVRカメラとして認識されてしまう模様。
英語・日本語記事共に当該現象について言及している記事が見つからず、地味にハマったのでメモを残しておきます。
Kubernetes 1.16: Urgent Upgrade Notes と 既知の問題 (Known Issues)

# はじめに

このエントリは、[Kubernetes 1.16 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.16.md) からUrgent Upgrade Notes と 既知の問題 (Known Issues)についてまとめています。翻訳に合わせて補足を追記しています。その他の内容は [Kubernetes 1.16 の変更点まとめ](https://qiita.com/uesyn/items/0246346d8958318fa1d4)を参照ください。

このエントリでは補足などの追加のコメントは :pencil: のあとに追加するようにしています。

## 既知の問題点(Known Issues)

- etcd と KMS プラグインの health check は 新たな `livez` `readyz` エンドポイントで公開されていません。これは 1.16.1 で修正される予定です。
- iptables 1.8.0 以上を利用している場合は lagacy mode で動作させるべきです。これはv1.16 だけではなくすべての Kubernetes バージョンで影響することに注意してください。 問題の詳細と回避策の適用方法については、公式ドキュメントを参照してください。
  - :memo: https://github.com/kubernetes/kubernetes/issues/71305 に記載されているように iptable 1.8.0 以上の場合に kube-proxy との互換性がなくなっているようです。
- 名前にドットを含むディレクトリにあるパッケージの informer の生成に失敗します。 これはv1.16.1で修正される予定です。([#82860](https://github.com/kubernetes/kubernetes/issues/82860))


## アップグレード前に確認が必要な注意点(Urgent Upgrade Notes)

#### Cluster Lifecycle

- manifest.json セクションの RepoTags に存在する tar ファイルに含まれる `amd64` のためのコンテナイメージはアーキテクチャ名が含まれるようになりました。Docker マニフェストを使用している場合、目に見える変更はありません。([#80266](https://github.com/kubernetes/kubernetes/pull/80266), [@javier-b-perez](https://github.com/javier-b-perez))
  - :memo: Release の tar に含まれるマニフェストなどで利用されるコンテナイメージ名に arch が含まれたものを利用するように変わったようです
- kubeadm は、TLS ブートストラップ後に `bootstrap-kubelet.conf` ファイルを削除するようになりました。`bootstrap-kubelet.conf` に依存しているユーザーは、ノード資格情報を含む`kubelet.conf` に切り替える必要があります。([#80676](https://github.com/kubernetes/kubernetes/pull/80676), [@fabriziopandini](https://github.com/fabriziopandini))
- Node ラベルの `beta.kubernetes.io/metadata-proxy-ready` と `beta.kubernetes.io/metadata-proxy-ready`、`beta.kubernetes.io/kube-proxy-ds-ready` は新たな Node には追加されなくなりました。
  - ip-mask-agent アドオンは Node Selector として利用していた`beta.kubernetes.io/masq-agent-ds-ready` ラベルの代わりに `node.kubernetes.io/masq-agent-ds-ready` ラベルを使用するようになりました。
  - kube-proxy アドオンは Node Selector として利用していた `beta.kubernetes.io/kube-proxy-ds-ready` ラベルの代わりに `node.kubernetes.io/kube-proxy-ds-ready` ラベルを使用するようになりました。
  - metadata-proxy アドオンは Node Selector として利用していた `beta.kubernetes.io/metadata-proxy-ready` ラベルの代わりに `cloud.google.com/metadata-proxy-ready` を利用するようになりました

#### Storage

- CSI ドライバで PodInfoOnMount を有効にしている場合、volume context に新規の `csi.storage.k8s.io/ephemeral` パラメータによって、 CSI ドライバのNodePublishVolume の実装がケースバイケースで ephemeral か normal の Persistent Volume かを決定されるようになりました ([#79983](https://github.com/kubernetes/kubernetes/pull/79983), [@pohly](https://github.com/pohly))
- VerifyVolumesAreAttached と BulkVolumeVerify 向けに CSI Migration の Shim レイヤーを追加しました  ([#80443](https://github.com/kubernetes/kubernetes/pull/80443), [@davidz627](https://github.com/davidz627))
- VolumePVCDataSource (Cloning) が 1.16 の Beta に昇格しました ([#81792](https://github.com/kubernetes/kubernetes/pull/81792), [@j-griffith](https://github.com/j-griffith))
- in-tree と CSI の volume limits を1スケジューラに統合しました  ([#77595](https://github.com/kubernetes/kubernetes/pull/77595), [@bertinatto](https://github.com/bertinatto))
Amazon SageMaker: Simplifying Machine Learning Application Development Course のページを和訳してみた

##はじめに
今回は、edX にて提供されている「[Amazon SageMaker: Simplifying Machine Learning Application Development](https://www.edx.org/course/simplifying-machine-learning-app-development-with-amazon-sagemaker)」の紹介ページの和訳となります。機械学習や AWS SageMaker について学びたい方、そして本コースの受講を考えている方のお役に少しでも立てば幸いです。
こちらのコースは無料・有料の両方が用意されております。有料コースの場合は無料と違い、受講内容に制限は設けておらず、また、本コース終了時には修了証を受け取ることもできます。

##About this course
機械学習は、テクノロジー分野において最も成長している分野の1つであり、そして今日の市場で特に求められているスキルセットでもあります。
本コースでは、アプリケーションデベロッパーに対して機械学習とアプリケーションの統合を簡略化するために Amazon SageMaker をどう使用すれば良いのか、を講義してまいります。

講義では以下の内容についても触れております。

- 機械学習と機械学習によって解決可能な課題のまとめ
- SageMaker のビルトインアルゴリズムをベースとしたモデルのトレーニングを Jupyter Notebook を使用して行う方法
- SageMaker を使った検証済みモデルの配布方法

本講義終了時には、SageMaker にて作成したエンドポイントと統合したサーバレスなアプリの構築ができるようになるでしょう。
本コースは AWS の認定エキスパートがレクチャ、デモ、ディスカッション、そしてハンズオンでの実験を行います(コースの内容によっては追加費用が発生するものもあります)。

##What you'll learn
本講義では、以下の内容についても学ぶことができます。

- 本講義で学ぶ内容
 - 機械学習での取り組みや、解決が可能な問題について
 - Amazon SageMaker のビルトインアルゴリズムと Jupyter Notebook インスタンスを使ったモデルのトレーニング方法について
 - Amazon SageMaker を使ったモデルの公開方法について
 - 公開した SageMaker エンドポイントをアプリケーションと統合する方法について

##Syllabus
本講義は、全部で 合計 4week 編成となっております。それぞれの week 毎に学ぶ内容について紹介してきます。

- Week1
 - 機械学習と Amazon SageMaker について
 - 機械学習を使うタイミング

- Week2
 - Amazon SageMaker Notebook と SDK について
 - Jupyter Notebook とは
 - Notebook とライブラリの使い方  

- Week3
 - 機械学習と Amazon SageMaker の用語やアルゴリズムについて
 - ハイパラメータチューニングについて
 - k-平均法アルゴリズムについて
 - XGBoost アルゴリズムについて

- Week4
 - Amazon SageMaker とアプリケーションの統合方法について
 - サーバレス化の方法について

##おわりに
Amazon SageMaker: Simplifying Machine Learning Application Development Course のページの和訳は以上となります。
無料で機械学習と Amazon SageMaker について学ぶことが可能なので、この分野に興味がある方は、ぜひ一度試してみてはいかがでしょうか。
システムプログラミング実践


#これはなに？
[Goで覗くシステムプログラミングの世界](https://ascii.jp/elem/000/001/234/1234843/)で学んだことをアウトプットする記事

#システムプログラミングとは？
以下のような様々定義があるが、今回は一番下の「OSの提供する機能を使ったプログラミング」をシステムプログラミングの定義として進める。

- C言語によるプログラミング
- アセンブリ言語を意識したC言語によるプログラミング
- 言語処理系(インタプリタを含む)、特にネイティブコードを生成するコンパイラの開発
- OS自身のプログラミング
- OSの提供する機能を使ったプログラミング

#OSの機能について
一般的なコンピュータに搭載されているOSについて、その機能の最大公約数をとれば、次の機能に集約されるでしょう。

- メモリの管理
- プロセスの管理
- プロセス間通信
- ファイルシステム
- ネットワーク管理
- ユーザ管理(権限など)
- タイマー

#Go言語
Go言語は、C言語の性能とPythonの書きやすさ/読みやすさを両立させ、モダンな言語特徴をうまく取り入れた言語となることを目標にGoogleが開発したプログラミング言語。

![スクリーンショット 2019-10-01 22.07.03.png](https://ascii.jp/elem/000/001/234/1234827/01_480x342.jpg)

![スクリーンショット 2019-10-01 22.07.03.png](https://ascii.jp/elem/000/001/234/1234828/02_480x302.jpg)


```go
import "fmt"

func main(){
  fmt.println("hello world¥n")
}
```
デバックをしていく事により、上記プログラムがシステムコールの呼び出しをしていることがわかる。

![スクリーンショット 2019-10-02 16.02.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374557/7e70587b-49b9-4820-a99b-5f0c33692036.png)