2024年5月26日日曜日

プログラミング言語の省略表記について

 ちょっと前にPythonを滅ぼそうやない会とかいう記事が投稿され、それに対するアンサー記事も投稿されるなどまあまあ賛否両論だった記憶があります。

個人的にはシンタックス云々に一部同意する部分もありつつ、でも英語の語順的にまあそうだろうなーというアンサー記事に同意する部分もありつつ、でも英語話者以外が使うことも考えてくれよなーと思いつつというどっちつかずの状態です。

個人的ついでに書くと、三項演算子やラムダ式などの省略記法は基本的に書きません。リストの内包表記も使いません。理由はあとで自分がすんなり読める自信がないから

「そんなもんも読めないお前のスキルが低いだけ」と言われたら返す言葉もないんですが、とはいえ大抵のプログラマーは数ヶ月前、いや数週間前に書いた自分のコードが理解できないという状況を経験しているはずで、なるべく平凡な書き方のほうが大抵の人が理解しやすいでしょう。

Pythonに限らず、他の言語でもあまり省略記法やシンタックスシュガーは使わない傾向ですね。例えばJavaScriptのオプショナルチェーンとかも使いません。

JavaScriptといえば、個人的には互換性を数十年引きずっているあの言語仕様はなんとかならんもんかと思ってます。とはいえ上澄みをすくおうと頑張っているAltJSが生まれては消え、スーパーセットを謳っているTypeScriptが事実上のデファクトスタンダードという現状を見ると、これが市場の意思なんだと納得するしかないですね。JSConfの運営ボランティアにも入っていながらこんなこと言うのもアレなんですが。

結局何を言いたいのかよくわからん記事になってしまいましたが、要するに自分は平凡なソースコードを書いてるよという極めて平凡な内容しか書いてないですね。

2024年5月19日日曜日

ReLU関数がよくわからない

 ニューラルネットワークの活性化関数にReLUってあるじゃないですか。あれがどうもよくわからんのです。

数学的な定義とか「正の値の微分が1なので勾配消失問題に強い」とかは知ってるんですけど、なぜこれを使うと精度が向上するのか、負の値を一律で0にすることがニューラルネットワーク上でどういう意味を持つのかがわかりません。

上でリンクを張ったWikipediaでは

2000年にHahnloseらによって強い生物学的動機と数学的正当化を持って、動的ネットワークへに導入された

とありますが、生物学的な動機ってなんだろう。。。

そしてPyTorchのseq2seqとAttentionのチュートリアルでは、デコーダーの単語埋め込み(ベクトル表現)に対してReLUを適用していますが、これって大丈夫なん?

ベクトル表現の負の値を0にしてしまうと別の単語が同じ表現になってしまったり、特に全ての要素が負の値で表現される単語があったら、ゼロベクトル(PADやUNKなどの特別な単語)として扱われたりするんじゃないかと。

まあ内部状態は刻々と変化するのでゼロベクトルが渡されたからといって毎回出力結果が同じになるわけじゃないですし、そうなることを織り込み済みで学習させているので問題ないという理屈なんでしょうか。

誰か詳しい人教えてください。生物学的動機についても。

2024年5月12日日曜日

プロジェクトを成功させる人

 𝕏で、時々勝手に引用ポスト(大抵は大喜利みたいなネタ)させてもらっているアカウントがいくつかあります。

その中の1つのアカウントで、こんなポストがありました。

自分だったらこういう質問に対してどう返すかな?というのが今回のテーマです。

2024年5月5日日曜日

zedのGentoo対応

 先日zedの記事を書きましたが、早速Gentoo用のebuildファイルの作成に取り掛かっています。

このへんを見るとtomlファイルから自動的にebuildを作るスクリプトもあるようですが、どうも依存パッケージの解決まわりがうまくいかず作業が止まっています。Rustなにもわからない。

とりあえず一旦ebuildファイルの作成は休憩して、Linux向けの依存パッケージインストールスクリプトをGentoo対応するPullRequestを出してみました。サクッとマージされてv0.134.1-preで導入されたようです。

これで、このドキュメントに沿ってGentooでビルドできるようになったはずです。ちなみに依存パッケージインストールスクリプトを実行するにはrustupも必要ですが、これはデフォルトではインストールできないのでキーワード指定する必要があります。

v0.134.1-preからLinux用のバイナリーも同梱されているようなので、どうにもならなければバイナリーをインストールするebuildを作ればいいのですが、せっかくのGentooなのでソースコードからビルドするebuildにチャレンジしています。あるいは誰かRustに強い人手を貸してください。

2024年4月28日日曜日

MS-DOS 4.0がオープンソース化

 タイトル通り、MS-DOS 4.0がオープンソース化されたそうです。ライセンスはMIT。

https://github.com/microsoft/MS-DOS

記事にも書いてありますが、10年前の2014年にはMS-DOS 1.1と2.0、そしてWord 1.1のソースコードが公開されており、今回はそれに続く公開です。

現在MS-DOSと同等の環境がほしいならFreeDOSがあるので技術的な価値はほぼゼロでしょうが、歴史資料としての価値はとても大きい(気がします)。

そのうちWindowsの旧バージョン(NTより前)とかもオープンソースになるんでしょうか。まあこれも技術的には不完全とはいえReactOSがあるんですが。

2024年4月21日日曜日

新しいテキストエディタ Zed

 新しいテキストエディタの存在を知りました。

このポストやウェブサイトを見た感じの事前情報としてはこんな感じでしょうか。

  • VSCodeのようなソースコードエディタ
  • GitHubの開発チームが作っている?
  • Language Serverに対応
  • Electronを使わずにRustで作っている
  • 現時点ではmacOSのみ対応、Linuxは今後対応予定

ポストVSCodeとして期待できるかもしれない、ということで早速インストールしてみました。ほんの少ししか使っていませんが現時点のレビューを書いておきます。全然使いこなしていないので的外れなことを書いているかもしれません。

まずデフォルトでVimモードを選択できます。わかってるなこいつ

試しにvalue-schemaを開いてみると、ソースコードの解析がすぐに終わりました。VSCodeよりも爆速です。Rustで作っているせいなのか、必要最低限の解析にとどめているのか、もしくは手元のVSCodeに拡張機能を入れまくっているせいなのかわかりませんが、とにかく速い。

定義場所へのジャンプや参照場所の一覧表示もバッチリ。ESLintの設定も自動的に読んで、問題箇所を指摘してくれます。この辺はVSCodeと同様。

エディタ内で端末も使えるのでちょっとした作業も問題なし。

まだ本当に少ししかいじっていませんが、エディタとしては問題なく使えています。ただ、内部にフォーマットルールがあるのか、ファイルを保存するときに勝手にフォーマットをかけてしまうのがウーンという感じです。多分これは設定をいじれるんじゃないかと思いますがまだ試せていません。EditorConfigにもまだ対応していないようです。

拡張機能にも対応していますが、今のところ使える拡張機能はそこまで多くありません。とはいえおそらくまだサードパーティー製の拡張機能があまり作られていないであろう現状では十分に多いといえるのかもしれませんが。

総評として、公式で謳っているだけあってパフォーマンスは素晴らしい。保存時の挙動が気になる以外は、(サポートしている言語であれば)現状でもソースコードエディタとしては問題なく使え、今後にも期待できる出来です。拡張機能の充実にも期待しましょう。Linuxに対応したらGentoo用のebuildファイルを作って応援します。

開発が進むにつれて機能がてんこ盛り、動作が遅くなる・・・というのはあらゆるソフトウェアの宿命なので、いい感じに折り合いをつけていただきたいです。

そういえば似たようなコンセプトのエディタにJetBrains Fleetがありますが、こちらもまだ正式版ではありませんが頻繁に更新されていますね。

新たなエディタ戦争、楽しみです。

2024年4月14日日曜日

MD5ハッシュの衝突

 MD5の新たな衝突が発見されたそうです。

MD5自体はかなり以前に強衝突耐性が突破されているので、衝突するデータのペアが見つかったこと自体は大したニュースではありません。

今回は「すべてASCIIの印刷可能文字からなる」「1文字違い(さらに言うなら1ビット違い)の文字列が」衝突したというニュースです。

いやすごいんですけど、これどうやって見つけたんだ