OmniAICreator/Qiita-1.07M huggingface dataset:
androidx.appcompat.widget.Toolbar のタイトルとアイコンの色を変える方法

# 実装

```activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout ..>
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        app:theme="@style/ToolbarTheme" />
```

```styles.xml
<resources>
    <style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
        <!-- ToolBarのタイトルテキスト色 -->
        <item name="android:textColorPrimary">@color/colorWhite</item>
        <!-- iconの色 -->
        <item name="colorControlNormal">@color/colorWhite</item>
    </style>
</resources>
```

# 参考

- https://qiita.com/konifar/items/aacfe9402f76c6f9f4b4
- https://stackoverflow.com/a/33339119
Laravel mailTrapでメール送信テスト　備忘録

# 本記事で達成できること
Laravelでmailtrapを利用したメール送信テストを実装できるようなる。
mailtrapとはメールを送信しても実際の宛先には飛ばさず、Webサイトから確認できるというサービス。

# 開発環境
cloud9
php 7.0 ※バージョン確認コマンド
> php -v


Laravel 5.3.31 ※バージョン確認コマンド
> php artisan --version

# mailTrapでユーザー登録
以下の記事を参考に登録を行う。
[メールの絡む開発にはmailtrapがおすすめ](https://qiita.com/konkon/items/c6c36f1251c7f5961eed)

# Laravel側の設定
`.env` ファイルを開き、以下の初期値を変更する。

変更前：

```
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
```
変更後：

```
MAIL_DRIVER=smtp
MAIL_HOST= smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=[MailtrapのUsername]
MAIL_PASSWORD=[MailtrapのPassword]
MAIL_ENCRYPTION=null
```
上記の`MAIL_USERNAME`と`MAIL_PASSWORD=`の項目はmailTrapから情報を参照。
<img width="1041" alt="スクショ.png" src="https://qiita-image-store.s3.amazonaws.com/0/254495/29d3c329-cf5f-ea8f-8080-df11c8bb8a71.png">

# メール送信のスクリプト
以下コマンドでメーう送信のために必要なクラスを生成。

```
php artisan make:mail SendMail
```
cloud9上の以下のディレクトリ配下にファイルが生成されていることを確認。

```
app/Mail/SendMail.php
```

以下のようなファイルが生成される。

```php:SendMail.php
<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendMail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('view.name');
    }
}
```
build()メソッドに変更を加える。

```
public function build()
{
    return $this
        ->from('example@example.com')
        ->subject('テスト送信完了')
        ->view('emails.test');
}
```
※　変更を加えた`view('emails.test');`にてメールテンプレートを作成するように記述しているが、テンプレート作成方法に関しては割愛させていただきます。

生成したファイルをインスタンス化してメールを送信するために、
とりあえずroutingは以下のように設定した。

```php:web.php
// つまり "TestMailController" の sendメソッド を利用してメールを送信する
Route::get('/mail','TestMailController@send');
```
cloud9上の以下のディレクトリ配下に,

```
app/Http/Controller
```
TestMailControllerファイルを作成。

```php:TestMailController.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\TestMail;

class TestMailController extends Controller
{
    public function send(){
        return Mail::to('ryoma@gmail.com')->send(new SendMail());
    }
    
}
```
sendメソッドを発火させればmailTrapのダッシュボード上で
メールを受信できていることを確認できる。


以上

参考にした記事:[MailtrapでLaravelの簡単メール送信テスト](https://qiita.com/ubonsa/items/5514fb9c5d5783bcc758)
listViewに置かれたボタンからdialog fragmentを表示しようとして泥沼だった話

今回はかなり苦戦しました。（毎回ですけど）

タイトルの通りです。

どうにかこれを達成できたのでその手順を書きます。

まず全体の流れは

※④を訂正し、③を打ち消しました。（2019/3/7）

①listViewでクリックイベントの結果を取得
→②"listViewを表示しているfragment"に上述の結果を渡す

→③"上述のfragmentを表示しているactivity"に上述の結果を渡す

→④　②のfragmentでdialog fragmentを表示する（訂正あり）

このようなややこしい流れになりました。

コメント欄にてご指摘をいただきましたが、③は完全に勘違いで、activityからしかdialogFragmentを呼び出せないということはなく、fragmentからdialogFragmentを直接呼び出すことが可能でした。④にて後述します。



というわけで手順を①から見ていきます。

①listViewでクリックイベントの結果を取得

```java
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    // ここに処理を書く
    }
});
```

これは毎度おなじみですね。
R.id.buttonのbuttonの部分は、xmlファイルのコンポーネントのIDと同じにしてください。


②"listViewを表示しているfragment"に上述の結果を渡す
これがなかなか見つからなかったコードです。

```java:SomeAdapter.java
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // ここに処理を書く
        ((ListView) parent).performItemClick(v, position, R.id.button);
    }
});
```

```java:SomeFragment.java
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (view.getId()) {
            case R.id.button:
                //buttonがclickされたらここに飛びます
        }
    }
});
```

以上の処理で、fragmentに飛べます。

parentってなんぞや。
→getViewの引数、ViewGroupです。

positionってなんぞや。
→これもlistViewの引数getViewのint型の引数です

※getViewはアダプターを作るときに呼ばれるメソッドです。検索したら出てきます。






④　②のfragmentでdialog fragmentを表示する（訂正あり）
アクティビティにdisplayDialogメソッドを追加します

```java:SomeFragment.java
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (view.getId()) {
            case R.id.button:
                //buttonがclickされたらここに飛びます
                SomeDialogFragment dialog = new SomeDialogFragment();
                dialog.show(getFragmentManager(), "tag");
        }
    }
});
```


dialog fragmentをインスタンス化してshowメソッドを呼ぶだけで表示できたようでとても悲しいです。
あと、getFragmentManagerとgetSupportFragmentManagerの違いについてもご指摘をいただきました。
以下はコメント欄の引用です。

>バージョン違いではなく、継承元のクラスが何か、によって、getSupportFragmentManagerを使うべきなのかgetFragmentManagerを使うべきなのかが変わります。

>android.app.Activityと、
android.app.DialogFragment
android.app.Fragment
なら、
Activity#getFragmentManagerを使う

>android.support.v7.app.AppCompatActivityと、
android.support.v4.app.Fragment
android.support.v4.app.DialogFragment
なら、
AppCompatActivity#getSupportFragmentManagerを使う

>この組み合わせで使わないと、いろいろと不具合が起こります。
そして、API28(AndroidP)から、android.app.DialogFragmentとandroid.app.Fragmentは非推奨となったので、実質、後者の組み合わせで行くべきかと思います。


どっちかが新しいんだろうなくらいの感覚でテキトーにoption + enterで追加していたので、きちんと組み合わせがあったらしくちょっと感動しました。

@kasa_le さん
この度はありがとうございました。
精進します！

という感じでした。
InAppBrowserのバグについて【Ionic】

はじめまして、ますみです！

[![自己紹介.png](https://www.umi-mori.jp/wp-content/uploads/2023/02/introduction_banner_2-2048x533.png)](https://bit.ly/banner_intro_masumi_creator_qiita)


# はじめに

開発環境は次の通り`ionic 4.8.0`です。（プロジェクトは`v3`）
<img width="800" alt="Screen Shot 2019-03-07 at 15.04.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/240280/9e21bc02-7cda-8992-1795-697ca8d16d79.png">

# バグ内容
ionic v3で**in-app-browser**を使おうとしたら、次のようなバグが出てきてしまった。

```
Type 'InAppBrowserOriginal' is not assignable to type 'Provider'. Type 'InAppBrowserOriginal' is missing the following properties from type 'FactoryProvider': provide, useFactoryts(2322)
```

## バグの原因
おそらくionicのバージョンアップ（正確にはInAppBrowserのバージョンアップ）によって、仕様が少し変わったため。

## デバッグ方法
一度アンインストールし、少し前のバージョン（`4.17.0`）を入れ直す。

`terminal:debug
npm uninstall --save @ionic-native/in-app-browser
npm install --save @ionic-native/in-app-browser@^4.17.0

# 最後に
最後まで読んでくださり、ありがとうございました！
いかがだったでしょうか？

この記事を通して、少しでもあなたの学びに役立てば幸いです！

:::note info
【仕事の相談はこちら】
お仕事の相談のある方は、下記のフォームよりお気軽にご相談ください。

[問い合わせフォームはこちら](https://forms.gle/G5g1SJ7BBZw7oXYA7)

もしもメールでの問い合わせの方がよろしければ、下記のメールアドレスへご連絡ください。

info*galirage.com（*を@に変えてご送付ください）

🎁 「生成AI活用の無料相談券」もしくは「生成AIの社内ガイドライン（無料PDF）」を『公式LINE』で配布中 🎁
『生成AIを業務に活用したいけど、どうしたらいいかわからない』といった声を多くいただきます。

Galirageでは公式LINEにて、チャットやオンライン会議で「完全個別の生成AI活用無料相談会」を実施しております！
（期間限定で実施しているため、ご興味ある方はお早めに以下のLINE公式アカウントをご登録ください^^）
https://lin.ee/rvz6lMN

※ 予告なく、キャンペーンを終了する可能性がございますが、ご了承ください。

【業務内容】
具体的には、以下のお仕事を中心に受け付けております！（[詳しくはこちら](https://galirage.notion.site/Galirage-AI-c2f3945fafb0433d8d2fd03e56927fd8)）
1. 受託開発（例：生成AIを使った社内システムの開発）
2. コンサルティング（例：技術戦略のアドバイス）
3. 講演（例：社内研修、イベント登壇）

※ 特に「生成AIを使ったシステム開発のご依頼」が多く、ご好評いただいております。

【これまでの相談事例】
以下のようなご相談が多くあります。

🔑 機密情報を漏洩させないための、生成AIのシステム構築をお願いしたい。
🤖 自社データを用いたFAQチャットボットの作り方を知りたい。
💡 ChatGPTを、自分たちの事業にどのように活かせるか、アドバイスやアイデアが欲しい。
:::
# おまけ
エンジニアの仲間（データサイエンティストも含む）を増やしたいため、公式LINEを始めました🎉

「**一緒に仕事をしてくれる方**」「**友だちとして仲良くしてくれる方**」は、友だち追加をしていただけますと嬉しいです！（仲良くなった人たちを集めて、「ボードゲーム会」や「ハッカソン」や「もくもく会」もやりたいなと考えています😆）

とはいえ、みなさんにもメリットがないと申し訳ないので、特典を用意しました！

友だち追加後に、アンケートに回答してくれた方へ「**エンジニア図鑑（職種20選）**」のPDFをお送りします◎

https://lin.ee/hFUN4TL

[![](https://www.umi-mori.jp/wp-content/uploads/2023/10/line_banner_v2.png)](https://lin.ee/hFUN4TL)
集中力が低いプログラマへ

# 今働いている会社はオープンオフィスだ。

開放的ではあるが気が散りやすい環境。

プログラマはイヤホンで耳を塞ぐことが出来るが、視覚情報だけのハックで本当に大丈夫だろうか。

そんな装備でジャングルを生き延びられるか。

# 視覚情報も意外と気を散らすものだ。

人が歩く姿を見ると自然に眼球移動が起こっていることに気づく。

注意残余が起こればそこからの回復に数十秒はかかる。

最高の集中状態で何も他に目につかないならば良い。

# だけど中程度の集中状態のときにはほんの少しの視覚刺激でも甚大なダメージがある。

これは特に集中力がないと自覚するプログラマに実践してほしい。

物理的に半分パーティションを作る方法だ。

たとえば僕は今日、人の通りが多い方面に向かって使っていないディスプレイを設置した。

# まるでついたてみたいに。

これで周辺視野で気を散らすものを少しだけ減らすことが出来た。

この効用は大きいと思う。

僕が思うに集中レベルの高いプログラマというのは、物理的に目が鈍感だったり、聴覚の感受性が低かったりして、自分の世界にこもりやすい環境にあるのではないか。

# そんな推測を僕は持っている。

なので集中力を高めるには精神に訴えるのではなく、モチベーションに訴えるのでもなく、物理的に刺激の少ない状態を再現するのが良い。

もしあなたが視覚過敏や聴覚過敏であれば、物理的なハックにより、こんなに安らぎに満ちた世界があったのかと驚くかもしれない。

まさに僕自身がそうだった。

# 聴覚刺激に対しては耳栓とイヤーマフを二重でつけて対策している。

イヤホンでも良いのだが音楽さえ気を散らす。

静寂と音の壁ではずいぶんとニュアンスが違って感じられる。

あとは取り外しのしやすさも耳栓やイヤーマフの方が優れているように思う。

# ディープワークという本にも書かれているように集中状態には静寂は必須だ。

これを何らかのハックで対策しようとするとオリンピックのアスリート並のテクニックや、瞑想の超上級者並の禅が必要とされるだろう。

僕らは人間である前に動物なので環境には勝てない。

心せよ。

# 物理が敵なら同じく物理がまた僕らの味方だ。

聴覚の静寂、視覚の静寂、耳栓、イヤーマフ、自作パーティションもどき、ニット帽。

念じよ。

# Original Text

集中力が低いプログラマへ。今働いている会社はオープンオフィスだ。開放的ではあるが気が散りやすい環境。プログラマはイヤホンで耳を塞ぐことが出来るが、視覚情報だけのハックで本当に大丈夫だろうか。そんな装備でジャングルを生き延びられるか。視覚情報も意外と気を散らすものだ。人が歩く姿を見ると自然に眼球移動が起こっていることに気づく。注意残余が起こればそこからの回復に数十秒はかかる。最高の集中状態で何も他に目につかないならば良い。だけど中程度の集中状態のときにはほんの少しの視覚刺激でも甚大なダメージがある。これは特に集中力がないと自覚するプログラマに実践してほしい。物理的に半分パーティションを作る方法だ。たとえば僕は今日、人の通りが多い方面に向かって使っていないディスプレイを設置した。まるでついたてみたいに。これで周辺視野で気を散らすものを少しだけ減らすことが出来た。この効用は大きいと思う。僕が思うに集中レベルの高いプログラマというのは、物理的に目が鈍感だったり、聴覚の感受性が低かったりして、自分の世界にこもりやすい環境にあるのではないか。そんな推測を僕は持っている。なので集中力を高めるには精神に訴えるのではなく、モチベーションに訴えるのでもなく、物理的に刺激の少ない状態を再現するのが良い。もしあなたが視覚過敏や聴覚過敏であれば、物理的なハックにより、こんなに安らぎに満ちた世界があったのかと驚くかもしれない。まさに僕自身がそうだった。聴覚刺激に対しては耳栓とイヤーマフを二重でつけて対策している。イヤホンでも良いのだが音楽さえ気を散らす。静寂と音の壁ではずいぶんとニュアンスが違って感じられる。あとは取り外しのしやすさも耳栓やイヤーマフの方が優れているように思う。ディープワークという本にも書かれているように集中状態には静寂は必須だ。これを何らかのハックで対策しようとするとオリンピックのアスリート並のテクニックや、瞑想の超上級者並の禅が必要とされるだろう。僕らは人間である前に動物なので環境には勝てない。心せよ。物理が敵なら同じく物理がまた僕らの味方だ。聴覚の静寂、視覚の静寂、耳栓、イヤーマフ、自作パーティションもどき、ニット帽。念じよ。tags:qiita

# Links

- [いなうらゆうまはここにいた 2019-03-07](https://github.com/YumaInaura/YumaInaura/issues/656#s1551937711)



# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/659








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
[ANDROID]CPUとアーキテクチャとABIの関係

Androidアプリ開発中に、外からとってきたsoファイルを使いたいとする。(openCVとか)
大体、armeabi-v7a用とかx86用とか書いてあるけど気にせず全部jniLibs直下にコピーする。
実際、どの端末でどのsoファイルが動いてるかよく知らない。そもそもarmとかx86とか何？
そんな自分のための記事。

#ARM? X86? MIPS?
android端末のCPUに適用される命令セットアーキテクチャ（または、CPUそのもの）の名称を指す。
**arm**であれば、arm社のarmアーキテクチャが
**X86**なら、Intel社のIntel 8086、またその後方互換のアーキテクチャ、
**MIPS**なら、ミップス・コンピュータシステムズ（現ミップス・テクノロジーズ）社のアーキテクチャがそれぞれ適用されているCPUであるということになる。

#命令セットアーキテクチャが違うと?
C/C++言語で書いたコードは、ターゲットとする命令セットアーキテクチャに対してコンパイルし、専用の実行バイナリファイルを作成する。
つまり、他の命令セットアーキテクチャのためにコンパイルされたバイナリファイルは動かない。なので、openCVなどのオープンソースはどのCPUを積んだ端末でも動くよう、それぞれの命令セットアーキテクチャに合わせたsoファイルを用意している。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/372804/4789805c-293d-43b8-4acd-c072d6f5a7fa.png)
[OpenCV4Android SDK](https://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/O4A_SDK.html)
androidにおいては、その命令セットアーキテクチャの違いをABIという定義で管理する。

#ABIとは?
Application Binary Interfaceの略
正式な定義は、
"ABI は、アプリケーションのマシンコードが実行時にシステムとやり取りする方法を詳細に定義したもの"
[Android Developers->NDK ABI管理](https://developer.android.com/ndk/guides/abis)

適当な覚え方は、
端末のCPUと命令セットに応じて定義するディレクトリの名称。soファイルを入れるところ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/372804/185c3e4d-ab4c-a03b-9b45-28b1968750a6.png)

端末Aでは動いたのに、端末Bでは"Fatal Exception: java.lang.UnsatisfiedLinkError"でアプリが落ちたみたいなとき、端末Bに対応するABIのsoファイルを入れてなかったりする。

#端末ごとの調べ方(手元に調べたい端末がない時)
仮にNexus10でsoファイルを含むアプリを動かしたいとする。
1. Nexus10のCPUを調べる。
⇒https://ja.wikipedia.org/wiki/Nexus_10
⇒ARMのCoretex-A15ベースのExynos 5250

2．Coretex-A15のアーキテクチャを調べる。
⇒https://ja.wikipedia.org/wiki/ARM%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3
⇒v7-a
![image.png](https://qiita-image-store.s3.amazonaws.com/0/372804/f93637aa-a5ef-f56e-d563-a038429f6c69.png)


3．対応するABIを調べる。
⇒https://developer.android.com/ndk/guides/abis
⇒armeabi-v7a
![image.png](https://qiita-image-store.s3.amazonaws.com/0/372804/0d95ce27-404a-4a2a-92b0-101199991ef9.png)


なので、"armeabi-v7a"においたsoファイルが動いてることになる。

#端末ごとの調べ方(手元に調べたい端末がある時)
"adb shell"でつないで、"$ getprop | grep cpu"を叩くだけ。
\[ro.product.cpu.abi]: [armeabi-v7a] 
ABIが表示されすぐにわかる。

#サポートしているABIのsoファイル入れてないのになぜか動いてるけど。。。
ARMであれば、armeabi → armeabi-v7a → arm64-v8aの順に新しい。
基本的に下位互換性があるので、Nexus10であれば、armeabi-v7aにsoファイルがなくても、armeabiのsoファイルでアプリは動く。

#参考記事
[Cプログラミング入門](http://gihyo.jp/dev/serial/01/c-programming-introduction/0001)
[【本当に32ビット?】Android端末の CPU の ABI を特定する](https://android.benigumo.com/20161222/android_cpu_abi_arm_x86/)
AE　二等辺三角形 二等分線 長さを知る

#知りたい事
![名称未設定-1.jpg](https://qiita-image-store.s3.amazonaws.com/0/178061/ac63e415-a9c2-1fef-b01f-a7edbe7af372.jpeg)

ポイントは角度がラジアンになってるのでdegreesToRadians（角度）メソッドを使って

#こう
![aaa.png](https://qiita-image-store.s3.amazonaws.com/0/178061/e9fa91c2-7fd7-ef0b-c6ea-399d1a14a389.png)

#参考にこれ
http://hensa40.cutegirl.jp/archives/163
イベント作品：2019ソレコン

# 2019年タカハソレコンの記録  

 &nbsp;&nbsp;初投稿ですこんにちは。 
今回は、ソレコンで出した作品を学内の制作展で提出するための資料としてこの記事を投稿します。

##何故この記事を書いたのか
&nbsp;&nbsp;私たちの作品は、[「第6回ソレコン」](http://www.takaha.co.jp/kokuchi/)に[「ドッキリ花火君」](https://youtu.be/6dhPGxB4ZrM)としてyoutubeに投稿されました。

[<img src="https://qiita-image-store.s3.amazonaws.com/0/371568/93b2bd6f-eb2f-e18f-ec80-6e89bdf19c13.png" width=70%>
※↑youtubeへの外部リンクです](https://youtu.be/6dhPGxB4ZrM)

資料として、実際の動画がネット上にあるのならば他の制作資料もネット上にあるほうが見やすいだろう、ということで記事にしました。

##まずソレコンって？
ソレコンとはタカハ機工株式会社様が主催する「ソレノイドを使った発明大募集！！」と謳うコンテストです。
[![alt](http://www.takaha.co.jp/solcon/img/index/main.jpg) ・ソレコン(ソレノイドコンテスト)](http://www.takaha.co.jp/solcon/index.html)

###ここで出てくるソレノイドとは？
&nbsp;&nbsp;コイルが生み出した磁界で、磁力を持たせた鉄の棒を吸い寄せて直線運動を生み出す部品です。モーターの直線版って思ってます。
[・ソレノイドについて](http://www.takaha.co.jp/solenoid/)

##本題：お手軽ドッキリIoTをDIY
&nbsp;&nbsp;ソレノイドの動作を見てまず思いついたのは**「マッチを擦らせて火をつけよう」**というものでした。
ただ、マッチに火をつける作品は過去にあったので、どうせなら何かに火をつけようと思い**「花火に火をつける」**作品を企画。さらに、スマホから遠隔操作して**ドッキリ**できたらもっと面白そうということでRaspberry pi3B+とAndroid things を使って実装しました。

作って面白そうな企画が練られたところで作業を開始。

###回路設計
![スクリーンショット (11).png](https://qiita-image-store.s3.amazonaws.com/0/371568/2f7ee065-ad94-f6ef-9fab-2a0ada93a494.png)


###本体イメージCAD
⇓ドッキリなので棚に仕込めるような形に設計
![スクリーンショット (10).png](https://qiita-image-store.s3.amazonaws.com/0/371568/a0aa1da6-28c6-409f-39da-a10f7176c2fe.png)

###使用部品
- ソレノイド = CBS12400320oT
- ダイオード = SB340LS
- MOS-FET = IRLB3813PBF
- 単3乾電池8本
- Raspberry pi3B+

###完成品がこちら

####⇓実際の展示ブース
<img src="https://qiita-image-store.s3.amazonaws.com/0/371568/f0e19d82-47a7-86f3-23a2-620e51650d01.jpeg" width=90%>


#最後に
- ソレコンという場でソレノイドについて知れたこと。
    1. 電子回路の実験 〜 組み立てまでの工程を成し遂げたこと
    2. Android thingsというIoT用OSについて知れたこと
    3. ソレコンに向けたスケジュール管理や学生のお財布事情を考えた予算管理、実際に必要なCAD作成ができたこと

これらを踏まえて、この作品が改めて表舞台に出てこられたことを嬉しく思います。
最後に、この記事とyoutubeの高評価をよろしくお願いします。
Go言語のMap

Go言語の中でMAPもよく使います。
ただし性能的にはArray、Sliceより遅いので、Array、Sliceを利用できる場合は、Mapを利用しないほうが良いと思います。

#mapの定義
##初期化なしの場合
var 変数名 map[キーの型]値の型 
例：

```go

var users map[string]string
fmt.Println(users)
```

出力：
> map[]

##初期化ありの場合
var 変数名 map[キーの型]値の型  = map[キーの型]値の型 {key1: value1, key2:value2}
例：

```go

var users map[string]string = map[string]string{"takana": "atakana amika", "join": "join simith"}
fmt.Println(users)
```

出力：
>map[takana:atakana amika join:join simith]

##makeで生成
例：

```go

var users map[string]string = make(map[string]string)
```

##値取得
変数名[キー]
例：

```go
var users map[string]string = map[string]string{"takana": "atakana amika", "join": "join simith"}
fmt.Println(users["takana"])
```

出力：
>atakana amika

##値変更
変数名[キー] = 新しい値
例:

```go
var users map[string]string = map[string]string{"takana": "atakana amika", "join": "join simith"}
users["takana"] = "tanaka amiko"
fmt.Println(users["takana"])
```

出力：
>tanaka amiko

##LOOPする
rangeを利用してLOOPできますが、順番は不定です。
例：

```go

var users map[string]string = map[string]string{"takana": "atakana amika", "join": "join simith"}
for key, value := range users {
   fmt.Println(key, ":", value)
}
```

出力：
>takana : atakana amika
>join : join simith

keyをsliceに保存して、sliceをソートした状態でLOOPすると、順番になります。

##存在チェック
```go

    var users map[string]map[string]string = make(map[string]map[string]string)

	users["tanaka"] = make(map[string]string)

	_, exist := users["tanaka"]
	fmt.Println(exist)

	_, exist2 := users["yamaha"]
	fmt.Println(exist2)
```

出力：
>true
>false

existがfalseの場合は初期化すれば、値の付与はできます。

以上
PHPで日付取得する方法、指定した日付から曜日を取得する方法


## 日付取得には大きく２つの方法がある。
①date(): 欠点として、2038年1月19日 までしか使用できない。
②datetime




## 指定した日付から曜日を取得する方法
strtotimeで取得する
`$date2=date('w',strtotime('20190307'));
    echo $date2;`
と入力すると、2019年３月7日の曜日が数値で出てくる。
【曜日に振り分けられている数値】
0:日
1:月
2:火
3:水
4:木
5:金
6:土
AEメモ CSVデータ配列の長さを知るとき

AEとCSV間でデータを簡単にやりとり出来て本当に素晴らしい。

CSVの配列の長さを知りたかったのでいろいろ試した結果これで取得出来た。

```jsx
Number ( thisComp.layer("TextData.csv")("データ")("Outline")("text").numProperties )
```

for文で繰り返す為Numberに変換してますが、元はオブジェクトで返ってきます。
Githubでブランチ間の差分を見る簡単な方法

##状況
本番環境へのデプロイを控えていた時に、ブランチ間の差分を確認したいと思い調べてみました。

##方法

以下の要領でURLを叩けばOKです。

- *リポジトリURL/compare/比較元ブランチ名...比較先ブランチ名*

```
【例】 新たに作成したkobushideブランチとmasterブランチの差分を比較したい
https://github.com/tokkun_ride/sample_repository/compare/master...kobushide
```

ポイントは次の２つの記載です

- /compare/
- ...


###参考記事
[github でブランチ・commit間の diff を見る](https://qiita.com/fantasista_21jp/items/9419ca4ab3bb8e1ee4c5)
php-master-changes 2019-03-06

今日はテストの不要コード削除、実質的に ZPP の挙動テストとなっているだけの過剰なテストコードの削除、truecolor の画像を GIF 出力する際にインタレースフラグが無視される問題の修正、ドキュメントの更新、符号付整数をシフトし過ぎて未定義挙動になっていた箇所の修正、コンパイラの条件式の整理 / 関数分離のリファクタがあった！

# 2019-03-06
## carusogabriel: Remove unnecessary check for always available extension
- https://github.com/php/php-src/commit/e907fbaf7cde03628a09f632a771dfcb16d72874
- [7.4~]
- ext/mbstring のテストで、PCRE 拡張（常にある前提）の存在チェックを削除

## nikic: Remove more zpp error tests
- https://github.com/php/php-src/commit/10b41136383c3245507ccbca51ac07384592acc6
- [7.4~]
- [昨日](https://qiita.com/sj-i/items/225f5db6ed41af381bea)に引き続き ZPP の実装をテストしているに過ぎないテストを削除

## cmb69: Fix [#77700](https://bugs.php.net/bug.php?id=77700): Writing truecolor images as GIF ignores interlace flag
- https://github.com/php/php-src/commit/41fb0eaa116da34fa531437d5b87ca73089e4944
- [7.2~]
- ext/gd で、truecolor の画像を GIF 出力する際にインタレースフラグが無視される問題の修正

## cmb69: Prolong my extension maintainership
- https://github.com/php/php-src/commit/76d60a90404e03c3c8edeeda0b5fa29973591857
- sqlite3 と gd の自分のメンテナ期間の記載を 2019 年に延長

## smalyshev: Update maintainership years
- https://github.com/php/php-src/commit/433fc322fc43e09279201bce43e0c465fc19378a
- gmp と intl の自分のメンテナ期間の記載を 2019 年に延長

## smalyshev: Fix shifting signed values too far
- https://github.com/php/php-src/commit/db777e9199a94f95416ea16baf82a7d10a0bbe51
- [7.4~]
- 符号付整数をシフトし過ぎて鼻から悪魔だった箇所の修正
- [UBSan](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html) で検知された奴らしい

## rjhdby: Cleanup some checks in zend_compile.c
- https://github.com/php/php-src/commit/1be120f6815ff5424583ef6b4cd4e1205345b962
- コンパイラの条件式の整理 / 関数分離のリファクタ
- [PR:3846](https://github.com/php/php-src/pull/3846)
- 最近この人コンパイラ寄りの部分のリファクタで数回見るようになった

## nikic: More zpp error/variation test removals
- https://github.com/php/php-src/commit/8c62c69265817bfd736ac77745cf7686a48d280c
- [7.4~]
- ZPP の実装をテストしているに過ぎないテストをもっと削除
Dockerfileのベースイメージをmysqlに指定した時に、sequel proに接続する方法

# はじめに
Dckerfile

```Dockerfile
FROM mysql:5.7
```
```docker-compose.yml
version: '3'
services:
  web:
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - .:/data
    ports:
      - '3000:3000'
    environment:
      - MYSQL_ROOT_PASSWORD=password
```
ベースイメージをmysqlにしているときに
webアプリケーションにlocalhost:3000で接続でき、sequel proにも接続したい。

Sequel Proの接続情報
host: 127.0.0.1
user: root
pass: password
port: 3000

これで接続できると思っていたが、接続できなかった。

# 解決方法
アプリ側のポートに"3306"を追加する

```docker-compose.yml
version: '3'
services:
  web:
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - .:/data
    ports:
      - '3000:3000'
      - '3306:3306' # 追加
    environment:
      - MYSQL_ROOT_PASSWORD=password
```
Sequel Proの接続情報
host: 127.0.0.1
user: root
pass: password
port: 3306

これで接続できた。めでたし、めでたし。
2019年の #スクラム フェス大阪で「ピンポン玉」のブレイクスルーゲームを体験してきた

# ブレイクスルーでブレイクするゲームだ。

10人程度がお互いに手を触れ合わさずに、全員でピンポン玉をリレーする。

120個をいかに運び切ることが出来るかという内容だ。

計画、実戦、振り返りを4ターン繰り返すという仕組み。

# 僕は勉強会は大の苦手だがやはり参加型は面白い。

さっきまで死んでいた体が急に動き出して饒舌になった。

僕は最初の火付け役になった。

これは結果論だけれど。

# この手のゲームに参加するのはほぼ初めてだったのだけれど、全4ターンの1回目は誰もがお見合い状態になり、まだ温まっていない状態。

僕はそこに切り込んで場を回す役割となった。

ピンポン玉を運ぶ個数は一度に一個きりとは誰も言っていない。

そんなルールは存在しない。

# いちどに二個運べるならば三個でも運べるかもしれない。

そのようなことを話しながら初回を乗り切った。

だが2回目3回目となると趣が変わってくる。

初回のブレイクスルーを起こしやすい人と、後半戦のブレイクスルーを起こしやすい人がいるかもしれない。

# 難しいのは後半戦だ。

最初のものはいずれ誰でも思いつくアイディア。

ブレイクスルーというよりはアイスブレイク役と言えるかもしれない。

そこでは皆がアイディアをひねっても、なかなか答えが見つからなくなってくる。

# 次に何をどうしたら今のスコアを大幅に塗り替えられるのか、分からなくなってくる。

なんだかひらめきそうな予感。

大技を何度も仕掛けて試すアイディアマンがある。

皆、それは無理じゃないかと言葉では口にするも、試してみなければ分からない、大きなブレイクスルーを波を起こすのはこういう人だ。

# これをブレイクスルーの予感と呼ぶ。

あとは他の役割にも問題が生じる。

このゲームでは回したピンポン玉の数を自分たちで数える方式なのだが、2周目3周目を回そうとなると、どのように数を加算すれば良いのかが分からない。

これはカウント役の人が問題を抱えているように見えた。

# 他の人からは見えにくい部分の問題発生だ。

このように短い時間ではあるが、チーム開発の様々なシチュエーションを体験することが出来る。

成功したにせよ失敗したにせよそれは大きな問題ではない。

いかにこの短時間の中で問題を観察し洞察が得られたかが重要なはずだ。

# なかなか有意義な時間だった。

この体験ワークショップが終わるとまた僕は無口なエンジニアに戻った。

# Original Text

2019年の #スクラム フェス大阪で「ピンポン玉」のブレイクスルーゲームを体験してきた。ブレイクスルーでブレイクするゲームだ。10人程度がお互いに手を触れ合わさずに、全員でピンポン玉をリレーする。120個をいかに運び切ることが出来るかという内容だ。計画、実戦、振り返りを4ターン繰り返すという仕組み。僕は勉強会は大の苦手だがやはり参加型は面白い。さっきまで死んでいた体が急に動き出して饒舌になった。僕は最初の火付け役になった。これは結果論だけれど。この手のゲームに参加するのはほぼ初めてだったのだけれど、全4ターンの1回目は誰もがお見合い状態になり、まだ温まっていない状態。僕はそこに切り込んで場を回す役割となった。ピンポン玉を運ぶ個数は一度に一個きりとは誰も言っていない。そんなルールは存在しない。いちどに二個運べるならば三個でも運べるかもしれない。そのようなことを話しながら初回を乗り切った。だが2回目3回目となると趣が変わってくる。初回のブレイクスルーを起こしやすい人と、後半戦のブレイクスルーを起こしやすい人がいるかもしれない。難しいのは後半戦だ。最初のものはいずれ誰でも思いつくアイディア。ブレイクスルーというよりはアイスブレイク役と言えるかもしれない。そこでは皆がアイディアをひねっても、なかなか答えが見つからなくなってくる。次に何をどうしたら今のスコアを大幅に塗り替えられるのか、分からなくなってくる。なんだかひらめきそうな予感。大技を何度も仕掛けて試すアイディアマンがある。皆、それは無理じゃないかと言葉では口にするも、試してみなければ分からない、大きなブレイクスルーを波を起こすのはこういう人だ。これをブレイクスルーの予感と呼ぶ。あとは他の役割にも問題が生じる。このゲームでは回したピンポン玉の数を自分たちで数える方式なのだが、2周目3周目を回そうとなると、どのように数を加算すれば良いのかが分からない。これはカウント役の人が問題を抱えているように見えた。他の人からは見えにくい部分の問題発生だ。このように短い時間ではあるが、チーム開発の様々なシチュエーションを体験することが出来る。成功したにせよ失敗したにせよそれは大きな問題ではない。いかにこの短時間の中で問題を観察し洞察が得られたかが重要なはずだ。なかなか有意義な時間だった。この体験ワークショップが終わるとまた僕は無口なエンジニアに戻った。tags:qiita

# Links

- [いなうらゆうまはここにいた 2019-03-07](https://github.com/YumaInaura/YumaInaura/issues/656#s1551934406)



# Original by Github issue

https://github.com/YumaInaura/zen/issues/28








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
対象範囲だけをAutoFitするExcelマクロ

##これは
選択中のセルを含む現在の範囲だけを対象にして列をAutoFitするためのマクロ。
１行目にタイトルとか書いてあるときにビヨーンとならない。
愛読している某ブログに載っていたネタを自分なりに作ってみた。

##コード
```vb
Sub SmartAutoFit()
    Dim ws As Worksheet, i
    With ActiveCell.CurrentRegion
        .Select
        If MsgBox("Are you OK?", vbOKCancel, "SmartAutoFit") = vbCancel Then Exit Sub
        Application.ScreenUpdating = False
        Set ws = Workbooks.Add.Worksheets(1)
        .Copy ws.Cells(1, 1)
        ws.Columns.AutoFit
        For i = 1 To .Columns.Count
            .Columns(i).ColumnWidth = ws.Columns(i).ColumnWidth
        Next
        ws.Parent.Close False
        Application.ScreenUpdating = True
    End With
End Sub
```

##追記
`ActiveCell.CurrentRegion` のところを `ActiveWindow.RangeSelection`にすれば、
自分で選択したセル範囲だけを対象にするようにもできる。どちらがいいかはお好みで。
Factory_girlからFactory_botに変更したときに詰まった話

ちょっと古いシステムの改修担当になり
環境整えたときにもろもろチェックしていたら`Factory_girl`を使っていたので
これを`Factory_bot`に変更するときにすこし躓いたので備忘録程度のメモ。

## 何はともあれ、Gemの修正
`Factory_girl_rails`がGemfileにかかれていたので
これを`Factory_bot_rails`に変更して`bundle install`

```
- gem "factory_girl_rails"
+ gem "factory_bot_rails"
```

※うちのプロジェクトではユニコーン周りでいろいろ干渉したため
  `bundle install --without production`を実行

## 正直これだけで大丈夫だと思ってた。
無事にgemのインストールが完了したのでテストしてみると
なにやらfactories以下のファイルでエラーが発生。

コードも何も修正してないのになんで？って思っていろいろググる
そしたら伊藤さんの記事に出会う。
[factory_bot 4.11で非推奨になった静的属性（static attributes）](https://qiita.com/jnchito/items/81637bbdf66c2662eacf)

まさかと思って自分の`Gemfile.lock`を確認しにいくと・・・

```
factory_bot (5.0.2)
  activesupport (>= 4.2.0)
factory_bot_rails (5.0.1)
  factory_bot (~> 5.0.0)
  railties (>= 4.2.0)
```

Oh...`4.11`どころか更に上の`5.0.2`まで上がってるのね。。
(2019/2/9にアプデされた様子)

## ということでコードを静的属性から動的属性に修正
記事内容にも書かれているように、`4.11`からファクトリ定義が
静的属性のままでは警告が出る仕様に変更になっている
(そしてバージョン５で完全に削除されている)ので、
これを自分のコードにも反映。

```
FactoryGirl.define do
  factory :test do
    trait :default do
      hogehoge     "TEST_TEMP" 
      fugafuga     "テスト用デフォルトテンプレート" 
      delete_flg   0 
    end
  end
end
```
から

```
FactoryBot.define do
  factory :test do
    trait :default do
      hogehoge    { "TEST_TEMP" }
      fugafuga    { "テスト用デフォルトテンプレート" }
      delete_flg  { 0 }
    end
  end
end
```
定義に`{}`をつけるだけの簡単なお仕事。
※１行目の`Girl`から`Bot`への修正も忘れずに・・！

これで、テストが通るようになったのでめでたし。




今回は、修正箇所がそこまで多くなかったので
手作業で変更していったが`rubocop-rspec`のgemをインストールして
以下のコマンドを実行すれば一括で修正してくれるみたい（便利

```
rubocop \
  --require rubocop-rspec \
  --only FactoryBot/AttributeDefinedStatically \
  --auto-correct
```
MultipeerConnectivityを使用した接続でserviceTypeに数値のみを設定するとクラッシュする

# 結論
設定できる条件は以下

 - 1文字以上、15文字以内
 - 使えるのは英数字とハイフン('a'-'z','A'-'Z','0'-'9','-')
 - 少なくとも1つの文字を含まなければならない('a'-'z','A'-'Z')
 - ハイフンで始まり or 終わりは不可
 - 連続したハイフンは不可

# なぜ？
[RFC](https://tools.ietf.org/html/rfc6335#section-5.1)によって定められています

# 数字だけを使うとどうなる？
実行時にクラッシュします😱

```swift:受信側.swift
let peer = MCPeerID(displayName: "MyDisplayName")
// 以下でクラッシュ
let nearbyAdvertiser = MCNearbyServiceAdvertiser(peer: peer, discoveryInfo: nil, serviceType: "111111")
```

```swift:送信側
let peer = MCPeerID(displayName: "MyDisplayName")
// 以下でクラッシュ
let nearbyBrowser = MCNearbyServiceBrowser(peer: peer, serviceType: "11111")
```

このように送信側、送信側どちらもクラッシュしてしまいます

# 最後に
serviceTypeを設定する際には気をつけましょう
【BigQuery】行に順番をつける関数を使ってランキング作成してみた【RANK関数】

##概要
BigQueryで、カラムに順番をつける関数を紹介します。
・RANK関数
・DENSE_RANK関数
・ROW_NUMBER関数

##使用テーブル: item_table


|user_id	|item|price|
|---|----|----|
|A	|みかん	|50|
|A	|りんご	|100|
|B	|りんご	|100|
|A	|もやし	|19|
|B	|りんご	|90|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/352801/243938b4-52e7-4e3f-7a0c-3a328462acac.png)

##研修１：RANK関数　値段の高い順に、列にランキングを追加する

price欄の値で高い順から順番に数字を振ります。

```sql:BigQuery　研修１

SELECT
  user_id,
  item,
  price,
  RANK() OVER (ORDER BY price DESC) AS rank_p
FROM
  test1.item_table;

```
上記を実行すると、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/352801/a7540671-1c43-1f39-1147-7845076ea088.png)

rank_pの列が追加されました。
一番priceが高い1行目、2行目のりんごが’1位’となり、降順でランキングができました。`RANK() OVER (ORDER BY price DESC)` という構文のorder by以降にランキングをつけるカラム名を入れ、<font color="DeepPink"> DESC </font>を加えることで降順（値が大きいものから低いもの）でランクが割り振られました。
DESCを記載しなければ、昇順でランクが振られます。

#研修2：DENSE_RANK関数　値段の高い順に、列に’重複しない’ランキングを追加する

研修1では、最も高いpriceが2つあったため、ランクのカラムに2つ’１’が立ち、’２’がなく、’3’が立ちました。
今度は重複した値があってもランクの数字を飛ばさないでランキングします。

```sql:BigQuery　研修２

SELECT
  user_id,
  item,
  price,
  DENSE_RANK() OVER (ORDER BY price DESC) AS rank_p
FROM
  test1.item_table;

```
上記を実行すると、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/352801/4f76a834-8bb9-fbaa-de65-ae4506a9e7d1.png)


しっかり1から順番にランクのカウントがされました。

##研修3：ROW_NUMBER関数　上から連番をつける
今度は先ほどまでとは違い、カラムの上から順番に連番付けていきます。行番号を付与するときに使えます。

```sql:BigQuery　研修３_１

SELECT
  user_id,
  item,
  price,
  ROW_NUMBER() OVER (ORDER BY price DESC)AS rank_p
FROM
  test1.item_table;

```
上記を実行すると、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/352801/78223b3a-324c-2550-7fe9-ced25eec376a.png)


無事1行目からランクが付加されました。
ちなみに特に何も指定せず、`row_number()over()`の列を追加すると。。。

```sql:BigQuery３_２
SELECT
  user_id,
  item,
  price,
  ROW_NUMBER() OVER ()AS rank_p
FROM
  test1.item_table;

```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/352801/18627115-0125-f112-e898-59d6bc14cd83.png)



ランダムで行を選び、上から連番で番号を振ってくれます。


#まとめ

今回扱った関数、
RANK関数は重複した番号は飛ばして、連番を振ります。
DENSE_RANK関数は重複した番号を飛ばさず、連番を振ります。
ROW_NUMBER関数は行に1つずつ重複のない、連番を振ります。

これら異なった関数を、臨機応変に活用し、使いこなせるようになりたいです💛
LG UltraFine 5K DisplayとWindowsノート(Lenovo X1 Carbon 2018)動作確認

#AppleStore限定のLG UltraFine 5K DisplayはWindows機で使えるのか
##結論
- Lenovo X1 Carbon 2018でThunderbolt接続して使えました（末尾追記あり）
    - 解像度は5120×2880まで選択可能
    - ディスプレイ内蔵のWebカメラも利用可能（動作確認：Windows10のアイコン撮影機能で確認）

##制限事項
- そもそもMac専用のノリだからサポート等期待できそうにない
    - AppleStore:https://www.apple.com/jp/shop/product/HKN62J/A/lg-ultrafine-5k-display
    - LG:https://www.lg.com/jp/monitor/lg-27MD5KA-B#tech-specs
- 明るさなど一切の調整ができない
    - Windowsのドライバとか調整アプリを見つけられてない
    - Windows10の設定画面＞ディスプレイ＞明るさと色＞明るさの変更　という調整値があるものの、グレーアウトして使えない
    - ディスプレイ本体にスイッチが無いので何も調整できそうにない

##追記
- BSoD出ました
    - 20時間くらい利用して、1度BSoDが出た
    - 再起動されてしまいBSoD画面のメッセージは確認できず（噂のBSoDのQRコード版初めてみた）
    - イベントログには以下のメッセージが記録されていた

> このコンピューターはバグチェック後、再起動されました。バグチェック: 0x000000d1 (0x0000000000000010, 0x0000000000000002, 0x0000000000000000, 0xfffff809f883b988)。ダンプの保存先: C:\Windows\MEMORY.DMP。レポート ID: 6b1e23b5-e508-4b43-88af-c23cc9c63267。
Custom URL Schemeに使える文字列

# URL Schemeには使える文字列が定められている
 [RFC](https://tools.ietf.org/html/rfc3986#page-17)によって定められています
 `scheme      = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )`

`文字列で始まり、n個以上の文字,数字,ハイフン,ドット,プラス` のみ


## ※アンダースコアやスラッシュは使えません
 ハイフンの代わりにアンダースコア(\_)やスラッシュ(/)を使いがちですが、無効なスキームになってしまうので気をつけるように
  ex... `sample_app://`, `sample/app://` などは**NG**
Docker Community Edition for Windows を入れる前に確認すること

Docker Community Edition for Windows をインストールしてみよ～っと…
と思っているそこのアナタ。

ちょっと待ってください。

Docker Community Edition for Windows を利用するためには CPU が [ハイパーバイザー（Hypervisor）](https://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%90%E3%82%A4%E3%82%B6) に対応している必要があります。

インストール前に以下の手順で CPU が ハイパーバイザー（Hypervisor）に対応しているか確認してみましょう。

（私はそのことを知らずに Docker Community Edition for Windows をインストールしようとしてエラーに見舞われ、少しのあいだ格闘した末に自身のパソコンの CPU がハイパーバイザー（Hypervisor）対応していないことを知りました…） 

### Coreinfo のダウンロード
※Coreinfo は、CPUの各機能や情報を確認するツールです
下記URLから Coreinfo をダウンロードして解凍します 
 https://technet.microsoft.com/ja-jp/sysinternals/cc835722

### コマンドプロンプトを起動し、Coreinfo を解凍したディレクトリまで移動して以下のコマンドを実行します
```
> Coreinfo.exe -v
```

すると以下のような情報が表示されるので、
HYPERVISOR の欄が「*」となっていれば CPU が ハイパーバイザー（Hypervisor）に対応しているということです。

```
HYPERVISOR      -       Hypervisor is present
VMX             *       Supports Intel hardware-assisted virtualization
EPT             *       Supports Intel extended page tables (SLAT)
```

無事「*」であれば Docker Community Edition for Windows をインストールしてみましょう。
残念ながら「-」だった場合は、諦めてVirtualBoxなどの仮想環境を立ち上げてDockerを弄りましょう。
Visual Studio Codeのよく使うショートカットと入れておきたいプラグイン(Mac)

#1.はじめに
動作も軽くプラグインも豊富で業務でもちょっと使用していたのでよく使うショートカットなどを備忘録兼ねて載せます。

###動作環境
Visual Studio Code バージョン1.31.1 (1.31.1)

#2.Mac装飾キーの記号
まずはいつも忘れるのでこれ大事。

| キー | 内容 |
:---|-------------:|
| ⌘ | command      |
| ^ | control      |
| ⇧ | shift        |
| ⌥ | option (alt) |

#3.よく使うショートカット
全然覚えていないので少ない。

| コマンド | 内容 | 備考 |
|:-:|:-:|:-:|
|⌘  + ⇧ + P|コマンドパレットを開く|   |
|⌥  + ⇧ + F|ファイル内全コード整形|   |
|⌘ + ,|設定を開く||
|⌘ + K の後に ⌘ + 0|すべてのインデントを折りたたむ||
|⌘ + K の後に ⌘ + J|すべてのインデントを展開||
|⌘ + K の後に ⌘ + [|カーソルのあるインデントを子インデント含め折りたたむ||
|⌘ + K の後に ⌘ + ]|カーソルのあるインデントを子インデント含め折りたたむ||



#4.入れておいたほうがいいプラグイン
僕はHTML,CSSのコーディングで使用しているだけなのでとりあえずこれだけ。

- **[IntelliSense for CSS class names in HTML](https://marketplace.visualstudio.com/items?itemName=Zignd.html-css-class-completion)**
CSSクラスを指定するときに、入力補完してくれる。
ワークスペースの中のCSSを読み込んでHTML上でクラス指定するときに入力候補を表示してくれる。

- **[Japanese Language Pack for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja)**
VSCの日本語化パッケージ。そのままでもいいのですが、やっぱり日本語の方が馴染みやすい。

- **Live HTML Previewer**
読んで字のごとく、HTMLをリアルタイムでプレビュー表示してくれる。
ただCSSを変更しても即時反映してくれず、プレビューし直さないといけなかった。

- **[HTMLHint](https://marketplace.visualstudio.com/items?itemName=mkaufman.HTMLHint)**
HTMLの構文チェックをしてくれる。

- **[HTML Snippets](https://marketplace.visualstudio.com/items?itemName=abusaidm.html-snippets)**
HTML5にも対応している追加スニペット。

###プラグインインストール方法
1.VSCを開いてサイドバーの一番下にあるアイコンをクリック。画像の赤矢印のところ。
<img width="386" alt="plugin_image.png" src="https://qiita-image-store.s3.amazonaws.com/0/184792/97e85b1f-1d2d-1030-fdb7-d36128c83981.png">

2.検索フィールドにインストールしたいプラグインのキーワードを入れる。
3.該当のプラグインの表示の中にインストールボタンがあるのでクリック。
4.「⌘ + q」でVSCを再起動。

#5.まとめ
iOS開発がメインだった為、テキストエディタはCotEditorぐらいしか使わずにいましたが、HTML、CSSをやっているのでこれを機にエディタを変えようと思い探していました。
Sublime、Atomとで迷ったんですが、先輩からのおすすめもありVSCにしました。
全く使いこなせていませんが、仕事していれば覚えるでしょう。
Let's do VSC!!
Guzzleを使ってSlack通知

#使用する環境
1 PHP7以上
2 Laravel5.x以上
3 動作確認用php artisan tinkerを使用する

#事前準備
1 Guzzle インストール
2 Slack Web hook URL 発行
3 .env SLACK_WEBHOOK_URL 設定(2で発行したURL)
上記は各自で設定してください

#適当な設定を行い、下記コードを実行
```php:example.php
$client = new \GuzzleHttp\Client();
$client->request('POST', env('SLACK_WEBHOOK_URL','https://hooks.slack.com/services/XXX/YYY/ZZZ'),
    [
        'json' => [
            "text" => "Guzzle\Client使ってPOSTしています"
        ]
    ]
);
```

#Example
```console
$ php artisan tinker
Psy Shell v0.7.2 (PHP 7.1.25 — cli) by Justin Hileman
>>>             $client = new \GuzzleHttp\Client();
=> GuzzleHttp\Client {#1111}
>>>             $client->request('POST', env('SLACK_WEBHOOK_URL','https://hooks.slack.com/services/XXX/YYY/ZZZ'),
...                 [
...                     'json' => [
...                         "text" => "Guzzle\Client使ってPOSTしています"
...                     ]
...                 ]);
=> GuzzleHttp\Psr7\Response {#1152}

```
<img width="346" alt="スクリーンショット 2019-03-07 13.08.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/165099/34d07b89-6933-a799-6b83-1e349c836566.png">

シュポポ！っと通知がくれば、動作確認OK
適当に通知を入れたい箇所に実装しても良いし、テキストだけ渡して通知を飛ばすヘルパーを書いても良いかもしれないですね。
かゆいところに・・・

# Linuxコマンド

## 隠しディレクトリ含め容量を計算

```
du -scm {ディレクトリパス} {ディレクトリパス}.[^.]* | sort -rn
```

## 〜日前ファイル削除

```
find {ディレクトリパス}} -mtime +30 -name "*.log" -type f -exec rm -f {} \;
```
Springでkeycloakのユーザー情報にアクセスした際のメモ

##背景
Keycloakの管理画面にユーザー管理が行えるが、お客様（利用ユーザー）によっては扱いにくい画面であるため、SpringのWEBアプリからKeycloakのユーザー登録や編集が行える画面を提供する必要がでてきた。

keycloakのユーザー情報をSpringで表示・追加・編集する場合に実装した際のメモを残しておく

## 前提条件
・SpringBoot2(SpringFramework5)
・Keycloak4

keycloak Clientでの接続も可能であるが、今回はKeycloakで提供されるAdmin REST APIを利用する方法する。

## 実装例

### gradle
```gradle:build.gradle
dependencies {
   implementation('org.keycloak:keycloak-spring-boot-2-starter:4.0.0.Final')
}
```

### properties
```properties:application.properties
# KeyCloak
keycloak.realm={レルム名}
keycloak.auth-server-url={keycloak URL}
keycloak.resource={リソース名}
keycloak.credentials.secret={シークレット値}
```

### Config

```java:WebSecurityConfig.java
@KeycloakConfiguration
public class WebSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {

@Autowired
public KeycloakClientRequestFactory keycloakClientRequestFactory;

@bean
public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
    return new KeycloakSpringBootConfigResolver();
}
@Bean
public KeycloakRestTemplate keycloakRestTemplate() {
　  return new KeycloakRestTemplate(keycloakClientRequestFactory);
}


```

### Controller

ユーザー取得の実装例

```java:KeycloakUserController.java
@Controller
@RequestMapping("/keycloak/user")
public class KeycloakUserController {
   @Autowired
   private KeycloakRestTemplate template;

   @RequestMapping(path="/list", method=RequestMethod.GET)
   public String list(@ModelAttribute("form") KeycloakUserListForm form, Model model) {
		String url = "http://{keycloakホスト}/auth/admin/realms/{レルム名}/users";
		ResponseEntity<UserRepresentation[]> response = template.getForEntity(url, UserRepresentation[].class);
		model.addAttribute("users", response.getBody());
		return "keycloak/user/list";
	}

```

ユーザー登録の実装例

```java
String url = "http://{keycloakホスト}/auth/admin/realms/{レルム名}/users";

CredentialRepresentation credentials = new CredentialRepresentation();
credentials.setValue("test"); // パスワード
credentials.setType(CredentialRepresentation.PASSWORD);
credentials.setTemporary(false);

UserRepresentation user = new UserRepresentation();
user.setEnabled(true);
user.setUsername("yamada"); // ユーザー名
user.setLastName("yamada");
user.setFirstName("taro");
user.setCredentials(Arrays.asList(credentials));

template.postForEntity(url, user, Void.class);

```

ユーザー更新の実装例

```java
String url = "http://{keycloakホスト}/auth/admin/realms/{レルム名}/users/{ユーザーID}";

// ユーザー情報更新
UserRepresentation user = new UserRepresentation();
user.setLastName("sato");
user.setFirstName("ichiro");
template.put(url, user);
```

ユーザーのロール設定更新

```java
String url = "http://{keycloakホスト}/auth/admin/realms/{レルム名}/users/{ユーザーID}/role-mappings/realm";

List<RoleRepresentation> roleList = new ArrayList<RoleRepresentation>();
RoleRepresentation role = new RoleRepresentation();
role.setId("{設定したいロールのID}");
roleList.add(role);

template.postForEntity(url, roleList, Void.class);

```
react hooksを触って、"Hooks can only be called inside the body of a function component"が出た時の話

# 概要

ちゃんと`<Component .../>`形式で書かないとダメなようです。

## 経緯

先日少し作業が一段落したので、今更ながらreact-hooksを触っていました。
今まで作っていたもののうち1つを関数コンポーネント（以下FC）に置き換えようとし、さあ動確だとなったところ、

```
Uncaught Invariant Violation: Hooks can only be called inside the body of a function component.
```

というエラーが出て、上手く描画されない事態に遭遇しました。

## 誤解

確かに今までクラスコンポーネントで書いていた中、一部分だけを置き換えました。
また、利用側をFCに置き換えるとエラーが出ないので、「react-hooksを使うには全てFCにしないとダメなのか・・・？」と非常に焦りました。

## コード例

生JSのクラスと異なりTSのクラスは色々と便利なので、FCに置き換えた際でもクラスを使うことはやめていませんでした。
（この例だと省いていますが、実際にはサポート用ロジックを色々書いていました。）

```tsx

import * as React from 'react';
import * as ReactDOM from 'react-dom';

interface ChildComponentProps {
  title: string;
}

class ChildComponent { // FC形式
  public render(props: ChildComponentProps) { // このメソッドを呼び出すことで描画する
    const [title] = React.useState(props.title);
    return (
      <div>{title}</div>
    );
  }
}

class ParentComponent extends React.Component { // CC形式
  private _child = new ChildComponent();

  public render() {
    return (
      <div>
        {this._child.render({title: 'test'}}}
      </div>
    );
  }
}

ReactDOM.render(<ParentComponent />, document.getElementById('app'));

```

エラー原因を調査するまで、単に__関数やメソッド呼び出し等で仮想DOMを返せばFCになる__と思っていました。

## 解決方法

いろいろと調べた所、下の方と同じ現象に遭遇していることに気づきました。

https://medium.com/@jonchurch/how-to-fix-react-error-rendered-fewer-hooks-than-expected-e6a378985d3c

このとき初めて、__仮想DOMを関数で返すこと≠FC__という根本的な誤解に気づきました。
`<Component .../>`等の、Reactで取り扱う形式で記述して初めてFCとなるようです。
（確かにどこが境界なのかずっと疑問だったのと、Reactの仕組みを考えると当たり前なのですが…）

幾つか解決方法があるようですが、子のクラスインスタンスを保持する形式は変えたくなかったので、下記のように`ReactNode`を返すgetterを定義し、呼び出すようにしました。

```tsx

class ChildComponent {
  private _node!: (props: IChildComponentProps)=>React.ReactElement; // useMemo等に影響があるので、同一の関数にする

  public get createNode() { // このメソッドを追加
    if(!this._node) {
      this._node = (props: IChildComponentProps) => this.render(props)
    }
    return this._node;
  }

  public render(props: IChildComponentProps) {
    const [title] = React.useState(props.title);
    return (
      <div>{title}</div>
    );
  }
}

class ParentComponent extends React.Component {
  private _child = new ChildComponent();

  public render() { // JSX形式にする
    return (
      <div>
        <this._child.createNode title='test' />
      </div>
    );
  }
}

```


----

## 追記

[上に書いたクラスを正式化したもの](https://qiita.com/recordare/items/341fe3be45f482ee0723)を作りました。
FCとCCの間の子みたいな感じになっています。
Android Studio を Applications にコピーするときに「一部の項目へのアクセス権がないため、操作を完了できません。」と表示されてもあきらめない

# 環境
- macOS High Sierra 10.13.6 
- [Android Studio 3.3.2](https://developer.android.com/studio/releases/?hl=ja#3-3-0)

# 内容
<img width="742" alt="スクリーンショット 2019-03-07 11.17.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/79024cfc-3fae-58fd-c2ea-59383fcd1bdc.png">

[Android Studio 3.3.2](https://developer.android.com/studio/releases/?hl=ja#3-3-0) をインストールするときに

<img width="511" alt="スクリーンショット 2019-03-07 11.18.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/323a97a5-ee3f-7116-4392-0514b3c5629f.png">

こんなエラーが出た。

Applications へコピーしている最中、古いバージョンの Android Studio を起動しているのが原因かと思い終了させて再度チャレンジしてみたが変わらず。
（Android Studioをバージョンアップするとビルドが通らなくなったことがあるので、あえて Android Studio のアップデートではなくインストールしている。）

ググると

- アクセス権が設定されていないのでは？
- ルートユーザーでログインしてる？
- HDD が壊れているかも？

といった内容が出てきたので確認してみたがどれも大丈夫そう。
（最後のは そんなハズないし壊れていたら困る… と思って確認していない）

他に情報がないかググりつつ、エラーを無視して何度もコピーしつづけた。

<img width="511" alt="スクリーンショット 2019-03-07 11.45.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/0b6ac2d8-b5ff-4f28-6201-3805c57dee47.png">
<img width="511" alt="スクリーンショット 2019-03-07 11.18.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/323a97a5-ee3f-7116-4392-0514b3c5629f.png">

んー

<img width="511" alt="スクリーンショット 2019-03-07 11.17.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/d822a9be-8aac-a351-e2fe-f236edf0230a.png">
<img width="511" alt="スクリーンショット 2019-03-07 11.18.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/323a97a5-ee3f-7116-4392-0514b3c5629f.png">

んーー

<img width="511" alt="スクリーンショット 2019-03-07 11.45.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/9947afd3-2a26-cfae-0d87-28c052942d4d.png">
<img width="511" alt="スクリーンショット 2019-03-07 11.18.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/323a97a5-ee3f-7116-4392-0514b3c5629f.png">

おや？
地味にプログレスバー伸びてる？？

<img width="511" alt="スクリーンショット 2019-03-07 11.45.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/6f92a672-079a-6e58-4e67-8255ea24659e.png">
<img width="511" alt="スクリーンショット 2019-03-07 11.18.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/323a97a5-ee3f-7116-4392-0514b3c5629f.png">

これは伸びてるな！

<img width="511" alt="スクリーンショット 2019-03-07 11.45.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/34926/1b9d7ad4-b841-b127-093b-08026ad8306a.png">

いけたーーー！！

# まとめ
あきらめずに想いを伝え続ければ、想いは伝わる。
（なぜ少しずつコピーできたのか、調べてみたがわからずだった。。）
PhpStorm でファイル作成時にコードテンプレート使うと少し捗るよ (IntelliJ とかも同じはず。)

PhpStorm (IntelliJとかも) に、 Project Tree などから、コンテキストメニューを呼び出し、そこから指定のファイルを作成する機能があります。(あるいは、 `cmd + n`)

こんなやつ。

<img width="259" alt="スクリーンショット 2019-03-07 12.24.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/3243/38198b9c-da20-9303-c5d1-161f2f4dcccf.png">

例えば、 "PHP Class" を選べば、以下のようなダイアログが出てきます。

<img width="1036" alt="スクリーンショット 2019-03-07 12.26.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/3243/11bd3277-138e-a86f-7371-5ba4890e2fab.png">

この画像の例は laravel を使った Project なので、 composer.json から適切に NameSpace 等を読み込んで事前に入力済み状態になっています。

で、例えば、 `Name` に `HogeController` と入力して `OK` を押すと以下のようなファイルが生成されます。

```php
<?php
/**
 * Created by PhpStorm.
 * User: hokutoasari
 * Date: 2019-03-07
 * Time: 12:28
 */

namespace App\Http\Controllers;


class HogeController
{

}

```

これはこれで良いのですが、 Code Template を使うことで、もうちょっと便利になります。

## Code Template を設定して使ってみる

`Preferences` -> `Editor` -> `File and Code Templates` を開きます。

で、例えば、 "PHP Class" を以下のように編集します。

<img width="1186" alt="スクリーンショット 2019-03-07 12.31.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/3243/1a775090-791e-6f18-d303-930b5700e71d.png">

```php
<?php
declare(strict_types=1);
#if (${NAMESPACE})

namespace ${NAMESPACE};

#end

final class ${NAME} {

}
```

こうしておくと、さっきの `cmd + n` から "PHP Class" を選択して生成されるコードが以下になります。

```php
<?php
declare(strict_types=1);

namespace App\Http\Controllers;


final class HogeController
{

}

```

`declare(strict_types=1);` を先頭に入れて、 `namespace` を入れて、 class には `final` 修飾子を付けて、といった具合に Code Template に指定した内容に従って生成されます。

他にも使える値が Code Template の設定画面に書いてあるので、お好みの設定にすると捗る。

## ご参考までに

ちなみに、僕は以下の設定を行っています。

PHP File

```php
<?php
declare(strict_types=1);


```

PHP Class

```php
<?php
declare(strict_types=1);
#if (${NAMESPACE})

namespace ${NAMESPACE};

#end

final class ${NAME} {

}
```

PHP Interface

```php
<?php
declare(strict_types=1);
#if (${NAMESPACE})

namespace ${NAMESPACE};

#end
interface ${NAME} {

}
```

PHP Trait

```php
<?php
declare(strict_types=1);
#if (${NAMESPACE})

namespace ${NAMESPACE};

#end
trait ${NAME} {

}
```

PHPUnit Test

```php
<?php
declare(strict_types=1);

#if (${NAMESPACE})
namespace ${NAMESPACE};
#end

#if (${TESTED_NAME} && ${NAMESPACE} && !${TESTED_NAMESPACE})
use ${TESTED_NAME};
#elseif (${TESTED_NAME} && ${TESTED_NAMESPACE} && ${NAMESPACE} != ${TESTED_NAMESPACE})
use ${TESTED_NAMESPACE}\\${TESTED_NAME};
#end
use Tests\Unit\TestCase;

final class ${NAME} extends#if(${NAMESPACE}) TestCase #else PHPUnit_Framework_TestCase #end{

}

```

`./tests/Unit/TestCase.php` を用意して、 Unit Test に必要そうな便利メソッドをここに書いてるので、 `use Tests\Unit\TestCase;` して、 `extends TestCase` となるように書いてます。

デフォルトの laravel Project 状態なら `use Tests\TestCase;` で良いんじゃないかな。

## おまけ

`cmd + n` で表示させて状態で、おもむろに "php" とか入力するとインクリメンタルサーチになって便利ですよ。

<img width="300" alt="スクリーンショット 2019-03-07 12.25.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/3243/3df62b66-3326-ac53-b3e9-98f6498e3fea.png">
Ruby | 配列の奇数番目と偶数番目を取り出す方法

# 配列の奇数番目や偶数番目を取り出して新たな配列にする

配列の中から偶数番目または奇数番目の要素を取り出したいときに役に立ったので共有します。
今回は、`each_slice`メソッドと`map`メソッドを使用してやってみました。

参考記事
[each_slice (Enumerable) - Rubyリファレンス](https://ref.xaio.jp/ruby/classes/enumerable/each_slice)
[ある配列を任意の要素数の配列に分割したい - Qiita](https://qiita.com/QUANON/items/749f4a2a79dafdaff57f)

結論はこんな感じです。

```ruby
ary = [1,2,3,4,5,6,7,8,9,10]
odd = ary.each_slice(2).map(&:first)
even = ary.each_slice(2).map(&:last)

p odd #=>[1,3,5,7,9]
p even #=>[2,4,6,8,10]
```

## 少し分解して考えてみた
結論の書き方だと何をやっているのかイマイチ分かりにくいと思いますので、自分なりに分解してみました。

[ある配列を任意の要素数の配列に分割したい - Qiita](https://qiita.com/QUANON/items/749f4a2a79dafdaff57f)
`each_slice`については、上の記事が分かりやすく解説していました。

`each_slice(数)`： 数の部分には何分割するかを決める数値を入れる

なので、数の部分を`2`とすると、配列を2つずつ取り出して、それをさらにmapメソッドで配列に入れている感じです。

```ruby
ary.each_slice(2).map {|n| n}
#=>[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
```

これを利用して、以下のようにします。

```ruby
odd = ary.each_slice(2).map {|n| n.first} #[1, 2].firstみたいなことを繰り返している
#=>[1,3,5,7,9]

even = ary.each_slice(2).map {|n| n.last}
#=>[2,4,6,8,10]
```
* 取り出した配列`n`の要素の1番目を取り出すと、奇数番目の配列が完成する。<br>つまり`first`メソッドを使用する。
* 取り出した配列`n`の要素の2番目を取り出すと、偶数番目の配列が完成する。<br>つまり`last`メソッドを使用する。


<br>
初心者なりに考えたやり方になりますので、他にも色々なやり方がたくさんあると思います。
もしこんなやり方もあるよ！って方がいればぜひ教えていただければと思います。
読んでいただきありがとうございました。
[基本情報技術者(FE)]浮動小数演算での現象(打ち切り誤差,けた落ち,情報落ち,丸め誤差)

#はじめに
このページは、初心者エンジニアの僕が、基礎知識を養うために勉強したことを、共有する場です。
とりあえず、基本情報基礎の過去問を解きながら、勉強したことを解説していきます。
間違いや、ニュアンスが微妙なところもあるかもしれませんが、お気軽にご指摘を頂けると幸いです。
#今日の問題
```text:13年春FE問5
浮動小数点演算において、値の近い数値の減算で有効数字のけた数が減る現象はどれか。

1.　打ち切り誤差
2.　けた落ち
3.　情報落ち
4.　丸め誤差
```
```text:正解
2
```
[引用サイト](http://jibun.atmarkit.co.jp/scenter/ittrain/105_today_a4.html)
#解説
##けた落ち
ほぼ等しい2つの値の差を計算するときに、有効な桁数が減る現象。
「もう、2つともほぼ同じってことで、良くないっすか？」とコンピューターから聞こえてきそう。
[参考サイト](http://jibun.atmarkit.co.jp/scenter/ittrain/105_today_a4.html)

##情報落ち
絶対値の大きな数と小さな数の加算を行う場合に、小さい方の数の全部または一部が計算結果に反映されない現象。
存在が小さいだけで無視されるとは、社会の縮図のよう。
[参考サイト](http://jibun.atmarkit.co.jp/scenter/ittrain/105_today_a4.html)

##丸め誤差
けた数の多い数を、有限のけた数で近似する操作（丸め）により生ずる誤差。
数が多いものを、「100個ぐらい〜」と表現したら、「実際の数と違うじゃないか」と言われたときの儚さ。
[参考サイト](http://jibun.atmarkit.co.jp/scenter/ittrain/105_today_a4.html)

##打ち切り誤差
数値計算する際に、本来無限であるものを有限で打ち切ることにより生ずる誤差とのこと。例えば、三角関数をテーラー展開した際に、初めの数項のみで近似値を得る場合などに生ずるそうな。意味分からないですが、これだけやたらと難しいこと言ってて、仲間はずれです。一旦、丸覚え案件です。
[参考サイト](http://jibun.atmarkit.co.jp/scenter/ittrain/105_today_a4.html)

##その他　この問題から学べること
この問題は、簡単な用語を覚えるだけで大丈夫そうですね。

#最後に
引き続き、IT知識の基礎固めで学んだことを共有しています！
よろしくお願いします。