Skip to content

Commit 7b866cd

Browse files
authored
September bulletin (#15)
* September bulletin Signed-off-by: Adam Gutglick <adam@spiraldb.com> * Improve identation Signed-off-by: Adam Gutglick <adam@spiraldb.com> --------- Signed-off-by: Adam Gutglick <adam@spiraldb.com>
1 parent 81232d5 commit 7b866cd

File tree

3 files changed

+85
-35
lines changed

3 files changed

+85
-35
lines changed

src/app/blog/[slug]/page.tsx

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { getPostBySlug, getAllSlugs } from '@/lib/blog';
2-
import { notFound } from 'next/navigation';
3-
import ReactMarkdown from 'react-markdown';
4-
import Link from 'next/link';
5-
import { Metadata } from 'next';
1+
import { getAllSlugs, getPostBySlug } from "@/lib/blog";
2+
import { Metadata } from "next";
3+
import Link from "next/link";
4+
import { notFound } from "next/navigation";
5+
import ReactMarkdown from "react-markdown";
66

77
interface BlogPostPageProps {
88
params: Promise<{ slug: string }>;
@@ -11,17 +11,19 @@ interface BlogPostPageProps {
1111
export async function generateStaticParams() {
1212
const slugs = getAllSlugs();
1313
return slugs.map((slug) => ({
14-
slug,
14+
slug
1515
}));
1616
}
1717

18-
export async function generateMetadata({ params }: BlogPostPageProps): Promise<Metadata> {
18+
export async function generateMetadata({
19+
params
20+
}: BlogPostPageProps): Promise<Metadata> {
1921
const { slug } = await params;
2022
const post = getPostBySlug(slug);
2123

2224
if (!post) {
2325
return {
24-
title: 'Post Not Found | Vortex Blog',
26+
title: "Post Not Found | Vortex Blog"
2527
};
2628
}
2729

@@ -35,7 +37,7 @@ export async function generateMetadata({ params }: BlogPostPageProps): Promise<M
3537
url: `https://vortex.dev/blog/${slug}`,
3638
type: "article",
3739
locale: "en_US",
38-
publishedTime: post.date,
40+
publishedTime: post.date
3941
},
4042
alternates: {
4143
canonical: `https://vortex.dev/blog/${slug}`
@@ -53,9 +55,9 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
5355

5456
return (
5557
<div className="min-h-screen w-full bg-background text-white">
56-
<div className="max-w-4xl mx-auto px-4 py-16">
58+
<div className="max-w-6xl mx-auto px-4 py-16">
5759
{/* Back to blog link */}
58-
<Link
60+
<Link
5961
href="/blog"
6062
className="inline-flex items-center gap-2 text-grey font-mono text-sm hover:text-white transition-colors mb-8"
6163
>
@@ -67,28 +69,26 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
6769
<h1 className="text-3xl md:text-5xl font-funnel font-light text-white mb-6">
6870
{post.title}
6971
</h1>
70-
72+
7173
<div className="flex flex-col md:flex-row md:items-center gap-4 md:gap-8 text-grey font-mono text-sm">
7274
<time dateTime={post.date}>
73-
{new Date(post.date).toLocaleDateString('en-US', {
74-
year: 'numeric',
75-
month: 'long',
76-
day: 'numeric'
75+
{new Date(post.date).toLocaleDateString("en-US", {
76+
year: "numeric",
77+
month: "long",
78+
day: "numeric"
7779
})}
7880
</time>
79-
81+
8082
<div className="flex items-center gap-2">
8183
<span>by</span>
82-
<span className="text-white">
83-
{post.authors.join(', ')}
84-
</span>
84+
<span className="text-white">{post.authors.join(", ")}</span>
8585
</div>
8686
</div>
8787
</header>
8888

8989
{/* Post content */}
90-
<article className="dashed-top p-6 md:p-8">
91-
<div className="prose prose-invert prose-lg max-w-none">
90+
<article className="dashed-top p-4 md:p-6">
91+
<div className="w-full max-w-none">
9292
<ReactMarkdown
9393
components={{
9494
h1: ({ children }) => (
@@ -107,22 +107,22 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
107107
</h3>
108108
),
109109
p: ({ children }) => (
110-
<p className="text-grey font-sans text-base leading-relaxed mb-4">
110+
<p className="text-grey font-sans text-base leading-relaxed mb-4 break-words">
111111
{children}
112112
</p>
113113
),
114114
ul: ({ children }) => (
115-
<ul className="list-disc list-inside text-grey font-sans text-base leading-relaxed mb-4 space-y-2">
115+
<ul className="text-grey my-4 list-disc ml-6 w-full max-w-none">
116116
{children}
117117
</ul>
118118
),
119119
ol: ({ children }) => (
120-
<ol className="list-decimal list-inside text-grey font-sans text-base leading-relaxed mb-4 space-y-2">
120+
<ol className="text-grey my-4 list-decimal ml-6 w-full max-w-none">
121121
{children}
122122
</ol>
123123
),
124124
li: ({ children }) => (
125-
<li className="text-grey">
125+
<li className="text-grey mb-2 break-words w-full max-w-none">
126126
{children}
127127
</li>
128128
),
@@ -152,11 +152,15 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
152152
</pre>
153153
),
154154
a: ({ children, href }) => (
155-
<a
155+
<a
156156
href={href}
157157
className="text-white underline hover:text-grey transition-colors"
158-
target={href?.startsWith('http') ? '_blank' : undefined}
159-
rel={href?.startsWith('http') ? 'noopener noreferrer' : undefined}
158+
target={href?.startsWith("http") ? "_blank" : undefined}
159+
rel={
160+
href?.startsWith("http")
161+
? "noopener noreferrer"
162+
: undefined
163+
}
160164
>
161165
{children}
162166
</a>
@@ -167,10 +171,8 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
167171
</strong>
168172
),
169173
em: ({ children }) => (
170-
<em className="text-white italic">
171-
{children}
172-
</em>
173-
),
174+
<em className="text-white italic">{children}</em>
175+
)
174176
}}
175177
>
176178
{post.content}
@@ -180,4 +182,4 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
180182
</div>
181183
</div>
182184
);
183-
}
185+
}

src/app/blog/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export default function BlogPage() {
2525

2626
return (
2727
<div className="min-h-screen w-full bg-background text-white">
28-
<div className="max-w-4xl mx-auto px-4 py-16">
28+
<div className="max-w-5xl mx-auto px-4 py-16">
2929
<div className="mb-12">
3030
<h1 className="text-4xl md:text-6xl font-funnel font-light text-white mb-4">
3131
Blog

src/content/blog/september.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
title: "September Bulletin"
3+
date: "2025-09-08"
4+
authors: ["Community Team"]
5+
excerpt: "Overview of all work happening in Vortex"
6+
published: true
7+
---
8+
9+
Its been a month since Vortex was contributed to the Linux Foundation, and its been amazing to see the response and community interest, we start seeing more and more people taking a deep look at Vortex for their various use-cases, and even some moving real production workloads to it!
10+
11+
This month we accepted 232 commits from 16 different (mostly) human contributors, together we’ve done a few cool things:
12+
13+
1. Added a new Ray Datasource, allowing users to read directories of Vortex files [#4339](https://github.com/vortex-data/vortex/pull/4339)
14+
1. Improved DuckDB support, we can pass list arrays from/to Vortex [#4169](https://github.com/vortex-data/vortex/pull/4169)
15+
1. Improved Arrow and Apache DataFusion support [#4157](https://github.com/vortex-data/vortex/pull/4157) [#4227](https://github.com/vortex-data/vortex/pull/4227) [#4237](https://github.com/vortex-data/vortex/pull/4237) [#4180](https://github.com/vortex-data/vortex/pull/4180)
16+
1. Improved Spark support, including expanding Java platform support to Ubuntu 20.04+ and Amazon Linux 2023 [#4246](https://github.com/vortex-data/vortex/pull/4246) [#4335](https://github.com/vortex-data/vortex/pull/4335)
17+
1. Added a new scalar type and array - FixedSizeList [#4385](https://github.com/vortex-data/vortex/pull/4385) [#4405](https://github.com/vortex-data/vortex/pull/4405) [#4428](https://github.com/vortex-data/vortex/pull/4428)
18+
1. Started laying down the groundwork for major changes in the IO system and better ways of supporting different async runtimes, more details to come soon!
19+
1. Significantly improved the Rust API, by improving test and documentation coverage, made APIs more consistent and fixed more bugs and other small issues than we can count.
20+
1. Added two new benchmarks to our benchmarking suite:
21+
- TPC-DS, comparing DuckDB and Apache Datafusion, running on Vortex, Parquet and DuckDB’s native format [#4155](https://github.com/vortex-data/vortex/pull/4155)
22+
- StatPopGen, our own collection of [Statistical Genetics](https://en.wikipedia.org/wiki/Statistical_genetics) queries rendered in SQL over a [VCF-like](https://en.wikipedia.org/wiki/Variant_Call_Format) schema. Our [benchmarks website](https://bench.vortex.dev/?group=Statistical+and+Population+Genetics) presents the results, per commit, of executing these queries, in DuckDB, on 100,000 rows of [gnomAD's 1kg+HGDP dataset](https://gnomad.broadinstitute.org/news/2020-10-gnomad-v3-1-new-content-methods-annotations-and-data-availability/#the-gnomad-hgdp-and-1000-genomes-callset) stored in Parquet, Vortex, and Vortex-Compact (a version of vortex with the [pco](https://github.com/pcodec/pcodec) and zstd encodings). This is the only benchmark in our suite which includes queries on list-typed columns. [#4175](https://github.com/vortex-data/vortex/pull/4175)
23+
24+
25+
We intend to start yanking some older Vortex version that have known bugs, in order to improve the experience for new users while we improve overall stability and correctness.
26+
27+
We want to thank to anyone who has tried Vortex, provided feedback, asked question and filed issues.
28+
29+
Special thanks go for all the contributors who took the time and care to contribute to Vortex this month (in descending count of commits):
30+
31+
```text
32+
29 Connor Tsui
33+
28 Joe Isaacs
34+
27 Robert Kruszewski
35+
27 Adam Gutglick
36+
26 Dan King
37+
20 Will Manning
38+
18 Andrew Duffy
39+
13 Nicholas Gates
40+
13 Alexander Droste
41+
6 Dmitrii Blaginin
42+
6 Alfonso Subiotto Marqués
43+
5 Onur Satici
44+
2 Xinyu Zeng
45+
2 Liang-Chi Hsieh
46+
1 Scott S. McCoy
47+
1 Marko Bakovic
48+
```

0 commit comments

Comments
 (0)