OmniAICreator/Qiita-1.07M huggingface dataset:
【Jenkins：Mac】Jenkinsアンインストール

# 概要
2年ぶりくらいにJenkinsアップグレード（2.270）して再起動したらエラーで起動できなくなった…
色々調べたけど情報が全然でてこなく、もうわけわからんのでJenkins入れなおすことにした

※Homebrewでインストールしてた場合です

# 1. 必要なファイルをバックアップ

バックアップというか作成したPipelineの処理を残しておきたかったので
/Users/[ユーザー名]/.jenkins/jobs/
ファイルをコピーしてどこかに退避
各ジョブフォルダ内にconfig.xmlがあって中身見るとビルドの設定周りが記載されてる
不要であればバックアップしなくていいです

# 2. 削除コマンド実行

Jenkinsは停止しておく

```:コマンド
$ brew services stop jenkins
```

そしてさよなら

```:コマンド
$ brew uninstall jenkins --force
$ brew cleanup
```

ただ、これで削除されるのはインストールしたJenkinsフォルダだけ
このあたり
/usr/local/Cellar/jenkins/


# 3. 残りのファイルも削除

さっきバックアップ取ったjobsとかのフォルダは残ってるので
/Users/[ユーザー名]/.jenkins/
このフォルダごとゴミ箱に捨てる
.jenkinsは再度インストールした時に勝手に作られます

# 4. 再インストール

再インストールしたい人は以前書いた[記事](https://qiita.com/shirasaya0201/items/863a05117c934856e532)をどうぞ

Jenkinsの情報全然出てこなくてググるだけで日が暮れる
仕事で慣れてる人は当たり前のようにできてるんだろうけど
アプリの自動化とかやってみたいなーの気分で知識なしで始めると泣けてくる
cloud9+Vue.jsしてみる

この記事は[苫小牧高専アドベントカレンダー2020](https://adventar.org/calendars/5574) 13日目の記事です

ちなみに投稿時点で12日目の記事はまだ出ていません、気長に待ちましょう

#なにはともあれ
まずはcloud9を用意しましょう

AWSにログインして検索欄で「cloud9」と検索
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/949661/875e3122-d3f1-6d44-0f77-c5ac2825f76e.png)
出てきた画面の「Create environment」を選択

この時右上の「東京」と書かれている所が他の国になっている場合は「東京」に変える事を推奨します（別の国でもいいけど忘れると大変なことになる）
![キャプチwャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/949661/a5cedbfb-66e7-e30e-8614-fa9ae660a7cc.png)

Nameの部分に好きな名前、Descriptionは詳細やコメントなどなので書かなくても大丈夫

![キャdプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/949661/ba0688f8-b656-2cc3-141c-daf0416a896a.png)

Environmentは基本的に「EC2 instance」で構いません
「no-ingress EC2 instance」はプライベートネットワークでの運用が出来ますが少し成約がかかるそうです
「run in remote server」はSSH接続で利用しますが使うことはあまりなさそうですね

instance typeは容量などですが無料で利用出来るのは「t2.micro」です

Platformは「Amazon Linux2」がおすすめされてるのでこれでいいと思います、「Ubuntu」の利点もありますが気にしなくていいと思います

Cost-savingは環境の自動停止時間になります
支障がないのであればデフォルトの30分にしましょう

IAM roleはIAMユーザーでログインした際に設定します
今回はルートユーザーでログインしているので飛ばします

あとNetworkとかありますがこだわりないのでデフォルトで

![aa.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/949661/c7acee7b-d292-410d-db11-6a299fc7aec2.png)

確認画面の後に作成が始まります
IDEっぽい画面になったら成功です
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/949661/f46c62e5-64ac-9978-dd0f-11b66067089b.png)

#なにかしてみよう
Vueプロジェクトを作ってみます

####Vue-CLIの導入

```
npm install -g @vue/cli
```

####vueプロジェクトの作成

```
vue create test
```

####設定ファイルの追加

プロジェクト直下に、下記のファイルを作成する。

```vue:vue.config.js
module.exports = {
  devServer: {
    disableHostCheck: true
  }
}
```

これがないと`npm run serve`した時にエラーとなります
ローカルでは必要ないですがクラウドであれば必要です

####実行

```
cd test
npm run serve
```


右上のPreviewを押すと確認できます![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/949661/1c890aaf-ae2c-8df5-7cff-6508f0177a45.png)
LINEボット3　画像識別チャットボット開発

[Aidemy](https://aidemy.net/)　2020/12/13
#はじめに
　こんにちは、んがょぺです！バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます！
　今回は、LINEボットの3つ目の投稿になります。どうぞよろしくお願いします。

＊本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。

今回学ぶこと
・画像データを渡された時の処理を追加


#学習済みモデルの保存
##CIFER-10を転移学習
・今回は、ユーザーから送られた__画像__について、それが__何の画像であるかを判別する__LINEチャットボットを作成していく。
・まずは分類したい画像を学習させた__モデルを作成する__。__CIFER-10を転移学習__させて作成する。作成したコードは以下に記載するが、詳細は既に「CNN」で学習済みであるので省略する。

・コード![スクリーンショット 2020-12-13 22.33.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/f418573f-1542-6576-ad7f-c588da989466.png)

![スクリーンショット 2020-12-13 22.33.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/fb555329-bc71-1a9b-45f1-305dcb02b0ab.png)


#LINEチャットボットに学習済みモデルを組み込む
##keras
・画像の読み込みはOpenCVの__「cv2.imread()」__を使うことが多いが、__Heroku__はこれに対応していないので、今回は__「keras.prosessing.image」__を使って画像を読み込む。今回はこのうち__「load_img()」__と__「img_to_array()」__を使用する。
・__load_img()__は第一引数に__画像のURL__を指定する。第二引数以降は任意であり、例えば__「color_mode='grayscale'」__とすれば画像が白黒で読み込まれ、__「target_size」__を指定すれば、そのサイズにリサイズされて読み込まれる。
・__img_to_array()__は引数で渡された画像データを__np.array型__にするものである。

・コード

```python
#以下、送信された画像を保存するためのコード
class_label = ["飛行機","自動車","鳥","猫","鹿","犬","蛙","馬","船","トラック"]
graph = tf.get_default_graph()#kerasのバグでこのコードが必要.
model = load_model('my_model.h5')#学習済みモデルをロードする
@handler.add(MessageEvent, message=ImageMessage)
def handle_content_message(event):
    global graph
    with graph.as_default():
        message_content = line_bot_api.get_message_content(event.message.id)
        with tempfile.NamedTemporaryFile(dir=static_tmp_path, prefix="jpg" + '-', delete=False) as tf:
            for chunk in message_content.iter_content():
                tf.write(chunk)
                tempfile_path = tf.name

        dist_path = tempfile_path + '.' + "jpg"
        dist_name = os.path.basename(dist_path)
        os.rename(tempfile_path, dist_path)

        filepath = os.path.join('static', 'tmp', dist_name)#ユーザから送信された画像のパスが格納されている

#以下、送信された画像をモデルで判別するためのコード
        img = image.load_img(filepath, target_size=(32,32))#送信された画像を読み込み、リサイズする
        img = image.img_to_array(img)#画像データをndarrayに変換する
        data = np.array([img])#モデルは4次元データを受け取るのでnp.array()にimgをリストとして渡し、4次元のデータにする
        result = model.predict(data)
        predicted = result.argmax()
        pred_answer = "これは" + class_label[predicted] + "です"

        line_bot_api.reply_message(event.reply_token,TextSendMessage(text= pred_answer))

```


・ここまで行ったら、Chapter1で行ったときと同じように、herokuにデプロイすることで得られるURLをWebhookに記録して完成である。

今回は以上です。最後まで読んでいただき、ありがとうございました。
Salesforce で権限が足りなさそうなときのチェックシート

# はじめに
ユーザが見たいレコード・レポート・ページが見えなかったり操作できなかったときに何を調べるべきかをまとめた記事です。エラーになっても参照・編集できないことしか分からないことが多いので調査に時間が掛かった経験がある人も多いのではないでしょうか。この記事がその一助になれば幸いです。

# オブジェクト/レコード
- プロファイル・権限セット
    - [ ] プロファイルにオブジェクトの権限は付いているか？
    - [ ] 権限セットにオブジェクトの権限は付いているか？
    - [ ] プロファイルにある項目レベルセキュリティが正しく設定されているか？
    - [ ] 権限セットにあるオブジェクト設定で項目権限が正しく設定されているか？
    - [ ] プロファイルのレコードタイプの設定で必要なレコードタイプが選択済みになっているか？
- レコード所有者
    - [ ] レコード所有者が該当ユーザであるはずがそうなっていない？
    - [ ] レコード所有者が該当ユーザの下位ロールであるはずがそうなっていない？
    - [ ] レコード所有者がキューで該当ユーザが含まれている？
- 共有設定
    - [ ] 組織の共有設定で公開のところが非公開になっていないか？
    - [ ] 階層を使用したアクセス許可にチェックが付くべきところがそうなっていない？
    - [ ] 共有ルールが設定されるべきところで設定されていない？
    - [ ] 共有ルールの共有先が合っていない？
    - [ ] 共有ルールの共有先がロールの場合、そのロールにユーザが含まれているか？
    - [ ] 共有ルールの共有先がロール & 下位ロールの場合、そのロールか下位ロールにユーザが含まれているか？
    - [ ] 共有ルールの条件がちゃんと当てはまっているか？
    - [ ] 共有ルールの共有先が公開グループの場合、その公開グループにユーザが含まれているか？
    - [ ] 共有ルールの操作がまだ進行中？
- その他
    - [ ] 手動で共有ボタンを押すものではないか？
    - [ ] Apex で共有の設定をしている場合、Apex が正しく動作しているか？

# レポート
- プロファイル・権限セット
    - [ ] プロファイルもしくは権限セットで「レポートを実行する」権限が付与されているか？
    - [ ] プロファイルもしくは権限セットで「レポートを表示する」権限が付与されているか？
    - [ ] 作成編集したい場合、プロファイルもしくは権限セットで「レポートの作成とカスタマイズ」権限が付与されているか？
    - [ ] [オブジェクト/レコードの権限](#オブジェクトレコード)が正しく設定されているか？
- フォルダ設定
    - [ ] 共有先がロール、下位ロール、公開グループの場合、いずれかに該当のユーザが含まれているか？
    - [ ] 作成編集したい場合、アクセス権が「エディタ」か「マネージャー」になっているか？
- レポートタイプ
    - 見たいレポートがカスタムレポートタイプによるレポートの場合
        - [ ] レポートタイプで必要な項目を表示しているか？
        - [ ] レポートタイプのリリース状況が開発中のままになっていないか？

# Visualforce
- プロファイル・権限セット
    - [ ] プロファイルもしくは権限セットで Visualforce ページアクセスを有効化しているか？
    - [ ] オブジェクトを操作する場合、[オブジェクト/レコードの権限](#オブジェクトレコード)が正しく設定されているか？
    - [ ] コントローラの Apex で `with sharing` キーワードを外すべきところで付けてないか？

# おわりに
気付き次第随時追記していきます。他の観点あれば是非教えてください。
RSpec入門　-Everyday Railsまとめ-

#はじめに
Railsプログラマーにはお馴染みのRSpecの学習に『**Everyday Rails - RSpecによるRailsテスト入門**』を読んだので、私自身のアウトプットとしてまとめていきます。

#RSpecとは
Ruby on Railsのテストフレームワークの一つで、読み書きが容易で効率的にテストを実装可能なことが最大の特徴です。
Ruby on Railsの代表的なテストフレームワークは他に、Rails標準のMiniTestや、test-unitがあります。
RSpecでは、テストコードのことを**スペック（仕様）**と言います。

[公式ドキュメント](https://relishapp.com/rspec/rspec-rails/docs)


#環境
・Ruby 2.6.3
・Ruby on Rails 5.1


#構成
『Everyday Rails - RSpecによるRailsテスト入門』で理解したことを以下の記事にまとめていきます。
・[テスト、RSpecについて](https://qiita.com/zeisho/items/394fc106703d7be12edf)
・[RSpecのセットアップ](https://qiita.com/zeisho/items/d5ae0f89a185e7b030c3)
・[モデルスペック](https://qiita.com/zeisho/items/418aa80b4b64d25d6f1a)
・[FactoryBotでテストデータを作成する](https://qiita.com/zeisho/items/deb3b357b22ac8f5c3fc)
・[コントローラスペック](https://qiita.com/zeisho/items/344d913d02063660bfe6)
・[システムスペック](https://qiita.com/zeisho/items/3830b1e47e2b15b7a8af)
・リクエストスペック
・スペックをDRYに保つ
・速く書くテスト、速く動作するテスト
・その他のテスト
・TDD（テスト駆動開発）
さらばbash

#なんとなく
別段bashに不満があったわけではないですが、日常にちょっとした刺激が欲しかった、という不倫する人妻みたいな動機で、zshを試してみました。
#環境
Ubuntu 20.04LTS

#zshのインストール
zshは、Ubuntu 20.04LTSのパッケージリポジトリから入手できるので、インストールは非常に簡単です。


```
$ sudo apt install zsh
```
#zshをデフォルトのシェルにする
まず、次のコマンドを使用してzshのパスを見つけます。
Ubuntuの場合は /usr/bin/zshがzshのパスです。

```
$ whereis zsh
```

次にデフォルトのシェルを変更します。
コマンドを入力した後はユーザのパスワードが聞かれるので、入力します。

```
$ chsh -s /usr/bin/zsh
```
zshをデフォルトのシェルにできたら、一度ログアウトして、再度ログインをします。

ターミナルを開くと以下のメッセージが表示されますが、何も考えずにEnterを押しましょう。


```
This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~).  This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

(2)  Populate your ~/.zshrc with the configuration recommended
     by the system administrator and exit (you will need to edit
     the file by hand, if so desired).

--- Type one of the keys in parentheses --- 
```


#oh-my-zshをインストールする
oh-my-zshとはzshのフレームワークです。
***
```

ボブ :　Shit!! なんてこった！zshをインストールしたけど全くイカしてないじゃないか

マイケル :　どうしたんだい？ボブ

ボブ :　見てくれマイケル、このマクドナルドのバーガーみたいにみすぼらしいターミナルを!!
　　　  こんなターミナルじゃあスターバックスで女の子を口説けないよ！！

マイケル :　HAHAHA!! ボブ、zshをかっこよくするためには、色々とカスタマイズが必要なん
　　　　　だ。だけど大丈夫！！
　　　　　これさえあれば簡単にかっこいいターミナル環境が手に入るんだ。
```

####そう、oh-my-zshがあればね！！

***

いいかボブ！！何も考えずにこのコマンドをターミナルのけつに突っ込んでやるんだ！！！

```
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh
```
~/.zshrcを読み込んだらイカしたターミナルの完成だ！！後はお前の好きなようにzshを調教するんだな！！


#個人的に便利だと思った点
###①補完機能が強力
・コマンドやオプションも補完してくれる
・tabキーを連打してファイルやディレクトリを指定できる

###②cdコマンドを打たなくていい
・ディレクトリのパスを打つだけで移動できる
#まとめ
発音は「ずぃーしぇる」で合ってるのかな？
RSpec入門　1.テスト、RSpec

RSpec入門の第一弾です。
[シリーズ概要](https://qiita.com/zeisho/items/f694bd4a975af3418b76)

#何故テストを自動化するのか
まず何より、一度テストを書いてしまえば、プログラムを書き換えるたびに**動作確認をする手間がなくなり、チェック漏れのリスクも下げられます**。充実したテストを書くにはそれなりの工数がかかりますが、バグ取りなどを含めたトータルの作業時間を削減できるのは決して小さくないメリットになることでしょう。
もう一つ、自動テストを充実させることで**プログラムの動作を保証**できます。開発者が「動作確認しました！」と言うだけでは何の保証にもなりませんが、テストを実行してパスしたという事実があれば、少なくともテストの範囲内の動作は担保されます。

#RSpecのメリット
・**読み書きが容易**
・**ライブラリを使いこなせば効率的にコードが書ける**

##テストで意識すること
1.信頼性があること
2.簡単に書けること
3.いつ見ても簡単に理解できること


[続き](https://qiita.com/zeisho/items/d5ae0f89a185e7b030c3)
LINEボット2　FaceAPI

[Aidemy](https://aidemy.net/)　2020/12/13
#はじめに
　こんにちは、んがょぺです！バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます！
　今回は、FaceAPIの投稿になります。どうぞよろしくお願いします。

＊本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。

今回学ぶこと
・FaceAPIについて


#FaceAPIについて
##FaceAPIとは
・__FaceAPI__とは、__顔検出や感情認識、顔認証__などが行えるAPIである。
・__顔検出__は画像の中のどこに顔があるかを検出し、年齢や性別に基づいた顔の特徴の予測値を含む__顔属性__を取得することができる。
・__感情認識__は、顔の表情を分析し、怒りや悲しみなどの感情を__信頼度__という形で取得する。
・__顔認証__は2つの顔が同一人物のものである確率を検証するものである。この確率を__信頼度スコア__という形で習得できる。

・このAPIを使うために、Chapter1の時と同様に__開発者登録__を[公式のページ](https://azure.microsoft.com/ja-jp/services/cognitive-services/face/)にアカウント登録をすることで、__FaceAPI__に登録できるようになる。
・具体的な流れは以下を参照。

![スクリーンショット 2020-12-13 22.24.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/b4170c5a-0bc6-fe0e-c598-163de338ebfa.png)



##感情認識
・このChapterでは、前項の3つのうち、__感情認識__を取り扱う。APIのレスポンスはそれぞれの感情の度合いが以下のような数値で表される。形式は__json__である。

・コード![スクリーンショット 2020-12-10 23.55.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/d76f754e-12db-b90e-c05a-bc35e9fa98aa.png)

##FaceAPIを使ってみる
・流れは以下の通り。
　・__HTTP通信__を定義。（connection）
　・画像データの__送信__のため__「"POST"」__を指定。
　・レスポンスを__受信__し、json形式で読み込む。

・上記3つの流れが終了後、感情分析を行うことができるようになる。

・__HTTP通信__の定義については、データベースに接続する時のように、__「conn」__という変数に、http.clientモジュールの__「HTTPSConnection()」__を格納することで定義できる。引数は以下のコードを参照。
・__「"POST"」__の指定は__「conn.request()」__の中で行う。第2引数にはparamsで取得できるリクエストデータを以下のように指定し、第3引数にファイル名をopen関数で指定する。
・レスポンスの受信は__「conn.getresponse()」__で行い、これをread()で読み込み、json.loads()に指定することでjson形式で読み込むことができる。
・また、__エラーが出た時の処理__として、try-except文のexcept部分にエラーメッセージを記述している。

・コード![スクリーンショット 2020-12-11 0.18.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/f110b360-42ab-6ac8-c0ae-8f9c2ed46085.png)


##感情認識を行う
・前項でデータをjson形式にしたので、これを__DataFrameに変換__し、これをもとに感情のスコアのリストを取得する。このスコアの最大値を抽出することで、これを感情として出力する。

・これを実際にコードで記述する。jsonデータを受け取り、各感情をリストにして返す関数__「ReadJson()」__と、この感情のリストを受け取って最大値を抽出し、感情を出力する関数__「Recognize()」__を作成する。

・__ReadJson()__の方は、emoに、__分析する感情__をリスト形式で格納する。このemoについて、渡されたデータのそれぞれから__感情の情報（感情値）__を抜き出し、emotionというリストに格納し、これを返す。
・__Recognize()__の方は、このemotionを受け取り、その__最大値のインデックス__をnumに格納し、これをpredとして返す。

・これらの関数は前項で記述したtry文の中で、jsonファイルを読み込んだタイミング使用する。コードは以下の通りである。

・コード![スクリーンショット 2020-12-12 15.48.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/e5f16ed7-facf-16a6-f301-b81a9c7032e3.png)

今回は以上です。最後まで読んでいただき、ありがとうございました。
[Rails] ルーティングの読み方

rails routesコマンドを実行すると下記のような結果が帰ってきました。

```ターミナル
                       #リクエストの内容                     #行き先
　　　　　　　　　　　　　　-------------------------------  -------------------------
Prefix 　　　　　　　　　　Verb   URI Pattern               Controller#Action
new_user_registration 　GET    /users/sign_up(.:format)  devise/registrations#new
```

"/users/sign_up"を変数化（人間が読みやすいように形を変更）したものが"new_user_registration"になります。
形を変えただけですので、"/users/sign_up"と"new_user_registration"の中身は同じものです。
この過程（ルーティングのURI Patternに名前をつけて変数化したもの）をPrefixといいます。

エディタにPrefixを記述する際はroot_pathを書くべき箇所に記述します。
下記のように記述しましょう。

```application.html.erb
<%= link_to "新規登録", new_user_registration_path, class: get :nav__btn %>
```

「新規登録ボタンを押すと、新規登録ページに遷移する」という意味の記述になります。

※PrefixとURI Patternの中身は同じもので、
 URLのような役割だということを覚えておきましょう！
RSpec入門　2.RSpecのセットアップ

[前回](https://qiita.com/zeisho/items/394fc106703d7be12edf)の続き。

#RSpecのインストール、設定
まずはRSpecを使う準備をしていきましょう。

##Gemインストール
**rspec-rails**をGemfileに追加、インストール。

```:Gemfile
group :development, :test do
  gem 'rspec-rails'
end
```

```
$ bundle install
```


##テストDB作成
テストDBの確認。下記の設定してなければ追記する。

```config/database.yml
test:
  <<: *default
  database: projects_test  #MySQLやPostgreSQLを使っている場合
  database: db/test.sqlite3  #SQLiteを使っている場合
```

DBの作成。

```
$ rails db:create:all
```

##RSpecインストール
```
$ rails generate rspec:install
```
ひとまず、これでRSpecのセットアップが完了しました。お疲れ様です！
このコマンドで、以下のファイルディレクトリが生成されます。

|ファイル              |機能                     |
|:------------------:|:----------------------:|
|.rspec              |設定ファイル               |
|spec                |スペックファイル入れるディレクトリ|
|spec/spec_helper.rb |テストで使うヘルパーファイル   |
|spec/rails_helper.rb|テストで使うヘルパーファイル   |

##.rspecでの設定
続いて、RSpecの設定をしていきましょう。

```:.rspec
--require spec_helper　　＃spec_helperの参照
--format documentation　　＃テスト結果を見やすいドキュメントにする
--warnings　　＃警告全表示（エラーではないが非推奨になった処理等教えてくれる）
```
--warningsはテスト実行時に情報のノイズを消すため、今回は無しにしています。


##その他の設定
まずはbinstubをインストールしてテストの起動時間を速くします。

```:Gemfile
group :development do
  gem 'spring-commands-rspec'
end
```

```
$ bundle install
```

続いて、rails generateコマンド実行時にどのスペックファイルを自動生成するか設定していきます。

```config/application.rb
config.generators do |g|
  g.test_framework :rspec,
  fixtures: false,
  view_specs: false,
  helper_specs: false,
  routing_specs: false
end
```

falseに設定したスペックファイルは自動生成されず、モデルとコントローラのスペックファイルのみ自動生成されるようになります。
なお、自動生成を外したスペックファイルも後から手動で生成することもできます。


#テストの実行
RSpecが正しくインストールできていれば、下記のコマンドでテストが実行できます。

```
$ bin/rspec
```

[続き](https://qiita.com/zeisho/items/418aa80b4b64d25d6f1a)
【DataRobot】おもちのおとももち【画像分類】

## やりたいこと
冬と言えばお雑煮、お雑煮といえばお餅ではないでしょうか。お餅にも様々なおとももちが存在します。みなさんはどんなお餅が好きでしょうか。
今回はDataRobotのVisual AIでお餅のおとももちを分類するモデルを作成してみます。また、転移学習で作成するモデルとの比較もしたいと思います。

## 画像データ
対象のお餅は以下とします。

- あんころ餅
- 五平餅
- 柏餅
- みたらし団子
- 桜餅
- よもぎ餅
- ずんだ餅

各画像20枚ずつの合計140枚で学習を行います。収集した画像はラベル毎にフォルダに入れておきます。
![画像フォルダ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/8a5693a0-111a-6f26-b5b7-abe92c68d455.png)

## DataRobot
新しくプロジェクトを作成します。今回はローカルファイルを選択し、お餅画像のzipファイルをアップロードします。
![new_project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/a1a89a8b-5889-909d-01b7-691e78098793.png)
ディレクトリをきちんとラベルとして認識してくれるので、今回の予測のターゲットとして指定します。
![target.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/fe82ba8a-7bd6-3821-788f-cad6fffa29d0.png)
設定はそのまま実行してみます。
![create_model.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/80905242-dd68-2f0d-ffd7-bb4a51adf62a.png)
モデルの結果を確認します。指標は正解率とします。90%程度の正解率のようです。
![mode_precision.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/cbd13476-63e9-3059-af43-0680dbdb02ea.png)
アクティベーションマップを確認すると、五平餅やみたらし団子は串の部分が判断に使われているように思えます。全てうまくいっているわけではなさそうですね。
![activation_map.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/532d3c22-6a18-4418-0514-db0c9c5444d8.png)
多クラスの混同行列です。五平餅とみたらし団子、よもぎ餅とずんだ餅が間違えやすいのではないかという思いで選定したんですが、あんころ餅と桜餅、五平餅とよもぎ餅で間違えているようですね。元画像の背景部分の影響もあるかもしれないです。
![matrix.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/5f01ba99-59b5-d7d6-691f-8ea075a74354.png)
画像をアップロードしてからほぼ何もしていないですが、非常に簡単にモデルの作成とモデルの評価が確認できます。
訓練データに存在しない画像で予測をしてみます。
![gohei_101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/6cb3ee4e-7497-8734-d83e-0fdfe45da252.png)
![sakura_101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/94f6a0e4-f8ee-9d92-fb2c-5e68e94d09c5.png)
![zunda_101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/2855a6f4-cd4d-fc40-ebf7-6530cbfa956b.png)
CSVをダウンロードできますが、以下のように正しく予測できているようです。
![prediction_csv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/68f0164c-5a9a-0eda-9db7-294f612d30b7.png)

## 転移学習
MobileNetV2での転移学習と比較してみます。実装はpytorchで行いました。画像データが少ないため`torchvision.transforms`で学習時のデータを水増しします。
訓練時のaccuracyとlossが以下です。10epochぐらいで十分精度が出ているようです。精度が出ないようであればファインチューニングも試そうと思いましたが、必要なさそうです。
![train_acc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/04a3edfc-0b07-7e30-d16d-533c1b3ea046.png)
![train_loss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123946/3ab1a550-c285-418a-0658-38023c173243.png)
同様に追加画像での予測を試しましたが、正しく予測できていました。

## 比較
圧倒的にDataRobotは簡単でした。特に結果の確認が非常に簡単です。説明のために資料を用意する必要もないです。モデル作成の時間はCPUでの実行だったので、多少遅いのではないか、画像枚数を増やした時にどの程度遅くなるのかという点が気になりました。転移学習の場合はGPU環境で20epoch程度の学習で済むため学習は早いです。ただ、実装や結果の確認に費やす時間を考えればDataRobotは優れていると感じました。


## おわりに
DataRobotというとAutoML、自動化のイメージが強くありましたが、情報共有の点でも非常に良いと思いました。自社でも機械学習、深層学習を案件で使っていますが、情報共有に課題があり属人化していると感じています。DataRobotではモデルに対する評価をすぐにグラフィカルに確認でき、誰でもできる点が非常に魅力的です。初めてDataRobotを使いましたが、他の回帰や分類についても試してみたいと思います。 :smiley:
Railsサーバーが立ち上がらない。

## エラー内容
`rails s`でサーバーの起動を試みた際、以下のエラーが発生。

```
: Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
```
3000番ポート使われていると怒られる。


## 現在起動しているサーバーのプロセスを確認してみる。
```
$ ps aux | grep puma
```

`30254`のプロセスが邪魔をしている様子。　
`26491`のプロセスは、`ps aux | grep puma`コマンド自体のプロセスとのこと。

```
shiro            30254   0.0  0.1  4455312  15532   ??  S     2:03PM   0:05.23 puma 3.12.6 (tcp://localhost:3000) [portfolio_01]
shiro            26491   0.0  0.0  4258892    224 s000  R+    9:53PM   0:00.00 grep --color=auto puma
```

## プロセスを強制終了させる。
```
$ kill 30254
```

## その他（別ポートで立ち上げる）
手っ取り早く解決する方法。根本的な解決ではないためオススメできませんが、以下のように打てば別ポートで立ち上がります。

```
$ rails s -p 3001
```

## 終わりに
Railsの設定等々を行っている際、かなりの時間をこのエラーに費やしてしまいました。
私と同じく初学者の方にお役に立てればと思い投稿します。
ご参考ください。
【Java】型変換時の注意点

## 【概要】

JavaSilver範囲の型変換に関しての注意点についてです。

## 【説明】

### 変数に進数を使用するときの注意

まず進数について軽くおさらいをする。

- 2進数: コンピュータの中では、0と1でデータを扱っている。
- 10進数: 人間がよく使う0~9までの数字で表す
- 16進数: カラーコードなどに使われる0~9 とA ~ F

以上を踏まえて下記のコードでかく変換の仕方をおさらいする。

### 10進数の「28」 を 2進数に変換する

```
28 / 2 = 14 余り 0
14 / 2 = 7 余り 0
7 / 2 = 3 余り 1
3 / 2 = 1 余り 1

★☆★☆★☆★☆★☆★☆★☆★★☆★☆★☆★☆★☆★☆

28 / 2 = 14 余り 0
14 / 2 = 7 余り 0    ↑
7 / 2 = 3 余り 1　   ↑　
3 / 2 = 1 余り 1　   ↑
矢印のとおりに読む → → →

★☆★☆★☆★☆★☆★☆★☆★★☆★☆★☆★☆★☆★☆

// 2進数
11100 
```

### ２進数を10進数に変換する

２進数表記された値は、下記のように右のビットから1, 2, 4, 8, 16, 32, 64..と書いていき、ビットが「1」の箇所を合計する。

```java
//以下の場合は「146」になる。
010010010 = 146

 0   1  0  0   1   0  0  1  0 
256 128 64 32  16  8  4  2  1 //上の値が「1」の箇所を探す
128 + 16 + 2 = 146 // 対応した値を合計する。
```

### サンプルコード

byte型で２進数の変数e を出力しようとしますが、上記の理由によりコンパイルエラーになります。

```java
public static void main(String[] args) {
        // 明示的なキャスト
        int a = 100;
        // short型に変換
        short b = (short) a;

        // byte 型は -128 ~ 127までの値を扱うデータ型なので、範囲を超えるとエラーとなる。
        // byte の範囲内のint型のリテラルのためcompile可能
        byte c = 127;
        // byte の範囲に収まらないint型のリテラルのためコンパイルエラー
        byte d = 128;
        // 10進数にすると256になるため、コンパイルエラー
        byte e = 0b10000000;

        System.out.println(e);
    }
```

## long型のリテラルをInt型変数に代入【コンパイルエラー】

下記のように、long型のリテラルをInt型変数に代入することは出来ません。

```java
public static void main(String[] args) {
        int f = 2 * 3L;

        System.out.println(f);
    }
```

```java
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	型の不一致: long から int には変換できません
```

## double型のリテラルをfloat型変数に代入【コンパイルエラー】

下記のように、double型の変数「g」にそれより小さな値しか使えないfloat型を代入しようとしているため、これもコンパイルエラーがおきます。

```java
public static void main(String[] args) {
        float g = 10.0;

        System.out.println(g);
    }
```

```java
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	型の不一致: double から float には変換できません
```

## 【まとめ】

試験対策としてこれらの挙動は把握しておくこと。

また、byteとshortは扱える範囲が狭いため、正確に範囲を覚えておくこと。

- byteは -128 ~ 127
- shortは 32768～32767

## 参考文献・記事

- [徹底攻略Java SE 11 Silver問題集[1Z0-815]対応](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Java-SE-11-Silver%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-815/dp/4295007625/ref=pd_lpo_14_img_0/356-5238196-1895250?_encoding=UTF8&pd_rd_i=4295007625&pd_rd_r=1c21865b-a9fe-43e8-ac01-46170e44abca&pd_rd_w=9El0Q&pd_rd_wg=hh5Hc&pf_rd_p=4b55d259-ebf0-4306-905a-7762d1b93740&pf_rd_r=72AVH18EM90CKG00CH5W&psc=1&refRID=72AVH18EM90CKG00CH5W)
- [https://www.sejuku.net/blog/48345](https://www.sejuku.net/blog/48345)
【AWS】3分でプロキシサーバーを構築する

こんにちは。
今回はインフラ系の記事を書きたいと思います。難しそうに見えて実は超簡単なプロキシサーバー構築。
慣れれば三分で構築できます。
「上司にプロキシ構築しといて～」と言われてちゃちゃっとできたらかっこいいですよね！
ではやってみましょう！

#前提条件
EC2インスタンス上に構築します。

**OS：Amazon Linux2
インスタンスタイプ：t2.small
使用するソフトウェア：Squid**

・プロキシを構築するインスタンスがインターネットに接続されていることをpingコマンドやyum installコマンド等で確認します。

・プロキシサーバーにElastic IPを割り当てる必要があるのであらかじめ取得して割り当てておきます。
(Elastic IPはこちらが参考になりますhttps://qiita.com/Jerid/items/d5dd3a29ed9a0e374493）

・プロキシ経由で転送するトラフィックのルートテーブルの宛先をプロキシのENIに変更しておきます。

#構築
```
$ sudo yum install squid
```
途中のy/nプロンプトはyで答えます。最後に以下のように表示されれば成功です！

```
Complete!
```

次に設定ファイルをいじります。/etc/squid/配下にあるsquid.confを開きます。

ここではacl（アクセスリスト）を設定できますが、今回はローカル通信は全許可でいきますのでそこはノータッチです。

必要に応じて待ち受けポートを変更します。デフォルトで3128となっていますが、一般的には8080を使用することが多いかと思います。

```
$ sudo cd /etc/squid
$ sudo cp squid.conf squid.conf.org  //元のファイルのコピーを取っておきます
$ sudo vim squid.conf
```
ファイルの内容を次のように変更します。

```
#
# Recommended minimum configuration:
#

～

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128 //ここの数字を8080等に変更

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
```

プロキシサーバーの設定はこれで完了です。つづいて、HTTP通信の送信元サーバーにログインし、プロキシ設定を行います。以下のようにファイルを作成しましょう。/etc/profile.d/配下のファイルはサーバー起動時に自動で実行されるファイル群です。

```
$ sudo cd /etc/profile.d/
$ sudo touch proxy.sh
$ sudo vim proxy.sh
```

次のように記述しましょう。

```
#!/bin/bash

export http_proxy=http://(プロキシサーバのプライベートIP):(待ち受けポート)
export https_proxy=http://(プロキシサーバのプライベートIP):(待ち受けポート)
export no_proxy=localhost,127.0.0.1
```

上のように記述したら、以下のコマンドを実行します。先ほども申し上げた通り、proxy.shはサーバー起動時にしか実行されないのでここで手動実行します。

```
$ sudo source /etc/profile.d/prosy.sh
```

あとは、送信元サーバーからcurlコマンド等実行してみて、返答があれば成功です。

```
$ curl https://www.google.com/
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head><meta content="世
～以下略～
```
Google Apps Scriptにcurlする時のおまじない

Google Apps Script（以下GAS）にて、doGet( )でGETリクエストに対してJSONを返す感じのアプリを作り、Linux系OSのマシンから直接curlしてアレコレしたかった時に遭遇したのでメモ。
doPost( )だと[もう少しややこしい気がする](https://qiita.com/cajonito/items/9e66ef60831d51105bc0)ので、リクエストヘッダ読んだりして頑張りましょう。

#課題
GASで公開したウェブアプリケーションのURLに対し、特にオプション等をつけずに、

```shell
$ curl https://~略(GASアプリケーションのURL)
```
とすると、

```html
<HTML>
<HEAD>
<TITLE>Moved Temporarily</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Moved Temporarily</H1>
The document has moved <A HREF="https://~略">here</A>.
</BODY>
</HTML>
```
こんな感じのレスポンスが返ってきて、本来受け取るはずだったレスポンスが受け取れない、みたいなことになります。

GASの仕様上、

```html
The document has moved <A HREF="https://~略">here</A>
```
この部分に書かれたURLの先へリダイレクトしてからデータの受け取りなどを行うようになっているようで。

`curl`コマンドのデフォルトではリダイレクトを行わないため、上記のようなレスポンスが返ってくる結果となってしまいます。

# 解決策
リダイレクトさせる`-L`オプションをつけてcurlする。これだけ。

```shell
$ curl -L https://~略(GASアプリケーションのURL)
```
## 参考とか
[GASのdoPost関数をcurlでテストする時リダイレクトが必要なら-Xオプションを使わない](https://qiita.com/cajonito/items/9e66ef60831d51105bc0)

[よく使うcurlコマンドのオプションまとめ（14個）](https://qiita.com/shtnkgm/items/45b4cd274fa813d29539)
【初心者】PHP数字の下n桁の一致に関して

# 数字の下n桁の一致を確かめたい
最初にそのような問題を見た時に、文字列の部分一致を後ろからn桁目の…
みたいに、色々難しく考えてしまっていた。
もちろん前述のような方法でも解決できるのだろう。
自分が今持っている知識だけでも簡単に解決できた。

仮に下4桁が一致しているかを確認したい場合は

```PHP
($x % 10000) == ($y % 10000)
```
これが成立していれば、下4桁が一致していると言える。

こういった考え方がスッとできるようになりたいと思った。
【Heroku】本番環境で"We're sorry, but something went wrong."エラー

# エラー内容

フリマアプリをHerokuにアップし、商品を出品しようとしたところ、エラー発生。

![デプロイエラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696641/37258d14-eb85-5cd5-f151-c25540ac9fa5.png)


# エラーが起こった環境設定の状況

- macOS Catalina バージョン10.15.7
- Rails Rails 6.0.3.4
- Herokuを使ってデプロイ


# 解決したコマンド（結論）

Herokuの大元を再起動したら直った！

```terminal
f.〇〇@〇〇noMacBook-Air furima-29074 % heroku restart
```

# エラーを特定して解決までの流れ（詳細）

## 特定のため、まずは確認！

####　（１）ローカル環境では、同じ出品作業ができるか？

結果：出品できた。（左上のテスト画像）
![37adc23e79c4975967ca62df70354a54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696641/bb2bcd4c-ae8c-d503-3946-689ec591e548.png)


####　（２）データベースが反映されているか？

結果：最新だった。

```terminal
f.〇〇@〇〇noMacBook-Air furima-29074 % heroku run rails db:migrate:status
（省略）
   up     20201121005023  Devise create users
   up     20201123065101  Create items
   up     20201123075851  Create active storage tablesactive storage
   up     20201204112402  Create orders
   up     20201204112701  Create payments
（省略）
```

####　（３）masterは最新？コミットされているか？

結果：最新だった。

```terminal
f.〇〇@e〇〇noMacBook-Air furima-29074 % git push heroku master            
Everything up-to-date
```

## ログを確認しよう！

```
f.〇〇@〇〇noMacBook-Air furima-29074 % heroku logs
```

![25b69b132d593eb8f832c8fcefb0bf14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696641/b716dbb0-0fdc-13c7-61d3-44b7624483e7.png)

その中に、
`undefined method ’prefecture_id'`
`Did you mean?  prefecture`
prefectureは定義されてないよ？ここおかしいのでは？とメッセージ。

####思い当たる節

(私の状況では)`itemsテーブル`と`paymentsテーブル`において共通の`Active Hash`を使用。
初めのデータベース設計時点では、共通で使用できることに気づいておらず、後から共通のカラム名に変更した経緯があった。（変更後のカラム名が、`prefecture_id`)

## この状況から仮説を立てよう！

#### 仮説１：データベース（カラム名）が本番環境にうまく反映していないのでは？

データベースをリセット。
結果：もう一度ログを確認するも改善せず。

```terminal
f.○○@○○noMacBook-Air furima-29074 % heroku run RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:migrate:reset
```

#### 仮説２：内容は合っているのに、エラーが出ることから、ただのバグ？

Herokuを再起動。（当初の、結論のコマンド）
結果：直った！！🎉

```terminal
f.〇〇@〇〇noMacBook-Air furima-29074 % heroku restart
```


# 学びになったこと（理解が浅かったこと）

- パソコンと同じように、Herokuの大元自体を再起動することによって直ることがあることを知った。
- `log/development.log`や、`log/test.log`はあくまで開発・テスト環境のログであって、本番環境のログはターミナルから確認することを理解した。
- `Sequel Pro`のようなUIで見るようにするには`SSH`を入れないと知った。ただ、基本はターミナルということで、もっとコマンドの引き出しを広げたい（必要に応じて使えるようになりたい）と思った。

以上です。
同じように困った人の解決になれば幸いです。
（間違いあった時は、教えてください！）
JavaScript4,for文 初心者向け

4,for文
JS（JavaScript）でfor文（繰り返し処理）を行ってみましょう！
配列との組み合わせについても紹介しています。

文の繰り返し

```
for (let i = 0; i < 10; i++) {
  console.log(i);  
}
```

表示させるのは
０１２３４５６７８９

let i = 0; 
iが0になり

 i < 10;
０から10になるまで繰り返す

i++　（略語で　i = i + 1） 0+1 1+1 2+1…
0から１足していく
※ I— なら１づつ引いていく

１回繰り返す毎に{  } の中身を実行する

```
for (let i = 0; i < 10; i++) {
  let li = document.createElement("li");
  li.textContent = i;
  document.getElementById("number").appendChild(li);
  console.log(i);
}
```

  let li = document.createElement("li");
 htmlにli をjsで生成し

li.textContent = i;
liに文字列を入れる

.appendChild(li);
子要素にして（）に入れる
QuickSightの計算フィールドで色々やってみた

QuickSightを1年ほど使って、簡単に出来そうで出来なかったことをまとめてみました。

## 正確な１ヶ月の平均値を出す
QuickSightの関数で１ヶ月の日数を取得する関数がなくて、正確な平均値を出力する際は以下の2つの計算フィールドを作る必要があった。（SQLで出力する方法もあるが、今回はSQLを使用しない方法で出力してみた。）

``` １ヶ月の日数を出力する計算フィールド.
dateDiff(truncDate('MM',{add_datetime}),truncDate('MM',addDateTime(1,'MM',{add_datetime})),'DD')
```

``` 月日の平均値を出力する計算フィールド.
count(id) / MIN(１ヶ月の日数を出力する計算フィールド)
```

## 土曜・日曜日を考慮したグラフを作成する
営業日を考慮して着信〜完了までにかかったグラフを作成したかったが、営業日を取得する関数がいなかったので、以下の計算フィールドを作成して実現した。
[参考にした記事](https://gotto50105010.hatenablog.com/entry/2019/03/20/234736)
（tableauだと祝日も考慮したレポートが作成出来そうだったが、QuickSightはまだ使用できる関数が少ないので土曜・日曜のみを考慮したグラフしか出来なかった。）

``` 起点日.
ifelse(extract('WD',{add_datetime}) = 1,addDateTime(1,'DD',{add_datetime}),ifelse(extract('WD',{add_datetime}) = 7,addDateTime(2,'DD',{add_datetime}),{add_datetime}))
```

``` 終点日.
ifelse(extract('WD',{fix_datetime}) = 1,addDateTime(1,'DD',{fix_datetime}),ifelse(extract('WD',{fix_datetime}) = 7,addDateTime(2,'DD',{fix_datetime}),{fix_datetime}))
```
``` 営業日計算.
MIN(dateDiff(起点日,終点日,'DD'))
```

## コントロールを使用したフィルターで、「今月」や「先月」の制御をする
QuickSightのフィルターで期間指定する際、今月や先月の指定が簡単に出来ないのが、以下の計算フィールド・パラメータ・コントロールを作成することで、プルダウンで制御できるようになった。

``` 期間指定プルダウン(計算フィールド).
ifelse(extract('YYYY',addDateTime(9,'HH',now())) = extract('YYYY',{add_datetime}) AND extract('MM',addDateTime(9,'HH',now())) = extract('MM',{add_datetime}),'1. 今月',ifelse(extract('YYYY',addDateTime(-1,'MM',addDateTime(9,'HH',now()))) = extract('YYYY',{add_datetime}) AND extract('MM',addDateTime(-1,'MM',addDateTime(9,'HH',now()))) = extract('MM',{add_datetime}),'2. 先月',ifelse(extract('YYYY',addDateTime(-2,'MM',addDateTime(9,'HH',now()))) = extract('YYYY',{add_datetime}) AND extract('MM',addDateTime(-2,'MM',addDateTime(9,'HH',now()))) = extract('MM',{add_datetime}),'3. 先々月','')))
```

パラメータ
![スクリーンショット 2020-12-13 21.25.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529516/689fe39e-6273-ba0e-175a-cbee1d136055.png)
コントロール
![スクリーンショット 2020-12-13 21.27.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529516/6e8d7ab1-e3d4-2152-c9e2-ad75e68ff4ab.png)
フィルター
![スクリーンショット 2020-12-13 21.28.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529516/6f07c39c-4f55-2e06-82aa-684cd6883dfd.png)
上記の設定が終わると、以下のようにプルダウンで期間の制御ができるようになる。
![スクリーンショット 2020-12-13 21.31.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529516/d9a69dad-d7af-2d68-fdca-4b3b5b36cbc3.png)

# 最後に
他にも簡単に出来そうで出来なかったことたくさんあるので、気が向いたら記事書きます。
【初学者参考記事】Githubって何？から初プッシュまでの道のり

#○はじめに
###書いてあること
　Githubアカウント登録~初プッシュまで、
　苦戦しながらもどうにかできた道のりを簡単にまとめます。

　(読み進めればわかりますが、その道のりが書かれた先駆者方のリンクだらk)
　
　Git/Githubは知ってて当たり前！！！てな感じで書かれてる玄人向け記事が多かったので、
　この記事は私と似たような超初学者用の参考記事をまとめたメモになってます。
###読んで欲しい方
　**「Githubってなに？」「これからアカウント登録です〜」な人だけ**に向けた記事です！
　私のような境遇の方は多いと信じているので誰か１人でも参考して頂けたら嬉しいですね〜。
　記念の初記事読んで頂きありがとうございます！
###使ったソフト
　-Google chrome（当然すぎる）
　-VScode
　-Tarminal

#○ではいきます、結論ドンっ
　以下の記事を参考に進めました、何もかも、
　自分が情けなくなりますがこの気持ちは今後の糧にしたいと思います・・・。
####参考1、【GitHub超初心者入門】<br>この前初めてGitHubを使い始めたエンジニア見習いが書く<br>GitHubの使い方と実践～とりあえず一緒に動かしてみようぜ！～
@nnahitoさんの記事：https://qiita.com/nnahito/items/565f8755e70c51532459

　私が今日読んだ(いえ、読めた)のは本当に前半↓だけです。
　**【ローカルのソースファイルをGitHubにプッシュするまでの流れを知りたい（超基本）】**
　必要な情報が、必要な分だけ纏まっていて非常に参考になりました。
####参考２、Gitでやりたいこと、ここで見つかる 
@shimotarooさんの記事：https://qiita.com/shimotaroo/items/b73d896ace10894fd290

　自分でまとめようと思ったのだけど、この記事に関しては完璧にまとめられていた
　ものが絶大に参考になったので、参考記事紹介にかえさせて頂きます・・・。
　
　Git概念から、詳細なコマンドまで記載されていて本当に神様のような記事です。


#○最後に
もう最後なんですが、Githubに関してこれから手をつけたいこと、
使ってみたい機能がまとめられていたので共有します。

Githubのissue機能なるものがモチベーション爆上げできるそうです。
個人的な話ですが普段からGoogleカレンダーとタスクアプリを愛用してまして、
頭の整理やら仕事の効率化やらに最強の力を発揮してくれているんです。

Github/issue機能ってのが、同じように使えるみたいなんですね。
Googleアプリみたいに機能的で。(個人差あり、私は非常に好いてます!）

しかもコメント機能とか工夫して使えば、作業の進捗に合わせてタスクが完了したり。
スモールサクセスの積み重ねって意外と自信にもなりますし、早く使ってみたいな〜。

【不安解消】未経験がGitHubでissue管理をしたら、モチベUPした話。 
@yamkenさんの記事：https://qiita.com/yamken/items/a9db6b07142ca8bfd19e


ということで、自力でまとめた情報は全くないに等しい記事で心苦しいのですが！
先駆者先生方の知識拝借して、また勉強しながら情報発信させてもらいたいと思います〜！
Xcodeでファイル名を変更する方法　(Refactor Rename)

ファイル名をそのまま変更したらエラーが起きて大変なことになってしまったのでここにメモしておきます！

クラス名をを右クリック
![スクリーンショット 2020-12-13 21.38.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684645/156c342a-58b4-ed10-c4ea-079c6bb49c1b.png)

リファクター機能のRenameを選択します。
![スクリーンショット 2020-12-13 21.42.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684645/7f00f427-8d2e-a558-c1ba-3c1560566478.png)

この画面に入ったら、変更したい名前に入力するだけです！
変更後に右上のRenameを押します。

ビルドして問題なければ、ファイル名の変更に成功ですね(^ ^)
クリックしたら「コピーしました！」というバルーンを表示させる方法

# どうも7noteです！クリックでバルーンを表示させる方法

わからないことがあって調べ物をしているときに、ワンクリックでコピーできる方法を以前記載しました。

[【初心者でもわかる】ワンクリックでテキストをコピーできるボタンの作り方](https://qiita.com/7note/items/615a54475b8e12a90b81)

今回はさらにバルーンと組合わせてこのような動きを入れます。

![sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661092/d8d86bc6-b71c-3f70-b582-62e3d63a7575.gif)


## ソース

```index.html
<p>枠内をクリックするだけでコピーできます。</p>
<div class="copycode"><input type="text" value="1234" readonly><span>コピーしました！</span></div>
```

```style.css
.copycode {
  position: relative;    /* バルーンを表示するための基準値とする */
  display: inline-block; /* インラインブロック要素にする */
}

.copycode span {
  opacity: 0;            /* 最初は透明にして見えなくする */
  position: absolute;    /* 表示を相対位置にする */
  top: 0px;              /* 上から0pxの位置でかつ */
  right: -5px;           /* 右から-5pxの位置に表示 */
  color: #fff;           /* 文字色を白に指定 */
  background: rgba(0,0,0,0.5);  /* 背景色を半透明の黒にする */
  padding: 2px 5px;             /* 適度な余白を指定 */
  transform: translate(100%);   /* 右側に出したかったので、バルーンの大きさ分右にずらす */
}

.copycode input:focus + span {
  animation: fade-out 2s ease-in; /* inputが選択状態になったときにだけアニメーションを1回実行する */
}

@keyframes fade-out {
  0% {visibility: visible; opacity: 1;}  /* 最初は表示して、 */
  100% {visibility: hidden; opacity: 0;} /* フェードアウトする */
}
```

```script.js
$(function(){
  $(".copycode").on("click", function(){  // .copycodeがクリックされた時
    $(this).children("input").select();   // クリックされた要素の中にあるinputを選択状態にする
    document.execCommand("Copy");         // 選択しているテキストをクリップボードにコピーする
  });
});
```

※jQueryを使用しています、jQueryって何？という方は[こちら](https://qiita.com/7note/items/45bd8efbedd557667218)

## 解説

実際のコピーの処理はjQueryで記述しています。
コピーしました。のテキストはCSSのみで書くことができます。

疑似セレクタに`:focus`という選択状態かどうかを判断してCSSを切り分けられるものがあります。
これを利用し、クリックした際にjsを動かし、かつ同時にCSS側でアニメーションを動かすような仕組みになっています。

またinput要素に`readonly`をタグにつけていますが、これは編集不可にするものです。誤ってコピーしてほしい内容が消えてしまったり書き換えられてしまわないようにするために入れています。使う場面に応じて消してご利用ください。

## まとめ

他にも色々なことに流用ができそうなので、またアイデアが固まったら記事にしたいと思います。

#### おそまつ！
~ Qiitaで毎日投稿中!! ~
[【初心者向け】WEB制作のちょいテク詰め合わせ](https://qiita.com/7note)
Git コンフリクト　解消方法

共同開発をしていると必ずと言っていいほど起こる現象ですね！　笑
慌てず落ちついてすればなんの問題もないので大丈夫です。
それでは行きましょー！！

## 内容


![スクリーンショット 2020-12-13 20.42.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/859347/2ce2b924-f56f-cdbc-782a-5e52c61f084d.png)


## 手順

master（マージ先）を最新の状態にする
ブランチの切り替え

``` 
$ git checkout master

リモートの状態を反映させる
$ git pull 
```

作業ブランチに戻り

```
$ git checkout 作業ブランチ名
```

以下を実行する。

```
$ git fetch
$ git merge origin/master
```

するとコンフリクトが発生しているよと知らせてくれます。



```
Auto-merging db/schema.rb
CONFLICT (content): Merge conflict in db/schema.rb
Auto-merging config/routes.rb
Auto-merging app/views/layouts/application.html.erb
CONFLICT (content): Merge conflict in app/views/layouts/application.html.erb
Auto-merging app/assets/stylesheets/application.scss
CONFLICT (content): Merge conflict in app/assets/stylesheets/application.scss
Automatic merge failed; fix conflicts and then commit the result.
```

コンフリクトが発生している箇所を見て見ましょう！

```
CONFLICT (content): Merge conflict in app/views/layouts/application.html.erb
```

![スクリーンショット 2020-12-13 20.47.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/859347/69e6f02e-5053-8ab2-0ae7-9d1f03ac4409.png)

エディタを開くと紫色で表示されていると思うのでわかりやすいと思います。　（vscode使用しています）

```
<<<<<<< HEAD
# 作業ブランチでの変更内容
・・・
=======
# origin/master(マージしたブランチ)での変更内容
・・・
>>>>>>> origin/master
```

master(最新)を残し作業ブランチの内容を削除する

```
こちらも忘れず削除しましょう！
<<<<<<< HEAD

=======

>>>>>>> origin/master
```

コンフリクトが発生している箇所の修正が完了したら
コミットとプッシュ

```
git commit -m "コンフリクト解消"

git push origin 作業ブランチ名
```

##### これで大丈夫です。ww
Selenium チェックボックスをクリックできない　Python　VBA

Seleniumを使ってチェックボックスをクリックしたところ

#ElementNotInteractableException　Message: element not interactable

これは経験上なのですが、チッックボックスとラベルがセットになってオシャレな場合によくおこるような気がします。
※経験上です。必ずではありません。
どのようなときに「ElementNotInteractableException　Message: element not interactable」のメッセージがでてくるのか教えていただきたいです。

チェックボックスとラベルがおしゃれな例↓
https://quartet-communications.com/info/topics/7165


#結論
#Javascriptを使うとクリックできた。

```:クリックしたいチェックボックスのHTMLソース
<p class="op-input">
   <input type="checkbox" name="rst" id="sunday" value="1" class="oc-checkbox" checked="checked">
  <label for="sunday">日曜営業</label>
</p>
```
##Selenium Javascriptでチェックボックスをクリック　Pythonの場合
前提
Windwos10
Python3.8
変数 driverにはすでにSelenium ChromeDriverが設定されているものとします。

```:python
sunday=driver.find_element_by_id("sunday") 
driver.execute_script("arguments[0].click();",sunday)
```

##Selenium Javascriptでチェックボックスをクリック　VBAの場合
前提
SeleniumBasicインストール済み
変数driverにSeleniumChromeDriverが設定されている

```:vba
 Set sunday = driver.FindElementById("sunday")
 driver.ExecuteScript "arguments[0].click();", sunday
```


スタイルの凝っているサイトは簡単と思ったのに、なかなかできないことよくあります。
フリーランスエンジニアが語る独立の実態

こんにちは！

フリーランスエンジニアをしている、ゆきひろと申します。

今回は、僕が所属している「私立探求学園」から
アドベントカレンダー向けの記事を執筆して欲しいと言って頂きました。
（ほんとに光栄です・・・！）

フリーランスとして業務委託でエンジニアとして働いているのと同時に
プログラミング教育事業もやっており、教えている受講生の中には
将来的に独立したいと考えている「フリーランス志望」の受講生の方もいます。

その中で、
「フリーランスエンジニアってどうやってなるんですか？」
と、質問されることも多いので、その質問の回答となる記事を書こうと思いました。

「今は、プログラミング勉強中」もしくは、「正社員のエンジニアだけど、将来的にはフリーランスをやってみたいな・・・」という方に読んで頂ければ嬉しいです！

#フリーランスエンジニアの多くは、正社員エンジニアと肩を並べて勤務する
僕もそうなのですが、フリーランスエンジニアの多くは、企業の案件に業務委託という形で参画します。

参画するときは、企業の正社員と一緒に開発を行うことも多く、僕も正社員の方々と肩を並べて働いています。
（当然、コロナ禍ですから、リモート勤務推奨の会社もありますので、リモートか常勤かは企業の判断によって様々です）

つまり、正社員エンジニアも、フリーランスエンジニアも勤務形態が変わらないことがほとんどです。
なので、ぶっちゃけ、パッと見は僕らフリーランスも正社員も見分けは付きません。
要はほとんど変わらないということです。

#フリーランスの収入って？
「変わらないんなら、独立するメリットって何なの？」と思われると思うのですが、
独立して多くの場合一番ビックリするのは、多くの場合、収入面です。

僕も正社員からフリーランスに独立して、仕事の負荷はほとんど変わらないのにも関わらず
収入が「正社員時代の２倍」くらいに増えて、仰天しました。

需要に対してフリーランスエンジニアの供給が追いついておらず市場価値が高いということもありますし、
単純に（会社にも寄りますが）正社員エンジニアへの待遇が異様に低いということもありますね。

ご多分に漏れず、正社員当時は僕も薄給でした😓

#面談のハードルは想像より高くない
フリーランスエンジニアになる際には、たいてい企業との面談（面接）を受けます。

面談と聞くと、身構える方も多いと思いますが
「正社員として働くための面接」と比べると、
フリーランスエンジニアになるための面接は何倍も楽です。

なぜ楽かというと、面談の回数がほとんどの場合、１回で終わります。
イメージ的にはバイトの面接に近いかと思います。

正社員を経験されている方はわかると思いますが、
1次面接→2次面接→最終面接のような複数回面接を経なくても良いのです。

なので、１回の面談で良い印象を付けられればOKなので、あえて「楽」と言っています。
就職の時に、最終面接で落とされる悲しさを経験された方からすると、全然楽なのです（最終面接で落とされると、精神的にめちゃ辛いですよね（汗））。

面談で話す内容は、相手の企業で扱う技術や、自分が今までどんな技術を経験してきたかを話すことになります。

最初、良い印象さえ相手に与えれば、余程技術のマッチングが合わない場合などを除いて、面談は上手くいくと思います。
経験上、面談で技術についての細かい話を求められたことは僕自身ありません。

つまり、面談自体のハードルはあまり高くないということです。

ただし、コロナ禍ということもあり、面談のハードルが低くても、
書類選考で落とされる確率は以前よりも上がったといわれます。

なので、自分の扱ってきた技術・経験などを書く「スキルシート」は
余すところなく、きっちり書き切るようにしましょう。

これは正社員就職・転職も全く同じですが、書類選考で引っかからなければ
面談にすら進めませんので・・・！

#重要なのは現場に入ってからのキャッチアップ
フリーランスになるのは比較的簡単であると書いていますが、肝心の現場に入ってからはどうなのでしょう。

例えば、僕の今の現場では、自分が使用したことのない技術を扱うことになったので、そのキャッチアップには思ったよりも苦労しました。
新しい技術を使う場合は、その辺りは覚悟しておいた方が良いと思います。

ただ、前職と同じような技術（言語や環境など）を利用できる環境へ移るのであれば、
キャッチアップの心配はあまりないかなと思います😊

#エンジニアは他職種と比較して、独立のハードルが低い
例えば、営業職の独立なら、太めの人脈をある程度確保してからでないと独立はなかなか難しいと思いますが、
エンジニアならある程度の技術力さえあれば独立が可能だと思っています。

知人経由で仕事を貰うフリーランスエンジニアもいますが、
エンジニアだと多くの場合、フリーランスのエージェントを介して案件を見つける人が多いので人脈も大きくは影響してきません。

供給よりも需要が多いエンジニアは、フリーの他の仕事と比較すると、独立のハードルがかなり低い職業だなと思っています。

#良いことばかり書きましたが、、、
基本的にフリーランスエンジニアに関するポジティブな意見を並べましたが、
「皆、フリーランスエンジニアになれよ！」と言いたいわけではないので一応書いておくと、
エンジニアは技術力が資本なので、フリーになるに当たって、技術力が大事ということは間違いがありません。

ただ、正社員と肩を並べて勤務していると書いている通り、フリーランスの自分の技術力がズバ抜けていて、
隣の正社員エンジニアさんの技術力が低いという訳では全くありません。
人にもよりますが、技術力は本当に大差ないと思います。

ただし、技術力も最低限必要ではあるので、フリーランス志望の方は、その点はきちんと踏まえて学習に励んで頂ければと思います。

また、フリーランスである以上、「契約を切られるリスク」も確実に存在します。
ですが、上記の通り、きちんと需要のある技術力を磨けばプログラミングは市場価値が高いスキルであることは間違いないので、
1つの会社との契約が切れても次の業務委託先が決まるのに大きく時間は掛からないと思います。

#選択肢の1つとして、フリーランスもある
僕自身、エンジニアになって日々勉強を続けていますが、
目標もなく勉強を続けるのって辛くないですか？

どうせ勉強するなら、「いずれはフリーランスになりたい」というような目標を持って勉強を続けた方がモチベーションも上がりやすいと思います。

なので、個人的な意見ではありますが、
これからエンジニアになる方や既にエンジニアである方は、
フリーランスという選択肢もあるということを考えて頂いても良いかなと思います。

最後になりましたが、この記事が皆さんのお役に立てれば幸いです☺️
読んでいただき、大変ありがとうございました！
Salesforce と Pardot のインテグレーション  ⇒　Salesforce for Pardot の使用開始

１．Salesforce コネクタを Pardot に追加すると、どのようなことが可能になりますか?
２．Pardot アカウントと Salesforce アカウントを結び付けることは、営業チームにどのようなメリットがありますか?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634241/14fc3bfe-397f-bfe4-758d-3eda9bce7982.png)
[Node.js] Node.jsの環境構築(Windows)

###Node.jsの環境構築(Windows)

1.nodist、node、npm が既にインストールされていないか確認しておく
  （確認方法：コマンドプロンプトで下記のコマンドを使用）

>nodist -v
>node -v
>npm -v

2.nodistをダウンロード、インストールする

[nodist公式](https://github.com/nullivex/nodist/releases)

・上記のnodist公式から最新版のnodistをダウンロードしてインストールします。
・nodist -v コマンドでインストールされたか確認します。

3.node.jsをインストールする
  （インストール方法：コマンドプロンプトで下記のコマンドを使用）

・今回はバージョン14.15.1をインストールします。

> nodist + 14.15.1

最新の推奨バージョンを確認したい場合は、下記のリンクで確認します。
[nodejs公式](https://nodejs.org/ja/)

・node -v コマンドでインストールされたか確認します。
・node.jsをインストールすると、npmもインストールされます。
Ruby の "1101".to_i(2) は 2 進数を 10 進数に変換している，わけじゃない

Ruby の記事によく見られる誤りとしてこれがある。
本題に入る前に少し用語を整理しておこう。

まず

```rb
a = 17
```

という何の変哲もないプログラムを考える。
これはローカル変数 `a` に**数値** `17` を代入している。
まず，この `17` のことを「数字」と表現した記事が非常に多い。

「数値」と「数字」は違う。（「数」と「数値」は基本的に同義[^nu]なので，この記事では区別しないことにする）

数字と言うのは，数を書き表すときに用いる記号のこと（ただし，負符号〔マイナス記号〕とか小数点などは数字に含めない）。
10 進法という記数法であれば，0 から 9 までの記号が「数字」だ。
上の例でいうと，ソースコード上の `1` と `7` は数字だが，`a` に代入されるのは数字ではなく数である。

[^nu]: 「数の体系」とは言うが「数値の体系」とはあまり言わない気がする。「数値」は個々の具体的な一つの数について使われるとか，計算機の世界でよく使われる，といったことは言えそう。

非学術的な言語使用では比喩表現で数のことを「数字」と呼ぶことがある。
決算書を見て「いい数字が出たね」というように。
しかし，プログラミングの話をしているときは，数と数字をはっきり区別したい。

さて，本題に入ろう。

2 進法で「1101」と書かれた数は 10 進法ではどうなるだろう。
以下のプログラムで簡単に分かる。

```rb
p "1101".to_i(2) # => 13
```

答えは「13」。

このプログラムは [String#to_i](https://docs.ruby-lang.org/ja/2.7.0/method/String/i/to_i.html) というメソッドを用いている。
文字列オブジェクトを整数オブジェクトに変換するものだが，引数で基数を指定することができる（基数というのは，N 進法の N のこと）。デフォルト値は 10 だ。
いまの場合，引数に 2 を与えているので，レシーバーの文字列を 2 進数とみなして整数オブジェクトを作る。

ここまではよいのだが，どうやらかなり多くの人がこの `"1101".to_i(2)` を見て「2 進数を 10 進数に変換している」と勘違いしているぽい。
いやまあ，誤解するのも無理はない。だって，上のプログラムを実行したら「13」て表示されるんだもんね。「13」は 2 進数「1101」に対応する 10 進数で間違いないもの。

ではいったい何が「誤り」だというのか？
もう一度「N 進法」「N 進数」という言葉について考えてみよう。
N 進法は N 種類の数字を用いる位取り記数法だ。記数法というのは数の表記方法のこと。
N 進数は N 進法に基づいて数を表したもの。

しかるに，`to_i` メソッドの返り値は文字列ではない。Integer オブジェクトだ。よって，「数字を並べたもの」ではない。2 進数でも 10 進数でもないのだ。だから `to_i` は「10 進数に変換するメソッド」ではない。

Integer オブジェクトは処理系内部では 2 進法に基づく表現となっているが，それは処理系の都合であって，ユーザーの知ったことではない[^nh]。

[^nh]: 原理的には Integer オブジェクトを 10 進法に基づく内部表現で扱う Ruby 処理系があったっていいし（誰も作らんだろうけど），CRuby なんかが Integer を 2 進法に基づいて扱っているといっても，13 の内部表現が 1101 というビット列になっている，なんて単純なわけではない。

では，一体なぜ上のプログラムは 10 進数の「13」を表示したのだろうか。
それは，こういう仕組みだ。

`"1101".to_i(2)` は 13 という数に対応する Integer オブジェクトを返す。
筆者がいま「13 という数」と書いたのは，とくに断りがない限り我々は数を 10 進法で表す習慣があるからそう書いたまでのこと。くどいようだが，この Integer オブジェクトは何らかの意味で「1」と「3」を並べたものでは断じてない。

さて，その Integer オブジェクトが `p` メソッドの引数として渡される。
`p` メソッドは，与えられたオブジェクトを `inspect` メソッドで文字列化して出力する。
`Integer` の `inspect` メソッドは，引数を与えない場合，自身を **10 進法に基づく数字列**（つまり 10 進数）という String オブジェクトに変換する。だから，今の場合，`"13"` という文字列が得られる。

要するに，`to_i` によって 10 進数に変換されたのではなく，それを表示するときに 10 進数になったというわけ。
【Fusion360/学生向け】コンペで最優秀賞を取ったランタンの作り方【7つのコマンドを覚えればOKです】

ごきげんよう、最近ALPサポーターの称号を頂いたWakkunです。

Fusion360に出会ってから半年ほど経った10月に、学生デザインコンテストなるものが開催されていたのでランタンを作って提出したのですが、なんと最優秀賞を頂くことができました。
![Lanthanum v1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885096/b36fb525-d95e-b9f3-6522-3aea4124562c.png)
こちらがそのランタンです。

3DCADと聞くと難しそうだと思うかもしれませんが、やってみると意外と単純ですよ。
#基本の３コマンド
![スクリーンショット 2020-12-13 19.10.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/885096/48382b59-852b-0a40-e6dd-6ef944eba93d.png)
このランタンを例にするとほとんどが以下の３つのコマンドで構成されています。
※他のコマンドを使う元となるスケッチコマンドを除く

- 押し出し　
- ロフト
- パイプ

###押し出し
全てのコマンドの中で最も基本的で使用頻度の高いコマンドです。
文字通り平面に描いた図形を押し出して立体を作ります。
土台の底、ガラスの内部、蓋、ダイヤルを作るのに使っています。
このコマンドはとても汎用性が高く、押し出しだけで作った作品を争う「押し出しコンペ」なるものが毎年開催されています。Twitterで＃Fusion360押し出しコンペ３を調べるとこのコマンドが持つ無限の可能性を垣間見ることができますよ。

###ロフト
離れた2つの平面に描いた図形を自動でつなぎ合わせて立体を作ってくれるコマンドです。
土台とガラスの上下にあるパーツ、蓋を作るのに使っています。
同じ図形の組み合わせでも離す距離や大きさ次第で様々な立体を作れるので色々なパターンを試すと楽しいですよ。

###パイプ
線を基準に任意の太さのパイプを作ってくれるコマンドです。
似たコマンドにスイープがありますが、断面の形状が円に限られる代わりに平面と線を両方用意する必要のあるスイープよりも手軽に立体を作れるのがパイプの利点です。
このランタンでは最も使用頻度が高く、ガラスの内部、取っ手、フックなどに使っています。

#その他使用したコマンド
上で紹介したコマンド以外に以下の３つを使えば同じランタンを作ることができます。

- フィレット
- 回転
- シェル

###フィレット
作成した立体の角張ったところを丸めるコマンドで仕上げの際によく使います。
土台、ダイヤル、光る部分、フックの端に使っています。

###回転
平面に描いた図形を元に回転体を作るコマンドです。
ガラス部分の卵形を作るのに使いました。
押し出しコンペでチェスの駒を作ったので私にはこのコマンドのありがたみがよくわかります...

###シェル
立体を側面の形状に沿ってくり抜くコマンドです。
ガラスの部分とガラスを支える部分に使っています。
使用頻度はそこまで高くありませんが知っていると作れるものの幅が広がりますよ。
あと3Dプリンターで出力する場合は裏側を肉抜きして材料を節約するnにも使えます。

#まとめ
こうして振り返るとそこまで多くのコマンドを覚えずともFusion360でそれっぽい形状を作れることがお分かり頂けると思います。

しかもFusion360は学生なら無料で使えちゃうんですよ！
学生の皆さんは是非[こちら](https://www.autodesk.co.jp/education/edu-software/overview?sorting=featured&page=1)からFusion360をダウンロードしてみてくださいね。

そして実は今回紹介した学生デザインコンテストは2021年1月まで毎月開催されます！
12月と1月の分は今からFusion360をはじめても間に合いますよ。
継続するのに良いモチベーションになると思うので[こちらのページ](http://www.myautodesk.jp/fusion360-contest-2020/)でその月のテーマを確認してコンテストに応募してみてくださいね。
詳細な応募方法については[こちらの動画](https://www.youtube.com/watch?v=a562_erwI8o&t=642s)を参照してください。

私も応募するので是非競い合いましょう！
Xcode Simulatorの位置情報シミュレーション

# Simulator上で移動
iOS シミュレータの設定で、限定的ですが位置情報のシミュレーションが可能です。
<br>
（XcodeのDebugメニューからSimulate Locationを選べば、経路込みで移動のシミュレーションもできます。以下で説明するのはSimulator側のメニューから簡易的に行う方法です。）

## やり方
Xcode version : 12.1
Simulatorのメニューから、「Features」->「Location」と進みます。<br>
6つのメニューから使いたいものを選びます。

- None<br>
なし。動きません。
- Custom Location...<br>
緯度と経度を指定してその地点にいる状態になります。
- Apple<br>
Apple Campus（旧Apple本社）の前にいる状態になります。Mapで見るとここ。

<div style="text-align: center">
　　　　　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689316/e9d9ddea-31c2-9b5a-2ae8-04d6eedca57e.png" alt="stay" width="250"/>
</div>

- City Run / City Bicycle Ride <br>
走る / 自転車の速度でAppleの位置から移動している状態になる。（赤矢印参照）

<div style="text-align: center">
　　　　　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689316/8b575800-bcf0-11ac-aa38-d81d01a1e560.png" alt="run" width="250"/>
</div>


- Freeway Drive <br>
Appleの位置の近くの道路を車の速度で移動している状態になる。（赤矢印参照）
<div style="text-align: center">
　　　　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689316/398e5314-fcc4-f29e-e59b-3aaaafee2d0d.png" alt="car" width="250"/>
</div>


<br>
アプリの動作確認で使えるかもね。
とにかくiOSアプリ開発でのキャッシュを削除したい場合に使うコピペコマンドまとめ

# とにかくiOSアプリ開発でのキャッシュを削除したい場合に使うコピペコマンドまとめ
React Native想定。

## Xcode系一覧

```bash
rm -rf ~/Library/Caches/com.apple.dt.Xcode/
xcodebuild clean
xcodebuild -alltargets clean
xcodebuild clean
xcodebuild -alltargets clean
xcrun -k
xcrun simctl erase all
rm -rf ~/Library/Developer/Xcode/iOS\ DeviceSupport/*/Symbols/System/Library/Caches    
rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang.$(whoami)/ModuleCache"
rm -rf ~/Library/Caches/Homebrew
brew cleanup -s
rm -rf $(brew --cache)
rm -rf ~/Library/Caches/SwiftLint
pod cache clean --all
rm -rf ~/Library/Caches/org.carthage.CarthageKit 
rm -rf ~/Library/Caches/carthage
rm ~/.fastlane/spaceship/**/cookie
end
```

## React Native系一覧

プロジェクト配下で使用想定。

```bash
watchman watch-del-all
rm -rf node_modules/
yarn install
yarn cache clean
rm -rf ~/Library/Caches/CocoaPods
cd ios && rm -rf Pods/ && pod install && cd ..
end
```

## 参考URL

- [iOSアプリ開発でのキャッシュ削除方法まとめ](https://qiita.com/shtnkgm/items/c96a58579ec406194fa8)
- [React NativeでiOSのシミュレータが起動しないときにやることリスト](https://qiita.com/yuitnnn/items/62a8c95de14f494ee15f)
スクレイピングのrequestsについて

はじめまして！IoTエンジニアになるためにPythonを勉強しています。

ここには自分の勉強に関しての記録を書いていくつもりです。
スクレイピングの学習について記録を今回は残します。

・requestsの使い方
使い方としては、最初にimport requestsを記述して使えるように宣言します。

そして、変数responseにrequests.get()で引数にスクレイピングするサイトurlを入力してサイトのHTMLを入手します。
![スクリーンショット 2020-12-13 20.59.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/681147/bafa3433-66ec-3d5f-4a95-d64f1c64e28f.png)


今回は、yahooニュースをスクレイピングしてみました。

データとして整形する方法は次回にします。
まだまだ初心者なのでPythonの知識も少ないので、いろいろ間違いはあると思いますので指摘していただければと思います。
ではまた。