
はてなキーワード:blobとは
ChatGPTその物が正確な知識を持ってる訳ではないので、インターネット上に公開されてる情報をChatGPTに集めさせて要約させるのがコツ。
ChatGPTだと"o3"とかがそういう作業を得意としている。
「o3-pro + DeepResearch」だとか「Gemini 2.5 pro + DeepResearch」だとか"DeepResearch"の名前を冠した機能を使えばもうちょっと詳しい情報が出てくる。
質問の例
回答
---***▶︎メーカーが公称する「スペック上の射程」****MP5 は 9mm×19 パラベラム弾を使用し、銃身長は約 225mm、初速はおおむね 400 m/s。H\&K公式サイトではこの条件で弾頭エネルギーを約 650 J とし、*effective firing range*(最大有効射程)を **200 m** と示しています。([en.wikipedia.org][1], [heckler-koch.com][2])---***▶︎ “射程”という言葉の食い違い**1. **最大射程**:弾が空気中に留まり得る限界距離(安全係数なし)。2. **最大有効射程**:設計上「命中率と停止力をまだ期待できる」ぎりぎりの距離。メーカーや軍規格が定義。3. **実用射程(運用上のレンジ)**:訓練・装備・任務環境を前提に、部隊が日常的に想定する距離。公称 200 m は②の概念であり、③とはしばしば乖離します。---***▶︎ 9mm パラ弾の弾道と威力変化(例:Federal AmericanEagle 115grFMJ)**** **初速・初期エネルギー**:1180ft/s ≒360 m/s、356ft-lb ≒ 480 J。** **100 yd(約 91 m)時点**:速度 ≈ 960ft/s、236ft-lb ≒ 320 J。弾道は照準ラインから **-8.7 inch(-22cm)** 下に落下(25 ydゼロ)。([federalpremium.com][3])** 200 m付近になると落下量はおおむね 70cm 以上、エネルギーも 300 J前後まで低下し拳銃弾相当となります(計算値)。** 同じ 9mm 弾でも弾頭重量・薬量で 50 J 以上変動するため、ここでは「典型的な練習弾」の例を採用。** なお、工場マニュアルは「25 m でも発射体は 1マイル(1.6km)以上飛び得る」と警告しています。([cdn.preterhuman.net][4])---***▶︎ゼロインと実戦での射撃距離**** H\&K は出荷時に **25 m** でゼロイン(8 gNATO 弾、6 時照準)を調整。([en.wikipedia.org][1])**LAPDSWAT のMP5資格コースは最長 **50 yd(≈ 46 m)**。講習・CQBドリルも 0-50 m に集中しています。([lapdonlinestrgeacc.blob.core.usgovcloudapi.net][5])**米海軍SEAL/各国警察特殊部隊のマニュアルでも「点的射撃はおおむね 100 m 以内」を推奨とされる例が多数(公開講習資料・訓練要領より)。---***▶︎カタログ 200 m とCQB 50 m が離れる理由**** **弾道補正**:200 m では 70cm 以上の落下を想定して狙点を大きく上に取る必要がある。ダイオプター照準と短いサイト半径では現実的に困難。** **停止力の低下**:100 m で既にエネルギー約 320 J、200 m では拳銃以下。防弾ベスト(IIIA 相当)への貫通は運任せになる。** **任務特性**:MP5 の主要ユーザは法執行機関・対テロ部隊であり、建物内や車両制圧など **0-50 m** が大半。** **装備の世代交代**:100 m 超を担う火器はPDW(MP7 等)や 5.56mmショートカービンに置き換えが進み、MP5 は「最も扱いやすい短距離火器」として残った。---***▶︎結論(要点整理)**** **公称有効射程 200 m** は“当てられる上限”を示す設計値。** **実用射程**は多くの現場で **0-50 m**、遠くても **~100 m** が実情。** 9mm 弾は **100 m を超えると弾道落下と威力低下が急激**。**MP5 の真価は「低反動・高精度・操作性」によるCQB 性能であり、**200 m で戦うサブマシンガン**というイメージはスペックシート上の理論値に近い。これらを踏まえると、MP5 を運用する際の最適距離は「**至近〜中距離(おおむね 50 m 以内)**」と考えるのが現場の常識と言えます。[1]:https://en.wikipedia.org/wiki/Heckler_%26_Koch_MP5 "Heckler &KochMP5 -Wikipedia"[2]:https://www.heckler-koch.com/en/Products/Military%20and%20Law%20Enforcement/Submachine%20guns/MP5?utm_source=chatgpt.com "MP5 - Heckler &Koch"[3]:https://www.federalpremium.com/handgun/american-eagle/american-eagle-handgun/11-AE9DP.html "Buy AmericanEagle Handgun9mm Luger Ammo | 115Grain, 1180FPS | Federal"[4]:https://cdn.preterhuman.net/texts/wars_and_weapons/guns/Heckler%20%26%20Koch%20MP5%20Submachine%20Gun%20Operator%27s%20Manual.pdf?utm_source=chatgpt.com "[PDF] Heckler &KochMP5 SubmachineGun Operator'sManual"[5]:https://lapdonlinestrgeacc.blob.core.usgovcloudapi.net/lapdonlinemedia/2022/07/Special_Weapons_and_Tactics_23000.pdf?utm_source=chatgpt.com "[PDF]LOS ANGELES POLICE DEPARTMENT Special Weapons and ..."
7と8。
技術的なところが気になる人はこれだけ読んでくれたらいい
最後に技術的な観点からエアレペルソナが純国産ではないということを指摘する。
RocketChatという海外で開発されたOSSチャットアプリをフォーク、改変したもののよう。
ttps://github.com/RocketChat/Rocket.Chat.ReactNative
ttps://rocket.chat
フォーク元はバリバリ多国籍、外資である。(RocketChat自体は問題のないアプリであり、このエアレペルソナとはフォーク関係を超える関係はないと思われる)
冒頭のこの部分に関してである。
ttps://play.google.com/store/apps/details?id=chat.airlex.reactnative
Google Playで公開されているエアレペルソナのAndroidアプリをリバースエンジニアリングして調べてみた。
ちなみに、エアレペルソナには利用規約のようなものは見当たらず、リバースエンジニアリング禁止条項も無いようだった。
ttps://apps.evozi.com/apk-downloader/
ttps://github.com/pxb1988/dex2jar
この辺を使ってapkをダウンロードし、apkを解凍し、chat.airlex.reactnative/classes.dexをjar fileに変換した。
classes.dexから変換されたjarファイルを展開するとchat/airlex/reactnativeというフォルダ、パッケージが見つかる。
このパッケージ内のファイル(.class、クラス)がエアレペルソナの処理を行うもののようである。
このクラスをJadを使い、デコンパイルしてみた。その結果が以下である。
ちなみにここからapkをアップロードするとdex2jarをしなくてもJavaのソースコードにまでデコンパイルしてくれた。便利。
package chat.airlex.reactnative;importandroid.content.Context;importcom.ammarahmed.mmkv.SecureKeystore;import com.facebook.react.bridge.ReactApplicationContext;import com.tencent.mmkv.MMKV;publicclass Ejson {privateString TOKEN_KEY ="reactnativemeteor_usertoken-";String cardId;String host;String messageId;String messageType;/*access modifiers changed from: private */public MMKV mmkv;String msg;String notificationType;String rid; Sender sender;String senderName;String type;public Ejson() { ReactApplicationContext reactApplicationContext = CustomPushNotification.reactApplicationContext;if (reactApplicationContext !=null) { MMKV.initialize((Context) reactApplicationContext);new SecureKeystore(reactApplicationContext).getSecureKey(C0617Utils.toHex("com.MMKV.default"),new RNCallback() {publicvoidinvoke(Object... objArr) {if (objArr[0] ==null) { MMKV unused = Ejson.this.mmkv = MMKV.mmkvWithID("default",1, objArr[1]); } } }); } }publicString getAvatarUri() {if (this.type ==null) {returnnull; }return serverURL() +"/avatar/" +this.sender._id +"?rc_token=" + token() +"&rc_uid=" + userId(); }publicString token() {String userId = userId(); MMKV mmkv2 =this.mmkv;return (mmkv2 ==null || userId ==null) ?"" : mmkv2.decodeString(this.TOKEN_KEY.concat(userId)); }publicString userId() {String serverURL = serverURL(); MMKV mmkv2 =this.mmkv;return (mmkv2 ==null || serverURL ==null) ?"" : mmkv2.decodeString(this.TOKEN_KEY.concat(serverURL)); }publicString privateKey() {String serverURL = serverURL(); MMKV mmkv2 =this.mmkv;if (mmkv2 ==null || serverURL ==null) {returnnull; }return mmkv2.decodeString(serverURL.concat("-RC_E2E_PRIVATE_KEY")); }publicString serverURL() {Stringstr =this.host;return (str ==null || !str.endsWith("/")) ?str :str.substring(0,str.length() -1); }publicclass Sender {String _id;String username;public Sender() { } }}
フィールド名を見てみると、cardId, host, messageId, messageType, mmkv, msg, notificationType, rid, sender, senderName, typeが存在する。
メソッドには、getAvaterUri、token、userId、privateKey、severURLが存在する。
ところで、RocketChatというOSSのチャットアプリが存在する。
ttps://rocket.chat
そのRoketChatのAndroid実装の中に同名のEjsonというクラスが存在する。
ttps://github.com/RocketChat/Rocket.Chat.ReactNative
ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/android/app/src/play/java/chat/rocket/reactnative/Ejson.java
見比べてみると、フィールドにcardIdが追加されている以外はフィールドやメソッド名、そしてその処理の内容まで一致している。
他にもReplyBroadcastなど、同様のクラスがエアレペルソナに見つかる。
以上のことからエアレペルソナはRocketChatをフォークして、パッケージ名を変えて作られたチャットアプリであり、開発の大部分はRocketChat社の努力と多数のOSSコントリビュータによってなされたものであると思われる。
そもそもこのOSS時代に純だの何だの言っている時点で怪しい。
さて、エアレペルソナがRocketChatをフォークして作られたものであるとすると、気になるのはライセンスである。
RocketChatのOSSライセンスはMITライセンスである。
ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/LICENSE
MITライセンスは非常に緩いライセンスであるため、エアレペルソナの様にフォークして別のアプリケーションとして公開することにはおそらく問題がないということは強調しておく。
現状エアレペルソナにログインできておらず(2要素認証のコードが送信されないといった問題が起きている模様)、使用している各OSSのライセンス表示が適切に行われているかまでは調べられていない。
あぁ、この話は 巨大なテーブル(カラムが多いとか、大きなデータが入ってるとか)を検索するよりも、小さなテーブルでサブクエリしたほうが速いこともあるって話で会ってBLOBの是非の話ではなかったり。
一番わかり易いのが巨大なBLOBだっただけ。
BLOBはできるだけ使わない方が良いと思うぞ?