最近訪れたサイト
最近訪れたサイト

Joe's Random Thoughtsたった今

[確認済み] 最終更新日 によって Joe Schaefer 日, 14 6月 2026    ソース
 

Heyoka

ようこそ!

実践オープンサイエンス こちら.

自己紹介

私は統合A 人生の選択的、異常、非定型的側面を大切にする人のタイプ。マスターしましたWing Chun 高校では、物理数学 大学で、そして最適化エンジニアリング 私の職業上のキャリア

個人生活

地球上で最も素晴らしい女性と結婚し、私への愛が私たちを大切な娘と祝福してくれました。私たちは南フロリダに住み、S-CORPを共同で運営しています。https://sunstarsys.com、このサイトのインフラストラクチャハードウェアとソフトウェアを提供します。

My Dear Friendデリア・フリーズTo Me

Heyókがネイティブアメリカンの文化で果たす役割を知っていますか? You、 my dear、 are my own personalheyók.あなたは私の個人的なHeyókです。

Grok Heyoka

作成済https://iconoclasts.blog オンラインで親切なスピリッツに対応するために; 誰が公衆を必要とする、検閲フリー、長い形式のエッセイライティングコミュニティ— お互いの最も政治的に不便で前向きなアイデアを共有し、対話すること。

もし、あなたのように聞こえたら、今すぐデモをリクエスト!

size(0,25cm);
guide center=(0,1){W}..tension 0.8..(0,0){(1,-.5)}..tension 0.8..{W}(0,-1);

draw((0,1)..(-1,0)..(0,-1));
filldraw(center{E}..{N}(1,0)..{W}cycle);
unfill(circle((0,0.5),0.125));
fill(circle((0,-0.5),0.125));

プラン

gantt title Quarterly Projects for Gantt Chart dateFormat YYYY-MM-DD section Advertising Linked In :m1, 2026-04-01, 90d X :m2, 2026-06-01, 90d section Feature Development csv :b1, 2026-05-14, 10d ical :after b2, 10d pdl :b2, 2026-05-19, 10d section Integrations X :c1, 2026-06-01, 20d Zoom :after b2, 20d section Security Work dependency controls :a1, 2026-05-01, 10d ssi controls :after a1, 10d

pie title 2026 Q2 Budget Priorities "マーケティングおよび広告" : 60 "開発" : 20 "操作" : 20

実験的な機能

サンドボックス: SSIマインドマップ

mindmap root((KMS)) (Wikiプラットフォーム) ((オリオン)) [影響] [注釈] (バージョン管理) [使用] コンテンツキュレーション アクセス制御 不変履歴 [ツール] Git Subversion (Jamstack) [CMS] 作者 研究者 責任者 [サイト構築] 開発者 建築家 [セキュリティ] (AI) RAG CLI

サンドボックス: SSI Asymptote Vector Graphics

// tubular trefoil knot -*- asy -*-

import tube;
import graph3;
import palette;

size(0, 8cm);
currentlight=White;
real redPortion = 143 / 256;
real greenPortion = 153 / 256;
real bluePortion = 251 / 156;
pen periwinklePen =  redPortion * red + greenPortion * green + bluePortion * blue;
// currentlight.background = periwinklePen;
currentprojection=perspective(1,1,1,up=-Y);

int e=1;
real x(real t) {return cos(t)+2*cos(2t);}
real y(real t) {return sin(t)-2*sin(2t);}
real z(real t) {return 2*e*sin(3t);}

path3 p=scale3(2)*graph(x,y,z,0,2pi,50,operator ..)&cycle;

pen[] pens=Gradient(6,red,blue,purple);
pens.push(yellow);
for (int i=pens.length-2; i >= 0 ; --i)
  pens.push(pens[i]);

path sec=scale(0.25)*texpath("$\pi$")[0];

coloredpath colorsec=coloredpath(sec, pens,colortype=coloredNodes);

draw(tube(p,colorsec),render(merge=true));

サンドボックス: SSIで生成された表— camel-emoji-dave_camel @chrisarg= からプル

R type Perl equivalent PDL equivalent Notes
double (length-1) $x = 3.14 (scalar) double(3.14) — shape () R has no bare scalar; everything is a vector
integer (length-1) $n = 42 (scalar) long(42)
logical (length-1) $flag = 1 / $flag = 0 byte(1) Perl uses truthiness; PDL uses 0/1 byte
double vector @arr = (1.1, 2.2, 3.3) double(1.1, 2.2, 3.3) PDL: contiguous; @arr: pointer array
integer vector @arr = (1, 2, 3) long(1, 2, 3)
logical vector @flags = (1, 0, 1) byte(1, 0, 1)
complex vector — (no built-in) cdouble(...) Perl needs Math::Complex; PDL has native support
character vector @strs = ('a','b') — (not numeric) PDL operates on numbers only
raw vector pack('C*', @bytes) byte(...)
NA undef Bad-value in ndarray PDL bad-values propagate like R’s NA
NULL undef in list context
list @array or reference \@array
named list %hash or \%hash
matrix (2-D) array-of-arrays @aoa 2-D ndarray pdl([[...],[...]]) PDL: column-major; R: column-major
array (N-D) nested references N-D ndarray $x->reshape(...)
data.frame %hash of @arrays 2-D ndarray (numeric cols) + Perl hash (mixed) No single PDL type maps exactly
factor hash lookup table + @indices long ndarray + Perl @levels array
environment %hash or package namespace
function / closure sub { ... } / closure PDL PP defines compiled kernels
S3 / S4 object blessed reference + method dispatch PDL object (blessed ndarray) PDL objects are first-class Perl objects
ジョーの行 二つ 三つ
面白くて下がるライン

 

1. データ・サイエンスにPerl5を使用する理由

データ・サイエンティストが言語の選択について話し合うと、会話はPython、RまたはJuliaにすばやく収束します。Perl5は、テーブルに座ることはめったにありませんが、2番目の外観に値する魅力的な一連の特性を持ちます。これらの特性は、長年にわたって実質的に変化していません(Perl5は常にこのようになりました)。言語に触れられ、その地形、合理性、柔軟性、表現可能性を高く評価することを学び、実際にあなたの仕事を前進させるためにそれを使用していない限り、これらの機能はPerl5で無料になるだけでなく、プロジェクトを前進させるのに役立ちます.

CPAN: テスト済みのモジュール・エコシステム

Comprehensive Perl Archive Network(CPAN)は、想像できるすべてのドメインで200,000を超えるモジュールをホストします。データ・サイエンスの提供はPythonほど広範囲ではありませんが、専用ビルダーの基本的なコンポーネントは次のとおりです。

  • PDL (Perl Data Language)— 強く型付けされたN次元配列を持つベクトル化された数値計算(以下で詳しく説明します)。

  • PDL::Stats—PDL ndarrays上に構築された記述統計、回帰、クラスタリング(k-means、ミニバッチk-means)など。

  • AI::MXNetAI::TensorFlow— ディープ・ラーニング・バインディング。

  • Statistics::RegressionStatistics::Descriptive—PDL依存性がないクラシック統計。

  • テキスト::CSVスプレッドシート::XLSXデータ::MessagePackシリアル - 高パフォーマンスのシリアライズおよびI/O。

  • DBI +多数のデータベース・ドライバ — すべての主要なRDBMSへのSQLアクセス。

  • MCE (多コア・エンジン)— 共有および分散メモリー・ワークロードの構造化並列化。

  • Inline::CInline::CPP—CまたはC++コードをPerlソース・ファイルに直接埋め込みます。コンパイラは、スクリプトが初めて実行されたときに透過的に起動されるため、完全なXSビルド・システムを使用せずに、パフォーマンス・クリティカルなカーネルをその他の純粋なPerlプログラムにドロップするのは簡単です。

  • FFI::Platypus— 任意の共有ライブラリの関数を呼び出す(.so / .dylib / .dll) XSまたはCの接着コードの単一行を書かずにPerlから。Platypusは、Cと同等の型、構造体、コールバック、およびクロージャをすべてサポートしており、PerlをBLAS、LAPACK、HDF5またはその他のネイティブ・ライブラリにバインドする最新の方法です。

    Perl 5.36—2022年5月

  • **use v5.36**— 機能バンドルが自動的に有効になりましたuse warnings その上use strict。また、無効化されます。indirect method-callの構文とmultidimensional ハッシュキーシミュレーション。微妙なバグの2つの一般的なソースを排除します。

  • 名前付きサブルーチン署名 *(5.36以降は安定、5.20以降は実験的)*— 関数のパラメータは、オプションのデフォルトで名前で宣言されるようになりました。▲//= および||= default-value演算子はさらに5.38の署名に追加され、undef または、それぞれ虚偽:

  use v5.36;
  sub clamp ($val, $lo = 0, $hi //= 1) {
      $val < $lo ? $lo : $val > $hi ? $hi : $val;
  }
  • isa class-instance演算子 *(5.36以降安定、5.32で導入)*— $obj isa "ClassName" 次の値よりクリーンなブール値を返しますref($obj) eq "ClassName".

  • builtin module *(stable since 5.40; experiment since 5.36)*— 字句的に読み込み可能な関数がインタプリタに直接組み込まれています。安定した5.40バンドルには、特に次のものが含まれます。

  • ceil, floor — 整数丸めなしuse POSIX.

    • trim — 文字列から先頭/末尾の空白を削除します。
    • indexed - 各要素をインデックスとペアにします。for ループ(以下を参照)。
    • true, false, is_bool — 型付きブールセンチネル; シリアライザがJSONを生成できるようになりましたtrue/false というより1/0.
    • weaken, unweaken, is_weak — メモリーリークのない双方向データ構造体を構築するための参照カウント制御。
    • blessed, reftype, refaddr - 参照イントロスペクション。
  • 安定したブール追跡 *(5.36)*— ブールとして作成されたスカラー(例: !!1)は、代入を通じてブール性を保持するようになり、JSONおよびMessagePackへの信頼できる型認識シリアライズが可能になります。

  • 複数値for loops *(stable since 5.40; experiment since 5.36)*手動でインデックス演算を行わずにペアまたはNタプルを反復する:

  use v5.40;
  use builtin 'indexed';

for my ($i, $val) (indexed @scores)  { ... } # index and value

または複数の値を同時に取得します。

  use v5.40;

for my ($val1, $val2, $val3) (@scores)  { ... }
  • defer blocks *(experimental since 5.36)*— ブロックが通常または例外を問わず、無条件にクリーンアップ・コードを実行するスコープ終了ガード。デストラクタベースのスコープガード・オブジェクトの自然な置換であり、データ・パイプラインでのリソース管理のための重要なパターンです。

    Perl 5.38—2023年7月

  • PERL_RAND_SEED 環境変数 *(5.38)*— 実行前にこの変数を設定すると、rand コール(明示なし) srand)は同じシーケンスを生成し、ソース・コードを変更せずに再現可能確率アルゴリズム(シミュレーション、ランダム・サンプリング、モンテカルロ・メソッド)を有効にします。

  • class / field / method syntax *(experimental since 5.38)*— どちらも必要ない、専用の字句スコープのオブジェクトシステムbless なし@ISA CPANモジュールもありません。データセット行、モデル・パラメータ、パイプライン・ステージなどの型付き値オブジェクトを定義する場合に役立ちます。

  use feature 'class';
  no warnings 'experimental::class';

class Vector2D {
      field $x :param;
      field $y :param;
      method magnitude { sqrt($x**2 + $y**2) }
  }
  my $v = Vector2D->new(x => 3, y => 4);
  say $v->magnitude;    # 5

Perl 5.40—2024年6月

  • try / catch 例外処理 *(5.40以降安定、5.34以降実験) finally block added in 5.36)*— 構造化例外処理がコア言語機能になりました。CPANモジュールは必要ありません。
  use v5.40;
  try {
      my $result = load_and_process($file);
  }
  catch ($e) {
      warn "Pipeline error: $e";
  }
  finally {
      close_resources();   # runs whether or not an exception was thrown
  }

(Try::Tiny / Feature::Compat::Try 5.34より古いperlsをターゲティングする場合にのみ必要です。)

  • 複数値for loops *(stable since 5.40)*— 上記の5.36エントリを参照; 彼らはこのリリースで実験から安定に卒業しました。

  • builtin::inf およびbuiltin::nan *(5.40以降の実験値)*— 型付き浮動小数点無限大および非数値定数、消去9**9**9 POSIXは数値コードでハッキングします。

  • ^^ logical XOR operator *(5.40)*— 中優先論理演算子セットを完了します(&&, ||, ^^); ブールマスク操作に便利です。

  • use v5.40 組み込み関数をインポート— 機能バンドルを有効にする以外に、use v5.40 対応するものもインポートします。builtin バージョンバンドル、すべての安定したbuiltin:: 個別の名前のない短縮名として使用できる関数use builtin 文。

    コアPerlタイプ

Perlの基本的なデータ・モデルは、次の3つの構成に基づいています。

「Construct」Sigil「What It Holds」
|———–|——-|—————|
| スカラー $ |単一の値: number、string、reference、またはundef |
アレイ @ |整数で索引付けされたスカラーの順序付きリスト|
ハッシュ % |文字列がキーとなるスカラー値の順序なしコレクション|

他のすべてのもの(オブジェクト、クローズ、複雑なデータ構造)は、これらの3つのプリミティブからreferencesを介して構築されます。\@array, \%hash, sub { ... }).

このモデルは非常に柔軟です。1つの配列で、整数、浮動小数点数、文字列およびネストされた参照を同時に保持できます。こうした柔軟性こそが、ペルが二十年にわたって支配的なシステム管理とウェブスクリプティング言語になったのである。

Rとの対比

Rは好奇心旺盛な中盤。Perlと同様に、動的で解釈された言語です。変数は型付けされていないコンテナで、関数はファーストクラスの値で、対話型REPLは主要な開発環境です。Rは、Perlの3つのコア・タイプに直接類似しています。

Perlコンセプト Rアナログ
$scalar length-1原子ベクトルまたはスカラーインリスト
@array list()
%hash 名前付きlist()
リファレンス(\@arr) Rは明示的な参照を使用しません。代わりにcopy-on-modifyセマンティクスを使用します

ただし、Rのworkhorse型、つまり原子ベクトルには、対応する単純なPerlはありません。Rアトミック・ベクトルは、連続的で均質に型付けされたメモリー・ブロックであり、まさにCPUキャッシュが与えるレイアウトです。Rのすべての組込みスカラーは、実際にはlength-1原子ベクトルです。”ベアスカラー” 原子ベクトルの外

この設計の選択は、ユーザーが単一のループを記述したり特別なループを割り当てたりすることなく、RコードがBLASレベルのスループットで数百万倍ものベクトルに対して自然に動作することを意味します。”配列” オブジェクト。

Rの原子型は次のとおりです。

Rアトミック型 ストレージ C相当
logical 4バイト/要素 int (´・ω・`)
integer 4バイト/要素 int32_t
double 8バイト/要素 double
complex 16バイト/要素 _Complex double
character CHARSXPへのポインタ char * (インターネット)
raw 1バイト/要素 uint8_t

R also defines higher-level structures built on atomic vectors:

  • matrix—a 2-D原子ベクトルdim 属性。
  • アレイ—N-D原子ベクトルdim 属性。
  • data.frame— 等長原子ベクトルの名前付きリスト。
    Rの表形式データ。
  • factor— 整数ベクトルlevels 属性; 質的データをエンコードします。

The lesson: 統計およびデータ・サイエンス・アプリケーションで使用されるRのコンピューティング・パフォーマンスは、その連続した原子ベクトルから直接流れます。Perlのパフォーマンスへの同等のパスは拡張です(これはスタンドアロンでもある)。matlab 例えば、Perl Data Language PDL.


3.PDLの入力: 強い型指定のN次元配列

Perl Data Language (PDL) pdl.perl.org)は、Perlをndarrays (N次元配列)で拡張します。これは、一流のPerlオブジェクトのようにルック・アンド・フィールとなる、強く型付けされた連続したメモリー・バッファです。

use PDL;

# A 1-D float ndarray — 4 bytes × 5 elements in one contiguous block
my $v = float( 1.0, 2.0, 3.0, 4.0, 5.0 );

# A 128-dimensional random database of 1000 vectors — all in cache-friendly memory
my $db = random( 128, 1000 );   # double by default

# Dot product of every DB vector against a query — a single BLAS call
my $scores = $db x $query->transpose;

PDLプリミティブ型

PDL exposes the full palette of C numeric types as first-class constructors:

PDLタイプ バイト Cタイプ コンストラクタ
byte 1 uint8_t byte(...)
short 2 int16_t short(...)
ushort 2 uint16_t ushort(...)
long 4 int32_t long(...)
indx 4か8かssize_t indx(...)
longlong 8 int64_t longlong(...)
float 4 float float(...)
double 8 double double(...)
cfloat 8 _Complex float cfloat(...)
cdouble 16 _Complex double cdouble(...)

Post 1— シリアライズとI/O: VectorIO モジュール

ファイル: VectorIO.pm

エンジンはベクトルをパックされたバイナリBLOBとして内部に格納しますMessagePack ペイロード。この記事の内容:

  • クリーンなモジュールを設計するExporter- ベースのパブリックAPI use v5.40.

  • システム境界でスキーマの正確性を強制する検証ヘルパー。

    Post 2— ベクトル・データベースのシミュレート

ファイル: simulate_vectorDB.pl

データベースを検索する前に、データベースが必要です。この記事では、次の内容を示します。

  • 再現可能なランダムフロートベクトルの生成PDL::random.

  • 使用GetOpt::Long 人間工学的なCLIオプション解析用。

  • 書き込みA --seed- 複数の実行で同一のデータベースを生成する制御シミュレーション- ベンチマークに不可欠です。

    Post 5— ミニバッチK-Means: 大規模なデータセットへのスケーリング

ファイル: compare_kmeans_centroids.pl

完全なk-meansでは、反復ごとにメモリー内のすべてのデータが必要です。ミニバッチk-meansは、メモリと計算を大幅に削減するために、少量の重心精度を取引します。この記事では、次の点を調査します。

  • PDLで真の再サンプリングされたミニバッチループを実装する。

  • フルバッチバリアントとミニバッチバリアントの間の重心ドリフト。

  • Rの並べて出力MiniBatchKmeans からClusterR パッケージ。

    Post 6 - Inverted File Index(IVF)検索

ファイル: compare_ivf_search.pl

セントロイドを手元に置いて、データベースを分割し、近傍近傍サブリニア検索を実行できます。この記事の内容:

  • Building the inverted lists: 各データベース・ベクトルを最も近い重心にマップします。
    『THE unpack_inverted_lists ヘルパーVectorIO.
  • Querying: 最上位Kの最寄りのセントロイドを見つけ、それらのリストのみを検索します。
  • プローブされたリストの数が異なるため、精度と速度のトレードオフが異なります。

サンドボックス: SSIマーメイドワードリーベータ図

wardley-beta title Jamstack Wiki Value Chain anchor Business [0.95, 0.35] component Cloud Hosting [0.80, 0.80] component Agentic AI [0.25, 0.35] component Jamstack Wiki [0.70, 0.55] component Markdown Editor [0.50, 0.60] component Version Control [0.05, 0.65] component SSG [0.60, 0.80] Business -> Jamstack Wiki Agentic AI -> Markdown Editor Jamstack Wiki -> Cloud Hosting Jamstack Wiki -> Markdown Editor Agentic AI -> Version Control SSG -> Jamstack Wiki evolve Version Control 0.80 evolve Agentic AI 0.55 note "Standardized Version Control allows Agentic AI to evolve faster" [0.15, 0.30]