🗞️PatelBytes🗞️: March Edition 2025
🧠 AI 🤖
This week saw some major AI releases that have pushed the frontier of state-of-the-art modality models.It's not just text, but also image, and in the future, voice and video generation—all at a fraction of the cost.Gemini Pro Flash 2.5: One Model to rule them all.
Gemini Pro Flash 2.5: One Model to rule them all ⚡️

Gemini 2.5: Our newest Gemini model with thinking
Gemini 2.5 is our most intelligent AI model, now with thinking.
This release has shattered the benchmarks. It is great at coding (on par with Sonnet and o1). Its 1 million context length makes it great at making non-trivial projects!
A couple of projects I've tried that has worked almost flawlessly with the latest Gemini model:
1. Parsing image and writing code on it. The project was non-trivial and no-traditional. Had to basically parse a UI screen and extract components out of it. It worked flawlessly (apart from Rate-limits which are present due to the API being completely free!)
2. Creating a virtual flight simulator(inspired by levels io) with enhancement in the same chat context. (Gemini has Canvas which is similar to Claude's artifacts which makes it seamless to create the game with instantaneous feedback loop).
You can try it for free in 2 places:
1. Gemini App: Available for free users as well.
2. Google's AI Studio: Available as an API for free users as well.
🛠️ Backend engineering ⚙️
Java 24: Make Java cool again ☕

Oracle Releases Java 24 | Oracle United Kingdom
Oracle today announced the availability of Java 24, the latest version of the world’s number one programming language and development platform.
1. Gatherer API
An enhancement to the Streams API which can be used for intermediate operations.
Goal of the API is to provide extend intermediate operations in the Stream API. The features include:
-
Consume-produce ration with all permutations - 1:1, 1:N, N:1, N:M
-
Usable in parallel streams and sequential streams.
Gatherers has the 4 operations:
Integrator
:
// Integrates `element` from Stream.
// Reads element and produces output
public interface Integrator<A, T, R> {
boolean integrate(
A state, // Mutable state object (optional, managed by Initializer)
T element, // The current element from the upstream
Downstream<R> downstream // Consumer for remaining downstream elements
);
}
// Map example
// 1, 3, 2, 5, 1 -> A, C, B, E, A
Integrator<Void, T, R> mapIntegrator =
(state, element, downstream) -> {
// Adding a mapper function: map(Function<T, R> mapper)
R newElement = mapper.apply(element);
downstream.push(newElement);
};
Gatherer.of(mapIntegrator);
// Filter example
// 1, 3, 2, 5, 1 -> 1, 3, 5, 1
Integrator<Void, T, T> filterIntegrator =
(state, element, downstream) -> {
var passOn =
// Suppying filter rule: filter(Predicate<T> filter)
filter.test(element);
if (passOn) {
downstream.push(element);
}
};
Gatherer.of(filterIntegrator);
Initializer
:
// Creates a private `state` object which is used in `Integrator`
// limit(int numberOfElements)
// 1, 3, 2, 5, 1 -> 1, 3, 2
Supplier<AtomicInteger> initializer =
AtomicInteger::new;
Integrator<AtomicInteger, T, T> integrator =
(state, element, downstream) -> {
int index = state.getAndIncrement();
if (index < numberOfElements)
downstream.push(element);
};
Gatherer.ofSequential(initializer, integrator);
Finisher
:
/* For any left over operation.
Example processing the last element of odd size with window of 2 element
[1,2,3,4,5] turns into [1,2], [2,3], [5]
Here 5 is dangling, so
*/
// fixedGroups(int size)
// 1, 3, 2, 5, 1 -> [1, 3], [2, 5], [1]
Supplier<List<T>> initializer = ArrayList::new;
Integrator<List<T>, T, List<T>> integrator =
(state, element, downstream) -> {
state.add(element);
if (state.size() == size) {
downstream.push(List.copyOf(state));
state.clear();
}
return true; // Assuming this should be returned by the lambda
};
BiConsumer<List<T>, Downstream<List<T>>> finisher =
(state, downstream) -> {
if (!state.isEmpty()) { // Corrected potential OCR error from 'Istate' to '!state'
downstream.push(List.copyOf(state));
}
};
Gatherer.ofSequential(initializer, integrator, finisher);
Combiner
:
// Combine `state` object for parallel streams
// No examples as it requires a lot of boiler plate code to understand
Some out-of-the-box gatherers include:
// 1. windowFixed
List<List<Integer>> windows =
Stream.of(1,2,3,4,5,6,7,8).gather(Gatherers.windowFixed(3)).toList();
windows.forEach(System.out::println);
/*
Input: [1,2,3,4,5,6,7,8]
Output:[1, 2, 3],[4, 5, 6],[7, 8]
*/
// 2. windowSliding
List<List<Integer>> windows =
Stream.of(1,2,3,4,5,6,7,8).gather(Gatherers. windowSliding(3)).toList();
windows.forEach(System.out::println);
/*
Input: [1,2,3,4,5,6,7,8]
Output:[1, 2, 3],[2, 3, 4],[3, 4, 5],
[4, 5, 6],[5, 6, 7],[6, 7, 8]
*/
Rest can be found here: Inbuilt stream gatherers
For more in depth, check this Youtube video:
2. Synchronizing Virtual threads properly
This release allows the virtual threads to not be pinned to platform (kernel threads) in synchronized block.
synchronized byte[] getData() {
byte[] buf = ...;
int nread = socket.getInputStream().read(buf); // Can block here through pinning
...
}
Traditionally virtual threads is tied to a monitor through a carrier thread and the JVM cannot distinguish virtual thread as it sees the carrier thread only. Solution is for virtual thread to hold, acquire and release threads. Read more her in JEP 491.
3. Post-quantum cryptography
Due to the advent to Quantum computers has led to a possibility of typical encryption schemes breaking, Java has come with quantum-computer safe algorithms. Refer to JEP 496 and JEP 497 for more details
Other things include:
- GC improvements JEP 497: Remove non-generational mode in ZGC, JEP 475: Late barrier expansion in G1 to improve Java Warmup for Cloud serverless apps and JEP 404: Experimental Generational Shenandoah GC for better througput and reselience,
- Improving
switch
and pattern matching by allowing primitive types. - Remaining can be found here
💻 Front end engineering 📱
Lynx: A better React Native🦁

Lynx: Unlock Native for More - Lynx
Empower the web community and invite more to build cross-platform apps
China isn’t killing it in the LLM world, it is killing it in frontend space. Initially, Bytedance, released a Vite competitor called Rspack, which is Rust-based Webpack-compatible bundler.
Building on top of that, they have open-sourced a React native alternative.
It contains 2 threads:
1. Main Thread
2. Background thread
Lynx is able to run all platforms:
1. iOS
2. Android
3. Web
PS: This is not AI Generated, but took help of LLMs and Google for learning.
Hello there in the web