OmniAICreator/Qiita-1.07M huggingface dataset:
【Swift】浮動小数計算時の誤差を無くす方法

## はじめに
実務の中で、小数同士の計算時に誤差が生じてしまい解決に時間がかかったため、備忘録を残します。

## 原因
まず以下の計算をすると普通0.02になるかと思います。
```swift:
let n1:Double = 10.36
let n2:Double = 10.34
let n3:Double = n1 - n2
print(n3)   // 0.019999999999999574
```
しかし結果は、0.01999...4
なんで？？？


どうやら、
 **浮動小数点数は二進数で表現されるようなので、十進数で表現できる数値を正確に表すことができないようです。**


## 解決方法
解決方法としては、以下のように **「NSDecimalNumber」** を使って解決しましょう！
今回は減算の計算でしたが、加算や乗算などの計算も可能です。
```swift:
let n1:Double = 10.36
let n2:Double = 10.34

let d1:NSDecimalNumber = NSDecimalNumber(string: "\(n1)")
let d2:NSDecimalNumber = NSDecimalNumber(string: "\(n2)")
let sub:NSDecimalNumber = d1.subtracting(d2)
print(d3)   // 0.02
```

## 四則演算メソッド
以下の4つ以外にも、累乗などのメソッドも提供してくれているのでドキュメントなどで確認してみてください！
### 加算
```swift:
let add:NSDecimalNumber = d1.adding(d2)
```

### 減算
```swift:
let sub:NSDecimalNumber = d1.subtracting(d2)
```

### 乗算
```swift:
let mul:NSDecimalNumber = d1.multiplying(by: d2)
```

### 除算
```swift:
let div:NSDecimalNumber = d1.dividing(by: d2)
```

## 参考資料

https://developer.apple.com/documentation/foundation/nsdecimalnumber
XunziALLMトークナイザの「精度」をUD_Classical_Chinese-Kyotoのtestセットで測る

[6月10日の記事](https://qiita.com/KoichiYasuoka/items/8b30e399b35d13ceb881)の続きだが、古典中国語(漢文)生成モデル[XunziALLM](https://github.com/Xunzi-LLM-of-Chinese-classics/XunziALLM)のうち、[Xunzi-Qwen1.5-4B](https://www.modelscope.cn/models/Xunzillm4cc/Xunzi-Qwen1.5-4B)・[Xunzi-Qwen1.5-7B](https://www.modelscope.cn/models/Xunzillm4cc/Xunzi-Qwen1.5-7B)・[Xunzi-Qwen1.5-14B](https://www.modelscope.cn/models/Xunzillm4cc/Xunzi-Qwen1.5-14B)・[Xunzi-Qwen2-1.5B](https://www.modelscope.cn/models/Xunzillm4cc/Xunzi-Qwen2-1.5B)・[Xunzi-Qwen2-7B](https://www.modelscope.cn/models/Xunzillm4cc/Xunzi-Qwen2-7B)のトークナイザ「精度」を、[UD_Classical_Chinese-Kyoto](https://github.com/UniversalDependencies/UD_Classical_Chinese-Kyoto)のlzh_kyoto-ud-test.conlluで測ってみた。Google Colaboratoryだと、こんな感じ。

```
!pip install transformers modelscope sentencepiece spacy-alignments
models=["Xunzillm4cc/Xunzi-Qwen1.5-4B","Xunzillm4cc/Xunzi-Qwen1.5-7B","Xunzillm4cc/Xunzi-Qwen1.5-14B","Xunzillm4cc/Xunzi-Qwen2-1.5B","Xunzillm4cc/Xunzi-Qwen2-7B"]
ud="UD_Classical_Chinese-Kyoto"
!test -d $ud || git clone --depth=1 https://github.com/universaldependencies/$ud
!cp $ud/*-test.conllu test.conllu
from modelscope import AutoTokenizer
from spacy_alignments import get_alignments
for mdl in models:
  tkz=AutoTokenizer.from_pretrained(mdl,revision="master")
  gold=system=correct=0
  with open("test.conllu","r",encoding="utf-8") as r:
    for k in r:
      if k.startswith("# text ="):
        txt=k[8:].strip()
        frm=[]
      elif k.strip()=="":
        g=[(t[0],t[-1]+1) for t in get_alignments(list(txt),frm)[1]]
        s=[t for t in tkz(txt,return_offsets_mapping=True)["offset_mapping"] if t[0]<t[1]]
        gold+=len(g)
        system+=len(s)
        i=j=0
        while i<len(g) and j<len(s):
          if s[j][0]<g[i][0]:
            j+=1
          elif g[i][0]<s[j][0]:
            i+=1
          else:
            correct+=g[i][1]==s[j][1]
            i+=1
            j+=1
      else:
        t=k.split("\t")
        if len(t)==10 and t[0].isdecimal():
          frm.append(t[1])
  print("\n***",mdl)
  print("Precision",correct/system if system else 0.0)
  print("Recall   ",correct/gold)
  print("F1 Score ",2*correct/(system+gold))
```

私(安岡孝一)の手元では、以下の結果が出力された。

```
*** Xunzillm4cc/Xunzi-Qwen1.5-4B
Precision 0.8602375465343024
Recall    0.88017848073714
F1 Score  0.8700937763353714

*** Xunzillm4cc/Xunzi-Qwen1.5-7B
Precision 0.8602375465343024
Recall    0.88017848073714
F1 Score  0.8700937763353714

*** Xunzillm4cc/Xunzi-Qwen1.5-14B
Precision 0.8602375465343024
Recall    0.88017848073714
F1 Score  0.8700937763353714

*** Xunzillm4cc/Xunzi-Qwen2-1.5B
Precision 0.8602375465343024
Recall    0.88017848073714
F1 Score  0.8700937763353714

*** Xunzillm4cc/Xunzi-Qwen2-7B
Precision 0.8602375465343024
Recall    0.88017848073714
F1 Score  0.8700937763353714
```

どうやら、全て同じトークナイザが使われているようだ。Recallが88.02だと、トークナイザとしては「もう一声」なので、『[GPT系モデルの系列ラベリングによる品詞付与](http://hdl.handle.net/2433/288964)』ではトークナイザの単文字化に挑戦している。でも、どうせなら、最初から単文字トークナイザで設計してくれた方がいいんだけどなあ。
AWS Certified AI Practitioner (AIF-C01)勉強

## ベータ版を受ける背景
AWSの新資格AWS Certified AI Practitionerをせっかくなら同じ日に集まって受けてみよう！という会に誘っていただいたので９月１４日に受ける予定をしています

## 勉強方法
・AWS スキルビルダー
AWSが提供する公式のオンライン学習プラットフォームです。ベータ版の試験に向けて、英語で提供される20問の公式練習問題セット「AWS Certified AI Practitioner Official Practice Question Set (AIF-C01)」を活用して学習しています。
英語で提供されているため、翻訳機能を活用しながらインプットを行っています。

・G検定の参考書
機械学習やAIの基礎を学ぶために、「G検定」の参考書を使用しています。AIの基本的な概念を理解するために、まずはこの参考書から学習をスタートしました。

https://www.shoeisha.co.jp/book/detail/9784798157559

## 今後の勉強の進め方
G検定の本でAIの基礎固め
AIや機械学習に馴染みがないため、まずはG検定の参考書で基礎をしっかり固めています。
↓
AWS スキルビルダーで実践問題を解く
学習した基礎知識を実践的に活用するために、スキルビルダーの練習問題を繰り返し解きながら理解を深めています。
↓
情報が少ないベータ版試験への挑戦
ベータ版試験は情報が少なく難易度高いですが、スキルビルダーやG検定の学習を通じて、できる限りの準備をして臨む予定です。

頑張ります！

スキルビルダーのラボも時間あればしたい！


## 追記
### クイズアプリの作成
新しい問題形式に慣れるために、クイズアプリを作成しました。1日で動くものを作成しましたが、リファクタリングが必要なため、試験後修正おこないます。

![IMG_4815.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636812/dd0aa78a-61a7-afc7-f2eb-592f61f77d15.jpeg)
PassengerMaxRequestsの設定と動作確認

# 導入

Phusion Passenger上で動作しているRuby on Railsアプリケーションでメモリリークが発生していると思われる事象が起きていた。
[公式のリファレンス](https://www.phusionpassenger.com/library/admin/apache/memory_leaks.html)にのっとり、暫定対処のため`PassengerMaxRequests`を設定することにした。

OSやWEBサーバー(Apache or Nginx)によってフォルダ構成や設定ファイルが置かれている場所など諸々違いがあるので設定の方法を覚書として残すのは意味のあることだと思っている。また初心者的にはリファレンスを読むだけでは`PassengerMaxRequests`を設定するとサーバーがどのような動作をするのかがわからなかったので簡単ではあるが説明したいと思う。

# 環境

```shell
Amazon Linux 2

$ passenger-config --version
Phusion Passenger 6.0.6

$ httpd -v
Server version: Apache/2.4.59 ()

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
```

# `PassengerMaxRequests`の設定方法

`/etc/httpd/conf`フォルダの配下にある`httpd.conf`の下記の場所に`PassengerMaxRequests`を追記する。100の部分は適当な1以上の整数を入力すること。0に設定した場合はアプリケーションプロセスは再起動しなくなる。

```config
<IfModule mod_passenger.c>
  PassengerRoot /home/hoge/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/passenger-6.0.6
  PassengerDefaultRuby /home/hoge/.rbenv/versions/2.6.3/bin/ruby
  PassengerMaxRequests 100
</IfModule>
```

もし`httpd.conf`に記載場所がない場合は`/etc/httpd/conf.d`フォルダの配下にある設定補助ファイル(拡張子:`.conf`)を漁ると見つけられるはず。

`httpd.conf`を更新したらサーバーの設定を読み込みなおす。サーバーの再起動は不要なので下記コマンドを実行すればよい。

```
$ sudo systemctl reload httpd
```

# 動作確認

`passenger-status`コマンドを利用する。`passenger-status`はサーバーの設定によってはうまく動作しないことがある。`passenger-status`を実行した際に`ERROR: Phusion Passenger doesn't seem to be running.`と表示される場合に関しては[こちらの記事](https://qiita.com/kensukeyoshida/items/94727adb8581e57930bd)に対応方法を載せている。ただし環境によって解決方法は異なるので注意が必要。

アプリケーションの処理を開始したあとに`passenger-status`コマンドを実行すると`Application groups`の部分にアプリケーションプロセスが表示される。
※`x`の部分には数値が入る。


```shell
----------- Application groups -----------
/var/www/home/xxx (production):
  App root: /var/www/home/xxx
  Requests in queue: x
  * PID: xxxxx   Sessions: x       Processed: xx     Uptime: xh xxm xxs
    CPU: x%      Memory  : xxxM    Last used: xxs ago
```

`PassengerMaxRequests`と関係するのは`Processed`の値である。`Processed`はアプリケーションプロセスが起動してから処理したリクエストの数を表している。`Processed`の値が`PassengerMaxRequests`の値にたどりつくとアプリケーションプロセスが再起動する。新しいプロセスが起動すると`PID`が変化し`Processed`の値は0になる。同時にプロセスが占有していたメモリが解放されるためメモリリークの暫定的対処として有効である。
OpenCVでHDR動画を読み込み、書き出す時にトーンマップで見た目をいい感じにする

## OpenCVでのHDR動画の読み出しと書き出し
最近は、WindowsのAutoHDRという機能で、ゲームをすると自動的にHDRになり、ゲームキャプチャもHDR画質で録画されているのですが、OpenCVでHDRの動画を読み込み、書き出しをすると、元に比べて白っぽい動画が出力されてしまいます。
OpenCVはこういう変換も得意分野だろう、と思いながら、検索したのですがあまりぴったりの記事は見つかりませんでした。

Windows Copilotに相談してみるも、正しいコードは返答されませんでしたが、トーンマップで調整するんだ、ということだったので、その数値を変更して、私なりに元のHDR動画に近い印象のSDR動画を出力できるようになりました。
参考までにコードを載せておきます。
生成AIによるコードを直したものなので、もうちょっと良い適切なやり方があれば、教えてください。
よろしくお願いします。

```python:opencv.py
import cv2
import numpy as np

def apply_tone_mapping(hdr_image):

    # トーンマッピングアルゴリズムを選択（例：Reinhardのアルゴリズム）
    tonemap = cv2.createTonemapReinhard(gamma=0.35)

    # 32ビット浮動小数点型に変換
    hdr_image = hdr_image.astype(np.float32) / 255.0

    # トーンマップ
    ldr_image = tonemap.process(hdr_image)

    # NaNを0に置き換え
    ldr_image = np.nan_to_num(ldr_image)

    # 0-255の範囲にクリップ
    ldr_image = np.clip(ldr_image * 255, 0, 255).astype(np.uint8)
    return ldr_image

def main():
    # HDR動画の読み込み
    input_video_path = "****.mp4"
    output_video_path = "****.mp4"

    cap = cv2.VideoCapture(input_video_path)
    fps = int(cap.get(cv2.CAP_PROP_FPS))
    frame_size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

    # 動画書き出しの設定
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter(output_video_path, fourcc, fps, frame_size)

    while True:
        ret, hdr_frame = cap.read()
        if not ret:
            break

        ldr_frame = apply_tone_mapping(hdr_frame)
        # 動画書き出し
        out.write(ldr_frame)

    cap.release()
    out.release()

    print(f"動画を {output_video_path} に保存しました。")

if __name__ == "__main__":
    main()
```
Cognitoのログイン属性を知らないようじゃ無理か。ログイン属性はね、知っとかないと。

## はじめに
本記事では、Cognitoユーザープール内で同一のエイリアスを持つユーザーが存在することをNGとしたい時に、既にプール内に存在するエイリアスを持つユーザを追加をしても、重複エラーが発現せず躓いてしまったので、ログイン属性について解説し、対処方法をシェアします。

:::note info
この記事は10分程度で読むことができます。
:::

## 目次
1. 問題
1. 原因
1. 対処

今回発生した問題の原因を、公式ドキュメントのログイン属性を参照して探りながら、対処方法を導きだします。

## 1.問題

今回起きた問題は、""はじめに""も記載しましたが、以下の通りです。
```
Cognitoで複数のログイン方法を許容し、ユーザープール内で同一の電話番号を持つユーザーが存在することは
NGとしたい時に、既にプール内に存在する電話番号を持つユーザを追加をしても、
重複してることを知らせるエラー(AliasExistsException ※1)が発現せず、同一の電話番号を持つ
複数のユーザがユーザープールに存在できてしまった。

※1 AliasExistsExceptionは、指定されたエイリアス属性（電話番号やメールアドレスなど）が
　　　　 既に他のユーザーアカウントに割り当てられている場合に発生するエラー。
```
Cognitoの設計要件としては以下2つ
1. 1つのユーザープール内に同じ電話番号を持つユーザを複数存在させたくない
1. ログイン時には電話番号およびメールアドレスでも認証できるようにしたい


今回起こった問題を解決し、この2点を満たすにはどうしたら良いか？ という点が今回の焦点になります。


## 2.原因
まず、原因を探るためにAWS公式ドキュメントから、Cognitoの開発者ガイドに記載されているユーザープール属性の項目を見てみます。

https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-settings-attributes.html

上記のドキュメントを眺めていると、Conigoはログイン属性をカスタマイズできることがわかります。

ログイン属性には、エイリアス属性とユーザ名属性という2つの属性があるようなので、それぞれの特徴をまとめてみます。

#### １. エイリアス属性
##### エイリアス属性の設定
- エイリアス属性（電話番号やメールアドレスなど）を設定することで、ユーザーが複数のサインイン方法を利用できる
- たとえば、ユーザーは電話番号でもメールアドレスでもログインできる
##### 重複チェック
- エイリアス属性が設定されている場合、Cognitoはそのエイリアス属性に対してユニーク制約を課さないため、同じ電話番号やメールアドレスを持つ複数のユーザーが存在することができる
- ユーザーの属性がどのように設定されているかによって、重複する属性が検証済みかどうかが異なる場合がある（後から追加した方が検証済みになる）


#### 2. ユーザー名属性
##### ユーザー名属性の設定
- ユーザー名属性（たとえば、ユーザー名やユーザーID）を設定する場合、電話番号やメールアドレスのどちらか一方だけをサインインに使用できる（どちらもは無理という意味）
##### 重複チェック
- ユーザー名属性に対しては、Cognitoはユニーク制約を課す
→ つまり、電話番号やメールアドレスは重複できず、同じ値を持つ複数のユーザーが存在することは許容されない

#### 要約すると・・・
1. エイリアス属性の場合、複数のログイン方法を利用できるが、同一電話番号が複数存在することを許容
1. ユーザー名属性の場合、複数のログイン方法を利用できないが、同一電話番号が複数存在することを許容しない

これらより、<strong>複数のログイン方法を利用できるようにして、同一電話番号が複数存在することを許容しないという設定方法がCognitoにはない</strong>と言えそうです。

## 3.対処

では、どうするか。

解決方法は、<strong>Cognitoの設定はエイリアス属性を選択し、電話番号の重複チェックのロジックはアプリケーション側、つまり、自分で重複検出の処理とそれに基づく適切な処理の実装が必要</strong>になります。

これによって、エイリアス属性の重複に対する制約がないことをカバーすることができ、実際に、要件をクリアすることができました。

## おわりに
Cognitoのログイン属性を知らないようじゃ無理か。ログイン属性はね、知っとかないと。
OpenProcessingに作品投稿してみた

高井です。

今回は[OpenProcessing](https://openprocessing.org/)というサイトに作品公開してみました。

# OpenProcessingとは
自分の作品を公開したり、他の人の作品を閲覧したりできるProcessingコミュニティサイトです。
**公開された作品はソースコードも閲覧できる**ので、学習にももってこいです。

なんと**コーディングするだけならユーザ登録無しでできちゃいます！**（すごすぎる）

作品を公開するのであればユーザ登録が必要って感じですね。

私は今回初めて使ったのですが、
**UIがオシャレ**だし**コーディング・投稿がめちゃ簡単**にできるし
なんで今まで使ってなかったん？って感じです。

# 作品公開してみた
### ユーザ登録
名前とメールアドレス、パスワードを設定してユーザ登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/85a5fe67-0ae9-cd31-75a7-068c24c47360.png)

プロフィールページはこんな感じです。
アイコンだけ登録してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/3f52fb40-3a79-e1bd-21fd-e8c1a6bea0e6.png)

### 作品を作る
画面右上の「スケッチを作成する」ボタンを押すと、コーディング画面に行くことができます。
コーディング画面はこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/7a5eb267-b2eb-4de9-2407-85f5000c44f9.png)

画面左側の白いエリアにコーディングして、再生ボタンを押すと実行することができます。
＜/＞ボタンを押すと戻れます。簡単すぎる…！

今回は、[以前作ったフラクタル図形](https://qiita.com/pesysyon/items/579561b6576d5dc0c66f)をちょっと直して公開したいと思います。

ちなみに変更点は下記の２つです。
・前回Processingで作成したが、p5.jsである必要があるので、変数宣言や一部関数を修正
・実行するたびに図形と色がランダム生成されるように修正

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/d2695534-ecb4-09f1-29b0-8996a6e38e5d.png)

### 作品を公開する
コーディングが終わったら、タイトルやタグを設定して投稿します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/50ba0f72-43e9-f20a-6cb5-e2d584ec8c2e.png)

個人的に感動したポイントなんですが、
サムネイルの画像は、この画面から作品を実行して撮ることができます！

# 投稿したのがこちら！

https://openprocessing.org/sketch/2333691/embed/

実行するたびに描画結果が変わります。
リロードボタンでサクサク再実行できますので、じゃんじゃん遊んでください。

高井でした:art:
Google検索広告を検索パートナーとGDNに配信する方法

## Google検索広告の表示場所
こんにちは、所属企業で広告運用を担当している鈴木です。

前回はGoogle検索(リスティング)広告からのサイト流入をアナリティクスを使って確認する方法を記事にしました。

Googleでの検索結果画面に表示されるこの検索広告、実は他の場所にも表示可能なことをご存じでしょうか？

今回はその方法について書いていきたいと思います。

## Google検索パートナー
Googleの検索結果画面以外で広告を表示できる場所、一つ目は「検索パートナー」のサイトです。

「検索パートナー」とは、Googleと提携した検索エンジン機能を持つポータルサイト等のことで、
具体的には「BIGLOBE」「goo」「livedoor」「nifty」などが該当します。

これらのサイトでの検索結果画面に、Google検索広告は表示可能です。

 ## Googleディスプレイネットワーク
 二つ目は「Googleディスプレイネットワーク」です。
 
「Googleディスプレイネットワーク」とは、Googleディスプレイ(画像/動画)広告を掲載できるウェブサイトの総称で、
YouTubeやGmailといったGoogle関連をはじめとする200万以上のサイトが含まれます。

検索ネットワークで予算を使い切れない場合に、このディプレイネットワークに検索広告を表示させることが可能です。

## 検索パートナーとディスプレイネットワークに掲載する方法
![スクリーンショット 2024-08-02 180531.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/fd96e3c2-ae8a-9cd5-c557-71a83f355433.png)
Google広告管理画面にログイン後、左メニューから「キャンペーン」をクリックし、
掲載したいキャンペーンの設定画面を開きます。

「ネットワーク」で、検索パートナー・ディスプレイネットワークをチェックし保存すると、
検索広告がそれぞれに表示されるようになります。

## まとめ
検索パートナー、ディスプレイネットワークへの掲載はメリットも大きいですが、
広告内容によってはデメリットとなる可能性もあります。

それぞれの特性を理解したうえで、配信する広告に合わせて設定を検討してみてください。

以上、鈴木でした。
Laravel+AdminLET導入

ある開発プロジェクトで[AdminLTE](https://adminlte.io/)という管理画面テンプレートを知りました。ちょうど、別のプロジェクトで管理ツールのリニューアル的なことを考えていたので、いろいろ触ってみました。

「これがいいよ」ってオススメされたので、素直に従います。

https://github.com/jeroennoten/Laravel-AdminLTE

# バージョン
```
% sw_vers  
ProductName:		macOS
ProductVersion:		14.6.1
BuildVersion:		23G93
% php -v
PHP 8.3.10 (cli) (built: Jul 30 2024 13:44:37) (NTS)
% composer -v
Composer version 2.7.8 2024-08-22 15:28:36
```

# インストール
```
### Laravelインストール
% composer create-project laravel/laravel .

### AdminLTE（jeroennoten/Laravel-AdminLTE）インストール
% composer require jeroennoten/laravel-adminlte
% php artisan adminlte:install
```

# サンプルページを作成
公式ドキュメントにあるサンプルを実装します。

## viewを作成
次のコマンドを実行し、home画面のviewを作成します。
```
% php artisan make:view home
```
作成したviewの中身を次のようにしました。
```home.blade.php
@extends('adminlte::page')

@section('title', 'Dashboard')

@section('content_header')
    <h1>Dashboard</h1>
@stop

@section('content')
    <p>Welcome to this beautiful admin panel.</p>
@stop

@section('css')
    {{-- Add here extra stylesheets --}}
    {{-- <link rel="stylesheet" href="/css/admin_custom.css"> --}}
@stop

@section('js')
    <script> console.log("Hi, I'm using the Laravel-AdminLTE package!"); </script>
@stop
```

## ルーティングを追加
/home でホーム画面を表示するように修正します。
```web.php
<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::get('/home', function () {
    return view('home');
});
```

## 確認
![スクリーンショット 2024-08-27 12.12.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104120/bc5c95ff-b82b-01c2-6b6d-5fa5e33e6ee6.png)

# あとがき
初Laravelでいろいろ調べながらでも、１時間程でそれっぽい画面が表示できてしまいました。また、サイドメニューも`adminlte.php`の修正だけっぽいので、かなり良さそうです。
管理ツールに多くの開発リソースを持っていかれたくないので、こだわりがない場合は、Laravel+AdminLTEでサクッと作ってしまう選択肢があるのはいいですね。
【Unity】Firebase Cloud Messagingを入れてAndroidBuildした際にハマった事

今回はAndroidのアプリを起動したら即クラッシュした際の調査方法を記載していきます。
今回のパターンはjerkinsを用いたビルド時とローカル環境でビルドした場合になります。
※必ずこれで解決するよという物ではないですが。。。

アプリ開発をしていた際にリモートプッシュ通知を入れる必要がありFirebaseのCloudMessaging(FCM)のプラグインをUnity Package Manager(UPM)を使いプライグインを追加しました。
※UPMについては割愛します。
またFiebase以外にも要件によって他のプライグインを入れる事があるかと思います。今回ハマったのはまさにそういう状況の時に発生しました。
プッシュ通知に必要なgoogle-services.jsonも用意しjerkinsでAndroidビルドを行い無事apkファイルが作成
その後起動確認をおこなったのですが起動してすぐクラッシュするという事態になりました。
```
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/cloudmessaging/Rpc:
～
java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.cloudmessaging.Rpc"
～
```
とAndroidのアプリ開発をしていれば一度は目にした事があるであろうエラー文が飛び込んできます。
またかと。。。

このエラーはそんなクラスないよと言われています。
これが出た場合は大体が難読化に引っかかっておかしくなってるんだなと思うはずです。
なので
proguard-user.txtに
```
-keep class com.google.android.gms.cloudmessaging.** { *; }
```
と記載して再度確認
↓
変わらず

なので今度は必要なプライグインだけ入れたアプリをローカル環境で作成 -> 起動してみました。
開発が進むとリソースが増えて一回当たりのビルド時間も増えるので必要な物だけを入れた最小プロジェクトを作って調査を行ったりします。
すると普通に起動しました。解せぬ

ただ作れる事はわかったのでここからはローカル環境で作ったアプリとクラッシュしたアプリの差分を見ていく工程になります。
その際使用するのはAndroidStudioを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2723177/5e7d4535-edac-fea6-ef81-def0804b010d.png)
Fire => profile or Debug APKを選択しローカル環境で作ったアプリを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2723177/ee0facd1-60b3-7af8-2f0d-882606f0b8d7.png)
こんな感じでアプリの中身が確認する事が出来ます。
同じようにクラッシュしたアプリを選択し別Windowで表示します。
後は２つのアプリの差分を見ていく作業をしていきます。
・まず確認するのは○○.propertiesファイルを見ていきます。
これはプライグインのバージョンが記載されているファイルになるのでこのファイルに記載されているバージョンが２つのアプリで同じかどうかを見ていきます。
・次に確認するのはローカル環境で作ったアプリにあるのにクラッシュしたアプリにはない○○.propertiesがあるかを探します。
上記２つどちらか当てはまる場合プライグインが正しく入っていない可能性が高いです。

バージョンが合っていないライブラリと入っていないライブラリを追加するように記載していく作業を行います。
launcherTemplate.gradle
mainTemplate.gradle
の
dependencies内に当てはまる○○.propertiesの物を記載していきます。
記載する名称がわからない場合は○○.propertiesに記載されているclient=の箇所で検索エンジンで検索をすると引っ掛かるのでそれを元に記載していきます。
後はこれの繰り返しで必要な物を全部書いていきます。
🌟 Just Released: Microsoft Azure Certified Administrator Associate AZ-104 Exam!

Hey Azure Enthusiasts,

![AZURE104-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442951/50334fbc-9842-c04a-c702-8e7b6734d986.jpeg)


Source:

[Microsoft Azure Certified Administrator Associate AZ-104](https://awslagi.com/course/microsoft-azure-certified-administrator-associate-az-104-actual-exam/)

We’re thrilled to announce that the Microsoft Azure Certified Administrator Associate AZ-104 Exam is now available! If you’re aiming to validate your expertise in managing and monitoring Azure environments, this certification is your next big step.

📝 About This Certification Exam
The AZ-104 certification is designed for IT professionals responsible for managing cloud services that span storage, networking, and compute capabilities within Microsoft Azure. It tests your ability to implement, manage, and monitor identity, governance, storage, compute, and virtual networks in a cloud environment.

🎯 Exam Format
- Duration: 120 minutes

- Number of Questions: 40-60 questions

- Question Types: Multiple choice, case studies, drag-and-drop, and scenario-based questions

- Passing Score: 700/1000

📚 Exam Preparation
To ensure you're well-prepared for the exam, focus on:

- Mastering Azure services, including VMs, storage accounts, and networking

- Practicing with Azure’s identity and governance tools

- Taking practice exams that mirror the actual test format

- Reviewing case studies and real-world scenarios that challenge your problem-solving skills

🎓 Benefits of Certification
Earning the AZ-104 certification:

- Validates your ability to handle day-to-day tasks associated with Azure-based cloud solutions

- Enhances your credibility and opens up new career opportunities in cloud administration

- Demonstrates your commitment to staying current with Microsoft Azure technologies

✅ Requirements
Experience with Microsoft Azure administration, particularly in managing identities and governance, storage, and compute resources.

Familiarity with Azure’s networking concepts and cloud infrastructure.

👥 Target Audience
The AZ-104 certification is perfect for:

- IT professionals and system administrators looking to specialize in Azure

- Cloud enthusiasts eager to showcase their skills in managing Azure environments

- Individuals aiming to advance their careers in cloud administration

Start your preparation now and set yourself on the path to becoming a Microsoft Azure Certified Administrator Associate. Good luck to all the exam takers!
API

## リクエストヘッダーとリスポンスヘッダー

## APIエンドポイントとは？
APIのURI部分のことをAPIエンドポイントと言います。

## APIリクエストURLとは？
getなどのメソッド名の横に表示されているURLでリクエストURLとパラメータ部分に分けられる。例えば下の例だと
![スクリーンショット 2024-08-16 19.02.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3685116/c111ac92-52a5-ab00-9f35-5aad75e0c821.png)
```
{{base_url}}/openapi/v1/dailyreport/maintenancemodel
```
までがリクエストURLでそれ以降がパラメータ部分となる。getメソッドで条件を絞りたい場合はパラメータを追加すれば良い。また階層構造の場合は以下のように「.」で繋いであげればいい。
```
writeMaintenanceModel.saveModel.workDetail.endDistance=50000
```
そしてAPIのAPIパスはすべて相対パスである。相対パスの基準URL（例：http://localhost/）

## パスパラメータとクエリパラメータの違い
パスパラメータ
```
https://qiita/params1/params2
```
クエリパラメータ
```
https://qiita/params1/params2?eigyousyoCode=00000001
```
見た目の違いとしては「params2」の後に「?〜」が」あるかどうか

一意なリソースを表す場合はパスパラメータ。
クエリパラメータは省略可能な付加情報のことで、検索・フィルタなどプラスアルファの条件を付け足したい時に用いる
平和祈念アニメ

### 最近、世の中がきな臭くなってきました。

困ったことです。**平和を祈念しましょう**。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/932484/e03ff8dc-6379-9f9d-2937-77c8c2ffc071.gif">

このアニメは弊記事 **「**[【MATLAB】今更ながら、三次元プロットの視線関連コマンドを探究してみた - Qiita](https://qiita.com/tsubolabo/items/32fa8f3ac86f4aa24834) **」** からの再掲です。アニメの作り方はこの記事の中に書いておきました。
変数化した色を半透明にしたい｜rgb()関数内で色変数を使う

# 変数化した色を rbg() 関数で使用して半透明にしたい
変数化した色を半透明にしたいことがある
opacityで調整すると要素全体が半透明になるため、色のみを半透明にしたい
しかし、変数化した16進表記の色はそのままだとrgb()関数内で使用できない

```css
:root {
    --main-color: #ff0000;
}
```
**以下だと上手くいかない**
```css
element {
    /*これはエラーになる*/
    background-color: rgb(var(--main-color) / 0.5);
}
```
10進表記（255 0 0）の変数を別途用意すれば解決するが、それは野暮ったくて嫌だ

# 解決策

相対値構文を使用することで解決できる

```css
element {
    background-color: rgb(from <16進表記の色> r g b / 0.5)
}
```

```css
element {
    background-color: rgb(from var(--main-color) r g b / 0.5);
}
```

# 参考
[mdn | rgb()](https://developer.mozilla.org/ja/docs/Web/CSS/color_value/rgb)
リクエスト　レスポンス

自分用のアウトです:writing_hand:

## リクエスト(Request)
リクエストとは、クライアント(Webブラウザ)がサーバーに対して送信する要求のこと。Webアプリケーションやサーバーに対して、特定のリソースや処理を要求する為に使われる

**HTTPリクエスト**
Webブラウザがサーバーにページを表示するために送信するリクエスト。リクエストメソッド(GET,POSTなど)、リクエストURL(アクセスするURL)、ヘッダー情報、ボディ(フォームのデータなど)が含まれる

**GET**
サーバーから指定されたリソース(例: Webページ)を取得するためのリクエス
**POST**　
フォームのデータをサーバーに送信して処理を行うリクエスト

## レスポンス (Response)
サーバーがクライアントからのリクエストに応じて返すデータ。クライアントはこのレスポンスを受け取り、画面に表示したり、次の操作に使う。

**HTTPレスポンス**
サーバーがリクエストに対して送信する応答。レスポンスには、ステータスコード、ヘッダー情報、ボディ(HTMLページの内容やデータ)が含まれる。

**ステータスコード**
`200 OK:`　リクエストが正常に処理され、結果が返されたことを示す
`404 Not Found:`　リクエストされたリソースすがサーバに存在しないことを示す
`500 Internal Server Error:` サーバーで何らかの内部エラーが発生したことを示す
**レスポンスボディ**
WebページのHTMLコードや、APIの応答としてのJSONデータなどが含まれる

## リクエストとレスポンスの流れ
**①リクエスト送信** 
クライアントがサーバーに対して、特定のページを表示する、データを送信するなどの要求をする
**②**リクエスト処理**
サーバーはリクエストを受け取り、その内容に基づいて処理を行う(データベースからデータを取得したり、指定されたページを生成するなど)
**③レスポンス送信**
処理が完了すると、サーバーはクライアントに対して結果を含んだレスポンスを返す。クライアントはこのレスポンスを受け取り、画面に表示したり、次のアクションに使用。
基本情報技術者試験(アルゴリズム)のデータ構造についてまとめ

# はじめに
絶賛基本情報技術者のアルゴリズムを学習中です！
いきなり問題集を解こうとしたら用語がわからず大苦戦(当たり前)
今回はデータ構造についてまとめました

誤り等ございましたら、教えていただけますと幸いです🙇

#### データ構造
コンピューター上にデータを格納する論理構造

#### 配列(array,table)
Excelで管理するような表形式のデータ構造で、インデックスによって識別します

|インデックス|名字|名前|
|----|----|----|
|1|山田|美代子|
|2|田中|雅紀|

#### スタック
スタックとは複数のデータを順番に格納し、最後に格納したデータから先に1件ずつ取り出す後入れ先だしのデータ構造です
スタックからデータを格納することを __プッシュ__ 
取り出すことを __ポップ__ と言います

イメージ図
![名称未設定のアートワーク 16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/de91c51e-b89c-cbb2-95a9-3dbdc07d84ff.png)

#### キュー
スタックとは違い、先入先出し型のデータ構造
データ列の最後に格納する操作を __エンキュー__
先頭から順に取り出す操作を __デキュー__ と言います

イメージ図
![名称未設定のアートワーク 17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/da4fb0e0-b587-0080-aa3d-d08eccae9576.png)

#### リスト
リストはデータ部とポイント部からなるセルと呼ばれんる単位で管理され、ポインタ部の値により次に連結されるセルが決まるという特徴があります

###### 線形リスト
単(片)方向リストと双(両)方向リストがあります

- 単(片)方向リスト
各要素（セル）は、データと次の要素への参照（ポインタ）を持っており、最後のセルのポインタ部分にはNULL値が格納されています
下記例で言うと、次の曲にはいけるけれど、前の曲にはいけない特徴があります

```例.曲
[Song A | 次の曲への参照] -> [Song B | 次の曲への参照] -> [Song C | null]
```

- 双(両)方向リスト
単方向と違い前の直前のデータへのポインタが存在します

```例.曲
[Song A | 次の曲への参照] -> [前の曲への参照 | Song B | 次の曲への参照] -> [前の曲への参照 | Song C | null]
```

###### 環状(循環)リスト
先頭と最後のセルを繋げたリスト
線形リストと同様に単方向と双方向があります

#### 木構造
木構造とは階層構造でデータを管理するもので、木を逆さにしたような形をしています
個々の要素を __節(ノード)__
要素同士を結ぶ線を __枝(ブランチ)__
親を持たない最上位の要素を __根(ルート)__
子を持たない最下位の要素を __葉(リーフ)__ と言います

イメージ図
![名称未設定のアートワーク 18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/806e6c5e-0f6c-5227-d24e-4359f4aff504.png)

- 2分木
節から分岐する枝が2本以下のものを2分木と呼びます
上記のイメージ図も2分木です↑

- 多分木
一つの節が複数の子を持つ構造↓

イメージ図
![名称未設定のアートワーク 19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/b9a45d7e-f2f3-d0d3-56ec-3797d2b98c12.png)

# さいごに
データ構造を理解していないとアルゴリズムの問題が解けないので(当たり前)
まとめました
goldfish-models/lzh_hant_{5mb,10mb,full}のトークナイザ「精度」をUD_Classical_Chinese-Kyotoのtestセットで測る

Tyler A. Chang, Catherine Arnett, Zhuowen Tu, Benjamin K. Bergen『[Goldfish: Monolingual Language Models for 350 Languages](https://arxiv.org/abs/2408.10441)』を横目に、古典中国語(漢文)GPT2モデルgoldfish-models/lzh_hant_{[5mb](https://huggingface.co/goldfish-models/lzh_hant_5mb),[10mb](https://huggingface.co/goldfish-models/lzh_hant_10mb),[full](https://huggingface.co/goldfish-models/lzh_hant_full)}のトークナイザ「精度」を、[UD_Classical_Chinese-Kyoto](https://github.com/UniversalDependencies/UD_Classical_Chinese-Kyoto)のlzh_kyoto-ud-test.conlluで測ってみた。Google Colaboratoryだと、こんな感じ。

```
!pip install transformers sentencepiece spacy-alignments
models=["goldfish-models/lzh_hant_5mb","goldfish-models/lzh_hant_10mb","goldfish-models/lzh_hant_full"]
ud="UD_Classical_Chinese-Kyoto"
!test -d $ud || git clone --depth=1 https://github.com/universaldependencies/$ud
!cp $ud/*-test.conllu test.conllu
from transformers import AutoTokenizer
from spacy_alignments import get_alignments
for mdl in models:
  tkz=AutoTokenizer.from_pretrained(mdl)
  gold=system=correct=0
  with open("test.conllu","r",encoding="utf-8") as r:
    for k in r:
      if k.startswith("# text ="):
        txt=k[8:].strip()
        frm=[]
      elif k.strip()=="":
        g=[(t[0],t[-1]+1) for t in get_alignments(list(txt),frm)[1]]
        s=[t for t in tkz(txt,return_offsets_mapping=True)["offset_mapping"] if t[0]<t[1]]
        gold+=len(g)
        system+=len(s)
        i=j=0
        while i<len(g) and j<len(s):
          if s[j][0]<g[i][0]:
            j+=1
          elif g[i][0]<s[j][0]:
            i+=1
          else:
            correct+=g[i][1]==s[j][1]
            i+=1
            j+=1
      else:
        t=k.split("\t")
        if len(t)==10 and t[0].isdecimal():
          frm.append(t[1])
  print("\n***",mdl)
  print("Precision",correct/system if system else 0.0)
  print("Recall   ",correct/gold)
  print("F1 Score ",2*correct/(system+gold))
```

私(安岡孝一)の手元では、以下の結果が出力された。

```
*** goldfish-models/lzh_hant_5mb
Precision 0.6529041552926903
Recall    0.624718856562432
F1 Score  0.6385006117681955

*** goldfish-models/lzh_hant_10mb
Precision 0.6401664058623716
Recall    0.608466952042371
F1 Score  0.6239142968735469

*** goldfish-models/lzh_hant_full
Precision 0.6355484019314785
Recall    0.6016106798229703
F1 Score  0.6181140514349609
```

正直かなり低い。このままトークナイザを改造せずに品詞付与モデルを作ると、当然、解析精度が上がらないのだけど、さて、どうしたものかな。
便利なDOSコマンド集

# この記事について
今まで使ってきたDOSコマンドで便利だと感じたものからニッチなものまで記録してます。
少しずつ覚える為の備忘録として使用し、随時更新予定です。

## リモートデスクトップ接続
```dosbatch
mstsc /v:ipもしくはhostname
```
/v以外にも様々なオプション有。/vオプションを排除すればGUIが表示される。

## 既知のWi-Fi全削除
```dosbatch
netsh wlan delete profile name="*"
```
WindowsPCで過去に接続したことがあるWi-Fi情報を全て削除します。
**name="*"** のアスタリスクを適宜利用に応じて変更することで特定のWi-Fi情報のみ削除など対応可。

以下で既知のWi-Fi情報を取得可能。
```dosbatch
netsh wlan show profile
```
## コマンドプロンプトを管理者権限に昇格
```dosbatch
powershell start cmd -verb runas
```

## シャットダウン・再起動・サインアウト
```dosbatch
rem シャットダウン
shatdown /s /t 0

rem 再起動
shatdown /r /t 0

rem サインアウト
logoff
```
/tオプションで時間指定できます。例のように0を指定することで即実行になります。

## タスク強制終了
```dosbatch
taskkill /im プロセス名
```
/imコマンドでプロセス名を指定することで、該当するプロセスが強制終了します。

## ファイルのコピー
```dosbatch
copy "コピー元パス" "コピー先パス"
```

## ネットワークドライブ追加
```dosbatch
net use A: 追加するドライブパス
```
例にあるAとはドライブ名になります。A～Z（重複不可）を任意で設定してください。
一覧は以下で確認。
```dosbatch
net use
```

## 資格情報追加
```dosbatch
cmdkey /add:Domain:target=サーバ名 /user:ユーザ名 /pass:パスワード
```

## カバーを閉じたとき何もしない
```dosbatch
rem アダプタ接続時
powercfg /SETACVALUEINDEX SCHEME_CURRENT SUB_BUTTONS LIDACTION 0

rem バッテリー接続時
powercfg /SETDCVALUEINDEX SCHEME_CURRENT SUB_BUTTONS LIDACTION 0
```

数字は時間を任意で設定してください。

## スリープ時間変更
```dosbatch
rem ディスプレイスリープ時間設定(アダプタ接続時)
powercfg /x monitor-timeout-ac 0
rem ディスプレイスリープ時間設定(バッテリー接続時)
powercfg /x monitor-timeout-dc 0

rem スリープ時間設定(アダプタ接続時)
powercfg /x standby-timeout-ac 0
rem スリープ時間設定(バッテリー接続時)
powercfg /x standby-timeout-dc 30
```

数字は時間を任意で設定してください。

## BitLocker有効・無効
```dosbatch
rem 無効化
manage-bde -off C:

rem 有効化
manage-dbe -on C:
```
末尾はドライブ名なので任意で指定してください。

## フォルダ作成
```dosbatch
mkdir 作成するフォルダパス
```

## コマンドプロンプトの画面クリア
```dosbatch
cls
```
Pythonでmapオブジェクトを正しく出力する方法：list化とアンパックの使い分け

## はじめに

https://paiza.jp/works/mondai/stdin_primer/stdin_primer__pair_data_step2

この問題の2行目以降の入力をそのまま出力するために以下のコードを書きました。
## コード
```python
# coding: utf-8
# 自分の得意な言語で
# Let's チャレンジ！！
n = int(input())
l = []

for i in range(n):
    l.append(map(int,input().split()))
    print(l[i])
```

## 実行結果
```python
<map object at 0x1473aa9161c0>
<map object at 0x1473aa98dee0>
<map object at 0x1473aa9382e0>
<map object at 0x1473aa938520>
<map object at 0x1473aaa1a610>
```

そうです。mapをprintするとこのようなmapのオブジェクトが出力されます。*
そのため、正しくは

 ## 1\. listにする

 ```python
# coding: utf-8
# 自分の得意な言語で
# Let's チャレンジ！！
n = int(input())
l = []

for i in range(n):
    l.append(list(map(int,input().split())))
    print(l[i])
 ```

 ### 出力
期待される出力ではリストになっていない！
 ```python
[813, 813]
[8, 13]
[81, 1]
[81, 3]
[8, 813]
 ```

 ## 2\. *でアンパックする
### 正しい例
```python
# 自分の得意な言語で
# Let's チャレンジ！！
n = int(input())
l = []

for i in range(n):
    l.append(map(int,input().split()))
    print(*l[i])
```

 ### 出力
 ```python
813 813
8 13
81 1
81 3
8 813
 ```

### *演算子(astarisk operator)は、リストやタプルなどの要素を一つの変数として取り出すことを可能にしてくれます。

```
alphabets = ["a", "b", "c", "d"]
print(alphabets) 
print(*alphabets)
```

### 出力
```python
 ["a", "b", "c", "d"]
 a b c d
```

詳しく知りたい方はこちら↓

https://yassin01.medium.com/unleashing-the-power-of-python-iterable-unpacking-bed5fb0a1682
「Azure初心者向け」AI-900 Microsoft Azure AI Fundamentals受験メモ

# 目次
[1.はじめに](#1-はじめに)
[2.教材](#2-教材)
[3.学習方法](#3-学習方法)
[4.最後に](#4-最後に)


# 1 はじめに
AI-900 Microsoft Azure AI Fundamentals(以下、AI-900)に合格しました。
学習をするうえで使用させていただいた教材や学習方法についてのメモを記載します。

https://learn.microsoft.com/ja-jp/credentials/certifications/azure-ai-fundamentals/?practice-assessment-type=certification

## 前提
G検定とAZ-900 Microsoft Azure Fundamentals(以下、AZ-900)を保有した状態で学習を開始しました。**AI-900を取得することが目的であれば、G検定とAZ-900は必ずしも保有している必要はない**と思います。ただし、**G検定、AZ-900、AI-900すべての資格合格を目指す場合は以下の順番で受験することをおすすめします。**

- **G検定⇒AZ-900⇒AI-900**

はじめに学習範囲が広いG検定を学習するとAI-900の学習がしやすくなります。また、AZ-900を学習しておくと基本的なAzureの知識が得られるため、AI-900の学習を効率良く進めることができます。

# 2 教材
## 社内研修
社内で開催されたAI-900資格取得セミナーを受講しました。AI-900の要点を座学で学んだ後、演習問題を解くことで知識を定着させることができます。AI-900の全体像を把握するうえで役立てることができました。

## Microsoft Learn
Microsoft社から公式で提供されているMicrosoft製品やサービスを活用するために有益なコンテンツです。コンテンツを活用してさまざなまなサービスを自分のペースで学習を進めることができます。

https://learn.microsoft.com/ja-jp/training/courses/ai-900t00


インプット用に使用させていただきました。AI-900の試験範囲を網羅的に学習できます。試験範囲のサービスについて、視覚的にも丁寧な解説が付いていたり、豊富な事例が挙げられているため、試験対策として参考になります。

https://learn.microsoft.com/ja-jp/credentials/certifications/azure-ai-fundamentals/practice/assessment?assessment-type=practice&assessmentId=26&practice-assessment-type=certification

アウトプット用に使用させていただきました。Microsoft Learnが用意している資格取得に向けた無料の試験問題です。試験問題を解くことで、本番の試験で問われる可能性のある質問スタイル、表現、難易度を学習することができます。また、各問題に対して解説と根拠(Microsoft Learnのページへのリンク)が付いているため、知識の確認に役立てることができます。


## Udemy

https://www.udemy.com/course/ai-900-microsoft-azure-ai-fundamentals-s/?couponCode=SKILLS4SALEJP

アウトプット用に使用させていただきました。演習問題をたくさん解くことで知識を定着することができます。また、各問題に対して丁寧な解説が付いているため、解説を熟読することで理解が深まります。Microsoft Learnのプラクティス評価と合わせて何回も解くことで試験に問われそうなポイントを把握することにも役立ちます。


# 3 学習方法
以下の順番で学習を進めました。
1. 「社内研修」に参加して講義を受けた後、講義時間内で演習問題を解きました
2.  「Microsoft Learn コース AI-900T00-A: Microsoft Azure AI の基礎」をインプット用として学習しました(ドキュメントはすべて読みましたが、ハンズオンはスキップしました)
3. 「Microsoft Learn プラクティス評価」を3回解きました
4. 「AI-900: Microsoft Azure AI Fundamentals 模擬問題集」を解きました(基本問題1回分を1回、模擬問題3回分を各2回ずつ解きました)


:::note info
**学習方法についての感想**
* **Microsoft Learnで学習する各サービスと事例について押さえておく**と良いと思いました
* **各サービスがどのような事例に使われているかを理解しておく**ことは大切だと思いました
* **「プラクティス評価」を解いて試験の質問スタイル、表現、難易度に慣れておく**ことは必要だと思いました
:::

参考までに学習時間を記載します。
学習時間の合計は17.0時間でした。各教材の学習時間は以下の表をご参照ください。

|教材 |学習時間  |
|---|---|
|社内研修 |6.0時間  |
|Microsoft Learn コース AI-900T00-A: Microsoft Azure AI の基礎  |4.0時間  |
|Microsoft Learn プラクティス評価 |2.0時間  |
|AI-900: Microsoft Azure AI Fundamentals 模擬問題集  |5.0時間  |


# 4 最後に
今回AI-900を受験するにあたって、Microsoft Learnをインプット用教材として使用させていただいたのですが、資料の作り方やハンズオンが独力で学習を進めやすい作りになっているという印象を受けましたので、今後も活用させていただきたいと思いました。本記事が次に受験される方のお役に少しでもなれば幸いです。最後までお読みいただきありがとうございました。
ショートカット.app でリッチテキストをプレーンテキストとして整形する

# 概要
iOSやmacOSで処理を自動化できる「ショートカット」アプリ。
ウェブサイト上のテキストなどを **「コピペ」** した時についてくるテキストスタイルを削除して、ついでに紛らわしい記号をひたすら置き換えて整形するショートカットアクション。
「スマート引用符」などで自動置換されてしまった場合にも。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216596/27cd884d-2bd2-33cc-b388-b74b98594e24.png)

### 完成版ダウンロード

https://www.icloud.com/shortcuts/30a7396cd4744fa99d3cc81eaa886ffc

*※使用は自己責任で*

# ショートカットの中身（アクション）

## 1. 対象テキストの取得
iOS、macOS共に取得しやすい形ということで「共有シート」を使い、入力がない場合には「クリップボード」から取得するようにする。

>`共有シート, クイックアクション` から `テキスト、そのほか４個` の入力を受け取る
もし入力がない場合:
`クリップボードを取得`

#### 受け取る内容
- [x] テキスト
- [x] リッチテキスト
- [x] Safari の Web ページ
- [x] 記事

## 2. プレーンテキスト化
取得したテキストを **「テキスト」** というアクションに渡せばプレーンテキスト化される。
>テキスト
`ショートカットの入力`

## 3. テキストの整形
**「テキストを置き換え」** アクションで整形していく
紛らわしい記号類を置き換えて整形する。
どこまで置き換えるかは個々人のセンスで。

:::note
全ての「テキストを置き換え」のオプション（「表示を増やす」で表示）は「正規表現」をオンにする
- [ ] 大文字/小文字を区別
- [x] 正規表現
:::

### ダブルクオート系
>`テキスト` の `“|”|„|«|»` を `"` に置き換え

左ダブルクオート(“)、右ダブルクオート(”)、ジャーマンダブルクオート(„)、左二重ギュメ(«)、右二重ギュメ(»)をダブルクオート(“)に置き換える

### シングルクオート系
>`アップデートされたテキスト` の `‘|’|‚|‹|›` を `'` に置き換え

左シングルクオート(‘)、右シングルクオート(’)、ジャーマンシングルクオート(‚)、左ギュメ(‹)、右ギュメ(›)をシングルクオート(‘)に置き換える

### ハイフン系
>`アップデートされたテキスト` の `−|‒|–|—|⸺|⸻|―` を `-` に置き換え

マイナス(−)、フィギュアダッシュ(‒)、enダッシュ(–)、emダッシュ(—)、2emダッシュ(⸺)、3emダッシュ(⸻)、水平棒(―)をハイフン(-)に置き換える。
*全角ハイフン「ー」は、文章中に使われる可能性が高いので含まない。*

### 全角チルダ(～)を波ダッシュ(〜)に統一
>`アップデートされたテキスト` の `～` を `〜` に置き換え

見た目は同一だが違う文字。Windows XP 以前の環境 だと「から」の変換で全角チルダが出力される場合があるので、統一しておく。

### チルダ系
>`アップデートされたテキスト` の `∼|⁓|〰` を `~` に置き換え

チルダ演算子(∼)、SWUNGダッシュ(⁓)、WAVYダッシュ(〰)をチルダ(~)に置き換える。
*波ダッシュ「〜」は、文章中に使われる可能性が高いので含まない。*

## 4. クリップボードにコピー
整形したテキストをクリップボードに入れ直す。
>`アップデートされたテキスト` をクリップボードにコピー

---

### 完成版ダウンロード

https://www.icloud.com/shortcuts/30a7396cd4744fa99d3cc81eaa886ffc

*※使用は自己責任で*

キーボードショートカットを設定しておけば、すぐに呼び出せる。
Experience Cloud サイトとモバイルアプリ

[モバイル関連のまとめに戻る](https://qiita.com/Keiji_otsubo/items/90d5657650aadeef6336)

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

+ [【ヘルプ】Experience Cloud サイト: Salesforce アプリケーションで使用できない機能とその新機能](https://help.salesforce.com/s/articleView?id=sf.networks_access_in_salesforce1_limitations.htm&type=5)

Salesforce モバイルアプリケーションの Experience Cloud サイトは Lightning Experience デスクトップサイトと似ていますが、いくつかの違いがあります。

+ [【ヘルプ】Salesforce モバイルアプリケーションでの Experience Cloud サイトへのアクセス](https://help.salesforce.com/s/articleView?id=sf.networks_access_in_salesforce1.htm&type=5)

Salesforce モバイルアプリケーションから Experience Cloud サイトへのアクセスは、サイトを作成するために使用されたテンプレートの種類、サイトユーザーのライセンスや権限などのいくつかの要素によって異なります。


+ [Mobile Publisher Android App Issue: Non-Authenticated Users Prompted to Login Page on Launch](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ifhETSAY)
[golang]プライベート関数の定義方法

## これはなに
この記事では、Goにおけるパッケージ内でプライベートな関数を定義する方法について説明します。Go言語では、関数名を小文字で始めることで、その関数をプライベートにし、パッケージの外部からのアクセスを防ぐことができます。これにより、パッケージ内部の実装を隠蔽し、安全性やカプセル化を高めることができます。

## 対象読者
- Go言語を使ってプログラムを開発しているエンジニア
- Goでの関数の可視性について学びたい初心者
- パッケージ設計やセキュリティに興味があるプログラマ

## ゴール
- Goにおけるプライベート関数の定義方法を理解する
- プライベート関数とパブリック関数の違いを明確にする
- パッケージ内での関数のアクセス制御の方法を学ぶ

## TL;DR
- 関数名を小文字で始めると、Goではその関数がプライベートになり、パッケージ外からはアクセスできなくなります
- 関数名を大文字で始めると、その関数はパッケージ外からもアクセス可能なパブリック関数になります

## プライベート関数の定義方法

### プライベートな関数の定義
プライベートな関数は、次のように関数名を小文字で始めて定義します。

```go
package mypackage

import "fmt"

// プライベート関数
func privateFunction() {
    fmt.Println("This is a private function")
}

// パブリック関数
func PublicFunction() {
    fmt.Println("This is a public function")
    privateFunction() // 同じパッケージ内でプライベート関数を呼び出す
}
```

### 使用例
次に、パッケージ内でプライベートな関数を定義し、それを使用する例を示します。

#### ファイル構成
```
mypackage/
  └── mypackage.go
main.go
```

#### mypackage/mypackage.go
```go
package mypackage

import "fmt"

// プライベート関数
func privateFunction() {
    fmt.Println("This is a private function")
}

// パブリック関数
func PublicFunction() {
    fmt.Println("This is a public function")
    privateFunction() // 同じパッケージ内でプライベート関数を呼び出す
}
```

#### main.go
```go
package main

import "mypackage"

func main() {
    mypackage.PublicFunction() // パブリック関数の呼び出しは可能
    // mypackage.privateFunction() // エラー: プライベート関数は他のパッケージから呼び出せない
}
```

### 実行結果
```plaintext
This is a public function
This is a private function
```

## 説明

### `mypackage.go`
- `privateFunction`は小文字で始まるため、この関数は`mypackage`パッケージ内からのみアクセス可能です
- `PublicFunction`は大文字で始まるため、この関数は他のパッケージからもアクセス可能です
- `PublicFunction`内で`privateFunction`を呼び出しています

### `main.go`
- `mypackage.PublicFunction()`を呼び出すことができますが、`mypackage.privateFunction()`を直接呼び出そうとするとエラーになります。プライベート関数は他のパッケージからアクセスできないためです

このように、関数名を小文字で始めることで、その関数をプライベートにしてパッケージの外部からのアクセスを防ぐことができます。

## 参考文献
- [The Go Programming Language Specification](https://go.dev/ref/spec#Exported_identifiers)
マイクロソフトリワードの検索キーワード一覧

<a href="https://px.a8.net/svt/ejp?a8mat=3ZDGSF+2SMFEY+CO4+60OXE" rel="nofollow">初期費用無料、月額990円から、高速・多機能・高安定レンタルサーバー『エックスサーバー』</a>
<amp-pixel src="https://www19.a8.net/0.gif?a8mat=3ZDGSF+2SMFEY+CO4+60OXE" layout="nodisplay"></amp-pixel>
ポイントが反映されにくい「検索」タスクで、ポイント反映される検索ワードをまとめて一覧にしました。
買い物（「買い物をより速く終わらせる」）
「shopping」
「shopping list」
「通販サイト名」
曲の歌詞（「曲の歌詞を探す」）
「曲名」+「歌詞」
レシピ（「新しいレシピでお料理を学ぶ」）
「料理名」+「レシピ」
映画（「あの映画をもう一度見よう」）
「movie」
「映画のタイトル名」
地元のレストラン（「今夜は疲れすぎて料理ができない」）
「ファミレスやファストフードの名前」
「近くのマクドナルド」
「都市名」+「料理ジャンル（イタリアンなど）」
天気（「天気を調べる」）
「天気予報」
「都市名」+「天気」
「weather」
旅行・フライト（「短い休暇を計画する」）
「flight」
「フライト」
「飛行機」
「都市名」+「飛行機」
「航空会社名」
ホテル（「宿泊先を検索しましょう」）
「hotel」
冒険先・目的地（「まだ行ったことがない場所を調べる」）
「都市名」
為替レート（「迅速に換金できます」）
「ドル円」
「ドル円　レート」
荷物追跡（「荷物を追跡できます」）
「ups tracking」ロケーションをアメリカ「United States」にし、言語を「English」にする必要があります。
翻訳（「なんでも翻訳します」）
「translate」
「翻訳　日本語」
最新ニュース（「注目のトピックを見つける」）
「ニュース」
職種を検索（「仕事を探す」）
「job」
健康状態・病気を検索（「症状を感じていますか？」）
「health」
「症状」
<a href="https://px.a8.net/svt/ejp?a8mat=3ZDGSF+2SMFEY+CO4+60OXE" rel="nofollow">初期費用無料、月額990円から、高速・多機能・高安定レンタルサーバー『エックスサーバー』</a>
<amp-pixel src="https://www19.a8.net/0.gif?a8mat=3ZDGSF+2SMFEY+CO4+60OXE" layout="nodisplay"></amp-pixel>
[golang]初期化関数initについて

## これはなに
この記事では、Goにおける`init`関数の役割と、`init`と`Init`の違いについて説明します。Go言語で開発をしている際に、`init`関数が自動的に実行される仕組みを理解し、どのように使うべきかを知ることで、より効率的に初期化処理を行えるようになります。

## 対象読者
- Go言語を使ってプログラムを開発しているエンジニア
- Goの`init`関数について学びたい初心者
- 効率的な初期化処理の方法を知りたいプログラマ

## ゴール
- Goにおける`init`関数の役割を理解する
- `init`関数と他の関数（特に`Init`）の違いを明確にする
- 適切な初期化処理の方法を学ぶ

## TL;DR
- `init`関数はGoで特別な意味を持ち、パッケージがインポートされたときに自動的に実行される初期化関数です。プログラマが直接呼び出すことはできません
- `init`関数はパッケージレベルの変数の初期化、設定ファイルの読み込み、リソースの準備などに利用されます
- 同じパッケージ内に複数の`init`関数がある場合、それらはファイルの出現順序で実行されます
- `init`は自動実行される関数であるのに対して、`Init`は通常の関数として明示的に呼び出される関数です。役割が異なり、使い方も異なります

## init関数の役割

### 自動実行
`init`関数はパッケージがインポートされたときに自動的に実行されます。プログラマが直接呼び出すことはありません。これにより、プログラムの初期化処理を意識せずに行うことが可能です。

```go
package main

import (
    "fmt"
)

var initValue string

func init() {
    initValue = "Initialized"
    fmt.Println("Init function executed")
}

func main() {
    fmt.Println(initValue)
}
```

### 初期化
`init`関数は、パッケージレベルの変数の初期化、設定ファイルの読み込み、リソースの準備など、プログラムの実行前に必要な初期化処理を行うために使われます。

### 実行順序
各パッケージの`init`関数は、そのパッケージ内のすべての変数宣言や`import`文の後に実行されます。複数の`init`関数がある場合（例えば、同じパッケージ内の複数のファイルに`init`関数がある場合）、それらはファイルの出現順序で実行されます。

## `init`関数とは
`init`関数は自動実行される特別な関数であり、プログラマが直接呼び出すことはできません。

## `Init`関数とは
`Init`関数は通常の関数であり、プログラマが明示的に呼び出す必要があります。

## 参考文献
- [Effective Go](https://go.dev/doc/effective_go#init)
Powershellで他のスクリプトを読み込ませたい

# １　背景

他のpowershellスクリプトを読み込み実行する方法を確認したかったので備忘録として書きます。


# ２ 他のpowershellスクリプトを読み込ませる方法 
スクリプト内に以下のように実行したいスクリプトを記載します。


```test.ps1
./yomikomi.ps1
```

読み込みたい内容は以下の通りです。

```yomikomi.ps1
Write-Host "静岡県は温暖な気候です"
```


実行結果は以下の通りです。
```test.ps1実行結果
静岡県は温暖な気候です
```


文の数が多くなり、スクリプト本体を直接編集することは余計なミスが増える恐れが出てきます。
本体を編集することなく内容を変更できるようになることがメリットです。
【Vercel】デプロイ後JSが反映されない。

こんにちは、無料デプロイツールのVercelを最近使い始めました。
 vercelに無事デプロイはできたものの、次はJSファイルが反映されなくなりました。

- 使用言語
Laravel
- 使用ツール
Vercel
PostgreSQL


ローカルでは問題なく動くので、「vercel.json」に問題がありそうです。

**vercel.json**の内容
```
"version": 2,
    "functions": {
        "api/index.php": { 
            "runtime": "vercel-php@0.6.0" 
            } 
        },
    "routes": [
        {
            "src": "/css/(.*)",
            "dest": "/public/css/$1"
        },
        {
            "src": "/js/comment/(.*)",
            "dest": "/public/js/comment/$1"
        },
        {
            "src": "/js/user/(.*)",
            "dest": "/public/js/user/$1"
        },
        {
            "src": "/js/(.*)",
            "dest": "/public/js/$1"
        },
        {
            "src": "/images/(.*)",
            "dest": "/public/images/$1"
        },
        {
            "src": "/post/(.*)",
            "dest": "/public/post/$1"
        },
        {
            "src": "/profile/(.*)",
            "dest": "/public/profile/$1"
        },
        {
            "src": "/(.*)",
            "dest": "/api/index.php" 
        }
```

力を貸していただけると幸いです。

【解決】
相対パスの使用で反映された
```
<script src="/js/app.js"></script>
```
を下のように変える
```
<script src="/js/comment/app.js"></script>
```
Quick Start: Visual Studio Code for Salesforce Development



https://trailhead.salesforce.com/content/learn/projects/quickstart-vscode-salesforce


# Use Visual Studio Code for Salesforce Development

+ [We could not find Apex class named 'AccountController' after deploy](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007er7Re)

:::note
If you have multiple orgs connected or authorized in VSCode, then your code must be getting dpeloyed to one of the default org set.

Try setting the org you want to use as default using below command:

sfdx force:config:set defaultusername = 'Username that you want to use'

And then confirm the list of orgs by using below command:
https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8uZISAZ

I'm also concerned about SSL warning.

https://stackoverflow.com/questions/70365875/error-during-creation-self-signed-ssl-with-
:::
(UNO)8ビット機、-1のマイナスを外す。あと-6も




参考


https://xtech.nikkei.com/it/members/ITPro/ITBASIC/20020619/1/


x UNOでは、そのうちやる


●マイナスは、-1して、全反転すると外す事が出来る。

aは、一時領域

a = (-1) - 1

a = ~a



ex -6


b = -6

b--

b = ~b 


結果


![o_coq345.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/967be6af-5804-7a0a-b111-eb34426e17c9.jpeg)


プログラム

オンラインコンパイラ


```c++

#include <iostream>
using namespace std;
int main(void){
    // Your code here!
    printf("START\n");
    
    int a,b;
    
    a = (-1)-1;
    a = ~a;
    
    printf("%d\n",a);
    
    b = -6;
    b--;
    b =~ b;
    
    printf("%d\n",b);
}



```
paiza.ioでelixir その309

# 概要
paiza.ioでelixirやってみた。
練習問題、やってみた。

# 練習問題
ゼロパディング zero padding ゼロ埋め 桁そろえ  桁合わせ

# 参考にしたページ

https://qiita.com/torifukukaiou/items/df3c28dd6ee5cb9c526e

# サンプルコード

```
String.pad_leading("55", 4, "0")
|> IO.inspect

String.pad_leading("abc", 5)
|> IO.inspect

String.pad_leading("abc", 4, "12")
|> IO.inspect

String.pad_leading("abc", 6, "12")
|> IO.inspect

String.pad_leading("abc", 5, ["1", "23"])
|> IO.inspect


```

# 実行結果

```
"0055"
"  abc"
"1abc"
"121abc"
"123abc"
```

# 成果物

https://paiza.io/projects/X01gGpsiSdLzVOxtok-uJg

以上。
Reactアプリのセットアップ ~ 簡単な認証まで

voltaを使ってReactアプリケーションをset upするところまでやったので、記録を残す。認証はfirebaseを使っている。

1. voltaのインストールは[公式サイト](https://volta.sh/)を参考。めちゃ簡単。

1. `npx create-react-app --template typescript my-app-ts`でtypescript templateを使用して、reactアプリケーションを立ち上げる。
1. `volta pin npm@10.8.2`と`volta pin node@20.17.0`とかで、`package.json`に指定バージョンのnpmとnodeを使うことを書いてくれる。他のメンバーは、`npm i`するだけ!
1. firebaseのプロジェクト作成してreactアプリと繋げる。詳細は[公式document](https://firebase.google.com/docs/auth/web/start?_gl=1*1nn4ey5*_up*MQ..*_ga*MTkyNDU3NTYyNy4xNzI0NzA2NDg1*_ga_CW55HF8NVT*MTcyNDcwNjQ4NC4xLjAuMTcyNDcwNjQ5MC4wLjAuMA..&hl=ja)。プロジェクト作成して、言われた通りにセットアップするだけ
1. ログイン機能いざ実装!
    -  `App.tsx`はこんな感じ
    ```
    import { LoginForm } from "./LoginForm";
    import AuthRouteGuard from "./AuthRouteGuard";
    
    function App() {
      return (
        <>
          <LoginForm />
          <AuthRouteGuard>
            <Contents />
          </AuthRouteGuard>
        </>
      )
    }
    
    const Contents = () => {
      return (
        <p>sign in済み</p>
      )
    }

    export default App;
    ```
    -  `AuthRouteGuard`はこんな感じ
    ```
    import { FC, ReactNode } from 'react'
    
    import { useAuth } from './query/useAuth'
    
    const AuthRouteGuardComponent: FC<{
      children: ReactNode
    }> = (props) => {
      const { children } = props
    
      const { loading, error } = useAuth()
    
      if (loading) {
        return <p>Loading中だよ</p>
      }
    
      if (error) {
        console.log(error)
        return null
      }
    
      return <>{children}</>
    }
    
    const AuthRouteGuard: FC<{
      children: ReactNode
    }> = (props) => {
      const { children } = props
          return <AuthRouteGuardComponent>{children}</AuthRouteGuardComponent>
        }
    
    export default AuthRouteGuard
    ```

    - useAuthはこんな感じ

```
import { onAuthStateChanged, User } from 'firebase/auth';
import { useState, useEffect } from 'react';

import { fireAuth } from '../firebase';

export const useAuth = () => {
  const [user, setUser] = useState<User | null>(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    const unsubscribe = onAuthStateChanged(fireAuth, async (user) => {
      if (user) {
        setUser(user);
      } else {
        setUser(null);
      }
      setLoading(false);
    });

    return () => unsubscribe();
  }, []);

  if (loading) {
    return {
      user: null,
      error: null,
      loading: true as const,
    };
  }

  if (!user) {
    return {
      user: null,
      error: "unauthorized",
      loading: false as const,
    };
  }

  return {
    user: user,
    error: null,
    loading: false as const,
  };
};
```

AuthRouteGuard componentがユーザーが認証済みかを判定して、そうじゃなければ弾いてくれる。
認証だけfirebaseを使うなら、MeRouteGuardとかを別で用意してそこで、DBからユーザー情報が正しく返ってくるかどうかの判定を行う。
2024/8/27主にITとかセキュリティの記事

Chromeに保存された認証情報を大量に窃取するサイバー攻撃確認、注意を(8/24)
https://news.infoseek.co.jp/article/mynavi_2805359/?tpgnr=it
https://news.livedoor.com/article/detail/27050494/

シスコのスイッチ狙う中国の脅威グループ、メモリからマルウェア再構築(8/25)
https://news.mynavi.jp/techplus/article/20240825-3011330/

マルウェアに感染させる新しい手口、ルート証明書の更新を促す警告に注意(8/25)
https://news.mynavi.jp/techplus/article/20240825-3011327/

GitHub、管理者権限を取得できるEnterprise Serverの脆弱性を修正(8/25)
https://news.mynavi.jp/techplus/article/20240825-3011396/

ブロックチェーン業界、SECの包括的な監査証跡規制に反発(8/25)
https://crypto-times.jp/news-blockchain-industry-strongly-opposes-cat/

ホテルやオフィスの電子錠カードにバックドア、数分程度ですべて解錠可能(8/25)
https://news.mynavi.jp/techplus/article/20240825-3011153/

ボットネットの中枢、C&Cサーバーの仕組みと対策とは？
https://cybersecurity-park.com/2637/

「正義のハッカー」中国が悪用か
脆弱性突いた攻撃が急増　21年に政府へ「バグ」報告義務化(8/25)
https://www.nikkei.com/article/DGKKZO83003860U4A820C2EA5000/

セキュリティソフトを無力化するツール用いるランサムウェア攻撃に注意(8/25)
https://news.mynavi.jp/techplus/article/20240825-3006450/

【アメリカ】NIST、量子コンピューター時代のサイバー攻撃対策アルゴリズムで3標準規格決定。全てIBM(8/25)
https://sustainablejapan.jp/2024/08/25/nist-post-quantum-cryptography-standards/105204

【詐欺】偽りそな銀行からの怪しいメールが話題。「口座取引を制限する」と脅してくるが実は……(8/25)
https://ascii.jp/elem/000/004/217/4217379/?rss

高速料金が安くなるけど「ETC2.0」なぜ普及が進まない？ 「通常のETC」より便利なのに“メリット”感じない人が多い理由(8/25)
https://news.livedoor.com/article/detail/27051796/

主要AIモデルをリスク評価でランク付け、見えてきた大きな差(8/25)
https://www.sankei.com/article/20240825-IVVKT3NLNFMUNPKXOHW2LUTYQQ/

非常勤のシニアリーダーがあなたの会社を救う
企業を飛躍させる新しい雇用形態(8/25)
https://dhbr.diamond.jp/articles/-/10732

サイバー攻撃への構えは　警察庁元幹部や被害病院に聞く
河原淳平氏/松原実穂子氏/須藤泰史氏(8/25)
https://www.nikkei.com/article/DGXZQOCD167YL0W4A810C2000000/

国立QST病院がランサム被害　管理者に共通パスワードを設定(8/26)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/031800050/081900066/

善にも悪にも使えるもろ刃の剣、プログラムの実行過程に介入する「フック」の技術(8/26)
https://xtech.nikkei.com/atcl/nxt/column/18/02805/082100008/

2000ノードを1枚に凝縮、プロがうなる「Interopのネットワーク図」の秘密(8/26)
https://xtech.nikkei.com/atcl/nxt/column/18/02922/081900001/

持ち株会社と地域統括会社に専門組織、2階層で推進するアサヒグループHDのDX(8/26)
https://xtech.nikkei.com/atcl/nxt/column/18/02916/080900001/

システムの移行(8/26)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/031500132/081900031/