Home About
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
opencv4nodejs インストール備忘録 / Ubuntu で使用 OpenCV をソースからインストール

本当は macOS で opencv4nodejs を 使いたいのだが、うまくいかない。 そこで、 Ubuntu 20.04 上で OpenCV 4.5.3 をソースからインストールした状態から opencv4nodejs をインストールして使うことができたので、その作業記録です。

» Read More
Windows + WSL と Chromebook のターミナル日本語入力設定覚え書き

Windows + WSL とか Chromebook + Linux(crostini) での Linux 側において、 日本語入力の設定とか、切り替えキーのホストOSとのバッティング回避とかが面倒なので、 もうそっち、つまり OSにパラサイトしている Linux 側は基本英語のみで使い、 日本語が入力したいときは emacs + wnn を使うことで運用してきた。

しかし、ある程度の分量を、複数の日本語テキストファイルで扱う場合、これでは困ることが増えてきた。 やはり、ターミナルで普通に日本語が使いたい。 とりあえずは、その手の場合は mac を使うことで済ませてきたが、 そのためだけに mac を使うのも面倒。

それで調べてみると、案外簡単に日本語がターミナルで扱えることが判明。

» Read More
pandas, Excel + VBA からの脱出

pandas が Excel + VBA の代わりとして使える可能性があるらしい。 Jupyter Notebook と併用すれば、インタラクティブに処理結果を確認しつつデータ操作できるので、確かにこれは便利。

MacList

こんなエクセルデータがあったとして、これを pandas で操作していく覚え書き。

» Read More
macOS の open コマンド相当のコマンドを WSL でも使えるようにする

Windows 11 の WSL での話です。 macOS の open コマンド相当の機能が使いたいのであれこれ調べた結果を備忘録として書き残します。

» Read More
Surface GO 3 セットアップ顛末

まだ、S モードを解除して、更新プログラムをインストール、WSL をインストールしたところです。 Surface GO 3 の第一印象を書き留めておきます。

» Read More
Windows 11 WSLg キーボードレイアウトを US に設定する

Windows 11 の WSL では、Linux アプリも GUI に対応したので、さっそく Firefox を使ってみた。 sudo apt install firefox して firefox で起動。 普通に使えます。 ただ、このマシンは キーボードレイアウトが US なのに、日本語キーボードとして扱われる。 もちろん、Windows 11 上では普通に US レイアウトのキーボードとして設定されている。

» Read More
WSL2 で Wnn8 を使う

以前に NUC に FreeBSD 12.2 をインストールして それを Wnn8 サーバにした というエントリーを書いた。今回これを Windows 10 WSL2 に移行したので、その備忘録です。 Wnn8 は WSL2(Ubuntu 20.04 LTS) 上で動きます。 インストールしただけでは、jserver, dpkeyserv が自動起動しないので、そこを手当てする必要がありました。 クライアントは emacs で使う tamago-tsunagi です。 X11用のクライアントは使っていません。

» Read More
Alacritty を Windows 10 でも使用

Ubuntu で使っている Alacritty を Windows 10 でも使いたいと思い調べた。普通に対応していた。 WSLのシェルとして使うことも当然できる。

» Read More
GA-F2A88XN-WIFI に Windows 10 をインストール / お使いのPCに必要なメディアドライバーがありません

諸事情により 今度は Windows 10 を GA-F2A88XN-WIFI にインストールすることになった。 Ubuntu では、Bluetooth の作動が不安定 というエントリーを書いたが、 Windows 10 では、OSインストール直後は Bluetooth の認識すらされなかった。 ただし、Intelのサイトから Intel Dual Band Wireless-AC 7260 + Bluetooth 7260HMW のドライバをダウンロードしてインストールしたらすべて問題なく作動した。

それより、今回は「お使いのPCに必要なメディアドライバーがありません」問題で Windows 10 のインストールに半日以上費やすことになったので、その備忘録です。

» Read More
スターバックスコーヒーのコースターの正規品がほしい

starbucks-coffee-coasters

左が最近メルカリで購入したもの。 右が 20年ほど前に自分で購入した本物。 入手してから気づいたのだが、これはどうもレプリカ・・・というか偽物な気がします。 本物か偽物か確認しようがないのですが。

落札時には偽物の可能性を考えたことがなく安易に落札、ちょっと残念に思っています。 使い勝手は問題ないのですが。

» Read More
Kotlin Script が便利 Javaのライブラリも使える

Kotlin が気軽に使える Kotlin Script 便利です。 インストール方法や使い方の詳細はこちら Kotlin Scripting Examples: kotlin-main-kts usages をご覧ください。

kotlin 関連のインストールがされている前提ですが、以下のように kotlin script を実行できます。

» Read More
Node.js + Underscore でcountif を使って2つのリストから重複した要素のみのリストを作り出す

二つのリストから countif をつかって 両方のリストに重複して含まれている要素のみを取り出したリストをつくる.

これを Node.js + Underscore で実装した。(覚え書き)

» Read More
Excel の countif 関数的なものをGolangで実装した

二つのリストがあり、 (1)両方のリストに含まれているもの、 (2)はじめのリストにだけ含まれているもの、 (3)あとのリストにだけ含まれているもの、それぞれを計算する必要が発生。 エクセルでそれを行うには countif を使う。

こんな風に:

Excel

これを Golang で実装した。(覚え書き)

» Read More
関数型オブジェクト指向プロラミングを Golang に翻訳する

関数型オブジェクト指向プロラミングを JavaScript に翻訳する というエントリーを2年前に書いた。 Haskell のオブジェクト指向的なコードを JavaScript に書き直したエントリーだが、今読み返してもいまいちピンとこない。 ならば Golang で書き直してみよう。 Golang であれば、JavaScript と違って型を明示的にコード中にかけるので、わかりやすくなるのではないか?

» Read More
Golang や Kotlin で関数の型を定義する

Go言語では first class functions とやらで、関数はファーストクラスオブジェクトであり値のように使うことができる。 そして、この関数の型(どんな型を引数にとってどんな型を返す、という情報)に名前をつけることができる。

» Read More
ラムダ(式)を javascript と kotlin script と golang で使う

パーサーコンビネータについて調べていて、 そもそもその元になる概念としてコンビネータがあることを知る(いまさら?!)。 つまり、パーサーコンビネータはいろいろあるコンビネータの中の一つ。 そして、いろいろあるコンビネータの中でもっとも有名なのが Y コンビネータとか Z コンビネータらしい。 そして、コンビネータを構成するパーツの一つがラムダ(式)とか無名関数であると。

名前付き関数はいつも使っていて、そして名前無し関数(無名関数)も結構使う。 では、ラムダ(式) と無名関数ってイコールじゃないの? と思って調べるもよくわからない。

Wikipedia によると: 「プログラミング言語における無名関数(英語: anonymous functionあるいはnameless function)とは,名前付けされずに定義された関数のことである.無名関数を表現するための方法には様々なものがあるが,近年主流となっているのはラムダ式による記法である.」 ということで、ラムダ式(という概念)をプログラム言語で表現するときに使うのが無名関数(または匿名関数)と考えて問題なさそう。

パーサーコンビネータや Yコンビネータを理解するための最初の一歩としてラムダ式を把握する。

» Read More
ExtendScript から https にアクセスする

ExtendScript には Socket があるので、http のように SSL でない ウェブリソースにアクセスすることができる。 しかし、SSL 化された https のウェブリソースにはアクセスする方法がない・・・と思っていたのだが、 なんと macOS では curl を経由すれば簡単にできることが判明した。

Windowsの場合も VBScript を経由することで実現できるようです。 詳しくは restix をご覧ください。

wttr.in with vscode

» Read More
ExtendScript で Underscore.js を使う(その2) webpack 編

ExtendScript で Underscore.js を使う(その1) rollup 編 で rollup + babel + Underscore.js を試したのだが、 rollup を webpack に差し替えての Underscore.js を試したのでその備忘録。

» Read More
ExtendScript で Underscore.js を使う(その1) rollup 編

Node.js で ExtendScript する話(パート3) ES6 Javascript 記述を使いたい で node.js を使ってモジュールを解決しつつ、アロー関数や const let などのES6 Javascript 記述を使って書けるようになった。 そこで、次に Underscore.js を利用した ExtendScript をコーディングすることを考えます。

実のところ単に Underscore.js を使うだけならば、ExtendScript 標準の @include ディレクティブを使うことで普通に利用できます。 しかしこの方法では、 (1)Underscore.js のファイルを常に本体のファイルとともに配布する必要があり面倒、 (2)Underscore.js を使う側のアプリケーションコードで、ES3レベルの Javascript しか記述できない、 という2つの問題があります。 Node.js + rollup + babel を使う方式でこの問題を解決しましょう。

» Read More
Node.js で ExtendScript する話(パート4) webpack アゲイン

Node.js で モジュールを使って ExtendScript するために

その後、さらに調べてみると、 パート1で不都合があった webpack で、オプションを適切に指定することで、 ExtendScript用のコードにバンドルできることがわかりました。

Node.js ではさまざまなツールの組み合わせが存在していて、自分の目的にあうツールがどれなのか・・・という。 アプリケーションコードを書く前段階での試行錯誤が半端ないですね。

» Read More
Node.js で ExtendScript する話(パート3) ES6 の Javascript 記述を使いたい

実のところ、 パート1パート2は、この ES6 の Javascript 記述で ExtendScript 用のコードを書くための前準備であった。

ここまでで、モジュールを使ってコードを書けるようになり、rollup により、それらのコードを一つのファイルにまとめるところまでできた。 あとは、このコードをいわゆるトランスパイラと呼ばれるコード変換ツールにより、ExtendScript として機能する Javascript に変換します。 このトランスパイラは定番の babel を使います。

» Read More