記事へ Seisuke Nakahashi · 2024年12月11日 こちらの Zen Report の削除時期は延期となり、「2025.3 から削除予定」 に変更されました(情報元)終了時期が確定次第、あらためてコミュニティで発表予定です。
記事へ Seisuke Nakahashi · 2024年12月4日 @Akio Hashimoto さん 失礼しました、ほんとうですね。記事をよく読むと「venv 環境から IRISインスタンスに接続して SQL実行できます」って書かれていました。逆でした・・・ 残念ながら、現時点 (2024年12月時点) の Embedded Python では、venv のような仮想環境の作成は対応していません。そのため、別に作成された仮想環境にアクセスしたりインポートもできない状態です。 いつか対応してくれるといいな、と私も思っています!
記事へ Seisuke Nakahashi · 2024年12月4日 Akio さん、こんにちは!venv 用の IRIS Embedded Python へのラッパーが、GitHub で公開されています。https://github.com/grongierisc/iris-embedded-python-wrapper紹介DC記事 https://community.intersystems.com/post/embedded-python-virtual-environe...紹介DC記事は、コメント側に最新 alias コマンドが掲載されていますのでご注意ください。どちらも英語ママですが、こちらお役に立てそうでしょうか?
記事へ Seisuke Nakahashi · 2024年11月29日 > ちなみに、メッセージの出力を制御するのは難しいのでしょうか? できるかもしれませんが、"CacheQuality for Visual Studio Code" については詳しくなく・・・。 あと、私も Akio さんと同じく、コーディング中に赤線が出るのは好きではないため、VSCode の設定で以下のように設定しています 😆 "intersystems.language-server.diagnostics.suppressSyntaxErrors": [ "COS", "SQL", "CLS" ],
記事へ Seisuke Nakahashi · 2024年11月28日 Akio Hashimoto さん いろいろ大変でしたね。。。 ご質問が「プロジェクト単位で、この拡張機能をON/OFFしたい」という意味でしたら、 ・CacheQuality for Visual Studio Code を、拡張機能から一旦 Disable にして・そのあと、同機能を有効にしたいワークスペースで 「Enable (Workspace) を選択」 でいかがでしょう?
記事へ Seisuke Nakahashi · 2024年11月24日 @Yuji Ohata さん、面白い話題をありがとうございます! ご質問への直接な回答としては「DBeaver が文字列、ObjectScript経由が数値として入る差異は製品仕様で、回避する方法がない」になります。。 背景やその他おもしろ情報を以下お伝えしますね。 ObjectScriptも、実は内部では、データを「文字列」か「数値型」かを明確に区別しています。たとえば、以下の2つはデータとしては厳密には異なります。 set a="12345" ;; a: STRING set x=12345 ;; x: INTEGER if a=x write "OK" とすると、ちゃんと "OK" と表示しますが、内部的には異なるデータです。 ただ、ObjectScript では型を厳密に定義しなくてもデータを扱える、という「メリット」があります。たとえば a は上記のように内部的には文字列扱いですが、aをキャストしなくても、数値を加えることができます。 set a="12345" ;; a: String set b=a+1 ;; b: INTEGER! つまり、上記の a と x はデータとしては厳密には異なりますが、ObjectScriptで取り扱うときは、多言語と違って、文字でもあり数値でもある曖昧さを許容してプログラミングできる、ということです。プログラマーにはラクチンです😄 ここで、Yuji さんがご質問されているテーブル定義の VARCHAR ですが、これは内部データ格納時に、ObjectScript 経由で登録すると 「%Stringだが、もし数値として登録されるなら、数値として登録される仕様」となっています。 Property a1 As %String; ClassMethod init() { &sql(insert into test (a1) values ('123')) &sql(insert into test (a1) values ('12345678901234567890')) } 1件目のデータは、数値 1232件目のデータは、(数値範囲を超える桁数なので) 文字列 12345678901234567890 ただ、ODBC / JDBC 経由でデータ挿入をする場合は、ODBC / JDBC の世界では厳密にデータ型を定義しているため、IRIS登録時に「VARCHAR の 123456789012345678 ね」 と情報が届きます。そのため、同じINSERTでも INSERT INTO test (a1) values (123) は、文字列 123 として登録されます。 ちなみに、「ObjectScriptでそのデータは文字列か数値か」は、$List のデータに格納することで区別がつきます。 set a=123 ;; INTEGER set x="123" ;; STRING set a1=$LB(a) ;; INTEGER in $LIST zzdump a1 ;; a1: 03 04 7B set x1=$LB(x) ;; STRING in $LIST zzdump x1 ;; x1: 05 01 31 32 33 $LIST は第2バイトに型をもっています。上の例ですと a1 : 型 04 = INTEGERx1 : 型 01 = STRING という感じです。 あまりご質問の回答としてふさわしくない話題かもしれませんが、、、 「なるほど、その分野はユルめの言語なのね」と思っていただけると嬉しいです。
記事へ Seisuke Nakahashi · 2024年11月6日 @松川 幸久 さん、$LIST形式のデータであれば、$LISTTOSTRING(list) というコマンドで文字列にできます。ということで、こんなのはどうでしょうか? set line=time_" ["_type_"] "_gref if type="SET" { if $LISTVALID(gval) { // if gval is $LIST data set gval="$LB("_$LISTTOSTRING(gval)_")" } set line=line_"="_gval } わかりやすく $LB( ) で前後をくくってみました。 以下のように出力されます。11/07/2024 02:50:12 [SET] ^["^^c:\intersystems\iris\mgr\user\"]naka=$LB(a,1,xyz)11/07/2024 10:51:29 [SET] ^["^^c:\intersystems\iris\mgr\user\"]naka(2)=123
記事へ Seisuke Nakahashi · 2024年7月22日 上記(2)は、あくまでテキストベースで参照するための簡単なサンプルになります。そのため、グローバルの値が gval=$LB("abc","xyz") や gval="abc"_$C(1)_"xyz" など制御コードが含まるときは、ファイルにはそのまま出力されませんので、その点ご注意くださいませ。 「そのようなデータも見たいな」と言われる方は、コメントなどでお寄せください。
記事へ Seisuke Nakahashi · 2024年4月7日 @Minoru Horita さん、分かりやすいベクトル検索の紹介記事、ありがとうございます!具体的に、大量の日本語文章データをIRISに格納して、そこからIRISのSQL一発で 「意味が似ている」データをヒットさせるデモは、分かりやすくてワクワクしますね。 感想だけではなんなので、記事の一連のPythonコードを、以下のようなIRISクラスに置き換えてみました。(1) プロパティは、日本語文書 contents とそのベクトルデータ contentsv の2つ(2) sqlalchemy ではなく、IRIS上で INSERT文発行して、ベクトルデータを格納 全く同じロジックですが、Pythonコード含めて、少しでも他メンバーの方のご参考になればと掲載します。 Class User.nakav3 Extends %Persistent { Property contents As %String(MAXLEN = 4096); Property contentsv As %Vector(DATATYPE = "DOUBLE", LEN = 768); ClassMethod load() [ Language = python ] { import iris import pandas as pd from pyarrow.parquet import ParquetFile import pyarrow as pa pf = ParquetFile('/var/tmp/cc100/0000.parquet') first_rows = next(pf.iter_batches(batch_size = 1000)) df = pa.Table.from_batches([first_rows]).to_pandas() df = df.replace("\n","",regex=True) for index,row in df.iterrows(): text = row['text'] iris.cls('User.nakav3').insertToIRIS(text) print('Done') } ClassMethod search(question As %String) { if $g(question)="" set question="大都市での生活は便利な半面、混雑や環境の悪さなどの問題もある。" set questionv=$tr(..Embedd(question)," '[]") set sql="SELECT TOP 5 VECTOR_DOT_PRODUCT(contentsv, TO_VECTOR(?, DOUBLE, 768)) as sim, contents" set sql=sql_" FROM SQLUser.nakav3 ORDER BY sim DESC" set rs=##class(%SQL.Statement).%ExecDirect(.stmt,.sql,.questionv) while rs.%Next() { write rs.%Get("sim")," ",rs.%Get("contents"),! } } ClassMethod insertToIRIS(text As %String) { set textv=$tr(..Embedd(text)," '[]") &sql(insert into SQLUser.nakav3 (contents, contentsv) values (:text, TO_VECTOR(:textv, DOUBLE, 768) ) ) } ClassMethod Embedd(text) As %String [ Language = python ] { from sentence_transformers import SentenceTransformer model = SentenceTransformer('stsb-xlm-r-multilingual') embeddings = model.encode(text) # convert the embeddings to a string embeddings_list = [str(embedding.tolist()) for embedding in embeddings] return str(embeddings_list) } } データロードdo ##class(User.nakav3).load()データ検索do ##class(User.nakav3).search("大都市での生活は便利な半面、混雑や環境の悪さなどの問題もある。")
記事へ Seisuke Nakahashi · 2023年11月21日 当日パネルディスカッションの進行役をつとめさせていただきました。 パネラーのみなさんが嬉しそうに IRIS にまつわる技術論をお話される姿と、会場のみなさんがその話を真剣にうんうん頷いて聞かれている姿、両方が良く見えて、司会席でニヤニヤしぱなっしでした。とても楽しい一日でした。 会場にお越しいただいたみなさま、本当にありがとうございました。
記事へ Seisuke Nakahashi · 2023年10月3日 > VSCodeのワークスペースを作成・保存> この作業はUIで行っても良いのですが、ここの UI 作業については、以下の記事でスクリーンショット付きで公開しています。少し古いですが、2023年10月現在でも同じ手順で登録できます。「鉛筆マーク」 クリックで登録されます。https://jp.community.intersystems.com/node/493616→ 3. クラス定義やルーチンを編集する
記事へ Seisuke Nakahashi · 2023年8月23日 Hashimotoさん、Peacock知りませんでした。楽しい情報ありがとうございます。 ObjectScriptコード内の色は、”InterSystems Language Server" エクステンションのTheme内で登録されていますので、ここを上書きさせれば出来る「かも」です。最新 Version 2.3.6 であれば、C:\Users\<username>\.vscode\extensions\intersystems.language-server-2.3.6-win32-x64\themes ここのテーマ別 json ファイルの、このあたり以下にずらっとならんでいました。 中橋は、コマンドカラーを変更するまでの元気がなくて、へーと眺めている段階です・・・。
記事へ Seisuke Nakahashi · 2021年4月20日 Amano さん、 最近アップデートされた、InterSystems Server Manager エクステンションでは、簡単に「サーバ上のCSPファイル」を編集できるようになりました。以下に手順を投稿しましたので、もしご参考になれば幸いです。 VSCode を使ってみよう (2021年4月20日版)