OmniAICreator/Qiita-1.07M huggingface dataset:
エンジニアとしての心構え

エンジニア、SE、採用担当として10年仕事をしてきた中で、エンジニアとして優秀な方々の特徴、および模倣したいと思う心構えをまとめてみました。

##常にワクワクする
- サービスをリリースしたとき
- 美しいコードをかけたとき
- テストケース全てパスしたとき
- バグの原因を突き止めたとき

などなど

色々あると思いますが、自分のやっている事にワクワクしている方が多いと感じます。
もちろん中には仕事もあるので、全てが楽しいという事はないと思いますが、
いかにワクワクするかを見い出しながら取り組んでいる方は、成長するし偉大な方が多いと感じます。
ちなみに私は美しいコードをかいたときに喜びを感じます笑
（もちろん時間の制約がある仕事においてはそんなコードを書いたことはない）

##怠惰である
いかに楽をするかを考えます。エンジニアとしての本質的なところかと思います。

- ２回以上行う作業は自動化する（メルカリさんの記事で読んだ記憶があります）
- （設計者が別にいる場合）なぜこの仕様なのかを考えてより良い方法を検討する
- PTP（パクれるところは徹底的にパクる）
- サボる

徹底的に楽をしようとする人はエンジニアに向いていると思います。

##少し変えてみる
怠惰と似ていますが、前回と同じことはせず、少しだけ新しい技術や工夫を取り入れて進化していくことかなと思います。
（もちろん悪い方に変えてはだめです）


##分け与える
自分だけのノウハウは、きっと他の人も思いついています。以下に素早く他の人に共有してあげられるかが勝負です。すごい人は惜しみなく自分のノウハウを共有していると感じます。自分がPTP（パクれるところは徹底的にパクる）した分、周りの人もできるようにしてあげましょう。


##以上
同じような事を書いている人がいるかなと思いましたが、そこまで被っていないようでしたので私なりに感じている事を書いてみました。
読み返してみると、エンジニアに限らずどんな仕事にでも当てはまる心構えかなと思いました。
お天気アプリ作ってみました（React, TypeScript,Redux toolkit）

React, TypeScript,Redux toolkit,外部APIに慣れる一環でお天気アプリを作ってみました。

| 項番 | ページ内リンク |
|:----:|:-------------|
| 1 | [機能説明](#機能説明) |
| 2 | [制作の意図/要件](#作成の意図) |
| 3 | [制作過程](#制作過程) |
| 4 | [制作を通して](#制作を通して) |


まずはUIをお見せします！
（URLを貼りたかったのですがAPIの回数制限などの諸問題があり断念しました）

![2021-04-17 12.32.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1233228/51e1091a-d7de-8437-71b3-2b3d977db459.png)

##機能説明
* 現在地取得
* 検索した地名をマップに写す
* 現在地もしくは検索した地域の天気情報を表示
* チャートで湿度と気温を表示

##作成の意図
React, TypeScript,Redux toolkit,外部APIに慣れるためにお天気アプリを制作してみました。

◎React/TypeScript
フロント部分実装のために使用

◎Redux toolkit
現在地情報、入力したエリアの情報、天気情報をpropsで受け渡しするのではなく、グローバルに管理したいと考えてRedux toolkitを導入することにしました。

◎外部API
今までガッツリと外部APIを叩いたことがなかったので叩くことで慣れることを目標にしました。
使用したAPIは以下になります。

* GoogleMap Api
(Geolocation API,Maps JavaScript API,Geocoding API)
* OpenWeather API

##制作過程
①外部APIに慣れる
まずそれぞれの外部APIがどのような挙動をするか知らないと構築出来ないと判断して、各々のAPIを使って簡単なアプリを作成しました。
OpenWeatherが一時間あたりに利用できる回数が決まっていたので、その回数に達成しないように気をつけて実装するのが中々骨が折れました。

②UIの構築 
UIは模写しました。
https://openweathermap.org/

③機能実装
経度・緯度情報で天気情報を取得しています。なので、現在地もしくは検索した地域の経度・緯度をGeolocation APIとGeocoding APIで取得。その経度と緯度をグローバルに管理するためにReduxtoolkitに渡すよう処理を実装。
↓
経度・緯度を元にOpenWeather APIを叩き天気情報取得。グローバルに管理するためにReduxtoolkitに渡すように処理を実装。
↓
取得した天気情報を各コンポーネントに渡して表示させるように実装。
（ちなみに極力コンポーネント分割するために５分割しました）

④Amplifyでデプロイ

##制作を通して

**苦労した点**

 * Googleアカウントのセキュリティーの強化・請求アラートの設定<br />
クラウド破産が本当に怖かったのでとても神経質になり、かなり調べて設定したので苦労しました。<br/>
 * Typescriptの型定義<br />
 至るところで予期しないエラーが発生しました。その都度何が原因か調べて型定義をしていきました。<br/>
　しかしどうしても解決出来ない箇所はany型に頼ってしまったので、もっと勉強してリファクタリングしたいと思います。
 * Redux toolkitの非同期処理
 実装していく中で想定した挙動と異なることは多々ありました。<br/>
その中で一番解消に時間がかかってしまったのがRedux toolkitの非同期処理でした。少し強引に実装してしまったので、もっと勉強をしてより良い実装できるようにしたいです。

**感想**
外部APIを叩く、レスポンスをもとに別のAPIを叩くという一連の流れを実装することで、APIについての理解がとても深まりました。
APIのドキュメントを読むことにも慣れることが出来たので、他のAPIや言語を学習する際には抵抗なく読めるようになるかなと思います。

また、このアプリ制作を通じてtypescriptとReduxの理解不足だと、ものすごく痛感したので勉強を引き続きしていきたいと思います。

このアプリ制作をしてさらにプログラミングの楽しさを知ることが出来ました！もっとたくさんアプリを作っていきたいです！！

**関連記事**
https://qiita.com/takeiin/items/cca6d001fb36bf2e2e52
https://qiita.com/takeiin/items/24b59653813528e4e082

**参考サイト**
https://zenn.dev/tiwu_dev/articles/2df43542918961
https://qiita.com/shinshin86/items/63142a4d4b498d562fba
https://qiita.com/Sotq_17/items/7acdb68620c73302945a
https://qiita.com/someone7140/items/5489c306606f5b705f75
https://qiita.com/kiritan/items/1a141eb9482c146897f7
https://qiita.com/nownabe/items/aeac1ce0977be963a740
Simple URL Copy [F]のaタグ生成ものぐさコマンド

# はじめに
この記事は以下の人に有益……かもしれません。

+ [Simple URL Copy [F] - Chrome ウェブストア](https://chrome.google.com/webstore/detail/simple-url-copy-f/kmkdfdfknlkjbmgdenhpeckpdafojnfo)をインストールしている人
+ 今もなおHTML個人サイトを運用しているいにしえの民
+ HTMLサイトにリンクを貼りたいけど、いちいちaタグを書いてURIコピペするのが面倒だと思っている人
+ MarkDownにリンク貼るのが地味に面倒だと感じている人


## Simple URL Copy [F] とは
URIをタイトルごとコピーできる拡張機能です。
MarkDownの`[タイトル](URI)`のフォーマットでコピーすることもできます。Qiitaにリンクを貼るのが便利になりますよ！
[Simple URL Copy [F] - Chrome ウェブストア](https://chrome.google.com/webstore/detail/simple-url-copy-f/kmkdfdfknlkjbmgdenhpeckpdafojnfo)

## HTML`<a>`リンク生成コマンド

以下の文をSimple URL Copy [F]のOption欄に貼り付けてください。ラベルは自由に設定してください。

```html
<a href="{url}" target="_blank">{title}</a>
```
Option画面はこれです。
![copyy1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315665/46f2cf46-f762-6675-332b-6cdc51949490.png)


### 使ってみた

コピーしたHTMLタグ

```html
<a href="https://www.hanmoto.com/bd/isbn/9784065166796" target="_blank">方言の地図帳 佐藤 亮一(編集) - 講談社 | 版元ドットコム</a>
```

![Copyii2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315665/d36c6cf7-5021-5f84-4f89-3462d5280e06.png)

Chromeじゃないだろって？私は[Vivaldi](https://vivaldi.com/ja/)派です。タブスタックは正義。
中身はChromeなので拡張機能も同じように使えます。
７桁の数字入力に制限するバリデーションnumericality


railsガイド
>https://railsguides.jp/active_record_validations.html

参考に行いました

```rb
class Player < ApplicationRecord
  validates :points, numericality: true
  validates :games_played, numericality: { only_integer: true }
end
```


|オプション|働き|表示メッセージ|
|--|--|--|
|greater_than|指定された値よりも大きくなければならない|「must be greater than %{count}」|
|greater_than_or_equal_to|指定された値と等しいか、それよりも大きくなければならない|「must be greater than or equal to %{count}」|
|equal_to|指定された値と等しくなければならない|「must be equal to %{count}」|
|less_than|指定された値よりも小さくなければならない|「must be less than %{count}」|
|less_than_or_equal_to|指定された値と等しいか、それよりも小さくなければならない|「must be less than or equal to %{count}」|
|other_than|渡した値以外の値でなければならない|「must be other than %{count}」|
|odd|trueの場合は奇数でなければない|「must be odd」|
|even|trueの場合は偶数でなければない|「must be even」です。


自アプリに転用
-

```rb:models/item.rb
validates :price, numericality:{only_integer: true, greater_than_or_equal_to: 0, less_than_or_equal_to: 9999999 }
```
WindowsでPythonはじめてみる（VSCode＋拡張機能）簡単でいいね！

# WindowsにPython インストールとかしてみる
機械学習といえば Python といわれたぐらい有名な Pythonですが、わたしはデプロイツール使うのにちょこっと使っていたくらい。ちょいとWindowsで使う機会があったので環境整備から初めてみる。そして少しだけはまった。

## 別途Windows環境を用意した方がいい
Windowsで開発環境を作ると何かとトラブルが発生するし開発→本番環境にデプロイすると途端に動かなくなるので専用のWindows環境を用意するのがよい。いまどきのPCスペックなら Hyper-V 動かしてもストレスないでしょう。
・[Windows10 Hyper-V つかってみてはまった件](https://qiita.com/murachi1208/items/2f00293ec8a9c1b51281])

# Pythonのインストール
Pythonをインストールしてパスを通す。なにも考えずデフォルトで進めると後で少し困ることもあるので注意が必要。実際pip使うのにパスが通ってなかった。

## Python3をインストール
Python2/3あるがPython3をインストールします。なんやらPython2でしか使えないライブラリがあるとか無いとかなのだが最新版（といってもPython3は、2008年にリリース）を使いたいｗ
・python3.9.x インストール([公式ダウンロードページ](https://www.python.org/downloads/))

なにも考えないとデフォルトのインストール先が「ユーザーディレクトリ内のAppData¥Local¥Programs¥Python」となります。"Programs"の下じゃないの？って思うがここ盲点です。
・[Pythonのインストール場所について（Windows）](https://gammasoft.jp/blog/python-install-location/)

## pipがエラー！！パスを追加
黒い窓でpipを叩くとエラーとなる。パスを設定しようと思うがどこ？ってなるのでコマンドで確認してみる。
・[windows10でpipが使えるようになるまで(python3.6)](https://qiita.com/huushihi/items/c7f578bf51c0017c9076)
・[環境変数PATHを設定する](https://www.javadrive.jp/python/install/index3.html)

```text
C:\Users\hage> py --list-paths
Installed Pythons found by py Launcher for Windows
 -3.9-64        C:\Users\hage\AppData\Local\Programs\Python\Python39\python.exe *
```

はげ！！そこにいたか！！（自虐）と下記を環境変数を設定する。

```text
C:\Users\hage\AppData\Local\Programs\Python\Python39\
C:\Users\hage\AppData\Local\Programs\Python\Python39\Scripts
```

##仮想環境を作成
作らなくてもいいが流れで仮想環境を作ります。

```text
C:\Users\hage\Documents>py -m venv C:\Users\hage\Documents\my1

C:\Users\hage\Documents> C:\Users\hage\Documents\my1\Scripts\activate.bat

(my1) C:\Users\hage\Documents\my1>

(my1) C:\Users\hage\Documents\my1> C:\Users\hage\Documents\my1\Scripts\deactivate.bat
```

# 開発環境 VSCode + 拡張機能を入れ環境作成
Eclipse で開発環境を作成するのもありだが VSCode で軽快な環境を作るのがトレンドらしい。とりあえず VSCode 入れ日本語環境にしておく。

## Python拡張機能をインストール
これ入れます。おわり。
lunchとか設定する必要ありますが簡単です。これで実行できデバックもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/00a5950f-59f3-82f1-2457-58e314745124.png)

## オフラインで拡張機能を入れる
ネット接続禁止している環境ではオフラインインストール方法があります。あとよしなに。
・[VSCode拡張機能をオフライン環境でインストールする方法](https://qiita.com/ss_tom_jp/items/5977e4f16d78b8ca7cc8)

## Python 2021.3.680753044 Vsix File Free Download
https://www.vsixhub.com/vsix/12/

# VSCode で Python 実行＆デバック
３分クッキング？あら簡単ｗ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/732aaee9-043b-f040-3fd5-5c2ad8f0d175.png)

・[VSCode｜Visual Studio CodeでPythonを動かしてみよう！](https://usimaru.net/vscode-python-helloworld/)
・[VSCodeでのPython、Jupyter実行環境の構築方法](https://qiita.com/SolKul/items/f078877acd23bb1ea5b5)
・[WindowsのVSCodeでPythonの仮想環境を作る手順](https://qiita.com/Channnel4/items/6a9efa65e5bd51bd532e)

# Pythonってどうよ
コミッターの方と会話すると「はげさん！ Java至高１つの言語で勝負する！！っていうか考えは危険。応用性がなくなるよ」って至極正論いわれましたｗ　ま、当然ですよね。
ちなみに 「Python は馴染みやすい」と思ったら言語ランキング３位だった（2021/3時点）

# 参考にさせて頂いたサイト
・[venv: Python 仮想環境管理](https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2ewinvs)
・[なぜPythonの時代が終わりなのか](https://slofia.com/long-term/why-the-age-of-python-is-ending.html)
【Asterisk】電話回線網で音楽ファイルを流してみた。+音質向上化も。

今回は誰得なんですがAsteriskを使って電話回線網に音楽を流してみました。

電話番号は**【　　】**です。通信量は各自ご負担ください。
**↑サーバー移管した時に消えちゃいました。すみません！**

とはいへ回線交換方式ではなくパケット交換方式のIP電話なんでLinuxがあれば簡単に作れます。
まぁ無理やりそれっぽく言うと擬似的なストリーミングみたいなやつですね。

# 実装方法
簡単にIP電話を構築する際に必要な予備知識を簡単に書いておきます。
## イメージ図
簡単なDFD(DataFlowDiagram)みたいなみたくないな、、、まぁそんなもんです。
ネットワークでのパケットとして伝送するので既存のインフラで完結しコスト削減が図れます
![空白の図 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/e9b3a30c-df94-055e-ab93-61ea165658c6.png)
## VoIPに関するプロトコル
### RTP
IP電話(VoIP)を実現する技術としてパケット送信には、**RTP（Real-time Transport Protocol）**というシンプルなプロトコルが用いられます。
### SIP
SIPとはSession Initiation Protocolの略でシグナリングを行うプロトコルです。
RTPで音を送り合うためには、事前に相手との情報のやりとりが必要で、**「電話」の機能を実現するためには、発信や着信、応答、切断といった「呼制御」と呼ばれる処理が必要**になります。これを「シグナリング」または「呼制御」と呼び、SIPはそれを実現するためのプロトコルです。
なのでIP電話を使うにはFusion IP SMATalkや050plus,050freeなどのSIPプロバイダとの契約が必要です。

※以上の内容は以下の記事にも書いてあります。

https://www.atmarkit.co.jp/ait/articles/0711/16/news146.html

## 流す音楽
次に流す曲を決めます。といってもいろいろ**[めんどくさい権利問題がある](http://www.bgm.or.jp/copyright_qa.html#q75)**ので、今回はアイドルマスターの家庭用版にあったTOWNっていう名前のBGM（俗に言う**てってってー**です）がニコニ・コモンズにあったのでそれを使います。

※二次利用などの利用条件も遵守しています。
![画像_2021-04-17_034628.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/600515e5-ff5f-be1e-844f-9d90fce5adea.png)
# 実践
## 050freeに登録
ブラステルイントラネットさんが提供しているSIPプロバイダの**050free**を今回は使います。発信は有料ですが**受信のみなら無料です。**

https://www.brastel.com/personal/my050/jpn/

SIPアカウント設定でIDとパスワードを取得。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/084f380e-44a7-99b4-22b6-650afcde439f.png)
## 音声データ変換
VoIPでは高音質での送信は難しいです。以下の要件があります。

- サンプリング周波数：**8000Hz**
- 量子化ビット数：**16bit**
- **モノラル**ステレオ不可！

相当音質は悪いですよね…
以下のコマンド一発で上記フォーマットで変換してくれます。

```bash
apt install sox
sox voice.wav -r 8000 -c 1 voice_8k.wav
```

## Asterisk設定
aptでインストールするだけでOKです。

```bash
apt install asterisk
```
### 設定
以下のように設定ファイルを変更します。
sip.confでは接続情報を登録します。UserIDとPasswordは適宜置き換えてください。

```conf:/etc/asterisk/sip.conf
[general]
allowguest=no
disallow=all
allow=ulaw
allow=gsm
nat=auto_force_rport,auto_comedia
; Register
register => UserID:Password@softphone.spc.brastel.ne.jp/100
[brastel]
type=peer
context=brastel
host=softphone.spc.brastel.ne.jp
```

次にextensions.confで着信時の処理を書きます。**PlayBackで音声ファイルを指定する際拡張子は省いてください！**

```bash:/etc/asterisk/extensions.conf
[brastel]
exten => 100,1,Answer
exten => 100,n,PlayBack(/var/lib/asterisk/voice/voice_32k)
```

これで設定完了。あとは

```bash
systemctl restart asterisk
```

で再起動したらつながるはず…です。

## 電話番号はー
**↑サーバー移管した時に消えちゃいました。すみません！**
是非かけてみてください。10年前のXboxアイドルマスター感が味わえると思います。
# 音質向上
とはいえサンプリング周波数8000Hzなので超音質悪いです。
**G.722のような、HDボイスと呼ばれる広帯域コーデック**を使えば音質向上が図れます。
ここではサンプリングレートを8KHz→**32KHz**へ変換し、Asterisk の playback コマンドで流セル用改善します。

```
sox voice.wav -r 32000 -c 1 voice_32k.wav
```

拡張子は`.sln32`にしてさっきと一緒。HD Voiceに対応していれば若干高音質になります。
以上。
【Vue.js】Vueコンポーネントの中ではdataは関数である必要がある。

Vue.jsのコンポーネントについて復習しています。

```html
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.8/dist/vue.js"></script>

<div id="app">
 <my-component></my-component>
</div>
```

```js
Vue.component('my-component', {
  data: {
   number: 12
  },
  template: '<p>いいね({{number}})</p>'
})

new Vue({
 el: "#app",
})
```

これだとtemplateの中に記述されているnumberの12が表示されていない。
![スクリーンショット 2021-04-17 14.01.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628093/c23d4ff0-3a07-582f-9f87-41574a1c61f3.png)

本当は、()のなかに12と表示させたい。

## コンポーネントの中ではdataは関数にする必要がある。
コンポーネントの中ではdataは関数にする必要があります。
だから、記述を少しだけ変更します。

```html
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.8/dist/vue.js"></script>

<div id="app">
 <my-component></my-component>
</div>
```

```js
Vue.component('my-component', {
	data: function(){
  	return {
     number: 12
    }
  },
  template: '<p>いいね({{number}})</p>'
})

new Vue({
	el: "#app",
})
```
dataを関数にして、returnで返したいオブジェクトを記述します。
ここでは以下のように記述を変更しました。

```
	data: function(){
  	return {
     number: 12
    }
```
これで()の中に12という文字が表示されるようになりました。
![スクリーンショット 2021-04-17 14.06.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628093/e9a28cbd-6ee6-ce68-2575-51c4e80675e9.png)
MAMPでApacheが起動しない😇

超初心者の私が、MAMPを利用して環境構築しようとした矢先につまづいたので、記録に残しておきます。
##MAMPをStart
さっそくMAMPのインストールをして、PreferencesからPortを８０＆３３０６に変更した後、サーバー起動ボタンを押したら、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619375/ea54bd68-2a2c-c1cb-7b7a-c2a349940a18.png)
注意表示が出てきました。

「Apache couldn't be started. Please check your MAMP installation and configuration.」

**Apacheが起動できない！！！**

##原因

色々調べてみて、すでにデフォルトのPort番号が使われてるのでPort番号を変えればいい等と出てくるが、私のような初心者が、そもそも重複するほどサーバーを使っていないはず、、、

念のため、ブラウザで`http://localhost`をweb検索してみると、
**元気いっぱいに It Works! の状態でした。（笑）**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619375/094e205f-5003-ec81-9323-2402ebd81828.png)


起動させた記憶は全くないが、すでにApacheがデフォルトのPortで起動しており、MAMPが起動できない状態であったと判明しました。

ターミナルにて、すでに起動中のApacheを停止しました。

```
$ sudo apachectl stop
```
##MAMP起動
この後、再度MAMPのサーバー起動ボタンを押したら、正常に繋がりました！

##結論
MAMPでApacheが起動できない問題を解決できました。
学んだことは、
1.MAMPはPortは重複して利用しない。
2.思い込みせず確認。
です。
AtCoderに初心者が初挑戦する

おすすめされたこのぺージの問題を挑戦していきたいと思います。

https://qiita.com/drken/items/fd4e5e3630d0f5859067#5-%E9%81%8E%E5%8E%BB%E5%95%8F%E7%B2%BE%E9%81%B8-10-%E5%95%8F

ほとんど初心者なので、試行錯誤したこーどすべてをのせていきたいとおもいます。
競技プログラミング1日目！
1か月じっくりやってビギナーコンテストをクリアできるようになるのが目標です！
今回は三問やっていきます。
今日（21/04/17）のビギナーコンテストは腕試しとして挑戦したいと思っています。
来月にはどのくらい延ばせるのかがんばります・
#1問目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764631/8b58038a-5814-0172-74fe-9661a1f70329.png)
これは基本の問題なのでしょう。とかんじました　

```python
a,b =map(int ,input().split())
#print(a,b)
#掛け算
c =a * b 
if c % 2 == 0:
  print("Even")
else:
  print("Odd")
```


##2問目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764631/dd1ebaa2-0476-19e7-46c9-ab348bac7afd.png)
素直に一つずつ確かめていきました。

```python
s =input()
counter = 0
if s[0] == str(1):
  counter =+ 1
if s[1] == str(1):
  counter +=1
if s[2] == str(1):
  counter +=1
 
print(counter)
```

##3問目
問題文
黒板に N 個の正の整数 
A,...,N が書かれています．

すぬけ君は，黒板に書かれている整数がすべて偶数であるとき，次の操作を行うことができます．

黒板に書かれている整数すべてを，
2で割ったものに置き換える．
すぬけ君は最大で何回操作を行うことができるかを求めてください
というものでした。

自分の中では　繰り返し（リストの中身をすべて2で割る→もし余りがなければもう一回、余りが出れば終わり）という流れを描いていました。
いざやってみるとなんかうまくいかずに試行錯誤しました
割り算とあまりの関数を作ってあげてそこに当てはめていく感じで解きました

```python 
import math
n = input()
a = list(map(int, input().split()))
count=0
#print(n,a)
def double(n):
  return n / 2
def amari(n):
  return n % 2
data1=[]
data2 =[]
data2 = list(map(amari,a))
#print(data2)
data3=[]
data3=list(map(double,a))
#print(data3)
#print(all(elem % 2 == 0 for elem in a))
#for i in a:
#for i in a　だと試行数がa以上のものができなかった（？）
i=0
while i < 8:
#i < 10 にするとREで謎のエラーが出た。
    if all(elem % 2 == 0 for elem in a):
      a=list(map(double,a))
#      print(a)
      count =count + 1
#      print(count)
    else:
      count=count
      break

#print(a)
print(count)
```

いろいろ試行錯誤しているのが読み取れると思います。
１，２問目と違って一気に難しくなったと感じました。
コードを書くのに一時間くらいかかってます。
メモリ CPU ストレージ ざっくり理解

# 概要

メモリ、CPU、ストレージについてよくわからなかったのでまとめてみました。
ざっくり理解。

## メモリ
メモリ使用量が一時的に多くなることはあるが、ある作業終わると使用量は減る

### 例えるならキッチン
シェフがキッチンで料理する
料理する際はキッチンは使われるが料理しない時は使わない



## CPU
メモリと同じく、ある作業が終われば使用量は減る

### 例えるならシェフ
キッチンで料理するシェフ
料理する間はいっぱい動くけど料理作り終わったらやることないので動かない


## ストレージ
メモリの使用量やCPUの使用量とストレージの容量は比例しない
ファイルが多すぎるとストレージ容量が減るため動作が遅くなる

### 例えるなら冷蔵庫
冷蔵庫がパンパンだと何も中に入れられない
パンパンな冷蔵庫から食品を出そうとすると、出しづらい、時間がかかる
CentOS 8 Stream の Emacs 26.1 で package-refresh-contents できなかった。

## 経緯

CentOS 8 Stream に Emacs 26.1 が DNF でインストールできる。

```shell
$ sudo dnf info emacs-nox
Last metadata expiration check: 0:06:54 ago on Sat 17 Apr 2021 12:17:36 PM JST.
Installed Packages
Name         : emacs-nox
Epoch        : 1
Version      : 26.1
Release      : 5.el8
Architecture : x86_64
Size         : 38 M
Source       : emacs-26.1-5.el8.src.rpm
Repository   : @System
From repo    : appstream
Summary      : GNU Emacs text editor without X support
URL          : http://www.gnu.org/software/emacs/
License      : GPLv3+ and CC0-1.0
Description  : Emacs is a powerful, customizable, self-documenting, modeless text
             : editor. Emacs contains special code editing features, a scripting
             : language (elisp), and the capability to read mail, news, and more
             : without leaving the editor.
             :
             : This package provides an emacs binary with no X windows support for running
             : on a terminal.
```

とりあえず, [Getting Started - MELPA](https://melpa.org/#/getting-started) を参考に設定ファイルを作成する。

```elisp:~/.emacs.d/init.el
(require 'package)
(add-to-list 'package-archives
             '("melpa-stable" . "https://stable.melpa.org/packages/") t)
;; Comment/uncomment this line to enable MELPA Stable if desired.  See `package-archive-priorities`
;; and `package-pinned-packages`. Most users will not need or want to do this.
;;(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
(package-initialize)
```

ところが, `M-x package-refresh-contents` しても, `Failed to download ‘melpa’ archive.` と表示される。


## 結論

2021-04-17 時点で最新の Emacs 27.2 をインストールすることで通るようになる。
なお, なぜ 27.2 で通るようになるのかは未調査。


## 対処

1. 不要になった Emacs 26.1 は削除する。

    ```shell
    $ sudo dnf -y remove emacs-nox
    ```

1. とりあえずはビルドが通れば良いので, 開発ツールを一通りインストールする。
   個別に必要なパッケージもインストールする。

    ```shell
    $ sudo dnf -y group install development
    $ sudo dnf -y install gnutls-devel ncurses-devel
    ```

1. ソースコードをダウンロードし, 展開する。

    ```shell
    $ curl -LO https://ftp.iij.ad.jp/pub/gnu/emacs/emacs-27.2.tar.xz
    $ unxz -c emacs-27.2.tar.xz | tar -xpf -
    $ cd emacs-27.2; pwd
    ```

1. ビルドする。

    ```shell
    $ ./configure
    $ make
    $ sudo make install
    ```

1. この時点ではパスが通らないので再ログインし, Emacs を起動,
   改めて `M-x package-refresh-contents` すると `Package refresh done` と表示される。


## 付録: 個別パッケージ未インストール時に `./configure` で表示されるメッセージ

### gnutls-devel 未インストールの場合

```shell
configure: error: The following required libraries were not found:
     gnutls
Maybe some development libraries/packages are missing?
To build anyway, give:
     --with-gnutls=ifavailable
as options to configure.
```


### ncurses-devel 未インストールの場合

```shell
configure: error: The required function 'tputs' was not found in any library.
The following libraries were tried (in order):
  libtinfo, libncurses, libterminfo, libcurses, libtermcap
Please try installing whichever of these libraries is most appropriate
for your system, together with its header files.
For example, a libncurses-dev(el) or similar package.
```


どっとはらい。
ORACLE MASTER Silver SQL 2019 合格に関する手記

##追記しました。
bronze DBAの学習をはじめた結果、的確とは言い難い内容に気付いたので、追記しました。
(2021年4月28日)

##はじめに
「ORACLE MASTER Silver SQL 2019」に合格したので、
学習方法と使用した教材について書いておきます。

まだ2020年1月に導入されたばかりの資格で、
参考書や問題集も発売されていません(2021年4月17日現在)。
そんな状態で同資格を目指している方の参考になれば幸いです。

合格ラインが63%のところ、正答率71%での合格だったので、ギリギリですが。

##学習期間
前提として、MySQLを使用して簡易なwebアプリを作成したことがありました。

そのうえで、42時間くらい勉強しました。

##学習方法と学習教材
使用した教材は以下の3つです！
 
1. オラクルマスター教科書 Bronze Oracle Database 12c SQL基礎
2.最強WEB問題集Oracle Master 12c Bronze SQL基礎(1Z0-061) [Ping-t]
3.ORACLE MASTER Silver SQL 1Z0-071-JPN 受験準備ガイド

まずは教科書(黒本)を一通り読みました。
その後はPing-tをひたすら反復です。
試験前にはこの状態でした。
![FAE31612-936C-4B5A-A5EA-006FECD6137F.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/887728/8f543d37-8153-15ed-b860-724e79280bcf.jpeg)

前項の通り、ORACLE MASTER Silver SQL 2019は新体系の資格です。
そのため、今のところ試験番号1Z0-071-JPNに対応した参考書は存在しません(2021年4月17日現在)。
 
試験で出題される範囲が旧体系試験である12c SQL基礎（1Z0-061-JPN）よりも広く、
12c SQL基礎（1Z0-061-JPN）の範囲に加えて、
ユーザー・アクセスの制御、異なるタイム・ゾーンでのデータの管理などの項目が追加されています。

そのため、旧体系の試験の教材や、Ping-tのみで合格を目指すのは至難でしょう。
そこで登場するのが、ORACLE MASTER Silver SQL 1Z0-071-JPN 受験準備ガイドです。
Oracleの配布しているPDFですね。
新たに追加された範囲について簡易な解説や例題が掲載しれています。
これを元に解説や例題に登場する不明な単語を調べていきました。

##感想
Ping-tの12cの問題を解いていると、
「なんだ、12cでも索引やシノニムの問題があるじゃないか」
と安心してしまったのですが、実際に出題される内容は大きく異なります。

SQL SELECT文を使用したデータの取得といったSQLの基本的な内容も1Z0-071-JPNの範囲ではあるのですが、
実際にはそれ単体を問う問題は存在せず、SELECT文を前提とした集合演算子の問題が数問出題された程度です。

Ping-tでの学習は、「データ操作」「DDL文」「スキーマ・オブジェクト」に重点を置くべきでした。
この三項目は旧試験の参考書やPing-tの内容では不足なので、
さらに詳しく自身で学習しておくことで、もっと余裕をもって試験に臨めたと思います。

##まとめ
特別な事情で、この資格をどうしても今取りたいというのでなければ、
対策問題集などが出てから学習するのが無難かと思います。

##追記
先にORACLE MASTER Bronze DBAの範囲を勉強されることを強くオススメします。
何故なら、1Z0-071-JPNで問われる索引やビューの知識は12cのSQLよりもDBAの範囲だからです。
先にこちらを学習していれば、もっとスムーズに合格できたと思います。
【AWS】アベイラビリティゾーン(AZ)とエッジロケーションを理解する

#プログラミング勉強日記
2021年4月17日

#アベイラビリティゾーン(AZ)とは
　リージョンの中に複数の独立したインフラ拠点が存在し、それをアベイラビリティゾーン(AZ)という。
　1つのリージョンには2つ以上のAZが存在する。同じリージョン内のAZ同士は低レイテンシーのリンクで接続されている。サービスによっては、AZをまたいで設置できるものもあれば、AZ内でしか使えないものもある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642821/d7988110-cb4e-4613-3b4e-b3b848cdedf1.png)

　AZが物理的なデータセンターになっていて、1つのデータセンターには数千のサーバーを収容している。
　AZにある物理的インフラを仮想化してユーザにインフラ機能をパーツとして分けて提供している。なので、1つのAZでも複数のEC2インスタンスに分けられる。

　<b>1つのAZのみでAWSサービスを使用するとデータセンターの停止によってサービスが停止する可能性もある。</b>そのため、1つのリージョンに2つのAZから使用するのを推奨している。複数のAZでまたぐと物理的な耐久性が向上する。しかし、1つのAZでしか共有されない設定が多くあること、多くはAZ間で連携するための設定が必要なことから、システム間の連携や共有が制限されてしまうので注意が必要。


#エッジロケーションとは
　エッジロケーションは、キャッシュデータなどを利用するときにさらに小さなエンドポイントになる拠点のこと。
　エッジロケーションを使ってコンテンツ配信やトラフィック制御のルーティングを効率的に実施することができる。ユーザの近くに多くあるほど効率的に行えるので、世界中に200か所以上もある最も数の多いロケーションである。
　CloudFrontやLambdaエッジ、Route53のDNS機能がエッジロケーションを使って実行されている。
XamppでのError: Apache shutdown unexpectedly.解消法


Xamppでローカルサーバー立てて開発してたのに、再起動後以下のエラーが発生。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267142/b3ea61e4-a16d-b9df-c8af-071a51c59ca0.png)

調べてみても解決しづらかったので、だれかの助けになればと思い、ここに残します。
予期せぬ終わり方をしていくつかのファイルが消えた？と推測しました。
※実行する際はフォルダ毎バックアップを取っておいてください。
また、記憶を頼りに書いているので、抜け漏れがあるかもしれません。
参考程度にしてください。

以下の手順。
①xamppディレクトリにあるxampp_start.exeでエラー内容の確認。
恐らく、どこかのファイルの〇行目でエラーみたいなことが分かります。
私の場合は、httpd-xampp.conf17行目のphp8ts.dllがないと怒られていました。

②エラー個所の確認
確認してみると、確かにロードしてる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267142/c3a4fbfe-73e3-4a7b-5e79-d00f8ec7293f.png)

③php8を再インストール
下記urlのVS16 x64 Thread Safeをダウンロード。その中にphp8ts.dllもあると思います。
https://windows.php.net/download#php-8.0


④php8ts.dllをxampp/phpフォルダの中に入れて実行してください。


⑤ほかのphp.exeなどのファイルも消えていたので、先ほどダウンロードしたものから引っ張ってきました。

⑥xamppを再起動し、再度実行すると、起動しました。　が、mysqliがない、などと怒られていました。 (mysqlとの連携もしていたので)

⑦そこで、C:\xampp\php\extの中に先ほどダウンロードしたフォルダのext内のファイルを置き換えずにがさっと入れ込みました。その中にphp_mysqli.dllとかがあったので。

⑧xamppを再起動してみると、繋がりました。



メモの乱書きなので、参考程度にしてください。
rogstic回帰　softmax回帰　mnist

シグモイド関数

```python
def sigmoid(x):
    # 単純な実装
    # return 1 / (1 + np.exp(-x))
    
    # expのoverflow対策を施した実装
    # x >=0 のとき sigmoid(x) = 1 / (1 + exp(-x))
    # x < 0 のとき sigmoid(x) = exp(x) / (1 + exp(x))
    return np.exp(np.minimum(x, 0)) / (1 + np.exp(- np.abs(x)))
```

```python
# ORのデータセット
x_train_or = np.array([[0, 1], [1, 0], [0, 0], [1, 1]])
y_train_or = np.array([[1], [1], [0], [1]])
x_valid_or, y_valid_or = x_train_or, y_train_or
x_test_or, y_test_or = x_train_or, y_train_or

# 重み (入力の次元数: 2, 出力の次元数: 1)
W_or = np.random.uniform(low=-0.08, high=0.08, size=(2, 1)).astype('float32')
b_or = np.zeros(shape=(1,)).astype('float32')
```
```python
# logの中身が0になるのを防ぐ
def np_log(x):
    return np.log(np.clip(a=x, a_min=1e-10, a_max=1e+10))
```

```python
def train_or(x, y, eps=1.0):
    """
    :param x: np.ndarray, 入力データ, shape=(batch_size, 入力の次元数)
    :param y: np.ndarray, 教師ラベル, shape=(batch_size, 出力の次元数)
    :param eps: float, 学習率
    """
    global W_or, b_or
    
    batch_size = x.shape[0]
    
    # 予測
    y_hat = sigmoid(np.matmul(x, W_or) + b_or) # shape: (batch_size, 出力の次元数)
    
    # 目的関数の評価
    cost = (- y * np_log(y_hat) - (1 - y) * np_log(1 - y_hat)).mean()
    delta = y_hat-y #(Hint: y_hat, yを使う) # shape: (batch_size, 出力の次元数)
    
    # パラメータの更新
    dW = np.matmul(x.T,delta)/batch_size# WRITE ME (Hint: x.T, delta, batch_sizeを使う) # shape: (入力の次元数, 出力の次元数)
    db = np.matmul(np.ones(shape=(batch_size,)),delta)/batch_size# WRITE ME (Hint: np.ones, delta, batch_sizeを使う) # shape: (出力の次元数,)
    W_or -= eps * dW
    b_or -= eps * db

    return cost

def valid_or(x, y):
    y_hat = sigmoid(np.matmul(x, W_or) + b_or)
    cost = (- y * np_log(y_hat) - (1 - y) * np_log(1 - y_hat)).mean()
    return cost, y_hat
```


```python
for epoch in range(1000):
    x_train_or, y_train_or = shuffle(x_train_or, y_train_or)
    cost = train_or(x_train_or, y_train_or)
    cost, y_pred = valid_or(x_valid_or, y_valid_or)

print(y_pred)
```

ソフトマックス関数

```python
def softmax(x):
    x -= x.max(axis=1, keepdims=True) # expのunderflow & overflowを防ぐ
    x_exp = np.exp(x)
    return x_exp / np.sum(x_exp, axis=1, keepdims=True)
```
MyappからWidgetまでの基本構造、StatelessWidget と StatefullWidgetの違い　flutter

flutterの基本構造はこのサイトを見ると分かりやすいです。

https://www.hanachiru-blog.com/entry/2020/04/29/120000#%E6%A7%8B%E9%80%A0

つたない理解ですが、簡単にまとめると
Myapp
-MaterialApp（デザインの枠組み）
--Scaffold（デザインの枠組み）
---Center（中央に配置）
----text（テキストを表示）
の順に並んでいます。

MyAppの中には StatelessWidget あるいは StatefullWidget を入れるのですが、この違いについて書きます。下の画像はUdacityのflutter講座の中に出てきて、StatelessWidget と StatefullWidgetの違いについて説明しています。

flutterの講座
https://classroom.udacity.com/courses/ud905

StatelessWidgetは、 'アプリの使用中に状態が変わらない' もの（ボタンを押して色が変わるなど）、StatefullWidgetは 'アプリの使用中に状態が変わる' ものに使われます。Udacityの動画がわかりやすいので見てみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1335172/3a948526-d4ad-ba7c-f0cb-c160834026e3.png)
【Python】株価チャートが似ている銘柄をスクリーニングする


こんにちは，藤野です．

普段は[こちら](http://optrip.xyz/)で投資やプログラミングに関する記事を書いています．

今回は，「株価チャートの形が似ている銘柄をスクリーニングする方法」について説明します．

#動機

形が似ている銘柄をスクリーニングするメリットとして，

・形が同じような銘柄は避け，分散投資に役立てる
・形が同じような銘柄を買い，ひとつの個別銘柄の不調を補う
・形が同じような銘柄の共通点を分析することで投資に役立てる

などがあります．

例えば，コロナショックで大暴落した銘柄の株価推移と似ている銘柄スクリーニングすることで，どんなセクターで暴落が起きたのかを分析することができます．

#「形が似ている」の定量化
形の似ているチャートを抽出するには，「形が似ている」を定量化しなければなりません．

方法は色々あると思いますが，今回は株価チャートのスケールを0~1に正規化した後，MAEで比較する方法で行います．

この部分については，以下の記事で説明しています．

https://qiita.com/Fujinoinvestor/items/f391f35c46afe9639496

#形が似ている銘柄をスクリーニングする

Pythonコードおよびその説明は以下の記事で説明しています．

https://optrip.xyz/?p=3473

この記事にあるコードを実行すると，例えばUAL（ユナイテッド・エアライン・ホールディングス）のチャートと似ている銘柄をスクリーニングすると，以下のような結果が得られます．

```
       MAE(類似度)
銘柄             
ALK    0.117049
BA    0.0786378
BXP     0.11543
CCL    0.142564
CNP    0.119631
COP    0.129644
DAL   0.0879942
XOM    0.120234
FRT   0.0716615
HST    0.137468
L      0.138638
MTB    0.143658
NCLH  0.0890963
OMC    0.125869
OKE    0.101436
PSX    0.139819
REG   0.0967346
RCL    0.109596
SPG   0.0745186
USB     0.14598
UAL           0
VNO   0.0915754
WFC    0.140196
```

このうち，例えば形が似ていると判定されたWFC（ウェルズ・ファーゴ）とUALを比較すると，以下のようになります．

![wfc-ual.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1298289/93f7b997-c836-3171-712a-e9f7b2497957.png)

どちらもコロナショックで大きく下落した銘柄ですね．

形が似た銘柄をスクリーニングするソースコードは以下

https://optrip.xyz/?p=3473

データベースにキャッシュしてスクリーニングを高速化する方法は以下

https://optrip.xyz/?p=4318
bash で関数を作成して使用

bash で関数を作成して使用します。

よく bash でエイリアスを貼りますが、引数が複数あったり、拡張子を変更したい場合はエイリアスだと難しいですよね。

こういう時は、関数を作成して、使用するのが良いみたいです。

例として、音声ファイルを mp3 に変換するものを出しておきます。

まずは .bashrcの編集

````bash
gedit ~/.bashrc ;
````

次に、ファイルの一番下などに下記文を追加します

````bash:.bashrc
2mp3 () {

  # ファイルの存在のチェック
  if [ -f ${1} ]; then

    # ファイル名の拡張子抜きを取得
    BASE_NAME=${1%.*}

    # ffmpeg で mp3 に変換
    ffmpeg -i ${1} -vn -ac 2 -ar 44100 -ab 256k -acodec libmp3lame -f mp3 $BASE_NAME.mp3

  else

    # ファイルが見つからない場合の処理
    echo "${1} not found."
    echo "please retry input and check file name :-)"

  fi

}
````

####使い方
まず、.bashrc を変更したので有効化します（ターミナルやマシンの再起動でも大丈夫です）。

````bash
source ~/.bashrc ;
````

実行

````bash
2mp3 mymusic.opus ;
````

これで mymusic.mp3 っというファイルができあがるかと思います。
ローカルblast 基本コマンド

# Blast+
　ローカルBlastはweb版と比較して動作が早いというメリットがあります。また、web版と比較してとっつきにくい印象がありますが、基本コマンドを理解していれば使いこなすことができると思うのでそれらを羅列しました。


##基本コマンド
### データベースを作成する

```
makeblastdb -in データベース名 -dbtype prot -hash_index
```
### 検索系
- 検索(核酸)

```
blastn -db データベース名 -query 入力ファイル -out 出力ファイル
```
- 検索(アミノ酸)

```
blastp -db データベース名 -query 入力ファイル -out 出力ファイル
```

- 検索(核酸から翻訳したアミノ酸)

```
tblastx -db データベース名 -query 入力ファイル -out 出力ファイル
```
Stored XSS

![hoge.jpeg<img](http://hoge/\"> src=1 onerror=alert(1)>

良さげな画像を見つけたので貼っておきます。

![IMG_C88B85D3ED8F-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1336971/062f587b-d725-d63e-74c4-29ff8ae53cfe.jpeg)
rails db:migrate をしたらMysql2::Error: Table 'テーブル名' doesn't exist と怒られる問題

## 何が起こったのか？
migrationファイルを追加していつものように rails db:migrate を叩いたところ、以下のように怒られた。

```
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Table 'Mysql内のテーブル名' doesn't exist
<略>
Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'Mysql内のテーブル名' doesn't exist
```
## ActiveRecord::StatementInvalidとは？
簡潔に言えば「記述が違うぞ💢」ということ。

※Mysql内のテーブル名は % rails db を叩いてMysqlに入り、SHOW TABLES; で確認できます。
```
mysql> SHOW TABLES;
```
## 確認すべきところ

・ migrationファイルのテーブル名
→ タイポしていないかどうか（ex:スペルミスや大文字になっていないかなど）

ちなみに自分の場合はsorcery_coreのmigrationファイル内の「create_table :users」が大文字になっていたことが原因でした。

##### 変更前
```
class SorceryCore < ActiveRecord::Migration[6.0]
  def change
    create_table :Users do |t|
      t.string :email,            null: false
      t.string :crypted_password
      t.string :salt

      t.timestamps                null: false
    end

    add_index :users, :email, unique: true
  end
end

```
##### 変更後
```
class SorceryCore < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :email,            null: false
      t.string :crypted_password
      t.string :salt

      t.timestamps                null: false
    end

    add_index :users, :email, unique: true
  end
end
```

### タイポに気をつけて
初歩的ではあるものの、意外と気付き難いが故に根深い問題の１つではないでしょうか？
こまめに確認して、どこに問題があるのかを探しやすくすることが大切だと痛感しました。
初めてのRaspberry Pi Pico ㉞ Adruino IDE 2.0 ベータ５でLチカ

 Adruino IDE 2.0 ベータ５でPicoがサポートされました。

###Adruino IDE 2.0 ベータ５のインストール
　https://www.arduino.cc/ に行きます。Softwareのページに入ります。スクロールしていきます。

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/717b99dc-b65c-7723-2193-ac632d67887a.png">



　ダウンロードしてインストールします。
###セットアップ
　デバイスマネージャを開き、PicoをUSBケーブルで接続し、COMポートが現れることを確認します。COM7でした。

<img width="250" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/b6a9842a-99bd-1e5c-b5a7-90f62806f350.png">



　Adruino IDE 2.0 ベータ５を立ち上げ、Toolsからボードマネージャを起動します。
　検索欄にpicoと入力し、出てきたPicoボードをINSTALLします。

<img width="550" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/c96935f8-08e1-b405-bfe1-f19cd19fcce4.png">



　上部にあるボードの選択からSelect Other Board & Portを起動します。検索欄にpicoと入れます。PicoボードとCOM7を選択します。

<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/56420e79-c0e2-8ba8-a1b0-fb9473249c4b.png">




###Blinkを読み込んで実行
FileからサンプルのBlinkを読み込み、コンパイル、書き込みのアイコンの「右矢印」をクリックします。
Lチカが始まります。特にボタンのON/OFFやケーブルの抜き差しは不要でした。
<img width="650" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/913375ee-d0fa-e985-8eb4-e90d1e6e4611.png">
JetsonXavierでdocker-composeを使用する。apt不使用、pip使用

Jetson上でのdocker-composeの入れ方です。

公式のcurlを使用したもので入れることができなかったため、pipで入れました。

以下のとおりです。

# インストール手順
```
$ sudo apt update
$ sudo apt install python3-pip
$ sudo apt install build-essential libssl-dev libffi-dev python3-dev
$ pip3 install -U pip
$ sudo pip3 install docker-compose
```
JetsonXavierでYOLOv5+DeepSortを動かす。Docker使用

#  元イメージ
元イメージには、nvidiaが用意しているイメージを使用します。
https://ngc.nvidia.com/catalog/containers/nvidia:l4t-pytorch

```dockerfile
FROM nvcr.io/nvidia/l4t-pytorch:r32.5.0-pth1.7-py3
```

# apt install
必要なパッケージをインストールします。
xtermは、docker上の表示をローカルに表示するために必要です。
yoloの場合、Docker上の推論結果の画面をローカルで表示するために使います。

```dockerfile
FROM nvcr.io/nvidia/l4t-pytorch:r32.5.0-pth1.7-py3

RUN apt update \
&&	apt install -y \
	sudo \
	vim \
	xterm
```

# pip install
Yoloで必要なパッケージをインストールします。
ここで注意が必要で、yoloのrequirement.txtをそのままインストールすると、torchやtorchvisionのバージョンが崩れてしまいます。Nvidaiのイメージにこれらはすでに含まれているため、txtから抜きました。
また、pipをアップグレードする必要があります。


```dockerfile
FROM nvcr.io/nvidia/l4t-pytorch:r32.5.0-pth1.7-py3

RUN apt update \
&&	apt install -y \
	sudo \
	vim \
	xterm

RUN pip3 install -U pip

RUN git clone https://github.com/kyasby/jetson-yolo.git requirements

WORKDIR requirements

RUN pip3 install -r requirements.txt
```

# おわりに
さんざん苦労しましたが、以上のみで動きます。
https://github.com/kyasby/jetson-yolo.git
必要であれば、レポジトリそのままお使いもいただけます。


# 注意
--runtime nvidiaと指定しないと、import torchでエラーが出ます。
dockerの起動コマンドが長いため、docker-composeを使用しました。
install方法はこちら。
https://qiita.com/ryryry/items/b1d4b8604c71f638fe06
プログラミングスクールに通い始めて、リタイアを考えている人向けの記事

この記事は、以下のブログに移動しました。

http://yumekalog.com/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%82%b9%e3%82%af%e3%83%bc%e3%83%ab%e3%81%ab%e9%80%9a%e3%81%84%e5%a7%8b%e3%82%81%e3%81%a6%e3%80%81%e3%83%aa%e3%82%bf%e3%82%a4%e3%82%a2/
ITパスポート 【ストラテジ系】 1.企業と法務-①企業活動

# 1-株式会社と経営理念

`企業活動`・・・商品やサービスを作って売り、お金を稼ぐこと。

### 企業の形態
* `株式会社`・・・**株主**にお金を出してもらって事業を運営する会社。**経営者**、**社員**、**株主**(株式の所有者)で構成される。
* 合同会社
* 合資会社
* 合名会社

`株式`・・・経営者が株主に対して渡す、出資してもらったことを証明するための証明書。

`経営理念`・・・企業活動の指針。**会社の存在意義**とも言う。
`ビジョン`・・・会社が目指す将来の姿。
`経営戦略`・・・ビジョンを実現するための具体的な行動計画。


# 2-企業の責任

`株主総会`・・・株式会社の**最高意思決定機関**。

`CSR`・・・**企業の社会的責任**。
※*Coporate Sotial Responsibility*

### CSRの関連用語
* `グリーンIT`・・・ITを使った環境保護。
* `ダイバーシティ`(**多様性**)・・・様々な人材を活用することで生産性を高めようとする考え方。
* `ソーシャルビジネス`・・・環境問題などの社会的課題を、ビジネスの手法を活用して解決していく企業活動。

* `SDGs`・・・持続可能な世界を実現するための17の国際目標。
※*Sustaniable Development Goals*

`ステークホルダ`・・・企業と利害関係にある人。


# 3-経営資源

4大経営資源・・・**ヒト**、**モノ**、**カネ**、**情報**

`HRM(人的資源管理)`・・・ヒトを経営資源の１つと考え、人的資源を有効活用すること。
※*Human Resource Managemant*

### 訓練・教育方法

* `OJT`・・・実務を通じた教育訓練。
※*On the Job Training*

* `Off-JT`・・・外部セミナーなどの、仕事を離れて行われる教育訓練。
※*Off the Job Training*

* `HRテック`・・・テクノロジーを活用した手法。
・`e-ラーニング`・・・パソコンやインターネットなどのITを使った学習方法。
・`アダプティブラーニング`・・・その生徒に最も適した学習内容を提供する教育手法。ITを用いて客観的なデータに基づいて学習の最適化を行う。


# 4-経営組織

`経営組織`・・・ヒトの集まり。

`組織形態`・・・経営組織の形態のこと。
* `職能別組織(機能別組織)`・・・業務を専門的な機能に分けて、各機能を単位として構成する組織。社員の専門性を生かすことができる。
* `事業部制組織`・・・「**製品別**」「**顧客別**」「**地域別**」などを単位とし、事業の**利益責任**を持つように構成する組織。**意思決定権**は事業部に持たせる。
事業・・・複数の業務のこと。
業務・・・手作業とシステムのこと。
システム・・・ハードウェアとソフトウェアのこと。

* `マトリックス組織`・・・社員が職能部門と事業部門の両方に所属する組織。
* `プロジェクト組織`・・・各部門から専門家を集めて結成する一時的な組織。
* `持株会社`・・・子会社の株式を保有する親会社。企業の買収や合併がしやすい。

### 経営陣の役職名
* `CEO(最高経営責任者)`・・・経営の最高責任者。
※*Chief Executive Officer*

* `CIO(最高情報責任者)`・・・情報システムを統括する最高責任者。
※*Chief Information Officer*


# 5-業務分析と業務計画

* `パレート図`・・・**棒グラフ**と**折れ線グラフ**(累積比率)を組み合わせたグラフ。重要な項目を一目で確認できる。
* `ABC分析`・・・データをパレート図で表し、重要度でランク付けする分析手法。
* `ヒストグラム`・・・区間ごとのデータの数を棒グラフで表したグラフ。横軸は連続した項目になる。
* `レーダチャート`・・・放射状の図。データ全体のバランスを見ることができる。
* `散布図`・・・２種類のデータの関係性を表す図。相関関係は「**正の相関**」「**負の相関**」「**相関なし**」の３つ。
* `回帰分析`・・・過去を分析して、将来を予測する手法。


# 6-経営者の意思決定と問題解決手法

* `期待値`・・・確率的に決まる平均値。
求め方→**(値×確率)の総和**

* `ブレーンストーミング`・・・複数人でアイディアを出し合う方法。


# 7-損益分岐点

### 会計用語
* `売上`・・・商品やサービスを販売して得た金額。
* `費用`・・・商品やサービスを売るのに必要な金額。
・`変動費`・・・販売数に比例して増える費用。(例：材料費)
・`固定費`・・・販売数に関係なく発生する費用。(例：家賃、人件費)

* `利益`・・・売上から費用を差し引いた金額。

`損益分岐点`・・・売上と費用が等しくなる売上高(または販売個数)。
　　　　　　　　　グラフ→売上の線と費用の線が交わる点。


# 8-財務諸表と６つの利益

`財務諸表`・・・ステークホルダに対して、経営成績を報告するための書類。
・`貸借対照表(バランスシート)`・・・ある時点の会社の全財産が記載された表。**総資産=総資本**になる。
・`損益計算書`・・・会社の利益が書かれた書類。
・`キャッシュフロー計算表`・・・会社の現金収支が記録された書類。

### 貸借対照表
* `総資産`・・・会社が持っている全財産。

* `総資本`
 ・`他人資本`(負債)・・・返済が必要なお金。
 ・`自己資本`(純資産)・・・返済する必要がないお金。**自己資本率(%)=自己資本÷総資本×100**
　・資本金・・・株主が会社に出資した金額。

### 損益計算書
* 売上高・・・商品を売って得た金額。
* 売上原価・・・商品を作るための費用。
* `売上総利益`・・・**売上高-売上原価**
* 販売費及び一般管理費(販管費)・・・商品を販売・管理するための費用。
* `営業利益`・・・本業で稼いだ利益。**売上総利益-販管費**
* 営業外収益・・・副業で稼いだ収益。
* 営業外費用・・・本業以外でかかった費用。
* `経常利益`・・・本業と副業を合わせた儲け。**営業利益+営業外収益-営業外費用**
* 特別利益・・・臨時の利益。
* 特別損失・・・臨時の損失。
* 税引前当期純利益・・・税金を引く前の会社の利益。
* 法人税等・・・税金を払うための費用。
* `当期純利益`・・・全ての利益から、全ての費用を引いた金額。最終的な儲け。


### キャッシュフロー計算表
* `営業活動`によるキャッシュフロー：本業に関わるお金の残高を計算する。
* `投資活動`によるキャッシュフロー：設備投資や、株・債券の売買後の残高を計算する。
* `財務活動`によるキャッシュフロー：資金調達に関わるお金の残高を計算する。

黒字倒産・・・利益が出ているのに倒産すること。売掛金(未回収の代金)を回収するまでの間に借金の返済が行えず、資金が不足してしまうために起こる。

`ROE(自己資本利益率)`・・・自己資本に対して、どれだけの利益を出したかを表す指標。**当期純利益÷自己資本×100**
※*Return On Equity*
Node.jsのインストール方法

はじめまして。seki_miと申します。
本日は初投稿ということで簡単なものからアウトプットをしていきたいと考え昨日学習したNode.jsのインストール方法について説明させて頂きたいと思います。

#前提
・Mac 
・OS Catalin以降

#Node.jsとは？

まずNode.jsとは何か。
簡単にJavaScriptをサーバーサイドで動かせるもの。他にもPHP、Rubyとありますが、今どきのモダンなフロントエンド環境を構築する上でNode.jsを使うため、バックエンドエンジニアのみならずフロントエンドエンジニアの人も押さえておくべきスキルになります。

#Node.jsインストール方法

インストール方法は2つあり、

#### 1.Node.jsの公式サイトからzipファイルを落としてダウンロード

#### 2.nodebrewを使う

です。

どちらが良いかというと2のnodebrewを使う方法で、理由としてはNode.jsをインストールかつバージョン管理ができるツールだからです。1の方法だと数あるバージョンの中で用途により使い分ける必要があり都度サイトにアクセスしてzipを落としてインストールするという手間が発生し非常に効率が悪くなります。

#nodebrewをインストールする

まずは<a href="https://github.com/hokaccha/nodebrew">nodebrewの公式サイト</a>にアクセスしてください。

スクロールしていくと下記のようなコードがあるのでコピーしてターミナルに貼り付けて実行して下さい。

```
$ curl -L git.io/nodebrew | perl – setup
```

これは「HTTPリクエストを通してサーバーにアクセスして何かしらのコンテンツをダウンロードしたり送る」という意味のコマンドです。

次に実行されると下記のコマンドが表示されるのでコピーして実行してください。

```
$ export PATH=$HOME/.nodebrew/current/bin:$PATH
```

これはパスを通すためのコマンドであり、簡単に言うと「このファイルを毎回参照してください」という意味です。

ここまで完了したらインストールが完了です。
念の為、ちゃんとインストールが出来ているか下記のコマンドで確認してみましょう。

```
$ nodebrew -v
```

実行すると「nodebrew use [バージョン名]」と表示されるはずです。
ここまではnodebrewのインストールでありNode.jsのインストールではないので注意してください。

# Node.jsのインストール

Node.jsをインストール際のコマンドはいくつかあります。

```
$ nodebrew install-binary stable
```

```
$ nodebrew install-binary latest
```

```
$ nodebrew install-binary [バージョン] 　※括弧は不要です
```
各コマンドについてですが

##### stable... 「もっとも新しいバージョンかつ安定版」の意味です。　※これが一番オススメです。

##### latest... 「もっとも新しいバージョン」の意味です。ですが、動作を100％保証されるものではありません。

##### [バージョン]...説明不要だと思いますが「バージョンを指定してインストールをする」という意味です。

ちなみに上記全てインストールをしても問題はございません。

次にインストールが完了したら下記のコマンドでバージョンの確認をしましょう。

```
$ nodebrew ls
```
バージョンが確認出来たら「current:」という部分に注目してください。
これは現在使用しているバージョンが表示される部分であり初めてインストールする方は「current: none」と表示されているでしょう。「none」の状態だとインストールをされているだけで使える状態にはなっていません。

下記のコマンドで使えるようにしましょう。

```
$ nodebrew use [任意のバージョン名]　※括弧は不要です
```
任意のバージョン名については「stable」、「latest」でも問題ありません。
コマンド実行後、念の為に下記のコマンドで確認してみましょう。

```
$ nodebrew ls
```
「current:」の後にバージョンが表示されていれば完了です。
次は実際にNode.jsを操作してみましょう。
下記コマンドを実行してください。

```
$ node
```
すると下記のような表示が出てきます。

```
Welcome to Node.js [バージョン名]
Type ".help" for more information.
> 
```
「>」の後に下記のコマンドを入力してみましょう。

```
$ console.log("Hello")
```
すると下記のように「Hello」と表示されるはずです。

```
> console.log("Hello")
Hello
```
これでNode.jsが動いていることが確認出来ました。終了するには"ctrl + c"を入力すると終了できます。

以上になります。

最後まで読んで頂きありがとうございました。

seki_mi
develop?feature?Gitのブランチの疑問を解決！

# はじめに
Gitのブランチを作成する際に`feature/〇〇`などのブランチ名をつけたことがあると思うのですが、正直意味を理解していないまま使っていたりしませんか？
意外と知らないブランチの知識をまとめてみました！！


# ブランチについて
作業履歴を枝分かれさせていきバージョン管理していくためのもの。切り取ったブランチは他ブランチの影響を受けないため複数の作業を同時に進めることが出来ます。
チームで開発する際は、それぞれが他のメンバーの作業の影響を受けずに開発が可能で、個人開発する際も作業履歴を綺麗に管理して見やすくなるので、利用しない選択肢は無い。


## git-flowとは？
チーム開発では、特にルールを設けずにブランチを使っていると、無秩序にブランチの作成やマージが行われ、リポジトリが混沌化してきます。こうした問題を解決するために、「ブランチモデル」というブランチ管理方法が考案されました。
そこで、今回紹介するブランチモデル「git-flow」は、割と広く使われているブランチモデルです。


### ブランチの種類
#### masterブランチ
Gitでリポジトリを新規作成するとデフォルトで作成されるブランチのこと。
git-flowでは、masterブランチに直接コミットすることはなく、マージを行うだけのブランチになります。
`例 : master`


#### developブランチ
開発の中心となるブランチのこと。
開発中は、developブランチからブランチを切って、作業完了後に再びマージするという作業を繰り返します。
リポジトリを新規作成したときに、masterブランチからdevelopブランチを切って作成します。
`例 : develop/[バージョン番号など]`

#### featureブランチ
機能の追加や変更、バグ修正などを行うブランチのこと。
ブランチの名前は、変更の内容が分かるような名称にします。developブランチから派生させ、作業完了後に再び developブランチにマージします。そして、マージ完了後に削除します。
`例 : feature/[派生元バージョン番号など]/[機能名など]`

#### releaseブランチ
製品をリリースするために使うブランチのこと。
製品のリリース時には、関連する作業が必要になる場合が多いでしょう。
developブランチからreleaseブランチを切って、そのブランチでリリース作業を行います。リリース作業が完了したら、masterブランチと developブランチにマージし、masterブランチのマージコミットにリリースタグ（バージョンなど）を打ち、その後、release ブランチは削除する。
`例 : release/[バージョン番号]`

#### hotfixブランチ
製品のリリース時に重大な不具合が見つかった際に使うブランチのこと。
masterブランチからhotfixブランチを切って、緊急の修正を行う。修正完了後には、masterブランチとdevelopブランチにマージして、リリースタグ（マイナーバージョンなど）を打ち、その後、hotfixブランチは削除します。
`例 : hotfix/[バージョン番号]/[バグ識別名] or hotfix/[バグ識別名]`

#### supportブランチ
旧バージョンの保守とリリースを行うブランチのこと。サポートが必要なバージョンのmaster ブランチのコミットから派生させ、サポートを終了するまで独立してバグフィックスやリリースを行う。
`例 : support/[バージョン番号]`


# 終わりに
最初に例で出した`feature/〇〇`以外にもいろんなブランチの種類がありましたね！
こういったルールを設けて開発することで、リポジトリが綺麗さを保って確認等もしやすくなります。
是非開発時は、ブランチモデルを参考にルールを定めましょう！！


# 参考
[Gitブランチについての基本まとめ]
(https://qiita.com/katsunory/items/252c5fd2f70480af9bbb)

[Git-flow ～Gitのブランチモデルを知る～]
(https://tracpath.com/bootcamp/learning_git_git_flow.html)
three.js の examplesをnode.jsで動かす

node.jsで[three,js](https://threejs.org/)のサンプルを動かそうとすると
```SyntaxError: Unexpected token < in JSON at position 0```
だったりデータが取ってこれないことがありました。
原因はContent-Typeやencodingが適切に設定されていないことのようでしたので、

```
$ npm install mime-types
```
でモジュールを追加し（必要があれば）、

```javascript:server.js
const mime = require('mime-types');
const port = 8080;
var http = require('http');
var fs   = require('fs');
var http_server = new http.createServer(function(req, res) {
  var url = decodeURI('.'+req.url);
  if(!fs.existsSync(url)) {
    console.log(url+" not found");
  }else{
    let type = mime.lookup(url);
    type = type ? type : "application/etc";
    //console.log('>>'+'.'+url+':'+type);
    let encoding = type.hasOwnProperty('includes') ? (type.includes('text') ? 'UTF-8' : null) : null;
    let data = fs.readFileSync(url,encoding);
    res.writeHead(200, {'Content-Type': type});
    res.end(data);
}
}).listen(port);
console.log('Check http://localhost:'+port+'/ on brouser.');
```
を作成し

```
node server.js
```
とすることで解決できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/377d74a0-ca75-2472-211c-0358e53faba7.png)
AWS Beanstalk で humhub を運用開始できるか試そうと思ったがやめた。

#はじめに
phpのWEBアプリ（？）、[Humhub](https://www.humhub.com/en)を使うにあたり、AmazonWebService（AWS）のうち、Beanstalkでデプロイできるか試してみようかと思ったが見送ることにした。参考にした情報は、次のとおり。

AWS Elastic Beanstalk 開発者ガイド
プラットフォームチュートリアル > チュートリアル- HA Wordpress

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html

デプロイ前に、それができたとして考えたメリット、デメリットは以下のとおりかな。


###メリット

「プリケーションを実行しているインフラストラクチャについて知識を得なくても、AWS クラウドでアプリケーションのデプロイと管理を簡単に行うことができます。」[AWSドキュメントより。](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/Welcome.html)要は、バックエンドのWEBサーバーやらDBサーバーの構築・管理をお手軽にすることができるらしい。

### デメリット

ソースの改変のたびに、全データをZipに圧縮、beanstalk に登録って操作をしなければならない。はっきり言って開発担当が毎日ソース書き換えるような環境には不向き。githubと連携できるHerokuのほうがそういう用途に向いてるのかも。

# 今回の結論

現在、ソースの書き換えを複数人で同時に頻繁に行っているため、Beanstalkでの運用は不向きと判断した。


# 参考サイト

https://www.webprofessional.jp/ultimate-guide-deploying-php-apps-cloud/

https://www.humhub.com/en
【Flutter】Android デバッグシンボルのアップロード

#アプリ公開時に警告「デバッグシンボルがアップロードされていません」
![スクリーンショット 2021-04-17 10.21.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086494/c9da7ac4-5ee4-50aa-7834-ebd86d8307de.png)

デバッグシンボルがアップロードされていないとのこと。
色々調べて辿り着いたこちらの記事。
https://stackoverflow.com/questions/63373245/how-to-add-debug-symbols-to-build-gradle

解決方法が見つかったので、書いていきます。

##SDKをインストール
SDK Managerで、「CMake」と「NDK」というSDKをインストールします。
![スクリーンショット 2021-04-17 10.23.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086494/d2e37b11-3ea3-fdc9-142d-4b7948228f0c.png)

##Android gradle バージョンを4.1以上に
Android gradleの4.1以上が必要なようです。
とりあえず4.1.2にします。

```gradle:android/build.gradle
buildscript {
    //省略
    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.2' //ここ
    }
}
```

##NDKのバージョンをメモする
SDK Managerを開いて右下にある「Show Package Details」をチェックするとバージョンが確認できます。
NDKのバージョンを後で記入するので、メモしておいてください。
この画像では、「22.1.7171670」になります。
![スクリーンショット 2021-04-17 11.00.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086494/1be20024-7126-2b07-4137-f42aaf74dfcb.png)



##app build.gradleを編集
下記の通り編集してください。

```gradle:android/app/build.gradle
android {
    //省略
    ndkVersion "22.1.7171670" //ここにNDKのバージョンを記入
    //省略
    buildTypes {
        release {
            //省略
            ndk {
                debugSymbolLevel 'SYMBOL_TABLE' //追記
            }
        }   
    }
}
```

##アプリをビルド
アプリをビルドします。

```terminal
$ flutter build appbundle --release
```
これで作成されたaabファイルにはデバッグシンボルがバンドルされているようで、個別にアップロードしなくても警告は出なくなりました。
社内で3Dプリンタによる大量生産をすることになった話

気が付くと私は大量の光造形3Dプリンタと液体レジンとUV照射器とさらに大量の出力造形物に取り囲まれていたーー
※この投稿は事実に基づいていますが、一部誇張表現があったりなかったりします。

# 何が起きたのか
例の上司「弊社が開発したIoT機器が急遽大量に必要になった！！3Dプリンタいっぱい買ってきた！！」
syntan「な、なんだってえ！？」
![驚き.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673394/b9e5261e-248c-ca2e-db81-ec41d72934f6.png)

ということで、
[普通のプログラマーが3Dプリンタを業務で使うことになった話](https://qiita.com/syntan/items/c20d325122e1403e6041)
にて作成していた、IoT機器のケースを大量生産することになりました。
※といっても今回は、私自身はほぼ実作業はせず、3Dプリンタの使用方法アドバイザーの立ち位置ですが。

# どうして社内生産？
光造形3Dプリンタの出力は、ミスの発生がつきものであったり、プリンタの出力ボタンを押すだけでは完了せず、プリンタ自体のメンテナンス、出力造形物の洗浄、二次硬化が必要であったりといろいろと手間がかかります。
そしてそもそも、弊社はそういう製造会社ではないぞ（それはそう）という内部抗争（人聞きが悪い）があったりなかったりしまして、外部に委託できるところを検討しました。

しかし、社内で使っていた3Dプリンターでの出力可能サイズと、外部で対応できる出力可能サイズが合わなかったり、対応できるモデルフォーマットが異なったり、光造形3Dプリンタにこだわらず切削加工も確認してみるも、元々3Dプリンタ用に制作されているモデルのため形状的に対応不可（主に中空的な構造がアウト、参考：[3Dプリンターと切削加工の違い](https://www.ricoh.co.jp/3dp/what/advantages/)）となり、社外で同じモデルを出力するのは困難という結論に至りました。

# いざ大量生産を開始するも様々な問題発生
> 為せば成る、為さねば成らぬ何事もーー米沢藩　第九代藩主・上杉鷹山

ということで、人員を確保しいざ社内で大量生産！！
となりましたが、うまくいかないのが人の世の常です。

## プリンタの初期不良？
大量に3Dプリンタを買うと、一つくらい初期不良が発生してもおかしくないですね。6台あるうち1つが、出力造形物以外の部分が異常に固まるようになってしまいました。UVを遮断する部分が働いていない感じですね。見た目はまったく異常がなかったのですが。
この件は販売元に確認するとのこと。

## 窓からの光がまぶしい！
3Dプリンターを置く位置は、元々物置状態だった廊下の隅です。その突き当り部分に大きな窓があり、日光が入り放題でした。3Dプリンタのカバーだけでは、日光を防御することはできず、バットの中のレジン表面が固まってしまい、印刷失敗の原因となっているようでした。

解決方法としては、突っ張り棒を突っ張り、遮光カーテンを付けることでなんとか回避しました。
いつもは明るい場所が昼夜問わず真っ暗で、大量の3Dプリンターの液晶モニターがそれぞれ光を放ち、より一層おどろおどろしい雰囲気に…。

## 出力造形物の取り出し作業で割れる！
出力後は、プラットフォームと呼ばれる金属の板に造形物がぴったり張り付いた状態となり、プラットフォームから造形物を取り外すという作業が後処理の最初の作業です。

いままでは造形物の取り出しやその後の後処理を含め、すべて私の方で行っていたので、今回新しく参加する人は完全に初心者でした。慣れてくると破損率は下がるかと思っていましたが、それでも５割くらい壊れるとのこと…どうして…。

元々モデルの作り方として、

* 出力時間の短縮、出力後の処理時間短縮、レジン使用量の節約、完成形状の美しさ、などを優先。
* 取り外しは簡単になるけど、見た目が凸凹してしまう、レジンの使用量が増えてしまうサポート材取り付けを極力行わず作成。
* 取り外し難易度は私が難なく外せること。

という感じで、結果的にプラットフォームに張り付く面積が大きくなりました。その張り付き面積が大きいことで、張り付いた中心部分がうまくはがれず、割れて穴が開いてしまう、ということが起こっていました。

敗因は、取り外し難易度を私に合わせてしまったという部分だろうなあと思います。サポート材を取り付けて、造形物が直接プラットフォームに張り付く部分を減らし、だれが作業しても外せるようにする方向となりました。

## 中心部が薄くなる！スケスケ！
一つ目の初期不良プリンタを除いて、残り5台のうち1台が、大量のモデルを出力した劣化なのか、バットのフィルムが伸びてしまったようでした。現象としては通常ピンと張っていて浮かないフィルムが、プラットフォームに付いた硬化済みレジンに引っ張られて浮いてしまい、中心部がはがれず、平たく水平に出るはずの造形物の中心部が凹んで薄くなるというものでした。

対応策としては、フィルムを張り替えるもしくは、「フィルムが伸びてはがれ切らないなら、はがれ切るまでプラットフォームを上げればいいじゃない」ということでリフト高さ（フィルムから硬化したレジンをはがすとき、プラットフォームをどの程度上げるかの長さ）を長くする方法があります。

当初は一旦、リフトの高さを変更することになりました。その後別のモデルの出力もうまくいかないためフィルム貼り替えとなりました。


## それでも印刷失敗は発生する
印刷完了したと思ったら、レジンを入れているバットのネジを締め忘れていて、プラットフォームにバットが張り付いて浮いていたなんていう、人為的ミスがあったり。
どこからともなく表れた不純物で、造形物表面が穴あきになるなんていう、回避不可能な失敗があったり。

クリーンルームでもなくどこからでもほこりが入る。空調が完璧でもないため天候によって気温と湿度が変化。元々3Dプリンタは失敗がつきもの…。

印刷失敗は当たり前に起こることとして、失敗を考慮した無理のないスケジュールを立てる必要があることを再認識しました。

# まとめ
今回3Dプリンタで大量生産するうえで学んだことは

* 後処理作業が問題なく行えるか（主にプラットフォームから破損なく外せるか）どうかのテストは、作業担当者自身が行う（もしくは初心者を捕まえてきて行う）ほうが妥当であり、不合格時の調整のためにモデル変更ができる人も必要になる。
* 出力が安定したと思っても、プリンタの各部品の劣化（今回は特にフィルムの伸びについて）で調整が必要なことがある。

という感じでした。

最後までお読みいただきありがとうございます。
大量生産が上手く完了することを祈るばかりです…。
Unity（ユニティ）とは

#####ゲーム開発でよく利用されているUnity（ユニティ）について初心者向けに説明した記事です。


#####Unity（ユニティ）とは、ユニティ・テクノロジーズという会社がだれでも利用できるようにしているソフトウェアです。このソフトウェアはゲームエンジンとよばれ、ゲームを手軽に作るために役に立ついろいろなツールが集まって出来ていて、ゲームの開発にぴったりです。Unityを使う上で必要な物はパソコンのみです。

#####Unityを使うと下記のようにいろいろと良いことがあります。

- 簡単にゲームが作れる。だれでも手軽に使用できてプログラム初心者でも簡単なゲームがすぐに作れます。
- 無料から利用できますのでこれからゲーム作りをはじめようとしている初心者やしゅみでゲーム作りを行う人でも安心して使用できます。チュートリアルもたくさんありますので、すぐにゲームを作り始められます。
- 3Dだけでなく、2Dのゲームにも対応していますのでUnity１つではば広いゲーム作りが可能です。
- 私たちの身近にあるスマートフォンで使われているiOSやAndroidなどに向けたゲーム作りが可能です。OSはMacとWindowsどちらにも対応しています。（iPhone用ゲームを作るためにはMac専用の機能と連動させる必要があるため注意しましょう。）
- いろいろなプラットフォームに対応していますので、Nintendo Switch、PlayStation、Xboxなどいろいろなゲーム機向けにゲーム作りが可能です。
- 世界でも多くの人が利用しているので情報が多いです。分からないことを質問したり、回答する世界がすでに作られていますので、分からないことがあってもすぐに解決することができます。
- ユーザーが自分で作成したプログラムの部品や 3D の材料などを登録して公開したり、売ったりできるアセットストアがあり、だれでも手軽に利用することができます。無料で配られているものもたくさんあります。

↓ がUnity（日本語）のホームページです。ぜひ参考にしてください。
[Unityのホームページ](https://unity.com/ja "Unityのホームページ")