ククログ

https://www.clear-code.com/blog/

ククログはクリアコードのブログです。開発に関わる技術情報や、会社での出来事を記録しています。

フィード

記事のアイキャッチ画像
Mroonga 15.21 リリース!
ククログ
MySQL, MariaDB, Percona Serverで高速に全文検索するためのストレージエンジンMroongaのメンテナンスをしている堀本です。Mroonga 15.21をリリースしました!直近のリリースが2025-09-30なので、2ヶ月ぶりのリリースです。今回のリリースでは、Debian 13とMariaDB 11.8を新たにサポートしました。Debian 13は2025-08-09に、MariaDB 11.8は2025-06-08にリリースされました。Debian 13は数ヶ月、MariaDB 11.8に至ってはサポートに半年かかってしまいました。。。がんばってサポートしたので、この記事では、Debian 13とMariaDB 11.8のサポートに時間がかかった理由を紹介しようと思います。時間がかかった理由なぜ、時間がかかったのかですが、Debian 13については簡単で、MariaDB 11.8の対応に時間がかかったからです。Debian 13が提供するMariaDBのバージョンは11.8です。そのため、MroongaがMariaDB 11.8で使えるようにならないと、Debian 13でMariaDB + Mroongaの組み合わせでMroongaを使えません。よって、MariaDB 11.8をサポートすればDebian 13向けのパッケージもリリースできることになります。しかし、MariaDB 11.8のサポートに時間がかかったため、Debian 13のサポートにも時間がかかったというわけです。では、MariaDB 11.8のサポートに時間がかかった理由を見ていきましょう。通常、新しいMariaDBがリリースされた時は、最新版のMariaDBを使ってMroongaをビルドし直すだけで、新しいバージョンのMariaDBに対応できます。ただ、MariaDBはバージョンアップの際にストレージエンジンに提供しているAPIを変更することがあります。(結構、頻繁に変更します。)このAPIの変更に追従しないと、Mroongaのビルドに失敗しパッケージを作ることができず、リリースできなくなります。そのため、新しいバージョンでAPIが変更された場合、その変更に追従するための改良をMroongaに入れることになりますが、変更の内容によっては、原因を突き止めるのが難し
3日前
記事のアイキャッチ画像
Red FlatBuffers:IO::Bufferを使ったpure Ruby FlatBuffers処理系
はてなブックマークアイコン 3
ククログ
これはRuby/Rails Advent Calendar 2025の9日目の記事です。Red Data Toolsをやっている須藤です。pure RubyでApache Arrowの実装を作ることにしたのですが、Apache Arrowの実装に必要なFlatBuffersがRubyをサポートしていなかったのでそこから作っています。FlatBuffersはパースなしでデータにアクセスできるシリアライゼーションフォーマットです。たとえば、"[10, "hello", true]"というようにJSONにシリアライズした場合は、文字列の"10"をパースして数値の10にしないとデータを使うことはできませんが、FlatBuffersではそんなことをしなくてもデータを使うことができるということです。FlatBuffersを使う場合は、まずスキーマを定義して、そのスキーマから各種プログラミング言語のソースコードを生成します。その生成されたソースコードを使うと、対象のスキーマ向けにシリアライズされたFlatBuffersデータにアクセスできます。ソースコードを生成するプログラムはC++で実装されているので、Rubyのソースコードを生成するモジュールをC++で実装したのですが、レビューもマージもされなそうな気がするので、pure RubyでFlatBuffersの処理系(FlatBuffersのスキーマからそれを処理するRubyのソースコードを出力するプログラム)を作ることにしました。それがRed FlatBuffersです。Red FlatBuffersはとみたさんが紹介していたIO::Bufferを使っているので、どう使っているのかを紹介します。ちなみに、Red FlatBuffersを作り始める直前くらいにFlatBuffers「も」処理できるUnibufが公開されていましたが、StringIO#readしてからString#unpack1するとか無駄なコピーをしていそうだったのでRed FlatBuffersを作ることにしました。io::buffer">Red FlatBuffersとIO::BufferFlatBuffersのウリはパースなしでデータを使えることです。パースなしで使えるということは、暗黙的にゼロコピーという性質もついてきます。Rubyで「パースなしでゼロコピ
3日前
記事のアイキャッチ画像
YoctoレシピをISAR向けに移植するときにはまらないためのヒント
ククログ
組み込みLinuxでは、ターゲットとなるOSをビルドするためのYoctoレシピが提供されていることがあります。そのような事例では、広く公開されているレシピをベースに、企業が独自に追加の修正を施したレシピを適用するということが行われたりします。今回は、そのようなYoctoのレシピをISAR向けに移植することになったときにはまらないためのヒントをいくつか紹介します。(Yoctoレシピにはある程度慣れているが、Debianパッケージにはあまり慣れていない人が対象です。)ISARとはYoctoのレシピは(提供元が異なっていても)ソースコードにパッチを積み重ねてビルドすることができたりするので、カスタマイズ性が高いという特長があります。その一方で、発覚した脆弱性にタイムリーに追従していきたい場合など、利用者自身によるメンテナンスコストが高くならざるを得ないという一面もあります。上記のような問題を解決する方法のひとつに、Debianのようなバイナリパッケージを配布しているディストリビューションの成果物と、Yoctoのレシピをカスタマイズしてビルドした成果物を組み合わせるというやりかたがあります。ISARは、そのようなやりかたを実現することのできるソフトウェアの1つです。ISARを利用すると、大部分のソフトウェアはDebianが提供するものを利用し、DebianになかったりするものだけYoctoのレシピを移植して使うということができます。Debianの成果物と組み合わせる場合には、長期サポート(LTS)で5年、さらにELTSを利用すると10年のサポートが得られるので、(組み込み製品にとって)Debian由来のものはそちらのアップデートを利用しつつ、独自にカスタマイズした部分のメンテナンスに注力できるというメリットがあります。また、Debianのパッケージを一部カスタマイズして採用するということもできます。ISARの利用者は、使い慣れたbitbakeコマンドを使って、パッケージをビルドしたり、OSのイメージを作成したりできます。実際にISARを採用している事例としては、EMLinuxがあります。1ISAR向け移植時のヒントISARはYoctoのレシピをベースに動作しますが、いわゆるソースディストリビューションとバイナリディストリビューションという異なるエコシステムをつなぎあわせて動
7日前
記事のアイキャッチ画像
AOSPエミュレーターイメージのカスタマイズ
ククログ
弊社では組み込みLinux機器向けのソフトウェア開発案件を承っておりますが、その一環でAOSP(Android Open Source Project)のカスタマイズについても実績があります。今回は、社内向け備忘録の意味も込めて、AOSPエミュレーターイメージのカスタマイズ方法について説明します。ビルド環境の用意まず、AOSPビルド用のOSを用意します。UbuntuのLTS版を使用するのが無難です。参考: https://source.android.com/docs/setup/start/requirementsUbuntu 24.04 LTS等の環境を用意し、以下コマンドにてビルド用のツールチェーンをインストールします。$ sudo apt update$ sudo apt install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig repoAOSPエミュレーターイメージのビルド最初に、ベースとなるAOSPのエミュレーターイメージをビルドします。AOSP 14をビルドするコマンド実行例を以下に示します。$ mkdir ~/aosp14$ cd ~/aosp14$ repo init --partial-clone --no-use-superproject -b android-14.0.0_r67 -u https://android.googlesource.com/platform/manifest$ repo sync$ source build/envsetup.sh$ lunch sdk_tablet_x86_64-ap2a-userdebug$ m$ m emu_img_zipエミュレーターイメージは以下に生成されます。$ ls out/target/product/emu64x/sdk-repo-linux-system-images.zip out/target/product/emu64x/sdk-repo-linux-system-imag
7日前
記事のアイキャッチ画像
PostgreSQL Conference Japan 2025:PostgreSQLでのセマンティックサーチへの挑戦 #pgcon25j
ククログ
PostgreSQL Conference Japan 2025に参加して、「PostgreSQLでのセマンティックサーチへの挑戦」というタイトルで発表をした堀本と阿部です。スライドを公開しましたが、補足・解説テキストを追加した記事も残します。発表の内容 PostgreSQLでのセマンティックサーチへの挑戦 主に次の4つについて発表しました。キーワード検索とセマンティックサーチの比較セマンティックサーチを実現するためにPostgreSQLでセマンティクサーチ性能とユースケースこの記事では特に補足説明が必要なところだけ抜粋して説明していきます。1. キーワード検索とセマンティックサーチの比較「ほぼ同じ意味だけど表現が少し違うデータ」を例にキーワード検索とセマンティックサーチの違いを説明しました。スライドの説明で内容はおわかりいただけると思いますので、本記事ではセマンティックサーチの課題についてだけ補足します。スライドを見ると、セマンティックサーチはあらゆる検索課題を解決してくれる万能な技術のように感じられるかもしれません。しかし、意味の関連性に基づいて情報を探し出す仕組みである一方で、必ずしもユーザーの意図と完全に一致した結果が得られるとは限りません。まずキーワード検索で必要な条件に合う範囲に絞り込み、その結果を意味的な類似度の高い順に並べ替える(リランク)、という組み合わせ方をすると、より目的に合った情報にたどり着きやすくなることもあります。これは「キーワード検索 + リランク」の例ですが、キーワード検索とセマンティックサーチのそれぞれで対象ドキュメント絞り込み、それをリランクするというアプローチもあります。重要なのは検索の要件や目的に応じて、キーワード検索とセマンティックサーチを適切に使い分ける、あるいは組み合わせて使うことです。2. セマンティックサーチを実現するために「IVF(Inverted File Index)」について説明していますが、スライド中に「IVF」という単語が登場しないので、その点だけ補足します。スライドでいうとこれとこれで説明しているのがIVFです。IVFは検索対象のベクトルデータをあらかじめ複数のクラスタに分類し、それぞれのクラスタを代表するベクトルをインデックスとして使う方式です。検索時にはクエリに最も近い代表ベクトルを持つクラスタを特
11日前
記事のアイキャッチ画像
須藤、空いています
ククログ
須藤です。Ruby関連の開発をしたり、Groonga関連の開発をしたり、Apache Arrow関連の開発をしたりしています。この3年くらいApache Arrowの開発がメインの業務でしたが、いろいろあって7割くらいなくなりました。お仕事のネタがないわけではないのでなにかしらでなくなった分を埋めることはできるのですが、せっかくの機会なのでどんなことをできる可能性があるのかを検討したいと思っています。ということで、私となにか一緒にお仕事をしたい人からの連絡を待っています!たぶん、数ヶ月くらいでだいぶ埋まると思うので、興味のある人は来年の1月一杯くらいまでに連絡をしてもらえるとうれしいです。やりたいこと連絡したい人からすれば私がなにをできるのかに興味があるとは思いますが、それは私のこれまでのアウトプットを参考にしてもらうことにして、私がやりたいことを書いておきます。私はRubyが好きなので、Ruby関連のお仕事をしたいです。ただ、普通にRuby on Railsアプリケーションを開発するようなお仕事はあまり興味がありません。Ruby on Railsアプリケーションで使うライブラリーの開発とかは興味があります。そうそう、来月RailsTokyo#2【sponsored by 株式会社タイミー】でRuby on Railsアプリケーションから使えるActive Record ADBC adapterを紹介する予定なので来てね。私はフリーソフトウェアも好きなので、成果をフリーソフトウェア(オープンソースソフトウェアだと思ってもらってもいいです)にできるお仕事をしたいです。他の人が成果をフリーソフトウェアにすることをサポートするお仕事にも興味があります。具体的な話になっていない状態でも構わないので、私となにか一緒にお仕事をしたい人はぜひご連絡ください!
15日前
記事のアイキャッチ画像
CloudNative Days Winter 2025で「クラウドネイティブ時代に進化し続けるFluentd」の発表を行いました! #CNDW2025
ククログ
こんにちは。Fluentdのメンテナーの福田です。2025年11月18日,19日に開催されたCloudNative Days Winter 2025にて、クラウドネイティブ時代に進化し続けるFluentdというタイトルで、弊社の藤田と一緒に発表を行いました。当日の発表内容を改めて紹介します。発表スライド クラウドネイティブ時代に進化し続けるFluentd 発表動画当日の発表(動画)のアーカイブは、次の公式ページにて公開されています。https://event.cloudnativedays.jp/cndw2025/talks/2700クリアコードでは、Fluentd関連動画を公開しているのであわせて参考にしてみてください。伝えたいこと: Fluentdは進化を続けているよ!この発表で一番伝えたいことは、Fluentdは進化を続けている、ということです。例えば、近年、次のような点でFluentdは進化をしてきました。OpenTelemetry対応ゼロダウンタイム・リスタート/アップデート機能の追加Zstandard圧縮機能サポートなどのパフォーマンス改善安定したログ収集マルチワーカー・スレッドなどの高負荷環境での安定動作障害時のリカバリー対策詳細は次のブログをご覧ください。Fluent Package v6 LTSで利用可能になった OpenTelemetry プラグインを紹介Fluent Package v5.2.0 リリース - ゼロダウンタイム・アップデートFluentdの安定版パッケージ新シリーズ Fluent Package v6 LTS リリース - 運用コスト・ランニングコスト削減また、コンテナ環境では、より軽量なFluent Bitがノードに組み込むログ転送エージェントとして多く使われるようになってきていますが、Fluent BitとFluentdを組み合わせることも可能です。リッチなフィルタリングやフォーマッティング処理が必要な場合は、ぜひFluentdのカスタマイズ性の高さを活かしてもらえればと思います。CloudNative Days Winter 2025では、今後のFluentdの活躍の可能性も感じました。というのも、AIのパイプライン上で、精度のために以前とは異なる観点でのデータ前処理が必要そう、という話が複数挙がっていたからです。そのよう
17日前
記事のアイキャッチ画像
Thunderbird版FlexConfirmMailユーザーの皆さまへのご案内:「自動更新あり」の状態を維持するための移行ガイド
ククログ
結城です。当社のメール誤送信対策製品「FlexConfirmMail」のThunderbirdアドオン版を従来から使用している方は、自動更新によって提供された最新バージョンとして4.2.5をお使いかと思います。現在、このFlexConfirmMailの不具合を修正し新機能を追加した新バージョンとして4.2.8が公開されていますが、従来からFlexConfirmMailをお使いの方の環境では、このバージョンは自動更新では反映されません。今後もFlexConfirmMailをThunderbirdでお使い頂く場合は、FlexConfirmMailの再インストールと設定の引き継ぎが必要となります。本記事では、FlexConfirmMailの再インストールおよび設定の引き継ぎが必要となっている背景事情を説明し、実際の引き継ぎ手順を説明します。背景実は現在、Thunderbird Add-onsのWebサイト上にはFlexConfirmMailという名前のアドオンが以下の2つ登録されています。FlexConfirmMail バージョン4.2.8識別子は flex-confirm-mail-progressive@clear-code.com通称「通常版」FlexConfirmMail Stable バージョン4.2.5識別子は flex-confirm-mail@clear-code.com通称「安定版」FlexConfirmMailは元々、識別子が flex-confirm-mail@clear-code.com である物のみが存在していました。2025年5月1日以前からFlexConfirmMailを使われていた方の環境にはこちらがインストールされており、自動更新も行われていました。ここで、ある時期に当社サポートサービスのお客様の環境で、FlexConfirmMailについて「不具合修正などは引き続き自動更新で適用したい」「新機能は自動更新で反映されて欲しくない」という、保守的な運用が必要な状況が発生しました。このような場合、通常リリースとは更新チャンネルを分けた「安定版」を新たに設けて1、保守的な運用が必要な利用者のみにそちらへの切り替えを案内するのがセオリーです。しかしながら、こちらのお客様の環境では端末数が非常に多く、集中管理も徹底されていない場合があるなどの事情か
22日前
記事のアイキャッチ画像
RubyWorld Conference 2025 - Ruby Prize 2025最終ノミネート者
ククログ
Ruby Prize 2025で最終ノミネート者に選んでもらった須藤です。RubyWorld Conference 2025内で表彰式があったので参加しました。Ruby Prize 2025最終ノミネート者はStanさんと田篭さんと私の3人で、受賞者はStanさんでした。おめでとうございます!みんなで写真を撮りました。#rubyfriends#rubyworld@tagomoris @ktou pic.twitter.com/9IiQaFytBo— Stan Lo (@_st0012) November 6, 2025 #rubyfriends on stage! for #rubyprize pic.twitter.com/ZmW1dkUOLo— tagomoris (@tagomoris) November 6, 2025 トロフィーと賞状と賞金10万円をもらいました。#rubyworld Ruby Prize 2025の最終ノミネート者になったよー pic.twitter.com/UNbBm2ohxM— す (@ktou) November 6, 2025 最終ノミネート者の1人としてまつもとさんにインタビューしてもらいました。後日、Ruby Prize 2025のサイトにYouTubeにアップロードされた動画が埋め込まれるのではないかと思います。これはインタビュー後の写真です。RubyWorld Conference2025お疲れ様でした‼️Rubyコミュニティの暖かさと力強さを感じた2日間でした🎉Ruby Prize最終ノミネートの皆様も松江にお越しいただきありがとうございます!また来年の12月にお会いしましょう🍻 #RubyWorld pic.twitter.com/vI5Ae3Bo6D— Ruby City MATSUE (@rubycitymatsue) November 7, 2025 まつもとさんからの受賞理由のコメントにはRabbitのメンテナンスが挙がっていました。まつもとさんがなかなかMagicPointからRabbitに乗り換えてくれなくて、まつもとさんのプレゼンのあとに「いつRabbitに乗り換えますか?」と質問していたのが懐かしいです。まつもとさんのプレゼンを支えられて誇らしいです。そうそう、RubyWorld Conferenc...
22日前
記事のアイキャッチ画像
Fluent Package v6 LTSで利用可能になった OpenTelemetry プラグインを紹介
ククログ
2025年8月29日に、Fluentd の安定版パッケージ Fluent Package v6 LTS をリリースしました。この v6 LTS ではいくつかのプラグインを新たに同梱しており、そのひとつが OpenTelemetry プラグイン です。このプラグインを利用すると、Fluentd から直接 OpenTelemetry Collector や OTLP 対応サービス(Grafana Tempo、Datadog、New Relic など)へログを転送できます。本記事では、この OpenTelemetry プラグインの概要と基本的な使い方を紹介します。OpenTelemetry とはOpenTelemetry は、アプリケーションやインフラの ログ・メトリクス・トレースを統一的に収集・転送するためのオープンソースプロジェクトです。CNCF(Cloud Native Computing Foundation)が中心となり開発が進められており、主要なクラウドサービスや監視基盤が広く対応しています。OpenTelemetry を利用すると、異なる言語やサービス間でも共通の OpenTelemetry Protocol (OTLP) でデータをやり取りできます。たとえば、アプリケーションのトレース情報や Fluentd が収集したログを同じ Collector に送信し、一元的に可視化・分析することが可能になります。Fluentd がこの仕組みに対応することで、既存のログ収集パイプラインを保ちながら OpenTelemetry ベースの観測基盤へスムーズに統合できるようになります。OpenTelemetry プラグインの概要fluent-plugin-opentelemetry は、現在、以下の 3 つのプラグインで構成されています。プラグイン名役割説明in_opentelemetry受信アプリケーションが OpenTelemetry SDK を使って送信したトレース・メトリクス・ログデータを受信します。Collector の代替入力として利用可能です。out_opentelemetry送信Fluentd 内で処理したイベントを OTLP 形式で Collector や対応サービスに転送します。in_opentelemetry_metricsメトリクスFluentd
25日前
記事のアイキャッチ画像
頑なに再代入しない!
ククログ
頑なに再代入しない阿部です。YAPC::Fukuoka 2025で頑なに再代入しない!というタイトルでトークします。スライドも公開しますが、発表用のスライドのため十分な説明が記載されていないので、解説テキストを追加したブログ記事も残します。はじめにトークの説明からコードを読んでいると、この変数はどこで定義され、どこで値が設定されたのか?を確認することがしばしばあります。再代入が多いとどのタイミングで値が変更されるのか?を確認するコストが発生するので、私はめんどうだと思ってしまいます。また、再代入がないほうがメンテナンス性が高いと信じています。なぜならば、すべてが再代入なし(= すべてが定数)の方がバグが生まれにくいはずだからです。(いわゆる関数型プログラミング、というやつです。)と、いうことで私は基本的に再代入をしないコードを書くように心がけています。(もちろん、それによるデメリットがあるのも承知でそのようにしています。)私が始めたOSSではありませんが、現在は9割方私が書いたコードになっているnode-lambda ( https://github.com/motdotla/node-lambda ) (JavaScriptです)を例に、頑なに再代入をしない(関数型プログラミング)を実践した例を紹介します。(これまではデメリットについて、厳密に検証したことがなかったのですが、改めて検証してまとめてデメリットについても発表します。)大規模開発の参考になること間違いなし!という文面で応募しました。私の「頑なに再代入しない!」思いをぶつけるための発表です。イメージしやすいように「関数型プログラミング」という単語を出しましたが、「関数型プログラミング」についての話ではないことをご理解の上お読みください。内容頑なに再代入しない!ワケ再代入しない!コード例再代入しない!デメリット検証再代入しない!実践してみて頑なに再代入しない!ワケ再代入のコード例頑なに再代入しない!ワケの説明の前に再代入しているコードがどういうものか例で示します。let price = 100if (キャンペーンA期間中) { price = price * 0.8}// ...if (キャンペーンF期間中) { // キャンペーンF期間中のみ税込価格から2割引 price = (price * 1.1)
1ヶ月前
記事のアイキャッチ画像
LTS版 Fluent Package v6.0.1をリリース
ククログ
2025年11月11日にLTS版 Fluent Package v6.0.1をリリースしました。本記事では、Fluent Package v6.0.1の変更内容を紹介します。Fluent Package v6.0.1Fluent Package v6.0.1では、以下の改善を行いました。Rubyのバージョンを3.4.7にアップデート同梱のFluentdをv1.19.0からv1.19.1に更新tmpfiles.dによってFluentdの一時ディレクトリーが消去されてしまう問題を修正Windows版インストーラーで、空白を含むパスへのインストールがエラーとなる不具合を修正この記事では、Fluent Package v6.0.1の主な変更点を詳しく解説します。変更内容の詳細Rubyのバージョンを3.4.7にアップデートRuby 3.4.7には複数のバグと脆弱性の修正が含まれています。詳細はRuby 3.4.7 リリースノート をご覧ください。同梱のFluentdをv1.19.0からv1.19.1に更新Fluentd v1.19.1では以下の修正が含まれています。YAML形式の設定: 配列表記をサポートこれまで複数の値を設定する場合には、retryable_response_codes: 503, 504 のようにカンマ区切りで値を記述する必要がありました。この修正により、retryable_response_codes: [503, 504]やretryable_response_codes: - 503 - 504と、よりYAML形式らしく記述できるようになりました。※ $arg という特殊な要素のみ、以前から配列表記をサポートしてました。※ 配列で設定するオプションに、単一の整数値を指定すると設定エラーが発生する問題がまだあります。詳細については #5149 を参照ください。tmpfiles.dによってFluentdの一時ディレクトリーが消去されてしまう問題を修正Fluent Package v5.0.8 で先行して修正されていた不具合を、Fluent Package v6.0.1 に取り込みました。一部のLinuxディストリビューションでは、以下のようにtmpfiles.dが設定されており、一時ディレクトリー/tmp内のファイルやディレクトリが10日以上使用されない
1ヶ月前
記事のアイキャッチ画像
2025年度Rubyアソシエーション開発助成金:pure Ruby Apache Arrowの実装
ククログ
Apache Arrowの開発に参加している須藤です。この数年度はRubyアソシエーション開発助成金をメンターとしてお手伝いしていたのですが、今年度は開発する側として参加します。拡張ライブラリーとかを使わずにRubyのみでApache Arrowフォーマットのシリアライザー・デシリアライザーを開発します。応募背景2025-08-28に開催されたRuby Association Activity Reportは2024年度の開発助成事業の成果発表もありました。私は2つのプロジェクトのメンターをしていたので参加しました。そのときの懇親会で開発助成事業をもっとよくするにはどうしたらよいと思う?というような話があったので、私の思う課題を考えてみたのでした。それの解決案の1つが自分が応募するだったので応募しました。でも、それだとスケールしないので、よい解決案ではないんですよね。。。今年度のプロジェクトをやりながら別の案を考えます。。。応募内容Rubyのみで実装されたApache Arrowのシリアライザー・デシリアライザーが欲しいなぁとはActive Record ADBC adapterを作っているときに思っていました。そして、少しずつ作り始めていました。私は仕事の時間も趣味の時間もフリーソフトウェアの開発をしていますが、キャパオーバーで追加でなにか新しいことをやっている余裕はありません。開発助成事業用に新しいことをやる余裕はありません。そのため、開発助成事業に関係なくやるつもりのやつを題材にする必要があり、少しずつやり始めていたApache ArrowのRuby実装で応募しました。応募内容は次のとおりです。これからRubyアソシエーション開発助成金に応募したい人の参考になるといいなぁと思うので共有します。応募者名:株式会社クリアコード担当者名:須藤功平連絡先電子メールアドレス:kou@clear-code.com略歴:応募者:2006年7月設立。Rubyを組み込んだ製品やRubyバインディングを持つ製品、Rubyで開発された製品の開発・メンテナンスをしている。RubyKaigi(旧日本Ruby会議)には2009年よりスポンサーしてRubyを応援している。担当者:2004年よりRubyコミッターとして標準添付ライブラリーを開発・メンテナンスしている。2017年よりApach
1ヶ月前
記事のアイキャッチ画像
実践!Perlのワンライナー ~Perlがあれば何でもできる~
ククログ
Perl大好き阿部です。YAPC::Fukuoka 2025でトークできることになりました。内容の概要はこちらをご覧ください!その内容がPerlにまったく関係ないので、Perl好きの断片を語るための記事です。はじめにタイトルからもわかる通りPerlのワンライナーを紹介します。私はPerlのワンライナーを普段からよく使っています。(Perlでだいたい達成できるため、いまだにsedとawkの文法を覚えていません ;-()ということで、本記事ではPerlがあれば何でもできると題しまして、grep、sed、awkと同様のことをPerlのワンライナーで実現する方法を紹介します。注意:ワンライナーはいろいろ省略した状態なので、それだけを見ても何が起きているのかわかりにくいです。そこで「省略しないPerlのコードだとこういうイメージ」というのを合わせて紹介していきます。わかりやすさを優先するので、正確ではないところもあると思いますがご容赦ください。前提Perlの文法をわかっていたほうが理解しやすいので、このあとの説明に必要なところだけを簡単に紹介します。(細かい話はしません。)$_">標準入力の読み込みと$_Perlでは次のように書くと、標準入力を1行ずつ処理できます。foreach my $line (<STDIN>) { print "$line";}$line に標準入力が1行ずつ入ります。example.pl という名前で保存して実行したイメージは次の通りです。$ ls / | perl ./example.plbin@boot/cdrom/dev/etc/home/lib@lib32@lib64@libx32@lost+found/media/mnt/opt/proc/root/run/sbin@snap/srv/swapfilesys/tmp/usr/var/そしてここからが本番です。Perlといえばの$_です!先ほどのコードは次のようにも書けます。foreach (<STDIN>) { print;}これも保存して実行すると先ほどと同じ結果が得られます。いろいろ省略されていて何が起きているのかわからないですね!Perlは変数を省略すると、自動的に$_に値が設定され、またそれを参照するという便利?機能があります。$_ を明示的に書くと次の通りです。foreach $_
1ヶ月前
記事のアイキャッチ画像
実装者向けのApache Arrowフォーマットの説明
ククログ
Apache Arrowの開発に参加している須藤です。Apache Arrowフォーマットの説明をするときはどうして速いのかやどうして効率がよいのかに注目して説明していました。今回は、Apache Arrowフォーマットのシリアライザー・デシリアライザーを実装する人向けに説明します。Apache Arrowフォーマットの仕様Apache Arrowフォーマットの仕様は https://arrow.apache.org/docs/format/Columnar.html と https://github.com/apache/arrow/tree/main/format で提供されています。前者がテキストでの説明で、後者がそこから参照されているFlatBuffersの定義ファイルです。ここで説明することはこれらを実装者向けに解説したものになります。ここで説明する内容によってこれらの理解を助けるはずですが、最終的にはこれらを参照しながら実装することになります。Apache Arrowフォーマットデータの概観ここではApache Arrowフォーマットで表現されたデータをApache Arrowフォーマットデータと呼ぶことにします。Apache Arrowフォーマットデータは型付きの列指向のテーブルデータを表現しています。Apache Arrowフォーマットデータ+----------------+| 型付き || 列指向 || テーブルデータ |+----------------+テーブルデータは0個以上の「レコードバッチ」に分割されて表現されます。Apache Arrowフォーマットデータ+---------------------------------------------+| 型付き || 列指向 || テーブルデータ || +=================+ +=================+ || | レコードバッチ1 | | レコードバッチ2 | ... || +=================+ +=================+ |+---------------------------------------------+レコードバッチの中に各カラムのデータがあります。Apache Arrowフォーマットデータ+-----------
1ヶ月前