Home About
Crostini IME support によりChromebookのブラウザ(Vivaldi)で Ctrl+N できるようになった

ブラウザのテキストエリアで Emacs キーバインド を使いたいというエントリーを随分前に書いたのだが、これはその続編です。

crostini-ime-option

» Read More
ローカルPCで Rinna 3.6B (rinnna japanese-gpt-neox-3.6b) を試した

Ubuntu Server 22.04 + GPU 12GB で Rinna 3.6B を動かしたので、その備忘録です。

モチベーションとしては、LlamaIndex で実現しているのと同じようなことをこのモデルなどを活用しながらつくることができないかと思っています。

» Read More
テキスト、文章の分散表現(Embeddings)を取得する

SentenceTransformers を使うことで、文章やテキストの分散表現を計算できる。

You can use this framework to compute sentence / text embeddings...

今回はこれをやってみたので、その備忘録です。 とりあえず、なんとなくできたというレベルなので、その点ご了承ください。 使用したのは 東北大学の乾研究室の日本語BERTモデル bert-large-japanese-v2 です。

» Read More
Go で JSON を ファイルから読み込んで使う(備忘録)

以前にGolang で JSON を Marshal, Unmarshal する というエントリーを書きましたが、その続きです。 ファイルとして用意してある json データを読み込んで使う方法。

» Read More
Kotlin, fold を使って階層のあるリストをパースする

たとえば、次のようなマークアップされたセカンドレベルまで階層のあるリストを表現したテキストがあったとして、 それを kotlin の fold を使ってパースして構造化する例を考える。

» Read More
Bottle に React から POST する

Python Web Framework の Bottle で GET/POST する方法を確認します。 その後、React からPOSTを使うところまでの備忘録です。

bottle and react 2

» Read More
特定ルールでテキストのヘッダとボディとを分離する

kotlin でステートマシンを使って行ごとの状態を把握したい。

というか、そんな大げさな話ではない。 ^#\s を見出し行として、それより上がヘッダ、それより下がボディとしているテキストファイルがあったときに、 ヘッダとボディを別々に分けたい、そのときどうしたらいいかという話。

» Read More
ControlNet を使ってざっくり手描きした絵から期待する画像をつくる

https://github.com/lllyasviel/ControlNet を使ってみました。 ControlNet はいくつかの機能があるのですが、その中の手描き画像+プロンプトから画像を生成するものを試しました。

ControlNet Prompt Desk

» Read More
Stable Diffusion で期待した画像をつくるためのプロンプト

コアプロンプト a cup of coffee からのあれこれ展開を試したのでシェアします。

A cup of coffee, plain background, art by Hokusai

これは個人的に一番気に入った葛飾北斎風の A cup of coffee です。

» Read More
OpenAI の Image generation を試した node.js 版

ChatGPTのAPIを試そうと思って OpenAI アカウント作成したのですが、画像生成がおもしろそうと思ってそちらを試しました。 これが「A sheltie is running around the field」というテキスト(プロンプト)から生成した画像です。(OpenAI の Create Image APIを使用)

A sheltie is running around the field

» Read More
改善版) kotlin でパーサーコンビネータを実装する

テキストをパーサーコンビネータを使ってパースすることを考えてみる 」 というのを先日考えたのですが、今回はその改善版です。

many パーサーコンビネータ の再帰部分がどうにも気に入らないので見直しました。

» Read More
kotlin でパーサーコンビネータを実装する

改善版) kotlin でパーサーコンビネータを実装する もあわせてご覧ください。

テキストをパーサーコンビネータを使ってパースすることを考えてみる。 ここで考えるパーサーコンビネータは、 パース対象となるテキストに出現するいろいろなパターンをパースできる小さなパーサを複数用意し、 それらを組み合わせて対象となるテキストをパースするコンビネータ。 パーサーを自在に組み合わせてパースできるから、パーサーコンビネータ。

このエントリーの最後では、簡単なマークアップをしたテキストをHTMLに変換するパーサーをつくります。

» Read More
UXP InDesign, TypeScript を使う (Denoを使用) require を回避

Deno を使えば TypeScript を使って UXP InDesign スクリプトをバンドルできることがわかった。 というのが前回のエントリー。 しかし、 require("uxp").storage.localFileSystem を使う場合なども機能するのだろうか? と思い立ち調査しました。 結論としては問題ありません。

結論だけ知りたい場合はこちらのレポジトリの read-text-ts をご覧ください。

» Read More
UXP InDesign, TypeScript を使う (Denoを使用)

Deno を使えば TypeScript を使って UXP InDesign スクリプトをバンドルできることがわかった。

以前軽く試したときは、deno bundle した段階で型関連のエラーが出てしまいバンドルできなかった。 でも考えてみたら(考えるほどでもないが)自分で型定義を用意して bundle 時とかコンパイル時に渡せば無問題なのでは? と思い立ち試したところ問題なくバンドルできた。

結論だけ知りたい場合はこちらのレポジトリの hello-world-ts を見てください。

このエントリーではごく簡単な UXP InDesign Scripting の例で説明します。

UXP InDesign Scripting Hello,World! with TypeScript

» Read More
文具定点観測 エナージェルインフリーの替芯 と サラサ ナノその後

sarasa-nano and energel infree refill

サラサナノにのりかえた 的な話から1年が経過しました。 相変わらずサラサナノを使っています。 ただし、前回のエントリーで書いたように 中身はエナージェルインフリーの替芯が継続中です。

» Read More
UXP InDesign, エクセルデータを読んでInDesignテーブルにレンダリング

pokemon xlsx

エクセルデータ起点のなになに・・・というケースに備えて、UXP InDesign Scripting の読み込みサンプルを書きました。

» Read More
UXP InDesign, マークダウンテキストを InDesign ドキュメントに変換

markdown-to-indesign

前回のエントリーで、Deno の bundle コマンドを使うことで(とりあえずは)いい感じに、 依存するモジュールを含めて一つのファイルにまとめることができることがわかりました。

» Read More
やり直し UXP InDesign, SheetJS を利用して MSエクセルデータを扱う(Deno編)

UXP InDesign, SheetJS を利用して MSエクセルデータを扱う(rollup.js編)では、rollup.js を使ってスクリプトをひとつのファイルにまとめていました(バンドル)が、Deno を使ってバンドルできることがわかりました。

もっとも、あくまでここで検証した簡単なスクリプトについてうまくバンドルできたという話です。 いろいろなケース、とかすべてのケースで、Deno によるバンドル(rollup.js によるバンドルもそうですが)がうまくいくかはわかりません。

簡単に手順を書き残します。

» Read More
React と Micronaut で JSON を POST して JSON を取得する

JSON を POST して JSON を返すウェブサービスを Micronaut でつくる、クライアントはReact。

» Read More
六角形のフラクタル図形 kotlin 版

随分前にGroovy で SVG を出力して、六角形のフラクタル図形を書いたというエントリーを書いたのですが、 それを Kotlin に移植しました。 あとで Haskell にも移植するつもりなので、そのとき移植しやすいように Haskell に寄せて記述したつもりです。

Groovyのコードでは、描画色をカラフルにしていましたが、これは白黒です。

fractal-hexagons

» Read More
kotlinx datetime を Gradle を使って実行ファイルを生成する

前回のエントリー「kotlinx datetime と Spring Boot , 2つの期間の重なりを判定」の追伸で、 Spring Boot ではなく、kotlinc で実行できないか試した。 結果、 import kotlinx.datetime.* は kotlinc で実行できなくて、 import java.time.* は kotlinc で実行できた。

でも、今頃気づいたのだが、kotlinc コマンドが JavaVM 用のものだったから、当然そのようになっただけで、 kotlin native 用の kotlinc-native コマンドを使えば、実行できるのではないのか?

そこで、 https://github.com/JetBrains/kotlin/releases/tag/v1.8.10 から kotlin-compiler-1.8.10.zip ではなく、kotlin-native-linux-x86_64-1.8.10.tar.gz を ダウンロードして使ってみた。 でも、 結局 kotlinc-native コマンドを使っても動かなかった。 バージョンが上がればそのうち動くようになるのかも知れない。

それで思い出したのだが、以前のエントリーで kotlin native は既に試していた。 それに沿って Gradle プロジェクトとしてこのコードをビルドしたところ、 そちらは難なく実行できたので、それを備忘録として書き残します。

» Read More
UXP InDesign, SheetJS を利用して MSエクセルデータを扱う(Rollup編)

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

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

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

2023-02-11 更新
rollup.js の代わりに deno を使って bundle できることがわかりました。詳しくはこちらのエントリーをご覧ください。

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 と Spring Boot , 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