Blog
Announcements
Announcing our newest advisor, Julien Le Dem, creator of OpenLineage

Announcing our newest advisor, Julien Le Dem, creator of OpenLineage

Announcements
October 10, 2024
Alon Nafta
Subscribe to our Newsletter
Get the latest from our team delivered to your inbox
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Ready to get started?
Try It Free

Data lineage has long been the poster child of data management. It’s everywhere–but there are always challenges around accuracy, coverage, or just keeping it up to date. There are many different options for gathering data lineage, ranging from data platforms, open source, and of course, paid solutions. 

At Foundational, we analyze all the code that’s impacting data, before it’s merged to production, across every repository in the organization - data pipelines, transformation, and equally if not more importantly, upstream applications and operational code. For this, we needed to build an entirely new concept of data lineage, that is calculated directly from source code, to allow us to determine lineage not just for SQL pipelines, but for Spark, Python, Scala, PHP, Ruby, and practically every form of data manipulation taking place in code. Pushing the envelope data lineage is practically a necessity across everything we do.

With that, we’re incredibly excited to announce that Foundational is partnering with Julien Le Dem, creator of OpenLineage, as our newest advisor.

This is a big milestone for us for two reasons:

  • Julien’s invaluable experience in data lineage will further establish Foundational’s position at the forefront of data lineage expertise
  • Taking part in OpenLineage as the industry’s open source standard for data lineage exchange is a very important undertaking

In the past 2 years since we started Foundational, we’ve seen time and time again that organizations, and in particular the larger ones, still have incredible challenges around data lineage. Data environments are growing quickly, often becoming multi-platform and multi-cloud, with a lot of legacy code that is still very much in use in production environments. Producing and maintaining reliable data lineage remains a huge challenge.

We’re excited to welcome Julien into our problem space, and collaborate together around providing better data lineage solutions for the entire ecosystem. Welcome to our journey!

code snippet <goes here>
<style>.horizontal-trigger {height: calc(100% - 100vh);}</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/ScrollTrigger.min.js"></script>
<script>
// © Code by T.RICKS, https://www.timothyricks.com/
// Copyright 2021, T.RICKS, All rights reserved.
// You have the license to use this code in your projects but not to redistribute it to others
gsap.registerPlugin(ScrollTrigger);
let horizontalItem = $(".horizontal-item");
let horizontalSection = $(".horizontal-section");
let moveDistance;
function calculateScroll() {
 // Desktop
 let itemsInView = 3;
 let scrollSpeed = 1.2;  if (window.matchMedia("(max-width: 479px)").matches) {
   // Mobile Portrait
   itemsInView = 1;
   scrollSpeed = 1.2;
 } else if (window.matchMedia("(max-width: 767px)").matches) {
   // Mobile Landscape
   itemsInView = 1;
   scrollSpeed = 1.2;
 } else if (window.matchMedia("(max-width: 991px)").matches) {
   // Tablet
   itemsInView = 2;
   scrollSpeed = 1.2;
 }
 let moveAmount = horizontalItem.length - itemsInView;
 let minHeight =
   scrollSpeed * horizontalItem.outerWidth() * horizontalItem.length;
 if (moveAmount <= 0) {
   moveAmount = 0;
   minHeight = 0;
   // horizontalSection.css('height', '100vh');
 } else {
   horizontalSection.css("height", "200vh");
 }
 moveDistance = horizontalItem.outerWidth() * moveAmount;
 horizontalSection.css("min-height", minHeight + "px");
}
calculateScroll();
window.onresize = function () {
 calculateScroll();
};let tl = gsap.timeline({
 scrollTrigger: {
   trigger: ".horizontal-trigger",
   // trigger element - viewport
   start: "top top",
   end: "bottom top",
   invalidateOnRefresh: true,
   scrub: 1
 }
});
tl.to(".horizontal-section .list", {
 x: () => -moveDistance,
 duration: 1
});
</script>
Share this post
Subscribe to our Newsletter
Get the latest from our team delivered to your inbox
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Ready to get started?
Try It Free