Skip to content

Commit

Permalink
Merge branch 'master' into azakiev/authorship-migration
Browse files Browse the repository at this point in the history
  • Loading branch information
AufarZakiev committed Jan 21, 2025
2 parents 4bb7332 + f2e2ab7 commit 0131aa4
Show file tree
Hide file tree
Showing 124 changed files with 6,033 additions and 2,736 deletions.
2 changes: 1 addition & 1 deletion connectors/grok_connect/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.5.5</version>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,8 @@ else if (param.propertyType.equals(Types.BIG_INT) && param.value != null)
break;
case Types.BIG_INT:
statement.setNull(n + i + 1, java.sql.Types.BIGINT);
case Types.BOOL:
statement.setNull(n + i + 1, java.sql.Types.BOOLEAN);
default:
statement.setNull(n + i + 1, java.sql.Types.VARCHAR);
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public Properties getProperties(DataConnection conn) {
properties.setProperty("sslfactory", "org.postgresql.ssl.NonValidatingFactory");
}
properties.setProperty("socketTimeout", "180");
properties.setProperty("tcpKeepAlive", "true");
return properties;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,11 @@ public static Connection getConnection(String url, java.util.Properties properti
HikariDataSource ds = connectionPool.computeIfAbsent(key, k -> getDataSource(url, properties, driverClassName));
return ds.getConnection();
} catch (HikariPool.PoolInitializationException | SQLTransientConnectionException e) {
if (connectionPool.containsKey(key))
connectionPool.remove(key).close();
if (connectionPool.containsKey(key)) {
HikariDataSource pool = connectionPool.remove(key);
if (pool != null)
pool.close();
}
Throwable cause = e.getCause();
throw new GrokConnectException(cause != null ? cause : e);
} catch (SQLException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

public class SettingsManager {
private static final int DEFAULT_CONNECTION_POOL_TIME_RATE = 60*1000;
private static final int DEFAULT_CONNECTION_POOL_MAXIMUM_SIZE = 10;
private static final int DEFAULT_CONNECTION_POOL_MAXIMUM_SIZE = 30;
private static final int DEFAULT_CONNECTION_POOL_IDLE_TIMEOUT = 5*60*1000;
private static final Logger LOGGER = LoggerFactory.getLogger(SettingsManager.class);
private static volatile SettingsManager instance;
Expand Down
7 changes: 2 additions & 5 deletions docusaurus/src/docs/careers/default.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,14 @@ import SeniorDevOpsEngineer from './sr-devops.mdx';

export const meta = {
title: 'Open roles',
description: 'If you are interested in Datagrok but don’t see a suitable role, please email [email protected]',
video: {
link: 'https://www.youtube.com/embed/AxiY2xhudwE',
description: 'Check out the video from our CEO, Andrew Skalkin, to learn about the company, product, and what its like to work here'
}
description: 'If you are interested in Datagrok but don't see a suitable role, please email hr@datagrok.ai',
}

<LayoutHeader meta={meta}/>

<div className="row py-5">
<SoftwareDeveloperforDrugDiscovery/>
<ScientificApplicationDeveloper/>
<EngineeringManager/>
<TechnicalAuthor/>
<SeniorDevOpsEngineer/>
Expand Down
73 changes: 47 additions & 26 deletions docusaurus/src/docs/careers/scientific-application-developer.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,49 +4,70 @@ import Card from '@site/src/components/careers/position.jsx';

export const meta = {
id: 'scientific-application-developer',
name: 'Scientific Application Developer (Full-stack)',
name: 'Scientific Application Developer',
type: 'Full time',
location: 'Remote'
}

<Card meta={meta}>

We are looking for a full-stack application developer with an interest in life sciences to join our strong team of engineers and data scientists.
Location: Remote | Start: ASAP

You will be primarily involved in developing new applications in JavaScript, TypeScript, Python, and R, using Datagrok API and facilities, expanding the platform with new plugins where needed. Most of the applications to be developed are strongly connected to natural sciences and data science. There is a lot of room to grow, and there will be many opportunities to assume more responsibilities and learn new domains, such as cheminformatics, bioinformatics, deep learning, or high-performance computing.
While others talk about revolutionizing drug discovery, we're doing it. We've
built a platform that runs UMAP on hundreds of thousands of molecules in
seconds, not hours. Our users interactively explore the chemical space on the
entire ChEMBL database, perform complex operations like substructure searches,
and collaborate on ideas - all in a web browser.

We handle everything - from data access and visualization to advanced ML/AI for
ADMET profiling. We're leveraging WebAssembly and WebGPU to push browser
capabilities to their limits, and CUDA and other tech on the server side.

## Role overview

As a scientific application developer, you'll build scientific applications
using JavaScript/TypeScript with the Datagrok JS API, focusing on
cheminformatics, bioinformatics, and high-performance computing solutions.
You'll work with a global team serving top scientists in drug discovery.

## Responsibilities

- Front-end web and application logic development
- Back-end development for scientific as well as data integration purposes
- Help our clients write JS applications on top of the Datagrok platform
- Design, implement, and operate data management systems
- Use and improve developer-facing platform’s JS API
- Integrate third-party JS libraries into the platform
* Develop front-end scientific applications and back-end integrations
* Design and implement data management systems
* Support clients in building JS/TS applications on our platform
* Expand platform capabilities through new plugins
* Integrate and optimize third-party libraries

## Requirements

- At least three years of professional experience
- Knowledge and experience in data science and/or life sciences
- JavaScript or TypeScript
- At least one of: Python, R, Java, C#, C++, Matlab/Octave
- Good written English, ability to communicate directly with our clients
- Strong verbal and written communication skills
- Ability to learn and apply new technologies
* 3+ years of development experience
* Strong JavaScript/TypeScript skills
* Background or experience in life sciences (bioinformatics, cheminformatics, or drug development)
* Good English
* Track record of delivering high-performance code
* Proven ability to learn complex scientific concepts quickly

## Nice to have

- Prior exposure to life sciences (especially bioinformatics, cheminformatics, drug design and development, clinical data analysis)
- Interest or experience in high performance computing
- Experience with WebGL, WebAssembly, or Dart
* Experience with Python, R, Java, C#, C++, or Matlab
* Knowledge of WebGL, WebAssembly, or Dart
* High-performance computing background
* Expertise in creating intuitive scientific interfaces
* Algorithm optimization experience

## Why join us?

* Minimal bureaucracy, maximum impact
* Freedom to organize your work
* Challenging problems with real-world implications
* Collaboration with experts across multiple disciplines
* Continuous learning in cutting-edge tech and science
* Contributions to open source and democratization of data science

## We offer
## Stand out from the crowd

- A chance to revolutionize the space of data analytics
- Fully remote work
- Zero bureaucracy, flexible working hours, unlimited vacations / PTO
- Excellent growth opportunities in a highly dynamic, unique product company
- Paid trainings and certifications
- Competitive compensation
Want to make a lasting impression? Consider submitting a short video
presentation about yourself. Show us your problem-solving skills, brag about the
things you are most proud of, and tell us how you can contribute!

</Card>
68 changes: 2 additions & 66 deletions help/access/databases/databases.md
Original file line number Diff line number Diff line change
Expand Up @@ -635,86 +635,22 @@ connection also deletes a query.
:::
## Search integrated queries
Datagrok allows you to define a special patterns for calling any function or query with a human-readable sentence and visualize the resulting dashboard directly from the platform search.
When you create a function, script, or query that results in a table, you can annotate it with the `meta.searchPattern` tag. This tag will be used to call the function with the specified parameters within the sentence.
The `searchPattern` tag can be any sentence that contains placeholders for the parameters. For example, if the annotation of the query is as follows:
```sql
--input: string target = "CHEMBL1827"
--meta.searchPattern: "compound activity details for target ${target}"
```
Searching for "compound activity details for target CHEMBL1827" in the **Search Everywhere** bar will call the query and pass "CHEMBL1827" as the `target` parameter. The number of parameters is not limited, and they can be used in any order in the sentence.
![Search integrated queries](img/search-integrated-queries.gif)
:::tip
Use the **Search Everywhere** bar to visualize the following queries directly from the search results:
- *Bioactivity for bacterial targets for Shigella*
- *Pharmacokinetic Data for LEVOFLOXACIN*
- *Compound activity details for target CHEMBL1827*
You can also add the resulting dashboard to the workspace by clicking on the **+** icon in the search results.
<details>
<summary>Example query</summary>
```sql
--name: bioactivity data for bacterial targets for @organism
--friendlyName: Browse | Bioactivity for bacterial targets for @organism
--connection: Chembl
--input: string organism {suggestions: Chembl:organisms}
--input: string species
--meta.searchPattern: "Bioactivity for ${species} targets for ${organism}"
SELECT md.chembl_id AS compound_chembl_id,
cs.canonical_smiles,
act.standard_type,
act.standard_value,
act.standard_units,
td.chembl_id AS target_chembl_id,
td.organism, td.pref_name
FROM target_dictionary td
JOIN assays a ON td.tid = a.tid
JOIN activities act ON a.assay_id = act.assay_id
JOIN molecule_dictionary md ON act.molregno = md.molregno
JOIN compound_structures cs ON md.molregno = cs.molregno
JOIN organism_class oc ON td.tax_id = oc.tax_id
AND td.organism ILIKE @organism
AND oc.L1 = @species;
--end
```
Here, the `state` and `city` parameters are defined as strings with default
values. The `city` parameter's choices query references the `state` parameter
using `@state`. This ensures that the choices are filtered based on the value of
`state`.
</details>
:::
<!--
## Debugging queries
Debugging queries helps you fix and improve query performance.
For exisitng queries:
For existing queries:
1. Right-click your query and select **Debug**. A dialog opens.
1. In the dialog, set parameters:
* **Fetch size**: This parameter tells the JDBC driver how many rows to fetch from the
database at one time. If set to zero, the driver chooses the optimal fetch
size. The default limit for WebSocket messages is set to 10 MB.
To obtain consistent debugging results, always specify the fetch size.
To obtain consistent fetch size.
To persist the fetch size, include a meta parameter in your query:
```
Expand Down
66 changes: 66 additions & 0 deletions help/datagrok/concepts/functions/func-params-annotation.md
Original file line number Diff line number Diff line change
Expand Up @@ -627,6 +627,72 @@ a molecule, a molecule sketcher pops up.

</details>


## Search integrated functions

Datagrok allows you to define a special patterns for calling any function or query with a human-readable sentence and visualize the resulting dashboard directly from the platform search.

When you create a function, script, or query that results in a table, you can annotate it with the `meta.searchPattern` tag. This tag will be used to call the function with the specified parameters within the sentence.

The `searchPattern` tag can be any sentence that contains placeholders for the parameters. For example, if the annotation of the query is as follows:

```sql
--input: string target = "CHEMBL1827"
--meta.searchPattern: "compound activity details for target ${target}"
```

Searching for "compound activity details for target CHEMBL1827" in the **Search Everywhere** bar will call the query and pass "CHEMBL1827" as the `target` parameter. The number of parameters is not limited, and they can be used in any order in the sentence.

![Search integrated queries](search-integrated-queries.gif)

:::tip

Use the **Search Everywhere** bar to visualize the following queries directly from the search results:
- *Bioactivity for bacterial targets for Shigella*
- *Pharmacokinetic Data for LEVOFLOXACIN*
- *Compound activity details for target CHEMBL1827*

You can also add the resulting dashboard to the workspace by clicking on the **+** icon in the search results.


<details>
<summary>Example query</summary>

```sql
--name: bioactivity data for bacterial targets for @organism
--friendlyName: Browse | Bioactivity for bacterial targets for @organism
--connection: Chembl
--input: string organism {suggestions: Chembl:organisms}
--input: string species
--meta.searchPattern: "Bioactivity for ${species} targets for ${organism}"
SELECT md.chembl_id AS compound_chembl_id,
cs.canonical_smiles,
act.standard_type,
act.standard_value,
act.standard_units,
td.chembl_id AS target_chembl_id,
td.organism, td.pref_name
FROM target_dictionary td
JOIN assays a ON td.tid = a.tid
JOIN activities act ON a.assay_id = act.assay_id
JOIN molecule_dictionary md ON act.molregno = md.molregno
JOIN compound_structures cs ON md.molregno = cs.molregno
JOIN organism_class oc ON td.tax_id = oc.tax_id
AND td.organism ILIKE @organism
AND oc.L1 = @species;
--end

```

Here, the `state` and `city` parameters are defined as strings with default
values. The `city` parameter's choices query references the `state` parameter
using `@state`. This ensures that the choices are filtered based on the value of
`state`.

</details>

:::

## Examples

<details>
Expand Down
Loading

0 comments on commit 0131aa4

Please sign in to comment.