そろそろ シリコンマックに移行しないと……と思い立ち先月 MacBook Air M1 を購入した。 それが今年のWWDCの前だったので、それまで待って発表内容を見てから購入すべきか悩んだ。 しかし、刷新された MacBook Air 2022 が出る、という噂があったので、 既存の MacBook Air が廃盤になって購入できなくなると困るという考えがあった。 12inch MacBook のときがそうだったように、入手しようか悩んでいるうちに廃盤になって購入できなくなるのは避けたい。 それに、仮にその新しい MacBook Air 2022 が素晴らしいものだとしても、 ここ最近の円安により相当値段が高くなることが予想されたので、 十分実用的だと感じている MacBook Air M1 が10万円ちょっとで買えるならば、 どのみち、新しい MacBook Air 2022 を買うことはないだろう。 それならもう開催前にオーダーしてしまおう。 最悪のケースでも 2週間以内なら返品できるわけだから、などと悩みつつ購入。
» Read More先日、電子書籍「ExtendScript と Node.js による Markdown to InDesign 開発入門」をリリースしました。 Amazon の Kindle Unlimited の会員の方は無料で読めます。ExtendScript に関心がある方は是非ご覧ください。
これは、 以前リリースした「Node.js による InDesign ExtendScript モダン開発入門」の続編です。
書籍中のソースコードはこちらの Github レポジトリにあります。
» Read Moreたとえば、次のようなポケモンオブジェクトのリストがあったとして:
[
{ name: 'Eevee', type: 'normal' },
{ name: 'Pidgeot', type: 'normal' },
{ name: 'Pikachu', type: 'electric' },
{ name: 'Raichu', type: 'electric' },
{ name: 'Jigglypuff', type: 'normal' },
{ name: 'Squirtle', type: 'water' },
{ name: 'Golduck', type: 'water' },
{ name: 'Voltorb', type: 'electric' }
]
これをタイプ別にグループ化したリストのリストをつくる関数を考えます。
» Read MoremacOSまたは Chromebook のLinux において、Emacs で編集しているときに現在のカーソル行にある URL をブラウザで開く方法を調べた。
» Read Moreサラサナノにのりかえた 的な話から3ヶ月経過、 相変わらずサラサナノばかり使っています。
前回のエントリーでは サラサナノ + 0.3mm のリフィルは使い辛いと書いていたのでしたが、すみません、違いました。 それは、使うノートの方の問題で、ノートの種類によっては 0.3mm のリフィルはとても機能します。
» Read Moreこの問題を解くHaskell による実装を書いたのだが、 結局のところ、対象となる文字列(画像ファイル名)の等価性をカスタマイズするために、 文字列を丸めてそれを使って等価性の比較を行っているだけ。 Haskell では、 Eq 型クラスを自前で用意した Item 型に実装する形で、 言語にもともと備えられている仕組みを 使っているのでコードとしてはわかりやすいのは確かだけれど。
そこでこの問題を Haskell 発想により近い形で JavaScript で実装しなおしてみる。
» Read More前回のエントリー微妙に揺れのある2つの文字列リストに対する積集合(Intersection)と差集合(difference)の計算 の Haskell 編です。
積集合と差集合とか書いて・・・途中で気づいたのですが、2つの集合の差だけを求めれば済む話だった。 Haskell 編では差だけを求めます。
» Read More微妙に揺れのある次のような 二つの文字列リスト(画像ファイル名)があるとする。
const listA = ['grape.pdf', 'apple_v1.pdf', 'apple_v2.pdf', 'lemon_v1.pdf', 'peach_v2.pdf'];
const listB = ['grape.png', 'lemon.png', 'strawberry.png'];
listA の画像から listB の画像をPDFからPNG変換して作成した、という状況。 変換し忘れている画像ファイル(PDF)を知りたい。 そんな場合の計算方法について考える。 なお、世の常として listB に listA には存在しない strawberry が間違って混入されている、という例になっている。
» Read MoreNode.js の xlsx モジュールを使って、データの入っている範囲を計算します。 その他、特定の行のデータを取得したり、列データを取得する方法について覚え書き。
» Read Moreこのエクセルデータのダウンロード: potate.xlsx
今 ExtendScript を使って markdown テキストを InDeisgn 文書に変換する方法を考えている。 その際に画像の大きさの扱い方で悩んでいたのだが、 pandoc で ICML を経由して markdown を InDesign にする場合は、 markdown で次のようにそれを指定できるらしい。
» Read MoreWindows の WSL みたいに MacOS でも軽快に(VirtualBoxやParallelsほどおおげさでなく)Ubuntuを使いたい。 と思っていたら Multipass を使えばよいだけだった。
» Read More以前のエントリー ブラウザテキストエリアで Emacs キーバインド を使いたい で、普通にブラウザで Ctrl + N が使える方法を探していたのだが、 ここしばらくは、 Windows11 で Vivaldi というブラウザを使うことで 回避してきた。
» Read More先日 markdown-to-ast を使って markdown をパースするというエントリーを書いたのですが、 markdown-to-ast は commonmark をラップしたライブラリだとの情報を得た。
それならば、markdown-to-ast を使うのではなく、直接 commonmark を使ってみることにする。
» Read More文字スタイルをスクリプトでつくって適用する方法を調べた。
それを使って Hello, World! を生成して、段落スタイルと文字スタイルを適用するスクリプトを書いたので 備忘録を残します。
» Read Moremarkdown で記述されたテキストをパースしてあれこれしたい場合。 markdown-to-ast が便利そうなので、使ってみた。 これはすごい便利。
» Read More2022-04-04 更新: commonmark 編を書きました。
コーヒーメニューの価格改訂リストの作成で書いた再帰関数をリファクタリングします。
» Read Moreコーヒーメニューの価格改訂リストの作成の後編です。
読み取った新旧のコーヒーメニューリストをコーヒー名をキーにマージして旧価格/新価格を一覧にします。
また、エラーが含まれていたらログも書き出します。
Writer モナドを使ったコーヒーメニューの価格改訂リストの作成 の改善版をつくります。 新旧のアイテムリストから、同じコーヒー名を持つアイテムを組み合わせたタプルをつくる方法を改善します。 →2つのリストの要素を組み合わせたい(リストモナド)
» Read More新旧2つのコーヒーメニューアイテムリストがあり、 そこから同じコーヒー名をもつ新旧アイテムの組み合わせをつくりたい、という問題を考える。
ひとつの方法(方法A)は、ユニークなコーヒー名リストを作成し、 それを使って、新旧2つのリストからそのコーヒー名を持つアイテムを取り出し、新旧アイテムをタプルにする。
もうひとつの方法(方法B)は、新旧2つのコーヒーメニューアイテムリストの各要素ごとの 全ての組み合わせを生成しておき、 その中かから、新旧のアイテムでコーヒー名が一致している組み合わせだけを残す。
方法Aは発想としては分かりやすいけれども、もしひとつのリスト内に同じコーヒー名を持つアイテムが含まれていると困る。 その場合を考慮してコードをかけばよいのだろうけれど、ややこしい気がする。
» Read MoreWriter モナドの使用例として その1 / その2 / その3 とエントリーを書いたのだが、気に入らない。 結局 Writer モナドを使う必要のないコードになってしまった。
今回はその1〜3のコードをリファクタリングして、Writer モナドを使うべき理由のあるコードに直します。
» Read Moreたとえば、コーヒーメニューアイテムの名前とその価格があったときに、値段が高い方を取り出したい、とする。 ただし、価格が不明なアイテムもあるので、価格の型は Mayb Int になっている。 それらを上手に取り扱いたい場合を考える。
» Read Moreたとえば Maybe String から String だけを取り出したい場合。 maybe 関数を使えばよい。
» Read More前回は入力データにエラーがない場合を想定したコードでした。 今回はデータにエラーが含まれていた場合について考えます。 エラーが含まれていても作動するようにするだけでなく、どんなエラーなのかの説明(ログ)を同時に追加します。
» Read MoreWriter についてこのエントリーで軽く使い方を調べました。 今回はコーヒーの価格改訂を題材にして Writer モナドを使ってみます。
ここでは次のようなケースについて考えてみます。
以下の3つのコーヒーメニューアイテムがあるとします。
これらが事情により値上げとなり、以下のようになったとします。
そこで改訂前と後の価格がアイテムごとに把握できるデータを作成します。
方針として、まずはデータにエラーが含まれていないケースについて考えます(その1)。 その後データにエラー(不備等)があった場合に対処できるコードを Writer モナドを使って書くことにします(その2)。
» Read More今回は xlsx モジュールを使って、エクセルデータを書き出します。 前回 までにエクセルデータの読み取りと Computer 型への変換まで行ったので、 今回はその結果をエクセルデータとして書き出します。
» Read Morexlsx モジュールを使って、エクセルデータの読み書きを試します。
処理内容は、エクセルデータからコンピュータリストを読み取り、所定の条件にマッチした情報のみをエクセルデータとして書き出すことにする。
フォームデータがPOSTされたときのサーバ側でのフォームデータ取得方法 はわかったのだが、GETのときのURLの後ろに追加されるパラメータはどう取得すればいいのか?
» Read MoreフォームデータがPOSTされたときのサーバ側でのフォームデータ取得の記述方法。
» Read More前回 ポケモンのモデル化とその進化を Maybe モナドと bind を使って記述しました。 変換処理を連続で適用するという意味では、前回の段階では、コードが読みやすくなった程度で モナドを使う利点がさほどない状態でした。 今回は、ポケモン進化モデルのルールを追加し、モナドを使ううれしさを探ってみます。
» Read MoreHaskell で練習のため キャタピー進化系のモデル化をやってみます。 Maybe Monad を使ってトレーニングとバトルでゲットしたキャタピーを進化させよう。
» Read MoreTwitter にて この電子書籍のアマゾン Kindle 無料サンプルは文字化けした状態であるとのご指摘がありました。 せっかく無料お試しいただいた方、誠に恐縮です。 現在、原因調査および対処中です。 → 解決しました。2022年 3月 4日 18時現在
» Read Moredata とそのフィールド値の取得 でポケモン型を使いました。
そのとき疑問に思ったのが、 たとえば Pokemon をレコード構文で定義した場合に ポケモン型からその名前を取得するのに name aPokemon のようにすれば ポケモン名が取得できることがわかったのですが、name のような、よくありがちな関数名を使えるようにしたら、困るのでは?ということです。
つまり、次にたとえば 進化石 EvolutionStone 型を定義したとして、 そこにも name があったらバッティングして機能しなくなるよね? ということです。実際にやってみましょう。
» Read More前回 pure と Just の違い を調べていて、filterM の Maybe 限定版、というのを考えたのでそれを実際に試した。
» Read MoreMonad においては pure より return を使った方が普通なのかもしれません。わかりません。 Javaなどに慣れていると return は Java の return のイメージになり混乱するので、pure を使うで統一しています(今のところ)。 pure と return どっちなの?という件については https://wiki.haskell.org/Monad を見てください。
前回 コンピュータリストを bind ( >>= ) を使って連続して条件を適用しました。
しかし、コードをよく見てみると、 Just の部分を pure に変更しても作動するし、その逆に pure の部分を Just に変えても作動する。 今回はその謎を調べます。
» Read MoreHaskell では data Product = Product String Int のようにしてデータ型を定義できる。 これがただの関数だという。 どういうことかわかった(気がする)ので、書き留めておく。
» Read MoreHaskell での Map 操作の覚え書き。 身近なポケモンを使ったコードをつくります。
» Read More2021年11月にサラサシリーズの新しいペン サラサナノ が発売されました。
そんなことは全く知らなかったのですが、 色数を増やそうと思いたち、年末に文具店に サラサグランドを買い増しに出かけた。 しかし、サラサグランドが置いていない。 その代わりこのサラサナノがあって、まあこれでいいか(サラサグランドより)安いし、と思ってとりあえず間に合わせで買ったのですが、これが大当たりです。 今では、このサラサナノに MUJI のサラサ互換リフィルを入れて毎日使っています。 もう、ほぼペンはサラサナノしか使っていない。
» Read More昨年末に電子書籍「Node.js による InDesign ExtendScript モダン開発入門」をリリースしました。 Amazon の Kindle Unlimited の会員の方は無料で読めます。ExtendScript に関心がある方は是非ご覧ください。
内容は、Node.js を活用して ExtendScript 開発すると便利ですよ、という内容。 ExtendScript をある程度書いている人がもつ不満「今どきの JavaScript 記述方法を使って ExtendScript を書ければいいのに・・・」に応えるものです。
書籍中のソースコードはこちらの Github レポジトリにあります。
» Read More今回は Writer モナドと bind について使い方を調べます。
Writer モナドは複雑なので、Writerで実現したい計算に近いコードを Maybe モナドで書き、その後それを Writer モナドに書き換えます。
» Read MoreKotlin Script で POI を使ってエクセルデータをつくる。 セルスタイルを設定してやることで、エクセルデータの表現力を増すことができる。 エクセルを人間が扱うものとして考えると、この辺は重要かつ便利な機能ではある。
出来上がりは、こんな感じ:
kotlin script の詳細はこちらのエントリー をご覧ください。
» Read MoreMicronaut で MongoDB と GORM を使う方法。 ガイドは ここ にある。 Micronaut の version 2.5.7 では、問題なく作動したが、 version 3.3.0 では version 2.5.7 と同じようにアプリケーションを作成しても No GORM implementations configured などのエラーが出てうまく作動しなかった。
» Read Moreテスト用に json を POST して json を返す ウェブサービスをつくる において、 クライアントで curl を使ってPOSTするときの指定で Content-Type に application/json を使っていた。 もし単なる plain text ポストしたい場合、plain/text を指定したらどうなるのかと試したらエラーになった。
そこで今回は plain/text を POST して plain/text の結果を得る コントローラを micronaut で書いてみることにした。 言語は groovy に代えて kotlin を使います。
» Read Moreなんとなく Task の使い方がわかったので、 今回は Javaの newSingleThreadScheduledExecotor() の ExectorService と似た作動をするコードを C# で実装してみます。 実行するタスク(アクション)は Fire-and-forget 形式。
» Read More最終的には Javaの SingleThread の ExectorService を C# で実現したい。 今回はとりあえず Task を使った非同期の記述方法を軽く調べてみる。
» Read More前回のエントリーで Newtonsoft.Jsonを使って json のデシリアライズ処理をしたのだが、標準の System.Text.Json で普通にできたのでその方法を記録しておく。
» Read MoreAndroid 向けに開発している手書きアプリを Surface GO/Pro に移植しようと思いたち購入した Surface GO 3。 当初は Windowsタブレットとしてキーボードなしに使えるアプリにするつもりだった。 だから、Type Cover は購入しないで、既存の Bluetooth キーボードで間に合わせてきた。
以前のエントリー ブラウザのテキストエリアで Emacs キーバインド を使いたいで、Ctrl + N がブラウザで新規ウインドウを開くに固定されていて困る、という話を書いたのだが、Vivaldi ブラウザを使えば問題がないことが判明。
Vivaldi は設定で、Ctrl + N を無効にすることもできるし、 そもそもそのショートカット無効設定をしなくても、Ace をテキストエリアに使用すれば、 Ctrl + N は 正しく カーソルを次の行に移動してくれる。
ありがとう Vivaldi! このブラウザのおかげで、ついに Ctrl + N の苦しみから解放された。
» Read MoreWPFアプリケーションを Visual Studio を使わないで、dotnet コマンドとエディタだけでつくる覚え書き。
前回は、ユーザーコントロールを同じプロジェクト内で作成した。 これを今回は、別プロジェクトとして作成し、それをメインのプロジェクトから参照する形にした。
WPFアプリケーションを Visual Studio を使わないで、dotnet コマンドとエディタだけでつくる覚え書き。
前回は、MainWindow に直接 TextBlock を配置して Hello, World! していたが、 今回は、ユーザーコントロールを経由して Hello, World! する。
コンソールアプリケーションを Visual Studio を使わないで、dotnet コマンドとエディタだけでつくる覚え書き。
» Read MoreWindows11 の WSL (Ubuntu) で asciidoc コンテンツを HTML, PDF に変換する環境をつくる備忘録。
» Read MoreARMのCPUのChromebook や M1 Macbook でも Wnn 使いたい。 wnn8 はうごきそうにないので、FreeWnnが使えるか試した。 ただし、今回テストしたのは Intel CPU の Chromebook なので、その点はあしからず。 ARM の Chromebook の Linux 環境でもこの方法が使えるかはわかりません。 (debian buster の freewnn-jserver https://packages.debian.org/ja/buster/freewnn-jserver のページに arm 用パッケージ存在しているからたぶん大丈夫とは思う。)
» Read More画像を分類が PyTorch + fastai で簡単にできることがわかったのでその覚え書きです。
PyTorch + fastai だけでなく、 Lobe( https://www.lobe.ai/ ) や Google Vision AI にしてもそうですが、 無料で画像分類を試すことができます。 もう、この程度のことでは、誰も驚かない時代になった。
» Read MoreLobe( https://www.lobe.ai/ )の紹介記事を読んでいて、 ここまで画像分類が簡単になっているんだと驚く。 再び画像分類を自分でも試したくなり、取り急ぎ GPUで機械学習できる環境を構築した。 その備忘録です。
» Read MoreAMD A10 7800 CPU と GA-F2A88XN-WIFI マザーボードを実験用に使ってきたが、Windows 11 対象外になってしまった。 今手元にあるリソース(ケースとか電源とかメモリ)を活用しつつ、もっとも安直に Windows 11 をインストールして使えるものとして BIOSTARのオンボードで Intel J4105 が搭載されている マザーボード J4105NHU を導入しました。
» Read More