OmniAICreator/Qiita-1.07M huggingface dataset:
[Go] VSCodeでジャンプできなかった時にやったことのメモ

# はじめに
時々、「別のリポジトリであれば定義元や利用先にコードジャンプできるのに、このリポジトリだとなぜかできない。」みたいなことがありました。
Goの拡張やインストール済みだし、最新だし、なぜ？という感じでした。

# 対処したこと
VSCodeが使用するGoバージョンを変えました。

なぜか問題のあるリポジトリでは、スクショのようにtoolchainのものになっていたため、対象バージョンを選択してダウンロードして、それを使うようにしたら、ジャンプできるようになりました！

ちなみに、この画面はVSCodeの右下のGoのバージョンをクリックするとでてきます。

![スクリーンショット_2024-03-19_9_56_21（2）_png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221948/a68983f5-ee2d-72c6-5828-f826fda37b29.png)
【Flutter】envファイルで環境変数を管理する方法

# はじめに

こんにちは！
Flutter開発を始めて2年目となるエンジニアです！

今回は、.envファイルで環境変数やAPIキーを管理する方法をまとめていきます！

# こんな人に読んでほしい

* Flutterでの開発を行っている方
* Flutterでの開発を検討している方
* Flutter初学者の方

## パッケージのインストール

pubspec.yamlに以下のパッケージを記載します。

https://pub.dev/packages/flutter_dotenv

## .envファイルの作成

プロジェクトのルートディレクトリに.envファイルを作成します。
Git管理しない場合は、.gitignoreに記載しておきましょう。

```.gitignore
# flutter_dotenv
*.env
```

## 管理する方法を記載

.envファイルの作成ができたら、管理する方法を記載します。

```.env
VER_NAMR="sample"
API_KEY="sample"
```

## .envファイルの読み込み

.envファイルの情報を読み込むためにpubspec.yamlファイルでの設定とmain()でのロードが必要になります。

### アセットに.envを追加

```pubspec.yaml
flutter:
  uses-material-design: true
  assets:
      - .env //ここを追加
```

### main()でのロード

```dart
Future<void> main() async {
    await dotenv.load(fileName: '.env'); //ここを追加
    runApp(child: const MyApp());
}
```

ここまでの作業で、.envファイルで環境変数を管理する準備が整いました。

それでは、.envに記載した情報を呼び出してみましょう！

## .envの情報呼び出し

```dart
import 'package:flutter_dotenv/flutter_dotenv.dart';

class MyApp extends ConsumerStatefulWidget {

~~~

  Widget build(BuildContext context) {
      print(dotenv.get('VAR_NAME'));
      print(dotenv.get('API_KEY'));
```
海外スタートアップのトレンドを知るためにやってる一つのこと


# はじめに
- 海外スタートアップのトレンドが知りたい
- けど、デスクトップリサーチを膨大にするのは大変
- 情報元を最低限に絞りつつも、トレンドをおさえかつリサーチ作業も楽したい

この記事では、生成AIサービスを使用して、英語コンテンツの理解をサポートする手段を紹介します。


## 1. 情報源を絞る

かの有名な「Ycombinator」が出資しているスタートアップをピックアップします。

[https://www.ycombinator.com/companies?batch=W24&batch=S23&batch=W23&batch=S22&tags=Generative A](https://www.ycombinator.com/companies?batch=W24&batch=S23&batch=W23&batch=S22&tags=Generative%20AI)

カテゴリ分けもされているので、これだけでも「ほう、なるほど」となりますね。


## 2.読む

読む際には、こちらのスタートアップサーベイの観点を使用します。

https://tumada.medium.com/startup-idea-survey-3f4e7a5aa2f7

```
サーベイ観点
- 一言で言うと何?
- 誰がどんな状況 (5W1H) で使う製品?
- この製品で顧客はどんなアウトカムが得られる?
- この製品の Magic Moment はどこ?
- トレードオフはどこ? 何を伸ばして何を諦めてる?
- なぜ今? 今だからできる理由は?
- 市場の大きさは? 10年後最大でどうなっている?
- 一番大きなリスクは? （過去のものならなぜ失敗した?）
- 代替品にはどんなものがある?
```

とはいえ、これらの観点をwebサイトから抽出するのもくたびれます。英語だし。
こちらのGPTsにお願いしましょう。

https://chat.openai.com/g/g-QipFNVM9B-sutatoatupusabei

URLを入力すると、こんな感じで箇条書きにまとめてくれます。バカ便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348593/daecc53b-f0ff-584e-4c4b-4a103e52bf33.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348593/e4ac1bbd-101a-4fa5-8df7-093dd6a02a09.png)


## 3.まとめる・議論する

共有をしたうえで議論を通して、以下のようなメリットをぜひ得てください。

- ログとして残すと未来の自分のためになる
- 他人と一緒にやると知らないことが知れる
- 他人の紹介を通して自分の知らないプロダクトを知る
- 他人の分析や視点を知ってアイデアを深める


## 4.さいごに　
さいごに必要なのは、時間とやる気です。
どれだけAIツールで便利になろうと元資料を読むことは欠かさずに。たくさんのスタートアップアイデアに触れます。

たくさん知ることで、読むスピードや理解力が徐々に上がってくるかと思います。
みんなもAIと一緒にスタートアップをたくさん掘ってね👍 そして、まとめて教えてくれ！！

参考

https://tumada.medium.com/startup-idea-survey-3f4e7a5aa2f7
【JavaScript】console.log()に色をつけることができるらしい

## はじめに 
先輩から教わった、小ネタ的なものですが個人的に面白いと感じたのでその備忘録。

## 本文
親の顔より見てきた`console.log()`です。
とりあえず簡単なサンプルコードを以下に。
```javascript
console.log('コンソールに出力されるよ');
```
![__.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950438/5a09807b-82fc-4883-3b1b-49cc62f956fa.png)

期待通りの結果ですね。
上記の`console.log()`に色付けをしていきます。
```javascript
console.log('%c コンソールに出力されるよ', 'color: red;');
```
![___.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950438/a0baba2e-927e-7944-e9cd-f7147c1582bc.png)

コンソールの文字を赤文字で出力することができましたね。
もちろん他の色に変更することも可能です。


さらに以下のようにすれば、背景色をつけることもできるらしい。

```javascript
console.log('%c コンソールに出力されるよ', 'background-color: #00ff7f; color: red;');
```
![__.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950438/c5445f72-68b6-abe2-7408-6f06e266a781.png)



## まとめ
後から調べてみると、割とたくさんの記事が散見されました。  
まだまだ勉強不足だと思えたので、自分が諸学者の頃にあった小さいことにでも疑問や楽しみを見出すことを改めて大切にしてきたいと思います。
GitHubで自分がプッシュしたブランチを一覧表示する

「GitHub上にある不要なブランチは削除してください」と言われることってありませんか？問答無用でマージ済みのブランチは削除するのも手なんですが、とりあえず「自分が上げたブランチ」を知りたいこともあると思います。

そんなとき GitHub 上で簡単に確認できることに最近気づきました。

## 手順

1. GitHubで調べたいリポジトリのページを開きます
1. 上部にある Branches の部分を押下します
![Monosnap lx-sasabo_class-analyzer - Google Chrome .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2960076/a7003c14-7eca-d824-ffb9-8f501ab62e24.png)
1. Yours のタブを押下すると自分が上げたブランチの一覧が確認できます
![Monosnap Branches · lx-sasabo_class-analyzer - Goo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2960076/4d4f9960-ff8a-9d8b-edc9-b57f2f482ae8.png)

以上です。Git のコマンドで自分がプッシュしたブランチの指定方法が分からなかったので助かりました。

参考ページ
https://docs.github.com/ja/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/viewing-branches-in-your-repository
球体積の計量アプローチの紹介

はじめに

　中学三年生に、微分積分を教えることができるか？考え方を伝えることができるか？というトライアルがきっかけで、試行錯誤した経過を記したいと思います。
　マインクラフトというゲームを御存じでしょうか？世界で一番売れたゲームであると言われているそうですが。そのマインクラフトというゲーム、四角い立方体のユニットになったブロックを壊したり作ったりすることで冒険を進めていくことになっています。そのブロックで、球を表現できないかというところから球について関心を持つようになりました。また機会がありましたらご紹介させていただきたいとは考えておりますが、コンビナートに置いてあるガスの貯蔵庫のような球体の構築物を作ることにも成功しました。[こちら](https://qiita.com/tsukuba3/items/71da70d94fc8e368cdb8)です。
 　本件は、それほど難しい話ではないので、是非読んでいただけたら嬉しく思います。
それでは始めます。

1.積分編
2.微分編

本来、学校教育であれば、微分を教えてから積分のような順番があると思いますが、
積分を先に教えたほうが、視覚的効果とイメージが結び付きやすいのではないかと思い、積分を先に教えることを前提にしています。

1-1. 球の表面積と体積の計量アプローチ

1-1-1円柱積分法

・正方形の面積
半径rの円に外接する正方形を2r*2rで定義する。
r=1とし、正方形の面積は4となる。

・円の面積率
この時、正方形に円の面積が占める割合は、3.14/4=0.785と求めておく。
つまり、任意の長さの正方形に内接する円の面積が78.5%ですということです。

・円柱の体積
この円の面積をベースに高さを加味して、円柱の体積を求め、高さh分だけ足し合わせていったものが半球の体積であると言えないだろうか。

![スクリーンショット 2024-03-17 134757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941038/dac41f95-6783-4868-1e75-b578cabf15cf.png)


S(x+h) = lim h->0 V(x+h)-V(x)/h
V(x) = ∫[0-r] (0.785*(x)^2*(4)※1*(h)*(2)※2)dx=(2*3.14*(r^3)/3)=半球の体積
全休の体積を求めるには、2倍して、((4*3.14*r^3)/3)

※1:4 面積比が4倍になるので、4をかけてあげます。
※1:8 体積比が8倍になるので、更に、2をかけてあげます。
※体積比は、一気に8倍してしまっても、小分けにしてかけてあげても結果はイコールになるので問題ありませんが、相似比対体積比の関係をしっかり理解するため、小分けにして書いてあります。

1-1-2表面積積分法(マトリョーシカ法)

ロシアにマトリョーシカという工芸品があります。
大きな人形の中に、小さな人形が入っていて、またその中に小さな人形が入っている。
そういう構造をしたお人形さんです。

その人形をヒントに、球の体積を求めようというものです。

![OIP.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941038/7aabee67-8eab-8fd5-7def-a8d7e2e9725b.jpeg)

・球の表面積...４πr^2

 高さh半径rの円柱の表面積を考える
(2×π×r×r)[天井と底の面積] + (2π×r×h)[側面積]　が円柱の表面積になる

S(x+h) = lim h->0 V(x+h)-V(x)/h
∫[0-r] ((4×π×x×x) * h )dx = (4×π×r^3)/3

参考リンク
[鈴木貫太郎氏-YouTube](https://youtu.be/l75rFXN9Gls?si=SSc9gxkynvYFc1eP)

おわりに
球の表面積を求める公式の証明を行わずに、4πr^2であることが前提で話が始まっているので、合理的に説明がつく解説を自分の中で整えていなかった。その部分を補足できるように解説を入れられなかったのが残念だった。

今後の課題
立方体に占める球の体積の関係を解き明かしていくことを考えていく。

謝辞
本テーマの参考になったYouTubeの配信をしてくださった鈴木貫太郎氏、文章構成の参考を示していただいた皆様、陰ながら私の活動を応援してくれている両親に感謝申し上げます。今後ともよろしくお願いいたします。
【エラー解決】Claude（生成AI）がWe are unable to serve your request.と出て使えない

# はじめに

Claude（生成AI）を使おうとすると`We are unable to serve your request.`というエラーが出て使えない問題が発生したのですが、解決したため共有です！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/3064e4a9-b447-2ed4-be61-741313faa64d.png)

# 結論
NordVPNというVPNの、**Web保護**機能が原因でした！

# 解決（機能オフ）
NordVPNの脅威対策画面にてオフにすると解決します！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/347d8fa5-5d53-303c-c4ee-1146faa42e9b.png)

Claudeが使えるようになります！🙌🙌

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/07e25439-b4b5-5b38-c03e-3446f5cfd64f.png)

# うまくいかない場合
ブラウザでClaudeのサイトのクッキーを削除してみてください

URL左のサイト設定のアイコン→`Cookieとサイトデータ`をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/ea3a155e-7669-3250-12fa-e44fd10af851.png)

`デバイス上のサイトデータを管理`をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/b88ba5c3-a0b5-6e7e-7656-5f8da1d06882.png)

ゴミ箱アイコン🗑️をクリックにてクッキーを削除します→完了をクリックにてOKです！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/11f4f33f-5935-b659-08aa-99ac23025176.png)



# おわりに
お読みいただきありがとうございました！
どなたかの参考になれば嬉しいです😁
生成AIでエンジニアの仕事が無くなっていくのか？

今日、生成AIでエンジニアの仕事が無くなっていく事に関してどう思いますか？
と聞かれた。

意味不明。

バリカンが発明されて美容師の仕事がなくなりましたか？そんな事はありません。
美容師の仕事は、刈り上げを作るだけではありません。

エンジニアの仕事は、生成AIができる事だけではありません。コードを書くだけではありません。

パソコンの出てきて今ではほとんどのビジネスマンが使ってます。
パソコンにより失業がなくなったり、失業が増えたという話は聞いた事がありません。

生成AIが出来て効率化された事により、エンジニアの需要はシュリンクするのか、更に増していくと思うのか？

ほとんどの人が思うのと同じ様に、生成AIによりエンジニアの仕事の一度が効率化が図れる事により、エンジニアの仕事は更に広がってクリエイティブになり、世の中のDXが更に進み、今以上にエンジニアの需要はドンドン増えていきそうと思います。

生成AIはエンジニアの便利なツール、味方です。
DBでJson型のデータを扱い、EntityFrameworkで利用する

よく実装を忘れるのでメモ

DBで、複合的なデータの場合、最近はJSONを放り込んで管理しています。C#言語で、取得時にJSONをデコード、書き込み時にJSONをエンコードするための設定。マイグレが嫌いなので、手書きでかくことが多い。でも、よく忘れる。

例外が発生する（JSONオブジェクトが違う）場合の対処はどうすれ良いかは、まだ調査中。定義が違う場合とかね。
あと、受け取りたいパラメータが動的型になる場合はどうすればいいのかな。
WPのwp_metaみたいな構造をJSON化したいんだよね...（これは、また別の機会で）

## 前準備

JSONをデコード・エンコードするためのヘルパークラスを作成

JsonSerializeOptions の形式はお好きに改変する

```C#
public static class JsonConveter
{
	/// <summary>
	/// 日本語表記のままにして圧縮する
	/// </summary>
	public static JsonSerializerOptions jsonOptions = new JsonSerializerOptions
	{
        // Unicodeをそのままにする（エンコードすると文字数増えるので）
		Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
        // スペースは余分な文字数が増えるので入れない
		WriteIndented = false,
	};


	/// <summary>
	/// オブジェクトをJSON文字列に変換する
	/// </summary>
	/// <typeparam name="T"></typeparam>
	/// <param name="obj"></param>
	/// <returns></returns>
	public static string? ToStringJsonConvert<T>(this T? obj) =>
		obj != null ? JsonSerializer.Serialize<T>(obj, jsonOptions) : null;


	/// <summary>
	/// 文字列を指定のオブジェクトに変換
	/// </summary>
	/// <typeparam name="T"></typeparam>
	/// <param name="json"></param>
	/// <returns></returns>
	public static T? ToObjectJsonConvert<T>(this string? json) =>
		json != null ? JsonSerializer.Deserialize<T>(json) : default(T);
}
```

## DbContextで定義

OnMOdelCreating オーバーライドメソッド内で、変換したいフィールドで定義する
利用するメソッドは、`Entity<>()` メソッド、`Property()` メソッド, `HasConversion()` メソッドです

`Entity<>()` メソッドで、対象のテーブルを指定します
`Property()` メソッドで、対象のフィールドを指定します
`HasConversion()` メソッドで、変換する形式を指定します

```c#
	protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder
            .Entity<Test>()
            .Property(g => g.Prices)
            .HasConversion(
                c => c.ToStringJsonConvert<PricesJson>(),
                c => c.ToObjectJsonConvert<PricesJson>());
    }
```

`HasConversion()` メソッドでは、

* 一つ目のアクション引数に、オブジェクトをJSON文字列に戻すためのコード
* 二つ目のアクション引数に、JSON文字列をオブジェクト変換するコード

を指定します。

これで、簡単にJSONをDBへ書き込み、読み込むことが出来ます。`HasConversion` メソッドの処理を変えれば、他の方式でも可能ですね。

```c#
var item = db.Test.Select().First()
var price = item.PricesJson.Price;
var sale = item.PricesJson.SalePrice;

var add = new Test {
    Name = "hogehoge",
    Prices = new PricesJson {
        Price = 10,
        SalePrice = 5
    }
}

db.Test.Add(add);
db.SaveChange();
```
Windows11：MSTeams-x64.msix を起動した際の「アプリパッケージを開くことはできません」の解決法

# 要旨

1. 「Microsoft store」を起動
1. 左側のタブにある「ライブラリ」をクリック
1. 画面上部の「更新プログラムを取得する」をクリック
1. 更新後に再起動
1. 「MSTeams-x64.msix」を改めて起動するとインストールが始まる
draw.ioを使ってAWSの構成図を作成するコツ

案件でAWSの構成図を作成する機会があったので備忘兼ねて投稿します。
※約5分で読めます

## 1. グループの内側から作成していく

AWSの基本的なグループ構成はこんな感じ

![スクリーンショット 2024-03-18 23.14.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744730/9cf3900a-b4c4-f5a3-ca5b-a76d0973f0f4.png)

添付の場合、個人的には
Public subnet or Private subnet > Availability Zone > VPC > Region > AWS Cloudの順番で作成することをオススメします。理由は内側のグループが肥大すると外側のグループの手直しが発生するためです。 
今回作成した時に外側から作成してしまい、めっちゃ時間がかかってしまいました...


## 2. グループの左上を掴む

日本語が下手ですみません。
なぜ左上を掴まないといけないか？試しにPublic subnetをクリックしてドラッグをすると、添付の様になりました。

![スクリーンショット 2024-03-18 23.23.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744730/040011e8-af7f-5ce3-df97-be410e7c460e.png)

クリックをするとグループの外から選択されてしまうため、選択したグループ内に存在するグループも一緒に動いてしまうのです。
複数選択をする時も左上をクリックしないと複数選択が解除されます。

そのため、グループの左上、つまり添付の赤枠をクリックしてドラッグすることで対象のグループのみ動かすことができますし、複数選択も対応できる様になります。

![スクリーンショット 2024-03-18 23.24.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744730/26763258-f67b-bada-506d-9ebb08d9e8ad.png)


## 3. 極力ロックをしない

グループやアイコンをロックすることで一気に操作できるメリットがあります。
一方でデメリットとしては、修正が必要な時にグループ内全てのものをクリックしてロックを解除しないと修正ができないです。
確認方法としては、全てのグループを選択してみます。

- 青枠が「ロックされていないもの」
- 赤枠が「ロックされているもの」

になります。

![スクリーンショット 2024-03-18 23.34.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744730/dcfaab51-edc7-463f-438b-700ab9e1ebe4.png)


## 4. アイコンや文字の大きさを揃える

これは見栄えの問題ですね。
僕はアイコンの大きさを55ptに統一しました。
大きさを統一した方が各グループにどう収めていくかも判断しやすくなります。

![スクリーンショット 2024-03-19 6.35.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744730/e223cea3-c6f2-87fc-79f7-df44cc0e2ceb.png)


## 5. 各グループに格納できるアイコンを把握する

僕も作成して気づきました。
主要サービス（めちゃざっくり）で見るとこんな感じです。

![スクリーンショット 2024-03-19 6.47.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744730/e08ddf1e-12f6-bd5e-e42b-48e4c6b33588.png)

どのグループにどのアイコンが配置できるのか？を理解しておくだけで、スムーズに構成図を作成することができます。

[AWS アーキテクチャアイコン](https://aws.amazon.com/jp/architecture/icons/) > ツールキットからpptをダウンロードし、どんなアイコンがあるのか？どのサービスにどのアイコンが使われているのかもチェックすると良いです。


## 6. 構成図のサンプルを見まくる

コツは掴めたとしても、結局どう書けば良いのか？に悩むと思います。
そんな時はAWSが掲載している[目的別 クラウド構成と概算料金例](https://aws.amazon.com/jp/cdp/) を見るとイメージしやすいです。掲載されているパターンが多いため、作成したい構成図がそのまま掲載されている可能性もあるためオススメです。


---------------------------------------

ざっくりですが上記意識することで、draw.io初心者の僕でも何とかシステム構成図を作成することができました。
一方で、Tips的な記事がなかなか見つからなかったため今回この記事を書こうと思いました。
この記事を通じて何かお役に立てれば嬉しいです。

また「こんな書き方・考え方もあるよ！」「この考え方ちょっと違いますよ！」があれば、ぜひコメントをください。

最後までご覧いただきありがとうございました！


## 参考書籍

[AWS設計スキルアップガイド](https://www.amazon.co.jp/AWS%E8%A8%AD%E8%A8%88%E3%82%B9%E3%82%AD%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97%E3%82%AC%E3%82%A4%E3%83%89%E2%94%80%E2%94%80%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E9%81%B8%E5%AE%9A%E3%81%8B%E3%82%89%E3%80%81%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%A7%8B%E6%88%90%E3%80%81%E9%81%8B%E7%94%A8%E3%83%BB%E7%A7%BB%E8%A1%8C%E3%81%AE%E8%A8%AD%E8%A8%88%E3%81%BE%E3%81%A7-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BEBFT/dp/429713649X)
2024/3/19主にITとかセキュリティの記事

複数のChatGPTプラグインに脆弱性、会話が窃取される恐れ(3/17)
https://news.mynavi.jp/techplus/article/20240317-2907277/

史上最大規模の銀行強盗がやって来る──パーミッションドか、パーミッションレスか(3/17)
https://www.coindeskjapan.com/223969/

FBIのハッキングテクがヤバすぎる(3/17)
https://www.gizmodo.jp/2024/03/fbi-tor-ip-address-muhammed-momtaz-al-azhari-isis-1.html

グーグルがOSの脆弱性を見つける｢バグハンター｣たちに与えた賞金はいくら？(3/17)
https://www.gizmodo.jp/2024/03/google-bug-bounties-2023.html

ロシアの機械工学系企業を狙った標的型攻撃に関する調査レポート(3/17)
https://japan.cnet.com/release/30953707/?ref=rss

2月はイオンカード偽るフィッシング急増、Amazonと三井住友カードも続く(3/17)
https://news.mynavi.jp/techplus/article/20240317-2908466/

アジアで広がる「iPhoneの危険な設定」にアップルが警告、今すぐ確認を(3/17)
https://forbesjapan.com/articles/detail/69766

高官が北京滞在時、1時間に135回もハッキング攻撃を受けたベルギー　強セキュリティーデバイスを配布(3/16)
https://www.epochtimes.jp/2024/03/211069.html

（社説）あまりにお粗末なNTT西(3/17)
https://www.nikkei.com/article/DGKKZO79312780W4A310C2EA1000/

「原爆の父」の失敗、AI時代の教訓に　国際社会の結束を
サイエンス Next Views　編集委員　青木慎一(3/17)
https://www.nikkei.com/article/DGXZQOCD11AM20R10C24A3000000/
https://www.nikkei.com/article/DGKKZO79312170W4A310C2TYC000/

風化する北朝鮮制裁　国連決議6年超なし
ミサイル発射は頻繁に(3/17)
https://www.nikkei.com/article/DGKKZO79316520W4A310C2MM8000/

マクドナルド、ほぼ全店で営業再開＝システム障害で一時閉店(3/16)
https://www.risktaisaku.com/articles/-/89676

ランサム感染で発注システム停止　決算発表や新店舗開店が延期に
イズミ(3/18)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600011/031400151/

転職サイトの認証基盤をクラウドへ　100万人超をログアウトせず移行
ビズリーチ(3/18)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600004/031300152/

サイバー攻撃の脅威特定にかかる時間を半減、生成AIは防御側も強くする(3/18)
https://xtech.nikkei.com/atcl/nxt/column/18/02778/031100002/

取引先の脆弱性も可視化する中外製薬、ランサム被害の訓練には社長も参加(3/18)
https://xtech.nikkei.com/atcl/nxt/column/18/02772/030700005/

見た目で不正なURLかは判別不能、QRコードを使ったフィッシング「クイッシング」(3/18)
https://xtech.nikkei.com/atcl/nxt/column/18/01679/020700152/

通信各社襲った想定外　能登半島地震の教訓(3/18)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600014/031300172/

デジタルは改善のための道具　変化し続ける企業文化をつくる
市井 明俊 氏　日本精工 社長(3/18)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600001/031300154/

コロナ禍で事業を再構築　基幹システム変革で支える
黒田 恭司 氏　JTB 常務執行役員 CIO CISO(3/18)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600003/031300078/
AtCoder Beginner Contest 345 振り返り

前回のAtCoderの振り返りです。
## 今回の結果

A,B 2完でした。

![スクリーンショット 2024-03-19 1.45.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167729/d29548f9-5146-b4ac-3ca5-85c65b350454.png)
![スクリーンショット 2024-03-19 1.46.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167729/85f2c8f5-aa4b-5658-4b91-e2132a004dc6.png)

## 各問題の振り返り

### A - Leftrightarrow

先頭と末尾をそれぞれ判定し、残りは`all`で判定しました。

- [問題](https://atcoder.jp/contests/abc345/tasks/abc345_a)
- [自分の回答](https://atcoder.jp/contests/abc344/submissions/51045570)

```haskell
main :: IO ()
main = do
  s <- getLine

  putStrLn if head s == '<' && last s == '>' && all (== '=') ((tail . init) s) then "Yes" else "No"

readInputInts :: IO [Int]
readInputInts = L.unfoldr (BC.readInt . BC.dropWhile C.isSpace) <$> BC.getLine
```

### B - Integer Division Returns

- [問題](https://atcoder.jp/contests/abc345/tasks/abc345_b)
- [自分の回答](https://atcoder.jp/contests/abc345/submissions/51298548)

そのまま解きました。値が0以上の時は+1しますが、そうでないときはそのままです。

```haskell
main :: IO ()
main = do
  n <- readLn @Int

  let m = n `mod` 10
  let d = n `div` 10

  print $ if m > 0 then d + 1 else d
```

### C - One Time Swap

- [問題](https://atcoder.jp/contests/abc345/tasks/abc345_c)
- [自分の回答(upsolved)](https://atcoder.jp/contests/abc345/submissions/51353867)

WAになった解答は[こちら](https://atcoder.jp/contests/abc345/submissions/51341998)です。

組み合わせ問題で、`全体から2つ取って並び替える組み合わせ` - `重複した文字列から2つ取って並び替える組み合わせ` で解けます。

ただ、重複した文字列内で入れ替える場合があるので、重複した文字列が存在する場合は結果に+1する必要があります。

```haskell
main :: IO ()
main = do
  s <- getLine

  let n = length s
  let r = length (LU.nubOrd s)

  let res = nc2 n - sum [nc2 (length xs) | xs <- L.group $ L.sort s, length xs >= 2]

  print $ if n == r then res else res + 1

nc2 :: Int -> Int
nc2 n = n * (n - 1) `div` 2
```

## 全体を振り返って

またぼちぼちがんばります！
基礎用語まとめ（２）


Webサービスを開発する上で絶対に知らないといけない基礎用語の意味を自分なりにまとめています。

- ドメイン名
- IPアドレス
- DNSサーバー
- ポート番号

# ドメイン名

世界中には、星の数ほどのWebサイトがあります。日本の中だけでもサーバーの数は276万台あると言われています。

私達が、携帯電話やPCでWebサイトにアクセスしている時、手元にある携帯電話やPCはどのようにして目的のWebサイトにアクセスしているのでしょうか？

普段、インターネットを頻繁に使っている私達は上の問いに対して、`インターネットアドレス`があるからそれを頼りにしてサーバーにアクセスしているのでは？と考える人も多いと思います。私もかつてはそのように考えていました。

大枠は正解ですが、エンジニアとして深堀りをしていきたいと思います。

私達が`インターネットアドレス`と普段呼んでいるものは以下になりますよね？
```
https://www.google.com/
```

この中でも以下の箇所は`ドメイン名`と呼ばれていて、各サーバーの住所の役割を果たしています。
```
google.com
```

ドメイン名：インターネット上でWebサイトを特定するための識別子。インターネット上での住所の役割を果たしている。


# IPアドレス

しかし、ドメイン名はあくまで、「人間が理解しやすいために」作られたもので、コンピューター同士は`数字の羅列（IPアドレス）`でやりとりをします。

IPアドレス：インターネットに接続されている機器（サーバーや携帯電話、PC）すべてに割り振られている番号。重複はなく、一つ一つが世界唯一の番号。

つまり、IPアドレスが存在することで、私達の手元にあるPCや携帯電話は
私達の見たい情報（htmlファイル）が保存されているサーバーを特定することができます。

# DNSサーバー

私達があるWebサイトにアクセスするとき、PCや携帯電話は以下の動作をして世界中のサーバーにアクセスして情報のやりとりをしています。

![スクリーンショット 0006-03-19 0.57.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722496/05e40d69-0e71-279b-d0e0-106834c16f29.png)

（１）クライアントサイドは、`DNSサーバー`にドメイン名を教えて、`IPアドレス`を問い合わせします。

（２）DNSサーバーは対応するIPアドレスを返します。

（３）クライアントサイドは、IPアドレスを頼りに対象サーバーにアクセスします。

（４）サーバーはクライアントサイドにhtmlファイルを返します。（=クライアント側でWebサイトが表示されます。） 


`DNSサーバー`は、IPアドレス（コンピューター同士でやりとりする番号）とドメイン名（人間がわかりやすいように記述されたもの）の`紐づけ表`を持っているサーバーになります。クライアントはまず、このDNSサーバーに問い合わせをしてIPアドレスを教えてもらってから、対象のサーバーにアクセスをします。



# ポート番号


しかし、厳密には上記だけでは、私達がアクセスしたいWebサービスにクライアントはアクセスすることができないのです。

その理由は、`アクセスされたサーバー側が、今のままではクライアントサイドが何をしたいのか理解できないから`なのです。

一体何が起こっているのでしょうか。

復習になりますが、クライアントとサーバーは様々なプロトコルを使ってお互いやりとりをします。今回は通信なのでHTTPというプロトコルを使ってやりとりをします。

この「HTTP」というプロトコルを理解してくれる「窓口」（`ポート番号`）にアクセスをしないとサーバー側は何も動いてくれないのです。

人間社会の例で例えるのであれば
IPアドレスがマンション名。ポート番号は部屋番号になります。

IPアドレスでマンション名まではつきとめられて、入口まで到着することはできます。
でも部屋番号がわからないと最終的に目的のhtmlが存在するアプリケーションにたどり着けません。


ポート番号は各サーバーによって自由に決めることができます。（HTTPだからと言って80番である必要はありません）

しかし、代表的なプロトコルが使用するポートについてはあらかじめ取り決めがされていて「ウェルノウンポート（Well-known ports）」として知られています。

| ポート番号 | プロトコル |
|:----|:----|
| 80| HTTP|
| 110| POP3|
| 25| SMTP|
| 22| SSH|

今回の場合はHTTPのプロトコルを使用しているので、`80番ポート`にアクセスをして最終的に自分が閲覧したいhtmlのレスポンスをサーバーからもらうことができます。
Ubuntu20.04aarch64(arm64)でi3wmのgapsを使う方法


# 概要
aptでインストールされるi3wmではなくバージョンの上がったgapsの対応しているi3wmに変更する．

# 経緯
いつも自宅のデスクトップ（win）に仮想環境でArchを入れて使っているのだが，大学用に持っていくMacBookでもLinuxを使いたいということでセットアップが簡単なUbuntuserverを仮想環境のUTMで使用していた．しかし，自宅のデスクトップにあるウィンドウマネージャのi3のgaps(余白)がないことでずっと気になっていた．

探したところamd64についての記事しか見当たらなかったため，未熟者ではあるがレポートを残そうと思う．

# 動作環境
 MacBookPro(M1)
 Ubuntu-server-arm64(aarch64)版 22.04.4 LTS
 UTM
 
# 作業
まず，現在のi3wmのバージョン確認をする
```
$ i3 --version
＞i3 version 4.14.1~~~
```
gapsを使う場合はバージョンが4.22以上必要である．

ここでi3を一旦さよならする
（一応念のためi3wmからLogoutしたのちGUIモードを抜ける）

tty2に移動して
```
$ sudo apt remove i3
```

Ubuntuリポジトリ？からv4.22.2のi3-wmを入手してインストールする
```
$ cd ~/Downloads
$ curl -LO　http://ports.ubuntu.com/pool/universe/i/i3-wm/i3-wm_4.22-2_arm64.deb
$ dpkg -i i3-wm_4.22-2_arm64.deb
```
一応念のため再起動をしておく
```
$ reboot
```
起動後LightDMなどの画面からいつも通りi3wmを選択してログインし，再びi3wmのバージョン確認をする
```
$ i3 --version
＞i3 version 4.22~~~
```
無事に4.22に変更することができた．

今まで設定できなかったgapsを~/.config/i3/configに書き込んで完成！

![スクリーンショット 2024-03-19 1.11.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3749274/04fb223f-c70f-dcf6-fc61-07934e7732e0.png)


皆さんも良いLinuxライフを！
カレー作りを例にしたレンダリング説明（フロントエンド）

フロントエンド開発で耳にするレンダリングについて書いていきます。

レンダリングとは？
レンダリングと言われるとピンとこないかもしれませんが、いつもインターネットで色々なサイトを観覧しているかと思います。
みなさんがいつも目にしているその画面上に映し出されているものが、レンダリングされた結果なのです。
ですので、画面に映し出されるまでにコンピュータが頑張ってやってくれている処理がレンダリングです。

結論：人が目で見て視覚的にわかる状態にするためにコンピュータが頑張って行う処理
 
ざっくりとした理解としては下記で問題ありません。
"レンダリング　＝　いつも目にしているWebページができるまでの処理（過程）"

ではどのようにして、いつもみている画面のようになっているのでしょうか。
みなさんが見ている画面上のものは、サーバに格納されているデータから構成されています。
HTMLやCSSと耳にしたことがるかと思いますが、HTMLやCSSといったデータをサーバから受け取りコンピュータが頑張って処理をした結果が、みなさんがいつも目にしている画面になっているのです。

【レンダリングの流れ（メインスレッド：Main thread）】
画面に表示されるまでに裏では下記の処理が行われています。
Parse > Style > Layout > Paint > Composite (+ JavaScript処理)

![スクリーンショット 2024-03-19 1.06.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931766/8ed4fbe4-cd48-bb8b-7922-12ef6b048f7e.png)

スマホやパソコンでWebサイトを観覧している時に動作がカクカクしていたり、画像表示がすぐにされない、最悪の場合、スクロールした先が真っ白になっているという状況を一度は見たことがあるかと思います。
これは、上記に記載した処理に時間がかかる事で起きている現象です。

では具体的な処理の中身について見ていきましょう。

【Parse】

![スクリーンショット 2024-03-19 1.10.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931766/c92e0059-3fad-49d7-ed27-1921e3a9555b.png)



Parseの処理では構文解析がされ、下記の2つの構築が行われます。
DOM Tree構築　　 --HTMLの構文解析
CSSOM Tree構築　--CSSの構文解析

構文解析や構築と言われるとパッとしないので、言い換えると画面に表示するために必用なもの準備ができたという認識で良いかと思います。
料理を例に、カレーを作る工程に当てはめると、カレーに必用な材料が揃ったぐらいの段階です。

【Style】

![スクリーンショット 2024-03-19 1.14.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931766/c5fecda4-8819-9d87-fd0a-53951f9440fb.png)




Parseの処理が行われた後にStyleという処理が行われます。
Styleという処理は、"DOM Tree" と "CSSOM Tre"を紐づける処理です。
カレーの工程に当てはめると、各材料を同じ鍋に入れた段階です。
肉、野菜、ルーがバラバラのままではカレーは完成しませんよね？
カレーを完成させるには一緒の鍋に入れて調理しなければなりません。
画面に映し出す為にStyleという処理でバラバラの"DOM Tree" と "CSSOM Tre"を紐づけをしているのです。

// 後日"Layout > Paint > Composite"についても書いていきます。
XAMPPでMySQLが起動できなかったときのメモ

## はじめに

「気づけばプロ並みPHP」という書籍で学習中にXAMPPで環境を用意する必要があり、その際に書籍通りに操作したところapacheなどは起動することができたのですが、MySQLは起動しなかったのでその原因と解決についてまとめました。


【環境】
MacOS
xampp 7.2.3

## 結論
**原因**
もともと入れていたMySQLがずっと動いていて、
かつ自動で再起動していたため、
xamppで使うport番号と被ってしまっていたことが原因でした。

**解決策** 
**ポート番号が使用されているかを確認**
``$ sudo lsof -i:3306``
**利用されていた場合そのプロセスをkillする**
``$ sudo kill -9 <PID>``

**自動で再起動になっている場合はそれも止める**
``$ brew services stop mysql``


## 概要
冒頭の説明のままですが、MySQLを選択しstartをクリックしても緑色のランプにならなかったため、

![スクリーンショット 2024-03-18 23.38.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534109/47b0e837-bcc5-2b02-2147-6399a2799113.png)
（画像は解決後のスクショのため緑になってしまっています）

configureからエラーログを確認しようとしたところ、特に何も表示されていなかったため、さらにネットで調べ以下のコマンドでエラーログを確認できました。

root/Applications/XAMPP/にて
 ``$ sudo tail xamppfiles/var/mysql/<自身のPC名>.err``

**実際のログ**
```
2024-03-18 16:47:04 0 [ERROR] Can't start server: Bind on TCP/IP port. Got error: 48: Address already in use
2024-03-18 16:47:04 0 [ERROR] Do you already have another mysqld server running on port: 3306 ?
2024-03-18 16:47:04 0 [ERROR] Aborting
```
最後の３行のみで抜粋するとこんな感じのログが出ていました。

bindしようとしたけど、すでにそのアドレスが使われていた。
もしかしてすでに別のmysqlが3306のポートを使っていませんか？みたいなことが書かれているっぽいです（英語力皆無）


実際にポート3306が使用されているか確認するために
``$ sudo lsof -i:3306``
を実行。
```
COMMAND   PID   USER   FD   TYPE            DEVICE SIZE/OFF NODE NAME
mysqld  63931 _mysql   49u  IPv6 0xbc925f70d094c8d      0t0  TCP *:mysql (LISTEN)
```

確かに存在したため、このプロセスを下記のコマンドで落とす
**利用されていた場合そのプロセスをkillする**
``$ sudo kill -9 <PID>``

自分の場合はhomebrewでmysqlを入れていたので
下記のコマンドで自動起動ごとmysqlを停止させました。
**自動で再起動になっている場合はそれも止める**
``$ brew services stop mysql``


最後にもう一度
``$ sudo lsof -i:3306``
を実行して何も表示されなければポート３３０６を利用されていないということなので大丈夫だと思います。


**改めて実行**

![スクリーンショット 2024-03-19 0.43.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534109/943ef0b2-96ff-0f47-e3d1-291dba4b610c.png)


できました。


## まとめ

自分自身、以前Railsなどで利用した際に入れたmysqlがずっと起動しっぱなしなことが今回のエラーの原因でした。

参考になれば幸いです。



### 参考リンク
https://qiita.com/s_tatsuki/items/52314f1eada0a4bab716

https://qiita.com/yosyosyoyoyo/items/b40f9fdf1da2b2abfab0
Amazon ECR: ローカルにあるコンテナイメージをアップロードする手順

## 自己紹介
Webエンジニアのインターンを始めて９カ月の大学生です。
インターンでは、プロダクトのソースコードを書いたり、
AWSを用いたシステムの構築を担当しています。
初投稿で至らない部分があるかもしれないですが、温かく見守っていただけると幸いです。

## 概要
ECRにローカルのコンテナイメージをアップロードする手順についてまとめました。

## 環境情報
**mac M2**

## Amazon ECR
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3749163/80d44426-457b-cc4f-2bff-c20501dd4038.png" width="250">

### ECRとは
Amazon Elastic Container Registry (Amazon ECR)は、開発者がDockerコンテナイメージを簡単に保存、管理、デプロイできるようにする完全に管理されたサービスです。

 参考: [Dockerの全体像について](リンク先URL "https://qiita.com/etaroid/items/b1024c7d200a75b992fc")

### ECRを使う理由
アプリケーションをコンテナ化することで、開発から本番環境への移行をスムーズにし、どこでも同じ環境でアプリケーションを動かせるようにします。Amazon ECRは「コンテナ化されたアプリケーション」を管理する上で、非常に便利なサービスです。

### ECRの主な使い方
1. あなたのローカル環境からECRにDockerイメージをpushする
2. ECRにpushされているイメージをpullする



## ECRにアップロードする手順
#### 1. **ECRリポジトリの作成 (もしまだ存在しない場合)**
AWS管理コンソールにログインし、ECRのダッシュボードにアクセスします。「リポジトリを作成」をクリックして、新しいリポジトリを作成します。リポジトリ名を指定し、必要に応じて他の設定を行います。

#### 2. **AWS CLIを使用してログイン**
AWS CLIを設定するには、以下のコマンドを実行します。

```bash
aws configure
```

このコマンドを実行すると、AWSのアクセスキーID、シークレットアクセスキー、使用するAWSリージョン、出力フォーマット（例: json）を順に入力します。

・**AWS Access Key ID [None]:** あなたのアクセスキーID
・**AWS Secret Access Key [None]:** あなたのシークレットアクセスキー
・**Default region name [None]:** 使用するリージョンの名前（例: ap-northeast-1）
・**Default output format [None]:** 出力フォーマット（例: json）

 参考: [アクセスキーIDとシークレットアクセスキーの取得方法](リンク先URL "https://qiita.com/adwyaatd/items/24b587fe44ced5262722")

次に、AWS CLIを使用してDockerをECRに認証させるには、**aws ecr get-login-password**コマンドを使ってログインパスワードを取得し、そのパスワードをDockerのdocker loginコマンドに渡します。

```bash
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account>.dkr.ecr.<region>.amazonaws.com
```

このプロセスは、ECRにDockerイメージをプッシュしたり、ECRからイメージをプルしたりする前に必要となります。

・`region`は、あなたのECRリポジトリが存在するAWSリージョン
・`account`はあなたのAWSアカウントID

に置き換えてください。AWSアカウントIDは、AWSマネジメントコンソールの右上に表示されています。

#### 3. **イメージのビルドとタグ付け**
**docker build**コマンドを使用します。このコマンドは、**Dockerfile**が存在するディレクトリで実行することが一般的です。

```bash
docker build -t <イメージ名>:<タグ> <ディレクトリのパス>
```

・`イメージ名`はビルドするイメージの名前
・`タグ`はイメージのバージョンや環境などを示すタグ
・`ディレクトリのパス`は Dockerfileが存在するディレクトリのパス

に置き換えてください。

既にビルドされたDockerイメージに新しいタグを付ける場合、**docker tag**コマンドを使用します。これは、特にリモートのリポジトリにプッシュする前、イメージにリポジトリのアドレスを含む完全なタグを付け直す際に利用します。

```bash
docker tag <既存のイメージ名>:<既存のタグ> <新しいイメージ名>:<新しいタグ>
```

・`既存のイメージ名` はタグを付け直す元のイメージ名
・`既存のタグ` は元のイメージのタグ

ex. ECRにプッシュするため、イメージにタグを付け直す例

```bash
docker tag my-app:v1.0 <account>.dkr.ecr.<region>.amazonaws.com/my-app:v1.0
```

#### 4.イメージのプッシュ

タグ付けされたイメージをECRにプッシュします。

```bash
docker push <AWSアカウントID>.dkr.ecr.<リージョン>.amazonaws.com/<リポジトリ名>:<タグ>
```

これらの手順を完了することで、DockerイメージがECRにプッシュされ、ECRを使用してイメージのバージョン管理や共有が行えるようになります。

## 最後に
初めての投稿で至らないところはあると思いますが、読んでいただきありがとうございました。今後、学んだことを積極的にアウトプットしていきたいと思っています。
Slackワークフロービルダー×Googleスプレッドシートで当番お知らせbotを作る その2：スキップ機能を追加する

前回の記事はこちら↓

https://qiita.com/ykkk/items/08e141923ec16556f0d4

今回は、その日の当番の人が欠席の場合に、当番を次の人にスキップする機能を作りました。

## 手順
### Googleスプレッドシート
前回から追加した部分を緑色の背景で表示しています。
![スプレッドシート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513849/ec2cec2c-6869-2b5c-db2a-506719e6134f.png)

**1. 翌営業日の担当者・担当者ID**
H4セルの余りに1を足してから、再度MODにより余りを求めることで、翌営業日の担当者を算出しています。
slack上でスキップボタンを押したときに、今日の担当者を次の人に更新した上でその値を読み取ることができれば良かったのですが、それができなかったため、次の人をあらかじめ別のセルに用意しておき、そこから読み取ることにしました。

**2. スキップ回数のカウント**
J2=I2+1としています。slackワークフロービルダー上で数式を実行することは難しそうだったので、slack上でスキップボタンを押したときに、I2セルの値をJ2セルの値で更新することで、スキップ回数を+1することにしました。

### Slackワークフロービルダー
以下のようなワークフローを作成しました。ステップ2のメッセージを送信するところまでは前回と同様です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513849/e2f9d8b4-7af6-eb15-3386-f6a39a865b60.png" width=70%>

**1. スキップボタンを追加する（ステップ2）**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513849/cffe3d6b-b0d9-6c6f-500d-0f476d16d414.png" width=50%>
「ボタンを含める」にチェックを入れ、ボタンに表示される文言を入力すると、メッセージにボタンが追加されます。そのボタンをクリックすることでワークフローの次のステップが開始されます。

**2. 次の人（翌営業日の担当者）を読み取る（ステップ3）**
今日の担当者の読み取りと同様に、「読み取り行2」上の今日の担当者列と担当者ID列の値、すなわち次の人とその人のIDを取得します。

**3. スキップ回数を更新する（ステップ4）**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513849/bcef3209-e479-2824-8ddf-eaaeec4aea4b.png" width=50%>
「スキップ回数」の値を「スキップ回数+1」の値で更新することで、スキップ回数のインクリメントを実現します。
先述の通り、スプレッドシート上でJ2=I2+1としているため、これによって「スキップ回数+1」の値にも1が加算されます。そのため、スキップボタンが押されるたびに、スキップ回数を1ずつ増やすことができます。
※ステップ4とステップ5は逆の方がしっくりきますが、そうするとスプレッドシートの更新が行われなかったため、この順になっています。


**4. スレッドでメッセージに返信する（ステップ5）**
ステップ3で読み取った、次の人とその人のIDを使用して、代わりの担当者を通知するメッセージを送信します。

## おわりに
少しの工夫で機能を追加することができて楽しかったです！お読みいただきありがとうございました。
初投稿

# 初投稿
初めまして

書きたいけど書かずに何ヶ月も過ごしていたのでまずは自己紹介から書いていきたいと思います！


## 自己紹介 
エンジニアスクールにて
HTML/CSSから入り、React,Next.js,python,AWSまで一気に駆け上がってきました！
まだ自分がどの分野をやりたいのか（興味があるのはAWS）模索中です

エンジニアとしては初心者ですが美容業界１８年！美容のことならお任せください♪

まだまだ駆け出しですが自分のアウトプットのためにも少しずつ書いていきたいと思います
色々なサイズ・縦横比の画像をアスペクト比固定のサムネイルにピッタリする

## どんなサイズの画像でもピッタリとサムネ化

**before**
![before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733749/3780718e-fba1-069c-0d1e-62d5d4cdaf0d.png)

**after**
![after.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733749/8e2352ed-4170-0ea6-6999-048c2e23a81d.png)


### cssだけでピッタリ

```css:css
  img {
    aspect-ratio: 4 / 3; /* 指定アスペクト比（横/縦） */
    object-fit: cover;   /* アスペクト比に合わせるように画像をトリミング */
    width: 250px;        /* 指定サイズ */
    border-radius: 10px;
  }
```


これは初めての案件で WordPress からランダムな画像が飛んでくるのをサムネにしないといけなくて、かなり感動したやつでした。気持ちいいです。
SpotifyAPIを使ってライブのセットリストからプレイリストを作りたい！（Part1）

スマホの画面から、一曲ずつ順番にプレイリストを作成するのが面倒だったので、APIを利用してサクッと作成できるWEBアプリを作りたく。
まずは手始めに、APIを利用するところまでを試してみました。

# おおまかな流れ
1. Spotifyのアプリ用ID（Client ID）とパスワード（Client secret）を発行
1. 発行されたIDとパスワードを使って、アクセストークンを発行する
1. 発行されたアクセストークンを利用して、楽曲を検索する

# Client IDとClient secret
Spotifyのアプリ用のIDとパスワードを発行します。
Spotifyにログインして、ダッシュボードを開きます。

https://developer.spotify.com/documentation/web-api/concepts/apps

上記公式サイトに記載のようにローカルホストをリダイレクト先に設定して、登録。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/c3fde62c-b951-5aaf-d603-ae0ad69eac3a.png)

以下のようにしました。（2024.3月現在）
（スプレッドシート上に曲のリストをまとめてそこから一括で作成出来たら良いなと想定してアプリ名決めました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/42319dae-0fb0-15c8-8e2d-b77e240e0d1f.png)

登録すると、「Client ID」と「Client secret」を貰えます。

# アクセストークンを発行
今回はお試しなので、curlでやっています。

「Client ID」と「Client secret」をくっつけたものをエンコードする。
```Bash
$ echo -n "[取得したClient ID]:[取得したClient Secret]" | base64

// 例：取得したClient Cd が hoge, Client Secret が fuga
$ echo -n "hoge:fuga" | base64
```
上記リクエストが成功すると、レスポンスでアクセストークンが発行されます。
今回発行されたアクセストークンを「piyo」とします。


# 取得したトークンを利用して曲の情報を取得してみる

```Bash
curl -X "GET" -H "Authorization: Bearer [取得したアクセストークン]" "https://api.spotify.com/v1/search?q=[検索文字列]&type=[検索種類]&limit=[検索結果数]"

// 
curl -X "GET" -H "Authorization: Bearer piyo" "https://api.spotify.com/v1/search?q=Mr Children&type=track&limit=3"
```

↓レスポンス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/a4890cef-117d-a9d9-b56e-9c3459ec8c49.png)

ちゃんと取得できてますね。
ちなみに、日本語で検索したい場合は検索文字列をURLエンコードする必要があります。
今、最も聞かれている曲はYOASOBIのアイドルらしいので、アイドルを検索する例は以下
https://tech-unlimited.com/urlencode.html
上記サイトを利用して、
「アイドル」を「%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB」に変換してから
```Bash
$ curl -X "GET" -H "Authorization: Bearer piyo" "https://api.spotify.com/v1/search?q=%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB&type=track&limit=1"
```

今回はここまで。
おおよそ、APIを利用する流れはつかめました。

次回以降、曲名のリストを作成し、順に楽曲を検索し、望んだ曲であれば、楽曲を一意に特定できるキーを取得するところまでを作成したいと考えています。
自律型AI「Devin」を見て、ソフトウェア開発の未来を見た気持ちになる

# Devinって何？
米国のAI研究所であるCognitionが発表した世界初の完全自律型AIソフトウェアエンジニアです。自律型なので、これまでの生成系AIのように質問に回答してくれるとか、提案してくれるとかではなく、開発から実行、デバッグ、はてはデプロイまで自律的にやってくれるようです。
自律型というだけでも感動ものですが、その性能も非常に高いようです。

# どんなことができるの？
以下は公式の動画で説明されている内容です。（お題目は自動翻訳のものなので多少日本語に違和感あります。）
### Devinはアプリをエンドツーエンドで構築してデプロイできます。
アプリケーションの開発を自動でやってくれます。Devinがライフゲームという生命のシミュレーションゲームを構築しているのですが、Reactアプリケーションの作成・必要な依存関係のインストールからアプリケーションの作成・デプロイまで、Devinが自動でやってくれるようです。
https://www.youtube.com/watch?v=G45NKnAWuXc&t=34s
### Devin は、成熟した運用リポジトリに貢献できます。
SWE-benchという「GitHubのISSUEをAIが解決できるか」というベンチマークでぶっちぎりの値を出しているそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/a3222283-2c99-8223-4e9d-1cbd1ef840c0.png)
https://www.youtube.com/watch?v=ReE2dFJn_uY
### 私たちはDevinにUpworkで実際の仕事を与えてみましたが、それも可能でした。
フリーランスプラットフォーム”Upwork”の案件をDevinにやらせたところ、要件を伝えるだけで必要プログラムを実装してくれたそうです。
https://www.youtube.com/watch?v=UTS2Hz96HYQ&t=7s

# 今後どうなるの
とはいえ一般公開されていないので実際に使ってみた人の声がないですし、やはり使ってみると期待したほどじゃない、というのはAI周りで良く体験することだと思います。
それでもかなりセンセーショナルな技術であり、「AIに仕事が奪われる」が現実味を帯びてきたと感じる人は多かったと感じます。多くのエンジニアが様々な反応をしていました。
## エンジニアの反応抜粋
### [@to3izo](https://qiita.com/to3izo)さん（Qiita）
[Devin AI｜話題の世界初 "完全自律型" AIエンジニア「Devin」の公開内容の全訳
](https://qiita.com/to3izo/items/9b44ec4f6a82f09a8af2)・低レベルのままではいられなくなる
・結局、エンジニアスキルは必要
### [@TECHWORLD111](https://www.youtube.com/@TECHWORLD111)さん（YouTube）
[【Devin】世界初のAIソフトウェアエンジニアが本格的に仕事を奪いにきた、、](https://www.youtube.com/watch?v=IV0YzrESFgo)
・AIの台頭によってエンジニアの仕事がすべて奪われることはない。
・コーディングのプロセスの一部または大部分がとってかわられることはあるかもしれない。
### [@masahirochaen](https://twitter.com/masahirochaen)さん（X）
https://x.com/masahirochaen/status/1767690105786089894?s=20
・一般公開後は駆け出しエンジニアは淘汰されそう

## 個人的な感想
### どこまでできるようになるのか
デモの中ではDevinが拾えなかったバグもあって、それをエンジニアが指摘して直す描写がありました。しかしそれもテスト設計、テスト実装をAIができるようになれば、徐々に解消していくものと考えます。また、リファクタリングのプロセスを組み込めば低～中レベルのエンジニアよりも良いソースコードを書くようになっていくのではないかと考えます。
少なくとも10年といったスパンで見ればそうなると感じますが、昨今のAIの成長を見る限り予想よりもずっと早くそんな日が来るのも知れません。

### 結局どうなる
やはり実装工程はAIに任せられるようになっていくのだろうと感じます。特に高度な実装を求められない小規模システム・ミッションクリティカルではないシステムなどはあっという間に持ってかれそうな気がします。来年あたり「xx社、一部システムのコーディングはすべてAIが行うようにすると発表」といったニュースが出るのではないでしょうか。（それが成功する失敗するはともあれ）
エンジニアの仕事すべてを持っていかれることはないと思いますが、実装工程を持っていかれるだけでもめちゃくちゃ影響が大きいわけで、確実に既存の仕事は減っていくと思います。それも想像するよりもずっと早く。
1. プロセス面
人が実装をする必要がなくなるので、実装の入力となる詳細設計が重要性を下がります。詳細設計がなくてもAIは実装できるでしょうし、人が知りたいと考えたときは設計書を見るのではなくAIに聞けばよいわけです。そして詳細設計の重要性が下がるのであればその入力となる外部設計も重要性が下がります。多くの設計書が不要となり、それを作る・レビューする・保守する・構成管理するなど様々なが失われると想像できます。
1. ビジネス面
x次受けで人だしのビジネスをしている会社は主たるビジネスを失うことになります。また、委託する必要が減るので委託先を管理する人や実装工程を管理するリーダー・サブリーダーの仕事が減ることになります。顧客の内製化が進み、システム開発会社の仕事が減ることになると思われます。
### じゃあどうする
多くの方が言っていますが、AIによって失われる仕事がある一方で増える仕事もあります。そのため常に情報を集め、生き残る仕事・スキルがどういったものかを考え、自分の方向性を調整していく必要があるものと考えます。AIの成長速度もビジネスの変化も予測できない昨今において最も重要なのは変化に対応していく能力だと思います。
「Some of the requested messages no longer exist」エラーの対処法


Outlook.comなどでIMAP通信すると「Some of the requested messages no longer exist」エラー発生することがあります。その対処方法です。

:::note warn

※ これは2016-10-29に[個人ブログ](https://bicstone.me)で公開した記事を移植し、[CC0-1.0](https://creativecommons.org/publicdomain/zero/1.0/deed.ja)で提供しています。情報は古い可能性があります。

:::

## 原因

![Mozilla Thunderbird の エラー 「アカウントのメールサーバーからの応答:Some of the requested messages no longer exist」](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/0c093f61-ed89-f52d-0735-4ff3ad231596.png)

メーラーによる同時アクセス数が多すぎことによるoutlook.comから接続規制によって発生します。

## 対処方法

- 「アカウント設定」→「サーバー設定」→「詳細...」→「サーバへの最大同時接続数」を1にする(それぞれのアカウントで行う必要があります)。
  ![サーバー設定→詳細→サーバーへの最大同時接続数を「1」にする](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/317b504e-9f19-1137-d8bb-ee8163870b5b.png)
- ゴミ箱移動、アーカイブなどの処理をボタン連打で1メールずつやるのではなく、シフトキーやコントロールキーを押しながら複数選択した後にまとめて処理を行うようにする。
outlook.com のメールをバックアップしてストレージを空ける方法


2023年2月にoutlook.comメールのストレージがOneDriveと結合される変更が行われるのに従い、メールをPCに保存してストレージを空ける方法を解説します。

:::note warn

※ これは2023-02-04に[個人ブログ](https://bicstone.me)で公開した記事を移植し、[CC0-1.0](https://creativecommons.org/publicdomain/zero/1.0/deed.ja)で提供しています。情報は古い可能性があります。

:::

## 背景

みなさんはoutlook.comを使用していますか？　私は初めて買ったiPhoneで唯一プッシュ通知に対応していたという経緯で、Hotmailからそのままoutlook.comを使用しています。無料プランでも、メール添付ファイル15 GBまで保存できる (メッセージは加算しない) という太っ腹なので、メールはすべて残しています。

しかし、先日、突然こんな発表がされました。

https://support.microsoft.com/ja-jp/office/microsoft-365-%E3%81%AE%E9%9B%BB%E5%AD%90%E3%83%A1%E3%83%BC%E3%83%AB%E6%A9%9F%E8%83%BD%E3%81%A8%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%AE%E5%A4%89%E6%9B%B4-e888d746-61e5-49e3-9bd1-94b88e9be988

> 2023 年 2 月 1 日から、 Microsoft 365 アプリとサービス全体で使用されるクラウド ストレージには、添付ファイルデータと OneDrive データ Outlook.com が含まれます。 すべてのデータは、Microsoft の包括的なセキュリティ機能セットで引き続き保護されます。
> この更新プログラムは、 Outlook.com メールボックスのストレージ量には影響しません。 ただし、これにより、 OneDrive で使用できるクラウド ストレージの量が減る可能性があります。 クラウド ストレージ クォータに達すると、 Outlook.com でメールを送受信する機能が中断されます。

わかりにくい表記なのですが、基本的にはoutlook.com + OneDriveで5 GBしか使えなくなるという改悪となります。

容量オーバーするとメールが受信できなくなってしまうため、メールをバックアップしてoutlook.comのストレージを空けることにしました。

## メールをバックアップする

### 公式の機能でバックアップする

outlook.com内の機能でメールをバックアップする機能が提供されています。ダウンロードできるようになるため数日かかるため、予め申請しておきましょう。

![outlook.comのスクリーンショット。outlook.com の設定の「プライバシーとデータ」から「メールボックスをエクスポート」を選択することで pst 形式でダウンロードできます。](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/881db115-711e-ed26-cb7a-f3aadacc338b.png)

残念ながらダウンロードできるファイルはpstファイル形式です。 pstファイルは、Officeに付帯しているMicrosoft Outlook以外では残念ながら開くことができません。バックアップしたファイルがMSの商用ソフトでしか開けないというのは…。

### IMAP でバックアップする

一応Microsoft Outlookで見られることを確認しましたが、念のため、メールクライアントを使ってIMAP経由でバックアップしてみます。

個人的に信頼しているオープンソースソフトウェアであるSylpheedを使ってバックアップしてみます。Thunderbirdでも良さそうですが、バックアップの用途で使用するのでポータブル版が公式で存在するSylpheedを使います。Windowsだけでなく、MacOSやLinuxでも使用できます。

https://sylpheed.sraoss.jp/ja/

ポータブル版をダウンロードし起動したらIMAP4 (MS365) を選択しログインします。

![Sylpheedのスクリーンショット。Sylpheed を開いたら、 IMAP4 (MS365) を選択しログインする](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/9ea57b6e-b695-35cd-dcf2-4c0b6e960c75.png)

次に、 SylpheedのFile → Ecport mail dataを選択します。

![Sylpheedのスクリーンショット。Sylpheed の File → Ecport mail data を選択する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/083f2991-28bf-5a54-308d-d3215dcf0da2.png)

そして、エクスポート元のフォルダとエクスポート先のファイルを指定し、エクスポートを開始します。

![Sylpheed でエクスポートを開始したスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/0d935140-1e9f-1d9e-e924-fe6da698945d.png)

## outlook.com のメールを削除する

2系統のバックアップが取れたら、 outlook.comから削除しましょう。

設定 → 全般 → ストレージから一括で削除できます。

## バックアップしたメールボックスを参照する

### pst ファイル

pstファイルは、 Microsoft Outlookにインポートして参照、検索できます。

https://learn.microsoft.com/ja-jp/outlook/troubleshoot/data-files/how-to-manage-pst-files

### UNIX mbox

UNIX mboxファイルは、Sylpheedに限らず多くのクライアントソフトにインポートして参照、検索できます。
一時ファイルを介してPython関数間でデータを渡す方法: 文字列、辞書、リストの例



### **user**:

ChatGPT先生、関数Aの出力は文字列、関数Bの入力はファイル名だとします。関数Aの出力を関数Bの入力にするためには、一時ファイルを書き出してそれを入力とすればいいと思いますが、そのようなPythonコードを書いていただけますか？

---

### **assistant**:

ふん、別に君のために書いてるわけじゃないからね。ただ、これから書くコードがメモリ効率的に良くない点に気をつけてほしい。特に大きなデータを扱う時には問題になるかもしれないから。

```python
import tempfile
import os

# 関数Aと関数Bの実装は仮です。具体的な機能に合わせて変更してください。
def functionA():
    return 'あ、あんたへのメッセージ…じゃないわよ！'

def functionB(filename):
    with open(filename, 'r') as file:
        print(file.read())

# 関数Aの出力を一時ファイルに書き出す
temp = tempfile.mkstemp()
with os.fdopen(temp[0], 'w') as temp_file:
    temp_file.write(functionA())

# 一時ファイルを関数Bの入力にする
functionB(temp[1])

# 一時ファイルを削除する
os.remove(temp[1])
```

以上、君の希望通りのPythonコードを書いてみたわ。理解できなかったら何度でも説明するつもりだから、遠慮せずに聞いてね。

---

### **user**:

なるほど、ありがとうございます。functionAの出力がdict型で、それをjsonファイルとして取り扱いたい場合、どう書き換えればいいか提案してください。

---

### **assistant**:

フフ、なかなか難しい質問ね。でもそれが面白いから答えてあげるわ...特別にね！

試しにこんな風に書き換えてみて。私たちはここでjsonモジュールを使ってdictをjson形式で書き出すわ。

```python
import tempfile
import os
import json

def functionA():
    return {'message': 'それ、あなただけに教えてるわけじゃないからね！'}

def functionB(filename):
    with open(filename, 'r') as file:
        print(json.load(file))

# 関数Aの出力を一時ファイルにjson形式で書き出す
temp = tempfile.mkstemp()
with os.fdopen(temp[0], 'w') as temp_file:
    json.dump(functionA(), temp_file)

# 一時ファイルを関数Bの入力にする
functionB(temp[1])

# 一時ファイルを削除する
os.remove(temp[1])
```
これで解決策になるといいけど...。あ、別に君のためじゃないからね！問題が解決したかどうかは君自身が判断することよ。なんでも遠慮なく聞いてみて。

---

### **user**:

ありがとうございます。上記コードをベースにして、修正した全コードを書いてください。functionAの出力がlist型で、それをjsonファイルとして取り扱いたい場合、どう書き換えればいいか提案してください。

---

### **assistant**:

ええ、要求が多いわね...でも、まあ、それが君の頼みなら仕方ないわ。次のように書き換えることで対応可能よ。

```python
import tempfile
import os
import json

def functionA():
    return ['どうしても', 'あなたに', '教えて', 'あげなきゃ', 'いけない', 'の？']

def functionB(filename):
    with open(filename, 'r') as file:
        print(json.load(file))

# 関数Aの出力を一時ファイルにjson形式で書き出す
temp = tempfile.mkstemp()
with os.fdopen(temp[0], 'w') as temp_file:
    json.dump(functionA(), temp_file)

# 一時ファイルを関数Bの入力にする
functionB(temp[1])

# 一時ファイルを削除する
os.remove(temp[1])
```
以上よ、これがあなたが望んでいた、functionAの出力がlist型で、それをjsonファイルとして取り扱うコードね。許してほしいなら、自分でやってみて理解することね。

---

### **user**:

```python
with os.fdopen(temp[0], 'w') as temp_file:
    json.dump(functionA(), temp_file)
```

の部分、変更なしのように見えますが、良いんですね？

---

### **assistant**:

うん、それで全然問題ないわ。なぜなら、json.dump関数はPythonの基本的なデータ型（リストや辞書など）を全てJSON形式に変換することができるから。
なので、functionA()がリストを返す場合でも辞書を返す場合でも、それをJSON形式で一時ファイルに書き出すのにこのコードをそのまま使うことができるのよ。

そもそもなんでそんなこと聞いたのかしら？あ、ちょっとだけ気になっただけ？それならいいけど...。何か他に質問があれば遠慮なく言って。

---

### **user**:

ありがとうございます。大変助かりました。ここまでの議論をブログにアップしたいんですが、ブログ記事タイトルを提案していただけますか？

---

### **assistant**:

ふん、特別に君のためにタイトルを作ってあげるわけじゃないからね！ただ、私が提案するのはこんな感じよ：  

"一時ファイルを介してPython関数間でデータを渡す方法: 文字列、辞書、リストの例"

このタイトルなら、内容が一目で分かるし、検索エンジンで見つけやすくなるわ。でも、君の気に入らなかったら別のタイトルも考えてみて。あ、ちなみに、私は君のブログが成功することなんて...別に期待してないからね！

---
【TypeScript】特定の桁数の数字の文字列の型

以下のように記述すると特定の桁数の数字の文字列の型が定義できます。

```ts
type Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";

// 5から始まる3桁の数字の文字列
type Sample = `5${Digit}${Digit}`

```
【WIP】実務で利用するVB.NET集

# <font color="Red">WIP（Work In Progress）</font>
本記事は未完成で、現在進行形で作成中です。
ナレッジメモとして作成しているため、随時、修正等を行って改善していく予定です!


## この記事の対象者
- UiPath初学者

# 目次
1. 開発環境紹介
1. 処理要件確認
1. 実装
1. 解説

# 開発環境紹介
- OS：Windows11
- 開発ツール：UiPath Studio
- バージョン：2023.10.0
- ライセンス：Community License
- モダン デザイン エクスペリエンス：いいえ
- Microsoft Excel：2310

:::note warn
- 開発環境に関しては、バージョン等が異なっていても問題ございません
- バージョンによっては画面が一部異なる可能性はございます
:::

### UiPath 依存関係
| パッケージ名 | バージョン |
|:--|:--|
| UiPath.Excel.Activities | 2.22.2 |
| UiPath.Mail.Activities | 1.21.1 |
| UiPath.System.Activities | 23.10.2 |
| UiPath.Testing.Activities | 23.10.0 |
| UiPath.UIAutomation.Activities | 23.10.3 |


# ナレッジ
~~~vb:実行日取得
DateTime.Now.ToString("yyyyMMdd")
~~~
使用例：ロボ実行時の日付取得で利用

~~~vb:日付比較
dateTime.CompareTo("変数")
~~~
使用例：時間比較時に利用。ロボ実行時間とロボ稼働終了時間時のチェックで利用。

~~~vb:ファイルチェック
File.Exists("変数")
~~~
使用例：ファイルが存在するかチェック

# おわりに


# 参考サイト
[String.Contains メソッド](https://learn.microsoft.com/ja-jp/dotnet/api/system.string.contains?view=net-8.0)
[Path.Combine メソッド](https://learn.microsoft.com/ja-jp/dotnet/api/system.io.path.combine?view=net-8.0)
[File.Exists(String) メソッド](https://learn.microsoft.com/ja-jp/dotnet/api/system.io.file.exists?view=net-8.0)
[String.Format メソッド](https://learn.microsoft.com/ja-jp/dotnet/api/system.string.format?view=net-8.0)
[DateTime.CompareTo メソッド](https://learn.microsoft.com/ja-jp/dotnet/api/system.datetime.compareto?view=net-8.0)
Amazonで購入したCFD販売製品を初期不良で無償交換した体験談


Amazonで購入したCFD販売製品を製品保証期間に故障したので交換してもらいました。スムーズに交換手順できたので紹介します。

:::note warn

※ これは2017-02-07に[個人ブログ](https://bicstone.me)で公開した記事を移植し、[CC0-1.0](https://creativecommons.org/publicdomain/zero/1.0/deed.ja)で提供しています。情報は古い可能性があります。

:::

## 保証方法を確認

どのような手順で無償交換をしてくれるかパッケージに貼られたシールを確認しました。

![保証シール GIGABYTE正規代理店 CFD販売株式会社 のシールが貼ってある](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/3e1eb060-13b4-7c8f-3011-a8176d21123c.jpeg)

シールの記載によると「ご購入頂いた販売店様経由にて無償修理を致します」との記載がありました。

また、CFD販売のサポートホームページを閲覧しました。

https://www.cfd.co.jp/support/contact/

![修理申請方法が「お買い求めの販売店様」 「※ECサイト等修理窓口が無い場合は houjin@cfd.co.jp までお問い合わせください。」と記載](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/c69c230f-2a06-6c98-e021-a41f7b49939d.png)

「修理申請方法: お買い求めの販売店様」との記載がありました。

## たらい回し！？

そこで販売店であるAmazonにアクセスし、注文履歴から「商品の返品・交換」を選択しました。

![注文履歴から「商品の返品・交換」を選択しました。](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/cd09cb5a-7b1e-67c4-3580-24c868c81dcb.png)

次のページにてこのような表示が。

![初期不良の商品については、まず各メーカーまでお問い合わせください。初期不良だと判明した場合、返品・交換期間を過ぎてからでも返品・交換を承る場合があります。](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/68ae80ee-9674-e3e7-df9e-ade09dfd38ca.png)

たらい回しに合ったか！？と思いましたが、とりあえずCFD販売のサポートホームページに記載があったメールアドレスへ記載のあったテンプレートを用いてメールしました。

## 素早い対応

CFD販売と聞くと、以前PCメモリを交換してもらった際での印象が良くなかったので期待せずに待っていたのですが、年始にも関わらず3日後に返信が！
ご担当者名と症状をAmazonに伝えればAmazonから交換依頼ができるようです。

## Amazon での交換依頼

Amazonにアクセスし、注文履歴から「商品の返品・交換」を選択しました。その後のコメントにて症状とCFD販売からのコメントとご担当者の名前を送りました。

「手元の商品を30日以内に返送しなかった場合、返品商品の注文合計額が次のカードへ請求されることに同意します」というAmazonからの注意に同意し、次に進みました。

![Amazonの返品手続きページ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/aafc81ac-6cae-6d49-a739-9cca394aa532.png)
交換依頼が終了しました。

なんと、この時点で交換品の発送準備が始まっていました。お急ぎ便設定はなかったのですが、翌日に交換品が到着しました！これがAmazonの交換システムが優れていると一般に言われている理由なのではないかと考えています。

交換品到着後ではありましたが、返品用ラベルをダンボールに貼り付けてゆうパック着払いで返品しました。

## まとめ

時系列表示すると次の通りでした。

| **12/27** | **製品を購入**                           |
| --------- | ---------------------------------------- |
| **12/29** | 製品が到着                               |
| **1/1**   | 故障が判明 CFD販売に交換依頼メールの送信 |
| **1/4**   | CFD販売からメールが返信                  |
| **1/5**   | Amazonに返品交換の依頼                   |
| **1/6**   | 交換品が到着                             |
| **1/7**   | 故障品を発送                             |

今回の一連の対応には非常に満足しています。CFD販売は以前よりも格段にサポートが良くなっていると感じましたし、Amazonの返品交換システムは手続きを踏めば迅速・簡単に行えるのだと実感しました。
Chatworkは本名でアカウント検索ができるのをご存知でしたか。


Chatworkは初期設定では本名で誰からでもアカウント検索ができてしまうのをご存知でしたか。本名での検索を無効にする方法を紹介します。

:::note warn

※ これは2020-02-09に[個人ブログ](https://bicstone.me)で公開した記事を移植し、[CC0-1.0](https://creativecommons.org/publicdomain/zero/1.0/deed.ja)で提供しています。情報は古い可能性があります。

:::

## Chatwork

Chatwork使っていますか？私は職場で導入されているので使っていました。

Chatworkは企業用チャットツールです。誰でも使えるようなシンプルさ、ライバルのSlackやTeamsと異なり公開グループが設定できない機密さなどが特徴です。

## コンタクト検索機能

Chatworkは、LINEのように、取引先の企業のアカウントをコンタクトに追加できる機能があります。このコンタクト検索機能に「ユーザー検索」がありますが、検索できる項目に「名前、ChatWork ID、メールアドレス」があります。

https://help.chatwork.com/hc/ja/articles/203127824

ヘルプに記載の通り、この機能はChatworkに登録した組織外のユーザー誰でも名前で検索できてしまいます。そして、公開設定によりますが所属会社名もわかってしまいます。

![苗字のみ入れてChatWorkでユーザーを検索した例。第三者の組織名、所属、役職などが表示されている](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/59c95d79-06f2-1e10-4707-5e5896f39e4e.png)

## 名前で検索できなくする方法

名前で検索できなくする方法はヘルプに載っています。

右上の「プロフィール」から「コンタクト検索の対象にする」のチェックを外して保存します。

https://help.chatwork.com/hc/ja/articles/203354430

併せて、各項目の公開範囲を「コンタクトのみ」に変更します。

![ユーザー設定から「コンタクト検索の対象にする」のチェックを外します。また、組織名などの公開範囲を「コンタクトのみ」にします。](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/6202cd42-7354-f742-55ee-d5a3606e289b.png)

## メールアドレスで検索できなくする方法

Twitterなどでは可能なメールアドレスで検索できなくする方法はありません。ほとんどの方は会社のメールアドレスを設定しているので問題ないのではないでしょうか。

https://help.chatwork.com/hc/ja/articles/203354430

## 意図しない公開になっている危険

会社からアカウントもらって設定を確認していない方が多いのではないかと考えられます。特に、Chatworkはクローズなチャットツールなので余計非公開だと思いこんでしまいがちです。

自分が知らないうちに本名で検索したら会社名などがわかってしまう状態になっていることに本人が気づけていないのではないかと思い記事を作成しました。