OmniAICreator/Qiita-1.07M huggingface dataset:
エンジニアの新卒採用本格始動しました！

## はじめに
HRBrainで人事をしている沖です。
昨年に続き、アドベントカレンダーに参加させていただくことになりました。
この1年も様々なことにチャレンジしていたため、「もう12月か・・・」という状況です。そんな様々なチャレンジの中でも、「エンジニアの新卒採用」を振り返る回として今回書かせていただければと思います！

この記事は HRBrain Advent Calendar 2022  5日目の記事です。

https://qiita.com/advent-calendar/2022/hrbrain

## 新卒採用のスタート
2022年は年始から「エンジニアの新卒採用」という大きな挑戦を開始しました。
ビジネス側は昨年2021年から開始していましたが、エンジニア側では本格的な新卒採用はオープンしていませんでした。ただ、下記の3つの点で新卒採用の重要性を感じていました。

① 今後更に新規プロダクトが続々と立ち上がっていく事を考えると、経験者採用に依存せずに開発チームの規模を拡大する方法を検討したかった
② 我々のPMV（パーパス・ミッション・バリュー）に共感性の高い若手メンバーを集団で迎え入れることにより文化形成スピードを高められると考えた
③ 会社として若手やポテンシャル層を育成できるような体制を構築したかった

以上の3点の狙いを背景にエンジニア側も新卒の採用活動をスタートしました。 
一方で、私の過去のキャリアとしても経験者採用がベースであり、まさに右も左も分からない状態だったため、社内にいる新卒採用経験者はもちろんのこと、他社の人事担当者様やエージェント様、各種チャネルの担当者様など様々な方に相談させて頂く機会を設けていただきました。この場を借りて、改めて感謝申し上げます。

まだまだ知名度が高いとは言えない状況の中、23年卒の採用オープンも遅く、非常に難易度の高い採用活動となりました。また、並行して24年卒の採用企画も開始しないといけない状況ではありましたが、それぞれの採用活動において課題と方針を決め、企画と実行を開始しました。

## 23年卒の採用活動の課題と結果
23年卒の採用活動の課題は、上記にも記載していますが、採用活動開始のタイミングの遅さでした。
情報収集する中で、多くの企業様が色々なテーマを持たせたインターンを複数回実施し、秋口から本選考を開始されており、学生のマインドシェアの早期獲得の傾向がありました。この辺りの早期選考化は企業・学生共に加速しており、毎年新たな試みが必要となっている様子でした。

一方で、HRBrainは年明けからのスタートでインターンを実施しても学生のニーズに合致しないため、独自の戦略を取らざるを得ない状況でした。
ここからは勝ちパターンのお話になるため、企業秘密とさせていただきますが、弊社のバリューと方針に合致した志向性を持つ学生とマッチングするために、適切なチャネルの選定、接点方法、選考フローや選考時の体験などを工夫することで、採用目標の達成し、採用オープンの遅れをカバーすることができました。
ぜひ企業秘密を知りたい方がいらっしゃいましたら、個別ご連絡ください（笑）

23年卒メンバーは既に入社前インターンとして参画しており、新規機能開発を中心に早期に開発環境に適応し活躍してくれています！（内定者中心で作った機能もリリースされています！）
すでに業務だけでなく、文化形成にも寄与してくれており、新卒採用への希望をより感じることになりました。

## 24年卒の採用活動の課題と方針、経過
24年卒の採用活動の課題は、何でもできる分、何をどこから手を付けるべきかの判断の難易度が高いことでした。
自由すぎるが故に、どんなことでもチャレンジができるが、過去実績がないので判断材料が不足しているという状態でのスタートとなりましたが、まずは下記3つに絞って企画と設計を開始しました。

① HRBrain がエンジニアの新卒採用をしていることの認知を向上させる
② 早期に学生と接点を図り、インサイトを取りにいく
③ 採用ペルソナの明確化

早期に接点を図ること自体が認知度向上にも繋がるのですが、就活動向や学業のスケジュールを踏まえ、各種ニーズに合う形式の採用イベントを設計しました。大きくカテゴリーを2つに分けると、会社を知ってもらう場の提供と参加型のインターンシップを企画しました。
会社を知ってもらう場としては説明会が主流だと思いますが、どうしても一方通行のコミュニケーションになりがちなので、座談会形式や相談型セミナーを月に2回、オフラインとオンライン織り交ぜながら実施しました。
早期に接点を取る中で学生の知りたいこと、経験したいこと、まだ見えていないけど魅力に映るHRBrainの強みの解像度も上がり、参加型インターンのコンテンツの幅も広げられ、内容にこだわることができました。
具体的には、経験の浅い方向けのハンズオン型、経験者向けのハッカソン型、ビジネス視点と技術視点を融合させたアイデアソン型など多様な形式でのインターンが実施できました。

現場のエンジニアの方の多大なる協力のおかげもあり、各インターンの参加後アンケートでは、インターン満足度が非常に高く、参加された学生のほとんどの方が本選考へ進んでいただきました！
また、採用ペルソナについては、社内で活躍されてるエンジニアの方のマインドをインタビューし、「どのようなメンバーにHRBrainらしさを感じられるのか？」「どのようなメンバーであれば、長期的な視点で開発組織の成長に向き合えるか？」をスキルセットとは別軸で言語化していきました。

HRBrainは採用活動やインターンの実施においても現場の方の協力体制ができており、積極的にサポートしてもらえるのは人事として非常にありがたいです。

## 最後に
今回は、「エンジニアの新卒採用」について振り返りをさせていただきましたが、冒頭にも書かせていただいたとおり、HRBrainの人事として沢山チャレンジができた1年でした。
人事制度の改定や運用、従業員のフォローアップ施策、内定者インターンの実施やサポート、EX（エンプロイーエクスペリエンス）サーベイの実施、バリュー浸透のための表彰制度の企画と運用・・・etc
（そういえば、全社総会の企画運営とかもやりましたね。）
ざっと振り返ってもこれだけあるので、細かいことを入れたらとんでもない事になりそうです。笑

HR領域のサービスを提供している以上、HRBrainが率先して体現していくことが大事だと思っており、HRBrainでは従業員の皆さんに安心して挑戦できる環境づくりを進めていきたいと考えています。
まだまだやることがたくさんありますので、ワクワクしながら取り組んでいきたいです！


各部門においても同様に新たな試みや経験が積める環境がHRBrainにはあります。
新卒・経験者どちらも絶賛採用中なので、HRBrainが気になる方はぜひご応募してください！

https://www.hrbrain.co.jp/recruit

最後まで読んでいただき、ありがとうございました！
【Swift】初心者のランダム通話アプリ開発奮闘記 #7

# 今日の積み上げ
昨日に引きつつづき、MapKitライブラリと格闘。なぜかプレビューが真っ白の画面から動きません。。
```you’ll need to switch to a live preview to see it render.``` とあるので、何かをしなければ、地図表示されないのではと勝手に予想。でも何をすればいいのか分からない。。

誰か教えてくれないかなあ

![2022:12:04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/997222/4db55927-e389-d509-f987-61eed17d20e6.png)

# 蛇足
明日から復職です。心を殺して頑張るます！！！
【GAS】複数のURLのHTTPステータスコードを取得し結果を書き込む【テスト自動化】

google app scriptを使ってテスト自動化ツールを作りました。
機能としてはシンプルで、対象のURLを同じ列の別セルに入力し、実行ボタン押下で結果として「対象ページのHTTPステータスコード」が出力されるといったものです。

成果物は以下です。
■実行前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015455/4b660475-73ec-c139-3849-1434892f3cb0.png)
■実行後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015455/d053815e-0321-12a7-7fe8-d80fda946d8e.png)

※「タイトル」の情報は以下のスプレッドシートの機能で取得します。
　=IMPORTXML(xxx,"//title")
　xxx:対象URLが入力されたセル
　対象URLが数百になる場合、開くときに動作が重くなる場合があります。

※備考:判定結果列は以下のように書き、条件付き書式で色分けをしています。
　=IFS(D6="","",D6<400,"OK",D6>=400,"NG")
　（結果が何もなければ空白、400より小さければ「OK」を出力、400以上なら「NG」を出力）
　ここら辺は各々カスタマイズしてみてください。

■コード
D列へのHTTPステータスコード書き出し機能について、結論から書くと以下のようになります。

```js:コード.gs
function getStatusCode() {
　//書き込み先のスプレッドシートファイル
  let ss = SpreadsheetApp.getActiveSpreadsheet();
　//書き込み先のシート
  let sheet = ss.getActiveSheet();

  //シートの行数をB列で数える
  const sprt_values = sheet.getRange('B6:B').getValues();
  //空白の要素を除いた長さを取得
  const sprt_lastrow = sprt_values.filter(String).length;
  //配列で取得(xx行目、xx列、xx列の長さ、取得する列数)
  const sheet_data = sheet.getRange(6, 2, sprt_lastrow, 1).getValues();

  //取得した行の数だけステータスコードを確認＋シートへの書出を行う
  for (let i = 0; i < sprt_lastrow; i++) {
  //sheet_dataは二重配列になっているので、i番目の0番目（1個目）の要素を、入力されるURLとする
    let url = sheet_data[i][0];
  //Webサイトの情報取得
  //muteHttpExceptionsを有効化することで404などエラーの場合でもレスポンスを返すようにする
    let response = UrlFetchApp.fetch(url, {muteHttpExceptions: true})

  //実行ログへの結果の書き出し（任意）
    console.log(sheet_data[i][0] + "　ステータスコード：" + response.getResponseCode());

  //シートへの結果の書き出し
  //書き出し範囲を取得する
    let range = sheet.getRange(6 + i,4);
  //取得したWebサイトの情報からレスポンスコードの情報を書き出す
    range.setValue(response.getResponseCode()); 
  }
}
```
以上ですね。コードの解説は省略します。コメント文を参考にしてください。
エディタ上でのイメージは以下です。
矢印に示す「▶︎実行」ボタンから実行すると動作します。
(対象URLを書く位置は最初のイメージ画像のようにB6から下に書いてください。結果がD6から書き出されます。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015455/734e4b8e-4fbd-a28f-71ea-cf7e42e15587.png)

次にスプレッドシート上に上記の処理を実行するボタンを設置します。
シートに戻って、「挿入」→「図形描画」→「図形」のように移動し、
「ベベル（面取り）」を配置します。
(図形はなんでも良いんですが直感的にボタンぽい方がUIとして優れているかと思います。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015455/e6d87e30-19e9-50fc-a774-ae226d260339.png)
スプレッドシード上で作成した「ベベル（面取り）」を右クリックして3点リーダーから「スクリプトを割り当て」をクリック。
以下のように作成した関数名を入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015455/9ad59592-d796-89bd-0376-d31eaed77951.png)
そしたら最初に示した結果のイメージのように、ボタン押下でHTTPステータスコードがシートに書き込まれるはずです。
おめでとうございます。
読んでくれてありがとうございました。

また。
【Android】ライフサイクルのオーバーライドが非推奨になっていた話

# はじめに
長いことFragmentやActivity上でonResumeやonPauseなどのライフサイクル関数をオーバーライドするというのが習慣となっていましたが、こちらが非推奨になったようです。
こちらに関して簡単にまとめたいと思います。

# ライフサイクルのオーバーライドが非推奨になった
[公式](https://developer.android.com/topic/architecture/recommendations#lifecycle)のベストプラクティスには、以下記載があります。
![スクリーンショット 2022-12-04 17.07.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/3cd199b0-5da6-d354-43b8-c25860f6aba9.png)
上記には**強く推奨**とあり、少々圧を感じますね、、、
実装的には以下のように変わる形となります。

Before
```
override fun onPause() {
    super.onPause()
}
```

After
```
viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
   override fun onPause(owner: LifecycleOwner) {
       // ...
   }
}
```
個人的にはMVVMなどのアーキテクチャの浸透もあり、上記のようなObserverを使用する形の方がすっきりとして良い印象ですが、そもそも何故非推奨となったのでしょうか？
それは以下公式の記事に回答がありそうです。

https://developer.android.com/topic/libraries/architecture/lifecycle

ご紹介の記事内では、位置情報を取得する処理を参考資料として記載していますが、つまり**メンテナンス性やライフサイクル関数の競合が発生した際に乗せている実装によってはトラブルが起きる可能性がある**という問題に対してひとつの解決策として、ライフサイクルの置き換えを推奨しているということのようです。

# さいごに
こういった形で既存の機能がブラッシュアップされていくのは好印象ですね。
ComposeViewや上記LifecycleStateなど既存の実装を新しいものに置き換えて欲しいという意思をひしひしと感じるような機能が今後も増えていくはずなので、少しづつでも今のうちから対応していきたいところですね。
[HTML] nodejs + express でsessionStorage, localStorage を用いてログイン状態を管理

# 環境
nodejs
express
mongoDB

# Passport, サーバーからログイン状態を確認
```javascript
app.get('/', (req, res) => {
    res.render('index.ejs', { user: req.user })
})
```
ログイン状態をpassportを用いて、サーバーから確認することができる。

https://qiita.com/junzai/items/e1268bdeabf5e8223b15

# index.jsでログイン情報をsessionStorageで管理
```html:index.ejs
<% if (user) { %>
<script>
  // Check login data from session storage
  let user_id = `<%- (user.id) %>`;
  let user_name = `<%- (user.user_name) %>`;
  sessionStorage.setItem(
    "info",
    JSON.stringify({ user_name: user_name, user_id: user_id })
  );
</script>
<% } else { %>
<script>
  sessionStorage.removeItem("info");
</script>
<% } %> <%- include('./components/navbar.ejs') %>
```

サーバーから`user`の情報を渡し、`user`の情報が存在するならば、`sessionStorage`に情報を保存。
なければ、削除

# sessionStorageに情報があるなら、htmlをカスタマイズする。
```html:nav.ejs
// なるべく上段に置く
// ログイン状態をチェックし、ログインのsessionStorageがあれば、navのmypageの名前を自分の名前に変える
<script>
  var user_info = JSON.parse(sessionStorage.getItem("info"));
  if (user_info) {
    $("#mypage").html(user_info.user_name + "'s' Page");
  }
</script>
```

# 参考
```javascript:localStorage
localStorage.setItem('info', data);
localStorage.removeItem('info');
```

```javascript:sesstionStorage
sessionStorage.setItem('info', data);
sessionStorage.removeItem('info');
```

https://developer.mozilla.org/ja/docs/Web/API/Window/localStorage


# 終わりに
ログイン状態をサーバーから毎回確認する方が、セキュリティー的に安全であるが、どうしても0.1~0.2秒ほど時間がかかってしまう。
よって`sesstionStorage`もしくは`localStorage`に情報を保存することによって時間を圧倒的に短縮することができる。
ここではログイン後、ログアウト後に必ずメインページに飛ぶように設定したので、`index.js`でログイン状態を管理しているが、ログインした直後、ログアウト直後に`sesstionStorage`を管理する方が理想的かもしれない。
Vue3にVuetify3を導入

この記事は2022/12/4に作成しています。

Vuetify3(Titan)がリリースされました。

https://vuetifyjs.com/ja/introduction/roadmap/#v3-1-valkyrie

公式サイトを参考にVue3にVuetify3を導入してみます。

# インストール方法

## 新しくプロジェクトを作成
Vuetify3で新たにプロジェクトを始めるときは、以下を実行して作成すればよい。
``` 
yarn create vuetify
```

## 既存のプロジェクトにVuetify3を導入
まず、下記のコマンドを実行
```
yarn add vuetify@^3.0.3
```
次にCreateAppをしているファイルを下記のように変更

```
import { createApp } from 'vue'
import App from './App.vue'

// 追加
// Vuetify 
import 'vuetify/styles'
import { createVuetify } from 'vuetify'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'

const vuetify = createVuetify({
  components,
  directives,
})

// use(vuetify)を追加
createApp(App).use(vuetify).mount('#app')
```

参考リンク
https://next.vuetifyjs.com/en/getting-started/installation/
ネットワーク解析したい

 ## はじめに

### パケットからWebページを復元

「Wireshark」はパケットから HTMLファイル、JavaScript ファイル、画像などの **『HTTP オブジェクト』** が抽出できるらしいです。何と便利な、、、
抽出方法は2パターンあるみたいですが、今回は「オブジェクトをエクスポート」を行いたいと思います。


## やってみた

### 1. パケットを開く
まず、ダウンロードしたファイルをWireshark から開きます。開いてみると

<img src="https://i.imgur.com/KqLGxr0.jpg
" width="60%">

いっぱい通信が出てきました。プロトコルがHTTPなものが目に留まりますね。では、オブジェクトをエクスポートしていこうと思います。


### 2. ファイルから「オブジェクトをエクスポート」を選択

<img src="https://i.imgur.com/DdpSTQ0.jpg
" width="30%">　　<img src="https://i.imgur.com/l411p8R.png
" width="50%">

左の画像が選択していく画面です。今回はWebサイトの復元なので、HTTPを選択します。
選択すると右のような画像が開かれます。これらは、HTTPプロトコルのオブジェクトを抽出した **『HTTP オブジェクト』** となります。


### 3. 作業
今回はWebサイトの復元なのですべて保存してしまいます。
私は「Q16」というファイルを作成してそこに保存しました。

<img src="https://i.imgur.com/sasaiHL.png
" width="60%">

拡張子がないのが二つあります。コードを見てみました。その結果、
HTMLで記述されていることが分かりました。そのため、拡張子をHTMLに変更して開いてみると、下のような状態でした。

<img src="https://i.imgur.com/1w9Xs9z.png
" width="60%">

画像が表示されず、ボタンも反応がなかったのでもう一度コードを見るとcss や js などのが階層ずれていました。適切なディレクトリを入れてあげるとうまく動きました。
![成功した！！](https://i.imgur.com/IsL4s9h.jpg)

## 感想
今回はWebサイトの復元をしてみました。今回の問題は「オブジェクトをエクスポート」で問題なく解くことができましたが、うまく抽出できない場合もあるそうです。ちゃんと必要なものが抽出できているかを確認しながら使用していきたいと思います。大した内容を書くことができませんでしたが、とても楽しかったです。
引き続きネットワーク解析を勉強していきたいと思います。

## 参考資料
* [【PCAPからファイルを復元できる】WIRESHARK達人への道 第一歩 ファイル復元](https://www.mieruka.link/2020/04/17/wireshark%E9%81%94%E4%BA%BA%E3%81%B8%E3%81%AE%E9%81%93-%E7%AC%AC%E4%B8%80%E6%AD%A9/)
* [Wireshark のパケットキャプチャーから、HTTP オブジェクトを取り出す２つの方法](https://troushoo.blog.fc2.com/blog-entry-157.html)
* [WiresharkのExport ObjectでHTTPオブジェクトが上手く抽出できなかったときの対処法](https://mymanfile.com/?p=1814)

## アドベントカレンダー
* [アドベントカレンダー](https://qiita.com/advent-calendar/2022/ipfactory)
* 12月3日　[Windows で Hack The Box を楽しむ](https://y0d3n.hatenablog.com/entry/2022/12/03/173307) 　[y0d3n](https://qiita.com/y0d3n)先輩
* 12月5日　[atc ~ AtCoder Command Line Tool ~](https://duglaser.dev/articles/vzoL4DbtO7BtZGFlecuk)　[DuGlaser](https://qiita.com/DuGlaser)先輩
* 作問者　　[ほよたか](https://twitter.com/takahoyo?s=20&t=qtDINrZnhwb5kzyN9BJRjg)様
【超おすすめ】生産性爆上げブラウザ SideKickとは？？

# はじめに
みなさんSidekickというものをご存知ですか？？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/7ed93f27-d762-a8e8-c604-c097fe1898ec.png)



Sidekickとは、GoogleChromeでも使われているChromiumというものをベースで開発された仕事の生産性の向上に特化した、新しいウェブブラウザです！

基本的な設計はGoogleChromeと全く同じで、Chromeの拡張機能も使えます！

# Sidekickの魅力
#### 1. とにかく速い
AIが使っていないタブを自動的に認識してメモリの消費を抑えてくれたり、Ad blockerが標準で搭載されているため不必要な広告を目にすることなく生産性を高く保って仕事することができます！
#### 2. ブラウザ内に画面分割機能がついている
Sidekickでは、最大3つのタブを同時に表示することができます！
ブラウザを2つ開けば分割自体は可能ですが、ウェブブラウザ内で分割することで、ウェブブラウザを2つ開く手間やメモリの使用量を削減することができます！
このように画面のサイズも自由自在に変えられます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/7517fbe1-7610-9c97-c15e-ab1217100262.png)

使い方は、こちらのアイコンをクリックするか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/71473bc6-9826-4ddb-0d26-36df70563429.png)
ショートカットキーでmacならopt+b、windowsならalt+bで使うことができます！

#### 3. ブラウザ内にサイドバー機能がついている
よく使うアプリケーションをサイドバーに設置でき、左側に常に表示させることができます！
なので開くなった時に高速でアクセス！集中したい時はこちらのサイドバーを隠すこともできます！

1回数秒の操作ですが、塵も積もれば山となるということわざがあるように、積み重ねると大きな時間を生み出します！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/1f558edd-a2e8-b205-7852-1d934d15417f.png)

#### 4. 前に見ていたタブに戻るためのショートカットキーがついている
Macではopt+zで、windowsではalt+zで前に見ていたタブに移動することができます！
さっきどのタブを見ていたっけ・・・？ってなることよくありませんか？
このブラウザを使ってから僕はそんなことなくなりました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/e9774e66-5c3e-a0c4-3a55-3e595010bfed.png)


そのほかにもたくさんのメリットがあります！詳しくは公式サイトをご確認ください！↓

https://join.meetsidekick.com/niwio



# 最後に
Microsoft EdgeやGoogle Chrome等の長く使われているブラウザがある中で、急遽現れたSidekickは人気を博しています。

2020年11月にローンチされた新しいブラウザにも関わらず、MicrosoftやUber、SlackやMeta等の大手のIT企業にも採用されているそうです。

こちらのブラウザを使うと生産性爆上がりすること間違いなしです！

無料でダウンロードでき、フリープランでも申し分ないくらい生産性が爆上がりするので、入れて試してみてはいかがでしょうか？

https://join.meetsidekick.com/niwio
[AWS] Pythonを使ってAWSの不安（コスト）を取り除く！！

AWSで初めて使う人には、コストが心配になりますよね。

でも、Boto3を使えば安心です。

Boto3はAWSのPython用SDKで、AWSのさまざまなサービスにプログラムからアクセスするためのライブラリです。

Boto3を使えば、あらかじめテンプレートを作っておけば安全にAWSを操作できます。

この記事の内容はPython初心者でも簡単に使えます。

ただし、Pythonの環境構築ができていることとaws configureコマンドでAWSにアクセスできるようにしておく必要があります。


## 注意点

- コストのアラートはcloudwatchのメトリクスアラームを使ってトリガーを作ることが出来るのでスクリプトを組まなくても通知をする方法は別にある
- 今回はcronを使うことを想定


## boto3を使って直近xヶ月の料金を取得するための前準備

まずは今の月の最終日と３ヶ月前の月の一日を取得します。

今回は使う日にちのフォーマットは『YYYY-MM-DD』です。

今月最後の日を取得

```python

def get_last_day_cuurent_month():
    # 今月最後の日を取得
    last_day = calendar.monthrange(date.today().year, date.today().month)[1]

    # formatを整える
    last_day_formatted = date.today().strftime("%Y-%m-") + str(last_day)

    return last_day_formatted

```


3ヶ月前に一日を取得

```python

def get_firstday_three_month_ago():
    # 3ヶ月前の日にち
    start_date = date.today() - timedelta(days=90)
    start_date = start_date.replace(day=1)
    # Format the start date in the format YYYY-MM-DD
    start_date_formatted = start_date.strftime("%Y-%m-%d")

    return start_date_formatted

```

## 取得した日にちを元にコストを取得する

最後に取得したデータを元にAWSのコストを取得します。

```python

# AWS の Cost Explorer クライアントを作成する
client = boto3.client('ce')

def get_costs(start_date: str, end_date: str):
    # 分析する期間を設定する
    start_date = str(start_date)
    end_date = str(end_date)

    # 指定された期間の利用料金データを取得する
    response = client.get_cost_and_usage(
        TimePeriod={
            'Start': start_date,
            'End': end_date
        },
        Granularity='MONTHLY',
        Metrics=['BlendedCost']
    )

    # レスポンスから利用料金データを抽出する
    cost_data = response['ResultsByTime']

    # TimePeriod.End の値に基づいて、辞書のリストを降順で並べ替える
    sorted_list = sorted(
        cost_data, key=lambda item: datetime.strptime(item['TimePeriod']['End'], 
        '%Y-%m-%d'), 
        reverse=True
    )

    return sorted_list


```

下のスクリプトで試しにコストを出力してみる


```python

# 今月のコスト
print(cost_list[0]["Total"]['BlendedCost']["Amount"])
# 先月のコスト
print(cost_list[1]["Total"]['BlendedCost']["Amount"])

```

警告を表示してみる

```python

# 現在の利用料金が $10 を超えている場合は警告する
if current_cost > 10:
    print("Warning: Current cost is over $10.")

```

## まとめ

AWS を利用する上で、利用料金がいくらまで許容できるかは、企業や組織によって異なります。まずは、予算を設定しておくことで、利用料金が許容範囲内かどうかを把握することができます。

想定していた利用料金を超えた場合、今回はLambdaを使って警告を出し、その後の処理を書くことを想定しています。

またboto3では、今回は紹介していませんがどのサービスがいくら使われているかを把握することもできます。

その機能を使うことで、使われているサービスを分析し、必要ないものを停止するなどの処理を行うこともできます（時間があれば記事書きます）。

今回はboto3ですべ処理することを想定していますがAWSの利用料金が想定している限りを超えた時にBudgetsというツールを使って利用料金の警告を設定することができます。

Budgetsを使うことで、利用料金が想定した限りを超えた場合に通知を受け取ることができますのでなるべくスクリプトを組みたくない方はそちらを使うことをお勧めします。
contabo VPSのWireGuardにPeerを追加してみた

参照サイト
https://wiki.debian.org/WireGuard?action=show&redirect=Wireguard#Alternative_C_-_Import_by_reading_a_QR_code_.28most_secure_method.29
http://ubuntuyome.blogspot.com/2011/03/omg-ubuntu-ubuntu-qr.html

# クライアント用秘密鍵・公開鍵を生成する
03フォルダにそれぞれ秘密鍵・公開鍵が生成される
```
mkdir ~/wireguard/03
cd ~/wireguard/03
wg genkey | sudo tee client.key
sudo cat client.key | wg pubkey | sudo tee client.pub

```

# クライアント用設定ファイルを生成する
```conf:client.conf
[Interface]
PrivateKey = (clientPrivateKey3)
Address = 10.0.0.4/32
DNS = 8.8.4.4

[Peer]
PublicKey = (serverPublicKey)
AllowedIPs = 0.0.0.0/0
Endpoint = x.x.x.x:51820

```

# クライアント用設定ファイルのQRコードを生成する
```
qrencode -o client.png < client.conf
```

# クライアント用QRコードをWireGuardクライアントに読み込む





# サーバー設定をする
Peerを追加する場合は、下記コマンドでWireGuardを停止した状態で追加しないと
設定が消されてしまうようです。
```
sudo wg-quick down wg0
```


```conf:/etc/wireguard/wg0.conf(追記)
[Peer]
PublicKey = (clientPublicKey3)
AllowedIPs = 10.0.0.4/32
```
```
sudo wg-quick up wg0
```
自分のやっている全自動情報収集 at Slack を紹介していく

みなさんは普段の情報収集どうやってますか？私はSlackが無料提供しているRSSの機能を使って気になるサイトを購読して、空いてる時間で気になる記事だけ読んだりしています。

※こんな感じ
![スクリーンショット 2022-12-04 17.06.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/893208/068ac4e4-f2cb-30f1-80f9-9e6778fffd33.png)

やり方は簡単。記事を流したいチャンネルで
 `/feed subscribe [URL]` するだけです。これでURLの内容の更新を購読し、更新があった場合には差分だけSlackのチャンネルに勝手にSlack(正確にはfeedアプリ)が流してくれます。

以下に私が購読しているURLと所感を貼っておくのでやってみるのも良いかも(そのままコピペできる形にしてあります)

1. `/feed subscribe https://www.publickey1.jp/atom.xml` 
[PublicKey](https://www.publickey1.jp/)という技術記事のかでも割と技術寄りな記事を中心にしたサイトです。これを元に「あー今Amazon CodeCatalyst気になってるんだよねー」などと言い続けてるとその内意識他界系のレッテルを貼られます。

2. `/feed subscribe https://qiita.com/popular-items/feed`
言わずと知れた[Qiitaのトレンド](https://qiita.com/trend)です。毎日5,17時に更新されるのでかなりどさっと朝刊と夕刊がSlackに届きます。流行への敏感さ(Chat GPTみたいな新技術に対する反応が良かったりする)と情報カバー範囲の広さが特色だと思います。

3. `/feed subscribe https://b.hatena.ne.jp/hotentry/it.rss`
最後は[はてブのテクノロジカテゴリの人気エントリ](https://b.hatena.ne.jp/hotentry/it)です。
自分の普段触れない技術分野の面白い情報(例えば[ABEMA、5日深夜の「日本vsクロアチア戦」配信で“入場制限の可能性”](https://b.hatena.ne.jp/entry/s/av.watch.impress.co.jp/docs/news/1460888.html))も見れたりするので真面目なフィードの中にこういうのが1つあっても良いんじゃないかなという感じですね。

気付いた方もいらっしゃるかもしれませんがこれらは過去に雑食系エンジニア @poly_soft さんが[ご自身の動画](https://www.youtube.com/watch?v=YaGXyEFSbok)にておすすめされていたものです。気になる人はそちらも見てみると良いかも。

ではまた！
Cookieってなに？おいしいの？

# cookieって何？おいしいの？
## cookieの定義
- サーバからのレスポンスでブラウザに送られ、以降一定期間の間ブラウザに保存され、送信されるデータのこと。

## なぜ必要
### ステートレスなHTTP通信に、ステートフルな情報を期限付きで付加できるから
- 一定期間の間、毎リクエストでクッキー`Cookie: key=value`が送信される
- ブラウザ側で保持しておきたい情報やユーザの設定値を格納できる
- ユーザ認証に使える(ログイン情報を保持する)
## いつ使うの
- セッション管理
	- ログイン、ショッピングカートなど
- ユーザ設定
- トラッキング
## ヘッダー一覧
### `Set-Cookie`
- サーバがレスポンスで設定し、ブラウザに「この`Cookie`を保存しとけ、あとリクエスト毎に送信して来い」と指示する。

```
Set-cookie: cookie-price=130;cookie-kind=choco;
```

- また、有効期限なども設定できる
	- `Max-Age`:期間で指定
	- `Expires`:日付時刻で指定
	- `HttpOnly`:Javascriptの`document.cookie`によってアクセスできないようにする
	- `Secure`:HTTPSのみで`Cookie`を送信する(HTTPでは送られない)

```
Set-cookie: id=xxx; Expires=Thu,21 Dec 2022 12:00:00 GMT; Secure; HttpOnly
```


### `Cookie`
- `Set-cookie`で送信されてきたCookieが、リクエスト時にこのヘッダーに設定される
```
Cookie: id=xxx; cart-item=yyy;
```

## リスクと対策
### 性能面
- 毎リクエストで送信されるので、Cookieが大きいと通信性能が悪化
- **対策**:クライアント側で保存しておきたいデータは、代わりに`WebStorage API`や`IndexedDB`をつかう

### セキュリティ面
- 中間者攻撃
	- 暗号化されていない`HTTP`通信の場合、中間者に`Cookie`を傍受されるかも
	- **対策**: `Set-cookie`で`Secure`を設定し、`HTTPS`でのみ`Cookie`が送られるようにする

- **XSS(クロスサイトスクリプティング)攻撃**
> XSS攻撃: 攻撃者が悪意のあるスクリプトをクライアント側に埋め込み、ユーザがアクセスなどしたときに実行させる 

  - フォームなどの入力時に埋め込まれた悪意のあるスクリプトから、`Cookie`が参照され悪用される可能性がある
    - **対策**:`Set-cookie`で`HttpOnly`を設定し、Javascriptから`Cookie`が参照されないようにする

- **CSRF(クロスサイトリクエストフォージェリ)**
	- 古い呼び方だと「イメタグ攻撃」
	- 意図しないリクエストをWebサーバへ送信させる攻撃。
		- 例: 銀行口座から100ドルを送金するGETリクエスト`GET http://bank.com/transfer.do?acct=BOB&amount=100 GTTP/1.1`を`img`タグの`src`に埋め込み、ローディング時に発火させる
	- `Cookie`の有効期限が切れていない状態でこれを踏むと...
	- **対策**
		- CSRFトークンをサインインごとに再生成し、リクエストごとにヘッダーに含めるようにする。サーバ側でチェックし、期待値でなければリクエストを中止する。
		- `Cookie`の有効期限を短くする(`SameSite`属性を`Strict`or`Lax`に設定)
テスト自動化はツールありきで考えてはいけない


[テスト自動化失敗談を共有しよう！ by T-DASH Advent Calendar 2022](https://qiita.com/advent-calendar/2022/t-dash03)の４日目の記事となります。

### まとめ
- テスト自動化を検討する際にツールありきで考えてしまい、実際の開発プロセスに当てはめる際に受け入れてもらえなかった
- 「どのような開発プロセスの」、「どのフェーズに対して」、「何を確認するためのテストを自動化したいのか」を明確にする必要がある

### 失敗談
会社としてテスト自動化を推し進めるということで、新たにテスト自動化検討チームが立ち上げることとなり、私はそのメンバーの一人になりました。

その際に、
「単体試験ツールは既にそれぞれの開発プロジェクトで実施しているから良しとして、APIテストとE2Eテストは色々なツールがあるから、各ツールを調査して○×表作って選出しよう」
みたいな話になりました。
**しかし、この進め方は大きく間違っていました・・・**

### 何が間違っていたのか

現在の我々の会社は基本的にはウォーターフォール開発であり、いわゆる単体・結合・総合・システム試験が存在するような開発プロセスでした。（早くリリースするために一部テストを軽くしたりもしていますが）
単体試験は既にツールを使って運用していたので問題ありませんが、結合・総合・システム試験では使っておらず、基本的には人の手で実施したものが成果物（エクセル）となっています。
なので、自動テストツールから出力される成果物がこれまでの成果物と何が違うのか、それで十分なのか、を評価して関係者と合意しなければいけません。

### 結果
結果として、「APIテストとE2Eテストのツールからこれとこれが良いです」というものはあげたものの、「それは開発プロセスにどう当てはめるの？」となり、結局現状のプロセスの見直しまで後戻り作業が行われました・・・
当時はアジャイル開発にしていきたいとかそういう話も一緒に上がっていたので、カオスになっていたというのもありますが、それでももっとやりようがあったと思います。

### 教訓

まとめにも書いたとおり、テスト自動化を進めるにあたり、「どのような開発プロセスの」、「どのフェーズに対して」、「何を確認するためのテストを自動化したいのか」を明確にしてから具体的なツールの話をすべきだと思います。
また、結局やりたいことは「現状よりも工数を少なくして、早くリリースしたい」ということなので、テスト自動化に取り組むというよりは、現状の開発プロセス全体のボトルネックを調査して改善を検討するのが一番大事かと思いました。

あとこれは少し話が変わりますが、テスト自動化はチーム全体として必要だ、という認識を持って実施しないと続かないとも思っております（そうしないと結局メンテで苦労するので・・・）
tan 1◦ は有理数か「06年 京都大 後 理系 6」をwolframAlphaとsympyでやってみたい。

tan 1◦ は有理数か

オリジナル

https://kamelink.com/blog/2022/12/04/3-4-06kyoutodai-kou-rikei-6/


上と同じです。大学入試数学問題集成＞理系は【６】

https://mathexamtest.web.fc2.com/2006/200610541/2006105410200mj.html#top-0205

# wolframAlphaで
入力解釈
tan(1/180*π) は有理数か
結果
tan(π/180)は有理数ではありません
近似値
0.01745506(以下省略)...

https://ja.wolframalpha.com/input?i=tan%281%2F180*%CF%80%29+%E3%81%AF%E6%9C%89%E7%90%86%E6%95%B0%E3%81%8B


# (失敗例)wolframAlphaで

「tan 1◦ は有理数か」は、使ってはいけません。ラジアンでした。

https://ja.wolframalpha.com/input?i=tan+1%E2%97%A6+%E3%81%AF%E6%9C%89%E7%90%86%E6%95%B0%E3%81%8B

「tand 1 は有理数か」は、結果は(未知)近似値0.0174...(省略)

https://ja.wolframalpha.com/input?i=tand+1+%E3%81%AF%E6%9C%89%E7%90%86%E6%95%B0%E3%81%8B

「Is tand(1) an irrational number?」は、(unknown)

https://ja.wolframalpha.com/input?i=Is+tand%281%29+an+irrational+number%3F&lang=en



# sympyで
(勉強中)
```python
```


# 感想
ここで整数？自然数？(数学的帰納法)をもってくるのがすごいですね。
wolframも　やっていますかね？
sympyならソースコードありました。専門家の方へ。調べてもらうと助かります。

# 参考

https://qiita.com/mrrclb48z/items/62626e51308641e6eba9

https://manabitimes.jp/math/783
anaconda3のアンインストール後に起きたエラー



windows11でanaconda3をアンインストールしたのですが、
コマンドプロンプトが開かないというエラーが起きました。
windows terminalでコマンドプロンプトを実行すると以下のように出力される
`
[プロセスはコード 1 (0x00000001) で終了しました]
`

## 解決策

タスクバーの検索のところで"registry editor"
そして
以下のフォルダのAutoRunというレジスタを削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951246/20e9d91d-f472-31ca-520c-3d209cc6f5e0.png)
すると、コマンドプロンプトが正常に起動できました。

## 参考
http://ryouchi.seesaa.net/article/481121297.html
【Ruby】Fizzbuzzプログラムを作成しよう！

Rubyから少し離れていたので復習がてらFizzbuzzプログラムを作りました。
# Fizzbuzzプログラムとは？
Fizz Buzzとは、英語圏で行われている言葉遊びです。
プレイヤーが円状に座り、最初のプレイヤーは「1」と数字を発言し、次のプレイヤーは、直前のプレイヤーの次の数字を発言していきます。
ただし、発言する数字が３で割り切れる場合は「**Fizz**」、５で割り切れる場合は「**Buzz**」、１５で割り切れる場合は「**Fizz Buzz**」を数字の代わりに発言しなければなりません。
このFizzBuzzを、プログラムコードとして画面上に出力できるかどうかでプログラマーの技術力がわかるため、コーディング面接の題材としてよく使われています。

FizzBuzzプログラムは、以下のような挙動をするプログラムです。
- 3で割り切れる数値を引数に渡すと、「Fizz」を返す
- 5で割り切れる数値を引数に渡すと、「Buzz」を返す
- 3と5の両方で割り切れる数値を引数に渡すと、「FizzBuzz」を返す
- それ以外の数値は、その数値を文字列に変えて返す

# 要件
 - fizz_buzzメソッドを定義し、1から30までの数を渡す
 - ３で割り切れる数値をメソッドの引数に渡すと「Fizz」を返す
 - ５で割り切れる数値をメソッドの引数に渡すと「Buzz」を返す
 - ３と５の両方で割り切れる数値を引数に渡すと、「Fizz　Buzz」を返す
 - それ以外の数値は、その数値を文字列として返す
 - fizz_buzzメソッドで返ってきた値をputsで表示する

# fizz_buzzメソッドを定義
「3と5の両方で割り切れる数値」を**number % 3 == 0 && number % 5 == 0**という書き方でも表せますが、
もっとシンプルに考えて、3で割り切れる数値（＝3の倍数）かつ、5で割り切れる数値（＝5の倍数）は、
つまり15で割り切れる数値（＝15の倍数）なので、**number % 15 == 0**と書くことができます。

またプログラムは、上から下に順番に処理されるため、15の倍数は、3でも5でも割り切れる数値なので、**number % 15 == 0**を条件分岐の先頭に持ってくる必要があります。
**number % 3 == 0やnumber % 5 == 0**を先に書いてしまうと、そちらが先にtrueで評価され、期待どおりの挙動をしなくなってしまいます。

```ruby:fizz_buzz.rb
def fizz_buzz(number)
  # １５で割り切れる場合
  if number % 15 == 0
    'Fizz Buzz'
  # ３で割り切れる場合
  elsif number % 3 == 0
    'Fizz'
  # ５で割り切れる場合
  elsif number % 5 == 0
    'Buzz'
  else
    number.to_s
  end
end
```

# 1から30までの数値をfizz_buzzメソッドに渡し、戻り値をputsで表示
```ruby:fizz_buzz.rb
# 1から30をfizz_buzzメソッドに渡し、putsで表示
range = 1..30
range.each do |x|
  puts fizz_buzz(x)
end
```

# 完成コード
```ruby:fizz_buzz.rb
def fizz_buzz(number)
  # １５で割り切れる場合
  if number % 15 == 0
    'Fizz Buzz'
  # ３で割り切れる場合
  elsif number % 3 == 0
    'Fizz'
  # ５で割り切れる場合
  elsif number % 5 == 0
    'Buzz'
  else
    number.to_s
  end
end

# 1から30をfizz_buzzメソッドに渡し、putsで表示
range = 1..30
range.each do |x|
  puts fizz_buzz(x)
end
```

# 実行結果
3の倍数の時は「Fizz」、5の倍数の時は「Buzz」、15の倍数(3の倍数かつ5の倍数)の時は「Fizz Buzz」と出力されました。
![スクリーンショット 2022-12-04 17.16.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2604036/3ecf7e52-01d9-61ed-eca5-3b685048b9a0.png)
形態素解析ツールMecabをNode + Typescriptで実装してみた

# はじめに
PythonでMecabを使用している記事がほとんどだったため、Node + Typescript + mecabで実装してみた。
本記事の記載のコードは[こちら](https://github.com/yaki-sa/ts-node-mecab)にあるため、ご参考ください。

## Mecabとは
MeCabはオープンソースの形態素解析エンジンである。
MeCabは形態素解析ツールの中でも知名度が高く、実行速度が早いという特徴がある。


# Docker上にMecabをインストール
## Dockerfile
```Dockerfile:Dockerfile
FROM node:12-slim

# mecabの導入
RUN apt-get update \
    && apt-get install -y \
    mecab \
    libmecab-dev \
    mecab-ipadic-utf8

WORKDIR /src
```

## docker-compose.yml
```yml:docker-compose.yml
version: '3'
services:
  mecab-node:
    container_name: mecab-node
    build:
      context: ./
      dockerfile: Dockerfile
    tty: true # コンテナの起動永続化
    volumes:
      - ./src:/src
```

# コンテナ内でmecabの動作確認
## コンテナを起動する
```bash
$ docker-compose up -d
```

## 起動したコンテナに入る
```bash
$ docker exec -it mecab-node sh
```

## コンテナ内でmecabを実行する
今回は、半角・全角を混合した「昔々、ある所にお爺さんとお婆さんとﾏｲｹﾙが居たそうですよ!!」を試した。

### 実行コマンド
```bash
$ mecab
  昔々、ある所にお爺さんとお婆さんとﾏｲｹﾙが居たそうですよ!!
```
### 実行結果
mecabでは半角記号、半角英数字はフリガナを振ってくれていないため、Node + Typescriptでは、半角を全角に変換した上、mecabを呼び出すように実装した。（半角を全角に変換する処理は本記事で省略するため、[こちら](https://github.com/yaki-sa/ts-node-mecab)のgithubをご確認ください。）

```
昔	名詞,副詞可能,*,*,*,*,昔,ムカシ,ムカシ
々	記号,一般,*,*,*,*,々,々,々
、	記号,読点,*,*,*,*,、,、,、
ある	連体詞,*,*,*,*,*,ある,アル,アル
所	名詞,非自立,副詞可能,*,*,*,所,トコロ,トコロ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
お爺さん	名詞,一般,*,*,*,*,お爺さん,オジイサン,オジーサン
と	助詞,並立助詞,*,*,*,*,と,ト,ト
お婆さん	名詞,一般,*,*,*,*,お婆さん,オバアサン,オバーサン
と	助詞,並立助詞,*,*,*,*,と,ト,ト
ﾏｲｹﾙ	名詞,一般,*,*,*,*,*
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
居	動詞,自立,*,*,一段,連用形,居る,イ,イ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
そう	名詞,特殊,助動詞語幹,*,*,*,そう,ソウ,ソー
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
よ	助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
!!	名詞,サ変接続,*,*,*,*,*
EOS
```

# 実装
## Node + TypescriptでMecabを呼び出す
```ts:mecab.ts
import { tokenizeSync } from '@enjoyjs/node-mecab';
import { Token } from '@enjoyjs/node-mecab/src/types';

// MeCabを用いてフリガナ(全角)を抽出する関数
export const extractFurigana = (text: string) => {
  let katakana = '';
  const result = tokenizeSync(text);
  result.map((token: Token) => {
    if (token.feature.reading) {
      katakana += token.feature.reading;
    }
  });
  return katakana;
};
```

## 実行コマンド
```bash
npx ts-node index.ts 昔々、ある所にお爺さんとお婆さんとﾏｲｹﾙが居たそうですよ!!
```

## 実行結果
```
むかし々、あるところにおじいさんとおばあさんとまいけるがいたそうですよ！！
```

# さいごに
mecabを実行してみて、「昔々」の「々」が変換ができていないことがわかった。
git github 連携時のエラー

```
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/yamazaki2357/study.git/
```

2021年8月13日以降、GitHubのリポジトリにアクセスするには、ユーザ名とパスワードではなくアクセストークンが必要になった。

GitHubにログインして、右上の自分のアイコンをクリック → 「Settings」をクリック → 左メニュー下部の「Developer settings」をクリック → 左メニューの「Personal access tokens」をクリック → 右上の「Generate new token」をクリックしてアクセストークンを作成する。

アクセストークンを作成する時、「Select scopes」は少なくとも「repo」をチェックONにすること。また、作成したトークンの値を後でもう一度確認することはできないので、作成後はその場ですぐにコピーしてどこかにとっておくこと。

こうして作成したアクセストークンをパスワードの代わりに入力することで、GitHubのリポジトリにアクセスできるようになる。
シフト演算子を１から説明！(こちらはAIが作成しました)

:::note info
※こちらはAIが作成しました
:::
# シフト演算子について
シフト演算子は、ビットの左右への移動を行う演算子です。言語によって様々なシフト演算子が用意されていますが、一般的に使われるのは以下の3つです。

- 左シフト演算子 (<<)
- 右シフト演算子 (>>)
- 右シフト演算子(符号なし) (>>>)

### 左シフト演算子 (<<)
左シフト演算子は、指定されたビット数だけ、演算対象のビットを左へ移動します。左シフト演算子は以下のように記述します。

```
<<
```
例えば、以下のように左シフト演算子を使うと、演算対象のビットが2つ左に移動します。
```c
int x = 8;
x << 2; // 結果は32
```
### 右シフト演算子 (>>)
右シフト演算子は、指定されたビット数だけ、演算対象のビットを右へ移動します。右シフト演算子は以下のように記述します。
```
>>
```
例えば、以下のように右シフト演算子を使うと、演算対象のビットが2つ右に移動します。
```c
int x = 8;
x >> 2; // 結果は2
```
### 右シフト演算子(符号なし) (>>>)
符号なしの右シフト演算子は、指定されたビット数だけ、演算対象のビットを右へ移動します。このとき、移動した隙間は0で埋められます。符号なしの右シフト演算子は以下のように記述します。
```
>>>
```
例えば、以下のように符号なしの右シフト演算子を使うと、演算対象のビットが2つ右に移動し、隙間が0で埋められます。
```c
int x = 8;
x >>> 2; // 結果は2
```
シフト演算子は、ビット操作を行うための便利な演算子です。例えば、高速な計算や、データの圧縮などに利用されます。

また、シフト演算子は、論理演算子と組み合わせることで、さらに複雑な演算を行うことができます。例えば、以下のように論理 AND 演算子と左シフト演算子を組み合わせることで、与えられた数値を2のべき乗で割り、その結果を求めることができます。
```c
int x = 8;
x & (1 << 2); // 結果は4
```
シフト演算子は、数学的な演算とは異なるビット操作を行うため、初めて使う方にとっては少し難しいかもしれません。しかし、高速な計算や、ビット操作を必要とする場面では、非常に有用な演算子です。
### 終わりに
ここまで、シフト演算子について解説しました。シフト演算子は、ビットの左右への移動を行う演算子です。一般的に使われるシフト演算子は、左シフト演算子、右シフト演算子、符号なしの右シフト演算子の3つです。シフト演算子は、高速な計算や、データの圧縮などに利用されます。論理演算子と組み合わせることで、さらに複雑な演算を行うことができます。シフト演算子は、初めて使う方にとっては少し難しいかもしれませんが、理解することで、非常に有用な演算子となります。

# こちらはAIが作成しました
作成風景の画像を載せておきます
![無題の図形描画.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1783198/85df09da-cc6f-0bb2-da41-643a428809c6.png)
**Markdown記法** のことを指定しました
![無題の図形描画 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1783198/06430010-6b6f-bbd5-63c6-d9fa2bf91a12.png)
文字数制限のため**続きを書いてください**と指示しました
![無題の図形描画 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1783198/2630a481-a453-436f-f947-76ccb3cc79c9.png)
同じく、文字数制限のため**続きを書いてください**と指示しました
![無題の図形描画 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1783198/bc001a67-fffd-af72-1a61-48f1f9c517f8.png)
終わりにを書いてもらってそれにタイトルを付けてもらいました！

ではこれで終わります～
拠点間接続に困った話 (2)

謎のアドベントカレンダー、第 5 話です。

4 日目の **[拠点間接続に困った話 (1)](https://qiita.com/hmatsu47/items/80a9b66b1078dc2f2f07)** の続きです。

https://qiita.com/hmatsu47/items/80a9b66b1078dc2f2f07

## 中国に拠点を開設

細かい事情は避けますが、筆者の勤務先グループではサービス拡充のため、海外拠点も開設することになりました。

中国側は FTTB でビルまで光ファイバーが引き込まれていて、ビル内は 10Mbps Ethernet で各テナントがインターネット接続できるようになっていました。

国内拠点開設ですでに実績があるので、当初はこれまで通りインターネット VPN で本社と接続していました。

接続してからしばらくは、日本ほど速くはないものの、1Mbps 程度の速度は出ていたと思います。

## ある日突然 1Mbps が 40kbps に

今は周知の事実なので驚くことではないと思いますが、中国から海外へのインターネット接続は

- 元からあまり太くない（帯域が狭い）
- 中国側で規制が入ると遅くなったり繋がらなくなったりする

状況で、この話のタイミングも、中国国内での行事の直前に発生した事象だったと記憶しています。

帯域だけでなく、1,000 バイト程度のパケット遅延も 200ms 以内だったのが度々 1,000ms を超えるようになっていました。

文字だけの通信ならまだしも、業務上、画像を含むファイルのやり取りをしないといけない状況で INS ネット 64 や PHS と同じかそれ以下まで帯域が狭くなってしまったので、当然業務はストップです。

その後も多少の回復→悪化を繰り返していましたが、数日程度では完全に回復するようには見えませんでした。

## 日中間の VPN サービスを試用→契約

「ここは追加の出費もやむなし」ということになりました。

（正確には「強引に丸め込み」ました。いやー、悪い情シス担当者だ）

その頃数社が中国国内の大手通信事業者と提携して提供していましたが、そのうちの 1 社で、日中間の VPN サービスを試用することになりました。

これは日中間をインターネットではなく通信事業者が持つ回線を使って接続するサービスで、帯域保証がありました。

日本国内と比べるとかなり遅いのですが、当初は

- 日本側は名古屋〜東京 POP 間をインターネット VPN で接続
- 日中間の中継回線を 256kbps で接続（帯域保証）
- 中国側の地域 POP 〜ビルのフロアまでを公称最大 2Mbps（SDSL）で接続

という形で試用を開始し、契約しました。

1Mbps 未満なので遅いのですが、速度の揺らぎがなく安定して通信できるようになりました。遅延も 150ms 程度まで下がったと記憶しています（今はもう少し短くなっているはず）。

それと引き換えに、毎月十数万円が出て行くことになりました（VPN ルータのレンタル料、POP 利用料を含む）。

（通信量の増加に合わせて 512 kbps → 768kbps、と増速する都度月額費用も上がって行くのですが、その先の話は次回で）

## またも余談ですが

筆者は一度も中国側の拠点（この話の時点では 1 カ所、現在は複数）に行ったことがありません。

逃げ切ったぜ。

---

6 日目の記事に続きます。

- **[拠点間接続に困った話 (3)](https://qiita.com/hmatsu47/items/53f31c500ebf304fc45f)**

https://qiita.com/hmatsu47/items/53f31c500ebf304fc45f
pythonの浮動小数点について（備忘録）

## pythonの浮動小数点は、不正確！？

~~~python
>>> 0.3
0.3
>>> 0.1 + 0.1 + 0.1
0.30000000000000004
>>> 0.3 == (0.1 + 0.1 + 0.1) 
False
~~~

合計が違うのは、コンピュータが浮動小数点を表現する処理の際に、「丸め誤差が生じるから」IEEE 754規格のCPUを採用している場合は、python以外でも同じ結果になるらしい…
⇒IEEEは、2**53以上の整数値を表現できない

~~~python
>>> float(2**53) == float(2**53) + 1  
True
~~~

## より正確に計算をしたい場合は、「組み込みモジュールdecimal」を使おう！

浮動小数点のまま（不正確なまま）、decimal.Decimal()に引数として渡しても意味がない！
~~~python
>>> import decimal                     
>>> x = decimal.Decimal(0.1) 
>>> x              
Decimal('0.1000000000000000055511151231257827021181583404541015625')       
>>> x + x + x
Decimal('0.3000000000000000166533453694')
~~~

decimal.Decimal()に文字列として与えよう！
~~~python
>>> x = decimal.Decimal('0.1') 
>>> x
Decimal('0.1')
>>> x + x + x      
Decimal('0.3')
~~~
整数には丸め誤差がないので正確に渡すことができる。

## decimalの精度レベルについて

decimal.getcontext().precを使ってdecimalの有効数字を確認(デフォルトでは、28桁）

~~~python
>>> import decimal 
>>> decimal.getcontext().prec
28
~~~

decimal.Decimal().precに値を与えることで、有効数字を設定する
~~~python
>>> import decimal
>>> decimal.getcontext().prec = 4
>>> decimal.getcontext().prec
4
>>> decimal.Decimal(1) / 3 
Decimal('0.3333')
~~~
NetBSD/armでLチカ

とりあえずインストーラのramdisk.fsを使ってshが起動できるようになったので、クリスマスらしくLチカしてみます。

まずgpioctlを追加したramdisk.fsを作ります。

distrib/evbarm/instkernel/ramdisk/list

にgpioctlを追加します。

またデバイスのエントリーは勝手に生えてこなくてよく分からなかったので

distrib/evbarm/instkernel/ramdisk/list/obj/work.spec

に以下を追加してnbmakefsしました。

```
./dev/gpio0 type=char device=netbsd,173,0 mode=640 gid=5 uid=0
```

これでINSTALLなカーネルを作り出来上がったnetbsd.ubを読み込んで、sysinstからshを起動します。

```
# gpioctl gpio0 20 toggle
```

やっぱクリスマスは光り物に限りますね。
Databricks Certified Machine Learning Associate 合格体験記

# はじめに


![スクリーンショット 2022-12-04 午後4.21.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383330/5b422990-e18d-ab98-88fd-3c10865595c2.png)

本記事では試験の対策方法と実際に受けてみた感想を書いていきます

# Databricks Certified Machine Learning Associate

https://www.databricks.com/learn/certification/machine-learning-associate

上記サイトからの翻訳です

Databricks Certified Machine Learning Associate認定試験は、Databricksを使用して基本的な機械学習タスクを実行する個人の能力を評価します。これには、Databricks Machine Learningとその機能（AutoML、Feature Store、MLflowの一部の機能など）を理解し使用する能力が含まれます。また、機械学習ワークフローにおいて正しい判断を下し、Spark MLを使用してそれらのワークフローを実装する能力も評価されます。最後に、機械学習モデルのスケーリングに関する高度な特性を理解する能力が評価されます。この認定試験に合格すると、Databricksとその関連ツールを使用して基本的な機械学習タスクを完了することが期待されます。

# 試験方法

https://qiita.com/taka_yayoi/items/76dee9ec942274cb23ca#%E8%A9%A6%E9%A8%93%E6%96%B9%E6%B3%95

Databricks Data Engineer Associate試験と同じで、オンラインで受験可能でした。

# 必要スキル

サイトからの翻訳です

- Databricks Machine Learningとその機能を、機械学習ワークフロー内で使用することができる
    - Databricks Machine Learning（Cluster, Repos, Jobs）
    - Databricks Runtime for Machine Learning（基本、ライブラリ）
    - AutoML (分類、回帰、予測)
    - Feature Store(基本)
    - MLflow (トラッキング、モデル、モデルレジストリ)
- 機械学習のワークフローにおいて、以下のような正しい判断を実行する。
    - 探索的データ解析（要約統計、外れ値除去）
    - 特徴量エンジニアリング（欠損値の補完、ワンホットエンコーディング）
    - チューニング（ハイパーパラメータの基本、ハイパーパラメータの並列化）
    - 評価と選択（クロスバリデーション、評価指標）
- Spark MLやその他のツールを用いて、以下のような機械学習ソリューションをスケールで実装できる
    - 分散MLコンセプト
    - Spark MLモデリングAPI（データ分割、学習、評価、Estimator、Transoformer、Pipeline）
    - Hyperopt
    - Pandas API on Spark
    - Pandas UDFsとPandas Function APIs
- 以下のような古典的な機械学習モデルの高度なスケーリング特性を理解している
    - 分散線形回帰
    - 分散型決定木
    - アンサンブル手法（バギング、ブースティング）

# どのように対策したか

https://github.com/databricks-academy/scalable-machine-learning-with-apache-spark-japanese

上記のリポジトリのノートブック(日本語)と付属のスライドを読み込むことをやりました
付属のスライドではデータサイエンスの基礎から解説されているので、初学者でも学び始めることができます

https://qiita.com/taka_yayoi/items/5918a0e88d9b2472578c

Reposが使えないのでどうにかNotebookを入れる必要はありますが、コミュニティエディション(無料版)でも一通り実行できるかと思います

# 受けてみた感想

公式サイトに載っている得点割合ごとに感想を書きます。
- **Databricks Machine Learning – 29% (13/45)**
Databricks特有の機能Feature Store、ML Runtime、AutoMLなどの仕様についての質問でした。
- **ML Workflows – 29% (13/45)**
MLFlowの使い方、エクスペリメントやモデルレジストリの使い方についての質問でした
MLFlowのAPIの選択問題がメインで判断に迷うことが多かったです。
またデータサイエンス一般の質問もあり、分類問題におけるメトリクスの違いを問いて来るものもありました
- **Spark ML – 33% (15/45)**
一番問題数として多く、Spark ML APIのデバッグや正誤問題が出るので判断に迷うことが多かったです
ImputerがEstimator、OneHotEncoderの前段にはStringIndexer入れないとエラーになるよといった勘違いしやすいポイントを全部ついてきた感じでした。
- **Scaling ML Models – 9% (4/45)**
Pandas Function APIを使った並列モデルトレーニングなどかなり高度なことが問われましたが、Notebookの解説を読んでおけば解答できるレベルの質問でした。

# おすすめの対策法

[scalable-machine-learning-with-apache-spark-japanese](https://github.com/databricks-academy/scalable-machine-learning-with-apache-spark-japanese)を進めていただくことになります。Data Engineer Associateと違って模擬試験がないので対策に使えるのはこれしかありません
Notebookの解説に書いてあることを理解することで、API暗記をがっつりしなくても合格点まではいくと思います。
アンサンブル学習についてなどデータサイエンス一般についての知識も求められるので、適宜書籍などで補完して納得してから受験されることをおすすめします
やせたらQOLが上がった話

## はじめに
この３年間で体重が１０キロ増えましたが、増えたところから１０キロ減らしました。
体重を減らしたら生きやすくなりました。
![8E591569-DD59-4F73-8CAC-9C621E6E0E1A_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003972/8bc266ea-a346-3c88-4952-4088a977f5d9.jpeg)


:::note warn
個人の感想です
:::



## やったこと
なんでもないようなことが大切だったと思う
- 食事に気をつけた
- 運動するようにした

### 食事に気をつけた
全てがどうでも良くなって、完全に無軌道な食生活を送っていました。
自暴自棄は脳を破壊する！（？）
#### この３年間の食生活
好きな時に好きなものを食べ、仕事時はポテトチップスと炭酸飲料が寄り添ってくれた。
大盛無料は絶対正義だったし、雨が降ったらUberEeatsでできる限りの大盛りを頼んだし、毎週ドミノピザのクーポンが切れる前に使う日々を過ごしていました。

#### 私はこうした
- 自分へのご褒美をやめた
- 一人で外食をしない
- お腹が空くと集中できない？集中できなくなったら腹筋ローラーをやれ。
- 在宅勤務時は座らない
- 食べたものを記録する
- 初期：スーパー・コンビニをやめて冷食弁当と玄米にした
- 中期：玄米・冷食弁当をやめてオートミール中心にした
- 低温調理器を買った

### 運動をするようにした
#### この３年間の運動履歴
毎月、事務の料金を払っては月の土地を買ったような気になっていた。
たまに思い立っては散歩をしていたが、習慣と言えるようのものではなかった。
土日はもっぱら自室で無の心象風景を見て過ごした。
出勤しないことで身体性からの解放を試みていた。

#### 私はこうした
- 短い時間でもジムに行こう。なんか重りのついた紐を引っ張るだけでも。
- お腹が空くと集中できない？集中できなくなったら腹筋ローラーをやれ。
- 毎日２時間歩こう。出退勤歩くだけでクリア可能！（同じ場所で写真を撮ってInstagramに投稿する習慣をつけた）
- 電車使わない

### やせたらこんなに良くなった！
- 横になると息ができなかったのが息が出来るようになった
- 食費がめちゃくちゃ安くなった（反省：浮いたお金で酒を飲んだ）
- 疲れにくくなった
- なんだかやる気が出てきた！

### 今後の目標
靴紐結ぶときに呼吸ができるようになる
ts 配列からundefinedを取り除く方法


## やりたいこと
以下のコードのように filter を使った時、undefinedの型を取り除けないので、取り除けるようにしたい
```
array.filter((data) => !!data)
```

## 方法１（ダメな方法）
以下のように as でアサーションする
この場合、配列自体が undefined のケースを考慮できていない
```
array.filter((data) => !!data) as string[]]
```

## 方法２（良い方法）
Type Guardを使う
こちらは参考にさせていただいたサイトの方法で、配列の型から undefined を除外するのに`NonNullable` というユーティリティ型を使用しています
```
array.filter(
    (data): data is NonNullable<typeof data> => !!data
  )
```


## 参考
https://www.gaji.jp/blog/2022/11/18/12234/
Workload Identity連携でAWSからBigQueryにアクセスする

LIFULLのYstgです。3ペダルMT車至上主義です。愛車は15年式デミオ(ディーゼル)です。

## はじめに
この記事は[LIFULL Advent Calendar 2022](https://qiita.com/advent-calendar/2022/lifull)の5日目の記事です。
GoogleCloud の Workload Identity 連携を使ってEC2インスタンスからBigQueryに接続してみました。
EC2インスタンスからサービスアカウントキーによる認証で GoogleCloud に接続している人は参考になるかもしれません。

## Workload Identity 連携とは
Google Cloudのドキュメントには下記のように書かれています。
> 外部ワークロードのためのID連携を使用することで、サービスアカウントキーを使用せずに、Google Cloudリソースへのアクセス権を、オンプレミスまたはマルチクラウドのワークロードに付与できます。
（[Workload Identity 連携](https://cloud.google.com/iam/docs/workload-identity-federation)より引用）

文章で読んでもなんだかわかりにくいと思うので、図で。

### 従来のサービスアカウントキーによる認証

図のようにGoogleのIAMで設定したサービスアカウントの認証キーを用いて認証をする必要があり、また、サービスアカウントには強力な認可が与えられているため、漏出した時のリスクが大きいため、認証キー(図中の赤いファイル）の管理は厳重に行う必要がありました。
![before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536211/b0c436f7-19bc-350f-b297-386327f00d85.png)

### Workload Identity 連携 による認証
下記のような手順に変わります。（実際は3の部分は`gcloud auth login`コマンド実行で行われ、4の認証は`bq`コマンド実行時に毎回行われます）

1. AWSのIAM Role をWorkload Identity Pool上でサービスアカウントに紐づけておく。
2. 紐付けの設定ファイル（clientLibraryConfig.json)が得られるのでこちらをBigQueryにアクセスさせたいEC2上においておく
3. 設定ファイルを用いて認証を行うと有効期間の短いアクセストークンが得られる
4. 有効期限の短いアクセストークンを用いて認証するとサービスアカウントと同等の認可が得られる

紐付けの設定ファイルには機密情報は記述されていないため、github上での管理やAMIへの保存も可能です。万が一漏出してもAWS側の認証が通らなければサービスアカウントとしてBigQueryや他のGoogleCloudサービスに不正にアクセスされることはありません。

![after.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536211/b7b6ae30-3b86-23db-667d-1e4adc6b8e8d.png)

具体的な手順などは [参考とさせてもらった記事][link-1] などに詳しいです。

サービスアカウントの認証情報を利用せずにサービスアカウントの権限をAWSのRoleに委譲できるので大変便利です。

なお、gcloud sdk のバージョンが古いと利用できないので注意してください。

## 参考資料

[Workload Identity連携でAWS（EC2/ECS/EKS）からサービスアカウントキーなしでBigQueryにアクセスする][link-1]

[link-1]: https://zenn.dev/ohsawa0515/articles/gcp-workload-identity-federation
スケアウェア とは

## 勉強前イメージ

いや、、、、イメージつかんかも

## 調査

### スケアウェア とは

Scareware と書き、scareの意味でユーザに恐怖心を与える意味のマルウェアのことを指します。
ユーザに恐怖心を与えるて情報や金銭を奪うマルウェアということで
ウイルスに感染した意味のポップアップを表示させたりしてユーザの不安を煽って情報を取得するなどする動きをします。

例えば、ウイルスに感染したポップアップを表示させウイルス対策ソフトを購入させたりし
その購入したウイルス対策ソフトが外部に情報を渡してる・・・というものがあったりします。

スケアウェアは以下のようなことをPCでします。

- 脅す

パソコンがウイルスに感染している等の情報で脅してユーザに恐怖を与えます。
特に実在する会社名などが使われていることが多いです。

- プログラムのインストールを促す

特にセキュリティ対策ソフトなどのインストールを促します。
インストールするウイルス対策ソフトはもちろんウイルス対策にはならず、逆に情報を奪われたりします。

もし、スケアウェアが表示されたとしても支払い等の必要はアリません。
正規のセキュリティソフトでの駆除を行い、定期的に更新プログラムの適応を進める必要があります。

## 勉強後イメージ

よくあるあるってやつやね。
あれスケアウェアって呼ばれるんや・・・・

## 参考

- [スケアウェアとは？その症状や駆除・対策方法を解説](https://cybersecurity-jp.com/security-measures/24332)
- [スケアウェアってなんですか？](https://dflabo.co.jp/column/20220809/)
Visual Studio CPUIDをアセンブラで表示してみた

# 環境
Windows 11 Pro (64bit)
Visual Studio Community 2022

# ソースなど

## バッチファイル

```dev32.bat
@echo off
path %path%;D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x86
set lib=%lib%;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x86
cmd
```

## アセンブリ ソース

```cpuid.asm
comment *
ml /c cpuid.asm
link /subsystem:console cpuid
*
includelib kernel32

.model flat

NULL equ 0
STD_OUTPUT_HANDLE equ -11

ExitProcess proto stdcall :dword
GetStdHandle proto stdcall :dword
WriteConsoleA proto stdcall :dword,:dword,:dword,:dword,:dword

.data
buf	dd	3 dup (0)
	db	0dh,0ah
len	equ	$ - buf

.data?
hConOut	dd	?

.code
start proc c
	invoke	GetStdHandle, STD_OUTPUT_HANDLE
	mov	hConOut, eax

	mov	eax, 0
	cpuid
	mov	buf, ebx
	mov	buf+4, edx
	mov	buf+8, ecx

	invoke	WriteConsoleA, hConOut, addr buf, len, NULL, NULL
	invoke	ExitProcess, 0
start endp

end start
```

# 実行例

```
D:\Projects\msvc>ml /c cpuid.asm
Microsoft (R) Macro Assembler Version 14.34.31935.0
Copyright (C) Microsoft Corporation.  All rights reserved.

 Assembling: cpuid.asm

D:\Projects\msvc>link /subsystem:console cpuid
Microsoft (R) Incremental Linker Version 14.34.31935.0
Copyright (C) Microsoft Corporation.  All rights reserved.


D:\Projects\msvc>cpuid
GenuineIntel

D:\Projects\msvc>
```
Vue3+element-plusでエラーが生じる問題

# エラー状況
既存のVueプロジェクトにElement-Plusを組み込もうとしたところ、下記のエラーが発生
## 実行コマンド
```
vue add element-plus
```
## エラー
```
 Running completion hooks...
 ERROR  TypeError: Cannot read properties of undefined (reading 'replace')
TypeError: Cannot read properties of undefined (reading 'replace')
    at C:\Users\*****\Coding\vue-typescript\node_modules\vue-cli-plugin-element-plus\generator\index.js:45:45
    at runGenerator (C:\Users\*****\AppData\Roaming\npm\node_modules\@vue\cli\lib\invoke.js:132:13)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async invoke (C:\Users\*****\AppData\Roaming\npm\node_modules\@vue\cli\lib\invoke.js:92:3)
```
### 発生原因
GitHubのIssuesで同じエラーに遭遇している方々を発見

https://github.com/element-plus/vue-cli-plugin-element-plus/issues/12


上記から
・どうやらESLintとの相性が悪いらしい
・element-plusはメンテナンスされていなく、バグも解決していない
とのことだったので、ESLintと一緒に使用するのは断念

Vuetify3がリリースされたようなので、そちらを試してみます
→https://qiita.com/luckydarts/items/d250ea6bc4d620a00dc1
【Go言語を学習して感じたこと  ~他の開発言語と比較してみた~】

こんにちは。
新卒入社3年目文系出身のエンジニアです。
次の案件がGo言語を使用するとのことなので、
今ProgateやA Tour of Goを用いて学習しているのですが、
他の開発言語と異なる点を踏まえて、
印象的に感じたこと・驚いたことについてまとめてみました。
これからGo言語を勉強する方に参考になっていただければ幸いです。

### 変数の型定義が独特!
Java, JavaSciript, Go言語で比較していこうと思います。
Javaは**型名、変数名**の順番で定義していきます。
```java:hello.java
String message = "";
Int number = 123;
```

JavaScriptでは、グローバル変数をつけると以下のようになります。
※グローバル変数とは？・・・プログラム内のどこからでも使える変数, 関数の外側でも使用することができる変数のことです。例）var, let
```javascript:hello.javascript
var string message = ""
let int number = 123
```
しかし、Go言語だと**変数名、型名**の順番で定義していきます。
```go:hello.go
var message string = ""
var number int = 123
```
JavaやJavascriptのほうが慣れていたこともあって、
定義するだけでGo言語は混乱するし、
すごく間違えそうやなと思いました笑

### :=が便利！
var宣言の代わりに:=の代入文を使用し、暗黙的に型変換することができます。
ある程度見ればどの型かわかるようなものは、「:=」を使用したほうが時間短縮につながると思いました。
```go:hello.go
i := 3;
boo := true;
```

### 関数定義は4文字のみ？
JavaやJavaScriptでは、public functionなどがっつり関数定義をしないといけないですが、Go言語は、funcだけで関数定義ができるらしいです。
```javascript:hello.javascript
public function {
}
```
```java:hello.java
public static void main() {
}
```

```go:hello.go
func main() {
}
```

### import文をグループ化できる
タイトル通りですが、Goではfactoredインポートステートメントを用いて、
import文をグループ化することができます。
```go:hello.go
import (
    "fmt"
    "string"
)
```
このimport文をグループ化することはGoを学習して初めて知りました。
他の開発言語もあったらいいなぁなんて思ってしまいました。。

### 最後に
ここまで読んでくださり、ありがとうございました。
私自身、Go言語が初心者すぎるので、
今回学習しながら他の開発言語と比較してみて、
自分が印象的に思ったこと・驚いたことを簡潔にまとめてみました。
これからGo言語を使用するにあたって、
研究していきながら日々知見を増やしていきたいと思います。

### 参考URL
https://blogenist.jp/2019/03/22/7750/#i

https://code-graffiti.com/variables-and-data-types-in-javascript/

https://webukatu.com/wordpress/blog/39784/

### Go言語学習サイト
https://go-tour-jp.appspot.com/list

https://prog-8.com/courses
ターミナルの入力文字を一括で削除するショートカットキー

# macでターミナルの文字を一括削除するショートカットキー

未経験で入社して３か月が経ったある時ターミナルで入力した文字数がかなりあったため、
いつも通りbackspaceキーで消してたのですが、絶対一括削除するショートカットキーがあると思い調べたところやっぱりありました。

```:ターミナルの文字を一括削除するショートカットキー
macの場合： control + u
windowsの場合: ctrl + u
```
# 比較
### Backspaceキーで消していた時
![3ece1724a2afce7b7f20dc01830cd702.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2604036/08b777c8-049b-32d7-e4c5-f43728eb1bae.gif)

### ショートカットキーを使った場合
![cc08ff52de7cb03a731f495744ef4726.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2604036/7ea1aeb1-2567-4856-6077-0122d22b4a00.gif)

圧倒的な違いですね。
ちょっとしたことも覚えれれば、かなり時間の短縮になりそうです。
iOSエンジニアに転職して半年経ったので感想を書く

# はじめに
この記事はこれからエンジニアに転職を考えている方やプログラミングって難しいやろ？って思っている方に向けて、一人でも多くのエンジニアに転職を考えている方々の力になればと思います

# 学歴・職歴
私の紹介を簡単に

私の最終学歴は高校卒です！部活は中学校からバスケをしてました。

2012~2021　エンジニア
2021~2022現在　転職してiOSエンジニア

2012からはメーカーに入社して、AGV（自動搬送機）の設計から製作〜納品までを担当しておりました。
業務内容は、ざっくり

仕様打ち合わせ　
↓
制御盤設計
↓
電気回路設計
↓
ソフト設計(PLC)
↓
制御盤配線
↓
動作確認
↓
納品
↓
動作確認

こんな感じです。

後静岡と大阪にも仕事の都合で住んでました。
今は東京ですが、関西の方が楽しいですね。元々広島で生まれたのもあって関西の雰囲気の方が好きです。将来は京都で暮らしたいと思ってます。
2012~2015　静岡事業所勤務
2015~2020 大阪事業所勤務
2020~2021 静岡事業所勤務


前職ではPLCのラダープログラムは触っておりました。結構プログラムを書いて自分が期待する動きが出来た時は嬉しかったのですね。
その後色々あって会社の方でAndroidのアプリを開発することになり、自分が担当になったのですが訳わからず笑
全く出来なかったので転職しちゃいました笑

そして今の会社に至ります。現在はswiftをやっております。

正直私は頭も悪いし、要領も悪いので今とても苦しいです。全然コードが書けない、読めない、、、
打ち合わせの会話の内容も難しいし、何言っとんの？って感じです。
でも筋トレを６年やっていて体を動かすことは好きです。フィジークの大会にも出て入賞することが出来ました。なのでコツコツやり続けることは出来ると自負しております。
そんな感じで今も毎日コツコツ勉強しております。。

# 半年経っての成長具合と勉強時間

・基本構文は分かるようになった。簡単なものなら書ける
・高階関数を少し書けるようになってきたかな？
・クロージャは完璧ではないが、先輩が書いたコードを見て追えるようになった
・ジェネリクスは意味が少し分かるくらい
・HTTPメソッドなどについて少し分かる
・Api通信など

勉強時間

平日
通勤時間にiPadで書籍を見て勉強　(1H)
仕事 (8H)
帰りの電車でiPadで書籍を見て勉強 (1H)
帰宅して少し勉強 (0.5H)

休日
勉強よりも学習した内容をアウトプットすることに力を入れる
大体６時間くらい

ざっくりこんな感じです。正直センスがないのか本当に成長出来ないですね。でもやらないと成長出来ないのでやるしかないですね！！頭がキレる人なら半年もあればだいぶコードを書ける人いっぱいいそうですね。

# これから転職を考えている方へ

私自身プログラミング向いていないんじゃないかとかよく考えることがあります。半年間ほとんど勉強してもほとんど何にも出来ないのが自分の現状です。
正直プログラミングの勉強は想像していたより遥かに難しいですが、頑張っていればいずれコーディング出来るようになると信じて頑張るしかないです。会社の人達に助けて頂きながらなんとか頑張れてます。
私はかなり覚えが悪いので苦戦していますが、出来る人すぐに出来てしまいそうな感じはしています。
転職するのはかなり勇気が必要だと思いますが、転職してしまえばなんとかなります笑
You Only Live Once!!人生１度きり！辛いことも楽しめるようになりたいですね！！

# 最後に
私のyoutubeのチャンネルのリンク貼っておくので良かったら是非見てください笑
https://www.youtube.com/@user-yc6tf7ke5x
【WordPress】Webサイトのタイトルや、ヘッダ画像など、基本的なUIを設定をする

# 前回の記事

前回の記事では、ロゴ画像やファビコンを設定しました。

https://qiita.com/raptony110/private/c981854005acffd9906e

今回は、ロゴ画像ではなくて、文字のタイトルにしたり、サイトのヘッダ画像を差し替えたり、カスタマイズして、サイト全体のデザインを決めていきましょう。

僕のAdvent Calendarを読み終わった人が、
「へぇ簡単なんだなぁ〜　自分もWordPress使ってサイト作ってみようかな〜」って思うあなたがそこにいたのなら、、、、
読むだけで、頭の中WordPress化しちゃったんだよッ！！！！

https://qiita.com/advent-calendar/2022/wordpress-output

# サイトのタイトルを設定する
サイトのタイトルもサイト基本情報の中にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/9753fe3c-8614-cef1-752b-0583be34d644.png)
変更前は、「Raptonyのサンプルサイト」という値が入っています。これを「Raptony Lab.」に変更したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/266c59cc-f268-e0dd-4660-a133823e4143.png)
ついでにキャッチフレーズも設定してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/1715f168-5fc9-9b94-9c95-811e078694a0.png)
このようにロゴが消えて、タイトルが現れる形になります。もし変更したにも関わらずタイトルが表示されない場合は、ロゴ画像が優先されて表示されている可能性がありますので、ロゴの画像設定を削除すると表示されます。

# ヘッダ画像を設定する
ヘッダ画像の変更は、ヘッダー画像メニューから行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/649f693e-e1ba-818f-9a1e-0a596dc0f20a.png)
今は画像が設定されていない状態だと思いますので、画像を指定すれば表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/9f0fa53c-9316-25b7-b029-6ae985f5947e.png)
このようにBlogサイト上部の画像が変更されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/281a7625-e9d8-015c-8f99-a41e8185c592.png)

# おわりに
いかがでしたでしょうか。今回は、ロゴではなく、Webサイトをタイトル表示に変更したり、ヘッダー画像を変更したりしました。ここまででだいぶ雰囲気がつくられたかと思います。

次回は、コピーライトの設定についてです。そもそもコピーライトとはなんでしょうか。お楽しみに！