OmniAICreator/Qiita-1.07M huggingface dataset:
SPSS ModelerからGoogle BigQueryに接続する（Simba）

SPSS Modeler18.4からGoogle BigQueryに接続します。

* テスト環境
    * Windows 11 64bit
    * Modeler 18.4
    * Simba ODBC Driver for Google BigQuery 3.0.0.1001


# ODBCドライバーの確認

以下で確認します。Simba ODBC DriverとSDAPがサポートされています。
ここではSimba ODBC Driverを使ってみます。

https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=0E1C00D07E5C11EC93C02AA4DE91E682&osPlatforms=Linux|Mac%20OS|Windows&duComponentIds=D001|S002&mandatoryCapIds=13&optionalCapIds=7|47|22|72|186|223

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a9eac5f9-babd-f53f-3e78-775f17fde5f6.png)


# ODBC接続
ODBCのドライバー導入と接続設定は以下の手順で行います。

Simba ODBC DriverでBigQueryに接続する - Qiita 

https://qiita.com/kawada2017/items/8dab283d6aa5731e6082

# Modelerからの接続
データベースインポートノードで「新規データベース接続の追加」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/0f0e8d0d-70c3-fc0b-03f0-2a95bc02112b.png)

データソースで設定したデータソースを選び、接続します。ユーザーとパスワードは不要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/2be1ee0a-4ec9-6597-6fd6-053ed3a9b5b2.png)



接続ができたら、OKで閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/d231f2e4-0ba6-9750-07a3-855f7c83bcee.png)



テーブル名を指定し、「プレビュー」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a396421c-aa96-3883-7f80-836608503b9f.png)



参照できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/33ed9156-54d8-1e85-bdd4-7da97df55412.png)


# 参考
#### ブログで学ぶSPSS_Modeler #02- Google BigQueryでSPSS Modelerプッシュバックを実行する | IBM ソリューション ブログ 

https://www.ibm.com/blogs/solutions/jp-ja/learn-modeler-02/
Slackの名前にSpotifyで聞いてる曲名を表示して、好きなアーティスト仲間を見つけようぜ


# 概要

ステータス欄に表示する記事は有るのですが、そんなとこなかなか見られないのでは！？と思ったので、氏名に表示することにしました。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3432303534372f35653138333239352d386630362d306238302d396539622d3365616633666239313038632e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420547/56269d19-3eae-a861-888d-69a12a5bbd9f.png)

すみません、三連休でイニDを二期まで見終わったので、それに感化されています。



# 方法

ほぼほぼ以下の記事と一緒です！最後のコードが少し違うだけ！
なので、とりあえず以下の記事に沿って進めてください。分からなかったらコメント欄で聞いてもらえれば。
あと、JavaScriptわからないので、変なところあったら教えていただければ幸いです。

https://medium.com/do-you-write-a-blog/slack%E3%81%AEstatus%E3%81%ABspotify%E3%81%AE%E6%9B%B2-%E3%82%A2%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B9%E3%83%88%E6%83%85%E5%A0%B1%E3%82%92%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%99%E3%82%8B-9b94b17fb05c

## 差分

まず、曲名の前に表示したい名前を定義しておきます。

```JavaScript
var real_name = '秋名の下り最遅'
```

それを、Spotifyから取ってきた曲名と組み合わせます。

```JavaScript
//　変更前
//  if (statusCode === 200) {
//    track = content.item.name;
//    artist = content.item.artists[0].name;
//    displayStr = 'NowPlaying：' + track + ' / ' + artist;
//  } else { 
//    displayStr = '再生中の曲はありません';
//  }


//　変更後
  if (statusCode === 200) {
    track = content.item.name;
    artist = content.item.artists[0].name;
    displayStr = real_name + ' NowPlaying ' + (track + ' ' + artist).replace(/[・！？（）〜.'!?()｡&☆、,:↑…]*～/g, "");
  } else { 
    displayStr = real_name;
  }
```

ここでのポイントは、氏名はステータスと違って使用できる文字に制限があるため、replaceで力技で取っ払っているところです。
なので、経験値上昇中☆のような曲名やアーティスト名はそのままだと表示できないため、注意してください。
ちなみにこれでも文字を消せなくてたまに表示できない曲も有るのですが、諦めています。


そして、slackに投げるデータの中に、名前も変更するよって書いてあげます。

```JavaScript
// 変更前
// 再生中の場合は、こっちを表示させる。
//  var profile = {
//    'status_text': data,
//    'status_emoji': ":spotify1:", //Spotifyの絵文字を予め作成
//  };
  
// 停止中の場合は、こっちを表示させる。  
//  var profile_noplaying = {
//    'status_text': data,
//    'status_emoji': ":nospotify:", //Spotifyの絵文字を予め作成
//  };

// 変更後

  var profile = {
    'profile': {
      'real_name': data,
    }
  };
  
```

再生時と非再生時の切り替えは`displayStr`で出来ているので、切り替え部を外します。

```JavaScript
// 削除
// 表示情報の切り替え。  
//  var slacktoprofile;
//    if (data == '再生中の曲はありません') {
//    slacktoprofile = profile_noplaying;
//    } else {
//    slacktoprofile = profile;
//    }
```

あと、slackのAPIに投げるところも少し変えておきます。

```JavaScript
// 変更前
//  UrlFetchApp.fetch("https://slack.com/api/users.profile.set?token=" + token + "&profile=" + encodeURIComponent(JSON.stringify(slacktoprofile)));


// 変更後
  const options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(profile)
  };
  const res = UrlFetchApp.fetch(slackSetStatusUrl, options);
  

// この辺はエラー確認の為なので要らないかも
  const resJson = JSON.parse(res.getContentText());
  console.log(JSON.stringify(resJson, false, 2));
```

以上です！良きミュージックライフを。
PL-900 合格体験記

PL-900の合格体験記です。参考になれば幸いです。

#### 試験概要
PL-900（Microsoft Power Platform Fundamentals）とは、Microsoftのローコードまたはノーコードでソリューションを構築できる、Power Platformサービスについての基礎的な知識が問われる認定資格です。

【試験時間】45分
【問題数】35問程度
【合格点】700/1000
【受験費】13,750円（税込み）
【受験場所】試験センター or オンライン

#### 試験範囲
・Microsoft Power Platform のビジネス価値を説明する (20–25%)
・Microsoft Power Platform の基本コンポーネントを特定する (10 - 15%)
・Power BI の機能を実証する (10 - 15%)
・Power Apps の機能を実証する (20 - 25%)
・Power Automate の機能を実証する (15 - 20%)
・補完的な Microsoft Power Platform ソリューションを説明する (15 - 20%)
　…Power Virtual Agents、Power Pages、AI Builderについて

#### 勉強方法
①Microsoft Learn で学習
　[PL-900: Microsoft Power Platform Fundamentals](https://learn.microsoft.com/ja-jp/training/paths/power-plat-fundamentals/)

　Microsoft LearnのPL-900向けのトレーニングを一通り読みました。ですが、正直これだけで理解するのは難しいと個人的には感じました。②の試験対策動画を視聴した後に読んだり、③以降のアウトプット段階の補完的に扱う方がいいかもしれません。

②「PL-900 : Microsoft Power Platform Fundamentals 試験対策」の視聴
　[PL-900 : Microsoft Power Platform Fundamentals 試験対策](https://info.microsoft.com/JA-PowerApps-WBNR-FY21-05May-03-MKTOFY21PL900PrepSessionOndemandWebinar-SRDEM73329_LP02OnDemandRegistration-ForminBody.html)
　
　こちらのサイトに登録すると、記載したメールアドレスに試験対策動画のURLが送られてきます。AZ-900の時同様、かなり助けられました。やはり画像と音声付きだとわかりやすいです。しかし、動画内で出題される問題の解説が、AZ-900の時ほど親切には行われないので、理解しにくい部分もありました。
　
　注意点としては、Power Platformの最新サービスであるPower Pagesの説明がないことと、動画の冒頭で言及されていますが、サービスや機能の名称が変更前の呼び方で出てくるので、頭の中で変換しながら視聴していく必要があります。

③Udemyの問題集を解く
　[PL-900（Microsoft Power Platform 基礎） 模擬問題集※日本語版](https://www.udemy.com/course/pl-900microsoft-power-platform/)
　
　この問題集を購入しました。実際の試験に同じ問題が出題されることもあるので、やっていて損はないのですが、変更前の名称が出てくることや、Power Pagesの問題が出題されないので、レビューにもある通り、これに頼りきるのはよくないかなと思います。

④無料の練習用評価を解く
　[練習用評価](https://learn.microsoft.com/en-us//certifications/exams/pl-900//practice/assessment?assessmentId=34&assessment-type=practice)
　
　Microsoft Learnに練習問題があるので行いました。こちらだと、変更後の名称が出てきますし、Power Pagesの問題も出題されます。ただ、全文英語で、ページ自体を翻訳にかけてしまうと解答部分が不思議な日本語になってしまうので、問題部分だけを翻訳にかけて（たまに解答部分もですが）解く必要があり、少し手間です。また、受験後に思うのは、実際の試験より踏み込んだ問題が出てきて難しいなという印象です。

#### おすすめの手順

勉強方法の①にMicrosoft Learnを記載したのですが、
個人的には下記の順序で学習するのが一番効率が良いのかなと終わってみて思います。

②試験対策動画　→　①Microsoft Learn読んで復習
　→　②試験対策動画で再度復習　→　③④でひたすら問題を解く

①～④すべてが一長一短だなと感じたので、補いながら学習していくことをおすすめします。

#### 受験方法
前回のAZ-900ではオンライン（自宅）を選んだのですが、今回は試験センターで受験を行いました。

受付で本人確認や写真撮影などの手続きを済ませ、試験室に入ります。試験室ではパーテーションで仕切られた机にPCが一台一台置いてあり、他にも受験者たちがいて、それぞれが申し込んだ資格試験を受けている感じでした。他の方のタイピング音などが多少気になるものの、オンラインの時のように環境の準備や試験中のカメラの映りなどを気にしなくてもいいので、その点はとても楽でした。

#### まとめ
833点で無事に合格できました！

Fundamentals（基礎）の資格ではあるのですが、難しいなという体感でした。Power Platformのサービスの数自体は少ないので、より深くまで問われるということと、シナリオ問題が多く、問題文が長いことなどが難しく感じる要因かなと思います。名称変更含め、試験中混乱しないようにきちんと整理していく必要があると感じました。

以上になります。読んでいただきありがとうございました！
Power Appsを使って、リストへの転記とTeams通知を行う

# 想定する運用方法
従来は営業から工場への調査依頼がメールで頻繁に行われており、都度進捗リストに記入していました。
営業⇔工場間のやり取りをメールからPower Appsに変更することで、進捗リストへの転記とTeamsへの通知を自動で行います。（今回は下記画像の「依頼」部分）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949242/8833708a-e36a-29aa-abfc-5844d5b7d728.png)

# 作成したアプリ
アプリ作成時にデータソースとして、共有のSharepoint Listを選択しており、アプリ画面に入力した内容がリストに転記されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949242/697681e3-90b2-b1c6-6815-ac195e0f27bb.png)
下記投稿を参考に作成しました。
参考: [PowerAppsは僕には難しくて憶えられない。ので、使い方をTips風にまとめておきました](https://qiita.com/yowatana/items/7698a7fcbc1e26fb08e4)

# Teams通知
Sharepoint Listに項目が作成されると、Teams通知フローが実行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949242/fc96a6a6-2a66-cf16-b492-ef474dbdbfb9.png)

1. 「項目が作成されたとき」をトリガーとする
2. 新規に作成された項目のリンクを作成（依頼内容の詳細をすぐに確認できるように）
3. 依頼が来たことを通知したいタグのmentionトークンを取得する
4. 2で取得したリンクや、依頼内容をTeamsに投稿
【ChatGPT無】アイディア出しのためのワードミキサーPrompt

:::note info
本記事は、ChatGPT（無料版）で
行なっております。GPT4での確認
はできておりません。あしからず。
:::

　どうも、カーブミラーです。

　今回は、
　　アイディアを出すために
　　　ワードミキサーを
　　　　用意しました。

　ワードミキサーとは
　　なんぞや、ってことで、
　　　説明しますね。

　ワードミキサー、
　　うん、聞いたことが
　　　ないですよねw

　私が考え出した、
　　と言いたかったけど、
　　　ググると、
　　　　サービスが出てきます。
　　　　　同じ感じでした。

　説明すると、
　　単語をいくつも入力して、
　　　そこから文章を作成する、
　　　　というものです。

　まぁ、
　　言葉で説明するよりも
　　　実際の例を見ましょう。
```Text:ワードミキサーの文章の例
User
未来
技術
動物

ChatGPT
以下は、入力されたワードを使って作成した文章の例です：

1. 技術の進歩が未来を変える力を持っています。未来の社会では、動物たちとのコミュニケーションも技術の一環として進化していくことでしょう。

2. 未来の世界では、技術と動物が融合した新たな存在が現れるかもしれません。人工知能の進化により、動物の行動や感情をより深く理解し、共存する未来が実現することを期待しています。

3. 技術の発展が未来の動物保護に大いなる影響を与えるでしょう。例えば、ドローンやセンサー技術を駆使して、野生動物の保護や監視を効率的に行うことができるようになるかもしれません。

4. 未来の社会では、技術が動物たちの生活環境をより豊かにする可能性があります。例えば、仮想現実技術を使って、人間と動物が一緒に遊ぶことができる新しいエンターテイメントが登場するかもしれません。

5. 動物の保護や環境保全に関する技術の進歩は、未来の地球の生態系にとって極めて重要です。新たなセンサーやモニタリングシステムの開発により、動物の生息地や移動パターンをリアルタイムで把握することが可能になります。

6. 未来の技術は、動物たちの医療や福祉にも大いなる影響を与えることが期待されます。遺伝子編集やバイオテクノロジーの進歩により、病気や障害を持つ動物たちの治療や改善が進むでしょう。

7. 技術の進歩は、未来の動物の生活環境をサポートすることにも役立つでしょう。エネルギー効率の高い環境設備や再生可能エネルギーの活用により、動物たちが快適な環境で生活できるような社会が実現することを期待しています。

8. 未来の社会では、技術と動物の関係がより深まることで、人々の意識も変わっていくでしょう。動物の権利や福祉に対する関心が高まり、新たな倫理観や法律が生まれるかもしれません。

9. 技術の進歩により、未来の動物たちとのコミュニケーションがより豊かになることを期待しています。翻訳技術や音声認識技術の発展により、私たちは動物たちとの意思疎通が可能になり、新たな友情や絆を築くことができるかもしれません。

10. 未来の社会では、技術が動物たちの生態系の保護と維持に貢献するでしょう。人工知能やビッグデータ解析の進化により、野生動物の生息地の変化や保全活動の効果をより正確に予測することが可能になります。

これらはワードミキサーを使用して生成された文章の一部です。ワードを有機的に組み合わせるため、全ての文章が直訳的な意味を持たない場合がありますが、それぞれの要素が組み合わさって意味のある文章となるよう努めています。
```
　Promptの
　　[文章]の部分を
　　　[一文]にすると

```Text:ワードミキサーの一文の例
User
ChatGPT
アイディア
ビジネス

以下は、入力されたワードを使用して生成した10個の文例です。

1. ChatGPTを活用した新しいビジネスアイディアが浮かびました。
2. ビジネスのアイディアを探すために、ChatGPTの力を借りましょう。
3. ChatGPTのアルゴリズムを使用して、革新的なビジネスアイディアを見つけることができます。
4. アイディアの宝庫、ChatGPTがビジネス界に新たな波をもたらすかもしれません。
5. ChatGPTとビジネスの融合により、新たな市場の可能性が広がります。
6. ビジネスの成功に不可欠なのは、創造的なアイディアの発想です。ChatGPTがそのサポートをしてくれます。
7. ChatGPTの力を借りて、革新的なビジネスアイディアを生み出しましょう。
8. ビジネス界の次なるトレンドを予測するために、ChatGPTが役立つかもしれません。
9. アイディアの鮮度とクオリティを向上させるために、ChatGPTとの協力を検討してみましょう。
10. ビジネスのアイディアに迷ったら、ChatGPTに相談してみるのも一つの手かもしれません。

これらの文例は、入力されたワードを使い、ワードミキサーによって生成されたものです。どうぞ参考にしてください。
```
***
　どうでしょうか？

　単純なアイディア出しよりも
　　意外な一文や文章が得られます。

　Promptの
　　[文章]の部分を
　　　[一文]に変えたり
　　　　してみてください。

```Text:ワードミキサーPrompt
# 目的
入力されたワードから、ワードミキサーして、[文章]を作成する。

# 注意点
・入力されたワードをすべて使う。
・ワードをそのまま使う。
・ワードには、「ChatGPT」も含まれる可能性があります。

# 処理手順
入力された複数のワードをうまく使って、ミキシングして、10個ほど、[文章]を作成してください。無理であれば構いません。そう言ってください。

# 最終確認
以上が理解できたら、「ワードの入力をお願いします」と表示して待機してください。

理解できない箇所があったら、箇所を指摘してください。
```
[Mac]ずっと同じタグをつけてTwitter投稿し続ける方法(旧Ver.TweetDeck＋BetterTweetDeck)

だれでも知ってるけどメモ。

# これにより実現できること

PC(Mac)でTwitterに投稿する際、直前で入力したハッシュタグだけを保持したまま次の投稿を打てる。
勉強会やITイベントの際、同じハッシュタグを使ってひたすらメモを投稿し続けるときなどに便利。

**↓文章を書いてTweetボタンを押しても #テスト #テスト２ のハッシュタグだけが投稿画面に残ってくれる**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/1b19848c-530e-c1bd-6e7b-9f1ff5a67181.png)

# 必要なもの

### Google Chrome

https://www.google.com/intl/ja_jp/chrome/

### BetterTweetDeck（Chrome拡張）

https://chrome.google.com/webstore/detail/better-tweetdeck/micblkellenpbfapmcpcfhcoeohhnpob


# 手順

1\. Chrome拡張機能である「BetterTweetDeck」を導入する

2\. ChromeでTweetDeck( https://tweetdeck.twitter.com/ )を開く

3\. すると、以下のようなメッセージが表示されるので、RollBackを押すが、同じ画面が表示されてロールバックができない（2023年7月19日現在）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/f46b9d20-eb52-4f87-a110-cc2c1e4a80db.png)

```
レガシーTweetDeckへのロールバック

新しいTweetDeck UIに登録されたようですね。ベターTweetDeckは互換性がありません。

以下のボタンをクリックすれば、従来のUIにロールバックできます。
免責事項：このボタンは将来的に何もできなくなる可能性があります。
```

2023年7月3日に新UIに強制移行され、BetterTweetDeckが機能しなくなってしまったが現在元に戻せるようになった模様。上記のRollbackボタンはこの機能を使って旧バージョンでTweetDeckを使う設定を行ってくれるはずだが、私の環境では戻ってくれなかった。仕方ないので、以下の記事を参考に旧バージョンに戻してみる

https://gigazine.net/news/20230710-return-old-tweetdeck/

4\. いったん「Don't ask again」を押してこのウィンドウを閉じる

5\. 新しいバージョンのTweetDeckが表示されてしまうが、左下の三点リーダーを押して「設定とプライバシー」を推す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/8443320a-6495-da56-e1ed-b35bb9b8e01e.png)

6\. アカウント→TweetDeckのバージョンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/30c2b14c-bf3f-8009-3585-e3a470d8b026.png)

7\. 下記の画面で「終了する」を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/7af6023d-fde0-624d-4256-2baf1927a595.png)


8\. TweetDeckが表示された状態で、Chromeの右上にある三点メニュー→「その他のツール」→「ショートカットを作成」を選ぶ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/01014f99-522e-8cdf-2fbc-311065795bdf.png)

9\. 下の画面で「ウィンドウとして開く」にチェックを入れてから「作成」ボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/9bbfa29c-dd93-d6a3-f802-72fe7a4112ab.png)

10\. アプリケーションフォルダの「Chromeアプリ」というフォルダに、TweetDeck.appというショートカットができる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/8e06ba28-14a9-00e2-9e7a-185552a8c0ea.png)

11\. ダブルクリックすると、旧バージョンのTweetDeckがデスクトップアプリと同じ形式で開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/1b19848c-530e-c1bd-6e7b-9f1ff5a67181.png)

12\.Dockにアイコンが表示され、固定もできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110606/7151f9a0-4e7a-9898-6f7f-c21e69ac53d3.png)


# 注意事項

Gizagineの記事にもあるが、この旧バージョン表示がいつまで対応を続けてくれるのか分からない。
最近のTwitterは突然XXXするが多すぎるので、この表示もすぐにダメになるかもしれない。
ひとまずはこれで急場をしのいでおく

もしほかにもいい方法やアプリなどがあったらぜひコメントから教えてほしいです。
[Servicenow][Employee Center] taxonomyの作成（編集）

# taxonomyの作成
設定手順の例を簡単にまとめます。

## 環境
- Version：Tokyo

## 設定手順
OOTBだとこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636124/74879fa8-4d45-ffee-a0c7-e53a4f238044.png)


1. [Taxonomies]と検索し、[Employee]を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636124/8b32e7f6-a2ec-eb6d-fbff-921f30d049ec.png)

2. 必要事項があれば変更する。
今回は特に変更せずOOTBのものを利用する。
もしOOTBのものを保持しておきたい場合は、Cloneボタンを押下して複製を作成する。
そして既存の「Employee」taxonomyのActiveをfalseにする。
RubyでAtCoder ABC231(A, B, C)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC231のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

# A - Water Pressure
https://atcoder.jp/contests/abc231/tasks/abc231_a
```ruby:a-231.rb
puts gets.to_i.fdiv(100)
```

# B - Election
https://atcoder.jp/contests/abc231/tasks/abc231_b
```ruby:b-231.rb
n = gets.to_i
hash = Array.new(n){ gets.chomp }.tally
puts hash.key(hash.values.max)
```
## 解説
`tally`メソッドで同じkey同士をくくった後のvalueが最大となるkeyが答えとなります。(`max_by`を使った書き方もできると思います)

# C - Counting 2
https://atcoder.jp/contests/abc231/tasks/abc231_c
```ruby:c-231.rb
n, q = gets.split.map(&:to_i)
a = gets.split.map(&:to_i).sort
q.times do
  x = gets.to_i
  i = a.bsearch_index{ _1 >= x } || n
  puts n - i
end
```
## 解説
`bsearch`メソッドを使って二分探索することで、それぞれのXに対してXよりも大きい要素数を求めることができます。
※ countメソッドだとTLEしてしまいます

https://qiita.com/shoya15/items/50fd17e37d7c64f2b166
Unity/C# 逆引き用語集画像関連編

# Unity/C# 逆引き用語集画像関連

この用語集は RPG Maker Unite / Unity C# プログラマ向けのつまづいているんだけど、何という語句で検索、勉強すれば良いか分からない方のための逆引き用語集になっています。
また、この記事は RPG Maker Unite を用いない方にもお役に立てる事もあるかと思います。
良かったら他の初級編などの用語集と合わせてご活用下さい。
[逆引き用語集プログラマ編その1](https://qiita.com/walkerjito/items/33a784ddf490af7ebd11)
[逆引き用語集プログラマ編その2](https://qiita.com/walkerjito/items/03aa84bcb5362c096893)


環境は大体以下のような感じですが、どのバージョンでも基本はあまり変わらないかと思います。
RPG Maker Unite: 1.00.01
Unity: ~2022

[転載元 Github:walkerjito/GuideOfUnityAndRMU/逆引き用語集
/画像関連基本用語集](https://github.com/walkerjito/GuideOfUnityAndRMU/blob/main/%E9%80%86%E5%BC%95%E3%81%8D%E7%94%A8%E8%AA%9E%E9%9B%86/%E7%94%BB%E5%83%8F%E9%96%A2%E9%80%A3%E5%9F%BA%E6%9C%AC%E7%94%A8%E8%AA%9E%E9%9B%86.md)
<dt>

## 画像の基本
</dt>
<dd>

| 目的 | 使用する時に必要なキーワード |
----|----
| 画像を扱うツール | UnityUI(uGUI)|
| 画像を表示するためのクラス | Sprite, Image クラス |
| 位置情報を扱うクラス | Transform クラス<br/>Transform.position(localPosition)プロパティ|
|画像を動かしたい| Rigidbody.MovePosition メソッド（衝突判定利用時）|

</dd>
<br/>

<dt>

## 画像に物理演算を使う、画像に衝突・接触判定をさせる時に使う(2D) </dt>
<dd>

| 目的 | キーワード |
----|----
|物理演算、衝突、接触判定時において使うクラス| Rigidbody2D クラス|
| 物理演算で動かす | AddForce メソッド|
| 物理演算を使わない場合 |  Kinematic プロパティ, MovePosition　メソッド |
| 衝突・接触判定に必要なクラス | Collider2D 派生クラス|
| 衝突・接触判定時に使う関数 |　OnTriggerEnter2D イベント関数<br/> OnCollisionEnter2D イベント関数|

</dd>

<dt>

## UnityUI, uGUI
</dt>
<dd>

|目的|キーワード|
----|----
|UnityUI.Image が表示されないんだけど| Canvas |
|uGUI で使われる Transform| RectTransform|
|文字を表示させたい| UnityUI.Text, TextMeshPro |
|これって位置をどうやって変えるの？|アンカー、アンカープリセット、ピボット|
|幅とか高さを縮尺で指定したいんだけど| ストレッチ |
|画像を特定の形に切り抜きたいんだけど| Mask |
|uGUI のボタンとかってどうやって反応させるの？| EventSystem, OnClick, UnityEvent|
<dd>
リアクトにおける状態管理についてまとめてみた

Reactにおいて状態管理をする場合、どのようにするべきかが悩ましいことがある。
そこでまとめてみようと思います。

### context
React Context APIは、Reactに組み込まれた状態管理ライブラリであり、ReduxやMobXよりもシンプルであり、小規模なアプリケーションに適しています。Context APIは、Reactコンポーネントツリー内で状態を共有するためのメカニズムを提供します。

### redux
Reduxは、Fluxアーキテクチャの一種であり、関数型プログラミングの概念を取り入れた非常に人気のある状態管理ライブラリです。Reduxは、アプリケーション全体の状態を単一のストアに保存し、ストア内の状態を変更するためのアクションを定義します。Reactコンポーネントは、ストア内の状態を読み取り、必要に応じてストア内の状態を変更するためのアクションを発行することができます。

### recoil
Recoilは、Facebookによって開発された状態管理ライブラリであり、Reactアプリケーションの状態を管理するための簡単な方法を提供します。Recoilは、アトムと呼ばれる単一の状態を使用してアプリケーションの状態を管理します。アトムは、Reactコンポーネントツリー内で状態を共有するためのメカニズムを提供します。

### どのライブラリを使うべきか
どのライブラリを使うかは、プロジェクトの要件によって異なります。小規模なアプリケーションには、React Context APIやRecoilが適しています。大規模なアプリケーションには、ReduxやMobXが適しています。また、ReduxやMobXは、アプリケーションの状態が複雑である場合にも適しています。
Unity/C# プログラマ逆引き用語集その2

# RPG Maker Unite Unity/C# プログラミングの逆引き用語集
この記事は RPG Maker Unite / Unity C# プログラマの方でつまづいているんだけどどうしたら良いか分からない。と言う方にどの用語で調べれば解決できるかの指針を示すための逆引き用語集です。
RPG Maker Unite 向けの記事ですが、Unity の基本的な用語集ですので、RPG Maker Unite を使っていない方にも役に立てばと思います。
[Unity/C#逆引き用語集その1](https://qiita.com/walkerjito/items/33a784ddf490af7ebd11)
[Unity/C#逆引き用語集画像関連編](https://qiita.com/walkerjito/items/a84fc15cf716cbd934cd)
も併せてご活用下さると幸いです。

使用している環境は大体こんな感じですが、基本的な部分はどのバージョンでもそれほど変わる事はないと思いますので、大体通じると思います。
RPG Maker Unite 1.00.01
Unity ~2022

[転載元ページ:walkerjito/GuideOfUnityAndRMU/逆引き用語集
/プログラミング初級](https://github.com/walkerjito/GuideOfUnityAndRMU/blob/main/%E9%80%86%E5%BC%95%E3%81%8D%E7%94%A8%E8%AA%9E%E9%9B%86/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%88%9D%E7%B4%9A.md)
<dl>
<dt>

## プログラミング編その2
</dt>

<dd>

|目的|キ－ワード|
----|----
|for ステートメントでいちいち要素番号を指定するのが面倒| foreach ステートメント|
| クラスが生成された時に呼び出されるメソッド | コンストラクタ |
| Unity で MonoBehaviour が生成された時に呼び出されるイベント関数 | Awake |
| Update で処理の分岐をゴチャゴチャさせたくない<br/> for 文を使って一連の処理を記述しても最後の処理しか反映されない | コルーチン |
|コルーチンで使っている IEnumrator とか IEnemurable , yield って何？| C# のイテレータに関する要素 |
|MonoBehaviour クラスを作りすぎて AddComponent で探すのが面倒！整理したい | 名前空間、namespaace |
|配列は要素数が変えられなかったり、途中で抜いて繋げたり出来ない| List, List\<T>|
|配列の中身を指定したり探したりを便利にしたい| Dictionary, Dictionary\<T1,T2>|
|テキストファイルの読み書きの原理を理解したいんだけど？|ストリーム, stream, IO(Input/Output)|
|テキストで保存する時にどうやってデータをまとめたり整理すれば良いか分からない| CSV, Json, yaml, XML |
|ソースコード見ていても中身が分からなくて困ってる！|命名規則、リーダブルコード、パスカル形式、キャメル形式|
</dd>


<dt>

## オブジェクト指向その1
</dt>
<dd>


| 目的 | 使用する時に必要なキーワード |
----|----
|似たクラスの共通点を集約したい|クラス継承|
|クラスの一番親になっているもの| Object クラス |
|フィールドにセキュリティや初期化処理みたいなのを加えたいんだけど| property, プロパティ|
|同じ目的のメソッドの引数の数だけ変えたい| メソッドのオーバーロード|
|派生先までのクラスでしか扱わせたくない| protected 修飾子|
|派生先のクラスで振る舞いを変えたい| virtual 修飾子, override 修飾子, メソッドのオーバーライド|
|似た状況でクラスを扱いたい<br/>でも元のクラスはそのまま扱いたい<br/>使用するクラスにも変更を加えたくない| インターフェイス |
|GetComponent の後の\<Monobehaviour> とか \<BoxCollider2D> ,\<T>って書いてあるのなんて言うの？<br/>規則性のある型を柔軟に扱いたい| ジェネリクス |
</dd>
</dl>
Unity/C# 逆引き用語集 その１

# Unity/C# 逆引き用語集
この用語集は RPG Maker Unite / Unity C# プログラマ向けのつまづいているんだけど、何という語句で検索、勉強すれば良いか分からないかたのための逆引き用語集になっています。
また、この記事は RPG Maker Unite を用いない方にもお役に立てる事もあるかと思います。
良かったら他の初級編などの用語集と合わせてご活用下さい。
[プログラマ編その2](https://qiita.com/walkerjito/items/03aa84bcb5362c096893)
[画像関連編](https://qiita.com/walkerjito/items/a84fc15cf716cbd934cd)

環境は大体以下のような感じですが、どのバージョンでも基本はあまり変わらないかと思います。
RPG Maker Unite: 1.00.01
Unity: ~2022

[転載元:Github/GuideOfUnityAndRMU/逆引き用語集
/基本用語集](https://github.com/walkerjito/GuideOfUnityAndRMU/blob/main/%E9%80%86%E5%BC%95%E3%81%8D%E7%94%A8%E8%AA%9E%E9%9B%86/%E5%9F%BA%E6%9C%AC%E7%94%A8%E8%AA%9E%E9%9B%86.md)
自身の Github リポジトリより転載させて頂いてます。

## Unity関連
<dl>
    <dt>基本的な用語</dt>
    <dd>
    
| 目的 | 使用する時に必要なキーワード |
----|----
| ゲームに登場させるデータの基本単位<br/>（ゲームに登場するものやこと） | ゲームオブジェクト(GameObject) |
|ゲームのデータを一連の流れとして保存する| シーンファイル(scene)|
|オブジェクトの動作や役割などを決める部品|コンポーネント|
| オブジェクトやコンポーネントを関連付けること | アタッチ |
| コンポーネントを追加させる方法、メソッド | AddComponent |
| パターンが決まっている物を利用する時 | プレハブ (Prefab) |


</dd>

<dt>ウィンドウ関連</dt>
<dd>

| 目的 | 使用する時に必要なキーワード |
----|----
|ゲームオブジェクトのデータを編集したり、オブジェクトをアタッチ、コンポーネントを追加するウィンドウ|インスペクタウィンドウ(Inspector)|
|シーン内のゲームオブジェクト一覧を表示する|ヒエラルキーウィンドウ|
|実際にゲームオブジェクトがどんな風に配置されているか見るウィンドウ|シーンビュー|
|実際にゲームをテストプレイした時にどう動くか確認出来るウィンドウ|ゲームビュー|
|エラーや警告、ログなどを確認できるウィンドウ|コンソールウィンドウ|
</dl>



## スクリプト関連

<dl>

### スクリプトの基本用語</dt>
<dd>

| 目的 | 使用する時に必要なキーワード |
----|----
| 使用する言語 | C# |
| 書いたスクリプトを動かすために機械語にすること |コンパイル、ビルド |
| スクリプトを記述、コンパイルするためのツール|(Windows では) Visual Studio , VisualStudio Code, 昔は MonoDevelop|
| 開発環境を何と言うか | IDE |
| Unity で独自に処理を記述したい時に作るクラス | MonoBehaviour 継承クラス, |
| 初期化時とか、フレーム更新とか、接触時とかに呼び出されるメソッドの総称 |イベント関数|
|コンポーネントを取得したい| GetComponent |
|コンポーネントを追加したい| AddComponent |
| GameObject を複製したい| GameObject.Instantiate|
| 初期化処理のイベント関数 | Awake, Start |
| 毎フレーム更新させるイベント関数, 入力判定を記述する場所 | Update, FixedUpdate |
|動作確認を行いたい| Debug.Log メソッド|


</dd>
</dl>

## C#関連

<dl>
<dt>

### データ基本用語
</dt>
<dd>


| 目的 | 使用する時に必要なキーワード |
----|----
|データを一時的に保存したい| 変数|
|変数をまとめて使いたい| 配列|
|特定の条件の時だけ処理を分けたい| if ステートメント, switch ステートメント|
|処理を繰り返したい| for ステートメント, while ステートメント|
|処理の基本単位|ステートメント|
| プログラム中に一つだけしか存在させなくて良い | static |
|プログラムの処理の中にバラバラに定義して修正が面倒だ | 定数、列挙型 |
|プログラム(処理)の中にバラバラに文字列や数値型を定義してしまう | マジックナンバー|
|定数のようなものを整理しつつまとめて記述したい<br/>|列挙型, enum|
|定数の代わりに初期化した後に変数の値を変更したくない| readonly 修飾子 |
</dd>
<dt>

###  処理基本用語
</dt>
<dd>


| 目的 | 使用する時に必要なキーワード |
----|----
|同じ処理を色んな場所で使いたい| メソッド|
|メソッドに情報を外から与えたい|引数|
|メソッドで処理したものを受け取りたい|返り値|
|メソッドで処理したものを受け取りたくない| void|
|フィールド、メソッド、クラスを自由に触らせたくない|private 修飾子|
|外部からフィールド、メソッド、クラスを使わせたい| public 修飾子|
|メソッドのまとまりに役割を持たせたい|クラス|
|自分でクラスやメソッド、構造体を定義したい|ユーザー定義型|
|クラス内で変数を共有したい|フィールド|
|どこからどこまで変数やメソッドは影響しているか|スコープ|
|クラスなどの型を比較、処理したい| typeof 演算子 |

</dd>
</dl>
echo+Nuxt+Cypress構成をデプロイ＆テスト実行できるようCodePipelineを組んだメモ


# CodePipeline 流れ図
![FireShot Capture 025 - CodePipeline - AWS Developer Tools - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108154/c1f17e73-12e0-a740-b553-26ee16bf9b9a.png)

# ステージ
## Source
ソースコードの取得
ここではBitbucket

### dir構造
~~~
├── build
│   ├── go
│   │   └── Dockerfile
│   └── nuxt
├── cmd
│   └── api
│       └── main.go
├── e2e
│   ├── cypress
│   │   └── e2eテストファイル
│   ├── cypress.config.js
│   └── package.json
└── web
    └── nuxtのコード
~~~

## Build
echo(Go) -> ECRにコンテナイメージをプッシュ
Nuxt -> s3にファイルをアップ

### Goのビルド
[ECRに登録するGoコンテナを作成する | ECS FargateでGoコンテナを起動してローリングアップデートする ](https://yhidetoshi.hatenablog.com/entry/2019/12/08/162853#ECR%E3%81%AB%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8BGo%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
↑こちらを参考に
コンパイルしたバイナリファイルと必要な静的ファイルだけを詰めたimageを作り,imageサイズを削減する

~~~Dockerfile:Dockerfile
FROM golang:1.20.2-alpine as build
RUN apk add --update && apk add git
RUN mkdir /go/src/app
WORKDIR /go/src/app
ENV GO111MODULE=on
COPY ./cmd/go.mod ./
RUN go mod download

ADD ./cmd /go/src/app
WORKDIR /go/src/app/api

RUN go build

# ここからECR保存用image
FROM alpine:3.10

RUN apk add --update --no-cache ca-certificates
WORKDIR /go/src/app/api/
# バイナリファイルのコピー
COPY --from=build /go/src/app/api/api /go/src/app/api/
# 静的ファイルのコピー
COPY --from=build /go/src/app/api/public/static /go/src/app/api/public/static/
ENTRYPOINT ["/go/src/app/api/api"]
~~~



## deploy
ECS Fargateを使っているので、
サービス設定でBuildステージで作ったimageのコンテナを立てるように設定

## e2e-test
こちらの記事が大変参考になりました
[AWS CodeBuildでCypressのE2Eテストをする | DevelopersIO](https://dev.classmethod.jp/articles/codebuild-cypress/)


### CodeBuild設定
cypressの公式imageを環境に設定する
![スクリーンショット 2023-07-19 11.13.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108154/c099b437-6b89-a0f9-732a-454d7bf732aa.png)
詳細は公式: https://docs.cypress.io/guides/continuous-integration/aws-codebuild

~~~yaml:buildspec.yaml
## buildspec.yml
version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: latest
  pre_build:
    commands:
      - cd e2e
      - npm install
  build:
    commands:
      - npx cypress run
~~~

# まとめ
CIをCodePipelineを用いて組んだ時のポイントのみを書いていきました
各フェーズが明示的に分けて処理を考えていけるのが良かったです

---
弊社では、一緒に働いてくれるエンジニアを募集しています。


↓興味のある方はこちらから↓
[Wantedly - スタジオアンビルト株式会社](https://www.wantedly.com/companies/studiounbuilt)

こんなWebサービスを作っています。
・[マドリー](https://madree.jp/)
・[Studio Unbuilt](https://www.studiounbuilt.com/)
VPN接続を CLI から接続/切断する (WSL2 ubuntu, PowerShell)

## 背景
- パブリッククラウドに接続するためにVPNの接続を切り替える（ON/OFFする）必要がある
- いちいちマウスぽちぽちしたくないのでCLIからやりたい


## やったこと
こんな感じで alias に登録
``` bash
alias vpnd="rasdial.exe {VPN_CONNECTION_NAME} /disconnect"
alias vpnc="rasdial.exe {VPN_CONNECTION_NAME} ユーザ名 パスワード"
```
ubuntuなら `~/.bash_aliases` あたりに追加しておけばよいかと。

``` shell
$ vpnc
{VPN_CONNECTION_NAME} に接続中...
ユーザー名とパスワードを確認中...
ネットワークにコンピューターを登録中...
{VPN_CONNECTION_NAME} に正常に接続しました。
コマンドは正常に終了しました。

$ vpnd
コマンドは正常に終了しました。

# VPN接続していない状態でvpnd
$ vpnd
接続なし
コマンドは正常に終了しました。
```


## 参考
- https://future-architect.github.io/articles/20221115a/
[Tips] 株価の取得・為替レートの取得

python で前営業日の株価や為替レートを取得するスニペットを共有します。pythonの外部ライブラリ yfinance を使います

## 01. 環境設定

`pip install yfinance` ないし類似のコマンドで yfinance というライブラリを導入すれば終わりです。依存関係である numpy や pandas といった統計ライブラリが同時に入ります。

yfinance はYahoo!Finance をクロールして情報を取得するので、ユーザ登録やAPIキーなどユーザ固有の準備は不要です。法的な問題が気になるなら yfinance のプロジェクトページを見てください

## 02. 概要
`yfinance.Ticker` ないし `yfinance.Tickers` の初期化子にティッカーを渡して得られたオブジェクトのメソッド history を使うと、指定した範囲の株価データがDataFrame のオブジェクトとして得られます。Close(終値)の列を抜き出して最新のデータのみを取り出せばできあがりです

## 03. 株価取得のスニペット

```python
import yfinance as yf

def stock_prices(tickers):
  C = yf.Tickers(tickers).history(period="1d").Close
  return { t: C[t][0] for t in tickers }

print (stock_prices(["MSFT", "JNJ", "V", "MA"]))
#{'MSFT': 359.489990234375, 'JNJ': 159.05999755859375, 'V': 240.77000427246094, 'MA': 398.1600036621094}
```

- `yfinance.Tickers` を使うと複数の株式のデータをまとめてとってこれます
    - 裏側ではひとつずつリクエストするので多量のティッカーを突っ込まないように
- 負荷を下げるため `history` の引数で期間を指定します。
- 辞書形式にしたほうがわかりやすいので実装を参考にしてみてください
- 日本の株価の場合、ティッカーには「.T」をつけます例えば日産のティッカーは「7201.T」となります
- 日本株のTickerと米国株のTickerを混ぜないほうが良いでしょう。スクリプトの実行時刻によってどちらかの国のティッカーに終値が入っていないケースが頻発します。祝日も日本と米国で違うためNaNが入りやすくなります。ティッカーの国籍が一致していれば、上記のスクリプトであればいつ実行しても値を取得できるはずです。

## 04. 為替レート取得のスニペット

```py
import yfinance as yf

def fx_rates (ticker):
    return yf.Ticker(ticker).history(period="1d").Close[0]

print (fx_rates("USDJPY=X"))
# output: 138.60000610351562
```

- 基本は株価と同じ扱いでいいのですが、Tickers に為替レートのティッカー(例: USDJPY=X) を混ぜ込むと処理が面倒なので株価と外為は別の処理として定義したほうがよいです（興味ある人はやってみてください。一応まとめてやれますがコードベースでややこしくなるので非推奨です）。
- "USDJPY=X" がドル円, "EURUSD=X" がユーロドルのティッカーです。法則がわかると思うので色々試してみてください。
PowerAppsで作る最も簡単な勤怠管理ツール

あなたのチーム、こんな状況になってませんか？
-
- 課題：リモート・出勤が併用されてて部内の勤務状況確認できない！
    - 上司「とりあえずTeamsに勤務開始・終了を報告してください」
        - 部下「報告面倒いな」　Lose
        - 上司「なんかみづらいな」　Lose

そこで、だれでもちょちょいと作れるくらいの勤怠管理ツールを考えてみました。
目指したのはとにかく最低限の機能、ちょうど[出勤したら裏返す名前書いた木の札をアレ](https://www.bing.com/images/search?q=%E5%87%BA%E5%8B%A4%E6%9C%AD+%E3%81%B2%E3%81%A3%E3%81%8F%E3%82%8A%E8%BF%94%E3%81%99 "画像検索")みたいなのをサクッと作ってみます。

利用するもの
-
- PowerApps
- SharePoint（Lists）

以上！


開発の流れ
-
1. 記録用のListsを作成
2. PowerAppsで表示部を作成
3. PowerAppsからListsへの書き込み部を作成

1\. Lists作成
-
- ベースのチームを「SharePointで開く」
Teamsアプリで、みんなが参加しているチームを開き、右上のメニューからSharePoint（Web）を開きます。
- 新規「リスト」の作成
左のメニューから「サイトコンテンツ」を開き、＋新規＞リストを作成します。今回は「空のリスト」から作成しましょう。
- 適宜列作成、名前を変更
列の追加は列最終行から、変更は列を選択して列の設定＞名前の変更からできます。今回は、「display_name」「status」をそれぞれテキスト形式で用意しましょう。
- 社員を追加
今回は勤怠管理したい社員について、列の上の「＋新規」から人数分作ってしまいましょう。後から追加等する場合はこのリストから修正をしましょう。

![リスト完成イメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510897/d61e3162-c875-1e4f-2b2b-3e2d20b2d04c.png)
こんな感じです。

2\. 表示部作成
-
- 空からアプリ作成
PowerAppsのウェブページを開き、社内のOfficeアカウントでログイン、空のキャンバスアプリの作成をしましょう。Appsの作成が初めてのときは環境準備に少し時間が必要かもしれません。
- SharePointコネクタ接続でListsを取得
作成画面の一番左に各種作成メニューパネルがあるので、そこのデータベースのマーク（円柱のやつ）から「データの追加」＞コネクタのSharePointで自分のアカウントを選択。チーム一覧が表示されているはずなので、リストを作成したチームを選び、リストを選択します。
- ギャラリーを追加し、リストとつなぐ
左パネルから＋（追加）を選択し、レイアウト＞空の垂直ギャラリーを追加します。データソースを要求されるので、作成したリストを選びましょう
- 名前、ステータスを表示
クリック選択等でギャラリーが選択されている状態で、左パネルの＋（追加）から、テキストラベルを２つほど追加しましょう。（おそらく何もしなくてもリストの列項目が表示されると思いますが、）上のリストボックスから「Text」を選び、フォームに「ThisItem.status」等のように記載すると、リストで作成したユーザ情報が行ごとに表示されていると思います。
![テキストフォーム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510897/c1d8bea2-f9ff-89aa-387c-cf8c02101004.png)
多少配置、高さ調整してますが、ここまででこんな感じの画面になります。
![途中１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510897/7b2eaeed-33c6-6a40-802e-1d3eed163207.png)


3\. 書き込み部作成
-
- ギャラリーに申告用ボタンを追加
続いてギャラリーを選択している状態から、＋（追加）でボタンを追加しましょう。各行にボタンが追加されているかと思いますのでいい感じに配置調整し、右のプロパティの「テキスト」を変更して「出社」「自宅勤務」「退勤」の3つを追加しましょう。
`Text`=`出社`
- onSelectでPatch記載
各ボタンで、上のリストボックスがonSelectの状態でフォームに以下にならって記載を行いましょう（てすとはリストの名前です）。これでボタンを押すとリストのstatusを書き換えられるようになります。
`OnSelect`=
`Patch(てすと,LookUp(てすと,ID=ThisItem.ID),{status:"出社"})`
※　出社のところを適宜ボタン名と合わせる
- DisplayModeでif文作成
一応ここまでで十分機能しますが、利用者が使いやすいようにどのボタンが押せるかを条件式を使って変えてあげます。上のリストボックスからDisplayModeを選択し、以下にならって記載してください。ステータスが出社の時は出社ボタンを押せないように（すでに押されているように）見せることができます。
`DisplayMode`=
`If(ThisItem.status="出社",DisplayMode.Disabled,DisplayMode.Edit)`

以上で完成！簡単でしょ？
![kannsei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510897/8ccb99a8-0018-be9a-924c-a5a649dfbedf.png)


さらに工夫するなら？改善方針案！
-
- 本人だけが勤怠変更できるようにしたい
    - `User().Email`で利用中のログイン者のメールアドレスがわかります。なので、例えばリストにe-mail列追加してメルアド管理し、DisplayModeのif条件に入れ子で入れれば、本人のみ勤務ステータス変更できるようになりますね。
- なんか「営業先」みたいな一言コメント残せるようにしたい
    - 上記と同様、Lists列拡張してリッチにして行きましょう
- 日次の記録（ログ）を残したい
    - Lists列に日付を追加し、表示は日付でfilter、書き込みは日付pickerを用意すると日付指定で入力できますね。ここまでできるようになればあなたも立派なDX職人かも？
- 毎日退勤状態にリセットしたい
    - むむ、これは少し骨が折れそう。PowerAutomateで午前5時に動くものを作るとよさそう？

こんな感じでどんどん拡張改善できるので、まずはとりあえずで動くものをささっと作ってみてはいかがでしょうか？
PowerAutomateでSharePointリストのステータスが1か月前に「完了」になった項目の添付ファイルを削除する

# 想定する運用方法
複数人で共有している進捗確認＆詳細メール添付用のSharePointリスト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949242/cc2e2b73-3c8b-c516-d0f5-dc398439796c.png)
このリストには、案件の依頼メールを添付します。
依頼内容が完了したら、リストに添付されたメールから依頼元に返信します。

# やりたいこと

SharePointリストには、容量の制限があるので下記条件を満たした場合に添付されたメールを削除したい。
1. ステータスが「完了」状態
2. ステータスが「完了」になってから1か月経過している

ステータスが完了になった瞬間に、添付されたメールが削除されると、そのメールを使った返信が出来なくなるので2の条件を付けています。

# 作成したフロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949242/9db40d09-690a-b92b-e699-81cad56ed500.png)

###### トリガー「繰り返し」
1か月ごとに実行されるように設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949242/b6e6bde6-f11f-9ef6-aa92-5a808e916951.png)


###### 「複数の項目の取得」
フィルタークエリ欄に「status eq '完了'」と記入し、ステータスが完了になった項目のみを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949242/f30a96af-1fcc-8bb7-6e2c-4d66df25139b.png)

###### 「条件」
* getPastTime(30,'day')よりも、リストの更新日時が前であるか
* 複数の項目の取得コンテンツの「添付ファイルあり」がtrueであるか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949242/f29eaa66-d15b-adc0-b47b-af75092c69bc.png)

###### 「添付ファイルの取得」
上記条件が満たされた項目の、添付ファイルを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949242/5a105b59-334d-12be-d8a1-d4ef977c8b3d.png)

###### 「添付ファイルの削除」
取得したファイルを削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949242/4d93396f-2810-d99d-5fd3-29daaa7b7ffe.png)
マルチ AZ な RDS における監査ログの対応状況について

こんにちは。インサイトテクノロジーの松尾です！

本投稿ではマルチ AZ な RDS ( MySQL / MariaDB / PostgreSQL / Aurora ) における監査ログの対応状況について紹介します！

## はじめに

Amazon RDS における監査ログの取得については大きく分けてデータベースアクティビティストリーム ( DAS, Database Activity Streams ) と DB の標準の機能によるものに分けられます。また DB の標準機能についても、マルチ AZ の構成方式により使用可否が制限を受けることが確認できたので、まとめて記載することにしました。

※2023/07/19時点で調べた内容です。

## RDS の マルチ AZ 構成とは

非常にざっくりまとめると以下となります。

* シングル構成
* マルチ AZ DB インスタンス
  * 1 つのスタンバイを備えたマルチ AZ
  * スタンバイ DB にはアクセスできない (Active-Standby構成)
* マルチ AZ DB クラスター
  * 2 つの読み取り可能なスタンバイを備えたマルチ AZ
  * 合計 3 インスタンス
* リードレプリカ
  * 読み取り頻度の高いデータベースのワークロードのスケールアウト
  * ※正確にはマルチ AZ 構成の一部ではないかもしれません。。。

## マルチ AZ 構成と監査ログ対応状況

以下にまとめます。

|RDS| Cluster |  Audit log | DAS | 備考 |
|---|---|:-:|:-:|---|
|RDS for MySQL| Single  | 〇 | - |   |
|RDS for MySQL| マルチ AZ DB インスタンス  | 〇 | - |   |
|RDS for MySQL| マルチ AZ DB クラスター  | × | - | マルチ AZ DB クラスター構成ではオプショングループがサポートされていない |
|RDS for MySQL| リードレプリカ  | 〇 | - | オプショングループはソースのものが引き継がれる |
|RDS for MariaDB | Single | 〇 | - |   |
|RDS for MariaDB | マルチ AZ DB インスタンス | 〇 | - |   |
|RDS for MariaDB | マルチ AZ DB クラスター | - | - | RDS for MariaDB ではマルチ AZ DB クラスター構成がサポートされていない |
|RDS for MariaDB | リードレプリカ | 〇 | - | オプショングループはソースのものが引き継がれる |
|RDS for PostgreSQL| Single | 〇 | - |   |
|RDS for PostgreSQL| マルチ AZ DB インスタンス | 〇 | - |   |
|RDS for PostgreSQL| マルチ AZ DB クラスター | 〇 | - |   |
|RDS for PostgreSQL| リードレプリカ | 〇 | - |   |
|Aurora MySQL| | 〇 | 〇 | Aurora Serverless v2はDAS不可 |
|Aurora PostgreSQL| | 〇 | 〇 | Aurora Serverless v2はDAS不可 |

上記のように、マルチ AZ DB クラスター構成においては、MySQL と PostgreSQL とで対応状況が異なる結果となりました。DAS は MySQL / PostgreSQL については Aurora のみで使用可能な機能です。

Aurora でもインスタンスが一つの場合はシングル、レプリカがある場合はマルチ AZ と呼ぶケースもあるようですが、シングルでもクラスタとしての動作が基本なので分けていません。

## 参考資料

* [Amazon RDS マルチ AZ](https://aws.amazon.com/jp/rds/features/multi-az/)
* [マルチ AZ DB クラスターの DB クラスターパラメータグループを使用する](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_WorkingWithDBClusterParamGroups.html)
* [データベースアクティビティストリームを使用した Amazon Aurora のモニタリング](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/DBActivityStreams.html)
* [Aurora Serverless v2 の要件](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html#aurora-serverless-v2.limitations)
* [Amazon RDS リードレプリカ](https://aws.amazon.com/jp/rds/features/read-replicas/)

## おわりに

マルチ AZ な RDS における監査ログの対応状況について紹介しました。
きっかけとして、RDS for MySQL のマルチ AZ DB クラスターにおいてオプショングループがサポートされておらず、監査ログを取得できないことが判明したことがありました。本番利用においてはマルチ AZ で可用性を高めたりスケーラビリティを高めたりなどを検討されるかと思いますが、使用できない機能もあったりするので注意が必要ですね。
Dark ReaderでPDFをダークテーマにする

Dark Readerは任意のWebサイトをダークテーマで表示できるChrome拡張機能ですが、デフォルトではローカルのPDFファイルをダークテーマで見ることはできません。

![chrome://extensions/?id=eimadpbcbfnmbkopoojfekhnkhdbieeh](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1790252/c1b14c7c-756b-4363-dce6-ccc740609071.png)

> [拡張機能を管理](chrome://extensions) > Dark Reader [詳細](chrome://extensions/?id=eimadpbcbfnmbkopoojfekhnkhdbieeh) > 「ファイルの URL へのアクセスを許可する」

をONにすれば、ローカルのPDFファイルもダークテーマで見ることができます。

https://chrome.google.com/webstore/detail/dark-reader/eimadpbcbfnmbkopoojfekhnkhdbieeh?hl=ja
Githubでファイルをサブディレクトリへカンタン移動(GUI 小ネタ）

# GUI上で既存のサブディレクトリに移動する

## 公式ページはあるのですが・・・
https://docs.github.com/ja/repositories/working-with-files/managing-files/moving-a-file-to-a-new-location

:::note info
非公式社内手順書
- 操作に不慣れなユーザーがターゲット
- 慣れている方は公式や、CLI等々で対応ください。
:::

**うーん、わからん！**

## 手順：公式ページを元に移動したいファイルのエディット画面を開く

1. ファイルをクリックし、鉛筆アイコンで編集画面にする
1. ファイルの移動だけの場合、移動先のサブディレクトリ/移動したいファイル名で保存します。
**たったこれだけ**


![Screenshot from 2023-07-19 09-58-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/2975c4c8-f204-825d-519c-2942564069e8.png)

:::note info
補足：すでにサブディレクトリ作成済みの場合でファイルはルートにある場合
- 入力欄に　”サブディレクトリ名”/”移動したいファイル名”　
:::

**サブディレクトリごと作る場合はエディタを開いてコードを入力して上記の様な保存先にすればOK**

♯ 移動後のサンプル

![Screenshot from 2023-07-19 09-58-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/23b0342d-3fb8-7c95-d12b-d7c12d33c44b.png)

- 以上で移動できました。
関連リスト:related list

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)



+ [How do I have a related list filter based on the opportunity you are looking at?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000077iiKqSAI)

:::note
I've done this before by using the Related List Filters feature on my lightning record page for records that have a direct relationship.

Within your cases tab on your lightning record page, drop the Related List - Single component to your page and select 'Use This Opportunity' for the Parent Record and set the 'Related List' to Cases. You can also give your list a label, set the type, number of records to display, fields you want to appear, and sort order. Lastly, you can use the 'Related List Filters' to create those filter option you want to only show specific cases. This should filter the list of records that appear to achieve your use case.

以前、直接的な関係があるレコードに対して Lightning レコード ページの関連リスト フィルタ機能を使用して、これを実行しました。

ライトニング レコード ページの [ケース] タブ内で、[関連リスト - 単一] コンポーネントをページにドロップし、親レコードとして [この商談を使用] を選択し、[関連リスト] をケースに設定します。リストにラベルを付けたり、タイプ、表示するレコード数、表示するフィールド、並べ替え順序を設定したりすることもできます。最後に、「関連リスト フィルター」を使用して、特定のケースのみを表示するフィルター オプションを作成できます。これにより、ユースケースを達成できると思われるレコードのリストがフィルタリングされます。
:::

# ボタンを追加する

+ [Can you action buttons to related list](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007UpMO7)

:::note
Please check this article.

Set Up a Mass Quick Action for Related Lists
https://help.salesforce.com/s/articleView?id=sf.mass_quick_actions_related_lists.htm&type=5

No Action button in the Related List in Lightning Experience
https://help.salesforce.com/s/articleView?id=000390850&type=1
:::

+ [最新リリースの Winter '24 では、関連リストの一括クイック アクションが利用できるようになったとのことです。しかし、動的関連リスト - シングルを更新しようとすると、「レコードの作成」「レコードの更新」アクションがポップアップしません](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007WegNT)

:::note
as per the article below.. you have to create object specific quick action for them appear in Mas quick actions related list 

https://help.salesforce.com/s/articleView?id=sf.mass_quick_actions_related_lists.htm&type=5

以下の記事によるとマスクイックアクション関連リストに表示されるオブジェクト固有のクイックアクションを作成する必要があります
:::


# エラー

+ [ファイル関連リストが連絡先レコード ページに表示されない問題を解決するにはどうすればよいですか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007YwDJXSA3)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/2f20a487-b679-2f98-b480-647618a0a141.png)

:::note
Did you add it under the standard layout? Standard Single Related Lists require the related list to be on the standard layout. 

Please note that it goes based off of the layout that lightning app builder is previewing with.

標準レイアウトの下に追加しましたか？標準の単一関連リストでは、関連リストが標準レイアウト上にある必要があります。 

これは、Lightning アプリケーションビルダーがプレビューしているレイアウトに基づいていることに注意してください。
:::
購入済みの不要な電話番号を一括で削除する（Twilio）

# はじめに

みなさん、こんにちは。
KDDIウェブコミュニケーションズ、CPaaSエバンジェリストの高橋です。

Twilioを使って色々とプログラムを作成していると、使っていない電話番号が毎月課金されて無駄が発生します。今回は、そのような不要な電話番号を一括で削除するプログラムを作成したので、そちらのご紹介となります。

このプログラムを使うことで、自分の持っているアカウント（サブアカウントを含む）の中の不要と思われる電話番号を一括で削除することができます。  
削除の条件は、過去数ヶ月（指定ができます。デフォルトは３ヶ月）間に発着信の利用がなかった番号となります。  
米国番号については、メッセージの送信がなかったものを対象とします。

## 前提（動作確認済み）条件

- Node.js バージョン 16.13以上
- npm 8.1.0以上
- git

## セットアップ

```zsh
git clone https://github.com/mobilebiz/release-numbers.git
cd release-numbers
yarn install # or npm install
```

## 環境変数の設定

```zsh
cp .env.example .env
```

`.env`を以下の内容で更新してください。

Key|Value
:--|:--
TWILIO_ACCOUNT_SID|対象とするマスターアカウントのAccountSid
TWILIO_AUTH_TOKEN|同じくAuthToken
SINCE_MONTHS|何ヶ月前から利用されていない番号を検索の対象とするか

## 実行

```zsh
node index.js [delete]
```

`delete`パラメータを付与した場合は、実際に削除が行われます。付与していない場合は、削除はしないで対象となる番号が表示されます。

## 実行例

```sh
*** Proxy(active) ***
call: +19095527889 0件（in:0, out:0）
message: +19095527889 0件
delete: +19095527889
call: +815031964003 0件（in:0, out:0）
delete: +815031964003
call: +815031964002 0件（in:0, out:0）
delete: +815031964002
call: +815031964004 0件（in:0, out:0）
delete: +815031964004
*** TaskRouter(active) ***
*** CallCenterVerification(suspended) ***
Error: Unable to update Status for subaccount, subaccount has been suspended by Twilio.
*** line_developer(active) ***
call: +81503186**** 1件（in:1, out:0）
call: +12059004533 0件（in:0, out:0）
message: +12059004533 0件
delete: +12059004533
```

## 制限事項

サブアカウントが`suspended`になっている場合、一度ステータスを変更してから処理を行いますが、TwilioによってサスペンドされているサブアカウントについてはAPI経由での変更ができないため、スキップするようになっています。

# まとめ

---
### KDDIウェブコミュニケーションズ（KWC）について

https://cloudapi.kddi-web.com
残念ながら2023年5月1日をもって、KWCは10年間に渡るTwilioのリセール事業を終了いたしましたが、引き続きCPaaS市場において、過去の実績や知見をもとによりよいサービスを提供するべく活動を続けております。
また引き続き、Twilioのサポートについても、CPaaS Care（仮）という形で無償にて対応させていただくこととなります。詳しくは上記サイトをご覧ください。

自己紹介|　
:--|:--
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/b51a8b88-abd5-ce5e-195a-de3564ba2ae6.png" height='200' width='150'/>|高橋克己（Katsumi Takahashi） 自称「<font color='red'>□い芸人</font>」<br />グローバル・インターネット・ジャパン株式会社　代表取締役<br />株式会社KDDIウェブコミュニケーションズ　コミュニケーションDX事業部エバンジェリスト<br /><br />2001年より大手通信事業者の法人サービスの教育に携わり、企業における電話のしくみや重要性を研究。2016年よりKWCにジョインし、Twilioを使ったスマートコミュニケーションの普及活動を精力的に行っている。<br />2015 Hall of Doers<br />2019 Twilio Champions
8歳娘「パパ、そんな時はアジャイル学習法がオススメだよ？」

# ある日の我が家

ワイ「う〜〜〜〜〜ん・・・」
ワイ「うんうんうん・・・」
ワイ「うん！」
ワイ「分からん！」

娘（**8歳**）「どうしたの、パパ？」

ワイ「おお、娘ちゃん」
ワイ「あのな・・・」

# 初めて書くタイプのコード

ワイ「実は、個人開発の実装で行き詰まっててな」

娘「ふーん」
娘「どう行き詰まってるの？」

ワイ「ちょっと、今まで書いたことないような処理を書かなあかんくて」
ワイ「どうやって実装していいのかイマイチ分からんくて」
ワイ「ググってみても、あんまり情報も見つからんくて」
ワイ「それで、2時間くらい悩んでたんや」

娘「うんうん」

ワイ「でも、けっきょく実装の方針がぜんぜん思い浮かばへんのや・・・」

娘「そういう時は、まず適当に思いつきで書いてみるといいよ」

ワイ「えっ・・・なんで？」
ワイ「事前に策を練った方がええんちゃう？」

娘「ううん、とりあえず適当に書き始めて、失敗すればいいんだよ」

ワイ「ファッ！？」
ワイ「失敗すればいいって何やねん」
ワイ「アカンやろ」

娘「うーん、でも私の場合はそれで上手く行ったこと、何度もあるよ？」

ワイ「？？？」
ワイ「失敗して上手く行く・・・？どういうこと？」

# 能動的に失敗して、そこから学ぶ

娘「まずね？」
娘「どうにも策が浮かばないときは、適当に書き始めてみるの」
娘「こんな感じで行けるかな〜、くらいの感じで」

ワイ「ほうほう」

娘「それで上手く行けば儲けものなんだけど、まあ上手く行かないわけ」

ワイ「そらぁ、せやろな」

娘「でもね？」
娘「そうすることで───」

> 娘「あ、こっちの方向に行くと、こんな感じで失敗するんだ！」
> 娘「・・・ということは、もしかしたら・・・？」

娘「↑こういう学びがあるんだよ」

ワイ「おお、なるほど」

娘「それで、段々と方向が絞れてくる」

ワイ「あー、それはあるかもな」

娘「だから、方針がイマイチ見えないような時は」
娘「とりあえずやってみて、小さく失敗して、そこから学ぶ」
娘「このサイクルを繰り返して、アジャイルっぽく学習していくのがオススメだよ」

ワイ「なるほど、正解が分からないなら、まずはダメなパターンを経験して」
ワイ「それで**的を絞っていく**感じか」

娘「そうそう」
娘「それにね？」
娘「人ってなんか、ダメなものを見ると、**その逆の良いもの**を想起するのか」
娘「なんか閃くことが多いんだよね」

ワイ「おぉ、なんかちょっと良さそうな気もしてきたわ」
ワイ「ワイもやってみるわ・・・」

# その後

ワイ「うーん、とりあえず何となくコードを書き始めてみたけど」
ワイ「やっぱり、思った通りのものはできんかったわ」
ワイ「でも───」

> ワイ「こんな感じで書くと、ここで、こんな風にダメになるな・・・！」

ワイ「↑こういう学びは確かにあったから、ちょっと**的が絞れてきた**かもしれん」

娘「それに、最悪Gitで元に戻せるから、何度でもやり直せるしね」

ワイ「せやな」
ワイ「取り返しのつかない失敗はしたくないけど」
ワイ「取り返しのつくような失敗なら、むしろ能動的にして行くくらいの気持ちでいいのかもな」

娘「そうだよ」
娘「何度も転びながら、いい感じの歩き方を身につけるんだよ」

ワイ「ええこと言うやん」

娘「それに、この考え方は」
娘「技術記事を書く時にも使えるよ？」

ワイ「そうなん？」

# 技術記事を書くのにも使える

娘「パパはよく───」

> ワイ「この技術について分かりやすく伝えるには、どんなストーリーが最適なんやろか・・・」
> ワイ「なかなか思いつかへん・・・」

娘「こんな風に、何日も思い悩んでるじゃん」

ワイ「せやな」

娘「私も昔はそうだったんだけど」
娘「ある時、とりあえず書き始めてみたの」
娘「方針は定まってないけど、とりあえずね」

ワイ「へー」
ワイ「それで、上手く行ったん？」

娘「ううん、やっぱり、イマイチな記事になったの」
娘「でも、やっぱりそのおかげで───」

> 娘「このストーリーだと、ここで矛盾が出てくるな」
> 娘「・・・じゃあ、こうすればいいんじゃ！？」

娘「↑こんな感じで、別のアイディアが浮かんできたの」

ワイ「そうかぁ」
ワイ「やっぱ、**イマイチな例を具体的に体感する**ことで」
ワイ「**逆に見えてくる道がある**んかもなぁ」

娘「そう感じるよ」
娘「うんうん悩んでたときよりも、実際に早く方針が定まったし」

ワイ「なるほどなぁ・・・」
ワイ「ワイも次の記事でやってみるわ！」

# まとめ

- 最初から正しい方針が見えないときは、適当にやり始めてみるのもいい
    - 上手く行かなかった経験を元に、的が絞れてくる
    - 「これはイマイチだな・・・」を体感することで、その逆の閃きを得る
- 小さく失敗して、そこから学ぶ
    - そのサイクルを繰り返して、アジャイルに学ぶ
- でも、取り返しのつかない失敗はしないようにする

**〜おしまい〜**


# スペシャルサンクス

- [エイマエダカツタロウ/ YUMEMI / MIMIGURI](https://twitter.com/katsutaro)

この記事は、カツタロウさん（同僚）の「アジャイルは学習法だ」という考え方にインスパイアされて書きました。

# 新しい記事もよろしくやで！

- [**ChatGPTは超能力少女の絵を描くか？**](https://qiita.com/Yametaro/items/607e7318c9b9b8ee9e45)

ChatGPTを使って漫画を描いてみた話やで！
IBM i のPTF（パッチ）情報サイト

基本のキですが、IBM iの最新PTFなどはこちらに記載があります。

### 累積PTF
https://www.ibm.com/support/pages/ibm-i-support-recommended-fixes

上記リンクから、下記のようにOSバージョン毎の適用が推奨されるPTFのリストを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/b2298692-0f40-47c4-97c7-c21e8bc47d85.png)

CUME Package とはすべてのIBM i で適用が推奨される基本的なPTFです。
HIPER Group も同様に適用が推奨されるPTFです。
以降、Database, Java, HTTP, Security はそれぞの機能に関連したPTFで必要があれば（何らかの不具合等があれば）適用した方が良い、という運用の企業が多いと思いますが、IBMとしては上記の機能はほぼすべてのシステムでなんらか使われていると思いますので適用推奨です。

※それぞれのPTF番号をクリックすると、PTFの適用手順書にリンクしていますので、適用前に確認してください。特別な適用手順が記載されている場合があります。（以下はその例です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/97491c1e-6c23-4db8-899f-82dd64bb6fbc.png)



### グループPTF
https://www.ibm.com/support/pages/ibm-i-group-ptfs-level


※上記リストへのリンクを含むIBM i 技術情報全般のポータルはこちらです。 https://www.ibm.com/support/pages/ibm-i-%E6%8A%80%E8%A1%93%E6%83%85%E5%A0%B1
【npm】本番依存からtypescript関連のパッケージを排除する ~Docker編~

## 結論
Dockerのマルチステージビルドを利用すると楽に実現できる

## 効果
- イメージサイズの削減
- 環境の分離
  - アプリケーションのビルドと実行がそれぞれ異なる環境で行われる

## 差分
### マルチステージビルド導入前
```package.json
{
  ...
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js",
    "dev": "nodemon"
  },
  ...
  "dependencies": {
    "express": "^4.18.2",
    "typescript": "^5.1.6",
    "@types/express": "^4.17.17"
  },
  "devDependencies": {
    "nodemon": "^3.0.1",
    "ts-node-dev": "^2.0.0"
  }
}
```

```dockerfile:dockerfile.production
FROM node:18.16.1
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
#### トランスパイル
RUN npm run build
#### 成果物の実行
CMD ["npm", "run", "start"]
```

### マルチステージビルド導入後

```package.json
{
  ...
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js",
    "dev": "nodemon"
  },
  ...
  "dependencies": {
    "express": "^4.18.2"
  },
  "devDependencies": {
    "@types/express": "^4.17.17",
    "nodemon": "^3.0.1",
    "ts-node-dev": "^2.0.0",
    "typescript": "^5.1.6"
  }
}
```

```dockerfile:dockerfile.production
## ビルドステージ
FROM node:18.16.1 AS build-stage
WORKDIR /app
COPY package*.json ./
#### このステージではトランスパイルが必要なのでtypescript関連のパッケージは含まれる
RUN npm install
COPY . .
#### トランスパイル
RUN npm run build

## ランタイムステージ
FROM node:18.16.1 AS production-stage
WORKDIR /app
COPY package*.json ./
#### トランスパイル後の成果物だけビルドステージからコピーする
COPY --from=build-stage /app/dist /app/dist
#### トランスパイル不要の状況を作り出せたのでexpressのインストールだけでいい
RUN npm install --production
EXPOSE 3000
#### 成果物の実行
CMD ["npm", "run", "start"]
```

## 参考
- [マルチステージビルドを使う | Docker-docs-ja](https://docs.docker.jp/develop/develop-images/multistage-build.html)
Next.jsでスライダー(スライドショー)を作成するSplideを導入してみた

# はじめに

Next.jsでWebサイトを構築していたところ以下サイトにあるようなバナーを自動でスライドショーのように流してくれるような機能を実装したくなりました

https://www.pokemon-card.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/fb6a8169-f847-c640-fe21-a67029dc6680.png)

調べたところ`JavaScript`せは`Slick`、`React`では`Splide`というのを使うと簡単に実現できるようだったので挑戦したところうまくいかなかったので導入方法をまとめます

# 問題

以下の方法でNext.jsに導入したところうまくつかうことができませんでした

https://splidejs.com/guides/getting-started/

```
$ npm install @splidejs/splide
```


```app.tsx
import React from 'react';
import { Splide, SplideSlide } from '@splidejs/react-splide';

export default () => {
  return (
    <Splide
      options={ {
        rewind: true,
        gap   : '1rem',
      } }
      aria-label="お気に入りの写真"
    >
      <SplideSlide>
        <img src="image1.jpg" alt="Image 1"/>
      </SplideSlide>
      <SplideSlide>
        <img src="image2.jpg" alt="Image 2"/>
      </SplideSlide>
      <SplideSlide>
        <img src="image3.jpg" alt="Image 3"/>
      </SplideSlide>
    </Splide>
  );
}
```

# 導入方法

https://www.npmjs.com/package/splide-nextjs

こちらをいれることによって解決しました

```
$ npm i splide-nextjs --save
```

またこのままでは型ファイルがなくエラーになるので、直下に以下のファイルを作ります

```
$ touch react-splide.d.ts
```

```ts:react-splide.d.ts
declare module "splide-nextjs/react-splide";
```

あとは同じように利用が可能です

```app.tsx
"use client";
import { Splide, SplideSlide } from "splide-nextjs/react-splide";

(省略)

        <Splide
          options={{
            rewind: true,
            width: window.innerWidth / 2,
            perPage: 2,
            type: "loop",
            autoplay: true,
            perMove: 1,
          }}
        >
          <SplideSlide>
            <img src="/bnr1.png" alt="Image 1" className="bnr" />
          </SplideSlide>
          <SplideSlide>
            <img src="/bnr2.jpg" alt="Image 2" className="bnr" />
          </SplideSlide>
          <SplideSlide>
            <img src="/bnr3.jpg" alt="Image 3" className="bnr" />
          </SplideSlide>
          </SplideSlide>
        </Splide>
```

`use client`は必須です

# おわりに

CSSで全部実装しようと思うと絶望していたので、このライブラリが利用できて本当に良かったです
ネットにはNext.jsでの使い方がほぼなかったので簡単にまとめてみました
とにかく便利だなと感じました

# 参考

https://www.pokemon-card.com/

https://splidejs.com/guides/getting-started/

https://www.npmjs.com/package/splide-nextjs