Help
RSS
API
Feed
Maltego
Contact
Domain > ddole.net
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-04-19
54.230.253.73
(
ClassC
)
2026-01-29
3.169.173.102
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Thu, 29 Jan 2026 10:01:48 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://ddole.net/X-Cache: Redirect from cloudfrontVia: 1.1 a454a679efa1e16833b77cb6af61e11c.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P4Alt-Svc: h3:443; ma86400X-Amz-Cf-Id: GDvDu7sSkH2oBJ9bKyyubEXsJhP-eMlK0CwLladJOx-PIGhUMK1ZRw html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 26597Connection: keep-aliveLast-Modified: Sat, 12 Apr 2025 22:42:09 GMTServer: AmazonS3Date: Thu, 29 Jan 2026 10:01:49 GMTETag: 4227d11601f4b6fa6af829c8628b78d7X-Cache: RefreshHit from cloudfrontVia: 1.1 0a9acaac1641579d63bb7e6410165540.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P4Alt-Svc: h3:443; ma86400X-Amz-Cf-Id: eke6Sp7n9H83yO8QTX5tKuDnyKObc8bw8XTGDZftMKC1X5qqUhkLSw !DOCTYPE html>html xmlnshttp://www.w3.org/1999/xhtml langen xml:langen>head>meta charsetutf-8>meta namegenerator contentquarto-1.6.43>meta nameviewport contentwidthdevice-width, initial-scale1.0, user-scalableyes>title>Home – Dhruv’s Website/title>style>code{white-space: pre-wrap;}span.smallcaps{font-variant: small-caps;}div.columns{display: flex; gap: min(4vw, 1.5em);}div.column{flex: auto; overflow-x: auto;}div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}ul.task-list{list-style: none;}ul.task-list li inputtypecheckbox { width: 0.8em; margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ vertical-align: middle;}/style>script srcsite_libs/quarto-nav/quarto-nav.js>/script>script srcsite_libs/quarto-nav/headroom.min.js>/script>script srcsite_libs/clipboard/clipboard.min.js>/script>script srcsite_libs/quarto-search/autocomplete.umd.js>/script>script srcsite_libs/quarto-search/fuse.min.js>/script>script srcsite_libs/quarto-search/quarto-search.js>/script>meta namequarto:offset content./>script srcsite_libs/quarto-listing/list.min.js>/script>script srcsite_libs/quarto-listing/quarto-listing.js>/script>script srcsite_libs/quarto-html/quarto.js>/script>script srcsite_libs/quarto-html/popper.min.js>/script>script srcsite_libs/quarto-html/tippy.umd.min.js>/script>script srcsite_libs/quarto-html/anchor.min.js>/script>link hrefsite_libs/quarto-html/tippy.css relstylesheet>link hrefsite_libs/quarto-html/quarto-syntax-highlighting-d4d76bf8491c20bad77d141916dc28e1.css relstylesheet idquarto-text-highlighting-styles>script srcsite_libs/bootstrap/bootstrap.min.js>/script>link hrefsite_libs/bootstrap/bootstrap-icons.css relstylesheet>link hrefsite_libs/bootstrap/bootstrap-bddf5d948667db5a2359c6b88ab9b374.min.css relstylesheet append-hashtrue idquarto-bootstrap data-modelight>script idquarto-search-options typeapplication/json>{ location: navbar, copy-button: true, collapse-after: 3, panel-placement: end, type: overlay, limit: 50, keyboard-shortcut: f, /, s , show-item-context: tree, language: { search-no-results-text: No results, search-matching-documents-text: matching documents, search-copy-link-title: Copy link to search, search-hide-matches-text: Hide additional matches, search-more-match-text: more match in this document, search-more-matches-text: more matches in this document, search-clear-button-title: Clear, search-text-placeholder: , search-detached-cancel-button-title: Cancel, search-submit-button-title: Submit, search-label: Search }}/script>script> window.document.addEventListener(DOMContentLoaded, function (_event) { const listingTargetEl window.document.querySelector(#listing-home-posts .list); if (!listingTargetEl) { // No listing discovered, do not attach. return; } const options { valueNames: listing-title,listing-author,listing-date,listing-image,listing-description,{ data: index },{ data: categories },{ data: listing-date-sort },{ data: listing-file-modified-sort }, searchColumns: listing-title,listing-author,listing-date,listing-image,listing-description, }; windowquarto-listings windowquarto-listings || {}; windowquarto-listingslisting-home-posts new List(listing-home-posts, options); if (windowquarto-listing-loaded) { windowquarto-listing-loaded(); } }); window.addEventListener(hashchange,() > { if (windowquarto-listing-loaded) { windowquarto-listing-loaded(); } }) window.document.addEventListener(DOMContentLoaded, function (_event) { const listingTargetEl window.document.querySelector(#listing-home-projects .list); if (!listingTargetEl) { // No listing discovered, do not attach. return; } const options { valueNames: listing-title,listing-author,listing-date,listing-image,listing-description,{ data: index },{ data: categories },{ data: listing-date-sort },{ data: listing-file-modified-sort }, searchColumns: listing-title,listing-author,listing-date,listing-image,listing-description, }; windowquarto-listings windowquarto-listings || {}; windowquarto-listingslisting-home-projects new List(listing-home-projects, options); if (windowquarto-listing-loaded) { windowquarto-listing-loaded(); } }); window.addEventListener(hashchange,() > { if (windowquarto-listing-loaded) { windowquarto-listing-loaded(); } }) /script> script srchttps://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?featureses6>/script> script srchttps://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js typetext/javascript>/script>script typetext/javascript>const typesetMath (el) > { if (window.MathJax) { // MathJax Typeset window.MathJax.typeset(el); } else if (window.katex) { // KaTeX Render var mathElements el.getElementsByClassName(math); var macros ; for (var i 0; i mathElements.length; i++) { var texText mathElementsi.firstChild; if (mathElementsi.tagName SPAN) { window.katex.render(texText.data, mathElementsi, { displayMode: mathElementsi.classList.contains(display), throwOnError: false, macros: macros, fleqn: false }); } } }}window.Quarto { typesetMath};/script>meta propertyog:title contentHome – Dhruv’s Website>meta propertyog:description content>meta propertyog:image content./posts/building-a-lakehouse-with-delta-lake/assets/delta-rust-no-whitespace.svg>meta propertyog:site_name contentDhruvs Website>meta nametwitter:title contentHome – Dhruv’s Website>meta nametwitter:description content>meta nametwitter:image content./posts/building-a-lakehouse-with-delta-lake/assets/delta-rust-no-whitespace.svg>meta nametwitter:card contentsummary_large_image>/head>body classnav-fixed fullcontent>div idquarto-search-results>/div> header idquarto-header classheadroom fixed-top> nav classnavbar navbar-expand-lg data-bs-themedark> div classnavbar-container container-fluid> div classnavbar-brand-container mx-auto> a classnavbar-brand href./index.html> span classnavbar-title>Dhruv’s Website/span> /a> /div> div idquarto-search class titleSearch>/div> button classnavbar-toggler typebutton data-bs-togglecollapse data-bs-target#navbarCollapse aria-controlsnavbarCollapse rolemenu aria-expandedfalse aria-labelToggle navigation onclickif (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }> span classnavbar-toggler-icon>/span>/button> div classcollapse navbar-collapse idnavbarCollapse> ul classnavbar-nav navbar-nav-scroll ms-auto> li classnav-item> a classnav-link active href./index.html aria-currentpage> span classmenu-text>Home/span>/a> /li> li classnav-item> a classnav-link href./posts> span classmenu-text>Posts/span>/a> /li> li classnav-item> a classnav-link href./projects> span classmenu-text>Projects/span>/a> /li> li classnav-item> a classnav-link href./about.html> span classmenu-text>About/span>/a> /li> li classnav-item compact> a classnav-link hrefhttps://github.com/ddole-net> i classbi bi-github roleimg>/i> span classmenu-text>/span>/a> /li> /ul> /div> !-- /navcollapse --> div classquarto-navbar-tools>/div> /div> !-- /container-fluid --> /nav>/header>!-- content -->div idquarto-content classquarto-container page-columns page-rows-contents page-layout-article page-navbar>!-- sidebar -->!-- margin-sidebar --> !-- main -->main classcontent idquarto-document-content>header idtitle-block-header classquarto-title-block default>div classquarto-title>h1 classtitle>Home/h1>/div>div classquarto-title-meta> /div> /header>section idhello classlevel2>h2 classanchored data-anchor-idhello>Hello!/h2>p>Welcome to my website/p>/section>section idfeatured-posts classlevel2>h2 classanchored data-anchor-idfeatured-posts>Featured Posts/h2>div idlisting-home-posts classquarto-listing quarto-listing-container-grid>div classlist grid quarto-listing-cols-3>div classg-col-1 data-index0 data-listing-date-sort1744497690000 data-listing-file-modified-sort1744497690000 data-listing-date-modified-sortNaN data-listing-reading-time-sort5 data-listing-word-count-sort857>a href./posts/building-a-lakehouse-with-delta-lake/index.html classquarto-grid-link>div classquarto-grid-item card h-100 card-left>p classcard-img-top>img loadinglazy src./posts/building-a-lakehouse-with-delta-lake/assets/delta-rust-no-whitespace.svg classthumbnail-image card-img styleheight: 150px;>/p>div classcard-body post-contents>h5 classno-anchor card-title listing-title>Building a Lakehouse with Delta Lake/h5>div classcard-text listing-description>How to use the Delta Lake python library to manage massive amounts of data at scale./div>div classcard-attribution card-text-small justify>div classlisting-author>Dhruv Dole/div>div classlisting-date>Apr 12, 2025/div>/div>/div>/div>/a>/div>/div>div classlisting-no-matching d-none>No matching items/div>/div>/section>section idproject-showcase classlevel2>h2 classanchored data-anchor-idproject-showcase>Project Showcase/h2>div idlisting-home-projects classquarto-listing quarto-listing-container-grid>div classlist grid quarto-listing-cols-3>div classg-col-1 data-index0 data-listing-date-sort1744497690000 data-listing-file-modified-sort1744497690000 data-listing-date-modified-sortNaN data-listing-reading-time-sort1 data-listing-word-count-sort185>a href./projects/selfhosting/index.html classquarto-grid-link>div classquarto-grid-item card h-100 card-left>div classlisting-item-img-placeholder card-img-top styleheight: 150px;> /div>div classcard-body post-contents>h5 classno-anchor card-title listing-title>Self-Hosting/h5>div classcard-text listing-description>Hosting web apps and servers myself instead of paying for cloud subscriptions/div>div classcard-attribution card-text-small justify>div classlisting-author>/div>div classlisting-date>Apr 12, 2025/div>/div>/div>/div>/a>/div>/div>div classlisting-no-matching d-none>No matching items/div>/div>/section>/main> !-- /main -->script idquarto-html-after-body typeapplication/javascript>window.document.addEventListener(DOMContentLoaded, function (event) { const toggleBodyColorMode (bsSheetEl) > { const mode bsSheetEl.getAttribute(data-mode); const bodyEl window.document.querySelector(body); if (mode dark) { bodyEl.classList.add(quarto-dark); bodyEl.classList.remove(quarto-light); } else { bodyEl.classList.add(quarto-light); bodyEl.classList.remove(quarto-dark); } } const toggleBodyColorPrimary () > { const bsSheetEl window.document.querySelector(link#quarto-bootstrap); if (bsSheetEl) { toggleBodyColorMode(bsSheetEl); } } toggleBodyColorPrimary(); const icon ; const anchorJS new window.AnchorJS(); anchorJS.options { placement: right, icon: icon }; anchorJS.add(.anchored); const isCodeAnnotation (el) > { for (const clz of el.classList) { if (clz.startsWith(code-annotation-)) { return true; } } return false; } const onCopySuccess function(e) { // button target const button e.trigger; // dont keep focus button.blur(); // flash checked button.classList.add(code-copy-button-checked); var currentTitle button.getAttribute(title); button.setAttribute(title, Copied!); let tooltip; if (window.bootstrap) { button.setAttribute(data-bs-toggle, tooltip); button.setAttribute(data-bs-placement, left); button.setAttribute(data-bs-title, Copied!); tooltip new bootstrap.Tooltip(button, { trigger: manual, customClass: code-copy-button-tooltip, offset: 0, -8}); tooltip.show(); } setTimeout(function() { if (tooltip) { tooltip.hide(); button.removeAttribute(data-bs-title); button.removeAttribute(data-bs-toggle); button.removeAttribute(data-bs-placement); } button.setAttribute(title, currentTitle); button.classList.remove(code-copy-button-checked); }, 1000); // clear code selection e.clearSelection(); } const getTextToCopy function(trigger) { const codeEl trigger.previousElementSibling.cloneNode(true); for (const childEl of codeEl.children) { if (isCodeAnnotation(childEl)) { childEl.remove(); } } return codeEl.innerText; } const clipboard new window.ClipboardJS(.code-copy-button:not(data-in-quarto-modal), { text: getTextToCopy }); clipboard.on(success, onCopySuccess); if (window.document.getElementById(quarto-embedded-source-code-modal)) { const clipboardModal new window.ClipboardJS(.code-copy-buttondata-in-quarto-modal, { text: getTextToCopy, container: window.document.getElementById(quarto-embedded-source-code-modal) }); clipboardModal.on(success, onCopySuccess); } var localhostRegex new RegExp(/^(?:http|https):\/\/localhost\:?0-9*\//); var mailtoRegex new RegExp(/^mailto:/); var filterRegex new RegExp(/ + window.location.host + /); var isInternal (href) > { return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); } // Inspect non-navigation links and adorn them if external var links window.document.querySelectorAll(ahref:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not(aria-hidden):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)); for (var i0; ilinks.length; i++) { const link linksi; if (!isInternal(link.href)) { // undo the damage that might have been done by quarto-nav.js in the case of // links that we want to consider external if (link.dataset.originalHref ! undefined) { link.href link.dataset.originalHref; } } } function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { const config { allowHTML: true, maxWidth: 500, delay: 100, arrow: false, appendTo: function(el) { return el.parentElement; }, interactive: true, interactiveBorder: 10, theme: quarto, placement: bottom-start, }; if (contentFn) { config.content contentFn; } if (onTriggerFn) { config.onTrigger onTriggerFn; } if (onUntriggerFn) { config.onUntrigger onUntriggerFn; } window.tippy(el, config); } const noterefs window.document.querySelectorAll(aroledoc-noteref); for (var i0; inoterefs.length; i++) { const ref noterefsi; tippyHover(ref, function() { // use id or data attribute instead here let href ref.getAttribute(data-footnote-href) || ref.getAttribute(href); try { href new URL(href).hash; } catch {} const id href.replace(/^#\/?/, ); const note window.document.getElementById(id); if (note) { return note.innerHTML; } else { return ; } }); } const xrefs window.document.querySelectorAll(a.quarto-xref); const processXRef (id, note) > { // Strip column container classes const stripColumnClz (el) > { el.classList.remove(page-full, page-columns); if (el.children) { for (const child of el.children) { stripColumnClz(child); } } } stripColumnClz(note) if (id null || id.startsWith(sec-)) { // Special case sections, only their first couple elements const container document.createElement(div); if (note.children && note.children.length > 2) { container.appendChild(note.children0.cloneNode(true)); for (let i 1; i note.children.length; i++) { const child note.childreni; if (child.tagName P && child.innerText ) { continue; } else { container.appendChild(child.cloneNode(true)); break; } } if (window.Quarto?.typesetMath) { window.Quarto.typesetMath(container); } return container.innerHTML } else { if (window.Quarto?.typesetMath) { window.Quarto.typesetMath(note); } return note.innerHTML; } } else { // Remove any anchor links if they are present const anchorLink note.querySelector(a.anchorjs-link); if (anchorLink) { anchorLink.remove(); } if (window.Quarto?.typesetMath) { window.Quarto.typesetMath(note); } if (note.classList.contains(callout)) { return note.outerHTML; } else { return note.innerHTML; } } } for (var i0; ixrefs.length; i++) { const xref xrefsi; tippyHover(xref, undefined, function(instance) { instance.disable(); let url xref.getAttribute(href); let hash undefined; if (url.startsWith(#)) { hash url; } else { try { hash new URL(url).hash; } catch {} } if (hash) { const id hash.replace(/^#\/?/, ); const note window.document.getElementById(id); if (note ! null) { try { const html processXRef(id, note.cloneNode(true)); instance.setContent(html); } finally { instance.enable(); instance.show(); } } else { // See if we can fetch this fetch(url.split(#)0) .then(res > res.text()) .then(html > { const parser new DOMParser(); const htmlDoc parser.parseFromString(html, text/html); const note htmlDoc.getElementById(id); if (note ! null) { const html processXRef(id, note); instance.setContent(html); } }).finally(() > { instance.enable(); instance.show(); }); } } else { // See if we can fetch a full url (with no hash to target) // This is a special case and we should probably do some content thinning / targeting fetch(url) .then(res > res.text()) .then(html > { const parser new DOMParser(); const htmlDoc parser.parseFromString(html, text/html); const note htmlDoc.querySelector(main.content); if (note ! null) { // This should only happen for chapter cross references // (since there is no id in the URL) // remove the first header if (note.children.length > 0 && note.children0.tagName HEADER) { note.children0.remove(); } const html processXRef(null, note); instance.setContent(html); } }).finally(() > { instance.enable(); instance.show(); }); } }, function(instance) { }); } let selectedAnnoteEl; const selectorForAnnotation ( cell, annotation) > { let cellAttr data-code-cell + cell + ; let lineAttr data-code-annotation + annotation + ; const selector span + cellAttr + + lineAttr + ; return selector; } const selectCodeLines (annoteEl) > { const doc window.document; const targetCell annoteEl.getAttribute(data-target-cell); const targetAnnotation annoteEl.getAttribute(data-target-annotation); const annoteSpan window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); const lines annoteSpan.getAttribute(data-code-lines).split(,); const lineIds lines.map((line) > { return targetCell + - + line; }) let top null; let height null; let parent null; if (lineIds.length > 0) { //compute the position of the single el (top and bottom and make a div) const el window.document.getElementById(lineIds0); top el.offsetTop; height el.offsetHeight; parent el.parentElement.parentElement; if (lineIds.length > 1) { const lastEl window.document.getElementById(lineIdslineIds.length - 1); const bottom lastEl.offsetTop + lastEl.offsetHeight; height bottom - top; } if (top ! null && height ! null && parent ! null) { // cook up a div (if necessary) and position it let div window.document.getElementById(code-annotation-line-highlight); if (div null) { div window.document.createElement(div); div.setAttribute(id, code-annotation-line-highlight); div.style.position absolute; parent.appendChild(div); } div.style.top top - 2 + px; div.style.height height + 4 + px; div.style.left 0; let gutterDiv window.document.getElementById(code-annotation-line-highlight-gutter); if (gutterDiv null) { gutterDiv window.document.createElement(div); gutterDiv.setAttribute(id, code-annotation-line-highlight-gutter); gutterDiv.style.position absolute; const codeCell window.document.getElementById(targetCell); const gutter codeCell.querySelector(.code-annotation-gutter); gutter.appendChild(gutterDiv); } gutterDiv.style.top top - 2 + px; gutterDiv.style.height height + 4 + px; } selectedAnnoteEl annoteEl; } }; const unselectCodeLines () > { const elementsIds code-annotation-line-highlight, code-annotation-line-highlight-gutter; elementsIds.forEach((elId) > { const div window.document.getElementById(elId); if (div) { div.remove(); } }); selectedAnnoteEl undefined; }; // Handle positioning of the toggle window.addEventListener( resize, throttle(() > { elRect undefined; if (selectedAnnoteEl) { selectCodeLines(selectedAnnoteEl); } }, 10) ); function throttle(fn, ms) { let throttle false; let timer; return (...args) > { if(!throttle) { // first call gets through fn.apply(this, args); throttle true; } else { // all the others get throttled if(timer) clearTimeout(timer); // cancel #2 timer setTimeout(() > { fn.apply(this, args); timer throttle false; }, ms); } }; } // Attach click handler to the DT const annoteDls window.document.querySelectorAll(dtdata-target-cell); for (const annoteDlNode of annoteDls) { annoteDlNode.addEventListener(click, (event) > { const clickedEl event.target; if (clickedEl ! selectedAnnoteEl) { unselectCodeLines(); const activeEl window.document.querySelector(dtdata-target-cell.code-annotation-active); if (activeEl) { activeEl.classList.remove(code-annotation-active); } selectCodeLines(clickedEl); clickedEl.classList.add(code-annotation-active); } else { // Unselect the line unselectCodeLines(); clickedEl.classList.remove(code-annotation-active); } }); } const findCites (el) > { const parentEl el.parentElement; if (parentEl) { const cites parentEl.dataset.cites; if (cites) { return { el, cites: cites.split( ) }; } else { return findCites(el.parentElement) } } else { return undefined; } }; var bibliorefs window.document.querySelectorAll(aroledoc-biblioref); for (var i0; ibibliorefs.length; i++) { const ref bibliorefsi; const citeInfo findCites(ref); if (citeInfo) { tippyHover(citeInfo.el, function() { var popup window.document.createElement(div); citeInfo.cites.forEach(function(cite) { var citeDiv window.document.createElement(div); citeDiv.classList.add(hanging-indent); citeDiv.classList.add(csl-entry); var biblioDiv window.document.getElementById(ref- + cite); if (biblioDiv) { citeDiv.innerHTML biblioDiv.innerHTML; } popup.appendChild(citeDiv); }); return popup.innerHTML; }); } }});/script>/div> !-- /content -->/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]