OmniAICreator/Qiita-1.07M huggingface dataset:
Ruby 標準ライブラリのクラスとメソッドまとめ

***:cherries:学んだことを随時まとめてく:cherries:***
<font color="MistyRose">間違っている点があれば是非教えていただきたいです<font>


- Date クラス(日付処理)
```ruby
#現在の日付(年/月/日)を取得
today = Date.today             #.year/.month/.day
puts today #=> yyyy-mm-dd      #=>yyyy/=>mm/=>dd

#文字列を日付に変換
date_str = "xxxx-xx-xx"#文字列
date = Date.parse(date_str)
puts date #=> xxxx-xx-xx(日付オブジェクト)

#日付オブジェクトを指定したフォーマットの文字列に変換
date = Date.today
formatted_date = date.strftime("%Y-%m-%d")   #("%Y年%m月%d日")
puts formatted_date #=> "xxxx-xx-xx"　　　　　　　　　　　　　  　#=> "xxxx年xx月xx日"
```
- Stringクラス(文字列処理)
```ruby
#文字列の長さ（文字数）を取得
str.length または str.size
#文字列が空であるかどうかを判定
str.empty?
#文字列を大文字または小文字に変換
str.upcase または str.downcase
#正規表現にマッチする部分を指定した文字列で置換
str.gsub(pattern, replacement)
#指定した区切り文字で文字列を分割し、配列に格納
str.split(separator)
#文字列に別の文字列を結合
str.concat(other_str)
```
Dockerfileを作成するときのコマンド

------------------------
説明
Dockerfileを作成するときによく使うDocker instructionについて解説します。

-------------------------
FROMについて・・・
```dockerfile:Dockerfile
FROM <docker image>
#exaple
FROM ubuntu:latest
```


　Dockerイメージを作成するときに、元にするDockerイメージを指定します。
　例では、ubuntuのlatest（最新版）のDockerイメージを元にするように指定しています。

　DockerfileはFROMから始めるようにします。

---------------------------------
RUNについて・・・
```dockerfile:Dockerfile
RUN <command>
#example
FROM ubuntu:latest
RUN mkdir sample_folder
```
　RUNの後に<command>を指定することで、その<command>を実行できます。
　例では、Dockerコンテナ作成時にsample_folderという名前のフォルダを作成します。

-------------------------------
COPYについて・・・
```dockerfile:Dockerfile
COPY　<src> <dest>
#example
FROM ubuntu:latest
RUN mkdir new_dir
COPY sample.txt /new_dir
```
　ローカルに存在するファイルをDockerコンテナにコピーしたいときに使用します。
　
　例では、ubuntuのosを作成し、"new_dir"という名前のフォルダを作成します。
　その後、ローカルにあるsample.txtファイルをDockerコンテナのnew_dirフォルダ内にコピーするためにCOPYを使用しています。
　COPYを使用することで、ローカルにあるsample.txtファイルと全くおなじsample.txtファイルがDockerコンテナ内のnew_dirフォルダ内に作成されます。

＊COPYはフォルダもコピーできます。

-------------------------------------
ADDについて
```dockerfile:Dockerfile
ADD <src> <dest>
#example
FROM ubuntu:latest
ADD sample.tar /
```
　tarの圧縮ファイルをコピーして解凍したいときに使用します。
　サイズの大きなファイルをDockerコンテナに追加したいときに使います。
　COPYととても似ていますが、ファイルサイズによって使い分けます。

例では、sample.tarファイルをroot直下にコピーして解凍するように指定しています。



----------------------------------
CMDについて
```dockerfile:Dockerfile
CMD ["command","引数", ...]
#example
FROM ubuntu:latest
CMD ["ls", "--help"]
```
　CMDはDockerコンテナ作成時に実行するコマンドを指定することができます。

　例では、lsコマンドをhelpオプションで指定しています。


----------------------------------
ENVについて
```dockerfile:Dockerfile
ENV <key> <value>
#example
FROM ubuntu:latest
ENV sample_key value
ENV sample_key1=value1
```
ENVはDockerコンテナ内で使える環境変数を指定することができます。

例では、sample_keyという環境変数にvalueという値を割り当てています。

----------------------------------
WORKDIRについて
```dockerfile:Dockerfile
WORKDIR <絶対path>
#example
FROM ubuntu:latest
RUN mkdir new_dir
WORKDIR /new_dir
RUN touch new_file
```
Docker instruction(RUNやCOPYなど)の実行ディレクトリを変更することができる

例では、new_dirというフォルダを作成し、WORKDIRでnew_dirフォルダでRUN touch new_fileが実行されるようにしています。
つまりnew_dirフォルダ内にnew_fileファイルを作成しています。
キャッシュフロー予測にDataikuを活用

企業はデータサイエンスと機械学習を活用することで、時間の節約、より効率的なプロセス、コストの最適化といったことが可能になるだけでなく、現代の企業や変化する環境に対して十分に正確な結果を出すことが可能な、フルオートメーションのキャッシュフロー予測にも活用することができます。
[*→EBOOK「財務チームにおけるアナリティクスの推進」を読む*](https://pages.dataiku.com/advancing-analytics-finance-flipbook-jp)
![dollar-signs.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/638bb7db-5e33-d04a-3655-46784a10ca38.jpeg)



もし、手作業による予測よりも20％精度が高く、財務専門家の負担を80％軽減する自動のキャッシュフロー予測を開発できたとしたらどうでしょう？このブログの後半では、ある企業がそれを実現した方法を紹介します。

欧州企業財務担当者協会（EACT）が2020年3月に実施した[調査](https://www.eact.eu/articles/cash-flow-forecasting-in-uncertain-times/)によると、調査対象となった財務部門の半数以上が、今後12−24カ月間の最優先課題としてキャッシュフロー予測を挙げています。しかし、経済変動や混乱時の予測が不正確であるならば、それでもキャッシュフロー予測を行う必要があるのだろうかと疑問に思われるかもしれません。その答えは間違いなくイエスです。


## 実際の例
最近では、JTIがDataikuの[コラボレーション可能なデータサイエンスおよび機械学習プラットフォーム](https://www.dataiku.com/ja/製品/)上で取り組んだキャッシュフロー予測に関するデータサイエンスプロジェクトが、欧州企業財務担当者協会（EACT）から評価されました。

その方法は以下の通りです：
- まず、過去のデータと予測に基づいて初期モデルを作成そ、トラッキングのためのメトリクスとともに成功の基準をまとめました。この最初のスプリントでは、手動での予測と同じ精度で予測することができました。
- 次の第2スプリントでは、JTIチームは、企業が活動する各地域の失業率や国内総生産（GDP）などの外部の数値を追加しました。これらについて、相関関係の可能性が検討されました。
- 第3スプリントでは、生産拠点のアウトプットなどの内部要因も検証されましたが、予測の信頼性に大きな変化は見られませんでした。最終スプリントでは、JTIチームは予測モデルを最適化し、5つの異なるバリエーションを作成しました。そのうちの1つのモデルは、現在の数値だけでなく翌月の予測も考慮するため、変更に対して非常に柔軟であることが判明しました。
具体的な結果に関しては、自動化されたキャッシュフロー予測の精度は、手作業による予測よりも20％高いものになりました。予測を担当する財務専門家の作業量は80％減少し（月あたり320時間に相当）、1日の時間の中でより多くの時間を他の重要なプロジェクトに充てることができるようになりました。さらに、より正確な予測により、キャッシュフロー全体のより効率的な管理が可能になりました。Dataikuプラットフォームによって、ビジネスリーダーは、アナリストチームのメンバーが作成したキャッシュフロー予測を可視化することができ、潜在的なシナリオとともに、日常的なものからハイレベルで戦略的なビジネス目標に影響を与えるものまで、意思決定に役立つ情報を得ることができます。


## 財務業務の標準化をさらに進めるには
データやプロセスに溺れるのはもうやめませんか？[このEBOOK](https://pages.dataiku.com/advancing-analytics-finance-flipbook-jp)は、財務チームが高度なアナリティクスプロセスを効率化できるよう支援します。


<br>
<br>

*原文： [Dataiku Leveraged for Cash Flow Forecasting](https://blog.dataiku.com/dataiku-leveraged-for-cash-flow-forecasting)*
LinuxのTopコマンドの出力をcsv出力する

LinuxのTOPコマンドをCSVで出力するPythonスクリプトです。

```'''
topコマンドのプロセス行を以下のカラム構成でcsvファイルに出力する
timestamp,USER,PR,NI,VIRT,RES,SHR,%CPU,%MEM,TIME+,COMMAND
第1引数: csv化対象topファイル
第2引数: 出力ファイル名
'''
import re
import os
import csv
import sys

####### 変数設定 ###############

# inputファイル名
input_file_name=sys.argv[1]
# outputファイル名
output_file_name=sys.argv[2]

# プロセス実行OS USER名
target_user = "usr+"

# topコマンドでプロセス行の始まりの位置
process_row_start = 8
# topコマンドでプロセス行のUSERカラムの位置
user_column = 2
# topコマンドでプロセス行のCOMMANDカラムの位置
command_column = 12

# timestamp正規表現
r_top_timestamp = re.compile("top - ([0-9:]+)+")

######## main 処理 #############
if __name__ == '__main__' :
    ###top.logファイル読み込み
    f = open(f"{input_file_name}", "r")
    toplog_lines = f.readlines()
    f.close()

    ### timestamp行の抽出
    timestamp_list = []
    roop_cnt = 0
    for toplog_line in toplog_lines :
        # 正規表現でtimestamp一致したら行番号を配列に入れる
        if r_top_timestamp.search(toplog_line) != None:
            timestamp_list.append(roop_cnt)
        roop_cnt += 1

    ### 対象Userのプロセスを抽出
    rows_count = 0
    tmp_timestamp = ''
    tmp_output_csv_list = []
    output_csv_list = []

    for toplog_line in toplog_lines :
        # 1回のTOP行数カウント +1
        rows_count +=1
        # 行末尾の改行を削除
        toplog_line = toplog_line.rstrip()

        # 改行のみの場合次の行へ
        if not toplog_line :
            continue

        # タイムスタンプ行の場合、リストに追加する
        if r_top_timestamp.search(toplog_line) != None:
            print(toplog_line)
            tmp_timestamp = r_top_timestamp.search(toplog_line).group(1)
            # 1回のTOPコマンド結果、行数カウント初期化
            rows_count = 1
            continue

        # プロセス行の場合、Userが一致すれば抽出する
        if rows_count >= process_row_start:
            column_number = 0
            row_data = toplog_line.split(" ")
            # タイムスタンプを設定
            tmp_output_csv_list = [tmp_timestamp]

            # 行末まで繰り返す
            for column_data in row_data:
                if column_data =="":
                    # 空白の場合次のカラムへ
                    continue
                column_number += 1

                # COMMANDカラムまでのデータをtmpリストに入れる
                if column_number <= command_column :
                    tmp_output_csv_list.append(column_data)
                else :
                    continue

                # 抽出対象レコードかをチェックする
                if (column_number == user_column) and (str(column_data) == target_user):
                    user_key_flg = True
                    if user_key_flg == True :
                        pass
                    else:
                        break
            # for文をbreak以外で抜けたらCSV抽出リストに追加する
            else:
                output_csv_list.append(tmp_output_csv_list)


    ### CSV書き出し
    csv_header = ['timestamp','PID','USER','PR','NI','VIRT','RES','SHR','S','%CPU','%MEM','TIME+','COMMAND']
    with open(f'{output_file_name}','w') as f:
        csv_writer = csv.writer( f, delimiter = ',', lineterminator = '\n') 
        csv_writer.writerow(csv_header)
        csv_writer.writerows(output_csv_list)

```
専門学校入ったら先輩に誘拐されてハッカソン優勝した話

# はじめに
今回はじめてハッカソンに出場し初優勝しました！
その経緯などを書きたいと思います

# 出場したハッカソン
https://talent.supporterz.jp/events/c34e4db0-6a69-44c2-925e-f18024b4fdb6/

# 目次
* 経緯編
* 制作編
* 発表編
* 感想
# 経緯編
入学して1ヵ月に先輩の勢いのある誘いで断る隙もなく参加が決定しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488556/824502f6-8edc-ccde-7086-289490edf8ab.png" width="350px">
この誘いが***あんなことになるとは...***

今回先輩を含め5人で出場したのですが一年生4人でその中プログラミングを触ったことがあるのが私のみで私もpythonやC言語で組み込みをやっていたのみなのでweb系は初めてでした。

# 制作編
- 制作したもの
今回私たちはヤギを言葉の感情で育成するアプリを作成しました。以下はプレイ動画です。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488556/bd57a45e-b10b-7c29-2c95-fbca572b8117.gif" width="200px">

- 使用した技術
  - フロントエンド
      - React+vite
      - Typescript
      - MUI
  - バックエンド 
      - firebase
          - Hosting
          - Functions
      - node.js
  - その他の技術
     - Chat GPT API 
     - Github
     - Github Actions
     - Lint・format

# 本番編
本番では私は発表を行いました
スライドでは技術面を押すだけではなく、ユーザ側もわかりやすくかつ、スライドには文字を少なくという意識で作っていました。
また、できるだけ画像、動画を使用し、どういう動きをするか、何を使っているかなど、視覚的に伝えることができるように作成しました。
一人ですべて発表するため、失敗したら全員の努力が無駄になるという異常な緊張感に体が押しつぶされそうでした。
結果としては発表は成功で最優秀賞もとることができ達成感でいっぱいでした。

#### 発表スライド抜粋
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488556/29c54566-cb32-36fc-c123-b2dda6473f1d.png" width="300px"><img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488556/d4dc10c2-111c-72b3-aa3e-abad41f7aa38.png" width="300px"><img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488556/4a0d37b0-d886-b2bb-d775-e4088bf65677.png" width="300px">

# 感想
今回、初めて参加したハッカソンでチームで開発する楽しさと、難しさを学び
また、チームメンバーが時間をかけて作成した物を発表する異常なほど、緊張とプレッシャーを経験し、今回Reactを使用しての作成で、自分の中で新しい技術に触れることができて楽しかったです。
今回のハッカソンに誘って頂いた先輩にはホントに感謝しかありません。
次も頑張るぞー！


###### 今回誘拐してきた先輩(全体)
qiita
https://qiita.com/Yuma-Satake
Twtter
https://twitter.com/yuma_satake22

###### メンバー
画面構成,アニメーション
qiita
https://qiita.com/E_MM
twtter
https://twitter.com/E_Minamizono

Api周り,アニメーション
twtter
https://twitter.com/mtc0m

最後まで読んでくださりありがとうございました。
iteratorをstreamにする


安全かは不明。。java17で動作確認。

``` java
public static <T> Stream<T> iterator2stram(Iterator<T> iterator) {
	Spliterator<T> spliterator = Spliterators.spliteratorUnknownSize(iterator, 0);
	return StreamSupport.stream(spliterator, false);
}
```

# 参考
https://qiita.com/yoshi389111/items/7cd7883d1d838e95a9fa
郵便番号から最新住所を検索できるLINE Bot

# LINE Botにチャレンジしました。

## 制作の背景
地名変更は、毎年発生しています。（2023年は6月までに33か所）
郵便物等を発送する際、該当するお客さま、取引先さまなど宛先がタイムリーに地名変更に対応していると、それで相手に対する意識の高さを感じていただけたりするかもしれません。
保管していた住所データから最新の住所が簡単に検索できたら便利。
住所検索サイトがあるので本格的に調べる方はそちらを使われるでしょう。
あくまで手軽に使えるツールとして成り立つように作成してみました。

## 使用ツール
- MAKE
- LINE Bot
- 郵便番号検索API
- 郵便検索HP（リンク設定）
- 国土地理協会HP（リンク設定）

## MAKEシナリオ
HTTPモジュールへ郵便番号APIを設定し、JSONモジュール経由して都道府県、市町村、地名まで表示設定、ルーターでNGを振り分け、関連サイト表示で、番号不明の問題解消提案をしています。

![2023-07-04_17h06_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478695/02a07ffd-9a6e-1092-b90d-89ddcf7b653f.png)


## 操作説明
LINE Botにアクセスいただいたら7桁の郵便番号を入力するだけです。
都道府県、市区町村、町名まで表示されます。
現在は日本郵便公開の、2023年6月30日更新分全国一括データを使用していますので最新の住所検索が可能です。
　　　　※事業所個別番号には対応しておりません。
　　　　※番号のわからない方は、対象外となる（桁数不足など）を入力してください。
　　　　　関連リンク先（郵便、国土地理協会）が表示されますので検索いただけます。
　　　　　 専門サイトに及びませんので、あくまで手軽な便利ツールを目指しました。

## 実行例
　<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a>`<br>郵便番号から最新住所を検索するLINEbotを作成してみました。初心者のため、至ってシンプルですが、手軽にLINEで使用できる便利ツールを目指しました。 <a href="https://t.co/pROtwGd8Oy">pic.twitter.com/pROtwGd8Oy</a></p>&mdash; opa11111 (@s_opa11111) <a href="https://twitter.com/s_opa11111/status/1676224500034314241?ref_src=twsrc%5Etfw">July 4, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



画像
7桁の郵便番号入力で検索
最近の地名改変箇所を検索してみました。
![image_住所検索.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478695/206b7421-5be3-ba3b-95b5-9cccd6187744.jpeg)

最新の地名変更確認用に添付しています。（参考サイト：国土地理協会）
![image_住所検索3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478695/03c521f2-8d77-4209-050a-c44ad21957fa.jpeg)

対象外はアラート表示されます
関連ページURLリンクで利便性を向上させました。
・地名変更情報（国土地理協会）
・郵便番号検索（日本郵便）
![image_住所検索2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478695/5a9a6f26-04b4-a2ba-7049-940c7e99dee6.jpeg)



## あとがき
まだまだ勉強不足のため、一部リンクに頼ってしまいましたが、LINE Bot上で全て完結できる作品に進化できるよう頑張ります。最後までお読みいただき感謝いたします。
AzurePolicyでタグ必須指定時のslot作成について

# AzurePolicyでタグ必須指定時のslot作成について
## 困ったこと
Azureでインフラ環境構築中、AzurePolicyを使用して特定のタグを付与することをリソースグループに対して必須としていた。

ほとんどのリソースは作成時にタグを指定することができるので問題なくデプロイできたが、AppServiceのスワップに使用するslotを作成しようとしたところ、指定のタグが付与されていませんというエラーが発生。

## 対応 
おそらく正規の対応方法ではないと思われるが、slot作成時のみPolicyを一時的に無効にしてslot作成し、タグを付与してから再度Policyを有効化

## 今後やりたいこと
Policyの除外ルールにslotを追加する？タグを指定しつつslotを作成する？などの対応方法があるかもしれない。
React 基本知識

# Reactとは
ReactとはMeta社(Facebook社)が開発したJavaScriptのライブラリ．Webサイト上のUIの作成に特化したライブラリ．（フレームワークではないので注意）
SPA(Single-Page Application)を実現することができる．SPAとは，ページの移動をせずに最初に読み込んだWebページ上のスクリプトがサーバとの通信や画面遷移を行う方式である．

# Reactの特徴
Reactの特徴として，Reactの公式サイト(https://ja.legacy.reactjs.org) では次の３つが挙げられている．
**・宣言的なView**
**・コンポーネントベース**
**・一度学習すれば，どこでも使える**

今回はこれらについて詳しくまとめる．

## Reactの特徴１：宣言的なView
宣言的なViewとは，あらかじめViewの中で<font color="red">変更される部分</font>と<font color="blue">変更されない部分</font>を決めて設計するということである．また，<font color="red">変更される部分</font>に関しては**どのような状態/条件**で**何が入るか**を定義する．

宣言的なViewと非宣言的なViewの違いが理解しやすいように，以下の入力値によって，文字列を変化させるプログラムで比較してみる．
![DeclarativeUI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3133563/a30001b5-007f-efde-9c1a-d209994e49d3.png)

**○非宣言的なView**
```HTML
<div class="div">
    <input class="input" type="number"/>
    <p>入力値は：「 」です</p>
</div>
```
非宣言型の場合は，<font color="red">変更される部分</font>と<font color="blue">変更されない部分</font>をプログラムでは理解できないので，
**入力値を受け取る　→　変更する部分を探す　→　変更する**
という手順で結果を表示することになる．

**○宣言的なView**
```jsx
<div class="div">
    <input class="input" type="number"/>
    <p>入力値は：「{input}」です</p>
</div>
```
宣言的な場合は，<font color="red">変更される部分</font>を`{}`で囲む(Reactの場合)ことによって，<font color="blue">変更されない部分</font>との区別をすることができる．したがって
**入力値を受け取る　→ 条件によって変更する**
という手順で変更することができる．

## Reactの特徴２：コンポーネントベース
Reactは細かく分けられたコンポーネントを組み合わせて画面を構築していく．コンポーネントは画面の構成要素を定義したものである．例えば，プロフィールを登録する画面を作成する場合は以下のような構成要素で作成することができる．
![component.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3133563/db0a4a77-35ea-c0b3-e7cd-f3bf830a1a70.png)
・タイトルコンポーネント："プロフィール登録"
・入力欄コンポーネント："名前，年齢，性別"
・ボタンコンポーネント："登録"

この例はシンプルすぎるが，コンポーネントごとに開発して，それを組み合わせることで画面を実装するのがReactの特徴である．コンポーネントベースによって，以下のような**メリット**を得ることができる．
**・再利用性の向上**
→作成したコンポーネントを別の画面作成にも利用できる．例えば，「プロフィール編集画面」を作る場合も，入力コンポーネントを再利用できる．
**・可読性の向上**
→本来は１つの長いコードで実装するものを小さなコンポーネントで分けるため，１つ１つのコードは短く可読性が高くなる．
**・保守性の向上**
→基本的にコンポーネントはお互いに及ぼす影響が小さいため，保守性も高くなる

## Reactの特徴3：「一度学習すれば，どこでも使える」
これはReactが掲げているコンセプトで，一度Reactの書き方を学ぶことができればさまざまな分野に利用することができる．Webアプリ開発にはReact.js，スマホアプリ開発には，React Native，AR/VR開発にはReact 360などで開発することができるが，記述方法はほとんど同じであるという点が魅力である．

# まとめ
ReactはJavaScriptの人気のライブラリであり，利用する企業が増えている．この記事ではReactの基本知識についてまとめたが，他にもReactの特徴である「仮想DOM」や「JSX記法」について以下の記事にまとめた．

**○仮想DOM**

https://qiita.com/thirai67/items/ecce5f1409ca58b87f09

**○JSX記法**

https://qiita.com/thirai67/items/a76d1f62fc49cb81038c
【PostgreSQL】ログインが出来ない場合の対応について

## 環境
CentOS7
PostgreSQL 11.18

## エラーについて
下記コマンドを実行したらエラーが出た。

``` bash
$ psql -U hoge postgres
psql: FATAL: ユーザ "hoge" で対向(peer)認証に失敗しました
```

## 対応方法

### 重要
postgresユーザーのパスワードが未設定の場合は1番はじめに設定する

``` bash
$ psql -U postgres

postgres=> ALTER USER postgres WITH ENCRYPTED PASSWORD 'password';
```

### `pg_hba.conf`で設定を変更する

``` bash
vi /var/lib/pgsql/11/data/pg_hba.conf
```

変更箇所は下記の通り

``` conf
~
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
- local   all             all                                     peer
+ local   all             all                                     md5
~
```

### 最後にPostgreSQLを再起動する

``` bash
systemctl reload postgresql-11.service
```

### 再度ログインを試してみる

``` bash
$ psql -U hoge postgres
Password for user hoge:
psql (11.18)
Type "help" for help.

postgres=>
```
【PostgreSQL】テーブルスペースを触ってみた

## テーブルスペースとは
[PostgreSQL 11.5](https://www.postgresql.jp/document/11/html/manage-ag-tablespaces.html)

## 構文
### 作成
`CREATE TABLESPACE テーブルスペース名 [OWNER {所有者名 | CURRENT_USER | SESSION_USER}] LOCATION 'テーブルスペース(ディレクトリ)' [WITH (テーブルスペースオプション=value [, ...])]` 

### テーブルスペースの定義変更
テーブルスペースの所有者のみが実行できる
#### テーブルスペース名称変更
`ALTER TABLESPACE テーブルスペース名 RENAME TO 新しいテーブルスペース名;`

#### テーブルスペースの所有者を変更
`ALTER TABLESPACE テーブルスペース名 OWNER TO {新しい所有者名 | CURRENT_USER | SESSION_USER};`

#### テーブルスペースの削除
`DROP TABLESPACE [IF EXISTS] テーブルスペース`

## テーブルスペースを使う
### テーブルスペースを作成
#### 新規テーブルスペース作成先を作成する

``` bash
mkdir /var/lib/pgsql/11/data_test
```
#### 現在のテーブルスペースを確認する

``` sql
postgres=# SELECT * FROM pg_tablespace;
  spcname   | spcowner | spcacl | spcoptions 
------------+----------+--------+------------
 pg_default |       10 |        | 
 pg_global  |       10 |        | 
(2 行)
```

#### テーブルスペースを作成する

``` sql
postgres=# CREATE TABLESPACE test_space OWNER postgres LOCATION '/var/lib/pgsql/11/data_test';
CREATE TABLESPACE
```

#### 作成したテーブルスペースを確認

``` sql
postgres=# SELECT * FROM pg_tablespace;
  spcname   | spcowner | spcacl | spcoptions 
------------+----------+--------+------------
 pg_default |       10 |        | 
 pg_global  |       10 |        | 
 test_space |       10 |        | 
(3 行)
```

### テーブルスペース名を変更する
#### 現在のテーブルスペースを確認

``` sql
postgres=# SELECT * FROM pg_tablespace;
  spcname   | spcowner | spcacl | spcoptions 
------------+----------+--------+------------
 pg_default |       10 |        | 
 pg_global  |       10 |        | 
 test_space |       10 |        | 
(3 行)
```

#### テーブルスペース名の変更

``` sql
postgres=# ALTER TABLESPACE test_space RENAME TO space;
ALTER TABLESPACE
```

#### テーブルスペース名変更を確認

``` sql
postgres=# SELECT * FROM pg_tablespace;
  spcname   | spcowner | spcacl | spcoptions 
------------+----------+--------+------------
 pg_default |       10 |        | 
 pg_global  |       10 |        | 
 space      |       10 |        | 
(3 行)
```

### テーブルスペースを削除する
#### テーブルスペースを確認

``` sql
postgres=# SELECT * FROM pg_tablespace;
  spcname   | spcowner | spcacl | spcoptions 
------------+----------+--------+------------
 pg_default |       10 |        | 
 pg_global  |       10 |        | 
 space      |       10 |        | 
(3 行)
```

#### 削除する

``` sql
postgres=# DROP TABLESPACE space;
DROP TABLESPACE
```

#### 削除されたテーブルスペースを確認

``` sql
postgres=# SELECT * FROM pg_tablespace;
  spcname   | spcowner | spcacl | spcoptions 
------------+----------+--------+------------
 pg_default |       10 |        | 
 pg_global  |       10 |        | 
(2 行)
```
【フリーランス】良いことだけではないよ？

エンジニアをしてると「フリーランスになりたい」って人多いですよね。
自分もフリーランスとしてかれこれ5年ほどになります。

釣りタイトルで申し訳ないですが、決してフリーランスを否定するわけではないです。
ただ、「**必ずしもプラスなことだけではないよ**」ということを知っていただきたいなと思い。
フリーランスになろうか迷っている方の判断材料の一つになれば幸いです。

なお、個人的な経験に基づく意見なのでフリーランスの先輩諸兄全員に当てはまるものではないと思いますし、反論異論もご容赦くださると幸いです。

# 別に「自由」ではないよ？

「自由に働けていいですねー」
フリーランスです、と言うと一番言われるのがこれです。
確かに、働く日を選択できますし、有給の残りを気にする必要もありません。

ただ、客先に常駐する契約の場合、**働き方は正社員とほぼ差がありません**。
毎朝決まった時間に寝ぼけ眼で出勤して、定時になったら缶ビールに手を伸ばす。変わりません。

成果報酬型の請負契約なら自由なのかと言えば、これもまた微妙。
請負の場合、休日という概念がない気がしています。
稼働しているか、していないか。その二つ。
「明日中にあれ片付けなきゃなー」なんて金夜に思いながら友達と飲んだりするわけです。
このビール、全然美味しくない。

そのあたりは自分でしっかりできる、という自律している方なら問題ないかも知れませんが、
果たしてそれは「自由」なのでしょうか。

# そんなに働きたいの？

「何個か仕事並行してるんですか？」「クライアント何社いるんですか？」
これもよく聞かれる質問です。

色んな現場で色んな技術や文化に触れられて、収入源を分散して、人脈もできて。
良いことしかないじゃん！って思いますよね。
でも、当然、その分**プライベート減ります**よ。

自分も3つ並行したことがありますが、
キャンプ行きたいし、APEXやりたいし、飲みにも行きたいし、、でもこれやってあれもやらなきゃ、、となったときに、
「あれ？なんでフリーランスなろうと思ったんだっけ？こんな状態を望んでたっけ？」となり、
いまは1社でぬくぬく働いています。

働くこと自体が大好きな人には良いと思います。
もっと働きたいのにこれ以上残業したら怒られる・・・なんてこともないですから。

# 税金について詳しくなりたいの？

フリーランスになると税金の仕組みについて詳しくなれる！確定申告のやり方を覚えられる！
って、よく見るじゃないですか？
実際あれやこれやと請求が来ます。申請が必要なものもあります。

**詳しくなりたいですか？**
自分はプログラミング周りのことだけで十分お腹いっぱいです。

確定申告の時期になると、やらなきゃやらなきゃ、と気が滅入っているフリーランスの方をたくさん見ます。
元々お金周りに強い人には簡単な作業なのかも知れませんが、とはいえ一年分の収支をまとめなければなので大変なことに変わりはありません。

ちなみに自分は税理士さんにお任せしています。
これ計上できるのかな？とか、漏れてる項目ないかな？とか心配するのも面倒なので。

# ボーナスも有給もないよ？

当然ですが、ボーナスも有給も育休も資格取得支援もないです。
「でも毎月ボーナスみたいな額もらってるんでしょ？」とか冗談混じりで言われますが、
**ボーナスだったらとっても嬉しい額が所得税でもっていかれます。**

一週間丸々休みもらって夏休みだー！なんてことは余裕で出来ますが、
シンプルに稼働日が減るので、清算時間の下限を下回ります。

# 色んなこと経験できないよ？

フリーランスは特定分野の即戦力として期待されます。
Reactを用いたフロントエンド開発、とか、AWSを用いたインフラ構築、とか、
なんならもっと尖った内容で、自分なりの得意領域で勝負するわけです。

VueはやったことあるけどReactの実務は初めて、とか、
ずっとJavaだったからPHPはSynfonyまでしか、、Laravelは初めてで、
くらいなら全然スイッチできると思います。
もちろん現場に入ってから関係がしっかり構築できて実力を認めてもらえてれば話は違うと思いますが、
完全に未経験だけどやってみたい。だけではそれなりにハードルが上がるのではないでしょうか。
そのあたりはSESのほうがだいぶ可能性があると思います。

また、技術以外においても任された領域以外の経験を積むのは難しいです。
例えば、開発要員としてジョインしてから、採用に関わってみたいと思ってもそれは無謀な話です。
正社員なら面談やスクリーニングの協力を依頼されることがあると思いますが、
フリーランスは「良い人！面白い人！お願いします！」って上長に言うくらいしかできません。

フリーランスで色々な経験をできる人は、なる前に色々と経験・勉強してきた人です。

# 最後に

つらつらと捻くれた内容を書きましたが、自分はフリーランスです。
任されたことにだけ集中できる。時間の使い方を自分である程度柔軟に決められる。などなどメリットはあります。

冒頭にも書きましたが、フリーランスを否定するわけではなく、
メリットを享受するために覚悟しなければならないこと、といった形で捉えていただけると幸いです。
価値観は人それぞれですし、善し悪しの判断基準もまたそれぞれかな、と。

正社員にしかできないこと、フリーランスにしかできないこと、と言うのはないと思いますが、
どちらのほうが動きやすい、と言うのはあると思います。
今自分にできること、経験していきたいこと、実現したい生活、実現したいキャリアなどを加味して選択していきたいですね。

皆様の判断材料の足しになれば幸いです。
Javascriptでのリダイレクトがcanceledされる

ハマったので自分用にメモ

Javascriptを使って、画面上のボタンを押したら別画面にリダイレクトさせようとしたが、
なぜか表示中の画面がリロードされる。


```HTML:HTML
<button type="text" id="redirect">リダイレクト</button>
```

```Javascript:Javascript
$('#redirect').on('click', function() {
    window.location.href = 'https://www.google.co.jp/';
});
```
コンソールのNetworkを見てみると、リダイレクトがcanceledされている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2667062/33ad4a24-8166-2d9c-f03f-7d88f95bab68.png)


# 解決法
`<button>`タグのtypeを `text` から `button` に変更するだけでした。

<追記>
コメントでご指摘いただいて発覚、
コードがおかしくて、button typeに `text` なんて存在しなかった、、、
buttonタグの `type="text"` は無効な指定なので無視されて
デフォルトtypeの `submit` が効いていたようです。
[MDN:\<button>: ボタン要素](https://developer.mozilla.org/ja/docs/Web/HTML/Element/button)
感謝！

```
<button type="button" id="redirect">リダイレクト</button>
```

無事遷移できた、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2667062/07ac5bd5-9f5b-5652-58db-54775e459218.png)

### 参考

https://stackoverflow.com/questions/8566222/javascript-window-redirect-doesnt-work-in-chrome-canceled-status
【Linux】サーバーの時刻合わせをやってみた

## dateコマンドを叩いてみた

``` bash
[root@localhost ~]# date
2093年  2月 13日 月曜日 20:25:22 JST
```

ちょｗｗ
2093年って僕はいないよｗ
ということでサーバーの時刻が現時刻と合っていないので直していきたいと思います。

## 環境
CentOS7

## 時刻合わせをやっていく

``` bash
date -s "2023/1/1 12:34:56"
date: 日時を設定できません: 無効な引数です
``` 

う〜ん。これでできるとネットに書いているけど出来ないな。
`timedatectl`を使う方法もあるな試してみよう。

``` bash
timedatectl set-time "2023-02-13 20:25:00"
Failed to set time: Automatic time synchronization is enabled
```

お、ちょっと違うことが書かれている。
これは行けそう。
調べると`NTP enabled`がyesだとエラーになる。

``` bash
timedatectl status
      Local time: 月 2093-02-13 20:25:18 JST
  Universal time: 月 2093-02-13 11:25:18 UTC
        RTC time: 月 2093-02-13 11:25:18
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
```

それじゃ変更しちゃいましょ。

``` bash
timedatectl set-ntp no
```

そして本題の時刻合わせをやっちゃおう。
NTPの設定も戻しておくよ。

``` bash
timedatectl set-time "2023-02-13 20:25:00"
timedatectl set-ntp yes
```

エラーは出てないから出来たんじゃないかな。

``` bash
timedatectl status
      Local time: 月 2023-02-13 20:25:18 JST
  Universal time: 月 2023-02-13 11:25:18 UTC
        RTC time: 月 2023-02-13 11:25:18
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
```

大丈夫そうだ！
`date`も確認してみよう。

``` bash
date
2023年  2月 13日 月曜日 20:25:22 JST
```

やった〜できた〜！

## 注意
`timedatectl status`の内容で時間に関しては適当に変更しています。
【図解】Djangoの全体像をまとめて、そこからMVCの概念を掴む

<h1>私は初学者ですよという前置き</h1>
初めて使ったフレームワークがDjangoで、その後Ruby on Railsを勉強しています。
　　

　
やたら似ているなと思い調べたところ、どちらもMVCという考え方から作られたフレームワークだということを知りました。

　
「これは全体像の理解が大事なタイプのやつだな〜」と思ったのでアウトプットを通して勉強しようとした感じの記事です。

同じ初学者の役に立てたら嬉しいですが、まだエンジニアでもないスーパージュニアエンジニアの書いた記事なので疑いながら参考にしてくれたら助かります。
また、エンジニアの方で記事の誤りを見つけた場合はぜひご教授ください。


<h1>まずはDjangoの全体像を掴む</h1>

大まかなイメージができるように図を描きました![_新Django概要図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480176/38534d90-051f-2d9b-e84d-8253539af50e.jpeg)

　
　先に全体像を把握してると、先輩のエンジニアと話す時に「何言ってるのかさっぱり分からん」から「あ〜、このへんの話をしてるんだな〜、それ以外はさっぱり分からん」に変化して成長スピードが変わる気がするのでおすすめです。

一例ではありますが、Djangoは主に図のようなデータの流れでWebページを表示しています。
　
①ブラウザから送られてきたhttpリクエストが
　
②uWSGIでDjangoが扱える形（リクエストオブジェクト）に変換されて、

③プロジェクト（Django全体）のurls.pyによって、使う機能（アプリ）のurls.pyにルーティングされ、

④アプリのurls.pyは、受信したリクエストオブジェクトを、エンドポイント（URLみたいなもの）を参考に、適切なビュー関数（views.py内の関数）にルーティング（接続）して

⑤views.pyでは受け取ったリクエストオブジェクトからレスポンスオブジェクトを作成するもので、そのためにmodels.pyに指示をしてデータベースとのデータをやり取りしたり、templatesからhtmlを受け取ったりする、様々な処理（ビュー関数）が記載されている。そのうちの指定のある処理（ビュー関数）を実行して、レスポンスオブジェクトを作成して、

⑥作成したレスポンスオブジェクトをuwsgiを通して、httpレスポンスとしてブラウザに返す。


ざっくり言うと、このようなデータの流れです。

この流れを踏まえつつ、図に載せている。エネミーコントローラーや、謎の女性モデルなどの謎の画像たちに触れながらMVCフレームワークを理解していきたいと思います。


<h1>MVCとは</h1>
教科書っぽく言うと、
　
　
　

　
MVCとは、「Model（モデル）」「View（ビュー）」「Controller（コントローラ）」の頭文字をとったもので、これはプログラミングにおける設計の方法（設計パターン）。アプリケーションの役割を3つに分けることで、整理しやすく、保守しやすくする。


といった、説明になります。ここからそれらについてイメージを掴んでいきたいと思います。


　
<h4>Model</h4>

![PAK86_meganewo1039_TP_V4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480176/61742d9d-afd5-a080-6617-cb8e7b9b3d3b.jpeg)
データベースとデータのやり取りをする、いわゆる「処理」の担当です。私は英語に疎いので、モデルというと女性モデルしか浮かばないのでこのようなイメージを持ちました。
いかにもデータのやり取りをしそうな理系女性モデルですね。好きです。　
　

<h4>View</h4>

![988201.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480176/ca04b984-bc90-0a4b-17da-0585d2a9e8f6.jpeg)
Viewは見た目を管理する部分です。英語に疎い私でもなんとなく「観る」的な意味だと理解できたので、このようなモニターの様なイメージをしています。
　


<h4>Controller</h4>

Controllerはコントローラーです。司令官的な意味合いですけど。私はエネミーコントローラーしかでてきませんでした。相手モンスターであろうが逆らえないコントローラー。![エネミーコントローラー.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480176/c4bc8ac2-a9af-7208-927a-b8eb2d235e15.jpeg)
← → B A
　
　



MVCの相関図はこのようにイメージできます。
![MVCイメージ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480176/9542f684-2843-8ca3-e7fa-3c7d6f60edff.jpeg)　このようにそれぞれに担当分野で分けることによって、開発中に「あれ、ここの見た目おかしいぞ」ってなったときに「View部分ににエラーがある可能性が高いね！」とできるのがメリットというわけです。

　
　MVCについてはググればググるほど奥深く、オブジェクト指向とかに近い概念チックな分野だと感じたので、私はこのようなイメージをいったん中心として脳みそに保存しようと思いました。


<h1>MVCの概念を踏まえて改めてDjangoを見る</h1>

![_新Django概要図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480176/f0d7edb0-108d-3511-f3ac-5003ba223eda.jpeg)

MVCの考え方に合わせると、
　

Model部分は、models.py
Vew部分は、templatesファイル
Controller部分は、urls.pyとViews.py
　

と言えそうです。めっちゃややこしい。なぜ、コントローラー部分にviewsと名付けたのか。。。
　

私が初めて Djangoで開発して難しいと感じたのも、このviewsのイメージが掴めていなかったのが原因でした。
（過去のMVCではview部分が見た目の「生成」をしてたから、その意味合いなのかもなとも思いました。知らんけど。）
　
　　
　
文句はいいつつも、DjangoはMVCの考え方を使ったフレームワークということで、MVCフレームワークのひとつなのだなと、しっかり認識することができました。

　
　
　
<h1>まとめ</h1>

Djangoというフレームワークからレイヤーを上げる感じでMVCという概念をふんわり掴むことができました。
　
この全体像をイメージしながら引き続きRuby on Railsの学習を続けていって、理解がカチッとハマったら、また記事にしたいと思います。
InternImage: Exploring Large-Scale Vision Foundation Models With Deformable Convolutions


# 1. 概要
Convolutional Neural Networks(CNNs)が画像認識で大きな成功を収めたのち、大規模なVision Transformers(ViTs)の研究が進んでいるが、CNNsをベースとした大規模なモデルがあまり研究されていないことに着目し、ViTsと同様にパラメータとトレーニングデータを増加させたときにどのような利点があるのかを調査した研究。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/877f0bee-ab21-5bf0-b2d7-9990d4331cc4.png)

---

# 2. 新規性
通常のCNNとは異なり、提案手法ではカーネルサイズの変形可能な畳み込み演算をメインに採用しており、物体検出やセグメンテーションなど個別のタスクに必要な大規模な受容野(CNNが特徴を取り込める空間的範囲)を持つだけでなく、入力とタスク内容に応じて適応的に受容野を変動できるので、空間的な情報集約能力がタスクやデータにフィットさせやすくなっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/71c76968-1f83-f526-4e46-6e548505673b.png)

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/49628e16-92dd-160e-2577-87a368148d7b.png)
CNNのカーネルサイズは3x3だが、DCN(Deformable Convoutional Networks)ではフィルターのサンプリング位置が空間的に散っていることで離れた個所の相関関係も学習できる。提案手法のDCNv3では、逐次的処理でDCNのパラメータを効率的に推定できるように設計されており、DCNの計算コストを削減したことで高速に学習や推論ができるようになった。

---


# 4. 結果
従来のCNNでは、畳み込み層とプーリング層を組み合わせて特徴を抽出するため、画像内の局所性と位置に基づくパターンを優先的に学習してしまい、大規模データセットや複雑なパターンを持つデータに対してはより柔軟な特徴表現や空間的な情報集約能力が求められるため制約となっていた(=帰納的バイアス)。提案手法では、CNNsの帰納的バイアスを軽減し、ViTsのような汎化性を持つパターンを学習することが可能となった。
ImageNet/COCO/ADE20Kなどで評価し、特にCOCO test-devで65.4mAP、ADE20Kで62.9mIoUの新記録を達成した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/0c26e481-67fb-5f23-fcae-c7ea42c4a8bb.png)

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Wang_InternImage_Exploring_Large-Scale_Vision_Foundation_Models_With_Deformable_Convolutions_CVPR_2023_paper.pdf>

last updates: June 30 2023
Learned Image Compression With Mixed Transformer-CNN Architectures


# 1. 概要
学習ベースの画像圧縮(Learned Image Compression:LIC)では、従来の画像圧縮手法と比べて、画像の圧縮率と圧縮による画質の損失のトレードオフの関係が改善されており、畳み込みニューラルネットワーク(CNN)を用いたものとトランスフォーマーを用いたものが提案されている。一般的に、CNNを使う場合は局所的な情報集約能力に優れており、トランスフォーマーを使う場合は大局的な相関関係の抽出能力に優れている。この研究では、CNNとトランスフォーマーのそれぞれのよいところを組み合わせた手法となっている。

---

# 2. 新規性
CNNの局所的なモデリング能力とトランスフォーマーの非局所的なモデリング能力を組み合わせたTCM(Transformer-CNN Mixture Blocks)を提案している。また、画像データの統計的な特性を学習してエントロピー(情報量)を推定するエントロピーモデルをアテンションとして組み込むSWAttenモジュールを提案している。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/7d965b02-2b87-744e-affb-b080d881b4cf.png)
TCMブロックでは、1x1の畳み込み層を二つ持っており、トランスフォーマーとCNNのそれぞれの特徴を取得する部分と特徴をマージする部分で用いられている。2ステージ系の方がより特徴をマージしやすいとしている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/90340c78-ffdf-e445-bf9b-84008042616a.png)
エントロピーモデルについては、チャネル単位の自己回帰モデルを採用しており、Swin-transformerをベースにしたアテンションモジュールとなっており、チャネル情報を圧縮してパラメータ削減を図っている。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/8925c440-2d5c-c0e7-0e55-b53adc09fc8f.png)
Kodak/Tecnick/CLIP Professional Validationの3つの解像度の異なるデータセットにおいて、既存のLIC手法と比較して画像の圧縮率と画質の損失率のパフォーマンスで向上していることを確認した。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Liu_Learned_Image_Compression_With_Mixed_Transformer-CNN_Architectures_CVPR_2023_paper.pdf>

last updates: June 30 2023
On Distillation of Guided Diffusion Models


# 1. 概要
DALL・EやStable Diffusionなどの高解像度の画像生成モデルでは拡散モデル(diffusion model)を使用するため、分類器が存在せず(Classifier-free)、制約条件などをガイド情報として組み込むことで、生成する画像の特定の属性や特徴を指定して生成モデルをコントロールすることができる。問題点として、推論時の計算コストが高くなることが挙げられる。提案手法では、分類器を使用しないガイド付きの拡散モデルを高速化する手法を提案している。

---

# 2. 新規性
これまでの手法では、条件付きのモデルと非条件付きのモデルの2つの拡散モデルを推論時に数十～数百回評価して画像生成をする必要があったため時間的制約が大きかった。提案手法では、条件をガイド情報に組み込み、ガイド情報を蒸留(distillation)して圧縮しつつ、拡散モデル自体も蒸留することでコンパクトなモデルを作成している。

---

# 3. 実現方法
事前学習済みの分類器不使用型のガイド付き拡散モデルを入力として、1)出力結果が条件付きと非条件付きのモデルの組み合わせで一致するようにモデルを学習し、2)それをより少ないサンプリングステップで動作するように拡散モデルを逐次的に蒸留していく。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/bf304cf6-823b-709c-76de-a1f01eb458f4.png)
ImageNet(64x64)やCIFAR-10データセットにおいて、4つのサンプリングステップだけで従来手法と同クオリティの画像を生成でき、サンプリング速度を最大256倍高速化した。Stable Diffusionなどの潜在空間で学習された拡散モデルと比べて、10倍高速化した。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Meng_On_Distillation_of_Guided_Diffusion_Models_CVPR_2023_paper.pdf>

last updates: June 30 2023
I-measureを今時動かす

文法誤り訂正の評価尺度 I-measure (https://github.com/mfelice/imeasure) を今時動かす方法を紹介します。どうも、python2が使われていた時代は普通に動いていたみたいなんですが、現在python2で動かそうと思うと少し難しいです。


### python 2.7の環境を用意
```
conda create -n p27 python=2.7
conda activate p27
```

### elementtreeをインストール
公式のリンクからwgetするとファイルが壊れる。
```
wget https://src.fedoraproject.org/repo/pkgs/python-elementtree/elementtree-1.2.6-20050316.tar.gz/md5/e1b21716be8bfff8bf192fc3880ad008/elementtree-1.2.6-20050316.tar.gz
tar zxvf elementtree-1.2.6-20050316.tar.gz
cd elementtree-1.2.6-20050316
python setup.py install
```

### nltkをインストール
pipだと入らない。
```
conda install nltk -c intel
```

### numpyをインストール
```
python -m pip install numpy
```

### M2をxmlに変換
```
python m2_to_ixml.py -in:official-2014.combined.m2 -out:official-2014.combined.xml
```

### I-measureを実行
```
$ python ieval.py -ref:official-2014.combined.xml -hyp:AMU -nomix
---------------------------------------------------------------------------------------------------------------------
Hypothesis file    : AMU
Gold standard file : official-2014.combined.xml
Maximising metric  : WACC - CORRECTION
Optimise for       : SENTENCE
WAcc weight        : 2.0
F beta             : 1.0
---------------------------------------------------------------------------------------------------------------------

OVERALL RESULTS
---------------------------------------------------------------------------------------------------------------------
Aspect            TP      TN      FP      FN     FPN       P       R  F_1.00     Acc   Acc_b    WAcc  WAcc_b       I 
---------------------------------------------------------------------------------------------------------------------
Detection        620   27350     752    2158       0   45.19   22.32   29.88   90.58   90.99   88.65   90.99   -2.57
Correction       484   27350     888    2294     136   35.28   17.42   23.33   90.14   90.99   87.99   90.99   -3.30
```

`-nomix`をつけると元の論文と値が変わってしまう気がするんですが、つけないと数百GBのメモリを使い果たした上にkillされてしまったので、どうしたらいいのかよくわかりません。
Marketing Cloudのテナント


+ [Marketing Cloudのテナント種別について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000076CiJa)


# ロック&パブリッシュという言葉の意味 


ロック & パブリッシュチャネルメンバー: ロック & パブリッシュチャネルメンバーは、許可された方法でメールを制御します。ロック & パブリッシュチャネルメンバーにメールを公開し、公開するメール内容の一部またはすべてはロックできます。チャネルメンバーにコンテンツのカスタマイズを許可することもできます。ロック & パブリッシュアカウントのユーザーが、独自のメールを作成できるか、管理者アカウントから公開されたメールに制限されるかを選択してください。
ロック & パブリッシュモデルは、ビジネスユニットが複数あって、その多くに独自の専用マーケティングチームがあるエンタープライズ用に設計されました。


+ [Enterprise 1.0 の概要](https://help.salesforce.com/s/articleView?id=sf.mc_es_enterprise_overview.htm&type=5)

+ [Enterprise と Enterprise 2.0 の機能の比較](https://help.salesforce.com/s/articleView?language=ja&id=sf.mc_es_compare_enterprise_functionality.htm&type=5)

 

以下の内容を読む限りはアップグレードというようり全く別のシステムのように感じました。

+ [Marketing Cloud Upgrade from Enterprise 1.0 to 2.0](https://salesforce.stackexchange.com/questions/145416/marketing-cloud-upgrade-from-enterprise-1-0-to-2-0)

ビジネスユニットを使用できるのも2.0だけみたいです。

Business units are not available in Enterprise 1.0, Agency, or Core tenants. /Les unités commerciales ne sont pas disponibles dans les locataires Enterprise 1.0, Agency ou Core.

https://salesforcejandj.com/manage-business-units-gestion-des-unites-commerciales
Visual Programming: Compositional Visual Reasoning Without Training


# 1. 概要
画像と指示のテキストを入力すると、所望の解析結果だけでなくどのようにしてそのような結果になったのかというコードも生成され、ユーザーにとっての解釈性を担保しつつ画像解析や編集ができるようにした研究。
*Award Candidate: BEST PAPER AWARD

---

# 2. 新規性
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/778f05b4-03ff-429b-9d2d-728fab46b7f7.png)
自然言語と画像を入力として直接画像生成・編集をする研究は多く研究されているが、この研究ではまず疑似プログラムをLLMを使って自動生成する。生成されたプログラムは、その命令を解くためのプログラム(python)をコールし逐次的に結果が返される。中間推論をプログラムとして生成する点が、AI推論の解釈性を高める効果がある。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/0363032a-1244-f20f-914d-5e71e5022ffa.png)
テキストによる指示入力とそのコードをペアでいくつか入力し(Few-shot Examples)、実際に指示したい内容をテキストで実行するとそれを実現するためのコードが生成される。ここで、GPT-3を使って指示内容のテキストからコードを生成するが、一切ファインチューニングは必要としない。HuggingFace/Pytorch/Tensorflowなどのニューラルネットワークのモデルがコールされるので高度なコンピュータビジョンタスクも解ける。また、PIL/OpenCVなどのライブラリもコール対象で画像処理も同様に解くことができる。


---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/3f736fbb-da66-9b43-3793-2fa87ab9a2c1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/b7536975-a88a-0663-5b26-1560adc316cb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/a8477038-ce22-5298-8f43-be41e5d1a42f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/84fbcb1b-eb87-f81c-0943-82a91ee79d07.png)
自然言語による画像編集や画像から論理的な推理をするタスク、写真内に写る物体の自動タグ付け、画像情報に対する質疑応答などの処理が実現できる。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Gupta_Visual_Programming_Compositional_Visual_Reasoning_Without_Training_CVPR_2023_paper.pdf>

last updates: June 30 2023
DNF: Decouple and Feedback Network for Seeing in the Dark


# 1. 概要
明るさがほとんどない暗闇の中でRAW画像で写真を撮って映し出された真っ黒な画像から、元のRGBに変換したときの見かけを再構成する研究。従来手法では、単一ネットワークによるシングルステージ系手法や複数ネットワークを多段に使うマルチステージ系手法があったが、ノイズを多く含んだRAW画像から直接RGB画像を推定しようとするので学習が難しく、また複数のネットワークを経由すると詳細情報が失われるという課題があった。この研究では、これらの課題を解決するマルチステージ系の手法を提案している。

---

# 2. 新規性
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/994e2c5d-54a5-e08e-1c40-7c43e04d1a53.png)
ノイズが多く含まれる低輝度なRAW画像から直接RGBを推定するのではなく、一旦ノイズを除去したRAW画像を予測する。このとき学習されたデノイジング情報をフィードバックさせてエンコーダーからデコーダーに渡される特徴量にノイズなどのエラー情報が含まれるのを防ぐ。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/966c5f95-a32b-6d80-f1c4-00a00c4c6eee.png)
まず、RAW画像に対するエンコーダーデコーダーネットワークでRAW画像に含まれるノイズ除去を行い、デコーダーの出力に補助教師(auxiliary suprevision)を導入して学習の収束性の向上やより高品質な出力画像の予測を促す。
次に、RAWデコーダーからフィードバックされる特徴をRAWエンコーダーの特徴に加えて、ノイズ除去された特徴も含めて再度RAWエンコーダーに戻す。
最後に、RGBデコーダーでカラースペースの変換を行って暗闇で撮影した画像からカラー画像を再構成する。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/c9317d18-5eca-71f2-56c7-fba1d5ff8e28.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/4992735d-25df-2690-3132-beef3c40c85f.png)
先行研究に対してパラメータ数が約19%と少なく、SIDデータセットのSONYおよびFUJIのカテゴリでPSNRをそれぞれ0.97dBと1.30dB改善している。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Jin_DNF_Decouple_and_Feedback_Network_for_Seeing_in_the_Dark_CVPR_2023_paper.pdf>

last updates: June 24 2023
Improving Robust Generalization by Direct PAC-Bayesian Bound Minimization


# 1. 概要
敵対的攻撃(Adversarial Attacks)のように、外部からのノイズやその影響を受けて認識系が乱されてしまう問題に対して頑健性を持たせるための最適化手法をロバスト最適化(Robust Optimization)という。従来研究では、敵対的攻撃に対して学習されたモデルがトレーニングセットに対してテストセットよりも高い頑健性を示す、一種の過学習のような状態に陥っていた。この研究では、如何に過学習を避け、計算コストがネットワークの深さに依存せずに、解析的に解を見つけるかという非常に難しい問題を解いている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/1d2094dd-6d0d-53a2-0301-94ccedd1da58.png)

---

# 2. 新規性
この論文では、ヘシアントレース正則化(Trace-of-Hessian:TrH)を導入して損失関数が作り出す勾配の曲面を平坦になるようにモデルのパラメータを調整し、現実世界の敵対的攻撃に対しても強い頑健性を持つ(=過学習を緩和する)手法を提案している。ヘシアンはモデルの損失関数に関する二階微分の行列で損失関数の曲率を表す。正則化プロセスは、ヘシアンのトレースである行列の対角成分の総和を求め、モデルの損失局面の平坦性を評価している。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/756c54cd-a007-43c3-6203-7d717f7b54f0.png)
従来研究では、PAC-Bayesian Bound(Probably Approximately Correct)という、モデルの予測性能とデータ分布の間のトレードオフを考慮した解析手法を用いており、事前分布とデータに基づく事後分布の間の関係を定量化して求め、データ数が少ない事象に対してもモデルの性能を制御し過学習を防いでいた。提案手法では、ヘシアントレース正則化を使って導出される損失関数の曲面に対してPAC-Bayesianを使った学習を実施した。
ヘシアンのトレース(TrH)を全レイヤーのパラメータに対して求めると計算コストが膨大になるので、実験ではVision Transformerの最上位レイヤーにのみ正則化項を付与して計算コストを抑えている。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/ae1d3949-810e-ef5f-4fd2-bce2c9ef690f.png)
ImageNetとCIFAR-10/100でヘシアントレース正則化(TrH)を最上位レイヤーに組み込んだVision Transformerを使って評価実験を行っており、既存手法に比べて頑健性が向上していることを確認している。また、同時に使用するメモリと計算コストも削減している。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Wang_Improving_Robust_Generalization_by_Direct_PAC-Bayesian_Bound_Minimization_CVPR_2023_paper.pdf>

last updates: June 24 2023
Stitchable Neural Networks


# 1. 概要
Model ZooやHuggingFaceなどで様々なモデルが公開されているが、中には多種多様なスケールを持ったモデル(例えばResnet18/50やDeiT-Ti/S/Bなどがある)が提案されており、どのモデルを手元のデータに適用すればよいのかというのは常にMLエンジニアに付きまとう課題になっている。この研究では、事前学習済みのスケールの異なるネットワークから大量にスケーラビリティの異なるネットワークを生成して、ターゲットのデータに合わせて複雑さやパフォーマンスをフィットさせることで手軽にアプリ開発などができるようにしている。

---

# 2. 新規性
スケールの異なる事前学習済みのネットワークに対して、ブロック/レイヤー単位で分割しておき、スティッチングレイヤーを挿入してブロック/レイヤーをつなぐ。ここで、スティッチングレイヤーではつなぐブロック/レイヤーの元の活性化関数をつないだ先のブロック/レイヤーにマッピングするだけの構造になっている。この状態で数エポック学習すると、異なるスケールのネットワークの違いを緩和しながら結合前後の精度をうまく補間してくれるようになっている。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/4abaa9ea-1c8e-5abe-be92-6ce596df63f9.png)
実装ではDeiT-Ti/S/Bを使っている。Distilled Vision Transformer(DeiT)は蒸留を用いて軽量化されたトランスフォーマーのモデルで、基本モデル(Base: B)、小モデル(Small: S)、極小モデル(Tiny: Ti)とスケーラブルなモデルが公開されている。スティッチング対象のブロック/レイヤーはランダムサンプリングで選ばれ、結合後の予測値に対してLossが計算され勾配がまかれて重みが更新され学習が進む。また、ランタイム処理の場合はスティッチング位置を切り替えて動的なリソースの制約にも対応できる。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/0a0c152b-829a-9bd9-fa26-892fdd79c010.png)
スケールの異なるDeiTに対して、元々のDeit-Ti/S/Bを補間するように柔軟にパラメータサイズを変えながら多種多様なモデルを構築できていることがわかる。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Pan_Stitchable_Neural_Networks_CVPR_2023_paper.pdf>

last updates: June 24 2023
Salesforce 動的関連リストの究極ガイド

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)

---------------
+ [活動は動的フォームでは関連できないなど制限あるか](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007F54kk)

:::note
現在、動的関連リストは、取引先、リード、ケース、商談、取引先責任者の各オブジェクトとカスタム オブジェクトに対してのみ機能します。

https://ideas.salesforce.com/s/idea/a0B8W00000J5VfFUAV/dynamic-related-list-missing-objects
:::


+ [Ultimate Guide to Salesforce Dynamic Related Lists](https://www.salesforceben.com/ultimate-guide-to-salesforce-dynamic-related-lists/)

動的フォーム、 動的アクション、 動的インタラクション、そして 動的関連リストが追加されました。Salesforce 動的関連リストは、Lightning ページに新しいコンポーネント「動的関連リスト – 単一」を追加します。このコンポーネントを使用すると、特定の基準が満たされた場合に のみ動的に表示するようにフィルタリングできるカスタム関連リストを作成できます。


+ [動的関連リストにオブジェクト固有のアクションを追加したいのですが、アクションが候補に出てこず、質問いたしました。 ](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KCDC9)

:::note
具体的な既知の問題のURLを探せていませんが、何やらバグがありそうな感じです。 

回避策も回答されているので参考にしてみてください 


Salesforce はこのバグについて以下の追加情報を提供しています。

+ このバグは、特定のオブジェクトの動的関連リストにのみ影響します。
+ このバグは通常の（非動的）関連リストには影響しません。
+ このバグは特定のプロファイルを持つユーザーにのみ影響します。
+ Salesforce のエンジニアリングチームは、このバグをできるだけ早く修正するために取り組んでいます。

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T5vEQSAZ
:::


# Salesforce 動的関連リストとは何ですか?

Salesforce 動的関連リストは、「動的ページ」ファミリーの最新機能です。これは、適切な情報を適切なタイミングで適切なユーザに表示する、インテリジェントで応答性の高いページを作成できるようにする機能の組み合わせです。

一般に、関連リストは優れていますよね。現在表示しているレコードに関連するレコードが表示されます。たとえば、特定のアカウントに関連するすべての商談を表示できます。ただし、レコードが多い場合、関連リストは少しわかりにくい長いリストになる可能性があります。オープンな商談のみを表示する関連リストがあれば便利だと思いませんか? それとも獲得の機会のみを表示したものですか? ユーザーはレコードをくまなく調べる必要がなく、代わりに必要な正確なデータが表示されることを歓迎すると思います。

Salesforce 動的関連リストは、まさにこれだけでなく、それ以外のことも実行します。フィルターされた関連リストを作成したり、どのフィールドをどのような順序で表示するかを設定したり、使用可能なアクションをカスタマイズしたりできます。

# Salesforce の動的関連リストを設定するにはどうすればよいですか?

まず最初に、関連リストをLightningレコード ページで使用できるようにするために、標準ページ レイアウトに関連リストを追加する必要はありません。更新したいLightning レコードのページに移動するだけです。次に、2 つの選択肢があります。

動的関連リスト – 単一をキャンバスに ドラッグするだけで、新しい機能の追加を開始できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/61683031-6141-c394-631b-035439f6aee3.png)

または、既存の「関連リスト - 単一」を選択し、「アップグレード」を選択して変換することもできます。
High-Fidelity 3D Human Digitization From Single 2K Resolution Images


# 1. 概要
単眼カメラから人体の3Dモデルをリアルタイムに構築する研究。高品質な人体の3Dモデルを再構築するには、高解像度で大規模なデータセットが必要だが、この研究では"2K"の解像度を持つ"2K"の人体データセットとして"2K2K"を公開している。

---

# 2. 新規性
人体の大まかな全体形状と詳細情報を個別に復元していく。低解像度の3D形状から徐々に高精細に詳細を復元していくcoarse-to-fineの戦略をとることで推論時間を少なくしつつ従来手法よりも高い品質の3Dモデルが得られるようになっている。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/36c46b5c-9e3e-4a83-325d-ab27dea2b278.png)
画像をリサイズして低解像度の深度(depth)ネットワークに入力して人体の大まかな構造を予測し、体のパーツごとに学習された法線(normal)ネットワークから人体の各部位の詳細形状を予測する。次に、これを入力として高解像度の深度ネットワークで人体全体の3D構造と部位ごとの詳細情報を結合し、高解像度な前面と背面の深度マップを生成する。最後に、既存手法のメッシュ生成モデルを利用してシームレスな3Dメッシュモデルを再構成する。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/70c832af-fc0b-1028-5255-6e2053fd6537.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/07b714d9-46a0-4f86-2d7f-794abb6ac4a2.png)
2D画像を入力として、メモリ効率がよく高精細な3Dメッシュモデルを復元できている。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Han_High-Fidelity_3D_Human_Digitization_From_Single_2K_Resolution_Images_CVPR_2023_paper.pdf>

last updates: June 24 2023
Docker を基本からまとめてみた【Linux とネットワークの基礎から学ぶ Docker 入門】

## Linuxとは？
- WindowsやmacOSと並ぶ、OSの一種

## CLI(CUI)とGUI
CLI(CUI)かGUIかは操作方法の違いにすぎず、同じPCに対してどちらの方法でも同じような操作ができる

## CLI(CUI)とGUIの違い
◉ GUIのメリット
- 直感的に操作できる
- グラフなどのずが視覚的に見やすい

◉ CLIのメリット
- 決まっている操作を確実に実行しやすい
- 自動化がしやすい

## SSHとは？
- 通信方式の一種
- 主に他のCPに接続してコマンドを実行するために使われる

## 参考サイト
[Linux とネットワークの基礎から学ぶ Docker 入門](https://itplusjp.udemy.com/course/docker-from-linux-and-networking/learn/lecture/32494080#overview)
R2Former: Unified Retrieval and Reranking Transformer for Place Recognition


# 1. 概要
画像からどの場所が映されているかいるか予測するタスクをVision Place Recognition(VPR)と呼び、クエリとなる画像から参照画像とCNNなどの高次元特徴で比較して画像特徴の対応点をRANSAC(RANdom SAmple Consensus)を用いてそれぞれ独立に求めることが多い。この研究では、トランスフォーマーを用いて抽出された高次元特徴に含まれる局所的な特徴の相関やアテンションの値自身も画像特徴の対応点検索と類似度のランキングに反映されるようにした。

---

# 2. 新規性
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/0fae55e1-e598-3375-6168-df7b3669826b.png)
対応点のマッチングスコアにトランスフォーマーの特徴量を反映させることで、クエリと参照画像との間の重要な局所特徴のペアの相関を学習できるようになった。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/b960ae34-15e8-9fe9-7d1b-a2c2b518296c.png)
トランスフォーマーを用いたパッチレベルの特徴点検索とランキングを実現するために、特徴量の相関情報、アテンションの値、XY座標の情報を用いて画像ペアが同じ場所のものかどうかを判別できるよう学習する。クエリと参照画像にはVision Transformerが用いられて汎用的な画像検索に有用な特徴の取得方法が学習され、エンコーダーのアテンションマップを使って各パッチ座標の特徴の相関を求め、これをランキングに反映する。ランキングスコアの予測に用いるネットワークにもトランスフォーマーが使用されておりクロスエントロピーロスが用いられている。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/61756700-d4a1-17fc-a18d-3e5e9fd12c69.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/1634121e-7090-fc02-563c-ca25325ec522.png)
従来手法よりも少ない推論時間とメモリ消費量で、従来手法よりも高精度にVPRのタスクを解くことができている。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Zhu_R2Former_Unified_Retrieval_and_Reranking_Transformer_for_Place_Recognition_CVPR_2023_paper.pdf>

last updates: June 23 2023
NVIDIA Jetson Orin Nanoセットアップメモ

# セットアップメモ

初期セットアップ等の部分は割愛しています。
いろいろと調べてSSDを搭載したJetsonが稼働した後のことのメモになります。

## Wi-Fiが積んである

* 公式には情報を見つけられなかったが、開発キット(?)にはWi-Fiの機能があり有線の他に無線での接続が可能だった。

### ネットワーク系のコマンド

* ネットワーク系のコマンドとして、`nmcli`を使う必要があった。

#### Wi－Fiの状況確認、ON/OFF

```
sudo nmcli radio wifi
sudo nmcli radio wifi on
```

#### Wi-Fiのリスト表示

```
sudo nmcli device wifi list
```

#### Wi-Fiとの接続

```
sudo nmcli device wifi connect 'Sample-SID' ifname wlan0
```

## CUIモードへ変更

* UbuntuのGUIをオフ、CUI起動へ変更。
    * GUIをオフにするとDisplay Portからの出力がなくなった。
    * SSHにて接続することで問題回避。
    * 先にIPアドレスを固定化するなどをしておかないと、接続できない事態になる。
        * （たまたま、運よく先に固定化していたため、できなかった時には最初からやり直し？）

## Docker Compose V2が使えない

* Docker Compose V2が使えない？セットアップ方法が不明。。。
Unifying Vision, Text, and Layout for Universal Document Processing


# 1. 概要
OCR(Optical Character Recognition)に代表されるようにAIによるドキュメント解析・編集のツールは様々に提案されてきているが、この研究では画像とテキストとドキュメントのレイアウト配置といったモダリティの違いを一つのネットワークで統合しており、汎用的にドキュメントを画像として生成したり編集したりする技術を提案している。同様の研究をしている研究グループからも驚きの声が上がるほど、生成結果のクオリティが高い。

---

# 2. 新規性
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/7a81a100-793a-6611-60be-69b6e79341ef.png)
画像のパッチトークンと言語のテキストトークンの特徴とを同じドキュメント座標で合わせることでシンプルながらそれぞれのモダリティを活かした特徴を取得することができている。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/6f0c7470-4afb-24a5-1c8d-2d5372ceabaa.png)
トランスフォーマーエンコーダーを一つだけ用いてテキストと画像とドキュメント配置を扱えるような特徴を取得する。既存のOCR手法を使って、予め画像からどの座標にどんなテキストが書かれているかを求めておく。得られたテキスト情報とその位置情報である矩形座標からテキストと画像で対応がある特徴を足して保持し、対応のない特徴はそれぞれ独立して保持する。
デコーダーではテキストとドキュメント配置を予測するネットワークと画像生成をするネットワークを用いており、劣化したドキュメントの再構成や元のドキュメントに対する自然な文章の埋め込み・編集などを可能にしている。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/9570189f-727d-894b-20b1-09c9a90044cd.png)
ファイナンスレポート、学術論文、ウェブサイトなどの異なるデータドメインを持つデータセットでQuestion Answering(QA)やドキュメント理解、情報抽出など8つのタスクにおいてSOTAを達成した。

<IMG  src="https://bytez.com/_next/image?url=https%3A%2F%2Fcdn.bytez.com%2FmobilePapers%2Fv2%2Fcvpr%2F8282%2Fimages%2F7-1.png&amp;w=1920&amp;q=75"  alt="image"/>

画像の75%がマスクされたドキュメントから元のドキュメントを予測した結果、オリジナルと区別がつかないほど高精度に再構成できている。ここで、ドキュメントの内容は予めわかっているものとして入力に入れている。

<IMG  src="https://bytez.com/_next/image?url=https%3A%2F%2Fcdn.bytez.com%2FmobilePapers%2Fv2%2Fcvpr%2F8282%2Fimages%2F7-0.png&amp;w=3840&amp;q=75"  alt="image"/>

テキストの埋め込みや改変が元のドキュメントのフォーマットやレイアウトと違和感なく自然に行えるため、変更されても人間の目では気づくことができない。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Tang_Unifying_Vision_Text_and_Layout_for_Universal_Document_Processing_CVPR_2023_paper.pdf>

last updates: June 23 2023