nakaoka3の技術ブログ

2023年中に52本なにか書きます

きょうのJavaScript/TypeScript - nullチェック

JavaScript/TypeScriptをたまに書くと、いまだにこの言語について基本的なことについて把握していないことが多いということを思い知る。

最近、あるデータがnullかundefinedでないときのみにある処理を行うという、以下のようなnullチェックを書いた。

if (data != null) {
    doSomething(data)
}

JavaScriptでは等価演算子/不等価演算子と厳密等価演算子/厳密不等価演算子がある。上記の例は不等価演算子なので、dataがnullのときもundefinedのときも!=でfalseとなる。

そもそもnullとundefinedがべつものとして存在していることが無駄に複雑で、JSを使いたくない気にさせるが、ブラウザで動く唯一の言語であるなのでそうもいかない。

それはともかくTypeScript Deep Dive によると、nullとundefinedの2つを区別する必要はなく != null でチェックするのがよいとのことだ。nullとundefinedについては以下の記事を参考にした。

typescript-jp.gitbook.io

Asanaにタイムトラッキング機能があったので使っている

Asanaにタイムトラッキング機能があるのを見つけた。よさそうなので使っている。

デフォルトでは無効になっていて、カスタマイズのフィールドの追加をするところから有効にすることで、推定時間と実際の時間のフィールドが追加される。タイマー機能があって、時間を測れるようになっているのが便利。

タイムトラッキング – Asana Help Center

タイムトラッキング機能は「マイタスク」の自分だけが見れるフィールドとして追加している。

マイタスクのフィールドとして追加されている

あるタスクが思っていたよりも難しくて時間がかかっているということが把握しやすくなっていい。

基本的に何事も測るのが好きな方なので、こういうことをするのは楽しい。几帳面ではないのでそのうち使わなくなると思うが、少しの間だけでも使ってみようと思う。

Claude 3 Opus は小説を読むことができるのか - Claude に『走れメロス』を読ませる

最近 ChatGPTよりもAnthropicのClaudeのほうが賢いという噂を目にして、試しにClaudeを使ってみている。確かに賢い気もするが、はっきりとしたことはわからない。せっかくなので色々と試してみようと思う。

去年の8月にLangChainというライブラリを使った実装の練習で、OpenAIのGPT3に『走れメロス』の内容を質問した。なので今回もそれを踏襲して『走れメロス』の内容について質問して、小説の内容を正しく反映した回答が生成できるかを試した。

nakaoka3.hatenablog.com

試したこと

小説に対する質問をして、それに対して自然で正しい内容を生成するかを見た。

ファイルを添付して質問する

WebのClaudeではファイルを添付できるので、小説の本文が入ったテキストファイルをアップロードしてから質問した。3つの質問で、それぞれ正しい説得力のある返答を生成できていた。国語のテストなら正解でいいだろう。気のせいかも知れないが、「〜たのです」というに口調が小説のスタイルに引っ張られて、昔の小説っぽくなっている気がする。いつもの日本語の回答だとシンプルな丁寧語で「〜でした」という口調になる。

ファイルを添付して質問した結果

ファイルなしで質問する

ここまでやった後で、『走れメロス』に関しては本文のファイルなくても答えられるのでは、という懸念が生まれた。この懸念は正しく、本文の添付がなくても同じように内容を正しく反映した回答が生成された。『走れメロス』は学習済みということがわかった。

ファイルなしで質問した結果

本文を改変して質問する

学習済みでない小説について質問したいので、『走れメロス』の一部を改変して、その小説について質問することにした。

質問に合わせて、以下の変更を行った。

この改変内容を含んだ回答になっているかを試してみる。

本文を改変して質問した結果

1つ目の質問は改変内容は無関係。2つ目の質問には、期待通り婿の名前が含まれている。3つ目の質問には、期待通りセリヌンティウスが死亡したと書かれている。ということで、改変内容を反映してた内容を正しく答えることができていた。

まとめ

Claude 3 Opus は小説の内容を把握しているような回答を生成する事ができるということが確認できた。

有名な小説は学習済みの可能性があるので、注意が必要。検証用のデータは学習されている可能性のないデータを使う必要がある。

【Swift】enumのassociated value にデフォルト値をつける

以下のようなSwiftのコードを書いた。

enum Example {
    case one
    case two(name : String)
    case three(name : String = "taro")
}

print(Example.three(name: "hanako")) // three(name: "hanako")
print(Example.three()) // three(name: "taro")

enumのassociated valueにデフォルト値をつけらるとは思っていなかったので、コンパイルエラーになるだろうなと思っていたが、予想に反してコンパイルできた。Swiftのバージョンは 5.8.1 で実行している。

予想とは違っていたので目を疑ったが、どう考えてもコンパイルできて動いている眼の前の現実のほうが正しいだろう。

以下の記事によるとSwift 5.1 から追加された機能らしい。

www.swiftbysundell.com

広島駅前でお好み焼きが食べたいときは

広島市では流川などの繁華街は広島駅から少し離れた場所にあります。駅前にも大きな商業ビルは建っていますが、飲み屋や飯屋が多い繁華街までは路面電車やバスで移動する必要があります。

私が新幹線の出発前に広島駅前でお好み焼きを食べたいときは、広島駅南口の郵便局の隣にあるお好み焼き屋「ゆうゆう」に行きます。

高校生の時によく行っていた店です。正確にはよく行っていたのは近くにあった同じ名前の別店舗のほうですが、いつの間にかなくなっていました。

記憶違いでなければ、20年前は400円で1枚のお好み焼きを食べることはできました。通常料金は500円で、高校生や浪人生は100円引きでした。流石にいまは700円程度に値上げしています。

なぜこんな話を書いているのかというと、週末に YAPC::Hirosima 2024 というソフトウェアエンジニアが集まるイベントがあり、県外から多くのエンジニアが参加するからです。広島駅前だと意外にちゃんとしたお好み焼きを食べれる店を見つけるのが大変かもしれません。駅前ならゆうゆうが個人的におすすめです。

カウンター席だけではなくテーブル席もありますが、大人数で行くと入れないかもしれないので注意です。

注文するときは「肉玉そば」といえばスタンダードなお好み焼きが食べられます。「肉玉うどん」というのが麺がうどんのお好み焼きです。肉玉そばがおすすめですが、肉玉うどんは地域であんまり見ないので試してみてもいいかもしれません。

ゆうゆうのお好み焼

お好み焼きの写真を見たらビールを飲みたくなってきました。

呉の好きな食べ物(メロンパンのナナパン/エーデルワイスのクリームパイ)

メロンパンのナナパン

「メロンパン」という名前のパン屋だ。しっとりとしたパンにチョコが挟まっていて、子供の頃から好きだった。

「メロンパン」にもメロンパンは売っているが、おそらく多くの人が思い浮かべるメロンパンではない。中には白あん(?)がずっしりつまっていている。中身が甘すぎるのでメロンパンのメロンパンはあまり好きではない。

ナナパンは中身が重くないので、ちょうどいい。長い間食べてないので、久しぶりに食べてみたい。

ところでこのメロンパンのメロンパンのせいで、中学生くらいまでメロンパンの概念があやふやだった。他の地域の人間からしたらわけがわからないと思うが、メロンパン/コッペパンサンライズという言葉が指すものがローカルのパン屋・給食・コンビニなどの全国チェーンでバラバラだったりする。さすがに現代ではある程度統一されているのだろうか。現役の呉市民の小学生あたりに聞いてみたい。

melonpan.shop

エーデルワイスのクリームパイ

生クリームとカスタードクリームのみのシンプルなクリームパイ。クリームたっぷりの見た目に反して、重すぎることはなく、サクッと食べられる。すっきりと爽やかな味だった記憶がある。

大人になって色んなケーキを口にしたと思うが、今でもこのクリームパイは好き。思い出補正かもしれないが、ここまで美味しいクリームパイは他で食べた記憶はない。 www.ownerchef-sweets.com

年末なので今年使ったプログラミング言語を振り返り、最新バージョンの様子をチラ見する(2)

年末なので今年使ったプログラミング言語を振り返り、最新バージョンの様子をチラ見するの続き。スマートフォンアプリの開発ではKotlinやSwiftを触っていた。

Kotlin

Androidアプリの開発で触った。思い返してみればKotlinよりも、Javaのほうが多かったような気もする。

  • 現在の最新バージョン 1.9.22
  • 2023年初の時点での最新バージョンは1.8.0

kotlinlang.org

1.9 の変更点を見ると、enum の entries 関数、新しい ..< 演算子などの変更が含まれる。K2コンパイラの話は影響が大きそうなので気になる。KotlinがNativeやJSやWASMでも実用的に使えるようになったら面白そうだ。

1.9の次のバージョンは2.0らしい。来年のKotlinに期待。

blog.jetbrains.com

Swift

iOSアプリの開発で触った。

  • 現在の最新バージョン 5.9.2
  • 2023年初の時点での最新バージョンは5.8

www.swift.org

メモリ管理に関する新しい機能である ownership 所有権 が追加された。

KotlinもSwiftも、最新情報を全然追っていないということがわかったので、定期的に見ていきたい。