投稿

.NET 文字列を指定したバイト数以内で切り出す

イメージ
.NETでは、String.Substringや範囲演算子を使用して、文字列の先頭から指定した長さを切り出すことができます。 string result = value.Substring(0, length); string result = value[..length]; ただし、.NETのstringはUTF-16で管理されています。LengthやSubstringなどで使用するインデックスは、見た目の文字数やUnicodeのコードポイント数ではなく、UTF-16のコードユニット(char)単位です。そのため、UTF-8などのエンコーディングに変換した場合のバイト数を基準に切り出したい場合は、Substringなどをそのまま使用することはできません。 また、UTF-8のような可変長エンコーディングでは、1つの文字(Unicodeコードポイント)を複数バイトで表現することがあります。そのため、エンコード後のバイト列を指定した位置で単純に切ると、1文字分のバイト列が途中で分割されてしまう可能性があります。 このような場合は、Encoder.Convertが使用できます。 Span<byte> buffer = stackalloc byte[length]; Encoding encoding = Encoding.UTF8; Encoder encoder = encoding.GetEncoder(); encoder.Convert( value.AsSpan(), buffer, flush: true, out int charsUsed, out int bytesUsed, out _); ReadOnlySpan<byte> bytes = buffer[..bytesUsed]; string result = value[..charsUsed]; Encoder.Convertは、出力先のbufferに収まる範囲で入力文字列をエンコードします。このとき、1文字分のバイト列が途中で切れることはありません。 charsUsedには、エンコード時に消費された入力文字列のUTF-16のコードユニット数が格納されます。そのため、charsUsedを範囲演算子のインデックスとして使用することで、指定し...

新しい水筒

イメージ
 先日、水筒を新調しました。 以前使用していた水筒の外側の傷などがだいぶ目立ってきていました。 内部の傷までは確認できませんでしたが、すでに6年近く使用していたこともあり、新しくしました。 店頭で様々な種類のものを見ていましたが、蓋をロックする仕組みが変わっていたり、キャリーループが付いていたりと、 以前はなかった機能がいろいろ増えていて、日々改善されていることに気付きました。 いつも、半日ほどで飲み切ってしまうため、今回は容量も大きめにしました。 変えてみて、良かった点、悪かった点が見えてきましたが、また長く愛用していきたいと思います。 Y.N.

考えるための道具

イメージ
クラウド上で動いているお客様のシステム構成を整理する機会がありました。 クラウドの管理画面でリソースを一つずつ見ているだけでは、それぞれの機器がどのようにつながっているのか分かりにくかったため、AIに構成図を作らせてみました。 クラウドは「サーバーをクラウドに置くだけ」といったイメージがありますが、実際にはネットワークやセキュリティなど、さまざまな仕組みが組み合わさって動いています。 図解してみると、それぞれの役割やつながりが一目で分かるようになり、今まで見えていなかったものが見えてきました。 これは普段の仕事でも同じだと思います。 仕事の流れや業務のつながりを図解してみると、無駄な手順や、特定の人に依存している仕事など、普段は気づきにくいことが見えてくることがあります。 また、自分では分かっているつもりでも、図にして人に説明しようとすると、うまく説明できない部分が出てくることがあります。 それは、自分の中でもまだ整理できていない部分なのかもしれません。 そうしたものを見つけられるだけでも、図解することには価値があると思います。 図にすることで、物事を分かりやすくするだけでなく、「本当にこれでいいのか」と立ち止まって考えることができます。 普段当たり前にやっている仕事ほど、一度図にしてみると、新しい発見があるかもしれません。 ― S.N. インプラス株式会社

突然「既定のアプリの選択」が大量表示された話

イメージ
ある日突然、ファイルを開こうとするたびに「既定のアプリの選択」というダイアログが表示されるようになりました。 テキストファイル、Word、Excel、PDFと、大半のファイルで発生しています。 さらに気になったのが、同じ日に事務所のメンバー3人に同時に起きていたことです。 1人だけなら個人の環境の問題と割り切れますが、3人同時となると話が変わります。 何か問題が起きているのではないかと、調べ始めました。 ネットで検索しても、同様のトラブルが広がっている様子はありません。 WindowsUpdateがあったわけでもなく、組織的なセキュリティポリシーの変更もありません。 Windowsのファイル関連付けの処理に何らかの問題が起きているのか、原因がなかなか見えてきません。 それでも3人同時という事実が引っかかります。 ウイルスやマルウェアに感染した場合も、ファイルの関連付けが書き換えられることがあります。 実害はなくても、事務所内で同じタイミングに発生しているとなると、見過ごすわけにはいきません。 もう少し粘って調べてみました。 すると、可能性が高いものを発見。 原因は、Claude Desktopのアップデートでした。 アップデートにより、Claude Desktopが扱えるファイルの種類が増えたようです。 Claude Desktopが新たに対応した拡張子は、Windowsの既定アプリの設定に変化が生じるため、そのファイルを他のアプリで開こうとする際にも「どのアプリで開きますか?」と確認するのはWindowsの仕様です。 つまり、エラーでも不具合でもなく、正常な動作だったということです。 同じタイミングでアップデートが適用されたことで、3人同時に発生したのも納得できました。 原因がわかると、すっきりします。 (HK) インプラス株式会社

『発達性トラウマ』(みきいちたろう)

イメージ
  『発達性トラウマ』(みきいちたろう)を読みました。 トラウマについて総論的に書かれていました。意外と読みごたえがあり面白かったです。 (倉) インプラス株式会社

新しいモデルには適したプロンプトを

イメージ
OpenAIが新しいモデル「GPT-6 Astra」を発表しました。あわせて、このモデルの特徴や、プロンプトを作成する際の注意点なども公開しています。 Model guidance | OpenAI API 例えば、従来のモデルでは推測して進めていたような場面でも、追加の確認や質問をする傾向が強くなっています。止まらずに自律的に動いてほしい場合は、ユーザーの意図やタスクの範囲を推測しながら作業を進めて、最後までタスクを完了するよう指示するとよさそうです。 また、コーディングでは、タスク完了前のテストや検証をかなり丁寧に行うようになっています。これによって品質はより良くなると思われる一方、小さな変更でも必要以上に広い範囲をテストする可能性があります。そのため、変更の規模や内容に合わせて、テストの作成や実行範囲をプロンプトで調整するとよいようです。 モデルが進化する一方、その癖も変わっています。新しいモデルには、そのモデルに適したプロンプトを使い、性能を最大限引き出していきたいですね。 HM インプラス株式会社

地平線の赤と、高い空の青

イメージ
 在宅勤務が多いので、健康のために仕事終わりに散歩をしています。これは先月中頃に撮った写真ですが、いい感じの夕焼けを撮れました。なかなかいい出来栄えだと自分では思っていますが、地平線の赤と、高い空の青が共存するわずかな時間には写真では表しきれない美しさがありました。 -TY インプラス株式会社