タグ

ブックマーク / efcl.info (25)

  • JavaScript PrimerのES2024対応を手伝ってくれるContributorとSponsorを募集しています

    JavaScript PrimerのES2024の対応を進めていく予定なので、 対応を手伝ってくれるContributorとjsprimerというプロジェクトを支援してくれるSponsorを募集しています。 追記(2024-03-22): Contributorを希望する方は集まりました。ありがとうございます! JavaScript Primerスポンサーは引き続き募集しています! Gold Sponsors Supporters 3行サマリー ES2024の対応を6月末までにやるマイルストーンを切りました ES2024の対応を手伝ってくれるContributorを募集しています Open Collectiveを始めたので、プロジェクトを支援してくれるSponsorを募集しています jsprimerのES2024対応 jsprimerは毎年のECMAScriptの仕様改定にあわせてメジャー

    JavaScript PrimerのES2024対応を手伝ってくれるContributorとSponsorを募集しています
  • Node.jsで機能やパッケージの非推奨メッセージを通知する方法

    ライブラリやツールなどを作っているときに、特定の機能やパッケージを非推奨にする場合があります。 これらの非推奨はリポジトリ上のREADMEやIssueなどに書いても、利用者が気づかないことがあります。 そのため、利用者が気付けるように非推奨の機能やパッケージを使った場合に警告を出す方法を紹介します。 非推奨にはいくつかの段階があり、それに応じてやり方を変えられるので、それぞれの方法を紹介します。 パッケージの非推奨化: npm deprecate <package> <message> コードレベルの非推奨化: JSDocタグの@deprecated 実行時の非推奨化: process.emitWarning() パッケージの非推奨化: npm deprecate <package> <message> npmのパッケージレベルで、そのパッケージが非推奨であることを通知するにはnpm de

    Node.jsで機能やパッケージの非推奨メッセージを通知する方法
    Kesin
    Kesin 2024/02/04
    雑にconsole.warn()などで警告を出すだけにしてしまいそうなのでいつかdeprecatedとしてマークする日が来るまで覚えておきたい
  • superwhisperでの音声入力を試す

    superwhisperという、whisper.cppを使った音声入力ができるmacOSアプリケーションを最近使っています。 基的にはggerganov/whisper.cppのモデルを使って、音声認識しながら文字入力ができるアプリケーションです。 特徴 Whisperの認識精度が高い かなり早く喋っても認識してくれる 日語も認識してくれるモデルがある 日語で喋って英語に翻訳してくれる機能もある オフライン対応 有料: サブスク と 買い切り の2種類のプランがある 無料で15分のトライアル、その後は選べるモデルが制限される 公式サイトのデモをみると、かなり早く喋っても認識してくれるのがわかります。 大抵の人にとっては、多分文字入力するよりしゃべったほうが早いぐらいの入力速度が出ると思います。 superwhisper 長文はそこまで得意じゃないけど、1行とか2行ぐらいの文章はかなり

    superwhisperでの音声入力を試す
    Kesin
    Kesin 2024/01/18
    試してみたけどsuperwhisperのキモは実はオプションで付けられるLLMによる後処理だと思った。議事録用とかSlack用のテンプレを見るとLLMに渡すプロンプト文が変化していて、用途別にいい感じの文に整形してもらっている
  • ni.zsh: npmインストール時のサプライチェーン攻撃を検知する機能を追加

    npm/yarn/pnpm/bunを同じコマンドで扱えるni.zshに、npmで配布されているマルウェアを間違ってインストールするのを防ぐ機能を追加しました。 ni.zshについては、次の記事を参照してください。 npm/yarn/pnpm/bunを同じコマンドで扱える ni のzsh実装を書いた | Web Scratch npmパッケージのマルウェア npmパッケージとしてマルウェアをpublishして開発者を狙うサプライチェーン攻撃が最近多くなっています。 たとえば、次の記事ではemails-helperというもっともらしいパッケージ名でマルウェアが配布されていました。 NPM Package Masquerading as Email Validator Contains C2 and Sophisticated Data Exfiltration 他にもtyposquatting

    ni.zsh: npmインストール時のサプライチェーン攻撃を検知する機能を追加
    Kesin
    Kesin 2023/08/30
    npmにデフォルトで欲しい機能だ
  • CommonJSからES Modulesへの移行する方法。トップダウンかボトムアップか

    Secretlint v7でCommonJS からES Modulesへの移行を行いました。 Secretlint v7.0.0をリリースしました。Pure ESMへの書き直し この記事では、CommonJS(CJS)からES Modules(ESM)への移行を行った経緯と、移行する方法について紹介します。 CJSからESMへの移行は、率直に言えば単調な作業で、メリットが見えにくい作業です。 しかし、将来的にCJSよりもESMが主流になることは間違いないので、移行することは必要です。 移行の作業は、移行方法が決まれば大部分は機械的な書き換えが可能です。 では、実際にどうやって移行したのかを紹介します。 ESMへの移行の影響は依存元へと連鎖する Secretlintのリポジトリはmonorepoになっていて、だいたい40コぐらいのパッケージが含まれています。 そしてパッケージ間で依存関係があ

    CommonJSからES Modulesへの移行する方法。トップダウンかボトムアップか
    Kesin
    Kesin 2023/07/06
    CJSからESMへの移行のハマりどころが参考になる。__dirnameと__filenameはやっぱり置き換えるしかないのか
  • Secretlint v7.0.0をリリースしました。Pure ESMへの書き直し

    機密情報をLintできるSecretlintのv7.0.0をリリースしました! Release v7.0.0 · secretlint/secretlint このバージョンでは、SecretlintをESMモジュールとして書き直しました。 どのように移行したかは別の記事で紹介しているので、移行方法について記事を参照してください CommonJSからES Modulesへの移行する方法。トップダウンかボトムアップか Secretlint v7.0.0の変更点 ルールと体のコードを含めて、全部のパッケージをESMに書き直しました。 その中で、いろいろ整理したりもしたので、変更点はいろいろあります。 ただし、secretlintコマンドや@secretlint/quick-start、Docker Imageとして使う場合は、そこまで目にみえる変化は少ないと思います。 詳細はリリースノートも参

    Secretlint v7.0.0をリリースしました。Pure ESMへの書き直し
    Kesin
    Kesin 2023/07/06
    "--loder ts-node/esm" だけでTypeScriptのESMのテストを動かせるなら小規模なライブラリを作るときにいつものJestから乗り換えを試してみようかな
  • eslint-cjs-to-esm: CJSをESMへとマイグレーションするツールを書いた

    最近、色々なライブラリをCommonJS(CJS)からECMAScript Module(ESM)へとマイグレーションしています。 その際に、ESMでは__dirnameやrequireなどCommonJS特有の機能は使えなくなっています。 また、TypeScriptやBabelなど多くのツールはCJSではimport時に拡張子はなくても大丈夫ですが、ESMの場合はimport時に拡張子が必要になります。 import url from "node:url"; - import { mdEscape } from "./mdEscape"; + import { mdEscape } from "./mdEscape.js"; // ESMでは相対パスに拡張子は省略できない + const __filename = url.fileURLToPath(import.meta.url); /

    eslint-cjs-to-esm: CJSをESMへとマイグレーションするツールを書いた
    Kesin
    Kesin 2023/01/19
  • textlintとGitHubのCode Scanningを組み合わせてリンク切れをチェックする

    textlintのルールに文章中のリンク先URLがアクセスできなくなってないかをチェックするtextlint-rule-no-dead-linkというルールがあります。 textlint-rule-no-dead-linkは実際にURLにリクエストを送ることでアクセスできるかをチェックするため、URLの数が多くなるとものすごく時間がかかります。 また、GitHubのように同一IPからのアクセスが連続すると429 too many requestsなどのエラーを返すサイトもあります。 textlint-rule-no-dead-linkはRetry-Afterヘッダを見てリトライにも対応していますが、このリトライの間隔が長いサイトもあるため、リンク切れのチェックはコミット時にやるのには向いてない作業と言えます。 GitHubでは、GitHub Actionsを使ってschedule実行に対応

    textlintとGitHubのCode Scanningを組み合わせてリンク切れをチェックする
    Kesin
    Kesin 2022/12/13
    こういう機能があるのを知らなかった。上手く使えば大規模なリポジトリで夜間だけ動かすテストで見つけた問題などを管理する場所として使えそう。ただ本来関係なくてもSecurityのところに入ってしまうのが残念か
  • Nreal Air + Macbook Pro/iPad Proで、文章やコードを書く

    最近は、Nreal Airというサングラス型のディスプレイを使って、プログラミングしたり文章を書いたりしています。 Nreal Airは、いわゆるARグラスというジャンルのガジェットです。 ただし、自分の場合はiPad ProやMacbook ProなどのUSB Cで接続できるデバイスから、ただの外部ディスプレイとしてNreal Airを使っています。(AR的な使い方は実質Androidの特定の端末のみが現時点では対応しています。) OculusなどのVRでも同じようなことをやっているので、VRでやる人は次の記事を参照してください。 Immersed + Meta Quest(Oculus Quest) + Macbook Proで、文章やコードを書く | Web Scratch 必要な道具 Nreal Air サングラス型のディスプレイとUSB Cケーブルが同梱されています Nreal

    Nreal Air + Macbook Pro/iPad Proで、文章やコードを書く
    Kesin
    Kesin 2022/09/09
    面白そう。ちょっと試してみたい
  • Node.jsのツールで--cacheフラグを実装するためのライブラリを書いた

    ESLint、Prettierなどは--cacheフラグという一度チェックしたファイルは、ファイルが変更されるまで再チェックしないキャッシュの仕組みを実装しています。 同様の仕組みをtextlintを実装したことはありますが、file-entry-cacheを使い結構煩雑な実装が必要になります。ファイル変更を元に処理結果をキャッシュする仕組みはある程度定型化されているのに、毎回同じような実装をツールごとに書くのは微妙だなと思ったので、ライブラリを書きました。 azu/file-cache: Node.js library that provide a cache for file metadata or file content. --cacheフラグの仕組み --cacheフラグの仕組みとしては、ファイルの内容のハッシュ値 or ファイルの更新時刻をキャッシュファイルとして保存して置きま

    Node.jsのツールで--cacheフラグを実装するためのライブラリを書いた
    Kesin
    Kesin 2022/08/06
  • Maintainer Month: オープンソースをメンテナンスするコツ

    週に一度まとめて更新のようなパターンだと、体調が悪いときなどにその週はスキップされ、また次の週も更新しようとして偶然タイミングが合わなかった場合などに、1ヶ月更新が止まるみたいな状態は起きやすいです。 1ヶ月更新を止めてしまうと、そこで更新する習慣が失われて、この書籍でいう逆戻りが起きるのかなと思っています。 そのため、JSer.infoではタスクを細分化して進められる時にやっていけるような形を作っています。 ライブラリのメンテナンスのリズムをツール化する JavaScript周りは顕著ですが、ライブラリが細かく分かれていることが多いため、リポジトリの数も多いです。 そのため、リポジトリのCI設定や依存ライブラリのアップデートなどをメンテナンスするだけで無限の時間がかかります。 このメンテナンス作業を手動で毎回やるととても疲れるので、自分の場合はツール化していることが多いです。 作ったり、

    Maintainer Month: オープンソースをメンテナンスするコツ
    Kesin
    Kesin 2022/06/28
    Googleのソフトウェアエンジニアリングの本で彼らは大量のコードを一気に書き換える大規模な変更はツールで自動化すると書かれていたけど、個人でそれが必要な数のOSSをメンテできていることがもうすごい
  • lernaからlerna-lite + turborepoに移行する

    Secretlintはmonorepoとなっていて、パッケージを公開する際にlernaを利用していました。 しかし、lernaは現在メンテナンスされていないため、publish機能だけを取り出したlerna-liteと効率的なmonorepo向けのビルドツールであるTurborepoへ移行しました。 Lerna is largely unmaintained · Issue #2703 · lerna/lerna 追記: NxによってLernaがメンテナンスされるそうです。 Announcement: Passing the torch · Issue #3121 · lerna/lerna Lerna is dead — Long Live Lerna. If you’re in a hurry, here’s the TL;DR: | by Juri Strumpflohner | M

    lernaからlerna-lite + turborepoに移行する
  • GitHub ActionsのbadgeをREADMEに簡単に入れるツールを書いた

    GitHub Actionsのbadge画像のMarkdownコードを生成するgithub-actions-badgeというコマンドラインツールを作りました。 azu/github-actions-badge: Generate GitHub Actions badge Markdown code. こんな感じのGitHub ActionsのワークフローごとのBadgeを生成できます。 [![Actions Status: test](https://github.com/azu/github-actions-badge/workflows/test/badge.svg)](https://github.com/azu/github-actions-badge/actions?query=workflow%3A"test")

    GitHub ActionsのbadgeをREADMEに簡単に入れるツールを書いた
    Kesin
    Kesin 2021/12/08
  • Immersed + Meta Quest(Oculus Quest) + Macbook Proで、文章やコードを書く

    Immersed + Meta Quest(Oculus Quest) + Macbook Proで、文章やコードを書く 最近は、ImmersedというMeta Quest(Oculus Quest)で動くアプリを使ってプログラミングをしたり文章を書いたりしています。 ImmersedはOculus QuestなどのVR機器で動くアプリです。 リモートデスクトップ的にOculus QuestとPCを接続して、Oculus QuestをPCのディスプレイとして使えます。 必要な道具 Oculus Quest 2 Oculus Questでも問題ないそうです Windows or macOS or Linuxが動くPC macOSだと自動で物理的なディスプレイが暗くなったり、macOSの方がサポートは良いのかも MacBook Pro (13-inch, 2020, Four Thunderb

    Immersed + Meta Quest(Oculus Quest) + Macbook Proで、文章やコードを書く
    Kesin
    Kesin 2021/11/29
  • GitHub Actionsの`permissions`を自動で設定するツールを書いた

    GitHub Actionsにはpermissionsというフィールドがあり、それぞれのWorkflow/Jobでのsecrets.GITHUB_TOKENの権限を設定できるようになっています。 secrets.GITHUB_TOKENはGitHub Actionsの実行ごとに発行されるGitHubのTokenで、多くのGitHub Actionsはこのトークンを使ってリポジトリをgit cloneしたり、Issueにコメントを書いたりしています。 GitHub Actions: Control permissions for GITHUB_TOKEN | GitHub Changelog Workflow syntax for GitHub Actions - GitHub Docs このpermissionsをちゃんと設定することでサプライチェーン攻撃などの影響を軽減することができます

    GitHub Actionsの`permissions`を自動で設定するツールを書いた
    Kesin
    Kesin 2021/07/21
    簡単な使い方しかしていない場合はread権限だけでほぼ問題ないだろうし良さそうですね
  • TypeScriptの型定義からバリデーションコードを生成するツールを書いた

    create-validator-tsというTypeScriptの型定義からJSON Schemaを使ったバリデーションコードを生成するツールを書きました。 モチベーション expressなどでAPIを書くときに、Request/Responseが意図したものかどうかをバリデーションする必要があります。 特にreq.queryなどはStringが入ると予想しますが、オブジェクトが入ってくることもあります。 これは、expressの内部で使っているqsというURLクエリのパーサが、オブジェクトや配列へ展開する機能を持っているためです。 expressを使ってるサイトは ?q=text があるときに req.query.q には オブジェクトが入る可能性をちゃんと考慮しないといけない。 ?q[a]=text で req.query.q ; // { a: "text" } になる — azu

    TypeScriptの型定義からバリデーションコードを生成するツールを書いた
  • Next.js + Vercel + Cloudflare Workers KV + Googleスプレットシートで寄付管理サービスを作った

    Next.js + Vercel + Cloudflare Workers KV + Googleスプレットシートで寄付管理サービスを作った philan.netという寄付の予算を決めて寄付した記録をつけるウェブサービスを作ったので、この記事では技術的な部分の解説をします。 philan.net自体については、次の記事で解説しています。 寄付をするために、寄付の予算と寄付の記録をSpreadSheetベースでつける philan.net というサービスを作った | Web Scratch この記事では、Next.js + Vercel + Cloudflare Workers KV + Googleスプレットシートを使って動いているphilan.netについて解説します。 あと検証中にCloudflare Workersを色々いじったのでそれについても書いていきます。 Idea phila

    Next.js + Vercel + Cloudflare Workers KV + Googleスプレットシートで寄付管理サービスを作った
  • Googleマップ ストリートビューでランニングできるウェブアプリを作った

    ノートPCやタブレットとかについてるウェブカメラを使って、Googleマップ ストリートビューでランニングできるRunning on StreetViewというウェブアプリを作りました。 Google Maps Street Viewとウェブカメラを使って、ストリートビューを走るウェブアプリを書きました。 走るとストリートビューが進む感じ(雑な判定なので走らなくてもいい)https://t.co/bhYq289QmS 使い方はこちらhttps://t.co/kypr9Oo9JU Google MapAPIキーは自分で取得する必要があります。 pic.twitter.com/tmD1XNwjSa — azu (@azu_re) May 8, 2020 動画はデバッグ用のモデルに走ってもらっていますが、ウェブカメラで走るなどのアクションに応じてストリートビューを進行できるアプリです。 色々検

    Googleマップ ストリートビューでランニングできるウェブアプリを作った
    Kesin
    Kesin 2020/05/12
    おもしろそう
  • Node.jsでUnhandled Rejectionsのときにexis statusが0となる問題を回避する

    Node.jsでUnhandled Rejectionsが発生してprocessが終了すると、Exit Statusが0となる問題とその対策についてのメモです。 追記: Node.js 15+からUnhandle Rejectionが発生するとプロセスがExit Status 1で終了する動作がデフォルトとなりました Node.js v15ではunhandled rejectionでプロセスがエラー終了する 事前知識: Async FunctionはPromiseを返す関数定義です。 その辺について詳しくは次のサイトを読んでください。 JavaScript Promiseの 非同期処理:コールバック/Promise/Async Function · JavaScript Primer #jsprimer 今回のサンプルコードは次のリポジトリにあります。 azu/unhandled-rej

    Node.jsでUnhandled Rejectionsのときにexis statusが0となる問題を回避する
    Kesin
    Kesin 2020/03/20
    知らなかった
  • lernaでのmonorepoにおけるリリースフロー(Fixed/Independent)

    一つのリポジトリで複数のパッケージを管理する際にはLernaとYarnのワークスペースを組み合わせて運用するmonorepoにすることが多いです。 lerna/lerna: A tool for managing JavaScript projects with multiple packages. LernaにはFixed(すべてのパッケージが同じバージョン)とIndependent(パッケージごとに異なるバージョン)のモードがあります。 https://github.com/lerna/lerna#how-it-works 基的にはFixedの方が運用は簡単ですが、不自然なバージョンの上がり方を避けたい場合などはIndependentのmodeを使うことになります。 この記事では、Fixed modeとIndependent modeでのパッケージのリリースフローについて見ていきます

    lernaでのmonorepoにおけるリリースフロー(Fixed/Independent)
    Kesin
    Kesin 2019/12/28