Home About
UXP InDesign, SheetJS を利用して MSエクセルデータを扱う

UXP Script ではモダンなJavaScript(ES6) に対応したので、既存のJavaScriptライブラリを利用できるようになりました。

今回は SheetJS を使って MSエクセルデータを扱う方法を試しました。

完成したスクリプトの配布時にそれを一つにまとめたいので rollup.js を使います。 この手のバンドルツールといえば webpack が定番ですが、 今回試した範囲では webpack と UXP InDesign Script の組み合わせはうまくいかなったので webpack の代わりに rollup.js を使います。

uxp-indesign-and-sheetjs

完成したスクリプトの作動デモはこちらを https://youtu.be/SnpH6Ui7nOs ご覧ください。

» Read More
UXP InDesign Hello, World!

Node.js による InDesign ExtendScript モダン開発入門」というキンドル書籍を一年前くらいに書いたのですが、 とうとう、InDesign が最新バージョン(18.0)から UXP に対応しました。 つまり、小細工しなくても普通にいわゆるモダンなJavaScript (ES6) で InDesign 用の Script を書くことができるようになった。

なお、InDesign の UXP は Plugin にはまだ対応していないそうです。 UXP Scripting と呼ばれるスクリプト実行だけ対応した段階。 そのうち Plugin に対応するようです。 https://developer.adobe.com/indesign/uxp/plugins/ に Comming Soon って書いてあります。

ExtendScript で面倒だったことの一つに https の外部リソースを取得できなかったことがあります。 UXP ではこの問題が解決されているのか関心があったので調べました。 fetch が使える、と書いてあったので、いけるか!と思って調べたところ問題なく使えたので、UXPのスクリプトとともに得たことを簡単にシェアします。

mac price list

なお、このエントリーでは InDesign 2023 (version 18.1)と UDT version 1.7.0.13 を使用しています。

» Read More
kotlinx datetime と SpringBoot , 2つの期間の重なりを判定

Kotlin/JS 経由で JavaScript から DateTime を扱う場合 java.time.* を使うことができない。 その代わり kotlinx-datetime を使えばよいとのことでこれを試す。

例として、2つの期間 a, b を比較して、その状況を返すライブラリを考えることにする。 たとえば...

本当は、2つの期間のとりうる関係の全てのケースを考慮した判定器を考えたいのだが、 話が込み入りすぎるので、ここでは2つの期間に重なりが あるか or ないか の 2つのケースだけを判定する isOverlapped 関数を実装することにする。

» Read More
Kotlin serialization で JSON を扱う その2

前回は、ごく簡単な json データを扱っただけなので、 今回は、もう少し複雑かつ実践的な json データを kotlinx serialization を使ってパースしてみます。

» Read More
Kotlin serialization で JSON を扱う

KotlinでJSONに対する処理する場合 JavaVM上で実行するコード用であれば、たとえば org.json とか Gson などいろいろなライブラリがありますが、 Kotlin/JS を使って JavaScript に変換して作動させたい場合は、それらのライブラリは(たぶん)使えません。 でも、Kotlin Serialization を使えば、Kotlin で書いたコードもJavaScriptに変換できるので、それを試します。

Kotlin Serialization についてはこの辺からたどっていくと情報が得られます。

» Read More
やり直し Haskellでポケモン組み合わせ問題を解く

Haskellでポケモン組み合わせ問題を解く というエントリーを書いたのですが、 よく見てみると結果のポケモンペアのリストに (Pikachu(electric),Squirtle(water))(Squirtle(water),Pikachu(electric)) が両方含まれていました。 これは、ポケモンの前後が入れ替わっただけでペアとして実質同じ内容なので同じペアとして扱いたい。 つまり、これらの一方のペアは結果のリストから除外したい。

» Read More
Haskellでポケモン組み合わせ問題を解く

ポケモンリストから二匹のポケモンを一組とした組み合わせをつくりたい。 ただし、同じポケモン同士やタイプが同じポケモン同士は除外する(つまり、ペアとするポケモン同士は別のタイプを持つようにする)、という問題を考える。

» Read More
セルのアドレス生成をもっと簡単に計算したい

danfo.js 空のセルが存在するエクセルファイルを読み込み失敗するなど で SheetJSからセルの値を読み取るときに、セルアドレスを生成するためのコードで、行列を二重にループしていた。 これをもっと簡単に書きたい。

» Read More
danfo.js 空のセルが存在するエクセルファイルを読み込み失敗するなど

danfo.js でエクセルデータを扱う場合に、空欄のセルがあるとうまくいかない場合があるようです。単純に読み込みに失敗してくれれば、ある意味問題ないのですが、 読み込み失敗はしないが データが意図通り読み込めていない という場合、 特にエクセルファイルが巨大だったりして、そのまま気付かず進行して後行程で事故るという恐怖。 本当に意図通り読み込みできているか、注意しましょう。

そこで、読み込みには SheetJS を使用し、データ処理自体は danfo.js を使うという方法を使います。 danfo.js のモジュールの中身を見てみると、内部では SheetJS(xlsx) を使用しているみたいなのですが...

» Read More
同じ キー を持つ複数の行を一行にまとめたい... groupBy, fold および FILTER関数(Excel)

このように、タイプとポケモン名が列挙されているデータがあるとする。 これをA列をキーにして同じタイプを持つポケモンをまとめたい(グループにしたい)という場合。 エクセルで対処するには、どうすればいいか。 および、Kotlin での計算方法。

タイプとポケモン

» Read More
React で複数選択ボタンをつくる

複数のアイテムがあり、それぞれのアイテムは非選択/選択状態を持つことができる、そういうUIを HTMLとReactを使ってつくります。

Node.js は使わないで、index.html に直接 JavaScript を書いていく方法でつくります。

step3

» Read More
今より大きな机をようやく手に入れることができた

BATTERN ikea desk

イケアの BATTERN という机。

» Read More
やりなおし Kotlin/JS Hello, World! 生成した js を HTML から使う / Node.js から使う

昨日、Kotlin/JS Hello, World! Kotlin のコードを Node.js で使う を書いたのですが、 もっと簡単に扱う方法がわかったので再挑戦します。

なお、ここでは Kotlin で書いたコードを HTMLに埋め込んだJavaScriptで使いたい、というライトユースを想定しています。 たとえば、Node.js + React で使いたいなどというヘビーな使い方は想定していません。

» Read More
Kotlin/JS Hello, World! Kotlin のコードを Node.js で使う

型を明示的に指定してコードがかけるので、最近は Kotlin を使うことが多い。 JSでも TypeScript で書けばよいのかもしれないが、もう一旦書いたコードを TypeScript で書き直すとか面倒すぎる。 そこで、Kotlin には Kotlin/JS があるので、これを使ってみた。

» Read More
danfo.js, pandas の JavaScript版

pandas の代わりに使える danfo.js というツールがあることを知る。 pandas は Pythonのツールなので、JavaScript の方が慣れている人にとって danfo.js はありがたい。

MacList

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

» Read More
Spring Boot で JSON を返すウェブのエンドポイントをつくる

最終的には クライアント側は React で実装、サーバ側は Spring Boot で実装して JSON データをやり取りしようという算段です。 まずは、Spring Boot で JSON を返すエンドポイントをつくるところまでの覚え書き。

» Read More
pandas, 特定列のみ抜き出したデータをつくる

支給されたデータのうち特定の列だけを抜き出して使いたい、という場合に pandas を使ったのでその備忘録です。

MacList

こんなエクセルデータがあったとして、これを pandas で処理する。

» Read More
React で入力したテキストをサーバーに json にして送信

React でサーバとデータ連携する方法を調査中。 取り急ぎ、前回はサーバから json を取得したので、今度はPOSTで送信してみます。 送信する内容はフォームに入れた文字列とします。 React でフォーム処理する部分はこのドキュメントを参照のこと。

» Read More
React でサーバーから json を取得してレンダリング

React でサーバとデータ連携する方法を調査中。 取り急ぎ、サーバから json を取得してそれを React でレンダリングするところまでのメモ。 ポイントは、React のFAQ に書いてあります。

» Read More
uni-ball ONE F と エナージェルインフリーの替芯 と サラサ ナノ

サラサナノにのりかえた 的な話から9ヶ月経過、 相変わらずサラサナノを使っています。 ただし、中身はエナージェルインフリーの替芯です。

一方で、実は一ヶ月ほど前に uni-ball ONE(ユニボール ワン)F を入手してテスト的に使いはじめたのです。 中身は 無印の「替芯 ゲルインキボールペン」 です。

sarasa-nano vs uni-ball ONE F

そもそもの動機はエナージェルインフリーの書き味が良き!となって、しかし、あの純正軸はほんとに嫌(個人の感想です)なので、 それ用の気に入った軸を購入しようと文具店を散策していたところ、uni-ball ONE F を見つけた次第。

» Read More
一次関数の傾きと切片を人工ニューロンを使って推測する

初めての TensorFlow.js」の8章にニューロン一個を使って一次関数を導く例が出ていた。

任意の一次関数の x,y のセットを機械学習させることで、 y = a*x +b の a(傾き)と b(切片)を機械的に見つけることができる、という話。 そこで、これ相当の機能を自前のコードで実装することを試みた。

» Read More
TensorFlow.js で画像操作

テンソルの操作になれるために、TensorFlow.js を使って画像を操作する練習。

» Read More
Word2Vec, Wikipedia の日本語コンテンツを入手してトレーニング(備忘録)

Word2Vec ... いまさら感がありますが、Wikipediaダウンロードから手順を書き残します。

使用した環境は Ubuntu 22.04 LTS です。

» Read More
ポケモン名のリストから最も出現頻度の高いポケモンをみつける(Haskell編)

ポケモン名のリストから最も出現頻度の高いポケモンをみつける というエントリーを書きましたが、その内容を Haskell へ移植しました。

あとで、備忘録として移植手順を書き残すつもりですが、今はまずは結果だけメモします。

» Read More
ポケモン名のリストから最も出現頻度の高いポケモンをみつける(Kotlin編)

決定木のプログラミングをしているときに必要になった関数。 これを備忘録としてメモしておきます。

» Read More
Node.js での XML処理 fast-xml-parser いろいろ躓きポイントの整理

XMLデータをいい感じに javascript のオブジェクトに変換してくれる・・・という fast-xml-parser

実際に使ってみた結果躓いた点を書き留めます。

以前にも同じようなことしていた。 Node.js で XML文書をパース

このときは XMLのパースに xmldom を使っていた。 完全に覚えていない。

» Read More
HashMap のアイテムから特定のアイテムを取り除く (kotlin)

HashMapを生成して、その中のエントリーの種類に応じて別々の HashMap を生成するためのコード(備忘録)。

» Read More
ベジェ曲線を使って 円を描画する Java2D

取り急ぎベジェを使った円の描画を復習したので書き残す。

circle

» Read More
現時点での Android Robolectric テスト、一番簡単なプロジェクト例

Android Studio を使わない ライブラリプロジェクトで Robolectric テストをする一番簡単なプロジェクト例 というエントリーを2年ほど前に書いたのですが、いろいろバージョンアップされて古くなってしまった。このテストプロジェクトをそこそこ最近のAndroid開発環境で動くようにしたので、その備忘録です。 作動確認はしていますが、Robolectric よくわかっていないのでその点はご了承ください。

» Read More
Kotlin, repeat と until の使い分け

たとえば、0,1,2 という index を生み出す場合、いくつかの書き方がある。

» Read More
2022年9月末、徒然なるままに WSL systemd ほか

先日、Windows11 22H2 のアップデートがきた。待っていた systemd 対応がきたので、早速更新。 せっかくなので、Windows の回復を利用して、フルリセットに近い形で Windows11 22H2 を入れた。 始める前は Windowsの再インストールは気が重かったのだが、やってみたら簡単だった。以前はもっと大変だったという印象がある。まだまだ ChromeOS ほどではないにしても。 Windows11 22H2 をセットアップしたあと、通常手順で wsl --install してインストールしたところ、インストールされた Ubuntu は systemd に対応していなかった。 ちなみにインストールされたのは Ubuntu 20.04.4 LTS。 上記 microsoft devblogs を読み直してみると、Windows Insiders Build でないと systemd 対応版の WSL はインストールされないらしい。 でもさらによく読んでみたら、github のWSL リリースページから 0.67.6 を入手して手動でインストールすればよいらしい。 果たしてやってみると、systemd対応になった。 Wnn8 をインストールしたらすんなり自動起動できるようになった。 Windowsを再起動して WSL を起動したら、自動で Wnn8 が起動している。 とりあえずは、systemd 対応でうれしいのは(自分にとっては)これだけだけど。 以前に書いたこの Wnn8インストールのエントリーの後半で、 なんやかんや Wnn8 の起動設定をしている部分がいっさい不要になった。

» Read More
リストを n個ごとに分割する kotlin 編

以前にGroovy / Golang / Node.js, リストを n 個ごとに分割したリストのリスト(サブリスト)をつくりたい というエントリーを書いたのだが、kotlin でそれをつくり出す必要が生じたので備忘録として書き残します。

ここで言うサブリストとは、リストを n 個ごとに分けたい、という場合につくるリストのリストのことです。

» Read More
Excel に配置されたチェックボックスの値をスクリプトなどから取得したい(備忘録)

まずそもそもの話、 Excel のチェックボックスのチェック状況を特定のセルにリンクして記録する機能(Cell link)があらかじめ備わっているので、それを使うべき。 そうすれば、このエントリーで書いているようなことを行なわなくても普通にPOIとか node.js の xlsx 系ライブラリで難なくその値を読むことができます。

the excel sheet with iphone14 buy or not checkboxes

» Read More
念願の Logitech MX Keys Mini for Mac を入手

英語レイアウト版 MX Keys Mini がついにリリースされたので入手しました。 7月末、ちょうど amazon.com でUS版を購入しようとしていたそのときに、 日本での発売がアナウンスされてこちらを予約しました。 もう少しで amazon.com で買うところでした。 日本のLogicool版の英語レイアウトキーボードを買っておけば、 今度は、メカニカルキーボードの方も英語レイアウト版も発売してくれるに違いない。

MX Keys Mini for Mac

» Read More
EPS, PDF のサイズを取得する Apache XML Graphics Commons / PDFBox と kotlin を使用

EPS は、 https://xmlgraphics.apache.org/commons/ を使って、 PDF は、 https://pdfbox.apache.org を使って、 それぞれ 画像のタテヨコの大きさを取得します。 使用する言語は kotlin script です。

» Read More
Java2D Hello, World! Graphics と Kotlin

久しぶりにデバッグ画像をプログラムから生成する必要が生じたので、Java2D による画像生成を復習した。

hello, world!

» Read More
Kotlin Sealed クラスを使った Maybe の実装

Kotlin の Sealed クラスを使えば、 代数データ型の直和型を表現できる、という情報を得たので、MaybePokemon クラスをつかって試してみた。

» Read More
Kotlin Native で テキストファイルを読み込む Hello, World!

しばらく諸事情により遠ざかっていた Android アプリ開発を再開しようと思っている。 そのウォーミングアップとして Kotlin でスクリプトを書いたりしているのだが、 結構いい感じ。 もちろん普通に JavaVM 上で動く Kotlin で開発しているのだが、 それとは別に Kotlin Native というものがあり たとえば Linux X64 ネイティブ実行できる実行ファイルを生成できるらしい。 かっこいい!と思って調べはじめたのだが、思いのほか難しかった。 とりあえず、テキストファイルを読みとって標準出力するところまでたどり着いたので、 その記録を残す。

» Read More
emacs のセットアップ(補足)備忘録 macOS Monterey

前のエントリー MacBook Air M1 に bash と emacs のセットアップ備忘録の補足です。

» Read More
Kotlin をコマンドラインで使う ―「書き捨てのプログラム」を Kotlin と Groovy で書く―

Kotlin をコマンドラインで使う方法は、 以前のエントリー Kotlin Script が便利 Javaのライブラリも使える でも書いたのですが、 何通りかの方法があるので、整理しました。 Kotlin でライブラリ(jar)をつくり、それを Groovy スクリプトから使うこともできます。

» Read More
MacBook Air M1 に jq をソースからインストール

jq をソースからインストールしたので備忘録を残す。

いつまで耐えられるかわからないが、 とりあえずこの MacBook Air M1 には home brew を入れないと決めている。 そして、 jq を使おうとしたら当然コマンドが存在しない。

jq も簡単にソースからビルドできると思ったがそうはいかなかった。

最初に jq 1.6 を試したが、 oniguruma の部分が解決できなかった。 jq 1.5 はビルドできた。

» Read More
Cloud Vision API を使う Spring Boot Kotlin 編

先日の Cloud Vision API を使う Python3 編 に続いて Spring Boot Kotlin での Cloud Vision API の OCR のコード覚え書きです。

Python で既に書いたコードを Kotlin に移植しました。 Spring Boot は今まで使う機会がなかったのですが、 今回使って良いと思ったのは gradlew bootJar するだけで executable な単一の jar ファイルを生成してくれることです。

ただ Python のようにスクリプトファイルひとつで処理できるような小さな処理に Spring Boot を使うのは気が重いですね。

» Read More
Cloud Vision API を使う Python3 編

Google の Cloud Vision APIの機能のひとつにOCRがあり これを業務で使う機会がありました。 実際に使ってみると、対象が印刷物をスキャンした画像データだったなど条件がよかったのだとは思いますが ほぼOCR処理として100%に近い形でテキストに変換されました。 とはいえ、100%ではないので、そこは人間が一度はすべて確認する必要がありますし、 そもそもOCRで読みとったテキストをこちらが使用したい単位に整理する処理については 当然OCRの守備範囲外になります。 そのため、その部分のコードを書くのが相当に大変でした。

もし人間が目視&手作業としてテキスト入力すれば、その整理部分も含めて人間が処理することになる。 それがアウトソーシングとしてページ単価いくらで予算の範囲で収まるのであれば、 どうなんだろう。 自分ががんばって書いたコード部分は結局たいした価値があるのだろうか……という微妙な仕事になってしまった。

» Read More
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