ククログ
https://www.clear-code.com/blog/
ククログはクリアコードのブログです。開発に関わる技術情報や、会社での出来事を記録しています。
フィード

Rubyエコシステム開発入門ワークショップ2026-08を開催しました! #rubyws #oss_gate
ククログ
Ruby関連の開発に参加する人が増えるといいなぁと思っている須藤です。2026-08-05(水)にRubyアソシエーションさんがRubyエコシステム開発入門ワークショップ2026-08を開催しました。私は内容の調整と当日の進行を担当しました。会場はギフティさんが提供してくれました!ワークショップ後の懇親会もギフティさんのご厚意で無料で開催できました!ありがとうございます!当日はハッシュタグのことを考えていなかったのですが、後日#rubywsに決まりました!関連リンク:イベントページ事前情報アンケート結果内容このワークショップはOSS GateワークショップをベースにRubyに特化した内容にアレンジしたものです。Ruby本体や各種RubyGemsの開発に参加してみたいけど最初の一歩を踏み出せていない「ビギナー」が、すでに参加している「サポーター」にサポートしてもらいながら実際にフィードバックまで体験します。ビギナー19人・サポーター5人・進行役1人(私)の25人での開催になりました。残念ながら参加できなくなってしまったみなさん(8人)はキャンセルしてくれました。当日は、何人か電車の遅延などで遅れてしまった人がいましたが、個別にフォローして合流できました。イベントページやチャットで連絡をもらっていましたが、私、進行中はあまりみないので気づけていませんでした。すみません。。。ワークショップの最後にはみなさんにアンケートを書いてもらって、直後にみんなでながめながらその日の活動を見つめ直したり、次のワークショップの改善案を考えたりしました。アンケート結果や当日の話からいくつか紹介します。まずはビギナーのみなさんが選んだ開発対象です。CRubymrubyruby.wasmactiverecord-importdebugfactory_botferrumgraphql_playground-railshanami-cliio-eventipaddrkaminariomniauth_openid_connectphashionpicoruby-wasmridgepolerubocop-rspectimetypst開発対象はビギナーのみなさんに自分で取り組みたいプロダクトを考えて選んでもらいました。ちょっとこれはハードルが高いかなぁと思うやつでもサポートするので大丈夫!としました。こ
2日前

Ruby Association Activity Report - pure Ruby Apache Arrow実装の活用方法 #raar2026
ククログ
2026-08-04(火)に開催されたRuby Association Activity Reportでpure Ruby Apache Arrow実装の活用方法という話をした須藤です。2025年度Rubyアソシエーション開発助成金プロジェクトとして開発したpure RubyのApache Arrow実装の成果報告でした。 pure Ruby Apache Arrow実装の活用方法 関連リンク:イベント(Ruby Association Activity Report)スライド(Rabbit Slide Show)リポジトリー内容内容は事前情報に書いたのでそちらを読んでください。助成金事業のこととか次の日のRubyエコシステム開発入門ワークショップ2026-08のこととか、宣伝が多すぎてプロジェクトの内容が少なくなってしまっているとささださんからコメントをもらいました。ごめんなさい。RubyでSIMDRubyで書いたらSIMDで速くなるとかっこいいなぁと思っています。たとえば、こういうことです。sum = 0numbers.each do |number| sum += number # SIMDで速くなる!endsumしかし、どう実現するのがそれっぽいかはいい案が浮かんでいませんでした。この日もあいかわらずそのことを考えていたのですが、まつもとさんと話をしてSpinelを使うのもいいかもなぁという気持ちになりました。SpinelはRubyで書かれたコードをCのコードに変換できるAOTコンパイラーです。生成されたCのコードをCコンパイラーでビルドすれば実行ファイルを生成できますが、実行ファイルではなくて共有ライブラリーを生成してRubyの拡張ライブラリーとして使えるようにするのはアリという話を聞きました。この機能がうれしいポイントはCコンパイラーの最適化を効かせる余地がある点です。Cコンパイラーは賢いので、十分単純なループであれば最適化オプションを指定すればSIMD化してくれます。ただ、RubyのArrayをそのまま扱えてもSIMDは使えません。SIMDを使うには対象データ(たとえばint64_tの数値配列)がCの表現(Rubyで表現された29のバイト列ではなくてCで表現された29のバイト列ということ)で連続したメモリー領域に並んでいなければいけないからです。Rub
3日前

Embulkをアプリケーションに組み込む「EmbulkEmbed」とは何か
2
ククログ
先日、2026-09-11(金)にEmbulkユーザーミートアップを開催する告知を公開しました。その記事にある通り、クリアコードはこれまでEmbulk自体の開発には関わっていません。一方で、Embulkを使っているお客さまへのサポートは行っており、現在も継続しています。そのサポートの中心にあるのが EmbulkEmbed という仕組みです。あまり知られていないと思います。私も相談を受けるまで知りませんでした。そして、ドキュメントがほとんどありません。本記事では、EmbulkとEmbulkEmbedがそれぞれ何なのかを説明し、EmbulkEmbedを使うと何が得られて何を背負うことになるのかを整理します。EmbulkとはEmbulkは、並列バルクデータローダーです。「どこかにある大量のデータを、別のどこかへ転送する」ための道具、と考えるとわかりやすいと思います。データベースからS3へ、CSVファイルからデータベースへ、といった転送を担当します。Embulkの特徴はプラグイン構成です。転送処理は、次のようなプラグインを組み合わせて作ります。データの読み込み(input)書き出し(output)テキストの解析(parser)整形(formatter)圧縮・展開(encoder/decoder)加工(filter)利用者はYAMLで設定を書き、embulk run config.yml のようにコマンドラインから実行します。なお、Embulkは現在メンテナンス・モードになっています。Embulk into the maintenance modeEmbulkEmbedとは何かEmbulkをコマンドラインから実行すると、1回の実行ごとにJVMの起動とプラグインの読み込み・初期化が走ります。この初期化コストが特に効いてくるのは、データベースへのアクセスが前提となる処理です。テーブルごとに転送を分けて実行するなら、テーブルの数だけEmbulkの起動を繰り返すことになるからです。転送対象が1つのテーブルだけなら気になりませんが、数十・数百のテーブルを順番に転送するようなバッチ処理では、この初期化コストが実行回数の分だけ積み上がります。実際ある記事では、embulk run をforループで10回起動すると実時間で2分47秒かかったのに対し、EmbulkEmbedで同じ処理を1プロセ
7日前

【告知】2026-09-11(金)にEmbulkユーザーミートアップを開催! #Embulk
ククログ
まだEmbulkユーザーがいそうと思っている須藤です。2026-09-11(金)の夜にEmbulkユーザーミートアップを開催します。Embulkのメンテナーである三廻部さんがアナウンスされている通り、現在、Embulkはメンテナンス・モードになっています。しかし、アナウンスでも触れられている通り、まだEmbulkユーザーはいます。多くの場合、メンテナンス・モードのプロダクトを使い続けることにはリスクが伴います。うまく動いているうちは問題になりませんが、セキュリティーの問題が発生した場合・機能不足が発覚した場合・バグが発覚した場合など、それらの問題が解決されない可能性が高いからです。そこで、Embulkユーザーたちが集まって、現状のこと・今後のことなどを話し合う機会としてこのミートアップを企画しました。まだEmbulkを使っている人はぜひ参加してください!ユーザーではないけどEmbulkの今後に興味がある人の参加も歓迎です!(本気なので冷やかしはやめてください!)イベント情報イベント名:Embulkユーザーミートアップ開催日時:2026-09-11(金)19:00-21:00参加費:無料会場:株式会社オプティム 東京本社:東京都港区海岸1丁目2番20号 (汐留ビルディング 18F)対象:Embulkユーザー、およびEmbulkの今後に興味がある人会場はまだ決まっていません。都内で会場を提供してもいいよ!という方がいたらぜひご連絡ください!オプティムさんが提供してくれることになりました!ありがとうございます!開催の経緯このイベントはクリアコード20周年記念Meatupで参加者のやんちゃさんからまだEmbulkを使っていると聞いたことをきっかけに私が企画しました。三廻部さんはメンテナンス・モードに移行する前にメンテナーを募集するなど、Embulkの将来を考えた行動をしてくれていました。このことおよびまだ使っているユーザーがいるという現状も踏まえて、Embulkユーザーたちが集まって現状のこと・今後のことなどを話し合う機会があってもよいのではないかと考えたのです。クリアコードはこれまでEmbulkの開発には関わっていませんが、GroongaやFluentdなど既存のプロダクトを引き継いでメンテナンスしている経験があります。もしかしたら、なにか助けになれるかもしれません。もし
10日前

クリアコード20周年記念Meatupを開催したよ! #cc20th
ククログ
クリアコードの代表取締役の須藤です。最近はいろいろ忙しくてこの話を書けないまま1ヶ月経とうとしている。。。アナウンスしていた通り、2026年7月29日(肉の日!)にクリアコード20周年記念Meatupを開催しました!お祝いに来てくれたクリアコードファン(自称)のみなさん、ありがとうございました!10周年祝いから10年経ってまた周年イベントを開催できてうれしいです!会場はさくらインターネットさんの東京支社のイベントスペースでした。会場を探し始めたらやっさんさんがあっという間に押さえてくれてとても助かりました。当日は、さくらインターネットの@yoku0825さん、風穴さんには柔軟に対応してもらえてとても助かりました!さくらインターネットさん、ありがとうございました!当日の写真は小山さんが撮ってくれました。撮ってくれた写真はFlickrのアルバムで公開されています。95枚もあるよ!小山さん、ありがとうございました!撮影:小山哲志さん、ライセンス:未設定(イベントレポートのためだけに利用可能)みなさんの紹介ありがたいことに30人くらいのファンのみなさんが集まってくれました。ただ、みなさんはそれぞれ知っている人もいれば知らない人もいます。これまでのクリアコードとの関わり方が人それぞれだからです。クリアコードは自由なソフトウェアとビジネスの両立を軸として20年活動してきました。活動してこられたのはクリアなコードを書き続けた私達のがんばりもあるのですが、みなさんとのつながりも重要な要素です。自由なソフトウェアを推進するためには私達が作ったりメンテナンスしたりするだけでは足りません。一緒に開発してくれるみなさんや使ってくれるみなさんなどいろいろな人とのつながりが必要です。ビジネスもそうです。一緒にお仕事をしてくれたり、お客さんになってくれるみなさんとのつながりが必要です。他のクリアコードメンバーが年表アプリを自慢してくれる予定だったので、技術的な話はみんなに任せて、私は集まってくれたみなさんとのつながりの部分をカバーしました。元々は年表アプリを見ながらみなさんを紹介しようと思っていたのですが、直前まで参加者が増減していたのと時系列での紹介は難しそうな気がしてきたのとで、お祝いメッセージ(後述)のリストと参加者リストをベースに紹介しました。撮影:小山哲志さん、ライセンス:未設定(イベ
14日前

Why Nominatim Can't Find Hiroshima Peace Memorial Museum - and How to Fix It
ククログ
I'm Abe, and I'll be speaking at FOSS4G Hiroshima 2026.On September 3, 2026, at 15:00, I'll give a talk titled "Why Nominatim Can't Find Hiroshima Peace Memorial Museum - and How to Fix It".Slides for this talk: Why Nominatim Can't Find Hiroshima Peace Memorial Museum - and How to Fix It A note before we beginMy English pronunciation isn't great, so I wrote my talk script up as this blog post.On the day I'll stick to it word for word, so please treat it as subtitles to read alongside the slides.The talk scriptTitleHello. I'm giving a talk titled "Why Nominatim Can't Find Hiroshima Peace Memorial Museum, and How to Fix It".A facility right near this venue doesn't show up when you search for it.That bothered me, so I looked into how to fix it.About meMy name is Abe Tomoaki. I'm a software engineer in Japan, working on FOSS development, especially full-text search.I work at ClearCode, where we develop the full-text search engines Groonga and PGroonga.Today, I'll show how to improve search
15日前

Nominatimが広島平和記念資料館を見つけられない理由とその解決方法
ククログ
FOSS4G Hiroshima 2026で発表予定の阿部です。2026年9月3日の15時から「Why Nominatim Can't Find Hiroshima Peace Memorial Museum - and How to Fix It」というタイトルで発表予定です。英語が全くできないのですが公用語が英語だそうで、英語で発表しなければいけません…。台本がないと発表が厳しそうなので、英語の台本を作ります。英語の台本を作る前にまずは日本語で発表内容をまとめよう、というのが本記事です。はじめに上述の通り最終的に英語の台本を作りたいので、台本風の記事になります。セリフだけでわかりにくいところはスライドの内容を引用します。ちょっと読みづらいかもしれないですがご了承ください。スライドはこちら: Why Nominatim Can't Find Hiroshima Peace Memorial Museum - and How to Fix It 発表用台本タイトルこんにちは。「Nominatim が広島平和記念資料館を見つけられない理由と、その解決方法」というタイトルで発表します。この会場の近くにある施設が、検索しても出てこないのが気になったので解決方法を考えました。自己紹介阿部智晃と申します。日本でソフトウェアエンジニアをしていて、オープンソースの開発、とくに全文検索まわりに取り組んでいます。所属はクリアコードで、全文検索エンジンの Groonga・PGroongaを開発しています。今日の発表ではPGroongaを使って検索を改善します。さっそくやってみるさっそく今日の発表の課題を確認するためにOpenStreetMapのサイトで検索してみます。「広島平和記念資料館」で検索します。結果は0件です。そこで建物名ありの「広島平和記念資料館 本館」や「広島平和記念資料館 東館」で検索するとヒットします。データは存在しているわけです。広島平和記念資料館https://www.openstreetmap.org/ で検索広島平和記念資料館 本館広島平和記念資料館 東館結果のまとめクエリー結果広島平和記念資料館0 件広島平和記念資料館 本館ヒット広島平和記念資料館 東館ヒット整理すると表の通りです。普通、本館や東館といった建物名を含めて検索することはないと思います。ということ
15日前

ThinApp 2512以降でアプリがクラッシュした原因が「制御フローガード」だった事例
ククログ
セキュアブラウザ製品「Chronos SystemGuard」のサポートを担当する屋代です。先日ThinAppの新しいバージョンでパッケージを作成したところ、これまで問題なく動作していたアプリケーションがクラッシュする現象に遭遇しました。この記事ではちょっとしたトラブルシューティング小ネタとして、制御フローガードに関するThinAppのBuildOptionsの既定値変更が原因だった事例を紹介し、ベンダーから案内された回避方法が有効に作用した機序について考察します。発生した現象弊社ではChronos SystemGuardをThinAppで仮想化して提供しています。1定期的な動作検証の一環として、ThinApp 2512でパッケージを作成して起動確認を行ったところ、アプリケーションがクラッシュする問題に遭遇しました。ひとつ前のバージョンであるThinApp 2503で作成したパッケージでは、問題は発生しません。他の条件は揃えていたので、ThinAppバージョンの差異が問題と考えられます。原因は制御フローガードに関するBuildOptionsの既定値変更Omnissa社のサポートから案内された内容は次のとおりでした。BuildOptionsの1つであるControlFlowGuardOffの既定値が、ThinApp 2512からオンに変更された従来と同じ動作にしたい場合はControlFlowGuardOff=0を指定する実際にPackage.iniへ設定を追加してパッケージを再作成したところ、クラッシュは解消しました。また、その後リリースされたThinApp 2603でも同じ設定で正常に動作しています。設定例Package.iniのBuildOptionsに次の設定を追加します。[BuildOptions]ControlFlowGuardOff=0ThinApp 2512以降へ移行したタイミングでアプリケーションの起動失敗やクラッシュが発生した場合は、一度試してみるとよさそうです。案内された対処が有効に作用した機序の考察ControlFlowGuardOff という名称が示すように、この設定はWindowsの「Control Flow Guard(CFG:制御フローガード)」に関連するものです。2ThinApp 2512からは、制御フローガードが既定で無効となったこ
22日前

Edge/Chrome拡張機能の開発:初めてのインターンシップのまとめ
ククログ
このたび、クリアコードのインターンシップに参加する機会をいただきました三宅です。プログラミングを学び始めて間もない私にとって、実際の開発現場を体験するのは初めての経験でした。この記事では、インターンに参加した理由や取り組んだ内容、実際に感じたこと、そして学んだことについて紹介します。インターンに参加した理由私が今回のインターンに参加した一番の理由は、プログラミング初心者として実際の開発業務に触れてみたいと思ったからです。普段は学習サイトや個人でプログラミングを学んでいましたが、実際の現場ではどのような流れで開発が進み、どのようにチームでコミュニケーションを取りながら仕事をしているのかを知りたいと考えていました。本や教材だけでは学べない「実際の開発現場」を経験したいという思いが、インターンへの参加を決めた大きなきっかけです。また、Linuxの学習を始め、コマンドラインでの操作を練習している中でOSS(オープンソースソフトウェア)の存在を知りました。OSSについて調べていくうちに、多くのソフトウェアが世界中の開発者によって協力して開発されていることを知り、その仕組みや開発の進め方に興味を持つようになりました。さらにOSSについて調べている中で、クリアコードがOSSに積極的に取り組んでいることや、インターンシップを実施していることを知りました。インターンシップの最初の面談では、新型コロナウイルスの流行をきっかけに、現在はフルリモートで実施しているという説明がありました。対面でなくても、実際の開発現場と同じようにコミュニケーションを取りながら開発を進める経験ができることを知り、OSSについてさらに理解を深めるとともに、実際の開発の進め方を学びたいと思い、クリアコードのインターンに応募しました。今回のインターンでは、Edge拡張機能の開発をテーマに取り組みました。このテーマは、事前の面談で、私がこれまでJavaScriptをある程度学習してきたことをお伝えしたことがきっかけで決まりました。クリアコードの方から、EdgeやChromeの拡張機能はJavaScriptを使って開発できることに加え、ちょうど社内でEdge拡張機能を開発する計画があるというお話を伺いました。Edge拡張機能は技術的にChrome拡張機能と共通する部分が多いため、今回開発するものはChromeでも利用で
24日前

Ruby Association Activity Report - pure Ruby Apache Arrow実装の活用方法 #raar2026
ククログ
2026-08-04(火)に開催されるRuby Association Activity Reportでpure Ruby Apache Arrow実装の活用方法という話をする須藤です。2025年度Rubyアソシエーション開発助成金プロジェクトとして開発したpure RubyのApache Arrow実装の成果報告です。本編の参加は無料(懇親会も参加する場合は有料)なので、興味のある人は参加してください。まつもとさんの基調講演や他の開発助成金プロジェクトの成果報告もあります。 pure Ruby Apache Arrow実装の活用方法 関連リンク:イベント(Ruby Association Activity Report)スライド(Rabbit Slide Show)リポジトリープロジェクトの成果このプロジェクトでは、低コストでのデータ交換のみにフォーカスしたpure RubyのApache Arrowシリアライザー・デシリアライザーを実装しました。成果物は次の2つです。pure RubyのApache Arrow実装:red-arrow-formatpure RubyのFlatBuffers実装:red-flatbuffersApache ArrowフォーマットはFlatBuffersを使っているのですが、FlatBuffersのRuby実装がなかったのでFlatBuffersの実装から作りました。最初はFlatBuffers本体に取り込んでもらおうと思ってコード生成部分はC++で実装していたのですが、取り込んでもらえなそうだったので、Rubyで実装し直しました。FlatBuffersのデータは効率のよいバイナリー形式で、スキーマはテキスト形式で書きます。たとえば、Apache Arrowなら https://github.com/apache/arrow/blob/main/format/Message.fbs がテキスト形式で書かれたFlatBuffersのスキーマの1つです。FlatBufersのデータを扱うときは、スキーマからそのスキーマを扱うコードを生成してそれをライブラリーとして使ってデータにアクセスします。たとえば、 https://github.com/apache/arrow/blob/main/format/Message.fbs から htt
1ヶ月前

Firefox ESR153.0のリリースとFirefox ESR140のサポート終了について
ククログ
去る7月21日、Firefoxの法人向け長期サポート版であるFirefox ESR1の新しいメジャーバージョンである「Firefox ESR153(153.0)」がリリースされました。1つ前のメジャーバージョンとなるFirefox ESR140のサポートは、10月13日に終了する予定となっています。Firefox ESRは現在、ESR153とESR140の2つのバージョンが存在しており、8月18日には、それぞれのセキュリティアップデート版であるESR153.1とESR140.14がリリースされる見込みです。ESR140のサポートは依然継続していますが、前述の通り10月13日にはサポートが終了するため、それまでの間にESR153へ更新することが強く推奨されます。当社では、Firefox ESR140からESR153の間の変更点のレポートを公開しており、このレポート中では10のカテゴリーに分けて、法人利用に影響が及ぶと考えられる変更点を詳細に紹介しています。この記事では、その中で特に影響度が大きいと考えられる項目を抜粋してご紹介します。Firefox ESR140からESR153の間の変更点(抜粋)全般Firefox Home(新しいタブを開いたときの空のタブ)の内容が一新され、壁紙のカスタマイズが可能になった(Firefox 145)ほか、天気予報などのウィジェットを表示可能になりました(Firefox 146)。天気予報は Preferences ポリシーで browser.newtabpage.activity-stream.widgets.system.weather.enabled を false にすることで無効化できます。全般的なウィジェット機能自体は Preferences ポリシーで browser.newtabpage.activity-stream.widgets.enabled を false にすることで無効化できます。分割ビュー2機能により、1つのウィンドウ内に2つのページを並べて表示できるようになりました。分割ビューを作るには、タブの上で右クリックメニューを開いて「分割ビューを追加」を選ぶか、タブを2つ選択した状態で右クリックメニューを開いて「分割ビューで開く」を選択する(Firefox 149)か、任意のリンクを右クリックしてメニューから
1ヶ月前

クリアコード年表アプリにThunderbirdアドオンの実装を追加しました #cc20th
ククログ
今月29日開催のクリアコード20周年記念Meatup(参加申し込みページ)に向けて準備を進めている結城です。クリアコード年表で使用可能なOutlook用のOfficeアドインに続いて、Thunderbird用のアドオンも作ってみましたので、こちらで紹介いたします。今回作成したThunderbird1アドオン2「CC 20th Anniversary Timeline」(以下「年表アドオン」)は、「クリアコード年表3へのイベントの投稿操作」を補助するものです。具体的には、公開のWebページのURLをアドオンに渡すと、その記事の内容を要約したテキストを伴ったイベント投稿画面が自動的に開かれて、そのままイベントを投稿できます。このククログの記事やプレスリリースなど、既存のWebページを手がかりに年表を充実させる役に立つはずです。インストールThunderbirdのアドオンは一般的にはThunderbird Add-onsからダウンロード・インストールしますが、年表アドオンはこちらのサイトには掲載していません。クリアコード年表のリポジトリーにXPIパッケージを含めてあるので、以下のリンク先のページからファイルをダウンロードして下さい。cc-20th-anniversary-timeline-we.xpiその後、Thunderbirdのアドオンマネージャーにファイルをドラッグ&ドロップすればインストールできます。また、このアドオンでは、記事の要約を自動生成するためのバックエンドとしてOllama経由でローカルLLMを使用します。未導入の場合は、以下のリンク先の説明に従ってOllamaをインストールして下さい。Windowsではインストーラーからのインストールがお勧めです。Ollamaのダウンロードページ初期設定Ollama用の言語モデル(LLM)のダウンロード新規にOllamaをインストールした場合は、別途言語モデルのダウンロードも必要です。Ollamaは言語モデルをローカルで動かすための仕組みだけを提供しており、その脳味噌である言語モデルは都度ダウンロードしなくてはなりません。Windows版Ollamaの場合はコマンドプロンプトを、それ以外の環境の場合は端末エミュレーターを開いて、ollama pull 言語モデル名 という書式でコマンドを実行すれば、指定した言語モデルの
1ヶ月前

クリアコード年表アプリをOutlookのアドインにしました #cc20th
ククログ
今月末に、クリアコード20周年記念Meatupが開催1されます。設立20周年を記念するこのイベントではクリアコード年表公開!#cc20thとアナウンスがあったように、コンテンツの1つとして「クリアコード年表」というアプリを公開しています。「クリアコード年表」は、クリアコードが設立以来どのようにフリーソフトウェアとビジネスを両立してきたかを、タイムラインで表示するものです。今回、クリアコード年表アプリの機能の一つとして、年表アプリをOutlookのアドイン化して、Outlook上で表示できるようにしましたので、導入方法についてご紹介します。OfficeアドインとはOutlookのOfficeアドイン開発を紹介したククログ記事でも紹介していますが、Officeアドインとは、マニフェストファイル(XMLまたはJSON形式)+ Webアプリで構成された、Microsoft Office向けのアドインです。マニフェストファイルおよびWebアプリは以下の役割を果たします。マニフェストファイルアドインのメタデータ、UIの拡張ポイント(リボンボタン等)、WebアプリのURLを定義Webアプリ実際の動作のロジックを提供HTTPSサーバー上にホスト内容はHTML/JavaScript/CSSなどで一般的なWebアプリとして作成Office.jsを使い、Officeの操作を行うOfficeクライアントはマニフェストファイルを読んで、指定されたWebアプリをロードし、実行します。クリアコード年表アドインでは、クリアコード年表アプリのサーバー上にアドイン用のWebアプリもホストしています。Outlookへクリアコード年表アドインをインストールする以下の手順でOutlookへクリアコード年表アドインを追加できます。メールサーバーはオンプレミス版のExchange Server、Microsoft 365を含むクラウド版のExchange Onlineのいずれかである必要があります。インストール方法マニフェストファイルをダウンロードします以下のURLにアクセスし、マニフェストファイル(cc-20th-anniversary-timeline.manifest.xml)をダウンロードしますhttps://20th.clear-code.com/cc-20th-anniversary-timelin
1ヶ月前

OpenArm用のWebXRベースのVR遠隔操作アプリの試作
ククログ
オープンソースのロボットアームであるOpenArmの開発をお手伝いしている須藤です。Meta Quest 3やPICO 4といったVRデバイスを使ってOpenArmを遠隔操作したいというニーズがあります。現在はMeta Quest 3用の遠隔操作アプリを提供していますが、PICO 4でも遠隔操作したいという要望やらなんやらがあるのでWebXRベースの遠隔操作アプリを試作しました。今回はじめてWebXRを触ったのですが、いろいろ学んだことがあったのでまとめておきます。WebXRWebXRはWebブラウザー上でVR(仮想現実、Virtual Reality)やAR(拡張現実、Augmented Reality)を実現するためのJavaScript用のAPIです。VRやらARやらをまとめてXRと呼んでいます。多くのXRアプリケーションは3Dのなにかを描画しますが、OpenArmの遠隔操作アプリはVRデバイスのコントローラー(Meta Quest 3ならこういう手に持つやつ)でOpenArmを動かしたいだけなので3Dのなにかは描画しません。(将来的にはOpenArmについているカメラの画像とかを描画したくなるかもしれませんが、現時点では描画しません。)VRデバイスのコントローラーの情報をリアルタイムで取得できれば十分です。WebXRでは3Dのなにかの描画もVRデバイスのコントローラーの情報の取得もできますが、今回は後者のAPIだけを使いました。https://developer.mozilla.org/ の情報とW3CのImmersive Webワーキンググループが提供するサンプルと実機での挙動を参考にしながら開発を進めました。WebXRを使うために必要なこといくつか動かすまでに知らないといけなかったことがあったので、まずはそれらについてまとめます。HTTPSWebXRを使うためにはHTTPSが必要です。手元で動作確認する場合、ruby -run -e httpd -- --bind-address 0.0.0.0などでローカルにWebサーバーを立ち上げてJavaScriptを配信することが多いと思いますが、これではWebXRを使えません。HTTPSではなくHTTPだからです。私は最初は既存のHTTPSサーバーを使って実験していました。具体的には https://www.c
2ヶ月前

OpenArmのdoraベースのデータ収集・推論データフローの設計
ククログ
オープンソースのロボットアームであるOpenArmの開発をお手伝いしている須藤です。OpenArmのデータ収集データフローと推論データフローはdoraを使っています。(もう半年くらい前になりますが)doraベースのデータフローの初期設計をしたのでなにを考えて設計したかを記録しておきます。データフローデータ収集や推論などといったタスクは単一のプログラムとしても実現できますが、データフローとしても表現できます。たとえば、ロボットを遠隔操作して学習用の教師データを集めるデータ収集タスクは次のように分解できます。人が遠隔操作用デバイスを動かして動作命令を出力1.の情報を受け取ってロボットを動かすロボットの今の状態を出力1.と3.の情報を記録人→遠隔操作用デバイス→ロボット→記 ーーーー→録データフロー内では、矢印の両端にいるもの(「人」や「遠隔操作用デバイス」)がノードで行動主体になります。矢印がデータフロー内でのデータの移動になります。専用のプログラムでこのようなタスクを実現することもできます。実際、OpenArmのデータ収集処理・推論処理の初期実装ではそうなっていましたし、フィジカルAIの便利ツールLeRobotでもそうなっています。(lerobot-recordというツールが提供されています。)専用のプログラムで実現するメリットは、自由度が高く、柔軟に処理を実現できることです。一方、変更するにはプログラムを変更する必要がでてきて、専用のプログラム固有の知識が要求されることがデメリットです。もちろん、よく変更したくなる箇所はコマンドラインオプションや設定ファイルでカスタマイズできるようにすることでこのデメリットを軽減できます。一方、このような処理を一般的なデータフローとみなして、汎用的なデータフローツール上で実現する方法もありえます。この方法のメリットは、汎用的なデータフローツールの知識を再利用できることおよび汎用的な処理をせずにすむことです。デメリットは汎用的なデータフローツールの制限に設計が左右されることです。たとえば、カメラで撮った画像も学習データとして記録したくなったとしましょう。人→遠隔操作用デバイス→ロボット→記 ーーーーー→ カメラ→録専用のプログラムの場合は、カメラから画像を取り出す機能を実装して組み込みます。データフローツール上で実現する場合は、すでに
2ヶ月前