Home About
MacBook Air M1 に bash と emacs のセットアップ備忘録

そろそろ シリコンマックに移行しないと……と思い立ち先月 MacBook Air M1 を購入した。 それが今年のWWDCの前だったので、それまで待って発表内容を見てから購入すべきか悩んだ。 しかし、刷新された MacBook Air 2022 が出る、という噂があったので、 既存の MacBook Air が廃盤になって購入できなくなると困るという考えがあった。 12inch MacBook のときがそうだったように、入手しようか悩んでいるうちに廃盤になって購入できなくなるのは避けたい。 それに、仮にその新しい MacBook Air 2022 が素晴らしいものだとしても、 ここ最近の円安により相当値段が高くなることが予想されたので、 十分実用的だと感じている MacBook Air M1 が10万円ちょっとで買えるならば、 どのみち、新しい MacBook Air 2022 を買うことはないだろう。 それならもう開催前にオーダーしてしまおう。 最悪のケースでも 2週間以内なら返品できるわけだから、などと悩みつつ購入。

» Read More
電子書籍「Markdown to InDesign 開発入門」をリリース

先日、電子書籍「ExtendScript と Node.js による Markdown to InDesign 開発入門」をリリースしました。 Amazon の Kindle Unlimited の会員の方は無料で読めます。ExtendScript に関心がある方は是非ご覧ください。

ExtendScript と Node.js による Markdown to InDesign 開発入門

これは、 以前リリースした「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 More
ポケモン名からタイプを引く, pandas と openpyxl を使ってエクセルデータを読み取る

ポケモンタイプ一覧表

こんなエクセルデータの表 pokemon-type-table.xlsx があったとして、それを読み取る。 そして ポケモン名からポケモンタイプを引けるようにする。

» Read More
Emacs でカーソル行にあるURLを取得してブラウザで開く

macOSまたは Chromebook のLinux において、Emacs で編集しているときに現在のカーソル行にある URL をブラウザで開く方法を調べた。

» Read More
サラサ ナノ その後

サラサナノにのりかえた 的な話から3ヶ月経過、 相変わらずサラサナノばかり使っています。

sarasa-nano

前回のエントリーでは サラサナノ + 0.3mm のリフィルは使い辛いと書いていたのでしたが、すみません、違いました。 それは、使うノートの方の問題で、ノートの種類によっては 0.3mm のリフィルはとても機能します。

» Read More
再び JavaScript編) 微妙に揺れのある2つの文字列リストに対する差(difference)の計算

この問題を解くHaskell による実装を書いたのだが、 結局のところ、対象となる文字列(画像ファイル名)の等価性をカスタマイズするために、 文字列を丸めてそれを使って等価性の比較を行っているだけ。 Haskell では、 Eq 型クラスを自前で用意した Item 型に実装する形で、 言語にもともと備えられている仕組みを 使っているのでコードとしてはわかりやすいのは確かだけれど。

そこでこの問題を Haskell 発想により近い形で JavaScript で実装しなおしてみる。

» Read More
微妙に揺れのある2つの文字列リストの差(difference)の計算 Haskell 編

前回のエントリー微妙に揺れのある2つの文字列リストに対する積集合(Intersection)と差集合(difference)の計算 の Haskell 編です。

積集合と差集合とか書いて・・・途中で気づいたのですが、2つの集合の差だけを求めれば済む話だった。 Haskell 編では差だけを求めます。

» Read More
微妙に揺れのある2つの文字列リストに対する積集合(Intersection)と差集合(difference)の計算

微妙に揺れのある次のような 二つの文字列リスト(画像ファイル名)があるとする。

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 More
Node.js での エクセルデータ読み込み データの入っている範囲を計算する

Node.js の xlsx モジュールを使って、データの入っている範囲を計算します。 その他、特定の行のデータを取得したり、列データを取得する方法について覚え書き。

potate

このエクセルデータのダウンロード: potate.xlsx

» Read More
pandoc を使って markdown を ICML にする場合の画像の大きさ指定

今 ExtendScript を使って markdown テキストを InDeisgn 文書に変換する方法を考えている。 その際に画像の大きさの扱い方で悩んでいたのだが、 pandoc で ICML を経由して markdown を InDesign にする場合は、 markdown で次のようにそれを指定できるらしい。

» Read More
Multipass に FreeWnn をインストール、ホスト側で emacs + tamago-tsunagi を使う

Windows の WSL みたいに MacOS でも軽快に(VirtualBoxやParallelsほどおおげさでなく)Ubuntuを使いたい。 と思っていたら Multipass を使えばよいだけだった。

» Read More
Ctrl + N で新規ウインドウが開く問題、その後

以前のエントリー ブラウザテキストエリアで Emacs キーバインド を使いたい で、普通にブラウザで Ctrl + N が使える方法を探していたのだが、 ここしばらくは、 Windows11 で Vivaldi というブラウザを使うことで 回避してきた。

» Read More
markdown テキストをパースしてあれこれしたい (commonmark.js 編)

先日 markdown-to-ast を使って markdown をパースするというエントリーを書いたのですが、 markdown-to-astcommonmark をラップしたライブラリだとの情報を得た。

それならば、markdown-to-ast を使うのではなく、直接 commonmark を使ってみることにする。

» Read More
InDesign ExtendScript で段落および文字スタイルをつくって適用する Hello, World!

文字スタイルをスクリプトでつくって適用する方法を調べた。

Hello, World!

それを使って Hello, World! を生成して、段落スタイルと文字スタイルを適用するスクリプトを書いたので 備忘録を残します。

» Read More
markdown テキストをパースしてあれこれしたい (markdown-to-ast 編)

markdown で記述されたテキストをパースしてあれこれしたい場合。 markdown-to-ast が便利そうなので、使ってみた。 これはすごい便利。

2022-04-04 更新: commonmark 編を書きました。

» Read More
Haskell / 再帰関数を foldl または foldr に直す

コーヒーメニューの価格改訂リストの作成で書いた再帰関数をリファクタリングします。

» Read More
Haskell / コーヒーメニューの価格改訂リストの作成 エクセルデータからの読み書き対応(書き出し編)

コーヒーメニューの価格改訂リストの作成の後編です。 読み取った新旧のコーヒーメニューリストをコーヒー名をキーにマージして旧価格/新価格を一覧にします。 また、エラーが含まれていたらログも書き出します。

» Read More
Haskell / コーヒーメニューの価格改訂リストの作成 エクセルデータからの読み書き対応(読み取り編)

新旧二つのコーヒーメニューアイテムリストデータを元に価格改訂データを作成する。 今度は入力データをエクセルデータにして、結果をエクセルデータとして書き出します。

Old and New Items

» Read More
Haskell / コーヒーメニューの価格改訂リストの作成 改善版

Writer モナドを使ったコーヒーメニューの価格改訂リストの作成 の改善版をつくります。 新旧のアイテムリストから、同じコーヒー名を持つアイテムを組み合わせたタプルをつくる方法を改善します。 →2つのリストの要素を組み合わせたい(リストモナド)

» Read More
Haskell / 2つのリストの要素を組み合わせたい(リストモナド)

新旧2つのコーヒーメニューアイテムリストがあり、 そこから同じコーヒー名をもつ新旧アイテムの組み合わせをつくりたい、という問題を考える。

ひとつの方法(方法A)は、ユニークなコーヒー名リストを作成し、 それを使って、新旧2つのリストからそのコーヒー名を持つアイテムを取り出し、新旧アイテムをタプルにする。

もうひとつの方法(方法B)は、新旧2つのコーヒーメニューアイテムリストの各要素ごとの 全ての組み合わせを生成しておき、 その中かから、新旧のアイテムでコーヒー名が一致している組み合わせだけを残す。

方法Aは発想としては分かりやすいけれども、もしひとつのリスト内に同じコーヒー名を持つアイテムが含まれていると困る。 その場合を考慮してコードをかけばよいのだろうけれど、ややこしい気がする。

» Read More
Haskell / Writer モナドを使ったコーヒーメニューの価格改訂リストの作成

Writer モナドの使用例として その1 / その2 / その3 とエントリーを書いたのだが、気に入らない。 結局 Writer モナドを使う必要のないコードになってしまった。

今回はその1〜3のコードをリファクタリングして、Writer モナドを使うべき理由のあるコードに直します。

» Read More
Haskell / 二つの Maybe Int の数値を比較したい

たとえば、コーヒーメニューアイテムの名前とその価格があったときに、値段が高い方を取り出したい、とする。 ただし、価格が不明なアイテムもあるので、価格の型は Mayb Int になっている。 それらを上手に取り扱いたい場合を考える。

» Read More
Haskell / Maybe a から a を取り出す maybe 関数

たとえば Maybe String から String だけを取り出したい場合。 maybe 関数を使えばよい。

» Read More
Haskell / Writer モナドを使ったより実践的なコード(その3)

前回はエラーのある入力データを用意して、それを処理できるようにしました。 今回は、ようやく本題の Writer モナドを使ってエラーの内容を付加する機能をコードします。

» Read More
Haskell / Writer モナドを使ったより実践的なコード(その2)

前回は入力データにエラーがない場合を想定したコードでした。 今回はデータにエラーが含まれていた場合について考えます。 エラーが含まれていても作動するようにするだけでなく、どんなエラーなのかの説明(ログ)を同時に追加します。

» Read More
Haskell / Writer モナドを使ったより実践的なコード(その1)

Writer についてこのエントリーで軽く使い方を調べました。 今回はコーヒーの価格改訂を題材にして Writer モナドを使ってみます。

ここでは次のようなケースについて考えてみます。

以下の3つのコーヒーメニューアイテムがあるとします。

これらが事情により値上げとなり、以下のようになったとします。

そこで改訂前と後の価格がアイテムごとに把握できるデータを作成します。

方針として、まずはデータにエラーが含まれていないケースについて考えます(その1)。 その後データにエラー(不備等)があった場合に対処できるコードを Writer モナドを使って書くことにします(その2)。

» Read More
Haskell xlsx を使ってエクセルデータの読み書き パート3

今回は xlsx モジュールを使って、エクセルデータを書き出します。 前回 までにエクセルデータの読み取りと Computer 型への変換まで行ったので、 今回はその結果をエクセルデータとして書き出します。

» Read More
Haskell xlsx を使ってエクセルデータの読み書き パート2

前回 に続いてのパート2 です。

前回作成したエクセルデータを読み込むコードをモジュールにした上で、ボディ行を Computer 型に変換するところまで実装します。

» Read More
Haskell xlsx を使ってエクセルデータの読み書き パート1

xlsx モジュールを使って、エクセルデータの読み書きを試します。

処理内容は、エクセルデータからコンピュータリストを読み取り、所定の条件にマッチした情報のみをエクセルデータとして書き出すことにする。

Computers

» Read More
URLに含まれるパラメータを取得する micronaut

フォームデータがPOSTされたときのサーバ側でのフォームデータ取得方法 はわかったのだが、GETのときのURLの後ろに追加されるパラメータはどう取得すればいいのか?

» Read More
HTMLフォームからデータを micronaut にPOSTする

フォームデータがPOSTされたときのサーバ側でのフォームデータ取得の記述方法。

» Read More
Haskell / ポケモンのモデル化とその進化 Monad による連続変換処理(その2)

前回 ポケモンのモデル化とその進化を Maybe モナドと bind を使って記述しました。 変換処理を連続で適用するという意味では、前回の段階では、コードが読みやすくなった程度で モナドを使う利点がさほどない状態でした。 今回は、ポケモン進化モデルのルールを追加し、モナドを使ううれしさを探ってみます。

» Read More
Haskell / ポケモンのモデル化とその進化 Monad による連続変換処理(その1)

Haskell で練習のため キャタピー進化系のモデル化をやってみます。 Maybe Monad を使ってトレーニングとバトルでゲットしたキャタピーを進化させよう。

» Read More
文字化け問題→解決) 電子書籍「Node.js による InDesign ExtendScript モダン開発入門」

Twitter にて この電子書籍のアマゾン Kindle 無料サンプルは文字化けした状態であるとのご指摘がありました。 せっかく無料お試しいただいた方、誠に恐縮です。 現在、原因調査および対処中です。 → 解決しました。2022年 3月 4日 18時現在

» Read More
Haskell / 型クラスを定義して 関数名のバッティングを回避する

data とそのフィールド値の取得 でポケモン型を使いました。

そのとき疑問に思ったのが、 たとえば Pokemon をレコード構文で定義した場合に ポケモン型からその名前を取得するのに name aPokemon のようにすれば ポケモン名が取得できることがわかったのですが、name のような、よくありがちな関数名を使えるようにしたら、困るのでは?ということです。

つまり、次にたとえば 進化石 EvolutionStone 型を定義したとして、 そこにも name があったらバッティングして機能しなくなるよね? ということです。実際にやってみましょう。

» Read More
Haskell / filterM を Maybe Bool だけに制限した filterMaybe 関数をつくる

前回 pure と Just の違い を調べていて、filterM の Maybe 限定版、というのを考えたのでそれを実際に試した。

Monad においては pure より return を使った方が普通なのかもしれません。わかりません。 Javaなどに慣れていると return は Java の return のイメージになり混乱するので、pure を使うで統一しています(今のところ)。 pure と return どっちなの?という件については https://wiki.haskell.org/Monad を見てください。

» Read More
Haskell / コンピュータリストを連続してフィルタする(リファクタリング)

前回 コンピュータリストを bind ( >>= ) を使って連続して条件を適用しました。

しかし、コードをよく見てみると、 Just の部分を pure に変更しても作動するし、その逆に pure の部分を Just に変えても作動する。 今回はその謎を調べます。

» Read More
Haskell / コンピュータリストに連続してフィルタする bind 使用編

前回 のコンピュータリストを使って、フィルタとモナドを試します。

» Read More
Haskell / コンピュータリストを操作する Haskell と Kotlin 比較

Haskell に慣れるため、Koltin と比較しながら、身近な題材を使ってあれこれやってみます。

Spread Sheet Computer List

» Read More
Haskell / data とそのフィールド値の取得

前回 ポケモン型を使いましたが、そのフィールドを取得する方法を整理します。

» Read More
Haskell / data データ型を調べる

Haskell では data Product = Product String Int のようにしてデータ型を定義できる。 これがただの関数だという。 どういうことかわかった(気がする)ので、書き留めておく。

» Read More
Haskell の Map.fromList, Map.lookup の使い方

Haskell での Map 操作の覚え書き。 身近なポケモンを使ったコードをつくります。

» Read More
サラサ ナノ

2021年11月にサラサシリーズの新しいペン サラサナノ が発売されました。

sarasa-nano

そんなことは全く知らなかったのですが、 色数を増やそうと思いたち、年末に文具店に サラサグランドを買い増しに出かけた。 しかし、サラサグランドが置いていない。 その代わりこのサラサナノがあって、まあこれでいいか(サラサグランドより)安いし、と思ってとりあえず間に合わせで買ったのですが、これが大当たりです。 今では、このサラサナノに MUJI のサラサ互換リフィルを入れて毎日使っています。 もう、ほぼペンはサラサナノしか使っていない。

» Read More
電子書籍「Node.js による InDesign ExtendScript モダン開発入門」をリリース

昨年末に電子書籍「Node.js による InDesign ExtendScript モダン開発入門」をリリースしました。 Amazon の Kindle Unlimited の会員の方は無料で読めます。ExtendScript に関心がある方は是非ご覧ください。

Node.js による InDesign ExtendScript モダン開発入門

内容は、Node.js を活用して ExtendScript 開発すると便利ですよ、という内容。 ExtendScript をある程度書いている人がもつ不満「今どきの JavaScript 記述方法を使って ExtendScript を書ければいいのに・・・」に応えるものです。

書籍中のソースコードはこちらの Github レポジトリにあります。

» Read More
Haskell / Maybe と Writer モナドと bind

今回は Writer モナドと bind について使い方を調べます。

Writer モナドは複雑なので、Writerで実現したい計算に近いコードを Maybe モナドで書き、その後それを Writer モナドに書き換えます。

» Read More
Kotlin Script で POI を使って華麗なエクセルデータをつくる / セルのスタイルを指定

Kotlin Script で POI を使ってエクセルデータをつくる。 セルスタイルを設定してやることで、エクセルデータの表現力を増すことができる。 エクセルを人間が扱うものとして考えると、この辺は重要かつ便利な機能ではある。

出来上がりは、こんな感じ:

ポケモンリスト

kotlin script の詳細はこちらのエントリー をご覧ください。

» Read More
Micronaut で MongoDB を使う

MicronautMongoDBGORM を使う方法。 ガイドは ここ にある。 Micronaut の version 2.5.7 では、問題なく作動したが、 version 3.3.0 では version 2.5.7 と同じようにアプリケーションを作成しても No GORM implementations configured などのエラーが出てうまく作動しなかった。

» Read More
プレーンテキスト を POST して プレーンテキスト をオウム返しする ウェブサービス

テスト用に json を POST して json を返す ウェブサービスをつくる において、 クライアントで curl を使ってPOSTするときの指定で Content-Type に application/json を使っていた。 もし単なる plain text ポストしたい場合、plain/text を指定したらどうなるのかと試したらエラーになった。

そこで今回は plain/text を POST して plain/text の結果を得る コントローラを micronaut で書いてみることにした。 言語は groovy に代えて kotlin を使います。

» Read More
C# .NET で Task を使って非同期に処理を実行(その2)

なんとなく Task の使い方がわかったので、 今回は Javaの newSingleThreadScheduledExecotor() の ExectorService と似た作動をするコードを C# で実装してみます。 実行するタスク(アクション)は Fire-and-forget 形式。

» Read More
C# .NET で Task を使って非同期に処理を実行(その1)

最終的には Javaの SingleThread の ExectorService を C# で実現したい。 今回はとりあえず Task を使った非同期の記述方法を軽く調べてみる。

» Read More
C# .NET で ndjson をパース System.Text.Json 編

前回のエントリーで Newtonsoft.Jsonを使って json のデシリアライズ処理をしたのだが、標準の System.Text.Json で普通にできたのでその方法を記録しておく。

» Read More
C# .NET で ndjson をパース Newtonsoft.Json 編

Newtonsoft.Json を使って ndjson をパースします。

System.Text.Json を使って ndjson をパースはこちら

» Read More
Surface GO Type Cover の導入

Android 向けに開発している手書きアプリを Surface GO/Pro に移植しようと思いたち購入した Surface GO 3。 当初は Windowsタブレットとしてキーボードなしに使えるアプリにするつもりだった。 だから、Type Cover は購入しないで、既存の Bluetooth キーボードで間に合わせてきた。

Surface GO Type Cover

» Read More
Vivaldiにより ブラウザのテキストエリアで Emacs キーバインド を使いたい問題が解決した

以前のエントリー ブラウザのテキストエリアで Emacs キーバインド を使いたいで、Ctrl + N がブラウザで新規ウインドウを開くに固定されていて困る、という話を書いたのだが、Vivaldi ブラウザを使えば問題がないことが判明。

Vivaldi は設定で、Ctrl + N を無効にすることもできるし、 そもそもそのショートカット無効設定をしなくても、Ace をテキストエリアに使用すれば、 Ctrl + N正しく カーソルを次の行に移動してくれる。

ありがとう Vivaldi! このブラウザのおかげで、ついに Ctrl + N の苦しみから解放された。

» Read More
dotnet コマンドでつくる WPF Application Hello, World! その3 別プロジェクトの参照

WPFアプリケーションを Visual Studio を使わないで、dotnet コマンドとエディタだけでつくる覚え書き。

前回は、ユーザーコントロールを同じプロジェクト内で作成した。 これを今回は、別プロジェクトとして作成し、それをメインのプロジェクトから参照する形にした。

WPF-1

» Read More
dotnet コマンドでつくる WPF Application HelloWorld! その2

WPFアプリケーションを Visual Studio を使わないで、dotnet コマンドとエディタだけでつくる覚え書き。

前回は、MainWindow に直接 TextBlock を配置して Hello, World! していたが、 今回は、ユーザーコントロールを経由して Hello, World! する。

WPF-1

» Read More
dotnet コマンドでつくる WPF Application HelloWorld! その1

WPFアプリケーションを Visual Studio を使わないで、dotnet コマンドとエディタだけでつくる覚え書き。

WPF-1

» Read More
dotnet コマンドでつくる コンソールアプリケーション, JSON Reader

コンソールアプリケーションを Visual Studio を使わないで、dotnet コマンドとエディタだけでつくる覚え書き。

» Read More
Windows11 + WSL で AsciiDoc をビルドする環境をつくる

Windows11 の WSL (Ubuntu) で asciidoc コンテンツを HTML, PDF に変換する環境をつくる備忘録。

» Read More
FreeWnn + tamago-tsunagi で Chromebook の Linux 環境で日本語入力する

ARMの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 で簡単にできることがわかったのでその覚え書きです。

PyTorch + fastai だけでなく、 Lobe( https://www.lobe.ai/ ) や Google Vision AI にしてもそうですが、 無料で画像分類を試すことができます。 もう、この程度のことでは、誰も驚かない時代になった。

» Read More
Ubuntu 20.04 server + GTX 1060 で PyTorch + fastai 用機械学習環境の構築覚え書き

Lobe( https://www.lobe.ai/ )の紹介記事を読んでいて、 ここまで画像分類が簡単になっているんだと驚く。 再び画像分類を自分でも試したくなり、取り急ぎ GPUで機械学習できる環境を構築した。 その備忘録です。

» Read More
実験用 Windows 11 環境のために BIOSTAR J4105NHU を導入

AMD A10 7800 CPU と GA-F2A88XN-WIFI マザーボードを実験用に使ってきたが、Windows 11 対象外になってしまった。 今手元にあるリソース(ケースとか電源とかメモリ)を活用しつつ、もっとも安直に Windows 11 をインストールして使えるものとして BIOSTARのオンボードで Intel J4105 が搭載されている マザーボード J4105NHU を導入しました。

» Read More