Writer モナドの使用例として その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本当は macOS で opencv4nodejs を 使いたいのだが、うまくいかない。 そこで、 Ubuntu 20.04 上で OpenCV 4.5.3 をソースからインストールした状態から opencv4nodejs をインストールして使うことができたので、その作業記録です。
» Read MoreWindows + WSL とか Chromebook + Linux(crostini) での Linux 側において、 日本語入力の設定とか、切り替えキーのホストOSとのバッティング回避とかが面倒なので、 もうそっち、つまり OSにパラサイトしている Linux 側は基本英語のみで使い、 日本語が入力したいときは emacs + wnn を使うことで運用してきた。
しかし、ある程度の分量を、複数の日本語テキストファイルで扱う場合、これでは困ることが増えてきた。 やはり、ターミナルで普通に日本語が使いたい。 とりあえずは、その手の場合は mac を使うことで済ませてきたが、 そのためだけに mac を使うのも面倒。
それで調べてみると、案外簡単に日本語がターミナルで扱えることが判明。
» Read Morepandas が Excel + VBA の代わりとして使える可能性があるらしい。 Jupyter Notebook と併用すれば、インタラクティブに処理結果を確認しつつデータ操作できるので、確かにこれは便利。
こんなエクセルデータがあったとして、これを pandas で操作していく覚え書き。
» Read MoreWindows 11 の WSL での話です。 macOS の open コマンド相当の機能が使いたいのであれこれ調べた結果を備忘録として書き残します。
» Read Moreまだ、S モードを解除して、更新プログラムをインストール、WSL をインストールしたところです。 Surface GO 3 の第一印象を書き留めておきます。
» Read MoreWindows 11 の WSL では、Linux アプリも GUI に対応したので、さっそく Firefox を使ってみた。 sudo apt install firefox して firefox で起動。 普通に使えます。 ただ、このマシンは キーボードレイアウトが US なのに、日本語キーボードとして扱われる。 もちろん、Windows 11 上では普通に US レイアウトのキーボードとして設定されている。
» Read More以前に NUC に FreeBSD 12.2 をインストールして それを Wnn8 サーバにした というエントリーを書いた。今回これを Windows 10 WSL2 に移行したので、その備忘録です。 Wnn8 は WSL2(Ubuntu 20.04 LTS) 上で動きます。 インストールしただけでは、jserver, dpkeyserv が自動起動しないので、そこを手当てする必要がありました。 クライアントは emacs で使う tamago-tsunagi です。 X11用のクライアントは使っていません。
» Read MoreUbuntu で使っている Alacritty を Windows 10 でも使いたいと思い調べた。普通に対応していた。 WSLのシェルとして使うことも当然できる。
» Read More諸事情により 今度は 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左が最近メルカリで購入したもの。 右が 20年ほど前に自分で購入した本物。 入手してから気づいたのだが、これはどうもレプリカ・・・というか偽物な気がします。 本物か偽物か確認しようがないのですが。
落札時には偽物の可能性を考えたことがなく安易に落札、ちょっと残念に思っています。 使い勝手は問題ないのですが。
» Read MoreKotlin が気軽に使える Kotlin Script 便利です。 インストール方法や使い方の詳細はこちら Kotlin Scripting Examples: kotlin-main-kts usages をご覧ください。
kotlin 関連のインストールがされている前提ですが、以下のように kotlin script を実行できます。
» Read More二つのリストから countif をつかって 両方のリストに重複して含まれている要素のみを取り出したリストをつくる.
これを Node.js + Underscore で実装した。(覚え書き)
» Read More二つのリストがあり、 (1)両方のリストに含まれているもの、 (2)はじめのリストにだけ含まれているもの、 (3)あとのリストにだけ含まれているもの、それぞれを計算する必要が発生。 エクセルでそれを行うには countif を使う。
こんな風に:
これを Golang で実装した。(覚え書き)
» Read More関数型オブジェクト指向プロラミングを JavaScript に翻訳する というエントリーを2年前に書いた。 Haskell のオブジェクト指向的なコードを JavaScript に書き直したエントリーだが、今読み返してもいまいちピンとこない。 ならば Golang で書き直してみよう。 Golang であれば、JavaScript と違って型を明示的にコード中にかけるので、わかりやすくなるのではないか?
» Read MoreGo言語では first class functions とやらで、関数はファーストクラスオブジェクトであり値のように使うことができる。 そして、この関数の型(どんな型を引数にとってどんな型を返す、という情報)に名前をつけることができる。
» Read Moreパーサーコンビネータについて調べていて、 そもそもその元になる概念としてコンビネータがあることを知る(いまさら?!)。 つまり、パーサーコンビネータはいろいろあるコンビネータの中の一つ。 そして、いろいろあるコンビネータの中でもっとも有名なのが Y コンビネータとか Z コンビネータらしい。 そして、コンビネータを構成するパーツの一つがラムダ(式)とか無名関数であると。
名前付き関数はいつも使っていて、そして名前無し関数(無名関数)も結構使う。 では、ラムダ(式) と無名関数ってイコールじゃないの? と思って調べるもよくわからない。
Wikipedia によると: 「プログラミング言語における無名関数(英語: anonymous functionあるいはnameless function)とは,名前付けされずに定義された関数のことである.無名関数を表現するための方法には様々なものがあるが,近年主流となっているのはラムダ式による記法である.」 ということで、ラムダ式(という概念)をプログラム言語で表現するときに使うのが無名関数(または匿名関数)と考えて問題なさそう。
パーサーコンビネータや Yコンビネータを理解するための最初の一歩としてラムダ式を把握する。
» Read MoreExtendScript には Socket があるので、http のように SSL でない ウェブリソースにアクセスすることができる。 しかし、SSL 化された https のウェブリソースにはアクセスする方法がない・・・と思っていたのだが、 なんと macOS では curl を経由すれば簡単にできることが判明した。
Windowsの場合も VBScript を経由することで実現できるようです。 詳しくは restix をご覧ください。
ExtendScript で Underscore.js を使う(その1) rollup 編 で rollup + babel + Underscore.js を試したのだが、 rollup を webpack に差し替えての Underscore.js を試したのでその備忘録。
» Read MoreNode.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 MoreNode.js で モジュールを使って ExtendScript するために
その後、さらに調べてみると、 パート1で不都合があった webpack で、オプションを適切に指定することで、 ExtendScript用のコードにバンドルできることがわかりました。
Node.js ではさまざまなツールの組み合わせが存在していて、自分の目的にあうツールがどれなのか・・・という。 アプリケーションコードを書く前段階での試行錯誤が半端ないですね。
» Read More