OmniAICreator/Qiita-1.07M huggingface dataset:
既存のJavaScript + importmap で動かす備忘録

既存のJavaScript `app/assets/javascripts/` と
Importmapに対応したJavascript `app/javascript/` の共存、その備忘録になります。

ここでは、`js_compressor` にTerserを利用しています。

## Gemfile
```ruby:Gemfile
...

# The original asset pipeline for Rails [https://github.com/rails/sprockets-rails]
gem "sprockets-rails"

# Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails]
gem "importmap-rails"

# Terser minifies JavaScript files by wrapping TerserJS to be accessible in Ruby [https://rubygems.org/gems/terser]
gem 'terser', '~> 1.1', '>= 1.1.8'

...
```
 
## environment
```ruby:config/environments/production.rb
# Compress JavaScripts and CSS.
config.assets.js_compressor = Terser.new(compress: { drop_console: true })
```

## Javascript
###### application.js リネーム
`app/assets/javascripts/`, `app/javascript/` 2箇所に`application.js` ファイルが存在するとエラーとなるため、`application_old.js` にリネームしています。

###### require 指定
`require_directory`, `require_tree` 等、環境に合わせて調整してください。


```javascript:app/assets/javascripts/application_old.js
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
// vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file. JavaScript code in this file should be added after the last require_* statement.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//

//= require_directory .
```

```javascript:app/javascript/application.js
// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails

import Rails from "@rails/ujs";
Rails.start();
```

## Layout
```diff_erb:app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application', media: 'all' %>
-   <%= javascript_include_tag 'application' %>
+   <%= javascript_include_tag 'application_old' %>
+   <%= javascript_importmap_tags %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>
```


## 最後に
同じケースにTryしている方のヒントになれば幸いです。
もっと良い方法が見つかりましたらアップデートしていきたいと思います。
基礎情報技術者始める

基礎情報技術者　基礎

コンピュータを学んでいく上で基礎部分に当たるのがこの章です。
しっかり学んでおくと、後から学んだ知識を結びつけるのに有効になる上、技術者として仕事に就いたときにも役立つ内容が盛り込まれています。


固定小数点形式

固定小数点に関しては2進数が理解できていれば、問題ないと思います。
ただ、補数の求め方や、誤差に関する理解は結構な頻度で出題されている。

論理回路

豆電球のような図が出てきます。こちらもほぼ確実に出て来る。
論理的に整理していく問題。
基本となる法則は抑えておくと時間短縮になる。

こちらの問題は、当日解けなかった問題。
あまり難しい内容ではないのですが、内容を知らないと難しいので、抑えておいて必要があるがある。

逆ポーランド記法

過去最多の出題数を誇る問題。
2016年春季までで12回確認されている。
絶対に気をつける。

信号処理

暗記となるが、標本化、量子化、符号化、ローパスフィルタを使ったフィルタリングとキーワードがたくさん出てくるので、抑えておく。

木構造

データ構造の一種になるが、結構出題が確認された。
図で表記されており、そういったビジュアル的な問題は目新しさから結構出ているように感じる。

アルゴリズム

プログラミングに自身がある人は、特別暗記も必要ないのですが、怪しい方は必ず確認しましょう。ソート順でバブルソートの内容は、どれですか。といった形で出題される。
また、午後の部ではアルゴリズムは必須の問題です。しっかりと固めて臨むべきだと感じる。

プログラミング言語・マークアップ言語

どの言語がどういった言語か、簡単な特徴は抑えておきたいところです。キーワードを決めて絡めて覚えていく。
以上、抑えておきたい項目。
STM32L010でI2C EEPROで遊ぶ3(連続書き込み)


x Mbed2リビジョン125


目的
I2C EEPROMのテスト

通販コード　K-12061

![o_con588.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/6f012c3f-22f6-827e-5b40-33c3878d0f9f.jpeg)


読み込みテスト

![o_con589.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/57cdca07-b714-0682-160c-c9b61ec40c34.jpeg)



```c++


//SER_I2C_EEPROM_write_s_010_1

#include "mbed.h"

I2C i2c(PA_10, PA_9); //010

//#define S5851A 0x48
#define ADDR        ((0x50)<<1)   //  address


//四桁の変換
//#define DIV10(n) (((n*409)+((n*154)>>8))>>12)
int DIV10(int n)
{
    return    (((n*409)+((n*154)>>8))>>12)    ;
}
char data[16];
char *itoa9999(int d)
{

    data[4] = 0;
    data[3] = '0' + (  d - (DIV10(d) * 10)  );  // '0'+(d%10)
    d = DIV10(d);
    data[2] = '0' + (  d - (DIV10(d) * 10)  );  // '0'+(d%10)
    d = DIV10(d);
    data[1] = '0' + (  d - (DIV10(d) * 10)  );  // '0'+(d%10)
    data[0] = '0' +  DIV10(d);                  // '0'+(d/10)

    return (data);

}//itoa99

//仮想シリアルへの一文字出力 9600bps
DigitalOut TX(PA_2);
//DigitalIn  RX(PA_3);
#define UART_DELAY 101 //  1/9600 98-105
int pc_putc(char ch)
{
    TX=1;
    TX=0;//Start
    wait_us(UART_DELAY);

    for(int ii=0; ii<8; ii++) { //Data x 8
        TX=(ch>>ii)&1;
        wait_us(UART_DELAY);
    }; //for

    TX=1;//Stop
    wait_us(UART_DELAY);

    return(0);
} //pc_putc


//文字列の表示 nana_seg
int pc_puts(char *str1)
{
    //文字の中身がゼロか
    while(*str1) {
        pc_putc( *str1 ++);
    } //while

    //戻り値
    return(0);
}//pc_puts

//連続書き込み先頭2バイトは、予約で無視される
//例　"@@1234"の場合は、"1234"が書き込まれる@@は、破壊される
//len1は、予約の2バイトも含む長さ
void eeprom_write_s(char *str1, int len1) {


    int ii=0;

    //アドレス
    //set address
    str1[0] =    ii >> 8   ;
    str1[1] =    ii & 0xff ;
    //pc_puts( itoa9999(data1[0]) );
    //pc_puts( "#" );
    //pc_puts( itoa9999(data1[1]) );
    //pc_puts( " " );
    //データ
    //str1[2] = ii;
    //書き込み
    i2c.write(ADDR, str1, len1); //addres 0

    pc_puts( "Write len=" );
    pc_puts( itoa9999(len1) );
    pc_puts("\r\n");

}//eeprom_write_s

int main()
{

//    char data1[8]; //バッファー

    pc_puts("\r\n<START>\r\n");


    pc_puts("eeprom_write_s\r\n");

    //             123456789012
    char buff[] = "@@0123456789";

    eeprom_write_s( buff, 12);

    //1秒待つ
    wait_ms(1000);

}//main

//容量削減
void error(const char* format, ...) {}





```
BFV, CKKS, TFHE って何が違うんですか？③

って聞かれたときに答えられなかったので，これを機に整理してみます．

この記事は [勝手に秘密計算アドベントカレンダー](https://qiita.com/kenmaro/items/3e8a124ce4306fe040dc) の13日目の記事です．

下記の論文の解説をメインに行なっていきます．

P.-E. Clet, O. Stan, and M. Zuber: "BFV, CKKS, TFHE: Which One is the Best for a Secure Neural Network Evaluation in the Cloud?", In: International Conference on Applied Cryptography and Network Security. Springer, Cham, 2021. p. 279-300.

記事全体として，全３部作を予定しています．

第１回：[BFV, CKKS, TFHE って何が違うんですか？①](https://qiita.com/0917laplace/items/a3ba76a889a80662fddc)

第２回：[BFV, CKKS, TFHE って何が違うんですか？②](https://qiita.com/0917laplace/items/bf33ccad8b4c3d96bae4)

今回（第３回）は
- ライブラリとか実装方針
- 結果の比較
- まとめ

の３本立てで書いていきます．
~~正直，わざわざ解説を書くより，論文を読んだ方が早いんじゃないかっていう気がします・・・~~

**突貫で書いてしまった部分もあるので，大いに誤りを含む可能性があります．誤字・脱字レベルでも構いませんので，ご指摘ください．
また，予告なしに内容の加筆や構成の変更を行うことがありますが，読みやすくするためのものですので，ご容赦ください**

# ライブラリとか実装方針
BFV, CKKS では [SEAL](https://github.com/Microsoft/SEAL), TFHE では [公式ライブラリ](https://tfhe.github.io/tfhe/) を使います．

また，全てのライブラリで，nn-c, nn-e というモードがあり，それぞれ

- nn-c : インプットの特徴量は暗号化されているが，Neural Network での重みは平文
- nn-e : インプットの特徴量も Neural Network での重みも暗号化されている

を表します．

更に，[符号関数](https://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E9%96%A2%E6%95%B0) を用いるなら，TFHE の方が良いことが指摘されています．TFHEnn-c で符号関数を用いることができるモードを TFHEsign と表記することにします．

最後にパラメタについて，TFHE は BFV, CKKS よりもかなり小さめにとっています．

# 結果の比較
前章でのライブラリを精度・メモリ・時間の３つから比較します．

精度
よくわからなかった・・・
CKKS が一番精度良さそう・・・なのか・・・？

メモリ
TFHE が一見すると，メモリ使用量が少ないのですが，これは小さいパラメタを使用しているだけなので，BFV, CKKS と同じパラメタを使用すると，メモリ消費は一番激しいです（bootstrap が激しいため）．
BFV, CKKS では，Batching を使えるため，メモリ消費量は TFHE より抑えられます．これらのメモリ使用量は同じパラメタであれば，だいたい同じようです（同じような関数を作用させているため）．

時間
TFHE は，やはり bootstrap がネックのようですね．
BFV は CKKS よりも暗号文のサイズが2倍なので，計算時間も2倍かかるのは妥当でしょう．
また，どの方式も nn-e は nn-c よりも2倍程度速いとのこと．

# まとめ
以下では，BFV, CKKS, TFHE がどのような場面で使用すると良いのかについてまとめます．

BFV
整数係数の多項式の厳密な演算を行えるが，そのため多項式の次数は小さいほうが望ましい．
また，Batching を用いることで，メモリと時間を改善することができる．
多項式が整数係数でない場合は，丸め誤差が発生する可能性がある．
square network でも，BFV はうまく機能する．

CKKS
実数係数・複素数係数の多項式でも演算を行えるため，メモリ・時間の観点からも，実用上は最良の選択となりうる．
しかし，CKKSを使用する環境は検討する必要がある．
square network の場合は，この方式が最善．

TFHE
ビット演算を使用する場合・完全準同型暗号を構成したい場合に使う．
また，符号関数を使用する場合は，TFHE を用いると良さそう．

------------------------
さて，今回で

P.-E. Clet, O. Stan, and M. Zuber: "BFV, CKKS, TFHE: Which One is the Best for a Secure Neural Network Evaluation in the Cloud?", In: International Conference on Applied Cryptography and Network Security. Springer, Cham, 2021. p. 279-300.

の解説記事の連載が終了しました．正直，１回目でやりたいことはほぼやってしまったので，残りは個人的には消化試合っていうかなんていうか・・・．
どれが優れているっていうよりかは，適材適所で使い分けることが重要なのがよくわかりました．

どちらかというと，理論より実装的な論文を読む機会があまりなかった（~~っていうかそっち方面にあまり興味がない~~）ので，今回初めて読んでみました．
やっぱりこういうのを読んだ際って皆さん追試実装とかするんですかね？今後もこういう機会があったら，やってみたいなぁと思いました．

今回の内容はここまでです．ここまでご覧になってくださった方々ありがとうございます！
Power Automate: Teams への Post Message は、Slice() で 28k以下(28900前後？)に

# 背景
HTML 形式の各種情報を Teams 内に転送した場合、[Post a Message](https://docs.microsoft.com/ja-jp/connectors/teams/#%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%E3%81%A7%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B) を使うんですが、文字数が長すぎると以下エラーが出ます。

> {"error":"The payload is too large. Please make sure the size is less than 28KB."}

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/0277d045-0b70-f210-56e0-b460f83b4887.png)

この対策方法の一例。

# 概要
- HTML メッセージは、タグが途中で切れていても、[Post a Message](https://docs.microsoft.com/ja-jp/connectors/teams/#%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%E3%81%A7%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B) がよしなに投稿してくれる。
- [Reply a Message](https://docs.microsoft.com/ja-jp/connectors/teams/#%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%E5%86%85%E3%81%AE%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%A7%E5%BF%9C%E7%AD%94%E3%81%97%E3%81%BE%E3%81%99) も同様
- Slice で、サクッと Payload 内に収まる文字列に削除してやるだけ。

Substring() 使わない理由は以下

https://qiita.com/baku2san/items/874c85aae289d0a746f4

# Payload 限界について
- 会社環境だと、28923 文字まで行けた
- 自宅環境だと、28904 文字まで![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/b22b01c1-1da5-0ebe-ca71-d21caab69c69.png)

:::note warn
これは Byte と思われる為、日本語文字を含む場合は、もっと減少するので注意。余裕をもって半減でもいいくらい
:::
環境によって差異が生じる理由はよくわからない・・

てっきり、28k = 28,672 文字だと考えていたので、上記数字もあれ？って感じ

# あとがき
もともとは、Message Center からの通知で、Weekly Digest が大きすぎたのでその対処法として考えてみた。

https://qiita.com/baku2san/items/4415c73709a45a019bd0

ただ、単純に切ってしまいたくない場合は、正規表現で タグ削除をしよう

https://qiita.com/baku2san/items/3ee1cdcad96b45b49377
BiLiBiLi動画で中国語学習が捗るJS

中国の動画サイトBilibiliで中国語学習をしている人も少なくないと思いまして、僕もその一人なわけでありますが、
Bilibiliではニコニコ動画のコメントのような動画上を右から左へ流れる特徴的なコメントシステムを搭載していますが、
このコメントがマウスで文字選択できない、というのが長年のストレスでありました。

文字選択ができないと単語をGoogle検索や辞書検索するのにコピペもできづらいですし、Google翻訳などで翻訳にかけることもできず不便であります。

そこでJSスクリプトを書きました。

- [Bilibili selectable danmu comments](https://greasyfork.org/en/scripts/448301-bilibili-selectable-danmu-comments)
- [Bilibili選択可能弾幕コメント](https://greasyfork.org/ja/scripts/448301-bilibili-selectable-danmu-comments)

Redditに投稿したら反応が良くて少し驚きました。

![ShareX-220723T225008-dAsgINw9~brave-Blazing_fast_Chinese_learning_with_Bilibili.__Chi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/53ff370f-c2ee-dfc7-ef05-2f66fdd71caf.png)

RedditやQIitaの文を執筆するのは少し時間を取りますが、便利なものは多くの人に使ってもらいたいのでできる限りでシェアしています。

JavaScriptは以下だけ。

```js
document.querySelector('div[class="bilibili-player-video-danmaku"]').style.zIndex = 69;
        document.querySelectorAll('div[class="b-danmaku"]').forEach(a => {
            a.style.userSelect = "text";
            a.style.pointerEvents = "all";
            a.style.cursor = "text";
        })
```

20分くらいで書きました。

デベロッパーツールでどの要素がコメントなのか検証、computedと照らし合わせながらcssを付与して動作検証、z-index上部の要素の検証とz-index値の調整、最後にJSに落とし込んでユーザスクリプト形式にして完成です。

バグ要望感想等あればお聞かせください。
プログラマの転職 ３つの条件

プログラマが何歳からでも、転職する際の条件を記録する。
プログラマが何歳からでも、採用面接を受ける時の条件でもあるかもしれない。

なお、未経験者の採用で、これらの習慣は３週間あれば、十分だ。下記記事では５日間を想定しています。最近、コンパイラって３週間勉強すれば作れる人がいるので、経験者を採用しなくてはならないことはないような気がします。

未経験者で５日間で設計者として現場投入できるための訓練（１日目）

https://qiita.com/kaizen_nagoya/items/132fb119da272640b72f

# 1. 何か一つプログラミング言語をしゃべれるか

自作の言語でもよい。自作の言語を記述した言語がしゃべれればよい。
自作の言語を、自作の言語で記述している場合には、その機材の機械語がプログラミング言語に相当する。

日本語も英語もしゃべれなくてもよい。
３の記録さえあれば、自然言語で説明してもらう必要はほとんどない。

自然言語をしゃべれるようにというのをプログラマの採用で条件にするのは、すでに計算機の自然言語処理の方が優秀かもしれなく、意味がない。

自然言語ばかり話しをしていて、プログラミング言語で話さない人はプログラマと呼ばない。

# 2. １日１ビルド　and/or １実行（試験を含む）しているか

１日に１ビルドまたは１日に１試験走行しているかどうか。

それが、月３０日中、１５日以上の人をプログラマと呼ぶ。

プログラマを１行もなぶっていない人はプログラマとは呼ばない。

試験のスクリプトを実行していてもよい。

# 3. エラーの記録は消していないか

毎週または、毎月の統計を取り、過去と全く同じエラーは消しても良い。

例えば、ビルドエラーが出ても、記録をとらなかったり、統計もとらずに消えていくままにしている人はプログラマとは呼ばない。

システム側が、かってに統計を取ったり、過去に出ていないエラーがある場合に、自動収集してくれる場合には、プログラマと呼ぶ。


# まとめに代えて

プログラマ転職３つの条件を書こうとして、
プログラマの条件を書いていた。

プログラマじゃない人の転職は、それはそれとして別に検討する。
プログラマの転職であれば、上記３つがしっかりしていれば、
あとは金額面での条件だけかもしれない。

# 参考資料

新人(学生)を指導するよりも新人(学生)に指導してもらった方が効率的。仮説（139）

https://qiita.com/kaizen_nagoya/items/db993b1536055029f7c8

プログラマが違和感を感じたときにするとよいこと。仮説（148）

https://qiita.com/kaizen_nagoya/items/f32ae742655621b309fb

IT業界で新卒学生採用時に大事なこと。仮説（46）

https://qiita.com/kaizen_nagoya/items/eaa6313a2889c1af755a
VBscriptでプログレスバー表示

Vbscriptにて標準出力でプログレスバーを表示します。
標準出力(wsh.StdOut.Write)とキャリッジリターン(vbCr)を使うのがコツです。

![progressber.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247043/e0ca8588-7c94-1ed6-7d21-b891a2ff5b69.jpeg)

```vbscript:progressbar.vbs
call sample

sub sample()
	Dim i
	Dim j
	Dim note

	For i = 0 to 1
		For j = 0 to 100 step CCur(0.01)
			note = FormatNumber(j, 2) & "% job[" & i & "] " & Time() 
			Call progressbar(j, note)
			wsh.Sleep(1)
		Next
	Next
End Sub

'--------------------------------------------
' プログレスバーを標準出力する
'  percent 進捗率 (0 - 100)
'  note    注釈文字列
'--------------------------------------------
Sub progressbar(ByVal percent, ByVal note)
	Dim ber
	Dim x

	x = Fix(percent)
	ber = Left(String(Int(x/5), ChrW(9608)) & String(20, ChrW(9618)), 20)
	wsh.StdOut.Write vbCr & ber & space(1) & note

	if x = 100 Then
		wsh.StdOut.Write vbCrLf
	End If
End Sub
```
console.log を print に置き換える

# console.log を print に置き換える

console.log と入力するのが面倒なので print にしたいという話です
いつもやり方忘れるのでメモしておきたい

**追記: print は印刷ダイアログを出す命令になっているので putlog とか別の名前にしたほうが良さそうですね**

``` javascript
function print() {
    console.log.apply(console, arguments);
}

print("hoge", "piyo", 1234);

```

## apply と call による関数呼び出し
[関数].apply(thisポインタ, [引数１, 引数２, 引数３, ...]);
[関数].call(thisポインタ, 引数１, 引数２, 引数３, ...);
こんなイメージです。

``` javascript
// 使用例
var o = {
    fn: function() {/* なんらかの処理 */}
};

o.fn.apply(o, [1, 2, 3]);
o.fn.call(o, 1, 2, 3);

```

以上です
超簡単 Rails タイトルを動的にする 

# 使用環境
- Rails 6~
- Ruby 3.1.0
- M1 Mac
# Rails タイトルを動的にする方法
自分も初学者ですが、誰でもできるよう、分かりやすく書いていきます。

# app/helper/appliction_helper.rb
以下のコードをコピー＆ペーストして下さい。
コードに関しては、、、調べて下さい🥹
僕はおまじないだと言い聞かせてます🥹

```
module ApplicationHelper
 BASE_TITLE = "KAKEIBO".freeze #ここで変えたいタイトルにしてる
                  ↑ここを変えたいタイトルにしてあげる

  def full_title(page_title)
    page_title.blank? ? BASE_TITLE : "#{page_title} - #{BASE_TITLE}"
  end
end
```

# app/views/layouts/appliction.html.erb
タイトルタグを以下のコードに変えてください。
```
#変更前
<title>test_app</title>
#変更後
<title><%= full_title(yield(:title)) %></title>
```
これでリロードして確認してみると、期待するタイトルになっているはず

# ページ毎に変えたい場合
今回、userのshowのタイトルを自分の名前で、
表示したいというお話で進めていきます。

# users/show.html.erb
一番上に以下のコードを入れてください
```
<% provide(:title, @user.name) %>
```
リロードすると変更されています

# indexなどのページを変えたい場合
一番上に以下のコードを入れてください
```
<% provide(:title, "一覧") %>
                     ↑ここをカスタマイズすればok
```

# 以上タイトルを動的にする方法でした🙇‍♂️
Laravel で Salesforce を Eloquentとして扱う EloquentSalesForceの紹介


## なにこれ

* EloquentSalesForce(EISF) という Laravelで Salesforceを扱うためのパッケージの紹介です。
* "laravel salesforce"で検索すると`omniphx/forrest`というパッケージをよく目にしますが、こちらは、SOQLでアクセスするので少し面倒です。
* 今回紹介する EloquentSalesForce(EISF) というパッケージは、　Salesforceの知識がなくても、Salesforceのデータ構造体をEloquentとして扱え敷居が低いです。

## EloquentSalesForce(EISF) 
- 普段Larvelのコードを書いていれば、以下の公式ドキュメントにざっくり目を通すだけでだいたい理解できるでしょう。
- https://roblesterjr04.github.io/EloquentSalesForce/index.html#/?id=eloquent-sales-force

## インストール

* SalesForce APIの設定方法は割愛いたします。
* composer で eloquent-sales-force をインストール

```
composer require rob-lester-jr04/eloquent-sales-force
```

* DB ドライバ-を追加し、対応する環境変数を .env ファイルで定義しましょう。
```config/database.php
'soql' => [
    'driver' => 'soql',
    'database' => null,
    'consumerKey'    => env('SF_CONSUMER_KEY'),
    'consumerSecret' => env('SF_CONSUMER_SECRET'),
    'loginURL'       => env('SF_LOGIN_URL'),
    // Only required for UserPassword authentication:
    'username'       => env('SF_USERNAME'),
    // Security token might need to be ammended to password unless IP Address is whitelisted
    'password'       => env('SF_PASSWORD')
],
```


## 利用方法

* Lead という オブジェクトにアクセスするためにモデルを定義します。
```app/Models/Lead.php
<?php

namespace App\Models;

//use Illuminate\Database\Eloquent\Model;
use Lester\EloquentSalesForce\Model;


class Lead extends Model
{
    //
}

```



* ここまでくれば、あとは簡単です。
* いつものEloquent のように扱えます。

### 参照
```exmaple_read.php
$leads = Lead::where('Email', 'user@test.com')->get();
$lead = Lead::find('00Q1J00000cQ08eUAC');
$email = $lead->Email;
```

### 作成
```exmaple_create.php
$lead = Lead::create([
    'FirstName' => 'Foo',
    'LastName' => 'Bar',
    'Company' => 'Test Company'
]);
```


# その他できること
* update/delete 
* Salesforceオブジェクト同士のリレーション の定義
* Local Sync (DBと同期が取れそう)
* 詳しくは[公式ページ](https://roblesterjr04.github.io/EloquentSalesForce/index.html#/?id=eloquent-sales-force)を参照

## まとめ
* Salesforceを一度も触ったことがなかったのですが、このパッケージのおかげで少ない学習コストで、サービス側のDBの内容を、Salesforceを 同期することができました。
* Salesforce連携の開発は、Salesforceの Sandbox機能を使って 本番データに影響を与えずにテストすることができました。
Unity Scroll View (Scroll Restの説明)

## 0.0 はじめに
Scroll Viewは限られた領域で多くの情報をあつかうのにとても便利なUIです。
HierarchyからScroll Viewを作成すると、作成されたScroll ViewオブジェクトにはScroll Rectコンポーネントが付いています。ここではこのScroll Rectコンポーネントの各項目の内容、使い方を説明します。







初期の段階ではScroll Rectコンポーネントは下記のようになっています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352037/250f6f60-7166-cd14-5e5e-cc812ccdc740.png" width="400">
































## 1.0 Content（内容）
スクロールしたい情報を入れる箱です。UIでScroll Viewを作ると孫（Viewportの子）にContentが生成されます。このContentに情報を入れてスクロールします。インスペクターに見えるのはスクロールする UI 要素の RectTransform への参照です。








## 2.0 Horizontal(水平方向)、Vertical（垂直方向）
Horizontalは横方向へのスクロールを有効にするかどうか、Verticalは縦方向へのスクロールを有効にするかどうかです。最初はどちらもチェックが入っています。チェックをはずすと横に動かない、もしくは縦に動かなくなります。







## 3.0 Movement Type（動作タイプ）
スクロール動作の種類を設定できます。	





#### 3.1 Unrestricted（規制なし）
無制限に横または縦にスクロールします。あまり使う機会はないと思います。スクロールし過ぎると情報が枠外に行き見えなくなります。




#### 3.2 Elastic（弾性）
スクロール動作に弾性がつきます。
情報の最初、最後の位置でビヨーンって感じでバウンドします。タッチでのスクロール動作では余白が見れます。バウンドのスピード/量はその下にあるElasticityで調整できます。





#### 3.3 Clamped（制限付き）
scrollの動きに制限をつけます。 Contentに入れた情報が占める幅以上に動かしたくない場合はこれを選んで下さい。動く範囲が決まっているので綺麗に止まります。






## 4.0 Inertia（慣性）
慣性が付けられます。手で移動させた後、手を離した後にそのまま移動し続けます。
ここにチェックを入れるとDeceleration Rateを設定できます。




#### 4.1 Deceleration Rate（減速度）
どれくらい早くスクロールの慣性を止めるか、値が0ですぐに止まる、1で全く止まりません。






## 5.0 Scroll Sensitivity（スクロール感度）
ホイールのスクロールとパッドのスクロールイベントに対する感度。数字が大きいほど感度が高く、移動距離が長くなります（よく動く）。





## 6.0 Viewport（見える範囲）
親となっているViewport（ビューポイント）のRect Transformへの参照が入ってます。
さわる必要は無いかと思います。





## 7.0 Horizontal / Visibility Scrollbar (水平、垂直のスクロールバー)
水平及び垂直のスクロールバーの調整ができます。
最初のHorizontal / Visibility Scrollbarにはスクロールバー要素への参照が入っています。






#### 7.1 Visibility （見た目）
常に表示（Permanent）、スクロールバーが必要ではない場合は非表示（AutoHide）、バーを自動的に非表示するかどうか さらに任意でビューポイントを適切に拡大する（AutoHideAndExpandViewport）オプションがあります。
       



#### 7.2 Spacing （スペース）
スクロールバーとビューポートの間の空白スペースです。最初は-3になっています。
PostgreSQL の INSERT ON CONFLICT と MERGE の簡易性能比較

[以前に、PostgreSQLの3つのUPSERT方式の簡易性能検証を行いました](https://qiita.com/fujii_masao/items/6e9417f78dc0cbd0e13d)が、今回はその検証で最も高性能だったINSERT ON CONFLICTとPostgreSQL15新機能の[MERGE](https://www.postgresql.org/docs/devel/sql-merge.html)を簡易性能検証します。

簡易性能検証では、以下の3パターンで各コマンドが1000万件のUPSERTにかかる時間を計測します。計測は3回ずつ行い、中央値を計測結果として採用します。計測には、[PostgreSQL15 Beta2](https://www.postgresql.org/about/news/postgresql-15-beta-2-released-2479/)を使用します。
* ① 1000万件のUPSERTのうち、1000万件がINSERT、0件がUPDATEになるパターン
* ② 1000万件のUPSERTのうち、約500万件がINSERT、約500件がUPDATEになるパターン
* ③ 1000万件のUPSERTのうち、0万件がINSERT、1000件がUPDATEになるパターン

簡易性能検証の結果は以下のとおりで、今回の検証内容ではMERGEの方がINSERT ON CONFLICTよりも高性能でした。
| 検証パターン | INSERT ON CONFLICT | MERGE |
|:-|-:|-:|
| ① 1000万件をINSERT | 23.1 s | 9.3 s |
| ② 約500万件をINSERT、約500万件をUPDATE | 25.8 s | 17.4 s |
| ③ 1000万件をUPDATE  | 41.5 s | 38.1 s |

## 検証方法

```sql
-- psqlの時間計測機能を有効化
\timing on

-- UPSERT元と先のテーブルとしてsrcとdstを作成する。
-- できるだけUPSERT処理そのものの時間計測となるように、
-- テーブルはUNLOGGEDで作成して、autovacuumを無効化する。
DROP TABLE IF EXISTS src, dst;
CREATE UNLOGGED TABLE src
  (key bigint PRIMARY KEY, val bigint)
  WITH (autovacuum_enabled=false);
CREATE UNLOGGED TABLE dst
  (key bigint PRIMARY KEY, val bigint)
  WITH (autovacuum_enabled=false);

-- UPSERT元テーブルsrcに1000万件を挿入する。
INSERT INTO src VALUES (generate_series(1, 1000000), 1);
VACUUM ANALYZE;

-- 計測中にCHECKPOINTが走らないように、事前に実行する。
CHECKPOINT;
TRUNCATE dst;

-- 空のテーブルdstに対してINSERT ON CONFLICTを実行して、
-- 「① 1000万件をINSERT」の実行時間を計測する。
VACUUM ANALYZE;
INSERT INTO dst AS d SELECT key, val FROM src
  ON CONFLICT (key) DO UPDATE SET val = d.val + EXCLUDED.val;

-- 1000万件格納済のテーブルdstに対してINSERT ON CONFLICTを実行して、
-- 「③ 1000万件をUPDATE」の実行時間を計測する。
VACUUM ANALYZE;
INSERT INTO dst AS d SELECT key, val FROM src
  ON CONFLICT (key) DO UPDATE SET val = d.val + EXCLUDED.val;

-- テーブルdstから50%の約500万件をランダムに削除する。
DELETE FROM dst WHERE key IN
  (SELECT key FROM dst TABLESAMPLE BERNOULLI(50));

-- 約500万件格納済のテーブルdstに対してINSERT ON CONFLICTを実行して、
-- 「② 約500万件をINSERT、約500万件をUPDATE」の実行時間を計測する。
VACUUM ANALYZE;
INSERT INTO dst AS d SELECT key, val FROM src
  ON CONFLICT (key) DO UPDATE SET val = d.val + EXCLUDED.val;

-- 計測中にCHECKPOINTが走らないように、事前に実行する。
-- テーブルdstを空にする。
CHECKPOINT;
TRUNCATE dst;

-- 空のテーブルdstに対してMERGEを実行して、
-- 「① 1000万件をINSERT」の実行時間を計測する。
VACUUM ANALYZE;
MERGE INTO dst AS d USING src AS s ON d.key = s.key
  WHEN MATCHED THEN UPDATE SET val = d.val + s.val
  WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val);

-- 1000万件格納済のテーブルdstに対してMERGEを実行して、
-- 「③ 1000万件をUPDATE」の実行時間を計測する。
VACUUM ANALYZE;
MERGE INTO dst AS d USING src AS s ON d.key = s.key
  WHEN MATCHED THEN UPDATE SET val = d.val + s.val
  WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val);

-- テーブルdstから50%の約500万件をランダムに削除する。
DELETE FROM dst WHERE key IN
  (SELECT key FROM dst TABLESAMPLE BERNOULLI(50));

-- 約500万件格納済のテーブルdstに対してMERGEを実行して、
-- 「② 約500万件をINSERT、約500万件をUPDATE」の実行時間を計測する。
VACUUM ANALYZE;
MERGE INTO dst AS d USING src AS s ON d.key = s.key
  WHEN MATCHED THEN UPDATE SET val = d.val + s.val
  WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val);
```
[個人開発]映画評価サイト


# 1 初めに
映画評価サイトFilmerを開設しました。
まだまだ修正ポイントがありますが完璧であることより、まず終わらせることが重要だという
マーク・ザッカーバーグの名言を信じてみんなさんにこのアプリの改善点をください！！

https://filmer-000.herokuapp.com/

# 2 アプリケーションの概要
Filmarksのようなアプリケーションが作りたいと思い設計しました。

![Animat.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1493403/973ac233-45e3-8e37-0c5f-f08b8478acf9.gif)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1493403/710f305b-f162-215e-d44e-31a43b6a3d1a.png)

機能は単純で映画にコメントと評価を付けることができます。そして、皆さんが映画とTVの評価が平均的に出力される形です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1493403/5b7959d4-b29d-3015-fa29-7936d5423eab.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1493403/c6c50f30-2c8f-0caa-e340-600e7a972831.png)

そしてedit delet機能も付けました。
名前は右上のハンバーガーボタンから変えられます！！！
ランキング機能があります。

# 3.開発環境や開発言語
- **python**
- **Django**
- **html**
- **css**
- **javascript**
- **heroku**
- **postgreSQL**


# 4.皆さんの意見や改善点、ほしい機能ガンガンください！！！！
皆さんの意見が欲しいです！！！ガンガンください！！使いにくいでも全然ダイジョブです！！！！
【#37 エンジニア転職学習】Go WebApp　DB関連

# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。

使用しているGoのUdemy教材後半部分である、
Webアプリ作成演習を学習していきます。

バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。


https://qiita.com/Chika110/items/ef54dddd565a0193ef44

# 本日の学習内容
本日はcandleスティック情報を作成・取得するmodelやcontroller部分を学習しました。

* DBスキーマ作成
* **candleDBに関するSQL文コード作成　←Topics!!**

# CandleDBに関するSQL文コード
bitflyerから取得してくるCandleの情報（duraiton, open, close, high, low, volume 等）を入れておくDBテーブルのスキーマの作成。
また、テーブルの変更を行うSQL文コードの作成を中心に行いました。

以下本日のポイント
* 基本的なDbConnection作成、クエリ実行、sqlパッケージを理解できていれば全体大丈夫
* streamファイルではgoroutineでtickerを取得しつづける
* ディレクトリ構成は「models：DB設定等」「controllers：プログラムのコントロール」「views：表示部分」にする




##### 使用している教材はこちら↓


https://www.udemy.com/course/go-fintech/


# おわりに
最後までお読みいただきありがとうございました。
アドバイス・応援コメント等いただけますと幸いです。
1.gets.とgets.to_i


#gets.とは
#入力して、文字列の取得するメソッドである。

mojiretu = gets.
#文字列として認識
#よって、
line = gets.* 2
#100を入力する
puts line
＃出力結果:100100

#.to_i
#文字列を整数に変換するメソッドである
mojiretu = gets.to_i
#整数として認識
#よって、
line = gets.* 2
#100を入力する
puts line
＃出力結果:200
UnityのBaked Lightingまとめ

https://qiita.com/tsune2ne/items/82ce726dacb9e5faa67a

前回はRealtime Lightingでの影の品質を調整する方法をピックアップしました

しかし影の品質を簡単に上げるならもっと簡単な方法があります

今回はBaked Lightingをまとめてみました

![sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7680/5879f71e-7a90-b5d0-2405-9c39fb75b73d.png)

↑↑サンプルシーン、ライティングはBakeを使用

# Baked Lightingとは
事前にライティング結果をテクスチャに書き込んでおく（ライトマップ）
実行時にこのライトマップを参照することで、軽量にライティングを行うことができる

## 何を焼くか
太陽光の影だけでない
赤い物体の反射光は周りに影響を及ぼす。
赤い物体と青の物体の周りは混ざって紫になる

太陽光の光を直接光
周りの物体の反射光を間接光
![間接光.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7680/defe1021-4705-3594-7703-a7899d4958db.png)
↑↑右の青い壁が青い間接光を放って床を青くしている

これに環境光（Skyboxなどライト以外の影響を受けたもの）を加えたものを
<b>大域照明(Global Illumination/GI)</b> と呼びます

Baked LightingのライトマップにはこのGIがすべて書き込まれます

![sample_baked_lightmap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7680/bbbef0fc-759c-4472-d96e-971799125263.png)

Unityの左上メニューから「Baked Lightmap」にすると
Bakeされたライトマップが確認できるので便利です

# GIとは
https://docs.unity3d.com/ja/2018.4/Manual/GIIntro.html

# Bakeはどうやってるの？
Bakeの技術的なロジックは意外と普通です

Bake時に各ピクセルからランダムにRayを飛ばし、光源にたどり着いたらその光源の影響を受けます
オプションで直接光のサンプル数、間接光のサンプル数、光が跳ね返る回数、が指定でき、
その設定で光をシミュレーションしてライティング結果を算出します

### フィルタリング(Filtering
ランダムにRayを飛ばしているので、ピクセルごとに光源に辿り着く/辿り着かないが起こりムラが発生します
フィルタリング機能でこのムラを減らすことができます

### アンビエントオクルージョン(Ambient Occulusion)
物質の端が少し暗くなる現象を疑似的に表現する機能です
ONにすることでリアリティが増します

https://docs.unity3d.com/ja/2019.4/Manual/LightingBakedAmbientOcclusion.html

### UVチャート
Baked LightingにおいてUVsは重要らしい
Lightmap UVsは日陰と日向で被ってはいけないので、albedo UVsとは別に作ることになる
UVのアイランド間では距離を置くようになってるが、稀にピクセルを共有しておかしくなる。これをオーバーラップと呼ぶ
オーバーラップ確認画面で赤く表示される。ただつぶしてるときりがないので、影響度を見て無視できるものは無視したほうがいい

# Bake結果のテクスチャ（ライトマップ）
ライトマップはシーンのBaked Lightingで直接光・間接光の計算結果をシーンに焼き付けたテクスチャのこと
![lightmap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7680/7303d53a-c49f-b68a-69c9-747fad5e6e7c.png)

![Lightmap-0_comp_light.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7680/2ded59d6-1912-80de-4f80-c22343c1186b.png)

マスの大きさがライトマップの解像度割り当てになってる
マスが大きいほうが情報量が少なく、マスが小さいほうがより情報量が多い
UVのアイランド間で距離を置いているのが分かる

# オマケ：どのオブジェクトの影をBakeするか？
Baked Lightingは負荷軽減に大きな効果をもたらしますが
影を変えることができないので多くの制限があります

何をBakeして何をBakeしないかはよく考えましょう
多くの場合、Mixed LightingでRealtime Lightingと併用することになると思います

- プレイヤー・敵などの移動物はもちろんBakeしない
  - 移動物の影とBaked影の帳尻を合わせるにはMixed Lightingでライトプローブを利用することになると思います
- 草や木々は風で揺らすのでBakeしない（揺らさないのであればBake可）
- 破壊オブジェクトの影はBakeしない（破壊しても影が残る）
- 光源が移動する場合はBakeできない
  - 昼夜を表現したいならライトマップを差し換えるなどで代用する手も

# オマケ：シャドウマップとライトマップの違いは？
名前は似てますが利用されるシーンは別々です

Unityではリアルタイムの影をレンダリングするためにシャドウマッピングと呼ばれる技術を使用しています
光線がサーフェスをヒットするまでに移動する距離の情報をシャドウマップに入力されています
これでサーフェスから光源の距離と比較すると、影になっているかがわかります
デプスマップと似ていますが視点は光源なのでこれも別物です

# 参考資料

https://www.youtube.com/watch?v=8QM6ZCEsFXE
【技術書】自分用_読んだ技術書を簡単にまとめていくための記事

## はじめに
* 書籍のタイトルをクリックするとAmazonに飛びます。
* 今の自分が欲している内容をかいつまんで読むため、すべてを読み切ったわけではないです。
* アイコンの説明
:grinning:良かった点
:open_mouth:学び
:confused:好みではなかった点


## CSS

### [CSS設計完全ガイド ~詳細解説+実践的モジュール集](https://www.amazon.co.jp/CSS%E8%A8%AD%E8%A8%88%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-%E8%A9%B3%E7%B4%B0%E8%A7%A3%E8%AA%AC-%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E9%9B%86-%E5%8D%8A%E7%94%B0-%E6%83%87%E5%BF%97/dp/429711173X/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=)
**初めて読んだ日：2022/7/23**
**読んだ章：3章**
**目的**
* 設計手法についての理解を深めたかった（3章）

**所感**
:grinning: 設計手法の考え方、規則について学ぶことができた。
:grinning:4章以降は読む量が多いため、適宜確認していきたい。
:grinning:辞書的な役割として、机に置いておきたい
:open_mouth:ベストな設計手法はなく、手法を組み合わせるなどカスタマイズが必要
:confused:筆者が考えた設計手法（PRECSS）が紹介されていたが、他の書籍では扱ってそうにないため割愛した。
:confused:4章以降はBEMとPRECSSの2パターンでコードを記述した例を紹介・解説していたが、PRECSSは割愛。



<!-- コピペ用 
### [タイトル](URL)
**初めて読んだ日：2022//**
**読んだ章：章**
**目的**
* a

**所感**
:grinning:
:open_mouth:
:confused:
-->
React Hookを簡単に理解する

## Hookとは
Hookの定義は、公式文書より`Reactの機能に「接続(hook into)」するための特別な関数`となっていて、
具体的なHookには、useState、useEffect、useContextなどがある。これらの総称としてHookが使われている。

## 何ができるようになったのか
Hookによって何ができるようになったのかは、単的にいうと「Reactの機能がclassを書かなくても使えるようになる」である。
具体的には、今まで下記のように宣言して変更していたものが

```
// 宣言
this.state = {
  count: 0
};

// 変更
this.setState({ count: this.state.count + 1 })
```

Hookを使うと簡単に宣言できる
```
// 宣言
const [count, setCount] = useState(0);

// 変更
setCount(count + 1)
```

## これの何がすごいのか
thisが何かを気にしなくても良くなる。
今まではthisが何かを意識しなければいけなかった。

複雑なコンポーネントは理解しやすくなる
ロジックの副作用による複雑さの解消
初心者　MySQL8に挑戦する 11

# 舳先に立って目がくらむ

　mysql1というdart packageに関する情報は恐ろしく少ない。最新アップデートからまだ一月たってないとはいえ、一番最初は３年前だ。でも、もとからMySQLを使っていて新しくflutterに進出してきた人なら、backendのいろんな言語が使えるだろうし、逆にflutterから入って、できるだけ手軽に、カジュアルにモバイルアプリを作りたいなら、firebaseのほうがずっといいんだろう。だから、あんまり人気がないんだろうなと思う。

　その数少ない情報をなぞって、ぜんぜんうまく進まないものだから、初挑戦、pub.devのページからGitHubに飛んで、issueを読みあさった。そしたらありますね、私と全く同じエラーが。そして残念なことに、回答してもらえてない。勇気を振り絞って、「私も同じエラーが出ます」と書き込んでみる。

　慎重な技術者、仕事として取り組んでいるエンジニアは、あんまり新しもの買いをしないよな、と見ていて思う。私が初心者から脱却できない原因の一つは、たぶん、新しもの好きだ。MySQL5.7の情報ならいっぱいある。SequelProもたくさんある。Flutterを喜び勇んで３に上げたりしなければよかったのかも、とも思う。

　でも、タイタニックの舳先に立って海を感じてみたいって、思うじゃない、シロートは。荒波すぎて落ちそうだけれど。笑

## 急がば回れ

　mysql1で検索しまくって、新しく拾ったYouTubeは、なーんと、ポルトガル語。ブラジル最大のflutterコミュニティーの教材らしい。10分から25分のビデオがなんと45本もまとまったdartでbackendシリーズの第30回。

https://www.youtube.com/watch?v=vY9IiVXRAsg

　いつもの私だったら、たぶんピンポイントでその回しか見ないんだが、ぱっと見、それでは今までの情報と変わらないようなので、この際、全部見ることにする。といってもポルトガル語なんてわからないので、倍速で見る。とりあえずは写経もせず、ただ見る。ひたすら見る。全画面表示にして、書かれていくコードをひたすら読み続ける。

　もちろん、backendとポルトガル語と、両方身につきました〜、なんて甘いことは起きない。でも、いつもと違うパースペクティブでものを見るのも、いい気分転換になる。というか、ほとんど瞑想ですね。

　ともかく、Workbenchの回を見て、Sesquelから直でデータを入れてみるとか、あ、こっちならterminalのときと違ってnumbersで作った表をぶち込めそうだとか。

　データベースはbanco de dadosという、とか。

　さ、明日から気分も新たに、手を動かそう。

https://qiita.com/dongri727/items/9f612581265f89f81154

https://qiita.com/dongri727/items/7febbad00a8d0cef1382
作画アニメのCG制作でBlenderがどう影響するか。

先ほど、榊さんが作られたblenderのライン生成アドオンが発表されてそれで思ったことをつらつらと書こうと思います。
twitterでは文字数が少なすぎるし、かといって、こういった中途半端な長さの記事を書くため新たなSNSを登録するのも面倒なので、一応ちょっとだけ投稿してるQiitaを借りさせていただいて書こうと思います。

自分はblenderをちょっとしか触ってないし、このツールの今後のアップデート次第だけど。
アニメのCG屋からすると、これでアニメのCGは本格的に3dsMAXを使う利点がなくなってきていると思う。
それは、単純なautodesk製品の年会費が高すぎるっていう問題だけではなくて。
映像を作る上で重要な絵作りの面でも、問題をはらんでいると思ってる。
古くから使っているレンダラーのScanlineも時代に追いつけてなくて綺麗なルックを出せないし、かといってarnoldはアニメのルックにはオーバースペックで重過ぎる。
その中間のクオリティをアニメの制作現場のスピード感で作り出せることが重要だと私個人は思ってます。
その点blenderはアニメの制作現場にもぴったり、画もいい。
無料の利点はそれだけじゃなくて、間接的なメリットとして。
３DCGのデータを3DCGのスタッフ以外のスタッフ全員が見れる状態を作れるのは、アニメの制作現場ではかなり、革新的だと思う。
どんな生産性の向上が見込めるか、画作りの面で改善が見れるかは、まだ実例がないので何とも言えないけど。
pencil+のblenderのアドオン化も時間の問題だし、geometrynodeの表現の幅もかなり広そう。
正直、3dsmaxのtyflowやFumeFXとかの簡単に作れて面白い表現ができるのは魅力的ではあるにはあるけど、blenderのリアルタイムレンダリングを自台で回せるとなると、レンダーファームも持たなくてもよくなって、しかもレンダーファームのいくつかのサーバーをいちいちクライアントにpluginをインストールしないとエラーを吐かなくなるのはかなりデカい。
レンダーファームの環境整備で時折、四苦八苦している会社も現実にあるし、維持費もかなりの物。
正直、autodeskが3dsmaxというソフトウェアを使って、高額な年会費をとる代わりに、アニメの制作現場に対してそれ相応のメリットを提供するのは、かなり難しいと思う。
データ処理記録

データ処理手順

データ数値変換　データがture,falseや地域、性別など　数値に変換
データ欠損確認　欠損値多い軸消すか平均で補間
データ標準化　正規化か標準化する
主成分分析　次元削除　テストデータに対しても行う
LGBM　精度確認

主成分分析
FilterMethod　
　説明変数に影響を与えない軸消す
　相関が高い軸消す

Wrapper Method
　特徴量を選択しそれぞれにおいて性能評価し適切な軸を選ぶ

Emedded Method
特徴量選択をモデルの学習時に行う
Filter Methodでは計算することのできなかった変換の関係も、この手法で計算することができます。また学習時に探索するため、Wrapper Methodよりも計算コストはかなり低い
手順は
モデルを学習させる
特徴量の重要度を算出する
重要でない特徴量を削除する


教師あり学習
フォレスト　回帰、分類
サポートベクトルマシン　分類
線形回帰　回帰


フォレスト 教師あり学習
バギング
弱分類器を複数用意し、アンケートで分類する　ランダムフォレスト
ブースト
1つの分類器を使用し誤差が小さくなるように予測値を更新する。
XGBoost,LGBM　

特徴量の重要度出すことができる。
ビルドに使用するJavaバージョンを切り替える方法

# はじめに
gradleファイルに定義しているJavaのバージョンを切り替えた後、AndroidStudio側の設定を変えずにビルドすると、ビルドエラーになります。
上記エラーになった場合の対応として、設定の切り替え方を残しておこうと思います。

# 設定の切り替え方
①Android StudioのPreferesceから設定を開きます。
②以下スクショに沿って、Build,Execution,Deployment→Build Tools→Gradleと開いていきます。
![スクリーンショット 2022-07-23 20.13.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/7e0ca5ec-01f3-dbc6-f7f8-f8282934a9f3.png)
③上記開いていった先のGradle画面にて、Gradle JDK項目欄のJavaバージョンを任意のものに切り替えます。
![スクリーンショット 2022-07-23 20.15.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/db168af2-414c-3783-237a-a9530461716c.png)
※ここに選択したいJavaバージョンがない場合は、Javaのインストールから行う必要があるかもしれません。
④あとは設定した内容を反映してビルドすればエラーは解消されているはずです。

# さいごに
こういった設定って暫く離れると忘れたりしますよね。
後になって再度調べたりして時間を取られないよう、今後はこういった内容のものもまとめておこうと思います。
サイバーセキュリティお嬢様「F5攻撃（アタック）ってなんですの？」

# ある日
サイバーセキュリティお嬢様（以下CSお嬢様）「よーし、」
CSお嬢様「わたくしが応援している、山風のコンサートチケットの争奪戦ですわぁー！」
CSお嬢様「早速、**F5連打**いたしましてよー！！」

じいや「**お嬢様！**」

CSお嬢様「じいや一体何事ですの」

じいや「サイバーセキュリティお嬢様を名乗るのならば」
じいや「F5攻撃や、DoS攻撃についてお勉強する必要がありますな」

# F5攻撃とは
CSお嬢様「F5攻撃ってなんですの？」

じいや「F5攻撃とは」
じいや「文字通りF5キーを押してリロード操作を続けることで」
じいや「サーバに負荷を与える古典的なサイバー攻撃の手法ですぞい」

CSお嬢様「あらやだ、わたくしが今まさにやっていたことでして？」

じいや「お嬢様程度ならあまり問題はないでしょうが」
じいや「**自動化ツール等で大量のアクセスを送るのは絶対にやめるべき**ですぞ」

## サーバとは
CSお嬢様「ところでサーバってなんですの？」

じいや「おやおや、お嬢様にはまだその説明をしていませんでしたな」
じいや「サーバ（Server）とは」
じいや「**サービスを提供するソフトウェアやコンピュータ**のことを指すのですぞ」

じいや「メールサーバ、DNSサーバ、Webサーバ、DBサーバなどの様々な種類があるのです」

CSお嬢様「いまいちピンとこなくってよ？」

じいや「サーバを語るには、クライアント（Client）の説明もいたしませんとな」
じいや「クライアントとは、**サーバのサービスを受けるソフトウェアやコンピュータのこと**を指すのです」

CSお嬢様「なんとなくわかってきましたわ」
CSお嬢様「つまり」
> じいや：サーバ
> わたくし：クライアント

CSお嬢様「↑こういうことでして？」

じいや「まあ、今はそういう理解で良いでしょう」

# DoS攻撃とは
じいや「ではDoS（ドス）攻撃の説明に参りましょうぞ」

CSお嬢様「DoS攻撃ってなんですの？」

じいや「DoS攻撃とは」
じいや「Denial of Service attackの略で、」
じいや「**サーバに大量のアクセスを行い、サービスを利用できなくする攻撃**のことを指すのです」
じいや「CIAでいう、**可用性**を侵害する攻撃のことですな」

CSお嬢様「じゃあ、F5攻撃もDoS攻撃になりますの？」

じいや「お嬢様もだんだん分かってきましたな、その通りですぞ」

# DDoS攻撃とは

じいや「そしてDDoS攻撃についても触れておきましょう」

CSお嬢様「でぃーどす攻撃、ってなんですの？」

じいや「DDoS攻撃は」
じいや「Distributed Denial of Service attackの略で」
じいや「Distributed、つまり分散型のDoS攻撃ですじゃ」

CSお嬢様「攻撃が...分散されますの？」

じいや「**逆ですぞ**」
じいや「**踏み台**とか、**ゾンビPC**とか呼ばれる多数の（分散した）端末から」
じいや「一斉に対象のサーバへ攻撃を仕掛けるのですじゃ」

CSお嬢様「DoS攻撃の強化版、ってことですわね」

じいや「まあそのように考えてよろしいですぞ」
じいや「そして」
じいや「攻撃者はゾンビPCを利用して**ボットネット**と呼ばれるネットワークを構築、」
じいや「**C&C（Command & Control）サーバ**と呼ばれる、司令塔のような役割をするサーバと通信を確立するのです」

CSお嬢様「ボットは、[以前](https://qiita.com/choco_py3/items/00af04f6906de4135b48)お勉強しましたわね！」

じいや「おお、流石のお嬢様も覚えていらっしゃいましたな」

CSお嬢様「じいや、軽口が過ぎましてよ！」
CSお嬢様「それで、C&Cサーバが命令して、一斉に攻撃を仕掛けるのね？」

じいや「その通りでございますぞい」

# DoS/DDoS攻撃を防ぐには
CSお嬢様「ねえじいや、」
CSお嬢様「実際にDoS攻撃やDDoS攻撃にあったらどうすればいいんですの？」

じいや「いいご質問ですな」
じいや「DoS/DDoS対策には以下のようなものがありますぞい↓」

:::note 
・十分な帯域のネットワークを利用する
・十分な処理能力を持つ機器を利用する
・CDN（コンテンツデリバリーネットワーク）サービスを利用し負荷分散を図る
・FW（ファイアウォール）などで攻撃パケットを遮断する
:::

CSお嬢様「もう！よくわからなくってよ！」

じいや「今は分からなくても、そのうち分かる時が来るので大丈夫ですぞい、お嬢様」

# おわりに
じいや「どうでしたかな」

CSお嬢様「DoS攻撃やDDoS攻撃についてなんとなく分かった気がするわ、ありがとうじいや」

じいや「これからも少しずつセキュリティの知識を身につけて」
じいや「**真のサイバーセキュリティお嬢様**を目指すのですぞ」

CSお嬢様「わたくし頑張りましてよー！」

# 参考文献
イラスト図解式　この一冊で全部わかるセキュリティの基本
情報処理教科書　情報処理安全確保支援士 2022年版

### 前回までのあらすじ

[サイバーセキュリティお嬢様「CIAってなんですの？」](https://qiita.com/choco_py3/items/51c04bdc8bfe25fe84f3)
[サイバーセキュリティお嬢様「しんせいせい...ってなんですの？」](https://qiita.com/choco_py3/items/0d05409534f267e40001)
[サイバーセキュリティお嬢様「き...脆弱性ってなんですの？」](https://qiita.com/choco_py3/items/15479e37b011c34abf36)
[サイバーセキュリティお嬢様「マルウェア...？スキーウェアのお仲間ですの？」](https://qiita.com/choco_py3/items/00af04f6906de4135b48)
[サイバーセキュリティお嬢様「クラッカー？何それ食べられますの？」](https://qiita.com/choco_py3/items/40fe5a27af3722daa654)
[サイバーセキュリティお嬢様「ハクティビストってなんですの？」](https://qiita.com/choco_py3/items/262df8fc893cf7fd303f)

### 次回以降
[サイバーセキュリティお嬢様「SQLいんじぇくしょん...ってなんですの？」](https://qiita.com/choco_py3/items/4a597f25f0c3dbbea437)
[サイバーセキュリティお嬢様「クロスサイトスクリプティング？...美味しそうですわぁ！」](https://qiita.com/choco_py3/items/f3bb70ecf819bb55ad80)

# 宣伝
[技術書典13](https://techbookfest.org/event/tbf13)にサークル参加予定です。
良かったら[Twitter](https://twitter.com/choco_py3)フォローしてください！
AWSクラウドプラクティショナー合格体験記

## はじめに

2022年7月にAWS CLFに合格しました。CLFの合格を目指されてる方の参考になれば幸いです。


## CLFの概要

以下の範囲と割合で出題されます。
出題範囲の高いテクノロジーのところを中心に勉強しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2608548/a12c5cdb-cb1c-b645-5e12-28992635b0bf.png)





## 学習教材



[AWS認定クラウドプラクティショナー緑本](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-AWS%E8%AA%8D%E5%AE%9A-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%BC-%E5%B1%B1%E4%B8%8B-%E5%85%89%E6%B4%8B/dp/4797397403)
[AWS スキルビルダー](https://aws.amazon.com/jp/training/digital/)
[AWS WEB問題集](https://learn-aws.cafe/)


## 勉強方法


緑本を1,2週間ほどかけて読み進めました。
緑本と並行してAWSスキルビルダーで動画を見ながら、AWSの基礎の理解を深めました。

緑本を読み終わったら、WEB問題集をひたすら解き進め、間違えたところのみ何度も解き直して試験に挑みました。試験前は出題範囲の広いところを中心に勉強し直しました。


## 試験結果


自信を持って正解だと思えた問題は半分くらいでしたが、無事合格することができました。
同じような境遇の方もそうでない方も含め、この記事が役に立てば幸いです。
Lambdaでpythonの外部ライブラリをレイヤーで使用する方法

# この記事で出来るようになること
#### 結論：外部ライブラリをAWS Lambdaのレイヤーに追加することで、インラインコード編集をできるようにする。

pythonを使用する際に、外部ライブラリを使用することはよくあります。
しかし、Lambda関数自体にローカルでpipしたライブラリファイルをアップロードすると
`Lambda 関数「***」のデプロイパッケージが大きすぎて、インラインコード編集を有効にできません。ただし、関数を呼び出すことはできます。`
と出てしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/748917/23335e1f-2df6-2cce-8154-60eea8e17667.png)
すると、インラインコード編集が出来なくなってしまう。
インラインコード編集を使用しない人にとっては問題はないが、便利であるので使える状態にしておきたい。

# ローカルで外部ライブラリをzip化する
本記事の例ではLINE APIで使用する`line-bot-sdk`を使用できるようにしていくのを例に説明します。

1. line-bot-sdkを「line-bot-sdk」ファイルにインストールする
```python
pip install line-bot-sdk -t ./line-bot-sdk/
```

2.「line-bot-sdk」をzip化させる
　line-bot-sdk.zipを作成する

# レイヤー作成
1. Lambda > レイヤーから、`レイヤーの作成`ボタンを押下する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/748917/34ffcc63-2f99-19ef-567c-616ce2e2656a.png)

2. レイヤーの作成項目を埋める
レイヤーの設定画面で、名前を入力する（説明はどちらでもOK）
`.zip ファイルをアップロード`を選択して、`アップロード`ボタンから先ほどzip化したファイルを選択する。
項目を埋めたら`作成`ボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/748917/995fc732-08df-a026-825a-7c8fa23805e7.png)

3. 作成したレイヤーから、`バージョンARN`をコピーしておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/748917/097f6399-87dd-33c0-885a-329c226bc126.png)

# Lambdaにレイヤー追加
1. レイヤーを追加するLambda関数へ行く
現在はLayersの部分が0になっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/748917/157e82ac-74e5-ec70-fbbf-79103ae59d11.png)

2. コードタブの最下部にある`レイヤー`部分の`レイヤーの追加`を押下する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/748917/48c2f352-7d71-901b-32a8-577effe30d64.png)

3. レイヤー追加の項目を埋めて追加
レイヤーソースで`ARNを指定`を選択する
ARNを指定に先ほどコピーしたレイヤーのARNを張り付けて、`検証`ボタンを押下する
説明にレイヤー名が出ればOKなので、`追加`ボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/748917/dced806a-4485-df31-abca-b503a10d8598.png)

4. Lambda関数のレイヤー一覧から追加できていることを確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/748917/fe3c0787-b1d1-10f1-a192-bf5c4f506322.png)

# まとめ
外部ライブラリをレイヤーに追加して、レイヤー自体をLambdaに追加することができる。
レイヤーを使用することで以下のようなメリットが考えられます。
* インラインコード編集が使用できる
* 複数のLambdaで簡単に外部ライブラリを使用できる
* 外部ライブラリの管理が容易
秒でWebページ~EC2~

事前準備
セキュリティグループで10280ポートフルオープンで空けとく
ディレクトリ移動しないでね

```
sudo yum -y install nmap-ncat
sudo vi index.html.sh
-----以下の点線内ををそのまま貼ってね------

#!/bin/bash
echo -e "HTTP/1.1 200 OK\r\n$(date)\r\nContent-Type: text/html; charset=utf-8\r\n\r\n"
echo "<html><body><p>Hello world</p></body></html>"


----------------------------------------
sudo chmod 777 index.html.sh
nc -l 10280 -k -e index.html.sh

```

ハイ終了^^

ブラウザで以下入力してアクセス

サーバーのIP:10280

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/fef20dc9-9602-10bc-3433-a8061a4ff92c.png)

秒でしょ？

より早いの
```
sudo yum -y install nmap-ncat
(echo "HTTP/1.1 200 OK\r\n$(date)\r\nContent-Type: text/html; charset=utf-8\r\n\r\n";echo;echo "<html><body><p>Hello world</p></body></html>") | nc -lk 12080
```
失敗するとサーバ側にこれしか出ない
```
GET / HTTP/1.1
Host: ホストのIP:12080
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: ja
```

成功すると
```
Host: ホストのIP:12080
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: ja

GET /favicon.ico HTTP/1.1
Host: ホストのIP:12080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Referer: http://3.115.5.128:12080/
Accept-Encoding: gzip, deflate
Accept-Language: ja
```

http://www.ardentfrost.com/2017/09/fake-web-server-using-bash-netcat.html
【Linux】psコマンドについて軽くまとめてみる

# はじめに
普段iOSアプリの開発をメインにしているということもあり、Linuxコマンドにはあまり触れない生活を送っております。
そして、完全にLinuxコマンドアレルギーを発症していました。はい...
でもやっぱり、Linuxコマンドもある程度勉強しなきゃなーと思い、とりあえず気になった`ps`についてまとめてみました。
とはいっても、まだまだ知識が浅いのでご容赦くださいませ。

# こんな人が読むといいかも？
- `ps` コマンド？なんそれ？っていう人

# 環境
- macOS Monterrey ver12.3.1
- intel mac

# なぜmacOSでLinuxコマンド使える？
本題とは少しずれるので興味ない方は飛ばしてください！
psコマンドを調べる中でふと疑問に思いました。

__何でmacOSでLinuxOSのコマンドって使えるん？？__

ということで、少しだけ調べてみました。

### macOSでLinuxコマンドが使える理由
簡単にいうと、macOSとLinuxOSは親戚同士みたいな関係らしいです。
- macOSができた`Unix`というOSをベースにできたもの
- LinuxはLinusさんと言う人物が`Unix`っぽく作ったOS

と言う感じでどちらも`Unix`に近いみたいですね。
この辺ももっと色々な経緯などがあるんだろうと思いますが、これくらいにしておきます。
以下の記事がわかりやすかったので、もう少し知りたい人は読んでみるといいかもしれません。

https://eng-entrance.com/unix_linux

# psコマンドとオプションたちの紹介
## 何するコマンドなん？
- プロセスを確認できる！

つまり、パソコン上でどんなプログラムが実行されているのかがわかるということみたいですね。

### psコマンド
`ps`のみを打つと現在自分が起動しているプロセスを見ることができます。実際にコマンドを打ってみると以下の画像のように表示されます。
僕のmac上ではzshelが起動しているよ。ということですかね。

![スクリーンショット 2022-07-23 17.33.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2644705/4107a7e1-c9aa-7a58-694d-ea52594a2aeb.png)

|項目|意味|
|---|---|
|PID|プロセスのID(プロセスをKillしたい時とかに使える)
|TTY|制御端末名|
|TIME|プロセスを実行するためにCPUを使った時間|
|CMD|プロセスの実行コマンド|

## psコマンドのオプションについて
### オプションコマンドの使い方

オプションを使うためには以下のように実行します。

```
$ ps [使いたいオプションの記号]
```

オプションを複数同時に使うことも可能で、その場合は以下のように使いたいオプションを並べて書けばOKです。

```
$ ps u
$ ps aw
```

### とりあえずこれは覚えておくとよさそう

オプションは結構たくさんありますが、以下の４つのオプション(a,u,x,w)を使えば大体の情報を拾えるみたいなので、psコマンドとセットで覚えておくとよさそうです。

```
$ ps auxw
```
以下のように`grep`コマンドと一緒に使うことで特定のプロセスだけを抽出することもできます。

```
$ ps auxw | grep [抽出したいワード]
```


### 主要なオプションの一覧紹介
結構たくさんあります。

|オプション|機能|
|:---:|:---:|
|u|ユーザー名や時刻、メモリの使用率なども追加で表示します |
|a|全ユーザーのプロセスを表示します。rootUserなどのプロセスも表示されます。|
|x|制御端末のないプロセス情報の表示します。|
|l|プロセスの優先度などを表示します。|
|w|プロセス情報の表示行数を増やします|
|j|親プロセス、プロセスグループなどを表示します|
|m|スレッドを表示します。psだけの時の項目+スレッド|
|t|端末ttyが制御するプロセスのみ表示します。|

### オプションを使った時に表示される項目
オプションを使うと`ps`を単体で使った時よりも多くの情報を得られます。
項目についての説明を全て書いているとものすごく長くなってしますので、個別の項目の意味については以下の記事を読んでみてください。

https://qiita.com/toshihirock/items/565fe71d778d3ee36b96

# プロセスをGUIで確認する方法
macであればアクティビティモニタを開くことで、プロセスを確認することができます！

# おわりに
色々調べてなんとな〜く記事にしてみたんですが、そもそもpsコマンドを使わないとどうにもならない！という場面に遭遇したことがないので、はたしてどこが重要なのかということがあまりわかりませんでした...
いつか、ps！ps！ってコマンドを打つようになった時にまたこの記事を自分で見直してみようと思います。
今回、ちょっとだけ`ps`コマンドについて詳しくなれました。
おわり。
STM32L010でI2C EEPROで遊ぶ2



目的
I2C EEPROMのテスト

通販コード　K-12061


![o_con587.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/47a44424-8d91-d868-642e-b1fa64a46c44.jpeg)



書き込み


```c++

//SER_I2C_EEPROM_write1_010_1

#include "mbed.h"

I2C i2c(PA_10, PA_9); //010

//#define S5851A 0x48
#define ADDR        ((0x50)<<1)   //  address


//四桁の変換
//#define DIV10(n) (((n*409)+((n*154)>>8))>>12)
int DIV10(int n)
{
    return    (((n*409)+((n*154)>>8))>>12)    ;
}
char data[16];
char *itoa9999(int d)
{

    data[4] = 0;
    data[3] = '0' + (  d - (DIV10(d) * 10)  );  // '0'+(d%10)
    d = DIV10(d);
    data[2] = '0' + (  d - (DIV10(d) * 10)  );  // '0'+(d%10)
    d = DIV10(d);
    data[1] = '0' + (  d - (DIV10(d) * 10)  );  // '0'+(d%10)
    data[0] = '0' +  DIV10(d);                  // '0'+(d/10)

    return (data);

}//itoa99

//仮想シリアルへの一文字出力 9600bps
DigitalOut TX(PA_2);
//DigitalIn  RX(PA_3);
#define UART_DELAY 101 //  1/9600 98-105
int pc_putc(char ch)
{
    TX=1;
    TX=0;//Start
    wait_us(UART_DELAY);

    for(int ii=0; ii<8; ii++) { //Data x 8
        TX=(ch>>ii)&1;
        wait_us(UART_DELAY);
    }; //for

    TX=1;//Stop
    wait_us(UART_DELAY);

    return(0);
} //pc_putc


//文字列の表示 nana_seg
int pc_puts(char *str1)
{
    //文字の中身がゼロか
    while(*str1) {
        pc_putc( *str1 ++);
    } //while

    //戻り値
    return(0);
}//pc_puts

int main()
{

    char data1[8]; //バッファー

    pc_puts("\r\n<START>\r\n");


        pc_puts("for 0 to 15\r\n");

        for(int ii = 0; ii<16; ii++) {

            //アドレス
            //set address
            data1[0] =    ii >> 8   ;
            data1[1] =    ii & 0xff ;
            //pc_puts( itoa9999(data1[0]) );
            //pc_puts( "#" );
            //pc_puts( itoa9999(data1[1]) );
            //pc_puts( " " );
            //データ
            data1[2] = ii;
            //書き込み
            i2c.write(ADDR, data1, 3); //addres 0

            pc_puts( itoa9999(data1[2]) );
            pc_puts("\r\n");

            //1秒待つ
            wait_ms(1000);

        }//for


}//main

//容量削減
void error(const char* format, ...) {}




```
Webライターの１文字あたり0.1円に驚いた。Blender 3Dだといくら稼げるのかなぁ？

Webライターの仕事は、１文字あたり0.5円とのこと。

調べてみると、初心者は１文字あたり0.1円で、稼ぐ人になると１文字あたり10円が相場らしい。

0.1円だと、４００字詰め原稿用紙１枚書いて、40円かぁ。**なんか悲しいなぁ。**

米国のIndeedに行ってみて、いろいろ調べてみました。（日本ではなく、米国のIndeedです。）

>[Indeed](https://www.indeed.com/)

「Web Writer」で検索してみると、

- Freelance Writer, Remote in New York, ＄18 - ＄30 an hour
- Food and Grocery News Writer, Remote, ＄21 an hour

などがヒットしました。
現時点で、１ドル136円なので、

- フリーランスのライター 2,448円 ~ 4,080円/時
- 食品と日用品のライター 2,856円/時

となります。**ますます悲しくなるなぁ。**

さらに気になったので、「blender 3d」で検索してみた。

- Blender 3D Character Creation Teache, Remote, ＄40 - ＄50 an hour
    - →Blender 3D キャラクタ作成の先生 5,440円 ~ 6,800円/時
- Character Modeler for Mobile Game ( Blender ), Remote, ＄20 - ＄60 an hour
    - →モバイルゲームのキャラのモデラー 2,720円 ~ 8,160円/時

**これはおいしそうなお仕事ですねぇ。**

この前、ニュースでやってましたが、NYの大戸屋のサバ塩焼き定食が、＄28とのこと。（3,808円）
「物価が高くなって大変だ」ということも事実なのだが、
**その値段でもサバ塩焼き定食を食べている人がいるということ。
米国消費者には、購買力があるということだ。**

**日本だけ置いてけぼりだなぁ。**
PostgreSQLのバックスラッシュコマンドの中身を知るのは-Eが便利

# はじめに
Qiitaに初投稿です。
小さい記事ですが、同じように気になってる方の一助になれば幸いです。


# まず結論
psqlコマンドの-Eオプションを利用するとバックスラッシュコマンドのクエリが確認できます。
```
$psql -E 
tablename=# \d
```
# きっかけ
最近業務でPythonからPostgreSQLを触る機会が増えてきました。
その際、利用しているライブラリは「psycopg2」ですが、1点困ったことが。

それは、<B>PostgreSQLのバックスラッシュコマンドが使用できない</B>ことです。

例えば自作のテーブル名を知ることを目的に、「\d」を利用できれば、
以下の自作テーブルの一覧を取得できます。
しかし、それができません。


● リレーション一覧
|  スキーマ  | 名前           | タイプ     | 所有者   | 
| ---------- | -------------- | ---------- | -------- | 
| public     | samples        | テーブル   | postgres | 
| public     | samples_id_seq | シーケンス | postgres |

タイプ: テーブルやシーケンスのテーブル名は以下のクエリでも取得できますが、
タイプの種類が増えた時は、都度クエリの追加が必要になります。
```
SELECT table_name FROM information_schema.tables WHERE table_schema='public';
SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = 'public';
```

やはりバックスラッシュコマンドを使用したいのが本音です。
これは何で構成されているのでしょうか? 

# Eオプションの存在を知る
ドキュメントを眺めていたところ、以下のオプションがあることに気が付きました。
[公式ドキュメント](https://www.postgresql.org/docs/current/app-psql.html#:~:text=%2DE-,%2D%2Decho%2Dhidden,-Echo%20the%20actual)
>-E --echo-hidden 
Echo the actual queries generated by \d and other backslash commands. You can use this to study psql's internal operations. This is equivalent to setting the variable ECHO_HIDDEN to on.

ドンピシャなことが書いていますね。
どうやら各バックスラッシュコマンドはクエリで定義されているようです。

実際にやってみましょう。

```
$psql -E -d <DB_NAME> -U postgres
<DB_NAME>=# \d

******** 問い合わせ ******
SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'partitioned table' WHEN 'I' THEN 'partitioned index' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','p','v','m','S','f','')
      AND n.nspname <> 'pg_catalog'
      AND n.nspname <> 'information_schema'
      AND n.nspname !~ '^pg_toast'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
**************************
```


期待するものが得られました!

これを利用することで、psycopg2を使用する上で困ったことが一つ減りそうです。
(あと凄くクエリの勉強にもなります)


# 最後に
初めて書いてみました。
今後も日ごろに疑問になって調べた内容を少しずつ上げていけるように頑張りたいと思います。