来週11/19(日)に、毎年恒例の日本最大級のJavaScriptカンファレンスJSConf JP 2023が開催されます。今年は久しぶりにオンライン開催です。
来週11/19(日)に、毎年恒例の日本最大級のJavaScriptカンファレンスJSConf JP 2023が開催されます。今年は久しぶりにオンライン開催です。
ImageMagickで画像フォーマットを変換するとき、普通は出力先のファイル名を指定すればその拡張子から自動的に適切なものにしてくれるんですが、標準出力に出すにはどうすればいいんだろうと気になったので調べてみました。
magick input.jpg png:-
このように変換先フォーマット:-
を指定すれば、指定のフォーマットで標準出力に出してくれるそうです。
これでパイプ処理にも使えますね!
AIに考えさせた「メモリを食う」「サーバーが落ちる」の絵がそのまんますぎて笑い呼ぶ
こんな記事を見て思わずクスッと笑ってしまったので、こちらも負けずにBing Chatにゾンビプロセスの絵を描いてもらいました。
ゾンビというよりマドハンドですねこれ🤔
Install SSH Key v2.5.0でアクション終了時に .ssh
ディレクトリーを削除する機能を追加したんですが、その数日後に「あらかじめ.ssh
がセットアップされているセルフホストランナーでも問答無用で削除するなんてひどいや!」という報告がありました。いやその通り。.ssh
自体が存在していないマシン上で動かすことしか想定していませんでした。ごめんなさい。
というわけで、その報告から10ヶ月後の先日、v2.6.0でついに対応しました(おせーよ)
今回の変更で、アクション終了後にInstall SSH Keyを実行する前の状態に戻るようになりました。内部処理は以下のとおりです。
.ssh
ディレクトリーが存在しなかった場合は、終了後に.ssh
ディレクトリーを削除(これまでと同じ)
.ssh
ディレクトリーが存在していた場合は、各種ファイルを作成するときに同名のファイルが存在していればバックアップを別名でコピー、終了時に戻す
.ssh
ディレクトリーの中身自体をまるっと別名でコピーする方法も考えたのですが、ファイルの移動やコピーが最小限ですむ今回の方法を採用しました。とはいえ、まるっと待避→まるっと復元の方がリスクも少ないので、もしかしたら今後こちらの方法に変更するかもしれません。
そしてリリースの翌日にちょっとしたバグが見つかったので、急遽v2.6.1をリリースしました。このバグが発生する状況は限定的で、バグ自体も致命的ではないとはいえ、このバグはまるっとコピーしていれば発生しなかったものです。。。
知り合いの子がこんなことを𝕏にポストしていました。
ローカルやと 8080 でちゃんと動くのに Docker にのせたら8080でリッスンしてないのなんで
— OJI (@OldBigBuddha) September 22, 2023
ローカルコンピューター内で作ってみたサーバーをDockerイメージ化すると、ちゃんとポートもマッピングしているのに外からアクセスできない。うん、Dockerのあるあるですね。
答えはコレ。
8080で動いてるプログラム、listenするhostが127.0.0.1やlocalhostだったりしませんか?
— seigo2016 (@seigo2018) September 22, 2023
0.0.0.0とかにすると動くかもです。
あーそうだそうだ。しょっちゅう忘れる。度々ハマるくせに、そもそもDockerイメージの設定ファイルを作る頻度自体がそこまで高くないので、次回作るときまでに諸々忘れているアレです。覚書としてここに残しておこう。
ちなみにChatGPTに聞いてみたところ
などをチャックするように言われましたが、0.0.0.0のことは指摘してくれませんでした。。。
オープンコーラのような、レシピがOSSになっているやつではありません。
簡単にまとめると
Terraformとは何か?については、今回の主題ではないので説明は省略します。知らなくてもこの記事の理解に支障はありません。
元々このTerraformはOSS(MPL)として提供されていたのですが、v1.6からライセンスが変更されました。
こちらによると、商用利用が一部制限され、Terraform作成元のHashiCorpと競合するような使い方をするとこの制限に引っかかりそうです。単にインフラ整備のために使うなら問題なさそうですね。
とはいえ、それでも今後のリスクがあるので、ライセンス変更前のバージョンからフォークしてOpenTFという新しいOSSが誕生しました。まあ最近よくある流れです。
ただ、このOpenTFという名前もHashiCorpの商標の侵害の可能性があるねということで新たな名前を募集したところ、OpenTofuが支持を集めたようです。OpenTofuのロゴ画像は一部黄色いので、どちらかというと揚げ豆腐なんでしょうか。
こちらによると、OpenTofuのいいところは
だそうです。なるほど確かに。
OSS企業がプロダクトのライセンスを商用利用を制限する方向に変更するのはここ数年よく見るパターンですが、このOpenTofuは名前に恥じない健康的なプロダクトになって欲しいものです。
ところで、さくらインターネットではたこ焼きのレシピをオープンソースとして公開しています。。。と思ったらライセンスが明記されていなかった。
ウェブアプリケーションなどをコンテナ管理するためにDockeを使うとき、docker run
の引数を処理できるように、Dockerfile
の中で本体のプロセスを直接ENTRYPOINT
やCMD
に指定するのではなくdocker-entrypoint.sh
から起動する場合も多いのではないでしょうか。
そのとき、以下のように書いたらダメです。「何がアカンの?」という方、今まで普通にこういう書き方をしていた方はご注意。ちなみに「set -eu
をつけろ!」とかそういう話ではないです。
#!/bin/bash # 引数を処理したり色々 ... # 本体のプロセスを起動 /path/to/some-process
いやまあこれでも動くんですが、docker stop
やCtrl-C
などでコンテナを止めようとしたときに10秒ほど待たされます。これは、コンテナに対するSIGTERM
やSIGINT
がdocker-entrypoint.sh
が動いているプロセスにしか届かず、本体のプロセスまで送られません。そのため、Dockerはコンテナを止めたいのに本体のプロセスが止まってくれず、10秒のタイムアウトの後に強制的にプロセスを終了するという流れです。
ではどうすればいいかというと、ハイそうです。docker-entrypoint.sh
のプロセス自体を本体のプロセスで置き換えれば解決。というわけでexec
を使いましょう
exec /path/to/some-process
#!/bin/bash # 引数を処理したり色々 ... # 現在のプロセスを本体のプロセスで置き換える exec /path/to/some-process
これでDockerからは本体のプロセスになるので、コンテナを止めたときに本体のプロセスがすぐ止まるようになります。めでたしめでたし。
このブログを書いている時点ですでにv1.0.2まで上がっていますが、先日Bunの安定版v1.0がリリースされました。
というわけであらためてBunまわりの歴史についておさらい。とは言ってもあまり詳しいことまでは話しません(話せません)。
大規模なウェブサービスを作っていると、WebAPIの数も膨大になってきます。APIのドキュメントを作成するためにOpenAPIを使っている人も多いと思いますが、APIの数が増えてくるとドキュメントのソースファイル(JSON/YAML)が大きくなり、編集しづらくなります。
でかいソースファイルは分割するのが世の常で、もちろんOpenAPIにもソースファイルを分割できる仕様はあるのですが(文法はJSON
Schemaなので)、問題は分割したファイル($ref
による参照先のファイル)にIDEのコード補完が利かなくなることです。
そこで、ソースファイルを分割しつつ、IDEのコード補完も利かせる方法を考えてみます。IDEはウェブ開発の定番Visual Studio Codeを想定します。え?VSCodeはIDEじゃない?気にするな。
なお、この記事は「OpenAPIのドキュメントの書き方を知っていること」「ソースファイルの分割方法($ref
)を知っていること」「VSCodeのOpenAPI拡張機能を使っていること」を前提としています。その上で、分割したファイルの補完を使う方法の説明です。
先日、「Software Design 2023年9月号に寄稿したよ!」という記事を書きましたが、その9月号が予定通り8月18日に発売されました。
寄稿部分がこれ。
うん、Twitterってなってるね。
確か、ちょうど校正あたりの時期にTwitterのサービス名が𝕏に変わるとかどうとかの騒ぎがあったんですが、校正&コロナでてんてこ舞いになっていて、ここの修正まで頭が回りませんでした。別に致命的なミスではないので許してください。
おかげさまで、Install SSH Keyがいろいろなところで使われています。もうGitHub ActionsでSSH鍵を使うするときの定番にすらなったんじゃないかと思います。知らんけど。
とは言っても、エディター戦争のように群雄割拠の中から勝ち上がったわけではなく、GitHub Actionsのv2がリリースされたばかりでActionがまだ充実していなかった頃にたまたまSSHを使いたくて作ったものでした。要するに完全に運と先行者利益に恵まれただけのラッキーパンチなのですが、そんなことはどうでもいいんです。運だろうが先行者利益だろうが、そのチャンスをものにできた奴の勝ちなんです。別に勝負してないけど。
そんなInstall SSH Keyですが、GitHubの公式ツールでも使われているらしいという情報を教えてもらいました。
それはGitHub Actions Importerというツールです。概要はこちらに書いてあるのですが、要は他のCIからGitHub Actionsへの移行ツールらしいです。
これを使うと、BambooやJenkinsなどでSSH鍵を設定しているところがInstall SSH Keyに置き換えられるようです。使ってないので詳しいことはわからないのですが、ドキュメントの出力例を見る限りでは確かに使われていそう。ただ、ソースコードを見ても具体的にどの部分でどのように変換しているのかわかりませんでした。別の場所に変換用のデータがあるのかな。
それはともかく、みんなもバンバン使ってええよー。
8月18日に発売予定のSoftware Design 2023年9月号に寄稿しました。担当したのはJavaScript非同期処理特集の3-5章。Promise, async/awaitについての記事です。
Promise編は通り一遍の解説だけでなく、実際にPromiseクラスを自作して内部の動きを解説するというどこかで見たような内容です。まあ実際Promise編はさくらのナレッジの記事をベースにしているので、そちらの記事をすでに読んでいる方は特に得るものはないかもしれません。ただし細かな解説を追加しているので、さくらのナレッジの記事で腹落ちしていない方はあらためてSoftware Designの記事も読んでみるといいかもしれません。
async/await編は、さくらのナレッジにPromise編の続きとして書こうと思っていた内容を先取りしています。さくらのナレッジは数年間放置しているのでそろそろ何とかしないとなぁ・・・と思っていたところに今回の依頼が来たので、締め切り効果を期待して引き受けました。紙面の都合上、こちらは使い方の解説のみです。後日さくらのナレッジにはこれをベースとした記事を載せる予定ですが、そのときはPromise編のように内部の動きまで解説しようかと思っています。
執筆や校正は6月後半〜7月がメインでしたが、7月は父親の葬儀やらコロナやらで2週間ほど仕事どころではない日が続きました。葬儀のときは昼間か夜にある程度時間が取れ、コロナのときはほぼ校正だけで済んだので、何とか原稿を落とさずに済みました。
一家に一冊ぜひどうぞ。
去年の12月に「そろそろv4が出るよ」と予告して早7ヶ月。先日ようやくリリースしたので報告です。
・・・と思ったらDeno版が最新になってない。あとで直しておきます。
機能的には去年の記事から変わっていませんが、テストケースを増やして最新のNode.js / Deno / Bunでも動作することを確認しました。
手前味噌ながら、まあまあ便利なライブラリだと思っているのでよろしければ使ってみてください。
以前ちょっと話題に出した、Proton Mailの開発元が提供する新しいパスワードマネージャーであるProton Passが一般ユーザーも使えるようになったようです。
ちょっと使ってみましたが、以前予想した通り
…という感じでした。
料金表を見ると、有料プランも月額制(年額払い)で買い切りはないようです。まあ自前でサーバーを運用している以上、買い切りプランというのは難しいんでしょう。
やっぱり今使っているEnpassが機能的にも料金的にも個人的にはまだ理想形です。日本語がところどころおかしいこと、Linux版ではIMEの使用に難があることを除けば…
「サインイン」「ログイン」「ログオン」「ログオフ」の使い分けは必要か
英語のニュアンスの話は知らんけど、個人的には「ログイン」一択ですね。自分でサービスを作る時も「ログイン」です。
という消去法で「ログイン」。でも上記ストーリーの「sign in なら「受付で氏名を書く」という現代の現実に沿っていてわかりやすい」という説明はなるほどと思いました。
そもそもこれ、日本語で適訳がないのが問題かもしれないですね。誰かいい訳を作ってください。あと、日本語のサービスでは「サインアップ」とか書かずに「新規登録」と表記してほしいです。
ところで、"login"と"log in"の使い分けについて。
"login"は名詞、"log in"は動詞です。
なので、受動態は"logined"でも"loggedin"でもなくて"logged in"です。
「ログインしているユーザー」みたいな場合は"logged-in user"のように表記してください。
1ヶ月ほど前に「配列のすべての要素が条件を満たすならtrue
を返す」関数に空配列を渡したらtrue
かfalse
か?というツイートが話題になったそうです。
多分自分ならこういうふうに書くかな。
function kansuu(hairetu) { for (const youso of hairetu) { if (!jouken(youso)) { // 1つでも条件を満たさなければfalseを返す return false; } } return true; }
なので空配列を渡したらtrue
を返しちゃいますね。
そもそも本来は「仕様を(依頼元に、もしくは要求仕様から)確認し、それに応じたコードを書ける人」がいいプログラマーだと思います。
はい、ワイは良くないプログラマーです。
なお、実際のシステム云々は置いておいて数学(集合論、論理学)としての話であれば、true
が正解です。上記ストーリーのこのコメントが簡潔に表現しています。
true
を返すべきである
先日転職ドラフトの情報漏洩事故がありましたね。この事故に対する重大さの感覚がエンジニアと非エンジニアで(さらにいうならエンジニア間でもレベルによって)まるで違うように思えたので、ちょっと取り上げます。
需要がどれだけあるかわかりませんが、使えたら使ってください。POSIX sedでもGNU sedでも動作します。
sed -r \ -e 's/%/%25/g' \ -e 's/\$/%24/g' -e 's/\(/%28/g' -e 's/\)/%29/g' -e 's/\*/%2A/g' -e 's/\+/%2B/g' -e 's/\//%2F/g' -e 's/\?/%3F/g' -e 's/\[/%5B/g' -e 's/\]/%5D/g' \ -e 's/!/%21/g' -e 's/#/%23/g' -e 's/&/%26/g' -e "s/'/%27/g" -e 's/,/%2C/g' -e 's/:/%3A/g' -e 's/;/%3B/g' -e 's/=/%3D/g' -e 's/@/%40/g' \ -e 's/ /+/g'
関数化すれば、シェルスクリプト内でパイプ的に使えるのでまあまあ便利かも?
function urlencode() { sed -r \ -e 's/%/%25/g' \ -e 's/\$/%24/g' -e 's/\(/%28/g' -e 's/\)/%29/g' -e 's/\*/%2A/g' -e 's/\+/%2B/g' -e 's/\//%2F/g' -e 's/\?/%3F/g' -e 's/\[/%5B/g' -e 's/\]/%5D/g' \ -e 's/!/%21/g' -e 's/#/%23/g' -e 's/&/%26/g' -e "s/'/%27/g" -e 's/,/%2C/g' -e 's/:/%3A/g' -e 's/;/%3B/g' -e 's/=/%3D/g' -e 's/@/%40/g' \ -e 's/ /+/g' } echo "a*a + b*b != c*c" | urlencode
制御文字やASCII範囲外の文字には対応していないので限定的にしか使えませんが、場合によってはまあ使えるんじゃないかと思います。
ちゃんとしたものが必要なら、JavaScriptなりPHPなり専用の関数を備えた言語で書くのが確実です。
Web標準に新たなステータス「Baseline」が登場。変化し続けるWeb標準のうちWeb開発者が安心して使える機能群を示す。MDNドキュメントなどで表示開始
これは朗報。特に「Chromeだけで動けばいいや」ではなくて多くのブラウザーに対応したいサービスにとってはいい規定だと思います。
今までは、使いたい機能がCan I use...とかでどのブラウザに対応してるかを一々調べた上で独自の基準で採用するかどうかを決めていたと思いますが、今後は「Baselineに載っているかどうか」という簡単な基準を使えるようになるので、システムの発注側にとってもありがたい基準なのではないでしょうか。
「辞書に載っている単語を含めてはいけない」「120日ごとに新しくパスワードを設定すること」などバカげたパスワードのルールを持つサイトを集めた「Dumb Password Rules」
パスワードに関しては以前にもこのブログで書きましたが、こちらの記事では具体的なサイトも含めて公開されています。
以前のブログの内容と重複しているもの・いないものが色々ありますが、重複していないものだと定期的にパスワードの更新を要求されるのはイヤですね。どこかの研究で、「パスワードを定期的に更新するとかえって危険になる」というような内容を見たことがあります。詳しい内容は忘れましたが、定期的に更新するとどれが現在使っているものかわからなくなったり、覚えやすいパスワードを使うようになったりする・・・みたいな話だったかな。
あとはキーパッドによる入力を強要されるのもダルそう。キーロガーを警戒しているのかもしれませんが、ダルいだけでなくキーの順序がランダムなので入力ミスが多そう。そんな独自仕様を作るより、WebAuthnにでも対応してくれたほうがよっぽど安全なんですが。。。
説明がややこしくてなんのこっちゃという感じですが、ようするにどういう影響があるかというと
ということです。デジタル署名を使っていないとか、そもそもGnuPGを使ってないという場合は影響ありません。あとUbuntuのようにGentoo Linux以外を使っている人も影響ありません。
今まではパスフレーズが必要なときはpinentryがGNOME Keyringに入っているパスフレーズを参照して自動入力してくれたので手動では何も入力する必要がなかったんですが、つい最近から急に入力ダイアログが出始めました。
PAMの設定も問題なく、ログイン時に自動的にGNOME Keyringが解錠される設定はこれまでと変わっていません。
結論を書くと、Gentoo Linuxのpinentryパッケージがv1.2.1-r2でgnome-keyring
USEフラグをkeyring
に改名したのが原因です。
対応は、インストール時に設定しているgnome-keyring
フラグをkeyring
にしてやればOK。
いや勝手なことすんなし。せめてeselect news read
コマンドで注意喚起してくれ。
とりあえず、Gentoo Linuxユーザーで、2023年5月20日前後から急にGnuPGのパスフレーズプロンプトが表示されたというピンポイントな悩みの方がいたら本記事が役に立つかもしれません。
去る5月9日に関西Node学園 10時限目を開催しました。コロナ鍋で中々オフライン開催できなかったのですが、3年ぶりに開催することになりました。
個人的にはJSConf JP(旧Node学園祭)の運営のお手伝いをしていますが、地元の関西Node学園の運営にはほとんど関わっていませんでした。今回はちょっとだけお手伝い。
そしてついでに登壇もしてきました。話したネタはv19.7で追加されたSingle Executable Applications。以前にちょっとここでも触れました。
スライドはこちらです。以前のブログを書いた時から、仕組みをちょっとだけ調べました。
スライドに出てきた実装例はこちらにあります。好きに使ってください。
最近ちょっとハマったところについてメモ。
要するにこういうことです。これを実行したらどうなると思いますか?おそらくfoo
,
bar
,
baz
すべて同じ値になっていると思います。どんな値になるかは実行タイミングによって違うようです。
つまりrange
は各ループで毎回同じアドレスに値を入れているので、そのアドレスをあとで使おうと思っても想定外の値に変化していることがあります。
よく考えれば・・・というか考えなくても、「ループ内で毎回専用の領域を確保する」より「最初に領域を確保してループ内で使い回す」ほうが効率的なのは明らかなので、そういう仕様なのはまあ納得。
アドレスを後で使いたい場合は、一度別の変数にコピーして使いましょう。
プライバシー重視のメールサービスProton Mail開発元のProtonが、Proton Passというパスワードマネージャーを開発しているそうです。
あまり詳しい情報が出ていませんが、現在判明していることはこのあたりでしょうか。
気になるのはデスクトップPCの対応OSが明記されていないこと。もしかしてブラウザー拡張機能だけで提供?
あとは、パスワードの保存先も気になります。Enpassのように、ローカルや複数のクラウドストレージに対応していて、好きなものを選べるならとてもありがたいです。
他のProtonプロダクトから推測すると、保存先はProtonのサーバー、ただしサーバーソフトウェアはオープンソースで提供するのでオンプレミスでも使える・・・という感じかもしれません。
だったらいらないかなぁ・・・🤔
いい意味で裏切ってくれることを期待してまます。
データ圧縮のパイオニアであるジェイコブ・ジヴ氏の功績とその半生とは?
2年前の記事に何を今更という感じですが、偶然たどり着きました。昔(高校生くらいの頃かな?)データ圧縮について色々調べたことがあり、記事の内容についてちょっと気になったので今更ですがいくつかコメントします。
どっかで似たようなことを書いてる人もいそうですが。
ちょっとドジ踏んでしまったので記録を残しておきます。
Linuxで新しいユーザーを作るときはuseradd
コマンドを使うじゃないですか。そのときに-m
を指定すればホームディレクトリーを作ってくれるんですが、つけるのを忘れてコマンドを実行してしまいました。
単純に/home
以下にmkdir
してもいいんですが、/etc/skel
のコピーとか他にやることがあるかもしれないので、作成はシステムに任せたい。。。
やっぱり他にもこういうドジっ子はいるようで、ちゃんと用意されていました。mkhomedir_helper
コマンドを使えば後から作れそうです。
「そうです」と書いたのは、このコマンドの存在に気づく前にユーザーを削除→再作成したので試してないからです。。。
レゴがオープンソースのライブラリをコピペしてGPL違反をしていたことが判明
正確にはレゴじゃなくてレゴの子会社だということはさておき、ざっと読んだ感想としては「よくあるGPLの勘違いかなぁ?」です。
当該ライブラリはGPL(GNU General Public License)の元で公開されているものであるため、ソースコードが非公開の製品に使用することはライセンス違反であると指摘されています。
GPLは「製品を手に入れた人からソースコードを見せろと言われても拒否できない」というものであって、製品自体にソースコードをつける必要はありません。つまり「ライブラリをコピペして作った製品にソースコードをつけずに販売した」だけではGPL違反とは言えません。
GPL違反と断言するには、たとえば
などが必要ですが、記事を見る限りではそういった記述はありません。でもまあどれかに当てはまってそうですけど。特に2番目。
つい先日、github.comのRSA公開鍵を変更したというニュースが飛び込んできました。記事によると、秘密鍵を誤って公開リポジトリーに置いてしまったため、なりすましや中間者攻撃を防ぐために新しい鍵に置き換えたとのこと。ひえっ。
わざとじゃなくて操作ミスだとは思いますけど、何の操作をミスったんだろう。公開鍵と間違えたのかな。とりあえず、外部から侵入されたわけではないということで安心しました。世界中の開発インフラであるGitHubでもこういう初歩的なやらかしがあるんですね。
というわけで、みんな大好きInstall SSH Keyでもgithub.comの公開鍵を使っているので新しいものに置き換えました。変更部分はそれだけです。
先日Async HooksとかAsyncLocalStorageの話をしましたが、ちょっとハマったところがあるのでメモ。
現象としては、Expressのファイルアップロードミドルウェアであるmulterを経由したときにAsyncLocalStorageが使えなくなる(getStore()がundefinedを返す)というものです。
この原因にたどり着くまでに切り分け等いろいろ苦労したんですが、まあそれは置いといて。
バグなのか仕様なのかよくわかっていませんが、どうもmulterを経由すると非同期コンテキスト(コールバックチェーンの親子関係)が切れてしまうようです。
解決方法は、ここにあるように非同期コンテキスト化するラッパー関数を作って、multerをラップしてやるとうまくいきました。
Node.js v19.7から、Node.jsファイルを単一の実行バイナリにできるようになったそうです。ElectronみたいにNode.js本体も同梱される感じなんでしょうか。
ただし現状では制約があり、OSはWindows/macOS/Linux、CPUはAMD64、そして単一のファイルのみとのこと。
単一のファイルのみということは、当面はnccとかのバンドラーで1ファイルにまとめてからバイナリ化という使い方を想定しているんでしょうかね。
史上最速で1億ユーザーを獲得したChatGPTですが、それも納得の精度。個人的にももちろん楽しく使わせてもらっています。
なんかテンションが上がってきたので、ChatGPTとハイテンションで会話してみました。といってもハイテンションなのはChatGPTだけです。
アプリケーション開発でCIによる自動テストを行っているとき、CIの実行回数や実行時間を減らしたい場合があります。
どういうときかって?そらもうアレよ。コミット回数が多すぎるとか一回のCIに時間がかかりすぎるとかでCIサービスの時間上限にひっかかりそうなときです。
GitHub Actionsでのやり方を説明します。
ちなみに記事の前半は特別なことは何も書いていないので、この記事のタイトルにつられて来た人は「コメント駆動で動かそう」まで読み飛ばしても大丈夫です。
最近、回転寿司業界がヤバそうですね。10年くらい前からバイトの悪ふざけが社会問題のようになっていましたが、最近は客の悪ふざけが目立つ印象です。昔からあったものがSNSによって可視化されただけなのかもしれませんが。
それとは全く関係ありませんが、最近はChatGPTがすごいですね。もちろん間違ったことを答えることもありますが、あまりにも自然な日本語で堂々と答えるので妙な説得力があります。チューリングテスト通るんじゃないのかと思ったらやっぱり通ってました。
ちなみに今回は完全なネタ記事なので有用なことは一切期待しないでください。
タイトル意味不明かもしれません。ちょっとうまい表現が見つかりませんでした。要するにこういうオブジェクトを作りたいということです。
a
, b
, c
はstring型コードで書くとこんな感じ。
// a, b, cはstring型 foo.a = "a"; foo.b = "b"; foo.c = "c"; // それ以外でも任意のプロパティーを使えるが、これらは全てnumber型 foo.abc = 123; foo.xyz = 456; foo.bar = 789;
TypeScriptを使うならanyとか使わずにできるだけ厳密に型定義をつけたいのでやってみました。
多分周回遅れのネタだと思いますが、ちょっと苦労したので同じように苦労している他の方の参考になれば。。。
先週告知した通り、1/18にイベント登壇してきました。
TechFeed Experts Night#11 〜JavaScript/TypeScript最前線
スライドはこちら。
8分間で51ページという超絶ボリュームですが、33ページ目以降はおまけスライドで発表時には触れていません。また、PDF化する都合でアニメーションを複数枚のページに分けたものもかなりあるので見た目ほど中身は濃くないです。
以前もちょっと書きましたが、他の登壇者のみなさんが公認エキスパートばかりの中で1人だけ公認でもエキスパートでもない奴がポツンといる状態で、ある意味プレッシャーでした。
実はこれ、3年前のTSConf JPで発表しようとしていた内容に最近のDenoとかBunの事情を加えた内容です。昔話が多いのはそのせいです。
先月告知したTechFeed Experts Night#11についての続報でございます。もうイベントページが公開されたので詳細を紹介します。
イベントページはこちら、テーマは「JavaScript/TypeScript最前線」です。
話す内容は「パッケージ開発者の苦悩 -JavaScriptランタイム群雄割拠-」で、その名の通りパッケージ開発者向けの内容です。ただし、最前線というテーマに反して昔話が多めなので、心してお聞きください。
以前の記事でちょっとだけ触れた新進気鋭のJavaScriptランタイムのBunについて。
トップページにワンライナーでインストールする方法が書いてあります。
curl -fsSL https://bun.sh/install | bash
これだと問答無用で最新バージョンがインストールされます。まあ殆どの場合は最新バージョンで問題ないんですが、ライブラリーの動作検証時などでは特定のバージョンを指定したい場合があります。
でも検索しても特定のバージョンをインストールする方法がヒットせず、公式サイトにも記載がないように見えたので、ちょっと調べてみました。どっかに書いてあって見落としてただけならごめんなさい。
えー、あけましておめでとうございます。
これは2023年最初の記事なんですが、実は2022年最後の記事のつもりでした。なぜこうなったかというと、単に2022年の日曜がもう1回あると思ってただけです。
というわけで、新年一発目はタイトルどおりGitHub ActionsのTipsです。季節一切関係ないから2022年最後だろうが2023年最初だろうがどうでもいいんですが。