この問題を解くHaskell による実装を書いたのだが、 結局のところ、対象となる文字列(画像ファイル名)の等価性をカスタマイズするために、 文字列を丸めてそれを使って等価性の比較を行っているだけ。 Haskell では、 Eq 型クラスを自前で用意した Item 型に実装する形で、 言語にもともと備えられている仕組みを 使っているのでコードとしてはわかりやすいのは確かだけれど。
そこでこの問題を Haskell 発想により近い形で JavaScript で実装しなおしてみる。
» 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
先日 markdown-to-ast を使って markdown をパースするというエントリーを書いたのですが、 markdown-to-ast は commonmark をラップしたライブラリだとの情報を得た。
それならば、markdown-to-ast を使うのではなく、直接 commonmark を使ってみることにする。
» Read Moremarkdown で記述されたテキストをパースしてあれこれしたい場合。 markdown-to-ast が便利そうなので、使ってみた。 これはすごい便利。
» Read More2022-04-04 更新: commonmark 編を書きました。
パーサーコンビネータについて調べていて、 そもそもその元になる概念としてコンビネータがあることを知る(いまさら?!)。 つまり、パーサーコンビネータはいろいろあるコンビネータの中の一つ。 そして、いろいろあるコンビネータの中でもっとも有名なのが Y コンビネータとか Z コンビネータらしい。 そして、コンビネータを構成するパーツの一つがラムダ(式)とか無名関数であると。
名前付き関数はいつも使っていて、そして名前無し関数(無名関数)も結構使う。 では、ラムダ(式) と無名関数ってイコールじゃないの? と思って調べるもよくわからない。
Wikipedia によると: 「プログラミング言語における無名関数(英語: anonymous functionあるいはnameless function)とは,名前付けされずに定義された関数のことである.無名関数を表現するための方法には様々なものがあるが,近年主流となっているのはラムダ式による記法である.」 ということで、ラムダ式(という概念)をプログラム言語で表現するときに使うのが無名関数(または匿名関数)と考えて問題なさそう。
パーサーコンビネータや Yコンビネータを理解するための最初の一歩としてラムダ式を把握する。
» Read MoreExtendScript で 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実のところ、 パート1、 パート2は、この ES6 の Javascript 記述で ExtendScript 用のコードを書くための前準備であった。
ここまでで、モジュールを使ってコードを書けるようになり、rollup により、それらのコードを一つのファイルにまとめるところまでできた。 あとは、このコードをいわゆるトランスパイラと呼ばれるコード変換ツールにより、ExtendScript として機能する Javascript に変換します。 このトランスパイラは定番の babel を使います。
» Read Moreパート1では、webpack を使って、モジュールを一つのファイルにまとめていました。 しかし、この方法では、webpack により、ExtendScript で実行できないjavascript記述が追加されてしまう不都合がありました。 そこで モジュールをひとつにまとめる機能を webpack の代わりに rollup を使って解決することにします。
» Read MoreWeb関係のJavascript 開発では、Node.js を使って モジュールに分割して開発をしていく。 これを InDesign 用の ExtendScript でもできるようにしたい。 もちろん、ExtendScript にも @include 記述により、モジュールを使うことはできる。 しかし、その場合できあがったコードを配布するときに、依存しているモジュールファイルも一緒に渡す必要が生じる。 これを避けたい。配布時には単にひとつのファイルだけで完結したい。
» Read Moreデバッグのためのテストとして json を POST して json を返すウェブサービスを Micronaut でつくる話。
» Read More先日 closure を使った オブジェクト指向的なコードを JavaScript で書くというデモをする機会があり、これはその覚書です。
» Read MoreExtendScript で 指定したフォルダ以下のフォルダ全部を探すには その1 よりもっとシンプルに書く方法。 フォルダを順に辿りながら、フォルダを見つけたら callback する方式。
» Read More指定したフォルダ以下のサブフォルダ、サブサブフォルダ...を含めてすべてのフォルダを探す、というコードを書いてみた。 ExtendScript では each や map, reduce などが使えないので、実装は少し面倒でした。
» Read MoreJava から evaluateString する形で javascript コードを実行する場合に logger.log() で指定したファイルにログを書き出したい、という場合の解決方法.
» Read Moreいままで Javaから javascript を実行するのに、 evaluateString ばかり使っていたが、事前にこれをコンパイルして使うことができるらしいので、試してみた。
» Read MoreRhino を使って Java から JavaScript を実行する から、さらにあれこれ試していて多少進捗があったので、 現在までに得た見地をまとめます。
» Read MoreJava から evaluateString する形で javascript コードを実行する場合に Node.js のように console.log() したい、という場合の解決方法.
» Read More大量のXML文書から InDesign 文書を生成する必要が生じたので、Node.js での XMLパース方法をメモ。
» Read More別に対象が InDesign ファイルに限った話ではないが、再帰的にディレクトリを検索して、すべての InDesign ファイルリストをつくる、 という必要が生じたので備忘録として書き残します. 基本的には 再帰を使って木構造をリストに変換する JavaScript で書いたのと同じです.
» Read More前回( Node.js での エクセルデータ読み込み )で、エクセルデータが簡単に扱えると思っていたが、
実践的なデータを使って前のコードで処理したところ、ハングアップしてしまい作動しない.
よくコードを見てみると xlsx.utils.sheet_to_json
として、エクセルデータ全体を json object に変換している.
推測ではあるがおそらくこれが原因であろう.
カタログ系組版では、エクセルデータを起点としてカタログを組んでいく仕事があります。 いままではもっぱら Java / Groovy + POI を使って処理してきましたが、 Node.js でエクセルデータをパースできるか調べてみました。
» Read MoreAdobe XD の ドキュメント構造は scenegraph.root をルートノードとした木構造として表現されています。
これらのノードをスクリプトから操作するには、この木構造をたどる必要があります。
いちいちたどるのは面倒なので、木構造からリストに変換することを考えることにします。
カスタムオブジェクトを Java側でつくって JavaScript であれこれしたい場合で、 そのカスタムオブジェクトが配列的なクラスの場合 list[0] のようにアクセスしたときに意図した値を返す方法.
» Read More今更な話題ですが 将来 nashorn (JEP 335: Deprecate the Nashorn JavaScript Engine ) が廃止になるらしい.
nashorn の代わりに Rhino で実行する方法を調査したのでメモします.
クライアントサイド/サーバサイド どちらからでも使える Javascript モジュールをつくる場合の備忘録。 ここでは、3x3 マトリックスを使って座標を別の座標に写す処理を行うモジュールを例に node.js のプロジェクトを作成してみます。
» Read More「入門 Haskell プログラミング」の Section 10 に Haskell で オブジェクト指向的なコード例が出ていた。 興味深い。ただ、Haskell のコードを見てもさっぱり意味がわからないので、JavaScript に変換してみた。 なお、本に出ているコードからは多少変えています。
» Read MoreJava8 からは Rhino に変わって Nashorn を使って JavaScript を実行することができます。 Binding 機能を使えば、JavaScript から Java 側で作成した自前のオブジェクト利用することも簡単です。
そこで、この機能を使っていろいろと実験をしているのですが、少し困った問題が出てきました。 Java の ArrayList オブジェクトを Nashorn に Binding して使う場合、 こちらとしては、JavaScript の Array オブジェクトと同じように振る舞ってほしいのですが、 それとは微妙に作動が違うのです。
これを解決するためにいろいろ方法を探したのですが、どうやらAbstractJSObject を使って、 JavaScript の Array オブジェクトと同じように振る舞うオブジェクトを実装すればよいようです。
» Read More接続してきたブラウザの画面サイズを元にHTMLのレイアウトを調整したい場合に使用するJavaScript。 今回は、textareaを画面サイズに応じて調整したかったので、実装しました。
» Read More