Nova postagem

Pesquisar

Discussão
· Maio 24, 2024

Code Golf: Smiley Faces

It's Friday and a long weekend is upon us, so let's have a round of code golf!

Nowadays, it's rare to find a text message without at least one emoji. 😃😄😎🙂😊😀😁😆😂
But back in the day, people had to be creative to express their emotions in text. They would use emoticons, which are symbols made up of keyboard characters :^) =] ) B).
Our challenge for today is to create a function that receives a string as argument and returns the total number of smiling faces or happy faces.
Each smiley face must have one smiling mouth, which should be marked with ), ], }, D or >.
A smiley face can have a pair of eyes but it does not have to. Valid characters for eyes are :, ;, 8, B or =.
A nose is optional, and can be represented these characters: -, ^, c, o and ~.

Valid smiley face examples:

    :) :D ;-D :~) :‑) :-] =)    
    :] :-> :> 8-) :D 8‑D )
    8) :-} :} :o) :c) :^) =]
    :‑D 8D =D B^D

Input

"count how many smiley faces are here :)"

Output

1

15 Comments
Discussão (15)2
Entre ou crie uma conta para continuar
Artigo
· Maio 24, 2024 6min de leitura

Studio IRIS AI Studio: Um playground para explorar as capacidades de Generative AI & Vector Embedding

 

Problema

Você se identifica com isso: a capacidade e impacto da tecnologia que é realmente descoberta quando empacotada da maneira correta para seu público alvo? O melhor exemplo seria como a Generative AI deslanchou quando o ChatGPT veio ao público para fácil acesso e não como as capacidades Transformers/RAG's (Retrieval-Augmented Generation - Geração Aumentada de Recuperação) foram identificadas. Pelo menos uma usabilidade muito maior surgiu, quando a audiência foi incentivada para explorar as possibilidades.

 

Motivação

Recentemente tive a oportunidade de participar no MIT (Massachusetts Institute of Technology - Instituto de Tecnologia de Massachusetts) Grand Hack, em Boston, onde, durante minhas conversas com outros participantes, notei o imenso interesse por médicos e veteranos não técnicos em explorar as capacidades de Generative AI em seu domínio. Em uma das conversas, o melhor exemplo, que exibiu como os EHR's (Electronic Health Record - Registro Eletrônico de Saúde) tem uma UI (User Interface - Interface do usuário) complicada quando comparada com a UI polida do ChatGPT. Ainda que elas atendam a diferentes necessidades e tenham cada uma seus prós e contras, minha impressão final foi "O mundo não está voltando para trás, para interfaces complicadas para o usuário ou sistemas lentos. O futuro está em sistemas caracterizados por designs intuitivos e performance otimizada".

Para as partes não técnicas  interessadas que queriam explorar as capacidades do Generative AI, existe uma maneira de fazê-lo sem muitas complicações técnicas. De fato, o Co-lab/Jupyter notebook simplificaram significativamente o processo de rodar um código. Contudo, será podemos melhorar ainda mais isso para assemelhar-se às interfaces de plataformas como Playgrounds OpenAI ou o Studio Azure/Vertex AI? Um ambiente amigável ao usuário como esse encorajaria as partes não técnicas interessadas a entender as capacidades e limitações do Vector DB sem esforço. 

⚡️ Como nós podemos habilitar indivíduos não técnicos a avaliar o potencial do IRIS Vector DV em casos de uso para seus produtos/serviços, sem recursos exaustivos de desenvolvedores?

 

Solução

IRIS AI Studio— Uma plataforma no-code/low-code para explorar as capacidades de incorporações de Vectors no IRIS DB. Um usuário consegue, sem maiores dificuldades, carregar dados de várias fontes como vetores incorporados dentro da IRIS DB e então retornar a informação por meio de diversos canais. Aqui, o carregamento de dados é chamado de Connectors e a parte de retorno pode ser feito pelo Playground. Na essência, o Studio IRIS AI simplifica o processo de trabalhar com vetores incorporados e permite que o usuário visualize o poder da AI sendo cultivada para variadas aplicações. 

Connectors

Nos conectores, o usuário começa escolhendo a fonte de dados de onde querem buscar os dados e e carregar no IRIS DB como vetores incorporados. Eles podem carregar arquivos do sistema local ou devolver informações de serviços de armazenamento em cloud também. Esse recurso tem o potencial de funcionar como um pipeline de dados com a adição das capacidades de uma tarefa CRON.

Inicialmente, eu adicionei 4 fontes de dados diferentes: Armazenamento local, AWS S3, Airtable e Azure Blob Storage.

Após escolher a fonte dos dados, o usuário deve inserir a informação adicional a respeito da conexão, como id do cliente e chave secreta para o armazenamento AWS S3. Então, o usuário pode configurar as incorporações ao escolher tipo de indexação, modelo que deseja usar, dimensões e o nome da tabela em IRIS onde os dados serão carregados. Atualmente, indexações vindas de incorporações de OpenAI e Cohere são suportadas, mas com apenas algumas linhas de código poderíamos adicionar suporte para muitas outras incorporações.

Após finalizar os dois passos, os dados da fonte são convertidos em vetores incorporados e adicionados à tabela IRIS.

Playground

Agora que temos os dados do vetor incorporado na IRIS DB, permitir que o usuário retorne o conteúdo pelo canal preferido pode ser feito pelo Playground. Aqui vão alguns exemplos de como isso é feito.

Na Semantic Search (pesquisa semântica), o usuário insere as configurações que usou para carregar os dados e a pesquisa semântica consulta o que ele quer que seja executado no vetor incorporado. Isso vai retornar conteúdos da IRIS DB e devolver os resultados em formato de linguagem natural.

 

No Chat with Docs (Conversa com Documentos), o usuário deve inserir as configurações que usou para carregar os dados e o chat consulta o que ele quis fazer.  A opção do chat tem uma grande diferença da opção da consulta por causa da extensão do contexto em cada uma. Além disso, na conversa com documentos nós poderáamos conectar com várias opções LLM diferentes para retornar os conteúdos e não precisaríamos nos prender às opções de indexação (Atualmente a OpenAI's GPT 3.5 turbo é adicionada por padrão).]

 

Definições

Na seção de definições, o usuário poderia adicionar múltiplas configurações de instâncias IRIS que serão gravadas no armazenamento local do navegador e o usuário pode escolher com quais vai querer atuar ativamente. Isso fará seu trabalho mais fácil para administrar múltiplas instâncias e escolher as preferidas para uso. Além disso, aqui as chaves de API do serviço LLM  podem ser adicionadas (serão salvas no armazenamento de sessão do navegador) e automaticamente selecionadas para propósitos de indexação ou recuperação de dados. Nenhuma dessas informações está sendo salva e foi levada ao backend apenas para fins de processamento.

 

Teste você mesmo

Clone o repositório do projeto do link do GitHub a seguir: https://github.com/ikram-shah/iris-ai-studio.

Siga as instruções fornecidas para configurar o projeto localmente na sua máquina. Por favor note que, tendo escrito isso em 12 de Maio de 2024 para alguns módulos o desenvolvimento ainda está em progresso, mas a funcionalidade discutida acima deve funcionar perfeitamente 💪🏻 Me avise se algo não funcionar como esperado na DM (Direct Message - mensagem direta) ou na seção de problemas (issues) do GitHub.

Tech Stack

Frontend: VueJS, TailwindCSS, Flowbite

Backend: Python, Flask

Database: InterSystems IRIS

Frameworks/Libraries/Services: Llama-Index, SQLalchemy-iris, OpenAI, Cohere

Infrastructure: Vercel (frontend hosting), Render (backend hosting)

 

Creditos

Agradeço à detalhada documentação sobre Pesquisa de Vetor da InterSystems

Agradeço ao modelo de Pesquisa de Vetor IRIS por simplificar os módulos e capacidades, de@Alvin.Ryanputra 

Agradeço à livraria llama-iris do @Dmitry Maslennikov 

 

Considerações finais e Feedback

Eu venho de um passado de Inovação e Engenharia de Produto, e por mais de um ano eu tenho explorado avanços tecnológicos no setor de saúde, Aqui estou aprendendo mais da comunidade de desenvolvedores ISC e tenho certeza que essa plataforma AI Studio pode ajudar no seu trabalho, e desenvolvedores podem compartilhá-la com administradores de produto ou médicos para que deem suas participações na qualidade dos dados que está sendo retornado e muitos outros casos de uso. Se esse artigo fez sentido para você ou iluminou alguma ideia, por favor deixe uma curtida 👍 e fique à vontade para compartilhar seus pensamentos na seção de comentários abaixo. Eu adoraria me conectar com qualquer um interessado em discutir mais!

🚀 Vote por essa aplicação na competição de Vector Search, GenAI and ML, se acreditar que ela tem futuro!

Eu vou compartilhar mais publicações que dão um mergulho técnico profundo a respeito dessa plataforma.

Discussão (0)1
Entre ou crie uma conta para continuar
Pergunta
· Maio 24, 2024

Cannot parse valid HL7 message

I'm having problems with an HL7 message that is not properly parsed by IRIS (any version, including Ensemble).

The message is a OML_O21 and is valid, in fact is similar of what is described in the document "IHE Laboratory Technical Framework, Volume 2a (LAB TF-2a) version 6.0".
This is the sample from the IHE document (paragraph 2315):

MSH|^~\&|OF|Chemistry|AM|Automation|200309060825||OML^O21^OML_O21|msgOF101|T|2.5|123||||USA||EN
PID|1||12345^5^M10^Memphis_Hosp^PI||EVERYMAN^ADAM^^JR^^^L|19800101|M 2320
PV1|1|O|Ward|||||||||||||||12345
ORC|NW|||666^gastric|||||200309060824|222221^NURSE^NANCY|||||||||||Entero-gastric^^^^^^FI^^^EG02
TQ1|||||||||A
OBR||555_1^chemistry||GLUC^GLUCOSE^L||||||1234^BLEEDER|S|||||222222^PHYSICIAN^^^^DR|822325 1
SPM|1|123456781^gastric ||SER|||||||P||||||200309060735|200309060821||||||||1
ORC|NW|||666^gastric|||||200309060710|222221^NURSE^NANCY|||||||||||Entero-gastric^^^^^^FI^^^EG02
TQ1|||||||||A 2330
OBR||555_2^chemistry||GLUC^GLUCOSE^L||||||1234^BLEEDER|S||||| 222222^PHYSICIAN^^^^DR|821
SPM|1|123456782^gastric||SER|||||||P||||||200309060755|200309060821||||||||1

The result in IRIS is:

Is the IHE document sample an invalid message?
Because of this issue I cannot handle this message in rules and DTL

6 Comments
Discussão (6)4
Entre ou crie uma conta para continuar
Artigo
· Maio 24, 2024 5min de leitura

Test du stockage en colonnes (Columnar Storage)

Comme la plupart d'entre vous le savent probablement déjà, depuis environ la fin de 2022 InterSystems IRIS a inclus la fonctionnalité de stockage de colonnes dans sa base de données, eh bien, dans l'article d'aujourd'hui, nous allons la mettre à l'épreuve par rapport au stockage de rangées habituel.

Discussão (0)0
Entre ou crie uma conta para continuar
Artigo
· Maio 24, 2024 4min de leitura

Linuxで SSL/TLS を使用して JDBC 接続を行う方法

こちら の記事では、LinuxでJDBC接続を行う方法  をご紹介しました。

今回は、SSL/TLS を使用するように InterSystems IRIS スーパーサーバを構成 した IRIS に対して、JDBCで SSL/TLS 接続をする方法をご紹介します。

LinuxでJDBC接続を行う方法 の記事で紹介している手順で、SSL/TLS なしでJDBC接続できる環境を用意していることを前提にご説明します。

手順は以下のようになります。手順の詳細は、この後で説明します。


1.CA証明書を用意します

2.Java キーストアに証明書をインポートします

3.Java ファイルを含むディレクトリに、SSLConfig.properties という名前の構成ファイルを作成ます

4.Java のコードに SSL/TLS の使用を指定する設定を追加します



1.CA証明書を用意します

最初に、CA証明書を用意します。証明書に問題がないか証明書情報を確認します。
※ ***.***.***.*** :接続先IRISサーバのIPアドレス

# openssl s_client -connect ***.***.***.***:1972 -showcerts -CAfile /home/ec2-user/ca_certificate.crt < /dev/null
CONNECTED(00000003)
:
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
DONE

「Verify return code: 0 (ok)」が返れば、CA証明書に問題はありません。


2.以下のコマンドで、Java キーストアに証明書をインポートします

実行ディレクトリに keystore.jks ファイルが生成されます。

$ su -
# keytool -importcert -file /path-to-cert/ca_certificate.crt -keystore keystore.jks
Enter keystore password:              <-- 任意のパスワード
Re-enter new password:                <-- 任意のパスワード(再入力)

Trust this certificate? [no]:  yes    <-- Yes
Certificate was added to keystore
#

※keytool 実行可能ファイルは、JDK ディストリビューションに同梱されています。


3.Java ファイルのあるディレクトリに、SSLConfig.properties という名前の構成ファイルを作成します

SSLConfig.properties ファイルには、次の2つのプロパティを含めます。

trustStore=path-to-keystore/keystore.jks      <-- 2 で作成した keystore.jks のファイルパス 
trustStorePassword=keystore-password          <-- 2 で設定したパスワード

※クライアント認証が必要な場合、キーストアやその他構成ファイルの詳細については、こちら のドキュメントをご覧ください。



4.Java のコードに SSL/TLS の使用を指定する設定を追加します

※%SuperServerの設定をした接続先のIRISでは、「スーパーサーバSSL/TLSサポート」を「有効」または「必須」に設定してください。

こちらのサンプルでは、DriverManager クラスを使用した接続テスト を行います。

import java.sql.*;

public class JDBCSample_TLS {
    public static void main(String[] str) throws Exception {
        String url = "jdbc:IRIS://***.***.***.***:1972/USER/";
        
        java.util.Properties prop = new java.util.Properties();
        prop.put("connection security level", "10");    // SSL/TLS 接続にはこの設定が必要です
        prop.put("user", "_System");
        prop.put("password", "SYS");
        // Replace _SYSTEM and SYS with a username and password on your system
        Connection connection = DriverManager.getConnection(url,prop);
        
        Statement statement = connection.createStatement();
                
        String query = "SELECT top 5 TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES";
        ResultSet resultSet = statement.executeQuery(query);
        System.out.println("Printing out contents of SELECT query: ");
        
        while (resultSet.next()) {
            System.out.println(resultSet.getString(1) + ", " + resultSet.getString(2) + ", " + resultSet.getString(3));
        }
        
        resultSet.close();
        statement.close();
        
        connection.close();
    }
}


コンパイル&実行します。

# javac JDBCSample_TLS.java
# java JDBCSample_TLS
Printing out contents of SELECT query:
%CSP_Util, CSPLogEvent, SYSTEM TABLE
%CSP_Util, Performance, SYSTEM TABLE
%Calendar, Hijri, SYSTEM TABLE
%Compiler_Informix, ConversionRule, SYSTEM TABLE
%Compiler_Informix, ImportedObject, SYSTEM TABLE


IRISDataSource を使用する場合は以下のようになります。

import com.intersystems.jdbc.*;
import java.sql.*:;

public class JDBCSample_TLS {
    public static void main(String[] str) throws Exception {
        String url = "jdbc:IRIS://***.***.***.***:1972/USER/";
        
        IRISDataSource ds = new IRISDataSource();
        ds.setURL(url);
        ds.setUser("SYS");
        ds.setPassword("_System");
        ds.setConnectionSecurityLevel(10);    // SSL/TLS 接続にはこの設定が必要です
        Connection connection = ds.getConnection();
        // 以下、DriverManager のサンプルと同じ


 

詳細は以下のドキュメントをご覧ください。
Securing the JDBC Connection with TLS

Discussão (0)0
Entre ou crie uma conta para continuar