iwate

A software developper in Japan github: https://github.com/iwate

Goodby Node/NPM, Hello Deno!

npmのpre/postinstallが怖いって話の続き 手持ちのプロジェクトでpre/postinstallの実行を抑制して、Nodeのpermissionsを使用して読み書きできるフォルダを限定したところ、storybook等動かないものが出てきた。 Next.jsのプロジェクトはひとまず置いておいて、Storybookに関しては、大した使い方をしておらず単にモックやコンポーネントの実装サンプルをまとめるためだけに使っているので、Storybookをやめるという選択肢は全然とれる。 やりたいことといえば、ASP.NETで利用するためにumdなjsとcssにバンドルしたい、jsやcssを試す用のモックHTMLがホストできるだけでいい。 それならStorybookじゃなくていいし、この際、NodeもやめてDenoにしてより強いPermission制限をかけられるようにしてみよう。 ということで作ってみたのがこのリポジトリ esbuildを使用して、TypeScriptとSCSSをjsとcssにバンドルしている。確認用に、ejsファイルをhtmlにレンダリングして、d...
Read post

地獄のNPM

前から分かってたことではあるけど、JavaScriptのパッケージって依存関係多すぎやしないか? node_modulesひたすら長いし、たった1つのパッケージ入れただけでも100パッケージほど生えるとかざら。 この中にマルウェアが紛れ込んでないって確証を得るの難しすぎる。 OSSのセキュリティは「Given enough eyeballs, all bugs are shallow」の精神で保たれてるけど、最終的にそのパッケージを含めてリリースする責任は我々個人・組織にあるわけで、何でもかんでもパッケージを追加したくない。 とりわけ、NPMのpostinstallが怖い。これは、 npm install した際に、パッケージをダウンロードする後にスクリプトを走らせられる機能で、例えば、ネイティブモジュールが必要なパッケージなどで、環境ごとにコンパイルを走らせたり、バイナリをダウンロードさせたり、package.jsonにプロパティを生やせたりする。 つまるところ、パッケージをダウンロードした際に任意のプログラムを実行させることができるということ。 なんてマルウェアに優しい仕様...
Read post

How to use vitest on Visual Stduio TestExplorer

The fact that you read this title and opened this page means I'm sure that you know what is esproj. https://learn.microsoft.com/en-us/visualstudio/javascript/unit-testing-javascript-with-visual-studio?view=vs-2022&tabs=jest esproj is supporting only the following test frameworks. Mocha (mochajs.org) Jasmine (Jasmine.github.io) Tape (github.com/substack/tape) Jest (jestjs.io) But, In 2024, vitest is one of the most popular frameworks for testing. I want to use it. 1. Install framewor...
Read post

Google MeetでVisual Effectsが使えないときは

Meetで背景加工ができないとき、「ハードウェア アクセラレーションが使用可能な場合は使用する」をONにしろ。とエラーがでるが、設定を見に行ってもONになってる。 そんなときは、 https://webglreport.com/?v=2 を確認する。 Major Performance Caveat が YES になっていたら、 chrome://flags/#ignore-gpu-blocklist を Enabled に変更する。 参考 https://support.google.com/meet/thread/82370396/how-do-i-change-the-major-performance-caveat-from-yes-to-no-so-i-can-have-the-background-blur-icon?hl=en ...
Read post

Today's English words #7

イヤイヤ期 Terrible Twos My daughter is starting the terrible twos. My daughter is right in the midst of the terrible twos. My daughter made it through the terrible twos. じだんだを踏む have a tantrum stamp one's feet (with flustration) My daughter has a tantrum when she's hungry. ...
Read post

Razorをコンパイルしたときの中間ファイルを出力する

Razorは、C#のソースコードに展開されて、そのC#がコンパイルされる。 そのため、Razorのコンパイルエラーは、Razorのパースエラーと、C#のエラーの両方があり得る。 たまに、Razorの気持ちが分からなくて、どういうC#のコードに展開されているのか確認したいときがあるが、ASP.NET Coreではオンメモリで処理されるので、そういうときは ファイルに書き出すオプションを有効化する必要がある。 <PropertyGroup> <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> </PropertyGroup> すると、ビルドしたときに obj/Debug/<sdk-version>/generated/Microsoft.NET.Sdk.Razor.SourceGenerators\Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/ に保存される。 ...
Read post

ODataHttpClient

ODataHttpClientというライブラリを作って公開しています。First Commitから随分立つので、ここらへんで一旦どうしてこれを作ろうと思い立ったか、どう使いたくて、どう使ってもらいたくて、実際作って使ってみてどうだったかをまとめておこうかと思います。 ホントはリポジトリに英語で書いたほうがいいんですが、とりあえず下書きでここに母語で書きます。 OData ODataHttpClientはその名の通りODataのクライアントなのですが、ODataとは何でしょうか。そこから整理をはじめてみます。 ODataはOASISで標準仕様が策定されているプロトコルです。OASISでは他にAMQPなどが策定されています。 https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata ODataの策定員会ではMicrosoftやSAP、IBMの方々が中心となって進めています。またこれらの企業がスポンサードしています。 私がODataの存在を知って触りだしたのは、所属する会社に入社してからで、時代的にはXML...
Read post

耐震シミュレーション

先日、太陽光パネル載せませんかという営業がきた。 災害時や停電時の非常電源として、ずっと気になってはいたので、太陽光パネル載せようかなと思ったが、載せたときの地震に耐えられるのか気になった。 何とか自分で計算できないものかと思って調べたら、京都大学の生存圏研究所で開発してる Wallstat というものを見つけた。 使いやすそうだったので、これを使用してシミュレーションしてみた。 図面とにらめっこしながらポチポチすれば素人でもシミュレーションできて良かった。使い方もYouTubeに動画があるので迷うことも少なかったが、 柱や接合部の材料は、コミュニティからダウンロードできるデータが使えるとはいえ、全ては揃わなかった。 これらの代替として、リストにあるものを割り当てていくのが素人には難しかった。 名前的に近そうとか、形状を調べて用途と形、強度値が近しいかどうかなど当てはめていくのが一番時間がかかった。 素人の適当入力なので正確なシミュレーションにはなってないと思うが知りたかったのは、太陽光パネルを載せたときどうなるかなので差が分かれば良いとする。 太陽光パネルは15k...
Read post

Learning WASM #13

WASM側でTaskを使ったらどうなるんだろう。 準備のためにホスト側に関数を生やしてそれをWASM側から実行できるようにしてみる。 ゲスト側ではホストの関数を参照するのに[DllImport]をつかう using System.Runtime.InteropServices; using System.Runtime.InteropServices.Marshalling; using System.Text; namespace classlib; public static class Class1 { [DllImport("*")] static extern void return_string(IntPtr ptr, int len); [UnmanagedCallersOnly(EntryPoint = "ReadAsync")] public static void ReadAsync() { var str = ManagedString(); var bytes = Encoding...
Read post

Learning WASM #12

分かってはいたけど、WASMの関数をホスト側からパラレルに実行したら死んだ。 毎回初期化するのは時間かかるから、プールを作って同時実行しないように制御しないとだな thread 'thread 'thread 'thread 'thread 'thread '<unnamed><unnamed><unnamed>thread '<unnamed><unnamed><unnamed>' panicked at '' panicked at '' panicked at '' panicked at '0xabeedadce0 >= 0xabf167e7a0<unnamed>' panicked at '0xabeedadce0 >= 0xabf107eb900xabeedadce0 >= 0xabf14fe690', ', crates\runtime\src\traphandlers\backtrace.rs0x0 > 0xabf0d7ea60' panicked at '0xa...
Read post

Learning WASM #11

unsafe使って書いてみた。無駄なコピーはなくなった。 けどどうだろう。fixedしたことによってGCが回収できなくなっちゃった。ホストが読んだらもういらないんだけど。 でも、そもそもWASMだとまだGC動かなかった気もする。プロポーザルは出てる。 Blazorはそこらへんどうなってるんだろう。 WASM側 using System.Runtime.InteropServices; using System.Text; namespace classlib; public static class Class1 { [UnmanagedCallersOnly(EntryPoint = "Read")] public static IntPtr Read() { var str = ManagedString(); return WriteToMemory(str); } private static IntPtr WriteToMemory(string str) { var by...
Read post

Learning WASM #10

Managedな値をホストとの共有メモリに書き出してみる。 とは言っても、バイト列に変換して、共有メモリにコピーするだけ。 WASM側 using System.Runtime.InteropServices; using System.Text; namespace classlib; public static class Class1 { [UnmanagedCallersOnly(EntryPoint = "Read")] public static IntPtr Read() { var str = ManagedString(); return WriteToMemory(str); } private static IntPtr WriteToMemory(string str) { var prefix = sizeof(int); var bytes = Encoding.ASCII.GetBytes(str); var ptr = Mars...
Read post

Learning WASM #9

.NET 8.0のリリースも間近に迫りました。 LTSの更新であれやこれやを更新して周らないといけないかと思うと憂鬱です。新しいバージョンのリリースが素直に喜べないないんて歳を重ねたってことなのかな、なんて思う今日この頃。 でも、8が全く楽しみでないかというとそうでもありません。AOTが対応になってWASIバイナリへのコンパイルも簡単にできるようになります。 ということでやってみました。 コンパイルするにはwasi-experimental workloadとWASI-SDKが必要です。 まとめてDockerfileにしておきました。 ここまでは、前にもやったことがあるし、実はそこまで興味ない。 興味があるのはエントリーポイントのあるWASIバイナリではなく、関数がexportされているライブラリとしてのWASIバイナリです。 これができると、WASMを使ったプラグインを.NETで書くことができます。 今まは、wasmtimeを使ってホストしかかけてなかったけどゲスト側もC#で書きたい。.NET7のころからできてたみたいですが手を出してなかったのでこの機会にやって...
Read post

続⁴ Azure Functions IsolatedでSingleton

前回 もはや、Singletonの話じゃなくて、CQRSライブラリの話に代わってしまっているが、前回BlobTriggerに変えたことで、せっかく作ったSingletonが使えなくなったので、 Commander用のミドルウェアを作った。 使用例 ...
Read post

How to delete config cache of IIS Express with VS2022

I got a error using IIS Express. It seems like config error because the log tells me old application path. I moved solution dir before happened this error. However IIS Express seems to handle old path. I checked Task Manager and get starting parameter of IIS Express, $(SolutionDir).vs/$(ProjectName)/config/applicationhost.config was passed. After deleting it, The app has run without error. ...
Read post

続々々Azure Functions IsolatedでSingleton

これが、 こうなり、 こうなった。 最終的に、CQRS用のライブラリを作りに至ったわけだけど、 課題としては、トリガー用のStorage QueueとBlobの中に作ったコマンドキューとの間でキューの長さがずれてしまった場合、トリガーが全部終わってもコマンドキューの中に処理されないコマンドが残ってしまう可能性がある。 という課題が残っていた。 これをどうしようかなあと思っていて、ずっと放置していたのでこの週末実装した。 アイディアとしては、キューが同一トランザクションで書き込みできないStorageBlobとStorageQueueに分離してしまうからズレる可能性が生まれるわけで、Blobに書いたものを拾って次につなげればいいはず※1。 こういうの何っていうんだっけ?分散トランザクションじゃなくて違う言い方があったと思うんだけどなあ。思い出せない。 基本的な使い方は変わっていないが、StorageQueueを繋ぎに使わないとこだけ違う。 public class InvokeCommand { private readonly Comma...
Read post

ブラウザ上でJavaScriptの単体テストをしたい

単体テストはjest、E2Eテストならplaywright。 これが最近の流行なんじゃなかろうか。類に漏れず、私もその2つを使ってる。 ただこの前困ったことがあった。ブラウザでしか動かないコードをテストしたくなったのだ。 jestはnodeで実行されるから、nodeでもブラウザでも動くコードなら問題なくテストできるのだけれども、このAPIは実装されていないのでダメだし、ブラウザごとにアルゴリズムの実装状況が違うかもしれないから、それをブラウザごとにテストしたい。つまり、やりたいこととしては、単体テストなんだけど、実現方法としてはブラウザを起動して行うためe2eに近い。 jest前は、jasmin、karmaなどで、ブラウザ上でテストするのは一般的だったから、そのころと同じような構成とるかと思ったけれども、e2eようにplaywrightは入れてるわけで、そこに新たにpupetter入れてとかするのも、ことが大きすぎるなと感じる 結果的に考えたのは以下のような構成。 # dir tree ├ src │ ├ client │ │ └ test_target.ts │ └ ser...
Read post

Config dotnet output language settings

Set DOTNET_CLI_UI_LANGUAGE environment variable. $env:DOTNET_CLI_UI_LANGUAGE="en" ...
Read post

Ubuntu 20.04 (Zorin OS Lite 16)でmouse fp01を使う

去年買ったmicro pcはとてもコンパクトで、Linuxを入れて楽しく使ってる。 モバイル機として使うため、電池持ちが良くなるようCPUのクロック調整など色々設定している。スクリーンロック摩での時間を1分程度にしてるのもその1つ。 ただ、毎回スクリーンロックを解除するためにパスワードをその都度入力するのはスマホに浸った現代人には結構面倒だと思う。 かと言ってパスワード入力なしにするのは、電車に置き忘れたりしたら怖い(前科あり) だから、スマホみたいに指紋認証で開けられないかなあと思ってた。 調べてたら、mouseのusb指紋リーダーfp01が使えるかもという情報を見つけた。 mouseのfp01は昔買ってあったので引っ張り出してきて指してみた。 aptでfprintdを入れてみるが、fprintd-enrollコマンドがエラーになる。どうやら認識してないようだった。 fp01のなかのモジュールは、LighTuning TechnologyのEGISというものらしく、調べると、libfprint v1.92.1でドライバが追加されているようだった。 が、使...
Read post

Pronoun always confuse me

Lisa love a time she spends with her friends. Today, She go out with Karen because *she is hungry. I'm often lost the mean of the pronoun. Which is *she, Lisa or Karen? I guess it's Lisa in the case. If it correct, how do I write down for Karen? ...
Read post

Today's English words #5

できるようになる become able to Babys suprise me everyday because they become able to what they weren't able to yesterday. ハイハイ crawl My daughter seems like that she wants to crawl but she can't yet because she can't up her upper body. So, she is crying as she can't that she want to do. ...
Read post

ECG

PixelWatchを触ってたら、最初からECGアプリが入ってることに気づいた。 Versa2を使ってたときは日本では測定アプリが時計に入れられなかったけど、最初から入ってるなら使えるのではとおもって開始ボタンを押した。 すると、Fitbitのアプリが起動してお使いの地域では使用できませんと言われるが、NordVPNで米国にVPN張って再度試してみたところ、見事突破。 念願のECGが使えた!やったー! ...
Read post

Today's English words #4

爪 nail 爪が伸びる nails grow 爪が伸びるのが早い nails grow fast Baby's nails grow up fast. 爪をきる cut one's nails trim one's nails 爪で引っ掻く scratch with nails 引っ掻き傷 scratch scratch mark 握る grasp 爪が食い込む、爪をたてる dig one's nails into something It hurts that she grasps my arm. cuz her nails grow fast and she digs her nails into my arm. So, I should trim her nails everyday. 蒸れる be stuffy get stuffy feel stuffy 汗疹 heat rash かぶれる get a rash よだれ drool よだれを垂らす drool よだれがついた drooly 寝返り roll-over 寝返りを打つ ...
Read post

Today's English words #3

母乳 breast milk 乳児用粉ミルク formula milk baby formula 仰向け facing upward 仰向けに寝る lie on one's back 仰向けになる turn on one's back 仰向けにする turn something face up うつ伏せ lying on one's face うつ伏せになる lie on one's face うつ伏せタイム tummy time tummy ... おなか、ポンポン ポンポンペイン tummy bug 首が座る holding up one's head lifting up one's head stable She can holding up her head Her neck is becoming stable. ...
Read post

Today's English words #2

抱っこする carry in one's arm I carry her in my arm. おんぶする carry piggyback I carry her piggyback. 哺乳瓶 baby's bottle おしゃぶり pacifier teeth ring (人が物理的に)反り返る arch one's back She arches her back. She doesn't asleep and all she arches her back. ...
Read post

Today's English words #1

しゃぶる suck She's sucking her fingers. オムツ diaper オムツを変える change the baby's diaper オムツをする put a diaper on (a baby) オシッコする pee do a wee do wee-wee go wee-wee She take a pee. She does a wee. She does wee-wee. She goes wee-wee. ウンチする do poopoo go poopy She does poopoo. ウンチしたオムツ poopy diaper ニヤつく grin She grins. She always does poopoo and grins while sucking her fingers soon after that I've changed her diaper. ...
Read post

大掃除(twitter)

大掃除シーズンですね。家の大掃除はもちろんですが、今年はネットの大掃除もしてみようかと思い、過去のtweetを削除した。 これがtwitterの制約で結構難しい。難しいはちょっと違うか。やることはAPIたたくだけなんだけどそこにたどり着くまでが長い。だから面倒ってのが妥当かもしれない。 twitterの仕様 Webやアプリからtweetの削除はできる。が、1個ずつしかできない。2009年から使っているのでそれなりの量なのでそれをポチポチしたくない。 そして、自分のプロフィールからたどれるtweetは、2014? 2015?以降の直近3200tweetに限られているらしく、Webやアプリから消すためにたどり着くのは非常に困難。 さらに、APIでユーザIDをキーにして取得できるtweetもプロフィールと同様の3200件に限られる。 アーカイブを申請する EUでGDPRが施工されてから、自身のアーカイブデータをダウンロードできるようになっている。 自身の設定からアーカイブを申請すると2日後ぐらいにはダウンロードできるようになった。 アーカイブはzipでまとまっててダウンロード...
Read post

続々Azure Functions IsolatedでSingleton

dotnet isolatedなAzure FunctionsでどうしてもSingletonしたいシリーズ。 前回こうやればよさそうってとこまでは考えた。 今回は、これを実行するためのライブラリを書いた。 1つは、Azure Functionの実行をシングルトンになるようにせき止めるためのミドルウェア。 使い方は、起動時にミドルウェアを差し込んで、 var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults(app => { app.UseMiddleware<Iwate.AzureFunctions.Middlewares.Singleton.SingletonMiddleware>(); }) .Build(); host.Run(); シングルトンにしたい関数に属性をつける。 public class SingletonFunction { [Function("SingletonFunction")] [Singlet...
Read post

続Azure Functions Isolated でのシングルトン

以前dotnet-isolatedなFunctionでSingletonがどうしても使いたくて、自前ロックを作った。 ただ、これでも完ぺきではなく課題が残ってる。それは実行順序。 前にも書いたが、a)のように並行して動いてしまう関数を、b)OrderIDごとに直列にしたい。 a) +-----------------+ +-----------------+ +-----------------+ |ORDER ID: 100 | |ORDER ID: 100 | |ORDER ID: 101 | |TIMESTAMP: 3s ago| |TIMESTAMP: 2s ago| |TIMESTAMP: 1s ago| +-------+---------+ +-------+---------+ +--------+--------+ | | | +-------v--------------------v----------------...
Read post

The cheap way to make multi tenant SaaS on Azure #1 | Poor man's Azure

Many people say Azure is expensive. But I think Azure isn't so expensive compared AWS or GCP on full workload. However it's true that minimum cost is expensive on Azure. Therefore I've decided to find to make multi tenancy application on Azure as cheap as possible and I'm going to try to write a series of them. In this commemorable first article, I consider front-end and authentication. Azure has many scenarios to host web application, such as WebApps, VM, Container Apps, aks, aci, Static Web...
Read post