強まっていこう

あっちゃこっちゃへ強まっていくためのブログです。

プログラミング周りの疑問はGoogleに聞くよりまず ChatGPT に聞け(アフィの死?)

最近 ChatGPT に聞いてばかりの日々を過ごしている
とても快適だ
こんなに頼りになるやつは今までいなかった

Google は検索の質がどんどん下がり、開発時の疑問を解決しようとしても必要な情報を全く出してくれず、
一般的なクソどうでも良い浅くて薄い情報ばかりを上位に表示してきやがるもんで、何度もページャのリンクをクリックし、検索条件を入れ直し、
日本語サイトがゴミばかりなので英語で入力して結局フォーラムに行きつき、そのフォーラムの中から必要な情報を探すのにさらなる時間を使うが結局見つからず、
永遠と時間を浪費しながらネット上の情報を探す必要があった

しかし、ChatGPT は瞬殺で答えを出してくれる

例えば今 Svelte で遊び始めたんだが、SvelteKit が空気読めていないところがあって、+page.svelte と先頭に「+」がついているファイルを大量に扱う必要がある
こいつを vi で開こうとするとエラーになるんだ

なんだよこれ・・・と思いつつ ChatGPT に聞いてみた

「+で始まるファイルをvimで開くとエラーになるのはなぜ?」

すると一発で答えが返ってきた

UNIX系のオペレーティングシステムでは、ファイル名の先頭に"+"が含まれる場合、それは特別な意味を持ちます。"+ファイル名"は、Viエディタが使用する編集バッファの名前として解釈されます。つまり、Vi/Vimが自動的に生成するバッファ名と重複して
しまうため、+で始まるファイルをvimで開こうとするとエラーが発生する場合があります。

したがって、+で始まるファイルを開くには、Vimに明示的にバッファ名を指定する必要があります。例えば、以下のようにします。

vim ./+filename

または、Vi/Vimを起動してから、次のようにバッファ名を指定して開くこともできます。

:edit +filename

これ Google で聞いてみ?そこには絶望しか無いから

とは言え vim ./+filename でいちいち開くのもちょいと面倒くさいなぁと思い

vim で +で始まるファイルをバッファとして開かない方法」

と検索したらこんな答えが返ってきた

Vimでは、+で始まるファイルは自動的にバッファとして開こうとしますが、これを回避する方法はいくつかあります。

1. -- オプションを使用する

vim -- +filename

-- オプションは、その後の引数をファイル名として解釈するようにVimに指示します。したがって、この方法では、+で始まるファイルをバッファとして開く代わりに、通常のファイルとして開くことができます。

(略)

おお~ありがとうありがとう

alias vim='vim --'

と .zshrc に書いておけば良いだけなんだ、と一瞬で問題解決した

Google と戯れていたらどんだけ時間を無駄に食ったかわからないものを、数分で解決してくれた

マジで助かる

こう言うマニアックな質問とは別に、「あれ?なんだったけ?」って言うど忘れ系も一瞬で答えてくれるから助かる

「node で値がない場合に初期設定する方法」

JavaScript の Node.js 環境で、変数に初期値を設定する方法はいくつかありますが、一般的な方法としては以下のようなものがあります。

1. (略)

2. nullish coalescing 演算子を使う方法

const value = undefined; // 値がない場合
const defaultValue = 'default value'; // 初期値

const result = value ?? defaultValue; // nullish coalescing 演算子で初期値を設定
console.log(result); // 'default value' が出力される

3. (略)

いやぁ素晴らしい
自分のそばに、聞くと何でも一瞬で答えてくれる頼りになるやつがいるってのは本当に助かる

Google に聞くよりまず ChatGPT!
ChatGPTが頓珍漢な答えしか返してくれない場合のみ絶望に打ちひしがれつつ涙を拭いながら Google と戯れれば良い

ただ、こんな調子だと、サイトがどんどん死滅していくんだろうなとは思う
コンテンツを書いている人間の大半は広告で稼いでいるんだから

そうなると ChatGPT の情報もそういったコンテンツデータのかき集めなわけだから、ChatGPT の質もどんどん下がって行ってしまう
ここらあたりの矛盾をどう解決していくかが大事なんだろうなと思うな
金の回し方を考えないと先が無い気がする

まぁ開発系はもともとオープンソースの考えがあるし無料でやる精神が養われているからどうにかなるのかもしれんけどね

ChatGPTはプログラマーにとって便利だがプログラマー大量死を招く

コードを書く時って、わからないことがあるとググるわけだが、
クソみたいな概要説明だけで具体的なコードが一切無いゴミサイトに釣られてイライラしつつ
コードのあるサイトを見つけたものの、自分が欲しいどんぴしゃなものじゃ無いからそれをどう変えればいいか更に調べて、みたいな不毛ループに結構な時間を浪費する

でも ChatGPT を使えばサクッと自分の欲しいコードを出してくれる

例えば「25番ポートに対してデータを送るnodeのコード」と入力すると

const net = require('net');

const client = net.createConnection({ port: 25 }, () => {
  console.log('connected to server!');
  
  // SMTP communication example
  client.write('EHLO example.com\r\n');
  client.write('MAIL FROM:<sender@example.com>\r\n');
  client.write('RCPT TO:<recipient@example.com>\r\n');
  client.write('DATA\r\n');
  client.write('Subject: Test email\r\n');
  client.write('\r\n');
  client.write('This is a test email.\r\n');
  client.write('.\r\n');
  client.write('QUIT\r\n');
});

client.on('data', (data) => {
  console.log(data.toString());
  client.end();
});

client.on('end', () => {
  console.log('disconnected from server');
});

上記のコードでは、netモジュールを使用して、25番ポートに接続しています。createConnection()メソッドを使用して、ポート番号25を指定してサーバーに接続しています。

SMTP通信を例として使用しています。SMTPは、電子メールを送信するためのプロトコルであり、25番ポートを使用します。SMTPサーバーに接続するには、EHLOコマンドを送信する必要があります。その後、MAIL FROMおよびRCPT TOコマンドで、メールの送信元と宛先を指定します。DATAコマンドを使用して、メールの本文を送信します。メールの本文の終わりには、.

とサクッと説明までつけて返してくれる
これでググってイライラする事も無くなった

しかも、どんな言語でも OK と来る
なんせ nim まで OK だ

import net/smtp

# メールの送信元と宛先
let sender = "sender@example.com"
let recipient = "recipient@example.com"

# メールの内容
let subject = "Test email"
let body = "This is a test email."

# SMTPサーバーの情報
let smtp_server = "smtp.example.com"
let smtp_port = 25

# SMTPクライアントの作成
let smtp_client = newSmtpClient(smtp_server, smtp_port)

# メールの作成
let message = initMessage(sender, @[recipient], subject, body)

# メールを送信
smtp_client.sendMail(message)

# SMTPサーバーとの接続を終了
smtp_client.quit()

さよならグーグル先生
さよなら Qiita
さよなら stack overflow

続きを読む

ChatGPT 試してみた。今のところ、とにかく遅いけど試してみると楽しいよ。

Google が終わる!時代が変わる!なんて大騒ぎされている ChatGPT
どんなもんかと使ってみた時のメモ
結論としては今のところ遅すぎるから使い物になんねぇなと言う感じ
速くなったら凄まじいものになりそうな雰囲気に満ち溢れてはいる

「プロレスの魅力を教えて」の回答結果が以下だ

プロレスは、観客を魅了する多くの要素を持っています。以下はプロレスの魅力のいくつかを示します:

スリル: プロレスは危険な技やピンチのシーンがあり、観客を緊張させます。

ドラマ: プロレスには物語性があり、試合中に試合前のストーリーが展開されます。

演技: プロレスラーたちは見事な技やトリックを披露し、観客を魅了します。

エンターテイメント性: プロレスはエンターテイメント性が高く、観客を楽しませます。

観戦者との一体感: プロレスは観客との一体感が強い、声援や総立ちなどで観客との一体感を強めます。

これらの要素を組み合わせて、プロレスは観客を魅了するスポーツとなっています。

素晴らしい回答だ。どんなプロレスファンも納得するだろう

ただまぁ微妙なものもある。「ミッドウェー海戦で日本が負けた理由は?」の回答が以下だ

ミッドウェー海戦は1942年6月4日から6月7日にかけてアメリカと日本が対決した海戦です。日本が負けた主な理由は以下のとおりです:

航空力: 日本の航空力はアメリカのものに劣っていました。アメリカは多数の戦闘機と航空母艦を派遣し、日本は損害を受けました。

兵力: アメリカは多数の兵士と装備を派遣していましたが、日本は人的資源不足に陥っていました。

計画の難しさ: 日本は戦略的に不利な状況にあり、作戦計画を立てることが困難でした。

司令部の誤り: 日本の司令部は予想外の情勢に対応することができず、戦略的なミスを犯しました。

これらの要因が合わさって、日本はミッドウェー海戦で負けました。

いや・・・日本が大戦力で挑んだのにも関わらず正規空母4隻も爆沈させられたんだが・・・。

日本: 空母6隻、戦艦11隻、重巡10隻、軽巡7隻、駆逐艦54隻、潜水艦23隻
米: 空母3隻、重巡7隻、軽巡1隻、駆逐艦19隻、潜水艦19隻

と艦艇の数は圧倒している
ただ航空機は米軍側は陸上基地があるので日本の方がやや少ない状態ではあったがさほど差は無かった

大惨敗の原因は、いろいろある。暗号バレの作戦バレ。索敵失敗
致命傷は 爆弾を魚雷に変えたりして火薬だらけの状態のところに急降下爆撃機の爆弾がぶち刺さっての大爆発
これは南雲忠一の判断ミス。山口多聞の助言も聞かずに大暴走した結果だ

なので、司令部の誤りのところは確かに正解ではある

しかし、根本原因は日本軍の驕り高ぶり。米軍を舐めすぎたのが原因なのだ

とまぁ今のところすべてが合っているわけではないが全く頓珍漢な事を返してくる事もあまりない感じ
モデルデータが更新されていけばビタビタとドンピシャの答えを返してくるようになるだろうしね

気軽に試すならコレ(サインアップが必要)

https://chat.openai.com/chat

下のテキストボックスに何か入力すると回答が返ってくる(かなり遅い)
一発目に打ち込んだテキストが英語に翻訳され左側にチャットとして登録される

新しいチャットを始めたければ + New chat を押せば良い
消したければゴミ箱押してチェックをクリック

続きを読む

民放各局は NHK に首を絞め続けられてこのままだと死ぬ

news.yahoo.co.jp

TV を所有したのに NHK に金を払っていない場合、受信料 + 割り増し金(受信料 x 2) を取って良し。

キセル乗車と同じで、受信料の3倍の値段を払うことになる。

こんなもんがさらっと議決し、2023年4月1日から施行される。

2023年10月から NHK の料金は 1,225 円 -> 1,100 円となるわけだが、まぁ 1,100 円として、
1年支払わなかった場合どれだけ取られるかと言うと 39,600 円取られる事になる。
3年払ってなきゃ12万。10年で40万だ。

こんな状態になったら何が起きるか?

国民は TV を捨てて買わなくなる。

ニュースなんて Youtube で見れるし、ワールドカップだって ABEMA で無料で見れる。
NHK なんぞに金払うぐらいだったら、アマプラ、Netflix、Hulu どれかに入った方が何億倍も幸せだし。

HHK たった1局に金を払いたく無いばかりに、TV が捨てられる。

その一番の被害者は民放だ。

予算が削れ、コンプラがうるさくなり、それにうんざりした優秀なディレクターが逃げ出している状況だ。
テレ東佐久間氏が筋道を作ってしまったから、この流れはさらに加速するだろう。

民放はもっと寄ってたかって NHK と戦うべきなんだが、根底は仲良しクラブなのでやらない。

非常にくだらないし、最高にアホだ。

NHK と比べて CM 入るから CM なんて真剣に見る習慣が無いどころか忌み嫌う対象でしか無いネット世代を繋いでおくのがきついと言うのに。

ま、ネットを敵対視してネット進出遅れるようなノーセンス集団だから、このまま終焉まっしぐらだろうな。

未だに温暖化は嘘だとかビジネスだとか言っている平和ボケ連中にウンザリ

これだけ様々なデータがあるにも関わらず逆張り連中は何のデータも根拠も無いデマを垂れ流し続けている
本当にたちが悪い

ビジネスだとか言っているやつは普段守銭奴の癖してそのビジネスとやらに乗っからない
ビジネスとして成り立っていない証拠を自ら示す馬鹿さ加減と来た

津波は来ない、原発は安心安全
このアホな主張を未だに続けているのと同じか、それ以下だ

世界中の科学者や政府が人類の英知を集結させて出している予測に歯向かうとか何様のつもりだろう

IPCC(気候変動に関する政府間パネル) は地球温暖化に関する研究データの収集、整理を行う国際的組織だ
66カ国230名の専門家が14,000を超える論文を引用し3回もその論文を査読して78,000あったレビューコメント全てに対応して
そのコメントと対応も全公表していると言うモンスター集団だ
ノーベル平和賞ももらっている
まさに、人類知見の集結である

www.data.jma.go.jp

アホはこの情報に対して「間違っている!」とほざいているのだ・・・
もはや見ているこっちが恥ずかしい・・・

日本は1997年京都で地球温暖化防止京都会議(COP3)を開催したりと早期からこの問題を深刻に受け止め行動しており
世界をリードしようと努力しているのだが、その足を引っ張っているのだ
もはや国賊である

温暖化は起こっているのだ

それに反論するならIPCC以上の組織を作り出し、膨大な論文をかき集めて反論しろ

人類のせいなのかどうなのかとかは正直自分はどうでも良いがな

何故なら、いくら人類に危機を訴えたところで全く温暖化は止まっていないから

「お前らのせいだからしっかりしろ!」なんてフェーズはとっくに過ぎていると思うしそもそも意味が無かったのだ

20年以上活動してきて人類は温暖化の抑制に間違い無く失敗したしこれからも成功は無い

続きを読む

完全独裁者 イーロン・マスク ツイッターでの大暴れまとめ

なんか Bot とかなりすまし多いしやめるわ、と言い出す (07/08)

イーロン・マスクが「Twitterの買収を取りやめる」と発表 - GIGAZINE

ツイッターが「なんで買収やめるんだよ、逃げんな」とマスクを提訴 (07/12)

Twitterがイーロン・マスク氏を提訴 6兆円の買収取引撤回に反発 - 日本経済新聞

洗面台を持ってツイッター本社に出向くパフォーマンスで世界レベルでスベる (10/26)

イーロン・マスクなぜか洗面台を抱えてTwitter本社入り | ギズモード・ジャパン

Twitter 買収 -> 役員全てクビ -> 取締役会を解散して一人取締役に (10/27)

イーロン・マスク氏、Twitter唯一の取締役に CEOら9人を解任 - ITmedia NEWS

エンジニアに対して30日分のコードを印刷して出せと言い出す (10/29)

Tweet / Twitter

上場を廃止して株主も完全に追い出し100%独裁体制に (10/28 に取引停止 ... 11/08 に上場廃止)

イーロン・マスク氏がTwitter買収完了 上場廃止 - Impress Watch

続きを読む

UMD を出来るだけシンプルに説明してみる

何?

Node.js とブラウザの両方で強引にコードを読ませるための暴力的な書き方

実例

public/js/umd.js にモジュールが存在し、そこが Web でも公開されているとして呼び方は以下のようになる

Node.js で呼ぶ場合

#!/usr/bin/env node

const UMD = require('./public/js/umd')

const umd = new UMD()
umd.say()

ブラウザで呼ぶ場合

script(src='/js/umd.js')
script.
  const umd = new UMD()
  umd.say()

こんな感じで Webpack とかしなくても普通に読めるようになる

モジュールの書き方

;(function (root, factory) {
  if (typeof define === 'function' && define.amd) {
    define(factory)
  }
  else if (typeof exports === 'object') {
    module.exports = factory()
  }
  else {
    root.UMD = factory()
  }
}(this, function () {
  return class {
    say() { console.log('UMD') }
  }
}))

これが一般的な書き方なんだが、一番上の if の部分は Require.js 用の記述なので今や要らん

;(function (root, factory) {
  if (typeof exports === 'object') {
    module.exports = factory()
  }
  else {
    root.UMD = factory()
  }
}(this, function () {
  return class {
    say() { console.log('UMD') }
  }
}))

これで良い

まぁコード見れば分かる通りやってる事はバカバカしいほどシンプル
即時実行関数を使って export するものを環境別に出しわけてる

続きを読む